15 releases
0.3.8 | Jun 25, 2024 |
---|---|
0.3.7 | Jun 25, 2024 |
0.3.6 | May 30, 2024 |
0.2.0 | Feb 8, 2024 |
0.1.3 | Jan 28, 2024 |
#171 in Cargo plugins
66KB
1.5K
SLoC
cargo-actions cli
Cargo Actions 是一个基于 Rust 语言开发的命令行工具,旨在为 GitHub Actions 提供高效的工作流模板管理和部署功能。它通过与 GitHub 账号的集成,允许用户方便地上传、搜索和应用工作流模板,从而简化了持续集成和持续部署(CI/CD)的流程。
功能特性
- 用户认证登录:通过 OAuth 2.0 协议与 GitHub 进行安全集成,用户可以使用他们的 GitHub 账号登录到 Cargo Actions。
- 工作流初始化:支持从 GitHub 仓库或模板 ID 初始化工作流,提供了灵活的方式来集成 GitHub Actions 工作流。
- 模板上传与分享:用户可以将自己创建的工作流模板上传到 Cargo Actions 平台,并与其他用户分享。
- 个性化模板管理:允许用户管理自己上传和收藏的模板,方便快速启动熟悉或常用的工作流配置。
安装
在终端中运行以下命令:
cargo install cargo-actions
使用
初始化
使用 github 仓库 url 创建项目,可以省略https://github.com/前缀。默认会使用https://github.com/yexiyue/cargo-actions里的工作流模版。
使用省略形式,规则(User/Repo)
cargo actions init yexiyue/cargo-actions
使用 url 形式
cargo actions init https://github.com/yexiyue/cargo-actions.git
使用 ssh 形式
cargo actions init git@github.com:yexiyue/cargo-actions.git
同时也可以使用Cargo Actions 平台上的工作流,
复制喜欢的工作流模版到终端
示例:
cargo actions init 1 -i
上传模版
如果你想上传自己的工作流到 cargo actions 平台的话,请先登陆。
cargo actions login
然后准备一个工作流模版
一个标准的工作流模版应该具有下面文件
- cargo-action.json:配置文件,用于提示用户输入
- 模版名.yaml.hbs:模版文件
- README.md(可选)
cargo-action.json
配置字段说明
字段名 | 类型 | 描述 |
---|---|---|
name | string | 模板名称 |
description | string | 模板简短描述 |
path | string | 模板文件路径,默认为 ${name}.yaml.hbs |
prompts | Prompt[] | 定义命令行交互输入项 |
success_message | string | 模板创建成功后的提示信息 |
Prompt 配置说明
prompt 有以下 4 种类型
- type:"input"
字段名 | 类型 | 描述 |
---|---|---|
field | string | 字段名称(与模版中的变量名对应) |
prompt | string | 输入提示 |
default | string | 默认值 |
- type:"confirm"
字段名 | 类型 | 描述 |
---|---|---|
field | string | 字段名称(与模版中的变量名对应) |
prompt | string | 输入提示 |
default | bool | 默认值 |
- type:"select"
字段名 | 类型 | 描述 |
---|---|---|
field | string | 字段名称(与模版中的变量名对应) |
prompt | string | 输入提示 |
default | number | 默认选项对应的索引值 |
options | {value:any,label:string}[] | 选项列表,label 是提示的值,value 是最后在模版中使用的值 |
- type:"multiselect"
字段名 | 类型 | 描述 |
---|---|---|
field | string | 字段名称(与模版中的变量名对应) |
prompt | string | 输入提示 |
default | number[] | 默认选项对应的索引值数组 |
options | {value:any,label:string}[] | 选项列表,label 是提示的值,value 是最后在模版中使用的值 |
示例:
{
"name": "web-deploy",
"description": "构建web 应用到Github Pages",
"prompts": [
{
"type": "select",
"field": "toolchain",
"prompt": "请选择包管理工具",
"default": 0,
"options": [
{
"label": "npm",
"value": "npm"
},
{
"label": "yarn",
"value": "yarn"
},
{
"label": "pnpm",
"value": "pnpm"
}
]
},
{
"type": "confirm",
"field": "enable_cache",
"prompt": "是否启用缓存",
"default": true
},
{
"type": "input",
"field": "node_version",
"prompt": "请输入node版本号",
"default": "node"
},
{
"type": "input",
"field": "folder",
"prompt": "web 项目路径",
"default": "."
},
{
"type": "input",
"prompt": "构建产物目录(相对于web 项目路径)",
"field": "target_dir",
"default": "dist"
},
{
"type": "confirm",
"prompt": "是否需要复制index.html 为404.html 以支持spa",
"field": "copy_index",
"default": false
}
]
}
模版文件是使用handlebars渲染的,模版语法可以参考Handlebars (handlebarsjs.com)
模版文件示例:
name: web on: push: branches: - "master" workflow_dispatch: jobs: deploy:
runs-on: ubuntu-latest permissions: contents: write concurrency: group:
{{#raw}}$\{{ github.workflow }}-$\{{ github.ref }}{{/raw}}
steps: - name: Checkout repository uses: actions/checkout@v4
{{#if (eq toolchain "pnpm")}}
- name: Install pnpm run: npm install -g pnpm
{{/if}}
- name: Sync node version and setup cache uses: actions/setup-node@v4 with:
node-version: "{{node_version}}"
{{#if enable_cache}}
{{#if (eq toolchain "pnpm")}}
cache: "{{folder}}/pnpm-lock.yaml"
{{/if}}
{{#if (eq toolchain "npm")}}
cache: "{{folder}}/package-lock.json"
{{/if}}
{{#if (eq toolchain "yarn")}}
cache: "{{folder}}/yarn.lock"
{{/if}}
{{/if}}
- name: Install dependencies run: | cd
{{folder}}
{{toolchain}}
install - name: Build run: | cd
{{folder}}
{{toolchain}}
build
{{#if copy_index}}
cp
{{target_dir}}/index.html
{{target_dir}}/404.html
{{/if}}
- name: Deploy uses: peaceiris/actions-gh-pages@v4 with:
{{#raw}}github_token: $\{{ secrets.GITHUB_TOKEN }}{{/raw}}
publish_dir:
{{folder}}/{{target_dir}}
注意:
{{{{raw}}}} {{{{/raw}}}}
中的表达式不会被转义。
在上传之前,可以使用check
命令验证工作流模版是否正常工作。
cargo actions check
然后使用upload
命令上传工作流模版
cargo actions upload
使用创建的模版
使用以下命令可以快速使用自己创建的工作流模版,注意需要登陆。
cargo actions mine
同时您也可以登陆 Cargo Actions 平台个人中心里查看自己创建的工作流模版。
使用收藏的模版
cargo actions favorite
该命令使用与mine
命令类似,从您在 Cargo Actions 平台收藏的模版中进行选择工作流,来初始化。
更多用法使用下面命令查看
cargo actions --help
技术栈
- Rust:作为核心编程语言,Rust 确保了应用程序的高效率和内存安全。
- Cynic:作为 GraphQL 客户端,它使得与后端服务的数据交互变得高效和灵活。
- git2:该库支持对 GitHub 仓库进行克隆和高级操作。
- Clap:此库用于创建功能丰富且用户友好的命令行界面。
- Dialogue-macro:它优化了命令行交互,提供清晰直观的提示和反馈。
贡献与反馈
如果你对 Cargo Actions 有任何贡献或反馈,欢迎通过 GitHub 仓库进行提交。欢迎任何形式的贡献,包括代码改进、文档更新、新功能建议等。
许可证
Cargo Actions 遵循 MIT 许可证。
Dependencies
~30–45MB
~762K SLoC