name: Build and Test on: push: branches: ["main"] pull_request: branches: ["main", "dev"] env: CARGO_TERM_COLOR: always jobs: linux: runs-on: ubuntu-latest timeout-minutes: 30 steps: - uses: actions/checkout@v4 - name: Clone spacebar server run: | git clone https://github.com/bitfl0wer/server.git - uses: actions/setup-node@v4 with: node-version: 18 cache: "npm" cache-dependency-path: server/package-lock.json - name: Prepare and start Spacebar server run: | npm install npm run setup npm run start & working-directory: ./server - uses: Swatinem/rust-cache@v2 with: cache-all-crates: "true" prefix-key: "linux" - uses: taiki-e/install-action@nextest - name: Build, Test with nextest, Publish Coverage run: | if [ -n "${{ secrets.COVERALLS_REPO_TOKEN }}" ]; then if [ "${{github.event.pull_request.head.ref}}" = "main" ]; then curl -L --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/cargo-bins/cargo-binstall/main/install-from-binstall-release.sh | bash cargo binstall --no-confirm cargo-tarpaulin --force cargo tarpaulin --all-features --avoid-cfg-tarpaulin --tests --verbose --skip-clean --coveralls ${{ secrets.COVERALLS_REPO_TOKEN }} --timeout 120 else echo "Code Coverage step is skipped on non-main PRs and PRs from forks." cargo nextest run --verbose --all-features fi else echo "Code Coverage step is skipped on non-main PRs and PRs from forks." cargo nextest run --verbose --all-features fi - name: Check common non-default feature configurations run: | echo "No features:" cargo check --features="" --no-default-features echo "Only client:" cargo check --features="client" --no-default-features echo "Only backend:" cargo check --features="backend" --no-default-features echo "Only voice:" cargo check --features="voice" --no-default-features echo "Only voice gateway:" cargo check --features="voice_gateway" --no-default-features echo "Backend + client:" cargo check --features="backend, client" --no-default-features echo "Backend + voice:" cargo check --features="backend, voice" --no-default-features echo "Backend + voice gateway:" cargo check --features="backend, voice_gateway" --no-default-features echo "Client + voice gateway:" cargo check --features="client, voice_gateway" --no-default-features wasm-gecko: runs-on: ubuntu-latest timeout-minutes: 30 steps: - uses: actions/checkout@v4 - name: Clone spacebar server run: | git clone https://github.com/bitfl0wer/server.git - uses: actions/setup-node@v4 with: node-version: 18 cache: "npm" cache-dependency-path: server/package-lock.json - name: Prepare and start Spacebar server run: | npm install npm run setup npm run start & working-directory: ./server - uses: Swatinem/rust-cache@v2 with: cache-all-crates: "true" prefix-key: "macos" - name: Run WASM tests with Safari, Firefox, Chrome run: | rustup target add wasm32-unknown-unknown curl -L --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/cargo-bins/cargo-binstall/main/install-from-binstall-release.sh | bash cargo binstall --no-confirm wasm-bindgen-cli --version "0.2.92" --force GECKODRIVER=$(which geckodriver) cargo test --target wasm32-unknown-unknown --no-default-features --features="client, rt, voice_gateway" wasm-chrome: runs-on: ubuntu-latest timeout-minutes: 30 steps: - uses: actions/checkout@v4 - name: Clone spacebar server run: | git clone https://github.com/bitfl0wer/server.git - uses: actions/setup-node@v4 with: node-version: 18 cache: "npm" cache-dependency-path: server/package-lock.json - name: Prepare and start Spacebar server run: | npm install npm run setup npm run start & working-directory: ./server - uses: Swatinem/rust-cache@v2 with: cache-all-crates: "true" prefix-key: "macos" - name: Run WASM tests with Safari, Firefox, Chrome run: | rustup target add wasm32-unknown-unknown curl -L --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/cargo-bins/cargo-binstall/main/install-from-binstall-release.sh | bash cargo binstall --no-confirm wasm-bindgen-cli --version "0.2.92" --force CHROMEDRIVER=$(which chromedriver) cargo test --target wasm32-unknown-unknown --no-default-features --features="client, rt, voice_gateway"