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 (${{ matrix.os }})" strategy: fail-fast: false matrix: include: - os: "ubuntu-latest" use-nix: true - os: "windows-latest" use-nix: false runs-on: ${{ matrix.os }} steps: - name: "Checkout repository" uses: "actions/checkout@v4" - name: "Install Nix" if: ${{ matrix.use-nix }} uses: "cachix/install-nix-action@v30" - name: "Setup Nix cache" if: ${{ matrix.use-nix }} uses: "DeterminateSystems/magic-nix-cache-action@v8" - name: "Install Rust" if: ${{ !matrix.use-nix }} uses: "actions-rust-lang/setup-rust-toolchain@v1" - name: "Run cargo build" if: ${{ !matrix.use-nix }} run: | cargo build --locked --release - name: "Evaluate flake.nix" if: ${{ matrix.use-nix }} run: nix flake check --no-build --show-trace - name: "Run nix build" if: ${{ matrix.use-nix }} run: | nix build --print-build-logs - name: "Build Flake checks" if: ${{ matrix.os == 'ubuntu-latest' }} run: | nix flake check --print-build-logs release-gate: name: "CI Release gate" needs: [ "build" ] if: ${{ always() }} runs-on: "ubuntu-latest" steps: - name: "Exit with error" if: ${{ contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }} run: | exit 1