1use crate::tasks::workflows::{
2 run_tests::run_tests_in,
3 runners::{self, Platform},
4 steps::{self, FluentBuilder, NamedJob, named, release_job},
5};
6use gh_workflow::*;
7
8pub(crate) fn run_docs_checks() -> Workflow {
9 let docs = check_docs();
10 named::workflow()
11 .map(|workflow| run_tests_in(&["docs/**", "crates/docs_preprocessor/**"], workflow))
12 .add_job(docs.name, docs.job)
13}
14
15fn check_docs() -> NamedJob {
16 named::job(
17 release_job(&[])
18 .runs_on(runners::LINUX_LARGE)
19 .add_step(steps::checkout_repo())
20 .add_step(steps::setup_cargo_config(Platform::Linux))
21 // todo(ci): un-inline build_docs/action.yml here
22 .add_step(steps::cache_rust_dependencies())
23 .add_step(lychee_link_check("./docs/src/**/*")) // check markdown links
24 .map(steps::install_linux_dependencies)
25 .add_step(install_mdbook())
26 .add_step(build_docs())
27 .add_step(lychee_link_check("target/deploy/docs")), // check links in generated html
28 )
29}
30
31fn lychee_link_check(dir: &str) -> Step<Use> {
32 named::uses(
33 "lycheeverse",
34 "lychee-action",
35 "82202e5e9c2f4ef1a55a3d02563e1cb6041e5332",
36 ) // v2.4.1
37 .add_with(("args", format!("--no-progress --exclude '^http' '{dir}'")))
38 .add_with(("fail", true))
39}
40
41fn install_mdbook() -> Step<Use> {
42 named::uses(
43 "peaceiris",
44 "actions-mdbook",
45 "ee69d230fe19748b7abf22df32acaa93833fad08", // v2
46 )
47 .with(("mdbook-version", "0.4.37"))
48}
49
50fn build_docs() -> Step<Run> {
51 named::bash(indoc::indoc! {r#"
52 mkdir -p target/deploy
53 mdbook build ./docs --dest-dir=../target/deploy/docs/
54 "#})
55}