Files
lingxi/.gitea/workflows/ci.yml
T
Stev_Wang 6e6435d47b
ci / 质量门禁 (push) Failing after 2m12s
fix(ci): 修正 JWT 环境变量名并补充迁移后种子
背景:run #39 在第 8 步「单元测试与覆盖率」失败,日志报
环境变量校验失败:DATABASE_URL / REDIS_URL / JWT_ACCESS_SECRET / JWT_REFRESH_SECRET Required——
ci.yml 写的是 JWT_SECRET(应用实际读 JWT_ACCESS_SECRET 且要求 ≥32 位);
另集成测试依赖 seed 的部门 content-g1 与示例角色,ci.yml 只有 migrate deploy 无 seed。

改动:
- JWT_SECRET 改为 JWT_ACCESS_SECRET,access / refresh 密钥均补足 32 位;
- 「数据库迁移」步骤补充 pnpm db:seed(与本地 ci:local 对齐)。

影响面:仅 CI job env 与步骤,不改应用代码;种子只作用于 CI 的空库。
回滚方式:revert 本提交。
验证证据:推送后 run 上一次已推进到 Lint/类型检查通过(前两处修复生效),本次继续验证单测与后续链路。
2026-11-04 17:57:14 +08:00

127 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_ACCESS_SECRET: ci-only-access-secret-at-least-32-chars
JWT_REFRESH_SECRET: ci-only-refresh-secret-at-least-32-chars
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
pnpm db:seed
- 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