- Fixed an issue where using a custom project language would break the project graph cache.
- Fixed an issue with pnpm lockfile parsing.
- Fixed an issue where the project graph cache wouldn't be invalidated if moon was ran from a sub-directory.
- Fixed an issue where failing tasks ran with the global
moon
binary wouldn't bubble up the correct exit code. - Fixed an issue where a root-level project was synced as a TypeScript project reference to itself.
- Task
inputs
declared as literal file paths will now be logged to the console as a warning when they do not exist during hashing.
- Fixed an issue when project dependencies that form a cycle would recurse indefinitely and panic.
- Fixed an issue where tasks with
cache
disabled were considered empty hashes when declared as a dependency of another task. - Fixed an issue where matching against
package.json
workspaces would sometimes fail. - Fixed an issue where glob parsing would sometimes fail on Windows.
- Unknown config fields will now display a warning.
- Fixed an issue where
moon docker setup
couldn't find the manifest file for staged builds.
- Added a
MOON_DEBUG_PROCESS_ENV
env var for debugging processes. - Updated glob failures to include the glob expression for easier debugging.
- Toolchain has been moved to
~/.proto
from~/.moon
. This should be a transparent change, but at minimum your tools will be re-downloaded and installed. - Targets that generate an empty hash are now considered a failure, as they may be an edge case not accounted for.
- Added a
moon docker setup
command for efficiently installing project dependencies. - Added a
moon query hash
command for inspecting the hash manifest. - Added a
moon query hash-diff
command for diffing 2 hashes. - Updated moon's toolchain to build upon proto, our new toolchain layer.
- Updated our toolchain and configuration to take
.prototools
into account.
- Fixed hashing to avoid including
git status
files when running in CI. - Fixed an issue where dependencies of an affected target were not always being ran.
- Fixed an issue where gitignored folders were being considered projects if the globs matched.
- Fixed an issue where project-level glob negations (starting with
!
) weren't being handled correctly.
- Updated terminal checkpoint colors for tools to pink (to match proto).
- Migrated to rustls from openssl. Please report any TLS/SSL issues.
- Loosened
package.json
parsing.
- Fixed an issue where an object
browser
field inpackage.json
would fail to parse. - Fixed an issue where checking for a new version would constantly run.
- Fixed an issue where
moon upgrade
would not report a newer available version.
- Fixed an issue where workspace relative
outputs
were not being included in the hashed tarball.
- Reduced new version check to once every 12 hours.
- Fixed an issue where hashing would attempt to hash a directory and crash.
- Fixed an issue where attempting to hash a large number of files (think 10,000) would hang.
- Fixed an issue where offline checks would take longer than expected.
- Fixed an issue where the project graph cache would not invalidate when Rust internals have changed.
- Added a
--force
flag tomoon run
that will bypass affected checks. Useful for always forcing a run in CI.
- Fixed an issue where
moon init
would panic while checking for a newer version.
- Updated
node.version
andnode.<packageManager>.version
to no longer default to a hard-coded version. When not defined, will fallback to the binary available onPATH
. - Updated touched files (in context and queries) to be workspace relative paths instead of absolute.
- Added experimental Deno tier 2 support.
- Added offline (no internet connection) support.
- Added project-level TypeScript settings via
toolchain.typescript
inmoon.yml
. - Updated
language
setting inmoon.yml
to support any custom language. - Updated project, task, and target identifiers to support periods (
.
).
- CI runs can now be tracked in moonbase to gather insights and metrics.
- Fixed an issue where task outputs were considered as input sources when hashing, causing unnecessary cache misses.
- Updated Rust to v1.67.
- Updated local development to support BSD based unix distros.
- Added
context
topipeline.started
andpipeline.finished
events. - Refactored glob matching to use workspace relative paths instead of absolute. Please report an issue if hashing or affected detection is now inaccurate.
- We now build against older operating systems in an attempt to solve GLIBC version errors.
- Fixed an issue where
moon query projects --affected
would hang indefinitely waiting for stdin. - Fixed an issue where changing
projects
globs wouldn't immediately invalidate the cache.
- Added Homebrew as an installation option.
- Added a
moon upgrade
command to upgrade moon to the latest version.
- Fixed
moon bin
failing, even when a tool has been configured.
- Fixed an issue around comparison estimate calculation for run reports.
Remote caching is now publicly available through our new service moonbase! Sign up for a free account and immediately see the benefits in your CI pipelines.
- Moved
moon query projects
JSON output behind a--json
flag. - Moved
moon query touched-files
JSON output behind a--json
flag.
- Added a
moon completions
command for generating shell completions. - Added TypeScript v5 support.
- Added a
hasher.walkStrategy
setting to.moon/workspace.yml
. - Updated
moon query projects
andmoon query touched-files
default output to be easily readable and parseable.
- Added a
platform
setting tomoon.yml
, allowing the default platform to be defined for all tasks. - Updated task
outputs
to support token functions (@group
,@globs
, etc).
- Added an
--interactive
flag tomoon run
to force a target to run in interactive mode. - Updated tasks marked as
local
to always run in interactive mode.
- Fixed an issue where moon would write to
package.json
ortsconfig.json
with no changes, causing modified events to trigger.
- Added initial Go lang support to our toolchain.
- Added a
comparisonEstimate
block to run reports. - Added
baselineDuration
andestimatedSavings
topipeline.finished
events.
- Fixed an issue where pnpm lockfile parsing would fail when not workspaces enabled.
- Fixed an issue where
git ls-files --deduplicate
wasn't available on older git versions.
- Minor internal changes for upcoming remote caching changes.
- Fixed a recursion issue when attempting to install dependencies and a post-install script would trigger the process again.
- Fixed an issue where a task may be hashed with the incorrect Node.js version.
- Fixed an issue when running Node.js tasks and the toolchain has not been configured.
- Fixed a typo when installing npm dependencies:
node install
->npm install
- Fixed an issue where scoped tasks were not being inherited for projects that relied on language detection.
- Renamed
.moon/project.yml
to.moon/tasks.yml
. - Moved
runner.implicitDeps
from.moon/workspace.yml
to.moon/tasks.yml
asimplicitDeps
. - Moved
runner.implicitInputs
from.moon/workspace.yml
to.moon/tasks.yml
asimplicitInputs
.
- We've improved our task inheritance model to support scoped inheritance based on a project's
language
andtype
.- Now supports
.moon/tasks/<language>.yml
and.moon/tasks/<language>-<type>.yml
configuration files.
- Now supports
- Added a top-level
env
setting tomoon.yml
. - Updated task
outputs
to support globs. - Updated
moon migrate from-turborepo
to preserve globs in outputs. - Updated project graph to no longer cache when there's no VCS root.
- Updated pnpm to use the new
pnpm dedupe
command when the version is >= 7.26.0.
- Fixed an issue where directories in task
inputs
not using**/*
would crash git. - Fixed an issue where the project graph cache was not always resetting based on changes.
- Fixed an issue where run report action durations were inaccurate.
- Updated our internal hasher to also take into account untracked files when hashing a directory.
- Renamed the
runner.*
webhook events topipeline.*
. - Renamed the
--upstream
option to--remote
. - Removed the
--report
option frommoon check
andmoon run
commands. Reports are now always created.
- We've improved our smart hashing for other use cases besides task running. The first improvement is that we now hash dependencies to determine whether to run a dependency install, or to skip! This is much more accurate than before, which only relied on lockfile modified timestamps.
- Added a
moon migrate from-turborepo
command to migrate from Turborepo to moon. - Updated
moon docker
commands to take into account other programming languages when scaffolding files.
- Added a
versionConstraint
setting to.moon/workspace.yml
that enforces a requirement on the running moon binary.
- We've refactored the pipeline to use a new thread pool strategy so that we have more control over concurrency. This also paves the way for future output reporters.
- Added global
--concurrency
option to allmoon
commands, allowing the thread count to be customized.
- Updated the
project
fields inmoon.yml
to be optional, excludingdescription
.
- Added Bun as a tier 1 language (doesn't do much at the moment).
- Our toolchain now creates shims for all installed tools, and also utilizes these shims when executing commands in the pipeline. (Unix only)
- Fixed an issue where
~/.moon
is deleted, but local caching isn't aware of it missing and fails to run a target. - Fixed an issue where long-running processes would not exit even after moon has exited.
- Fixed an issue where
runFromWorkspaceRoot
wasn't working correctly for node module binaries.
- Updated all global CLI arguments (
--log
, etc) to be able to passed anywhere in the command line. They no longer have to be passed before the command.
- Fixed an issue where a task's
platform
was being incorrectly merged when inheriting global tasks.
- Added a
--json
flag tomoon dep-graph
andmoon project-graph
that will return the nodes and edges data as JSON.
- We now include the version and file path of the moon binary being executed in the logs for debugging purposes.
- Updated remote caching to use a new upload endpoint.
- Fixed an issue with
moon project-graph
that would not include nodes without edges. - Fixed an issue running the install script in WSL.
- We've rewritten our project graph to use eager-loading instead of lazy-loading to improve performance, and to avoid mutating borrowed data across threads in Rust. We're also no longer cloning project information unnecessarily, which is a massive memory reduction boost.
- We've also rewritten our dependency graph in a similar fashion, and are now able to efficiently reference data from the project graph while building the dependency chain.
- You may now install the
@moonrepo/cli
package globally with pnpm and yarn. When running these globals, moon will attempt to use the binary found in the repo's node modules.
- Added a new cache level,
read-write
, that can be passed to--cache
orMOON_CACHE
. This is now the default level, whilewrite
is now a write-only level. - Added
--minimal
tomoon init
for quick scaffolding and prototyping. - Updated the system platform to include the operating system and architecture when hashing.
- Updated remote caching to use presigned URLs when available.
- Updated
moon dep-graph
andmoon project-graph
to serve interactive graph visualizers using the cytoscape library. The DOT output has moved behind a--dot
flag.
- Added
--updateCache
(-u
) tomoon check
andmoon run
that force updates the cache and bypasses any existing cache. - Added
args
andenv
as valid values for theaffectedFiles
task option. - Updated
moon run
andmoon query touched-files
to support a list of--status
options. - Updated pnpm prune to use the pnpm-deduplicate package.
- Added 24 hour temporary caching to version manifests to improve performance.
- Updated default versions of tools:
- pnpm 7.14.0 -> 7.18.2
- yarn 3.2.4 -> 3.3.0
- Fixed an issue where "installing yarn" would constantly show.
- Fixed an issue on Windows where
package.json
andtsconfig.json
would change newlines unexpectedly when saving. - Fixed an issue with
^:deps
that would resolve projects with a non-matching task.
- Updated Rust to v1.66.
- Fixed an issue where Node.js arm64 was no longer working within the toolchain.
- Fixed an issue where env files (
.env
) would not be considered as task inputs. We've also updatedenv_file
to be an implicit input. - Fixed an issue where changes to a nested
package.json
were not triggering automatic installs.
- Fixed a "byte index is out of bounds" panic when a task has caching disabled.
- Moved the
node
andtypescript
settings from.moon/workspace.yml
to a new config,.moon/toolchain.yml
. - Moved the
workspace.node
andworkspace.typescript
settings inmoon.yml
totoolchain.node
andtoolchain.typescript
.
- Added
runner.archivableTargets
to.moon/workspace.yml
to control which targets are cached as archives. - Added
vcs.remoteCandidates
to.moon/workspace.yml
to customize the remotes for git to query against. - Added support for
moduleSuffixes
andmoduleDetection
in TypeScripttsconfig.json
compiler options. - Added Google Cloud Build and AWS CodeBuild to the list of CI providers to detect. results.
- Implemented a new toolchain, that is more efficient and performant.
- Will now log to the terminal when node, npm, etc, are being installed for the first time.
- Updated the terminal output to include a shortened version of each task hash.
- Reworked the terminal output when running multiple tasks in parallel, or for long-running processes.
- Implemented a new file tree diffing algorithm that speeds up task output hydration by 10x.
- Updated pnpm to no longer run
pnpm prune
while deduping dependencies, as it produces unexpected results.
- Added
path_join
andpath_relative
template filters. - Added pre-defined template variables for the working dir, destination, and workspace root.
- When writing JSON files, it will now respect the
indent_style = tab
setting in the closest.editorconfig
. - When writing YAML files, indentation and formatting will be inferred from the closest
.editorconfig
as best as possible. - Fixed an issue where parsing
yarn.lock
would panic on certain Windows machines. - Fixed an issue where
moon docker prune
would remove required node modules.
- Migrated our json/yaml libraries to the official serde crates.
- Migrated to nextest for better testing performance.
- Task
affectedFiles
will also be set via theMOON_AFFECTED_FILES
env var.
- The runner will no longer attempt to install dependencies if running against affected files.
- Fixed some unexpected panics in relation to non-installed tools.
- We've refactored how npm/pnpm/yarn work in the toolchain. Previously, they were installed as
global packages (or via corepack) within the configured
~/.moon/tools/node
version. This approach worked but was susceptible to collisions, so now, these package managers are installed individually as their own tools at~/.moon/tools/npm
, etc. This change should be transparent to you, but we're documenting it just in case something breaks! - We've updated the dependency graph so that
InstallDeps
based actions use the task'splatform
instead of the project'slanguage
as the tool to install. This allows for granular control at the task level, and also unlocks the ability for project's to utilize multiple languages in the future.
- When writing JSON files, indentation and formatting will be inferred from the closest
.editorconfig
as best as possible. - When applicable,
moon ci
will group and collapse logs based on the current CI/CD environment. - Updated webhook payloads to contain information about the current CI/CD environment under the
environment
field.
- Added an
affectedFiles
task option, allowing a filtered list of paths based on affected files to be passed as command line arguments. Perfect for git hooks!
- When generating files and a JSON or YAML file exists at the destination, you now have the option of merging files, instead of replacing entirely.
- Fixed an issue where passthrough args were incorrectly being passed to non-primary targets when
using
moon run
. - Fixed an issue where a root-level project was not being marked as affected based on touched files.
- Fixed an issue where tool version overrides at the project-level were not properly being set, and configuration that is root-only was being referenced in projects.
- Fixed some CLI arguments that should be ran mutually exclusive with other arguments.
- Task hashes will now properly invalidate if their dependencies hashes have also changed.
- Updated Rust to v1.65.
- Another attempt at fixing missing cache issues.
- Fixed an issue where moon would crash on old git versions (< 2.22.0) attempting to get the branch name. We encourage everyone to use v2.22 as the git minimum version.
- Improved the resolution and hashing of
package.json
dependencies for Yarn and pnpm.
- Fixed an issue where caching would fail on missing
stdout.log
andstderr.log
files.
- Refactored
moon init
heavily for a better onboarding experience.- Each tool is now configured individually, with its own prompts. Tools can also be skipped.
- Tools can now be initialized after moon already exists, ala
moon init --tool node
. - Fixed many issues around the templates and rendering.
- Updated the
moon check
command to support an--all
flag. - Updated
moon migrate
commands to throw an error if the work tree is dirty. This can be bypassed with the new--skipTouchedFilesCheck
option. - Updated the
projects
setting in.moon/workspace.yml
to support globs and a map in unison. - Updated default versions of tools:
- node 16.17.0 -> 18.12.0
- pnpm 7.12.1 -> 7.14.0
- yarn 3.2.3 -> 3.2.4
- Added a
node.binExecArgs
setting to.moon/workspace.yml
, so that additionalnode
CLI arguments may be passed when executing the binary to run targets. - Updated the task
command
to default to "noop" when not defined. - The stdout and stderr of ran targets are now stored as individual log files in
.moon/cache/states/<project>/<task>
. This allows CI environments to cache them as artifacts, upload/download them, or simply help developers debug broken jobs.- Also, these log files are now stored in the output tarballs.
- Timestamps have been updated to UTC without timezone.
- Implemented a benchmarking system to start capturing performance changes.
- Improved language and platform interoperability.
- Extended configurations will now be temporarily cached for 4 hours.
- Refactored project and task name/id cleaning. Previously, unsupported characters were simply removed. Instead, we now replace them with dashes for better readability.
- The task
type
inmoon.yml
and.moon/project.yml
has been renamed toplatform
. - The
$taskType
token has been renamed to$taskPlatform
.
- All YAML configuration files can now use aliases and anchors!
- The
moon check
command can now use the--report
option.
- When defining
deps
within the current project, the~:
prefix is now optional. For example,~:build
can now be written as simplybuild
.
- Enum variables can now declare an object form for
values
, so that a custom label can be provided for each value item. - Added JSON schema support for the
template.yml
config.
- Implemented a new service for notifying you about events happening in moon. The first feature in this service is webhooks!
- Added a new
notifier.webhookUrl
setting to.moon/workspace.yml
, in which the webhooks endpoint can be defined.
- Enabled mimalloc. This reduces memory cost and increases runtime performance.
- Enabled link-time optimization, increases runtime performance.
- Fixed an issue where
moon init
would generate a config with invalid settings. - Fixed an issue where downloading a tool would fail, but moon would still continue.
- Projects can now override the workspace configured Node.js version on a per-project basis using
the new
workspace.node.version
setting inmoon.yml
. However, this does not override the package manager! - Package managers workspaces (via
package.json
) are no longer required. When not enabled, or a project is not within the workspace, it will install dependencies directly within the project root, and will utilize its own lockfile.
- Added a new
typescript.routeOutDirToCache
setting to.moon/workspace.yml
, that will update theoutDir
compiler option to route to.moon/cache/types
. - Added a new
typescript.syncProjectReferencesToPaths
setting to.moon/workspace.yml
, that will map project references to compiler optionpaths
aliases.
- Template files can now be suffixed with
.tera
or.twig
for syntax highlighting.
- The running command will now be displayed when installing dependencies (npm install, etc). This
can be toggled with the
runner.logRunningCommand
setting. - The dedupe command will now be displayed when running if the
node.dedupeOnLockfileChange
setting is enabled. - Added a new
runner.implicitDeps
setting to.moon/workspace.yml
, that will add taskdeps
to all tasks.
- Config file settings will now link to their API types.
- We've renamed and restructured the
.moon/cache
directory. If you were relying on any of these files, you'll need to update your implementation. - Updated Cargo dependencies. A big change was clap v3 -> v4, so if you encounter any CLI issues, please report.
- When running multiple targets in parallel, we've reworked the output prefix to be uniform amongst all targets, and to be colored to uniquely identify each target.
- Added a new
moon docker scaffold
command for scaffolding a skeleton workspace for use withinDockerfile
s. - Added a new
moon docker prune
command for pruning the Docker environment for a build/deply. - Added frontmatter support to all template files.
- Added a
node.yarn.plugins
setting to.moon/workspace.yml
. - Updated run reports (via
--report
) to include additional information, like the total duration, and estimated time savings. - Updated default versions of tools:
- node 16.16.0 -> 16.17.0
- npm 8.16.0 -> 8.19.2
- pnpm 7.9.0 -> 7.12.1
- yarn 3.2.2 -> 3.2.3
- Added missing
.npmrc
to the list of pnpm config files. - Improved the handling of Rust/Go binaries shipped in pnpm node modules.
- Updated Rust to v1.64.
- Windows:
- Will always use PowerShell and avoids
cmd.exe
entirely. - Reworked commands that run through PowerShell to pass arguments via stdin.
- Will always use PowerShell and avoids
- Fixed an issue where alias warnings were logged while scanning the dependency graph.
- Windows:
- Updated
*.cmd
executions to run with PowerShell when available. This resolves issues around file paths with special characters or spaces.
- Updated
- Released a new GitHub action,
moonrepo/run-report-action
!
- Reworked how caching/hashing works when running in a Docker container/image. If the VCS root
cannot be found, we disable caching. This removes the requirement of mounting a
.git
volume for Docker.
- Added a new
moon generate
command, for code generation and scaffolding. - Added a
generator
setting to.moon/workspace.yml
, for controlling aspects of the generator and its templates. - Updated the project graph to scan and find implicit dependencies based on language specific
semantics. For example, will determine moon project relationships based on
package.json
names and dependencies. - Updated
moon setup
to also install Node.js dependencies.
- Fixed an issue where project and task names were not being cleaned/formatted properly.
- The
node
setting in.moon/workspace.yml
is now optional, allowing repos to opt-out of Node.js support (in preparation for future languages support). This shouldn't affect you if the setting is already explicitly defined. - Renamed
actionRunner
setting torunner
in.moon/workspace.yml
.
- Added a new
moon check
command, for running all build/test tasks for a project(s). - Added a
hasher
setting to.moon/workspace.yml
, for controlling aspects of smart hashing. - Updated hashing to utilize the resolved version from the lockfile when applicable.
- Updated the action runner to fail when an output is defined and the output does not exist after being ran.
- Released a new
@moonrepo/types
npm package.
- The
SetupToolchain
action has been updated to be language/platform aware, and as such, was split intoSetupNodeTool
andSetupSystemTool
. - Output is now buffered when running a target. This should reduce tearing and increase performance.
- Upgraded all Cargo dependencies.
- Fixed
init
templates being populated with the wrong default values. - Fixed the "creation time is not available for the filesystem" error when running in Docker.
- The
typescript
setting in.moon/workspace.yml
is now optional, allowing repos to opt-out of TypeScript support. This shouldn't affect you if the setting is already explicitly defined.
- Added support for Linux ARM GNU (
aarch64-unknown-linux-gnu
). - Added support for Linux ARM musl (
aarch64-unknown-linux-musl
). - Added a
workspace.typescript
setting tomoon.yml
, allowing TypeScript support to be toggled per project. - Added a
--report
option to themoon run
command, for generating run reports for debugging. - Added an
--affected
option to themoon query projects
command. - Updated the task
command
to also support inline arguments. You can now mergecommand
andargs
into a single field.
- Fixed an issue where
system
tasks were hashing incorrect contents. - Fixed an issue where
envFile
is enabled and the relevant.env
file may not exist in CI.
- Added a
moon clean
command for manually clearing the cache. - Added an
actionRunner.cacheLifetime
setting to.moon/workspace.yml
, for controlling the stale cache threshold. - Added an
envFile
option to tasks, allowing.env
files to be loaded for environment variables. - Added a
local
setting to tasks, that marks the task for local development only. - Updated the
outputStyle
task option with additional variants:buffer
,buffer-only-failure
,hash
,none
. - Updated
moon run
to support running multiple targets concurrently.
- Fixed an issue where output hydration was bypassing "off" cache.
- Fixed an issue where parsing a node module binary would panic.
- Fixed an issue where moon would panic attempting to read non-JS code shipped in node modules (Rust or Go binaries).
- Fixed an issue where project globs would pickup dot folders (
.git
,.moon
, etc) ornode_modules
. - Fixed an issue where project names were stripping capital letters when using globs.
- Updated Rust to v1.63.
- Task outputs are now cached as
.tar.gz
archives, instead of being copied as-is. This shouldn't affect consumers, but we're raising awareness in case of any platform specific issues. - Renamed the project-level
project.yml
file tomoon.yml
. The.moon/project.yml
file has not changed.
- Projects now support language specific aliases, which can be used as a drop-in replacement for names within targets and dependencies.
- Project and tasks names now support forward slashes (
/
). - Added a
node.aliasPackageNames
setting to.moon/workspace.yml
, that aliases thepackage.json
name to the respective project. - Added an experimental
outputStyle
option to tasks, providing some control of how stdout/stderr is handled. - Added a
runDepsInParallel
option to tasks, that controls whether task dependencies run in parallel or serial (in order). - Updated tasks to automatically detect their
type
(when undefined) based on their definedcommand
. Will attempt to match against common system commands, likerm
,mkdir
, etc. - When in CI, Node.js will not install dependencies if they were already installed before moon runs. This should avoid unintentional and unnecessary double installs.
- Updated default versions of tools:
- node 16.15.0 -> 16.16.0
- npm 8.10.0 -> 8.16.0
- pnpm 7.1.5 -> 7.9.0
- yarn 3.2.1 -> 3.2.2
- Fixed some issues where task outputs were not being hydrated based on the state of the target/project.
- Fixed an issue where task outputs were not considered for hash generation.
- Fixed an issue where a root-level project cannot be configured with a glob. Updated
projects
glob matching to support'.'
. - Fixed an issue where moon was setup in a sub-folder. Updated git/svn to traverse upwards to find
the applicable root (
.git
, etc).
We've refactored our smart hashing layer to take into account different platforms (a task's type) in an effort to be more accurate, which now results in different hashes for the same build. Any previous builds are no longer valid and can be removed.
- Updated task
type
to be automatically inferred when the value is unknown, based on the owning project'slanguage
(javascript
= node,bash
= system, etc). - Updated
dependsOn
inproject.yml
to support an object form, where a scope (production, development, peer) can also be defined. This maps to the appropriate field inpackage.json
when syncing. - Added
batch
as a supported value for the projectlanguage
setting (Windows counter-part tobash
). - Added a
cache
option to tasks, which will disable smart hashing and output caching. - Added a
node.dependencyVersionFormat
setting to.moon/workspace.yml
, to customize the version format when syncing dependencies. - Added environment variable support to task
inputs
andactionRunner.implicitInputs
, in the format of$ENV_VAR
.
- Fixed an issue where pnpm didn't work with
node-linker=isolated
for nested node modules. - Fixed an issue where failing processes would display an empty error message.
- Outputs are now copied to
.moon/cache/outputs
instead of being hardlinked. - Package binaries are now resolved to their canonical path when a symlink.
- Fixed a crash when
node.packageManager
was set to "pnpm" or "yarn" butnode.pnpm
ornode.yarn
fields were not set.
This release was largely focused on interoperability with the Node.js ecosystem, specifically
package.json
scripts. It's the first step in many steps, so stay tuned!
- Added a special
noop
command for tasks. - Added a
moon migrate from-package-json
command for migratingpackage.json
scripts toproject.yml
tasks. - Added a
moon sync
command for manually syncing all projects in the workspace to a healthy state. - Added a
node.inferTasksFromScripts
setting to.moon/workspace.yml
, that will automatically infer tasks frompackage.json
scripts (with caveats). - Added aliases for popular commands:
moon r
->moon run
moon p
->moon project
moon pg
->moon project-graph
moon dg
->moon dep-graph
- Fixed an issue where files being hashed with git were not being cached accordingly.
- Runfiles are no longer cleaned up when running tasks.
- Reworked
package.json
andtsconfig.json
handling to avoid race conditions.
- The
language
andtype
settings inproject.yml
now default to "unknown" when the setting is not defined, or the config does not exist. However, the language will also now be inferred (below).
- Updated project
language
to be automatically inferred when the value is unknown, based on the existence of config files (package.json
= javascript,tsconfig.json
= typescript). - Updated the
InstallNodeDeps
action to install dependencies when apackage.json
change is detected. - Added a
moon dep-graph
command for displaying the entire dependency graph in DOT format. - Added
--language
and--type
filter options tomoon query projects
. - Added
$language
,$projectType
, and$taskType
token variables. - Added
dev
as a non-CI task identifier (alongsidestart
andserve
). - Token variables can now be used within task
inputs
. - Multiple token variables can now be used within the same string.
- Fixed an issue where package binaries would not execute on pnpm.
- Added a new
@group
token that can be used be taskargs
andinputs
. - Added a
moon query
command for querying information about moon, the environment, and more.- To start,
moon query touched-files
can be used to query touched files. The same filesmoon ci
andmoon run
use. - Also
moon query projects
can be used to query about projects in the project graph.
- To start,
- Added
bash
as a supported value for the projectlanguage
setting. - Added
typescript.createMissingConfig
andtypescript.rootOptionsConfigFileName
settings to.moon/workspace.yml
. - Updated TypeScript project reference syncing to automatically create missing
tsconfig.json
s. - Updated
moon setup
andmoon teardown
to display spinners while running.
- Fixed an issue with a globally installed moon not being executable in PowerShell.
- Fixed an issue with empty files being passed to
git hash-object
. - Fixed an issue where a
git merge-base
could not be resolved when base and head are provided.
- Updated Rust to v1.62.
- Refactored our action runner to support additional languages in the future.
- Refactored Windows to execute package binaries with
node.exe
directly, instead of withcmd.exe
+ the.bin/*.cmd
file.
- Added caching to our VCS layer which should greatly reduce the amount of
git
commands being executed. - Updated
moon init
to detectvcs.manager
andvcs.defaultBranch
from the environment.
- We now detect the current Windows terminal using the
COMSPEC
environment variable, instead of defaulting tocmd.exe
. - Improved our configuration layer so that error messages include more metadata.
- Added
#[track_caller]
to more easily diagnose panics.
- Fixed logs unintentionally logging non-moon messages.
- Added an
extends
setting to.moon/workspace.yml
and.moon/project.yml
. - Added a
actionRunner.logRunningCommand
setting to.moon/workspace.yml
for logging the task command being ran. - Added a global
--logFile
option to the CLI. Also supports a newMOON_LOG_FILE
environment variable. - When targets are being ran in parallel, their output is now prefixed with the target name to differentiate. This is currently only enabled in CI.
- More fixes around terminal color output and handling.
- Add "released in version" badges/labels to new features across all docs.
- Temporarily disabling offline internet checks as it has issues with VPNs. Will revisit in the future.
- Fixed an issue where tasks referencing workspace relative files were not being marked as affected.
- Fixed some issues during
moon init
config generation. - Improved offline checks by also verifying against Google's DNS.
- Moved the
project.type
setting inproject.yml
to the top-level. Is now simplytype
.
- Added support for a list of globs when configuring the
projects
setting in.moon/workspace.yml
. - Added a
actionRunner.inheritColorsForPipedTasks
setting to.moon/workspace.yml
for inheriting terminal colors for piped tasks. - Added a
language
setting toproject.yml
for defining the primary programming language of a project. - Added a global
--color
option to the CLI. Also supports a newMOON_COLOR
environment variable.
- Fixed many issues around terminal color output and handling.
- Added support for macOS silicon (
aarch64-apple-darwin
). - Added support for Linux musl (
x86_64-unknown-linux-musl
). - Added support for the
MOON_LOG
environment variable. - Added duration timestamps to all ran tasks in the terminal.
- Updated the JSON schemas to use the new package manager versions.
- Updated git file diffing to use
git merge-base
as the base reference. - Updated
moon run
to exit early if there are no tasks for the provided target. - Hashing will now ignore files that matched a pattern found in the root
.gitignore
. - Passthrough args can now be defined for multi-target runs (
:target
).
- Fixed an issue with the
.moon/workspace.yml
template being generating with invalid whitespace duringmoon init
.