Merge branch 'master' into caon-docs-compose-stories

This commit is contained in:
Charles de Dreuille
2025-03-25 14:02:05 +00:00
195 changed files with 5450 additions and 2169 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog': minor
---
Added support of filtering based on system columns in catalog table
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/create-app': patch
---
Bumped create-app version.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/cli': patch
---
Bump @module-federation/enhanced ^0.9.0 to fix GHSA-593f-38f6-jp5m
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/canon': patch
---
Updated styles for the Menu component in Canon.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog-unprocessed-entities': patch
---
Added confirmation popup for delete entities in Catalog Unprocessed Entities plugin
+17
View File
@@ -0,0 +1,17 @@
---
'@backstage/plugin-auth-backend-module-oidc-provider': patch
---
Added custom timeout setting for oidc provider
Here is an example of how to use a custom timeout with the configuration:
```yaml
auth:
oidc:
production:
clientId: ${AUTH_GOOGLE_CLIENT_ID}
clientSecret: ${AUTH_GOOGLE_CLIENT_SECRET}
timeout:
seconds: 30
```
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog-backend-module-gitlab': patch
---
add filter for repos by membership and topics
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/canon': patch
---
Add global CSS reset for anchor tags.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder-backend': minor
---
add template-extensions scaffolder service endpoint
+234
View File
@@ -0,0 +1,234 @@
{
"mode": "pre",
"tag": "next",
"initialVersions": {
"example-app": "0.2.107",
"@backstage/app-defaults": "1.6.0",
"example-app-next": "0.0.21",
"app-next-example-plugin": "0.0.21",
"example-backend": "0.0.36",
"@backstage/backend-app-api": "1.2.1",
"@backstage/backend-defaults": "0.8.2",
"@backstage/backend-dev-utils": "0.1.5",
"@backstage/backend-dynamic-feature-service": "0.6.1",
"example-backend-legacy": "0.2.108",
"@backstage/backend-openapi-utils": "0.5.1",
"@backstage/backend-plugin-api": "1.2.1",
"@backstage/backend-test-utils": "1.3.1",
"@backstage/canon": "0.2.0",
"@backstage/catalog-client": "1.9.1",
"@backstage/catalog-model": "1.7.3",
"@backstage/cli": "0.31.0",
"@backstage/cli-common": "0.1.15",
"@backstage/cli-node": "0.2.13",
"@backstage/codemods": "0.1.52",
"@backstage/config": "1.3.2",
"@backstage/config-loader": "1.10.0",
"@backstage/core-app-api": "1.16.0",
"@backstage/core-compat-api": "0.4.0",
"@backstage/core-components": "0.17.0",
"@backstage/core-plugin-api": "1.10.5",
"@backstage/create-app": "0.6.0",
"@backstage/dev-utils": "1.1.8",
"e2e-test": "0.2.26",
"@backstage/e2e-test-utils": "0.1.1",
"@backstage/errors": "1.2.7",
"@backstage/eslint-plugin": "0.1.10",
"@backstage/frontend-app-api": "0.11.0",
"@backstage/frontend-defaults": "0.2.0",
"@internal/frontend": "0.0.7",
"@backstage/frontend-plugin-api": "0.10.0",
"@backstage/frontend-test-utils": "0.3.0",
"@backstage/integration": "1.16.2",
"@backstage/integration-aws-node": "0.1.15",
"@backstage/integration-react": "1.2.5",
"@internal/opaque": "0.0.1",
"@backstage/release-manifests": "0.0.12",
"@backstage/repo-tools": "0.13.1",
"@internal/scaffolder": "0.0.7",
"@techdocs/cli": "1.9.1",
"techdocs-cli-embedded-app": "0.2.106",
"@backstage/test-utils": "1.7.6",
"@backstage/theme": "0.6.4",
"@backstage/types": "1.2.1",
"@backstage/version-bridge": "1.0.11",
"yarn-plugin-backstage": "0.0.4",
"@backstage/plugin-api-docs": "0.12.5",
"@backstage/plugin-api-docs-module-protoc-gen-doc": "0.1.9",
"@backstage/plugin-app": "0.1.7",
"@backstage/plugin-app-backend": "0.5.0",
"@backstage/plugin-app-node": "0.1.31",
"@backstage/plugin-app-visualizer": "0.1.17",
"@backstage/plugin-auth-backend": "0.24.4",
"@backstage/plugin-auth-backend-module-atlassian-provider": "0.4.1",
"@backstage/plugin-auth-backend-module-auth0-provider": "0.2.1",
"@backstage/plugin-auth-backend-module-aws-alb-provider": "0.4.1",
"@backstage/plugin-auth-backend-module-azure-easyauth-provider": "0.2.6",
"@backstage/plugin-auth-backend-module-bitbucket-provider": "0.3.1",
"@backstage/plugin-auth-backend-module-bitbucket-server-provider": "0.2.1",
"@backstage/plugin-auth-backend-module-cloudflare-access-provider": "0.4.1",
"@backstage/plugin-auth-backend-module-gcp-iap-provider": "0.4.1",
"@backstage/plugin-auth-backend-module-github-provider": "0.3.1",
"@backstage/plugin-auth-backend-module-gitlab-provider": "0.3.1",
"@backstage/plugin-auth-backend-module-google-provider": "0.3.1",
"@backstage/plugin-auth-backend-module-guest-provider": "0.2.6",
"@backstage/plugin-auth-backend-module-microsoft-provider": "0.3.1",
"@backstage/plugin-auth-backend-module-oauth2-provider": "0.4.1",
"@backstage/plugin-auth-backend-module-oauth2-proxy-provider": "0.2.6",
"@backstage/plugin-auth-backend-module-oidc-provider": "0.4.1",
"@backstage/plugin-auth-backend-module-okta-provider": "0.2.1",
"@backstage/plugin-auth-backend-module-onelogin-provider": "0.3.1",
"@backstage/plugin-auth-backend-module-pinniped-provider": "0.3.1",
"@backstage/plugin-auth-backend-module-vmware-cloud-provider": "0.5.1",
"@backstage/plugin-auth-node": "0.6.1",
"@backstage/plugin-auth-react": "0.1.13",
"@backstage/plugin-bitbucket-cloud-common": "0.2.28",
"@backstage/plugin-catalog": "1.28.0",
"@backstage/plugin-catalog-backend": "1.32.0",
"@backstage/plugin-catalog-backend-module-aws": "0.4.9",
"@backstage/plugin-catalog-backend-module-azure": "0.3.3",
"@backstage/plugin-catalog-backend-module-backstage-openapi": "0.5.0",
"@backstage/plugin-catalog-backend-module-bitbucket-cloud": "0.4.6",
"@backstage/plugin-catalog-backend-module-bitbucket-server": "0.3.3",
"@backstage/plugin-catalog-backend-module-gcp": "0.3.6",
"@backstage/plugin-catalog-backend-module-gerrit": "0.3.0",
"@backstage/plugin-catalog-backend-module-github": "0.7.11",
"@backstage/plugin-catalog-backend-module-github-org": "0.3.8",
"@backstage/plugin-catalog-backend-module-gitlab": "0.6.4",
"@backstage/plugin-catalog-backend-module-gitlab-org": "0.2.7",
"@backstage/plugin-catalog-backend-module-incremental-ingestion": "0.6.4",
"@backstage/plugin-catalog-backend-module-ldap": "0.11.3",
"@backstage/plugin-catalog-backend-module-logs": "0.1.8",
"@backstage/plugin-catalog-backend-module-msgraph": "0.6.8",
"@backstage/plugin-catalog-backend-module-openapi": "0.2.8",
"@backstage/plugin-catalog-backend-module-puppetdb": "0.2.8",
"@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "0.2.6",
"@backstage/plugin-catalog-backend-module-unprocessed": "0.5.6",
"@backstage/plugin-catalog-common": "1.1.3",
"@backstage/plugin-catalog-graph": "0.4.17",
"@backstage/plugin-catalog-import": "0.12.11",
"@backstage/plugin-catalog-node": "1.16.1",
"@backstage/plugin-catalog-react": "1.16.0",
"@backstage/plugin-catalog-unprocessed-entities": "0.2.15",
"@backstage/plugin-catalog-unprocessed-entities-common": "0.0.7",
"@backstage/plugin-config-schema": "0.1.66",
"@backstage/plugin-devtools": "0.1.25",
"@backstage/plugin-devtools-backend": "0.5.3",
"@backstage/plugin-devtools-common": "0.1.15",
"@backstage/plugin-events-backend": "0.5.0",
"@backstage/plugin-events-backend-module-aws-sqs": "0.4.9",
"@backstage/plugin-events-backend-module-azure": "0.2.18",
"@backstage/plugin-events-backend-module-bitbucket-cloud": "0.2.18",
"@backstage/plugin-events-backend-module-gerrit": "0.2.18",
"@backstage/plugin-events-backend-module-github": "0.2.18",
"@backstage/plugin-events-backend-module-gitlab": "0.2.18",
"@backstage/plugin-events-backend-test-utils": "0.1.42",
"@backstage/plugin-events-node": "0.4.9",
"@internal/plugin-todo-list": "1.0.37",
"@internal/plugin-todo-list-backend": "1.0.37",
"@internal/plugin-todo-list-common": "1.0.24",
"@backstage/plugin-home": "0.8.6",
"@backstage/plugin-home-react": "0.1.24",
"@backstage/plugin-kubernetes": "0.12.5",
"@backstage/plugin-kubernetes-backend": "0.19.4",
"@backstage/plugin-kubernetes-cluster": "0.0.23",
"@backstage/plugin-kubernetes-common": "0.9.4",
"@backstage/plugin-kubernetes-node": "0.2.4",
"@backstage/plugin-kubernetes-react": "0.5.5",
"@backstage/plugin-notifications": "0.5.3",
"@backstage/plugin-notifications-backend": "0.5.4",
"@backstage/plugin-notifications-backend-module-email": "0.3.7",
"@backstage/plugin-notifications-common": "0.0.8",
"@backstage/plugin-notifications-node": "0.2.13",
"@backstage/plugin-org": "0.6.37",
"@backstage/plugin-org-react": "0.1.36",
"@backstage/plugin-permission-backend": "0.5.55",
"@backstage/plugin-permission-backend-module-allow-all-policy": "0.2.6",
"@backstage/plugin-permission-common": "0.8.4",
"@backstage/plugin-permission-node": "0.9.0",
"@backstage/plugin-permission-react": "0.4.32",
"@backstage/plugin-proxy-backend": "0.6.0",
"@backstage/plugin-proxy-node": "0.1.2",
"@backstage/plugin-scaffolder": "1.29.0",
"@backstage/plugin-scaffolder-backend": "1.31.0",
"@backstage/plugin-scaffolder-backend-module-azure": "0.2.7",
"@backstage/plugin-scaffolder-backend-module-bitbucket": "0.3.8",
"@backstage/plugin-scaffolder-backend-module-bitbucket-cloud": "0.2.7",
"@backstage/plugin-scaffolder-backend-module-bitbucket-server": "0.2.7",
"@backstage/plugin-scaffolder-backend-module-confluence-to-markdown": "0.3.7",
"@backstage/plugin-scaffolder-backend-module-cookiecutter": "0.3.8",
"@backstage/plugin-scaffolder-backend-module-gcp": "0.2.7",
"@backstage/plugin-scaffolder-backend-module-gerrit": "0.2.7",
"@backstage/plugin-scaffolder-backend-module-gitea": "0.2.7",
"@backstage/plugin-scaffolder-backend-module-github": "0.6.1",
"@backstage/plugin-scaffolder-backend-module-gitlab": "0.8.1",
"@backstage/plugin-scaffolder-backend-module-notifications": "0.1.8",
"@backstage/plugin-scaffolder-backend-module-rails": "0.5.7",
"@backstage/plugin-scaffolder-backend-module-sentry": "0.2.7",
"@backstage/plugin-scaffolder-backend-module-yeoman": "0.4.8",
"@backstage/plugin-scaffolder-common": "1.5.10",
"@backstage/plugin-scaffolder-node": "0.8.0",
"@backstage/plugin-scaffolder-node-test-utils": "0.2.0",
"@backstage/plugin-scaffolder-react": "1.14.6",
"@backstage/plugin-search": "1.4.24",
"@backstage/plugin-search-backend": "2.0.0",
"@backstage/plugin-search-backend-module-catalog": "0.3.2",
"@backstage/plugin-search-backend-module-elasticsearch": "1.7.0",
"@backstage/plugin-search-backend-module-explore": "0.3.0",
"@backstage/plugin-search-backend-module-pg": "0.5.42",
"@backstage/plugin-search-backend-module-stack-overflow-collator": "0.3.7",
"@backstage/plugin-search-backend-module-techdocs": "0.4.0",
"@backstage/plugin-search-backend-node": "1.3.9",
"@backstage/plugin-search-common": "1.2.17",
"@backstage/plugin-search-react": "1.8.7",
"@backstage/plugin-signals": "0.0.17",
"@backstage/plugin-signals-backend": "0.3.2",
"@backstage/plugin-signals-node": "0.1.18",
"@backstage/plugin-signals-react": "0.0.11",
"@backstage/plugin-techdocs": "1.12.4",
"@backstage/plugin-techdocs-addons-test-utils": "1.0.46",
"@backstage/plugin-techdocs-backend": "2.0.0",
"@backstage/plugin-techdocs-common": "0.1.0",
"@backstage/plugin-techdocs-module-addons-contrib": "1.1.22",
"@backstage/plugin-techdocs-node": "1.13.1",
"@backstage/plugin-techdocs-react": "1.2.15",
"@backstage/plugin-user-settings": "0.8.20",
"@backstage/plugin-user-settings-backend": "0.3.0",
"@backstage/plugin-user-settings-common": "0.0.1"
},
"changesets": [
"chilly-sheep-scream",
"clever-tomatoes-jump",
"create-app-1742907012",
"cuddly-dodos-allow",
"cuddly-kids-sell",
"cuddly-mirrors-ask",
"deep-flies-vanish",
"early-feet-lay",
"every-ties-wink",
"famous-dragons-bake",
"funny-hotels-cut",
"giant-donkeys-punch",
"honest-ties-worry",
"itchy-times-behave",
"large-kings-protect",
"lemon-shoes-enter",
"metal-animals-notice",
"odd-bobcats-hang",
"orange-queens-grin",
"sad-pots-try",
"silver-rocks-invite",
"spotty-towns-show",
"strange-planes-kneel",
"sweet-maps-invent",
"swift-boats-add",
"tame-sloths-brake",
"thin-snails-judge",
"tiny-swans-warn",
"twenty-forks-cheat",
"twenty-walls-join",
"wet-penguins-beg",
"wide-planets-camp",
"witty-planets-sing"
]
}
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/plugin-scaffolder-react': minor
'@backstage/plugin-scaffolder': minor
---
add api to retrieve template extensions info from scaffolder-backend
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog-unprocessed-entities': patch
---
Fixed the `convertTimeToLocalTimezone` function in the FailedEntities component to correctly parse ISO 8601 date strings and set the timezone to the current local timezone.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog-backend-module-incremental-ingestion': patch
---
fixed misleading example location annotations in docs
@@ -74,7 +74,7 @@ jobs:
- name: Cache Comment
if: ${{ steps.event.outputs.ACTION != 'closed' }}
uses: actions/cache@d4323d4df104b026a6aa633fdb11d772146be0bf # v4.2.2
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
with:
path: comment.md
key: ${{ steps.hash.outputs.COMMENT_FILE_HASH }}
@@ -103,7 +103,7 @@ jobs:
- name: Fetch cached Manifests File
id: cache
uses: actions/cache@d4323d4df104b026a6aa633fdb11d772146be0bf # v4
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4
with:
path: comment.md
key: ${{ needs.setup.outputs.comment-cache-key }}
+2 -2
View File
@@ -239,7 +239,7 @@ jobs:
# Use the lower-level cache actions for the success cache, so that we can store the cache even on failed builds
- name: restore backstage-cli cache
uses: actions/cache/restore@d4323d4df104b026a6aa633fdb11d772146be0bf # v4
uses: actions/cache/restore@5a3ec84eff668545956fd18022155c47e93e2684 # v4
with:
path: .cache/backstage-cli
key: ${{ runner.os }}-v${{ matrix.node-version }}-backstage-cli-${{ github.run_id }}
@@ -260,7 +260,7 @@ jobs:
# Always save success cache even if there were failures, that way it can be used in re-triggered builds
- name: save backstage-cli cache
uses: actions/cache/save@d4323d4df104b026a6aa633fdb11d772146be0bf # v4
uses: actions/cache/save@5a3ec84eff668545956fd18022155c47e93e2684 # v4
if: always()
with:
path: .cache/backstage-cli
+1 -1
View File
@@ -94,7 +94,7 @@ jobs:
run: yarn backstage-cli config:check --lax
- name: backstage-cli cache
uses: actions/cache@d4323d4df104b026a6aa633fdb11d772146be0bf # v4
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4
with:
path: .cache/backstage-cli
key: ${{ runner.os }}-v${{ matrix.node-version }}-backstage-cli-${{ github.run_id }}
+1 -1
View File
@@ -18,7 +18,7 @@
"@uiw/codemirror-themes": "^4.23.7",
"@uiw/react-codemirror": "^4.23.7",
"motion": "^12.4.1",
"next": "14.2.23",
"next": "14.2.25",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-frame-component": "^5.2.7",
+46 -46
View File
@@ -501,10 +501,10 @@ __metadata:
languageName: node
linkType: hard
"@next/env@npm:14.2.23":
version: 14.2.23
resolution: "@next/env@npm:14.2.23"
checksum: dad74ff7de68992a0753f728a5b926ed6eb0af8a62deece6bbb32ba254b1f7d870e256b61db8d4c40fa811695cfc5e69ba964339f3cb8b40237cf9c28dfe747f
"@next/env@npm:14.2.25":
version: 14.2.25
resolution: "@next/env@npm:14.2.25"
checksum: c937d4e8b62c7ae9c74bd607888e791b78445e93d523d22d0838e816c3fbeb7b1b62766d110ef235229e4c4ca8587f493e6ec761eb0a2c774dabaee2b58f581b
languageName: node
linkType: hard
@@ -534,65 +534,65 @@ __metadata:
languageName: node
linkType: hard
"@next/swc-darwin-arm64@npm:14.2.23":
version: 14.2.23
resolution: "@next/swc-darwin-arm64@npm:14.2.23"
"@next/swc-darwin-arm64@npm:14.2.25":
version: 14.2.25
resolution: "@next/swc-darwin-arm64@npm:14.2.25"
conditions: os=darwin & cpu=arm64
languageName: node
linkType: hard
"@next/swc-darwin-x64@npm:14.2.23":
version: 14.2.23
resolution: "@next/swc-darwin-x64@npm:14.2.23"
"@next/swc-darwin-x64@npm:14.2.25":
version: 14.2.25
resolution: "@next/swc-darwin-x64@npm:14.2.25"
conditions: os=darwin & cpu=x64
languageName: node
linkType: hard
"@next/swc-linux-arm64-gnu@npm:14.2.23":
version: 14.2.23
resolution: "@next/swc-linux-arm64-gnu@npm:14.2.23"
"@next/swc-linux-arm64-gnu@npm:14.2.25":
version: 14.2.25
resolution: "@next/swc-linux-arm64-gnu@npm:14.2.25"
conditions: os=linux & cpu=arm64 & libc=glibc
languageName: node
linkType: hard
"@next/swc-linux-arm64-musl@npm:14.2.23":
version: 14.2.23
resolution: "@next/swc-linux-arm64-musl@npm:14.2.23"
"@next/swc-linux-arm64-musl@npm:14.2.25":
version: 14.2.25
resolution: "@next/swc-linux-arm64-musl@npm:14.2.25"
conditions: os=linux & cpu=arm64 & libc=musl
languageName: node
linkType: hard
"@next/swc-linux-x64-gnu@npm:14.2.23":
version: 14.2.23
resolution: "@next/swc-linux-x64-gnu@npm:14.2.23"
"@next/swc-linux-x64-gnu@npm:14.2.25":
version: 14.2.25
resolution: "@next/swc-linux-x64-gnu@npm:14.2.25"
conditions: os=linux & cpu=x64 & libc=glibc
languageName: node
linkType: hard
"@next/swc-linux-x64-musl@npm:14.2.23":
version: 14.2.23
resolution: "@next/swc-linux-x64-musl@npm:14.2.23"
"@next/swc-linux-x64-musl@npm:14.2.25":
version: 14.2.25
resolution: "@next/swc-linux-x64-musl@npm:14.2.25"
conditions: os=linux & cpu=x64 & libc=musl
languageName: node
linkType: hard
"@next/swc-win32-arm64-msvc@npm:14.2.23":
version: 14.2.23
resolution: "@next/swc-win32-arm64-msvc@npm:14.2.23"
"@next/swc-win32-arm64-msvc@npm:14.2.25":
version: 14.2.25
resolution: "@next/swc-win32-arm64-msvc@npm:14.2.25"
conditions: os=win32 & cpu=arm64
languageName: node
linkType: hard
"@next/swc-win32-ia32-msvc@npm:14.2.23":
version: 14.2.23
resolution: "@next/swc-win32-ia32-msvc@npm:14.2.23"
"@next/swc-win32-ia32-msvc@npm:14.2.25":
version: 14.2.25
resolution: "@next/swc-win32-ia32-msvc@npm:14.2.25"
conditions: os=win32 & cpu=ia32
languageName: node
linkType: hard
"@next/swc-win32-x64-msvc@npm:14.2.23":
version: 14.2.23
resolution: "@next/swc-win32-x64-msvc@npm:14.2.23"
"@next/swc-win32-x64-msvc@npm:14.2.25":
version: 14.2.25
resolution: "@next/swc-win32-x64-msvc@npm:14.2.25"
conditions: os=win32 & cpu=x64
languageName: node
linkType: hard
@@ -1502,7 +1502,7 @@ __metadata:
eslint-config-next: 14.2.23
lightningcss: ^1.28.2
motion: ^12.4.1
next: 14.2.23
next: 14.2.25
react: ^18.0.2
react-dom: ^18.0.2
react-frame-component: ^5.2.7
@@ -4176,20 +4176,20 @@ __metadata:
languageName: node
linkType: hard
"next@npm:14.2.23":
version: 14.2.23
resolution: "next@npm:14.2.23"
"next@npm:14.2.25":
version: 14.2.25
resolution: "next@npm:14.2.25"
dependencies:
"@next/env": 14.2.23
"@next/swc-darwin-arm64": 14.2.23
"@next/swc-darwin-x64": 14.2.23
"@next/swc-linux-arm64-gnu": 14.2.23
"@next/swc-linux-arm64-musl": 14.2.23
"@next/swc-linux-x64-gnu": 14.2.23
"@next/swc-linux-x64-musl": 14.2.23
"@next/swc-win32-arm64-msvc": 14.2.23
"@next/swc-win32-ia32-msvc": 14.2.23
"@next/swc-win32-x64-msvc": 14.2.23
"@next/env": 14.2.25
"@next/swc-darwin-arm64": 14.2.25
"@next/swc-darwin-x64": 14.2.25
"@next/swc-linux-arm64-gnu": 14.2.25
"@next/swc-linux-arm64-musl": 14.2.25
"@next/swc-linux-x64-gnu": 14.2.25
"@next/swc-linux-x64-musl": 14.2.25
"@next/swc-win32-arm64-msvc": 14.2.25
"@next/swc-win32-ia32-msvc": 14.2.25
"@next/swc-win32-x64-msvc": 14.2.25
"@swc/helpers": 0.5.5
busboy: 1.6.0
caniuse-lite: ^1.0.30001579
@@ -4230,7 +4230,7 @@ __metadata:
optional: true
bin:
next: dist/bin/next
checksum: 4f9f744439fb860ba7c64ae1c61bc361bdd36e41d56760c52eabb404f4143c854b78ba9a79b7aefc322d93edbbd66d966cbdaf86772a88a8bf2e6b289987f14f
checksum: ca47d0f1d41351adaf75a37c8e8ce39dd76ebc62b054266ef84b5fc1ea41241ad5f16ab7a1ca47b6613b2c3e4c6f48b179f8cd3b0f087912ec7164c4e72981f0
languageName: node
linkType: hard
@@ -1157,13 +1157,21 @@ export class MyIncrementalEntityProvider
The last step is to implement the actual `next` method that will accept the cursor, call the API, process the result and return the result.
```ts
import {
ANNOTATION_LOCATION,
ANNOTATION_ORIGIN_LOCATION,
} from '@backstage/catalog-model';
import { IncrementalEntityProvider } from '@backstage/plugin-catalog-backend-module-incremental-ingestion';
export class MyIncrementalEntityProvider
implements IncrementalEntityProvider<Cursor, Context>
{
private readonly token: string;
private readonly mySource: string;
constructor(token: string) {
constructor(token: string, mySource: string) {
this.token = token;
this.mySource = mySource;
}
getProviderName() {
@@ -1181,6 +1189,7 @@ export class MyIncrementalEntityProvider
cursor: Cursor = { page: 1 },
): Promise<EntityIteratorResult<Cursor>> {
const { apiClient } = context;
const location = `${this.getProviderName()}:${this.mySource}`;
// call your API with the current cursor
const data = await apiClient.getServices(cursor);
@@ -1200,8 +1209,8 @@ export class MyIncrementalEntityProvider
name: item.name,
annotations: {
// You need to define these, otherwise they'll fail validation
[ANNOTATION_LOCATION]: this.getProviderName(),
[ANNOTATION_ORIGIN_LOCATION]: this.getProviderName(),
[ANNOTATION_LOCATION]: location,
[ANNOTATION_ORIGIN_LOCATION]: location,
},
},
spec: {
+17 -17
View File
@@ -8,7 +8,7 @@ The Backstage Notifications System provides a way for plugins and external servi
These notifications are displayed in the dedicated page of the Backstage frontend UI or by frontend plugins per specific scenarios.
Additionally, notifications can be sent to external channels (like email) via "processors" implemented within plugins.
Notifications can be optionally integrated with the signals (a push mechanism) to ensure users receive them immediately.
Notifications can be optionally extended with the signals plugin, which provides a push mechanism to ensure users receive notifications immediately.
### Upgrade to the latest version of Backstage
@@ -27,8 +27,8 @@ There are two basic types of notifications:
Example of use-cases:
- System-wide announcements or alerts
- Notifications for component owners: e.g., build failures, successful deployments, new vulnerabilities
- Notifications for individuals: e.g., updates you have subscribed to, new required training courses
- Notifications for component owners, e.g. build failures, successful deployments, new vulnerabilities
- Notifications for individuals, e.g. updates you have subscribed to, new required training courses
- Notifications pertaining to a particular entity in the catalog: A notification might apply to an entity and the owning team.
## Installation
@@ -87,17 +87,17 @@ import { NotificationsPage } from '@backstage/plugin-notifications';
### Optional: Add Signals
The use of signals is optional but improves user experience.
The use of signals is optional but improves the user experience.
#### Optional: Add Signals Backend
Add Signals to your backend by first adding the backend package:
Add signals to your backend by first adding the backend package:
```bash title="From your Backstage root directory"
yarn --cwd packages/backend add @backstage/plugin-signals-backend
```
The add the signals to your backend:
Then add the signals plugin to your backend:
```ts title="packages/backend/src/index.ts"
const backend = createBackend();
@@ -156,19 +156,19 @@ add the `UserNotificationSettingsCard` to your frontend.
You can customize the origin names shown in the UI by passing an object where the keys are the origins and the values are the names you want to show in the UI.
Each notification processor will receive its own column in the settings page, where the user can enable or disable notifications from that processor.
Each notification processor will receive its own row in the settings page, where the user can enable or disable notifications from that processor.
## Additional info
An example of a backend plugin sending notifications can be found in https://github.com/backstage/backstage/tree/master/plugins/scaffolder-backend-module-notifications.
An example of a backend plugin sending notifications can be found in the [`@backstage/plugin-scaffolder-backend-module-notifications` package](https://github.com/backstage/backstage/tree/master/plugins/scaffolder-backend-module-notifications).
Sources of the notifications and signal plugins:
Sources of the notifications and signals plugins:
- https://github.com/backstage/backstage/blob/master/plugins/notifications
- https://github.com/backstage/backstage/blob/master/plugins/notifications-backend
- https://github.com/backstage/backstage/blob/master/plugins/notifications-common
- https://github.com/backstage/backstage/blob/master/plugins/notifications-node
- https://github.com/backstage/backstage/blob/master/plugins/signals-backend
- https://github.com/backstage/backstage/blob/master/plugins/signals
- https://github.com/backstage/backstage/blob/master/plugins/signals-node
- https://github.com/backstage/backstage/blob/master/plugins/signals-react
- [notifications](https://github.com/backstage/backstage/blob/master/plugins/notifications)
- [notifications-backend](https://github.com/backstage/backstage/blob/master/plugins/notifications-backend)
- [notifications-common](https://github.com/backstage/backstage/blob/master/plugins/notifications-common)
- [notifications-node](https://github.com/backstage/backstage/blob/master/plugins/notifications-node)
- [signals-backend](https://github.com/backstage/backstage/blob/master/plugins/signals-backend)
- [signals](https://github.com/backstage/backstage/blob/master/plugins/signals)
- [signals-node](https://github.com/backstage/backstage/blob/master/plugins/signals-node)
- [signals-react](https://github.com/backstage/backstage/blob/master/plugins/signals-react)
+3 -3
View File
@@ -6,7 +6,7 @@ description: How to use the notifications and signals
## Notifications Backend
The Notifications backend plugin provides an API to create notifications, list notifications per logged-in user, and search based on parameters.
The notifications backend plugin provides an API to create notifications, list notifications per logged-in user, and search based on parameters.
The plugin uses a relational [database](https://backstage.io/docs/getting-started/config/database) for persistence; no specifics are introduced in this context.
@@ -26,7 +26,7 @@ In the `packages/app/src/components/Root/Root.tsx`, tweak the [properties](https
## Usage
New notifications can be sent either by a backend plugin or an external service through the REST API.
New notifications can be sent either by a backend plugin or by an external service through the REST API.
## Backend
@@ -71,7 +71,7 @@ await notificationService.send({
});
```
Refer the [API documentation](https://github.com/backstage/backstage/blob/master/plugins/notifications-node/report.api.md) for further details.
Consult the [API documentation](https://github.com/backstage/backstage/blob/master/plugins/notifications-node/report.api.md) for further details.
### External Services
+1 -1
View File
@@ -21,7 +21,7 @@ The backend supplies a central logging service,
[`rootLogger`](../backend-system/core-services/root-logger.md), as well as a plugin
based logger, [`logger`](../backend-system/core-services/logger.md) from `coreServices`.
To add additional granularity to your logs, you can create children from the plugin
based logger, using the `.child()` method and provide is with JSON data. For example,
based logger, using the `.child()` method and provide it with JSON data. For example,
if you wanted to log items for a specific span in your plugin, you could do
```ts
File diff suppressed because it is too large Load Diff
@@ -10,7 +10,7 @@ author: Taylor Webber, Staff Engineer, Stash
{/* truncate */}
At [Stash](stash.com), our mission is to give people the confidence to invest for a better life. Our app simplifies investing for the middle class who may be less experienced with traditional investing and retirement planning. Our customers trust us with their money, and with that, rely on us to provide a responsive and quality experience that works every time.
At [Stash](https://www.stash.com), our mission is to give people the confidence to invest for a better life. Our app simplifies investing for the middle class who may be less experienced with traditional investing and retirement planning. Our customers trust us with their money, and with that, rely on us to provide a responsive and quality experience that works every time.
It isn't revolutionary to say that monitoring the health of a software application is critical for ensuring its reliability and performance in service of customers' needs. However, in a distributed architecture like microservices, tracking ownership and monitoring application health across the system quickly becomes complex. The difficulties are further compounded when leveraging multiple SaaS products, which is common in modern development but specifically so for fintechs like Stash that integrate best-of-breed software in novel ways, as we do across our platform.
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "root",
"version": "1.37.0",
"version": "1.38.0-next.0",
"backstage": {
"cli": {
"new": {
+46
View File
@@ -1,5 +1,51 @@
# example-app-next
## 0.0.22-next.0
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog@1.29.0-next.0
- @backstage/cli@0.32.0-next.0
- @backstage/canon@0.2.1-next.0
- @backstage/plugin-catalog-unprocessed-entities@0.2.16-next.0
- @backstage/plugin-scaffolder-react@1.15.0-next.0
- @backstage/plugin-catalog-react@1.16.1-next.0
- @backstage/plugin-scaffolder@1.30.0-next.0
- @backstage/core-compat-api@0.4.1-next.0
- @backstage/plugin-api-docs@0.12.6-next.0
- @backstage/plugin-catalog-graph@0.4.18-next.0
- @backstage/plugin-catalog-import@0.12.12-next.0
- @backstage/plugin-org@0.6.38-next.0
- @backstage/plugin-techdocs@1.12.5-next.0
- @backstage/plugin-user-settings@0.8.21-next.0
- @backstage/app-defaults@1.6.0
- @backstage/catalog-model@1.7.3
- @backstage/config@1.3.2
- @backstage/core-app-api@1.16.0
- @backstage/core-components@0.17.0
- @backstage/core-plugin-api@1.10.5
- @backstage/frontend-app-api@0.11.0
- @backstage/frontend-defaults@0.2.0
- @backstage/frontend-plugin-api@0.10.0
- @backstage/integration-react@1.2.5
- @backstage/theme@0.6.4
- @backstage/plugin-app@0.1.7
- @backstage/plugin-app-visualizer@0.1.17
- @backstage/plugin-auth-react@0.1.13
- @backstage/plugin-catalog-common@1.1.3
- @backstage/plugin-home@0.8.7-next.0
- @backstage/plugin-kubernetes@0.12.6-next.0
- @backstage/plugin-kubernetes-cluster@0.0.24-next.0
- @backstage/plugin-notifications@0.5.4-next.0
- @backstage/plugin-permission-react@0.4.32
- @backstage/plugin-search@1.4.25-next.0
- @backstage/plugin-search-common@1.2.17
- @backstage/plugin-search-react@1.8.7
- @backstage/plugin-signals@0.0.17
- @backstage/plugin-techdocs-module-addons-contrib@1.1.22
- @backstage/plugin-techdocs-react@1.2.15
## 0.0.21
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "example-app-next",
"version": "0.0.21",
"version": "0.0.22-next.0",
"backstage": {
"role": "frontend"
},
+42
View File
@@ -1,5 +1,47 @@
# example-app
## 0.2.108-next.0
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog@1.29.0-next.0
- @backstage/cli@0.32.0-next.0
- @backstage/canon@0.2.1-next.0
- @backstage/plugin-catalog-unprocessed-entities@0.2.16-next.0
- @backstage/plugin-scaffolder-react@1.15.0-next.0
- @backstage/plugin-catalog-react@1.16.1-next.0
- @backstage/plugin-scaffolder@1.30.0-next.0
- @backstage/plugin-api-docs@0.12.6-next.0
- @backstage/plugin-catalog-graph@0.4.18-next.0
- @backstage/plugin-catalog-import@0.12.12-next.0
- @backstage/plugin-org@0.6.38-next.0
- @backstage/plugin-techdocs@1.12.5-next.0
- @backstage/plugin-user-settings@0.8.21-next.0
- @backstage/app-defaults@1.6.0
- @backstage/catalog-model@1.7.3
- @backstage/config@1.3.2
- @backstage/core-app-api@1.16.0
- @backstage/core-components@0.17.0
- @backstage/core-plugin-api@1.10.5
- @backstage/frontend-app-api@0.11.0
- @backstage/integration-react@1.2.5
- @backstage/theme@0.6.4
- @backstage/plugin-auth-react@0.1.13
- @backstage/plugin-catalog-common@1.1.3
- @backstage/plugin-devtools@0.1.26-next.0
- @backstage/plugin-home@0.8.7-next.0
- @backstage/plugin-kubernetes@0.12.6-next.0
- @backstage/plugin-kubernetes-cluster@0.0.24-next.0
- @backstage/plugin-notifications@0.5.4-next.0
- @backstage/plugin-permission-react@0.4.32
- @backstage/plugin-search@1.4.25-next.0
- @backstage/plugin-search-common@1.2.17
- @backstage/plugin-search-react@1.8.7
- @backstage/plugin-signals@0.0.17
- @backstage/plugin-techdocs-module-addons-contrib@1.1.22
- @backstage/plugin-techdocs-react@1.2.15
## 0.2.107
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "example-app",
"version": "0.2.107",
"version": "0.2.108-next.0",
"backstage": {
"role": "frontend"
},
+23
View File
@@ -1,5 +1,28 @@
# @backstage/backend-defaults
## 0.9.0-next.0
### Minor Changes
- 01edf6e: Allow pass through of redis client and cluster options to Cache core service
### Patch Changes
- Updated dependencies
- @backstage/backend-app-api@1.2.1
- @backstage/plugin-auth-node@0.6.1
- @backstage/plugin-permission-node@0.9.0
- @backstage/backend-dev-utils@0.1.5
- @backstage/backend-plugin-api@1.2.1
- @backstage/cli-node@0.2.13
- @backstage/config@1.3.2
- @backstage/config-loader@1.10.0
- @backstage/errors@1.2.7
- @backstage/integration@1.16.2
- @backstage/integration-aws-node@0.1.15
- @backstage/types@1.2.1
- @backstage/plugin-events-node@0.4.9
## 0.8.2
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@backstage/backend-defaults",
"version": "0.8.2",
"version": "0.9.0-next.0",
"description": "Backend defaults used by Backstage backend apps",
"backstage": {
"role": "node-library"
@@ -1,5 +1,29 @@
# @backstage/backend-dynamic-feature-service
## 0.6.2-next.0
### Patch Changes
- Updated dependencies
- @backstage/backend-defaults@0.9.0-next.0
- @backstage/plugin-scaffolder-node@0.8.1-next.0
- @backstage/plugin-auth-node@0.6.1
- @backstage/plugin-catalog-backend@1.32.0
- @backstage/plugin-events-backend@0.5.0
- @backstage/plugin-permission-node@0.9.0
- @backstage/plugin-search-backend-node@1.3.9
- @backstage/backend-plugin-api@1.2.1
- @backstage/cli-common@0.1.15
- @backstage/cli-node@0.2.13
- @backstage/config@1.3.2
- @backstage/config-loader@1.10.0
- @backstage/errors@1.2.7
- @backstage/types@1.2.1
- @backstage/plugin-app-node@0.1.31
- @backstage/plugin-events-node@0.4.9
- @backstage/plugin-permission-common@0.8.4
- @backstage/plugin-search-common@1.2.17
## 0.6.1
### Patch Changes
@@ -1,6 +1,6 @@
{
"name": "@backstage/backend-dynamic-feature-service",
"version": "0.6.1",
"version": "0.6.2-next.0",
"description": "Backstage dynamic feature service",
"backstage": {
"role": "node-library"
+38
View File
@@ -1,5 +1,43 @@
# example-backend-legacy
## 0.2.109-next.0
### Patch Changes
- Updated dependencies
- @backstage/backend-defaults@0.9.0-next.0
- @backstage/plugin-scaffolder-backend@1.32.0-next.0
- @backstage/plugin-auth-backend@0.24.5-next.0
- @backstage/plugin-auth-node@0.6.1
- @backstage/plugin-catalog-backend@1.32.0
- @backstage/plugin-events-backend@0.5.0
- @backstage/plugin-kubernetes-backend@0.19.4
- @backstage/plugin-permission-backend@0.5.55
- @backstage/plugin-permission-node@0.9.0
- @backstage/plugin-search-backend@2.0.1-next.0
- @backstage/plugin-search-backend-node@1.3.9
- @backstage/plugin-signals-backend@0.3.2
- @backstage/plugin-techdocs-backend@2.0.1-next.0
- @backstage/plugin-search-backend-module-techdocs@0.4.1-next.0
- @backstage/backend-plugin-api@1.2.1
- @backstage/catalog-client@1.9.1
- @backstage/catalog-model@1.7.3
- @backstage/config@1.3.2
- @backstage/integration@1.16.2
- @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.6
- @backstage/plugin-catalog-backend-module-unprocessed@0.5.6
- @backstage/plugin-catalog-node@1.16.1
- @backstage/plugin-events-node@0.4.9
- @backstage/plugin-permission-common@0.8.4
- @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.8-next.0
- @backstage/plugin-scaffolder-backend-module-gitlab@0.8.2-next.0
- @backstage/plugin-scaffolder-backend-module-rails@0.5.8-next.0
- @backstage/plugin-search-backend-module-catalog@0.3.2
- @backstage/plugin-search-backend-module-elasticsearch@1.7.0
- @backstage/plugin-search-backend-module-explore@0.3.0
- @backstage/plugin-search-backend-module-pg@0.5.42
- @backstage/plugin-signals-node@0.1.18
## 0.2.108
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "example-backend-legacy",
"version": "0.2.108",
"version": "0.2.109-next.0",
"backstage": {
"role": "backend"
},
+14
View File
@@ -1,5 +1,19 @@
# @backstage/backend-test-utils
## 1.3.2-next.0
### Patch Changes
- Updated dependencies
- @backstage/backend-defaults@0.9.0-next.0
- @backstage/backend-app-api@1.2.1
- @backstage/plugin-auth-node@0.6.1
- @backstage/backend-plugin-api@1.2.1
- @backstage/config@1.3.2
- @backstage/errors@1.2.7
- @backstage/types@1.2.1
- @backstage/plugin-events-node@0.4.9
## 1.3.1
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@backstage/backend-test-utils",
"version": "1.3.1",
"version": "1.3.2-next.0",
"description": "Test helpers library for Backstage backends",
"backstage": {
"role": "node-library"
+38
View File
@@ -1,5 +1,43 @@
# example-backend
## 0.0.37-next.0
### Patch Changes
- Updated dependencies
- @backstage/backend-defaults@0.9.0-next.0
- @backstage/plugin-scaffolder-backend-module-github@0.6.2-next.0
- @backstage/plugin-scaffolder-backend@1.32.0-next.0
- @backstage/plugin-scaffolder-backend-module-notifications@0.1.9-next.0
- @backstage/plugin-app-backend@0.5.0
- @backstage/plugin-auth-backend@0.24.5-next.0
- @backstage/plugin-auth-backend-module-github-provider@0.3.1
- @backstage/plugin-auth-node@0.6.1
- @backstage/plugin-catalog-backend@1.32.0
- @backstage/plugin-devtools-backend@0.5.4-next.0
- @backstage/plugin-events-backend@0.5.0
- @backstage/plugin-kubernetes-backend@0.19.4
- @backstage/plugin-notifications-backend@0.5.4
- @backstage/plugin-permission-backend@0.5.55
- @backstage/plugin-permission-node@0.9.0
- @backstage/plugin-proxy-backend@0.6.0
- @backstage/plugin-search-backend@2.0.1-next.0
- @backstage/plugin-search-backend-node@1.3.9
- @backstage/plugin-signals-backend@0.3.2
- @backstage/plugin-techdocs-backend@2.0.1-next.0
- @backstage/plugin-search-backend-module-techdocs@0.4.1-next.0
- @backstage/backend-plugin-api@1.2.1
- @backstage/catalog-model@1.7.3
- @backstage/plugin-auth-backend-module-guest-provider@0.2.6
- @backstage/plugin-catalog-backend-module-backstage-openapi@0.5.0
- @backstage/plugin-catalog-backend-module-openapi@0.2.8
- @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.6
- @backstage/plugin-catalog-backend-module-unprocessed@0.5.6
- @backstage/plugin-permission-backend-module-allow-all-policy@0.2.6
- @backstage/plugin-permission-common@0.8.4
- @backstage/plugin-search-backend-module-catalog@0.3.2
- @backstage/plugin-search-backend-module-explore@0.3.0
## 0.0.36
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "example-backend",
"version": "0.0.36",
"version": "0.0.37-next.0",
"backstage": {
"role": "backend"
},
+8
View File
@@ -1,5 +1,13 @@
# @backstage/canon
## 0.2.1-next.0
### Patch Changes
- 6af7b16: Updated styles for the Menu component in Canon.
- 513477f: Add global CSS reset for anchor tags.
- 05a5003: Fix the Icon component when the name is not found to return null instead of an empty SVG.
## 0.2.0
### Minor Changes
+19 -70
View File
@@ -481,101 +481,50 @@
margin: 0;
}
.canon-MenuTrigger {
box-sizing: border-box;
border: 1px solid var(--color-gray-200);
background-color: var(--color-gray-50);
height: 2.5rem;
color: var(--color-gray-900);
user-select: none;
border-radius: .375rem;
outline: 0;
justify-content: center;
align-items: center;
gap: .375rem;
margin: 0;
padding: 0 .875rem;
font-family: inherit;
font-size: 1rem;
font-weight: 500;
line-height: 1.5rem;
display: flex;
@media (hover: hover) {
&:hover {
background-color: var(--color-gray-100);
}
}
&:active, &[data-popup-open] {
background-color: var(--color-gray-100);
}
&:focus-visible {
outline: 2px solid var(--color-blue);
outline-offset: -1px;
}
}
.canon-MenuPositioner {
outline: 0;
}
.canon-MenuPopup {
box-sizing: border-box;
background-color: var(--canon-bg-elevated);
color: var(--color-fg-primary);
padding: var(--canon-space-2);
background-color: var(--canon-bg-surface-1);
border: 1px solid var(--canon-border);
color: var(--canon-fg-primary);
transform-origin: var(--transform-origin);
border-radius: .375rem;
padding-block: .25rem;
outline: none;
max-width: 340px;
transition: transform .15s, opacity .15s;
overflow: hidden;
&[data-starting-style], &[data-ending-style] {
opacity: 0;
transform: scale(.9);
}
@media (prefers-color-scheme: light) {
& {
outline: 1px solid var(--color-gray-200);
box-shadow: 0px 10px 15px -3px var(--color-gray-200), 0px 4px 6px -4px var(--color-gray-200);
}
}
@media (prefers-color-scheme: dark) {
& {
outline: 1px solid var(--color-gray-300);
outline-offset: -1px;
}
}
}
.canon-MenuItem {
cursor: default;
user-select: none;
padding-block: .5rem;
gap: var(--canon-space-2);
color: var(--canon-fg-primary);
border-radius: var(--canon-radius-2);
padding: var(--canon-space-2) var(--canon-space-2);
padding-right: var(--canon-space-4);
cursor: pointer;
outline: 0;
padding-left: 1rem;
padding-right: 2rem;
font-size: .875rem;
line-height: 1rem;
text-decoration: none;
display: flex;
&:last-child {
border-bottom: none;
}
&[data-highlighted] {
z-index: 0;
color: var(--color-gray-50);
background-color: var(--canon-bg-tint-hover);
position: relative;
}
&[data-highlighted]:before {
content: "";
z-index: -1;
background-color: var(--color-gray-900);
border-radius: .25rem;
position: absolute;
inset-block: 0;
inset-inline: .25rem;
}
}
.canon-MenuSeparator {
+5
View File
@@ -9083,6 +9083,11 @@
}
}
:where(a) {
color: inherit;
text-decoration: none;
}
:root {
--canon-font-regular: system-ui;
--canon-font-monospace: ui-monospace, "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace;
+19 -70
View File
@@ -1,98 +1,47 @@
.canon-MenuTrigger {
box-sizing: border-box;
border: 1px solid var(--color-gray-200);
background-color: var(--color-gray-50);
height: 2.5rem;
color: var(--color-gray-900);
user-select: none;
border-radius: .375rem;
outline: 0;
justify-content: center;
align-items: center;
gap: .375rem;
margin: 0;
padding: 0 .875rem;
font-family: inherit;
font-size: 1rem;
font-weight: 500;
line-height: 1.5rem;
display: flex;
@media (hover: hover) {
&:hover {
background-color: var(--color-gray-100);
}
}
&:active, &[data-popup-open] {
background-color: var(--color-gray-100);
}
&:focus-visible {
outline: 2px solid var(--color-blue);
outline-offset: -1px;
}
}
.canon-MenuPositioner {
outline: 0;
}
.canon-MenuPopup {
box-sizing: border-box;
background-color: var(--canon-bg-elevated);
color: var(--color-fg-primary);
padding: var(--canon-space-2);
background-color: var(--canon-bg-surface-1);
border: 1px solid var(--canon-border);
color: var(--canon-fg-primary);
transform-origin: var(--transform-origin);
border-radius: .375rem;
padding-block: .25rem;
outline: none;
max-width: 340px;
transition: transform .15s, opacity .15s;
overflow: hidden;
&[data-starting-style], &[data-ending-style] {
opacity: 0;
transform: scale(.9);
}
@media (prefers-color-scheme: light) {
& {
outline: 1px solid var(--color-gray-200);
box-shadow: 0px 10px 15px -3px var(--color-gray-200), 0px 4px 6px -4px var(--color-gray-200);
}
}
@media (prefers-color-scheme: dark) {
& {
outline: 1px solid var(--color-gray-300);
outline-offset: -1px;
}
}
}
.canon-MenuItem {
cursor: default;
user-select: none;
padding-block: .5rem;
gap: var(--canon-space-2);
color: var(--canon-fg-primary);
border-radius: var(--canon-radius-2);
padding: var(--canon-space-2) var(--canon-space-2);
padding-right: var(--canon-space-4);
cursor: pointer;
outline: 0;
padding-left: 1rem;
padding-right: 2rem;
font-size: .875rem;
line-height: 1rem;
text-decoration: none;
display: flex;
&:last-child {
border-bottom: none;
}
&[data-highlighted] {
z-index: 0;
color: var(--color-gray-50);
background-color: var(--canon-bg-tint-hover);
position: relative;
}
&[data-highlighted]:before {
content: "";
z-index: -1;
background-color: var(--color-gray-900);
border-radius: .25rem;
position: absolute;
inset-block: 0;
inset-inline: .25rem;
}
}
.canon-MenuSeparator {
+24 -70
View File
@@ -9083,6 +9083,11 @@
}
}
:where(a) {
color: inherit;
text-decoration: none;
}
:root {
--canon-font-regular: system-ui;
--canon-font-monospace: ui-monospace, "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace;
@@ -9682,101 +9687,50 @@
margin: 0;
}
.canon-MenuTrigger {
box-sizing: border-box;
border: 1px solid var(--color-gray-200);
background-color: var(--color-gray-50);
height: 2.5rem;
color: var(--color-gray-900);
user-select: none;
border-radius: .375rem;
outline: 0;
justify-content: center;
align-items: center;
gap: .375rem;
margin: 0;
padding: 0 .875rem;
font-family: inherit;
font-size: 1rem;
font-weight: 500;
line-height: 1.5rem;
display: flex;
@media (hover: hover) {
&:hover {
background-color: var(--color-gray-100);
}
}
&:active, &[data-popup-open] {
background-color: var(--color-gray-100);
}
&:focus-visible {
outline: 2px solid var(--color-blue);
outline-offset: -1px;
}
}
.canon-MenuPositioner {
outline: 0;
}
.canon-MenuPopup {
box-sizing: border-box;
background-color: var(--canon-bg-elevated);
color: var(--color-fg-primary);
padding: var(--canon-space-2);
background-color: var(--canon-bg-surface-1);
border: 1px solid var(--canon-border);
color: var(--canon-fg-primary);
transform-origin: var(--transform-origin);
border-radius: .375rem;
padding-block: .25rem;
outline: none;
max-width: 340px;
transition: transform .15s, opacity .15s;
overflow: hidden;
&[data-starting-style], &[data-ending-style] {
opacity: 0;
transform: scale(.9);
}
@media (prefers-color-scheme: light) {
& {
outline: 1px solid var(--color-gray-200);
box-shadow: 0px 10px 15px -3px var(--color-gray-200), 0px 4px 6px -4px var(--color-gray-200);
}
}
@media (prefers-color-scheme: dark) {
& {
outline: 1px solid var(--color-gray-300);
outline-offset: -1px;
}
}
}
.canon-MenuItem {
cursor: default;
user-select: none;
padding-block: .5rem;
gap: var(--canon-space-2);
color: var(--canon-fg-primary);
border-radius: var(--canon-radius-2);
padding: var(--canon-space-2) var(--canon-space-2);
padding-right: var(--canon-space-4);
cursor: pointer;
outline: 0;
padding-left: 1rem;
padding-right: 2rem;
font-size: .875rem;
line-height: 1rem;
text-decoration: none;
display: flex;
&:last-child {
border-bottom: none;
}
&[data-highlighted] {
z-index: 0;
color: var(--color-gray-50);
background-color: var(--canon-bg-tint-hover);
position: relative;
}
&[data-highlighted]:before {
content: "";
z-index: -1;
background-color: var(--color-gray-900);
border-radius: .25rem;
position: absolute;
inset-block: 0;
inset-inline: .25rem;
}
}
.canon-MenuSeparator {
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@backstage/canon",
"version": "0.2.0",
"version": "0.2.1-next.0",
"backstage": {
"role": "web-library"
},
@@ -36,7 +36,7 @@
"lint": "backstage-cli package lint",
"prepack": "backstage-cli package prepack",
"postpack": "backstage-cli package postpack",
"start": "yarn build:css:watch && yarn storybook",
"start": "concurrently \"yarn build:css:watch\" \"yarn storybook\"",
"storybook": "storybook dev -p 6006",
"test": "backstage-cli package test"
},
@@ -60,7 +60,7 @@
"@types/react": "^18.0.0",
"@types/react-dom": "^18.0.0",
"chalk": "^5.4.1",
"eslint-plugin-storybook": "^0.11.6",
"eslint-plugin-storybook": "^0.11.4",
"glob": "^11.0.1",
"globals": "^15.11.0",
"lightningcss": "^1.29.1",
@@ -67,6 +67,19 @@ export const CustomTag: Story = {
},
};
export const WrappedInLink: Story = {
args: {
...Default.args,
},
decorators: [
Story => (
<a href="/">
<Story />
</a>
),
],
};
export const Playground: Story = {
render: () => (
<Flex direction="column" gap="4">
@@ -17,6 +17,7 @@
import React from 'react';
import type { Meta, StoryObj } from '@storybook/react';
import { Menu } from './Menu';
import { Button } from '../Button';
const meta = {
title: 'Components/Menu',
@@ -30,9 +31,15 @@ export const Default: Story = {
args: {
children: (
<>
<Menu.Trigger>Menu</Menu.Trigger>
<Menu.Trigger
render={props => (
<Button {...props} size="small">
Menu
</Button>
)}
/>
<Menu.Portal>
<Menu.Positioner>
<Menu.Positioner sideOffset={8} align="start">
<Menu.Popup>
<Menu.Item>Item 1</Menu.Item>
<Menu.Item>Item 2</Menu.Item>
@@ -44,3 +51,10 @@ export const Default: Story = {
),
},
};
export const Open: Story = {
args: {
...Default.args,
open: true,
},
};
@@ -1,54 +1,17 @@
.canon-MenuTrigger {
box-sizing: border-box;
display: flex;
align-items: center;
justify-content: center;
gap: 0.375rem;
height: 2.5rem;
padding: 0 0.875rem;
margin: 0;
outline: 0;
border: 1px solid var(--color-gray-200);
border-radius: 0.375rem;
background-color: var(--color-gray-50);
font-family: inherit;
font-size: 1rem;
font-weight: 500;
line-height: 1.5rem;
color: var(--color-gray-900);
user-select: none;
@media (hover: hover) {
&:hover {
background-color: var(--color-gray-100);
}
}
&:active {
background-color: var(--color-gray-100);
}
&[data-popup-open] {
background-color: var(--color-gray-100);
}
&:focus-visible {
outline: 2px solid var(--color-blue);
outline-offset: -1px;
}
}
.canon-MenuPositioner {
outline: 0;
}
.canon-MenuPopup {
box-sizing: border-box;
padding-block: 0.25rem;
padding: var(--canon-space-2);
border-radius: 0.375rem;
background-color: var(--canon-bg-elevated);
color: var(--color-fg-primary);
background-color: var(--canon-bg-surface-1);
border: 1px solid var(--canon-border);
color: var(--canon-fg-primary);
outline: none;
overflow: hidden;
transform-origin: var(--transform-origin);
max-width: 340px;
transition: transform 150ms, opacity 150ms;
&[data-starting-style],
@@ -56,44 +19,29 @@
opacity: 0;
transform: scale(0.9);
}
@media (prefers-color-scheme: light) {
outline: 1px solid var(--color-gray-200);
box-shadow: 0px 10px 15px -3px var(--color-gray-200),
0px 4px 6px -4px var(--color-gray-200);
}
@media (prefers-color-scheme: dark) {
outline: 1px solid var(--color-gray-300);
outline-offset: -1px;
}
}
.canon-MenuItem {
outline: 0;
cursor: default;
user-select: none;
padding-block: 0.5rem;
padding-left: 1rem;
padding-right: 2rem;
display: flex;
font-size: 0.875rem;
line-height: 1rem;
gap: var(--canon-space-2);
color: var(--canon-fg-primary);
text-decoration: none;
border-radius: var(--canon-radius-2);
padding: var(--canon-space-2) var(--canon-space-2);
padding-right: var(--canon-space-4);
cursor: pointer;
&:last-child {
border-bottom: none;
}
&[data-highlighted] {
z-index: 0;
position: relative;
color: var(--color-gray-50);
}
&[data-highlighted]::before {
content: '';
z-index: -1;
position: absolute;
inset-block: 0;
inset-inline: 0.25rem;
border-radius: 0.25rem;
background-color: var(--color-gray-900);
background-color: var(--canon-bg-tint-hover);
}
}
@@ -89,6 +89,19 @@ export const Responsive: Story = {
},
};
export const WrappedInLink: Story = {
args: {
...Default.args,
},
decorators: [
Story => (
<a href="/">
<Story />
</a>
),
],
};
export const Playground: Story = {
render: () => (
<Flex gap="4" direction="column">
+6 -1
View File
@@ -18,8 +18,13 @@
@import './normalize.css';
@import './utilities.css';
/* Light theme tokens */
/* Global reset */
:where(a) {
color: inherit;
text-decoration: none;
}
/* Light theme tokens */
:root {
/* Font families */
--canon-font-regular: system-ui;
+23
View File
@@ -1,5 +1,28 @@
# @backstage/cli
## 0.32.0-next.0
### Minor Changes
- c7254ae: Internal update to move the `clean`, `pre/postpack` and `fix` commands into their own separate module.
### Patch Changes
- 4ea76f7: Bump @module-federation/enhanced ^0.9.0 to fix GHSA-593f-38f6-jp5m
- 87a5cb4: Fixed an issue causing the `repo lint` command to fail when the `--max-warnings` option was used.
- d83f3f4: Resolved a problem where the `start` command did not correctly handle multiple `--require` flags, ensuring all specified modules are now properly loaded.
- Updated dependencies
- @backstage/catalog-model@1.7.3
- @backstage/cli-common@0.1.15
- @backstage/cli-node@0.2.13
- @backstage/config@1.3.2
- @backstage/config-loader@1.10.0
- @backstage/errors@1.2.7
- @backstage/eslint-plugin@0.1.10
- @backstage/integration@1.16.2
- @backstage/release-manifests@0.0.12
- @backstage/types@1.2.1
## 0.31.0
### Minor Changes
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@backstage/cli",
"version": "0.31.0",
"version": "0.32.0-next.0",
"description": "CLI for developing Backstage plugins and apps",
"backstage": {
"role": "cli"
@@ -58,7 +58,7 @@
"@backstage/release-manifests": "workspace:^",
"@backstage/types": "workspace:^",
"@manypkg/get-packages": "^1.1.3",
"@module-federation/enhanced": "^0.8.0",
"@module-federation/enhanced": "^0.9.0",
"@octokit/graphql": "^5.0.0",
"@octokit/graphql-schema": "^13.7.0",
"@octokit/oauth-app": "^4.2.0",
+10
View File
@@ -1,5 +1,15 @@
# @backstage/core-compat-api
## 0.4.1-next.0
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog-react@1.16.1-next.0
- @backstage/core-plugin-api@1.10.5
- @backstage/frontend-plugin-api@0.10.0
- @backstage/version-bridge@1.0.11
## 0.4.0
### Minor Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@backstage/core-compat-api",
"version": "0.4.0",
"version": "0.4.1-next.0",
"backstage": {
"role": "web-library"
},
+8
View File
@@ -1,5 +1,13 @@
# @backstage/create-app
## 0.6.1-next.0
### Patch Changes
- Bumped create-app version.
- Updated dependencies
- @backstage/cli-common@0.1.15
## 0.6.0
### Minor Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@backstage/create-app",
"version": "0.6.0",
"version": "0.6.1-next.0",
"description": "A CLI that helps you create your own Backstage app",
"backstage": {
"role": "cli"
+14
View File
@@ -1,5 +1,19 @@
# @backstage/dev-utils
## 1.1.9-next.0
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog-react@1.16.1-next.0
- @backstage/app-defaults@1.6.0
- @backstage/catalog-model@1.7.3
- @backstage/core-app-api@1.16.0
- @backstage/core-components@0.17.0
- @backstage/core-plugin-api@1.10.5
- @backstage/integration-react@1.2.5
- @backstage/theme@0.6.4
## 1.1.8
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@backstage/dev-utils",
"version": "1.1.8",
"version": "1.1.9-next.0",
"description": "Utilities for developing Backstage plugins.",
"backstage": {
"role": "web-library"
+9
View File
@@ -1,5 +1,14 @@
# e2e-test
## 0.2.27-next.0
### Patch Changes
- Updated dependencies
- @backstage/create-app@0.6.1-next.0
- @backstage/cli-common@0.1.15
- @backstage/errors@1.2.7
## 0.2.26
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "e2e-test",
"version": "0.2.26",
"version": "0.2.27-next.0",
"description": "E2E test for verifying Backstage packages",
"backstage": {
"role": "cli"
@@ -1,5 +1,13 @@
# @internal/scaffolder
## 0.0.8-next.0
### Patch Changes
- Updated dependencies
- @backstage/plugin-scaffolder-react@1.15.0-next.0
- @backstage/frontend-plugin-api@0.10.0
## 0.0.7
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@internal/scaffolder",
"version": "0.0.7",
"version": "0.0.8-next.0",
"backstage": {
"role": "web-library",
"inline": true
@@ -1,5 +1,24 @@
# techdocs-cli-embedded-app
## 0.2.107-next.0
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog@1.29.0-next.0
- @backstage/cli@0.32.0-next.0
- @backstage/plugin-techdocs@1.12.5-next.0
- @backstage/app-defaults@1.6.0
- @backstage/catalog-model@1.7.3
- @backstage/config@1.3.2
- @backstage/core-app-api@1.16.0
- @backstage/core-components@0.17.0
- @backstage/core-plugin-api@1.10.5
- @backstage/integration-react@1.2.5
- @backstage/test-utils@1.7.6
- @backstage/theme@0.6.4
- @backstage/plugin-techdocs-react@1.2.15
## 0.2.106
### Patch Changes
@@ -1,6 +1,6 @@
{
"name": "techdocs-cli-embedded-app",
"version": "0.2.106",
"version": "0.2.107-next.0",
"backstage": {
"role": "frontend"
},
+11
View File
@@ -1,5 +1,16 @@
# @techdocs/cli
## 1.9.2-next.0
### Patch Changes
- Updated dependencies
- @backstage/backend-defaults@0.9.0-next.0
- @backstage/plugin-techdocs-node@1.13.2-next.0
- @backstage/catalog-model@1.7.3
- @backstage/cli-common@0.1.15
- @backstage/config@1.3.2
## 1.9.1
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@techdocs/cli",
"version": "1.9.1",
"version": "1.9.2-next.0",
"description": "Utility CLI for managing TechDocs sites in Backstage.",
"backstage": {
"role": "cli"
+15
View File
@@ -1,5 +1,20 @@
# @backstage/plugin-api-docs
## 0.12.6-next.0
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog@1.29.0-next.0
- @backstage/plugin-catalog-react@1.16.1-next.0
- @backstage/core-compat-api@0.4.1-next.0
- @backstage/catalog-model@1.7.3
- @backstage/core-components@0.17.0
- @backstage/core-plugin-api@1.10.5
- @backstage/frontend-plugin-api@0.10.0
- @backstage/plugin-catalog-common@1.1.3
- @backstage/plugin-permission-react@0.4.32
## 0.12.5
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-api-docs",
"version": "0.12.5",
"version": "0.12.6-next.0",
"description": "A Backstage plugin that helps represent API entities in the frontend",
"backstage": {
"role": "frontend-plugin",
@@ -1,5 +1,15 @@
# @backstage/plugin-auth-backend-module-aws-alb-provider
## 0.4.2-next.0
### Patch Changes
- Updated dependencies
- @backstage/plugin-auth-backend@0.24.5-next.0
- @backstage/plugin-auth-node@0.6.1
- @backstage/backend-plugin-api@1.2.1
- @backstage/errors@1.2.7
## 0.4.1
### Patch Changes
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-backend-module-aws-alb-provider",
"version": "0.4.1",
"version": "0.4.2-next.0",
"description": "The aws-alb provider module for the Backstage auth backend.",
"backstage": {
"role": "backend-plugin-module",
@@ -1,5 +1,30 @@
# @backstage/plugin-auth-backend-module-oidc-provider
## 0.4.2-next.0
### Patch Changes
- 7495edf: Added custom timeout setting for oidc provider
Here is an example of how to use a custom timeout with the configuration:
```yaml
auth:
oidc:
production:
clientId: ${AUTH_GOOGLE_CLIENT_ID}
clientSecret: ${AUTH_GOOGLE_CLIENT_SECRET}
timeout:
seconds: 30
```
- Updated dependencies
- @backstage/plugin-auth-backend@0.24.5-next.0
- @backstage/plugin-auth-node@0.6.1
- @backstage/backend-plugin-api@1.2.1
- @backstage/config@1.3.2
- @backstage/types@1.2.1
## 0.4.1
### Patch Changes
+1 -1
View File
@@ -13,7 +13,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { HumanDuration } from '@backstage/types';
export interface Config {
@@ -33,6 +32,7 @@ export interface Config {
tokenSignedResponseAlg?: string;
additionalScopes?: string | string[];
prompt?: string;
timeout?: HumanDuration | string;
signIn?: {
resolvers: Array<
| {
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-backend-module-oidc-provider",
"version": "0.4.1",
"version": "0.4.2-next.0",
"description": "The oidc-provider backend module for the auth plugin.",
"backstage": {
"role": "backend-plugin-module",
@@ -35,8 +35,10 @@
},
"dependencies": {
"@backstage/backend-plugin-api": "workspace:^",
"@backstage/config": "workspace:^",
"@backstage/plugin-auth-backend": "workspace:^",
"@backstage/plugin-auth-node": "workspace:^",
"@backstage/types": "workspace:^",
"express": "^4.18.2",
"openid-client": "^5.5.0",
"passport": "^0.7.0"
@@ -28,6 +28,7 @@ import { ConfigReader } from '@backstage/config';
import { JWK, SignJWT, exportJWK, generateKeyPair } from 'jose';
import { rest } from 'msw';
import express from 'express';
import { custom } from 'openid-client';
describe('oidcAuthenticator', () => {
let implementation: any;
@@ -169,6 +170,77 @@ describe('oidcAuthenticator', () => {
jest.clearAllMocks();
});
describe('timeout configuration', () => {
const TEST_URL = new URL('https://test.com');
it('should use default timeout when no timeout is configured', async () => {
const { promise } = oidcAuthenticator.initialize({
callbackUrl: 'https://backstage.test/callback',
config: new ConfigReader({
metadataUrl: 'https://oidc.test/.well-known/openid-configuration',
clientId: 'clientId',
clientSecret: 'clientSecret',
}),
});
const { client } = await promise;
const timeout = client[custom.http_options](TEST_URL, {}).timeout;
// Check if the HTTP timeout is set to the default value
expect(timeout).toBeDefined();
expect(timeout).toBe(10000);
});
it('should use configured timeout when provided in the config', async () => {
const { promise } = oidcAuthenticator.initialize({
callbackUrl: 'https://backstage.test/callback',
config: new ConfigReader({
metadataUrl: 'https://oidc.test/.well-known/openid-configuration',
clientId: 'clientId',
clientSecret: 'clientSecret',
timeout: {
seconds: 30,
},
}),
});
const { client } = await promise;
const timeout = client[custom.http_options](TEST_URL, {}).timeout;
// Check if the HTTP timeout is set to the configured value (30 seconds)
expect(timeout).toBeDefined();
expect(timeout).toBe(30000);
});
it('should handle invalid timeout configuration gracefully', async () => {
expect(() => {
oidcAuthenticator.initialize({
callbackUrl: 'https://backstage.test/callback',
config: new ConfigReader({
metadataUrl: 'https://oidc.test/.well-known/openid-configuration',
clientId: 'clientId',
clientSecret: 'clientSecret',
timeout: 123, // Invalid: should be a duration object
}),
});
}).toThrow();
expect(() => {
oidcAuthenticator.initialize({
callbackUrl: 'https://backstage.test/callback',
config: new ConfigReader({
metadataUrl: 'https://oidc.test/.well-known/openid-configuration',
clientId: 'clientId',
clientSecret: 'clientSecret',
timeout: {
invalid: 'value',
},
}),
});
}).toThrow();
});
});
describe('#start', () => {
let fakeSession: Record<string, any>;
let startRequest: OAuthAuthenticatorStartInput;
@@ -32,14 +32,18 @@ import {
PassportOAuthAuthenticatorHelper,
PassportOAuthPrivateInfo,
} from '@backstage/plugin-auth-node';
import { durationToMilliseconds } from '@backstage/types';
import { readDurationFromConfig } from '@backstage/config';
const HTTP_OPTION_TIMEOUT = 10000;
const httpOptionsProvider: CustomHttpOptionsProvider = (_url, options) => {
return {
...options,
timeout: HTTP_OPTION_TIMEOUT,
const createHttpOptionsProvider =
({ timeout }: { timeout?: number }): CustomHttpOptionsProvider =>
(_url, options) => {
return {
...options,
timeout: timeout ?? HTTP_OPTION_TIMEOUT,
};
};
};
/**
* authentication result for the OIDC which includes the token set and user
@@ -85,6 +89,15 @@ export const oidcAuthenticator = createOAuthAuthenticator({
);
}
const timeoutMilliseconds = config.has('timeout')
? durationToMilliseconds(
readDurationFromConfig(config, { key: 'timeout' }),
)
: undefined;
const httpOptionsProvider = createHttpOptionsProvider({
timeout: timeoutMilliseconds,
});
Issuer[custom.http_options] = httpOptionsProvider;
const promise = Issuer.discover(metadataUrl).then(issuer => {
issuer[custom.http_options] = httpOptionsProvider;
+31
View File
@@ -1,5 +1,36 @@
# @backstage/plugin-auth-backend
## 0.24.5-next.0
### Patch Changes
- Updated dependencies
- @backstage/plugin-auth-backend-module-oidc-provider@0.4.2-next.0
- @backstage/plugin-auth-backend-module-atlassian-provider@0.4.1
- @backstage/plugin-auth-backend-module-auth0-provider@0.2.1
- @backstage/plugin-auth-backend-module-bitbucket-provider@0.3.1
- @backstage/plugin-auth-backend-module-bitbucket-server-provider@0.2.1
- @backstage/plugin-auth-backend-module-cloudflare-access-provider@0.4.1
- @backstage/plugin-auth-backend-module-github-provider@0.3.1
- @backstage/plugin-auth-backend-module-gitlab-provider@0.3.1
- @backstage/plugin-auth-backend-module-microsoft-provider@0.3.1
- @backstage/plugin-auth-backend-module-oauth2-provider@0.4.1
- @backstage/plugin-auth-backend-module-okta-provider@0.2.1
- @backstage/plugin-auth-backend-module-onelogin-provider@0.3.1
- @backstage/plugin-auth-node@0.6.1
- @backstage/backend-plugin-api@1.2.1
- @backstage/catalog-client@1.9.1
- @backstage/catalog-model@1.7.3
- @backstage/config@1.3.2
- @backstage/errors@1.2.7
- @backstage/types@1.2.1
- @backstage/plugin-auth-backend-module-aws-alb-provider@0.4.2-next.0
- @backstage/plugin-auth-backend-module-azure-easyauth-provider@0.2.6
- @backstage/plugin-auth-backend-module-gcp-iap-provider@0.4.1
- @backstage/plugin-auth-backend-module-google-provider@0.3.1
- @backstage/plugin-auth-backend-module-oauth2-proxy-provider@0.2.6
- @backstage/plugin-catalog-node@1.16.1
## 0.24.4
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-backend",
"version": "0.24.4",
"version": "0.24.5-next.0",
"description": "A Backstage backend plugin that handles authentication",
"backstage": {
"role": "backend-plugin",
@@ -1,5 +1,21 @@
# @backstage/plugin-catalog-backend-module-aws
## 0.4.10-next.0
### Patch Changes
- Updated dependencies
- @backstage/backend-defaults@0.9.0-next.0
- @backstage/backend-plugin-api@1.2.1
- @backstage/catalog-model@1.7.3
- @backstage/config@1.3.2
- @backstage/errors@1.2.7
- @backstage/integration@1.16.2
- @backstage/integration-aws-node@0.1.15
- @backstage/plugin-catalog-common@1.1.3
- @backstage/plugin-catalog-node@1.16.1
- @backstage/plugin-kubernetes-common@0.9.4
## 0.4.9
### Patch Changes
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend-module-aws",
"version": "0.4.9",
"version": "0.4.10-next.0",
"description": "A Backstage catalog backend module that helps integrate towards AWS",
"backstage": {
"role": "backend-plugin-module",
@@ -1,5 +1,16 @@
# @backstage/plugin-catalog-backend-module-github-org
## 0.3.9-next.0
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog-backend-module-github@0.7.12-next.0
- @backstage/backend-plugin-api@1.2.1
- @backstage/config@1.3.2
- @backstage/plugin-catalog-node@1.16.1
- @backstage/plugin-events-node@0.4.9
## 0.3.8
### Patch Changes
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend-module-github-org",
"version": "0.3.8",
"version": "0.3.9-next.0",
"description": "The github-org backend module for the catalog plugin.",
"backstage": {
"role": "backend-plugin-module",
@@ -1,5 +1,21 @@
# @backstage/plugin-catalog-backend-module-github
## 0.7.12-next.0
### Patch Changes
- 16648ef: Added `validateLocationsExist` to the config definition where it was missing.
- Updated dependencies
- @backstage/plugin-catalog-backend@1.32.0
- @backstage/backend-plugin-api@1.2.1
- @backstage/catalog-client@1.9.1
- @backstage/catalog-model@1.7.3
- @backstage/config@1.3.2
- @backstage/integration@1.16.2
- @backstage/plugin-catalog-common@1.1.3
- @backstage/plugin-catalog-node@1.16.1
- @backstage/plugin-events-node@0.4.9
## 0.7.11
### Patch Changes
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend-module-github",
"version": "0.7.11",
"version": "0.7.12-next.0",
"description": "A Backstage catalog backend module that helps integrate towards GitHub",
"backstage": {
"role": "backend-plugin-module",
@@ -1,5 +1,15 @@
# @backstage/plugin-catalog-backend-module-gitlab-org
## 0.2.8-next.0
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog-backend-module-gitlab@0.6.5-next.0
- @backstage/backend-plugin-api@1.2.1
- @backstage/plugin-catalog-node@1.16.1
- @backstage/plugin-events-node@0.4.9
## 0.2.7
### Patch Changes
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend-module-gitlab-org",
"version": "0.2.7",
"version": "0.2.8-next.0",
"description": "The gitlab-org backend module for the catalog plugin.",
"backstage": {
"role": "backend-plugin-module",
@@ -1,5 +1,20 @@
# @backstage/plugin-catalog-backend-module-gitlab
## 0.6.5-next.0
### Patch Changes
- a568cda: add filter for repos by membership and topics
- Updated dependencies
- @backstage/backend-defaults@0.9.0-next.0
- @backstage/backend-plugin-api@1.2.1
- @backstage/catalog-model@1.7.3
- @backstage/config@1.3.2
- @backstage/integration@1.16.2
- @backstage/plugin-catalog-common@1.1.3
- @backstage/plugin-catalog-node@1.16.1
- @backstage/plugin-events-node@0.4.9
## 0.6.4
### Patch Changes
+12
View File
@@ -72,6 +72,18 @@ export interface Config {
* Should be in the format group/subgroup/repo, with no leading or trailing slashes.
*/
excludeRepos?: string[];
/**
* (Optional) If true, limit by repositories that the current user is a member of.
* See: https://docs.gitlab.com/api/projects/#list-projects
*/
membership?: boolean;
/**
* (Optional) List of topic names. Limit results to repositories that match all of given topics.
* See: https://docs.gitlab.com/api/projects/#list-projects
*/
topics?: string;
};
};
};
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend-module-gitlab",
"version": "0.6.4",
"version": "0.6.5-next.0",
"description": "A Backstage catalog backend module that helps integrate towards GitLab",
"backstage": {
"role": "backend-plugin-module",
@@ -120,6 +120,8 @@ export type GitlabProviderConfig = {
includeArchivedRepos?: boolean;
excludeRepos?: string[];
includeUsersWithoutSeat?: boolean;
membership?: boolean;
topics?: string;
};
// @public
@@ -41,6 +41,8 @@ export type CommonListOptions = {
interface ListProjectOptions extends CommonListOptions {
archived?: boolean;
group?: string;
membership?: boolean;
topics?: string;
}
interface UserListOptions extends CommonListOptions {
@@ -248,6 +248,18 @@ export type GitlabProviderConfig = {
* Defaults to `false`
*/
includeUsersWithoutSeat?: boolean;
/**
* If true, the membership parameter is set to true in the GitLab API request.
* See: https://docs.gitlab.com/api/projects/#list-projects
*/
membership?: boolean;
/**
* Optional comma seperated list of topics to filter projects by, as specified in the GitLab API documentation:
* https://docs.gitlab.com/api/projects/#list-projects
*/
topics?: string;
};
/**
@@ -214,6 +214,8 @@ export class GitlabDiscoveryEntityProvider implements EntityProvider {
page: 1,
per_page: 50,
...(!this.config.includeArchivedRepos && { archived: false }),
...(this.config.membership && { membership: true }),
...(this.config.topics && { topics: this.config.topics }),
},
);
@@ -65,6 +65,8 @@ describe('config', () => {
excludeRepos: [],
restrictUsersToGroup: false,
includeUsersWithoutSeat: false,
membership: undefined,
topics: undefined,
}),
);
});
@@ -109,6 +111,8 @@ describe('config', () => {
excludeRepos: [],
restrictUsersToGroup: false,
includeUsersWithoutSeat: true,
membership: undefined,
topics: undefined,
}),
);
});
@@ -153,6 +157,8 @@ describe('config', () => {
skipForkedRepos: true,
includeArchivedRepos: false,
includeUsersWithoutSeat: false,
membership: undefined,
topics: undefined,
}),
);
});
@@ -197,6 +203,8 @@ describe('config', () => {
skipForkedRepos: false,
includeArchivedRepos: true,
includeUsersWithoutSeat: false,
membership: undefined,
topics: undefined,
}),
);
});
@@ -242,6 +250,8 @@ describe('config', () => {
includeArchivedRepos: false,
excludeRepos: ['foo/bar', 'quz/qux'],
includeUsersWithoutSeat: false,
membership: undefined,
topics: undefined,
}),
);
});
@@ -287,6 +297,8 @@ describe('config', () => {
restrictUsersToGroup: false,
excludeRepos: [],
includeUsersWithoutSeat: false,
membership: undefined,
topics: undefined,
schedule: {
frequency: { minutes: 30 },
timeout: {
@@ -336,4 +348,188 @@ describe('config', () => {
expect(result).toHaveLength(1);
expect(result[0].group).toEqual('');
});
it('valid config with membership', () => {
const config = new ConfigReader({
catalog: {
providers: {
gitlab: {
test: {
group: 'group',
host: 'host',
branch: 'not-master',
fallbackBranch: 'main',
entityFilename: 'custom-file.yaml',
membership: true,
},
},
},
},
});
const result = readGitlabConfigs(config);
expect(result).toHaveLength(1);
result.forEach(r =>
expect(r).toStrictEqual({
id: 'test',
group: 'group',
branch: 'not-master',
fallbackBranch: 'main',
host: 'host',
catalogFile: 'custom-file.yaml',
projectPattern: /[\s\S]*/,
groupPattern: /[\s\S]*/,
userPattern: /[\s\S]*/,
orgEnabled: false,
allowInherited: false,
relations: [],
schedule: undefined,
restrictUsersToGroup: false,
excludeRepos: [],
skipForkedRepos: false,
includeUsersWithoutSeat: false,
includeArchivedRepos: false,
membership: true,
topics: undefined,
}),
);
});
it('valid config with empyt topics', () => {
const config = new ConfigReader({
catalog: {
providers: {
gitlab: {
test: {
group: 'group',
host: 'host',
branch: 'not-master',
fallbackBranch: 'main',
entityFilename: 'custom-file.yaml',
topics: [],
},
},
},
},
});
const result = readGitlabConfigs(config);
expect(result).toHaveLength(1);
result.forEach(r =>
expect(r).toStrictEqual({
id: 'test',
group: 'group',
branch: 'not-master',
fallbackBranch: 'main',
host: 'host',
catalogFile: 'custom-file.yaml',
projectPattern: /[\s\S]*/,
groupPattern: /[\s\S]*/,
userPattern: /[\s\S]*/,
orgEnabled: false,
allowInherited: false,
relations: [],
schedule: undefined,
restrictUsersToGroup: false,
excludeRepos: [],
skipForkedRepos: false,
includeUsersWithoutSeat: false,
includeArchivedRepos: false,
membership: undefined,
topics: undefined,
}),
);
});
it('valid config with single topics', () => {
const config = new ConfigReader({
catalog: {
providers: {
gitlab: {
test: {
group: 'group',
host: 'host',
branch: 'not-master',
fallbackBranch: 'main',
entityFilename: 'custom-file.yaml',
topics: ['topic1'],
},
},
},
},
});
const result = readGitlabConfigs(config);
expect(result).toHaveLength(1);
result.forEach(r =>
expect(r).toStrictEqual({
id: 'test',
group: 'group',
branch: 'not-master',
fallbackBranch: 'main',
host: 'host',
catalogFile: 'custom-file.yaml',
projectPattern: /[\s\S]*/,
groupPattern: /[\s\S]*/,
userPattern: /[\s\S]*/,
orgEnabled: false,
allowInherited: false,
relations: [],
schedule: undefined,
restrictUsersToGroup: false,
excludeRepos: [],
skipForkedRepos: false,
includeUsersWithoutSeat: false,
includeArchivedRepos: false,
membership: undefined,
topics: 'topic1',
}),
);
});
it('valid config with multiple topics', () => {
const config = new ConfigReader({
catalog: {
providers: {
gitlab: {
test: {
group: 'group',
host: 'host',
branch: 'not-master',
fallbackBranch: 'main',
entityFilename: 'custom-file.yaml',
topics: ['topic1', 'topic2', 'topic3'],
},
},
},
},
});
const result = readGitlabConfigs(config);
expect(result).toHaveLength(1);
result.forEach(r =>
expect(r).toStrictEqual({
id: 'test',
group: 'group',
branch: 'not-master',
fallbackBranch: 'main',
host: 'host',
catalogFile: 'custom-file.yaml',
projectPattern: /[\s\S]*/,
groupPattern: /[\s\S]*/,
userPattern: /[\s\S]*/,
orgEnabled: false,
allowInherited: false,
relations: [],
schedule: undefined,
restrictUsersToGroup: false,
excludeRepos: [],
skipForkedRepos: false,
includeUsersWithoutSeat: false,
includeArchivedRepos: false,
membership: undefined,
topics: 'topic1,topic2,topic3',
}),
);
});
});
@@ -66,6 +66,11 @@ function readGitlabConfig(id: string, config: Config): GitlabProviderConfig {
const includeUsersWithoutSeat =
config.getOptionalBoolean('includeUsersWithoutSeat') ?? false;
const membership = config.getOptionalBoolean('membership');
const topicsArray = config.getOptionalStringArray('topics');
const topics = topicsArray?.length ? topicsArray.join(',') : undefined;
return {
id,
group,
@@ -85,6 +90,8 @@ function readGitlabConfig(id: string, config: Config): GitlabProviderConfig {
excludeRepos,
restrictUsersToGroup,
includeUsersWithoutSeat,
membership,
topics,
};
}
@@ -1,5 +1,22 @@
# @backstage/plugin-catalog-backend-module-incremental-ingestion
## 0.6.5-next.0
### Patch Changes
- 27d1031: fixed misleading example location annotations in docs
- Updated dependencies
- @backstage/backend-defaults@0.9.0-next.0
- @backstage/plugin-catalog-backend@1.32.0
- @backstage/backend-plugin-api@1.2.1
- @backstage/catalog-model@1.7.3
- @backstage/config@1.3.2
- @backstage/errors@1.2.7
- @backstage/types@1.2.1
- @backstage/plugin-catalog-node@1.16.1
- @backstage/plugin-events-node@0.4.9
- @backstage/plugin-permission-common@0.8.4
## 0.6.4
### Patch Changes
@@ -208,12 +208,20 @@ export class MyIncrementalEntityProvider
The last step is to implement the actual `next` method that will accept the cursor, call the API, process the result and return the result.
```ts
import {
ANNOTATION_LOCATION,
ANNOTATION_ORIGIN_LOCATION,
} from '@backstage/catalog-model';
import { IncrementalEntityProvider } from '@backstage/plugin-catalog-backend-module-incremental-ingestion';
export class MyIncrementalEntityProvider implements IncrementalEntityProvider<Cursor, Context> {
token: string;
mySource: string;
constructor(token: string) {
constructor(token: string, mySource: string) {
this.token = token;
this.mySource = mySource;
}
getProviderName() {
@@ -230,6 +238,7 @@ export class MyIncrementalEntityProvider implements IncrementalEntityProvider<Cu
async next(context: Context, cursor?: Cursor = { page: 1 }): Promise<EntityIteratorResult<Cursor>> {
const { apiClient } = context;
const location = `${this.getProviderName()}:${this.mySource}`;
// call your API with the current cursor
const data = await apiClient.getServices(cursor);
@@ -249,8 +258,8 @@ export class MyIncrementalEntityProvider implements IncrementalEntityProvider<Cu
name: item.name,
annotations: {
// You need to define these, otherwise they'll fail validation
[ANNOTATION_LOCATION]: this.getProviderName(),
[ANNOTATION_ORIGIN_LOCATION]: this.getProviderName(),
[ANNOTATION_LOCATION]: location,
[ANNOTATION_ORIGIN_LOCATION]: location,
}
}
spec: {
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend-module-incremental-ingestion",
"version": "0.6.4",
"version": "0.6.5-next.0",
"description": "An entity provider for streaming large asset sources into the catalog",
"backstage": {
"role": "backend-plugin-module",
+14
View File
@@ -1,5 +1,19 @@
# @backstage/plugin-catalog-graph
## 0.4.18-next.0
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog-react@1.16.1-next.0
- @backstage/core-compat-api@0.4.1-next.0
- @backstage/catalog-client@1.9.1
- @backstage/catalog-model@1.7.3
- @backstage/core-components@0.17.0
- @backstage/core-plugin-api@1.10.5
- @backstage/frontend-plugin-api@0.10.0
- @backstage/types@1.2.1
## 0.4.17
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-graph",
"version": "0.4.17",
"version": "0.4.18-next.0",
"backstage": {
"role": "frontend-plugin",
"pluginId": "catalog-graph",
+18
View File
@@ -1,5 +1,23 @@
# @backstage/plugin-catalog-import
## 0.12.12-next.0
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog-react@1.16.1-next.0
- @backstage/core-compat-api@0.4.1-next.0
- @backstage/catalog-client@1.9.1
- @backstage/catalog-model@1.7.3
- @backstage/config@1.3.2
- @backstage/core-components@0.17.0
- @backstage/core-plugin-api@1.10.5
- @backstage/errors@1.2.7
- @backstage/frontend-plugin-api@0.10.0
- @backstage/integration@1.16.2
- @backstage/integration-react@1.2.5
- @backstage/plugin-catalog-common@1.1.3
## 0.12.11
### Patch Changes

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