π ADR: new backend system support
moreiramarti opened this issue Β· comments
Plugin Name
ADR
π Description
I'm using the new backend system and I'm struggling to set up ADR search.
It looks like adr type is not recognized.
Backstage version : 1.27.5
ADR version : 0.4.17
π Expected behavior
Search for ADRs in catalog
π Actual Behavior with Screenshots
π Reproduction steps
Install ADR plugin with new backend system :
Add menu on packages/app/src/components/search/SearchPage.tsx
return (
<Page themeId="home">
<Header title="Search" />
<Content>
<Grid container direction="row">
<Grid item xs={12}>
<Paper className={classes.bar}>
<SearchBar />
</Paper>
</Grid>
<Grid item xs={3}>
<SearchType.Accordion
name="Result Type"
defaultValue="software-catalog"
types={[
{
value: 'software-catalog',
name: 'Software Catalog',
icon: <CatalogIcon />,
},
{
value: 'techdocs',
name: 'Documentation',
icon: <DocsIcon />,
},
{
value: 'adr',
name: 'Architecture Decision Records',
icon: <DocsIcon />,
},
]}
/>
...
<SearchResult>
<CatalogSearchResultListItem icon={<CatalogIcon />} />
<TechDocsSearchResultListItem icon={<DocsIcon />} />
<AdrSearchResultListItem icon={<DocsIcon />} />
</SearchResult>
π Provide the context for the Bug.
No response
π Have you spent some time to check if this bug has been raised before?
- I checked and didn't find similar issue
π’ Have you read the Code of Conduct?
- I have read the Code of Conduct
Are you willing to submit PR?
None
Could you also share what your backend search setup looks like to confirm if the ADR search collator is correctly hooked up there?
If you meant packages/backend/src/index.ts, here it is :
import { createBackend } from '@backstage/backend-defaults';
import { dbtPlugin } from '@iiben_orgii/backstage-plugin-dbt-backend';
const backend = createBackend();
backend.add(import('@backstage/plugin-app-backend/alpha'));
backend.add(import('@backstage/plugin-proxy-backend/alpha'));
backend.add(import('@backstage/plugin-scaffolder-backend/alpha'));
backend.add(import('@backstage/plugin-techdocs-backend/alpha'));
backend.add(import('@roadiehq/scaffolder-backend-module-utils/new-backend'));
// auth plugin
backend.add(import('@backstage/plugin-auth-backend'));
backend.add(import('@backstage/plugin-auth-backend-module-github-provider'));
// See https://backstage.io/docs/backend-system/building-backends/migrating#the-auth-plugin
backend.add(import('@backstage/plugin-auth-backend-module-guest-provider'));
// See https://github.com/backstage/backstage/blob/master/docs/auth/guest/provider.md
// catalog plugin
backend.add(import('@backstage/plugin-catalog-backend/alpha'));
backend.add(
import('@backstage/plugin-catalog-backend-module-scaffolder-entity-model'),
);
backend.add(import('@backstage/plugin-scaffolder-backend-module-github'));
backend.add(import('@backstage/plugin-catalog-backend-module-github/alpha'));
backend.add(import('@backstage/plugin-catalog-backend-module-github-org'));
// adr plugin
backend.add(import('@backstage-community/plugin-adr-backend'));
// permission plugin
backend.add(import('@backstage/plugin-permission-backend/alpha'));
backend.add(
import('@backstage/plugin-permission-backend-module-allow-all-policy'),
);
// search plugin
backend.add(import('@backstage/plugin-search-backend/alpha'));
backend.add(import('@backstage/plugin-search-backend-module-pg/alpha'));
backend.add(import('@backstage/plugin-search-backend-module-catalog/alpha'));
backend.add(import('@backstage/plugin-search-backend-module-techdocs/alpha'));
backend.start();
It looks like you don't have the ADR search collator hooked up to your search backend - unfortunately there currently isn't a search backend module for ADR that you can dynamically install like there is for the catalog/techdocs collators eg. backend.add(import('@backstage/plugin-search-backend-module-adr'));
. Open for contributions though if you would like to implement one π
Right now you can manually add your own search module like so to hook up the ADR collator:
// backend/src/searchBackendModuleAdr.ts
import { cacheToPluginCacheManager } from '@backstage/backend-common';
import {
coreServices,
createBackendModule,
} from '@backstage/backend-plugin-api';
import { searchIndexRegistryExtensionPoint } from '@backstage/plugin-search-backend-node/alpha';
import { DefaultAdrCollatorFactory } from '@backstage-community/plugin-adr-backend';
export default createBackendModule({
pluginId: 'search',
moduleId: 'adrCollator',
register(env) {
env.registerInit({
deps: {
auth: coreServices.auth,
cache: coreServices.cache,
config: coreServices.rootConfig,
discovery: coreServices.discovery,
logger: coreServices.logger,
reader: coreServices.urlReader,
scheduler: coreServices.scheduler,
search: searchIndexRegistryExtensionPoint,
},
async init({
auth,
cache,
config,
discovery,
logger,
reader,
scheduler,
search,
}) {
search.addCollator({
schedule: scheduler.createScheduledTaskRunner({
// Customize this schedule as you see fit
frequency: { hours: 12 },
timeout: { minutes: 30 },
initialDelay: { minutes: 1 },
}),
factory: DefaultAdrCollatorFactory.fromConfig({
auth,
cache: cacheToPluginCacheManager(cache),
config,
discovery,
logger,
reader,
}),
});
},
});
},
});
and add it to your backend:
// backend/src/index.ts
...
backend.add(import('./searchBackendModuleAdr'));
...
Thanks, that's what I though.
I'll try to implement it if I manage to find some time ;)
Help wanted for creating the new module!
Related PR: #549