GitHub Actions 是 GitHub 提供的一种持续集成和持续交付(CI/CD)工具,可以帮助开发者自动化任务。我们可以通过自定义 GitHub Actions 工作流,构建一个类似 GitHub Actions Bot 的功能,例如自动回复 PR、分配 Issue 或者触发其他自动化任务。
在这篇博客中,我将带你一步步实现一个简单的 GitHub Actions Bot,能够自动回复 PR 并根据特定条件触发操作。
一、什么是 GitHub Actions Bot?
GitHub Actions Bot 是一种通过工作流自动执行特定任务的“虚拟用户”。你可以配置它执行以下任务:
- 根据 PR 的标题或内容自动添加评论;
- 识别 Issue 标签并分配相关人员;
- 执行代码质量检查或触发构建流程。
通过 GitHub Actions,你可以轻松实现上述功能,而无需额外部署服务器。像下面这样的
这个就是配置的 github-actions bot ,这个是一个GitHub官方的。 那么我们如果要实现一个类似的该如何处理。
二、准备工作
- 一个 GitHub 仓库:新建或使用现有仓库。这里我使用的是 rocketmq-rust 这个开源项目
- Personal Access Token (PAT) :如果需要通过 API 执行复杂操作(如更新 Issue 评论),需要创建一个带有合适权限的 PAT。
创建 PAT 的步骤:
- 进入 GitHub Settings。
- 点击 Generate new token,选择
repo
范围的权限。 - 生成后保存该 token。
在这之前需要建一个作为Bot的账号
然后创建Token
注意: 这里使用的 Personal access tokens (classic) 类型的Token, 权限主要是仓库和action的担心就全部勾上。Fine-grained personal access tokens 这个我也试了但是提示权限不足。
- 邀请Bot账号作为项目的Collaborator
到这里就基本上完成了所有的前期准备工作了。
三、工作流配置
1. 创建工作流文件
在你的仓库中,
这里我有6个,具体可以看我的Rocketmq-rust项目里面,下面我们看一个
name: Auto Comment on PR
on:
pull_request_target:
types: [ opened, synchronize ]
branches: [ main ]
jobs:
comment:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Create a comment
uses: actions/github-script@v7
with:
github-token: ${{ secrets.BOT_TOKEN }}
script: |
const { owner, repo, number: issue_number } = context.issue;
// Get PR creator's username
const prCreator = context.payload.pull_request.user.login;
const commentBody = `🚀Thanks for your contribution 🎉 @${prCreator}. CodeRabbit(AI) will review your code first 🔥`;
github.rest.issues.createComment({
owner,
repo,
issue_number,
body: commentBody
});
github.rest.issues.addLabels({
owner,
repo,
issue_number,
labels: ['ready to review','waiting-review','Ai ready to review']
});
这个主要的作用就是为了再开发人员提交了PR的时候添加评论和对应PR标签
2. 配置密钥
在 .github/workflows/auto-comment-pr.yml
中,默认使用 secrets.GITHUB_TOKEN
,这是 GitHub 提供的内置 Token。如果需要更高权限的操作,可以将你的 PAT 保存到仓库的 Settings > Secrets and variables > Actions
中,命名为 BOT_TOKEN
,然后在代码中替换 secrets.GITHUB_TOKEN
为 secrets.BOT_TOKEN
。
四、工作流解析
1. 触发条件
on
部分指定了触发事件:
pull_request_target
:在 PR 创建或编辑时触发。issues
:在 Issue 创建或被打上标签时触发。
这些Actions的整体实现的功能就是,添加评论和请求CodeReview,在code review完成后关闭PR合并代码到主分支
完成Approved后
五、优化与扩展
1. 使用社区 Action
手写 curl
可以实现基础功能,但更复杂的场景建议使用社区开发的 Actions,例如:
- actions-ecosystem/action-add-labels:用于添加或移除标签;
- peter-evans/create-or-update-comment:用于更新或创建评论。
示例:
- name: Add Labels
uses: actions-ecosystem/action-add-labels@v1
with:
labels: 'bug, high-priority'
github_token: ${{ secrets.GITHUB_TOKEN }}
2. 响应更复杂的事件
可以通过自定义脚本实现更复杂的条件逻辑,例如:
- 使用
node
或python
编写脚本; - 集成更高级的 GitHub API 功能。
3. 定时任务
GitHub Actions 还支持定时触发,例如每日检查未关闭的 Issue 并提醒负责人:
on:
schedule:
- cron: '0 9 * * *' # 每天 9 点触发
六、总结
通过 GitHub Actions 和 GitHub API,我们可以轻松构建一个类似 GitHub Actions Bot 的自动化工具,无需额外服务器。本文示例仅展示了基础功能,实际应用中可以根据项目需求扩展复杂逻辑,比如自动化部署、代码检查、测试通知等。
欢迎在评论区分享你的 GitHub Actions 用例或问题!