diff options
Diffstat (limited to 'src/zstd/.circleci/config.yml')
-rw-r--r-- | src/zstd/.circleci/config.yml | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/src/zstd/.circleci/config.yml b/src/zstd/.circleci/config.yml new file mode 100644 index 000000000..bcf2e1d5e --- /dev/null +++ b/src/zstd/.circleci/config.yml @@ -0,0 +1,169 @@ +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 |