#configuration #evergreen #structs #model #convert #running #shrub

shrub-rs

用于处理Evergreen项目配置的库

14个版本

0.5.2 2024年5月8日
0.5.1 2022年10月14日
0.5.0 2022年3月23日
0.4.2 2022年3月2日
0.1.2 2021年4月13日

#77 in 配置

每月 23次下载
mongo-task-generator中使用

Apache-2.0

52KB
824

shrub-rs

一个Rust包,用于定义和解析Evergreen项目配置。

目录

描述

提供用于建模evergreen项目配置文件的struct。

获取帮助

我应该问哪个渠道的问题?

如果你对shrub-rs有任何问题,请在slack频道#evergreen-users中提及@dag-on-call,或通过[email protected]给我们发邮件。

我如何请求更改/报告shrub-rs的错误?

在Jira中创建一个DAG工单。

我应该在我的工单或问题中包含什么信息?

请尽可能提供更多信息。这有助于避免长时间的信息收集线程。

请包含以下内容

  • 请求动机:为什么要求这个更改?(这有助于我们了解请求的优先级和紧急性)
  • 背景:我们是否应该了解有关此请求的任何背景信息?
  • 描述:您希望调查或更改什么?

安装

要安装,请将"shrub-rs"包含在您的项目的Cargo.toml依赖关系中。

使用方法

Shrub提供了Evergreen项目配置的双向转换。这意味着您可以将Evergreen项目配置转换为Rust struct,或将Rust struct转换为Evergreen项目配置。

解析evergreen项目配置

将Evergreen项目配置转换为Rust struct可以使分析Evergreen项目的配置变得更容易。

注意:您可能希望在解释之前通过evergreen evaluate运行项目配置,以执行Evergreen所做的某些预处理。

一个简单的示例

use std::path::Path;
use std::process::Command;

use shrub_rs::models::project::EvgProject;

fn get_project_config(location: &Path) -> EvgProject {
    let evg_config_yaml = Command::new("evergreen")
        .args(&["evaluate", location.to_str().unwrap()])
        .output()
        .unwrap();
    EvgProject::from_yaml_str(std::str::from_utf8(&evg_config_yaml.stdout).unwrap()).unwrap()
}

let evg_project = get_project_config(Path::from("path/to/config.yml));
println!("My project has {} build variants", evg_project.build_variants.len());

导出evergreen项目配置

建立常青配置,然后导出它,当通过evergreen的generate.tasks执行动态任务生成时非常有用。

一个简单的示例

use std::path::Path;
use shrub_rs::models::{project::EvgProject, task::{EvgTask}};

let evg_task = EvgTask {
    name: "My new task".to_string(),
    ..Default::default()
};
let evg_project = EvgProject {
    tasks: vec![evg_task],
    ..Default::default()
};

std::fs::write(Path::from("path/to/target"), serde_json::to_string_pretty(&evg_project).unwrap()).unwrap();

更多示例

有关如何使用shrub的更复杂示例,请参阅mongo-task-generator

贡献指南

高级架构

Shrub-rs提供了Rust结构体来建模evergreen项目配置。为了了解提供的结构,请查看evergreen项目配置文档

设置本地开发环境

克隆仓库后,只需运行cargo build即可下载和构建项目。

linting格式化

cargo fmt
cargo clippy

运行测试

cargo test

版本控制

此项目使用semver进行版本控制。

请在CHANGELOG.md中包含每个新版本添加的描述。

代码审查

所有更改都需要代码审查,并通过GitHub Pull Requests进行。

部署

在master分支合并时自动触发生产部署。

资源

依赖关系

~2–2.6MB
~55K SLoC