about summary refs log tree commit diff
diff options
context:
space:
mode:
authorGuillaume Gomez <guillaume1.gomez@gmail.com>2025-06-19 16:50:01 +0200
committerGuillaume Gomez <guillaume1.gomez@gmail.com>2025-06-20 15:49:47 +0200
commitbbe8a2ad19c0486986a535c103e57fabfbb81441 (patch)
tree204677ca4ad58bc6fa08d825b9b82a609a91a035
parent21805038412de0224f7cefe3b4c98cc7fda17c39 (diff)
downloadrust-bbe8a2ad19c0486986a535c103e57fabfbb81441.tar.gz
rust-bbe8a2ad19c0486986a535c103e57fabfbb81441.zip
Generate base commit in rustdoc_json tidy checks
-rw-r--r--src/build_helper/src/git.rs2
-rw-r--r--src/tools/tidy/src/rustdoc_json.rs31
2 files changed, 28 insertions, 5 deletions
diff --git a/src/build_helper/src/git.rs b/src/build_helper/src/git.rs
index 438cd14389c..9d1195aadf8 100644
--- a/src/build_helper/src/git.rs
+++ b/src/build_helper/src/git.rs
@@ -198,7 +198,7 @@ fn get_latest_upstream_commit_that_modified_files(
 /// author.
 ///
 /// If we are in CI, we simply return our first parent.
-fn get_closest_upstream_commit(
+pub fn get_closest_upstream_commit(
     git_dir: Option<&Path>,
     config: &GitConfig<'_>,
     env: CiEnv,
diff --git a/src/tools/tidy/src/rustdoc_json.rs b/src/tools/tidy/src/rustdoc_json.rs
index a98c4f4cc3e..3f78d565deb 100644
--- a/src/tools/tidy/src/rustdoc_json.rs
+++ b/src/tools/tidy/src/rustdoc_json.rs
@@ -3,16 +3,39 @@
 
 use std::process::Command;
 
+use build_helper::ci::CiEnv;
+use build_helper::git::{GitConfig, get_closest_upstream_commit};
+use build_helper::stage0_parser::parse_stage0_file;
+
 fn git_diff(base_commit: &str, extra_arg: &str) -> Option<String> {
     let output = Command::new("git").arg("diff").arg(base_commit).arg(extra_arg).output().ok()?;
     Some(String::from_utf8_lossy(&output.stdout).into())
 }
 
 pub fn check(bad: &mut bool) {
-    let Ok(base_commit) = std::env::var("BASE_COMMIT") else {
-        // Not in CI so nothing we can check here.
-        println!("not checking rustdoc JSON `FORMAT_VERSION` update");
-        return;
+    println!("Checking tidy rustdoc_json...");
+    let stage0 = parse_stage0_file();
+    let base_commit = match get_closest_upstream_commit(
+        None,
+        &GitConfig {
+            nightly_branch: &stage0.config.nightly_branch,
+            git_merge_commit_email: &stage0.config.git_merge_commit_email,
+        },
+        CiEnv::current(),
+    ) {
+        Ok(Some(commit)) => commit,
+        Ok(None) => {
+            *bad = true;
+            eprintln!("No base commit found, skipping rustdoc_json check");
+            return;
+        }
+        Err(error) => {
+            *bad = true;
+            eprintln!(
+                "Failed to retrieve base commit for rustdoc_json check because of `{error}`, skipping it"
+            );
+            return;
+        }
     };
 
     // First we check that `src/rustdoc-json-types` was modified.