Merge branch 'master' into canon-menu
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/core-components': minor
|
||||
---
|
||||
|
||||
`SimpleStepper` back button now works with `activeStep` property set higher than 0
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-search-backend-module-techdocs': patch
|
||||
---
|
||||
|
||||
Added an extension point that allows for custom entity filtering during document collation.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder-backend-module-gitlab': patch
|
||||
---
|
||||
|
||||
fix: Creating a repository in a user namespace would always lead to an error
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/core-plugin-api': patch
|
||||
---
|
||||
|
||||
Failure to lazy load an extension will now always result in an error being thrown to be forwarded to error boundaries, rather than being rendered using the `BootErrorPage` app component.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/canon': patch
|
||||
---
|
||||
|
||||
Fix Button types that was preventing the use of native attributes like onClick.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-home': patch
|
||||
---
|
||||
|
||||
The starred entities component uses the entity title or display name if it exists
|
||||
@@ -0,0 +1,72 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder-node': minor
|
||||
---
|
||||
|
||||
**DEPRECATION**: We've deprecated the old way of defining actions using `createTemplateAction` with raw `JSONSchema` and type parameters, as well as using `zod` through an import. You can now use the new format to define `createTemplateActions` with `zod` provided by the framework. This change also removes support for `logStream` in the `context` as well as moving the `logger` to an instance of `LoggerService`.
|
||||
|
||||
Before:
|
||||
|
||||
```ts
|
||||
createTemplateAction<{ repoUrl: string }, { test: string }>({
|
||||
id: 'test',
|
||||
schema: {
|
||||
input: {
|
||||
type: 'object',
|
||||
required: ['repoUrl'],
|
||||
properties: {
|
||||
repoUrl: { type: 'string' },
|
||||
},
|
||||
},
|
||||
output: {
|
||||
type: 'object',
|
||||
required: ['test'],
|
||||
properties: {
|
||||
test: { type: 'string' },
|
||||
},
|
||||
},
|
||||
},
|
||||
handler: async ctx => {
|
||||
ctx.logStream.write('blob');
|
||||
},
|
||||
});
|
||||
|
||||
// or
|
||||
|
||||
createTemplateAction({
|
||||
id: 'test',
|
||||
schema: {
|
||||
input: z.object({
|
||||
repoUrl: z.string(),
|
||||
}),
|
||||
output: z.object({
|
||||
test: z.string(),
|
||||
}),
|
||||
},
|
||||
handler: async ctx => {
|
||||
ctx.logStream.write('something');
|
||||
},
|
||||
});
|
||||
```
|
||||
|
||||
After:
|
||||
|
||||
```ts
|
||||
createTemplateAction({
|
||||
id: 'test',
|
||||
schema: {
|
||||
input: {
|
||||
repoUrl: d => d.string(),
|
||||
},
|
||||
output: {
|
||||
test: d => d.string(),
|
||||
},
|
||||
},
|
||||
handler: async ctx => {
|
||||
// you can just use ctx.logger.log('...'), or if you really need a log stream you can do this:
|
||||
const logStream = new PassThrough();
|
||||
logStream.on('data', chunk => {
|
||||
ctx.logger.info(chunk.toString());
|
||||
});
|
||||
},
|
||||
});
|
||||
```
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/core-app-api': minor
|
||||
---
|
||||
|
||||
The default auth injection middleware for the `FetchApi` will now also take configuration under `discovery.endpoints` into consideration when deciding whether to include credentials or not.
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
'@backstage/frontend-plugin-api': minor
|
||||
'@backstage/frontend-defaults': minor
|
||||
'@backstage/frontend-app-api': patch
|
||||
---
|
||||
|
||||
Introduced a `createFrontendFeatureLoader()` function, as well as a `FrontendFeatureLoader` interface, to gather several frontend plugins, modules or feature loaders in a single exported entrypoint and load them, possibly asynchronously. This new feature, very similar to the `createBackendFeatureLoader()` already available on the backend, supersedes the previous `CreateAppFeatureLoader` type which has been deprecated.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-permission-node': minor
|
||||
---
|
||||
|
||||
**BREAKING** The `ServerPermissionClient` can no longer be instantiated with a `tokenManager` and must instead be instantiated with an `auth` service. If you are still on the legacy backend system, use `createLegacyAuthAdapters()` from `@backstage/backend-common` to create a compatible `auth` service.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/frontend-test-utils': patch
|
||||
---
|
||||
|
||||
Added a `initialRouteEntries` option to `renderInTestApp`.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/frontend-test-utils': patch
|
||||
---
|
||||
|
||||
The `renderInTestApp` helper now provides a default mock config with mock values for both `app.baseUrl` and `backend.baseUrl`.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/frontend-test-utils': minor
|
||||
---
|
||||
|
||||
**BREAKING**: Removed deprecated `setupRequestMockHandlers` which was replaced by `registerMswTestHooks`.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder-backend-module-gitlab': patch
|
||||
---
|
||||
|
||||
Made gitlab:repo:push action idempotent.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder-node-test-utils': minor
|
||||
---
|
||||
|
||||
Use update `createTemplateAction` kinds
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
'@backstage/frontend-defaults': minor
|
||||
'@backstage/frontend-app-api': minor
|
||||
'@backstage/core-compat-api': minor
|
||||
---
|
||||
|
||||
**BREAKING**: Dropped support for the removed opaque `@backstage/ExtensionOverrides` and `@backstage/BackstagePlugin` types.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/frontend-plugin-api': minor
|
||||
---
|
||||
|
||||
**BREAKING**: Removed the deprecated `ExtensionOverrides` and `FrontendFeature` types.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/frontend-plugin-api': minor
|
||||
---
|
||||
|
||||
**BREAKING**: Removed deprecated variant of `createExtensionDataRef` where the ID is passed directly.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/backend-test-utils': patch
|
||||
---
|
||||
|
||||
Added support for PostgreSQL version 17
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/core-components': minor
|
||||
---
|
||||
|
||||
Declared CancelIcon explicitly on Chip component inside Select.tsx to disable onMouseDown event by default that creates the flaw of re-opening select component when user tries to remove a selected filter.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-search': patch
|
||||
---
|
||||
|
||||
Expand the default kind filter to include all kinds from the System Model.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/core-compat-api': patch
|
||||
---
|
||||
|
||||
Improved route path normalization when converting existing route elements in `converLegacyApp`, for example handling trailing `/*` in paths.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder-backend': minor
|
||||
---
|
||||
|
||||
Support new `createTemplateAction` type, and convert `catalog:fetch` action to new way of defining actions.
|
||||
@@ -0,0 +1,32 @@
|
||||
---
|
||||
'@backstage/app-defaults': minor
|
||||
---
|
||||
|
||||
**BREAKING**: The default `DiscoveryApi` implementation has been switched to use `FrontendHostDiscovery`, which adds support for the `discovery.endpoints` configuration.
|
||||
|
||||
This is marked as a breaking change because it will cause any existing `discovery.endpoints` configuration to be picked up and used, which may break existing setups.
|
||||
|
||||
For example, consider the following configuration:
|
||||
|
||||
```yaml
|
||||
app:
|
||||
baseUrl: https://backstage.acme.org
|
||||
|
||||
backend:
|
||||
baseUrl: https://backstage.internal.acme.org
|
||||
|
||||
discovery:
|
||||
endpoints:
|
||||
- target: https://catalog.internal.acme.org/api/{{pluginId}}
|
||||
plugins: [catalog]
|
||||
```
|
||||
|
||||
This will now cause requests from the frontend towards the `catalog` plugin to be routed to `https://catalog.internal.acme.org/api/catalog`, but this might not be reachable from the frontend. To fix this, you should update the `discovery.endpoints` configuration to only override the internal URL of the plugin:
|
||||
|
||||
```yaml
|
||||
discovery:
|
||||
endpoints:
|
||||
- target:
|
||||
internal: https://catalog.internal.acme.org/api/{{pluginId}}
|
||||
plugins: [catalog]
|
||||
```
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/cli': patch
|
||||
---
|
||||
|
||||
Internal change to migrate `lint` to the new module system.
|
||||
@@ -198,67 +198,122 @@
|
||||
},
|
||||
"changesets": [
|
||||
"angry-plants-peel",
|
||||
"brave-ears-bow",
|
||||
"brave-wasps-fry",
|
||||
"breezy-socks-cross",
|
||||
"bright-pets-agree",
|
||||
"calm-bottles-rest",
|
||||
"calm-files-hunt",
|
||||
"catch-you-mamma",
|
||||
"chatty-turkeys-brake",
|
||||
"chilled-bugs-draw",
|
||||
"chilled-rocks-rule",
|
||||
"cool-moons-lay",
|
||||
"create-app-1740489353",
|
||||
"create-app-1741106897",
|
||||
"cuddly-apricots-fetch",
|
||||
"dependabot-64f57a3",
|
||||
"dirty-turkeys-remain",
|
||||
"dull-coats-help",
|
||||
"dull-olives-itch",
|
||||
"early-buses-lick",
|
||||
"fair-pianos-add",
|
||||
"fair-rabbits-greet",
|
||||
"famous-ladybugs-swim",
|
||||
"famous-wombats-explain",
|
||||
"fluffy-ghosts-drop",
|
||||
"four-badgers-buy",
|
||||
"four-readers-vanish",
|
||||
"friendly-garlics-explain",
|
||||
"gentle-lemons-explain",
|
||||
"gentle-students-glow",
|
||||
"giant-phones-melt",
|
||||
"gold-donkeys-flow",
|
||||
"good-lions-tease",
|
||||
"gorgeous-keys-shop",
|
||||
"grumpy-humans-brush",
|
||||
"hip-ladybugs-behave",
|
||||
"honest-ravens-stare",
|
||||
"hungry-walls-pump",
|
||||
"itchy-houses-whisper",
|
||||
"itchy-moose-raise",
|
||||
"itchy-schools-camp",
|
||||
"itchy-shoes-rest",
|
||||
"kind-paws-visit",
|
||||
"kind-waves-impress",
|
||||
"late-hairs-kneel",
|
||||
"lazy-apricots-whisper",
|
||||
"lazy-deers-dance",
|
||||
"light-turtles-talk",
|
||||
"loud-clocks-obey",
|
||||
"lucky-ducks-attend",
|
||||
"many-insects-add",
|
||||
"many-rockets-marry",
|
||||
"many-wolves-own",
|
||||
"mira-color-like",
|
||||
"nasty-lemons-scream",
|
||||
"nervous-cups-happen",
|
||||
"nice-dolphins-own",
|
||||
"nice-ghosts-clean",
|
||||
"nine-hounds-rest",
|
||||
"ninety-experts-cheat",
|
||||
"ninety-teachers-tease",
|
||||
"old-avocados-grow",
|
||||
"old-ladybugs-report",
|
||||
"olive-carrots-move",
|
||||
"olive-dodos-applaud",
|
||||
"olive-dragons-guess",
|
||||
"olive-planes-pay",
|
||||
"poor-bats-retire",
|
||||
"poor-phones-switch",
|
||||
"popular-bobcats-occur",
|
||||
"pretty-chicken-eat",
|
||||
"quick-schools-grin",
|
||||
"real-hounds-mate",
|
||||
"real-turkeys-hunt",
|
||||
"red-hotels-destroy",
|
||||
"renovate-e8e0621",
|
||||
"rich-berries-glow",
|
||||
"rich-sloths-hang",
|
||||
"rotten-bees-design",
|
||||
"selfish-cheetahs-sip",
|
||||
"shiny-ways-develop",
|
||||
"short-moose-attend",
|
||||
"shy-geckos-leave",
|
||||
"shy-knives-matter",
|
||||
"silly-otters-hang",
|
||||
"silly-taxis-suffer",
|
||||
"silver-camels-brake",
|
||||
"silver-fishes-shop",
|
||||
"six-shrimps-breathe",
|
||||
"six-taxis-film",
|
||||
"six-teachers-prove",
|
||||
"sixty-ducks-bathe",
|
||||
"slimy-rockets-jog",
|
||||
"small-onions-live",
|
||||
"smart-pens-change",
|
||||
"stale-frogs-wonder",
|
||||
"strange-eels-turn",
|
||||
"strange-masks-type",
|
||||
"sweet-zoos-beam",
|
||||
"swift-rings-switch",
|
||||
"swift-worms-behave",
|
||||
"tall-falcons-juggle",
|
||||
"tall-meals-prove",
|
||||
"techdocs-four-needles-switch",
|
||||
"techdocs-late-ants-remain",
|
||||
"techdocs-slow-zebras-camp",
|
||||
"ten-impalas-hope",
|
||||
"thick-deers-destroy",
|
||||
"thin-books-rest",
|
||||
"thin-experts-sing",
|
||||
"thin-steaks-trade",
|
||||
"three-bears-heal",
|
||||
"tidy-ads-cover",
|
||||
"tiny-llamas-boil",
|
||||
"unlucky-cups-sell",
|
||||
"weak-lemons-sing",
|
||||
"wicked-dancers-count",
|
||||
"young-gifts-know"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder': patch
|
||||
'@backstage/plugin-scaffolder-react': patch
|
||||
---
|
||||
|
||||
Disable the submit button on creating
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder-react': patch
|
||||
---
|
||||
|
||||
Updated dependency `flatted` to `3.3.3`.
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
'@backstage/core-app-api': minor
|
||||
'@backstage/backend-defaults': patch
|
||||
---
|
||||
|
||||
The `discovery.endpoints` configuration no longer requires both `internal` and `external` target when using the object form, instead falling back to the default.
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
'@backstage/core-components': patch
|
||||
---
|
||||
|
||||
Avoid Layout Shift for `DismissableBanner` when using a `storageApi` with latency (e.g. `user-settings-backend`)
|
||||
|
||||
Properly handle the `unknown` state of the `storageApi`. There's a trade-off: this may lead to some Layout Shift if the banner has not been dismissed, but once it has been dismissed, you won't have any.
|
||||
@@ -0,0 +1,14 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder-backend-module-bitbucket-server': patch
|
||||
'@backstage/plugin-scaffolder-backend-module-bitbucket-cloud': patch
|
||||
'@backstage/plugin-scaffolder-backend-module-bitbucket': patch
|
||||
'@backstage/plugin-scaffolder-backend-module-gerrit': patch
|
||||
'@backstage/plugin-scaffolder-backend-module-gitlab': patch
|
||||
'@backstage/plugin-scaffolder-backend-module-azure': patch
|
||||
'@backstage/plugin-scaffolder-backend-module-gitea': patch
|
||||
'@backstage/plugin-scaffolder-backend': patch
|
||||
'@backstage/plugin-scaffolder-node': patch
|
||||
'@backstage/integration': patch
|
||||
---
|
||||
|
||||
Allow signing git commits using configured private PGP key in scaffolder
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/core-compat-api': patch
|
||||
---
|
||||
|
||||
Added the `entityPage` option to `convertLegacyApp`, which you can read more about in the [app migration docs](https://backstage.io/docs/frontend-system/building-apps/migrating#entity-pages).
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder-backend-module-bitbucket-cloud': patch
|
||||
---
|
||||
|
||||
Fixing spelling mistake in `jsonschema`
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
'@backstage/plugin-auth-backend-module-oauth2-provider': patch
|
||||
'@backstage/plugin-auth-backend-module-oidc-provider': patch
|
||||
'@backstage/plugin-auth-backend-module-okta-provider': patch
|
||||
---
|
||||
|
||||
Fixed repository url in `README.md`
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/canon': minor
|
||||
---
|
||||
|
||||
Updating styles for Text and Link components as well as global surface tokens.
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
'@backstage/plugin-events-backend': patch
|
||||
'@backstage/plugin-events-node': patch
|
||||
---
|
||||
|
||||
add `addHttpPostBodyParser` to events extension to allow body parse customization. This feature will enhance flexibility in handling HTTP POST requests in event-related operations.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder-backend': patch
|
||||
---
|
||||
|
||||
Fixed bug in fs:delete causing no files to be deleted on windows machines
|
||||
@@ -74,7 +74,7 @@ jobs:
|
||||
|
||||
- name: Cache Comment
|
||||
if: ${{ steps.event.outputs.ACTION != 'closed' }}
|
||||
uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
|
||||
uses: actions/cache@d4323d4df104b026a6aa633fdb11d772146be0bf # v4.2.2
|
||||
with:
|
||||
path: comment.md
|
||||
key: ${{ steps.hash.outputs.COMMENT_FILE_HASH }}
|
||||
|
||||
@@ -161,8 +161,8 @@ jobs:
|
||||
|
||||
name: Test ${{ matrix.node-version }}
|
||||
services:
|
||||
postgres16:
|
||||
image: postgres:16
|
||||
postgres17:
|
||||
image: postgres:17
|
||||
env:
|
||||
POSTGRES_PASSWORD: postgres
|
||||
options: >-
|
||||
@@ -172,8 +172,8 @@ jobs:
|
||||
--health-retries 5
|
||||
ports:
|
||||
- 5432/tcp
|
||||
postgres12:
|
||||
image: postgres:12
|
||||
postgres13:
|
||||
image: postgres:13
|
||||
env:
|
||||
POSTGRES_PASSWORD: postgres
|
||||
options: >-
|
||||
@@ -253,8 +253,8 @@ jobs:
|
||||
run: yarn backstage-cli repo test --maxWorkers=3 --workerIdleMemoryLimit=1300M --since origin/master --successCache --successCacheDir .cache/backstage-cli
|
||||
env:
|
||||
BACKSTAGE_TEST_DISABLE_DOCKER: 1
|
||||
BACKSTAGE_TEST_DATABASE_POSTGRES16_CONNECTION_STRING: postgresql://postgres:postgres@localhost:${{ job.services.postgres16.ports[5432] }}
|
||||
BACKSTAGE_TEST_DATABASE_POSTGRES12_CONNECTION_STRING: postgresql://postgres:postgres@localhost:${{ job.services.postgres12.ports[5432] }}
|
||||
BACKSTAGE_TEST_DATABASE_POSTGRES17_CONNECTION_STRING: postgresql://postgres:postgres@localhost:${{ job.services.postgres17.ports[5432] }}
|
||||
BACKSTAGE_TEST_DATABASE_POSTGRES13_CONNECTION_STRING: postgresql://postgres:postgres@localhost:${{ job.services.postgres13.ports[5432] }}
|
||||
BACKSTAGE_TEST_DATABASE_MYSQL8_CONNECTION_STRING: mysql://root:root@localhost:${{ job.services.mysql8.ports[3306] }}/ignored
|
||||
BACKSTAGE_TEST_CACHE_REDIS7_CONNECTION_STRING: redis://localhost:${{ job.services.redis.ports[6379] }}
|
||||
|
||||
|
||||
@@ -16,8 +16,8 @@ jobs:
|
||||
node-version: [20.x, 22.x]
|
||||
|
||||
services:
|
||||
postgres16:
|
||||
image: postgres:16
|
||||
postgres17:
|
||||
image: postgres:17
|
||||
env:
|
||||
POSTGRES_PASSWORD: postgres
|
||||
options: >-
|
||||
@@ -27,8 +27,8 @@ jobs:
|
||||
--health-retries 5
|
||||
ports:
|
||||
- 5432/tcp
|
||||
postgres12:
|
||||
image: postgres:12
|
||||
postgres13:
|
||||
image: postgres:13
|
||||
env:
|
||||
POSTGRES_PASSWORD: postgres
|
||||
options: >-
|
||||
@@ -122,8 +122,8 @@ jobs:
|
||||
yarn backstage-cli repo test --maxWorkers=3 --workerIdleMemoryLimit=1300M --coverage --successCache --successCacheDir .cache/backstage-cli
|
||||
env:
|
||||
BACKSTAGE_TEST_DISABLE_DOCKER: 1
|
||||
BACKSTAGE_TEST_DATABASE_POSTGRES16_CONNECTION_STRING: postgresql://postgres:postgres@localhost:${{ job.services.postgres16.ports[5432] }}
|
||||
BACKSTAGE_TEST_DATABASE_POSTGRES12_CONNECTION_STRING: postgresql://postgres:postgres@localhost:${{ job.services.postgres12.ports[5432] }}
|
||||
BACKSTAGE_TEST_DATABASE_POSTGRES17_CONNECTION_STRING: postgresql://postgres:postgres@localhost:${{ job.services.postgres17.ports[5432] }}
|
||||
BACKSTAGE_TEST_DATABASE_POSTGRES13_CONNECTION_STRING: postgresql://postgres:postgres@localhost:${{ job.services.postgres13.ports[5432] }}
|
||||
BACKSTAGE_TEST_DATABASE_MYSQL8_CONNECTION_STRING: mysql://root:root@localhost:${{ job.services.mysql8.ports[3306] }}/ignored
|
||||
BACKSTAGE_TEST_CACHE_REDIS7_CONNECTION_STRING: redis://localhost:${{ job.services.redis.ports[6379] }}
|
||||
|
||||
|
||||
@@ -67,6 +67,6 @@ jobs:
|
||||
|
||||
# Upload the results to GitHub's code scanning dashboard.
|
||||
- name: 'Upload to code-scanning'
|
||||
uses: github/codeql-action/upload-sarif@b56ba49b26e50535fa1e7f7db0f4f7b4bf65d80d # v3.28.10
|
||||
uses: github/codeql-action/upload-sarif@6bb031afdd8eb862ea3fc1848194185e076637e5 # v3.28.11
|
||||
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@b56ba49b26e50535fa1e7f7db0f4f7b4bf65d80d # v3.28.10
|
||||
uses: github/codeql-action/upload-sarif@6bb031afdd8eb862ea3fc1848194185e076637e5 # v3.28.11
|
||||
with:
|
||||
sarif_file: snyk.sarif
|
||||
|
||||
@@ -55,7 +55,7 @@ jobs:
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@b56ba49b26e50535fa1e7f7db0f4f7b4bf65d80d # v3.28.10
|
||||
uses: github/codeql-action/init@6bb031afdd8eb862ea3fc1848194185e076637e5 # v3.28.11
|
||||
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@b56ba49b26e50535fa1e7f7db0f4f7b4bf65d80d # v3.28.10
|
||||
uses: github/codeql-action/autobuild@6bb031afdd8eb862ea3fc1848194185e076637e5 # v3.28.11
|
||||
|
||||
# ℹ️ 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@b56ba49b26e50535fa1e7f7db0f4f7b4bf65d80d # v3.28.10
|
||||
uses: github/codeql-action/analyze@6bb031afdd8eb862ea3fc1848194185e076637e5 # v3.28.11
|
||||
|
||||
@@ -21,7 +21,7 @@ jobs:
|
||||
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:12
|
||||
image: postgres:13
|
||||
env:
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_PASSWORD: postgres
|
||||
|
||||
@@ -132,7 +132,6 @@ Scope: Tooling and Community Repo Maintainers for the Backstage [Community Plugi
|
||||
| André Wanlin | Spotify | [awanlin](https://github.com/awanlin) | `ahhhndre` |
|
||||
| Bethany Griggs | Red Hat | [BethGriggs](https://github.com/BethGriggs) | `bethgriggs` |
|
||||
| Kashish Mittal | Red Hat | [04kash](https://github.com/04kash) | `kashh._.` |
|
||||
| Nick Boldt | Red Hat | [nickboldt](https://github.com/nickboldt) | `nboldt` |
|
||||
| Vincenzo Scamporlino | Spotify | [vinzscam](https://github.com/vinzscam) | `vinzscam` |
|
||||
|
||||
### Events
|
||||
|
||||
+1
-1
@@ -66,7 +66,7 @@ Si vous voulez contribuer et vous impliquer dans notre communauté, voici les re
|
||||
|
||||
## Licence
|
||||
|
||||
Copyright 2020-2024 © Les auteurs de Backstage. Tous droits réservés. La Linux Foundation détient des marques déposées et utilise des marques commerciales. Pour une liste des marques de commerce de la Linux Foundation, veuillez consulter notre page d'utilisation des marques: https://www.linuxfoundation.org/trademark-usage
|
||||
Copyright 2020-2025 © Les auteurs de Backstage. Tous droits réservés. La Linux Foundation détient des marques déposées et utilise des marques commerciales. Pour une liste des marques de commerce de la Linux Foundation, veuillez consulter notre page d'utilisation des marques: https://www.linuxfoundation.org/trademark-usage
|
||||
|
||||
Sous licence Apache, version 2.0: http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
|
||||
+1
-1
@@ -65,7 +65,7 @@ Backstage의 문서는 다음을 포함합니다:
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2020-2024 © The Backstage Authors. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our Trademark Usage page: https://www.linuxfoundation.org/trademark-usage
|
||||
Copyright 2020-2025 © The Backstage Authors. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our Trademark Usage page: https://www.linuxfoundation.org/trademark-usage
|
||||
|
||||
Licensed under the Apache License, Version 2.0: http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
|
||||
+1
-1
@@ -65,7 +65,7 @@ Backstage 的文档包括:
|
||||
|
||||
## 许可
|
||||
|
||||
版权所有 2020-2024 © Backstage 作者。版权所有。Linux 基金会已注册商标并使用商标。有关 Linux 基金会的商标列表,请参阅我们的商标使用页面:https://www.linuxfoundation.org/trademark-usage
|
||||
版权所有 2020-2025 © Backstage 作者。版权所有。Linux 基金会已注册商标并使用商标。有关 Linux 基金会的商标列表,请参阅我们的商标使用页面:https://www.linuxfoundation.org/trademark-usage
|
||||
|
||||
采用 Apache v2.0 许可:http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
|
||||
@@ -69,7 +69,7 @@ See the [GOVERNANCE.md](https://github.com/backstage/community/blob/main/GOVERNA
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2020-2024 © The Backstage Authors. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our Trademark Usage page: https://www.linuxfoundation.org/trademark-usage
|
||||
Copyright 2020-2025 © The Backstage Authors. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our Trademark Usage page: https://www.linuxfoundation.org/trademark-usage
|
||||
|
||||
Licensed under the Apache License, Version 2.0: http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
|
||||
@@ -154,30 +154,36 @@ export function createGithubRepoCreateAction(options: {
|
||||
username: owner,
|
||||
});
|
||||
|
||||
await ctx.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 };
|
||||
await ctx.checkpoint({
|
||||
key: 'repo.creation.v1',
|
||||
fn: 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('repo.create.variables', async () => {
|
||||
for (const [key, value] of Object.entries(repoVariables ?? {})) {
|
||||
await client.rest.actions.createRepoVariable({
|
||||
owner,
|
||||
repo,
|
||||
name: key,
|
||||
value: value,
|
||||
});
|
||||
}
|
||||
await ctx.checkpoint({
|
||||
key: 'repo.create.variables',
|
||||
fn: async () => {
|
||||
for (const [key, value] of Object.entries(repoVariables ?? {})) {
|
||||
await client.rest.actions.createRepoVariable({
|
||||
owner,
|
||||
repo,
|
||||
name: key,
|
||||
value: value,
|
||||
});
|
||||
}
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
@@ -202,9 +208,12 @@ Checkpoints will allow action authors to create actions where code paths are ign
|
||||
This will be provided on a context object and action of author provide a key and a callback.
|
||||
|
||||
```typescript
|
||||
await ctx.checkpoint('repo.creation', async () => {
|
||||
const { repoUrl } = await client.rest.Repository.create({});
|
||||
return { repoUrl };
|
||||
await ctx.checkpoint({
|
||||
key: 'repo.creation',
|
||||
fn: async () => {
|
||||
const { repoUrl } = await client.rest.Repository.create({});
|
||||
return { repoUrl };
|
||||
},
|
||||
});
|
||||
```
|
||||
|
||||
|
||||
@@ -24,8 +24,7 @@ Install Canon using a package manager.
|
||||
Import the global CSS file at the root of your application.
|
||||
|
||||
```tsx
|
||||
import '@backstage/canon/css/core.css';
|
||||
import '@backstage/canon/css/components.css';
|
||||
import '@backstage/canon/css/styles.css';
|
||||
```
|
||||
|
||||
### 3. Start building ✨
|
||||
|
||||
@@ -53,7 +53,7 @@ color of your app.
|
||||
</Table.Row>
|
||||
<Table.Row>
|
||||
<Table.Cell>
|
||||
<Chip head>--canon-bg-elevated</Chip>
|
||||
<Chip head>--canon-bg-surface-1</Chip>
|
||||
</Table.Cell>
|
||||
<Table.Cell>Use for any panels or elevated surfaces.</Table.Cell>
|
||||
</Table.Row>
|
||||
@@ -189,7 +189,7 @@ are prefixed with `fg` to make it easier to identify.
|
||||
<Chip head>--canon-fg-primary</Chip>
|
||||
</Table.Cell>
|
||||
<Table.Cell>
|
||||
It should be used on top of `--canon-bg-app` or `--canon-bg-elevated`.
|
||||
It should be used on top of `--canon-bg-app` or `--canon-bg-surface-1`.
|
||||
</Table.Cell>
|
||||
</Table.Row>
|
||||
<Table.Row>
|
||||
@@ -197,7 +197,7 @@ are prefixed with `fg` to make it easier to identify.
|
||||
<Chip head>--canon-fg-secondary</Chip>
|
||||
</Table.Cell>
|
||||
<Table.Cell>
|
||||
It should be used on top of `--canon-bg-app` or `--canon-bg-elevated`.
|
||||
It should be used on top of `--canon-bg-app` or `--canon-bg-surface-1`.
|
||||
</Table.Cell>
|
||||
</Table.Row>
|
||||
<Table.Row>
|
||||
@@ -205,7 +205,7 @@ are prefixed with `fg` to make it easier to identify.
|
||||
<Chip head>--canon-fg-link</Chip>
|
||||
</Table.Cell>
|
||||
<Table.Cell>
|
||||
It should be used on top of `--canon-bg-app` or `--canon-bg-elevated`.
|
||||
It should be used on top of `--canon-bg-app` or `--canon-bg-surface-1`.
|
||||
</Table.Cell>
|
||||
</Table.Row>
|
||||
<Table.Row>
|
||||
@@ -213,7 +213,7 @@ are prefixed with `fg` to make it easier to identify.
|
||||
<Chip head>--canon-fg-link-hover</Chip>
|
||||
</Table.Cell>
|
||||
<Table.Cell>
|
||||
It should be used on top of `--canon-bg-app` or `--canon-bg-elevated`.
|
||||
It should be used on top of `--canon-bg-app` or `--canon-bg-surface-1`.
|
||||
</Table.Cell>
|
||||
</Table.Row>
|
||||
<Table.Row>
|
||||
@@ -267,7 +267,7 @@ low contrast to help as a separator with the different background colors.
|
||||
<Chip head>--canon-border</Chip>
|
||||
</Table.Cell>
|
||||
<Table.Cell>
|
||||
It should be used on top of `--canon-bg-elevated`.
|
||||
It should be used on top of `--canon-bg-surface-1`.
|
||||
</Table.Cell>
|
||||
</Table.Row>
|
||||
<Table.Row>
|
||||
|
||||
@@ -17,7 +17,7 @@ const defaultTheme = `:root {
|
||||
const myTheme = createTheme({
|
||||
theme: 'light',
|
||||
settings: {
|
||||
background: 'var(--canon-bg-elevated)',
|
||||
background: 'var(--canon-bg-surface-1)',
|
||||
backgroundImage: '',
|
||||
foreground: '#6182B8',
|
||||
caret: '#5d00ff',
|
||||
|
||||
@@ -31,10 +31,7 @@ export const Tab = (props: React.ComponentProps<typeof TabsPrimitive.Tab>) => (
|
||||
<Text
|
||||
variant="subtitle"
|
||||
weight="bold"
|
||||
{...rest}
|
||||
style={{
|
||||
color: state.selected ? 'var(--primary)' : 'var(--secondary)',
|
||||
}}
|
||||
color={state.selected ? 'primary' : 'secondary'}
|
||||
>
|
||||
{children}
|
||||
</Text>
|
||||
|
||||
@@ -5,7 +5,7 @@ export const customTheme = `:root {
|
||||
--canon-font-weight-regular: 400;
|
||||
--canon-font-weight-bold: 600;
|
||||
--canon-bg: #f8f8f8;
|
||||
--canon-bg-elevated: #fff;
|
||||
--canon-bg-surface-1: #fff;
|
||||
/* ... other CSS variables */
|
||||
|
||||
/* Add your custom components styles here */
|
||||
@@ -20,7 +20,7 @@ export const customTheme = `:root {
|
||||
--canon-font-weight-regular: 400;
|
||||
--canon-font-weight-bold: 600;
|
||||
--canon-bg: #f8f8f8;
|
||||
--canon-bg-elevated: #fff;
|
||||
--canon-bg-surface-1: #fff;
|
||||
/* ... other CSS variables */
|
||||
|
||||
/* Add your custom components styles here */
|
||||
|
||||
+22
-22
@@ -916,11 +916,11 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"@types/node@npm:^20":
|
||||
version: 20.17.23
|
||||
resolution: "@types/node@npm:20.17.23"
|
||||
version: 20.17.24
|
||||
resolution: "@types/node@npm:20.17.24"
|
||||
dependencies:
|
||||
undici-types: ~6.19.2
|
||||
checksum: 9957916d0781f6efd59f2db5bff8be51e0ea0de96f64aa282c0ed7482668b5bc0ad041ea772265ece0e57e1afb64f56b7a5be5fecb03ba467f7c48753b313d86
|
||||
checksum: 05d3ca5d8741d10368edeff01318e4e615a7654b0c6bd05415f8cd0a2f851ac8e04c2cac319442c20fe372d1bdba9dd1f40dda014e97902516f82058b68ef6c4
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -2576,12 +2576,12 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"framer-motion@npm:^12.4.10":
|
||||
version: 12.4.10
|
||||
resolution: "framer-motion@npm:12.4.10"
|
||||
"framer-motion@npm:^12.5.0":
|
||||
version: 12.5.0
|
||||
resolution: "framer-motion@npm:12.5.0"
|
||||
dependencies:
|
||||
motion-dom: ^12.4.10
|
||||
motion-utils: ^12.4.10
|
||||
motion-dom: ^12.5.0
|
||||
motion-utils: ^12.5.0
|
||||
tslib: ^2.4.0
|
||||
peerDependencies:
|
||||
"@emotion/is-prop-valid": "*"
|
||||
@@ -2594,7 +2594,7 @@ __metadata:
|
||||
optional: true
|
||||
react-dom:
|
||||
optional: true
|
||||
checksum: c5e2e3658627e37b91c0a09d0ef908dddc67028240d7b747845ecfe84bb9cadefcaab715f05e587d1baf029a3766356825aac91f0f062e92f29a0f551e59770f
|
||||
checksum: aebf78b75000c783d12a8ae2534e62f0a5781490c0cfdf39c051b6dee2c7e11a5b8dd1077cc659e55dc24f582aa5d620c28999f3c17e17d38e49b14c6298d86b
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -4118,27 +4118,27 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"motion-dom@npm:^12.4.10":
|
||||
version: 12.4.10
|
||||
resolution: "motion-dom@npm:12.4.10"
|
||||
"motion-dom@npm:^12.5.0":
|
||||
version: 12.5.0
|
||||
resolution: "motion-dom@npm:12.5.0"
|
||||
dependencies:
|
||||
motion-utils: ^12.4.10
|
||||
checksum: 6ecf64e5a41db29b228940a9d832f67f69ce4c4b23bb501ed93bb98acaa30deb6bf486cfb319bdf4f63bef5f45448605cb212ab74a819f93dcfaae9e3aeb6053
|
||||
motion-utils: ^12.5.0
|
||||
checksum: abe92c72fb09eba9a6071fb77aa2020d1489df31c2291f5e3ff15def091d8b2bacb8a60854c5617f40f99e70178c0407519ca846a57e48051c4f49808e0f5927
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"motion-utils@npm:^12.4.10":
|
||||
version: 12.4.10
|
||||
resolution: "motion-utils@npm:12.4.10"
|
||||
checksum: 86335d4c2332ee4215a5a78371b0b8da6d472834802ac6516a43bc237efa5659dbdebc47b64aefaaeacb779d4e8e5639c79a05099a482fc235ed0c4337c89abc
|
||||
"motion-utils@npm:^12.5.0":
|
||||
version: 12.5.0
|
||||
resolution: "motion-utils@npm:12.5.0"
|
||||
checksum: 347169ab97d8b3720b363afad6c9f4e8999490d1d95c70aaa8f83333be1b8b4e11c5f25564a9809fb091160fad2184403222e5b383be1bba004243c8b47497fe
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"motion@npm:^12.4.1":
|
||||
version: 12.4.10
|
||||
resolution: "motion@npm:12.4.10"
|
||||
version: 12.5.0
|
||||
resolution: "motion@npm:12.5.0"
|
||||
dependencies:
|
||||
framer-motion: ^12.4.10
|
||||
framer-motion: ^12.5.0
|
||||
tslib: ^2.4.0
|
||||
peerDependencies:
|
||||
"@emotion/is-prop-valid": "*"
|
||||
@@ -4151,7 +4151,7 @@ __metadata:
|
||||
optional: true
|
||||
react-dom:
|
||||
optional: true
|
||||
checksum: 007ed203beaf4d61c941780c96078c48822ee913a4b34c7232a165592405e1f81cc267b3645061a4bbaed9fe1d2260ecd4e12433b5062c50dc882f469069d8b9
|
||||
checksum: a32231ea53a3f3b659630a86b40b5cd61daaa4428db06746c7aa06124c6c27ba2772a6482d652d1b4c71d2d9f01e30602eb700655f32fd1c0ccba74b1695fd8c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
|
||||
@@ -190,7 +190,7 @@ describe('MyDatabaseClass', () => {
|
||||
// "physical" databases to test against is much costlier than creating the
|
||||
// "logical" databases within them that the individual tests use.
|
||||
const databases = TestDatabases.create({
|
||||
ids: ['POSTGRES_16', 'POSTGRES_12', 'SQLITE_3', 'MYSQL_8'],
|
||||
ids: ['POSTGRES_17', 'POSTGRES_13', 'SQLITE_3', 'MYSQL_8'],
|
||||
});
|
||||
|
||||
// Just an example of how to conveniently bundle up the setup code
|
||||
@@ -236,8 +236,8 @@ your CI environment is able to supply databases natively, the `TestDatabases`
|
||||
support custom connection strings through the use of environment variables that
|
||||
it'll take into account when present.
|
||||
|
||||
- `BACKSTAGE_TEST_DATABASE_POSTGRES17_CONNECTION_STRING`
|
||||
- `BACKSTAGE_TEST_DATABASE_POSTGRES13_CONNECTION_STRING`
|
||||
- `BACKSTAGE_TEST_DATABASE_POSTGRES9_CONNECTION_STRING`
|
||||
- `BACKSTAGE_TEST_DATABASE_MYSQL8_CONNECTION_STRING`
|
||||
|
||||
## Testing Service Factories
|
||||
|
||||
@@ -134,6 +134,38 @@ search:
|
||||
timeout: { minutes: 3 }
|
||||
```
|
||||
|
||||
### Filtering through the catalog collator
|
||||
|
||||
The TechDocs collator by default filters through catalog entities where the annotation `metadata.annotations.backstage.io/techdocs-ref` exists. If you wish to further filter out entities, there are two ways to do so through the `techDocsCollatorEntityFilterExtensionPoint`.
|
||||
|
||||
```typescript
|
||||
export const exampleCustomCatalogFiltering = createBackendModule({
|
||||
pluginId: 'search',
|
||||
moduleId: 'search-techdocs-collator-entity-filter',
|
||||
register(reg) {
|
||||
reg.registerInit({
|
||||
deps: {
|
||||
customCollatorFilter: techDocsCollatorEntityFilterExtensionPoint,
|
||||
},
|
||||
async init({ customCollatorFilter }) {
|
||||
/* filtering by catalog params */
|
||||
customCollatorFilter.setCustomCatalogApiFilters([
|
||||
{ kind: ['API', 'Component', ...] },
|
||||
{ metadata: ['...more filters'] },
|
||||
]);
|
||||
|
||||
/* filtering by a custom function */
|
||||
customCollatorFilter.setEntityFilterFunction((entities: Entity[]) =>
|
||||
entities.filter(
|
||||
entity => entity.metadata?.annotations?.abc === 'xyz',
|
||||
),
|
||||
);
|
||||
},
|
||||
});
|
||||
},
|
||||
});
|
||||
```
|
||||
|
||||
## Community Collators
|
||||
|
||||
Here are some of the known Search Collators available in from the Backstage Community:
|
||||
|
||||
@@ -19,9 +19,11 @@ array when registering your custom actions, as seen below.
|
||||
|
||||
## Streamlining Custom Action Creation with Backstage CLI
|
||||
|
||||
The creation of custom actions in Backstage has never been easier thanks to the Backstage CLI. This tool streamlines the setup process, allowing you to focus on your actions' unique functionality.
|
||||
The creation of custom actions in Backstage has never been easier thanks to the Backstage CLI. This tool streamlines the
|
||||
setup process, allowing you to focus on your actions' unique functionality.
|
||||
|
||||
Start by using the `yarn backstage-cli new` command to generate a scaffolder module. This command sets up the necessary boilerplate code, providing a smooth start:
|
||||
Start by using the `yarn backstage-cli new` command to generate a scaffolder module. This command sets up the necessary
|
||||
boilerplate code, providing a smooth start:
|
||||
|
||||
```
|
||||
$ yarn backstage-cli new
|
||||
@@ -34,13 +36,19 @@ $ yarn backstage-cli new
|
||||
|
||||
You can find a [list](../../tooling/cli/03-commands.md) of all commands provided by the Backstage CLI.
|
||||
|
||||
When prompted, select the option to generate a scaffolder module. This creates a solid foundation for your custom action. Enter the name of the module you wish to create, and the CLI will generate the required files and directory structure.
|
||||
When prompted, select the option to generate a scaffolder module. This creates a solid foundation for your custom
|
||||
action. Enter the name of the module you wish to create, and the CLI will generate the required files and directory
|
||||
structure.
|
||||
|
||||
## Writing your Custom Action
|
||||
|
||||
After running the command, the CLI will create a new directory with your new scaffolder module. This directory will be the working directory for creating the custom action. It will contain all the necessary files and boilerplate code to get started.
|
||||
After running the command, the CLI will create a new directory with your new scaffolder module. This directory will be
|
||||
the working directory for creating the custom action. It will contain all the necessary files and boilerplate code to
|
||||
get started.
|
||||
|
||||
Let's create a simple action that adds a new file and some contents that are passed as `input` to the function. Within the generated directory, locate the file at `src/actions/example/example.ts`. Feel free to rename this file along with its generated unit test. We will replace the existing placeholder code with our custom action code as follows:
|
||||
Let's create a simple action that adds a new file and some contents that are passed as `input` to the function. Within
|
||||
the generated directory, locate the file at `src/actions/example/example.ts`. Feel free to rename this file along with
|
||||
its generated unit test. We will replace the existing placeholder code with our custom action code as follows:
|
||||
|
||||
```ts title="With Zod"
|
||||
import { resolveSafeChildPath } from '@backstage/backend-plugin-api';
|
||||
@@ -82,7 +90,8 @@ The `createTemplateAction` takes an object which specifies the following:
|
||||
- `id` - A unique ID for your custom action. We encourage you to namespace these
|
||||
in some way so that they won't collide with future built-in actions that we
|
||||
may ship with the `scaffolder-backend` plugin.
|
||||
- `description` - An optional field to describe the purpose of the action. This will populate in the `/create/actions` endpoint.
|
||||
- `description` - An optional field to describe the purpose of the action. This will populate in the `/create/actions`
|
||||
endpoint.
|
||||
- `schema.input` - A `zod` or JSON schema object for input values to your function
|
||||
- `schema.output` - A `zod` or JSON schema object for values which are output from the
|
||||
function using `ctx.output`
|
||||
@@ -132,18 +141,24 @@ export const createNewFileAction = () => {
|
||||
|
||||
### Naming Conventions
|
||||
|
||||
Try to keep names consistent for both your own custom actions, and any actions contributed to open source. We've found that a separation of `:` and using a verb as the last part of the name works well.
|
||||
We follow `provider:entity:verb` or as close to this as possible for our built in actions. For example, `github:actions:create` or `github:repo:create`.
|
||||
Try to keep names consistent for both your own custom actions, and any actions contributed to open source. We've found
|
||||
that a separation of `:` and using a verb as the last part of the name works well.
|
||||
We follow `provider:entity:verb` or as close to this as possible for our built in actions. For example,
|
||||
`github:actions:create` or `github:repo:create`.
|
||||
|
||||
Also feel free to use your company name to namespace them if you prefer too, for example `acme:file:create` like above.
|
||||
|
||||
Prefer to use `camelCase` over `snake_case` or `kebab-case` for these actions if possible, which leads to better reading and writing of template entity definitions.
|
||||
Prefer to use `camelCase` over `snake_case` or `kebab-case` for these actions if possible, which leads to better reading
|
||||
and writing of template entity definitions.
|
||||
|
||||
> We're aware that there are some exceptions to this, but try to follow as close as possible. We'll be working on migrating these in the repository over time too.
|
||||
> We're aware that there are some exceptions to this, but try to follow as close as possible. We'll be working on
|
||||
> migrating these in the repository over time too.
|
||||
|
||||
### Adding a TemplateExample
|
||||
|
||||
A TemplateExample is a predefined structure that can be used to create custom actions in your software templates. It serves as a blueprint for users to understand how to use a specific action and its fields as well as to ensure consistency and standardization across different custom actions.
|
||||
A TemplateExample is a predefined structure that can be used to create custom actions in your software templates. It
|
||||
serves as a blueprint for users to understand how to use a specific action and its fields as well as to ensure
|
||||
consistency and standardization across different custom actions.
|
||||
|
||||
#### Define a TemplateExample and add to your Custom Action
|
||||
|
||||
@@ -199,7 +214,8 @@ argument. It looks like the following:
|
||||
|
||||
## Registering Custom Actions
|
||||
|
||||
To register your new custom action in the Backend System you will need to create a backend module. Here is a very simplified example of how to do that:
|
||||
To register your new custom action in the Backend System you will need to create a backend module. Here is a very
|
||||
simplified example of how to do that:
|
||||
|
||||
```ts title="packages/backend/src/index.ts"
|
||||
/* highlight-add-start */
|
||||
@@ -233,7 +249,8 @@ backend.add(import('@backstage/plugin-scaffolder-backend'));
|
||||
backend.add(scaffolderModuleCustomExtensions);
|
||||
```
|
||||
|
||||
If your custom action requires core services such as `config` or `cache` they can be imported in the dependencies and passed to the custom action function.
|
||||
If your custom action requires core services such as `config` or `cache` they can be imported in the dependencies and
|
||||
passed to the custom action function.
|
||||
|
||||
```ts title="packages/backend/src/index.ts"
|
||||
import {
|
||||
@@ -243,17 +260,17 @@ import {
|
||||
|
||||
...
|
||||
|
||||
env.registerInit({
|
||||
deps: {
|
||||
scaffolder: scaffolderActionsExtensionPoint,
|
||||
cache: coreServices.cache,
|
||||
config: coreServices.rootConfig,
|
||||
},
|
||||
async init({ scaffolder, cache, config }) {
|
||||
scaffolder.addActions(
|
||||
customActionNeedingCacheAndConfig({ cache: cache, config: config }),
|
||||
);
|
||||
})
|
||||
env.registerInit({
|
||||
deps: {
|
||||
scaffolder: scaffolderActionsExtensionPoint,
|
||||
cache: coreServices.cache,
|
||||
config: coreServices.rootConfig,
|
||||
},
|
||||
async init({scaffolder, cache, config}) {
|
||||
scaffolder.addActions(
|
||||
customActionNeedingCacheAndConfig({cache: cache, config: config}),
|
||||
);
|
||||
})
|
||||
```
|
||||
|
||||
### Using Checkpoints in Custom Actions (Experimental)
|
||||
@@ -281,6 +298,13 @@ You have to define the unique key in scope of the scaffolder task for your check
|
||||
will check if the checkpoint with such key was already executed or not, if yes, and the run was successful, the callback
|
||||
will be skipped and instead the stored value will be returned.
|
||||
|
||||
Whenever you change the return type of the checkpoint, we encourage you to change the ID.
|
||||
For example, you can embed the versioning or another indicator for that (instead of using key `create.projects`, it can
|
||||
be `create.projects.v1`).
|
||||
If you'll preserve the same key, and you'll try to restart the affected task, it will fail on this checkpoint.
|
||||
The cached result will not match with the expected updated return type.
|
||||
By changing the key, you'll invalidate the cache of the checkpoint.
|
||||
|
||||
### Register Custom Actions with the Legacy Backend System
|
||||
|
||||
Once you have your Custom Action ready for usage with the scaffolder, you'll
|
||||
|
||||
@@ -92,10 +92,11 @@ the source code hosting provider. Notice that instead of the `dir:` prefix, the
|
||||
|
||||
Note, just as it's possible to specify a subdirectory with the `dir:` prefix,
|
||||
you can also provide a path to a non-root directory inside the repository which
|
||||
contains the `mkdocs.yml` file and `docs/` directory.
|
||||
contains the `mkdocs.yml` file and `docs/` directory. It is important that it is
|
||||
suffixed with a '/' in order for relative path resolution to work consistently.
|
||||
|
||||
e.g.
|
||||
`url:https://github.com/backstage/backstage/tree/master/plugins/techdocs-backend/examples/documented-component`
|
||||
`url:https://github.com/backstage/backstage/tree/master/plugins/techdocs-backend/examples/documented-component/`
|
||||
|
||||
### Why is URL Reader faster than a git clone?
|
||||
|
||||
|
||||
@@ -500,7 +500,84 @@ Continue this process for each of your legacy routes until you have migrated all
|
||||
|
||||
### Entity Pages
|
||||
|
||||
The entity pages are typically defined in `packages/app/src/components/catalog` and rendered as a child of the `/catalog/:namespace/:kind/:name` route. The entity pages are typically quite large and bringing in content from quite a lot of different plugins. At the moment we do not provide a way to gradually migrate entity pages to the new system, although that is planned as a future improvement. This means that the entire entity page and all of its plugins need to be migrated at once, including any other usages of those plugins.
|
||||
The entity pages are typically defined in `packages/app/src/components/catalog` and rendered as a child of the `/catalog/:namespace/:kind/:name` route. The entity pages are typically quite large and bringing in content from quite a lot of different plugins. To help gradually migrate entity pages we provide the `entityPage` option in the `convertLegacyApp` helper. This option lets you pass in an entity page app element tree that will be converted to extensions that are added to the features returned from `convertLegacyApp`.
|
||||
|
||||
To start the gradual migration of entity pages, add your `entityPages` to the `convertLegacyApp` call:
|
||||
|
||||
```tsx title="in packages/app/src/App.tsx"
|
||||
/* highlight-remove-next-line */
|
||||
const legacyFeatures = convertLegacyApp(routes);
|
||||
/* highlight-add-next-line */
|
||||
const legacyFeatures = convertLegacyApp(routes, { entityPage });
|
||||
```
|
||||
|
||||
Next, you will need to fully migrate the catalog plugin itself. This is because only a single version of a plugin can be installed in the app at a time, so in order to start using the new version of the catalog plugin you need to remove all usage of the old one. This includes both the routes and entity pages. You will need to keep the structural helpers for the entity pages, such as `EntityLayout` and `EntitySwitch`, but remove any extensions like the `<CatalogIndexPage/>` and entity cards and content like `<EntityAboutCard/>` and `<EntityOrphanWarning/>`.
|
||||
|
||||
Remove the following routes:
|
||||
|
||||
```tsx title="in packages/app/src/App.tsx"
|
||||
const routes = (
|
||||
<FlatRoutes>
|
||||
...
|
||||
{/* highlight-remove-start */}
|
||||
<Route path="/catalog" element={<CatalogIndexPage />} />
|
||||
<Route
|
||||
path="/catalog/:namespace/:kind/:name"
|
||||
element={<CatalogEntityPage />}
|
||||
>
|
||||
{entityPage}
|
||||
</Route>
|
||||
{/* highlight-remove-end */}
|
||||
...
|
||||
</FlatRoutes>
|
||||
);
|
||||
```
|
||||
|
||||
And explicitly install the catalog plugin before the converted legacy features:
|
||||
|
||||
```tsx title="in packages/app/src/App.tsx"
|
||||
/* highlight-add-next-line */
|
||||
import { default as catalogPlugin } from '@backstage/plugin-catalog/alpha';
|
||||
|
||||
const app = createApp({
|
||||
/* highlight-remove-next-line */
|
||||
features: [optionsModule, ...legacyFeatures],
|
||||
/* highlight-add-next-line */
|
||||
features: [catalogPlugin, optionsModule, ...legacyFeatures],
|
||||
});
|
||||
```
|
||||
|
||||
If you are not using the default `<CatalogIndexPage />` you can install your custom catalog page as an override for now instead, and fully migrate it to the new system later.
|
||||
|
||||
```tsx title="in packages/app/src/App.tsx"
|
||||
/* highlight-remove-start */
|
||||
const catalogPluginOverride = catalogPlugin.withOverrides({
|
||||
extensions: [
|
||||
catalogPlugin.getExtension('page:catalog').override({
|
||||
params: {
|
||||
loader: async () => (
|
||||
<CatalogIndexPage
|
||||
pagination={{ mode: 'offset', limit: 20 }}
|
||||
filters={<>{/* ... */}</>}
|
||||
/>
|
||||
),
|
||||
},
|
||||
}),
|
||||
],
|
||||
});
|
||||
/* highlight-remove-end */
|
||||
|
||||
const app = createApp({
|
||||
/* highlight-remove-next-line */
|
||||
features: [catalogPlugin, optionsModule, ...legacyFeatures],
|
||||
/* highlight-add-next-line */
|
||||
features: [catalogPluginOverride, optionsModule, ...legacyFeatures],
|
||||
});
|
||||
```
|
||||
|
||||
At this point you should be able to run the app and see that you're not using the new version of the catalog plugin. If you navigate to the entity pages you will likely see a lot of duplicate content at the bottom of the page. These are the duplicates of the entity cards provided by the catalog plugin itself that we mentioned earlier that you need to remove. Clean up the entity pages by removing cards and content from the catalog plugin such as `<EntityAboutCard/>` and `<EntityOrphanWarning/>`.
|
||||
|
||||
Once the cleanup is complete you should be left with clean entity pages that are built using a mix of the old and new frontend system. From this point you can continue to gradually migrate plugins that provide content for the entity pages, until all plugins have been fully moved to the new system and the `entityPage` option can be removed.
|
||||
|
||||
### Sidebar
|
||||
|
||||
|
||||
@@ -106,7 +106,7 @@ be part of the `1.12` Backstage release.
|
||||
The following versioning policy applies to all packages:
|
||||
|
||||
- Breaking changes are noted in the changelog, and documentation is updated.
|
||||
- Breaking changes are prefixed with `**BREAKING**: ` in the changelog.
|
||||
- Breaking changes are prefixed with `**BREAKING**:` in the changelog.
|
||||
- All public exports are considered stable and will have an entry in the
|
||||
changelog.
|
||||
- Breaking changes are recommended to document a clear upgrade path in the
|
||||
@@ -195,4 +195,4 @@ The Backstage project recommends and supports using PostgreSQL for persistent st
|
||||
|
||||
The PostgreSQL [versioning policy](https://www.postgresql.org/support/versioning/) is to release a new major version every year with new features which is then supported for 5 years after its initial release.
|
||||
|
||||
Our policy mirrors the PostgreSQL versioning policy - we will support the last 5 major versions. We will also test the newest and oldest versions in that range. For example, if the range we support is currently 12 to 16, then we would only test 12 and 16 explicitly.
|
||||
Our policy mirrors the PostgreSQL versioning policy - we will support the last 5 major versions. We will also test the newest and oldest versions in that range. For example, if the range we support is currently 13 to 17, then we would only test 13 and 17 explicitly.
|
||||
|
||||
@@ -110,13 +110,13 @@ There are also additional settings:
|
||||
from the target.
|
||||
|
||||
By default, the proxy will only forward safe HTTP request headers to the target.
|
||||
Those are based on the headers that are considered safe for CORS and includes
|
||||
These are based on the headers that are considered safe for CORS and include
|
||||
headers like `content-type` or `last-modified`, as well as all headers that are
|
||||
set by the proxy. If the proxy should forward other headers like
|
||||
set by the proxy. If the proxy should forward other headers, like
|
||||
`authorization`, this must be enabled by the `allowedHeaders` config, for
|
||||
example `allowedHeaders: ['Authorization']`. This should help to not
|
||||
accidentally forward confidential headers (`cookie`, `X-Auth-Request-User`) to
|
||||
third-parties.
|
||||
third parties.
|
||||
|
||||
The same logic applies to headers that are sent from the target back to the
|
||||
frontend.
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,12 @@
|
||||
---
|
||||
title: Facets.cloud Platform
|
||||
author: Facets.cloud
|
||||
authorUrl: 'https://facets.cloud'
|
||||
category: Deployment
|
||||
description: |
|
||||
Show environments, releases and terraform outputs deployed by Facets.cloud Platform.
|
||||
Plugin includes an Environment Overview, Release Details and Terraform Output ComponentCard.
|
||||
documentation: https://github.com/Facets-cloud/facets-backstage-plugin
|
||||
iconUrl: /img/facets-cloud-logo.png
|
||||
npmPackageName: '@facets-cloud/backstage-plugin'
|
||||
addedDate: '2025-02-25'
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
+49
-49
@@ -2961,90 +2961,90 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@swc/core-darwin-arm64@npm:1.11.8":
|
||||
version: 1.11.8
|
||||
resolution: "@swc/core-darwin-arm64@npm:1.11.8"
|
||||
"@swc/core-darwin-arm64@npm:1.11.9":
|
||||
version: 1.11.9
|
||||
resolution: "@swc/core-darwin-arm64@npm:1.11.9"
|
||||
conditions: os=darwin & cpu=arm64
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@swc/core-darwin-x64@npm:1.11.8":
|
||||
version: 1.11.8
|
||||
resolution: "@swc/core-darwin-x64@npm:1.11.8"
|
||||
"@swc/core-darwin-x64@npm:1.11.9":
|
||||
version: 1.11.9
|
||||
resolution: "@swc/core-darwin-x64@npm:1.11.9"
|
||||
conditions: os=darwin & cpu=x64
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@swc/core-linux-arm-gnueabihf@npm:1.11.8":
|
||||
version: 1.11.8
|
||||
resolution: "@swc/core-linux-arm-gnueabihf@npm:1.11.8"
|
||||
"@swc/core-linux-arm-gnueabihf@npm:1.11.9":
|
||||
version: 1.11.9
|
||||
resolution: "@swc/core-linux-arm-gnueabihf@npm:1.11.9"
|
||||
conditions: os=linux & cpu=arm
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@swc/core-linux-arm64-gnu@npm:1.11.8":
|
||||
version: 1.11.8
|
||||
resolution: "@swc/core-linux-arm64-gnu@npm:1.11.8"
|
||||
"@swc/core-linux-arm64-gnu@npm:1.11.9":
|
||||
version: 1.11.9
|
||||
resolution: "@swc/core-linux-arm64-gnu@npm:1.11.9"
|
||||
conditions: os=linux & cpu=arm64 & libc=glibc
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@swc/core-linux-arm64-musl@npm:1.11.8":
|
||||
version: 1.11.8
|
||||
resolution: "@swc/core-linux-arm64-musl@npm:1.11.8"
|
||||
"@swc/core-linux-arm64-musl@npm:1.11.9":
|
||||
version: 1.11.9
|
||||
resolution: "@swc/core-linux-arm64-musl@npm:1.11.9"
|
||||
conditions: os=linux & cpu=arm64 & libc=musl
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@swc/core-linux-x64-gnu@npm:1.11.8":
|
||||
version: 1.11.8
|
||||
resolution: "@swc/core-linux-x64-gnu@npm:1.11.8"
|
||||
"@swc/core-linux-x64-gnu@npm:1.11.9":
|
||||
version: 1.11.9
|
||||
resolution: "@swc/core-linux-x64-gnu@npm:1.11.9"
|
||||
conditions: os=linux & cpu=x64 & libc=glibc
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@swc/core-linux-x64-musl@npm:1.11.8":
|
||||
version: 1.11.8
|
||||
resolution: "@swc/core-linux-x64-musl@npm:1.11.8"
|
||||
"@swc/core-linux-x64-musl@npm:1.11.9":
|
||||
version: 1.11.9
|
||||
resolution: "@swc/core-linux-x64-musl@npm:1.11.9"
|
||||
conditions: os=linux & cpu=x64 & libc=musl
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@swc/core-win32-arm64-msvc@npm:1.11.8":
|
||||
version: 1.11.8
|
||||
resolution: "@swc/core-win32-arm64-msvc@npm:1.11.8"
|
||||
"@swc/core-win32-arm64-msvc@npm:1.11.9":
|
||||
version: 1.11.9
|
||||
resolution: "@swc/core-win32-arm64-msvc@npm:1.11.9"
|
||||
conditions: os=win32 & cpu=arm64
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@swc/core-win32-ia32-msvc@npm:1.11.8":
|
||||
version: 1.11.8
|
||||
resolution: "@swc/core-win32-ia32-msvc@npm:1.11.8"
|
||||
"@swc/core-win32-ia32-msvc@npm:1.11.9":
|
||||
version: 1.11.9
|
||||
resolution: "@swc/core-win32-ia32-msvc@npm:1.11.9"
|
||||
conditions: os=win32 & cpu=ia32
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@swc/core-win32-x64-msvc@npm:1.11.8":
|
||||
version: 1.11.8
|
||||
resolution: "@swc/core-win32-x64-msvc@npm:1.11.8"
|
||||
"@swc/core-win32-x64-msvc@npm:1.11.9":
|
||||
version: 1.11.9
|
||||
resolution: "@swc/core-win32-x64-msvc@npm:1.11.9"
|
||||
conditions: os=win32 & cpu=x64
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@swc/core@npm:^1.3.46":
|
||||
version: 1.11.8
|
||||
resolution: "@swc/core@npm:1.11.8"
|
||||
version: 1.11.9
|
||||
resolution: "@swc/core@npm:1.11.9"
|
||||
dependencies:
|
||||
"@swc/core-darwin-arm64": 1.11.8
|
||||
"@swc/core-darwin-x64": 1.11.8
|
||||
"@swc/core-linux-arm-gnueabihf": 1.11.8
|
||||
"@swc/core-linux-arm64-gnu": 1.11.8
|
||||
"@swc/core-linux-arm64-musl": 1.11.8
|
||||
"@swc/core-linux-x64-gnu": 1.11.8
|
||||
"@swc/core-linux-x64-musl": 1.11.8
|
||||
"@swc/core-win32-arm64-msvc": 1.11.8
|
||||
"@swc/core-win32-ia32-msvc": 1.11.8
|
||||
"@swc/core-win32-x64-msvc": 1.11.8
|
||||
"@swc/core-darwin-arm64": 1.11.9
|
||||
"@swc/core-darwin-x64": 1.11.9
|
||||
"@swc/core-linux-arm-gnueabihf": 1.11.9
|
||||
"@swc/core-linux-arm64-gnu": 1.11.9
|
||||
"@swc/core-linux-arm64-musl": 1.11.9
|
||||
"@swc/core-linux-x64-gnu": 1.11.9
|
||||
"@swc/core-linux-x64-musl": 1.11.9
|
||||
"@swc/core-win32-arm64-msvc": 1.11.9
|
||||
"@swc/core-win32-ia32-msvc": 1.11.9
|
||||
"@swc/core-win32-x64-msvc": 1.11.9
|
||||
"@swc/counter": ^0.1.3
|
||||
"@swc/types": ^0.1.19
|
||||
peerDependencies:
|
||||
@@ -3073,7 +3073,7 @@ __metadata:
|
||||
peerDependenciesMeta:
|
||||
"@swc/helpers":
|
||||
optional: true
|
||||
checksum: 53aac457ec10ad931e4a15d14be87d4cb53432d2fc2433244835ceb1396e5560f52155e24eadc67bb964bd675b74eea0d99a7570062cd915b02d0336152bf36c
|
||||
checksum: 2c89cc4630f569f9b6e2e0dcc29b168d3c14c730d5f04b2923b4eb0d517be327b22bf8b64eb50fb0412e2960f43ab0ccb4e99f6792ec409a9d24e7a2a85fa12f
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -5902,8 +5902,8 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"docusaurus-plugin-openapi-docs@npm:^4.3.0":
|
||||
version: 4.3.6
|
||||
resolution: "docusaurus-plugin-openapi-docs@npm:4.3.6"
|
||||
version: 4.3.7
|
||||
resolution: "docusaurus-plugin-openapi-docs@npm:4.3.7"
|
||||
dependencies:
|
||||
"@apidevtools/json-schema-ref-parser": ^11.5.4
|
||||
"@redocly/openapi-core": ^1.10.5
|
||||
@@ -5925,7 +5925,7 @@ __metadata:
|
||||
"@docusaurus/utils": ^3.5.0
|
||||
"@docusaurus/utils-validation": ^3.5.0
|
||||
react: ^16.8.4 || ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||
checksum: ed80d72f16cf03fc38cc9c6b9916287c80b4bf289040eacbd5a4bacabeed428a9293be974fb1bbede8595e2288820b7d86ca15aaf21366d043edf7e58c45aeae
|
||||
checksum: 714d91c40ea00217ef654b690569dc3249a5048b83532da08be0c552e13f42b326cf1262490063519286e2cd30ad1c1bbd08f678d09c7341f945be9d8cd8e864
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -11891,9 +11891,9 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"prismjs@npm:^1.29.0":
|
||||
version: 1.29.0
|
||||
resolution: "prismjs@npm:1.29.0"
|
||||
checksum: 007a8869d4456ff8049dc59404e32d5666a07d99c3b0e30a18bd3b7676dfa07d1daae9d0f407f20983865fd8da56de91d09cb08e6aa61f5bc420a27c0beeaf93
|
||||
version: 1.30.0
|
||||
resolution: "prismjs@npm:1.30.0"
|
||||
checksum: a68eddd4c5f1c506badb5434b0b28a7cc2479ed1df91bc4218e6833c7971ef40c50ec481ea49749ac964256acb78d8b66a6bd11554938e8998e46c18b5f9a580
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
|
||||
+10
-10
@@ -1,11 +1,6 @@
|
||||
{
|
||||
"name": "root",
|
||||
"version": "1.37.0-next.1",
|
||||
"private": true,
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/backstage/backstage"
|
||||
},
|
||||
"version": "1.37.0-next.2",
|
||||
"backstage": {
|
||||
"cli": {
|
||||
"new": {
|
||||
@@ -16,6 +11,11 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"private": true,
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/backstage/backstage"
|
||||
},
|
||||
"workspaces": {
|
||||
"packages": [
|
||||
"packages/*",
|
||||
@@ -51,11 +51,11 @@
|
||||
"snyk:test": "npx snyk test --yarn-workspaces --strict-out-of-sync=false",
|
||||
"snyk:test:package": "yarn snyk:test --include",
|
||||
"start": "yarn workspace example-app start",
|
||||
"start-backend": "yarn workspace example-backend start",
|
||||
"start-backend:legacy": "yarn workspace example-backend-legacy start",
|
||||
"start:lighthouse": "yarn workspaces foreach -A --include example-backend --include example-app --parallel --jobs unlimited -v -i run start",
|
||||
"start:microsite": "cd microsite/ && yarn start",
|
||||
"start:next": "yarn workspace example-app-next start",
|
||||
"start-backend": "yarn workspace example-backend start",
|
||||
"start-backend:legacy": "yarn workspace example-backend-legacy start",
|
||||
"storybook": "yarn ./storybook run storybook",
|
||||
"techdocs-cli": "node scripts/techdocs-cli.js",
|
||||
"techdocs-cli:dev": "cross-env TECHDOCS_CLI_DEV_MODE=true node scripts/techdocs-cli.js",
|
||||
@@ -103,9 +103,9 @@
|
||||
"@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",
|
||||
"@types/react": "^18.0.0",
|
||||
"@types/react-dom": "^18.0.0",
|
||||
"jest-haste-map@^29.7.0": "patch:jest-haste-map@npm%3A29.7.0#./.yarn/patches/jest-haste-map-npm-29.7.0-e3be419eff.patch",
|
||||
"ast-types@0.14.2": "patch:ast-types@npm%3A0.14.2#./.yarn/patches/ast-types-npm-0.14.2-43c4ac4b0d.patch",
|
||||
"ast-types@^0.14.1": "patch:ast-types@npm%3A0.14.2#./.yarn/patches/ast-types-npm-0.14.2-43c4ac4b0d.patch",
|
||||
"ast-types@0.14.2": "patch:ast-types@npm%3A0.14.2#./.yarn/patches/ast-types-npm-0.14.2-43c4ac4b0d.patch"
|
||||
"jest-haste-map@^29.7.0": "patch:jest-haste-map@npm%3A29.7.0#./.yarn/patches/jest-haste-map-npm-29.7.0-e3be419eff.patch"
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/errors": "workspace:^",
|
||||
|
||||
@@ -1,5 +1,47 @@
|
||||
# @backstage/app-defaults
|
||||
|
||||
## 1.6.0-next.1
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- 12f8e01: **BREAKING**: The default `DiscoveryApi` implementation has been switched to use `FrontendHostDiscovery`, which adds support for the `discovery.endpoints` configuration.
|
||||
|
||||
This is marked as a breaking change because it will cause any existing `discovery.endpoints` configuration to be picked up and used, which may break existing setups.
|
||||
|
||||
For example, consider the following configuration:
|
||||
|
||||
```yaml
|
||||
app:
|
||||
baseUrl: https://backstage.acme.org
|
||||
|
||||
backend:
|
||||
baseUrl: https://backstage.internal.acme.org
|
||||
|
||||
discovery:
|
||||
endpoints:
|
||||
- target: https://catalog.internal.acme.org/api/{{pluginId}}
|
||||
plugins: [catalog]
|
||||
```
|
||||
|
||||
This will now cause requests from the frontend towards the `catalog` plugin to be routed to `https://catalog.internal.acme.org/api/catalog`, but this might not be reachable from the frontend. To fix this, you should update the `discovery.endpoints` configuration to only override the internal URL of the plugin:
|
||||
|
||||
```yaml
|
||||
discovery:
|
||||
endpoints:
|
||||
- target:
|
||||
internal: https://catalog.internal.acme.org/api/{{pluginId}}
|
||||
plugins: [catalog]
|
||||
```
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/core-app-api@1.16.0-next.0
|
||||
- @backstage/core-components@0.16.5-next.1
|
||||
- @backstage/core-plugin-api@1.10.4
|
||||
- @backstage/theme@0.6.4
|
||||
- @backstage/plugin-permission-react@0.4.31
|
||||
|
||||
## 1.5.18-next.0
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/app-defaults",
|
||||
"version": "1.5.18-next.0",
|
||||
"version": "1.6.0-next.1",
|
||||
"description": "Provides the default wiring of a Backstage App",
|
||||
"backstage": {
|
||||
"role": "web-library"
|
||||
|
||||
@@ -28,13 +28,13 @@ import {
|
||||
BitbucketServerAuth,
|
||||
OAuthRequestManager,
|
||||
WebStorage,
|
||||
UrlPatternDiscovery,
|
||||
OneLoginAuth,
|
||||
UnhandledErrorForwarder,
|
||||
AtlassianAuth,
|
||||
createFetchApi,
|
||||
FetchMiddlewares,
|
||||
VMwareCloudAuth,
|
||||
FrontendHostDiscovery,
|
||||
} from '@backstage/core-app-api';
|
||||
|
||||
import {
|
||||
@@ -68,10 +68,7 @@ export const apis = [
|
||||
createApiFactory({
|
||||
api: discoveryApiRef,
|
||||
deps: { configApi: configApiRef },
|
||||
factory: ({ configApi }) =>
|
||||
UrlPatternDiscovery.compile(
|
||||
`${configApi.getString('backend.baseUrl')}/api/{{ pluginId }}`,
|
||||
),
|
||||
factory: ({ configApi }) => FrontendHostDiscovery.fromConfig(configApi),
|
||||
}),
|
||||
createApiFactory({
|
||||
api: alertApiRef,
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
# app-next-example-plugin
|
||||
|
||||
## 0.0.21-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/frontend-plugin-api@0.10.0-next.2
|
||||
- @backstage/core-components@0.16.5-next.1
|
||||
|
||||
## 0.0.21-next.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "app-next-example-plugin",
|
||||
"version": "0.0.21-next.1",
|
||||
"version": "0.0.21-next.2",
|
||||
"description": "Backstage internal example plugin",
|
||||
"backstage": {
|
||||
"role": "frontend-plugin",
|
||||
|
||||
@@ -1,5 +1,50 @@
|
||||
# example-app-next
|
||||
|
||||
## 0.0.21-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/plugin-catalog@1.28.0-next.2
|
||||
- @backstage/frontend-app-api@0.11.0-next.2
|
||||
- @backstage/frontend-defaults@0.2.0-next.2
|
||||
- @backstage/frontend-plugin-api@0.10.0-next.2
|
||||
- @backstage/cli@0.31.0-next.1
|
||||
- @backstage/core-app-api@1.16.0-next.0
|
||||
- @backstage/plugin-catalog-react@1.16.0-next.2
|
||||
- @backstage/core-compat-api@0.4.0-next.2
|
||||
- @backstage/plugin-signals@0.0.17-next.2
|
||||
- @backstage/plugin-app@0.1.7-next.2
|
||||
- @backstage/core-components@0.16.5-next.1
|
||||
- @backstage/plugin-scaffolder-react@1.14.6-next.2
|
||||
- @backstage/app-defaults@1.6.0-next.1
|
||||
- @backstage/plugin-scaffolder@1.29.0-next.2
|
||||
- @backstage/plugin-api-docs@0.12.5-next.2
|
||||
- @backstage/plugin-catalog-graph@0.4.17-next.2
|
||||
- @backstage/plugin-catalog-import@0.12.11-next.2
|
||||
- @backstage/plugin-org@0.6.37-next.2
|
||||
- @backstage/plugin-techdocs@1.12.4-next.2
|
||||
- @backstage/plugin-user-settings@0.8.20-next.2
|
||||
- @backstage/plugin-search-react@1.8.7-next.2
|
||||
- @backstage/plugin-app-visualizer@0.1.17-next.2
|
||||
- @backstage/plugin-catalog-unprocessed-entities@0.2.15-next.2
|
||||
- @backstage/plugin-home@0.8.6-next.2
|
||||
- @backstage/plugin-kubernetes@0.12.5-next.2
|
||||
- @backstage/plugin-notifications@0.5.3-next.2
|
||||
- @backstage/plugin-search@1.4.24-next.2
|
||||
- @backstage/plugin-techdocs-module-addons-contrib@1.1.22-next.2
|
||||
- @backstage/plugin-techdocs-react@1.2.15-next.2
|
||||
- @backstage/catalog-model@1.7.3
|
||||
- @backstage/config@1.3.2
|
||||
- @backstage/core-plugin-api@1.10.4
|
||||
- @backstage/integration-react@1.2.5-next.0
|
||||
- @backstage/theme@0.6.4
|
||||
- @backstage/plugin-auth-react@0.1.13-next.1
|
||||
- @backstage/plugin-catalog-common@1.1.3
|
||||
- @backstage/plugin-kubernetes-cluster@0.0.23-next.2
|
||||
- @backstage/plugin-permission-react@0.4.31
|
||||
- @backstage/plugin-search-common@1.2.17
|
||||
|
||||
## 0.0.21-next.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "example-app-next",
|
||||
"version": "0.0.21-next.1",
|
||||
"version": "0.0.21-next.2",
|
||||
"backstage": {
|
||||
"role": "frontend"
|
||||
},
|
||||
|
||||
@@ -1,5 +1,46 @@
|
||||
# example-app
|
||||
|
||||
## 0.2.107-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/plugin-catalog@1.28.0-next.2
|
||||
- @backstage/frontend-app-api@0.11.0-next.2
|
||||
- @backstage/cli@0.31.0-next.1
|
||||
- @backstage/core-app-api@1.16.0-next.0
|
||||
- @backstage/plugin-catalog-react@1.16.0-next.2
|
||||
- @backstage/plugin-signals@0.0.17-next.2
|
||||
- @backstage/core-components@0.16.5-next.1
|
||||
- @backstage/plugin-scaffolder-react@1.14.6-next.2
|
||||
- @backstage/app-defaults@1.6.0-next.1
|
||||
- @backstage/plugin-scaffolder@1.29.0-next.2
|
||||
- @backstage/plugin-api-docs@0.12.5-next.2
|
||||
- @backstage/plugin-catalog-graph@0.4.17-next.2
|
||||
- @backstage/plugin-catalog-import@0.12.11-next.2
|
||||
- @backstage/plugin-org@0.6.37-next.2
|
||||
- @backstage/plugin-techdocs@1.12.4-next.2
|
||||
- @backstage/plugin-user-settings@0.8.20-next.2
|
||||
- @backstage/plugin-search-react@1.8.7-next.2
|
||||
- @backstage/plugin-catalog-unprocessed-entities@0.2.15-next.2
|
||||
- @backstage/plugin-devtools@0.1.25-next.2
|
||||
- @backstage/plugin-home@0.8.6-next.2
|
||||
- @backstage/plugin-kubernetes@0.12.5-next.2
|
||||
- @backstage/plugin-notifications@0.5.3-next.2
|
||||
- @backstage/plugin-search@1.4.24-next.2
|
||||
- @backstage/plugin-techdocs-module-addons-contrib@1.1.22-next.2
|
||||
- @backstage/plugin-techdocs-react@1.2.15-next.2
|
||||
- @backstage/catalog-model@1.7.3
|
||||
- @backstage/config@1.3.2
|
||||
- @backstage/core-plugin-api@1.10.4
|
||||
- @backstage/integration-react@1.2.5-next.0
|
||||
- @backstage/theme@0.6.4
|
||||
- @backstage/plugin-auth-react@0.1.13-next.1
|
||||
- @backstage/plugin-catalog-common@1.1.3
|
||||
- @backstage/plugin-kubernetes-cluster@0.0.23-next.2
|
||||
- @backstage/plugin-permission-react@0.4.31
|
||||
- @backstage/plugin-search-common@1.2.17
|
||||
|
||||
## 0.2.107-next.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "example-app",
|
||||
"version": "0.2.107-next.1",
|
||||
"version": "0.2.107-next.2",
|
||||
"backstage": {
|
||||
"role": "frontend"
|
||||
},
|
||||
|
||||
@@ -1,5 +1,19 @@
|
||||
# @backstage/backend-app-api
|
||||
|
||||
## 1.2.1-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/config-loader@1.10.0-next.0
|
||||
- @backstage/backend-plugin-api@1.2.1-next.1
|
||||
- @backstage/cli-common@0.1.15
|
||||
- @backstage/config@1.3.2
|
||||
- @backstage/errors@1.2.7
|
||||
- @backstage/types@1.2.1
|
||||
- @backstage/plugin-auth-node@0.6.1-next.1
|
||||
- @backstage/plugin-permission-node@0.8.9-next.1
|
||||
|
||||
## 1.2.1-next.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/backend-app-api",
|
||||
"version": "1.2.1-next.1",
|
||||
"version": "1.2.1-next.2",
|
||||
"description": "Core API used by Backstage backend apps",
|
||||
"backstage": {
|
||||
"role": "node-library"
|
||||
|
||||
@@ -1,5 +1,26 @@
|
||||
# @backstage/backend-defaults
|
||||
|
||||
## 0.8.2-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 12f8e01: The `discovery.endpoints` configuration no longer requires both `internal` and `external` target when using the object form, instead falling back to the default.
|
||||
- Updated dependencies
|
||||
- @backstage/config-loader@1.10.0-next.0
|
||||
- @backstage/integration@1.16.2-next.0
|
||||
- @backstage/plugin-events-node@0.4.9-next.2
|
||||
- @backstage/backend-app-api@1.2.1-next.2
|
||||
- @backstage/backend-dev-utils@0.1.5
|
||||
- @backstage/backend-plugin-api@1.2.1-next.1
|
||||
- @backstage/cli-common@0.1.15
|
||||
- @backstage/cli-node@0.2.13
|
||||
- @backstage/config@1.3.2
|
||||
- @backstage/errors@1.2.7
|
||||
- @backstage/integration-aws-node@0.1.15
|
||||
- @backstage/types@1.2.1
|
||||
- @backstage/plugin-auth-node@0.6.1-next.1
|
||||
- @backstage/plugin-permission-node@0.8.9-next.1
|
||||
|
||||
## 0.8.2-next.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
+1
-1
@@ -652,7 +652,7 @@ export interface Config {
|
||||
* Can be either a string or an object with internal and external keys.
|
||||
* Targets with `{{pluginId}}` or `{{ pluginId }} in the URL will be replaced with the plugin ID.
|
||||
*/
|
||||
target: string | { internal: string; external: string };
|
||||
target: string | { internal?: string; external?: string };
|
||||
/**
|
||||
* Array of plugins which use the target base URL.
|
||||
*/
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/backend-defaults",
|
||||
"version": "0.8.2-next.1",
|
||||
"version": "0.8.2-next.2",
|
||||
"description": "Backend defaults used by Backstage backend apps",
|
||||
"backstage": {
|
||||
"role": "node-library"
|
||||
|
||||
@@ -162,6 +162,42 @@ describe('HostDiscovery', () => {
|
||||
);
|
||||
});
|
||||
|
||||
it('allows plugin overrides to only override either internal or external targets', async () => {
|
||||
const discovery = HostDiscovery.fromConfig(
|
||||
new ConfigReader({
|
||||
backend: {
|
||||
baseUrl: 'http://localhost:40',
|
||||
listen: { port: 80, host: 'localhost' },
|
||||
},
|
||||
discovery: {
|
||||
endpoints: [
|
||||
{
|
||||
target: { internal: 'http://catalog-backend:8080/api/catalog' },
|
||||
plugins: ['catalog'],
|
||||
},
|
||||
{
|
||||
target: { external: 'http://frontend/api/scaffolder' },
|
||||
plugins: ['scaffolder'],
|
||||
},
|
||||
],
|
||||
},
|
||||
}),
|
||||
);
|
||||
|
||||
await expect(discovery.getBaseUrl('catalog')).resolves.toBe(
|
||||
'http://catalog-backend:8080/api/catalog',
|
||||
);
|
||||
await expect(discovery.getExternalBaseUrl('catalog')).resolves.toBe(
|
||||
'http://localhost:40/api/catalog',
|
||||
);
|
||||
await expect(discovery.getBaseUrl('scaffolder')).resolves.toBe(
|
||||
'http://localhost:80/api/scaffolder',
|
||||
);
|
||||
await expect(discovery.getExternalBaseUrl('scaffolder')).resolves.toBe(
|
||||
'http://frontend/api/scaffolder',
|
||||
);
|
||||
});
|
||||
|
||||
it('replaces {{pluginId}} or {{ pluginId }} in the target', async () => {
|
||||
const discovery = HostDiscovery.fromConfig(
|
||||
new ConfigReader({
|
||||
|
||||
@@ -102,10 +102,13 @@ export class HostDiscovery implements DiscoveryService {
|
||||
private getTargetFromConfig(pluginId: string, type: 'internal' | 'external') {
|
||||
const endpoints = this.discoveryConfig?.getOptionalConfigArray('endpoints');
|
||||
|
||||
const target = endpoints
|
||||
const targetOrObj = endpoints
|
||||
?.find(endpoint => endpoint.getStringArray('plugins').includes(pluginId))
|
||||
?.get<Target>('target');
|
||||
|
||||
const target =
|
||||
typeof targetOrObj === 'string' ? targetOrObj : targetOrObj?.[type];
|
||||
|
||||
if (!target) {
|
||||
const baseUrl =
|
||||
type === 'external' ? this.externalBaseUrl : this.internalBaseUrl;
|
||||
@@ -113,14 +116,7 @@ export class HostDiscovery implements DiscoveryService {
|
||||
return `${baseUrl}/${encodeURIComponent(pluginId)}`;
|
||||
}
|
||||
|
||||
if (typeof target === 'string') {
|
||||
return target.replace(
|
||||
/\{\{\s*pluginId\s*\}\}/g,
|
||||
encodeURIComponent(pluginId),
|
||||
);
|
||||
}
|
||||
|
||||
return target[type].replace(
|
||||
return target.replace(
|
||||
/\{\{\s*pluginId\s*\}\}/g,
|
||||
encodeURIComponent(pluginId),
|
||||
);
|
||||
|
||||
+1
-1
@@ -33,7 +33,7 @@ jest.setTimeout(60_000);
|
||||
describe('PluginTaskManagerImpl', () => {
|
||||
const addShutdownHook = jest.fn();
|
||||
const databases = TestDatabases.create({
|
||||
ids: ['POSTGRES_16', 'POSTGRES_12', 'SQLITE_3'],
|
||||
ids: ['POSTGRES_17', 'POSTGRES_13', 'SQLITE_3'],
|
||||
});
|
||||
|
||||
beforeAll(async () => {
|
||||
|
||||
+2
-2
@@ -39,8 +39,8 @@ describe('PluginTaskSchedulerJanitor', () => {
|
||||
const databases = TestDatabases.create({
|
||||
ids: [
|
||||
/* 'MYSQL_8' not supported yet */
|
||||
'POSTGRES_16',
|
||||
'POSTGRES_12',
|
||||
'POSTGRES_17',
|
||||
'POSTGRES_13',
|
||||
'SQLITE_3',
|
||||
'MYSQL_8',
|
||||
],
|
||||
|
||||
@@ -21,5 +21,5 @@ import { Settings } from 'luxon';
|
||||
Settings.throwOnInvalid = true;
|
||||
|
||||
TestDatabases.setDefaults({
|
||||
ids: ['MYSQL_8', 'POSTGRES_16', 'POSTGRES_12', 'SQLITE_3'],
|
||||
ids: ['MYSQL_8', 'POSTGRES_17', 'POSTGRES_13', 'SQLITE_3'],
|
||||
});
|
||||
|
||||
@@ -1,5 +1,29 @@
|
||||
# @backstage/backend-dynamic-feature-service
|
||||
|
||||
## 0.6.1-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/plugin-scaffolder-node@0.8.0-next.2
|
||||
- @backstage/plugin-catalog-backend@1.32.0-next.2
|
||||
- @backstage/config-loader@1.10.0-next.0
|
||||
- @backstage/backend-defaults@0.8.2-next.2
|
||||
- @backstage/plugin-events-backend@0.4.4-next.2
|
||||
- @backstage/plugin-events-node@0.4.9-next.2
|
||||
- @backstage/backend-plugin-api@1.2.1-next.1
|
||||
- @backstage/cli-common@0.1.15
|
||||
- @backstage/cli-node@0.2.13
|
||||
- @backstage/config@1.3.2
|
||||
- @backstage/errors@1.2.7
|
||||
- @backstage/types@1.2.1
|
||||
- @backstage/plugin-app-node@0.1.31-next.2
|
||||
- @backstage/plugin-auth-node@0.6.1-next.1
|
||||
- @backstage/plugin-permission-common@0.8.4
|
||||
- @backstage/plugin-permission-node@0.8.9-next.1
|
||||
- @backstage/plugin-search-backend-node@1.3.9-next.1
|
||||
- @backstage/plugin-search-common@1.2.17
|
||||
|
||||
## 0.6.1-next.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/backend-dynamic-feature-service",
|
||||
"version": "0.6.1-next.1",
|
||||
"version": "0.6.1-next.2",
|
||||
"description": "Backstage dynamic feature service",
|
||||
"backstage": {
|
||||
"role": "node-library"
|
||||
|
||||
@@ -1,5 +1,43 @@
|
||||
# example-backend-legacy
|
||||
|
||||
## 0.2.108-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/plugin-scaffolder-backend-module-gitlab@0.8.1-next.2
|
||||
- @backstage/plugin-scaffolder-backend@1.31.0-next.2
|
||||
- @backstage/plugin-catalog-backend@1.32.0-next.2
|
||||
- @backstage/plugin-techdocs-backend@1.11.7-next.2
|
||||
- @backstage/backend-defaults@0.8.2-next.2
|
||||
- @backstage/integration@1.16.2-next.0
|
||||
- @backstage/plugin-events-backend@0.4.4-next.2
|
||||
- @backstage/plugin-events-node@0.4.9-next.2
|
||||
- @backstage/backend-plugin-api@1.2.1-next.1
|
||||
- @backstage/catalog-client@1.9.1
|
||||
- @backstage/catalog-model@1.7.3
|
||||
- @backstage/config@1.3.2
|
||||
- @backstage/plugin-auth-backend@0.24.4-next.2
|
||||
- @backstage/plugin-auth-node@0.6.1-next.1
|
||||
- @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.6-next.1
|
||||
- @backstage/plugin-catalog-backend-module-unprocessed@0.5.6-next.1
|
||||
- @backstage/plugin-catalog-node@1.16.1-next.1
|
||||
- @backstage/plugin-kubernetes-backend@0.19.4-next.1
|
||||
- @backstage/plugin-permission-backend@0.5.55-next.1
|
||||
- @backstage/plugin-permission-common@0.8.4
|
||||
- @backstage/plugin-permission-node@0.8.9-next.1
|
||||
- @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.3.7-next.2
|
||||
- @backstage/plugin-scaffolder-backend-module-rails@0.5.7-next.2
|
||||
- @backstage/plugin-search-backend@1.8.3-next.2
|
||||
- @backstage/plugin-search-backend-module-catalog@0.3.2-next.1
|
||||
- @backstage/plugin-search-backend-module-elasticsearch@1.6.6-next.1
|
||||
- @backstage/plugin-search-backend-module-explore@0.2.9-next.1
|
||||
- @backstage/plugin-search-backend-module-pg@0.5.42-next.1
|
||||
- @backstage/plugin-search-backend-module-techdocs@0.3.7-next.2
|
||||
- @backstage/plugin-search-backend-node@1.3.9-next.1
|
||||
- @backstage/plugin-signals-backend@0.3.2-next.2
|
||||
- @backstage/plugin-signals-node@0.1.18-next.2
|
||||
|
||||
## 0.2.108-next.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "example-backend-legacy",
|
||||
"version": "0.2.108-next.1",
|
||||
"version": "0.2.108-next.2",
|
||||
"backstage": {
|
||||
"role": "backend"
|
||||
},
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
import Router from 'express-promise-router';
|
||||
import {
|
||||
CacheManager,
|
||||
createLegacyAuthAdapters,
|
||||
createServiceBuilder,
|
||||
DatabaseManager,
|
||||
getRootLogger,
|
||||
@@ -37,7 +38,7 @@ import {
|
||||
import { Config } from '@backstage/config';
|
||||
import healthcheck from './plugins/healthcheck';
|
||||
import { metricsHandler, metricsInit } from './metrics';
|
||||
import auth from './plugins/auth';
|
||||
import authPlugin from './plugins/auth';
|
||||
import catalog from './plugins/catalog';
|
||||
import events from './plugins/events';
|
||||
import kubernetes from './plugins/kubernetes';
|
||||
@@ -59,10 +60,15 @@ function makeCreateEnv(config: Config) {
|
||||
const reader = UrlReaders.default({ logger: root, config });
|
||||
const discovery = HostDiscovery.fromConfig(config);
|
||||
const tokenManager = ServerTokenManager.fromConfig(config, { logger: root });
|
||||
const permissions = ServerPermissionClient.fromConfig(config, {
|
||||
const { auth } = createLegacyAuthAdapters({
|
||||
auth: undefined,
|
||||
discovery,
|
||||
tokenManager,
|
||||
});
|
||||
const permissions = ServerPermissionClient.fromConfig(config, {
|
||||
discovery,
|
||||
auth,
|
||||
});
|
||||
const databaseManager = DatabaseManager.fromConfig(config, { logger: root });
|
||||
const cacheManager = CacheManager.fromConfig(config);
|
||||
const identity = DefaultIdentityClient.create({
|
||||
@@ -137,7 +143,7 @@ async function main() {
|
||||
apiRouter.use('/catalog', await catalog(catalogEnv));
|
||||
apiRouter.use('/events', await events(eventsEnv));
|
||||
apiRouter.use('/scaffolder', await scaffolder(scaffolderEnv));
|
||||
apiRouter.use('/auth', await auth(authEnv));
|
||||
apiRouter.use('/auth', await authPlugin(authEnv));
|
||||
apiRouter.use('/search', await search(searchEnv));
|
||||
apiRouter.use('/techdocs', await techdocs(techdocsEnv));
|
||||
apiRouter.use('/kubernetes', await kubernetes(kubernetesEnv));
|
||||
|
||||
@@ -1,5 +1,20 @@
|
||||
# @backstage/backend-test-utils
|
||||
|
||||
## 1.3.1-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 37c6510: Moved `@types/jest` to `devDependencies`.
|
||||
- Updated dependencies
|
||||
- @backstage/backend-defaults@0.8.2-next.2
|
||||
- @backstage/plugin-events-node@0.4.9-next.2
|
||||
- @backstage/backend-app-api@1.2.1-next.2
|
||||
- @backstage/backend-plugin-api@1.2.1-next.1
|
||||
- @backstage/config@1.3.2
|
||||
- @backstage/errors@1.2.7
|
||||
- @backstage/types@1.2.1
|
||||
- @backstage/plugin-auth-node@0.6.1-next.1
|
||||
|
||||
## 1.3.1-next.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/backend-test-utils",
|
||||
"version": "1.3.1-next.1",
|
||||
"version": "1.3.1-next.2",
|
||||
"description": "Test helpers library for Backstage backends",
|
||||
"backstage": {
|
||||
"role": "node-library"
|
||||
|
||||
@@ -478,6 +478,7 @@ export class TestCaches {
|
||||
|
||||
// @public
|
||||
export type TestDatabaseId =
|
||||
| 'POSTGRES_17'
|
||||
| 'POSTGRES_16'
|
||||
| 'POSTGRES_15'
|
||||
| 'POSTGRES_14'
|
||||
|
||||
@@ -28,6 +28,7 @@ export interface Engine {
|
||||
* @public
|
||||
*/
|
||||
export type TestDatabaseId =
|
||||
| 'POSTGRES_17'
|
||||
| 'POSTGRES_16'
|
||||
| 'POSTGRES_15'
|
||||
| 'POSTGRES_14'
|
||||
@@ -47,6 +48,13 @@ export type TestDatabaseProperties = {
|
||||
|
||||
export const allDatabases: Record<TestDatabaseId, TestDatabaseProperties> =
|
||||
Object.freeze({
|
||||
POSTGRES_17: {
|
||||
name: 'Postgres 17.x',
|
||||
driver: 'pg',
|
||||
dockerImageName: getDockerImageForName('postgres:17'),
|
||||
connectionStringEnvironmentVariableName:
|
||||
'BACKSTAGE_TEST_DATABASE_POSTGRES17_CONNECTION_STRING',
|
||||
},
|
||||
POSTGRES_16: {
|
||||
name: 'Postgres 16.x',
|
||||
driver: 'pg',
|
||||
|
||||
@@ -1,5 +1,43 @@
|
||||
# example-backend
|
||||
|
||||
## 0.0.36-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/plugin-scaffolder-backend@1.31.0-next.2
|
||||
- @backstage/plugin-catalog-backend@1.32.0-next.2
|
||||
- @backstage/plugin-techdocs-backend@1.11.7-next.2
|
||||
- @backstage/plugin-scaffolder-backend-module-github@0.6.1-next.2
|
||||
- @backstage/backend-defaults@0.8.2-next.2
|
||||
- @backstage/plugin-events-backend@0.4.4-next.2
|
||||
- @backstage/backend-plugin-api@1.2.1-next.1
|
||||
- @backstage/catalog-model@1.7.3
|
||||
- @backstage/plugin-app-backend@0.5.0-next.2
|
||||
- @backstage/plugin-auth-backend@0.24.4-next.2
|
||||
- @backstage/plugin-auth-backend-module-github-provider@0.3.1-next.1
|
||||
- @backstage/plugin-auth-backend-module-guest-provider@0.2.6-next.1
|
||||
- @backstage/plugin-auth-node@0.6.1-next.1
|
||||
- @backstage/plugin-catalog-backend-module-backstage-openapi@0.5.0-next.1
|
||||
- @backstage/plugin-catalog-backend-module-openapi@0.2.8-next.2
|
||||
- @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.6-next.1
|
||||
- @backstage/plugin-catalog-backend-module-unprocessed@0.5.6-next.1
|
||||
- @backstage/plugin-devtools-backend@0.5.3-next.2
|
||||
- @backstage/plugin-kubernetes-backend@0.19.4-next.1
|
||||
- @backstage/plugin-notifications-backend@0.5.4-next.2
|
||||
- @backstage/plugin-permission-backend@0.5.55-next.1
|
||||
- @backstage/plugin-permission-backend-module-allow-all-policy@0.2.6-next.1
|
||||
- @backstage/plugin-permission-common@0.8.4
|
||||
- @backstage/plugin-permission-node@0.8.9-next.1
|
||||
- @backstage/plugin-proxy-backend@0.6.0-next.1
|
||||
- @backstage/plugin-scaffolder-backend-module-notifications@0.1.8-next.2
|
||||
- @backstage/plugin-search-backend@1.8.3-next.2
|
||||
- @backstage/plugin-search-backend-module-catalog@0.3.2-next.1
|
||||
- @backstage/plugin-search-backend-module-explore@0.2.9-next.1
|
||||
- @backstage/plugin-search-backend-module-techdocs@0.3.7-next.2
|
||||
- @backstage/plugin-search-backend-node@1.3.9-next.1
|
||||
- @backstage/plugin-signals-backend@0.3.2-next.2
|
||||
|
||||
## 0.0.36-next.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "example-backend",
|
||||
"version": "0.0.36-next.1",
|
||||
"version": "0.0.36-next.2",
|
||||
"backstage": {
|
||||
"role": "backend"
|
||||
},
|
||||
|
||||
@@ -2,4 +2,4 @@
|
||||
storybook-static
|
||||
|
||||
# CSS output
|
||||
css
|
||||
/css
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
import React from 'react';
|
||||
import type { Preview, ReactRenderer } from '@storybook/react';
|
||||
import { withThemeByDataAttribute } from '@storybook/addon-themes';
|
||||
|
||||
// Canon specific styles
|
||||
import '../src/css/core.css';
|
||||
import '../src/css/components.css';
|
||||
import '../src/css/styles.css';
|
||||
|
||||
const preview: Preview = {
|
||||
parameters: {
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user