Last active
March 9, 2020 22:16
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
commands: | |
apply: | |
description: | | |
Run `terraform apply` and add a comment to the pull request or Git commit. | |
parameters: | |
apply_options: | |
default: "" | |
description: | | |
The options of `terraform apply` command. The option `-auto-approve` is set automatically. | |
For example, `-refresh=false -parallelism=20`. | |
type: string | |
steps: | |
- run: | |
command: apk add ca-certificates bash curl | |
name: Install requirements | |
- attach_workspace: | |
at: . | |
- run: | |
command: | | |
root_dir=$PWD | |
for changed_file in $(find changed -name changed.txt); do | |
service_env_dir=$(dirname ${changed_file##changed/}) | |
cd $root_dir/src/$service_env_dir | |
tfenv install | |
terraform init | |
set +o errexit | |
terraform apply -auto-approve << parameters.apply_options >> > /tmp/apply.txt | |
code="$?" | |
set -e | |
cd $root_dir/src | |
cat /tmp/apply.txt | tfnotify apply --title "Apply $service_env_dir" | |
exit $code | |
done | |
name: terraform apply | |
shell: /bin/bash -eu -o pipefail | |
check_changed: | |
description: | | |
Check the result of `terraform plan`. | |
This command assume that the repository is `monorepo`, and if no states are changed, add a comment to the pull request or Git commit. | |
steps: | |
- run: | |
command: apk add ca-certificates bash curl | |
name: Install requirements | |
- attach_workspace: | |
at: . | |
- run: | |
command: | | |
if [ $(find changed -name changed.txt | wc -l) -eq 0 ]; then | |
echo_green "No states are changed" | |
github-comment -template ":white_check_mark: No states are changed" | |
fi | |
name: Check changed | |
shell: /bin/bash -eu -o pipefail | |
fmt: | |
description: Run `terraform fmt -check` to test if the code is formatted. | |
parameters: | |
dir: | |
description: | | |
the relative path from the repository root directory to Terraform configuration root directory. | |
In the directory, `terraform fmt -check` is executed. | |
type: string | |
steps: | |
- run: | |
command: | | |
cd src/<< parameters.dir >> | |
if ! terraform fmt -check > /dev/null 2>&1; then | |
echo_error "Please run 'terraform fmt'" | |
terraform fmt -diff -write=false | |
if [ -n "${CIRCLE_PULL_REQUEST:-""}" ]; then | |
echo_command_result_template | | |
HEADER=":x: [Job Link]($CIRCLE_BUILD_URL) [<< parameters.dir >>] Please run 'terraform fmt'" \ | |
COMMAND="terraform fmt -diff -write=false" \ | |
OUTPUT=$(terraform fmt -diff -write=false -no-color) \ | |
gomplate | github-comment | |
fi | |
exit 1 | |
fi | |
name: terraform fmt -check | |
shell: /bin/bash -eu -o pipefail | |
install_bash: | |
description: Install Bash | |
steps: | |
- run: | |
command: apk add bash | |
name: Install Bash | |
plan: | |
description: | | |
Run `terraform plan` and add a comment to the pull request or Git commit. | |
parameters: | |
dir: | |
description: | | |
the relative path from the repository root directory to Terraform configuration root directory. | |
In the directory, `terraform plan` is executed. | |
type: string | |
plan_options: | |
default: "" | |
description: | | |
The options of `terraform plan` command. The option `-detailed-exitcode` is set automatically. | |
For example, `-refresh=false -parallelism=20`. | |
type: string | |
steps: | |
- run: | |
command: | | |
root_dir=$PWD | |
cd src/<< parameters.dir >> | |
set +o errexit | |
terraform plan -detailed-exitcode << parameters.plan_options >> > /tmp/plan.txt | |
code=$? | |
set -e | |
cd $root_dir/src | |
mkdir -p ../changed/<< parameters.dir >> | |
touch ../changed/<< parameters.dir >>/dummy.txt | |
if [ "$code" = "0" ]; then | |
# no changed | |
cat /tmp/plan.txt | |
exit 0 | |
fi | |
cat /tmp/plan.txt | tfnotify plan --title "Plan << parameters.dir >>" | |
if [ "$code" = "2" ]; then | |
# changed | |
touch ../changed/<< parameters.dir >>/changed.txt | |
exit 0 | |
fi | |
# failed | |
exit 1 | |
name: terraform plan | |
shell: /bin/bash -eu -o pipefail | |
setup: | |
description: | | |
Checkout source code and install some tools such as tfenv and tfnotify. | |
parameters: | |
custom_setup: | |
default: [] | |
description: | | |
Custom setup steps. If you want to use custom tools in custom tests, please install them in the custom steps. | |
type: steps | |
gomplate_version: | |
default: v3.6.0 | |
description: | | |
The version of gomplate. gomplate is downloaded from the release page. | |
https://github.com/hairyhenderson/gomplate/releases/download/<< parameters.gomplate_version >>/gomplate_linux-amd64 | |
type: string | |
tfnotify_version: | |
default: v0.5.2 | |
description: | | |
The version of tfnotify. tfnotify is downloaded from the release page. | |
https://github.com/mercari/tfnotify/releases/download/<< parameters.tfnotify_version >>/tfnotify_linux_amd64.tar.gz | |
type: string | |
steps: | |
- run: | |
command: apk add git openssh bash curl | |
name: Install requirements | |
- checkout: | |
path: src | |
- run: | |
command: git clone --depth 1 https://github.com/tfutils/tfenv.git .tfenv | |
name: Install tfenv | |
- run: | |
command: '.tfenv/bin/tfenv install || :' | |
name: Install terraform | |
- run: | |
command: | | |
# requirement curl | |
curl -L https://github.com/mercari/tfnotify/releases/download/<< parameters.tfnotify_version >>/tfnotify_linux_amd64.tar.gz | tar xvzf - tfnotify | |
mkdir bin | |
mv tfnotify bin | |
chmod a+x bin/tfnotify | |
name: Install tfnotify | |
- run: | |
command: | | |
curl -L https://github.com/suzuki-shunsuke/github-comment-cli/releases/download/v0.1.0-2/github-comment-cli_0.1.0-2_linux_amd64.tar.gz | tar xvzf - github-comment | |
mv github-comment bin | |
chmod a+x bin/github-comment | |
name: Install github-comment-cli | |
- run: | |
command: | | |
curl -o bin/gomplate -sSL https://github.com/hairyhenderson/gomplate/releases/download/<< parameters.gomplate_version >>/gomplate_linux-amd64 | |
chmod a+x bin/gomplate | |
name: Install gomplate | |
- steps: << parameters.custom_setup >> | |
setup_bash_env: | |
description: | | |
Append some shell functions and environment variables to BASH_ENV. | |
steps: | |
- run: | |
command: | | |
echo ' | |
echo_green() { | |
echo "${COLOR_2}$*${COLOR_OFF}" | |
} | |
echo_error() { | |
echo -e "${COLOR_1}$*${COLOR_OFF}" >&2 | |
} | |
echo_command_result_template() { | |
local tempfile; tempfile=$(mktemp) | |
echo "{{ .Env.HEADER }}" > $tempfile | |
echo "" >> $tempfile | |
echo "\`\`\`" >> $tempfile | |
echo "$ {{ .Env.COMMAND }}" >> $tempfile | |
echo "\`\`\`" >> $tempfile | |
echo "" >> $tempfile | |
echo "<details>" >> $tempfile | |
echo "<summary>Command Output</summary>" >> $tempfile | |
echo "" >> $tempfile | |
echo "\`\`\`" >> $tempfile | |
echo "{{ .Env.OUTPUT }}" >> $tempfile | |
echo "\`\`\`" >> $tempfile | |
echo "" >> $tempfile | |
echo "</details>" >> $tempfile | |
cat $tempfile | |
rm $tempfile | |
} | |
' >> $BASH_ENV | |
echo "export PATH=$PWD/.tfenv/bin:$PWD/bin:$PATH" >> $BASH_ENV | |
cat $BASH_ENV | |
name: Set up BASH_ENV | |
shell: /bin/bash -eu -o pipefail | |
test: | |
description: | | |
Run lints and tests and add a comment to the pull request or Git commit. | |
parameters: | |
custom_tests: | |
default: [] | |
type: steps | |
dir: | |
description: | | |
the relative path from the repository root directory to Terraform configuration root directory. | |
In the directory, Terraform commands such as `terraform plan` are executed. | |
type: string | |
plan_options: | |
default: "" | |
description: | | |
The options of `terraform plan` command. The option `-detailed-exitcode` is set automatically. | |
For example, `-refresh=false -parallelism=20`. | |
type: string | |
skip_plan: | |
default: false | |
description: | | |
If this parameter is `true`, `terraform plan` isn't executed. | |
type: boolean | |
steps: | |
- run: | |
command: apk add ca-certificates bash curl | |
name: Install requirements | |
- attach_workspace: | |
at: . | |
- run: | |
command: | | |
cd src/<< parameters.dir >> | |
# requirement: curl | |
# requirement: tfenv | |
# requirement: bash | |
tfenv install | |
name: tfenv install | |
shell: /bin/bash -eu -o pipefail | |
- run: | |
command: | | |
cd src/<< parameters.dir >> | |
terraform init | |
name: terraform init | |
shell: /bin/bash -eu -o pipefail | |
- fmt: | |
dir: << parameters.dir >> | |
- validate: | |
dir: << parameters.dir >> | |
- steps: << parameters.custom_tests >> | |
- unless: | |
condition: << parameters.skip_plan >> | |
steps: | |
- plan: | |
dir: << parameters.dir >> | |
plan_options: << parameters.plan_options >> | |
- persist_to_workspace: | |
paths: | |
- changed/<< parameters.dir >>/* | |
root: . | |
validate: | |
description: Run `terraform validate` to test if the code is valid. | |
parameters: | |
dir: | |
description: | | |
the relative path from the repository root directory to Terraform configuration root directory. | |
In the directory, `terraform validate` is executed. | |
type: string | |
steps: | |
- run: | |
command: | | |
cd src/<< parameters.dir >> | |
vlog=$(mktemp) | |
if ! terraform validate -no-color > $vlog 2>&1; then | |
if [ -n "${CIRCLE_PULL_REQUEST:-""}" ]; then | |
echo_command_result_template | | |
HEADER=":x: [Job Link]($CIRCLE_BUILD_URL) [<< parameters.dir >>] terraform validate is failure" \ | |
COMMAND="terraform validate" \ | |
OUTPUT=$(cat $vlog) \ | |
gomplate | github-comment | |
fi | |
rm $vlog | |
exit 1 | |
fi | |
rm $vlog | |
name: terraform validate | |
shell: /bin/bash -eu -o pipefail | |
description: | | |
Lint and test and apply Terraform configuration. | |
We assume tfenv is used at the target project. | |
display: | |
source_url: https://github.com/suzuki-shunsuke/circleci-orb-tfenv | |
examples: {} | |
executors: | |
alpine: | |
docker: | |
- environment: | |
COLOR_1: "\e[31;1m" | |
COLOR_2: "\e[32;1m" | |
COLOR_OFF: "\e[m" | |
TF_CLI_ARGS_plan: -parallelism=30 | |
image: alpine:3.11.3 | |
jobs: | |
apply: | |
description: | | |
Run `terraform apply` and add a comment to the pull request or Git commit. | |
executor: << parameters.executor >> | |
parameters: | |
apply_options: | |
default: "" | |
description: | | |
The options of `terraform apply` command. The option `-auto-approve` is set automatically. | |
For example, `-refresh=false -parallelism=20`. | |
type: string | |
executor: | |
default: alpine | |
description: | | |
Custom executor. The executor must use an Alpine based Docker image. | |
type: executor | |
steps: | |
- install_bash | |
- setup_bash_env | |
- apply: | |
apply_options: << parameters.apply_options >> | |
check_changed: | |
description: | | |
Check the result of `terraform plan`. | |
If no states are changed, add a comment to the pull request or Git commit. | |
executor: << parameters.executor >> | |
parameters: | |
executor: | |
default: alpine | |
description: | | |
Custom executor. The executor must use an Alpine based Docker image. | |
type: executor | |
steps: | |
- install_bash | |
- setup_bash_env | |
- check_changed | |
plan: | |
docker: | |
- environment: | |
COLOR_1: "\e[31;1m" | |
COLOR_2: "\e[32;1m" | |
COLOR_OFF: "\e[m" | |
TF_CLI_ARGS_plan: -parallelism=30 | |
image: alpine:3.11.3 | |
parameters: | |
dir: | |
type: string | |
steps: | |
- run: | |
command: apk add ca-certificates bash curl | |
name: Install requirements | |
- attach_workspace: | |
at: . | |
- run: | |
command: | | |
export PATH=$PWD/.tfenv/bin:$PWD/bin:$PATH | |
cd src/<< parameters.dir >> | |
# requirement: curl | |
# requirement: tfenv | |
# requirement: bash | |
tfenv install | |
name: tfenv install | |
- run: | |
command: | | |
export PATH=$PWD/.tfenv/bin:$PWD/bin:$PATH | |
cd src/<< parameters.dir >> | |
terraform init | |
name: terraform init | |
- run: | |
command: | | |
comment() { | |
curl -H "Authorization: token $GITHUB_TOKEN" \ | |
https://api.github.com/repos/$CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME/issues/$(basename ${CIRCLE_PULL_REQUEST})/comments \ | |
-d "{\"body\": \"$1\"}" | |
} | |
export PATH=$PWD/.tfenv/bin:$PWD/bin:$PATH | |
cd src/<< parameters.dir >> | |
terraform fmt -diff -write=false | |
if ! terraform fmt -check; then | |
echo -e "${COLOR_1}Please run 'terraform fmt'${COLOR_OFF}" >&2 | |
if [ -n "${CIRCLE_PULL_REQUEST:-""}" ]; then | |
comment ":x: [Job Link]($CIRCLE_BUILD_URL) [<< parameters.dir >>] Please run 'terraform fmt'" | |
fi | |
exit 1 | |
fi | |
name: terraform fmt -check | |
shell: /bin/bash -eu -o pipefail | |
- run: | |
command: | | |
comment() { | |
curl -H "Authorization: token $GITHUB_TOKEN" \ | |
https://api.github.com/repos/$CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME/issues/$(basename ${CIRCLE_PULL_REQUEST})/comments \ | |
-d "{\"body\": \"$1\"}" | |
} | |
export PATH=$PWD/.tfenv/bin:$PWD/bin:$PATH | |
cd src/<< parameters.dir >> | |
if ! terraform validate; then | |
if [ -n "${CIRCLE_PULL_REQUEST:-""}" ]; then | |
comment ":x: [Job Link]($CIRCLE_BUILD_URL) [<< parameters.dir >>] terraform validate is failure" | |
fi | |
exit 1 | |
fi | |
name: terraform validate | |
shell: /bin/bash -eu -o pipefail | |
- run: | |
command: | | |
export PATH=$PWD/.tfenv/bin:$PWD/bin:$PATH | |
root_dir=$PWD | |
cd src/<< parameters.dir >> | |
set +o pipefail | |
terraform plan -detailed-exitcode 2>&1 | tee /tmp/plan.txt | |
code="${PIPESTATUS[0]}" | |
set -o pipefail | |
cd $root_dir/src | |
mkdir -p ../changed/<< parameters.dir >> | |
touch ../changed/<< parameters.dir >>/dummy.txt | |
if [ "$code" = "0" ]; then | |
# no changed | |
exit 0 | |
fi | |
cat /tmp/plan.txt | tfnotify plan --title "Plan << parameters.dir >>" | |
if [ "$code" = "2" ]; then | |
# changed | |
touch ../changed/<< parameters.dir >>/changed.txt | |
exit 0 | |
fi | |
# failed | |
exit 1 | |
name: terraform plan | |
shell: /bin/bash -eu -o pipefail | |
- persist_to_workspace: | |
paths: | |
- changed/<< parameters.dir >>/* | |
root: . | |
setup: | |
description: | | |
Checkout source code and install some tools such as tfenv and tfnotify and persist them to the workspace. | |
executor: << parameters.executor >> | |
parameters: | |
custom_setup: | |
default: [] | |
description: | | |
Custom setup steps. If you want to use custom tools in custom tests, please install them in the custom steps. | |
type: steps | |
executor: | |
default: alpine | |
description: | | |
Custom executor. The executor must use an Alpine based Docker image. | |
type: executor | |
tfnotify_version: | |
default: v0.5.2 | |
description: | | |
The version of tfnotify. tfnotify is downloaded from the release page. | |
https://github.com/mercari/tfnotify/releases/download/<< parameters.tfnotify_version >>/tfnotify_linux_amd64.tar.gz | |
type: string | |
steps: | |
- setup: | |
custom_setup: << parameters.custom_setup >> | |
tfnotify_version: << parameters.tfnotify_version >> | |
- persist_to_workspace: | |
paths: | |
- '*' | |
root: . | |
test: | |
description: | | |
Run lints and tests and add a comment to the pull request or Git commit. | |
executor: << parameters.executor >> | |
parameters: | |
custom_tests: | |
default: [] | |
description: | | |
Custom test steps. You can add custom tests freely. | |
type: steps | |
dir: | |
description: | | |
the relative path from the repository root directory to Terraform configuration root directory. | |
In the directory, Terraform commands such as `terraform plan` are executed. | |
type: string | |
executor: | |
default: alpine | |
description: | | |
Custom executor. The executor must use an Alpine based Docker image. | |
type: executor | |
plan_options: | |
default: "" | |
description: | | |
The options of `terraform plan` command. The option `-detailed-exitcode` is set automatically. | |
For example, `-refresh=false -parallelism=20`. | |
type: string | |
skip_plan: | |
default: false | |
description: | | |
If this parameter is `true`, `terraform plan` isn't executed. | |
type: boolean | |
steps: | |
- install_bash | |
- setup_bash_env | |
- test: | |
custom_tests: << parameters.custom_tests >> | |
dir: << parameters.dir >> | |
plan_options: << parameters.plan_options >> | |
skip_plan: << parameters.skip_plan >> | |
version: 2.1 | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$ circleci config validate | |
Error: ERROR IN CONFIG FILE: | |
[#] 32 schema violations found | |
1. [#/executors/alpine] 0 subschemas matched instead of one | |
| 1. [#/executors/alpine] expected type: String, found: Mapping | |
| | Executor may be a string reference to another executor | |
| 2. [#/executors/alpine/docker/0/environment] 0 subschemas matched instead of one | |
| | 1. [#/executors/alpine/docker/0/environment] no subschema matched out of the total 2 subschemas | |
| | | Allow null to account for empty `environment:` declarations. | |
| | | 1. [#/executors/alpine/docker/0/environment] expected type: String, found: Mapping | |
| | | | Allow null to account for empty `environment:` declarations. | |
| | | | SCHEMA: | |
| | | | type: | |
| | | | - string | |
| | | | - 'null' | |
| | | | INPUT: | |
| | | | COLOR_1: !!binary |- | |
| | | | G1szMTsxbQ== | |
| | | | COLOR_2: !!binary |- | |
| | | | G1szMjsxbQ== | |
| | | | COLOR_OFF: !!binary |- | |
| | | | G1tt | |
| | | | TF_CLI_ARGS_plan: -parallelism=30 | |
| | | 2. [#/executors/alpine/docker/0/environment] expected: null, found: Mapping | |
| | | | Allow null to account for empty `environment:` declarations. | |
| | | | SCHEMA: | |
| | | | type: | |
| | | | - string | |
| | | | - 'null' | |
| | | | INPUT: | |
| | | | COLOR_1: !!binary |- | |
| | | | G1szMTsxbQ== | |
| | | | COLOR_2: !!binary |- | |
| | | | G1szMjsxbQ== | |
| | | | COLOR_OFF: !!binary |- | |
| | | | G1tt | |
| | | | TF_CLI_ARGS_plan: -parallelism=30 | |
| | 2. [#/executors/alpine/docker/0/environment] 12 schema violations found | |
| | | The value should be a string, but we allow null, boolean and numbers too. Examples: `FOO: true` and `BAR: 2` `BAZ:` | |
| | | 1. [#/executors/alpine/docker/0/environment/COLOR_1] no subschema matched out of the total 4 subschemas | |
| | | | 1. [#/executors/alpine/docker/0/environment/COLOR_1] expected type: Boolean, found: Sequence | |
| | | | | SCHEMA: | |
| | | | | type: | |
| | | | | - string | |
| | | | | - boolean | |
| | | | | - number | |
| | | | | - 'null' | |
| | | | | INPUT: | |
| | | | | !!binary |- | |
| | | | | G1szMTsxbQ== | |
| | | | 2. [#/executors/alpine/docker/0/environment/COLOR_1] expected type: Number, found: Sequence | |
| | | | | SCHEMA: | |
| | | | | type: | |
| | | | | - string | |
| | | | | - boolean | |
| | | | | - number | |
| | | | | - 'null' | |
| | | | | INPUT: | |
| | | | | !!binary |- | |
| | | | | G1szMTsxbQ== | |
| | | | 3. [#/executors/alpine/docker/0/environment/COLOR_1] expected type: String, found: Sequence | |
| | | | | SCHEMA: | |
| | | | | type: | |
| | | | | - string | |
| | | | | - boolean | |
| | | | | - number | |
| | | | | - 'null' | |
| | | | | INPUT: | |
| | | | | !!binary |- | |
| | | | | G1szMTsxbQ== | |
| | | | 4. [#/executors/alpine/docker/0/environment/COLOR_1] expected: null, found: Sequence | |
| | | | | SCHEMA: | |
| | | | | type: | |
| | | | | - string | |
| | | | | - boolean | |
| | | | | - number | |
| | | | | - 'null' | |
| | | | | INPUT: | |
| | | | | !!binary |- | |
| | | | | G1szMTsxbQ== | |
| | | 2. [#/executors/alpine/docker/0/environment/COLOR_2] no subschema matched out of the total 4 subschemas | |
| | | | 1. [#/executors/alpine/docker/0/environment/COLOR_2] expected type: Boolean, found: Sequence | |
| | | | | SCHEMA: | |
| | | | | type: | |
| | | | | - string | |
| | | | | - boolean | |
| | | | | - number | |
| | | | | - 'null' | |
| | | | | INPUT: | |
| | | | | !!binary |- | |
| | | | | G1szMjsxbQ== | |
| | | | 2. [#/executors/alpine/docker/0/environment/COLOR_2] expected type: Number, found: Sequence | |
| | | | | SCHEMA: | |
| | | | | type: | |
| | | | | - string | |
| | | | | - boolean | |
| | | | | - number | |
| | | | | - 'null' | |
| | | | | INPUT: | |
| | | | | !!binary |- | |
| | | | | G1szMjsxbQ== | |
| | | | 3. [#/executors/alpine/docker/0/environment/COLOR_2] expected type: String, found: Sequence | |
| | | | | SCHEMA: | |
| | | | | type: | |
| | | | | - string | |
| | | | | - boolean | |
| | | | | - number | |
| | | | | - 'null' | |
| | | | | INPUT: | |
| | | | | !!binary |- | |
| | | | | G1szMjsxbQ== | |
| | | | 4. [#/executors/alpine/docker/0/environment/COLOR_2] expected: null, found: Sequence | |
| | | | | SCHEMA: | |
| | | | | type: | |
| | | | | - string | |
| | | | | - boolean | |
| | | | | - number | |
| | | | | - 'null' | |
| | | | | INPUT: | |
| | | | | !!binary |- | |
| | | | | G1szMjsxbQ== | |
| | | 3. [#/executors/alpine/docker/0/environment/COLOR_OFF] no subschema matched out of the total 4 subschemas | |
| | | | 1. [#/executors/alpine/docker/0/environment/COLOR_OFF] expected type: Boolean, found: Sequence | |
| | | | | SCHEMA: | |
| | | | | type: | |
| | | | | - string | |
| | | | | - boolean | |
| | | | | - number | |
| | | | | - 'null' | |
| | | | | INPUT: | |
| | | | | !!binary |- | |
| | | | | G1tt | |
| | | | 2. [#/executors/alpine/docker/0/environment/COLOR_OFF] expected type: Number, found: Sequence | |
| | | | | SCHEMA: | |
| | | | | type: | |
| | | | | - string | |
| | | | | - boolean | |
| | | | | - number | |
| | | | | - 'null' | |
| | | | | INPUT: | |
| | | | | !!binary |- | |
| | | | | G1tt | |
| | | | 3. [#/executors/alpine/docker/0/environment/COLOR_OFF] expected type: String, found: Sequence | |
| | | | | SCHEMA: | |
| | | | | type: | |
| | | | | - string | |
| | | | | - boolean | |
| | | | | - number | |
| | | | | - 'null' | |
| | | | | INPUT: | |
| | | | | !!binary |- | |
| | | | | G1tt | |
| | | | 4. [#/executors/alpine/docker/0/environment/COLOR_OFF] expected: null, found: Sequence | |
| | | | | SCHEMA: | |
| | | | | type: | |
| | | | | - string | |
| | | | | - boolean | |
| | | | | - number | |
| | | | | - 'null' | |
| | | | | INPUT: | |
| | | | | !!binary |- | |
| | | | | G1tt | |
| | 3. [#/executors/alpine/docker/0/environment] expected type: Sequence, found: Mapping | |
| | | An array of strings in the form KEY=VALUE | |
| | | SCHEMA: | |
| | | type: array | |
| | | INPUT: | |
| | | COLOR_1: !!binary |- | |
| | | G1szMTsxbQ== | |
| | | COLOR_2: !!binary |- | |
| | | G1szMjsxbQ== | |
| | | COLOR_OFF: !!binary |- | |
| | | G1tt | |
| | | TF_CLI_ARGS_plan: -parallelism=30 | |
2. [#/jobs/plan] 0 subschemas matched instead of one | |
| 1. [#/jobs/plan] only 1 subschema matches out of 2 | |
| | 1. [#/jobs/plan/docker/0/environment] 0 subschemas matched instead of one | |
| | | 1. [#/jobs/plan/docker/0/environment] no subschema matched out of the total 2 subschemas | |
| | | | Allow null to account for empty `environment:` declarations. | |
| | | | 1. [#/jobs/plan/docker/0/environment] expected type: String, found: Mapping | |
| | | | | Allow null to account for empty `environment:` declarations. | |
| | | | | SCHEMA: | |
| | | | | type: | |
| | | | | - string | |
| | | | | - 'null' | |
| | | | | INPUT: | |
| | | | | COLOR_1: !!binary |- | |
| | | | | G1szMTsxbQ== | |
| | | | | COLOR_2: !!binary |- | |
| | | | | G1szMjsxbQ== | |
| | | | | COLOR_OFF: !!binary |- | |
| | | | | G1tt | |
| | | | | TF_CLI_ARGS_plan: -parallelism=30 | |
| | | | 2. [#/jobs/plan/docker/0/environment] expected: null, found: Mapping | |
| | | | | Allow null to account for empty `environment:` declarations. | |
| | | | | SCHEMA: | |
| | | | | type: | |
| | | | | - string | |
| | | | | - 'null' | |
| | | | | INPUT: | |
| | | | | COLOR_1: !!binary |- | |
| | | | | G1szMTsxbQ== | |
| | | | | COLOR_2: !!binary |- | |
| | | | | G1szMjsxbQ== | |
| | | | | COLOR_OFF: !!binary |- | |
| | | | | G1tt | |
| | | | | TF_CLI_ARGS_plan: -parallelism=30 | |
| | | 2. [#/jobs/plan/docker/0/environment] 12 schema violations found | |
| | | | The value should be a string, but we allow null, boolean and numbers too. Examples: `FOO: true` and `BAR: 2` `BAZ:` | |
| | | | 1. [#/jobs/plan/docker/0/environment/COLOR_1] no subschema matched out of the total 4 subschemas | |
| | | | | 1. [#/jobs/plan/docker/0/environment/COLOR_1] expected type: Boolean, found: Sequence | |
| | | | | | SCHEMA: | |
| | | | | | type: | |
| | | | | | - string | |
| | | | | | - boolean | |
| | | | | | - number | |
| | | | | | - 'null' | |
| | | | | | INPUT: | |
| | | | | | !!binary |- | |
| | | | | | G1szMTsxbQ== | |
| | | | | 2. [#/jobs/plan/docker/0/environment/COLOR_1] expected type: Number, found: Sequence | |
| | | | | | SCHEMA: | |
| | | | | | type: | |
| | | | | | - string | |
| | | | | | - boolean | |
| | | | | | - number | |
| | | | | | - 'null' | |
| | | | | | INPUT: | |
| | | | | | !!binary |- | |
| | | | | | G1szMTsxbQ== | |
| | | | | 3. [#/jobs/plan/docker/0/environment/COLOR_1] expected type: String, found: Sequence | |
| | | | | | SCHEMA: | |
| | | | | | type: | |
| | | | | | - string | |
| | | | | | - boolean | |
| | | | | | - number | |
| | | | | | - 'null' | |
| | | | | | INPUT: | |
| | | | | | !!binary |- | |
| | | | | | G1szMTsxbQ== | |
| | | | | 4. [#/jobs/plan/docker/0/environment/COLOR_1] expected: null, found: Sequence | |
| | | | | | SCHEMA: | |
| | | | | | type: | |
| | | | | | - string | |
| | | | | | - boolean | |
| | | | | | - number | |
| | | | | | - 'null' | |
| | | | | | INPUT: | |
| | | | | | !!binary |- | |
| | | | | | G1szMTsxbQ== | |
| | | | 2. [#/jobs/plan/docker/0/environment/COLOR_2] no subschema matched out of the total 4 subschemas | |
| | | | | 1. [#/jobs/plan/docker/0/environment/COLOR_2] expected type: Boolean, found: Sequence | |
| | | | | | SCHEMA: | |
| | | | | | type: | |
| | | | | | - string | |
| | | | | | - boolean | |
| | | | | | - number | |
| | | | | | - 'null' | |
| | | | | | INPUT: | |
| | | | | | !!binary |- | |
| | | | | | G1szMjsxbQ== | |
| | | | | 2. [#/jobs/plan/docker/0/environment/COLOR_2] expected type: Number, found: Sequence | |
| | | | | | SCHEMA: | |
| | | | | | type: | |
| | | | | | - string | |
| | | | | | - boolean | |
| | | | | | - number | |
| | | | | | - 'null' | |
| | | | | | INPUT: | |
| | | | | | !!binary |- | |
| | | | | | G1szMjsxbQ== | |
| | | | | 3. [#/jobs/plan/docker/0/environment/COLOR_2] expected type: String, found: Sequence | |
| | | | | | SCHEMA: | |
| | | | | | type: | |
| | | | | | - string | |
| | | | | | - boolean | |
| | | | | | - number | |
| | | | | | - 'null' | |
| | | | | | INPUT: | |
| | | | | | !!binary |- | |
| | | | | | G1szMjsxbQ== | |
| | | | | 4. [#/jobs/plan/docker/0/environment/COLOR_2] expected: null, found: Sequence | |
| | | | | | SCHEMA: | |
| | | | | | type: | |
| | | | | | - string | |
| | | | | | - boolean | |
| | | | | | - number | |
| | | | | | - 'null' | |
| | | | | | INPUT: | |
| | | | | | !!binary |- | |
| | | | | | G1szMjsxbQ== | |
| | | | 3. [#/jobs/plan/docker/0/environment/COLOR_OFF] no subschema matched out of the total 4 subschemas | |
| | | | | 1. [#/jobs/plan/docker/0/environment/COLOR_OFF] expected type: Boolean, found: Sequence | |
| | | | | | SCHEMA: | |
| | | | | | type: | |
| | | | | | - string | |
| | | | | | - boolean | |
| | | | | | - number | |
| | | | | | - 'null' | |
| | | | | | INPUT: | |
| | | | | | !!binary |- | |
| | | | | | G1tt | |
| | | | | 2. [#/jobs/plan/docker/0/environment/COLOR_OFF] expected type: Number, found: Sequence | |
| | | | | | SCHEMA: | |
| | | | | | type: | |
| | | | | | - string | |
| | | | | | - boolean | |
| | | | | | - number | |
| | | | | | - 'null' | |
| | | | | | INPUT: | |
| | | | | | !!binary |- | |
| | | | | | G1tt | |
| | | | | 3. [#/jobs/plan/docker/0/environment/COLOR_OFF] expected type: String, found: Sequence | |
| | | | | | SCHEMA: | |
| | | | | | type: | |
| | | | | | - string | |
| | | | | | - boolean | |
| | | | | | - number | |
| | | | | | - 'null' | |
| | | | | | INPUT: | |
| | | | | | !!binary |- | |
| | | | | | G1tt | |
| | | | | 4. [#/jobs/plan/docker/0/environment/COLOR_OFF] expected: null, found: Sequence | |
| | | | | | SCHEMA: | |
| | | | | | type: | |
| | | | | | - string | |
| | | | | | - boolean | |
| | | | | | - number | |
| | | | | | - 'null' | |
| | | | | | INPUT: | |
| | | | | | !!binary |- | |
| | | | | | G1tt | |
| | | 3. [#/jobs/plan/docker/0/environment] expected type: Sequence, found: Mapping | |
| | | | An array of strings in the form KEY=VALUE | |
| | | | SCHEMA: | |
| | | | type: array | |
| | | | INPUT: | |
| | | | COLOR_1: !!binary |- | |
| | | | G1szMTsxbQ== | |
| | | | COLOR_2: !!binary |- | |
| | | | G1szMjsxbQ== | |
| | | | COLOR_OFF: !!binary |- | |
| | | | G1tt | |
| | | | TF_CLI_ARGS_plan: -parallelism=30 | |
| 2. [#/jobs/plan] expected type: String, found: Mapping | |
| | Job may be a string reference to another job |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment