ci #591
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: | |
pull_request: | |
push: | |
branches: | |
- dev | |
- main | |
schedule: | |
- cron: '00 01 * * *' | |
# The section is needed to drop write-all permissions that are granted on | |
# `schedule` event. By specifying any permission explicitly all others are set | |
# to none. By using the principle of least privilege the damage a compromised | |
# workflow can do (because of an injection or compromised third party tool or | |
# action) is restricted. Currently the worklow doesn't need any additional | |
# permission except for pulling the code. Adding labels to issues, commenting | |
# on pull-requests, etc. may need additional permissions: | |
# | |
# Syntax for this section: | |
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#permissions | |
# | |
# Reference for how to assign permissions on a job-by-job basis: | |
# https://docs.github.com/en/actions/using-jobs/assigning-permissions-to-jobs | |
# | |
# Reference for available permissions that we can enable if needed: | |
# https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token | |
permissions: | |
# to fetch code (actions/checkout) | |
contents: read | |
jobs: | |
test: | |
name: Tests | |
env: | |
# For some builds, we use cross to test on 32-bit and big-endian | |
# systems. | |
CARGO: cargo | |
# When CARGO is set to CROSS, this is set to `--target matrix.target`. | |
# Note that we only use cross on Linux, so setting a target on a | |
# different OS will just use normal cargo. | |
TARGET_FLAGS: | |
# When CARGO is set to CROSS, TARGET_DIR includes matrix.target. | |
TARGET_DIR: ./target | |
# Pin cross to avoid breaking CI. Bump this periodically. | |
CROSS_VERSION: v0.2.5 | |
# Emit backtraces on panics. | |
RUST_BACKTRACE: 1 | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- build: pinned | |
os: ubuntu-latest | |
rust: 1.74.0 | |
- build: stable | |
os: ubuntu-latest | |
rust: stable | |
- build: beta | |
os: ubuntu-latest | |
rust: beta | |
- build: nightly | |
os: ubuntu-latest | |
rust: nightly | |
- build: stable-musl | |
os: ubuntu-latest | |
rust: stable | |
target: x86_64-unknown-linux-musl | |
- build: stable-x86 | |
os: ubuntu-latest | |
rust: stable | |
target: i686-unknown-linux-gnu | |
- build: stable-aarch64 | |
os: ubuntu-latest | |
rust: stable | |
target: aarch64-unknown-linux-gnu | |
- build: stable-arm-musleabihf | |
os: ubuntu-latest | |
rust: stable | |
target: armv7-unknown-linux-musleabihf | |
- build: stable-arm-musleabi | |
os: ubuntu-latest | |
rust: stable | |
target: armv7-unknown-linux-musleabi | |
- build: stable-powerpc64 | |
os: ubuntu-latest | |
rust: stable | |
target: powerpc64-unknown-linux-gnu | |
- build: stable-s390x | |
os: ubuntu-latest | |
rust: stable | |
target: s390x-unknown-linux-gnu | |
- build: macos | |
os: macos-latest | |
rust: nightly | |
- build: win-msvc | |
os: windows-2022 | |
rust: nightly | |
- build: win-gnu | |
os: windows-2022 | |
rust: nightly-x86_64-gnu | |
steps: | |
- name: Cancel previous runs | |
uses: styfle/cancel-workflow-action@0.12.1 | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Install packages | |
if: matrix.os == 'ubuntu-latest' | |
run: sudo apt install git musl-tools rsync zsh | |
- name: Install rust | |
uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: ${{ matrix.rust }} | |
- name: Installa and enable cross | |
if: matrix.os == 'ubuntu-latest' && matrix.target != '' | |
run: | | |
# Use pre-compiled cross releases because cross has over 100 dependencies and | |
# takes a while to compile. | |
dir="$RUNNER_TEMP/cross-download" | |
mkdir "$dir" | |
echo "$dir" >> $GITHUB_PATH | |
cd "$dir" | |
curl -LO "https://github.com/cross-rs/cross/releases/download/$CROSS_VERSION/cross-x86_64-unknown-linux-musl.tar.gz" | |
tar xf cross-x86_64-unknown-linux-musl.tar.gz | |
echo "CARGO=cross" >> $GITHUB_ENV | |
echo "TARGET_FLAGS=--target ${{ matrix.target }}" >> $GITHUB_ENV | |
echo "TARGET_DIR=./target/${{ matrix.target }}" >> $GITHUB_ENV | |
- name: Show command used for cargo | |
run: | | |
echo "cargo command is: ${{ env.CARGO }}" | |
echo "target flag is: ${{ env.TARGET_FLAGS }}" | |
echo "target dir is: ${{ env.TARGET_DIR }}" | |
- name: Build all crates | |
run: ${{ env.CARGO }} build --verbose --workspace ${{ env.TARGET_FLAGS }} | |
- name: Show build.rs stderr | |
shell: bash | |
run: | | |
set +x | |
stderr="$(find "${{ env.TARGET_DIR }}/debug" -name stderr -print0 | xargs -0 ls -t | head -n1)" | |
if test -s "$stderr" | |
then | |
echo "===== $stderr ===== " | |
cat "$stderr" | |
echo "=====" | |
fi | |
set -x | |
- name: Show git version | |
run: git version | |
- name: Configure git for tests | |
run: | | |
git config --global init.defaultBranch main | |
git config --global user.email garden-tools@crates.io | |
git config --global user.name Garden | |
- name: Run tests with cross | |
if: matrix.target != '' | |
run: ${{ env.CARGO }} test --verbose --workspace ${{ env.TARGET_FLAGS }} | |
check: | |
name: Checks | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Install rust | |
uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: stable | |
components: rustfmt clippy | |
- name: Install cargo tools | |
run: | | |
- name: Install garden | |
run: cargo install garden-tools | |
- name: Run format checks | |
run: garden -vv check/fmt | |
- name: Run clippy checks | |
run: garden -vv check/clippy | |
- name: Audit dependencies | |
run: | | |
cargo install cargo-audit | |
garden -vv check/audit | |
- name: Audit licenses | |
run: | | |
cargo install cargo-deny | |
garden -vv check/deny | |
docs: | |
name: Documentation | |
runs-on: ubuntu-latest | |
steps: | |
- name: Cancel previous runs | |
uses: styfle/cancel-workflow-action@0.12.1 | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Install rust | |
uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: stable | |
- name: Install mdbook | |
run: | | |
version=v0.4.40 | |
curl -sSL https://github.com/rust-lang/mdBook/releases/download/${version}/mdbook-${version}-x86_64-unknown-linux-gnu.tar.gz | | |
tar -xz --directory=${HOME}/.cargo/bin | |
- name: Install garden | |
run: cargo install garden-tools | |
- name: Build documentation | |
run: garden -vv doc |