mirror of
https://github.com/tokio-rs/tokio.git
synced 2026-08-29 00:00:11 +02:00
When backporting patches to LTS branches, we often run into CI failures due to changes in rust. Newer rust versions add more lints, which break CI. We really don't want to also have to backport patches that fix CI, so instead, LTS branches should pin the stable rust version in CI (e.g. #4434). This PR restructures the CI config files to make it a bit easier to set a specific rust version in CI.
365 lines
11 KiB
YAML
365 lines
11 KiB
YAML
on:
|
|
push:
|
|
branches: ["master", "tokio-*.x"]
|
|
pull_request:
|
|
branches: ["master", "tokio-*.x"]
|
|
|
|
name: CI
|
|
|
|
env:
|
|
RUSTFLAGS: -Dwarnings
|
|
RUST_BACKTRACE: 1
|
|
nightly: nightly-2021-10-25
|
|
# Change to specific Rust release to pin
|
|
rust_stable: 1.56.0
|
|
rust_nightly: nightly-2021-10-25
|
|
rust_clippy: 1.52.0
|
|
rust_min: 1.45.2
|
|
|
|
defaults:
|
|
run:
|
|
shell: bash
|
|
|
|
jobs:
|
|
# Depends on all action sthat are required for a "successful" CI run.
|
|
tests-pass:
|
|
name: all systems go
|
|
runs-on: ubuntu-latest
|
|
needs:
|
|
- test
|
|
- test-unstable
|
|
- miri
|
|
- cross
|
|
- features
|
|
- minrust
|
|
- fmt
|
|
- clippy
|
|
- docs
|
|
- valgrind
|
|
- loom-compile
|
|
- check-readme
|
|
steps:
|
|
- run: exit 0
|
|
|
|
test:
|
|
name: test tokio full
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
matrix:
|
|
os:
|
|
- windows-latest
|
|
- ubuntu-latest
|
|
- macos-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: Install Rust ${{ env.rust_stable }}
|
|
uses: actions-rs/toolchain@v1
|
|
with:
|
|
toolchain: ${{ env.rust_stable }}
|
|
override: true
|
|
- name: Install Rust
|
|
run: rustup update stable
|
|
- uses: Swatinem/rust-cache@v1
|
|
- name: Install cargo-hack
|
|
run: cargo install cargo-hack
|
|
|
|
# Run `tokio` with `full` features. This excludes testing utilities which
|
|
# can alter the runtime behavior of Tokio.
|
|
- name: test tokio full
|
|
run: cargo test --features full
|
|
working-directory: tokio
|
|
|
|
# Test **all** crates in the workspace with all features.
|
|
- name: test all --all-features
|
|
run: cargo test --workspace --all-features
|
|
|
|
# Run integration tests for each feature
|
|
- name: test tests-integration --each-feature
|
|
run: cargo hack test --each-feature
|
|
working-directory: tests-integration
|
|
|
|
# Run macro build tests
|
|
- name: test tests-build --each-feature
|
|
run: cargo hack test --each-feature
|
|
working-directory: tests-build
|
|
|
|
# Build benchmarks. Run of benchmarks is done by bench.yml workflow.
|
|
- name: build benches
|
|
run: cargo build --benches
|
|
working-directory: benches
|
|
# bench.yml workflow runs benchmarks only on linux.
|
|
if: startsWith(matrix.os, 'ubuntu')
|
|
|
|
valgrind:
|
|
name: valgrind
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: Install Rust ${{ env.rust_stable }}
|
|
uses: actions-rs/toolchain@v1
|
|
with:
|
|
toolchain: ${{ env.rust_stable }}
|
|
override: true
|
|
- uses: Swatinem/rust-cache@v1
|
|
|
|
- name: Install Valgrind
|
|
run: |
|
|
sudo apt-get update -y
|
|
sudo apt-get install -y valgrind
|
|
|
|
# Compile tests
|
|
- name: cargo build test-mem
|
|
run: cargo build --features rt-net --bin test-mem
|
|
working-directory: tests-integration
|
|
|
|
# Run with valgrind
|
|
- name: Run valgrind test-mem
|
|
run: valgrind --error-exitcode=1 --leak-check=full --show-leak-kinds=all ./target/debug/test-mem
|
|
|
|
# Compile tests
|
|
- name: cargo build test-process-signal
|
|
run: cargo build --features rt-process-signal --bin test-process-signal
|
|
working-directory: tests-integration
|
|
|
|
# Run with valgrind
|
|
- name: Run valgrind test-process-signal
|
|
run: valgrind --error-exitcode=1 --leak-check=full --show-leak-kinds=all ./target/debug/test-process-signal
|
|
|
|
test-unstable:
|
|
name: test tokio full --unstable
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
matrix:
|
|
os:
|
|
- windows-latest
|
|
- ubuntu-latest
|
|
- macos-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: Install Rust ${{ env.rust_stable }}
|
|
uses: actions-rs/toolchain@v1
|
|
with:
|
|
toolchain: ${{ env.rust_stable }}
|
|
override: true
|
|
- uses: Swatinem/rust-cache@v1
|
|
# Run `tokio` with "unstable" cfg flag.
|
|
- name: test tokio full --cfg unstable
|
|
run: cargo test --all-features
|
|
working-directory: tokio
|
|
env:
|
|
RUSTFLAGS: --cfg tokio_unstable -Dwarnings
|
|
|
|
miri:
|
|
name: miri
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: Install Rust ${{ env.rust_nightly }}
|
|
uses: actions-rs/toolchain@v1
|
|
with:
|
|
toolchain: ${{ env.rust_nightly }}
|
|
components: miri
|
|
override: true
|
|
- uses: Swatinem/rust-cache@v1
|
|
- name: miri
|
|
run: |
|
|
set -e
|
|
rm -rf tests
|
|
cargo miri test --features rt,rt-multi-thread,sync task
|
|
working-directory: tokio
|
|
|
|
san:
|
|
name: san
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: Install Rust ${{ env.rust_nightly }}
|
|
uses: actions-rs/toolchain@v1
|
|
with:
|
|
toolchain: ${{ env.rust_nightly }}
|
|
override: true
|
|
- uses: Swatinem/rust-cache@v1
|
|
- name: asan
|
|
run: cargo test --all-features --target x86_64-unknown-linux-gnu --lib -- --test-threads 1
|
|
working-directory: tokio
|
|
env:
|
|
RUSTFLAGS: -Z sanitizer=address
|
|
ASAN_OPTIONS: detect_leaks=0
|
|
|
|
cross:
|
|
name: cross
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
matrix:
|
|
target:
|
|
- i686-unknown-linux-gnu
|
|
- powerpc-unknown-linux-gnu
|
|
- powerpc64-unknown-linux-gnu
|
|
- mips-unknown-linux-gnu
|
|
- arm-linux-androideabi
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: Install Rust ${{ env.rust_stable }}
|
|
uses: actions-rs/toolchain@v1
|
|
with:
|
|
toolchain: ${{ env.rust_stable }}
|
|
target: ${{ matrix.target }}
|
|
override: true
|
|
- uses: Swatinem/rust-cache@v1
|
|
- uses: actions-rs/cargo@v1
|
|
with:
|
|
use-cross: true
|
|
command: check
|
|
args: --workspace --target ${{ matrix.target }}
|
|
|
|
features:
|
|
name: features
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: Install Rust ${{ env.rust_nightly }}
|
|
uses: actions-rs/toolchain@v1
|
|
with:
|
|
toolchain: ${{ env.rust_nightly }}
|
|
target: ${{ matrix.target }}
|
|
override: true
|
|
- uses: Swatinem/rust-cache@v1
|
|
- name: Install cargo-hack
|
|
run: cargo install cargo-hack
|
|
- name: check --each-feature
|
|
run: cargo hack check --all --each-feature -Z avoid-dev-deps
|
|
# Try with unstable feature flags
|
|
- name: check --each-feature --unstable
|
|
run: cargo hack check --all --each-feature -Z avoid-dev-deps
|
|
env:
|
|
RUSTFLAGS: --cfg tokio_unstable -Dwarnings
|
|
|
|
minrust:
|
|
name: minrust
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: Install Rust ${{ env.rust_min }}
|
|
uses: actions-rs/toolchain@v1
|
|
with:
|
|
toolchain: ${{ env.rust_min }}
|
|
override: true
|
|
- uses: Swatinem/rust-cache@v1
|
|
- name: "test --workspace --all-features"
|
|
run: cargo check --workspace --all-features
|
|
|
|
minimal-versions:
|
|
name: minimal-versions
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: Install Rust ${{ env.rust_nightly }}
|
|
uses: actions-rs/toolchain@v1
|
|
with:
|
|
toolchain: ${{ env.rust_nightly }}
|
|
override: true
|
|
- uses: Swatinem/rust-cache@v1
|
|
- name: Install cargo-hack
|
|
run: cargo install cargo-hack
|
|
- name: "check --all-features -Z minimal-versions"
|
|
run: |
|
|
# Remove dev-dependencies from Cargo.toml to prevent the next `cargo update`
|
|
# from determining minimal versions based on dev-dependencies.
|
|
cargo hack --remove-dev-deps --workspace
|
|
# Update Cargo.lock to minimal version dependencies.
|
|
cargo update -Z minimal-versions
|
|
cargo hack check --all-features --ignore-private
|
|
- name: "check --all-features --unstable -Z minimal-versions"
|
|
env:
|
|
RUSTFLAGS: --cfg tokio_unstable -Dwarnings
|
|
run: |
|
|
# Remove dev-dependencies from Cargo.toml to prevent the next `cargo update`
|
|
# from determining minimal versions based on dev-dependencies.
|
|
cargo hack --remove-dev-deps --workspace
|
|
# Update Cargo.lock to minimal version dependencies.
|
|
cargo update -Z minimal-versions
|
|
cargo hack check --all-features --ignore-private
|
|
|
|
fmt:
|
|
name: fmt
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: Install Rust ${{ env.rust_stable }}
|
|
uses: actions-rs/toolchain@v1
|
|
with:
|
|
toolchain: ${{ env.rust_stable }}
|
|
override: true
|
|
components: rustfmt
|
|
- uses: Swatinem/rust-cache@v1
|
|
# Check fmt
|
|
- name: "rustfmt --check"
|
|
# Workaround for rust-lang/cargo#7732
|
|
run: |
|
|
if ! rustfmt --check --edition 2018 $(git ls-files '*.rs'); then
|
|
printf "Please run \`rustfmt --edition 2018 \$(git ls-files '*.rs')\` to fix rustfmt errors.\nSee CONTRIBUTING.md for more details.\n" >&2
|
|
exit 1
|
|
fi
|
|
|
|
clippy:
|
|
name: clippy
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: Install Rust ${{ env.rust_clippy }}
|
|
uses: actions-rs/toolchain@v1
|
|
with:
|
|
toolchain: ${{ env.rust_clippy }}
|
|
override: true
|
|
components: clippy
|
|
- uses: Swatinem/rust-cache@v1
|
|
# Run clippy
|
|
- name: "clippy --all"
|
|
run: cargo clippy --all --tests --all-features
|
|
|
|
docs:
|
|
name: docs
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: Install Rust ${{ env.rust_nightly }}
|
|
uses: actions-rs/toolchain@v1
|
|
with:
|
|
toolchain: ${{ env.rust_nightly }}
|
|
override: true
|
|
- uses: Swatinem/rust-cache@v1
|
|
- name: "doc --lib --all-features"
|
|
run: cargo doc --lib --no-deps --all-features --document-private-items
|
|
env:
|
|
RUSTFLAGS: --cfg docsrs
|
|
RUSTDOCFLAGS: --cfg docsrs -Dwarnings
|
|
|
|
loom-compile:
|
|
name: build loom tests
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: Install Rust ${{ env.rust_stable }}
|
|
uses: actions-rs/toolchain@v1
|
|
with:
|
|
toolchain: ${{ env.rust_stable }}
|
|
override: true
|
|
- uses: Swatinem/rust-cache@v1
|
|
- name: build --cfg loom
|
|
run: cargo test --no-run --lib --features full
|
|
working-directory: tokio
|
|
env:
|
|
RUSTFLAGS: --cfg loom --cfg tokio_unstable -Dwarnings
|
|
|
|
check-readme:
|
|
name: Check README
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: Verify that both READMEs are identical
|
|
run: diff README.md tokio/README.md
|
|
|
|
- name: Verify that Tokio version is up to date in README
|
|
working-directory: tokio
|
|
run: grep -q "$(sed '/^version = /!d' Cargo.toml | head -n1)" README.md
|