ec445b5c73
When I enabled bazel remote caching, I also switched to running buildifier and skylint from the package.json script, which builds them from head. With remote caching, we do get cache hits for these, but looking up the action inputs actually takes quite a bit of time since we have to first fetch the remote repository, then do loading and analysis, then read the inputs to determine the cache key. It's more important to keep the lint job fast, so I'm reverting that part of the change for now. We can experiment with building them from head in a less critical repo. PR Close #22526
101 lines
3.6 KiB
YAML
101 lines
3.6 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/
|
|
|
|
# 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.
|
|
var_1: &docker_image angular/ngcontainer:0.1.0
|
|
var_2: &cache_key angular-{{ .Branch }}-{{ checksum "yarn.lock" }}-0.1.0
|
|
|
|
# See remote cache documentation in /docs/BAZEL.md
|
|
var_3: &setup-bazel-remote-cache
|
|
run:
|
|
name: Start up bazel remote cache proxy
|
|
command: ~/bazel-remote-proxy -backend circleci://
|
|
background: true
|
|
|
|
# Settings common to each job
|
|
anchor_1: &job_defaults
|
|
working_directory: ~/ng
|
|
docker:
|
|
- image: *docker_image
|
|
|
|
# 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
|
|
post: git pull --ff-only origin "refs/pull/${CIRCLE_PULL_REQUEST//*pull\//}/merge"
|
|
|
|
version: 2
|
|
jobs:
|
|
lint:
|
|
<<: *job_defaults
|
|
steps:
|
|
- checkout:
|
|
<<: *post_checkout
|
|
|
|
# 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
|
|
- run: 'find . -type f -name "*.bzl" |
|
|
xargs java -jar /usr/local/bin/Skylint_deploy.jar ||
|
|
(echo -e "\n.bzl files have lint errors. Please run ''yarn skylint''"; exit 1)'
|
|
|
|
- restore_cache:
|
|
key: *cache_key
|
|
|
|
- run: yarn install --frozen-lockfile --non-interactive
|
|
- run: ./node_modules/.bin/gulp lint
|
|
|
|
build:
|
|
<<: *job_defaults
|
|
resource_class: large
|
|
steps:
|
|
- 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
|
|
|
|
- restore_cache:
|
|
key: *cache_key
|
|
|
|
- run: bazel info release
|
|
- run: bazel run @yarn//:yarn
|
|
# Use bazel query so that we explicitly ask for all buildable targets to be built as well
|
|
# This avoids waiting for a build command to finish before running the first test
|
|
# See https://github.com/bazelbuild/bazel/issues/4257
|
|
- run: bazel query --output=label '//modules/... union //packages/... union //tools/...' | xargs bazel test
|
|
|
|
# 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
|
|
- store_artifacts:
|
|
path: dist/bin/packages/core/test/bundling/hello_world/bundle.min.js.brotli
|
|
destination: packages/core/test/bundling/hello_world/bundle.min.js.brotli
|
|
|
|
- save_cache:
|
|
key: *cache_key
|
|
paths:
|
|
- "node_modules"
|
|
|
|
workflows:
|
|
version: 2
|
|
default_workflow:
|
|
jobs:
|
|
- lint
|
|
- build
|