name: CI on: push: branches: [main] paths: - "**.nix" - "**.rs" - "**.lock" - "Cargo.toml" pull_request: paths: - "**.nix" - "**.rs" - "**.lock" - "Cargo.toml" workflow_dispatch: jobs: build: name: Build strategy: fail-fast: false matrix: os: [macos-latest, windows-latest] runs-on: ${{ matrix.os }} steps: - name: Checkout repository uses: actions/checkout@v4 - name: Install Rust uses: actions-rust-lang/setup-rust-toolchain@v1 - name: Run build run: | cargo build --locked --release nix: name: Nix runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - name: Install Nix uses: DeterminateSystems/nix-installer-action@v13 - name: Setup Nix cache uses: DeterminateSystems/magic-nix-cache-action@v7 - name: Run flake checks run: | nix build --print-build-logs --show-trace rustfmt: name: Rustfmt runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - name: Install Rust uses: actions-rust-lang/setup-rust-toolchain@v1 with: components: rustfmt - name: Run rustfmt uses: actions-rust-lang/rustfmt@v1 release-gate: name: CI Release gate needs: [build, rustfmt, nix] if: ${{ always() }} runs-on: ubuntu-latest steps: - name: Exit with error if: contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') run: exit 1