This repository has been archived by the owner on Aug 27, 2024. It is now read-only.
Merge pull request #43 from HadrienG2/dependabot/cargo/counter/bytemu… #210
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
# There are two kinds of continuous integration jobs in this project: | |
# | |
# - Every code submission or master push passes continuous integration on the | |
# minimal supported Rust version and the current stable Rust version. | |
# - Two times a month, a scheduled job makes sure that the code remains | |
# compatible and lint-free on upcoming Rust toolchains (beta and nightly). | |
name: Continuous Integration | |
on: | |
push: | |
pull_request: | |
schedule: | |
- cron: '0 0 3/15 * *' | |
# Cancel existing jobs on new pushes to the same branch | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | |
cancel-in-progress: true | |
env: | |
RUSTFLAGS: -D warnings | |
RUSTDOCFLAGS: -D warnings | |
MINIMAL_RUST: 1.70.0 # Minimal Supported Rust Version | |
MDBOOK_VERSION: 0.4.40 | |
jobs: | |
# Workaround for github CI dropping env var expansion in matrix strategy | |
matrix_vars: | |
runs-on: ubuntu-latest | |
outputs: | |
MINIMAL_RUST: ${{ env.MINIMAL_RUST }} | |
steps: | |
- name: Forward env var to output | |
run: echo "MINIMAL_RUST=${{ env.MINIMAL_RUST }}" >> $GITHUB_OUTPUT | |
# Render the book | |
render-book: | |
# Don't run CI twice when a PR is created from a branch internal to the repo | |
# Don't run on a schedule, book doesn't change on its own. | |
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v4 | |
- name: Install mdbook | |
run: | | |
mkdir bin | |
curl -sSL https://github.com/rust-lang/mdBook/releases/download/v${MDBOOK_VERSION}/mdbook-v${MDBOOK_VERSION}-x86_64-unknown-linux-gnu.tar.gz | tar -xz --directory=bin | |
echo "$(pwd)/bin" >> ${GITHUB_PATH} | |
- name: Render the book | |
run: mkdir public && mdbook build -d public | |
- name: Upload the book | |
uses: actions/upload-artifact@v3 | |
with: | |
name: book | |
path: ./public | |
if-no-files-found: error | |
# Format doesn't depend on configuration. Lints don't depend target flags, and | |
# don't depend on the OS as there's no OS-specific code path in this crate. | |
# | |
# We don't care about warnings on the minimum supported Rust version, only | |
# about building and running correctly. | |
format-lints: | |
# Don't run CI twice when a PR is created from a branch internal to the repo | |
if: github.event_name == 'push' || github.event_name == 'schedule' || github.event.pull_request.head.repo.full_name != github.repository | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
working-directory: ./counter | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v4 | |
- uses: awalsh128/cache-apt-pkgs-action@latest | |
with: | |
version: 1.0 | |
packages: libhwloc-dev | |
- name: Set up stable toolchain | |
if: github.event_name != 'schedule' | |
uses: actions-rust-lang/setup-rust-toolchain@v1 | |
with: | |
components: rustfmt,clippy | |
- name: Set up nightly toolchain | |
if: github.event_name == 'schedule' | |
uses: actions-rust-lang/setup-rust-toolchain@v1 | |
with: | |
toolchain: nightly | |
components: rustfmt,clippy | |
- name: Check code formatting | |
run: cargo fmt --all --check | |
- name: Check clippy lints | |
run: cargo clippy --workspace --all-targets -- -D warnings | |
# Run the tests on all supported OSes and Rust versions (main CI) | |
test-contrib: | |
# Don't run CI twice when a PR is created from a branch internal to the repo | |
# Don't run in scheduled jobs, that's what test-scheduled is for | |
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository | |
runs-on: ubuntu-latest | |
needs: matrix_vars | |
strategy: | |
matrix: | |
target-flags: | |
- "" | |
- "-C target-cpu=native" | |
rust: | |
- stable | |
- ${{ needs.matrix_vars.outputs.MINIMAL_RUST }} | |
env: | |
RUSTFLAGS: "-D warnings ${{ matrix.target-flags }}" | |
defaults: | |
run: | |
working-directory: ./counter | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v4 | |
- uses: awalsh128/cache-apt-pkgs-action@latest | |
with: | |
version: 1.0 | |
packages: libhwloc-dev | |
- name: Set up toolchain | |
uses: actions-rust-lang/setup-rust-toolchain@v1 | |
with: | |
toolchain: ${{ matrix.rust }} | |
- name: Run tests | |
run: cargo test | |
- name: Check that benchmarks build | |
run: cargo build --benches | |
deploy-book: | |
# Don't run on a schedule, book doesn't change on its own. | |
# Don't run on pull request events, they don't have permission to deploy | |
if: github.event_name == 'push' && github.ref == 'refs/heads/main' | |
runs-on: ubuntu-latest | |
environment: | |
name: github-pages | |
url: ${{ steps.deployment.outputs.page_url }} | |
needs: ["render-book", "format-lints", "test-contrib"] | |
# Grant GITHUB_TOKEN the permissions required to make a Pages deployment | |
permissions: | |
pages: write # to deploy to Pages | |
id-token: write # to verify the deployment originates from an appropriate source | |
steps: | |
- name: Download the book | |
uses: actions/download-artifact@v3 | |
with: | |
name: book | |
path: . | |
- name: Configure github pages | |
uses: actions/configure-pages@v1 | |
- name: Upload book to github pages | |
uses: actions/upload-pages-artifact@v1 | |
with: | |
path: . | |
- name: Deploy github pages | |
id: deployment | |
uses: actions/deploy-pages@v1 | |
# Check compatibility with newer Rust/deps versions (scheduled CI) | |
# | |
# FIXME: There should be a way to use conditional build matrices without | |
# duplicating the whole job recipe... | |
# | |
test-scheduled: | |
if: github.event_name == 'schedule' | |
runs-on: ubuntu-latest | |
needs: matrix_vars | |
strategy: | |
matrix: | |
rustflags: | |
- "-D warnings" | |
- "-D warnings -C target-cpu=native" | |
rust: | |
- beta | |
- nightly | |
- ${{ needs.matrix_vars.outputs.MINIMAL_RUST }} | |
env: | |
RUSTFLAGS: ${{ matrix.rustflags }} | |
defaults: | |
run: | |
working-directory: ./counter | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v4 | |
- uses: awalsh128/cache-apt-pkgs-action@latest | |
with: | |
version: 1.0 | |
packages: libhwloc-dev | |
- name: Set up toolchain | |
uses: actions-rust-lang/setup-rust-toolchain@v1 | |
with: | |
toolchain: ${{ matrix.rust }} | |
- name: Run tests | |
run: cargo test | |
- name: Check that benchmarks build | |
run: cargo build --benches |