Skip to content

Latest commit

 

History

History
1109 lines (748 loc) · 39.5 KB

CHANGELOG_V0.md

File metadata and controls

1109 lines (748 loc) · 39.5 KB

Changelog v0

0.26.6

🐞 Fixes

  • Fixed an issue where using a custom project language would break the project graph cache.

0.26.5

🐞 Fixes

  • 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.

0.26.4

🐞 Fixes

  • 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.

0.26.3

🚀 Updates

  • Task inputs declared as literal file paths will now be logged to the console as a warning when they do not exist during hashing.

🐞 Fixes

  • Fixed an issue when project dependencies that form a cycle would recurse indefinitely and panic.

0.26.2

🐞 Fixes

  • 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.

0.26.1

🚀 Updates

  • Unknown config fields will now display a warning.

🐞 Fixes

  • Fixed an issue where moon docker setup couldn't find the manifest file for staged builds.

⚙️ Internal

  • Added a MOON_DEBUG_PROCESS_ENV env var for debugging processes.
  • Updated glob failures to include the glob expression for easier debugging.

0.26.0

💥 Breaking

  • 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.

🚀 Updates

  • 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.

🐞 Fixes

  • 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.

⚙️ Internal

  • 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.

0.25.4

🐞 Fixes

  • Fixed an issue where an object browser field in package.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.

0.25.3

🐞 Fixes

  • Fixed an issue where workspace relative outputs were not being included in the hashed tarball.

⚙️ Internal

  • Reduced new version check to once every 12 hours.

0.25.2

🐞 Fixes

  • 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.

0.25.1

🚀 Updates

  • Added a --force flag to moon run that will bypass affected checks. Useful for always forcing a run in CI.

🐞 Fixes

  • Fixed an issue where moon init would panic while checking for a newer version.

0.25.0

💥 Breaking

  • Updated node.version and node.<packageManager>.version to no longer default to a hard-coded version. When not defined, will fallback to the binary available on PATH.
  • Updated touched files (in context and queries) to be workspace relative paths instead of absolute.

🚀 Updates

  • Added experimental Deno tier 2 support.
  • Added offline (no internet connection) support.
  • Added project-level TypeScript settings via toolchain.typescript in moon.yml.
  • Updated language setting in moon.yml to support any custom language.
  • Updated project, task, and target identifiers to support periods (.).
Moonbase
  • CI runs can now be tracked in moonbase to gather insights and metrics.

🐞 Fixes

  • Fixed an issue where task outputs were considered as input sources when hashing, causing unnecessary cache misses.

⚙️ Internal

  • Updated Rust to v1.67.
  • Updated local development to support BSD based unix distros.
  • Added context to pipeline.started and pipeline.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.

0.24.3

🐞 Fixes

  • 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.

0.24.2

🚀 Updates

  • Added Homebrew as an installation option.
  • Added a moon upgrade command to upgrade moon to the latest version.

🐞 Fixes

  • Fixed moon bin failing, even when a tool has been configured.

0.24.1

🐞 Fixes

  • Fixed an issue around comparison estimate calculation for run reports.

0.24.0

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.

💥 Breaking

  • Moved moon query projects JSON output behind a --json flag.
  • Moved moon query touched-files JSON output behind a --json flag.

🚀 Updates

  • 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 and moon query touched-files default output to be easily readable and parseable.
Projects
  • Added a platform setting to moon.yml, allowing the default platform to be defined for all tasks.
  • Updated task outputs to support token functions (@group, @globs, etc).
Runner
  • Added an --interactive flag to moon run to force a target to run in interactive mode.
  • Updated tasks marked as local to always run in interactive mode.

🐞 Fixes

  • Fixed an issue where moon would write to package.json or tsconfig.json with no changes, causing modified events to trigger.

⚙️ Internal

  • Added initial Go lang support to our toolchain.
  • Added a comparisonEstimate block to run reports.
  • Added baselineDuration and estimatedSavings to pipeline.finished events.

0.23.4

🐞 Fixes

  • Fixed an issue where pnpm lockfile parsing would fail when not workspaces enabled.

0.23.3

