第 7 / 8 节15 分钟
⚡

自动化工作流

高级

创建自动化工作流提高开发效率

🎬

视频教程即将上线

自动化工作流

学习如何使用 OpenCode 创建自动化工作流,提高开发效率。

# 工作流概述#

工作流是一系列自动执行的任务,可以:

  • 响应特定事件(文件变化、Git 操作等)
  • 按计划定时执行
  • 手动触发运行

# 创建工作流#

## 工作流文件#

在项目中创建 .opencode/workflows/ 目录:

.opencode/
└── workflows/
    ├── pre-commit.yaml
    ├── on-save.yaml
    └── daily-review.yaml

## 基本结构#

yaml
1# .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

# 触发器类型#

## 事件触发#

yaml
1# 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 点

## 手动触发#

yaml
1trigger:
2  manual: true
3
4# 使用
5❯ /workflow run pre-commit

## 条件触发#

yaml
1trigger:
2  event: file-save
3  condition: |
4    file.extension in ['ts', 'tsx'] &&
5    file.path.startsWith('src/')

# 工作流步骤#

## Shell 命令#

yaml
1steps:
2  - name: Install dependencies
3    run: npm install
4
5  - name: Build
6    run: npm run build
7    timeout: 300  # 5 分钟超时

## OpenCode 任务#

yaml
1steps:
2  - name: Code Review
3    opencode: |
4      审查最近的代码更改,指出潜在问题
5
6  - name: Generate Tests
7    opencode: |
8      为新增的函数生成单元测试

## 条件执行#

yaml
1steps:
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

## 并行执行#

yaml
1steps:
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

# 变量与环境#

## 内置变量#

yaml
1steps:
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 }}"

## 自定义变量#

yaml
1variables:
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

## 环境变量#

yaml
1steps:
2  - name: Build
3    env:
4      NODE_ENV: production
5      CI: true
6    run: npm run build

# 实用工作流示例#

## 保存时格式化#

yaml
1# .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 }}

## 智能代码审查#

yaml
1# .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#

yaml
1# .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 链接

## 每日代码健康检查#

yaml
1# .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: 审查以下代码更改...
...

# 高级功能#

## 工作流复用#

yaml
1# .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

## 错误处理#

yaml
1steps:
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

## 通知集成#

yaml
1notification:
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: "构建成功"

# 下一步#

掌握自动化工作流后,学习安全与隐私最佳实践。