diff --git a/.changeset/search-talking-in-code.md b/.changeset/search-talking-in-code.md new file mode 100644 index 0000000000..46de5f8343 --- /dev/null +++ b/.changeset/search-talking-in-code.md @@ -0,0 +1,7 @@ +--- +'@backstage/create-app': patch +--- + +Postgres-based search is now installed when PG is chosen as the desired database for Backstage. + +There is no need to make this change in an existing Backstage backend. See [supported search engines](https://backstage.io/docs/features/search/search-engines) for details about production-ready search engines. diff --git a/packages/create-app/package.json b/packages/create-app/package.json index 975d2cee7e..9fd8c33837 100644 --- a/packages/create-app/package.json +++ b/packages/create-app/package.json @@ -86,6 +86,7 @@ "@backstage/plugin-scaffolder-backend": "", "@backstage/plugin-search": "", "@backstage/plugin-search-backend": "", + "@backstage/plugin-search-backend-module-pg": "", "@backstage/plugin-search-backend-node": "", "@backstage/plugin-tech-radar": "", "@backstage/plugin-techdocs": "", diff --git a/packages/create-app/src/lib/versions.ts b/packages/create-app/src/lib/versions.ts index 7179b7924f..e79e86e3be 100644 --- a/packages/create-app/src/lib/versions.ts +++ b/packages/create-app/src/lib/versions.ts @@ -68,6 +68,7 @@ import { version as pluginScaffolder } from '../../../../plugins/scaffolder/pack import { version as pluginScaffolderBackend } from '../../../../plugins/scaffolder-backend/package.json'; import { version as pluginSearch } from '../../../../plugins/search/package.json'; import { version as pluginSearchBackend } from '../../../../plugins/search-backend/package.json'; +import { version as pluginSearchBackendModulePg } from '../../../../plugins/search-backend-module-pg/package.json'; import { version as pluginSearchBackendNode } from '../../../../plugins/search-backend-node/package.json'; import { version as pluginTechRadar } from '../../../../plugins/tech-radar/package.json'; import { version as pluginTechdocs } from '../../../../plugins/techdocs/package.json'; @@ -110,6 +111,7 @@ export const packageVersions = { '@backstage/plugin-scaffolder-backend': pluginScaffolderBackend, '@backstage/plugin-search': pluginSearch, '@backstage/plugin-search-backend': pluginSearchBackend, + '@backstage/plugin-search-backend-module-pg': pluginSearchBackendModulePg, '@backstage/plugin-search-backend-node': pluginSearchBackendNode, '@backstage/plugin-tech-radar': pluginTechRadar, '@backstage/plugin-techdocs': pluginTechdocs, diff --git a/packages/create-app/templates/default-app/packages/backend/package.json.hbs b/packages/create-app/templates/default-app/packages/backend/package.json.hbs index 5dd70286bc..feba5169ba 100644 --- a/packages/create-app/templates/default-app/packages/backend/package.json.hbs +++ b/packages/create-app/templates/default-app/packages/backend/package.json.hbs @@ -28,6 +28,9 @@ "@backstage/plugin-proxy-backend": "^{{version '@backstage/plugin-proxy-backend'}}", "@backstage/plugin-scaffolder-backend": "^{{version '@backstage/plugin-scaffolder-backend'}}", "@backstage/plugin-search-backend": "^{{version '@backstage/plugin-search-backend'}}", + {{#if dbTypePG}} + "@backstage/plugin-search-backend-module-pg": "^{{version '@backstage/plugin-search-backend-module-pg'}}", + {{/if}} "@backstage/plugin-search-backend-node": "^{{version '@backstage/plugin-search-backend-node'}}", "@backstage/plugin-techdocs-backend": "^{{version '@backstage/plugin-techdocs-backend'}}", "@gitbeaker/node": "^34.6.0", diff --git a/packages/create-app/templates/default-app/packages/backend/src/plugins/search.ts b/packages/create-app/templates/default-app/packages/backend/src/plugins/search.ts.hbs similarity index 85% rename from packages/create-app/templates/default-app/packages/backend/src/plugins/search.ts rename to packages/create-app/templates/default-app/packages/backend/src/plugins/search.ts.hbs index c359cb4986..d8ad991e8a 100644 --- a/packages/create-app/templates/default-app/packages/backend/src/plugins/search.ts +++ b/packages/create-app/templates/default-app/packages/backend/src/plugins/search.ts.hbs @@ -4,6 +4,9 @@ import { IndexBuilder, LunrSearchEngine, } from '@backstage/plugin-search-backend-node'; +{{#if dbTypePG}} +import { PgSearchEngine } from '@backstage/plugin-search-backend-module-pg'; +{{/if}} import { PluginEnvironment } from '../types'; import { DefaultCatalogCollatorFactory } from '@backstage/plugin-catalog-backend'; import { DefaultTechDocsCollatorFactory } from '@backstage/plugin-techdocs-backend'; @@ -16,7 +19,14 @@ export default async function createPlugin({ tokenManager, }: PluginEnvironment) { // Initialize a connection to a search engine. + {{#if dbTypeSqlite}} const searchEngine = new LunrSearchEngine({ logger }); + {{/if}} + {{#if dbTypePG}} + const searchEngine = (await PgSearchEngine.supported(database)) + ? await PgSearchEngine.from({ database }) + : new LunrSearchEngine({ logger }); + {{/if}} const indexBuilder = new IndexBuilder({ logger, searchEngine }); // Collators are responsible for gathering documents known to plugins. This diff --git a/packages/e2e-test/src/commands/run.ts b/packages/e2e-test/src/commands/run.ts index a7456f91dd..1ec9499b92 100644 --- a/packages/e2e-test/src/commands/run.ts +++ b/packages/e2e-test/src/commands/run.ts @@ -420,9 +420,15 @@ async function testBackendStart(appDir: string, isPostgres: boolean) { if (isPostgres) { print('Dropping old DBs'); await Promise.all( - ['catalog', 'scaffolder', 'auth', 'identity', 'proxy', 'techdocs'].map( - name => dropDB(`backstage_plugin_${name}`), - ), + [ + 'catalog', + 'scaffolder', + 'auth', + 'identity', + 'proxy', + 'techdocs', + 'search', + ].map(name => dropDB(`backstage_plugin_${name}`)), ); print('Created DBs'); }