🐞 Fixes

  • Fixed an issue where git ls-files --deduplicate wasn't available on older git versions.

⚙️ Internal

  • Minor internal changes for upcoming remote caching changes.

0.23.2

🐞 Fixes

  • 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

0.23.1

🐞 Fixes

  • Fixed an issue where scoped tasks were not being inherited for projects that relied on language detection.

0.23.0

💥 Breaking

  • Renamed .moon/project.yml to .moon/tasks.yml.
  • Moved runner.implicitDeps from .moon/workspace.yml to .moon/tasks.yml as implicitDeps.
  • Moved runner.implicitInputs from .moon/workspace.yml to .moon/tasks.yml as implicitInputs.

🚀 Updates

  • We've improved our task inheritance model to support scoped inheritance based on a project's language and type.
    • Now supports .moon/tasks/<language>.yml and .moon/tasks/<language>-<type>.yml configuration files.
  • Added a top-level env setting to moon.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.

🐞 Fixes

  • 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.

⚙️ Internal

  • Updated our internal hasher to also take into account untracked files when hashing a directory.

0.22.0

💥 Breaking

  • Renamed the runner.* webhook events to pipeline.*.
  • Renamed the --upstream option to --remote.
  • Removed the --report option from moon check and moon run commands. Reports are now always created.

🚀 Updates

  • 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.
Config
  • Added a versionConstraint setting to .moon/workspace.yml that enforces a requirement on the running moon binary.
Pipeline
  • 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 all moon commands, allowing the thread count to be customized.
Projects
  • Updated the project fields in moon.yml to be optional, excluding description.
Toolchain
  • 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)

🐞 Fixes

  • 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.

0.21.4

🐞 Fixes

  • Fixed an issue where runFromWorkspaceRoot wasn't working correctly for node module binaries.

0.21.3

🚀 Updates

  • 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.

🐞 Fixes

  • Fixed an issue where a task's platform was being incorrectly merged when inheriting global tasks.

0.21.2

🚀 Updates

  • Added a --json flag to moon dep-graph and moon project-graph that will return the nodes and edges data as JSON.

⚙️ Internal

  • 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.

0.21.1

🐞 Fixes

  • Fixed an issue with moon project-graph that would not include nodes without edges.
  • Fixed an issue running the install script in WSL.

0.21.0

🚀 Updates

  • 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.
Core
  • Added a new cache level, read-write, that can be passed to --cache or MOON_CACHE. This is now the default level, while write is now a write-only level.
  • Added --minimal to moon 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.
Graphs
  • Updated moon dep-graph and moon project-graph to serve interactive graph visualizers using the cytoscape library. The DOT output has moved behind a --dot flag.
Runner
  • Added --updateCache (-u) to moon check and moon run that force updates the cache and bypasses any existing cache.
  • Added args and env as valid values for the affectedFiles task option.
  • Updated moon run and moon query touched-files to support a list of --status options.
  • Updated pnpm prune to use the pnpm-deduplicate package.
Toolchain
  • 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

🐞 Fixes

  • Fixed an issue where "installing yarn" would constantly show.
  • Fixed an issue on Windows where package.json and tsconfig.json would change newlines unexpectedly when saving.
  • Fixed an issue with ^:deps that would resolve projects with a non-matching task.

⚙️ Internal

  • Updated Rust to v1.66.

0.20.3

🐞 Fixes

  • Fixed an issue where Node.js arm64 was no longer working within the toolchain.

0.20.2

🐞 Fixes

  • Fixed an issue where env files (.env) would not be considered as task inputs. We've also updated env_file to be an implicit input.
  • Fixed an issue where changes to a nested package.json were not triggering automatic installs.

0.20.1

🐞 Fixes

  • Fixed a "byte index is out of bounds" panic when a task has caching disabled.

0.20.0

💥 Breaking

  • Moved the node and typescript settings from .moon/workspace.yml to a new config, .moon/toolchain.yml.
  • Moved the workspace.node and workspace.typescript settings in moon.yml to toolchain.node and toolchain.typescript.

🚀 Updates

  • 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 and moduleDetection in TypeScript tsconfig.json compiler options.
  • Added Google Cloud Build and AWS CodeBuild to the list of CI providers to detect. results.
