|
| 1 | +# Gitlab Bot | [中文](README.cn.md) |
| 2 | + |
| 3 | + |
| 4 | +[](https://opensource.org/licenses/Apache-2.0) |
| 5 | + |
| 6 | +这是一个适用于 GitLab(13.2+) 的机器人,利用 [webhooks](https://docs.gitlab.com/ee/user/project/integrations/webhook_events.html) 来自动化某些任务: |
| 7 | + |
| 8 | +#### 在合并请求中验证提交者的电子邮件域名。 |
| 9 | + |
| 10 | +>  |
| 11 | +
|
| 12 | +#### 在合并请求中验证提交者的电子邮件用户名与用户名是否匹配。 |
| 13 | + |
| 14 | +>  |
| 15 | +
|
| 16 | +#### 只有当源分支与现有问题相关联时,才能合并合并请求。 |
| 17 | + |
| 18 | +>  |
| 19 | +
|
| 20 | +#### 确认在合并请求中是否指定了里程碑。 |
| 21 | + |
| 22 | +>  |
| 23 | +
|
| 24 | +#### 验证合并请求中的提交标题是否符合 [约定提交规范](https://www.conventionalcommits.org/)。 |
| 25 | + |
| 26 | +>  |
| 27 | +
|
| 28 | +#### 检查成功 |
| 29 | + |
| 30 | +>  |
| 31 | +
|
| 32 | +#### 使用 /bot-release-note 命令为指定的里程碑生成发布说明。 |
| 33 | + |
| 34 | +>  |
| 35 | +
|
| 36 | +#### 通过 OpenAI 生成 GitLab 合并请求的摘要。 |
| 37 | + |
| 38 | +>  |
| 39 | +
|
| 40 | +## GitLab 事件支持 |
| 41 | + |
| 42 | +* 推送事件(尚未支持) |
| 43 | +* 问题事件 |
| 44 | +* 评论事件 |
| 45 | + * 提交 |
| 46 | + * 合并请求 |
| 47 | + * 问题 |
| 48 | + * 代码片段(尚未支持) |
| 49 | +* 合并请求事件 |
| 50 | +* 维基页面事件(尚未支持) |
| 51 | +* 标签事件(尚未支持) |
| 52 | +* 管道事件(尚未支持) |
| 53 | +* 构建事件(尚未支持) |
| 54 | + |
| 55 | +## 如何使用 |
| 56 | + |
| 57 | +启动 Gitlab Bot 实例非常简单: |
| 58 | + |
| 59 | +> 在 Docker 版本 19 中,使用 “--security-opt seccomp:unconfined” 选项运行容器时,可以禁用 seccomp 过滤器,允许进程执行任何系统调用。 |
| 60 | +
|
| 61 | +```shell |
| 62 | +docker run --rm \ |
| 63 | +-e BOT_GITLAB_USERNAME="你的 Gitlab 用户名" \ |
| 64 | +-e BOT_GITLAB_URL="你的 Gitlab URL" \ |
| 65 | +-e BOT_GITLAB_TOKEN="你的 Gitlab 访问令牌" \ |
| 66 | +-p 9998:9998 \ |
| 67 | +coolbeevip/gitlab-bot |
| 68 | +``` |
| 69 | + |
| 70 | +## 环境变量 |
| 71 | + |
| 72 | +**`BOT_GITLAB_USERNAME` / `BOT_GITLAB_URL` / `BOT_GITLAB_TOKEN`** |
| 73 | + |
| 74 | +这些变量用于配置 GitLab 机器人与 GitLab API 的认证。请提供以下信息: |
| 75 | + |
| 76 | +- `BOT_GITLAB_USERNAME`:GitLab 上机器人的账号用户名。(**确保创建一个新用户并使用该用户的访问令牌,而不是组访问令牌或项目访问令牌。**) |
| 77 | +- `BOT_GITLAB_URL`:机器人将与之交互的 GitLab 实例的 URL。 |
| 78 | +- `BOT_GITLAB_TOKEN`:用于通过 GitLab API 验证机器人的令牌。 |
| 79 | + |
| 80 | +**`BOT_LANGUAGE`** |
| 81 | + |
| 82 | +默认支持中文(zh)和英语(en)两种语言。 |
| 83 | + |
| 84 | +**`BOT_HOST` / `BOT_PORT`** |
| 85 | + |
| 86 | +这些变量指定机器人运行的主机和端口。默认情况下,机器人将在 IP 地址 0.0.0.0 和端口号 9998 上运行。 |
| 87 | + |
| 88 | +**`BOT_GIT_EMAIL_DOMAIN`** |
| 89 | + |
| 90 | +该配置指定在进行 Git 提交时使用的电子邮件域名。例如: |
| 91 | + |
| 92 | +```shell |
| 93 | +BOT_GIT_EMAIL_DOMAIN=gmail.com |
| 94 | +``` |
| 95 | + |
| 96 | +**`BOT_GIT_COMMIT_SUBJECT_MAX_LENGTH`** |
| 97 | + |
| 98 | +允许的 Git 提交主题的最大字符长度为 100,这是默认值。 |
| 99 | + |
| 100 | +**`BOT_GIT_COMMIT_SUBJECT_REGEX` / `BOT_GIT_COMMIT_SUBJECT_EXAMPLES_MARKDOWN` / `BOT_GIT_COMMIT_SUBJECT_REGEX_ENABLED`** |
| 101 | + |
| 102 | +用于验证 Git 提交消息的正则表达式模式 [约定提交规范](https://www.conventionalcommits.org/) 和示例提交主题。以下是使用示例: |
| 103 | + |
| 104 | +```shell |
| 105 | +BOT_GIT_COMMIT_SUBJECT_REGEX_ENABLED="true" |
| 106 | +BOT_GIT_COMMIT_SUBJECT_REGEX="^(fix|feat|docs|style|refactor|test|chore|build|ci): .*$" |
| 107 | +BOT_GIT_COMMIT_SUBJECT_EXAMPLES_MARKDOWN="* feat: 添加认证模块\n* fix: 解决登录无法正常工作的问题\n* docs: 更新 README 以包含安装说明\n* style: 根据编码规范格式化代码\n* refactor: 提取可重复使用的文件上传函数\n* test: 为支付处理模块添加单元测试\n* build: 升级到 Node.js 版本 14.0\n* ci: 更新 Travis CI 配置以涵盖更好的测试\n* chore: 更新 .gitignore 文件" |
| 108 | +``` |
| 109 | + |
| 110 | +这些变量用于强制 Git 仓库的一致提交消息格式。将 `BOT_GIT_COMMIT_SUBJECT_REGEX_ENABLED` 设置为 "true" 可启用使用 `BOT_GIT_COMMIT_SUBJECT_REGEX` 中指定的正则表达式模式进行提交主题验证。 |
| 111 | + |
| 112 | +`BOT_GIT_COMMIT_SUBJECT_REGEX` 包含一个正则表达式模式,匹配符合约定提交规范的提交主题。此模式确保提交主题以特定类型(例如 "fix"、"feat"、"docs")开头,后面跟着冒号和空格,然后是任何额外的描述。**合并提交不包含在此验证中。** |
| 113 | + |
| 114 | +`BOT_GIT_COMMIT_SUBJECT_EXAMPLES_MARKDOWN` 提供了一系列遵循指定格式的示例提交主题。这些示例可以在编写提交消息时作为指导。 |
| 115 | + |
| 116 | +**`BOT_GITLAB_MERGE_REQUEST_MILESTONE_REQUIRED`** |
| 117 | + |
| 118 | +在 GitLab 中,创建合并请求时必须设置一个里程碑。默认情况下,此要求处于禁用状态。 |
| 119 | + |
| 120 | +**`BOT_GITLAB_MERGE_REQUEST_ISSUE_REQUIRED`** |
| 121 | + |
| 122 | +只有当源分支与现有问题相关联时,才能合并合并请求。默认情况下,此要求处于禁用状态。 |
| 123 | + |
| 124 | +**`OPENAI_API_BASE` / `OPENAI_API_KEY` / `OPENAI_API_MODEL`** |
| 125 | + |
| 126 | +这些参数用于连接 OPENAI 模型。 |
| 127 | + |
| 128 | +**`GOOGLE_API_KEY` / `GOOGLE_API_MODEL`** |
| 129 | + |
| 130 | +这些参数用于连接 Google 模型。 |
| 131 | + |
| 132 | +**`AZURE_OPENAI_API_KEY` / `AZURE_OPENAI_API_VERSION` / `AZURE_OPENAI_MODEL` / `AZURE_OPENAI_ENDPOINT`** |
| 133 | + |
| 134 | +这些参数用于连接 Azure OpenAI 模型。 |
| 135 | + |
| 136 | +**`AI_PROVIDER`** |
| 137 | + |
| 138 | +该参数指定要使用的 AI 模型后端。默认值为 `openai`,但您可以切换为 `google`(用于 Google 模型)或 `azure-openai`(用于 Azure OpenAI 模型)。 |
| 139 | + |
| 140 | +**`BOT_GITLAB_MERGE_REQUEST_SUMMARY_ENABLED` / `BOT_GITLAB_MERGE_REQUEST_SUMMARY_LANGUAGE`** |
| 141 | + |
| 142 | +`BOT_GITLAB_MERGE_REQUEST_SUMMARY_ENABLED` 参数控制系统是否生成 GitLab 合并请求的摘要。默认设置为 `true`。 |
| 143 | +`BOT_GITLAB_MERGE_REQUEST_SUMMARY_LANGUAGE` 参数指定生成的合并请求摘要的语言。默认设置为 `English`。但您可以根据需要更改为任何首选的语言代码。 |
| 144 | + |
| 145 | +**`BOT_GITLAB_MERGE_REQUEST_EMAIL_USERNAME_NOT_MATCH_ENABLED`** |
| 146 | + |
| 147 | +只有当电子邮件用户名(“@”前的部分)与提交作者的名称匹配时,才能合并合并请求。默认情况下,此要求处于禁用状态。 |
| 148 | + |
| 149 | +**`BOT_GIT_COMMIT_MESSAGE_CHECK_ENABLED`** |
| 150 | + |
| 151 | +只有当提交消息遵循特定格式时,才能合并合并请求。当设置为 `true` 时,机器人将根据 `BOT_GIT_COMMIT_SUBJECT_REGEX` 环境变量定义的指定正则表达式验证提交消息。 |
| 152 | + |
| 153 | +**`BOT_GITLAB_MERGE_REQUEST_APPROVAL_ENABLED`** |
| 154 | + |
| 155 | +该参数控制机器人是否自动批准通过所有检查的合并请求。默认设置为 `true`,允许机器人自动批准合并请求。将其设置为 `false` 则禁用自动批准,需要对所有合并请求进行手动批准。 |
| 156 | + |
| 157 | +**`BOT_GITLAB_MERGE_REQUEST_AIREVIEW_LABEL_ENABLED`** |
| 158 | + |
| 159 | +该参数控制向合并请求添加新状态标签 "AI Review" 的功能,从而更好地跟踪 AI 辅助的代码审查。当启用时,当生成 AI 摘要时,会自动添加该标签。更新合并请求时标签会被移除,但 AI 功能被禁用。 |
| 160 | + |
| 161 | +默认情况下,此功能是启用的。如要禁用,请将 `BOT_GITLAB_MERGE_REQUEST_AIREVIEW_LABEL_ENABLED` 环境变量设置为 "false"。该功能特别适用于依赖 AI 辅助代码审查的项目,以确保所有代码更改在合并之前进行彻底审查。 |
0 commit comments