With this release, we're landing Deno, our first supported language besides Node.js, and improving interoperability of languages as a whole.
Deno tier 2 support (experimental)
Three months ago we announced our new tiered support structure for languages, and as of
today, we're happy to announce that our second language to reach tier 2 is
Deno! With tier 2 support, we now analyze Deno specific configuration files
deno.json) to infer dependencies and relationships, as well as utilize this information for
inputs and hashing purposes. With that being said, we're marking this release as experimental until
we fine tune the implementation, and iron out all the bugs.
To get started with using Deno, enable the new
deno setting in
.moon/toolchain.yml. At this time, we don't have many settings to
configure, so simply defining an empty object is enough to enable the Deno platform! Learn more
about this in our Deno handbook.
Once enabled, you can start using
deno commands in your moon tasks. moon will automatically set
platform to "deno" when using a deno command.
command: 'deno fmt'
Because this is only tier 2 support, moon does not download and install Deno into its toolchain.
moon expects the
deno binary to exist in the current environment.
Deno, Bun, or Node.js, you can set the default
platform for all tasks at the project-level.
CI insights in moonbase
We've spent the last few weeks implementing a new moonbase feature called CI
insights, where we track all CI runs (via
moon ci), and all actions (tasks)
that have ran based on affected files. In the future these insights will help catch regressions,
alert on flakiness, provide granular metrics, and help monitor the health of your CI pipeline and
With this initial release, we track touched files, which targets are affected based on those files, an estimation on how much time was saved or lost, the actions that ran and their final status, outlined as a timeline.
Insights are enabled by default if you're using moonbase in your CI pipeline, and start using moon v0.25! You can disable insights gathering from your organization settings page.
moon assumes that an internet connection is always available, as we download and install tools into the toolchain, resolve versions against upstream manifests, and automatically install dependencies. While this is useful, having a constant internet connection isn't always viable.
In this release, we now check for an active internet connection and bypass certain workflows when applicable. Jump to the official guide on offline mode for more information!
Project's have always been able to define a
moon.yml that denotes the primary programming language for the project.
Historically this has been a strict enum of supported values, and could not be customized for
other languages. With the introduction of
language driven task inheritance, we felt like
revisiting this setting, and as such, you're now able to define any language in this setting,
which also feeds into the task inheritance system.
With this change,
.moon/tasks/dotnet.yml, and other
variations are now possible! However, besides task inheritance, other functionality like platform
detection, and Dockerfile support are not enabled.
Project-level TypeScript settings (breaking)
Our TypeScript integration supports many automated workflows, like syncing project references, and
outDir to our shared cache. This is wonderful for the majority, but for the handful of
projects where these settings were not viable, there was no simple way to disable or opt out of the
Well no more, projects can now override the workspace-level TypeScript settings
syncProjectReferencesToPaths through the
toolchain.typescript setting in
Because this setting was changed from a boolean to an object, the old pattern of disabling
Typescript must now use the
moonrepo/setup-moon-action GitHub action
If you're using GitHub Actions as your CI pipeline, we've introducing a new action called
moonrepo/setup-moon-action, that will install the
moon binary globally, and will cache (and restore) the moon toolchain.
With this new action, let moon handle all the heavy lifting, and avoid all the unnecessary steps around setting up Node.js, and install dependencies.
- uses: actions/checkout@v3
- uses: moonrepo/setup-moon-action@v1
- run: moon ci
View the official release for a full list of changes.
- Updated project, task, and target identifiers to support periods (
- 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.
Expect the following in the v0.26 release!
- Officially release proto!
- Improved Deno interoperability.