Merge branch 'master' into conflict-events

Signed-off-by: sblausten <sam@roadie.io>
This commit is contained in:
sblausten
2023-04-04 17:45:17 +02:00
478 changed files with 7431 additions and 1000 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-kubernetes-backend': minor
---
Plugins that instantiate the `KubernetesProxy` must now provide a parameter of the type `KubernetesProxyOptions` which includes providing a `KubernetesAuthTranslator`. The `KubernetesBuilder` now builds its own `KubernetesAuthTranslatorMap` that it provides to the `KubernetesProxy`. The `DispatchingKubernetesAuthTranslator` expects a `KubernetesTranslatorMap` to be provided as a parameter. The `KubernetesBuilder` now has a method called `setAuthTranslatorMap` which allows integrators to bring their own `KubernetesAuthTranslator's` to the `KubernetesPlugin`.
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/plugin-catalog-backend-module-azure': patch
'@backstage/plugin-catalog-backend': patch
---
Use the `LocationSpec` type from the `catalog-common` package in place of the deprecated `LocationSpec` from the `catalog-node` package.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-circleci': patch
---
Add hover over CircleCI avatar icon to show user name in builds table
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/cli': patch
---
When building a backend package with dependencies any `--config <path>` options will now be forwarded to any dependent app package builds, unless the build script in the app package already contains a `--config` option.
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/backend-app-api': patch
'@backstage/backend-common': patch
---
Allow an additionalConfig to be provided to loadBackendConfig that fetches config values during runtime.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/catalog-client': patch
---
Fixed bug in `queryEntities` of `CatalogClient` where the `sortField` is supposed to be changed to `orderField`.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-permission-node': patch
---
Introduced alpha export of the `policyExtensionPoint` for use in the new backend system.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-permission-backend': patch
---
Introduced alpha export of the `permissionPlugin` for use in the new backend system, along with a `permissionModuleAllowAllPolicy` that can be used to allow all requests.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/core-components': patch
---
Upgrade `react-virtualized-auto-sizer´ to version `^1.0.11`
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog-react': patch
---
Fixed bug in catalog filters where you could not click on the text to select a value.
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/plugin-scaffolder-react': patch
'@backstage/plugin-scaffolder': patch
---
bug: Invert `templateFilter` predicate to align with `Array.filter`
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/plugin-adr-common': patch
'@backstage/plugin-adr': patch
---
use path attribute to fetch files instead of name and update the UI to navigate over subdirectories
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-playlist': patch
---
Added config properties to change dynamically the group noun for all the components in the UI
+24
View File
@@ -220,17 +220,29 @@
},
"changesets": [
"all-my-auth-wanna-ride-today",
"blue-walls-drop",
"bright-pumpkins-bake",
"calm-otters-destroy",
"chatty-coats-thank",
"clean-dolls-search",
"clean-items-draw",
"clean-teachers-thank",
"clever-lizards-whisper",
"create-app-1679405836",
"curly-boats-trade",
"curly-jobs-kneel",
"curly-steaks-mate",
"curvy-rocks-guess",
"eight-trainers-smoke",
"eleven-bats-tease",
"eleven-coats-refuse",
"fair-roses-stare",
"famous-beds-break",
"famous-beds-repair",
"fast-gorillas-approve",
"fast-snakes-buy",
"flat-ways-compete",
"forty-days-tell",
"forty-gorillas-help",
"fresh-schools-fly",
"funny-pots-hide",
@@ -242,6 +254,7 @@
"heavy-colts-wash",
"hungry-lies-cry",
"hungry-monkeys-reply",
"itchy-ads-sit",
"khaki-cars-drum",
"khaki-doors-compare",
"khaki-guests-turn",
@@ -250,15 +263,20 @@
"long-gorillas-remain",
"many-eggs-press",
"mighty-lamps-cross",
"modern-snakes-check",
"nasty-nails-appear",
"neat-donkeys-work",
"neat-pears-argue",
"new-pigs-jam",
"odd-grapes-double",
"old-cougars-sit",
"olive-cycles-join",
"olive-months-talk",
"orange-rabbits-jam",
"perfect-deers-add",
"poor-cars-fold",
"popular-parents-crash",
"popular-radios-visit",
"pretty-carpets-cross",
"rare-seals-decide",
"renovate-179fa0e",
@@ -268,16 +286,20 @@
"seven-gifts-fetch",
"short-panthers-float",
"silly-adults-accept",
"six-jobs-hear",
"soft-roses-cover",
"sour-buttons-collect",
"sour-dragons-cheat",
"stale-cobras-beg",
"stale-paws-sparkle",
"strong-crews-repeat",
"stupid-laws-play",
"swift-meals-live",
"tall-chairs-explain",
"tall-oranges-own",
"ten-hounds-bathe",
"ten-mayflies-beam",
"tender-parrots-fry",
"thick-forks-prove",
"thin-spoons-prove",
"thirty-crabs-tell",
@@ -285,7 +307,9 @@
"tough-cameras-beam",
"twelve-parrots-camp",
"twelve-vans-sell",
"unlucky-snakes-smile",
"warm-buses-switch",
"weak-oranges-give",
"weak-turtles-arrive",
"wet-lamps-happen",
"wise-garlics-camp",
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog-backend': patch
---
Fixed bug in the `DefaultCatalogProcessingEngine` where entities that contained multiple different types of relations for the same source entity would not properly trigger stitching for that source entity.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/core-components': patch
---
Split the `BackstageSidebar` style `drawer` class, such that the `width` property is in a separate `drawerWidth` class instead. This makes it such that you can style the `drawer` class in your theme again.
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/plugin-scaffolder-react': patch
'@backstage/plugin-scaffolder': patch
---
`scaffolder/next`: bump `rjsf` dependencies to `5.5.0`
+7
View File
@@ -0,0 +1,7 @@
---
'@backstage/plugin-events-backend': patch
---
Export `DefaultEventBroker` to allow decoupling of the catalog and events backends in the `example-backend`.
Please look at `plugins/events-backend/README.md` for the currently advised way to set up the event backend and catalog providers.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder': minor
---
The Installed Actions page now shows details for nested objects and arrays
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-search': minor
---
Search modal auto closes on location change
+4 -4
View File
@@ -103,7 +103,7 @@ _You can do this by using the [Adopter form](https://info.backstage.spotify.com/
| [Stilingue](https://www.stilingue.com.br/) | [@stilingue-inteligencia-artificial](https://github.com/Stilingue-IA), [@bbviana](https://github.com/bbviana) | Developer portal, services catalog and centralization of metrics from Grafana, Sentry and GCP. Furthermore, centralization of documentation and infra details like DNS, Network services, SSL and so on. |
| [TUI Group](https://www.tuigroup.com/) | [Simon Stamm](https://github.com/simonstamm), [Christian Rudolph](https://github.com/ChrisRu82) | Developer portal for all engineer to provide discoverability to all internal components, APIs, documentation and to scaffold templates with integrations to our internal tools extended by plugins from our community. |
| [Alliander](https://www.alliander.com/) | [@leon-vg](https://github.com/leon-vg), [@gieljl](https://github.com/gieljl), [@niekteg](https://github.com/niekteg) | Developer portal - software catalog, technical documentation, software templates, tech radar and exploration of used tools/services |
| [VIA](https://www.via.com.br) | [@vagnerguedes](https://github.com/vagnerguedes) | Centralized Developer Experience portal - Software catalog and documentation platform, software templates, techdocs, scaffolding, self-service infrastructure |
| [VIA](https://www.via.com.br) | [Rogerio Segovia](https://github.com/rsegovia) | Centralized Developer Experience portal - Software catalog and documentation platform, software templates, techdocs, scaffolding, self-service infrastructure |
| [Surevine](https://www.surevine.com/) | [@DJDANNY123](https://github.com/djdanny123) | Developer portal for software catalog, discovery and a view of the technologies we are using across the organisation, we are looking to explore how we can enrich our entities in Backstage by integrating a software bill of materials. |
| [Bonial International GmbH](https://www.bonial.com/) | [@pjungermann](https://github.com/pjungermann) | Centralized developer portal with software catalog, tech docs, templates, and more. |
| [Beez Innovation Labs Pvt. Ltd](https://www.beezlabs.com/) | [Karthikeyan Venkatesan](https://github.com/karthikeyan23) | Developer portal with software catalog, scaffolding, tech docs, templates, and infra. |
@@ -119,7 +119,7 @@ _You can do this by using the [Adopter form](https://info.backstage.spotify.com/
| [Marks & Spencer](https://www.marksandspencer.com/) | [Kamal Cheriyath](https://github.com/kcheriyath) | Centralised discovery, adoption and devops automation hub for Engineering & Architecture. |
| [McKesson](https://www.mckesson.com/) | [Agnel Antony](https://github.com/aantony2) | Internal Developer Platform for developer gated CI/CD templates, technical documentation, cloud automation service catalog, etc. |
| [World Fuel Services](https://www.wfscorp.com/) | [Anirudh Kurapathi](https://github.com/anirudhkurapati), [Alex Kwon](https://github.com/alexkwon), [Lester Hernandez](https://github.com/lhernandez-wfscorp), [Avi Boru](https://github.com/aviboru), [Vardhan Annapureddy](https://github.com/harshaaws) | Internal Developer Portal, service catalog product, API's, Software Templates, tech docs and more. |
| [leboncoin](https://www.leboncoin.fr/) | [Andy Ladjadj](https://github.com/aladjadj) | Centralize our multiple UI in a single portal. Simplify onbording, new features and harmonize how people search information. Core features (catalog,api,docs,scafolder) are good to start the adoption. status: internal beta. |
| [leboncoin](https://www.leboncoin.fr/) | [Andy Ladjadj](https://github.com/aladjadj) | Centralize our multiple UI in a single portal. Simplify onbording, new features and harmonize how people search information. |
| [Contentful](https://www.contentful.com) | [James Bourne](https://github.com/jamesmbourne) | Centralized documentation of service ownership, APIs, and documentation, and new service creation with a custom scaffolder - [full case study with Roadie](https://roadie.io/case-studies/maintaining-velocity-through-hypergrowth-contentful/). |
| [Back Market](https://www.backmarket.com) | [Sami Farhat](https://github.com/skfarhat) | Internal Developer Portal featuring catalog, tech-radar, ownership management, component creation (scaffolder) and centralized infrastructure management -- probably more to come. |
| [Avalia Systems](https://avalia.io) | [Olivier Liechti](https://github.com/wasadigi), [Fabio Velloso](https://github.com/fabiovelloso) | Innersource, software analytics, knowledge base for 360 software assessments, collaborative applications, hub for tracking and sharing IP assets. |
@@ -227,7 +227,7 @@ _You can do this by using the [Adopter form](https://info.backstage.spotify.com/
| [Booking.com](https://www.linkedin.com/company/booking.com/) | [Mesut Yilmazyildirim](https://www.linkedin.com/in/myilmazyildirim) | We are adopting Backstage as the new reliability platform inside the company. We are migrating UIs of our internal developer tools to Backstage for a better user experience.
| [Swissquote Bank](https://swissquote.com/company/jobs/open-positions) | [Bruno Rocha](https://www.linkedin.com/in/bruno-rocha1/) | Integrating Backstage as the visualization layer & tactical overview of our services and teams.
| [XP Inc.](https://www.linkedin.com/company/xpinc/) | [Gabriel Santos](https://www.linkedin.com/in/gabriel-santos-6bb740a/) | Developer Portal Catalog (components, APIs, resources, users, groups) and organization relations.
| [OVO Energy](https://www.ovoenergy.com/) | [Michael Wizner](https://github.com/mwz), [Dan Laird](https://github.com/dlaird-ovo), [Samantha Betts](https://github.com/sammbetts) | Developer Experience Tool with an aim to to improve processes, boost productivity, finding of information/docs and building tech engagement throughout the business.
| [OVO Energy](https://www.ovoenergy.com/) | [Michael Wizner](https://github.com/mwz), [Dan Laird](https://github.com/dlaird-ovo), [Samantha Betts](https://github.com/sammbetts) | Developer Experience Tool with an aim to to improve processes, boost productivity, finding of information/docs and building tech engagement throughout the business.
| [MusicTribe](https://careers.musictribe.com/) | [Alex Ford](mailto:alex.j.ford@gmail.com), [Tiago Barbosa](https://github.com/t1agob) | We are starting to use Backstage as a developer portal to share API specifications and documentation, to quickly onboard new projects with the software templates, and to help developers discover software through the catalog.
| [Cazoo](https://www.cazoo.co.uk/) | [Abz Mungul](https://www.linkedin.com/in/abzmungul/), [Scott Edwards](https://www.linkedin.com/in/scott-edwards-tech/) | We're assessing Backstage as our developer platform at Cazoo with a focus on reducing cognitive load for our engineers. We're currently aiming for 3 outcomes: creating visibility into service ownership across teams, improving the discoverability of event schemas and relationships, and improving the discoverability of technical documentation and best practices. |
| [Gumtree](https://www.gumtree.com.au) | [Kumar Gaurav](https://www.linkedin.com/in/kumargaurav517) | We are starting to use it as a single place to find all component information in a distributed architecture. |
@@ -236,4 +236,4 @@ _You can do this by using the [Adopter form](https://info.backstage.spotify.com/
| [CORS.gmbh](https://www.cors.gmbh) | [@dpfaffenbauer](https://github.com/dpfaffenbauer) | Developer Portal for our Projects we develop for our Customers and Hosting them On Kubernetes. |
| [Comcast](https://comcast.github.io/) | [Ryan Emerle](https://github.com/remerle) | Developer portal enabling discovery of products, services, and documentation throughout the enterprise to ultimately reduce friction and improve time-to-market. |
| [Syntasso](https://www.syntasso.io/) | [@syntassodev](https://github.com/syntassodev) | Backstage is used as a optional UI for the [Kratix project](https://kratix.io), a framework for building platforms.
| [Bankdata](https://www.bankdata.dk) | [Thomas Grønbæk](https://www.linkedin.com/in/thomas-grønbæk/) | We are assessing Backstage as our internal developer portal @Bankdata. Goal is to reduce cognitive load and friction for developers and thereby improving developer experience, onboarding and productivity. Expect use of Software Catalog for discoverability and ownership, Tech Docs and Software Templates to integrate tooling and best practices.
+2 -2
View File
@@ -208,12 +208,12 @@ In all cases in this document where voting is mentioned, the voting process is a
It is important for contributors to be and stay active to set an example and show commitment to the project. Inactivity is harmful to the project as it may lead to unexpected delays, contributor attrition, and a loss of trust in the project.
Inactivity is measured by periods of no contributions for longer than:
Inactivity is measured by periods of no contributions without explanation, for longer than:
- Core Maintainer: 2 months
- Project Area Maintainer: 4 months
- Plugin Maintainer: 6 months
- Organization Member: 8 months
- Organization Member: 12 months
Consequences of being inactive include:
+12
View File
@@ -38,6 +38,18 @@ Scope: Discoverability within Backstage, including the home page, information ar
| Raghunandan Balachandran | Spotify | BUX | [soapraj](http://github.com/soapraj) | raghunandanb#1114 |
| Renan Mendes Carvalho | Spotify | BUX | [aitherios](http://github.com/aitherios) | aitherios#0593 |
### Helm Charts
Team: @backstage/helm-chart-maintainers
Scope: The Backstage [Helm Chart(s)](https://github.com/backstage/charts).
| Name | Organization | Team | GitHub | Discord |
| -------------------- | ------------ | ---- | ---------------------------------------- | -------------- |
| Andrew Block | Red Hat | | [sabre1041](http://github.com/sabre1041) | sabre1041#2622 |
| Tom Coufal | Red Hat | | [tumido](http://github.com/tumido) | Tumi#4346 |
| Vincenzo Scamporlino | Spotify | | [vinzscam](http://github.com/vinzscam) | vinzscam#6944 |
### Kubernetes
Team: @backstage/kubernetes-maintainers
@@ -121,7 +121,7 @@ given prefix.
In the simple case, what we did above is sufficient, TypeScript is happy, and
the backend runs with the new feature. If they do, feel free to skip this entire
section, and deleting `types.ts`.
section, and delete `types.ts`.
Sometimes though, type errors can be reported on the newly added line, saying
that parts of the `PluginEnvironment` type do not match. This happens when the
+2 -5
View File
@@ -37,10 +37,6 @@ The required steps in the host build are to install dependencies with
`yarn install`, generate type definitions using `yarn tsc`, and build the backend
package with `yarn build:backend`.
> NOTE: If you created your app prior to 2021-02-18, follow the
> [migration step](https://github.com/backstage/backstage/releases/tag/release-2021-02-18)
> to move from `backend:build` to `backend:bundle`.
In a CI workflow it might look something like this:
```bash
@@ -50,7 +46,8 @@ yarn install --frozen-lockfile
yarn tsc
# Build the backend, which bundles it all up into the packages/backend/dist folder.
yarn build:backend
# The configuration files here should match the one you use inside the Dockerfile below.
yarn build:backend --config app-config.yaml
```
Once the host build is complete, we are ready to build our image. The following
+2 -8
View File
@@ -69,15 +69,9 @@ Overall, the only changes to each request are:
- the endpoint's base URL prefix is stripped.
- the `Backstage-Kubernetes-Authorization` header becomes the `Authorization` header that is used when forwarding the request.
## Authentication
The proxy expects a `KubernetesAuthTranslator` to be provided that is used to decorate all requests with `Auth` by default. It does this by supplying a `serviceAccountToken` field into `clusterDetails` using the defined `authProvider` in `clusterDetails`.
Until some security and permission decisions are made (see [this
conversation](https://github.com/backstage/backstage/pull/13026/files#r1029376939)
for context), contributors consuming the proxy endpoint in their plugin code are
responsible for negotiating their own bearer token out-of-band. This requires
knowing some auth details about the cluster being contacted -- in practice, only
clusters with [client side auth
providers](https://backstage.io/docs/features/kubernetes/authentication#client-side-providers) can reasonably be reached.
## Authentication
The proxy has no provisions for mTLS, so it cannot be used to connect to
clusters using the [x509 Client
+17 -4
View File
@@ -376,7 +376,7 @@ There are other more specific search results layout components that also accept
Recently, the Backstage maintainers [announced the new Backend System](https://backstage.io/blog/2023/02/15/backend-system-alpha). The search plugins are now migrated to support the new backend system. In this guide you will learn how to update your backend set up.
In packages/backend-next/index.ts
In "packages/backend-next/index.ts", install the search plugin [1], the search engine [2], and the search collators/decorators modules [3]:
```ts
import { searchPlugin } from '@backstage/plugin-search-backend/alpha';
@@ -386,14 +386,27 @@ import { searchModuleTechDocsCollator } from '@backstage/plugin-search-backend-m
import { searchModuleExploreCollator } from '@backstage/plugin-search-backend-module-explore/alpha';
const backend = createBackend();
// adding the search plugin to the backend
// [1] adding the search plugin to the backend
backend.add(searchPlugin());
// (optional) the default search engine is Lunr, if you want to extend the search backend with another search engine.
// [2] (optional) the default search engine is Lunr, if you want to extend the search backend with another search engine.
backend.add(searchModuleElasticsearchEngine());
// extending search with collator modules to start index documents, take in optional schedule parameters.
// [3] extending search with collator modules to start index documents, take in optional schedule parameters.
backend.add(searchModuleCatalogCollator());
backend.add(searchModuleTechDocsCollator());
backend.add(searchModuleExploreCollator());
backend.start();
```
To create your own collators/decorators modules, please use the [searchModuleCatalogCollator](https://github.com/backstage/backstage/blob/d7f955f300893f50c4882ea8f5c09aa42dfaacfd/plugins/search-backend-module-catalog/src/alpha.ts#L49) as an example, we recommend that modules are separated by plugin packages (e.g. `search-backend-module-<plugin-id>`). You can also find the available search engines and collator/decorator modules documentation in the Alpha API reports:
**Search engine modules**
- Postgres [module](https://github.com/backstage/backstage/blob/d7f955f300893f50c4882ea8f5c09aa42dfaacfd/plugins/search-backend-module-pg/alpha-api-report.md);
- Elasticsearch [module](https://github.com/backstage/backstage/blob/d7f955f300893f50c4882ea8f5c09aa42dfaacfd/plugins/search-backend-module-elasticsearch/alpha-api-report.md).
**Search collator/decorator modules**
- Catalog [module](https://github.com/backstage/backstage/blob/d7f955f300893f50c4882ea8f5c09aa42dfaacfd/plugins/search-backend-module-catalog/alpha-api-report.md);
- Explore [module](https://github.com/backstage/backstage/blob/d7f955f300893f50c4882ea8f5c09aa42dfaacfd/plugins/search-backend-module-explore/alpha-api-report.md);
- TechDocs [module](https://github.com/backstage/backstage/blob/d7f955f300893f50c4882ea8f5c09aa42dfaacfd/plugins/search-backend-module-techdocs/alpha-api-report.md).
+18 -17
View File
@@ -76,36 +76,37 @@ Additionally, you need to decide how you want to receive events from external so
Set up your provider
```ts title="packages/backend/src/plugins/catalogEventBasedProviders.ts"
```ts title="packages/backend/src/plugins/catalog.ts"
import { CatalogBuilder } from '@backstage/plugin-catalog-backend';
/* highlight-add-start */
import { CatalogClient } from '@backstage/catalog-client';
import { BitbucketCloudEntityProvider } from '@backstage/plugin-catalog-backend-module-bitbucket-cloud';
/* highlight-add-end */
import { EntityProvider } from '@backstage/plugin-catalog-node';
import { EventSubscriber } from '@backstage/plugin-events-node';
import { ScaffolderEntitiesProcessor } from '@backstage/plugin-scaffolder-backend';
import { Router } from 'express';
import { PluginEnvironment } from '../types';
export default async function createCatalogEventBasedProviders(
/* highlight-remove-next-line */
_: PluginEnvironment,
/* highlight-add-next-line */
export default async function createPlugin(
env: PluginEnvironment,
): Promise<Array<EntityProvider & EventSubscriber>> {
const providers: Array<
(EntityProvider & EventSubscriber) | Array<EntityProvider & EventSubscriber>
> = [];
// add your event-based entity providers here
): Promise<Router> {
const builder = await CatalogBuilder.create(env);
builder.addProcessor(new ScaffolderEntitiesProcessor());
/* highlight-add-start */
providers.push(
BitbucketCloudEntityProvider.fromConfig(env.config, {
const bitbucketCloudProvider = BitbucketCloudEntityProvider.fromConfig(
env.config,
{
catalogApi: new CatalogClient({ discoveryApi: env.discovery }),
logger: env.logger,
scheduler: env.scheduler,
tokenManager: env.tokenManager,
}),
},
);
env.eventBroker.subscribe(bitbucketCloudProvider);
builder.addEntityProvider(bitbucketCloudProvider);
/* highlight-add-end */
return providers.flat();
const { processingEngine, router } = await builder.build();
await processingEngine.start();
return router;
}
```
+23 -24
View File
@@ -69,37 +69,36 @@ Additionally, you need to decide how you want to receive events from external so
Set up your provider
```ts title="packages/backend/src/plugins/catalogEventBasedProviders.ts"
```ts title="packages/backend/src/plugins/catalog.ts"
import { CatalogBuilder } from '@backstage/plugin-catalog-backend';
/* highlight-add-next-line */
import { GithubEntityProvider } from '@backstage/plugin-catalog-backend-module-github';
import { EntityProvider } from '@backstage/plugin-catalog-node';
import { EventSubscriber } from '@backstage/plugin-events-node';
import { ScaffolderEntitiesProcessor } from '@backstage/plugin-scaffolder-backend';
import { Router } from 'express';
import { PluginEnvironment } from '../types';
export default async function createCatalogEventBasedProviders(
/* highlight-remove-next-line */
_: PluginEnvironment,
/* highlight-add-next-line */
export default async function createPlugin(
env: PluginEnvironment,
): Promise<Array<EntityProvider & EventSubscriber>> {
const providers: Array<
(EntityProvider & EventSubscriber) | Array<EntityProvider & EventSubscriber>
> = [];
// add your event-based entity providers here
): Promise<Router> {
const builder = await CatalogBuilder.create(env);
builder.addProcessor(new ScaffolderEntitiesProcessor());
/* highlight-add-start */
providers.push(
GithubEntityProvider.fromConfig(env.config, {
logger: env.logger,
// optional: alternatively, use scheduler with schedule defined in app-config.yaml
schedule: env.scheduler.createScheduledTaskRunner({
frequency: { minutes: 30 },
timeout: { minutes: 3 },
}),
// optional: alternatively, use schedule
scheduler: env.scheduler,
const githubProvider = GithubEntityProvider.fromConfig(env.config, {
logger: env.logger,
// optional: alternatively, use scheduler with schedule defined in app-config.yaml
schedule: env.scheduler.createScheduledTaskRunner({
frequency: { minutes: 30 },
timeout: { minutes: 3 },
}),
);
// optional: alternatively, use schedule
scheduler: env.scheduler,
});
env.eventBroker.subscribe(githubProvider);
builder.addEntityProvider(demoProvider);
/* highlight-add-end */
return providers.flat();
const { processingEngine, router } = await builder.build();
await processingEngine.start();
return router;
}
```
+15 -17
View File
@@ -79,25 +79,21 @@ Additionally, you need to decide how you want to receive events from external so
Set up your provider
```ts title="packages/backend/src/plugins/catalogEventBasedProviders.ts"
```ts title="packages/backend/src/plugins/catalog.ts"
import { CatalogBuilder } from '@backstage/plugin-catalog-backend';
/* highlight-add-next-line */
import { GithubOrgEntityProvider } from '@backstage/plugin-catalog-backend-module-github';
import { EntityProvider } from '@backstage/plugin-catalog-node';
import { EventSubscriber } from '@backstage/plugin-events-node';
import { ScaffolderEntitiesProcessor } from '@backstage/plugin-scaffolder-backend';
import { Router } from 'express';
import { PluginEnvironment } from '../types';
export default async function createCatalogEventBasedProviders(
/* highlight-remove-next-line */
_: PluginEnvironment,
/* highlight-add-next-line */
export default async function createPlugin(
env: PluginEnvironment,
): Promise<Array<EntityProvider & EventSubscriber>> {
const providers: Array<
(EntityProvider & EventSubscriber) | Array<EntityProvider & EventSubscriber>
> = [];
// add your event-based entity providers here
): Promise<Router> {
const builder = await CatalogBuilder.create(env);
builder.addProcessor(new ScaffolderEntitiesProcessor());
/* highlight-add-start */
providers.push(
GithubOrgEntityProvider.fromConfig(env.config, {
const githubOrgProvider = GithubOrgEntityProvider.fromConfig(env.config, {
id: 'production',
orgUrl: 'https://github.com/backstage',
logger: env.logger,
@@ -105,10 +101,12 @@ export default async function createCatalogEventBasedProviders(
frequency: { minutes: 60 },
timeout: { minutes: 15 },
}),
}),
);
env.eventBroker.subscribe(githubOrgProvider);
builder.addEntityProvider(githubOrgProvider);
/* highlight-add-end */
return providers.flat();
const { processingEngine, router } = await builder.build();
await processingEngine.start();
return router;
}
```
@@ -91,7 +91,7 @@ This enables decisions based on characteristics of the resource, but it's import
Install the missing module:
```bash
$ yarn workspace @internal/plugin-todo-list-backend add @backstage/plugin-permission-node zod@~3.18.0
$ yarn workspace @internal/plugin-todo-list-backend add @backstage/plugin-permission-node zod
```
Create a new `plugins/todo-list-backend/src/service/rules.ts` file and append the following code:
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -47,7 +47,7 @@
"@types/react": "^17",
"@types/react-dom": "^17"
},
"version": "1.13.0-next.1",
"version": "1.13.0-next.2",
"dependencies": {
"@backstage/errors": "workspace:^",
"@manypkg/get-packages": "^1.1.3"
+11
View File
@@ -1,5 +1,16 @@
# @backstage/app-defaults
## 1.3.0-next.2
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.12.6-next.2
- @backstage/core-plugin-api@1.5.1-next.1
- @backstage/core-app-api@1.7.0-next.2
- @backstage/theme@0.2.19-next.0
- @backstage/plugin-permission-react@0.4.12-next.1
## 1.3.0-next.1
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/app-defaults",
"description": "Provides the default wiring of a Backstage App",
"version": "1.3.0-next.1",
"version": "1.3.0-next.2",
"publishConfig": {
"access": "public",
"main": "dist/index.esm.js",
+69
View File
@@ -1,5 +1,74 @@
# example-app
## 0.2.82-next.2
### Patch Changes
- Updated dependencies
- @backstage/plugin-circleci@0.3.17-next.2
- @backstage/plugin-techdocs-module-addons-contrib@1.0.12-next.2
- @backstage/cli@0.22.6-next.2
- @backstage/core-components@0.12.6-next.2
- @backstage/plugin-catalog-react@1.4.1-next.2
- @backstage/plugin-scaffolder-react@1.3.0-next.2
- @backstage/plugin-scaffolder@1.13.0-next.2
- @backstage/plugin-code-coverage@0.2.10-next.2
- @backstage/plugin-cost-insights@0.12.6-next.2
- @backstage/plugin-playlist@0.1.8-next.2
- @backstage/plugin-search@1.2.0-next.2
- @backstage/core-plugin-api@1.5.1-next.1
- @backstage/plugin-techdocs@1.6.1-next.2
- @backstage/app-defaults@1.3.0-next.2
- @backstage/catalog-model@1.2.1
- @backstage/config@1.0.7
- @backstage/core-app-api@1.7.0-next.2
- @backstage/integration-react@1.1.12-next.2
- @backstage/theme@0.2.19-next.0
- @backstage/plugin-airbrake@0.3.17-next.2
- @backstage/plugin-apache-airflow@0.2.10-next.2
- @backstage/plugin-api-docs@0.9.2-next.2
- @backstage/plugin-azure-devops@0.2.8-next.2
- @backstage/plugin-azure-sites@0.1.6-next.2
- @backstage/plugin-badges@0.2.41-next.2
- @backstage/plugin-catalog-common@1.0.13-next.0
- @backstage/plugin-catalog-graph@0.2.29-next.2
- @backstage/plugin-catalog-import@0.9.7-next.2
- @backstage/plugin-cloudbuild@0.3.17-next.2
- @backstage/plugin-dynatrace@3.0.1-next.2
- @backstage/plugin-entity-feedback@0.2.0-next.2
- @backstage/plugin-explore@0.4.2-next.2
- @backstage/plugin-gcalendar@0.3.13-next.2
- @backstage/plugin-gcp-projects@0.3.36-next.2
- @backstage/plugin-github-actions@0.5.17-next.2
- @backstage/plugin-gocd@0.1.23-next.2
- @backstage/plugin-graphiql@0.2.49-next.2
- @backstage/plugin-home@0.4.33-next.2
- @backstage/plugin-jenkins@0.7.16-next.2
- @backstage/plugin-kafka@0.3.17-next.2
- @backstage/plugin-kubernetes@0.7.10-next.2
- @backstage/plugin-lighthouse@0.4.2-next.2
- @backstage/plugin-linguist@0.1.2-next.2
- @backstage/plugin-linguist-common@0.1.0
- @backstage/plugin-microsoft-calendar@0.1.2-next.2
- @backstage/plugin-newrelic@0.3.35-next.2
- @backstage/plugin-newrelic-dashboard@0.2.10-next.2
- @backstage/plugin-org@0.6.7-next.2
- @backstage/plugin-pagerduty@0.5.10-next.2
- @backstage/plugin-permission-react@0.4.12-next.1
- @backstage/plugin-rollbar@0.4.17-next.2
- @backstage/plugin-search-common@1.2.3-next.0
- @backstage/plugin-search-react@1.5.2-next.2
- @backstage/plugin-sentry@0.5.2-next.2
- @backstage/plugin-shortcuts@0.3.9-next.2
- @backstage/plugin-stack-overflow@0.1.13-next.2
- @backstage/plugin-stackstorm@0.1.1-next.2
- @backstage/plugin-tech-insights@0.3.9-next.2
- @backstage/plugin-tech-radar@0.6.3-next.2
- @backstage/plugin-techdocs-react@1.1.5-next.2
- @backstage/plugin-todo@0.2.19-next.2
- @backstage/plugin-user-settings@0.7.2-next.2
- @internal/plugin-catalog-customized@0.0.9-next.2
## 0.2.82-next.1
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "example-app",
"version": "0.2.82-next.1",
"version": "0.2.82-next.2",
"private": true,
"backstage": {
"role": "frontend"
+3 -4
View File
@@ -60,12 +60,11 @@ import { HomepageCompositionRoot } from '@backstage/plugin-home';
import { LighthousePage } from '@backstage/plugin-lighthouse';
import { NewRelicPage } from '@backstage/plugin-newrelic';
import { NextScaffolderPage } from '@backstage/plugin-scaffolder/alpha';
import { ScaffolderPage, scaffolderPlugin } from '@backstage/plugin-scaffolder';
import {
ScaffolderPage,
scaffolderPlugin,
ScaffolderFieldExtensions,
ScaffolderLayouts,
} from '@backstage/plugin-scaffolder';
import { ScaffolderFieldExtensions } from '@backstage/plugin-scaffolder-react';
} from '@backstage/plugin-scaffolder-react';
import { SearchPage } from '@backstage/plugin-search';
import { TechRadarPage } from '@backstage/plugin-tech-radar';
import {
@@ -186,7 +186,7 @@ export const SearchModal = ({ toggleModal }: { toggleModal: () => void }) => {
</Grid>
</Grid>
<Grid item xs>
<SearchResult onClick={toggleModal}>
<SearchResult>
<CatalogSearchResultListItem icon={<CatalogIcon />} />
<TechDocsSearchResultListItem icon={<DocsIcon />} />
<ToolSearchResultListItem icon={<BuildIcon />} />
+17
View File
@@ -1,5 +1,22 @@
# @backstage/backend-app-api
## 0.4.2-next.2
### Patch Changes
- 5c7ce585824: Allow an additionalConfig to be provided to loadBackendConfig that fetches config values during runtime.
- Updated dependencies
- @backstage/backend-common@0.18.4-next.2
- @backstage/plugin-permission-node@0.7.7-next.2
- @backstage/backend-plugin-api@0.5.1-next.2
- @backstage/backend-tasks@0.5.1-next.2
- @backstage/cli-common@0.1.12
- @backstage/config@1.0.7
- @backstage/config-loader@1.1.9
- @backstage/errors@1.1.5
- @backstage/types@1.0.2
- @backstage/plugin-auth-node@0.2.13-next.2
## 0.4.2-next.1
### Patch Changes
+2
View File
@@ -5,6 +5,7 @@
```ts
/// <reference types="node" />
import type { AppConfig } from '@backstage/config';
import { BackendFeature } from '@backstage/backend-plugin-api';
import { CacheClient } from '@backstage/backend-common';
import { Config } from '@backstage/config';
@@ -178,6 +179,7 @@ export const lifecycleServiceFactory: () => ServiceFactory<
export function loadBackendConfig(options: {
remote?: LoadConfigOptionsRemote;
argv: string[];
additionalConfigs?: AppConfig[];
}): Promise<{
config: Config;
}>;
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/backend-app-api",
"description": "Core API used by Backstage backend apps",
"version": "0.4.2-next.1",
"version": "0.4.2-next.2",
"main": "src/index.ts",
"types": "src/index.ts",
"publishConfig": {
+13 -5
View File
@@ -24,7 +24,8 @@ import {
ConfigTarget,
LoadConfigOptionsRemote,
} from '@backstage/config-loader';
import { Config, ConfigReader } from '@backstage/config';
import { ConfigReader } from '@backstage/config';
import type { Config, AppConfig } from '@backstage/config';
import { getPackages } from '@manypkg/get-packages';
import { ObservableConfigProxy } from './ObservableConfigProxy';
import { isValidUrl } from '../lib/urls';
@@ -70,6 +71,7 @@ export async function createConfigSecretEnumerator(options: {
export async function loadBackendConfig(options: {
remote?: LoadConfigOptionsRemote;
argv: string[];
additionalConfigs?: AppConfig[];
}): Promise<{ config: Config }> {
const args = parseArgs(options.argv);
@@ -92,8 +94,11 @@ export async function loadBackendConfig(options: {
console.info(
`Reloaded config from ${newConfigs.map(c => c.context).join(', ')}`,
);
config.setConfig(ConfigReader.fromConfigs(newConfigs));
const configsToMerge = [...newConfigs];
if (options.additionalConfigs) {
configsToMerge.push(...options.additionalConfigs);
}
config.setConfig(ConfigReader.fromConfigs(configsToMerge));
},
stopSignal: new Promise(resolve => {
if (currentCancelFunc) {
@@ -109,12 +114,15 @@ export async function loadBackendConfig(options: {
}),
},
});
console.info(
`Loaded config from ${appConfigs.map(c => c.context).join(', ')}`,
);
config.setConfig(ConfigReader.fromConfigs(appConfigs));
const finalAppConfigs = [...appConfigs];
if (options.additionalConfigs) {
finalAppConfigs.push(...options.additionalConfigs);
}
config.setConfig(ConfigReader.fromConfigs(finalAppConfigs));
return { config };
}
+17
View File
@@ -1,5 +1,22 @@
# @backstage/backend-common
## 0.18.4-next.2
### Patch Changes
- 5c7ce585824: Allow an additionalConfig to be provided to loadBackendConfig that fetches config values during runtime.
- Updated dependencies
- @backstage/backend-app-api@0.4.2-next.2
- @backstage/backend-dev-utils@0.1.1
- @backstage/backend-plugin-api@0.5.1-next.2
- @backstage/cli-common@0.1.12
- @backstage/config@1.0.7
- @backstage/config-loader@1.1.9
- @backstage/errors@1.1.5
- @backstage/integration@1.4.4-next.0
- @backstage/integration-aws-node@0.1.2
- @backstage/types@1.0.2
## 0.18.4-next.1
### Patch Changes
+2
View File
@@ -6,6 +6,7 @@
/// <reference types="node" />
/// <reference types="webpack-env" />
import { AppConfig } from '@backstage/config';
import { AwsCredentialsManager } from '@backstage/integration-aws-node';
import { AwsS3Integration } from '@backstage/integration';
import { AzureIntegration } from '@backstage/integration';
@@ -533,6 +534,7 @@ export const legacyPlugin: (
export function loadBackendConfig(options: {
logger: LoggerService;
remote?: LoadConfigOptionsRemote;
additionalConfig?: AppConfig;
argv: string[];
}): Promise<Config>;
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/backend-common",
"description": "Common functionality library for Backstage backends",
"version": "0.18.4-next.1",
"version": "0.18.4-next.2",
"main": "src/index.ts",
"types": "src/index.ts",
"publishConfig": {
+2 -1
View File
@@ -19,7 +19,7 @@ import {
loadBackendConfig as newLoadBackendConfig,
} from '@backstage/backend-app-api';
import { LoggerService } from '@backstage/backend-plugin-api';
import { Config } from '@backstage/config';
import { AppConfig, Config } from '@backstage/config';
import { LoadConfigOptionsRemote } from '@backstage/config-loader';
import { setRootLoggerRedactionList } from './logging/createRootLogger';
@@ -34,6 +34,7 @@ export async function loadBackendConfig(options: {
logger: LoggerService;
// process.argv or any other overrides
remote?: LoadConfigOptionsRemote;
additionalConfig?: AppConfig;
argv: string[];
}): Promise<Config> {
const secretEnumerator = await createConfigSecretEnumerator({
+9
View File
@@ -1,5 +1,14 @@
# @backstage/backend-defaults
## 0.1.9-next.2
### Patch Changes
- Updated dependencies
- @backstage/backend-app-api@0.4.2-next.2
- @backstage/backend-common@0.18.4-next.2
- @backstage/backend-plugin-api@0.5.1-next.2
## 0.1.9-next.1
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/backend-defaults",
"description": "Backend defaults used by Backstage backend apps",
"version": "0.1.9-next.1",
"version": "0.1.9-next.2",
"main": "src/index.ts",
"types": "src/index.ts",
"publishConfig": {
+22
View File
@@ -1,5 +1,27 @@
# example-backend-next
## 0.0.10-next.2
### Patch Changes
- Updated dependencies
- @backstage/plugin-kubernetes-backend@0.10.0-next.2
- @backstage/plugin-catalog-backend@1.8.1-next.2
- @backstage/plugin-permission-node@0.7.7-next.2
- @backstage/plugin-permission-backend@0.5.19-next.2
- @backstage/plugin-scaffolder-backend@1.13.0-next.2
- @backstage/backend-defaults@0.1.9-next.2
- @backstage/plugin-app-backend@0.3.44-next.2
- @backstage/plugin-auth-node@0.2.13-next.2
- @backstage/plugin-permission-common@0.7.5-next.0
- @backstage/plugin-search-backend@1.3.0-next.2
- @backstage/plugin-search-backend-module-catalog@0.1.0-next.1
- @backstage/plugin-search-backend-module-explore@0.1.0-next.1
- @backstage/plugin-search-backend-module-techdocs@0.1.0-next.1
- @backstage/plugin-search-backend-node@1.2.0-next.2
- @backstage/plugin-techdocs-backend@1.6.1-next.2
- @backstage/plugin-todo-backend@0.1.41-next.2
## 0.0.10-next.1
### Patch Changes
+5 -1
View File
@@ -1,6 +1,6 @@
{
"name": "example-backend-next",
"version": "0.0.10-next.1",
"version": "0.0.10-next.2",
"main": "dist/index.cjs.js",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -27,8 +27,12 @@
"dependencies": {
"@backstage/backend-defaults": "workspace:^",
"@backstage/plugin-app-backend": "workspace:^",
"@backstage/plugin-auth-node": "workspace:^",
"@backstage/plugin-catalog-backend": "workspace:^",
"@backstage/plugin-kubernetes-backend": "workspace:^",
"@backstage/plugin-permission-backend": "workspace:^",
"@backstage/plugin-permission-common": "workspace:^",
"@backstage/plugin-permission-node": "workspace:^",
"@backstage/plugin-scaffolder-backend": "workspace:^",
"@backstage/plugin-search-backend": "workspace:^",
"@backstage/plugin-search-backend-module-catalog": "workspace:^",
+16 -7
View File
@@ -16,15 +16,19 @@
import { createBackend } from '@backstage/backend-defaults';
import { appPlugin } from '@backstage/plugin-app-backend/alpha';
import { todoPlugin } from '@backstage/plugin-todo-backend';
import { techdocsPlugin } from '@backstage/plugin-techdocs-backend/alpha';
import { catalogPlugin } from '@backstage/plugin-catalog-backend/alpha';
import { catalogModuleTemplateKind } from '@backstage/plugin-scaffolder-backend/alpha';
import { searchPlugin } from '@backstage/plugin-search-backend/alpha';
import { searchModuleCatalogCollator } from '@backstage/plugin-search-backend-module-catalog/alpha';
import { searchModuleTechDocsCollator } from '@backstage/plugin-search-backend-module-techdocs/alpha';
import { searchModuleExploreCollator } from '@backstage/plugin-search-backend-module-explore/alpha';
import { kubernetesPlugin } from '@backstage/plugin-kubernetes-backend/alpha';
import {
permissionModuleAllowAllPolicy,
permissionPlugin,
} from '@backstage/plugin-permission-backend/alpha';
import { catalogModuleTemplateKind } from '@backstage/plugin-scaffolder-backend/alpha';
import { searchModuleCatalogCollator } from '@backstage/plugin-search-backend-module-catalog/alpha';
import { searchModuleExploreCollator } from '@backstage/plugin-search-backend-module-explore/alpha';
import { searchModuleTechDocsCollator } from '@backstage/plugin-search-backend-module-techdocs/alpha';
import { searchPlugin } from '@backstage/plugin-search-backend/alpha';
import { techdocsPlugin } from '@backstage/plugin-techdocs-backend/alpha';
import { todoPlugin } from '@backstage/plugin-todo-backend';
const backend = createBackend();
@@ -48,4 +52,9 @@ backend.add(searchModuleExploreCollator());
// Kubernetes
backend.add(kubernetesPlugin());
// Permissions
backend.add(permissionPlugin());
backend.add(permissionModuleAllowAllPolicy());
backend.start();
+11
View File
@@ -1,5 +1,16 @@
# @backstage/backend-plugin-api
## 0.5.1-next.2
### Patch Changes
- Updated dependencies
- @backstage/backend-tasks@0.5.1-next.2
- @backstage/config@1.0.7
- @backstage/types@1.0.2
- @backstage/plugin-auth-node@0.2.13-next.2
- @backstage/plugin-permission-common@0.7.5-next.0
## 0.5.1-next.1
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/backend-plugin-api",
"description": "Core API used by Backstage backend plugins",
"version": "0.5.1-next.1",
"version": "0.5.1-next.2",
"main": "src/index.ts",
"types": "src/index.ts",
"publishConfig": {
+10
View File
@@ -1,5 +1,15 @@
# @backstage/backend-tasks
## 0.5.1-next.2
### Patch Changes
- Updated dependencies
- @backstage/backend-common@0.18.4-next.2
- @backstage/config@1.0.7
- @backstage/errors@1.1.5
- @backstage/types@1.0.2
## 0.5.1-next.1
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/backend-tasks",
"description": "Common distributed task management library for Backstage backends",
"version": "0.5.1-next.1",
"version": "0.5.1-next.2",
"main": "src/index.ts",
"types": "src/index.ts",
"publishConfig": {
+12
View File
@@ -1,5 +1,17 @@
# @backstage/backend-test-utils
## 0.1.36-next.2
### Patch Changes
- Updated dependencies
- @backstage/backend-app-api@0.4.2-next.2
- @backstage/backend-common@0.18.4-next.2
- @backstage/backend-plugin-api@0.5.1-next.2
- @backstage/config@1.0.7
- @backstage/types@1.0.2
- @backstage/plugin-auth-node@0.2.13-next.2
## 0.1.36-next.1
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/backend-test-utils",
"description": "Test helpers library for Backstage backends",
"version": "0.1.36-next.1",
"version": "0.1.36-next.2",
"main": "src/index.ts",
"types": "src/index.ts",
"publishConfig": {
+51
View File
@@ -1,5 +1,56 @@
# example-backend
## 0.2.82-next.2
### Patch Changes
- Updated dependencies
- @backstage/plugin-kubernetes-backend@0.10.0-next.2
- @backstage/plugin-catalog-backend@1.8.1-next.2
- @backstage/backend-common@0.18.4-next.2
- @backstage/catalog-client@1.4.1-next.0
- @backstage/plugin-permission-node@0.7.7-next.2
- @backstage/plugin-permission-backend@0.5.19-next.2
- @backstage/plugin-rollbar-backend@0.1.41-next.2
- @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.28-next.2
- @backstage/plugin-scaffolder-backend@1.13.0-next.2
- example-app@0.2.82-next.2
- @backstage/backend-tasks@0.5.1-next.2
- @backstage/catalog-model@1.2.1
- @backstage/config@1.0.7
- @backstage/integration@1.4.4-next.0
- @backstage/plugin-adr-backend@0.3.2-next.2
- @backstage/plugin-app-backend@0.3.44-next.2
- @backstage/plugin-auth-backend@0.18.2-next.2
- @backstage/plugin-auth-node@0.2.13-next.2
- @backstage/plugin-azure-devops-backend@0.3.23-next.2
- @backstage/plugin-azure-sites-backend@0.1.6-next.2
- @backstage/plugin-badges-backend@0.1.38-next.2
- @backstage/plugin-catalog-node@1.3.5-next.2
- @backstage/plugin-code-coverage-backend@0.2.10-next.2
- @backstage/plugin-entity-feedback-backend@0.1.2-next.2
- @backstage/plugin-events-backend@0.2.5-next.2
- @backstage/plugin-events-node@0.2.5-next.2
- @backstage/plugin-explore-backend@0.0.6-next.2
- @backstage/plugin-graphql-backend@0.1.34-next.2
- @backstage/plugin-jenkins-backend@0.1.34-next.2
- @backstage/plugin-kafka-backend@0.2.37-next.2
- @backstage/plugin-lighthouse-backend@0.1.2-next.2
- @backstage/plugin-linguist-backend@0.2.1-next.2
- @backstage/plugin-permission-common@0.7.5-next.0
- @backstage/plugin-playlist-backend@0.2.7-next.2
- @backstage/plugin-proxy-backend@0.2.38-next.2
- @backstage/plugin-scaffolder-backend-module-rails@0.4.12-next.2
- @backstage/plugin-search-backend@1.3.0-next.2
- @backstage/plugin-search-backend-module-elasticsearch@1.2.0-next.2
- @backstage/plugin-search-backend-module-pg@0.5.5-next.2
- @backstage/plugin-search-backend-node@1.2.0-next.2
- @backstage/plugin-search-common@1.2.3-next.0
- @backstage/plugin-tech-insights-backend@0.5.10-next.2
- @backstage/plugin-tech-insights-node@0.4.2-next.2
- @backstage/plugin-techdocs-backend@1.6.1-next.2
- @backstage/plugin-todo-backend@0.1.41-next.2
## 0.2.82-next.1
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "example-backend",
"version": "0.2.82-next.1",
"version": "0.2.82-next.2",
"main": "dist/index.cjs.js",
"types": "src/index.ts",
"license": "Apache-2.0",
+6 -9
View File
@@ -42,7 +42,6 @@ import { metricsInit, metricsHandler } from './metrics';
import auth from './plugins/auth';
import azureDevOps from './plugins/azure-devops';
import catalog from './plugins/catalog';
import catalogEventBasedProviders from './plugins/catalogEventBasedProviders';
import codeCoverage from './plugins/codecoverage';
import entityFeedback from './plugins/entityFeedback';
import events from './plugins/events';
@@ -68,6 +67,7 @@ import linguist from './plugins/linguist';
import { PluginEnvironment } from './types';
import { ServerPermissionClient } from '@backstage/plugin-permission-node';
import { DefaultIdentityClient } from '@backstage/plugin-auth-node';
import { DefaultEventBroker } from '@backstage/plugin-events-backend';
function makeCreateEnv(config: Config) {
const root = getRootLogger();
@@ -85,6 +85,8 @@ function makeCreateEnv(config: Config) {
discovery,
});
const eventBroker = new DefaultEventBroker(root.child({ type: 'plugin' }));
root.info(`Created UrlReader ${reader}`);
return (plugin: string): PluginEnvironment => {
@@ -99,6 +101,7 @@ function makeCreateEnv(config: Config) {
database,
config,
reader,
eventBroker,
discovery,
tokenManager,
permissions,
@@ -156,18 +159,12 @@ async function main() {
const exploreEnv = useHotMemoize(module, () => createEnv('explore'));
const lighthouseEnv = useHotMemoize(module, () => createEnv('lighthouse'));
const eventBasedEntityProviders = await catalogEventBasedProviders(
catalogEnv,
);
const linguistEnv = useHotMemoize(module, () => createEnv('linguist'));
const apiRouter = Router();
apiRouter.use(
'/catalog',
await catalog(catalogEnv, eventBasedEntityProviders),
);
apiRouter.use('/catalog', await catalog(catalogEnv));
apiRouter.use('/code-coverage', await codeCoverage(codeCoverageEnv));
apiRouter.use('/events', await events(eventsEnv, eventBasedEntityProviders));
apiRouter.use('/events', await events(eventsEnv));
apiRouter.use('/rollbar', await rollbar(rollbarEnv));
apiRouter.use('/scaffolder', await scaffolder(scaffolderEnv));
apiRouter.use('/tech-insights', await techInsights(techInsightsEnv));
@@ -18,15 +18,29 @@ import {
EntityProvider,
EntityProviderConnection,
} from '@backstage/plugin-catalog-node';
import { EventParams, EventSubscriber } from '@backstage/plugin-events-node';
import {
EventBroker,
EventParams,
EventSubscriber,
} from '@backstage/plugin-events-node';
import { Logger } from 'winston';
import { PluginEnvironment } from '../types';
class DemoEventBasedEntityProvider implements EntityProvider, EventSubscriber {
constructor(
private readonly logger: Logger,
private readonly topics: string[],
) {}
export class DemoEventBasedEntityProvider
implements EntityProvider, EventSubscriber
{
private readonly logger: Logger;
private readonly topics: string[];
constructor(opts: {
eventBroker: EventBroker;
logger: Logger;
topics: string[];
}) {
const { eventBroker, logger, topics } = opts;
eventBroker.subscribe(this);
this.logger = logger;
this.topics = topics;
}
async onEvent(params: EventParams): Promise<void> {
this.logger.info(
@@ -48,14 +62,3 @@ class DemoEventBasedEntityProvider implements EntityProvider, EventSubscriber {
return DemoEventBasedEntityProvider.name;
}
}
export default async function createCatalogEventBasedProviders(
env: PluginEnvironment,
): Promise<Array<EntityProvider & EventSubscriber>> {
const providers: Array<
(EntityProvider & EventSubscriber) | Array<EntityProvider & EventSubscriber>
> = [];
providers.push(new DemoEventBasedEntityProvider(env.logger, ['example']));
// add your event-based entity providers here
return providers.flat();
}
+9 -3
View File
@@ -15,18 +15,24 @@
*/
import { CatalogBuilder } from '@backstage/plugin-catalog-backend';
import { EntityProvider } from '@backstage/plugin-catalog-node';
import { ScaffolderEntitiesProcessor } from '@backstage/plugin-scaffolder-backend';
import { Router } from 'express';
import { PluginEnvironment } from '../types';
import { DemoEventBasedEntityProvider } from './DemoEventBasedEntityProvider';
export default async function createPlugin(
env: PluginEnvironment,
providers?: Array<EntityProvider>,
): Promise<Router> {
const builder = await CatalogBuilder.create(env);
builder.addProcessor(new ScaffolderEntitiesProcessor());
builder.addEntityProvider(providers ?? []);
const demoProvider = new DemoEventBasedEntityProvider({
logger: env.logger,
topics: ['example'],
eventBroker: env.eventBroker,
});
builder.addEntityProvider(demoProvider);
const { processingEngine, router } = await builder.build();
await processingEngine.start();
return router;
+1 -3
View File
@@ -18,13 +18,11 @@ import {
EventsBackend,
HttpPostIngressEventPublisher,
} from '@backstage/plugin-events-backend';
import { EventSubscriber } from '@backstage/plugin-events-node';
import { Router } from 'express';
import { PluginEnvironment } from '../types';
export default async function createPlugin(
env: PluginEnvironment,
subscribers: EventSubscriber[],
): Promise<Router> {
const eventsRouter = Router();
@@ -35,8 +33,8 @@ export default async function createPlugin(
http.bind(eventsRouter);
await new EventsBackend(env.logger)
.setEventBroker(env.eventBroker)
.addPublishers(http)
.addSubscribers(subscribers)
.start();
return eventsRouter;
+2
View File
@@ -26,6 +26,7 @@ import {
import { PluginTaskScheduler } from '@backstage/backend-tasks';
import { IdentityApi } from '@backstage/plugin-auth-node';
import { PermissionEvaluator } from '@backstage/plugin-permission-common';
import { EventBroker } from '@backstage/plugin-events-node';
export type PluginEnvironment = {
logger: Logger;
@@ -38,4 +39,5 @@ export type PluginEnvironment = {
permissions: PermissionEvaluator;
scheduler: PluginTaskScheduler;
identity: IdentityApi;
eventBroker: EventBroker;
};
+9
View File
@@ -1,5 +1,14 @@
# @backstage/catalog-client
## 1.4.1-next.0
### Patch Changes
- c1c4e080b79: Fixed bug in `queryEntities` of `CatalogClient` where the `sortField` is supposed to be changed to `orderField`.
- Updated dependencies
- @backstage/catalog-model@1.2.1
- @backstage/errors@1.1.5
## 1.4.0
### Minor Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/catalog-client",
"description": "An isomorphic client for the catalog backend",
"version": "1.4.0",
"version": "1.4.1-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -352,7 +352,7 @@ describe('CatalogClient', () => {
],
});
expect(mockedEndpoint.mock.calls[0][0].url.search).toBe(
'?limit=100&sortField=metadata.name,asc&sortField=metadata.uid,desc&fields=a,b&fullTextFilterTerm=query',
'?limit=100&orderField=metadata.name,asc&orderField=metadata.uid,desc&fields=a,b&fullTextFilterTerm=query',
);
});
+1 -1
View File
@@ -230,7 +230,7 @@ export class CatalogClient implements CatalogApi {
}
if (orderFields !== undefined) {
(Array.isArray(orderFields) ? orderFields : [orderFields]).forEach(
({ field, order }) => params.push(`sortField=${field},${order}`),
({ field, order }) => params.push(`orderField=${field},${order}`),
);
}
if (fields.length) {
+14
View File
@@ -1,5 +1,19 @@
# @backstage/cli
## 0.22.6-next.2
### Patch Changes
- 8075b67e64c: When building a backend package with dependencies any `--config <path>` options will now be forwarded to any dependent app package builds, unless the build script in the app package already contains a `--config` option.
- Updated dependencies
- @backstage/cli-common@0.1.12
- @backstage/config@1.0.7
- @backstage/config-loader@1.1.9
- @backstage/errors@1.1.5
- @backstage/eslint-plugin@0.1.3-next.0
- @backstage/release-manifests@0.0.9
- @backstage/types@1.0.2
## 0.22.6-next.1
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/cli",
"description": "CLI for developing Backstage plugins and apps",
"version": "0.22.6-next.1",
"version": "0.22.6-next.2",
"publishConfig": {
"access": "public"
},
@@ -28,10 +28,11 @@ const SKELETON_FILE = 'skeleton.tar.gz';
interface BuildBackendOptions {
targetDir: string;
skipBuildDependencies: boolean;
configPaths?: string[];
}
export async function buildBackend(options: BuildBackendOptions) {
const { targetDir, skipBuildDependencies } = options;
const { targetDir, skipBuildDependencies, configPaths } = options;
const pkg = await fs.readJson(resolvePath(targetDir, 'package.json'));
// We build the target package without generating type declarations.
@@ -45,6 +46,7 @@ export async function buildBackend(options: BuildBackendOptions) {
try {
await createDistWorkspace([pkg.name], {
targetDir: tmpDir,
configPaths,
buildDependencies: !skipBuildDependencies,
buildExcludes: [pkg.name],
parallelism: getEnvironmentParallelism(),
+16 -7
View File
@@ -20,20 +20,29 @@ import { findRoleFromCommand, getRoleInfo } from '../../lib/role';
import { paths } from '../../lib/paths';
import { buildFrontend } from './buildFrontend';
import { buildBackend } from './buildBackend';
import { isValidUrl } from '../../lib/urls';
export async function command(opts: OptionValues): Promise<void> {
const role = await findRoleFromCommand(opts);
if (role === 'frontend') {
return buildFrontend({
targetDir: paths.targetDir,
configPaths: opts.config as string[],
writeStats: Boolean(opts.stats),
if (role === 'frontend' || role === 'backend') {
const configPaths = (opts.config as string[]).map(arg => {
if (isValidUrl(arg)) {
return arg;
}
return paths.resolveTarget(arg);
});
}
if (role === 'backend') {
if (role === 'frontend') {
return buildFrontend({
targetDir: paths.targetDir,
configPaths,
writeStats: Boolean(opts.stats),
});
}
return buildBackend({
targetDir: paths.targetDir,
configPaths,
skipBuildDependencies: Boolean(opts.skipBuildDependencies),
});
}
@@ -60,6 +60,11 @@ type Options = {
*/
targetDir?: string;
/**
* Configuration files to load during packaging.
*/
configPaths?: string[];
/**
* Files to copy into the target workspace.
*
@@ -127,13 +132,18 @@ export async function createDistWorkspace(
if (options.buildDependencies) {
const exclude = options.buildExcludes ?? [];
const configPaths = options.configPaths ?? [];
const toBuild = new Set(
targets.map(_ => _.name).filter(name => !exclude.includes(name)),
);
const standardBuilds = new Array<BuildOptions>();
const customBuild = new Array<{ dir: string; name: string }>();
const customBuild = new Array<{
dir: string;
name: string;
args?: string[];
}>();
for (const pkg of packages) {
if (!toBuild.has(pkg.packageJson.name)) {
@@ -166,7 +176,10 @@ export async function createDistWorkspace(
console.warn(
`Building ${pkg.packageJson.name} separately because it is a bundled package`,
);
customBuild.push({ dir: pkg.dir, name: pkg.packageJson.name });
const args = buildScript.includes('--config')
? []
: configPaths.map(p => ['--config', p]).flat();
customBuild.push({ dir: pkg.dir, name: pkg.packageJson.name, args });
continue;
}
@@ -193,8 +206,8 @@ export async function createDistWorkspace(
if (customBuild.length > 0) {
await runParallelWorkers({
items: customBuild,
worker: async ({ name, dir }) => {
await run('yarn', ['run', 'build'], {
worker: async ({ name, dir, args }) => {
await run('yarn', ['run', 'build', ...(args || [])], {
cwd: dir,
stdoutLogFunc: prefixLogFunc(`${name}: `, 'stdout'),
stderrLogFunc: prefixLogFunc(`${name}: `, 'stderr'),
+10
View File
@@ -1,5 +1,15 @@
# @backstage/core-app-api
## 1.7.0-next.2
### Patch Changes
- Updated dependencies
- @backstage/core-plugin-api@1.5.1-next.1
- @backstage/config@1.0.7
- @backstage/types@1.0.2
- @backstage/version-bridge@1.0.4-next.0
## 1.7.0-next.1
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/core-app-api",
"description": "Core app API used by Backstage apps",
"version": "1.7.0-next.1",
"version": "1.7.0-next.2",
"publishConfig": {
"access": "public",
"main": "dist/index.esm.js",
+13
View File
@@ -1,5 +1,18 @@
# @backstage/core-components
## 0.12.6-next.2
### Patch Changes
- 67140d9f96f: Upgrade `react-virtualized-auto-sizer´ to version `^1.0.11`
- 7e60bee2dea: Split the `BackstageSidebar` style `drawer` class, such that the `width` property is in a separate `drawerWidth` class instead. This makes it such that you can style the `drawer` class in your theme again.
- Updated dependencies
- @backstage/core-plugin-api@1.5.1-next.1
- @backstage/config@1.0.7
- @backstage/errors@1.1.5
- @backstage/theme@0.2.19-next.0
- @backstage/version-bridge@1.0.4-next.0
## 0.12.6-next.1
### Patch Changes
+2 -2
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/core-components",
"description": "Core components used by Backstage plugins and apps",
"version": "0.12.6-next.1",
"version": "0.12.6-next.2",
"publishConfig": {
"access": "public",
"main": "dist/index.esm.js",
@@ -66,7 +66,7 @@
"react-syntax-highlighter": "^15.4.5",
"react-text-truncate": "^0.19.0",
"react-use": "^17.3.2",
"react-virtualized-auto-sizer": "^1.0.6",
"react-virtualized-auto-sizer": "^1.0.11",
"react-window": "^1.8.6",
"remark-gfm": "^3.0.1",
"zen-observable": "^0.10.0",
@@ -77,8 +77,8 @@ export function RealLogViewer(props: RealLogViewerProps) {
<FixedSizeList
ref={listRef}
className={classes.log}
height={height - HEADER_SIZE}
width={width}
height={(height || 480) - HEADER_SIZE}
width={width || 640}
itemData={search.lines}
itemSize={20}
itemCount={search.lines.length}
@@ -13,6 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { BackstageTheme } from '@backstage/theme';
import Box from '@material-ui/core/Box';
import Button from '@material-ui/core/Button';
@@ -39,7 +40,7 @@ import { useSidebarPinState } from './SidebarPinStateContext';
export type SidebarClassKey = 'drawer' | 'drawerOpen';
const useStyles = makeStyles<BackstageTheme, { sidebarConfig: SidebarConfig }>(
theme => ({
drawer: props => ({
drawer: {
display: 'flex',
flexFlow: 'column nowrap',
alignItems: 'flex-start',
@@ -52,7 +53,6 @@ const useStyles = makeStyles<BackstageTheme, { sidebarConfig: SidebarConfig }>(
overflowX: 'hidden',
msOverflowStyle: 'none',
scrollbarWidth: 'none',
width: props.sidebarConfig.drawerWidthClosed,
transition: theme.transitions.create('width', {
easing: theme.transitions.easing.sharp,
duration: theme.transitions.duration.shortest,
@@ -63,6 +63,9 @@ const useStyles = makeStyles<BackstageTheme, { sidebarConfig: SidebarConfig }>(
'&::-webkit-scrollbar': {
display: 'none',
},
},
drawerWidth: props => ({
width: props.sidebarConfig.drawerWidthClosed,
}),
drawerOpen: props => ({
width: props.sidebarConfig.drawerWidthOpen,
@@ -174,7 +177,7 @@ const DesktopSidebar = (props: DesktopSidebarProps) => {
const isOpen = (state === State.Open && !isSmallScreen) || isPinned;
/**
* Close/Open Sidebar directily without delays. Also toggles `SidebarPinState` to avoid hidden content behind Sidebar.
* Close/Open Sidebar directly without delays. Also toggles `SidebarPinState` to avoid hidden content behind Sidebar.
*/
const setOpen = (open: boolean) => {
if (open) {
@@ -199,7 +202,7 @@ const DesktopSidebar = (props: DesktopSidebarProps) => {
onBlur={disableExpandOnHover ? () => {} : handleClose}
>
<Box
className={classnames(classes.drawer, {
className={classnames(classes.drawer, classes.drawerWidth, {
[classes.drawerOpen]: isOpen,
})}
>
+10
View File
@@ -1,5 +1,15 @@
# @backstage/core-plugin-api
## 1.5.1-next.1
### Patch Changes
- 2898b6c8d52: Minor type tweaks for TypeScript 5.0
- Updated dependencies
- @backstage/config@1.0.7
- @backstage/types@1.0.2
- @backstage/version-bridge@1.0.4-next.0
## 1.5.1-next.0
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/core-plugin-api",
"description": "Core API used by Backstage plugins",
"version": "1.5.1-next.0",
"version": "1.5.1-next.1",
"publishConfig": {
"access": "public"
},
+16
View File
@@ -1,5 +1,21 @@
# @backstage/create-app
## 0.4.39-next.2
### Patch Changes
- 2945923b133: Upgraded the TypeScript version to 5.0
To apply this change in your own project, switch the TypeScript version in your root `package.json`:
```diff
- "typescript": "~4.6.4",
+ "typescript": "~5.0.0",
```
- Updated dependencies
- @backstage/cli-common@0.1.12
## 0.4.39-next.1
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/create-app",
"description": "A CLI that helps you create your own Backstage app",
"version": "0.4.39-next.1",
"version": "0.4.39-next.2",
"publishConfig": {
"access": "public"
},
+15
View File
@@ -1,5 +1,20 @@
# @backstage/dev-utils
## 1.0.14-next.2
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.12.6-next.2
- @backstage/plugin-catalog-react@1.4.1-next.2
- @backstage/core-plugin-api@1.5.1-next.1
- @backstage/app-defaults@1.3.0-next.2
- @backstage/catalog-model@1.2.1
- @backstage/core-app-api@1.7.0-next.2
- @backstage/integration-react@1.1.12-next.2
- @backstage/test-utils@1.3.0-next.2
- @backstage/theme@0.2.19-next.0
## 1.0.14-next.1
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/dev-utils",
"description": "Utilities for developing Backstage plugins.",
"version": "1.0.14-next.1",
"version": "1.0.14-next.2",
"publishConfig": {
"access": "public",
"main": "dist/index.esm.js",
+9
View File
@@ -1,5 +1,14 @@
# e2e-test
## 0.2.2-next.2
### Patch Changes
- Updated dependencies
- @backstage/create-app@0.4.39-next.2
- @backstage/cli-common@0.1.12
- @backstage/errors@1.1.5
## 0.2.2-next.1
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "e2e-test",
"description": "E2E test for verifying Backstage packages",
"version": "0.2.2-next.1",
"version": "0.2.2-next.2",
"private": true,
"backstage": {
"role": "cli"
@@ -180,7 +180,7 @@ module.exports = {
// The security implication of this is a bit interesting, as crafted add-import
// directives could be used to install malicious packages. However, the same is true
// for adding malicious packages to package.json, so there's significant difference.
execFileSync('yarn', ['add', ...(flag || []), ...names], {
execFileSync('yarn', ['add', ...(flag ? [flag] : []), ...names], {
cwd: localPkg.dir,
stdio: 'inherit',
});
+11
View File
@@ -1,5 +1,16 @@
# @backstage/integration-react
## 1.1.12-next.2
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.12.6-next.2
- @backstage/core-plugin-api@1.5.1-next.1
- @backstage/config@1.0.7
- @backstage/integration@1.4.4-next.0
- @backstage/theme@0.2.19-next.0
## 1.1.12-next.1
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/integration-react",
"description": "Frontend package for managing integrations towards external systems",
"version": "1.1.12-next.1",
"version": "1.1.12-next.2",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -1,5 +1,24 @@
# techdocs-cli-embedded-app
## 0.2.81-next.2
### Patch Changes
- Updated dependencies
- @backstage/cli@0.22.6-next.2
- @backstage/core-components@0.12.6-next.2
- @backstage/core-plugin-api@1.5.1-next.1
- @backstage/plugin-techdocs@1.6.1-next.2
- @backstage/app-defaults@1.3.0-next.2
- @backstage/catalog-model@1.2.1
- @backstage/config@1.0.7
- @backstage/core-app-api@1.7.0-next.2
- @backstage/integration-react@1.1.12-next.2
- @backstage/test-utils@1.3.0-next.2
- @backstage/theme@0.2.19-next.0
- @backstage/plugin-catalog@1.10.0-next.2
- @backstage/plugin-techdocs-react@1.1.5-next.2
## 0.2.81-next.1
### Patch Changes
@@ -1,6 +1,6 @@
{
"name": "techdocs-cli-embedded-app",
"version": "0.2.81-next.1",
"version": "0.2.81-next.2",
"private": true,
"backstage": {
"role": "frontend"
+11
View File
@@ -1,5 +1,16 @@
# @techdocs/cli
## 1.4.1-next.2
### Patch Changes
- Updated dependencies
- @backstage/backend-common@0.18.4-next.2
- @backstage/catalog-model@1.2.1
- @backstage/cli-common@0.1.12
- @backstage/config@1.0.7
- @backstage/plugin-techdocs-node@1.6.1-next.2
## 1.4.1-next.1
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@techdocs/cli",
"description": "Utility CLI for managing TechDocs sites in Backstage.",
"version": "1.4.1-next.1",
"version": "1.4.1-next.2",
"publishConfig": {
"access": "public"
},
+13
View File
@@ -1,5 +1,18 @@
# @backstage/test-utils
## 1.3.0-next.2
### Patch Changes
- Updated dependencies
- @backstage/core-plugin-api@1.5.1-next.1
- @backstage/config@1.0.7
- @backstage/core-app-api@1.7.0-next.2
- @backstage/theme@0.2.19-next.0
- @backstage/types@1.0.2
- @backstage/plugin-permission-common@0.7.5-next.0
- @backstage/plugin-permission-react@0.4.12-next.1
## 1.3.0-next.1
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/test-utils",
"description": "Utilities to test Backstage plugins and apps.",
"version": "1.3.0-next.1",
"version": "1.3.0-next.2",
"publishConfig": {
"access": "public"
},
+14
View File
@@ -1,5 +1,19 @@
# @backstage/plugin-adr-backend
## 0.3.2-next.2
### Patch Changes
- Updated dependencies
- @backstage/backend-common@0.18.4-next.2
- @backstage/catalog-client@1.4.1-next.0
- @backstage/catalog-model@1.2.1
- @backstage/config@1.0.7
- @backstage/errors@1.1.5
- @backstage/integration@1.4.4-next.0
- @backstage/plugin-adr-common@0.2.8-next.0
- @backstage/plugin-search-common@1.2.3-next.0
## 0.3.2-next.1
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-adr-backend",
"version": "0.3.2-next.1",
"version": "0.3.2-next.2",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
+1 -1
View File
@@ -77,7 +77,7 @@ export type AdrFilePathFilterFn = (path: string) => boolean;
* @public
*/
export const madrFilePathFilter: AdrFilePathFilterFn = (path: string) =>
/^\d{4}-.+\.md$/.test(path);
/^(?:.*\/)?\d{4}-.+\.md$/.test(path);
/**
* ADR indexable document interface

Some files were not shown because too many files have changed in this diff Show More