Merge branch 'master' into tech-docs-search-by-title
Signed-off-by: Stephen <code@stephenawilson.ca>
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/create-app': patch
|
||||
---
|
||||
|
||||
Added `MyGroupsSidebarItem` to the sidebar in the `create-app` template
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder': minor
|
||||
---
|
||||
|
||||
Use virtualization with `EntityPicker` as done earlier with `MultiEntityPicker` to fix performance issues with large data sets. `VirtualizedListbox` extracted into reusable component.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/backend-common': patch
|
||||
---
|
||||
|
||||
Deprecate legacy status check factory, handler and types.
|
||||
@@ -1,6 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-techdocs-react': patch
|
||||
'@backstage/plugin-techdocs': patch
|
||||
---
|
||||
|
||||
Fixed a bug with the TechDocsReaderPageProvider not re-rendering when setShadowDom is called, meaning that the useShadowDom hooks were inconsistent. This issue caused the TextSize addon changes not to reapply during navigation.
|
||||
Resolved the issue where changes in TechDoc add-ons, including the TextSize add-on, were not reapplying during navigation
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/create-app': patch
|
||||
---
|
||||
|
||||
Bumped create-app version.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/core-components': patch
|
||||
---
|
||||
|
||||
Fixed bug where `<Select>` component with empty string as placeholder gave an error
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-techdocs': patch
|
||||
---
|
||||
|
||||
Improve default sorting of docs table
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
'@backstage/plugin-techdocs-backend': patch
|
||||
'@backstage/plugin-techdocs-node': patch
|
||||
---
|
||||
|
||||
Adds extension point for publishers to the techdocs backend
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder-backend-module-bitbucket-server': patch
|
||||
---
|
||||
|
||||
Instead of using hardcoded `targetBranch` now fetch the default branch from Bitbucket repository.
|
||||
This prevents from errors when no `targetBranch` is provided and the default repository branch is different from `master`, for example: `main`.
|
||||
@@ -0,0 +1,15 @@
|
||||
---
|
||||
'@backstage/core-app-api': minor
|
||||
'@backstage/frontend-app-api': patch
|
||||
---
|
||||
|
||||
Allow for the disabling of external routes through config, which was rendered impossible after the introduction of default targets.
|
||||
|
||||
```yaml
|
||||
app:
|
||||
routes:
|
||||
bindings:
|
||||
# This has the effect of removing the button for registering new
|
||||
# catalog entities in the scaffolder template list view
|
||||
scaffolder.registerComponent: false
|
||||
```
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-org': patch
|
||||
---
|
||||
|
||||
The `useGetEntities` hook could result in requests to `/api/catalog/entities` where the headers exceed the default maximum Node.js header size of 16KB. The hook logic has been adjusted to batch the requests.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-backend-module-gitlab': patch
|
||||
---
|
||||
|
||||
The Gitlab configuration supports an additional optional boolean key `catalog.providers.gitlab.<your-org>.restrictUsersToGroup`. Setting this to `true` will make Backstage only import users from the group defined in the `group` key, instead of all users in the organisation (self-hosted) or of the root group (SaaS). It will default to false, keeping the original implementation intact, when not explicitly set.
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-backend-module-ldap': minor
|
||||
---
|
||||
|
||||
**BREAKING**: `readLdapOrg` and the `LdapProviderConfig` type now always accept arrays of user and group configs, not just single items.
|
||||
|
||||
Added support for single ldap catalog provider to provide list and undefined user and group bindings next to standard single one.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/core-app-api': patch
|
||||
---
|
||||
|
||||
Updated config schema to support app.routes.bindings
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/integration': minor
|
||||
---
|
||||
|
||||
Add support for `token` for `bitbucketCloud` integration
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-react': patch
|
||||
'@backstage/plugin-catalog': patch
|
||||
---
|
||||
|
||||
Support i18n for catalog and catalog-react plugins
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder': minor
|
||||
---
|
||||
|
||||
Use virtualization with `MultiEntityPicker`. Fixes performance issues with large data sets.
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder-backend-module-azure': patch
|
||||
'@backstage/plugin-scaffolder-node': patch
|
||||
'@backstage/plugin-scaffolder': patch
|
||||
---
|
||||
|
||||
Fixed a bug where the `RepoUrlPicker` would still require the `owner` field for `azure`
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
'@backstage/backend-common': patch
|
||||
'@backstage/cli': patch
|
||||
---
|
||||
|
||||
Update default backend plugin created by the cli to use non-deprecated error handling middleware
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder-backend': patch
|
||||
---
|
||||
|
||||
Added a documentation how to use checkpoints
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder-backend-module-bitbucket-cloud': patch
|
||||
'@backstage/plugin-bitbucket-cloud-common': patch
|
||||
---
|
||||
|
||||
Add support for `autocomplete` handler to provide autocomplete options for `RepoUrlPicker`
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-react': patch
|
||||
---
|
||||
|
||||
Make EntityOwnerPicker display metadata.title or spec.profile.displayName for mode=only-owners instead of metadata.name
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-techdocs': patch
|
||||
---
|
||||
|
||||
Fix double scrollbar bug in reader
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-notifications': patch
|
||||
---
|
||||
|
||||
The toolbar on the Notifications page is hidden when there are no listed notifications.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-techdocs-node': patch
|
||||
---
|
||||
|
||||
Bumps default version of techdocs docker image to latest
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/core-components': patch
|
||||
---
|
||||
|
||||
Modified the `Select` component to take in a `data-testid` parameter ensuring backwards compatibility with default value corresponding to previously hardcoded `data-testid` of "select".
|
||||
@@ -0,0 +1,30 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-backend-module-github': patch
|
||||
---
|
||||
|
||||
Adds support for `repository` events.
|
||||
|
||||
The provider adds a subscription to the topic `github.repository`.
|
||||
|
||||
Hereby, it supports events of type `repository` with actions
|
||||
|
||||
- `archived`
|
||||
- `deleted`
|
||||
- `edited`
|
||||
- `renamed`
|
||||
- `transferred`
|
||||
- `unarchived`
|
||||
|
||||
Actions skipped as they don't require entity changes:
|
||||
|
||||
- `created`
|
||||
- `privatized`
|
||||
- `publicized`
|
||||
|
||||
If the config option `validateLocationsExist` is enabled, an API request
|
||||
is necessary and will be executed.
|
||||
This affects the actions `renamed`, `transferred`, and `unarchive`
|
||||
of event type `repository`.
|
||||
|
||||
Catalog entities related to the `GithubEntityProvider` instance will be adjusted
|
||||
according to action and its meaning for them.
|
||||
+64
-2
@@ -184,7 +184,69 @@
|
||||
"@backstage/plugin-techdocs-react": "1.2.5",
|
||||
"@backstage/plugin-user-settings": "0.8.7",
|
||||
"@backstage/plugin-user-settings-backend": "0.2.18",
|
||||
"@backstage/plugin-user-settings-common": "0.0.1"
|
||||
"@backstage/plugin-user-settings-common": "0.0.1",
|
||||
"@backstage/plugin-catalog-backend-module-logs": "0.0.0",
|
||||
"@backstage/plugin-scaffolder-backend-module-gcp": "0.0.1-next.1"
|
||||
},
|
||||
"changesets": []
|
||||
"changesets": [
|
||||
"bright-fireants-sit",
|
||||
"bright-panthers-leave",
|
||||
"calm-jeans-ring",
|
||||
"chilly-roses-trade",
|
||||
"clever-waves-judge",
|
||||
"create-app-1719320674",
|
||||
"curvy-teachers-smell",
|
||||
"eighty-games-wink",
|
||||
"fair-fans-flow",
|
||||
"fair-pillows-know",
|
||||
"fair-rockets-leave",
|
||||
"famous-dodos-crash",
|
||||
"fast-pens-smell",
|
||||
"fifty-pumpkins-smell",
|
||||
"friendly-bulldogs-pay",
|
||||
"friendly-experts-fail",
|
||||
"friendly-masks-type",
|
||||
"friendly-oranges-greet",
|
||||
"friendly-stingrays-occur",
|
||||
"funny-laws-tease",
|
||||
"gentle-avocados-obey",
|
||||
"grumpy-wolves-hang",
|
||||
"heavy-moose-pull",
|
||||
"honest-pears-run",
|
||||
"khaki-rivers-obey",
|
||||
"light-avocados-worry",
|
||||
"little-games-fail",
|
||||
"metal-jokes-add",
|
||||
"metal-parents-brush",
|
||||
"metal-suits-drum",
|
||||
"moody-llamas-breathe",
|
||||
"neat-dingos-tickle",
|
||||
"poor-cheetahs-raise",
|
||||
"rare-peas-dream",
|
||||
"renovate-7b61228",
|
||||
"renovate-ced359b",
|
||||
"rich-bears-march",
|
||||
"selfish-turtles-jog",
|
||||
"serious-kings-trade",
|
||||
"short-flowers-cry",
|
||||
"shy-hounds-battle",
|
||||
"silent-experts-move",
|
||||
"silent-lobsters-tease",
|
||||
"silent-moose-eat",
|
||||
"soft-clocks-bake",
|
||||
"sour-jokes-sneeze",
|
||||
"spotty-crabs-shop",
|
||||
"swift-dots-cough",
|
||||
"ten-dancers-drum",
|
||||
"ten-nails-hear",
|
||||
"ten-pots-walk",
|
||||
"thick-lizards-divide",
|
||||
"three-carpets-smoke",
|
||||
"tough-lies-mate",
|
||||
"weak-boats-float",
|
||||
"yellow-cows-kick",
|
||||
"young-donuts-swim",
|
||||
"young-fishes-lie",
|
||||
"young-houses-unite"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
'@backstage/cli': patch
|
||||
'@backstage/plugin-scaffolder-backend': patch
|
||||
---
|
||||
|
||||
Updated dependency `esbuild` to `^0.21.0`.
|
||||
@@ -0,0 +1,11 @@
|
||||
---
|
||||
'@backstage/plugin-home-react': patch
|
||||
'@backstage/plugin-home': patch
|
||||
'@backstage/plugin-scaffolder-react': patch
|
||||
'@backstage/plugin-scaffolder': patch
|
||||
---
|
||||
|
||||
Updated dependency `@rjsf/utils` to `5.18.5`.
|
||||
Updated dependency `@rjsf/core` to `5.18.5`.
|
||||
Updated dependency `@rjsf/material-ui` to `5.18.5`.
|
||||
Updated dependency `@rjsf/validator-ajv8` to `5.18.5`.
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder-backend': minor
|
||||
'@backstage/plugin-scaffolder-node': patch
|
||||
---
|
||||
|
||||
Add support for `autocomplete` extension point to provide additional `autocomplete` handlers
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-kubernetes-react': patch
|
||||
---
|
||||
|
||||
Add a namespace label to RolloutDrawer
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder-backend-module-github': minor
|
||||
---
|
||||
|
||||
Adds support for custom tag policies when creating GitHub environments.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/cli': patch
|
||||
---
|
||||
|
||||
Fix a few minor issues with the backend template that were causing failing linting checks in the main repo.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/cli': patch
|
||||
---
|
||||
|
||||
The `backendPlugin` and `backendModule` factory now includes a step for automatically adding the new backend plugin/module to the `index.ts` file of the backend.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder': patch
|
||||
---
|
||||
|
||||
Support `catalogFilter` array on `OwnedEntityPicker`
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-notifications-backend': patch
|
||||
---
|
||||
|
||||
Added an option to filter notifications by topic
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder-backend-module-github': patch
|
||||
---
|
||||
|
||||
Added action to enable GitHub Pages on a repo
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder-react': minor
|
||||
---
|
||||
|
||||
Improve validation error display text in scaffolder
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder-backend-module-github': patch
|
||||
---
|
||||
|
||||
Fixed issue with octokit call missing owner and repo when creating environment variables and secrets using github:environment:create action
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder-backend-module-github': patch
|
||||
---
|
||||
|
||||
Adds `requireLastPushApproval` input property to configure Branch Protection Settings in `github:publish` action
|
||||
|
||||
Adds `requireLastPushApproval` input property to configure Branch Protection Settings in `github:repo:push` action
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder-backend-module-gitlab': patch
|
||||
---
|
||||
|
||||
Added support for passing `variables` to `gitlab:pipeline:trigger`
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder-backend-module-gcp': minor
|
||||
'@backstage/plugin-scaffolder-backend': minor
|
||||
'@backstage/plugin-scaffolder-node': patch
|
||||
---
|
||||
|
||||
Serialization of the scaffolder workspace into GCP bucket
|
||||
@@ -0,0 +1,8 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-backend': minor
|
||||
'@backstage/backend-test-utils': patch
|
||||
'@backstage/backend-defaults': patch
|
||||
'@backstage/backend-common': patch
|
||||
---
|
||||
|
||||
bumped better-sqlite3 from ^9.0.0 to ^11.0.0
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder-node-test-utils': patch
|
||||
---
|
||||
|
||||
Filename and imports correction for mockActionContext.ts
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder-react': minor
|
||||
'@backstage/plugin-scaffolder': minor
|
||||
---
|
||||
|
||||
Add support for `bitbucketCloud` autocomplete in `RepoUrlPicker`
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder-backend': patch
|
||||
---
|
||||
|
||||
Fix user entity not being fetched for scaffolder dry runner
|
||||
@@ -94,6 +94,7 @@ typings/
|
||||
# dotenv environment variables file
|
||||
.env
|
||||
.env.test
|
||||
.envrc
|
||||
|
||||
# parcel-bundler cache (https://parceljs.org/)
|
||||
.cache
|
||||
|
||||
@@ -271,3 +271,4 @@ _You can do this by using the [Adopter form](https://info.backstage.spotify.com/
|
||||
| [Scania](https://www.scania.com) | [Santosh Rangavajjula](https://linkedin.com/in/rsbth) | We are implementing backstage at Scania to consolidate operational information from Gitlab, Jira, Confluence, Artifactory, Servicenow and other tools into one place. |
|
||||
| [Senora.dev](https://senora.dev) | [Shaked Braimok Yosef](https://github.com/ShakedBraimok) | We are using Backstage as a service catalog for our costumers. |
|
||||
| [Covestro](https://www.covestro.com) | [Julien Gedeon](https://github.com/cvvcv1) | We use Backstage as our Internal developer portal for the Digital R&D department. |
|
||||
| [Grupo OLX](https://www.olx.com.br/) | [@marciorgb](https://github.com/marciorgb), [@jeffbraga](https://github.com/jeffbraga), [@rogerfernandes](https://github.com/rogerfernandes), [@stockrt](https://github.com/stockrt) | At Grupo OLX, we are using Backstage to reduce friction and enhance developer autonomy by creating Golden Paths, which automate previously manual processes. Additionally, Backstage's catalog integrates various views of our organizational structure and workflows, offering a comprehensive overview of how different components interconnect. |
|
||||
|
||||
@@ -159,6 +159,18 @@ Scope: The Scaffolder frontend and backend plugins, and related tooling.
|
||||
| ------------------- | ------------ | ------------------------------------- | ---------------- |
|
||||
| Bogdan Nechyporenko | Bol.com | [acierto](https://github.com/acierto) | `bogdan_haarlem` |
|
||||
|
||||
### Documentation
|
||||
|
||||
Team: @backstage/documentation-maintainers
|
||||
|
||||
Scope: The Backstage Documentation
|
||||
|
||||
| Name | Organization | GitHub | Discord |
|
||||
| --------------- | ------------- | ----------------------------------------------------- | ------------- |
|
||||
| Andre Wanlin | Spotify | [awanlin](https://github.com/awanlin) | `ahhhndre` |
|
||||
| Aramis Sennyey | | [aramissennyeydd](https://github.com/aramissennyeydd) | `Aramis#7984` |
|
||||
| Peter Macdonald | VodafoneZiggo | [Parsifal-M](https://github.com/Parsifal-M) | `parsifal` |
|
||||
|
||||
## Sponsors
|
||||
|
||||
| Name | Organization | GitHub | Email |
|
||||
@@ -187,6 +199,7 @@ Scope: The Scaffolder frontend and backend plugins, and related tooling.
|
||||
| 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` |
|
||||
| Peter Macdonald | VodafoneZiggo | [Parsifal-M](https://github.com/Parsifal-M) | `parsifal` |
|
||||
| Phil Kuang | FactSet Research Systems | [kuangp](https://github.com/kuangp) | `pkuang#3202` |
|
||||
| Sebastian Poxhofer | N26 | [secustor](https://github.com/secustor) | `secustor` |
|
||||
| Taras Mankovski | Frontside | [taras](https://github.com/taras) | `tarasm#1256` |
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
[](https://backstage.io/)
|
||||
|
||||
> [!NOTE]
|
||||
> 🏖 From July 1st through 16th, due to maintainers being on summer vacations, expect the project to move a little slower than normal, and support to be limited. Normal service will resume after that! 🏝
|
||||
|
||||
# [Backstage](https://backstage.io)
|
||||
|
||||
English \| [한국어](README-ko_kr.md) \| [中文版](README-zh_Hans.md)
|
||||
@@ -55,7 +58,7 @@ To engage with our community, you can use the following resources:
|
||||
- [Discord chatroom](https://discord.gg/backstage-687207715902193673) - Get support or discuss the project
|
||||
- [Contributing to Backstage](https://github.com/backstage/backstage/blob/master/CONTRIBUTING.md) - Start here if you want to contribute
|
||||
- [RFCs](https://github.com/backstage/backstage/labels/rfc) - Help shape the technical direction
|
||||
- [FAQ](https://backstage.io/docs/FAQ) - Frequently Asked Questions
|
||||
- [FAQ](https://backstage.io/docs/faq) - Frequently Asked Questions
|
||||
- [Code of Conduct](CODE_OF_CONDUCT.md) - This is how we roll
|
||||
- [Adopters](ADOPTERS.md) - Companies already using Backstage
|
||||
- [Blog](https://backstage.io/blog/) - Announcements and updates
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: Backstage Notifications System
|
||||
status: provisional
|
||||
status: implementable
|
||||
authors:
|
||||
- '@Rugvip'
|
||||
- '@drodil'
|
||||
|
||||
@@ -138,8 +138,10 @@ describe('MyDatabaseClass', () => {
|
||||
await knex<FooTableRow>('foo').insert({ value: 2 });
|
||||
// drive your system under test as usual
|
||||
await expect(subject.foos()).resolves.toEqual([{ value: 2 }]);
|
||||
});
|
||||
},
|
||||
);
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
If you want to pass the test database instance into backend plugins or services,
|
||||
|
||||
@@ -116,7 +116,7 @@ This makes it easier to create, find, and update documentation.
|
||||
[TechDocs is now open source.](https://backstage.io/docs/features/techdocs/)
|
||||
(See also:
|
||||
"[Will Spotify's internal plugins be open sourced, too?](https://backstage.io/docs/faq/product#will-spotifys-internal-plugins-be-open-sourced-too)"
|
||||
above)
|
||||
above).
|
||||
|
||||
### Are you planning to have plugins baked into the repo? Or should they be developed in separate repos?
|
||||
|
||||
|
||||
@@ -186,7 +186,7 @@ The first step is to add the events backend plugin to your Backstage application
|
||||
|
||||
```ts
|
||||
# From your Backstage root directory
|
||||
yarn --cwd packages/backend add @backstage/plugin-events-node
|
||||
yarn --cwd packages/backend add @backstage/plugin-events-backend
|
||||
```
|
||||
|
||||
Now you can install the events backend plugin in your backend.
|
||||
|
||||
@@ -84,6 +84,7 @@ import {
|
||||
EntityProvider,
|
||||
EntityProviderConnection,
|
||||
} from '@backstage/plugin-catalog-node';
|
||||
import { SchedulerServiceTaskRunner } from '@backstage/backend-plugin-api';
|
||||
|
||||
/**
|
||||
* Provides entities from fictional frobs service.
|
||||
@@ -92,11 +93,17 @@ export class FrobsProvider implements EntityProvider {
|
||||
private readonly env: string;
|
||||
private readonly reader: UrlReader;
|
||||
private connection?: EntityProviderConnection;
|
||||
private taskRunner: SchedulerServiceTaskRunner;
|
||||
|
||||
/** [1] */
|
||||
constructor(env: string, reader: UrlReader) {
|
||||
constructor(
|
||||
env: string,
|
||||
reader: UrlReader,
|
||||
taskRunner: SchedulerServiceTaskRunner,
|
||||
) {
|
||||
this.env = env;
|
||||
this.reader = reader;
|
||||
this.taskRunner = taskRunner;
|
||||
}
|
||||
|
||||
/** [2] */
|
||||
@@ -107,6 +114,12 @@ export class FrobsProvider implements EntityProvider {
|
||||
/** [3] */
|
||||
async connect(connection: EntityProviderConnection): Promise<void> {
|
||||
this.connection = connection;
|
||||
this.taskRunner.run({
|
||||
id: this.getProviderName(),
|
||||
fn: async () => {
|
||||
await this.run();
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
/** [4] */
|
||||
@@ -248,24 +261,17 @@ export default async function createPlugin(
|
||||
): Promise<Router> {
|
||||
const builder = CatalogBuilder.create(env);
|
||||
/* highlight-add-start */
|
||||
const frobs = new FrobsProvider('production', env.reader);
|
||||
const taskRunner = env.scheduler.createScheduledTaskRunner({
|
||||
frequency: { minutes: 30 },
|
||||
timeout: { minutes: 10 },
|
||||
});
|
||||
const frobs = new FrobsProvider('production', env.reader, taskRunner);
|
||||
builder.addEntityProvider(frobs);
|
||||
/* highlight-add-end */
|
||||
|
||||
const { processingEngine, router } = await builder.build();
|
||||
await processingEngine.start();
|
||||
|
||||
/* highlight-add-start */
|
||||
await env.scheduler.scheduleTask({
|
||||
id: 'run_frobs_refresh',
|
||||
fn: async () => {
|
||||
await frobs.run();
|
||||
},
|
||||
frequency: { minutes: 30 },
|
||||
timeout: { minutes: 10 },
|
||||
});
|
||||
/* highlight-add-end */
|
||||
|
||||
// ..
|
||||
}
|
||||
```
|
||||
@@ -300,9 +306,17 @@ export const catalogModuleFrobsProvider = createBackendModule({
|
||||
deps: {
|
||||
catalog: catalogProcessingExtensionPoint,
|
||||
reader: coreServices.urlReader,
|
||||
/* highlight-add-start */
|
||||
scheduler: coreServices.scheduler,
|
||||
/* highlight-add-end */
|
||||
},
|
||||
async init({ catalog, reader }) {
|
||||
catalog.addEntityProvider(new FrobsProvider('dev', reader));
|
||||
async init({ catalog, reader, scheduler }) {
|
||||
const taskRunner = scheduler.createScheduledTaskRunner({
|
||||
frequency: { minutes: 30 },
|
||||
timeout: { minutes: 10 },
|
||||
});
|
||||
const frobs = new FrobsProvider('dev', reader, taskRunner);
|
||||
catalog.addEntityProvider(frobs);
|
||||
},
|
||||
});
|
||||
},
|
||||
@@ -318,6 +332,98 @@ backend.add(catalogModuleFrobsProvider);
|
||||
backend.start();
|
||||
```
|
||||
|
||||
#### Follow-up: Config Defined Schedule
|
||||
|
||||
If you want to go a step further and increase the configurability of your new `FrobsProvider`, you can define the schedule that the task runs at in `app-config.yaml` instead of requiring code changes to adjust.
|
||||
|
||||
```yaml title="app-config.yaml"
|
||||
catalog:
|
||||
providers:
|
||||
frobs-provider:
|
||||
schedule:
|
||||
initialDelay: { seconds: 30 }
|
||||
frequency: { hours: 1 }
|
||||
timeout: { minutes: 50 }
|
||||
```
|
||||
|
||||
This approach will also allow you to customize the schedule per environment. You can also [add a schema to your config](../../conf/defining.md).
|
||||
|
||||
#### New Backend
|
||||
|
||||
```ts title="packages/backend/src/index.ts"
|
||||
import {
|
||||
SchedulerServiceTaskScheduleDefinition,
|
||||
/* highlight-add-start */
|
||||
readSchedulerServiceTaskScheduleDefinitionFromConfig,
|
||||
/* highlight-add-end */
|
||||
} from '@backstage/backend-plugin-api';
|
||||
|
||||
export const catalogModuleFrobsProvider = createBackendModule({
|
||||
pluginId: 'catalog',
|
||||
moduleId: 'frobs-provider',
|
||||
register(env) {
|
||||
env.registerInit({
|
||||
deps: {
|
||||
// ... other deps
|
||||
/* highlight-add-start */
|
||||
rootConfig: coreServices.rootConfig,
|
||||
/* highlight-add-end */
|
||||
},
|
||||
async init({ catalog, reader, scheduler, rootConfig }) {
|
||||
/* highlight-add-start */
|
||||
const config = rootConfig.getConfig('catalog.providers.frobs-provider'); // Generally, catalog config goes under catalog.providers.pluginId
|
||||
// Add a default schedule if you don't define one in config.
|
||||
const schedule = config.has('schedule')
|
||||
? readSchedulerServiceTaskScheduleDefinitionFromConfig(
|
||||
config.getConfig('schedule'),
|
||||
)
|
||||
: {
|
||||
frequency: { minutes: 30 },
|
||||
timeout: { minutes: 10 },
|
||||
};
|
||||
const taskRunner: SchedulerServiceTaskRunner =
|
||||
scheduler.createScheduledTaskRunner(schedule);
|
||||
/* highlight-add-end */
|
||||
|
||||
// rest of your code
|
||||
},
|
||||
});
|
||||
},
|
||||
});
|
||||
```
|
||||
|
||||
#### Old Backend
|
||||
|
||||
```ts title="packages/backend/src/plugins/catalog.ts"
|
||||
/* highlight-add-next-line */
|
||||
import { FrobsProvider } from '../path/to/class';
|
||||
import {
|
||||
/* highlight-add-start */
|
||||
readSchedulerServiceTaskScheduleDefinitionFromConfig,
|
||||
/* highlight-add-end */
|
||||
} from '@backstage/backend-plugin-api';
|
||||
|
||||
export default async function createPlugin(
|
||||
env: PluginEnvironment,
|
||||
): Promise<Router> {
|
||||
/* highlight-add-start */
|
||||
const config = env.config.getConfig('catalog.providers.frobs-provider'); // Generally, catalog config goes under catalog.providers.pluginId
|
||||
// Add a default schedule if you don't define one in config.
|
||||
const schedule = config.has('schedule')
|
||||
? readSchedulerServiceTaskScheduleDefinitionFromConfig(
|
||||
config.getConfig('schedule'),
|
||||
)
|
||||
: {
|
||||
frequency: { minutes: 30 },
|
||||
timeout: { minutes: 10 },
|
||||
};
|
||||
const taskRunner = env.scheduler.createScheduledTaskRunner(schedule);
|
||||
/* highlight-add-end */
|
||||
|
||||
// ..
|
||||
}
|
||||
```
|
||||
|
||||
### Example User Entity Provider
|
||||
|
||||
If you have a 3rd party entity provider such as an internal HR system that you wish to use you are not limited to using our entity providers, (or simply wish to add to existing entity providers with your own data).
|
||||
|
||||
@@ -259,7 +259,11 @@ spec:
|
||||
|
||||
## Use placeholders to reference remote files
|
||||
|
||||
#### Note: testing of this functionality is not yet supported using _create/edit_
|
||||
:::note
|
||||
|
||||
Testing of this functionality is not yet supported using _create/edit_. In addition, this functionality only works for remote files and not local files. You also cannot nest files.
|
||||
|
||||
:::
|
||||
|
||||
### template.yaml
|
||||
|
||||
|
||||
@@ -145,6 +145,10 @@ When the action `handler` is called, we provide you a `context` as the only
|
||||
argument. It looks like the following:
|
||||
|
||||
- `ctx.baseUrl` - a string where the template is located
|
||||
- `ctx.checkpoint` - _Experimental_ allows to
|
||||
implement [idempotency of the actions](https://github.com/backstage/backstage/tree/master/beps/0004-scaffolder-task-idempotency)
|
||||
by not re-running the same function again if it was
|
||||
executed successfully on the previous run.
|
||||
- `ctx.logger` - a Winston logger for additional logging inside your action
|
||||
- `ctx.logStream` - a stream version of the logger if needed
|
||||
- `ctx.workspacePath` - a string of the working directory of the template run
|
||||
@@ -153,7 +157,7 @@ argument. It looks like the following:
|
||||
- `ctx.output` - a function which you can call to set outputs that match the
|
||||
JSON schema or `zod` in `schema.output` for ex. `ctx.output('downloadUrl', myDownloadUrl)`
|
||||
- `createTemporaryDirectory` a function to call to give you a temporary
|
||||
directory somewhere on the runner so you can store some files there rather
|
||||
directory somewhere on the runner, so you can store some files there rather
|
||||
than polluting the `workspacePath`
|
||||
- `ctx.metadata` - an object containing a `name` field, indicating the template
|
||||
name. More metadata fields may be added later.
|
||||
@@ -217,6 +221,28 @@ import {
|
||||
})
|
||||
```
|
||||
|
||||
### Using Checkpoints in Custom Actions (Experimental)
|
||||
|
||||
Idempotent action could be achieved via the usage of checkpoints.
|
||||
|
||||
Example:
|
||||
|
||||
```ts title="plugins/my-company-scaffolder-actions-plugin/src/vendor/my-custom-action.ts"
|
||||
const res = await ctx.checkpoint?.('create.projects', async () => {
|
||||
const projectStgId = createStagingProjectId();
|
||||
const projectProId = createProductionProjectId();
|
||||
|
||||
return {
|
||||
projectStgId,
|
||||
projectProId,
|
||||
};
|
||||
});
|
||||
```
|
||||
|
||||
You have to define the unique key in scope of the scaffolder task for your checkpoint. During the execution task engine
|
||||
will check if the checkpoint with such key was already executed or not, if yes, and the run was successful, the callback
|
||||
will be skipped and instead the stored value will be returned.
|
||||
|
||||
### Register Custom Actions with the Legacy Backend System
|
||||
|
||||
Once you have your Custom Action ready for usage with the scaffolder, you'll
|
||||
|
||||
@@ -359,7 +359,7 @@ export const detailsSubRouteRef = createSubRouteRef({
|
||||
|
||||
Using subroutes in a page extension is as simple as this:
|
||||
|
||||
```tsx title="plugins/catalog/src/components/IndexPage.ts"
|
||||
```tsx title="plugins/catalog/src/components/IndexPage.tsx"
|
||||
import React from 'react';
|
||||
import { Routes, Route, useLocation } from 'react-router-dom';
|
||||
import { useRouteRef } from '@backstage/frontend-plugin-api';
|
||||
@@ -402,7 +402,7 @@ export const IndexPage = () => {
|
||||
|
||||
This is how you can get the parameters of a sub route URL:
|
||||
|
||||
```tsx title="plugins/catalog/src/components/DetailsPage.ts"
|
||||
```tsx title="plugins/catalog/src/components/DetailsPage.tsx"
|
||||
import React from 'react';
|
||||
import { useParams } from 'react-router-dom';
|
||||
|
||||
@@ -426,7 +426,7 @@ export const DetailsPage = () => {
|
||||
|
||||
Finally, see how a plugin can provide subroutes:
|
||||
|
||||
```tsx title="plugins/catalog/src/plugin.ts"
|
||||
```tsx title="plugins/catalog/src/plugin.tsx"
|
||||
import React from 'react';
|
||||
import {
|
||||
createPlugin,
|
||||
|
||||
@@ -64,7 +64,7 @@ const app = createApp({
|
||||
})
|
||||
```
|
||||
|
||||
Note that your list of custom themes overrides the default themes. If you still want to use the default themes, they are exported as `themes.light` and `themes.light` from [`@backstage/theme`](https://www.npmjs.com/package/@backstage/theme).
|
||||
Note that your list of custom themes overrides the default themes. If you still want to use the default themes, they are exported as `themes.light` and `themes.dark` from [`@backstage/theme`](https://www.npmjs.com/package/@backstage/theme).
|
||||
|
||||
## Example of a custom theme
|
||||
|
||||
|
||||
@@ -0,0 +1,89 @@
|
||||
---
|
||||
id: discovery--old
|
||||
title: AWS S3 Discovery
|
||||
sidebar_label: Discovery
|
||||
# prettier-ignore
|
||||
description: Automatically discovering catalog entities from an AWS S3 Bucket
|
||||
---
|
||||
|
||||
:::info
|
||||
This documentation is written for the old backend which has been replaced by [the new backend system](../../backend-system/index.md), being the default since Backstage [version 1.24](../../releases/v1.24.0.md). If have migrated to the new backend system, you may want to read [its own article](./discovery.md) instead. Otherwise, [consider migrating](../../backend-system/building-backends/08-migrating.md)!
|
||||
:::
|
||||
|
||||
The AWS S3 integration has a special entity provider for discovering catalog
|
||||
entities located in an S3 Bucket. If you have a bucket that contains multiple
|
||||
catalog files, and you want to automatically discover them, you can use this
|
||||
provider. The provider will crawl your S3 bucket and register entities
|
||||
matching the configured path. This can be useful as an alternative to static
|
||||
locations or manually adding things to the catalog.
|
||||
|
||||
To use the entity provider, you'll need an AWS S3 integration
|
||||
[set up](locations.md) with `accessKeyId` and `secretAccessKey`, and/or
|
||||
a `roleArn` or none of these (e.g., profile- or instance-based credentials).
|
||||
|
||||
At production deployments, you likely manage these with the permissions attached
|
||||
to your instance.
|
||||
|
||||
In your configuration, you add a provider config per bucket:
|
||||
|
||||
```yaml
|
||||
# app-config.yaml
|
||||
|
||||
catalog:
|
||||
providers:
|
||||
awsS3:
|
||||
yourProviderId: # identifies your dataset / provider independent of config changes
|
||||
bucketName: sample-bucket
|
||||
prefix: prefix/ # optional
|
||||
region: us-east-2 # optional, uses the default region otherwise
|
||||
schedule: # same options as in TaskScheduleDefinition
|
||||
# supports cron, ISO duration, "human duration" as used in code
|
||||
frequency: { minutes: 30 }
|
||||
# supports ISO duration, "human duration" as used in code
|
||||
timeout: { minutes: 3 }
|
||||
```
|
||||
|
||||
For simple setups, you can omit the provider ID at the config
|
||||
which has the same effect as using `default` for it.
|
||||
|
||||
```yaml
|
||||
# app-config.yaml
|
||||
|
||||
catalog:
|
||||
providers:
|
||||
awsS3:
|
||||
# uses "default" as provider ID
|
||||
bucketName: sample-bucket
|
||||
prefix: prefix/ # optional
|
||||
region: us-east-2 # optional, uses the default region otherwise
|
||||
schedule: # same options as in TaskScheduleDefinition
|
||||
# supports cron, ISO duration, "human duration" as used in code
|
||||
frequency: { minutes: 30 }
|
||||
# supports ISO duration, "human duration" as used in code
|
||||
timeout: { minutes: 3 }
|
||||
```
|
||||
|
||||
As this provider is not one of the default providers, you will first need to install
|
||||
the AWS catalog plugin:
|
||||
|
||||
```bash
|
||||
# From your Backstage root directory
|
||||
yarn --cwd packages/backend add @backstage/plugin-catalog-backend-module-aws
|
||||
```
|
||||
|
||||
Once you've done that, you'll also need to add the segment below to `packages/backend/src/plugins/catalog.ts`:
|
||||
|
||||
```ts
|
||||
/* packages/backend/src/plugins/catalog.ts */
|
||||
|
||||
import { AwsS3EntityProvider } from '@backstage/plugin-catalog-backend-module-aws';
|
||||
|
||||
const builder = await CatalogBuilder.create(env);
|
||||
/** ... other processors and/or providers ... */
|
||||
builder.addEntityProvider(
|
||||
AwsS3EntityProvider.fromConfig(env.config, {
|
||||
logger: env.logger,
|
||||
scheduler: env.scheduler,
|
||||
}),
|
||||
);
|
||||
```
|
||||
@@ -6,6 +6,10 @@ sidebar_label: Discovery
|
||||
description: Automatically discovering catalog entities from an AWS S3 Bucket
|
||||
---
|
||||
|
||||
:::info
|
||||
This documentation is written for [the new backend system](../../backend-system/index.md) which is the default since Backstage [version 1.24](../../releases/v1.24.0.md). If you are still on the old backend system, you may want to read [its own article](./discovery--old.md) instead, and [consider migrating](../../backend-system/building-backends/08-migrating.md)!
|
||||
:::
|
||||
|
||||
The AWS S3 integration has a special entity provider for discovering catalog
|
||||
entities located in an S3 Bucket. If you have a bucket that contains multiple
|
||||
catalog files, and you want to automatically discover them, you can use this
|
||||
@@ -20,7 +24,7 @@ a `roleArn` or none of these (e.g., profile- or instance-based credentials).
|
||||
At production deployments, you likely manage these with the permissions attached
|
||||
to your instance.
|
||||
|
||||
At your configuration, you add a provider config per bucket:
|
||||
In your configuration, you add a provider config per bucket:
|
||||
|
||||
```yaml
|
||||
# app-config.yaml
|
||||
@@ -67,19 +71,11 @@ the AWS catalog plugin:
|
||||
yarn --cwd packages/backend add @backstage/plugin-catalog-backend-module-aws
|
||||
```
|
||||
|
||||
Once you've done that, you'll also need to add the segment below to `packages/backend/src/plugins/catalog.ts`:
|
||||
Then update your backend by adding the following line:
|
||||
|
||||
```ts
|
||||
/* packages/backend/src/plugins/catalog.ts */
|
||||
|
||||
import { AwsS3EntityProvider } from '@backstage/plugin-catalog-backend-module-aws';
|
||||
|
||||
const builder = await CatalogBuilder.create(env);
|
||||
/** ... other processors and/or providers ... */
|
||||
builder.addEntityProvider(
|
||||
AwsS3EntityProvider.fromConfig(env.config, {
|
||||
logger: env.logger,
|
||||
scheduler: env.scheduler,
|
||||
}),
|
||||
);
|
||||
```ts title="packages/backend/src/index.ts"
|
||||
backend.add(import('@backstage/plugin-catalog-backend/alpha'));
|
||||
/* highlight-add-start */
|
||||
backend.add(import('@backstage/plugin-catalog-backend-module-aws/alpha'));
|
||||
/* highlight-add-end */
|
||||
```
|
||||
|
||||
@@ -150,6 +150,18 @@ microsoftGraphOrg:
|
||||
loadPhotos: false
|
||||
```
|
||||
|
||||
If you are using `userGroupMember`, the configuration for `loadPhotos` should still be managed under `users:` while omitting `search` and `filters`.
|
||||
|
||||
```yaml
|
||||
microsoftGraphOrg:
|
||||
providerId:
|
||||
user:
|
||||
loadPhotos: false
|
||||
userGroupMember:
|
||||
filter: "displayName eq 'Backstage Users'"
|
||||
search: '"description:One" AND ("displayName:Video" OR "displayName:Drive")'
|
||||
```
|
||||
|
||||
## Customizing Transformation
|
||||
|
||||
Ingested entities can be customized by providing custom transformers.
|
||||
|
||||
@@ -40,8 +40,9 @@ backend.add(import('@backstage/plugin-catalog-backend-module-github/alpha'));
|
||||
## Events Support
|
||||
|
||||
The catalog module for GitHub comes with events support enabled.
|
||||
This will make it subscribe to its relevant topics (`github.push`)
|
||||
and expects these events to be published via the `EventsService`.
|
||||
This will make it subscribe to its relevant topics (`github.push`,
|
||||
`github.repository`) and expects these events to be published
|
||||
via the `EventsService`.
|
||||
|
||||
Additionally, you should install the
|
||||
[event router by `events-backend-module-github`](https://github.com/backstage/backstage/tree/master/plugins/events-backend-module-github/README.md)
|
||||
@@ -55,7 +56,15 @@ You can decide between the following options (extensible):
|
||||
- [via HTTP endpoint](https://github.com/backstage/backstage/tree/master/plugins/events-backend/README.md)
|
||||
- [via an AWS SQS queue](https://github.com/backstage/backstage/tree/master/plugins/events-backend-module-aws-sqs/README.md)
|
||||
|
||||
You can check the official docs to [configure your webhook](https://docs.github.com/en/developers/webhooks-and-events/webhooks/creating-webhooks) and to [secure your request](https://docs.github.com/en/developers/webhooks-and-events/webhooks/securing-your-webhooks). The webhook will need to be configured to forward `push` events.
|
||||
You can check the official docs to [configure your webhook](https://docs.github.com/en/developers/webhooks-and-events/webhooks/creating-webhooks) and to [secure your request](https://docs.github.com/en/developers/webhooks-and-events/webhooks/securing-your-webhooks).
|
||||
|
||||
The webhook(s) will need to be configured to react to `push` and
|
||||
`repository` events.
|
||||
|
||||
Certain actions like `transferred` by the `repository` event type
|
||||
will not be supported when you use repository webhooks.
|
||||
Please check the GitHubs documentation for these event types and
|
||||
its actions.
|
||||
|
||||
## Configuration
|
||||
|
||||
|
||||
@@ -196,11 +196,24 @@ which contain members will be ingested.
|
||||
|
||||
### Users
|
||||
|
||||
For self hosted, all `User` entities are ingested from the entire instance.
|
||||
For self hosted, all `User` entities are ingested from the entire instance by default.
|
||||
|
||||
For gitlab.com `User` entities for users who have [direct or inherited membership](https://docs.gitlab.com/ee/user/project/members/index.html#membership-types)
|
||||
of the top-level group for the configured group path will be ingested.
|
||||
|
||||
In both cases (SaaS & self hosted), you can limit the ingested users to users directly assigned to the group defined in your `app-config.yaml` by setting the configuration key `restrictUsersToGroup: true`. This is especially useful when you have a large user base that you don't want to import by default.
|
||||
|
||||
```yaml
|
||||
catalog:
|
||||
providers:
|
||||
gitlab:
|
||||
yourProviderId:
|
||||
host: gitlab.com ## Could also be self hosted.
|
||||
orgEnabled: true
|
||||
group: org/teams # Required for gitlab.com when `orgEnabled: true`. Optional for self managed. Must not end with slash. Accepts only groups under the provided path (which will be stripped)
|
||||
restrictUsersToGroup: true # Backstage will ingest only users directly assigned to org/teams.
|
||||
```
|
||||
|
||||
### Limiting `User` and `Group` entity ingestion in the provider
|
||||
|
||||
Optionally, you can limit the entity types ingested by the provider when using
|
||||
|
||||
@@ -86,6 +86,14 @@ catalog:
|
||||
These config blocks have a lot of options in them, so we will describe each
|
||||
"root" key within the block separately.
|
||||
|
||||
> NOTE:
|
||||
>
|
||||
> If you want to import users and groups from different LDAP servers, you can define multiple providers with different names.
|
||||
> If they should come from the same server, you can define multiple users and groups blocks within the same provider using an array of users / groups.
|
||||
> Entries coming from the same block will be able to detect group memberships based on the `memberOf` attribute.
|
||||
>
|
||||
> If you want only to import users or groups, you can omit the groups or users block.
|
||||
|
||||
### target
|
||||
|
||||
This is the URL of the targeted server, typically on the form
|
||||
|
||||
@@ -24,7 +24,7 @@ Running an individual test (e.g. `MyComponent.test.tsx`):
|
||||
|
||||
To run both `MyComponent.test.tsx` and `MyControl.test.tsx` suite of tests:
|
||||
|
||||
yarn test MyCo
|
||||
yarn test MyComponent MyControl
|
||||
|
||||
:::note Note
|
||||
|
||||
@@ -52,10 +52,6 @@ We use the light-weight
|
||||
[react-testing-library](https://github.com/kentcdodds/react-testing-library) to
|
||||
render React components.
|
||||
|
||||
## Testing Utilities
|
||||
|
||||
TODO.
|
||||
|
||||
## Writing Unit Tests
|
||||
|
||||
The following principles are good guides for determining if you are writing high
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -33,6 +33,7 @@ const {
|
||||
} = require('@opentelemetry/auto-instrumentations-node');
|
||||
const { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');
|
||||
|
||||
// By default exports the metrics on localhost:9464/metrics
|
||||
const prometheus = new PrometheusExporter();
|
||||
const sdk = new NodeSDK({
|
||||
// You can add a traceExporter field here too
|
||||
|
||||
@@ -0,0 +1,135 @@
|
||||
---
|
||||
# prettier-ignore
|
||||
title: "1,186 days with Backstage: A journey through the eyes of a developer"
|
||||
author: Camila Loiola, Spotify
|
||||
authorURL: https://github.com/camilaibs
|
||||
authorImageURL: https://avatars.githubusercontent.com/u/6290749?v=4
|
||||
---
|
||||
|
||||
**TL;DR** There is no shortage of content that discusses the benefits that Backstage brings to organizations (and if you want to read more on that, you can just click [here](https://engineering.atspotify.com/category/backstage/), [here](https://backstage.io/blog), or [here](https://backstage.spotify.com/discover/blog/)). But I want to share what it did for me, a developer here at Spotify. And not just what it did, but how I’ve used Backstage to help me achieve goals at each stage of my journey at Spotify — from my first day as a brand new employee to today, my 1,186th day as a contributor.
|
||||
|
||||

|
||||
|
||||
{/* truncate */}
|
||||
|
||||
## A new joiner with a need to get up to speed
|
||||
|
||||
My first six months after joining Spotify, I was eager and determined to get up to speed so that I’d be able to start contributing as soon as possible. I set goals for myself and developed concrete activities to reach those goals:
|
||||
|
||||
### Goal 1: Learn the internal process to develop, test, secure, and publish applications.
|
||||
|
||||
Understanding a company’s practices and technologies is absolutely essential to getting started, no matter what company you join.
|
||||
|
||||
At Spotify, we use a Backstage plugin called [TechDocs](https://backstage.io/docs/features/techdocs/) to document [Golden Paths](https://engineering.atspotify.com/2020/08/how-we-use-golden-paths-to-solve-fragmentation-in-our-software-ecosystem/) — tutorials that teach us the development process for each role at the company — for web, backend, mobile, data science development, and so on.
|
||||
|
||||
With Backstage, I had an understanding of how to put things into production, even before I had my first task. I used the web Golden Path to guide me on setting up my environment; creating and structuring projects; and building, publishing, and monitoring production applications.
|
||||
|
||||
> **Reflection:**<br/>_“Is it easy for newly hired engineers to settle in and find information critical to getting started?”_
|
||||
|
||||
With Backstage, new hires can quickly and easily understand the nuances of their particular positions and be ready to deliver their first task to production.
|
||||
|
||||
### Goal 2: Find and read the documentation and source code of the products my team maintains.
|
||||
|
||||
Having familiarized myself with the ways of working, it was a good time to understand my specific team’s business domain. This meant spending time reading through documentation and source code to find out the value we provide to our customers. In the past, I would spend time with colleagues for knowledge transfer as opposed to learning on my own and consult my colleagues if needed.
|
||||
|
||||
With the [Backstage Software Catalog](https://backstage.io/docs/features/software-catalog/), I could easily browse the components my team owns, find the source repo and documentation.
|
||||
|
||||
> **Reflection:**<br/>_“Are you able to accomplish this without asking a teammate for help?”_
|
||||
|
||||
Use Backstage to get to know the products that you will be working on, and use your peers' time to ask contextualized clarifying questions instead.
|
||||
|
||||
### Goal 3: Figure out where my team fits within the company and with other teams.
|
||||
|
||||
It was also crucial for me to build a network from the beginning so that I could explore collaboration opportunities.
|
||||
|
||||
At Spotify, we use a Backstage plugin called Band Manager which displays information about each team and allows employees to see not only their own teams but also those within the same product area and company domain.
|
||||
|
||||
> **Reflection:**<br/>_“Are you going to need a one-on-one with your manager to ask this question?”_
|
||||
|
||||
Backstage helped me find the teams close to mine, and I took the opportunity to develop my network and talk to members from those teams to understand our boundaries and gather ideas to contribute.
|
||||
|
||||
It’s pretty likely that you can relate to one or more of these examples, so use Backstage to support your goals from the very beginning!
|
||||
|
||||
Now let’s move on to the middle of the journey, between six months and two years into life at the company.
|
||||
|
||||
## Two years in — from contributor to leader
|
||||
|
||||
After about two years of contributing to my team’s products, I began to look for opportunities to actually lead initiatives and create a new project. One of my objectives was to ensure I was upholding Spotify’s standards and choosing Spotify-approved technologies.
|
||||
|
||||
My goal has changed from being a contributor to being the driver, i.e., from doing what I was told to do to defining what needed to be done. I “started driving initiatives” and “supporting my peers” in order to position myself as a reference in my technical area.
|
||||
|
||||
### Goal 1: Quickly spin up new projects using the most appropriate technology stack.
|
||||
|
||||
At Spotify, we expect engineers to use technologies approved by our [Tech Radar](https://backstage.io/blog/2020/05/14/tech-radar-plugin/#what-is-tech-radar) and follow the best quality standards.
|
||||
|
||||
To do so, we use a plugin called [Scaffolder](https://backstage.io/docs/reference/plugin-scaffolder) (aka Software Templates), which allows engineers to create templates for setting up new projects. Templates automate actions such as creating repositories, allocating resources, registering in the catalog, configuring deployments, and connecting to other internal systems.
|
||||
|
||||
> **Reflection:**<br/>_“Do you need to create a ticket to get these things done before you even start coding? And is there a lot of time spent looking for boilerplate code to start a new project and connecting it to other internal systems?"_
|
||||
|
||||
Backstage enabled me to quickly create and publish a new backend that can deploy code to production with just a few clicks, so I could focus on building solutions for the business. I could use Backstage to easily build the right thing. Instead of spending time scaffolding projects, I could spend my time writing code.
|
||||
|
||||
### Goal 2: Create products that have a healthy operational state and are easy to evolve.
|
||||
|
||||
Keeping track of vulnerabilities and letting my team know about technical debts were other parts of my routine.
|
||||
|
||||
With the [Soundcheck plugin](https://backstage.spotify.com/marketplace/spotify/plugin/soundcheck/), developers can easily configure checks to verify component health, such as reliability and other development and operational standards. We also have an internal Vulnerabilities plugin that displays fragilities in our components, so we can continuously prevent security issues.
|
||||
|
||||
> **Reflection:**<br/>_“Do you know which components owned by your team follows best practices and standards and which ones are lagging behind?”_
|
||||
|
||||
Backstage helped me gather and better understand our technical debts, enabling me to effectively prioritize during our team’s planning, visualize which entities were compliant to our team’s best practices, and identify which ones needed improvement.
|
||||
|
||||
### Goal 3: Respond effectively to incidents within our components or their dependencies.
|
||||
|
||||
If you’ve been with a company for around two years, you might have had to manage incidents in one way or another — this was certainly the case for me. A typical problem was to determine if the issue is with the service that I own or a downstream dependency.
|
||||
|
||||
Spotify has adopted [PagerDuty](https://backstage.spotify.com/marketplace/pagerduty/plugin/pagerduty/) to manage on-call rotation and to track incident resolutions. We integrated the PagerDuty plugin in Backstage, so we see who is on call and if there is an incident for a particular component.
|
||||
|
||||
> **Reflection:**<br/>_“When a downstream dependency is failing, do you know who to contact?”_
|
||||
|
||||
In the event that one of our components starts failing, I check whether any of the systems we rely on is experiencing an incident, and Backstage again makes it easy for me to see the dependencies between systems and the status of those dependencies.
|
||||
|
||||
## Today and beyond!
|
||||
|
||||
With three-plus years of experience at Spotify, I’m taking on more and more responsibility by embracing challenges outside my team’s scope, coordinating cross-team collaboration, attending and facilitating courses for personal development and growth, and mentoring my peers.
|
||||
|
||||
Backstage has allowed me to drive my pursuit of growth in a multitude of ways.
|
||||
|
||||
### Goal 1: Stay in the flow and optimize my time management practices.
|
||||
|
||||
At this point, finding time to focus — with all that I have on my plate — while also making time to learn new concepts is both fundamental and challenging for me.
|
||||
|
||||
Spotify encourages its developers to manage their time in order to stay in the flow and to turn to the tools that help them prioritize effectively and focus on their work.
|
||||
|
||||
> **Reflection:**<br/>_“How do you surface the most important notifications and avoid non-emergency distractions?”_
|
||||
|
||||
Backstage has been instrumental in helping me stay in the flow by surfacing the most critical notifications and call to actions related to cost spikes, security vulnerabilities in my homepage.
|
||||
|
||||
### Goal 2: Platformize our solutions and reuse code to boost my productivity.
|
||||
|
||||
Reinventing the wheel is a common problem in software development and Spotify is no different.
|
||||
|
||||
Autonomous teams tend to prioritize speed over reuse and develop the same solutions in different places (1) as it unblocks the delivery for their team and (2) there is no easy way to discover if a particular functionality has been developed in another part of the company and if it can be reused for their requirement.
|
||||
|
||||
> **Reflection:**<br/>_“Do you find yourself wondering if someone else already did it before starting a task?”_
|
||||
|
||||
With the [Backstage Search plugin](https://backstage.io/docs/features/search/), I can discover solutions to reuse, find inspiration, and also share what I’ve built for other developers to discover and use.
|
||||
|
||||
### Goal 3: Grow my career and take steps toward the next level.
|
||||
|
||||
I began looking for opportunities to gain new experiences and responsibilities while expanding my knowledge.
|
||||
|
||||
With Spotify’s [Skill Exchange plugin](https://backstage.spotify.com/marketplace/spotify/plugin/skill-exchange/) for Backstage, engineers temporarily embed with a different team, allowing them to partake in work outside their day-to-day. The plugin also helps engineers connect with mentees or mentors that align with their skills profiles.
|
||||
|
||||
> **Reflection:**<br/>_“Are you able to find opportunities that match your current skill set?”_
|
||||
|
||||
With Backstage, I've applied for an embed to experience working with another team and eventually make a permanent move to this new team, calling it my new home.
|
||||
|
||||
I am passionate about teaching and eager to share my knowledge to help others. Through Skill Exchange, I found a mentee, a colleague transitioning into engineering, and I am helping them take their first steps.
|
||||
|
||||
## What’s next?
|
||||
|
||||
Backstage is highly customizable, and with its extensive plugin ecosystem, engineers can use it strategically to achieve their goals.
|
||||
|
||||
No matter what point in your journey you are, you can find value with [Backstage](http://backstage.io). It was, after all, made by engineers for engineers. 💚
|
||||
|
||||
Special thanks to [Stanley Nicholl](https://github.com/stanley-nicholl), [Patrik Oldsberg](https://github.com/Rugvip), [Vincenzo Scamporlino](https://github.com/vinzscam), [Mihai Tabara](https://github.com/MihaiTabara), [Emma Indal](https://github.com/emmaindal), [Raghunandan Balachandran](https://github.com/soapraj) for all of their support.
|
||||
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 224 KiB |
@@ -0,0 +1,11 @@
|
||||
title: Harness Chaos Engineering
|
||||
author: harness.io
|
||||
authorUrl: https://github.com/harness/backstage-plugins
|
||||
category: Chaos Engineering
|
||||
description: This plugin lets you view the status of Harness Chaos Engineering Resources and launch Chaos Experiments directly inside Backstage.
|
||||
documentation: https://github.com/harness/backstage-plugins/tree/main/plugins/harness-chaos
|
||||
iconUrl: https://static.harness.io/ng-static/images/favicon.png
|
||||
npmPackageName: '@harnessio/backstage-plugin-harness-chaos'
|
||||
tags:
|
||||
- resiliency
|
||||
addedDate: '2024-06-25'
|
||||
@@ -0,0 +1,13 @@
|
||||
---
|
||||
title: Harness Infrastructure as Code Management
|
||||
author: harness.io
|
||||
authorUrl: https://github.com/harness/backstage-plugins
|
||||
category: Infrastructure
|
||||
description: This plugin provides an overview of all the resources provisioned through information on active workspaces in your account
|
||||
documentation: https://github.com/harness/backstage-plugins/tree/main/plugins/harness-iacm#harness-iacm-plugin
|
||||
iconUrl: https://static.harness.io/ng-static/images/favicon.png
|
||||
npmPackageName: '@harnessio/backstage-plugin-harness-iacm'
|
||||
tags:
|
||||
- infrastrucure-as-code
|
||||
- resource-management
|
||||
addedDate: '2024-07-03'
|
||||
@@ -0,0 +1,10 @@
|
||||
---
|
||||
title: Relations
|
||||
author: dweber019
|
||||
authorUrl: https://github.com/dweber019
|
||||
category: Catalog
|
||||
description: This plugin enables you to configure additional relations between entities, which aren't supported out of box.
|
||||
documentation: https://github.com/dweber019/backstage-plugins/tree/main/plugins/relations
|
||||
iconUrl: https://raw.githubusercontent.com/dweber019/backstage-plugins/main/plugins/relations-backend/docs/pluginIcon.png
|
||||
npmPackageName: '@dweber019/backstage-plugin-relations'
|
||||
addedDate: '2024-05-15'
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "root",
|
||||
"version": "1.28.0",
|
||||
"version": "1.29.0-next.1",
|
||||
"private": true,
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
||||
@@ -1,5 +1,27 @@
|
||||
# @backstage/app-defaults
|
||||
|
||||
## 1.5.8-next.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/core-app-api@1.13.1-next.1
|
||||
- @backstage/core-components@0.14.9-next.0
|
||||
- @backstage/core-plugin-api@1.9.3
|
||||
- @backstage/theme@0.5.6
|
||||
- @backstage/plugin-permission-react@0.4.23
|
||||
|
||||
## 1.5.7-next.0
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/core-components@0.14.9-next.0
|
||||
- @backstage/core-app-api@1.13.0-next.0
|
||||
- @backstage/core-plugin-api@1.9.3
|
||||
- @backstage/theme@0.5.6
|
||||
- @backstage/plugin-permission-react@0.4.23
|
||||
|
||||
## 1.5.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/app-defaults",
|
||||
"version": "1.5.6",
|
||||
"version": "1.5.8-next.1",
|
||||
"description": "Provides the default wiring of a Backstage App",
|
||||
"backstage": {
|
||||
"role": "web-library"
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
# app-next-example-plugin
|
||||
|
||||
## 0.0.13-next.0
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/core-components@0.14.9-next.0
|
||||
- @backstage/frontend-plugin-api@0.6.7-next.0
|
||||
|
||||
## 0.0.12
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "app-next-example-plugin",
|
||||
"version": "0.0.12",
|
||||
"version": "0.0.13-next.0",
|
||||
"description": "Backstage internal example plugin",
|
||||
"backstage": {
|
||||
"role": "frontend-plugin",
|
||||
|
||||
@@ -1,5 +1,91 @@
|
||||
# example-app-next
|
||||
|
||||
## 0.0.13-next.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/plugin-org@0.6.27-next.1
|
||||
- @backstage/core-app-api@1.13.1-next.1
|
||||
- @backstage/plugin-catalog-react@1.12.2-next.1
|
||||
- @backstage/plugin-catalog@1.21.1-next.1
|
||||
- @backstage/plugin-techdocs@1.10.7-next.1
|
||||
- @backstage/plugin-notifications@0.2.3-next.1
|
||||
- @backstage/plugin-home@0.7.7-next.1
|
||||
- @backstage/plugin-scaffolder-react@1.10.0-next.1
|
||||
- @backstage/plugin-scaffolder@1.22.1-next.1
|
||||
- @backstage/cli@0.26.11-next.1
|
||||
- @backstage/app-defaults@1.5.8-next.1
|
||||
- @backstage/core-compat-api@0.2.7-next.0
|
||||
- @backstage/core-components@0.14.9-next.0
|
||||
- @backstage/core-plugin-api@1.9.3
|
||||
- @backstage/frontend-app-api@0.7.3-next.1
|
||||
- @backstage/plugin-api-docs@0.11.7-next.1
|
||||
- @backstage/plugin-catalog-graph@0.4.7-next.1
|
||||
- @backstage/plugin-catalog-import@0.12.1-next.1
|
||||
- @backstage/plugin-search@1.4.13-next.1
|
||||
- @backstage/plugin-search-react@1.7.13-next.0
|
||||
- @backstage/plugin-signals@0.0.8-next.0
|
||||
- @backstage/plugin-user-settings@0.8.9-next.1
|
||||
- @backstage/plugin-kubernetes@0.11.12-next.1
|
||||
- @backstage/plugin-kubernetes-cluster@0.0.13-next.1
|
||||
- @backstage/catalog-model@1.5.0
|
||||
- @backstage/config@1.2.0
|
||||
- @backstage/frontend-plugin-api@0.6.7-next.0
|
||||
- @backstage/integration-react@1.1.29-next.0
|
||||
- @backstage/theme@0.5.6
|
||||
- @backstage/plugin-app-visualizer@0.1.8-next.0
|
||||
- @backstage/plugin-auth-react@0.1.4-next.0
|
||||
- @backstage/plugin-catalog-common@1.0.24
|
||||
- @backstage/plugin-catalog-unprocessed-entities@0.2.6-next.0
|
||||
- @backstage/plugin-permission-react@0.4.23
|
||||
- @backstage/plugin-search-common@1.2.12
|
||||
- @backstage/plugin-techdocs-module-addons-contrib@1.1.12-next.0
|
||||
- @backstage/plugin-techdocs-react@1.2.6-next.0
|
||||
|
||||
## 0.0.13-next.0
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/plugin-scaffolder@1.22.0-next.0
|
||||
- @backstage/plugin-techdocs-react@1.2.6-next.0
|
||||
- @backstage/plugin-techdocs@1.10.7-next.0
|
||||
- @backstage/core-components@0.14.9-next.0
|
||||
- @backstage/core-app-api@1.13.0-next.0
|
||||
- @backstage/frontend-app-api@0.7.2-next.0
|
||||
- @backstage/cli@0.26.10-next.0
|
||||
- @backstage/plugin-org@0.6.27-next.0
|
||||
- @backstage/plugin-catalog-react@1.12.2-next.0
|
||||
- @backstage/plugin-catalog@1.21.1-next.0
|
||||
- @backstage/plugin-scaffolder-react@1.10.0-next.0
|
||||
- @backstage/plugin-techdocs-module-addons-contrib@1.1.12-next.0
|
||||
- @backstage/app-defaults@1.5.7-next.0
|
||||
- @backstage/frontend-plugin-api@0.6.7-next.0
|
||||
- @backstage/integration-react@1.1.29-next.0
|
||||
- @backstage/plugin-api-docs@0.11.7-next.0
|
||||
- @backstage/plugin-app-visualizer@0.1.8-next.0
|
||||
- @backstage/plugin-auth-react@0.1.4-next.0
|
||||
- @backstage/plugin-catalog-graph@0.4.7-next.0
|
||||
- @backstage/plugin-catalog-import@0.12.1-next.0
|
||||
- @backstage/plugin-catalog-unprocessed-entities@0.2.6-next.0
|
||||
- @backstage/plugin-home@0.7.6-next.0
|
||||
- @backstage/plugin-kubernetes@0.11.12-next.0
|
||||
- @backstage/plugin-kubernetes-cluster@0.0.13-next.0
|
||||
- @backstage/plugin-notifications@0.2.3-next.0
|
||||
- @backstage/plugin-search@1.4.13-next.0
|
||||
- @backstage/plugin-search-react@1.7.13-next.0
|
||||
- @backstage/plugin-signals@0.0.8-next.0
|
||||
- @backstage/plugin-user-settings@0.8.8-next.0
|
||||
- @backstage/core-compat-api@0.2.7-next.0
|
||||
- @backstage/core-plugin-api@1.9.3
|
||||
- @backstage/catalog-model@1.5.0
|
||||
- @backstage/config@1.2.0
|
||||
- @backstage/theme@0.5.6
|
||||
- @backstage/plugin-catalog-common@1.0.24
|
||||
- @backstage/plugin-permission-react@0.4.23
|
||||
- @backstage/plugin-search-common@1.2.12
|
||||
|
||||
## 0.0.12
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "example-app-next",
|
||||
"version": "0.0.12",
|
||||
"version": "0.0.13-next.1",
|
||||
"private": true,
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
||||
@@ -1,5 +1,87 @@
|
||||
# example-app
|
||||
|
||||
## 0.2.99-next.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/plugin-org@0.6.27-next.1
|
||||
- @backstage/core-app-api@1.13.1-next.1
|
||||
- @backstage/plugin-catalog-react@1.12.2-next.1
|
||||
- @backstage/plugin-catalog@1.21.1-next.1
|
||||
- @backstage/plugin-techdocs@1.10.7-next.1
|
||||
- @backstage/plugin-notifications@0.2.3-next.1
|
||||
- @backstage/plugin-home@0.7.7-next.1
|
||||
- @backstage/plugin-scaffolder-react@1.10.0-next.1
|
||||
- @backstage/plugin-scaffolder@1.22.1-next.1
|
||||
- @backstage/cli@0.26.11-next.1
|
||||
- @backstage/app-defaults@1.5.8-next.1
|
||||
- @backstage/core-components@0.14.9-next.0
|
||||
- @backstage/core-plugin-api@1.9.3
|
||||
- @backstage/frontend-app-api@0.7.3-next.1
|
||||
- @backstage/plugin-api-docs@0.11.7-next.1
|
||||
- @backstage/plugin-catalog-graph@0.4.7-next.1
|
||||
- @backstage/plugin-catalog-import@0.12.1-next.1
|
||||
- @backstage/plugin-search@1.4.13-next.1
|
||||
- @backstage/plugin-search-react@1.7.13-next.0
|
||||
- @backstage/plugin-signals@0.0.8-next.0
|
||||
- @backstage/plugin-user-settings@0.8.9-next.1
|
||||
- @backstage/plugin-kubernetes@0.11.12-next.1
|
||||
- @backstage/plugin-kubernetes-cluster@0.0.13-next.1
|
||||
- @backstage/catalog-model@1.5.0
|
||||
- @backstage/config@1.2.0
|
||||
- @backstage/integration-react@1.1.29-next.0
|
||||
- @backstage/theme@0.5.6
|
||||
- @backstage/plugin-auth-react@0.1.4-next.0
|
||||
- @backstage/plugin-catalog-common@1.0.24
|
||||
- @backstage/plugin-catalog-unprocessed-entities@0.2.6-next.0
|
||||
- @backstage/plugin-devtools@0.1.16-next.0
|
||||
- @backstage/plugin-permission-react@0.4.23
|
||||
- @backstage/plugin-search-common@1.2.12
|
||||
- @backstage/plugin-techdocs-module-addons-contrib@1.1.12-next.0
|
||||
- @backstage/plugin-techdocs-react@1.2.6-next.0
|
||||
|
||||
## 0.2.99-next.0
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/plugin-scaffolder@1.22.0-next.0
|
||||
- @backstage/plugin-techdocs-react@1.2.6-next.0
|
||||
- @backstage/plugin-techdocs@1.10.7-next.0
|
||||
- @backstage/core-components@0.14.9-next.0
|
||||
- @backstage/core-app-api@1.13.0-next.0
|
||||
- @backstage/frontend-app-api@0.7.2-next.0
|
||||
- @backstage/cli@0.26.10-next.0
|
||||
- @backstage/plugin-org@0.6.27-next.0
|
||||
- @backstage/plugin-catalog-react@1.12.2-next.0
|
||||
- @backstage/plugin-catalog@1.21.1-next.0
|
||||
- @backstage/plugin-scaffolder-react@1.10.0-next.0
|
||||
- @backstage/plugin-techdocs-module-addons-contrib@1.1.12-next.0
|
||||
- @backstage/app-defaults@1.5.7-next.0
|
||||
- @backstage/integration-react@1.1.29-next.0
|
||||
- @backstage/plugin-api-docs@0.11.7-next.0
|
||||
- @backstage/plugin-auth-react@0.1.4-next.0
|
||||
- @backstage/plugin-catalog-graph@0.4.7-next.0
|
||||
- @backstage/plugin-catalog-import@0.12.1-next.0
|
||||
- @backstage/plugin-catalog-unprocessed-entities@0.2.6-next.0
|
||||
- @backstage/plugin-devtools@0.1.16-next.0
|
||||
- @backstage/plugin-home@0.7.6-next.0
|
||||
- @backstage/plugin-kubernetes@0.11.12-next.0
|
||||
- @backstage/plugin-kubernetes-cluster@0.0.13-next.0
|
||||
- @backstage/plugin-notifications@0.2.3-next.0
|
||||
- @backstage/plugin-search@1.4.13-next.0
|
||||
- @backstage/plugin-search-react@1.7.13-next.0
|
||||
- @backstage/plugin-signals@0.0.8-next.0
|
||||
- @backstage/plugin-user-settings@0.8.8-next.0
|
||||
- @backstage/core-plugin-api@1.9.3
|
||||
- @backstage/catalog-model@1.5.0
|
||||
- @backstage/config@1.2.0
|
||||
- @backstage/theme@0.5.6
|
||||
- @backstage/plugin-catalog-common@1.0.24
|
||||
- @backstage/plugin-permission-react@0.4.23
|
||||
- @backstage/plugin-search-common@1.2.12
|
||||
|
||||
## 0.2.98
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "example-app",
|
||||
"version": "0.2.98",
|
||||
"version": "0.2.99-next.1",
|
||||
"backstage": {
|
||||
"role": "frontend"
|
||||
},
|
||||
|
||||
@@ -1,5 +1,41 @@
|
||||
# @backstage/backend-app-api
|
||||
|
||||
## 0.7.10-next.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/backend-common@0.23.3-next.1
|
||||
- @backstage/backend-plugin-api@0.6.22-next.1
|
||||
- @backstage/backend-tasks@0.5.27-next.1
|
||||
- @backstage/cli-common@0.1.14
|
||||
- @backstage/cli-node@0.2.6
|
||||
- @backstage/config@1.2.0
|
||||
- @backstage/config-loader@1.8.1
|
||||
- @backstage/errors@1.2.4
|
||||
- @backstage/types@1.1.1
|
||||
- @backstage/plugin-auth-node@0.4.17-next.1
|
||||
- @backstage/plugin-permission-node@0.7.33-next.1
|
||||
|
||||
## 0.7.9-next.0
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- b60db08: Fixing exporting of classes properly from new packages
|
||||
- a63c4b6: Fixing issue with `MiddlewareFactory` deprecation wrapping
|
||||
- Updated dependencies
|
||||
- @backstage/backend-plugin-api@0.6.21-next.0
|
||||
- @backstage/backend-common@0.23.2-next.0
|
||||
- @backstage/backend-tasks@0.5.26-next.0
|
||||
- @backstage/plugin-auth-node@0.4.16-next.0
|
||||
- @backstage/plugin-permission-node@0.7.32-next.0
|
||||
- @backstage/cli-common@0.1.14
|
||||
- @backstage/cli-node@0.2.6
|
||||
- @backstage/config@1.2.0
|
||||
- @backstage/config-loader@1.8.1
|
||||
- @backstage/errors@1.2.4
|
||||
- @backstage/types@1.1.1
|
||||
|
||||
## 0.7.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/backend-app-api",
|
||||
"version": "0.7.6",
|
||||
"version": "0.7.10-next.1",
|
||||
"description": "Core API used by Backstage backend apps",
|
||||
"backstage": {
|
||||
"role": "node-library"
|
||||
|
||||
@@ -1,5 +1,42 @@
|
||||
# @backstage/backend-common
|
||||
|
||||
## 0.23.3-next.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- b9ed1bb: bumped better-sqlite3 from ^9.0.0 to ^11.0.0
|
||||
- Updated dependencies
|
||||
- @backstage/backend-dev-utils@0.1.4
|
||||
- @backstage/backend-plugin-api@0.6.22-next.1
|
||||
- @backstage/cli-common@0.1.14
|
||||
- @backstage/config@1.2.0
|
||||
- @backstage/config-loader@1.8.1
|
||||
- @backstage/errors@1.2.4
|
||||
- @backstage/integration@1.13.0-next.0
|
||||
- @backstage/integration-aws-node@0.1.12
|
||||
- @backstage/types@1.1.1
|
||||
- @backstage/plugin-auth-node@0.4.17-next.1
|
||||
|
||||
## 0.23.2-next.0
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 8c09c97: Deprecate legacy status check factory, handler and types.
|
||||
- d228862: Update default backend plugin created by the cli to use non-deprecated error handling middleware
|
||||
- c964a3d: Add dependencies that are needed by cross-imports from backend-defaults
|
||||
- b60db08: Fixing exporting of classes properly from new packages
|
||||
- Updated dependencies
|
||||
- @backstage/backend-plugin-api@0.6.21-next.0
|
||||
- @backstage/integration@1.13.0-next.0
|
||||
- @backstage/plugin-auth-node@0.4.16-next.0
|
||||
- @backstage/backend-dev-utils@0.1.4
|
||||
- @backstage/cli-common@0.1.14
|
||||
- @backstage/config@1.2.0
|
||||
- @backstage/config-loader@1.8.1
|
||||
- @backstage/errors@1.2.4
|
||||
- @backstage/integration-aws-node@0.1.12
|
||||
- @backstage/types@1.1.1
|
||||
|
||||
## 0.23.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
@@ -184,7 +184,7 @@ export function createRootLogger(
|
||||
// @public @deprecated
|
||||
export function createServiceBuilder(_module: NodeModule): ServiceBuilder;
|
||||
|
||||
// @public
|
||||
// @public @deprecated
|
||||
export function createStatusCheckRouter(options: {
|
||||
logger: LoggerService;
|
||||
path?: string;
|
||||
@@ -645,15 +645,15 @@ export type StaticAuthOptions = {
|
||||
logger?: LoggerService;
|
||||
};
|
||||
|
||||
// @public
|
||||
// @public @deprecated
|
||||
export type StatusCheck = () => Promise<any>;
|
||||
|
||||
// @public
|
||||
// @public @deprecated
|
||||
export function statusCheckHandler(
|
||||
options?: StatusCheckHandlerOptions,
|
||||
): Promise<RequestHandler>;
|
||||
|
||||
// @public
|
||||
// @public @deprecated
|
||||
export interface StatusCheckHandlerOptions {
|
||||
statusCheck?: StatusCheck;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/backend-common",
|
||||
"version": "0.23.0",
|
||||
"version": "0.23.3-next.1",
|
||||
"description": "Common functionality library for Backstage backends",
|
||||
"backstage": {
|
||||
"role": "node-library"
|
||||
@@ -137,7 +137,7 @@
|
||||
"@types/webpack-env": "^1.15.2",
|
||||
"@types/yauzl": "^2.10.0",
|
||||
"aws-sdk-client-mock": "^4.0.0",
|
||||
"better-sqlite3": "^9.0.0",
|
||||
"better-sqlite3": "^11.0.0",
|
||||
"http-errors": "^2.0.0",
|
||||
"msw": "^1.0.0",
|
||||
"mysql2": "^3.0.0",
|
||||
|
||||
@@ -63,7 +63,7 @@ export type ErrorHandlerOptions = {
|
||||
*
|
||||
* @public
|
||||
* @returns An Express error request handler
|
||||
* @deprecated Use {@link @backstage/backend-app-api#MiddlewareFactory.create.error} instead
|
||||
* @deprecated Use {@link @backstage/backend-defaults/rootHttpRouter#MiddlewareFactory.create.error} instead
|
||||
*/
|
||||
export function errorHandler(
|
||||
options: ErrorHandlerOptions = {},
|
||||
|
||||
@@ -17,3 +17,4 @@
|
||||
export * from './errorHandler';
|
||||
export * from './notFoundHandler';
|
||||
export * from './requestLoggingHandler';
|
||||
export * from './statusCheckHandler';
|
||||
|
||||
+3
@@ -21,6 +21,7 @@ import { NextFunction, Request, Response, RequestHandler } from 'express';
|
||||
* {@link createStatusCheckRouter}.
|
||||
*
|
||||
* @public
|
||||
* @deprecated Migrate to the {@link https://backstage.io/docs/backend-system/ | new backend system} and use the {@link https://backstage.io/docs/backend-system/core-services/root-health | Root Health Service} instead.
|
||||
*/
|
||||
export type StatusCheck = () => Promise<any>;
|
||||
|
||||
@@ -28,6 +29,7 @@ export type StatusCheck = () => Promise<any>;
|
||||
* Options passed to {@link statusCheckHandler}.
|
||||
*
|
||||
* @public
|
||||
* @deprecated Migrate to the {@link https://backstage.io/docs/backend-system/ | new backend system} and use the {@link https://backstage.io/docs/backend-system/core-services/root-health | Root Health Service} instead.
|
||||
*/
|
||||
export interface StatusCheckHandlerOptions {
|
||||
/**
|
||||
@@ -44,6 +46,7 @@ export interface StatusCheckHandlerOptions {
|
||||
* @public
|
||||
* @param options - An optional configuration object.
|
||||
* @returns An Express error request handler
|
||||
* @deprecated Migrate to the {@link https://backstage.io/docs/backend-system/ | new backend system} and use the {@link https://backstage.io/docs/backend-system/core-services/root-health | Root Health Service} instead.
|
||||
*/
|
||||
export async function statusCheckHandler(
|
||||
options: StatusCheckHandlerOptions = {},
|
||||
+2
-2
@@ -17,8 +17,7 @@
|
||||
import { LoggerService } from '@backstage/backend-plugin-api';
|
||||
import Router from 'express-promise-router';
|
||||
import express from 'express';
|
||||
import { errorHandler } from '../deprecated';
|
||||
import { statusCheckHandler, StatusCheck } from '../middleware';
|
||||
import { errorHandler, statusCheckHandler, StatusCheck } from '..';
|
||||
|
||||
/**
|
||||
* Creates a default status checking router, that you can add to your express
|
||||
@@ -31,6 +30,7 @@ import { statusCheckHandler, StatusCheck } from '../middleware';
|
||||
* requests.
|
||||
*
|
||||
* @public
|
||||
* @deprecated Migrate to the {@link https://backstage.io/docs/backend-system/ | new backend system} and use the {@link https://backstage.io/docs/backend-system/core-services/root-health | Root Health Service} instead.
|
||||
*/
|
||||
export async function createStatusCheckRouter(options: {
|
||||
logger: LoggerService;
|
||||
@@ -15,4 +15,5 @@
|
||||
*/
|
||||
|
||||
export { createServiceBuilder } from './createServiceBuilder';
|
||||
export { createStatusCheckRouter } from './createStatusCheckRouter';
|
||||
export type { ServiceBuilder, RequestLoggingHandlerFactory } from './types';
|
||||
|
||||
@@ -22,5 +22,3 @@
|
||||
|
||||
export * from './deprecated';
|
||||
export * from './compat';
|
||||
export * from './middleware';
|
||||
export * from './service';
|
||||
|
||||
@@ -1,5 +1,49 @@
|
||||
# @backstage/backend-defaults
|
||||
|
||||
## 0.3.4-next.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- b9ed1bb: bumped better-sqlite3 from ^9.0.0 to ^11.0.0
|
||||
- Updated dependencies
|
||||
- @backstage/backend-common@0.23.3-next.1
|
||||
- @backstage/backend-app-api@0.7.10-next.1
|
||||
- @backstage/backend-dev-utils@0.1.4
|
||||
- @backstage/backend-plugin-api@0.6.22-next.1
|
||||
- @backstage/cli-common@0.1.14
|
||||
- @backstage/config@1.2.0
|
||||
- @backstage/config-loader@1.8.1
|
||||
- @backstage/errors@1.2.4
|
||||
- @backstage/integration@1.13.0-next.0
|
||||
- @backstage/integration-aws-node@0.1.12
|
||||
- @backstage/types@1.1.1
|
||||
- @backstage/plugin-auth-node@0.4.17-next.1
|
||||
- @backstage/plugin-events-node@0.3.8-next.1
|
||||
- @backstage/plugin-permission-node@0.7.33-next.1
|
||||
|
||||
## 0.3.3-next.0
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 53ced70: Added a new Root Health Service which adds new endpoints for health checks.
|
||||
- 083eaf9: Fix bug where ISO durations could no longer be used for schedules
|
||||
- cb14a05: Repack the package to fix issues with typescript with named exports
|
||||
- Updated dependencies
|
||||
- @backstage/backend-plugin-api@0.6.21-next.0
|
||||
- @backstage/backend-common@0.23.2-next.0
|
||||
- @backstage/integration@1.13.0-next.0
|
||||
- @backstage/backend-app-api@0.7.9-next.0
|
||||
- @backstage/plugin-auth-node@0.4.16-next.0
|
||||
- @backstage/plugin-events-node@0.3.7-next.0
|
||||
- @backstage/plugin-permission-node@0.7.32-next.0
|
||||
- @backstage/backend-dev-utils@0.1.4
|
||||
- @backstage/cli-common@0.1.14
|
||||
- @backstage/config@1.2.0
|
||||
- @backstage/config-loader@1.8.1
|
||||
- @backstage/errors@1.2.4
|
||||
- @backstage/integration-aws-node@0.1.12
|
||||
- @backstage/types@1.1.1
|
||||
|
||||
## 0.3.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/backend-defaults",
|
||||
"version": "0.3.0",
|
||||
"version": "0.3.4-next.1",
|
||||
"description": "Backend defaults used by Backstage backend apps",
|
||||
"backstage": {
|
||||
"role": "node-library"
|
||||
@@ -143,7 +143,7 @@
|
||||
"@types/express": "^4.17.6",
|
||||
"archiver": "^6.0.0",
|
||||
"base64-stream": "^1.0.0",
|
||||
"better-sqlite3": "^9.0.0",
|
||||
"better-sqlite3": "^11.0.0",
|
||||
"compression": "^1.7.4",
|
||||
"concat-stream": "^2.0.0",
|
||||
"cookie": "^0.6.0",
|
||||
|
||||
@@ -1,5 +1,57 @@
|
||||
# @backstage/backend-dynamic-feature-service
|
||||
|
||||
## 0.2.15-next.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/plugin-catalog-backend@1.24.0-next.1
|
||||
- @backstage/backend-common@0.23.3-next.1
|
||||
- @backstage/backend-app-api@0.7.10-next.1
|
||||
- @backstage/backend-plugin-api@0.6.22-next.1
|
||||
- @backstage/backend-tasks@0.5.27-next.1
|
||||
- @backstage/cli-common@0.1.14
|
||||
- @backstage/cli-node@0.2.6
|
||||
- @backstage/config@1.2.0
|
||||
- @backstage/config-loader@1.8.1
|
||||
- @backstage/errors@1.2.4
|
||||
- @backstage/types@1.1.1
|
||||
- @backstage/plugin-app-node@0.1.22-next.1
|
||||
- @backstage/plugin-auth-node@0.4.17-next.1
|
||||
- @backstage/plugin-events-backend@0.3.9-next.1
|
||||
- @backstage/plugin-events-node@0.3.8-next.1
|
||||
- @backstage/plugin-permission-common@0.7.14
|
||||
- @backstage/plugin-permission-node@0.7.33-next.1
|
||||
- @backstage/plugin-scaffolder-node@0.4.8-next.1
|
||||
- @backstage/plugin-search-backend-node@1.2.27-next.1
|
||||
- @backstage/plugin-search-common@1.2.12
|
||||
|
||||
## 0.2.14-next.0
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/backend-plugin-api@0.6.21-next.0
|
||||
- @backstage/backend-common@0.23.2-next.0
|
||||
- @backstage/backend-tasks@0.5.26-next.0
|
||||
- @backstage/plugin-scaffolder-node@0.4.7-next.0
|
||||
- @backstage/backend-app-api@0.7.9-next.0
|
||||
- @backstage/plugin-app-node@0.1.21-next.0
|
||||
- @backstage/plugin-auth-node@0.4.16-next.0
|
||||
- @backstage/plugin-catalog-backend@1.23.2-next.0
|
||||
- @backstage/plugin-events-backend@0.3.8-next.0
|
||||
- @backstage/plugin-events-node@0.3.7-next.0
|
||||
- @backstage/plugin-permission-node@0.7.32-next.0
|
||||
- @backstage/plugin-search-backend-node@1.2.26-next.0
|
||||
- @backstage/cli-common@0.1.14
|
||||
- @backstage/cli-node@0.2.6
|
||||
- @backstage/config@1.2.0
|
||||
- @backstage/config-loader@1.8.1
|
||||
- @backstage/errors@1.2.4
|
||||
- @backstage/types@1.1.1
|
||||
- @backstage/plugin-permission-common@0.7.14
|
||||
- @backstage/plugin-search-common@1.2.12
|
||||
|
||||
## 0.2.11
|
||||
|
||||
### Patch Changes
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user