diff --git a/packages/core/src/env-set/create-pool-by-env.ts b/packages/core/src/env-set/create-pool-by-env.ts index 62e828b9a..180baec35 100644 --- a/packages/core/src/env-set/create-pool-by-env.ts +++ b/packages/core/src/env-set/create-pool-by-env.ts @@ -4,6 +4,7 @@ import { createPool } from 'slonik'; import { createInterceptors } from 'slonik-interceptor-preset'; import appendDotEnv from './append-dot-env'; +import { noInquiry } from './parameters'; const createPoolByEnv = async (isTest: boolean) => { // Database connection is disabled in unit test environment @@ -19,6 +20,10 @@ const createPoolByEnv = async (isTest: boolean) => { return createPool(databaseDsn, { interceptors }); } catch (error: unknown) { + if (noInquiry) { + throw error; + } + const answer = await inquirer.prompt({ name: 'dsn', message: `No Postgres DSN (${key}) found in env variables. Please input the DSN which points to Logto database:`, diff --git a/packages/core/src/env-set/oidc.ts b/packages/core/src/env-set/oidc.ts index 115558c32..cf91db746 100644 --- a/packages/core/src/env-set/oidc.ts +++ b/packages/core/src/env-set/oidc.ts @@ -4,12 +4,18 @@ import { readFileSync, writeFileSync } from 'fs'; import { getEnv } from '@silverhand/essentials'; import inquirer from 'inquirer'; +import { noInquiry } from './parameters'; + const readPrivateKey = async (path: string): Promise => { const privateKeyPath = getEnv('OIDC_PRIVATE_KEY_PATH', 'oidc-private-key.pem'); try { return readFileSync(path, 'utf-8'); } catch (error: unknown) { + if (noInquiry) { + throw error; + } + const answer = await inquirer.prompt({ type: 'confirm', name: 'confirm', diff --git a/packages/core/src/env-set/parameters.ts b/packages/core/src/env-set/parameters.ts new file mode 100644 index 000000000..4da2e0bb3 --- /dev/null +++ b/packages/core/src/env-set/parameters.ts @@ -0,0 +1,2 @@ +const parameters = process.argv.slice(2); +export const noInquiry = parameters.includes('--no-inquiry'); diff --git a/packages/core/src/env-set/password.ts b/packages/core/src/env-set/password.ts index cee5bf32e..b708b6109 100644 --- a/packages/core/src/env-set/password.ts +++ b/packages/core/src/env-set/password.ts @@ -4,6 +4,7 @@ import { nanoid } from 'nanoid'; import { number, string } from 'zod'; import appendDotEnv from './append-dot-env'; +import { noInquiry } from './parameters'; const loadPeppers = async (isTest: boolean): Promise => { if (isTest) { @@ -17,6 +18,10 @@ const loadPeppers = async (isTest: boolean): Promise => { .array() .parse(JSON.parse(assertEnv(key))); } catch (error: unknown) { + if (noInquiry) { + throw error; + } + if (!(error instanceof Error && error.message === `env variable ${key} not found`)) { throw error; }