Merge pull request #3813 from matrix-org/rav/split_machine_tests #11573
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Code Coverage | |
on: | |
push: | |
branches: [main] | |
pull_request: | |
branches: [main] | |
types: | |
- opened | |
- reopened | |
- synchronize | |
- ready_for_review | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
env: | |
CARGO_TERM_COLOR: always | |
# without matrix_sdk=trace, expressions in `trace!` fields are not evaluated | |
# when the `trace!` statement is hit, and thus not covered | |
RUST_LOG: info,matrix_sdk=trace | |
jobs: | |
code_coverage: | |
name: Code Coverage | |
runs-on: "ubuntu-latest" | |
# run several docker containers with the same networking stack so the hostname 'postgres' | |
# maps to the postgres container, etc. | |
services: | |
# sliding sync needs a postgres container | |
postgres: | |
# Docker Hub image | |
image: postgres | |
# Provide the password for postgres | |
env: | |
POSTGRES_PASSWORD: postgres | |
POSTGRES_USER: postgres | |
POSTGRES_DB: syncv3 | |
# Set health checks to wait until postgres has started | |
options: >- | |
--health-cmd pg_isready | |
--health-interval 10s | |
--health-timeout 5s | |
--health-retries 5 | |
ports: | |
# Maps tcp port 5432 on service container to the host | |
- 5432:5432 | |
# run sliding sync and point it at the postgres container and synapse container. | |
# the postgres container needs to be above this to make sure it has started prior to this service. | |
slidingsync: | |
image: "ghcr.io/matrix-org/sliding-sync:v0.99.11" # keep in sync with ./ci.yml | |
env: | |
SYNCV3_SERVER: "http://synapse:8008" | |
SYNCV3_SECRET: "SUPER_CI_SECRET" | |
SYNCV3_BINDADDR: ":8118" | |
SYNCV3_DB: "user=postgres password=postgres dbname=syncv3 sslmode=disable host=postgres" | |
ports: | |
- 8118:8118 | |
# tests need a synapse: this is a service and not michaelkaye/setup-matrix-synapse@main as the | |
# latter does not provide networking for services to communicate with it. | |
synapse: | |
image: ghcr.io/matrix-org/synapse-service:5b6a75935e560945f69af72e9768bbaac10c9b4f # keep in sync with ./ci.yml | |
env: | |
SYNAPSE_COMPLEMENT_DATABASE: sqlite | |
SERVER_NAME: synapse | |
ports: | |
- 8008:8008 | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{ github.event.pull_request.head.sha }} | |
- name: Install Rust | |
uses: dtolnay/rust-toolchain@stable | |
# Cargo config can screw with caching and is only used for alias config | |
# and extra lints, which we don't care about here | |
- name: Delete cargo config | |
run: rm .cargo/config.toml | |
- name: Load cache | |
uses: Swatinem/rust-cache@v2 | |
with: | |
save-if: ${{ github.ref == 'refs/heads/main' }} | |
- name: Install tarpaulin | |
uses: taiki-e/install-action@v2 | |
with: | |
tool: cargo-tarpaulin | |
# set up backend for integration tests | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: 3.8 | |
- name: Run tarpaulin | |
run: | | |
rustup run stable cargo tarpaulin \ | |
--skip-clean --profile cov --out xml \ | |
--features experimental-widgets,testing,image-proc | |
env: | |
CARGO_PROFILE_COV_INHERITS: 'dev' | |
CARGO_PROFILE_COV_DEBUG: 1 | |
HOMESERVER_URL: "http://localhost:8008" | |
HOMESERVER_DOMAIN: "synapse" | |
SLIDING_SYNC_PROXY_URL: "http://localhost:8118" | |
# Copied with minimal adjustments, source: | |
# https://github.com/google/mdbook-i18n-helpers/blob/2168b9cea1f4f76b55426591a9bcc308a620194f/.github/workflows/test.yml | |
- name: Get PR number and commit SHA | |
run: | | |
echo "Storing PR number ${{ github.event.number }}" | |
echo "${{ github.event.number }}" > pr_number.txt | |
echo "Storing commit SHA ${{ github.event.pull_request.head.sha }}" | |
echo "${{ github.event.pull_request.head.sha }}" > commit_sha.txt | |
# This stores the coverage report and metadata in artifacts. | |
# The actual upload to Codecov is executed by a different workflow `upload_coverage.yml`. | |
# The reason for this split is because `on.pull_request` workflows don't have access to secrets. | |
- name: Store coverage report in artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: codecov_report | |
path: | | |
cobertura.xml | |
pr_number.txt | |
commit_sha.txt | |
if-no-files-found: error | |
- run: | | |
echo 'The coverage report was stored in Github artifacts.' | |
echo 'It will be uploaded to Codecov using `upload_coverage.yml` workflow shortly.' |