Toolchain
  • 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.
Runner
  • 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.
Generator
  • Added path_join and path_relative template filters.
  • Added pre-defined template variables for the working dir, destination, and workspace root.

🐞 Fixes

  • 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.

⚙️ Internal

  • Migrated our json/yaml libraries to the official serde crates.
  • Migrated to nextest for better testing performance.

0.19.1

🚀 Updates

  • Task affectedFiles will also be set via the MOON_AFFECTED_FILES env var.

🐞 Fixes

  • The runner will no longer attempt to install dependencies if running against affected files.
  • Fixed some unexpected panics in relation to non-installed tools.

0.19.0

💥 Breaking

  • 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's platform instead of the project's language 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.

🚀 Updates

  • 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.
Runner
  • 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!
Generator
  • 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.

🐞 Fixes

  • 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.

⚙️ Internal

  • Updated Rust to v1.65.

0.18.2

🐞 Fixes

  • 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.

0.18.1

🚀 Updates

  • Improved the resolution and hashing of package.json dependencies for Yarn and pnpm.

🐞 Fixes

  • Fixed an issue where caching would fail on missing stdout.log and stderr.log files.

0.18.0

🚀 Updates

  • 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
Runner
  • Added a node.binExecArgs setting to .moon/workspace.yml, so that additional node 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.

⚙️ Internal

  • 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.

0.17.0

💥 Breaking

  • 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 in moon.yml and .moon/project.yml has been renamed to platform.
  • The $taskType token has been renamed to $taskPlatform.

🚀 Updates

  • All YAML configuration files can now use aliases and anchors!
  • The moon check command can now use the --report option.
Tasks
  • When defining deps within the current project, the ~: prefix is now optional. For example, ~:build can now be written as simply build.
Generator
  • 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.
Notifier
  • 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.

⚡️ Performance

  • Enabled mimalloc. This reduces memory cost and increases runtime performance.
  • Enabled link-time optimization, increases runtime performance.

0.16.1

🐞 Fixes

  • 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.

0.16.0

🚀 Updates

Projects
  • Projects can now override the workspace configured Node.js version on a per-project basis using the new workspace.node.version setting in moon.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.
TypeScript
  • Added a new typescript.routeOutDirToCache setting to .moon/workspace.yml, that will update the outDir 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 option paths aliases.
Generator
  • Template files can now be suffixed with .tera or .twig for syntax highlighting.
Runner
  • 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 task deps to all tasks.

📚 Docs

  • Config file settings will now link to their API types.

⚙️ Internal

  • 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.

0.15.0

🚀 Updates

  • 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 within Dockerfiles.
  • 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

🐞 Fixes

  • Added missing .npmrc to the list of pnpm config files.
  • Improved the handling of Rust/Go binaries shipped in pnpm node modules.

⚙️ Internal

  • 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.

0.14.1

🐞 Fixes

  • 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.

0.14.0

🎉 Release

💥 Breaking

  • 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.

🚀 Updates

  • 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.

🐞 Fixes

  • Fixed an issue where project and task names were not being cleaned/formatted properly.

0.13.0

💥 Breaking

  • 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 to runner in .moon/workspace.yml.

🚀 Updates

  • 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.

⚙️ Internal

  • The SetupToolchain action has been updated to be language/platform aware, and as such, was split into SetupNodeTool and SetupSystemTool.
  • Output is now buffered when running a target. This should reduce tearing and increase performance.
  • Upgraded all Cargo dependencies.

0.12.1

🐞 Fixes

  • 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.

0.12.0

💥 Breaking

  • 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.

🚀 Updates

  • 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 to moon.yml, allowing TypeScript support to be toggled per project.
  • Added a --report option to the moon run command, for generating run reports for debugging.
  • Added an --affected option to the moon query projects command.
  • Updated the task command to also support inline arguments. You can now merge command and args into a single field.

0.11.1

🐞 Fixes

  • 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.

0.11.0

🚀 Updates

  • 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.

🐞 Fixes

  • 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) or node_modules.
  • Fixed an issue where project names were stripping capital letters when using globs.

