Enable Error Annotation for CI Errors #543
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI | |
on: | |
push: | |
branches: | |
- main | |
- feat/* | |
- fix/* | |
paths-ignore: | |
- docs/** | |
- "*.md" | |
- "LICENSE" | |
tags: | |
- v** | |
pull_request: | |
paths-ignore: | |
- docs/** | |
- "*.md" | |
- "LICENSE" | |
concurrency: | |
group: ${{ github.ref }} | |
cancel-in-progress: ${{ github.event_name == 'pull_request' }} | |
env: | |
CARGO_TERM_COLOR: always | |
JAVA_VERSION: 23 | |
permissions: | |
checks: write | |
jobs: | |
style_rustfmt: | |
name: Style / rustfmt | |
runs-on: ubuntu-latest | |
steps: | |
- name: Setup Rust | |
uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: stable | |
- name: Setup JDK | |
uses: actions/setup-java@v4 | |
with: | |
java-version: ${{ env.JAVA_VERSION }} | |
distribution: corretto | |
- uses: actions/checkout@v4 | |
name: Checkout source code | |
- name: Check code formatting with rustfmt | |
run: cargo fmt --check | |
style_clippy_check: | |
name: Style / clippy & check | |
runs-on: ubuntu-latest | |
steps: | |
- name: Setup Rust | |
uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: stable | |
- name: Setup JDK | |
uses: actions/setup-java@v4 | |
with: | |
java-version: ${{ env.JAVA_VERSION }} | |
distribution: corretto | |
- uses: actions/checkout@v4 | |
name: Checkout source code | |
- name: Restore Rust Build Cache | |
uses: Leafwing-Studios/cargo-cache@v2 | |
- run: cargo check --all-targets --all-features --verbose | |
name: Cargo check | |
- name: Run clippy | |
uses: auguwu/[email protected] | |
with: | |
check-args: --all-targets --all-features --verbose | |
deny: "warnings" | |
token: ${{secrets.GITHUB_TOKEN}} | |
unit_test: | |
name: Test / unit | |
runs-on: ubuntu-latest | |
needs: [style_rustfmt, style_clippy_check] | |
steps: | |
- name: Setup Rust | |
uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: stable | |
components: llvm-tools-preview | |
- name: Setup Build Tools | |
uses: taiki-e/install-action@v2 | |
with: | |
tool: cargo-llvm-cov,cargo-nextest | |
- uses: actions/checkout@v4 | |
name: Checkout source code | |
- name: Cache Rust Build Stuff | |
uses: Leafwing-Studios/cargo-cache@v2 | |
- name: Test | |
run: | | |
cargo llvm-cov clean --workspace | |
cargo llvm-cov nextest --all-features --no-report -E 'kind(lib)' | |
cargo llvm-cov report --codecov --output-path ./target/codecov-unit.json | |
- name: Upload Coverage Data | |
uses: actions/upload-artifact@v4 | |
with: | |
name: codecov-unit.json | |
path: ./target/codecov-unit.json | |
integration_test: | |
name: Test / integration | |
runs-on: ubuntu-latest | |
needs: [style_rustfmt, style_clippy_check] | |
steps: | |
- name: Setup Rust | |
uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: stable | |
components: llvm-tools-preview | |
- name: Setup Build Tools | |
uses: taiki-e/install-action@v2 | |
with: | |
tool: cargo-llvm-cov,cargo-nextest | |
- name: Setup JDK | |
uses: actions/setup-java@v4 | |
with: | |
java-version: ${{ env.JAVA_VERSION }} | |
distribution: corretto | |
- uses: actions/checkout@v4 | |
name: Checkout source code | |
- name: Hash JDK modules | |
id: hash-jdk-modules | |
run: | | |
file_path="${{ env.JAVA_HOME }}/lib/modules" | |
hash=$(sha256sum "$file_path" | awk '{print $1}') | |
echo "hash=${hash}" >> "$GITHUB_OUTPUT" | |
- name: Cache JDK classes | |
id: cache-jdk-classes | |
uses: actions/cache@v4 | |
with: | |
key: ${{ runner.os }}-${{ runner.arch }}-jdk-classes-${{ steps.hash-jdk-modules.outputs.hash }} | |
path: jdk_classes/ | |
- name: Extract JDK classes | |
if: steps.cache-jdk-classes.outputs.cache-hit != 'true' | |
run: jimage extract --verbose --dir=./jdk_classes "$JAVA_HOME/lib/modules" | |
- name: Cache Rust Build Stuff | |
uses: Leafwing-Studios/cargo-cache@v2 | |
- name: Test | |
env: | |
JDK_CLASSES: ./jdk_classes | |
INTEGRATION_TEST: TRUE | |
timeout-minutes: 10 | |
run: | | |
cargo llvm-cov clean --workspace | |
cargo llvm-cov nextest --all-features --no-report --run-ignored=all -E 'kind(test)' | |
cargo llvm-cov report --codecov --output-path ./target/codecov-integration.json | |
- name: Upload Coverage Data | |
uses: actions/upload-artifact@v4 | |
with: | |
name: codecov-integration.json | |
path: ./target/codecov-integration.json | |
codecov: | |
name: Report / Codecov | |
runs-on: ubuntu-latest | |
needs: [unit_test, integration_test] | |
steps: | |
- uses: actions/checkout@v4 | |
name: Checkout source code | |
- name: Download Coverage Data (Unit Test) | |
uses: actions/download-artifact@v4 | |
with: | |
name: codecov-unit.json | |
- name: Download Coverage Data (Integration Test) | |
uses: actions/download-artifact@v4 | |
with: | |
name: codecov-integration.json | |
- name: Upload to codecov (Unit Test) | |
uses: codecov/codecov-action@v5 | |
env: | |
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} | |
with: | |
files: codecov-unit.json | |
flags: unit_tests | |
fail_ci_if_error: true | |
- name: Upload to codecov (Integration Test) | |
uses: codecov/codecov-action@v5 | |
env: | |
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} | |
with: | |
files: codecov-integration.json | |
flags: integration_tests | |
fail_ci_if_error: true | |
build_doc: | |
name: Docs / Rustdoc | |
runs-on: ubuntu-latest | |
needs: [unit_test, integration_test] | |
steps: | |
- name: Setup Rust | |
uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: nightly | |
- uses: actions/checkout@v4 | |
name: Checkout source code | |
- name: Build docs | |
env: | |
RUSTDOCFLAGS: --cfg unstable | |
run: cargo doc --all-features --no-deps --verbose | |
- name: Fix file permissions | |
run: | | |
chmod -v -R +rX "target/doc/" | while read -r line; do | |
echo "::info title=Fixed file permissions::$line" | |
done | |
- uses: actions/upload-pages-artifact@v3 | |
name: Upload docs as github pages artifact | |
with: | |
name: mokapot-docs | |
path: target/doc | |
publish_latest_docs: | |
name: Deploy / Latest Rustdoc | |
runs-on: ubuntu-latest | |
needs: build_doc | |
if: ${{ !startsWith(github.ref, 'refs/pull/') }} | |
environment: | |
name: Latest Docs | |
url: https://henryhchchc.github.io/mokapot/mokapot | |
permissions: | |
pages: write | |
id-token: write | |
steps: | |
- uses: actions/deploy-pages@v4 | |
name: Deploy docs to github pages | |
with: | |
artifact_name: mokapot-docs | |
publish_to_crate_io: | |
name: Deploy / crates.io | |
runs-on: ubuntu-latest | |
if: ${{ startsWith(github.ref, 'refs/tags/v') }} | |
needs: [unit_test, integration_test, build_doc] | |
environment: | |
name: crates.io | |
url: https://crates.io/crates/mokapot | |
steps: | |
- name: Setup Rust | |
run: rustup update && rustup default | |
- uses: actions/checkout@v4 | |
name: Checkout source code | |
- uses: actions/checkout@v4 | |
name: Checkout source code | |
- name: Cache Rust Build Stuff | |
uses: Leafwing-Studios/cargo-cache@v2 | |
- name: Publish to crates.io | |
run: cargo publish --all-features --verbose | |
env: | |
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }} |