170 lines
6.1 KiB
YAML
170 lines
6.1 KiB
YAML
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
|