mirror of
https://github.com/tokio-rs/tokio.git
synced 2026-08-18 00:00:09 +02:00
* sync: Implement map methods of parking_lot fame Generally, this mimics the way `MappedRwLock*Guard`s are implemented in `parking_lot`. By storing a raw pointer in the guards themselves referencing the mapped data and maintaining type invariants through `PhantomData`. I didn't try to think too much about this, so if someone has objections I'd love to hear them. I've also dropped the internal use of `ReleasingPermit`, since it made the guards unecessarily large. The number of permits that need to be released are already known by the guards themselves, and is instead governed directly in the relevant `Drop` impls. This has the benefit of making the guards as small as possible, for the non-mapped variants this means a single reference is enough. `fmt::Debug` impls have been adjusted to behave exactly like the delegating impls in `parking_lot`. `fmt::Display` impls have been added for all guard types which behave the same. This does change the format of debug impls, for which I'm not sure if we provide any guarantees.
245 lines
6.2 KiB
YAML
245 lines
6.2 KiB
YAML
on:
|
|
push:
|
|
branches: ["v0.2.x"]
|
|
pull_request:
|
|
branches: ["v0.2.x"]
|
|
|
|
name: CI
|
|
|
|
env:
|
|
RUSTFLAGS: -Dwarnings
|
|
RUST_BACKTRACE: 1
|
|
nightly: nightly-2020-07-12
|
|
minrust: 1.39.0
|
|
|
|
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
|
|
- loom
|
|
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
|
|
run: rustup update stable
|
|
- 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
|
|
|
|
# Check `tokio` with `full + parking_lot` to make sure it compiles.
|
|
- name: check tokio full,parking_lot
|
|
run: cargo check --features full,parking_lot
|
|
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
|
|
|
|
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
|
|
run: rustup update stable
|
|
|
|
# Run `tokio` with "unstable" cfg flag.
|
|
- name: test tokio full --cfg unstable
|
|
run: cargo test --features full
|
|
working-directory: tokio
|
|
env:
|
|
RUSTFLAGS: '--cfg tokio_unstable'
|
|
|
|
miri:
|
|
name: miri
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- uses: actions-rs/toolchain@v1
|
|
with:
|
|
toolchain: ${{ env.nightly }}
|
|
override: true
|
|
- name: Install Miri
|
|
run: |
|
|
set -e
|
|
rustup component add miri
|
|
cargo miri setup
|
|
rm -rf tokio/tests
|
|
|
|
- name: miri
|
|
run: cargo miri test --features rt-core,rt-threaded,rt-util,sync -- -- task
|
|
working-directory: tokio
|
|
|
|
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
|
|
- uses: actions-rs/toolchain@v1
|
|
with:
|
|
toolchain: stable
|
|
target: ${{ matrix.target }}
|
|
override: true
|
|
- 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
|
|
- uses: actions-rs/toolchain@v1
|
|
with:
|
|
toolchain: ${{ env.nightly }}
|
|
override: true
|
|
- 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
|
|
|
|
minrust:
|
|
name: minrust
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- uses: actions-rs/toolchain@v1
|
|
with:
|
|
toolchain: ${{ env.minrust }}
|
|
override: true
|
|
|
|
- name: "test --workspace --all-features"
|
|
run: cargo check --workspace --all-features
|
|
|
|
fmt:
|
|
name: fmt
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: Install Rust
|
|
run: rustup update stable
|
|
- name: Install rustfmt
|
|
run: rustup component add rustfmt
|
|
|
|
# Check fmt
|
|
- name: "rustfmt --check"
|
|
# Workaround for rust-lang/cargo#7732
|
|
run: |
|
|
if ! rustfmt --check --edition 2018 $(find . -name '*.rs' -print); then
|
|
printf "Please run \`rustfmt --edition 2018 \$(find . -name '*.rs' -print)\` 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
|
|
run: rustup update stable
|
|
- name: Install clippy
|
|
run: rustup component add clippy
|
|
|
|
# Run clippy
|
|
- name: "clippy --all"
|
|
run: cargo clippy --all --tests
|
|
|
|
docs:
|
|
name: docs
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- uses: actions-rs/toolchain@v1
|
|
with:
|
|
toolchain: ${{ env.nightly }}
|
|
override: true
|
|
|
|
- name: "doc --lib --all-features"
|
|
run: cargo doc --lib --no-deps --all-features
|
|
env:
|
|
RUSTDOCFLAGS: --cfg docsrs
|
|
|
|
loom:
|
|
name: loom
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
matrix:
|
|
scope:
|
|
- --skip loom_pool
|
|
- loom_pool::group_a
|
|
- loom_pool::group_b
|
|
- loom_pool::group_c
|
|
- loom_pool::group_d
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: Install Rust
|
|
run: rustup update stable
|
|
|
|
- name: loom ${{ matrix.scope }}
|
|
run: cargo test --lib --release --features full -- --nocapture $SCOPE
|
|
working-directory: tokio
|
|
env:
|
|
RUSTFLAGS: --cfg loom --cfg tokio_unstable
|
|
LOOM_MAX_PREEMPTIONS: 2
|
|
SCOPE: ${{ matrix.scope }}
|