docs/releases/v1.8.0-changelog.md
UrlReader interface has been updated to require that readUrl is implemented. readUrl has previously been optional to implement but a warning has been logged when calling its predecessor read.
The read method is now deprecated and will be removed in a future release.tar dependency to ^6.1.12 in order to ensure Node.js v18 compatibility.@keyv/memcache now that keyv-memcache is deprecatedkeyv library@kubernetes/client-node version to 0.17.0.GitHub with Github and deprecates old versions.7539b36748: Added a new ESLint rule that restricts imports of Link from @material-ui
The rule can be can be overridden in the following way:
module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, {
+ restrictedImports: [
+ { name: '@material-ui/core', importNames: [] },
+ { name: '@material-ui/core/Link', importNames: [] },
+ ],
});
384eaa2307: Switched tsconfig.json to target and support ES2021, in line with the bump to Node.js 16 & 18.
backstage-cli so that the list-deprecations command is visible and also removed the "[EXPERIMENTAL]" tag.tar dependency to ^6.1.12 in order to ensure Node.js v18 compatibility.index.html template that updates the comment at the end to be more accurate.@swc/core to version 1.3.9 which fixes a .tsx parser bugesbuild to ^0.15.0.@svgr/plugin-jsx to 6.5.x.
Updated dependency @svgr/plugin-svgo to 6.5.x.
Updated dependency @svgr/rollup to 6.5.x.
Updated dependency @svgr/webpack to 6.5.x.basename property of the router components in React Router v6 stable. To implement this, a new optional basename property has been added to the Router app component, which can be forwarded to the concrete router implementation in order to support this new behavior. This is done by default in any app that does not have a Router component override.homepage config as the component that used it - HomepageTimer - has been removed and replaced by the HeaderWorldClock in the home pluginHomepageTimer as it has been replaced by the HeaderWorldClock in the Home plugin and was deprecated over a year ago.searchTooltip to "Filter" to follow how the searchPlaceholder is set making this more consistentLink component when React Router v6 stable is used.Link from @backstage/core-components rather than material-UI.Router component now accepts an optional basename property.d05e1841ce: This patch brings Gitea as a valid integration: target, via the ScmIntegration interface. It adds gitea to the relevant static properties (get integration by name, get integration by type) for plugins to be able to reference the same Gitea server.
c1784a4980: Replaces in-code uses of GitHub with Github and deprecates old versions.
Deprecates:
getGitHubFileFetchUrl replaced by getGithubFileFetchUrlGitHubIntegrationConfig replaced by GithubIntegrationConfigGitHubIntegration replaced by GithubIntegrationreadGitHubIntegrationConfig replaced by readGithubIntegrationConfigreadGitHubIntegrationConfigs replaced by readGithubIntegrationConfigsreplaceGitHubUrlType replaced by replaceGithubUrlType7573b65232: Internal refactor of imports to avoid circular dependencies
a6d779d58a: Remove explicit default visibility at config.d.ts files.
/**
* @visibility backend
*/
Updated dependencies
Link from @backstage/core-components rather than material-UI.fullWidth. The BazaarOverviewCard now always use full height without fixed width. Also fixed problem with link to Bazaar.67fe5bc9a9: BREAKING: Support authenticated backends by including a server token for catalog requests. The constructor of GithubLocationAnalyzer now requires an instance of TokenManager to be supplied:
...
builder.addLocationAnalyzers(
new GitHubLocationAnalyzer({
discovery: env.discovery,
config: env.config,
+ tokenManager: env.tokenManager,
}),
);
...
f64d66a45c: Added the ability for the GitHub discovery provider to validate that catalog files exist before emitting them.
Users can now set the validateLocationsExist property to true in their GitHub discovery configuration to opt in to this feature.
This feature only works with catalogPaths that do not contain wildcards.
When validateLocationsExist is set to true, the GitHub discovery provider will retrieve the object from the
repository at the provided catalogPath.
If this file exists and is non-empty, then it will be emitted as a location for further processing.
If this file does not exist or is empty, then it will not be emitted.
Not emitting locations that do not exist allows for far fewer calls to the GitHub API to validate locations that do not exist.
GithubLocationAnalyzer to support Github App authenticationGithubOrgEntityProvidermsw to ^0.48.0 while moving it to be a dev dependency.GitHub with Github and deprecates old versions.canvas dependency to the latest version, which has better Node.js v18 support.getCatalogEntityDailyCost that's part of the CostInsightsApi.dc9da28abd: 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.
7bbd2403a1: 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.
d3ecb2382d: 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.
12cd94b7e9: 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.
6bc121bf0d: 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.
25f6d7bddb: 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.
b3a4edb885: 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.
63f7983398: 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.
7bbd2403a1: 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.
dc9da28abd: 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.
7bbd2403a1: 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.
GitHub with Github and deprecates old versions.Link from @backstage/core-components rather than material-UI.cbf5d11fdf: The Kubernetes errors when fetching pod metrics are now captured and returned to the frontend.
fetchPodMetricsByNamespace in the interface KubernetesFetcher is changed to fetchPodMetricsByNamespaces. It now accepts a set of namespace strings and returns Promise<FetchResponseWrapper>.PodStatusFetchResponse to the FetchResponse union type.NOT_FOUND to the KubernetesErrorTypes union type, the HTTP error with status code 404 will be mapped to this error.@kubernetes/client-node version to 0.17.0.GroupListPicker component that will give the user the ability to choose a grouprootRouteRef, selectedTemplateRouteRef, nextRouteRef, nextSelectedTemplateRouteRef were made public and can be used in your app (e.g. in custom TemplateCard component).580285787d: The create and click analytics events are now also captured on the "next" version of the component creation page.
4830a3569f: Basic analytics instrumentation is now in place:
click event is fired, including the step number.create event is fired, including the name of the software that was just created. The template used at creation is set on the entityRef context key.94b7ca9c6d: Updated to use @rjsf packages of version ^5.0.0-beta.12
87840c8c6c: Fixed tiny grammar error in EntityNamePicker. The first letter of the description is now capitalized.
3b3fc3cc3c: Fix formData not being present in the next version
b2bb48a6f4: Fix the return type for the createNextScaffodlerFieldExtension type as before it wasn't a component type for the extension
f905853ad6: Prefer using Link from @backstage/core-components rather than material-UI.
Updated dependencies
ea14eb62a2: Added a set of default Prometheus metrics around scaffolding. See below for a list of metrics and an explanation of their labels:
scaffolder_task_count: Tracks successful task runs.
Labels:
template: The entity ref of the scaffolded templateuser: The entity ref of the user that invoked the template runresult: A string describing whether the task ran successfully, failed, or was skippedscaffolder_task_duration: a histogram which tracks the duration of a task run
Labels:
template: The entity ref of the scaffolded templateresult: A boolean describing whether the task ran successfullyscaffolder_step_count: a count that tracks each step run
Labels:
template: The entity ref of the scaffolded templatestep: The name of the step that was runresult: A string describing whether the task ran successfully, failed, or was skippedscaffolder_step_duration: a histogram which tracks the duration of each step run
Labels:
template: The entity ref of the scaffolded templatestep: The name of the step that was runresult: A string describing whether the task ran successfully, failed, or was skippedYou can find a guide for running Prometheus metrics here: https://github.com/backstage/backstage/blob/384b7bac2e/contrib/docs/tutorials/prometheus-metrics.md
5921b5ce49: - The GitLab Project ID for the publish:gitlab:merge-request action is now passed through the query parameter project in the repoUrl. It still allows people to not use the projectid and use the repoUrl with the owner and repo query parameters instead. This makes it easier to publish to repositories instead of writing the full path to the project.
5025d2e8b6: Adds the ability to pass (an optional) array of strings that will be applied to the newly scaffolded repository as topic labels.
esbuild to ^0.15.0.plugin export; please use sonarQubePlugin instead.34b772ef31: Use the routing key if it's available instead of team name when triggering incidents.
BREAKING CHANGE: Before, the team name was used even if the routing key (with or without team) was used. Now, the routing key defined for the component will be used instead of the team name.
5691baea69: Add ability to configure filters when using EntityListDocsGrid
The following example will render two sections of cards grid:
recommendedrunbook<EntityListDocsGrid groups={{[
{
title: "Recommended Documentation",
filterPredicate: entity =>
entity?.metadata?.tags?.includes('recommended') ?? false,
},
{
title: "RunBooks Documentation",
filterPredicate: entity =>
entity?.metadata?.tags?.includes('runbook') ?? false,
}
]}} />
63705e73d9: Hide document description if not provided
847fc588a6: Updated TechDocs header to include label for source code icon and updated label to reflect Kind name
canvas dependency to the latest version, which has better Node.js v18 support.GitHub with Github and deprecates old versions.click action is now captured when users click links within a TechDocs document.HumanDuration type, which should now instead be imported from @backstage/types.msw to ^0.48.0.jscodeshift to ^0.14.0.f1c3cdfb2d: Bumped create-app version.
df21bbd4ad: The Analytics API is the recommended way to track usage in Backstage; an optionally installable Google Analytics module 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:
<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:
app:
title: Backstage Example App
baseUrl: http://localhost:3000
- googleAnalyticsTrackingId: # UA-000000-0
4091c73e68: Updated @swc/core to v1.3.9 which fixes a .tsx parser bug. You may want to run yarn backstage-cli versions:bump to get on latest version including the CLI itself.
80bfac5266: Updated the create-app command to no longer require Git to be installed and configured. A git repository will only be initialized if possible and if not already in an git repository.
286d474675: The build script in the root package.json has been split into two separate scripts, build:backend and build:all. This is to more accurately reflect what is being built, to avoid confusion.
If you want to build the project for a production deployment, you will want to use build:backend, as this builds both the frontend and backend package. If you are not using the app-backend plugin you will want to add your own build:frontend script, to which you can pass additional configuration parameters if needed.
The build:all script is useful if you simply want to check that it is possible to build all packages in the project. This might be useful as a CI check, but is generally unnecessary.
If you want to publish the packages in your repository you can add a build:packages script that calls backstage-cli repo build. This will skip the frontend and backend packages builds, as those are quite time consuming.
To apply these changes to an existing project, make the following change to the root package.json file:
- "build": "backstage-cli repo build --all",
+ "build:backend": "yarn workspace backend build",
+ "build:all": "backstage-cli repo build --all",
There are also a couple of places where documentation has been updated, see the upgrade helper for a full list of changes.
384eaa2307: Switched Node.js version to support version 16 & 18, rather than 14 & 16. To switch the Node.js version in your own project, apply the following change to the root package.json:
"engines": {
- "node": "14 || 16"
+ "node": "16 || 18"
},
As well as the following change to packages/app/package.json:
- "@types/node": "^14.14.32",
+ "@types/node": "^16.11.26",
f905853ad6: Prefer using Link from @backstage/core-components rather than material-UI.
864c876e57: Fixed incorrect comments in the templated app-config.yaml and app-config.production.yaml. The backend.listen directive is not in fact needed to override the backend.baseUrl, the backend listens to all interfaces by default. The configuration has also been updated to listen to all interfaces, rather than just IPv4 ones, as this is required for Node.js v18. The production configuration now also shows the option to specify backend.listen as a single string.
To apply this changes to an existing app, make the following change to app-config.yaml:
- # Uncomment the following host directive to bind to all IPv4 interfaces and
- # not just the baseUrl hostname.
- # host: 0.0.0.0
+ # Uncomment the following host directive to bind to specific interfaces
+ # host: 127.0.0.1
And the following change to app-config.production.yaml:
- listen:
- port: 7007
- # The following host directive binds to all IPv4 interfaces when its value
- # is "0.0.0.0". This is the most permissive setting. The right value depends
- # on your specific deployment. If you remove the host line entirely, the
- # backend will bind on the interface that corresponds to the backend.baseUrl
- # hostname.
- host: 0.0.0.0
+ # The listener can also be expressed as a single <host>:<port> string. In this case we bind to
+ # all interfaces, the most permissive setting. The right value depends on your specific deployment.
+ listen: ':7007'
Updated dependencies
https://raw.githubusercontent.com if https://versions.backstage.io is unavailable.HumanDuration type, moved here from @backstage/backend-tasks. This type matches the Duration.fromObject form of luxon.createVersionedValueMap to give it an extra hidden property that makes it easier to inspect during debugging.@asyncapi/react-component to 1.0.0-next.44.CatalogApi into auth-backend createRouter function. This will enable developers to use customized CatalogApi when creating the router.Link from @backstage/core-components rather than material-UI.c1a4addda3: Improve processing error logging.
Adds location and owner to the logging meta if they are available.
a7607b5413: Replace usage of deprecataed UrlReader.read with UrlReader.readUrl.
Updated dependencies
bae3617be5: AwsS3EntityProvider: Add option to configure schedule via app-config.yaml instead of in code.
Please find how to configure the schedule at the config at https://backstage.io/docs/integrations/aws-s3/discovery
defb389ecd: Add awsS3EntityProviderCatalogModule (new backend-plugin-api, alpha).
a6d779d58a: Remove explicit default visibility at config.d.ts files.
/**
* @visibility backend
*/
Updated dependencies
87ff05892d: AzureDevOpsEntityProvider: Add option to configure schedule via app-config.yaml instead of in code.
Please find how to configure the schedule at the config at https://backstage.io/docs/integrations/azure/discovery
0ca399b31b: Add azureDevOpsEntityProviderCatalogModule (new backend-plugin-api, alpha).
4c9f7847e4: Updated dependency msw to ^0.48.0 while moving it to be a dev dependency.
Updated dependencies
msw to ^0.48.0 while moving it to be a dev dependency.d089fbe7dc: 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
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.
Updated dependencies
68f7f5a857: BitbucketServerEntityProvider: Add option to configure schedule via app-config.yaml instead of in code.
Please find how to configure the schedule at the config at https://backstage.io/docs/integrations/bitbucketServer/discovery
cd48ed8370: Add bitbucketServerEntityProviderCatalogModule (new backend-plugin-api, alpha).
Updated dependencies
4fba50f5d4: Add gerritEntityProviderCatalogModule (new backend-plugin-api, alpha).
4c9f7847e4: Updated dependency msw to ^0.48.0 while moving it to be a dev dependency.
134b69f478: GerritEntityProvider: Add option to configure schedule via app-config.yaml instead of in code.
Please find how to configure the schedule at the config at https://backstage.io/docs/integrations/gerrit/discovery
a6d779d58a: Remove explicit default visibility at config.d.ts files.
/**
* @visibility backend
*/
Updated dependencies
6bb046bcbe: Add gitlabDiscoveryEntityProviderCatalogModule (new backend-plugin-api, alpha).
81cedb5033: GitlabDiscoveryEntityProvider: Add option to configure schedule via app-config.yaml instead of in code.
Please find how to configure the schedule at the config at https://backstage.io/docs/integrations/gitlab/discovery
4c9f7847e4: Updated dependency msw to ^0.48.0 while moving it to be a dev dependency.
Updated dependencies
0e37858f22: Added cause information to logged warnings
8d1a5e08ca: MicrosoftGraphOrgEntityProvider: Add option to configure schedule via app-config.yaml instead of in code.
Please find how to configure the schedule at the config at https://github.com/backstage/backstage/tree/master/plugins/catalog-backend-module-msgraph#readme
384f99c276: Add microsoftGraphOrgEntityProviderCatalogModule (new backend-plugin-api, alpha).
Updated dependencies
UrlReaders when $ref pointing to a URL.da0bf25d1a: Preserve graph options and increment maxDepth by 1.
The change will preserve options used at the CatalogGraphCard
(displayed at the entity page) and additionally, increments the
maxDepth option by 1 to increase the scope slightly compared to
the graph already seen by the users.
The default for maxDepth at CatalogGraphCard is 1.
21d84ef332: feat: Enable theme overrides for components in catalog-graph plugin
Updated dependencies
this-is-undefined-in-esm warningGitHub with Github and deprecates old versions.EntityProvider and AsyncEntityProvider contexts now wrap all children with an AnalyticsContext containing the corresponding entityRef; this opens up the possibility for all events underneath these contexts to be associated with and aggregated by the corresponding entity.Link from @backstage/core-components rather than material-UI.Link from @backstage/core-components rather than material-UI.Link from @backstage/core-components rather than material-UI.Link from @backstage/core-components rather than material-UI.GitHub with Github and deprecates old versions.GitHub with Github and deprecates old versions.Link from @backstage/core-components rather than material-UI.cc8bfc56c3: Add a new "Team" Filter Options to the Github Pull Requests Dashboard.
When toggling this option on, the dashboard will displays all of the PRs opened by the members of that team on any repositories of the organization.
c1784a4980: Replaces in-code uses of GitHub with Github and deprecates old versions.
Updated dependencies
Link from @backstage/core-components rather than material-UI.Link from @backstage/core-components rather than material-UI.Link from @backstage/core-components rather than material-UI.@kubernetes/client-node version to 0.17.0.cfb30b700c: Pin @kubernetes/client-node version to 0.17.0.
cbf5d11fdf: The Kubernetes errors when fetching pod metrics are now captured and returned to the frontend.
fetchPodMetricsByNamespace in the interface KubernetesFetcher is changed to fetchPodMetricsByNamespaces. It now accepts a set of namespace strings and returns Promise<FetchResponseWrapper>.PodStatusFetchResponse to the FetchResponse union type.NOT_FOUND to the KubernetesErrorTypes union type, the HTTP error with status code 404 will be mapped to this error.Updated dependencies
Link from @backstage/core-components rather than material-UI.PermissionClient605f269f0d: Updated Playlist plugin docs:
playlist plugin README to include note about installing backend plugin and added images for the various featuresplaylist-backend plugin README to remove IdentityClient import in example as it is not used and made minor change to headingsUpdated dependencies
605f269f0d: Updated Playlist plugin docs:
playlist plugin README to include note about installing backend plugin and added images for the various featuresplaylist-backend plugin README to remove IdentityClient import in example as it is not used and made minor change to headingsUpdated dependencies
Link from @backstage/core-components rather than material-UI.StackOverflowSearchResultListItem now accept optional rank property to be able to capture rank analytics data.cbe11d1e23: Tweak README
a6d779d58a: Remove explicit default visibility at config.d.ts files.
/**
* @visibility backend
*/
Updated dependencies
runChecks and runBulkChecks functions of the TechInsightsClient class, the default Content-Type used was plain/textHumanDuration from @backstage/typesHumanDuration from @backstage/typesa7607b5413: Replace usage of deprecataed UrlReader.read with UrlReader.readUrl.
a6d779d58a: Remove explicit default visibility at config.d.ts files.
/**
* @visibility backend
*/
Updated dependencies
GitHub with Github and deprecates old versions.UrlReader.read with UrlReader.readUrl.<TechDocsReaderPageProvider> now include the conventional entityRef context value, associating those events with their corresponding entity.errorHandler() middleware to router to prevent crashes caused by fatal errors in plugin backend