Skip to content

Fix issue #83: thingbuf hangs when buffer is full #84

Fix issue #83: thingbuf hangs when buffer is full

Fix issue #83: thingbuf hangs when buffer is full #84

Workflow file for this run

on:
pull_request:
workflow_dispatch:
push:
branches: ["main"]
env:
# disable incremental compilation.
#
# incremental compilation is useful as part of an edit-build-test-edit cycle,
# as it lets the compiler avoid recompiling code that hasn't changed. however,
# on CI, we're not making small edits; we're almost always building the entire
# project from scratch. thus, incremental compilation on CI actually
# introduces *additional* overhead to support making future builds
# faster...but no future builds will ever occur in any given CI environment.
#
# see https://matklad.github.io/2021/09/04/fast-rust-builds.html#ci-workflow
# for details.
CARGO_INCREMENTAL: 0
# allow more retries for network requests in cargo (downloading crates) and
# rustup (installing toolchains). this should help to reduce flaky CI failures
# from transient network timeouts or other issues.
CARGO_NET_RETRY: 10
RUSTUP_MAX_RETRIES: 10
# don't emit giant backtraces in the CI logs.
RUST_BACKTRACE: short
RUSTFLAGS: -Dwarnings
msrv: 1.57.0
LOOM_LOG: 'thingbuf=trace,debug'
name: CI
jobs:
changed_paths:
continue-on-error: true
runs-on: ubuntu-latest
outputs:
should_skip: ${{ steps.skip_check.outputs.should_skip }}
steps:
- id: skip_check
uses: fkirc/skip-duplicate-actions@master
with:
do_not_skip: '["workflow_dispatch", "push"]'
paths: '["**/*.rs", "**/Cargo.toml", ".github/workflows/ci.yml"]'
build_no_std:
name: Check no_std
needs: changed_paths
if: needs.changed_paths.outputs.should_skip != 'true'
strategy:
matrix:
feature: [alloc, static]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Install toolchain
uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
override: true
components: rustfmt
- uses: actions-rs/cargo@v1
with:
command: check
args: --no-default-features --features ${{ matrix.feature }}
tests:
name: Tests
needs: changed_paths
if: needs.changed_paths.outputs.should_skip != 'true'
strategy:
matrix:
# test all Rust versions on Ubuntu
rust: [stable]
os: [ubuntu-latest]
# test stable Rust on Windows and MacOS as well
include:
- rust: stable
os: windows-latest
- rust: stable
os: macos-latest
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v2
- name: Install toolchain
uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: ${{ matrix.rust }}
override: true
components: rustfmt
- name: Run cargo test (with static APIs)
if: ${{ matrix.rust != env.msrv }}
uses: actions-rs/cargo@v1
with:
command: test
args: --all-features
- name: Run cargo test (no static APIs)
if: ${{ matrix.rust == env.msrv }}
uses: actions-rs/cargo@v1
with:
command: test
# skip doctests, which require all features to be enabled
args: --lib --tests
benches:
name: Compile benchmarks
needs: changed_paths
if: needs.changed_paths.outputs.should_skip != 'true'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Install stable toolchain
uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
override: true
components: rustfmt
- name: Run cargo check
uses: actions-rs/cargo@v1
with:
command: check
args: -p bench --benches
rustfmt:
runs-on: ubuntu-latest
needs: changed_paths
if: needs.changed_paths.outputs.should_skip != 'true'
steps:
- uses: actions/checkout@v2
- name: Install stable toolchain
uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
override: true
components: rustfmt
- name: Run cargo fmt
uses: actions-rs/cargo@v1
with:
command: fmt
args: --all -- --check
clippy_check:
name: Clippy check
needs: changed_paths
if: needs.changed_paths.outputs.should_skip != 'true'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Install stable toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: stable
components: clippy
override: true
- uses: actions-rs/clippy-check@v1
with:
token: ${{ secrets.GITHUB_TOKEN }}
# Run particularly slow loom models individually
slow_models:
needs: changed_paths
if: needs.changed_paths.outputs.should_skip != 'true'
strategy:
matrix:
model:
- mpsc_send_recv_wrap
- mpsc_try_send_recv
- mpsc_try_recv_ref
- mpsc_test_skip_slot
- mpsc_async::rx_close_unconsumed
- mpsc_blocking::rx_close_unconsumed
name: model '${{ matrix.model }}''
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Install stable toolchain
uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
override: true
- name: Run model
run: cargo test --profile loom --lib -- ${{ matrix.model }}
env:
# it would be nice to run these with more preemptions, but
# that makes these models super slow...and LOOM_MAX_PREEMPTIONS=1 is
# good enough for Tokio's CI, so...
LOOM_MAX_PREEMPTIONS: 1
RUSTFLAGS: "--cfg loom"
# Run other loom models by scope
models:
needs: changed_paths
if: needs.changed_paths.outputs.should_skip != 'true'
strategy:
matrix:
scope:
# NOTE: if adding loom models in a new module, that module needs to be
# added to this list!
- mpsc_blocking
- mpsc_async
- thingbuf
- util
name: models in '${{ matrix.scope }}'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Install stable toolchain
uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
override: true
- name: Run models
run: cargo test --profile loom --lib -- ${{ matrix.scope }}
env:
LOOM_MAX_PREEMPTIONS: 2
# `--cfg ci_skip_slow_models` will exclude the loom models that are
# tested in `slow-models`.
RUSTFLAGS: "--cfg loom --cfg ci_skip_slow_models"
# Dummy job that requires all loom models to pass
all_models:
name: all loom models
runs-on: ubuntu-latest
needs:
- slow_models
- models
steps:
- run: exit 0
miri:
name: Miri tests
needs: changed_paths
if: needs.changed_paths.outputs.should_skip != 'true'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Install nightly toolchain
uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: nightly
override: true
components: miri
- name: Run Miri tests
run: cargo miri test --lib --no-fail-fast
env:
MIRIFLAGS: -Zmiri-disable-isolation