Add scheduled tasks to run tests with race detection
Needs to be actually
useful.
Not sure if we need to run Sytest in all combinations with enabled race
detection.
Closes
ADD
.github/workflows/schedules.yaml
+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*

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