tests.yml 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620
  1. name: Tests
  2. on:
  3. push:
  4. branches: ["develop", "release-*"]
  5. pull_request:
  6. workflow_dispatch:
  7. concurrency:
  8. group: ${{ github.workflow }}-${{ github.ref }}
  9. cancel-in-progress: true
  10. jobs:
  11. # Job to detect what has changed so we don't run e.g. Rust checks on PRs that
  12. # don't modify Rust code.
  13. changes:
  14. runs-on: ubuntu-latest
  15. outputs:
  16. rust: ${{ !startsWith(github.ref, 'refs/pull/') || steps.filter.outputs.rust }}
  17. steps:
  18. - uses: dorny/paths-filter@v2
  19. id: filter
  20. # We only check on PRs
  21. if: startsWith(github.ref, 'refs/pull/')
  22. with:
  23. filters: |
  24. rust:
  25. - 'rust/**'
  26. - 'Cargo.toml'
  27. - 'Cargo.lock'
  28. check-sampleconfig:
  29. runs-on: ubuntu-latest
  30. steps:
  31. - uses: actions/checkout@v3
  32. - uses: matrix-org/setup-python-poetry@v1
  33. with:
  34. python-version: "3.x"
  35. poetry-version: "1.3.2"
  36. extras: "all"
  37. - run: poetry run scripts-dev/generate_sample_config.sh --check
  38. - run: poetry run scripts-dev/config-lint.sh
  39. check-schema-delta:
  40. runs-on: ubuntu-latest
  41. steps:
  42. - uses: actions/checkout@v3
  43. - uses: actions/setup-python@v4
  44. with:
  45. python-version: "3.x"
  46. - run: "pip install 'click==8.1.1' 'GitPython>=3.1.20'"
  47. - run: scripts-dev/check_schema_delta.py --force-colors
  48. check-lockfile:
  49. runs-on: ubuntu-latest
  50. steps:
  51. - uses: actions/checkout@v3
  52. - uses: actions/setup-python@v4
  53. with:
  54. python-version: "3.x"
  55. - run: .ci/scripts/check_lockfile.py
  56. lint:
  57. uses: "matrix-org/backend-meta/.github/workflows/python-poetry-ci.yml@v2"
  58. with:
  59. typechecking-extras: "all"
  60. lint-crlf:
  61. runs-on: ubuntu-latest
  62. steps:
  63. - uses: actions/checkout@v3
  64. - name: Check line endings
  65. run: scripts-dev/check_line_terminators.sh
  66. lint-newsfile:
  67. if: ${{ (github.base_ref == 'develop' || contains(github.base_ref, 'release-')) && github.actor != 'dependabot[bot]' }}
  68. runs-on: ubuntu-latest
  69. steps:
  70. - uses: actions/checkout@v3
  71. with:
  72. ref: ${{ github.event.pull_request.head.sha }}
  73. fetch-depth: 0
  74. - uses: actions/setup-python@v4
  75. with:
  76. python-version: "3.x"
  77. - run: "pip install 'towncrier>=18.6.0rc1'"
  78. - run: scripts-dev/check-newsfragment.sh
  79. env:
  80. PULL_REQUEST_NUMBER: ${{ github.event.number }}
  81. lint-pydantic:
  82. runs-on: ubuntu-latest
  83. steps:
  84. - uses: actions/checkout@v3
  85. with:
  86. ref: ${{ github.event.pull_request.head.sha }}
  87. - uses: matrix-org/setup-python-poetry@v1
  88. with:
  89. poetry-version: "1.3.2"
  90. extras: "all"
  91. - run: poetry run scripts-dev/check_pydantic_models.py
  92. lint-clippy:
  93. runs-on: ubuntu-latest
  94. needs: changes
  95. if: ${{ needs.changes.outputs.rust == 'true' }}
  96. steps:
  97. - uses: actions/checkout@v3
  98. - name: Install Rust
  99. # There don't seem to be versioned releases of this action per se: for each rust
  100. # version there is a branch which gets constantly rebased on top of master.
  101. # We pin to a specific commit for paranoia's sake.
  102. uses: dtolnay/rust-toolchain@e12eda571dc9a5ee5d58eecf4738ec291c66f295
  103. with:
  104. toolchain: 1.58.1
  105. components: clippy
  106. - uses: Swatinem/rust-cache@v2
  107. - run: cargo clippy -- -D warnings
  108. # We also lint against a nightly rustc so that we can lint the benchmark
  109. # suite, which requires a nightly compiler.
  110. lint-clippy-nightly:
  111. runs-on: ubuntu-latest
  112. needs: changes
  113. if: ${{ needs.changes.outputs.rust == 'true' }}
  114. steps:
  115. - uses: actions/checkout@v3
  116. - name: Install Rust
  117. # There don't seem to be versioned releases of this action per se: for each rust
  118. # version there is a branch which gets constantly rebased on top of master.
  119. # We pin to a specific commit for paranoia's sake.
  120. uses: dtolnay/rust-toolchain@e12eda571dc9a5ee5d58eecf4738ec291c66f295
  121. with:
  122. toolchain: nightly-2022-12-01
  123. components: clippy
  124. - uses: Swatinem/rust-cache@v2
  125. - run: cargo clippy --all-features -- -D warnings
  126. lint-rustfmt:
  127. runs-on: ubuntu-latest
  128. needs: changes
  129. if: ${{ needs.changes.outputs.rust == 'true' }}
  130. steps:
  131. - uses: actions/checkout@v3
  132. - name: Install Rust
  133. # There don't seem to be versioned releases of this action per se: for each rust
  134. # version there is a branch which gets constantly rebased on top of master.
  135. # We pin to a specific commit for paranoia's sake.
  136. uses: dtolnay/rust-toolchain@e12eda571dc9a5ee5d58eecf4738ec291c66f295
  137. with:
  138. # We use nightly so that it correctly groups together imports
  139. toolchain: nightly-2022-12-01
  140. components: rustfmt
  141. - uses: Swatinem/rust-cache@v2
  142. - run: cargo fmt --check
  143. # Dummy step to gate other tests on without repeating the whole list
  144. linting-done:
  145. if: ${{ !cancelled() }} # Run this even if prior jobs were skipped
  146. needs:
  147. - lint
  148. - lint-crlf
  149. - lint-newsfile
  150. - lint-pydantic
  151. - check-sampleconfig
  152. - check-schema-delta
  153. - check-lockfile
  154. - lint-clippy
  155. - lint-rustfmt
  156. runs-on: ubuntu-latest
  157. steps:
  158. - run: "true"
  159. calculate-test-jobs:
  160. if: ${{ !cancelled() && !failure() }} # Allow previous steps to be skipped, but not fail
  161. needs: linting-done
  162. runs-on: ubuntu-latest
  163. steps:
  164. - uses: actions/checkout@v3
  165. - uses: actions/setup-python@v4
  166. with:
  167. python-version: "3.x"
  168. - id: get-matrix
  169. run: .ci/scripts/calculate_jobs.py
  170. outputs:
  171. trial_test_matrix: ${{ steps.get-matrix.outputs.trial_test_matrix }}
  172. sytest_test_matrix: ${{ steps.get-matrix.outputs.sytest_test_matrix }}
  173. trial:
  174. if: ${{ !cancelled() && !failure() }} # Allow previous steps to be skipped, but not fail
  175. needs: calculate-test-jobs
  176. runs-on: ubuntu-latest
  177. strategy:
  178. matrix:
  179. job: ${{ fromJson(needs.calculate-test-jobs.outputs.trial_test_matrix) }}
  180. steps:
  181. - uses: actions/checkout@v3
  182. - run: sudo apt-get -qq install xmlsec1
  183. - name: Set up PostgreSQL ${{ matrix.job.postgres-version }}
  184. if: ${{ matrix.job.postgres-version }}
  185. # 1. Mount postgres data files onto a tmpfs in-memory filesystem to reduce overhead of docker's overlayfs layer.
  186. # 2. Expose the unix socket for postgres. This removes latency of using docker-proxy for connections.
  187. run: |
  188. docker run -d -p 5432:5432 \
  189. --tmpfs /var/lib/postgres:rw,size=6144m \
  190. --mount 'type=bind,src=/var/run/postgresql,dst=/var/run/postgresql' \
  191. -e POSTGRES_PASSWORD=postgres \
  192. -e POSTGRES_INITDB_ARGS="--lc-collate C --lc-ctype C --encoding UTF8" \
  193. postgres:${{ matrix.job.postgres-version }}
  194. - name: Install Rust
  195. # There don't seem to be versioned releases of this action per se: for each rust
  196. # version there is a branch which gets constantly rebased on top of master.
  197. # We pin to a specific commit for paranoia's sake.
  198. uses: dtolnay/rust-toolchain@e12eda571dc9a5ee5d58eecf4738ec291c66f295
  199. with:
  200. toolchain: 1.58.1
  201. - uses: Swatinem/rust-cache@v2
  202. - uses: matrix-org/setup-python-poetry@v1
  203. with:
  204. python-version: ${{ matrix.job.python-version }}
  205. poetry-version: "1.3.2"
  206. extras: ${{ matrix.job.extras }}
  207. - name: Await PostgreSQL
  208. if: ${{ matrix.job.postgres-version }}
  209. timeout-minutes: 2
  210. run: until pg_isready -h localhost; do sleep 1; done
  211. - run: poetry run trial --jobs=6 tests
  212. env:
  213. SYNAPSE_POSTGRES: ${{ matrix.job.database == 'postgres' || '' }}
  214. SYNAPSE_POSTGRES_HOST: /var/run/postgresql
  215. SYNAPSE_POSTGRES_USER: postgres
  216. SYNAPSE_POSTGRES_PASSWORD: postgres
  217. - name: Dump logs
  218. # Logs are most useful when the command fails, always include them.
  219. if: ${{ always() }}
  220. # Note: Dumps to workflow logs instead of using actions/upload-artifact
  221. # This keeps logs colocated with failing jobs
  222. # It also ignores find's exit code; this is a best effort affair
  223. run: >-
  224. find _trial_temp -name '*.log'
  225. -exec echo "::group::{}" \;
  226. -exec cat {} \;
  227. -exec echo "::endgroup::" \;
  228. || true
  229. trial-olddeps:
  230. # Note: sqlite only; no postgres
  231. if: ${{ !cancelled() && !failure() }} # Allow previous steps to be skipped, but not fail
  232. needs: linting-done
  233. runs-on: ubuntu-20.04
  234. steps:
  235. - uses: actions/checkout@v3
  236. - name: Install Rust
  237. # There don't seem to be versioned releases of this action per se: for each rust
  238. # version there is a branch which gets constantly rebased on top of master.
  239. # We pin to a specific commit for paranoia's sake.
  240. uses: dtolnay/rust-toolchain@e12eda571dc9a5ee5d58eecf4738ec291c66f295
  241. with:
  242. toolchain: 1.58.1
  243. - uses: Swatinem/rust-cache@v2
  244. # There aren't wheels for some of the older deps, so we need to install
  245. # their build dependencies
  246. - run: |
  247. sudo apt-get -qq install build-essential libffi-dev python-dev \
  248. libxml2-dev libxslt-dev xmlsec1 zlib1g-dev libjpeg-dev libwebp-dev
  249. - uses: actions/setup-python@v4
  250. with:
  251. python-version: '3.7'
  252. # Calculating the old-deps actually takes a bunch of time, so we cache the
  253. # pyproject.toml / poetry.lock. We need to cache pyproject.toml as
  254. # otherwise the `poetry install` step will error due to the poetry.lock
  255. # file being outdated.
  256. #
  257. # This caches the output of `Prepare old deps`, which should generate the
  258. # same `pyproject.toml` and `poetry.lock` for a given `pyproject.toml` input.
  259. - uses: actions/cache@v3
  260. id: cache-poetry-old-deps
  261. name: Cache poetry.lock
  262. with:
  263. path: |
  264. poetry.lock
  265. pyproject.toml
  266. key: poetry-old-deps2-${{ hashFiles('pyproject.toml') }}
  267. - name: Prepare old deps
  268. if: steps.cache-poetry-old-deps.outputs.cache-hit != 'true'
  269. run: .ci/scripts/prepare_old_deps.sh
  270. # We only now install poetry so that `setup-python-poetry` caches the
  271. # right poetry.lock's dependencies.
  272. - uses: matrix-org/setup-python-poetry@v1
  273. with:
  274. python-version: '3.7'
  275. poetry-version: "1.3.2"
  276. extras: "all test"
  277. - run: poetry run trial -j6 tests
  278. - name: Dump logs
  279. # Logs are most useful when the command fails, always include them.
  280. if: ${{ always() }}
  281. # Note: Dumps to workflow logs instead of using actions/upload-artifact
  282. # This keeps logs colocated with failing jobs
  283. # It also ignores find's exit code; this is a best effort affair
  284. run: >-
  285. find _trial_temp -name '*.log'
  286. -exec echo "::group::{}" \;
  287. -exec cat {} \;
  288. -exec echo "::endgroup::" \;
  289. || true
  290. trial-pypy:
  291. # Very slow; only run if the branch name includes 'pypy'
  292. # Note: sqlite only; no postgres. Completely untested since poetry move.
  293. if: ${{ contains(github.ref, 'pypy') && !failure() && !cancelled() }}
  294. needs: linting-done
  295. runs-on: ubuntu-latest
  296. strategy:
  297. matrix:
  298. python-version: ["pypy-3.7"]
  299. extras: ["all"]
  300. steps:
  301. - uses: actions/checkout@v3
  302. # Install libs necessary for PyPy to build binary wheels for dependencies
  303. - run: sudo apt-get -qq install xmlsec1 libxml2-dev libxslt-dev
  304. - uses: matrix-org/setup-python-poetry@v1
  305. with:
  306. python-version: ${{ matrix.python-version }}
  307. poetry-version: "1.3.2"
  308. extras: ${{ matrix.extras }}
  309. - run: poetry run trial --jobs=2 tests
  310. - name: Dump logs
  311. # Logs are most useful when the command fails, always include them.
  312. if: ${{ always() }}
  313. # Note: Dumps to workflow logs instead of using actions/upload-artifact
  314. # This keeps logs colocated with failing jobs
  315. # It also ignores find's exit code; this is a best effort affair
  316. run: >-
  317. find _trial_temp -name '*.log'
  318. -exec echo "::group::{}" \;
  319. -exec cat {} \;
  320. -exec echo "::endgroup::" \;
  321. || true
  322. sytest:
  323. if: ${{ !failure() && !cancelled() }}
  324. needs: calculate-test-jobs
  325. runs-on: ubuntu-latest
  326. container:
  327. image: matrixdotorg/sytest-synapse:${{ matrix.job.sytest-tag }}
  328. volumes:
  329. - ${{ github.workspace }}:/src
  330. env:
  331. SYTEST_BRANCH: ${{ github.head_ref }}
  332. POSTGRES: ${{ matrix.job.postgres && 1}}
  333. MULTI_POSTGRES: ${{ (matrix.job.postgres == 'multi-postgres') && 1}}
  334. ASYNCIO_REACTOR: ${{ (matrix.job.reactor == 'asyncio') && 1 }}
  335. WORKERS: ${{ matrix.job.workers && 1 }}
  336. BLACKLIST: ${{ matrix.job.workers && 'synapse-blacklist-with-workers' }}
  337. TOP: ${{ github.workspace }}
  338. strategy:
  339. fail-fast: false
  340. matrix:
  341. job: ${{ fromJson(needs.calculate-test-jobs.outputs.sytest_test_matrix) }}
  342. steps:
  343. - uses: actions/checkout@v3
  344. - name: Prepare test blacklist
  345. run: cat sytest-blacklist .ci/worker-blacklist > synapse-blacklist-with-workers
  346. - name: Install Rust
  347. # There don't seem to be versioned releases of this action per se: for each rust
  348. # version there is a branch which gets constantly rebased on top of master.
  349. # We pin to a specific commit for paranoia's sake.
  350. uses: dtolnay/rust-toolchain@e12eda571dc9a5ee5d58eecf4738ec291c66f295
  351. with:
  352. toolchain: 1.58.1
  353. - uses: Swatinem/rust-cache@v2
  354. - name: Run SyTest
  355. run: /bootstrap.sh synapse
  356. working-directory: /src
  357. - name: Summarise results.tap
  358. if: ${{ always() }}
  359. run: /sytest/scripts/tap_to_gha.pl /logs/results.tap
  360. - name: Upload SyTest logs
  361. uses: actions/upload-artifact@v3
  362. if: ${{ always() }}
  363. with:
  364. name: Sytest Logs - ${{ job.status }} - (${{ join(matrix.job.*, ', ') }})
  365. path: |
  366. /logs/results.tap
  367. /logs/**/*.log*
  368. export-data:
  369. if: ${{ !failure() && !cancelled() }} # Allow previous steps to be skipped, but not fail
  370. needs: [linting-done, portdb]
  371. runs-on: ubuntu-latest
  372. env:
  373. TOP: ${{ github.workspace }}
  374. services:
  375. postgres:
  376. image: postgres
  377. ports:
  378. - 5432:5432
  379. env:
  380. POSTGRES_PASSWORD: "postgres"
  381. POSTGRES_INITDB_ARGS: "--lc-collate C --lc-ctype C --encoding UTF8"
  382. options: >-
  383. --health-cmd pg_isready
  384. --health-interval 10s
  385. --health-timeout 5s
  386. --health-retries 5
  387. steps:
  388. - uses: actions/checkout@v3
  389. - run: sudo apt-get -qq install xmlsec1 postgresql-client
  390. - uses: matrix-org/setup-python-poetry@v1
  391. with:
  392. poetry-version: "1.3.2"
  393. extras: "postgres"
  394. - run: .ci/scripts/test_export_data_command.sh
  395. env:
  396. PGHOST: localhost
  397. PGUSER: postgres
  398. PGPASSWORD: postgres
  399. PGDATABASE: postgres
  400. portdb:
  401. if: ${{ !failure() && !cancelled() }} # Allow previous steps to be skipped, but not fail
  402. needs: linting-done
  403. runs-on: ubuntu-latest
  404. strategy:
  405. matrix:
  406. include:
  407. - python-version: "3.7"
  408. postgres-version: "11"
  409. - python-version: "3.11"
  410. postgres-version: "15"
  411. services:
  412. postgres:
  413. image: postgres:${{ matrix.postgres-version }}
  414. ports:
  415. - 5432:5432
  416. env:
  417. POSTGRES_PASSWORD: "postgres"
  418. POSTGRES_INITDB_ARGS: "--lc-collate C --lc-ctype C --encoding UTF8"
  419. options: >-
  420. --health-cmd pg_isready
  421. --health-interval 10s
  422. --health-timeout 5s
  423. --health-retries 5
  424. steps:
  425. - uses: actions/checkout@v3
  426. - name: Add PostgreSQL apt repository
  427. # We need a version of pg_dump that can handle the version of
  428. # PostgreSQL being tested against. The Ubuntu package repository lags
  429. # behind new releases, so we have to use the PostreSQL apt repository.
  430. # Steps taken from https://www.postgresql.org/download/linux/ubuntu/
  431. run: |
  432. sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
  433. wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
  434. sudo apt-get update
  435. - run: sudo apt-get -qq install xmlsec1 postgresql-client
  436. - uses: matrix-org/setup-python-poetry@v1
  437. with:
  438. python-version: ${{ matrix.python-version }}
  439. poetry-version: "1.3.2"
  440. extras: "postgres"
  441. - run: .ci/scripts/test_synapse_port_db.sh
  442. id: run_tester_script
  443. env:
  444. PGHOST: localhost
  445. PGUSER: postgres
  446. PGPASSWORD: postgres
  447. PGDATABASE: postgres
  448. - name: "Upload schema differences"
  449. uses: actions/upload-artifact@v3
  450. if: ${{ failure() && !cancelled() && steps.run_tester_script.outcome == 'failure' }}
  451. with:
  452. name: Schema dumps
  453. path: |
  454. unported.sql
  455. ported.sql
  456. schema_diff
  457. complement:
  458. if: "${{ !failure() && !cancelled() }}"
  459. needs: linting-done
  460. runs-on: ubuntu-latest
  461. strategy:
  462. fail-fast: false
  463. matrix:
  464. include:
  465. - arrangement: monolith
  466. database: SQLite
  467. - arrangement: monolith
  468. database: Postgres
  469. - arrangement: workers
  470. database: Postgres
  471. steps:
  472. - name: Run actions/checkout@v3 for synapse
  473. uses: actions/checkout@v3
  474. with:
  475. path: synapse
  476. - name: Install Rust
  477. # There don't seem to be versioned releases of this action per se: for each rust
  478. # version there is a branch which gets constantly rebased on top of master.
  479. # We pin to a specific commit for paranoia's sake.
  480. uses: dtolnay/rust-toolchain@e12eda571dc9a5ee5d58eecf4738ec291c66f295
  481. with:
  482. toolchain: 1.58.1
  483. - uses: Swatinem/rust-cache@v2
  484. - name: Prepare Complement's Prerequisites
  485. run: synapse/.ci/scripts/setup_complement_prerequisites.sh
  486. - run: |
  487. set -o pipefail
  488. COMPLEMENT_DIR=`pwd`/complement synapse/scripts-dev/complement.sh -json 2>&1 | synapse/.ci/scripts/gotestfmt
  489. shell: bash
  490. env:
  491. POSTGRES: ${{ (matrix.database == 'Postgres') && 1 || '' }}
  492. WORKERS: ${{ (matrix.arrangement == 'workers') && 1 || '' }}
  493. name: Run Complement Tests
  494. cargo-test:
  495. if: ${{ needs.changes.outputs.rust == 'true' }}
  496. runs-on: ubuntu-latest
  497. needs:
  498. - linting-done
  499. - changes
  500. steps:
  501. - uses: actions/checkout@v3
  502. - name: Install Rust
  503. # There don't seem to be versioned releases of this action per se: for each rust
  504. # version there is a branch which gets constantly rebased on top of master.
  505. # We pin to a specific commit for paranoia's sake.
  506. uses: dtolnay/rust-toolchain@e12eda571dc9a5ee5d58eecf4738ec291c66f295
  507. with:
  508. toolchain: 1.58.1
  509. - uses: Swatinem/rust-cache@v2
  510. - run: cargo test
  511. # We want to ensure that the cargo benchmarks still compile, which requires a
  512. # nightly compiler.
  513. cargo-bench:
  514. if: ${{ needs.changes.outputs.rust == 'true' }}
  515. runs-on: ubuntu-latest
  516. needs:
  517. - linting-done
  518. - changes
  519. steps:
  520. - uses: actions/checkout@v3
  521. - name: Install Rust
  522. # There don't seem to be versioned releases of this action per se: for each rust
  523. # version there is a branch which gets constantly rebased on top of master.
  524. # We pin to a specific commit for paranoia's sake.
  525. uses: dtolnay/rust-toolchain@e12eda571dc9a5ee5d58eecf4738ec291c66f295
  526. with:
  527. toolchain: nightly-2022-12-01
  528. - uses: Swatinem/rust-cache@v2
  529. - run: cargo bench --no-run
  530. # a job which marks all the other jobs as complete, thus allowing PRs to be merged.
  531. tests-done:
  532. if: ${{ always() }}
  533. needs:
  534. - trial
  535. - trial-olddeps
  536. - sytest
  537. - export-data
  538. - portdb
  539. - complement
  540. - cargo-test
  541. - cargo-bench
  542. runs-on: ubuntu-latest
  543. steps:
  544. - uses: matrix-org/done-action@v2
  545. with:
  546. needs: ${{ toJSON(needs) }}
  547. # The newsfile lint may be skipped on non PR builds
  548. # Cargo test is skipped if there is no changes on Rust code
  549. skippable: |
  550. lint-newsfile
  551. cargo-test
  552. cargo-bench