# 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 v2-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: xlarge 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: ls /home/circleci/bazel_repository_cache || true - run: bazel info release - run: bazel run @yarn//:yarn # We could use bazel query so that we explicitly ask for all buildable targets to be built as well # This would avoid 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 //... | xargs bazel test # However it makes it more confusing for Angular developers who are still novice at Bazel # So keep it simple for now - run: bazel build //... - run: 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" - "~/bazel_repository_cache" workflows: version: 2 default_workflow: jobs: - lint - build