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-sqlite - no-encryption-and-sqlite - sqlite-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/heads/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 with: save-if: ${{ github.ref == 'refs/heads/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 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 with: save-if: ${{ github.ref == 'refs/heads/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-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: taiki-e/install-action@v2 with: tool: protoc@3.20.3 - name: Install Rust toolchain uses: dtolnay/rust-toolchain@master with: toolchain: ${{ matrix.rust }} - name: Load cache uses: Swatinem/rust-cache@v2 with: save-if: ${{ github.ref == 'refs/heads/main' }} - name: Install nextest uses: taiki-e/install-action@nextest - name: Test run: | cargo nextest run --workspace \ --exclude matrix-sdk-integration-testing --features testing - name: Test documentation run: | cargo test --doc --features docsrs 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' cmd: indexeddb - 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 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/heads/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 }} 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@master with: toolchain: nightly-2023-11-08 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.17.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: taiki-e/install-action@v2 with: tool: protoc@3.20.3 - name: Install Rust uses: dtolnay/rust-toolchain@master with: toolchain: nightly-2023-11-08 components: clippy - name: Load cache uses: Swatinem/rust-cache@v2 with: save-if: ${{ github.ref == 'refs/heads/main' }} - 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 # 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 ./coverage.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:v1.94.0 # keep in sync with ./coverage.yml 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 with: save-if: ${{ github.ref == 'refs/heads/main' }} - name: Install nextest uses: taiki-e/install-action@nextest - 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 matrix-sdk-integration-testing