8个版本
0.3.3 | 2023年7月15日 |
---|---|
0.3.2 | 2023年7月15日 |
0.3.1 | 2023年6月21日 |
0.2.1 | 2023年6月13日 |
0.1.6 | 2023年6月8日 |
6 在 #github-action
88 每月下载量
82KB
2K SLoC
ghctl - GitHub实用工具
ghctl既是GitHub的命令行工具,也是一个GitHub Action,允许你在GitHub Actions工作流中使用此工具。
注意:ghctl处于早期开发阶段,尚未准备好投入生产使用。然而,请随时试用并提供反馈!
ghctl CLI
ghctl目前需要具有以下范围的GitHub Personal Access Token (PAT)
read:org
repo
(完全控制)read:user
你可以通过以下方式之一向ghctl提供访问令牌
- 设置环境变量
$GITHUB_TOKEN
- 使用
--access-token
选项显式传递
下载最新版本的二进制文件
你可以从Releases页面下载最新版本的二进制文件(为Debian Bookworm / Ubuntu 22.04构建),使用GitHub CLI (gh
) 或 curl
gh release download -R gitsudo-io/ghctl --pattern ghctl
curl -L https://github.com/gitsudo-io/ghctl/releases/download/v0.3.1/ghctl > ghctl
然后使文件可执行(chmod u+x ghctl
)并将其放置在你的 $PATH
。
使用Cargo安装
要使用Cargo安装ghctl
二进制文件,你需要安装Rust 1.66.0或更高版本(rustup)。
cargo install ghctl
本地开发/从源安装
为了在本地构建和安装ghctl
二进制文件,你需要安装Rust 1.66.0或更高版本(rustup)。
克隆此仓库
git clone https://github.com/gitsudo-io/ghctl.git
构建和安装ghctl
二进制文件
cargo install --path ghctl
用法
检索GitHub仓库信息
ghctl repo get "{owner}/{repo}"
将检索指定GitHub仓库的信息并以JSON格式输出。
$ ghctl repo get gitsudo-io/ghctl --access-token $GITHUB_TOKEN
ghctl repo get gitsudo-io/ghctl
{
"id": 647928865,
"node_id": "R_kgDOJp6cIQ",
"name": "ghctl",
"full_name": "gitsudo-io/ghctl",
"owner": {
"login": "gitsudo-io",
"id": 121780924,
...
检索GitHub仓库的配置
ghctl repo config get "{owner}/{repo}"
将检索指定GitHub仓库的配置并以YAML格式输出。
例如
ghctl repo config get gitsudo-io/ghctl
将输出类似以下内容
teams:
a-team: maintain
environments:
gigalixir:
reviewers:
- aisrael
- gitsudo-io/a-team
branch_protection_rules:
main:
require_pull_request:
required_approving_review_count: 1
dismiss_stale_reviews: false
require_code_owner_reviews: false
required_status_checks:
strict: false
contexts:
- mix/test
enforce_admins: false
ghctl repo config get
的输出适合与ghctl repo config apply
一起使用(见下文)。
将GitHub仓库配置应用到仓库中
ghctl repo apply "{owner}/{repo}" --config-file {config_file}
将从指定的YAML配置文件中读取配置并应用到指定的GitHub仓库。
配置文件应该是YAML文件,目前支持以下部分
仓库团队权限
teams:
{team-slug}: {permission}
其中 {team-slug}
是GitHub上的团队slug,而 {permission}
是以下之一: pull
、triage
、push
、maintain
或 admin
。
示例
teams:
a-team: maintain
当应用到仓库时,将授予 a-team
团队仓库的 maintain
权限。
仓库协作者
collaborators:
{username}: {permission}
其中 {username}
是GitHub用户名,而 {permission}
是以下之一: pull
、triage
、push
、maintain
或 admin
。
示例
collaborators:
aisrael: admin
部署环境
environments:
{environment}:
reviewers:
- {username}, or
- {org}/{team-slug}
其中 {environment}
是部署环境的名称,{username}
是GitHub用户名,或者,如果提供了 {org}/{team-slug}
,则引用GitHub组织和团队。
示例
environments:
gigalixir:
reviewers:
- aisrael
- gitsudo-io/a-team
当应用到仓库时,将创建部署环境并相应配置其审查者。
分支保护规则
branch_protection_rules:
{branch name}:
required_status_checks:
contexts:
- {status check name}
- ...
require_pull_request: true
其中 {branch name}
是要保护的分支名称。
required_status_checks
是可选的,如果提供,则要求在允许合并分支之前通过指定的状态检查。在 contexts
列表中通过名称指定任何必需的状态检查。
require_pull_request
是可选的,如果提供,则要求所有提交都必须通过拉取请求进行。
示例
branch_protection_rules:
main:
required_status_checks:
contexts:
- "mix/test"
- "mix/credo"
require_pull_request: true
当应用到仓库时,将保护 main
分支,并在合并之前要求拉取请求,并要求在允许合并分支之前通过 mix/test
和 mix/credo
状态检查。
完整示例
假设有一个包含以下内容的 gitsudo.yaml
文件
teams:
a-team: maintain
collaborators:
aisrael: admin
environments:
gigalixir:
reviewers:
- aisrael
- gitsudo-io/a-team
branch_protection_rules:
main:
required_status_checks:
contexts:
- "mix/test"
require_pull_request: true
当我们执行
ghctl repo config apply gitsudo-io/gitsudo --access-token ${GHCTL_ACCESS_TOKEN} -F gitsudo.yaml
然后我们应该看到以下类似的输出
[2023-06-16T18:33:34Z INFO ] Added team a-team with permission Maintain to repository gitsudo-io/gitsudo
[2023-06-16T18:33:34Z INFO ] Updated collaborator aisrael with permission admin to repository gitsudo-io/gitsudo
[2023-06-16T18:33:34Z INFO ] Created deployment environment gigalixir in repository gitsudo-io/gitsudo
[2023-06-16T18:33:35Z INFO ] Applied branch protection rules to branch main in repository gitsudo-io/gitsudo
[2023-06-16T18:33:35Z INFO ] Applied configuration to gitsudo-io/gitsudo
ghctl GitHub操作
ghctl的GitHub操作
输入
名称 | 描述 | 必需 | 默认 |
---|---|---|---|
args | 程序参数 | 必需 |
gitsudo -io/ghctl
也是一个GitHub操作,它允许你在GitHub操作工作流程中使用 ghctl
工具。
例如,给定以下工作流程
name: Configure ghctl repository
on:
push:
workflow_dispatch:
jobs:
ghctl-repo-config-apply:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: gitsudo-io/ghctl@main
with:
args: repo config apply gitsudo-io/gitsudo --access-token ${{ secrets.GHCTL_ACCESS_TOKEN }} -F gitsudo.yaml
然后执行上述工作流程将执行等效于之前的命令。
依赖关系
~24–38MB
~712K SLoC