diff --git a/.github/workflows/clippy.yml b/.github/workflows/clippy.yml deleted file mode 100644 index bb1daab1..00000000 --- a/.github/workflows/clippy.yml +++ /dev/null @@ -1,46 +0,0 @@ -# This is the clippy workflow, separate from the main 'Rust' workflow -# -# Right now it will always succed (should we change that?) -on: [push, pull_request] -name: Clippy - -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 - - -jobs: - clippy: - # 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 - # Clippy is something that is nice to have, but it shoudldn't break the build - continue-on-error: true - strategy: - matrix: - rust: - - stable - steps: - - uses: actions/checkout@v2 - - uses: actions-rs/toolchain@v1 - with: - profile: minimal - toolchain: ${{ matrix.rust }} - override: true - components: clippy - - shell: bash - run: | - # By default, GH actions runs `set -e` to make bash immediately exit - # if any command has an error. - # - # However, we want this check to always "succeed", just give a warning on error. - # - # As a result we undo that setting by running `set +e` (notice the plus) - set +e - cargo clippy - # Give a github warning if the command didn't succeed - if [[ $? -ne 0 ]]; then echo "::warning title=Clippy:: Oh no, clippy is sad :("; fi - true # Exit with success diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 30b5fdf0..dd40ce4d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -26,8 +26,29 @@ jobs: strategy: fail-fast: false # Even if one job fails we still want to see the other ones matrix: - # 1.49 is MSRV - rust: [1.49, stable, nightly] + rust: + # Minimum Supported Rust Version + # + # This is hardcoded and needs to be in sync with Cargo.toml and the README + - 1.49 + # 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 @@ -52,12 +73,26 @@ jobs: run: | cargo test --verbose --features "${{ matrix.features }}" - # By default, we require tests to succeed if either - # 1. It has default features (`features == ""`) + # We only require tests to succeed on the default feature combinations. # - # Otherwise, we allow tests to fail. + # This is necessary because we had CI disabled for a long time when + # Travis CI got rid of their free plans. + # It took us a while to switch to Github Actions. # - # This is necessary because most feature combos currently break the tests :( + # TODO: Fix the build on all feature combos + continue-on-error: ${{ matrix.features == '' }} + + - name: Clippy + # With the exception of nightly, we use --deny warnings to treat warnings on errors. + run: | + cargo clippy --verbose --features "${{ matrix.features }}" --deny "${{ matrix.rust != 'nightly' && 'warnings' || 'clippy::correctness' }}" + # Clippy is required to succeed on hardcoded versions, and 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. # - # TODO: Add some sort of option to get around this (or fix the build) - continue-on-error: ${{ matrix.features == '' }} + # 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. + continue-on-error: ${{ matrix.rust == 'nightly' || matrix.rust == 'stable' }}