Merge branch 'backstage:master' into fix-ldap-module-user-mapping

This commit is contained in:
John
2024-10-09 07:16:35 +11:00
committed by GitHub
764 changed files with 19436 additions and 3411 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/cli': patch
---
Preserve directory structure for CommonJS build output, just like ESM. This makes the build output more stable and easier to browse, and allows for more effective tree shaking and lazy imports.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/cli-node': patch
---
Added new `lockfile.getDependencyTreeHash(name)` utility.
+20
View File
@@ -0,0 +1,20 @@
---
'@backstage/plugin-scaffolder-backend-module-github': patch
---
Add `github:branch-protection:create` scaffolder action to set branch protection on an existing repository. Example usage:
```yaml
- id: set-branch-protection
name: Set Branch Protection
action: github:branch-protection:create
input:
repoUrl: 'github.com?repo=backstage&owner=backstage'
branch: master
enforceAdmins: true # default
requiredApprovingReviewCount: 1 # default
requireBranchesToBeUpToDate: true # default
requireCodeOwnerReviews: true
dismissStaleReviews: true
requiredConversationResolution: true
```
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/cli': minor
---
**BREAKING**: The Jest configuration defined at `@backstage/cli/config/jest` no longer collects configuration defined in the `"jest"` field from all parent `package.json` files. Instead, it will only read and merge configuration from the `package.json` in the monorepo root if it exists, as well as the target package. In addition, configuration defined in the root `package.json` will now only be merged into each package configuration if it is a valid project-level configuration key.
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/backend-app-api': patch
'@backstage/backend-defaults': patch
---
Plugin lifecycle shutdown hooks are now performed before root lifecycle shutdown hooks.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/backend-defaults': patch
---
The database manager now attempts to close any database connections in a root lifecycle shutdown hook.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/backend-defaults': patch
---
The task scheduler now attempts to abort any tasks if it detects that Backstage is being shut down.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/create-app': patch
---
Bumped create-app version.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/create-app': patch
---
Bumped create-app version.
+18
View File
@@ -0,0 +1,18 @@
---
'@backstage/plugin-auth-backend-module-cloudflare-access-provider': patch
'@backstage/plugin-auth-backend-module-vmware-cloud-provider': patch
'@backstage/plugin-auth-backend-module-atlassian-provider': patch
'@backstage/plugin-auth-backend-module-bitbucket-provider': patch
'@backstage/plugin-auth-backend-module-microsoft-provider': patch
'@backstage/plugin-auth-backend-module-onelogin-provider': patch
'@backstage/plugin-auth-backend-module-aws-alb-provider': patch
'@backstage/plugin-auth-backend-module-gcp-iap-provider': patch
'@backstage/plugin-auth-backend-module-github-provider': patch
'@backstage/plugin-auth-backend-module-gitlab-provider': patch
'@backstage/plugin-auth-backend-module-google-provider': patch
'@backstage/plugin-auth-backend-module-oauth2-provider': patch
'@backstage/plugin-auth-backend-module-oidc-provider': patch
'@backstage/plugin-auth-backend-module-okta-provider': patch
---
Updated configuration schema to include the new `allowedDomains` option for the `emailLocalPartMatchingUserEntityName` sign-in resolver.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder-backend': patch
---
handle step.if: false
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog-backend-module-gerrit': patch
---
Fixed an issue preventing the provider's `schedule` config from being applied."
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder-backend': patch
---
Include step name and step id to checkpoint key
+7
View File
@@ -0,0 +1,7 @@
---
'@backstage/backend-app-api': patch
'@backstage/backend-defaults': patch
'@backstage/backend-test-utils': patch
---
build(deps): bump `cookie` from 0.6.0 to 0.7.0
+49
View File
@@ -0,0 +1,49 @@
---
'@backstage/plugin-signals-react': patch
'@backstage/plugin-signals': patch
'@backstage/plugin-api-docs-module-protoc-gen-doc': patch
'@backstage/plugin-techdocs-module-addons-contrib': patch
'@backstage/plugin-catalog-unprocessed-entities': patch
'@backstage/plugin-scaffolder-node-test-utils': patch
'@backstage/plugin-techdocs-addons-test-utils': patch
'@backstage/frontend-plugin-api': patch
'@backstage/frontend-test-utils': patch
'@backstage/integration-react': patch
'@backstage/plugin-kubernetes-cluster': patch
'@backstage/frontend-app-api': patch
'@backstage/core-compat-api': patch
'@backstage/core-components': patch
'@backstage/core-plugin-api': patch
'@backstage/plugin-kubernetes-react': patch
'@backstage/plugin-permission-react': patch
'@backstage/plugin-scaffolder-react': patch
'@backstage/version-bridge': patch
'@backstage/plugin-app-visualizer': patch
'@backstage/plugin-catalog-import': patch
'@backstage/plugin-techdocs-react': patch
'@backstage/app-defaults': patch
'@backstage/core-app-api': patch
'@backstage/plugin-catalog-graph': patch
'@backstage/plugin-catalog-react': patch
'@backstage/plugin-config-schema': patch
'@backstage/plugin-notifications': patch
'@backstage/plugin-user-settings': patch
'@backstage/plugin-search-react': patch
'@backstage/test-utils': patch
'@backstage/dev-utils': patch
'@backstage/plugin-auth-react': patch
'@backstage/plugin-home-react': patch
'@backstage/plugin-kubernetes': patch
'@backstage/plugin-scaffolder': patch
'@backstage/plugin-org-react': patch
'@backstage/plugin-api-docs': patch
'@backstage/plugin-devtools': patch
'@backstage/plugin-techdocs': patch
'@backstage/plugin-catalog': patch
'@backstage/theme': patch
'@backstage/plugin-search': patch
'@backstage/plugin-home': patch
'@backstage/plugin-org': patch
---
Move `@types/react` to a peer dependency.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/eslint-plugin': patch
---
Exclude `@material-ui/data-grid`
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder': patch
---
Add tests for the `TemplateEditorToolbarTemplatesMenu` component.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-search-backend': patch
---
Fix to schema to allow arbitrary query parameters.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/eslint-plugin': patch
---
Internal refactor to deal with `estree` upgrade
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-auth-node': patch
---
Added a new `allowedDomains` option for the common `emailLocalPartMatchingUserEntityName` sign-in resolver.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder': patch
---
Add tests for the new pages header navigation.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-app-backend': patch
---
Fixed unexpected behaviour where configuration supplied with `APP_CONFIG_*` environment variables where not filtered by the configuration schema.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/cli': patch
---
Added support for a new experimental `EXPERIMENTAL_TRIM_NEXT_ENTRY` flag which removes any `./next` entry points present in packages when building and publishing.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/frontend-test-utils': patch
---
Added an `ApiMock`, analogous to `ServiceMock` from the backend test utils.
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/plugin-scaffolder-react': patch
'@backstage/plugin-scaffolder': patch
---
Add support for pagination in scaffolder tasks list
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog': minor
---
Adding negation keyword for entity filtering
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder-backend-module-bitbucket-server': patch
---
Add `reviewers` input parameter to `publish:bitbucketServer:pull-request`
+7
View File
@@ -0,0 +1,7 @@
---
'@backstage/plugin-catalog-react': minor
---
Add catalog service mocks under the `/testUtils` subpath export.
You can now use e.g. `const catalog = catalogApiMock.mock()` in your test and then do assertions on `catalog.getEntities` without awkward type casting.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-auth-backend-module-microsoft-provider': patch
---
Add `skipUserProfile` config flag to Microsoft authenticator
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder': patch
---
Change "Register Existing Component" CTA to outlined as it's not a primary action on the scaffolder pages
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder': minor
---
Text field content of the `EntityPicker` is now more readable as it uses entity title instead of entity reference.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog-node': patch
---
Documentation for the `testUtils` named export
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/cli': patch
---
Tweaked the new package feature detection to not be active when building backend packages.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/repo-tools': minor
---
Adds a new command `backstage-repo-tools peer-deps` for validating your usage of peer dependencies in your plugins. It currently supports react related peer dependencies. It also has a `--fix` mode for quickly fixing any issues that it finds.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-home': minor
---
**BREAKING** Implement usage of unused `limit` query parameter in visits API `.list()` function
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder': patch
---
Add translation to the editor toolbar component.
+80 -1
View File
@@ -195,41 +195,120 @@
"@internal/scaffolder": "0.0.1"
},
"changesets": [
"angry-cycles-call",
"angry-mayflies-collect",
"angry-windows-decide",
"big-rules-nail",
"breezy-bulldogs-smell",
"brown-frogs-walk",
"calm-owls-move",
"chair-fairs-drive",
"chilled-dolphins-join",
"chilled-melons-smash",
"clever-paws-stare",
"cold-nails-rescue",
"crash-loop-baby",
"crash-loop-honey",
"crash-loop-yeah",
"create-app-1727774359",
"create-app-1728387650",
"cuddly-stingrays-smell",
"curly-foxes-brake",
"curly-tomatoes-reply",
"cyan-cooks-sing",
"cyan-peaches-lay",
"cyan-vans-study",
"dependabot-a3fd85a",
"dry-frogs-drum",
"early-drinks-kneel",
"early-sloths-cross",
"eight-clocks-complain",
"eight-steaks-chew",
"eighty-mice-turn",
"eleven-beds-play",
"eleven-pugs-hear",
"fair-chairs-drive",
"famous-bobcats-remain",
"fifty-trainers-watch",
"five-gorillas-pay",
"five-turkeys-taste",
"flat-eels-exist",
"flat-seals-type",
"fluffy-dolphins-battle",
"fluffy-pears-cry",
"four-moons-watch",
"friendly-coins-approve",
"friendly-cougars-return",
"funny-rocks-train",
"fuzzy-elephants-tease",
"giant-kiwis-retire",
"gold-pots-end",
"great-eagles-repair",
"green-bottles-live",
"green-cooks-sort",
"happy-ligers-think",
"healthy-shoes-judge",
"healthy-years-search",
"heavy-ties-tell",
"honest-impalas-rescue",
"hungry-buckets-repair",
"large-hats-reply",
"large-plants-rhyme",
"light-rats-travel",
"long-humans-hunt",
"loud-hotels-tan",
"lovely-bees-walk",
"nasty-lamps-greet",
"neat-geckos-end",
"nice-badgers-travel",
"olive-walls-wave",
"polite-days-flash",
"poor-dodos-wait",
"pretty-buses-repair",
"pretty-plants-hammer",
"purple-toys-heal",
"quiet-dingos-bathe",
"quiet-needles-impress",
"rare-crabs-cheat",
"rare-rabbits-flow",
"renovate-156753b",
"renovate-7874fad",
"renovate-85a184e",
"renovate-87a3bd2",
"renovate-9f7136b",
"renovate-f88b005",
"rich-deers-attend",
"rich-needles-collect",
"rotten-camels-deny",
"rude-apricots-eat",
"sharp-lamps-fix",
"shy-olives-swim",
"shy-plants-retire",
"silly-geckos-learn",
"silly-readers-build",
"slimy-ravens-end",
"slow-gorillas-thank",
"slow-trees-compare",
"small-donkeys-attack",
"smart-jobs-sit",
"sour-grapes-trade",
"sour-phones-fix",
"stale-ravens-clap",
"stale-roses-serve",
"strange-bees-attack",
"strong-monkeys-melt",
"sweet-chicken-smash",
"ten-apes-turn",
"ten-rings-look",
"thick-tables-give",
"thirty-pets-fry",
"tiny-pugs-kick"
"thirty-pianos-mix",
"tiny-pugs-kick",
"tough-fireants-itch",
"tough-pillows-sip",
"tricky-shoes-lie",
"twenty-cups-knock",
"two-plums-fail",
"weak-bottles-cross"
]
}
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder': patch
---
Standardize template editor pages desktop and mobile layouts.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-auth-backend-module-vmware-cloud-provider': minor
---
**BREAKING**: The `profileEmailMatchingUserEntityEmail` sign-in resolver has been removed as it was using an insecure fallback for resolving user identities. See https://backstage.io/docs/auth/identity-resolver#sign-in-without-users-in-the-catalog for how to create a custom sign-in resolver if needed as a replacement.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder-backend-module-gitlab': minor
---
declare correct type (number) for publish:gitlab output.projectId
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-techdocs': patch
---
Add support for mkdocs material palette conditional hashes.
+29
View File
@@ -0,0 +1,29 @@
---
'@backstage/plugin-catalog-backend-module-bitbucket-cloud': minor
---
Fixes the event-based updates at `BitbucketCloudEntityProvider`.
Previously, this entity provider had optional event support for legacy backends
that could be enabled by passing `catalogApi`, `events`, and `tokenManager`.
For the new/current backend system, the `catalogModuleBitbucketCloudEntityProvider`
(`catalog.bitbucket-cloud-entity-provider`), event support was enabled by default.
A recent change removed `tokenManager` as a dependency from the module as well as removed it as input.
While this didn't break the instantiation of the module, it broke the event-based updates,
and led to a runtime misbehavior, accompanied by an info log message.
This change will replace the use of `tokenManager` with the use of `auth` (`AuthService`).
Additionally, to simplify, it will make `catalogApi` and `events` required dependencies.
For the current backend system, this change is transparent and doesn't require any action.
For the legacy backend system, this change will require you to pass those dependencies
if you didn't do it already.
BREAKING CHANGES:
_(For legacy backend users only.)_
Previously optional `catalogApi`, and `events` are required now.
A new required dependency `auth` was added.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-techdocs-node': patch
---
Updated dependency `@smithy/node-http-handler` to `^3.0.0`.
+15
View File
@@ -0,0 +1,15 @@
---
'@backstage/backend-defaults': patch
'@backstage/cli': patch
'@backstage/integration': patch
'@backstage/plugin-catalog-backend-module-github': patch
'@backstage/plugin-catalog-backend': patch
'@backstage/plugin-catalog-import': patch
'@backstage/plugin-scaffolder-backend-module-confluence-to-markdown': patch
'@backstage/plugin-scaffolder': patch
'@backstage/plugin-techdocs-module-addons-contrib': patch
'@backstage/plugin-techdocs-node': patch
'@backstage/plugin-techdocs': patch
---
Updated dependency `git-url-parse` to `^15.0.0`.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder-backend-module-azure': patch
---
Updated dependency `azure-devops-node-api` to `^14.0.0`.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-search-backend-module-explore': patch
---
Updated dependency `@backstage-community/plugin-explore-common` to `^0.0.6`.
+7
View File
@@ -0,0 +1,7 @@
---
'@backstage/plugin-kubernetes-cluster': patch
'@backstage/plugin-kubernetes-react': patch
'@backstage/plugin-kubernetes': patch
---
Updated dependency `@kubernetes-models/apimachinery` to `^2.0.0`.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/cli': patch
---
Support `--max-warnings` flag for package linting
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/backend-defaults': patch
'@backstage/integration': patch
---
Updating error message for getProjectId when fetching Gitlab project from its url to be more accurate
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder': patch
---
Add tests for the `useTemplateDirectory` hook.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-search': patch
---
Updated the default SearchType.Accordion behavior to remain open after result type selection. This is a UX improvement to reduce the number of clicks needed when toggling result type filters.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-user-settings': patch
---
`useUserProfile` will now use the user's picture stored in the catalog as a fallback if the identity provider doesn't return a picture.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder': patch
---
Add an actions filter on the list actions page and drawer.
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/plugin-techdocs': minor
'@backstage/theme': minor
---
Adds support for custom background colors in code blocks and inline code within TechDocs.
+7
View File
@@ -0,0 +1,7 @@
---
'@backstage/cli': patch
---
Added a new `--successCache` option to the `backstage-cli repo test` and `backstage-cli repo lint` commands. The cache keeps track of successful runs and avoids re-running for individual packages if they haven't changed. This option is intended only to be used in CI.
In addition a `--successCacheDir <path>` option has also been added to be able to override the default cache directory.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/backend-openapi-utils': minor
---
Improved support for OpenAPI validation during Jest tests. Now, OpenAPI validation can happen as you are writing your Jest tests - you no longer have to run `repo schema openapi test`.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/cli': patch
---
The Jest configuration will now search for a `src/setupTests.*` file with any valid script extension, not only `.ts`.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog-backend': patch
---
Update catalog search table in transaction
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/cli': patch
---
Disabled parsing of input source maps in the SWC transform for Jest.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/catalog-client': patch
---
Add missing doc string to API
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder-node': patch
---
Use `branch` function instead of `checkout` function when creating branch
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/plugin-techdocs-module-addons-contrib': patch
'@backstage/plugin-techdocs': patch
---
Use more of the available space for the navigation sidebar.
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/plugin-techdocs-backend': patch
'@backstage/plugin-techdocs-node': patch
---
Allow to pass StorageOptions to GCS Publisher
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/integration': patch
---
Updated functions parseHarnessUrl, getHarnessLatestCommitUrl, getHarnessFileContentsUrl and getHarnessArchiveUrl to fix parsing of urls
+10
View File
@@ -0,0 +1,10 @@
---
'@backstage/plugin-catalog-graph': patch
---
Added InfoCard `action` attribute for CatalogGraphCard
```tsx
const action = <Button title="Action Button" onClick={handleClickEvent()} />
<CatalogGraphCard action={action} />
```
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder': patch
---
Add tests for the `TemplateEditorToolbarFilesMenu` component.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder-backend-module-bitbucket-server': patch
---
Use protocol from Bitbucket Server apiBaseUrl config parameter instead of hard-coded https
+20 -2
View File
@@ -90,6 +90,9 @@ jobs:
- name: verify local dependency ranges
run: node scripts/verify-local-dependencies.js
- name: verify peer dependency ranges
run: yarn lint:peer-deps
- name: check for missing repo fixes
run: yarn fix --check
@@ -230,11 +233,18 @@ jobs:
- name: verify release
run: node scripts/verify-release.js
# Use the lower-level cache actions for the success cache, so that we can store the cache even on failed builds
- name: restore backstage-cli cache
uses: actions/cache/restore@v4
with:
path: .cache/backstage-cli
key: ${{ runner.os }}-v${{ matrix.node-version }}-backstage-cli
- name: lint changed packages
run: yarn backstage-cli repo lint --since origin/master
run: yarn backstage-cli repo lint --since origin/master --successCache --successCacheDir .cache/backstage-cli
- name: test changed packages
run: yarn backstage-cli repo test --maxWorkers=3 --workerIdleMemoryLimit=1300M --since origin/master
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] }}
@@ -242,6 +252,14 @@ jobs:
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] }}
# Always save success cache even if there were failures, that way it can be used in re-triggered builds
- name: save backstage-cli cache
uses: actions/cache/save@v4
if: always()
with:
path: .cache/backstage-cli
key: ${{ runner.os }}-v${{ matrix.node-version }}-backstage-cli
# We run the test cases before verifying the specs to prevent any failing tests from causing errors.
- name: verify openapi specs against test cases
run: yarn backstage-repo-tools repo schema openapi test
+1 -1
View File
@@ -225,7 +225,7 @@ jobs:
run: ls microsite/build && ls microsite/build/storybook
- name: Deploy both microsite and storybook to gh-pages
uses: JamesIves/github-pages-deploy-action@920cbb300dcd3f0568dbc42700c61e2fd9e6139c # v4.6.4
uses: JamesIves/github-pages-deploy-action@881db5376404c5c8d621010bcbec0310b58d5e29 # v4.6.8
with:
branch: gh-pages
folder: microsite/build
+7 -1
View File
@@ -93,8 +93,14 @@ jobs:
- name: validate config
run: yarn backstage-cli config:check --lax
- name: backstage-cli cache
uses: actions/cache@v4
with:
path: .cache/backstage-cli
key: ${{ runner.os }}-v${{ matrix.node-version }}-backstage-cli
- name: lint
run: yarn backstage-cli repo lint
run: yarn backstage-cli repo lint --successCache --successCacheDir .cache/backstage-cli
- name: type checking and declarations
run: yarn tsc:full
+1 -1
View File
@@ -51,7 +51,7 @@ jobs:
- run: yarn build-storybook
- uses: chromaui/action@f4e60a7072abcac4203f4ca50613f28e199a52ba # v11
- uses: chromaui/action@30b6228aa809059d46219e0f556752e8672a7e26 # v11
with:
token: ${{ secrets.GITHUB_TOKEN }}
# projectToken intentionally shared to allow collaborators to run Chromatic on forks
+2 -2
View File
@@ -46,7 +46,7 @@ jobs:
run: yarn install --immutable
- name: lint
run: yarn backstage-cli repo lint
run: yarn backstage-cli repo lint --successCache
- name: type checking and declarations
run: yarn tsc:full
@@ -55,7 +55,7 @@ jobs:
run: yarn lint:type-deps
- name: test
run: yarn backstage-cli repo test --maxWorkers=3 --workerIdleMemoryLimit=1300M
run: yarn backstage-cli repo test --maxWorkers=3 --workerIdleMemoryLimit=1300M --successCache
env:
BACKSTAGE_TEST_DISABLE_DOCKER: 1
+9 -8
View File
@@ -185,11 +185,11 @@ Scope: The Backstage Documentation
## Sponsors
| Name | Organization | GitHub | Email |
| ----------------- | ------------ | ------------------------------------------- | ------------------ |
| Niklas Gustavsson | Spotify | [protocol7](https://github.com/protocol7) | ngn@spotify.com |
| Dave Zolotusky | Spotify | [dzolotusky](https://github.com/dzolotusky) | dzolo@spotify.com |
| Helen Greul | Spotify | [helengreul](https://github.com/helengreul) | heleng@spotify.com |
| Name | Organization | GitHub | Email |
| ----------------- | ------------ | ------------------------------------------- | ----------------- |
| Niklas Gustavsson | Spotify | [protocol7](https://github.com/protocol7) | ngn@spotify.com |
| Dave Zolotusky | Spotify | [dzolotusky](https://github.com/dzolotusky) | dzolo@spotify.com |
| Pia Nilsson | Spotify | [pianilsson](https://github.com/pianilsson) | pia@spotify.com |
## Organization Members
@@ -224,9 +224,10 @@ Scope: The Backstage Documentation
## Emeritus End User Sponsors
| Name | Organization | GitHub | Discord |
| --------- | ------------ | ------------------------------------------- | -------------- |
| Lee Mills | Spotify | [leemills83](https://github.com/leemills83) | `.binarypoint` |
| Name | Organization | GitHub | Discord |
| ----------- | ------------ | ------------------------------------------- | -------------- |
| Lee Mills | Spotify | [leemills83](https://github.com/leemills83) | `.binarypoint` |
| Helen Greul | Spotify | [helengreul](https://github.com/helengreul) | `helen_greul` |
## Emeritus Project Area Maintainers
+1 -1
View File
@@ -58,6 +58,6 @@ If your Backstage plugin lives outside of the [Backstage main repository](https:
### Report identified issues
Its important to remember that automated checks can only catch a small number of accessibility issues, therefore we also encourage you to conduct manual testing of your plugins using Assistive technology (screen readers, alternative navigation, and screen magnifiers are a few examples).
Its important to remember that automated checks can only catch a small number of accessibility issues, therefore, we also encourage you to conduct manual testing of your plugins using Assistive technology (screen readers, alternative navigation, and screen magnifiers are a few examples).
If you have identified accessibility issues and dont have time to contribute a fix, please open an issue over at [Backstage Issues](https://github.com/backstage/backstage/issues) to let us know.
+4 -4
View File
@@ -26,7 +26,7 @@ opens up for other type of themes, and removes the hardcoded usage of
To migrate an existing theme, remove the `theme` property and move it over to a
new `Provider` component, using `ThemeProvider` from Material UI to provide the new
theme, along with `<CssBaseline>`. For example a theme that currently looks like
theme, along with `<CssBaseline>`. For example, a theme that currently looks like
this:
```tsx
@@ -84,8 +84,8 @@ migrate to your own custom API.
First, you'll need to define a new Utility API reference. If you're only using
the API for sign-in, you can put the definition in `packages/app/src/apis.ts`.
However, if you need to access your auth API inside plugins you you'll need to
export it from a common package. If you don't already have one we recommended
creating `@internal/apis` and from there export the API reference.
export it from a common package. If you don't already have one, we recommend
creating `@internal/apis` and from there exporting the API reference.
```ts
// `ProfileInfoApi & BackstageIdentityApi & SessionApi` are required for sign-in
@@ -101,7 +101,7 @@ export const acmeAuthApiRef: ApiRef<
});
```
Next you'll want to wire up the API inside `packages/app/src/apis.ts`, which
Next, you'll want to wire up the API inside `packages/app/src/apis.ts`, which
varies depending on which API you're replacing. If you for example are replacing
the `oauth2ApiRef`, the factory might look like this:
+2 -2
View File
@@ -166,10 +166,10 @@ the final say in what APIs will be loaded at runtime? The app may override the
factories for any of the core or plugin APIs, with the exception of the config,
app theme, and identity APIs. These are static APIs that are tied into the
[`createApp`](../reference/app-defaults.createapp.md) implementation and
therefore not possible to override.
therefore, not possible to override.
Overriding APIs is useful for apps that want to switch out behavior to tailor it
to their environment. In some cases plugins, may also export multiple
to their environment. In some cases, plugins may also export multiple
implementations of the same API, where they each have their own different
requirements, for example, backend storage and the surrounding environment.
+1 -3
View File
@@ -49,9 +49,7 @@ auth:
scope: ${AUTH_ATLASSIAN_SCOPES}
signIn:
resolvers:
# typically you would pick one of these
- resolver: emailMatchingUserEntityProfileEmail
- resolver: emailLocalPartMatchingUserEntityName
# See https://backstage.io/docs/auth/atlassian/provider#resolvers for more resolvers
- resolver: usernameMatchingUserEntityName
```
+1 -2
View File
@@ -25,9 +25,8 @@ auth:
region: 'us-west-2'
signIn:
resolvers:
# typically you would pick one of these
# See https://backstage.io/docs/auth/aws-alb/provider#resolvers for more resolvers
- resolver: emailMatchingUserEntityProfileEmail
- resolver: emailLocalPartMatchingUserEntityName
```
Ensure that you have set the signer correctly. It is also recommended that you restrict your target groups' security policy to only accept connections from that ALB.
+1 -4
View File
@@ -39,11 +39,8 @@ auth:
clientSecret: ${AUTH_BITBUCKET_CLIENT_SECRET}
signIn:
resolvers:
# typically you would pick one of these
- resolver: emailMatchingUserEntityProfileEmail
- resolver: emailLocalPartMatchingUserEntityName
# See https://backstage.io/docs/auth/bitbucket/provider#resolvers for more resolvers
- resolver: userIdMatchingUserEntityAnnotation
- resolver: usernameMatchingUserEntityAnnotation
```
The Bitbucket provider is a structure with two configuration keys:
+1 -1
View File
@@ -41,8 +41,8 @@ auth:
# This picks what sign in resolver(s) you want to use.
signIn:
resolvers:
# See https://backstage.io/docs/auth/cloudflare/provider#resolvers for more resolvers
- resolver: emailMatchingUserEntityProfileEmail
- resolver: emailLocalPartMatchingUserEntityName
```
This config section must be in place for the provider to load at all.
+1 -2
View File
@@ -51,8 +51,7 @@ auth:
# enterpriseInstanceUrl: ${AUTH_GITHUB_ENTERPRISE_INSTANCE_URL}
signIn:
resolvers:
# Matches the GitHub username with the Backstage user entity name.
# See https://backstage.io/docs/auth/github/provider#resolvers for more resolvers.
# See https://backstage.io/docs/auth/github/provider#resolvers for more resolvers
- resolver: usernameMatchingUserEntityName
```
+1 -3
View File
@@ -46,9 +46,7 @@ auth:
# callbackUrl: https://${BASE_URL}/api/auth/gitlab/handler/frame
signIn:
resolvers:
# typically you would pick one of these
- resolver: emailMatchingUserEntityProfileEmail
- resolver: emailLocalPartMatchingUserEntityName
# See https://backstage.io/docs/auth/gitlab/provider#resolvers for more resolvers
- resolver: usernameMatchingUserEntityName
```
+1 -3
View File
@@ -29,9 +29,7 @@ auth:
jwtHeader: x-custom-header # Optional: Only if you are using a custom header for the IAP JWT
signIn:
resolvers:
# typically you would pick one of these
- resolver: emailMatchingUserEntityProfileEmail
- resolver: emailLocalPartMatchingUserEntityName
# See https://backstage.io/docs/auth/google/gcp-iap-auth#resolvers for more resolvers
- resolver: emailMatchingUserEntityAnnotation
```
+1 -3
View File
@@ -44,9 +44,7 @@ auth:
clientSecret: ${AUTH_GOOGLE_CLIENT_SECRET}
signIn:
resolvers:
# typically you would pick one of these
- resolver: emailMatchingUserEntityProfileEmail
- resolver: emailLocalPartMatchingUserEntityName
# See https://backstage.io/docs/auth/google/provider#resolvers for more resolvers
- resolver: emailMatchingUserEntityAnnotation
```
+40 -9
View File
@@ -70,6 +70,14 @@ always be full entity references, as opposed to shorthands like just `jane` or
## Sign-in Resolvers
:::warning
Be careful when configuring Sign-in resolvers, as they are part of determining who
has access to your Backstage instance, and with what identity. Always only configure
**a single sign-in resolver for one of your auth providers**. The only reason to have
more sign-in resolvers is if you want to allow your users to sign in to Backstage in
multiple ways, but it increases the risk of account hijacking.
:::
Signing in a user into Backstage requires a mapping of the user identity from the
third-party auth provider to a Backstage user identity. This mapping can vary quite
a lot between different organizations and auth providers, and because of that there's
@@ -112,19 +120,38 @@ auth:
signIn:
resolvers:
- resolver: usernameMatchingUserEntityName
- resolver: emailMatchingUserEntityProfileEmail
- resolver: emailLocalPartMatchingUserEntityName
```
Note that in this instance it lists several resolvers, which means that the
framework will try them one by one until one succeeds. If none of them do, the
sign in attempt is rejected.
The list of available resolvers is different for each provider, since they often
depend on the information model returned from the upstream provider service.
Consult the documentation of the respective provider to find the list.
In the example above `emailMatchingUserEntityProfileEmail` and `emailLocalPartMatchingUserEntityName` are common to all auth providers and `usernameMatchingUserEntityName` is specific to GitHub.
In the example above, the `usernameMatchingUserEntityName` is specific to the
GitHub provider, but you could also choose to use the
`emailMatchingUserEntityProfileEmail` or `emailLocalPartMatchingUserEntityName`
resolvers, which are common to all auth providers.
:::warning
When using the `emailLocalPartMatchingUserEntityName` resolver it is strongly
recommended to set the `allowedDomains` option to ensure that only authorized users
are able to sign-in.
:::
If you are using the `emailLocalPartMatchingUserEntityName` resolver, it is
recommended to also set the `allowedDomains` option, for example:
```yaml title="Within the provider configuration"
auth:
providers:
github:
development:
...
signIn:
resolvers:
- resolver: emailLocalPartMatchingUserEntityName
allowedDomains:
- acme.org
```
### Building Custom Resolvers
@@ -160,8 +187,6 @@ auth:
signIn:
resolvers:
- resolver: usernameMatchingUserEntityName
- resolver: emailMatchingUserEntityProfileEmail
- resolver: emailLocalPartMatchingUserEntityName
/* highlight-remove-end */
```
@@ -318,6 +343,12 @@ async signInResolver({ profile: { email} }, ctx) {
### Sign-In without Users in the Catalog
:::warning
Signing in users without verifying that they exist in the catalog can be
dangerous. Take care to ensure that your custom resolvers only allow expected
users to sign in, for example by checking email domains.
:::
While populating the catalog with organizational data unlocks more powerful ways
to browse your software ecosystem, it might not always be a viable or prioritized
option. However, even if you do not have user entities populated in your catalog, you
+1 -3
View File
@@ -66,9 +66,7 @@ auth:
azureEasyAuth:
signIn:
resolvers:
# typically you would pick one of these
- resolver: emailMatchingUserEntityProfileEmail
- resolver: emailLocalPartMatchingUserEntityName
# See https://backstage.io/docs/auth/microsoft/easy-auth#resolvers for more resolvers
- resolver: idMatchingUserEntityAnnotation
```
+2 -4
View File
@@ -69,10 +69,7 @@ auth:
domainHint: ${AZURE_TENANT_ID}
signIn:
resolvers:
# typically you would pick one of these
- resolver: emailMatchingUserEntityProfileEmail
- resolver: emailLocalPartMatchingUserEntityName
- resolver: emailMatchingUserEntityAnnotation
# See https://backstage.io/docs/auth/microsoft/provider#resolvers for more resolvers
- resolver: userIdMatchingUserEntityAnnotation
```
@@ -86,6 +83,7 @@ The Microsoft provider is a structure with three mandatory configuration keys:
When specified, this reduces login friction for users with accounts in multiple tenants by automatically filtering away accounts from other tenants.
For more details, see [Home Realm Discovery](https://learn.microsoft.com/en-us/azure/active-directory/manage-apps/home-realm-discovery-policy)
- `additionalScopes` (optional): List of scopes for the App Registration, to be requested in addition to the required ones.
- `skipUserProfile` (optional): If true, skips loading the user profile even if the `User.Read` scope is present. This is a performance optimization during login and can be used with resolvers that only needs the email address in `spec.profile.email` obtained when the `email` OAuth2 scope is present.
### Resolvers
+1 -3
View File
@@ -31,9 +31,7 @@ auth:
oauth2Proxy:
signIn:
resolvers:
# typically you would pick one of these
- resolver: emailMatchingUserEntityProfileEmail
- resolver: emailLocalPartMatchingUserEntityName
# See https://backstage.io/docs/auth/oauth2-proxy/provider#resolvers for more resolvers
- resolver: forwardedUserMatchingUserEntityName
```
-2
View File
@@ -156,8 +156,6 @@ auth:
# ...
signIn:
resolvers:
# typically you would pick one of these
- resolver: emailLocalPartMatchingUserEntityName
- resolver: emailMatchingUserEntityProfileEmail
```
+1 -3
View File
@@ -49,9 +49,7 @@ auth:
additionalScopes: ${AUTH_OKTA_ADDITIONAL_SCOPES} # Optional
signIn:
resolvers:
# typically you would pick one of these
- resolver: emailMatchingUserEntityProfileEmail
- resolver: emailLocalPartMatchingUserEntityName
# See https://backstage.io/docs/auth/okta/provider#resolvers for more resolvers
- resolver: emailMatchingUserEntityAnnotation
```
+1 -3
View File
@@ -40,9 +40,7 @@ auth:
issuer: https://<company>.onelogin.com/oidc/2
signIn:
resolvers:
# typically you would pick one of these
- resolver: emailMatchingUserEntityProfileEmail
- resolver: emailLocalPartMatchingUserEntityName
# See https://backstage.io/docs/auth/onelogin/provider#resolvers for more resolvers
- resolver: usernameMatchingUserEntityName
```
+1 -4
View File
@@ -49,10 +49,8 @@ auth:
organizationId: ${ORG_ID}
signIn:
resolvers:
# typically you would pick one of these
# See https://backstage.io/docs/auth/vmware-cloud/provider#resolvers for more resolvers
- resolver: emailMatchingUserEntityProfileEmail
- resolver: emailLocalPartMatchingUserEntityName
- resolver: vmwareCloudSignInResolvers
```
Where `APP_ID` refers to the ID retrieved when creating the OAuth App, and
@@ -76,7 +74,6 @@ This provider includes several resolvers out of the box that you can use:
- `emailMatchingUserEntityProfileEmail`: Matches the email address from the auth provider with the User entity that has a matching `spec.profile.email`. If no match is found it will throw a `NotFoundError`.
- `emailLocalPartMatchingUserEntityName`: Matches the [local part](https://en.wikipedia.org/wiki/Email_address#Local-part) of the email address from the auth provider with the User entity that has a matching `name`. If no match is found it will throw a `NotFoundError`.
- `vmwareCloudSignInResolvers`: Matches the email address from the auth provider with the User entity that has a matching `spec.profile.email`. If no match is found it will sign in the user without associating with a catalog user.
:::note Note
@@ -884,8 +884,6 @@ auth:
signIn:
resolvers:
- resolver: emailMatchingUserEntityProfileEmail
- resolver: emailLocalPartMatchingUserEntityName
- resolver: emailMatchingUserEntityAnnotation
```
:::note Note
@@ -44,7 +44,7 @@ There's additional configuration that you can optionally pass to setup the `conf
You can configure these additional options by adding an override for the core service when calling `createBackend` like follows:
```ts
import { rootConfigServiceFactory } from '@backstage/backend-app-api';
import { rootConfigServiceFactory } from '@backstage/backend-defaults/rootConfig';
const backend = createBackend();
+43 -10
View File
@@ -143,21 +143,54 @@ how highlighted terms look you can follow Backstage's guide on how to
[Customize the look-and-feel of your App](https://backstage.io/docs/getting-started/app-custom-theme)
to create an override with your preferred styling.
For example, the following will result in highlighted terms to be bold & underlined:
For example, using the new MUI V4+V5 unified theming method, the following will result
in highlighted words to be bold & underlined:
```tsx
const highlightOverride = {
BackstageHighlightedSearchResultText: {
highlight: {
color: 'inherit',
backgroundColor: 'inherit',
fontWeight: 'bold',
textDecoration: 'underline',
```typescript jsx title=packages/app/src/theme/theme.ts
import {
createBaseThemeOptions,
createUnifiedTheme,
palettes,
UnifiedTheme,
} from '@backstage/theme';
export const myLightTheme: UnifiedTheme = createUnifiedTheme({
...createBaseThemeOptions({
palette: palettes.light,
}),
defaultPageTheme: 'home',
components: {
/** @ts-ignore This is temporarily necessary until MUI V5 transition is completed. */
BackstageHighlightedSearchResultText: {
styleOverrides: {
highlight: {
color: 'inherit',
backgroundColor: 'inherit',
fontWeight: 'bold',
textDecoration: 'underline',
},
},
},
},
};
});
```
```typescript jsx title= packages/app/src/App.tsx
const app : BackstageApp = createApp({
...
themes: [{
id: 'my-light-theme',
title: 'Light Theme',
variant: 'light',
icon: <LightIcon />,
Provider: ({ children }) => (<UnifiedThemeProvider theme={myLightTheme} children={children } />)
}]
});
```
Obviously if you wanted a dark theme, you would need to provide that as well.
## How to render search results using extensions
Extensions for search results let you customize components used to render search result items, It is possible to provide your own search result item extensions or use the ones provided by plugin packages.
@@ -120,6 +120,36 @@ techdocs:
Your Backstage app is now ready to use Google Cloud Storage for TechDocs, to
store and read the static generated documentation files.
### Extending default Storage configuration
If you need a non-standard configuration of Google Cloud Storage client,
`TechdocsPublisherExtensionPoint` is something you should look at.
You can register custom `StorageOptions` that will be used to configure the client. To do so, you
need to register publisher settings inside your module init, like in the following example:
```typescript
export const gcsPublisherCustomizer = createBackendModule({
pluginId: 'techdocs',
moduleId: 'gcs-publisher-customizer',
register(reg) {
reg.registerInit({
deps: {
techdocsExtensionPoint: techdocsPublisherExtensionPoint,
},
async init({ techdocsExtensionPoint }) {
const customOptions: StorageOptions = {
userAgent: 'my-custom-user-agent',
};
techdocsExtensionPoint.registerPublisherSettings(
'googleGcs',
customOptions,
);
},
});
},
});
```
## Configuring AWS S3 Bucket with TechDocs
**1. Set `techdocs.publisher.type` config in your `app-config.yaml`**
+1 -30
View File
@@ -51,33 +51,6 @@ Further documentation:
### Installation with Legacy Backend System
#### Installation without Events Support
And then add the entity provider to your catalog builder:
```ts title="packages/backend/src/plugins/catalog.ts"
/* highlight-add-next-line */
import { BitbucketCloudEntityProvider } from '@backstage/plugin-catalog-backend-module-bitbucket-cloud';
export default async function createPlugin(
env: PluginEnvironment,
): Promise<Router> {
const builder = await CatalogBuilder.create(env);
/* highlight-add-start */
builder.addEntityProvider(
BitbucketCloudEntityProvider.fromConfig(env.config, {
logger: env.logger,
scheduler: env.scheduler,
}),
);
/* highlight-add-end */
// ..
}
```
#### Installation with Events Support
Please follow the installation instructions at
- <https://github.com/backstage/backstage/tree/master/plugins/events-backend/README.md>
@@ -104,19 +77,17 @@ export default async function createPlugin(
env: PluginEnvironment,
): Promise<Router> {
const builder = await CatalogBuilder.create(env);
builder.addProcessor(new ScaffolderEntitiesProcessor());
/* highlight-add-start */
const bitbucketCloudProvider = BitbucketCloudEntityProvider.fromConfig(
env.config,
{
auth: env.auth,
catalogApi: new CatalogClient({ discoveryApi: env.discovery }),
events: env.events,
logger: env.logger,
scheduler: env.scheduler,
tokenManager: env.tokenManager,
},
);
env.eventBroker.subscribe(bitbucketCloudProvider);
builder.addEntityProvider(bitbucketCloudProvider);
/* highlight-add-end */
const { processingEngine, router } = await builder.build();
+2 -2
View File
@@ -53,11 +53,11 @@ Note that the `UrlReaderService` system operates with a service context and is n
Backstage provides authentication of users through the `auth` plugin, which primarily acts as an authorization server for different OAuth 2.0 provider integrations. These integrations can both serve the purpose of signing users into Backstage, as well as providing delegated access to external resources, and are all subject to the common concerns of implementing secure OAuth 2.0 authorization servers. All auth provider integrations are disabled by default, and need to be enabled through configuration in order to be used. For each Backstage installation it is recommended to only enable the minimal set of providers that are in use by that instance.
In order to use an auth provider to sign in users into Backstage, it needs to be configured with an [Identity resolver](https://backstage.io/docs/auth/identity-resolver), which is a custom callback implemented in code. The identity resolver is a sensitive part of configuring Backstage and it is important that it always resolves user identities correctly, based on information provided by the authentication provider. There are a number of built-in identity resolvers that can simplify configuration, and it is important that these all resolve users in a secure way, regardless of how they are used.
In order to use an auth provider to sign in users into Backstage, it needs to be configured with a [sign-in resolver](https://backstage.io/docs/auth/identity-resolver). The sign-in resolver is a sensitive part of configuring Backstage and it is important that it always resolves user identities correctly, and rejects unauthorized users. There are a number of built-in sign-in resolvers that can simplify configuration, or you can implement your own custom sign-in resolver in code, either way it is very important that these resolvers map user identities correctly. You should **always use the minimum number of sign-in resolvers necessary** to avoid risk of account hijacking.
Backstage also supports authentication through an authenticating reverse proxy such as [AWS ALB](https://aws.amazon.com/elasticloadbalancing/application-load-balancer/), where the user identity is read from the incoming proxied decorated request. The following proxy auth providers verify the signature of incoming requests, and are therefore safe to deploy with direct access by users: `awsAlb`, `cfAccess`, and `gcpIap`. Providers like `oauth2Proxy` do not verify the incoming request and can therefore be spoofed by a malicious internal user to supply the `auth` backend with forged identity information. Its therefore highly recommended to restrict access to the `oauth2Proxy` endpoints, or use a different provider.
As part of signing in with an identity resolver, a Backstage Token is issued containing the resolved user identity. The tokens are asymmetrically signed JSON Web Tokens, with the public keys available to any service that wishes to verify a token. The signing keys are rotated continuously and are unique to each installation of Backstage, meaning that Backstage Tokens are not shared across installations. The token contains claims for the user identity and ownership information, which can be used to determine what Backstage resources are owned by that user or group. It is important that this token can not be forged outside of the `auth` plugin, with the exception of other plugins deployed in the same backend service or sharing the same database. For a high-security deployment, the `auth` backend should therefore be deployed in a separate service with its own database.
As part of signing in with a sign-in resolver, a Backstage Token is issued containing the resolved user identity. The tokens are asymmetrically signed JSON Web Tokens, with the public keys available to any service that wishes to verify a token. The signing keys are rotated continuously and are unique to each installation of Backstage, meaning that Backstage Tokens are not shared across installations. The token contains claims for the user identity and ownership information, which can be used to determine what Backstage resources are owned by that user or group. It is important that this token can not be forged outside of the `auth` plugin, with the exception of other plugins deployed in the same backend service or sharing the same database. For a high-security deployment, the `auth` backend should therefore be deployed in a separate service with its own database.
The token is used to prove the identity of the user within the Backstage system, and is used throughout Backstage plugins to control access. It is important that the ownership resolution logic is consistent across the entire Backstage ecosystem, with no possibility of misinterpreting the ownership information.
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff

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