ci: use CircleCI parameterized jobs (#32745)

Parameterized jobs lets us reduce duplication of very similar jobs.

See https://circleci.com/docs/2.0/reusing-config/#authoring-parameterized-jobs for more info.

PR Close #32745
This commit is contained in:
Filipe Silva 2019-09-18 17:23:18 +01:00 committed by atscott
parent 296954041e
commit fc3260d87e
3 changed files with 37 additions and 56 deletions

View File

@ -205,6 +205,8 @@ commands:
curl --request POST --header "Content-Type: application/json" --data "$notificationJson" $SLACK_DEV_INFRA_CI_FAILURES_WEBHOOK_URL curl --request POST --header "Content-Type: application/json" --data "$notificationJson" $SLACK_DEV_INFRA_CI_FAILURES_WEBHOOK_URL
# Job definitions # Job definitions
# Jobs can include parameters that are passed in the workflow job invocation.
# https://circleci.com/docs/2.0/reusing-config/#authoring-parameterized-jobs
jobs: jobs:
setup: setup:
executor: action-executor executor: action-executor
@ -384,13 +386,17 @@ jobs:
- run: yarn --cwd aio deploy-production - run: yarn --cwd aio deploy-production
test_aio_local: test_aio_local:
parameters:
ivy:
type: boolean
default: false
# Needed because the AIO tests and the PWA score test depend on Chrome being available. # Needed because the AIO tests and the PWA score test depend on Chrome being available.
executor: browsers-executor executor: browsers-executor
steps: steps:
- custom_attach_workspace - custom_attach_workspace
- init_environment - init_environment
# Build aio (with local Angular packages) # Build aio (with local Angular packages)
- run: yarn --cwd aio build-local-ci - run: yarn --cwd aio build-local<<# parameters.ivy >>-with-ivy<</ parameters.ivy >>-ci
# Run unit tests # Run unit tests
- run: yarn --cwd aio test --progress=false --watch=false - run: yarn --cwd aio test --progress=false --watch=false
# Run e2e tests # Run e2e tests
@ -398,24 +404,7 @@ jobs:
# Run PWA-score tests # Run PWA-score tests
- run: yarn --cwd aio test-pwa-score-localhost $CI_AIO_MIN_PWA_SCORE - run: yarn --cwd aio test-pwa-score-localhost $CI_AIO_MIN_PWA_SCORE
# Check the bundle sizes. # Check the bundle sizes.
- run: yarn --cwd aio payload-size aio-local - run: yarn --cwd aio payload-size aio-local<<# parameters.ivy >>-ivy<</ parameters.ivy >>
test_aio_local_ivy:
# Needed because the AIO tests and the PWA score test depend on Chrome being available.
executor: browsers-executor
steps:
- custom_attach_workspace
- init_environment
# Build aio with Ivy (using local Angular packages)
- run: yarn --cwd aio build-with-ivy-ci
# Run unit tests
- run: yarn --cwd aio test --progress=false --watch=false
# Run e2e tests
- run: yarn --cwd aio e2e --configuration=ci
# Run PWA-score tests
- run: yarn --cwd aio test-pwa-score-localhost $CI_AIO_MIN_PWA_SCORE
# Check the bundle sizes.
- run: yarn --cwd aio payload-size aio-local-ivy
test_aio_tools: test_aio_tools:
executor: action-executor executor: action-executor
@ -430,45 +419,33 @@ jobs:
- run: ./aio/aio-builds-setup/scripts/test.sh - run: ./aio/aio-builds-setup/scripts/test.sh
test_docs_examples: test_docs_examples:
parameters:
ivy:
type: boolean
default: false
executor: executor:
# Needed because the example e2e tests depend on Chrome. # Needed because the example e2e tests depend on Chrome.
name: browsers-executor name: browsers-executor
resource_class: xlarge resource_class: xlarge
parallelism: 4
steps:
- custom_attach_workspace
- init_environment
# Install aio
- run: yarn --cwd aio install --frozen-lockfile --non-interactive
# Run examples tests. The "CIRCLE_NODE_INDEX" will be set if "parallelism" is enabled.
# Since the parallelism is set to "3", there will be three parallel CircleCI containers
# with either "0", "1" or "2" as node index. This can be passed to the "--shard" argument.
- run: yarn --cwd aio example-e2e --setup --local --cliSpecsConcurrency=5 --shard=${CIRCLE_NODE_INDEX}/${CIRCLE_NODE_TOTAL} --retry 2
test_docs_examples_ivy:
executor:
# Needed because the example e2e tests depend on Chrome.
name: browsers-executor
resource_class: xlarge
# We increase the parallelism here to five while the "test_docs_examples" job runs with
# a parallelism of four. This is necessary because this job also need to run NGCC which
# takes up more time and we don't want these jobs to impact the overall CI turnaround.
parallelism: 5 parallelism: 5
steps: steps:
- custom_attach_workspace - custom_attach_workspace
- init_environment - init_environment
# Install aio # Install aio
- run: yarn --cwd aio install --frozen-lockfile --non-interactive - run: yarn --cwd aio install --frozen-lockfile --non-interactive
- when:
condition: << parameters.ivy >>
steps:
# Rename the Ivy packages dist folder to "dist/packages-dist" as the AIO # Rename the Ivy packages dist folder to "dist/packages-dist" as the AIO
# package installer picks up the locally built packages from that location. # package installer picks up the locally built packages from that location.
# *Note*: We could also adjust the packages installer, but given we won't have # *Note*: We could also adjust the packages installer, but given we won't have
# two different folders of Angular distributions in the future, we should keep # two different folders of Angular distributions in the future, we should keep
# the packages installer unchanged. # the packages installer unchanged.
- run: mv dist/packages-dist-ivy-aot dist/packages-dist - run: mv dist/packages-dist-ivy-aot dist/packages-dist
# Run examples tests with ivy. The "CIRCLE_NODE_INDEX" will be set if "parallelism" is enabled. # Run examples tests. The "CIRCLE_NODE_INDEX" will be set if "parallelism" is enabled.
# Since the parallelism is set to "3", there will be three parallel CircleCI containers # Since the parallelism is set to "5", there will be five parallel CircleCI containers.
# with either "0", "1" or "2" as node index. This can be passed to the "--shard" argument. # with either "0", "1", etc as node index. This can be passed to the "--shard" argument.
- run: yarn --cwd aio example-e2e --setup --local --ivy --cliSpecsConcurrency=5 --shard=${CIRCLE_NODE_INDEX}/${CIRCLE_NODE_TOTAL} --retry 2 - run: yarn --cwd aio example-e2e --setup --local <<# parameters.ivy >>--ivy<</ parameters.ivy >> --cliSpecsConcurrency=5 --shard=${CIRCLE_NODE_INDEX}/${CIRCLE_NODE_TOTAL} --retry 2
# This job should only be run on PR builds, where `CI_PULL_REQUEST` is not `false`. # This job should only be run on PR builds, where `CI_PULL_REQUEST` is not `false`.
aio_preview: aio_preview:
@ -826,7 +803,9 @@ workflows:
- test_aio_local: - test_aio_local:
requires: requires:
- build-npm-packages - build-npm-packages
- test_aio_local_ivy: - test_aio_local:
name: test_aio_local_ivy
ivy: true
requires: requires:
- build-npm-packages - build-npm-packages
- test_aio_tools: - test_aio_tools:
@ -835,7 +814,9 @@ workflows:
- test_docs_examples: - test_docs_examples:
requires: requires:
- build-npm-packages - build-npm-packages
- test_docs_examples_ivy: - test_docs_examples:
name: test_docs_examples_ivy
ivy: true
requires: requires:
- build-ivy-npm-packages - build-ivy-npm-packages
- aio_preview: - aio_preview:

View File

@ -18,7 +18,7 @@ Here are the most important tasks you might need to use:
* `yarn build` - create a production build of the application (after installing dependencies, boilerplate, etc). * `yarn build` - create a production build of the application (after installing dependencies, boilerplate, etc).
* `yarn build-local` - same as `build`, but use `setup-local` instead of `setup`. * `yarn build-local` - same as `build`, but use `setup-local` instead of `setup`.
* `yarn build-with-ivy` - same as `build-local`, but in addition also turns on `ivy` mode in aio. * `yarn build-local-with-ivy` - same as `build-local`, but in addition also turns on `ivy` mode in aio.
(Note: To turn on `ivy` mode in examples, see `yarn boilerplate:add` below.) (Note: To turn on `ivy` mode in examples, see `yarn boilerplate:add` below.)
* `yarn start` - run a development web server that watches the files; then builds the doc-viewer and reloads the page, as necessary. * `yarn start` - run a development web server that watches the files; then builds the doc-viewer and reloads the page, as necessary.

View File

@ -19,10 +19,10 @@
"build-local": "yarn ~~build", "build-local": "yarn ~~build",
"prebuild-local-ci": "yarn setup-local --no-build-packages", "prebuild-local-ci": "yarn setup-local --no-build-packages",
"build-local-ci": "yarn ~~build --progress=false", "build-local-ci": "yarn ~~build --progress=false",
"prebuild-with-ivy": "yarn setup-local && node scripts/switch-to-ivy", "prebuild-local-with-ivy": "yarn setup-local && node scripts/switch-to-ivy",
"build-with-ivy": "yarn ~~build", "build-local-with-ivy": "yarn ~~build",
"prebuild-with-ivy-ci": "yarn setup-local --no-build-packages && node scripts/switch-to-ivy", "prebuild-local-with-ivy-ci": "yarn setup-local --no-build-packages && node scripts/switch-to-ivy",
"build-with-ivy-ci": "yarn ~~build --progress=false", "build-local-with-ivy-ci": "yarn ~~build --progress=false",
"extract-cli-command-docs": "node tools/transforms/cli-docs-package/extract-cli-commands.js 0a36071b8", "extract-cli-command-docs": "node tools/transforms/cli-docs-package/extract-cli-commands.js 0a36071b8",
"lint": "yarn check-env && yarn docs-lint && ng lint && yarn example-lint && yarn tools-lint", "lint": "yarn check-env && yarn docs-lint && ng lint && yarn example-lint && yarn tools-lint",
"test": "yarn check-env && ng test", "test": "yarn check-env && ng test",