Repository navigation
72 lines (62 loc) · 2.91 KB
/
Copy pathcodegen-diff.yml
File metadata and controls
72 lines (62 loc) · 2.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# SC-009:契约只读守门(AI-robust Hard)。
# 跑 `pnpm codegen` 后断言 packages/contracts/src/ 无 diff(含未提交的新增/删除)—— 业务包手改生成物即红。
name: codegen-diff
on:
pull_request:
push:
branches: [develop]
jobs:
codegen-readonly:
runs-on: ubuntu-latest
steps:
- name: Checkout gocell-web
uses: actions/checkout@v4
with:
path: gocell-web
# 读取 pin 的后端 SHA(tools/.gocell-ref,注释行剔除)。CI 钉死该 SHA 而非
# 追后端 develop HEAD —— 后端推进不再无故打红前端 CI(见 ADR
# docs/adr/20260618-01-pin-backend-contract-ref.md)。
- name: Read pinned backend ref
id: backendref
run: echo "ref=$(grep -vE '^[[:space:]]*#' gocell-web/tools/.gocell-ref | tr -d '[:space:]')" >> "$GITHUB_OUTPUT"
# 后端契约源仓库(公开仓库 ghbvf/gocell),checkout pin 的 SHA 为 gocell-web 同级目录
# (codegen 默认读 ../gocell/contracts)。公开仓库无需 PAT,默认 GITHUB_TOKEN 即可拉取。
- name: Checkout gocell (backend contracts) at pinned ref
uses: actions/checkout@v4
with:
repository: ghbvf/gocell
ref: ${{ steps.backendref.outputs.ref }}
path: gocell
# gocell-web checkout 在子目录,runner 根无 package.json,显式钉死 pnpm 版本
# (须与 gocell-web/package.json#packageManager 的 pnpm@11.4.0 保持一致)。
- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 11.4.0
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 22
cache: pnpm
cache-dependency-path: gocell-web/pnpm-lock.yaml
- name: Install (frozen lockfile)
run: pnpm install --frozen-lockfile
working-directory: gocell-web
- name: Regenerate contracts
run: pnpm codegen
working-directory: gocell-web
# 守门:codegen 产物须与提交完全一致。`git diff` 不报 untracked 新文件,故用
# `git status --porcelain` 同时覆盖 修改 / 新增 / 删除 三种漂移。
- name: Assert contracts are read-only (no manual edits / uncommitted)
run: |
if [ -n "$(git status --porcelain packages/contracts/src/)" ]; then
echo "::error::packages/contracts/src/ 与 codegen 输出不一致(含未提交的新增/修改/删除)。请本地跑 \`pnpm codegen\` 后提交。"
git status --porcelain packages/contracts/src/
git diff packages/contracts/src/
exit 1
fi
working-directory: gocell-web
# 守门第二段:生成物未漂移后,确认下游消费端类型未被破坏(package-boundaries §CI 校验链路 步骤 4)。
- name: Typecheck downstream consumers
run: pnpm -w typecheck
working-directory: gocell-web