version: 2

references:
  # Install the dependencies required for tests.
  # Add the step "- *install-dependencies" to the beginning of your job to run
  # this command.
  install-dependencies: &install-dependencies
    run:
      name: Install dependencies
      # TODO: We can split these dependencies up by job to reduce installation
      # time.
      command: |
        sudo dpkg --add-architecture i386
        sudo apt-get -y -qq update
        sudo apt-get -y install \
            gcc-multilib-powerpc-linux-gnu gcc-arm-linux-gnueabi \
            libc6-dev-armel-cross gcc-aarch64-linux-gnu libc6-dev-arm64-cross \
            libc6-dev-ppc64-powerpc-cross

jobs:
  # the first half of the jobs are in this test
  short-tests-0:
    # TODO: Create a small custom docker image with all the dependencies we need
    #       preinstalled to reduce installation time.
    docker:
      - image: circleci/buildpack-deps:bionic
    steps:
      - checkout
      - *install-dependencies
      - run:
          name: Test
          command: |
            cc -v; CFLAGS="-O0 -Werror" make all && make clean
            make c99build         ; make clean
            make c11build         ; make clean
            make aarch64build     ; make clean
            make -j regressiontest; make clean
            make shortest         ; make clean
            make cxxtest          ; make clean
  # the second half of the jobs are in this test
  short-tests-1:
    docker:
      - image: circleci/buildpack-deps:bionic
    steps:
      - checkout
      - *install-dependencies
      - run:
          name: Test
          command: |
            make gnu90build; make clean
            make gnu99build; make clean
            make ppc64build; make clean
            make ppcbuild  ; make clean
            make armbuild  ; make clean
            make -C tests test-legacy test-longmatch test-symbols; make clean
            make -C lib libzstd-nomt; make clean
  # This step is only run on release tags.
  # It publishes the source tarball as artifacts and if the GITHUB_TOKEN
  # environment variable is set it will publish the source tarball to the
  # tagged release.
  publish-github-release:
    docker:
      - image: cibuilds/github:0.12.0
    environment:
      CIRCLE_ARTIFACTS: /tmp/circleci-artifacts
    steps:
      - checkout
      - run:
          name: Install dependencies
          command: |
            apk add -q gzip coreutils
      - run:
          name: Publish
          command: |
            export VERSION=$(echo $CIRCLE_TAG | tail -c +2)
            export ZSTD_VERSION=zstd-$VERSION
            git archive $CIRCLE_TAG --prefix $ZSTD_VERSION/ --format tar \
                        -o $ZSTD_VERSION.tar
            gzip -9 $ZSTD_VERSION.tar
            sha256sum $ZSTD_VERSION.tar.gz > $ZSTD_VERSION.tar.gz.sha256sum
            mkdir -p $CIRCLE_ARTIFACTS
            cp $ZSTD_VERSION.tar.gz{,.sha256sum} $CIRCLE_ARTIFACTS
      - store_artifacts:
          path: /tmp/circleci-artifacts

workflows:
  version: 2
  commit:
    jobs:
      # Run the tests in parallel
      - short-tests-0:
          filters:
            tags:
              only: /.*/
      - short-tests-1:
          filters:
            tags:
              only: /.*/
      # Only run on release tags.
      - publish-github-release:
          requires:
            - short-tests-0
            - short-tests-1
          filters:
            branches:
              ignore: /.*/
            tags:
              only: /^v\d+\.\d+\.\d+$/

  # Longer tests
    #- make -C tests test-zstd-nolegacy && make clean
    #- pyenv global 3.4.4; make -C tests versionsTest && make clean
    #- make zlibwrapper         && make clean
    #- gcc -v; make -C tests test32 MOREFLAGS="-I/usr/include/x86_64-linux-gnu" && make clean
    #- make uasan               && make clean
    #- make asan32              && make clean
    #- make -C tests test32 CC=clang MOREFLAGS="-g -fsanitize=address -I/usr/include/x86_64-linux-gnu"
  # Valgrind tests
    #- CFLAGS="-O1 -g" make -C zlibWrapper valgrindTest && make clean
    #- make -C tests valgrindTest && make clean
  # ARM, AArch64, PowerPC, PowerPC64 tests
    #- make ppctest             && make clean
    #- make ppc64test           && make clean
    #- make armtest             && make clean
    #- make aarch64test         && make clean
