
关于
使用 AI 辅助自动化 GitHub 工作流的模式,灵感来自 Gemini CLI 和现代 DevOps 实践。
name: github-workflow-automation description: "使用 AI 辅助自动化 GitHub 工作流的模式,灵感来自 Gemini CLI 和现代 DevOps 实践。" risk: critical source: community date_added: "2026-02-27"
GitHub 工作流自动化
使用 AI 辅助自动化 GitHub 工作流的模式,灵感来自 Gemini CLI 和现代 DevOps 实践。
适用场景
在以下情况使用此技能:
- 使用 AI 自动化 PR 审查
- 设置 Issue 分类自动化
- 创建 GitHub Actions 工作流
- 将 AI 集成到 CI/CD 流水线
- 自动化 Git 操作(rebase、cherry-pick)
1. 自动化 PR 审查
1.1 PR 审查 Action
# .github/workflows/ai-review.yml
name: AI Code Review
on:
pull_request:
types: [opened, synchronize]
jobs:
review:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Get changed files
id: changed
run: |
files=$(git diff --name-only origin/${{ github.base_ref }}...HEAD)
echo "files<<EOF" >> $GITHUB_OUTPUT
echo "$files" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
- name: Get diff
id: diff
run: |
diff=$(git diff origin/${{ github.base_ref }}...HEAD)
echo "diff<<EOF" >> $GITHUB_OUTPUT
echo "$diff" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
- name: AI Review
uses: actions/github-script@v7
with:
script: |
const { Anthropic } = require('@anthropic-ai/sdk');
const client = new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY });
const response = await client.messages.create({
model: "claude-3-sonnet-20240229",
max_tokens: 4096,
messages: [{
role: "user",
content: 'Review this PR diff and provide feedback:\n\nChanged files: ${{ steps.changed.outputs.files }}\n\nDiff:\n${{ steps.diff.outputs.diff }}\n\nProvide:\n1. Summary of changes\n2. Potential issues or bugs\n3. Suggestions for improvement\n4. Security concerns if any\n\nFormat as GitHub markdown.'
}]
});
await github.rest.pulls.createReview({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: context.issue.number,
body: response.content[0].text,
event: 'COMMENT'
});
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
1.2 审查评论模式
# AI 审查结构
## 摘要
PR 做了什么的简要描述。
## 优点
- 代码结构良好
- 测试覆盖充分
- 命名规范清晰
## 潜在问题
1. **第 42 行**:可能的空指针异常
```javascript
// 当前
user.profile.name;
// 建议
user?.profile?.name ?? "Unknown";
```
- 第 78 行:考虑错误处理
// 添加 try-catch 或 .catch()
建议
- 考虑将验证逻辑提取到单独的函数中
- 为公共方法添加 JSDoc 注释
安全说明
- 未检测到敏感数据暴露
- API 密钥处理看起来正确
1.3 聚焦审查
# 仅审查特定文件类型
- name: Filter code files
run: |
files=$(git diff --name-only origin/${{ github.base_ref }}...HEAD | \
grep -E '\.(ts|tsx|js|jsx|py|go)$' || true)
echo "code_files=$files" >> $GITHUB_OUTPUT
# 带上下文的审查
- name: AI Review with context
run: |
# 包含相关上下文文件
context=""
for file in ${{ steps.changed.outputs.files }}; do
if [[ -f "$file" ]]; then
context+="=== $file ===\n$(cat $file)\n\n"
fi
done
# 发送带完整文件上下文的 AI 审查
2. Issue 分类自动化
2.1 自动标签 Issue
# .github/workflows/issue-triage.yml
name: Issue Triage
on:
issues:
types: [opened]
jobs:
triage:
runs-on: ubuntu-latest
permissions:
issues: write
steps:
- name: Analyze issue
uses: actions/github-script@v7
with:
script: |
const issue = context.payload.issue;
// 调用 AI 分析
const analysis = await analyzeIssue(issue.title, issue.body);
// 应用标签
const labels = [];
if (analysis.type === 'bug') {
labels.push('bug');
if (analysis.severity === 'high') labels.push('priorit
兼容工具
Claude CodeCursor
标签
AI与机器学习