Merge branch 'master' into fix/url_wrong

Signed-off-by: Johannes Kleinlercher <johannes.kleinlercher@suxess-it.com>
This commit is contained in:
Johannes Kleinlercher
2023-07-12 13:42:51 +02:00
committed by GitHub
445 changed files with 8928 additions and 1474 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-search': patch
---
Fixed bug in "View Full Results" link of Search Modal that did not navigate to the full results page.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-kubernetes-backend': patch
---
Replace reference to deprecated import
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/create-app': patch
---
Post-create message - added instruction to run `yarn install` when app was created with `--skip-install`
+76
View File
@@ -0,0 +1,76 @@
---
'@backstage/plugin-scaffolder-backend-module-confluence-to-markdown': minor
---
**BREAKING**
This change updates the configuration of the confluence-to-markdown action so that it does not conflict with other confluence plguins. Currently many plugins make use of the `confluence.auth` configuration. However, only the confluence-to-markdown action uses the `confluence.auth` as a string. This change updates it so that `confluence.auth` is an object.
## Required Changes
Below are examples for updating `bearer`, `basic`, and `userpass` implementations.
For `bearer`:
Before:
```yaml
confluence:
baseUrl: 'https://confluence.example.com'
auth: 'bearer'
token: '${CONFLUENCE_TOKEN}'
```
After:
```yaml
confluence:
baseUrl: 'https://confluence.example.com'
auth:
type: 'bearer'
token: '${CONFLUENCE_TOKEN}'
```
For `basic`:
Before:
```yaml
confluence:
baseUrl: 'https://confluence.example.com'
auth: 'basic'
token: '${CONFLUENCE_TOKEN}'
email: 'example@company.org'
```
After:
```yaml
confluence:
baseUrl: 'https://confluence.example.com'
auth:
type: 'basic'
token: '${CONFLUENCE_TOKEN}'
email: 'example@company.org'
```
For `userpass`
Before:
```yaml
confluence:
baseUrl: 'https://confluence.example.com'
auth: 'userpass'
username: 'your-username'
password: 'your-password'
```
After:
```yaml
confluence:
baseUrl: 'https://confluence.example.com'
auth:
type: 'userpass'
username: 'your-username'
password: 'your-password'
```
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/theme': patch
---
Overwrite `PaletteOptions` & `ThemeOptions` type to allow use of `createTheme` from `@backstage/theme` as well as `@material-ui/core/styles` with the same type. Also replaced the default `CSSBaseline` with v4 instead of v5 for better backwards compatibility for now.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/create-app': patch
---
add cy.\*\*.should to cypress eslintrc
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-airbrake-backend': patch
---
Added support for the [new backend system](https://backstage.io/docs/backend-system/)
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-airbrake': patch
---
Added documentation for the [new backend system](https://backstage.io/docs/backend-system/)
+8
View File
@@ -0,0 +1,8 @@
---
'@backstage/cli': patch
'@backstage/cli-node': patch
'@backstage/plugin-devtools-backend': patch
'@backstage/plugin-tech-insights-backend': patch
---
semver upgrade to 7.5.3
+7
View File
@@ -0,0 +1,7 @@
---
'@backstage/plugin-lighthouse': patch
---
Added more verbose components (used to render `null`) when no audits for a website corresponding to the provided url were found.
Added `Create New Audit` button for the `AuditListForEntity` component used by `EntityLighthouseContent` and `EmbeddedRouter`.
Removed error alert from `errorApi` if error was due to no audits being found for a website (empty database query result).
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog-import': patch
---
Add a "View Component" button as the primary CTA after registering a new component using a link to catalog-info.yaml
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder-backend': patch
---
Indicate the name of the option that is being deprecated in task deprecation warning.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-kubernetes-backend': patch
---
Proxy endpoint supports cluster URLs with subpath
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/plugin-catalog-react': minor
'@backstage/plugin-catalog': minor
---
Tables which use `EntityTableProps` now have an additional `tableOptions` prop which can be used to provide additional table options to these components.
+45 -1
View File
@@ -231,22 +231,66 @@
"@backstage/plugin-xcmetrics": "0.2.39"
},
"changesets": [
"afraid-windows-rule",
"angry-phones-wash",
"beige-actors-melt",
"chatty-buttons-deny",
"cli-always-yarn-pack-freal",
"cold-hounds-cheat",
"cool-beans-tap",
"cool-starfishes-love",
"create-app-1687867724",
"cuddly-guests-hide",
"cyan-shirts-deny",
"dirty-wasps-draw",
"dull-onions-remember",
"fluffy-frogs-change",
"fluffy-readers-own",
"forty-kids-do",
"fresh-bears-yawn",
"green-otters-wait",
"heavy-jeans-refuse",
"khaki-rocks-do",
"lazy-frogs-destroy",
"lemon-cycles-enjoy",
"many-ants-poke",
"mean-bobcats-taste",
"mighty-pandas-deny",
"mighty-shoes-refuse",
"neat-spiders-glow",
"old-rules-give",
"polite-shrimps-confess",
"popular-crabs-deny",
"popular-icons-doubt",
"popular-kangaroos-accept",
"pretty-apes-know",
"pretty-falcons-drive",
"purple-feet-approve",
"purple-starfishes-design",
"red-cherries-draw",
"renovate-46eac46",
"renovate-739552f",
"renovate-f316d5e",
"rotten-colts-decide",
"seven-pillows-hear",
"shiny-meals-chew",
"short-rabbits-roll",
"silent-oranges-explode",
"silly-chairs-protect",
"silver-balloons-sniff",
"sixty-humans-rescue",
"sour-humans-begin",
"strange-baboons-look",
"sweet-cameras-kick",
"sweet-pots-rescue",
"tame-carpets-smell",
"tender-clouds-promise",
"tender-oranges-change",
"thin-countries-battle",
"tough-flowers-suffer",
"twenty-seas-float"
"twenty-seas-float",
"wicked-ears-scream",
"yellow-schools-relax",
"young-frogs-burn"
]
}
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog-backend-module-incremental-ingestion': patch
---
Update readme and instructions
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-adr-backend': patch
---
Added support for the [new backend system](https://backstage.io/docs/backend-system/)
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/core-components': patch
---
The `Skip to content` button on click focuses on the main article tag and skips the `h1` tag. Users are not able to identify which page they are on currently. Now it's changed the behaviour of the button and focuses on the `h1` tag on the page.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/core-components': patch
---
Parse unicode characters in name for avatar component
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-kubernetes': patch
---
Make pod drawer headings consistent
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/cli': patch
'@backstage/plugin-scaffolder-backend': patch
---
Updated dependency `esbuild` to `^0.18.0`.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/codemods': patch
---
Updated dependency `jscodeshift` to `^0.15.0`.
+7
View File
@@ -0,0 +1,7 @@
---
'@backstage/core-components': patch
'@backstage/plugin-codescene': patch
'@backstage/plugin-sonarqube': patch
---
Updated dependency `rc-progress` to `3.4.2`.
+38
View File
@@ -0,0 +1,38 @@
---
'@backstage/plugin-catalog-backend-module-incremental-ingestion': minor
---
**BREAKING** Allow incremental event handlers to be async; Force event handler
to indicate if it made a change. Instead of returning `null` or `undefined` from an event
handler to indicate no-oop, instead return the value { type: "ignored" }.
**before**
```javascript
import { createDelta, shouldIgnore } from "./my-delta-creater";
eventHandler: {
onEvent(params) {
if (shouldIgnore(params)) {
return;
}
return createDelta(params);
}
}
```
**after**
```javascript
import { createDelta, shouldIgnore } from "./my-delta-creater";
eventHandler: {
async onEvent(params) {
if (shouldIgnore(params) {
return { type: "ignored" };
}
// code to create delta can now be async if needed
return await createDelta(params);
}
}
```
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/plugin-kubernetes-backend': patch
---
Fixed a bug where the proxy endpoint would error when used in combination with
a local kubectl proxy process and a token-based auth strategy on-cluster.
+8
View File
@@ -0,0 +1,8 @@
---
'@backstage/plugin-home-react': patch
'@backstage/plugin-home': patch
---
Add possibility to customize the settings widget for different
properties by using the `uiSchema` provided by the json-schema.
More information here: https://rjsf-team.github.io/react-jsonschema-form/docs/api-reference/uiSchema
+12
View File
@@ -0,0 +1,12 @@
---
'@backstage/plugin-cost-insights': patch
'@backstage/plugin-user-settings': patch
'@backstage/theme': patch
'@backstage/test-utils': patch
'@backstage/core-plugin-api': patch
'@backstage/core-components': patch
'@backstage/core-app-api': patch
'@backstage/cli': patch
---
Fixing MUI / Material UI references
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog-unprocessed-entities': patch
---
Fixed spacing for success message
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/create-app': patch
'@backstage/plugin-catalog': patch
---
Display a warning alert if relations are defined, which don't exist in the catalog.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/create-app': patch
---
Updated included Dockerfile to include `g++`. Also updated the comments to note that some of the dependencies are also needed by isolated-vm
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/core-components': patch
---
Remove zooming in restrictions in the catalog graph
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-kubernetes': patch
---
Changed Google cloud auth scope to read-only.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-auth-backend': patch
---
Support for Token Endpoint Auth Method for OIDC Provider
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/plugin-adr-common': patch
'@backstage/plugin-adr': patch
---
fixed error with date parsing.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/core-plugin-api': patch
---
Change `IconComponent` type to be compatible with Material UI v5 icons.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder-backend-module-gitlab': patch
---
Fixed a bug in `gitlab:group:ensureExists` where `repos` was always set as the root group.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/theme': patch
---
Override the spacing to a v5 compliant method
+6 -3
View File
@@ -246,11 +246,14 @@ module.exports = {
1,
{
forbid: [
{ element: 'button', message: 'use MUI <Button> instead' },
{ element: 'p', message: 'use MUI <Typography> instead' },
{
element: 'button',
message: 'use Material UI <Button> instead',
},
{ element: 'p', message: 'use Material UI <Typography> instead' },
{
element: 'span',
message: 'use a MUI <Typography> variant instead',
message: 'use a Material UI <Typography> variant instead',
},
],
},
+2
View File
@@ -402,6 +402,7 @@ Uffizzi
ui
unbreak
Unconference
unicode
unmanaged
unregister
unregistering
@@ -409,6 +410,7 @@ unregistration
untracked
upsert
upvote
url
URIs
URLs
utils
+1
View File
@@ -354,6 +354,7 @@ auth:
clientSecret: ${AUTH_OIDC_CLIENT_SECRET}
authorizationUrl: ${AUTH_OIDC_AUTH_URL}
tokenUrl: ${AUTH_OIDC_TOKEN_URL}
tokenEndpointAuthMethod: ${AUTH_OIDC_TOKEN_ENDPOINT_AUTH_METHOD} # default='client_secret_basic'
tokenSignedResponseAlg: ${AUTH_OIDC_TOKEN_SIGNED_RESPONSE_ALG} # default='RS256'
scope: ${AUTH_OIDC_SCOPE} # default='openid profile email'
prompt: ${AUTH_OIDC_PROMPT} # default=none (allowed values: auto, none, consent, login)
+5 -5
View File
@@ -64,8 +64,8 @@ valuable as you grow.
### Our company has a strong design language system/brand that we want to incorporate. Does Backstage support this?
Yes! The Backstage UI is built using Material-UI. With the theming capabilities
of Material-UI, you are able to adapt the interface to your brand guidelines.
Yes! The Backstage UI is built using Material UI. With the theming capabilities
of Material UI, you are able to adapt the interface to your brand guidelines.
## Technical FAQ
@@ -73,11 +73,11 @@ of Material-UI, you are able to adapt the interface to your brand guidelines.
Backstage is a large scale [TypeScript](https://www.typescriptlang.org/)
application whose frontend parts use [React](https://react.dev/) and
[Material-UI](https://mui.com/), while the backend parts use
[Material UI](https://material-ui.com/), while the backend parts use
[Node.js](https://nodejs.org/) and the [Express](https://expressjs.com/)
framework.
### Why Material-UI?
### Why Material UI?
The short answer is that's what we've been using in Backstage internally.
@@ -88,7 +88,7 @@ knew that we would like to use.
It strikes a good balance between power, customizability, and ease of use. A
core focus of Backstage is to make plugin developers productive with as few
hurdles as possible. Material-UI lets plugin makers get going easily with both
hurdles as possible. Material UI lets plugin makers get going easily with both
well-known tech and a large flora of components.
### What is the end-to-end user flow? The happy path story.
+2 -2
View File
@@ -20,12 +20,12 @@ In order to provide more flexibility in what types of themes can be used and how
they are applied, the `theme` property on the `AppTheme` type is being
deprecated and replaced by a `Provider` property instead. The `Provider`
property is a React component that will be mounted at the root of the app
whenever that theme is active. This also removes the tight connection to MUI and
whenever that theme is active. This also removes the tight connection to Material UI and
opens up for other type of themes, and removes the hardcoded usage of
`<CssBaseline>`.
To migrate an existing theme, remove the `theme` property and move it over to a
new `Provider` component, using `ThemeProvider` from MUI to provide the new
new `Provider` component, using `ThemeProvider` from Material UI to provide the new
theme, along with `<CssBaseline>`. For example a theme that currently looks like
this:
+1 -1
View File
@@ -81,7 +81,7 @@ const app = createApp({
components: {
SignInPage: props => {
const configApi = useApi(configApiRef);
if (configApi.getString('auth.environment') !== 'development')
if (configApi.getString('auth.environment') !== 'development') {
return <ProxiedSignInPage {...props} provider="azure-easyauth" />;
}
return (
+1
View File
@@ -237,6 +237,7 @@ check the App Registration you created:
- `metadataUrl`: In Overview > Endpoints tab, grab OpenID Connect metadata document URL.
- `authorizationUrl` and `tokenUrl`: Open the `metadataUrl` in a browser, that json will
hold these 2 urls somewhere in there.
- `tokenEndpointAuthMethod`: Don't define it, use the default unless you know what it does.
- `tokenSignedResponseAlg`: Don't define it, use the default unless you know what it does.
- `scope`: Only used if we didn't specify `defaultScopes` in the provider's factory,
basically the same thing.
+26 -10
View File
@@ -37,7 +37,7 @@ The required steps in the host build are to install dependencies with
`yarn install`, generate type definitions using `yarn tsc`, and build the backend
package with `yarn build:backend`.
In a CI workflow it might look something like this:
In a CI workflow it might look something like this, from the root:
```bash
yarn install --frozen-lockfile
@@ -47,7 +47,7 @@ yarn tsc
# Build the backend, which bundles it all up into the packages/backend/dist folder.
# The configuration files here should match the one you use inside the Dockerfile below.
yarn build:backend --config app-config.yaml
yarn build:backend --config ../../app-config.yaml
```
Once the host build is complete, we are ready to build our image. The following
@@ -56,13 +56,18 @@ Once the host build is complete, we are ready to build our image. The following
```Dockerfile
FROM node:16-bullseye-slim
# Install isolate-vm dependencies, these are needed by the @backstage/plugin-scaffolder-backend.
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
--mount=type=cache,target=/var/lib/apt,sharing=locked \
apt-get update && \
apt-get install -y --no-install-recommends python3 g++ build-essential && \
yarn config set python /usr/bin/python3
# Install sqlite3 dependencies. You can skip this if you don't use sqlite3 in the image,
# in which case you should also move better-sqlite3 to "devDependencies" in package.json.
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
--mount=type=cache,target=/var/lib/apt,sharing=locked \
apt-get update && \
apt-get install -y --no-install-recommends libsqlite3-dev python3 build-essential && \
yarn config set python /usr/bin/python3
apt-get install -y --no-install-recommends libsqlite3-dev
# From here on we use the least-privileged `node` user to run the backend.
USER node
@@ -169,13 +174,19 @@ RUN find packages \! -name "package.json" -mindepth 2 -maxdepth 2 -exec rm -rf {
# Stage 2 - Install dependencies and build packages
FROM node:16-bullseye-slim AS build
# install sqlite3 dependencies
# Install isolate-vm dependencies, these are needed by the @backstage/plugin-scaffolder-backend.
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
--mount=type=cache,target=/var/lib/apt,sharing=locked \
apt-get update && \
apt-get install -y --no-install-recommends libsqlite3-dev python3 build-essential && \
apt-get install -y --no-install-recommends python3 g++ build-essential && \
yarn config set python /usr/bin/python3
# Install sqlite3 dependencies. You can skip this if you don't use sqlite3 in the image,
# in which case you should also move better-sqlite3 to "devDependencies" in package.json.
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
--mount=type=cache,target=/var/lib/apt,sharing=locked \
apt-get install -y --no-install-recommends libsqlite3-dev
USER node
WORKDIR /app
@@ -200,13 +211,18 @@ RUN mkdir packages/backend/dist/skeleton packages/backend/dist/bundle \
# Stage 3 - Build the actual backend image and install production dependencies
FROM node:16-bullseye-slim
# Install isolate-vm dependencies, these are needed by the @backstage/plugin-scaffolder-backend.
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
--mount=type=cache,target=/var/lib/apt,sharing=locked \
apt-get update && \
apt-get install -y --no-install-recommends python3 g++ build-essential && \
yarn config set python /usr/bin/python3
# Install sqlite3 dependencies. You can skip this if you don't use sqlite3 in the image,
# in which case you should also move better-sqlite3 to "devDependencies" in package.json.
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
--mount=type=cache,target=/var/lib/apt,sharing=locked \
apt-get update && \
apt-get install -y --no-install-recommends libsqlite3-dev python3 build-essential && \
yarn config set python /usr/bin/python3
apt-get install -y --no-install-recommends libsqlite3-dev
# From here on we use the least-privileged `node` user to run the backend.
USER node
+6 -6
View File
@@ -7,7 +7,7 @@ description: Documentation on Design
Be it a new component contribution, or plugin specific components, you'll want
to follow these guidelines. We'll cover the three main subjects that define the
general look and feel of your components, all of which build on top of the
Material-UI theme features:
Material UI theme features:
- Layout
- Color palette
@@ -17,10 +17,10 @@ Material-UI theme features:
Layout refers to how you organize or stack content. Whenever possible, we want
to use Backstage's components (check the [Storybook][1] for a list and demo)
first, and otherwise fall back to Material-UI components (check the [MUI docs][2]).
first, and otherwise fall back to Material UI components (check the [Material UI docs][2]).
If none of these fit your layout needs, then you can build your own components.
However, using HTML+CSS directly is not recommended; it's better to use MUI
However, using HTML+CSS directly is not recommended; it's better to use Material UI
layout components to make your layout theme aware, meaning if someone changes
the theme, your layout would react to those changes without requiring updates
to your code.
@@ -43,13 +43,13 @@ specific styles for that component, that includes paddings, margins and colors.
However when making a component from scratch you'll need to reference the theme
as much as possible, make sure to use the theme's color palette. Most Backstage
components and all MUI components should use the theme's color palette by default,
components and all Material UI components should use the theme's color palette by default,
so unless you need explicit control on the color of a component (say when the
component was designed to use the primary color but you want to use the
secondary color instead), then the easiest way to access the color palette is
to [Override the Component Styles][11] as suggested by Backstage.
It's not a very common use case to override a theme color in a MUI component
It's not a very common use case to override a theme color in a Material UI component
but let's say you have a custom Sidebar component with a Paper component that
highlights its content with a different color for a side menu or something
(usually you use the elevation, but maybe the designer wanted a colorful app).
@@ -78,7 +78,7 @@ which tokens you can use as reference from the compiled theme.
## Typography
Most of the time the components from MUI will use the `<Typography />` component
Most of the time the components from Material UI will use the `<Typography />` component
which will use the theme's typography properties like font family, size, weight
and appropriate color from the palette for the context of that component. This applies for example to
buttons that use white font color for contained buttons, or the respective color
+4 -4
View File
@@ -14,8 +14,8 @@ You'll find our storybook at
[http://backstage.io/storybook](http://backstage.io/storybook).
As noted in the [design introduction](design.md), Backstage's design is based
off of [Material-UI](https://material-ui.com/). Much of the UI elements use
direct Material-UI, while we've also extended and written custom ones to provide
off of [Material UI](https://material-ui.com/). Much of the UI elements use
direct Material UI, while we've also extended and written custom ones to provide
specific functionality.
![Storybook Page](../assets/dls/storybook-page.png)
@@ -27,13 +27,13 @@ copied.
When custom Backstage components are created, they are placed in the
`@backstage/core-components` package and added to the Storybook.
There may be times where an existing Material-UI component (in
There may be times where an existing Material UI component (in
`@material-ui/core`) is sufficient and doesn't need to be wrapped or duplicated.
However, we may want to identify an _opinionated_ way to use that component
inside of Backstage. In these cases, stories showing how to use those existing
components will also be put into our storybook.
When a story example using Material-UI becomes more complex, requiring a
When a story example using Material UI becomes more complex, requiring a
specific set of colors, variants, parameters, etc., it may become a candidate to
be refactored to become a full Backstage core component.
+1 -1
View File
@@ -130,7 +130,7 @@ infrastructure UIs (and incurring additional cognitive overhead each time they
make a context switch), most of these tools can be organized around the entities
in the catalog.
![tools](https://backstage.io/blog/assets/20-05-20/tabs.png)
![tools](https://backstage.io/assets/images/tabs-abfdf72185d3ceb1d92c4237f7f78809.png)
The Backstage platform can be customized by incorporating
[existing open source plugins](https://github.com/backstage/backstage/tree/master/plugins),
+2 -2
View File
@@ -42,7 +42,7 @@ the "Overriding Backstage and Material UI css rules" section below.
You can also create a theme from scratch that matches the `BackstageTheme` type
exported by [`@backstage/theme`](https://www.npmjs.com/package/@backstage/theme).
See the
[Material-UI docs on theming](https://material-ui.com/customization/theming/)
[Material UI docs on theming](https://material-ui.com/customization/theming/)
for more information about how that can be done.
## Using your Custom Theme
@@ -162,7 +162,7 @@ const myTheme = createTheme({
```
For a more complete example of a custom theme including Backstage and
Material-UI component overrides, see the [Aperture
Material UI component overrides, see the [Aperture
theme](https://github.com/backstage/demo/blob/master/packages/app/src/theme/aperture.ts)
from the [Backstage demo site](https://demo.backstage.io).
+12 -5
View File
@@ -71,7 +71,7 @@ yarn add --cwd packages/backend pg
```
Use your favorite editor to open `app-config.yaml` and add your PostgreSQL
configuration. in the root directory of your Backstage app using the credentials
configuration in the root directory of your Backstage app using the credentials
from the previous steps.
```yaml title="app-config.yaml"
@@ -90,10 +90,17 @@ backend:
user: ${POSTGRES_USER}
password: ${POSTGRES_PASSWORD}
# https://node-postgres.com/features/ssl
# ssl: require # see https://www.postgresql.org/docs/current/libpq-ssl.html Table 33.1. SSL Mode Descriptions (e.g. require)
#ca: # if you have a CA file and want to verify it you can uncomment this section
#$file: <file-path>/ca/server.crt
# highlight-add-end
# ssl:
# host is only needed if the connection name differs from the certificate name.
# This is for example the case with CloudSQL.
# host: servername in the certificate
# ca:
# $file: <file-path>/server.pem
# key:
# $file: <file-path>/client.key
# cert:
# $file: <file-path>/client-cert.pem
# highlight-add-end
```
You'll use the connection details from the previous step. You can either set the
@@ -84,7 +84,7 @@ For example, if you install the `api-docs` plugin, a matching `SidebarItem`
could be something like this:
```tsx title="packages/app/src/components/Root/Root.tsx"
// Import icon from MUI
// Import icon from Material UI
import ExtensionIcon from '@material-ui/icons/Extension';
// ... inside the AppSidebar component
+24 -24
View File
@@ -484,30 +484,30 @@ of the build system, including the bundling, tests, builds, and type checking.
Loaders are always selected based on the file extension. The following is a list
of all supported file extensions:
| Extension | Exports | Purpose |
| ----------- | --------------- | ----------------------------------------------------------------------------- |
| `.ts` | Script Module | TypeScript |
| `.tsx` | Script Module | TypeScript and XML |
| `.js` | Script Module | JavaScript |
| `.jsx` | Script Module | JavaScript and XML |
| `.mjs` | Script Module | ECMAScript Module |
| `.cjs` | Script Module | CommonJS Module |
| `.json` | JSON Data | JSON Data |
| `.yml` | JSON Data | YAML Data |
| `.yaml` | JSON Data | YAML Data |
| `.css` | classes | Style sheet |
| `.eot` | URL Path | Font |
| `.ttf` | URL Path | Font |
| `.woff2` | URL Path | Font |
| `.woff` | URL Path | Font |
| `.bmp` | URL Path | Image |
| `.gif` | URL Path | Image |
| `.jpeg` | URL Path | Image |
| `.jpg` | URL Path | Image |
| `.png` | URL Path | Image |
| `.svg` | URL Path | Image |
| `.md` | URL Path | Markdown File |
| `.icon.svg` | React Component | SVG converted into a [MUI SvgIcon](https://mui.com/components/icons/#svgicon) |
| Extension | Exports | Purpose |
| ----------- | --------------- | -------------------------------------------------------------------------------------- |
| `.ts` | Script Module | TypeScript |
| `.tsx` | Script Module | TypeScript and XML |
| `.js` | Script Module | JavaScript |
| `.jsx` | Script Module | JavaScript and XML |
| `.mjs` | Script Module | ECMAScript Module |
| `.cjs` | Script Module | CommonJS Module |
| `.json` | JSON Data | JSON Data |
| `.yml` | JSON Data | YAML Data |
| `.yaml` | JSON Data | YAML Data |
| `.css` | classes | Style sheet |
| `.eot` | URL Path | Font |
| `.ttf` | URL Path | Font |
| `.woff2` | URL Path | Font |
| `.woff` | URL Path | Font |
| `.bmp` | URL Path | Image |
| `.gif` | URL Path | Image |
| `.jpeg` | URL Path | Image |
| `.jpg` | URL Path | Image |
| `.png` | URL Path | Image |
| `.svg` | URL Path | Image |
| `.md` | URL Path | Markdown File |
| `.icon.svg` | React Component | SVG converted into a [Material UI SvgIcon](https://mui.com/material-ui/icons/#svgicon) |
## Jest Configuration
+5 -3
View File
@@ -34,15 +34,17 @@ is a concrete implementation of [AnalyticsApi][analytics-api-type], common
integrations are packaged and provided as plugins. Find your analytics tool of
choice below.
| Analytics Tool | Support Status |
| ---------------------- | -------------- |
| [Google Analytics][ga] | Yes ✅ |
| Analytics Tool | Support Status |
| ------------------------- | -------------- |
| [Google Analytics][ga] | Yes ✅ |
| [Google Analytics 4][ga4] | Yes ✅ |
To suggest an integration, please [open an issue][add-tool] for the analytics
tool your organization uses. Or jump to [Writing Integrations][int-howto] to
learn how to contribute the integration yourself!
[ga]: https://github.com/backstage/backstage/blob/master/plugins/analytics-module-ga/README.md
[ga4]: https://github.com/backstage/backstage/blob/master/plugins/analytics-module-ga4/README.md
[add-tool]: https://github.com/backstage/backstage/issues/new?assignees=&labels=plugin&template=plugin_template.md&title=%5BAnalytics+Module%5D+THE+ANALYTICS+TOOL+TO+INTEGRATE
[int-howto]: #writing-integrations
[analytics-api-type]: https://backstage.io/docs/reference/core-plugin-api.analyticsapi
+1 -1
View File
@@ -16,7 +16,7 @@ browser APIs or by depending on external modules to do the work.
- Consider writing plugins in `TypeScript`.
- Plan the directory structure of your plugin so that it becomes easy to manage.
- Prefer using the [Backstage components](https://backstage.io/storybook),
otherwise go with [Material-UI](https://material-ui.com/).
otherwise go with [Material UI](https://material-ui.com/).
- Check out the shared Backstage APIs before building a new one.
## Plugin concepts / API
+1 -1
View File
@@ -93,7 +93,7 @@ next to them you can split up the UI in as many components as you feel like.
We have the `ExampleComponent` to show an example Backstage page component. The
`ExampleFetchComponent` showcases the common task of making an async request to
a public API and plot the response data in a table using Material-UI components.
a public API and plot the response data in a table using Material UI components.
You may tweak these components, rename them and/or replace them completely.
+1 -1
View File
@@ -14,7 +14,7 @@ This release has an important security fix, along with a lot of squashed bugs an
### BREAKING: Removed the `Tabs` core component
The `Tabs` component was removed from `@backstage/core-components`. It was a thin shim that provided very little value and was considered confusing, when the [native Material-UI tabs](https://v4.mui.com/components/tabs/) were already fully usable out of the box. Check out the pull request below for more details.
The `Tabs` component was removed from `@backstage/core-components`. It was a thin shim that provided very little value and was considered confusing, when the [native Material UI tabs](https://v4.mui.com/components/tabs/) were already fully usable out of the box. Check out the pull request below for more details.
Contributed by [@tudi2d](https://github.com/tudi2d) in [#16587](https://github.com/backstage/backstage/pull/16587)
+2 -2
View File
@@ -599,7 +599,7 @@
- 750e45539ad: Add close button & improve search input.
MUI's Paper wrapping the SearchBar in the SearchPage was removed, we recommend users update their apps accordingly.
Material UI's Paper wrapping the SearchBar in the SearchPage was removed, we recommend users update their apps accordingly.
SearchBarBase's TextField's label support added & aria-label uses label string if present, tests relying on the default placeholder value should still work unless custom placeholder was given.
@@ -641,7 +641,7 @@
- 750e45539ad: Add close button & improve search input.
MUI's Paper wrapping the SearchBar in the SearchPage was removed, we recommend users update their apps accordingly.
Material UI's Paper wrapping the SearchBar in the SearchPage was removed, we recommend users update their apps accordingly.
SearchBarBase's TextField's label support added & aria-label uses label string if present, tests relying on the default placeholder value should still work unless custom placeholder was given.
+2 -2
View File
@@ -175,7 +175,7 @@
- 750e45539ad: Add close button & improve search input.
MUI's Paper wrapping the SearchBar in the SearchPage was removed, we recommend users update their apps accordingly.
Material UI's Paper wrapping the SearchBar in the SearchPage was removed, we recommend users update their apps accordingly.
SearchBarBase's TextField's label support added & aria-label uses label string if present, tests relying on the default placeholder value should still work unless custom placeholder was given.
@@ -200,7 +200,7 @@
- 750e45539ad: Add close button & improve search input.
MUI's Paper wrapping the SearchBar in the SearchPage was removed, we recommend users update their apps accordingly.
Material UI's Paper wrapping the SearchBar in the SearchPage was removed, we recommend users update their apps accordingly.
SearchBarBase's TextField's label support added & aria-label uses label string if present, tests relying on the default placeholder value should still work unless custom placeholder was given.
+9 -9
View File
@@ -4,9 +4,9 @@
### Minor Changes
- 1fd38bc4141a: **MUI v5 Support:** Adding platform-wide support for MUI v5 allowing a transition phase for migrating central plugins & components over. We still support v4 instances & plugins by adding a
- 1fd38bc4141a: **Material UI v5 Support:** Adding platform-wide support for Material UI v5 allowing a transition phase for migrating central plugins & components over. We still support v4 instances & plugins by adding a
To allow the future support of plugins & components using MUI v5 you want to upgrade your `AppTheme`'s to using the `UnifiedThemeProvider`
To allow the future support of plugins & components using Material UI v5 you want to upgrade your `AppTheme`'s to using the `UnifiedThemeProvider`
```diff
Provider: ({ children }) => (
@@ -119,7 +119,7 @@
### Minor Changes
- 1fd38bc4141a: Test App Wrapper is now using `UnifiedThemeProvider` for supporting MUI v5 next to MUI v4 in tests.
- 1fd38bc4141a: Test App Wrapper is now using `UnifiedThemeProvider` for supporting Material UI v5 next to Material UI v4 in tests.
### Patch Changes
@@ -137,9 +137,9 @@
### Minor Changes
- 1fd38bc4141a: **MUI v5 Support:** Adding platform-wide support for MUI v5 allowing a transition phase for migrating central plugins & components over. We still support v4 instances & plugins by adding a
- 1fd38bc4141a: **Material UI v5 Support:** Adding platform-wide support for Material UI v5 allowing a transition phase for migrating central plugins & components over. We still support v4 instances & plugins by adding a
To allow the future support of plugins & components using MUI v5 you want to upgrade your `AppTheme`'s to using the `UnifiedThemeProvider`
To allow the future support of plugins & components using Material UI v5 you want to upgrade your `AppTheme`'s to using the `UnifiedThemeProvider`
```diff
Provider: ({ children }) => (
@@ -445,7 +445,7 @@
- 6b571405f806: `scaffolder/next`: Provide some default template components to `rjsf` to allow for standardization and markdown descriptions
- 4505dc3b4598: `scaffolder/next`: Don't render `TemplateGroups` when there's no results in with search query
- a452bda74d7a: Fixed typescript casting bug for useTemplateParameterSchema hook
- 6b571405f806: `scaffolder/next`: provide a `ScaffolderField` component which is meant to replace some of the `FormControl` components from MUI, making it easier to write `FieldExtensions`.
- 6b571405f806: `scaffolder/next`: provide a `ScaffolderField` component which is meant to replace some of the `FormControl` components from Material UI, making it easier to write `FieldExtensions`.
### Patch Changes
@@ -579,7 +579,7 @@
- 75540599124a: Updated example component for a newly scaffolded app.
- 5d692f72ebfb: Make sure to include a `fetch` environment for `jsdom` in `jest` tests
- 6816352500a7: Add discovery feature to the onboard cli command.
- 20b7da6f1311: Enforcing MUI v5 specific linting to minimize bundle size.
- 20b7da6f1311: Enforcing Material UI v5 specific linting to minimize bundle size.
- Updated dependencies
- @backstage/types@1.1.0
- @backstage/config-loader@1.3.1
@@ -640,7 +640,7 @@
- 4e697e88f0e2: Add resource utilization to Pod Drawer
- 78cbb8ef8aea: Enhance the sidebar item accessibility by using appropriate header semantics.
- 66ae4d8ca380: Added `exact` prop to `SidebarSubmenuItem` which causes it to only highlight if the current location is an exact match.
- 83bdc3a555c1: Replaced usages of `theme.palette.theme.hint` with `theme.palette.text.secondary` as it has been removed in MUI v5
- 83bdc3a555c1: Replaced usages of `theme.palette.theme.hint` with `theme.palette.text.secondary` as it has been removed in Material UI v5
- b4cc4b1415e9: SupportButton auto focus first item when opened.
- e33beb1f2a8e: Make the documentation pages printable (also handy for exporting to PDF)
- Updated dependencies
@@ -854,7 +854,7 @@
### Patch Changes
- 865267a6b934: Updated dependency `@asyncapi/react-component` to `1.0.0-next.48`.
- 83bdc3a555c1: Replaced usages of `theme.palette.theme.hint` with `theme.palette.text.secondary` as it has been removed in MUI v5
- 83bdc3a555c1: Replaced usages of `theme.palette.theme.hint` with `theme.palette.text.secondary` as it has been removed in Material UI v5
- af748a148d52: Add support for OpenAPI Specification (OAS) v3.1.0 using swagger-ui v5.0.0.
- Updated dependencies
- @backstage/core-plugin-api@1.5.2
+6 -6
View File
@@ -4,9 +4,9 @@
### Minor Changes
- 1fd38bc4141a: **MUI v5 Support:** Adding platform-wide support for MUI v5 allowing a transition phase for migrating central plugins & components over. We still support v4 instances & plugins by adding a
- 1fd38bc4141a: **Material UI v5 Support:** Adding platform-wide support for Material UI v5 allowing a transition phase for migrating central plugins & components over. We still support v4 instances & plugins by adding a
To allow the future support of plugins & components using MUI v5 you want to upgrade your `AppTheme`'s to using the `UnifiedThemeProvider`
To allow the future support of plugins & components using Material UI v5 you want to upgrade your `AppTheme`'s to using the `UnifiedThemeProvider`
```diff
Provider: ({ children }) => (
@@ -30,7 +30,7 @@
### Minor Changes
- 1fd38bc4141a: Test App Wrapper is now using `UnifiedThemeProvider` for supporting MUI v5 next to MUI v4 in tests.
- 1fd38bc4141a: Test App Wrapper is now using `UnifiedThemeProvider` for supporting Material UI v5 next to Material UI v4 in tests.
### Patch Changes
@@ -47,9 +47,9 @@
### Minor Changes
- 1fd38bc4141a: **MUI v5 Support:** Adding platform-wide support for MUI v5 allowing a transition phase for migrating central plugins & components over. We still support v4 instances & plugins by adding a
- 1fd38bc4141a: **Material UI v5 Support:** Adding platform-wide support for Material UI v5 allowing a transition phase for migrating central plugins & components over. We still support v4 instances & plugins by adding a
To allow the future support of plugins & components using MUI v5 you want to upgrade your `AppTheme`'s to using the `UnifiedThemeProvider`
To allow the future support of plugins & components using Material UI v5 you want to upgrade your `AppTheme`'s to using the `UnifiedThemeProvider`
```diff
Provider: ({ children }) => (
@@ -234,7 +234,7 @@
### Patch Changes
- 20b7da6f1311: Enforcing MUI v5 specific linting to minimize bundle size.
- 20b7da6f1311: Enforcing Material UI v5 specific linting to minimize bundle size.
- Updated dependencies
- @backstage/config-loader@1.3.1-next.0
- @backstage/config@1.0.7
+3 -3
View File
@@ -130,7 +130,7 @@
- 6b571405f806: `scaffolder/next`: Provide some default template components to `rjsf` to allow for standardization and markdown descriptions
- 4505dc3b4598: `scaffolder/next`: Don't render `TemplateGroups` when there's no results in with search query
- 6b571405f806: `scaffolder/next`: provide a `ScaffolderField` component which is meant to replace some of the `FormControl` components from MUI, making it easier to write `FieldExtensions`.
- 6b571405f806: `scaffolder/next`: provide a `ScaffolderField` component which is meant to replace some of the `FormControl` components from Material UI, making it easier to write `FieldExtensions`.
### Patch Changes
@@ -279,7 +279,7 @@
### Patch Changes
- 83bdc3a555c1: Replaced usages of `theme.palette.theme.hint` with `theme.palette.text.secondary` as it has been removed in MUI v5
- 83bdc3a555c1: Replaced usages of `theme.palette.theme.hint` with `theme.palette.text.secondary` as it has been removed in Material UI v5
- Updated dependencies
- @backstage/errors@1.2.0-next.0
- @backstage/core-plugin-api@1.5.2-next.0
@@ -479,7 +479,7 @@
### Patch Changes
- 83bdc3a555c1: Replaced usages of `theme.palette.theme.hint` with `theme.palette.text.secondary` as it has been removed in MUI v5
- 83bdc3a555c1: Replaced usages of `theme.palette.theme.hint` with `theme.palette.text.secondary` as it has been removed in Material UI v5
- Updated dependencies
- @backstage/plugin-catalog@1.11.1-next.1
- @backstage/core-components@0.13.2-next.1
+2 -2
View File
@@ -72,10 +72,10 @@ for details and installation instructions.
Contributed by [@alde](https://github.com/alde) in
[#17828](https://github.com/backstage/backstage/pull/17828)
### More movement toward Material-UI v5 and React v18 compatibility
### More movement toward Material UI v5 and React v18 compatibility
There have been some tweaks here or there to types and the theme system to
ensure a smooth future migration toward Material-UI version 5. This should be
ensure a smooth future migration toward Material UI version 5. This should be
mostly transparent to adopters, but please let us know if you encounter any
oddities around the theme system after upgrading to this release.
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -995,7 +995,7 @@
- 64a579a998: Add items prop to SupportButton. This prop can be used to override the items that would otherwise be grabbed from the config.
- 5d3058355d: Add `react/forbid-elements` linter rule for button, suggest MUI `Button`
- 5d3058355d: Add `react/forbid-elements` linter rule for button, suggest Material UI `Button`
- 3280711113: Updated dependency `msw` to `^0.49.0`.
@@ -2804,7 +2804,7 @@
- d3fea4ae0a: Internal fixes to avoid implicit usage of globals
- 2e701b3796: Internal refactor to use `react-router-dom` rather than `react-router`.
- a19cffbeed: Update search links to only have header as linkable text
- 5d3058355d: Add `react/forbid-elements` linter rule for button, suggest MUI `Button`
- 5d3058355d: Add `react/forbid-elements` linter rule for button, suggest Material UI `Button`
- 3280711113: Updated dependency `msw` to `^0.49.0`.
- 786f1b1419: Support older versions of react-router
- Updated dependencies
+2 -2
View File
@@ -128,11 +128,11 @@ old usages by the `string` type.
### Constrained `IconComponent` type
The `IconComponent` type used to allow all of the props from the MUI `SvgIcon`.
The `IconComponent` type used to allow all of the props from the Material UI `SvgIcon`.
This encouraged some bad patterns in open source plugins such as applying colors
to the icons, which in turn hurt the ability to replace the icons with custom
ones. The `IconComponent` type, which is now exported from
`@backstage/core-plugin-api`, now only accepts a `fontSize` prop used to set the
size of the icon. The type is compatible with the MUI `SvgIcon`, but there may
size of the icon. The type is compatible with the Material UI `SvgIcon`, but there may
be situations where an icon needs an explicit cast to `IconComponent` in order
to narrow the type.
@@ -55,7 +55,7 @@ We will continue to post important product announcements, technical documentatio
[![Backstage Community Sessions, hosted by Spotify](assets/21-06-22/backstage-community-sessions.png)](https://github.com/backstage/community/#backstage-community)
Earlier this year, we began hosting [Backstage Community Sessions](https://github.com/backstage/community/#backstage-community) — official meetups for anyone who wanted to join them. Since [the very first one](https://youtu.be/4-VX9tDdJYY), the Backstage team has been inspired and humbled by the communitys participation in these sessions — from hearing the [Expedia Group team share their journey adopting Backstage](https://youtu.be/rRphwXeq33Q?t=1509) to discussions about TypeScript and Material-UI. Its great collaborating through code — but its also a lot of fun when you can see each others faces and have a conversation.
Earlier this year, we began hosting [Backstage Community Sessions](https://github.com/backstage/community/#backstage-community) — official meetups for anyone who wanted to join them. Since [the very first one](https://youtu.be/4-VX9tDdJYY), the Backstage team has been inspired and humbled by the communitys participation in these sessions — from hearing the [Expedia Group team share their journey adopting Backstage](https://youtu.be/rRphwXeq33Q?t=1509) to discussions about TypeScript and Material UI. Its great collaborating through code — but its also a lot of fun when you can see each others faces and have a conversation.
And while these sessions have been a success, the feedback weve gotten from the community has been very clear: more frequent and more focused conversations. So, later this summer, well be launching standalone Backstage Adopter Sessions and Backstage Contributor Sessions. We hope this will lead to more useful sessions for everyone — and, of course, you are welcome to attend either or both:
@@ -0,0 +1,189 @@
---
# prettier-ignore
title: "Adopter Spotlight: How Stash simplified monitoring, ownership and true app health with microservices"
author: Taylor Webber, Staff Engineer, Stash
---
![backstage header](assets/2023-07-08/banner.png)
**TL;DR**: Monitoring the health of a software application goes beyond surfacing API errors and customer-facing issues. It requires a comprehensive understanding of every facet of a service, including process metrics like DORA, as well as clear ownership of services and processes. By implementing Elevate as an internal developer portal, development teams now have better visibility of ownership in the distributed systems they work in. They also have the benefit of consolidated application health data and other metrics gained from the SaaS products they utilize everyday. This approach ensures a “single pane of glass” for application ownership and health so our teams can focus on building products and features that help our customers invest for a prosperous future.
{/* truncate */}
At [Stash](stash.com), our mission is to give people the confidence to invest for a better life. Our app simplifies investing for the middle class who may be less experienced with traditional investing and retirement planning. Our customers trust us with their money, and with that, rely on us to provide a responsive and quality experience that works every time.
It isn't revolutionary to say that monitoring the health of a software application is critical for ensuring its reliability and performance in service of customers' needs. However, in a distributed architecture like microservices, tracking ownership and monitoring application health across the system quickly becomes complex. The difficulties are further compounded when leveraging multiple SaaS products, which is common in modern development but specifically so for fintechs like Stash that integrate best-of-breed software in novel ways, as we do across our platform.
What we found is that there are ways to make sense of these complex systems by tracking DevOps Research and Assessment (DORA) metrics for applications and leveraging SaaS products to create a central hub to understand the _true_ health of an application.
In this post, I'll walk you through Stash's journey to create Elevate, our Internal Developer Portal (IDP) based on the open source [Backstage](https://backstage.io/) framework. Our portal increased visibility of application health metrics, prioritized cloud cost insights, and reduced the context switching required for teams to understand service ownership and the components that make up the entirety of Stash's world-class application systems.
Elevate enables effective monitoring, streamlined incident response, improved overall application health, and most importantly, team health.
# Setting the monitoring/DORA scene
It seems counterintuitive, but trying to solve the problem of monitoring and tracking ownership with a traditional centralized approach and more SaaS monitoring tools will likely not solve the problem.
Traditional centralized monitoring approaches may not suffice in a distributed architecture due to services that may act as pass-throughs or services that call many other services to aggregate data or tasks. In traditional monitoring, you will only see the error rates and request logging for individual services. That will only ever show you part of the puzzle as you'll still be unable to trace a request from a frontend application, through your many service layers to your data stores and back out.
Utilizing multiple SaaS products for service monitoring and observability during development introduces additional complexity; each product may have its own dashboard and reporting tools. These implementation differences can make it difficult to consolidate and gain a holistic view of the application's health.
Picking the right tool for the job can make developing quality products at speed and scale easier, but what we've learned is that utilizing each tool's context for application health as a piece of the puzzle has exponentially impacted our team's effectiveness.
The team at Stash took an approach of enhanced monitoring which required introducing request tracing for services that a team owns (and the entire org) to get the full picture. We worked to distribute monitoring **_across_** services, capturing both customer-facing issues and internal process metrics that focus on service quality.
We also took a hard look at our health metrics. Some attributes of healthy applications are high availability, HTTP 500 errors are minimal, CPU and memory usage are sustainable, and the “/health” endpoint returns the health of the application. However, to gain insights into the true health of an application and the teams supporting it, tracking DORA metrics is essential.
We took four key DORA metrics — deployment frequency, lead time for changes, mean time to restore, and change failure rate — to process aspects of services and provide a comprehensive understanding of an application's overall health as well as the health of our team and organization.
# Understanding complex systems at Stash with Backstage
At Stash, we use a multitude of SaaS tools during the software development process, some of which provide varying degrees of built-in service catalogs. With many sources of truth and a lack of ability to combine data from multiple sources (eg. FireHydrant incident response with DataDog or DataDog Real User Monitoring data in PagerDuty, etc.) it was challenging to get a holistic view of the whole system..
Additionally, as we created more and more microservices, it became challenging to determine ownership for each service. Microservice owners were finding it increasingly difficult to keep track of their various consumers to assure that contracts were being maintained as new changes were introduced. Ownership clarity was **_crucial_** to our goals for effective monitoring, issue resolution, and maintaining accountability.
To consolidate application health data, simplify support and clarify ownership for those on development teams as well as for those in non-engineering roles, we implemented an instance of Backstage as an internal service catalog we call Elevate.
Utilizing Backstage as a framework, Elevate aims to improve quality and domain expertise for all things code and process at Stash. The key to accomplishing this goal is to leverage the processes and integrations we already use at Stash, but centralize and surface the data in a way that is digestible for engineers and non-engineers alike.
For the benefit of a self-managed internal service catalog to outweigh the change in processes and the cost of the catalog's infrastructure, it had to be easy to adopt and have an enlightening effect on teams.
## Ownership visibility
Elevate acts as a centralized hub for registering services, documenting ownership information, and establishing clear accountability. It provides a holistic view of distributed systems and the shared modules and libraries they use by making it easier to track ownership and ensure effective communication and collaboration.
The Backstage [Software Catalog](https://backstage.io/docs/features/software-catalog/) model allows service-level tracking, as well as dashboards for Groups (teams or squads), Systems (business units or focus areas), Domains (organization units) or even company wide.
### Easy adoption and catalog usage
The Backstage open source plugins provide the nuts and bolts for our internal service catalog functionality. Backstage's community plugins assist with the basics of catalog management. They also allow for dynamically changing the type content based on which entry is being viewed in the catalog (library, service, API, team, etc.). Each view can be custom-tailored with the information for that type of entry, which allows for shared libraries to have an overview page focused on getting engineers to documentation; while the overview page for a deployed service can focus on the current incident status and on-call information as the most important thing. The plugin for searching allows for easy discovery of items or documentation throughout the catalog.
###### Example catalog-info.yaml file to add service to Elevate
```yaml
apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
name: your-service
description: Awesome service for awesome things
annotations:
backstage.io/kubernetes-namespace: your-service
datadoghq.com/site: datadoghq.com
datadoghq.com/dashboard-url: https://p.datadoghq.com/some-dashbaord
firehydrant.com/service-name: your-service
jira/project-key: your-jira-project
github.com/project-slug: 'your-org/your-service'
pagerduty.com/service-id: your-pagerduty-service-id
links:
- title: Team Slack Channel
url: https://your-company.slack.com/archives/your-slack-channel-id
type: Slack
icon: chat
- title: Getting started
url: https://github.com/your-org/your-service/blob/main/README.md
type: Readme
icon: github
- title: Confluence
url: https://your-company.atlassian.net/your-docs-page-url
type: Confluence
icon: docs
spec:
type: service
lifecycle: production
owner: your-team
system: your-business-unit
```
### Connecting to subject matter experts
Elevate leverages the CODEOWNERS integration to establish expertise of specific codebases within services and ensure accountability and clarity within the development teams. Codespace ownership is typically defined with required reviewers by code owners and admins that provide additional support, but the CODEOWNERS plugin allows for clarity into who the subject matter expert of the codebase is, not just the administrative owner. The plugin also displays recent changes that have been merged into the codebase, including the authors and approvers of the changes and other valuable metadata.
This improved clarity into contributors and recent contributions can prevent developers and managers from playing telephone when effective communication is crucial to fixing a bug or resolving an incident.
![service code owners](assets/2023-07-08/image5.png)
![recent changes](assets/2023-07-08/image3.png)
_CODEOWNER cards for service ownership and recent changes that appear on a service's overview page._
## Integration with SaaS products
Backstage offers a catalog of integrations with many popular SaaS products. With Elevate, we've integrated plugins for monitoring infrastructure and user experience, visualizing process backlog and bottlenecks, as well as giving insights into data that teams have not yet been able to see for services they support. These integrations allow for seamless data collection and aggregation, transforming Elevate into the centralized hub for application and team health data.
The key to making your service catalog scalable is to ensure you aren't requiring the duplication of data away from its source; Elevate utilizes dashboards and charts to view the data stored in the remote sources. When aggregating DORA metrics we are able to leverage our SaaS tools API within Elevate's service layer to pull data and transform it for our custom dashboards.
### Visible cohesive monitoring
At Stash, we collect performance metrics, resource utilization, and proactive alerts with DataDog and Sentry; these tools can also monitor and track API errors and customer-facing issues that would normally go undetected. To deliver the best possible experience for Stash's customers, engineers need to be able to easily monitor errors on customer devices to solve issues before they are reported.
Sentry's plugin easily surfaces uncaught errors within services. DataDog's plugin allows for plug-and-play visualizations of charts or graphs to help support services, teams and beyond. Elevate integrates these insights to monitor the overall health of the application.
### Centralized incident management
PagerDuty has been Stash's standard for on-call activities and paging while FireHydrant has more recently been adopted as a part of a more comprehensive incident management process. Together, we use these incident management platforms to establish incident response workflows and communication channels dedicated to each service.
PagerDuty's plugin allows for quick reference to the individual who is actively on-call for a service while FireHydrant's plugin lets you track open incidents that may be impacting a service and even trigger new incidents directly from within the service overview page in Elevate. Integrating these plugins allows Elevate to serve as a centralized location for the incident management process, helping our engineers quickly gather the necessary context of an issue and drive faster resolution.
![active incidents](assets/2023-07-08/image1.png)
![pager duty](assets/2023-07-08/image8.png)
_FireHydrant and PagerDuty cards that appear on a service's overview page._
## Infrastructure cost insights across all systems
It's difficult for teams to be more efficient with their infrastructure costs if they are unable to see the problem areas for the services they support, as well as references for effective resource management to model after. The AWS Cost Insights plugin allows Elevate to monitor cost-related metrics and ensure efficient resource allocation and budgeting.
Due to the dynamic nature of how different companies may want to aggregate their cost data, the plugin is mostly frontend visualizations for displaying costs over time with drop-downs for filtering and grouping. In Elevate, we created a custom backend plugin to pull our costs data from AWS and group it properly for presentation to the visualizations.
When we surface this data with the backend layer in Elevate, the frontend is able to surface our AWS cost data to people who previously didn't have access or who found it too difficult to use the more complex AWS Cost Explorer.
In addition to these people now having access to AWS cost data, those with access now get to visualize our spend by AWS product and Stash service. These visualizations are available when looking at a single service, a team or business unit, and organization-wide.
![aws breakdown](assets/2023-07-08/image6.png)
_Breakdown of costs per AWS product for a service._
![aws breakdown by project](assets/2023-07-08/image9.png)
_Breakdown of total costs per service owned by a Team or Business Unit._
![aws breakdown for org](assets/2023-07-08/image4.png)
_Breakdown of total costs per service across the organization._
For those that aren't regularly in AWS Cost Explorer, a benefit of implementing these visualizations is being able to easily see where we have some room for improvement when it comes to tagging our AWS resources. The company-wide breakdown shows all resources, whereas the sub-views rely on resource tagging for service name and team name, so discrepancies may arise which will help you close any gaps in tagging you may have. If resources are not properly tagged, reducing and managing your infrastructure costs will be more time consuming than necessary and much less effective.
## Service, team and organizational health
As mentioned above, gathering DORA metrics provides important insight into the health of applications and teams, but until we built Elevate, we didn't have a hub at Stash to aggregate and present that data in an easily digestible manner.
Elevate's initial DORA metrics implementation reaches out to the source(s) of truth for each metric and groups and surfaces that in a manner similar to the AWS Cost Insights implementation.
**Deployment Frequency** from DataDog “deployment” indicator for each service
**Lead Time for Changes** from GitHub for each repo using commit sha's and releases
**Mean Time to Restore** from FireHydrant using their MTTR API for each service
**Change Failure Rate** from DataDog and FireHydrant for each service
Elevate implemented the above data sources for our DORA metrics MVP as those have been determined as our best practices for where that information should be tracked, for now.
![dora metrics](assets/2023-07-08/image10.png)
_DORA metrics that display on the overview page for each service._
Software development has an ever-changing SaaS landscape, so what serves as a best practice today, may not be in a week, a month or a year from now. The tools we use to facilitate a task or automate processes may change, but the metrics we want to track (DORA and others) are much more stable. Surfacing data in easily consumable views within Elevate has decoupled the tool we use to accomplish a task from where we monitor the health of our system and how that tool assists.
![dora metrics typescript interface](assets/2023-07-08/image7.png)
_An abstracted service layer that is agnostic of data source(s) allows for a stable integration for our frontend dashboards._
![backend interface](assets/2023-07-08/image2.png)
_Separate backend services by metric allow for easy updating for additional or new data sources in the future._
# tl;dr
Monitoring the health of a software application goes beyond surfacing API errors and customer-facing issues. It requires a comprehensive understanding of every facet of a service, including process metrics like DORA, as well as clear ownership of services and processes. By implementing Elevate as an internal developer portal, development teams now have better visibility of ownership in the distributed systems they work in. They also have the benefit of consolidated application health data and other metrics gained from the SaaS products they utilize everyday. This approach ensures a “single pane of glass” for application ownership and health so our teams can focus on building products and features that help our customers invest for a prosperous future.
Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 275 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 239 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 143 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 198 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 204 KiB

+1 -1
View File
@@ -2,7 +2,7 @@
title: k8sgpt
author: suxess-it
authorUrl: https://github.com/suxess-it
category: monitoring
category: Monitoring
description: show all k8sgpt results of the k8sgpt operator related to your entity
documentation: https://github.com/suxess-it/backstage-plugin-k8sgpt/blob/main/README.md
iconUrl: https://raw.githubusercontent.com/k8sgpt-ai/k8sgpt/1a81227d6148be59b7b9ae4e9ae5e2d9a5b7a9ae/images/banner-white.png
+10
View File
@@ -0,0 +1,10 @@
---
title: Kubecost
author: suxess-it
authorUrl: https://github.com/suxess-it
category: Discovery
description: Get cost insights from Kubecost Installation for your k8s deployments
documentation: https://github.com/suxess-it/backstage-plugin-kubecost/blob/main/README.md
iconUrl: https://avatars.githubusercontent.com/u/45108136?s=200&v=4
npmPackageName: '@suxess-it/backstage-plugin-kubecost'
addedDate: '2023-06-29'
+46 -46
View File
@@ -2604,90 +2604,90 @@ __metadata:
languageName: node
linkType: hard
"@swc/core-darwin-arm64@npm:1.3.66":
version: 1.3.66
resolution: "@swc/core-darwin-arm64@npm:1.3.66"
"@swc/core-darwin-arm64@npm:1.3.68":
version: 1.3.68
resolution: "@swc/core-darwin-arm64@npm:1.3.68"
conditions: os=darwin & cpu=arm64
languageName: node
linkType: hard
"@swc/core-darwin-x64@npm:1.3.66":
version: 1.3.66
resolution: "@swc/core-darwin-x64@npm:1.3.66"
"@swc/core-darwin-x64@npm:1.3.68":
version: 1.3.68
resolution: "@swc/core-darwin-x64@npm:1.3.68"
conditions: os=darwin & cpu=x64
languageName: node
linkType: hard
"@swc/core-linux-arm-gnueabihf@npm:1.3.66":
version: 1.3.66
resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.66"
"@swc/core-linux-arm-gnueabihf@npm:1.3.68":
version: 1.3.68
resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.68"
conditions: os=linux & cpu=arm
languageName: node
linkType: hard
"@swc/core-linux-arm64-gnu@npm:1.3.66":
version: 1.3.66
resolution: "@swc/core-linux-arm64-gnu@npm:1.3.66"
"@swc/core-linux-arm64-gnu@npm:1.3.68":
version: 1.3.68
resolution: "@swc/core-linux-arm64-gnu@npm:1.3.68"
conditions: os=linux & cpu=arm64 & libc=glibc
languageName: node
linkType: hard
"@swc/core-linux-arm64-musl@npm:1.3.66":
version: 1.3.66
resolution: "@swc/core-linux-arm64-musl@npm:1.3.66"
"@swc/core-linux-arm64-musl@npm:1.3.68":
version: 1.3.68
resolution: "@swc/core-linux-arm64-musl@npm:1.3.68"
conditions: os=linux & cpu=arm64 & libc=musl
languageName: node
linkType: hard
"@swc/core-linux-x64-gnu@npm:1.3.66":
version: 1.3.66
resolution: "@swc/core-linux-x64-gnu@npm:1.3.66"
"@swc/core-linux-x64-gnu@npm:1.3.68":
version: 1.3.68
resolution: "@swc/core-linux-x64-gnu@npm:1.3.68"
conditions: os=linux & cpu=x64 & libc=glibc
languageName: node
linkType: hard
"@swc/core-linux-x64-musl@npm:1.3.66":
version: 1.3.66
resolution: "@swc/core-linux-x64-musl@npm:1.3.66"
"@swc/core-linux-x64-musl@npm:1.3.68":
version: 1.3.68
resolution: "@swc/core-linux-x64-musl@npm:1.3.68"
conditions: os=linux & cpu=x64 & libc=musl
languageName: node
linkType: hard
"@swc/core-win32-arm64-msvc@npm:1.3.66":
version: 1.3.66
resolution: "@swc/core-win32-arm64-msvc@npm:1.3.66"
"@swc/core-win32-arm64-msvc@npm:1.3.68":
version: 1.3.68
resolution: "@swc/core-win32-arm64-msvc@npm:1.3.68"
conditions: os=win32 & cpu=arm64
languageName: node
linkType: hard
"@swc/core-win32-ia32-msvc@npm:1.3.66":
version: 1.3.66
resolution: "@swc/core-win32-ia32-msvc@npm:1.3.66"
"@swc/core-win32-ia32-msvc@npm:1.3.68":
version: 1.3.68
resolution: "@swc/core-win32-ia32-msvc@npm:1.3.68"
conditions: os=win32 & cpu=ia32
languageName: node
linkType: hard
"@swc/core-win32-x64-msvc@npm:1.3.66":
version: 1.3.66
resolution: "@swc/core-win32-x64-msvc@npm:1.3.66"
"@swc/core-win32-x64-msvc@npm:1.3.68":
version: 1.3.68
resolution: "@swc/core-win32-x64-msvc@npm:1.3.68"
conditions: os=win32 & cpu=x64
languageName: node
linkType: hard
"@swc/core@npm:^1.3.46":
version: 1.3.66
resolution: "@swc/core@npm:1.3.66"
version: 1.3.68
resolution: "@swc/core@npm:1.3.68"
dependencies:
"@swc/core-darwin-arm64": 1.3.66
"@swc/core-darwin-x64": 1.3.66
"@swc/core-linux-arm-gnueabihf": 1.3.66
"@swc/core-linux-arm64-gnu": 1.3.66
"@swc/core-linux-arm64-musl": 1.3.66
"@swc/core-linux-x64-gnu": 1.3.66
"@swc/core-linux-x64-musl": 1.3.66
"@swc/core-win32-arm64-msvc": 1.3.66
"@swc/core-win32-ia32-msvc": 1.3.66
"@swc/core-win32-x64-msvc": 1.3.66
"@swc/core-darwin-arm64": 1.3.68
"@swc/core-darwin-x64": 1.3.68
"@swc/core-linux-arm-gnueabihf": 1.3.68
"@swc/core-linux-arm64-gnu": 1.3.68
"@swc/core-linux-arm64-musl": 1.3.68
"@swc/core-linux-x64-gnu": 1.3.68
"@swc/core-linux-x64-musl": 1.3.68
"@swc/core-win32-arm64-msvc": 1.3.68
"@swc/core-win32-ia32-msvc": 1.3.68
"@swc/core-win32-x64-msvc": 1.3.68
peerDependencies:
"@swc/helpers": ^0.5.0
dependenciesMeta:
@@ -2714,7 +2714,7 @@ __metadata:
peerDependenciesMeta:
"@swc/helpers":
optional: true
checksum: e6029c648ba47c522bed51a9f2fee606f82de1f9233e2e89197e43b0a4867054174ca05e825e688cdc4de332221c0da2e12ba7ba875549e8b5432aa70fe19263
checksum: f56ad1d4cb91f7cc1cb5d4b9894bbb528da0b2eabc98984581f5b3f3187cf2c0d512003880f6ff7a3f6d215b7a3dcbf5a9c45e8a428ac2d711941027c0151d89
languageName: node
linkType: hard
@@ -5028,14 +5028,14 @@ __metadata:
linkType: hard
"docusaurus-plugin-sass@npm:^0.2.3":
version: 0.2.3
resolution: "docusaurus-plugin-sass@npm:0.2.3"
version: 0.2.4
resolution: "docusaurus-plugin-sass@npm:0.2.4"
dependencies:
sass-loader: ^10.1.1
peerDependencies:
"@docusaurus/core": ^2.0.0-beta
sass: ^1.30.0
checksum: 928b02fd7c63835d54cdcce2eeda01cb6124707c6d43ef8e77db06474d3e3b4b7282cc0d88fed378cf1f3db2fc93ba8c11366965bb9b668eae19ca805e578acb
checksum: 10e0c9f519dd7ef4666b1fb82d120738feab03ea451c18bab7f785627887f65b8cb72457065a9b2a2664af1490c20b38df9adf525c1b58ce3e324d2b50412734
languageName: node
linkType: hard
+2 -2
View File
@@ -47,7 +47,7 @@
"@types/react": "^17",
"@types/react-dom": "^17"
},
"version": "1.16.0-next.0",
"version": "1.16.0-next.2",
"dependencies": {
"@backstage/errors": "workspace:^",
"@manypkg/get-packages": "^1.1.3"
@@ -78,7 +78,7 @@
"minimist": "^1.2.5",
"node-gyp": "^9.4.0",
"prettier": "^2.2.1",
"semver": "^7.3.2",
"semver": "^7.5.3",
"shx": "^0.3.2",
"ts-node": "^10.4.0",
"typescript": "~5.0.0"
+26 -4
View File
@@ -1,5 +1,27 @@
# @backstage/app-defaults
## 1.4.1-next.2
### Patch Changes
- Updated dependencies
- @backstage/theme@0.4.1-next.1
- @backstage/core-plugin-api@1.5.3-next.1
- @backstage/core-components@0.13.3-next.2
- @backstage/core-app-api@1.8.2-next.1
- @backstage/plugin-permission-react@0.4.14-next.2
## 1.4.1-next.1
### Patch Changes
- Updated dependencies
- @backstage/theme@0.4.1-next.0
- @backstage/core-components@0.13.3-next.1
- @backstage/core-plugin-api@1.5.3-next.0
- @backstage/core-app-api@1.8.2-next.0
- @backstage/plugin-permission-react@0.4.14-next.1
## 1.4.1-next.0
### Patch Changes
@@ -15,9 +37,9 @@
### Minor Changes
- 1fd38bc4141a: **MUI v5 Support:** Adding platform-wide support for MUI v5 allowing a transition phase for migrating central plugins & components over. We still support v4 instances & plugins by adding a
- 1fd38bc4141a: **Material UI v5 Support:** Adding platform-wide support for Material UI v5 allowing a transition phase for migrating central plugins & components over. We still support v4 instances & plugins by adding a
To allow the future support of plugins & components using MUI v5 you want to upgrade your `AppTheme`'s to using the `UnifiedThemeProvider`
To allow the future support of plugins & components using Material UI v5 you want to upgrade your `AppTheme`'s to using the `UnifiedThemeProvider`
```diff
Provider: ({ children }) => (
@@ -74,9 +96,9 @@
### Minor Changes
- 1fd38bc4141a: **MUI v5 Support:** Adding platform-wide support for MUI v5 allowing a transition phase for migrating central plugins & components over. We still support v4 instances & plugins by adding a
- 1fd38bc4141a: **Material UI v5 Support:** Adding platform-wide support for Material UI v5 allowing a transition phase for migrating central plugins & components over. We still support v4 instances & plugins by adding a
To allow the future support of plugins & components using MUI v5 you want to upgrade your `AppTheme`'s to using the `UnifiedThemeProvider`
To allow the future support of plugins & components using Material UI v5 you want to upgrade your `AppTheme`'s to using the `UnifiedThemeProvider`
```diff
Provider: ({ children }) => (
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/app-defaults",
"description": "Provides the default wiring of a Backstage App",
"version": "1.4.1-next.0",
"version": "1.4.1-next.2",
"publishConfig": {
"access": "public",
"main": "dist/index.esm.js",
+146
View File
@@ -1,5 +1,151 @@
# example-app
## 0.2.85-next.2
### Patch Changes
- Updated dependencies
- @backstage/plugin-search@1.3.3-next.2
- @backstage/plugin-airbrake@0.3.20-next.2
- @backstage/cli@0.22.9-next.1
- @backstage/plugin-catalog-react@1.8.0-next.2
- @backstage/plugin-home@0.5.4-next.2
- @backstage/plugin-cost-insights@0.12.9-next.2
- @backstage/plugin-user-settings@0.7.5-next.2
- @backstage/theme@0.4.1-next.1
- @backstage/core-plugin-api@1.5.3-next.1
- @backstage/core-components@0.13.3-next.2
- @backstage/core-app-api@1.8.2-next.1
- @backstage/plugin-kubernetes@0.9.3-next.2
- @backstage/plugin-adr@0.6.3-next.2
- @backstage/app-defaults@1.4.1-next.2
- @backstage/catalog-model@1.4.1-next.0
- @backstage/config@1.0.8
- @backstage/integration-react@1.1.15-next.2
- @backstage/plugin-apache-airflow@0.2.13-next.2
- @backstage/plugin-api-docs@0.9.6-next.2
- @backstage/plugin-azure-devops@0.3.2-next.2
- @backstage/plugin-azure-sites@0.1.9-next.2
- @backstage/plugin-badges@0.2.44-next.2
- @backstage/plugin-catalog-common@1.0.15-next.0
- @backstage/plugin-catalog-graph@0.2.32-next.2
- @backstage/plugin-catalog-import@0.9.10-next.2
- @backstage/plugin-catalog-unprocessed-entities@0.1.1-next.2
- @backstage/plugin-circleci@0.3.20-next.2
- @backstage/plugin-cloudbuild@0.3.20-next.2
- @backstage/plugin-code-coverage@0.2.13-next.2
- @backstage/plugin-devtools@0.1.2-next.2
- @backstage/plugin-dynatrace@7.0.0-next.2
- @backstage/plugin-entity-feedback@0.2.3-next.2
- @backstage/plugin-explore@0.4.6-next.2
- @backstage/plugin-gcalendar@0.3.16-next.2
- @backstage/plugin-gcp-projects@0.3.39-next.2
- @backstage/plugin-github-actions@0.6.1-next.2
- @backstage/plugin-gocd@0.1.26-next.2
- @backstage/plugin-graphiql@0.2.52-next.2
- @backstage/plugin-jenkins@0.8.2-next.2
- @backstage/plugin-kafka@0.3.20-next.2
- @backstage/plugin-lighthouse@0.4.5-next.2
- @backstage/plugin-linguist@0.1.5-next.2
- @backstage/plugin-linguist-common@0.1.0
- @backstage/plugin-microsoft-calendar@0.1.5-next.2
- @backstage/plugin-newrelic@0.3.38-next.2
- @backstage/plugin-newrelic-dashboard@0.2.13-next.2
- @backstage/plugin-nomad@0.1.1-next.2
- @backstage/plugin-octopus-deploy@0.2.2-next.2
- @backstage/plugin-org@0.6.10-next.2
- @backstage/plugin-pagerduty@0.6.1-next.2
- @backstage/plugin-permission-react@0.4.14-next.2
- @backstage/plugin-playlist@0.1.12-next.2
- @backstage/plugin-puppetdb@0.1.3-next.2
- @backstage/plugin-rollbar@0.4.20-next.2
- @backstage/plugin-scaffolder@1.14.1-next.2
- @backstage/plugin-scaffolder-react@1.5.1-next.2
- @backstage/plugin-search-common@1.2.5-next.0
- @backstage/plugin-search-react@1.6.3-next.2
- @backstage/plugin-sentry@0.5.5-next.2
- @backstage/plugin-shortcuts@0.3.12-next.2
- @backstage/plugin-stack-overflow@0.1.18-next.2
- @backstage/plugin-stackstorm@0.1.4-next.2
- @backstage/plugin-tech-insights@0.3.12-next.2
- @backstage/plugin-tech-radar@0.6.6-next.2
- @backstage/plugin-techdocs@1.6.5-next.2
- @backstage/plugin-techdocs-module-addons-contrib@1.0.15-next.2
- @backstage/plugin-techdocs-react@1.1.8-next.2
- @backstage/plugin-todo@0.2.22-next.2
- @internal/plugin-catalog-customized@0.0.12-next.2
## 0.2.85-next.1
### Patch Changes
- Updated dependencies
- @backstage/theme@0.4.1-next.0
- @backstage/plugin-scaffolder-react@1.5.1-next.1
- @backstage/plugin-lighthouse@0.4.5-next.1
- @backstage/plugin-catalog-import@0.9.10-next.1
- @backstage/core-components@0.13.3-next.1
- @backstage/plugin-kubernetes@0.9.3-next.1
- @backstage/plugin-catalog-unprocessed-entities@0.1.1-next.1
- @backstage/plugin-home@0.5.4-next.1
- @backstage/core-plugin-api@1.5.3-next.0
- @backstage/app-defaults@1.4.1-next.1
- @backstage/cli@0.22.9-next.0
- @backstage/integration-react@1.1.15-next.1
- @backstage/plugin-adr@0.6.3-next.1
- @backstage/plugin-airbrake@0.3.20-next.1
- @backstage/plugin-api-docs@0.9.6-next.1
- @backstage/plugin-azure-devops@0.3.2-next.1
- @backstage/plugin-azure-sites@0.1.9-next.1
- @backstage/plugin-badges@0.2.44-next.1
- @backstage/plugin-catalog-graph@0.2.32-next.1
- @backstage/plugin-catalog-react@1.7.1-next.1
- @backstage/plugin-circleci@0.3.20-next.1
- @backstage/plugin-cloudbuild@0.3.20-next.1
- @backstage/plugin-code-coverage@0.2.13-next.1
- @backstage/plugin-cost-insights@0.12.9-next.1
- @backstage/plugin-devtools@0.1.2-next.1
- @backstage/plugin-dynatrace@6.0.1-next.1
- @backstage/plugin-entity-feedback@0.2.3-next.1
- @backstage/plugin-explore@0.4.6-next.1
- @backstage/plugin-gcalendar@0.3.16-next.1
- @backstage/plugin-gcp-projects@0.3.39-next.1
- @backstage/plugin-github-actions@0.6.1-next.1
- @backstage/plugin-gocd@0.1.26-next.1
- @backstage/plugin-graphiql@0.2.52-next.1
- @backstage/plugin-jenkins@0.8.2-next.1
- @backstage/plugin-kafka@0.3.20-next.1
- @backstage/plugin-linguist@0.1.5-next.1
- @backstage/plugin-microsoft-calendar@0.1.5-next.1
- @backstage/plugin-newrelic@0.3.38-next.1
- @backstage/plugin-nomad@0.1.1-next.1
- @backstage/plugin-octopus-deploy@0.2.2-next.1
- @backstage/plugin-org@0.6.10-next.1
- @backstage/plugin-pagerduty@0.6.1-next.1
- @backstage/plugin-playlist@0.1.12-next.1
- @backstage/plugin-puppetdb@0.1.3-next.1
- @backstage/plugin-rollbar@0.4.20-next.1
- @backstage/plugin-scaffolder@1.14.1-next.1
- @backstage/plugin-search@1.3.3-next.1
- @backstage/plugin-search-react@1.6.3-next.1
- @backstage/plugin-sentry@0.5.5-next.1
- @backstage/plugin-shortcuts@0.3.12-next.1
- @backstage/plugin-stack-overflow@0.1.18-next.1
- @backstage/plugin-stackstorm@0.1.4-next.1
- @backstage/plugin-tech-insights@0.3.12-next.1
- @backstage/plugin-tech-radar@0.6.6-next.1
- @backstage/plugin-techdocs@1.6.5-next.1
- @backstage/plugin-techdocs-module-addons-contrib@1.0.15-next.1
- @backstage/plugin-techdocs-react@1.1.8-next.1
- @backstage/plugin-todo@0.2.22-next.1
- @backstage/plugin-user-settings@0.7.5-next.1
- @backstage/plugin-apache-airflow@0.2.13-next.1
- @backstage/plugin-newrelic-dashboard@0.2.13-next.1
- @internal/plugin-catalog-customized@0.0.12-next.1
- @backstage/core-app-api@1.8.2-next.0
- @backstage/plugin-permission-react@0.4.14-next.1
- @backstage/config@1.0.8
## 0.2.85-next.0
### Patch Changes
+1 -1
View File
@@ -5,7 +5,7 @@
"jest/expect-expect": [
"error",
{
"assertFunctionNames": ["expect", "cy.contains"]
"assertFunctionNames": ["expect", "cy.contains", "cy.**.should"]
}
]
}
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "example-app",
"version": "0.2.85-next.0",
"version": "0.2.85-next.2",
"private": true,
"backstage": {
"role": "frontend"
@@ -66,6 +66,8 @@ import {
isKind,
isOrphan,
hasLabels,
hasRelationWarnings,
EntityRelationWarning,
} from '@internal/plugin-catalog-customized';
import {
Direction,
@@ -328,6 +330,14 @@ const entityWarningContent = (
</EntitySwitch.Case>
</EntitySwitch>
<EntitySwitch>
<EntitySwitch.Case if={hasRelationWarnings}>
<Grid item xs={12}>
<EntityRelationWarning />
</Grid>
</EntitySwitch.Case>
</EntitySwitch>
<EntitySwitch>
<EntitySwitch.Case if={hasCatalogProcessingErrors}>
<Grid item xs={12}>
+41
View File
@@ -1,5 +1,46 @@
# example-backend-next
## 0.0.13-next.2
### Patch Changes
- Updated dependencies
- @backstage/plugin-devtools-backend@0.1.2-next.2
- @backstage/plugin-scaffolder-backend@1.15.1-next.1
- @backstage/plugin-kubernetes-backend@0.11.2-next.2
- @backstage/plugin-adr-backend@0.3.5-next.1
- @backstage/backend-defaults@0.1.12-next.0
- @backstage/backend-tasks@0.5.4-next.0
- @backstage/plugin-app-backend@0.3.47-next.0
- @backstage/plugin-auth-node@0.2.16-next.0
- @backstage/plugin-azure-devops-backend@0.3.26-next.1
- @backstage/plugin-badges-backend@0.2.2-next.1
- @backstage/plugin-catalog-backend@1.11.0-next.0
- @backstage/plugin-catalog-backend-module-unprocessed@0.1.1-next.0
- @backstage/plugin-entity-feedback-backend@0.1.5-next.0
- @backstage/plugin-linguist-backend@0.3.1-next.1
- @backstage/plugin-permission-backend@0.5.22-next.0
- @backstage/plugin-permission-common@0.7.7-next.0
- @backstage/plugin-permission-node@0.7.10-next.0
- @backstage/plugin-search-backend@1.3.3-next.0
- @backstage/plugin-search-backend-module-catalog@0.1.3-next.0
- @backstage/plugin-search-backend-module-explore@0.1.3-next.0
- @backstage/plugin-search-backend-module-techdocs@0.1.3-next.0
- @backstage/plugin-search-backend-node@1.2.3-next.0
- @backstage/plugin-techdocs-backend@1.6.4-next.0
- @backstage/plugin-todo-backend@0.1.44-next.0
## 0.0.13-next.1
### Patch Changes
- Updated dependencies
- @backstage/plugin-kubernetes-backend@0.11.2-next.1
- @backstage/plugin-badges-backend@0.2.2-next.1
- @backstage/plugin-azure-devops-backend@0.3.26-next.1
- @backstage/plugin-devtools-backend@0.1.2-next.1
- @backstage/plugin-linguist-backend@0.3.1-next.1
## 0.0.13-next.0
### Patch Changes
+2 -1
View File
@@ -1,6 +1,6 @@
{
"name": "example-backend-next",
"version": "0.0.13-next.0",
"version": "0.0.13-next.2",
"main": "dist/index.cjs.js",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -27,6 +27,7 @@
"dependencies": {
"@backstage/backend-defaults": "workspace:^",
"@backstage/backend-tasks": "workspace:^",
"@backstage/plugin-adr-backend": "workspace:^",
"@backstage/plugin-app-backend": "workspace:^",
"@backstage/plugin-auth-node": "workspace:^",
"@backstage/plugin-azure-devops-backend": "workspace:^",
+3
View File
@@ -37,6 +37,7 @@ import { azureDevOpsPlugin } from '@backstage/plugin-azure-devops-backend';
import { linguistPlugin } from '@backstage/plugin-linguist-backend';
import { devtoolsPlugin } from '@backstage/plugin-devtools-backend';
import { TaskScheduleDefinition } from '@backstage/backend-tasks';
import { adrPlugin } from '@backstage/plugin-adr-backend';
const backend = createBackend();
@@ -73,6 +74,8 @@ backend.add(
// Todo
backend.add(todoPlugin());
backend.add(adrPlugin());
// Techdocs
backend.add(techdocsPlugin());
+69
View File
@@ -1,5 +1,74 @@
# example-backend
## 0.2.85-next.2
### Patch Changes
- Updated dependencies
- @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.0-next.1
- @backstage/plugin-devtools-backend@0.1.2-next.2
- @backstage/plugin-tech-insights-backend@0.5.13-next.1
- @backstage/plugin-scaffolder-backend@1.15.1-next.1
- @backstage/plugin-kubernetes-backend@0.11.2-next.2
- @backstage/plugin-adr-backend@0.3.5-next.1
- example-app@0.2.85-next.2
- @backstage/backend-common@0.19.1-next.0
- @backstage/backend-tasks@0.5.4-next.0
- @backstage/catalog-client@1.4.3-next.0
- @backstage/catalog-model@1.4.1-next.0
- @backstage/config@1.0.8
- @backstage/integration@1.5.1-next.0
- @backstage/plugin-app-backend@0.3.47-next.0
- @backstage/plugin-auth-backend@0.18.5-next.1
- @backstage/plugin-auth-node@0.2.16-next.0
- @backstage/plugin-azure-devops-backend@0.3.26-next.1
- @backstage/plugin-azure-sites-backend@0.1.9-next.0
- @backstage/plugin-badges-backend@0.2.2-next.1
- @backstage/plugin-catalog-backend@1.11.0-next.0
- @backstage/plugin-catalog-backend-module-unprocessed@0.1.1-next.0
- @backstage/plugin-catalog-node@1.4.0-next.0
- @backstage/plugin-code-coverage-backend@0.2.13-next.0
- @backstage/plugin-entity-feedback-backend@0.1.5-next.0
- @backstage/plugin-events-backend@0.2.8-next.0
- @backstage/plugin-events-node@0.2.8-next.0
- @backstage/plugin-explore-backend@0.0.9-next.0
- @backstage/plugin-graphql-backend@0.1.37-next.0
- @backstage/plugin-jenkins-backend@0.2.2-next.0
- @backstage/plugin-kafka-backend@0.2.40-next.0
- @backstage/plugin-lighthouse-backend@0.2.3-next.0
- @backstage/plugin-linguist-backend@0.3.1-next.1
- @backstage/plugin-nomad-backend@0.1.1-next.0
- @backstage/plugin-permission-backend@0.5.22-next.0
- @backstage/plugin-permission-common@0.7.7-next.0
- @backstage/plugin-permission-node@0.7.10-next.0
- @backstage/plugin-playlist-backend@0.3.3-next.0
- @backstage/plugin-proxy-backend@0.2.41-next.0
- @backstage/plugin-rollbar-backend@0.1.44-next.0
- @backstage/plugin-scaffolder-backend-module-rails@0.4.16-next.1
- @backstage/plugin-search-backend@1.3.3-next.0
- @backstage/plugin-search-backend-module-elasticsearch@1.3.2-next.0
- @backstage/plugin-search-backend-module-pg@0.5.8-next.0
- @backstage/plugin-search-backend-node@1.2.3-next.0
- @backstage/plugin-search-common@1.2.5-next.0
- @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.31-next.0
- @backstage/plugin-tech-insights-node@0.4.5-next.0
- @backstage/plugin-techdocs-backend@1.6.4-next.0
- @backstage/plugin-todo-backend@0.1.44-next.0
## 0.2.85-next.1
### Patch Changes
- Updated dependencies
- @backstage/plugin-kubernetes-backend@0.11.2-next.1
- @backstage/plugin-badges-backend@0.2.2-next.1
- @backstage/plugin-azure-devops-backend@0.3.26-next.1
- @backstage/plugin-devtools-backend@0.1.2-next.1
- @backstage/plugin-linguist-backend@0.3.1-next.1
- @backstage/plugin-auth-backend@0.18.5-next.1
- example-app@0.2.85-next.1
- @backstage/config@1.0.8
## 0.2.85-next.0
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "example-backend",
"version": "0.2.85-next.0",
"version": "0.2.85-next.2",
"main": "dist/index.cjs.js",
"types": "src/index.ts",
"license": "Apache-2.0",
+10
View File
@@ -1,5 +1,15 @@
# @backstage/cli-node
## 0.1.2-next.1
### Patch Changes
- 4edd1ef71453: semver upgrade to 7.5.3
- Updated dependencies
- @backstage/cli-common@0.1.12
- @backstage/errors@1.2.1-next.0
- @backstage/types@1.1.0
## 0.1.2-next.0
### Patch Changes
+2 -2
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/cli-node",
"description": "Node.js library for Backstage CLIs",
"version": "0.1.2-next.0",
"version": "0.1.2-next.1",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -28,7 +28,7 @@
"@manypkg/get-packages": "^1.1.3",
"@yarnpkg/parsers": "^3.0.0-rc.4",
"fs-extra": "10.1.0",
"semver": "^7.3.2",
"semver": "^7.5.3",
"zod": "^3.21.4"
},
"devDependencies": {
+21 -2
View File
@@ -1,5 +1,24 @@
# @backstage/cli
## 0.22.9-next.1
### Patch Changes
- 4edd1ef71453: semver upgrade to 7.5.3
- ff45cb559e49: Updated dependency `esbuild` to `^0.18.0`.
- 8174cf4c0edf: Fixing MUI / Material UI references
- Updated dependencies
- @backstage/cli-node@0.1.2-next.1
- @backstage/catalog-model@1.4.1-next.0
- @backstage/cli-common@0.1.12
- @backstage/config@1.0.8
- @backstage/config-loader@1.3.2-next.0
- @backstage/errors@1.2.1-next.0
- @backstage/eslint-plugin@0.1.3
- @backstage/integration@1.5.1-next.0
- @backstage/release-manifests@0.0.9
- @backstage/types@1.1.0
## 0.22.9-next.0
### Patch Changes
@@ -26,7 +45,7 @@
- 75540599124a: Updated example component for a newly scaffolded app.
- 5d692f72ebfb: Make sure to include a `fetch` environment for `jsdom` in `jest` tests
- 6816352500a7: Add discovery feature to the onboard cli command.
- 20b7da6f1311: Enforcing MUI v5 specific linting to minimize bundle size.
- 20b7da6f1311: Enforcing Material UI v5 specific linting to minimize bundle size.
- Updated dependencies
- @backstage/types@1.1.0
- @backstage/config-loader@1.3.1
@@ -77,7 +96,7 @@
### Patch Changes
- 20b7da6f1311: Enforcing MUI v5 specific linting to minimize bundle size.
- 20b7da6f1311: Enforcing Material UI v5 specific linting to minimize bundle size.
- Updated dependencies
- @backstage/config-loader@1.3.1-next.0
- @backstage/config@1.0.7
+1 -1
View File
@@ -203,7 +203,7 @@ function createConfigForRole(dir, role, extraConfig = {}) {
},
restrictedImports: [
{
// Importing the entire MUI icons packages impedes build performance as the list of icons is huge.
// Importing the entire Material UI icons packages impedes build performance as the list of icons is huge.
name: '@material-ui/icons',
message: "Please import '@material-ui/icons/<Icon>' instead.",
},
+3 -3
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/cli",
"description": "CLI for developing Backstage plugins and apps",
"version": "0.22.9-next.0",
"version": "0.22.9-next.1",
"publishConfig": {
"access": "public"
},
@@ -78,7 +78,7 @@
"cross-spawn": "^7.0.3",
"css-loader": "^6.5.1",
"diff": "^5.0.0",
"esbuild": "^0.17.0",
"esbuild": "^0.18.0",
"esbuild-loader": "^2.18.0",
"eslint": "^8.6.0",
"eslint-config-prettier": "^8.3.0",
@@ -123,7 +123,7 @@
"rollup-plugin-postcss": "^4.0.0",
"rollup-pluginutils": "^2.8.2",
"run-script-webpack-plugin": "^0.1.0",
"semver": "^7.3.2",
"semver": "^7.5.3",
"style-loader": "^3.3.1",
"sucrase": "^3.20.2",
"swc-loader": "^0.2.3",
@@ -40,7 +40,7 @@ export async function buildTypeDefinitionsWorker(
const { Extractor, ExtractorConfig, CompilerState } = apiExtractor;
/**
* All of this monkey patching below is because MUI has these bare package.json file as a method
* All of this monkey patching below is because Material UI has these bare package.json file as a method
* for making TypeScript accept imports like `@material-ui/core/Button`, and improve tree-shaking
* by declaring them side effect free.
*

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