name: CI on: push: branches: [main] paths: - "**.nix" - "**.rs" - "Cargo.lock" - "Cargo.toml" - "flake.lock" - ".github/workflows/ci.yaml" pull_request: paths: - "**.nix" - "**.rs" - "Cargo.lock" - "Cargo.toml" - "flake.lock" - ".github/workflows/ci.yaml" workflow_dispatch: jobs: build: name: Build strategy: 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@v14 - name: Setup Nix cache uses: DeterminateSystems/magic-nix-cache-action@v8 - name: Run build run: nix build --print-build-logs --show-trace treefmt: name: Treefmt runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - name: Install Nix uses: DeterminateSystems/nix-installer-action@v14 - name: Run check run: | nix fmt -- --fail-on-change release-gate: name: CI Release gate needs: [build, nix, treefmt] runs-on: ubuntu-latest steps: - name: Exit with error if: contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') run: exit 1