⚙️ Internal

  • Updated Rust to v1.63.

0.10.0

💥 Breaking

  • 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 to moon.yml. The .moon/project.yml file has not changed.

🚀 Updates

  • 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 the package.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 defined command. Will attempt to match against common system commands, like rm, 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

🐞 Fixes

  • 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.

0.9.1

🐞 Fixes

  • 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).

0.9.0

💥 Breaking

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.

🚀 Updates

  • Updated task type to be automatically inferred when the value is unknown, based on the owning project's language (javascript = node, bash = system, etc).
  • Updated dependsOn in project.yml to support an object form, where a scope (production, development, peer) can also be defined. This maps to the appropriate field in package.json when syncing.
  • Added batch as a supported value for the project language setting (Windows counter-part to bash).
  • 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 and actionRunner.implicitInputs, in the format of $ENV_VAR.

🐞 Fixes

  • 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.

⚙️ Internal

  • Outputs are now copied to .moon/cache/outputs instead of being hardlinked.
  • Package binaries are now resolved to their canonical path when a symlink.

0.8.1

🐞 Fixes

  • Fixed a crash when node.packageManager was set to "pnpm" or "yarn" but node.pnpm or node.yarn fields were not set.

0.8.0

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!

🚀 Updates

  • Added a special noop command for tasks.
  • Added a moon migrate from-package-json command for migrating package.json scripts to project.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 from package.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

🐞 Fixes

  • Fixed an issue where files being hashed with git were not being cached accordingly.

⚙️ Internal

  • Runfiles are no longer cleaned up when running tasks.
  • Reworked package.json and tsconfig.json handling to avoid race conditions.

0.7.0

💥 Breaking

  • The language and type settings in project.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).

🚀 Updates

  • 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 a package.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 to moon query projects.
  • Added $language, $projectType, and $taskType token variables.
  • Added dev as a non-CI task identifier (alongside start and serve).
  • Token variables can now be used within task inputs.
  • Multiple token variables can now be used within the same string.

🐞 Fixes

  • Fixed an issue where package binaries would not execute on pnpm.

0.6.0

🚀 Updates

  • Added a new @group token that can be used be task args and inputs.
  • 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 files moon ci and moon run use.
    • Also moon query projects can be used to query about projects in the project graph.
  • Added bash as a supported value for the project language setting.
  • Added typescript.createMissingConfig and typescript.rootOptionsConfigFileName settings to .moon/workspace.yml.
  • Updated TypeScript project reference syncing to automatically create missing tsconfig.jsons.
  • Updated moon setup and moon teardown to display spinners while running.

🐞 Fixes

  • 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.

⚙️ Internal

  • 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 with cmd.exe + the .bin/*.cmd file.

0.5.0

🚀 Updates

  • Added caching to our VCS layer which should greatly reduce the amount of git commands being executed.
  • Updated moon init to detect vcs.manager and vcs.defaultBranch from the environment.

⚙️ Internal

  • We now detect the current Windows terminal using the COMSPEC environment variable, instead of defaulting to cmd.exe.
  • Improved our configuration layer so that error messages include more metadata.
  • Added #[track_caller] to more easily diagnose panics.

0.4.1

🐞 Fixes

  • Fixed logs unintentionally logging non-moon messages.

0.4.0

🚀 Updates

  • 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 new MOON_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.

🐞 Fixes

  • More fixes around terminal color output and handling.

📚 Documentation

  • Add "released in version" badges/labels to new features across all docs.

⚙️ Internal

  • Temporarily disabling offline internet checks as it has issues with VPNs. Will revisit in the future.

0.3.1

🐞 Fixes

  • 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.

0.3.0

💥 Breaking

  • Moved the project.type setting in project.yml to the top-level. Is now simply type.

🚀 Updates

  • 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 to project.yml for defining the primary programming language of a project.
  • Added a global --color option to the CLI. Also supports a new MOON_COLOR environment variable.

🐞 Fixes

  • Fixed many issues around terminal color output and handling.

0.2.0

🚀 Updates

  • 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).

🐞 Fixes

  • Fixed an issue with the .moon/workspace.yml template being generating with invalid whitespace during moon init.