# Copyright 2025 Signal Messenger, LLC # SPDX-License-Identifier: AGPL-3.0-only name: Test on: push: branches: - main pull_request: jobs: test: strategy: matrix: os: [ubuntu-latest, windows-latest, macos-latest] include: - os: macos-latest cc: clang cxx: clang++ - os: ubuntu-latest cc: gcc cxx: g++ runs-on: ${{ matrix.os }} timeout-minutes: 30 steps: - name: Checkout uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Setup pnpm uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 with: version: 10.18.1 - name: Setup node.js uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 with: node-version-file: '.nvmrc' cache: 'pnpm' cache-dependency-path: 'pnpm-lock.yaml' - name: Setup sccache uses: mozilla-actions/sccache-action@65101d47ea8028ed0c98a1cdea8dd9182e9b5133 # v0.0.8 - name: Restore sccache uses: actions/cache@d4323d4df104b026a6aa633fdb11d772146be0bf # v4.2.2 with: path: ${{ env.SCCACHE_PATH }} key: sccache-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml', 'patches/**', 'deps/extension/Cargo.lock') }} - name: Restore cargo cache uses: actions/cache@d4323d4df104b026a6aa633fdb11d772146be0bf # v4.2.2 with: path: ~/.cargo/registry key: cargo-${{ runner.os }}-${{ hashFiles('deps/extension/Cargo.lock') }} - name: Install node_modules (unixes) if: ${{ matrix.os == 'macos-latest' || matrix.os == 'ubuntu-latest' }} run: pnpm install env: CC: sccache ${{ matrix.cc }} CXX: sccache ${{ matrix.cxx }} RUSTC_WRAPPER: sccache SCCACHE_GHA_ENABLED: 'true' - name: Install node_modules (windows) if: ${{ matrix.os == 'windows-latest' }} run: pnpm install env: RUSTC_WRAPPER: sccache - name: Run lint if: matrix.os != 'windows-latest' run: pnpm lint - name: Run tests run: pnpm test