fix: harden workspace registry deployment

This commit is contained in:
2026-08-04 07:42:35 +02:00
parent f71feecaea
commit 802b564200
11 changed files with 132 additions and 14 deletions
+23 -7
View File
@@ -175,19 +175,35 @@ export async function writeMigratedWorkspace(result: LegacyMigrationResult, repo
return destination;
}
function parseCliArguments(argv: readonly string[]): { input: string; output: string } {
if (argv.length !== 4 || argv[0] !== "--input" || argv[2] !== "--output") {
throw new Error("usage: migrate-legacy --input <legacy-workspace.yaml> --output <repository-root>");
function parseCliArguments(argv: readonly string[]): { input: string; output: string; id?: string } {
if (argv.length !== 4 && argv.length !== 6) {
throw new Error("usage: migrate-legacy --input <legacy-workspace.yaml> --output <repository-root> [--id <workspace-id>]");
}
if (!isAbsolute(argv[1]) || !isAbsolute(argv[3])) {
const options = new Map<string, string>();
for (let index = 0; index < argv.length; index += 2) {
const flag = argv[index];
const value = argv[index + 1];
if ((flag !== "--input" && flag !== "--output" && flag !== "--id") || value === undefined || options.has(flag)) {
throw new Error("usage: migrate-legacy --input <legacy-workspace.yaml> --output <repository-root> [--id <workspace-id>]");
}
options.set(flag, value);
}
const input = options.get("--input");
const output = options.get("--output");
const id = options.get("--id");
if (input === undefined || output === undefined) {
throw new Error("usage: migrate-legacy --input <legacy-workspace.yaml> --output <repository-root> [--id <workspace-id>]");
}
if (!isAbsolute(input) || !isAbsolute(output)) {
throw new Error("migration input and output paths must be absolute");
}
return { input: argv[1], output: argv[3] };
if (id !== undefined && !workspaceId.test(id)) throw new Error("legacy workspace ID is invalid");
return { input, output, id };
}
export async function main(argv = process.argv.slice(2)): Promise<void> {
const { input, output } = parseCliArguments(argv);
const id = basename(input, ".yaml");
const { input, output, id: explicitId } = parseCliArguments(argv);
const id = explicitId ?? basename(input, ".yaml");
const result = migrateLegacyWorkspace(await readFile(input, "utf8"), { id });
const destination = await writeMigratedWorkspace(result, output);
process.stdout.write(`${destination}\n`);