Various CI pipeline improvements #192
Workflow file for this run
This file contains hidden or 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 Status | |
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
branches: | |
- main | |
env: | |
CARGO_TERM_COLOR: always | |
RUST_TEST_TIME_UNIT: 60,120 | |
RUST_TEST_TIME_INTEGRATION: 60,120 | |
RUST_TEST_TIME_DOCTEST: 60,120 | |
jobs: | |
test: | |
name: test | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
crate: [ libcoap-sys, libcoap-rs ] | |
dtls_backend: [ openssl, gnutls, tinydtls, mbedtls ] | |
rust_version: [ msrv, stable, nightly ] | |
env: | |
LLVM_PROFILE_FILE: 'target/debug/coverage/${{ matrix.crate }}-%p-%m.profraw' | |
RUSTFLAGS: "${{ matrix.rust_version == 'nightly' && '-Cinstrument-coverage -Cpanic=abort -Zpanic_abort_tests' || ' ' }}" | |
RUSTDOCFLAGS: "${{ matrix.rust_version == 'nightly' && '-C instrument-coverage -Cpanic=abort -Zpanic_abort_tests -Z unstable-options --persist-doctests target/debug/' || ' ' }}" | |
DTLS_LIBRARY_FEATURES: | | |
${{ (matrix.crate == 'libcoap-rs' && matrix.dtls_backend == 'tinydtls' && 'tcp,dtls-psk,dtls-rpk,dtls_tinydtls_vendored') | |
|| (matrix.crate == 'libcoap-rs' && matrix.dtls_backend == 'mbedtls' && 'tcp,dtls-psk,dtls-pki,dtls_mbedtls_vendored') | |
|| (matrix.crate == 'libcoap-rs' && matrix.dtls_backend == 'openssl' && 'tcp,dtls-psk,dtls-pki,dtls_openssl_vendored') | |
|| (matrix.crate == 'libcoap-rs' && matrix.dtls_backend == 'gnutls' && 'tcp,dtls-psk,dtls-pki,dtls-rpk,dtls_gnutls') | |
|| (matrix.crate == 'libcoap-sys' && matrix.dtls_backend == 'tinydtls' && 'dtls,dtls_backend_tinydtls,dtls_backend_tinydtls_vendored') | |
|| (matrix.crate == 'libcoap-sys' && matrix.dtls_backend == 'mbedtls' && 'dtls,dtls_backend_mbedtls,dtls_backend_mbedtls_vendored') | |
|| (matrix.crate == 'libcoap-sys' && matrix.dtls_backend == 'openssl' && 'dtls,dtls_backend_openssl,dtls_backend_openssl_vendored') | |
|| (matrix.crate == 'libcoap-sys' && matrix.dtls_backend == 'gnutls' && 'dtls,dtls_backend_gnutls') | |
|| 'vendored' | |
}} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- uses: dtolnay/rust-toolchain@stable | |
with: | |
components: rust-src, rustc, rust-std, cargo, llvm-tools, llvm-tools-preview | |
toolchain: ${{ matrix.rust_version == 'msrv' && '1.77' || matrix.rust_version }} | |
- if: matrix.dtls_backend == 'gnutls' | |
uses: awalsh128/cache-apt-pkgs-action@latest | |
with: | |
packages: libgnutls28-dev libgnutls30 | |
version: 1.0 | |
- run: cargo test -p ${{ matrix.crate }} --no-default-features --features tcp,rand,vendored --features "$DTLS_LIBRARY_FEATURES" --no-fail-fast | |
- if: matrix.rust_version == 'nightly' | |
run: | | |
mkdir -p target/debug/test-binaries | |
cp $(cargo test --no-run --message-format=json --no-default-features --features tcp,rand,vendored --features "$DTLS_LIBRARY_FEATURES" --no-fail-fast \ | |
| jq -r "select(.profile.test == true) | .filenames[]" \ | |
| grep -v dSYM -) target/debug/test-binaries/ | |
- if: matrix.rust_version == 'nightly' | |
uses: actions/upload-artifact@v4 | |
with: | |
path: | | |
target/debug/coverage/ | |
target/debug/test-binaries/ | |
lint: | |
name: lint | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
crate: [ libcoap-sys, libcoap-rs ] | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- uses: dtolnay/rust-toolchain@stable | |
with: | |
components: clippy | |
- uses: giraffate/clippy-action@main | |
with: | |
reporter: 'github-check' | |
clippy_flags: -p ${{ matrix.crate }} --no-deps --all-features | |
level: warning | |
fail_on_error: true | |
tool_name: clippy (${{ matrix.crate }}) | |
fmt: | |
name: rustfmt | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
crate: [ libcoap-sys, libcoap-rs ] | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: dtolnay/rust-toolchain@stable | |
with: | |
components: rustfmt | |
- run: cargo fmt -p ${{ matrix.crate }} -- --check | |
coverage: | |
name: coverage | |
runs-on: ubuntu-latest | |
outputs: | |
report: ${{ steps.cov-report.outputs.summary }} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- uses: dtolnay/rust-toolchain@stable | |
with: | |
components: clippy, rustfmt | |
- uses: baptiste0928/cargo-install@v3 | |
with: | |
crate: cargo-tarpaulin | |
- uses: awalsh128/cache-apt-pkgs-action@latest | |
with: | |
packages: libgnutls28-dev libgnutls30 | |
version: 1.0 | |
- run: cargo tarpaulin --no-fail-fast --workspace --verbose --features tcp,vendored,dtls_gnutls,dtls-psk,dtls-rpk,dtls-pki --exclude-files libcoap-sys/tests,libcoap/tests --timeout 120 --out Xml | |
- id: cov-report | |
name: Produce the coverage report | |
uses: pulsastrix/coverage-action@always_generate_comment_body | |
with: | |
path: ./cobertura.xml | |
threshold: 80.0 | |
fail: false | |
publish: false | |
diff: true | |
togglable-report: true | |
coverage-summary-title: "Code Coverage Report" | |
pr-comment: | |
name: pr-comment | |
runs-on: ubuntu-latest | |
if: ${{ always() && github.event_name == 'pull_request' }} | |
needs: [ lint, coverage ] | |
env: | |
LINT_OUTPUT: ${{ needs.lint.result }} | |
COV_OUTPUT: ${{ needs.coverage.outputs.report }} | |
steps: | |
- name: "Generate Markdown Report" | |
run: | | |
# Snippet taken from https://github.com/marocchino/sticky-pull-request-comment#append-after-comment-every-time-it-runs | |
EOF=$(dd if=/dev/urandom bs=15 count=1 status=none | base64) | |
echo "report<<$EOF" >> "$GITHUB_ENV" | |
echo "# Workflow Status Report" >> "$GITHUB_ENV" | |
echo "Generated for commit ${{ github.sha }} on `date -u`." >> "$GITHUB_ENV" | |
echo "" >> "$GITHUB_ENV" | |
echo "[](https://github.com/namib-project/libcoap-rs/actions/workflows/ci.yml?query=branch%3A${GITHUB_HEAD_REF})" >> "$GITHUB_ENV" | |
echo "" >> "$GITHUB_ENV" | |
echo "## Linting Report" >> "$GITHUB_ENV" | |
echo "" >> "$GITHUB_OUTPUT" | |
echo "Clippy check result: $LINT_OUTPUT" >> "$GITHUB_ENV" | |
echo "" >> "$GITHUB_ENV" | |
echo "Refer to [the \"Files Changed\" tab](./${{ github.event.number }}/files/) for identified issues." >> "$GITHUB_ENV" | |
echo "" >> "$GITHUB_ENV" | |
echo "$COV_OUTPUT" >> "$GITHUB_ENV" | |
echo "$EOF" >> "$GITHUB_ENV" | |
- if: github.event_name == 'pull_request' | |
uses: marocchino/sticky-pull-request-comment@v2 | |
with: | |
message: ${{ env.report }} |