# 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:node:{{ checksum "internal/karma/yarn.lock" }}-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: 'cd internal/karma &&
              yarn install &&
              yarn bazel build ...'
      - 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: 'cd internal/karma &&
              yarn install &&
              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 build @disable_tsetse_for_external_test//... --local_resources=2560,1.0,1.0

      - save_cache:
          key: *cache_key
          paths:
            - "node_modules"
            - "internal/karma/node_modules"

  # Runs end-to-end browser tests.
  test:
    <<: *job_defaults
    resource_class: xlarge
    environment:
      CHROMEDRIVER_VERSION_ARG: --versions.chrome 2.41
    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: 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
