Files
lingxi/.gitea/workflows/ci.yml
T
Stev_Wang 88d9c77522 fix(ci): 修复全新检出 Lint 失败并恢复 main 自动触发
背景:run #37 在 runner 上失败于 Lint,日志报 @lingxi/* 下发类型无法解析——
workspace 包 types 指向 dist/,而 dist/ 被 gitignore,全新检出未构建导致
类型感知规则失效;另 postgres 健康检查 -U lingxi 与 POSTGRES_USER=postgres 不一致。

改动:
- ci.yml:Lint 前新增 packages 构建步骤;健康检查改为 pg_isready -U postgres;
  恢复 push main 自动触发(保留 workflow_dispatch)。
- ci-local.mjs:同步补充 packages 构建步骤,避免全新检出本地 CI 同样失败。

影响面:仅 CI 配置与本地 CI 脚本,不改业务代码;push main 后自动跑完整门禁。
回滚方式:revert 本提交;如需临时停用远端 CI,注释 on.push。
验证证据:runner 冒烟 run #38 全绿(ci-smoke.yml,71s);本提交推送后由远端 ci.yml 完整链路验证。
2026-11-04 17:52:16 +08:00

125 lines
3.3 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 自建 Gitea 已部署 Actions runner(gitea-runner-01,label ubuntu-latest):
# push main 自动执行,也可在 Actions 页面手动触发。轻量冒烟见 ci-smoke.yml。
# 本地等价命令:pnpm ci:local(推送前仍必须全绿,远端 CI 是第二道防线)。
name: ci
on:
push:
branches: [main]
workflow_dispatch:
concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true
jobs:
verify:
name: 质量门禁
runs-on: ubuntu-latest
timeout-minutes: 30
services:
postgres:
image: postgres:18-alpine
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: lingxi_test
ports:
- 5432:5432
options: >-
--health-cmd "pg_isready -U postgres -d lingxi_test"
--health-interval 5s
--health-timeout 3s
--health-retries 10
redis:
image: redis:7.4-alpine
ports:
- 6379:6379
options: >-
--health-cmd "redis-cli ping"
--health-interval 5s
--health-timeout 3s
--health-retries 10
env:
NODE_ENV: test
LOG_LEVEL: error
DATABASE_URL: postgresql://postgres:postgres@127.0.0.1:5432/lingxi_test?schema=public
REDIS_URL: redis://127.0.0.1:6379
JWT_SECRET: ci-only-access-secret
JWT_REFRESH_SECRET: ci-only-refresh-secret
WEB_ORIGIN: http://127.0.0.1:4173
VITE_PUBLIC_API_BASE_URL: http://127.0.0.1:3000/api/v1
VITE_PUBLIC_DEMO_SESSION: 'true'
PLAYWRIGHT_CHANNEL: ''
steps:
- name: 检出代码
uses: actions/checkout@v4
- name: 安装 pnpm
uses: pnpm/action-setup@v4
with:
version: 10.34.9
- name: 安装 Node.js
uses: actions/setup-node@v4
with:
node-version: 24.15.0
cache: pnpm
- name: 安装依赖
run: pnpm install --frozen-lockfile
# workspace 包的 types 指向 dist/(gitignore),全新检出必须先构建,
# 否则 Lint 的类型感知规则会报 type that cannot be resolved。
- name: 构建 workspace 包(Lint 类型解析前置)
run: pnpm exec turbo run build --filter='./packages/*'
- name: 格式检查
run: pnpm format:check
- name: Lint
run: pnpm lint
- name: 类型检查
run: pnpm typecheck
- name: 单元测试与覆盖率
run: pnpm test
- name: 构建
run: pnpm build
- name: 数据库迁移
run: pnpm exec prisma migrate deploy
- name: 集成测试
run: pnpm test:int
- name: 导出 OpenAPI 快照并检查破坏性变更
run: |
pnpm openapi:export
pnpm openapi:diff
- name: 安装 Playwright 浏览器
run: pnpm exec playwright install --with-deps chromium
- name: 端到端冒烟
run: pnpm test:e2e
- name: 归档测试产物
if: always()
uses: actions/upload-artifact@v4
with:
name: test-artifacts
if-no-files-found: ignore
path: |
coverage
apps/*/coverage
packages/*/coverage
test-results
playwright-report
openapi/lingxi.openapi.json