212 lines
6.1 KiB
YAML
212 lines
6.1 KiB
YAML
name: CI
|
|
|
|
on:
|
|
pull_request:
|
|
branches:
|
|
- master
|
|
push:
|
|
branches:
|
|
- master
|
|
schedule:
|
|
- cron: '0 2 * * 0'
|
|
|
|
env:
|
|
RUSTFLAGS: -Dwarnings
|
|
RUST_BACKTRACE: 1
|
|
nightly: nightly-2024-09-15
|
|
|
|
defaults:
|
|
run:
|
|
shell: bash
|
|
|
|
jobs:
|
|
# Check formatting
|
|
rustfmt:
|
|
name: rustfmt
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Install Rust
|
|
run: rustup update stable
|
|
- name: Check formatting
|
|
run: cargo fmt --all --check
|
|
|
|
# TODO
|
|
# # Apply clippy lints
|
|
# clippy:
|
|
# name: clippy
|
|
# runs-on: ubuntu-latest
|
|
# steps:
|
|
# - uses: actions/checkout@v4
|
|
# - name: Apply clippy lints
|
|
# run: cargo clippy --all-features
|
|
|
|
# This represents the minimum Rust version supported by
|
|
# Bytes. Updating this should be done in a dedicated PR.
|
|
#
|
|
# Tests are not run as tests may require newer versions of
|
|
# rust.
|
|
minrust:
|
|
name: minrust
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Install cargo-hack
|
|
uses: taiki-e/install-action@cargo-hack
|
|
- name: Check
|
|
run: cargo hack check --feature-powerset --optional-deps --rust-version
|
|
|
|
# Stable
|
|
stable:
|
|
name: stable
|
|
strategy:
|
|
matrix:
|
|
os:
|
|
- ubuntu-latest
|
|
- ubuntu-22.04-arm # TODO: update to 24.04 when https://github.com/rust-lang/rust/issues/135867 solved
|
|
- macos-latest
|
|
- windows-latest
|
|
runs-on: ${{ matrix.os }}
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Install Rust
|
|
# --no-self-update is necessary because the windows environment cannot self-update rustup.exe.
|
|
run: rustup update stable --no-self-update
|
|
- name: Install cargo-hack
|
|
uses: taiki-e/install-action@cargo-hack
|
|
- name: Test
|
|
run: ci/test-stable.sh test
|
|
|
|
# Nightly
|
|
nightly:
|
|
name: nightly
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Install Rust
|
|
run: rustup update $nightly && rustup default $nightly
|
|
- name: Install cargo-hack
|
|
uses: taiki-e/install-action@cargo-hack
|
|
- name: Test
|
|
run: ci/test-stable.sh test
|
|
|
|
panic-abort:
|
|
name: panic=abort tests
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Install Rust
|
|
run: rustup update $nightly && rustup default $nightly
|
|
- name: Run tests with -Cpanic=abort
|
|
run: ci/panic-abort.sh
|
|
|
|
# Run tests on some extra platforms
|
|
cross:
|
|
name: cross
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- target: i686-unknown-linux-gnu
|
|
os: ubuntu-latest
|
|
- target: armv7-unknown-linux-gnueabihf
|
|
os: ubuntu-22.04-arm # TODO: update to 24.04 when https://github.com/rust-lang/rust/issues/135867 solved
|
|
- target: powerpc-unknown-linux-gnu
|
|
os: ubuntu-latest
|
|
- target: powerpc64-unknown-linux-gnu
|
|
os: ubuntu-latest
|
|
- target: wasm32-wasip1
|
|
os: ubuntu-latest
|
|
runs-on: ${{ matrix.os }}
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Install Rust
|
|
run: rustup update stable
|
|
- uses: taiki-e/setup-cross-toolchain-action@v1
|
|
with:
|
|
target: ${{ matrix.target }}
|
|
- name: Test
|
|
run: cargo test --target ${{ matrix.target }}
|
|
|
|
# Build for no_std environment.
|
|
no-std:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Install Rust
|
|
run: rustup update stable
|
|
- name: Install cargo-hack
|
|
uses: taiki-e/install-action@cargo-hack
|
|
# thumbv6m-none-eabi supports atomic, but not atomic CAS.
|
|
# thumbv7m-none-eabi supports atomic CAS.
|
|
- run: rustup target add thumbv6m-none-eabi thumbv7m-none-eabi
|
|
# * --optional-deps is needed for serde feature
|
|
# * --no-dev-deps is needed to avoid https://github.com/rust-lang/cargo/issues/4866
|
|
- run: cargo hack build --target thumbv7m-none-eabi --feature-powerset --skip std,default --optional-deps --no-dev-deps
|
|
# A sound way to provide atomic CAS on platforms without native atomic CAS is system-dependent.
|
|
# portable-atomic provides major ways via cfgs and accepts user-defined implementations via critical-section feature.
|
|
- run: cargo hack build --target thumbv6m-none-eabi --feature-powerset --skip std,default --optional-deps --no-dev-deps --features extra-platforms,extra-platforms/critical-section
|
|
|
|
# Sanitizers
|
|
tsan:
|
|
name: tsan
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Install Rust
|
|
run: rustup update $nightly && rustup default $nightly
|
|
- name: Install rust-src
|
|
run: rustup component add rust-src
|
|
- name: ASAN / TSAN
|
|
run: ci/tsan.sh
|
|
|
|
miri:
|
|
name: miri
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Install Rust
|
|
run: rustup update $nightly && rustup default $nightly
|
|
- name: Miri
|
|
run: ci/miri.sh
|
|
|
|
# Loom
|
|
loom:
|
|
name: loom
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Install Rust
|
|
run: rustup update $nightly && rustup default $nightly
|
|
- name: Loom tests
|
|
run: RUSTFLAGS="--cfg loom -Dwarnings" cargo test --lib
|
|
|
|
publish_docs:
|
|
name: Publish Documentation
|
|
needs:
|
|
- rustfmt
|
|
# - clippy
|
|
- stable
|
|
- nightly
|
|
- minrust
|
|
- cross
|
|
- tsan
|
|
- miri
|
|
- loom
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Install Rust
|
|
run: rustup update $nightly && rustup default $nightly
|
|
- name: Build documentation
|
|
run: cargo doc --no-deps --all-features
|
|
env:
|
|
RUSTDOCFLAGS: --cfg docsrs
|
|
- name: Publish documentation
|
|
run: |
|
|
cd target/doc
|
|
git init
|
|
git add .
|
|
git -c user.name='ci' -c user.email='ci' commit -m 'Deploy Bytes API documentation'
|
|
git push -f -q https://git:${{ secrets.github_token }}@github.com/${{ github.repository }} HEAD:gh-pages
|
|
if: github.event_name == 'push' && github.event.ref == 'refs/heads/master' && github.repository == 'tokio-rs/bytes'
|