name: CI on: push: branches: - "v0.1.x" pull_request: {} 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 jobs: ### check jobs ### check: # Run `cargo check` first to ensure that the pushed code at least compiles. name: cargo check runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: dtolnay/rust-toolchain@stable - name: Check run: cargo check --all --tests --benches style: # Check style. name: cargo fmt needs: check runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: dtolnay/rust-toolchain@stable with: components: rustfmt - name: rustfmt run: cargo fmt --all -- --check warnings: # Check for any warnings. This is informational and thus is allowed to fail. runs-on: ubuntu-latest needs: check steps: - uses: actions/checkout@v3 - uses: dtolnay/rust-toolchain@stable with: components: clippy - name: Clippy uses: actions-rs/clippy-check@v1 with: token: ${{ secrets.GITHUB_TOKEN }} args: --all --examples --tests --benches -- -D warnings cargo-hack: needs: check name: cargo check (feature combinations) runs-on: ubuntu-latest strategy: matrix: # cargo hack --feature-powerset will have a significant permutation # number, we can't just use --all as it increases the runtime # further than what we would like to subcrate: - tracing-attributes - tracing-core - tracing-futures - tracing-log - tracing-macros - tracing-serde - tracing-tower - tracing - tracing-subscriber steps: - uses: actions/checkout@v3 - uses: dtolnay/rust-toolchain@stable - name: install cargo-hack uses: taiki-e/install-action@cargo-hack - name: cargo hack check working-directory: ${{ matrix.subcrate }} # tracing and tracing-subscriber have too many features to be checked by # cargo-hack --feature-powerset with all features in the powerset, so # exclude some run: | CARGO_HACK=(cargo hack check --feature-powerset --no-dev-deps) case "${{ matrix.subcrate }}" in tracing) EXCLUDE_FEATURES=( max_level_off max_level_error max_level_warn max_level_info max_level_debug max_level_trace release_max_level_off release_max_level_error release_max_level_warn release_max_level_info release_max_level_debug release_max_level_trace ) ${CARGO_HACK[@]} --exclude-features "${EXCLUDE_FEATURES[*]}" ;; tracing-subscriber) INCLUDE_FEATURES=(fmt ansi json registry env-filter) ${CARGO_HACK[@]} --include-features "${INCLUDE_FEATURES[*]}" ;; *) ${CARGO_HACK[@]} ;; esac shell: bash check-msrv: # Run `cargo check` on our minimum supported Rust version (1.63.0). This # checks with minimal versions; maximal versions are checked above. name: "cargo check (+MSRV -Zminimal-versions)" needs: check runs-on: ubuntu-latest strategy: matrix: # cargo hack --feature-powerset will have a significant permutation # number, we can't just use --all as it increases the runtime # further than what we would like to subcrate: - tracing-appender - tracing-attributes - tracing-core - tracing-futures - tracing-log - tracing-macros - tracing-serde - tracing-subscriber - tracing-tower - tracing toolchain: - 1.63.0 - stable steps: - uses: actions/checkout@v3 - name: install Rust nightly uses: dtolnay/rust-toolchain@nightly - name: "install Rust ${{ matrix.toolchain }}" uses: dtolnay/rust-toolchain@master with: toolchain: ${{ matrix.toolchain }} - name: install cargo-hack uses: taiki-e/install-action@cargo-hack - name: install cargo-minimal-versions uses: taiki-e/install-action@cargo-minimal-versions - name: cargo minimal-versions check working-directory: ${{ matrix.subcrate }} # tracing and tracing-subscriber have too many features to be checked by # cargo-hack --feature-powerset with all features in the powerset, so # exclude some run: | CARGO_MINVER=(cargo minimal-versions check --feature-powerset --no-dev-deps) case "${{ matrix.subcrate }}" in tracing) EXCLUDE_FEATURES=( max_level_off max_level_error max_level_warn max_level_info max_level_debug max_level_trace release_max_level_off release_max_level_error release_max_level_warn release_max_level_info release_max_level_debug release_max_level_trace ) ${CARGO_MINVER[@]} --exclude-features "${EXCLUDE_FEATURES[*]}" ;; tracing-subscriber) INCLUDE_FEATURES=(fmt ansi json registry env-filter) ${CARGO_MINVER[@]} --include-features "${INCLUDE_FEATURES[*]}" ;; tracing-futures) EXCLUDE_FEATURES=(futures-01 futures_01 tokio tokio_01) ${CARGO_MINVER[@]} --exclude-features "${EXCLUDE_FEATURES[*]}" ;; *) ${CARGO_MINVER[@]} ;; esac shell: bash ### test jobs ############################################################# test: # Test against stable Rust across macOS, Windows, and Linux, and against # beta and nightly rust on Ubuntu. name: "cargo test (${{ matrix.rust }} on ${{ matrix.os }})" needs: check strategy: matrix: # test all Rust versions on ubuntu-latest os: [ubuntu-latest] rust: [stable, beta, nightly] # test stable Rust on Windows and MacOS as well include: - rust: stable os: windows-latest - rust: stable os: macos-latest fail-fast: false runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v3 - name: "install Rust ${{ matrix.rust }}" uses: dtolnay/rust-toolchain@master with: toolchain: ${{ matrix.rust }} - name: install cargo-nextest uses: taiki-e/install-action@nextest - name: Run tests run: cargo nextest run --profile ci --workspace # TODO(eliza): punt on this for now because the generated JUnit report is # missing some fields that this action needs to give good output. # - name: Publish Test Report # uses: mikepenz/action-junit-report@v3 # if: always() # always run even if the previous step fails # with: # report_paths: 'target/nextest/ci/junit.xml' # check_name: "cargo test (Rust ${{ matrix.rust }} on ${{ matrix.os }})" # check_title_template: "{{SUITE_NAME}}::{{TEST_NAME}}" - name: Run doctests run: cargo test --doc --workspace test-build-wasm: name: build tests (wasm) needs: check runs-on: ubuntu-latest strategy: matrix: # TODO(securityinsanity): slowly add wasm32 test runner to each crate, and move to seperate actions that run tests. subcrate: - tracing-appender - tracing-attributes - tracing-core - tracing-error - tracing-flame - tracing-journald - tracing-log - tracing-macros - tracing-serde - tracing-subscriber - tracing-tower fail-fast: false steps: - uses: actions/checkout@v3 - uses: dtolnay/rust-toolchain@stable with: target: wasm32-unknown-unknown - name: build all tests run: cargo test --no-run -p ${{ matrix.subcrate }} test-wasm: name: cargo test (wasm) needs: check runs-on: ubuntu-latest strategy: matrix: subcrate: - tracing steps: - uses: actions/checkout@v3 - uses: dtolnay/rust-toolchain@stable with: target: wasm32-unknown-unknown - name: install test runner for wasm uses: taiki-e/install-action@wasm-pack - name: run wasm tests run: cd ${{ matrix.subcrate }} && wasm-pack test --node test-features-stable: # Feature flag tests that run on stable Rust. name: cargo test (feature-specific) needs: check runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: dtolnay/rust-toolchain@stable - name: "Test log support" run: cargo test - name: "Test static max level" run: cargo test working-directory: "tracing/test_static_max_level_features" - name: "Test static max level (release)" run: cargo test --release working-directory: "tracing/test_static_max_level_features" - name: "Test tracing-core no-std support" run: cargo test --no-default-features - name: "Test tracing no-std support" run: cargo test --no-default-features # this skips running doctests under the `--no-default-features` flag, # as rustdoc isn't aware of cargo's feature flags. - name: "Test tracing-subscriber with all features disabled" run: cargo test --lib --tests --no-default-features # all required checks except for the main test run (which we only require # specific matrix combinations from) all_required: name: "all systems go!" runs-on: ubuntu-latest needs: - style - cargo-hack - check-msrv - test-build-wasm - test-wasm - test-features-stable steps: - run: exit 0