mirror of https://github.com/aya-rs/aya
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
116 lines
3.4 KiB
Rust
116 lines
3.4 KiB
Rust
1 year ago
|
use anyhow::{anyhow, Context as _, Result};
|
||
1 year ago
|
use cargo_metadata::{Metadata, MetadataCommand};
|
||
|
use indoc::{indoc, writedoc};
|
||
|
use std::{ffi::OsString, fs, io::Write as _, process::Command};
|
||
2 years ago
|
|
||
1 year ago
|
pub fn exec(cmd: &mut Command) -> Result<()> {
|
||
|
let status = cmd
|
||
|
.status()
|
||
|
.with_context(|| format!("failed to run {cmd:?}"))?;
|
||
|
match status.code() {
|
||
|
Some(code) => match code {
|
||
|
0 => Ok(()),
|
||
|
code => Err(anyhow!("{cmd:?} exited with code {code}")),
|
||
|
},
|
||
|
None => Err(anyhow!("{cmd:?} terminated by signal")),
|
||
|
}
|
||
|
}
|
||
|
|
||
1 year ago
|
pub fn docs() -> Result<()> {
|
||
1 year ago
|
const PACKAGE_TO_DESCRIPTION: &[(&str, &str)] = &[
|
||
|
("aya", "User-space BPF program loading and manipulation"),
|
||
|
("aya-bpf", "Kernel-space BPF program implementation toolkit"),
|
||
|
("aya-log-ebpf", "Kernel-space logging from BPF programs"),
|
||
|
(
|
||
|
"aya-log",
|
||
|
"User-space consumption of logs from BPF programs",
|
||
|
),
|
||
|
];
|
||
1 year ago
|
|
||
|
let Metadata {
|
||
|
workspace_root,
|
||
|
target_directory,
|
||
|
..
|
||
|
} = MetadataCommand::new().exec().context("cargo metadata")?;
|
||
|
|
||
|
exec(
|
||
|
Command::new("cargo")
|
||
|
.current_dir(&workspace_root)
|
||
|
.args(["clean", "--doc"]),
|
||
|
)?;
|
||
|
|
||
|
let tmp = tempfile::tempdir().context("create tempdir")?;
|
||
|
let header = tmp.path().join("header.html");
|
||
|
fs::write(&header, r#"<meta name="robots" content="noindex">"#).context("write header.html")?;
|
||
|
|
||
|
let mut rustdocflags = OsString::new();
|
||
|
rustdocflags.push("--cfg docsrs --html-in-header ");
|
||
|
rustdocflags.push(header);
|
||
|
rustdocflags.push(" -D warnings");
|
||
2 years ago
|
|
||
1 year ago
|
exec(
|
||
|
Command::new("cargo")
|
||
|
.current_dir(&workspace_root)
|
||
|
.env("RUSTDOCFLAGS", rustdocflags)
|
||
|
.args(["+nightly", "doc", "--no-deps", "--all-features"])
|
||
|
.args(
|
||
|
PACKAGE_TO_DESCRIPTION
|
||
|
.iter()
|
||
|
.flat_map(|(package, _)| ["--package", package]),
|
||
|
),
|
||
1 year ago
|
)?;
|
||
2 years ago
|
|
||
1 year ago
|
let site = workspace_root.join("site");
|
||
|
match fs::remove_dir_all(&site) {
|
||
|
Ok(()) => {}
|
||
|
Err(err) => {
|
||
|
if err.kind() != std::io::ErrorKind::NotFound {
|
||
|
return Err(err).context(format!("remove {site:?}"));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
let doc = target_directory.join("doc");
|
||
|
fs::rename(&doc, &site).with_context(|| format!("rename {doc:?} to {site:?}"))?;
|
||
|
|
||
|
exec(Command::new("sh").current_dir(&site).args([
|
||
|
"-c",
|
||
|
"grep -FRl crabby.svg | xargs sed -i s/crabby.svg/crabby_dev.svg/g",
|
||
|
]))?;
|
||
|
|
||
|
fs::write(
|
||
|
site.join("robots.txt"),
|
||
|
indoc! {r#"
|
||
2 years ago
|
User-Agent:*
|
||
|
Disallow: /
|
||
1 year ago
|
"#},
|
||
|
)
|
||
|
.context("can't write robots.txt")?;
|
||
2 years ago
|
|
||
1 year ago
|
let mut index = fs::File::create(site.join("index.html"))
|
||
|
.with_context(|| format!("create {site:?}/index.html"))?;
|
||
|
writedoc! {&mut index, r#"
|
||
2 years ago
|
<html>
|
||
|
<meta name="robots" content="noindex">
|
||
|
<body>
|
||
|
<ul>
|
||
1 year ago
|
"#}
|
||
|
.context("write to index.html")?;
|
||
|
|
||
|
for (package, description) in PACKAGE_TO_DESCRIPTION {
|
||
|
let package = package.replace('-', "_");
|
||
|
writedoc! {&mut index, r#"
|
||
1 year ago
|
<li><a href="{package}/index.html">Aya {description}</a></li>
|
||
1 year ago
|
"#}
|
||
|
.context("write to string")?;
|
||
|
}
|
||
|
|
||
|
writedoc! {&mut index, r#"
|
||
2 years ago
|
</ul>
|
||
|
</body>
|
||
|
</html>
|
||
|
"#}
|
||
1 year ago
|
.context("write to index.html")?;
|
||
2 years ago
|
|
||
|
Ok(())
|
||
|
}
|