2017-07-13 15:16:02 -04:00
|
|
|
# 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/
|
|
|
|
|
2017-12-12 04:23:09 -05:00
|
|
|
# Variables
|
|
|
|
|
|
|
|
## IMPORTANT
|
|
|
|
# If you change the `docker_image` version, also change the `cache_key` suffix and the version of
|
|
|
|
# `com_github_bazelbuild_buildtools` in the `/WORKSPACE` file.
|
2018-04-10 14:50:43 -04:00
|
|
|
var_1: &docker_image angular/ngcontainer:0.2.0
|
|
|
|
var_2: &cache_key v2-angular-{{ .Branch }}-{{ checksum "yarn.lock" }}-0.2.0
|
2017-12-12 04:23:09 -05:00
|
|
|
|
2018-04-13 14:53:48 -04:00
|
|
|
# Define common ENV vars
|
|
|
|
var_3: &define_env_vars
|
|
|
|
run: echo "export PROJECT_ROOT=$(pwd)" >> $BASH_ENV
|
|
|
|
|
2018-01-25 12:55:27 -05:00
|
|
|
# See remote cache documentation in /docs/BAZEL.md
|
2018-04-13 14:53:48 -04:00
|
|
|
var_4: &setup-bazel-remote-cache
|
2018-01-25 12:55:27 -05:00
|
|
|
run:
|
|
|
|
name: Start up bazel remote cache proxy
|
|
|
|
command: ~/bazel-remote-proxy -backend circleci://
|
|
|
|
background: true
|
|
|
|
|
2017-07-13 15:16:02 -04:00
|
|
|
# Settings common to each job
|
|
|
|
anchor_1: &job_defaults
|
2017-06-14 19:38:27 -04:00
|
|
|
working_directory: ~/ng
|
|
|
|
docker:
|
2017-12-12 04:23:09 -05:00
|
|
|
- image: *docker_image
|
2017-06-14 19:38:27 -04:00
|
|
|
|
2017-07-13 15:16:02 -04:00
|
|
|
# After checkout, rebase on top of master.
|
|
|
|
# Similar to travis behavior, but not quite the same.
|
|
|
|
# See https://discuss.circleci.com/t/1662
|
|
|
|
anchor_2: &post_checkout
|
2017-12-12 04:23:09 -05:00
|
|
|
post: git pull --ff-only origin "refs/pull/${CIRCLE_PULL_REQUEST//*pull\//}/merge"
|
2017-07-13 15:16:02 -04:00
|
|
|
|
2017-06-02 20:03:15 -04:00
|
|
|
version: 2
|
|
|
|
jobs:
|
2017-06-14 19:38:27 -04:00
|
|
|
lint:
|
2017-07-13 15:16:02 -04:00
|
|
|
<<: *job_defaults
|
2017-06-02 20:03:15 -04:00
|
|
|
steps:
|
2017-06-22 17:55:33 -04:00
|
|
|
- checkout:
|
2017-07-13 15:16:02 -04:00
|
|
|
<<: *post_checkout
|
2018-01-25 12:55:27 -05:00
|
|
|
|
2018-03-01 10:15:30 -05:00
|
|
|
# Check BUILD.bazel formatting before we have a node_modules directory
|
|
|
|
# Then we don't need any exclude pattern to avoid checking those files
|
|
|
|
- run: 'buildifier -mode=check $(find . -type f \( -name BUILD.bazel -or -name BUILD \)) ||
|
|
|
|
(echo "BUILD files not formatted. Please run ''yarn buildifier''" ; exit 1)'
|
|
|
|
# Run the skylark linter to check our Bazel rules
|
2018-04-10 14:50:43 -04:00
|
|
|
# deprecated-api is disabled because we use actions.new_file(genfiles_dir)
|
|
|
|
# which has no replacement, see https://github.com/bazelbuild/bazel/issues/4858
|
2018-03-01 10:15:30 -05:00
|
|
|
- run: 'find . -type f -name "*.bzl" |
|
2018-04-10 14:50:43 -04:00
|
|
|
xargs java -jar /usr/local/bin/Skylint_deploy.jar --disable-checks=deprecated-api ||
|
2018-01-05 13:53:55 -05:00
|
|
|
(echo -e "\n.bzl files have lint errors. Please run ''yarn skylint''"; exit 1)'
|
2018-01-25 12:55:27 -05:00
|
|
|
|
2017-06-02 20:03:15 -04:00
|
|
|
- restore_cache:
|
2017-12-12 04:23:09 -05:00
|
|
|
key: *cache_key
|
2017-06-21 00:08:20 -04:00
|
|
|
|
2017-10-19 05:19:45 -04:00
|
|
|
- run: yarn install --frozen-lockfile --non-interactive
|
2017-06-02 20:03:15 -04:00
|
|
|
- run: ./node_modules/.bin/gulp lint
|
2017-06-21 00:08:20 -04:00
|
|
|
|
2018-04-23 14:46:02 -04:00
|
|
|
test:
|
2017-07-13 15:16:02 -04:00
|
|
|
<<: *job_defaults
|
2018-03-07 20:26:03 -05:00
|
|
|
resource_class: xlarge
|
2017-06-14 19:38:27 -04:00
|
|
|
steps:
|
2018-04-13 14:53:48 -04:00
|
|
|
- *define_env_vars
|
2017-07-13 15:16:02 -04:00
|
|
|
- checkout:
|
|
|
|
<<: *post_checkout
|
2018-01-25 12:55:27 -05:00
|
|
|
# See remote cache documentation in /docs/BAZEL.md
|
|
|
|
- run: .circleci/setup_cache.sh
|
|
|
|
- run: sudo cp .circleci/bazel.rc /etc/bazel.bazelrc
|
|
|
|
- *setup-bazel-remote-cache
|
|
|
|
|
2017-06-14 19:38:27 -04:00
|
|
|
- restore_cache:
|
2017-12-12 04:23:09 -05:00
|
|
|
key: *cache_key
|
2018-01-05 13:53:55 -05:00
|
|
|
|
2018-03-07 20:26:03 -05:00
|
|
|
- run: ls /home/circleci/bazel_repository_cache || true
|
2017-12-05 14:36:08 -05:00
|
|
|
- run: bazel info release
|
2017-09-21 09:39:43 -04:00
|
|
|
- run: bazel run @yarn//:yarn
|
2018-04-10 14:11:45 -04:00
|
|
|
# Use bazel query so that we explicitly ask for all buildable targets to be built as well
|
|
|
|
# This avoids waiting for the slowest build target to finish before running the first test
|
2017-12-13 12:18:16 -05:00
|
|
|
# See https://github.com/bazelbuild/bazel/issues/4257
|
2018-04-10 14:11:45 -04:00
|
|
|
# NOTE: Angular developers should typically just bazel build //packages/... or bazel test //packages/...
|
|
|
|
- run: bazel query --output=label //... | xargs bazel test
|
2017-12-13 12:18:16 -05:00
|
|
|
|
2018-02-02 18:25:33 -05:00
|
|
|
# CircleCI will allow us to go back and view/download these artifacts from past builds.
|
|
|
|
# Also we can use a service like https://buildsize.org/ to automatically track binary size of these artifacts.
|
|
|
|
- store_artifacts:
|
|
|
|
path: dist/bin/packages/core/test/bundling/hello_world/bundle.min.js
|
|
|
|
destination: packages/core/test/bundling/hello_world/bundle.min.js
|
2018-04-02 19:34:48 -04:00
|
|
|
- store_artifacts:
|
|
|
|
path: dist/bin/packages/core/test/bundling/todo/bundle.min.js
|
|
|
|
destination: packages/core/test/bundling/todo/bundle.min.js
|
2018-02-06 20:56:35 -05:00
|
|
|
- store_artifacts:
|
2018-04-16 17:55:47 -04:00
|
|
|
path: dist/bin/packages/core/test/bundling/hello_world/bundle.min.js.br
|
|
|
|
destination: packages/core/test/bundling/hello_world/bundle.min.js.br
|
2018-04-02 19:34:48 -04:00
|
|
|
- store_artifacts:
|
2018-04-16 17:55:47 -04:00
|
|
|
path: dist/bin/packages/core/test/bundling/todo/bundle.min.js.br
|
|
|
|
destination: packages/core/test/bundling/todo/bundle.min.js.br
|
2018-02-02 18:25:33 -05:00
|
|
|
|
2017-06-02 20:03:15 -04:00
|
|
|
- save_cache:
|
2017-12-12 04:23:09 -05:00
|
|
|
key: *cache_key
|
2017-06-02 20:03:15 -04:00
|
|
|
paths:
|
|
|
|
- "node_modules"
|
2018-03-07 20:26:03 -05:00
|
|
|
- "~/bazel_repository_cache"
|
2017-06-14 19:38:27 -04:00
|
|
|
|
2018-04-23 14:46:02 -04:00
|
|
|
# This job exists only for backwards-compatibility with old scripts and tests
|
|
|
|
# that rely on the pre-Bazel dist/packages-dist layout.
|
|
|
|
# It duplicates some work with the job above: we build the bazel packages
|
|
|
|
# twice. 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.
|
|
|
|
# No new jobs should depend on this one.
|
|
|
|
build-packages-dist:
|
|
|
|
<<: *job_defaults
|
|
|
|
resource_class: xlarge
|
|
|
|
steps:
|
|
|
|
- *define_env_vars
|
|
|
|
- checkout:
|
|
|
|
<<: *post_checkout
|
|
|
|
# See remote cache documentation in /docs/BAZEL.md
|
|
|
|
- run: .circleci/setup_cache.sh
|
|
|
|
- run: sudo cp .circleci/bazel.rc /etc/bazel.bazelrc
|
|
|
|
- *setup-bazel-remote-cache
|
|
|
|
|
|
|
|
- run: bazel run @yarn//:yarn
|
|
|
|
- run: scripts/build-packages-dist.sh
|
|
|
|
|
|
|
|
# Save the npm packages from //packages/... for other workflow jobs to read
|
|
|
|
# https://circleci.com/docs/2.0/workflows/#using-workspaces-to-share-data-among-jobs
|
|
|
|
- persist_to_workspace:
|
|
|
|
root: dist
|
|
|
|
paths:
|
|
|
|
- packages-dist
|
|
|
|
|
|
|
|
# We run the integration tests outside of Bazel for now.
|
|
|
|
# They are a separate workflow job so that they can be easily re-run.
|
|
|
|
# When the tests are ported to bazel test targets, they should move to the "test"
|
|
|
|
# job above, as part of the bazel test command. That has flaky_test_attempts so the
|
|
|
|
# need to re-run manually should be alleviated.
|
|
|
|
# See comments inside the integration/run_tests.sh script.
|
|
|
|
integration_test:
|
|
|
|
<<: *job_defaults
|
|
|
|
steps:
|
|
|
|
- *define_env_vars
|
|
|
|
- checkout:
|
|
|
|
<<: *post_checkout
|
|
|
|
- attach_workspace:
|
|
|
|
at: dist
|
|
|
|
- run: xvfb-run --auto-servernum ./integration/run_tests.sh
|
|
|
|
|
|
|
|
# This job updates the content of repos like github.com/angular/core-builds
|
|
|
|
# for every green build on angular/angular.
|
|
|
|
publish_snapshot:
|
|
|
|
<<: *job_defaults
|
|
|
|
steps:
|
2018-04-27 19:21:38 -04:00
|
|
|
# See below - ideally this job should not trigger for non-upstream builds.
|
|
|
|
# But since it does, we have to check this condition.
|
|
|
|
- run:
|
|
|
|
name: Skip this job for Pull Requests and Fork builds
|
|
|
|
# Note, `|| true` on the end makes this step always exit 0
|
|
|
|
command: '[[
|
|
|
|
-v CIRCLE_PR_NUMBER
|
|
|
|
|| "$CIRCLE_PROJECT_USERNAME" != "angular"
|
|
|
|
|| "$CIRCLE_PROJECT_REPONAME" != "angular"
|
|
|
|
]] && circleci step halt || true'
|
2018-04-23 14:46:02 -04:00
|
|
|
- checkout:
|
|
|
|
<<: *post_checkout
|
|
|
|
- attach_workspace:
|
|
|
|
at: dist
|
|
|
|
# CircleCI has a config setting to force SSH for all github connections
|
|
|
|
# This is not compatible with our mechanism of using a Personal Access Token
|
|
|
|
# Clear the global setting
|
|
|
|
- run: git config --global --unset "url.ssh://git@github.com.insteadof"
|
2018-04-27 19:21:38 -04:00
|
|
|
- run:
|
|
|
|
name: Decrypt github credentials
|
|
|
|
command: 'openssl aes-256-cbc -d -in .circleci/github_token -k "${KEY}" -out ~/.git_credentials'
|
2018-04-23 14:46:02 -04:00
|
|
|
- run: ./scripts/ci/publish-build-artifacts.sh
|
|
|
|
|
2018-02-27 18:24:07 -05:00
|
|
|
aio_monitoring:
|
|
|
|
<<: *job_defaults
|
|
|
|
steps:
|
|
|
|
- checkout:
|
|
|
|
<<: *post_checkout
|
|
|
|
- restore_cache:
|
|
|
|
key: *cache_key
|
|
|
|
- run: xvfb-run --auto-servernum ./aio/scripts/test-production.sh
|
|
|
|
|
2017-06-14 19:38:27 -04:00
|
|
|
workflows:
|
|
|
|
version: 2
|
|
|
|
default_workflow:
|
|
|
|
jobs:
|
|
|
|
- lint
|
2018-04-23 14:46:02 -04:00
|
|
|
- test
|
|
|
|
- build-packages-dist
|
|
|
|
- integration_test:
|
|
|
|
requires:
|
|
|
|
- build-packages-dist
|
|
|
|
- publish_snapshot:
|
|
|
|
# Note: no filters on this job because we want it to run for all upstream branches
|
|
|
|
# We'd really like to filter out pull requests here, but not yet available:
|
|
|
|
# https://discuss.circleci.com/t/workflows-pull-request-filter/14396/4
|
2018-04-27 19:21:38 -04:00
|
|
|
# Instead, the job just exits immediately at the first step.
|
2018-04-23 14:46:02 -04:00
|
|
|
requires:
|
2018-04-23 19:41:10 -04:00
|
|
|
# Only publish if tests and integration tests pass
|
2018-04-23 19:14:34 -04:00
|
|
|
- test
|
2018-04-23 19:41:10 -04:00
|
|
|
- integration_test
|
2018-04-23 19:14:34 -04:00
|
|
|
# Get the artifacts to publish from the build-packages-dist job
|
|
|
|
# since the publishing script expects the legacy outputs layout.
|
2018-04-23 14:46:02 -04:00
|
|
|
- build-packages-dist
|
|
|
|
|
2018-02-27 18:24:07 -05:00
|
|
|
aio_monitoring:
|
|
|
|
jobs:
|
|
|
|
- aio_monitoring
|
|
|
|
triggers:
|
|
|
|
- schedule:
|
|
|
|
cron: "0 0 * * *"
|
|
|
|
filters:
|
|
|
|
branches:
|
|
|
|
only:
|
|
|
|
- master
|