Switch CI from bors to merge queue

This commit is contained in:
Jakub Beránek 2024-10-25 10:28:45 +02:00
parent 5873cb9d17
commit 3338611c1b
No known key found for this signature in database
GPG Key ID: 909CD0D26483516B
6 changed files with 54 additions and 115 deletions

View File

@ -1,10 +1,7 @@
name: Clippy Dev Test name: Clippy Dev Test
on: on:
push: merge_group:
branches:
- auto
- try
pull_request: pull_request:
# Only run on paths, that get checked by the clippy_dev tool # Only run on paths, that get checked by the clippy_dev tool
paths: paths:
@ -47,28 +44,21 @@ jobs:
cargo check cargo check
git reset --hard HEAD git reset --hard HEAD
# These jobs doesn't actually test anything, but they're only used to tell conclusion_dev:
# bors the build completed, as there is no practical way to detect when a needs: [ clippy_dev ]
# workflow is successful listening to webhooks only. # 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! # ALL THE PREVIOUS JOBS NEED TO BE ADDED TO THE `needs` SECTION OF THIS JOB!
if: ${{ !cancelled() }}
end-success:
name: bors dev test finished
if: github.event.pusher.name == 'bors' && success()
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: [clippy_dev]
steps: steps:
- name: Mark the job as successful # Manually check the status of all dependencies. `if: failure()` does not work.
run: exit 0 - name: Conclusion
run: |
end-failure: # Print the dependent jobs to see them in the CI log
name: bors dev test finished jq -C <<< '${{ toJson(needs) }}'
if: github.event.pusher.name == 'bors' && (failure() || cancelled()) # Check if all jobs that we depend on (in the needs array) were successful.
runs-on: ubuntu-latest jq --exit-status 'all(.result == "success")' <<< '${{ toJson(needs) }}'
needs: [clippy_dev]
steps:
- name: Mark the job as a failure
run: exit 1

View File

@ -1,10 +1,7 @@
name: Clippy Test (bors) name: Clippy Test (merge queue)
on: on:
push: merge_group:
branches:
- auto
- try
env: env:
RUST_BACKTRACE: 1 RUST_BACKTRACE: 1
@ -13,11 +10,6 @@ env:
CARGO_INCREMENTAL: 0 CARGO_INCREMENTAL: 0
RUSTFLAGS: -D warnings RUSTFLAGS: -D warnings
concurrency:
# For a given workflow, if we push to the same branch, cancel all previous builds on that branch.
group: "${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}"
cancel-in-progress: true
defaults: defaults:
run: run:
shell: bash shell: bash
@ -218,28 +210,21 @@ jobs:
env: env:
INTEGRATION: ${{ matrix.integration }} INTEGRATION: ${{ matrix.integration }}
# These jobs doesn't actually test anything, but they're only used to tell conclusion:
# bors the build completed, as there is no practical way to detect when a needs: [ changelog, base, metadata_collection, integration_build, integration ]
# workflow is successful listening to webhooks only. # 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! # ALL THE PREVIOUS JOBS NEED TO BE ADDED TO THE `needs` SECTION OF THIS JOB!
if: ${{ !cancelled() }}
end-success:
name: bors test finished
if: github.event.pusher.name == 'bors' && success()
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: [changelog, base, metadata_collection, integration_build, integration]
steps: steps:
- name: Mark the job as successful # Manually check the status of all dependencies. `if: failure()` does not work.
run: exit 0 - name: Conclusion
run: |
end-failure: # Print the dependent jobs to see them in the CI log
name: bors test finished jq -C <<< '${{ toJson(needs) }}'
if: github.event.pusher.name == 'bors' && (failure() || cancelled()) # Check if all jobs that we depend on (in the needs array) were successful.
runs-on: ubuntu-latest jq --exit-status 'all(.result == "success")' <<< '${{ toJson(needs) }}'
needs: [changelog, base, metadata_collection, integration_build, integration]
steps:
- name: Mark the job as a failure
run: exit 1

View File

@ -1,17 +1,6 @@
name: Clippy Test name: Clippy Test
on: on:
push:
# Ignore bors branches, since they are covered by `clippy_bors.yml`
branches-ignore:
- auto
- try
# Don't run Clippy tests, when only text files were modified
paths-ignore:
- 'COPYRIGHT'
- 'LICENSE-*'
- '**.md'
- '**.txt'
pull_request: pull_request:
# Don't run Clippy tests, when only text files were modified # Don't run Clippy tests, when only text files were modified
paths-ignore: paths-ignore:
@ -35,7 +24,7 @@ concurrency:
jobs: jobs:
base: base:
# NOTE: If you modify this job, make sure you copy the changes to clippy_bors.yml # NOTE: If you modify this job, make sure you copy the changes to clippy_mq.yml
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:

View File

