Merge branch 'backstage:master' into clean_deprecations

This commit is contained in:
Simon Jakobsson
2022-11-14 16:27:11 +01:00
committed by GitHub
596 changed files with 14885 additions and 1452 deletions
+41
View File
@@ -0,0 +1,41 @@
---
'@backstage/plugin-catalog-backend-module-bitbucket-cloud': patch
---
Handle Bitbucket Cloud `repo:push` events at the `BitbucketCloudEntityProvider`
by subscribing to the topic `bitbucketCloud.repo:push.`
Implements `EventSubscriber` to receive events for the topic `bitbucketCloud.repo:push`.
On `repo:push`, the affected repository will be refreshed.
This includes adding new Location entities, refreshing existing ones,
and removing obsolete ones.
To support this, a new annotation `bitbucket.org/repo-url` was added
to Location entities.
A full refresh will require 1 API call to Bitbucket Cloud to discover all catalog files.
When we handle one `repo:push` event, we also need 1 API call in order to know
which catalog files exist.
This may lead to more discovery-related API calls (code search).
The main cause for hitting the rate limits are Locations refresh-related operations.
A reduction of total API calls to reduce the rate limit issues can only be achieved in
combination with
1. reducing the full refresh frequency (e.g., to monthly)
2. reducing the frequency of general Location refresh operations by the processing loop
For (2.), it is not possible to reduce the frequency only for Bitbucket Cloud-related
Locations though.
Further optimizations might be required to resolve the rate limit issue.
**Installation and Migration**
Please find more information at
https://backstage.io/docs/integrations/bitbucketCloud/discovery,
in particular the section about "_Installation with Events Support_".
In case of the new backend-plugin-api _(alpha)_ the module will take care of
registering itself at both.
+14
View File
@@ -0,0 +1,14 @@
---
'@backstage/plugin-events-backend-module-bitbucket-cloud': minor
---
Adds a new module `bitbucket-cloud` to plugin-events-backend.
The module adds a new event router `BitbucketCloudEventRouter`.
The event router will re-publish events received at topic `bitbucketCloud`
under a more specific topic depending on their `x-event-key` value
(e.g., `bitbucketCloud.repo:push`).
Please find more information at
https://github.com/backstage/backstage/tree/master/plugins/events-backend-module-bitbucket-cloud/README.md.
+8
View File
@@ -0,0 +1,8 @@
---
'@backstage/plugin-apache-airflow': patch
---
1. Added a new column in the table to quickly view the latest DAG runs, plus a link to it if you want to have a deeper look.
2. Table columns are togglable
3. Set hidden columns
4. Fixed bug with turning on/off the DAGs
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/cli': patch
---
Updated the `backstage-cli` so that the `list-deprecations` command is visible and also removed the "[EXPERIMENTAL]" tag.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder': patch
---
Updated to use `@rjsf` packages of version `^5.0.0-beta.12`
+7
View File
@@ -0,0 +1,7 @@
---
'@backstage/plugin-catalog-backend': patch
---
Improve processing error logging.
Adds `location` and `owner` to the logging meta if they are available.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/release-manifests': patch
---
Added a fallback that fetches manifests from `https://raw.githubusercontent.com` if `https://versions.backstage.io` is unavailable.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/version-bridge': patch
---
Debuggable/inspectable versioned values
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/cli': patch
---
Removed googleAnalyticsTrackingId configSchema.
+14
View File
@@ -0,0 +1,14 @@
---
'@backstage/plugin-events-backend-module-github': minor
---
Adds a new module `github` to plugin-events-backend.
The module adds a new event router `GithubEventRouter`.
The event router will re-publish events received at topic `github`
under a more specific topic depending on their `x-github-event` value
(e.g., `github.push`).
Please find more information at
https://github.com/backstage/backstage/tree/master/plugins/events-backend-module-github/README.md.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder': patch
---
Fixed tiny grammar error in EntityNamePicker. The first letter of the description is now capitalized.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-auth-backend': patch
---
Add support for custom JWT header name in GCP IAP auth.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder-backend': minor
---
Adds the ability to pass (an optional) array of strings that will be applied to the newly scaffolded repository as topic labels.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog-graph': patch
---
feat: Enable theme overrides for components in catalog-graph plugin
+14
View File
@@ -0,0 +1,14 @@
---
'@backstage/plugin-events-backend-module-gerrit': minor
---
Adds a new module `gerrit` to plugin-events-backend.
The module adds a new event router `GerritEventRouter`.
The event router will re-publish events received at topic `gerrit`
under a more specific topic depending on their `$.type` value
(e.g., `gerrit.change-merged`).
Please find more information at
https://github.com/backstage/backstage/tree/master/plugins/events-backend-module-gerrit/README.md.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/backend-common': patch
---
Change to using `@keyv/memcache` now that `keyv-memcache` is deprecated
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/cli': patch
---
The built-in Jest configuration now always uses the Jest environments that are bundled with the CLI by default. This avoids a situation where Jest potentially picks up an incompatible version of the environment package from a different dependency in the project.
+38
View File
@@ -0,0 +1,38 @@
---
'@backstage/create-app': patch
---
The [Analytics API](https://backstage.io/docs/plugins/analytics) is the recommended way to track usage in Backstage; an optionally installable [Google Analytics module](https://github.com/backstage/backstage/tree/master/plugins/analytics-module-ga#installation) has superseded the old app.googleAnalyticsTrackingId config and its corresponding script tags in packages/app/public/index.html.
For an existing installation where you want to remove the redundant app.googleAnalyticsTrackingId, you should make the following adjustment to `packages/app/public/index.html`:
```diff
<title><%= config.getString('app.title') %></title>
- <% if (config.has('app.googleAnalyticsTrackingId')) { %>
- <script
- async
- src="https://www.googletagmanager.com/gtag/js?id=<%= config.getString('app.googleAnalyticsTrackingId') %>"
- ></script>
- <script>
- window.dataLayer = window.dataLayer || [];
- function gtag() {
- dataLayer.push(arguments);
- }
- gtag('js', new Date());
- gtag(
- 'config',
- '<%= config.getString("app.googleAnalyticsTrackingId") %>',
- );
- </script>
- <% } %>
</head>
```
Additionally, you should make the following adjustment to `app-config.yaml`:
```diff
app:
title: Backstage Example App
baseUrl: http://localhost:3000
- googleAnalyticsTrackingId: # UA-000000-0
```
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-stack-overflow': patch
---
`StackOverflowSearchResultListItem` now accept optional rank property to be able to capture rank analytics data.
+12
View File
@@ -0,0 +1,12 @@
---
'@backstage/plugin-events-backend-module-aws-sqs': minor
---
Adds a new module `aws-sqs` for plugin-events-backend.
The module provides an event publisher `AwsSqsConsumingEventPublisher`
which will allow you to receive events from
an AWS SQS queue and will publish these to the used event broker.
Please find more information at
https://github.com/backstage/backstage/tree/master/plugins/events-backend-module-aws-sqs/README.md.
+14
View File
@@ -0,0 +1,14 @@
---
'@backstage/plugin-events-backend-module-azure': minor
---
Adds a new module `azure` to plugin-events-backend.
The module adds a new event router `AzureDevOpsEventRouter`.
The event router will re-publish events received at topic `azureDevOps`
under a more specific topic depending on their `$.eventType` value
(e.g., `azureDevOps.git.push`).
Please find more information at
https://github.com/backstage/backstage/tree/master/plugins/events-backend-module-azure/README.md.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder': patch
---
Fix `formData` not being present in the `next` version
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/plugin-code-coverage': patch
'@backstage/plugin-code-coverage-backend': patch
---
Adds installation instructions
+17
View File
@@ -0,0 +1,17 @@
---
'@backstage/plugin-events-backend': minor
'@backstage/plugin-events-node': minor
---
Support events received via HTTP endpoints at plugin-events-backend.
The plugin provides an event publisher `HttpPostIngressEventPublisher`
which will allow you to receive events via
HTTP endpoints `POST /api/events/http/{topic}`
and will publish these to the used event broker.
Using a provided custom validator, you can participate in the decision
which events are accepted, e.g. by verifying the source of the request.
Please find more information at
https://github.com/backstage/backstage/tree/master/plugins/events-backend/README.md.
+28 -3
View File
@@ -1,5 +1,5 @@
{
"mode": "pre",
"mode": "exit",
"tag": "next",
"initialVersions": {
"example-app": "0.2.76",
@@ -176,23 +176,31 @@
"@backstage/plugin-xcmetrics": "0.2.30",
"@backstage/plugin-azure-sites": "0.0.0",
"@backstage/plugin-azure-sites-backend": "0.0.0",
"@backstage/plugin-azure-sites-common": "0.0.0"
"@backstage/plugin-azure-sites-common": "0.0.0",
"@backstage/plugin-org-react": "0.0.0"
},
"changesets": [
"analyze-next-software-creation",
"analyze-software-creation",
"analyze-software-exploration",
"beige-gorillas-sip",
"big-islands-add",
"blue-items-shop",
"brave-eels-allow",
"bright-pillows-build",
"brown-days-pretend",
"calm-bottles-happen",
"calm-clouds-smoke",
"chatty-planets-flash",
"clean-feet-remain",
"clean-planets-rhyme",
"cool-suns-add",
"create-app-1667233110",
"dirty-birds-burn",
"dry-phones-type",
"dull-oranges-tap",
"eight-pears-attack",
"eighty-planets-train",
"eleven-pets-sneeze",
"few-books-remember",
"flat-items-perform",
@@ -201,29 +209,39 @@
"forty-jokes-lie",
"fresh-cooks-sing",
"fresh-weeks-share",
"funny-singers-serve",
"gorgeous-balloons-sit",
"gorgeous-onions-thank",
"gorgeous-queens-pull",
"great-colts-invite",
"great-planes-arrive",
"grumpy-clouds-drum",
"grumpy-pigs-reflect",
"happy-avocados-tan",
"heavy-elephants-nail",
"hungry-kiwis-scream",
"itchy-paws-protect",
"kind-emus-juggle",
"large-spies-doubt",
"lazy-planes-repair",
"little-bikes-eat",
"little-plums-look",
"lucky-cats-peel",
"lucky-cobras-sell",
"lucky-spoons-hide",
"mean-files-fly",
"metal-dogs-swim",
"metal-hairs-mix",
"moody-pots-end",
"nasty-crabs-share",
"orange-trees-peel",
"pink-snails-hammer",
"popular-ants-mix",
"popular-bulldogs-lie",
"popular-mails-wave",
"real-swans-repair",
"renovate-25512c2",
"renovate-3d08223",
"renovate-6fb5f1b",
"selfish-kiwis-matter",
"shaggy-birds-happen",
@@ -231,22 +249,29 @@
"sharp-goats-itch",
"shiny-beers-relax",
"short-balloons-work",
"silent-moles-chew",
"silly-meals-teach",
"sixty-islands-develop",
"sixty-pigs-shave",
"sixty-singers-push",
"spicy-parents-lick",
"spotty-dryers-explain",
"stale-dots-love",
"stupid-pens-occur",
"sweet-readers-compare",
"tame-ads-appear",
"tasty-colts-hug",
"tasty-scissors-tickle",
"ten-hats-tickle",
"ten-pens-draw",
"thirty-deers-float",
"three-houses-agree",
"three-poems-think",
"two-oranges-joke",
"two-timers-pump",
"two-yaks-wave",
"unlucky-buttons-poke",
"wet-cameras-call"
"wet-cameras-call",
"witty-carrots-live"
]
}
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog-backend-module-github': patch
---
- Make it possible to inject custom user and team transformers when configuring the `GithubOrgEntityProvider`
+9
View File
@@ -0,0 +1,9 @@
---
'@backstage/plugin-catalog-backend-module-azure': patch
'@backstage/plugin-catalog-backend-module-bitbucket': patch
'@backstage/plugin-catalog-backend-module-gerrit': patch
'@backstage/plugin-catalog-backend-module-github': patch
'@backstage/plugin-catalog-backend-module-gitlab': patch
---
Updated dependency `msw` to `^0.48.0` while moving it to be a dev dependency.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/backend-test-utils': patch
---
Updated dependency `msw` to `^0.48.0`.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-api-docs': patch
---
Updated dependency `@asyncapi/react-component` to `1.0.0-next.44`.
+14
View File
@@ -0,0 +1,14 @@
---
'@backstage/plugin-events-backend': minor
'@backstage/plugin-events-node': minor
'@backstage/plugin-events-backend-test-utils': minor
---
Adds a new backend plugin plugin-events-backend for managing events.
plugin-events-node exposes interfaces which can be used by modules.
plugin-events-backend-test-utils provides utilities which can be used while writing tests e.g. for modules.
Please find more information at
https://github.com/backstage/backstage/tree/master/plugins/events-backend/README.md.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-cost-insights': patch
---
Added support for displaying entity cost insights by implementing the new `getCatalogEntityDailyCost` that's part of the `CostInsightsApi`.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-techdocs': minor
---
Hide document description if not provided
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-bitbucket-cloud-common': patch
---
Add interfaces for Bitbucket Cloud (webhook) events.
+14
View File
@@ -0,0 +1,14 @@
---
'@backstage/plugin-events-backend-module-gitlab': minor
---
Adds a new module `gitlab` to plugin-events-backend.
The module adds a new event router `GitlabEventRouter`.
The event router will re-publish events received at topic `gitlab`
under a more specific topic depending on their `$.event_name` value
(e.g., `gitlab.push`).
Please find more information at
https://github.com/backstage/backstage/tree/master/plugins/events-backend-module-gitlab/README.md.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-tech-insights-backend': patch
---
Add Documentation on 404 Errors
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-org': patch
---
Add entity kind to the Ownership Cards. Fix the query parameters for the links of the Ownership Cards so that the catalog page actually selects the right entity kind.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-techdocs': patch
---
An analytics event matching the semantics of the `click` action is now captured when users click links within a TechDocs document.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-techdocs-react': patch
---
Analytics events captured within the `<TechDocsReaderPageProvider>` now include the conventional `entityRef` context value, associating those events with their corresponding entity.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder-backend': patch
---
Implement "Branch protection rules" support for "publish:github" action
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder': patch
---
Fix the return type for the `createNextScaffodlerFieldExtension` type as before it wasn't a component type for the extension
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/plugin-sonarqube': minor
---
Fix sonarqube annotation parsing. Add content page for Sonarqube.
Removed the deprecated `plugin` export; please use `sonarQubePlugin` instead.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-auth-backend': patch
---
Inject optional `CatalogApi` into auth-backend `createRouter` function. This will enable developers to use customized `CatalogApi` when creating the router.
+9
View File
@@ -36,6 +36,15 @@ yarn.lock @backstage/reviewers @backst
/plugins/code-coverage-backend @backstage/reviewers @alde @nissayeva
/plugins/cost-insights @backstage/reviewers @backstage/silver-lining
/plugins/cost-insights-* @backstage/reviewers @backstage/silver-lining
/plugins/events-backend @backstage/reviewers @pjungermann
/plugins/events-backend-module-aws-sqs @backstage/reviewers @pjungermann
/plugins/events-backend-module-azure @backstage/reviewers @pjungermann
/plugins/events-backend-module-bitbucket-cloud @backstage/reviewers @pjungermann
/plugins/events-backend-module-gerrit @backstage/reviewers @pjungermann
/plugins/events-backend-module-github @backstage/reviewers @pjungermann
/plugins/events-backend-module-gitlab @backstage/reviewers @pjungermann
/plugins/events-backend-test-utils @backstage/reviewers @pjungermann
/plugins/events-node @backstage/reviewers @pjungermann
/plugins/explore @backstage/reviewers @backstage/sda-se-reviewers
/plugins/explore-react @backstage/reviewers @backstage/sda-se-reviewers
/plugins/fossa @backstage/reviewers @backstage/sda-se-reviewers
+3
View File
@@ -234,6 +234,8 @@ onboarding
Onboarding
OpenShift
orgs
padding
paddings
pagerduty
pageview
parallelization
@@ -352,6 +354,7 @@ theia
thumbsup
todo
todos
togglable
tolerations
Tolerations
toolchain
+1 -1
View File
@@ -17,7 +17,7 @@ jobs:
for your contributions.
days-before-issue-stale: 60
days-before-issue-close: 7
exempt-issue-labels: pinned,security,plugin,after-vacations,rfc,will-fix
exempt-issue-labels: plugin,after-vacations,will-fix
stale-issue-label: stale
stale-pr-message: >
This PR has been automatically marked as stale because it has not had
+5 -1
View File
@@ -141,7 +141,7 @@ _You can do this by using the [Adopter form](https://info.backstage.spotify.com/
| [Kambi AB](https://www.kambi.com) | [Martin Norum](mailto:martin.norum@kambi.com) | We want to kick ass at speed, so we're currently building up a catalog of our existing software, and looking into how Backstage can support us in our journey towards autonomous product teams. Both to improve speed to market and operational awareness. |
| [ANZ](https://www.anz.com.au/personal/) | [Elliot Jackson](mailto:elliot.jackson@anz.com) | Catalog, tech docs and automation |
| [Genie Solutions](https://www.geniesolutionssoftware.com.au) | [Zainab Bagasrawala](mailto:zainabbagasrawala@geniesolutions.com.au) | Developer Portal to track our projects, documentation, observability tools and more |
| [MadeiraMadeira](https://www.madeiramadeira.com.br) | [Paulo Eduardo Peixoto](mailto:paulo.peixoto@madeiramadeira.com.br) | As a support tool for developers, following the principles of "Developer Experience". In order to make the developer's day to day more practical, efficient and, why not, happy. |
| [MadeiraMadeira](https://www.madeiramadeira.com.br) | [DX Team](mailto:dxteam@madeiramadeira.com.br) | As a support tool for developers, following the principles of "Developer Experience". In order to make the developer's day to day more practical, efficient and, why not, happy. |
| [Sonatype](https://www.sonatype.com) | [Srikar Ananthula](mailto:sananthula@sonatype.com) | Centralize services used internally with many plugins |
| [CVS Health](https://www.cvshealth.com) | [Ari Ben-Elazar](mailto:abenelazar@gmail.com) | Cataloging and documenting our service offerings to offer our internal developers a better operational journey |
| [Yatra.com](https://www.yatra.com) | [Matiur Rahman Maitur](mailto:arifrahman4u@gmail.com) | Easy to find out Project details, ownership, dependent services, Documentation, it is very useful for developer. |
@@ -217,3 +217,7 @@ _You can do this by using the [Adopter form](https://info.backstage.spotify.com/
| [StatusNeo](https://statusneo.com/) | [Karan Nangru](mailto:nangru@statusneo.com), [@NishkarshRaj](https://github.com/NishkarshRaj), and [Gaurav Sarien](mailto:gaurav.sarien@statusneo.com) | Harnessing the power of central catalog inventory and self-serving software templates |
| [Alaska Airlines](https://alaskaair.com) | [@swerdick](https://github.com/swerdick) | Backstage is the developer portal for our 'software delivery platform'. Consolidating developer tools to one place, and providing automation to make it easy for developers to create and deploy applications to Kubernetes
| [Loft](https://loft.com.br) | [Squad DevTools](mailto:squad_devtools@loft.com.br) | We're using Backstage to give visibility and promote ownership of all our applications, resources and tools. Now moving to use it as a Developer Portal to create applications, AWS resources etc. |
| [Raízen](https://www.raizen.com) | [Melquisedque Bernardes Pereira](https://github.com/rayleshh) and [Paulo Eduardo Peixoto](https://github.com/padupe) | Backstage helps us to organize and make available, in a simple and direct way, all the infrastructure for new projects. In addition, it has become a great support tool for our developers. |
| [Trifork](https://trifork.com) | [Casper Thygesen](https://github.com/cthtrifork) | We're using Backstage as part of our dataplatform product. It integrates with the infrastructure components and is the developer portal for all the platform users. |
| [MSCI](http://msci.com) | [Stephen Burrows](mailto:stephen.burrows@msci.com) | Developer portal, service catalog, documentation and tooling
| [ESW](https://esw.com) | [Alisson Fabiano](https://github.com/afabianoo), [Bruno Quintella](https://github.com/quintelab) and [Guilherme Oenning](https://github.com/goenning) | Backstage is our one stop shop to find everything related to all our services, such as ownership, dependencies, production status, tech health and much more.
-1
View File
@@ -1,7 +1,6 @@
app:
title: Backstage Example App
baseUrl: http://localhost:3000
googleAnalyticsTrackingId: # UA-000000-0
#datadogRum:
# clientToken: '123456789'
# applicationId: qwerty
@@ -13,7 +13,6 @@ metadata:
data:
APP_CONFIG_app_baseUrl: {{ .Values.appConfig.app.baseUrl | quote | quote }}
APP_CONFIG_app_title: {{ .Values.appConfig.app.title | quote | quote }}
APP_CONFIG_app_googleAnalyticsTrackingId: {{ .Values.appConfig.app.googleAnalyticsTrackingId | quote | quote }}
APP_CONFIG_backend_baseUrl: {{ .Values.appConfig.backend.baseUrl | quote | quote }}
APP_CONFIG_backend_cors_origin: {{ .Values.appConfig.backend.cors.origin | quote | quote }}
APP_CONFIG_techdocs_storageUrl: {{ .Values.appConfig.techdocs.storageUrl | quote | quote }}
-1
View File
@@ -92,7 +92,6 @@ appConfig:
app:
baseUrl: https://demo.example.com
title: Backstage
googleAnalyticsTrackingId:
backend:
baseUrl: https://demo.example.com
listen:
+1 -1
View File
@@ -49,7 +49,7 @@ the user to initiate a login. This login request is done to the `/start`
endpoint which is handled by the `start` method.
The `start` method re-directs to the external auth provider who authenticates
the request and re-directs the request to the `/frame/handler` endpoint, which
the request and re-directs the request to the `/handler/frame` endpoint, which
is handled by the `frameHandler` method.
The `frameHandler` returns an HTML response, containing a script that does a
+1
View File
@@ -26,6 +26,7 @@ auth:
providers:
gcp-iap:
audience: '/projects/<project number>/global/backendServices/<backend service id>'
jwtHeader: x-custom-header # Optional: Only if you are using a custom header for the IAP JWT
```
You can find the project number and service ID in the Google Cloud Console.
+12 -5
View File
@@ -46,11 +46,18 @@ The Microsoft provider is a structure with three configuration keys:
- `clientSecret`: Secret, found on App Registration > Certificates & secrets
- `tenantId`: Directory (tenant) ID, found on App Registration > Overview
In order to finish signing a user in from Azure, the Backstage backend must
fetch their information from graph.microsoft.com (as seen in [this source
code](https://github.com/seanfisher/passport-microsoft/blob/0456aa9bce05579c18e77f51330176eb26373658/lib/strategy.js#L93-L95)),
so ensure that your Backstage backend has connectivity to this host.
Otherwise users may see an `Authentication failed, failed to fetch user profile` error when they attempt to log in.
## Outbound Network Access
If your environment has restrictions on outgoing access (e.g. through
firewall rules), make sure your Backstage backend has access to the following
hosts:
- `login.microsoftonline.com`, to get and exchange authorization codes and access
tokens
- `graph.microsoft.com`, to fetch user profile information (as seen
in [this source
code](https://github.com/seanfisher/passport-microsoft/blob/0456aa9bce05579c18e77f51330176eb26373658/lib/strategy.js#L93-L95)).
If this host is unreachable, users may see an `Authentication failed, failed to fetch user profile` error when they attempt to log in.
## Adding the provider to the Backstage frontend
+3
View File
@@ -108,10 +108,13 @@ root of the repo to speed up the build by reducing build context size:
```text
.git
.yarn/cache
.yarn/install-state.gz
node_modules
packages/*/src
packages/*/node_modules
plugins
*.local.yaml
```
With the project built and the `.dockerignore` and `Dockerfile` in place, we are
+108
View File
@@ -0,0 +1,108 @@
---
id: component-design-guidelines
title: Component Design Guidelines
description: Documentation on Design
---
Be it a new component contribution, or plugin specific components, you'll want
to follow these guidelines. We'll cover the three main subjects that define the
general look and feel of your components, all of which build on top of the
Material-UI theme features:
- Layout
- Color palette
- Typography
## 🏗️ Layout
Layout refers to how you organize or stack content. Whenever possible, we want
to use Backstage's components (check the [Storybook][1] for a list and demo)
first, and otherwise fall back to Material-UI components (check the [MUI docs][2]).
If none of these fit your layout needs, then you can build your own components.
However, using HTML+CSS directly is not recommended; it's better to use MUI
layout components to make your layout theme aware, meaning if someone changes
the theme, your layout would react to those changes without requiring updates
to your code.
Specifically you want to look at these components that make use of the
`theme.spacing()` function for margins, paddings and positions, as well as
color palette and typography:
- [Container][3] mostly at page level
- [Box][4] like a div that can be customized a lot
- [Grid][5] for flexible grid layouts
- [Paper][6] The base of a card, like it's background & padding on the borders
- [Card][7] Card with support for title, description, buttons, images...
## Color palette
If you're using an existing component and want to tweak the colors it uses in
general in the whole application, you can use a [Custom Theme][10] to override
specific styles for that component, that includes paddings, margins and colors.
However when making a component from scratch you'll need to reference the theme
as much as possible, make sure to use the theme's color palette. Most Backstage
components and all MUI components should use the theme's color palette by default,
so unless you need explicit control on the color of a component (say when the
component was designed to use the primary color but you want to use the
secondary color instead), then the easiest way to access the color palette is
to [Override the Component Styles][11] as suggested by Backstage.
It's not a very common use case to override a theme color in a MUI component
but let's say you have a custom Sidebar component with a Paper component that
highlights its content with a different color for a side menu or something
(usually you use the elevation, but maybe the designer wanted a colorful app).
You can use the theme like this:
```tsx
import { makeStyles, Paper } from '@material-ui/core';
const useStyles = makeStyles((theme: Theme) => ({
sidebarPaper: {
backgroundColor: theme.palette.primary.main,
color: theme.palette.primary.contrastText,
},
}));
export function Sidebar({ children }) {
const { sidebarPaper } = useStyles();
return <Paper className={sidebarPaper}>{children}</Paper>;
}
```
Here is a link to the [Default Palette values][8] you can use, the tokens will
be the same, what changes are the colors associated with those depending on your
app theme color palette, there's also a [Default Theme Explorer][12] to look
which tokens you can use as reference from the compiled theme.
## Typography
Most of the time the components from MUI will use the `<Typography />` component
which will use the theme's typography properties like font family, size, weight
and appropriate color from the palette for the context of that component. This applies for example to
buttons that use white font color for contained buttons, or the respective color
passed on via props when not outlined for proper contrast (buttons in dark
theme adapt properly by using a dark font instead of white).
However for those cases where the parent component of the content doesn't handle
the text, like when the parent component is a layout one, you use typography
component instead of the HTML counterparts, usually used for titles and
paragraphs but it is valid for any type of text.
Check the [Typography docs][9] for information on how to install, use,
customize semantic elements and specially the recommendations about
accessibility.
[1]: http://backstage.io/storybook
[2]: https://v4.mui.com/getting-started/supported-components/
[3]: https://v4.mui.com/components/container/
[4]: https://v4.mui.com/components/box/
[5]: https://v4.mui.com/components/grid/
[6]: https://v4.mui.com/components/paper/
[7]: https://v4.mui.com/components/cards/
[8]: https://v4.mui.com/customization/palette/#default-values
[9]: https://v4.mui.com/customization/typography/
[10]: https://backstage.io/docs/getting-started/app-custom-theme
[11]: https://backstage.io/docs/getting-started/app-custom-theme#overriding-backstage-and-material-ui-components-styles
[12]: https://v4.mui.com/customization/default-theme/#explore
+1 -1
View File
@@ -102,7 +102,7 @@ If either existing
don't work for your use-case, it is possible to implement a custom
[KubernetesClustersSupplier](https://backstage.io/docs/reference/plugin-kubernetes-backend.kubernetesclusterssupplier).
Change the following in `packages/backend/src/plugin/kubernetes.ts`:
Change the following in `packages/backend/src/plugins/kubernetes.ts`:
```diff
-import { KubernetesBuilder } from '@backstage/plugin-kubernetes-backend';
+12 -1
View File
@@ -101,7 +101,7 @@ To grant the managed identity the same permissions as mentioned in _App Registra
## Filtering imported Users and Groups
By default, the plugin will import all users and groups from your directory.
This can be customized through filters and search queries.
This can be customized through [filters](https://learn.microsoft.com/en-us/graph/filter-query-parameter) and [search](https://learn.microsoft.com/en-us/graph/search-query-parameter) queries.
### Groups
@@ -228,6 +228,17 @@ export async function myOrganizationTransformer(
## Troubleshooting
### No data
First check your logs for the message `Reading msgraph users and groups`.
If you don't see this, check you've registered the provider, and that the schedule is valid
If you see a log entry `Read 0 msgraph users and 0 msgraph groups`, check your search and filter arguments.
If you see the start message (`Reading msgraph users and groups`) but no end message (`Read X msgraph users and Y msgraph groups`), then it is likely the job is taking a long time due to a large volume of data.
The default behavior is to import all users and groups, which is often more data than needed.
Try importing a smaller set of data (e.g. `filter: displayName eq 'John Smith'`).
### Authentication / Token Errors
See [Troubleshooting Azure Identity Authentication Issues](https://aka.ms/azsdk/js/identity/troubleshoot)
+60 -6
View File
@@ -24,10 +24,12 @@ package.
yarn add --cwd packages/backend @backstage/plugin-catalog-backend-module-bitbucket-cloud
```
### Installation without Events Support
And then add the entity provider to your catalog builder:
```diff
// In packages/backend/src/plugins/catalog.ts
// packages/backend/src/plugins/catalog.ts
+ import { BitbucketCloudEntityProvider } from '@backstage/plugin-catalog-backend-module-bitbucket-cloud';
export default async function createPlugin(
@@ -37,11 +39,7 @@ And then add the entity provider to your catalog builder:
+ builder.addEntityProvider(
+ BitbucketCloudEntityProvider.fromConfig(env.config, {
+ logger: env.logger,
+ // optional: alternatively, configure via app-config.yaml
+ schedule: env.scheduler.createScheduledTaskRunner({
+ frequency: { minutes: 30 },
+ timeout: { minutes: 3 },
+ }),
+ scheduler: env.scheduler,
+ }),
+ );
@@ -49,6 +47,62 @@ And then add the entity provider to your catalog builder:
}
```
Alternatively to the config-based schedule, you can use
```diff
- scheduler: env.scheduler,
+ schedule: env.scheduler.createScheduledTaskRunner({
+ frequency: { minutes: 30 },
+ timeout: { minutes: 3 },
+ }),
```
### Installation with Events Support
Please follow the installation instructions at
- https://github.com/backstage/backstage/tree/master/plugins/events-backend/README.md
- https://github.com/backstage/backstage/tree/master/plugins/events-backend-module-bitbucket-cloud/README.md
Additionally, you need to decide how you want to receive events from external sources like
- [via HTTP endpoint](https://github.com/backstage/backstage/tree/master/plugins/events-backend/README.md)
- [via an AWS SQS queue](https://github.com/backstage/backstage/tree/master/plugins/events-backend-module-aws-sqs/README.md)
Set up your provider
```diff
// packages/backend/src/plugins/catalogEventBasedProviders.ts
+import { CatalogClient } from '@backstage/catalog-client';
+import { BitbucketCloudEntityProvider } from '@backstage/plugin-catalog-backend-module-bitbucket-cloud';
import { EntityProvider } from '@backstage/plugin-catalog-node';
import { EventSubscriber } from '@backstage/plugin-events-node';
import { PluginEnvironment } from '../types';
export default async function createCatalogEventBasedProviders(
- _: PluginEnvironment,
+ env: PluginEnvironment,
): Promise<Array<EntityProvider & EventSubscriber>> {
const providers: Array<
(EntityProvider & EventSubscriber) | Array<EntityProvider & EventSubscriber>
> = [];
- // add your event-based entity providers here
+ providers.push(
+ BitbucketCloudEntityProvider.fromConfig(env.config, {
+ catalogApi: new CatalogClient({ discoveryApi: env.discovery }),
+ logger: env.logger,
+ scheduler: env.scheduler,
+ tokenManager: env.tokenManager,
+ }),
+ );
return providers.flat();
}
```
**Attention:**
`catalogApi` and `tokenManager` are required at this variant
compared to the one without events support.
## Configuration
To use the entity provider, you'll need a [Bitbucket Cloud integration set up](locations.md).
+60
View File
@@ -97,6 +97,66 @@ that must be approved first before the changes are applied.**
![email](../../assets/integrations/github/email.png)
### Custom Transformers
You can inject your own transformation logic to help map from GH API responses
into backstage entities. You can do this on the user and team requests to
enable you to do further processing or updates to the entities.
To enable this you pass a function into the `GitHubOrgEntityProvider`. You can
pass a `UserTransformer`, `TeamTransformer` or both. The function is invoked
for each item (user or team) that is returned from the API. You can either
return an Entity (User or Group) or `undefined` if you do not want to import
that item.
There is also a `defaultUserTransformer` and `defaultOrganizationTeamTransformer`.
You could use these and simply decorate the response from the default
transformation if you only need to change a few properties.
### Resolving GitHub users via organization email
When you authenticate users you should resolve them to an entity within the
catalog. Often the authentication you use could be a corporate SSO system that
provides you with email as a key. To enable you to find and resolve GitHub users
it's useful to also import the private domain verified emails into the User
entity in backstage.
The integration attempts to return `organizationVerifiedDomainEmails` from the
GitHub API and makes this available as part of the object passed to
`UserTransformer`. The GitHub API will only return emails that use a domain
that's a verified domain for your GitHub Org. It also relies on the user having
configured such an email in their own account. The API will only return these
values when using GitHub App authentication and with the correct app permission
allowing access to emails.
You can decorate the `defaultUserTransformer` to replace the org email in the
returned identity.
```typescript
async (user, ctx): Promise<UserEntity | undefined> => {
const entity = await defaultUserTransformer(user, ctx);
if (entity && user.organizationVerifiedDomainEmails) {
entity.spec.profile!.email = user.organizationVerifiedDomainEmails[0] || '';
}
return entity;
},
```
Once you have imported the emails you can resolve users in your sign-in in
resolver using the catalog entity search via email
```typescript
// packages/backend/src/plugins/auth.ts
ctx.signInWithCatalogUser({
filter: {
kind: ['User'],
'spec.profile.email': email as string,
},
});
```
## Using a Processor instead of a Provider
An alternative to using the Provider for ingesting organizational entities is to
File diff suppressed because it is too large Load Diff
+10
View File
@@ -0,0 +1,10 @@
---
title: Announcements
author: K-Phoen
authorUrl: https://github.com/K-Phoen
category: Discovery
description: Write and share announcements within Backstage.
documentation: https://github.com/K-Phoen/backstage-plugin-announcements/
iconUrl: img/plugin-announcements-logo.png
npmPackageName: '@k-phoen/backstage-plugin-announcements'
addedDate: '2022-11-09'
+24 -1
View File
@@ -149,7 +149,7 @@ const Background = props => {
</Block.Container>
</Block>
<Block className="stripe-top bg-black">
<Block className="stripe-bottom bg-black-grey">
<Block.Container wrapped style={{ justifyContent: 'flex-start' }}>
<Block.TextBox wide>
<Block.Subtitle>Community initiatives</Block.Subtitle>
@@ -183,6 +183,29 @@ const Background = props => {
</Block.Container>
</Block>
<Block className="stripe-top stripe-bottom">
<Block.Container style={{ flexFlow: 'column nowrap' }}>
<Block.TextBox wide>
<Block.Subtitle>Trainings and Certifications</Block.Subtitle>
</Block.TextBox>
<Block.TextBox style={{ flexShrink: '1', alignSelf: 'stretch' }}>
<BulletLine />
<Block.SmallTitle small>
Introduction to Backstage: Developer Portals Made Easy (LFS142x)
</Block.SmallTitle>
<Block.Paragraph>
This is a course produced and curated by the Linux Foundation.
This course introduces you to Backstage and how to get started
with the project.
</Block.Paragraph>
<Block.LinkButton href="https://training.linuxfoundation.org/training/introduction-to-backstage-developer-portals-made-easy-lfs142x/">
Learn more
</Block.LinkButton>
</Block.TextBox>
</Block.Container>
</Block>
<Block className="stripe-top bg-black-grey">
<Block.Container wrapped style={{ justifyContent: 'flex-start' }}>
<Block.TextBox wide>
-9
View File
@@ -31,15 +31,6 @@ class Index extends React.Component {
!
</div>
</Banner.Dismissable>
<Banner.Dismissable storageKey="2022-09-01-backstagecon-cta">
<div>
🤩 Join us for the first{' '}
<a href="https://events.linuxfoundation.org/backstagecon-north-america/">
BackstageCon
</a>{' '}
on October 24, 2022!
</div>
</Banner.Dismissable>
</Banner.Container>
<Block small className="bg-black-grey stripe-bottom">
+1
View File
@@ -316,6 +316,7 @@
],
"Designing for Backstage": [
"dls/design",
"dls/component-design-guidelines",
"dls/contributing-to-storybook",
"dls/figma"
],
Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

+1
View File
@@ -178,6 +178,7 @@ nav:
- Heroku: 'deployment/heroku.md'
- Designing for Backstage:
- Design: 'dls/design.md'
- Component Design Guidelines: 'dls/component-design-guidelines.md'
- Contributing to Storybook: 'dls/contributing-to-storybook.md'
- Figma: 'dls/figma.md'
- API Reference:
+1 -1
View File
@@ -44,7 +44,7 @@
"@types/react": "^17",
"@types/react-dom": "^17"
},
"version": "1.8.0-next.1",
"version": "1.8.0-next.2",
"dependencies": {
"@backstage/errors": "workspace:^",
"@manypkg/get-packages": "^1.1.3",
+11
View File
@@ -1,5 +1,16 @@
# @backstage/app-defaults
## 1.0.8-next.1
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.12.0-next.1
- @backstage/core-app-api@1.2.0-next.0
- @backstage/core-plugin-api@1.1.0-next.0
- @backstage/theme@0.2.16
- @backstage/plugin-permission-react@0.4.7-next.0
## 1.0.8-next.0
### 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.0.8-next.0",
"version": "1.0.8-next.1",
"publishConfig": {
"access": "public",
"main": "dist/index.esm.js",
+63
View File
@@ -1,5 +1,68 @@
# example-app
## 0.2.77-next.2
### Patch Changes
- Updated dependencies
- @backstage/plugin-scaffolder@1.8.0-next.1
- @backstage/plugin-cost-insights@0.12.0-next.1
- @backstage/plugin-techdocs@1.4.0-next.2
- @backstage/plugin-explore@0.3.42-next.1
- @backstage/plugin-github-actions@0.5.11-next.1
- @backstage/cli@0.21.0-next.1
- @backstage/plugin-catalog-graph@0.2.23-next.1
- @backstage/core-components@0.12.0-next.1
- @backstage/plugin-code-coverage@0.2.4-next.1
- @backstage/plugin-org@0.6.0-next.1
- @backstage/plugin-kubernetes@0.7.4-next.1
- @backstage/app-defaults@1.0.8-next.1
- @backstage/catalog-model@1.1.3-next.0
- @backstage/config@1.0.4-next.0
- @backstage/core-app-api@1.2.0-next.0
- @backstage/core-plugin-api@1.1.0-next.0
- @backstage/integration-react@1.1.6-next.1
- @backstage/theme@0.2.16
- @backstage/plugin-airbrake@0.3.11-next.1
- @backstage/plugin-apache-airflow@0.2.4-next.1
- @backstage/plugin-api-docs@0.8.11-next.1
- @backstage/plugin-azure-devops@0.2.2-next.1
- @backstage/plugin-azure-sites@0.1.0-next.1
- @backstage/plugin-badges@0.2.35-next.1
- @backstage/plugin-catalog-common@1.0.8-next.0
- @backstage/plugin-catalog-import@0.9.1-next.1
- @backstage/plugin-catalog-react@1.2.1-next.1
- @backstage/plugin-circleci@0.3.11-next.1
- @backstage/plugin-cloudbuild@0.3.11-next.1
- @backstage/plugin-dynatrace@1.0.1-next.1
- @backstage/plugin-gcalendar@0.3.7-next.1
- @backstage/plugin-gcp-projects@0.3.30-next.1
- @backstage/plugin-gocd@0.1.17-next.1
- @backstage/plugin-graphiql@0.2.43-next.1
- @backstage/plugin-home@0.4.27-next.1
- @backstage/plugin-jenkins@0.7.10-next.1
- @backstage/plugin-kafka@0.3.11-next.1
- @backstage/plugin-lighthouse@0.3.11-next.1
- @backstage/plugin-newrelic@0.3.29-next.1
- @backstage/plugin-newrelic-dashboard@0.2.4-next.1
- @backstage/plugin-pagerduty@0.5.4-next.1
- @backstage/plugin-permission-react@0.4.7-next.0
- @backstage/plugin-playlist@0.1.2-next.2
- @backstage/plugin-rollbar@0.4.11-next.1
- @backstage/plugin-search@1.0.4-next.1
- @backstage/plugin-search-common@1.1.1-next.0
- @backstage/plugin-search-react@1.2.1-next.1
- @backstage/plugin-sentry@0.4.4-next.1
- @backstage/plugin-shortcuts@0.3.3-next.1
- @backstage/plugin-stack-overflow@0.1.7-next.1
- @backstage/plugin-tech-insights@0.3.3-next.1
- @backstage/plugin-tech-radar@0.5.18-next.1
- @backstage/plugin-techdocs-module-addons-contrib@1.0.6-next.1
- @backstage/plugin-techdocs-react@1.0.6-next.1
- @backstage/plugin-todo@0.2.13-next.1
- @backstage/plugin-user-settings@0.5.1-next.1
- @internal/plugin-catalog-customized@0.0.4-next.1
## 0.2.77-next.1
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "example-app",
"version": "0.2.77-next.1",
"version": "0.2.77-next.2",
"private": true,
"backstage": {
"role": "frontend"
+1 -18
View File
@@ -44,24 +44,7 @@
/>
<title><%= config.getString('app.title') %></title>
<% if (config.has('app.googleAnalyticsTrackingId')) { %>
<script
async
src="https://www.googletagmanager.com/gtag/js?id=<%= config.getString('app.googleAnalyticsTrackingId') %>"
></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag('js', new Date());
gtag(
'config',
'<%= config.getString("app.googleAnalyticsTrackingId") %>',
);
</script>
<% } %> <% if (config.has('app.datadogRum')) { %>
<% if (config.has('app.datadogRum')) { %>
<script>
(function (h, o, u, n, d) {
h = h[d] = h[d] || {
@@ -153,6 +153,7 @@ import {
TextSize,
ReportIssue,
} from '@backstage/plugin-techdocs-module-addons-contrib';
import { EntityCostInsightsContent } from '@backstage/plugin-cost-insights';
const customEntityFilterKind = ['Component', 'API', 'System'];
@@ -489,6 +490,10 @@ const serviceEntityPage = (
<EntityTodoContent />
</EntityLayout.Route>
<EntityLayout.Route path="/costs" title="Costs">
<EntityCostInsightsContent />
</EntityLayout.Route>
<EntityLayout.Route
path="/dynatrace"
title="Dynatrace"
@@ -14,10 +14,12 @@
* limitations under the License.
*/
import React from 'react';
import type { FieldValidation } from '@rjsf/core';
import type { FieldValidation } from '@rjsf/utils';
import {
createNextScaffolderFieldExtension,
createScaffolderFieldExtension,
FieldExtensionComponentProps,
NextFieldExtensionComponentProps,
scaffolderPlugin,
} from '@backstage/plugin-scaffolder';
@@ -64,7 +66,7 @@ export const LowerCaseValuePickerFieldExtension = scaffolderPlugin.provide(
);
const MockDelayComponent = (
props: FieldExtensionComponentProps<{ test?: string }>,
props: NextFieldExtensionComponentProps<{ test?: string }>,
) => {
const { onChange, formData, rawErrors } = props;
return (
@@ -80,7 +82,7 @@ const MockDelayComponent = (
};
export const DelayingComponentFieldExtension = scaffolderPlugin.provide(
createScaffolderFieldExtension({
createNextScaffolderFieldExtension({
name: 'DelayingComponent',
component: MockDelayComponent,
validation: async (
+11
View File
@@ -1,5 +1,16 @@
# @backstage/backend-app-api
## 0.2.3-next.1
### Patch Changes
- Updated dependencies
- @backstage/backend-common@0.16.0-next.1
- @backstage/backend-plugin-api@0.1.4-next.1
- @backstage/backend-tasks@0.3.7-next.1
- @backstage/plugin-permission-node@0.7.1-next.1
- @backstage/errors@1.1.3-next.0
## 0.2.3-next.0
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/backend-app-api",
"description": "Core API used by Backstage backend apps",
"version": "0.2.3-next.0",
"version": "0.2.3-next.1",
"main": "src/index.ts",
"types": "src/index.ts",
"publishConfig": {
+14
View File
@@ -1,5 +1,19 @@
# @backstage/backend-common
## 0.16.0-next.1
### Patch Changes
- 88f99b8b13: Bumped `tar` dependency to `^6.1.12` in order to ensure Node.js v18 compatibility.
- cfb30b700c: Pin `@kubernetes/client-node` version to `0.17.0`.
- Updated dependencies
- @backstage/cli-common@0.1.10
- @backstage/config@1.0.4-next.0
- @backstage/config-loader@1.1.6-next.0
- @backstage/errors@1.1.3-next.0
- @backstage/integration@1.4.0-next.0
- @backstage/types@1.0.1-next.0
## 0.16.0-next.0
### Minor Changes
+5 -5
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/backend-common",
"description": "Common functionality library for Backstage backends",
"version": "0.16.0-next.0",
"version": "0.16.0-next.1",
"main": "src/index.ts",
"types": "src/index.ts",
"publishConfig": {
@@ -41,7 +41,8 @@
"@backstage/integration": "workspace:^",
"@backstage/types": "workspace:^",
"@google-cloud/storage": "^6.0.0",
"@keyv/redis": "^2.2.3",
"@keyv/memcache": "^1.3.5",
"@keyv/redis": "^2.5.3",
"@kubernetes/client-node": "0.17.0",
"@manypkg/get-packages": "^1.1.3",
"@octokit/rest": "^19.0.3",
@@ -64,8 +65,7 @@
"helmet": "^6.0.0",
"isomorphic-git": "^1.8.0",
"jose": "^4.6.0",
"keyv": "^4.0.3",
"keyv-memcache": "^1.2.5",
"keyv": "^4.5.2",
"knex": "^2.0.0",
"lodash": "^4.17.21",
"logform": "^2.3.2",
@@ -117,7 +117,7 @@
"better-sqlite3": "^7.5.0",
"http-errors": "^2.0.0",
"mock-fs": "^5.1.0",
"msw": "^0.47.0",
"msw": "^0.48.0",
"mysql2": "^2.2.5",
"recursive-readdir": "^2.2.2",
"supertest": "^6.1.3"
+4 -5
View File
@@ -16,8 +16,7 @@
import { ConfigReader } from '@backstage/config';
import Keyv from 'keyv';
/* @ts-expect-error */
import KeyvMemcache from 'keyv-memcache';
import KeyvMemcache from '@keyv/memcache';
import KeyvRedis from '@keyv/redis';
import { DefaultCacheClient } from './CacheClient';
import { CacheManager } from './CacheManager';
@@ -25,8 +24,8 @@ import { NoStore } from './NoStore';
jest.createMockFromModule('keyv');
jest.mock('keyv');
jest.createMockFromModule('keyv-memcache');
jest.mock('keyv-memcache');
jest.createMockFromModule('@keyv/memcache');
jest.mock('@keyv/memcache');
jest.createMockFromModule('@keyv/redis');
jest.mock('@keyv/redis');
jest.mock('./CacheClient', () => {
@@ -187,7 +186,7 @@ describe('CacheManager', () => {
ttl: expectedTtl,
});
expect(mockCacheCalls[0][0].store).toBeInstanceOf(KeyvMemcache);
const memcache = KeyvMemcache as jest.Mock;
const memcache = KeyvMemcache as unknown as jest.Mock;
const mockMemcacheCalls = memcache.mock.calls.splice(-1);
expect(mockMemcacheCalls[0][0]).toEqual(expectedHost);
});
+1 -2
View File
@@ -16,8 +16,7 @@
import { Config } from '@backstage/config';
import Keyv from 'keyv';
// @ts-expect-error
import KeyvMemcache from 'keyv-memcache';
import KeyvMemcache from '@keyv/memcache';
import KeyvRedis from '@keyv/redis';
import { Logger } from 'winston';
import { getRootLogger } from '../logging';
+8
View File
@@ -1,5 +1,13 @@
# @backstage/backend-defaults
## 0.1.3-next.1
### Patch Changes
- Updated dependencies
- @backstage/backend-app-api@0.2.3-next.1
- @backstage/backend-plugin-api@0.1.4-next.1
## 0.1.3-next.0
### 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.3-next.0",
"version": "0.1.3-next.1",
"main": "src/index.ts",
"types": "src/index.ts",
"publishConfig": {
+10
View File
@@ -1,5 +1,15 @@
# example-backend-next
## 0.0.5-next.2
### Patch Changes
- Updated dependencies
- @backstage/plugin-scaffolder-backend@1.8.0-next.2
- @backstage/plugin-app-backend@0.3.38-next.1
- @backstage/plugin-catalog-backend@1.5.1-next.1
- @backstage/backend-defaults@0.1.3-next.1
## 0.0.5-next.1
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "example-backend-next",
"version": "0.0.5-next.1",
"version": "0.0.5-next.2",
"main": "dist/index.cjs.js",
"types": "src/index.ts",
"license": "Apache-2.0",
+10
View File
@@ -1,5 +1,15 @@
# @backstage/backend-plugin-api
## 0.1.4-next.1
### Patch Changes
- Updated dependencies
- @backstage/backend-common@0.16.0-next.1
- @backstage/backend-tasks@0.3.7-next.1
- @backstage/config@1.0.4-next.0
- @backstage/plugin-permission-common@0.7.1-next.0
## 0.1.4-next.0
### 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.1.4-next.0",
"version": "0.1.4-next.1",
"main": "src/index.ts",
"types": "src/index.ts",
"publishConfig": {
+10
View File
@@ -1,5 +1,15 @@
# @backstage/backend-tasks
## 0.3.7-next.1
### Patch Changes
- Updated dependencies
- @backstage/backend-common@0.16.0-next.1
- @backstage/config@1.0.4-next.0
- @backstage/errors@1.1.3-next.0
- @backstage/types@1.0.1-next.0
## 0.3.7-next.0
### 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.3.7-next.0",
"version": "0.3.7-next.1",
"main": "src/index.ts",
"types": "src/index.ts",
"publishConfig": {
+11
View File
@@ -1,5 +1,16 @@
# @backstage/backend-test-utils
## 0.1.30-next.1
### Patch Changes
- Updated dependencies
- @backstage/backend-common@0.16.0-next.1
- @backstage/cli@0.21.0-next.1
- @backstage/backend-app-api@0.2.3-next.1
- @backstage/backend-plugin-api@0.1.4-next.1
- @backstage/config@1.0.4-next.0
## 0.1.30-next.0
### Patch Changes
+2 -2
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/backend-test-utils",
"description": "Test helpers library for Backstage backends",
"version": "0.1.30-next.0",
"version": "0.1.30-next.1",
"main": "src/index.ts",
"types": "src/index.ts",
"publishConfig": {
@@ -41,7 +41,7 @@
"@backstage/config": "workspace:^",
"better-sqlite3": "^7.5.0",
"knex": "^2.0.0",
"msw": "^0.47.0",
"msw": "^0.48.0",
"mysql2": "^2.2.5",
"pg": "^8.3.0",
"testcontainers": "^8.1.2",
+43
View File
@@ -1,5 +1,48 @@
# example-backend
## 0.2.77-next.2
### Patch Changes
- Updated dependencies
- @backstage/plugin-auth-backend@0.17.1-next.1
- @backstage/backend-common@0.16.0-next.1
- @backstage/plugin-scaffolder-backend@1.8.0-next.2
- @backstage/plugin-code-coverage-backend@0.2.4-next.1
- @backstage/plugin-kubernetes-backend@0.8.0-next.1
- @backstage/plugin-tech-insights-backend@0.5.4-next.1
- example-app@0.2.77-next.2
- @backstage/backend-tasks@0.3.7-next.1
- @backstage/plugin-app-backend@0.3.38-next.1
- @backstage/plugin-auth-node@0.2.7-next.1
- @backstage/plugin-azure-devops-backend@0.3.17-next.2
- @backstage/plugin-azure-sites-backend@0.1.0-next.1
- @backstage/plugin-badges-backend@0.1.32-next.1
- @backstage/plugin-catalog-backend@1.5.1-next.1
- @backstage/plugin-graphql-backend@0.1.28-next.1
- @backstage/plugin-jenkins-backend@0.1.28-next.1
- @backstage/plugin-kafka-backend@0.2.31-next.1
- @backstage/plugin-permission-backend@0.5.13-next.1
- @backstage/plugin-permission-node@0.7.1-next.1
- @backstage/plugin-playlist-backend@0.2.1-next.2
- @backstage/plugin-proxy-backend@0.2.32-next.1
- @backstage/plugin-rollbar-backend@0.1.35-next.1
- @backstage/plugin-scaffolder-backend-module-rails@0.4.6-next.2
- @backstage/plugin-search-backend@1.1.1-next.1
- @backstage/plugin-search-backend-module-elasticsearch@1.0.4-next.1
- @backstage/plugin-search-backend-module-pg@0.4.2-next.1
- @backstage/plugin-search-backend-node@1.0.4-next.1
- @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.22-next.1
- @backstage/plugin-tech-insights-node@0.3.6-next.1
- @backstage/plugin-techdocs-backend@1.4.1-next.1
- @backstage/plugin-todo-backend@0.1.35-next.1
- @backstage/catalog-client@1.1.2-next.0
- @backstage/catalog-model@1.1.3-next.0
- @backstage/config@1.0.4-next.0
- @backstage/integration@1.4.0-next.0
- @backstage/plugin-permission-common@0.7.1-next.0
- @backstage/plugin-search-common@1.1.1-next.0
## 0.2.77-next.1
### Patch Changes
+4 -1
View File
@@ -1,6 +1,6 @@
{
"name": "example-backend",
"version": "0.2.77-next.1",
"version": "0.2.77-next.2",
"main": "dist/index.cjs.js",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -39,7 +39,10 @@
"@backstage/plugin-azure-sites-backend": "workspace:^",
"@backstage/plugin-badges-backend": "workspace:^",
"@backstage/plugin-catalog-backend": "workspace:^",
"@backstage/plugin-catalog-node": "workspace:^",
"@backstage/plugin-code-coverage-backend": "workspace:^",
"@backstage/plugin-events-backend": "workspace:^",
"@backstage/plugin-events-node": "workspace:^",
"@backstage/plugin-graphql-backend": "workspace:^",
"@backstage/plugin-jenkins-backend": "workspace:^",
"@backstage/plugin-kafka-backend": "workspace:^",
+12 -1
View File
@@ -42,7 +42,9 @@ 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 events from './plugins/events';
import kubernetes from './plugins/kubernetes';
import kafka from './plugins/kafka';
import rollbar from './plugins/rollbar';
@@ -141,10 +143,19 @@ async function main() {
);
const permissionEnv = useHotMemoize(module, () => createEnv('permission'));
const playlistEnv = useHotMemoize(module, () => createEnv('playlist'));
const eventsEnv = useHotMemoize(module, () => createEnv('events'));
const eventBasedEntityProviders = await catalogEventBasedProviders(
catalogEnv,
);
const apiRouter = Router();
apiRouter.use('/catalog', await catalog(catalogEnv));
apiRouter.use(
'/catalog',
await catalog(catalogEnv, eventBasedEntityProviders),
);
apiRouter.use('/code-coverage', await codeCoverage(codeCoverageEnv));
apiRouter.use('/events', await events(eventsEnv, eventBasedEntityProviders));
apiRouter.use('/rollbar', await rollbar(rollbarEnv));
apiRouter.use('/scaffolder', await scaffolder(scaffolderEnv));
apiRouter.use('/tech-insights', await techInsights(techInsightsEnv));
+3
View File
@@ -15,15 +15,18 @@
*/
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';
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 { processingEngine, router } = await builder.build();
await processingEngine.start();
return router;
@@ -0,0 +1,61 @@
/*
* Copyright 2020 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import {
EntityProvider,
EntityProviderConnection,
} from '@backstage/plugin-catalog-node';
import { 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[],
) {}
async onEvent(params: EventParams): Promise<void> {
this.logger.info(
`onEvent: topic=${params.topic}, metadata=${JSON.stringify(
params.metadata,
)}, payload=${JSON.stringify(params.eventPayload)}`,
);
}
supportsEventTopics(): string[] {
return this.topics;
}
async connect(_: EntityProviderConnection): Promise<void> {
// not doing anything here
}
getProviderName(): string {
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();
}
+45
View File
@@ -0,0 +1,45 @@
/*
* Copyright 2022 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
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();
const httpRouter = Router();
eventsRouter.use('/http', httpRouter);
const http = HttpPostIngressEventPublisher.fromConfig({
config: env.config,
logger: env.logger,
router: httpRouter,
});
await new EventsBackend(env.logger)
.addPublishers(http)
.addSubscribers(subscribers)
.start();
return eventsRouter;
}
+1 -1
View File
@@ -38,7 +38,7 @@
},
"devDependencies": {
"@backstage/cli": "workspace:^",
"msw": "^0.47.0"
"msw": "^0.48.0"
},
"files": [
"dist"
+18
View File
@@ -1,5 +1,23 @@
# @backstage/cli
## 0.21.0-next.1
### Minor Changes
- 384eaa2307: Switched `tsconfig.json` to target and support `ES2021`, in line with the bump to Node.js 16 & 18.
### Patch Changes
- 88f99b8b13: Bumped `tar` dependency to `^6.1.12` in order to ensure Node.js v18 compatibility.
- 969a8444ea: Updated dependency `esbuild` to `^0.15.0`.
- Updated dependencies
- @backstage/release-manifests@0.0.7-next.0
- @backstage/cli-common@0.1.10
- @backstage/config@1.0.4-next.0
- @backstage/config-loader@1.1.6-next.0
- @backstage/errors@1.1.3-next.0
- @backstage/types@1.0.1-next.0
## 0.21.0-next.0
### Minor Changes
+11
View File
@@ -390,6 +390,7 @@ Commands:
build [options]
lint [options]
clean
list-deprecations [options]
test [options]
help [command]
```
@@ -426,6 +427,16 @@ Options:
-h, --help
```
### `backstage-cli repo list-deprecations`
```
Usage: backstage-cli repo list-deprecations [options]
Options:
--json
-h, --help
```
### `backstage-cli repo test`
```
+2 -2
View File
@@ -54,14 +54,14 @@ function getRoleConfig(role) {
case 'common-library':
case 'frontend-plugin':
case 'frontend-plugin-module':
return { testEnvironment: 'jsdom' };
return { testEnvironment: require.resolve('jest-environment-jsdom') };
case 'cli':
case 'backend':
case 'node-library':
case 'backend-plugin':
case 'backend-plugin-module':
default:
return { testEnvironment: 'node' };
return { testEnvironment: require.resolve('jest-environment-node') };
}
}
+2 -10
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/cli",
"description": "CLI for developing Backstage plugins and apps",
"version": "0.21.0-next.0",
"version": "0.21.0-next.1",
"publishConfig": {
"access": "public"
},
@@ -155,7 +155,7 @@
"@types/yarnpkg__lockfile": "^1.1.4",
"del": "^6.0.0",
"mock-fs": "^5.1.0",
"msw": "^0.47.0",
"msw": "^0.48.0",
"nodemon": "^2.0.2",
"ts-node": "^10.0.0",
"type-fest": "^2.0.0"
@@ -196,14 +196,6 @@
"type": "string",
"visibility": "frontend"
},
"googleAnalyticsTrackingId": {
"type": "string",
"visibility": "frontend",
"description": "Tracking ID for Google Analytics",
"examples": [
"UA-000000-0"
]
},
"datadogRum": {
"type": "object",
"description": "Datadog RUM events configuration",

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