Skip to content

Commit

Permalink
v1.16: ci: add macos clippy test (backport of #34272) (#34387)
Browse files Browse the repository at this point in the history
* ci: add macos clippy test (#34272)

* ci: add clippy test for macos and windows

* ci: remove windows from clippy test

* ci: cancel cargo clippy on Github Actions when new commits comming

* ci: set -e for .github/scripts/cargo-clippy-before-script.sh

(cherry picked from commit 4832b4e)

* scripts/cargo-clippy.sh: Extract our non-trivial cargo clippy command (manual backport of #33982)

---------

Co-authored-by: Yihau Chen <[email protected]>
Co-authored-by: yihau <[email protected]>
  • Loading branch information
3 people authored Dec 10, 2023
1 parent ad80b13 commit 6977675
Show file tree
Hide file tree
Showing 4 changed files with 127 additions and 27 deletions.
17 changes: 17 additions & 0 deletions .github/scripts/cargo-clippy-before-script.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#!/usr/bin/env bash

set -e

os_name="$1"

case "$os_name" in
"Windows")
;;
"macOS")
brew install protobuf
;;
"Linux") ;;
*)
echo "Unknown Operating System"
;;
esac
50 changes: 50 additions & 0 deletions .github/workflows/cargo.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
name: Cargo

on:
push:
branches:
- master
- v[0-9]+.[0-9]+
pull_request:
branches:
- master
- v[0-9]+.[0-9]+
paths:
- "**.rs"
- "**/Cargo.toml"
- "**/Cargo.lock"
- ".github/scripts/cargo-clippy-before-script.sh"
- ".github/workflows/cargo.yml"

concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

env:
SHELL: /bin/bash
SCCACHE_GHA_ENABLED: "true"
RUSTC_WRAPPER: "sccache"

jobs:
clippy:
strategy:
matrix:
os:
- macos-latest
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4

- uses: mozilla-actions/[email protected]
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 all
rustup component add clippy --toolchain "$rust_stable"
rustup component add clippy --toolchain "$rust_nightly"
scripts/cargo-clippy.sh
28 changes: 1 addition & 27 deletions ci/test-checks.sh
Original file line number Diff line number Diff line change
Expand Up @@ -75,33 +75,7 @@ fi

_ ci/order-crates-for-publishing.py

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
_ scripts/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::integer_arithmetic \
--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
_ scripts/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::integer_arithmetic \
--deny=clippy::used_underscore_binding
_ scripts/cargo-clippy.sh

if [[ -n $CI ]]; then
# exclude from printing "Checking xxx ..."
Expand Down
59 changes: 59 additions & 0 deletions scripts/cargo-clippy.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
#!/usr/bin/env bash

# Runs `cargo clippy` in all individual workspaces in the repository.
#
# We have a number of clippy parameters that we want to enforce across the
# code base. They are defined here.
#
# This script is run by the CI, so if you want to replicate what the CI is
# doing, better run this script, rather than calling `cargo clippy` manually.
#
# TODO It would be nice to provide arguments to narrow clippy checks to a single
# workspace and/or package. To speed up the interactive workflow.

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_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
scripts/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::integer_arithmetic \
--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
scripts/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::integer_arithmetic \
--deny=clippy::used_underscore_binding

0 comments on commit 6977675

Please sign in to comment.