Skip to content

线上 .env.pack strict 合并与 E2E Readonly

1. 合并 strict 到 .env.pack

deploy/docker/.env.pack 在 gitignore 中,须在部署机或本机操作,勿提交仓库。

方式 A:脚本(推荐,幂等)

bash
# 仓库根目录;需已有 .env.pack(含 DATABASE_URL 等)
chmod +x deploy/scripts/merge-env-pack-strict.sh
./deploy/scripts/merge-env-pack-strict.sh

环境变量 ENV_PACK 可指向其它路径。

方式 B:手工

bash
# 尚无 .env.pack 时
cp deploy/docker/env.external-dbs.example deploy/docker/.env.pack
# 编辑数据库、域名、密钥…

# 追加 strict(或复制 env.pack.example 中的四行)
cat deploy/docker/snippets/permission-strict.env.snippet >> deploy/docker/.env.pack

校验

bash
pnpm run check:env-pack
# 须 exit 0;失败则检查 ACC_ROUTE_GUARD_STRICT / SYS_ROUTE_GUARD_STRICT 是否为 true
pnpm run check:strict-matrix   # staging 样例 + 本地 .env.pack(存在时)
pnpm run check:program-gates   # 全仓 check + staging + env-pack(PR 等价)
pnpm run check:p0-release      # 上式 + check:month-close(须 backend/.env DATABASE_URL)

部署后

  1. push-and-deploy / 重启 gateway、sys、acc
  2. permission-staging-checklist.md §4、§4.2 手工验收并签字

2. GitHub Secrets(只读 E2E)

仓库 Settings → Secrets and variables → Actions → New repository secret

Secret说明示例
E2E_ACCOUNT_READONLY仅 PC 读权限账号(无 btn_acc_*_writereadonly_pc
E2E_PASSWORD_READONLY对应密码
E2E_API_BASE_URL网关根 URL(非 Vite 5000)http://120.26.80.246:3000
E2E_SITE_ID该账号可访问的站点 UUID
E2E_ACCOUNT_WRITE / E2E_PASSWORD_WRITE具备 btn_acc_*_write 的账号(正向 E2E,可选)
E2E_GOODS_RAW_IDP2 入库冒烟固定原料(可选,未设则 goods/page 取首条原料)预发原料 UUID
E2E_SUPPLIER_IDP2 入库冒烟固定供应商(可选,未设则 suppliers/page 取首条)预发供应商 UUID
E2E_OUTBOUND_ORDER_ID / E2E_OUTBOUND_LINE_IDP2 部分退货冒烟固定出库行(可选,未设则自动找可退单)出库单/明细 UUID

P2 正向冒烟e2e/acc-stock-p2-smoke.spec.ts + acc-stock-p2-api.spec.ts):在 e2e-smoke job 中与只读用例一并执行;须 E2E_API_BASE_URL 指向可达的预发网关(非 Vite 5000)。本地全栈脚本:pnpm run smoke:acc-inbound / pnpm run smoke:acc-outbound-return(需 backend/.env + dev:backend)。

GitHub 仓库配置(一次性):Settings → Secrets and variables → Actions → 按上表新建 Secret;本地可跑 pnpm run check:e2e-secrets-hint 对照缺失项。未配置时 ci.yml 的 e2e-smoke 会 skip,不阻断 pnpm run check

账号须能登录且至少能打开 /acc/inbound(有菜单读权限);否则用例会 skip 或失败。


3. 手动跑 E2E Readonly Stack

  1. GitHub → ActionsE2E Readonly StackRun workflow
  2. 日志中 acc-readonly-postingacc-permission-denied-apisys-permission-denied-api 应全部 passed(或网关不可达时 skip)
  3. skipped:未配 Secrets 或 E2E_API_BASE_URL 连不上网关(CI 无后端时登录失败会 skip)

本地等价:

bash
pnpm run dev:backend
pnpm run dev:web
E2E_ACCOUNT_READONLY=... E2E_PASSWORD_READONLY=... \
E2E_API_BASE_URL=http://127.0.0.1:3000 E2E_SITE_ID=... \
pnpm run test:e2e -- acc-readonly-posting acc-readonly-route-guard acc-permission-denied-api sys-permission-denied-api

acc-permission-denied-api:只读账号对入/出/生产/WIP 开单/结算/删客户等写接口须 403 + PERMISSION_DENIED(网关层)。

acc-readonly-route-guard:只读账号访问未分配菜单路由(如 /sys/users)须跳转 /no-permission(清单 #8)。

sys-permission-denied-api:只读账号对角色分配保存、用户 admin 保存、站点保存等 admin 接口须 403 + PERMISSION_DENIED(无需 X-Site-Id)。

Playwright 用例与 Secrets 说明见仓库根目录 e2e/README.md(该文件在 docs/ 外,勿在文档内写相对链接,否则 VitePress 构建会报 dead link)。

TaskFlow 内部文档 Released under the MIT License.