mirror of
https://github.com/matrix-org/matrix-rust-sdk.git
synced 2026-04-29 03:23:50 -04:00
You can't update a GHA cache once you create it, so if we use the same cache for each job in a matrix build, then we end up populating it for the first job that completes, so any slower jobs don't get their dependencies cached. On the other hand, if we create 20 500MB cache items on each build, we're going to exhaust the cache storage as soon as we do a build. So, instead, let's just do the caching for the main branch, and hope that other branches can still benefit from it.
490 lines
13 KiB
YAML
490 lines
13 KiB
YAML
name: Rust tests
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
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
|
|
|
|
jobs:
|
|
xtask:
|
|
uses: ./.github/workflows/xtask.yml
|
|
|
|
test-matrix-sdk-features:
|
|
name: 🐧 [m], ${{ matrix.name }}
|
|
needs: xtask
|
|
if: github.event_name == 'push' || !github.event.pull_request.draft
|
|
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
fail-fast: true
|
|
matrix:
|
|
name:
|
|
- no-encryption
|
|
- no-sled
|
|
- no-encryption-and-sled
|
|
- sled-cryptostore
|
|
- rustls-tls
|
|
- markdown
|
|
- socks
|
|
- sso-login
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
|
|
- name: Install Rust
|
|
uses: dtolnay/rust-toolchain@stable
|
|
|
|
- name: Load cache
|
|
uses: Swatinem/rust-cache@v2
|
|
with:
|
|
# use a separate cache for each job to work around
|
|
# https://github.com/Swatinem/rust-cache/issues/124
|
|
key: "${{ matrix.name }}"
|
|
|
|
# ... but only save the cache on the main branch
|
|
# cf https://github.com/Swatinem/rust-cache/issues/95
|
|
save-if: ${{ github.ref == 'refs/head/main' }}
|
|
|
|
- name: Install nextest
|
|
uses: taiki-e/install-action@nextest
|
|
|
|
- name: Get xtask
|
|
uses: actions/cache/restore@v3
|
|
with:
|
|
path: target/debug/xtask
|
|
key: "${{ needs.xtask.outputs.cachekey-linux }}"
|
|
fail-on-cache-miss: true
|
|
|
|
- name: Test
|
|
run: |
|
|
target/debug/xtask ci test-features ${{ matrix.name }}
|
|
|
|
test-matrix-sdk-examples:
|
|
name: 🐧 [m]-examples
|
|
needs: xtask
|
|
runs-on: ubuntu-latest
|
|
if: github.event_name == 'push' || !github.event.pull_request.draft
|
|
|
|
steps:
|
|
- name: Checkout the repo
|
|
uses: actions/checkout@v3
|
|
|
|
- name: Install Rust
|
|
uses: dtolnay/rust-toolchain@stable
|
|
|
|
- name: Load cache
|
|
uses: Swatinem/rust-cache@v2
|
|
|
|
- name: Install nextest
|
|
uses: taiki-e/install-action@nextest
|
|
|
|
- name: Get xtask
|
|
uses: actions/cache/restore@v3
|
|
with:
|
|
path: target/debug/xtask
|
|
key: "${{ needs.xtask.outputs.cachekey-linux }}"
|
|
fail-on-cache-miss: true
|
|
|
|
- name: Test
|
|
run: |
|
|
target/debug/xtask ci examples
|
|
|
|
test-matrix-sdk-crypto:
|
|
name: 🐧 [m]-crypto
|
|
needs: xtask
|
|
runs-on: ubuntu-latest
|
|
if: github.event_name == 'push' || !github.event.pull_request.draft
|
|
|
|
steps:
|
|
- name: Checkout the repo
|
|
uses: actions/checkout@v3
|
|
|
|
- name: Install Rust
|
|
uses: dtolnay/rust-toolchain@stable
|
|
|
|
- name: Load cache
|
|
uses: Swatinem/rust-cache@v2
|
|
|
|
- name: Install nextest
|
|
uses: taiki-e/install-action@nextest
|
|
|
|
- name: Get xtask
|
|
uses: actions/cache/restore@v3
|
|
with:
|
|
path: target/debug/xtask
|
|
key: "${{ needs.xtask.outputs.cachekey-linux }}"
|
|
fail-on-cache-miss: true
|
|
|
|
- name: Test
|
|
run: |
|
|
target/debug/xtask ci test-crypto
|
|
|
|
test-all-crates:
|
|
name: ${{ matrix.name }}
|
|
if: github.event_name == 'push' || !github.event.pull_request.draft
|
|
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
fail-fast: true
|
|
matrix:
|
|
include:
|
|
- name: 🐧 all crates, 🦀 stable
|
|
rust: stable
|
|
os: ubuntu-latest
|
|
|
|
- name: 🐧 all crates, 🦀 beta
|
|
rust: beta
|
|
os: ubuntu-latest
|
|
|
|
- name: 🍏 all crates, 🦀 stable
|
|
rust: stable
|
|
os: macos-latest
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
|
|
- name: Install Protoc
|
|
uses: arduino/setup-protoc@v1
|
|
with:
|
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
# Can't use `${{ matrix.* }}` inside uses
|
|
- name: Install Rust stable
|
|
if: matrix.rust == 'stable'
|
|
uses: dtolnay/rust-toolchain@stable
|
|
|
|
- name: Install Rust beta
|
|
if: matrix.rust == 'beta'
|
|
uses: dtolnay/rust-toolchain@beta
|
|
|
|
- name: Install Rust nightly
|
|
if: matrix.rust == 'nightly'
|
|
uses: dtolnay/rust-toolchain@nightly
|
|
|
|
- name: Load cache
|
|
uses: Swatinem/rust-cache@v2
|
|
|
|
- name: Install nextest
|
|
uses: taiki-e/install-action@nextest
|
|
|
|
- name: Test
|
|
run: |
|
|
cargo nextest run --workspace \
|
|
--exclude matrix-sdk-integration-testing --exclude sliding-sync-integration-test
|
|
|
|
- name: Test documentation
|
|
run: |
|
|
cargo test --doc
|
|
|
|
test-wasm:
|
|
name: 🕸️ ${{ matrix.name }}
|
|
needs: xtask
|
|
if: github.event_name == 'push' || !github.event.pull_request.draft
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
strategy:
|
|
fail-fast: true
|
|
matrix:
|
|
include:
|
|
- name: '[m]-qrcode'
|
|
cmd: matrix-sdk-qrcode
|
|
|
|
- name: '[m]-base'
|
|
cmd: matrix-sdk-base
|
|
|
|
- name: '[m]-common'
|
|
cmd: matrix-sdk-common
|
|
|
|
- name: '[m]-indexeddb, no crypto'
|
|
cmd: indexeddb-no-crypto
|
|
|
|
- name: '[m]-indexeddb, with crypto'
|
|
cmd: indexeddb-with-crypto
|
|
|
|
- name: '[m], no-default, wasm-flags'
|
|
cmd: matrix-sdk-no-default
|
|
|
|
- name: '[m], indexeddb stores'
|
|
cmd: matrix-sdk-indexeddb-stores
|
|
|
|
- name: '[m], indexeddb stores, no crypto'
|
|
cmd: matrix-sdk-indexeddb-stores-no-crypto
|
|
|
|
- name: '[m], wasm-example'
|
|
cmd: matrix-sdk-command-bot
|
|
|
|
steps:
|
|
- name: Checkout the repo
|
|
uses: actions/checkout@v3
|
|
|
|
- name: Install Rust
|
|
uses: dtolnay/rust-toolchain@stable
|
|
with:
|
|
targets: wasm32-unknown-unknown
|
|
components: clippy
|
|
|
|
- name: Install wasm-pack
|
|
uses: jetli/wasm-pack-action@v0.4.0
|
|
with:
|
|
version: v0.10.3
|
|
|
|
- name: Load cache
|
|
uses: Swatinem/rust-cache@v2
|
|
with:
|
|
# use a separate cache for each job to work around
|
|
# https://github.com/Swatinem/rust-cache/issues/124
|
|
key: "${{ matrix.cmd }}"
|
|
|
|
# ... but only save the cache on the main branch
|
|
# cf https://github.com/Swatinem/rust-cache/issues/95
|
|
save-if: ${{ github.ref == 'refs/head/main' }}
|
|
|
|
- name: Install nextest
|
|
uses: taiki-e/install-action@nextest
|
|
|
|
- name: Get xtask
|
|
uses: actions/cache/restore@v3
|
|
with:
|
|
path: target/debug/xtask
|
|
key: "${{ needs.xtask.outputs.cachekey-linux }}"
|
|
fail-on-cache-miss: true
|
|
|
|
- name: Rust Check
|
|
run: |
|
|
target/debug/xtask ci wasm ${{ matrix.cmd }}
|
|
|
|
- name: Wasm-Pack test
|
|
run: |
|
|
target/debug/xtask ci wasm-pack ${{ matrix.cmd }}
|
|
|
|
test-appservice:
|
|
name: ${{ matrix.os-name }} [m]-appservice
|
|
needs: xtask
|
|
if: github.event_name == 'push' || !github.event.pull_request.draft
|
|
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
fail-fast: true
|
|
matrix:
|
|
include:
|
|
- os: ubuntu-latest
|
|
os-name: 🐧
|
|
xtask-cachekey: "${{ needs.xtask.outputs.cachekey-linux }}"
|
|
|
|
- os: macos-latest
|
|
os-name: 🍏
|
|
xtask-cachekey: "${{ needs.xtask.outputs.cachekey-macos }}"
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
|
|
- name: Install Rust
|
|
uses: dtolnay/rust-toolchain@stable
|
|
|
|
- name: Load cache
|
|
uses: Swatinem/rust-cache@v2
|
|
|
|
- name: Install nextest
|
|
uses: taiki-e/install-action@nextest
|
|
|
|
- name: Get xtask
|
|
uses: actions/cache/restore@v3
|
|
with:
|
|
path: target/debug/xtask
|
|
key: "${{ matrix.xtask-cachekey }}"
|
|
fail-on-cache-miss: true
|
|
|
|
- name: Run checks
|
|
run: |
|
|
target/debug/xtask ci test-appservice
|
|
|
|
formatting:
|
|
name: Check Formatting
|
|
runs-on: ubuntu-latest
|
|
if: github.event_name == 'push' || !github.event.pull_request.draft
|
|
|
|
steps:
|
|
- name: Checkout the repo
|
|
uses: actions/checkout@v3
|
|
|
|
- name: Install Rust
|
|
uses: dtolnay/rust-toolchain@nightly
|
|
with:
|
|
components: rustfmt
|
|
|
|
- name: Cargo fmt
|
|
run: |
|
|
cargo fmt -- --check
|
|
|
|
typos:
|
|
name: Spell Check with Typos
|
|
runs-on: ubuntu-latest
|
|
if: github.event_name == 'push' || !github.event.pull_request.draft
|
|
|
|
steps:
|
|
- name: Checkout Actions Repository
|
|
uses: actions/checkout@v3
|
|
|
|
- name: Check the spelling of the files in our repo
|
|
uses: crate-ci/typos@v1.13.0
|
|
|
|
clippy:
|
|
name: Run clippy
|
|
needs: xtask
|
|
runs-on: ubuntu-latest
|
|
if: github.event_name == 'push' || !github.event.pull_request.draft
|
|
|
|
steps:
|
|
- name: Checkout the repo
|
|
uses: actions/checkout@v3
|
|
|
|
- name: Install Protoc
|
|
uses: arduino/setup-protoc@v1
|
|
with:
|
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
- name: Install Rust
|
|
uses: dtolnay/rust-toolchain@nightly
|
|
with:
|
|
components: clippy
|
|
|
|
- name: Load cache
|
|
uses: Swatinem/rust-cache@v2
|
|
|
|
- name: Get xtask
|
|
uses: actions/cache/restore@v3
|
|
with:
|
|
path: target/debug/xtask
|
|
key: "${{ needs.xtask.outputs.cachekey-linux }}"
|
|
fail-on-cache-miss: true
|
|
|
|
- name: Clippy
|
|
run: |
|
|
target/debug/xtask ci clippy
|
|
|
|
integration-tests:
|
|
name: Integration test
|
|
if: github.event_name == 'push' || !github.event.pull_request.draft
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- name: Checkout the repo
|
|
uses: actions/checkout@v3
|
|
|
|
- name: Install Rust
|
|
uses: dtolnay/rust-toolchain@stable
|
|
|
|
- name: Load cache
|
|
uses: Swatinem/rust-cache@v2
|
|
|
|
- name: Install nextest
|
|
uses: taiki-e/install-action@nextest
|
|
|
|
- uses: actions/setup-python@v4
|
|
with:
|
|
python-version: 3.8
|
|
|
|
- uses: michaelkaye/setup-matrix-synapse@main
|
|
with:
|
|
uploadLogs: true
|
|
httpPort: 8228
|
|
disableRateLimiting: true
|
|
|
|
- name: Test
|
|
run: |
|
|
cargo nextest run -p matrix-sdk-integration-testing
|
|
|
|
|
|
sliding-sync-integration-tests:
|
|
name: Sliding Sync Integration test
|
|
if: github.event_name == 'push' || !github.event.pull_request.draft
|
|
|
|
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.0"
|
|
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:
|
|
# Custom image built from https://github.com/matrix-org/synapse/tree/v1.72.0/docker/complement
|
|
# with a dummy /complement/ca set
|
|
image: ghcr.io/matrix-org/synapse-service:v1.72.0
|
|
env:
|
|
SYNAPSE_COMPLEMENT_DATABASE: sqlite
|
|
SERVER_NAME: synapse
|
|
ports:
|
|
- 8008:8008
|
|
steps:
|
|
- name: Checkout the repo
|
|
uses: actions/checkout@v3
|
|
|
|
- name: Install Rust
|
|
uses: dtolnay/rust-toolchain@stable
|
|
|
|
- name: Load cache
|
|
uses: Swatinem/rust-cache@v2
|
|
|
|
- name: Install nextest
|
|
uses: taiki-e/install-action@nextest
|
|
|
|
- uses: actions/setup-python@v4
|
|
with:
|
|
python-version: 3.8
|
|
|
|
- name: Test
|
|
env:
|
|
RUST_LOG: "hyper=trace"
|
|
HOMESERVER_URL: "http://localhost:8008"
|
|
HOMESERVER_DOMAIN: "synapse"
|
|
SLIDING_SYNC_PROXY_URL: "http://localhost:8118"
|
|
run: |
|
|
cargo nextest run -p sliding-sync-integration-test
|