From fe92a50eb09e38d3e8cf63393589ce486acc87b2 Mon Sep 17 00:00:00 2001 From: Phantomical Date: Sun, 11 Feb 2024 00:47:53 -0800 Subject: [PATCH] Add github CI workflow --- .github/workflows/cargo.yml | 128 ++++++++++++++++++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 .github/workflows/cargo.yml diff --git a/.github/workflows/cargo.yml b/.github/workflows/cargo.yml new file mode 100644 index 0000000..39e4516 --- /dev/null +++ b/.github/workflows/cargo.yml @@ -0,0 +1,128 @@ + +name: cargo +on: + push: + branches: + main + pull_request: + +jobs: + test: + name: test-${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: + - ubuntu-latest + - macos-latest + - windows-latest + fail-fast: false + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable + - uses: Swatinem/rust-cache@v2 + - uses: swlynch99/cargo-sweep-action@v1 + - uses: taiki-e/install-action@cargo-nextest + + - name: cargo nextest run + run: | + cargo nextest run \ + --locked \ + --all-targets \ + --all-features \ + --no-fail-fast \ + --success-output final \ + --final-status-level skip + shell: bash + + - name: doctests + run: | + cargo test --doc \ + --all-features \ + --locked + shell: bash + + check-powerset: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable + - uses: Swatinem/rust-cache@v2 + - uses: swlynch99/cargo-sweep-action@v1 + - uses: taiki-e/install-action@cargo-hack + + - name: check powerset + run: | + cargo hack --feature-powerset check --locked + + rustfmt: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable + - uses: Swatinem/rust-cache@v2 + - uses: swlynch99/cargo-sweep-action@v1 + + - name: rustfmt + run: | + cargo fmt --all -- --check + + clippy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable + with: + components: clippy + - uses: Swatinem/rust-cache@v2 + - uses: swlynch99/cargo-sweep-action@v1 + - uses: taiki-e/install-action@v2 + with: + tool: clippy-sarif,sarif-fmt + + - name: cargo clippy + run: | + cargo clippy --all-targets --all-features --message-format json \ + | clippy-sarif \ + | tee clippy.sarif \ + | sarif-fmt + continue-on-error: true + + - uses: actions/upload-artifact@v4 + with: + name: clippy-sarif + path: clippy.sarif + + clippy-upload: + if: github.event_name == 'pull_request' || github.ref == 'reads/heads/main' + runs-on: ubuntu-latest + needs: + - clippy + permissions: + security-events: write + steps: + - uses: actions/checkout@v4 + - uses: actions/download-artifact@v4 + with: + name: clippy-sarif + - uses: github/codeql-action/upload-sarif@v3 + with: + sarif_file: clippy.sarif + + check-success: + name: verify all tests pass + runs-on: ubuntu-latest + if: always() + needs: + - test + - check-powerset + - rustfmt + - clippy + + steps: + - name: fail if any dependencies failed + if: contains(needs.*.result, 'failure') + shell: bash + run: exit 1 + - name: no-op + run: echo "All checks passed!"