Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ci: split cargo-clippy into stable and nightly (#34566)
Browse files Browse the repository at this point in the history
* ci: split cargo-clippy into stable and nightly

* ci: update mergify

(cherry picked from commit 5247be1)

# Conflicts:
#	.mergify.yml
#	scripts/cargo-clippy.sh
yihau authored and mergify[bot] committed Dec 21, 2023

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
1 parent 6a0ac90 commit dfdbab1
Showing 5 changed files with 116 additions and 40 deletions.
27 changes: 24 additions & 3 deletions .github/workflows/cargo.yml
Original file line number Diff line number Diff line change
@@ -26,7 +26,7 @@ env:
RUSTC_WRAPPER: "sccache"

jobs:
clippy:
clippy-stable:
strategy:
matrix:
os:
@@ -44,7 +44,28 @@ jobs:

- shell: bash
run: |
source ci/rust-version.sh all
source ci/rust-version.sh stable
rustup component add clippy --toolchain "$rust_stable"
scripts/cargo-clippy-stable.sh
clippy-nightly:
strategy:
matrix:
os:
- macos-latest
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4

- uses: mozilla-actions/sccache-action@v0.0.3
with:
version: "v0.5.4"

- shell: bash
run: .github/scripts/cargo-clippy-before-script.sh ${{ runner.os }}

- shell: bash
run: |
source ci/rust-version.sh nightly
rustup component add clippy --toolchain "$rust_nightly"
scripts/cargo-clippy.sh
scripts/cargo-clippy-nightly.sh
21 changes: 21 additions & 0 deletions .mergify.yml
Original file line number Diff line number Diff line change
@@ -58,6 +58,27 @@ pull_request_rules:
# only require docs checks if docs files changed
- -files~=^docs/
- status-success=build & deploy docs
<<<<<<< HEAD
=======
- or:
- -files~=(\.rs|Cargo\.toml|Cargo\.lock|\.github/scripts/cargo-clippy-before-script\.sh|\.github/workflows/cargo\.yml)$
- and:
- check-success=clippy-stable (macos-latest)
- check-success=clippy-nightly (macos-latest)
- or:
- -files~=(\.rs|Cargo\.toml|Cargo\.lock|cargo-build-bpf|cargo-test-bpf|cargo-build-sbf|cargo-test-sbf|ci/downstream-projects/run-spl\.sh|\.github/workflows/downstream-project-spl\.yml)$
- and:
- status-success=cargo-test-sbf (token/program)
- status-success=cargo-test-sbf (instruction-padding/program, token/program-2022, token/program-2022-test)
- status-success=cargo-test-sbf (associated-token-account/program, associated-token-account/program-test)
- status-success=cargo-test-sbf (token-upgrade/program)
- status-success=cargo-test-sbf (feature-proposal/program)
- status-success=cargo-test-sbf (governance/addin-mock/program, governance/program)
- status-success=cargo-test-sbf (memo/program)
- status-success=cargo-test-sbf (name-service/program)
- status-success=cargo-test-sbf (stake-pool/program)
- status-success=cargo-test-sbf (single-pool/program)
>>>>>>> 5247be17a9 (ci: split cargo-clippy into stable and nightly (#34566))
actions:
merge:
method: squash
33 changes: 33 additions & 0 deletions scripts/cargo-clippy-nightly.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#!/usr/bin/env bash

set -o errexit

here="$(dirname "$0")"
cargo="$(readlink -f "${here}/../cargo")"

if [[ -z $cargo ]]; then
echo >&2 "Failed to find cargo. Mac readlink doesn't support -f. Consider switching
to gnu readlink with 'brew install coreutils' and then symlink greadlink as
/usr/local/bin/readlink."
exit 1
fi

# shellcheck source=ci/rust-version.sh
source "$here/../ci/rust-version.sh" nightly

# Use nightly clippy, as frozen-abi proc-macro generates a lot of code across
# various crates in this whole monorepo (frozen-abi is enabled only under nightly
# due to the use of unstable rust feature). Likewise, frozen-abi(-macro) crates'
# unit tests are only compiled under nightly.
# Similarly, nightly is desired to run clippy over all of bench files because
# the bench itself isn't stabilized yet...
# ref: https://github.com/rust-lang/rust/issues/66287
"$here/cargo-for-all-lock-files.sh" -- \
"+${rust_nightly}" clippy \
--workspace --all-targets --features dummy-for-ci-check -- \
--deny=warnings \
--deny=clippy::default_trait_access \
--deny=clippy::arithmetic_side_effects \
--deny=clippy::manual_let_else \
--deny=clippy::used_underscore_binding \
--allow=clippy::redundant_clone
31 changes: 31 additions & 0 deletions scripts/cargo-clippy-stable.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#!/usr/bin/env bash

set -o errexit

here="$(dirname "$0")"
cargo="$(readlink -f "${here}/../cargo")"

if [[ -z $cargo ]]; then
>&2 echo "Failed to find cargo. Mac readlink doesn't support -f. Consider switching
to gnu readlink with 'brew install coreutils' and then symlink greadlink as
/usr/local/bin/readlink."
exit 1
fi

# shellcheck source=ci/rust-version.sh
source "$here/../ci/rust-version.sh" stable

# temporarily run stable clippy as well to scan the codebase for
# `redundant_clone`s, which is disabled as nightly clippy is buggy:
# https://github.com/solana-labs/solana/issues/31834
#
# can't use --all-targets:
# error[E0554]: `#![feature]` may not be used on the stable release channel
"$here/cargo-for-all-lock-files.sh" -- \
clippy \
--workspace --tests --bins --examples --features dummy-for-ci-check -- \
--deny=warnings \
--deny=clippy::default_trait_access \
--deny=clippy::arithmetic_side_effects \
--deny=clippy::manual_let_else \
--deny=clippy::used_underscore_binding
44 changes: 7 additions & 37 deletions scripts/cargo-clippy.sh
Original file line number Diff line number Diff line change
@@ -14,48 +14,18 @@
set -o errexit

here="$(dirname "$0")"
cargo="$(readlink -f "${here}/../cargo")"

<<<<<<< HEAD
if [[ -z $cargo ]]; then
echo >&2 "Failed to find cargo. Mac readlink doesn't support -f. Consider switching
to gnu readlink with 'brew install coreutils' and then symlink greadlink as
/usr/local/bin/readlink."
exit 1
fi
=======
# stable
"$here/cargo-clippy-stable.sh"
>>>>>>> 5247be17a9 (ci: split cargo-clippy into stable and nightly (#34566))

# shellcheck source=ci/rust-version.sh
source "$here/../ci/rust-version.sh"

nightly_clippy_allows=(--allow=clippy::redundant_clone)

# Use nightly clippy, as frozen-abi proc-macro generates a lot of code across
# various crates in this whole monorepo (frozen-abi is enabled only under nightly
# due to the use of unstable rust feature). Likewise, frozen-abi(-macro) crates'
# unit tests are only compiled under nightly.
# Similarly, nightly is desired to run clippy over all of bench files because
# the bench itself isn't stabilized yet...
# ref: https://github.com/rust-lang/rust/issues/66287
"$here/cargo-for-all-lock-files.sh" -- \
"+${rust_nightly}" clippy \
--workspace --all-targets --features dummy-for-ci-check -- \
--deny=warnings \
--deny=clippy::default_trait_access \
--deny=clippy::arithmetic_side_effects \
--deny=clippy::manual_let_else \
--deny=clippy::used_underscore_binding \
"${nightly_clippy_allows[@]}"

# temporarily run stable clippy as well to scan the codebase for
# `redundant_clone`s, which is disabled as nightly clippy is buggy:
# https://github.com/solana-labs/solana/issues/31834
#
# can't use --all-targets:
# error[E0554]: `#![feature]` may not be used on the stable release channel
"$here/cargo-for-all-lock-files.sh" -- \
clippy \
--workspace --tests --bins --examples --features dummy-for-ci-check -- \
--deny=warnings \
--deny=clippy::default_trait_access \
--deny=clippy::arithmetic_side_effects \
--deny=clippy::manual_let_else \
--deny=clippy::used_underscore_binding
# nightly
"$here/cargo-clippy-nightly.sh"

0 comments on commit dfdbab1

Please sign in to comment.