From aa40f06741a9bd127fabfda3c8794f8e6c35cfdf Mon Sep 17 00:00:00 2001 From: pallyoung Date: Thu, 13 Aug 2026 17:05:52 +0800 Subject: [PATCH] fix(ci): isolate CLI update acceptance home --- scripts/verify-cli-update.test.ts | 2 ++ scripts/verify-cli-update.ts | 19 +++++++++++-------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/scripts/verify-cli-update.test.ts b/scripts/verify-cli-update.test.ts index c4283bc7..e15ec012 100644 --- a/scripts/verify-cli-update.test.ts +++ b/scripts/verify-cli-update.test.ts @@ -230,6 +230,8 @@ describe("verify-cli-update", () => { ["install", "--global", "--prefix", prefix, "@spencer-kit/coder-studio@0.5.0"], expect.objectContaining({ env: expect.objectContaining({ + HOME: resolve(prefix, "home"), + CODER_STUDIO_HOME: resolve(prefix, "home", ".coder-studio"), npm_config_prefix: prefix, CODER_STUDIO_UPDATE_DIST_TAG: "coder-studio-accept-42", }), diff --git a/scripts/verify-cli-update.ts b/scripts/verify-cli-update.ts index 12f6090a..2e6f4cf0 100644 --- a/scripts/verify-cli-update.ts +++ b/scripts/verify-cli-update.ts @@ -286,9 +286,12 @@ function acceptanceEnvironment(input: { const pathEntries = [input.shimDirectory, input.binDirectory, process.env.PATH] .filter((entry): entry is string => Boolean(entry)) .join(process.platform === "win32" ? ";" : ":"); - const coderStudioHome = resolve(input.prefix, "home"); + const isolatedHome = resolve(input.prefix, "home"); + const coderStudioHome = resolve(isolatedHome, ".coder-studio"); return { ...process.env, + HOME: isolatedHome, + ...(process.platform === "win32" ? { USERPROFILE: isolatedHome } : {}), PATH: pathEntries, npm_config_prefix: input.prefix, npm_config_registry: input.registryUrl, @@ -477,7 +480,7 @@ async function runDefaultFailureScenario(input: { "--global", "--prefix", scenarioPrefix, - `${input.packageName}@${input.previousVersion}`, + `${input.packageName}@${input.candidateVersion}`, ], { env } ); @@ -489,7 +492,7 @@ async function runDefaultFailureScenario(input: { server = await defaultDeps.startServer({ executable: cliExecutable, env, port }); const release = await defaultDeps.lookupReleaseMetadata({ packageName: input.packageName, - currentVersion: input.previousVersion, + currentVersion: input.candidateVersion, distTag: input.distTag, registryUrl: input.registryUrl, }); @@ -524,12 +527,12 @@ async function runDefaultFailureScenario(input: { ); } - const started = await defaultDeps.callWs({ + const started = await startInstallAfterBackgroundCheck({ + deps: defaultDeps, apiUrl: server.apiUrl, - op: "updates.startInstall", - args: { targetVersion: input.candidateVersion, force: false }, + candidateVersion: input.previousVersion, }); - if (started.targetVersion !== input.candidateVersion) { + if (started.targetVersion !== input.previousVersion) { throw new Error("CLI fault scenario did not retain the exact target version"); } const terminal = await waitForFailureState({ @@ -542,7 +545,7 @@ async function runDefaultFailureScenario(input: { const expectedStatus = input.scenario === "permission" ? "manual_required" : "failed"; const expectedManual = input.scenario === "permission" - ? `npm install -g ${input.packageName}@${input.candidateVersion}` + ? `npm install -g ${input.packageName}@${input.previousVersion}` : input.scenario === "restart" ? "coder-studio serve --restart" : null;