fix(gateway): RESET seed 산출물 재사용을 검증한다

DB 보존 DEPLOY가 만든 부분 빌드 worktree를 RESET-ready로 오인하지 않도록 실제 game API와 profile seed entrypoint를 확인한다. seed 전환 전 built CLI도 재검증해 산출물 누락 시 기존 runtime을 먼저 내리지 않는다.
This commit is contained in:
2026-08-25 00:59:15 +00:00
parent e8dc7a65aa
commit 93684f12fa
2 changed files with 49 additions and 1 deletions
@@ -9,6 +9,7 @@ import {
buildProcessDefinitions,
buildSharedProfileFrontendCommands,
buildWorkspaceCommands,
hasCompleteProfileBuildArtifacts,
planProfileReconcile,
resolveProfileArchiveServerName,
resolveResetLifecycleStatus,
@@ -391,6 +392,26 @@ describe('sanitizeManagedProcessEnv', () => {
});
describe('buildWorkspaceCommands', () => {
it('does not reuse a DB-preserving deploy workspace that lacks the profile seed artifact', async () => {
const workspaceRoot = '/srv/sammo/worktrees/0123456789abcdef';
const gameApiPath = path.join(workspaceRoot, 'app', 'game-api', 'dist', 'index.js');
const gatewayApiPath = path.join(workspaceRoot, 'app', 'gateway-api', 'dist', 'index.js');
const deployOnlyArtifacts = new Set([gameApiPath]);
await expect(
hasCompleteProfileBuildArtifacts(workspaceRoot, async (target) => {
if (!deployOnlyArtifacts.has(target)) throw new Error('missing');
})
).resolves.toBe(false);
deployOnlyArtifacts.add(gatewayApiPath);
await expect(
hasCompleteProfileBuildArtifacts(workspaceRoot, async (target) => {
if (!deployOnlyArtifacts.has(target)) throw new Error('missing');
})
).resolves.toBe(true);
});
it('installs and builds runtime dependencies before the profile processes', () => {
const workspaceRoot = '/srv/sammo/worktrees/0123456789abcdef';
const commands = buildWorkspaceCommands(workspaceRoot, true, undefined, '/srv/sammo/controller');