@ -1,10 +1,7 @@
name: Remark name: Remark
on: on:
push: merge_group:
branches:
- auto
- try
pull_request: pull_request:
paths: paths:
- '**.md' - '**.md'
@ -45,28 +42,21 @@ jobs:
- name: Build mdbook - name: Build mdbook
run: mdbook build book run: mdbook build book
# These jobs doesn't actually test anything, but they're only used to tell conclusion_remark:
# bors the build completed, as there is no practical way to detect when a needs: [ remark ]
# workflow is successful listening to webhooks only. # 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! # ALL THE PREVIOUS JOBS NEED TO BE ADDED TO THE `needs` SECTION OF THIS JOB!
if: ${{ !cancelled() }}
end-success:
name: bors remark test finished
if: github.event.pusher.name == 'bors' && success()
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: [remark]
steps: steps:
- name: Mark the job as successful # Manually check the status of all dependencies. `if: failure()` does not work.
run: exit 0 - name: Conclusion
run: |
end-failure: # Print the dependent jobs to see them in the CI log
name: bors remark test finished jq -C <<< '${{ toJson(needs) }}'
if: github.event.pusher.name == 'bors' && (failure() || cancelled()) # Check if all jobs that we depend on (in the needs array) were successful.
runs-on: ubuntu-latest jq --exit-status 'all(.result == "success")' <<< '${{ toJson(needs) }}'
needs: [remark]
steps:
- name: Mark the job as a failure
run: exit 1

View File

@ -21,7 +21,6 @@ All contributors are expected to follow the [Rust Code of Conduct].
- [Rust Analyzer](#rust-analyzer) - [Rust Analyzer](#rust-analyzer)
- [How Clippy works](#how-clippy-works) - [How Clippy works](#how-clippy-works)
- [Issue and PR triage](#issue-and-pr-triage) - [Issue and PR triage](#issue-and-pr-triage)
- [Bors and Homu](#bors-and-homu)
- [Contributions](#contributions) - [Contributions](#contributions)
- [License](#license) - [License](#license)
@ -213,16 +212,6 @@ We have prioritization labels and a sync-blocker label, which are described belo
Or rather: before the sync this should be addressed, Or rather: before the sync this should be addressed,
e.g. by removing a lint again, so it doesn't hit beta/stable. e.g. by removing a lint again, so it doesn't hit beta/stable.
## Bors and Homu
We use a bot powered by [Homu][homu] to help automate testing and landing of pull
requests in Clippy. The bot's username is @bors.
You can find the Clippy bors queue [here][homu_queue].
If you have @bors permissions, you can find an overview of the available
commands [here][homu_instructions].
[triage]: https://forge.rust-lang.org/release/triage-procedure.html [triage]: https://forge.rust-lang.org/release/triage-procedure.html
[l-crash]: https://github.com/rust-lang/rust-clippy/labels/L-crash [l-crash]: https://github.com/rust-lang/rust-clippy/labels/L-crash
[l-bug]: https://github.com/rust-lang/rust-clippy/labels/L-bug [l-bug]: https://github.com/rust-lang/rust-clippy/labels/L-bug
@ -230,9 +219,6 @@ commands [here][homu_instructions].
[p-medium]: https://github.com/rust-lang/rust-clippy/labels/P-medium [p-medium]: https://github.com/rust-lang/rust-clippy/labels/P-medium
[p-high]: https://github.com/rust-lang/rust-clippy/labels/P-high [p-high]: https://github.com/rust-lang/rust-clippy/labels/P-high
[l-sync-blocker]: https://github.com/rust-lang/rust-clippy/labels/L-sync-blocker [l-sync-blocker]: https://github.com/rust-lang/rust-clippy/labels/L-sync-blocker
[homu]: https://github.com/rust-lang/homu
[homu_instructions]: https://bors.rust-lang.org/
[homu_queue]: https://bors.rust-lang.org/queue/clippy
## Contributions ## Contributions
@ -244,7 +230,7 @@ All PRs should include a `changelog` entry with a short comment explaining the c
"what do you believe is important from an outsider's perspective?" Often, PRs are only related to a single property of a "what do you believe is important from an outsider's perspective?" Often, PRs are only related to a single property of a
lint, and then it's good to mention that one. Otherwise, it's better to include too much detail than too little. lint, and then it's good to mention that one. Otherwise, it's better to include too much detail than too little.
Clippy's [changelog] is created from these comments. Every release, someone gets all commits from bors with a Clippy's [changelog] is created from these comments. Every release, someone gets all merge commits with a
`changelog: XYZ` entry and combines them into the changelog. This is a manual process. `changelog: XYZ` entry and combines them into the changelog. This is a manual process.
Examples: Examples:

View File

@ -53,7 +53,6 @@ book](../lints.md).
> - IDE setup > - IDE setup
> - High level overview on how Clippy works > - High level overview on how Clippy works
> - Triage procedure > - Triage procedure
> - Bors and Homu
[ast]: https://rustc-dev-guide.rust-lang.org/syntax-intro.html [ast]: https://rustc-dev-guide.rust-lang.org/syntax-intro.html
[hir]: https://rustc-dev-guide.rust-lang.org/hir.html [hir]: https://rustc-dev-guide.rust-lang.org/hir.html