name: Cargo Build, Test, and Linting on: push: pull_request: workflow_dispatch: env: CARGO_TERM_COLOR: always RUSTFLAGS: "-Dwarnings" jobs: format: name: Check formatting runs-on: ubuntu-latest strategy: matrix: toolchain: - stable steps: - uses: actions/checkout@v5 - run: rustup update ${{ matrix.toolchain }} && rustup default ${{ matrix.toolchain }} - run: rustup component add rustfmt --toolchain ${{ matrix.toolchain }} - uses: Swatinem/rust-cache@v2 - run: cargo fmt --check clippy: name: Run lints runs-on: ubuntu-latest strategy: matrix: toolchain: - stable steps: - uses: actions/checkout@v5 - run: rustup update ${{ matrix.toolchain }} && rustup default ${{ matrix.toolchain }} - run: rustup component add clippy rustfmt --toolchain ${{ matrix.toolchain }} - uses: Swatinem/rust-cache@v2 - run: cargo clippy --all-targets --all-features build_and_test: name: Build project and test runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest, windows-latest] toolchain: - stable steps: - uses: actions/checkout@v5 - run: rustup update ${{ matrix.toolchain }} && rustup default ${{ matrix.toolchain }} - run: rustup component add rustfmt --toolchain ${{ matrix.toolchain }} - uses: Swatinem/rust-cache@v2 - run: cargo test --verbose build_release: name: Build project in release runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest, windows-latest] toolchain: - stable steps: - uses: actions/checkout@v5 - run: rustup update ${{ matrix.toolchain }} && rustup default ${{ matrix.toolchain }} - run: rustup component add rustfmt --toolchain ${{ matrix.toolchain }} - uses: Swatinem/rust-cache@v2 - run: cargo build --verbose --release - name: Export executable uses: actions/upload-artifact@v5 with: name: pumpkin-${{ matrix.os }} compression-level: 9 path: target/${{ matrix.target }}/release/pumpkin* clippy_release: name: Run lints in release mode runs-on: ubuntu-latest strategy: matrix: toolchain: - stable steps: - uses: actions/checkout@v5 - run: rustup update ${{ matrix.toolchain }} && rustup default ${{ matrix.toolchain }} - run: rustup component add clippy rustfmt --toolchain ${{ matrix.toolchain }} - uses: Swatinem/rust-cache@v2 - run: cargo clippy --release --all-targets --all-features