# Configuration file for https://circleci.com/gh/bazelbuild/rules_typescript

# 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/

## IMPORTANT
# If you change the `docker_image` version, also change the `cache_key` suffix
var_1: &docker_image circleci/node:10.12-browsers
var_2: &cache_key rules_typescript-{{ checksum "yarn.lock" }}-internal/karma:{{ checksum "internal/karma/yarn.lock" }}-node:10.12-browsers
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: ~/ts
  # Use a docker image with bazel already installed
  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/${CI_PULL_REQUEST//*pull\//}/merge"

version: 2
jobs:
  build:
    <<: *job_defaults
    steps:
      - checkout:
          <<: *post_checkout
      - run: .circleci/setup_cache.sh
      - run: sudo cp .circleci/bazel.rc /etc/bazel.bazelrc
      - *setup-bazel-remote-cache
      - restore_cache:
          key: *cache_key

      - run: yarn install
      - run: yarn bazel info release
      - run: yarn bazel build ...
      - run: yarn bazel test ...
      - run: yarn bazel build @disable_tsetse_for_external_test//...

  # This job tests the same stuff, but without the .bazelrc file.
  # It disables worker mode, for example.
  build_no_bazelrc:
    <<: *job_defaults
    steps:
      - checkout:
          <<: *post_checkout
      - run: .circleci/setup_cache.sh
      - run: sudo cp .circleci/bazel.rc /etc/bazel.bazelrc
      - *setup-bazel-remote-cache
      - restore_cache:
          key: *cache_key

      - run: yarn install
      - run: yarn bazel --bazelrc=/dev/null info release
      # We cherry pick the memory utilization options from .circleci/bazel.rc here.
      # Since the default CircleCI container has only 4G, limiting the memory
      # is required to keep Bazel from exhausting the memory.
      - run: yarn bazel --bazelrc=/dev/null --host_jvm_args=-Xmx3g build ... --local_resources=2560,1.0,1.0
      - run: yarn bazel --bazelrc=/dev/null --host_jvm_args=-Xmx3g test ... --local_resources=2560,1.0,1.0
      - run: yarn bazel --bazelrc=/dev/null --host_jvm_args=-Xmx3g build @disable_tsetse_for_external_test//... --local_resources=2560,1.0,1.0

      - save_cache:
          key: *cache_key
          paths:
            - "node_modules"

  # Runs end-to-end browser tests.
  test:
    <<: *job_defaults
    resource_class: xlarge
    steps:
      - checkout:
          <<: *post_checkout
      - run: .circleci/setup_cache.sh
      - run: sudo cp .circleci/bazel.rc /etc/bazel.bazelrc
      - *setup-bazel-remote-cache
      - restore_cache:
          key: *cache_key

      - run: yarn install
      # Build the npm packages which are used in the e2e tests
      - run: yarn bazel build //internal:npm_package
      - run: yarn bazel build //internal/karma:npm_package
      - run: xvfb-run -a yarn e2e

  lint:
    <<: *job_defaults
    steps:
      - checkout:
          <<: *post_checkout

      - run: yarn install

      # Run the skylark linter to check our Bazel rules
      # Note, this is not yet enforced, because
      # - buildifier doesn't exit non-zero in the presence of lint warnings: https://github.com/bazelbuild/buildtools/issues/470
      # - false positive for rule docstrings: https://github.com/bazelbuild/buildtools/issues/471
      - run: 'yarn bazel:lint ||
              (echo -e "\n.bzl files have lint errors. Please run ''yarn bazel:lint-fix''"; exit 1)'

      # Enforce that BUILD files are formatted.
      - run: 'yarn bazel:format -mode=check ||
              (echo "BUILD files not formatted. Please run ''yarn bazel:format''" ; exit 1)'

workflows:
  version: 2
  # Run the two builds in parallel, reporting separate status to github PRs.
  default_workflow:
    jobs:
      - build
      - build_no_bazelrc
      - test
      - lint
