diff --git a/.changeset/hungry-radios-play.md b/.changeset/hungry-radios-play.md new file mode 100644 index 0000000000..ce7f524f4a --- /dev/null +++ b/.changeset/hungry-radios-play.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-user-settings-backend': patch +--- + +Added dependency on `@backstage/config` diff --git a/plugins/auth-backend/src/service/standaloneServer.ts b/plugins/auth-backend/src/service/standaloneServer.ts index 0c311d5949..834305553b 100644 --- a/plugins/auth-backend/src/service/standaloneServer.ts +++ b/plugins/auth-backend/src/service/standaloneServer.ts @@ -19,12 +19,12 @@ import { loadBackendConfig, ServerTokenManager, HostDiscovery, - useHotMemoize, + DatabaseManager, } from '@backstage/backend-common'; import { Server } from 'http'; -import Knex from 'knex'; import { LoggerService } from '@backstage/backend-plugin-api'; import { createRouter } from './router'; +import { ConfigReader } from '@backstage/config'; export interface ServerOptions { logger: LoggerService; @@ -37,27 +37,20 @@ export async function startStandaloneServer( const config = await loadBackendConfig({ logger, argv: process.argv }); const discovery = HostDiscovery.fromConfig(config); - const database = useHotMemoize(module, () => { - const knex = Knex({ - client: 'better-sqlite3', - connection: ':memory:', - useNullAsDefault: true, - }); - knex.client.pool.on('createSuccess', (_eventId: any, resource: any) => { - resource.run('PRAGMA foreign_keys = ON', () => {}); - }); - return knex; - }); + const manager = DatabaseManager.fromConfig( + new ConfigReader({ + backend: { + database: { client: 'better-sqlite3', connection: ':memory:' }, + }, + }), + ); + const database = manager.forPlugin('auth'); logger.debug('Starting application server...'); const router = await createRouter({ logger, config, - database: { - async getClient() { - return database; - }, - }, + database, discovery, tokenManager: ServerTokenManager.noop(), }); diff --git a/plugins/badges-backend/src/service/standaloneServer.ts b/plugins/badges-backend/src/service/standaloneServer.ts index 75185c4aef..661d218edb 100644 --- a/plugins/badges-backend/src/service/standaloneServer.ts +++ b/plugins/badges-backend/src/service/standaloneServer.ts @@ -21,12 +21,12 @@ import { loadBackendConfig, ServerTokenManager, HostDiscovery, - useHotMemoize, + DatabaseManager, } from '@backstage/backend-common'; import { createRouter } from './router'; import { IdentityApi } from '@backstage/plugin-auth-node'; import { DatabaseBadgesStore } from '../database/badgesStore'; -import Knex from 'knex'; +import { ConfigReader } from '@backstage/config'; export interface ServerOptions { port: number; @@ -40,13 +40,14 @@ export async function startStandaloneServer( const logger = options.logger.child({ service: 'badges-backend' }); const config = await loadBackendConfig({ logger, argv: process.argv }); const discovery = HostDiscovery.fromConfig(config); - const database = useHotMemoize(module, () => { - return Knex({ - client: 'better-sqlite3', - connection: ':memory:', - useNullAsDefault: true, - }); - }); + const manager = DatabaseManager.fromConfig( + new ConfigReader({ + backend: { + database: { client: 'better-sqlite3', connection: ':memory:' }, + }, + }), + ); + const database = manager.forPlugin('badges'); logger.debug('Creating application...'); @@ -70,9 +71,7 @@ export async function startStandaloneServer( tokenManager, logger, identity, - badgeStore: await DatabaseBadgesStore.create({ - database: { getClient: async () => database }, - }), + badgeStore: await DatabaseBadgesStore.create({ database }), }); let service = createServiceBuilder(module) diff --git a/plugins/bazaar-backend/src/service/standaloneServer.ts b/plugins/bazaar-backend/src/service/standaloneServer.ts index a50e350f39..c222777aae 100644 --- a/plugins/bazaar-backend/src/service/standaloneServer.ts +++ b/plugins/bazaar-backend/src/service/standaloneServer.ts @@ -15,15 +15,15 @@ */ import { + DatabaseManager, createServiceBuilder, loadBackendConfig, - useHotMemoize, } from '@backstage/backend-common'; import { IdentityApi } from '@backstage/plugin-auth-node'; import { Server } from 'http'; import { Logger } from 'winston'; import { createRouter } from './router'; -import knexFactory from 'knex'; +import { ConfigReader } from '@backstage/config'; export interface ServerOptions { port: number; @@ -37,23 +37,18 @@ export async function startStandaloneServer( const logger = options.logger.child({ service: 'bazaar-backend' }); const config = await loadBackendConfig({ logger, argv: process.argv }); - const db = useHotMemoize(module, () => { - const knex = knexFactory({ - client: 'better-sqlite3', - connection: ':memory:', - useNullAsDefault: true, - }); - - knex.client.pool.on('createSuccess', (_eventId: any, resource: any) => { - resource.run('PRAGMA foreign_keys = ON', () => {}); - }); - - return knex; - }); + const manager = DatabaseManager.fromConfig( + new ConfigReader({ + backend: { + database: { client: 'better-sqlite3', connection: ':memory:' }, + }, + }), + ); + const database = manager.forPlugin('bazaar'); const router = await createRouter({ logger, - database: { getClient: async () => db }, + database, config: config, identity: {} as IdentityApi, }); diff --git a/plugins/catalog-backend/src/service/standaloneServer.ts b/plugins/catalog-backend/src/service/standaloneServer.ts index cff4fa1f94..995a607ab5 100644 --- a/plugins/catalog-backend/src/service/standaloneServer.ts +++ b/plugins/catalog-backend/src/service/standaloneServer.ts @@ -21,7 +21,6 @@ import { ServerTokenManager, HostDiscovery, UrlReaders, - useHotMemoize, } from '@backstage/backend-common'; import { ConfigReader } from '@backstage/config'; import { ServerPermissionClient } from '@backstage/plugin-permission-node'; @@ -43,16 +42,14 @@ export async function startStandaloneServer( const logger = options.logger.child({ service: 'catalog-backend' }); const config = await loadBackendConfig({ logger, argv: process.argv }); const reader = UrlReaders.default({ logger, config }); - const database = useHotMemoize(module, () => { - const manager = DatabaseManager.fromConfig( - new ConfigReader({ - backend: { - database: { client: 'better-sqlite3', connection: ':memory:' }, - }, - }), - ); - return manager.forPlugin('catalog'); - }); + const manager = DatabaseManager.fromConfig( + new ConfigReader({ + backend: { + database: { client: 'better-sqlite3', connection: ':memory:' }, + }, + }), + ); + const database = manager.forPlugin('catalog'); const discovery = HostDiscovery.fromConfig(config); const tokenManager = ServerTokenManager.fromConfig(config, { logger, diff --git a/plugins/code-coverage-backend/src/service/standaloneServer.ts b/plugins/code-coverage-backend/src/service/standaloneServer.ts index 23eaf981c1..a2207b86d9 100644 --- a/plugins/code-coverage-backend/src/service/standaloneServer.ts +++ b/plugins/code-coverage-backend/src/service/standaloneServer.ts @@ -16,17 +16,17 @@ import { createServiceBuilder, + DatabaseManager, HostDiscovery, loadBackendConfig, UrlReaders, - useHotMemoize, } from '@backstage/backend-common'; import { CatalogApi } from '@backstage/catalog-client'; import { CompoundEntityRef, parseEntityRef } from '@backstage/catalog-model'; import { Server } from 'http'; -import knexFactory from 'knex'; import { Logger } from 'winston'; import { createRouter } from './router'; +import { ConfigReader } from '@backstage/config'; export interface ServerOptions { port: number; @@ -40,19 +40,14 @@ export async function startStandaloneServer( const logger = options.logger.child({ service: 'code-coverage-backend' }); const config = await loadBackendConfig({ logger, argv: process.argv }); - const db = useHotMemoize(module, () => { - const knex = knexFactory({ - client: 'better-sqlite3', - connection: ':memory:', - useNullAsDefault: true, - }); - - knex.client.pool.on('createSuccess', (_eventId: any, resource: any) => { - resource.run('PRAGMA foreign_keys = ON', () => {}); - }); - - return knex; - }); + const manager = DatabaseManager.fromConfig( + new ConfigReader({ + backend: { + database: { client: 'better-sqlite3', connection: ':memory:' }, + }, + }), + ); + const database = manager.forPlugin('code-coverage'); const catalogApi = { async getEntityByRef(entityRef: string | CompoundEntityRef) { @@ -69,7 +64,7 @@ export async function startStandaloneServer( logger.debug('Starting application server...'); const router = await createRouter({ - database: { getClient: async () => db }, + database, config, discovery: HostDiscovery.fromConfig(config), urlReader: UrlReaders.default({ logger, config }), diff --git a/plugins/entity-feedback-backend/src/service/standaloneServer.ts b/plugins/entity-feedback-backend/src/service/standaloneServer.ts index f230cc1463..27c48ebb1e 100644 --- a/plugins/entity-feedback-backend/src/service/standaloneServer.ts +++ b/plugins/entity-feedback-backend/src/service/standaloneServer.ts @@ -19,7 +19,6 @@ import { DatabaseManager, loadBackendConfig, HostDiscovery, - useHotMemoize, } from '@backstage/backend-common'; import { ConfigReader } from '@backstage/config'; import { DefaultIdentityClient } from '@backstage/plugin-auth-node'; @@ -40,16 +39,14 @@ export async function startStandaloneServer( const config = await loadBackendConfig({ logger, argv: process.argv }); const discovery = HostDiscovery.fromConfig(config); - const database = useHotMemoize(module, () => { - const manager = DatabaseManager.fromConfig( - new ConfigReader({ - backend: { - database: { client: 'better-sqlite3', connection: ':memory:' }, - }, - }), - ); - return manager.forPlugin('entity-feedback'); - }); + const manager = DatabaseManager.fromConfig( + new ConfigReader({ + backend: { + database: { client: 'better-sqlite3', connection: ':memory:' }, + }, + }), + ); + const database = manager.forPlugin('entity-feedback'); const identity = DefaultIdentityClient.create({ discovery, diff --git a/plugins/linguist-backend/src/service/standaloneServer.ts b/plugins/linguist-backend/src/service/standaloneServer.ts index 61f75d4827..518efed6a0 100644 --- a/plugins/linguist-backend/src/service/standaloneServer.ts +++ b/plugins/linguist-backend/src/service/standaloneServer.ts @@ -19,14 +19,14 @@ import { loadBackendConfig, HostDiscovery, UrlReaders, - useHotMemoize, ServerTokenManager, + DatabaseManager, } from '@backstage/backend-common'; import { Server } from 'http'; import { Logger } from 'winston'; import { createRouter } from './router'; -import knexFactory from 'knex'; import { TaskScheduleDefinition } from '@backstage/backend-tasks'; +import { ConfigReader } from '@backstage/config'; export interface ServerOptions { port: number; @@ -39,19 +39,14 @@ export async function startStandaloneServer( ): Promise { const logger = options.logger.child({ service: 'linguist-backend' }); const config = await loadBackendConfig({ logger, argv: process.argv }); - const db = useHotMemoize(module, () => { - const knex = knexFactory({ - client: 'sqlite3', - connection: ':memory:', - useNullAsDefault: true, - }); - - knex.client.pool.on('createSuccess', (_eventId: any, resource: any) => { - resource.run('PRAGMA foreign_keys = ON', () => {}); - }); - - return knex; - }); + const manager = DatabaseManager.fromConfig( + new ConfigReader({ + backend: { + database: { client: 'better-sqlite3', connection: ':memory:' }, + }, + }), + ); + const database = manager.forPlugin('linguist'); const schedule: TaskScheduleDefinition = { frequency: { minutes: 2 }, @@ -63,7 +58,7 @@ export async function startStandaloneServer( const router = await createRouter( { schedule: schedule, age: { days: 30 }, useSourceLocation: false }, { - database: { getClient: async () => db }, + database, discovery: HostDiscovery.fromConfig(config), reader: UrlReaders.default({ logger, config }), logger, diff --git a/plugins/playlist-backend/src/service/standaloneServer.ts b/plugins/playlist-backend/src/service/standaloneServer.ts index 02a375229c..26a601822a 100644 --- a/plugins/playlist-backend/src/service/standaloneServer.ts +++ b/plugins/playlist-backend/src/service/standaloneServer.ts @@ -20,7 +20,6 @@ import { loadBackendConfig, ServerTokenManager, HostDiscovery, - useHotMemoize, } from '@backstage/backend-common'; import { ConfigReader } from '@backstage/config'; import { DefaultIdentityClient } from '@backstage/plugin-auth-node'; @@ -42,16 +41,14 @@ export async function startStandaloneServer( const config = await loadBackendConfig({ logger, argv: process.argv }); const discovery = HostDiscovery.fromConfig(config); - const database = useHotMemoize(module, () => { - const manager = DatabaseManager.fromConfig( - new ConfigReader({ - backend: { - database: { client: 'better-sqlite3', connection: ':memory:' }, - }, - }), - ); - return manager.forPlugin('playlist'); - }); + const manager = DatabaseManager.fromConfig( + new ConfigReader({ + backend: { + database: { client: 'better-sqlite3', connection: ':memory:' }, + }, + }), + ); + const database = manager.forPlugin('playlist'); const identity = DefaultIdentityClient.create({ discovery, diff --git a/plugins/user-settings-backend/package.json b/plugins/user-settings-backend/package.json index eb1d08bbe2..991b388767 100644 --- a/plugins/user-settings-backend/package.json +++ b/plugins/user-settings-backend/package.json @@ -33,6 +33,7 @@ "@backstage/backend-common": "workspace:^", "@backstage/backend-plugin-api": "workspace:^", "@backstage/catalog-model": "workspace:^", + "@backstage/config": "workspace:^", "@backstage/errors": "workspace:^", "@backstage/plugin-auth-node": "workspace:^", "@backstage/types": "workspace:^", diff --git a/plugins/user-settings-backend/src/service/standaloneServer.ts b/plugins/user-settings-backend/src/service/standaloneServer.ts index 6dd8c7f72d..48a640636f 100644 --- a/plugins/user-settings-backend/src/service/standaloneServer.ts +++ b/plugins/user-settings-backend/src/service/standaloneServer.ts @@ -14,10 +14,13 @@ * limitations under the License. */ -import { createServiceBuilder, useHotMemoize } from '@backstage/backend-common'; +import { + createServiceBuilder, + DatabaseManager, +} from '@backstage/backend-common'; +import { ConfigReader } from '@backstage/config'; import { IdentityApi } from '@backstage/plugin-auth-node'; import { Server } from 'http'; -import Knex from 'knex'; import { Logger } from 'winston'; import { DatabaseUserSettingsStore } from '../database/DatabaseUserSettingsStore'; import { createRouterInternal } from './router'; @@ -33,13 +36,14 @@ export async function startStandaloneServer( ): Promise { const logger = options.logger.child({ service: 'storage-backend' }); - const database = useHotMemoize(module, () => { - return Knex({ - client: 'better-sqlite3', - connection: ':memory:', - useNullAsDefault: true, - }); - }); + const manager = DatabaseManager.fromConfig( + new ConfigReader({ + backend: { + database: { client: 'better-sqlite3', connection: ':memory:' }, + }, + }), + ); + const database = manager.forPlugin('user-settings'); logger.debug('Starting application server...'); @@ -58,9 +62,7 @@ export async function startStandaloneServer( }; const router = await createRouterInternal({ - userSettingsStore: await DatabaseUserSettingsStore.create({ - database: { getClient: async () => database }, - }), + userSettingsStore: await DatabaseUserSettingsStore.create({ database }), identity: identityMock, }); diff --git a/yarn.lock b/yarn.lock index 27a712861c..24f5950a5b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9948,6 +9948,7 @@ __metadata: "@backstage/backend-test-utils": "workspace:^" "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" + "@backstage/config": "workspace:^" "@backstage/errors": "workspace:^" "@backstage/plugin-auth-node": "workspace:^" "@backstage/types": "workspace:^"