Explorar o código

Merge pull request #259 from dave-tucker/xtask

xtask: Add docs build
Dave Tucker %!s(int64=2) %!d(string=hai) anos
pai
achega
5ff672d8a0
Modificáronse 2 ficheiros con 57 adicións e 0 borrados
  1. 54 0
      xtask/src/docs/mod.rs
  2. 3 0
      xtask/src/main.rs

+ 54 - 0
xtask/src/docs/mod.rs

@@ -0,0 +1,54 @@
+use std::{
+    path::{Path, PathBuf},
+    process::Command,
+};
+
+use std::{fs, io};
+
+pub fn docs() -> Result<(), anyhow::Error> {
+    let mut working_dir = PathBuf::from(".");
+
+    let args = vec![
+        "+nightly",
+        "doc",
+        "--workspace",
+        "--no-deps",
+        "--all-features",
+    ];
+
+    let status = Command::new("cargo")
+        .current_dir(&working_dir)
+        .args(&args)
+        .status()
+        .expect("failed to build aya docs");
+    assert!(status.success());
+
+    working_dir.push("bpf");
+    let status = Command::new("cargo")
+        .current_dir(&working_dir)
+        .args(&args)
+        .status()
+        .expect("failed to build aya-bpf docs");
+    assert!(status.success());
+
+    copy_dir_all("./bpf/target/doc", "./target/doc")?;
+
+    Ok(())
+}
+
+fn copy_dir_all<P: AsRef<Path>>(src: P, dst: P) -> io::Result<()> {
+    fs::create_dir_all(&dst)?;
+    for entry in fs::read_dir(src)? {
+        let entry = entry?;
+        let ty = entry.file_type()?;
+        if ty.is_dir() {
+            copy_dir_all(entry.path(), dst.as_ref().join(entry.file_name()))?;
+        } else {
+            let new_path = dst.as_ref().join(entry.file_name());
+            if !new_path.exists() {
+                fs::copy(entry.path(), dst.as_ref().join(entry.file_name()))?;
+            }
+        }
+    }
+    Ok(())
+}

+ 3 - 0
xtask/src/main.rs

@@ -1,4 +1,5 @@
 mod codegen;
+mod docs;
 
 use std::process::exit;
 
@@ -12,6 +13,7 @@ pub struct Options {
 #[derive(StructOpt)]
 enum Command {
     Codegen(codegen::Options),
+    Docs,
 }
 
 fn main() {
@@ -20,6 +22,7 @@ fn main() {
     use Command::*;
     let ret = match opts.command {
         Codegen(opts) => codegen::codegen(opts),
+        Docs => docs::docs(),
     };
 
     if let Err(e) = ret {