Merge branch 'backstage:master' into clean_deprecations
This commit is contained in:
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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
|
||||
@@ -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.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder': patch
|
||||
---
|
||||
|
||||
Updated to use `@rjsf` packages of version `^5.0.0-beta.12`
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/version-bridge': patch
|
||||
---
|
||||
|
||||
Debuggable/inspectable versioned values
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/cli': patch
|
||||
---
|
||||
|
||||
Removed googleAnalyticsTrackingId configSchema.
|
||||
@@ -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.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder': patch
|
||||
---
|
||||
|
||||
Fixed tiny grammar error in EntityNamePicker. The first letter of the description is now capitalized.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-auth-backend': patch
|
||||
---
|
||||
|
||||
Add support for custom JWT header name in GCP IAP auth.
|
||||
@@ -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.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-graph': patch
|
||||
---
|
||||
|
||||
feat: Enable theme overrides for components in catalog-graph plugin
|
||||
@@ -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.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/backend-common': patch
|
||||
---
|
||||
|
||||
Change to using `@keyv/memcache` now that `keyv-memcache` is deprecated
|
||||
@@ -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.
|
||||
@@ -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
|
||||
```
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-stack-overflow': patch
|
||||
---
|
||||
|
||||
`StackOverflowSearchResultListItem` now accept optional rank property to be able to capture rank analytics data.
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder': patch
|
||||
---
|
||||
|
||||
Fix `formData` not being present in the `next` version
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
'@backstage/plugin-code-coverage': patch
|
||||
'@backstage/plugin-code-coverage-backend': patch
|
||||
---
|
||||
|
||||
Adds installation instructions
|
||||
@@ -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
@@ -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"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -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`
|
||||
@@ -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.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/backend-test-utils': patch
|
||||
---
|
||||
|
||||
Updated dependency `msw` to `^0.48.0`.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-api-docs': patch
|
||||
---
|
||||
|
||||
Updated dependency `@asyncapi/react-component` to `1.0.0-next.44`.
|
||||
@@ -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.
|
||||
@@ -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`.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-techdocs': minor
|
||||
---
|
||||
|
||||
Hide document description if not provided
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-bitbucket-cloud-common': patch
|
||||
---
|
||||
|
||||
Add interfaces for Bitbucket Cloud (webhook) events.
|
||||
@@ -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.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-tech-insights-backend': patch
|
||||
---
|
||||
|
||||
Add Documentation on 404 Errors
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder-backend': patch
|
||||
---
|
||||
|
||||
Implement "Branch protection rules" support for "publish:github" action
|
||||
@@ -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
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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,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 }}
|
||||
|
||||
@@ -92,7 +92,6 @@ appConfig:
|
||||
app:
|
||||
baseUrl: https://demo.example.com
|
||||
title: Backstage
|
||||
googleAnalyticsTrackingId:
|
||||
backend:
|
||||
baseUrl: https://demo.example.com
|
||||
listen:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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';
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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).
|
||||
|
||||
@@ -97,6 +97,66 @@ that must be approved first before the changes are applied.**
|
||||
|
||||

|
||||
|
||||
### 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
@@ -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'
|
||||
@@ -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>
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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 |
@@ -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
@@ -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",
|
||||
|
||||
@@ -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,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",
|
||||
|
||||
@@ -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,6 +1,6 @@
|
||||
{
|
||||
"name": "example-app",
|
||||
"version": "0.2.77-next.1",
|
||||
"version": "0.2.77-next.2",
|
||||
"private": true,
|
||||
"backstage": {
|
||||
"role": "frontend"
|
||||
|
||||
@@ -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 (
|
||||
|
||||
@@ -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,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": {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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
@@ -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';
|
||||
|
||||
@@ -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,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": {
|
||||
|
||||
@@ -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,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",
|
||||
|
||||
@@ -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,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": {
|
||||
|
||||
@@ -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,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": {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:^",
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -38,7 +38,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "workspace:^",
|
||||
"msw": "^0.47.0"
|
||||
"msw": "^0.48.0"
|
||||
},
|
||||
"files": [
|
||||
"dist"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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`
|
||||
|
||||
```
|
||||
|
||||
@@ -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') };
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user