With this release, we've focused on requests from the community, instead of internal migration work or new features.
Bun as a package manager
Now that Bun v1 has officially released and our bun-plugin for proto has stabilized, we can start slowly integrating Bun support into moon. The first step in this series is adding Bun as a supported package manager for Node.js. Seems odd as they are conflicting runtimes... right? While true, a lot of users are interested in using Bun purely as a package manager, as it can install dependencies incredibly fast. So why not support it?
Additionally, you can now execute Bun commands within tasks! However, ensure the task's platform is
still set to
node though, as this is using Bun as a package manager within Node.js, not as a
command: 'bun test'
When using Bun, the following integrations are applied:
- Will automatically download and install Bun for the configured version.
- Will install dependencies using
bun install(deduping currently not supported).
- Will parse
bun.lockbfor dependency resolution and task hashing.
- Will use
npxfor one-off package executions.
- Can execute
buncommands within tasks.
This change only adds support for Bun as a package manager for Node.js. It does not add Bun as a supported language/platform in the toolchain, but it does pave the way for this to happen! Also note that Bun is not supported on Windows!
Configure Rust components and targets
We've had Rust tier 2 and 3 support for quite a while now, but there was a big missing piece: the ability to configure and install additional components and targets for the current toolchain. In this release, we've added support for both!
Simply configure the
rust.targets settings in
.moon/toolchain.yml, and moon will automatically install them when the
pipeline is ran. This functionality uses the same hashing implementation as
rust.bins, so will only install the first time, and again if the
configuration changes (or the cache is removed).
Force toolchain to use global binaries
Our toolchain is great for local development, as it ensures all developers and machines are running the exact versions of tools required for the workspace. However, it becomes overkill for other environments like CI and Docker where the environment has been pre-configured.
To avoid the unnecessary overhead of download and installing tools in the toolchain, we're
MOON_TOOLCHAIN_FORCE_GLOBALS environment variable. When provided, this will:
- Disable downloading and installing tools (will still download the WASM plugins).
- Execute all tool commands using the global binary available on
MOON_TOOLCHAIN_FORCE_GLOBALS=true moon ci
We're looking into ways to automate this process, but for now, this is the best solution.
View the official release for a full list of changes.
- Added an improved task inheritance chain resolver. To fallback to the previous behavior, set
- Added a new project type
automation, for projects like E2E and integration testing.
- Updated action graph cycle detection to list all nodes in the cycle (when detectable).
- Updated all npx calls to use a package manager equivalent. For example:
- Updated to support Yarn v4.