Merge branch 'master' of github.com:backstage/backstage into RoadieHQ-entity-peek-ahead-irma

This commit is contained in:
Brian Fletcher
2022-12-19 13:43:34 +00:00
776 changed files with 30500 additions and 4769 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-cost-insights': patch
---
Added Y axis for metric data, with relevant formatting and data domain
+7
View File
@@ -0,0 +1,7 @@
---
'@backstage/plugin-kubernetes-backend': minor
'@backstage/plugin-kubernetes-common': minor
'@backstage/plugin-kubernetes': patch
---
Kubernetes plugin now gracefully surfaces transport-level errors (like DNS or timeout, or other socket errors) occurring while fetching data. This will be merged into any data that is fetched successfully, fixing a bug where the whole page would be empty if any fetch operation encountered such an error.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog-backend': patch
---
Added a new `catalog.rules[].location` configuration that makes it possible to configure catalog rules to only apply to specific locations, either via exact match or a glob pattern.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/backend-app-api': patch
---
Updated logger implementations to match interface changes.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-kubernetes': patch
---
Removed rendering for ErrorEmptyState in ErrorReporting component, so nothing is rendered when there are no errors. Also removed Divider on Kubernetes page.
+1 -1
View File
@@ -1,5 +1,5 @@
---
'@backstage/create-app': minor
'@backstage/create-app': patch
---
added default project name for CI job compatibility
+9
View File
@@ -0,0 +1,9 @@
---
'@backstage/plugin-scaffolder-backend-module-cookiecutter': patch
'@backstage/plugin-scaffolder-backend-module-rails': patch
'@backstage/plugin-scaffolder-backend-module-yeoman': patch
'@backstage/create-app': patch
'@backstage/plugin-scaffolder-backend': patch
---
Change step output template examples to use square bracket syntax.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/core-components': patch
---
Update sidebar icon alignment
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-org': patch
---
Made all the ownership boxes the same size
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/cli': patch
---
Updated Jest coverage configuration to only apply either in the root project or package configuration, depending on whether repo or package tests are run.
+16
View File
@@ -0,0 +1,16 @@
---
'@backstage/backend-tasks': patch
'@backstage/cli': patch
'@backstage/core-app-api': patch
'@backstage/core-components': patch
'@backstage/plugin-catalog-backend': patch
'@backstage/plugin-permission-backend': patch
'@backstage/plugin-permission-common': patch
'@backstage/plugin-permission-node': patch
'@backstage/plugin-playlist-backend': patch
'@backstage/plugin-scaffolder': patch
'@backstage/plugin-scaffolder-backend': patch
'@backstage/plugin-search-backend': patch
---
Move the `zod` dependency to a version that does not collide with other libraries
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/integration-aws-node': minor
---
New package for AWS integration node library
+50
View File
@@ -0,0 +1,50 @@
---
'@backstage/core-app-api': minor
---
Added a new `AppRouter` component and `app.createRoot()` method that replaces `app.getRouter()` and `app.getProvider()`, which are now deprecated. The new `AppRouter` component is a drop-in replacement for the old router component, while the new `app.createRoot()` method is used instead of the old provider component.
An old app setup might look like this:
```tsx
const app = createApp(/* ... */);
const AppProvider = app.getProvider();
const AppRouter = app.getRouter();
const routes = ...;
const App = () => (
<AppProvider>
<AlertDisplay />
<OAuthRequestDialog />
<AppRouter>
<Root>{routes}</Root>
</AppRouter>
</AppProvider>
);
export default App;
```
With these new APIs, the setup now looks like this:
```tsx
import { AppRouter } from '@backstage/core-app-api';
const app = createApp(/* ... */);
const routes = ...;
export default app.createRoot(
<>
<AlertDisplay />
<OAuthRequestDialog />
<AppRouter>
<Root>{routes}</Root>
</AppRouter>
</>,
);
```
Note that `app.createRoot()` accepts a React element, rather than a component.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/backend-test-utils': patch
---
Backends started with `startTestBackend` are now automatically stopped after all tests have run.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder-backend': minor
---
Added `requiredConversationResolution` template option to `github:repo:create`, `github:repo:push` and `publish:github`
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog-backend': minor
---
Deprecated Prometheus metrics in favour of OpenTelemtry metrics.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/errors': patch
---
Removed a circular import
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-kubernetes-backend': patch
---
Clusters declared in the app-config can now have their CA configured via a local filesystem path using the `caFile` property.
+11
View File
@@ -0,0 +1,11 @@
---
'@backstage/repo-tools': patch
---
Add new command options to the `api-report`
- added `--allow-warnings`, `-a` to continue processing packages if selected packages have warnings
- added `--allow-all-warnings` to continue processing packages any packages have warnings
- added `--omit-messages`, `-o` to pass some warnings messages code to be omitted from the api-report.md files
- The `paths` argument for this command now takes as default the value on `workspaces.packages` inside the root package.json
- change the path resolution to use the `@backstage/cli-common` packages instead
+38
View File
@@ -0,0 +1,38 @@
---
'@backstage/app-defaults': patch
'@backstage/core-components': patch
'@backstage/dev-utils': patch
'@backstage/test-utils': patch
'@backstage/plugin-airbrake': patch
'@backstage/plugin-api-docs': patch
'@backstage/plugin-azure-devops': patch
'@backstage/plugin-badges': patch
'@backstage/plugin-catalog': patch
'@backstage/plugin-catalog-graph': patch
'@backstage/plugin-catalog-import': patch
'@backstage/plugin-catalog-react': patch
'@backstage/plugin-circleci': patch
'@backstage/plugin-cloudbuild': patch
'@backstage/plugin-code-climate': patch
'@backstage/plugin-code-coverage': patch
'@backstage/plugin-explore': patch
'@backstage/plugin-git-release-manager': patch
'@backstage/plugin-github-actions': patch
'@backstage/plugin-home': patch
'@backstage/plugin-jenkins': patch
'@backstage/plugin-kafka': patch
'@backstage/plugin-org': patch
'@backstage/plugin-permission-react': patch
'@backstage/plugin-playlist': patch
'@backstage/plugin-rollbar': patch
'@backstage/plugin-scaffolder': patch
'@backstage/plugin-search': patch
'@backstage/plugin-search-react': patch
'@backstage/plugin-sentry': patch
'@backstage/plugin-shortcuts': patch
'@backstage/plugin-techdocs': patch
'@backstage/plugin-todo': patch
'@backstage/plugin-user-settings': patch
---
Internal refactor to use `react-router-dom` rather than `react-router`.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog-backend': patch
---
Internal code reorganization.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog-backend': patch
---
Track the last time the final entity changed with new timestamp "last updated at" data in final entities database, which gets updated with the time when final entity is updated.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-lighthouse': patch
---
Fixed "Emulated Form Factor" field in the audit creation form not working with the latest version (1.0.2) of `lighthouse-audit-service`.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/backend-common': patch
---
Fix `GitlabUrlReader.readTree` bug when there were no matching commits
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/backend-app-api': patch
---
Added `.stop()` method to `Backend`.
+15
View File
@@ -0,0 +1,15 @@
---
'@backstage/plugin-scaffolder': patch
---
Form data is now passed to validator functions in 'next' scaffolder, so it's now possible to perform validation for fields that depend on other field values. This is something that we discourage due to the coupling that it creates, but is sometimes still the most sensible solution.
```typescript jsx
export const myCustomValidation = (
value: string,
validation: FieldValidation,
{ apiHolder, formData }: { apiHolder: ApiHolder; formData: JsonObject },
) => {
// validate
};
```
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder-backend': patch
---
Backend now returns 'ui:options' value from template metadata, it can be used by all your custom scaffolder components.
+7
View File
@@ -0,0 +1,7 @@
---
'@backstage/cli': minor
---
The Jest configuration that was previously enabled with `BACKSTAGE_NEXT_TESTS` is now enabled by default. To revert to the old configuration you can now instead set `BACKSTAGE_OLD_TESTS`.
This new configuration uses the `babel` coverage provider rather than `v8`. It used to be that `v8` worked better when using Sucrase for transpilation, but now that we have switched to SWC, `babel` seems to work better. In addition, the new configuration also enables source maps by default, as they no longer have a negative impact on code coverage accuracy, and it also enables a modified Jest runtime with additional caching of script objects.
+1 -1
View File
@@ -2,4 +2,4 @@
'@backstage/plugin-jenkins-backend': patch
---
Remove unnecessary dependency promise-any-polyfill
Remove unnecessary dependency `promise-any-polyfill`.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/cli': patch
---
Adds new web-library package option when generating a new plugin
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/create-app': patch
---
Updated the template to have the `'/test'` proxy endpoint in `app-config.yaml` be commented out by default.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-home': patch
---
Adjusted the description's empty state on the starred entities table,
+38 -2
View File
@@ -1,5 +1,5 @@
{
"mode": "pre",
"mode": "exit",
"tag": "next",
"initialVersions": {
"example-app": "0.2.77",
@@ -190,16 +190,21 @@
"@backstage/plugin-xcmetrics": "0.2.31",
"@backstage/plugin-catalog-backend-module-incremental-ingestion": "0.0.0",
"@backstage/plugin-explore-backend": "0.0.0",
"@backstage/plugin-explore-common": "0.0.0"
"@backstage/plugin-explore-common": "0.0.0",
"@backstage/integration-aws-node": "0.0.0"
},
"changesets": [
"angry-dingos-lick",
"angry-trees-relax",
"beige-chairs-repair",
"beige-chairs-wink",
"blue-chefs-know",
"brave-bags-sniff",
"breezy-apes-mate",
"chilled-ladybugs-cough",
"chilly-ads-lay",
"chilly-flies-nail",
"chilly-tables-crash",
"clean-paws-fry",
"clean-seals-whisper",
"clever-pillows-drive",
@@ -207,6 +212,8 @@
"create-app-1669131574",
"create-app-1669720399",
"create-app-1670332900",
"cyan-donkeys-arrive",
"dirty-ads-refuse",
"dry-melons-listen",
"dry-radios-live",
"early-hairs-switch",
@@ -214,45 +221,59 @@
"eight-eels-compete",
"eight-spiders-know",
"eight-tables-hunt",
"eleven-jeans-train",
"empty-taxis-run",
"fair-walls-talk",
"famous-cobras-suffer",
"famous-crews-speak",
"fast-lies-remain",
"fast-walls-explode",
"fifty-news-stare",
"five-trainers-admire",
"fluffy-walls-approve",
"fluffy-worms-arrive",
"forty-baboons-burn",
"forty-carpets-refuse",
"four-adults-provide",
"four-buttons-clean",
"fresh-news-push",
"funny-numbers-compete",
"fuzzy-rivers-search",
"gentle-ligers-help",
"gold-icons-cheat",
"gold-yaks-join",
"gorgeous-hairs-applaud",
"green-deers-turn",
"healthy-crabs-collect",
"hip-chairs-tap",
"hip-stingrays-kneel",
"hip-wasps-yell",
"itchy-walls-boil",
"kind-tips-pump",
"kind-walls-share",
"lemon-coats-camp",
"light-snakes-exercise",
"light-turtles-yawn",
"little-chairs-dance",
"long-eyes-confess",
"loud-rockets-reply",
"loud-snails-sleep",
"lucky-chicken-greet",
"many-bikes-press",
"mighty-parrots-hammer",
"modern-camels-cheat",
"modern-jokes-attack",
"modern-mugs-shout",
"nasty-melons-build",
"neat-insects-share",
"neat-lies-know",
"nervous-mice-flow",
"new-bugs-march",
"nice-apricots-love",
"nice-hairs-lick",
"nice-pants-boil",
"nine-ears-whisper",
"odd-moles-notice",
"old-bulldogs-fry",
"old-keys-leave",
"old-sloths-warn",
@@ -260,6 +281,7 @@
"pretty-eagles-matter",
"pretty-melons-taste",
"quick-horses-cry",
"renovate-1da1327",
"renovate-1e2853d",
"renovate-3fe8460",
"renovate-4bb70f3",
@@ -280,11 +302,15 @@
"search-lieutenant-dangle",
"search-om-manniskan-ginge",
"search-tofu-panaeng",
"search-yet-another-wonderwall-cover",
"selfish-lizards-invent",
"serious-windows-occur",
"seven-schools-speak",
"sharp-shoes-bathe",
"short-turtles-dream",
"shy-birds-hammer",
"shy-cycles-add",
"silly-knives-warn",
"silly-wolves-remember",
"silver-rats-rest",
"slow-dragons-promise",
@@ -293,10 +319,12 @@
"slow-flies-marry",
"slow-lies-jam",
"smart-radios-change",
"smooth-bulldogs-fix",
"soft-nails-arrive",
"sour-flowers-care",
"sour-plums-grow",
"sour-queens-wait",
"spicy-pianos-train",
"strange-rocks-hide",
"strong-peaches-melt",
"strong-rice-warn",
@@ -307,11 +335,19 @@
"tender-parrots-cover",
"thin-donuts-join",
"thin-flies-wink",
"tiny-kangaroos-speak",
"twelve-meals-smell",
"twenty-dodos-wash",
"unlucky-hotels-hammer",
"violet-dots-relate",
"warm-parents-notice",
"weak-ears-jam",
"weak-zoos-hammer",
"wet-tips-yawn",
"wicked-games-search",
"wicked-impalas-relate",
"wild-pears-enjoy",
"witty-wasps-kiss",
"yellow-forks-knock",
"young-chairs-check",
"young-turkeys-relax"
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/core-components': patch
'@backstage/plugin-techdocs': patch
---
Add `react/forbid-elements` linter rule for button, suggest MUI `Button`
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/cli': patch
'@backstage/plugin-scaffolder-backend': patch
---
Updated dependency `esbuild` to `^0.16.0`.
+8
View File
@@ -0,0 +1,8 @@
---
'@backstage/backend-common': patch
'@backstage/plugin-kubernetes-backend': patch
'@backstage/plugin-kubernetes-common': patch
'@backstage/plugin-kubernetes': patch
---
Updated dependency `@kubernetes/client-node` to `0.18.0`.
+12
View File
@@ -0,0 +1,12 @@
---
'@backstage/plugin-search-backend-module-pg': minor
---
Added the option to pass a logger to `PgSearchEngine` during instantiation. You may do so as follows:
```diff
const searchEngine = await PgSearchEngine.fromConfig(env.config, {
database: env.database,
+ logger: env.logger,
});
```
+7
View File
@@ -0,0 +1,7 @@
---
'@backstage/plugin-search-backend-module-elasticsearch': minor
'@backstage/plugin-search-backend-module-pg': minor
'@backstage/plugin-search-backend-node': minor
---
The search engine now better handles the case when it receives 0 documents at index-time. Prior to this change, the indexer would replace any existing index with an empty index, effectively deleting it. Now instead, a warning is logged, and any existing index is left alone (preserving the index from the last successful indexing attempt).
@@ -0,0 +1,5 @@
---
'@backstage/plugin-stack-overflow': patch
---
The `<StackOverflowSearchResultListItem />` component is now able to highlight the result title and/or text when provided. To take advantage of this, pass in the `highlight` prop, similar to how it is done on other result list item components.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-jenkins-backend': patch
---
added support for standalone jenkins projects
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-search-backend-module-elasticsearch': minor
---
Added support for self hosted OpenSearch via new provider
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/backend-app-api': patch
'@backstage/plugin-catalog-backend-module-incremental-ingestion': patch
---
Updated usages of types from `@backstage/backend-plugin-api`.
+22
View File
@@ -0,0 +1,22 @@
---
'@backstage/plugin-sonarqube': minor
'@backstage/plugin-sonarqube-react': minor
---
Parts of plugin-sonarqube have been moved into a new plugin-sonarqube-react package. Additionally some types that were
previously internal to plugin-sonarqube have been made public and will allow access for third-parties. As the sonarqube
plugin has not yet reached 1.0 breaking changes are expected in the future. As such exports of plugin-sonarqube-react
require importing via the `/alpha` entrypoint:
```ts
import { sonarQubeApiRef } from '@backstage/plugin-sonarqube-react/alpha';
const sonarQubeApi = useApi(sonarQubeApiRef);
```
Moved from plugin-sonarqube to plugin-sonarqube-react:
- isSonarQubeAvailable
- SONARQUBE_PROJECT_KEY_ANNOTATION
Exports that been introduced to plugin-sonarqube-react are documented in the [API report](https://github.com/backstage/backstage/blob/master/plugins/sonarqube-react/api-report.md).
+48
View File
@@ -0,0 +1,48 @@
---
'@backstage/create-app': patch
---
Updated the app template to use the new `AppRouter` component instead of `app.getRouter()`, as well as `app.createRoot()` instead of `app.getProvider()`.
To apply this change to an existing app, make the following change to `packages/app/src/App.tsx`:
```diff
-import { FlatRoutes } from '@backstage/core-app-api';
+import { AppRouter, FlatRoutes } from '@backstage/core-app-api';
...
-const AppProvider = app.getProvider();
-const AppRouter = app.getRouter();
...
-const App = () => (
+export default app.createRoot(
- <AppProvider>
+ <>
<AlertDisplay />
<OAuthRequestDialog />
<AppRouter>
<Root>{routes}</Root>
</AppRouter>
- </AppProvider>
+ </>,
);
```
The final export step should end up looking something like this:
```tsx
export default app.createRoot(
<>
<AlertDisplay />
<OAuthRequestDialog />
<AppRouter>
<Root>{routes}</Root>
</AppRouter>
</>,
);
```
Note that `app.createRoot()` accepts a React element, rather than a component.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/backend-app-api': patch
---
Root scoped services are now always initialized, regardless of whether they're used by any features.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-techdocs-node': patch
---
Add support for specifying an S3 bucket's account ID and retrieving the credentials from the `aws` app config section. This is now the preferred way to configure AWS credentials for Techdocs.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder': patch
---
bump `@rjsf/*-v5` dependencies
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog-backend': patch
---
Ignore attempts at emitting the current entity as a child of itself.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-techdocs-backend': minor
---
Added a new optional `accountId` to the configuration options of the AWS S3 publisher. Configuring this option will source credentials for the `accountId` in the `aws` app config section. See https://github.com/backstage/backstage/blob/master/packages/integration-aws-node/README.md for more details.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/repo-tools': patch
---
Include asset-types.d.ts while running the api report command
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder-backend-module-rails': patch
---
Added more (optional) arguments to the `createFetchRailsAction` to be passed to `rails new`
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/backend-plugin-api': minor
---
**BREAKING**: All service interfaces are now suffixed with `*Service`.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/repo-tools': patch
---
Updated api docs generation to be compatible with Docusaurus 2-alpha and 2.x.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder': patch
---
Show input type array correctly on installed actions page.
+7
View File
@@ -0,0 +1,7 @@
---
'@backstage/create-app': patch
---
Removed the `react-router` dependency from the app package, using only `react-router-dom` instead.
This change is just a bit of cleanup and is optional. If you want to apply it to your app, remove the `react-router` dependency from `packages/app/package.json`, and replace any imports from `react-router` with `react-router-dom` instead.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/core-components': patch
---
Added option to pass additional headers to `<ProxiedSignInPage />`, which are passed along with the request to the underlying provider
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/cli': patch
---
Removed all copyright notices from package templates.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder': minor
---
The `RepoUrlPicker` field extension now has an `allowedProjects` option for narrowing the selection of Bitbucket URLs.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/backend-plugin-api': patch
---
Updated `LoggerService` interface with more log methods and meta.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder-backend': minor
---
Update the `github:publish` action to allow passing wether to dismiss stale reviews on the protected default branch.
+1
View File
@@ -7,5 +7,6 @@
**/.git/**
**/public/**
**/microsite/**
**/microsite-next/**
**/templates/**
**/sample-templates/**
+17 -1
View File
@@ -18,7 +18,7 @@ var path = require('path');
module.exports = {
root: true,
plugins: ['notice', 'testing-library'],
plugins: ['@spotify', 'notice', 'react', 'testing-library'],
rules: {
'notice/notice': [
'error',
@@ -237,4 +237,20 @@ module.exports = {
}),
].flat(),
},
overrides: [
{
files: ['**/*.[jt]s?(x)'],
excludedFiles: '**/*.{test,spec}.[jt]s?(x)',
rules: {
'react/forbid-elements': [
1,
{
forbid: [
{ element: 'button', message: 'use MUI <Button> instead' },
],
},
],
},
},
],
};
+6 -4
View File
@@ -26,10 +26,12 @@ yarn.lock @backstage/reviewers @backst
/plugins/azure-devops-common @backstage/reviewers @marleypowell @awanlin
/plugins/bitbucket-cloud-common @backstage/reviewers @pjungermann
/plugins/bitrise @backstage/reviewers @backstage/sda-se-reviewers
/plugins/catalog-backend-module-aws @backstage/reviewers @pjungermann
/plugins/catalog-backend-module-bitbucket-cloud @backstage/reviewers @pjungermann
/plugins/catalog-backend-module-msgraph @backstage/reviewers @pjungermann
/plugins/catalog-graph @backstage/reviewers @backstage/sda-se-reviewers
/plugins/catalog @backstage/reviewers @backstage/catalog-core
/plugins/catalog-* @backstage/reviewers @backstage/catalog-core
/plugins/catalog-backend-module-aws @backstage/reviewers @backstage/catalog-core @pjungermann
/plugins/catalog-backend-module-bitbucket-cloud @backstage/reviewers @backstage/catalog-core @pjungermann
/plugins/catalog-backend-module-msgraph @backstage/reviewers @backstage/catalog-core @pjungermann
/plugins/catalog-graph @backstage/reviewers @backstage/catalog-core @backstage/sda-se-reviewers
/plugins/circleci @backstage/reviewers @adamdmharvey
/plugins/cloudbuild @backstage/reviewers @trivago/ebarrios
/plugins/code-coverage @backstage/reviewers @alde @nissayeva
+2
View File
@@ -13,6 +13,8 @@ techdocs:
- plugins/techdocs/**/*
- plugins/techdocs-*/**/*
- packages/techdocs-*/**/*
homepage:
- plugins/home/**/*
documentation:
- docs/**/*
microsite:
@@ -0,0 +1,29 @@
version: '3'
x-uffizzi:
ingress:
service: backstage
port: 7007
services:
backstage:
image: '${BACKSTAGE_IMAGE}'
environment:
POSTGRES_HOST: localhost
POSTGRES_USER: postgres
POSTGRES_PASSWORD: example
GITHUB_TOKEN: abc
NODE_ENV: production
deploy:
resources:
limits:
memory: 500M
entrypoint: '/bin/sh'
command:
- '-c'
- "APP_CONFIG_app_baseUrl=$$UFFIZZI_URL APP_CONFIG_backend_baseUrl=$$UFFIZZI_URL APP_CONFIG_auth_environment='production' node packages/backend --config app-config.yaml --config app-config.production.yaml"
db:
image: postgres
environment:
POSTGRES_PASSWORD: example
@@ -0,0 +1,10 @@
app:
title: Backstage Uffizzi Environment
baseUrl: ${UFFIZZI_URL}
backend:
baseUrl: ${UFFIZZI_URL}
cors:
origin: ${UFFIZZI_URL}
methods: [GET, POST, PUT, DELETE]
credentials: true
+3
View File
@@ -411,3 +411,6 @@ zoomable
zsh
Lainfiesta
allowlisted
Dominik
Henneke
Kuang
+3 -5
View File
@@ -33,7 +33,7 @@ jobs:
registry-url: https://registry.npmjs.org/ # Needed for auth
- name: yarn install
uses: backstage/actions/yarn-install@v0.5.8
uses: backstage/actions/yarn-install@v0.5.11
with:
cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
@@ -63,7 +63,7 @@ jobs:
registry-url: https://registry.npmjs.org/ # Needed for auth
- name: yarn install
uses: backstage/actions/yarn-install@v0.5.8
uses: backstage/actions/yarn-install@v0.5.11
with:
cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
@@ -181,7 +181,7 @@ jobs:
registry-url: https://registry.npmjs.org/ # Needed for auth
- name: yarn install
uses: backstage/actions/yarn-install@v0.5.8
uses: backstage/actions/yarn-install@v0.5.11
with:
cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
@@ -202,7 +202,6 @@ jobs:
if: ${{ steps.yarn-lock.outcome == 'success' }}
run: yarn backstage-cli repo test --maxWorkers=2 --workerIdleMemoryLimit=1300M --since origin/master
env:
BACKSTAGE_NEXT_TESTS: 1
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] }}
@@ -214,7 +213,6 @@ jobs:
yarn backstage-cli repo test --maxWorkers=2 --workerIdleMemoryLimit=800M --coverage
bash <(curl -s https://codecov.io/bash) -N $(git rev-parse FETCH_HEAD)
env:
BACKSTAGE_NEXT_TESTS: 1
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] }}
+1 -1
View File
@@ -8,7 +8,7 @@ jobs:
cron:
runs-on: ubuntu-latest
steps:
- uses: backstage/actions/cron@v0.5.8
- uses: backstage/actions/cron@v0.5.11
with:
app-id: ${{ secrets.BACKSTAGE_GOALIE_APPLICATION_ID }}
private-key: ${{ secrets.BACKSTAGE_GOALIE_PRIVATE_KEY }}
+9 -38
View File
@@ -7,6 +7,11 @@ jobs:
build:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
node-version: [16.x]
steps:
- name: checkout
uses: actions/checkout@v3
@@ -14,50 +19,16 @@ jobs:
path: backstage
ref: v${{ github.event.client_payload.version }}
- name: setup-node
uses: actions/setup-node@v3
with:
node-version: 16.x
registry-url: https://registry.npmjs.org/
# Beginning of yarn setup, keep in sync between all workflows.
# TODO(Rugvip): move this to composite action once all features we use are supported
- name: use node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
registry-url: https://registry.npmjs.org/ # Needed for auth
# Cache every node_modules folder inside the monorepo
- name: cache all node_modules
id: cache-modules
uses: actions/cache@v3
with:
path: '**/node_modules'
# We use both yarn.lock and package.json as cache keys to ensure that
# changes to local monorepo packages bust the cache.
key: ${{ runner.os }}-v${{ matrix.node-version }}-node_modules-${{ hashFiles('yarn.lock', '**/package.json') }}
# If we get a cache hit for node_modules, there's no need to bring in the global
# yarn cache or run yarn install, as all dependencies will be installed already.
- name: find location of global yarn cache
id: yarn-cache
if: steps.cache-modules.outputs.cache-hit != 'true'
run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT
- name: cache global yarn cache
uses: actions/cache@v3
if: steps.cache-modules.outputs.cache-hit != 'true'
with:
path: ${{ steps.yarn-cache.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- name: yarn install
if: steps.cache-modules.outputs.cache-hit != 'true'
run: yarn install --immutable
# End of yarn setup
uses: backstage/actions/yarn-install@v0.5.11
with:
cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
- name: create-app
run: npx @backstage/create-app
@@ -65,7 +36,7 @@ jobs:
BACKSTAGE_APP_NAME: example-app
- name: yarn build
run: yarn build
run: yarn build:backend
working-directory: ./example-app
- name: Login to GitHub Container Registry
+1 -1
View File
@@ -26,7 +26,7 @@ jobs:
node-version: ${{ matrix.node-version }}
registry-url: https://registry.npmjs.org/ # Needed for auth
- name: yarn install
uses: backstage/actions/yarn-install@v0.5.8
uses: backstage/actions/yarn-install@v0.5.11
with:
cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
+2 -3
View File
@@ -68,7 +68,7 @@ jobs:
node-version: ${{ matrix.node-version }}
registry-url: https://registry.npmjs.org/ # Needed for auth
- name: yarn install
uses: backstage/actions/yarn-install@v0.5.8
uses: backstage/actions/yarn-install@v0.5.11
with:
cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
@@ -105,7 +105,6 @@ jobs:
bash <(curl -s https://codecov.io/bash) -f packages/core-components/coverage/* -F core-components
bash <(curl -s https://codecov.io/bash) -f packages/core-plugin-api/coverage/* -F core-plugin-api
env:
BACKSTAGE_NEXT_TESTS: 1
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] }}
@@ -146,7 +145,7 @@ jobs:
node-version: ${{ matrix.node-version }}
registry-url: https://registry.npmjs.org/ # Needed for auth
- name: yarn install
uses: backstage/actions/yarn-install@v0.5.8
uses: backstage/actions/yarn-install@v0.5.11
with:
cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
+1 -1
View File
@@ -10,4 +10,4 @@ jobs:
if: github.repository == 'backstage/backstage'
steps:
- name: Issue sync
uses: backstage/actions/issue-sync@v0.5.8
uses: backstage/actions/issue-sync@v0.5.11
+1 -1
View File
@@ -35,7 +35,7 @@ jobs:
const prNumber = artifact.name.slice('pr_number-'.length)
core.setOutput('pr-number', prNumber);
- uses: backstage/actions/re-review@v0.5.8
- uses: backstage/actions/re-review@v0.5.11
with:
app-id: ${{ secrets.BACKSTAGE_GOALIE_APPLICATION_ID }}
private-key: ${{ secrets.BACKSTAGE_GOALIE_PRIVATE_KEY }}
+1 -1
View File
@@ -18,7 +18,7 @@ jobs:
if: github.repository == 'backstage/backstage' && ( github.event.pull_request || github.event.issue.pull_request )
steps:
- name: PR sync
uses: backstage/actions/pr-sync@v0.5.8
uses: backstage/actions/pr-sync@v0.5.11
with:
github-token: ${{ secrets.GH_SERVICE_ACCOUNT_TOKEN }}
app-id: ${{ secrets.BACKSTAGE_GOALIE_APPLICATION_ID }}
+1 -1
View File
@@ -20,7 +20,7 @@ jobs:
node-version: ${{ matrix.node-version }}
registry-url: https://registry.npmjs.org/ # Needed for auth
- name: yarn install
uses: backstage/actions/yarn-install@v0.5.8
uses: backstage/actions/yarn-install@v0.5.11
with:
cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
@@ -23,7 +23,7 @@ jobs:
node-version: ${{ matrix.node-version }}
registry-url: https://registry.npmjs.org/ # Needed for auth
- name: yarn install
uses: backstage/actions/yarn-install@v0.5.8
uses: backstage/actions/yarn-install@v0.5.11
with:
cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
+118
View File
@@ -0,0 +1,118 @@
name: Preview (build)
on:
pull_request:
types: [opened, synchronize, reopened, closed]
paths-ignore:
- 'microsite/**'
- '*.md'
jobs:
build-backstage:
name: Build PR image
runs-on: ubuntu-latest
if: ${{ github.event_name != 'pull_request' || github.event.action != 'closed' }}
outputs:
tags: ${{ steps.meta.outputs.tags }}
steps:
- name: checkout
uses: actions/checkout@v3
with:
path: backstage
- name: setup-node
uses: actions/setup-node@v3
with:
node-version: 16.x
registry-url: https://registry.npmjs.org/
- name: backstage create-app | delete if already exists
run: |
rm -rf ./example-app
npx @backstage/create-app
env:
BACKSTAGE_APP_NAME: example-app
- name: yarn build
run: |
yarn build:all
working-directory: ./example-app
- name: Use Uffizzi's backstage app config
run: |
cp ./backstage/.github/uffizzi/uffizzi.production.app-config.yaml ./example-app/app-config.production.yaml;
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Generate UUID image name
id: uuid
run: echo "UUID_TAG_APP=$(uuidgen)" >> $GITHUB_ENV
- name: Docker metadata
id: meta
uses: docker/metadata-action@v3
with:
images: registry.uffizzi.com/${{ env.UUID_TAG_APP }}
tags: type=raw,value=60d
- name: Build Image
uses: docker/build-push-action@v2
with:
context: example-app
file: example-app/packages/backend/Dockerfile
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
push: true
render-compose-file:
name: Render Docker Compose File
runs-on: ubuntu-latest
needs:
- build-backstage
outputs:
compose-file-cache-key: ${{ steps.hash.outputs.hash }}
steps:
- name: Checkout git repo
uses: actions/checkout@v3
- name: Render Compose File
run: |
BACKSTAGE_IMAGE=$(echo ${{ needs.build-backstage.outputs.tags }})
export BACKSTAGE_IMAGE
# Render simple template from environment variables.
envsubst '$BACKSTAGE_IMAGE' < .github/uffizzi/docker-compose.uffizzi.yml > docker-compose.rendered.yml
cat docker-compose.rendered.yml
- name: Upload Rendered Compose File as Artifact
uses: actions/upload-artifact@v3
with:
name: preview-spec
path: docker-compose.rendered.yml
retention-days: 2
- name: Serialize PR Event to File
run: |
cat << EOF > event.json
${{ toJSON(github.event) }}
EOF
- name: Upload PR Event as Artifact
uses: actions/upload-artifact@v3
with:
name: preview-spec
path: event.json
retention-days: 2
delete-preview:
name: Call for Preview Deletion
runs-on: ubuntu-latest
if: ${{ github.event.action == 'closed' }}
steps:
# If this PR is closing, we will not render a compose file nor pass it to the next workflow.
- name: Serialize PR Event to File
run: |
cat << EOF > event.json
${{ toJSON(github.event) }}
EOF
- name: Upload PR Event as Artifact
uses: actions/upload-artifact@v3
with:
name: preview-spec
path: event.json
retention-days: 2
+91
View File
@@ -0,0 +1,91 @@
name: Preview (deploy)
on:
workflow_run:
workflows:
- 'Preview (build)'
types:
- completed
jobs:
cache-compose-file:
name: Cache Compose File
runs-on: ubuntu-latest
outputs:
compose-file-cache-key: ${{ env.COMPOSE_FILE_HASH }}
pr-number: ${{ env.PR_NUMBER }}
steps:
- name: 'Download artifacts'
# Fetch output (zip archive) from the workflow run that triggered this workflow.
uses: actions/github-script@v6
with:
script: |
let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({
owner: context.repo.owner,
repo: context.repo.repo,
run_id: context.payload.workflow_run.id,
});
let matchArtifact = allArtifacts.data.artifacts.filter((artifact) => {
return artifact.name == "preview-spec"
})[0];
if (matchArtifact === undefined) {
throw TypeError('Build Artifact not found!');
}
let download = await github.rest.actions.downloadArtifact({
owner: context.repo.owner,
repo: context.repo.repo,
artifact_id: matchArtifact.id,
archive_format: 'zip',
});
let fs = require('fs');
fs.writeFileSync(`${process.env.GITHUB_WORKSPACE}/preview-spec.zip`, Buffer.from(download.data));
- name: 'Unzip artifact'
run: unzip preview-spec.zip
- name: Read Event into ENV
run: |
echo 'EVENT_JSON<<EOF' >> $GITHUB_ENV
cat event.json >> $GITHUB_ENV
echo 'EOF' >> $GITHUB_ENV
- name: Hash Rendered Compose File
id: hash
# If the previous workflow was triggered by a PR close event, we will not have a compose file artifact.
if: ${{ fromJSON(env.EVENT_JSON).action != 'closed' }}
run: echo "COMPOSE_FILE_HASH=$(md5sum docker-compose.rendered.yml | awk '{ print $1 }')" >> $GITHUB_ENV
- name: Cache Rendered Compose File
if: ${{ fromJSON(env.EVENT_JSON).action != 'closed' }}
uses: actions/cache@v3
with:
path: docker-compose.rendered.yml
key: ${{ env.COMPOSE_FILE_HASH }}
- name: Read PR Number From Event Object
id: pr
run: echo "PR_NUMBER=${{ fromJSON(env.EVENT_JSON).number }}" >> $GITHUB_ENV
- name: DEBUG - Print Job Outputs
if: ${{ runner.debug }}
run: |
echo "PR number: ${{ env.PR_NUMBER }}"
echo "Compose file hash: ${{ env.COMPOSE_FILE_HASH }}"
cat event.json
deploy-uffizzi-preview:
name: Use Remote Workflow to Preview on Uffizzi
needs:
- cache-compose-file
uses: UffizziCloud/preview-action/.github/workflows/reusable.yaml@v2
with:
# If this workflow was triggered by a PR close event, cache-key will be an empty string
# 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
pr-number: ${{ needs.cache-compose-file.outputs.pr-number }}
permissions:
contents: read
pull-requests: write
id-token: write
+1 -1
View File
@@ -52,7 +52,7 @@ jobs:
node-version: ${{ matrix.node-version }}
registry-url: https://registry.npmjs.org/ # Needed for auth
- name: yarn install
uses: backstage/actions/yarn-install@v0.5.8
uses: backstage/actions/yarn-install@v0.5.11
with:
cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
+2 -2
View File
@@ -28,12 +28,12 @@ jobs:
registry-url: https://registry.npmjs.org/ # Needed for auth
- name: yarn install
uses: backstage/actions/yarn-install@v0.5.8
uses: backstage/actions/yarn-install@v0.5.11
with:
cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
- name: bootstrap kind
uses: helm/kind-action@v1.4.0
uses: helm/kind-action@v1.5.0
- name: kubernetes test
working-directory: packages/backend-common
@@ -0,0 +1,44 @@
name: Verify Microsite Next
on:
pull_request:
paths:
- '.github/workflows/verify_microsite-next.yml'
- 'microsite-next/**'
- 'docs/**'
jobs:
build-microsite:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [16.x]
env:
CI: true
NODE_OPTIONS: --max-old-space-size=4096
steps:
- uses: actions/checkout@v3
- name: use node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
# Skip caching of microsite dependencies, it keeps the global cache size
# smaller, which make Windows builds a lot faster for the rest of the project.
- name: yarn install
run: yarn install --immutable
working-directory: microsite-next
- name: verify yarn dependency duplicates
run: node scripts/verify-lockfile-duplicates.js
- name: prettier
run: yarn prettier:check
working-directory: microsite-next
- name: build microsite-next
run: yarn build
working-directory: microsite-next
+1 -1
View File
@@ -35,7 +35,7 @@ jobs:
node-version: ${{ matrix.node-version }}
registry-url: https://registry.npmjs.org/ # Needed for auth
- name: yarn install
uses: backstage/actions/yarn-install@v0.5.8
uses: backstage/actions/yarn-install@v0.5.11
with:
cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }}
- name: storybook yarn install
-1
View File
@@ -48,7 +48,6 @@ jobs:
- name: test
run: yarn backstage-cli repo test --maxWorkers=2 --workerIdleMemoryLimit=1300M
env:
BACKSTAGE_NEXT_TESTS: 1
BACKSTAGE_TEST_DISABLE_DOCKER: 1
# credit: https://github.com/appleboy/discord-action/issues/3#issuecomment-731426861
+15 -13
View File
@@ -4,7 +4,7 @@ _If you're using Backstage in your organization, please try to add your company
_You can do this by using the [Adopter form](https://info.backstage.spotify.com/public-adopter-hand-raiser-form) or by editing this file after following the [CONTRIBUTING.md](./CONTRIBUTING.md)._
| Organization | Contact | Description of Use |
| --------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|-----------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [Spotify](https://www.spotify.com) | [@leemills83](https://github.com/leemills83) | Main interface towards all of Spotify's infrastructure and technical documentation. |
| [bol.com](https://www.bol.com) | [@acierto](https://github.com/acierto), [@clanghout](https://github.com/clanghout) | Initial work being done to unify platform tooling. |
| [DFDS](https://www.dfds.com) | [@carlsendk](https://github.com/carlsendk) | V2 self-service platform. |
@@ -22,10 +22,10 @@ _You can do this by using the [Adopter form](https://info.backstage.spotify.com/
| [Fiverr](https://www.fiverr.com) | [@nirga](https://github.com/nirga) | Unifying separate tools that developers are using today (i.e. monitoring, dead letter queues management, etc.) into a single platform. |
| [Zalando SE](https://www.zalando.de) | [@leviferreira](https://github.com/leviferreira) | Building V2 of the Internal Development Portal. |
| [LegalZoom](https://legalzoom.com) | [@backjo](https://github.com/backjo) | Developer portal - hub for all engineering projects and metadata. |
| [Expedia Group](https://www.expediagroup.com) | [@gman0922](https://github.com/gman0922), [Sheena Sharma](mailto:shesharma@expediagroup.com), [Alekhya Karuturi](mailto:akaruturi@expediagroup.com) | EG Developer Front Door |
| [Expedia Group](https://www.expediagroup.com) | [@gman0922](https://github.com/gman0922), [Sheena Sharma](mailto:shesharma@expediagroup.com), [Alekhya Karuturi](mailto:akaruturi@expediagroup.com) | EG Developer Front Door |
| [Paddle.com](https://paddle.com) | [Ioannis Georgoulas](https://github.com/geototti21) | Developer portal (Tech Docs, Service Catalog, Internal Tooling), we use vanilla Backstage FE and custom BE implementation in Go |
| [Acast.com](https://acast.com) | [Olle Lundberg](https://github.com/lndbrg) | Developer portal with tech docs, service catalog and a bunch of other internal tooling |
| [Lunar](https://lunar.app) | [Bjørn Hald Sørensen](https://github.com/crevil) | Internal developer portal for service overview and insights, API documentation, technical guides, onboarding guides and RFC's. |
| [Lunar](https://lunar.app) | [Bjørn Hald Sørensen](https://github.com/crevil) | Internal developer portal for service overview and insights, API documentation, technical guides, onboarding guides and RFC's. |
| [Trendyol](https://trendyol.com) | [Gamze Senturk](https://github.com/gmzsenturk), [Mert Can Bilgic](https://github.com/mertcb) | The Developer Portal has been called `Pandora`. Provides an overview of Trendyol tech ecosystem. TechDocs, Catalog, Custom Plugins and Theme. |
| [Peloton](https://www.onepeloton.com/) | [Matt Waldron](https://github.com/daftgopher) | Creating our first developer portal and tech-docs. Exploring Service Catalog, Tech Insights and Cost Insights as well. |
| [Brex](https://www.brex.com/) | [Vamsi Chitters](https://github.com/vamsikc) | A centralized UI to understand how a service fits in the whole Brex architecture and manage a teams engineering dependencies. |
@@ -34,7 +34,7 @@ _You can do this by using the [Adopter form](https://info.backstage.spotify.com/
| [Netflix](https://www.netflix.com/) | [bleathem](https://github.com/bleathem) | Our Backstage implementation will be the front door to a unified experience connecting our internal platform products across important workflows with integrated knowledge and support. |
| [b.well](https://www.icanbwell.com/) | [Jacob Rosales](https://github.com/jrosales) | Foundation for our engineering portal and cloud insights. |
| [PagerDuty](https://www.pagerduty.com/) | [Mark Shaw](https://github.com/markshawtoronto) | Developer portal, initially focused on software templates and tech-docs. |
| [MoonShiner](https://moonshiner.at) | [Fabian Hippmann](https://github.com/FabianHippmann) | Developer portal - helps us keep track of our customer projects, onboard new developers & improve our development process 🌕🚀🧑‍🚀 |
| [MoonShiner](https://moonshiner.at) | [Fabian Hippmann](https://github.com/FabianHippmann) | Developer portal - helps us keep track of our customer projects, onboard new developers & improve our development process 🌕🚀🧑‍🚀 |
| [FundApps](https://www.fundapps.co/) | [Elliot Greenwood](https://github.com/egnwd) | Developer Portal - A place for us to keep track of our projects and documentation for all services and processes |
| [DAZN](https://dazn.com/) | [David Rubio Vidal](https://github.com/davidrv87), [Marco Crivellaro](https://github.com/crivetechie), [Alex Hollerith](mailto:alex.hollerith@dazn.com), [Kamil Wolny](https://github.com/mrwolny) | Ingesting all of DAZN's repos for the catalog, migrating our internal platform apps (pull request boards, release information, inner source marketplace etc) to Backstage plugins (where applicable). |
| [HelloFresh](https://www.hellofresh.de/) | [@iammuho](https://github.com/iammuho), [@ElenaForester](https://github.com/ElenaForester), [@diegomarangoni](https://github.com/diegomarangoni) | Our developer portal at HelloFresh - Spread across an organisation of 500+ engineers globally. |
@@ -71,7 +71,7 @@ _You can do this by using the [Adopter form](https://info.backstage.spotify.com/
| [Signal Iduna Group](https://www.signal-iduna.de/) | [Jonas Thomsen](https://github.com/JoThomsen) | Developer Portal, documentation, monitoring, service catalog for our insurance ecosystem |
| [Tradeshift](https://www.tradeshift.com/) | [Soren Mathiasen](https://github.com/sorenmat) | Developer Portal: documentation, monitoring, service templates, service catalog for our micro services |
| [Unity](https://unity.com) | [Ted Cordery](https://github.com/TeddyBallGame) | A centralized service catalog with documentation for our service engineers. |
| [PicPay](https://www.picpay.com) | [Elton Welsch](https://github.com/eltonwelsch), [Emanuella Okada](https://github.com/ManuOkadaPicPay), [PicPay](https://github.com/picpay) | Developer portal for building services through templates, service catalog with ownership of services, documentation and metrics providing autonomy and visibility for all. |
| [PicPay](https://www.picpay.com) | [Elton Welsch](https://github.com/eltonwelsch), [Emanuella Okada](https://github.com/ManuOkadaPicPay), [PicPay](https://github.com/picpay) | Developer portal for building services through templates, service catalog with ownership of services, documentation and metrics providing autonomy and visibility for all. |
| [Epic Games](https://www.epicgames.com) | [Brian Jung](https://github.com/brian-at-epic), [Jeff Goldian](https://github.com/jeffgoldian-Epic) | Developer Portal: Service Catalog, Documentation, Software Templates and more making our internal teams' lives easier! |
| [Globo](https://globo.com) | [Carlos Gusmão](https://github.com/caeugusmao), [Guilherme Vierno](https://github.com/vierno), [Denis Aoki](https://github.com/dnsaoki2), [Maycon Dionisio](https://github.com/MayconDionisio), | Reduce the friction of accessing the information engineers need about Globo's digital services through a coherent and centralized experience. |
| [QBE](https://www.qbe.com/) | [Daniel Steel](https://github.com/danielsteelqbe), [Pete Jespers](https://github.com/petejespersqbe) | Developer portal allowing our global teams to explore and create applications, documentation and cloud infrastructure easily and quickly 🚀 |
@@ -141,7 +141,7 @@ _You can do this by using the [Adopter form](https://info.backstage.spotify.com/
| [Kambi AB](https://www.kambi.com) | [Martin Norum](mailto:martin.norum@kambi.com) | We want to kick ass at speed, so we're currently building up a catalog of our existing software, and looking into how Backstage can support us in our journey towards autonomous product teams. Both to improve speed to market and operational awareness. |
| [ANZ](https://www.anz.com.au/personal/) | [Elliot Jackson](mailto:elliot.jackson@anz.com) | Catalog, tech docs and automation |
| [Genie Solutions](https://www.geniesolutionssoftware.com.au) | [Zainab Bagasrawala](mailto:zainabbagasrawala@geniesolutions.com.au) | Developer Portal to track our projects, documentation, observability tools and more |
| [MadeiraMadeira](https://www.madeiramadeira.com.br) | [DX Team](mailto:dxteam@madeiramadeira.com.br) | As a support tool for developers, following the principles of "Developer Experience". In order to make the developer's day to day more practical, efficient and, why not, happy. |
| [MadeiraMadeira](https://www.madeiramadeira.com.br) | [DX Team](mailto:dxteam@madeiramadeira.com.br) | As a support tool for developers, following the principles of "Developer Experience". In order to make the developer's day to day more practical, efficient and, why not, happy. |
| [Sonatype](https://www.sonatype.com) | [Srikar Ananthula](mailto:sananthula@sonatype.com) | Centralize services used internally with many plugins |
| [CVS Health](https://www.cvshealth.com) | [Ari Ben-Elazar](mailto:abenelazar@gmail.com) | Cataloging and documenting our service offerings to offer our internal developers a better operational journey |
| [Yatra.com](https://www.yatra.com) | [Matiur Rahman Maitur](mailto:arifrahman4u@gmail.com) | Easy to find out Project details, ownership, dependent services, Documentation, it is very useful for developer. |
@@ -215,10 +215,12 @@ _You can do this by using the [Adopter form](https://info.backstage.spotify.com/
| [Ferrovial](https://ferrovial.com) | [Jose Luis Rosado](mailto:jlrosado@ferrovial.com) | Backstage is helping us to improve and acelerate dev experience helping teams to quickly find technical documentation, infrastructure templates, pipelines, software components and quickstarters that have been developed by our squads in a inner source friendly environment. |
| [Inter&Co](https://bancointer.com.br) | [Arnaud Lanna](https://github.com/arnaudlanna), [Adriano Silva](https://github.com/adrianovss), [Bruno Grossi](https://github.com/begrossi) | We're using Backstage as our internal Developer Portal to catalog and collect repositories and microservices pieces of information like ownership, deployment time, and documentation. |
| [StatusNeo](https://statusneo.com/) | [Karan Nangru](mailto:nangru@statusneo.com), [@NishkarshRaj](https://github.com/NishkarshRaj), and [Gaurav Sarien](mailto:gaurav.sarien@statusneo.com) | Harnessing the power of central catalog inventory and self-serving software templates |
| [Alaska Airlines](https://alaskaair.com) | [@swerdick](https://github.com/swerdick) | Backstage is the developer portal for our 'software delivery platform'. Consolidating developer tools to one place, and providing automation to make it easy for developers to create and deploy applications to Kubernetes
| [Loft](https://loft.com.br) | [Squad DevTools](mailto:squad_devtools@loft.com.br) | We're using Backstage to give visibility and promote ownership of all our applications, resources and tools. Now moving to use it as a Developer Portal to create applications, AWS resources etc. |
| [Raízen](https://www.raizen.com) | [Melquisedque Bernardes Pereira](https://github.com/rayleshh) and [Paulo Eduardo Peixoto](https://github.com/padupe) | Backstage helps us to organize and make available, in a simple and direct way, all the infrastructure for new projects. In addition, it has become a great support tool for our developers. |
| [Trifork](https://trifork.com) | [Casper Thygesen](https://github.com/cthtrifork) | We're using Backstage as part of our dataplatform product. It integrates with the infrastructure components and is the developer portal for all the platform users. |
| [MSCI](http://msci.com) | [Stephen Burrows](mailto:stephen.burrows@msci.com) | Developer portal, service catalog, documentation and tooling
| [ESW](https://esw.com) | [Alisson Fabiano](https://github.com/afabianoo), [Bruno Quintella](https://github.com/quintelab) and [Guilherme Oenning](https://github.com/goenning) | Backstage is our one stop shop to find everything related to all our services, such as ownership, dependencies, production status, tech health and much more.
| [FanDuel](https://fanduel.com) | [Diego Herrera](https://github.com/diegoh), [Christy Campbell](https://github.com/FD-ChristopherCampbell) | We use backstage as our developer portal to provide visibility of our software, ownership, strategy, and the state of maturity across disciplines.
| [Alaska Airlines](https://alaskaair.com) | [@swerdick](https://github.com/swerdick) | Backstage is the developer portal for our 'software delivery platform'. Consolidating developer tools to one place, and providing automation to make it easy for developers to create and deploy applications to Kubernetes |
| [Loft](https://loft.com.br) | [Squad DevTools](mailto:squad_devtools@loft.com.br) | We're using Backstage to give visibility and promote ownership of all our applications, resources and tools. Now moving to use it as a Developer Portal to create applications, AWS resources etc. |
| [Raízen](https://www.raizen.com) | [Melquisedque Bernardes Pereira](https://github.com/rayleshh) and [Paulo Eduardo Peixoto](https://github.com/padupe) | Backstage helps us to organize and make available, in a simple and direct way, all the infrastructure for new projects. In addition, it has become a great support tool for our developers. |
| [Trifork](https://trifork.com) | [Casper Thygesen](https://github.com/cthtrifork) | We're using Backstage as part of our dataplatform product. It integrates with the infrastructure components and is the developer portal for all the platform users. |
| [MSCI](http://msci.com) | [Stephen Burrows](mailto:stephen.burrows@msci.com) | Developer portal, service catalog, documentation and tooling |
| [ESW](https://esw.com) | [Alisson Fabiano](https://github.com/afabianoo), [Bruno Quintella](https://github.com/quintelab) and [Guilherme Oenning](https://github.com/goenning) | Backstage is our one stop shop to find everything related to all our services, such as ownership, dependencies, production status, tech health and much more. |
| [FanDuel](https://fanduel.com) | [Diego Herrera](https://github.com/diegoh), [Christy Campbell](https://github.com/FD-ChristopherCampbell) | We use backstage as our developer portal to provide visibility of our software, ownership, strategy, and the state of maturity across disciplines. |
| [Operate First](https://www.operate-first.cloud/) | [Tom Coufal](https://github.com/tumido), [Sam Kopecky](https://github.com/samokopecky) | Backstage provides us with a public service catalog and serves as a gateway to our community cloud. Our instance is publicly available to everyone [here](https://service-catalog.operate-first.cloud/) ([source](https://github.com/operate-first/service-catalog)) |
| [Tractable AI](https://tractable.ai/) | [Stephan Schielke](https://github.com/stephanschielke) | We are hitting a critical point in our scale (100+ engineers) and need to get a handle on discoverability and ownership. The Service Catalog, TechDocs and Search are essential to us to achieve that. |
+5
View File
@@ -0,0 +1,5 @@
FROM mcr.microsoft.com/devcontainers/typescript-node:18
RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
&& apt-get -y install chromium \
&& apt-get -y install build-essential libcairo2-dev libpango1.0-dev libjpeg-dev libgif-dev librsvg2-dev
+19
View File
@@ -0,0 +1,19 @@
# Devcontainer Configuration
[Devcontainer](https://code.visualstudio.com/docs/devcontainers/containers) is a VSCode feature that allows developers
to share a common workspace definition, by leveraging Docker to run the workspace, and using VSCode Remote Development extension, you can make sure the developer experience is the same across different computers
## Benefits
- Developers only need to have VSCode and Docker installed
- All dependencies necessary to work in the repository are contained in the docker image
- Makes it easier for new developers to start contributing to the project
- No extra setup required
## Known Issues
- Performance is a known issue. Working inside devcontainers require developers to have a powerful computer. See [System Requirements](https://code.visualstudio.com/docs/devcontainers/containers#_system-requirements)
## Usage
Just copy the .devcontainer folder to the root of the directory, and VSCode will automatically detect the configuration and suggest that you re-open the repository using Devcontainer
+27
View File
@@ -0,0 +1,27 @@
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
// README at: https://github.com/devcontainers/templates/tree/main/src/typescript-node
{
"name": "Base Backstage Workspace",
"build": { "dockerfile": "Dockerfile" },
"features": {
"ghcr.io/devcontainers/features/common-utils:1": {},
"ghcr.io/devcontainers/features/docker-from-docker:1": {},
"ghcr.io/devcontainers-contrib/features/mkdocs:1": {}
},
// Use 'forwardPorts' to make a list of ports inside the container available locally.
"forwardPorts": [3000, 7007],
// Use 'postCreateCommand' to run commands after the container is created.
"postCreateCommand": "bash .devcontainer/postCreate.sh",
// Configure tool-specific properties.
"customizations": {
"vscode": {
"extensions": ["Intility.vscode-backstage"]
}
}
// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
// "remoteUser": "root"
}
+3
View File
@@ -0,0 +1,3 @@
#!/bin/bash
yarn install
pip install mkdocs-techdocs-core
+2 -2
View File
@@ -1,7 +1,7 @@
# Deploying Backstage on AWS using ECR and EKS
Backstage documentation shows how to build a [Docker
image](https://backstage.io/docs/getting-started/deployment-docker); this
image](https://backstage.io/docs/deployment/docker); this
tutorial shows how to deploy that Docker image to AWS using Elastic Container
Registry (ECR) and Elastic Kubernetes Service (EKS). Amazon also supports
deployments with Helm, covered in the [Helm
@@ -36,7 +36,7 @@ Go to [AWS IAM console](https://console.aws.amazon.com/iam/home) and select
## Publish a Backstage build
Follow the [Docker
image](https://backstage.io/docs/getting-started/deployment-docker)
image](https://backstage.io/docs/deployment/docker)
documentation to build a new Backstage Docker image:
```shell
+6 -6
View File
@@ -1415,22 +1415,22 @@ __metadata:
linkType: hard
"typescript@npm:^4.1.3":
version: 4.9.3
resolution: "typescript@npm:4.9.3"
version: 4.9.4
resolution: "typescript@npm:4.9.4"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
checksum: 17b8f816050b412403e38d48eef0e893deb6be522d6dc7caf105e54a72e34daf6835c447735fd2b28b66784e72bfbf87f627abb4818a8e43d1fa8106396128dc
checksum: e782fb9e0031cb258a80000f6c13530288c6d63f1177ed43f770533fdc15740d271554cdae86701c1dd2c83b082cea808b07e97fd68b38a172a83dbf9e0d0ef9
languageName: node
linkType: hard
"typescript@patch:typescript@^4.1.3#~builtin<compat/typescript>":
version: 4.9.3
resolution: "typescript@patch:typescript@npm%3A4.9.3#~builtin<compat/typescript>::version=4.9.3&hash=a1c5e5"
version: 4.9.4
resolution: "typescript@patch:typescript@npm%3A4.9.4#~builtin<compat/typescript>::version=4.9.4&hash=a1c5e5"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
checksum: ef65c22622d864497d0a0c5db693523329b3284c15fe632e93ad9aa059e8dc38ef3bd767d6f26b1e5ecf9446f49bd0f6c4e5714a2eeaf352805dc002479843d1
checksum: 37f6e2c3c5e2aa5934b85b0fddbf32eeac8b1bacf3a5b51d01946936d03f5377fe86255d4e5a4ae628fd0cd553386355ad362c57f13b4635064400f3e8e05b9d
languageName: node
linkType: hard
+7 -7
View File
@@ -283,14 +283,14 @@ long as they adhere to the contract established by an
implementation they want.
The figure below shows the relationship between
<span style="color: #82b366">different Apps</span>, that provide
<span style="color: #6c8ebf">different implementations</span> of the
<span style="color: #9673a6">FooApi</span>.
<span style="color: #d6b656">Components</span> within Plugins then access the
<span style="color: #9673a6">FooApi</span> via the
<span style="color: #b85450">fooApiRef</span>.
<span class="textGreen" className="textGreen">different Apps</span>, that provide
<span class="textBlue" className="textBlue"> different implementations</span> of the
<span class="textPurple" className="textPurple"> FooApi</span>.
<span class="textYellow" className="textYellow"> Components</span> within Plugins then access the
<span class="textPurple" className="textPurple"> FooApi</span> via the
<span class="textRed" className="textRed"> fooApiRef</span>.
<div style="text-align:center">
<div className="textAlignCenter" class="textAlignCenter">
<img src="../assets/utility-apis-fig1.svg" alt="Figure showing the relationship between utility APIs, the apps that provide them, and the plugins that consume them" />
</div>
+25
View File
@@ -150,6 +150,31 @@ const app = createApp({
});
```
If the provider in auth backend expects additional headers such as `x-provider-token`, there is now a way to configure that in `ProxiedSignInPage` using the optional `headers` prop.
Example:
```tsx
<ProxiedSignInPage
{...props}
provider="my-custom-provider"
headers={{ 'x-some-key': someValue }}
/>
```
Headers can also be returned in an async manner:
```tsx
<ProxiedSignInPage
{...props}
provider="my-custom-provider"
headers={async () => {
const someValue = await someFn();
return { 'x-some-key': someValue };
}}
/>
```
A downside of this method is that it can be cumbersome to set up for local development.
As a workaround for this, it's possible to dynamically select the sign-in page based on
what environment the app is running in, and then use a different sign-in method for local
+11 -2
View File
@@ -31,6 +31,7 @@ kubernetes:
dashboardUrl: http://127.0.0.1:64713 # url copied from running the command: minikube service kubernetes-dashboard -n kubernetes-dashboard
dashboardApp: standard
caData: ${K8S_CONFIG_CA_DATA}
caFile: '' # local path to CA file
customResources:
- group: 'argoproj.io'
apiVersion: 'v1alpha1'
@@ -248,8 +249,8 @@ kubernetes:
##### `clusters.\*.caData` (optional)
Base64-encoded certificate authority bundle in PEM format. The Kubernetes client
will verify that TLS certificate presented by the API server is signed by this
CA.
will verify that the TLS certificate presented by the API server is signed by
this CA.
This value could be obtained via inspecting the kubeconfig file (usually
at `~/.kube/config`) under `clusters[*].cluster.certificate-authority-data`. For
@@ -265,6 +266,14 @@ See also
https://cloud.google.com/kubernetes-engine/docs/how-to/api-server-authentication#environments-without-gcloud
for complete docs about GKE without `gcloud`.
##### `clusters.\*.caFile` (optional)
Filesystem path (on the host where the Backstage process is running) to a
certificate authority bundle in PEM format. The Kubernetes client will verify
that the TLS certificate presented by the API server is signed by this CA. Note
that only clusters defined in the app-config via the [`config`](#config)
cluster locator method can be configured in this way.
##### `clusters.\*.customResources` (optional)
Configures which [custom resources][3] to look for when returning an entity's
+3 -3
View File
@@ -1,8 +1,8 @@
---
id: how-to-guides
title: Search "HOW TO" guides
sidebar_label: "HOW TO" guides
description: Search "HOW TO" guides
title: Search How-To guides
sidebar_label: How-To guides
description: Search How To guides
---
## How to implement your own Search API
+16 -1
View File
@@ -117,7 +117,8 @@ within your instance. The configuration options are documented in the
The underlying functionality uses either the official ElasticSearch client
version 7.x (meaning that ElasticSearch version 7 is the only one confirmed to
be supported), or the OpenSearch client, when the `aws` provider is configured.
be supported), or the OpenSearch client, when the `aws` or `opensearch `provider
is configured.
Should you need to create your own bespoke search experiences that require more
than just a query translator (such as faceted search or Relay pagination), you
@@ -200,6 +201,20 @@ search:
password: changeme
```
### OpenSearch
OpenSearch can be self hosted for example with the [official docker image](https://hub.docker.com/r/opensearchproject/opensearch). The configuration requires only the node and authentication.
```yaml
search:
elasticsearch:
provider: opensearch
node: http://0.0.0.0:9200
auth:
username: opensearch
password: changeme
```
### Others
Other ElasticSearch instances can be connected to by using standard
@@ -703,7 +703,7 @@ spec:
name: Register
action: catalog:register
input:
repoContentsUrl: '{{ steps.publish.output.repoContentsUrl }}'
repoContentsUrl: {{ steps['publish'].output.repoContentsUrl }}
catalogInfoPath: '/catalog-info.yaml'
```
@@ -76,7 +76,7 @@ spec:
name: Register
action: catalog:register
input:
repoContentsUrl: ${{ steps.publish.output.repoContentsUrl }}
repoContentsUrl: ${{ steps['publish'].output.repoContentsUrl }}
catalogInfoPath: '/catalog-info.yaml'
```
@@ -169,14 +169,14 @@ These should be moved to `links` under the `output` object instead.
```diff
output:
- remoteUrl: '{{ steps.publish.output.remoteUrl }}'
- entityRef: '{{ steps.register.output.entityRef }}'
- remoteUrl: {{ steps['publish'].output.remoteUrl }}
- entityRef: {{ steps['register'].output.entityRef }}
+ links:
+ - title: Repository
+ url: ${{ steps.publish.output.remoteUrl }}
+ url: ${{ steps['publish'].output.remoteUrl }}
+ - title: Open in catalog
+ icon: catalog
+ entityRef: ${{ steps.register.output.entityRef }}
+ entityRef: ${{ steps['register'].output.entityRef }}
```
@@ -88,17 +88,17 @@ spec:
name: Register
action: catalog:register
input:
repoContentsUrl: ${{ steps.publish.output.repoContentsUrl }}
repoContentsUrl: ${{ steps['publish'].output.repoContentsUrl }}
catalogInfoPath: '/catalog-info.yaml'
# some outputs which are saved along with the job for use in the frontend
output:
links:
- title: Repository
url: ${{ steps.publish.output.remoteUrl }}
url: ${{ steps['publish'].output.remoteUrl }}
- title: Open in catalog
icon: catalog
entityRef: ${{ steps.register.output.entityRef }}
entityRef: ${{ steps['register'].output.entityRef }}
```
Let's dive in and pick apart what each of these sections do and what they are.
@@ -505,10 +505,10 @@ The main two that are used are the following:
output:
links:
- title: Repository
url: ${{ steps.publish.output.remoteUrl }} # link to the remote repository
url: ${{ steps['publish'].output.remoteUrl }} # link to the remote repository
- title: Open in catalog
icon: catalog
entityRef: ${{ steps.register.output.entityRef }} # link to the entity that has been ingested to the catalog
entityRef: ${{ steps['register'].output.entityRef }} # link to the entity that has been ingested to the catalog
```
## The templating syntax

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