From 26c8be0241f6d0fc27d9e34eba2f80bf7841e64c Mon Sep 17 00:00:00 2001 From: Maximilian Ammann Date: Fri, 30 Oct 2020 13:41:29 +0100 Subject: [PATCH 01/13] IGAPP-338: Add skip step for all jobs --- .circleci/src/commands/skip_job.yml | 9 +++++++++ .circleci/src/jobs/build_android.yml | 1 + .circleci/src/jobs/build_ios.yml | 1 + .circleci/src/jobs/build_web.yml | 1 + .circleci/src/jobs/bump_version.yml | 1 + .circleci/src/jobs/check_native.yml | 1 + .circleci/src/jobs/check_web.yml | 1 + .circleci/src/jobs/deliver_android.yml | 1 + .circleci/src/jobs/deliver_ios.yml | 1 + .circleci/src/jobs/deliver_web.yml | 1 + .circleci/src/jobs/e2e_android.yml | 1 + .circleci/src/jobs/e2e_ios.yml | 1 + .circleci/src/jobs/move_release_notes.yml | 1 + .circleci/src/jobs/notify_android.yml | 1 + .circleci/src/jobs/notify_ios.yml | 1 + .circleci/src/jobs/notify_web.yml | 1 + 16 files changed, 24 insertions(+) create mode 100644 .circleci/src/commands/skip_job.yml diff --git a/.circleci/src/commands/skip_job.yml b/.circleci/src/commands/skip_job.yml new file mode 100644 index 0000000000..30fcd3da65 --- /dev/null +++ b/.circleci/src/commands/skip_job.yml @@ -0,0 +1,9 @@ +description: Skips the current build if neccassary +steps: + - run: + command: | + COMMIT_MSG=$(git log --format=oneline -n 1 $CIRCLE_SHA1) + if [[ $COMMIT_MSG == *"[skip-ci-staging]"* ]]; then + echo "[skip-ci-staging] detected. Stopping." + circleci step halt + fi diff --git a/.circleci/src/jobs/build_android.yml b/.circleci/src/jobs/build_android.yml index 093ba497db..b43882da9c 100644 --- a/.circleci/src/jobs/build_android.yml +++ b/.circleci/src/jobs/build_android.yml @@ -11,6 +11,7 @@ environment: FASTLANE_SKIP_UPDATE_CHECK: true shell: /bin/bash -eo pipefail steps: + - skip_job - add_ssh_keys: # Needed for credentials repo fingerprints: - 61:d8:94:00:53:5f:3b:19:fd:88:6b:fa:cd:ca:df:5d diff --git a/.circleci/src/jobs/build_ios.yml b/.circleci/src/jobs/build_ios.yml index 66e121c3b5..25801273b5 100644 --- a/.circleci/src/jobs/build_ios.yml +++ b/.circleci/src/jobs/build_ios.yml @@ -12,6 +12,7 @@ environment: TOTAL_CPUS: 4 # For mac with resource_class medium, used in metro.config.ci.js. shell: /bin/bash --login -o pipefail steps: + - skip_job - add_ssh_keys: # Needed for credentials repo fingerprints: - 61:d8:94:00:53:5f:3b:19:fd:88:6b:fa:cd:ca:df:5d diff --git a/.circleci/src/jobs/build_web.yml b/.circleci/src/jobs/build_web.yml index 50e52f1515..4294adad22 100644 --- a/.circleci/src/jobs/build_web.yml +++ b/.circleci/src/jobs/build_web.yml @@ -10,6 +10,7 @@ environment: TOTAL_CPUS: 1 # For resource_class small shell: /bin/bash -eo pipefail steps: + - skip_job - checkout - restore_yarn_cache - run: diff --git a/.circleci/src/jobs/bump_version.yml b/.circleci/src/jobs/bump_version.yml index 63201f6f93..200176cdb1 100644 --- a/.circleci/src/jobs/bump_version.yml +++ b/.circleci/src/jobs/bump_version.yml @@ -9,6 +9,7 @@ docker: - image: circleci/node:12.16.3 resource_class: small steps: + - skip_job - checkout - restore_yarn_tools_cache - run: diff --git a/.circleci/src/jobs/check_native.yml b/.circleci/src/jobs/check_native.yml index ed2b2abeb8..ae63d6b6fa 100644 --- a/.circleci/src/jobs/check_native.yml +++ b/.circleci/src/jobs/check_native.yml @@ -6,6 +6,7 @@ environment: TOTAL_CPUS: 1 # For resource_class small shell: /bin/bash -eo pipefail steps: + - skip_job - checkout - check_config - restore_yarn_cache diff --git a/.circleci/src/jobs/check_web.yml b/.circleci/src/jobs/check_web.yml index 7f0101c6ab..5c4a9a4303 100644 --- a/.circleci/src/jobs/check_web.yml +++ b/.circleci/src/jobs/check_web.yml @@ -6,6 +6,7 @@ environment: TZ: "Europe/Berlin" # Should be removed in IGAPP-39 shell: /bin/bash -eo pipefail steps: + - skip_job - checkout - check_config - restore_yarn_cache diff --git a/.circleci/src/jobs/deliver_android.yml b/.circleci/src/jobs/deliver_android.yml index ef7b2e3868..88566b9fa2 100644 --- a/.circleci/src/jobs/deliver_android.yml +++ b/.circleci/src/jobs/deliver_android.yml @@ -14,6 +14,7 @@ shell: /bin/bash -eo pipefail environment: FASTLANE_SKIP_UPDATE_CHECK: true steps: + - skip_job - run: 'curl -sL https://sentry.io/get-cli/ | bash' - checkout - prepare_workspace diff --git a/.circleci/src/jobs/deliver_ios.yml b/.circleci/src/jobs/deliver_ios.yml index 5130ff6639..461f30fac7 100644 --- a/.circleci/src/jobs/deliver_ios.yml +++ b/.circleci/src/jobs/deliver_ios.yml @@ -13,6 +13,7 @@ environment: FASTLANE_SKIP_UPDATE_CHECK: true shell: /bin/bash --login -o pipefail steps: + - skip_job - run: 'curl -sL https://sentry.io/get-cli/ | bash' - checkout - prepare_workspace diff --git a/.circleci/src/jobs/deliver_web.yml b/.circleci/src/jobs/deliver_web.yml index 3fac5a16f0..f57c3b34a5 100644 --- a/.circleci/src/jobs/deliver_web.yml +++ b/.circleci/src/jobs/deliver_web.yml @@ -8,6 +8,7 @@ docker: resource_class: small shell: /bin/bash -eo pipefail steps: + - skip_job - add_ssh_keys: fingerprints: - "68:a3:fe:e7:94:f7:a4:13:35:5c:63:30:2f:07:7d:02" diff --git a/.circleci/src/jobs/e2e_android.yml b/.circleci/src/jobs/e2e_android.yml index 38c7e3c14b..6c61cea9b0 100644 --- a/.circleci/src/jobs/e2e_android.yml +++ b/.circleci/src/jobs/e2e_android.yml @@ -5,6 +5,7 @@ shell: /bin/bash -eo pipefail environment: FASTLANE_SKIP_UPDATE_CHECK: true steps: + - skip_job - checkout - prepare_workspace - restore_yarn_cache diff --git a/.circleci/src/jobs/e2e_ios.yml b/.circleci/src/jobs/e2e_ios.yml index a34091e3a9..8b4ce1c99f 100644 --- a/.circleci/src/jobs/e2e_ios.yml +++ b/.circleci/src/jobs/e2e_ios.yml @@ -5,6 +5,7 @@ shell: /bin/bash -eo pipefail environment: FASTLANE_SKIP_UPDATE_CHECK: true steps: + - skip_job - checkout - prepare_workspace - restore_yarn_cache diff --git a/.circleci/src/jobs/move_release_notes.yml b/.circleci/src/jobs/move_release_notes.yml index 1a2a854c88..bdddd60c1b 100644 --- a/.circleci/src/jobs/move_release_notes.yml +++ b/.circleci/src/jobs/move_release_notes.yml @@ -3,6 +3,7 @@ docker: - image: circleci/node:12.16.3 resource_class: small steps: + - skip_job - checkout - prepare_workspace - restore_environment_variables diff --git a/.circleci/src/jobs/notify_android.yml b/.circleci/src/jobs/notify_android.yml index 500a1a35b6..d55fc77c2c 100644 --- a/.circleci/src/jobs/notify_android.yml +++ b/.circleci/src/jobs/notify_android.yml @@ -7,6 +7,7 @@ docker: - image: circleci/node:12.16.3 resource_class: small steps: + - skip_job - checkout - prepare_workspace - restore_environment_variables diff --git a/.circleci/src/jobs/notify_ios.yml b/.circleci/src/jobs/notify_ios.yml index e990e11ce2..c3fa3798a1 100644 --- a/.circleci/src/jobs/notify_ios.yml +++ b/.circleci/src/jobs/notify_ios.yml @@ -7,6 +7,7 @@ docker: - image: circleci/node:12.16.3 resource_class: small steps: + - skip_job - checkout - prepare_workspace - restore_environment_variables diff --git a/.circleci/src/jobs/notify_web.yml b/.circleci/src/jobs/notify_web.yml index 88c88be05b..7cbf89ab07 100644 --- a/.circleci/src/jobs/notify_web.yml +++ b/.circleci/src/jobs/notify_web.yml @@ -3,6 +3,7 @@ docker: - image: circleci/node:12.16.3 resource_class: small steps: + - skip_job - checkout - prepare_workspace - restore_environment_variables From 820e2c3a564bbd3fb80e34699f2c3319c49f9315 Mon Sep 17 00:00:00 2001 From: Maximilian Ammann Date: Fri, 30 Oct 2020 14:40:40 +0100 Subject: [PATCH 02/13] IGAPP-338: Allow build_config_names to be optional --- .circleci/config.yml | 55 ++++++++++++++++++++++++++ .circleci/src/commands/skip_job.yml | 16 ++++++-- .circleci/src/jobs/build_android.yml | 3 +- .circleci/src/jobs/build_ios.yml | 3 +- .circleci/src/jobs/build_web.yml | 3 +- .circleci/src/jobs/check_web.yml | 8 +++- .circleci/src/jobs/deliver_android.yml | 3 +- .circleci/src/jobs/deliver_ios.yml | 3 +- .circleci/src/workflows/commit.yml | 1 + 9 files changed, 86 insertions(+), 9 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 66cbfc4edf..5fd32addf6 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -146,6 +146,31 @@ commands: paths: - ~/.cache/yarn-tools - tools/node_modules + skip_job: + description: Skips the current build if neccassary + parameters: + build_config_name: + default: "" + enum: + - integreat + - malte + - integreat-e2e + - integreat-test-cms + - "" + type: enum + steps: + - run: + command: | + build_config=<< parameters.build_config_name >> + if [[ -n $build_config ]]; then + variable_name="SKIP_JOB_${build_config}_$CIRCLE_JOB" + else + variable_name="SKIP_JOB_$CIRCLE_JOB" + fi + if [[ -n ${!variable_name} ]]; then + echo "This job is skipped because the variable $variable_name is set" + circleci step halt + fi jobs: build_android: docker: @@ -165,6 +190,8 @@ jobs: resource_class: medium shell: /bin/bash -eo pipefail steps: + - skip_job: + build_config_name: << parameters.build_config_name >> - add_ssh_keys: fingerprints: - 61:d8:94:00:53:5f:3b:19:fd:88:6b:fa:cd:ca:df:5d @@ -218,6 +245,8 @@ jobs: resource_class: medium shell: /bin/bash --login -o pipefail steps: + - skip_job: + build_config_name: << parameters.build_config_name >> - add_ssh_keys: fingerprints: - 61:d8:94:00:53:5f:3b:19:fd:88:6b:fa:cd:ca:df:5d @@ -259,6 +288,8 @@ jobs: resource_class: small shell: /bin/bash -eo pipefail steps: + - skip_job: + build_config_name: << parameters.build_config_name >> - checkout - restore_yarn_cache - run: @@ -288,6 +319,7 @@ jobs: type: enum resource_class: small steps: + - skip_job - checkout - restore_yarn_tools_cache - run: @@ -330,6 +362,7 @@ jobs: resource_class: small shell: /bin/bash -eo pipefail steps: + - skip_job - checkout - check_config - restore_yarn_cache @@ -349,9 +382,19 @@ jobs: environment: TOTAL_CPUS: 1 TZ: Europe/Berlin + parameters: + build_config_name: + default: integreat + enum: + - integreat + - malte + - integreat-test-cms + type: enum resource_class: small shell: /bin/bash -eo pipefail steps: + - skip_job: + build_config_name: << parameters.build_config_name >> - checkout - check_config - restore_yarn_cache @@ -386,6 +429,8 @@ jobs: resource_class: small shell: /bin/bash -eo pipefail steps: + - skip_job: + build_config_name: << parameters.build_config_name >> - run: curl -sL https://sentry.io/get-cli/ | bash - checkout - prepare_workspace @@ -430,6 +475,8 @@ jobs: type: boolean shell: /bin/bash --login -o pipefail steps: + - skip_job: + build_config_name: << parameters.build_config_name >> - run: curl -sL https://sentry.io/get-cli/ | bash - checkout - prepare_workspace @@ -477,6 +524,7 @@ jobs: resource_class: small shell: /bin/bash -eo pipefail steps: + - skip_job - add_ssh_keys: fingerprints: - 68:a3:fe:e7:94:f7:a4:13:35:5c:63:30:2f:07:7d:02 @@ -508,6 +556,7 @@ jobs: resource_class: small shell: /bin/bash -eo pipefail steps: + - skip_job - checkout - prepare_workspace - restore_yarn_cache @@ -526,6 +575,7 @@ jobs: resource_class: small shell: /bin/bash -eo pipefail steps: + - skip_job - checkout - prepare_workspace - restore_yarn_cache @@ -541,6 +591,7 @@ jobs: - image: circleci/node:12.16.3 resource_class: small steps: + - skip_job - checkout - prepare_workspace - restore_environment_variables @@ -558,6 +609,7 @@ jobs: type: boolean resource_class: small steps: + - skip_job - checkout - prepare_workspace - restore_environment_variables @@ -581,6 +633,7 @@ jobs: type: boolean resource_class: small steps: + - skip_job - checkout - prepare_workspace - restore_environment_variables @@ -600,6 +653,7 @@ jobs: - image: circleci/node:12.16.3 resource_class: small steps: + - skip_job - checkout - prepare_workspace - restore_environment_variables @@ -640,6 +694,7 @@ workflows: - slack-app delivery: none - check_web: + build_config_name: integreat-test-cms context: - slack-app - build_web: diff --git a/.circleci/src/commands/skip_job.yml b/.circleci/src/commands/skip_job.yml index 30fcd3da65..edbb14d75f 100644 --- a/.circleci/src/commands/skip_job.yml +++ b/.circleci/src/commands/skip_job.yml @@ -1,9 +1,19 @@ description: Skips the current build if neccassary +parameters: + build_config_name: + type: enum + enum: [integreat, malte, integreat-e2e, integreat-test-cms, ""] + default: "" steps: - run: command: | - COMMIT_MSG=$(git log --format=oneline -n 1 $CIRCLE_SHA1) - if [[ $COMMIT_MSG == *"[skip-ci-staging]"* ]]; then - echo "[skip-ci-staging] detected. Stopping." + build_config=<< parameters.build_config_name >> + if [[ -n $build_config ]]; then + variable_name="SKIP_JOB_${build_config}_$CIRCLE_JOB" + else + variable_name="SKIP_JOB_$CIRCLE_JOB" + fi + if [[ -n ${!variable_name} ]]; then + echo "This job is skipped because the variable $variable_name is set" circleci step halt fi diff --git a/.circleci/src/jobs/build_android.yml b/.circleci/src/jobs/build_android.yml index b43882da9c..e94e2c90d3 100644 --- a/.circleci/src/jobs/build_android.yml +++ b/.circleci/src/jobs/build_android.yml @@ -11,7 +11,8 @@ environment: FASTLANE_SKIP_UPDATE_CHECK: true shell: /bin/bash -eo pipefail steps: - - skip_job + - skip_job: + build_config_name: << parameters.build_config_name >> - add_ssh_keys: # Needed for credentials repo fingerprints: - 61:d8:94:00:53:5f:3b:19:fd:88:6b:fa:cd:ca:df:5d diff --git a/.circleci/src/jobs/build_ios.yml b/.circleci/src/jobs/build_ios.yml index 25801273b5..089c28a2d2 100644 --- a/.circleci/src/jobs/build_ios.yml +++ b/.circleci/src/jobs/build_ios.yml @@ -12,7 +12,8 @@ environment: TOTAL_CPUS: 4 # For mac with resource_class medium, used in metro.config.ci.js. shell: /bin/bash --login -o pipefail steps: - - skip_job + - skip_job: + build_config_name: << parameters.build_config_name >> - add_ssh_keys: # Needed for credentials repo fingerprints: - 61:d8:94:00:53:5f:3b:19:fd:88:6b:fa:cd:ca:df:5d diff --git a/.circleci/src/jobs/build_web.yml b/.circleci/src/jobs/build_web.yml index 4294adad22..98d19448d3 100644 --- a/.circleci/src/jobs/build_web.yml +++ b/.circleci/src/jobs/build_web.yml @@ -10,7 +10,8 @@ environment: TOTAL_CPUS: 1 # For resource_class small shell: /bin/bash -eo pipefail steps: - - skip_job + - skip_job: + build_config_name: << parameters.build_config_name >> - checkout - restore_yarn_cache - run: diff --git a/.circleci/src/jobs/check_web.yml b/.circleci/src/jobs/check_web.yml index 5c4a9a4303..7439268f85 100644 --- a/.circleci/src/jobs/check_web.yml +++ b/.circleci/src/jobs/check_web.yml @@ -1,3 +1,8 @@ +parameters: + build_config_name: + type: enum + enum: [integreat, malte, integreat-test-cms] + default: integreat docker: - image: circleci/node:12.16.3 resource_class: small @@ -6,7 +11,8 @@ environment: TZ: "Europe/Berlin" # Should be removed in IGAPP-39 shell: /bin/bash -eo pipefail steps: - - skip_job + - skip_job: + build_config_name: << parameters.build_config_name >> - checkout - check_config - restore_yarn_cache diff --git a/.circleci/src/jobs/deliver_android.yml b/.circleci/src/jobs/deliver_android.yml index 88566b9fa2..f60f8da637 100644 --- a/.circleci/src/jobs/deliver_android.yml +++ b/.circleci/src/jobs/deliver_android.yml @@ -14,7 +14,8 @@ shell: /bin/bash -eo pipefail environment: FASTLANE_SKIP_UPDATE_CHECK: true steps: - - skip_job + - skip_job: + build_config_name: << parameters.build_config_name >> - run: 'curl -sL https://sentry.io/get-cli/ | bash' - checkout - prepare_workspace diff --git a/.circleci/src/jobs/deliver_ios.yml b/.circleci/src/jobs/deliver_ios.yml index 461f30fac7..ee5393f16e 100644 --- a/.circleci/src/jobs/deliver_ios.yml +++ b/.circleci/src/jobs/deliver_ios.yml @@ -13,7 +13,8 @@ environment: FASTLANE_SKIP_UPDATE_CHECK: true shell: /bin/bash --login -o pipefail steps: - - skip_job + - skip_job: + build_config_name: << parameters.build_config_name >> - run: 'curl -sL https://sentry.io/get-cli/ | bash' - checkout - prepare_workspace diff --git a/.circleci/src/workflows/commit.yml b/.circleci/src/workflows/commit.yml index b4613161d6..2cf881aa1c 100644 --- a/.circleci/src/workflows/commit.yml +++ b/.circleci/src/workflows/commit.yml @@ -6,6 +6,7 @@ jobs: delivery: none - check_web: + build_config_name: integreat-test-cms context: - slack-app - build_web: From a3e7d8b2788c2b145d71a805ab165737405b2888 Mon Sep 17 00:00:00 2001 From: Maximilian Ammann Date: Fri, 30 Oct 2020 14:54:38 +0100 Subject: [PATCH 03/13] IGAPP-338: Adjust how the skip works and add docuentation --- .circleci/src/commands/skip_job.yml | 28 +++++++++++++++------------- docs/cicd.md | 10 ++++++++++ 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/.circleci/src/commands/skip_job.yml b/.circleci/src/commands/skip_job.yml index edbb14d75f..a4d349c42e 100644 --- a/.circleci/src/commands/skip_job.yml +++ b/.circleci/src/commands/skip_job.yml @@ -2,18 +2,20 @@ description: Skips the current build if neccassary parameters: build_config_name: type: enum - enum: [integreat, malte, integreat-e2e, integreat-test-cms, ""] - default: "" + enum: [integreat, malte, integreat-e2e, integreat-test-cms, "all"] + default: "all" steps: - run: - command: | - build_config=<< parameters.build_config_name >> - if [[ -n $build_config ]]; then - variable_name="SKIP_JOB_${build_config}_$CIRCLE_JOB" - else - variable_name="SKIP_JOB_$CIRCLE_JOB" - fi - if [[ -n ${!variable_name} ]]; then - echo "This job is skipped because the variable $variable_name is set" - circleci step halt - fi + command: | + function skip_job { + variable_name=$1 + if [[ -n ${!variable_name} ]]; then + echo "This job is skipped because the variable $variable_name is set" + circleci step halt + exit 0 + fi + } + + skip_job "SKIP_JOB_$CIRCLE_JOB" + skip_job "SKIP_JOB_<< parameters.build_config_name >>_$CIRCLE_JOB" + diff --git a/docs/cicd.md b/docs/cicd.md index f384621f4b..f92d12275d 100644 --- a/docs/cicd.md +++ b/docs/cicd.md @@ -169,6 +169,16 @@ More information on the version naming schema used can be found [here](docs/conv |FASTLANE_PASSWORD|Password for the Apple Account for delivery|Password Manager|123456|[Credentials](https://github.com/fastlane/fastlane/blob/b121a96e3e2e0bb83392c130cb3a088c773dbbaf/spaceship/docs/Authentication.md#credentials) [Avoid 2FA](https://github.com/fastlane/fastlane/blob/b121a96e3e2e0bb83392c130cb3a088c773dbbaf/spaceship/docs/Authentication.md#avoid-2fa-via-additional-account)| |MATCH_PASSWORD|Password for accessing the certificates for the iOS app using [Fastlane Match](https://docs.fastlane.tools/actions/match/)|Password Manager|123456|[Using a Git Repo](https://docs.fastlane.tools/actions/match/#git-repo-encryption-password)| +## Skipping specific jobs + +You can control which jobs should be skipped through environment variables. The environment variable `SKIP_JOB_deliver_ios` skips all jobs with the name `deliver_ios`. The environment variable `SKIP_JOB_malte_deliver_ios` skips all jobs with the name `deliver_ios`and which reference the `malte` build config. + +Environment variables can be set in the [Project Settings](https://app.circleci.com/settings/project/github/Integreat/integreat-app/environment-variables) of CircleCI. + +Some jobs like `bump_version` run only once for multiple build configs. Therefore, variables like `SKIP_JOB_malte_bump_version` or `SKIP_JOB_integreat_bump_version` do not exist. + +Note: The environment variable `SKIP_JOB_deliver_ios` is equivalent to `SKIP_JOB_all_deliver_ios` + ## Hints and Quirks ### CPU count aka. $TOTAL_CPUS From 4e1203e87e0cc62cb2c0415575680d72429997f1 Mon Sep 17 00:00:00 2001 From: Maximilian Ammann Date: Fri, 30 Oct 2020 14:54:54 +0100 Subject: [PATCH 04/13] IGAPP-338: Validate circleci config after packing it --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2ebf7597d2..ff9713273b 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ }, "scripts": { "locales:missing": "node locales/tools/findMissingLocales", - "circleci:update-config": "cd .circleci && { cat autogenerated_header.yml; circleci config pack src; } > config.yml" + "circleci:update-config": "{ cat .circleci/autogenerated_header.yml; circleci config pack .circleci/src; } > .circleci/config.yml && circleci config validate" }, "resolutions": { "moment": "2.25.3" From dd6e6e1994ec15fcac74a0eb238f2776d04c4495 Mon Sep 17 00:00:00 2001 From: Maximilian Ammann Date: Fri, 30 Oct 2020 14:55:50 +0100 Subject: [PATCH 05/13] IGAPP-338: Update circleci config --- .circleci/config.yml | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 5fd32addf6..aef3add7b9 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -150,27 +150,28 @@ commands: description: Skips the current build if neccassary parameters: build_config_name: - default: "" + default: all enum: - integreat - malte - integreat-e2e - integreat-test-cms - - "" + - all type: enum steps: - run: command: | - build_config=<< parameters.build_config_name >> - if [[ -n $build_config ]]; then - variable_name="SKIP_JOB_${build_config}_$CIRCLE_JOB" - else - variable_name="SKIP_JOB_$CIRCLE_JOB" - fi - if [[ -n ${!variable_name} ]]; then - echo "This job is skipped because the variable $variable_name is set" - circleci step halt - fi + function skip_job { + variable_name=$1 + if [[ -n ${!variable_name} ]]; then + echo "This job is skipped because the variable $variable_name is set" + circleci step halt + exit 0 + fi + } + + skip_job "SKIP_JOB_$CIRCLE_JOB" + skip_job "SKIP_JOB_<< parameters.build_config_name >>_$CIRCLE_JOB" jobs: build_android: docker: From 6931aeeca0a8d7546eb95bd51596e37e93a1c2fa Mon Sep 17 00:00:00 2001 From: Maximilian Ammann Date: Fri, 30 Oct 2020 15:05:33 +0100 Subject: [PATCH 06/13] IGAPP-338: Remove - from job names --- .circleci/config.yml | 4 ++-- .circleci/src/commands/check_config.yml | 1 + .circleci/src/commands/skip_job.yml | 5 +++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index aef3add7b9..66cc1270ff 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -162,8 +162,8 @@ commands: - run: command: | function skip_job { - variable_name=$1 - if [[ -n ${!variable_name} ]]; then + variable_name=${1%-*} # Remove everything after "-". e.g. "check_web-1" -> check_web + if [[ -n ${!variable_name%-*} ]]; then echo "This job is skipped because the variable $variable_name is set" circleci step halt exit 0 diff --git a/.circleci/src/commands/check_config.yml b/.circleci/src/commands/check_config.yml index fe9bf79cad..2f1bf1e164 100644 --- a/.circleci/src/commands/check_config.yml +++ b/.circleci/src/commands/check_config.yml @@ -8,6 +8,7 @@ steps: command: yarn run circleci:update-config - run: # Taken from https://github.com/roopakv/orbs/blob/master/src/commands/fail_if_dirty.yml name: CircleCI config up to date + # language=bash command: | FILES_MODIFIED="" setcommit () { diff --git a/.circleci/src/commands/skip_job.yml b/.circleci/src/commands/skip_job.yml index a4d349c42e..ce3086a6ea 100644 --- a/.circleci/src/commands/skip_job.yml +++ b/.circleci/src/commands/skip_job.yml @@ -6,10 +6,11 @@ parameters: default: "all" steps: - run: + # language=bash command: | function skip_job { - variable_name=$1 - if [[ -n ${!variable_name} ]]; then + variable_name=${1%-*} # Remove everything after "-". e.g. "check_web-1" -> check_web + if [[ -n ${!variable_name%-*} ]]; then echo "This job is skipped because the variable $variable_name is set" circleci step halt exit 0 From 1615efa43e5dab5a8e315166bcaf6c51bc2d797d Mon Sep 17 00:00:00 2001 From: Maximilian Ammann Date: Fri, 30 Oct 2020 15:34:23 +0100 Subject: [PATCH 07/13] IGAPP-338: Change how skipping is configured because dashes are not allowed in env variables --- .circleci/src/commands/skip_job.yml | 10 ++++------ docs/cicd.md | 6 ++---- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/.circleci/src/commands/skip_job.yml b/.circleci/src/commands/skip_job.yml index ce3086a6ea..52e8426f33 100644 --- a/.circleci/src/commands/skip_job.yml +++ b/.circleci/src/commands/skip_job.yml @@ -9,14 +9,12 @@ steps: # language=bash command: | function skip_job { - variable_name=${1%-*} # Remove everything after "-". e.g. "check_web-1" -> check_web - if [[ -n ${!variable_name%-*} ]]; then + build_config_name=$1 + variable_name=SKIP_JOB_${CIRCLE_JOB%-*} # Remove everything after "-". e.g. "check_web-1" -> check_web + if [[ $build_config_name =~ ${!variable_name} || "all" =~ ${!variable_name} ]]; then echo "This job is skipped because the variable $variable_name is set" circleci step halt - exit 0 fi } - skip_job "SKIP_JOB_$CIRCLE_JOB" - skip_job "SKIP_JOB_<< parameters.build_config_name >>_$CIRCLE_JOB" - + skip_job << parameters.build_config_name >> diff --git a/docs/cicd.md b/docs/cicd.md index f92d12275d..ef6564a0a7 100644 --- a/docs/cicd.md +++ b/docs/cicd.md @@ -171,13 +171,11 @@ More information on the version naming schema used can be found [here](docs/conv ## Skipping specific jobs -You can control which jobs should be skipped through environment variables. The environment variable `SKIP_JOB_deliver_ios` skips all jobs with the name `deliver_ios`. The environment variable `SKIP_JOB_malte_deliver_ios` skips all jobs with the name `deliver_ios`and which reference the `malte` build config. +You can control which jobs should be skipped through environment variables. Set the variable `SKIP_JOB_deliver_ios` to `"all"` to skip all jobs with the name `deliver_ios`. Set the variable to `"malte"` in order to skip jobs which use the build config `malte` and have the name `deliver_ios`. You can also set it to `"malte|integreat"` in order to match multiple build configs. Environment variables can be set in the [Project Settings](https://app.circleci.com/settings/project/github/Integreat/integreat-app/environment-variables) of CircleCI. -Some jobs like `bump_version` run only once for multiple build configs. Therefore, variables like `SKIP_JOB_malte_bump_version` or `SKIP_JOB_integreat_bump_version` do not exist. - -Note: The environment variable `SKIP_JOB_deliver_ios` is equivalent to `SKIP_JOB_all_deliver_ios` +Some jobs like `bump_version` run only once for multiple build configs. Therefore, it does not make sense to set `SKIP_JOB_bump_version` to something other than `"all"` ## Hints and Quirks From 4fb5b9a974f1f71fbb21ed6abfe2724e7b2a1755 Mon Sep 17 00:00:00 2001 From: Maximilian Ammann Date: Fri, 30 Oct 2020 15:36:23 +0100 Subject: [PATCH 08/13] IGAPP-338: Update config --- .circleci/config.yml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 66cc1270ff..15b0f879f0 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -162,16 +162,15 @@ commands: - run: command: | function skip_job { - variable_name=${1%-*} # Remove everything after "-". e.g. "check_web-1" -> check_web - if [[ -n ${!variable_name%-*} ]]; then + build_config_name=$1 + variable_name=SKIP_JOB_${CIRCLE_JOB%-*} # Remove everything after "-". e.g. "check_web-1" -> check_web + if [[ $build_config_name =~ ${!variable_name} || "all" =~ ${!variable_name} ]]; then echo "This job is skipped because the variable $variable_name is set" circleci step halt - exit 0 fi } - skip_job "SKIP_JOB_$CIRCLE_JOB" - skip_job "SKIP_JOB_<< parameters.build_config_name >>_$CIRCLE_JOB" + skip_job << parameters.build_config_name >> jobs: build_android: docker: From a3b7c571bd1ef47e57c1bebb959d53c4801b1369 Mon Sep 17 00:00:00 2001 From: Maximilian Ammann Date: Fri, 30 Oct 2020 15:39:04 +0100 Subject: [PATCH 09/13] IGAPP-338: Set name of step --- .circleci/src/commands/skip_job.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.circleci/src/commands/skip_job.yml b/.circleci/src/commands/skip_job.yml index 52e8426f33..03d79d56cf 100644 --- a/.circleci/src/commands/skip_job.yml +++ b/.circleci/src/commands/skip_job.yml @@ -6,6 +6,7 @@ parameters: default: "all" steps: - run: + name: Skip the current build if neccassary # language=bash command: | function skip_job { From 8448bf1ebde71e241bf344f63891cd4155239a46 Mon Sep 17 00:00:00 2001 From: Maximilian Ammann Date: Fri, 30 Oct 2020 15:40:50 +0100 Subject: [PATCH 10/13] IGAPP-338: Remove build config dependency --- .circleci/config.yml | 13 ++----------- .circleci/src/jobs/check_web.yml | 8 +------- .circleci/src/workflows/commit.yml | 1 - 3 files changed, 3 insertions(+), 19 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 15b0f879f0..3117e8aaae 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -171,6 +171,7 @@ commands: } skip_job << parameters.build_config_name >> + name: Skip the current build if neccassary jobs: build_android: docker: @@ -382,19 +383,10 @@ jobs: environment: TOTAL_CPUS: 1 TZ: Europe/Berlin - parameters: - build_config_name: - default: integreat - enum: - - integreat - - malte - - integreat-test-cms - type: enum resource_class: small shell: /bin/bash -eo pipefail steps: - - skip_job: - build_config_name: << parameters.build_config_name >> + - skip_job - checkout - check_config - restore_yarn_cache @@ -694,7 +686,6 @@ workflows: - slack-app delivery: none - check_web: - build_config_name: integreat-test-cms context: - slack-app - build_web: diff --git a/.circleci/src/jobs/check_web.yml b/.circleci/src/jobs/check_web.yml index 7439268f85..5c4a9a4303 100644 --- a/.circleci/src/jobs/check_web.yml +++ b/.circleci/src/jobs/check_web.yml @@ -1,8 +1,3 @@ -parameters: - build_config_name: - type: enum - enum: [integreat, malte, integreat-test-cms] - default: integreat docker: - image: circleci/node:12.16.3 resource_class: small @@ -11,8 +6,7 @@ environment: TZ: "Europe/Berlin" # Should be removed in IGAPP-39 shell: /bin/bash -eo pipefail steps: - - skip_job: - build_config_name: << parameters.build_config_name >> + - skip_job - checkout - check_config - restore_yarn_cache diff --git a/.circleci/src/workflows/commit.yml b/.circleci/src/workflows/commit.yml index 2cf881aa1c..b4613161d6 100644 --- a/.circleci/src/workflows/commit.yml +++ b/.circleci/src/workflows/commit.yml @@ -6,7 +6,6 @@ jobs: delivery: none - check_web: - build_config_name: integreat-test-cms context: - slack-app - build_web: From cedb0e770802327b1a24713d44f1013128664a92 Mon Sep 17 00:00:00 2001 From: Maximilian Ammann Date: Fri, 30 Oct 2020 15:48:53 +0100 Subject: [PATCH 11/13] IGAPP-338: Add missing check. Regex mustn't be empty --- .circleci/config.yml | 2 +- .circleci/src/commands/skip_job.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 3117e8aaae..7bff7961f7 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -164,7 +164,7 @@ commands: function skip_job { build_config_name=$1 variable_name=SKIP_JOB_${CIRCLE_JOB%-*} # Remove everything after "-". e.g. "check_web-1" -> check_web - if [[ $build_config_name =~ ${!variable_name} || "all" =~ ${!variable_name} ]]; then + if [[ -n ${!variable_name} && $build_config_name =~ ${!variable_name} || "all" =~ ${!variable_name} ]]; then echo "This job is skipped because the variable $variable_name is set" circleci step halt fi diff --git a/.circleci/src/commands/skip_job.yml b/.circleci/src/commands/skip_job.yml index 03d79d56cf..a0514e331c 100644 --- a/.circleci/src/commands/skip_job.yml +++ b/.circleci/src/commands/skip_job.yml @@ -12,7 +12,7 @@ steps: function skip_job { build_config_name=$1 variable_name=SKIP_JOB_${CIRCLE_JOB%-*} # Remove everything after "-". e.g. "check_web-1" -> check_web - if [[ $build_config_name =~ ${!variable_name} || "all" =~ ${!variable_name} ]]; then + if [[ -n ${!variable_name} && $build_config_name =~ ${!variable_name} || "all" =~ ${!variable_name} ]]; then echo "This job is skipped because the variable $variable_name is set" circleci step halt fi From 2e5bff872c31a4f12bb3cd4bcc5ed7eace42aebf Mon Sep 17 00:00:00 2001 From: Maximilian Ammann Date: Fri, 30 Oct 2020 15:52:06 +0100 Subject: [PATCH 12/13] IGAPP-338: Add brackets --- .circleci/src/commands/skip_job.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/src/commands/skip_job.yml b/.circleci/src/commands/skip_job.yml index a0514e331c..a479b6219d 100644 --- a/.circleci/src/commands/skip_job.yml +++ b/.circleci/src/commands/skip_job.yml @@ -12,7 +12,7 @@ steps: function skip_job { build_config_name=$1 variable_name=SKIP_JOB_${CIRCLE_JOB%-*} # Remove everything after "-". e.g. "check_web-1" -> check_web - if [[ -n ${!variable_name} && $build_config_name =~ ${!variable_name} || "all" =~ ${!variable_name} ]]; then + if [[ -n ${!variable_name} && ($build_config_name =~ ${!variable_name} || "all" =~ ${!variable_name}) ]]; then echo "This job is skipped because the variable $variable_name is set" circleci step halt fi From cd45b2e0f076cda40e42375aa3934cc89b0474fe Mon Sep 17 00:00:00 2001 From: Maximilian Ammann Date: Fri, 30 Oct 2020 15:57:42 +0100 Subject: [PATCH 13/13] IGAPP-338: Update circleci file --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 7bff7961f7..53c892bb0f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -164,7 +164,7 @@ commands: function skip_job { build_config_name=$1 variable_name=SKIP_JOB_${CIRCLE_JOB%-*} # Remove everything after "-". e.g. "check_web-1" -> check_web - if [[ -n ${!variable_name} && $build_config_name =~ ${!variable_name} || "all" =~ ${!variable_name} ]]; then + if [[ -n ${!variable_name} && ($build_config_name =~ ${!variable_name} || "all" =~ ${!variable_name}) ]]; then echo "This job is skipped because the variable $variable_name is set" circleci step halt fi