diff --git a/.github/workflows/conventional-commits.yml b/.github/workflows/conventional-commits.yml new file mode 100644 index 00000000..36c87d99 --- /dev/null +++ b/.github/workflows/conventional-commits.yml @@ -0,0 +1,22 @@ +name: "Lint PR" + +on: + pull_request: + +jobs: + conventional-commits-check: + name: Check conventional commits + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 + with: + fetch-depth: 0 + ref: ${{ github.event.pull_request.head.sha }} + - uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 # v5 + with: + python-version: "3.10" + - name: Install commitizen + run: pip install commitizen + - name: commitizen check + run: cz check --rev-range ${{ github.event.pull_request.base.sha }}..HEAD diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 00000000..de178ce1 --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,168 @@ +name: tests + +on: + push: + branches: [main] + pull_request: + workflow_dispatch: + +jobs: + fmt: + name: cargo fmt + runs-on: ubuntu-latest + container: + image: rust:1.80-bookworm + steps: + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 + - run: | + rustup component add rustfmt + cargo fmt --all -- --check + + clippy: + name: cargo clippy + runs-on: ubuntu-latest + container: + image: rust:1.80-bookworm + steps: + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 + - name: Cache dependencies + uses: Swatinem/rust-cache@23bce251a8cd2ffc3c1075eaa2367cf899916d84 #v2.7.3 + if: ${{ !startsWith(github.head_ref, 'renovate/') }} + - name: Configure sccache + run: | + echo "RUSTC_WRAPPER=sccache" >> $GITHUB_ENV + echo "SCCACHE_GHA_ENABLED=true" >> $GITHUB_ENV + if: ${{ !startsWith(github.head_ref, 'renovate/') }} + - name: Run sccache-cache + uses: mozilla-actions/sccache-action@89e9040de88b577a072e3760aaf59f585da083af #v0.0.5 + if: ${{ !startsWith(github.head_ref, 'renovate/') }} + - run: | + rustup component add clippy + # Temporarily allowing dead-code, while denying all other warnings + cargo clippy --all-features --all-targets -- -A dead-code -D warnings + + test-and-coverage: + name: cargo test and coverage + runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write + actions: read + container: + image: rust:1.80-bookworm + steps: + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 + - name: Cache dependencies + uses: Swatinem/rust-cache@23bce251a8cd2ffc3c1075eaa2367cf899916d84 #v2.7.3 + if: ${{ !startsWith(github.head_ref, 'renovate/') }} + - name: Configure sccache + run: | + echo "RUSTC_WRAPPER=sccache" >> $GITHUB_ENV + echo "SCCACHE_GHA_ENABLED=true" >> $GITHUB_ENV + if: ${{ !startsWith(github.head_ref, 'renovate/') }} + - name: Run sccache-cache + uses: mozilla-actions/sccache-action@89e9040de88b577a072e3760aaf59f585da083af #v0.0.5 + if: ${{ !startsWith(github.head_ref, 'renovate/') }} + - name: Install cargo-llvm-cov + uses: taiki-e/install-action@cargo-llvm-cov + - name: Run tests and generate coverage report + run: cargo llvm-cov test --all-features --workspace --lcov --output-path lcov.info + - name: Upload coverage to Coveralls + uses: coverallsapp/github-action@643bc377ffa44ace6394b2b5d0d3950076de9f63 # v2.3.0 + with: + file: ./lcov.info + + # Cannot do with llvm-cov, see https://github.com/taiki-e/cargo-llvm-cov/issues/2 + test-docs: + name: cargo test docs code snippets + runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write + actions: read + container: + image: rust:1.80-bookworm + steps: + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 + - name: Cache dependencies + uses: Swatinem/rust-cache@23bce251a8cd2ffc3c1075eaa2367cf899916d84 #v2.7.3 + if: ${{ !startsWith(github.head_ref, 'renovate/') }} + - name: Configure sccache + run: | + echo "RUSTC_WRAPPER=sccache" >> $GITHUB_ENV + echo "SCCACHE_GHA_ENABLED=true" >> $GITHUB_ENV + if: ${{ !startsWith(github.head_ref, 'renovate/') }} + - name: Run sccache-cache + uses: mozilla-actions/sccache-action@89e9040de88b577a072e3760aaf59f585da083af #v0.0.5 + if: ${{ !startsWith(github.head_ref, 'renovate/') }} + - name: Test documentation code snippets + run: cargo test --doc --all-features --workspace + + build: + name: cargo check + runs-on: ubuntu-latest + container: + image: rust:1.80-bookworm + steps: + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 + - name: Cache dependencies + uses: Swatinem/rust-cache@23bce251a8cd2ffc3c1075eaa2367cf899916d84 #v2.7.3 + if: ${{ !startsWith(github.head_ref, 'renovate/') }} + - name: Configure sccache + run: | + echo "RUSTC_WRAPPER=sccache" >> $GITHUB_ENV + echo "SCCACHE_GHA_ENABLED=true" >> $GITHUB_ENV + if: ${{ !startsWith(github.head_ref, 'renovate/') }} + - name: Run sccache-cache + uses: mozilla-actions/sccache-action@89e9040de88b577a072e3760aaf59f585da083af #v0.0.5 + if: ${{ !startsWith(github.head_ref, 'renovate/') }} + - name: Cargo check + run: cargo check + + audit: + name: Cargo Audit + runs-on: ubuntu-latest + permissions: + actions: read + contents: write + pull-requests: write + container: + image: rust:1.80-bookworm + steps: + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 + - name: Cache dependencies + uses: Swatinem/rust-cache@23bce251a8cd2ffc3c1075eaa2367cf899916d84 #v2.7.3 + if: ${{ !startsWith(github.head_ref, 'renovate/') }} + - name: Configure sccache + run: | + echo "RUSTC_WRAPPER=sccache" >> $GITHUB_ENV + echo "SCCACHE_GHA_ENABLED=true" >> $GITHUB_ENV + if: ${{ !startsWith(github.head_ref, 'renovate/') }} + - name: Run sccache-cache + uses: mozilla-actions/sccache-action@89e9040de88b577a072e3760aaf59f585da083af #v0.0.5 + if: ${{ !startsWith(github.head_ref, 'renovate/') }} + - name: Install Cargo Audit + run: | + cargo install cargo-audit + - name: Cargo check + run: cargo check + - name: Generate Cargo Audit Report + id: report + run: | + cargo audit --quiet | tee report.xml + body="$(cat report.xml)" + delimiter="$(openssl rand -hex 8)" + echo "body<<$delimiter" >> $GITHUB_OUTPUT + echo "$body" >> $GITHUB_OUTPUT + echo "$delimiter" >> $GITHUB_OUTPUT + - name: Comment report + uses: marocchino/sticky-pull-request-comment@v2 + with: + hide_and_recreate: true + hide_classify: "OUTDATED" + message: | + 🤖 Cargo Audit Report 🤖 + + ${{ steps.report.outputs.body }} + + (Empty means OK! 👍)