diff --git a/.gitignore b/.gitignore index fbf6b41c..d194918f 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,5 @@ target/ libbpf/ .vscode/ !.vscode/settings.json +site/ +header.html diff --git a/netlify.toml b/netlify.toml index 12363de1..0b8e1991 100644 --- a/netlify.toml +++ b/netlify.toml @@ -1,7 +1,3 @@ [build] - publish = "target/doc" + publish = "site" command = "rustup toolchain install nightly && cargo xtask docs" - -[[redirects]] - from = "/" - to = "/aya" diff --git a/xtask/Cargo.toml b/xtask/Cargo.toml index a40372c5..6a709059 100644 --- a/xtask/Cargo.toml +++ b/xtask/Cargo.toml @@ -11,4 +11,5 @@ anyhow = "1" syn = "1" quote = "1" proc-macro2 = "1" -indexmap = "1.6" \ No newline at end of file +indexmap = "1.6" +indoc = "1.0" diff --git a/xtask/src/docs/mod.rs b/xtask/src/docs/mod.rs index 7cc0922d..c58e4953 100644 --- a/xtask/src/docs/mod.rs +++ b/xtask/src/docs/mod.rs @@ -5,9 +5,31 @@ use std::{ use std::{fs, io, io::Write}; +use indoc::indoc; + pub fn docs() -> Result<(), anyhow::Error> { let mut working_dir = PathBuf::from("."); + let replace = Command::new("sed") + .current_dir(&working_dir) + .args(vec![ + "-i.bak", + "s/crabby.svg/crabby_dev.svg/", + "aya/src/lib.rs", + ]) + .status() + .expect("failed to replace logo"); + assert!(replace.success()); + + let mut header_path = PathBuf::from("."); + header_path.push("header.html"); + let mut header = fs::File::create(&header_path).expect("can't create header.html"); + header + .write(r#""#.as_bytes()) + .expect("can't write header.html contents"); + header.flush().expect("couldn't flush contents"); + + let abs_header_path = fs::canonicalize(&header_path).unwrap(); let args = vec![ "+nightly", "doc", @@ -18,27 +40,73 @@ pub fn docs() -> Result<(), anyhow::Error> { let status = Command::new("cargo") .current_dir(&working_dir) + .env( + "RUSTDOCFLAGS", + format!("--html-in-header {}", abs_header_path.to_str().unwrap()), + ) .args(&args) .status() .expect("failed to build aya docs"); assert!(status.success()); working_dir.push("bpf"); + + let replace = Command::new("sed") + .current_dir(&working_dir) + .args(vec![ + "-i.bak", + "s/crabby.svg/crabby_dev.svg/", + "aya-bpf/src/lib.rs", + ]) + .status() + .expect("failed to replace logo"); + assert!(replace.success()); + let status = Command::new("cargo") .current_dir(&working_dir) + .env( + "RUSTDOCFLAGS", + format!("--html-in-header {}", abs_header_path.to_str().unwrap()), + ) .args(&args) .status() .expect("failed to build aya-bpf docs"); assert!(status.success()); - copy_dir_all("./bpf/target/doc", "./target/doc")?; + copy_dir_all("./target/doc", "site/user")?; + copy_dir_all("./bpf/target/doc", "site/bpf")?; + + let mut robots = fs::File::create("site/robots.txt").expect("can't create robots.txt"); + robots + .write( + indoc! {r#" + User-Agent:* + Disallow: / + "#} + .as_bytes(), + ) + .expect("can't write robots.txt"); + + let mut index = fs::File::create("site/index.html").expect("can't create index.html"); + index + .write( + indoc! {r#" + + + + + + + "#} + .as_bytes(), + ) + .expect("can't write index.html"); - let crates_js = b"window.ALL_CRATES = [\"aya\", \"aya_bpf\", \"aya_bpf_bindings\", \"aya_bpf_cty\", \"aya_bpf_macros\", \"aya_gen\"];\n"; - let mut file = fs::File::options() - .read(true) - .write(true) - .open("./target/doc/crates.js")?; - file.write_all(crates_js)?; + fs::rename("aya/src/lib.rs.bak", "aya/src/lib.rs").unwrap(); + fs::rename("bpf/aya-bpf/src/lib.rs.bak", "bpf/aya-bpf/src/lib.rs").unwrap(); Ok(()) }