Skip to content

Commit 405c4bf

Browse files
committed
runner: add support for rustdoc runs
1 parent 2b4aa37 commit 405c4bf

File tree

6 files changed

+72
-1
lines changed

6 files changed

+72
-1
lines changed

docs/bot-usage.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ The following experiment modes are currently available:
6767
* `build-and-test`: run `cargo build` and `cargo test` on every crate
6868
* `build-only`: run `cargo build` on every crate
6969
* `check-only`: run `cargo check` on every crate (faster)
70+
* `rustdoc`: run `cargo doc --no-deps` on every crate
7071

7172
The mode you should use depends on what your experiment is testing:
7273

src/experiments.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ string_enum!(pub enum Mode {
2121
BuildAndTest => "build-and-test",
2222
BuildOnly => "build-only",
2323
CheckOnly => "check-only",
24+
Rustdoc => "rustdoc",
2425
UnstableFeatures => "unstable-features",
2526
});
2627

src/runner/graph.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,10 @@ pub(super) fn build_graph(ex: &Experiment, config: &Config) -> TasksGraph {
255255
tc: tc.clone(),
256256
quiet,
257257
},
258+
Mode::Rustdoc => TaskStep::Rustdoc {
259+
tc: tc.clone(),
260+
quiet,
261+
},
258262
Mode::UnstableFeatures => TaskStep::UnstableFeatures { tc: tc.clone() },
259263
},
260264
},

src/runner/tasks.rs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ pub(super) enum TaskStep {
1414
BuildAndTest { tc: Toolchain, quiet: bool },
1515
BuildOnly { tc: Toolchain, quiet: bool },
1616
CheckOnly { tc: Toolchain, quiet: bool },
17+
Rustdoc { tc: Toolchain, quiet: bool },
1718
UnstableFeatures { tc: Toolchain },
1819
}
1920

@@ -39,6 +40,12 @@ impl fmt::Debug for TaskStep {
3940
write!(f, " (quiet)")?;
4041
}
4142
}
43+
TaskStep::Rustdoc { ref tc, quiet } => {
44+
write!(f, "doc {}", tc.to_string())?;
45+
if quiet {
46+
write!(f, " (quiet)")?;
47+
}
48+
}
4249
TaskStep::UnstableFeatures { ref tc } => {
4350
write!(f, "find unstable features on {}", tc.to_string())?;
4451
}
@@ -71,6 +78,7 @@ impl Task {
7178
TaskStep::BuildAndTest { ref tc, .. }
7279
| TaskStep::BuildOnly { ref tc, .. }
7380
| TaskStep::CheckOnly { ref tc, .. }
81+
| TaskStep::Rustdoc { ref tc, .. }
7482
| TaskStep::UnstableFeatures { ref tc } => {
7583
db.get_result(ex, tc, &self.krate).unwrap_or(None).is_none()
7684
}
@@ -89,6 +97,7 @@ impl Task {
8997
TaskStep::BuildAndTest { ref tc, .. }
9098
| TaskStep::BuildOnly { ref tc, .. }
9199
| TaskStep::CheckOnly { ref tc, .. }
100+
| TaskStep::Rustdoc { ref tc, .. }
92101
| TaskStep::UnstableFeatures { ref tc } => {
93102
db.record_result(ex, tc, &self.krate, || {
94103
error!("this task or one of its parent failed!");
@@ -114,6 +123,7 @@ impl Task {
114123
}
115124
TaskStep::BuildOnly { ref tc, quiet } => self.run_build_only(config, ex, tc, db, quiet),
116125
TaskStep::CheckOnly { ref tc, quiet } => self.run_check_only(config, ex, tc, db, quiet),
126+
TaskStep::Rustdoc { ref tc, quiet } => self.run_rustdoc(config, ex, tc, db, quiet),
117127
TaskStep::UnstableFeatures { ref tc } => self.run_unstable_features(config, ex, db, tc),
118128
}
119129
}
@@ -199,6 +209,26 @@ impl Task {
199209
).map(|_| ())
200210
}
201211

212+
fn run_rustdoc<DB: WriteResults>(
213+
&self,
214+
config: &Config,
215+
ex: &Experiment,
216+
tc: &Toolchain,
217+
db: &DB,
218+
quiet: bool,
219+
) -> Fallible<()> {
220+
test::run_test(
221+
config,
222+
"documenting",
223+
ex,
224+
tc,
225+
&self.krate,
226+
db,
227+
quiet,
228+
test::test_rustdoc,
229+
).map(|_| ())
230+
}
231+
202232
fn run_unstable_features<DB: WriteResults>(
203233
&self,
204234
config: &Config,

src/runner/test.rs

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,20 @@ fn run_cargo(
4343
rustflags.push_str(tc_rustflags);
4444
}
4545

46+
let rustflags_env = if let Some(&"doc") = args.get(0) {
47+
"RUSTDOCFLAGS"
48+
} else {
49+
"RUSTFLAGS"
50+
};
51+
4652
RunCommand::new(CARGO.toolchain(toolchain))
4753
.args(args)
4854
.quiet(quiet)
4955
.cd(source_path)
5056
.env("CARGO_TARGET_DIR", "/target")
5157
.env("CARGO_INCREMENTAL", "0")
5258
.env("RUST_BACKTRACE", "full")
53-
.env("RUSTFLAGS", rustflags)
59+
.env(rustflags_env, rustflags)
5460
.sandboxed()
5561
.mount(target_dir, "/target", MountPerms::ReadWrite)
5662
.memory_limit(Some(config.sandbox.memory_limit))
@@ -202,3 +208,31 @@ pub fn test_check_only(
202208
Ok(TestResult::TestPass)
203209
}
204210
}
211+
212+
pub fn test_rustdoc(
213+
config: &Config,
214+
ex: &Experiment,
215+
source_path: &Path,
216+
toolchain: &Toolchain,
217+
quiet: bool,
218+
) -> Fallible<TestResult> {
219+
let res = run_cargo(
220+
config,
221+
ex,
222+
source_path,
223+
toolchain,
224+
quiet,
225+
&["doc", "--frozen", "--no-deps", "--document-private-items"],
226+
);
227+
228+
// Make sure to remove the built documentation
229+
// There is no point in storing it after the build is done
230+
let target_dir = toolchain.target_dir(&ex.name);
231+
::utils::fs::remove_dir_all(&target_dir.join("doc"))?;
232+
233+
if let Err(err) = res {
234+
Ok(TestResult::BuildFail(failure_reason(&err)))
235+
} else {
236+
Ok(TestResult::TestPass)
237+
}
238+
}

src/server/routes/ui/experiments.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ impl ExperimentData {
3838
Mode::BuildAndTest => "cargo test",
3939
Mode::BuildOnly => "cargo build",
4040
Mode::CheckOnly => "cargo check",
41+
Mode::Rustdoc => "cargo doc",
4142
Mode::UnstableFeatures => "unstable features",
4243
},
4344
assigned_to: experiment.assigned_to.as_ref().map(|a| a.to_string()),

0 commit comments

Comments
 (0)