diff --git a/scripts/AGENTS.md b/scripts/AGENTS.md index d49ead666..fbfdad14e 100644 --- a/scripts/AGENTS.md +++ b/scripts/AGENTS.md @@ -26,6 +26,7 @@ - 可直接运行的脚本必须在 `README.md` 登记:用途、目标环境、是否写数据、凭据来源、报告位置、失败/重跑语义和清理边界。内部模块必须登记到 `admin-test-env-modules/README.md`,并按需同步总入口模块注册及依赖展开。 - 文件命名使用稳定业务语义:离线 Node 合同以 `.test.mjs` 结尾;环境写入入口显式包含 `test-env` 或在 README 中标记目标环境;fixture/verify 必须区分准备写入和只读核验。 - 不在源码、AGENTS、README 或报告中写入密码、Token、私钥、真实客户数据和固定环境密钥;环境地址与账号从入口已支持的参数或本机环境配置读取。 +- 开发与测试验收配置分别只维护在 `$env:USERPROFILE\.codex\chongchong-global-dev-acceptance.env`、`$env:USERPROFILE\.codex\chongchong-global-test-acceptance.env`。脚本不得自动猜测环境或读取另一份文件;运行者必须通过位于脚本路径之前的 `node --env-file="<明确文件>"` 选择环境。 - 不直接写业务数据库伪造 HTTP 验收成功,不吞掉 `deploymentBlocker`、业务错误码、`requestId` 或 `traceId`。造数脚本的部分成功数据默认保留,清理、重置或删除必须另行授权。 - 不默认并发运行共享环境造数。只有用户明确要求并确认序号、报告目录和服务容量边界时,才允许拆分 worker;每个 worker 必须使用不重叠序号和独立报告目录。 - 修改公共参数、上下文或模块签名时,定向检查总入口、生产模块、fixture、合同测试、README 和调用命令,禁止保留旧参数兼容分支。 diff --git a/scripts/README.md b/scripts/README.md index 85c573b56..2c5a2dd2f 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -4,6 +4,41 @@ 进入本目录维护或运行脚本前先读 `scripts/AGENTS.md`;本文件是脚本入口、用途和副作用的唯一总索引,具体模块说明继续下沉到相邻 README。 +## 验收环境变量文件 + +开发与测试环境的账号、密码和 Gateway 只维护在用户目录的两份外部文件中,不写入仓库: + +| 环境 | 文件 | +|---|---| +| 开发环境 | `$env:USERPROFILE\.codex\chongchong-global-dev-acceptance.env` | +| 测试环境 | `$env:USERPROFILE\.codex\chongchong-global-test-acceptance.env` | + +两份文件统一提供以下变量: + +```text +ADMIN_TEST_GATEWAY +ADMIN_OVERSEAS_GATEWAY +ADMIN_TEST_USERNAME +ADMIN_TEST_PASSWORD +MERCHANT_TEST_USERNAME +MERCHANT_TEST_PASSWORD +``` + +脚本只读取当前 Node 进程的环境变量,不会自行查找或加载上述文件。运行时必须把 `--env-file` 放在脚本路径之前,明确选择环境: + +```powershell +# 开发环境 +node --env-file="$env:USERPROFILE\.codex\chongchong-global-dev-acceptance.env" scripts/admin-test-env-acceptance.mjs + +# 测试环境 +node --env-file="$env:USERPROFILE\.codex\chongchong-global-test-acceptance.env" scripts/admin-test-env-acceptance.mjs + +# 测试环境批量待分柜造数 +node --env-file="$env:USERPROFILE\.codex\chongchong-global-test-acceptance.env" scripts/it-test-wait-split-bulk.mjs +``` + +Client 全量、Client 二期、待审核订单和批量待分柜均复用这套变量,不再维护各自的 Gateway、管理员或客户账号变量。外部文件必须保留在仓库之外,不得复制到项目目录、报告或提交记录。 + ## 脚本目录归属 脚本按作用域放置,不要求全部集中到根 `scripts/`: diff --git a/scripts/http-script-environment-contract.test.mjs b/scripts/http-script-environment-contract.test.mjs index 063689a7b..2e534e6ad 100644 --- a/scripts/http-script-environment-contract.test.mjs +++ b/scripts/http-script-environment-contract.test.mjs @@ -6,6 +6,8 @@ const read = (name) => readFileSync(new URL(name, import.meta.url), 'utf8') const client = read('./client-test-env-acceptance.mjs') const clientPhase2 = read('./client-phase2-test-env-acceptance.mjs') const pendingOrders = read('./create-pending-review-orders.mjs') +const readme = read('./README.md') +const agents = read('./AGENTS.md') const activeHttpScripts = [client, clientPhase2, pendingOrders] const removedEnvironmentVariables = [ @@ -35,3 +37,13 @@ test('active scripts no longer carry the retired variables, fixed Gateway, or so assert.doesNotMatch(pendingOrders, /const CONFIG\s*=/) assert.doesNotMatch(pendingOrders, /PASSWORD:\s*'[^']+'/) }) + +test('documentation names both external environment files and requires explicit selection', () => { + for (const source of [readme, agents]) { + assert.match(source, /chongchong-global-dev-acceptance\.env/) + assert.match(source, /chongchong-global-test-acceptance\.env/) + assert.match(source, /--env-file/) + } + assert.match(readme, /不会自行查找或加载上述文件/) + assert.match(readme, /ADMIN_OVERSEAS_GATEWAY/) +})