.moon/tasks.yml, .moon/tasks/*.yml
The .moon/tasks.yml
file configures file groups and tasks that are inherited by every project in
the workspace, while .moon/tasks/*.yml
configures for projects based on their language or type.
Learn more about task inheritance!
Projects can override or merge with these settings within their respective moon.yml
.
$schema: 'https://moonrepo.dev/schemas/tasks.json'
extends
v0.4
Defines an external .moon/tasks.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!
extends: 'https://raw.githubusercontent.com/organization/repository/master/.moon/tasks.yml'
For map-based settings, fileGroups
and tasks
, entries from both the extended configuration and
local configuration are merged into a new map, with the values of the local taking precedence. Map
values are not deep merged!
fileGroups
For more information on file group configuration, refer to the
fileGroups
section in themoon.yml
doc.
Defines file groups that will be inherited by projects, and also enables
enforcement of organizational patterns and file locations. For example, encourage projects to place
source files in a src
folder, and all test files in tests
.
fileGroups:
configs:
- '*.config.{js,cjs,mjs}'
- '*.json'
sources:
- 'src/**/*'
- 'types/**/*'
tests:
- 'tests/**/*'
- '**/__tests__/**/*'
assets:
- 'assets/**/*'
- 'images/**/*'
- 'static/**/*'
- '**/*.{scss,css}'
File paths and globs used within a file group are relative from the inherited project's root, and not the workspace.
implicitDeps
v0.23
Defines task deps
that are implicitly inserted into all inherited tasks within
a project. This is extremely useful for pre-building projects that are used extensively throughout
the repo, or always building project dependencies. Defaults to an empty list.
implicitDeps:
- '^:build'
implicitInputs
v0.23
Defines task inputs
that are implicitly inserted into all inherited tasks
within a project. This is extremely useful for the "changes to these files should always trigger a
task" scenario.
Like inputs
, file paths/globs defined here are relative from the inheriting project.
Project and workspace relative file patterns are
supported and encouraged.
implicitInputs:
- 'package.json'
tasks
For more information on task configuration, refer to the
tasks
section in themoon.yml
doc.
As mentioned in the link above, tasks are actions that are ran within the context of a project, and commonly wrap a system command. For most workspaces, every project should have linting, typechecking, testing, code formatting, so on and so forth. To reduce the amount of boilerplate that every project would require, this setting offers the ability to define tasks that are inherited by many projects within the workspace, but can also be overridden per project.
tasks:
format:
command: 'prettier --check .'
lint:
command: 'eslint --no-error-on-unmatched-pattern .'
test:
command: 'jest --passWithNoTests'
typecheck:
command: 'tsc --build'
Relative file paths and globs used within a task are relative from the inherited project's root, and not the workspace.