aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTill <2353100+S7evinK@users.noreply.github.com>2022-10-27 12:12:50 +0200
committerGitHub <noreply@github.com>2022-10-27 12:12:50 +0200
commitfa96811e64302cad7d51b6c20ebbc8abd5105af4 (patch)
tree3f704071a8a8ea3c056bf0c05d83ed569b79ca8e
parent238b6ef2cd5077482b46c57e9f44f05a19fcbfc7 (diff)
Add scheduled tasks to run tests with race detection (#2814)
Needs https://github.com/matrix-org/sytest/pull/1308 to be actually useful. Not sure if we need to run Sytest in all combinations with enabled race detection. Closes https://github.com/matrix-org/dendrite/issues/491
-rw-r--r--.github/workflows/schedules.yaml128
1 files changed, 128 insertions, 0 deletions
diff --git a/.github/workflows/schedules.yaml b/.github/workflows/schedules.yaml
new file mode 100644
index 00000000..c0791724
--- /dev/null
+++ b/.github/workflows/schedules.yaml
@@ -0,0 +1,128 @@
+name: Scheduled
+
+on:
+ schedule:
+ - cron: '0 0 * * *' # every day at midnight
+ workflow_dispatch:
+
+concurrency:
+ group: ${{ github.workflow }}-${{ github.ref }}
+ cancel-in-progress: true
+
+jobs:
+ # run go test with different go versions
+ test:
+ timeout-minutes: 20
+ name: Unit tests (Go ${{ matrix.go }})
+ runs-on: ubuntu-latest
+ # Service containers to run with `container-job`
+ services:
+ # Label used to access the service container
+ postgres:
+ # Docker Hub image
+ image: postgres:13-alpine
+ # Provide the password for postgres
+ env:
+ POSTGRES_USER: postgres
+ POSTGRES_PASSWORD: postgres
+ POSTGRES_DB: dendrite
+ ports:
+ # Maps tcp port 5432 on service container to the host
+ - 5432:5432
+ # Set health checks to wait until postgres has started
+ options: >-
+ --health-cmd pg_isready
+ --health-interval 10s
+ --health-timeout 5s
+ --health-retries 5
+ strategy:
+ fail-fast: false
+ matrix:
+ go: ["1.18", "1.19"]
+ steps:
+ - uses: actions/checkout@v3
+ - name: Setup go
+ uses: actions/setup-go@v3
+ with:
+ go-version: ${{ matrix.go }}
+ - uses: actions/cache@v3
+ with:
+ path: |
+ ~/.cache/go-build
+ ~/go/pkg/mod
+ key: ${{ runner.os }}-go${{ matrix.go }}-test-race-${{ hashFiles('**/go.sum') }}
+ restore-keys: |
+ ${{ runner.os }}-go${{ matrix.go }}-test-race-
+ - run: go test -race ./...
+ env:
+ POSTGRES_HOST: localhost
+ POSTGRES_USER: postgres
+ POSTGRES_PASSWORD: postgres
+ POSTGRES_DB: dendrite
+
+ # Dummy step to gate other tests on without repeating the whole list
+ initial-tests-done:
+ name: Initial tests passed
+ needs: [test]
+ runs-on: ubuntu-latest
+ if: ${{ !cancelled() }} # Run this even if prior jobs were skipped
+ steps:
+ - name: Check initial tests passed
+ uses: re-actors/alls-green@release/v1
+ with:
+ jobs: ${{ toJSON(needs) }}
+
+ # run Sytest in different variations
+ sytest:
+ timeout-minutes: 60
+ needs: initial-tests-done
+ name: "Sytest (${{ matrix.label }})"
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - label: SQLite
+
+ - label: SQLite, full HTTP APIs
+ api: full-http
+
+ - label: PostgreSQL
+ postgres: postgres
+
+ - label: PostgreSQL, full HTTP APIs
+ postgres: postgres
+ api: full-http
+ container:
+ image: matrixdotorg/sytest-dendrite:latest
+ volumes:
+ - ${{ github.workspace }}:/src
+ env:
+ POSTGRES: ${{ matrix.postgres && 1}}
+ API: ${{ matrix.api && 1 }}
+ SYTEST_BRANCH: ${{ github.head_ref }}
+ RACE_DETECTION: 1
+ steps:
+ - uses: actions/checkout@v2
+ - name: Run Sytest
+ run: /bootstrap.sh dendrite
+ working-directory: /src
+ - name: Summarise results.tap
+ if: ${{ always() }}
+ run: /sytest/scripts/tap_to_gha.pl /logs/results.tap
+ - name: Sytest List Maintenance
+ if: ${{ always() }}
+ run: /src/show-expected-fail-tests.sh /logs/results.tap /src/sytest-whitelist /src/sytest-blacklist
+ continue-on-error: true # not fatal
+ - name: Are We Synapse Yet?
+ if: ${{ always() }}
+ run: /src/are-we-synapse-yet.py /logs/results.tap -v
+ continue-on-error: true # not fatal
+ - name: Upload Sytest logs
+ uses: actions/upload-artifact@v2
+ if: ${{ always() }}
+ with:
+ name: Sytest Logs - ${{ job.status }} - (Dendrite, ${{ join(matrix.*, ', ') }})
+ path: |
+ /logs/results.tap
+ /logs/**/*.log*