merged master into the branch
Signed-off-by: bnechyporenko <bnechyporenko@bol.com>
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/backend-common': patch
|
||||
---
|
||||
|
||||
Fix a bug with S3 Fetch that caused all objects to be flattened within a single folder on the local file system.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-react': minor
|
||||
---
|
||||
|
||||
Added support for server side text filtering to paginated entity requests.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-api-docs': patch
|
||||
---
|
||||
|
||||
Updated README to list AsyncApi v3 as supported
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-badges-backend': patch
|
||||
---
|
||||
|
||||
Updating the `authorization` middleware to call the Catalog to check that the requesting user has permission to see the Entity before generating the UUID.
|
||||
@@ -0,0 +1,8 @@
|
||||
---
|
||||
'@backstage/backend-common': minor
|
||||
---
|
||||
|
||||
**BREAKING**: `A gitilesBaseUrl` must be provided for the Gerrit integration to work.
|
||||
You can disable this check by setting `DISABLE_GERRIT_GITILES_REQUIREMENT=1` but
|
||||
this will be removed in a future release. If you are not able to use the Gitiles
|
||||
Gerrit plugin, please open an issue towards `https://github.com/backstage/backstage`
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
'@backstage/plugin-kubernetes-react': minor
|
||||
---
|
||||
|
||||
**BREAKING** The `PodScope`, `PodAndErrors`, and `PodExecTerminalProps` types no
|
||||
longer have a `clusterName` field; instead they now have the field `cluster`
|
||||
which contains the full `ClusterAttributes`.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-auth-backend-module-oidc-provider': patch
|
||||
---
|
||||
|
||||
Fixed a bug where the OIDC authenticator did not properly persist granted OAuth scopes.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder-backend': patch
|
||||
---
|
||||
|
||||
Fix some deprecations and misplaced `await` usage.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-kubernetes-react': patch
|
||||
---
|
||||
|
||||
Pod dialogs display cluster title when specified.
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
'@backstage/plugin-kubernetes-react': patch
|
||||
---
|
||||
|
||||
The `ErrorPanel` component will display the `title` field (when specified) for
|
||||
clusters with errors.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-kubernetes-backend': patch
|
||||
---
|
||||
|
||||
The `/clusters` API now surfaces cluster titles.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-kubernetes-common': patch
|
||||
---
|
||||
|
||||
The `ClusterAttributes` type now includes the cluster title.
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
'@backstage/plugin-kubernetes': patch
|
||||
'@backstage/plugin-kubernetes-react': patch
|
||||
---
|
||||
|
||||
The `ErrorReporting` component's cluster column now displays cluster titles when
|
||||
specified.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/theme': patch
|
||||
---
|
||||
|
||||
Fixed missing extra variables like `applyDarkStyles` in Mui V5 theme after calling `createUnifiedThemeFromV4` function
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder-backend-module-gitlab': patch
|
||||
---
|
||||
|
||||
Use the Gitbeaker library for `gitlab:projectAccessToken:create` action, enabling the `expiresAt` option
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/backend-app-api': patch
|
||||
---
|
||||
|
||||
Allow the `createConfigSecretEnumerator` to take an optional `schema` argument with an already-loaded global configuration schema.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-catalog': minor
|
||||
---
|
||||
|
||||
Updated the paginated catalog table to support server side text filtering.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-backend-module-github': patch
|
||||
---
|
||||
|
||||
Added `validateLocationsExist` to the config
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/backend-common': patch
|
||||
---
|
||||
|
||||
Add a User-Agent header for calls towards Google Cloud Storage.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-kubernetes-backend': patch
|
||||
---
|
||||
|
||||
Responses from the `/api/kubernetes/services/:serviceId` endpoint now include the cluster title.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-backend': patch
|
||||
---
|
||||
|
||||
Replace uses of deprecated types with replacements internally.
|
||||
+53
-1
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"mode": "pre",
|
||||
"mode": "exit",
|
||||
"tag": "next",
|
||||
"initialVersions": {
|
||||
"example-app": "0.2.91",
|
||||
@@ -281,8 +281,10 @@
|
||||
"angry-phones-arrive",
|
||||
"beige-apples-press",
|
||||
"blue-keys-do",
|
||||
"brave-jobs-invite",
|
||||
"breezy-cobras-sin",
|
||||
"brown-items-hammer",
|
||||
"brown-peaches-hunt",
|
||||
"calm-cups-rule",
|
||||
"calm-items-double",
|
||||
"calm-onions-exercise",
|
||||
@@ -292,9 +294,12 @@
|
||||
"cold-cheetahs-pull",
|
||||
"cold-cooks-care",
|
||||
"cool-islands-impress",
|
||||
"cool-walls-applaud",
|
||||
"create-app-1706621803",
|
||||
"curvy-icons-peel",
|
||||
"curvy-ladybugs-impress",
|
||||
"cyan-bats-lick",
|
||||
"cyan-ducks-sin",
|
||||
"cyan-icons-rest",
|
||||
"dirty-cheetahs-shave",
|
||||
"dirty-mirrors-retire",
|
||||
@@ -305,6 +310,8 @@
|
||||
"dull-dolphins-explain",
|
||||
"dull-fireants-repeat",
|
||||
"eight-hounds-dream",
|
||||
"eight-pumas-rule",
|
||||
"eleven-walls-relate",
|
||||
"empty-ligers-hang",
|
||||
"fair-mirrors-hammer",
|
||||
"famous-houses-thank",
|
||||
@@ -314,15 +321,20 @@
|
||||
"fifty-files-argue",
|
||||
"flat-roses-happen",
|
||||
"flat-wasps-fold",
|
||||
"fluffy-jeans-eat",
|
||||
"forty-beers-sniff",
|
||||
"forty-cars-scream",
|
||||
"forty-eagles-kick",
|
||||
"four-mugs-try",
|
||||
"four-walls-perform",
|
||||
"fresh-gifts-smile",
|
||||
"fresh-paws-raise",
|
||||
"friendly-cheetahs-rescue",
|
||||
"friendly-terms-love",
|
||||
"funny-buttons-sip",
|
||||
"funny-timers-visit",
|
||||
"fuzzy-comics-collect",
|
||||
"fuzzy-turtles-camp",
|
||||
"giant-suits-switch",
|
||||
"good-lemons-lick",
|
||||
"gorgeous-bobcats-press",
|
||||
@@ -332,34 +344,49 @@
|
||||
"green-dogs-fold",
|
||||
"green-flies-draw",
|
||||
"grumpy-poets-study",
|
||||
"happy-peas-hunt",
|
||||
"healthy-bees-deliver",
|
||||
"healthy-goats-jump",
|
||||
"hip-ears-add",
|
||||
"hot-horses-matter",
|
||||
"hot-paws-tap",
|
||||
"hot-pillows-poke",
|
||||
"hot-tips-doubt",
|
||||
"hungry-days-remain",
|
||||
"hungry-lions-sit",
|
||||
"khaki-seahorses-joke",
|
||||
"kind-clouds-fly",
|
||||
"kind-wombats-draw",
|
||||
"large-frogs-grab",
|
||||
"large-moons-speak",
|
||||
"large-tables-wonder",
|
||||
"late-poets-love",
|
||||
"lazy-dolls-roll",
|
||||
"lemon-cameras-remember",
|
||||
"long-suns-bow",
|
||||
"long-wasps-wait",
|
||||
"loud-walls-compare",
|
||||
"lovely-bugs-prove",
|
||||
"lovely-starfishes-remain",
|
||||
"lucky-bugs-bow",
|
||||
"many-pugs-change",
|
||||
"mean-apes-wait",
|
||||
"metal-elephants-sit",
|
||||
"metal-students-drive",
|
||||
"mighty-steaks-shave",
|
||||
"mighty-tomatoes-visit",
|
||||
"mighty-toys-laugh",
|
||||
"modern-peaches-clean",
|
||||
"nasty-days-jog",
|
||||
"nasty-shirts-look",
|
||||
"neat-eels-greet",
|
||||
"neat-hotels-wink",
|
||||
"neat-kiwis-joke",
|
||||
"new-plants-rhyme",
|
||||
"nice-carrots-dream",
|
||||
"nine-bulldogs-camp",
|
||||
"nine-olives-swim",
|
||||
"ninety-hats-kiss",
|
||||
"ninety-rules-sneeze",
|
||||
"old-papayas-shave",
|
||||
"old-students-smoke",
|
||||
@@ -367,8 +394,13 @@
|
||||
"olive-experts-fold",
|
||||
"olive-singers-accept",
|
||||
"orange-gorillas-clean",
|
||||
"orange-suns-yell",
|
||||
"orange-walls-complain",
|
||||
"perfect-colts-hammer",
|
||||
"polite-meals-hug",
|
||||
"poor-jeans-rescue",
|
||||
"poor-points-do",
|
||||
"quick-gifts-leave",
|
||||
"quick-penguins-refuse",
|
||||
"quick-ties-stare",
|
||||
"quiet-donkeys-punch",
|
||||
@@ -377,17 +409,26 @@
|
||||
"real-grapes-sing",
|
||||
"red-bottles-swim",
|
||||
"red-eggs-serve",
|
||||
"renovate-235713b",
|
||||
"renovate-2d87790",
|
||||
"renovate-47c1714",
|
||||
"renovate-4b698fb",
|
||||
"renovate-5f8d1ca",
|
||||
"renovate-95b717a",
|
||||
"renovate-97e6aa5",
|
||||
"renovate-b35b354",
|
||||
"renovate-c392808",
|
||||
"renovate-d7337c1",
|
||||
"renovate-f253121",
|
||||
"renovate-f4b1d70",
|
||||
"renovate-f58dd5c",
|
||||
"renovate-f92a114",
|
||||
"renovate-fb2e0b9",
|
||||
"rich-bees-fry",
|
||||
"rotten-lemons-cry",
|
||||
"selfish-mails-scream",
|
||||
"serious-carpets-learn",
|
||||
"serious-dryers-grin",
|
||||
"seven-dots-serve",
|
||||
"seven-plums-return",
|
||||
"shaggy-trainers-rule",
|
||||
@@ -401,20 +442,27 @@
|
||||
"silent-hotels-knock",
|
||||
"silent-poets-grab",
|
||||
"silent-waves-pretend",
|
||||
"silver-crabs-exercise",
|
||||
"six-emus-buy",
|
||||
"six-jobs-sin",
|
||||
"six-melons-end",
|
||||
"sixty-bags-fry",
|
||||
"sixty-shoes-prove",
|
||||
"slimy-rats-fly",
|
||||
"smart-numbers-call",
|
||||
"soft-balloons-relax",
|
||||
"soft-beans-tease",
|
||||
"sour-ligers-hunt",
|
||||
"sour-rivers-fry",
|
||||
"spicy-bobcats-return",
|
||||
"spotty-jokes-unite",
|
||||
"spotty-kids-pay",
|
||||
"spotty-phones-attend",
|
||||
"strange-parents-hammer",
|
||||
"strong-lobsters-hide",
|
||||
"strong-news-develop",
|
||||
"sweet-ravens-glow",
|
||||
"swift-pumpkins-shake",
|
||||
"tall-frogs-clap",
|
||||
"tall-tools-compare",
|
||||
"tame-numbers-smile",
|
||||
@@ -425,14 +473,17 @@
|
||||
"ten-planets-guess",
|
||||
"ten-trainers-cough",
|
||||
"tender-flowers-collect",
|
||||
"thin-turtles-float",
|
||||
"thirty-dolls-admire",
|
||||
"tidy-cooks-mix",
|
||||
"tidy-cooks-mixed",
|
||||
"tidy-peaches-nail",
|
||||
"tiny-donuts-drive",
|
||||
"tiny-kiwis-know",
|
||||
"tough-drinks-scream",
|
||||
"twelve-hounds-know",
|
||||
"twelve-pens-rescue",
|
||||
"twelve-shirts-buy",
|
||||
"twelve-weeks-march",
|
||||
"twenty-taxis-mate",
|
||||
"two-coats-smile",
|
||||
@@ -445,6 +496,7 @@
|
||||
"wet-emus-work",
|
||||
"wet-lions-crash",
|
||||
"wicked-ants-reflect",
|
||||
"wicked-dolphins-wash",
|
||||
"wicked-elephants-scream",
|
||||
"wild-owls-doubt",
|
||||
"wise-flies-laugh",
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-backend': patch
|
||||
---
|
||||
|
||||
Fixed a bug where `fullTextFilter` wasn't preserved correctly in the cursor.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-kubernetes-react': patch
|
||||
---
|
||||
|
||||
The `Cluster` component now renders the cluster's title, if specified.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/cli': patch
|
||||
---
|
||||
|
||||
Updated dependency `vite-plugin-node-polyfills` to `^0.21.0`.
|
||||
@@ -0,0 +1,36 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder-backend-module-confluence-to-markdown': patch
|
||||
'@backstage/plugin-scaffolder-backend-module-bitbucket-server': patch
|
||||
'@backstage/plugin-scaffolder-backend-module-bitbucket-cloud': patch
|
||||
'@backstage/plugin-scaffolder-backend-module-cookiecutter': patch
|
||||
'@backstage/plugin-scaffolder-backend-module-bitbucket': patch
|
||||
'@backstage/backend-dynamic-feature-service': patch
|
||||
'@backstage/plugin-scaffolder-backend-module-github': patch
|
||||
'@backstage/plugin-scaffolder-backend-module-rails': patch
|
||||
'@backstage/plugin-catalog-backend-module-gerrit': patch
|
||||
'@backstage/backend-test-utils': patch
|
||||
'@backstage/plugin-kubernetes-backend': patch
|
||||
'@backstage/plugin-scaffolder-backend': patch
|
||||
'@backstage/backend-app-api': patch
|
||||
'@backstage/plugin-devtools-backend': patch
|
||||
'@backstage/plugin-linguist-backend': patch
|
||||
'@backstage/plugin-techdocs-backend': patch
|
||||
'@backstage/backend-common': patch
|
||||
'@backstage/e2e-test-utils': patch
|
||||
'@backstage/plugin-catalog-backend': patch
|
||||
'@backstage/plugin-rollbar-backend': patch
|
||||
'@backstage/plugin-scaffolder-node': patch
|
||||
'@backstage/config-loader': patch
|
||||
'@techdocs/cli': patch
|
||||
'@backstage/plugin-techdocs-node': patch
|
||||
'@backstage/plugin-auth-backend': patch
|
||||
'@backstage/create-app': patch
|
||||
'@backstage/repo-tools': patch
|
||||
'@backstage/plugin-app-backend': patch
|
||||
'@backstage/cli-node': patch
|
||||
'@backstage/plugin-app-node': patch
|
||||
'@backstage/cli': patch
|
||||
---
|
||||
|
||||
Updated dependency `fs-extra` to `^11.2.0`.
|
||||
Updated dependency `@types/fs-extra` to `^11.0.0`.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/cli': patch
|
||||
---
|
||||
|
||||
Updated dependency `esbuild-loader` to `^4.0.0`.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/cli': patch
|
||||
---
|
||||
|
||||
Updated dependency `eslint-config-prettier` to `^9.0.0`.
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
'@backstage/backend-common': patch
|
||||
'@techdocs/cli': patch
|
||||
'@backstage/plugin-techdocs-backend': patch
|
||||
---
|
||||
|
||||
Updated dependency `dockerode` to `^4.0.0`.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/cli': patch
|
||||
---
|
||||
|
||||
Updated dependency `eslint-webpack-plugin` to `^4.0.0`.
|
||||
@@ -0,0 +1,9 @@
|
||||
---
|
||||
'@backstage/cli': patch
|
||||
'@backstage/codemods': patch
|
||||
'@backstage/create-app': patch
|
||||
'@backstage/repo-tools': patch
|
||||
'@techdocs/cli': patch
|
||||
---
|
||||
|
||||
Updated dependency `commander` to `^12.0.0`.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/cli': patch
|
||||
---
|
||||
|
||||
Updated dependency `fork-ts-checker-webpack-plugin` to `^9.0.0`.
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
'@backstage/plugin-app-backend': patch
|
||||
'@backstage/plugin-app-node': patch
|
||||
---
|
||||
|
||||
Allow the `app-backend` plugin to use a global configuration schema provided externally through an extension.
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
'@backstage/plugin-signals-react': patch
|
||||
'@backstage/plugin-signals-node': patch
|
||||
'@backstage/plugin-signals': patch
|
||||
---
|
||||
|
||||
Allow defining signal type to publish and receive
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
'@backstage/plugin-kubernetes-node': patch
|
||||
---
|
||||
|
||||
The `ClusterDetails` type now has a `title` field, which should be a
|
||||
human-readable name.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-auth-backend': patch
|
||||
---
|
||||
|
||||
Added `experimentalExtraAllowedOrigins` to config
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-dynatrace': patch
|
||||
---
|
||||
|
||||
Fixed Dynatrace plugin proxy configuration
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-backend-module-aws': patch
|
||||
---
|
||||
|
||||
Move the AWS account e-mail from labels to annotations to fix the creation of `cloud-account` resources.
|
||||
@@ -0,0 +1,8 @@
|
||||
---
|
||||
'@backstage/backend-dynamic-feature-service': minor
|
||||
---
|
||||
|
||||
Implement the discovery of additional individual configuration schemas for dynamic plugins, and provide:
|
||||
|
||||
- an alternate implementation of the root logger service that takes them into account,
|
||||
- an extension to the App backend plugin to set a global configuration schema that takes them into account.
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder-backend': patch
|
||||
'@backstage/plugin-catalog-backend': patch
|
||||
---
|
||||
|
||||
Upgraded `prom-client` to version 15
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-kubernetes-backend': patch
|
||||
---
|
||||
|
||||
Clusters in the catalog can now specify a human-readable title via `metadata.title`.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-kubernetes-backend': patch
|
||||
---
|
||||
|
||||
Clusters in the app-config can now specify a `title` property for human readability.
|
||||
@@ -0,0 +1,3 @@
|
||||
**/api-report*.md linguist-generated=true
|
||||
**/cli-report.md linguist-generated=true
|
||||
**/knip-report.md linguist-generated=true
|
||||
@@ -92,6 +92,7 @@ Deutsche
|
||||
dev
|
||||
devops
|
||||
devs
|
||||
dialogs
|
||||
discoverability
|
||||
Discoverability
|
||||
dls
|
||||
@@ -323,6 +324,7 @@ repos
|
||||
rerender
|
||||
rerenders
|
||||
resourcequotas
|
||||
retryable
|
||||
reusability
|
||||
Reusability
|
||||
roadmaps
|
||||
|
||||
@@ -23,7 +23,7 @@ jobs:
|
||||
|
||||
env:
|
||||
CI: true
|
||||
NODE_OPTIONS: --max-old-space-size=4096
|
||||
NODE_OPTIONS: --max-old-space-size=8192
|
||||
|
||||
name: Install ${{ matrix.node-version }}
|
||||
steps:
|
||||
@@ -59,7 +59,7 @@ jobs:
|
||||
|
||||
env:
|
||||
CI: true
|
||||
NODE_OPTIONS: --max-old-space-size=4096
|
||||
NODE_OPTIONS: --max-old-space-size=8192
|
||||
|
||||
name: Verify ${{ matrix.node-version }}
|
||||
steps:
|
||||
@@ -155,7 +155,7 @@ jobs:
|
||||
name: Test ${{ matrix.node-version }}
|
||||
services:
|
||||
postgres16:
|
||||
image: postgres:16@sha256:09f23e02d76670d3b346a3c00aa33a27cf57aab8341eedfcdaed41459d14f5c4
|
||||
image: postgres:16@sha256:39d764950f22cfe878661247bb15cb344169dc3d55c9d4676303a2ef8675c057
|
||||
env:
|
||||
POSTGRES_PASSWORD: postgres
|
||||
options: >-
|
||||
@@ -166,7 +166,7 @@ jobs:
|
||||
ports:
|
||||
- 5432/tcp
|
||||
postgres12:
|
||||
image: postgres:12@sha256:8ffdca6e9208aceb30653fa0cc1c38956303ace453944b54b4f71019cfe854c1
|
||||
image: postgres:12@sha256:7a4c3f690fa767db8aaa4a9da3870037535307cc7f8f1880f1d7275a1be29b4d
|
||||
env:
|
||||
POSTGRES_PASSWORD: postgres
|
||||
options: >-
|
||||
@@ -177,7 +177,7 @@ jobs:
|
||||
ports:
|
||||
- 5432/tcp
|
||||
mysql8:
|
||||
image: mysql:8@sha256:2a9ef1075ff30c65bbcf4f96b25a03ea3b3f492c284e6c4a612c269ce4c5bb19
|
||||
image: mysql:8@sha256:343b82684a6b05812c58ca20ccd3af8bcf8a5f48b1842f251c54379bfce848f9
|
||||
env:
|
||||
MYSQL_ROOT_PASSWORD: root
|
||||
options: >-
|
||||
@@ -190,7 +190,7 @@ jobs:
|
||||
|
||||
env:
|
||||
CI: true
|
||||
NODE_OPTIONS: ${{ matrix.node-version == '20.x' && '--max-old-space-size=4096 --no-node-snapshot' || '--max-old-space-size=4096' }}
|
||||
NODE_OPTIONS: ${{ matrix.node-version == '20.x' && '--max-old-space-size=8192 --no-node-snapshot' || '--max-old-space-size=8192' }}
|
||||
INTEGRATION_TEST_GITHUB_TOKEN: ${{ secrets.INTEGRATION_TEST_GITHUB_TOKEN }}
|
||||
INTEGRATION_TEST_GITLAB_TOKEN: ${{ secrets.INTEGRATION_TEST_GITLAB_TOKEN }}
|
||||
INTEGRATION_TEST_BITBUCKET_TOKEN: ${{ secrets.INTEGRATION_TEST_BITBUCKET_TOKEN }}
|
||||
|
||||
@@ -11,7 +11,7 @@ jobs:
|
||||
|
||||
env:
|
||||
CI: true
|
||||
NODE_OPTIONS: --max-old-space-size=4096
|
||||
NODE_OPTIONS: --max-old-space-size=8192
|
||||
|
||||
steps:
|
||||
- name: Harden Runner
|
||||
|
||||
@@ -23,7 +23,7 @@ jobs:
|
||||
|
||||
services:
|
||||
postgres16:
|
||||
image: postgres:16@sha256:09f23e02d76670d3b346a3c00aa33a27cf57aab8341eedfcdaed41459d14f5c4
|
||||
image: postgres:16@sha256:39d764950f22cfe878661247bb15cb344169dc3d55c9d4676303a2ef8675c057
|
||||
env:
|
||||
POSTGRES_PASSWORD: postgres
|
||||
options: >-
|
||||
@@ -34,7 +34,7 @@ jobs:
|
||||
ports:
|
||||
- 5432/tcp
|
||||
postgres12:
|
||||
image: postgres:12@sha256:8ffdca6e9208aceb30653fa0cc1c38956303ace453944b54b4f71019cfe854c1
|
||||
image: postgres:12@sha256:7a4c3f690fa767db8aaa4a9da3870037535307cc7f8f1880f1d7275a1be29b4d
|
||||
env:
|
||||
POSTGRES_PASSWORD: postgres
|
||||
options: >-
|
||||
@@ -45,7 +45,7 @@ jobs:
|
||||
ports:
|
||||
- 5432/tcp
|
||||
mysql8:
|
||||
image: mysql:8@sha256:2a9ef1075ff30c65bbcf4f96b25a03ea3b3f492c284e6c4a612c269ce4c5bb19
|
||||
image: mysql:8@sha256:343b82684a6b05812c58ca20ccd3af8bcf8a5f48b1842f251c54379bfce848f9
|
||||
env:
|
||||
MYSQL_ROOT_PASSWORD: root
|
||||
options: >-
|
||||
@@ -58,7 +58,7 @@ jobs:
|
||||
|
||||
env:
|
||||
CI: true
|
||||
NODE_OPTIONS: ${{ matrix.node-version == '20.x' && '--max-old-space-size=4096 --no-node-snapshot' || '--max-old-space-size=4096' }}
|
||||
NODE_OPTIONS: ${{ matrix.node-version == '20.x' && '--max-old-space-size=8192 --no-node-snapshot' || '--max-old-space-size=8192' }}
|
||||
INTEGRATION_TEST_GITHUB_TOKEN: ${{ secrets.INTEGRATION_TEST_GITHUB_TOKEN }}
|
||||
INTEGRATION_TEST_GITLAB_TOKEN: ${{ secrets.INTEGRATION_TEST_GITLAB_TOKEN }}
|
||||
INTEGRATION_TEST_BITBUCKET_TOKEN: ${{ secrets.INTEGRATION_TEST_BITBUCKET_TOKEN }}
|
||||
@@ -140,7 +140,7 @@ jobs:
|
||||
|
||||
env:
|
||||
CI: 'true'
|
||||
NODE_OPTIONS: --max-old-space-size=4096
|
||||
NODE_OPTIONS: --max-old-space-size=8192
|
||||
|
||||
steps:
|
||||
- name: Harden Runner
|
||||
|
||||
@@ -66,6 +66,6 @@ jobs:
|
||||
|
||||
# Upload the results to GitHub's code scanning dashboard.
|
||||
- name: 'Upload to code-scanning'
|
||||
uses: github/codeql-action/upload-sarif@e8893c57a1f3a2b659b6b55564fdfdbbd2982911 # v3.24.0
|
||||
uses: github/codeql-action/upload-sarif@e675ced7a7522a761fc9c8eb26682c8b27c42b2b # v3.24.1
|
||||
with:
|
||||
sarif_file: results.sarif
|
||||
|
||||
@@ -58,6 +58,6 @@ jobs:
|
||||
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
|
||||
NODE_OPTIONS: --max-old-space-size=7168
|
||||
- name: Upload Snyk report
|
||||
uses: github/codeql-action/upload-sarif@e8893c57a1f3a2b659b6b55564fdfdbbd2982911 # v3.24.0
|
||||
uses: github/codeql-action/upload-sarif@e675ced7a7522a761fc9c8eb26682c8b27c42b2b # v3.24.1
|
||||
with:
|
||||
sarif_file: snyk.sarif
|
||||
|
||||
@@ -106,7 +106,7 @@ jobs:
|
||||
|
||||
# Identify comment to be updated
|
||||
- name: Find comment for Ephemeral Environment
|
||||
uses: peter-evans/find-comment@a54c31d7fa095754bfef525c0c8e5e5674c4b4b1 # v2
|
||||
uses: peter-evans/find-comment@d5fe37641ad8451bdd80312415672ba26c86575e # v3
|
||||
id: find-comment
|
||||
with:
|
||||
issue-number: ${{ needs.cache-manifests-file.outputs.pr-number }}
|
||||
@@ -220,7 +220,7 @@ jobs:
|
||||
|
||||
# Identify comment to be updated
|
||||
- name: Find comment for Ephemeral Environment
|
||||
uses: peter-evans/find-comment@a54c31d7fa095754bfef525c0c8e5e5674c4b4b1 # v2
|
||||
uses: peter-evans/find-comment@d5fe37641ad8451bdd80312415672ba26c86575e # v3
|
||||
id: find-comment
|
||||
with:
|
||||
issue-number: ${{ needs.cache-manifests-file.outputs.pr-number }}
|
||||
|
||||
@@ -55,7 +55,7 @@ jobs:
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@e8893c57a1f3a2b659b6b55564fdfdbbd2982911 # v3.24.0
|
||||
uses: github/codeql-action/init@e675ced7a7522a761fc9c8eb26682c8b27c42b2b # v3.24.1
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||
@@ -66,7 +66,7 @@ jobs:
|
||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||
# If this step fails, then you should remove it and run the build manually (see below)
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@e8893c57a1f3a2b659b6b55564fdfdbbd2982911 # v3.24.0
|
||||
uses: github/codeql-action/autobuild@e675ced7a7522a761fc9c8eb26682c8b27c42b2b # v3.24.1
|
||||
|
||||
# ℹ️ Command-line programs to run using the OS shell.
|
||||
# 📚 https://git.io/JvXDl
|
||||
@@ -80,4 +80,4 @@ jobs:
|
||||
# make release
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@e8893c57a1f3a2b659b6b55564fdfdbbd2982911 # v3.24.0
|
||||
uses: github/codeql-action/analyze@e675ced7a7522a761fc9c8eb26682c8b27c42b2b # v3.24.1
|
||||
|
||||
@@ -40,7 +40,7 @@ jobs:
|
||||
cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
|
||||
|
||||
- name: bootstrap kind
|
||||
uses: helm/kind-action@dda0770415bac9fc20092cacbc54aa298604d140 # v1.8.0
|
||||
uses: helm/kind-action@99576bfa6ddf9a8e612d83b513da5a75875caced # v1.9.0
|
||||
|
||||
- name: kubernetes test
|
||||
working-directory: packages/backend-common
|
||||
|
||||
@@ -19,7 +19,7 @@ jobs:
|
||||
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:12@sha256:8ffdca6e9208aceb30653fa0cc1c38956303ace453944b54b4f71019cfe854c1
|
||||
image: postgres:12@sha256:7a4c3f690fa767db8aaa4a9da3870037535307cc7f8f1880f1d7275a1be29b4d
|
||||
env:
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_PASSWORD: postgres
|
||||
|
||||
@@ -51,7 +51,7 @@ jobs:
|
||||
|
||||
- run: yarn build-storybook
|
||||
|
||||
- uses: chromaui/action@76bda3648003815314bd50adaa553ee612a7f36c # v10
|
||||
- uses: chromaui/action@a7938ff070f700b48e271857366b0564d65e3e5b # v10
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
# projectToken intentionally shared to allow collaborators to run Chromatic on forks
|
||||
|
||||
@@ -21,7 +21,7 @@ jobs:
|
||||
|
||||
env:
|
||||
CI: true
|
||||
NODE_OPTIONS: ${{ matrix.node-version == '20.x' && '--max-old-space-size=4096 --no-node-snapshot' || '--max-old-space-size=4096' }}
|
||||
NODE_OPTIONS: ${{ matrix.node-version == '20.x' && '--max-old-space-size=8192 --no-node-snapshot' || '--max-old-space-size=8192' }}
|
||||
INTEGRATION_TEST_GITHUB_TOKEN: ${{ secrets.INTEGRATION_TEST_GITHUB_TOKEN }}
|
||||
INTEGRATION_TEST_GITLAB_TOKEN: ${{ secrets.INTEGRATION_TEST_GITLAB_TOKEN }}
|
||||
INTEGRATION_TEST_BITBUCKET_TOKEN: ${{ secrets.INTEGRATION_TEST_BITBUCKET_TOKEN }}
|
||||
|
||||
@@ -261,11 +261,13 @@ Example signal payload for a new notification:
|
||||
}
|
||||
```
|
||||
|
||||
#### Future considerations
|
||||
#### Future considerations and BEP TODO
|
||||
|
||||
- Add icon for the notification request (for UX purposes)
|
||||
- Broadcast messages are to be saved to a separate table for performance reasons
|
||||
- OpenAPI tooling is taken into use for the notification router and client
|
||||
- Allow using dynamic values in notification payload, for example entity references `{{ user:default/john.doe }}` should be rendered by the frontend with `EntityRefLink` component. Defining the dynamic data values should be done before implementation.
|
||||
- Add configurable automatic clean-up of old notifications to save storage space
|
||||
- Support for saving user notification settings
|
||||
|
||||
### Frontend API
|
||||
|
||||
@@ -352,13 +354,15 @@ interface SignalApi {
|
||||
}
|
||||
```
|
||||
|
||||
#### Future considerations
|
||||
#### Future considerations and BEP TODO
|
||||
|
||||
- Notification frontend utilizes [Web Notification API](https://developer.mozilla.org/en-US/docs/Web/API/Notification) to notify user for new notifications
|
||||
- Unread notifications count is displayed in the title of the page
|
||||
- Configuration can be used to enable or disable features in the notification system (Web Notification API, title change, etc.)
|
||||
- Replace absent signal service with long polling. This requires changes to the `signals` plugin as well.
|
||||
- Notifications can have severity that is used to determine how notifications are shown to the user
|
||||
- Render dynamic values with various different React elements such as the `EntityRefLink` for entity references (for example `{{ user:default/john.doe }}`) in the notification payload
|
||||
- Handle `link` values that use route references. For example instead hard-coding link to `/catalog/default/component/artist-web` it should be possible to use `catalogPlugin.catalogEntity` route reference as a link of the notification. This should also allow using parameters to be passed to the route reference
|
||||
- Add support for `analyticsApi` to notification actions like marking notifications done, saved or opening links in the notifications
|
||||
- Add support for user settings to control how notifications are shown to the user and which notifications user wants to receive. This should also include support for different `NotificationProcessor`s that can send notification to external systems
|
||||
- Add a sound to be played when notification is received
|
||||
- Add i18n internationalization support for the notification payload
|
||||
|
||||
## Release Plan
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ creation-date: 2024-01-28
|
||||
|
||||
<!-- Before merging the initial BEP PR, create a feature issue and update the below link. You can wait with this step until the BEP is ready to be merged. -->
|
||||
|
||||
[**Discussion Issue**](https://github.com/backstage/backstage/issues/NNNNN)
|
||||
[**Discussion Issue**](https://github.com/backstage/backstage/issues/22605)
|
||||
|
||||
- [Summary](#summary)
|
||||
- [Motivation](#motivation)
|
||||
@@ -75,6 +75,8 @@ For service-to-service communication we will move away from reusing user tokens
|
||||
|
||||
An issue that has been identified in the current auth implementation is that the user information embedded in the Backstage user tokens can grow fairly large. In order to avoid that this becomes a widespread problem, especially as we implement cookie auth with a 4kb size limit, we will remove the ownership entity refs (`ent` claim) from the user tokens. There were already very few consumers of this information in practice - only the `permission-backend` and `signal-backend` plugin packages currently rely on this information. The ownership data will instead be available via a new `UserInfoService`, owned by the `auth-backend`. The implementation of this new service will keep relying on the `ent` claim of the user token initially, but we will also implement a new `/v1/userinfo` endpoint in the `auth-backend` that will migrate to transparently in the future.
|
||||
|
||||
Finally, it is also important to be able to disable the built-in protection of Backstage instances, for example when access protection is already provided by an external service, and one wishes to allow unauthenticated access for internal use. All built-in service implementation therefore support a common configuration for specifying the desired access control.
|
||||
|
||||
## Design Details
|
||||
|
||||
### `AuthService` Interface
|
||||
@@ -84,18 +86,18 @@ The new `AuthService` interface is defined as follows:
|
||||
```ts
|
||||
// These credential types are opaque and will also store some internal information, for example bearer tokens
|
||||
|
||||
export type BackstageUserCredentials = {
|
||||
$$type: '@backstage/BackstageCredentials';
|
||||
export type BackstageNonePrincipal = {
|
||||
type: 'none';
|
||||
};
|
||||
|
||||
export type BackstageUserPrincipal = {
|
||||
type: 'user';
|
||||
|
||||
userEntityRef: string;
|
||||
};
|
||||
|
||||
export type BackstageServiceCredentials = {
|
||||
$$type: '@backstage/BackstageCredentials';
|
||||
|
||||
type: 'service';
|
||||
export type BackstageServicePrincipal = {
|
||||
type: 'user';
|
||||
|
||||
// Exact format TBD, possibly 'plugin:<pluginId>' or 'external:<externalServiceId>'
|
||||
subject: string;
|
||||
@@ -104,17 +106,31 @@ export type BackstageServiceCredentials = {
|
||||
permissions?: string[];
|
||||
};
|
||||
|
||||
type BackstageCredentials =
|
||||
| BackstageUserCredentials
|
||||
| BackstageServiceCredentials;
|
||||
export type BackstageCredentials<TPrincipal = unknown> = {
|
||||
$$type: '@backstage/BackstageCredentials';
|
||||
|
||||
principal: TPrincipal;
|
||||
};
|
||||
|
||||
export type BackstagePrincipalTypes = {
|
||||
user: BackstageUserPrincipal;
|
||||
service: BackstageServicePrincipal;
|
||||
none: BackstageNonePrincipal;
|
||||
};
|
||||
|
||||
export interface AuthService {
|
||||
authenticate(token: string): Promise<BackstageCredentials>;
|
||||
|
||||
// TODO: should the caller provide the target plugin ID?
|
||||
// TODO: how can we make it very difficult to forget to forward credentials
|
||||
issueToken(options: {
|
||||
forward?: BackstageCredentials;
|
||||
isPrincipal<TType extends keyof BackstagePrincipalTypes>(
|
||||
credentials: BackstageCredentials,
|
||||
type: TType,
|
||||
): credentials is BackstageCredentials<BackstagePrincipalTypes[TType]>;
|
||||
|
||||
getOwnCredentials(): Promise<BackstageCredentials<BackstageServicePrincipal>>;
|
||||
|
||||
// TODO: should the caller provide the target plugin ID? if not - probably skip the object form
|
||||
issueServiceToken(options: {
|
||||
forward: BackstageCredentials;
|
||||
}): Promise<{ token: string }>;
|
||||
}
|
||||
```
|
||||
@@ -124,10 +140,13 @@ export interface AuthService {
|
||||
The new `UserInfoService` interface is defined as follows:
|
||||
|
||||
```ts
|
||||
export interface BackstageUserInfo {
|
||||
userEntityRef: string;
|
||||
ownershipEntityRefs: string[];
|
||||
}
|
||||
|
||||
export interface UserInfoService {
|
||||
getUserInfo(
|
||||
credentials: BackstageUserCredentials,
|
||||
): Promise<{ ownershipEntityRefs: string[] /* profile info too? */ }>;
|
||||
getUserInfo(credentials: BackstageCredentials): Promise<BackstageUserInfo>;
|
||||
}
|
||||
```
|
||||
|
||||
@@ -236,30 +255,33 @@ export default createBackendPlugin({
|
||||
The new `HttpAuthService` interface is defined as follows:
|
||||
|
||||
```ts
|
||||
export type BackstageUnauthorizedCredentials = {
|
||||
$$type: '@backstage/BackstageCredentials';
|
||||
|
||||
type: 'unauthorized';
|
||||
};
|
||||
|
||||
type BackstageCredentialTypes = {
|
||||
user: BackstageUserCredentials;
|
||||
'user-cookie': BackstageUserCredentials;
|
||||
service: BackstageServiceCredentials;
|
||||
unauthorized: BackstageUnauthorizedCredentials;
|
||||
type BackstageHttpAccessToPrincipalTypesMapping = {
|
||||
user: BackstageUserPrincipal;
|
||||
'user-cookie': BackstageUserPrincipal;
|
||||
service: BackstageServicePrincipal;
|
||||
unauthenticated: BackstageNonePrincipal;
|
||||
unknown: unknown;
|
||||
};
|
||||
|
||||
export interface HttpAuthService {
|
||||
// Implementations should cache resolved credentials on the request object
|
||||
credentials<TAllowed extends keyof BackstageCredentialTypes>(
|
||||
credentials<
|
||||
TAllowed extends
|
||||
| keyof BackstageHttpAccessToPrincipalTypesMapping = 'unknown',
|
||||
>(
|
||||
req: Request,
|
||||
options?: HttpAuthServiceMiddlewareOptions<TAllowed>,
|
||||
): Promise<BackstageCredentialTypes[TAllowed]>;
|
||||
options?: { allow: Array<TAllowed> },
|
||||
): Promise<
|
||||
BackstageCredentials<BackstageHttpAccessToPrincipalTypesMapping[TAllowed]>
|
||||
>;
|
||||
|
||||
requestHeaders(options?: {
|
||||
forward?: BackstageCredentials;
|
||||
requestHeaders(options: {
|
||||
forward: BackstageCredentials;
|
||||
}): Promise<Record<string, string>>;
|
||||
|
||||
// The cookie issued by this method must be consumable by the `credentials` method, which in turn
|
||||
// should create a credentials object that can be passed to the `issueServiceToken` method.
|
||||
// The issued token must then in turn be a valid token for a user principal with full access.
|
||||
issueUserCookie(res: Response): Promise<void>;
|
||||
}
|
||||
```
|
||||
@@ -276,7 +298,7 @@ router.get('/read-data', (req, res) => {
|
||||
const credentials = await httpAuth.credentials(req, { allow: ['user'] }); // throws if not: user (or obo), user-cookie
|
||||
const { ownershipEntityRefs } = await userInfo.getUserInfo(credentials);
|
||||
console.log(
|
||||
`User ref=${credentials.userEntityRef} ownership=${ownershipEntityRefs} claims=${credentials.extraClaims}`,
|
||||
`User ref=${credentials.principal.userEntityRef} ownership=${ownershipEntityRefs} claims=${credentials.principal.extraClaims}`,
|
||||
);
|
||||
// ...
|
||||
});
|
||||
@@ -289,11 +311,11 @@ class CatalogIntegration {
|
||||
async getEntity(
|
||||
res: string,
|
||||
options: {
|
||||
credentials: BackstageUserCredentials | BackstageServiceCredentials;
|
||||
credentials: BackstageCredentials;
|
||||
},
|
||||
) {
|
||||
return catalogClient.getEntityByRef(req.params.entityRef, {
|
||||
token: await auth.issueToken({
|
||||
token: await auth.issueServiceToken({
|
||||
forward: options.credentials,
|
||||
}),
|
||||
});
|
||||
@@ -306,13 +328,6 @@ const catalogIntegration = new CatalogIntegration();
|
||||
router.get('/read-data', (req, res) => {
|
||||
// The catalogClient will have a reference to the (plugin scoped) HttpAuthService,
|
||||
// which it uses to create the credential headers for the upstream request.
|
||||
const entity = await catalogClient.getEntityByRef(req.params.entityRef, {
|
||||
credentials: httpAuth.forwardCredentials(req, {
|
||||
dangerouslyAllowUnauthenticated: true,
|
||||
}),
|
||||
});
|
||||
|
||||
// TODO: try this out in more places in plugins
|
||||
const entity = await catalogIntegration.getEntity(req.params.entityRef, {
|
||||
credentials: await httpAuth.credentials(req),
|
||||
});
|
||||
@@ -327,12 +342,14 @@ router.get('/read-data', (req, res) => {
|
||||
const credentials = await httpAuth.credentials(req, {
|
||||
allow: ['user', 'service'],
|
||||
});
|
||||
if (credentials.type === 'user') {
|
||||
res.json(todoStore.listOwnedTodos({ owner: credentials.userEntityRef }));
|
||||
if (credentials.principal.type === 'user') {
|
||||
res.json(
|
||||
todoStore.listOwnedTodos({ owner: credentials.principal.userEntityRef }),
|
||||
);
|
||||
} else {
|
||||
res.json(
|
||||
todoStore.listTodos({
|
||||
serviceId: credentials.subject,
|
||||
serviceId: credentials.principal.subject,
|
||||
}),
|
||||
);
|
||||
}
|
||||
@@ -366,8 +383,6 @@ router.get(
|
||||
'/read-data',
|
||||
httpAuth.middleware({ allow: ['user-cookie'] }),
|
||||
(req, res) => {
|
||||
// These credentials don't actually contain an underlying user token for cookie-authed requests
|
||||
// If you try to pass them to the AuthService, it'll throw.
|
||||
const credentials = await httpAuth.credentials(req, { allow: ['user'] });
|
||||
const { ownershipEntityRefs } = await userInfo.getUserInfo(credentials);
|
||||
console.log(
|
||||
@@ -378,6 +393,17 @@ router.get(
|
||||
);
|
||||
```
|
||||
|
||||
### Access Control Configuration
|
||||
|
||||
In order to disable access control for a Backstage instance, the following configuration can be used:
|
||||
|
||||
```yaml
|
||||
backend:
|
||||
dangerouslyDisableServiceAuth: true
|
||||
```
|
||||
|
||||
The exact impact that this has is that it disables the check in the `HttpRouterService` implementation, effectively applying the `unauthenticated` access level to all routes. Furthermore, it will also change `AuthService` so that the `issueServiceToken()` method will now issue an empty token for a `'none'` principal, rather than throwing.
|
||||
|
||||
## Release Plan
|
||||
|
||||
The existing `IdentityService` and `TokenManagerService` will be deprecated and instead implemented in terms of the new `AuthService`.
|
||||
|
||||
@@ -0,0 +1,247 @@
|
||||
---
|
||||
title: Scaffolder Retryable Tasks
|
||||
status: provisional
|
||||
authors:
|
||||
- 'bnechyporenko@bol.com'
|
||||
- 'benjaminl@spotify.com'
|
||||
owners:
|
||||
project-areas:
|
||||
- scaffolder
|
||||
creation-date: 2024-01-31
|
||||
---
|
||||
|
||||
<!--
|
||||
**Note:** When your BEP is complete, all these pre-existing comments should be removed
|
||||
|
||||
When editing BEPs, aim for tightly-scoped, single-topic PRs to keep discussions focused. If you disagree with what is already in a document, open a new PR with suggested changes.
|
||||
-->
|
||||
|
||||
# BEP: <!-- Your short, descriptive title -->
|
||||
|
||||
<!-- Before merging the initial BEP PR, create a feature issue and update the below link. You can wait with this step until the BEP is ready to be merged. -->
|
||||
|
||||
[**Discussion Issue**](https://github.com/backstage/backstage/issues/22590)
|
||||
|
||||
- [Summary](#summary)
|
||||
- [Motivation](#motivation)
|
||||
- [Goals](#goals)
|
||||
- [Non-Goals](#non-goals)
|
||||
- [Proposal](#proposal)
|
||||
- [Design Details](#design-details)
|
||||
- [Release Plan](#release-plan)
|
||||
- [Dependencies](#dependencies)
|
||||
- [Alternatives](#alternatives)
|
||||
|
||||
## Summary
|
||||
|
||||
Scaffolder retryable task idempotency provides the means to make each action of the task idempotent. By default, an action is not considered to be idempotent.
|
||||
It has to be crafted to a solution when action can be re-run multiple times and giving the same effect as it had been run only once.
|
||||
|
||||
## Motivation
|
||||
|
||||
The aim is to make task engine more reliable in terms of system crash or redeployment. If the task engine is in process of executing
|
||||
tasks and system stops, after restart task engine will restore all such tasks and continue their execution.
|
||||
Another purpose is to make it possible to manually retry the task from the last failed step.
|
||||
|
||||
### Goals
|
||||
|
||||
<!--
|
||||
List the specific goals of the BEP. What is it trying to achieve? How will we
|
||||
know that this has succeeded?
|
||||
-->
|
||||
|
||||
- we will provide extended task API in scaffolder with a necessary tools to let tasks implement retries
|
||||
- make built-in actions retryable
|
||||
- enable the user to retry the failed task
|
||||
- should be possible to retry the task on a different scaffolder instance
|
||||
- we would like to retry from any state and not tearing down or overwriting what was created before.
|
||||
- we would like to be resilient to upstream failures, i.e. a request to create a remote repository failed and repository was created, it should be handled gracefully.
|
||||
|
||||
### Non-Goals
|
||||
|
||||
<!--
|
||||
What is out of scope for this BEP? Listing non-goals helps to focus discussion
|
||||
and make progress.
|
||||
-->
|
||||
|
||||
We will not aim to magically provide idempotency for actions, it has to be explicitly implemented.
|
||||
|
||||
## Proposal
|
||||
|
||||
<!--
|
||||
This is where we get down to the specifics of what the proposal actually is.
|
||||
This should have enough detail that reviewers can understand exactly what
|
||||
you're proposing, but should not include things like API designs or
|
||||
implementation.
|
||||
-->
|
||||
|
||||
### Idempotency
|
||||
|
||||
We believe that idempotency is the best way to do it. Idempotency allows to rerun the actions multiple times to gracefully deal with semi-complete actions.
|
||||
|
||||
### Serialization of workspace
|
||||
|
||||
We believe that a serialization of workspace is a way to achieve re-running the task on a non-sticky way.
|
||||
That means that the task can be restored and retried on a different scaffolder node.
|
||||
|
||||
### Secrets
|
||||
|
||||
Secrets will be stored for a longer period of time in the database and wiped out once the task going into a complete state (successfully finished or archived).
|
||||
|
||||
## Design Details
|
||||
|
||||
<!--
|
||||
This section should contain enough information that the specifics of your
|
||||
change are understandable. This may include API specs or even code snippets.
|
||||
If there's any ambiguity about HOW your proposal will be implemented, this is the place to discuss them.
|
||||
-->
|
||||
|
||||
### Idempotency
|
||||
|
||||
This is a simplified idempotent version of GitHub repository creation action:
|
||||
|
||||
```typescript
|
||||
export function createGithubRepoCreateAction(options: {
|
||||
integrations: ScmIntegrationRegistry;
|
||||
githubCredentialsProvider?: GithubCredentialsProvider;
|
||||
}) {
|
||||
const { integrations, githubCredentialsProvider } = options;
|
||||
|
||||
return createTemplateAction<{
|
||||
repoUrl: string;
|
||||
secrets?: { [key: string]: string };
|
||||
token?: string;
|
||||
}>({
|
||||
id: 'github:repo:create',
|
||||
description: 'Creates a GitHub repository.',
|
||||
examples,
|
||||
schema: {
|
||||
input: {
|
||||
type: 'object',
|
||||
required: ['repoUrl'],
|
||||
properties: {
|
||||
repoUrl: inputProps.repoUrl,
|
||||
token: inputProps.token,
|
||||
secrets: inputProps.secrets,
|
||||
repoVariables: inputProps.repoVariables,
|
||||
},
|
||||
},
|
||||
},
|
||||
async handler(ctx) {
|
||||
const {
|
||||
repoUrl,
|
||||
secrets,
|
||||
repoVariables,
|
||||
token: providedToken,
|
||||
} = ctx.input;
|
||||
|
||||
const octokitOptions = await getOctokitOptions({
|
||||
integrations,
|
||||
credentialsProvider: githubCredentialsProvider,
|
||||
token: providedToken,
|
||||
repoUrl: repoUrl,
|
||||
});
|
||||
const client = new Octokit(octokitOptions);
|
||||
|
||||
const { owner, repo } = parseRepoUrl(repoUrl, integrations);
|
||||
|
||||
if (!owner) {
|
||||
throw new InputError('Invalid repository owner provided in repoUrl');
|
||||
}
|
||||
|
||||
const user = await client.rest.users.getByUsername({
|
||||
username: owner,
|
||||
});
|
||||
|
||||
await ctx.checkpoint('v1.task.checkpoint.repo.creation', async () => {
|
||||
const repoCreationPromise =
|
||||
user.data.type === 'Organization'
|
||||
? client.rest.repos.createInOrg({
|
||||
name: repo,
|
||||
org: owner,
|
||||
})
|
||||
: client.rest.repos.createForAuthenticatedUser({
|
||||
name: repo,
|
||||
});
|
||||
const { repoUrl } = await repoCreationPromise;
|
||||
return { repoUrl };
|
||||
});
|
||||
|
||||
if (secrets) {
|
||||
await ctx.checkpoint(
|
||||
'v1.task.checkpoint.repo.create.variables',
|
||||
async () => {
|
||||
for (const [key, value] of Object.entries(repoVariables ?? {})) {
|
||||
await client.rest.actions.createRepoVariable({
|
||||
owner,
|
||||
repo,
|
||||
name: key,
|
||||
value: value,
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
ctx.output('remoteUrl', newRepo.clone_url);
|
||||
},
|
||||
});
|
||||
}
|
||||
```
|
||||
|
||||
#### Task context store
|
||||
|
||||
Implement the similar API to CatalogProcessorCache allowing to store markers or keys to enable users to write idempotent actions.
|
||||
This context persists across retries.
|
||||
|
||||
```typescript
|
||||
const repoMarker = await cache.get<RepoMarker>('repo.marker.key');
|
||||
```
|
||||
|
||||
#### Checkpoints
|
||||
|
||||
Checkpoints will allow action authors to create actions where code paths are ignored if already run.
|
||||
This will be provided on a context object and action of author provide a key and a callback.
|
||||
|
||||
```typescript
|
||||
await ctx.checkpoint('v1.task.checkpoint.repo.creation', async () => {
|
||||
const { repoUrl } = await client.rest.Repository.create({});
|
||||
return { repoUrl };
|
||||
});
|
||||
```
|
||||
|
||||
This checkpoint will be backed with task stored context namespaced with a checkpoint versioned prefix.
|
||||
It's going look like:
|
||||
|
||||
```json
|
||||
{
|
||||
"v1.task.checkpoint.repo.creation": {
|
||||
"status": "success",
|
||||
"result": {
|
||||
"repoUrl": "https://github.com/backstage/backstage.git"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Release Plan
|
||||
|
||||
<!--
|
||||
This section should describe the rollout process for any new features. It must take our version policies into account and plan for a phased rollout if this change affects any existing stable APIs.
|
||||
|
||||
If there is any particular feedback to be gathered during the rollout, this should be described here as well.
|
||||
-->
|
||||
|
||||
## Dependencies
|
||||
|
||||
<!--
|
||||
List any dependencies that this work has on other BEPs or features.
|
||||
-->
|
||||
|
||||
## Alternatives
|
||||
|
||||
<!--
|
||||
What other approaches did you consider, and why did you rule them out? These do
|
||||
not need to be as detailed as the proposal, but should include enough
|
||||
information to express the idea and why it was not acceptable.
|
||||
-->
|
||||
@@ -46,7 +46,7 @@ RUN yarn workspace app build
|
||||
|
||||
|
||||
|
||||
FROM nginx:mainline@sha256:84c52dfd55c467e12ef85cad6a252c0990564f03c4850799bf41dd738738691f
|
||||
FROM nginx:mainline
|
||||
|
||||
RUN apt-get update && apt-get -y install jq && rm -rf /var/lib/apt/lists/*
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
|
||||
|
||||
|
||||
FROM nginx:mainline@sha256:84c52dfd55c467e12ef85cad6a252c0990564f03c4850799bf41dd738738691f
|
||||
FROM nginx:mainline
|
||||
|
||||
RUN apt-get update && apt-get -y install jq && rm -rf /var/lib/apt/lists/*
|
||||
|
||||
|
||||
@@ -11,8 +11,8 @@ This is a small tutorial that goes over how to setup your Backstage instance to
|
||||
```diff
|
||||
// packages/backend/package.json
|
||||
"dependencies": {
|
||||
+ "express-prom-bundle": "^6.3.6",
|
||||
+ "prom-client": "^14.0.1",
|
||||
+ "express-prom-bundle": "^7.0.0",
|
||||
+ "prom-client": "^15.0.0",
|
||||
```
|
||||
|
||||
2. Now we want to run `yarn install` from the root of the project to get those dependencies in place
|
||||
|
||||
@@ -9,8 +9,159 @@ This guide explains how to deploy Backstage to [Flightcontrol](https://www.fligh
|
||||
|
||||
Before you begin, make sure you have a [Flightcontrol account](https://app.flightcontrol.dev/signup?ref=backstage) and a [Github account](https://github.com/login) to follow this guide.
|
||||
|
||||
# Creating a Dockerfile and .dockerignore
|
||||
|
||||
Once your Flightcontrol account is setup, you will need to prepare a `Dockerfile` and `.dockerignore` to deploy Backstage to your target AWS environment. The standard `Dockerfile` included in the Backstage repository assumes that the `skeleton.tar.gz` and `bundle.tar.gz` already exist. When integrating Flightcontrol directly with a GitHub repository, changes to files within this repository will automatically start a Flightcontrol deployment, unless you have configured deployments via a webhook. Regardless of which method you have chosen, when Flightcontrol starts a deployment process it will pull all files directly from the repository, and not from a GitHub runner or other location. As Flightcontrol does not contain CI steps this results in the zip files having to be committed to the repository in order to be available for the `Dockerfile` to copy.
|
||||
|
||||
A simple work around for this is to use a `Dockerfile` with a [multi-stage build](https://docs.docker.com/build/building/multi-stage/). Using this approach we can create our zip files in the first build stage, and copy them into the second stage ready for deployment.
|
||||
|
||||
The following two code snippets demonstrate this method. The first block of code is an example of a multi-stage build approach and should be added to a file called `Dockerfile.flightcontrol` in the `packages/backend` directory.
|
||||
|
||||
```dockerfile filename="Dockerfile.flightcontrol"
|
||||
# This dockerfile builds an image for the backend package.
|
||||
# It should be executed with the root of the repo as docker context.
|
||||
#
|
||||
# Before building this image, be sure to have run the following commands in the repo root:
|
||||
#
|
||||
# yarn install
|
||||
# yarn tsc
|
||||
# yarn build:backend
|
||||
#
|
||||
# Once the commands have been run, you can build the image using `yarn build-image`
|
||||
FROM node:18-bookworm-slim as build
|
||||
|
||||
USER node
|
||||
WORKDIR /app
|
||||
COPY --chown=node:node . .
|
||||
|
||||
RUN yarn install --frozen-lockfile
|
||||
|
||||
# tsc outputs type definitions to dist-types/ in the repo root, which are then consumed by the build
|
||||
RUN yarn tsc
|
||||
|
||||
# Build the backend, which bundles it all up into the packages/backend/dist folder.
|
||||
# The configuration files here should match the one you use inside the Dockerfile below.
|
||||
RUN yarn build:backend --config ../../app-config.yaml
|
||||
|
||||
FROM node:18-bookworm-slim
|
||||
|
||||
# Install isolate-vm dependencies, these are needed by the @backstage/plugin-scaffolder-backend.
|
||||
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
|
||||
--mount=type=cache,target=/var/lib/apt,sharing=locked \
|
||||
apt-get update && \
|
||||
apt-get install -y --no-install-recommends python3 g++ build-essential && \
|
||||
yarn config set python /usr/bin/python3
|
||||
|
||||
# Install sqlite3 dependencies. You can skip this if you don't use sqlite3 in the image,
|
||||
# in which case you should also move better-sqlite3 to "devDependencies" in package.json.
|
||||
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
|
||||
--mount=type=cache,target=/var/lib/apt,sharing=locked \
|
||||
apt-get update && \
|
||||
apt-get install -y --no-install-recommends libsqlite3-dev
|
||||
|
||||
# From here on we use the least-privileged `node` user to run the backend.
|
||||
USER node
|
||||
|
||||
# This should create the app dir as `node`.
|
||||
# If it is instead created as `root` then the `tar` command below will fail: `can't create directory 'packages/': Permission denied`.
|
||||
# If this occurs, then ensure BuildKit is enabled (`DOCKER_BUILDKIT=1`) so the app dir is correctly created as `node`.
|
||||
WORKDIR /app
|
||||
|
||||
# This switches many Node.js dependencies to production mode.
|
||||
ENV NODE_ENV production
|
||||
|
||||
# Copy repo skeleton first, to avoid unnecessary docker cache invalidation.
|
||||
# The skeleton contains the package.json of each package in the monorepo,
|
||||
# and along with yarn.lock and the root package.json, that's enough to run yarn install.
|
||||
COPY --from=build app/yarn.lock app/package.json app/packages/backend/dist/skeleton.tar.gz ./
|
||||
RUN tar xzf skeleton.tar.gz && rm skeleton.tar.gz
|
||||
|
||||
RUN --mount=type=cache,target=/home/node/.cache/yarn,sharing=locked,uid=1000,gid=1000 \
|
||||
yarn install --frozen-lockfile --production --network-timeout 300000
|
||||
|
||||
# Then copy the rest of the backend bundle, along with any other files we might want.
|
||||
COPY --from=build app/packages/backend/dist/bundle.tar.gz app/app-config*.yaml ./
|
||||
RUN tar xzf bundle.tar.gz && rm bundle.tar.gz
|
||||
|
||||
CMD ["node", "packages/backend", "--config", "app-config.yaml", "--config", "app-config.production.yaml"]
|
||||
```
|
||||
|
||||
In order to prevent the default `.dockerignore` file from preventing the copying of the relevant files into the first stage of our build, we need to override it with a custom one. This can also be added to the `packages/backend` directory, it should be called `Dockerfile.flightcontrol.dockerignore` and contain the following.
|
||||
|
||||
```ssh filename="Dockerfile.flightcontrol.dockerignore"
|
||||
.git
|
||||
.yarn/cache
|
||||
.yarn/install-state.gz
|
||||
node_modules
|
||||
packages/*/node_modules
|
||||
*.local.yaml
|
||||
```
|
||||
|
||||
With these two new files, you will now have the necessary steps in place to build the zip files, copy them into the second stage of the build, and deploy them via Flightcontrol.
|
||||
|
||||
# Creating a custom app-config.production file
|
||||
|
||||
Our next steps before switching to the Flightcontrol dashboard is to create a custom app-config.production file. The purposes of this is to update how Backstage will connect to the RDS hosted Postgres DB. The default `app-config.production` file uses the `host`, `port`, `user` and `password` environment variables.
|
||||
|
||||
When creating a database via the Flightcontrol dashboard, we are given an environment variable with the single connection string. Therefore we need an `app-config.production` file which uses this variable.
|
||||
|
||||
Within your Backstage project create a new file called `app-config.production.flightcontrol.yaml`. Add the following configuration to it:
|
||||
|
||||
```yaml filename="app-config.production.flightcontrol.yaml"
|
||||
app:
|
||||
# Should be the same as backend.baseUrl when using the `app-backend` plugin.
|
||||
baseUrl: http://localhost:7007
|
||||
|
||||
backend:
|
||||
# Note that the baseUrl should be the URL that the browser and other clients
|
||||
# should use when communicating with the backend, i.e. it needs to be
|
||||
# reachable not just from within the backend host, but from all of your
|
||||
# callers. When its value is "http://localhost:7007", it's strictly private
|
||||
# and can't be reached by others.
|
||||
baseUrl: http://localhost:7007
|
||||
# The listener can also be expressed as a single <host>:<port> string. In this case we bind to
|
||||
# all interfaces, the most permissive setting. The right value depends on your specific deployment.
|
||||
listen: ':7007'
|
||||
|
||||
# config options: https://node-postgres.com/api/client
|
||||
database:
|
||||
client: pg
|
||||
pluginDivisionMode: 'schema'
|
||||
connection:
|
||||
connectionString: ${POSTGRES_CON_STRING}
|
||||
ssl:
|
||||
require: true
|
||||
rejectUnauthorized: false
|
||||
|
||||
# Flightcontrol provides a single DB connection string
|
||||
# environment variable which can be renamed to POSTGRES_CON_STRING.
|
||||
# the following default values are therefore not used:
|
||||
# host: ${POSTGRES_HOST}
|
||||
# port: ${POSTGRES_PORT}
|
||||
# user: ${POSTGRES_USER}
|
||||
# password: ${POSTGRES_PASSWORD}
|
||||
# https://node-postgres.com/features/ssl
|
||||
# you can set the sslmode configuration option via the `PGSSLMODE` environment variable
|
||||
# see https://www.postgresql.org/docs/current/libpq-ssl.html Table 33.1. SSL Mode Descriptions (e.g. require)
|
||||
# ssl:
|
||||
# ca: # if you have a CA file and want to verify it you can uncomment this section
|
||||
# $file: <file-path>/ca/server.crt
|
||||
|
||||
catalog:
|
||||
# Overrides the default list locations from app-config.yaml as these contain example data.
|
||||
# See https://backstage.io/docs/features/software-catalog/#adding-components-to-the-catalog for more details
|
||||
# on how to get entities into the catalog.
|
||||
locations: []
|
||||
```
|
||||
|
||||
Make a note of the environment variable used in the `connectionString`. In our example above this is `POSTGRES_CON_STRING`. You will need this later when you have deployed the database via the Flightcontrol console, and wish to connect to it from Backstage.
|
||||
|
||||
# Deployment Via Dashboard
|
||||
|
||||
Ensure that custom `Dockerfile.flightcontrol`, `Dockerfile.flightcontrol.dockerignore` and `app-config.production.flightcontrol.yaml` have been committed to your repository before following the next steps.
|
||||
|
||||
Login into the Flightcontrol Dashboard and complete each of the following:
|
||||
|
||||
1. Create a new project from the Flightcontrol Dashboard
|
||||
|
||||
2. Select the GitHub repo for your Backstage project
|
||||
@@ -25,7 +176,7 @@ Before you begin, make sure you have a [Flightcontrol account](https://app.fligh
|
||||
| Health Check Path | /catalog |
|
||||
| Port | 7007 |
|
||||
|
||||
5. Click `Create Project` and complete any required steps (like linking your AWS account).
|
||||
5. Click `Create Project` and complete any required steps (like linking your AWS account). Remember to point the project to your custom files.
|
||||
|
||||
# Deployment via Code
|
||||
|
||||
@@ -33,7 +184,7 @@ Before you begin, make sure you have a [Flightcontrol account](https://app.fligh
|
||||
|
||||
2. Select the GitHub repo for your Backstage project
|
||||
|
||||
3. Select the `flightcontrol.json` Config Type.
|
||||
3. Select the `flightcontrol.json` Config Type. Update the example JSON below where applicable to your custom Dockerfile.
|
||||
|
||||
```json filename="flightcontrol.json"
|
||||
{
|
||||
@@ -72,6 +223,8 @@ Before you begin, make sure you have a [Flightcontrol account](https://app.fligh
|
||||
|
||||
If you need a database or Redis for your Backstage plugins, you can easily add those to your Flightcontrol deployment. For more information, see [the flightcontrol docs](https://www.flightcontrol.dev/docs/guides/flightcontrol/using-code?ref=backstage#redis).
|
||||
|
||||
When creating a Postgres RDS database you will need to update the connection string variable name to the one included in the `app-config.production.flightcontrol.yaml`. As noted above in our example we called this `POSTGRES_CON_STRING`.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
- [Flightcontrol Documentation](https://www.flightcontrol.dev/docs?ref=backstage)
|
||||
|
||||
@@ -384,7 +384,7 @@ $ yarn build-image --tag backstage:1.0.0
|
||||
There is no special wiring needed to access the PostgreSQL service. Since it's
|
||||
running on the same cluster, Kubernetes will inject `POSTGRES_SERVICE_HOST` and
|
||||
`POSTGRES_SERVICE_PORT` environment variables into our Backstage container.
|
||||
These can be used in the Backstage `app-config.yaml` along with the secrets:
|
||||
These can be used in the Backstage `app-config.yaml` along with the secrets. Apply this to `app-config.production.yaml` as well if you have one:
|
||||
|
||||
```yaml
|
||||
backend:
|
||||
|
||||
@@ -38,6 +38,7 @@ kubernetes:
|
||||
plural: 'rollouts'
|
||||
- url: http://127.0.0.2:9999
|
||||
name: aws-cluster-1
|
||||
title: 'My AWS Cluster Number One'
|
||||
authProvider: 'aws'
|
||||
- type: 'gke'
|
||||
projectId: 'gke-clusters'
|
||||
@@ -151,6 +152,11 @@ The base URL to the Kubernetes control plane. Can be found by using the
|
||||
A name to represent this cluster, this must be unique within the `clusters`
|
||||
array. Users will see this value in the Software Catalog Kubernetes plugin.
|
||||
|
||||
##### `clusters.\*.title`
|
||||
|
||||
A human-readable name for the cluster. This value will override the `name` field
|
||||
for the purposes of display in the catalog.
|
||||
|
||||
##### `clusters.\*.authProvider`
|
||||
|
||||
This determines how the Kubernetes client authenticates with the Kubernetes
|
||||
|
||||
@@ -838,7 +838,7 @@ The current set of well-known and common values for this field is:
|
||||
- `openapi` - An API definition in YAML or JSON format based on the
|
||||
[OpenAPI](https://swagger.io/specification/) version 2 or version 3 spec.
|
||||
- `asyncapi` - An API definition based on the
|
||||
[AsyncAPI](https://www.asyncapi.com/docs/reference/specification/latest) spec.
|
||||
[AsyncAPI](https://www.asyncapi.com/docs/reference/specification/latest) version 2 or version 3 spec.
|
||||
- `graphql` - An API definition based on
|
||||
[GraphQL schemas](https://spec.graphql.org/) for consuming
|
||||
[GraphQL](https://graphql.org/) based APIs.
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -69,7 +69,7 @@ module.exports = {
|
||||
],
|
||||
],
|
||||
markdown: {
|
||||
preprocessor({ filePath, fileContent }) {
|
||||
preprocessor({ fileContent }) {
|
||||
// Replace all HTML comments with emtpy strings as these are not supported by MDXv2.
|
||||
return fileContent.replace(/<!--.*?-->/gs, '');
|
||||
},
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
"docusaurus": "docusaurus"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@docusaurus/module-type-aliases": "0.0.0-5703",
|
||||
"@docusaurus/module-type-aliases": "^3.1.1",
|
||||
"@spotify/prettier-config": "^14.0.0",
|
||||
"@tsconfig/docusaurus": "^2.0.0",
|
||||
"@types/luxon": "^3.0.0",
|
||||
@@ -30,9 +30,9 @@
|
||||
},
|
||||
"prettier": "@spotify/prettier-config",
|
||||
"dependencies": {
|
||||
"@docusaurus/core": "0.0.0-5703",
|
||||
"@docusaurus/plugin-client-redirects": "0.0.0-5703",
|
||||
"@docusaurus/preset-classic": "0.0.0-5703",
|
||||
"@docusaurus/core": "^3.1.1",
|
||||
"@docusaurus/plugin-client-redirects": "^3.1.1",
|
||||
"@docusaurus/preset-classic": "^3.1.1",
|
||||
"@swc/core": "^1.3.46",
|
||||
"clsx": "^2.0.0",
|
||||
"docusaurus-plugin-sass": "^0.2.3",
|
||||
|
||||
+994
-1607
File diff suppressed because it is too large
Load Diff
+3
-3
@@ -62,7 +62,7 @@
|
||||
"@material-ui/pickers@^3.3.10": "patch:@material-ui/pickers@npm%3A3.3.11#./.yarn/patches/@material-ui-pickers-npm-3.3.11-1c8f68ea20.patch",
|
||||
"@material-ui/pickers@^3.2.10": "patch:@material-ui/pickers@npm%3A3.3.11#./.yarn/patches/@material-ui-pickers-npm-3.3.11-1c8f68ea20.patch"
|
||||
},
|
||||
"version": "1.23.0-next.2",
|
||||
"version": "1.23.0-next.3",
|
||||
"dependencies": {
|
||||
"@backstage/errors": "workspace:^",
|
||||
"@manypkg/get-packages": "^1.1.3",
|
||||
@@ -89,9 +89,9 @@
|
||||
"eslint-plugin-notice": "^0.9.10",
|
||||
"eslint-plugin-react": "^7.28.0",
|
||||
"eslint-plugin-testing-library": "^6.0.0",
|
||||
"fs-extra": "10.1.0",
|
||||
"fs-extra": "^11.2.0",
|
||||
"husky": "^9.0.0",
|
||||
"knip": "^4.3.1",
|
||||
"knip": "^5.0.0",
|
||||
"lint-staged": "^15.0.0",
|
||||
"minimist": "^1.2.5",
|
||||
"node-gyp": "^10.0.0",
|
||||
|
||||
@@ -1,5 +1,16 @@
|
||||
# @backstage/app-defaults
|
||||
|
||||
## 1.5.0-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/theme@0.5.1-next.1
|
||||
- @backstage/core-components@0.14.0-next.2
|
||||
- @backstage/core-app-api@1.12.0-next.1
|
||||
- @backstage/core-plugin-api@1.9.0-next.1
|
||||
- @backstage/plugin-permission-react@0.4.20-next.1
|
||||
|
||||
## 1.5.0-next.2
|
||||
|
||||
### Minor Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/app-defaults",
|
||||
"description": "Provides the default wiring of a Backstage App",
|
||||
"version": "1.5.0-next.2",
|
||||
"version": "1.5.0-next.3",
|
||||
"publishConfig": {
|
||||
"access": "public",
|
||||
"main": "dist/index.esm.js",
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
# app-next-example-plugin
|
||||
|
||||
## 0.0.6-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/core-components@0.14.0-next.2
|
||||
- @backstage/frontend-plugin-api@0.6.0-next.3
|
||||
|
||||
## 0.0.6-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
+4
-4
@@ -2,8 +2,8 @@
|
||||
|
||||
## Unused devDependencies (2)
|
||||
|
||||
| Name | Location |
|
||||
|:------------|:-------------|
|
||||
| msw | package.json |
|
||||
| cross-fetch | package.json |
|
||||
| Name | Location | Severity |
|
||||
| :---------- | :----------- | :------- |
|
||||
| cross-fetch | package.json | error |
|
||||
| msw | package.json | error |
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "app-next-example-plugin",
|
||||
"description": "Backstage internal example plugin",
|
||||
"version": "0.0.6-next.2",
|
||||
"version": "0.0.6-next.3",
|
||||
"publishConfig": {
|
||||
"access": "public",
|
||||
"main": "dist/index.esm.js",
|
||||
|
||||
@@ -1,5 +1,81 @@
|
||||
# example-app-next
|
||||
|
||||
## 0.0.6-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/plugin-api-docs@0.11.0-next.3
|
||||
- @backstage/cli@0.25.2-next.3
|
||||
- @backstage/plugin-kubernetes@0.11.5-next.3
|
||||
- @backstage/theme@0.5.1-next.1
|
||||
- @backstage/plugin-playlist@0.2.4-next.3
|
||||
- @backstage/plugin-catalog@1.17.0-next.3
|
||||
- @backstage/frontend-app-api@0.6.0-next.3
|
||||
- @backstage/plugin-app-visualizer@0.1.1-next.3
|
||||
- @backstage/core-components@0.14.0-next.2
|
||||
- @backstage/plugin-catalog-react@1.10.0-next.3
|
||||
- @backstage/plugin-gcp-projects@0.3.46-next.2
|
||||
- @backstage/plugin-scaffolder-react@1.8.0-next.3
|
||||
- @backstage/plugin-scaffolder@1.18.0-next.3
|
||||
- @backstage/plugin-techdocs-module-addons-contrib@1.1.5-next.3
|
||||
- @backstage/plugin-home@0.6.2-next.3
|
||||
- @backstage/plugin-gcalendar@0.3.23-next.2
|
||||
- @backstage/plugin-microsoft-calendar@0.1.12-next.2
|
||||
- @backstage/plugin-techdocs@1.10.0-next.3
|
||||
- @backstage/plugin-catalog-import@0.10.6-next.3
|
||||
- @backstage/plugin-github-actions@0.6.11-next.3
|
||||
- @backstage/plugin-dynatrace@9.0.0-next.3
|
||||
- @backstage/app-defaults@1.5.0-next.3
|
||||
- app-next-example-plugin@0.0.6-next.3
|
||||
- @backstage/catalog-model@1.4.4-next.0
|
||||
- @backstage/core-app-api@1.12.0-next.1
|
||||
- @backstage/core-compat-api@0.2.0-next.3
|
||||
- @backstage/core-plugin-api@1.9.0-next.1
|
||||
- @backstage/frontend-plugin-api@0.6.0-next.3
|
||||
- @backstage/integration-react@1.1.24-next.2
|
||||
- @backstage/plugin-adr@0.6.13-next.3
|
||||
- @backstage/plugin-airbrake@0.3.30-next.3
|
||||
- @backstage/plugin-apache-airflow@0.2.20-next.2
|
||||
- @backstage/plugin-azure-devops@0.3.12-next.3
|
||||
- @backstage/plugin-azure-sites@0.1.19-next.3
|
||||
- @backstage/plugin-badges@0.2.54-next.3
|
||||
- @backstage/plugin-catalog-common@1.0.21-next.0
|
||||
- @backstage/plugin-catalog-graph@0.4.0-next.3
|
||||
- @backstage/plugin-catalog-unprocessed-entities@0.1.8-next.2
|
||||
- @backstage/plugin-cloudbuild@0.4.0-next.3
|
||||
- @backstage/plugin-code-coverage@0.2.23-next.3
|
||||
- @backstage/plugin-cost-insights@0.12.19-next.3
|
||||
- @backstage/plugin-devtools@0.1.9-next.3
|
||||
- @backstage/plugin-entity-feedback@0.2.13-next.3
|
||||
- @backstage/plugin-explore@0.4.16-next.3
|
||||
- @backstage/plugin-gocd@0.1.36-next.3
|
||||
- @backstage/plugin-graphiql@0.3.3-next.3
|
||||
- @backstage/plugin-jenkins@0.9.5-next.3
|
||||
- @backstage/plugin-kafka@0.3.30-next.3
|
||||
- @backstage/plugin-lighthouse@0.4.15-next.3
|
||||
- @backstage/plugin-linguist@0.1.15-next.3
|
||||
- @backstage/plugin-linguist-common@0.1.2
|
||||
- @backstage/plugin-newrelic@0.3.45-next.2
|
||||
- @backstage/plugin-newrelic-dashboard@0.3.5-next.3
|
||||
- @backstage/plugin-octopus-deploy@0.2.12-next.3
|
||||
- @backstage/plugin-org@0.6.20-next.3
|
||||
- @backstage/plugin-pagerduty@0.7.2-next.3
|
||||
- @backstage/plugin-permission-react@0.4.20-next.1
|
||||
- @backstage/plugin-puppetdb@0.1.13-next.3
|
||||
- @backstage/plugin-rollbar@0.4.30-next.3
|
||||
- @backstage/plugin-search@1.4.6-next.3
|
||||
- @backstage/plugin-search-common@1.2.10
|
||||
- @backstage/plugin-search-react@1.7.6-next.3
|
||||
- @backstage/plugin-sentry@0.5.15-next.3
|
||||
- @backstage/plugin-shortcuts@0.3.19-next.2
|
||||
- @backstage/plugin-stackstorm@0.1.11-next.2
|
||||
- @backstage/plugin-tech-insights@0.3.22-next.3
|
||||
- @backstage/plugin-tech-radar@0.6.13-next.3
|
||||
- @backstage/plugin-techdocs-react@1.1.16-next.2
|
||||
- @backstage/plugin-todo@0.2.34-next.3
|
||||
- @backstage/plugin-user-settings@0.8.1-next.3
|
||||
|
||||
## 0.0.6-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
Generated
+74
-75
@@ -1,82 +1,81 @@
|
||||
# Knip report
|
||||
|
||||
## Unused dependencies (64)
|
||||
## Unused dependencies (63)
|
||||
|
||||
| Name | Location |
|
||||
|:-------------------------------------------------|:-------------|
|
||||
| lodash | package.json |
|
||||
| history | package.json |
|
||||
| react-use | package.json |
|
||||
| @octokit/rest | package.json |
|
||||
| zen-observable | package.json |
|
||||
| @material-ui/lab | package.json |
|
||||
| @backstage/theme | package.json |
|
||||
| @backstage/plugin-org | package.json |
|
||||
| @backstage/plugin-adr | package.json |
|
||||
| @backstage/plugin-todo | package.json |
|
||||
| @backstage/plugin-gocd | package.json |
|
||||
| app-next-example-plugin | package.json |
|
||||
| @backstage/plugin-kafka | package.json |
|
||||
| @backstage/app-defaults | package.json |
|
||||
| @backstage/plugin-sentry | package.json |
|
||||
| @backstage/plugin-search | package.json |
|
||||
| @backstage/plugin-badges | package.json |
|
||||
| @backstage/catalog-model | package.json |
|
||||
| @backstage/plugin-rollbar | package.json |
|
||||
| @backstage/plugin-jenkins | package.json |
|
||||
| @backstage/plugin-explore | package.json |
|
||||
| @backstage/plugin-catalog | package.json |
|
||||
| @circleci/backstage-plugin | package.json |
|
||||
| @backstage/plugin-puppetdb | package.json |
|
||||
| @backstage/plugin-playlist | package.json |
|
||||
| @backstage/plugin-newrelic | package.json |
|
||||
| @backstage/plugin-linguist | package.json |
|
||||
| @backstage/plugin-devtools | package.json |
|
||||
| @backstage/plugin-api-docs | package.json |
|
||||
| @backstage/plugin-airbrake | package.json |
|
||||
| @backstage/plugin-shortcuts | package.json |
|
||||
| @backstage/plugin-dynatrace | package.json |
|
||||
| @backstage/plugin-stackstorm | package.json |
|
||||
| @backstage/plugin-scaffolder | package.json |
|
||||
| @backstage/plugin-lighthouse | package.json |
|
||||
| @backstage/plugin-kubernetes | package.json |
|
||||
| @backstage/plugin-cloudbuild | package.json |
|
||||
| @backstage/plugin-azure-sites | package.json |
|
||||
| @backstage/plugin-search-react | package.json |
|
||||
| @backstage/plugin-gcp-projects | package.json |
|
||||
| @backstage/plugin-azure-devops | package.json |
|
||||
| @backstage/plugin-tech-insights | package.json |
|
||||
| @backstage/plugin-search-common | package.json |
|
||||
| @backstage/plugin-cost-insights | package.json |
|
||||
| @backstage/plugin-code-coverage | package.json |
|
||||
| @backstage/plugin-catalog-react | package.json |
|
||||
| @backstage/plugin-catalog-graph | package.json |
|
||||
| @backstage/plugin-techdocs-react | package.json |
|
||||
| @backstage/plugin-octopus-deploy | package.json |
|
||||
| @backstage/plugin-github-actions | package.json |
|
||||
| @backstage/plugin-catalog-common | package.json |
|
||||
| @backstage/plugin-apache-airflow | package.json |
|
||||
| @backstage/plugin-linguist-common | package.json |
|
||||
| @backstage/plugin-entity-feedback | package.json |
|
||||
| @backstage/plugin-scaffolder-react | package.json |
|
||||
| @backstage/plugin-permission-react | package.json |
|
||||
| @roadiehq/backstage-plugin-travis-ci | package.json |
|
||||
| @roadiehq/backstage-plugin-buildkite | package.json |
|
||||
| @backstage/plugin-newrelic-dashboard | package.json |
|
||||
| @oriflame/backstage-plugin-score-card | package.json |
|
||||
| @roadiehq/backstage-plugin-github-insights | package.json |
|
||||
| @backstage/plugin-catalog-unprocessed-entities | package.json |
|
||||
| @roadiehq/backstage-plugin-github-pull-requests | package.json |
|
||||
| @backstage/plugin-techdocs-module-addons-contrib | package.json |
|
||||
| Name | Location | Severity |
|
||||
| :----------------------------------------------- | :----------- | :------- |
|
||||
| @backstage/plugin-techdocs-module-addons-contrib | package.json | error |
|
||||
| @roadiehq/backstage-plugin-github-pull-requests | package.json | error |
|
||||
| @backstage/plugin-catalog-unprocessed-entities | package.json | error |
|
||||
| @roadiehq/backstage-plugin-github-insights | package.json | error |
|
||||
| @oriflame/backstage-plugin-score-card | package.json | error |
|
||||
| @backstage/plugin-newrelic-dashboard | package.json | error |
|
||||
| @roadiehq/backstage-plugin-buildkite | package.json | error |
|
||||
| @roadiehq/backstage-plugin-travis-ci | package.json | error |
|
||||
| @backstage/plugin-permission-react | package.json | error |
|
||||
| @backstage/plugin-scaffolder-react | package.json | error |
|
||||
| @backstage/plugin-entity-feedback | package.json | error |
|
||||
| @backstage/plugin-linguist-common | package.json | error |
|
||||
| @backstage/plugin-apache-airflow | package.json | error |
|
||||
| @backstage/plugin-catalog-common | package.json | error |
|
||||
| @backstage/plugin-github-actions | package.json | error |
|
||||
| @backstage/plugin-octopus-deploy | package.json | error |
|
||||
| @backstage/plugin-techdocs-react | package.json | error |
|
||||
| @backstage/plugin-catalog-graph | package.json | error |
|
||||
| @backstage/plugin-catalog-react | package.json | error |
|
||||
| @backstage/plugin-code-coverage | package.json | error |
|
||||
| @backstage/plugin-cost-insights | package.json | error |
|
||||
| @backstage/plugin-search-common | package.json | error |
|
||||
| @backstage/plugin-tech-insights | package.json | error |
|
||||
| @backstage/plugin-azure-devops | package.json | error |
|
||||
| @backstage/plugin-gcp-projects | package.json | error |
|
||||
| @backstage/plugin-search-react | package.json | error |
|
||||
| @backstage/plugin-azure-sites | package.json | error |
|
||||
| @backstage/plugin-cloudbuild | package.json | error |
|
||||
| @backstage/plugin-kubernetes | package.json | error |
|
||||
| @backstage/plugin-lighthouse | package.json | error |
|
||||
| @backstage/plugin-scaffolder | package.json | error |
|
||||
| @backstage/plugin-stackstorm | package.json | error |
|
||||
| @backstage/plugin-dynatrace | package.json | error |
|
||||
| @backstage/plugin-shortcuts | package.json | error |
|
||||
| @backstage/plugin-airbrake | package.json | error |
|
||||
| @backstage/plugin-api-docs | package.json | error |
|
||||
| @backstage/plugin-devtools | package.json | error |
|
||||
| @backstage/plugin-linguist | package.json | error |
|
||||
| @backstage/plugin-newrelic | package.json | error |
|
||||
| @backstage/plugin-playlist | package.json | error |
|
||||
| @backstage/plugin-puppetdb | package.json | error |
|
||||
| @circleci/backstage-plugin | package.json | error |
|
||||
| @backstage/plugin-catalog | package.json | error |
|
||||
| @backstage/plugin-explore | package.json | error |
|
||||
| @backstage/plugin-jenkins | package.json | error |
|
||||
| @backstage/plugin-rollbar | package.json | error |
|
||||
| @backstage/catalog-model | package.json | error |
|
||||
| @backstage/plugin-badges | package.json | error |
|
||||
| @backstage/plugin-search | package.json | error |
|
||||
| @backstage/plugin-sentry | package.json | error |
|
||||
| @backstage/app-defaults | package.json | error |
|
||||
| @backstage/plugin-kafka | package.json | error |
|
||||
| app-next-example-plugin | package.json | error |
|
||||
| @backstage/plugin-gocd | package.json | error |
|
||||
| @backstage/plugin-todo | package.json | error |
|
||||
| @backstage/plugin-adr | package.json | error |
|
||||
| @backstage/plugin-org | package.json | error |
|
||||
| @material-ui/lab | package.json | error |
|
||||
| zen-observable | package.json | error |
|
||||
| @octokit/rest | package.json | error |
|
||||
| react-use | package.json | error |
|
||||
| history | package.json | error |
|
||||
| lodash | package.json | error |
|
||||
|
||||
## Unused devDependencies (6)
|
||||
|
||||
| Name | Location |
|
||||
|:----------------------------|:-------------|
|
||||
| cross-env | package.json |
|
||||
| @types/jquery | package.json |
|
||||
| @testing-library/dom | package.json |
|
||||
| @types/zen-observable | package.json |
|
||||
| @testing-library/react | package.json |
|
||||
| @testing-library/user-event | package.json |
|
||||
| Name | Location | Severity |
|
||||
| :-------------------------- | :----------- | :------- |
|
||||
| @testing-library/user-event | package.json | error |
|
||||
| @testing-library/react | package.json | error |
|
||||
| @types/zen-observable | package.json | error |
|
||||
| @testing-library/dom | package.json | error |
|
||||
| @types/jquery | package.json | error |
|
||||
| cross-env | package.json | error |
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "example-app-next",
|
||||
"version": "0.0.6-next.2",
|
||||
"version": "0.0.6-next.3",
|
||||
"private": true,
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
||||
@@ -1,5 +1,83 @@
|
||||
# example-app
|
||||
|
||||
## 0.2.92-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/plugin-api-docs@0.11.0-next.3
|
||||
- @backstage/cli@0.25.2-next.3
|
||||
- @backstage/plugin-kubernetes@0.11.5-next.3
|
||||
- @backstage/theme@0.5.1-next.1
|
||||
- @backstage/plugin-playlist@0.2.4-next.3
|
||||
- @backstage/plugin-catalog@1.17.0-next.3
|
||||
- @backstage/frontend-app-api@0.6.0-next.3
|
||||
- @backstage/plugin-notifications@0.0.1-next.1
|
||||
- @backstage/plugin-signals@0.0.1-next.3
|
||||
- @backstage/core-components@0.14.0-next.2
|
||||
- @backstage/plugin-catalog-react@1.10.0-next.3
|
||||
- @backstage/plugin-gcp-projects@0.3.46-next.2
|
||||
- @backstage/plugin-scaffolder-react@1.8.0-next.3
|
||||
- @backstage/plugin-scaffolder@1.18.0-next.3
|
||||
- @backstage/plugin-techdocs-module-addons-contrib@1.1.5-next.3
|
||||
- @backstage/plugin-home@0.6.2-next.3
|
||||
- @backstage/plugin-gcalendar@0.3.23-next.2
|
||||
- @backstage/plugin-microsoft-calendar@0.1.12-next.2
|
||||
- @backstage/plugin-techdocs@1.10.0-next.3
|
||||
- @backstage/plugin-catalog-import@0.10.6-next.3
|
||||
- @backstage/plugin-github-actions@0.6.11-next.3
|
||||
- @backstage/plugin-dynatrace@9.0.0-next.3
|
||||
- @backstage/plugin-kubernetes-cluster@0.0.6-next.3
|
||||
- @backstage/app-defaults@1.5.0-next.3
|
||||
- @backstage/catalog-model@1.4.4-next.0
|
||||
- @backstage/config@1.1.1
|
||||
- @backstage/core-app-api@1.12.0-next.1
|
||||
- @backstage/core-plugin-api@1.9.0-next.1
|
||||
- @backstage/integration-react@1.1.24-next.2
|
||||
- @backstage/plugin-adr@0.6.13-next.3
|
||||
- @backstage/plugin-airbrake@0.3.30-next.3
|
||||
- @backstage/plugin-apache-airflow@0.2.20-next.2
|
||||
- @backstage/plugin-azure-devops@0.3.12-next.3
|
||||
- @backstage/plugin-azure-sites@0.1.19-next.3
|
||||
- @backstage/plugin-badges@0.2.54-next.3
|
||||
- @backstage/plugin-catalog-common@1.0.21-next.0
|
||||
- @backstage/plugin-catalog-graph@0.4.0-next.3
|
||||
- @backstage/plugin-catalog-unprocessed-entities@0.1.8-next.2
|
||||
- @backstage/plugin-cloudbuild@0.4.0-next.3
|
||||
- @backstage/plugin-code-coverage@0.2.23-next.3
|
||||
- @backstage/plugin-cost-insights@0.12.19-next.3
|
||||
- @backstage/plugin-devtools@0.1.9-next.3
|
||||
- @backstage/plugin-entity-feedback@0.2.13-next.3
|
||||
- @backstage/plugin-explore@0.4.16-next.3
|
||||
- @backstage/plugin-gocd@0.1.36-next.3
|
||||
- @backstage/plugin-graphiql@0.3.3-next.3
|
||||
- @backstage/plugin-jenkins@0.9.5-next.3
|
||||
- @backstage/plugin-kafka@0.3.30-next.3
|
||||
- @backstage/plugin-lighthouse@0.4.15-next.3
|
||||
- @backstage/plugin-linguist@0.1.15-next.3
|
||||
- @backstage/plugin-linguist-common@0.1.2
|
||||
- @backstage/plugin-newrelic@0.3.45-next.2
|
||||
- @backstage/plugin-newrelic-dashboard@0.3.5-next.3
|
||||
- @backstage/plugin-nomad@0.1.11-next.3
|
||||
- @backstage/plugin-octopus-deploy@0.2.12-next.3
|
||||
- @backstage/plugin-org@0.6.20-next.3
|
||||
- @backstage/plugin-pagerduty@0.7.2-next.3
|
||||
- @backstage/plugin-permission-react@0.4.20-next.1
|
||||
- @backstage/plugin-puppetdb@0.1.13-next.3
|
||||
- @backstage/plugin-rollbar@0.4.30-next.3
|
||||
- @backstage/plugin-search@1.4.6-next.3
|
||||
- @backstage/plugin-search-common@1.2.10
|
||||
- @backstage/plugin-search-react@1.7.6-next.3
|
||||
- @backstage/plugin-sentry@0.5.15-next.3
|
||||
- @backstage/plugin-shortcuts@0.3.19-next.2
|
||||
- @backstage/plugin-stack-overflow@0.1.25-next.3
|
||||
- @backstage/plugin-stackstorm@0.1.11-next.2
|
||||
- @backstage/plugin-tech-insights@0.3.22-next.3
|
||||
- @backstage/plugin-tech-radar@0.6.13-next.3
|
||||
- @backstage/plugin-techdocs-react@1.1.16-next.2
|
||||
- @backstage/plugin-todo@0.2.34-next.3
|
||||
- @backstage/plugin-user-settings@0.8.1-next.3
|
||||
|
||||
## 0.2.92-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
Generated
+27
-28
@@ -1,38 +1,37 @@
|
||||
# Knip report
|
||||
|
||||
## Unused dependencies (15)
|
||||
## Unused dependencies (14)
|
||||
|
||||
| Name | Location |
|
||||
|:----------------------------------|:-------------|
|
||||
| vite | package.json |
|
||||
| history | package.json |
|
||||
| react-router | package.json |
|
||||
| @octokit/rest | package.json |
|
||||
| zen-observable | package.json |
|
||||
| vite-plugin-html | package.json |
|
||||
| @material-ui/lab | package.json |
|
||||
| @backstage/theme | package.json |
|
||||
| @vitejs/plugin-react | package.json |
|
||||
| vite-plugin-node-polyfills | package.json |
|
||||
| @backstage/plugin-airbrake | package.json |
|
||||
| @backstage/frontend-app-api | package.json |
|
||||
| @backstage/plugin-azure-sites | package.json |
|
||||
| @backstage/plugin-search-common | package.json |
|
||||
| @backstage/plugin-linguist-common | package.json |
|
||||
| Name | Location | Severity |
|
||||
| :-------------------------------- | :----------- | :------- |
|
||||
| @backstage/plugin-linguist-common | package.json | error |
|
||||
| @backstage/plugin-search-common | package.json | error |
|
||||
| @backstage/plugin-azure-sites | package.json | error |
|
||||
| @backstage/frontend-app-api | package.json | error |
|
||||
| @backstage/plugin-airbrake | package.json | error |
|
||||
| vite-plugin-node-polyfills | package.json | error |
|
||||
| @vitejs/plugin-react | package.json | error |
|
||||
| @material-ui/lab | package.json | error |
|
||||
| vite-plugin-html | package.json | error |
|
||||
| zen-observable | package.json | error |
|
||||
| @octokit/rest | package.json | error |
|
||||
| react-router | package.json | error |
|
||||
| history | package.json | error |
|
||||
| vite | package.json | error |
|
||||
|
||||
## Unused devDependencies (5)
|
||||
|
||||
| Name | Location |
|
||||
|:----------------------------|:-------------|
|
||||
| cross-env | package.json |
|
||||
| @types/jquery | package.json |
|
||||
| @testing-library/dom | package.json |
|
||||
| @types/zen-observable | package.json |
|
||||
| @testing-library/user-event | package.json |
|
||||
| Name | Location | Severity |
|
||||
| :-------------------------- | :----------- | :------- |
|
||||
| @testing-library/user-event | package.json | error |
|
||||
| @types/zen-observable | package.json | error |
|
||||
| @testing-library/dom | package.json | error |
|
||||
| @types/jquery | package.json | error |
|
||||
| cross-env | package.json | error |
|
||||
|
||||
## Unlisted dependencies (1)
|
||||
|
||||
| Name | Location |
|
||||
|:------------|:---------------------------------------------------------|
|
||||
| @rjsf/utils | src/components/scaffolder/customScaffolderExtensions.tsx |
|
||||
| Name | Location | Severity |
|
||||
| :---------- | :------------------------------------------------------- | :------- |
|
||||
| @rjsf/utils | src/components/scaffolder/customScaffolderExtensions.tsx | error |
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "example-app",
|
||||
"version": "0.2.92-next.2",
|
||||
"version": "0.2.92-next.3",
|
||||
"private": true,
|
||||
"backstage": {
|
||||
"role": "frontend"
|
||||
@@ -104,7 +104,7 @@
|
||||
"react-use": "^17.2.4",
|
||||
"vite": "^4.4.9",
|
||||
"vite-plugin-html": "^3.2.0",
|
||||
"vite-plugin-node-polyfills": "^0.19.0",
|
||||
"vite-plugin-node-polyfills": "^0.21.0",
|
||||
"zen-observable": "^0.10.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -1,5 +1,23 @@
|
||||
# @backstage/backend-app-api
|
||||
|
||||
## 0.5.11-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 54ad8e1: Allow the `createConfigSecretEnumerator` to take an optional `schema` argument with an already-loaded global configuration schema.
|
||||
- Updated dependencies
|
||||
- @backstage/backend-common@0.21.0-next.3
|
||||
- @backstage/cli-node@0.2.3-next.0
|
||||
- @backstage/backend-tasks@0.5.15-next.3
|
||||
- @backstage/config-loader@1.6.2-next.0
|
||||
- @backstage/plugin-auth-node@0.4.4-next.3
|
||||
- @backstage/plugin-permission-node@0.7.21-next.3
|
||||
- @backstage/backend-plugin-api@0.6.10-next.3
|
||||
- @backstage/cli-common@0.1.13
|
||||
- @backstage/config@1.1.1
|
||||
- @backstage/errors@1.2.3
|
||||
- @backstage/types@1.1.1
|
||||
|
||||
## 0.5.11-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
Generated
+2
@@ -9,6 +9,7 @@ import type { AppConfig } from '@backstage/config';
|
||||
import { BackendFeature } from '@backstage/backend-plugin-api';
|
||||
import { CacheClient } from '@backstage/backend-common';
|
||||
import { Config } from '@backstage/config';
|
||||
import { ConfigSchema } from '@backstage/config-loader';
|
||||
import { CorsOptions } from 'cors';
|
||||
import { DiscoveryService } from '@backstage/backend-plugin-api';
|
||||
import { ErrorRequestHandler } from 'express';
|
||||
@@ -64,6 +65,7 @@ export const cacheServiceFactory: () => ServiceFactory<CacheClient, 'plugin'>;
|
||||
export function createConfigSecretEnumerator(options: {
|
||||
logger: LoggerService;
|
||||
dir?: string;
|
||||
schema?: ConfigSchema;
|
||||
}): Promise<(config: Config) => Iterable<string>>;
|
||||
|
||||
// @public
|
||||
|
||||
Generated
+3
-3
@@ -2,7 +2,7 @@
|
||||
|
||||
## Unused dependencies (1)
|
||||
|
||||
| Name | Location |
|
||||
|:------------------|:-------------|
|
||||
| winston-transport | package.json |
|
||||
| Name | Location | Severity |
|
||||
| :---------------- | :----------- | :------- |
|
||||
| winston-transport | package.json | error |
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/backend-app-api",
|
||||
"description": "Core API used by Backstage backend apps",
|
||||
"version": "0.5.11-next.2",
|
||||
"version": "0.5.11-next.3",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"publishConfig": {
|
||||
@@ -63,7 +63,7 @@
|
||||
"cors": "^2.8.5",
|
||||
"express": "^4.17.1",
|
||||
"express-promise-router": "^4.1.0",
|
||||
"fs-extra": "10.1.0",
|
||||
"fs-extra": "^11.2.0",
|
||||
"helmet": "^6.0.0",
|
||||
"lodash": "^4.17.21",
|
||||
"logform": "^2.3.2",
|
||||
@@ -80,7 +80,7 @@
|
||||
"@backstage/backend-test-utils": "workspace:^",
|
||||
"@backstage/cli": "workspace:^",
|
||||
"@types/compression": "^1.7.0",
|
||||
"@types/fs-extra": "^9.0.3",
|
||||
"@types/fs-extra": "^11.0.0",
|
||||
"@types/http-errors": "^2.0.0",
|
||||
"@types/minimist": "^1.2.0",
|
||||
"@types/morgan": "^1.9.0",
|
||||
|
||||
@@ -23,6 +23,7 @@ import {
|
||||
loadConfig,
|
||||
ConfigTarget,
|
||||
LoadConfigOptionsRemote,
|
||||
ConfigSchema,
|
||||
} from '@backstage/config-loader';
|
||||
import { ConfigReader } from '@backstage/config';
|
||||
import type { Config, AppConfig } from '@backstage/config';
|
||||
@@ -34,12 +35,15 @@ import { isValidUrl } from '../lib/urls';
|
||||
export async function createConfigSecretEnumerator(options: {
|
||||
logger: LoggerService;
|
||||
dir?: string;
|
||||
schema?: ConfigSchema;
|
||||
}): Promise<(config: Config) => Iterable<string>> {
|
||||
const { logger, dir = process.cwd() } = options;
|
||||
const { packages } = await getPackages(dir);
|
||||
const schema = await loadConfigSchema({
|
||||
dependencies: packages.map(p => p.packageJson.name),
|
||||
});
|
||||
const schema =
|
||||
options.schema ??
|
||||
(await loadConfigSchema({
|
||||
dependencies: packages.map(p => p.packageJson.name).filter(() => false),
|
||||
}));
|
||||
|
||||
return (config: Config) => {
|
||||
const [secretsData] = schema.process(
|
||||
|
||||
@@ -1,5 +1,32 @@
|
||||
# @backstage/backend-common
|
||||
|
||||
## 0.21.0-next.3
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- bbe374e: **BREAKING**: `A gitilesBaseUrl` must be provided for the Gerrit integration to work.
|
||||
You can disable this check by setting `DISABLE_GERRIT_GITILES_REQUIREMENT=1` but
|
||||
this will be removed in a future release. If you are not able to use the Gitiles
|
||||
Gerrit plugin, please open an issue towards `https://github.com/backstage/backstage`
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 6707216: Added a new `LegacyRootDatabaseService` interface that can be used to avoid direct dependencies on the `DatabaseManager`.
|
||||
- 842171a: Fix a bug with S3 Fetch that caused all objects to be flattened within a single folder on the local file system.
|
||||
- ece5a8f: Add a User-Agent header for calls towards Google Cloud Storage.
|
||||
- 1cae748: Updated dependency `git-url-parse` to `^14.0.0`.
|
||||
- Updated dependencies
|
||||
- @backstage/integration-aws-node@0.1.9-next.0
|
||||
- @backstage/integration@1.9.0-next.1
|
||||
- @backstage/backend-app-api@0.5.11-next.3
|
||||
- @backstage/config-loader@1.6.2-next.0
|
||||
- @backstage/backend-dev-utils@0.1.4-next.0
|
||||
- @backstage/backend-plugin-api@0.6.10-next.3
|
||||
- @backstage/cli-common@0.1.13
|
||||
- @backstage/config@1.1.1
|
||||
- @backstage/errors@1.2.3
|
||||
- @backstage/types@1.1.1
|
||||
|
||||
## 0.21.0-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
Generated
+13
-13
@@ -2,23 +2,23 @@
|
||||
|
||||
## Unused dependencies (3)
|
||||
|
||||
| Name | Location |
|
||||
|:----------------------|:-------------|
|
||||
| mysql2 | package.json |
|
||||
| @types/webpack-env | package.json |
|
||||
| @manypkg/get-packages | package.json |
|
||||
| Name | Location | Severity |
|
||||
| :-------------------- | :----------- | :------- |
|
||||
| @manypkg/get-packages | package.json | error |
|
||||
| @types/webpack-env | package.json | error |
|
||||
| mysql2 | package.json | error |
|
||||
|
||||
## Unused devDependencies (3)
|
||||
|
||||
| Name | Location |
|
||||
|:-------------------|:-------------|
|
||||
| mysql2 | package.json |
|
||||
| better-sqlite3 | package.json |
|
||||
| @types/webpack-env | package.json |
|
||||
| Name | Location | Severity |
|
||||
| :----------------- | :----------- | :------- |
|
||||
| @types/webpack-env | package.json | error |
|
||||
| better-sqlite3 | package.json | error |
|
||||
| mysql2 | package.json | error |
|
||||
|
||||
## Referenced optional peerDependencies (1)
|
||||
|
||||
| Name | Location |
|
||||
|:---------------------|:-------------|
|
||||
| pg-connection-string | package.json |
|
||||
| Name | Location | Severity |
|
||||
| :------------------- | :----------- | :------- |
|
||||
| pg-connection-string | package.json | error |
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/backend-common",
|
||||
"description": "Common functionality library for Backstage backends",
|
||||
"version": "0.21.0-next.2",
|
||||
"version": "0.21.0-next.3",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"publishConfig": {
|
||||
@@ -80,10 +80,10 @@
|
||||
"compression": "^1.7.4",
|
||||
"concat-stream": "^2.0.0",
|
||||
"cors": "^2.8.5",
|
||||
"dockerode": "^3.3.1",
|
||||
"dockerode": "^4.0.0",
|
||||
"express": "^4.17.1",
|
||||
"express-promise-router": "^4.1.0",
|
||||
"fs-extra": "10.1.0",
|
||||
"fs-extra": "^11.2.0",
|
||||
"git-url-parse": "^14.0.0",
|
||||
"helmet": "^6.0.0",
|
||||
"isomorphic-git": "^1.23.0",
|
||||
@@ -122,7 +122,7 @@
|
||||
"@types/base64-stream": "^1.0.2",
|
||||
"@types/compression": "^1.7.0",
|
||||
"@types/concat-stream": "^2.0.0",
|
||||
"@types/fs-extra": "^9.0.3",
|
||||
"@types/fs-extra": "^11.0.0",
|
||||
"@types/http-errors": "^2.0.0",
|
||||
"@types/pg": "^8.6.6",
|
||||
"@types/supertest": "^2.0.8",
|
||||
|
||||
@@ -46,6 +46,7 @@ import {
|
||||
import { AbortController } from '@aws-sdk/abort-controller';
|
||||
import { ReadUrlResponseFactory } from './ReadUrlResponseFactory';
|
||||
import { Readable } from 'stream';
|
||||
import { relative } from 'path/posix';
|
||||
|
||||
export const DEFAULT_REGION = 'us-east-1';
|
||||
|
||||
@@ -345,7 +346,7 @@ export class AwsS3UrlReader implements UrlReader {
|
||||
|
||||
responses.push({
|
||||
data: s3ObjectData,
|
||||
path: String(allObjects[i]),
|
||||
path: relative(path, String(allObjects[i])),
|
||||
lastModifiedAt: response?.LastModified ?? undefined,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -32,10 +32,15 @@ import path from 'path';
|
||||
import { getVoidLogger } from '../logging';
|
||||
import { UrlReaderPredicateTuple } from './types';
|
||||
import { DefaultReadTreeResponseFactory } from './tree';
|
||||
import { GerritUrlReader } from './GerritUrlReader';
|
||||
import {
|
||||
GITILES_BASE_URL_DEPRECATION_MESSSAGE,
|
||||
GerritUrlReader,
|
||||
} from './GerritUrlReader';
|
||||
import getRawBody from 'raw-body';
|
||||
|
||||
const mockDir = createMockDirectory({ mockOsTmpDir: true });
|
||||
const env = process.env;
|
||||
process.env = { ...env, DISABLE_GERRIT_GITILES_REQUIREMENT: '1' };
|
||||
|
||||
const treeResponseFactory = DefaultReadTreeResponseFactory.create({
|
||||
config: new ConfigReader({}),
|
||||
@@ -93,10 +98,14 @@ describe.skip('GerritUrlReader', () => {
|
||||
const worker = setupServer();
|
||||
setupRequestMockHandlers(worker);
|
||||
|
||||
beforeEach(mockDir.clear);
|
||||
beforeEach(() => {
|
||||
mockDir.clear();
|
||||
process.env = { ...env, DISABLE_GERRIT_GITILES_REQUIREMENT: '1' };
|
||||
});
|
||||
|
||||
afterAll(() => {
|
||||
jest.clearAllMocks();
|
||||
process.env = env;
|
||||
});
|
||||
|
||||
describe('reader factory', () => {
|
||||
@@ -117,6 +126,29 @@ describe.skip('GerritUrlReader', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('handle optional gitilesBaseUrl deprecation', () => {
|
||||
it('should throw if gitilesBaseUrl is not set.', () => {
|
||||
process.env = env;
|
||||
expect(() =>
|
||||
createReader({
|
||||
integrations: {
|
||||
gerrit: [{ host: 'gerrit.com' }],
|
||||
},
|
||||
}),
|
||||
).toThrow(GITILES_BASE_URL_DEPRECATION_MESSSAGE);
|
||||
});
|
||||
it('should not throw if gitilesBaseUrl requirement is overridden.', () => {
|
||||
process.env = { ...env, DISABLE_GERRIT_GITILES_REQUIREMENT: '1' };
|
||||
expect(() =>
|
||||
createReader({
|
||||
integrations: {
|
||||
gerrit: [{ host: 'gerrit.com' }],
|
||||
},
|
||||
}),
|
||||
).not.toThrow();
|
||||
});
|
||||
});
|
||||
|
||||
describe('predicates without Gitiles', () => {
|
||||
const readers = createReader({
|
||||
integrations: {
|
||||
|
||||
@@ -49,6 +49,12 @@ import {
|
||||
|
||||
const pipeline = promisify(pipelineCb);
|
||||
|
||||
export const GITILES_BASE_URL_DEPRECATION_MESSSAGE = `A gitilesBaseUrl must be provided \
|
||||
for the gerrit integration to work. You can disable this check by setting \
|
||||
DISABLE_GERRIT_GITILES_REQUIREMENT=1 but this will be removed in a future release. If you \
|
||||
are not able to use the gitiles gerrit plugin, please open an issue towards \
|
||||
https://github.com/backstage/backstage`;
|
||||
|
||||
const createTemporaryDirectory = async (workDir: string): Promise<string> =>
|
||||
await fs.mkdtemp(joinPath(workDir, '/gerrit-clone-'));
|
||||
|
||||
@@ -81,6 +87,12 @@ export class GerritUrlReader implements UrlReader {
|
||||
const workDir =
|
||||
config.getOptionalString('backend.workingDirectory') ?? os.tmpdir();
|
||||
return integrations.gerrit.list().map(integration => {
|
||||
if (
|
||||
integration.config.gitilesBaseUrl === integration.config.baseUrl &&
|
||||
process.env.DISABLE_GERRIT_GITILES_REQUIREMENT === undefined
|
||||
) {
|
||||
throw new Error(GITILES_BASE_URL_DEPRECATION_MESSSAGE);
|
||||
}
|
||||
const reader = new GerritUrlReader(
|
||||
integration,
|
||||
{ treeResponseFactory },
|
||||
|
||||
@@ -20,6 +20,7 @@ import { getVoidLogger } from '../logging';
|
||||
import { DefaultReadTreeResponseFactory } from './tree';
|
||||
import { GoogleGcsUrlReader } from './GoogleGcsUrlReader';
|
||||
import { UrlReaderPredicateTuple } from './types';
|
||||
import packageinfo from '../../package.json';
|
||||
|
||||
const bucketGetFilesMock = jest.fn();
|
||||
jest.mock('@google-cloud/storage', () => {
|
||||
@@ -77,6 +78,20 @@ describe('GcsUrlReader', () => {
|
||||
});
|
||||
expect(entries).toHaveLength(1);
|
||||
});
|
||||
it('check if userAgent has been called with this key value', async () => {
|
||||
const getStorage: any = {
|
||||
userAgent: `backstage/backend-common.GoogleGcsUrlReader/${packageinfo.version}`,
|
||||
};
|
||||
jest.mock('@google-cloud/storage', () => {
|
||||
return {
|
||||
Storage: jest.fn(() => getStorage),
|
||||
};
|
||||
});
|
||||
const getUserAgent = getStorage.userAgent.toString();
|
||||
expect(getUserAgent).toBe(
|
||||
`backstage/backend-common.GoogleGcsUrlReader/${packageinfo.version}`,
|
||||
);
|
||||
});
|
||||
|
||||
describe('predicates', () => {
|
||||
const readers = createReader({
|
||||
|
||||
@@ -30,6 +30,7 @@ import {
|
||||
} from '@backstage/integration';
|
||||
import { Readable } from 'stream';
|
||||
import { ReadUrlResponseFactory } from './ReadUrlResponseFactory';
|
||||
import packageinfo from '../../package.json';
|
||||
|
||||
const GOOGLE_GCS_HOST = 'storage.cloud.google.com';
|
||||
|
||||
@@ -68,13 +69,16 @@ export class GoogleGcsUrlReader implements UrlReader {
|
||||
logger.info(
|
||||
'googleGcs credentials not found in config. Using default credentials provider.',
|
||||
);
|
||||
storage = new Storage();
|
||||
storage = new Storage({
|
||||
userAgent: `backstage/backend-common.GoogleGcsUrlReader/${packageinfo.version}`,
|
||||
});
|
||||
} else {
|
||||
storage = new Storage({
|
||||
credentials: {
|
||||
client_email: gcsConfig.clientEmail || undefined,
|
||||
private_key: gcsConfig.privateKey || undefined,
|
||||
},
|
||||
userAgent: `backstage/backend-common.GoogleGcsUrlReader/${packageinfo.version}`,
|
||||
});
|
||||
}
|
||||
const reader = new GoogleGcsUrlReader(gcsConfig, storage);
|
||||
|
||||
@@ -19,6 +19,7 @@ import path from 'path';
|
||||
import { FromReadableArrayOptions } from '../types';
|
||||
import { ReadableArrayResponse } from './ReadableArrayResponse';
|
||||
import { createMockDirectory } from '@backstage/backend-test-utils';
|
||||
import { relative } from 'path/posix';
|
||||
|
||||
const name1 = 'file1.yaml';
|
||||
const file1 = fs.readFileSync(
|
||||
@@ -74,9 +75,12 @@ describe('ReadableArrayResponse', () => {
|
||||
});
|
||||
|
||||
it('should extract entire archive into directory', async () => {
|
||||
const relativePath1 = relative(sourceDir.path, path1);
|
||||
const relativePath2 = relative(sourceDir.path, path2);
|
||||
|
||||
const arr: FromReadableArrayOptions = [
|
||||
{ data: createReadStream(path1), path: path1 },
|
||||
{ data: createReadStream(path2), path: path2 },
|
||||
{ data: createReadStream(path1), path: relativePath1 },
|
||||
{ data: createReadStream(path2), path: relativePath2 },
|
||||
];
|
||||
|
||||
const res = new ReadableArrayResponse(arr, targetDir.path, 'etag');
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
*/
|
||||
|
||||
import concatStream from 'concat-stream';
|
||||
import platformPath, { basename } from 'path';
|
||||
import platformPath, { dirname } from 'path';
|
||||
|
||||
import getRawBody from 'raw-body';
|
||||
import fs from 'fs-extra';
|
||||
@@ -96,12 +96,9 @@ export class ReadableArrayResponse implements ReadTreeResponse {
|
||||
|
||||
for (let i = 0; i < this.stream.length; i++) {
|
||||
if (!this.stream[i].path.endsWith('/')) {
|
||||
await pipeline(
|
||||
this.stream[i].data,
|
||||
fs.createWriteStream(
|
||||
platformPath.join(dir, basename(this.stream[i].path)),
|
||||
),
|
||||
);
|
||||
const filePath = platformPath.join(dir, this.stream[i].path);
|
||||
await fs.mkdir(dirname(filePath), { recursive: true });
|
||||
await pipeline(this.stream[i].data, fs.createWriteStream(filePath));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
# @backstage/backend-defaults
|
||||
|
||||
## 0.2.10-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/backend-common@0.21.0-next.3
|
||||
- @backstage/backend-app-api@0.5.11-next.3
|
||||
|
||||
## 0.2.10-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
Generated
+3
-3
@@ -2,7 +2,7 @@
|
||||
|
||||
## Unused devDependencies (1)
|
||||
|
||||
| Name | Location |
|
||||
|:------------------------------|:-------------|
|
||||
| @backstage/backend-test-utils | package.json |
|
||||
| Name | Location | Severity |
|
||||
| :---------------------------- | :----------- | :------- |
|
||||
| @backstage/backend-test-utils | package.json | error |
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/backend-defaults",
|
||||
"description": "Backend defaults used by Backstage backend apps",
|
||||
"version": "0.2.10-next.2",
|
||||
"version": "0.2.10-next.3",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"publishConfig": {
|
||||
|
||||
@@ -1,5 +1,39 @@
|
||||
# @backstage/backend-dynamic-feature-service
|
||||
|
||||
## 0.2.0-next.3
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- d7adbbf: Implement the discovery of additional individual configuration schemas for dynamic plugins, and provide:
|
||||
|
||||
- an alternate implementation of the root logger service that takes them into account,
|
||||
- an extension to the App backend plugin to set a global configuration schema that takes them into account.
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 8472188: Added or fixed the `repository` field in `package.json`.
|
||||
- Updated dependencies
|
||||
- @backstage/backend-common@0.21.0-next.3
|
||||
- @backstage/cli-node@0.2.3-next.0
|
||||
- @backstage/backend-app-api@0.5.11-next.3
|
||||
- @backstage/backend-tasks@0.5.15-next.3
|
||||
- @backstage/config-loader@1.6.2-next.0
|
||||
- @backstage/plugin-app-node@0.1.10-next.3
|
||||
- @backstage/plugin-catalog-backend@1.17.0-next.3
|
||||
- @backstage/plugin-auth-node@0.4.4-next.3
|
||||
- @backstage/plugin-events-backend@0.2.19-next.3
|
||||
- @backstage/plugin-permission-node@0.7.21-next.3
|
||||
- @backstage/plugin-scaffolder-node@0.3.0-next.3
|
||||
- @backstage/plugin-search-backend-node@1.2.14-next.3
|
||||
- @backstage/backend-plugin-api@0.6.10-next.3
|
||||
- @backstage/cli-common@0.1.13
|
||||
- @backstage/config@1.1.1
|
||||
- @backstage/errors@1.2.3
|
||||
- @backstage/types@1.1.1
|
||||
- @backstage/plugin-events-node@0.2.19-next.3
|
||||
- @backstage/plugin-permission-common@0.7.12
|
||||
- @backstage/plugin-search-common@1.2.10
|
||||
|
||||
## 0.1.1-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user