
- reducir CI_AIO_MIN_PWA_SCORE - se desconoce por qué la puntuación es 62 en CircleCI y 3/3, 3/3, 7/8 en Chrome - comience a agregar IDs de proyectos y URLs de Angular Hispano - elimine `test_docs_examples` ya que consume demasiados recursos y no necesitamos verificar que los ejemplos pasen las pruebas Relates to #3
407 lines
16 KiB
YAML
407 lines
16 KiB
YAML
# Configuration file for https://circleci.com/gh/angular/angular
|
|
|
|
# Note: YAML anchors allow an object to be re-used, reducing duplication.
|
|
# The ampersand declares an alias for an object, then later the `<<: *name`
|
|
# syntax dereferences it.
|
|
# See http://blog.daemonl.com/2016/02/yaml.html
|
|
# To validate changes, use an online parser, eg.
|
|
# http://yaml-online-parser.appspot.com/
|
|
|
|
# CircleCI configuration version
|
|
# Version 2.1 allows for extra config reuse features
|
|
# https://circleci.com/docs/2.0/reusing-config/#getting-started-with-config-reuse
|
|
version: 2.1
|
|
|
|
# We don't want to include the current branch name in the cache key because that would prevent
|
|
# PRs from being able to restore the cache since the branch names are always different for PRs.
|
|
# The cache key should only consist of dynamic values that change whenever something in the
|
|
# cache changes. For example:
|
|
# 1) yarn lock file changes --> cached "node_modules" are different.
|
|
# 2) bazel repository definitions change --> cached bazel repositories are different.
|
|
# Windows needs its own cache key because binaries in node_modules are different.
|
|
# **NOTE 1 **: If you change the cache key prefix, also sync the cache_key_fallback to match.
|
|
# **NOTE 2 **: Keep the static part of the cache key as prefix to enable correct fallbacks.
|
|
# See https://circleci.com/docs/2.0/caching/#restoring-cache for how prefixes work in CircleCI.
|
|
var_3: &cache_key v7-angular-node-12-{{ checksum ".bazelversion" }}-{{ checksum "yarn.lock" }}-{{ checksum "WORKSPACE" }}-{{ checksum "packages/bazel/package.bzl" }}-{{ checksum "aio/yarn.lock" }}
|
|
# We invalidate the cache if the Bazel version changes because otherwise the `bazelisk` cache
|
|
# folder will contain all previously used versions and ultimately cause the cache restoring to
|
|
# be slower due to its growing size.
|
|
var_4: &cache_key_fallback v7-angular-node-12-{{ checksum ".bazelversion" }}
|
|
var_3_win: &cache_key_win v7-angular-win-node-12-{{ checksum ".bazelversion" }}-{{ checksum "yarn.lock" }}-{{ checksum "WORKSPACE" }}-{{ checksum "packages/bazel/package.bzl" }}-{{ checksum "aio/yarn.lock" }}
|
|
var_4_win: &cache_key_win_fallback v7-angular-win-node-12-{{ checksum ".bazelversion" }}
|
|
|
|
# Workspace initially persisted by the `setup` job, and then enhanced by `build-npm-packages` and
|
|
# `build-ivy-npm-packages`.
|
|
# https://circleci.com/docs/2.0/workflows/#using-workspaces-to-share-data-among-jobs
|
|
# https://circleci.com/blog/deep-diving-into-circleci-workspaces/
|
|
var_7: &workspace_location ~/
|
|
|
|
# Filter to run a job on builds for pull requests only.
|
|
var_8: &only_on_pull_requests
|
|
filters:
|
|
branches:
|
|
only:
|
|
- /pull\/\d+/
|
|
|
|
# Filter to skip a job on builds for pull requests.
|
|
var_9: &skip_on_pull_requests
|
|
filters:
|
|
branches:
|
|
ignore:
|
|
- /pull\/\d+/
|
|
|
|
# Filter to run a job on builds for the master branch only.
|
|
var_10: &only_on_master
|
|
filters:
|
|
branches:
|
|
only:
|
|
- master
|
|
|
|
# Executor Definitions
|
|
# https://circleci.com/docs/2.0/reusing-config/#authoring-reusable-executors
|
|
# **NOTE 1**: Pin to exact images using an ID (SHA). See https://circleci.com/docs/2.0/circleci-images/#using-a-docker-image-id-to-pin-an-image-to-a-fixed-version.
|
|
# (Using the tag in not necessary when pinning by ID, but include it anyway for documentation purposes.)
|
|
# **NOTE 2**: If you change the version of the docker images, also change the `cache_key` suffix.
|
|
executors:
|
|
default-executor:
|
|
parameters:
|
|
resource_class:
|
|
type: string
|
|
default: medium
|
|
docker:
|
|
- image: circleci/node:12.14.1@sha256:f9de24fc0017059cc42ef7d07db060008af65a98b1f0cdd1ef3339213226bf6d
|
|
resource_class: << parameters.resource_class >>
|
|
working_directory: ~/ng
|
|
|
|
windows-executor:
|
|
working_directory: ~/ng
|
|
resource_class: windows.medium
|
|
# CircleCI windows VMs do have the GitBash shell available:
|
|
# https://github.com/CircleCI-Public/windows-preview-docs#shells
|
|
# But in this specific case we really should not use it because Bazel must not be ran from
|
|
# GitBash. These issues discuss why:
|
|
# https://github.com/bazelbuild/bazel/issues/5751
|
|
# https://github.com/bazelbuild/bazel/issues/5724#issuecomment-410194038
|
|
# https://github.com/bazelbuild/bazel/issues/6339#issuecomment-441600879
|
|
shell: powershell.exe -ExecutionPolicy Bypass
|
|
machine:
|
|
# Windows preview image that includes the following:
|
|
# - Visual Studio 2019 build tools
|
|
# - Node 12
|
|
# - yarn 1.17
|
|
# - Python 3 3.7.4
|
|
image: windows-server-2019-vs2019:201908-02
|
|
|
|
# Command Definitions
|
|
# https://circleci.com/docs/2.0/reusing-config/#authoring-reusable-commands
|
|
commands:
|
|
custom_attach_workspace:
|
|
description: Attach workspace at a predefined location
|
|
steps:
|
|
- attach_workspace:
|
|
at: *workspace_location
|
|
|
|
# Install shared libs used by Chrome that is either provisioned by
|
|
# rules_webtesting or by puppeteer.
|
|
install_chrome_libs:
|
|
description: Install shared Chrome libs
|
|
steps:
|
|
- run:
|
|
name: Install shared Chrome libs
|
|
command: |
|
|
sudo apt-get update
|
|
# Install GTK+ graphical user interface (libgtk-3-0), advanced linux sound architecture (libasound2)
|
|
# and network security service libraries (libnss3) & X11 Screen Saver extension library (libssx1)
|
|
# which are dependencies of chrome & needed for karma & protractor headless chrome tests.
|
|
# This is a very small install which takes around 7s in comparing to using the full
|
|
# circleci/node:x.x.x-browsers image.
|
|
sudo apt-get -y install libgtk-3-0 libasound2 libnss3 libxss1
|
|
|
|
# Install java runtime which is required by some integration tests such as
|
|
# //integration:hello_world__closure_test, //integration:i18n_test and
|
|
# //integration:ng_elements_test to run the closure compiler
|
|
install_java:
|
|
description: Install java
|
|
steps:
|
|
- run:
|
|
name: Install java
|
|
command: |
|
|
sudo apt-get update
|
|
# Install java runtime
|
|
sudo apt-get install default-jre
|
|
|
|
# Initializes the CI environment by setting up common environment variables.
|
|
init_environment:
|
|
description: Initializing environment (setting up variables)
|
|
steps:
|
|
- run:
|
|
name: Set up environment
|
|
environment:
|
|
CIRCLE_GIT_BASE_REVISION: << pipeline.git.base_revision >>
|
|
CIRCLE_GIT_REVISION: << pipeline.git.revision >>
|
|
command: ./.circleci/env.sh
|
|
- run:
|
|
# Configure git as the CircleCI `checkout` command does.
|
|
# This is needed because we only checkout on the setup job.
|
|
# Add GitHub to known hosts
|
|
name: Configure git
|
|
command: |
|
|
mkdir -p ~/.ssh
|
|
echo 'github.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==' >> ~/.ssh/known_hosts
|
|
git config --global url."ssh://git@github.com".insteadOf "https://github.com" || true
|
|
git config --global gc.auto 0 || true
|
|
|
|
# Normally this would be an individual job instead of a command.
|
|
# But startup and setup time for each individual windows job are high enough to discourage
|
|
# many small jobs, so instead we use a command for setup unless the gain becomes significant.
|
|
setup_win:
|
|
description: Setup windows node environment
|
|
steps:
|
|
# Use the Linux workspace directly, as it already has checkout, rebased and node modules.
|
|
- custom_attach_workspace
|
|
# Install Bazel pre-requisites that aren't in the preconfigured CircleCI Windows VM.
|
|
- run: ./.circleci/windows-env.ps1
|
|
- run: node --version
|
|
- run: yarn --version
|
|
- restore_cache:
|
|
keys:
|
|
- *cache_key_win
|
|
- *cache_key_win_fallback
|
|
# Reinstall to get windows binaries.
|
|
- run: yarn install --frozen-lockfile --non-interactive
|
|
# Install @bazel/bazelisk globally and use that for the first run.
|
|
# Workaround for https://github.com/bazelbuild/rules_nodejs/issues/894
|
|
# NB: the issue was for @bazel/bazel but the same problem applies to @bazel/bazelisk
|
|
- run: yarn global add @bazel/bazelisk@$env:BAZELISK_VERSION
|
|
- run: bazelisk info
|
|
|
|
notify_webhook_on_fail:
|
|
description: Notify a webhook about failure
|
|
parameters:
|
|
# `webhook_url_env_var` are secret env vars defined in CircleCI project settings.
|
|
# The URLs come from https://angular-team.slack.com/apps/A0F7VRE7N-circleci.
|
|
webhook_url_env_var:
|
|
type: env_var_name
|
|
steps:
|
|
- run:
|
|
when: on_fail
|
|
command: |
|
|
notificationJson="{\"text\":\":x: \`$CIRCLE_JOB\` job for $CIRCLE_BRANCH branch failed on build $CIRCLE_BUILD_NUM: $CIRCLE_BUILD_URL :scream:\"}"
|
|
curl --request POST --header "Content-Type: application/json" --data "$notificationJson" ${<< parameters.webhook_url_env_var >>}
|
|
|
|
# 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:
|
|
setup:
|
|
executor: default-executor
|
|
steps:
|
|
- checkout
|
|
- init_environment
|
|
- run:
|
|
name: Rebase PR on target branch
|
|
# After checkout, rebase on top of target branch.
|
|
command: >
|
|
if [[ -n "${CIRCLE_PR_NUMBER}" ]]; then
|
|
# User is required for rebase.
|
|
git config user.name "angular-ci"
|
|
git config user.email "angular-ci"
|
|
# Rebase PR on top of target branch.
|
|
node tools/rebase-pr.js
|
|
else
|
|
echo "This build is not over a PR, nothing to do."
|
|
fi
|
|
# This cache is saved in the build-npm-packages so that Bazel cache is also included.
|
|
- restore_cache:
|
|
keys:
|
|
- *cache_key
|
|
- *cache_key_fallback
|
|
- run:
|
|
name: Running Yarn install
|
|
command: yarn install --frozen-lockfile --non-interactive
|
|
# Yarn's requests sometimes take more than 10mins to complete.
|
|
no_output_timeout: 45m
|
|
- run: yarn --cwd aio install --frozen-lockfile --non-interactive
|
|
# Make the bazel directories and add a file to them if they don't exist already so that
|
|
# persist_to_workspace does not fail.
|
|
- run: |
|
|
if [ ! -d ~/bazel_repository_cache ]; then
|
|
mkdir ~/bazel_repository_cache
|
|
touch ~/bazel_repository_cache/MARKER
|
|
fi
|
|
# Persist any changes at this point to be reused by further jobs.
|
|
# **NOTE**: To add new content to the workspace, always persist on the same root.
|
|
- persist_to_workspace:
|
|
root: *workspace_location
|
|
paths:
|
|
- ./ng
|
|
- ./bazel_repository_cache
|
|
|
|
lint:
|
|
executor: default-executor
|
|
steps:
|
|
- custom_attach_workspace
|
|
- init_environment
|
|
|
|
- run: yarn -s tslint
|
|
- run: yarn -s ng-dev format changed $CI_GIT_BASE_REVISION --check
|
|
- run: yarn -s ts-circular-deps:check
|
|
- run: yarn -s ng-dev commit-message validate-range --range $CI_COMMIT_RANGE
|
|
|
|
test_aio:
|
|
executor: default-executor
|
|
steps:
|
|
- custom_attach_workspace
|
|
- init_environment
|
|
- install_chrome_libs
|
|
# Build aio
|
|
- run: yarn --cwd aio build --progress=false
|
|
# Lint the code
|
|
- run: yarn --cwd aio lint
|
|
# 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
|
|
# Run accessibility tests
|
|
- run: yarn --cwd aio test-a11y-score-localhost
|
|
|
|
deploy_aio:
|
|
executor: default-executor
|
|
steps:
|
|
- custom_attach_workspace
|
|
- init_environment
|
|
- install_chrome_libs
|
|
# Deploy angular.io to production (if necessary)
|
|
- run: setPublicVar_CI_STABLE_BRANCH
|
|
- run: yarn --cwd aio deploy-production
|
|
|
|
test_aio_local:
|
|
parameters:
|
|
viewengine:
|
|
type: boolean
|
|
default: false
|
|
executor: default-executor
|
|
steps:
|
|
- custom_attach_workspace
|
|
- init_environment
|
|
- install_chrome_libs
|
|
# Build aio (with local Angular packages)
|
|
- run: yarn --cwd aio build-local<<# parameters.viewengine >>-with-viewengine<</ parameters.viewengine >>-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
|
|
|
|
test_aio_tools:
|
|
executor: default-executor
|
|
steps:
|
|
- custom_attach_workspace
|
|
- init_environment
|
|
# Install
|
|
- run: yarn --cwd aio install --frozen-lockfile --non-interactive
|
|
- run: yarn --cwd aio extract-cli-command-docs
|
|
# Run tools tests
|
|
- run: yarn --cwd aio tools-test
|
|
- run: ./aio/aio-builds-setup/scripts/test.sh
|
|
|
|
# This job should only be run on PR builds, where `CI_PULL_REQUEST` is not `false`.
|
|
aio_preview:
|
|
executor: default-executor
|
|
environment:
|
|
AIO_SNAPSHOT_ARTIFACT_PATH: &aio_preview_artifact_path 'aio/tmp/snapshot.tgz'
|
|
steps:
|
|
- custom_attach_workspace
|
|
- init_environment
|
|
- run: ./aio/scripts/build-artifacts.sh $AIO_SNAPSHOT_ARTIFACT_PATH $CI_PULL_REQUEST $CI_COMMIT
|
|
- store_artifacts:
|
|
path: *aio_preview_artifact_path
|
|
# The `destination` needs to be kept in synch with the value of
|
|
# `AIO_ARTIFACT_PATH` in `aio/aio-builds-setup/Dockerfile`
|
|
destination: aio/dist/aio-snapshot.tgz
|
|
- run: node ./aio/scripts/create-preview $CIRCLE_BUILD_NUM
|
|
|
|
# This job should only be run on PR builds, where `CI_PULL_REQUEST` is not `false`.
|
|
test_aio_preview:
|
|
executor: default-executor
|
|
steps:
|
|
- custom_attach_workspace
|
|
- init_environment
|
|
- install_chrome_libs
|
|
- run: yarn --cwd aio install --frozen-lockfile --non-interactive
|
|
- run:
|
|
name: Wait for preview and run tests
|
|
command: node aio/scripts/test-preview.js $CI_PULL_REQUEST $CI_COMMIT $CI_AIO_MIN_PWA_SCORE
|
|
|
|
# The `build-npm-packages` tasks exist for backwards-compatibility with old scripts and
|
|
# tests that rely on the pre-Bazel `dist/packages-dist` output structure (build.sh).
|
|
# Having multiple jobs that independently build in this manner duplicates some work; we build
|
|
# the bazel packages more than once. Even though we have a remote cache, these jobs will
|
|
# typically run in parallel so up-to-date outputs will not be available at the time the build
|
|
# starts.
|
|
|
|
# Build the view engine npm packages. No new jobs should depend on this.
|
|
build-npm-packages:
|
|
executor:
|
|
name: default-executor
|
|
resource_class: medium
|
|
steps:
|
|
- custom_attach_workspace
|
|
- init_environment
|
|
- run: node scripts/build/build-packages-dist.js
|
|
|
|
# Save the npm packages from //packages/... for other workflow jobs to read
|
|
- persist_to_workspace:
|
|
root: *workspace_location
|
|
paths:
|
|
- ng/dist/packages-dist
|
|
- ng/dist/zone.js-dist
|
|
|
|
# Save dependencies and bazel repository cache to use on subsequent runs.
|
|
- save_cache:
|
|
key: *cache_key
|
|
paths:
|
|
- "node_modules"
|
|
- "aio/node_modules"
|
|
- "~/bazel_repository_cache"
|
|
- "~/.cache/bazelisk"
|
|
|
|
|
|
workflows:
|
|
version: 2
|
|
default_workflow:
|
|
jobs:
|
|
- setup:
|
|
filters:
|
|
branches:
|
|
ignore: g3
|
|
- lint:
|
|
requires:
|
|
- setup
|
|
- build-npm-packages:
|
|
requires:
|
|
- setup
|
|
- test_aio:
|
|
requires:
|
|
- setup
|
|
- deploy_aio:
|
|
requires:
|
|
- test_aio
|
|
- test_aio_local:
|
|
requires:
|
|
- build-npm-packages
|
|
- test_aio_tools:
|
|
requires:
|
|
- build-npm-packages
|
|
- aio_preview:
|
|
# Only run on PR builds. (There can be no previews for non-PR builds.)
|
|
<<: *only_on_pull_requests
|
|
requires:
|
|
- setup
|
|
- test_aio_preview:
|
|
requires:
|
|
- aio_preview
|