From 79c6c1de93a3edd791d8304a1bb2722b20e3a44c Mon Sep 17 00:00:00 2001 From: Gao Sun Date: Wed, 19 Oct 2022 15:38:56 +0800 Subject: [PATCH] refactor: require database name in URL (#2198) --- .github/workflows/integration-test.yml | 8 +++----- packages/cli/src/database.ts | 2 ++ packages/core/src/env-set/create-pool-by-env.ts | 5 +++-- packages/schemas/package.json | 1 + 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/.github/workflows/integration-test.yml b/.github/workflows/integration-test.yml index 9b8c0d882..110ce31e5 100644 --- a/.github/workflows/integration-test.yml +++ b/.github/workflows/integration-test.yml @@ -75,7 +75,7 @@ jobs: - name: Extract working-directory: tests run: | - npm run cli init -- -p ../logto --db postgres://postgres:postgres@localhost:5432 --no-oc --du ../logto.tar.gz + npm run cli init -- -p ../logto --db postgres://postgres:postgres@localhost:5432/postgres --no-oc --du ../logto.tar.gz - name: Add mock connectors working-directory: tests @@ -83,12 +83,10 @@ jobs: npm run cli connector add @logto/connector-mock-sms @logto/connector-mock-email @logto/connector-mock-social -- -p ../logto - name: Run Logto - working-directory: logto/packages/core - run: node . & + working-directory: logto/ + run: npm start & env: INTEGRATION_TEST: true - NODE_ENV: production - DB_URL: postgres://postgres:postgres@localhost:5432 - name: Sleep for 5 seconds run: sleep 5 diff --git a/packages/cli/src/database.ts b/packages/cli/src/database.ts index 3c7109bde..046ec3d7c 100644 --- a/packages/cli/src/database.ts +++ b/packages/cli/src/database.ts @@ -1,5 +1,6 @@ import { SchemaLike } from '@logto/schemas'; import { convertToPrimitiveOrSql } from '@logto/shared'; +import { assert } from '@silverhand/essentials'; import decamelize from 'decamelize'; import { createPool, parseDsn, sql, stringifyDsn } from 'slonik'; import { createInterceptors } from 'slonik-interceptor-preset'; @@ -18,6 +19,7 @@ export const getDatabaseUrlFromConfig = async () => export const createPoolFromConfig = async () => { const databaseUrl = await getDatabaseUrlFromConfig(); + assert(parseDsn(databaseUrl).databaseName, new Error('Database name is required in URL')); return createPool(databaseUrl, { interceptors: createInterceptors(), 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 7e3c63922..5d033d34b 100644 --- a/packages/core/src/env-set/create-pool-by-env.ts +++ b/packages/core/src/env-set/create-pool-by-env.ts @@ -1,6 +1,6 @@ -import { assertEnv } from '@silverhand/essentials'; +import { assert, assertEnv } from '@silverhand/essentials'; import chalk from 'chalk'; -import { createMockPool, createMockQueryResult, createPool } from 'slonik'; +import { createMockPool, createMockQueryResult, createPool, parseDsn } from 'slonik'; import { createInterceptors } from 'slonik-interceptor-preset'; const createPoolByEnv = async (isTest: boolean) => { @@ -14,6 +14,7 @@ const createPoolByEnv = async (isTest: boolean) => { try { const databaseDsn = assertEnv(key); + assert(parseDsn(databaseDsn).databaseName, new Error('Database name is required in `DB_URL`')); return await createPool(databaseDsn, { interceptors }); } catch (error: unknown) { diff --git a/packages/schemas/package.json b/packages/schemas/package.json index 29f457445..92accdf54 100644 --- a/packages/schemas/package.json +++ b/packages/schemas/package.json @@ -7,6 +7,7 @@ "files": [ "lib", "alterations", + "alterations-js", "tables" ], "publishConfig": {