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: cachix/install-nix-action@v31 - 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: cachix/install-nix-action@v31 - name: Run check run: | find . -type f -name '*.nix' -exec 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