Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
101 changes: 25 additions & 76 deletions .github/workflows/check.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
# This workflow runs whenever a PR is opened or updated, or a commit is pushed to main. It runs
# This workflow runs whenever a PR is opened or updated. It runs
# several checks:
# - commit_list: produces a list of commits to be checked
# - fmt: checks that the code is formatted according to rustfmt
# - clippy: checks that the code does not contain any clippy warnings
# - doc: checks that the code can be documented without errors
Expand All @@ -23,47 +22,13 @@ concurrency:
name: check
jobs:

commit_list:
runs-on: ubuntu-latest
steps:

- uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Get commit list (push)
id: get_commit_list_push
if: ${{ github.event_name == 'push' }}
run: |
echo "id0=$GITHUB_SHA" > $GITHUB_OUTPUT
echo "List of tested commits:" > $GITHUB_STEP_SUMMARY
sed -n 's,^id[0-9]\+=\(.*\),- ${{ github.repositoryUrl }}/commit/\1,p' -- $GITHUB_OUTPUT >> $GITHUB_STEP_SUMMARY

- name: Get commit list (PR)
id: get_commit_list_pr
if: ${{ github.event_name == 'pull_request' }}
run: |
git rev-list --reverse refs/remotes/origin/${{ github.base_ref }}..${{ github.event.pull_request.head.sha }} | awk '{ print "id" NR "=" $1 }' > $GITHUB_OUTPUT
git diff --quiet ${{ github.event.pull_request.head.sha }} ${{ github.sha }} || echo "id0=$GITHUB_SHA" >> $GITHUB_OUTPUT
echo "List of tested commits:" > $GITHUB_STEP_SUMMARY
sed -n 's,^id[0-9]\+=\(.*\),- ${{ github.repositoryUrl }}/commit/\1,p' -- $GITHUB_OUTPUT >> $GITHUB_STEP_SUMMARY

outputs:
commits: ${{ toJSON(steps.*.outputs.*) }}

fmt:
runs-on: ubuntu-latest
name: nightly / fmt
needs: commit_list
strategy:
fail-fast: false
matrix:
commit: ${{ fromJSON(needs.commit_list.outputs.commits) }}
steps:
- uses: actions/checkout@v4
with:
submodules: true
ref: ${{ matrix.commit }}
- name: Install nightly
uses: dtolnay/rust-toolchain@nightly
with:
Expand All @@ -73,48 +38,35 @@ jobs:

clippy:
runs-on: ubuntu-latest
name: ${{ matrix.toolchain }} / clippy (${{ matrix.commit }})
needs: commit_list
name: ${{ matrix.toolchain }} / clippy
permissions:
contents: read
checks: write
strategy:
fail-fast: false
matrix:
# Get early warning of new lints which are regularly introduced in beta channels.
toolchain: [stable, beta]
commit: ${{ fromJSON(needs.commit_list.outputs.commits) }}
toolchain: [stable]
steps:
- uses: actions/checkout@v4
with:
submodules: true
ref: ${{ matrix.commit }}
- name: Install ${{ matrix.toolchain }}
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ matrix.toolchain }}
components: clippy
- name: cargo clippy
uses: giraffate/clippy-action@v1
with:
reporter: 'github-pr-check'
clippy_flags: -- -F clippy::suspicious -F clippy::correctness -F clippy::perf -F clippy::style
github_token: ${{ secrets.GITHUB_TOKEN }}
run: cargo clippy -- -Dwarnings

# Enable once we have a released crate
# semver:
# runs-on: ubuntu-latest
# name: semver
# needs: commit_list
# strategy:
# fail-fast: false
# matrix:
# commit: ${{ fromJSON(needs.commit_list.outputs.commits) }}
# steps:
# - uses: actions/checkout@v4
# with:
# submodules: true
# ref: ${{ matrix.commit }}
# - name: Install stable
# uses: dtolnay/rust-toolchain@stable
# with:
Expand All @@ -124,18 +76,12 @@ jobs:

doc:
runs-on: ubuntu-latest
name: nightly / doc
needs: commit_list
strategy:
fail-fast: false
matrix:
commit: ${{ fromJSON(needs.commit_list.outputs.commits) }}
name: stable / doc
steps:
- uses: actions/checkout@v4
with:
submodules: true
ref: ${{ matrix.commit }}
- name: Install nightly
- name: Install Stable
uses: dtolnay/rust-toolchain@stable
- name: cargo doc
run: cargo doc --no-deps --all-features
Expand All @@ -147,16 +93,10 @@ jobs:
# which is required for feature unification
runs-on: ubuntu-latest
name: ubuntu / stable / features
needs: commit_list
strategy:
fail-fast: false
matrix:
commit: ${{ fromJSON(needs.commit_list.outputs.commits) }}
steps:
- uses: actions/checkout@v4
with:
submodules: true
ref: ${{ matrix.commit }}
- name: Install stable
uses: dtolnay/rust-toolchain@stable
- name: cargo install cargo-hack
Expand All @@ -171,16 +111,10 @@ jobs:
# our dependencies.
runs-on: ubuntu-latest
name: ubuntu / stable / deny
needs: commit_list
strategy:
fail-fast: false
matrix:
commit: ${{ fromJSON(needs.commit_list.outputs.commits) }}
steps:
- uses: actions/checkout@v4
with:
submodules: true
ref: ${{ matrix.commit }}
- name: Install stable
uses: dtolnay/rust-toolchain@stable
- name: cargo install cargo-deny
Expand All @@ -191,16 +125,32 @@ jobs:
command: check
arguments: --all-features

test:
runs-on: ubuntu-latest
name: ubuntu / stable / test
strategy:
fail-fast: false
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Install stable
uses: dtolnay/rust-toolchain@stable
- name: cargo test
run: cargo test
# After ensuring tests pass, finally ensure the test code itself contains no clippy warnings
- name: cargo clippy
run: |
cargo clippy --tests -- -Dwarnings

msrv:
# check that we can build using the minimal rust version that is specified by this crate
runs-on: ubuntu-latest
needs: commit_list
# we use a matrix here just because env can't be used in job names
# https://docs.github.com/en/actions/learn-github-actions/contexts#context-availability
strategy:
fail-fast: false
matrix:
commit: ${{ fromJSON(needs.commit_list.outputs.commits) }}
msrv: ["1.85"] # We're relying on namespaced-features, which
# was released in 1.60
#
Expand All @@ -214,12 +164,11 @@ jobs:
# collapse_debuginfo
#
# device-driver requires 1.85 for rust2024
name: ubuntu / ${{ matrix.msrv }} (${{ matrix.commit }})
name: ubuntu / ${{ matrix.msrv }}
steps:
- uses: actions/checkout@v4
with:
submodules: true
ref: ${{ matrix.commit }}
- name: Install stable
uses: dtolnay/rust-toolchain@stable
with:
Expand Down