Sync repo templates ⚙ #2747
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: Rust | |
on: | |
push: | |
branches: [main] | |
pull_request: | |
branches: [main] | |
permissions: | |
contents: read | |
# s390x tests are expensive; don't waste job slots on superseded code | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
env: | |
CONTAINER: registry.fedoraproject.org/fedora:latest | |
CARGO_TERM_COLOR: always | |
RUST_BACKTRACE: 1 | |
# Pinned toolchain for linting | |
ACTIONS_LINTS_TOOLCHAIN: 1.77.2 | |
defaults: | |
run: | |
# Created by env-setup early in the job | |
shell: 'wrap-container {0}' | |
jobs: | |
tests-stable: | |
name: "Tests, stable toolchain" | |
runs-on: ubuntu-latest | |
strategy: | |
# Keep x86_64 jobs alive if s390x jobs fail | |
fail-fast: false | |
matrix: | |
arch: | |
- x86_64 | |
- s390x | |
steps: | |
- name: Check out repository | |
uses: actions/checkout@v3 | |
- name: Set up environment | |
run: .github/workflows/env-setup | |
shell: bash | |
env: | |
ARCH: ${{ matrix.arch }} | |
TOOLCHAIN: stable | |
- name: Cache build artifacts | |
uses: Swatinem/rust-cache@v2 | |
with: | |
# rust-cache creates a separate cache key for each job definition, | |
# but bases it on the Rust version in the host, not the container. | |
# Specify additional fields not implied by the job name. | |
key: ${{ matrix.arch }} | |
- name: Install dependencies | |
run: dnf install -y gcc git-core libzstd-devel openssl-devel cpio diffutils jq xz gpg | |
- name: Configure cargo | |
run: | | |
# Avoid OOM on emulated s390x | |
# https://github.com/rust-lang/cargo/issues/10583 | |
mkdir -p .cargo | |
cat >> .cargo/config.toml <<EOF | |
[net] | |
git-fetch-with-cli = true | |
EOF | |
- name: cargo build | |
run: cargo build --all-targets | |
- name: cargo test | |
run: cargo test --all-targets | |
- name: cargo build (rdcore) | |
run: cargo build --all-targets --features rdcore | |
- name: cargo test (rdcore) | |
run: cargo test --all-targets --features rdcore | |
- name: Image tests | |
if: ${{ matrix.arch == 'x86_64' }} | |
run: tests/images.sh | |
tests-msrv: | |
name: "Tests, minimum supported toolchain" | |
runs-on: ubuntu-latest | |
strategy: | |
# Keep x86_64 jobs alive if s390x jobs fail | |
fail-fast: false | |
matrix: | |
arch: | |
- x86_64 | |
- s390x | |
steps: | |
- name: Check out repository | |
uses: actions/checkout@v3 | |
- name: Detect crate MSRV | |
shell: bash | |
run: | | |
msrv=$(cargo metadata --format-version 1 --no-deps | \ | |
jq -r '.packages | .[].rust_version') | |
echo "Crate MSRV: $msrv" | |
echo "MSRV=$msrv" >> $GITHUB_ENV | |
- name: Set up environment | |
run: .github/workflows/env-setup | |
shell: bash | |
env: | |
ARCH: ${{ matrix.arch }} | |
TOOLCHAIN: ${{ env.MSRV }} | |
- name: Cache build artifacts | |
uses: Swatinem/rust-cache@v2 | |
with: | |
# rust-cache creates a separate cache key for each job definition, | |
# but bases it on the Rust version in the host, not the container. | |
# Specify additional fields not implied by the job name, plus the | |
# numeric MSRV as an optimization to ignore the old cache after the | |
# MSRV changes. | |
key: ${{ matrix.arch }}-${{ env.MSRV }} | |
- name: Install dependencies | |
run: dnf install -y gcc git-core libzstd-devel openssl-devel cpio diffutils jq xz gpg | |
- name: Configure cargo | |
run: | | |
# Avoid OOM on emulated s390x | |
# https://github.com/rust-lang/cargo/issues/10583 | |
mkdir -p .cargo | |
cat >> .cargo/config.toml <<EOF | |
[net] | |
git-fetch-with-cli = true | |
EOF | |
- name: cargo build | |
run: cargo build --all-targets | |
- name: cargo test | |
run: cargo test --all-targets | |
- name: cargo build (rdcore) | |
run: cargo build --all-targets --features rdcore | |
- name: cargo test (rdcore) | |
run: cargo test --all-targets --features rdcore | |
- name: Image tests | |
if: ${{ matrix.arch == 'x86_64' }} | |
run: tests/images.sh | |
lints: | |
name: "Lints, pinned toolchain" | |
runs-on: ubuntu-latest | |
strategy: | |
# Keep x86_64 jobs alive if s390x jobs fail | |
fail-fast: false | |
matrix: | |
arch: | |
- x86_64 | |
- s390x | |
steps: | |
- name: Check out repository | |
uses: actions/checkout@v3 | |
- name: Set up environment | |
run: .github/workflows/env-setup | |
shell: bash | |
env: | |
ARCH: ${{ matrix.arch }} | |
TOOLCHAIN: ${{ env.ACTIONS_LINTS_TOOLCHAIN }} | |
COMPONENTS: rustfmt,clippy | |
- name: Cache build artifacts | |
uses: Swatinem/rust-cache@v2 | |
with: | |
# rust-cache creates a separate cache key for each job definition, | |
# but bases it on the Rust version in the host, not the container. | |
# Specify additional fields not implied by the job name, plus the | |
# numeric version as an optimization to ignore the old cache after | |
# the lint toolchain changes. | |
key: ${{ matrix.arch }}-${{ env.ACTIONS_LINTS_TOOLCHAIN }} | |
- name: Install dependencies | |
run: dnf install -y gcc git-core libzstd-devel openssl-devel | |
- name: Configure cargo | |
run: | | |
# Avoid OOM on emulated s390x | |
# https://github.com/rust-lang/cargo/issues/10583 | |
mkdir -p .cargo | |
cat >> .cargo/config.toml <<EOF | |
[net] | |
git-fetch-with-cli = true | |
EOF | |
- name: cargo fmt (check) | |
run: cargo fmt -- --check -l | |
- name: cargo clippy (warnings) | |
run: cargo clippy --all-targets -- -D warnings | |
- name: cargo clippy (rdcore, warnings) | |
run: cargo clippy --all-targets --features rdcore -- -D warnings | |
tests-other-channels: | |
name: "Tests, unstable toolchain" | |
runs-on: ubuntu-latest | |
continue-on-error: true | |
strategy: | |
matrix: | |
channel: | |
- "beta" | |
- "nightly" | |
arch: | |
- x86_64 | |
steps: | |
- name: Check out repository | |
uses: actions/checkout@v3 | |
- name: Set up environment | |
run: .github/workflows/env-setup | |
shell: bash | |
env: | |
ARCH: ${{ matrix.arch }} | |
TOOLCHAIN: ${{ matrix.channel }} | |
- name: Cache build artifacts | |
uses: Swatinem/rust-cache@v2 | |
with: | |
# rust-cache creates a separate cache key for each job definition, | |
# but bases it on the Rust version in the host, not the container. | |
# Specify additional fields not implied by the job name. | |
key: ${{ matrix.arch }}-${{ matrix.channel }} | |
- name: Install dependencies | |
run: dnf install -y gcc git-core libzstd-devel openssl-devel cpio diffutils jq xz gpg | |
- name: Configure cargo | |
run: | | |
# Avoid OOM on emulated s390x | |
# https://github.com/rust-lang/cargo/issues/10583 | |
mkdir -p .cargo | |
cat >> .cargo/config.toml <<EOF | |
[net] | |
git-fetch-with-cli = true | |
EOF | |
- name: cargo build | |
run: cargo build --all-targets | |
- name: cargo test | |
run: cargo test --all-targets | |
- name: cargo build (rdcore) | |
run: cargo build --all-targets --features rdcore | |
- name: cargo test (rdcore) | |
run: cargo test --all-targets --features rdcore | |
- name: Image tests | |
if: ${{ matrix.arch == 'x86_64' }} | |
run: tests/images.sh | |
docs: | |
name: "Docs" | |
runs-on: ubuntu-latest | |
steps: | |
- name: Check out repository | |
uses: actions/checkout@v3 | |
- name: Set up environment | |
run: .github/workflows/env-setup | |
shell: bash | |
env: | |
ARCH: x86_64 | |
TOOLCHAIN: stable | |
- name: Cache build artifacts | |
uses: Swatinem/rust-cache@v2 | |
- name: Install dependencies | |
run: dnf install -y gcc git-core libzstd-devel openssl-devel util-linux | |
- name: cargo build | |
run: cargo build | |
- name: Help text line length | |
run: tests/help.sh | |
- name: Config file docs | |
run: tests/docs-config-file.sh | |
- name: Command-line docs | |
run: | | |
rm man/*.8 | |
make docs | |
if [ -n "$(git status --porcelain data docs man)" ]; then | |
echo "Found local changes after regenerating docs:" | |
git --no-pager diff --color=always docs man | |
echo "Rerun 'make docs'." | |
exit 1 | |
fi |