aboutsummaryrefslogtreecommitdiff
path: root/dev_tools/src/bin/ci.rs
diff options
context:
space:
mode:
Diffstat (limited to 'dev_tools/src/bin/ci.rs')
-rw-r--r--dev_tools/src/bin/ci.rs95
1 files changed, 95 insertions, 0 deletions
diff --git a/dev_tools/src/bin/ci.rs b/dev_tools/src/bin/ci.rs
new file mode 100644
index 0000000..d5a108e
--- /dev/null
+++ b/dev_tools/src/bin/ci.rs
@@ -0,0 +1,95 @@
+use std::process::exit;
+
+use tools::{cargo_tomls, eprintln_cargo_style, println_cargo_style, run_cmd};
+
+fn main() {
+ #[cfg(windows)]
+ let _ = colored::control::set_virtual_terminal(true);
+ println!("{}", include_str!("../../../docs/res/ci_banner.txt"));
+
+ let needs_commit_temp = !{ run_cmd!("git diff-index --quiet HEAD --").is_ok() };
+
+ if needs_commit_temp {
+ run_cmd!("git add .").unwrap();
+ run_cmd!("git commit -m \"CI Temp\"").unwrap();
+ }
+
+ if ci().is_ok() {
+ println_cargo_style!("Done: All check passed!")
+ }
+
+ let is_worktree_clean = run_cmd!("git diff-index --quiet HEAD --").is_ok();
+ if !is_worktree_clean {
+ eprintln_cargo_style!("Documents needs refresh!");
+ if needs_commit_temp {
+ run_cmd!("git restore .").unwrap();
+ run_cmd!("git reset --soft HEAD~1").unwrap();
+ }
+ exit(1)
+ }
+
+ if needs_commit_temp {
+ run_cmd!("git restore .").unwrap();
+ run_cmd!("git reset --soft HEAD~1").unwrap();
+ }
+}
+
+fn ci() -> Result<(), i32> {
+ build_all()?;
+ clippy_all()?;
+ test_all()?;
+ docs_refresh()?;
+
+ run_cmd!("git add --renormalize .")?;
+
+ Ok(())
+}
+
+fn build_all() -> Result<(), i32> {
+ let cargo_tomls = cargo_tomls();
+ for cargo_toml in cargo_tomls {
+ println_cargo_style!("Build: {}", cargo_toml.to_string_lossy());
+ run_cmd!(
+ "cargo check --manifest-path {}",
+ cargo_toml.to_string_lossy()
+ )?;
+ }
+
+ Ok(())
+}
+
+fn clippy_all() -> Result<(), i32> {
+ let cargo_tomls = cargo_tomls();
+ for cargo_toml in cargo_tomls {
+ println_cargo_style!("Clippy: {}", cargo_toml.to_string_lossy());
+ run_cmd!(
+ "cargo clippy --manifest-path {} -- -D warnings",
+ cargo_toml.to_string_lossy()
+ )?;
+ }
+
+ Ok(())
+}
+
+fn test_all() -> Result<(), i32> {
+ let cargo_tomls = cargo_tomls();
+ for cargo_toml in cargo_tomls {
+ println_cargo_style!("Testing: {}", cargo_toml.to_string_lossy());
+ run_cmd!(
+ "cargo test --manifest-path {}",
+ cargo_toml.to_string_lossy()
+ )?;
+ }
+
+ Ok(())
+}
+
+fn docs_refresh() -> Result<(), i32> {
+ println_cargo_style!("Refresh: document at `./docs/`");
+
+ run_cmd!("cargo run --manifest-path dev_tools/Cargo.toml --bin docs-code-box-fix")?;
+ run_cmd!("cargo run --manifest-path dev_tools/Cargo.toml --bin docsify-sidebar-gen")?;
+ run_cmd!("cargo run --manifest-path dev_tools/Cargo.toml --bin refresh-docs")?;
+
+ Ok(())
+}