quanttide-devops 0.2.2

QuantTide DevOps toolkit — 契约驱动的 DevOps 治理工具库
Documentation

quanttide-devops

QuantTide DevOps toolkit — 契约驱动的 DevOps 治理工具库。

安装

[dependencies]
quanttide-devops = "0.1"

# 可选:clap 集成(用于 CLI 工具)
# quanttide-devops = { version = "0.1", features = ["clap"] }

快速开始

契约加载

use std::path::Path;
use quanttide_devops::contract::Contract;

// 加载 `.quanttide/devops/contract.yaml`
let c = Contract::load(Path::new(".")).unwrap();

// 遍历 scope
for scope in &c.scopes {
    println!("{}: {} ({:?})", scope.name, scope.dir, scope.language);
}

版本号工具

use quanttide_devops::contract::{
    validate_version, normalize_version, read_all_config_versions,
};

assert!(validate_version("v1.2.3"));
assert!(validate_version("cli/v0.5.0-rc.1"));
assert!(!validate_version("1.2.3")); // 缺 v 前缀

assert_eq!(normalize_version("cli/v0.5.0"), "0.5.0");

let versions = read_all_config_versions(Path::new("."));
for (file, version) in &versions {
    println!("{}: {:?}", file, version);
}

Git tag 版本检查

use std::path::Path;
use quanttide_devops::source::version::{latest_tag, verify_version};
use quanttide_devops::contract::Scope;

// 获取 scope 最新 tag
let tag = latest_tag(Path::new("."), "cli").unwrap();
println!("latest: {:?}", tag);

// 版本一致性检查
let scope = Scope {
    name: "cli".into(),
    dir: "src/cli".into(),
    ..Default::default()
};
let status = verify_version(Path::new("."), &scope).unwrap();
println!("consistent: {}", status.consistent);

CHANGELOG 解析

use std::path::Path;
use quanttide_devops::source::changelog::Changelog;

let cl = Changelog::from_path(Path::new("CHANGELOG.md")).unwrap();
println!("latest: {:?}", cl.latest_version());
println!("notes: {:?}", cl.release_notes("0.1.5"));

ROADMAP 进度统计

use std::path::Path;
use quanttide_devops::source::roadmap::Roadmap;

let rm = Roadmap::from_path(Path::new("ROADMAP.md")).unwrap();
// 查看每个版本的进度
for v in rm.versions() {
    println!("{} ({}): {}/{}", v.version, v.status, v.done, v.total);
}
println!("total: {}/{}", rm.total_done(), rm.total_all());

// 格式验证
let issues = rm.validate("rust");
for issue in &issues {
    println!("line {}: {}", issue.line, issue.message);
}

许可

Apache-2.0