-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Auto merge of #6401 - ebroto:pin_to_a_nightly, r=<try>
📌 Pin Clippy to a nightly 📌 changelog: none Addresses partially #5561. As proposed there in [this comment](#5561 (comment)), this kicks off the process, to help us get acquainted with how the syncs should work, before working on improving the tooling. Open questions: * When performing a rustup, we will need to exclude the commits that were merged that same day, or else wait until that nightly is released. I did not update the documentation about this part, mainly because I'm not sure about how to do that. * When should we perform the rustups now? My first idea is to do it at the same time we do the clippyups, to have a clear cadence and to avoid the two copies of the repo to diverge enough to make the process painful. * Who does the rustups now? If we follow my previous idea and do both rustup and clippyup at the same time, it would be more work for `@flip1995` who currently does the clippyups. I would prefer to establish some kind of rotation to spead the work. Other ideas? * I'm not sure if this affects the release process in any way. * ??? `@rust-lang/clippy` thoughts? r? `@flip1995`
- Loading branch information
Showing
7 changed files
with
57 additions
and
198 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -35,29 +35,12 @@ jobs: | |
with: | ||
github_token: "${{ secrets.github_token }}" | ||
|
||
- name: rust-toolchain | ||
uses: actions-rs/[email protected] | ||
with: | ||
toolchain: nightly | ||
target: x86_64-unknown-linux-gnu | ||
profile: minimal | ||
|
||
- name: Checkout | ||
uses: actions/[email protected] | ||
|
||
- name: Run cargo update | ||
run: cargo update | ||
|
||
- name: Cache cargo dir | ||
uses: actions/cache@v2 | ||
with: | ||
path: ~/.cargo | ||
key: ${{ runner.os }}-x86_64-unknown-linux-gnu-${{ hashFiles('Cargo.lock') }} | ||
restore-keys: | | ||
${{ runner.os }}-x86_64-unknown-linux-gnu | ||
- name: Master Toolchain Setup | ||
run: bash setup-toolchain.sh | ||
# HACK(flip1995): This is here to install the correct toolchain | ||
- name: Print cargo version | ||
run: cargo -V | ||
|
||
# Run | ||
- name: Set LD_LIBRARY_PATH (Linux) | ||
|
@@ -66,13 +49,13 @@ jobs: | |
echo "LD_LIBRARY_PATH=${SYSROOT}/lib${LD_LIBRARY_PATH+:${LD_LIBRARY_PATH}}" >> $GITHUB_ENV | ||
- name: Build | ||
run: cargo build --features deny-warnings | ||
run: cargo build --features deny-warnings,internal-lints | ||
|
||
- name: Test | ||
run: cargo test --features deny-warnings | ||
run: cargo test --features deny-warnings,internal-lints | ||
|
||
- name: Test clippy_lints | ||
run: cargo test --features deny-warnings | ||
run: cargo test --features deny-warnings,internal-lints | ||
working-directory: clippy_lints | ||
|
||
- name: Test rustc_tools_util | ||
|
@@ -98,9 +81,3 @@ jobs: | |
cargo dev new_lint --name new_late_pass --pass late | ||
cargo check | ||
git reset --hard HEAD | ||
# Cleanup | ||
- name: Run cargo-cache --autoclean | ||
run: | | ||
cargo +nightly install cargo-cache --no-default-features --features ci-autoclean cargo-cache | ||
cargo cache |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -23,6 +23,7 @@ jobs: | |
- uses: rust-lang/simpleinfra/github-actions/cancel-outdated-builds@master | ||
with: | ||
github_token: "${{ secrets.github_token }}" | ||
|
||
- name: Checkout | ||
uses: actions/[email protected] | ||
with: | ||
|
@@ -84,31 +85,12 @@ jobs: | |
sudo apt-get install gcc-multilib libssl-dev:i386 libgit2-dev:i386 | ||
if: matrix.host == 'i686-unknown-linux-gnu' | ||
|
||
- name: rust-toolchain | ||
uses: actions-rs/[email protected] | ||
with: | ||
toolchain: nightly | ||
target: ${{ matrix.host }} | ||
profile: minimal | ||
|
||
- name: Checkout | ||
uses: actions/[email protected] | ||
|
||
- name: Run cargo update | ||
run: cargo update | ||
|
||
- name: Cache cargo dir | ||
uses: actions/cache@v2 | ||
with: | ||
path: ~/.cargo | ||
key: ${{ runner.os }}-${{ matrix.host }}-${{ hashFiles('Cargo.lock') }} | ||
restore-keys: | | ||
${{ runner.os }}-${{ matrix.host }} | ||
- name: Master Toolchain Setup | ||
run: bash setup-toolchain.sh | ||
env: | ||
HOST_TOOLCHAIN: ${{ matrix.host }} | ||
# HACK(flip1995): This is here to install the correct toolchain | ||
- name: Print cargo version | ||
run: cargo -V | ||
|
||
# Run | ||
- name: Set LD_LIBRARY_PATH (Linux) | ||
|
@@ -128,13 +110,13 @@ jobs: | |
SYSROOT=$(rustc --print sysroot) | ||
echo "$SYSROOT/bin" >> $GITHUB_PATH | ||
- name: Build with internal lints | ||
- name: Build | ||
run: cargo build --features deny-warnings,internal-lints | ||
|
||
- name: Test with internal lints | ||
- name: Test | ||
run: cargo test --features deny-warnings,internal-lints | ||
|
||
- name: Test clippy_lints with internal lints | ||
- name: Test clippy_lints | ||
run: cargo test --features deny-warnings,internal-lints | ||
working-directory: clippy_lints | ||
|
||
|
@@ -155,12 +137,6 @@ jobs: | |
env: | ||
OS: ${{ runner.os }} | ||
|
||
# Cleanup | ||
- name: Run cargo-cache --autoclean | ||
run: | | ||
cargo +nightly install cargo-cache --no-default-features --features ci-autoclean cargo-cache | ||
cargo cache | ||
integration_build: | ||
needs: changelog | ||
runs-on: ubuntu-latest | ||
|
@@ -171,29 +147,12 @@ jobs: | |
with: | ||
github_token: "${{ secrets.github_token }}" | ||
|
||
- name: rust-toolchain | ||
uses: actions-rs/[email protected] | ||
with: | ||
toolchain: nightly | ||
target: x86_64-unknown-linux-gnu | ||
profile: minimal | ||
|
||
- name: Checkout | ||
uses: actions/[email protected] | ||
|
||
- name: Run cargo update | ||
run: cargo update | ||
|
||
- name: Cache cargo dir | ||
uses: actions/cache@v2 | ||
with: | ||
path: ~/.cargo | ||
key: ${{ runner.os }}-x86_64-unknown-linux-gnu-${{ hashFiles('Cargo.lock') }} | ||
restore-keys: | | ||
${{ runner.os }}-x86_64-unknown-linux-gnu | ||
- name: Master Toolchain Setup | ||
run: bash setup-toolchain.sh | ||
# HACK(flip1995): This is here to install the correct toolchain | ||
- name: Print cargo version | ||
run: cargo -V | ||
|
||
# Run | ||
- name: Build Integration Test | ||
|
@@ -214,11 +173,6 @@ jobs: | |
name: target | ||
path: target | ||
|
||
# Cleanup | ||
- name: Run cargo-cache --autoclean | ||
run: | | ||
cargo +nightly install cargo-cache --no-default-features --features ci-autoclean cargo-cache | ||
cargo cache | ||
integration: | ||
needs: integration_build | ||
strategy: | ||
|
@@ -252,29 +206,12 @@ jobs: | |
with: | ||
github_token: "${{ secrets.github_token }}" | ||
|
||
- name: rust-toolchain | ||
uses: actions-rs/[email protected] | ||
with: | ||
toolchain: nightly | ||
target: x86_64-unknown-linux-gnu | ||
profile: minimal | ||
|
||
- name: Checkout | ||
uses: actions/[email protected] | ||
|
||
- name: Run cargo update | ||
run: cargo update | ||
|
||
- name: Cache cargo dir | ||
uses: actions/cache@v2 | ||
with: | ||
path: ~/.cargo | ||
key: ${{ runner.os }}-x86_64-unknown-linux-gnu-${{ hashFiles('Cargo.lock') }} | ||
restore-keys: | | ||
${{ runner.os }}-x86_64-unknown-linux-gnu | ||
- name: Master Toolchain Setup | ||
run: bash setup-toolchain.sh | ||
# HACK(flip1995): This is here to install the correct toolchain | ||
- name: Print cargo version | ||
run: cargo -V | ||
|
||
# Download | ||
- name: Download target dir | ||
|
@@ -293,12 +230,6 @@ jobs: | |
INTEGRATION: ${{ matrix.integration }} | ||
RUSTUP_TOOLCHAIN: master | ||
|
||
# Cleanup | ||
- name: Run cargo-cache --autoclean | ||
run: | | ||
cargo +nightly install cargo-cache --no-default-features --features ci-autoclean cargo-cache | ||
cargo cache | ||
# These jobs doesn't actually test anything, but they're only used to tell | ||
# bors the build completed, as there is no practical way to detect when a | ||
# workflow is successful listening to webhooks only. | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -22,16 +22,20 @@ jobs: | |
|
||
steps: | ||
# Setup | ||
- name: Checkout | ||
uses: actions/[email protected] | ||
|
||
- name: remove toolchain file | ||
run: rm rust-toolchain | ||
|
||
- name: rust-toolchain | ||
uses: actions-rs/[email protected] | ||
with: | ||
toolchain: nightly | ||
target: x86_64-unknown-linux-gnu | ||
profile: minimal | ||
components: rustfmt | ||
|
||
- name: Checkout | ||
uses: actions/[email protected] | ||
default: true | ||
|
||
# Run | ||
- name: Build | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -70,8 +70,8 @@ But we can make it nest-less by using [if_chain] macro, [like this][nest-less]. | |
|
||
[`E-medium`] issues are generally pretty easy too, though it's recommended you work on an [`good first issue`] | ||
first. Sometimes they are only somewhat involved code wise, but not difficult per-se. | ||
Note that [`E-medium`] issues may require some knowledge of Clippy internals or some | ||
debugging to find the actual problem behind the issue. | ||
Note that [`E-medium`] issues may require some knowledge of Clippy internals or some | ||
debugging to find the actual problem behind the issue. | ||
|
||
[`T-middle`] issues can be more involved and require verifying types. The [`ty`] module contains a | ||
lot of methods that are useful, though one of the most useful would be `expr_ty` (gives the type of | ||
|
@@ -182,18 +182,26 @@ That's why the `else_if_without_else` example uses the `register_early_pass` fun | |
[early_lint_pass]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_lint/trait.EarlyLintPass.html | ||
[late_lint_pass]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_lint/trait.LateLintPass.html | ||
|
||
## Fixing build failures caused by Rust | ||
## Syncing changes between Clippy and [`rust-lang/rust`] | ||
|
||
Clippy currently gets built with `rustc` of the `rust-lang/rust` `master` | ||
branch. Most of the times we have to adapt to the changes and only very rarely | ||
there's an actual bug in Rust. | ||
Clippy currently gets built with a pinned nightly version. | ||
|
||
If you decide to make Clippy work again with a Rust commit that breaks it, you | ||
have to sync the `rust-lang/rust-clippy` repository with the `subtree` copy of | ||
Clippy in the `rust-lang/rust` repository. | ||
In the `rust-lang/rust` repository, where rustc resides, there's a copy of Clippy | ||
that compiler hackers modify from time to time to adapt to changes in the unstable | ||
API of the compiler. | ||
|
||
For general information about `subtree`s in the Rust repository see [Rust's | ||
`CONTRIBUTING.md`][subtree]. | ||
We need to sync these changes back to this repository periodically, and the changes | ||
made to this repository in the meantime also need to be synced to the `rust-lang/rust` repository. | ||
|
||
To avoid flooding the `rust-lang/rust` PR queue, this two-way sync process is done | ||
in a bi-weekly basis if there's no urgent changes. This is done starting on the day of | ||
the Rust stable release and then every other week. That way we guarantee that we keep | ||
this repo up to date with the latest compiler API, and every feature in Clippy is available | ||
for 2 weeks in nightly, before it can get to beta. For reference, the first sync | ||
following this cadence was performed the 2020-08-27. | ||
|
||
This process is described in detail in the following sections. For general information | ||
about `subtree`s in the Rust repository see [Rust's `CONTRIBUTING.md`][subtree]. | ||
|
||
### Patching git-subtree to work with big repos | ||
|
||
|
@@ -222,13 +230,14 @@ This shell has a hardcoded recursion limit set to 1000. In order to make this pr | |
you need to force the script to run `bash` instead. You can do this by editing the first | ||
line of the `git-subtree` script and changing `sh` to `bash`. | ||
|
||
### Performing the sync | ||
### Performing the sync from [`rust-lang/rust`] to Clippy | ||
|
||
Here is a TL;DR version of the sync process (all of the following commands have | ||
to be run inside the `rust` directory): | ||
|
||
1. Clone the [`rust-lang/rust`] repository | ||
2. Sync the changes to the rust-copy of Clippy to your Clippy fork: | ||
1. Clone the [`rust-lang/rust`] repository or make sure it is up to date. | ||
2. Checkout the commit from the latest available nightly. You can get it using `rustup check`. | ||
3. Sync the changes to the rust-copy of Clippy to your Clippy fork: | ||
```bash | ||
# Make sure to change `your-github-name` to your github name in the following command | ||
git subtree push -P src/tools/clippy [email protected]:your-github-name/rust-clippy sync-from-rust | ||
|
@@ -246,17 +255,11 @@ to be run inside the `rust` directory): | |
git checkout sync-from-rust | ||
git merge upstream/master | ||
``` | ||
3. Open a PR to `rust-lang/rust-clippy` and wait for it to get merged (to | ||
4. Open a PR to `rust-lang/rust-clippy` and wait for it to get merged (to | ||
accelerate the process ping the `@rust-lang/clippy` team in your PR and/or | ||
~~annoy~~ ask them in the [Zulip] stream.) | ||
|
||
### Syncing back changes in Clippy to [`rust-lang/rust`] | ||
|
||
To avoid flooding the [`rust-lang/rust`] PR queue, changes in Clippy's repo are synced back | ||
in a bi-weekly basis if there's no urgent changes. This is done starting on the day of | ||
the Rust stable release and then every other week. That way we guarantee that | ||
every feature in Clippy is available for 2 weeks in nightly, before it can get to beta. | ||
For reference, the first sync following this cadence was performed the 2020-08-27. | ||
### Performing the sync from Clippy to [`rust-lang/rust`] | ||
|
||
All of the following commands have to be run inside the `rust` directory. | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,3 @@ | ||
nightly | ||
[toolchain] | ||
channel = "nightly-2020-12-09" | ||
components = ["llvm-tools-preview", "rustc-dev", "rust-src", "rustfmt"] |
Oops, something went wrong.