Merge branch 'master' into conflict-events
Signed-off-by: sblausten <sam@roadie.io>
This commit is contained in:
@@ -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`.
|
||||
@@ -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.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-circleci': patch
|
||||
---
|
||||
|
||||
Add hover over CircleCI avatar icon to show user name in builds table
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/catalog-client': patch
|
||||
---
|
||||
|
||||
Fixed bug in `queryEntities` of `CatalogClient` where the `sortField` is supposed to be changed to `orderField`.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-permission-node': patch
|
||||
---
|
||||
|
||||
Introduced alpha export of the `policyExtensionPoint` for use in the new backend system.
|
||||
@@ -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.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/core-components': patch
|
||||
---
|
||||
|
||||
Upgrade `react-virtualized-auto-sizer´ to version `^1.0.11`
|
||||
@@ -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.
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder-react': patch
|
||||
'@backstage/plugin-scaffolder': patch
|
||||
---
|
||||
|
||||
bug: Invert `templateFilter` predicate to align with `Array.filter`
|
||||
@@ -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
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-playlist': patch
|
||||
---
|
||||
|
||||
Added config properties to change dynamically the group noun for all the components in the UI
|
||||
@@ -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",
|
||||
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder-react': patch
|
||||
'@backstage/plugin-scaffolder': patch
|
||||
---
|
||||
|
||||
`scaffolder/next`: bump `rjsf` dependencies to `5.5.0`
|
||||
@@ -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.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder': minor
|
||||
---
|
||||
|
||||
The Installed Actions page now shows details for nested objects and arrays
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-search': minor
|
||||
---
|
||||
|
||||
Search modal auto closes on location change
|
||||
+4
-4
@@ -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
@@ -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:
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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).
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
@@ -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
@@ -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"
|
||||
|
||||
@@ -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,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",
|
||||
|
||||
@@ -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,6 +1,6 @@
|
||||
{
|
||||
"name": "example-app",
|
||||
"version": "0.2.82-next.1",
|
||||
"version": "0.2.82-next.2",
|
||||
"private": true,
|
||||
"backstage": {
|
||||
"role": "frontend"
|
||||
|
||||
@@ -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 />} />
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,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": {
|
||||
|
||||
@@ -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 };
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,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": {
|
||||
|
||||
@@ -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({
|
||||
|
||||
@@ -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,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": {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,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();
|
||||
|
||||
@@ -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,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": {
|
||||
|
||||
@@ -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,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": {
|
||||
|
||||
@@ -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,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": {
|
||||
|
||||
@@ -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,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",
|
||||
|
||||
@@ -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));
|
||||
|
||||
+21
-18
@@ -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();
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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,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',
|
||||
);
|
||||
});
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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,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(),
|
||||
|
||||
@@ -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'),
|
||||
|
||||
@@ -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,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",
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
})}
|
||||
>
|
||||
|
||||
@@ -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,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"
|
||||
},
|
||||
|
||||
@@ -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,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"
|
||||
},
|
||||
|
||||
@@ -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,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",
|
||||
|
||||
@@ -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,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',
|
||||
});
|
||||
|
||||
@@ -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,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"
|
||||
|
||||
@@ -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,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"
|
||||
},
|
||||
|
||||
@@ -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,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"
|
||||
},
|
||||
|
||||
@@ -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,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",
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user