summaryrefslogtreecommitdiffstats
path: root/src/zstd/.circleci/config.yml
blob: bcf2e1d5ea2a660f46868add9911d210600d3386 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
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