4.1 KiB
yedir-ai 运维与质量门禁
本文档记录日常开发、合并前检查、性能烟测和常见故障处理方式。
合并前检查
pnpm lint
pnpm check:logs
pnpm check:brand
pnpm check:ci
pnpm exec tsc --noEmit --pretty false
git diff --check
pnpm check:artifacts
pnpm clean:artifacts
等价的一键质量门禁:
pnpm check:quality
其中 pnpm check:artifacts 会检查 .DS_Store、swap 文件、.env.local、.claude/、migration backup 和 tsconfig.tsbuildinfo 等本地污染物是否被 Git 追踪。
pnpm clean:artifacts 会清理当前工作区常见本地垃圾文件,例如 .DS_Store、swap 文件和 tsconfig.tsbuildinfo。它会跳过 .git、node_modules、.next、.pnpm-store、.venv 等重目录,适合在提交或打包前手动执行。
CI
.github/workflows/lint.yml 是基础质量门禁,运行 pnpm check:quality,负责 lint、日志治理、公开交付面品牌治理、CI hygiene、类型检查、diff hygiene 和 tracked 污染物检查。
CI 和本地提交前检查复用同一个入口,避免规则漂移。
Playwright workflow 独立运行,避免 e2e 依赖、浏览器安装和 secrets 影响基础门禁反馈速度。
Dependabot 每周检查 npm/pnpm 依赖和 GitHub Actions。依赖 PR 仍需按 PR 模板运行 pnpm check:quality 和路由烟测,不应自动合并。
日志治理
新增或修改已治理文件时不要使用裸 console.*。使用:
import { createLogger } from "@/lib/observability/logger";
const logger = createLogger("scope-name");
logger.info("event name", { count: 1 });
logger.error("event failed", error);
客户端使用 createClientLogger。生产环境默认静默,除非显式设置 NEXT_PUBLIC_ENABLE_CLIENT_LOGS=true。
pnpm check:logs 会检查已治理文件是否重新引入裸 console,并验证 token、API Key、URL、base64、password 等敏感值不会明文输出。
品牌与模板残留治理
pnpm check:brand
pnpm check:brand 只扫描 README、核心 docs、GitHub 模板、workflow 和 package metadata 等公开交付入口。历史方案文档和兼容性 runtime key 不在本门禁范围内,避免为了改名破坏旧用户数据或研发记录。
CI Hygiene
pnpm check:ci
pnpm check:ci 会检查 workflow 是否保留只读权限、concurrency、固定 Ubuntu runner、固定 pnpm 版本、frozen install、cache v4,并禁止 @latest、ubuntu-latest、--no-lint 或构建 fallback 这类不稳定入口回流。
首页性能烟测
AUTH_TRUST_HOST=true PORT=3001 pnpm dev
curl -I --max-time 30 http://127.0.0.1:3001/
curl -I --max-time 30 "http://127.0.0.1:3001/api/site-settings?scope=home"
curl -I --max-time 30 "http://127.0.0.1:3001/api/featured?page=1&pageSize=24"
首页 HTML 应快速返回。公开轻量接口在数据库慢或不可用时应快速返回缓存或 fallback,不应长时间挂住首屏。
路由回归烟测
推荐使用脚本化检查:
AUTH_TRUST_HOST=true PORT=3001 pnpm dev
SMOKE_BASE_URL=http://127.0.0.1:3001 pnpm smoke:routes
手动检查等价命令:
curl -I http://127.0.0.1:3001/
curl -I http://127.0.0.1:3001/classic
curl -I http://127.0.0.1:3001/chat/test-id
curl -I http://127.0.0.1:3001/settings
curl -I -X POST http://127.0.0.1:3001/api/files/upload
预期:
/返回 200。/classic和/chat/test-id返回 307 到/。/settings未登录返回 307 到/login?callbackUrl=%2Fsettings。- 上传接口未登录返回 401。
常见故障
.next/dev/lock阻止启动:已有 dev server 持锁,先确认进程归属,不要误杀其他工作区服务。- 首页接口慢:先看
Server-Timing、X-Cache、X-Fallback,再查数据库连接池和公开接口 fallback。 - 登录 Host 错误:生产配置
AUTH_URL;仅在可信代理后设置AUTH_TRUST_HOST=true。 - 上传失败:确认后台存储配置、环境变量 S3 fallback 或
BLOB_READ_WRITE_TOKEN至少一组可用。 - 日志泄露风险:不要把完整 prompt、OAuth token、签名 URL、cookie、request body 放进日志 message。