.moon/workspace.yml file configures projects and services in the workspace. This file is
Defines an external
.moon/workspace.yml to extend and inherit settings from. Perfect for
reusability and sharing configuration across repositories and projects. When defined, this setting
must be an HTTPS URL or relative file system path that points to a valid YAML document!
Settings will be merged recursively for blocks, with values defined in the local configuration
taking precedence over those defined in the extended configuration. However, the
does not merge!
Defines the location of all projects within the workspace. Supports either a manual map of projects (default), a list of globs in which to automatically locate projects, or both.
Projects that depend on each other and form a cycle must be avoided! While we do our best to avoid an infinite loop and disconnect nodes from each other, there's no guarantee that tasks will run in the correct order.
Using a map
When using a map, each project must be manually configured and requires a unique name as the map key, where this name is used heavily on the command line and within the project graph for uniquely identifying the project amongst all projects. The map value (known as the project source) is a file system path to the project folder, relative from the workspace root, and must be contained within the workspace boundary.
If manually mapping projects is too tedious or cumbersome, you may provide a list of globs to automatically locate all project folders, relative from the workspace root.
When using this approach, the project name is derived from the project folder name, and is cleaned to our supported characters . Furthermore, globbing does risk the chance of collision, and when that happens, we log a warning and skip the conflicting project from being configured in the project graph.
Using a map and globs
For those situations where you want to use both patterns, you can! The list of globs can be
defined under a
globs field, while the map of projects under a
Configures code owners (
CODEOWNERS) integration across the entire workspace.
This setting defines file patterns and their owners at the workspace-level, and are applied to any matching path, at any depth, within the entire workspace. This is useful for defining global or fallback owners when a granular project-level path does not match or exist.
The order in which code owners, grouped by project, are listed in the
CODEOWNERS file. Accepts
"file-source" (default) or "project-name".
Will automatically generate a
CODEOWNERS file by aggregating and syncing all project
owners in the workspace when a target is run. The format
and location of the
CODEOWNERS file is based on the
vcs.provider setting. Defaults
Configures constraints between projects that are enforced during project graph generation. This is also known as project boundaries.
Enforces allowed relationships between a project its dependencies based on the project's
type setting. When a project depends on another project of an invalid type, an
error will be thrown when attempting to run a task. The following relationships are enforced when
this setting is enabled, which defaults to
- Applications can only depend on libraries or tools.
- Libraries can only depend on other libraries.
- Tools can only depend on libraries.
Projects with an unconfigured or unknown type are ignored during enforcement.
Enforces allowed relationships between a project and its dependencies based on the project's
tags setting. This works in a similar fashion to
enforceProjectTypeRelationships, but gives you far more control over what these relationships look
For example, let's enforce that Next.js projects using the
next tag can only depend on React
projects using the
react tag. If a dependency does not have one of the configured required tags,
in this case
react, an error will occur.
On the project side, we would configure
moon.yml like so:
Enable or disable experiments that alter core functionality.
Enforces strict boundaries for task outputs and will error when multiple tasks write to the same
output location. This includes output globs that overlap with literal output file paths. Defaults to
true, and will be fully enabled by default in a future release.
Configures aspects of the template generator.
A list of file system paths where templates can be located, relative from the workspace root.
Configures aspects of the smart hashing layer.
When hashing a list of files, we split the list into batches to help reduce memory footprint and
avoid overloading the configured VCS. This setting controls how many files are in each batch and
If you're running into memory issues, or moon hanging during the file hashing process, lowering this number may help resolve the issue.
hasher.warnOnMissingInputs is enabled, moon will log a warning to the
terminal that an input is missing. This is useful for uncovering misconfigurations, but can be quite
noisy when inputs are truly optional.
To ignore warnings for missing inputs, a list of glob patterns can
be configured to filter and ignore files. Files are matched against workspace relative paths, so
prefixing patterns with
**/ is suggested.
A list of glob patterns used to filter and ignore files during the
inputs hashing process. Files are matched against workspace relative paths, so prefixing patterns
**/ is suggested.
Determines the optimization level to utilize when hashing content before running targets.
accuracy(default) - When hashing dependency versions, utilize the resolved value in the lockfile. This requires parsing the lockfile, which may reduce performance.
performance- When hashing dependency versions, utilize the value defined in the manifest. This is typically a version range or requirement.
Defines the file system walking strategy to utilize when discovering inputs to hash.
glob- Walks the file system using glob patterns.
vcs(default) - Calls out to the VCS to extract files from its working tree.
When enabled, will log warnings to the console when attempting to hash an input that does not exist.
This is useful in uncovering misconfigured tasks. Defaults to
Configures how moon notifies and interacts with a developer or an external system.
Defines an HTTPS URL that all pipeline events will be posted to. View the webhooks guide for more information on available events.
Configures aspects of the action pipeline.
The maximum lifetime of cached artifacts before they're marked as stale and automatically removed by the action pipeline. Defaults to "7 days". This field requires an integer and a timeframe unit that can be parsed as a duration.
cacheLifetime: '24 hours'
Defines a list of targets, with or without scope, that will be cached and archived within the runner. Tasks that produce outputs are automatically archived, and do not need to be defined here. Defaults to an empty list.
This setting primarily exists for remote caching as it will create and persist tar archives located in
Force colors to be inherited from the current terminal for all tasks that are ran as a child process
and their output is piped to the action pipeline. Defaults to
View more about color handling in moon.
When enabled, will log the task's command, resolved arguments, and working directory when a target
is ran. Defaults to
When enabled, will check for a newer moon version and send anonymous usage data to the moonrepo
team. This data is used to improve the quality and reliability of the tool. Defaults to
Configures the version control system to utilize within the workspace (and repository). A VCS is required for determining touched (added, modified, etc) files, calculating file hashes, computing affected files, and much more.
Defines the default branch in the repository for comparing differences against. For git, this is typically "master" (default) or "main".
Defines a mapping of hooks to a list of commands to run when that event is triggered. There are no restrictions to what commands can be run, but the binaries for each command must exist on each machine that will be running hooks.
- 'moon run :lint :format --affected --status=staged'
moon commands directly, the
moon binary must be installed globally!
Defines the VCS tool/binary that is being used for managing the repository. Accepts "git" (default). Expect more version control systems in the future!
Defines the service provider that the repository is hosted on. Accepts "github" (default), "gitlab", "bitbucket", or "other".
(Git only) Defines a list of remote candidates to query agaist to determine merge bases. Defaults to "origin" and "upstream".
When enabled, this will sync hooks for all users of the repository. For personal or small projects, this may be fine, but for larger projects, this may be undesirable and disruptive!
Defines a semantic version requirement for the currently running moon binary. This provides a mechanism for enforcing that the globally installed moon on every developers machine is using an applicable version.