version: 2
jobs:
  build:
    docker:
      - image: koreader/koappimage:0.1.7
        environment:
          EMULATE_READER: 1
          # this is for shellcheck 0.4.5 and lower; can be removed for 0.4.6
          LC_ALL: en_US.UTF8
    parallelism: 2
    steps:
      - checkout
      - restore_cache:
          keys:
            # binary dependencies require {{ arch }} because there are different CPUs in use on the servers
            - deps-{{ arch }}-{{ checksum ".ci/install.sh" }}-{{ checksum ".ci/helper_luarocks.sh" }}
      # need to init some stuff first or git will complain when sticking in base cache
      - run: git submodule init base && git submodule update base && pushd base && git submodule init && git submodule update && popd
      # we can't use command output directly for cache check so we write it to git-rev-base
      - run: pushd base && git_rev_base=$(git describe HEAD) && popd && echo $git_rev_base && echo $git_rev_base >git-rev-base
      - restore_cache:
          keys:
            - build-{{ arch }}-{{ checksum "git-rev-base" }}
      - run: echo 'export PATH=${HOME}/bin:${PATH}' >> $BASH_ENV
      - run:
          name: setup
          command: .ci/before_install.sh

      # installs and caches testing tools
      - run:
          name: install
          command: .ci/install.sh
      - save_cache:
          key: deps-{{ arch }}-{{ checksum ".ci/install.sh" }}-{{ checksum ".ci/helper_luarocks.sh" }}
          paths:
            - "/home/ko/bin"
            - "/home/ko/.luarocks"
            # compiled luarocks binaries
            - "install"

      # installs everything and caches base
      - run:
          name: fetch
          command: .ci/fetch.sh
      - run:
          name: check
          command: .ci/check.sh
      - run:
          name: build
          command: .ci/build.sh
      # we want to save cache prior to testing so we don't have to clean it up
      - save_cache:
          key: build-{{ arch }}-{{ checksum "git-rev-base" }}
          paths:
            - "/home/ko/.ccache"
            - "base"

      # our lovely unit tests
      - run:
          name: test
          command: .ci/test.sh

      # docs, coverage, and test timing (can we use two outputs at once?); master branch only
      - run:
          name: docs-and-coverage
          command: .ci/after_success.sh
      # by storing the test results CircleCI automatically distributes tests based on execution time
      - store_test_results:
          path: koreader-emulator-x86_64-linux-gnu/koreader
      # CircleCI doesn't make the test results available as artifacts (October 2017)
      - store_artifacts:
          path: koreader-emulator-x86_64-linux-gnu/koreader/junit-test-results.xml

workflows:
  version: 2
  build:
    jobs:
      - build:
          context: koreader-vars
