feat(release): 정적 프런트엔드와 격리 빌더를 도입한다
Gateway와 프로필 릴리스가 불변 프런트엔드 아티팩트를 원자적으로 게시하고 실패 시 이전 포인터를 복구하도록 한다. 릴리스 빌드는 전용 builder protocol로 분리하고 성공한 Gateway 커밋을 재기동용 Git ref에 고정한다.
This commit is contained in:
@@ -10,6 +10,7 @@ import {
|
||||
type ProcessManager,
|
||||
readReleaseManifest,
|
||||
sanitizeManagedProcessEnv,
|
||||
sanitizeReleaseBuildEnv,
|
||||
} from '@sammo-ts/gateway-api';
|
||||
|
||||
import type { ReleaseControllerConfig } from './config.js';
|
||||
@@ -22,7 +23,7 @@ const buildReleaseControllerCommands = (
|
||||
needsInstall: boolean,
|
||||
config: ReleaseControllerConfig
|
||||
): BuildCommand[] => {
|
||||
const env = sanitizeManagedProcessEnv(config.baseEnv);
|
||||
const env = sanitizeReleaseBuildEnv(config.baseEnv);
|
||||
return [
|
||||
...(needsInstall ? [{ command: 'pnpm', args: ['install', '--frozen-lockfile'], cwd: workspaceRoot, env }] : []),
|
||||
buildTurboReleaseCommand(workspaceRoot, config.workspaceRoot, ['@sammo-ts/release-controller'], env),
|
||||
@@ -56,6 +57,7 @@ export const upgradeReleaseController = async (options: {
|
||||
sourceRef: string;
|
||||
workspaceManager: GitWorkspaceManager;
|
||||
buildRunner: BuildRunner;
|
||||
migrationRunner?: BuildRunner;
|
||||
processManager: ProcessManager;
|
||||
config: ReleaseControllerConfig;
|
||||
readinessTimeoutMs?: number;
|
||||
@@ -71,7 +73,9 @@ export const upgradeReleaseController = async (options: {
|
||||
buildReleaseControllerCommands(workspace.root, workspace.needsInstall, options.config)
|
||||
);
|
||||
if (!build.ok) throw new Error(`Release controller build failed: ${build.output.slice(-4000)}`);
|
||||
const migration = await options.buildRunner.run([buildGatewayMigrationCommand(workspace.root, options.config)]);
|
||||
const migration = await (options.migrationRunner ?? options.buildRunner).run([
|
||||
buildGatewayMigrationCommand(workspace.root, options.config),
|
||||
]);
|
||||
if (!migration.ok) throw new Error(`Gateway migration failed: ${migration.output.slice(-4000)}`);
|
||||
|
||||
const existing = (await options.processManager.list()).find((process) => process.name === CONTROLLER_PROCESS_NAME);
|
||||
|
||||
Reference in New Issue
Block a user