第 7 / 8 节15 分钟
⚡
自动化工作流
高级创建自动化工作流提高开发效率
🎬
视频教程即将上线
自动化工作流
学习如何使用 OpenCode 创建自动化工作流,提高开发效率。
# 工作流概述#
工作流是一系列自动执行的任务,可以:
- 响应特定事件(文件变化、Git 操作等)
- 按计划定时执行
- 手动触发运行
# 创建工作流#
## 工作流文件#
在项目中创建 .opencode/workflows/ 目录:
.opencode/
└── workflows/
├── pre-commit.yaml
├── on-save.yaml
└── daily-review.yaml
## 基本结构#
yaml1# .opencode/workflows/pre-commit.yaml 2name: Pre-commit Check 3description: 提交前自动检查 4 5trigger: 6 event: pre-commit 7 8steps: 9 - name: Lint 10 run: npm run lint 11 12 - name: Type Check 13 run: npm run type-check 14 15 - name: Test 16 run: npm test
# 触发器类型#
## 事件触发#
yaml1# Git 事件 2trigger: 3 event: pre-commit # 提交前 4 event: post-commit # 提交后 5 event: pre-push # 推送前 6 7# 文件事件 8trigger: 9 event: file-save 10 paths: 11 - "src/**/*.ts" 12 - "src/**/*.tsx" 13 14# 时间事件 15trigger: 16 schedule: "0 9 * * *" # 每天 9 点
## 手动触发#
yaml1trigger: 2 manual: true 3 4# 使用 5❯ /workflow run pre-commit
## 条件触发#
yaml1trigger: 2 event: file-save 3 condition: | 4 file.extension in ['ts', 'tsx'] && 5 file.path.startsWith('src/')
# 工作流步骤#
## Shell 命令#
yaml1steps: 2 - name: Install dependencies 3 run: npm install 4 5 - name: Build 6 run: npm run build 7 timeout: 300 # 5 分钟超时
## OpenCode 任务#
yaml1steps: 2 - name: Code Review 3 opencode: | 4 审查最近的代码更改,指出潜在问题 5 6 - name: Generate Tests 7 opencode: | 8 为新增的函数生成单元测试
## 条件执行#
yaml1steps: 2 - name: Check for changes 3 id: changes 4 run: git diff --name-only HEAD~1 5 6 - name: Run tests 7 if: steps.changes.output contains 'src/' 8 run: npm test 9 10 - name: Deploy 11 if: branch == 'main' && steps.tests.success 12 run: npm run deploy
## 并行执行#
yaml1steps: 2 - name: Parallel checks 3 parallel: 4 - name: Lint 5 run: npm run lint 6 - name: Type check 7 run: npm run type-check 8 - name: Test 9 run: npm test
# 变量与环境#
## 内置变量#
yaml1steps: 2 - name: Echo info 3 run: | 4 echo "Branch: ${{ branch }}" 5 echo "Commit: ${{ commit.sha }}" 6 echo "Author: ${{ commit.author }}" 7 echo "Changed files: ${{ changed_files }}"
## 自定义变量#
yaml1variables: 2 DEPLOY_ENV: production 3 API_URL: https://api.example.com 4 5steps: 6 - name: Deploy 7 run: | 8 echo "Deploying to ${{ DEPLOY_ENV }}" 9 curl ${{ API_URL }}/deploy
## 环境变量#
yaml1steps: 2 - name: Build 3 env: 4 NODE_ENV: production 5 CI: true 6 run: npm run build
# 实用工作流示例#
## 保存时格式化#
yaml1# .opencode/workflows/on-save.yaml 2name: Format on Save 3trigger: 4 event: file-save 5 paths: ["src/**/*.{ts,tsx,js,jsx}"] 6 7steps: 8 - name: Format 9 run: prettier --write ${{ changed_file }} 10 11 - name: Fix lint 12 run: eslint --fix ${{ changed_file }}
## 智能代码审查#
yaml1# .opencode/workflows/code-review.yaml 2name: AI Code Review 3trigger: 4 event: pre-commit 5 6steps: 7 - name: Get diff 8 id: diff 9 run: git diff --cached 10 11 - name: Review code 12 opencode: | 13 审查以下代码更改,检查: 14 1. 潜在的 bug 15 2. 性能问题 16 3. 安全漏洞 17 4. 代码风格问题 18 19 ${{ steps.diff.output }} 20 21 - name: Check review 22 if: steps.review.issues > 0 23 fail: true 24 message: "发现 ${{ steps.review.issues }} 个问题,请修复后再提交"
## 自动生成 Changelog#
yaml1# .opencode/workflows/changelog.yaml 2name: Update Changelog 3trigger: 4 event: post-commit 5 branches: [main] 6 7steps: 8 - name: Get commits 9 id: commits 10 run: git log --oneline HEAD~5..HEAD 11 12 - name: Generate changelog 13 opencode: | 14 根据以下提交记录更新 CHANGELOG.md: 15 ${{ steps.commits.output }} 16 17 格式要求: 18 - 按类型分组(feat, fix, docs 等) 19 - 包含提交 hash 链接
## 每日代码健康检查#
yaml1# .opencode/workflows/daily-health.yaml 2name: Daily Health Check 3trigger: 4 schedule: "0 9 * * 1-5" # 工作日每天 9 点 5 6steps: 7 - name: Check dependencies 8 run: npm outdated 9 10 - name: Security audit 11 run: npm audit 12 13 - name: Dead code detection 14 opencode: | 15 扫描项目,找出未使用的: 16 - 导入 17 - 函数 18 - 变量 19 20 - name: Generate report 21 opencode: | 22 生成代码健康报告,包含: 23 - 依赖更新建议 24 - 安全问题 25 - 代码质量指标 26 27 - name: Send notification 28 if: steps.any_issues 29 run: | 30 curl -X POST $SLACK_WEBHOOK \ 31 -d '{"text": "每日代码检查发现问题,请查看报告"}'
# 工作流管理#
## 查看工作流#
❯ /workflow list
Available workflows:
pre-commit - Pre-commit Check (event: pre-commit)
on-save - Format on Save (event: file-save)
code-review - AI Code Review (event: pre-commit)
daily-health - Daily Health Check (schedule: 0 9 * * 1-5)
## 运行工作流#
❯ /workflow run code-review
Running: AI Code Review
[1/3] Get diff... ✓
[2/3] Review code... ✓
[3/3] Check review... ✓
Workflow completed successfully
## 查看历史#
❯ /workflow history
Recent runs:
pre-commit - 10:30 - Success (2.3s)
on-save - 10:28 - Success (0.5s)
code-review - 10:25 - Failed (step 3)
## 调试工作流#
❯ /workflow run code-review --debug
[DEBUG] Trigger: manual
[DEBUG] Variables: { branch: 'main', ... }
[DEBUG] Step 1: Get diff
[DEBUG] Command: git diff --cached
[DEBUG] Output: (45 lines)
[DEBUG] Step 2: Review code
[DEBUG] OpenCode prompt: 审查以下代码更改...
...
# 高级功能#
## 工作流复用#
yaml1# .opencode/workflows/shared/test.yaml 2name: Shared Test Steps 3steps: 4 - name: Install 5 run: npm ci 6 - name: Test 7 run: npm test 8 9# .opencode/workflows/ci.yaml 10name: CI 11trigger: 12 event: push 13 14steps: 15 - uses: shared/test.yaml 16 - name: Build 17 run: npm run build
## 错误处理#
yaml1steps: 2 - name: Risky operation 3 run: some-command 4 continue_on_error: true 5 6 - name: Handle failure 7 if: steps.previous.failed 8 run: | 9 echo "Previous step failed, running cleanup" 10 ./cleanup.sh
## 通知集成#
yaml1notification: 2 on_failure: 3 slack: 4 webhook: ${{ secrets.SLACK_WEBHOOK }} 5 message: "工作流 ${{ workflow.name }} 失败" 6 7 on_success: 8 email: 9 to: [email protected] 10 subject: "构建成功"
# 下一步#
掌握自动化工作流后,学习安全与隐私最佳实践。