| version: 2 |
| |
| 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: fbopensource/zstd-circleci-primary:0.0.1 |
| steps: |
| - checkout |
| - run: |
| name: Test |
| command: | |
| ./tests/test-license.py |
| cc -v; CFLAGS="-O0 -Werror -pedantic" 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: fbopensource/zstd-circleci-primary:0.0.1 |
| steps: |
| - checkout |
| - 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; 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: fbopensource/zstd-circleci-primary:0.0.1 |
| environment: |
| CIRCLE_ARTIFACTS: /tmp/circleci-artifacts |
| steps: |
| - checkout |
| - 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 |
| sha256sum $ZSTD_VERSION.tar > $ZSTD_VERSION.tar.sha256 |
| zstd -19 $ZSTD_VERSION.tar |
| sha256sum $ZSTD_VERSION.tar.zst > $ZSTD_VERSION.tar.zst.sha256 |
| gzip -k -9 $ZSTD_VERSION.tar |
| sha256sum $ZSTD_VERSION.tar.gz > $ZSTD_VERSION.tar.gz.sha256 |
| mkdir -p $CIRCLE_ARTIFACTS |
| cp $ZSTD_VERSION.tar* $CIRCLE_ARTIFACTS |
| - store_artifacts: |
| path: /tmp/circleci-artifacts |
| # This step should only be run in a cron job |
| regression-test: |
| docker: |
| - image: fbopensource/zstd-circleci-primary:0.0.1 |
| environment: |
| CIRCLE_ARTIFACTS: /tmp/circleci-artifacts |
| steps: |
| - checkout |
| # Restore the cached resources. |
| - restore_cache: |
| # We try our best to bust the cache when the data changes by hashing |
| # data.c. If that doesn't work, simply update the version number here |
| # and below. If we fail to bust the cache, the regression testing will |
| # still work, since it has its own stamp, but will need to redownload |
| # everything. |
| keys: |
| - regression-cache-{{ checksum "tests/regression/data.c" }}-v0 |
| - run: |
| name: Regression Test |
| command: | |
| make -C programs zstd |
| make -C tests/regression test |
| mkdir -p $CIRCLE_ARTIFACTS |
| ./tests/regression/test \ |
| --cache tests/regression/cache \ |
| --output $CIRCLE_ARTIFACTS/results.csv \ |
| --zstd programs/zstd |
| echo "NOTE: The new results.csv is uploaded as an artifact to this job" |
| echo " If this fails, go to the Artifacts pane in CircleCI, " |
| echo " download /tmp/circleci-artifacts/results.csv, and if they " |
| echo " are still good, copy it into the repo and commit it." |
| echo "> diff tests/regression/results.csv $CIRCLE_ARTIFACTS/results.csv" |
| diff tests/regression/results.csv $CIRCLE_ARTIFACTS/results.csv |
| # Only save the cache on success (default), since if the failure happened |
| # before we stamp the data cache, we will have a bad cache for this key. |
| - save_cache: |
| key: regression-cache-{{ checksum "tests/regression/data.c" }}-v0 |
| paths: |
| - tests/regression/cache |
| - 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: /.*/ |
| # Create a branch called regression and set it to dev to force a |
| # regression test run |
| - regression-test: |
| filters: |
| branches: |
| only: |
| - regression |
| # Only run on release tags. |
| - publish-github-release: |
| requires: |
| - short-tests-0 |
| - short-tests-1 |
| filters: |
| branches: |
| ignore: /.*/ |
| tags: |
| only: /^v\d+\.\d+\.\d+$/ |
| nightly: |
| triggers: |
| - schedule: |
| cron: "0 0 * * *" |
| filters: |
| branches: |
| only: |
| - master |
| - dev |
| jobs: |
| # Run daily long regression tests |
| - regression-test |
| |
| |
| |
| # 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 |