Skip to content

Commit

Permalink
feat(core): allow disabling modules, services, tests + tasks in confi…
Browse files Browse the repository at this point in the history
…gs (#1515)

* feat(core): allow disabling modules, services, tests + tasks in configs

This adds an optional `disabled` boolean field to all modules, and
where applicable to service, task and test config schemas.

The semantics are explained both in docs and unit tests, but they are
as follows:

- Disabling a module disables all services, tasks and tests within it.
- A disabled module may still be built if it is a build dependency of
  another module.
- Disabled services are never deployed and are ignored if listed as
  runtime dependencies.
- Disabled tasks are never run and are ignored if listed as
  runtime dependencies.
- Disabled tests are never run.
- An error if throw if trying to explicitly run a service, task or test
  via `garden run ...`, unless the `--force` flag is set.
  • Loading branch information
edvald authored Jan 21, 2020
1 parent c6a0fed commit 54d74cc
Show file tree
Hide file tree
Showing 105 changed files with 4,028 additions and 1,588 deletions.
80 changes: 52 additions & 28 deletions docs/module-types/conftest.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,45 +38,50 @@ name:

description:

# Specify a list of POSIX-style paths or globs that should be regarded as the source files for
# this
# module. Files that do *not* match these paths or globs are excluded when computing the version
# of the module,
# Set this to `true` to disable the module. You can use this with conditional template strings to
# disable modules based on, for example, the current environment or other variables (e.g.
# `disabled: \${environment.name == "prod"}`). This can be handy when you only need certain modules for
# specific environments, e.g. only for development.
#
# Disabling a module means that any services, tasks and tests contained in it will not be deployed or run.
# It also means that the module is not built _unless_ it is declared as a build dependency by another enabled
# module (in which case building this module is necessary for the dependant to be built).
#
# If you disable the module, and its services, tasks or tests are referenced as _runtime_ dependencies, Garden
# will automatically ignore those dependency declarations. Note however that template strings referencing the
# module's service or task outputs (i.e. runtime outputs) will fail to resolve when the module is disabled,
# so you need to make sure to provide alternate values for those if you're using them, using conditional
# expressions.
disabled: false

# Specify a list of POSIX-style paths or globs that should be regarded as the source files for this
# module. Files that do *not* match these paths or globs are excluded when computing the version of the module,
# when responding to filesystem watch events, and when staging builds.
#
# Note that you can also _exclude_ files using the `exclude` field or by placing `.gardenignore`
# files in your
# Note that you can also _exclude_ files using the `exclude` field or by placing `.gardenignore` files in your
# source tree, which use the same format as `.gitignore` files. See the
# [Configuration Files
# guide](https://docs.garden.io/guides/configuration-files#including-excluding-files-and-directories)
# for details.
# guide](https://docs.garden.io/guides/configuration-files#including-excluding-files-and-directories) for details.
#
# Also note that specifying an empty list here means _no sources_ should be included.
include:

# Specify a list of POSIX-style paths or glob patterns that should be excluded from the module.
# Files that
# match these paths or globs are excluded when computing the version of the module, when
# responding to filesystem
# Specify a list of POSIX-style paths or glob patterns that should be excluded from the module. Files that
# match these paths or globs are excluded when computing the version of the module, when responding to filesystem
# watch events, and when staging builds.
#
# Note that you can also explicitly _include_ files using the `include` field. If you also specify
# the
# `include` field, the files/patterns specified here are filtered from the files matched by
# `include`. See the
# Note that you can also explicitly _include_ files using the `include` field. If you also specify the
# `include` field, the files/patterns specified here are filtered from the files matched by `include`. See the
# [Configuration Files
# guide](https://docs.garden.io/guides/configuration-files#including-excluding-files-and-directories)for
# details.
# guide](https://docs.garden.io/guides/configuration-files#including-excluding-files-and-directories)for details.
#
# Unlike the `modules.exclude` field in the project config, the filters here have _no effect_ on
# which files
# and directories are watched for changes. Use the project `modules.exclude` field to affect
# those, if you have
# Unlike the `modules.exclude` field in the project config, the filters here have _no effect_ on which files
# and directories are watched for changes. Use the project `modules.exclude` field to affect those, if you have
# large directories that should not be watched for changes.
exclude:

# A remote repository URL. Currently only supports git servers. Must contain a hash suffix
# pointing to a specific branch or tag, with the format: <git remote url>#<branch|tag>
# A remote repository URL. Currently only supports git servers. Must contain a hash suffix pointing to a specific
# branch or tag, with the format: <git remote url>#<branch|tag>
#
# Garden will import the repository source code into this module, but read the module's
# config from the local garden.yml file.
Expand All @@ -95,8 +100,7 @@ build:
copy:
# POSIX-style path or filename of the directory or file(s) to copy to the target.
- source:
# POSIX-style path or filename to copy the directory or file(s), relative to the build
# directory.
# POSIX-style path or filename to copy the directory or file(s), relative to the build directory.
# Defaults to to same as source path.
target: ''

Expand All @@ -112,8 +116,7 @@ policyPath:
# The policy namespace in which to find _deny_ and _warn_ rules.
namespace: main

# A list of files to test with the given policy. Must be POSIX-style paths, and may include
# wildcards.
# A list of files to test with the given policy. Must be POSIX-style paths, and may include wildcards.
files:
```
Expand Down Expand Up @@ -167,6 +170,27 @@ name: "my-sweet-module"
| -------- | -------- |
| `string` | No |

#### `disabled`

Set this to `true` to disable the module. You can use this with conditional template strings to
disable modules based on, for example, the current environment or other variables (e.g.
`disabled: \${environment.name == "prod"}`). This can be handy when you only need certain modules for
specific environments, e.g. only for development.

Disabling a module means that any services, tasks and tests contained in it will not be deployed or run.
It also means that the module is not built _unless_ it is declared as a build dependency by another enabled
module (in which case building this module is necessary for the dependant to be built).

If you disable the module, and its services, tasks or tests are referenced as _runtime_ dependencies, Garden
will automatically ignore those dependency declarations. Note however that template strings referencing the
module's service or task outputs (i.e. runtime outputs) will fail to resolve when the module is disabled,
so you need to make sure to provide alternate values for those if you're using them, using conditional
expressions.

| Type | Required | Default |
| --------- | -------- | ------- |
| `boolean` | No | `false` |

#### `include`

Specify a list of POSIX-style paths or globs that should be regarded as the source files for this
Expand Down
Loading

0 comments on commit 54d74cc

Please sign in to comment.