2 个版本
0.9.1 | 2020 年 11 月 19 日 |
---|---|
0.9.0 | 2020 年 11 月 16 日 |
#1560 in 开发工具
76KB
1.5K SLoC
Gitlab Butler
什么是 gitlab-butler
gitlab-butler
是一个 GitLab 命令行工具,它封装了越来越多的 GitLab API。
大多数选项可以作为命令行参数或通过环境变量提供。
示例用法
用法
.env
支持,还有一个特殊的 .private.env
也会被加载,以便在常见的配置之外允许使用私有未提交条目
.env
可以包含GITLAB_BUTLER_PROJECT
和GITLAB_BUTLER_API_SERVER
(已提交).private.env
可以包含GITLAB_BUTLER_PRIVATE_TOKEN
(未提交 / 上级目录)
您也可以像您喜欢的那样混合使用 dotenv
和 direnv
。
获取私有令牌
您可以从 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
命令,该命令从当前分支(映射到特定问题)
- 在描述中创建一个带有反向引用的新问题
- 创建一个新的本地分支,其名称为规范化的
<issue>-<title-slug>
名称 - 创建一个新的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}}
这里是执行日志
merge-ready
子命令
merge-ready
子命令尝试合并队列中标记的MR,进行变基,并等待管道成功完成。
与 Marge-bot 非常相似,但专门为在CI内部运行而设计(实际上,gitlab-butler
仍在alpha版本,可能会吃掉您的仓库)。
总结:您有一个项目,希望有一个 始终为绿色 的master分支和一个 半线性 的历史记录,所以如果您的团队足够大,您将陷入争夺首先变基和合并的斗争。一个初始的解决方案可以是让某个人成为 合并者,TL实际上可以这样做,在代码合并前再次检查,但变基/合并的工作很繁琐。
这时就出现了 gitlab-butler
- Alice正在开发一个功能并创建了MR1,并将其分配给Bob
- Bob进行审查,最终将 ~"Merge ready 🐙" 标签添加到MR中,并将MR分配给技术负责人
- TL进行最终审查,并最终添加🐙表情符号
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]: 现代代码审查:谷歌案例研究,2次审查似乎是一个好数字:
许可
根据您的选择,许可方式如下
- Apache License,版本 2.0 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
贡献
除非您明确说明,否则您提交的任何有意包含在作品中的贡献都应按上述方式双许可,而不附加任何其他条款或条件。
依赖关系
~16–30MB
~519K SLoC