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

Download history 3/week @ 2024-03-08 2/week @ 2024-03-15 51/week @ 2024-03-29 12/week @ 2024-04-05

88 每月下载量

MIT 许可证

82KB
2K SLoC

ghctl - GitHub实用工具

Tests

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} 是以下之一: pulltriagepushmaintainadmin

示例

teams:
  a-team: maintain

当应用到仓库时,将授予 a-team 团队仓库的 maintain 权限。

仓库协作者

collaborators:
  {username}: {permission}

其中 {username} 是GitHub用户名,而 {permission} 是以下之一: pulltriagepushmaintainadmin

示例

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/testmix/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