Skip to content

Commit

Permalink
Check links on all platforms when running locally
Browse files Browse the repository at this point in the history
  • Loading branch information
mati865 committed Aug 9, 2019
1 parent d8f8be4 commit c7e16c5
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 13 deletions.
26 changes: 23 additions & 3 deletions src/bootstrap/tool.rs
Expand Up @@ -9,7 +9,7 @@ use build_helper::t;
use crate::Mode;
use crate::Compiler;
use crate::builder::{Step, RunConfig, ShouldRun, Builder};
use crate::util::{exe, add_lib_path};
use crate::util::{exe, add_lib_path, CiEnv};
use crate::compile;
use crate::channel::GitInfo;
use crate::channel;
Expand Down Expand Up @@ -279,11 +279,26 @@ pub fn prepare_tool_cargo(
cargo
}

fn rustbook_features() -> Vec<String> {
let mut features = Vec::new();

// Due to CI budged and risk of spurious failures we want to limit jobs running this check.
// At same time local builds should run it regardless of the platform.
// `CiEnv::None` means it's local build and `CHECK_LINKS` is defined in x86_64-gnu-tools to
// explicitly enable it on single job
if CiEnv::current() == CiEnv::None || env::var("CHECK_LINKS").is_ok() {
features.push("linkcheck".to_string());
}

features
}

macro_rules! bootstrap_tool {
($(
$name:ident, $path:expr, $tool_name:expr
$(,llvm_tools = $llvm:expr)*
$(,is_external_tool = $external:expr)*
$(,features = $features:expr)*
;
)+) => {
#[derive(Copy, PartialEq, Eq, Clone)]
Expand Down Expand Up @@ -350,7 +365,12 @@ macro_rules! bootstrap_tool {
} else {
SourceType::InTree
},
extra_features: Vec::new(),
extra_features: {
// FIXME(#60643): avoid this lint by using `_`
let mut _tmp = Vec::new();
$(_tmp.extend($features);)*
_tmp
},
}).expect("expected to build -- essential tool")
}
}
Expand All @@ -359,7 +379,7 @@ macro_rules! bootstrap_tool {
}

bootstrap_tool!(
Rustbook, "src/tools/rustbook", "rustbook";
Rustbook, "src/tools/rustbook", "rustbook", features = rustbook_features();
UnstableBookGen, "src/tools/unstable-book-gen", "unstable-book-gen";
Tidy, "src/tools/tidy", "tidy";
Linkchecker, "src/tools/linkchecker", "linkchecker";
Expand Down
3 changes: 3 additions & 0 deletions src/ci/docker/x86_64-gnu-tools/Dockerfile
Expand Up @@ -21,6 +21,9 @@ COPY x86_64-gnu-tools/checkregression.py /tmp/
COPY x86_64-gnu-tools/checktools.sh /tmp/
COPY x86_64-gnu-tools/repo.sh /tmp/

# Run rustbook with `linkcheck` feature enabled
ENV CHECK_LINKS 1

ENV RUST_CONFIGURE_ARGS \
--build=x86_64-unknown-linux-gnu \
--save-toolstates=/tmp/toolstates.json
Expand Down
7 changes: 4 additions & 3 deletions src/tools/rustbook/Cargo.toml
Expand Up @@ -5,14 +5,15 @@ version = "0.1.0"
license = "MIT OR Apache-2.0"
edition = "2018"

[features]
linkcheck = ["mdbook-linkcheck"]

[dependencies]
clap = "2.25.0"
failure = "0.1"
mdbook-linkcheck = { version = "0.3.0", optional = true }

[dependencies.mdbook]
version = "0.3.0"
default-features = false
features = ["search"]

[target.'cfg(all(target_arch = "x86_64", target_os = "linux"))'.dependencies]
mdbook-linkcheck = "0.3.0"
13 changes: 6 additions & 7 deletions src/tools/rustbook/src/main.rs
Expand Up @@ -8,10 +8,9 @@ use clap::{App, ArgMatches, SubCommand, AppSettings};
use mdbook::MDBook;
use mdbook::errors::{Result as Result3};

#[cfg(all(target_arch = "x86_64", target_os = "linux"))]
#[cfg(feature = "linkcheck")]
use mdbook::renderer::RenderContext;

#[cfg(all(target_arch = "x86_64", target_os = "linux"))]
#[cfg(feature = "linkcheck")]
use mdbook_linkcheck::{self, errors::BrokenLinks};
use failure::Error;

Expand Down Expand Up @@ -52,7 +51,7 @@ fn main() {
if let Err(err) = linkcheck(sub_matches) {
eprintln!("Error: {}", err);

#[cfg(all(target_arch = "x86_64", target_os = "linux"))]
#[cfg(feature = "linkcheck")]
{
if let Ok(broken_links) = err.downcast::<BrokenLinks>() {
for cause in broken_links.links().iter() {
Expand All @@ -68,7 +67,7 @@ fn main() {
};
}

#[cfg(all(target_arch = "x86_64", target_os = "linux"))]
#[cfg(feature = "linkcheck")]
pub fn linkcheck(args: &ArgMatches<'_>) -> Result<(), Error> {
let book_dir = get_book_dir(args);
let book = MDBook::load(&book_dir).unwrap();
Expand All @@ -78,9 +77,9 @@ pub fn linkcheck(args: &ArgMatches<'_>) -> Result<(), Error> {
mdbook_linkcheck::check_links(&render_ctx)
}

#[cfg(not(all(target_arch = "x86_64", target_os = "linux")))]
#[cfg(not(feature = "linkcheck"))]
pub fn linkcheck(_args: &ArgMatches<'_>) -> Result<(), Error> {
println!("mdbook-linkcheck only works on x86_64 linux targets.");
println!("mdbook-linkcheck is disabled.");
Ok(())
}

Expand Down

0 comments on commit c7e16c5

Please sign in to comment.