From f01adc0787cc40d7d94c149803e5371ff9cfd0bb Mon Sep 17 00:00:00 2001 From: Pietro Albini Date: Mon, 10 Jun 2024 14:41:34 +0200 Subject: [PATCH 1/6] only search src/version in rust-lang/rust, not subtrees --- src/github.rs | 77 ++++++++++++++++++++++++++------------------------- 1 file changed, 40 insertions(+), 37 deletions(-) diff --git a/src/github.rs b/src/github.rs index e1ddc1e..a371f40 100644 --- a/src/github.rs +++ b/src/github.rs @@ -355,51 +355,48 @@ impl RepositoryClient<'_> { start: &str, path: &str, ) -> anyhow::Result { - self.start_new_request()?; - self.client.get(true)?; - self.client.url(&format!( - "https://api.github.com/repos/{repo}/commits/{start}", - repo = self.repo - ))?; - let resolved_start = self - .client - .without_body() - .send_with_response::()? - .sha; - for page in 1..20 { + const MAX_COMMITS: usize = 200; + const BORS_EMAIL: &str = "bors@rust-lang.org"; + + let mut commit = start.to_string(); + let mut scanned_commits = 0; + for _ in 0..MAX_COMMITS { + scanned_commits += 1; + self.start_new_request()?; self.client.get(true)?; self.client.url(&format!( - "https://api.github.com/repos/{repo}/commits?sha={resolved_start}&per_page=100&page={page}&author=bors", + "https://api.github.com/repos/{repo}/commits/{commit}", repo = self.repo ))?; - let commits = self + + let commit_data = self .client .without_body() - .send_with_response::>()?; - for commit in commits { - self.start_new_request()?; - self.client.get(true)?; - self.client.url(&format!( - "https://api.github.com/repos/{repo}/commits/{sha}", - repo = self.repo, - sha = commit.sha, - ))?; - let commit = self - .client - .without_body() - .send_with_response::()?; - if commit.files.iter().any(|f| f.filename == path) { - return Ok(commit); - } + .send_with_response::()?; + + // We pick the *first* parent commit to continue walking through the commit graph. In + // a merge commit, the first parent is always the merge base (i.e. the master branch), + // while the second parent is always the branch being merged in. + // + // This is important because we only want bors merge commits for branches merged into + // Rust's master branch, not bors merge commits in subtrees being pulled in. + let Some(parent) = &commit_data.parents.first() else { + break; + }; + commit.clone_from(&parent.sha); + + if commit_data.commit.author.email != BORS_EMAIL { + continue; + } + if commit_data.files.iter().any(|f| f.filename == path) { + return Ok(commit_data); } } anyhow::bail!( - "Failed to find bors commit touching {:?} in start={} ancestors (scanned {} commits)", - path, - start, - 20 * 100, + "Failed to find bors commit touching {path:?} in \ + start={start} ancestors (scanned {scanned_commits} commits)" ); } @@ -511,15 +508,21 @@ pub(crate) struct CreateTag<'a> { #[derive(serde::Deserialize)] pub(crate) struct FullCommitData { - #[allow(unused)] + #[cfg_attr(not(test), allow(unused))] pub(crate) sha: String, pub(crate) parents: Vec, + pub(crate) commit: CommitCommit, pub(crate) files: Vec, } #[derive(serde::Deserialize)] -pub(crate) struct CommitData { - pub(crate) sha: String, +pub(crate) struct CommitCommit { + pub(crate) author: CommitAuthor, +} + +#[derive(serde::Deserialize)] +pub(crate) struct CommitAuthor { + pub(crate) email: String, } #[derive(serde::Deserialize)] From 39152f3740f1ad0c0b4605291b698b5f38fafc97 Mon Sep 17 00:00:00 2001 From: Jan David Date: Tue, 1 Oct 2024 15:49:31 +0200 Subject: [PATCH 2/6] Bump version of actions/upload-artifact action v2 of `actions/upload-artifact` is no longer supported and using it will fail any workflow immediately. v3 will be deprecated in a few months, so we are immediately upgrading to the latest version. See https://github.com/actions/upload-artifact for more information. --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 71178f6..c318fef 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -78,7 +78,7 @@ jobs: if: github.event_name == 'push' && github.repository == 'rust-lang/promote-release' && github.ref == 'refs/heads/master' - name: Upload the Docker image we built to GitHub Actions artifacts - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: name: docker-image path: promote-release.tar.zstd From aee55d2ea774ade0103989c5c806a602e2a86cec Mon Sep 17 00:00:00 2001 From: Jan David Date: Tue, 1 Oct 2024 15:59:48 +0200 Subject: [PATCH 3/6] Fix how Docker Compose is called --- .github/workflows/ci.yml | 5 ++--- run.sh | 6 +++--- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c318fef..ce221ac 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,5 +1,4 @@ --- - name: CI on: push: @@ -46,13 +45,13 @@ jobs: run: rustup self update && rustup update stable - name: Start the local environment - run: docker-compose up -d + run: docker compose up -d - name: Run the local release process for channel ${{ matrix.channel }} run: ./run.sh ${{ matrix.channel }} - name: Validate the generated signatures - run: docker-compose exec -T local /src/local/check-signature.sh ${{ matrix.channel }} + run: docker compose exec -T local /src/local/check-signature.sh ${{ matrix.channel }} - name: Remove the previously installed ${{ matrix.channel }} toolchain run: rustup toolchain remove ${{ matrix.channel }} diff --git a/run.sh b/run.sh index e2a66c0..60be624 100755 --- a/run.sh +++ b/run.sh @@ -12,7 +12,7 @@ fi channel="$1" override_commit="${2-}" -container_id="$(docker-compose ps -q local)" +container_id="$(docker compose ps -q local)" if [[ "${container_id}" == "" ]]; then container_status="missing" else @@ -22,7 +22,7 @@ if [[ "${container_status}" != "running" ]]; then echo "Error: the local environment is not running!" echo "You can start it by running in a new terminal the following command:" echo - echo " docker-compose up" + echo " docker compose up" echo exit 1 fi @@ -31,4 +31,4 @@ fi cargo build --release # Run the command inside the docker environment. -docker-compose exec -T local /src/local/run.sh "${channel}" "${override_commit}" +docker compose exec -T local /src/local/run.sh "${channel}" "${override_commit}" From 6065fe8ef6aa4ce67c05d64b4ac261a52c41dfb2 Mon Sep 17 00:00:00 2001 From: Jan David Date: Tue, 1 Oct 2024 16:02:44 +0200 Subject: [PATCH 4/6] Fix warning caused by needless borrow --- src/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index 5dd7aea..9bafd1c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -378,7 +378,7 @@ impl Context { .arg("cp") .arg("--recursive") .arg("--only-show-errors") - .arg(&self.s3_artifacts_url(&format!("{}/", rev))) + .arg(self.s3_artifacts_url(&format!("{}/", rev))) .arg(format!("{}/", dl.display())))?; let mut files = dl.read_dir()?; From 07648ecc2c30403fe39c63bef6f47db3a67a328a Mon Sep 17 00:00:00 2001 From: Jan David Date: Tue, 1 Oct 2024 16:09:33 +0200 Subject: [PATCH 5/6] Remove deprecated version field --- docker-compose.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index fd12ca5..5b99bbc 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,6 +1,4 @@ --- -version: '3' - services: minio: image: quay.io/minio/minio:RELEASE.2023-04-13T03-08-07Z From 2cb7e618b26fd2562f4f8e10d500825919eccab2 Mon Sep 17 00:00:00 2001 From: Jan David Date: Wed, 2 Oct 2024 10:53:41 +0200 Subject: [PATCH 6/6] Bump version of actions/download-artifact action The actions/download-artifact action must be on the same version as the actions/upload-artifact action. --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ce221ac..9c7c037 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -95,7 +95,7 @@ jobs: steps: - name: Download the Docker image previously built - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: docker-image