Skip to content

CI: check the presence of the changelog line in every pull request #539

CI: check the presence of the changelog line in every pull request

CI: check the presence of the changelog line in every pull request #539

Workflow file for this run

name: Clippy Test
on:
pull_request:
env:
RUST_BACKTRACE: 1
CARGO_TARGET_DIR: '${{ github.workspace }}/target'
NO_FMT_TEST: 1
CARGO_INCREMENTAL: 0
RUSTFLAGS: -D warnings
concurrency:
# For a given workflow, if we push to the same PR, cancel all previous builds on that PR.
# If the push is not attached to a PR, we will cancel all builds on the same branch.
group: "${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}"
cancel-in-progress: true
jobs:
changelog:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
# Unsetting this would make so that any malicious package could get our Github Token
persist-credentials: false
# Run
- name: Check Changelog
run: |
set -x
body=$(curl -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" -s "https://api.github.com/repos/rust-lang/rust-clippy/pulls/$PR_NUMBER" | \
python -c "import sys, json; print(json.load(sys.stdin)['body'])")
cl_line=$(grep "^changelog:\s*\S" <<< "$body") || {
echo "ERROR: PR body must contain 'changelog: ...'. Please modify the PR " \
"message and push (or force-push) the PR commits to trigger a new check."
exit 1
}
output=$(sed "s/^changelog:\s*//" <<< "$cl_line")
if [[ "$output" = "none" ]]; then
echo "WARNING: changelog is 'none'"
else
echo "changelog: $output"
fi
env:
PYTHONIOENCODING: 'utf-8'
PR_NUMBER: '${{ github.event.number }}'
base:
# NOTE: If you modify this job, make sure you copy the changes to clippy_mq.yml
needs: changelog
runs-on: ubuntu-latest
steps:
# Setup
- name: Checkout
uses: actions/checkout@v4
with:
# Unsetting this would make so that any malicious package could get our Github Token
persist-credentials: false
- name: Install toolchain
run: |
# Use a way compatible with Rustup pre-1.28.0 and Rustup 1.28.0
rustup show active-toolchain || rustup toolchain install
# Run
- name: Build
run: cargo build --tests --features internal
- name: Test
run: cargo test --features internal
- name: Test clippy_lints
run: cargo test --features internal
working-directory: clippy_lints
- name: Test clippy_utils
run: cargo test
working-directory: clippy_utils
- name: Test rustc_tools_util
run: cargo test
working-directory: rustc_tools_util
- name: Test clippy_dev
run: cargo test
working-directory: clippy_dev
- name: Test clippy-driver
run: .github/driver.sh
env:
OS: ${{ runner.os }}
# We need to have the "conclusion" job also on PR CI, to make it possible
# to add PRs to a merge queue.
conclusion:
needs: [ base ]
# We need to ensure this job does *not* get skipped if its dependencies fail,
# because a skipped job is considered a success by GitHub. So we have to
# overwrite `if:`. We use `!cancelled()` to ensure the job does still not get run
# when the workflow is canceled manually.
#
# ALL THE PREVIOUS JOBS NEED TO BE ADDED TO THE `needs` SECTION OF THIS JOB!
if: ${{ !cancelled() }}
runs-on: ubuntu-latest
steps:
# Manually check the status of all dependencies. `if: failure()` does not work.
- name: Conclusion
run: |
# Print the dependent jobs to see them in the CI log
jq -C <<< '${{ toJson(needs) }}'
# Check if all jobs that we depend on (in the needs array) were successful.
jq --exit-status 'all(.result == "success")' <<< '${{ toJson(needs) }}'