Skip to content

rust-ci

rust-ci #503

Workflow file for this run

# libpathrs: safe path resolution on Linux
# Copyright (C) 2019-2024 Aleksa Sarai <cyphar@cyphar.com>
# Copyright (C) 2019-2024 SUSE LLC
#
# This program is free software: you can redistribute it and/or modify it under
# the terms of the GNU Lesser General Public License as published by the Free
# Software Foundation, either version 3 of the License, or (at your option) any
# later version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE. See the GNU General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License along
# with this program. If not, see <https://www.gnu.org/licenses/>.
on:
push:
branches: [ main ]
tags:
- 'v*'
pull_request:
branches: [ main ]
release:
types: [ published ]
schedule:
- cron: '0 0 * * *'
name: rust-ci
env:
RUST_MSRV: "1.63"
jobs:
codespell:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: pip install codespell==v2.3.0
- run: codespell -L crate
check:
name: cargo check (stable)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- run: cargo check --workspace --all-features --all-targets
check-msrv:
name: cargo check (msrv)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ env.RUST_MSRV }}
- run: cargo check --workspace --all-features --all-targets
check-cross:
strategy:
fail-fast: false
matrix:
target:
- x86_64-unknown-linux-musl
- aarch64-unknown-linux-musl
- arm-unknown-linux-gnueabi
- arm-unknown-linux-gnueabihf
- armv7-unknown-linux-gnueabihf
- i686-unknown-linux-gnu
- loongarch64-unknown-linux-gnu
- loongarch64-unknown-linux-musl
- powerpc-unknown-linux-gnu
- powerpc64-unknown-linux-gnu
- powerpc64le-unknown-linux-gnu
- riscv64gc-unknown-linux-gnu
- sparc64-unknown-linux-gnu
- s390x-unknown-linux-gnu
name: cargo check (${{ matrix.target }})
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
# TODO: Should we use MSRV for this?
targets: ${{ matrix.target }}
- name: cargo check --target=${{ matrix.target }}
run: >-
cargo check --target=${{ matrix.target }} --workspace --all-features --all-targets
- name: cargo build --target=${{ matrix.target }}
run: >-
cargo build --target=${{ matrix.target }} --release --all-features
rustdoc:
name: cargo doc
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- run: cargo doc --document-private-items --workspace --all-features
- name: upload docs
uses: actions/upload-artifact@v4
with:
name: rustdoc
path: target/doc
test:
name: cargo test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# Nightly rust is required for llvm-cov --doc.
- uses: dtolnay/rust-toolchain@nightly
- uses: taiki-e/install-action@cargo-llvm-cov
- uses: taiki-e/install-action@nextest
# Rust tests.
- name: rust doc tests
run: make CARGO_NIGHTLY=cargo test-rust-doctest
- name: rust unit tests
run: make CARGO_NIGHTLY=cargo test-rust-unpriv
- name: rust unit tests (root)
run: make CARGO_NIGHTLY=cargo test-rust-root
- name: calculate coverage
run: cargo llvm-cov report
- name: generate coverage html
run: cargo llvm-cov report --html
- name: upload coverage html
uses: actions/upload-artifact@v4
with:
name: coverage-report
path: target/llvm-cov/html
examples:
name: smoke-test examples
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- run: cargo build --examples
- run: make -C examples smoke-test-rust
fmt:
name: rustfmt
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# We need to use nightly Rust to check the formatting.
- uses: dtolnay/rust-toolchain@nightly
with:
components: rustfmt
- run: cargo fmt --all -- --check
clippy:
name: clippy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# Pin the Rust version to avoid Rust updates breaking our clippy lints.
- uses: dtolnay/rust-toolchain@1.83
with:
components: clippy
- run: cargo clippy --all-features --all-targets
release-crate:
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
needs:
- check
- check-msrv
- check-cross
- rustdoc
- test
- examples
- fmt
- clippy
runs-on: ubuntu-latest
environment:
name: release-crate
url: "https://crates.io/crates/pathrs"
permissions:
id-token: write
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- run: cargo publish
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
complete:
if: ${{ ! failure() && ! cancelled() }}
needs:
- check
- check-msrv
- check-cross
- rustdoc
- test
- examples
- fmt
- clippy
- release-crate
runs-on: ubuntu-latest
steps:
- run: echo "Rust CI jobs completed successfully."