ci: make github actions manual only
This commit is contained in:
parent
85981acb8d
commit
d2e282030b
3
.github/workflows/build.yml
vendored
3
.github/workflows/build.yml
vendored
@ -1,8 +1,7 @@
|
|||||||
name: Production Build
|
name: Production Build
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
workflow_dispatch:
|
||||||
pull_request:
|
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
|
|||||||
4
.github/workflows/dependency-audit.yml
vendored
4
.github/workflows/dependency-audit.yml
vendored
@ -1,10 +1,6 @@
|
|||||||
name: Dependency Audit
|
name: Dependency Audit
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
|
||||||
pull_request:
|
|
||||||
schedule:
|
|
||||||
- cron: "17 3 * * 1"
|
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
|
|||||||
3
.github/workflows/lint.yml
vendored
3
.github/workflows/lint.yml
vendored
@ -1,8 +1,7 @@
|
|||||||
name: Quality Gates
|
name: Quality Gates
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
workflow_dispatch:
|
||||||
pull_request:
|
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
|
|||||||
8
.github/workflows/playwright.yml
vendored
8
.github/workflows/playwright.yml
vendored
@ -1,9 +1,6 @@
|
|||||||
name: Playwright Tests
|
name: Playwright Tests
|
||||||
on:
|
on:
|
||||||
push:
|
workflow_dispatch:
|
||||||
branches: [main, master]
|
|
||||||
pull_request:
|
|
||||||
branches: [main, master]
|
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
@ -16,9 +13,6 @@ jobs:
|
|||||||
test:
|
test:
|
||||||
timeout-minutes: 30
|
timeout-minutes: 30
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-22.04
|
||||||
if: >-
|
|
||||||
github.event_name == 'push' ||
|
|
||||||
github.event.pull_request.head.repo.full_name == github.repository
|
|
||||||
env:
|
env:
|
||||||
AUTH_SECRET: ${{ secrets.AUTH_SECRET }}
|
AUTH_SECRET: ${{ secrets.AUTH_SECRET }}
|
||||||
POSTGRES_URL: ${{ secrets.POSTGRES_URL }}
|
POSTGRES_URL: ${{ secrets.POSTGRES_URL }}
|
||||||
|
|||||||
@ -118,7 +118,7 @@ components/home/lovart/ Lovart home focused render sections
|
|||||||
lib/ DB, AI providers, storage, observability, domain logic
|
lib/ DB, AI providers, storage, observability, domain logic
|
||||||
docs/ Deployment, operations, architecture and feature notes
|
docs/ Deployment, operations, architecture and feature notes
|
||||||
tests/ Playwright e2e and route-level tests
|
tests/ Playwright e2e and route-level tests
|
||||||
.github/workflows/ Quality gates, dependency audit and Playwright CI
|
.github/workflows/ Manual quality gates, dependency audit and Playwright CI
|
||||||
```
|
```
|
||||||
|
|
||||||
## 部署与运维
|
## 部署与运维
|
||||||
@ -126,6 +126,7 @@ tests/ Playwright e2e and route-level tests
|
|||||||
- 生产部署建议使用受控反向代理,并只在 Host 头可信时设置 `AUTH_TRUST_HOST=true`。
|
- 生产部署建议使用受控反向代理,并只在 Host 头可信时设置 `AUTH_TRUST_HOST=true`。
|
||||||
- 首页公开接口应保持快速返回,慢数据库或外部服务异常时返回缓存或 fallback。
|
- 首页公开接口应保持快速返回,慢数据库或外部服务异常时返回缓存或 fallback。
|
||||||
- 生产日志默认通过 `LOG_LEVEL=info` 控制,敏感字段会被 `lib/observability` 脱敏。
|
- 生产日志默认通过 `LOG_LEVEL=info` 控制,敏感字段会被 `lib/observability` 脱敏。
|
||||||
|
- GitHub Actions workflow 默认只允许手动触发,避免私有仓库免费额度被 push 自动消耗。
|
||||||
- Dependency Audit workflow 独立守住 high/critical 依赖审计基线,避免安全回归只靠人工发现。
|
- Dependency Audit workflow 独立守住 high/critical 依赖审计基线,避免安全回归只靠人工发现。
|
||||||
- Playwright workflow 独立于基础质量门禁,避免把密钥依赖和 e2e 成本混入每次 lint/typecheck。
|
- Playwright workflow 独立于基础质量门禁,避免把密钥依赖和 e2e 成本混入每次 lint/typecheck。
|
||||||
|
|
||||||
|
|||||||
@ -58,7 +58,7 @@ SMOKE_BASE_URL=http://127.0.0.1:3001 pnpm verify:release
|
|||||||
|
|
||||||
- Push 当前分支到 GitHub。
|
- Push 当前分支到 GitHub。
|
||||||
- 创建 PR,并在 PR 描述中粘贴本地验证证据。
|
- 创建 PR,并在 PR 描述中粘贴本地验证证据。
|
||||||
- 等待 GitHub Actions:基础质量门禁、Production Build、Dependency Audit、Playwright workflow。
|
- 如需远端验证,手动触发 GitHub Actions:基础质量门禁、Production Build、Dependency Audit、Playwright workflow。
|
||||||
- 根据 PR diff 做最后一次人工审查;如 GitHub Actions 与本地结果不一致,以远端 CI 为准处理。
|
- 根据 PR diff 做最后一次人工审查;如 GitHub Actions 与本地结果不一致,以远端 CI 为准处理。
|
||||||
|
|
||||||
## 当前不包含的范围
|
## 当前不包含的范围
|
||||||
|
|||||||
@ -17,7 +17,7 @@ pnpm --silent audit:security:json > audit-security.json
|
|||||||
The explicit registry is intentional. Some mirrors do not implement the npm audit endpoint, which makes audit fail for infrastructure reasons rather than project reasons.
|
The explicit registry is intentional. Some mirrors do not implement the npm audit endpoint, which makes audit fail for infrastructure reasons rather than project reasons.
|
||||||
Use `pnpm --silent audit:security:json` when another script needs machine-readable JSON without pnpm's script header.
|
Use `pnpm --silent audit:security:json` when another script needs machine-readable JSON without pnpm's script header.
|
||||||
|
|
||||||
GitHub Actions also runs `.github/workflows/dependency-audit.yml` on push, pull request, weekly schedule and manual dispatch. Keep that workflow independent from the fast quality gate so registry or network issues do not hide lint/typecheck feedback.
|
GitHub Actions can run `.github/workflows/dependency-audit.yml` through manual dispatch. Keep that workflow independent from the fast quality gate so registry or network issues do not hide lint/typecheck feedback. The private repository currently avoids automatic Actions triggers to preserve the free quota.
|
||||||
|
|
||||||
## Current Snapshot
|
## Current Snapshot
|
||||||
|
|
||||||
|
|||||||
@ -64,7 +64,7 @@ REQUIRE_UP_TO_DATE=true pnpm check:branch
|
|||||||
|
|
||||||
CI 和本地提交前检查复用同一个入口,避免规则漂移。
|
CI 和本地提交前检查复用同一个入口,避免规则漂移。
|
||||||
|
|
||||||
`.github/workflows/dependency-audit.yml` 独立运行 `pnpm audit:security`,在 push、pull request、每周定时任务和手动触发时守住 high/critical 依赖审计基线。它不依赖任何 secret,避免开源 PR 因环境变量缺失误失败。
|
`.github/workflows/dependency-audit.yml` 独立运行 `pnpm audit:security`,通过手动触发守住 high/critical 依赖审计基线。它不依赖任何 secret;当前私有仓库采用手动 CI 策略,避免 push 自动消耗 GitHub Actions 免费额度。
|
||||||
|
|
||||||
`.github/workflows/build.yml` 独立运行 `pnpm build`,验证生产构建、Next.js route collection 和静态/动态页面边界。该 workflow 使用占位环境变量,不连接真实数据库;数据库迁移仍由部署流程显式执行。
|
`.github/workflows/build.yml` 独立运行 `pnpm build`,验证生产构建、Next.js route collection 和静态/动态页面边界。该 workflow 使用占位环境变量,不连接真实数据库;数据库迁移仍由部署流程显式执行。
|
||||||
|
|
||||||
@ -79,7 +79,7 @@ pnpm audit:security
|
|||||||
pnpm audit:security:json
|
pnpm audit:security:json
|
||||||
```
|
```
|
||||||
|
|
||||||
`pnpm audit:security` 显式使用官方 npm registry,避免镜像源缺少 audit endpoint 导致误失败。当前依赖安全债务记录在 [dependency-risk-register.md](dependency-risk-register.md)。本命令不嵌入 `pnpm check:quality`,而是由独立 Dependency Audit workflow 持续执行,避免网络型 registry 故障拖垮基础 lint/typecheck 反馈。
|
`pnpm audit:security` 显式使用官方 npm registry,避免镜像源缺少 audit endpoint 导致误失败。当前依赖安全债务记录在 [dependency-risk-register.md](dependency-risk-register.md)。本命令不嵌入 `pnpm check:quality`,而是由独立 Dependency Audit workflow 手动执行,避免网络型 registry 故障拖垮基础 lint/typecheck 反馈。
|
||||||
|
|
||||||
## 日志治理
|
## 日志治理
|
||||||
|
|
||||||
|
|||||||
@ -16,7 +16,7 @@ SMOKE_BASE_URL=http://127.0.0.1:3001 pnpm verify:release
|
|||||||
|
|
||||||
- `pnpm check:quality` 通过 lint、日志脱敏门禁、公开交付面品牌治理、CI hygiene、环境变量示例卫生、secret hygiene、package metadata、测试门禁卫生、轻量 helper 回归测试、类型检查、diff hygiene 和 tracked 污染物检查。
|
- `pnpm check:quality` 通过 lint、日志脱敏门禁、公开交付面品牌治理、CI hygiene、环境变量示例卫生、secret hygiene、package metadata、测试门禁卫生、轻量 helper 回归测试、类型检查、diff hygiene 和 tracked 污染物检查。
|
||||||
- `pnpm check:branch` 确认当前分支相对 `github/main` 没有 dry-run merge 冲突;behind main 会提示为 warning,发布前可用 `REQUIRE_UP_TO_DATE=true` 提升为失败。
|
- `pnpm check:branch` 确认当前分支相对 `github/main` 没有 dry-run merge 冲突;behind main 会提示为 warning,发布前可用 `REQUIRE_UP_TO_DATE=true` 提升为失败。
|
||||||
- `pnpm audit:security` 输出已审计,Dependency Audit workflow 也应通过;若仍有 critical/high,必须在 [dependency-risk-register.md](dependency-risk-register.md) 中记录 remediation 或风险接受状态。
|
- `pnpm audit:security` 输出已审计;如手动运行 Dependency Audit workflow,也应通过。若仍有 critical/high,必须在 [dependency-risk-register.md](dependency-risk-register.md) 中记录 remediation 或风险接受状态。
|
||||||
- `pnpm build` 完成生产构建,验证 Next.js route collection、静态/动态页面边界和构建期 TypeScript。
|
- `pnpm build` 完成生产构建,验证 Next.js route collection、静态/动态页面边界和构建期 TypeScript。
|
||||||
- `pnpm smoke:routes` 验证 `/` 返回 200。
|
- `pnpm smoke:routes` 验证 `/` 返回 200。
|
||||||
- `/classic` 和 `/chat/test-id` 重定向到 `/`。
|
- `/classic` 和 `/chat/test-id` 重定向到 `/`。
|
||||||
@ -30,7 +30,7 @@ SMOKE_BASE_URL=http://127.0.0.1:3001 pnpm verify:release
|
|||||||
- `/settings` 本地 AI 设置已组件化,保存 key、SWR key 和业务 API 保持稳定。
|
- `/settings` 本地 AI 设置已组件化,保存 key、SWR key 和业务 API 保持稳定。
|
||||||
- 首页采用轻量壳优先渲染,个性化和公开数据渐进加载。
|
- 首页采用轻量壳优先渲染,个性化和公开数据渐进加载。
|
||||||
- 高风险日志链路已纳入 `pnpm check:logs`,禁止回流裸 `console.*`。
|
- 高风险日志链路已纳入 `pnpm check:logs`,禁止回流裸 `console.*`。
|
||||||
- CI 基础门禁与本地 `pnpm check:quality` 使用同一套污染物检查脚本;Dependency Audit workflow 独立守住 high/critical 依赖审计基线。
|
- CI 基础门禁与本地 `pnpm check:quality` 使用同一套污染物检查脚本;GitHub Actions 当前采用手动触发,避免私有仓库免费额度被自动消耗。
|
||||||
- 安全披露、敏感信息和日志规则以根目录 `SECURITY.md` 为准。
|
- 安全披露、敏感信息和日志规则以根目录 `SECURITY.md` 为准。
|
||||||
- 分支、提交、PR 和验证要求以根目录 `CONTRIBUTING.md` 为准。
|
- 分支、提交、PR 和验证要求以根目录 `CONTRIBUTING.md` 为准。
|
||||||
|
|
||||||
@ -43,7 +43,7 @@ SMOKE_BASE_URL=http://127.0.0.1:3001 pnpm verify:release
|
|||||||
|
|
||||||
## 已知后续专项
|
## 已知后续专项
|
||||||
|
|
||||||
- 远端 GitHub Actions 实跑结果需要在 push/PR 后确认。
|
- 远端 GitHub Actions 实跑结果需要在手动触发 workflow 后确认。
|
||||||
- 当前依赖 audit baseline 已清除 critical/high;moderate/low 和未来 advisories 继续通过 [dependency-risk-register.md](dependency-risk-register.md) 跟踪。
|
- 当前依赖 audit baseline 已清除 critical/high;moderate/low 和未来 advisories 继续通过 [dependency-risk-register.md](dependency-risk-register.md) 跟踪。
|
||||||
- Enhance、Angle Edit、Prompt Optimizer 等历史接口仍可继续分批纳入日志门禁。
|
- Enhance、Angle Edit、Prompt Optimizer 等历史接口仍可继续分批纳入日志门禁。
|
||||||
- Canvas/Agent 少数大型历史模块仍可继续领域化拆分,但不阻塞当前交付基线。
|
- Canvas/Agent 少数大型历史模块仍可继续领域化拆分,但不阻塞当前交付基线。
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user