1---
2name: Continuous Integration
3on: [push, pull_request]
4jobs:
5  smoke-test:
6    name: Smoke Test ${{ matrix.cfg }}
7    runs-on: ubuntu-20.04
8    env:
9      DEVELOPER: 1
10      VALGRIND: 0
11      EXPERIMENTAL_FEATURES: 0
12      COMPAT: 1
13    strategy:
14      fail-fast: true
15      matrix:
16        include:
17          - CFG: "make"
18            TEST_CMD: "make"
19          - CFG: "make-O3-check"
20            TEST_CMD: "make check-source check-units installcheck check-gen-updated"
21            COPTFLAGS: "-O3"
22          - CFG: "make-32-bit-nodev-check"
23            ARCH: 32
24            TEST_CMD: "make check-source check-units installcheck"
25            DEVELOPER: 0
26          - CFG: "make-EXPERIMENTAL-check"
27            TEST_CMD: "make check-source check-units installcheck check-gen-updated"
28            EXPERIMENTAL_FEATURES: 1
29    steps:
30      - name: Checkout
31        uses: actions/checkout@v2.0.0
32
33      - name: Fetch tags for auto versioning
34        run: git fetch --prune --unshallow --tags -f
35
36      - name: Set up Python 3.6
37        uses: actions/setup-python@v2
38        with:
39          python-version: 3.6
40
41      - name: Install dependencies
42        run: |
43          bash -x .github/scripts/setup.sh
44
45      - name: Build
46        env:
47          VALGRIND: ${{ matrix.VALGRIND }}
48          DEVELOPER: ${{ matrix.DEVELOPER }}
49          EXPERIMENTAL_FEATURES: ${{ matrix.EXPERIMENTAL_FEATURES }}
50          COMPILER: ${{ matrix.COMPILER }}
51          ARCH: ${{ matrix.ARCH }}
52          COMPAT: ${{ matrix.COMPAT }}
53          PYTEST_PAR: ${{ matrix.PYTEST_PAR }}
54          PYTEST_OPTS: ${{ matrix.PYTEST_OPTS }}
55          COPTFLAGS: ${{ matrix.COPTFLAGS }}
56          NETWORK: ${{ matrix.NETWORK }}
57          TEST_CMD: ${{ matrix.TEST_CMD }}
58          TEST_GROUP_COUNT: ${{ matrix.TEST_GROUP_COUNT }}
59          TEST_GROUP: ${{ matrix.TEST_GROUP }}
60        run: |
61          bash -x .github/scripts/build.sh
62
63      - name: Upload Unit Test Results
64        if: always()
65        uses: actions/upload-artifact@v2
66        with:
67          name: Junit Report ${{ github.run_number }}.${{ matrix.cfg }}
68          path: report.*
69          if-no-files-found: ignore
70
71  proto-test:
72    name: Protocol Test Config
73    runs-on: ubuntu-20.04
74    needs: [smoke-test]
75    env:
76      DEVELOPER: 1
77      EXPERIMENTAL_FEATURES: 1
78      COMPAT: 0
79      PYTEST_PAR: 2
80      TEST_CMD: "make check-protos"
81      TEST_GROUP: 1
82      TEST_GROUP_COUNT: 1
83    strategy:
84      fail-fast: true
85      matrix:
86        include:
87          - {compiler: clang, db: sqlite3}
88          - {compiler: gcc, db: postgres}
89    steps:
90      - name: Checkout
91        uses: actions/checkout@v2.0.0
92
93      - name: Setup Python 3.6
94        uses: actions/setup-python@v2
95        with:
96          python-version: 3.6
97
98      - name: Install dependencies
99        run: |
100          bash -x .github/scripts/setup.sh
101
102      - name: Build
103        env:
104          ARCH: ${{ matrix.arch }}
105          COMPILER: ${{ matrix.compiler }}
106          DB: ${{ matrix.db }}
107          NETWORK: ${{ matrix.network }}
108          TARGET_HOST: ${{ matrix.TARGET_HOST }}
109          VALGRIND: ${{ matrix.valgrind }}
110        run: |
111          bash -x .github/scripts/build.sh
112
113      - name: Upload Unit Test Results
114        if: always()
115        uses: actions/upload-artifact@v2
116        with:
117          name: Junit Report ${{ github.run_number }}.{{ matrix.cfg }}
118          path: report.*
119
120  normal-test:
121    name: Normal Test Config ${{ matrix.cfg }}
122    runs-on: ubuntu-20.04
123    needs: [smoke-test]
124    env:
125      DEVELOPER: 1
126      VALGRIND: 0
127      EXPERIMENTAL_FEATURES: 0
128      COMPAT: 1
129    strategy:
130      fail-fast: false
131      matrix:
132        include:
133          # All of the following will just run `make pytest`
134          - CFG: "clang-fuzzing"
135            COMPILER: clang
136            FUZZING: 1
137          - CFG: "check-dbstmts"
138            COMPILER: gcc
139            TEST_CHECK_DBSTMTS: 1
140          - CFG: "non-DEVELOPER-non-COMPAT-1"
141            DEVELOPER: 0
142            COMPAT: 0
143            TEST_GROUP: 1
144            TEST_GROUP_COUNT: 2
145          - CFG: "non-DEVELOPER-non-COMPAT-2"
146            DEVELOPER: 0
147            COMPAT: 0
148            TEST_GROUP: 2
149            TEST_GROUP_COUNT: 2
150          - CFG: "DUAL_FUND"
151            EXPERIMENTAL_DUAL_FUND: 1
152            DEVELOPER: 1
153            COMPAT: 0
154          # Various other configurations
155          - CFG: "Elements"
156            NETWORK: liquid-regtest
157          - CFG: "PostgreSQL"
158            DB: postgres
159            PYTEST_PAR: 2
160
161          # The cross-compiled versions
162          - CFG: "cross-arm32"
163            ARCH: arm32v7
164            TARGET_HOST: arm-linux-gnueabihf
165          - CFG: "cross-arm64"
166            ARCH: arm64v8
167            TARGET_HOST: aarch64-linux-gnu
168
169          # The experimental feature test
170          - CFG: "EXPERIMENTAL"
171            EXPERIMENTAL_FEATURES: 1
172    steps:
173      - name: Checkout
174        uses: actions/checkout@v2.0.0
175
176      - name: Set up Python 3.6
177        uses: actions/setup-python@v2
178        with:
179          python-version: 3.6
180
181      - name: Install dependencies
182        run: |
183          bash -x .github/scripts/setup.sh
184
185      - name: Build
186        env:
187          VALGRIND: ${{ matrix.VALGRIND }}
188          DEVELOPER: ${{ matrix.DEVELOPER }}
189          EXPERIMENTAL_FEATURES: ${{ matrix.EXPERIMENTAL_FEATURES }}
190          EXPERIMENTAL_DUAL_FUND: ${{ matrix.EXPERIMENTAL_DUAL_FUND }}
191          COMPILER: ${{ matrix.COMPILER }}
192          ARCH: ${{ matrix.ARCH }}
193          COMPAT: ${{ matrix.COMPAT }}
194          FUZZING: ${{ matrix.FUZZING }}
195          PYTEST_PAR: ${{ matrix.PYTEST_PAR }}
196          PYTEST_OPTS: ${{ matrix.PYTEST_OPTS }}
197          NETWORK: ${{ matrix.NETWORK }}
198          TEST_CMD: ${{ matrix.TEST_CMD }}
199          TEST_GROUP_COUNT: ${{ matrix.TEST_GROUP_COUNT }}
200          TEST_GROUP: ${{ matrix.TEST_GROUP }}
201          TEST_DB_PROVIDER: ${{ matrix.DB }}
202        run: |
203          bash -x .github/scripts/build.sh
204
205      - name: Upload Unit Test Results
206        if: always()
207        uses: actions/upload-artifact@v2
208        with:
209          name: Junit Report ${{ github.run_number }}.${{ matrix.cfg }}
210          path: report.*
211
212  valgrind-test:
213    name: Valgrind Test Config ${{ matrix.cfg }}
214    runs-on: ubuntu-20.04
215    needs: [smoke-test]
216    env:
217      DEVELOPER: 1
218      EXPERIMENTAL_FEATURES: 0
219      COMPAT: 1
220      TEST_GROUP_COUNT: 10
221      PYTEST_PAR: 3
222      LABEL: "Valgrind-test"
223    strategy:
224      fail-fast: true
225      matrix:
226        include:
227          - CFG: "valgrind-1"
228            VALGRIND: 1
229            TEST_GROUP: 1
230            TEST_GROUP_COUNT: 10
231            PYTEST_PAR: 3
232          - CFG: "valgrind-2"
233            VALGRIND: 1
234            TEST_GROUP: 2
235            TEST_GROUP_COUNT: 10
236            PYTEST_PAR: 3
237          - CFG: "valgrind-3"
238            VALGRIND: 1
239            TEST_GROUP: 3
240            TEST_GROUP_COUNT: 10
241            PYTEST_PAR: 3
242          - CFG: "valgrind-4"
243            VALGRIND: 1
244            TEST_GROUP: 4
245            TEST_GROUP_COUNT: 10
246            PYTEST_PAR: 3
247          - CFG: "valgrind-5"
248            VALGRIND: 1
249            TEST_GROUP: 5
250            TEST_GROUP_COUNT: 10
251            PYTEST_PAR: 3
252          - CFG: "valgrind-6"
253            VALGRIND: 1
254            TEST_GROUP: 6
255            TEST_GROUP_COUNT: 10
256            PYTEST_PAR: 3
257          - CFG: "valgrind-7"
258            VALGRIND: 1
259            TEST_GROUP: 7
260            TEST_GROUP_COUNT: 10
261            PYTEST_PAR: 3
262          - CFG: "valgrind-8"
263            VALGRIND: 1
264            TEST_GROUP: 8
265            TEST_GROUP_COUNT: 10
266            PYTEST_PAR: 3
267          - CFG: "valgrind-9"
268            VALGRIND: 1
269            TEST_GROUP: 9
270            TEST_GROUP_COUNT: 10
271            PYTEST_PAR: 3
272          - CFG: "valgrind-10"
273            VALGRIND: 1
274            TEST_GROUP: 10
275            TEST_GROUP_COUNT: 10
276            PYTEST_PAR: 3
277    steps:
278      - name: Checkout
279        uses: actions/checkout@v2.0.0
280
281      - name: Set up Python 3.6
282        uses: actions/setup-python@v2
283        with:
284          python-version: 3.6
285
286      - name: Install dependencies
287        run: |
288          bash -x .github/scripts/setup.sh
289
290      - name: Build
291        env:
292          VALGRIND: ${{ matrix.VALGRIND }}
293          DEVELOPER: ${{ matrix.DEVELOPER }}
294          EXPERIMENTAL_FEATURES: ${{ matrix.EXPERIMENTAL_FEATURES }}
295          EXPERIMENTAL_DUAL_FUND: ${{ matrix.EXPERIMENTAL_DUAL_FUND }}
296          COMPILER: ${{ matrix.COMPILER }}
297          ARCH: ${{ matrix.ARCH }}
298          COMPAT: ${{ matrix.COMPAT }}
299          PYTEST_PAR: ${{ matrix.PYTEST_PAR }}
300          PYTEST_OPTS: ${{ matrix.PYTEST_OPTS }}
301          NETWORK: ${{ matrix.NETWORK }}
302          TEST_CMD: ${{ matrix.TEST_CMD }}
303          TEST_GROUP_COUNT: ${{ matrix.TEST_GROUP_COUNT }}
304          TEST_GROUP: ${{ matrix.TEST_GROUP }}
305        run: |
306          bash -x .github/scripts/build.sh
307
308      - name: Upload Unit Test Results
309        if: always()
310        uses: actions/upload-artifact@v2
311        with:
312          name: Junit Report ${{ github.run_number }}.${{ matrix.cfg }}
313          path: report.*
314