#gitlab #gitlab-api #git #api-bindings

gitlab-butler-lib

gitlab-butler Gitlab 命令行工具提供支持库,用于自动化繁琐的操作

2 个版本

0.9.1 2020年11月19日
0.9.0 2020年11月16日

#1880开发工具

每月 21 次下载
gitlab-butler 中使用

MIT/Apache

38KB
937

GitLab pipeline Crates.io Gitter

Gitlab Butler

什么是 gitlab-butler

gitlab-butler 是一个 GitLab 命令行工具,封装了越来越多的 GitLab API。

大多数选项都可以作为命令行参数或通过环境变量提供。

示例使用

asciicast

使用方法

.env 支持,还加载了特殊的 .private.env,以便在常见的条目之外允许私有未提交条目

  • .env 可能包含 GITLAB_BUTLER_PROJECTGITLAB_BUTLER_API_SERVER(已提交)
  • .private.env 可能包含 GITLAB_BUTLER_PRIVATE_TOKEN(未提交/上级目录)

您也可以按您喜欢的组合使用 dotenvdirenv

获取私有令牌

可以从 Gitlab 个人资料页面 或使用 ssh 获取私有令牌。

$ ssh [email protected] personal_access_token
remote: 
remote: ========================================================================
remote: 
remote: Usage: personal_access_token <name> <scope1[,scope2,...]> [ttl_days]
remote: 
remote: ========================================================================
remote: 
$ ssh [email protected] personal_access_token cli-friendly-token read_repository,read_api 10
Token:   7...ixvzoW...szp
Scopes:  read_repository,read_api
Expires: 2020-11-08

使用命令 ssh git@gitlab.com personal_access_token gitlab-butler api 创建具有 api 作用域的令牌,并将其放入 .private.env 文件中,例如

GITLAB_BUTLER_PRIVATE_TOKEN=7...ixvzoW...szp

然后创建一个标准的 .env 文件,以指向正确的服务器和项目,例如

GITLAB_BUTLER_API_SERVER=https://gitlab.com/
GITLAB_BUTLER_PROJECT=naufraghi/gitlab-butler

示例帮助

使用 gitlab-butler install 创建指向 git-lab 的符号链接,允许将其用作 git lab <command>

大多数命令会打印彩色响应,但如果使用-x / --execute选项,则会启动一个子shell,其中包含有关当前命令的一组环境变量。请参见以下列表中的git lab issues list --help信息。

gitlab-butler-issue-list 0.9.0
List issues

USAGE:
    gitlab-butler issue list [OPTIONS]

FLAGS:
    -h, --help
            Prints help information

    -V, --version
            Prints version information


OPTIONS:
    -x, --execute <execute>
            Execute command for each returned issue (in a bash subshell)

            The current issue is exported as environment variables:
              - `issue_id`: 234
              - `issue_title`: Resolve some problem
              - `issue_description` (optional): Long description
              - `issue_slug`: 234-resolve-some-problem
              - `issue_reference`: #234
              - `issue_full_reference`: group/project#234
              - `issue_web_url`: http://gitlab.com/group/project/issues/234

            Example:
              - `... issue list -x 'echo ${issue_reference}: ${issue_title}'`

            Or to use the fully qualified reference:
              - `... issue list -x 'echo ${issue_full_reference}: ${issue_title}'`
    -l, --labels <labels>
            Filter issues by comma-separated list of label names

            Issues must have all labels to be returned.
            - `None` lists all issues with no labels. `Any` lists all issues with at least one label.
            - `No+Label` (Deprecated) lists all issues with no labels. Predefined names are case-insensitive.
    -n, --limit <limit>
             [default: 100]

    -m, --milestone <milestone>
            Filter issues by the milestone title. `None` lists all issues with no milestone.

            - `Any` lists all issues that have an assigned milestone.
    -p, --project <project>
            Project name or id (defaults to CI_PROJECT_PATH) [env: GITLAB_BUTLER_PROJECT=naufraghi/gitlab-butler]

    -s, --state <state>
            Filter issues by state: all, opened, closed [default: opened]

此功能允许创建复杂的管道,如backport命令,该命令从当前分支(映射到特定问题)

  1. 在描述中创建一个带有回引用的新问题
  2. 创建一个新的本地分支,具有规范化的<issue>-<title-slug>名称
  3. 创建一个新的MR,该MR从当前分支开始,并针对提供的分支

这里使用了just命令运行器

backport TARGET:
    git lab issue get -x "just _backport-issue {{TARGET}}"
_backport-issue TARGET:
    git lab issue new "$issue_title ({{TARGET}})" -d "Backport of issue $issue_reference" -x "just _backport-mr {{TARGET}}"
_backport-mr TARGET:
    git branch $issue_slug origin/{{TARGET}}
    git push origin $issue_slug
    git lab mr new "Resolve \"$issue_title\"" -d "Closes $issue_reference" -s $issue_slug -t {{TARGET}}

这里是执行日志

image

merge-ready子命令

merge-ready子命令尝试合并队列中标记的MR,进行变基并等待管道成功完成。

Marge-bot类似,但旨在在CI内部运行(实际上,gitlab-butler仍处于alpha阶段,可能会吃掉您的仓库)。

总结:您有一个项目,希望有一个总是绿色的master分支和一个半线性的历史记录,因此如果您的团队足够大,您将陷入争夺首先变基和合并的竞争。一个初始的解决方案可以是让某人成为合并者,TL实际上可以做到这一点,在代码合并前进行第二次审查,但变基/合并工作很繁琐。

这里出现了gitlab-butler

  1. Alice在功能上工作并创建MR1,并将其分配给Bob
  2. Bob进行审查,最终将“Merge ready 🐙”标签添加到MR中,并将MR分配给技术领导
  3. TL进行最终审查,最终添加🐙表情符号
  4. gitlab-butler触发变基和/或合并操作

merge-ready CI使用

您可以在while循环中运行gitlab-butler,或者直接在CI中运行(您需要导出一些变量,并设置一个计划),如下所示

gitlab-butler:
  image: registry.gitlab.com/naufraghi/gitlab-butler:latest
  variables:
    GIT_STRATEGY: none
  script:
    - /run/gitlab-butler mr merge-ready
  only:
    - schedules
    - master

当前的实现不使用已批准功能,而只依赖于标签/表情符号约定,因为我在解锁该功能之前开始使用它。

备注

[^1]: 现代代码审查:谷歌的一个案例研究,两次审查似乎是一个好数字
image

许可

许可以下任一项

贡献

除非您明确声明,否则您提交给工作以供包含的任何贡献都应双重许可如上所述,而不附加任何其他条款或条件。

依赖项

~7-20MB
~294K SLoC