Skip to content

Enable Error Annotation for CI Errors #543

Enable Error Annotation for CI Errors

Enable Error Annotation for CI Errors #543

Workflow file for this run

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 }}