Merge remote-tracking branch 'origin/master' into feature/add-commit-hash-for-scaffolder

Signed-off-by: Lukas Fruntke (external expert on behalf of DB Netz) <lukas.fruntke-extern@deutschebahn.com>
This commit is contained in:
Lukas Fruntke (external expert on behalf of DB Netz)
2023-04-17 10:13:31 +02:00
805 changed files with 24884 additions and 4808 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-kubernetes-backend': patch
---
Updated kubernetes config schema to match available options
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-kubernetes-backend': minor
---
Plugins that instantiate the `KubernetesProxy` must now provide a parameter of the type `KubernetesProxyOptions` which includes providing a `KubernetesAuthTranslator`. The `KubernetesBuilder` now builds its own `KubernetesAuthTranslatorMap` that it provides to the `KubernetesProxy`. The `DispatchingKubernetesAuthTranslator` expects a `KubernetesTranslatorMap` to be provided as a parameter. The `KubernetesBuilder` now has a method called `setAuthTranslatorMap` which allows integrators to bring their own `KubernetesAuthTranslator's` to the `KubernetesPlugin`.
+9
View File
@@ -0,0 +1,9 @@
---
'@backstage/backend-common': patch
---
Support commit hashes at `GithubUrlReader.readTree/search` additionally to branch names.
Additionally, this will reduce the number of API calls from 2 to 1 for retrieving the "repo details"
for all cases besides when the default branch has to be resolved and used
(e.g., repo URL without any branch or commit hash).
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/cli-node': minor
---
Introduced the new `@backstage/cli-node` package, which provides utilities for use across Backstage CLIs.
+7
View File
@@ -0,0 +1,7 @@
---
'@backstage/plugin-kubernetes': minor
---
refactor kubernetes error detection to make way for proposed solutions
**BREAKING**: `DetectedError` now appears once per Kubernetes resource per error instead of for all resources which have that error, `namespace` and `name` fields are now in `sourceRef` object `message` is now a `string` instead of a `string[]`. `ErrorDetectableKind` has been removed.
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/plugin-catalog-backend-module-azure': patch
'@backstage/plugin-catalog-backend': patch
---
Use the `LocationSpec` type from the `catalog-common` package in place of the deprecated `LocationSpec` from the `catalog-node` package.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/cli': patch
---
When building a backend package with dependencies any `--config <path>` options will now be forwarded to any dependent app package builds, unless the build script in the app package already contains a `--config` option.
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/plugin-bazaar-backend': patch
'@backstage/plugin-bazaar': patch
---
Added the `docs` parameter (optional) to link the project documentation
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/plugin-scaffolder-react': patch
'@backstage/plugin-scaffolder': patch
---
`scaffolder/next`: Bump `@rjsf/*` dependencies to 5.5.2
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog-backend': patch
---
Updates and moves OpenAPI spec to `src/schema/openapi.yaml` and uses `ApiRouter` type from `@backstage/backend-openapi-utils` to handle automatic types from the OpenAPI spec file.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/create-app': patch
---
Bumped create-app version.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-code-coverage-backend': patch
---
Bump `xml2js` from 0.4.23 to 0.5.0
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/catalog-client': patch
---
Fixed bug in `queryEntities` of `CatalogClient` where the `sortField` is supposed to be changed to `orderField`.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-permission-node': patch
---
Introduced alpha export of the `policyExtensionPoint` for use in the new backend system.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-permission-backend': patch
---
Introduced alpha export of the `permissionPlugin` for use in the new backend system, along with a `permissionModuleAllowAllPolicy` that can be used to allow all requests.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder': patch
---
Fix some hard-coded white font colors in scaffolder
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/cli': patch
---
Internal refactor to move many internal utilities to the new `@backstage/cli-node` package.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/repo-tools': minor
---
Adding two new commands to support OpenAPI spec writing, `schema:openapi:generate` to generate the Typescript file that `@backstage/backend-openapi-utils` needs for typing and `schema:openapi:verify` to verify that this file exists and matches your `src/schema/openapi.yaml` file.
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/plugin-scaffolder-react': patch
'@backstage/plugin-scaffolder': patch
---
Accessibility issues identified using lighthouse fixed.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-puppetdb': minor
---
Initial version of [PuppetDB plugin](https://github.com/backstage/backstage/blob/master/plugins/puppetdb/README.md).
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-explore': patch
---
Extracted generic `CatalogKindExploreContent` component so that it is easy to show any component kinds in their own tab in the explore page.
+7
View File
@@ -0,0 +1,7 @@
---
'@backstage/plugin-lighthouse-backend': minor
---
Lighthouse backend plugin can now use an authenticated catalog backend API.
- Breaking \* You must now pass the `tokenManager` to the lighthouse `createScheduler`.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-sonarqube': patch
---
amend getSecurityHotspotsUrl to conditionally remove project path if sonarqube is self hosted
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-vault': patch
---
Use `fetchApi` instead of raw `fetch` in order to pass auth header if necessary.
+16
View File
@@ -0,0 +1,16 @@
---
'@backstage/plugin-auth-backend': patch
---
The `microsoft` (i.e. Azure) auth provider now supports negotiating tokens for
Azure resources besides Microsoft Graph (e.g. AKS, Virtual Machines, Machine
Learning Services, etc.). When the `/frame/handler` endpoint is called with an
authorization code for a non-Microsoft Graph scope, the user profile will not be
fetched. Similarly no user profile or photo data will be fetched by the backend
if the `/refresh` endpoint is called with the `scope` query parameter strictly
containing scopes for resources besides Microsoft Graph.
Furthermore, the `offline_access` scope will be requested by default, even when
it is not mentioned in the argument to `getAccessToken`. This means that any
Azure access token can be automatically refreshed, even if the user has not
signed in via Azure.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-techdocs-node': minor
---
Use the latest version `v.1.2.0` of the spotify/techdocs docker image as default
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/plugin-scaffolder-react': patch
'@backstage/plugin-scaffolder': patch
---
bug: Invert `templateFilter` predicate to align with `Array.filter`
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-adr': minor
---
Use `fetchApi` instead of raw `fetch` in order to pass auth header if necessary.
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/plugin-adr-common': patch
'@backstage/plugin-adr': patch
---
use path attribute to fetch files instead of name and update the UI to navigate over subdirectories
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-playlist': patch
---
Added config properties to change dynamically the group noun for all the components in the UI
+19
View File
@@ -0,0 +1,19 @@
---
'@backstage/plugin-catalog-react': minor
---
Attempt to load entity owner names in the EntityOwnerPicker through the `by-refs` endpoint. If `spec.profile.displayName` or `metadata.title` are populated, we now attempt to show those before showing the `humanizeEntityRef`'d version.
**BREAKING**: `EntityOwnerFilter` now uses the full entity ref instead of the `humanizeEntityRef`. If you rely on `EntityOwnerFilter.values` or the `queryParameters.owners` of `useEntityList`, you will need to adjust your code like the following.
```tsx
const { queryParameters: { owners } } = useEntityList();
// or
const { filter: { owners } } = useEntityList();
// Instead of,
if (owners.some(ref => ref === humanizeEntityRef(myEntity))) ...
// You'll need to use,
if (owners.some(ref => ref === stringifyEntityRef(myEntity))) ...
```
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder-react': patch
---
Add an indication that the validators are running when clicking `next` on each step of the form.
+62 -3
View File
@@ -1,5 +1,5 @@
{
"mode": "pre",
"mode": "exit",
"tag": "next",
"initialVersions": {
"example-app": "0.2.81",
@@ -216,22 +216,45 @@
"@backstage/plugin-scaffolder-backend-module-confluence-to-markdown": "0.0.0",
"@backstage/plugin-search-backend-module-catalog": "0.0.0",
"@backstage/plugin-search-backend-module-explore": "0.0.0",
"@backstage/plugin-search-backend-module-techdocs": "0.0.0"
"@backstage/plugin-search-backend-module-techdocs": "0.0.0",
"@backstage/backend-openapi-utils": "0.0.0",
"@backstage/cli-node": "0.0.0"
},
"changesets": [
"afraid-horses-argue",
"all-my-auth-wanna-ride-today",
"blue-walls-drop",
"bright-hats-compare",
"bright-pumpkins-bake",
"calm-geese-obey",
"calm-otters-destroy",
"chatty-coats-thank",
"clean-dolls-search",
"clean-items-draw",
"clean-teachers-thank",
"clever-lizards-whisper",
"cold-seahorses-greet",
"create-app-1679405836",
"create-app-1681222813",
"curly-boats-trade",
"curly-jobs-kneel",
"curly-steaks-mate",
"curvy-rocks-guess",
"dependabot-ff5881d",
"eight-trainers-smoke",
"eleven-bats-tease",
"eleven-coats-refuse",
"fair-roses-stare",
"famous-beds-break",
"famous-beds-repair",
"famous-olives-try",
"fast-gorillas-approve",
"fast-snakes-buy",
"flat-ways-compete",
"forty-adults-divide",
"forty-days-tell",
"forty-gorillas-help",
"fresh-lions-compete",
"fresh-schools-fly",
"funny-pots-hide",
"funny-rivers-grin",
@@ -242,54 +265,90 @@
"heavy-colts-wash",
"hungry-lies-cry",
"hungry-monkeys-reply",
"itchy-ads-sit",
"itchy-kiwis-unite",
"khaki-cars-drum",
"khaki-doors-compare",
"khaki-guests-turn",
"late-waves-march",
"lazy-apples-destroy",
"lazy-monkeys-worry",
"long-gorillas-remain",
"many-eggs-press",
"mean-rice-beg",
"mighty-lamps-cross",
"mighty-tips-flow",
"modern-snakes-check",
"nasty-nails-appear",
"neat-donkeys-work",
"neat-pears-argue",
"new-pigs-jam",
"odd-grapes-double",
"odd-plums-bake",
"old-cougars-sit",
"olive-cycles-join",
"olive-months-talk",
"orange-rabbits-jam",
"perfect-deers-add",
"plenty-eels-listen",
"poor-cars-fold",
"poor-horses-approve",
"popular-parents-crash",
"popular-radios-visit",
"pretty-carpets-cross",
"rare-seals-decide",
"renovate-179fa0e",
"renovate-3e8a992",
"renovate-8010f99",
"renovate-a9116b7",
"renovate-c574b04",
"rotten-carrots-cheer",
"serious-items-walk",
"seven-gifts-fetch",
"shaggy-crews-carry",
"short-panthers-float",
"silent-nails-bake",
"silly-adults-accept",
"six-jobs-hear",
"sixty-insects-visit",
"slimy-scissors-play",
"slow-ravens-destroy",
"smart-crabs-dream",
"soft-roses-cover",
"sour-buttons-collect",
"sour-dragons-cheat",
"sour-laws-walk",
"spicy-carrots-argue",
"stale-cobras-beg",
"stale-files-sniff",
"stale-paws-sparkle",
"strong-crews-repeat",
"stupid-laws-play",
"sweet-eels-hunt",
"swift-meals-live",
"tall-chairs-explain",
"tall-meals-dress",
"tall-oranges-own",
"ten-hounds-bathe",
"ten-mayflies-beam",
"tender-parrots-fry",
"tender-terms-return",
"thick-forks-prove",
"thin-spoons-prove",
"thirty-crabs-tell",
"tiny-apes-scream",
"tough-cameras-beam",
"tricky-beans-knock",
"twelve-parrots-camp",
"twelve-vans-sell",
"unlucky-snakes-smile",
"warm-buses-switch",
"weak-oranges-give",
"weak-turtles-arrive",
"wet-lamps-happen",
"wise-garlics-camp",
"witty-berries-love",
"witty-points-visit"
"witty-points-visit",
"yellow-candles-kiss"
]
}
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder-backend': patch
---
Updated the alpha `scaffolderPlugin` to not require options.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder-react': patch
---
Updated dependency `@rjsf/core-v5` to `npm:@rjsf/core@5.5.2`.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/cli': patch
---
Updated dependency `@swc/helpers` to `^0.5.0`.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder-backend': patch
---
Stripped entity types and namespace before passing to GitHub API
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-search-backend-module-elasticsearch': patch
---
fix ElasticSearch throwing error when index is missing
+7
View File
@@ -0,0 +1,7 @@
---
'@backstage/plugin-org': patch
---
Added `entityLimit` to change the limit of entities displayed in the ownership boxes.
[StoryBook Example for Ownership Card](https://backstage.io/storybook/?path=/story/plugins-org-ownership-card--default)
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-auth-backend': patch
---
Add common identify resolvers for `oidc` auth provider.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog-backend': patch
---
Fixed bug in the `DefaultCatalogProcessingEngine` where entities that contained multiple different types of relations for the same source entity would not properly trigger stitching for that source entity.
+9
View File
@@ -0,0 +1,9 @@
---
'@backstage/core-app-api': minor
---
The `AuthConnector` interface now supports specifying a set of scopes when
refreshing a session. The `DefaultAuthConnector` implementation passes the
`scope` query parameter to the auth-backend plugin appropriately. The
`RefreshingAuthSessionManager` passes any scopes in its `GetSessionRequest`
appropriately.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-kubernetes': patch
---
fixes a bug where an empty authorization header was provided to the proxy endpoint when a cluster had a server-side auth provider
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder-backend': minor
---
Allow for a commit message to differ from the PR title when publishing a GitHub pull request.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog-react': patch
---
Reverted the check if the selected options list is different than the query parameters list before invoking `setSelectedOptions` method. This was preventing updating list items when a query string was already present in the URL when loading the page.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-shortcuts': patch
---
Added the Analytics event in the save handler of AddShortcut and EditShortcut
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-auth-backend': patch
---
Export Azure Easy Auth provider so it can actually be used.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog-backend': minor
---
Add monorepo support to CodeOwnersProccesor.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/catalog-model': minor
---
Modified the regex for DNS label validation to support IDN domains
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/plugin-scaffolder-react': patch
'@backstage/plugin-scaffolder': patch
---
`scaffolder/next`: bump `rjsf` dependencies to `5.5.0`
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-kubernetes': patch
---
`KubernetesBackendClient` now requires a `kubernetesAuthProvidersApi` value to be provided. `KubernetesApi` interface now has a proxy method requirement.
+7
View File
@@ -0,0 +1,7 @@
---
'@backstage/plugin-events-backend': patch
---
Export `DefaultEventBroker` to allow decoupling of the catalog and events backends in the `example-backend`.
Please look at `plugins/events-backend/README.md` for the currently advised way to set up the event backend and catalog providers.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-techdocs': patch
---
Fix a bug in sub-path navigation due to double addition of a sub-path if one was set up in `app.baseUrl`.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/backend-openapi-utils': patch
---
New plugin! Primary focus is to support types on `Router`s in backend packages. Developers can use the `ApiRouter` from this package in their packages to support a typed experience based on their OpenAPI specs. The `ApiRouter` supports request bodies, response bodies, query parameters and path parameters, as well as full path-based context of the above. This means no more guessing on an endpoint like `req.post('/not-my-route', (req, res)=>{res.send(req.body.badparam)})`. Typescript would catch `/not-my-route`, `req.body.badparam`, `res.send(req.body.badparam)`.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-stack-overflow-backend': minor
---
Adding support for v2.3 API and PAT authentication
+21
View File
@@ -0,0 +1,21 @@
---
'@backstage/core-components': minor
---
**BREAKING:** Removing `Tabs` component from `core-components` as it is neither used in the core Backstage app nor in the monorepo plugins. If you are using this component in your instance please consider replacing it with the [Material UI `Tabs`](https://v4.mui.com/components/tabs/#tabs) component like the following:
```diff
- <Tabs
- tabs={[{
- icon: <AccessAlarmIcon />,
- content: <div>Label</div>,
- }]}
- />
+ <Tabs>
+ <Tab
+ label = "Label"
+ icon = { <AccessAlarmIcon /> }
+ />
+ </Tabs>
```
+8 -7
View File
@@ -26,13 +26,13 @@ yarn.lock @backstage/maintainers @back
/plugins/azure-devops-common @backstage/maintainers @marleypowell @awanlin
/plugins/bitbucket-cloud-common @backstage/maintainers @pjungermann
/plugins/bitrise @backstage/maintainers @backstage/sda-se-reviewers
/plugins/catalog @backstage/maintainers @backstage/catalog-core
/plugins/catalog-* @backstage/maintainers @backstage/catalog-core
/plugins/catalog-backend-module-aws @backstage/maintainers @backstage/catalog-core @pjungermann
/plugins/catalog-backend-module-bitbucket-cloud @backstage/maintainers @backstage/catalog-core @pjungermann
/plugins/catalog-backend-module-msgraph @backstage/maintainers @backstage/catalog-core @pjungermann
/plugins/catalog-backend-module-puppetdb @backstage/maintainers @backstage/catalog-core @tdabasinskas
/plugins/catalog-graph @backstage/maintainers @backstage/catalog-core @backstage/sda-se-reviewers
/plugins/catalog @backstage/maintainers @backstage/catalog-maintainers
/plugins/catalog-* @backstage/maintainers @backstage/catalog-maintainers
/plugins/catalog-backend-module-aws @backstage/maintainers @backstage/catalog-maintainers @pjungermann
/plugins/catalog-backend-module-bitbucket-cloud @backstage/maintainers @backstage/catalog-maintainers @pjungermann
/plugins/catalog-backend-module-msgraph @backstage/maintainers @backstage/catalog-maintainers @pjungermann
/plugins/catalog-backend-module-puppetdb @backstage/maintainers @backstage/catalog-maintainers @tdabasinskas
/plugins/catalog-graph @backstage/maintainers @backstage/catalog-maintainers @backstage/sda-se-reviewers
/plugins/circleci @backstage/maintainers @adamdmharvey
/plugins/cloudbuild @backstage/maintainers @trivago/ebarrios
/plugins/code-coverage @backstage/maintainers @alde @nissayeva
@@ -67,6 +67,7 @@ yarn.lock @backstage/maintainers @back
/plugins/newrelic-dashboard @backstage/maintainers @mufaddal7
/plugins/playlist @backstage/maintainers @kuangp
/plugins/playlist-* @backstage/maintainers @kuangp
/plugins/puppetdb @backstage/maintainers @tdabasinskas
/plugins/rollbar @backstage/maintainers @andrewthauer
/plugins/rollbar-backend @backstage/maintainers @andrewthauer
/plugins/scaffolder-backend-module-rails @backstage/maintainers @angeliski
+3
View File
@@ -92,6 +92,9 @@ jobs:
- name: verify api reference
run: node scripts/verify-api-reference.js
- name: verify openapi yaml file matches generated ts file
run: yarn backstage-repo-tools schema:openapi:verify
- name: verify doc links
run: node scripts/verify-links.js
+8 -1
View File
@@ -14,6 +14,7 @@ jobs:
if: ${{ github.event.workflow_run.conclusion == 'success' }}
outputs:
compose-file-cache-key: ${{ env.COMPOSE_FILE_HASH }}
git-ref: ${{ env.GIT_REF }}
pr-number: ${{ env.PR_NUMBER }}
steps:
- name: 'Download artifacts'
@@ -67,10 +68,15 @@ jobs:
id: pr
run: echo "PR_NUMBER=${{ fromJSON(env.EVENT_JSON).number }}" >> $GITHUB_ENV
- name: Read Git Ref From Event Object
id: ref
run: echo "GIT_REF=${{ fromJSON(env.EVENT_JSON).pull_request.head.sha }}" >> $GITHUB_ENV
- name: DEBUG - Print Job Outputs
if: ${{ runner.debug }}
run: |
echo "PR number: ${{ env.PR_NUMBER }}"
echo "Git Ref: ${{ env.GIT_REF }}"
echo "Compose file hash: ${{ env.COMPOSE_FILE_HASH }}"
cat event.json
@@ -85,8 +91,9 @@ jobs:
# and this reusable workflow will delete the preview deployment.
compose-file-cache-key: ${{ needs.cache-compose-file.outputs.compose-file-cache-key }}
compose-file-cache-path: docker-compose.rendered.yml
server: https://app.uffizzi.com
git-ref: ${{ needs.cache-compose-file.outputs.git-ref }}
pr-number: ${{ needs.cache-compose-file.outputs.pr-number }}
server: https://app.uffizzi.com
permissions:
contents: read
pull-requests: write
@@ -0,0 +1,30 @@
name: Verify Accessibility Core features
on:
pull_request:
branches: [master]
paths:
- 'plugins/catalog/**'
- 'plugins/techdocs/**'
- 'plugins/scaffolder/**'
- 'plugins/search/**'
jobs:
lhci:
name: Lighthouse
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Use Node.js 16.x
uses: actions/setup-node@v3
with:
node-version: 16.x
- name: yarn install
uses: backstage/actions/yarn-install@v0.6.3
with:
cache-prefix: ${{ runner.os }}-16.x
- name: run Lighthouse CI
run: |
npm install -g @lhci/cli@0.11.x
lhci autorun
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+4
View File
@@ -152,3 +152,7 @@ tsconfig.tmp.json
# vscode database functionality support files
*.session.sql
# Lighthouse CI Reports
**/.lighthouseci/*
!**/.lighthouseci/scripts
+11
View File
@@ -0,0 +1,11 @@
'use strict';
module.exports = async (browser, context) => {
// launch browser for LHCI
const page = await browser.newPage();
await page.goto('http://localhost:3000');
await page.evaluate(() => {
localStorage.setItem('@backstage/core:SignInPage:provider', 'guest');
});
await page.goto('http://localhost:3000');
};
+6
View File
@@ -237,3 +237,9 @@ _You can do this by using the [Adopter form](https://info.backstage.spotify.com/
| [Comcast](https://comcast.github.io/) | [Ryan Emerle](https://github.com/remerle) | Developer portal enabling discovery of products, services, and documentation throughout the enterprise to ultimately reduce friction and improve time-to-market. |
| [Syntasso](https://www.syntasso.io/) | [@syntassodev](https://github.com/syntassodev) | Backstage is used as a optional UI for the [Kratix project](https://kratix.io), a framework for building platforms.
| [Bankdata](https://www.bankdata.dk) | [Thomas Grønbæk](https://www.linkedin.com/in/thomas-grønbæk/) | We are assessing Backstage as our internal developer portal @Bankdata. Goal is to reduce cognitive load and friction for developers and thereby improving developer experience, onboarding and productivity. Expect use of Software Catalog for discoverability and ownership, Tech Docs and Software Templates to integrate tooling and best practices.
| [B3](https://www.b3.com.br/) | [Marcos Rodrigues](https://www.linkedin.com/in/marcos-rodrigues-cloud/) | B3 (Brazilian Stock Exchange) will implement a self-service platform focused on software development based on Backstage. The tool will primarily focus on product development and software engineering teams, as well as professionals from other areas who are also involved in software delivery. The new platform will function as a portal where teams can access tools, codes, and templates that have already been tested and are available, serving as building blocks for the development of new solutions. |
| [Porto](https://www.portoseguro.com.br/) | [Camilo Alessandro](https://www.linkedin.com/in/camilo-alessandro/) | Porto (Brazilian insurance company) Centralized developer portal with software catalog, application templates, maturity radar, component taxonomy standardization, and automation in the integration with DevSecOps processes. |
| [Einride](https://github.com/einride) | [@odsod](https://github.com/odsod/) | We use Backstage to create a great developer experience across Einride's entire software stack - from autonomous and electric vehicles to cloud systems - and we've developed a [Backstage Go SDK](https://github.com/einride/backstage-go) for interfacing with Backstage from our Go tooling.
| [Chartboost](https://www.chartboost.com)| [@brucearctor](https://github.com/brucearctor), [@ArtemChekunov](https://github.com/ArtemChekunov) | We are building our internal develper portal on top of Backstage.|
| [Quantum Metric](https://www.quantummetric.com/) | [Eric Irwin](https://www.linkedin.com/in/ericirwin1124/) | Backstage is used within our Developer Experience Platform (DXP) in order to increase self-service, standardization and discoverability across our Engineering teams. |
| [VodafoneZiggo](https://www.vodafoneziggo.nl/) | [Peter Macdonald](https://github.com/Parsifal-M) | We use Backstage as our go-to platform for managing our internal tools and services. With Backstage, we can easily discover and access all the services we need to do our work, whether it's deploying code, managing infrastructure, or accessing documentation. We appreciate the standardized, consistent interface and the ability to easily create custom plugins to integrate with our existing workflows. Overall, Backstage is streamlining our internal operations and helps us work more efficiently as a team. |
+26 -18
View File
@@ -20,9 +20,14 @@ These are the separate project areas of Backstage, each with their own project a
Team: @backstage/catalog-maintainers
| Name | Organization | Team | GitHub | Discord |
| ---- | ------------ | --------- | ---------------------------- | ------- |
| TBD | Spotify | Chipmunks | [TBD](http://github.com/TBD) | - |
Scope: The catalog plugin and catalog model
| Name | Organization | Team | GitHub | Discord |
| -------------- | ------------ | --------- | ---------------------------------------- | ---------------- |
| Rickard Dybeck | Spotify | Chipmunks | [alde](http://github.com/alde) | rdybeck#8083 |
| Mike Blockley | Spotify | Chipmunks | [mikeyhc](http://github.com/mikeyhc) | mikey-spot#5363 |
| Elon Jefferson | Spotify | Chipmunks | [Edje-C](http://github.com/Edje-C) | elon-spotty#6086 |
| Nurit Izrailov | Spotify | Chipmunks | [nuritizra](http://github.com/nuritizra) | - |
### Discoverability
@@ -82,21 +87,24 @@ Scope: The TechDocs plugin and related tooling
## Organization Members
| Name | Organization | GitHub | Discord |
| ------------------------------ | ------------------------- | ----------------------------------------------- | ------------------------------ |
| Adam Harvey | Cisco | [adamdmharvey](https://github.com/adamdmharvey) | `adamharvey#3739` |
| Andre Wanlin | Keyloop | [awanlin](https://github.com/awanlin) | `Ahhhndre#3095` |
| Andrew Thauer | Wealthsimple | [andrewthauer](https://github.com/andrewthauer) | `andrewthauer#3060` |
| Brian Fletcher | RoadieHQ | [punkle](https://github.com/punkle) | `Brian Fletcher#7051` |
| Carlos Esteban Lopez Jaramillo | VMWare | [luchillo17](https://github.com/luchillo17) | `luchillo17#8777` |
| David Tuite | Roadie | [dtuite](https://github.com/dtuite) | `David Tuite (roadie.io)#1010` |
| Himanshu Mishra | Harness.io | [OrkoHunter](https://github.com/OrkoHunter) | `OrkoHunter#1520` |
| Jamie Klassen | VMware | [jamieklassen](https://github.com/jamieklassen) | `jamieklassen#3047` |
| Jussi Hallila | Roadie | [Xantier](https://github.com/Xantier) | `Xantier#0086` |
| Mark Avery | Cvent | [webark](https://github.com/webark) | `webark#8471` |
| Patrick Jungermann | Bonial International GmbH | [pjungermann](https://github.com/pjungermann) | `pjungermann#6933` |
| Phil Kuang | FactSet Research Systems | [kuangp](https://github.com/kuangp) | `pkuang#3202` |
| Taras Mankovski | Frontside | [taras](https://github.com/taras) | `tarasm#1256` |
| Name | Organization | GitHub | Discord |
| ------------------------------ | ------------------------- | ----------------------------------------------------- | ------------------------------ |
| Adam Harvey | Cisco | [adamdmharvey](https://github.com/adamdmharvey) | `adamharvey#3739` |
| Andre Wanlin | Keyloop | [awanlin](https://github.com/awanlin) | `Ahhhndre#3095` |
| Andrew Thauer | Wealthsimple | [andrewthauer](https://github.com/andrewthauer) | `andrewthauer#3060` |
| 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` |
| Himanshu Mishra | Harness.io | [OrkoHunter](https://github.com/OrkoHunter) | `OrkoHunter#1520` |
| Irma Solakovic | Roadie.io | [Irma12](https://github.com/Irma12) | `Irma#7629` |
| Jamie Klassen | VMware | [jamieklassen](https://github.com/jamieklassen) | `jamieklassen#3047` |
| Jorge Lainfiesta | Roadie.io | [jorgelainfiesta](https://github.com/jorgelainfiesta) | `jorgel#8733` |
| Jussi Hallila | Roadie.io | [Xantier](https://github.com/Xantier) | `Xantier#0086` |
| Mark Avery | Cvent | [webark](https://github.com/webark) | `webark#8471` |
| Miklós Kiss | Roadie.io | [kissmikijr](https://github.com/kissmikijr) | `Miklos#7416` |
| Patrick Jungermann | Bonial International GmbH | [pjungermann](https://github.com/pjungermann) | `pjungermann#6933` |
| Phil Kuang | FactSet Research Systems | [kuangp](https://github.com/kuangp) | `pkuang#3202` |
| Taras Mankovski | Frontside | [taras](https://github.com/taras) | `tarasm#1256` |
## Emeritus Core Maintainers
+3
View File
@@ -123,6 +123,9 @@ proxy:
headers:
St2-Api-Key: ${ST2_API_KEY}
'/puppetdb':
target: https://your.puppetdb.instance.com
organization:
name: My Company
+4 -2
View File
@@ -1,10 +1,12 @@
---
id: azure-easy-auth
id: easy-auth
title: Azure EasyAuth Provider
sidebar_label: Azure EasyAuth
sidebar_label: Azure Easy Auth
description: Adding Azure's EasyAuth Proxy as an authentication provider in Backstage
---
The Backstage `core-plugin-api` package comes with a Microsoft authentication provider that can authenticate users using Azure Active Directory for PaaS service hosted in Azure that support Easy Auth, such as Azure App Services.
## Backstage Changes
Add the following into your `app-config.yaml` or `app-config.production.yaml` file
+2 -5
View File
@@ -37,10 +37,6 @@ The required steps in the host build are to install dependencies with
`yarn install`, generate type definitions using `yarn tsc`, and build the backend
package with `yarn build:backend`.
> NOTE: If you created your app prior to 2021-02-18, follow the
> [migration step](https://github.com/backstage/backstage/releases/tag/release-2021-02-18)
> to move from `backend:build` to `backend:bundle`.
In a CI workflow it might look something like this:
```bash
@@ -50,7 +46,8 @@ yarn install --frozen-lockfile
yarn tsc
# Build the backend, which bundles it all up into the packages/backend/dist folder.
yarn build:backend
# The configuration files here should match the one you use inside the Dockerfile below.
yarn build:backend --config app-config.yaml
```
Once the host build is complete, we are ready to build our image. The following
+7 -39
View File
@@ -14,42 +14,16 @@ Kubernetes backend plugin's proxy endpoint to allow them to make arbitrary
requests to the [REST
API](https://kubernetes.io/docs/reference/using-api/api-concepts/).
Here is a snippet fetching namespaces from a cluster configured with the
`google` [auth provider](https://backstage.io/docs/features/kubernetes/configuration#clustersauthprovider):
Here is a snippet fetching namespaces using the `KubernetesBackendClient` library
```typescript
import {
discoveryApiRef,
googleAuthApiRef,
useApi,
identityApiRef,
} from '@backstage/core-plugin-api';
import { useApi } from '@backstage/core-plugin-api';
import { kubernetesApiRef } from '@backstage/plugin-kubernetes';
const CLUSTER_NAME = ''; // use a known cluster name
// get a bearer token from Google
const googleAuthApi = useApi(googleAuthApiRef);
const token = await googleAuthApi.getAccessToken(
'https://www.googleapis.com/auth/cloud-platform',
);
// get a backstage ID token
const identityApi = useApi(identityApiRef);
const { token: userToken } = await identityApi.getCredentials();
const discoveryApi = useApi(discoveryApiRef);
const kubernetesBaseUrl = await discoveryApi.getBaseUrl('kubernetes');
const kubernetesProxyEndpoint = `${kubernetesBaseUrl}/proxy`;
// fetch namespaces
await fetch(`${kubernetesProxyEndpoint}/api/v1/namespaces`, {
method: 'GET',
headers: {
'Backstage-Kubernetes-Cluster': CLUSTER_NAME,
'Backstage-Kubernetes-Authorization': `Bearer ${token}`,
Authorization: `Bearer ${userToken}`,
},
});
const kubernetesApi = useApi(kubernetesApiRef);
await kubernetesApi.proxy(CLUSTER_NAME, '/api/v1/namespaces');
```
## How it works
@@ -69,15 +43,9 @@ Overall, the only changes to each request are:
- the endpoint's base URL prefix is stripped.
- the `Backstage-Kubernetes-Authorization` header becomes the `Authorization` header that is used when forwarding the request.
## Authentication
The proxy expects a `KubernetesAuthTranslator` to be provided that is used to decorate all requests with `Auth` by default. It does this by supplying a `serviceAccountToken` field into `clusterDetails` using the defined `authProvider` in `clusterDetails`.
Until some security and permission decisions are made (see [this
conversation](https://github.com/backstage/backstage/pull/13026/files#r1029376939)
for context), contributors consuming the proxy endpoint in their plugin code are
responsible for negotiating their own bearer token out-of-band. This requires
knowing some auth details about the cluster being contacted -- in practice, only
clusters with [client side auth
providers](https://backstage.io/docs/features/kubernetes/authentication#client-side-providers) can reasonably be reached.
## Authentication
The proxy has no provisions for mTLS, so it cannot be used to connect to
clusters using the [x509 Client
@@ -400,12 +400,8 @@ follows.
// ...
"relations": [
{
"target": {
"kind": "group",
"namespace": "default",
"name": "dev.infra"
},
"type": "ownedBy"
"type": "ownedBy",
"targetRef": "group:default/dev.infra"
}
],
"spec": {
@@ -417,11 +413,11 @@ follows.
The fields of a relation are:
| Field | Type | Description |
| ---------- | ------ | -------------------------------------------------------------------------------- |
| `target` | Object | A complete [compound reference](references.md) to the other end of the relation. |
| `type` | String | The type of relation FROM a source entity TO the target entity. |
| `metadata` | Object | Reserved for future use. |
| Field | Type | Description |
| ----------- | ------ | -------------------------------------------------------------------------- |
| `targetRef` | String | A full [entity reference](references.md) to the other end of the relation. |
| `type` | String | The type of relation FROM a source entity TO the target entity. |
| `metadata` | Object | Reserved for future use. |
Entity descriptor YAML files are not supposed to contain this field. Instead,
catalog processors analyze the entity descriptor data and its surroundings, and
+1 -1
View File
@@ -67,7 +67,7 @@ The parameters available are:
- **`host:`** _(optional)_ Leave empty for Cloud hosted, otherwise set to your self-hosted instance host.
- **`organization:`** Your Organization slug (or Collection for on-premise users). Required.
- **`project:`** _(optional)_ Your project slug. Wildcards are supported as show on the examples above. If not set, all projects will be searched. For a project name containing spaces, use both single and double quotes as in `project: '"My Project Name"'`.
- **`project:`** _(required)_ Your project slug. Wildcards are supported as shown on the examples above. Using '\*' will search all projects. For a project name containing spaces, use both single and double quotes as in `project: '"My Project Name"'`.
- **`repository:`** _(optional)_ The repository name. Wildcards are supported as show on the examples above. If not set, all repositories will be searched.
- **`path:`** _(optional)_ Where to find catalog-info.yaml files. Defaults to /catalog-info.yaml.
- **`branch:`** _(optional)_ The branch name to use.
+18 -17
View File
@@ -76,36 +76,37 @@ Additionally, you need to decide how you want to receive events from external so
Set up your provider
```ts title="packages/backend/src/plugins/catalogEventBasedProviders.ts"
```ts title="packages/backend/src/plugins/catalog.ts"
import { CatalogBuilder } from '@backstage/plugin-catalog-backend';
/* highlight-add-start */
import { CatalogClient } from '@backstage/catalog-client';
import { BitbucketCloudEntityProvider } from '@backstage/plugin-catalog-backend-module-bitbucket-cloud';
/* highlight-add-end */
import { EntityProvider } from '@backstage/plugin-catalog-node';
import { EventSubscriber } from '@backstage/plugin-events-node';
import { ScaffolderEntitiesProcessor } from '@backstage/plugin-scaffolder-backend';
import { Router } from 'express';
import { PluginEnvironment } from '../types';
export default async function createCatalogEventBasedProviders(
/* highlight-remove-next-line */
_: PluginEnvironment,
/* highlight-add-next-line */
export default async function createPlugin(
env: PluginEnvironment,
): Promise<Array<EntityProvider & EventSubscriber>> {
const providers: Array<
(EntityProvider & EventSubscriber) | Array<EntityProvider & EventSubscriber>
> = [];
// add your event-based entity providers here
): Promise<Router> {
const builder = await CatalogBuilder.create(env);
builder.addProcessor(new ScaffolderEntitiesProcessor());
/* highlight-add-start */
providers.push(
BitbucketCloudEntityProvider.fromConfig(env.config, {
const bitbucketCloudProvider = BitbucketCloudEntityProvider.fromConfig(
env.config,
{
catalogApi: new CatalogClient({ discoveryApi: env.discovery }),
logger: env.logger,
scheduler: env.scheduler,
tokenManager: env.tokenManager,
}),
},
);
env.eventBroker.subscribe(bitbucketCloudProvider);
builder.addEntityProvider(bitbucketCloudProvider);
/* highlight-add-end */
return providers.flat();
const { processingEngine, router } = await builder.build();
await processingEngine.start();
return router;
}
```
+23 -24
View File
@@ -69,37 +69,36 @@ Additionally, you need to decide how you want to receive events from external so
Set up your provider
```ts title="packages/backend/src/plugins/catalogEventBasedProviders.ts"
```ts title="packages/backend/src/plugins/catalog.ts"
import { CatalogBuilder } from '@backstage/plugin-catalog-backend';
/* highlight-add-next-line */
import { GithubEntityProvider } from '@backstage/plugin-catalog-backend-module-github';
import { EntityProvider } from '@backstage/plugin-catalog-node';
import { EventSubscriber } from '@backstage/plugin-events-node';
import { ScaffolderEntitiesProcessor } from '@backstage/plugin-scaffolder-backend';
import { Router } from 'express';
import { PluginEnvironment } from '../types';
export default async function createCatalogEventBasedProviders(
/* highlight-remove-next-line */
_: PluginEnvironment,
/* highlight-add-next-line */
export default async function createPlugin(
env: PluginEnvironment,
): Promise<Array<EntityProvider & EventSubscriber>> {
const providers: Array<
(EntityProvider & EventSubscriber) | Array<EntityProvider & EventSubscriber>
> = [];
// add your event-based entity providers here
): Promise<Router> {
const builder = await CatalogBuilder.create(env);
builder.addProcessor(new ScaffolderEntitiesProcessor());
/* highlight-add-start */
providers.push(
GithubEntityProvider.fromConfig(env.config, {
logger: env.logger,
// optional: alternatively, use scheduler with schedule defined in app-config.yaml
schedule: env.scheduler.createScheduledTaskRunner({
frequency: { minutes: 30 },
timeout: { minutes: 3 },
}),
// optional: alternatively, use schedule
scheduler: env.scheduler,
const githubProvider = GithubEntityProvider.fromConfig(env.config, {
logger: env.logger,
// optional: alternatively, use scheduler with schedule defined in app-config.yaml
schedule: env.scheduler.createScheduledTaskRunner({
frequency: { minutes: 30 },
timeout: { minutes: 3 },
}),
);
// optional: alternatively, use schedule
scheduler: env.scheduler,
});
env.eventBroker.subscribe(githubProvider);
builder.addEntityProvider(demoProvider);
/* highlight-add-end */
return providers.flat();
const { processingEngine, router } = await builder.build();
await processingEngine.start();
return router;
}
```
+15 -17
View File
@@ -79,25 +79,21 @@ Additionally, you need to decide how you want to receive events from external so
Set up your provider
```ts title="packages/backend/src/plugins/catalogEventBasedProviders.ts"
```ts title="packages/backend/src/plugins/catalog.ts"
import { CatalogBuilder } from '@backstage/plugin-catalog-backend';
/* highlight-add-next-line */
import { GithubOrgEntityProvider } from '@backstage/plugin-catalog-backend-module-github';
import { EntityProvider } from '@backstage/plugin-catalog-node';
import { EventSubscriber } from '@backstage/plugin-events-node';
import { ScaffolderEntitiesProcessor } from '@backstage/plugin-scaffolder-backend';
import { Router } from 'express';
import { PluginEnvironment } from '../types';
export default async function createCatalogEventBasedProviders(
/* highlight-remove-next-line */
_: PluginEnvironment,
/* highlight-add-next-line */
export default async function createPlugin(
env: PluginEnvironment,
): Promise<Array<EntityProvider & EventSubscriber>> {
const providers: Array<
(EntityProvider & EventSubscriber) | Array<EntityProvider & EventSubscriber>
> = [];
// add your event-based entity providers here
): Promise<Router> {
const builder = await CatalogBuilder.create(env);
builder.addProcessor(new ScaffolderEntitiesProcessor());
/* highlight-add-start */
providers.push(
GithubOrgEntityProvider.fromConfig(env.config, {
const githubOrgProvider = GithubOrgEntityProvider.fromConfig(env.config, {
id: 'production',
orgUrl: 'https://github.com/backstage',
logger: env.logger,
@@ -105,10 +101,12 @@ export default async function createCatalogEventBasedProviders(
frequency: { minutes: 60 },
timeout: { minutes: 15 },
}),
}),
);
env.eventBroker.subscribe(githubOrgProvider);
builder.addEntityProvider(githubOrgProvider);
/* highlight-add-end */
return providers.flat();
const { processingEngine, router } = await builder.build();
await processingEngine.start();
return router;
}
```
@@ -91,7 +91,7 @@ This enables decisions based on characteristics of the resource, but it's import
Install the missing module:
```bash
$ yarn workspace @internal/plugin-todo-list-backend add @backstage/plugin-permission-node zod@~3.18.0
$ yarn workspace @internal/plugin-todo-list-backend add @backstage/plugin-permission-node zod
```
Create a new `plugins/todo-list-backend/src/service/rules.ts` file and append the following code:
+2 -1
View File
@@ -184,9 +184,10 @@ export async function createRouter(
options: RouterOptions,
): Promise<express.Router> {
const router = Router();
const { identity } = options;
router.post('/example', async (req, res) => {
const identity = await identity.getIdentity({ request: req });
const userIdentity = await identity.getIdentity({ request: req });
...
});
```
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+60
View File
@@ -0,0 +1,60 @@
/*
* Copyright 2023 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
module.exports = {
ci: {
collect: {
url: [
/** Software Catalog */
'http://localhost:3000/catalog',
'http://localhost:3000/catalog-import',
'http://localhost:3000/catalog/default/component/backstage',
/** TechDocs */
'http://localhost:3000/docs',
'http://localhost:3000/docs/default/component/backstage',
/** Software Templates */
'http://localhost:3000/create',
'http://localhost:3000/create/tasks',
'http://localhost:3000/create/actions',
'http://localhost:3000/create/edit',
'http://localhost:3000/create/templates/default/react-ssr-template',
/** Search */
'http://localhost:3000/search',
],
settings: {
onlyCategories: ['accessibility'],
// need to disable storage reset because of auth
disableStorageReset: true,
output: ['html', 'json'],
outputPath: './.lighthouseci/reports',
preset: 'desktop',
},
startServerCommand: 'yarn dev',
startServerReadyTimeout: 600000,
numberOfRuns: 1,
puppeteerScript: './.lighthouseci/scripts/guest-auth.js',
startServerReadyPattern: 'Listening on :7007',
},
assert: {
assertions: {
'categories:performance': 'off',
'categories:pwa': 'off',
'categories:best-practices': 'off',
'categories:seo': 'off',
'categories:accessibility': ['error', { minScore: 0.85 }],
},
},
},
};
@@ -0,0 +1,10 @@
---
title: API Spectral Linter
author: dweber019
authorUrl: https://github.com/dweber019
category: Linting
description: API Spectral Linter is a quality assurance tool that checks the compliance of API's specifications Spectral rule sets.
documentation: https://github.com/dweber019/backstage-plugin-api-docs-spectral-linter
iconUrl: https://raw.githubusercontent.com/dweber019/backstage-plugin-api-docs-spectral-linter/main/plugins/api-docs-spectral-linter/docs/pluginIcon.png
npmPackageName: '@dweber019/backstage-plugin-api-docs-spectral-linter'
addedDate: '2023-03-27'
@@ -0,0 +1,10 @@
---
title: Bulletin Board
author: v-ngu
authorUrl: https://github.com/v-ngu
category: Discovery
description: Share interesting ideas, news and links with your teammates within Backstage.
documentation: https://github.com/v-ngu/backstage-plugin-bulletin-board
iconUrl: /img/bulletin-board.png
npmPackageName: 'backstage-plugin-bulletin-board'
addedDate: '2023-04-01'
+12
View File
@@ -0,0 +1,12 @@
---
title: Microcks
author: Microcks
authorUrl: https://microcks.io
category: Discovery
description: Import API definitions (OpenAPI, AsyncAPI, gRPC) from Microcks instances, linking to their mock endpoints and test results.
documentation: https://github.com/microcks/microcks-backstage-provider
iconUrl: https://microcks.io/images/microcks-logo-blue.png
npmPackageName: '@microcks/microcks-backstage-provider'
tags:
- mock
addedDate: '2023-04-06'
@@ -6,7 +6,6 @@ description: |
The plugin integrates with your Microsoft Calendar.
It displays all your calendars and events in it.
documentation: https://github.com/backstage/backstage/tree/master/plugins/microsoft-calendar
iconUrl: /img/outlook-statusneo.png
npmPackageName: '@backstage/plugin-microsoft-calendar'
tags:
- Microsoft
@@ -0,0 +1,12 @@
title: Microsoft Forms
author: ZcMander
authorUrl: https://github.com/zcmander
category: Productivity
description: Embed a form into the entity page with ease!
documentation: https://github.com/zcmander/backstage-plugin-msforms
iconUrl: /img/microsoft-forms.png
npmPackageName: '@zcmander/backstage-plugin-msforms'
tags:
- Microsoft
- forms
addedDate: '2023-04-11'
+13
View File
@@ -0,0 +1,13 @@
---
title: PuppetDB
author: TDabasinskas
authorUrl: https://github.com/tdabasinskas
category: Configuration Management
description: Visualize resource information and Puppet facts from PuppetDB.
documentation: https://github.com/backstage/backstage/blob/master/plugins/puppetdb/README.md
iconUrl: /img/puppet.png
npmPackageName: '@backstage/plugin-puppetdb'
tags:
- puppet
- puppetdb
addedDate: '2023-04-06'
+1 -1
View File
@@ -32,7 +32,7 @@
"@docusaurus/core": "2.4.0",
"@docusaurus/plugin-client-redirects": "^2.3.1",
"@docusaurus/preset-classic": "2.4.0",
"@swc/core": "^1.3.36",
"@swc/core": "^1.3.46",
"clsx": "^1.1.1",
"docusaurus-plugin-sass": "^0.2.3",
"prism-react-renderer": "^1.3.5",
+4 -3
View File
@@ -277,15 +277,16 @@
"items": [
"auth/auth0/provider",
"auth/atlassian/provider",
"auth/bitbucket/provider",
"auth/microsoft/provider",
"auth/microsoft/easy-auth",
"auth/bitbucket/provider",
"auth/github/provider",
"auth/gitlab/provider",
"auth/google/provider",
"auth/google/gcp-iap-auth",
"auth/okta/provider",
"auth/onelogin/provider",
"auth/oauth2-proxy/provider"
"auth/oauth2-proxy/provider",
"auth/onelogin/provider"
]
},
"auth/identity-resolver",
Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

+50 -45
View File
@@ -2624,90 +2624,92 @@ __metadata:
languageName: node
linkType: hard
"@swc/core-darwin-arm64@npm:1.3.42":
version: 1.3.42
resolution: "@swc/core-darwin-arm64@npm:1.3.42"
"@swc/core-darwin-arm64@npm:1.3.50":
version: 1.3.50
resolution: "@swc/core-darwin-arm64@npm:1.3.50"
conditions: os=darwin & cpu=arm64
languageName: node
linkType: hard
"@swc/core-darwin-x64@npm:1.3.42":
version: 1.3.42
resolution: "@swc/core-darwin-x64@npm:1.3.42"
"@swc/core-darwin-x64@npm:1.3.50":
version: 1.3.50
resolution: "@swc/core-darwin-x64@npm:1.3.50"
conditions: os=darwin & cpu=x64
languageName: node
linkType: hard
"@swc/core-linux-arm-gnueabihf@npm:1.3.42":
version: 1.3.42
resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.42"
"@swc/core-linux-arm-gnueabihf@npm:1.3.50":
version: 1.3.50
resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.50"
conditions: os=linux & cpu=arm
languageName: node
linkType: hard
"@swc/core-linux-arm64-gnu@npm:1.3.42":
version: 1.3.42
resolution: "@swc/core-linux-arm64-gnu@npm:1.3.42"
"@swc/core-linux-arm64-gnu@npm:1.3.50":
version: 1.3.50
resolution: "@swc/core-linux-arm64-gnu@npm:1.3.50"
conditions: os=linux & cpu=arm64 & libc=glibc
languageName: node
linkType: hard
"@swc/core-linux-arm64-musl@npm:1.3.42":
version: 1.3.42
resolution: "@swc/core-linux-arm64-musl@npm:1.3.42"
"@swc/core-linux-arm64-musl@npm:1.3.50":
version: 1.3.50
resolution: "@swc/core-linux-arm64-musl@npm:1.3.50"
conditions: os=linux & cpu=arm64 & libc=musl
languageName: node
linkType: hard
"@swc/core-linux-x64-gnu@npm:1.3.42":
version: 1.3.42
resolution: "@swc/core-linux-x64-gnu@npm:1.3.42"
"@swc/core-linux-x64-gnu@npm:1.3.50":
version: 1.3.50
resolution: "@swc/core-linux-x64-gnu@npm:1.3.50"
conditions: os=linux & cpu=x64 & libc=glibc
languageName: node
linkType: hard
"@swc/core-linux-x64-musl@npm:1.3.42":
version: 1.3.42
resolution: "@swc/core-linux-x64-musl@npm:1.3.42"
"@swc/core-linux-x64-musl@npm:1.3.50":
version: 1.3.50
resolution: "@swc/core-linux-x64-musl@npm:1.3.50"
conditions: os=linux & cpu=x64 & libc=musl
languageName: node
linkType: hard
"@swc/core-win32-arm64-msvc@npm:1.3.42":
version: 1.3.42
resolution: "@swc/core-win32-arm64-msvc@npm:1.3.42"
"@swc/core-win32-arm64-msvc@npm:1.3.50":
version: 1.3.50
resolution: "@swc/core-win32-arm64-msvc@npm:1.3.50"
conditions: os=win32 & cpu=arm64
languageName: node
linkType: hard
"@swc/core-win32-ia32-msvc@npm:1.3.42":
version: 1.3.42
resolution: "@swc/core-win32-ia32-msvc@npm:1.3.42"
"@swc/core-win32-ia32-msvc@npm:1.3.50":
version: 1.3.50
resolution: "@swc/core-win32-ia32-msvc@npm:1.3.50"
conditions: os=win32 & cpu=ia32
languageName: node
linkType: hard
"@swc/core-win32-x64-msvc@npm:1.3.42":
version: 1.3.42
resolution: "@swc/core-win32-x64-msvc@npm:1.3.42"
"@swc/core-win32-x64-msvc@npm:1.3.50":
version: 1.3.50
resolution: "@swc/core-win32-x64-msvc@npm:1.3.50"
conditions: os=win32 & cpu=x64
languageName: node
linkType: hard
"@swc/core@npm:^1.3.36":
version: 1.3.42
resolution: "@swc/core@npm:1.3.42"
"@swc/core@npm:^1.3.46":
version: 1.3.50
resolution: "@swc/core@npm:1.3.50"
dependencies:
"@swc/core-darwin-arm64": 1.3.42
"@swc/core-darwin-x64": 1.3.42
"@swc/core-linux-arm-gnueabihf": 1.3.42
"@swc/core-linux-arm64-gnu": 1.3.42
"@swc/core-linux-arm64-musl": 1.3.42
"@swc/core-linux-x64-gnu": 1.3.42
"@swc/core-linux-x64-musl": 1.3.42
"@swc/core-win32-arm64-msvc": 1.3.42
"@swc/core-win32-ia32-msvc": 1.3.42
"@swc/core-win32-x64-msvc": 1.3.42
"@swc/core-darwin-arm64": 1.3.50
"@swc/core-darwin-x64": 1.3.50
"@swc/core-linux-arm-gnueabihf": 1.3.50
"@swc/core-linux-arm64-gnu": 1.3.50
"@swc/core-linux-arm64-musl": 1.3.50
"@swc/core-linux-x64-gnu": 1.3.50
"@swc/core-linux-x64-musl": 1.3.50
"@swc/core-win32-arm64-msvc": 1.3.50
"@swc/core-win32-ia32-msvc": 1.3.50
"@swc/core-win32-x64-msvc": 1.3.50
peerDependencies:
"@swc/helpers": ^0.5.0
dependenciesMeta:
"@swc/core-darwin-arm64":
optional: true
@@ -2729,7 +2731,10 @@ __metadata:
optional: true
"@swc/core-win32-x64-msvc":
optional: true
checksum: 5c28c03ee6a4e1f630c4a519b56d7e23a0102f70fad977a3ab144a3da96231cf4849e473cdc9ee7be6b9266ba0838d0bc0b6b3575a75540f302befe96cc9606e
peerDependenciesMeta:
"@swc/helpers":
optional: true
checksum: 63364c0bf6f395a57b576c4f7c5f79542a7c018c7bcc121e1bccdb157ca3ead97ee30920cf5ec6e93b0bd58e0145cb388721d7862ede867927137a437b4ef21a
languageName: node
linkType: hard
@@ -3732,7 +3737,7 @@ __metadata:
"@docusaurus/plugin-client-redirects": ^2.3.1
"@docusaurus/preset-classic": 2.4.0
"@spotify/prettier-config": ^14.0.0
"@swc/core": ^1.3.36
"@swc/core": ^1.3.46
"@tsconfig/docusaurus": ^1.0.6
"@types/webpack-env": ^1.18.0
clsx: ^1.1.1
+1
View File
@@ -6,6 +6,7 @@ edit_uri: edit/master/docs
plugins:
- techdocs-core
# For sidebar navigation on https://backstage.io/, see `microsite/sidebars.json`
nav:
- Overview:
- What is Backstage?: 'overview/what-is-backstage.md'
+1 -1
View File
@@ -47,7 +47,7 @@
"@types/react": "^17",
"@types/react-dom": "^17"
},
"version": "1.13.0-next.1",
"version": "1.13.0-next.3",
"dependencies": {
"@backstage/errors": "workspace:^",
"@manypkg/get-packages": "^1.1.3"
+22
View File
@@ -1,5 +1,27 @@
# @backstage/app-defaults
## 1.3.0-next.3
### Patch Changes
- Updated dependencies
- @backstage/core-app-api@1.7.0-next.3
- @backstage/core-components@0.13.0-next.3
- @backstage/core-plugin-api@1.5.1-next.1
- @backstage/theme@0.2.19-next.0
- @backstage/plugin-permission-react@0.4.12-next.1
## 1.3.0-next.2
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.12.6-next.2
- @backstage/core-plugin-api@1.5.1-next.1
- @backstage/core-app-api@1.7.0-next.2
- @backstage/theme@0.2.19-next.0
- @backstage/plugin-permission-react@0.4.12-next.1
## 1.3.0-next.1
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/app-defaults",
"description": "Provides the default wiring of a Backstage App",
"version": "1.3.0-next.1",
"version": "1.3.0-next.3",
"publishConfig": {
"access": "public",
"main": "dist/index.esm.js",
+138
View File
@@ -1,5 +1,143 @@
# example-app
## 0.2.82-next.3
### Patch Changes
- Updated dependencies
- @backstage/plugin-kubernetes@0.8.0-next.3
- @backstage/plugin-scaffolder@1.13.0-next.3
- @backstage/cli@0.22.6-next.3
- @backstage/plugin-explore@0.4.2-next.3
- @backstage/plugin-catalog-react@1.5.0-next.3
- @backstage/plugin-scaffolder-react@1.3.0-next.3
- @backstage/core-app-api@1.7.0-next.3
- @backstage/catalog-model@1.3.0-next.0
- @backstage/plugin-techdocs@1.6.1-next.3
- @backstage/core-components@0.13.0-next.3
- @backstage/app-defaults@1.3.0-next.3
- @backstage/config@1.0.7
- @backstage/core-plugin-api@1.5.1-next.1
- @backstage/integration-react@1.1.12-next.3
- @backstage/theme@0.2.19-next.0
- @backstage/plugin-airbrake@0.3.17-next.3
- @backstage/plugin-apache-airflow@0.2.10-next.3
- @backstage/plugin-api-docs@0.9.2-next.3
- @backstage/plugin-azure-devops@0.2.8-next.3
- @backstage/plugin-azure-sites@0.1.6-next.3
- @backstage/plugin-badges@0.2.41-next.3
- @backstage/plugin-catalog-common@1.0.13-next.1
- @backstage/plugin-catalog-graph@0.2.29-next.3
- @backstage/plugin-catalog-import@0.9.7-next.3
- @backstage/plugin-circleci@0.3.17-next.3
- @backstage/plugin-cloudbuild@0.3.17-next.3
- @backstage/plugin-code-coverage@0.2.10-next.3
- @backstage/plugin-cost-insights@0.12.6-next.3
- @backstage/plugin-dynatrace@4.0.0-next.3
- @backstage/plugin-entity-feedback@0.2.0-next.3
- @backstage/plugin-gcalendar@0.3.13-next.3
- @backstage/plugin-gcp-projects@0.3.36-next.3
- @backstage/plugin-github-actions@0.5.17-next.3
- @backstage/plugin-gocd@0.1.23-next.3
- @backstage/plugin-graphiql@0.2.49-next.3
- @backstage/plugin-home@0.4.33-next.3
- @backstage/plugin-jenkins@0.7.16-next.3
- @backstage/plugin-kafka@0.3.17-next.3
- @backstage/plugin-lighthouse@0.4.2-next.3
- @backstage/plugin-linguist@0.1.2-next.3
- @backstage/plugin-linguist-common@0.1.0
- @backstage/plugin-microsoft-calendar@0.1.2-next.3
- @backstage/plugin-newrelic@0.3.35-next.3
- @backstage/plugin-newrelic-dashboard@0.2.10-next.3
- @backstage/plugin-org@0.6.7-next.3
- @backstage/plugin-pagerduty@0.5.10-next.3
- @backstage/plugin-permission-react@0.4.12-next.1
- @backstage/plugin-playlist@0.1.8-next.3
- @backstage/plugin-rollbar@0.4.17-next.3
- @backstage/plugin-search@1.2.0-next.3
- @backstage/plugin-search-common@1.2.3-next.0
- @backstage/plugin-search-react@1.5.2-next.3
- @backstage/plugin-sentry@0.5.2-next.3
- @backstage/plugin-shortcuts@0.3.9-next.3
- @backstage/plugin-stack-overflow@0.1.13-next.3
- @backstage/plugin-stackstorm@0.1.1-next.3
- @backstage/plugin-tech-insights@0.3.9-next.3
- @backstage/plugin-tech-radar@0.6.3-next.3
- @backstage/plugin-techdocs-module-addons-contrib@1.0.12-next.3
- @backstage/plugin-techdocs-react@1.1.5-next.3
- @backstage/plugin-todo@0.2.19-next.3
- @backstage/plugin-user-settings@0.7.2-next.3
- @internal/plugin-catalog-customized@0.0.9-next.3
## 0.2.82-next.2
### Patch Changes
- Updated dependencies
- @backstage/plugin-circleci@0.3.17-next.2
- @backstage/plugin-techdocs-module-addons-contrib@1.0.12-next.2
- @backstage/cli@0.22.6-next.2
- @backstage/core-components@0.12.6-next.2
- @backstage/plugin-catalog-react@1.4.1-next.2
- @backstage/plugin-scaffolder-react@1.3.0-next.2
- @backstage/plugin-scaffolder@1.13.0-next.2
- @backstage/plugin-code-coverage@0.2.10-next.2
- @backstage/plugin-cost-insights@0.12.6-next.2
- @backstage/plugin-playlist@0.1.8-next.2
- @backstage/plugin-search@1.2.0-next.2
- @backstage/core-plugin-api@1.5.1-next.1
- @backstage/plugin-techdocs@1.6.1-next.2
- @backstage/app-defaults@1.3.0-next.2
- @backstage/catalog-model@1.2.1
- @backstage/config@1.0.7
- @backstage/core-app-api@1.7.0-next.2
- @backstage/integration-react@1.1.12-next.2
- @backstage/theme@0.2.19-next.0
- @backstage/plugin-airbrake@0.3.17-next.2
- @backstage/plugin-apache-airflow@0.2.10-next.2
- @backstage/plugin-api-docs@0.9.2-next.2
- @backstage/plugin-azure-devops@0.2.8-next.2
- @backstage/plugin-azure-sites@0.1.6-next.2
- @backstage/plugin-badges@0.2.41-next.2
- @backstage/plugin-catalog-common@1.0.13-next.0
- @backstage/plugin-catalog-graph@0.2.29-next.2
- @backstage/plugin-catalog-import@0.9.7-next.2
- @backstage/plugin-cloudbuild@0.3.17-next.2
- @backstage/plugin-dynatrace@3.0.1-next.2
- @backstage/plugin-entity-feedback@0.2.0-next.2
- @backstage/plugin-explore@0.4.2-next.2
- @backstage/plugin-gcalendar@0.3.13-next.2
- @backstage/plugin-gcp-projects@0.3.36-next.2
- @backstage/plugin-github-actions@0.5.17-next.2
- @backstage/plugin-gocd@0.1.23-next.2
- @backstage/plugin-graphiql@0.2.49-next.2
- @backstage/plugin-home@0.4.33-next.2
- @backstage/plugin-jenkins@0.7.16-next.2
- @backstage/plugin-kafka@0.3.17-next.2
- @backstage/plugin-kubernetes@0.7.10-next.2
- @backstage/plugin-lighthouse@0.4.2-next.2
- @backstage/plugin-linguist@0.1.2-next.2
- @backstage/plugin-linguist-common@0.1.0
- @backstage/plugin-microsoft-calendar@0.1.2-next.2
- @backstage/plugin-newrelic@0.3.35-next.2
- @backstage/plugin-newrelic-dashboard@0.2.10-next.2
- @backstage/plugin-org@0.6.7-next.2
- @backstage/plugin-pagerduty@0.5.10-next.2
- @backstage/plugin-permission-react@0.4.12-next.1
- @backstage/plugin-rollbar@0.4.17-next.2
- @backstage/plugin-search-common@1.2.3-next.0
- @backstage/plugin-search-react@1.5.2-next.2
- @backstage/plugin-sentry@0.5.2-next.2
- @backstage/plugin-shortcuts@0.3.9-next.2
- @backstage/plugin-stack-overflow@0.1.13-next.2
- @backstage/plugin-stackstorm@0.1.1-next.2
- @backstage/plugin-tech-insights@0.3.9-next.2
- @backstage/plugin-tech-radar@0.6.3-next.2
- @backstage/plugin-techdocs-react@1.1.5-next.2
- @backstage/plugin-todo@0.2.19-next.2
- @backstage/plugin-user-settings@0.7.2-next.2
- @internal/plugin-catalog-customized@0.0.9-next.2
## 0.2.82-next.1
### Patch Changes
+2 -1
View File
@@ -1,6 +1,6 @@
{
"name": "example-app",
"version": "0.2.82-next.1",
"version": "0.2.82-next.3",
"private": true,
"backstage": {
"role": "frontend"
@@ -51,6 +51,7 @@
"@backstage/plugin-pagerduty": "workspace:^",
"@backstage/plugin-permission-react": "workspace:^",
"@backstage/plugin-playlist": "workspace:^",
"@backstage/plugin-puppetdb": "workspace:^",
"@backstage/plugin-rollbar": "workspace:^",
"@backstage/plugin-scaffolder": "workspace:^",
"@backstage/plugin-scaffolder-react": "workspace:^",
+2
View File
@@ -108,6 +108,7 @@ import { PlaylistIndexPage } from '@backstage/plugin-playlist';
import { TwoColumnLayout } from './components/scaffolder/customScaffolderLayouts';
import { ScoreBoardPage } from '@oriflame/backstage-plugin-score-card';
import { StackstormPage } from '@backstage/plugin-stackstorm';
import { PuppetDbPage } from '@backstage/plugin-puppetdb';
const app = createApp({
apis,
@@ -289,6 +290,7 @@ const routes = (
<Route path="/playlist" element={<PlaylistIndexPage />} />
<Route path="/score-board" element={<ScoreBoardPage />} />
<Route path="/stackstorm" element={<StackstormPage />} />
<Route path="/puppetdb" element={<PuppetDbPage />} />
</FlatRoutes>
);
@@ -116,6 +116,7 @@ import {
EntityRollbarContent,
isRollbarAvailable,
} from '@backstage/plugin-rollbar';
import { PuppetDbPage, isPuppetDbAvailable } from '@backstage/plugin-puppetdb';
import { EntitySentryContent } from '@backstage/plugin-sentry';
import { EntityTechdocsContent } from '@backstage/plugin-techdocs';
import { EntityTechInsightsScorecardCard } from '@backstage/plugin-tech-insights';
@@ -836,6 +837,35 @@ const domainPage = (
</EntityLayoutWrapper>
);
const resourcePage = (
<EntityLayoutWrapper>
<EntityLayout.Route path="/" title="Overview">
<Grid container spacing={3} alignItems="stretch">
{entityWarningContent}
<Grid item md={6}>
<EntityAboutCard variant="gridItem" />
</Grid>
<Grid item md={6} xs={12}>
<EntityCatalogGraphCard variant="gridItem" height={400} />
</Grid>
<Grid item md={6}>
<EntityHasSystemsCard variant="gridItem" />
</Grid>
</Grid>
</EntityLayout.Route>
<EntityLayout.Route
path="/puppetdb"
title="Puppet"
if={isPuppetDbAvailable}
>
<PuppetDbPage />
</EntityLayout.Route>
<EntityLayout.Route path="/todos" title="TODOs">
<EntityTodoContent />
</EntityLayout.Route>
</EntityLayoutWrapper>
);
export const entityPage = (
<EntitySwitch>
<EntitySwitch.Case if={isKind('component')} children={componentPage} />
@@ -844,6 +874,7 @@ export const entityPage = (
<EntitySwitch.Case if={isKind('user')} children={userPage} />
<EntitySwitch.Case if={isKind('system')} children={systemPage} />
<EntitySwitch.Case if={isKind('domain')} children={domainPage} />
<EntitySwitch.Case if={isKind('resource')} children={resourcePage} />
<EntitySwitch.Case>{defaultEntityPage}</EntitySwitch.Case>
</EntitySwitch>
+17
View File
@@ -1,5 +1,22 @@
# @backstage/backend-app-api
## 0.4.2-next.2
### Patch Changes
- 5c7ce585824: Allow an additionalConfig to be provided to loadBackendConfig that fetches config values during runtime.
- Updated dependencies
- @backstage/backend-common@0.18.4-next.2
- @backstage/plugin-permission-node@0.7.7-next.2
- @backstage/backend-plugin-api@0.5.1-next.2
- @backstage/backend-tasks@0.5.1-next.2
- @backstage/cli-common@0.1.12
- @backstage/config@1.0.7
- @backstage/config-loader@1.1.9
- @backstage/errors@1.1.5
- @backstage/types@1.0.2
- @backstage/plugin-auth-node@0.2.13-next.2
## 0.4.2-next.1
### Patch Changes

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