Merge branch 'master' into feature/gitlab-issues

Signed-off-by: Elaine Mattos <79633988+elaine-mattos@users.noreply.github.com>
This commit is contained in:
Elaine Mattos
2023-12-19 14:01:06 +01:00
committed by GitHub
974 changed files with 24311 additions and 4555 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/frontend-plugin-api': patch
---
Add the `FrontendFeature` type, which is the union of `BackstagePlugin` and `ExtensionOverrides`
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/frontend-plugin-api': patch
---
Update alpha component ref type to be more specific than any, delete boot page component and use new plugin type for error boundary component extensions.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/frontend-app-api': patch
---
Add support for translation extensions.
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/frontend-app-api': patch
'@backstage/core-compat-api': patch
---
Leverage the new `FrontendFeature` type to simplify interfaces
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/cli': patch
---
Enable the `tsx` loader to work on Node 18.19 and up
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder-backend-module-github': patch
---
The `scaffolder.defaultCommitMessage` config value is now being used if provided and uses "initial commit" when it is not provided.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder-backend-module-gitlab': patch
---
Extract some more actions to this library
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/frontend-test-utils': patch
---
The `createExtensionTester` helper is now able to render more than one route in the test app.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/create-app': patch
---
Bumped create-app version.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/theme': patch
---
Align Material UI v5 `Paper` component background color in dark mode to v4.
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/plugin-user-settings-backend': patch
'@backstage/plugin-home': patch
---
Change user settings backend plugin id and fix when using user setting backend home page first will cause edit page loop render
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder-backend-module-gerrit': patch
---
Add dry run support for the `publish:gerrit` action.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/config-loader': minor
---
Add "path" to `TransformFunc` context
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder-react': patch
---
Fix bug where `properties` is set to empty object when it should be empty for schema dependencies
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-techdocs-backend': patch
---
Regenerates a fresh token for each call to the search index when collating techdocs.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-analytics-module-ga4': patch
---
Disabled `send_page_view` to get rid of events duplication
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/frontend-app-api': minor
---
Removed `featureLoader` from `createApp`, `features` instead accepts both `FrontendFeature` and `CreateAppFeatureLoader`
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/frontend-test-utils': patch
---
Migrate `renderInTestApp` to `@backstage/frontend-test-utils` for testing individual React components in an app.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-org': patch
---
Fix issue where members inside of `<EntityMembersListCard>` would be rendered as squished when the card itself was shrunk down.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog-react': patch
---
Grouped all `/alpha` extension data reference exports under `catalogExtensionData`.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/repo-tools': patch
---
Updates the `schema openapi generate-client` command to export all generated types from the generated directory.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder': minor
---
Add a new git repository url picker for `gitea`. This `GiteaRepoPicker` can be used in a template to scaffold a project to be cloned using gitea.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/frontend-app-api': patch
---
Use the new plugin type for error boundary components.
+11
View File
@@ -0,0 +1,11 @@
---
'@backstage/repo-tools': patch
---
The `api-reports` command now checks for api report files that no longer apply.
If it finds such files, it's treated basically the same as report errors do, and
the check fails.
For example, if you had an `api-report-alpha.md` but then removed the alpha
export, the reports generator would now report that this file needs to be
deleted.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/core-components': patch
---
Fixes a problem where the `LogViewer` was not able to handle very large logs
+8
View File
@@ -0,0 +1,8 @@
---
'@backstage/plugin-scaffolder': minor
'@backstage/plugin-scaffolder-react': minor
---
Added support for dealing with user provided secrets using a new field extension `ui:field: Secret`
The `@alpha` exports of `Stepper` now needs to be wrapped in a `SecretsContextProvider` for access to secrets.
+7
View File
@@ -0,0 +1,7 @@
---
'@backstage/plugin-azure-devops-backend': patch
'@backstage/plugin-azure-devops-common': patch
'@backstage/plugin-azure-devops': patch
---
Added multi-org support
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/plugin-scaffolder-backend': patch
'@backstage/plugin-scaffolder-node': patch
---
Refactor some methods to `-node` instead and use the new external modules
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/plugin-catalog': patch
'@backstage/plugin-org': patch
---
Add permission check to catalog create and refresh button
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/core-compat-api': patch
---
Added `compatWrapper`, which can be used to wrap any React element to provide bi-directional interoperability between the `@backstage/core-*-api` and `@backstage/frontend-*-api` APIs.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/cli': patch
---
Updating template generation for scaffolder module
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-explore': patch
---
Added option to set `Direction` for the graph in the `GroupsDiagram`
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-vault-backend': patch
---
Updated to test using PostgreSQL 12 and 16
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/core-compat-api': minor
---
Discover plugins and routes recursively beneath the root routes in `collectLecacyRoutes`
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog': patch
---
Internal naming updates for `/alpha` exports.
+8
View File
@@ -0,0 +1,8 @@
---
'@backstage/core-compat-api': minor
'@backstage/frontend-plugin-api': minor
'@backstage/frontend-test-utils': minor
'@backstage/frontend-app-api': minor
---
Switched all core extensions to instead use the namespace `'app'`.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/backend-common': patch
---
Fixed the AwsS3UrlReader host regex and host to allow the S3 reading for CN AWS domain
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-azure-devops': patch
---
Added support for annotations that use a subpath for the host. Also validated that the annotations have the correct number of slashes.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/frontend-app-api': patch
---
A `configLoader` passed to `createApp` now returns an object, to make room for future expansion
+12
View File
@@ -0,0 +1,12 @@
---
'@backstage/plugin-kubernetes-node': patch
'@backstage/plugin-kubernetes-backend': patch
---
The `kubernetes-node` plugin has been modified to house a new extension points for Kubernetes backend plugin;
`KubernetesClusterSupplierExtensionPoint` is introduced .
`kubernetesAuthStrategyExtensionPoint` is introduced .
`kubernetesFetcherExtensionPoint` is introduced .
`kubernetesServiceLocatorExtensionPoint` is introduced .
The `kubernetes-backend` plugin was modified to use this new extension point.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-azure-devops-backend': patch
---
Updated encoding of Org to use `encodeURIComponent` when building URL used to get credentials from credential provider
+12
View File
@@ -0,0 +1,12 @@
---
'@backstage/plugin-catalog-import': patch
'@backstage/plugin-user-settings': patch
'@backstage/plugin-tech-radar': patch
'@backstage/plugin-graphiql': patch
'@backstage/plugin-techdocs': patch
'@backstage/plugin-catalog': patch
'@backstage/plugin-search': patch
'@backstage/plugin-home': patch
---
Wrap `/alpha` export extension elements in backwards compatibility wrapper.
+15
View File
@@ -0,0 +1,15 @@
---
'@backstage/plugin-catalog-import': patch
'@backstage/plugin-stack-overflow': patch
'@backstage/plugin-user-settings': patch
'@backstage/plugin-search-react': patch
'@backstage/plugin-tech-radar': patch
'@backstage/plugin-graphiql': patch
'@backstage/plugin-techdocs': patch
'@backstage/plugin-explore': patch
'@backstage/plugin-search': patch
'@backstage/plugin-home': patch
'@backstage/plugin-adr': patch
---
Updated `/alpha` exports to fit new naming patterns.
+72 -3
View File
@@ -1,5 +1,5 @@
{
"mode": "pre",
"mode": "exit",
"tag": "next",
"initialVersions": {
"example-app": "0.2.89",
@@ -257,7 +257,11 @@
"@backstage/plugin-auth-backend-module-atlassian-provider": "0.0.0",
"@backstage/plugin-auth-backend-module-okta-provider": "0.0.0",
"@backstage/plugin-auth-backend-module-oauth2-proxy-provider": "0.0.0",
"@backstage/plugin-auth-backend-module-vmware-cloud-provider": "0.0.0"
"@backstage/plugin-auth-backend-module-vmware-cloud-provider": "0.0.0",
"@backstage/plugin-scaffolder-backend-module-azure": "0.0.0",
"@backstage/plugin-scaffolder-backend-module-bitbucket": "0.0.0",
"@backstage/plugin-scaffolder-backend-module-gerrit": "0.0.0",
"@backstage/plugin-scaffolder-backend-module-github": "0.0.0"
},
"changesets": [
"angry-eagles-end",
@@ -266,8 +270,10 @@
"angry-walls-juggle",
"big-swans-guess",
"blue-meals-chew",
"brave-beers-happen",
"brave-parents-stare",
"brave-socks-raise",
"breezy-houses-eat",
"breezy-pans-glow",
"bright-eyes-film",
"brown-books-carry",
@@ -275,56 +281,88 @@
"chilled-buses-love",
"chilled-terms-breathe",
"chilly-bikes-kick",
"chilly-lies-collect",
"clean-clouds-fry",
"clever-rats-smoke",
"clever-wombats-sneeze",
"cold-pans-crash",
"cool-knives-argue",
"create-app-1700579510",
"create-app-1700607979",
"create-app-1702395837",
"curly-walls-relate",
"dirty-turkeys-reflect",
"dry-readers-raise",
"dull-rings-melt",
"eighty-dodos-sing",
"eighty-phones-peel",
"eleven-ants-pretend",
"empty-dingos-grow",
"empty-fireants-study",
"fair-plants-attack",
"famous-flies-kick",
"famous-peas-reflect",
"fifty-cameras-share",
"fifty-seas-grab",
"five-feet-call",
"forty-clocks-hug",
"forty-insects-drop",
"forty-mirrors-carry",
"four-foxes-juggle",
"four-needles-watch",
"fresh-seahorses-glow",
"funny-bobcats-try",
"gentle-lies-greet",
"gentle-timers-fail",
"giant-files-fry",
"gold-humans-tease",
"gold-shirts-yell",
"good-wolves-leave",
"gorgeous-snails-admire",
"great-rings-type",
"green-seals-play",
"healthy-feet-kick",
"healthy-poets-search",
"hip-berries-begin",
"hip-cars-repair",
"honest-houses-hide",
"hot-wolves-flash",
"hungry-buckets-compare",
"itchy-camels-cough",
"khaki-clocks-happen",
"khaki-hounds-think",
"khaki-singers-film",
"kind-badgers-rush",
"kind-cycles-happen",
"kind-eels-sing",
"large-weeks-accept",
"late-eyes-serve",
"late-hats-beam",
"light-beers-cheer",
"little-suits-collect",
"long-cycles-grow",
"long-trainers-matter",
"long-wolves-return",
"lovely-terms-search",
"lucky-kids-cough",
"metal-eggs-smile",
"mighty-beans-wink",
"modern-mails-live",
"nasty-rockets-bathe",
"nasty-tips-exercise",
"nervous-dancers-wait",
"nervous-ladybugs-end",
"nervous-penguins-sort",
"ninety-otters-report",
"ninety-suns-accept",
"odd-bats-kick",
"orange-boats-hunt",
"perfect-apes-sing",
"perfect-crabs-help",
"pink-dryers-repair",
"plenty-numbers-enjoy",
"plenty-plums-talk",
"polite-crabs-build",
"polite-knives-build",
"poor-pandas-dream",
"pretty-onions-knock",
@@ -332,53 +370,84 @@
"proud-flies-travel",
"proud-seahorses-explain",
"quick-horses-reply",
"quick-lions-care",
"real-bees-thank",
"red-readers-search",
"renovate-0392ef9",
"renovate-07b1766",
"renovate-0c44581",
"renovate-1252136",
"renovate-12c95fb",
"renovate-169bdc2",
"renovate-19742c3",
"renovate-1ed81a0",
"renovate-240982c",
"renovate-2613384",
"renovate-4891ee7",
"renovate-4b1eded",
"renovate-522261c",
"renovate-5644299",
"renovate-6075f87",
"renovate-6c0fb81",
"renovate-6e5c790",
"renovate-796bd6f",
"renovate-8d8b90d",
"renovate-9d2d52e",
"renovate-a277605",
"renovate-a6399d6",
"renovate-b193efa",
"renovate-c4e012c",
"renovate-c7270d5",
"renovate-c727667",
"renovate-ccaf2c8",
"renovate-dee7ad1",
"renovate-ead3ba6",
"renovate-f5b18be",
"rich-bees-breathe",
"rich-singers-join",
"rude-beans-drop",
"rude-ears-greet",
"sharp-dingos-learn",
"shiny-books-search",
"shiny-cheetahs-vanish",
"short-buttons-cover",
"shy-boxes-sleep",
"silent-rats-reflect",
"silly-numbers-wash",
"silver-rocks-deliver",
"six-cooks-attack",
"sixty-adults-kiss",
"sixty-houses-agree",
"slow-bottles-cross",
"slow-trees-warn",
"smooth-frogs-decide",
"sour-pumas-reply",
"spotty-olives-share",
"spotty-terms-occur",
"stale-bats-end",
"stale-frogs-agree",
"stale-walls-cross",
"strange-brooms-poke",
"strange-suits-glow",
"stupid-wasps-fold",
"tame-pants-end",
"tasty-dolphins-unite",
"ten-snakes-wait",
"tender-peas-smoke",
"thick-snails-travel",
"thirty-fireants-cheer",
"tiny-cobras-look",
"tiny-coins-raise",
"tricky-donkeys-do",
"tricky-islands-wonder",
"twenty-beans-laugh",
"unlucky-clouds-build",
"violet-zebras-thank",
"warm-plums-beg",
"wicked-elephants-think"
"wet-bananas-agree",
"wicked-elephants-think",
"wicked-pants-end",
"wild-knives-wait",
"witty-cars-wash"
]
}
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-search-react': patch
---
Capture analytics even when number of results is not available, since the total result count is not something that is always available for all search engines and configurations.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/create-app': patch
---
Include the `<EntityLinksCard />` for group entities by default
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/cli': patch
---
Updated dependency `bfj` to `^8.0.0`.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-api-docs': patch
---
Updated dependency `@asyncapi/react-component` to `1.2.6`.
+11
View File
@@ -0,0 +1,11 @@
---
'@backstage/plugin-home-react': patch
'@backstage/plugin-home': patch
'@backstage/plugin-scaffolder-react': patch
'@backstage/plugin-scaffolder': patch
---
Updated dependency `@rjsf/utils` to `5.15.0`.
Updated dependency `@rjsf/core` to `5.15.0`.
Updated dependency `@rjsf/material-ui` to `5.15.0`.
Updated dependency `@rjsf/validator-ajv8` to `5.15.0`.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/core-compat-api': patch
---
Delete alpha DI compatibility helper for components, migrating components should be simple without a helper.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/frontend-app-api': minor
---
The app no longer provides the `AppContext` from `@backstage/core-plugin-api`. Components that require this context to be available should use the `compatWrapper` helper from `@backstage/core-compat-api`.
+8
View File
@@ -0,0 +1,8 @@
---
'@backstage/plugin-scaffolder-backend-module-bitbucket': minor
'@backstage/plugin-scaffolder-backend-module-gerrit': minor
'@backstage/plugin-scaffolder-backend-module-github': minor
'@backstage/plugin-scaffolder-backend-module-azure': minor
---
Create new scaffolder module for external integrations
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/core-components': patch
---
Fixed an issue where the `onChange` prop within `HeaderTabs` was triggering twice upon tab-switching.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-home': patch
---
StarredEntities component calls `getEntitiesByRefs` instead of `getEntities` to improve performance since we have the `entityRefs`
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/frontend-plugin-api': patch
---
Added translation APIs as well as `createTranslationExtension`.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/frontend-app-api': patch
---
Renamed `AppRouteBinder` to `CreateAppRouteBinder`
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/frontend-plugin-api': patch
'@backstage/frontend-app-api': patch
---
Forward ` node`` instead of `extensionId` to resolved extension inputs.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/repo-tools': patch
---
Execute `openapi-generator-cli` from `@backstage/repo-tools` directory to force it to use our openapitools.json config file.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/catalog-client': patch
---
Fixes a bug where some query parameters were double URL encoded.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/core-compat-api': minor
---
The `collectLegacyRoutes` has been removed and is replaced by `convertLegacyApp` now being able to convert a `FlatRoutes` element directly.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-gcp-projects': patch
---
Fix query parameter for project details page which should point to projectId rather than project name
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/frontend-plugin-api': minor
---
Changed `Extension` and `ExtensionDefinition` to use opaque types.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/frontend-app-api': patch
---
Updated usage of `Extension` and `ExtensionDefinition` as they are now opaque.
+7
View File
@@ -0,0 +1,7 @@
---
'@backstage/plugin-scaffolder-react': patch
'@backstage/plugin-scaffolder': patch
'@backstage/plugin-home': patch
---
Use new option from RJSF 5.15
+23
View File
@@ -0,0 +1,23 @@
---
'@backstage/plugin-scaffolder-backend-module-gitlab': patch
'@backstage/frontend-plugin-api': patch
'@backstage/plugin-permission-backend': patch
'@backstage/plugin-scaffolder-backend': patch
'@backstage/plugin-permission-common': patch
'@backstage/core-components': patch
'@backstage/plugin-playlist-backend': patch
'@backstage/plugin-scaffolder-react': patch
'@backstage/plugin-catalog-backend': patch
'@backstage/plugin-permission-node': patch
'@backstage/plugin-scaffolder-node': patch
'@backstage/backend-tasks': patch
'@backstage/plugin-search-backend': patch
'@backstage/core-app-api': patch
'@backstage/plugin-scaffolder': patch
'@backstage/cli-node': patch
'@backstage/plugin-auth-node': patch
'@backstage/cli': patch
'@backstage/plugin-home': patch
---
Fixing regular expression ReDoS with zod packages. Upgrading to latest. ref: https://security.snyk.io/vuln/SNYK-JS-ZOD-5925617
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/frontend-plugin-api': minor
---
Moved several extension data references from `coreExtensionData` to their respective extension creators.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/frontend-app-api': patch
---
Updates to match the new `coreExtensionData` structure.
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/frontend-plugin-api': patch
'@backstage/frontend-app-api': patch
---
Renamed the `component` option of `createComponentExtension` to `loader`.
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/plugin-scaffolder-backend-module-github': patch
'@backstage/plugin-scaffolder-backend': patch
---
Add a new action for creating github-autolink references for a repository: `github:autolinks:create`
+7
View File
@@ -0,0 +1,7 @@
---
'@backstage/backend-test-utils': patch
---
Added support for PostgreSQL versions 15 and 16
Also introduced a new `setDefaults(options: { ids?: TestDatabaseId[] })` static method that can be added to the `setupTests.ts` file to define the default database ids you want to use throughout your package. Usage would look like this: `TestDatabases.setDefaults({ ids: ['POSTGRES_12','POSTGRES_16'] })` and would result in PostgreSQL versions 12 and 16 being used for your tests.
+7 -14
View File
@@ -13,33 +13,29 @@ body:
required: true
attributes:
label: '📜 Description'
description: 'A clear and concise description of what the bug is.'
placeholder: 'It bugs out when ...'
description: 'A clear and concise description of what the bug is. It bugs out when ...'
- type: textarea
id: expected-behavior
validations:
required: true
attributes:
label: '👍 Expected behavior'
description: 'What did you think should happen?'
placeholder: 'It should ...'
description: 'What did you think should happen? It should ...'
- type: textarea
id: actual-behavior
validations:
required: true
attributes:
label: '👎 Actual Behavior with Screenshots'
description: 'What did actually happen? Add screenshots, if applicable.'
placeholder: 'It actually ...'
description: 'What did actually happen? Add screenshots, if applicable. It actually ...'
- type: textarea
id: steps-to-reproduce
validations:
required: true
attributes:
label: '👟 Reproduction steps'
description: 'How do you trigger this bug? Please walk us through it step by step.'
placeholder:
"Provide a link to a live example, or an unambiguous set of steps to reproduce this bug. Include code or configuration to reproduce, if relevant.\n
description: 'How do you trigger this bug? Please walk us through it step by step. Provide a link to a live example, or an unambiguous set of steps to reproduce this bug. Include code or configuration to reproduce, if relevant.'
placeholder: "\n
1. Go to '...'\n
2. Click on '....'\n
3. Scroll down to '....'"
@@ -49,17 +45,14 @@ body:
required: false
attributes:
label: '📃 Provide the context for the Bug.'
description: 'How has this issue affected you? What are you trying to accomplish?'
placeholder: 'Providing context (e.g. links to configuration settings, stack trace or log data) helps us come up with a solution that is most useful in the real world.'
description: 'How has this issue affected you? What are you trying to accomplish? Providing context (e.g. links to configuration settings, stack trace or log data) helps us come up with a solution that is most useful in the real world.'
- type: textarea
id: environment
validations:
required: false
attributes:
label: '🖥️ Your Environment'
description: 'Provide Browser Information
Provide Output of `yarn backstage-cli info`'
placeholder: 'Include as many relevant details about the environment you experienced the bug in.'
description: 'Always provide output of `yarn backstage-cli info`; provide browser information when applicable. Include as many relevant details about the environment you experienced the bug in.'
- type: checkboxes
id: no-duplicate-issues
attributes:
+1 -4
View File
@@ -14,7 +14,6 @@ body:
attributes:
label: '🔖 Feature description'
description: 'A clear and concise description of what the feature is.'
placeholder: 'You should add ...'
- type: textarea
id: context
validations:
@@ -22,13 +21,11 @@ body:
attributes:
label: '🎤 Context'
description: 'Please explain why this feature should be implemented and how it would be used. Add examples, if applicable.'
placeholder: 'In my use-case, ...'
- type: textarea
id: implementation
attributes:
label: '✌️ Possible Implementation'
description: 'A clear and concise description of what you want to happen.'
placeholder: 'Not obligatory, but ideas as to the implementation of the addition or change'
description: 'A clear and concise description of what you want to happen. Not obligatory, but ideas as to the implementation of the addition or change.'
- type: checkboxes
id: no-duplicate-issues
attributes:
+1 -4
View File
@@ -14,19 +14,16 @@ body:
attributes:
label: '🔖 Summary'
description: 'Provide a general summary of the plugin and how it should work'
placeholder: 'You should add ...'
- type: textarea
id: website
attributes:
label: '🌐 Project website (if applicable)'
description: 'Add a link to the open source project or product this plugin will integrate with, if existing'
placeholder: 'Website Link is ...'
- type: textarea
id: context
attributes:
label: '✌️ Context'
description: 'A clear and concise description about the Plugin.'
placeholder: 'Providing additional context'
description: 'A clear and concise description about the Plugin and any additional context.'
- type: checkboxes
id: no-duplicate-issues
attributes:
+4 -8
View File
@@ -13,28 +13,24 @@ body:
required: true
attributes:
label: '🔖 Need'
description: 'Let us know why are you proposing this change'
placeholder: 'The problem were trying to address and the benefits/impact we expect to get from this are ...'
description: "Let us know why are you proposing this change. The problem we're trying to address and the benefits/impact we expect to get from this are ..."
- type: textarea
id: proposal
validations:
required: true
attributes:
label: '🎉 Proposal'
description: 'Describe the proposal in as much detail as needed for reviewers to give concrete feedback.'
placeholder: 'Take special care in this section to describe any implications on data privacy or security.'
description: 'Describe the proposal in as much detail as needed for reviewers to give concrete feedback. Take special care in this section to describe any implications on data privacy or security.'
- type: textarea
id: alternatives
attributes:
label: '〽️ Alternatives'
description: 'What alternatives to the proposed solution were considered?'
placeholder: 'What criteria/data was used to discard these?'
description: 'What alternatives to the proposed solution were considered? What criteria/data was used to discard these?'
- type: textarea
id: risk
attributes:
label: '❌ Risks'
description: 'What other things happening could conflict or compete (for example for resources) with the proposal?'
placeholder: 'What risk are there and how do we plan to handle them?'
description: 'What other things happening could conflict or compete (for example for resources) with the proposal? What risk are there and how do we plan to handle them?'
- type: checkboxes
id: no-duplicate-issues
attributes:
+5 -8
View File
@@ -6,37 +6,34 @@ body:
- type: markdown
attributes:
value: |
We value your time and efforts to submit this RFC form. 🙏
We value your time and efforts to submit this UX Component form. 🙏
- type: textarea
id: ux-general
validations:
required: true
attributes:
label: '🔖 General'
description: 'Write a nice note to the community requesting the creation of a new component.'
placeholder: 'Include an image of your component. Bonus points for a GIF!'
description: |
'Write a nice note to the community requesting the creation of a new component. Include an image of your component. Bonus points for a GIF!'
- type: textarea
id: usage
validations:
required: true
attributes:
label: '💻 Usage'
description: "Tell us what's the point of this component/pattern is."
placeholder: 'How does it help? How should it work? Any rules?'
description: "Tell us what's the point of this component/pattern is. How does it help? How should it work? Any rules?"
- type: textarea
id: specs
validations:
required: true
attributes:
label: '📐 Specs'
description: 'Include images that detail the redlines for your component.'
placeholder: "Once we get our Figma workspace set up, we'll be posting the Figma files rather than doing specs by hand."
description: "Include images that detail the redlines for your component. Once we get our Figma workspace set up, we'll be posting the Figma files rather than doing specs by hand."
- type: textarea
id: future
attributes:
label: '🔮 Future'
description: 'List out any upcoming, exciting functionality for this component.'
placeholder: 'The component will have ...'
- type: checkboxes
id: no-duplicate-issues
attributes:
@@ -35,3 +35,10 @@ spec:
value: 'postgres.default.svc.cluster.local'
- name: NODE_ENV
value: production
resources:
limits:
cpu: 1000m
memory: 384Mi
requests:
cpu: 20m
memory: 160Mi
+12 -2
View File
@@ -15,15 +15,25 @@ spec:
spec:
containers:
- name: postgres
image: postgres:13.2-alpine
image: postgres:12-alpine
imagePullPolicy: 'IfNotPresent'
ports:
- containerPort: 5432
env:
- name: PGDATA
value: '/data/pgdata'
envFrom:
- secretRef:
name: postgres-secrets
resources:
limits:
cpu: 1000m
memory: 256Mi
requests:
cpu: 10m
memory: 96Mi
volumeMounts:
- mountPath: /var/lib/postgresql
- mountPath: /data
name: postgresdb
volumes:
- name: postgresdb
+1
View File
@@ -323,6 +323,7 @@ reusability
Reusability
roadmaps
rollbar
Roboto
Rollbar
Rollup
routable
+6 -6
View File
@@ -153,8 +153,8 @@ jobs:
name: Test ${{ matrix.node-version }}
services:
postgres13:
image: postgres:13
postgres16:
image: postgres:16
env:
POSTGRES_PASSWORD: postgres
options: >-
@@ -164,8 +164,8 @@ jobs:
--health-retries 5
ports:
- 5432/tcp
postgres9:
image: postgres:9
postgres12:
image: postgres:12
env:
POSTGRES_PASSWORD: postgres
options: >-
@@ -218,8 +218,8 @@ jobs:
run: yarn backstage-cli repo test --maxWorkers=2 --workerIdleMemoryLimit=1300M --since origin/master
env:
BACKSTAGE_TEST_DISABLE_DOCKER: 1
BACKSTAGE_TEST_DATABASE_POSTGRES13_CONNECTION_STRING: postgresql://postgres:postgres@localhost:${{ job.services.postgres13.ports[5432] }}
BACKSTAGE_TEST_DATABASE_POSTGRES9_CONNECTION_STRING: postgresql://postgres:postgres@localhost:${{ job.services.postgres9.ports[5432] }}
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_MYSQL8_CONNECTION_STRING: mysql://root:root@localhost:${{ job.services.mysql8.ports[3306] }}/ignored
# We run the test cases before verifying the specs to prevent any failing tests from causing errors.
+6 -6
View File
@@ -17,8 +17,8 @@ jobs:
node-version: [18.x, 20.x]
services:
postgres13:
image: postgres:13
postgres16:
image: postgres:16
env:
POSTGRES_PASSWORD: postgres
options: >-
@@ -28,8 +28,8 @@ jobs:
--health-retries 5
ports:
- 5432/tcp
postgres9:
image: postgres:9
postgres12:
image: postgres:12
env:
POSTGRES_PASSWORD: postgres
options: >-
@@ -106,8 +106,8 @@ jobs:
bash <(curl -s https://codecov.io/bash) -f packages/core-plugin-api/coverage/* -F core-plugin-api
env:
BACKSTAGE_TEST_DISABLE_DOCKER: 1
BACKSTAGE_TEST_DATABASE_POSTGRES13_CONNECTION_STRING: postgresql://postgres:postgres@localhost:${{ job.services.postgres13.ports[5432] }}
BACKSTAGE_TEST_DATABASE_POSTGRES9_CONNECTION_STRING: postgresql://postgres:postgres@localhost:${{ job.services.postgres9.ports[5432] }}
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_MYSQL8_CONNECTION_STRING: mysql://root:root@localhost:${{ job.services.mysql8.ports[3306] }}/ignored
- name: Discord notification
+1 -1
View File
@@ -56,7 +56,7 @@ jobs:
- name: Generate UUID image name
id: uuid
run: echo "UUID_TAG_APP=$(uuidgen)" >> $GITHUB_ENV
run: echo "UUID_TAG_APP=backstage-$(uuidgen --time)" >> $GITHUB_ENV
- name: Docker metadata
id: meta
+1 -1
View File
@@ -18,7 +18,7 @@ jobs:
services:
postgres:
image: postgres:latest
image: postgres:12
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
+1 -1
View File
@@ -51,7 +51,7 @@ jobs:
- run: yarn build-storybook
- uses: chromaui/action@2f12dc37555ffc9ed980d883e96b6d03724a2d6a # v1
- uses: chromaui/action@ad023504f8a7c8bd7f63d0f6775c05357f3a6478 # v1
with:
token: ${{ secrets.GITHUB_TOKEN }}
# projectToken intentionally shared to allow collaborators to run Chromatic on forks
+1 -1
View File
@@ -139,7 +139,7 @@ yarn build:api-reports # Build API Reports used for documentation
yarn lint # lint packages that have changed since later commit on origin/master
yarn lint:all # lint all packages
yarn lind:docs # lint all the Markdown files
yarn lint:docs # lint all the Markdown files
yarn lint:type-deps # verify that @types/* dependencies are placed correctly in packages
yarn test # test packages that have changed since later commit on origin/master
+11 -7
View File
@@ -78,7 +78,6 @@ Scope: The Permission Framework and plugins integrating with the permission fram
| Name | Organization | Team | GitHub | Discord |
| -------------------- | ------------ | --------------- | ----------------------------------------------- | ---------------- |
| Ainhoa Larumbe | Spotify | Imaginary Goats | [ainhoaL](http://github.com/ainhoaL) | ainhoa#8085 |
| Aramis Sennyey | Spotify | Imaginary Goats | [sennyeya](https://github.com/sennyeya) | Aramis#7984 |
| Claire Casey | Spotify | Imaginary Goats | [clairelcasey](http://github.com/clairelcasey) | clairecasey#2710 |
| Eric Peterson | Spotify | Imaginary Goats | [iamEAP](http://github.com/iamEAP) | iamEAP#3058 |
| Harry Hogg | Spotify | Imaginary Goats | [HHogg](http://github.com/HHogg) | simplex#3451 |
@@ -118,7 +117,7 @@ Scope: Tooling for frontend and backend schema-first OpenAPI development.
| Name | Organization | GitHub | Discord |
| -------------- | ------------ | --------------------------------------- | ------------- |
| Aramis Sennyey | Spotify | [sennyeya](https://github.com/sennyeya) | `Aramis#7984` |
| Aramis Sennyey | | [sennyeya](https://github.com/sennyeya) | `Aramis#7984` |
### Scaffolder
@@ -126,10 +125,9 @@ Team: @backstage/scaffolder-maintainers
Scope: The Scaffolder frontend and backend plugins, and related tooling.
| Name | Organization | GitHub | Discord |
| ------------------- | -------------- | ------------------------------------- | ---------------- |
| Bogdan Nechyporenko | Bol.com | [acierto](https://github.com/acierto) | `bogdan_haarlem` |
| Paul Cowan | frontendrescue | [dagda1](https://github.com/dagda1) | `dagda1` |
| Name | Organization | GitHub | Discord |
| ------------------- | ------------ | ------------------------------------- | ---------------- |
| Bogdan Nechyporenko | Bol.com | [acierto](https://github.com/acierto) | `bogdan_haarlem` |
## Sponsors
@@ -147,7 +145,7 @@ Scope: The Scaffolder frontend and backend plugins, and related tooling.
| Alex Crome | | [afscrome](https://github.com/afscrome) | `afscrome` |
| Andre Wanlin | Spotify | [awanlin](https://github.com/awanlin) | `ahhhndre` |
| Andrew Thauer | Wealthsimple | [andrewthauer](https://github.com/andrewthauer) | `andrewthauer#3060` |
| Aramis Sennyey | Spotify | [sennyeya](https://github.com/sennyeya) | `Aramis#7984` |
| Aramis Sennyey | | [sennyeya](https://github.com/sennyeya) | `Aramis#7984` |
| Brian Fletcher | Roadie.io | [punkle](https://github.com/punkle) | `Brian Fletcher#7051` |
| Carlos Esteban Lopez Jaramillo | VMWare | [luchillo17](https://github.com/luchillo17) | `luchillo17#8777` |
| David Tuite | Roadie.io | [dtuite](https://github.com/dtuite) | `David Tuite (roadie.io)#1010` |
@@ -173,3 +171,9 @@ Scope: The Scaffolder frontend and backend plugins, and related tooling.
| Name | Organization | GitHub | Discord |
| --------- | ------------ | ------------------------------------------- | -------------- |
| Lee Mills | Spotify | [leemills83](https://github.com/leemills83) | `.binarypoint` |
## Emeritus Project Area Maintainers
| Maintainer | Organization | GitHub | Discord |
| ---------- | -------------- | ----------------------------------- | -------- |
| Paul Cowan | frontendrescue | [dagda1](https://github.com/dagda1) | `dagda1` |
+78
View File
@@ -0,0 +1,78 @@
[![headline](docs/assets/headline.png)](https://backstage.io/)
# [Backstage](https://backstage.io)
[English](README.md) \| 한국어
[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
[![CNCF Status](https://img.shields.io/badge/cncf%20status-incubation-blue.svg)](https://www.cncf.io/projects)
[![Discord](https://img.shields.io/discord/687207715902193673?logo=discord&label=Discord&color=5865F2&logoColor=white)](https://discord.gg/backstage-687207715902193673)
![Code style](https://img.shields.io/badge/code_style-prettier-ff69b4.svg)
[![Codecov](https://img.shields.io/codecov/c/github/backstage/backstage)](https://codecov.io/gh/backstage/backstage)
[![](https://img.shields.io/github/v/release/backstage/backstage)](https://github.com/backstage/backstage/releases)
[![Uffizzi](https://img.shields.io/endpoint?url=https%3A%2F%2Fapp.uffizzi.com%2Fapi%2Fv1%2Fpublic%2Fshields%2Fgithub.com%2Fbackstage%2Fbackstage)](https://app.uffizzi.com/ephemeral-environments/backstage/backstage)
[![OpenSSF Best Practices](https://bestpractices.coreinfrastructure.org/projects/7678/badge)](https://bestpractices.coreinfrastructure.org/projects/7678)
[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/backstage/backstage/badge)](https://securityscorecards.dev/viewer/?uri=github.com/backstage/backstage)
## 백스테이지(Backstage)란?
[백스테이지(Backstage)](https://backstage.io/) 는 개발자 포털 구출을 위한 개방형 플랫폼입니다. 중앙 집중식 소프트웨어 카탈로그를 기반으로하는 Backstage는 마이크로 서비스와 인프라의 질서를 복원하고 제품팀이 자율성을 훼손하지 않고 고품질 코드를 신속하게 출시할 수 있도록 지원합니다.
Backstage 는 모든 인프라 도구, 서비스 및 문서를 통합하여 처음부터 끝까지 간소화된 개발 환경을 만듭니다.
![software-catalog](docs/assets/header.png)
Backstage 다음을 포함합니다:
- [Backstage Software Catalog](https://backstage.io/docs/features/software-catalog/) 마이크로 서비스, 라이브러리, 데이터 파이프라인, 웹 사이트, ML 모델 등 모든 소프트웨어 관리
- [Backstage Software Templates](https://backstage.io/docs/features/software-templates/) 새로운 프로젝트를 신속하게 시작하고 조직의 모밤 사례에따라 도구를 표준화
- [Backstage TechDocs](https://backstage.io/docs/features/techdocs/) "docs like code" 접근 방식을 사용하여 기술 문서를 쉽게 작성, 유지 관리, 검색 및 사용
- [open source plugins](https://github.com/backstage/backstage/tree/master/plugins) Backstage의 사용자 정의 가능성과 기능을 확장
Backstage는 Spotify에서 제작되었지만 현재는 [Cloud Native Computing Foundation(CNCF)](https://www.cncf.io)에서 인큐베이션 수준 프로젝트로 호스팅되고 있습니다. 추가적인 정보는 [announcement](https://backstage.io/blog/2022/03/16/backstage-turns-two#out-of-the-sandbox-and-into-incubation)를 참조하세요.
## 프로젝트 로드맵
제공된 마일스톤을 포함한 자세한 프로젝트 로드맵에 대한 자세한 내용은 [the Roadmap](https://backstage.io/docs/overview/roadmap)을 참조하세요.
## 시작하기
Backstage를 시작하기위해 [Getting Started documentation](https://backstage.io/docs/getting-started)를 참조하세요.
## 문서
Backstage의 문서는 다음을 포함합니다:
- [Main documentation](https://backstage.io/docs)
- [Software Catalog](https://backstage.io/docs/features/software-catalog/)
- [Architecture](https://backstage.io/docs/overview/architecture-overview) ([Decisions](https://backstage.io/docs/architecture-decisions/))
- [Designing for Backstage](https://backstage.io/docs/dls/design)
- [Storybook - UI components](https://backstage.io/storybook)
## 커뮤니티
커뮤니티에 참여하려면 다음 리소스를 사용하세요:
- [Discord chatroom](https://discord.gg/backstage-687207715902193673) - 지원 및 프로젝트 토론
- [Contributing to Backstage](https://github.com/backstage/backstage/blob/master/CONTRIBUTING.md) - 프로젝트 기여
- [RFCs](https://github.com/backstage/backstage/labels/rfc) - 기술 방향을 정하는 데 도움을 주세요.
- [FAQ](https://backstage.io/docs/FAQ) - 자주 묻는 질문들
- [Code of Conduct](CODE_OF_CONDUCT.md) - 커뮤니티 운영 방식
- [Adopters](ADOPTERS.md) - Backstage를 사용하고 있는 기업
- [Blog](https://backstage.io/blog/) - 공지사항 및 업데이트
- [Newsletter](https://spoti.fi/backstagenewsletter) - 이메일 뉴스레터 구독
- [Backstage Community Sessions](https://github.com/backstage/community) - 월간 모임 참여 및 커뮤니티 톺아보기
- Backstage를 사용중이거나 흥미로운 프로젝트라고 생각하신다면 별표를 눌러주세요. 별표는 사랑입니다 ❤️
## License
Copyright 2020-2023 © 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
## 보안
민감한 보안문제는 Github가 아닌 Spotify의 [bug-bounty program](https://hackerone.com/spotify) 통해 신고해주세요
Please report sensitive security issues using Spotify's [bug-bounty program](https://hackerone.com/spotify) rather than GitHub.
자세한 내용은 [security release process](SECURITY.md)를 참고하세요.
+2
View File
@@ -2,6 +2,8 @@
# [Backstage](https://backstage.io)
English \| [한국어](README-ko_kr.md)
[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
[![CNCF Status](https://img.shields.io/badge/cncf%20status-incubation-blue.svg)](https://www.cncf.io/projects)
[![Discord](https://img.shields.io/discord/687207715902193673?logo=discord&label=Discord&color=5865F2&logoColor=white)](https://discord.gg/backstage-687207715902193673)
@@ -0,0 +1,314 @@
<svg host="65bd71144e" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="732px" height="462px" viewBox="-0.5 -0.5 732 462" content="&lt;mxfile scale=&quot;1.5&quot; border=&quot;20&quot;&gt;&lt;diagram id=&quot;gKBvn7eBFHudv9VMIRD-&quot; name=&quot;Page-1&quot;&gt;7VtZc6M4EP41foxL3PBoO8nMVu2RqtmtnTwqINuqYMTK8jW/fgVIgBC+wUlm4qmaQg1qpD6+PkQG1mSx/UJhOv+DRCgemCDaDqz7gWnajsP/zwi7guAaQUGYURwVJKMifMM/kCACQV3hCC2VBxkhMcOpSgxJkqCQKTRIKdmoj01JrL41hTOkEb6FMNap/+KIzcW2fFDRvyI8m8s3O+LGCwxfZ5SsEvG6gWlN819xewElK/H8cg4jsqmRrIeBNaGEsOJqsZ2gOJOslFox73HP3XLZFCXslAlmMWEN45XY+ShNxdLYTkoj3xDKpoCBNd7MMUPfUhhmdzdc/Zw2Z4uYjwx+OcVxPCExoflc68HN/nH6klHyimp33PyXzSAJq9GLH6frmxH7WyPK0LZGEpv7gsgCMbrjj2xVe9qpw02lU1Oqbl7Tpy1oUJjRrGRcyZJfCHG2i9bVZasJFkXc6sQwIQlqSJLL5REucJyt/iuK14jhEIobwmf8Q3JakhUNxats4UWQzpDcpfDJbBUHhUlRDBleq75xlWxsTTYpJevc59tk9Dt84fiiCAfGeJbw65BvGnHLGWdGwcUTj8SNBY6ijMeYoiX+AV9yfpn9pgQnLF+8Mx4497o898pdF3Sp5KZFltAkXqz4d5ul3oEhAJ6tmOudYHWy/AX3p2yHNdaOytVTGZDpdMlNoqm+coknaVRX6AQyGJMZJz7FqxlOBqYbc6mNXyi/mrFcnAUlk7eic/e/FZE37pa5Ykb8AQOk22KauJ8hOwzVORNu85gbhAn+RJv6o8U702It1iiUyyvWwPdXLEMurUMIBMCHALRBIACOl99pQKCIGZ1AoNOAQE/HwKAvCASaHA8jHt8l3X3PhDw0Azl+5uPMOyxJuN8KNRSjnRidApdGOe0JUcw3lEFHPvskELXcW6BoPnVEKdzVHhCotdfJNT0boKGqguOlDu5Kw6uHs/P819fct3A2itKYu9JSRwi8SGO04BrhgiMHEOSY9942hhgHrbEliIAOg4gdeGYnUcNoRA3D7iFsSIeqWdXDlqFkmasb/MVFQluzgo+bkjb8NLghHFstLvyGGamng6kUzhuDaRkkhZJMr2MwdTRNfND8V5pUJ/lvINldm/BaKnS5PSCXtN6aCv8mEXmv6S7L1/aL5brl+AbgavuaPYxh+LpkWafJBI+U7xolUX4JF2hD6OtPFNRM/2ijxehL8p5zZhRDW8y+166f84LDEaOqusgGsrhoDUvHQ1zQRfTS8M1ygqHv2jZwPS9wXRCoqRqX9NBwTMc2Lc/0fcNsFPxFwBU8rwPBoCWjuBrlCliq+geTGKOc2T8Mx5hlAhw9/XYUYM/FSphivqQCMYeiPTBcIrrGnM8+6OwfUY0XaCCzHVHdh9Fjv4hqguPtg5LWtWdL+O7DvESwvqFJZSF4mFE+bWl/eO7PlvRK88ywoaTFquJbekwixvCs1q+FGWMIDseZbNBsTVVdsXpLTESsAw2xvSpT2letka37kKWq3mlotAiaWkjS2DSbXMA/KbSdW/9Z7a/Zt6rm4x1Xi46eWn6a7qAqwW5su7Kzeq3xlnx7Nl73LOOV3cjOjNf8NN620sDU7Vk2Q9+4+bXH3DsziLYu5LUHCXpmVvWttKwMJ7wqj+PlqRnXW58eNG1et6/SybpowxlG4CkW0NExdPNAwXRUDp205Vy9LddZyfCIWDi/Uc0QEoqG0+KFv2i5YDU+3mk5KTGsnqoFt62xcXnUOnBUUgUsGaCeB1Vrak+wqo7Jy1j0rISiKwKTbGTWI5N7q0wraOYuF6ZadrNQaDLqrgfm6U2KD3qWI23+PX/LZDRCUx+H0l7bpw43dH5wkfMbXTi/dJsbfOCiO7+vJgj+hb7f5KPVax36vl7cRChFScRdH2RfMHwk//f2Rej35P9yhqxW+3D/m30mcclBVM393cAYKIVpEBwrTS//9E2iwFukBeURX7NxfC40aIxAPy0Yu3lqEnRbQ0vf+jlwp9NvSG6DO3dGo/F8CfLwYfWXHsXj1R/TWA//Aw==&lt;/diagram&gt;&lt;/mxfile&gt;" style="background-color: rgb(255, 255, 255);">
<defs/>
<g>
<rect x="19.5" y="19.5" width="375" height="60" fill="#e6e6e6" stroke="#666666" stroke-width="1.5" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)scale(1.5)">
<switch>
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 248px; height: 1px; padding-top: 33px; margin-left: 14px;">
<div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;">
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
App
</div>
</div>
</div>
</foreignObject>
<text x="138" y="37" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">
App
</text>
</switch>
</g>
<path d="M 214.5 289.5 L 294.95 289.5" fill="none" stroke="rgb(0, 0, 0)" stroke-width="1.5" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 302.82 289.5 L 292.32 294.75 L 294.95 289.5 L 292.32 284.25 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="1.5" stroke-miterlimit="10" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)scale(1.5)">
<switch>
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 187px; margin-left: 168px;">
<div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
<div style="display: inline-block; font-size: 8px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">
provides
</div>
</div>
</div>
</foreignObject>
<text x="168" y="190" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="8px" text-anchor="middle">
provides
</text>
</switch>
</g>
<rect x="79.5" y="259.5" width="135" height="60" fill="#008a00" stroke="#005700" stroke-width="1.5" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)scale(1.5)">
<switch>
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 88px; height: 1px; padding-top: 193px; margin-left: 54px;">
<div data-drawio-colors="color: #ffffff; " style="box-sizing: border-box; font-size: 0px; text-align: center;">
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(255, 255, 255); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
Catalog Plugin
<br/>
<font face="Courier New" style="font-size: 10px;">
plugin:catalog
</font>
</div>
</div>
</div>
</foreignObject>
<text x="98" y="197" fill="#ffffff" font-family="Helvetica" font-size="12px" text-anchor="middle">
Catalog Plugin...
</text>
</switch>
</g>
<path d="M 214.5 169.5 L 364.5 169.5 Q 379.5 169.5 379.32 184.5 L 378.56 248.15" fill="none" stroke="rgb(0, 0, 0)" stroke-width="1.5" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 378.47 256.02 L 373.35 245.46 L 378.56 248.15 L 383.84 245.59 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="1.5" stroke-miterlimit="10" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)scale(1.5)">
<switch>
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 99px; margin-left: 201px;">
<div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
<div style="display: inline-block; font-size: 10px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">
<font style="font-size: 8px;">
replaces
<br/>
implementation
<br/>
</font>
</div>
</div>
</div>
</foreignObject>
<text x="201" y="102" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="10px" text-anchor="middle">
replaces...
</text>
</switch>
</g>
<rect x="79.5" y="139.5" width="135" height="60" fill="#e6e6e6" stroke="#666666" stroke-width="1.5" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)scale(1.5)">
<switch>
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 88px; height: 1px; padding-top: 113px; margin-left: 54px;">
<div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;">
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
Extension Overrides
</div>
</div>
</div>
</foreignObject>
<text x="98" y="117" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">
Extension Overr...
</text>
</switch>
</g>
<path d="M 214.5 409.5 L 244.5 409.5 Q 259.5 409.5 274.5 409.5 L 294.95 409.5" fill="none" stroke="rgb(0, 0, 0)" stroke-width="1.5" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 302.82 409.5 L 292.32 414.75 L 294.95 409.5 L 292.32 404.25 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="1.5" stroke-miterlimit="10" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)scale(1.5)">
<switch>
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 267px; margin-left: 167px;">
<div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
<div style="display: inline-block; font-size: 8px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">
provides
</div>
</div>
</div>
</foreignObject>
<text x="167" y="270" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="8px" text-anchor="middle">
provides
</text>
</switch>
</g>
<rect x="79.5" y="379.5" width="135" height="60" fill="#008a00" stroke="#005700" stroke-width="1.5" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)scale(1.5)">
<switch>
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 88px; height: 1px; padding-top: 273px; margin-left: 54px;">
<div data-drawio-colors="color: #ffffff; " style="box-sizing: border-box; font-size: 0px; text-align: center;">
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(255, 255, 255); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
Todo Plugin
<br/>
<font face="Courier New" style="font-size: 10px;">
plugin:todo
</font>
</div>
</div>
</div>
</foreignObject>
<text x="98" y="277" fill="#ffffff" font-family="Helvetica" font-size="12px" text-anchor="middle">
Todo Plugin...
</text>
</switch>
</g>
<rect x="424.5" y="19.5" width="285" height="60" fill="#e6e6e6" stroke="#666666" stroke-width="1.5" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)scale(1.5)">
<switch>
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 188px; height: 1px; padding-top: 33px; margin-left: 284px;">
<div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;">
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
Backstage Frontend Framework
</div>
</div>
</div>
</foreignObject>
<text x="378" y="37" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">
Backstage Frontend Framework
</text>
</switch>
</g>
<path d="M 559.5 289.5 L 553.85 289.59" fill="none" stroke="rgb(0, 0, 0)" stroke-width="1.5" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 545.97 289.7 L 556.39 284.3 L 553.85 289.59 L 556.55 294.79 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="1.5" stroke-miterlimit="10" pointer-events="all"/>
<rect x="304.5" y="259.5" width="255" height="60" fill="#1ba1e2" stroke="#006eaf" stroke-width="1.5" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)scale(1.5)">
<switch>
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 168px; height: 1px; padding-top: 193px; margin-left: 204px;">
<div data-drawio-colors="color: #ffffff; " style="box-sizing: border-box; font-size: 0px; text-align: center;">
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(255, 255, 255); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
<font style="font-size: 10px;">
Catalog Client Utility API
<br/>
<font face="Courier New">
api:plugin.catalog.service
</font>
</font>
</div>
</div>
</div>
</foreignObject>
<text x="288" y="197" fill="#ffffff" font-family="Helvetica" font-size="12px" text-anchor="middle">
Catalog Client Utility API...
</text>
</switch>
</g>
<rect x="304.5" y="379.5" width="255" height="60" fill="#1ba1e2" stroke="#006eaf" stroke-width="1.5" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)scale(1.5)">
<switch>
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 168px; height: 1px; padding-top: 273px; margin-left: 204px;">
<div data-drawio-colors="color: #ffffff; " style="box-sizing: border-box; font-size: 0px; text-align: center;">
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(255, 255, 255); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
<font style="font-size: 10px;">
Todo Utility API
<br/>
<font face="Courier New">
api:plugin.todo.api
</font>
</font>
</div>
</div>
</div>
</foreignObject>
<text x="288" y="277" fill="#ffffff" font-family="Helvetica" font-size="12px" text-anchor="middle">
Todo Utility API...
</text>
</switch>
</g>
<path d="M 49.5 79.5 L 49.5 151.5 Q 49.5 166.5 49.5 181.5 L 49.5 244.5 Q 49.5 259.5 60.11 270.11 L 72.75 282.75" fill="none" stroke="rgb(0, 0, 0)" stroke-width="1.5" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 78.31 288.31 L 67.18 284.6 L 72.75 282.75 L 74.6 277.18 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="1.5" stroke-miterlimit="10" pointer-events="all"/>
<path d="M 49.5 169.5 L 49.5 241.5 Q 49.5 256.5 49.5 271.5 L 49.5 379.5 Q 49.5 394.5 60.23 399.86 L 70.96 405.23" fill="none" stroke="rgb(0, 0, 0)" stroke-width="1.5" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 78 408.75 L 66.26 408.75 L 70.96 405.23 L 70.96 399.36 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="1.5" stroke-miterlimit="10" pointer-events="all"/>
<path d="M 49.5 82.5 L 49.5 154.5 Q 49.5 169.5 59.72 169.5 L 69.95 169.5" fill="none" stroke="rgb(0, 0, 0)" stroke-width="1.5" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 77.82 169.5 L 67.32 174.75 L 69.95 169.5 L 67.32 164.25 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="1.5" stroke-miterlimit="10" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)scale(1.5)">
<switch>
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 64px; margin-left: 47px;">
<div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
<div style="display: inline-block; font-size: 10px; font-family: &quot;Courier New&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">
<font face="Helvetica" style="font-size: 8px;">
installs
</font>
</div>
</div>
</div>
</foreignObject>
<text x="47" y="67" fill="rgb(0, 0, 0)" font-family="Courier New" font-size="10px" text-anchor="middle">
installs
</text>
</switch>
</g>
<rect x="469.5" y="139.5" width="195" height="60" fill="#1ba1e2" stroke="#006eaf" stroke-width="1.5" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)scale(1.5)">
<switch>
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 128px; height: 1px; padding-top: 113px; margin-left: 314px;">
<div data-drawio-colors="color: #ffffff; " style="box-sizing: border-box; font-size: 0px; text-align: center;">
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(255, 255, 255); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
<font style="font-size: 10px;">
Fetch Utility API
<br/>
<font face="Courier New">
api:core.fetch
</font>
</font>
</div>
</div>
</div>
</foreignObject>
<text x="378" y="117" fill="#ffffff" font-family="Helvetica" font-size="12px" text-anchor="middle">
Fetch Utility API...
</text>
</switch>
</g>
<path d="M 567 79.5 L 567 129.95" fill="none" stroke="rgb(0, 0, 0)" stroke-width="1.5" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 567 137.82 L 561.75 127.32 L 567 129.95 L 572.25 127.32 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="1.5" stroke-miterlimit="10" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)scale(1.5)">
<switch>
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 69px; margin-left: 394px;">
<div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
<div style="display: inline-block; font-size: 8px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">
provides
</div>
</div>
</div>
</foreignObject>
<text x="394" y="72" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="8px" text-anchor="middle">
provides
</text>
</switch>
</g>
<path d="M 432 379.5 L 432 329.05" fill="none" stroke="rgb(0, 0, 0)" stroke-width="1.5" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 432 321.18 L 437.25 331.68 L 432 329.05 L 426.75 331.68 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="1.5" stroke-miterlimit="10" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)scale(1.5)">
<switch>
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 235px; margin-left: 310px;">
<div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
<div style="display: inline-block; font-size: 8px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">
depends on
</div>
</div>
</div>
</foreignObject>
<text x="310" y="238" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="8px" text-anchor="middle">
depends on
</text>
</switch>
</g>
<path d="M 559.5 289.5 L 589.5 289.5 Q 604.5 289.5 604.46 274.5 L 604.27 208.75" fill="none" stroke="rgb(0, 0, 0)" stroke-width="1.5" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 604.25 200.88 L 609.53 211.36 L 604.27 208.75 L 599.03 211.39 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="1.5" stroke-miterlimit="10" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)scale(1.5)">
<switch>
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 160px; margin-left: 425px;">
<div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
<div style="display: inline-block; font-size: 8px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">
depends on
</div>
</div>
</div>
</foreignObject>
<text x="425" y="163" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="8px" text-anchor="middle">
depends on
</text>
</switch>
</g>
</g>
<switch>
<g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/>
<a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank">
<text text-anchor="middle" font-size="10px" x="50%" y="100%">
Text is not SVG - cannot display
</text>
</a>
</switch>
</svg>

After

Width:  |  Height:  |  Size: 27 KiB

+2
View File
@@ -27,6 +27,8 @@ To add Okta authentication, you must create an Application from Okta:
- `Controlled access`: (select as appropriate)
- Click Save
The configuration examples provided above are suitable for local development. For a production deployment, substitute `http://localhost:7007` with the url that your Backstage instance is available at.
# Configuration
The provider configuration can then be added to your `app-config.yaml` under the
+1 -1
View File
@@ -59,7 +59,7 @@ Just like plugins, modules also have access to services and can depend on their
A detailed explanation of the package architecture can be found in the
[Backstage Architecture
Overview](../../overview/architecture-overview/#package-architecture). The
Overview](../../overview/architecture-overview.md#package-architecture). The
most important packages to consider for this system are the following:
- `plugin-<pluginId>-backend` houses the implementation of the backend plugins
@@ -262,9 +262,259 @@ If you have other customizations made to `plugins/catalog.ts`, such as adding
custom processors or entity providers, read on. Otherwise, you should be able to
just delete that file at this point.
#### Amazon Web Services
`AwsEksClusterProcessor` and `AwsOrganizationCloudAccountProcessor` have not yet been migrated to the new backend system.
See [Other Catalog Extensions](#other-catalog-extensions) for how to use these in the new backend system.
For `AwsS3DiscoveryProcessor`, first migrate to `AwsS3EntityProvider`.
To migrate `AwsS3EntityProvider` to the new backend system, add a reference to the `@backstage/plugin-catalog-backend-module-aws` module.
```ts title="packages/backend/src/index.ts"
backend.add(import('@backstage/plugin-catalog-backend/alpha'));
/* highlight-add-start */
backend.add(import('@backstage/plugin-catalog-backend-module-aws/alpha'));
/* highlight-add-end */
```
If you were providing a `schedule` in code, this now needs to be set via configuration.
All other AWS configuration in `app-config.yaml` remains the same.
```yaml title="app-config.yaml"
catalog:
providers:
awsS3:
yourProviderId:
# ...
/* highlight-add-start */
schedule:
frequency: PT1H
timeout: PT50M
/* highlight-add-end */
```
#### Azure DevOps
For `AzureDevOpsDiscoveryProcessor`, first migrate to `AzureDevOpsEntityProvider`.
To migrate `AzureDevOpsEntityProvider` to the new backend system, add a reference to the `@backstage/plugin-catalog-backend-module-azure` module.
```ts title="packages/backend/src/index.ts"
backend.add(import('@backstage/plugin-catalog-backend/alpha'));
/* highlight-add-start */
backend.add(import('@backstage/plugin-catalog-backend-module-azure/alpha'));
/* highlight-add-end */
```
If you were providing a `schedule` in code, this now needs to be set via configuration.
All other Azure DevOps configuration in `app-config.yaml` remains the same.
```yaml title="app-config.yaml"
catalog:
providers:
azureDevOps:
yourProviderId:
# ...
/* highlight-add-start */
schedule:
frequency: PT1H
timeout: PT50M
/* highlight-add-end */
```
#### Open API
`InternalOpenApiDocumentationProvider` has not yet been migrated to the new backend system.
See [Other Catalog Extensions](#other-catalog-extensions) for how to use this in the new backend system.
#### Bitbucket
For `BitbucketDiscoveryProcessor`, migrate to `BitbucketCloudEntityProvider` or `BitbucketServerEntityProvider`
To migrate `BitbucketCloudEntityProvider` to the new backend system, add a reference to the `@backstage/plugin-catalog-backend-module-bitbucket-cloud` module.
```ts title="packages/backend/src/index.ts"
backend.add(import('@backstage/plugin-catalog-backend/alpha'));
/* highlight-add-start */
backend.add(
import('@backstage/plugin-catalog-backend-module-bitbucket-cloud/alpha'),
);
/* highlight-add-end */
```
If you were providing a `schedule` in code, this now needs to be set via configuration.
All other Bitbucket Cloud configuration in `app-config.yaml` remains the same.
```yaml title="app-config.yaml"
catalog:
providers:
bitbucketCloud:
yourProviderId:
# ...
/* highlight-add-start */
schedule:
frequency: PT30M
timeout: PT3M
/* highlight-add-end */
```
To migrate `BitbucketServerEntityProvider` to the new backend system, add a reference to `@backstage/plugin-catalog-backend-module-bitbucket-server`.
```ts title="packages/backend/src/index.ts"
backend.add(import('@backstage/plugin-catalog-backend/alpha'));
/* highlight-add-start */
backend.add(
import('@backstage/plugin-catalog-backend-module-bitbucket-server/alpha'),
);
/* highlight-add-end */
```
If you were providing a `schedule` in code, this now needs to be set via configuration.
All other Bitbucket Server configuration in `app-config.yaml` remains the same.
```yaml title="app-config.yaml"
catalog:
providers:
bitbucketServer:
yourProviderId:
# ...
/* highlight-add-start */
schedule:
frequency: PT30M
timeout: PT3M
/* highlight-add-end */
```
#### Google Cloud Platform
To migrate `GkeEntityProvider` to the new backend system, add a reference to `@backstage/plugin-catalog-backend-module-gcp`.
```ts title="packages/backend/src/index.ts"
backend.add(import('@backstage/plugin-catalog-backend/alpha'));
/* highlight-add-start */
backend.add(import('@backstage/plugin-catalog-backend-module-gcp'));
/* highlight-add-end */
```
Configuration in app-config.yaml remains the same.
#### Gerrit
To migrate `GerritEntityProvider` to the new backend system, add a reference to `@backstage/plugin-catalog-backend-module-gerrit`.
```ts title="packages/backend/src/index.ts"
backend.add(import('@backstage/plugin-catalog-backend/alpha'));
/* highlight-add-start */
backend.add(import('@backstage/plugin-catalog-backend-module-gerrit/alpha'));
/* highlight-add-end */
```
If you were providing a `schedule` in code, this now needs to be set via configuration.
All other Gerrit configuration in `app-config.yaml` remains the same.
```yaml title="app-config.yaml"
catalog:
providers:
gerrit:
yourProviderId:
# ...
/* highlight-add-start */
schedule:
frequency: PT30M
timeout: PT3M
/* highlight-add-end */
```
#### Github
For `GithubDiscoveryProcessor`, `GithubMultiOrgReaderProcessor` and `GithubOrgReaderProcessor`, first migrate to the equivalent Entity Provider.
To migrate `GithubEntityProvider` to the new backend system, add a reference to `@backstage/plugin-catalog-backend-module-github`.
```ts title="packages/backend/src/index.ts"
backend.add(import('@backstage/plugin-catalog-backend/alpha'));
/* highlight-add-start */
backend.add(import('@backstage/plugin-catalog-backend-module-github/alpha'));
/* highlight-add-end */
```
If you were providing a `schedule` in code, this now needs to be set via configuration.
All other Github configuration in `app-config.yaml` remains the same.
```yaml title="app-config.yaml"
catalog:
providers:
github:
yourProviderId:
# ...
/* highlight-add-start */
schedule:
frequency: PT30M
timeout: PT3M
/* highlight-add-end */
```
To migrate `GithubMultiOrgEntityProvider` and `GithubOrgEntityProvider` to the new backend system, add a reference to `@backstage/plugin-catalog-backend-module-github-org`.
```ts title="packages/backend/src/index.ts"
backend.add(import('@backstage/plugin-catalog-backend/alpha'));
/* highlight-add-start */
backend.add(import('@backstage/plugin-catalog-backend-module-github-org'));
/* highlight-add-end */
```
If you were providing a `schedule` in code, this now needs to be set via configuration.
All other Github configuration in `app-config.yaml` remains the same.
```yaml title="app-config.yaml"
catalog:
providers:
githubOrg:
yourProviderId:
# ...
/* highlight-add-start */
schedule:
frequency: PT30M
timeout: PT3M
/* highlight-add-end */
```
If you were providing transformers, these can be configured by extending `githubOrgEntityProviderTransformsExtensionPoint`
```ts title="packages/backend/src/index.ts"
import { createBackendModule } from '@backstage/backend-plugin-api';
import { githubOrgEntityProviderTransformsExtensionPoint } from '@backstage/plugin-catalog-backend-module-github-org';
backend.add(
createBackendModule({
pluginId: 'catalog',
moduleId: 'githubOrgTransformers',
register(env) {
env.registerInit({
deps: {
/* highlight-add-start */
githubOrgTransformers:
githubOrgEntityProviderTransformsExtensionPoint,
/* highlight-add-end */
},
async init({ githubOrgTransformers }) {
/* highlight-add-start */
githubOrgTransformers.setUserTransformer(myUserTransformer);
githubOrgTransformers.setTeamTransformer(myTeamTransformer);
/* highlight-add-end */
},
});
},
}),
);
```
#### Microsoft Graph
Import the Microsoft Graph catalog module
For `MicrosoftGraphOrgReaderProcessor`, first migrate to `MicrosoftGraphOrgEntityProvider`
To migrate `MicrosoftGraphOrgEntityProvider` to the new backend system, add a reference to `@backstage/plugin-catalog-backend-module-msgraph`.
```ts title="packages/backend/src/index.ts"
backend.add(import('@backstage/plugin-catalog-backend/alpha'));
@@ -273,7 +523,8 @@ backend.add(import('@backstage/plugin-catalog-backend-module-msgraph/alpha'));
/* highlight-add-end */
```
If you were providng a `schedule` programtically, this now needs to be set via configuration
If you were providing a `schedule` in code, this now needs to be set via configuration.
All other Microsoft Graph configuration in `app-config.yaml` remains the same.
```yaml title="app-config.yaml"
catalog:
@@ -285,7 +536,6 @@ catalog:
frequency: PT4H
timeout: PT30M
/* highlight-add-end */
```
If you were providing transformers, these can be configured by extending `microsoftGraphOrgEntityProviderTransformExtensionPoint`
@@ -120,7 +120,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_13', 'POSTGRES_9', 'SQLITE_3', 'MYSQL_8'],
ids: ['POSTGRES_16', 'POSTGRES_12', 'SQLITE_3', 'MYSQL_8'],
});
// Just an example of how to conveniently bundle up the setup code
+1 -1
View File
@@ -309,7 +309,7 @@ package, which is done as follows:
.addRouter('', await app(appEnv));
```
3. Remove the `@backstage/plugin-app-backend` and the app package dependency
(e.g. `app`) from `packages/backend/packages.json`. If you don't remove the
(e.g. `app`) from `packages/backend/package.json`. If you don't remove the
app package dependency the app will still be built and bundled with the
backend.
@@ -341,7 +341,7 @@ the three-dots menu option of entity views does offer this option, and the
orphaned status can be seen in an info box at the top of the entity's overview
page.
However, if you were to try to do an explicit depletion on an entity that's
However, if you were to try to do an explicit deletion on an entity that's
being kept actively updated by a parent entity, it would just reappear again
shortly thereafter when the processing loops reconsider the parent entity that's
still in there.
@@ -231,8 +231,53 @@ spec:
inputType: tel
```
### Using Secrets
You may want to mark things as secret and make sure that these values are protected and not available through REST endpoints. You can do this by using the built in `ui:field: Secret`.
You can define this property as any normal parameter, however the consumption of this parameter will not be available through `${{ parameters.myKey }}` you will instead need to use `${{ secrets.myKey }}` in your `template.yaml`.
Parameters will be automatically masked in the review step.
```yaml
apiVersion: scaffolder.backstage.io/v1beta3
kind: Template
metadata:
name: v1beta3-demo
title: Test Action template
description: scaffolder v1beta3 template demo
spec:
owner: backstage/techdocs-core
type: service
parameters:
- title: Authenticaion
description: Provide authentication for the resource
required:
- username
- password
properties:
username:
type: string
# use the built in Secret field extension
ui:field: Secret
password:
type: string
ui:field: Secret
steps:
- id: setupAuthentication
action: auth:create
input:
# make sure to use ${{ secrets.parameterName }} to reference these values
username: ${{ secrets.username }}
password: ${{ secrets.password }}
```
### Hide or mask sensitive data on Review step
> Note: this approach is soon to be deprecated, please mark things as secret by using the `Secret` field extension instead as mentioned above.
Sometimes, specially in custom fields, you collect some data on Create form that
must not be shown to the user on Review step. To hide or mask this data, you can
use `ui:widget: password` or set some properties of `ui:backstage`:
@@ -9,8 +9,8 @@ This section will guide you through how to:
- [Create a basic documentation setup](#create-a-basic-documentation-setup)
- [Use any software template](#use-any-software-template)
- [Use the documentation template](#use-the-documentation-template)
- [Enable documentation for an already existing entity](#enable-documentation-for-an-already-existing-entity)
- [Create a standalone documentation](#create-a-standalone-documentation)
- [Writing and previewing your documentation](#writing-and-previewing-your-documentation)
## Prerequisites
@@ -41,23 +41,6 @@ default, we highly recommend you to set that up. Follow our how-to guide
[How to add documentation setup to your software templates](./how-to-guides.md#how-to-add-the-documentation-setup-to-your-software-templates)
to get started.
### Use the documentation template
There could be _some_ situations where you don't want to keep your docs close to
your code, but still want to publish documentation - for example, an onboarding
tutorial. For this use case, we have put together a documentation template. Your
Backstage instance should by default have a documentation template added. If
not, copy the catalog locations from the
[create-app template](https://github.com/backstage/backstage/blob/master/packages/create-app/templates/default-app/app-config.yaml.hbs)
to add the documentation template. The template creates a component with
**only** TechDocs configuration and default markdown files, and is otherwise
empty.
![Documentation Template](../../assets/techdocs/documentation-template.png)
Create an entity from the documentation template and you will get the needed
setup for free.
### Enable documentation for an already existing entity
Prerequisites:
@@ -115,6 +98,56 @@ This is a basic example of documentation.
Commit your changes, open a pull request and merge. You will now get your
updated documentation next time you run Backstage!
### Create a standalone documentation
There could be _some_ situations where you don't want to keep your docs close to
your code, but still want to publish documentation - for example, an onboarding
tutorial. For this case, you can create a documentation component, which will be
published as a standalone part of TechDocs.
First, create an entity for your documentation. A minimal example could look like
this:
```yaml title="catalog-info.yaml"
apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
name: a-unique-name-for-your-docs
annotations:
# this could also be `url:<url>` if the documentation isn't in the same location
backstage.io/techdocs-ref: dir:.
spec:
type: documentation
lifecycle: experimental
owner: user-or-team-name
```
Next, create the config file for [mkdocs](https://www.mkdocs.org/), which will be
used to parse your docs:
```yaml title="mkdocs.yml"
site_name: a-unique-name-for-your-docs
site_description: An informative description
plugins:
- techdocs-core
nav:
- Getting Started: index.md
```
Finally, add your index.md Markdown file, in a folder named `docs/` with your desired
documentation in Markdown. Your file structure should now look like this:
```
your-great-documentation/
docs/
index.md
catalog-info.yaml
mkdocs.yml
```
Last but not least, register your component in the software catalog using
[one of several options](../software-catalog/index.md#adding-components-to-the-catalog).
## Writing and previewing your documentation
Using the [techdocs-cli](https://github.com/backstage/backstage/tree/master/packages/techdocs-cli) you can
+12
View File
@@ -504,6 +504,18 @@ folder (/docs) or replace the content in this file.
Done! You now have support for TechDocs in your own software template!
### Prevent download of Google fonts
If your Backstage instance does not have internet access, the generation will fail. TechDocs tries to download the Roboto font from Google. You can disable it by adding the following lines to mkdocs.yaml:
```yaml
theme:
name: material
font: false
```
> Note: The addition `name: material` is necessary. Otherwise it will not work
## How to enable iframes in TechDocs
TechDocs uses the [DOMPurify](https://github.com/cure53/DOMPurify) library to
@@ -18,6 +18,10 @@ Each extensions has a number of different properties that define how it behaves
### ID
<!--
Update this to be 3 different sections: name, kind and namespace
-->
The ID of an extension is used to uniquely identity it, and it should ideally by unique across the entire Backstage ecosystem. For each frontend app instance there can only be a single extension for any given ID. Installing multiple extensions with the same ID will either result in an error or one of the extensions will override the others. The ID is also used to reference the extensions from other extensions, in configuration, and in other places such as developer tools and analytics.
### Output
@@ -85,20 +89,64 @@ TODO
## Extension Inputs
TODO
<!--
## Configuration
Introduce the concept of extension inputs and how they use extension data to reference types just like outputs
TODO
Show how to use the `createExtensionInput` API to create an input for an extension.
## Configuration Schema
- Example of creating a single input
TODO
Talk about different types of inputs, singleton vs array + optional vs required.
- Example of creating an optional singleton input - not the value is no longer an array
Talk about the shape of the input values and that you have access to the AppNode node in addition to the data, but discourage use of AppNode.
- Example of how to access the AppNode next to the input data
-->
## Extension Configuration
<!--
Introduce the concept of extension configuration, highlight that it's different from app config
Show how to define a configuration schema for an extension, talk about it using zod (link to zod), in general explain everything there is to know about the schema
- Example that creates a configuration schema for an extension
Show how to provide configuration for an extension - keep this part short, and instead link to the architecture section that talks about writing configuration
- One example of a YAML configurations for the above extension
-->
## Extension Creators
TODO
<!--
Introduce the concept of extension creators, talk about how they are used to provide an opinionated way of creating extensions for specific use cases. Mention a few of the built-in creators, link to the reference section on built-in extension kinds (TBD).
- Example of using an existing extension creator to create an extension
Explain that each extension creator creates a specific "kind" of extensions - introduce the concept of extension kinds. Show an example of how the kind is used to build up the ID.
- Example of creating a new extension creator for creating a specific kind of extension
Explain that extension creators should be exported from library packages (`-react`) rather than plugin packages.
-->
## Extension Boundary
TODO
<!--
Introduce the need for extension specific React contexts, for example error boundaries and analytics.
Any React elements that are rendered by extension creators should be wrapped in the `ExtensionBoundary`
- Example of how to use the `ExtensionBoundary` in an extension creator
-->
@@ -7,3 +7,87 @@ description: Frontend plugins
---
> **NOTE: The new frontend system is in a highly experimental phase**
## Introduction
<!--
Introduce frontend plugins and how each of them is shipped as a separate package. Highlight that each package should only export a single plugin instance.
-->
## Creating a Plugin
<!--
How to create a simple plugin
-->
```ts
export const myPlugin = createPlugin({
id: 'my-plugin',
});
```
<!--
Note that this plugin is useless in itself, and you need to provide extra options to make it useful, in particular extensions.
-->
### Plugin ID
<!--
link to relevant docs
-->
### Plugin Extensions
<!--
- Example of how this option is used in `createPlugin`
link to relevant docs
-->
### Plugin Routes
<!--
- Example of how this option is used in `createPlugin`
link to relevant docs
-->
### Plugin External Routes
<!--
- Example of how this option is used in `createPlugin`
link to relevant docs
-->
### Plugin Feature Flags
<!--
- Example of how this option is used in `createPlugin`
link to relevant docs
-->
## Installing a Plugin in an App
<!--
Quick intro, but link back to app docs for more details
-->
@@ -7,3 +7,41 @@ description: Frontend extension overrides
---
> **NOTE: The new frontend system is in a highly experimental phase**
## Introduction
<!--
Introduce extension overrides and how they can be shipped in separate packages but also internally within a project too.
Talk about how extension overrides
-->
## Creating a Extension Override
<!--
How to create an extension override and export it from a package.A
- Example using the default exports
You can also create them directly withing the app for local overrides.
- Example of installing an override directly into an app
Mention that in can still be a good idea to split your overrides out into separate packages in large projects. But it's up to you to decide how to group the extensions into extension overrides.
-->
## Overriding Existing Extensions
<!--
To override an existing extension you need to provide an extension through an extension override that has the same ID as the existing extension. That is, all of kind, namespace and name must match the extension you want to override.
This means that you typically need to provide an explicit namespace when overriding extensions from a plugin.
- Example of how to create an extension override for an existing extension from some plugin
-->

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