Merge branch 'backstage:master' into master

This commit is contained in:
Gaurav Pandey
2023-07-20 19:27:08 +02:00
committed by GitHub
578 changed files with 9510 additions and 2886 deletions
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-search': patch
---
Fixed bug in "View Full Results" link of Search Modal that did not navigate to the full results page.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-devtools': patch
---
Allow specifying custom title for `DevToolsLayout`
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-kubernetes-backend': patch
---
Replace reference to deprecated import
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-badges-backend': patch
---
Added support for the [new backend system](https://backstage.io/docs/backend-system/)
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog-graph': patch
---
Propagate entity spec to EntityNode so that spec info such as type can be used for graph node customization
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/cli': patch
---
Fixed the `--alwaysYarnPack` flag on the`backstage-cli build-workspace` command.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/create-app': patch
---
Post-create message - added instruction to run `yarn install` when app was created with `--skip-install`
-76
View File
@@ -1,76 +0,0 @@
---
'@backstage/plugin-scaffolder-backend-module-confluence-to-markdown': minor
---
**BREAKING**
This change updates the configuration of the confluence-to-markdown action so that it does not conflict with other confluence plguins. Currently many plugins make use of the `confluence.auth` configuration. However, only the confluence-to-markdown action uses the `confluence.auth` as a string. This change updates it so that `confluence.auth` is an object.
## Required Changes
Below are examples for updating `bearer`, `basic`, and `userpass` implementations.
For `bearer`:
Before:
```yaml
confluence:
baseUrl: 'https://confluence.example.com'
auth: 'bearer'
token: '${CONFLUENCE_TOKEN}'
```
After:
```yaml
confluence:
baseUrl: 'https://confluence.example.com'
auth:
type: 'bearer'
token: '${CONFLUENCE_TOKEN}'
```
For `basic`:
Before:
```yaml
confluence:
baseUrl: 'https://confluence.example.com'
auth: 'basic'
token: '${CONFLUENCE_TOKEN}'
email: 'example@company.org'
```
After:
```yaml
confluence:
baseUrl: 'https://confluence.example.com'
auth:
type: 'basic'
token: '${CONFLUENCE_TOKEN}'
email: 'example@company.org'
```
For `userpass`
Before:
```yaml
confluence:
baseUrl: 'https://confluence.example.com'
auth: 'userpass'
username: 'your-username'
password: 'your-password'
```
After:
```yaml
confluence:
baseUrl: 'https://confluence.example.com'
auth:
type: 'userpass'
username: 'your-username'
password: 'your-password'
```
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/theme': patch
---
Overwrite `PaletteOptions` & `ThemeOptions` type to allow use of `createTheme` from `@backstage/theme` as well as `@material-ui/core/styles` with the same type. Also replaced the default `CSSBaseline` with v4 instead of v5 for better backwards compatibility for now.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/create-app': patch
---
Bumped create-app version.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/create-app': patch
---
add cy.\*\*.should to cypress eslintrc
-10
View File
@@ -1,10 +0,0 @@
---
'@backstage/plugin-catalog-unprocessed-entities': patch
---
The Catalog Unprocessed Entities plugin can now be integrated as a tab within the DevTools plugin
- Added an export for `UnprocessedEntitiesContent`
- Updated the `README` with images of the features
- Adjusted the styles to fill in the available space
- Set the table page size to 20 as 40 was causing errors in the browser console
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/errors': patch
---
Set `this.name` in all error classes that extend `CustomErrorBase` class to their actual name
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-stackstorm': patch
---
Add props to StackstormHome for Header Customization
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-scaffolder-react': patch
---
Made markdown description theme-able
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-airbrake-backend': patch
---
Added support for the [new backend system](https://backstage.io/docs/backend-system/)
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-airbrake': patch
---
Added documentation for the [new backend system](https://backstage.io/docs/backend-system/)
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-catalog-backend-module-github': patch
---
fixed event handler to respect configured organization
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/backend-openapi-utils': patch
---
Add a new `createRouter` method for generating an `express` router that validates against your spec. Also fixes a bug with the query parameters type resolution.
-7
View File
@@ -1,7 +0,0 @@
---
'@backstage/plugin-catalog-unprocessed-entities': patch
---
Export some types and API items. This allows people to call the API from different places with the ApiRef, as well
as completely customize the client if required. Check the [README.md](https://github.com/backstage/backstage/blob/master/plugins/catalog-unprocessed-entities/README.md) to
note what needs to be added in order to use the new `catalogUnprocessedEntitiesApiRef` exported function.
-8
View File
@@ -1,8 +0,0 @@
---
'@backstage/cli': patch
'@backstage/cli-node': patch
'@backstage/plugin-devtools-backend': patch
'@backstage/plugin-tech-insights-backend': patch
---
semver upgrade to 7.5.3
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-kubernetes-backend': patch
---
Add WebSocket support to `kubernetes-backend` proxy.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-devtools': patch
---
Updated the `README` with instructions on how to integrate the Catalog Unprocessed Entities plugin as a tab within DevTools
-7
View File
@@ -1,7 +0,0 @@
---
'@backstage/plugin-lighthouse': patch
---
Added more verbose components (used to render `null`) when no audits for a website corresponding to the provided url were found.
Added `Create New Audit` button for the `AuditListForEntity` component used by `EntityLighthouseContent` and `EmbeddedRouter`.
Removed error alert from `errorApi` if error was due to no audits being found for a website (empty database query result).
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/cli': patch
---
Reload the frontend when app config changes
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/backend-common': patch
---
use `Readable.from` to explicitly convert the `buffer` from `node-fetch` to a `Readable` stream
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-catalog-import': patch
---
Add a "View Component" button as the primary CTA after registering a new component using a link to catalog-info.yaml
-6
View File
@@ -1,6 +0,0 @@
---
'@backstage/plugin-sonarqube': patch
'@backstage/plugin-sonarqube-backend': patch
---
Made default config optional
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-dynatrace': patch
---
updated the link that the "View Entity in Dynatrace" redirects the user to.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-scaffolder-backend': patch
---
Indicate the name of the option that is being deprecated in task deprecation warning.
-6
View File
@@ -1,6 +0,0 @@
---
'@backstage/plugin-catalog-backend-module-unprocessed': patch
'@backstage/plugin-catalog-unprocessed-entities': patch
---
Fix and improve documentation for the unprocessed entities modules.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog-backend-module-unprocessed': minor
---
**BREAKING**: Fixing typo in exported module. You will have to rename the import to the correct spelling. `UnprocessedEntites` -> `UnprocessedEntities`
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-kubernetes-backend': patch
---
Proxy endpoint supports cluster URLs with subpath
-7
View File
@@ -1,7 +0,0 @@
---
'@backstage/plugin-azure-devops-backend': patch
'@backstage/plugin-devtools-backend': patch
'@backstage/plugin-linguist-backend': patch
---
Added alpha support for the [new backend system](https://backstage.io/docs/backend-system/)
-6
View File
@@ -1,6 +0,0 @@
---
'@backstage/plugin-catalog-react': minor
'@backstage/plugin-catalog': minor
---
Tables which use `EntityTableProps` now have an additional `tableOptions` prop which can be used to provide additional table options to these components.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-home': patch
---
fix: update plugin home dependency for `@rjsf/material-ui` to `@rjsf/material-ui-v5`
+211 -273
View File
@@ -2,295 +2,233 @@
"mode": "pre",
"tag": "next",
"initialVersions": {
"example-app": "0.2.84",
"@backstage/app-defaults": "1.4.0",
"example-backend": "0.2.84",
"@backstage/backend-app-api": "0.4.4",
"@backstage/backend-common": "0.19.0",
"@backstage/backend-defaults": "0.1.11",
"example-app": "0.2.85",
"@backstage/app-defaults": "1.4.1",
"example-backend": "0.2.85",
"@backstage/backend-app-api": "0.4.5",
"@backstage/backend-common": "0.19.1",
"@backstage/backend-defaults": "0.1.12",
"@backstage/backend-dev-utils": "0.1.1",
"example-backend-next": "0.0.12",
"example-backend-next": "0.0.13",
"@backstage/backend-openapi-utils": "0.0.2",
"@backstage/backend-plugin-api": "0.5.3",
"@backstage/backend-tasks": "0.5.3",
"@backstage/backend-test-utils": "0.1.38",
"@backstage/catalog-client": "1.4.2",
"@backstage/catalog-model": "1.4.0",
"@backstage/cli": "0.22.8",
"@backstage/backend-plugin-api": "0.5.4",
"@backstage/backend-tasks": "0.5.4",
"@backstage/backend-test-utils": "0.1.39",
"@backstage/catalog-client": "1.4.3",
"@backstage/catalog-model": "1.4.1",
"@backstage/cli": "0.22.9",
"@backstage/cli-common": "0.1.12",
"@backstage/cli-node": "0.1.1",
"@backstage/codemods": "0.1.44",
"@backstage/cli-node": "0.1.2",
"@backstage/codemods": "0.1.45",
"@backstage/config": "1.0.8",
"@backstage/config-loader": "1.3.1",
"@backstage/core-app-api": "1.8.1",
"@backstage/core-components": "0.13.2",
"@backstage/core-plugin-api": "1.5.2",
"@backstage/create-app": "0.5.2",
"@backstage/dev-utils": "1.0.16",
"e2e-test": "0.2.4",
"@backstage/errors": "1.2.0",
"@backstage/config-loader": "1.3.2",
"@backstage/core-app-api": "1.9.0",
"@backstage/core-components": "0.13.3",
"@backstage/core-plugin-api": "1.5.3",
"@backstage/create-app": "0.5.3",
"@backstage/dev-utils": "1.0.17",
"e2e-test": "0.2.5",
"@backstage/errors": "1.2.1",
"@backstage/eslint-plugin": "0.1.3",
"@backstage/integration": "1.5.0",
"@backstage/integration-aws-node": "0.1.4",
"@backstage/integration-react": "1.1.14",
"@backstage/integration": "1.5.1",
"@backstage/integration-aws-node": "0.1.5",
"@backstage/integration-react": "1.1.15",
"@backstage/release-manifests": "0.0.9",
"@backstage/repo-tools": "0.3.1",
"@techdocs/cli": "1.4.3",
"techdocs-cli-embedded-app": "0.2.83",
"@backstage/test-utils": "1.4.0",
"@backstage/theme": "0.4.0",
"@backstage/repo-tools": "0.3.2",
"@techdocs/cli": "1.4.4",
"techdocs-cli-embedded-app": "0.2.84",
"@backstage/test-utils": "1.4.1",
"@backstage/theme": "0.4.1",
"@backstage/types": "1.1.0",
"@backstage/version-bridge": "1.0.4",
"@backstage/plugin-adr": "0.6.2",
"@backstage/plugin-adr-backend": "0.3.4",
"@backstage/plugin-adr-common": "0.2.10",
"@backstage/plugin-airbrake": "0.3.19",
"@backstage/plugin-airbrake-backend": "0.2.19",
"@backstage/plugin-allure": "0.1.35",
"@backstage/plugin-analytics-module-ga": "0.1.30",
"@backstage/plugin-analytics-module-ga4": "0.1.1",
"@backstage/plugin-apache-airflow": "0.2.12",
"@backstage/plugin-api-docs": "0.9.5",
"@backstage/plugin-adr": "0.6.3",
"@backstage/plugin-adr-backend": "0.3.5",
"@backstage/plugin-adr-common": "0.2.11",
"@backstage/plugin-airbrake": "0.3.20",
"@backstage/plugin-airbrake-backend": "0.2.20",
"@backstage/plugin-allure": "0.1.36",
"@backstage/plugin-analytics-module-ga": "0.1.31",
"@backstage/plugin-analytics-module-ga4": "0.1.2",
"@backstage/plugin-apache-airflow": "0.2.13",
"@backstage/plugin-api-docs": "0.9.6",
"@backstage/plugin-api-docs-module-protoc-gen-doc": "0.1.2",
"@backstage/plugin-apollo-explorer": "0.1.12",
"@backstage/plugin-app-backend": "0.3.46",
"@backstage/plugin-auth-backend": "0.18.4",
"@backstage/plugin-auth-node": "0.2.15",
"@backstage/plugin-azure-devops": "0.3.1",
"@backstage/plugin-azure-devops-backend": "0.3.25",
"@backstage/plugin-apollo-explorer": "0.1.13",
"@backstage/plugin-app-backend": "0.3.47",
"@backstage/plugin-auth-backend": "0.18.5",
"@backstage/plugin-auth-node": "0.2.16",
"@backstage/plugin-azure-devops": "0.3.2",
"@backstage/plugin-azure-devops-backend": "0.3.26",
"@backstage/plugin-azure-devops-common": "0.3.0",
"@backstage/plugin-azure-sites": "0.1.8",
"@backstage/plugin-azure-sites-backend": "0.1.8",
"@backstage/plugin-azure-sites": "0.1.9",
"@backstage/plugin-azure-sites-backend": "0.1.9",
"@backstage/plugin-azure-sites-common": "0.1.0",
"@backstage/plugin-badges": "0.2.43",
"@backstage/plugin-badges-backend": "0.2.1",
"@backstage/plugin-bazaar": "0.2.10",
"@backstage/plugin-bazaar-backend": "0.2.9",
"@backstage/plugin-bitbucket-cloud-common": "0.2.7",
"@backstage/plugin-bitrise": "0.1.46",
"@backstage/plugin-catalog": "1.11.2",
"@backstage/plugin-catalog-backend": "1.10.0",
"@backstage/plugin-catalog-backend-module-aws": "0.2.1",
"@backstage/plugin-catalog-backend-module-azure": "0.1.17",
"@backstage/plugin-catalog-backend-module-bitbucket": "0.2.13",
"@backstage/plugin-catalog-backend-module-bitbucket-cloud": "0.1.13",
"@backstage/plugin-catalog-backend-module-bitbucket-server": "0.1.11",
"@backstage/plugin-catalog-backend-module-gerrit": "0.1.14",
"@backstage/plugin-catalog-backend-module-github": "0.3.1",
"@backstage/plugin-catalog-backend-module-gitlab": "0.2.2",
"@backstage/plugin-catalog-backend-module-incremental-ingestion": "0.3.3",
"@backstage/plugin-catalog-backend-module-ldap": "0.5.13",
"@backstage/plugin-catalog-backend-module-msgraph": "0.5.5",
"@backstage/plugin-catalog-backend-module-openapi": "0.1.12",
"@backstage/plugin-catalog-backend-module-puppetdb": "0.1.3",
"@backstage/plugin-catalog-backend-module-unprocessed": "0.1.0",
"@backstage/plugin-catalog-common": "1.0.14",
"@internal/plugin-catalog-customized": "0.0.11",
"@backstage/plugin-catalog-graph": "0.2.31",
"@backstage/plugin-catalog-graphql": "0.3.21",
"@backstage/plugin-catalog-import": "0.9.9",
"@backstage/plugin-catalog-node": "1.3.7",
"@backstage/plugin-catalog-react": "1.7.0",
"@backstage/plugin-catalog-unprocessed-entities": "0.1.0",
"@backstage/plugin-cicd-statistics": "0.1.21",
"@backstage/plugin-cicd-statistics-module-gitlab": "0.1.15",
"@backstage/plugin-circleci": "0.3.19",
"@backstage/plugin-cloudbuild": "0.3.19",
"@backstage/plugin-code-climate": "0.1.19",
"@backstage/plugin-code-coverage": "0.2.12",
"@backstage/plugin-code-coverage-backend": "0.2.12",
"@backstage/plugin-codescene": "0.1.14",
"@backstage/plugin-config-schema": "0.1.42",
"@backstage/plugin-cost-insights": "0.12.8",
"@backstage/plugin-badges": "0.2.44",
"@backstage/plugin-badges-backend": "0.2.2",
"@backstage/plugin-bazaar": "0.2.11",
"@backstage/plugin-bazaar-backend": "0.2.10",
"@backstage/plugin-bitbucket-cloud-common": "0.2.8",
"@backstage/plugin-bitrise": "0.1.47",
"@backstage/plugin-catalog": "1.12.0",
"@backstage/plugin-catalog-backend": "1.11.0",
"@backstage/plugin-catalog-backend-module-aws": "0.2.2",
"@backstage/plugin-catalog-backend-module-azure": "0.1.18",
"@backstage/plugin-catalog-backend-module-bitbucket": "0.2.14",
"@backstage/plugin-catalog-backend-module-bitbucket-cloud": "0.1.14",
"@backstage/plugin-catalog-backend-module-bitbucket-server": "0.1.12",
"@backstage/plugin-catalog-backend-module-gerrit": "0.1.15",
"@backstage/plugin-catalog-backend-module-github": "0.3.2",
"@backstage/plugin-catalog-backend-module-gitlab": "0.2.3",
"@backstage/plugin-catalog-backend-module-incremental-ingestion": "0.4.0",
"@backstage/plugin-catalog-backend-module-ldap": "0.5.14",
"@backstage/plugin-catalog-backend-module-msgraph": "0.5.6",
"@backstage/plugin-catalog-backend-module-openapi": "0.1.13",
"@backstage/plugin-catalog-backend-module-puppetdb": "0.1.4",
"@backstage/plugin-catalog-backend-module-unprocessed": "0.1.1",
"@backstage/plugin-catalog-common": "1.0.15",
"@internal/plugin-catalog-customized": "0.0.12",
"@backstage/plugin-catalog-graph": "0.2.32",
"@backstage/plugin-catalog-graphql": "0.3.22",
"@backstage/plugin-catalog-import": "0.9.10",
"@backstage/plugin-catalog-node": "1.4.0",
"@backstage/plugin-catalog-react": "1.8.0",
"@backstage/plugin-catalog-unprocessed-entities": "0.1.1",
"@backstage/plugin-cicd-statistics": "0.1.22",
"@backstage/plugin-cicd-statistics-module-gitlab": "0.1.16",
"@backstage/plugin-circleci": "0.3.20",
"@backstage/plugin-cloudbuild": "0.3.20",
"@backstage/plugin-code-climate": "0.1.20",
"@backstage/plugin-code-coverage": "0.2.13",
"@backstage/plugin-code-coverage-backend": "0.2.13",
"@backstage/plugin-codescene": "0.1.15",
"@backstage/plugin-config-schema": "0.1.43",
"@backstage/plugin-cost-insights": "0.12.9",
"@backstage/plugin-cost-insights-common": "0.1.1",
"@backstage/plugin-devtools": "0.1.1",
"@backstage/plugin-devtools-backend": "0.1.1",
"@backstage/plugin-devtools-common": "0.1.1",
"@backstage/plugin-dynatrace": "6.0.0",
"@backstage/plugin-entity-feedback": "0.2.2",
"@backstage/plugin-entity-feedback-backend": "0.1.4",
"@backstage/plugin-devtools": "0.1.2",
"@backstage/plugin-devtools-backend": "0.1.2",
"@backstage/plugin-devtools-common": "0.1.2",
"@backstage/plugin-dynatrace": "7.0.0",
"@backstage/plugin-entity-feedback": "0.2.3",
"@backstage/plugin-entity-feedback-backend": "0.1.5",
"@backstage/plugin-entity-feedback-common": "0.1.1",
"@backstage/plugin-entity-validation": "0.1.4",
"@backstage/plugin-events-backend": "0.2.7",
"@backstage/plugin-events-backend-module-aws-sqs": "0.2.1",
"@backstage/plugin-events-backend-module-azure": "0.1.8",
"@backstage/plugin-events-backend-module-bitbucket-cloud": "0.1.8",
"@backstage/plugin-events-backend-module-gerrit": "0.1.8",
"@backstage/plugin-events-backend-module-github": "0.1.8",
"@backstage/plugin-events-backend-module-gitlab": "0.1.8",
"@backstage/plugin-events-backend-test-utils": "0.1.8",
"@backstage/plugin-events-node": "0.2.7",
"@internal/plugin-todo-list": "1.0.14",
"@internal/plugin-todo-list-backend": "1.0.14",
"@internal/plugin-todo-list-common": "1.0.11",
"@backstage/plugin-explore": "0.4.5",
"@backstage/plugin-explore-backend": "0.0.8",
"@backstage/plugin-entity-validation": "0.1.5",
"@backstage/plugin-events-backend": "0.2.8",
"@backstage/plugin-events-backend-module-aws-sqs": "0.2.2",
"@backstage/plugin-events-backend-module-azure": "0.1.9",
"@backstage/plugin-events-backend-module-bitbucket-cloud": "0.1.9",
"@backstage/plugin-events-backend-module-gerrit": "0.1.9",
"@backstage/plugin-events-backend-module-github": "0.1.9",
"@backstage/plugin-events-backend-module-gitlab": "0.1.9",
"@backstage/plugin-events-backend-test-utils": "0.1.9",
"@backstage/plugin-events-node": "0.2.8",
"@internal/plugin-todo-list": "1.0.15",
"@internal/plugin-todo-list-backend": "1.0.15",
"@internal/plugin-todo-list-common": "1.0.12",
"@backstage/plugin-explore": "0.4.6",
"@backstage/plugin-explore-backend": "0.0.9",
"@backstage/plugin-explore-common": "0.0.1",
"@backstage/plugin-explore-react": "0.0.29",
"@backstage/plugin-firehydrant": "0.2.3",
"@backstage/plugin-fossa": "0.2.51",
"@backstage/plugin-gcalendar": "0.3.15",
"@backstage/plugin-gcp-projects": "0.3.38",
"@backstage/plugin-git-release-manager": "0.3.32",
"@backstage/plugin-github-actions": "0.6.0",
"@backstage/plugin-github-deployments": "0.1.50",
"@backstage/plugin-github-issues": "0.2.8",
"@backstage/plugin-github-pull-requests-board": "0.1.13",
"@backstage/plugin-gitops-profiles": "0.3.37",
"@backstage/plugin-gocd": "0.1.25",
"@backstage/plugin-graphiql": "0.2.51",
"@backstage/plugin-graphql-backend": "0.1.36",
"@backstage/plugin-graphql-voyager": "0.1.4",
"@backstage/plugin-home": "0.5.3",
"@backstage/plugin-home-react": "0.1.0",
"@backstage/plugin-ilert": "0.2.8",
"@backstage/plugin-jenkins": "0.8.1",
"@backstage/plugin-jenkins-backend": "0.2.1",
"@backstage/plugin-jenkins-common": "0.1.16",
"@backstage/plugin-kafka": "0.3.19",
"@backstage/plugin-kafka-backend": "0.2.39",
"@backstage/plugin-kubernetes": "0.9.2",
"@backstage/plugin-kubernetes-backend": "0.11.1",
"@backstage/plugin-kubernetes-common": "0.6.4",
"@backstage/plugin-lighthouse": "0.4.4",
"@backstage/plugin-lighthouse-backend": "0.2.2",
"@backstage/plugin-explore-react": "0.0.30",
"@backstage/plugin-firehydrant": "0.2.4",
"@backstage/plugin-fossa": "0.2.52",
"@backstage/plugin-gcalendar": "0.3.16",
"@backstage/plugin-gcp-projects": "0.3.39",
"@backstage/plugin-git-release-manager": "0.3.33",
"@backstage/plugin-github-actions": "0.6.1",
"@backstage/plugin-github-deployments": "0.1.51",
"@backstage/plugin-github-issues": "0.2.9",
"@backstage/plugin-github-pull-requests-board": "0.1.14",
"@backstage/plugin-gitops-profiles": "0.3.38",
"@backstage/plugin-gocd": "0.1.26",
"@backstage/plugin-graphiql": "0.2.52",
"@backstage/plugin-graphql-backend": "0.1.37",
"@backstage/plugin-graphql-voyager": "0.1.5",
"@backstage/plugin-home": "0.5.4",
"@backstage/plugin-home-react": "0.1.1",
"@backstage/plugin-ilert": "0.2.9",
"@backstage/plugin-jenkins": "0.8.2",
"@backstage/plugin-jenkins-backend": "0.2.2",
"@backstage/plugin-jenkins-common": "0.1.17",
"@backstage/plugin-kafka": "0.3.20",
"@backstage/plugin-kafka-backend": "0.2.40",
"@backstage/plugin-kubernetes": "0.9.3",
"@backstage/plugin-kubernetes-backend": "0.11.2",
"@backstage/plugin-kubernetes-common": "0.6.5",
"@backstage/plugin-lighthouse": "0.4.5",
"@backstage/plugin-lighthouse-backend": "0.2.3",
"@backstage/plugin-lighthouse-common": "0.1.2",
"@backstage/plugin-linguist": "0.1.4",
"@backstage/plugin-linguist-backend": "0.3.0",
"@backstage/plugin-linguist": "0.1.5",
"@backstage/plugin-linguist-backend": "0.3.1",
"@backstage/plugin-linguist-common": "0.1.0",
"@backstage/plugin-microsoft-calendar": "0.1.4",
"@backstage/plugin-newrelic": "0.3.37",
"@backstage/plugin-newrelic-dashboard": "0.2.12",
"@backstage/plugin-nomad": "0.1.0",
"@backstage/plugin-nomad-backend": "0.1.0",
"@backstage/plugin-octopus-deploy": "0.2.1",
"@backstage/plugin-org": "0.6.9",
"@backstage/plugin-org-react": "0.1.8",
"@backstage/plugin-pagerduty": "0.6.0",
"@backstage/plugin-periskop": "0.1.17",
"@backstage/plugin-periskop-backend": "0.1.17",
"@backstage/plugin-permission-backend": "0.5.21",
"@backstage/plugin-permission-common": "0.7.6",
"@backstage/plugin-permission-node": "0.7.9",
"@backstage/plugin-permission-react": "0.4.13",
"@backstage/plugin-playlist": "0.1.11",
"@backstage/plugin-playlist-backend": "0.3.2",
"@backstage/plugin-playlist-common": "0.1.7",
"@backstage/plugin-proxy-backend": "0.2.40",
"@backstage/plugin-puppetdb": "0.1.2",
"@backstage/plugin-rollbar": "0.4.19",
"@backstage/plugin-rollbar-backend": "0.1.43",
"@backstage/plugin-scaffolder": "1.14.0",
"@backstage/plugin-scaffolder-backend": "1.15.0",
"@backstage/plugin-scaffolder-backend-module-confluence-to-markdown": "0.1.3",
"@backstage/plugin-scaffolder-backend-module-cookiecutter": "0.2.22",
"@backstage/plugin-scaffolder-backend-module-gitlab": "0.2.1",
"@backstage/plugin-scaffolder-backend-module-rails": "0.4.15",
"@backstage/plugin-scaffolder-backend-module-sentry": "0.1.6",
"@backstage/plugin-scaffolder-backend-module-yeoman": "0.2.19",
"@backstage/plugin-scaffolder-common": "1.3.1",
"@backstage/plugin-scaffolder-node": "0.1.4",
"@backstage/plugin-scaffolder-react": "1.5.0",
"@backstage/plugin-search": "1.3.2",
"@backstage/plugin-search-backend": "1.3.2",
"@backstage/plugin-search-backend-module-catalog": "0.1.2",
"@backstage/plugin-search-backend-module-elasticsearch": "1.3.1",
"@backstage/plugin-search-backend-module-explore": "0.1.2",
"@backstage/plugin-search-backend-module-pg": "0.5.7",
"@backstage/plugin-search-backend-module-techdocs": "0.1.2",
"@backstage/plugin-search-backend-node": "1.2.2",
"@backstage/plugin-search-common": "1.2.4",
"@backstage/plugin-search-react": "1.6.2",
"@backstage/plugin-sentry": "0.5.4",
"@backstage/plugin-shortcuts": "0.3.11",
"@backstage/plugin-sonarqube": "0.7.0",
"@backstage/plugin-sonarqube-backend": "0.2.0",
"@backstage/plugin-sonarqube-react": "0.1.6",
"@backstage/plugin-splunk-on-call": "0.4.8",
"@backstage/plugin-stack-overflow": "0.1.17",
"@backstage/plugin-stack-overflow-backend": "0.2.2",
"@backstage/plugin-stackstorm": "0.1.3",
"@backstage/plugin-tech-insights": "0.3.11",
"@backstage/plugin-tech-insights-backend": "0.5.12",
"@backstage/plugin-tech-insights-backend-module-jsonfc": "0.1.30",
"@backstage/plugin-microsoft-calendar": "0.1.5",
"@backstage/plugin-newrelic": "0.3.38",
"@backstage/plugin-newrelic-dashboard": "0.2.13",
"@backstage/plugin-nomad": "0.1.1",
"@backstage/plugin-nomad-backend": "0.1.1",
"@backstage/plugin-octopus-deploy": "0.2.2",
"@backstage/plugin-org": "0.6.10",
"@backstage/plugin-org-react": "0.1.9",
"@backstage/plugin-pagerduty": "0.6.1",
"@backstage/plugin-periskop": "0.1.18",
"@backstage/plugin-periskop-backend": "0.1.18",
"@backstage/plugin-permission-backend": "0.5.22",
"@backstage/plugin-permission-common": "0.7.7",
"@backstage/plugin-permission-node": "0.7.10",
"@backstage/plugin-permission-react": "0.4.14",
"@backstage/plugin-playlist": "0.1.12",
"@backstage/plugin-playlist-backend": "0.3.3",
"@backstage/plugin-playlist-common": "0.1.8",
"@backstage/plugin-proxy-backend": "0.2.41",
"@backstage/plugin-puppetdb": "0.1.3",
"@backstage/plugin-rollbar": "0.4.20",
"@backstage/plugin-rollbar-backend": "0.1.44",
"@backstage/plugin-scaffolder": "1.14.1",
"@backstage/plugin-scaffolder-backend": "1.15.1",
"@backstage/plugin-scaffolder-backend-module-confluence-to-markdown": "0.2.0",
"@backstage/plugin-scaffolder-backend-module-cookiecutter": "0.2.23",
"@backstage/plugin-scaffolder-backend-module-gitlab": "0.2.2",
"@backstage/plugin-scaffolder-backend-module-rails": "0.4.16",
"@backstage/plugin-scaffolder-backend-module-sentry": "0.1.7",
"@backstage/plugin-scaffolder-backend-module-yeoman": "0.2.20",
"@backstage/plugin-scaffolder-common": "1.3.2",
"@backstage/plugin-scaffolder-node": "0.1.5",
"@backstage/plugin-scaffolder-react": "1.5.1",
"@backstage/plugin-search": "1.3.3",
"@backstage/plugin-search-backend": "1.3.3",
"@backstage/plugin-search-backend-module-catalog": "0.1.3",
"@backstage/plugin-search-backend-module-elasticsearch": "1.3.2",
"@backstage/plugin-search-backend-module-explore": "0.1.3",
"@backstage/plugin-search-backend-module-pg": "0.5.8",
"@backstage/plugin-search-backend-module-techdocs": "0.1.3",
"@backstage/plugin-search-backend-node": "1.2.3",
"@backstage/plugin-search-common": "1.2.5",
"@backstage/plugin-search-react": "1.6.3",
"@backstage/plugin-sentry": "0.5.5",
"@backstage/plugin-shortcuts": "0.3.12",
"@backstage/plugin-sonarqube": "0.7.1",
"@backstage/plugin-sonarqube-backend": "0.2.1",
"@backstage/plugin-sonarqube-react": "0.1.7",
"@backstage/plugin-splunk-on-call": "0.4.9",
"@backstage/plugin-stack-overflow": "0.1.18",
"@backstage/plugin-stack-overflow-backend": "0.2.3",
"@backstage/plugin-stackstorm": "0.1.4",
"@backstage/plugin-tech-insights": "0.3.12",
"@backstage/plugin-tech-insights-backend": "0.5.13",
"@backstage/plugin-tech-insights-backend-module-jsonfc": "0.1.31",
"@backstage/plugin-tech-insights-common": "0.2.11",
"@backstage/plugin-tech-insights-node": "0.4.4",
"@backstage/plugin-tech-radar": "0.6.5",
"@backstage/plugin-techdocs": "1.6.4",
"@backstage/plugin-techdocs-addons-test-utils": "1.0.15",
"@backstage/plugin-techdocs-backend": "1.6.3",
"@backstage/plugin-techdocs-module-addons-contrib": "1.0.14",
"@backstage/plugin-techdocs-node": "1.7.2",
"@backstage/plugin-techdocs-react": "1.1.7",
"@backstage/plugin-todo": "0.2.21",
"@backstage/plugin-todo-backend": "0.1.43",
"@backstage/plugin-user-settings": "0.7.4",
"@backstage/plugin-user-settings-backend": "0.1.10",
"@backstage/plugin-vault": "0.1.13",
"@backstage/plugin-vault-backend": "0.3.2",
"@backstage/plugin-xcmetrics": "0.2.39"
"@backstage/plugin-tech-insights-node": "0.4.5",
"@backstage/plugin-tech-radar": "0.6.6",
"@backstage/plugin-techdocs": "1.6.5",
"@backstage/plugin-techdocs-addons-test-utils": "1.0.16",
"@backstage/plugin-techdocs-backend": "1.6.4",
"@backstage/plugin-techdocs-module-addons-contrib": "1.0.15",
"@backstage/plugin-techdocs-node": "1.7.3",
"@backstage/plugin-techdocs-react": "1.1.8",
"@backstage/plugin-todo": "0.2.22",
"@backstage/plugin-todo-backend": "0.1.44",
"@backstage/plugin-user-settings": "0.7.5",
"@backstage/plugin-user-settings-backend": "0.1.11",
"@backstage/plugin-vault": "0.1.14",
"@backstage/plugin-vault-backend": "0.3.3",
"@backstage/plugin-xcmetrics": "0.2.40"
},
"changesets": [
"afraid-windows-rule",
"angry-phones-wash",
"beige-actors-melt",
"chatty-buttons-deny",
"cli-always-yarn-pack-freal",
"cold-hounds-cheat",
"cool-beans-tap",
"cool-starfishes-love",
"create-app-1687867724",
"cuddly-guests-hide",
"cyan-shirts-deny",
"dirty-wasps-draw",
"dull-onions-remember",
"fluffy-frogs-change",
"fluffy-readers-own",
"forty-kids-do",
"fresh-bears-yawn",
"green-otters-wait",
"heavy-jeans-refuse",
"khaki-rocks-do",
"lazy-frogs-destroy",
"lemon-cycles-enjoy",
"many-ants-poke",
"mean-bobcats-taste",
"mighty-pandas-deny",
"mighty-shoes-refuse",
"neat-spiders-glow",
"old-rules-give",
"polite-shrimps-confess",
"popular-crabs-deny",
"popular-icons-doubt",
"popular-kangaroos-accept",
"pretty-apes-know",
"pretty-falcons-drive",
"purple-feet-approve",
"purple-starfishes-design",
"red-cherries-draw",
"renovate-46eac46",
"renovate-739552f",
"renovate-f316d5e",
"rotten-colts-decide",
"seven-pillows-hear",
"shiny-meals-chew",
"short-rabbits-roll",
"silent-oranges-explode",
"silly-chairs-protect",
"silver-balloons-sniff",
"sixty-humans-rescue",
"sour-humans-begin",
"strange-baboons-look",
"sweet-cameras-kick",
"sweet-pots-rescue",
"tame-carpets-smell",
"tender-clouds-promise",
"tender-oranges-change",
"thin-countries-battle",
"tough-flowers-suffer",
"twenty-seas-float",
"wicked-ears-scream",
"yellow-schools-relax",
"young-frogs-burn"
]
"changesets": []
}
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-catalog-backend-module-incremental-ingestion': patch
---
Update readme and instructions
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-adr-backend': patch
---
Added support for the [new backend system](https://backstage.io/docs/backend-system/)
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-lighthouse-backend': patch
---
Added support for the [new backend system](https://backstage.io/docs/backend-system/)
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/core-components': patch
---
The `Skip to content` button on click focuses on the main article tag and skips the `h1` tag. Users are not able to identify which page they are on currently. Now it's changed the behaviour of the button and focuses on the `h1` tag on the page.
-8
View File
@@ -1,8 +0,0 @@
---
'@backstage/plugin-catalog-backend-module-github': patch
'@backstage/core-components': patch
'@backstage/plugin-playlist': patch
'@backstage/plugin-nomad': patch
---
Break some internal circular import chains
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/core-components': patch
---
Parse unicode characters in name for avatar component
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-kubernetes': patch
---
Make pod drawer headings consistent
-6
View File
@@ -1,6 +0,0 @@
---
'@backstage/cli': patch
'@backstage/plugin-scaffolder-backend': patch
---
Updated dependency `esbuild` to `^0.18.0`.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/codemods': patch
---
Updated dependency `jscodeshift` to `^0.15.0`.
-7
View File
@@ -1,7 +0,0 @@
---
'@backstage/core-components': patch
'@backstage/plugin-codescene': patch
'@backstage/plugin-sonarqube': patch
---
Updated dependency `rc-progress` to `3.4.2`.
-38
View File
@@ -1,38 +0,0 @@
---
'@backstage/plugin-catalog-backend-module-incremental-ingestion': minor
---
**BREAKING** Allow incremental event handlers to be async; Force event handler
to indicate if it made a change. Instead of returning `null` or `undefined` from an event
handler to indicate no-oop, instead return the value { type: "ignored" }.
**before**
```javascript
import { createDelta, shouldIgnore } from "./my-delta-creater";
eventHandler: {
onEvent(params) {
if (shouldIgnore(params)) {
return;
}
return createDelta(params);
}
}
```
**after**
```javascript
import { createDelta, shouldIgnore } from "./my-delta-creater";
eventHandler: {
async onEvent(params) {
if (shouldIgnore(params) {
return { type: "ignored" };
}
// code to create delta can now be async if needed
return await createDelta(params);
}
}
```
+55
View File
@@ -0,0 +1,55 @@
---
'@backstage/config-loader': minor
---
Adds a new `deepVisibility` schema keyword that sets child visibility recursively to the defined value, respecting preexisting values or child `deepVisibility`.
Example usage:
```ts
export interface Config {
/**
* Enforces a default of `secret` instead of `backend` for this object.
* @deepVisibility secret
*/
mySecretProperty: {
type: 'object';
properties: {
secretValue: {
type: 'string';
};
verySecretProperty: {
type: 'string';
};
};
};
}
```
Example of a schema that would not be allowed:
```ts
export interface Config {
/**
* Set the top level property to secret, enforcing a default of `secret` instead of `backend` for this object.
* @deepVisibility secret
*/
mySecretProperty: {
type: 'object';
properties: {
frontendUrl: {
/**
* We can NOT override the visibility to reveal a property to the front end.
* @visibility frontend
*/
type: 'string';
};
verySecretProperty: {
type: 'string';
};
};
};
}
```
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/repo-tools': patch
---
Update `schema openapi generate` command to now create a default router that can be imported and used directly.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-catalog-unprocessed-entities': patch
---
Corrected the installation instructions.
-6
View File
@@ -1,6 +0,0 @@
---
'@backstage/plugin-kubernetes-backend': patch
---
Fixed a bug where the proxy endpoint would error when used in combination with
a local kubectl proxy process and a token-based auth strategy on-cluster.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-entity-feedback-backend': patch
---
Added support for the new backend system
-8
View File
@@ -1,8 +0,0 @@
---
'@backstage/plugin-home-react': patch
'@backstage/plugin-home': patch
---
Add possibility to customize the settings widget for different
properties by using the `uiSchema` provided by the json-schema.
More information here: https://rjsf-team.github.io/react-jsonschema-form/docs/api-reference/uiSchema
-12
View File
@@ -1,12 +0,0 @@
---
'@backstage/plugin-cost-insights': patch
'@backstage/plugin-user-settings': patch
'@backstage/theme': patch
'@backstage/test-utils': patch
'@backstage/core-plugin-api': patch
'@backstage/core-components': patch
'@backstage/core-app-api': patch
'@backstage/cli': patch
---
Fixing MUI / Material UI references
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-catalog-unprocessed-entities': patch
---
Fixed spacing for success message
-6
View File
@@ -1,6 +0,0 @@
---
'@backstage/create-app': patch
'@backstage/plugin-catalog': patch
---
Display a warning alert if relations are defined, which don't exist in the catalog.
+7
View File
@@ -0,0 +1,7 @@
---
'@backstage/plugin-todo-backend': minor
'@backstage/plugin-catalog-backend': minor
'@backstage/plugin-search-backend': minor
---
Now performs request validation based on OpenAPI schema through `@backstage/backend-openapi-utils`. Error responses for invalid input, like `"a"` instead of a number, may have changed.
-6
View File
@@ -1,6 +0,0 @@
---
'@backstage/plugin-catalog-backend': minor
'@backstage/plugin-catalog-node': minor
---
Support placeholder resolvers in the CatalogPlugin, also moves `PlaceholderResolver` and related types from `@backstage/plugin-catalog-backend` to `@backstage/plugin-catalog-node`.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-home': patch
---
Fix missing column breakpoints in `CustomHompageGrid`
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/create-app': patch
---
Updated included Dockerfile to include `g++`. Also updated the comments to note that some of the dependencies are also needed by isolated-vm
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/core-components': patch
---
Remove zooming in restrictions in the catalog graph
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-kubernetes': patch
---
Changed Google cloud auth scope to read-only.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-auth-backend': patch
---
Support for Token Endpoint Auth Method for OIDC Provider
-6
View File
@@ -1,6 +0,0 @@
---
'@backstage/plugin-adr-common': patch
'@backstage/plugin-adr': patch
---
fixed error with date parsing.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/core-plugin-api': patch
---
Change `IconComponent` type to be compatible with Material UI v5 icons.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-kubernetes-backend': patch
---
Update readme with a valid link to k8s documentation
-8
View File
@@ -1,8 +0,0 @@
---
'@backstage/plugin-catalog-unprocessed-entities': patch
'@backstage/plugin-devtools': patch
'@backstage/plugin-puppetdb': patch
'@backstage/plugin-nomad': patch
---
update some peer dependencies to silence yarn install
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/core-components': patch
---
Fix keyboard navigation & focus highlight on Select component.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-scaffolder-backend-module-gitlab': patch
---
Fixed a bug in `gitlab:group:ensureExists` where `repos` was always set as the root group.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/theme': patch
---
Override the spacing to a v5 compliant method
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-catalog-unprocessed-entities': patch
---
install command points to correct package name
+1 -1
View File
@@ -56,7 +56,7 @@ jobs:
run: ls microsite/build && ls microsite/build/storybook
- name: Deploy both microsite and storybook to gh-pages
uses: JamesIves/github-pages-deploy-action@v4.4.2
uses: JamesIves/github-pages-deploy-action@v4.4.3
with:
branch: gh-pages
folder: microsite/build
+4 -3
View File
@@ -8,7 +8,7 @@ The authentication system in Backstage serves two distinct purposes: sign-in and
identification of users, as well as delegating access to third-party resources. It is possible to
configure Backstage to have any number of authentication providers, but only
one of these will typically be used for sign-in, with the rest being used to provide
access external resources.
access to external resources.
## Built-in Authentication Providers
@@ -72,7 +72,7 @@ both in the frontend app, as well as the `auth` backend plugin. For information
on how to configure the backend app, see [Sign-in Identities and Resolvers](./identity-resolver.md).
The rest of this section will focus on how to configure sign-in for the frontend app.
Sign-in is configured by providing a custom `SignInPage` app component. It will
Sign-in is configured by providing a custom `SignInPage` app component. It will be
rendered before any other routes in the app and is responsible for providing the
identity of the current user. The `SignInPage` can render any number of pages and
components, or just blank space with logic running in the background. In the end
@@ -113,7 +113,8 @@ const app = createApp({
```
You can also use the `providers` prop to enable multiple sign-in methods, for example
allows allowing guest access:
- allowing guest access:
```tsx title="packages/app/src/App.tsx"
const app = createApp({
+13
View File
@@ -101,6 +101,19 @@ export const apis: AnyApiFactory[] = [
},
environment: configApi.getOptionalString('auth.environment'),
defaultScopes: ['openid', 'profile', 'email'],
popupOptions: {
// optional, used to customize login in popup size
size: {
fullscreen: true,
},
/**
* or specify popup width and height
* size: {
width: 1000,
height: 1000,
}
*/
},
}),
}),
/* highlight-add-end */
@@ -0,0 +1,332 @@
---
id: ui-options-examples
title: ui:options Examples
description: The input props that can be specified under ui:options for different pickers
---
## EntityPicker
The input props that can be specified under `ui:options` for the `EntityPicker` field extension.
### `allowArbitraryValues`
Whether to allow arbitrary user input. Defaults to true.
`allowArbitraryValues` provides input validation when selecting an entity as the values you enter will correspond to a valid entity.
- Adding a valid entity with `allowArbitraryValues` as `false`
```yaml
entity:
title: Entity
type: string
description: Entity of the component
ui:field: EntityPicker
ui:options:
allowArbitraryValues: false
```
- Adding an arbitrary entity with `allowArbitraryValues` as `true` (default value)
```yaml
entity:
title: Entity
type: string
description: Entity of the component
ui:field: EntityPicker
ui:options:
allowArbitraryValues: true
```
### `allowedKinds`
DEPRECATED: Use `catalogFilter` instead.
### `catalogFilter`
`catalogFilter` supports filtering options by any field(s) of an entity.
- Get all entities of kind `Group`
```yaml
entity:
title: Entity
type: string
description: Entity of the component
ui:field: EntityPicker
ui:options:
catalogFilter:
- kind: Group
```
- Get entities of kind `Group` and spec.type `team`
```yaml
entity:
title: Entity
type: string
description: Entity of the component
ui:field: EntityPicker
ui:options:
catalogFilter:
- kind: Group
spec.type: team
```
For the full details on the spec.\* values see [here](../software-catalog/descriptor-format.md#kind-group).
### `defaultKind`
The default entity kind.
```yaml
system:
title: System
type: string
description: System of the component
ui:field: EntityPicker
ui:options:
catalogFilter:
kind: System
defaultKind: System
```
### `defaultNamespace`
The ID of a namespace that the entity belongs to. The default value is `default`.
- Listing all entities in the `default` namespace (default value)
```yaml
entity:
title: Entity
type: string
description: Entity of the component
ui:field: EntityPicker
ui:options:
defaultNamespace: default
```
- Listing all entities in the `payment` namespace
```yaml
entity:
title: Entity
type: string
description: Entity of the component
ui:field: EntityPicker
ui:options:
defaultNamespace: payment
```
## `OwnerPicker`
The input props that can be specified under `ui:options` for the `OwnerPicker` field extension.
### `allowArbitraryValues`
Whether to allow arbitrary user input. Defaults to true.
`allowArbitraryValues` provides input validation when selecting an owner as the values you enter will correspond to a valid owner.
- Adding a valid owner with `allowArbitraryValues` as `false`
```yaml
owner:
title: Owner
type: string
description: Owner of the component
ui:field: OwnerPicker
ui:options:
allowArbitraryValues: false
```
- Adding an arbitrary owner with `allowArbitraryValues` as `true` (default value)
```yaml
owner:
title: Owner
type: string
description: Owner of the component
ui:field: OwnerPicker
ui:options:
allowArbitraryValues: true
```
### `allowedKinds`
DEPRECATED: Use `catalogFilter` instead.
### `catalogFilter`
`catalogFilter` supports filtering options by any field(s) of an entity.
- Get all entities of kind `Group`
```yaml
owner:
title: Owner
type: string
description: Owner of the component
ui:field: OwnerPicker
ui:options:
catalogFilter:
- kind: Group
```
- Get entities of kind `Group` and spec.type `team`
```yaml
owner:
title: Owner
type: string
description: Owner of the component
ui:field: OwnerPicker
ui:options:
catalogFilter:
- kind: Group
spec.type: team
```
For the full details on the spec.\* values see [here](../software-catalog/descriptor-format.md#kind-group).
### `defaultNamespace`
The ID of a namespace that the owner belongs to. The default value is `default`.
- Listing owners in the `default` namespace (default value)
```yaml
owner:
title: Owner
type: string
description: Owner of the component
ui:field: OwnerPicker
ui:options:
catalogFilter:
- kind: Group
defaultNamespace: default
```
- Listing owners in the `payment` namespace
```yaml
owner:
title: Owner
type: string
description: Owner of the component
ui:field: OwnerPicker
ui:options:
catalogFilter:
- kind: Group
defaultNamespace: payment
```
## RepoUrlPicker
The input props that can be specified under `ui:options` for the `RepoUrlPicker` field extension.
### `allowedHosts`
The `allowedHosts` part should be set to where you wish to enable this template
to publish to. And it can be any host that is listed in your integrations'
config in `app-config.yaml`.
- Publish only to repositories from `github.com`
```yaml
repoUrl:
title: Repository Location
type: string
ui:field: RepoUrlPicker
ui:options:
allowedHosts:
- github.com
```
### `allowedOrganizations`
List of allowed organizations in the given SCM platform. You can restrict the template to publish to a set of organizations.
- Publish only to repositories from organization `my_organization`
```yaml
repoUrl:
title: Repository Location
type: string
ui:field: RepoUrlPicker
ui:options:
allowedOrganizations:
- my_organization
```
### `allowedProjects`
List of allowed projects in the given SCM platform. You can restrict the template to publish to a set of projects.
- Publish only to repositories from project `project_1`
```yaml
repoUrl:
title: Repository Location
type: string
ui:field: RepoUrlPicker
ui:options:
allowedProjects:
- project_1
```
### `allowedRepos`
List of allowed repos in the given SCM platform. You can restrict the template to publish to a set of repository names.
- Publish to only `repo_1` and `repo_2` repositories
```yaml
repoUrl:
title: Repository Location
type: string
ui:field: RepoUrlPicker
ui:options:
allowedRepos:
- repo_1
- repo_2
```
### `allowedOwners`
List of allowed owners in the given SCM platform. You can restrict the template to publish to repositories owned by specific users/groups by setting the `allowedOwners` option.
- Publish to only repositories from owner `owner_1` and `owner_2`
```yaml
repoUrl:
title: Repository Location
type: string
ui:field: RepoUrlPicker
ui:options:
allowedOwners:
- owner_1
- owner_2
```
### `requestUserCredentials`
If defined will request user credentials to auth against the given SCM platform.
```yaml
repoUrl:
title: Repository Location
type: string
ui:field: RepoUrlPicker
ui:options:
requestUserCredentials:
secretsKey: USER_OAUTH_TOKEN
additionalScopes:
github:
- workflow:write
```
`secretsKey` is the key used within the template secrets context to store the credential and `additionalScopes` is any additional permission scopes to request.
The supported `additionalScopes` values are `gerrit`, `github`, `gitlab`, `bitbucket`, and `azure`.
@@ -352,6 +352,8 @@ specific set of repository names. A full example could look like this:
- backstage
```
For a list of all possible `ui:options` input props for `RepoUrlPicker`, please visit [here](./ui-options-examples.md#repourlpicker).
The `RepoUrlPicker` is a custom field that we provide part of the
`plugin-scaffolder`. You can provide your own custom fields by
[writing your own Custom Field Extensions](./writing-custom-field-extensions.md)
@@ -472,6 +474,8 @@ owner:
kind: [Group, User]
```
For a list of all possible `ui:options` input props for `OwnerPicker`, please visit [here](./ui-options-examples.md#ownerpicker).
#### `catalogFilter`
The `catalogFilter` allow you to filter the list entities using any of the [catalog api filters](https://backstage.io/docs/features/software-catalog/software-catalog-api#filtering):
+1 -1
View File
@@ -66,7 +66,7 @@ By default all internal users are allowed to create and delete entities. If this
## Scaffolder
By default, Scaffolding jobs execute directly on the host machine, including any actions defined in the template. Because the Scaffolder templates are considered a more sensitive area it is recommended to control access to create and update templates to trusted parties. Template execution is intended to be secure regardless of input, but we still recommend this additional layer of protection. The string templating is executed in a [node VM sandbox](https://github.com/patriksimek/vm2) to mitigate the possibility of remote code execution attacks.
By default, Scaffolding jobs execute directly on the host machine, including any actions defined in the template. Because the Scaffolder templates are considered a more sensitive area it is recommended to control access to create and update templates to trusted parties. Template execution is intended to be secure regardless of input, but we still recommend this additional layer of protection. The string templating is executed in a [node VM sandbox](https://github.com/laverdet/isolated-vm) to mitigate the possibility of remote code execution attacks.
The Scaffolder often has elevated permissions to for example create repositories in a Github organization. The integrator should therefore be cautious of Scaffolder Templates that for example delete or update existing resources as the user input is typically user defined and can therefore delete or modify resources maliciously or by mistake.
+11 -1
View File
@@ -32,7 +32,7 @@ their own release cadence and versioning policy.
## Main Release Line
Release cadence: Monthly
Release cadence: Monthly, specifically on the Tuesday before the third Wednesday of each month. The first release took place in March 2022.
The main release line in versioned with a major, minor and patch version but
does **not** adhere to [semver](https://semver.org). The version format is
@@ -172,3 +172,13 @@ When we say _Supporting_ a Node.js release, that means the following:
- The CI pipeline in the main Backstage repo tests towards the supported releases, and we encourage any other Backstage related projects to do the same.
- New Backstage projects created with `@backstage/create-app` will have their `engines.node` version set accordingly.
- Dropping compatibility with unsupported releases is not considered a breaking change. This includes using new syntax or APIs, as well as bumping dependencies that drop support for these versions.
## TypeScript Releases
The Backstage project uses [TypeScript](https://www.typescriptlang.org/) for type checking within the project, as well as external APIs and documentation. It is important to have a clear policy for which TypeScript versions we support, since we want to be able to adopt new TypeScript features, but at the same time not break existing projects that are using older versions.
The TypeScript release cadence is roughly every three months. An important aspect of the TypeScript versioning is that it does not follow semver. In particular, there is no differentiation between major and minor versions, both of them are breaking. One way to think about it is to merge the two, for example version 4.7 can be considered major version 47, 5.0 is 50, and so on. Within these releases there can be a number of patch releases, which do follow semver.
Our policy is to support the last 3 TypeScript versions, for example 4.8, 4.9, and 5.0. Converted to time, this means that we typically support the TypeScript version from the last six to nine months, depending on where in the TypeScript release window we are. This policy applies as a snapshot at the time of any given Backstage release, new TypeScript releases only apply to the following Backstage main-line release, not to the current one.
For anyone maintaining their own Backstage project, this means that you should strive to bump to the latest TypeScript version at least every 6 months, or you may encounter breakages as you upgrade Backstage packages. If you encounter any issues in doing so, please [file an issue in the main Backstage repository](https://github.com/backstage/backstage/issues/new/choose), as per this policy we should always support the latest version. In order to ensure that we do not start using new TypeScript features too early, the Backstage project itself uses the version at the beginning of the currently supported window, in the above example that would be version 4.8.
File diff suppressed because it is too large Load Diff
+87
View File
@@ -0,0 +1,87 @@
---
id: v1.16.0
title: v1.16.0
description: Backstage Release v1.16.0
---
These are the release notes for the v1.16.0 release of [Backstage](https://backstage.io/).
A huge thanks to the whole team of maintainers and contributors as well as the amazing Backstage Community for their hard work in getting this release developed and done. A little smaller release this time with the Summer Holidays, hope youre all having some deserved time off also!
## Highlights
### Continued support for Material-UI V5
There have been some more tweaks here or there to types and the theme system to ensure a smooth future migration toward Material-UI version 5. This should be mostly transparent to adopters, but please let us know if you encounter any oddities around the theme system after upgrading to this release.
### More plugins support the new Backend System
Theres been some more plugins that have been ported across to using the new [Backend System](https://backstage.io/docs/backend-system/). They are as follows:
- `@backstage/plugin-adr-backend` - Contributed by [@angeliski](https://github.com/angeliski) in [#18377](https://github.com/backstage/backstage/pull/18377)
- `@backstage/plugin-airbrake-backend` - Contributed by [@anicke](https://github.com/anicke) in [#18598](https://github.com/backstage/backstage/pull/18598)
- `@backstage/plugin-azure-devops-backend` - Contributed by [@awanlin](https://github.com/awanlin) in [#18320](https://github.com/backstage/backstage/pull/18320)
- `@backstage/plugin-badges-backend` - Contributed by [@awanlin](https://github.com/awanlin) in [#18464](https://github.com/backstage/backstage/pull/18464)
- `@backstage/plugin-devtools-backend` - Contributed by [@awanlin](https://github.com/awanlin) in [#18320](https://github.com/backstage/backstage/pull/18320)
- `@backstage/plugin-linguist-backend` - Contributed by [@awanlin](https://github.com/awanlin) in [#18320](https://github.com/backstage/backstage/pull/18320)
- `@backstage/plugin-entity-feedback-backend` - Contributed by [@anicke](https://github.com/anicke) in [#18361](https://github.com/backstage/backstage/pull/18361)
- `@backstage/plugin-lighthouse-backend` - Contributed by [@jroebu14](https://github.com/jroebu14) in [#18633](https://github.com/backstage/backstage/pull/18633)
Stay tuned for more updates on the future of the Backend System as we move to make this a stable API!
### **BREAKING**: `@backstage/plugin-catalog-backend-module-incremental-ingestion`
Incremental event handlers are now async by default, and their response shape has been changed to allow further extension.
Instead of returning `null` or `undefined` from an event handler to indicate no-oop, instead return the value `{ type: "ignored" }`.
Contributed by [@cowboyd](https://github.com/cowboyd) in [#18216](https://github.com/backstage/backstage/pull/18216)
### **BREAKING**: `@backstage/plugin-scaffolder-backend-module-confluence-to-markdown`
The configuration has been changed and the authentication property of `confluence.auth` is now an `object` instead to allow further evolution.
Contributed by [@jsundquist](https://github.com/jsundquist) in [#18583](https://github.com/backstage/backstage/pull/18583)
### `@backstage/plugin-lighthouse`
Added more verbose component for when no audits for a website corresponding to the provided url were found.
Contributed by [@Zaperex](https://github.com/Zaperex) in [#18399](https://github.com/backstage/backstage/pull/18399)
### `@backstage/plugin-home`
A reference to material-uis dependency has been updated from `@rjsf/material-ui` to `@rjsf/material-ui-v5`.
Contributed by [@mario-mui](https://github.com/mario-mui) in [#18432](https://github.com/backstage/backstage/pull/18432)
It is now possible to customize the settings widget for different properties by using the`uiSchema` property.
Contributed by [@ivangonzalezacuna](https://github.com/ivangonzalezacuna) in [#18574](https://github.com/backstage/backstage/pull/18574)
### `@backstage/plugin-search`
Fixed bug in `View Full Results` link of Search Modal that did not navigate to the full results page.
Contributed by [@ciprianna](https://github.com/ciprianna) in [#18407](https://github.com/backstage/backstage/pull/18407)
## Security Fixes
This release does not contain any security fixes.
## Upgrade path
We recommend that you keep your Backstage project up to date with this latest release. For more guidance on how to upgrade, check out the documentation for [keeping Backstage updated](https://backstage.io/docs/getting-started/keeping-backstage-updated).
## Links and References
Below you can find a list of links and references to help you learn about and start using this new release.
- [Backstage official website](https://backstage.io/), [documentation](https://backstage.io/docs/), and [getting started guide](https://backstage.io/docs/getting-started/)
- [GitHub repository](https://github.com/backstage/backstage)
- Backstage's [versioning and support policy](https://backstage.io/docs/overview/versioning-policy)
- [Community Discord](https://discord.gg/backstage-687207715902193673) for discussions and support
- [Changelog](https://github.com/backstage/backstage/tree/master/docs/releases/v1.16.0-changelog.md)
- Backstage [Demos](https://backstage.io/demos), [Blog](https://backstage.io/blog), [Roadmap](https://backstage.io/docs/overview/roadmap) and [Plugins](https://backstage.io/plugins)
Sign up for our [newsletter](https://mailchi.mp/spotify/backstage-community) if you want to be informed about what is happening in the world of Backstage.
+2
View File
@@ -1,6 +1,8 @@
{
"releases": {
"Release Notes": [
"releases/v1.16.0",
"releases/v1.15.0",
"releases/v1.14.0",
"releases/v1.13.0",
"releases/v1.12.0",
+4 -4
View File
@@ -10400,11 +10400,11 @@ __metadata:
linkType: hard
"semver@npm:^6.0.0, semver@npm:^6.1.1, semver@npm:^6.1.2, semver@npm:^6.3.0":
version: 6.3.0
resolution: "semver@npm:6.3.0"
version: 6.3.1
resolution: "semver@npm:6.3.1"
bin:
semver: ./bin/semver.js
checksum: 1b26ecf6db9e8292dd90df4e781d91875c0dcc1b1909e70f5d12959a23c7eebb8f01ea581c00783bbee72ceeaad9505797c381756326073850dc36ed284b21b9
semver: bin/semver.js
checksum: ae47d06de28836adb9d3e25f22a92943477371292d9b665fb023fae278d345d508ca1958232af086d85e0155aee22e313e100971898bbb8d5d89b8b1d4054ca2
languageName: node
linkType: hard
+2 -2
View File
@@ -47,7 +47,7 @@
"@types/react": "^17",
"@types/react-dom": "^17"
},
"version": "1.16.0-next.2",
"version": "1.16.0",
"dependencies": {
"@backstage/errors": "workspace:^",
"@manypkg/get-packages": "^1.1.3"
@@ -81,7 +81,7 @@
"semver": "^7.5.3",
"shx": "^0.3.2",
"ts-node": "^10.4.0",
"typescript": "~5.0.0"
"typescript": "~4.9.0"
},
"prettier": "@spotify/prettier-config",
"lint-staged": {
+11
View File
@@ -1,5 +1,16 @@
# @backstage/app-defaults
## 1.4.1
### Patch Changes
- Updated dependencies
- @backstage/theme@0.4.1
- @backstage/core-components@0.13.3
- @backstage/core-app-api@1.9.0
- @backstage/core-plugin-api@1.5.3
- @backstage/plugin-permission-react@0.4.14
## 1.4.1-next.2
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/app-defaults",
"description": "Provides the default wiring of a Backstage App",
"version": "1.4.1-next.2",
"version": "1.4.1",
"publishConfig": {
"access": "public",
"main": "dist/index.esm.js",
+75
View File
@@ -1,5 +1,80 @@
# example-app
## 0.2.85
### Patch Changes
- Updated dependencies
- @backstage/plugin-search@1.3.3
- @backstage/plugin-devtools@0.1.2
- @backstage/cli@0.22.9
- @backstage/theme@0.4.1
- @backstage/plugin-catalog-unprocessed-entities@0.1.1
- @backstage/plugin-stackstorm@0.1.4
- @backstage/plugin-scaffolder-react@1.5.1
- @backstage/plugin-airbrake@0.3.20
- @backstage/plugin-lighthouse@0.4.5
- @backstage/plugin-catalog-import@0.9.10
- @backstage/plugin-dynatrace@7.0.0
- @backstage/plugin-catalog-react@1.8.0
- @backstage/plugin-home@0.5.4
- @backstage/core-components@0.13.3
- @backstage/plugin-playlist@0.1.12
- @backstage/plugin-nomad@0.1.1
- @backstage/plugin-kubernetes@0.9.3
- @backstage/core-app-api@1.9.0
- @backstage/plugin-cost-insights@0.12.9
- @backstage/plugin-user-settings@0.7.5
- @backstage/core-plugin-api@1.5.3
- @backstage/plugin-adr@0.6.3
- @backstage/plugin-puppetdb@0.1.3
- @backstage/app-defaults@1.4.1
- @backstage/catalog-model@1.4.1
- @backstage/config@1.0.8
- @backstage/integration-react@1.1.15
- @backstage/plugin-apache-airflow@0.2.13
- @backstage/plugin-api-docs@0.9.6
- @backstage/plugin-azure-devops@0.3.2
- @backstage/plugin-azure-sites@0.1.9
- @backstage/plugin-badges@0.2.44
- @backstage/plugin-catalog-common@1.0.15
- @backstage/plugin-catalog-graph@0.2.32
- @backstage/plugin-circleci@0.3.20
- @backstage/plugin-cloudbuild@0.3.20
- @backstage/plugin-code-coverage@0.2.13
- @backstage/plugin-entity-feedback@0.2.3
- @backstage/plugin-explore@0.4.6
- @backstage/plugin-gcalendar@0.3.16
- @backstage/plugin-gcp-projects@0.3.39
- @backstage/plugin-github-actions@0.6.1
- @backstage/plugin-gocd@0.1.26
- @backstage/plugin-graphiql@0.2.52
- @backstage/plugin-jenkins@0.8.2
- @backstage/plugin-kafka@0.3.20
- @backstage/plugin-linguist@0.1.5
- @backstage/plugin-linguist-common@0.1.0
- @backstage/plugin-microsoft-calendar@0.1.5
- @backstage/plugin-newrelic@0.3.38
- @backstage/plugin-newrelic-dashboard@0.2.13
- @backstage/plugin-octopus-deploy@0.2.2
- @backstage/plugin-org@0.6.10
- @backstage/plugin-pagerduty@0.6.1
- @backstage/plugin-permission-react@0.4.14
- @backstage/plugin-rollbar@0.4.20
- @backstage/plugin-scaffolder@1.14.1
- @backstage/plugin-search-common@1.2.5
- @backstage/plugin-search-react@1.6.3
- @backstage/plugin-sentry@0.5.5
- @backstage/plugin-shortcuts@0.3.12
- @backstage/plugin-stack-overflow@0.1.18
- @backstage/plugin-tech-insights@0.3.12
- @backstage/plugin-tech-radar@0.6.6
- @backstage/plugin-techdocs@1.6.5
- @backstage/plugin-techdocs-module-addons-contrib@1.0.15
- @backstage/plugin-techdocs-react@1.1.8
- @backstage/plugin-todo@0.2.22
- @internal/plugin-catalog-customized@0.0.12
## 0.2.85-next.2
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "example-app",
"version": "0.2.85-next.2",
"version": "0.2.85",
"private": true,
"backstage": {
"role": "frontend"
+16
View File
@@ -1,5 +1,21 @@
# @backstage/backend-app-api
## 0.4.5
### Patch Changes
- Updated dependencies
- @backstage/errors@1.2.1
- @backstage/backend-common@0.19.1
- @backstage/backend-plugin-api@0.5.4
- @backstage/backend-tasks@0.5.4
- @backstage/cli-common@0.1.12
- @backstage/config@1.0.8
- @backstage/config-loader@1.3.2
- @backstage/types@1.1.0
- @backstage/plugin-auth-node@0.2.16
- @backstage/plugin-permission-node@0.7.10
## 0.4.5-next.0
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/backend-app-api",
"description": "Core API used by Backstage backend apps",
"version": "0.4.5-next.0",
"version": "0.4.5",
"main": "src/index.ts",
"types": "src/index.ts",
"publishConfig": {
+17
View File
@@ -1,5 +1,22 @@
# @backstage/backend-common
## 0.19.1
### Patch Changes
- 787ddcc5ef99: use `Readable.from` to explicitly convert the `buffer` from `node-fetch` to a `Readable` stream
- Updated dependencies
- @backstage/errors@1.2.1
- @backstage/backend-app-api@0.4.5
- @backstage/backend-dev-utils@0.1.1
- @backstage/backend-plugin-api@0.5.4
- @backstage/cli-common@0.1.12
- @backstage/config@1.0.8
- @backstage/config-loader@1.3.2
- @backstage/integration@1.5.1
- @backstage/integration-aws-node@0.1.5
- @backstage/types@1.1.0
## 0.19.1-next.0
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/backend-common",
"description": "Common functionality library for Backstage backends",
"version": "0.19.1-next.0",
"version": "0.19.1",
"main": "src/index.ts",
"types": "src/index.ts",
"publishConfig": {
+9
View File
@@ -1,5 +1,14 @@
# @backstage/backend-defaults
## 0.1.12
### Patch Changes
- Updated dependencies
- @backstage/backend-common@0.19.1
- @backstage/backend-app-api@0.4.5
- @backstage/backend-plugin-api@0.5.4
## 0.1.12-next.0
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/backend-defaults",
"description": "Backend defaults used by Backstage backend apps",
"version": "0.1.12-next.0",
"version": "0.1.12",
"main": "src/index.ts",
"types": "src/index.ts",
"publishConfig": {
+31
View File
@@ -1,5 +1,36 @@
# example-backend-next
## 0.0.13
### Patch Changes
- Updated dependencies
- @backstage/plugin-kubernetes-backend@0.11.2
- @backstage/plugin-badges-backend@0.2.2
- @backstage/plugin-devtools-backend@0.1.2
- @backstage/plugin-scaffolder-backend@1.15.1
- @backstage/plugin-catalog-backend-module-unprocessed@0.1.1
- @backstage/plugin-azure-devops-backend@0.3.26
- @backstage/plugin-linguist-backend@0.3.1
- @backstage/plugin-adr-backend@0.3.5
- @backstage/plugin-lighthouse-backend@0.2.3
- @backstage/plugin-entity-feedback-backend@0.1.5
- @backstage/plugin-catalog-backend@1.11.0
- @backstage/backend-defaults@0.1.12
- @backstage/backend-tasks@0.5.4
- @backstage/plugin-app-backend@0.3.47
- @backstage/plugin-auth-node@0.2.16
- @backstage/plugin-permission-backend@0.5.22
- @backstage/plugin-permission-common@0.7.7
- @backstage/plugin-permission-node@0.7.10
- @backstage/plugin-search-backend@1.3.3
- @backstage/plugin-search-backend-module-catalog@0.1.3
- @backstage/plugin-search-backend-module-explore@0.1.3
- @backstage/plugin-search-backend-module-techdocs@0.1.3
- @backstage/plugin-search-backend-node@1.2.3
- @backstage/plugin-techdocs-backend@1.6.4
- @backstage/plugin-todo-backend@0.1.44
## 0.0.13-next.2
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "example-backend-next",
"version": "0.0.13-next.2",
"version": "0.0.13",
"main": "dist/index.cjs.js",
"types": "src/index.ts",
"license": "Apache-2.0",
+51 -7
View File
@@ -13,16 +13,56 @@ This package is meant to provide a typed Express router for an OpenAPI spec. Bas
2. In your plugin's `src/service/createRouter.ts`,
```ts
import { ApiRouter } from `@backstage/backend-openapi-utils`;
import spec from '../schema/openapi.generated';
import { createOpenApiRouter } from '../schema/openapi.generated';
// ...
export function createRouter() {
const router = Router() as ApiRouter<typeof spec>;
// ...
return router;
const router = createOpenApiRouter();
// add routes to router, it's just an express router.
return router;
}
```
3. Add `@backstage/backend-openapi-utils` to your `package.json`'s `dependencies`.
Why do I need to add this to `dependencies`? If you check the `src/schema/openapi.generated.ts` file, we're creating a router stub for you with the `@backstage/backend-openapi-utils` package.
### Customization
If the out of the box `router` doesn't work, you can do the following,
```ts
import { createOpenApiRouter } from '../schema/openapi.generated';
// ...
export function createRouter() {
// See https://github.com/cdimascio/express-openapi-validator/wiki/Documentation for available options.
const router = createOpenApiRouter(validatorOptions);
// add routes to router, it's just an express router.
return router;
}
```
If you need even more control -- say for example you wanted to update the spec at runtime -- you can do the following,
```ts
import { spec } from '../schema/openapi.generated';
import { createValidatedOpenApiRouter } from '@backstage/backend-openapi-utils';
// ...
export function createRouter() {
// Update the spec here.
const newSpec = { ...spec, myproperty123: 123 };
// See https://github.com/cdimascio/express-openapi-validator/wiki/Documentation for available options.
const router = createValidatedOpenApiRouter<typeof newSpec>(
newSpec,
validatorOptions,
);
// add routes to router, it's just an express router.
return router;
}
```
## INTERNAL
### Limitations
1. `as const` makes all fields `readonly`
@@ -40,6 +80,10 @@ Router() as ApiRouter<DeepWriteable<typeof spec>>
## Future Work
### Runtime validation
### Response Validation
Using a package like [`express-openapi-validator`](https://www.npmjs.com/package/express-openapi-validator), would allow us to remove [validation of request bodies with `AJV`](https://github.com/backstage/backstage/blob/e0506af8fc54074a160fb91c83d6cae8172d3bb3/plugins/catalog-backend/src/service/util.ts#L58). However, `AJV` currently doesn't have support for OpenAPI 3.1 and `express-openapi-validator` enforces full URL matching for paths, meaning it cannot be mounted at the router level.
This is a murky ground and something that will take a while to gain adoption. For now, keep responses in the spec and at the type level, but will need to work to drive adoption of response validation.
### Common Error Format
With the new `createRouter` method, we can start to control error response formats for input and coercion errors.
+36 -19
View File
@@ -7,10 +7,12 @@ import type { ContentObject } from 'openapi3-ts';
import type core from 'express-serve-static-core';
import { FromSchema } from 'json-schema-to-ts';
import { JSONSchema7 } from 'json-schema-to-ts';
import { middleware } from 'express-openapi-validator';
import type { OpenAPIObject } from 'openapi3-ts';
import type { ParameterObject } from 'openapi3-ts';
import type { ReferenceObject } from 'openapi3-ts';
import type { RequestBodyObject } from 'openapi3-ts';
import { RequestHandler } from 'express';
import type { ResponseObject } from 'openapi3-ts';
import { Router } from 'express';
import type { SchemaObject } from 'openapi3-ts';
@@ -79,6 +81,15 @@ type CookieSchema<
Method extends DocPathMethod<Doc, Path>,
> = ParametersSchema<Doc, DocPath<Doc, Path>, Method, ImmutableCookieObject>;
// @public
export function createValidatedOpenApiRouter<T extends RequiredDoc>(
spec: T,
options?: {
validatorOptions?: Partial<Parameters<typeof middleware>['0']>;
middleware?: RequestHandler[];
},
): ApiRouter<T>;
// @public (undocumented)
type DiscriminateUnion<T, K extends keyof T, V extends T[K]> = Extract<
T,
@@ -117,15 +128,18 @@ type DocParameters<
Doc extends RequiredDoc,
Path extends Extract<keyof Doc['paths'], string>,
Method extends keyof Doc['paths'][Path],
> = DocOperation<Doc, Path, Method>['parameters'] extends ReadonlyArray<any>
? {
[Index in keyof DocOperation<
Doc,
Path,
Method
>['parameters']]: DocParameter<Doc, Path, Method, Index>;
}
: never;
> = {
[Index in keyof DocOperation<
Doc,
Path,
Method
>['parameters'] as FromNumberStringToNumber<Index>]: DocParameter<
Doc,
Path,
Method,
Index
>;
};
// @public
type DocPath<
@@ -204,6 +218,10 @@ interface DocRequestMatcher<
// @public (undocumented)
type Filter<T, U> = T extends U ? T : never;
// @public
type FromNumberStringToNumber<NumberString extends string | number | symbol> =
NumberString extends `${infer R extends number}` ? R : never;
// @public (undocumented)
type FullMap<
T extends {
@@ -332,6 +350,7 @@ declare namespace internal {
ImmutablePathObject,
ImmutableSchemaObject,
DocParameter,
FromNumberStringToNumber,
DocParameters,
ParameterSchema,
MapToSchema,
@@ -425,17 +444,15 @@ type ParametersSchema<
Path extends Extract<keyof Doc['paths'], string>,
Method extends keyof Doc['paths'][Path],
FilterType extends ImmutableParameterObject,
> = number extends keyof DocParameters<Doc, Path, Method>
? MapToSchema<
Doc,
FullMap<
MapDiscriminatedUnion<
Filter<DocParameters<Doc, Path, Method>[number], FilterType>,
'name'
>
>
> = MapToSchema<
Doc,
FullMap<
MapDiscriminatedUnion<
Filter<ValueOf<DocParameters<Doc, Path, Method>>, FilterType>,
'name'
>
: never;
>
>;
// @public (undocumented)
type PathDoc = Pick<ImmutableOpenAPIObject, 'paths'>;
+5 -1
View File
@@ -24,17 +24,21 @@
"postpack": "backstage-cli package postpack"
},
"devDependencies": {
"@backstage/cli": "workspace:^"
"@backstage/cli": "workspace:^",
"supertest": "^6.1.3"
},
"files": [
"dist"
],
"dependencies": {
"@backstage/errors": "workspace:^",
"@types/express": "^4.17.6",
"@types/express-serve-static-core": "^4.17.5",
"express": "^4.17.1",
"express-openapi-validator": "^5.0.4",
"express-promise-router": "^4.1.0",
"json-schema-to-ts": "^2.6.2",
"lodash": "^4.17.21",
"openapi3-ts": "^3.1.2"
}
}
@@ -0,0 +1,120 @@
/*
* Copyright 2023 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.
*/
export default {
openapi: '3.0.2',
info: {
title: 'Swagger Petstore - OpenAPI 3.0',
description:
"This is a sample Pet Store Server based on the OpenAPI 3.0 specification. You can find out more about\nSwagger at [http://swagger.io](http://swagger.io). In the third iteration of the pet store, we've switched to the design first approach!\nYou can now help us improve the API whether it's by making changes to the definition itself or to the code.\nThat way, with time, we can improve the API in general, and expose some of the new features in OAS3.\n\nSome useful links:\n- [The Pet Store repository](https://github.com/swagger-api/swagger-petstore)\n- [The source API definition for the Pet Store](https://github.com/swagger-api/swagger-petstore/blob/master/src/main/resources/openapi.yaml)",
termsOfService: 'http://swagger.io/terms/',
contact: {
email: 'apiteam@swagger.io',
},
license: {
name: 'Apache 2.0',
url: 'http://www.apache.org/licenses/LICENSE-2.0.html',
},
version: '1.0.17',
},
externalDocs: {
description: 'Find out more about Swagger',
url: 'http://swagger.io',
},
servers: [
{
url: '/',
},
],
paths: {
'/pet/{petId}': {
get: {
summary: 'Find pet by ID',
description: 'Returns a single pet',
operationId: 'getPetById',
parameters: [
{
name: 'petId',
in: 'path',
description: 'ID of pet to return',
required: true,
schema: {
type: 'integer',
format: 'int64',
},
},
],
responses: {
'200': {
description: 'successful operation',
content: {
'application/json': {
schema: {
$ref: '#/components/schemas/Pet',
},
},
},
},
'400': {
description: 'Invalid ID supplied',
},
'404': {
description: 'Pet not found',
},
},
},
},
},
components: {
schemas: {
Pet: {
required: ['name', 'photoUrls'],
type: 'object',
properties: {
id: {
type: 'integer',
format: 'int64',
example: 10,
},
name: {
type: 'string',
example: 'doggie',
},
photoUrls: {
type: 'array',
xml: {
wrapped: true,
},
items: {
type: 'string',
xml: {
name: 'photoUrl',
},
},
},
status: {
type: 'string',
description: 'pet status in the store',
enum: ['available', 'pending', 'sold'],
},
},
xml: {
name: 'pet',
},
},
},
},
} as const;

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