slog-bunyan 2.5.0

Bunyan formatter for slog-rs
Documentation
# We use `actions-rs` for most of our actions
#
# This file is for the main tests & clippy.
# Running rustfmt is a separate workflow.
on: [push, pull_request]
name: Cargo Test

env:
  CARGO_TERM_COLOR: always
  # has a history of occasional bugs (especially on old versions)
  #
  # the ci is free so we might as well use it ;)
  CARGO_INCREMENTAL: 0


# Tested versions:
# 1. stable
# 2. nightly
# 3. Minimum Supported Rust Version (MSRV)

jobs:
  test:
    # Only run on PRs if the source branch is on someone else's repo
    if: ${{ github.event_name != 'pull_request' || github.repository != github.event.pull_request.head.repo.full_name }}

    runs-on: ubuntu-latest
    strategy:
      fail-fast: false # Even if one job fails we still want to see the other ones
      matrix:
        rust:
          # Minimum Supported Rust Version: 1.59
          #
          # This is hardcoded and needs to be in sync with Cargo.toml and the README
          - 1.59
          # A recent version of stable rust that is hardcoded.
          #
          # This should be kept as up to date as possible.
          #
          # This is used so that clippy & tests are run on a reliable reference point.
          # If clippy has any warnings, this will fail the build (we run with --deny warnings)
          - 1.72
          # The most recent version of stable rust (automatically updated)
          #
          # Sometimes, this is exactly the same as the hardcoded right above.
          # However sometimes it will be automatically updated to something a little newer.
          #
          # If there are new clippy lints in the automatic update that aren't
          # in the hardcoded versions, they will _NOT_ fail the build.
          # This is true even if they are set to deny by default (clippy does this for some 'correctness' lints).
          # They will simply be regular warnings.
          - stable
          - nightly
        # NOTE: Features to test must be specified manually. They are applied to all versions separately.
        #
        # This has the advantage of being more flexibile and thorough
        # This has the disadvantage of being more vebrose
        #
        # Specific feature combos can be overridden per-version with 'include' and 'ecclude'
        features:
          - ""
          - "nested-values"

    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ matrix.rust }}
          components: clippy
      - name: Check
        # A failing `cargo check` always ends the build
        run: |
          cargo check --all-targets --verbose --features "${{ matrix.features }}"
        # A failing `cargo check` always fails the build
        continue-on-error: false
      - name: Test
        run: |
          cargo test --all-targets --verbose --features "${{ matrix.features }}"

        # We require tests to succeed on all the feature combinations.
        #
        # However, we can grant special exceptions for the Minimum Supported Rust Version
        # if there is a really good reason (like a dependency that requires a newer version).
        continue-on-error: false

      - name: Clippy
        # With the exception of nightly, we use --deny warnings to treat warnings on errors.
        run: |
          cargo clippy --all-targets --verbose --features "${{ matrix.features }}" -- --deny "${{ matrix.rust != 'nightly' && 'warnings' || 'clippy::correctness' }}"
        # Clippy is required to succeed on hardcoded versions, and may not give any warnings.
        #
        # However, on automatically updated versions of rust (both stable & nightly) we allow clippy to fail.
        # This is in case automatic updates have introduced new lints that would give warnings/errors
        # about code that was previously allowed.
        #
        # This is the main reason that we have a 'hardcoded recent stable' version.
        # We want as many lints from recent stable possible
        # but don't want the surprises of automatic updates to our stable rust.
        #
        # Also, include an explicit exception for Rust 1.56.
        # We don't want to deal with the fact clippy changed the names of some lints.
        continue-on-error: ${{ !contains(matrix.rust, '1.') || matrix.rust == '1.56' }}