name: Cargo Build, Test, and Linting on: push: pull_request: 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 }} - 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 }} - 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, macos-latest] toolchain: - stable steps: - uses: actions/checkout@v5 - run: rustup update ${{ matrix.toolchain }} && rustup default ${{ matrix.toolchain }} - uses: Swatinem/rust-cache@v2 - run: cargo test --verbose github-release-draft: name: 'Create GitHub Release Draft' runs-on: ubuntu-latest if: success() && github.ref == 'refs/heads/master' env: NIGHTLY_REPO: ${{ github.repository_owner }}/pumpkin-commit-builds outputs: release-id: ${{ steps.create-release.outputs.release-id }} steps: - name: Checkout sources uses: actions/checkout@v4 - name: Create Release Draft id: create-release env: NIGHTLY_REPO: ${{ github.repository_owner }}/pumpkin-commit-builds GITHUB_TOKEN: ${{ secrets.COMMIT_REPO_TOKEN }} run: | RELEASE_TAG="per-commit-${{ github.sha }}" RELEASE_TITLE="Build ${{ github.sha }}" REPO_NAME="${{ env.NIGHTLY_REPO }}" echo "Creating draft release with tag: ${RELEASE_TAG} in repo: ${REPO_NAME}" RELEASE_URL=$(gh release create "${RELEASE_TAG}" \ --draft \ --title "${RELEASE_TITLE}" \ --notes "Per-commit build based on ${{ github.repository }}@${{ github.sha }}" \ --repo "${REPO_NAME}") RELEASE_ID=$(gh release view "${RELEASE_TAG}" --repo "${REPO_NAME}" --json id | jq -r '.id') echo "release-id=${RELEASE_ID}" >> ${GITHUB_OUTPUT} build_release: name: Build project in release (${{ matrix.os }}) runs-on: ${{ matrix.os }} needs: github-release-draft strategy: matrix: os: [ubuntu-latest, windows-latest, macos-latest] toolchain: - stable steps: - uses: actions/checkout@v5 - run: rustup update ${{ matrix.toolchain }} && rustup default ${{ matrix.toolchain }} - uses: Swatinem/rust-cache@v2 - run: cargo build --verbose --release - name: Upload Commit env: NIGHTLY_REPO: ${{ github.repository_owner }}/pumpkin-commit-builds GITHUB_TOKEN: ${{ secrets.COMMIT_REPO_TOKEN }} run: | gh release upload ${{ needs.github-release-draft.outputs.release-id }} \ pumpkin-${{ matrix.os }} --repo ${{ env.NIGHTLY_REPO } 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 }} - uses: Swatinem/rust-cache@v2 - run: cargo clippy --release --all-targets --all-features