summaryrefslogtreecommitdiffstats
path: root/src/zstd/.circleci/config.yml
diff options
context:
space:
mode:
Diffstat (limited to 'src/zstd/.circleci/config.yml')
-rw-r--r--src/zstd/.circleci/config.yml169
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