26 个版本 (10 个重大更新)
新 0.11.0 | 2024年8月1日 |
---|---|
0.10.3 | 2024年7月30日 |
0.10.2 | 2024年6月27日 |
0.5.0 | 2023年7月17日 |
0.4.3 | 2022年10月21日 |
#333 在 开发工具 中
每月290 次下载
用于 ghastoolkit
77KB
1K SLoC
GHActions
是一个基于 Rust 的库,用于帮助用户用 Rust 编写出色的 GitHub Actions!
📦 安装
运行以下命令将库添加到您的 Cargo.toml
文件
cargo add ghactions
📚 功能
- 易于使用
- 验证 GitHub Actions 文件
- 自动解析输入和输出
- 自动从代码生成
action.yml
文件- 功能:
generate
- 功能:
- Octocrab 支持
- 功能:
octocrab
- 功能:
- Actions ToolCache 支持
- 定位工具缓存中的工具
- 功能:
toolcache
🚀 使用方法
以下是一个如何使用该库的简单示例
use ghactions::prelude::*;
#[derive(Actions)]
struct MyAction {}
fn main() -> Result<(), Box<dyn std::error::Error>> {
// Initialise the Action
let action = MyAction::init()?;
group!("Main Workflow");
// Do something...
Ok(())
}
高级用法
ghactions
的另一个功能是能够自动解析动作的输入和输出。
use ghactions::prelude::*;
#[derive(Actions, Debug, Clone)]
#[action(
// Action Name
name = "My Action",
// Action Description
description = "My Action Description",
)]
struct MyAction {
/// My Input
#[input(
// Change the name of the input from `my_mode` to `mode`
name = "mode",
// Input Description
description = "My Input Description",
// Default Value
default = "default"
)]
my_mode: String,
// Automatical type conversion
#[input(
// Input Description
description = "My Input Description",
default = "42",
)]
my_int: i32,
// Multiple Inputs
#[input(
// Input Description
description = "My Second Input Description",
// Automatically split the input by `,`
split = ",",
)]
mutiple: Vec<String>,
// Output called `version`
#[output(
// Output Description
description = "My Output Description",
)]
version: String,
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Initialise the Action
let action = MyAction::init()?;
group!("Main Workflow");
info!("Action :: {:?}", action);
info!("My Input Mode :: `{}`", action.my_mode);
info!("My Multiple Input :: `{:?}`", action.mutiple);
info!("My Output Version :: `{}`", action.version);
groupend!();
// Using the toolcache feature
group!("ToolCache");
// Load the ToolCache from the `examples/toolcache` folder
let toolcache = ToolCache::from("examples/toolcache");
// Find the Node.js 18.4.0 tool
let tool = toolcache.find("node", "18.4.0").await?;
info!("Tool :: {:?}", tool);
groupend!();
// There are 3 ways to set the output
group!("Set Outputs");
// Using the dynamically name Action method
action.set_version("1.0.0");
// Using the `set_output` method
MyAction::set_output("version", "1.0.0")?;
// Or the Macro `setoutput!` directly
setoutput!("version", "1.0.0");
groupend!();
Ok(())
}
生成 action.yml
文件
使用 generate
功能,您可以从代码中生成 action.yml
文件。
use ghactions::prelude::*;
#[derive(Actions, Debug, Clone)]
#[action(
// Action Name
name = "My Action",
// Action Location (use `generate` feature to generate action.yml file)
path = "./action.yml",
// Set the Actions Dockerfile image
// `ghactions` will check the Dockerfile exists
image = "./examples/advanced/Dockerfile",
)]
struct MyAction {
/// My Input
#[input(
// Input Description
description = "My Input Description",
// Default Value
default = "default"
)]
my_input: String,
#[output(
// Output Description
description = "My Output Description",
)]
my_output: String,
}
在构建时,action.yml
文件将包含以下内容
name: My Action
inputs:
my_input:
description: My Input Description
default: default
outputs:
my_output:
description: My Output Description
runs:
using: "docker"
image: "Dockerfile"
使用 Octocrab
启用 octocrab
功能将允许您使用 Octocrab 库。
use ghactions::prelude::*;
#[derive(Actions, Debug, Clone)]
struct MyAction {}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let action = MyAction::init()?;
group!("Octocrab");
// Automatically setup Octocrab with the GitHub Instance and Token
let octocrab = action.octocrab()?;
// ... Do something...
Ok(())
}
使用模板(cargo-generate)
您可以使用 cargo-generate 工具使用库创建新的 GitHub Action 项目。
cargo generate --git https://github.com/42ByteLabs/ghactions
🦸 支持
如果有错误或功能请求,请创建 GitHub 问题。
该项目使用 语义版本(v2),在主要版本发布时,将发生重大更改。
📓 许可证
该项目根据 MIT 开源许可证的条款进行许可。有关完整条款,请参阅 MIT。
依赖项
~13–24MB
~379K SLoC