From 67f708a22c4c417f9be0b254f4d09bcc39e674af Mon Sep 17 00:00:00 2001 From: Constructive Date: Wed, 31 Dec 2025 04:14:21 +0000 Subject: [PATCH 1/2] Add missing template answers (repoName, username) to exportMigrations The module boilerplate template requires repoName and username fields in addition to fullName, email, moduleName, moduleDesc, access, and license. Without these fields, the scaffolder prompts for interactive input which breaks programmatic usage. --- pgpm/core/src/export/export-migrations.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pgpm/core/src/export/export-migrations.ts b/pgpm/core/src/export/export-migrations.ts index b39482a31..f071bc660 100644 --- a/pgpm/core/src/export/export-migrations.ts +++ b/pgpm/core/src/export/export-migrations.ts @@ -430,7 +430,9 @@ const preparePackage = async ({ access: 'restricted', license: 'CLOSED', fullName, - ...(email && { email }) + ...(email && { email }), + repoName: name, + username: 'constructive-io' } }); } else { From 694df018bda647d4a67547bb0205c875a55d2c41 Mon Sep 17 00:00:00 2001 From: Constructive Date: Wed, 31 Dec 2025 04:21:33 +0000 Subject: [PATCH 2/2] Make repoName and username optional parameters instead of hardcoded - Add repoName and username to ExportOptions, ExportMigrationsToDiskOptions, and PreparePackageOptions interfaces - Thread parameters through exportMigrations -> exportMigrationsToDisk -> preparePackage - Use sensible defaults: repoName defaults to module name, username is optional - Callers can now pass their own values for non-interactive use --- pgpm/core/src/export/export-migrations.ts | 41 ++++++++++++++++++----- 1 file changed, 33 insertions(+), 8 deletions(-) diff --git a/pgpm/core/src/export/export-migrations.ts b/pgpm/core/src/export/export-migrations.ts index f071bc660..18230b19d 100644 --- a/pgpm/core/src/export/export-migrations.ts +++ b/pgpm/core/src/export/export-migrations.ts @@ -144,6 +144,10 @@ interface ExportMigrationsToDiskOptions { metaExtensionName: string; metaExtensionDesc?: string; prompter?: Prompter; + /** Repository name for module scaffolding. Defaults to module name if not provided. */ + repoName?: string; + /** GitHub username/org for module scaffolding. Required for non-interactive use. */ + username?: string; } interface ExportOptions { @@ -162,6 +166,10 @@ interface ExportOptions { metaExtensionName: string; metaExtensionDesc?: string; prompter?: Prompter; + /** Repository name for module scaffolding. Defaults to module name if not provided. */ + repoName?: string; + /** GitHub username/org for module scaffolding. Required for non-interactive use. */ + username?: string; } const exportMigrationsToDisk = async ({ @@ -177,7 +185,9 @@ const exportMigrationsToDisk = async ({ extensionDesc, metaExtensionName, metaExtensionDesc, - prompter + prompter, + repoName, + username }: ExportMigrationsToDiskOptions): Promise => { outdir = outdir + '/'; @@ -241,7 +251,9 @@ const exportMigrationsToDisk = async ({ name, description: dbExtensionDesc, extensions: [...DB_REQUIRED_EXTENSIONS], - prompter + prompter, + repoName, + username }); // Install missing modules if user confirmed (now that module exists) @@ -274,7 +286,9 @@ const exportMigrationsToDisk = async ({ name: metaExtensionName, description: metaDesc, extensions: [...SERVICE_REQUIRED_EXTENSIONS], - prompter + prompter, + repoName, + username }); // Install missing modules if user confirmed (now that module exists) @@ -347,7 +361,9 @@ export const exportMigrations = async ({ extensionDesc, metaExtensionName, metaExtensionDesc, - prompter + prompter, + repoName, + username }: ExportOptions): Promise => { for (let v = 0; v < dbInfo.database_ids.length; v++) { const databaseId = dbInfo.database_ids[v]; @@ -364,7 +380,9 @@ export const exportMigrations = async ({ schema_names, author, outdir, - prompter + prompter, + repoName, + username }); } }; @@ -378,6 +396,10 @@ interface PreparePackageOptions { description: string; extensions: string[]; prompter?: Prompter; + /** Repository name for module scaffolding. Defaults to module name if not provided. */ + repoName?: string; + /** GitHub username/org for module scaffolding. Required for non-interactive use. */ + username?: string; } interface Schema { @@ -408,7 +430,9 @@ const preparePackage = async ({ name, description, extensions, - prompter + prompter, + repoName, + username }: PreparePackageOptions): Promise => { const curDir = process.cwd(); const pgpmDir = path.resolve(path.join(outdir, name)); @@ -431,8 +455,9 @@ const preparePackage = async ({ license: 'CLOSED', fullName, ...(email && { email }), - repoName: name, - username: 'constructive-io' + // Use provided values or sensible defaults + repoName: repoName || name, + ...(username && { username }) } }); } else {