diff --git a/.changeset/angry-badgers-beg.md b/.changeset/angry-badgers-beg.md
new file mode 100644
index 0000000000..38952aef98
--- /dev/null
+++ b/.changeset/angry-badgers-beg.md
@@ -0,0 +1,5 @@
+---
+'@backstage/frontend-app-api': patch
+---
+
+Internal update for removal of experimental plugin configuration API.
diff --git a/.changeset/calm-scissors-rescue.md b/.changeset/calm-scissors-rescue.md
new file mode 100644
index 0000000000..4a5318d240
--- /dev/null
+++ b/.changeset/calm-scissors-rescue.md
@@ -0,0 +1,5 @@
+---
+'@backstage/create-app': patch
+---
+
+Create unique temp directory for each `create-app` execution.
diff --git a/.changeset/clean-forks-love.md b/.changeset/clean-forks-love.md
new file mode 100644
index 0000000000..f81fe3066b
--- /dev/null
+++ b/.changeset/clean-forks-love.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-sonarqube-backend': patch
+---
+
+Added support for the [new backend system](https://backstage.io/docs/backend-system/)
diff --git a/.changeset/dull-dolls-explode.md b/.changeset/dull-dolls-explode.md
new file mode 100644
index 0000000000..10088e0818
--- /dev/null
+++ b/.changeset/dull-dolls-explode.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-playlist-backend': patch
+---
+
+Added support to the playlist plugin for the new backend
diff --git a/.changeset/eighty-actors-type.md b/.changeset/eighty-actors-type.md
new file mode 100644
index 0000000000..5c55a7b0c6
--- /dev/null
+++ b/.changeset/eighty-actors-type.md
@@ -0,0 +1,5 @@
+---
+'@backstage/test-utils': patch
+---
+
+Removed the alpha `MockPluginProvider` export since the plugin configuration API has been removed.
diff --git a/.changeset/four-onions-clap.md b/.changeset/four-onions-clap.md
new file mode 100644
index 0000000000..44d0cf9ae7
--- /dev/null
+++ b/.changeset/four-onions-clap.md
@@ -0,0 +1,5 @@
+---
+'@backstage/cli': patch
+---
+
+Fix for the new backend `start` command to make it work on Windows.
diff --git a/.changeset/fresh-kangaroos-tap.md b/.changeset/fresh-kangaroos-tap.md
new file mode 100644
index 0000000000..5ac4d184eb
--- /dev/null
+++ b/.changeset/fresh-kangaroos-tap.md
@@ -0,0 +1,5 @@
+---
+'@backstage/core-plugin-api': minor
+---
+
+Removed the exprimental plugin configuration API. The `__experimentalReconfigure()` from the plugin options as well as the `__experimentalConfigure()` method on plugin instances have both been removed.
diff --git a/.changeset/gentle-elephants-fold.md b/.changeset/gentle-elephants-fold.md
new file mode 100644
index 0000000000..480ee41e7a
--- /dev/null
+++ b/.changeset/gentle-elephants-fold.md
@@ -0,0 +1,20 @@
+---
+'@backstage/plugin-catalog': minor
+---
+
+The catalog plugin no longer implements the experimental reconfiguration API. The create button title can now instead be configured using the new experimental internationalization API, via the `catalogTranslationRef` exported at `/alpha`. For example:
+
+```ts
+import { catalogTranslationRef } from '@backstage/plugin-catalog/alpha';
+
+const app = createApp({
+ __experimentalTranslations: {
+ resources: [
+ createTranslationMessages({
+ ref: catalogTranslationRef,
+ catalog_page_create_button_title: 'Create Software',
+ }),
+ ],
+ },
+});
+```
diff --git a/.changeset/itchy-rabbits-exist.md b/.changeset/itchy-rabbits-exist.md
new file mode 100644
index 0000000000..acac771a97
--- /dev/null
+++ b/.changeset/itchy-rabbits-exist.md
@@ -0,0 +1,7 @@
+---
+'@backstage/cli': minor
+---
+
+The new backend start command that used to be enabled by setting `EXPERIMENTAL_BACKEND_START` is now the default. To revert to the old behavior, set `LEGACY_BACKEND_START` instead.
+
+This new command is no longer based on Webpack, but instead uses Node.js loaders to transpile on the fly. Rather than hot reloading modules the entire backend is now restarted on change, but the SQLite database state is still maintained across restarts via a parent process.
diff --git a/.changeset/lemon-cups-wait.md b/.changeset/lemon-cups-wait.md
new file mode 100644
index 0000000000..4dd08c21b0
--- /dev/null
+++ b/.changeset/lemon-cups-wait.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-catalog': minor
+---
+
+include owner chip in catalog search result item
diff --git a/.changeset/lovely-coins-occur.md b/.changeset/lovely-coins-occur.md
new file mode 100644
index 0000000000..34a6774388
--- /dev/null
+++ b/.changeset/lovely-coins-occur.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-catalog-backend': patch
+---
+
+Fixes a bug where eagerly deleted entities did not properly trigger re-stitching of entities that they had relations to.
diff --git a/.changeset/lovely-fans-sniff.md b/.changeset/lovely-fans-sniff.md
new file mode 100644
index 0000000000..af8aebb89b
--- /dev/null
+++ b/.changeset/lovely-fans-sniff.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-tech-radar': patch
+---
+
+Added experimental support for the declarative integration.
diff --git a/.changeset/many-swans-eat.md b/.changeset/many-swans-eat.md
new file mode 100644
index 0000000000..86580d7cfe
--- /dev/null
+++ b/.changeset/many-swans-eat.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-badges-backend': patch
+---
+
+Make sure the default badge factory is used if nothing is defined
diff --git a/.changeset/nice-clocks-smash.md b/.changeset/nice-clocks-smash.md
new file mode 100644
index 0000000000..8a289370e5
--- /dev/null
+++ b/.changeset/nice-clocks-smash.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-tech-insights-backend': patch
+---
+
+Increase the maximum allowed length of an entity filter for tech insights fact schemas.
diff --git a/.changeset/nice-dancers-explain.md b/.changeset/nice-dancers-explain.md
new file mode 100644
index 0000000000..5e54a66c05
--- /dev/null
+++ b/.changeset/nice-dancers-explain.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-auth-backend-module-github-provider': patch
+---
+
+Fixed a bug where the GitHub authenticator did not properly persist granted OAuth scopes.
diff --git a/.changeset/plenty-llamas-double.md b/.changeset/plenty-llamas-double.md
new file mode 100644
index 0000000000..b2691a2f17
--- /dev/null
+++ b/.changeset/plenty-llamas-double.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-auth-node': patch
+---
+
+Fix for persisted scopes not being properly restored on sign-in.
diff --git a/.changeset/polite-cooks-perform.md b/.changeset/polite-cooks-perform.md
new file mode 100644
index 0000000000..40766c84a3
--- /dev/null
+++ b/.changeset/polite-cooks-perform.md
@@ -0,0 +1,5 @@
+---
+'@backstage/frontend-app-api': minor
+---
+
+The `createApp` config option has been replaced by a new `configLoader` option. There is now also a `pluginLoader` option that can be used to dynamically load plugins into the app.
diff --git a/.changeset/polite-donuts-fail.md b/.changeset/polite-donuts-fail.md
new file mode 100644
index 0000000000..9c03faaf44
--- /dev/null
+++ b/.changeset/polite-donuts-fail.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-catalog-backend': patch
+---
+
+Internal refactors, laying the foundation for later introducing deferred stitching (see #18062).
diff --git a/.changeset/pre.json b/.changeset/pre.json
index 63e218f886..46230574ed 100644
--- a/.changeset/pre.json
+++ b/.changeset/pre.json
@@ -244,7 +244,54 @@
"@backstage/plugin-user-settings-backend": "0.2.1",
"@backstage/plugin-vault": "0.1.19",
"@backstage/plugin-vault-backend": "0.3.8",
- "@backstage/plugin-xcmetrics": "0.2.43"
+ "@backstage/plugin-xcmetrics": "0.2.43",
+ "@backstage/e2e-test-utils": "0.0.0"
},
- "changesets": []
+ "changesets": [
+ "angry-badgers-beg",
+ "big-spies-beam",
+ "calm-scissors-rescue",
+ "chatty-papayas-care",
+ "clean-forks-love",
+ "dull-bugs-build",
+ "dull-dolls-explode",
+ "dull-experts-kiss",
+ "dull-laws-camp",
+ "eighty-actors-type",
+ "four-jars-protect",
+ "four-onions-clap",
+ "fresh-kangaroos-tap",
+ "gentle-elephants-fold",
+ "gentle-spies-deny",
+ "itchy-rabbits-exist",
+ "large-comics-knock",
+ "lemon-cups-wait",
+ "lovely-coins-occur",
+ "lovely-fans-sniff",
+ "moody-lobsters-rescue",
+ "nice-clocks-smash",
+ "nice-dancers-explain",
+ "perfect-pumas-protect",
+ "plenty-llamas-double",
+ "polite-cooks-perform",
+ "polite-donuts-fail",
+ "pretty-apes-sneeze",
+ "pretty-steaks-serve",
+ "purple-chefs-wait",
+ "quick-weeks-explode",
+ "shy-clouds-reflect",
+ "silent-years-bake",
+ "small-pugs-build",
+ "spotty-badgers-wash",
+ "stupid-eagles-shave",
+ "tasty-doors-switch",
+ "ten-seals-wait",
+ "thirty-coins-sneeze",
+ "tiny-garlics-cheer",
+ "twelve-clouds-design",
+ "wet-olives-wave",
+ "wet-timers-chew",
+ "wild-jobs-greet",
+ "yellow-rings-invent"
+ ]
}
diff --git a/.changeset/pretty-apes-sneeze.md b/.changeset/pretty-apes-sneeze.md
new file mode 100644
index 0000000000..a1008dc951
--- /dev/null
+++ b/.changeset/pretty-apes-sneeze.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-user-settings': patch
+---
+
+Fixed a bug where the theme icons would not be colored according to their active state.
diff --git a/.changeset/purple-chefs-wait.md b/.changeset/purple-chefs-wait.md
new file mode 100644
index 0000000000..9a8b1f9799
--- /dev/null
+++ b/.changeset/purple-chefs-wait.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-api-docs': patch
+---
+
+Adding `requestInterceptor` option to `api-docs` and pass it to SwaggerUI. This will enable to configure a proxy or headers to be sent to all the request made through the `Try it out` button on SwaggerUI.
diff --git a/.changeset/shy-clouds-reflect.md b/.changeset/shy-clouds-reflect.md
new file mode 100644
index 0000000000..2861bad9f3
--- /dev/null
+++ b/.changeset/shy-clouds-reflect.md
@@ -0,0 +1,5 @@
+---
+'@backstage/config-loader': patch
+---
+
+The `FileConfigSource` will now retry file reading after a short delay if it reads an empty file. This is to avoid flakiness during watch mode where change events can trigger before the file content has been written.
diff --git a/.changeset/spicy-chairs-film.md b/.changeset/spicy-chairs-film.md
new file mode 100644
index 0000000000..475d786330
--- /dev/null
+++ b/.changeset/spicy-chairs-film.md
@@ -0,0 +1,7 @@
+---
+'@backstage/plugin-kubernetes-common': minor
+'@backstage/plugin-kubernetes-react': minor
+'@backstage/plugin-kubernetes': minor
+---
+
+Refactor Kubernetes plugins in line with ADR 11, no breaking changes yet
diff --git a/.changeset/spotty-badgers-wash.md b/.changeset/spotty-badgers-wash.md
new file mode 100644
index 0000000000..1ce9c66aee
--- /dev/null
+++ b/.changeset/spotty-badgers-wash.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-catalog-backend': minor
+---
+
+Instrumenting some missing metrics with `OpenTelemetry`
diff --git a/.changeset/stupid-drinks-trade.md b/.changeset/stupid-drinks-trade.md
new file mode 100644
index 0000000000..a9eeacec8a
--- /dev/null
+++ b/.changeset/stupid-drinks-trade.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-techdocs': patch
+---
+
+Add kind column by default to TechDocsTable
diff --git a/.changeset/stupid-eagles-shave.md b/.changeset/stupid-eagles-shave.md
new file mode 100644
index 0000000000..9bd88290ee
--- /dev/null
+++ b/.changeset/stupid-eagles-shave.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-code-coverage': patch
+---
+
+Updated layout to improve contrasts and consistency with other plugins
diff --git a/.changeset/ten-seals-wait.md b/.changeset/ten-seals-wait.md
new file mode 100644
index 0000000000..780422449c
--- /dev/null
+++ b/.changeset/ten-seals-wait.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-cost-insights': patch
+---
+
+The experimental plugin configuration has been removed. The trend line can now instead be hidden by setting `costInsights.hideTrendLine` to `true` in the configuration.
diff --git a/.changeset/thirty-coins-sneeze.md b/.changeset/thirty-coins-sneeze.md
new file mode 100644
index 0000000000..58a93065b8
--- /dev/null
+++ b/.changeset/thirty-coins-sneeze.md
@@ -0,0 +1,5 @@
+---
+'@backstage/e2e-test-utils': minor
+---
+
+Initial release.
diff --git a/.changeset/tiny-garlics-cheer.md b/.changeset/tiny-garlics-cheer.md
new file mode 100644
index 0000000000..992ed7f007
--- /dev/null
+++ b/.changeset/tiny-garlics-cheer.md
@@ -0,0 +1,5 @@
+---
+'@techdocs/cli': patch
+---
+
+Restructured tests.
diff --git a/.changeset/twelve-clouds-design.md b/.changeset/twelve-clouds-design.md
new file mode 100644
index 0000000000..d71d6caec0
--- /dev/null
+++ b/.changeset/twelve-clouds-design.md
@@ -0,0 +1,9 @@
+---
+'@backstage/create-app': patch
+---
+
+The E2E test setup based on Cypress has been replaced with one based on [Playwright](https://playwright.dev/). Migrating existing apps is not required as this is a standalone setup, only do so if you also want to switch from Cypress to Playwright.
+
+The scripts to run the E2E tests have been removed from `packages/app/package.json`, as they are now instead run from the root. Instead, a new script has been added to the root `package.json`, `yarn test:e2e`, which runs the E2E tests in development mode, unless `CI` is set in the environment.
+
+The Playwright setup uses utilities from the new `@backstage/e2e-test-utils` package to find and include all packages in the monorepo that have an `e2e-tests` folder.
diff --git a/.changeset/wet-olives-wave.md b/.changeset/wet-olives-wave.md
new file mode 100644
index 0000000000..5b35e0ad90
--- /dev/null
+++ b/.changeset/wet-olives-wave.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-api-docs': patch
+---
+
+added aria-label on api definition button for better a11y.
diff --git a/.changeset/wet-timers-chew.md b/.changeset/wet-timers-chew.md
new file mode 100644
index 0000000000..3be6368331
--- /dev/null
+++ b/.changeset/wet-timers-chew.md
@@ -0,0 +1,5 @@
+---
+'@backstage/backend-common': patch
+---
+
+The `useHotCleanup` and `useHotMemoize` helpers are now deprecated, since hot module reloads for backend are being phased out.
diff --git a/.changeset/yellow-rings-invent.md b/.changeset/yellow-rings-invent.md
new file mode 100644
index 0000000000..f0335ff492
--- /dev/null
+++ b/.changeset/yellow-rings-invent.md
@@ -0,0 +1,5 @@
+---
+'@backstage/core-components': patch
+---
+
+MissingAnnotationEmptyState component can now dynamically generate a YAML example based off the current entity being used.
diff --git a/.dockerignore b/.dockerignore
index e43b5fab1e..78aa97942d 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -2,7 +2,6 @@
.yarn/cache
.yarn/install-state.gz
docs
-cypress
microsite
node_modules
packages/*/src
diff --git a/.eslintignore b/.eslintignore
index 46bb1ad2b2..5ccd2d1ba0 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -9,3 +9,4 @@
**/microsite/**
**/templates/**
**/sample-templates/**
+playwright.config.ts
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index aa2c7d3b7f..cb8101e1b1 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -8,7 +8,6 @@
yarn.lock @backstage/maintainers @backstage-service
*/yarn.lock @backstage/maintainers @backstage-service
/.changeset/*.md
-/cypress/src/integration/plugins/techdocs.spec.ts @backstage/techdocs-maintainers
/docs/assets/search @backstage/discoverability-maintainers
/docs/features/search @backstage/discoverability-maintainers
/docs/features/techdocs @backstage/techdocs-maintainers
@@ -22,6 +21,7 @@ yarn.lock @backstage/maintainers @backst
/plugins/azure-devops @backstage/maintainers @backstage/reviewers @awanlin
/plugins/azure-devops-backend @backstage/maintainers @backstage/reviewers @awanlin
/plugins/azure-devops-common @backstage/maintainers @backstage/reviewers @awanlin
+/plugins/analytics-module-newrelic-browser @backstage/maintainers @backstage/reviewers @jmezach
/plugins/bitbucket-cloud-common @backstage/maintainers @backstage/reviewers @pjungermann
/plugins/bitrise @backstage/maintainers @backstage/reviewers @backstage/sda-se-reviewers
/plugins/catalog @backstage/maintainers @backstage/reviewers @backstage/catalog-maintainers
@@ -63,6 +63,7 @@ yarn.lock @backstage/maintainers @backst
/plugins/linguist @backstage/maintainers @backstage/reviewers @awanlin
/plugins/linguist-backend @backstage/maintainers @backstage/reviewers @awanlin
/plugins/linguist-common @backstage/maintainers @backstage/reviewers @awanlin
+/plugins/octopus-deploy @backstage/maintainers @backstage/reviewers @jmezach
/plugins/permission-* @backstage/permission-maintainers
/plugins/playlist @backstage/maintainers @backstage/reviewers @kuangp
/plugins/playlist-* @backstage/maintainers @backstage/reviewers @kuangp
diff --git a/.github/vale/Vocab/Backstage/accept.txt b/.github/vale/Vocab/Backstage/accept.txt
index 4e3ef18a65..aadbaa3985 100644
--- a/.github/vale/Vocab/Backstage/accept.txt
+++ b/.github/vale/Vocab/Backstage/accept.txt
@@ -401,6 +401,7 @@ tooltip
tooltips
touchpoint
transpilation
+transpile
transpiled
transpiler
transpilers
diff --git a/.gitignore b/.gitignore
index c0bf195947..7149dbabc1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -144,15 +144,15 @@ site
# Sensitive credentials
*-credentials.yaml
-# e2e tests
-cypress/cypress/*
-
# Possible leftover from build:api-reports
tsconfig.tmp.json
# vscode database functionality support files
*.session.sql
+# E2E test reports
+e2e-test-report/
+
# Lighthouse CI Reports
**/.lighthouseci/*
!**/.lighthouseci/scripts
diff --git a/ADOPTERS.md b/ADOPTERS.md
index 0d5b9fba59..f03ed8d270 100644
--- a/ADOPTERS.md
+++ b/ADOPTERS.md
@@ -5,7 +5,7 @@ _You can do this by using the [Adopter form](https://info.backstage.spotify.com/
| Organization | Contact | Description of Use |
|-----------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| [Spotify](https://www.spotify.com) | [@leemills83](https://github.com/leemills83) | Main interface towards all of Spotify's infrastructure and technical documentation. |
+| [Spotify](https://www.spotify.com) | [@helengreul](https://github.com/helengreul) | Main interface towards all of Spotify's infrastructure and technical documentation. |
| [bol.com](https://www.bol.com) | [@acierto](https://github.com/acierto), [@clanghout](https://github.com/clanghout) | Initial work being done to unify platform tooling. |
| [DFDS](https://www.dfds.com) | [@carlsendk](https://github.com/carlsendk) | V2 self-service platform. |
| [Roadie](https://roadie.io) | [@dtuite](https://github.com/dtuite) | Hosted, managed Backstage with easy set-up |
@@ -260,3 +260,4 @@ _You can do this by using the [Adopter form](https://info.backstage.spotify.com/
| [Localiza&Co](https://www.localiza.com/) | [Augusto Amormino](https://github.com/augustoamormino), [Jonas Soares](https://github.com/jonaopower), [Alexandre Amormino](https://github.com/alexandreamormino), [Greg Almeida](https://github.com/sephh) | We're excited to announce our adoption of Backstage as our Internal Developer Portal! Our mission is to elevate the Developer Experience by streaming information access. Backstage will serve as the ultimate hub for developer resources, including documentation, tools, software insights, and metrics. Through Backstage, we're simplifying processes, offering software templates to empowered and efficient development journey, enhancing self-service capabilities with the embedded all best practices. |
| [V2 Digital](https://v2.digital) | [Joe Patterson](https://github.com/jrwpatterson)| We will be using it to be a corporate dashboard plus our software catalog. |
| [AppsFlyer](https://www.appsflyer.com/) | [Shahar Shmaram](https://github.com/shmaram) | Internal Developer Portal, a catalog of all company resources, custom providers and processors, scaffolder for generating new resources.
+| [Cielo](https://www.cielo.com.br) | [@Alex Silva](https://github.com/narokwq) | We are using as our Internal Developer Portal, it provides developers with the resources, information, and tools they need to build high-quality applications and adhere to organizational standards and security practices. |
diff --git a/app-config.yaml b/app-config.yaml
index 9e153e5763..a2ee232516 100644
--- a/app-config.yaml
+++ b/app-config.yaml
@@ -291,9 +291,6 @@ catalog:
target: ../../plugins/scaffolder-backend/sample-templates/all-templates.yaml
rules:
- allow: [Template]
- # Backstage end-to-end tests of TechDocs
- - type: file
- target: ../../cypress/e2e-fixture.catalog.info.yaml
scaffolder:
# Use to customize default commit author info used when new components are created
# defaultAuthor:
diff --git a/cypress/.eslintrc.js b/cypress/.eslintrc.js
deleted file mode 100644
index 07f264452d..0000000000
--- a/cypress/.eslintrc.js
+++ /dev/null
@@ -1,9 +0,0 @@
-module.exports = {
- extends: [require.resolve('@backstage/cli/config/eslint.backend')],
- rules: {
- 'no-console': 0,
- 'jest/valid-expect': 'off',
- 'jest/expect-expect': 'off',
- 'no-restricted-syntax': 'off',
- },
-};
diff --git a/cypress/.npmrc b/cypress/.npmrc
deleted file mode 100644
index c3c66347fd..0000000000
--- a/cypress/.npmrc
+++ /dev/null
@@ -1,2 +0,0 @@
-registry=https://registry.npmjs.org/
-engine-strict=true
diff --git a/cypress/.yarnrc b/cypress/.yarnrc
deleted file mode 100644
index a2c82b2833..0000000000
--- a/cypress/.yarnrc
+++ /dev/null
@@ -1,5 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-registry "https://registry.npmjs.org/"
-network-timeout 300000
diff --git a/cypress/README.md b/cypress/README.md
deleted file mode 100644
index be2960e63c..0000000000
--- a/cypress/README.md
+++ /dev/null
@@ -1,34 +0,0 @@
-# Cypress Tests for Backstage
-
-Hey 👋 Welcome to the Cypress tests for Backstage. They're designed to be run against the `packages/app` folder in the main repo, and be some form of smoke tests to make sure that we don't break any core functionality.
-
-### Running Locally
-
-In order to make typescript happy, this `cypress` package is separate from all the Jest dependencies in the monorepo workspaces setup.
-
-You can run the e2e tests locally pointing at your local running version like so:
-
-```sh
-cd cypress
-yarn install
-yarn cypress run
-```
-
-Note that the tests expect to run against a built application, so you'll want to
-run a Docker image and either create an `app-config.cypress.yaml` or pass the
-necessary environment variables:
-
-```sh
-yarn tsc
-yarn build:backend
-yarn workspace example-backend build-image
-docker run -p 7007:7007 example-backend
-```
-
-You can open up the `cypress` console by using `yarn cypress open`.
-
-You can also run towards any Backstage installation by using the Cypress Environment Variable overrides.
-
-```sh
-CYPRESS_baseUrl="http://demo.backstage.io" yarn cypress run
-```
diff --git a/cypress/cypress.json b/cypress/cypress.json
deleted file mode 100644
index 7335d0f62a..0000000000
--- a/cypress/cypress.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "baseUrl": "http://localhost:7007",
- "integrationFolder": "./src/integration",
- "supportFile": "./src/support",
- "fixturesFolder": "./src/fixtures",
- "pluginsFile": "./src/plugins",
- "defaultCommandTimeout": 10000,
- "viewportHeight": 900,
- "viewportWidth": 1440
-}
diff --git a/cypress/e2e-fixture.catalog.info.yaml b/cypress/e2e-fixture.catalog.info.yaml
deleted file mode 100644
index 31502e415d..0000000000
--- a/cypress/e2e-fixture.catalog.info.yaml
+++ /dev/null
@@ -1,11 +0,0 @@
-apiVersion: backstage.io/v1alpha1
-kind: Component
-metadata:
- name: techdocs-e2e-fixture
- description: Used for end-to-end tests of TechDocs in Backstage.
- annotations:
- backstage.io/techdocs-ref: dir:./fixtures
-spec:
- type: service
- lifecycle: experimental
- owner: user:guest
diff --git a/cypress/fixtures/docs/index.md b/cypress/fixtures/docs/index.md
deleted file mode 100644
index d7ff14b46d..0000000000
--- a/cypress/fixtures/docs/index.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Home page
-
-This is a basic documentation used for end-to-end tests.
diff --git a/cypress/fixtures/docs/sub-page-one.md b/cypress/fixtures/docs/sub-page-one.md
deleted file mode 100644
index 7c451efeb5..0000000000
--- a/cypress/fixtures/docs/sub-page-one.md
+++ /dev/null
@@ -1,109 +0,0 @@
-# Sub-page 1
-
-## Section 1.1
-
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-
-## Section 1.2
-
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-
-## Section 1.3
-
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
diff --git a/cypress/fixtures/docs/sub-page-three.md b/cypress/fixtures/docs/sub-page-three.md
deleted file mode 100644
index e9a439ed98..0000000000
--- a/cypress/fixtures/docs/sub-page-three.md
+++ /dev/null
@@ -1,121 +0,0 @@
-# Sub-page 3
-
-## Section 3.1
-
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-
-## Section 3.2
-
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-
-### Sub-Section 3.2.1
-
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-
-### Sub-Section 3.2.2
-
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-
-## Section 3.3
-
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
diff --git a/cypress/fixtures/docs/sub-page-two.md b/cypress/fixtures/docs/sub-page-two.md
deleted file mode 100644
index eb2344e9c3..0000000000
--- a/cypress/fixtures/docs/sub-page-two.md
+++ /dev/null
@@ -1,146 +0,0 @@
-# Sub-page 2
-
-## Section 2.1
-
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-
-## Section 2.2
-
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-
-### Sub-Section 2.2.1
-
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-
-### Sub-Section 2.2.2
-
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-
-## Section 2.3
-
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-To next page!
-
-[Link to Section 1.1](sub-page-one.md#section-11)
diff --git a/cypress/fixtures/mkdocs.yml b/cypress/fixtures/mkdocs.yml
deleted file mode 100644
index 071d147509..0000000000
--- a/cypress/fixtures/mkdocs.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-site_name: e2e Fixture Documentation
-site_description: Documentation used for end-to-end tests of TechDocs in Backstage.
-repo_url: https://github.com/backstage/backstage
-edit_uri: edit/master/cypress/fixtures/docs
-
-nav:
- - Home: index.md
- - Sub-page 1: sub-page-one.md
- - Sub-page 2: sub-page-two.md
- - Nested Sub-pages:
- - Sub-page 3: sub-page-three.md
-plugins:
- - techdocs-core
diff --git a/cypress/package.json b/cypress/package.json
deleted file mode 100644
index fcdf084659..0000000000
--- a/cypress/package.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "name": "@backstage/cypress-tests",
- "version": "1.0.0",
- "main": "index.js",
- "license": "MIT",
- "private": true,
- "dependencies": {
- "cypress": "^12.0.0",
- "typescript": "~5.0.0"
- }
-}
diff --git a/cypress/src/fixtures/.gitkeep b/cypress/src/fixtures/.gitkeep
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/cypress/src/integration/integrations.spec.ts b/cypress/src/integration/integrations.spec.ts
deleted file mode 100644
index 4703c18881..0000000000
--- a/cypress/src/integration/integrations.spec.ts
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright 2021 The Backstage Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///
-import 'os';
-
-describe('Integrations', () => {
- describe('ReadTree', () => {
- it('should work for github', () => {
- cy.loginAsGuest();
-
- cy.request('POST', '/api/catalog/locations', {
- target:
- 'https://github.com/backstage-verification/test-repo/blob/main/**/*',
- type: 'url',
- });
-
- cy.wait(5000);
-
- cy.visit('/catalog');
- cy.get('[data-testid="user-picker-all"]').click();
- cy.get('table').should('contain', 'github-repo');
- cy.get('table').should('contain', 'github-repo-nested');
- });
-
- // it('should work for azure', () => {
- // cy.loginAsGuest();
-
- // cy.request('POST', '/api/catalog/locations', {
- // target:
- // 'https://dev.azure.com/backstage-verification/_git/test-repo?path=*',
- // type: 'url',
- // });
- // });
-
- it('should work for gitlab', () => {
- cy.loginAsGuest();
-
- cy.request('POST', '/api/catalog/locations', {
- target:
- 'https://gitlab.com/backstage-verification/test-repo/-/tree/master/**/*',
- type: 'url',
- });
-
- cy.wait(5000);
-
- cy.visit('/catalog');
- cy.get('[data-testid="user-picker-all"]').click();
- cy.get('table').should('contain', 'gitlab-repo');
- cy.get('table').should('contain', 'gitlab-repo-nested');
- });
-
- it('should work for bitbucket', () => {
- cy.loginAsGuest();
-
- cy.request('POST', '/api/catalog/locations', {
- target:
- 'https://bitbucket.org/backstage-verification/test-repo/src/master/**/*',
- type: 'url',
- });
-
- cy.wait(5000);
-
- cy.visit('/catalog');
- cy.get('[data-testid="user-picker-all"]').click();
- cy.get('table').should('contain', 'bitbucket-repo');
- cy.get('table').should('contain', 'bitbucket-repo-nested');
- });
- });
-});
diff --git a/cypress/src/integration/plugins/catalog.spec.ts b/cypress/src/integration/plugins/catalog.spec.ts
deleted file mode 100644
index 50ef3145e5..0000000000
--- a/cypress/src/integration/plugins/catalog.spec.ts
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * Copyright 2021 The Backstage Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///
-import 'os';
-
-describe('Catalog', () => {
- describe('default entities', () => {
- it('displays the correct amount of entities from default config', () => {
- cy.loginAsGuest();
-
- cy.visit('/catalog');
-
- cy.contains('Owned (10)').should('be.visible');
- });
-
- it('Should navigate to a docs tab', () => {
- cy.loginAsGuest();
-
- cy.visit('/catalog');
-
- cy.contains('techdocs-e2e-fixture').click();
-
- cy.location().should(loc => {
- expect(loc.pathname).to.eq(
- '/catalog/default/component/techdocs-e2e-fixture',
- );
- });
-
- cy.getCatalogDocsTab().click();
-
- cy.getTechDocsShadowRoot()
- .find('h1')
- .contains('Home page')
- .should('be.visible');
- });
-
- it('Should navigate to a sub-route in docs tab', () => {
- cy.loginAsGuest();
-
- cy.visit('/catalog');
-
- cy.contains('techdocs-e2e-fixture').click();
-
- cy.location().should(loc => {
- expect(loc.pathname).to.eq(
- '/catalog/default/component/techdocs-e2e-fixture',
- );
- });
-
- cy.getCatalogDocsTab().click();
-
- cy.getTechDocsShadowRoot()
- .find('h1')
- .contains('Home page')
- .should('be.visible');
-
- cy.getTechDocsShadowRoot().within(() => {
- cy.getTechDocsNavigation().find('a').contains('Sub-page 1').click();
- });
-
- cy.location().should(loc => {
- expect(loc.pathname).to.eq(
- '/catalog/default/component/techdocs-e2e-fixture/docs/sub-page-one/',
- );
- });
-
- cy.getTechDocsShadowRoot()
- .find('h1')
- .contains('Sub-page 1')
- .should('be.visible');
- });
-
- it('Should render addons on docs tab homepage', () => {
- cy.loginAsGuest();
-
- cy.visit('/catalog');
-
- cy.contains('techdocs-e2e-fixture').click();
-
- cy.location().should(loc => {
- expect(loc.pathname).to.eq(
- '/catalog/default/component/techdocs-e2e-fixture',
- );
- });
-
- cy.getCatalogDocsTab().click();
-
- cy.wait(300);
-
- cy.getTechDocsShadowRoot()
- .find('h1')
- .contains('Home page')
- .should('be.visible');
-
- // highlight a snippet of text
- cy.getTechDocsShadowRoot()
- .find('article > p')
- .then($el => {
- const el = $el[0];
- const document = el.ownerDocument;
- const range = document.createRange();
- range.selectNodeContents(el);
- document?.getSelection()?.removeAllRanges();
- document?.getSelection()?.addRange(range);
- });
-
- cy.document().trigger('selectionchange');
-
- // wait for new issue default debounce time
- cy.wait(600);
-
- // assert that the new issue button has a right url
- cy.getTechDocsShadowRoot()
- .contains('Open new Github issue')
- .should(
- 'have.attr',
- 'href',
- 'https://github.com/backstage/backstage/issues/new?title=Documentation%20feedback%3A%20This%20is%20a%20basic%20documentation%20used%20for%20end-to-end%20tests.&body=%23%23%20Documentation%20Feedback%20%F0%9F%93%9D%0A%0A%20%23%23%23%23%20The%20highlighted%20text%3A%20%0A%0A%20%3E%20This%20is%20a%20basic%20documentation%20used%20for%20end-to-end%20tests.%0A%0A%20%23%23%23%23%20The%20comment%20on%20the%20text%3A%20%0A%20_%3Ereplace%20this%20line%20with%20your%20comment%3C_%0A%0A%20___%0ABackstage%20URL%3A%20%3Chttp%3A%2F%2Flocalhost%3A7007%2Fcatalog%2Fdefault%2Fcomponent%2Ftechdocs-e2e-fixture%2Fdocs%3E%20%0AMarkdown%20URL%3A%20%3Chttps%3A%2F%2Fgithub.com%2Fbackstage%2Fbackstage%2Fblob%2Fmaster%2Fcypress%2Ffixtures%2Fdocs%2Findex.md%3E',
- );
- });
-
- it('Should render addons on docs tab sup-page', () => {
- cy.loginAsGuest();
-
- cy.visit('/catalog');
-
- cy.contains('techdocs-e2e-fixture').click();
-
- cy.location().should(loc => {
- expect(loc.pathname).to.eq(
- '/catalog/default/component/techdocs-e2e-fixture',
- );
- });
-
- cy.getCatalogDocsTab().click();
-
- cy.wait(300);
-
- cy.getTechDocsShadowRoot()
- .find('h1')
- .contains('Home page')
- .should('be.visible');
-
- cy.getTechDocsShadowRoot().within(() => {
- cy.getTechDocsNavigation().find('a').contains('Sub-page 1').click();
- });
-
- cy.location().should(loc => {
- expect(loc.pathname).to.eq(
- '/catalog/default/component/techdocs-e2e-fixture/docs/sub-page-one/',
- );
- });
-
- cy.getTechDocsShadowRoot()
- .find('h1')
- .contains('Sub-page 1')
- .should('be.visible');
-
- // highlight a snippet of text
- cy.getTechDocsShadowRoot()
- .find('#section-11')
- .then($el => {
- const el = $el[0];
- const document = el.ownerDocument;
- const range = document.createRange();
- range.selectNodeContents(el);
- document?.getSelection()?.removeAllRanges();
- document?.getSelection()?.addRange(range);
- });
-
- cy.document().trigger('selectionchange');
-
- // wait for new issue default debounce time
- cy.wait(600);
-
- // assert that the new issue button has a right url
- cy.getTechDocsShadowRoot()
- .contains('Open new Github issue')
- .should(
- 'have.attr',
- 'href',
- 'https://github.com/backstage/backstage/issues/new?title=Documentation%20feedback%3A%20Section%201.1%C2%B6&body=%23%23%20Documentation%20Feedback%20%F0%9F%93%9D%0A%0A%20%23%23%23%23%20The%20highlighted%20text%3A%20%0A%0A%20%3E%20Section%201.1%C2%B6%0A%0A%20%23%23%23%23%20The%20comment%20on%20the%20text%3A%20%0A%20_%3Ereplace%20this%20line%20with%20your%20comment%3C_%0A%0A%20___%0ABackstage%20URL%3A%20%3Chttp%3A%2F%2Flocalhost%3A7007%2Fcatalog%2Fdefault%2Fcomponent%2Ftechdocs-e2e-fixture%2Fdocs%2Fsub-page-one%2F%3E%20%0AMarkdown%20URL%3A%20%3Chttps%3A%2F%2Fgithub.com%2Fbackstage%2Fbackstage%2Fblob%2Fmaster%2Fcypress%2Ffixtures%2Fdocs%2Fsub-page-one.md%3E',
- );
- });
- });
-});
diff --git a/cypress/src/integration/plugins/score-card.spec.ts b/cypress/src/integration/plugins/score-card.spec.ts
deleted file mode 100644
index 5871a094e1..0000000000
--- a/cypress/src/integration/plugins/score-card.spec.ts
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright 2021 The Backstage Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///
-import 'os';
-
-describe('score-card', () => {
- describe('Score board', () => {
- it('displays the score board based on sample data', () => {
- cy.loginAsGuest();
-
- cy.visit('/score-board');
- cy.screenshot({ capture: 'viewport' });
-
- cy.contains('System scores overview').should('be.visible');
- cy.checkForErrors();
- cy.get('span:contains("1-2 of 2")').should('be.visible'); // beware, there is also a hidden
element
- cy.contains('audio-playback').should('be.visible');
- cy.contains('team-c').should('be.visible');
- cy.contains('non-valid-system').should('be.visible');
- cy.contains('Name').should('be.visible');
- cy.contains('Date').should('be.visible');
- cy.contains('Code').should('be.visible');
- cy.contains('Documentation').should('be.visible');
- cy.contains('Operations').should('be.visible');
- cy.contains('Quality').should('be.visible');
- cy.contains('Security').should('be.visible');
- cy.contains('Total').should('be.visible');
- cy.contains('50 %').should('be.visible');
- cy.contains('75 %').should('be.visible');
- cy.log('navigating to score card detail for audio-playback');
- cy.get('a[data-id="audio-playback"]').should('be.visible').click();
- cy.screenshot({ capture: 'viewport' });
-
- cy.url().should(
- 'include',
- '/catalog/default/System/audio-playback/score',
- );
- cy.contains('Scoring').should('be.visible');
- cy.contains('Total score: 57 %').should('be.visible');
- cy.contains('Code').should('be.visible');
- cy.contains('90 %').should('be.visible');
- cy.contains('Documentation').should('be.visible');
- cy.contains('75 %').should('be.visible');
- cy.contains('Operations').should('be.visible');
- cy.contains('50 %').should('be.visible');
- cy.contains('Quality').should('be.visible');
- cy.contains('25 %').should('be.visible');
- cy.contains('Security');
- cy.contains('10 %').should('be.visible');
- cy.checkForErrors();
-
- cy.log(
- 'Clicking on button [>] that is first child of the element (td) with value=Code',
- );
- cy.get('[value="Code"] > button:first-child').click();
- cy.checkForErrors();
- cy.screenshot({ capture: 'viewport' });
-
- cy.log('Clicking on link for Code');
- cy.contains('hints: Gitflow: 100%').should('be.visible');
- cy.get('a[data-id="2157"]')
- .should('be.visible')
- .should(
- 'have.attr',
- 'href',
- 'https://TBD/XXX/_wiki/wikis/XXX.wiki/2157',
- );
- });
- });
-});
diff --git a/cypress/src/integration/plugins/techdocs.spec.ts b/cypress/src/integration/plugins/techdocs.spec.ts
deleted file mode 100644
index 31094cb128..0000000000
--- a/cypress/src/integration/plugins/techdocs.spec.ts
+++ /dev/null
@@ -1,259 +0,0 @@
-/*
- * Copyright 2020 The Backstage Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///
-import 'os';
-
-describe('TechDocs', () => {
- beforeEach(() => {
- cy.loginAsGuest();
- cy.mockSockJSNode();
- cy.interceptTechDocsAPICalls();
- });
-
- describe('Navigating to TechDocs', () => {
- it('should navigate to the TechDocs home page via the primary navigation bar', () => {
- cy.visit('/');
- cy.wait(500);
-
- cy.get('[data-testid="sidebar-root"]')
- .get('div')
- .get('a[href="/docs"]')
- .click();
-
- cy.contains('Documentation');
- });
-
- it('should navigate to the TechDocs home page from the URL', () => {
- cy.visit('/docs');
-
- cy.wait(500);
-
- cy.contains('Documentation');
- });
-
- it('should navigate to a specific TechDocs entity from the "Overview" tab', () => {
- cy.visit('/docs');
-
- cy.contains('techdocs-e2e-fixture').click();
-
- cy.location().should(loc => {
- expect(loc.pathname).to.eq(
- '/docs/default/component/techdocs-e2e-fixture',
- );
- });
- });
-
- it('should navigate to a specific TechDocs entity page from a URL', () => {
- cy.visit('/docs/default/Component/techdocs-e2e-fixture');
- cy.waitHomePage();
-
- cy.contains('e2e Fixture Documentation');
- cy.contains(
- 'Documentation used for end-to-end tests of TechDocs in Backstage.',
- );
- cy.getTechDocsShadowRoot().contains('Home page');
- });
-
- it('should navigate to a specific TechDocs section from a URL', () => {
- cy.visit('/docs/default/Component/techdocs-e2e-fixture/sub-page-two');
- cy.waitSectionTwoPage();
-
- cy.window().its('scrollY').should('equal', 0);
-
- cy.getTechDocsShadowRoot().within(() => {
- cy.contains('Sub-page 2');
- });
- });
-
- it('should navigate to a specific TechDocs fragment from a URL', () => {
- cy.visit(
- '/docs/default/Component/techdocs-e2e-fixture/sub-page-two#section-23',
- );
-
- // This is used to test the post-render behavior of the techdocs Reader
- cy.wait(500);
-
- cy.getTechDocsShadowRoot().within(() => {
- cy.isInViewport('#section-23');
- });
- });
-
- it('should navigate to a wrong TechDocs entity page from a URL', () => {
- cy.visit('/docs/default/Component/wrong-component');
-
- cy.get('[data-testid=error]').should('be.visible');
- });
- });
-
- describe('Rendering TechDocs Addons', () => {
- it('should render a content addon in homepage', () => {
- cy.visit('/docs/default/Component/techdocs-e2e-fixture');
-
- cy.contains('e2e Fixture Documentation');
-
- // highlight a snippet of text
- cy.getTechDocsShadowRoot()
- .find('article > p')
- .then($el => {
- const el = $el[0];
- const document = el.ownerDocument;
- const range = document.createRange();
- range.selectNodeContents(el);
- document?.getSelection()?.removeAllRanges();
- document?.getSelection()?.addRange(range);
- });
-
- cy.document().trigger('selectionchange');
-
- // wait for new issue default debounce time
- cy.wait(600);
-
- // assert that the new issue button has a right url
- cy.getTechDocsShadowRoot()
- .contains('Open new Github issue')
- .should(
- 'have.attr',
- 'href',
- 'https://github.com/backstage/backstage/issues/new?title=Documentation%20feedback%3A%20This%20is%20a%20basic%20documentation%20used%20for%20end-to-end%20tests.&body=%23%23%20Documentation%20Feedback%20%F0%9F%93%9D%0A%0A%20%23%23%23%23%20The%20highlighted%20text%3A%20%0A%0A%20%3E%20This%20is%20a%20basic%20documentation%20used%20for%20end-to-end%20tests.%0A%0A%20%23%23%23%23%20The%20comment%20on%20the%20text%3A%20%0A%20_%3Ereplace%20this%20line%20with%20your%20comment%3C_%0A%0A%20___%0ABackstage%20URL%3A%20%3Chttp%3A%2F%2Flocalhost%3A7007%2Fdocs%2Fdefault%2FComponent%2Ftechdocs-e2e-fixture%3E%20%0AMarkdown%20URL%3A%20%3Chttps%3A%2F%2Fgithub.com%2Fbackstage%2Fbackstage%2Fblob%2Fmaster%2Fcypress%2Ffixtures%2Fdocs%2Findex.md%3E',
- );
- });
-
- it('should render a content addon in sub-pages', () => {
- cy.visit('/docs/default/Component/techdocs-e2e-fixture');
-
- cy.contains('e2e Fixture Documentation');
-
- // open sub-page
- cy.getTechDocsShadowRoot().within(() => {
- cy.getTechDocsNavigation().find('a').contains('Sub-page 1').click();
- });
-
- // highlight a snippet of text
- cy.getTechDocsShadowRoot()
- .find('#section-11')
- .then($el => {
- const el = $el[0];
- const document = el.ownerDocument;
- const range = document.createRange();
- range.selectNodeContents(el);
- document?.getSelection()?.removeAllRanges();
- document?.getSelection()?.addRange(range);
- });
-
- cy.document().trigger('selectionchange');
-
- // wait for new issue default debounce time
- cy.wait(600);
-
- // assert that the new issue button has a right url
- cy.getTechDocsShadowRoot()
- .contains('Open new Github issue')
- .should(
- 'have.attr',
- 'href',
- 'https://github.com/backstage/backstage/issues/new?title=Documentation%20feedback%3A%20Section%201.1%C2%B6&body=%23%23%20Documentation%20Feedback%20%F0%9F%93%9D%0A%0A%20%23%23%23%23%20The%20highlighted%20text%3A%20%0A%0A%20%3E%20Section%201.1%C2%B6%0A%0A%20%23%23%23%23%20The%20comment%20on%20the%20text%3A%20%0A%20_%3Ereplace%20this%20line%20with%20your%20comment%3C_%0A%0A%20___%0ABackstage%20URL%3A%20%3Chttp%3A%2F%2Flocalhost%3A7007%2Fdocs%2Fdefault%2FComponent%2Ftechdocs-e2e-fixture%2Fsub-page-one%2F%3E%20%0AMarkdown%20URL%3A%20%3Chttps%3A%2F%2Fgithub.com%2Fbackstage%2Fbackstage%2Fblob%2Fmaster%2Fcypress%2Ffixtures%2Fdocs%2Fsub-page-one.md%3E',
- );
- });
- });
-
- describe('Navigating within TechDocs', () => {
- it('should navigate to a specific TechDocs page via the navigation bar', () => {
- cy.visit('/docs/default/Component/techdocs-e2e-fixture');
-
- cy.getTechDocsShadowRoot().within(() => {
- cy.getTechDocsNavigation()
- .find('> div > div > [data-md-level="0"] > ul > li:nth-child(2) > a')
- .click();
- cy.contains('Sub-page 1');
- cy.window().its('scrollY').should('eq', 0);
- });
- });
-
- describe('Navigating within a TechDocs page', () => {
- beforeEach(() => {
- cy.visit('/docs/default/Component/techdocs-e2e-fixture/sub-page-two');
- });
-
- it('should navigate to a specific fragment within the page via the table of contents - Level 1', () => {
- return cy.getTechDocsShadowRoot().within(() => {
- // Section 3
- cy.getTechDocsTableOfContents()
- .find('a')
- .contains('Section 2.3')
- .click();
-
- // wait scroll timeout
- cy.wait(500);
-
- cy.isInViewport('#section-23');
- });
- });
-
- it('should navigate to a specific fragment within the page via the table of contents - Level 2', () => {
- return cy.getTechDocsShadowRoot().within(() => {
- cy.isNotInViewport('#sub-section-222');
- // Section 2.2
- cy.getTechDocsTableOfContents()
- .find('a')
- .contains('Section 2.2.2')
- .click();
-
- // wait scroll timeout
- cy.wait(500);
-
- cy.isInViewport('#sub-section-222');
- });
- });
-
- it('should navigate to a specific TechDocs page fragment from a link', () => {
- return cy.getTechDocsShadowRoot().within(() => {
- cy.get('article').contains('Link to Section 1.1').click();
-
- cy.location().should(loc => {
- expect(loc.pathname).to.eq(
- '/docs/default/Component/techdocs-e2e-fixture/sub-page-one/',
- );
- expect(loc.hash).to.eq('#section-11');
- });
- });
- });
-
- it('should navigate to the next page within a TechDocs entity', () => {
- return cy.getTechDocsShadowRoot().within(() => {
- cy.get('footer a').contains('Sub-page 3').click();
-
- cy.location().should(loc => {
- expect(loc.pathname).to.eq(
- '/docs/default/Component/techdocs-e2e-fixture/sub-page-three/',
- );
- });
- });
- });
-
- it('should navigate to the previous page within a TechDocs entity', () => {
- return cy.getTechDocsShadowRoot().within(() => {
- cy.get('footer a').contains('Sub-page 1').click();
-
- cy.location().should(loc => {
- expect(loc.pathname).to.eq(
- '/docs/default/Component/techdocs-e2e-fixture/sub-page-one/',
- );
- });
- });
- });
- });
- });
-});
diff --git a/cypress/src/support/commands.ts b/cypress/src/support/commands.ts
deleted file mode 100644
index 62e21a5bef..0000000000
--- a/cypress/src/support/commands.ts
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Copyright 2021 The Backstage Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/* eslint-disable jest/no-standalone-expect */
-///
-import 'os';
-
-Cypress.Commands.add('loginAsGuest', () => {
- cy.visit('/', {
- onLoad: (win: Window) =>
- win.localStorage.setItem('@backstage/core:SignInPage:provider', 'guest'),
- });
-});
-
-Cypress.Commands.add('getTechDocsShadowRoot', () => {
- cy.get('[data-testid="techdocs-native-shadowroot"]').shadow();
-});
-
-Cypress.Commands.add('isNotInViewport', element => {
- cy.get(element).then($el => {
- const bottom = Cypress.config(`viewportHeight`);
- const rect = $el[0].getBoundingClientRect();
-
- if (bottom) {
- expect(rect.top).to.be.greaterThan(bottom);
- expect(rect.bottom).to.be.greaterThan(bottom);
- expect(rect.top).to.be.greaterThan(bottom);
- expect(rect.bottom).to.be.greaterThan(bottom);
- }
- });
-});
-
-Cypress.Commands.add('isInViewport', element => {
- cy.get(element).then($el => {
- const bottom = Cypress.config(`viewportHeight`);
- const rect = $el[0].getBoundingClientRect();
-
- if (bottom) {
- expect(rect.top).not.to.be.greaterThan(bottom);
- expect(rect.bottom).not.to.be.greaterThan(bottom);
- expect(rect.top).not.to.be.greaterThan(bottom);
- expect(rect.bottom).not.to.be.greaterThan(bottom);
- }
- });
-});
-
-Cypress.Commands.add('getTechDocsTableOfContents', () => {
- cy.get('[data-md-type="toc"]');
-});
-
-Cypress.Commands.add('getTechDocsNavigation', () => {
- cy.get('[data-md-type="navigation"]');
-});
-
-Cypress.Commands.add('getCatalogDocsTab', () => {
- cy.get('button[role="tab"]').contains('Docs');
-});
-
-Cypress.Commands.add('mockSockJSNode', () => {
- cy.intercept('GET', '**/sockjs-node/info**', {
- body: {
- websocket: true,
- origins: ['*:*'],
- cookie_needed: false,
- entropy: 2882389500,
- },
- });
-});
-
-Cypress.Commands.add('interceptTechDocsAPICalls', () => {
- cy.intercept(
- 'GET',
- '**/techdocs/metadata/entity/default/Component/techdocs-e2e-fixture',
- ).as('entityMetadata');
-
- cy.intercept(
- 'GET',
- '**/techdocs/metadata/techdocs/default/Component/techdocs-e2e-fixture',
- ).as('techdocsMetadata');
-
- cy.intercept(
- 'GET',
- '**/techdocs/sync/default/Component/techdocs-e2e-fixture',
- ).as('syncEntity');
-
- cy.intercept(
- 'GET',
- '**/techdocs/static/docs/default/Component/techdocs-e2e-fixture/sub-page-two/index.html',
- ).as('sectionTwoHTML');
-
- cy.intercept(
- 'GET',
- '**/techdocs/static/docs/default/Component/techdocs-e2e-fixture/index.html',
- ).as('homeHTML');
-});
-
-Cypress.Commands.add('waitSectionTwoPage', () => {
- cy.wait([
- '@entityMetadata',
- '@syncEntity',
- '@techdocsMetadata',
- '@sectionTwoHTML',
- ]);
-});
-
-Cypress.Commands.add('waitHomePage', () => {
- cy.wait(['@entityMetadata', '@syncEntity', '@techdocsMetadata', '@homeHTML']);
-});
-
-Cypress.Commands.add('checkForErrors', () => {
- // when an error occurs there is a with an "alert" role attribute. This can change ofc => we shall add also some positive ("when error occurs") test
- cy.get('div[role="alert"]').should('not.exist');
-});
diff --git a/cypress/src/support/index.ts b/cypress/src/support/index.ts
deleted file mode 100644
index 6d1051a793..0000000000
--- a/cypress/src/support/index.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * Copyright 2021 The Backstage Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///
-import './commands';
diff --git a/cypress/src/types.d.ts b/cypress/src/types.d.ts
deleted file mode 100644
index dca22112e9..0000000000
--- a/cypress/src/types.d.ts
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright 2021 The Backstage Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-declare module 'zombie';
-declare module 'pgtools';
-declare namespace Cypress {
- interface Chainable {
- /**
- * Login as guest
- * @example cy.loginAsGuests
- */
- loginAsGuest(): Chainable
;
- /**
- * Get the TechDocs shadow root element
- * @example cy.getTechDocsShadowRoot
- */
- getTechDocsShadowRoot(): Chainable;
- /**
- * Mock TechDocs backend API
- * @example cy.mockTechDocs
- */
- mockTechDocs(): void;
- /**
- * Get the TechDocs table of contents element
- * @example cy.getTechDocsShadowRoot
- */
- getTechDocsTableOfContents(): Chainable;
- /**
- * Get the TechDocs navigation element
- * @example cy.getTechDocsNavigation
- */
- getTechDocsNavigation(): Chainable;
- /**
- * Get the Catalog docs tab
- * @example cy.getCatalogDocsTab
- */
- getCatalogDocsTab(): Chainable;
- /**
- * Intercept the TechDocs API calls
- * @example cy.interceptTechDocsAPICalls
- */
- interceptTechDocsAPICalls(): Chainable;
- /**
- * Mock SockJS-Node call
- * @example cy.mockSockJSNode
- */
- mockSockJSNode(): Chainable;
- /**
- * Wait TechDocs API response for home page
- * @example cy.waitHomePage
- */
- waitHomePage(): Chainable;
- /**
- * Wait TechDocs API response for Section 2 page
- * @example cy.waitSectionTwoPage
- */
- waitSectionTwoPage(): Chainable;
- /**
- * Check if the element is in viewport
- * @example cy.isInViewport
- */
- isInViewport(element: string): Chainable;
- /**
- * Check if the element is not in viewport
- * @example cy.isNotInViewport
- */
- isNotInViewport(element: string): Chainable;
- /**
- * Check if we have not caused error by our last action
- * @example cy.checkForErrors
- */
- checkForErrors(): Chainable;
- }
-}
diff --git a/cypress/support/commands.ts b/cypress/support/commands.ts
deleted file mode 100644
index fd4db77d61..0000000000
--- a/cypress/support/commands.ts
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright 2022 The Backstage Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// ***********************************************
-// This example commands.ts shows you how to
-// create various custom commands and overwrite
-// existing commands.
-//
-// For more comprehensive examples of custom
-// commands please read more here:
-// https://on.cypress.io/custom-commands
-// ***********************************************
-//
-//
-// -- This is a parent command --
-// Cypress.Commands.add('login', (email, password) => { ... })
-//
-//
-// -- This is a child command --
-// Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... })
-//
-//
-// -- This is a dual command --
-// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... })
-//
-//
-// -- This will overwrite an existing command --
-// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... })
-//
-// declare global {
-// namespace Cypress {
-// interface Chainable {
-// login(email: string, password: string): Chainable
-// drag(subject: string, options?: Partial): Chainable
-// dismiss(subject: string, options?: Partial): Chainable
-// visit(originalFn: CommandOriginalFn, url: string, options: Partial): Chainable
-// }
-// }
-// }
diff --git a/cypress/support/e2e.ts b/cypress/support/e2e.ts
deleted file mode 100644
index c71790471e..0000000000
--- a/cypress/support/e2e.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright 2022 The Backstage Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// This example support/e2e.ts is processed and
-// loaded automatically before your test files.
-//
-// This is a great place to put global configuration and
-// behavior that modifies Cypress.
-//
-// You can change the location of this file or turn off
-// automatically serving support files with the
-// 'supportFile' configuration option.
-//
-// You can read more here:
-// https://on.cypress.io/configuration
-// ***********************************************************
-
-// Import commands.js using ES2015 syntax:
-import './commands';
-
-// Alternatively you can use CommonJS syntax:
-// require('./commands')
diff --git a/cypress/tsconfig.json b/cypress/tsconfig.json
deleted file mode 100644
index 9c4a63b76c..0000000000
--- a/cypress/tsconfig.json
+++ /dev/null
@@ -1,37 +0,0 @@
-{
- "compilerOptions": {
- "allowJs": true,
- "declaration": true,
- "declarationMap": false,
- "esModuleInterop": true,
- "experimentalDecorators": false,
- "forceConsistentCasingInFileNames": true,
- "importHelpers": false,
- "incremental": true,
- "isolatedModules": true,
- "jsx": "react",
- "lib": ["DOM", "DOM.Iterable", "ScriptHost", "ES2021", "ESNext.Promise"],
- "module": "ESNext",
- "moduleResolution": "node",
- "noEmit": true,
- "noFallthroughCasesInSwitch": true,
- "noImplicitAny": true,
- "noImplicitReturns": true,
- "noImplicitThis": true,
- "noUnusedLocals": true,
- "noUnusedParameters": true,
- "pretty": true,
- "removeComments": false,
- "resolveJsonModule": true,
- "sourceMap": false,
- "skipLibCheck": false,
- "strict": true,
- "strictBindCallApply": true,
- "strictFunctionTypes": true,
- "strictNullChecks": true,
- "strictPropertyInitialization": true,
- "stripInternal": true,
- "target": "ES2021",
- "types": ["node", "cypress"]
- }
-}
diff --git a/cypress/yarn.lock b/cypress/yarn.lock
deleted file mode 100644
index 923868f152..0000000000
--- a/cypress/yarn.lock
+++ /dev/null
@@ -1,1639 +0,0 @@
-# This file is generated by running "yarn install" inside your project.
-# Manual changes might be lost - proceed with caution!
-
-__metadata:
- version: 6
- cacheKey: 8
-
-"@backstage/cypress-tests@workspace:.":
- version: 0.0.0-use.local
- resolution: "@backstage/cypress-tests@workspace:."
- dependencies:
- cypress: ^12.0.0
- typescript: ~5.0.0
- languageName: unknown
- linkType: soft
-
-"@colors/colors@npm:1.5.0":
- version: 1.5.0
- resolution: "@colors/colors@npm:1.5.0"
- checksum: d64d5260bed1d5012ae3fc617d38d1afc0329fec05342f4e6b838f46998855ba56e0a73833f4a80fa8378c84810da254f76a8a19c39d038260dc06dc4e007425
- languageName: node
- linkType: hard
-
-"@cypress/request@npm:2.88.12":
- version: 2.88.12
- resolution: "@cypress/request@npm:2.88.12"
- dependencies:
- aws-sign2: ~0.7.0
- aws4: ^1.8.0
- caseless: ~0.12.0
- combined-stream: ~1.0.6
- extend: ~3.0.2
- forever-agent: ~0.6.1
- form-data: ~2.3.2
- http-signature: ~1.3.6
- is-typedarray: ~1.0.0
- isstream: ~0.1.2
- json-stringify-safe: ~5.0.1
- mime-types: ~2.1.19
- performance-now: ^2.1.0
- qs: ~6.10.3
- safe-buffer: ^5.1.2
- tough-cookie: ^4.1.3
- tunnel-agent: ^0.6.0
- uuid: ^8.3.2
- checksum: 2c6fbf7f3127d41bffca8374beaa8cf95450495a8a077b00309ea9d94dd2a4da450a77fe038e8ad26c97cdd7c39b65c53c850f8338ce9bc2dbe23ce2e2b48329
- languageName: node
- linkType: hard
-
-"@cypress/xvfb@npm:^1.2.4":
- version: 1.2.4
- resolution: "@cypress/xvfb@npm:1.2.4"
- dependencies:
- debug: ^3.1.0
- lodash.once: ^4.1.1
- checksum: 7bdcdaeb1bb692ec9d9bf8ec52538aa0bead6764753f4a067a171a511807a43fab016f7285a56bef6a606c2467ff3f1365e1ad2d2d583b81beed849ee1573fd1
- languageName: node
- linkType: hard
-
-"@types/node@npm:*":
- version: 18.7.14
- resolution: "@types/node@npm:18.7.14"
- checksum: 99cf28ff854100158de875cca23c7acc3cc01dfee526a52b90b7f36767c821bcbaf2be0a98a70f06f3b78f3c60639168ff949d725b61e2e124f9f71f1fb8043d
- languageName: node
- linkType: hard
-
-"@types/node@npm:^16.18.39":
- version: 16.18.53
- resolution: "@types/node@npm:16.18.53"
- checksum: 26c05cde59664360c22e0dda70776ca6f1b35f0b94e4f84d2c21e2afa2e69ac3a2c99bbb57b43405f81df1b2598f6d707ccc7c4c31865f90e45c4625d8400518
- languageName: node
- linkType: hard
-
-"@types/sinonjs__fake-timers@npm:8.1.1":
- version: 8.1.1
- resolution: "@types/sinonjs__fake-timers@npm:8.1.1"
- checksum: ca09d54d47091d87020824a73f026300fa06b17cd9f2f9b9387f28b549364b141ef194ee28db762f6588de71d8febcd17f753163cb7ea116b8387c18e80ebd5c
- languageName: node
- linkType: hard
-
-"@types/sizzle@npm:^2.3.2":
- version: 2.3.3
- resolution: "@types/sizzle@npm:2.3.3"
- checksum: 586a9fb1f6ff3e325e0f2cc1596a460615f0bc8a28f6e276ac9b509401039dd242fa8b34496d3a30c52f5b495873922d09a9e76c50c2ab2bcc70ba3fb9c4e160
- languageName: node
- linkType: hard
-
-"@types/yauzl@npm:^2.9.1":
- version: 2.10.0
- resolution: "@types/yauzl@npm:2.10.0"
- dependencies:
- "@types/node": "*"
- checksum: 55d27ae5d346ea260e40121675c24e112ef0247649073848e5d4e03182713ae4ec8142b98f61a1c6cbe7d3b72fa99bbadb65d8b01873e5e605cdc30f1ff70ef2
- languageName: node
- linkType: hard
-
-"aggregate-error@npm:^3.0.0":
- version: 3.1.0
- resolution: "aggregate-error@npm:3.1.0"
- dependencies:
- clean-stack: ^2.0.0
- indent-string: ^4.0.0
- checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79
- languageName: node
- linkType: hard
-
-"ansi-colors@npm:^4.1.1":
- version: 4.1.3
- resolution: "ansi-colors@npm:4.1.3"
- checksum: a9c2ec842038a1fabc7db9ece7d3177e2fe1c5dc6f0c51ecfbf5f39911427b89c00b5dc6b8bd95f82a26e9b16aaae2e83d45f060e98070ce4d1333038edceb0e
- languageName: node
- linkType: hard
-
-"ansi-escapes@npm:^4.3.0":
- version: 4.3.2
- resolution: "ansi-escapes@npm:4.3.2"
- dependencies:
- type-fest: ^0.21.3
- checksum: 93111c42189c0a6bed9cdb4d7f2829548e943827ee8479c74d6e0b22ee127b2a21d3f8b5ca57723b8ef78ce011fbfc2784350eb2bde3ccfccf2f575fa8489815
- languageName: node
- linkType: hard
-
-"ansi-regex@npm:^5.0.1":
- version: 5.0.1
- resolution: "ansi-regex@npm:5.0.1"
- checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b
- languageName: node
- linkType: hard
-
-"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0":
- version: 4.3.0
- resolution: "ansi-styles@npm:4.3.0"
- dependencies:
- color-convert: ^2.0.1
- checksum: 513b44c3b2105dd14cc42a19271e80f386466c4be574bccf60b627432f9198571ebf4ab1e4c3ba17347658f4ee1711c163d574248c0c1cdc2d5917a0ad582ec4
- languageName: node
- linkType: hard
-
-"arch@npm:^2.2.0":
- version: 2.2.0
- resolution: "arch@npm:2.2.0"
- checksum: e21b7635029fe8e9cdd5a026f9a6c659103e63fff423834323cdf836a1bb240a72d0c39ca8c470f84643385cf581bd8eda2cad8bf493e27e54bd9783abe9101f
- languageName: node
- linkType: hard
-
-"asn1@npm:~0.2.3":
- version: 0.2.6
- resolution: "asn1@npm:0.2.6"
- dependencies:
- safer-buffer: ~2.1.0
- checksum: 39f2ae343b03c15ad4f238ba561e626602a3de8d94ae536c46a4a93e69578826305366dc09fbb9b56aec39b4982a463682f259c38e59f6fa380cd72cd61e493d
- languageName: node
- linkType: hard
-
-"assert-plus@npm:1.0.0, assert-plus@npm:^1.0.0":
- version: 1.0.0
- resolution: "assert-plus@npm:1.0.0"
- checksum: 19b4340cb8f0e6a981c07225eacac0e9d52c2644c080198765d63398f0075f83bbc0c8e95474d54224e297555ad0d631c1dcd058adb1ddc2437b41a6b424ac64
- languageName: node
- linkType: hard
-
-"astral-regex@npm:^2.0.0":
- version: 2.0.0
- resolution: "astral-regex@npm:2.0.0"
- checksum: 876231688c66400473ba505731df37ea436e574dd524520294cc3bbc54ea40334865e01fa0d074d74d036ee874ee7e62f486ea38bc421ee8e6a871c06f011766
- languageName: node
- linkType: hard
-
-"async@npm:^3.2.0":
- version: 3.2.4
- resolution: "async@npm:3.2.4"
- checksum: 43d07459a4e1d09b84a20772414aa684ff4de085cbcaec6eea3c7a8f8150e8c62aa6cd4e699fe8ee93c3a5b324e777d34642531875a0817a35697522c1b02e89
- languageName: node
- linkType: hard
-
-"asynckit@npm:^0.4.0":
- version: 0.4.0
- resolution: "asynckit@npm:0.4.0"
- checksum: 7b78c451df768adba04e2d02e63e2d0bf3b07adcd6e42b4cf665cb7ce899bedd344c69a1dcbce355b5f972d597b25aaa1c1742b52cffd9caccb22f348114f6be
- languageName: node
- linkType: hard
-
-"at-least-node@npm:^1.0.0":
- version: 1.0.0
- resolution: "at-least-node@npm:1.0.0"
- checksum: 463e2f8e43384f1afb54bc68485c436d7622acec08b6fad269b421cb1d29cebb5af751426793d0961ed243146fe4dc983402f6d5a51b720b277818dbf6f2e49e
- languageName: node
- linkType: hard
-
-"aws-sign2@npm:~0.7.0":
- version: 0.7.0
- resolution: "aws-sign2@npm:0.7.0"
- checksum: b148b0bb0778098ad8cf7e5fc619768bcb51236707ca1d3e5b49e41b171166d8be9fdc2ea2ae43d7decf02989d0aaa3a9c4caa6f320af95d684de9b548a71525
- languageName: node
- linkType: hard
-
-"aws4@npm:^1.8.0":
- version: 1.11.0
- resolution: "aws4@npm:1.11.0"
- checksum: 5a00d045fd0385926d20ebebcfba5ec79d4482fe706f63c27b324d489a04c68edb0db99ed991e19eda09cb8c97dc2452059a34d97545cebf591d7a2b5a10999f
- languageName: node
- linkType: hard
-
-"balanced-match@npm:^1.0.0":
- version: 1.0.2
- resolution: "balanced-match@npm:1.0.2"
- checksum: 9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65
- languageName: node
- linkType: hard
-
-"base64-js@npm:^1.3.1":
- version: 1.5.1
- resolution: "base64-js@npm:1.5.1"
- checksum: 669632eb3745404c2f822a18fc3a0122d2f9a7a13f7fb8b5823ee19d1d2ff9ee5b52c53367176ea4ad093c332fd5ab4bd0ebae5a8e27917a4105a4cfc86b1005
- languageName: node
- linkType: hard
-
-"bcrypt-pbkdf@npm:^1.0.0":
- version: 1.0.2
- resolution: "bcrypt-pbkdf@npm:1.0.2"
- dependencies:
- tweetnacl: ^0.14.3
- checksum: 4edfc9fe7d07019609ccf797a2af28351736e9d012c8402a07120c4453a3b789a15f2ee1530dc49eee8f7eb9379331a8dd4b3766042b9e502f74a68e7f662291
- languageName: node
- linkType: hard
-
-"blob-util@npm:^2.0.2":
- version: 2.0.2
- resolution: "blob-util@npm:2.0.2"
- checksum: d543e6b92e4ca715ca33c78e89a07a2290d43e5b2bc897d7ec588c5c7bbf59df93e45225ac0c9258aa6ce4320358990f99c9288f1c48280f8ec5d7a2e088d19b
- languageName: node
- linkType: hard
-
-"bluebird@npm:^3.7.2":
- version: 3.7.2
- resolution: "bluebird@npm:3.7.2"
- checksum: 869417503c722e7dc54ca46715f70e15f4d9c602a423a02c825570862d12935be59ed9c7ba34a9b31f186c017c23cac6b54e35446f8353059c101da73eac22ef
- languageName: node
- linkType: hard
-
-"brace-expansion@npm:^1.1.7":
- version: 1.1.11
- resolution: "brace-expansion@npm:1.1.11"
- dependencies:
- balanced-match: ^1.0.0
- concat-map: 0.0.1
- checksum: faf34a7bb0c3fcf4b59c7808bc5d2a96a40988addf2e7e09dfbb67a2251800e0d14cd2bfc1aa79174f2f5095c54ff27f46fb1289fe2d77dac755b5eb3434cc07
- languageName: node
- linkType: hard
-
-"buffer-crc32@npm:~0.2.3":
- version: 0.2.13
- resolution: "buffer-crc32@npm:0.2.13"
- checksum: 06252347ae6daca3453b94e4b2f1d3754a3b146a111d81c68924c22d91889a40623264e95e67955b1cb4a68cbedf317abeabb5140a9766ed248973096db5ce1c
- languageName: node
- linkType: hard
-
-"buffer@npm:^5.6.0":
- version: 5.7.1
- resolution: "buffer@npm:5.7.1"
- dependencies:
- base64-js: ^1.3.1
- ieee754: ^1.1.13
- checksum: e2cf8429e1c4c7b8cbd30834ac09bd61da46ce35f5c22a78e6c2f04497d6d25541b16881e30a019c6fd3154150650ccee27a308eff3e26229d788bbdeb08ab84
- languageName: node
- linkType: hard
-
-"cachedir@npm:^2.3.0":
- version: 2.3.0
- resolution: "cachedir@npm:2.3.0"
- checksum: ec90cb0f2e6336e266aa748dbadf3da9e0b20e843e43f1591acab7a3f1451337dc2f26cb9dd833ae8cfefeffeeb43ef5b5ff62782a685f4e3c2305dd98482fcb
- languageName: node
- linkType: hard
-
-"call-bind@npm:^1.0.0":
- version: 1.0.2
- resolution: "call-bind@npm:1.0.2"
- dependencies:
- function-bind: ^1.1.1
- get-intrinsic: ^1.0.2
- checksum: f8e31de9d19988a4b80f3e704788c4a2d6b6f3d17cfec4f57dc29ced450c53a49270dc66bf0fbd693329ee948dd33e6c90a329519aef17474a4d961e8d6426b0
- languageName: node
- linkType: hard
-
-"caseless@npm:~0.12.0":
- version: 0.12.0
- resolution: "caseless@npm:0.12.0"
- checksum: b43bd4c440aa1e8ee6baefee8063b4850fd0d7b378f6aabc796c9ec8cb26d27fb30b46885350777d9bd079c5256c0e1329ad0dc7c2817e0bb466810ebb353751
- languageName: node
- linkType: hard
-
-"chalk@npm:^4.1.0":
- version: 4.1.2
- resolution: "chalk@npm:4.1.2"
- dependencies:
- ansi-styles: ^4.1.0
- supports-color: ^7.1.0
- checksum: fe75c9d5c76a7a98d45495b91b2172fa3b7a09e0cc9370e5c8feb1c567b85c4288e2b3fded7cfdd7359ac28d6b3844feb8b82b8686842e93d23c827c417e83fc
- languageName: node
- linkType: hard
-
-"check-more-types@npm:^2.24.0":
- version: 2.24.0
- resolution: "check-more-types@npm:2.24.0"
- checksum: b09080ec3404d20a4b0ead828994b2e5913236ef44ed3033a27062af0004cf7d2091fbde4b396bf13b7ce02fb018bc9960b48305e6ab2304cd82d73ed7a51ef4
- languageName: node
- linkType: hard
-
-"ci-info@npm:^3.2.0":
- version: 3.3.2
- resolution: "ci-info@npm:3.3.2"
- checksum: fd81f1edd2d3b0f6cb077b2e84365136d87b9db8c055928c1ad69da8a76c2c2f19cba8ea51b90238302157ca927f91f92b653e933f2398dde4867500f08d6e62
- languageName: node
- linkType: hard
-
-"clean-stack@npm:^2.0.0":
- version: 2.2.0
- resolution: "clean-stack@npm:2.2.0"
- checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68
- languageName: node
- linkType: hard
-
-"cli-cursor@npm:^3.1.0":
- version: 3.1.0
- resolution: "cli-cursor@npm:3.1.0"
- dependencies:
- restore-cursor: ^3.1.0
- checksum: 2692784c6cd2fd85cfdbd11f53aea73a463a6d64a77c3e098b2b4697a20443f430c220629e1ca3b195ea5ac4a97a74c2ee411f3807abf6df2b66211fec0c0a29
- languageName: node
- linkType: hard
-
-"cli-table3@npm:~0.6.1":
- version: 0.6.2
- resolution: "cli-table3@npm:0.6.2"
- dependencies:
- "@colors/colors": 1.5.0
- string-width: ^4.2.0
- dependenciesMeta:
- "@colors/colors":
- optional: true
- checksum: 2f82391698b8a2a2a5e45d2adcfea5d93e557207f90455a8d4c1aac688e9b18a204d9eb4ba1d322fa123b17d64ea3dc5e11de8b005529f3c3e7dbeb27cb4d9be
- languageName: node
- linkType: hard
-
-"cli-truncate@npm:^2.1.0":
- version: 2.1.0
- resolution: "cli-truncate@npm:2.1.0"
- dependencies:
- slice-ansi: ^3.0.0
- string-width: ^4.2.0
- checksum: bf1e4e6195392dc718bf9cd71f317b6300dc4a9191d052f31046b8773230ece4fa09458813bf0e3455a5e68c0690d2ea2c197d14a8b85a7b5e01c97f4b5feb5d
- languageName: node
- linkType: hard
-
-"color-convert@npm:^2.0.1":
- version: 2.0.1
- resolution: "color-convert@npm:2.0.1"
- dependencies:
- color-name: ~1.1.4
- checksum: 79e6bdb9fd479a205c71d89574fccfb22bd9053bd98c6c4d870d65c132e5e904e6034978e55b43d69fcaa7433af2016ee203ce76eeba9cfa554b373e7f7db336
- languageName: node
- linkType: hard
-
-"color-name@npm:~1.1.4":
- version: 1.1.4
- resolution: "color-name@npm:1.1.4"
- checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610
- languageName: node
- linkType: hard
-
-"colorette@npm:^2.0.16":
- version: 2.0.19
- resolution: "colorette@npm:2.0.19"
- checksum: 888cf5493f781e5fcf54ce4d49e9d7d698f96ea2b2ef67906834bb319a392c667f9ec69f4a10e268d2946d13a9503d2d19b3abaaaf174e3451bfe91fb9d82427
- languageName: node
- linkType: hard
-
-"combined-stream@npm:^1.0.6, combined-stream@npm:~1.0.6":
- version: 1.0.8
- resolution: "combined-stream@npm:1.0.8"
- dependencies:
- delayed-stream: ~1.0.0
- checksum: 49fa4aeb4916567e33ea81d088f6584749fc90c7abec76fd516bf1c5aa5c79f3584b5ba3de6b86d26ddd64bae5329c4c7479343250cfe71c75bb366eae53bb7c
- languageName: node
- linkType: hard
-
-"commander@npm:^6.2.1":
- version: 6.2.1
- resolution: "commander@npm:6.2.1"
- checksum: d7090410c0de6bc5c67d3ca41c41760d6d268f3c799e530aafb73b7437d1826bbf0d2a3edac33f8b57cc9887b4a986dce307fa5557e109be40eadb7c43b21742
- languageName: node
- linkType: hard
-
-"common-tags@npm:^1.8.0":
- version: 1.8.2
- resolution: "common-tags@npm:1.8.2"
- checksum: 767a6255a84bbc47df49a60ab583053bb29a7d9687066a18500a516188a062c4e4cd52de341f22de0b07062e699b1b8fe3cfa1cb55b241cb9301aeb4f45b4dff
- languageName: node
- linkType: hard
-
-"concat-map@npm:0.0.1":
- version: 0.0.1
- resolution: "concat-map@npm:0.0.1"
- checksum: 902a9f5d8967a3e2faf138d5cb784b9979bad2e6db5357c5b21c568df4ebe62bcb15108af1b2253744844eb964fc023fbd9afbbbb6ddd0bcc204c6fb5b7bf3af
- languageName: node
- linkType: hard
-
-"core-util-is@npm:1.0.2":
- version: 1.0.2
- resolution: "core-util-is@npm:1.0.2"
- checksum: 7a4c925b497a2c91421e25bf76d6d8190f0b2359a9200dbeed136e63b2931d6294d3b1893eda378883ed363cd950f44a12a401384c609839ea616befb7927dab
- languageName: node
- linkType: hard
-
-"cross-spawn@npm:^7.0.0":
- version: 7.0.3
- resolution: "cross-spawn@npm:7.0.3"
- dependencies:
- path-key: ^3.1.0
- shebang-command: ^2.0.0
- which: ^2.0.1
- checksum: 671cc7c7288c3a8406f3c69a3ae2fc85555c04169e9d611def9a675635472614f1c0ed0ef80955d5b6d4e724f6ced67f0ad1bb006c2ea643488fcfef994d7f52
- languageName: node
- linkType: hard
-
-"cypress@npm:^12.0.0":
- version: 12.17.4
- resolution: "cypress@npm:12.17.4"
- dependencies:
- "@cypress/request": 2.88.12
- "@cypress/xvfb": ^1.2.4
- "@types/node": ^16.18.39
- "@types/sinonjs__fake-timers": 8.1.1
- "@types/sizzle": ^2.3.2
- arch: ^2.2.0
- blob-util: ^2.0.2
- bluebird: ^3.7.2
- buffer: ^5.6.0
- cachedir: ^2.3.0
- chalk: ^4.1.0
- check-more-types: ^2.24.0
- cli-cursor: ^3.1.0
- cli-table3: ~0.6.1
- commander: ^6.2.1
- common-tags: ^1.8.0
- dayjs: ^1.10.4
- debug: ^4.3.4
- enquirer: ^2.3.6
- eventemitter2: 6.4.7
- execa: 4.1.0
- executable: ^4.1.1
- extract-zip: 2.0.1
- figures: ^3.2.0
- fs-extra: ^9.1.0
- getos: ^3.2.1
- is-ci: ^3.0.0
- is-installed-globally: ~0.4.0
- lazy-ass: ^1.6.0
- listr2: ^3.8.3
- lodash: ^4.17.21
- log-symbols: ^4.0.0
- minimist: ^1.2.8
- ospath: ^1.2.2
- pretty-bytes: ^5.6.0
- process: ^0.11.10
- proxy-from-env: 1.0.0
- request-progress: ^3.0.0
- semver: ^7.5.3
- supports-color: ^8.1.1
- tmp: ~0.2.1
- untildify: ^4.0.0
- yauzl: ^2.10.0
- bin:
- cypress: bin/cypress
- checksum: c9c79f5493b23e9c8cfb92d45d50ea9d0fae54210dde203bfa794a79436faf60108d826fe9007a7d67fddf7919802ad8f006b7ae56c5c198c75d5bc85bbc851b
- languageName: node
- linkType: hard
-
-"dashdash@npm:^1.12.0":
- version: 1.14.1
- resolution: "dashdash@npm:1.14.1"
- dependencies:
- assert-plus: ^1.0.0
- checksum: 3634c249570f7f34e3d34f866c93f866c5b417f0dd616275decae08147dcdf8fccfaa5947380ccfb0473998ea3a8057c0b4cd90c875740ee685d0624b2983598
- languageName: node
- linkType: hard
-
-"dayjs@npm:^1.10.4":
- version: 1.11.5
- resolution: "dayjs@npm:1.11.5"
- checksum: e3bbaa7b4883b31be4bf75a181f1447fbb19800c29b332852125aab96baeff3ac232dcba8b88c4ea17d3b636c99dac5fb9d1af4bb6ae26615698bbc4a852dffb
- languageName: node
- linkType: hard
-
-"debug@npm:^3.1.0":
- version: 3.2.7
- resolution: "debug@npm:3.2.7"
- dependencies:
- ms: ^2.1.1
- checksum: b3d8c5940799914d30314b7c3304a43305fd0715581a919dacb8b3176d024a782062368405b47491516d2091d6462d4d11f2f4974a405048094f8bfebfa3071c
- languageName: node
- linkType: hard
-
-"debug@npm:^4.1.1, debug@npm:^4.3.4":
- version: 4.3.4
- resolution: "debug@npm:4.3.4"
- dependencies:
- ms: 2.1.2
- peerDependenciesMeta:
- supports-color:
- optional: true
- checksum: 3dbad3f94ea64f34431a9cbf0bafb61853eda57bff2880036153438f50fb5a84f27683ba0d8e5426bf41a8c6ff03879488120cf5b3a761e77953169c0600a708
- languageName: node
- linkType: hard
-
-"delayed-stream@npm:~1.0.0":
- version: 1.0.0
- resolution: "delayed-stream@npm:1.0.0"
- checksum: 46fe6e83e2cb1d85ba50bd52803c68be9bd953282fa7096f51fc29edd5d67ff84ff753c51966061e5ba7cb5e47ef6d36a91924eddb7f3f3483b1c560f77a0020
- languageName: node
- linkType: hard
-
-"ecc-jsbn@npm:~0.1.1":
- version: 0.1.2
- resolution: "ecc-jsbn@npm:0.1.2"
- dependencies:
- jsbn: ~0.1.0
- safer-buffer: ^2.1.0
- checksum: 22fef4b6203e5f31d425f5b711eb389e4c6c2723402e389af394f8411b76a488fa414d309d866e2b577ce3e8462d344205545c88a8143cc21752a5172818888a
- languageName: node
- linkType: hard
-
-"emoji-regex@npm:^8.0.0":
- version: 8.0.0
- resolution: "emoji-regex@npm:8.0.0"
- checksum: d4c5c39d5a9868b5fa152f00cada8a936868fd3367f33f71be515ecee4c803132d11b31a6222b2571b1e5f7e13890156a94880345594d0ce7e3c9895f560f192
- languageName: node
- linkType: hard
-
-"end-of-stream@npm:^1.1.0":
- version: 1.4.4
- resolution: "end-of-stream@npm:1.4.4"
- dependencies:
- once: ^1.4.0
- checksum: 530a5a5a1e517e962854a31693dbb5c0b2fc40b46dad2a56a2deec656ca040631124f4795823acc68238147805f8b021abbe221f4afed5ef3c8e8efc2024908b
- languageName: node
- linkType: hard
-
-"enquirer@npm:^2.3.6":
- version: 2.3.6
- resolution: "enquirer@npm:2.3.6"
- dependencies:
- ansi-colors: ^4.1.1
- checksum: 1c0911e14a6f8d26721c91e01db06092a5f7675159f0261d69c403396a385afd13dd76825e7678f66daffa930cfaa8d45f506fb35f818a2788463d022af1b884
- languageName: node
- linkType: hard
-
-"escape-string-regexp@npm:^1.0.5":
- version: 1.0.5
- resolution: "escape-string-regexp@npm:1.0.5"
- checksum: 6092fda75c63b110c706b6a9bfde8a612ad595b628f0bd2147eea1d3406723020810e591effc7db1da91d80a71a737a313567c5abb3813e8d9c71f4aa595b410
- languageName: node
- linkType: hard
-
-"eventemitter2@npm:6.4.7":
- version: 6.4.7
- resolution: "eventemitter2@npm:6.4.7"
- checksum: 1b36a77e139d6965ebf3a36c01fa00c089ae6b80faa1911e52888f40b3a7057b36a2cc45dcd1ad87cda3798fe7b97a0aabcbb8175a8b96092a23bb7d0f039e66
- languageName: node
- linkType: hard
-
-"execa@npm:4.1.0":
- version: 4.1.0
- resolution: "execa@npm:4.1.0"
- dependencies:
- cross-spawn: ^7.0.0
- get-stream: ^5.0.0
- human-signals: ^1.1.1
- is-stream: ^2.0.0
- merge-stream: ^2.0.0
- npm-run-path: ^4.0.0
- onetime: ^5.1.0
- signal-exit: ^3.0.2
- strip-final-newline: ^2.0.0
- checksum: e30d298934d9c52f90f3847704fd8224e849a081ab2b517bbc02f5f7732c24e56a21f14cb96a08256deffeb2d12b2b7cb7e2b014a12fb36f8d3357e06417ed55
- languageName: node
- linkType: hard
-
-"executable@npm:^4.1.1":
- version: 4.1.1
- resolution: "executable@npm:4.1.1"
- dependencies:
- pify: ^2.2.0
- checksum: f01927ce59bccec804e171bf859a26e362c1f50aa9ebc69f7cafdcce3859d29d4b6267fd47237c18b0a1830614bd3f0ee14b7380d9bad18a4e7af9b5f0b6984f
- languageName: node
- linkType: hard
-
-"extend@npm:~3.0.2":
- version: 3.0.2
- resolution: "extend@npm:3.0.2"
- checksum: a50a8309ca65ea5d426382ff09f33586527882cf532931cb08ca786ea3146c0553310bda688710ff61d7668eba9f96b923fe1420cdf56a2c3eaf30fcab87b515
- languageName: node
- linkType: hard
-
-"extract-zip@npm:2.0.1":
- version: 2.0.1
- resolution: "extract-zip@npm:2.0.1"
- dependencies:
- "@types/yauzl": ^2.9.1
- debug: ^4.1.1
- get-stream: ^5.1.0
- yauzl: ^2.10.0
- dependenciesMeta:
- "@types/yauzl":
- optional: true
- bin:
- extract-zip: cli.js
- checksum: 8cbda9debdd6d6980819cc69734d874ddd71051c9fe5bde1ef307ebcedfe949ba57b004894b585f758b7c9eeeea0e3d87f2dda89b7d25320459c2c9643ebb635
- languageName: node
- linkType: hard
-
-"extsprintf@npm:1.3.0":
- version: 1.3.0
- resolution: "extsprintf@npm:1.3.0"
- checksum: cee7a4a1e34cffeeec18559109de92c27517e5641991ec6bab849aa64e3081022903dd53084f2080d0d2530803aa5ee84f1e9de642c365452f9e67be8f958ce2
- languageName: node
- linkType: hard
-
-"extsprintf@npm:^1.2.0":
- version: 1.4.1
- resolution: "extsprintf@npm:1.4.1"
- checksum: a2f29b241914a8d2bad64363de684821b6b1609d06ae68d5b539e4de6b28659715b5bea94a7265201603713b7027d35399d10b0548f09071c5513e65e8323d33
- languageName: node
- linkType: hard
-
-"fd-slicer@npm:~1.1.0":
- version: 1.1.0
- resolution: "fd-slicer@npm:1.1.0"
- dependencies:
- pend: ~1.2.0
- checksum: c8585fd5713f4476eb8261150900d2cb7f6ff2d87f8feb306ccc8a1122efd152f1783bdb2b8dc891395744583436bfd8081d8e63ece0ec8687eeefea394d4ff2
- languageName: node
- linkType: hard
-
-"figures@npm:^3.2.0":
- version: 3.2.0
- resolution: "figures@npm:3.2.0"
- dependencies:
- escape-string-regexp: ^1.0.5
- checksum: 85a6ad29e9aca80b49b817e7c89ecc4716ff14e3779d9835af554db91bac41c0f289c418923519392a1e582b4d10482ad282021330cd045bb7b80c84152f2a2b
- languageName: node
- linkType: hard
-
-"forever-agent@npm:~0.6.1":
- version: 0.6.1
- resolution: "forever-agent@npm:0.6.1"
- checksum: 766ae6e220f5fe23676bb4c6a99387cec5b7b62ceb99e10923376e27bfea72f3c3aeec2ba5f45f3f7ba65d6616965aa7c20b15002b6860833bb6e394dea546a8
- languageName: node
- linkType: hard
-
-"form-data@npm:~2.3.2":
- version: 2.3.3
- resolution: "form-data@npm:2.3.3"
- dependencies:
- asynckit: ^0.4.0
- combined-stream: ^1.0.6
- mime-types: ^2.1.12
- checksum: 10c1780fa13dbe1ff3100114c2ce1f9307f8be10b14bf16e103815356ff567b6be39d70fc4a40f8990b9660012dc24b0f5e1dde1b6426166eb23a445ba068ca3
- languageName: node
- linkType: hard
-
-"fs-extra@npm:^9.1.0":
- version: 9.1.0
- resolution: "fs-extra@npm:9.1.0"
- dependencies:
- at-least-node: ^1.0.0
- graceful-fs: ^4.2.0
- jsonfile: ^6.0.1
- universalify: ^2.0.0
- checksum: ba71ba32e0faa74ab931b7a0031d1523c66a73e225de7426e275e238e312d07313d2da2d33e34a52aa406c8763ade5712eb3ec9ba4d9edce652bcacdc29e6b20
- languageName: node
- linkType: hard
-
-"fs.realpath@npm:^1.0.0":
- version: 1.0.0
- resolution: "fs.realpath@npm:1.0.0"
- checksum: 99ddea01a7e75aa276c250a04eedeffe5662bce66c65c07164ad6264f9de18fb21be9433ead460e54cff20e31721c811f4fb5d70591799df5f85dce6d6746fd0
- languageName: node
- linkType: hard
-
-"function-bind@npm:^1.1.1":
- version: 1.1.1
- resolution: "function-bind@npm:1.1.1"
- checksum: b32fbaebb3f8ec4969f033073b43f5c8befbb58f1a79e12f1d7490358150359ebd92f49e72ff0144f65f2c48ea2a605bff2d07965f548f6474fd8efd95bf361a
- languageName: node
- linkType: hard
-
-"get-intrinsic@npm:^1.0.2":
- version: 1.2.1
- resolution: "get-intrinsic@npm:1.2.1"
- dependencies:
- function-bind: ^1.1.1
- has: ^1.0.3
- has-proto: ^1.0.1
- has-symbols: ^1.0.3
- checksum: 5b61d88552c24b0cf6fa2d1b3bc5459d7306f699de060d76442cce49a4721f52b8c560a33ab392cf5575b7810277d54ded9d4d39a1ea61855619ebc005aa7e5f
- languageName: node
- linkType: hard
-
-"get-stream@npm:^5.0.0, get-stream@npm:^5.1.0":
- version: 5.2.0
- resolution: "get-stream@npm:5.2.0"
- dependencies:
- pump: ^3.0.0
- checksum: 8bc1a23174a06b2b4ce600df38d6c98d2ef6d84e020c1ddad632ad75bac4e092eeb40e4c09e0761c35fc2dbc5e7fff5dab5e763a383582c4a167dd69a905bd12
- languageName: node
- linkType: hard
-
-"getos@npm:^3.2.1":
- version: 3.2.1
- resolution: "getos@npm:3.2.1"
- dependencies:
- async: ^3.2.0
- checksum: 42fd78a66d47cebd3e09de5566cc0044e034b08f4a000a310dbd89a77b02c65d8f4002554bfa495ea5bdc4fa9d515f5ac785a7cc474ba45383cc697f865eeaf1
- languageName: node
- linkType: hard
-
-"getpass@npm:^0.1.1":
- version: 0.1.7
- resolution: "getpass@npm:0.1.7"
- dependencies:
- assert-plus: ^1.0.0
- checksum: ab18d55661db264e3eac6012c2d3daeafaab7a501c035ae0ccb193c3c23e9849c6e29b6ac762b9c2adae460266f925d55a3a2a3a3c8b94be2f222df94d70c046
- languageName: node
- linkType: hard
-
-"glob@npm:^7.1.3":
- version: 7.2.3
- resolution: "glob@npm:7.2.3"
- dependencies:
- fs.realpath: ^1.0.0
- inflight: ^1.0.4
- inherits: 2
- minimatch: ^3.1.1
- once: ^1.3.0
- path-is-absolute: ^1.0.0
- checksum: 29452e97b38fa704dabb1d1045350fb2467cf0277e155aa9ff7077e90ad81d1ea9d53d3ee63bd37c05b09a065e90f16aec4a65f5b8de401d1dac40bc5605d133
- languageName: node
- linkType: hard
-
-"global-dirs@npm:^3.0.0":
- version: 3.0.0
- resolution: "global-dirs@npm:3.0.0"
- dependencies:
- ini: 2.0.0
- checksum: 953c17cf14bf6ee0e2100ae82a0d779934eed8a3ec5c94a7a4f37c5b3b592c31ea015fb9a15cf32484de13c79f4a814f3015152f3e1d65976cfbe47c1bfe4a88
- languageName: node
- linkType: hard
-
-"graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0":
- version: 4.2.10
- resolution: "graceful-fs@npm:4.2.10"
- checksum: 3f109d70ae123951905d85032ebeae3c2a5a7a997430df00ea30df0e3a6c60cf6689b109654d6fdacd28810a053348c4d14642da1d075049e6be1ba5216218da
- languageName: node
- linkType: hard
-
-"has-flag@npm:^4.0.0":
- version: 4.0.0
- resolution: "has-flag@npm:4.0.0"
- checksum: 261a1357037ead75e338156b1f9452c016a37dcd3283a972a30d9e4a87441ba372c8b81f818cd0fbcd9c0354b4ae7e18b9e1afa1971164aef6d18c2b6095a8ad
- languageName: node
- linkType: hard
-
-"has-proto@npm:^1.0.1":
- version: 1.0.1
- resolution: "has-proto@npm:1.0.1"
- checksum: febc5b5b531de8022806ad7407935e2135f1cc9e64636c3916c6842bd7995994ca3b29871ecd7954bd35f9e2986c17b3b227880484d22259e2f8e6ce63fd383e
- languageName: node
- linkType: hard
-
-"has-symbols@npm:^1.0.3":
- version: 1.0.3
- resolution: "has-symbols@npm:1.0.3"
- checksum: a054c40c631c0d5741a8285010a0777ea0c068f99ed43e5d6eb12972da223f8af553a455132fdb0801bdcfa0e0f443c0c03a68d8555aa529b3144b446c3f2410
- languageName: node
- linkType: hard
-
-"has@npm:^1.0.3":
- version: 1.0.3
- resolution: "has@npm:1.0.3"
- dependencies:
- function-bind: ^1.1.1
- checksum: b9ad53d53be4af90ce5d1c38331e712522417d017d5ef1ebd0507e07c2fbad8686fffb8e12ddecd4c39ca9b9b47431afbb975b8abf7f3c3b82c98e9aad052792
- languageName: node
- linkType: hard
-
-"http-signature@npm:~1.3.6":
- version: 1.3.6
- resolution: "http-signature@npm:1.3.6"
- dependencies:
- assert-plus: ^1.0.0
- jsprim: ^2.0.2
- sshpk: ^1.14.1
- checksum: 10be2af4764e71fee0281392937050201ee576ac755c543f570d6d87134ce5e858663fe999a7adb3e4e368e1e356d0d7fec6b9542295b875726ff615188e7a0c
- languageName: node
- linkType: hard
-
-"human-signals@npm:^1.1.1":
- version: 1.1.1
- resolution: "human-signals@npm:1.1.1"
- checksum: d587647c9e8ec24e02821b6be7de5a0fc37f591f6c4e319b3054b43fd4c35a70a94c46fc74d8c1a43c47fde157d23acd7421f375e1c1365b09a16835b8300205
- languageName: node
- linkType: hard
-
-"ieee754@npm:^1.1.13":
- version: 1.2.1
- resolution: "ieee754@npm:1.2.1"
- checksum: 5144c0c9815e54ada181d80a0b810221a253562422e7c6c3a60b1901154184f49326ec239d618c416c1c5945a2e197107aee8d986a3dd836b53dffefd99b5e7e
- languageName: node
- linkType: hard
-
-"indent-string@npm:^4.0.0":
- version: 4.0.0
- resolution: "indent-string@npm:4.0.0"
- checksum: 824cfb9929d031dabf059bebfe08cf3137365e112019086ed3dcff6a0a7b698cb80cf67ccccde0e25b9e2d7527aa6cc1fed1ac490c752162496caba3e6699612
- languageName: node
- linkType: hard
-
-"inflight@npm:^1.0.4":
- version: 1.0.6
- resolution: "inflight@npm:1.0.6"
- dependencies:
- once: ^1.3.0
- wrappy: 1
- checksum: f4f76aa072ce19fae87ce1ef7d221e709afb59d445e05d47fba710e85470923a75de35bfae47da6de1b18afc3ce83d70facf44cfb0aff89f0a3f45c0a0244dfd
- languageName: node
- linkType: hard
-
-"inherits@npm:2":
- version: 2.0.4
- resolution: "inherits@npm:2.0.4"
- checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1
- languageName: node
- linkType: hard
-
-"ini@npm:2.0.0":
- version: 2.0.0
- resolution: "ini@npm:2.0.0"
- checksum: e7aadc5fb2e4aefc666d74ee2160c073995a4061556b1b5b4241ecb19ad609243b9cceafe91bae49c219519394bbd31512516cb22a3b1ca6e66d869e0447e84e
- languageName: node
- linkType: hard
-
-"is-ci@npm:^3.0.0":
- version: 3.0.1
- resolution: "is-ci@npm:3.0.1"
- dependencies:
- ci-info: ^3.2.0
- bin:
- is-ci: bin.js
- checksum: 192c66dc7826d58f803ecae624860dccf1899fc1f3ac5505284c0a5cf5f889046ffeb958fa651e5725d5705c5bcb14f055b79150ea5fcad7456a9569de60260e
- languageName: node
- linkType: hard
-
-"is-fullwidth-code-point@npm:^3.0.0":
- version: 3.0.0
- resolution: "is-fullwidth-code-point@npm:3.0.0"
- checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348
- languageName: node
- linkType: hard
-
-"is-installed-globally@npm:~0.4.0":
- version: 0.4.0
- resolution: "is-installed-globally@npm:0.4.0"
- dependencies:
- global-dirs: ^3.0.0
- is-path-inside: ^3.0.2
- checksum: 3359840d5982d22e9b350034237b2cda2a12bac1b48a721912e1ab8e0631dd07d45a2797a120b7b87552759a65ba03e819f1bd63f2d7ab8657ec0b44ee0bf399
- languageName: node
- linkType: hard
-
-"is-path-inside@npm:^3.0.2":
- version: 3.0.3
- resolution: "is-path-inside@npm:3.0.3"
- checksum: abd50f06186a052b349c15e55b182326f1936c89a78bf6c8f2b707412517c097ce04bc49a0ca221787bc44e1049f51f09a2ffb63d22899051988d3a618ba13e9
- languageName: node
- linkType: hard
-
-"is-stream@npm:^2.0.0":
- version: 2.0.1
- resolution: "is-stream@npm:2.0.1"
- checksum: b8e05ccdf96ac330ea83c12450304d4a591f9958c11fd17bed240af8d5ffe08aedafa4c0f4cfccd4d28dc9d4d129daca1023633d5c11601a6cbc77521f6fae66
- languageName: node
- linkType: hard
-
-"is-typedarray@npm:~1.0.0":
- version: 1.0.0
- resolution: "is-typedarray@npm:1.0.0"
- checksum: 3508c6cd0a9ee2e0df2fa2e9baabcdc89e911c7bd5cf64604586697212feec525aa21050e48affb5ffc3df20f0f5d2e2cf79b08caa64e1ccc9578e251763aef7
- languageName: node
- linkType: hard
-
-"is-unicode-supported@npm:^0.1.0":
- version: 0.1.0
- resolution: "is-unicode-supported@npm:0.1.0"
- checksum: a2aab86ee7712f5c2f999180daaba5f361bdad1efadc9610ff5b8ab5495b86e4f627839d085c6530363c6d6d4ecbde340fb8e54bdb83da4ba8e0865ed5513c52
- languageName: node
- linkType: hard
-
-"isexe@npm:^2.0.0":
- version: 2.0.0
- resolution: "isexe@npm:2.0.0"
- checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62
- languageName: node
- linkType: hard
-
-"isstream@npm:~0.1.2":
- version: 0.1.2
- resolution: "isstream@npm:0.1.2"
- checksum: 1eb2fe63a729f7bdd8a559ab552c69055f4f48eb5c2f03724430587c6f450783c8f1cd936c1c952d0a927925180fcc892ebd5b174236cf1065d4bd5bdb37e963
- languageName: node
- linkType: hard
-
-"jsbn@npm:~0.1.0":
- version: 0.1.1
- resolution: "jsbn@npm:0.1.1"
- checksum: e5ff29c1b8d965017ef3f9c219dacd6e40ad355c664e277d31246c90545a02e6047018c16c60a00f36d561b3647215c41894f5d869ada6908a2e0ce4200c88f2
- languageName: node
- linkType: hard
-
-"json-schema@npm:0.4.0":
- version: 0.4.0
- resolution: "json-schema@npm:0.4.0"
- checksum: 66389434c3469e698da0df2e7ac5a3281bcff75e797a5c127db7c5b56270e01ae13d9afa3c03344f76e32e81678337a8c912bdbb75101c62e487dc3778461d72
- languageName: node
- linkType: hard
-
-"json-stringify-safe@npm:~5.0.1":
- version: 5.0.1
- resolution: "json-stringify-safe@npm:5.0.1"
- checksum: 48ec0adad5280b8a96bb93f4563aa1667fd7a36334f79149abd42446d0989f2ddc58274b479f4819f1f00617957e6344c886c55d05a4e15ebb4ab931e4a6a8ee
- languageName: node
- linkType: hard
-
-"jsonfile@npm:^6.0.1":
- version: 6.1.0
- resolution: "jsonfile@npm:6.1.0"
- dependencies:
- graceful-fs: ^4.1.6
- universalify: ^2.0.0
- dependenciesMeta:
- graceful-fs:
- optional: true
- checksum: 7af3b8e1ac8fe7f1eccc6263c6ca14e1966fcbc74b618d3c78a0a2075579487547b94f72b7a1114e844a1e15bb00d440e5d1720bfc4612d790a6f285d5ea8354
- languageName: node
- linkType: hard
-
-"jsprim@npm:^2.0.2":
- version: 2.0.2
- resolution: "jsprim@npm:2.0.2"
- dependencies:
- assert-plus: 1.0.0
- extsprintf: 1.3.0
- json-schema: 0.4.0
- verror: 1.10.0
- checksum: d175f6b1991e160cb0aa39bc857da780e035611986b5492f32395411879fdaf4e513d98677f08f7352dac93a16b66b8361c674b86a3fa406e2e7af6b26321838
- languageName: node
- linkType: hard
-
-"lazy-ass@npm:^1.6.0":
- version: 1.6.0
- resolution: "lazy-ass@npm:1.6.0"
- checksum: 5a3ebb17915b03452320804466345382a6c25ac782ec4874fecdb2385793896cd459be2f187dc7def8899180c32ee0ab9a1aa7fe52193ac3ff3fe29bb0591729
- languageName: node
- linkType: hard
-
-"listr2@npm:^3.8.3":
- version: 3.14.0
- resolution: "listr2@npm:3.14.0"
- dependencies:
- cli-truncate: ^2.1.0
- colorette: ^2.0.16
- log-update: ^4.0.0
- p-map: ^4.0.0
- rfdc: ^1.3.0
- rxjs: ^7.5.1
- through: ^2.3.8
- wrap-ansi: ^7.0.0
- peerDependencies:
- enquirer: ">= 2.3.0 < 3"
- peerDependenciesMeta:
- enquirer:
- optional: true
- checksum: fdb8b2d6bdf5df9371ebd5082bee46c6d0ca3d1e5f2b11fbb5a127839855d5f3da9d4968fce94f0a5ec67cac2459766abbb1faeef621065ebb1829b11ef9476d
- languageName: node
- linkType: hard
-
-"lodash.once@npm:^4.1.1":
- version: 4.1.1
- resolution: "lodash.once@npm:4.1.1"
- checksum: d768fa9f9b4e1dc6453be99b753906f58990e0c45e7b2ca5a3b40a33111e5d17f6edf2f768786e2716af90a8e78f8f91431ab8435f761fef00f9b0c256f6d245
- languageName: node
- linkType: hard
-
-"lodash@npm:^4.17.21":
- version: 4.17.21
- resolution: "lodash@npm:4.17.21"
- checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7
- languageName: node
- linkType: hard
-
-"log-symbols@npm:^4.0.0":
- version: 4.1.0
- resolution: "log-symbols@npm:4.1.0"
- dependencies:
- chalk: ^4.1.0
- is-unicode-supported: ^0.1.0
- checksum: fce1497b3135a0198803f9f07464165e9eb83ed02ceb2273930a6f8a508951178d8cf4f0378e9d28300a2ed2bc49050995d2bd5f53ab716bb15ac84d58c6ef74
- languageName: node
- linkType: hard
-
-"log-update@npm:^4.0.0":
- version: 4.0.0
- resolution: "log-update@npm:4.0.0"
- dependencies:
- ansi-escapes: ^4.3.0
- cli-cursor: ^3.1.0
- slice-ansi: ^4.0.0
- wrap-ansi: ^6.2.0
- checksum: ae2f85bbabc1906034154fb7d4c4477c79b3e703d22d78adee8b3862fa913942772e7fa11713e3d96fb46de4e3cabefbf5d0a544344f03b58d3c4bff52aa9eb2
- languageName: node
- linkType: hard
-
-"lru-cache@npm:^6.0.0":
- version: 6.0.0
- resolution: "lru-cache@npm:6.0.0"
- dependencies:
- yallist: ^4.0.0
- checksum: f97f499f898f23e4585742138a22f22526254fdba6d75d41a1c2526b3b6cc5747ef59c5612ba7375f42aca4f8461950e925ba08c991ead0651b4918b7c978297
- languageName: node
- linkType: hard
-
-"merge-stream@npm:^2.0.0":
- version: 2.0.0
- resolution: "merge-stream@npm:2.0.0"
- checksum: 6fa4dcc8d86629705cea944a4b88ef4cb0e07656ebf223fa287443256414283dd25d91c1cd84c77987f2aec5927af1a9db6085757cb43d90eb170ebf4b47f4f4
- languageName: node
- linkType: hard
-
-"mime-db@npm:1.52.0":
- version: 1.52.0
- resolution: "mime-db@npm:1.52.0"
- checksum: 0d99a03585f8b39d68182803b12ac601d9c01abfa28ec56204fa330bc9f3d1c5e14beb049bafadb3dbdf646dfb94b87e24d4ec7b31b7279ef906a8ea9b6a513f
- languageName: node
- linkType: hard
-
-"mime-types@npm:^2.1.12, mime-types@npm:~2.1.19":
- version: 2.1.35
- resolution: "mime-types@npm:2.1.35"
- dependencies:
- mime-db: 1.52.0
- checksum: 89a5b7f1def9f3af5dad6496c5ed50191ae4331cc5389d7c521c8ad28d5fdad2d06fd81baf38fed813dc4e46bb55c8145bb0ff406330818c9cf712fb2e9b3836
- languageName: node
- linkType: hard
-
-"mimic-fn@npm:^2.1.0":
- version: 2.1.0
- resolution: "mimic-fn@npm:2.1.0"
- checksum: d2421a3444848ce7f84bd49115ddacff29c15745db73f54041edc906c14b131a38d05298dae3081667627a59b2eb1ca4b436ff2e1b80f69679522410418b478a
- languageName: node
- linkType: hard
-
-"minimatch@npm:^3.1.1":
- version: 3.1.2
- resolution: "minimatch@npm:3.1.2"
- dependencies:
- brace-expansion: ^1.1.7
- checksum: c154e566406683e7bcb746e000b84d74465b3a832c45d59912b9b55cd50dee66e5c4b1e5566dba26154040e51672f9aa450a9aef0c97cfc7336b78b7afb9540a
- languageName: node
- linkType: hard
-
-"minimist@npm:^1.2.8":
- version: 1.2.8
- resolution: "minimist@npm:1.2.8"
- checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0
- languageName: node
- linkType: hard
-
-"ms@npm:2.1.2":
- version: 2.1.2
- resolution: "ms@npm:2.1.2"
- checksum: 673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f
- languageName: node
- linkType: hard
-
-"ms@npm:^2.1.1":
- version: 2.1.3
- resolution: "ms@npm:2.1.3"
- checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d
- languageName: node
- linkType: hard
-
-"npm-run-path@npm:^4.0.0":
- version: 4.0.1
- resolution: "npm-run-path@npm:4.0.1"
- dependencies:
- path-key: ^3.0.0
- checksum: 5374c0cea4b0bbfdfae62da7bbdf1e1558d338335f4cacf2515c282ff358ff27b2ecb91ffa5330a8b14390ac66a1e146e10700440c1ab868208430f56b5f4d23
- languageName: node
- linkType: hard
-
-"object-inspect@npm:^1.9.0":
- version: 1.12.3
- resolution: "object-inspect@npm:1.12.3"
- checksum: dabfd824d97a5f407e6d5d24810d888859f6be394d8b733a77442b277e0808860555176719c5905e765e3743a7cada6b8b0a3b85e5331c530fd418cc8ae991db
- languageName: node
- linkType: hard
-
-"once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0":
- version: 1.4.0
- resolution: "once@npm:1.4.0"
- dependencies:
- wrappy: 1
- checksum: cd0a88501333edd640d95f0d2700fbde6bff20b3d4d9bdc521bdd31af0656b5706570d6c6afe532045a20bb8dc0849f8332d6f2a416e0ba6d3d3b98806c7db68
- languageName: node
- linkType: hard
-
-"onetime@npm:^5.1.0":
- version: 5.1.2
- resolution: "onetime@npm:5.1.2"
- dependencies:
- mimic-fn: ^2.1.0
- checksum: 2478859ef817fc5d4e9c2f9e5728512ddd1dbc9fb7829ad263765bb6d3b91ce699d6e2332eef6b7dff183c2f490bd3349f1666427eaba4469fba0ac38dfd0d34
- languageName: node
- linkType: hard
-
-"ospath@npm:^1.2.2":
- version: 1.2.2
- resolution: "ospath@npm:1.2.2"
- checksum: 505f48a4f4f1c557d6c656ec985707726e3714721680139be037613e903aa8c8fa4ddd8d1342006f9b2dc0065e6e20f8b7bea2ee05354f31257044790367b347
- languageName: node
- linkType: hard
-
-"p-map@npm:^4.0.0":
- version: 4.0.0
- resolution: "p-map@npm:4.0.0"
- dependencies:
- aggregate-error: ^3.0.0
- checksum: cb0ab21ec0f32ddffd31dfc250e3afa61e103ef43d957cc45497afe37513634589316de4eb88abdfd969fe6410c22c0b93ab24328833b8eb1ccc087fc0442a1c
- languageName: node
- linkType: hard
-
-"path-is-absolute@npm:^1.0.0":
- version: 1.0.1
- resolution: "path-is-absolute@npm:1.0.1"
- checksum: 060840f92cf8effa293bcc1bea81281bd7d363731d214cbe5c227df207c34cd727430f70c6037b5159c8a870b9157cba65e775446b0ab06fd5ecc7e54615a3b8
- languageName: node
- linkType: hard
-
-"path-key@npm:^3.0.0, path-key@npm:^3.1.0":
- version: 3.1.1
- resolution: "path-key@npm:3.1.1"
- checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020
- languageName: node
- linkType: hard
-
-"pend@npm:~1.2.0":
- version: 1.2.0
- resolution: "pend@npm:1.2.0"
- checksum: 6c72f5243303d9c60bd98e6446ba7d30ae29e3d56fdb6fae8767e8ba6386f33ee284c97efe3230a0d0217e2b1723b8ab490b1bbf34fcbb2180dbc8a9de47850d
- languageName: node
- linkType: hard
-
-"performance-now@npm:^2.1.0":
- version: 2.1.0
- resolution: "performance-now@npm:2.1.0"
- checksum: 534e641aa8f7cba160f0afec0599b6cecefbb516a2e837b512be0adbe6c1da5550e89c78059c7fabc5c9ffdf6627edabe23eb7c518c4500067a898fa65c2b550
- languageName: node
- linkType: hard
-
-"pify@npm:^2.2.0":
- version: 2.3.0
- resolution: "pify@npm:2.3.0"
- checksum: 9503aaeaf4577acc58642ad1d25c45c6d90288596238fb68f82811c08104c800e5a7870398e9f015d82b44ecbcbef3dc3d4251a1cbb582f6e5959fe09884b2ba
- languageName: node
- linkType: hard
-
-"pretty-bytes@npm:^5.6.0":
- version: 5.6.0
- resolution: "pretty-bytes@npm:5.6.0"
- checksum: 9c082500d1e93434b5b291bd651662936b8bd6204ec9fa17d563116a192d6d86b98f6d328526b4e8d783c07d5499e2614a807520249692da9ec81564b2f439cd
- languageName: node
- linkType: hard
-
-"process@npm:^0.11.10":
- version: 0.11.10
- resolution: "process@npm:0.11.10"
- checksum: bfcce49814f7d172a6e6a14d5fa3ac92cc3d0c3b9feb1279774708a719e19acd673995226351a082a9ae99978254e320ccda4240ddc474ba31a76c79491ca7c3
- languageName: node
- linkType: hard
-
-"proxy-from-env@npm:1.0.0":
- version: 1.0.0
- resolution: "proxy-from-env@npm:1.0.0"
- checksum: 292e28d1de0c315958d71d8315eb546dd3cd8c8cbc2dab7c54eeb9f5c17f421771964ad0b5e1f77011bab2305bdae42e1757ce33bdb1ccc3e87732322a8efcf1
- languageName: node
- linkType: hard
-
-"psl@npm:^1.1.33":
- version: 1.9.0
- resolution: "psl@npm:1.9.0"
- checksum: 20c4277f640c93d393130673f392618e9a8044c6c7bf61c53917a0fddb4952790f5f362c6c730a9c32b124813e173733f9895add8d26f566ed0ea0654b2e711d
- languageName: node
- linkType: hard
-
-"pump@npm:^3.0.0":
- version: 3.0.0
- resolution: "pump@npm:3.0.0"
- dependencies:
- end-of-stream: ^1.1.0
- once: ^1.3.1
- checksum: e42e9229fba14732593a718b04cb5e1cfef8254544870997e0ecd9732b189a48e1256e4e5478148ecb47c8511dca2b09eae56b4d0aad8009e6fac8072923cfc9
- languageName: node
- linkType: hard
-
-"punycode@npm:^2.1.1":
- version: 2.1.1
- resolution: "punycode@npm:2.1.1"
- checksum: 823bf443c6dd14f669984dea25757b37993f67e8d94698996064035edd43bed8a5a17a9f12e439c2b35df1078c6bec05a6c86e336209eb1061e8025c481168e8
- languageName: node
- linkType: hard
-
-"qs@npm:~6.10.3":
- version: 6.10.4
- resolution: "qs@npm:6.10.4"
- dependencies:
- side-channel: ^1.0.4
- checksum: 31e4fedd759d01eae52dde6692abab175f9af3e639993c5caaa513a2a3607b34d8058d3ae52ceeccf37c3025f22ed5e90e9ddd6c2537e19c0562ddd10dc5b1eb
- languageName: node
- linkType: hard
-
-"querystringify@npm:^2.1.1":
- version: 2.2.0
- resolution: "querystringify@npm:2.2.0"
- checksum: 5641ea231bad7ef6d64d9998faca95611ed4b11c2591a8cae741e178a974f6a8e0ebde008475259abe1621cb15e692404e6b6626e927f7b849d5c09392604b15
- languageName: node
- linkType: hard
-
-"request-progress@npm:^3.0.0":
- version: 3.0.0
- resolution: "request-progress@npm:3.0.0"
- dependencies:
- throttleit: ^1.0.0
- checksum: 6ea1761dcc8a8b7b5894afd478c0286aa31bd69438d7050294bd4fd0d0b3e09b5cde417d38deef9c49809039c337d8744e4bb49d8632b0c3e4ffa5e8a687e0fd
- languageName: node
- linkType: hard
-
-"requires-port@npm:^1.0.0":
- version: 1.0.0
- resolution: "requires-port@npm:1.0.0"
- checksum: eee0e303adffb69be55d1a214e415cf42b7441ae858c76dfc5353148644f6fd6e698926fc4643f510d5c126d12a705e7c8ed7e38061113bdf37547ab356797ff
- languageName: node
- linkType: hard
-
-"restore-cursor@npm:^3.1.0":
- version: 3.1.0
- resolution: "restore-cursor@npm:3.1.0"
- dependencies:
- onetime: ^5.1.0
- signal-exit: ^3.0.2
- checksum: f877dd8741796b909f2a82454ec111afb84eb45890eb49ac947d87991379406b3b83ff9673a46012fca0d7844bb989f45cc5b788254cf1a39b6b5a9659de0630
- languageName: node
- linkType: hard
-
-"rfdc@npm:^1.3.0":
- version: 1.3.0
- resolution: "rfdc@npm:1.3.0"
- checksum: fb2ba8512e43519983b4c61bd3fa77c0f410eff6bae68b08614437bc3f35f91362215f7b4a73cbda6f67330b5746ce07db5dd9850ad3edc91271ad6deea0df32
- languageName: node
- linkType: hard
-
-"rimraf@npm:^3.0.0":
- version: 3.0.2
- resolution: "rimraf@npm:3.0.2"
- dependencies:
- glob: ^7.1.3
- bin:
- rimraf: bin.js
- checksum: 87f4164e396f0171b0a3386cc1877a817f572148ee13a7e113b238e48e8a9f2f31d009a92ec38a591ff1567d9662c6b67fd8818a2dbbaed74bc26a87a2a4a9a0
- languageName: node
- linkType: hard
-
-"rxjs@npm:^7.5.1":
- version: 7.5.6
- resolution: "rxjs@npm:7.5.6"
- dependencies:
- tslib: ^2.1.0
- checksum: fc05f01364a74dac57490fb3e07ea63b422af04017fae1db641a009073f902ef69f285c5daac31359620dc8d9aee7d81e42b370ca2a8573d1feae0b04329383b
- languageName: node
- linkType: hard
-
-"safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.2":
- version: 5.2.1
- resolution: "safe-buffer@npm:5.2.1"
- checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491
- languageName: node
- linkType: hard
-
-"safer-buffer@npm:^2.0.2, safer-buffer@npm:^2.1.0, safer-buffer@npm:~2.1.0":
- version: 2.1.2
- resolution: "safer-buffer@npm:2.1.2"
- checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0
- languageName: node
- linkType: hard
-
-"semver@npm:^7.5.3":
- version: 7.5.4
- resolution: "semver@npm:7.5.4"
- dependencies:
- lru-cache: ^6.0.0
- bin:
- semver: bin/semver.js
- checksum: 12d8ad952fa353b0995bf180cdac205a4068b759a140e5d3c608317098b3575ac2f1e09182206bf2eb26120e1c0ed8fb92c48c592f6099680de56bb071423ca3
- languageName: node
- linkType: hard
-
-"shebang-command@npm:^2.0.0":
- version: 2.0.0
- resolution: "shebang-command@npm:2.0.0"
- dependencies:
- shebang-regex: ^3.0.0
- checksum: 6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa
- languageName: node
- linkType: hard
-
-"shebang-regex@npm:^3.0.0":
- version: 3.0.0
- resolution: "shebang-regex@npm:3.0.0"
- checksum: 1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222
- languageName: node
- linkType: hard
-
-"side-channel@npm:^1.0.4":
- version: 1.0.4
- resolution: "side-channel@npm:1.0.4"
- dependencies:
- call-bind: ^1.0.0
- get-intrinsic: ^1.0.2
- object-inspect: ^1.9.0
- checksum: 351e41b947079c10bd0858364f32bb3a7379514c399edb64ab3dce683933483fc63fb5e4efe0a15a2e8a7e3c436b6a91736ddb8d8c6591b0460a24bb4a1ee245
- languageName: node
- linkType: hard
-
-"signal-exit@npm:^3.0.2":
- version: 3.0.7
- resolution: "signal-exit@npm:3.0.7"
- checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318
- languageName: node
- linkType: hard
-
-"slice-ansi@npm:^3.0.0":
- version: 3.0.0
- resolution: "slice-ansi@npm:3.0.0"
- dependencies:
- ansi-styles: ^4.0.0
- astral-regex: ^2.0.0
- is-fullwidth-code-point: ^3.0.0
- checksum: 5ec6d022d12e016347e9e3e98a7eb2a592213a43a65f1b61b74d2c78288da0aded781f665807a9f3876b9daa9ad94f64f77d7633a0458876c3a4fdc4eb223f24
- languageName: node
- linkType: hard
-
-"slice-ansi@npm:^4.0.0":
- version: 4.0.0
- resolution: "slice-ansi@npm:4.0.0"
- dependencies:
- ansi-styles: ^4.0.0
- astral-regex: ^2.0.0
- is-fullwidth-code-point: ^3.0.0
- checksum: 4a82d7f085b0e1b070e004941ada3c40d3818563ac44766cca4ceadd2080427d337554f9f99a13aaeb3b4a94d9964d9466c807b3d7b7541d1ec37ee32d308756
- languageName: node
- linkType: hard
-
-"sshpk@npm:^1.14.1":
- version: 1.17.0
- resolution: "sshpk@npm:1.17.0"
- dependencies:
- asn1: ~0.2.3
- assert-plus: ^1.0.0
- bcrypt-pbkdf: ^1.0.0
- dashdash: ^1.12.0
- ecc-jsbn: ~0.1.1
- getpass: ^0.1.1
- jsbn: ~0.1.0
- safer-buffer: ^2.0.2
- tweetnacl: ~0.14.0
- bin:
- sshpk-conv: bin/sshpk-conv
- sshpk-sign: bin/sshpk-sign
- sshpk-verify: bin/sshpk-verify
- checksum: ba109f65c8e6c35133b8e6ed5576abeff8aa8d614824b7275ec3ca308f081fef483607c28d97780c1e235818b0f93ed8c8b56d0a5968d5a23fd6af57718c7597
- languageName: node
- linkType: hard
-
-"string-width@npm:^4.1.0, string-width@npm:^4.2.0":
- version: 4.2.3
- resolution: "string-width@npm:4.2.3"
- dependencies:
- emoji-regex: ^8.0.0
- is-fullwidth-code-point: ^3.0.0
- strip-ansi: ^6.0.1
- checksum: e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb
- languageName: node
- linkType: hard
-
-"strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1":
- version: 6.0.1
- resolution: "strip-ansi@npm:6.0.1"
- dependencies:
- ansi-regex: ^5.0.1
- checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c
- languageName: node
- linkType: hard
-
-"strip-final-newline@npm:^2.0.0":
- version: 2.0.0
- resolution: "strip-final-newline@npm:2.0.0"
- checksum: 69412b5e25731e1938184b5d489c32e340605bb611d6140344abc3421b7f3c6f9984b21dff296dfcf056681b82caa3bb4cc996a965ce37bcfad663e92eae9c64
- languageName: node
- linkType: hard
-
-"supports-color@npm:^7.1.0":
- version: 7.2.0
- resolution: "supports-color@npm:7.2.0"
- dependencies:
- has-flag: ^4.0.0
- checksum: 3dda818de06ebbe5b9653e07842d9479f3555ebc77e9a0280caf5a14fb877ffee9ed57007c3b78f5a6324b8dbeec648d9e97a24e2ed9fdb81ddc69ea07100f4a
- languageName: node
- linkType: hard
-
-"supports-color@npm:^8.1.1":
- version: 8.1.1
- resolution: "supports-color@npm:8.1.1"
- dependencies:
- has-flag: ^4.0.0
- checksum: c052193a7e43c6cdc741eb7f378df605636e01ad434badf7324f17fb60c69a880d8d8fcdcb562cf94c2350e57b937d7425ab5b8326c67c2adc48f7c87c1db406
- languageName: node
- linkType: hard
-
-"throttleit@npm:^1.0.0":
- version: 1.0.0
- resolution: "throttleit@npm:1.0.0"
- checksum: 1b2db4d2454202d589e8236c07a69d2fab838876d370030ebea237c34c0a7d1d9cf11c29f994531ebb00efd31e9728291042b7754f2798a8352ec4463455b659
- languageName: node
- linkType: hard
-
-"through@npm:^2.3.8":
- version: 2.3.8
- resolution: "through@npm:2.3.8"
- checksum: a38c3e059853c494af95d50c072b83f8b676a9ba2818dcc5b108ef252230735c54e0185437618596c790bbba8fcdaef5b290405981ffa09dce67b1f1bf190cbd
- languageName: node
- linkType: hard
-
-"tmp@npm:~0.2.1":
- version: 0.2.1
- resolution: "tmp@npm:0.2.1"
- dependencies:
- rimraf: ^3.0.0
- checksum: 8b1214654182575124498c87ca986ac53dc76ff36e8f0e0b67139a8d221eaecfdec108c0e6ec54d76f49f1f72ab9325500b246f562b926f85bcdfca8bf35df9e
- languageName: node
- linkType: hard
-
-"tough-cookie@npm:^4.1.3":
- version: 4.1.3
- resolution: "tough-cookie@npm:4.1.3"
- dependencies:
- psl: ^1.1.33
- punycode: ^2.1.1
- universalify: ^0.2.0
- url-parse: ^1.5.3
- checksum: c9226afff36492a52118432611af083d1d8493a53ff41ec4ea48e5b583aec744b989e4280bcf476c910ec1525a89a4a0f1cae81c08b18fb2ec3a9b3a72b91dcc
- languageName: node
- linkType: hard
-
-"tslib@npm:^2.1.0":
- version: 2.4.0
- resolution: "tslib@npm:2.4.0"
- checksum: 8c4aa6a3c5a754bf76aefc38026134180c053b7bd2f81338cb5e5ebf96fefa0f417bff221592bf801077f5bf990562f6264fecbc42cd3309b33872cb6fc3b113
- languageName: node
- linkType: hard
-
-"tunnel-agent@npm:^0.6.0":
- version: 0.6.0
- resolution: "tunnel-agent@npm:0.6.0"
- dependencies:
- safe-buffer: ^5.0.1
- checksum: 05f6510358f8afc62a057b8b692f05d70c1782b70db86d6a1e0d5e28a32389e52fa6e7707b6c5ecccacc031462e4bc35af85ecfe4bbc341767917b7cf6965711
- languageName: node
- linkType: hard
-
-"tweetnacl@npm:^0.14.3, tweetnacl@npm:~0.14.0":
- version: 0.14.5
- resolution: "tweetnacl@npm:0.14.5"
- checksum: 6061daba1724f59473d99a7bb82e13f211cdf6e31315510ae9656fefd4779851cb927adad90f3b488c8ed77c106adc0421ea8055f6f976ff21b27c5c4e918487
- languageName: node
- linkType: hard
-
-"type-fest@npm:^0.21.3":
- version: 0.21.3
- resolution: "type-fest@npm:0.21.3"
- checksum: e6b32a3b3877f04339bae01c193b273c62ba7bfc9e325b8703c4ee1b32dc8fe4ef5dfa54bf78265e069f7667d058e360ae0f37be5af9f153b22382cd55a9afe0
- languageName: node
- linkType: hard
-
-"typescript@npm:~5.0.0":
- version: 5.0.4
- resolution: "typescript@npm:5.0.4"
- bin:
- tsc: bin/tsc
- tsserver: bin/tsserver
- checksum: 82b94da3f4604a8946da585f7d6c3025fff8410779e5bde2855ab130d05e4fd08938b9e593b6ebed165bda6ad9292b230984f10952cf82f0a0ca07bbeaa08172
- languageName: node
- linkType: hard
-
-"typescript@patch:typescript@~5.0.0#~builtin":
- version: 5.0.4
- resolution: "typescript@patch:typescript@npm%3A5.0.4#~builtin::version=5.0.4&hash=a1c5e5"
- bin:
- tsc: bin/tsc
- tsserver: bin/tsserver
- checksum: 6a1fe9a77bb9c5176ead919cc4a1499ee63e46b4e05bf667079f11bf3a8f7887f135aa72460a4c3b016e6e6bb65a822cb8689a6d86cbfe92d22cc9f501f09213
- languageName: node
- linkType: hard
-
-"universalify@npm:^0.2.0":
- version: 0.2.0
- resolution: "universalify@npm:0.2.0"
- checksum: e86134cb12919d177c2353196a4cc09981524ee87abf621f7bc8d249dbbbebaec5e7d1314b96061497981350df786e4c5128dbf442eba104d6e765bc260678b5
- languageName: node
- linkType: hard
-
-"universalify@npm:^2.0.0":
- version: 2.0.0
- resolution: "universalify@npm:2.0.0"
- checksum: 2406a4edf4a8830aa6813278bab1f953a8e40f2f63a37873ffa9a3bc8f9745d06cc8e88f3572cb899b7e509013f7f6fcc3e37e8a6d914167a5381d8440518c44
- languageName: node
- linkType: hard
-
-"untildify@npm:^4.0.0":
- version: 4.0.0
- resolution: "untildify@npm:4.0.0"
- checksum: 39ced9c418a74f73f0a56e1ba4634b4d959422dff61f4c72a8e39f60b99380c1b45ed776fbaa0a4101b157e4310d873ad7d114e8534ca02609b4916bb4187fb9
- languageName: node
- linkType: hard
-
-"url-parse@npm:^1.5.3":
- version: 1.5.10
- resolution: "url-parse@npm:1.5.10"
- dependencies:
- querystringify: ^2.1.1
- requires-port: ^1.0.0
- checksum: fbdba6b1d83336aca2216bbdc38ba658d9cfb8fc7f665eb8b17852de638ff7d1a162c198a8e4ed66001ddbf6c9888d41e4798912c62b4fd777a31657989f7bdf
- languageName: node
- linkType: hard
-
-"uuid@npm:^8.3.2":
- version: 8.3.2
- resolution: "uuid@npm:8.3.2"
- bin:
- uuid: dist/bin/uuid
- checksum: 5575a8a75c13120e2f10e6ddc801b2c7ed7d8f3c8ac22c7ed0c7b2ba6383ec0abda88c905085d630e251719e0777045ae3236f04c812184b7c765f63a70e58df
- languageName: node
- linkType: hard
-
-"verror@npm:1.10.0":
- version: 1.10.0
- resolution: "verror@npm:1.10.0"
- dependencies:
- assert-plus: ^1.0.0
- core-util-is: 1.0.2
- extsprintf: ^1.2.0
- checksum: c431df0bedf2088b227a4e051e0ff4ca54df2c114096b0c01e1cbaadb021c30a04d7dd5b41ab277bcd51246ca135bf931d4c4c796ecae7a4fef6d744ecef36ea
- languageName: node
- linkType: hard
-
-"which@npm:^2.0.1":
- version: 2.0.2
- resolution: "which@npm:2.0.2"
- dependencies:
- isexe: ^2.0.0
- bin:
- node-which: ./bin/node-which
- checksum: 1a5c563d3c1b52d5f893c8b61afe11abc3bab4afac492e8da5bde69d550de701cf9806235f20a47b5c8fa8a1d6a9135841de2596535e998027a54589000e66d1
- languageName: node
- linkType: hard
-
-"wrap-ansi@npm:^6.2.0":
- version: 6.2.0
- resolution: "wrap-ansi@npm:6.2.0"
- dependencies:
- ansi-styles: ^4.0.0
- string-width: ^4.1.0
- strip-ansi: ^6.0.0
- checksum: 6cd96a410161ff617b63581a08376f0cb9162375adeb7956e10c8cd397821f7eb2a6de24eb22a0b28401300bf228c86e50617cd568209b5f6775b93c97d2fe3a
- languageName: node
- linkType: hard
-
-"wrap-ansi@npm:^7.0.0":
- version: 7.0.0
- resolution: "wrap-ansi@npm:7.0.0"
- dependencies:
- ansi-styles: ^4.0.0
- string-width: ^4.1.0
- strip-ansi: ^6.0.0
- checksum: a790b846fd4505de962ba728a21aaeda189b8ee1c7568ca5e817d85930e06ef8d1689d49dbf0e881e8ef84436af3a88bc49115c2e2788d841ff1b8b5b51a608b
- languageName: node
- linkType: hard
-
-"wrappy@npm:1":
- version: 1.0.2
- resolution: "wrappy@npm:1.0.2"
- checksum: 159da4805f7e84a3d003d8841557196034155008f817172d4e986bd591f74aa82aa7db55929a54222309e01079a65a92a9e6414da5a6aa4b01ee44a511ac3ee5
- languageName: node
- linkType: hard
-
-"yallist@npm:^4.0.0":
- version: 4.0.0
- resolution: "yallist@npm:4.0.0"
- checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5
- languageName: node
- linkType: hard
-
-"yauzl@npm:^2.10.0":
- version: 2.10.0
- resolution: "yauzl@npm:2.10.0"
- dependencies:
- buffer-crc32: ~0.2.3
- fd-slicer: ~1.1.0
- checksum: 7f21fe0bbad6e2cb130044a5d1d0d5a0e5bf3d8d4f8c4e6ee12163ce798fee3de7388d22a7a0907f563ac5f9d40f8699a223d3d5c1718da90b0156da6904022b
- languageName: node
- linkType: hard
diff --git a/docs/auth/index.md b/docs/auth/index.md
index ecef22b612..a670e69baa 100644
--- a/docs/auth/index.md
+++ b/docs/auth/index.md
@@ -140,6 +140,9 @@ const app = createApp({
});
```
+> NOTE: You can configure sign-in to use a redirect flow with no pop-up by adding
+> `enableExperimentalRedirectFlow: true` to the root of your `app-config.yaml`
+
## Sign-In with Proxy Providers
Some auth providers are so-called "proxy" providers, meaning they're meant to be used
diff --git a/docs/features/techdocs/how-to-guides.md b/docs/features/techdocs/how-to-guides.md
index c64018ab97..8c98ec48d4 100644
--- a/docs/features/techdocs/how-to-guides.md
+++ b/docs/features/techdocs/how-to-guides.md
@@ -676,6 +676,35 @@ and publish the documentation for them. If the value of the `company.com/techdoc
annotation is anything other than `'local'`, the user is responsible for publishing
documentation to the appropriate location in the TechDocs external storage.
+## How to use other mkdocs plugins?
+
+The default plugin [mkdocs-techdocs-core](https://github.com/backstage/mkdocs-techdocs-core) provides a set of plugins that can be viewed as the minimum required plugins to enable TechDocs. Your organization might have needs beyond the core set though, here is the recommended way to enable other plugins.
+
+### Install the plugin
+
+#### With CI generation
+
+If you generate the HTML files in CI using `@techdocs/cli`, you need to install the desired mkdocs plugin in the runtime where the cli is being executed. This might be e.g. a docker image or a Jenkins node. Use the `--no-docker` flag with the cli to pick up the plugin you just installed.
+
+#### With local generation
+
+Create a new Docker image that extends [spotify/techdocs](https://github.com/backstage/techdocs-container), roughly:
+
+```Dockerfile
+FROM spotify/techdocs:
+
+pip install
+...
+```
+
+Then publish the image and use it in your config under the `techdocs.generator.dockerImage` [key](https://github.com/backstage/techdocs-container).
+
+### Specify the plugin in the mkdocs config
+
+To use the plugin, it has to be listed in the `mkdocs.yaml` file. You can either add the plugin to your applicable files, or specify defaults.
+
+To make a mkdocs plugin available for all your TechDocs components you can either list it in the `techdocs.generator.mkdocs.defaultPlugins` [config](https://github.com/backstage/backstage/blob/master/plugins/techdocs-backend/config.d.ts#L64C14-L64C14), or use the `--defaultPlugin` [cli option](https://backstage.io/docs/features/techdocs/cli#generate-techdocs-site-from-a-documentation-project) depending on your setup.
+
## Reference another components TechDocs
In systems where you might have multiple entities for example a System with a Website and an API, when served from a Monorepo you might want to keep the TechDocs in one location in the repository.
diff --git a/docs/plugins/customization.md b/docs/plugins/customization.md
deleted file mode 100644
index 44ca5147ea..0000000000
--- a/docs/plugins/customization.md
+++ /dev/null
@@ -1,68 +0,0 @@
----
-id: customization
-title: Customization (Experimental)
-description: Documentation on adding a customization logic to the plugin
----
-
-## Overview
-
-The Backstage core logic provides a possibility to make the component customizable in such a way that the application
-developer can redefine the labels, icons, elements or even completely replace the component. It's up to each plugin
-to decide what can be customized.
-
-## For a plugin developer
-
-When you are creating your plugin, you have a possibility to use a metadata field and define there all
-customizable elements. For example
-
-```typescript jsx
-const plugin = createPlugin({
- id: 'my-plugin',
- __experimentalConfigure(
- options?: CatalogInputPluginOptions,
- ): CatalogPluginOptions {
- const defaultOptions = {
- createButtonTitle: 'Create',
- };
- return { ...defaultOptions, ...options };
- },
-});
-```
-
-And the rendering part of the exposed component can retrieve that metadata as:
-
-```typescript jsx
-export type CatalogPluginOptions = {
- createButtonTitle: string;
-};
-
-export type CatalogInputPluginOptions = {
- createButtonTitle: string;
-};
-
-export const useCatalogPluginOptions = () =>
- usePluginOptions();
-
-export function DefaultMyPluginWelcomePage() {
- const { createButtonTitle } = useCatalogPluginOptions();
-
- return (
-
- {createButtonTitle}
-
- );
-}
-```
-
-## For an application developer using the plugin
-
-The way to reconfigure the default values provided by the plugin you can do it via reconfigure method, defined on the
-plugin. Example:
-
-```typescript jsx
-import { myPlugin } from '@backstage/my-plugin';
-
-myPlugin.__experimentalReconfigure({
- createButtonTitle: 'New',
-});
-```
diff --git a/docs/releases/v1.19.0-next.0-changelog.md b/docs/releases/v1.19.0-next.0-changelog.md
new file mode 100644
index 0000000000..ed95166757
--- /dev/null
+++ b/docs/releases/v1.19.0-next.0-changelog.md
@@ -0,0 +1,2868 @@
+# Release v1.19.0-next.0
+
+## @backstage/cli@0.23.0-next.0
+
+### Minor Changes
+
+- 7077dbf131: The new backend start command that used to be enabled by setting `EXPERIMENTAL_BACKEND_START` is now the default. To revert to the old behavior, set `LEGACY_BACKEND_START` instead.
+
+ This new command is no longer based on Webpack, but instead uses Node.js loaders to transpile on the fly. Rather than hot reloading modules the entire backend is now restarted on change, but the SQLite database state is still maintained across restarts via a parent process.
+
+### Patch Changes
+
+- 68158034e8: Fix for the new backend `start` command to make it work on Windows.
+- 21cd3b1b24: Added a template for creating `node-library` packages with `yarn new`.
+- de42eebaaf: Bumped dev dependencies `@types/node` and `mock-fs`.
+- 3ef18f8c06: Explicitly set `exports: 'named'` for CJS builds, ensuring that they have e.g. `exports["default"] = catalogPlugin;`
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/config-loader@1.5.1-next.0
+ - @backstage/cli-common@0.1.13-next.0
+ - @backstage/config@1.1.0
+ - @backstage/release-manifests@0.0.10
+ - @backstage/catalog-model@1.4.2
+ - @backstage/cli-node@0.1.5-next.0
+ - @backstage/errors@1.2.2
+ - @backstage/eslint-plugin@0.1.3
+ - @backstage/types@1.1.1
+
+## @backstage/core-plugin-api@1.7.0-next.0
+
+### Minor Changes
+
+- 322bbcae24: Removed the exprimental plugin configuration API. The `__experimentalReconfigure()` from the plugin options as well as the `__experimentalConfigure()` method on plugin instances have both been removed.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/config@1.1.0
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.5
+
+## @backstage/e2e-test-utils@0.1.0-next.0
+
+### Minor Changes
+
+- f5b41b27a9: Initial release.
+
+## @backstage/frontend-app-api@0.2.0-next.0
+
+### Minor Changes
+
+- 9d03dfe5e3: The `createApp` config option has been replaced by a new `configLoader` option. There is now also a `pluginLoader` option that can be used to dynamically load plugins into the app.
+
+### Patch Changes
+
+- 322bbcae24: Internal update for removal of experimental plugin configuration API.
+- 66d51a4827: Prevents root extension override and duplicated plugin extensions.
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/frontend-plugin-api@0.1.1-next.0
+ - @backstage/config@1.1.0
+ - @backstage/core-app-api@1.10.1-next.0
+ - @backstage/plugin-graphiql@0.2.55-next.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-catalog@1.14.0-next.0
+
+### Minor Changes
+
+- 28f1ab2e1a: The catalog plugin no longer implements the experimental reconfiguration API. The create button title can now instead be configured using the new experimental internationalization API, via the `catalogTranslationRef` exported at `/alpha`. For example:
+
+ ```ts
+ import { catalogTranslationRef } from '@backstage/plugin-catalog/alpha';
+
+ const app = createApp({
+ __experimentalTranslations: {
+ resources: [
+ createTranslationMessages({
+ ref: catalogTranslationRef,
+ catalog_page_create_button_title: 'Create Software',
+ }),
+ ],
+ },
+ });
+ ```
+
+- f3561a2935: include owner chip in catalog search result item
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/integration-react@1.1.20-next.0
+ - @backstage/plugin-search-react@1.7.1-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.16
+ - @backstage/plugin-scaffolder-common@1.4.1
+ - @backstage/plugin-search-common@1.2.6
+
+## @backstage/plugin-catalog-backend@1.14.0-next.0
+
+### Minor Changes
+
+- 78af9433c8: Instrumenting some missing metrics with `OpenTelemetry`
+
+### Patch Changes
+
+- 348e8c1cdb: Fixes a bug where eagerly deleted entities did not properly trigger re-stitching of entities that they had relations to.
+- b97e9790f0: Internal refactors, laying the foundation for later introducing deferred stitching (see #18062).
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-openapi-utils@0.0.4
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.16
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+ - @backstage/plugin-events-node@0.2.14-next.0
+ - @backstage/plugin-permission-common@0.7.8
+ - @backstage/plugin-permission-node@0.7.16-next.0
+ - @backstage/plugin-scaffolder-common@1.4.1
+ - @backstage/plugin-search-backend-module-catalog@0.1.9-next.0
+ - @backstage/plugin-search-common@1.2.6
+
+## @backstage/app-defaults@1.4.4-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/core-app-api@1.10.1-next.0
+ - @backstage/plugin-permission-react@0.4.16-next.0
+ - @backstage/theme@0.4.2
+
+## @backstage/backend-app-api@0.5.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/config-loader@1.5.1-next.0
+ - @backstage/cli-common@0.1.13-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/cli-node@0.1.5-next.0
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-permission-node@0.7.16-next.0
+
+## @backstage/backend-common@0.19.7-next.0
+
+### Patch Changes
+
+- 1c3d6fa2b2: The `useHotCleanup` and `useHotMemoize` helpers are now deprecated, since hot module reloads for backend are being phased out.
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/config-loader@1.5.1-next.0
+ - @backstage/cli-common@0.1.13-next.0
+ - @backstage/config@1.1.0
+ - @backstage/integration-aws-node@0.1.6
+ - @backstage/backend-app-api@0.5.5-next.0
+ - @backstage/backend-dev-utils@0.1.1
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+
+## @backstage/backend-defaults@0.2.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/backend-app-api@0.5.5-next.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+
+## @backstage/backend-plugin-api@0.6.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-permission-common@0.7.8
+
+## @backstage/backend-tasks@0.5.10-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+
+## @backstage/backend-test-utils@0.2.6-next.0
+
+### Patch Changes
+
+- 5ddc03813e: Remove third type parameter used for `MockInstance`, in order to be compatible with older versions of `@types/jest`.
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-app-api@0.5.5-next.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/types@1.1.1
+
+## @backstage/cli-common@0.1.13-next.0
+
+### Patch Changes
+
+- de42eebaaf: Bumped dev dependencies `@types/node` and `mock-fs`.
+
+## @backstage/cli-node@0.1.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/cli-common@0.1.13-next.0
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+
+## @backstage/codemods@0.1.46-next.0
+
+### Patch Changes
+
+- de42eebaaf: Bumped dev dependencies `@types/node` and `mock-fs`.
+- Updated dependencies
+ - @backstage/cli-common@0.1.13-next.0
+
+## @backstage/config-loader@1.5.1-next.0
+
+### Patch Changes
+
+- 773ea341d2: The `FileConfigSource` will now retry file reading after a short delay if it reads an empty file. This is to avoid flakiness during watch mode where change events can trigger before the file content has been written.
+- Updated dependencies
+ - @backstage/cli-common@0.1.13-next.0
+ - @backstage/config@1.1.0
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+
+## @backstage/core-app-api@1.10.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/config@1.1.0
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.5
+
+## @backstage/core-components@0.13.6-next.0
+
+### Patch Changes
+
+- d19a827ef1: MissingAnnotationEmptyState component can now dynamically generate a YAML example based off the current entity being used.
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/config@1.1.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+ - @backstage/version-bridge@1.0.5
+
+## @backstage/create-app@0.5.6-next.0
+
+### Patch Changes
+
+- ba6a3b59c1: Removed duplicate `apple-touch-icon` link from `packages/app/public/index.html` that linked to nonexistent icon.
+
+- c8ec0dea4a: Create unique temp directory for each `create-app` execution.
+
+- b665f2ce65: Change base node image from node:18-bullseye-slim to node:18-bookworm-slim due to Docker build error on bullseye.
+
+ You can apply these change to your own `Dockerfile` by replacing `node:18-bullseye-slim` with `node:18-bookworm-slim`
+
+- deed089a3d: Bump `cypress` to fix the end-to-end tests
+
+- de42eebaaf: Bumped dev dependencies `@types/node` and `mock-fs`.
+
+- 04a3f65e15: Bump Docker base images to `node:18-bullseye-slim` to fix compatibility issues raised during image build.
+
+ You can apply these change to your own `Dockerfile` by replacing `node:16-bullseye-slim` with `node:18-bullseye-slim`
+
+- 5eacd5d213: The E2E test setup based on Cypress has been replaced with one based on [Playwright](https://playwright.dev/). Migrating existing apps is not required as this is a standalone setup, only do so if you also want to switch from Cypress to Playwright.
+
+ The scripts to run the E2E tests have been removed from `packages/app/package.json`, as they are now instead run from the root. Instead, a new script has been added to the root `package.json`, `yarn test:e2e`, which runs the E2E tests in development mode, unless `CI` is set in the environment.
+
+ The Playwright setup uses utilities from the new `@backstage/e2e-test-utils` package to find and include all packages in the monorepo that have an `e2e-tests` folder.
+
+- Updated dependencies
+ - @backstage/cli-common@0.1.13-next.0
+
+## @backstage/dev-utils@1.0.22-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/test-utils@1.4.4-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/integration-react@1.1.20-next.0
+ - @backstage/app-defaults@1.4.4-next.0
+ - @backstage/core-app-api@1.10.1-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+
+## @backstage/frontend-plugin-api@0.1.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/types@1.1.1
+
+## @backstage/integration@1.7.1-next.0
+
+### Patch Changes
+
+- 3963d0b885: Ensure that all relevant config fields are properly marked as secret
+- Updated dependencies
+ - @backstage/config@1.1.0
+ - @backstage/errors@1.2.2
+
+## @backstage/integration-react@1.1.20-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/config@1.1.0
+ - @backstage/theme@0.4.2
+
+## @backstage/repo-tools@0.3.5-next.0
+
+### Patch Changes
+
+- de42eebaaf: Bumped dev dependencies `@types/node` and `mock-fs`.
+- Updated dependencies
+ - @backstage/cli-common@0.1.13-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/cli-node@0.1.5-next.0
+ - @backstage/errors@1.2.2
+
+## @techdocs/cli@1.5.2-next.0
+
+### Patch Changes
+
+- de42eebaaf: Bumped dev dependencies `@types/node` and `mock-fs`.
+- 2b6e572051: Restructured tests.
+- Updated dependencies
+ - @backstage/cli-common@0.1.13-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/plugin-techdocs-node@1.8.2-next.0
+ - @backstage/config@1.1.0
+ - @backstage/catalog-model@1.4.2
+
+## @backstage/test-utils@1.4.4-next.0
+
+### Patch Changes
+
+- 322bbcae24: Removed the alpha `MockPluginProvider` export since the plugin configuration API has been removed.
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/config@1.1.0
+ - @backstage/core-app-api@1.10.1-next.0
+ - @backstage/plugin-permission-react@0.4.16-next.0
+ - @backstage/theme@0.4.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-permission-common@0.7.8
+
+## @backstage/plugin-adr@0.6.8-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/integration-react@1.1.20-next.0
+ - @backstage/plugin-adr-common@0.2.16-next.0
+ - @backstage/plugin-search-react@1.7.1-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+ - @backstage/plugin-search-common@1.2.6
+
+## @backstage/plugin-adr-backend@0.4.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/plugin-adr-common@0.2.16-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/plugin-search-common@1.2.6
+
+## @backstage/plugin-adr-common@0.2.16-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/plugin-search-common@1.2.6
+
+## @backstage/plugin-airbrake@0.3.25-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/test-utils@1.4.4-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/dev-utils@1.0.22-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-airbrake-backend@0.3.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+
+## @backstage/plugin-allure@0.1.41-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-analytics-module-ga@0.1.34-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/config@1.1.0
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-analytics-module-ga4@0.1.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/config@1.1.0
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-analytics-module-newrelic-browser@0.0.3-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/config@1.1.0
+
+## @backstage/plugin-apache-airflow@0.2.16-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+
+## @backstage/plugin-api-docs@0.9.12-next.0
+
+### Patch Changes
+
+- 0117a6b47e: Adding `requestInterceptor` option to `api-docs` and pass it to SwaggerUI. This will enable to configure a proxy or headers to be sent to all the request made through the `Try it out` button on SwaggerUI.
+- 18f1756908: added aria-label on api definition button for better a11y.
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/plugin-catalog@1.14.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-apollo-explorer@0.1.16-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-app-backend@0.3.53-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/config-loader@1.5.1-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-app-node@0.1.5-next.0
+
+## @backstage/plugin-app-node@0.1.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.6.5-next.0
+
+## @backstage/plugin-auth-backend@0.19.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-backend-module-github-provider@0.1.2-next.0
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-auth-backend-module-gcp-iap-provider@0.1.2-next.0
+ - @backstage/plugin-auth-backend-module-gitlab-provider@0.1.2-next.0
+ - @backstage/plugin-auth-backend-module-google-provider@0.1.2-next.0
+ - @backstage/plugin-auth-backend-module-oauth2-provider@0.1.2-next.0
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+
+## @backstage/plugin-auth-backend-module-gcp-iap-provider@0.1.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-auth-backend-module-github-provider@0.1.2-next.0
+
+### Patch Changes
+
+- 5d32a58b5a: Fixed a bug where the GitHub authenticator did not properly persist granted OAuth scopes.
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+
+## @backstage/plugin-auth-backend-module-gitlab-provider@0.1.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+
+## @backstage/plugin-auth-backend-module-google-provider@0.1.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+
+## @backstage/plugin-auth-backend-module-oauth2-provider@0.1.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+
+## @backstage/plugin-auth-node@0.3.2-next.0
+
+### Patch Changes
+
+- 6c2b0793bf: Fix for persisted scopes not being properly restored on sign-in.
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-azure-devops@0.3.7-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+ - @backstage/plugin-azure-devops-common@0.3.1
+
+## @backstage/plugin-azure-devops-backend@0.4.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/plugin-azure-devops-common@0.3.1
+
+## @backstage/plugin-azure-sites@0.1.14-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+ - @backstage/plugin-azure-sites-common@0.1.1
+
+## @backstage/plugin-azure-sites-backend@0.1.15-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/plugin-azure-sites-common@0.1.1
+
+## @backstage/plugin-badges@0.2.49-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-badges-backend@0.3.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+
+## @backstage/plugin-bazaar@0.2.17-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/cli@0.23.0-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/plugin-catalog@1.14.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-bazaar-backend@0.3.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/errors@1.2.2
+
+## @backstage/plugin-bitbucket-cloud-common@0.2.13-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+
+## @backstage/plugin-bitrise@0.1.52-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-catalog-backend-module-aws@0.2.8-next.0
+
+### Patch Changes
+
+- 890e3b5ad4: Make sure to include the error message when ingestion fails
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/integration-aws-node@0.1.6
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.16
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+ - @backstage/plugin-kubernetes-common@0.6.6
+
+## @backstage/plugin-catalog-backend-module-azure@0.1.24-next.0
+
+### Patch Changes
+
+- 890e3b5ad4: Make sure to include the error message when ingestion fails
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.16
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+
+## @backstage/plugin-catalog-backend-module-bitbucket@0.2.20-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/plugin-bitbucket-cloud-common@0.2.13-next.0
+ - @backstage/config@1.1.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+
+## @backstage/plugin-catalog-backend-module-bitbucket-cloud@0.1.20-next.0
+
+### Patch Changes
+
+- 890e3b5ad4: Make sure to include the error message when ingestion fails
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/plugin-bitbucket-cloud-common@0.2.13-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/plugin-catalog-common@1.0.16
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+ - @backstage/plugin-events-node@0.2.14-next.0
+
+## @backstage/plugin-catalog-backend-module-bitbucket-server@0.1.18-next.0
+
+### Patch Changes
+
+- 890e3b5ad4: Make sure to include the error message when ingestion fails
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+
+## @backstage/plugin-catalog-backend-module-gcp@0.1.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+ - @backstage/plugin-kubernetes-common@0.6.6
+
+## @backstage/plugin-catalog-backend-module-gerrit@0.1.21-next.0
+
+### Patch Changes
+
+- 890e3b5ad4: Make sure to include the error message when ingestion fails
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+
+## @backstage/plugin-catalog-backend-module-github@0.4.3-next.0
+
+### Patch Changes
+
+- 890e3b5ad4: Make sure to include the error message when ingestion fails
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/plugin-catalog-backend@1.14.0-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.16
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+ - @backstage/plugin-events-node@0.2.14-next.0
+
+## @backstage/plugin-catalog-backend-module-gitlab@0.3.2-next.0
+
+### Patch Changes
+
+- 890e3b5ad4: Make sure to include the error message when ingestion fails
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+
+## @backstage/plugin-catalog-backend-module-incremental-ingestion@0.4.9-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.14.0-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+ - @backstage/plugin-events-node@0.2.14-next.0
+ - @backstage/plugin-permission-common@0.7.8
+
+## @backstage/plugin-catalog-backend-module-ldap@0.5.20-next.0
+
+### Patch Changes
+
+- 890e3b5ad4: Make sure to include the error message when ingestion fails
+- Updated dependencies
+ - @backstage/config@1.1.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.16
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+
+## @backstage/plugin-catalog-backend-module-msgraph@0.5.12-next.0
+
+### Patch Changes
+
+- 890e3b5ad4: Make sure to include the error message when ingestion fails
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/plugin-catalog-common@1.0.16
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+
+## @backstage/plugin-catalog-backend-module-openapi@0.1.22-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/plugin-catalog-backend@1.14.0-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.16
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+
+## @backstage/plugin-catalog-backend-module-puppetdb@0.1.10-next.0
+
+### Patch Changes
+
+- 890e3b5ad4: Make sure to include the error message when ingestion fails
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+
+## @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/plugin-catalog-common@1.0.16
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+ - @backstage/plugin-scaffolder-common@1.4.1
+
+## @backstage/plugin-catalog-backend-module-unprocessed@0.3.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/catalog-model@1.4.2
+
+## @backstage/plugin-catalog-graph@0.2.37-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-catalog-import@0.10.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/integration-react@1.1.20-next.0
+ - @backstage/config@1.1.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/plugin-catalog-common@1.0.16
+
+## @backstage/plugin-catalog-node@1.4.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.16
+
+## @backstage/plugin-catalog-react@1.8.5-next.0
+
+### Patch Changes
+
+- a402e1dfb9: Fixed an issue causing `EntityPage` to show an error for entities containing special characters
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/plugin-permission-react@0.4.16-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.5
+ - @backstage/plugin-catalog-common@1.0.16
+ - @backstage/plugin-permission-common@0.7.8
+
+## @backstage/plugin-catalog-unprocessed-entities@0.1.4-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-cicd-statistics@0.1.27-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/catalog-model@1.4.2
+
+## @backstage/plugin-cicd-statistics-module-gitlab@0.1.21-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/plugin-cicd-statistics@0.1.27-next.0
+ - @backstage/catalog-model@1.4.2
+
+## @backstage/plugin-circleci@0.3.25-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-cloudbuild@0.3.25-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-code-climate@0.1.25-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-code-coverage@0.2.18-next.0
+
+### Patch Changes
+
+- a468544fa9: Updated layout to improve contrasts and consistency with other plugins
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/config@1.1.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-code-coverage-backend@0.2.19-next.0
+
+### Patch Changes
+
+- 4aa27aa200: Added option to set body size limit
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+
+## @backstage/plugin-codescene@0.1.18-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/config@1.1.0
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-config-schema@0.1.46-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/config@1.1.0
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-cost-insights@0.12.14-next.0
+
+### Patch Changes
+
+- 959aa2a09f: The experimental plugin configuration has been removed. The trend line can now instead be hidden by setting `costInsights.hideTrendLine` to `true` in the configuration.
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/config@1.1.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+ - @backstage/plugin-cost-insights-common@0.1.2
+
+## @backstage/plugin-devtools@0.1.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/plugin-permission-react@0.4.16-next.0
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-devtools-common@0.1.4
+
+## @backstage/plugin-devtools-backend@0.2.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/config-loader@1.5.1-next.0
+ - @backstage/cli-common@0.1.13-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-devtools-common@0.1.4
+ - @backstage/plugin-permission-common@0.7.8
+ - @backstage/plugin-permission-node@0.7.16-next.0
+
+## @backstage/plugin-dynatrace@7.0.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-entity-feedback@0.2.8-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+ - @backstage/plugin-entity-feedback-common@0.1.3
+
+## @backstage/plugin-entity-feedback-backend@0.2.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/plugin-entity-feedback-common@0.1.3
+
+## @backstage/plugin-entity-validation@0.1.10-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+ - @backstage/plugin-catalog-common@1.0.16
+
+## @backstage/plugin-events-backend@0.2.14-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/plugin-events-node@0.2.14-next.0
+
+## @backstage/plugin-events-backend-module-aws-sqs@0.2.8-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-events-node@0.2.14-next.0
+
+## @backstage/plugin-events-backend-module-azure@0.1.15-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/plugin-events-node@0.2.14-next.0
+
+## @backstage/plugin-events-backend-module-bitbucket-cloud@0.1.15-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/plugin-events-node@0.2.14-next.0
+
+## @backstage/plugin-events-backend-module-gerrit@0.1.15-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/plugin-events-node@0.2.14-next.0
+
+## @backstage/plugin-events-backend-module-github@0.1.15-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/plugin-events-node@0.2.14-next.0
+
+## @backstage/plugin-events-backend-module-gitlab@0.1.15-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/plugin-events-node@0.2.14-next.0
+
+## @backstage/plugin-events-backend-test-utils@0.1.15-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-events-node@0.2.14-next.0
+
+## @backstage/plugin-events-node@0.2.14-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.6.5-next.0
+
+## @backstage/plugin-explore@0.4.11-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/plugin-explore-react@0.0.32-next.0
+ - @backstage/plugin-search-react@1.7.1-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+ - @backstage/plugin-explore-common@0.0.2
+ - @backstage/plugin-search-common@1.2.6
+
+## @backstage/plugin-explore-backend@0.0.15-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-explore-common@0.0.2
+ - @backstage/plugin-search-backend-module-explore@0.1.9-next.0
+ - @backstage/plugin-search-common@1.2.6
+
+## @backstage/plugin-explore-react@0.0.32-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/plugin-explore-common@0.0.2
+
+## @backstage/plugin-firehydrant@0.2.9-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-fossa@0.2.57-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-gcalendar@0.3.19-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-gcp-projects@0.3.42-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-git-release-manager@0.3.38-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-github-actions@0.6.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/integration-react@1.1.20-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-github-deployments@0.1.56-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/integration-react@1.1.20-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-github-issues@0.2.14-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-github-pull-requests-board@0.1.19-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-gitops-profiles@0.3.41-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/config@1.1.0
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-gocd@0.1.31-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-graphiql@0.2.55-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/frontend-plugin-api@0.1.1-next.0
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-graphql-backend@0.1.43-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/plugin-catalog-graphql@0.3.23
+
+## @backstage/plugin-graphql-voyager@0.1.8-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-home@0.5.9-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/config@1.1.0
+ - @backstage/plugin-home-react@0.1.4-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-home-react@0.1.4-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+
+## @backstage/plugin-ilert@0.2.14-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-jenkins@0.8.7-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+ - @backstage/plugin-jenkins-common@0.1.19
+
+## @backstage/plugin-jenkins-backend@0.2.8-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/plugin-jenkins-common@0.1.19
+ - @backstage/plugin-permission-common@0.7.8
+ - @backstage/plugin-permission-node@0.7.16-next.0
+
+## @backstage/plugin-kafka@0.3.25-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/config@1.1.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-kafka-backend@0.3.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+
+## @backstage/plugin-kubernetes@0.10.4-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/config@1.1.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-kubernetes-common@0.6.6
+
+## @backstage/plugin-kubernetes-backend@0.12.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/integration-aws-node@0.1.6
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+ - @backstage/plugin-kubernetes-common@0.6.6
+ - @backstage/plugin-permission-common@0.7.8
+ - @backstage/plugin-permission-node@0.7.16-next.0
+
+## @backstage/plugin-lighthouse@0.4.10-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/config@1.1.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+ - @backstage/plugin-lighthouse-common@0.1.3
+
+## @backstage/plugin-lighthouse-backend@0.3.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+ - @backstage/plugin-lighthouse-common@0.1.3
+
+## @backstage/plugin-linguist@0.1.10-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+ - @backstage/plugin-linguist-common@0.1.2
+
+## @backstage/plugin-linguist-backend@0.5.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+ - @backstage/plugin-linguist-common@0.1.2
+
+## @backstage/plugin-microsoft-calendar@0.1.8-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-newrelic@0.3.41-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-newrelic-dashboard@0.2.18-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+
+## @backstage/plugin-nomad@0.1.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/config@1.1.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-nomad-backend@0.1.7-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/errors@1.2.2
+
+## @backstage/plugin-octopus-deploy@0.2.7-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-opencost@0.2.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-org@0.6.15-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-org-react@0.1.14-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-pagerduty@0.6.6-next.0
+
+### Patch Changes
+
+- b9ce306814: Minor fix to avoid usage of deprecated prop
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/plugin-home-react@0.1.4-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-periskop@0.1.23-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-periskop-backend@0.2.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+
+## @backstage/plugin-permission-backend@0.5.28-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/errors@1.2.2
+ - @backstage/plugin-permission-common@0.7.8
+ - @backstage/plugin-permission-node@0.7.16-next.0
+
+## @backstage/plugin-permission-backend-module-allow-all-policy@0.1.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/plugin-permission-common@0.7.8
+ - @backstage/plugin-permission-node@0.7.16-next.0
+
+## @backstage/plugin-permission-node@0.7.16-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/errors@1.2.2
+ - @backstage/plugin-permission-common@0.7.8
+
+## @backstage/plugin-permission-react@0.4.16-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/config@1.1.0
+ - @backstage/plugin-permission-common@0.7.8
+
+## @backstage/plugin-playlist@0.1.17-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/plugin-permission-react@0.4.16-next.0
+ - @backstage/plugin-search-react@1.7.1-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+ - @backstage/plugin-catalog-common@1.0.16
+ - @backstage/plugin-permission-common@0.7.8
+ - @backstage/plugin-playlist-common@0.1.10
+
+## @backstage/plugin-playlist-backend@0.3.9-next.0
+
+### Patch Changes
+
+- 9e46f5ff49: Added support to the playlist plugin for the new backend
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/plugin-permission-common@0.7.8
+ - @backstage/plugin-permission-node@0.7.16-next.0
+ - @backstage/plugin-playlist-common@0.1.10
+
+## @backstage/plugin-proxy-backend@0.4.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+
+## @backstage/plugin-puppetdb@0.1.8-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-rollbar@0.4.25-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-rollbar-backend@0.1.50-next.0
+
+### Patch Changes
+
+- 407f4284be: ensure rollbar token is hidden
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+
+## @backstage/plugin-scaffolder@1.15.1-next.0
+
+### Patch Changes
+
+- b337d78c3b: fixed issue related template editor fails with multiple templates per file.
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/integration-react@1.1.20-next.0
+ - @backstage/plugin-scaffolder-react@1.5.6-next.0
+ - @backstage/config@1.1.0
+ - @backstage/plugin-permission-react@0.4.16-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.16
+ - @backstage/plugin-scaffolder-common@1.4.1
+
+## @backstage/plugin-scaffolder-backend@1.17.3-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/plugin-catalog-backend@1.14.0-next.0
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/plugin-scaffolder-node@0.2.5-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.2-next.0
+ - @backstage/plugin-catalog-common@1.0.16
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+ - @backstage/plugin-permission-common@0.7.8
+ - @backstage/plugin-permission-node@0.7.16-next.0
+ - @backstage/plugin-scaffolder-common@1.4.1
+
+## @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/plugin-scaffolder-node@0.2.5-next.0
+ - @backstage/config@1.1.0
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-scaffolder-backend-module-cookiecutter@0.2.29-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/plugin-scaffolder-node@0.2.5-next.0
+ - @backstage/config@1.1.0
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-scaffolder-backend-module-gitlab@0.2.8-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/plugin-scaffolder-node@0.2.5-next.0
+ - @backstage/config@1.1.0
+ - @backstage/errors@1.2.2
+
+## @backstage/plugin-scaffolder-backend-module-rails@0.4.22-next.0
+
+### Patch Changes
+
+- de42eebaaf: Bumped dev dependencies `@types/node` and `mock-fs`.
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/plugin-scaffolder-node@0.2.5-next.0
+ - @backstage/config@1.1.0
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-scaffolder-backend-module-sentry@0.1.13-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-node@0.2.5-next.0
+ - @backstage/config@1.1.0
+ - @backstage/errors@1.2.2
+
+## @backstage/plugin-scaffolder-backend-module-yeoman@0.2.26-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-node@0.2.5-next.0
+ - @backstage/config@1.1.0
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-scaffolder-node@0.2.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-scaffolder-common@1.4.1
+
+## @backstage/plugin-scaffolder-react@1.5.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.5
+ - @backstage/plugin-scaffolder-common@1.4.1
+
+## @backstage/plugin-search@1.4.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/config@1.1.0
+ - @backstage/plugin-search-react@1.7.1-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.5
+ - @backstage/plugin-search-common@1.2.6
+
+## @backstage/plugin-search-backend@1.4.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-openapi-utils@0.0.4
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-permission-common@0.7.8
+ - @backstage/plugin-permission-node@0.7.16-next.0
+ - @backstage/plugin-search-backend-node@1.2.9-next.0
+ - @backstage/plugin-search-common@1.2.6
+
+## @backstage/plugin-search-backend-module-catalog@0.1.9-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/plugin-catalog-common@1.0.16
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+ - @backstage/plugin-permission-common@0.7.8
+ - @backstage/plugin-search-backend-node@1.2.9-next.0
+ - @backstage/plugin-search-common@1.2.6
+
+## @backstage/plugin-search-backend-module-elasticsearch@1.3.8-next.0
+
+### Patch Changes
+
+- 3963d0b885: Ensure that all relevant config fields are properly marked as secret
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/integration-aws-node@0.1.6
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/plugin-search-backend-node@1.2.9-next.0
+ - @backstage/plugin-search-common@1.2.6
+
+## @backstage/plugin-search-backend-module-explore@0.1.9-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/plugin-explore-common@0.0.2
+ - @backstage/plugin-search-backend-node@1.2.9-next.0
+ - @backstage/plugin-search-common@1.2.6
+
+## @backstage/plugin-search-backend-module-pg@0.5.14-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/plugin-search-backend-node@1.2.9-next.0
+ - @backstage/plugin-search-common@1.2.6
+
+## @backstage/plugin-search-backend-module-techdocs@0.1.9-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/plugin-techdocs-node@1.8.2-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/plugin-catalog-common@1.0.16
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+ - @backstage/plugin-permission-common@0.7.8
+ - @backstage/plugin-search-backend-node@1.2.9-next.0
+ - @backstage/plugin-search-common@1.2.6
+
+## @backstage/plugin-search-backend-node@1.2.9-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/errors@1.2.2
+ - @backstage/plugin-permission-common@0.7.8
+ - @backstage/plugin-search-common@1.2.6
+
+## @backstage/plugin-search-react@1.7.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/theme@0.4.2
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.5
+ - @backstage/plugin-search-common@1.2.6
+
+## @backstage/plugin-sentry@0.5.10-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-shortcuts@0.3.15-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/theme@0.4.2
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-sonarqube@0.7.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+ - @backstage/plugin-sonarqube-react@0.1.9-next.0
+
+## @backstage/plugin-sonarqube-backend@0.2.7-next.0
+
+### Patch Changes
+
+- a5d592d0ad: Added support for the [new backend system](https://backstage.io/docs/backend-system/)
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/errors@1.2.2
+
+## @backstage/plugin-sonarqube-react@0.1.9-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/catalog-model@1.4.2
+
+## @backstage/plugin-splunk-on-call@0.4.14-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-stack-overflow@0.1.21-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/config@1.1.0
+ - @backstage/plugin-home-react@0.1.4-next.0
+ - @backstage/plugin-search-react@1.7.1-next.0
+ - @backstage/theme@0.4.2
+ - @backstage/plugin-search-common@1.2.6
+
+## @backstage/plugin-stack-overflow-backend@0.2.9-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/plugin-search-common@1.2.6
+
+## @backstage/plugin-stackstorm@0.1.7-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-tech-insights@0.3.17-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-tech-insights-common@0.2.12
+
+## @backstage/plugin-tech-insights-backend@0.5.19-next.0
+
+### Patch Changes
+
+- cc7dddfa7f: Increase the maximum allowed length of an entity filter for tech insights fact schemas.
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-tech-insights-common@0.2.12
+ - @backstage/plugin-tech-insights-node@0.4.11-next.0
+
+## @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.37-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/errors@1.2.2
+ - @backstage/plugin-tech-insights-common@0.2.12
+ - @backstage/plugin-tech-insights-node@0.4.11-next.0
+
+## @backstage/plugin-tech-insights-node@0.4.11-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-tech-insights-common@0.2.12
+
+## @backstage/plugin-tech-radar@0.6.9-next.0
+
+### Patch Changes
+
+- c09d2fa1d6: Added experimental support for the declarative integration.
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/frontend-plugin-api@0.1.1-next.0
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-techdocs@1.7.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/integration-react@1.1.20-next.0
+ - @backstage/config@1.1.0
+ - @backstage/plugin-search-react@1.7.1-next.0
+ - @backstage/plugin-techdocs-react@1.1.12-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+ - @backstage/plugin-search-common@1.2.6
+
+## @backstage/plugin-techdocs-addons-test-utils@1.0.22-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/test-utils@1.4.4-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/plugin-catalog@1.14.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/integration-react@1.1.20-next.0
+ - @backstage/plugin-techdocs@1.7.1-next.0
+ - @backstage/core-app-api@1.10.1-next.0
+ - @backstage/plugin-search-react@1.7.1-next.0
+ - @backstage/plugin-techdocs-react@1.1.12-next.0
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-techdocs-backend@1.7.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/plugin-techdocs-node@1.8.2-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/plugin-catalog-common@1.0.16
+ - @backstage/plugin-permission-common@0.7.8
+ - @backstage/plugin-search-backend-module-techdocs@0.1.9-next.0
+ - @backstage/plugin-search-common@1.2.6
+
+## @backstage/plugin-techdocs-module-addons-contrib@1.1.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/integration-react@1.1.20-next.0
+ - @backstage/plugin-techdocs-react@1.1.12-next.0
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-techdocs-node@1.8.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/integration-aws-node@0.1.6
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/plugin-search-common@1.2.6
+
+## @backstage/plugin-techdocs-react@1.1.12-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/config@1.1.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/version-bridge@1.0.5
+
+## @backstage/plugin-todo@0.2.28-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-todo-backend@0.3.3-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-openapi-utils@0.0.4
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+
+## @backstage/plugin-user-settings@0.7.11-next.0
+
+### Patch Changes
+
+- d1b637d005: Fixed a bug where the theme icons would not be colored according to their active state.
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/core-app-api@1.10.1-next.0
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-user-settings-backend@0.2.3-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+
+## @backstage/plugin-vault@0.1.20-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+
+## @backstage/plugin-vault-backend@0.3.10-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/errors@1.2.2
+
+## @backstage/plugin-xcmetrics@0.2.44-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+
+## example-app@0.2.88-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-app-api@0.2.0-next.0
+ - @backstage/plugin-pagerduty@0.6.6-next.0
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/cli@0.23.0-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/plugin-catalog@1.14.0-next.0
+ - @backstage/plugin-scaffolder@1.15.1-next.0
+ - @backstage/plugin-tech-radar@0.6.9-next.0
+ - @backstage/plugin-user-settings@0.7.11-next.0
+ - @backstage/plugin-api-docs@0.9.12-next.0
+ - @backstage/plugin-code-coverage@0.2.18-next.0
+ - @backstage/plugin-cost-insights@0.12.14-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/integration-react@1.1.20-next.0
+ - @backstage/plugin-catalog-import@0.10.1-next.0
+ - @backstage/plugin-github-actions@0.6.6-next.0
+ - @backstage/plugin-techdocs@1.7.1-next.0
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.1-next.0
+ - @backstage/plugin-adr@0.6.8-next.0
+ - @backstage/plugin-airbrake@0.3.25-next.0
+ - @backstage/plugin-azure-devops@0.3.7-next.0
+ - @backstage/plugin-azure-sites@0.1.14-next.0
+ - @backstage/plugin-badges@0.2.49-next.0
+ - @backstage/plugin-catalog-graph@0.2.37-next.0
+ - @backstage/plugin-circleci@0.3.25-next.0
+ - @backstage/plugin-cloudbuild@0.3.25-next.0
+ - @backstage/plugin-dynatrace@7.0.5-next.0
+ - @backstage/plugin-entity-feedback@0.2.8-next.0
+ - @backstage/plugin-explore@0.4.11-next.0
+ - @backstage/plugin-gocd@0.1.31-next.0
+ - @backstage/plugin-home@0.5.9-next.0
+ - @backstage/plugin-jenkins@0.8.7-next.0
+ - @backstage/plugin-kafka@0.3.25-next.0
+ - @backstage/plugin-kubernetes@0.10.4-next.0
+ - @backstage/plugin-lighthouse@0.4.10-next.0
+ - @backstage/plugin-linguist@0.1.10-next.0
+ - @backstage/plugin-newrelic-dashboard@0.2.18-next.0
+ - @backstage/plugin-nomad@0.1.6-next.0
+ - @backstage/plugin-octopus-deploy@0.2.7-next.0
+ - @backstage/plugin-org@0.6.15-next.0
+ - @backstage/plugin-playlist@0.1.17-next.0
+ - @backstage/plugin-puppetdb@0.1.8-next.0
+ - @backstage/plugin-rollbar@0.4.25-next.0
+ - @backstage/plugin-scaffolder-react@1.5.6-next.0
+ - @backstage/plugin-search@1.4.1-next.0
+ - @backstage/plugin-sentry@0.5.10-next.0
+ - @backstage/plugin-tech-insights@0.3.17-next.0
+ - @backstage/plugin-todo@0.2.28-next.0
+ - @backstage/app-defaults@1.4.4-next.0
+ - @backstage/config@1.1.0
+ - @backstage/core-app-api@1.10.1-next.0
+ - @backstage/plugin-apache-airflow@0.2.16-next.0
+ - @backstage/plugin-catalog-unprocessed-entities@0.1.4-next.0
+ - @backstage/plugin-devtools@0.1.5-next.0
+ - @backstage/plugin-gcalendar@0.3.19-next.0
+ - @backstage/plugin-gcp-projects@0.3.42-next.0
+ - @backstage/plugin-graphiql@0.2.55-next.0
+ - @backstage/plugin-microsoft-calendar@0.1.8-next.0
+ - @backstage/plugin-newrelic@0.3.41-next.0
+ - @backstage/plugin-permission-react@0.4.16-next.0
+ - @backstage/plugin-search-react@1.7.1-next.0
+ - @backstage/plugin-shortcuts@0.3.15-next.0
+ - @backstage/plugin-stack-overflow@0.1.21-next.0
+ - @backstage/plugin-stackstorm@0.1.7-next.0
+ - @backstage/plugin-techdocs-react@1.1.12-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+ - @backstage/plugin-catalog-common@1.0.16
+ - @backstage/plugin-linguist-common@0.1.2
+ - @backstage/plugin-search-common@1.2.6
+
+## example-app-next@0.0.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/frontend-app-api@0.2.0-next.0
+ - @backstage/plugin-pagerduty@0.6.6-next.0
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/cli@0.23.0-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/plugin-catalog@1.14.0-next.0
+ - @backstage/plugin-scaffolder@1.15.1-next.0
+ - @backstage/plugin-tech-radar@0.6.9-next.0
+ - @backstage/plugin-user-settings@0.7.11-next.0
+ - @backstage/plugin-api-docs@0.9.12-next.0
+ - @backstage/plugin-code-coverage@0.2.18-next.0
+ - @backstage/plugin-cost-insights@0.12.14-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/frontend-plugin-api@0.1.1-next.0
+ - @backstage/integration-react@1.1.20-next.0
+ - @backstage/plugin-catalog-import@0.10.1-next.0
+ - @backstage/plugin-github-actions@0.6.6-next.0
+ - @backstage/plugin-techdocs@1.7.1-next.0
+ - @backstage/plugin-techdocs-module-addons-contrib@1.1.1-next.0
+ - @backstage/plugin-adr@0.6.8-next.0
+ - @backstage/plugin-airbrake@0.3.25-next.0
+ - @backstage/plugin-azure-devops@0.3.7-next.0
+ - @backstage/plugin-azure-sites@0.1.14-next.0
+ - @backstage/plugin-badges@0.2.49-next.0
+ - @backstage/plugin-catalog-graph@0.2.37-next.0
+ - @backstage/plugin-circleci@0.3.25-next.0
+ - @backstage/plugin-cloudbuild@0.3.25-next.0
+ - @backstage/plugin-dynatrace@7.0.5-next.0
+ - @backstage/plugin-entity-feedback@0.2.8-next.0
+ - @backstage/plugin-explore@0.4.11-next.0
+ - @backstage/plugin-gocd@0.1.31-next.0
+ - @backstage/plugin-home@0.5.9-next.0
+ - @backstage/plugin-jenkins@0.8.7-next.0
+ - @backstage/plugin-kafka@0.3.25-next.0
+ - @backstage/plugin-kubernetes@0.10.4-next.0
+ - @backstage/plugin-lighthouse@0.4.10-next.0
+ - @backstage/plugin-linguist@0.1.10-next.0
+ - @backstage/plugin-newrelic-dashboard@0.2.18-next.0
+ - @backstage/plugin-octopus-deploy@0.2.7-next.0
+ - @backstage/plugin-org@0.6.15-next.0
+ - @backstage/plugin-playlist@0.1.17-next.0
+ - @backstage/plugin-puppetdb@0.1.8-next.0
+ - @backstage/plugin-rollbar@0.4.25-next.0
+ - @backstage/plugin-scaffolder-react@1.5.6-next.0
+ - @backstage/plugin-search@1.4.1-next.0
+ - @backstage/plugin-sentry@0.5.10-next.0
+ - @backstage/plugin-tech-insights@0.3.17-next.0
+ - @backstage/plugin-todo@0.2.28-next.0
+ - @backstage/app-defaults@1.4.4-next.0
+ - @backstage/config@1.1.0
+ - @backstage/core-app-api@1.10.1-next.0
+ - @backstage/plugin-apache-airflow@0.2.16-next.0
+ - @backstage/plugin-catalog-unprocessed-entities@0.1.4-next.0
+ - @backstage/plugin-devtools@0.1.5-next.0
+ - @backstage/plugin-gcalendar@0.3.19-next.0
+ - @backstage/plugin-gcp-projects@0.3.42-next.0
+ - @backstage/plugin-graphiql@0.2.55-next.0
+ - @backstage/plugin-microsoft-calendar@0.1.8-next.0
+ - @backstage/plugin-newrelic@0.3.41-next.0
+ - @backstage/plugin-permission-react@0.4.16-next.0
+ - @backstage/plugin-search-react@1.7.1-next.0
+ - @backstage/plugin-shortcuts@0.3.15-next.0
+ - @backstage/plugin-stack-overflow@0.1.21-next.0
+ - @backstage/plugin-stackstorm@0.1.7-next.0
+ - @backstage/plugin-techdocs-react@1.1.12-next.0
+ - app-next-example-plugin@0.0.2-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+ - @backstage/plugin-catalog-common@1.0.16
+ - @backstage/plugin-linguist-common@0.1.2
+ - @backstage/plugin-search-common@1.2.6
+
+## app-next-example-plugin@0.0.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/frontend-plugin-api@0.1.1-next.0
+
+## example-backend@0.2.88-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-search-backend-module-elasticsearch@1.3.8-next.0
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/plugin-playlist-backend@0.3.9-next.0
+ - @backstage/plugin-rollbar-backend@0.1.50-next.0
+ - @backstage/plugin-catalog-backend@1.14.0-next.0
+ - @backstage/plugin-tech-insights-backend@0.5.19-next.0
+ - @backstage/plugin-code-coverage-backend@0.2.19-next.0
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/plugin-scaffolder-backend-module-rails@0.4.22-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - example-app@0.2.88-next.0
+ - @backstage/plugin-adr-backend@0.4.2-next.0
+ - @backstage/plugin-scaffolder-backend@1.17.3-next.0
+ - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.6-next.0
+ - @backstage/plugin-techdocs-backend@1.7.2-next.0
+ - @backstage/plugin-todo-backend@0.3.3-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/plugin-app-backend@0.3.53-next.0
+ - @backstage/plugin-auth-backend@0.19.2-next.0
+ - @backstage/plugin-azure-devops-backend@0.4.2-next.0
+ - @backstage/plugin-azure-sites-backend@0.1.15-next.0
+ - @backstage/plugin-badges-backend@0.3.2-next.0
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.2-next.0
+ - @backstage/plugin-catalog-backend-module-unprocessed@0.3.2-next.0
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+ - @backstage/plugin-devtools-backend@0.2.2-next.0
+ - @backstage/plugin-entity-feedback-backend@0.2.2-next.0
+ - @backstage/plugin-events-backend@0.2.14-next.0
+ - @backstage/plugin-events-node@0.2.14-next.0
+ - @backstage/plugin-explore-backend@0.0.15-next.0
+ - @backstage/plugin-graphql-backend@0.1.43-next.0
+ - @backstage/plugin-jenkins-backend@0.2.8-next.0
+ - @backstage/plugin-kafka-backend@0.3.2-next.0
+ - @backstage/plugin-kubernetes-backend@0.12.2-next.0
+ - @backstage/plugin-lighthouse-backend@0.3.2-next.0
+ - @backstage/plugin-linguist-backend@0.5.2-next.0
+ - @backstage/plugin-nomad-backend@0.1.7-next.0
+ - @backstage/plugin-permission-backend@0.5.28-next.0
+ - @backstage/plugin-permission-common@0.7.8
+ - @backstage/plugin-permission-node@0.7.16-next.0
+ - @backstage/plugin-proxy-backend@0.4.2-next.0
+ - @backstage/plugin-search-backend@1.4.5-next.0
+ - @backstage/plugin-search-backend-module-catalog@0.1.9-next.0
+ - @backstage/plugin-search-backend-module-explore@0.1.9-next.0
+ - @backstage/plugin-search-backend-module-pg@0.5.14-next.0
+ - @backstage/plugin-search-backend-module-techdocs@0.1.9-next.0
+ - @backstage/plugin-search-backend-node@1.2.9-next.0
+ - @backstage/plugin-search-common@1.2.6
+ - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.37-next.0
+ - @backstage/plugin-tech-insights-node@0.4.11-next.0
+
+## example-backend-next@0.0.16-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-sonarqube-backend@0.2.7-next.0
+ - @backstage/plugin-playlist-backend@0.3.9-next.0
+ - @backstage/plugin-catalog-backend@1.14.0-next.0
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/plugin-adr-backend@0.4.2-next.0
+ - @backstage/plugin-scaffolder-backend@1.17.3-next.0
+ - @backstage/plugin-techdocs-backend@1.7.2-next.0
+ - @backstage/plugin-todo-backend@0.3.3-next.0
+ - @backstage/backend-defaults@0.2.5-next.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/plugin-app-backend@0.3.53-next.0
+ - @backstage/plugin-azure-devops-backend@0.4.2-next.0
+ - @backstage/plugin-badges-backend@0.3.2-next.0
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.2-next.0
+ - @backstage/plugin-catalog-backend-module-unprocessed@0.3.2-next.0
+ - @backstage/plugin-devtools-backend@0.2.2-next.0
+ - @backstage/plugin-entity-feedback-backend@0.2.2-next.0
+ - @backstage/plugin-kubernetes-backend@0.12.2-next.0
+ - @backstage/plugin-lighthouse-backend@0.3.2-next.0
+ - @backstage/plugin-linguist-backend@0.5.2-next.0
+ - @backstage/plugin-permission-backend@0.5.28-next.0
+ - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.2-next.0
+ - @backstage/plugin-permission-common@0.7.8
+ - @backstage/plugin-permission-node@0.7.16-next.0
+ - @backstage/plugin-proxy-backend@0.4.2-next.0
+ - @backstage/plugin-search-backend@1.4.5-next.0
+ - @backstage/plugin-search-backend-module-catalog@0.1.9-next.0
+ - @backstage/plugin-search-backend-module-explore@0.1.9-next.0
+ - @backstage/plugin-search-backend-module-techdocs@0.1.9-next.0
+ - @backstage/plugin-search-backend-node@1.2.9-next.0
+
+## @backstage/backend-plugin-manager@0.0.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.14.0-next.0
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/cli-common@0.1.13-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/plugin-scaffolder-node@0.2.5-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/cli-node@0.1.5-next.0
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-events-backend@0.2.14-next.0
+ - @backstage/plugin-events-node@0.2.14-next.0
+ - @backstage/plugin-permission-common@0.7.8
+ - @backstage/plugin-permission-node@0.7.16-next.0
+ - @backstage/plugin-search-backend-node@1.2.9-next.0
+ - @backstage/plugin-search-common@1.2.6
+
+## e2e-test@0.2.8-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/create-app@0.5.6-next.0
+ - @backstage/cli-common@0.1.13-next.0
+ - @backstage/errors@1.2.2
+
+## techdocs-cli-embedded-app@0.2.87-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/test-utils@1.4.4-next.0
+ - @backstage/cli@0.23.0-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/plugin-catalog@1.14.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/integration-react@1.1.20-next.0
+ - @backstage/plugin-techdocs@1.7.1-next.0
+ - @backstage/app-defaults@1.4.4-next.0
+ - @backstage/config@1.1.0
+ - @backstage/core-app-api@1.10.1-next.0
+ - @backstage/plugin-techdocs-react@1.1.12-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+
+## @internal/plugin-todo-list@1.0.18-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/theme@0.4.2
+
+## @internal/plugin-todo-list-backend@1.0.18-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/errors@1.2.2
diff --git a/microsite/data/plugins/pulumi.yaml b/microsite/data/plugins/pulumi.yaml
new file mode 100644
index 0000000000..ea97bcdef3
--- /dev/null
+++ b/microsite/data/plugins/pulumi.yaml
@@ -0,0 +1,10 @@
+---
+title: Pulumi
+author: Pulumi
+authorUrl: https://www.pulumi.com
+category: Infrastructure
+description: View Pulumi stack information in Backstage.
+documentation: https://github.com/pulumi/pulumi-backstage-plugin
+iconUrl: https://www.pulumi.com/logos/brand/avatar-on-white.png
+npmPackageName: '@pulumi/backstage-plugin-pulumi'
+addedDate: '2023-09-27'
diff --git a/microsite/sidebars.json b/microsite/sidebars.json
index 0f4aef1373..bc394982ca 100644
--- a/microsite/sidebars.json
+++ b/microsite/sidebars.json
@@ -243,7 +243,6 @@
"plugins/integrating-plugin-into-software-catalog",
"plugins/integrating-search-into-plugins",
"plugins/composability",
- "plugins/customization",
"plugins/internationalization",
"plugins/analytics",
"plugins/feature-flags",
diff --git a/microsite/src/components/contentBlock/contentBlock.tsx b/microsite/src/components/contentBlock/contentBlock.tsx
index 983f684927..5c3e47fe74 100644
--- a/microsite/src/components/contentBlock/contentBlock.tsx
+++ b/microsite/src/components/contentBlock/contentBlock.tsx
@@ -37,7 +37,14 @@ export const ContentBlock = ({
{children && React.isValidElement(children) ? children : {children}
}
{actionButtons && (
-
+
{actionButtons.map(({ link, label }, index) => (
{
- it('should render the welcome page', () => {
- cy.visit('/');
- cy.contains('Welcome to Backstage');
- cy.contains('Getting Started');
- cy.contains('Quick Links');
- cy.contains('APIs');
- });
-
- it('should display support info when clicking the button', () => {
- cy.visit('/');
- // eslint-disable-next-line testing-library/await-async-query
- cy.findByTestId('support-button').click({ force: true });
- cy.contains('#backstage');
- });
-
- it('should display error message when triggering it', () => {
- cy.visit('/');
- // eslint-disable-next-line testing-library/await-async-query
- cy.findByTestId('error-button').click({ force: true });
- cy.contains('Error: Oh no!');
- // eslint-disable-next-line testing-library/await-async-query
- cy.findByTestId('error-button-close').click({ force: true });
- });
-
- it('should be able to login and logout', () => {
- const name = 'test-name';
- Cypress.on('window:before:load', win => {
- win.fetch = cy.stub().resolves({
- status: 200,
- json: () => ({ username: 'test name', token: 'token', name }),
- });
- });
-
- cy.visit('/');
- cy.get('a[href="/login"]').click({ force: true });
- cy.url().should('include', '/login');
- cy.contains('Welcome, guest!');
- cy.contains('Username')
- .get('input[name=github-username-tf]')
- .type(name, { force: true });
- cy.contains('Token')
- .get('input[name=github-auth-tf]')
- .type('password', { force: true });
- // eslint-disable-next-line testing-library/await-async-query
- cy.findByTestId('github-auth-button').click({ force: true });
- cy.contains(`Welcome, ${name}!`);
- cy.contains('Logout').click({ force: true });
- cy.contains('Welcome, guest!');
- });
-});
diff --git a/packages/app/cypress/integration/components/search/SearchPage.js b/packages/app/cypress/integration/components/search/SearchPage.js
deleted file mode 100644
index 11f31cfed3..0000000000
--- a/packages/app/cypress/integration/components/search/SearchPage.js
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Copyright 2021 The Backstage Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-const API_ENDPOINT = 'http://localhost:7007/api/search/query';
-
-describe('SearchPage', () => {
- describe('Given a search context with a term, results, and filter values', () => {
- it('The results are rendered as expected', () => {
- const results = [
- {
- type: 'software-catalog',
- document: {
- title: 'backstage',
- text: 'Backstage system documentation',
- location: '/result/location/path',
- },
- },
- ];
-
- cy.enterAsGuest();
- cy.visit('/search-next', {
- onBeforeLoad(win) {
- cy.stub(win, 'fetch')
- .withArgs(`${API_ENDPOINT}?term=`)
- .resolves({
- ok: true,
- json: () => ({ results }),
- });
- },
- });
- cy.contains('Search');
-
- cy.contains(results[0].document.title);
- cy.contains(results[0].document.text);
- cy.get(`a[href="${results[0].document.location}"]`).should('be.visible');
- });
-
- it('The filters are rendered as expected', () => {
- cy.enterAsGuest();
- cy.visit(
- '/search-next?filters%5Bkind%5D=Component&filters%5Blifecycle%5D%5B%5D=experimental',
- {
- onBeforeLoad(win) {
- cy.stub(win, 'fetch')
- .withArgs(
- `${API_ENDPOINT}?term=&filters%5Bkind%5D=Component&filters%5Blifecycle%5D%5B0%5D=experimental`,
- )
- .resolves({
- ok: true,
- json: () => ({ results: [] }),
- });
- },
- },
- );
- cy.contains('Search');
-
- // lifecycle
- cy.contains('lifecycle');
-
- cy.contains('experimental');
- cy.get(
- '[data-testid="search-checkboxfilter-next"] input[value="experimental"]',
- ).should('have.attr', 'checked');
-
- cy.contains('production');
- cy.get(
- '[data-testid="search-checkboxfilter-next"] input[value="production"]',
- ).should('not.have.attr', 'checked');
-
- // kind
- cy.contains('kind');
- cy.get(
- '[data-testid="search-selectfilter-next"] [role="button"][aria-haspopup="listbox"]',
- ).click();
-
- cy.contains('All');
- cy.contains('Template');
- cy.contains('Component');
-
- cy.get('[role="option"][data-value="Component"]').should(
- 'have.attr',
- 'aria-selected',
- 'true',
- );
- });
-
- it('The search bar is rendered as expected', () => {
- cy.enterAsGuest();
- cy.visit('/search-next?query=backstage', {
- onBeforeLoad(win) {
- cy.stub(win, 'fetch')
- .withArgs(`${API_ENDPOINT}?term=backstage`)
- .resolves({
- ok: true,
- json: () => ({ results: [] }),
- });
- },
- });
- cy.contains('Search');
-
- cy.get('[data-testid="search-bar-next"] input').should(
- 'have.attr',
- 'value',
- 'backstage',
- );
- });
- });
-});
diff --git a/packages/app/cypress/support/index.js b/packages/app/cypress/support/index.js
deleted file mode 100644
index fb62f6359f..0000000000
--- a/packages/app/cypress/support/index.js
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * Copyright 2020 The Backstage Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import '@testing-library/cypress/add-commands';
-import './commands';
diff --git a/packages/app/e2e-tests/SearchPage.test.ts b/packages/app/e2e-tests/SearchPage.test.ts
new file mode 100644
index 0000000000..9c42cf3d0a
--- /dev/null
+++ b/packages/app/e2e-tests/SearchPage.test.ts
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2021 The Backstage Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { test, expect } from '@playwright/test';
+
+test('the results are rendered as expected', async ({ page }) => {
+ await page.goto('/');
+
+ const enterButton = page.getByRole('button', { name: 'Enter' });
+ await expect(enterButton).toBeVisible();
+ await enterButton.click();
+
+ await page.goto('/search');
+ await page.route(`http://*/api/search/query?term=*`, async route => {
+ const results = [
+ {
+ type: 'software-catalog',
+ document: {
+ title: 'backstage',
+ text: 'Backstage system documentation',
+ location: '/result/location/path',
+ },
+ },
+ ];
+ await route.fulfill({ json: { results } });
+ });
+
+ await expect(
+ page.getByPlaceholder('Search in Backstage Example App'),
+ ).toBeVisible();
+
+ await expect(page.getByText('Backstage system documentation')).toBeVisible();
+});
diff --git a/cypress/src/integration/user/login.spec.ts b/packages/app/e2e-tests/app.test.ts
similarity index 52%
rename from cypress/src/integration/user/login.spec.ts
rename to packages/app/e2e-tests/app.test.ts
index 8e84ebbf06..7449e4d9cb 100644
--- a/cypress/src/integration/user/login.spec.ts
+++ b/packages/app/e2e-tests/app.test.ts
@@ -13,19 +13,21 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-///
-import 'os';
-describe('Login', () => {
- it('should render the login page', () => {
- cy.visit('/');
- cy.contains('Select a sign-in method');
- });
+import { test, expect } from '@playwright/test';
- it('should be able to login', () => {
- cy.get('button').contains('Enter').click();
- cy.url().should('include', '/catalog');
+test('App should render the welcome page', async ({ page }) => {
+ await page.goto('/');
- cy.contains('artist-lookup');
- });
+ const enterButton = page.getByRole('button', { name: 'Enter' });
+ await expect(enterButton).toBeVisible();
+ await enterButton.click();
+
+ await expect(page.getByText('My Company Catalog')).toBeVisible();
+
+ const supportButton = page.getByTestId('support-button');
+ await expect(supportButton).toBeVisible();
+ await supportButton.click();
+
+ await expect(page.getByText('#backstage')).toBeVisible();
});
diff --git a/packages/app/package.json b/packages/app/package.json
index 0196acc0a2..5b17cc349e 100644
--- a/packages/app/package.json
+++ b/packages/app/package.json
@@ -1,6 +1,6 @@
{
"name": "example-app",
- "version": "0.2.87",
+ "version": "0.2.88-next.0",
"private": true,
"backstage": {
"role": "frontend"
@@ -29,6 +29,7 @@
"@backstage/plugin-azure-devops": "workspace:^",
"@backstage/plugin-azure-sites": "workspace:^",
"@backstage/plugin-badges": "workspace:^",
+ "@backstage/plugin-catalog": "workspace:^",
"@backstage/plugin-catalog-common": "workspace:^",
"@backstage/plugin-catalog-graph": "workspace:^",
"@backstage/plugin-catalog-import": "workspace:^",
@@ -82,7 +83,6 @@
"@backstage/plugin-todo": "workspace:^",
"@backstage/plugin-user-settings": "workspace:^",
"@backstage/theme": "workspace:^",
- "@internal/plugin-catalog-customized": "workspace:^",
"@material-ui/core": "^4.12.2",
"@material-ui/icons": "^4.9.1",
"@material-ui/lab": "4.0.0-alpha.61",
@@ -103,7 +103,7 @@
},
"devDependencies": {
"@backstage/test-utils": "workspace:^",
- "@testing-library/cypress": "^9.0.0",
+ "@playwright/test": "^1.32.3",
"@testing-library/dom": "^8.0.0",
"@testing-library/jest-dom": "^5.10.1",
"@testing-library/react": "^12.1.3",
@@ -112,21 +112,14 @@
"@types/react": "*",
"@types/react-dom": "*",
"@types/zen-observable": "^0.8.0",
- "cross-env": "^7.0.0",
- "cypress": "^12.0.0",
- "eslint-plugin-cypress": "^2.10.3",
- "start-server-and-test": "^1.10.11"
+ "cross-env": "^7.0.0"
},
"scripts": {
"start": "backstage-cli package start",
"build": "backstage-cli package build",
"clean": "backstage-cli package clean",
"test": "backstage-cli package test",
- "lint": "backstage-cli package lint",
- "test:e2e": "start-server-and-test start http://localhost:3000 cy:dev",
- "test:e2e:ci": "start-server-and-test start http://localhost:3000 cy:run",
- "cy:dev": "cypress open",
- "cy:run": "cypress run"
+ "lint": "backstage-cli package lint"
},
"browserslist": {
"production": [
diff --git a/packages/app/src/App.tsx b/packages/app/src/App.tsx
index 6371182221..a0a6419328 100644
--- a/packages/app/src/App.tsx
+++ b/packages/app/src/App.tsx
@@ -46,7 +46,7 @@ import {
CatalogEntityPage,
CatalogIndexPage,
catalogPlugin,
-} from '@internal/plugin-catalog-customized';
+} from '@backstage/plugin-catalog';
import { CatalogGraphPage } from '@backstage/plugin-catalog-graph';
import {
diff --git a/packages/app/src/components/catalog/EntityPage.test.tsx b/packages/app/src/components/catalog/EntityPage.test.tsx
index f9d23247c6..68ce5fb497 100644
--- a/packages/app/src/components/catalog/EntityPage.test.tsx
+++ b/packages/app/src/components/catalog/EntityPage.test.tsx
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-import { EntityLayout } from '@internal/plugin-catalog-customized';
+import { EntityLayout } from '@backstage/plugin-catalog';
import {
EntityProvider,
starredEntitiesApiRef,
diff --git a/packages/app/src/components/catalog/EntityPage.tsx b/packages/app/src/components/catalog/EntityPage.tsx
index 25630253d4..ae78d0b771 100644
--- a/packages/app/src/components/catalog/EntityPage.tsx
+++ b/packages/app/src/components/catalog/EntityPage.tsx
@@ -68,7 +68,7 @@ import {
hasLabels,
hasRelationWarnings,
EntityRelationWarning,
-} from '@internal/plugin-catalog-customized';
+} from '@backstage/plugin-catalog';
import {
Direction,
EntityCatalogGraphCard,
diff --git a/packages/app/src/components/search/SearchModal.tsx b/packages/app/src/components/search/SearchModal.tsx
index 6b701d394d..23aec53a58 100644
--- a/packages/app/src/components/search/SearchModal.tsx
+++ b/packages/app/src/components/search/SearchModal.tsx
@@ -29,7 +29,7 @@ import {
useSearch,
} from '@backstage/plugin-search-react';
import { TechDocsSearchResultListItem } from '@backstage/plugin-techdocs';
-import { CatalogSearchResultListItem } from '@internal/plugin-catalog-customized';
+import { CatalogSearchResultListItem } from '@backstage/plugin-catalog';
import {
Box,
DialogActions,
diff --git a/packages/app/src/components/search/SearchPage.tsx b/packages/app/src/components/search/SearchPage.tsx
index 2e577e6589..a9f54cdb49 100644
--- a/packages/app/src/components/search/SearchPage.tsx
+++ b/packages/app/src/components/search/SearchPage.tsx
@@ -23,7 +23,7 @@ import {
useSidebarPinState,
} from '@backstage/core-components';
import { useApi } from '@backstage/core-plugin-api';
-import { CatalogSearchResultListItem } from '@internal/plugin-catalog-customized';
+import { CatalogSearchResultListItem } from '@backstage/plugin-catalog';
import {
catalogApiRef,
CATALOG_FILTER_EXISTS,
diff --git a/packages/backend-app-api/CHANGELOG.md b/packages/backend-app-api/CHANGELOG.md
index 3d7864d95c..e70c14d84e 100644
--- a/packages/backend-app-api/CHANGELOG.md
+++ b/packages/backend-app-api/CHANGELOG.md
@@ -1,5 +1,22 @@
# @backstage/backend-app-api
+## 0.5.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/config-loader@1.5.1-next.0
+ - @backstage/cli-common@0.1.13-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/cli-node@0.1.5-next.0
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-permission-node@0.7.16-next.0
+
## 0.5.3
### Patch Changes
diff --git a/packages/backend-app-api/package.json b/packages/backend-app-api/package.json
index 0881be4ca8..d29b00d036 100644
--- a/packages/backend-app-api/package.json
+++ b/packages/backend-app-api/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/backend-app-api",
"description": "Core API used by Backstage backend apps",
- "version": "0.5.3",
+ "version": "0.5.5-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"publishConfig": {
diff --git a/packages/backend-common/CHANGELOG.md b/packages/backend-common/CHANGELOG.md
index 66b9600222..6e761caa41 100644
--- a/packages/backend-common/CHANGELOG.md
+++ b/packages/backend-common/CHANGELOG.md
@@ -1,5 +1,22 @@
# @backstage/backend-common
+## 0.19.7-next.0
+
+### Patch Changes
+
+- 1c3d6fa2b2: The `useHotCleanup` and `useHotMemoize` helpers are now deprecated, since hot module reloads for backend are being phased out.
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/config-loader@1.5.1-next.0
+ - @backstage/cli-common@0.1.13-next.0
+ - @backstage/config@1.1.0
+ - @backstage/integration-aws-node@0.1.6
+ - @backstage/backend-app-api@0.5.5-next.0
+ - @backstage/backend-dev-utils@0.1.1
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+
## 0.19.5
### Patch Changes
diff --git a/packages/backend-common/api-report.md b/packages/backend-common/api-report.md
index f0fa15efb0..ab640ccd9b 100644
--- a/packages/backend-common/api-report.md
+++ b/packages/backend-common/api-report.md
@@ -785,12 +785,12 @@ export type UrlReadersOptions = {
factories?: ReaderFactory[];
};
-// @public
+// @public @deprecated
export function useHotCleanup(
_module: NodeModule,
cancelEffect: () => void,
): void;
-// @public
+// @public @deprecated
export function useHotMemoize
(_module: NodeModule, valueFactory: () => T): T;
```
diff --git a/packages/backend-common/package.json b/packages/backend-common/package.json
index a1487163b2..a887bdc8e7 100644
--- a/packages/backend-common/package.json
+++ b/packages/backend-common/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/backend-common",
"description": "Common functionality library for Backstage backends",
- "version": "0.19.5",
+ "version": "0.19.7-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"publishConfig": {
diff --git a/packages/backend-common/src/hot.ts b/packages/backend-common/src/hot.ts
index 7148778b8c..94ebf52307 100644
--- a/packages/backend-common/src/hot.ts
+++ b/packages/backend-common/src/hot.ts
@@ -47,6 +47,7 @@ function findAllAncestors(_module: NodeModule): NodeModule[] {
* Useful for cleaning intervals, timers, requests etc
*
* @public
+ * @deprecated Hot module reloading is no longer supported for backends.
* @example
* ```ts
* const intervalId = setInterval(doStuff, 1000);
@@ -80,6 +81,7 @@ const CURRENT_HOT_MEMOIZE_INDEX_KEY = 'backstage.io/hmr-memoize-key';
* stateful parts of the backend, e.g. to retain a database.
*
* @public
+ * @deprecated Hot module reloading is no longer supported for backends.
* @example
* ```ts
* const db = useHotMemoize(module, () => createDB(dbParams));
diff --git a/packages/backend-defaults/CHANGELOG.md b/packages/backend-defaults/CHANGELOG.md
index b70db2e92d..98f39ef7b6 100644
--- a/packages/backend-defaults/CHANGELOG.md
+++ b/packages/backend-defaults/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/backend-defaults
+## 0.2.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/backend-app-api@0.5.5-next.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+
## 0.2.3
### Patch Changes
diff --git a/packages/backend-defaults/package.json b/packages/backend-defaults/package.json
index cff7d00bb9..3aee2f5708 100644
--- a/packages/backend-defaults/package.json
+++ b/packages/backend-defaults/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/backend-defaults",
"description": "Backend defaults used by Backstage backend apps",
- "version": "0.2.3",
+ "version": "0.2.5-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"publishConfig": {
diff --git a/packages/backend-next/CHANGELOG.md b/packages/backend-next/CHANGELOG.md
index ab19eee8d9..92a7b57513 100644
--- a/packages/backend-next/CHANGELOG.md
+++ b/packages/backend-next/CHANGELOG.md
@@ -1,5 +1,42 @@
# example-backend-next
+## 0.0.16-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-sonarqube-backend@0.2.7-next.0
+ - @backstage/plugin-playlist-backend@0.3.9-next.0
+ - @backstage/plugin-catalog-backend@1.14.0-next.0
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/plugin-adr-backend@0.4.2-next.0
+ - @backstage/plugin-scaffolder-backend@1.17.3-next.0
+ - @backstage/plugin-techdocs-backend@1.7.2-next.0
+ - @backstage/plugin-todo-backend@0.3.3-next.0
+ - @backstage/backend-defaults@0.2.5-next.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/plugin-app-backend@0.3.53-next.0
+ - @backstage/plugin-azure-devops-backend@0.4.2-next.0
+ - @backstage/plugin-badges-backend@0.3.2-next.0
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.2-next.0
+ - @backstage/plugin-catalog-backend-module-unprocessed@0.3.2-next.0
+ - @backstage/plugin-devtools-backend@0.2.2-next.0
+ - @backstage/plugin-entity-feedback-backend@0.2.2-next.0
+ - @backstage/plugin-kubernetes-backend@0.12.2-next.0
+ - @backstage/plugin-lighthouse-backend@0.3.2-next.0
+ - @backstage/plugin-linguist-backend@0.5.2-next.0
+ - @backstage/plugin-permission-backend@0.5.28-next.0
+ - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.2-next.0
+ - @backstage/plugin-permission-common@0.7.8
+ - @backstage/plugin-permission-node@0.7.16-next.0
+ - @backstage/plugin-proxy-backend@0.4.2-next.0
+ - @backstage/plugin-search-backend@1.4.5-next.0
+ - @backstage/plugin-search-backend-module-catalog@0.1.9-next.0
+ - @backstage/plugin-search-backend-module-explore@0.1.9-next.0
+ - @backstage/plugin-search-backend-module-techdocs@0.1.9-next.0
+ - @backstage/plugin-search-backend-node@1.2.9-next.0
+
## 0.0.15
### Patch Changes
diff --git a/packages/backend-next/package.json b/packages/backend-next/package.json
index de0a19228c..9e2dc78bfd 100644
--- a/packages/backend-next/package.json
+++ b/packages/backend-next/package.json
@@ -1,6 +1,6 @@
{
"name": "example-backend-next",
- "version": "0.0.15",
+ "version": "0.0.16-next.0",
"main": "dist/index.cjs.js",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -18,7 +18,7 @@
"backstage"
],
"scripts": {
- "start": "EXPERIMENTAL_BACKEND_START=1 backstage-cli package start",
+ "start": "backstage-cli package start",
"build": "backstage-cli package build",
"lint": "backstage-cli package lint",
"test": "backstage-cli package test",
@@ -45,6 +45,7 @@
"@backstage/plugin-permission-backend-module-allow-all-policy": "workspace:^",
"@backstage/plugin-permission-common": "workspace:^",
"@backstage/plugin-permission-node": "workspace:^",
+ "@backstage/plugin-playlist-backend": "workspace:^",
"@backstage/plugin-proxy-backend": "workspace:^",
"@backstage/plugin-scaffolder-backend": "workspace:^",
"@backstage/plugin-search-backend": "workspace:^",
@@ -52,6 +53,7 @@
"@backstage/plugin-search-backend-module-explore": "workspace:^",
"@backstage/plugin-search-backend-module-techdocs": "workspace:^",
"@backstage/plugin-search-backend-node": "workspace:^",
+ "@backstage/plugin-sonarqube-backend": "workspace:^",
"@backstage/plugin-techdocs-backend": "workspace:^",
"@backstage/plugin-todo-backend": "workspace:^"
},
diff --git a/packages/backend-next/src/index.ts b/packages/backend-next/src/index.ts
index 4e99732a11..9fda69635b 100644
--- a/packages/backend-next/src/index.ts
+++ b/packages/backend-next/src/index.ts
@@ -32,6 +32,7 @@ backend.add(import('@backstage/plugin-entity-feedback-backend'));
backend.add(import('@backstage/plugin-kubernetes-backend/alpha'));
backend.add(import('@backstage/plugin-lighthouse-backend'));
backend.add(import('@backstage/plugin-linguist-backend'));
+backend.add(import('@backstage/plugin-playlist-backend'));
backend.add(
import('@backstage/plugin-permission-backend-module-allow-all-policy'),
);
@@ -44,5 +45,6 @@ backend.add(import('@backstage/plugin-search-backend-module-techdocs/alpha'));
backend.add(import('@backstage/plugin-search-backend/alpha'));
backend.add(import('@backstage/plugin-techdocs-backend/alpha'));
backend.add(import('@backstage/plugin-todo-backend'));
+backend.add(import('@backstage/plugin-sonarqube-backend'));
backend.start();
diff --git a/packages/backend-plugin-api/CHANGELOG.md b/packages/backend-plugin-api/CHANGELOG.md
index 5f78bb435d..684df46db9 100644
--- a/packages/backend-plugin-api/CHANGELOG.md
+++ b/packages/backend-plugin-api/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/backend-plugin-api
+## 0.6.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-permission-common@0.7.8
+
## 0.6.3
### Patch Changes
diff --git a/packages/backend-plugin-api/package.json b/packages/backend-plugin-api/package.json
index 9ca71972e1..b0da3fc80a 100644
--- a/packages/backend-plugin-api/package.json
+++ b/packages/backend-plugin-api/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/backend-plugin-api",
"description": "Core API used by Backstage backend plugins",
- "version": "0.6.3",
+ "version": "0.6.5-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"publishConfig": {
diff --git a/packages/backend-plugin-manager/CHANGELOG.md b/packages/backend-plugin-manager/CHANGELOG.md
index 71443041d2..bbf909d421 100644
--- a/packages/backend-plugin-manager/CHANGELOG.md
+++ b/packages/backend-plugin-manager/CHANGELOG.md
@@ -1,5 +1,28 @@
# @backstage/backend-plugin-manager
+## 0.0.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.14.0-next.0
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/cli-common@0.1.13-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/plugin-scaffolder-node@0.2.5-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/cli-node@0.1.5-next.0
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-events-backend@0.2.14-next.0
+ - @backstage/plugin-events-node@0.2.14-next.0
+ - @backstage/plugin-permission-common@0.7.8
+ - @backstage/plugin-permission-node@0.7.16-next.0
+ - @backstage/plugin-search-backend-node@1.2.9-next.0
+ - @backstage/plugin-search-common@1.2.6
+
## 0.0.1
### Patch Changes
diff --git a/packages/backend-plugin-manager/package.json b/packages/backend-plugin-manager/package.json
index e4d737a328..acf15928b0 100644
--- a/packages/backend-plugin-manager/package.json
+++ b/packages/backend-plugin-manager/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/backend-plugin-manager",
"description": "Backstage plugin management backend",
- "version": "0.0.1",
+ "version": "0.0.2-next.0",
"private": true,
"main": "src/index.ts",
"types": "src/index.ts",
diff --git a/packages/backend-tasks/CHANGELOG.md b/packages/backend-tasks/CHANGELOG.md
index efcfa0c702..d8a7cc3754 100644
--- a/packages/backend-tasks/CHANGELOG.md
+++ b/packages/backend-tasks/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/backend-tasks
+## 0.5.10-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+
## 0.5.8
### Patch Changes
diff --git a/packages/backend-tasks/package.json b/packages/backend-tasks/package.json
index a8d52d0b00..f4118b8098 100644
--- a/packages/backend-tasks/package.json
+++ b/packages/backend-tasks/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/backend-tasks",
"description": "Common distributed task management library for Backstage backends",
- "version": "0.5.8",
+ "version": "0.5.10-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"publishConfig": {
diff --git a/packages/backend-test-utils/CHANGELOG.md b/packages/backend-test-utils/CHANGELOG.md
index a725f8037b..ba53fae7f7 100644
--- a/packages/backend-test-utils/CHANGELOG.md
+++ b/packages/backend-test-utils/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/backend-test-utils
+## 0.2.6-next.0
+
+### Patch Changes
+
+- 5ddc03813e: Remove third type parameter used for `MockInstance`, in order to be compatible with older versions of `@types/jest`.
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-app-api@0.5.5-next.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/types@1.1.1
+
## 0.2.3
### Patch Changes
diff --git a/packages/backend-test-utils/package.json b/packages/backend-test-utils/package.json
index 8777439e64..5274b49ce2 100644
--- a/packages/backend-test-utils/package.json
+++ b/packages/backend-test-utils/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/backend-test-utils",
"description": "Test helpers library for Backstage backends",
- "version": "0.2.3",
+ "version": "0.2.6-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"publishConfig": {
diff --git a/packages/backend/CHANGELOG.md b/packages/backend/CHANGELOG.md
index 880eb33270..5d89212a42 100644
--- a/packages/backend/CHANGELOG.md
+++ b/packages/backend/CHANGELOG.md
@@ -1,5 +1,64 @@
# example-backend
+## 0.2.88-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-search-backend-module-elasticsearch@1.3.8-next.0
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/plugin-playlist-backend@0.3.9-next.0
+ - @backstage/plugin-rollbar-backend@0.1.50-next.0
+ - @backstage/plugin-catalog-backend@1.14.0-next.0
+ - @backstage/plugin-tech-insights-backend@0.5.19-next.0
+ - @backstage/plugin-code-coverage-backend@0.2.19-next.0
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/plugin-scaffolder-backend-module-rails@0.4.22-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - example-app@0.2.88-next.0
+ - @backstage/plugin-adr-backend@0.4.2-next.0
+ - @backstage/plugin-scaffolder-backend@1.17.3-next.0
+ - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.6-next.0
+ - @backstage/plugin-techdocs-backend@1.7.2-next.0
+ - @backstage/plugin-todo-backend@0.3.3-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/plugin-app-backend@0.3.53-next.0
+ - @backstage/plugin-auth-backend@0.19.2-next.0
+ - @backstage/plugin-azure-devops-backend@0.4.2-next.0
+ - @backstage/plugin-azure-sites-backend@0.1.15-next.0
+ - @backstage/plugin-badges-backend@0.3.2-next.0
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.2-next.0
+ - @backstage/plugin-catalog-backend-module-unprocessed@0.3.2-next.0
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+ - @backstage/plugin-devtools-backend@0.2.2-next.0
+ - @backstage/plugin-entity-feedback-backend@0.2.2-next.0
+ - @backstage/plugin-events-backend@0.2.14-next.0
+ - @backstage/plugin-events-node@0.2.14-next.0
+ - @backstage/plugin-explore-backend@0.0.15-next.0
+ - @backstage/plugin-graphql-backend@0.1.43-next.0
+ - @backstage/plugin-jenkins-backend@0.2.8-next.0
+ - @backstage/plugin-kafka-backend@0.3.2-next.0
+ - @backstage/plugin-kubernetes-backend@0.12.2-next.0
+ - @backstage/plugin-lighthouse-backend@0.3.2-next.0
+ - @backstage/plugin-linguist-backend@0.5.2-next.0
+ - @backstage/plugin-nomad-backend@0.1.7-next.0
+ - @backstage/plugin-permission-backend@0.5.28-next.0
+ - @backstage/plugin-permission-common@0.7.8
+ - @backstage/plugin-permission-node@0.7.16-next.0
+ - @backstage/plugin-proxy-backend@0.4.2-next.0
+ - @backstage/plugin-search-backend@1.4.5-next.0
+ - @backstage/plugin-search-backend-module-catalog@0.1.9-next.0
+ - @backstage/plugin-search-backend-module-explore@0.1.9-next.0
+ - @backstage/plugin-search-backend-module-pg@0.5.14-next.0
+ - @backstage/plugin-search-backend-module-techdocs@0.1.9-next.0
+ - @backstage/plugin-search-backend-node@1.2.9-next.0
+ - @backstage/plugin-search-common@1.2.6
+ - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.37-next.0
+ - @backstage/plugin-tech-insights-node@0.4.11-next.0
+
## 0.2.87
### Patch Changes
diff --git a/packages/backend/package.json b/packages/backend/package.json
index 362f0d1201..2f2ae70e21 100644
--- a/packages/backend/package.json
+++ b/packages/backend/package.json
@@ -1,6 +1,6 @@
{
"name": "example-backend",
- "version": "0.2.87",
+ "version": "0.2.88-next.0",
"main": "dist/index.cjs.js",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/packages/cli-common/CHANGELOG.md b/packages/cli-common/CHANGELOG.md
index bb6e2756a0..30b9670251 100644
--- a/packages/cli-common/CHANGELOG.md
+++ b/packages/cli-common/CHANGELOG.md
@@ -1,5 +1,11 @@
# @backstage/cli-common
+## 0.1.13-next.0
+
+### Patch Changes
+
+- de42eebaaf: Bumped dev dependencies `@types/node` and `mock-fs`.
+
## 0.1.12
### Patch Changes
diff --git a/packages/cli-common/package.json b/packages/cli-common/package.json
index 55e6e1f792..8aed6881e2 100644
--- a/packages/cli-common/package.json
+++ b/packages/cli-common/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/cli-common",
"description": "Common functionality used by cli, backend, and create-app",
- "version": "0.1.12",
+ "version": "0.1.13-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"publishConfig": {
diff --git a/packages/cli-node/CHANGELOG.md b/packages/cli-node/CHANGELOG.md
index 153bf1a5af..ab16a5d036 100644
--- a/packages/cli-node/CHANGELOG.md
+++ b/packages/cli-node/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/cli-node
+## 0.1.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/cli-common@0.1.13-next.0
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+
## 0.1.4
### Patch Changes
diff --git a/packages/cli-node/package.json b/packages/cli-node/package.json
index 95c69284eb..a1062c2783 100644
--- a/packages/cli-node/package.json
+++ b/packages/cli-node/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/cli-node",
"description": "Node.js library for Backstage CLIs",
- "version": "0.1.4",
+ "version": "0.1.5-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md
index 3e97228116..f9a93b9b44 100644
--- a/packages/cli/CHANGELOG.md
+++ b/packages/cli/CHANGELOG.md
@@ -1,5 +1,31 @@
# @backstage/cli
+## 0.23.0-next.0
+
+### Minor Changes
+
+- 7077dbf131: The new backend start command that used to be enabled by setting `EXPERIMENTAL_BACKEND_START` is now the default. To revert to the old behavior, set `LEGACY_BACKEND_START` instead.
+
+ This new command is no longer based on Webpack, but instead uses Node.js loaders to transpile on the fly. Rather than hot reloading modules the entire backend is now restarted on change, but the SQLite database state is still maintained across restarts via a parent process.
+
+### Patch Changes
+
+- 68158034e8: Fix for the new backend `start` command to make it work on Windows.
+- 21cd3b1b24: Added a template for creating `node-library` packages with `yarn new`.
+- de42eebaaf: Bumped dev dependencies `@types/node` and `mock-fs`.
+- 3ef18f8c06: Explicitly set `exports: 'named'` for CJS builds, ensuring that they have e.g. `exports["default"] = catalogPlugin;`
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/config-loader@1.5.1-next.0
+ - @backstage/cli-common@0.1.13-next.0
+ - @backstage/config@1.1.0
+ - @backstage/release-manifests@0.0.10
+ - @backstage/catalog-model@1.4.2
+ - @backstage/cli-node@0.1.5-next.0
+ - @backstage/errors@1.2.2
+ - @backstage/eslint-plugin@0.1.3
+ - @backstage/types@1.1.1
+
## 0.22.13
### Patch Changes
diff --git a/packages/cli/package.json b/packages/cli/package.json
index 45d7c8468d..e49c649e8c 100644
--- a/packages/cli/package.json
+++ b/packages/cli/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/cli",
"description": "CLI for developing Backstage plugins and apps",
- "version": "0.22.13",
+ "version": "0.23.0-next.0",
"publishConfig": {
"access": "public"
},
diff --git a/packages/cli/src/commands/start/startBackend.ts b/packages/cli/src/commands/start/startBackend.ts
index 622eeb9d1b..967a1108a0 100644
--- a/packages/cli/src/commands/start/startBackend.ts
+++ b/packages/cli/src/commands/start/startBackend.ts
@@ -36,7 +36,7 @@ export async function startBackend(options: StartBackendOptions) {
});
await waitForExit();
- } else if (process.env.EXPERIMENTAL_BACKEND_START) {
+ } else if (!process.env.LEGACY_BACKEND_START) {
const waitForExit = await startBackendExperimental({
entry: 'src/index',
checksEnabled: false, // not supported
diff --git a/packages/cli/src/lib/experimental/startBackendExperimental.ts b/packages/cli/src/lib/experimental/startBackendExperimental.ts
index 3bc603a9da..1272ba9e66 100644
--- a/packages/cli/src/lib/experimental/startBackendExperimental.ts
+++ b/packages/cli/src/lib/experimental/startBackendExperimental.ts
@@ -21,7 +21,7 @@ import type { ChildProcess } from 'child_process';
import { IpcServer } from './IpcServer';
import { ServerDataStore } from './ServerDataStore';
import debounce from 'lodash/debounce';
-import { fileURLToPath } from 'url';
+import { fileURLToPath, pathToFileURL } from 'url';
import { isAbsolute as isAbsolutePath } from 'path';
import { paths } from '../paths';
import spawn from 'cross-spawn';
@@ -30,7 +30,7 @@ const loaderArgs = [
'--require',
require.resolve('@esbuild-kit/cjs-loader'),
'--loader',
- require.resolve('@esbuild-kit/esm-loader'),
+ pathToFileURL(require.resolve('@esbuild-kit/esm-loader')).toString(), // Windows prefers a URL here
];
export async function startBackendExperimental(options: BackendServeOptions) {
diff --git a/packages/codemods/CHANGELOG.md b/packages/codemods/CHANGELOG.md
index 9bb738e4e8..7db642945f 100644
--- a/packages/codemods/CHANGELOG.md
+++ b/packages/codemods/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/codemods
+## 0.1.46-next.0
+
+### Patch Changes
+
+- de42eebaaf: Bumped dev dependencies `@types/node` and `mock-fs`.
+- Updated dependencies
+ - @backstage/cli-common@0.1.13-next.0
+
## 0.1.45
### Patch Changes
diff --git a/packages/codemods/package.json b/packages/codemods/package.json
index 484127928a..34f4b5d748 100644
--- a/packages/codemods/package.json
+++ b/packages/codemods/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/codemods",
"description": "A collection of codemods for Backstage projects",
- "version": "0.1.45",
+ "version": "0.1.46-next.0",
"publishConfig": {
"access": "public",
"main": "dist/index.cjs.js"
diff --git a/packages/config-loader/CHANGELOG.md b/packages/config-loader/CHANGELOG.md
index 625ee8c36e..1ee39cb9c6 100644
--- a/packages/config-loader/CHANGELOG.md
+++ b/packages/config-loader/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/config-loader
+## 1.5.1-next.0
+
+### Patch Changes
+
+- 773ea341d2: The `FileConfigSource` will now retry file reading after a short delay if it reads an empty file. This is to avoid flakiness during watch mode where change events can trigger before the file content has been written.
+- Updated dependencies
+ - @backstage/cli-common@0.1.13-next.0
+ - @backstage/config@1.1.0
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+
## 1.5.0
### Minor Changes
diff --git a/packages/config-loader/package.json b/packages/config-loader/package.json
index 51c7d4a599..fb17d00378 100644
--- a/packages/config-loader/package.json
+++ b/packages/config-loader/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/config-loader",
"description": "Config loading functionality used by Backstage backend, and CLI",
- "version": "1.5.0",
+ "version": "1.5.1-next.0",
"publishConfig": {
"access": "public",
"main": "dist/index.cjs.js",
diff --git a/packages/config-loader/src/sources/FileConfigSource.ts b/packages/config-loader/src/sources/FileConfigSource.ts
index da31c128a0..1de0fbf2d8 100644
--- a/packages/config-loader/src/sources/FileConfigSource.ts
+++ b/packages/config-loader/src/sources/FileConfigSource.ts
@@ -47,7 +47,15 @@ export interface FileConfigSourceOptions {
async function readFile(path: string): Promise {
try {
- return await fs.readFile(path, 'utf8');
+ const content = await fs.readFile(path, 'utf8');
+ // During watching we may sometimes read files too early before the file content has been written.
+ // We never expect the writing to take a long time, but if we encounter an empty file then check
+ // again after a short delay for safety.
+ if (content === '') {
+ await new Promise(resolve => setTimeout(resolve, 10));
+ return await fs.readFile(path, 'utf8');
+ }
+ return content;
} catch (error) {
if (error.code === 'ENOENT') {
return undefined;
diff --git a/packages/core-app-api/CHANGELOG.md b/packages/core-app-api/CHANGELOG.md
index 48241f0d22..dca0c73af9 100644
--- a/packages/core-app-api/CHANGELOG.md
+++ b/packages/core-app-api/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/core-app-api
+## 1.10.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/config@1.1.0
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.5
+
## 1.10.0
### Minor Changes
@@ -194,7 +204,7 @@
### Minor Changes
-- 7908d72e033: Introduce a new global config parameter, `auth.enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window.
+- 7908d72e033: Introduce a new global config parameter, `enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window.
- c15e0cedbe1: The `AuthConnector` interface now supports specifying a set of scopes when
refreshing a session. The `DefaultAuthConnector` implementation passes the
`scope` query parameter to the auth-backend plugin appropriately. The
@@ -255,7 +265,7 @@
### Minor Changes
-- 7908d72e033: Introduce a new global config parameter, `auth.enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window.
+- 7908d72e033: Introduce a new global config parameter, `enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window.
### Patch Changes
diff --git a/packages/core-app-api/package.json b/packages/core-app-api/package.json
index 5a687708e6..ab8fc9a155 100644
--- a/packages/core-app-api/package.json
+++ b/packages/core-app-api/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/core-app-api",
"description": "Core app API used by Backstage apps",
- "version": "1.10.0",
+ "version": "1.10.1-next.0",
"publishConfig": {
"access": "public"
},
diff --git a/packages/core-components/CHANGELOG.md b/packages/core-components/CHANGELOG.md
index 28d1b95677..9cf62f2694 100644
--- a/packages/core-components/CHANGELOG.md
+++ b/packages/core-components/CHANGELOG.md
@@ -1,5 +1,19 @@
# @backstage/core-components
+## 0.13.6-next.0
+
+### Patch Changes
+
+- d19a827ef1: MissingAnnotationEmptyState component can now dynamically generate a YAML example based off the current entity being used.
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/config@1.1.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+ - @backstage/version-bridge@1.0.5
+
## 0.13.5
### Patch Changes
@@ -273,7 +287,7 @@
- 67140d9f96f: Upgrade `react-virtualized-auto-sizer´ to version `^1.0.11`
- 6e0b71493df: Switched internal declaration of `DependencyGraphTypes` to use `namespace`.
- c8779cc1d09: Updated `LogLine` component, which is used by the `LogViewer`, to turn URLs into clickable links. This feature is on by default
-- 7908d72e033: Introduce a new global config parameter, `auth.enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window.
+- 7908d72e033: Introduce a new global config parameter, `enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window.
- 1e4f5e91b8e: Bump `zod` and `zod-to-json-schema` dependencies.
- 29ba8267d69: Updated dependency `@material-ui/lab` to `4.0.0-alpha.61`.
- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs)
@@ -351,7 +365,7 @@
### Patch Changes
-- 7908d72e033: Introduce a new global config parameter, `auth.enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window.
+- 7908d72e033: Introduce a new global config parameter, `enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window.
- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs)
- 7245e744ab1: Fixed the font color on `BackstageHeaderLabel` to respect the active page theme.
- Updated dependencies
diff --git a/packages/core-components/package.json b/packages/core-components/package.json
index d8cc5057ff..2d534609c2 100644
--- a/packages/core-components/package.json
+++ b/packages/core-components/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/core-components",
"description": "Core components used by Backstage plugins and apps",
- "version": "0.13.5",
+ "version": "0.13.6-next.0",
"publishConfig": {
"access": "public",
"main": "dist/index.esm.js",
@@ -33,9 +33,11 @@
"start": "backstage-cli package start"
},
"dependencies": {
+ "@backstage/catalog-model": "workspace:^",
"@backstage/config": "workspace:^",
"@backstage/core-plugin-api": "workspace:^",
"@backstage/errors": "workspace:^",
+ "@backstage/plugin-catalog-react": "workspace:^",
"@backstage/theme": "workspace:^",
"@backstage/version-bridge": "workspace:^",
"@date-io/core": "^1.3.13",
diff --git a/packages/core-components/src/components/EmptyState/MissingAnnotationEmptyState.tsx b/packages/core-components/src/components/EmptyState/MissingAnnotationEmptyState.tsx
index 9fc9eee959..c89129670a 100644
--- a/packages/core-components/src/components/EmptyState/MissingAnnotationEmptyState.tsx
+++ b/packages/core-components/src/components/EmptyState/MissingAnnotationEmptyState.tsx
@@ -25,23 +25,8 @@ import { CodeSnippet } from '../CodeSnippet';
import { Link } from '../Link';
import { EmptyState } from './EmptyState';
-const COMPONENT_YAML_TEMPLATE = `apiVersion: backstage.io/v1alpha1
-kind: Component
-metadata:
- name: example
- description: example.com
- annotations:
- ANNOTATION: value
-spec:
- type: website
- lifecycle: production
- owner: user:guest`;
-
-const ANNOTATION_REGEXP = /^.*ANNOTATION.*$/m;
-const ANNOTATION_YAML = COMPONENT_YAML_TEMPLATE.match(ANNOTATION_REGEXP)![0];
-const ANNOTATION_LINE = COMPONENT_YAML_TEMPLATE.split('\n').findIndex(line =>
- ANNOTATION_REGEXP.test(line),
-);
+import { useEntity } from '@backstage/plugin-catalog-react';
+import { Entity } from '@backstage/catalog-model';
type Props = {
annotation: string | string[];
@@ -62,19 +47,38 @@ const useStyles = makeStyles(
{ name: 'BackstageMissingAnnotationEmptyState' },
);
-function generateLineNumbers(lineCount: number) {
- return Array.from(Array(lineCount + 1).keys(), i => i + ANNOTATION_LINE);
+function generateYamlExample(
+ annotations: string[],
+ entity?: Entity,
+): { yamlText: string; lineNumbers: number[] } {
+ const kind = entity?.kind || 'Component';
+ const name = entity?.metadata.name || 'example';
+ const type = entity?.spec?.type || 'website';
+ const owner = entity?.spec?.owner || 'user:default/guest';
+
+ const yamlText = `apiVersion: backstage.io/v1alpha1
+kind: ${kind}
+metadata:
+ name: ${name}
+ annotations:${annotations.map(ann => `\n ${ann}: value`).join('')}
+spec:
+ type: ${type}
+ owner: ${owner}`;
+
+ let line = 6; // Line 6 is the line number that annotations are added to.
+ const lineNumbers: number[] = [];
+ annotations.forEach(() => {
+ lineNumbers.push(line);
+ line++;
+ });
+
+ return {
+ yamlText,
+ lineNumbers,
+ };
}
-function generateComponentYaml(annotations: string[]) {
- const annotationYaml = annotations
- .map(ann => ANNOTATION_YAML.replace('ANNOTATION', ann))
- .join('\n');
-
- return COMPONENT_YAML_TEMPLATE.replace(ANNOTATION_YAML, annotationYaml);
-}
-
-function generateDescription(annotations: string[]) {
+function generateDescription(annotations: string[], entityKind = 'Component') {
const isSingular = annotations.length <= 1;
return (
<>
@@ -87,13 +91,21 @@ function generateDescription(annotations: string[]) {
>
))}{' '}
{isSingular ? 'is' : 'are'} missing. You need to add the{' '}
- {isSingular ? 'annotation' : 'annotations'} to your component if you want
- to enable this tool.
+ {isSingular ? 'annotation' : 'annotations'} to your {entityKind} if you
+ want to enable this tool.
>
);
}
export function MissingAnnotationEmptyState(props: Props) {
+ let entity: Entity | undefined;
+ try {
+ const entityContext = useEntity();
+ entity = entityContext.entity;
+ } catch (err) {
+ // ignore when entity context doesnt exist
+ }
+
const { annotation, readMoreUrl } = props;
const annotations = Array.isArray(annotation) ? annotation : [annotation];
const url =
@@ -101,23 +113,25 @@ export function MissingAnnotationEmptyState(props: Props) {
'https://backstage.io/docs/features/software-catalog/well-known-annotations';
const classes = useStyles();
+ const entityKind = entity?.kind || 'Component';
+ const { yamlText, lineNumbers } = generateYamlExample(annotations, entity);
return (
- Add the annotation to your component YAML as shown in the
+ Add the annotation to your {entityKind} YAML as shown in the
highlighted example below:
diff --git a/packages/core-plugin-api/CHANGELOG.md b/packages/core-plugin-api/CHANGELOG.md
index 0c9728434b..d206487074 100644
--- a/packages/core-plugin-api/CHANGELOG.md
+++ b/packages/core-plugin-api/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/core-plugin-api
+## 1.7.0-next.0
+
+### Minor Changes
+
+- 322bbcae24: Removed the exprimental plugin configuration API. The `__experimentalReconfigure()` from the plugin options as well as the `__experimentalConfigure()` method on plugin instances have both been removed.
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/config@1.1.0
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.5
+
## 1.6.0
### Minor Changes
diff --git a/packages/core-plugin-api/alpha-api-report.md b/packages/core-plugin-api/alpha-api-report.md
index d50bb0abd6..ba3583142f 100644
--- a/packages/core-plugin-api/alpha-api-report.md
+++ b/packages/core-plugin-api/alpha-api-report.md
@@ -4,9 +4,7 @@
```ts
import { ApiRef } from '@backstage/core-plugin-api';
-import { BackstagePlugin } from '@backstage/core-plugin-api';
import { Observable } from '@backstage/types';
-import { ReactNode } from 'react';
import { TranslationMessages as TranslationMessages_2 } from '@backstage/core-plugin-api/alpha';
import { TranslationRef as TranslationRef_2 } from '@backstage/core-plugin-api/alpha';
@@ -74,17 +72,6 @@ export function createTranslationResource<
options: TranslationResourceOptions,
): TranslationResource;
-// @alpha
-export interface PluginOptionsProviderProps {
- // (undocumented)
- children: ReactNode;
- // (undocumented)
- plugin?: BackstagePlugin;
-}
-
-// @alpha
-export const PluginProvider: (props: PluginOptionsProviderProps) => JSX.Element;
-
// @alpha (undocumented)
export type TranslationApi = {
getTranslation<
@@ -245,11 +232,6 @@ export type TranslationSnapshot<
t: TranslationFunction;
};
-// @alpha
-export function usePluginOptions<
- TPluginOptions extends {} = {},
->(): TPluginOptions;
-
// @alpha (undocumented)
export const useTranslationRef: <
TMessages extends {
diff --git a/packages/core-plugin-api/api-report.md b/packages/core-plugin-api/api-report.md
index 930f1f979d..7873b23f13 100644
--- a/packages/core-plugin-api/api-report.md
+++ b/packages/core-plugin-api/api-report.md
@@ -222,7 +222,7 @@ export type BackstageIdentityResponse = {
export type BackstagePlugin<
Routes extends AnyRoutes = {},
ExternalRoutes extends AnyExternalRoutes = {},
- PluginInputOptions extends {} = {},
+ _Ignored extends {} = {},
> = {
getId(): string;
getApis(): Iterable;
@@ -230,7 +230,6 @@ export type BackstagePlugin<
provide(extension: Extension): T;
routes: Routes;
externalRoutes: ExternalRoutes;
- __experimentalReconfigure(options: PluginInputOptions): void;
};
// @public
@@ -318,10 +317,9 @@ export function createExternalRouteRef<
export function createPlugin<
Routes extends AnyRoutes = {},
ExternalRoutes extends AnyExternalRoutes = {},
- PluginInputOptions extends {} = {},
>(
- config: PluginConfig,
-): BackstagePlugin;
+ config: PluginConfig,
+): BackstagePlugin;
// @public
export function createReactExtension<
@@ -647,14 +645,12 @@ export type PendingOAuthRequest = {
export type PluginConfig<
Routes extends AnyRoutes,
ExternalRoutes extends AnyExternalRoutes,
- PluginInputOptions extends {},
> = {
id: string;
apis?: Iterable;
routes?: Routes;
externalRoutes?: ExternalRoutes;
featureFlags?: PluginFeatureFlagConfig[];
- __experimentalConfigure?(options?: PluginInputOptions): {};
};
// @public
diff --git a/packages/core-plugin-api/package.json b/packages/core-plugin-api/package.json
index 34e2491ed5..64fdd00915 100644
--- a/packages/core-plugin-api/package.json
+++ b/packages/core-plugin-api/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/core-plugin-api",
"description": "Core API used by Backstage plugins",
- "version": "1.6.0",
+ "version": "1.7.0-next.0",
"publishConfig": {
"access": "public"
},
diff --git a/packages/core-plugin-api/src/alpha.ts b/packages/core-plugin-api/src/alpha.ts
index 505fd9b818..ebcbcf34c0 100644
--- a/packages/core-plugin-api/src/alpha.ts
+++ b/packages/core-plugin-api/src/alpha.ts
@@ -14,6 +14,5 @@
* limitations under the License.
*/
-export * from './plugin-options';
export * from './translation';
export * from './apis/alpha';
diff --git a/packages/core-plugin-api/src/extensions/extensions.tsx b/packages/core-plugin-api/src/extensions/extensions.tsx
index a9a3127aee..b94354fa2c 100644
--- a/packages/core-plugin-api/src/extensions/extensions.tsx
+++ b/packages/core-plugin-api/src/extensions/extensions.tsx
@@ -21,7 +21,6 @@ import { RouteRef, useRouteRef } from '../routing';
import { attachComponentData } from './componentData';
import { Extension, BackstagePlugin } from '../plugin';
import { PluginErrorBoundary } from './PluginErrorBoundary';
-import { PluginProvider } from '../plugin-options';
import { routableExtensionRenderedEvent } from '../analytics/Tracker';
/**
@@ -258,9 +257,7 @@ export function createReactExtension<
...(mountPoint && { routeRef: mountPoint.id }),
}}
>
-
-
-
+
diff --git a/packages/core-plugin-api/src/plugin-options/usePluginOptions.test.tsx b/packages/core-plugin-api/src/plugin-options/usePluginOptions.test.tsx
deleted file mode 100644
index 96691d503b..0000000000
--- a/packages/core-plugin-api/src/plugin-options/usePluginOptions.test.tsx
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright 2021 The Backstage Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import React from 'react';
-import { renderHook } from '@testing-library/react-hooks';
-import { usePluginOptions, PluginProvider } from './usePluginOptions';
-import { createPlugin } from '../plugin';
-
-describe('usePluginOptions', () => {
- it('should provide a versioned value to hook', () => {
- type TestInputPluginOptions = {
- 'key-1': string;
- };
-
- type TestPluginOptions = {
- 'key-1': string;
- 'key-2': string;
- };
-
- const plugin = createPlugin({
- id: 'my-plugin',
- __experimentalConfigure(_: TestInputPluginOptions): TestPluginOptions {
- return { 'key-1': 'value-1', 'key-2': 'value-2' };
- },
- });
-
- const rendered = renderHook(() => usePluginOptions(), {
- wrapper: ({ children }: React.PropsWithChildren<{}>) => (
- {children}
- ),
- });
-
- const config = rendered.result.current;
-
- expect(config).toEqual({
- 'key-1': 'value-1',
- 'key-2': 'value-2',
- });
- });
-});
diff --git a/packages/core-plugin-api/src/plugin-options/usePluginOptions.tsx b/packages/core-plugin-api/src/plugin-options/usePluginOptions.tsx
deleted file mode 100644
index 8b3f7c109c..0000000000
--- a/packages/core-plugin-api/src/plugin-options/usePluginOptions.tsx
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright 2020 The Backstage Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import {
- createVersionedContext,
- createVersionedValueMap,
- useVersionedContext,
-} from '@backstage/version-bridge';
-import { BackstagePlugin } from '@backstage/core-plugin-api';
-import React, { ReactNode } from 'react';
-
-const contextKey: string = 'plugin-context';
-
-/**
- * Properties for the PluginProvider component.
- *
- * @alpha
- */
-export interface PluginOptionsProviderProps {
- children: ReactNode;
- plugin?: BackstagePlugin;
-}
-
-/**
- * Contains the plugin configuration.
- *
- * @alpha
- */
-export const PluginProvider = (
- props: PluginOptionsProviderProps,
-): JSX.Element => {
- const { children, plugin } = props;
-
- const { Provider } = createVersionedContext<{
- 1: { plugin: BackstagePlugin | undefined };
- }>(contextKey);
-
- return (
-
- {children}
-
- );
-};
-
-/**
- * Grab the current entity from the context, throws if the entity has not yet been loaded
- * or is not available.
- *
- * @alpha
- */
-export function usePluginOptions<
- TPluginOptions extends {} = {},
->(): TPluginOptions {
- const versionedHolder = useVersionedContext<{ 1: TPluginOptions }>(
- contextKey,
- );
-
- if (!versionedHolder) {
- throw new Error('Plugin Options context is not available');
- }
-
- const value = versionedHolder.atVersion(1);
- if (!value) {
- throw new Error('Plugin Options v1 is not available');
- }
-
- return (
- value as unknown as {
- plugin: {
- getPluginOptions(): {};
- };
- }
- ).plugin.getPluginOptions() as TPluginOptions;
-}
diff --git a/packages/core-plugin-api/src/plugin/Plugin.tsx b/packages/core-plugin-api/src/plugin/Plugin.tsx
index da26cd4db0..d97554b27b 100644
--- a/packages/core-plugin-api/src/plugin/Plugin.tsx
+++ b/packages/core-plugin-api/src/plugin/Plugin.tsx
@@ -30,18 +30,9 @@ import { AnyApiFactory } from '../apis';
export class PluginImpl<
Routes extends AnyRoutes,
ExternalRoutes extends AnyExternalRoutes,
- PluginInputOptions extends {},
-> implements BackstagePlugin
+> implements BackstagePlugin
{
- constructor(
- private readonly config: PluginConfig<
- Routes,
- ExternalRoutes,
- PluginInputOptions
- >,
- ) {}
-
- private options: {} | undefined = undefined;
+ constructor(private readonly config: PluginConfig) {}
getId(): string {
return this.config.id;
@@ -67,19 +58,6 @@ export class PluginImpl<
return extension.expose(this);
}
- __experimentalReconfigure(options: PluginInputOptions): void {
- if (this.config.__experimentalConfigure) {
- this.options = this.config.__experimentalConfigure(options);
- }
- }
-
- getPluginOptions(): {} {
- if (this.config.__experimentalConfigure && !this.options) {
- this.options = this.config.__experimentalConfigure();
- }
- return this.options ?? {};
- }
-
toString() {
return `plugin{${this.config.id}}`;
}
@@ -94,9 +72,8 @@ export class PluginImpl<
export function createPlugin<
Routes extends AnyRoutes = {},
ExternalRoutes extends AnyExternalRoutes = {},
- PluginInputOptions extends {} = {},
>(
- config: PluginConfig,
-): BackstagePlugin {
+ config: PluginConfig,
+): BackstagePlugin {
return new PluginImpl(config);
}
diff --git a/packages/core-plugin-api/src/plugin/types.ts b/packages/core-plugin-api/src/plugin/types.ts
index 37ce6c9e7c..3ba7706e16 100644
--- a/packages/core-plugin-api/src/plugin/types.ts
+++ b/packages/core-plugin-api/src/plugin/types.ts
@@ -52,7 +52,7 @@ export type AnyExternalRoutes = { [name: string]: ExternalRouteRef };
export type BackstagePlugin<
Routes extends AnyRoutes = {},
ExternalRoutes extends AnyExternalRoutes = {},
- PluginInputOptions extends {} = {},
+ _Ignored extends {} = {},
> = {
getId(): string;
getApis(): Iterable;
@@ -63,7 +63,6 @@ export type BackstagePlugin<
provide(extension: Extension): T;
routes: Routes;
externalRoutes: ExternalRoutes;
- __experimentalReconfigure(options: PluginInputOptions): void;
};
/**
@@ -84,14 +83,12 @@ export type PluginFeatureFlagConfig = {
export type PluginConfig<
Routes extends AnyRoutes,
ExternalRoutes extends AnyExternalRoutes,
- PluginInputOptions extends {},
> = {
id: string;
apis?: Iterable;
routes?: Routes;
externalRoutes?: ExternalRoutes;
featureFlags?: PluginFeatureFlagConfig[];
- __experimentalConfigure?(options?: PluginInputOptions): {};
};
/**
diff --git a/packages/create-app/CHANGELOG.md b/packages/create-app/CHANGELOG.md
index 6b7276679c..03bd32e124 100644
--- a/packages/create-app/CHANGELOG.md
+++ b/packages/create-app/CHANGELOG.md
@@ -1,5 +1,30 @@
# @backstage/create-app
+## 0.5.6-next.0
+
+### Patch Changes
+
+- ba6a3b59c1: Removed duplicate `apple-touch-icon` link from `packages/app/public/index.html` that linked to nonexistent icon.
+- c8ec0dea4a: Create unique temp directory for each `create-app` execution.
+- b665f2ce65: Change base node image from node:18-bullseye-slim to node:18-bookworm-slim due to Docker build error on bullseye.
+
+ You can apply these change to your own `Dockerfile` by replacing `node:18-bullseye-slim` with `node:18-bookworm-slim`
+
+- deed089a3d: Bump `cypress` to fix the end-to-end tests
+- de42eebaaf: Bumped dev dependencies `@types/node` and `mock-fs`.
+- 04a3f65e15: Bump Docker base images to `node:18-bullseye-slim` to fix compatibility issues raised during image build.
+
+ You can apply these change to your own `Dockerfile` by replacing `node:16-bullseye-slim` with `node:18-bullseye-slim`
+
+- 5eacd5d213: The E2E test setup based on Cypress has been replaced with one based on [Playwright](https://playwright.dev/). Migrating existing apps is not required as this is a standalone setup, only do so if you also want to switch from Cypress to Playwright.
+
+ The scripts to run the E2E tests have been removed from `packages/app/package.json`, as they are now instead run from the root. Instead, a new script has been added to the root `package.json`, `yarn test:e2e`, which runs the E2E tests in development mode, unless `CI` is set in the environment.
+
+ The Playwright setup uses utilities from the new `@backstage/e2e-test-utils` package to find and include all packages in the monorepo that have an `e2e-tests` folder.
+
+- Updated dependencies
+ - @backstage/cli-common@0.1.13-next.0
+
## 0.5.5
### Patch Changes
diff --git a/packages/create-app/package.json b/packages/create-app/package.json
index 15db38b1c5..c46d4f43fa 100644
--- a/packages/create-app/package.json
+++ b/packages/create-app/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/create-app",
"description": "A CLI that helps you create your own Backstage app",
- "version": "0.5.5",
+ "version": "0.5.6-next.0",
"publishConfig": {
"access": "public"
},
diff --git a/packages/create-app/src/createApp.test.ts b/packages/create-app/src/createApp.test.ts
index 47c62520e0..7cb9733567 100644
--- a/packages/create-app/src/createApp.test.ts
+++ b/packages/create-app/src/createApp.test.ts
@@ -36,10 +36,6 @@ const templatingMock = jest.spyOn(tasks, 'templatingTask');
const checkAppExistsMock = jest.spyOn(tasks, 'checkAppExistsTask');
const tryInitGitRepositoryMock = jest.spyOn(tasks, 'tryInitGitRepository');
const readGitConfig = jest.spyOn(tasks, 'readGitConfig');
-const createTemporaryAppFolderMock = jest.spyOn(
- tasks,
- 'createTemporaryAppFolderTask',
-);
const moveAppMock = jest.spyOn(tasks, 'moveAppTask');
const buildAppMock = jest.spyOn(tasks, 'buildAppTask');
@@ -73,7 +69,6 @@ describe('command entrypoint', () => {
const cmd = {} as unknown as Command;
await createApp(cmd);
expect(checkAppExistsMock).toHaveBeenCalled();
- expect(createTemporaryAppFolderMock).toHaveBeenCalled();
expect(tryInitGitRepositoryMock).toHaveBeenCalled();
expect(templatingMock).toHaveBeenCalled();
expect(templatingMock.mock.lastCall?.[0]).toEqual(
@@ -85,7 +80,7 @@ describe('command entrypoint', () => {
'default-app',
),
);
- expect(templatingMock.mock.lastCall?.[1]).toEqual(
+ expect(templatingMock.mock.lastCall?.[1]).toContain(
path.join(tmpdir(), 'MyApp'),
);
expect(moveAppMock).toHaveBeenCalled();
diff --git a/packages/create-app/src/createApp.ts b/packages/create-app/src/createApp.ts
index efa299a3c9..09cede933d 100644
--- a/packages/create-app/src/createApp.ts
+++ b/packages/create-app/src/createApp.ts
@@ -20,12 +20,12 @@ import inquirer, { Answers } from 'inquirer';
import { resolve as resolvePath } from 'path';
import { findPaths } from '@backstage/cli-common';
import os from 'os';
+import fs from 'fs-extra';
import {
Task,
buildAppTask,
checkAppExistsTask,
checkPathExistsTask,
- createTemporaryAppFolderTask,
moveAppTask,
templatingTask,
tryInitGitRepository,
@@ -37,7 +37,6 @@ const DEFAULT_BRANCH = 'master';
export default async (opts: OptionValues): Promise => {
/* eslint-disable-next-line no-restricted-syntax */
const paths = findPaths(__dirname);
-
const answers: Answers = await inquirer.prompt([
{
type: 'input',
@@ -68,7 +67,6 @@ export default async (opts: OptionValues): Promise => {
const templateDir = opts.templatePath
? paths.resolveTarget(opts.templatePath)
: paths.resolveOwn('templates/default-app');
- const tempDir = resolvePath(os.tmpdir(), answers.name);
// Use `--path` argument as application directory when specified, otherwise
// create a directory using `answers.name`
@@ -100,7 +98,7 @@ export default async (opts: OptionValues): Promise => {
await checkAppExistsTask(paths.targetDir, answers.name);
Task.section('Creating a temporary app directory');
- await createTemporaryAppFolderTask(tempDir);
+ const tempDir = await fs.mkdtemp(resolvePath(os.tmpdir(), answers.name));
Task.section('Preparing files');
await templatingTask(templateDir, tempDir, {
diff --git a/packages/create-app/src/lib/tasks.test.ts b/packages/create-app/src/lib/tasks.test.ts
index c94bf43598..68afdc9222 100644
--- a/packages/create-app/src/lib/tasks.test.ts
+++ b/packages/create-app/src/lib/tasks.test.ts
@@ -24,7 +24,6 @@ import {
buildAppTask,
checkAppExistsTask,
checkPathExistsTask,
- createTemporaryAppFolderTask,
moveAppTask,
templatingTask,
tryInitGitRepository,
@@ -66,6 +65,7 @@ jest.mock('./versions', () => ({
'@backstage/core-app-api': '1.0.0',
'@backstage/core-components': '1.0.0',
'@backstage/core-plugin-api': '1.0.0',
+ '@backstage/e2e-test-utils': '1.0.0',
'@backstage/integration-react': '1.0.0',
'@backstage/plugin-api-docs': '1.0.0',
'@backstage/plugin-catalog': '1.0.0',
@@ -162,30 +162,6 @@ describe('tasks', () => {
});
});
- describe('createTemporaryAppFolderTask', () => {
- it('should create a directory at a given path', async () => {
- const tempDir = 'projects/tmpFolder';
- await expect(
- createTemporaryAppFolderTask(tempDir),
- ).resolves.not.toThrow();
- expect(fs.existsSync(tempDir)).toBe(true);
- });
-
- it('should fail if a directory of the same name exists', async () => {
- const tempDir = 'projects/dir';
- await expect(createTemporaryAppFolderTask(tempDir)).rejects.toThrow(
- 'file already exists',
- );
- });
-
- it('should fail if a file of the same name exists', async () => {
- const tempDir = 'projects/dir/my-file.txt';
- await expect(createTemporaryAppFolderTask(tempDir)).rejects.toThrow(
- 'file already exists',
- );
- });
- });
-
describe('buildAppTask', () => {
it('should change to `appDir` and run `yarn install` and `yarn tsc`', async () => {
const mockChdir = jest.spyOn(process, 'chdir');
diff --git a/packages/create-app/src/lib/tasks.ts b/packages/create-app/src/lib/tasks.ts
index 1943b0c3cc..90e6f6ae53 100644
--- a/packages/create-app/src/lib/tasks.ts
+++ b/packages/create-app/src/lib/tasks.ts
@@ -178,22 +178,6 @@ export async function checkPathExistsTask(path: string) {
});
}
-/**
- * Create a folder to store templated files
- *
- * @param tempDir - target temporary directory
- * @throws if `fs.mkdir` fails
- */
-export async function createTemporaryAppFolderTask(tempDir: string) {
- await Task.forItem('creating', 'temporary directory', async () => {
- try {
- await fs.mkdir(tempDir);
- } catch (error) {
- throw new Error(`Failed to create temporary app directory, ${error}`);
- }
- });
-}
-
/**
* Run `yarn install` and `run tsc` in application directory
*
diff --git a/packages/create-app/src/lib/versions.ts b/packages/create-app/src/lib/versions.ts
index 72f5c2c9d5..67db8b4a78 100644
--- a/packages/create-app/src/lib/versions.ts
+++ b/packages/create-app/src/lib/versions.ts
@@ -41,6 +41,7 @@ import { version as config } from '../../../config/package.json';
import { version as coreAppApi } from '../../../core-app-api/package.json';
import { version as coreComponents } from '../../../core-components/package.json';
import { version as corePluginApi } from '../../../core-plugin-api/package.json';
+import { version as e2eTestUtils } from '../../../e2e-test-utils/package.json';
import { version as errors } from '../../../errors/package.json';
import { version as integrationReact } from '../../../integration-react/package.json';
import { version as testUtils } from '../../../test-utils/package.json';
@@ -92,6 +93,7 @@ export const packageVersions = {
'@backstage/core-app-api': coreAppApi,
'@backstage/core-components': coreComponents,
'@backstage/core-plugin-api': corePluginApi,
+ '@backstage/e2e-test-utils': e2eTestUtils,
'@backstage/errors': errors,
'@backstage/integration-react': integrationReact,
'@backstage/plugin-api-docs': pluginApiDocs,
diff --git a/packages/create-app/templates/default-app/.gitignore.hbs b/packages/create-app/templates/default-app/.gitignore.hbs
index d452ac2932..fbf813909c 100644
--- a/packages/create-app/templates/default-app/.gitignore.hbs
+++ b/packages/create-app/templates/default-app/.gitignore.hbs
@@ -49,3 +49,6 @@ site
# vscode database functionality support files
*.session.sql
+
+# E2E test reports
+e2e-test-report/
diff --git a/packages/create-app/templates/default-app/package.json.hbs b/packages/create-app/templates/default-app/package.json.hbs
index 9715331d8f..844a7bca9d 100644
--- a/packages/create-app/templates/default-app/package.json.hbs
+++ b/packages/create-app/templates/default-app/package.json.hbs
@@ -17,6 +17,7 @@
"clean": "backstage-cli repo clean",
"test": "backstage-cli repo test",
"test:all": "backstage-cli repo test --coverage",
+ "test:e2e": "playwright test",
"fix": "backstage-cli repo fix",
"lint": "backstage-cli repo lint --since origin/{{defaultBranch}}",
"lint:all": "backstage-cli repo lint",
@@ -31,6 +32,8 @@
},
"devDependencies": {
"@backstage/cli": "^{{version '@backstage/cli'}}",
+ "@backstage/e2e-test-utils": "^{{version '@backstage/e2e-test-utils'}}",
+ "@playwright/test": "^1.32.3",
"@spotify/prettier-config": "^12.0.0",
"concurrently": "^8.0.0",
"lerna": "^4.0.0",
diff --git a/packages/create-app/templates/default-app/packages/app/cypress.config.js b/packages/create-app/templates/default-app/packages/app/cypress.config.js
deleted file mode 100644
index 113d09ec84..0000000000
--- a/packages/create-app/templates/default-app/packages/app/cypress.config.js
+++ /dev/null
@@ -1,11 +0,0 @@
-const { defineConfig } = require('cypress');
-
-module.exports = defineConfig({
- fixturesFolder: false,
- retries: 3,
-
- e2e: {
- supportFile: false,
- baseUrl: 'http://localhost:3001',
- },
-});
diff --git a/packages/create-app/templates/default-app/packages/app/cypress/.eslintrc.json b/packages/create-app/templates/default-app/packages/app/cypress/.eslintrc.json
deleted file mode 100644
index b903ff250a..0000000000
--- a/packages/create-app/templates/default-app/packages/app/cypress/.eslintrc.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "plugins": ["cypress"],
- "extends": ["plugin:cypress/recommended"],
- "rules": {
- "jest/expect-expect": [
- "error",
- {
- "assertFunctionNames": ["expect", "cy.contains", "cy.**.should"]
- }
- ]
- }
-}
diff --git a/packages/create-app/templates/default-app/packages/app/cypress/e2e/app.cy.js b/packages/create-app/templates/default-app/packages/app/cypress/e2e/app.cy.js
deleted file mode 100644
index 43fb2e32de..0000000000
--- a/packages/create-app/templates/default-app/packages/app/cypress/e2e/app.cy.js
+++ /dev/null
@@ -1,6 +0,0 @@
-describe('App', () => {
- it('should render the catalog', () => {
- cy.visit('/');
- cy.contains('My Company Catalog');
- });
-});
diff --git a/plugins/catalog-customized/src/plugin.ts b/packages/create-app/templates/default-app/packages/app/e2e-tests/app.test.ts
similarity index 74%
rename from plugins/catalog-customized/src/plugin.ts
rename to packages/create-app/templates/default-app/packages/app/e2e-tests/app.test.ts
index ce729d5226..d45bc0dbf0 100644
--- a/plugins/catalog-customized/src/plugin.ts
+++ b/packages/create-app/templates/default-app/packages/app/e2e-tests/app.test.ts
@@ -14,9 +14,10 @@
* limitations under the License.
*/
-import { catalogPlugin } from '@backstage/plugin-catalog';
+import { test, expect } from '@playwright/test';
-// id: 'catalog-customized'
-catalogPlugin.__experimentalReconfigure({
- createButtonTitle: 'New',
+test('App should render the welcome page', async ({ page }) => {
+ await page.goto('/');
+
+ await expect(page.getByText('My Company Catalog')).toBeVisible();
});
diff --git a/packages/create-app/templates/default-app/packages/app/package.json.hbs b/packages/create-app/templates/default-app/packages/app/package.json.hbs
index b934b86945..598f049a4c 100644
--- a/packages/create-app/templates/default-app/packages/app/package.json.hbs
+++ b/packages/create-app/templates/default-app/packages/app/package.json.hbs
@@ -11,11 +11,7 @@
"build": "backstage-cli package build",
"clean": "backstage-cli package clean",
"test": "backstage-cli package test",
- "lint": "backstage-cli package lint",
- "test:e2e": "cross-env PORT=3001 start-server-and-test start http://localhost:3001 cy:dev",
- "test:e2e:ci": "cross-env PORT=3001 start-server-and-test start http://localhost:3001 cy:run",
- "cy:dev": "cypress open",
- "cy:run": "cypress run --browser chrome"
+ "lint": "backstage-cli package lint"
},
"dependencies": {
"@backstage/app-defaults": "^{{version '@backstage/app-defaults'}}",
@@ -54,15 +50,13 @@
},
"devDependencies": {
"@backstage/test-utils": "^{{version '@backstage/test-utils'}}",
+ "@playwright/test": "^1.32.3",
"@testing-library/jest-dom": "^5.10.1",
"@testing-library/react": "^12.1.3",
"@testing-library/user-event": "^14.0.0",
"@testing-library/dom": "^8.0.0",
"@types/react-dom": "*",
- "cross-env": "^7.0.0",
- "cypress": "^12.0.0",
- "eslint-plugin-cypress": "^2.10.3",
- "start-server-and-test": "^1.10.11"
+ "cross-env": "^7.0.0"
},
"browserslist": {
"production": [
diff --git a/packages/create-app/templates/default-app/playwright.config.ts b/packages/create-app/templates/default-app/playwright.config.ts
new file mode 100644
index 0000000000..37c7fb14c7
--- /dev/null
+++ b/packages/create-app/templates/default-app/playwright.config.ts
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2023 The Backstage Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { defineConfig } from '@playwright/test';
+import { generateProjects } from '@backstage/e2e-test-utils/playwright';
+
+/**
+ * See https://playwright.dev/docs/test-configuration.
+ */
+export default defineConfig({
+ timeout: 60_000,
+
+ expect: {
+ timeout: 5_000,
+ },
+
+ // Run your local dev server before starting the tests
+ webServer: process.env.CI
+ ? []
+ : [
+ {
+ command: 'yarn start',
+ port: 3000,
+ reuseExistingServer: true,
+ timeout: 60_000,
+ },
+ ],
+
+ forbidOnly: !!process.env.CI,
+
+ retries: process.env.CI ? 2 : 0,
+
+ reporter: [['html', { open: 'never', outputFolder: 'e2e-test-report' }]],
+
+ use: {
+ actionTimeout: 0,
+ baseURL:
+ process.env.PLAYWRIGHT_URL ??
+ (process.env.CI ? 'http://localhost:7007' : 'http://localhost:3000'),
+ screenshot: 'only-on-failure',
+ trace: 'on-first-retry',
+ },
+
+ outputDir: 'node_modules/.cache/e2e-test-results',
+
+ projects: generateProjects(), // Find all packages with e2e-test folders
+});
diff --git a/packages/dev-utils/CHANGELOG.md b/packages/dev-utils/CHANGELOG.md
index 434ede5d73..714ca3bd1f 100644
--- a/packages/dev-utils/CHANGELOG.md
+++ b/packages/dev-utils/CHANGELOG.md
@@ -1,5 +1,20 @@
# @backstage/dev-utils
+## 1.0.22-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/test-utils@1.4.4-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/integration-react@1.1.20-next.0
+ - @backstage/app-defaults@1.4.4-next.0
+ - @backstage/core-app-api@1.10.1-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+
## 1.0.21
### Patch Changes
diff --git a/packages/dev-utils/package.json b/packages/dev-utils/package.json
index 0bf405772f..fb2b086d44 100644
--- a/packages/dev-utils/package.json
+++ b/packages/dev-utils/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/dev-utils",
"description": "Utilities for developing Backstage plugins.",
- "version": "1.0.21",
+ "version": "1.0.22-next.0",
"publishConfig": {
"access": "public",
"main": "dist/index.esm.js",
diff --git a/plugins/catalog-customized/.eslintrc.js b/packages/e2e-test-utils/.eslintrc.js
similarity index 100%
rename from plugins/catalog-customized/.eslintrc.js
rename to packages/e2e-test-utils/.eslintrc.js
diff --git a/packages/e2e-test-utils/CHANGELOG.md b/packages/e2e-test-utils/CHANGELOG.md
new file mode 100644
index 0000000000..de15b39751
--- /dev/null
+++ b/packages/e2e-test-utils/CHANGELOG.md
@@ -0,0 +1,7 @@
+# @backstage/e2e-test-utils
+
+## 0.1.0-next.0
+
+### Minor Changes
+
+- f5b41b27a9: Initial release.
diff --git a/packages/e2e-test-utils/README.md b/packages/e2e-test-utils/README.md
new file mode 100644
index 0000000000..d9459dc64a
--- /dev/null
+++ b/packages/e2e-test-utils/README.md
@@ -0,0 +1,12 @@
+# @backstage/e2e-test-utils
+
+_This package was created through the Backstage CLI_.
+
+## Installation
+
+Install the package via Yarn:
+
+```sh
+cd # if within a monorepo
+yarn add --dev @backstage/e2e-test-utils
+```
diff --git a/packages/e2e-test-utils/catalog-info.yaml b/packages/e2e-test-utils/catalog-info.yaml
new file mode 100644
index 0000000000..d1dea51dc5
--- /dev/null
+++ b/packages/e2e-test-utils/catalog-info.yaml
@@ -0,0 +1,10 @@
+apiVersion: backstage.io/v1alpha1
+kind: Component
+metadata:
+ name: backstage-e2e-test-utils
+ title: '@backstage/e2e-test-utils'
+ description: Shared end-to-end test utilities Backstage
+spec:
+ lifecycle: experimental
+ type: backstage-node-library
+ owner: maintainers
diff --git a/packages/e2e-test-utils/package.json b/packages/e2e-test-utils/package.json
new file mode 100644
index 0000000000..fcbae56796
--- /dev/null
+++ b/packages/e2e-test-utils/package.json
@@ -0,0 +1,57 @@
+{
+ "name": "@backstage/e2e-test-utils",
+ "description": "Shared end-to-end test utilities Backstage",
+ "version": "0.1.0-next.0",
+ "main": "src/index.ts",
+ "types": "src/index.ts",
+ "license": "Apache-2.0",
+ "publishConfig": {
+ "access": "public"
+ },
+ "exports": {
+ "./playwright": "./src/playwright/index.ts",
+ "./package.json": "./package.json"
+ },
+ "typesVersions": {
+ "*": {
+ "playwright": [
+ "src/playwright/index.ts"
+ ],
+ "package.json": [
+ "package.json"
+ ]
+ }
+ },
+ "backstage": {
+ "role": "node-library"
+ },
+ "scripts": {
+ "start": "backstage-cli package start",
+ "build": "backstage-cli package build",
+ "lint": "backstage-cli package lint",
+ "test": "backstage-cli package test",
+ "clean": "backstage-cli package clean",
+ "prepack": "backstage-cli package prepack",
+ "postpack": "backstage-cli package postpack"
+ },
+ "dependencies": {
+ "@manypkg/get-packages": "^1.1.3",
+ "fs-extra": "^10.1.0"
+ },
+ "devDependencies": {
+ "@backstage/cli": "workspace:^",
+ "@backstage/cli-node": "workspace:^",
+ "@types/fs-extra": "^9.0.1"
+ },
+ "peerDependencies": {
+ "@playwright/test": "^1.32.3"
+ },
+ "peerDependenciesMeta": {
+ "@playwright/test": {
+ "optional": true
+ }
+ },
+ "files": [
+ "dist"
+ ]
+}
diff --git a/packages/e2e-test-utils/playwright-api-report.md b/packages/e2e-test-utils/playwright-api-report.md
new file mode 100644
index 0000000000..7153f2e578
--- /dev/null
+++ b/packages/e2e-test-utils/playwright-api-report.md
@@ -0,0 +1,15 @@
+## API Report File for "@backstage/e2e-test-utils"
+
+> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).
+
+```ts
+import { PlaywrightTestConfig } from '@playwright/test';
+
+// @public
+export function failOnBrowserErrors(): void;
+
+// @public
+export function generateProjects(): PlaywrightTestConfig['projects'];
+
+// (No @packageDocumentation comment for this package)
+```
diff --git a/plugins/kubernetes/src/components/ResourceUtilization/index.ts b/packages/e2e-test-utils/src/index.ts
similarity index 90%
rename from plugins/kubernetes/src/components/ResourceUtilization/index.ts
rename to packages/e2e-test-utils/src/index.ts
index 33d232cbf4..4b9026cde5 100644
--- a/plugins/kubernetes/src/components/ResourceUtilization/index.ts
+++ b/packages/e2e-test-utils/src/index.ts
@@ -13,4 +13,4 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-export { ResourceUtilization } from './ResourceUtilization';
+export {};
diff --git a/packages/e2e-test-utils/src/playwright.ts b/packages/e2e-test-utils/src/playwright.ts
new file mode 100644
index 0000000000..63599d30db
--- /dev/null
+++ b/packages/e2e-test-utils/src/playwright.ts
@@ -0,0 +1,17 @@
+/*
+ * Copyright 2023 The Backstage Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+export * from './playwright/index';
diff --git a/packages/e2e-test-utils/src/playwright/failOnBrowserErrors.ts b/packages/e2e-test-utils/src/playwright/failOnBrowserErrors.ts
new file mode 100644
index 0000000000..af7baa9540
--- /dev/null
+++ b/packages/e2e-test-utils/src/playwright/failOnBrowserErrors.ts
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2023 The Backstage Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { test } from '@playwright/test';
+
+/**
+ * Calling this at the top of your test file will ensure that tests fail if the browser
+ * logs any errors or if there are any uncaught exceptions.
+ *
+ * @public
+ */
+export function failOnBrowserErrors(): void {
+ test.beforeEach(async ({ page }) => {
+ page.on('pageerror', error => {
+ throw new Error(`Uncaught exception on page, ${error}`);
+ });
+
+ page.on('console', msg => {
+ if (msg.type() === 'error') {
+ throw new Error(`Unexpected console error message "${msg.text()}"`);
+ }
+ });
+ });
+}
diff --git a/packages/e2e-test-utils/src/playwright/generateProjects.ts b/packages/e2e-test-utils/src/playwright/generateProjects.ts
new file mode 100644
index 0000000000..b6f3d159c5
--- /dev/null
+++ b/packages/e2e-test-utils/src/playwright/generateProjects.ts
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2023 The Backstage Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import fs from 'fs-extra';
+import { resolve as resolvePath } from 'path';
+import { PlaywrightTestConfig } from '@playwright/test';
+import { getPackagesSync } from '@manypkg/get-packages';
+import type { BackstagePackage } from '@backstage/cli-node';
+
+/**
+ * Generates a list of playwright projects by scanning the monorepo for packages with an `e2e-tests/` folder.
+ *
+ * @public
+ */
+export function generateProjects(): PlaywrightTestConfig['projects'] {
+ // TODO(Rugvip): Switch this over to use @backstage/cli-node once released, and support SINCE=origin/main
+ const { root, packages } = getPackagesSync(process.cwd());
+ const e2eTestPackages = [...(root ? [root] : []), ...packages].filter(pkg => {
+ return fs.pathExistsSync(resolvePath(pkg.dir, 'e2e-tests'));
+ }) as BackstagePackage[];
+
+ return e2eTestPackages.map(pkg => ({
+ name: pkg.packageJson.name,
+ testDir: resolvePath(pkg.dir, 'e2e-tests'),
+ use: {
+ channel: 'chrome',
+ },
+ }));
+}
diff --git a/packages/e2e-test-utils/src/playwright/index.ts b/packages/e2e-test-utils/src/playwright/index.ts
new file mode 100644
index 0000000000..c5750581d7
--- /dev/null
+++ b/packages/e2e-test-utils/src/playwright/index.ts
@@ -0,0 +1,18 @@
+/*
+ * Copyright 2023 The Backstage Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+export { generateProjects } from './generateProjects';
+export { failOnBrowserErrors } from './failOnBrowserErrors';
diff --git a/packages/e2e-test-utils/src/setupTests.ts b/packages/e2e-test-utils/src/setupTests.ts
new file mode 100644
index 0000000000..4b9026cde5
--- /dev/null
+++ b/packages/e2e-test-utils/src/setupTests.ts
@@ -0,0 +1,16 @@
+/*
+ * Copyright 2023 The Backstage Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+export {};
diff --git a/packages/e2e-test/CHANGELOG.md b/packages/e2e-test/CHANGELOG.md
index cee3b7cc56..1fdf65a72e 100644
--- a/packages/e2e-test/CHANGELOG.md
+++ b/packages/e2e-test/CHANGELOG.md
@@ -1,5 +1,14 @@
# e2e-test
+## 0.2.8-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/create-app@0.5.6-next.0
+ - @backstage/cli-common@0.1.13-next.0
+ - @backstage/errors@1.2.2
+
## 0.2.7
### Patch Changes
diff --git a/packages/e2e-test/package.json b/packages/e2e-test/package.json
index 10e4cb3c47..1308c60d96 100644
--- a/packages/e2e-test/package.json
+++ b/packages/e2e-test/package.json
@@ -1,7 +1,7 @@
{
"name": "e2e-test",
"description": "E2E test for verifying Backstage packages",
- "version": "0.2.7",
+ "version": "0.2.8-next.0",
"private": true,
"backstage": {
"role": "cli"
@@ -37,7 +37,6 @@
"handlebars": "^4.7.3",
"mysql2": "^2.2.5",
"pgtools": "^1.0.0",
- "puppeteer": "^17.0.0",
"tree-kill": "^1.2.2"
},
"devDependencies": {
diff --git a/packages/e2e-test/src/commands/run.ts b/packages/e2e-test/src/commands/run.ts
index 6cca0fb987..cf95f6856d 100644
--- a/packages/e2e-test/src/commands/run.ts
+++ b/packages/e2e-test/src/commands/run.ts
@@ -20,13 +20,11 @@ import fetch from 'cross-fetch';
import handlebars from 'handlebars';
import killTree from 'tree-kill';
import { resolve as resolvePath, join as joinPath } from 'path';
-import puppeteer from 'puppeteer';
import path from 'path';
import {
spawnPiped,
runPlain,
- waitForPageWithText,
waitFor,
waitForExit,
print,
@@ -42,6 +40,7 @@ const paths = findPaths(__dirname);
const templatePackagePaths = [
'packages/cli/templates/default-plugin/package.json.hbs',
+ 'packages/create-app/templates/default-app/package.json.hbs',
'packages/create-app/templates/default-app/packages/app/package.json.hbs',
'packages/create-app/templates/default-app/packages/backend/package.json.hbs',
];
@@ -66,8 +65,11 @@ export async function run() {
print('Creating a Backstage Backend Plugin');
await createPlugin({ appDir, pluginId, select: 'backend-plugin' });
- print('Starting the app');
- await testAppServe(pluginId, appDir);
+ print(`Running 'yarn test:e2e' in newly created app with new plugin`);
+ await runPlain(['yarn', 'test:e2e'], {
+ cwd: appDir,
+ env: { ...process.env, CI: undefined },
+ });
if (
Boolean(process.env.POSTGRES_USER) ||
@@ -297,15 +299,6 @@ async function createApp(
await runPlain(['yarn', cmd], { cwd: appDir });
}
- print(`Running 'yarn test:e2e:ci' in newly created app`);
- await runPlain(['yarn', 'test:e2e:ci'], {
- cwd: resolvePath(appDir, 'packages', 'app'),
- env: {
- ...process.env,
- APP_CONFIG_app_baseUrl: '"http://localhost:3001"',
- },
- });
-
return appDir;
} finally {
child.kill();
@@ -381,63 +374,6 @@ async function createPlugin(options: {
}
}
-/**
- * Start serving the newly created app and make sure that the create plugin is rendering correctly
- */
-async function testAppServe(pluginId: string, appDir: string) {
- const startApp = spawnPiped(['yarn', 'start'], {
- cwd: appDir,
- env: {
- ...process.env,
- GITHUB_TOKEN: 'abc',
- },
- });
-
- let successful = false;
-
- let browser;
- try {
- for (let attempts = 1; ; attempts++) {
- try {
- browser = await puppeteer.launch();
- const page = await browser.newPage();
-
- await page.goto('http://localhost:3000', { waitUntil: 'networkidle0' });
-
- await waitForPageWithText(page, '/', 'My Company Catalog');
- await waitForPageWithText(
- page,
- `/${pluginId}`,
- `Welcome to ${pluginId}!`,
- );
-
- print('Both App and Plugin loaded correctly');
- successful = true;
- break;
- } catch (error) {
- if (attempts >= 20) {
- throw new Error(`App serve test failed, ${error}`);
- }
- print(`App serve failed, trying again, ${error}`);
- await new Promise(resolve => setTimeout(resolve, 1000));
- }
- }
- } finally {
- // Kill entire process group, otherwise we'll end up with hanging serve processes
- await new Promise((res, rej) => {
- killTree(startApp.pid!, err => (err ? rej(err) : res()));
- });
- }
-
- try {
- await waitForExit(startApp);
- } catch (error) {
- if (!successful) {
- throw error;
- }
- }
-}
-
/** Drops PG databases */
async function dropDB(database: string, client: string) {
try {
@@ -527,6 +463,10 @@ async function testBackendStart(appDir: string, ...args: string[]) {
!l.includes('check the migration guide at https://a.co/7PzMCcy') &&
!l.includes(
'(Use `node --trace-warnings ...` to show where the warning was created)',
+ ) &&
+ !l.includes('Custom ESM Loaders is an experimental feature') &&
+ !l.includes(
+ 'ExperimentalWarning: `globalPreload` is planned for removal',
),
).length !== 0
);
diff --git a/packages/e2e-test/src/lib/helpers.ts b/packages/e2e-test/src/lib/helpers.ts
index b3fd665fd2..fc5aefcff9 100644
--- a/packages/e2e-test/src/lib/helpers.ts
+++ b/packages/e2e-test/src/lib/helpers.ts
@@ -22,7 +22,6 @@ import {
ChildProcess,
} from 'child_process';
import { promisify } from 'util';
-import puppeteer from 'puppeteer';
const execFile = promisify(execFileCb);
@@ -125,50 +124,6 @@ export async function waitForExit(child: ChildProcess) {
);
}
-export async function waitForPageWithText(
- page: puppeteer.Page,
- path: string,
- text: string,
- { intervalMs = 1000, maxFindAttempts = 50 } = {},
-) {
- let findAttempts = 0;
- for (;;) {
- try {
- const waitTimeMs = intervalMs * (findAttempts + 1);
- console.log(`Attempting to load page at ${path}, waiting ${waitTimeMs}`);
- await new Promise(resolve => setTimeout(resolve, waitTimeMs));
-
- await page.goto(`http://localhost:3000${path}`, {
- waitUntil: 'networkidle0',
- });
-
- const match = await page.evaluate(
- textContent =>
- Array.from(document.querySelectorAll('*')).some(
- el => el.textContent === textContent,
- ),
- text,
- );
-
- if (!match) {
- throw new Error(`Expected to find text ${text}`);
- }
-
- break;
- } catch (error) {
- console.log(error);
- assertError(error);
-
- findAttempts++;
- if (findAttempts >= maxFindAttempts) {
- throw new Error(
- `Failed to load page '${path}', max number of attempts reached`,
- );
- }
- }
- }
-}
-
export function print(msg: string) {
return process.stdout.write(`${msg}\n`);
}
diff --git a/packages/frontend-app-api/CHANGELOG.md b/packages/frontend-app-api/CHANGELOG.md
index f944dd1e27..a1228e084c 100644
--- a/packages/frontend-app-api/CHANGELOG.md
+++ b/packages/frontend-app-api/CHANGELOG.md
@@ -1,5 +1,24 @@
# @backstage/frontend-app-api
+## 0.2.0-next.0
+
+### Minor Changes
+
+- 9d03dfe5e3: The `createApp` config option has been replaced by a new `configLoader` option. There is now also a `pluginLoader` option that can be used to dynamically load plugins into the app.
+
+### Patch Changes
+
+- 322bbcae24: Internal update for removal of experimental plugin configuration API.
+- 66d51a4827: Prevents root extension override and duplicated plugin extensions.
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/frontend-plugin-api@0.1.1-next.0
+ - @backstage/config@1.1.0
+ - @backstage/core-app-api@1.10.1-next.0
+ - @backstage/plugin-graphiql@0.2.55-next.0
+ - @backstage/types@1.1.1
+
## 0.1.0
### Minor Changes
diff --git a/packages/frontend-app-api/api-report.md b/packages/frontend-app-api/api-report.md
index 12cf853f9d..2e77ef904b 100644
--- a/packages/frontend-app-api/api-report.md
+++ b/packages/frontend-app-api/api-report.md
@@ -12,7 +12,8 @@ import { JSX as JSX_2 } from 'react';
// @public (undocumented)
export function createApp(options: {
plugins: BackstagePlugin[];
- config?: ConfigApi;
+ configLoader?: () => Promise;
+ pluginLoader?: (ctx: { config: ConfigApi }) => Promise;
}): {
createRoot(): JSX_2.Element;
};
diff --git a/packages/frontend-app-api/package.json b/packages/frontend-app-api/package.json
index 7cd4557ea1..0982cb0157 100644
--- a/packages/frontend-app-api/package.json
+++ b/packages/frontend-app-api/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/frontend-app-api",
- "version": "0.1.0",
+ "version": "0.2.0-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/packages/frontend-app-api/src/wiring/createApp.tsx b/packages/frontend-app-api/src/wiring/createApp.tsx
index 462bfcdccc..bb50dea075 100644
--- a/packages/frontend-app-api/src/wiring/createApp.tsx
+++ b/packages/frontend-app-api/src/wiring/createApp.tsx
@@ -247,50 +247,71 @@ export function createInstances(options: {
/** @public */
export function createApp(options: {
plugins: BackstagePlugin[];
- config?: ConfigApi;
+ configLoader?: () => Promise;
+ pluginLoader?: (ctx: { config: ConfigApi }) => Promise;
}): {
createRoot(): JSX.Element;
} {
- const discoveredPlugins = getAvailablePlugins();
- const allPlugins = Array.from(
- new Set([...discoveredPlugins, ...options.plugins]),
- );
- const appConfig =
- options?.config ??
- ConfigReader.fromConfigs(overrideBaseUrlConfigs(defaultConfigLoaderSync()));
+ async function appLoader() {
+ const config =
+ (await options?.configLoader?.()) ??
+ ConfigReader.fromConfigs(
+ overrideBaseUrlConfigs(defaultConfigLoaderSync()),
+ );
- const { rootInstances } = createInstances({
- plugins: allPlugins,
- config: appConfig,
- });
+ const discoveredPlugins = getAvailablePlugins();
+ const loadedPlugins = (await options.pluginLoader?.({ config })) ?? [];
+ const allPlugins = Array.from(
+ new Set([...discoveredPlugins, ...options.plugins, ...loadedPlugins]),
+ );
- const routePaths = extractRouteInfoFromInstanceTree(rootInstances);
+ const { rootInstances } = createInstances({
+ plugins: allPlugins,
+ config,
+ });
- const coreInstance = rootInstances.find(({ id }) => id === 'core');
- if (!coreInstance) {
- throw Error('Unable to find core extension instance');
+ const routePaths = extractRouteInfoFromInstanceTree(rootInstances);
+
+ const coreInstance = rootInstances.find(({ id }) => id === 'core');
+ if (!coreInstance) {
+ throw Error('Unable to find core extension instance');
+ }
+
+ const apiHolder = createApiHolder(coreInstance, config);
+
+ const appContext = createLegacyAppContext(allPlugins);
+
+ const rootElements = rootInstances
+ .map(e => (
+
+ {e.getData(coreExtensionData.reactElement)}
+
+ ))
+ .filter((x): x is JSX.Element => !!x);
+
+ const App = () => (
+
+
+
+
+ {/* TODO: set base path using the logic from AppRouter */}
+ {rootElements}
+
+
+
+
+ );
+
+ return { default: App };
}
- const apiHolder = createApiHolder(coreInstance, appConfig);
-
- const appContext = createLegacyAppContext(allPlugins);
-
return {
createRoot() {
- const rootElements = rootInstances
- .map(e => e.getData(coreExtensionData.reactElement))
- .filter((x): x is JSX.Element => !!x);
+ const LazyApp = React.lazy(appLoader);
return (
-
-
-
-
- {/* TODO: set base path using the logic from AppRouter */}
- {rootElements}
-
-
-
-
+
+
+
);
},
};
@@ -314,7 +335,6 @@ function toLegacyPlugin(plugin: BackstagePlugin): LegacyBackstagePlugin {
getApis: notImplemented,
getFeatureFlags: notImplemented,
provide: notImplemented,
- __experimentalReconfigure: notImplemented,
};
}
diff --git a/packages/frontend-plugin-api/CHANGELOG.md b/packages/frontend-plugin-api/CHANGELOG.md
index bf0531ab43..22620aebe2 100644
--- a/packages/frontend-plugin-api/CHANGELOG.md
+++ b/packages/frontend-plugin-api/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/frontend-plugin-api
+## 0.1.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/types@1.1.1
+
## 0.1.0
### Minor Changes
diff --git a/packages/frontend-plugin-api/package.json b/packages/frontend-plugin-api/package.json
index 957c207617..8e71544393 100644
--- a/packages/frontend-plugin-api/package.json
+++ b/packages/frontend-plugin-api/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/frontend-plugin-api",
- "version": "0.1.0",
+ "version": "0.1.1-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/packages/frontend-plugin-api/src/wiring/createPlugin.test.ts b/packages/frontend-plugin-api/src/wiring/createPlugin.test.ts
index 1d45c221af..b14838c17a 100644
--- a/packages/frontend-plugin-api/src/wiring/createPlugin.test.ts
+++ b/packages/frontend-plugin-api/src/wiring/createPlugin.test.ts
@@ -16,14 +16,14 @@
import React from 'react';
import { createApp } from '@backstage/frontend-app-api';
-import { render, screen } from '@testing-library/react';
+import { screen } from '@testing-library/react';
import { createSchemaFromZod } from '../schema/createSchemaFromZod';
import { createPlugin, BackstagePlugin } from './createPlugin';
import { JsonObject } from '@backstage/types';
import { createExtension } from './createExtension';
import { createExtensionDataRef } from './createExtensionDataRef';
import { coreExtensionData } from './coreExtensionData';
-import { MockConfigApi } from '@backstage/test-utils';
+import { MockConfigApi, renderWithEffects } from '@backstage/test-utils';
import { createExtensionInput } from './createExtensionInput';
const nameExtensionDataRef = createExtensionDataRef('name');
@@ -112,7 +112,7 @@ function createTestAppRoot({
}) {
return createApp({
plugins: plugins,
- config: new MockConfigApi(config),
+ configLoader: async () => new MockConfigApi(config),
}).createRoot();
}
@@ -123,24 +123,26 @@ describe('createPlugin', () => {
expect(plugin).toBeDefined();
});
- it('should create a plugin with extension instances', () => {
+ it('should create a plugin with extension instances', async () => {
const plugin = createPlugin({
id: 'empty',
extensions: [TechRadarPage, CatalogPage, outputExtension],
});
expect(plugin).toBeDefined();
- render(
+ await renderWithEffects(
createTestAppRoot({
plugins: [plugin],
config: { app: { extensions: [{ 'core.layout': false }] } },
}),
);
- expect(screen.getByText('Names: TechRadar, Catalog')).toBeInTheDocument();
+ await expect(
+ screen.findByText('Names: TechRadar, Catalog'),
+ ).resolves.toBeInTheDocument();
});
- it('should create a plugin with nested extension instances', () => {
+ it('should create a plugin with nested extension instances', async () => {
const plugin = createPlugin({
id: 'empty',
extensions: [
@@ -153,7 +155,7 @@ describe('createPlugin', () => {
});
expect(plugin).toBeDefined();
- render(
+ await renderWithEffects(
createTestAppRoot({
plugins: [plugin],
config: {
@@ -171,10 +173,10 @@ describe('createPlugin', () => {
}),
);
- expect(
- screen.getByText(
+ await expect(
+ screen.findByText(
'Names: TechRadar, CatalogRenamed, TechDocs-TechDocsAddon',
),
- ).toBeInTheDocument();
+ ).resolves.toBeInTheDocument();
});
});
diff --git a/packages/integration-react/CHANGELOG.md b/packages/integration-react/CHANGELOG.md
index ff0502e498..1f6cd21668 100644
--- a/packages/integration-react/CHANGELOG.md
+++ b/packages/integration-react/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/integration-react
+## 1.1.20-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/config@1.1.0
+ - @backstage/theme@0.4.2
+
## 1.1.19
### Patch Changes
diff --git a/packages/integration-react/package.json b/packages/integration-react/package.json
index d08d3e0d4a..89d7cf48e9 100644
--- a/packages/integration-react/package.json
+++ b/packages/integration-react/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/integration-react",
"description": "Frontend package for managing integrations towards external systems",
- "version": "1.1.19",
+ "version": "1.1.20-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/packages/integration/CHANGELOG.md b/packages/integration/CHANGELOG.md
index eabcfd9d4b..961e6eb869 100644
--- a/packages/integration/CHANGELOG.md
+++ b/packages/integration/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/integration
+## 1.7.1-next.0
+
+### Patch Changes
+
+- 3963d0b885: Ensure that all relevant config fields are properly marked as secret
+- Updated dependencies
+ - @backstage/config@1.1.0
+ - @backstage/errors@1.2.2
+
## 1.7.0
### Minor Changes
diff --git a/packages/integration/package.json b/packages/integration/package.json
index 83b137d347..ab78c07edf 100644
--- a/packages/integration/package.json
+++ b/packages/integration/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/integration",
"description": "Helpers for managing integrations towards external systems",
- "version": "1.7.0",
+ "version": "1.7.1-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/packages/repo-tools/CHANGELOG.md b/packages/repo-tools/CHANGELOG.md
index 0b03d4808e..0864fd7347 100644
--- a/packages/repo-tools/CHANGELOG.md
+++ b/packages/repo-tools/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/repo-tools
+## 0.3.5-next.0
+
+### Patch Changes
+
+- de42eebaaf: Bumped dev dependencies `@types/node` and `mock-fs`.
+- Updated dependencies
+ - @backstage/cli-common@0.1.13-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/cli-node@0.1.5-next.0
+ - @backstage/errors@1.2.2
+
## 0.3.4
### Patch Changes
diff --git a/packages/repo-tools/package.json b/packages/repo-tools/package.json
index 0eb881aea8..8fc04fce71 100644
--- a/packages/repo-tools/package.json
+++ b/packages/repo-tools/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/repo-tools",
"description": "CLI for Backstage repo tooling ",
- "version": "0.3.4",
+ "version": "0.3.5-next.0",
"publishConfig": {
"access": "public"
},
diff --git a/packages/techdocs-cli-embedded-app/CHANGELOG.md b/packages/techdocs-cli-embedded-app/CHANGELOG.md
index ec60ebb2fd..2e07601451 100644
--- a/packages/techdocs-cli-embedded-app/CHANGELOG.md
+++ b/packages/techdocs-cli-embedded-app/CHANGELOG.md
@@ -1,5 +1,24 @@
# techdocs-cli-embedded-app
+## 0.2.87-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/test-utils@1.4.4-next.0
+ - @backstage/cli@0.23.0-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/plugin-catalog@1.14.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/integration-react@1.1.20-next.0
+ - @backstage/plugin-techdocs@1.7.1-next.0
+ - @backstage/app-defaults@1.4.4-next.0
+ - @backstage/config@1.1.0
+ - @backstage/core-app-api@1.10.1-next.0
+ - @backstage/plugin-techdocs-react@1.1.12-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+
## 0.2.86
### Patch Changes
diff --git a/packages/techdocs-cli-embedded-app/cypress.json b/packages/techdocs-cli-embedded-app/cypress.json
deleted file mode 100644
index 5de7ebffea..0000000000
--- a/packages/techdocs-cli-embedded-app/cypress.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "baseUrl": "http://localhost:3001",
- "fixturesFolder": false,
- "pluginsFile": false
-}
diff --git a/packages/techdocs-cli-embedded-app/cypress/.eslintrc.json b/packages/techdocs-cli-embedded-app/cypress/.eslintrc.json
deleted file mode 100644
index b903ff250a..0000000000
--- a/packages/techdocs-cli-embedded-app/cypress/.eslintrc.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "plugins": ["cypress"],
- "extends": ["plugin:cypress/recommended"],
- "rules": {
- "jest/expect-expect": [
- "error",
- {
- "assertFunctionNames": ["expect", "cy.contains", "cy.**.should"]
- }
- ]
- }
-}
diff --git a/packages/techdocs-cli-embedded-app/package.json b/packages/techdocs-cli-embedded-app/package.json
index 4d49be6016..7c5ceaf795 100644
--- a/packages/techdocs-cli-embedded-app/package.json
+++ b/packages/techdocs-cli-embedded-app/package.json
@@ -1,6 +1,6 @@
{
"name": "techdocs-cli-embedded-app",
- "version": "0.2.86",
+ "version": "0.2.87-next.0",
"private": true,
"backstage": {
"role": "frontend"
@@ -42,21 +42,14 @@
"@testing-library/user-event": "^14.0.0",
"@types/react": "*",
"@types/react-dom": "*",
- "cross-env": "^7.0.0",
- "cypress": "^10.0.0",
- "eslint-plugin-cypress": "^2.10.3",
- "start-server-and-test": "^1.10.11"
+ "cross-env": "^7.0.0"
},
"scripts": {
"start": "backstage-cli package start --config ./app-config.yaml",
"build": "backstage-cli package build --config ./app-config.yaml",
"clean": "backstage-cli package clean",
"test": "backstage-cli package test",
- "lint": "backstage-cli package lint",
- "test:e2e": "cross-env PORT=3001 start-server-and-test start http://localhost:3001 cy:dev",
- "test:e2e:ci": "cross-env PORT=3001 start-server-and-test start http://localhost:3001 cy:run",
- "cy:dev": "cypress open",
- "cy:run": "cypress run"
+ "lint": "backstage-cli package lint"
},
"prettier": "@spotify/prettier-config",
"browserslist": {
diff --git a/packages/techdocs-cli/CHANGELOG.md b/packages/techdocs-cli/CHANGELOG.md
index b0d620a056..f24e216273 100644
--- a/packages/techdocs-cli/CHANGELOG.md
+++ b/packages/techdocs-cli/CHANGELOG.md
@@ -1,5 +1,18 @@
# @techdocs/cli
+## 1.5.2-next.0
+
+### Patch Changes
+
+- de42eebaaf: Bumped dev dependencies `@types/node` and `mock-fs`.
+- 2b6e572051: Restructured tests.
+- Updated dependencies
+ - @backstage/cli-common@0.1.13-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/plugin-techdocs-node@1.8.2-next.0
+ - @backstage/config@1.1.0
+ - @backstage/catalog-model@1.4.2
+
## 1.5.0
### Minor Changes
diff --git a/packages/techdocs-cli/README.md b/packages/techdocs-cli/README.md
index 85c0075946..e7ae51053b 100644
--- a/packages/techdocs-cli/README.md
+++ b/packages/techdocs-cli/README.md
@@ -75,38 +75,3 @@ pip install mkdocs-techdocs-core
```
Then run `yarn test`.
-
-#### Cypress (Integration and Visual regression) tests
-
-Running cypress tests requires you to run the CLI locally against our example docs.
-
-Run the local version of techdocs-cli against the example docs:
-
-```sh
-# From the root of this repository run
-# NOTE: This will build the techdocs-cli-embedded-app and copy the output into the cli dist directory
-yarn build --scope @techdocs/cli
-
-# Navigate to the example project
-cd packages/techdocs-cli/src/example-docs
-
-# Now execute the techdocs-cli serve command
-../../bin/techdocs-cli serve
-```
-
-In another shell, run the cypress tests:
-
-```sh
-# From the root of the project, navigate to the techdocs-cli package
-cd packages/techdocs-cli
-
-# Run tests
-yarn test:cypress
-```
-
-This will launch a cypress app where you can run the two different tests:
-
-- `backstage_serve` - will run against the backstage server
-- `mkdocs_serve` - will run test against the mkdocs server
-
-> If its the first time you run Cypress, it will run a "Verifying Cypress can run" step. This step can result in a "Cypress verification timed out" error. If that is the case, let the verification step run and then run the command again and it should succeed.
diff --git a/packages/techdocs-cli/e2e-test.config.js b/packages/techdocs-cli/cli-e2e-test.config.js
similarity index 93%
rename from packages/techdocs-cli/e2e-test.config.js
rename to packages/techdocs-cli/cli-e2e-test.config.js
index 2fa92462ab..b2e6e53918 100644
--- a/packages/techdocs-cli/e2e-test.config.js
+++ b/packages/techdocs-cli/cli-e2e-test.config.js
@@ -18,5 +18,5 @@ const path = require('path');
module.exports = require('@backstage/cli/config/jest').then(baseConfig => ({
...baseConfig,
- rootDir: path.resolve(__dirname, 'e2e-tests'),
+ rootDir: path.resolve(__dirname, 'cli-e2e-tests'),
}));
diff --git a/packages/techdocs-cli/e2e-tests/techdocs-cli.test.ts b/packages/techdocs-cli/cli-e2e-tests/techdocs-cli.test.ts
similarity index 100%
rename from packages/techdocs-cli/e2e-tests/techdocs-cli.test.ts
rename to packages/techdocs-cli/cli-e2e-tests/techdocs-cli.test.ts
diff --git a/packages/techdocs-cli/cypress.config.js b/packages/techdocs-cli/cypress.config.js
deleted file mode 100644
index abaa324d76..0000000000
--- a/packages/techdocs-cli/cypress.config.js
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright 2022 The Backstage Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import { defineConfig } from 'cypress';
-import { initPlugin } from '@frsource/cypress-plugin-visual-regression-diff/plugins';
-
-module.exports = defineConfig({
- e2e: {
- setupNodeEvents(on, config) {
- initPlugin(on, config);
- },
-
- excludeSpecPattern: ['**/__snapshots__/*', '**/__image_snapshots__/*'],
- },
- viewportWidth: 1920,
- viewportHeight: 1080,
- includeShadowDom: true,
-});
diff --git a/packages/techdocs-cli/cypress/.eslintrc.json b/packages/techdocs-cli/cypress/.eslintrc.json
deleted file mode 100644
index 06965a82da..0000000000
--- a/packages/techdocs-cli/cypress/.eslintrc.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "plugins": ["cypress"],
- "extends": ["plugin:cypress/recommended"],
- "rules": {
- "jest/expect-expect": [
- "error",
- {
- "assertFunctionNames": ["expect", "cy.contains", "cy.document"]
- }
- ]
- }
-}
diff --git a/packages/techdocs-cli/cypress/e2e/__image_snapshots__/TechDocs Live Preview - Backstage Serve toMatchImageSnapshot - Backstage TechDocs Page #0.png b/packages/techdocs-cli/cypress/e2e/__image_snapshots__/TechDocs Live Preview - Backstage Serve toMatchImageSnapshot - Backstage TechDocs Page #0.png
deleted file mode 100644
index 99fc1ea483..0000000000
Binary files a/packages/techdocs-cli/cypress/e2e/__image_snapshots__/TechDocs Live Preview - Backstage Serve toMatchImageSnapshot - Backstage TechDocs Page #0.png and /dev/null differ
diff --git a/packages/techdocs-cli/cypress/e2e/__image_snapshots__/TechDocs Live Preview - MkDocs Serve toMatchImageSnapshot - MkDocs Page #0.png b/packages/techdocs-cli/cypress/e2e/__image_snapshots__/TechDocs Live Preview - MkDocs Serve toMatchImageSnapshot - MkDocs Page #0.png
deleted file mode 100644
index e6c63d5d57..0000000000
Binary files a/packages/techdocs-cli/cypress/e2e/__image_snapshots__/TechDocs Live Preview - MkDocs Serve toMatchImageSnapshot - MkDocs Page #0.png and /dev/null differ
diff --git a/packages/techdocs-cli/cypress/e2e/backstage_serve.cy.js b/packages/techdocs-cli/cypress/e2e/backstage_serve.cy.js
deleted file mode 100644
index 0267c8bfe6..0000000000
--- a/packages/techdocs-cli/cypress/e2e/backstage_serve.cy.js
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright 2022 The Backstage Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///
-describe('TechDocs Live Preview - Backstage Serve', () => {
- it('successfully serves documentation', () => {
- cy.visit(`${Cypress.env('backstageBaseUrl')}/docs/default/component/local`);
- cy.contains('hello mock docs');
- });
-
- it('successfully navigates to sub page of documentation', () => {
- cy.contains('SubDocs').click();
- cy.contains('Home 2').click();
- cy.contains(
- 'This is an md file in another docs folder using the MkDocs Monorepo Plugin',
- );
- });
-
- it('successfully renders all Backstage main elements', () => {
- cy.contains('header', 'Live preview environment');
- cy.get('[data-testid="sidebar-root"]')
- .children()
- .should('have.length.gt', 0);
- });
-
- it('successfully renders all extracted MkDocs main elements', () => {
- // as it gets replaced by Backstage header
- cy.get('.md-header').should('have.length', 0);
- cy.get('.md-main').should('have.length', 1);
- cy.contains(
- '.md-main',
- 'This is an md file in another docs folder using the MkDocs Monorepo Plugin',
- );
- cy.get('.md-sidebar.md-sidebar--primary').should('have.length', 1);
- cy.get('.md-sidebar.md-sidebar--primary').should('have.length', 1);
- cy.get('.md-footer').should('have.length', 1);
- });
-
- it('matchImage - Backstage TechDocs Page', () => {
- cy.visit(
- `${Cypress.env('backstageBaseUrl')}/docs/default/component/local`,
- ).then(() => {
- cy.document().matchImage();
- });
- });
-});
diff --git a/packages/techdocs-cli/cypress/e2e/mkdocs_serve.cy.js b/packages/techdocs-cli/cypress/e2e/mkdocs_serve.cy.js
deleted file mode 100644
index d5417e615f..0000000000
--- a/packages/techdocs-cli/cypress/e2e/mkdocs_serve.cy.js
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright 2022 The Backstage Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-///
-describe('TechDocs Live Preview - MkDocs Serve', () => {
- it('successfully serves documentation', () => {
- cy.visit(Cypress.env('mkdocsBaseUrl'));
- cy.contains('hello mock docs');
- });
-
- it('successfully navigates to sub page of documentation', () => {
- cy.contains('SubDocs').click();
- cy.contains('Home 2').click();
- cy.contains(
- 'This is an md file in another docs folder using the MkDocs Monorepo Plugin',
- );
- });
-
- it('successfully renders all main elements', () => {
- cy.get('.md-header').should('have.length', 1);
- cy.get('.md-main').should('have.length', 1);
- cy.contains(
- '.md-main',
- 'This is an md file in another docs folder using the MkDocs Monorepo Plugin',
- );
- cy.get('.md-sidebar.md-sidebar--primary').should('have.length', 1);
- cy.get('.md-sidebar.md-sidebar--primary').should('have.length', 1);
- cy.get('.md-footer').should('have.length', 1);
- });
-
- it('matchImage - MkDocs Page', () => {
- cy.visit(Cypress.env('mkdocsBaseUrl')).then(() => {
- cy.document().matchImage();
- });
- });
-});
diff --git a/packages/techdocs-cli/cypress/fixtures/example.json b/packages/techdocs-cli/cypress/fixtures/example.json
deleted file mode 100644
index 02e4254378..0000000000
--- a/packages/techdocs-cli/cypress/fixtures/example.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "name": "Using fixtures to represent data",
- "email": "hello@cypress.io",
- "body": "Fixtures are a great way to mock data for responses to routes"
-}
diff --git a/packages/techdocs-cli/cypress/screenshots/backstage_serve.js/TechDocs Live Preview - Backstage Serve toMatchImageSnapshot - Backstage Header #0.png b/packages/techdocs-cli/cypress/screenshots/backstage_serve.js/TechDocs Live Preview - Backstage Serve toMatchImageSnapshot - Backstage Header #0.png
deleted file mode 100644
index 867e8ddd81..0000000000
Binary files a/packages/techdocs-cli/cypress/screenshots/backstage_serve.js/TechDocs Live Preview - Backstage Serve toMatchImageSnapshot - Backstage Header #0.png and /dev/null differ
diff --git a/packages/techdocs-cli/cypress/screenshots/backstage_serve.js/TechDocs Live Preview - Backstage Serve toMatchImageSnapshot - Backstage TechDocs Page #0 (1).png b/packages/techdocs-cli/cypress/screenshots/backstage_serve.js/TechDocs Live Preview - Backstage Serve toMatchImageSnapshot - Backstage TechDocs Page #0 (1).png
deleted file mode 100644
index 3f1078345d..0000000000
Binary files a/packages/techdocs-cli/cypress/screenshots/backstage_serve.js/TechDocs Live Preview - Backstage Serve toMatchImageSnapshot - Backstage TechDocs Page #0 (1).png and /dev/null differ
diff --git a/packages/techdocs-cli/cypress/screenshots/backstage_serve.js/TechDocs Live Preview - Backstage Serve toMatchImageSnapshot - Backstage TechDocs Page #0 (2).png b/packages/techdocs-cli/cypress/screenshots/backstage_serve.js/TechDocs Live Preview - Backstage Serve toMatchImageSnapshot - Backstage TechDocs Page #0 (2).png
deleted file mode 100644
index c576be51c5..0000000000
Binary files a/packages/techdocs-cli/cypress/screenshots/backstage_serve.js/TechDocs Live Preview - Backstage Serve toMatchImageSnapshot - Backstage TechDocs Page #0 (2).png and /dev/null differ
diff --git a/packages/techdocs-cli/cypress/screenshots/backstage_serve.js/TechDocs Live Preview - Backstage Serve toMatchImageSnapshot - Backstage TechDocs Page #0.png b/packages/techdocs-cli/cypress/screenshots/backstage_serve.js/TechDocs Live Preview - Backstage Serve toMatchImageSnapshot - Backstage TechDocs Page #0.png
deleted file mode 100644
index 3f1078345d..0000000000
Binary files a/packages/techdocs-cli/cypress/screenshots/backstage_serve.js/TechDocs Live Preview - Backstage Serve toMatchImageSnapshot - Backstage TechDocs Page #0.png and /dev/null differ
diff --git a/packages/techdocs-cli/cypress/support/commands.js b/packages/techdocs-cli/cypress/support/commands.js
deleted file mode 100644
index a8d6a5fdb7..0000000000
--- a/packages/techdocs-cli/cypress/support/commands.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright 2022 The Backstage Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// This example commands.js shows you how to
-// create various custom commands and overwrite
-// existing commands.
-//
-// For more comprehensive examples of custom
-// commands please read more here:
-// https://on.cypress.io/custom-commands
-// ***********************************************
-//
-//
-// -- This is a parent command --
-// Cypress.Commands.add('login', (email, password) => { ... })
-//
-//
-// -- This is a child command --
-// Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... })
-//
-//
-// -- This is a dual command --
-// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... })
-//
-//
-// -- This will overwrite an existing command --
-// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... })
diff --git a/packages/techdocs-cli/cypress/support/e2e.js b/packages/techdocs-cli/cypress/support/e2e.js
deleted file mode 100644
index f06a08e9a5..0000000000
--- a/packages/techdocs-cli/cypress/support/e2e.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright 2022 The Backstage Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// This example support/index.js is processed and
-// loaded automatically before your test files.
-//
-// This is a great place to put global configuration and
-// behavior that modifies Cypress.
-//
-// You can change the location of this file or turn off
-// automatically serving support files with the
-// 'supportFile' configuration option.
-//
-// You can read more here:
-// https://on.cypress.io/configuration
-// ***********************************************************
-
-// Import commands.js using ES2015 syntax:
-import './commands';
-import '@frsource/cypress-plugin-visual-regression-diff/commands';
-
-// Alternatively you can use CommonJS syntax:
-// require('./commands')
diff --git a/packages/techdocs-cli/package.json b/packages/techdocs-cli/package.json
index 9a8c420ffd..6991e2a2c2 100644
--- a/packages/techdocs-cli/package.json
+++ b/packages/techdocs-cli/package.json
@@ -1,7 +1,7 @@
{
"name": "@techdocs/cli",
"description": "Utility CLI for managing TechDocs sites in Backstage.",
- "version": "1.5.0",
+ "version": "1.5.2-next.0",
"publishConfig": {
"access": "public"
},
@@ -27,9 +27,8 @@
"clean": "backstage-cli package clean",
"lint": "backstage-cli package lint",
"test": "backstage-cli package test",
- "test:e2e": "backstage-cli test --config e2e-test.config.js",
- "test:e2e:ci": "backstage-cli test --config e2e-test.config.js --watchAll=false --ci",
- "test:cypress": "cypress open",
+ "test:e2e": "backstage-cli test --config cli-e2e-test.config.js",
+ "test:e2e:ci": "backstage-cli test --config cli-e2e-test.config.js --watchAll=false --ci",
"prepack": "./scripts/prepack.sh"
},
"bin": {
@@ -37,14 +36,12 @@
},
"devDependencies": {
"@backstage/cli": "workspace:^",
- "@frsource/cypress-plugin-visual-regression-diff": "^3.2.8",
"@types/commander": "^2.12.2",
"@types/fs-extra": "^9.0.6",
"@types/http-proxy": "^1.17.4",
"@types/node": "^18.17.8",
"@types/serve-handler": "^6.1.0",
"@types/webpack-env": "^1.15.3",
- "cypress": "^10.0.0",
"find-process": "^1.4.5",
"nodemon": "^3.0.1",
"techdocs-cli-embedded-app": "link:../techdocs-cli-embedded-app",
diff --git a/packages/test-utils/CHANGELOG.md b/packages/test-utils/CHANGELOG.md
index b44f54e2ab..f65db68aff 100644
--- a/packages/test-utils/CHANGELOG.md
+++ b/packages/test-utils/CHANGELOG.md
@@ -1,5 +1,19 @@
# @backstage/test-utils
+## 1.4.4-next.0
+
+### Patch Changes
+
+- 322bbcae24: Removed the alpha `MockPluginProvider` export since the plugin configuration API has been removed.
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/config@1.1.0
+ - @backstage/core-app-api@1.10.1-next.0
+ - @backstage/plugin-permission-react@0.4.16-next.0
+ - @backstage/theme@0.4.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-permission-common@0.7.8
+
## 1.4.3
### Patch Changes
@@ -264,7 +278,7 @@
### Minor Changes
-- 7908d72e033: Introduce a new global config parameter, `auth.enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window.
+- 7908d72e033: Introduce a new global config parameter, `enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window.
### Patch Changes
@@ -322,7 +336,7 @@
### Minor Changes
-- 7908d72e033: Introduce a new global config parameter, `auth.enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window.
+- 7908d72e033: Introduce a new global config parameter, `enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window.
### Patch Changes
diff --git a/packages/test-utils/alpha-api-report.md b/packages/test-utils/alpha-api-report.md
index 4a9fd2e5a4..945c754f83 100644
--- a/packages/test-utils/alpha-api-report.md
+++ b/packages/test-utils/alpha-api-report.md
@@ -4,17 +4,10 @@
```ts
import { Observable } from '@backstage/types';
-import { PropsWithChildren } from 'react';
-import { default as React_2 } from 'react';
import { TranslationApi } from '@backstage/core-plugin-api/alpha';
import { TranslationRef } from '@backstage/core-plugin-api/alpha';
import { TranslationSnapshot } from '@backstage/core-plugin-api/alpha';
-// @alpha
-export const MockPluginProvider: ({
- children,
-}: PropsWithChildren<{}>) => React_2.JSX.Element;
-
// @alpha (undocumented)
export class MockTranslationApi implements TranslationApi {
// (undocumented)
diff --git a/packages/test-utils/package.json b/packages/test-utils/package.json
index 875f67ffbb..9c4c1642f6 100644
--- a/packages/test-utils/package.json
+++ b/packages/test-utils/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/test-utils",
"description": "Utilities to test Backstage plugins and apps.",
- "version": "1.4.3",
+ "version": "1.4.4-next.0",
"publishConfig": {
"access": "public"
},
diff --git a/packages/test-utils/src/alpha.ts b/packages/test-utils/src/alpha.ts
index c6801993bc..2077ad3586 100644
--- a/packages/test-utils/src/alpha.ts
+++ b/packages/test-utils/src/alpha.ts
@@ -14,5 +14,4 @@
* limitations under the License.
*/
-export * from './testUtils/MockPluginProvider';
export * from './testUtils/apis/TranslationApi';
diff --git a/packages/test-utils/src/testUtils/MockPluginProvider.tsx b/packages/test-utils/src/testUtils/MockPluginProvider.tsx
deleted file mode 100644
index 25442ae267..0000000000
--- a/packages/test-utils/src/testUtils/MockPluginProvider.tsx
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright 2020 The Backstage Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import React, { PropsWithChildren } from 'react';
-import { PluginProvider } from '@backstage/core-plugin-api/alpha';
-import { createPlugin } from '@backstage/core-plugin-api';
-
-/**
- * Mock for PluginProvider to use in unit tests
- * @alpha
- */
-export const MockPluginProvider = ({ children }: PropsWithChildren<{}>) => {
- type TestInputPluginOptions = {};
- type TestPluginOptions = {};
- const plugin = createPlugin({
- id: 'my-plugin',
- __experimentalConfigure(_: TestInputPluginOptions): TestPluginOptions {
- return {};
- },
- });
-
- return {children} ;
-};
diff --git a/playwright.config.ts b/playwright.config.ts
new file mode 100644
index 0000000000..ee8228e413
--- /dev/null
+++ b/playwright.config.ts
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2023 The Backstage Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { defineConfig } from '@playwright/test';
+import { generateProjects } from '@backstage/e2e-test-utils/playwright';
+
+/**
+ * See https://playwright.dev/docs/test-configuration.
+ */
+export default defineConfig({
+ timeout: 30_000,
+
+ expect: {
+ timeout: 5_000,
+ },
+
+ // Run your local dev server before starting the tests
+ webServer: process.env.CI
+ ? []
+ : [
+ {
+ command: 'yarn start',
+ port: 3000,
+ reuseExistingServer: true,
+ timeout: 60_000,
+ },
+ // TODO: Before encouraging e2e tests for backend we'll want to provide better utilities for mocking auth
+ // {
+ // command: 'yarn start-backend',
+ // port: 7007,
+ // reuseExistingServer: true,
+ // timeout: 60_000,
+ // },
+ ],
+
+ forbidOnly: !!process.env.CI,
+
+ retries: process.env.CI ? 2 : 0,
+
+ reporter: [['html', { open: 'never', outputFolder: 'e2e-test-report' }]],
+
+ use: {
+ actionTimeout: 0,
+ baseURL:
+ process.env.PLAYWRIGHT_URL ??
+ (process.env.CI ? 'http://localhost:7007' : 'http://localhost:3000'),
+ screenshot: 'only-on-failure',
+ trace: 'on-first-retry',
+ },
+
+ outputDir: 'node_modules/.cache/e2e-test-results',
+
+ projects: generateProjects(), // Find all packages with e2e-test folders
+});
diff --git a/plugins/adr-backend/CHANGELOG.md b/plugins/adr-backend/CHANGELOG.md
index 288acd07d6..16bf9fbc56 100644
--- a/plugins/adr-backend/CHANGELOG.md
+++ b/plugins/adr-backend/CHANGELOG.md
@@ -1,5 +1,20 @@
# @backstage/plugin-adr-backend
+## 0.4.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/plugin-adr-common@0.2.16-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/plugin-search-common@1.2.6
+
## 0.4.0
### Minor Changes
diff --git a/plugins/adr-backend/package.json b/plugins/adr-backend/package.json
index 8b81223a56..ebb9367362 100644
--- a/plugins/adr-backend/package.json
+++ b/plugins/adr-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-adr-backend",
- "version": "0.4.0",
+ "version": "0.4.2-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/adr-common/CHANGELOG.md b/plugins/adr-common/CHANGELOG.md
index 73d9660fe2..961562e016 100644
--- a/plugins/adr-common/CHANGELOG.md
+++ b/plugins/adr-common/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-adr-common
+## 0.2.16-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/plugin-search-common@1.2.6
+
## 0.2.15
### Patch Changes
diff --git a/plugins/adr-common/package.json b/plugins/adr-common/package.json
index 68cd5e6234..5e8e236b42 100644
--- a/plugins/adr-common/package.json
+++ b/plugins/adr-common/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-adr-common",
"description": "Common functionalities for the adr plugin",
- "version": "0.2.15",
+ "version": "0.2.16-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/adr/CHANGELOG.md b/plugins/adr/CHANGELOG.md
index e433fd174b..0694cedf65 100644
--- a/plugins/adr/CHANGELOG.md
+++ b/plugins/adr/CHANGELOG.md
@@ -1,5 +1,20 @@
# @backstage/plugin-adr
+## 0.6.8-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/integration-react@1.1.20-next.0
+ - @backstage/plugin-adr-common@0.2.16-next.0
+ - @backstage/plugin-search-react@1.7.1-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+ - @backstage/plugin-search-common@1.2.6
+
## 0.6.7
### Patch Changes
diff --git a/plugins/adr/api-report.md b/plugins/adr/api-report.md
index 6ed7b68196..9ce5834574 100644
--- a/plugins/adr/api-report.md
+++ b/plugins/adr/api-report.md
@@ -72,7 +72,6 @@ export const adrPlugin: BackstagePlugin<
{
root: RouteRef;
},
- {},
{}
>;
diff --git a/plugins/adr/package.json b/plugins/adr/package.json
index 5a8eabe337..dd1e736f8a 100644
--- a/plugins/adr/package.json
+++ b/plugins/adr/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-adr",
- "version": "0.6.7",
+ "version": "0.6.8-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/airbrake-backend/CHANGELOG.md b/plugins/airbrake-backend/CHANGELOG.md
index d4e68fdf50..ec047a0b83 100644
--- a/plugins/airbrake-backend/CHANGELOG.md
+++ b/plugins/airbrake-backend/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-airbrake-backend
+## 0.3.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+
## 0.3.0
### Minor Changes
diff --git a/plugins/airbrake-backend/package.json b/plugins/airbrake-backend/package.json
index dbe7054705..3b3b21fbcb 100644
--- a/plugins/airbrake-backend/package.json
+++ b/plugins/airbrake-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-airbrake-backend",
- "version": "0.3.0",
+ "version": "0.3.2-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/airbrake/CHANGELOG.md b/plugins/airbrake/CHANGELOG.md
index 9cface3b85..9e80ddf32d 100644
--- a/plugins/airbrake/CHANGELOG.md
+++ b/plugins/airbrake/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/plugin-airbrake
+## 0.3.25-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/test-utils@1.4.4-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/dev-utils@1.0.22-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+
## 0.3.24
### Patch Changes
diff --git a/plugins/airbrake/api-report.md b/plugins/airbrake/api-report.md
index a04d57d7e9..66f9b19bc8 100644
--- a/plugins/airbrake/api-report.md
+++ b/plugins/airbrake/api-report.md
@@ -13,7 +13,6 @@ export const airbrakePlugin: BackstagePlugin<
{
root: RouteRef;
},
- {},
{}
>;
diff --git a/plugins/airbrake/package.json b/plugins/airbrake/package.json
index f5a8f1debe..768c9c203e 100644
--- a/plugins/airbrake/package.json
+++ b/plugins/airbrake/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-airbrake",
- "version": "0.3.24",
+ "version": "0.3.25-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/allure/CHANGELOG.md b/plugins/allure/CHANGELOG.md
index 5b7971054a..04339609a4 100644
--- a/plugins/allure/CHANGELOG.md
+++ b/plugins/allure/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-allure
+## 0.1.41-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+
## 0.1.40
### Patch Changes
diff --git a/plugins/allure/api-report.md b/plugins/allure/api-report.md
index a192851f26..69bb740271 100644
--- a/plugins/allure/api-report.md
+++ b/plugins/allure/api-report.md
@@ -18,7 +18,6 @@ export const allurePlugin: BackstagePlugin<
{
root: RouteRef;
},
- {},
{}
>;
diff --git a/plugins/allure/package.json b/plugins/allure/package.json
index 104dbc4313..cf33ee8696 100644
--- a/plugins/allure/package.json
+++ b/plugins/allure/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-allure",
"description": "A Backstage plugin that integrates with Allure",
- "version": "0.1.40",
+ "version": "0.1.41-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/analytics-module-ga/CHANGELOG.md b/plugins/analytics-module-ga/CHANGELOG.md
index 6829162be7..c84c40b236 100644
--- a/plugins/analytics-module-ga/CHANGELOG.md
+++ b/plugins/analytics-module-ga/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-analytics-module-ga
+## 0.1.34-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/config@1.1.0
+ - @backstage/theme@0.4.2
+
## 0.1.33
### Patch Changes
diff --git a/plugins/analytics-module-ga/api-report.md b/plugins/analytics-module-ga/api-report.md
index f28c919f33..1846211e72 100644
--- a/plugins/analytics-module-ga/api-report.md
+++ b/plugins/analytics-module-ga/api-report.md
@@ -10,7 +10,7 @@ import { Config } from '@backstage/config';
import { IdentityApi } from '@backstage/core-plugin-api';
// @public @deprecated (undocumented)
-export const analyticsModuleGA: BackstagePlugin<{}, {}, {}>;
+export const analyticsModuleGA: BackstagePlugin<{}, {}>;
// @public
export class GoogleAnalytics implements AnalyticsApi {
diff --git a/plugins/analytics-module-ga/package.json b/plugins/analytics-module-ga/package.json
index 66a07699d2..006a36a490 100644
--- a/plugins/analytics-module-ga/package.json
+++ b/plugins/analytics-module-ga/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-analytics-module-ga",
- "version": "0.1.33",
+ "version": "0.1.34-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/analytics-module-ga4/CHANGELOG.md b/plugins/analytics-module-ga4/CHANGELOG.md
index 34dafc1f97..8f339c47e1 100644
--- a/plugins/analytics-module-ga4/CHANGELOG.md
+++ b/plugins/analytics-module-ga4/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-analytics-module-ga4
+## 0.1.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/config@1.1.0
+ - @backstage/theme@0.4.2
+
## 0.1.4
### Patch Changes
diff --git a/plugins/analytics-module-ga4/package.json b/plugins/analytics-module-ga4/package.json
index eb72c1ed30..fd3f6de64f 100644
--- a/plugins/analytics-module-ga4/package.json
+++ b/plugins/analytics-module-ga4/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-analytics-module-ga4",
- "version": "0.1.4",
+ "version": "0.1.5-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/analytics-module-newrelic-browser/CHANGELOG.md b/plugins/analytics-module-newrelic-browser/CHANGELOG.md
index 58c4c4c575..9b62fe7596 100644
--- a/plugins/analytics-module-newrelic-browser/CHANGELOG.md
+++ b/plugins/analytics-module-newrelic-browser/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-analytics-module-newrelic-browser
+## 0.0.3-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/config@1.1.0
+
## 0.0.2
### Patch Changes
diff --git a/plugins/analytics-module-newrelic-browser/package.json b/plugins/analytics-module-newrelic-browser/package.json
index 815dd3fbaf..0f2f01705a 100644
--- a/plugins/analytics-module-newrelic-browser/package.json
+++ b/plugins/analytics-module-newrelic-browser/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-analytics-module-newrelic-browser",
- "version": "0.0.2",
+ "version": "0.0.3-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/apache-airflow/CHANGELOG.md b/plugins/apache-airflow/CHANGELOG.md
index fd787df404..76f6ea95ed 100644
--- a/plugins/apache-airflow/CHANGELOG.md
+++ b/plugins/apache-airflow/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/plugin-apache-airflow
+## 0.2.16-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+
## 0.2.15
### Patch Changes
diff --git a/plugins/apache-airflow/api-report.md b/plugins/apache-airflow/api-report.md
index be2a208bd4..922ad4e868 100644
--- a/plugins/apache-airflow/api-report.md
+++ b/plugins/apache-airflow/api-report.md
@@ -22,7 +22,6 @@ export const apacheAirflowPlugin: BackstagePlugin<
{
root: RouteRef;
},
- {},
{}
>;
```
diff --git a/plugins/apache-airflow/package.json b/plugins/apache-airflow/package.json
index a076265402..ec4bf91916 100644
--- a/plugins/apache-airflow/package.json
+++ b/plugins/apache-airflow/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-apache-airflow",
- "version": "0.2.15",
+ "version": "0.2.16-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/api-docs/CHANGELOG.md b/plugins/api-docs/CHANGELOG.md
index 628cee37bb..60f00d29d5 100644
--- a/plugins/api-docs/CHANGELOG.md
+++ b/plugins/api-docs/CHANGELOG.md
@@ -1,5 +1,19 @@
# @backstage/plugin-api-docs
+## 0.9.12-next.0
+
+### Patch Changes
+
+- 0117a6b47e: Adding `requestInterceptor` option to `api-docs` and pass it to SwaggerUI. This will enable to configure a proxy or headers to be sent to all the request made through the `Try it out` button on SwaggerUI.
+- 18f1756908: added aria-label on api definition button for better a11y.
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/plugin-catalog@1.14.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+
## 0.9.11
### Patch Changes
diff --git a/plugins/api-docs/README.md b/plugins/api-docs/README.md
index 27e19b218d..792a7fb0b7 100644
--- a/plugins/api-docs/README.md
+++ b/plugins/api-docs/README.md
@@ -222,3 +222,42 @@ security:
## Links
- [The Backstage homepage](https://backstage.io)
+
+### Adding `requestInterceptor` to Swagger UI
+
+To configure a [`requestInterceptor` for Swagger UI](https://github.com/swagger-api/swagger-ui/tree/master/flavors/swagger-ui-react#requestinterceptor-proptypesfunc) you'll need to add the following to your `api.tsx`:
+
+```tsx
+...
+import { OpenApiDefinitionWidget, apiDocsConfigRef, defaultDefinitionWidgets } from '@backstage/plugin-api-docs';
+import { ApiEntity } from '@backstage/catalog-model';
+
+export const apis: AnyApiFactory[] = [
+...
+createApiFactory({
+ api: apiDocsConfigRef,
+ deps: {},
+ factory: () => {
+ // Overriding openapi definition widget to add header
+ const requestInterceptor = (req: any) => {
+ req.headers.append('myheader', 'wombats');
+ return req;
+ };
+ const definitionWidgets = defaultDefinitionWidgets().map(obj => {
+ if (obj.type === 'openapi') {
+ return {
+ ...obj,
+ component: (definition) => ,
+ }
+ }
+ return obj;
+ });
+
+ return {
+ getApiDefinitionWidget: (apiEntity: ApiEntity) => {
+ return definitionWidgets.find(d => d.type === apiEntity.spec.type);
+ },
+ };
+ },
+ })
+```
diff --git a/plugins/api-docs/api-report.md b/plugins/api-docs/api-report.md
index 59d490a1fe..a018dfcdb1 100644
--- a/plugins/api-docs/api-report.md
+++ b/plugins/api-docs/api-report.md
@@ -54,8 +54,7 @@ const apiDocsPlugin: BackstagePlugin<
},
{
registerApi: ExternalRouteRef;
- },
- {}
+ }
>;
export { apiDocsPlugin };
export { apiDocsPlugin as plugin };
@@ -166,6 +165,7 @@ export const OpenApiDefinitionWidget: (
// @public (undocumented)
export type OpenApiDefinitionWidgetProps = {
definition: string;
+ requestInterceptor?: (req: any) => any | Promise;
};
// @public (undocumented)
diff --git a/plugins/api-docs/package.json b/plugins/api-docs/package.json
index a045d903f5..b9d7a1b6f5 100644
--- a/plugins/api-docs/package.json
+++ b/plugins/api-docs/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-api-docs",
"description": "A Backstage plugin that helps represent API entities in the frontend",
- "version": "0.9.11",
+ "version": "0.9.12-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/api-docs/src/components/ApisCards/presets.tsx b/plugins/api-docs/src/components/ApisCards/presets.tsx
index b1ef39c113..050944b239 100644
--- a/plugins/api-docs/src/components/ApisCards/presets.tsx
+++ b/plugins/api-docs/src/components/ApisCards/presets.tsx
@@ -33,10 +33,12 @@ export function createSpecApiTypeColumn(): TableColumn {
const ApiDefinitionButton = ({ apiEntity }: { apiEntity: ApiEntity }) => {
const [dialogOpen, setDialogOpen] = useState(false);
-
return (
<>
- setDialogOpen(!dialogOpen)}>
+ setDialogOpen(!dialogOpen)}
+ >
req;
+
const { getByText } = await renderInTestApp(
- ,
+ ,
);
// swagger-ui loads the documentation asynchronously
diff --git a/plugins/api-docs/src/components/OpenApiDefinitionWidget/OpenApiDefinition.tsx b/plugins/api-docs/src/components/OpenApiDefinitionWidget/OpenApiDefinition.tsx
index 5d5988399a..a2ebbbc7e3 100644
--- a/plugins/api-docs/src/components/OpenApiDefinitionWidget/OpenApiDefinition.tsx
+++ b/plugins/api-docs/src/components/OpenApiDefinitionWidget/OpenApiDefinition.tsx
@@ -136,9 +136,13 @@ const useStyles = makeStyles(theme => ({
export type OpenApiDefinitionProps = {
definition: string;
+ requestInterceptor?: (req: any) => any | Promise;
};
-export const OpenApiDefinition = ({ definition }: OpenApiDefinitionProps) => {
+export const OpenApiDefinition = ({
+ definition,
+ requestInterceptor,
+}: OpenApiDefinitionProps) => {
const classes = useStyles();
// Due to a bug in the swagger-ui-react component, the component needs
@@ -152,7 +156,12 @@ export const OpenApiDefinition = ({ definition }: OpenApiDefinitionProps) => {
return (
-
+
);
};
diff --git a/plugins/api-docs/src/components/OpenApiDefinitionWidget/OpenApiDefinitionWidget.tsx b/plugins/api-docs/src/components/OpenApiDefinitionWidget/OpenApiDefinitionWidget.tsx
index 424a52136b..152f1fd089 100644
--- a/plugins/api-docs/src/components/OpenApiDefinitionWidget/OpenApiDefinitionWidget.tsx
+++ b/plugins/api-docs/src/components/OpenApiDefinitionWidget/OpenApiDefinitionWidget.tsx
@@ -28,6 +28,7 @@ const LazyOpenApiDefinition = React.lazy(() =>
/** @public */
export type OpenApiDefinitionWidgetProps = {
definition: string;
+ requestInterceptor?: (req: any) => any | Promise;
};
/** @public */
diff --git a/plugins/apollo-explorer/CHANGELOG.md b/plugins/apollo-explorer/CHANGELOG.md
index 9af673faae..3b5dd74b31 100644
--- a/plugins/apollo-explorer/CHANGELOG.md
+++ b/plugins/apollo-explorer/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-apollo-explorer
+## 0.1.16-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/theme@0.4.2
+
## 0.1.15
### Patch Changes
diff --git a/plugins/apollo-explorer/api-report.md b/plugins/apollo-explorer/api-report.md
index 2dd6c14a90..7d06876e89 100644
--- a/plugins/apollo-explorer/api-report.md
+++ b/plugins/apollo-explorer/api-report.md
@@ -38,7 +38,6 @@ export const apolloExplorerPlugin: BackstagePlugin<
{
root: RouteRef;
},
- {},
{}
>;
```
diff --git a/plugins/apollo-explorer/package.json b/plugins/apollo-explorer/package.json
index d474094ed1..cebc6f8637 100644
--- a/plugins/apollo-explorer/package.json
+++ b/plugins/apollo-explorer/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-apollo-explorer",
- "version": "0.1.15",
+ "version": "0.1.16-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/app-backend/CHANGELOG.md b/plugins/app-backend/CHANGELOG.md
index 86eb85a42b..d3ea6acc47 100644
--- a/plugins/app-backend/CHANGELOG.md
+++ b/plugins/app-backend/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-app-backend
+## 0.3.53-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/config-loader@1.5.1-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-app-node@0.1.5-next.0
+
## 0.3.51
### Patch Changes
diff --git a/plugins/app-backend/package.json b/plugins/app-backend/package.json
index 561dbff245..cdbb36d23c 100644
--- a/plugins/app-backend/package.json
+++ b/plugins/app-backend/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-app-backend",
"description": "A Backstage backend plugin that serves the Backstage frontend app",
- "version": "0.3.51",
+ "version": "0.3.53-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/app-node/CHANGELOG.md b/plugins/app-node/CHANGELOG.md
index 871c31f902..48bdd793af 100644
--- a/plugins/app-node/CHANGELOG.md
+++ b/plugins/app-node/CHANGELOG.md
@@ -1,5 +1,12 @@
# @backstage/plugin-app-node
+## 0.1.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.6.5-next.0
+
## 0.1.3
### Patch Changes
diff --git a/plugins/app-node/package.json b/plugins/app-node/package.json
index 05d49416dc..9a722915c0 100644
--- a/plugins/app-node/package.json
+++ b/plugins/app-node/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-app-node",
"description": "Node.js library for the app plugin",
- "version": "0.1.3",
+ "version": "0.1.5-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/auth-backend-module-gcp-iap-provider/CHANGELOG.md b/plugins/auth-backend-module-gcp-iap-provider/CHANGELOG.md
index bfdf090263..bc44a30fd2 100644
--- a/plugins/auth-backend-module-gcp-iap-provider/CHANGELOG.md
+++ b/plugins/auth-backend-module-gcp-iap-provider/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-auth-backend-module-gcp-iap-provider
+## 0.1.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+
## 0.1.0
### Minor Changes
diff --git a/plugins/auth-backend-module-gcp-iap-provider/package.json b/plugins/auth-backend-module-gcp-iap-provider/package.json
index 6764224b28..a115450273 100644
--- a/plugins/auth-backend-module-gcp-iap-provider/package.json
+++ b/plugins/auth-backend-module-gcp-iap-provider/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-auth-backend-module-gcp-iap-provider",
"description": "A GCP IAP auth provider module for the Backstage auth backend",
- "version": "0.1.0",
+ "version": "0.1.2-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/auth-backend-module-github-provider/CHANGELOG.md b/plugins/auth-backend-module-github-provider/CHANGELOG.md
index b7c928b62e..3055ce643c 100644
--- a/plugins/auth-backend-module-github-provider/CHANGELOG.md
+++ b/plugins/auth-backend-module-github-provider/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-auth-backend-module-github-provider
+## 0.1.2-next.0
+
+### Patch Changes
+
+- 5d32a58b5a: Fixed a bug where the GitHub authenticator did not properly persist granted OAuth scopes.
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+
## 0.1.0
### Minor Changes
diff --git a/plugins/auth-backend-module-github-provider/package.json b/plugins/auth-backend-module-github-provider/package.json
index 0b86025503..b06ee136fa 100644
--- a/plugins/auth-backend-module-github-provider/package.json
+++ b/plugins/auth-backend-module-github-provider/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-auth-backend-module-github-provider",
"description": "The github-provider backend module for the auth plugin.",
- "version": "0.1.0",
+ "version": "0.1.2-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/auth-backend-module-github-provider/src/authenticator.ts b/plugins/auth-backend-module-github-provider/src/authenticator.ts
index f59ac3d727..4a9710d114 100644
--- a/plugins/auth-backend-module-github-provider/src/authenticator.ts
+++ b/plugins/auth-backend-module-github-provider/src/authenticator.ts
@@ -28,6 +28,7 @@ const ACCESS_TOKEN_PREFIX = 'access-token.';
export const githubAuthenticator = createOAuthAuthenticator({
defaultProfileTransform:
PassportOAuthAuthenticatorHelper.defaultProfileTransform,
+ shouldPersistScopes: true,
initialize({ callbackUrl, config }) {
const clientId = config.getString('clientId');
const clientSecret = config.getString('clientSecret');
diff --git a/plugins/auth-backend-module-gitlab-provider/CHANGELOG.md b/plugins/auth-backend-module-gitlab-provider/CHANGELOG.md
index 3867635a91..4a29c21c58 100644
--- a/plugins/auth-backend-module-gitlab-provider/CHANGELOG.md
+++ b/plugins/auth-backend-module-gitlab-provider/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-auth-backend-module-gitlab-provider
+## 0.1.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+
## 0.1.0
### Minor Changes
diff --git a/plugins/auth-backend-module-gitlab-provider/package.json b/plugins/auth-backend-module-gitlab-provider/package.json
index 49ebb0dca0..e626a02d3a 100644
--- a/plugins/auth-backend-module-gitlab-provider/package.json
+++ b/plugins/auth-backend-module-gitlab-provider/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-auth-backend-module-gitlab-provider",
"description": "The gitlab-provider backend module for the auth plugin.",
- "version": "0.1.0",
+ "version": "0.1.2-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/auth-backend-module-google-provider/CHANGELOG.md b/plugins/auth-backend-module-google-provider/CHANGELOG.md
index b0de32217e..bdb1d576a5 100644
--- a/plugins/auth-backend-module-google-provider/CHANGELOG.md
+++ b/plugins/auth-backend-module-google-provider/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/plugin-auth-backend-module-google-provider
+## 0.1.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+
## 0.1.0
### Minor Changes
diff --git a/plugins/auth-backend-module-google-provider/package.json b/plugins/auth-backend-module-google-provider/package.json
index ac69fa91ae..e5dc87ca71 100644
--- a/plugins/auth-backend-module-google-provider/package.json
+++ b/plugins/auth-backend-module-google-provider/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-auth-backend-module-google-provider",
"description": "A Google auth provider module for the Backstage auth backend",
- "version": "0.1.0",
+ "version": "0.1.2-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/auth-backend-module-oauth2-provider/CHANGELOG.md b/plugins/auth-backend-module-oauth2-provider/CHANGELOG.md
index 20753caa5e..f15ef3bad8 100644
--- a/plugins/auth-backend-module-oauth2-provider/CHANGELOG.md
+++ b/plugins/auth-backend-module-oauth2-provider/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-auth-backend-module-oauth2-provider
+## 0.1.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+
## 0.1.0
### Minor Changes
diff --git a/plugins/auth-backend-module-oauth2-provider/package.json b/plugins/auth-backend-module-oauth2-provider/package.json
index 34632c4073..e18e50f44d 100644
--- a/plugins/auth-backend-module-oauth2-provider/package.json
+++ b/plugins/auth-backend-module-oauth2-provider/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-auth-backend-module-oauth2-provider",
"description": "The oauth2-provider backend module for the auth plugin.",
- "version": "0.1.0",
+ "version": "0.1.2-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/auth-backend/CHANGELOG.md b/plugins/auth-backend/CHANGELOG.md
index a82d928581..2460e7626c 100644
--- a/plugins/auth-backend/CHANGELOG.md
+++ b/plugins/auth-backend/CHANGELOG.md
@@ -1,5 +1,25 @@
# @backstage/plugin-auth-backend
+## 0.19.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-backend-module-github-provider@0.1.2-next.0
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-auth-backend-module-gcp-iap-provider@0.1.2-next.0
+ - @backstage/plugin-auth-backend-module-gitlab-provider@0.1.2-next.0
+ - @backstage/plugin-auth-backend-module-google-provider@0.1.2-next.0
+ - @backstage/plugin-auth-backend-module-oauth2-provider@0.1.2-next.0
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+
## 0.19.0
### Minor Changes
@@ -342,7 +362,7 @@
### Patch Changes
- d8f774c30df: Enforce the secret visibility of certificates and client secrets in the auth backend. Also, document all known options for each auth plugin.
-- 7908d72e033: Introduce a new global config parameter, `auth.enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window.
+- 7908d72e033: Introduce a new global config parameter, `enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window.
- 475abd1dc3f: The `microsoft` (i.e. Azure) auth provider now supports negotiating tokens for
Azure resources besides Microsoft Graph (e.g. AKS, Virtual Machines, Machine
Learning Services, etc.). When the `/frame/handler` endpoint is called with an
@@ -428,7 +448,7 @@
### Patch Changes
- d8f774c30df: Enforce the secret visibility of certificates and client secrets in the auth backend. Also, document all known options for each auth plugin.
-- 7908d72e033: Introduce a new global config parameter, `auth.enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window.
+- 7908d72e033: Introduce a new global config parameter, `enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window.
- Updated dependencies
- @backstage/backend-common@0.18.4-next.0
- @backstage/config@1.0.7
diff --git a/plugins/auth-backend/package.json b/plugins/auth-backend/package.json
index 98c5e0bd8a..e10568aaec 100644
--- a/plugins/auth-backend/package.json
+++ b/plugins/auth-backend/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-auth-backend",
"description": "A Backstage backend plugin that handles authentication",
- "version": "0.19.0",
+ "version": "0.19.2-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/auth-node/CHANGELOG.md b/plugins/auth-node/CHANGELOG.md
index ba010a155a..c3bdb44cb1 100644
--- a/plugins/auth-node/CHANGELOG.md
+++ b/plugins/auth-node/CHANGELOG.md
@@ -1,5 +1,19 @@
# @backstage/plugin-auth-node
+## 0.3.2-next.0
+
+### Patch Changes
+
+- 6c2b0793bf: Fix for persisted scopes not being properly restored on sign-in.
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+
## 0.3.0
### Minor Changes
diff --git a/plugins/auth-node/package.json b/plugins/auth-node/package.json
index 11859a899d..64b2ab4558 100644
--- a/plugins/auth-node/package.json
+++ b/plugins/auth-node/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-node",
- "version": "0.3.0",
+ "version": "0.3.2-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/auth-node/src/oauth/createOAuthRouteHandlers.test.ts b/plugins/auth-node/src/oauth/createOAuthRouteHandlers.test.ts
index 2573d95ea1..7da5519655 100644
--- a/plugins/auth-node/src/oauth/createOAuthRouteHandlers.test.ts
+++ b/plugins/auth-node/src/oauth/createOAuthRouteHandlers.test.ts
@@ -297,7 +297,7 @@ describe('createOAuthRouteHandlers', () => {
state: encodeOAuthState({
env: 'development',
nonce: '123',
- scope: 'my-scope',
+ scope: 'my-scope my-other-scope',
} as OAuthState),
});
@@ -310,7 +310,7 @@ describe('createOAuthRouteHandlers', () => {
accessToken: 'access-token',
expiresInSeconds: 3,
idToken: 'id-token',
- scope: 'my-scope',
+ scope: 'my-scope my-other-scope',
},
backstageIdentity: {
identity: {
@@ -324,7 +324,9 @@ describe('createOAuthRouteHandlers', () => {
});
expect(getRefreshTokenCookie(agent).value).toBe('refresh-token');
- expect(getGrantedScopesCookie(agent).value).toBe('my-scope');
+ expect(getGrantedScopesCookie(agent).value).toBe(
+ 'my-scope%20my-other-scope',
+ );
});
it('should redirect with persisted scope', async () => {
@@ -357,7 +359,7 @@ describe('createOAuthRouteHandlers', () => {
state: encodeOAuthState({
env: 'development',
nonce: '123',
- scope: 'my-scope',
+ scope: 'my-scope my-other-scope',
flow: 'redirect',
redirectUrl: 'https://127.0.0.1:3000/redirect',
} as OAuthState),
@@ -367,7 +369,9 @@ describe('createOAuthRouteHandlers', () => {
expect(res.get('Location')).toBe('https://127.0.0.1:3000/redirect');
expect(getRefreshTokenCookie(agent).value).toBe('refresh-token');
- expect(getGrantedScopesCookie(agent).value).toBe('my-scope');
+ expect(getGrantedScopesCookie(agent).value).toBe(
+ 'my-scope%20my-other-scope',
+ );
});
it('should require a valid origin', async () => {
diff --git a/plugins/auth-node/src/oauth/createOAuthRouteHandlers.ts b/plugins/auth-node/src/oauth/createOAuthRouteHandlers.ts
index 011b3fc0f0..165d7ce6b3 100644
--- a/plugins/auth-node/src/oauth/createOAuthRouteHandlers.ts
+++ b/plugins/auth-node/src/oauth/createOAuthRouteHandlers.ts
@@ -136,7 +136,7 @@ export function createOAuthRouteHandlers(
// If scopes are persisted then we pass them through the state so that we
// can set the cookie on successful auth
- if (authenticator.shouldPersistScopes) {
+ if (authenticator.shouldPersistScopes && scope) {
state.scope = scope;
}
@@ -214,7 +214,7 @@ export function createOAuthRouteHandlers(
// the provider does not return granted scopes on refresh or if they are normalized.
if (authenticator.shouldPersistScopes && state.scope) {
cookieManager.setGrantedScopes(res, state.scope, appOrigin);
- result.session.scope = state.scope;
+ response.providerInfo.scope = state.scope;
}
if (result.session.refreshToken) {
diff --git a/plugins/azure-devops-backend/CHANGELOG.md b/plugins/azure-devops-backend/CHANGELOG.md
index 34fd461a3b..629bcba049 100644
--- a/plugins/azure-devops-backend/CHANGELOG.md
+++ b/plugins/azure-devops-backend/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-azure-devops-backend
+## 0.4.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/plugin-azure-devops-common@0.3.1
+
## 0.4.0
### Minor Changes
diff --git a/plugins/azure-devops-backend/package.json b/plugins/azure-devops-backend/package.json
index a377425b51..bc8d07b040 100644
--- a/plugins/azure-devops-backend/package.json
+++ b/plugins/azure-devops-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-azure-devops-backend",
- "version": "0.4.0",
+ "version": "0.4.2-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/azure-devops/CHANGELOG.md b/plugins/azure-devops/CHANGELOG.md
index 2712586d93..cc4f6f1e26 100644
--- a/plugins/azure-devops/CHANGELOG.md
+++ b/plugins/azure-devops/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/plugin-azure-devops
+## 0.3.7-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+ - @backstage/plugin-azure-devops-common@0.3.1
+
## 0.3.6
### Patch Changes
diff --git a/plugins/azure-devops/api-report.md b/plugins/azure-devops/api-report.md
index 2c916ec33b..6b33762639 100644
--- a/plugins/azure-devops/api-report.md
+++ b/plugins/azure-devops/api-report.md
@@ -162,7 +162,7 @@ export class AzureDevOpsClient implements AzureDevOpsApi {
}
// @public (undocumented)
-export const azureDevOpsPlugin: BackstagePlugin<{}, {}, {}>;
+export const azureDevOpsPlugin: BackstagePlugin<{}, {}>;
// @public (undocumented)
export const AzurePullRequestsIcon: (
diff --git a/plugins/azure-devops/package.json b/plugins/azure-devops/package.json
index 740ab7d1d7..f338307ba0 100644
--- a/plugins/azure-devops/package.json
+++ b/plugins/azure-devops/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-azure-devops",
- "version": "0.3.6",
+ "version": "0.3.7-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/azure-sites-backend/CHANGELOG.md b/plugins/azure-sites-backend/CHANGELOG.md
index 66c4b92c4a..06c9538119 100644
--- a/plugins/azure-sites-backend/CHANGELOG.md
+++ b/plugins/azure-sites-backend/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-azure-sites-backend
+## 0.1.15-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/plugin-azure-sites-common@0.1.1
+
## 0.1.13
### Patch Changes
diff --git a/plugins/azure-sites-backend/package.json b/plugins/azure-sites-backend/package.json
index f6e08af1f2..0aa06b3e4e 100644
--- a/plugins/azure-sites-backend/package.json
+++ b/plugins/azure-sites-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-azure-sites-backend",
- "version": "0.1.13",
+ "version": "0.1.15-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/azure-sites/CHANGELOG.md b/plugins/azure-sites/CHANGELOG.md
index 1d9fac99a5..ef4d64fbba 100644
--- a/plugins/azure-sites/CHANGELOG.md
+++ b/plugins/azure-sites/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-azure-sites
+## 0.1.14-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+ - @backstage/plugin-azure-sites-common@0.1.1
+
## 0.1.13
### Patch Changes
diff --git a/plugins/azure-sites/api-report.md b/plugins/azure-sites/api-report.md
index bec89e17bc..abc10ec723 100644
--- a/plugins/azure-sites/api-report.md
+++ b/plugins/azure-sites/api-report.md
@@ -49,7 +49,6 @@ export const azureSitesPlugin: BackstagePlugin<
{
entityContent: RouteRef;
},
- {},
{}
>;
diff --git a/plugins/azure-sites/package.json b/plugins/azure-sites/package.json
index a6147e6c02..900fb54b08 100644
--- a/plugins/azure-sites/package.json
+++ b/plugins/azure-sites/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-azure-sites",
- "version": "0.1.13",
+ "version": "0.1.14-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/badges-backend/CHANGELOG.md b/plugins/badges-backend/CHANGELOG.md
index e778ba0eef..34c2760f7b 100644
--- a/plugins/badges-backend/CHANGELOG.md
+++ b/plugins/badges-backend/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/plugin-badges-backend
+## 0.3.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+
## 0.3.0
### Minor Changes
diff --git a/plugins/badges-backend/package.json b/plugins/badges-backend/package.json
index 7b6f2a65b3..c4ffb180c1 100644
--- a/plugins/badges-backend/package.json
+++ b/plugins/badges-backend/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-badges-backend",
"description": "A Backstage backend plugin that generates README badges for your entities",
- "version": "0.3.0",
+ "version": "0.3.2-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/badges-backend/src/plugin.ts b/plugins/badges-backend/src/plugin.ts
index 3e462e88e9..e5a51d763f 100644
--- a/plugins/badges-backend/src/plugin.ts
+++ b/plugins/badges-backend/src/plugin.ts
@@ -20,6 +20,7 @@ import {
createBackendPlugin,
} from '@backstage/backend-plugin-api';
import { createRouter } from './service/router';
+import { createDefaultBadgeFactories } from './badges';
/**
* Badges backend plugin
@@ -50,6 +51,7 @@ export const badgesPlugin = createBackendPlugin({
await createRouter({
config,
logger: loggerToWinstonLogger(logger),
+ badgeFactories: createDefaultBadgeFactories(),
discovery,
tokenManager,
identity,
diff --git a/plugins/badges-backend/src/service/router.ts b/plugins/badges-backend/src/service/router.ts
index 308865b73a..47bb8fcbe8 100644
--- a/plugins/badges-backend/src/service/router.ts
+++ b/plugins/badges-backend/src/service/router.ts
@@ -32,6 +32,7 @@ import { Logger } from 'winston';
import { IdentityApi } from '@backstage/plugin-auth-node';
import { getBearerTokenFromAuthorizationHeader } from '@backstage/plugin-auth-node';
import { BadgesStore, DatabaseBadgesStore } from '../database/badgesStore';
+import { createDefaultBadgeFactories } from '../badges';
/** @public */
export interface RouterOptions {
@@ -54,7 +55,9 @@ export async function createRouter(
options.catalog || new CatalogClient({ discoveryApi: options.discovery });
const badgeBuilder =
options.badgeBuilder ||
- new DefaultBadgeBuilder(options.badgeFactories || {});
+ new DefaultBadgeBuilder(
+ options.badgeFactories || createDefaultBadgeFactories(),
+ );
const router = Router();
const { config, logger, tokenManager, discovery, identity } = options;
diff --git a/plugins/badges/CHANGELOG.md b/plugins/badges/CHANGELOG.md
index f5bc8cc130..6b880b99eb 100644
--- a/plugins/badges/CHANGELOG.md
+++ b/plugins/badges/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-badges
+## 0.2.49-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+
## 0.2.48
### Patch Changes
diff --git a/plugins/badges/api-report.md b/plugins/badges/api-report.md
index e73a887316..c32b901058 100644
--- a/plugins/badges/api-report.md
+++ b/plugins/badges/api-report.md
@@ -9,7 +9,7 @@ import { BackstagePlugin } from '@backstage/core-plugin-api';
import { JSX as JSX_2 } from 'react';
// @public (undocumented)
-export const badgesPlugin: BackstagePlugin<{}, {}, {}>;
+export const badgesPlugin: BackstagePlugin<{}, {}>;
// @public (undocumented)
export const EntityBadgesDialog: (props: {
diff --git a/plugins/badges/package.json b/plugins/badges/package.json
index 8dc33ee346..d4d591aa83 100644
--- a/plugins/badges/package.json
+++ b/plugins/badges/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-badges",
"description": "A Backstage plugin that generates README badges for your entities",
- "version": "0.2.48",
+ "version": "0.2.49-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/bazaar-backend/CHANGELOG.md b/plugins/bazaar-backend/CHANGELOG.md
index e9fdaf4005..0606865996 100644
--- a/plugins/bazaar-backend/CHANGELOG.md
+++ b/plugins/bazaar-backend/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-bazaar-backend
+## 0.3.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/errors@1.2.2
+
## 0.3.0
### Minor Changes
diff --git a/plugins/bazaar-backend/package.json b/plugins/bazaar-backend/package.json
index 2a2b453c6e..1cab7c95d3 100644
--- a/plugins/bazaar-backend/package.json
+++ b/plugins/bazaar-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-bazaar-backend",
- "version": "0.3.0",
+ "version": "0.3.2-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/bazaar/CHANGELOG.md b/plugins/bazaar/CHANGELOG.md
index 77f24dd5da..55fdd98b98 100644
--- a/plugins/bazaar/CHANGELOG.md
+++ b/plugins/bazaar/CHANGELOG.md
@@ -1,5 +1,20 @@
# @backstage/plugin-bazaar
+## 0.2.17-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/cli@0.23.0-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/plugin-catalog@1.14.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+
## 0.2.16
### Patch Changes
diff --git a/plugins/bazaar/api-report.md b/plugins/bazaar/api-report.md
index 282983b378..ba0396f81e 100644
--- a/plugins/bazaar/api-report.md
+++ b/plugins/bazaar/api-report.md
@@ -41,7 +41,6 @@ export const bazaarPlugin: BackstagePlugin<
{
root: RouteRef;
},
- {},
{}
>;
diff --git a/plugins/bazaar/package.json b/plugins/bazaar/package.json
index 05ae2c442a..06613d6aae 100644
--- a/plugins/bazaar/package.json
+++ b/plugins/bazaar/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-bazaar",
- "version": "0.2.16",
+ "version": "0.2.17-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/bitbucket-cloud-common/CHANGELOG.md b/plugins/bitbucket-cloud-common/CHANGELOG.md
index d3fb8b0eb2..439fda1b41 100644
--- a/plugins/bitbucket-cloud-common/CHANGELOG.md
+++ b/plugins/bitbucket-cloud-common/CHANGELOG.md
@@ -1,5 +1,12 @@
# @backstage/plugin-bitbucket-cloud-common
+## 0.2.13-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+
## 0.2.12
### Patch Changes
diff --git a/plugins/bitbucket-cloud-common/package.json b/plugins/bitbucket-cloud-common/package.json
index a0d0df7a91..5a109f3fb5 100644
--- a/plugins/bitbucket-cloud-common/package.json
+++ b/plugins/bitbucket-cloud-common/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-bitbucket-cloud-common",
"description": "Common functionalities for bitbucket-cloud plugins",
- "version": "0.2.12",
+ "version": "0.2.13-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/bitrise/CHANGELOG.md b/plugins/bitrise/CHANGELOG.md
index 8564978855..afc67834b3 100644
--- a/plugins/bitrise/CHANGELOG.md
+++ b/plugins/bitrise/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-bitrise
+## 0.1.52-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+
## 0.1.51
### Patch Changes
diff --git a/plugins/bitrise/api-report.md b/plugins/bitrise/api-report.md
index 7f2e44f04f..cb68d79c51 100644
--- a/plugins/bitrise/api-report.md
+++ b/plugins/bitrise/api-report.md
@@ -13,7 +13,7 @@ import { JSX as JSX_2 } from 'react';
export const BITRISE_APP_ANNOTATION = 'bitrise.io/app';
// @public (undocumented)
-export const bitrisePlugin: BackstagePlugin<{}, {}, {}>;
+export const bitrisePlugin: BackstagePlugin<{}, {}>;
// @public (undocumented)
export const EntityBitriseContent: () => JSX_2.Element;
diff --git a/plugins/bitrise/package.json b/plugins/bitrise/package.json
index 413257109b..c94be4551d 100644
--- a/plugins/bitrise/package.json
+++ b/plugins/bitrise/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-bitrise",
"description": "A Backstage plugin that integrates towards Bitrise",
- "version": "0.1.51",
+ "version": "0.1.52-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/catalog-backend-module-aws/CHANGELOG.md b/plugins/catalog-backend-module-aws/CHANGELOG.md
index 70684170dd..70f1e02899 100644
--- a/plugins/catalog-backend-module-aws/CHANGELOG.md
+++ b/plugins/catalog-backend-module-aws/CHANGELOG.md
@@ -1,5 +1,24 @@
# @backstage/plugin-catalog-backend-module-aws
+## 0.2.8-next.0
+
+### Patch Changes
+
+- 890e3b5ad4: Make sure to include the error message when ingestion fails
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/integration-aws-node@0.1.6
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.16
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+ - @backstage/plugin-kubernetes-common@0.6.6
+
## 0.2.6
### Patch Changes
diff --git a/plugins/catalog-backend-module-aws/package.json b/plugins/catalog-backend-module-aws/package.json
index 3d0321e00c..c05a7c0de7 100644
--- a/plugins/catalog-backend-module-aws/package.json
+++ b/plugins/catalog-backend-module-aws/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-catalog-backend-module-aws",
"description": "A Backstage catalog backend module that helps integrate towards AWS",
- "version": "0.2.6",
+ "version": "0.2.8-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/catalog-backend-module-azure/CHANGELOG.md b/plugins/catalog-backend-module-azure/CHANGELOG.md
index 75872ba873..9864f7ca09 100644
--- a/plugins/catalog-backend-module-azure/CHANGELOG.md
+++ b/plugins/catalog-backend-module-azure/CHANGELOG.md
@@ -1,5 +1,22 @@
# @backstage/plugin-catalog-backend-module-azure
+## 0.1.24-next.0
+
+### Patch Changes
+
+- 890e3b5ad4: Make sure to include the error message when ingestion fails
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.16
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+
## 0.1.22
### Patch Changes
diff --git a/plugins/catalog-backend-module-azure/package.json b/plugins/catalog-backend-module-azure/package.json
index 92d27e63ed..ea3ae522ee 100644
--- a/plugins/catalog-backend-module-azure/package.json
+++ b/plugins/catalog-backend-module-azure/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-catalog-backend-module-azure",
"description": "A Backstage catalog backend module that helps integrate towards Azure",
- "version": "0.1.22",
+ "version": "0.1.24-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md
index a20cbb30a0..96890c9c33 100644
--- a/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md
+++ b/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md
@@ -1,5 +1,23 @@
# @backstage/plugin-catalog-backend-module-bitbucket-cloud
+## 0.1.20-next.0
+
+### Patch Changes
+
+- 890e3b5ad4: Make sure to include the error message when ingestion fails
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/plugin-bitbucket-cloud-common@0.2.13-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/plugin-catalog-common@1.0.16
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+ - @backstage/plugin-events-node@0.2.14-next.0
+
## 0.1.18
### Patch Changes
diff --git a/plugins/catalog-backend-module-bitbucket-cloud/package.json b/plugins/catalog-backend-module-bitbucket-cloud/package.json
index 51f4f716b5..eb371743c4 100644
--- a/plugins/catalog-backend-module-bitbucket-cloud/package.json
+++ b/plugins/catalog-backend-module-bitbucket-cloud/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-catalog-backend-module-bitbucket-cloud",
"description": "A Backstage catalog backend module that helps integrate towards Bitbucket Cloud",
- "version": "0.1.18",
+ "version": "0.1.20-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md
index 766f4689a0..245c481327 100644
--- a/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md
+++ b/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md
@@ -1,5 +1,20 @@
# @backstage/plugin-catalog-backend-module-bitbucket-server
+## 0.1.18-next.0
+
+### Patch Changes
+
+- 890e3b5ad4: Make sure to include the error message when ingestion fails
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+
## 0.1.16
### Patch Changes
diff --git a/plugins/catalog-backend-module-bitbucket-server/package.json b/plugins/catalog-backend-module-bitbucket-server/package.json
index d1819e9a3b..03547d7883 100644
--- a/plugins/catalog-backend-module-bitbucket-server/package.json
+++ b/plugins/catalog-backend-module-bitbucket-server/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend-module-bitbucket-server",
- "version": "0.1.16",
+ "version": "0.1.18-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/catalog-backend-module-bitbucket/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket/CHANGELOG.md
index 1782c518b5..49756558a8 100644
--- a/plugins/catalog-backend-module-bitbucket/CHANGELOG.md
+++ b/plugins/catalog-backend-module-bitbucket/CHANGELOG.md
@@ -1,5 +1,19 @@
# @backstage/plugin-catalog-backend-module-bitbucket
+## 0.2.20-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/plugin-bitbucket-cloud-common@0.2.13-next.0
+ - @backstage/config@1.1.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+
## 0.2.18
### Patch Changes
diff --git a/plugins/catalog-backend-module-bitbucket/package.json b/plugins/catalog-backend-module-bitbucket/package.json
index 5fba12c51d..64497a2854 100644
--- a/plugins/catalog-backend-module-bitbucket/package.json
+++ b/plugins/catalog-backend-module-bitbucket/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-catalog-backend-module-bitbucket",
"description": "A Backstage catalog backend module that helps integrate towards Bitbucket",
- "version": "0.2.18",
+ "version": "0.2.20-next.0",
"deprecated": true,
"main": "src/index.ts",
"types": "src/index.ts",
diff --git a/plugins/catalog-backend-module-gcp/CHANGELOG.md b/plugins/catalog-backend-module-gcp/CHANGELOG.md
index 43f6f8dc03..79bced28f5 100644
--- a/plugins/catalog-backend-module-gcp/CHANGELOG.md
+++ b/plugins/catalog-backend-module-gcp/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-catalog-backend-module-gcp
+## 0.1.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+ - @backstage/plugin-kubernetes-common@0.6.6
+
## 0.1.3
### Patch Changes
diff --git a/plugins/catalog-backend-module-gcp/package.json b/plugins/catalog-backend-module-gcp/package.json
index 6c802154f4..66b195273c 100644
--- a/plugins/catalog-backend-module-gcp/package.json
+++ b/plugins/catalog-backend-module-gcp/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-catalog-backend-module-gcp",
"description": "A Backstage catalog backend module that helps integrate towards GCP",
- "version": "0.1.3",
+ "version": "0.1.5-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/catalog-backend-module-gerrit/CHANGELOG.md b/plugins/catalog-backend-module-gerrit/CHANGELOG.md
index 6e265c7fa7..486b566635 100644
--- a/plugins/catalog-backend-module-gerrit/CHANGELOG.md
+++ b/plugins/catalog-backend-module-gerrit/CHANGELOG.md
@@ -1,5 +1,20 @@
# @backstage/plugin-catalog-backend-module-gerrit
+## 0.1.21-next.0
+
+### Patch Changes
+
+- 890e3b5ad4: Make sure to include the error message when ingestion fails
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+
## 0.1.19
### Patch Changes
diff --git a/plugins/catalog-backend-module-gerrit/package.json b/plugins/catalog-backend-module-gerrit/package.json
index 7fae34fa1f..a24644181f 100644
--- a/plugins/catalog-backend-module-gerrit/package.json
+++ b/plugins/catalog-backend-module-gerrit/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend-module-gerrit",
- "version": "0.1.19",
+ "version": "0.1.21-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/catalog-backend-module-github/CHANGELOG.md b/plugins/catalog-backend-module-github/CHANGELOG.md
index a3def0e7f2..1851ecd90b 100644
--- a/plugins/catalog-backend-module-github/CHANGELOG.md
+++ b/plugins/catalog-backend-module-github/CHANGELOG.md
@@ -1,5 +1,25 @@
# @backstage/plugin-catalog-backend-module-github
+## 0.4.3-next.0
+
+### Patch Changes
+
+- 890e3b5ad4: Make sure to include the error message when ingestion fails
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/plugin-catalog-backend@1.14.0-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.16
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+ - @backstage/plugin-events-node@0.2.14-next.0
+
## 0.4.0
### Minor Changes
diff --git a/plugins/catalog-backend-module-github/package.json b/plugins/catalog-backend-module-github/package.json
index 4e7d4bd933..a909f1df44 100644
--- a/plugins/catalog-backend-module-github/package.json
+++ b/plugins/catalog-backend-module-github/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-catalog-backend-module-github",
"description": "A Backstage catalog backend module that helps integrate towards GitHub",
- "version": "0.4.0",
+ "version": "0.4.3-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/catalog-backend-module-gitlab/CHANGELOG.md b/plugins/catalog-backend-module-gitlab/CHANGELOG.md
index ff2043d1c8..c3457bbc09 100644
--- a/plugins/catalog-backend-module-gitlab/CHANGELOG.md
+++ b/plugins/catalog-backend-module-gitlab/CHANGELOG.md
@@ -1,5 +1,21 @@
# @backstage/plugin-catalog-backend-module-gitlab
+## 0.3.2-next.0
+
+### Patch Changes
+
+- 890e3b5ad4: Make sure to include the error message when ingestion fails
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+
## 0.3.0
### Minor Changes
diff --git a/plugins/catalog-backend-module-gitlab/package.json b/plugins/catalog-backend-module-gitlab/package.json
index b03f96aedd..5e81ed5ee6 100644
--- a/plugins/catalog-backend-module-gitlab/package.json
+++ b/plugins/catalog-backend-module-gitlab/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-catalog-backend-module-gitlab",
"description": "A Backstage catalog backend module that helps integrate towards GitLab",
- "version": "0.3.0",
+ "version": "0.3.2-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md b/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md
index 44ee123ceb..616890d17b 100644
--- a/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md
+++ b/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md
@@ -1,5 +1,21 @@
# @backstage/plugin-catalog-backend-module-incremental-ingestion
+## 0.4.9-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-backend@1.14.0-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+ - @backstage/plugin-events-node@0.2.14-next.0
+ - @backstage/plugin-permission-common@0.7.8
+
## 0.4.6
### Patch Changes
diff --git a/plugins/catalog-backend-module-incremental-ingestion/package.json b/plugins/catalog-backend-module-incremental-ingestion/package.json
index a5d1dc29eb..93e85e3db5 100644
--- a/plugins/catalog-backend-module-incremental-ingestion/package.json
+++ b/plugins/catalog-backend-module-incremental-ingestion/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-catalog-backend-module-incremental-ingestion",
"description": "An entity provider for streaming large asset sources into the catalog",
- "version": "0.4.6",
+ "version": "0.4.9-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/catalog-backend-module-ldap/CHANGELOG.md b/plugins/catalog-backend-module-ldap/CHANGELOG.md
index bf2b433fff..50c1ea8496 100644
--- a/plugins/catalog-backend-module-ldap/CHANGELOG.md
+++ b/plugins/catalog-backend-module-ldap/CHANGELOG.md
@@ -1,5 +1,19 @@
# @backstage/plugin-catalog-backend-module-ldap
+## 0.5.20-next.0
+
+### Patch Changes
+
+- 890e3b5ad4: Make sure to include the error message when ingestion fails
+- Updated dependencies
+ - @backstage/config@1.1.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.16
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+
## 0.5.18
### Patch Changes
diff --git a/plugins/catalog-backend-module-ldap/package.json b/plugins/catalog-backend-module-ldap/package.json
index 3e5ae84ad2..61eee3a731 100644
--- a/plugins/catalog-backend-module-ldap/package.json
+++ b/plugins/catalog-backend-module-ldap/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-catalog-backend-module-ldap",
"description": "A Backstage catalog backend module that helps integrate towards LDAP",
- "version": "0.5.18",
+ "version": "0.5.20-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/catalog-backend-module-msgraph/CHANGELOG.md b/plugins/catalog-backend-module-msgraph/CHANGELOG.md
index 32ca5ec085..44924c65f1 100644
--- a/plugins/catalog-backend-module-msgraph/CHANGELOG.md
+++ b/plugins/catalog-backend-module-msgraph/CHANGELOG.md
@@ -1,5 +1,19 @@
# @backstage/plugin-catalog-backend-module-msgraph
+## 0.5.12-next.0
+
+### Patch Changes
+
+- 890e3b5ad4: Make sure to include the error message when ingestion fails
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/plugin-catalog-common@1.0.16
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+
## 0.5.10
### Patch Changes
diff --git a/plugins/catalog-backend-module-msgraph/package.json b/plugins/catalog-backend-module-msgraph/package.json
index 9aa539105a..1fe61cd6b2 100644
--- a/plugins/catalog-backend-module-msgraph/package.json
+++ b/plugins/catalog-backend-module-msgraph/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-catalog-backend-module-msgraph",
"description": "A Backstage catalog backend module that helps integrate towards Microsoft Graph",
- "version": "0.5.10",
+ "version": "0.5.12-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/catalog-backend-module-openapi/CHANGELOG.md b/plugins/catalog-backend-module-openapi/CHANGELOG.md
index 0c3895b20a..3f7801bd3f 100644
--- a/plugins/catalog-backend-module-openapi/CHANGELOG.md
+++ b/plugins/catalog-backend-module-openapi/CHANGELOG.md
@@ -1,5 +1,19 @@
# @backstage/plugin-catalog-backend-module-openapi
+## 0.1.22-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/plugin-catalog-backend@1.14.0-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.16
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+
## 0.1.19
### Patch Changes
diff --git a/plugins/catalog-backend-module-openapi/package.json b/plugins/catalog-backend-module-openapi/package.json
index 868c75a435..cbbf6c8492 100644
--- a/plugins/catalog-backend-module-openapi/package.json
+++ b/plugins/catalog-backend-module-openapi/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-catalog-backend-module-openapi",
"description": "A Backstage catalog backend module that helps with OpenAPI specifications",
- "version": "0.1.19",
+ "version": "0.1.22-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/catalog-backend-module-puppetdb/CHANGELOG.md b/plugins/catalog-backend-module-puppetdb/CHANGELOG.md
index a2b920105a..cd71bdec72 100644
--- a/plugins/catalog-backend-module-puppetdb/CHANGELOG.md
+++ b/plugins/catalog-backend-module-puppetdb/CHANGELOG.md
@@ -1,5 +1,20 @@
# @backstage/plugin-catalog-backend-module-puppetdb
+## 0.1.10-next.0
+
+### Patch Changes
+
+- 890e3b5ad4: Make sure to include the error message when ingestion fails
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+
## 0.1.8
### Patch Changes
diff --git a/plugins/catalog-backend-module-puppetdb/package.json b/plugins/catalog-backend-module-puppetdb/package.json
index 7eaf63b932..f54129bbcc 100644
--- a/plugins/catalog-backend-module-puppetdb/package.json
+++ b/plugins/catalog-backend-module-puppetdb/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-catalog-backend-module-puppetdb",
"description": "A Backstage catalog backend module that helps integrate towards PuppetDB",
- "version": "0.1.8",
+ "version": "0.1.10-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/catalog-backend-module-scaffolder-entity-model/CHANGELOG.md b/plugins/catalog-backend-module-scaffolder-entity-model/CHANGELOG.md
index c0de55d782..bb3bbb898d 100644
--- a/plugins/catalog-backend-module-scaffolder-entity-model/CHANGELOG.md
+++ b/plugins/catalog-backend-module-scaffolder-entity-model/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-catalog-backend-module-scaffolder-entity-model
+## 0.1.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/plugin-catalog-common@1.0.16
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+ - @backstage/plugin-scaffolder-common@1.4.1
+
## 0.1.0
### Minor Changes
diff --git a/plugins/catalog-backend-module-scaffolder-entity-model/package.json b/plugins/catalog-backend-module-scaffolder-entity-model/package.json
index f0f3ce59cf..cb8cbc16b5 100644
--- a/plugins/catalog-backend-module-scaffolder-entity-model/package.json
+++ b/plugins/catalog-backend-module-scaffolder-entity-model/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-catalog-backend-module-scaffolder-entity-model",
"description": "Adds support for the scaffolder specific entity model (e.g. the Template kind) to the catalog backend plugin.",
- "version": "0.1.0",
+ "version": "0.1.2-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/catalog-backend-module-unprocessed/CHANGELOG.md b/plugins/catalog-backend-module-unprocessed/CHANGELOG.md
index 9b8201e59f..2e15a14bfc 100644
--- a/plugins/catalog-backend-module-unprocessed/CHANGELOG.md
+++ b/plugins/catalog-backend-module-unprocessed/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-catalog-backend-module-unprocessed
+## 0.3.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/catalog-model@1.4.2
+
## 0.3.0
### Minor Changes
diff --git a/plugins/catalog-backend-module-unprocessed/package.json b/plugins/catalog-backend-module-unprocessed/package.json
index 8cff3514ec..43e49e793d 100644
--- a/plugins/catalog-backend-module-unprocessed/package.json
+++ b/plugins/catalog-backend-module-unprocessed/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-catalog-backend-module-unprocessed",
"description": "Backstage Catalog module to view unprocessed entities",
- "version": "0.3.0",
+ "version": "0.3.2-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/catalog-backend/CHANGELOG.md b/plugins/catalog-backend/CHANGELOG.md
index 49ba2517f7..305b7bd1d1 100644
--- a/plugins/catalog-backend/CHANGELOG.md
+++ b/plugins/catalog-backend/CHANGELOG.md
@@ -1,5 +1,36 @@
# @backstage/plugin-catalog-backend
+## 1.14.0-next.0
+
+### Minor Changes
+
+- 78af9433c8: Instrumenting some missing metrics with `OpenTelemetry`
+
+### Patch Changes
+
+- 348e8c1cdb: Fixes a bug where eagerly deleted entities did not properly trigger re-stitching of entities that they had relations to.
+- b97e9790f0: Internal refactors, laying the foundation for later introducing deferred stitching (see #18062).
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-openapi-utils@0.0.4
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.16
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+ - @backstage/plugin-events-node@0.2.14-next.0
+ - @backstage/plugin-permission-common@0.7.8
+ - @backstage/plugin-permission-node@0.7.16-next.0
+ - @backstage/plugin-scaffolder-common@1.4.1
+ - @backstage/plugin-search-backend-module-catalog@0.1.9-next.0
+ - @backstage/plugin-search-common@1.2.6
+
## 1.13.0
### Minor Changes
diff --git a/plugins/catalog-backend/package.json b/plugins/catalog-backend/package.json
index a1a47ed13a..7ce5d40385 100644
--- a/plugins/catalog-backend/package.json
+++ b/plugins/catalog-backend/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-catalog-backend",
"description": "The Backstage backend plugin that provides the Backstage catalog",
- "version": "1.13.0",
+ "version": "1.14.0-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/catalog-backend/src/database/DefaultProcessingDatabase.ts b/plugins/catalog-backend/src/database/DefaultProcessingDatabase.ts
index 01025f73dd..2daf8e6fc5 100644
--- a/plugins/catalog-backend/src/database/DefaultProcessingDatabase.ts
+++ b/plugins/catalog-backend/src/database/DefaultProcessingDatabase.ts
@@ -42,7 +42,6 @@ import {
import { checkLocationKeyConflict } from './operations/refreshState/checkLocationKeyConflict';
import { insertUnprocessedEntity } from './operations/refreshState/insertUnprocessedEntity';
import { updateUnprocessedEntity } from './operations/refreshState/updateUnprocessedEntity';
-import { deleteOrphanedEntities } from './operations/util/deleteOrphanedEntities';
import { generateStableHash } from './util';
import { EventBroker, EventParams } from '@backstage/plugin-events-node';
import { DateTime } from 'luxon';
@@ -275,11 +274,6 @@ export class DefaultProcessingDatabase implements ProcessingDatabase {
return { entityRefs };
}
- async deleteOrphanedEntities(txOpaque: Transaction): Promise {
- const tx = txOpaque as Knex.Transaction;
- return await deleteOrphanedEntities({ tx });
- }
-
async transaction(fn: (tx: Transaction) => Promise): Promise {
try {
let result: T | undefined = undefined;
diff --git a/plugins/catalog-backend/src/database/metrics.ts b/plugins/catalog-backend/src/database/metrics.ts
index b6c4e248dc..8eb307ea46 100644
--- a/plugins/catalog-backend/src/database/metrics.ts
+++ b/plugins/catalog-backend/src/database/metrics.ts
@@ -17,13 +17,17 @@
import { Knex } from 'knex';
import { createGaugeMetric } from '../util/metrics';
import { DbRefreshStateRow, DbRelationsRow, DbLocationsRow } from './tables';
+import { metrics } from '@opentelemetry/api';
+import { parseEntityRef } from '@backstage/catalog-model';
export function initDatabaseMetrics(knex: Knex) {
+ const seenProm = new Set();
const seen = new Set();
+ const meter = metrics.getMeter('default');
return {
- entities_count: createGaugeMetric({
+ entities_count_prom: createGaugeMetric({
name: 'catalog_entities_count',
- help: 'Total amount of entities in the catalog',
+ help: 'Total amount of entities in the catalog. DEPRECATED: Please use opentelemetry metrics instead.',
labelNames: ['kind'],
async collect() {
const result = await knex('refresh_state').select(
@@ -34,22 +38,22 @@ export function initDatabaseMetrics(knex: Knex) {
.reduce((acc, e) => acc.set(e, (acc.get(e) || 0) + 1), new Map());
results.forEach((value, key) => {
- seen.add(key);
+ seenProm.add(key);
this.set({ kind: key }, value);
});
- // Set all the entities that were not seen to 0 and delete them from the seen set.
- seen.forEach(key => {
+ // Set all the entities that were not seenProm to 0 and delete them from the seenProm set.
+ seenProm.forEach(key => {
if (!results.has(key)) {
this.set({ kind: key }, 0);
- seen.delete(key);
+ seenProm.delete(key);
}
});
},
}),
- registered_locations: createGaugeMetric({
+ registered_locations_prom: createGaugeMetric({
name: 'catalog_registered_locations_count',
- help: 'Total amount of registered locations in the catalog',
+ help: 'Total amount of registered locations in the catalog. DEPRECATED: Please use opentelemetry metrics instead.',
async collect() {
const total = await knex('locations').count({
count: '*',
@@ -57,9 +61,9 @@ export function initDatabaseMetrics(knex: Knex) {
this.set(Number(total[0].count));
},
}),
- relations: createGaugeMetric({
+ relations_prom: createGaugeMetric({
name: 'catalog_relations_count',
- help: 'Total amount of relations between entities',
+ help: 'Total amount of relations between entities. DEPRECATED: Please use opentelemetry metrics instead.',
async collect() {
const total = await knex('relations').count({
count: '*',
@@ -67,5 +71,50 @@ export function initDatabaseMetrics(knex: Knex) {
this.set(Number(total[0].count));
},
}),
+ entities_count: meter
+ .createObservableGauge('catalog_entities_count', {
+ description: 'Total amount of entities in the catalog',
+ })
+ .addCallback(async gauge => {
+ const result = await knex('refresh_state').select(
+ 'entity_ref',
+ );
+ const results = result
+ .map(row => parseEntityRef(row.entity_ref).kind)
+ .reduce((acc, e) => acc.set(e, (acc.get(e) || 0) + 1), new Map());
+
+ results.forEach((value, key) => {
+ seen.add(key);
+ gauge.observe(value, { kind: key });
+ });
+
+ // Set all the entities that were not seen to 0 and delete them from the seen set.
+ seen.forEach(key => {
+ if (!results.has(key)) {
+ gauge.observe(0, { kind: key });
+ seen.delete(key);
+ }
+ });
+ }),
+ registered_locations: meter
+ .createObservableGauge('catalog_registered_locations_count', {
+ description: 'Total amount of registered locations in the catalog',
+ })
+ .addCallback(async gauge => {
+ const total = await knex('locations').count({
+ count: '*',
+ });
+ gauge.observe(Number(total[0].count));
+ }),
+ relations: meter
+ .createObservableGauge('catalog_relations_count', {
+ description: 'Total amount of relations between entities',
+ })
+ .addCallback(async gauge => {
+ const total = await knex('relations').count({
+ count: '*',
+ });
+ gauge.observe(Number(total[0].count));
+ }),
};
}
diff --git a/plugins/catalog-backend/src/database/operations/provider/deleteWithEagerPruningOfChildren.test.ts b/plugins/catalog-backend/src/database/operations/provider/deleteWithEagerPruningOfChildren.test.ts
index dcd87613de..830cc20480 100644
--- a/plugins/catalog-backend/src/database/operations/provider/deleteWithEagerPruningOfChildren.test.ts
+++ b/plugins/catalog-backend/src/database/operations/provider/deleteWithEagerPruningOfChildren.test.ts
@@ -18,7 +18,11 @@ import { TestDatabaseId, TestDatabases } from '@backstage/backend-test-utils';
import { Knex } from 'knex';
import * as uuid from 'uuid';
import { applyDatabaseMigrations } from '../../migrations';
-import { DbRefreshStateReferencesRow, DbRefreshStateRow } from '../../tables';
+import {
+ DbRefreshStateReferencesRow,
+ DbRefreshStateRow,
+ DbRelationsRow,
+} from '../../tables';
import { deleteWithEagerPruningOfChildren } from './deleteWithEagerPruningOfChildren';
jest.setTimeout(60_000);
@@ -43,6 +47,22 @@ describe('deleteWithEagerPruningOfChildren', () => {
);
}
+ async function insertRelation(
+ knex: Knex,
+ ...relations: { from: string; to: string }[]
+ ) {
+ for (const rel of relations) {
+ await knex('relations').insert({
+ originating_entity_id: await knex('refresh_state')
+ .select('entity_id')
+ .then(rows => rows[0].entity_id), // doesn't matter which one, this is consumed pre-deletion
+ source_entity_ref: rel.from,
+ target_entity_ref: rel.to,
+ type: 'fake',
+ });
+ }
+ }
+
async function insertEntity(knex: Knex, ...entityRefs: string[]) {
for (const ref of entityRefs) {
await knex('refresh_state').insert({
@@ -64,6 +84,14 @@ describe('deleteWithEagerPruningOfChildren', () => {
return rows.map(r => r.entity_ref);
}
+ async function entitiesMarkedForStitching(knex: Knex) {
+ const rows = await knex('refresh_state')
+ .orderBy('entity_ref')
+ .select('entity_ref')
+ .where('result_hash', '=', 'force-stitching');
+ return rows.map(r => r.entity_ref);
+ }
+
it.each(databases.eachSupportedId())(
'works for the simple path, %p',
async databaseId => {
@@ -78,7 +106,7 @@ describe('deleteWithEagerPruningOfChildren', () => {
Scenario: P1 issues delete for E1 and E3
- Result: E1, E2, and E3 deleted; E4 and E5 remain
+ Result: E1, E2, and E3 deleted; E4 and E5 remain; E4 marked for stitching because it had a relation to a deleted entity
*/
const knex = await createDatabase(databaseId);
await insertEntity(knex, 'E1', 'E2', 'E3', 'E4', 'E5');
@@ -90,12 +118,14 @@ describe('deleteWithEagerPruningOfChildren', () => {
{ source_key: 'P1', target_entity_ref: 'E4' },
{ source_key: 'P2', target_entity_ref: 'E5' },
);
+ await insertRelation(knex, { from: 'E4', to: 'E2' });
await deleteWithEagerPruningOfChildren({
knex,
sourceKey: 'P1',
entityRefs: ['E1', 'E3'],
});
await expect(remainingEntities(knex)).resolves.toEqual(['E4', 'E5']);
+ await expect(entitiesMarkedForStitching(knex)).resolves.toEqual(['E4']);
},
);
@@ -113,7 +143,7 @@ describe('deleteWithEagerPruningOfChildren', () => {
Scenario: P1 issues delete for E1
- Result: E1 deleted; E2 remains
+ Result: E1 deleted; E2 remains; E2 marked for stitching because it had a relation to a deleted entity
*/
const knex = await createDatabase(databaseId);
await insertEntity(knex, 'E1', 'E2');
@@ -123,12 +153,14 @@ describe('deleteWithEagerPruningOfChildren', () => {
{ source_key: 'P1', target_entity_ref: 'E1' },
{ source_key: 'P1', target_entity_ref: 'E2' },
);
+ await insertRelation(knex, { from: 'E2', to: 'E1' });
await deleteWithEagerPruningOfChildren({
knex,
sourceKey: 'P1',
entityRefs: ['E1'],
});
await expect(remainingEntities(knex)).resolves.toEqual(['E2']);
+ await expect(entitiesMarkedForStitching(knex)).resolves.toEqual(['E2']);
},
);
@@ -144,7 +176,7 @@ describe('deleteWithEagerPruningOfChildren', () => {
Scenario: P1 issues delete for E1
- Result: E1 deleted; E2 and E3 remain
+ Result: E1 deleted; E2 and E3 remain; E2 marked for stitching because it had a relation to a deleted entity
*/
const knex = await createDatabase(databaseId);
await insertEntity(knex, 'E1', 'E2', 'E3');
@@ -155,12 +187,18 @@ describe('deleteWithEagerPruningOfChildren', () => {
{ source_key: 'P2', target_entity_ref: 'E3' },
{ source_entity_ref: 'E3', target_entity_ref: 'E2' },
);
+ await insertRelation(
+ knex,
+ { from: 'E2', to: 'E1' },
+ { from: 'E3', to: 'E2' },
+ );
await deleteWithEagerPruningOfChildren({
knex,
sourceKey: 'P1',
entityRefs: ['E1'],
});
await expect(remainingEntities(knex)).resolves.toEqual(['E2', 'E3']);
+ await expect(entitiesMarkedForStitching(knex)).resolves.toEqual(['E2']);
},
);
@@ -193,6 +231,7 @@ describe('deleteWithEagerPruningOfChildren', () => {
entityRefs: ['E1'],
});
await expect(remainingEntities(knex)).resolves.toEqual(['E2', 'E3']);
+ await expect(entitiesMarkedForStitching(knex)).resolves.toEqual([]);
},
);
@@ -208,7 +247,7 @@ describe('deleteWithEagerPruningOfChildren', () => {
Scenario: P1 issues delete for E1, then for E3
- Result: Everything deleted, but in two steps
+ Result: Everything deleted, but in two steps; E4 marked for stitching in the first step because it had a relation to a deleted entity
*/
const knex = await createDatabase(databaseId);
await insertEntity(knex, 'E1', 'E2', 'E3', 'E4', 'E5', 'E6');
@@ -224,6 +263,7 @@ describe('deleteWithEagerPruningOfChildren', () => {
{ source_entity_ref: 'E3', target_entity_ref: 'E5' },
{ source_entity_ref: 'E5', target_entity_ref: 'E6' },
);
+ await insertRelation(knex, { from: 'E4', to: 'E2' });
await deleteWithEagerPruningOfChildren({
knex,
sourceKey: 'P1',
@@ -235,12 +275,14 @@ describe('deleteWithEagerPruningOfChildren', () => {
'E5',
'E6',
]);
+ await expect(entitiesMarkedForStitching(knex)).resolves.toEqual(['E4']);
await deleteWithEagerPruningOfChildren({
knex,
sourceKey: 'P1',
entityRefs: ['E3'],
});
await expect(remainingEntities(knex)).resolves.toEqual([]);
+ await expect(entitiesMarkedForStitching(knex)).resolves.toEqual([]);
},
);
@@ -277,6 +319,7 @@ describe('deleteWithEagerPruningOfChildren', () => {
'E2',
'E4',
]);
+ await expect(entitiesMarkedForStitching(knex)).resolves.toEqual([]);
},
);
});
diff --git a/plugins/catalog-backend/src/database/operations/provider/deleteWithEagerPruningOfChildren.ts b/plugins/catalog-backend/src/database/operations/provider/deleteWithEagerPruningOfChildren.ts
index 027860fcc6..70f7d08ed1 100644
--- a/plugins/catalog-backend/src/database/operations/provider/deleteWithEagerPruningOfChildren.ts
+++ b/plugins/catalog-backend/src/database/operations/provider/deleteWithEagerPruningOfChildren.ts
@@ -16,7 +16,11 @@
import { Knex } from 'knex';
import lodash from 'lodash';
-import { DbRefreshStateReferencesRow } from '../../tables';
+import {
+ DbFinalEntitiesRow,
+ DbRefreshStateReferencesRow,
+ DbRefreshStateRow,
+} from '../../tables';
/**
* Given a number of entity refs originally created by a given entity provider
@@ -36,152 +40,24 @@ export async function deleteWithEagerPruningOfChildren(options: {
// limits for the number of permitted bindings on a precompiled statement
let removedCount = 0;
for (const refs of lodash.chunk(entityRefs, 1000)) {
- removedCount += await knex
- .delete()
- .from('refresh_state')
- .whereIn('entity_ref', orphans =>
- orphans
- // First find all nodes that can be reached downwards from the roots
- // (deletion targets), including the roots themselves, by traversing
- // down the refresh_state_references table. Note that this query
- // starts with a condition that source_key = our source key, and
- // target_entity_ref is one of the deletion targets. This has two
- // effects: it won't match attempts at deleting something that didn't
- // originate from us in the first place, and also won't match non-root
- // entities (source_key would be null for those).
- //
- // KeyA - R1 - R2 Legend:
- // \ -----------------------------------------
- // R3 Key* Source key
- // / R* Entity ref
- // KeyA - R4 - R5 lines Individual references; sources to
- // / the left and targets to the right
- // KeyB --- R6
- //
- // The scenario is that KeyA wants to delete R1.
- //
- // The query starts with the KeyA-R1 reference, and then traverses
- // down to also find R2 and R3. It uses union instead of union all,
- // because it wants to find the set of unique descendants even if
- // the tree has unexpected loops etc.
- .withRecursive('descendants', ['entity_ref'], initial =>
- initial
- .select('target_entity_ref')
- .from('refresh_state_references')
- .where('source_key', '=', sourceKey)
- .whereIn('target_entity_ref', refs)
- .union(recursive =>
- recursive
- .select('refresh_state_references.target_entity_ref')
- .from('descendants')
- .join(
- 'refresh_state_references',
- 'descendants.entity_ref',
- 'refresh_state_references.source_entity_ref',
- ),
- ),
- )
- // Then for each descendant, traverse all the way back upwards through
- // the refresh_state_references table to get an exhaustive list of all
- // references that are part of keeping that particular descendant
- // alive.
- //
- // Continuing the scenario from above, starting from R3, it goes
- // upwards to find every pair along every relation line.
- //
- // Top branch: R2-R3, R1-R2, KeyA-R1
- // Middle branch: R5-R3, R4-R5, KeyA-R4
- // Bottom branch: R6-R5, KeyB-R6
- //
- // Note that this all applied to the subject R3. The exact same thing
- // will be done starting from each other descendant (R2 and R1). They
- // only have one and two references to find, respectively.
- //
- // This query also uses union instead of union all, to get the set of
- // distinct relations even if the tree has unexpected loops etc.
- .withRecursive(
- 'ancestors',
- ['source_key', 'source_entity_ref', 'target_entity_ref', 'subject'],
- initial =>
- initial
- .select(
- 'refresh_state_references.source_key',
- 'refresh_state_references.source_entity_ref',
- 'refresh_state_references.target_entity_ref',
- 'descendants.entity_ref',
- )
- .from('descendants')
- .join(
- 'refresh_state_references',
- 'refresh_state_references.target_entity_ref',
- 'descendants.entity_ref',
- )
- .union(recursive =>
- recursive
- .select(
- 'refresh_state_references.source_key',
- 'refresh_state_references.source_entity_ref',
- 'refresh_state_references.target_entity_ref',
- 'ancestors.subject',
- )
- .from('ancestors')
- .join(
- 'refresh_state_references',
- 'refresh_state_references.target_entity_ref',
- 'ancestors.source_entity_ref',
- ),
- ),
- )
- // Finally, from that list of ancestor relations per descendant, pick
- // out the ones that are roots (have a source_key). Specifically, find
- // ones that seem to be be either (1) from another source, or (2)
- // aren't part of the deletion targets. Those are markers that tell us
- // that the corresponding descendant should be kept alive and NOT
- // subject to eager deletion, because there's "something else" (not
- // targeted for deletion) that has references down through the tree to
- // it.
- //
- // Continuing the scenario from above, for R3 we have
- //
- // KeyA-R1, KeyA-R4, KeyB-R6
- //
- // This tells us that R3 should be kept alive for two reasons: it's
- // referenced by a node that isn't being deleted (R4), and also by
- // another source (KeyB). What about R1 and R2? They both have
- //
- // KeyA-R1
- //
- // So those should be deleted, since they are definitely only being
- // kept alive by something that's about to be deleted.
- //
- // Final shape of the tree:
- //
- // R3
- // /
- // KeyA - R4 - R5
- // /
- // KeyB --- R6
- .with('retained', ['entity_ref'], notPartOfDeletion =>
- notPartOfDeletion
- .select('subject')
- .from('ancestors')
- .whereNotNull('ancestors.source_key')
- .where(foreignKeyOrRef =>
- foreignKeyOrRef
- .where('ancestors.source_key', '!=', sourceKey)
- .orWhereNotIn('ancestors.target_entity_ref', refs),
- ),
- )
- // Return all descendants minus the retained ones
- .select('descendants.entity_ref')
- .from('descendants')
- .leftOuterJoin(
- 'retained',
- 'retained.entity_ref',
- 'descendants.entity_ref',
- )
- .whereNull('retained.entity_ref'),
- );
+ const { orphanEntityRefs } =
+ await findDescendantsThatWouldHaveBeenOrphanedByDeletion({
+ knex: options.knex,
+ refs,
+ sourceKey,
+ });
+
+ // Chunk again - these can be many more than the outer chunk size
+ for (const refsToDelete of lodash.chunk(orphanEntityRefs, 1000)) {
+ await markEntitiesAffectedByDeletionForStitching({
+ knex: options.knex,
+ entityRefs: refsToDelete,
+ });
+ await knex
+ .delete()
+ .from('refresh_state')
+ .whereIn('entity_ref', refsToDelete);
+ }
// Delete the references that originate only from this entity provider. Note
// that there may be more than one entity provider making a "claim" for a
@@ -190,7 +66,202 @@ export async function deleteWithEagerPruningOfChildren(options: {
.where('source_key', '=', sourceKey)
.whereIn('target_entity_ref', refs)
.delete();
+
+ removedCount += orphanEntityRefs.length;
}
return removedCount;
}
+
+async function findDescendantsThatWouldHaveBeenOrphanedByDeletion(options: {
+ knex: Knex | Knex.Transaction;
+ refs: string[];
+ sourceKey: string;
+}): Promise<{ orphanEntityRefs: string[] }> {
+ const { knex, refs, sourceKey } = options;
+
+ const orphans: string[] =
+ // First find all nodes that can be reached downwards from the roots
+ // (deletion targets), including the roots themselves, by traversing
+ // down the refresh_state_references table. Note that this query
+ // starts with a condition that source_key = our source key, and
+ // target_entity_ref is one of the deletion targets. This has two
+ // effects: it won't match attempts at deleting something that didn't
+ // originate from us in the first place, and also won't match non-root
+ // entities (source_key would be null for those).
+ //
+ // KeyA - R1 - R2 Legend:
+ // \ -----------------------------------------
+ // R3 Key* Source key
+ // / R* Entity ref
+ // KeyA - R4 - R5 lines Individual references; sources to
+ // / the left and targets to the right
+ // KeyB --- R6
+ //
+ // The scenario is that KeyA wants to delete R1.
+ //
+ // The query starts with the KeyA-R1 reference, and then traverses
+ // down to also find R2 and R3. It uses union instead of union all,
+ // because it wants to find the set of unique descendants even if
+ // the tree has unexpected loops etc.
+ await knex
+ .withRecursive('descendants', ['entity_ref'], initial =>
+ initial
+ .select('target_entity_ref')
+ .from('refresh_state_references')
+ .where('source_key', '=', sourceKey)
+ .whereIn('target_entity_ref', refs)
+ .union(recursive =>
+ recursive
+ .select('refresh_state_references.target_entity_ref')
+ .from('descendants')
+ .join(
+ 'refresh_state_references',
+ 'descendants.entity_ref',
+ 'refresh_state_references.source_entity_ref',
+ ),
+ ),
+ )
+ // Then for each descendant, traverse all the way back upwards through
+ // the refresh_state_references table to get an exhaustive list of all
+ // references that are part of keeping that particular descendant
+ // alive.
+ //
+ // Continuing the scenario from above, starting from R3, it goes
+ // upwards to find every pair along every relation line.
+ //
+ // Top branch: R2-R3, R1-R2, KeyA-R1
+ // Middle branch: R5-R3, R4-R5, KeyA-R4
+ // Bottom branch: R6-R5, KeyB-R6
+ //
+ // Note that this all applied to the subject R3. The exact same thing
+ // will be done starting from each other descendant (R2 and R1). They
+ // only have one and two references to find, respectively.
+ //
+ // This query also uses union instead of union all, to get the set of
+ // distinct relations even if the tree has unexpected loops etc.
+ .withRecursive(
+ 'ancestors',
+ ['source_key', 'source_entity_ref', 'target_entity_ref', 'subject'],
+ initial =>
+ initial
+ .select(
+ 'refresh_state_references.source_key',
+ 'refresh_state_references.source_entity_ref',
+ 'refresh_state_references.target_entity_ref',
+ 'descendants.entity_ref',
+ )
+ .from('descendants')
+ .join(
+ 'refresh_state_references',
+ 'refresh_state_references.target_entity_ref',
+ 'descendants.entity_ref',
+ )
+ .union(recursive =>
+ recursive
+ .select(
+ 'refresh_state_references.source_key',
+ 'refresh_state_references.source_entity_ref',
+ 'refresh_state_references.target_entity_ref',
+ 'ancestors.subject',
+ )
+ .from('ancestors')
+ .join(
+ 'refresh_state_references',
+ 'refresh_state_references.target_entity_ref',
+ 'ancestors.source_entity_ref',
+ ),
+ ),
+ )
+ // Finally, from that list of ancestor relations per descendant, pick
+ // out the ones that are roots (have a source_key). Specifically, find
+ // ones that seem to be be either (1) from another source, or (2)
+ // aren't part of the deletion targets. Those are markers that tell us
+ // that the corresponding descendant should be kept alive and NOT
+ // subject to eager deletion, because there's "something else" (not
+ // targeted for deletion) that has references down through the tree to
+ // it.
+ //
+ // Continuing the scenario from above, for R3 we have
+ //
+ // KeyA-R1, KeyA-R4, KeyB-R6
+ //
+ // This tells us that R3 should be kept alive for two reasons: it's
+ // referenced by a node that isn't being deleted (R4), and also by
+ // another source (KeyB). What about R1 and R2? They both have
+ //
+ // KeyA-R1
+ //
+ // So those should be deleted, since they are definitely only being
+ // kept alive by something that's about to be deleted.
+ //
+ // Final shape of the tree:
+ //
+ // R3
+ // /
+ // KeyA - R4 - R5
+ // /
+ // KeyB --- R6
+ .with('retained', ['entity_ref'], notPartOfDeletion =>
+ notPartOfDeletion
+ .select('subject')
+ .from('ancestors')
+ .whereNotNull('ancestors.source_key')
+ .where(foreignKeyOrRef =>
+ foreignKeyOrRef
+ .where('ancestors.source_key', '!=', sourceKey)
+ .orWhereNotIn('ancestors.target_entity_ref', refs),
+ ),
+ )
+ // Return all descendants minus the retained ones
+ .select('descendants.entity_ref AS entity_ref')
+ .from('descendants')
+ .leftOuterJoin(
+ 'retained',
+ 'retained.entity_ref',
+ 'descendants.entity_ref',
+ )
+ .whereNull('retained.entity_ref')
+ .then(rows => rows.map(row => row.entity_ref));
+
+ return { orphanEntityRefs: orphans };
+}
+
+async function markEntitiesAffectedByDeletionForStitching(options: {
+ knex: Knex | Knex.Transaction;
+ entityRefs: string[];
+}) {
+ const { knex, entityRefs } = options;
+
+ // We want to re-stitch anything that has a relation pointing to the
+ // soon-to-be-deleted entity. In many circumstances we also re-stitch children
+ // in the refresh_state_references graph because their orphan state might
+ // change, but not here - this code by its very definition is meant to not
+ // leave any orphans behind, so we can simplify away that.
+ const affectedIds = await knex
+ .select('refresh_state.entity_id AS entity_id')
+ .from('relations')
+ .join(
+ 'refresh_state',
+ 'relations.source_entity_ref',
+ 'refresh_state.entity_ref',
+ )
+ .whereIn('relations.target_entity_ref', entityRefs)
+ .then(rows => rows.map(row => row.entity_id));
+
+ for (const ids of lodash.chunk(affectedIds, 1000)) {
+ await knex
+ .table('final_entities')
+ .update({
+ hash: 'force-stitching',
+ })
+ .whereIn('entity_id', ids);
+ await knex
+ .table('refresh_state')
+ .update({
+ result_hash: 'force-stitching',
+ next_update_at: knex.fn.now(),
+ })
+ .whereIn('entity_id', ids);
+ }
+}
diff --git a/plugins/catalog-backend/src/stitching/buildEntitySearch.test.ts b/plugins/catalog-backend/src/database/operations/stitcher/buildEntitySearch.test.ts
similarity index 99%
rename from plugins/catalog-backend/src/stitching/buildEntitySearch.test.ts
rename to plugins/catalog-backend/src/database/operations/stitcher/buildEntitySearch.test.ts
index 384794d230..8bc5ba57a9 100644
--- a/plugins/catalog-backend/src/stitching/buildEntitySearch.test.ts
+++ b/plugins/catalog-backend/src/database/operations/stitcher/buildEntitySearch.test.ts
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-import { Entity, DEFAULT_NAMESPACE } from '@backstage/catalog-model';
+import { DEFAULT_NAMESPACE, Entity } from '@backstage/catalog-model';
import { buildEntitySearch, mapToRows, traverse } from './buildEntitySearch';
describe('buildEntitySearch', () => {
diff --git a/plugins/catalog-backend/src/stitching/buildEntitySearch.ts b/plugins/catalog-backend/src/database/operations/stitcher/buildEntitySearch.ts
similarity index 98%
rename from plugins/catalog-backend/src/stitching/buildEntitySearch.ts
rename to plugins/catalog-backend/src/database/operations/stitcher/buildEntitySearch.ts
index b97083f207..30f2987cb5 100644
--- a/plugins/catalog-backend/src/stitching/buildEntitySearch.ts
+++ b/plugins/catalog-backend/src/database/operations/stitcher/buildEntitySearch.ts
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-import { Entity, DEFAULT_NAMESPACE } from '@backstage/catalog-model';
+import { DEFAULT_NAMESPACE, Entity } from '@backstage/catalog-model';
import { InputError } from '@backstage/errors';
-import { DbSearchRow } from '../database/tables';
+import { DbSearchRow } from '../../tables';
// These are excluded in the generic loop, either because they do not make sense
// to index, or because they are special-case always inserted whether they are
diff --git a/plugins/catalog-backend/src/database/operations/stitcher/markForStitching.test.ts b/plugins/catalog-backend/src/database/operations/stitcher/markForStitching.test.ts
new file mode 100644
index 0000000000..ce44fe15d8
--- /dev/null
+++ b/plugins/catalog-backend/src/database/operations/stitcher/markForStitching.test.ts
@@ -0,0 +1,260 @@
+/*
+ * Copyright 2023 The Backstage Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { TestDatabases } from '@backstage/backend-test-utils';
+import { applyDatabaseMigrations } from '../../migrations';
+import { markForStitching } from './markForStitching';
+import { DbFinalEntitiesRow, DbRefreshStateRow } from '../../tables';
+
+jest.setTimeout(60_000);
+
+describe('markForStitching', () => {
+ const databases = TestDatabases.create({
+ ids: ['MYSQL_8', 'POSTGRES_13', 'POSTGRES_9', 'SQLITE_3'],
+ });
+
+ it.each(databases.eachSupportedId())(
+ 'marks the right rows in immediate mode %p',
+ async databaseId => {
+ const knex = await databases.init(databaseId);
+ await applyDatabaseMigrations(knex);
+
+ await knex('refresh_state').insert([
+ {
+ entity_id: '1',
+ entity_ref: 'k:ns/one',
+ unprocessed_entity: '{}',
+ processed_entity: '{}',
+ result_hash: 'old',
+ errors: '[]',
+ next_update_at: knex.fn.now(),
+ last_discovery_at: knex.fn.now(),
+ },
+ {
+ entity_id: '2',
+ entity_ref: 'k:ns/two',
+ unprocessed_entity: '{}',
+ processed_entity: '{}',
+ result_hash: 'old',
+ errors: '[]',
+ next_update_at: knex.fn.now(),
+ last_discovery_at: knex.fn.now(),
+ },
+ {
+ entity_id: '3',
+ entity_ref: 'k:ns/three',
+ unprocessed_entity: '{}',
+ processed_entity: '{}',
+ result_hash: 'old',
+ errors: '[]',
+ next_update_at: knex.fn.now(),
+ last_discovery_at: knex.fn.now(),
+ },
+ {
+ entity_id: '4',
+ entity_ref: 'k:ns/four',
+ unprocessed_entity: '{}',
+ processed_entity: '{}',
+ result_hash: 'old',
+ errors: '[]',
+ next_update_at: knex.fn.now(),
+ last_discovery_at: knex.fn.now(),
+ },
+ ]);
+ await knex('final_entities').insert([
+ {
+ entity_id: '1',
+ final_entity: '{}',
+ hash: 'old',
+ stitch_ticket: 'old',
+ },
+ {
+ entity_id: '2',
+ final_entity: '{}',
+ hash: 'old',
+ stitch_ticket: 'old',
+ },
+ {
+ entity_id: '3',
+ final_entity: '{}',
+ hash: 'old',
+ stitch_ticket: 'old',
+ },
+ {
+ entity_id: '4',
+ final_entity: '{}',
+ hash: 'old',
+ stitch_ticket: 'old',
+ },
+ ]);
+
+ async function result() {
+ return knex('refresh_state')
+ .leftJoin(
+ 'final_entities',
+ 'final_entities.entity_id',
+ 'refresh_state.entity_id',
+ )
+ .select({
+ entity_id: 'refresh_state.entity_id',
+ next_update_at: 'refresh_state.next_update_at',
+ refresh_state_hash: 'refresh_state.result_hash',
+ final_entities_hash: 'final_entities.hash',
+ })
+ .orderBy('entity_id', 'asc');
+ }
+
+ // Ensure that now() isn't evaluating to the same thing
+ await new Promise(resolve => setTimeout(resolve, 1100));
+
+ const original = await result();
+
+ await markForStitching({
+ knex,
+ strategy: { mode: 'immediate' },
+ entityRefs: new Set(),
+ });
+ await expect(result()).resolves.toEqual([
+ {
+ entity_id: '1',
+ next_update_at: expect.anything(),
+ refresh_state_hash: 'old',
+ final_entities_hash: 'old',
+ },
+ {
+ entity_id: '2',
+ next_update_at: expect.anything(),
+ refresh_state_hash: 'old',
+ final_entities_hash: 'old',
+ },
+ {
+ entity_id: '3',
+ next_update_at: expect.anything(),
+ refresh_state_hash: 'old',
+ final_entities_hash: 'old',
+ },
+ {
+ entity_id: '4',
+ next_update_at: expect.anything(),
+ refresh_state_hash: 'old',
+ final_entities_hash: 'old',
+ },
+ ]);
+
+ await markForStitching({
+ knex,
+ strategy: { mode: 'immediate' },
+ entityRefs: new Set(['k:ns/one']),
+ });
+ await expect(result()).resolves.toEqual([
+ {
+ entity_id: '1',
+ next_update_at: expect.anything(),
+ refresh_state_hash: 'force-stitching',
+ final_entities_hash: 'force-stitching',
+ },
+ {
+ entity_id: '2',
+ next_update_at: expect.anything(),
+ refresh_state_hash: 'old',
+ final_entities_hash: 'old',
+ },
+ {
+ entity_id: '3',
+ next_update_at: expect.anything(),
+ refresh_state_hash: 'old',
+ final_entities_hash: 'old',
+ },
+ {
+ entity_id: '4',
+ next_update_at: expect.anything(),
+ refresh_state_hash: 'old',
+ final_entities_hash: 'old',
+ },
+ ]);
+
+ await markForStitching({
+ knex,
+ strategy: { mode: 'immediate' },
+ entityRefs: ['k:ns/two'],
+ });
+ await expect(result()).resolves.toEqual([
+ {
+ entity_id: '1',
+ next_update_at: expect.anything(),
+ refresh_state_hash: 'force-stitching',
+ final_entities_hash: 'force-stitching',
+ },
+ {
+ entity_id: '2',
+ next_update_at: expect.anything(),
+ refresh_state_hash: 'force-stitching',
+ final_entities_hash: 'force-stitching',
+ },
+ {
+ entity_id: '3',
+ next_update_at: expect.anything(),
+ refresh_state_hash: 'old',
+ final_entities_hash: 'old',
+ },
+ {
+ entity_id: '4',
+ next_update_at: expect.anything(),
+ refresh_state_hash: 'old',
+ final_entities_hash: 'old',
+ },
+ ]);
+
+ await markForStitching({
+ knex,
+ strategy: { mode: 'immediate' },
+ entityIds: ['3', '4'],
+ });
+ await expect(result()).resolves.toEqual([
+ {
+ entity_id: '1',
+ next_update_at: expect.anything(),
+ refresh_state_hash: 'force-stitching',
+ final_entities_hash: 'force-stitching',
+ },
+ {
+ entity_id: '2',
+ next_update_at: expect.anything(),
+ refresh_state_hash: 'force-stitching',
+ final_entities_hash: 'force-stitching',
+ },
+ {
+ entity_id: '3',
+ next_update_at: expect.anything(),
+ refresh_state_hash: 'force-stitching',
+ final_entities_hash: 'force-stitching',
+ },
+ {
+ entity_id: '4',
+ next_update_at: expect.anything(),
+ refresh_state_hash: 'force-stitching',
+ final_entities_hash: 'force-stitching',
+ },
+ ]);
+
+ // It overwrites timers
+ const final = await result();
+ for (let i = 0; i < final.length; ++i) {
+ expect(original[i].next_update_at).not.toEqual(final[i].next_update_at);
+ }
+ },
+ );
+});
diff --git a/plugins/catalog-backend/src/database/operations/stitcher/markForStitching.ts b/plugins/catalog-backend/src/database/operations/stitcher/markForStitching.ts
new file mode 100644
index 0000000000..7ab9bda1c0
--- /dev/null
+++ b/plugins/catalog-backend/src/database/operations/stitcher/markForStitching.ts
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2023 The Backstage Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { Knex } from 'knex';
+import splitToChunks from 'lodash/chunk';
+import { StitchingStrategy } from '../../../stitching/types';
+import { DbFinalEntitiesRow, DbRefreshStateRow } from '../../tables';
+
+/**
+ * Marks a number of entities for deferred stitching some time in the near
+ * future.
+ *
+ * @remarks
+ */
+export async function markForStitching(options: {
+ knex: Knex | Knex.Transaction;
+ strategy: StitchingStrategy;
+ entityRefs?: Iterable;
+ entityIds?: Iterable;
+}): Promise {
+ // Splitting to chunks just to cover pathological cases that upset the db
+ const entityRefs = split(options.entityRefs);
+ const entityIds = split(options.entityIds);
+ const knex = options.knex;
+
+ for (const chunk of entityRefs) {
+ await knex
+ .table('final_entities')
+ .update({
+ hash: 'force-stitching',
+ })
+ .whereIn(
+ 'entity_id',
+ knex('refresh_state')
+ .select('entity_id')
+ .whereIn('entity_ref', chunk),
+ );
+ await knex
+ .table('refresh_state')
+ .update({
+ result_hash: 'force-stitching',
+ next_update_at: knex.fn.now(),
+ })
+ .whereIn('entity_ref', chunk);
+ }
+
+ for (const chunk of entityIds) {
+ await knex
+ .table('final_entities')
+ .update({
+ hash: 'force-stitching',
+ })
+ .whereIn('entity_id', chunk);
+ await knex
+ .table('refresh_state')
+ .update({
+ result_hash: 'force-stitching',
+ next_update_at: knex.fn.now(),
+ })
+ .whereIn('entity_id', chunk);
+ }
+}
+
+function split(input: Iterable | undefined): string[][] {
+ if (!input) {
+ return [];
+ }
+ return splitToChunks(Array.isArray(input) ? input : [...input], 200);
+}
diff --git a/plugins/catalog-backend/src/database/operations/stitcher/performStitching.test.ts b/plugins/catalog-backend/src/database/operations/stitcher/performStitching.test.ts
new file mode 100644
index 0000000000..a864cbdef4
--- /dev/null
+++ b/plugins/catalog-backend/src/database/operations/stitcher/performStitching.test.ts
@@ -0,0 +1,287 @@
+/*
+ * Copyright 2021 The Backstage Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { getVoidLogger } from '@backstage/backend-common';
+import { TestDatabases } from '@backstage/backend-test-utils';
+import { Entity } from '@backstage/catalog-model';
+import { applyDatabaseMigrations } from '../../migrations';
+import {
+ DbFinalEntitiesRow,
+ DbRefreshStateReferencesRow,
+ DbRefreshStateRow,
+ DbRelationsRow,
+ DbSearchRow,
+} from '../../tables';
+import { performStitching } from './performStitching';
+
+jest.setTimeout(60_000);
+
+describe('performStitching', () => {
+ const databases = TestDatabases.create({
+ ids: ['MYSQL_8', 'POSTGRES_13', 'POSTGRES_9', 'SQLITE_3'],
+ });
+ const logger = getVoidLogger();
+
+ it.each(databases.eachSupportedId())(
+ 'runs the happy path in immediate mode for %p',
+ async databaseId => {
+ const knex = await databases.init(databaseId);
+ await applyDatabaseMigrations(knex);
+
+ let entities: DbFinalEntitiesRow[];
+ let entity: Entity;
+
+ await knex('refresh_state').insert([
+ {
+ entity_id: 'my-id',
+ entity_ref: 'k:ns/n',
+ unprocessed_entity: JSON.stringify({}),
+ processed_entity: JSON.stringify({
+ apiVersion: 'a',
+ kind: 'k',
+ metadata: {
+ name: 'n',
+ namespace: 'ns',
+ },
+ spec: {
+ k: 'v',
+ },
+ }),
+ errors: '[]',
+ next_update_at: knex.fn.now(),
+ last_discovery_at: knex.fn.now(),
+ },
+ ]);
+ await knex(
+ 'refresh_state_references',
+ ).insert([{ source_key: 'a', target_entity_ref: 'k:ns/n' }]);
+ await knex('relations').insert([
+ {
+ originating_entity_id: 'my-id',
+ source_entity_ref: 'k:ns/n',
+ type: 'looksAt',
+ target_entity_ref: 'k:ns/other',
+ },
+ // handles and ignores duplicates
+ {
+ originating_entity_id: 'my-id',
+ source_entity_ref: 'k:ns/n',
+ type: 'looksAt',
+ target_entity_ref: 'k:ns/other',
+ },
+ ]);
+
+ await performStitching({
+ knex,
+ logger,
+ strategy: { mode: 'immediate' },
+ entityRef: 'k:ns/n',
+ });
+
+ entities = await knex('final_entities');
+
+ expect(entities.length).toBe(1);
+ entity = JSON.parse(entities[0].final_entity!);
+ expect(entity).toEqual({
+ relations: [
+ {
+ type: 'looksAt',
+ targetRef: 'k:ns/other',
+ },
+ ],
+ apiVersion: 'a',
+ kind: 'k',
+ metadata: {
+ name: 'n',
+ namespace: 'ns',
+ etag: expect.any(String),
+ uid: 'my-id',
+ },
+ spec: {
+ k: 'v',
+ },
+ });
+
+ expect(entity.metadata.etag).toEqual(entities[0].hash);
+ const last_updated_at = entities[0].last_updated_at;
+ expect(last_updated_at).not.toBeNull();
+ const firstHash = entities[0].hash;
+
+ const search = await knex('search');
+ expect(search).toEqual(
+ expect.arrayContaining([
+ {
+ entity_id: 'my-id',
+ key: 'relations.looksat',
+ original_value: 'k:ns/other',
+ value: 'k:ns/other',
+ },
+ {
+ entity_id: 'my-id',
+ key: 'apiversion',
+ original_value: 'a',
+ value: 'a',
+ },
+ {
+ entity_id: 'my-id',
+ key: 'kind',
+ original_value: 'k',
+ value: 'k',
+ },
+ {
+ entity_id: 'my-id',
+ key: 'metadata.name',
+ original_value: 'n',
+ value: 'n',
+ },
+ {
+ entity_id: 'my-id',
+ key: 'metadata.namespace',
+ original_value: 'ns',
+ value: 'ns',
+ },
+ {
+ entity_id: 'my-id',
+ key: 'metadata.uid',
+ original_value: 'my-id',
+ value: 'my-id',
+ },
+ {
+ entity_id: 'my-id',
+ key: 'spec.k',
+ original_value: 'v',
+ value: 'v',
+ },
+ ]),
+ );
+
+ // Re-stitch without any changes
+ await performStitching({
+ knex,
+ logger,
+ strategy: { mode: 'immediate' },
+ entityRef: 'k:ns/n',
+ });
+
+ entities = await knex('final_entities');
+ expect(entities.length).toBe(1);
+ entity = JSON.parse(entities[0].final_entity!);
+ expect(entities[0].hash).toEqual(firstHash);
+ expect(entity.metadata.etag).toEqual(firstHash);
+
+ // Now add one more relation and re-stitch
+ await knex('relations').insert([
+ {
+ originating_entity_id: 'my-id',
+ source_entity_ref: 'k:ns/n',
+ type: 'looksAt',
+ target_entity_ref: 'k:ns/third',
+ },
+ ]);
+
+ await performStitching({
+ knex,
+ logger,
+ strategy: { mode: 'immediate' },
+ entityRef: 'k:ns/n',
+ });
+
+ entities = await knex('final_entities');
+
+ expect(entities.length).toBe(1);
+ entity = JSON.parse(entities[0].final_entity!);
+ expect(entity).toEqual({
+ relations: expect.arrayContaining([
+ {
+ type: 'looksAt',
+ targetRef: 'k:ns/other',
+ },
+ {
+ type: 'looksAt',
+ targetRef: 'k:ns/third',
+ },
+ ]),
+ apiVersion: 'a',
+ kind: 'k',
+ metadata: {
+ name: 'n',
+ namespace: 'ns',
+ etag: expect.any(String),
+ uid: 'my-id',
+ },
+ spec: {
+ k: 'v',
+ },
+ });
+
+ expect(entities[0].hash).not.toEqual(firstHash);
+ expect(entities[0].hash).toEqual(entity.metadata.etag);
+
+ expect(await knex('search')).toEqual(
+ expect.arrayContaining([
+ {
+ entity_id: 'my-id',
+ key: 'relations.looksat',
+ original_value: 'k:ns/other',
+ value: 'k:ns/other',
+ },
+ {
+ entity_id: 'my-id',
+ key: 'relations.looksat',
+ original_value: 'k:ns/third',
+ value: 'k:ns/third',
+ },
+ {
+ entity_id: 'my-id',
+ key: 'apiversion',
+ original_value: 'a',
+ value: 'a',
+ },
+ {
+ entity_id: 'my-id',
+ key: 'kind',
+ original_value: 'k',
+ value: 'k',
+ },
+ {
+ entity_id: 'my-id',
+ key: 'metadata.name',
+ original_value: 'n',
+ value: 'n',
+ },
+ {
+ entity_id: 'my-id',
+ key: 'metadata.namespace',
+ original_value: 'ns',
+ value: 'ns',
+ },
+ {
+ entity_id: 'my-id',
+ key: 'metadata.uid',
+ original_value: 'my-id',
+ value: 'my-id',
+ },
+ {
+ entity_id: 'my-id',
+ key: 'spec.k',
+ original_value: 'v',
+ value: 'v',
+ },
+ ]),
+ );
+ },
+ );
+});
diff --git a/plugins/catalog-backend/src/database/operations/stitcher/performStitching.ts b/plugins/catalog-backend/src/database/operations/stitcher/performStitching.ts
new file mode 100644
index 0000000000..bcb112690c
--- /dev/null
+++ b/plugins/catalog-backend/src/database/operations/stitcher/performStitching.ts
@@ -0,0 +1,236 @@
+/*
+ * Copyright 2023 The Backstage Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { ENTITY_STATUS_CATALOG_PROCESSING_TYPE } from '@backstage/catalog-client';
+import {
+ ANNOTATION_EDIT_URL,
+ ANNOTATION_VIEW_URL,
+ EntityRelation,
+} from '@backstage/catalog-model';
+import { AlphaEntity, EntityStatusItem } from '@backstage/catalog-model/alpha';
+import { SerializedError } from '@backstage/errors';
+import { Knex } from 'knex';
+import { v4 as uuid } from 'uuid';
+import { Logger } from 'winston';
+import { StitchingStrategy } from '../../../stitching/types';
+import {
+ DbFinalEntitiesRow,
+ DbRefreshStateRow,
+ DbSearchRow,
+} from '../../tables';
+import { buildEntitySearch } from './buildEntitySearch';
+import { BATCH_SIZE, generateStableHash } from './util';
+
+// See https://github.com/facebook/react/blob/f0cf832e1d0c8544c36aa8b310960885a11a847c/packages/react-dom-bindings/src/shared/sanitizeURL.js
+const scriptProtocolPattern =
+ // eslint-disable-next-line no-control-regex
+ /^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*\:/i;
+
+/**
+ * Performs the act of stitching - to take all of the various outputs from the
+ * ingestion process, and stitching them together into the final entity JSON
+ * shape.
+ */
+export async function performStitching(options: {
+ knex: Knex | Knex.Transaction;
+ logger: Logger;
+ strategy: StitchingStrategy;
+ entityRef: string;
+ stitchTicket?: string;
+}): Promise<'changed' | 'unchanged' | 'abandoned'> {
+ const { knex, logger, entityRef } = options;
+ const stitchTicket = options.stitchTicket ?? uuid();
+
+ const entityResult = await knex('refresh_state')
+ .where({ entity_ref: entityRef })
+ .limit(1)
+ .select('entity_id');
+ if (!entityResult.length) {
+ // Entity does no exist in refresh state table, no stitching required.
+ return 'abandoned';
+ }
+
+ // Insert stitching ticket that will be compared before inserting the final entity.
+ await knex('final_entities')
+ .insert({
+ entity_id: entityResult[0].entity_id,
+ hash: '',
+ stitch_ticket: stitchTicket,
+ })
+ .onConflict('entity_id')
+ .merge(['stitch_ticket']);
+
+ // Selecting from refresh_state and final_entities should yield exactly
+ // one row (except in abnormal cases where the stitch was invoked for
+ // something that didn't exist at all, in which case it's zero rows).
+ // The join with the temporary incoming_references still gives one row.
+ const [processedResult, relationsResult] = await Promise.all([
+ knex
+ .with('incoming_references', function incomingReferences(builder) {
+ return builder
+ .from('refresh_state_references')
+ .where({ target_entity_ref: entityRef })
+ .count({ count: '*' });
+ })
+ .select({
+ entityId: 'refresh_state.entity_id',
+ processedEntity: 'refresh_state.processed_entity',
+ errors: 'refresh_state.errors',
+ incomingReferenceCount: 'incoming_references.count',
+ previousHash: 'final_entities.hash',
+ })
+ .from('refresh_state')
+ .where({ 'refresh_state.entity_ref': entityRef })
+ .crossJoin(knex.raw('incoming_references'))
+ .leftOuterJoin('final_entities', {
+ 'final_entities.entity_id': 'refresh_state.entity_id',
+ }),
+ knex
+ .distinct({
+ relationType: 'type',
+ relationTarget: 'target_entity_ref',
+ })
+ .from('relations')
+ .where({ source_entity_ref: entityRef })
+ .orderBy('relationType', 'asc')
+ .orderBy('relationTarget', 'asc'),
+ ]);
+
+ // If there were no rows returned, it would mean that there was no
+ // matching row even in the refresh_state. This can happen for example
+ // if we emit a relation to something that hasn't been ingested yet.
+ // It's safe to ignore this stitch attempt in that case.
+ if (!processedResult.length) {
+ logger.debug(
+ `Unable to stitch ${entityRef}, item does not exist in refresh state table`,
+ );
+ return 'abandoned';
+ }
+
+ const {
+ entityId,
+ processedEntity,
+ errors,
+ incomingReferenceCount,
+ previousHash,
+ } = processedResult[0];
+
+ // If there was no processed entity in place, the target hasn't been
+ // through the processing steps yet. It's safe to ignore this stitch
+ // attempt in that case, since another stitch will be triggered when
+ // that processing has finished.
+ if (!processedEntity) {
+ logger.debug(
+ `Unable to stitch ${entityRef}, the entity has not yet been processed`,
+ );
+ return 'abandoned';
+ }
+
+ // Grab the processed entity and stitch all of the relevant data into
+ // it
+ const entity = JSON.parse(processedEntity) as AlphaEntity;
+ const isOrphan = Number(incomingReferenceCount) === 0;
+ let statusItems: EntityStatusItem[] = [];
+
+ if (isOrphan) {
+ logger.debug(`${entityRef} is an orphan`);
+ entity.metadata.annotations = {
+ ...entity.metadata.annotations,
+ ['backstage.io/orphan']: 'true',
+ };
+ }
+ if (errors) {
+ const parsedErrors = JSON.parse(errors) as SerializedError[];
+ if (Array.isArray(parsedErrors) && parsedErrors.length) {
+ statusItems = parsedErrors.map(e => ({
+ type: ENTITY_STATUS_CATALOG_PROCESSING_TYPE,
+ level: 'error',
+ message: `${e.name}: ${e.message}`,
+ error: e,
+ }));
+ }
+ }
+ // We opt to do this check here as we otherwise can't guarantee that it will be run after all processors
+ for (const annotation of [ANNOTATION_VIEW_URL, ANNOTATION_EDIT_URL]) {
+ const value = entity.metadata.annotations?.[annotation];
+ if (typeof value === 'string' && scriptProtocolPattern.test(value)) {
+ entity.metadata.annotations![annotation] =
+ 'https://backstage.io/annotation-rejected-for-security-reasons';
+ }
+ }
+
+ // TODO: entityRef is lower case and should be uppercase in the final
+ // result
+ entity.relations = relationsResult
+ .filter(row => row.relationType /* exclude null row, if relevant */)
+ .map(row => ({
+ type: row.relationType!,
+ targetRef: row.relationTarget!,
+ }));
+ if (statusItems.length) {
+ entity.status = {
+ ...entity.status,
+ items: [...(entity.status?.items ?? []), ...statusItems],
+ };
+ }
+
+ // If the output entity was actually not changed, just abort
+ const hash = generateStableHash(entity);
+ if (hash === previousHash) {
+ logger.debug(`Skipped stitching of ${entityRef}, no changes`);
+ return 'unchanged';
+ }
+
+ entity.metadata.uid = entityId;
+ if (!entity.metadata.etag) {
+ // If the original data source did not have its own etag handling,
+ // use the hash as a good-quality etag
+ entity.metadata.etag = hash;
+ }
+
+ // This may throw if the entity is invalid, so we call it before
+ // the final_entities write, even though we may end up not needing
+ // to write the search index.
+ const searchEntries = buildEntitySearch(entityId, entity);
+
+ const amountOfRowsChanged = await knex('final_entities')
+ .update({
+ final_entity: JSON.stringify(entity),
+ hash,
+ last_updated_at: knex.fn.now(),
+ })
+ .where('entity_id', entityId)
+ .where('stitch_ticket', stitchTicket)
+ .onConflict('entity_id')
+ .merge(['final_entity', 'hash', 'last_updated_at']);
+
+ if (amountOfRowsChanged === 0) {
+ logger.debug(`Entity ${entityRef} is already stitched, skipping write.`);
+ return 'abandoned';
+ }
+
+ // TODO(freben): Search will probably need a similar safeguard against
+ // race conditions like the final_entities ticket handling above.
+ // Otherwise, it can be the case that:
+ // A writes the entity ->
+ // B writes the entity ->
+ // B writes search ->
+ // A writes search
+ await knex('search').where({ entity_id: entityId }).delete();
+ await knex.batchInsert('search', searchEntries, BATCH_SIZE);
+
+ return 'changed';
+}
diff --git a/plugins/catalog-backend/src/stitching/util.ts b/plugins/catalog-backend/src/database/operations/stitcher/util.ts
similarity index 100%
rename from plugins/catalog-backend/src/stitching/util.ts
rename to plugins/catalog-backend/src/database/operations/stitcher/util.ts
diff --git a/plugins/catalog-backend/src/database/operations/util/deleteOrphanedEntities.test.ts b/plugins/catalog-backend/src/database/operations/util/deleteOrphanedEntities.test.ts
index 243b5db1b9..07ade1c4af 100644
--- a/plugins/catalog-backend/src/database/operations/util/deleteOrphanedEntities.test.ts
+++ b/plugins/catalog-backend/src/database/operations/util/deleteOrphanedEntities.test.ts
@@ -16,7 +16,7 @@
import { TestDatabaseId, TestDatabases } from '@backstage/backend-test-utils';
import { Knex } from 'knex';
-import * as uuid from 'uuid';
+import { StitchingStrategy } from '../../../stitching/types';
import { applyDatabaseMigrations } from '../../migrations';
import {
DbFinalEntitiesRow,
@@ -39,14 +39,14 @@ describe('deleteOrphanedEntities', () => {
return knex;
}
- async function run(knex: Knex): Promise {
+ async function run(knex: Knex, strategy: StitchingStrategy): Promise {
let result: number;
await knex.transaction(
async tx => {
// We can't return here, as knex swallows the return type in case the
// transaction is rolled back:
// https://github.com/knex/knex/blob/e37aeaa31c8ef9c1b07d2e4d3ec6607e557d800d/lib/transaction.js#L136
- result = await deleteOrphanedEntities({ tx });
+ result = await deleteOrphanedEntities({ knex: tx, strategy });
},
{
// If we explicitly trigger a rollback, don't fail.
@@ -58,9 +58,8 @@ describe('deleteOrphanedEntities', () => {
async function insertEntity(knex: Knex, ...entityRefs: string[]) {
for (const ref of entityRefs) {
- const entityId = uuid.v4();
await knex('refresh_state').insert({
- entity_id: entityId,
+ entity_id: `id-${ref}`,
entity_ref: ref,
unprocessed_entity: '{}',
processed_entity: '{}',
@@ -70,7 +69,7 @@ describe('deleteOrphanedEntities', () => {
result_hash: 'original',
});
await knex('final_entities').insert({
- entity_id: entityId,
+ entity_id: `id-${ref}`,
hash: 'original',
stitch_ticket: '',
});
@@ -120,7 +119,7 @@ describe('deleteOrphanedEntities', () => {
}
it.each(databases.eachSupportedId())(
- 'works for some mixed paths, %p',
+ 'works for some mixed paths in immediate mode, %p',
async databaseId => {
/*
In this graph, edges represent refresh state references, not entity relations:
@@ -176,18 +175,31 @@ describe('deleteOrphanedEntities', () => {
await insertRelation(knex, 'E1', 'E2');
await insertRelation(knex, 'E2', 'E3');
await insertRelation(knex, 'E10', 'E6');
- await expect(run(knex)).resolves.toEqual(5);
+ await insertRelation(knex, 'E7', 'E6');
+ await expect(run(knex, { mode: 'immediate' })).resolves.toEqual(5);
await expect(refreshState(knex)).resolves.toEqual([
{ entity_ref: 'E1', result_hash: 'original' },
- { entity_ref: 'E2', result_hash: 'orphan-relation-deleted' },
- { entity_ref: 'E7', result_hash: 'original' },
+ {
+ entity_ref: 'E2',
+ result_hash: 'force-stitching',
+ },
+ {
+ entity_ref: 'E7',
+ result_hash: 'force-stitching',
+ },
{ entity_ref: 'E8', result_hash: 'original' },
{ entity_ref: 'E9', result_hash: 'original' },
]);
await expect(finalEntities(knex)).resolves.toEqual([
{ entity_ref: 'E1', hash: 'original' },
- { entity_ref: 'E2', hash: 'orphan-relation-deleted' },
- { entity_ref: 'E7', hash: 'original' },
+ {
+ entity_ref: 'E2',
+ hash: 'force-stitching',
+ },
+ {
+ entity_ref: 'E7',
+ hash: 'force-stitching',
+ },
{ entity_ref: 'E8', hash: 'original' },
{ entity_ref: 'E9', hash: 'original' },
]);
diff --git a/plugins/catalog-backend/src/database/operations/util/deleteOrphanedEntities.ts b/plugins/catalog-backend/src/database/operations/util/deleteOrphanedEntities.ts
index eeab85f59e..5e2e46cf89 100644
--- a/plugins/catalog-backend/src/database/operations/util/deleteOrphanedEntities.ts
+++ b/plugins/catalog-backend/src/database/operations/util/deleteOrphanedEntities.ts
@@ -16,7 +16,9 @@
import { Knex } from 'knex';
import uniq from 'lodash/uniq';
-import { DbFinalEntitiesRow, DbRefreshStateRow } from '../../tables';
+import { StitchingStrategy } from '../../../stitching/types';
+import { DbRefreshStateRow } from '../../tables';
+import { markForStitching } from '../stitcher/markForStitching';
/**
* Finds and deletes all orphaned entities, i.e. entities that do not have any
@@ -24,15 +26,16 @@ import { DbFinalEntitiesRow, DbRefreshStateRow } from '../../tables';
* that would otherwise become orphaned.
*/
export async function deleteOrphanedEntities(options: {
- tx: Knex.Transaction | Knex;
+ knex: Knex.Transaction | Knex;
+ strategy: StitchingStrategy;
}): Promise {
- const { tx } = options;
+ const { knex, strategy } = options;
let total = 0;
// Limit iterations for sanity
for (let i = 0; i < 100; ++i) {
- const candidates = await tx
+ const candidates = await knex
.with('orphans', ['entity_id', 'entity_ref'], orphans =>
orphans
.from('refresh_state')
@@ -72,26 +75,17 @@ export async function deleteOrphanedEntities(options: {
total += orphanIds.length;
// Delete the orphans themselves
- await tx
+ await knex
.table('refresh_state')
.delete()
.whereIn('entity_id', orphanIds);
- // Mark all of things that the orphans had relations to for processing and
- // stitching
- await tx
- .table('final_entities')
- .update({
- hash: 'orphan-relation-deleted',
- })
- .whereIn('entity_id', orphanRelationIds);
- await tx
- .table('refresh_state')
- .update({
- result_hash: 'orphan-relation-deleted',
- next_update_at: tx.fn.now(),
- })
- .whereIn('entity_id', orphanRelationIds);
+ // Mark all of the things that the orphans had relations to for stitching
+ await markForStitching({
+ knex,
+ strategy,
+ entityIds: orphanRelationIds,
+ });
}
return total;
diff --git a/plugins/catalog-backend/src/database/tables.ts b/plugins/catalog-backend/src/database/tables.ts
index e3f3efd1bb..a429dcde8d 100644
--- a/plugins/catalog-backend/src/database/tables.ts
+++ b/plugins/catalog-backend/src/database/tables.ts
@@ -29,17 +29,88 @@ export type DbLocationsRow = {
target: string;
};
+/**
+ * Represents the refresh_state table.
+ *
+ * @remarks
+ *
+ * Every unique entity ref emitted by a provider or a parent entity becomes a
+ * row in this table, even before processing has started on it. The actual final
+ * data, after processing and stitching completes, is instead in the
+ * final_entities table.
+ *
+ * Datetime columns are both string and Date, because different database engines
+ * return them in different forms on the client side.
+ */
export type DbRefreshStateRow = {
+ /**
+ * The unique ID of the entity. This is different to the entity ref, in that
+ * it gets regenerated randomly each time a row is added to the table, no
+ * matter what the original entity data was.
+ */
entity_id: string;
+ /**
+ * The entity string ref (on lowercase kind:namespace/name form)
+ */
entity_ref: string;
+ /**
+ * The JSON of the raw entity, as it was received from the entity provider.
+ */
unprocessed_entity: string;
+ /**
+ * A stable hash of the unprocessed entity, used to detect changed/unchanged
+ * data for a given entity over time.
+ */
unprocessed_hash?: string;
+ /**
+ * The JSON of the processed entity (if processing has run yet on it).
+ */
processed_entity?: string;
+ /**
+ * A stable hash of the processed entity AND all other emitted things during
+ * processing, such as relations.
+ */
result_hash?: string;
+ /**
+ * Per-entity cached data on JSON form. This is read and written by processors
+ * who wish to leverage this feature.
+ */
cache?: string;
+ /**
+ * The next point in time that this entity is due for processing. This
+ * continuously gets moved forward as items are picked up for processing.
+ */
next_update_at: string | Date;
- last_discovery_at: string | Date; // remove?
+ /**
+ * The last time that this entity was emitted by somebody (the entity provider
+ * or a parent entity).
+ *
+ * @remarks
+ *
+ * Don't rely on this column more than at most as being loosely informative.
+ * Its semantics aren't fully settled yet.
+ */
+ last_discovery_at: string | Date;
+ /**
+ * A JSON serialized array of errors (if any) encountered during processing.
+ */
errors?: string;
+ /**
+ * A conflict detection/resolution key for the entity.
+ *
+ * @remarks
+ *
+ * The exact value semantics differs, but may for example be a URL pointing to
+ * where the entity was sourced from. If a "competing" provider or parent
+ * entity tries to emit an entity that has the same entity ref but a different
+ * location key, a conflict is detected (you aren't allowed to "trample" over
+ * a previously existing entity).
+ *
+ * Some providers may choose to emit entities with no location key set at all.
+ * This is a signal that it's only loosely claimed, and that any other
+ * competing provider/parent is allowed to overwrite and claim it as theirs
+ * instead.
+ */
location_key?: string;
};
diff --git a/plugins/catalog-backend/src/database/types.ts b/plugins/catalog-backend/src/database/types.ts
index 592d5fe063..56e5f48f14 100644
--- a/plugins/catalog-backend/src/database/types.ts
+++ b/plugins/catalog-backend/src/database/types.ts
@@ -151,8 +151,6 @@ export interface ProcessingDatabase {
txOpaque: Transaction,
options: ListParentsOptions,
): Promise;
-
- deleteOrphanedEntities(txOpaque: Transaction): Promise;
}
/**
diff --git a/plugins/catalog-backend/src/processing/DefaultCatalogProcessingEngine.test.ts b/plugins/catalog-backend/src/processing/DefaultCatalogProcessingEngine.test.ts
index 00235ef601..fba5e387a9 100644
--- a/plugins/catalog-backend/src/processing/DefaultCatalogProcessingEngine.test.ts
+++ b/plugins/catalog-backend/src/processing/DefaultCatalogProcessingEngine.test.ts
@@ -21,7 +21,7 @@ import waitForExpect from 'wait-for-expect';
import { DefaultProcessingDatabase } from '../database/DefaultProcessingDatabase';
import { DefaultCatalogProcessingEngine } from './DefaultCatalogProcessingEngine';
import { CatalogProcessingOrchestrator } from './types';
-import { Stitcher } from '../stitching/Stitcher';
+import { Stitcher } from '../stitching/types';
import { ConfigReader } from '@backstage/config';
describe('DefaultCatalogProcessingEngine', () => {
@@ -66,6 +66,7 @@ describe('DefaultCatalogProcessingEngine', () => {
config: new ConfigReader({}),
logger: getVoidLogger(),
processingDatabase: db,
+ knex: {} as any,
orchestrator: orchestrator,
stitcher: stitcher,
createHash: () => hash,
@@ -133,6 +134,7 @@ describe('DefaultCatalogProcessingEngine', () => {
config: new ConfigReader({}),
logger: getVoidLogger(),
processingDatabase: db,
+ knex: {} as any,
orchestrator: orchestrator,
stitcher: stitcher,
createHash: () => hash,
@@ -216,6 +218,7 @@ describe('DefaultCatalogProcessingEngine', () => {
config: new ConfigReader({}),
logger: getVoidLogger(),
processingDatabase: db,
+ knex: {} as any,
orchestrator: orchestrator,
stitcher: stitcher,
createHash: () => hash,
@@ -292,6 +295,7 @@ describe('DefaultCatalogProcessingEngine', () => {
config: new ConfigReader({}),
logger: getVoidLogger(),
processingDatabase: db,
+ knex: {} as any,
orchestrator: orchestrator,
stitcher: stitcher,
createHash: () => hash,
@@ -350,6 +354,7 @@ describe('DefaultCatalogProcessingEngine', () => {
config: new ConfigReader({}),
logger: getVoidLogger(),
processingDatabase: db,
+ knex: {} as any,
orchestrator: orchestrator,
stitcher: stitcher,
createHash: () => hash,
@@ -450,10 +455,10 @@ describe('DefaultCatalogProcessingEngine', () => {
await waitForExpect(() => {
expect(stitcher.stitch).toHaveBeenCalledTimes(2);
});
- expect([...stitcher.stitch.mock.calls[0][0]]).toEqual(
+ expect([...stitcher.stitch.mock.calls[0][0].entityRefs!]).toEqual(
expect.arrayContaining(['k:ns/me', 'k:ns/other1', 'k:ns/other2']),
);
- expect([...stitcher.stitch.mock.calls[1][0]]).toEqual(
+ expect([...stitcher.stitch.mock.calls[1][0].entityRefs!]).toEqual(
expect.arrayContaining(['k:ns/me', 'k:ns/other1', 'k:ns/other3']),
);
await engine.stop();
@@ -464,6 +469,7 @@ describe('DefaultCatalogProcessingEngine', () => {
config: new ConfigReader({}),
logger: getVoidLogger(),
processingDatabase: db,
+ knex: {} as any,
orchestrator: orchestrator,
stitcher: stitcher,
createHash: () => hash,
@@ -535,7 +541,7 @@ describe('DefaultCatalogProcessingEngine', () => {
await waitForExpect(() => {
expect(stitcher.stitch).toHaveBeenCalledTimes(1);
});
- expect([...stitcher.stitch.mock.calls[0][0]]).toEqual(
+ expect([...stitcher.stitch.mock.calls[0][0].entityRefs!]).toEqual(
expect.arrayContaining(['k:ns/me']),
);
await engine.stop();
@@ -546,6 +552,7 @@ describe('DefaultCatalogProcessingEngine', () => {
config: new ConfigReader({}),
logger: getVoidLogger(),
processingDatabase: db,
+ knex: {} as any,
orchestrator: orchestrator,
stitcher: stitcher,
createHash: () => hash,
@@ -622,7 +629,7 @@ describe('DefaultCatalogProcessingEngine', () => {
await waitForExpect(() => {
expect(stitcher.stitch).toHaveBeenCalledTimes(1);
});
- expect([...stitcher.stitch.mock.calls[0][0]]).toEqual(
+ expect([...stitcher.stitch.mock.calls[0][0].entityRefs!]).toEqual(
expect.arrayContaining(['k:ns/me', 'k:ns/other2']),
);
await engine.stop();
@@ -633,6 +640,7 @@ describe('DefaultCatalogProcessingEngine', () => {
config: new ConfigReader({}),
logger: getVoidLogger(),
processingDatabase: db,
+ knex: {} as any,
orchestrator: orchestrator,
stitcher: stitcher,
createHash: () => hash,
@@ -699,7 +707,7 @@ describe('DefaultCatalogProcessingEngine', () => {
await waitForExpect(() => {
expect(stitcher.stitch).toHaveBeenCalledTimes(1);
});
- expect([...stitcher.stitch.mock.calls[0][0]]).toEqual(
+ expect([...stitcher.stitch.mock.calls[0][0].entityRefs!]).toEqual(
expect.arrayContaining(['k:ns/me', 'k:ns/other2']),
);
await engine.stop();
diff --git a/plugins/catalog-backend/src/processing/DefaultCatalogProcessingEngine.ts b/plugins/catalog-backend/src/processing/DefaultCatalogProcessingEngine.ts
index bed1fe6f50..72f92b9b40 100644
--- a/plugins/catalog-backend/src/processing/DefaultCatalogProcessingEngine.ts
+++ b/plugins/catalog-backend/src/processing/DefaultCatalogProcessingEngine.ts
@@ -22,16 +22,13 @@ import {
import { assertError, serializeError, stringifyError } from '@backstage/errors';
import { Hash } from 'crypto';
import stableStringify from 'fast-json-stable-stringify';
+import { Knex } from 'knex';
import { Logger } from 'winston';
import { metrics, trace } from '@opentelemetry/api';
import { ProcessingDatabase, RefreshStateItem } from '../database/types';
import { createCounterMetric, createSummaryMetric } from '../util/metrics';
-import {
- CatalogProcessingEngine,
- CatalogProcessingOrchestrator,
- EntityProcessingResult,
-} from './types';
-import { Stitcher } from '../stitching/Stitcher';
+import { CatalogProcessingOrchestrator, EntityProcessingResult } from './types';
+import { Stitcher } from '../stitching/types';
import { startTaskPipeline } from './TaskPipeline';
import { PluginTaskScheduler } from '@backstage/backend-tasks';
import { Config } from '@backstage/config';
@@ -40,6 +37,7 @@ import {
TRACER_ID,
withActiveSpan,
} from '../util/opentelemetry';
+import { deleteOrphanedEntities } from '../database/operations/util/deleteOrphanedEntities';
const CACHE_TTL = 5;
@@ -47,10 +45,17 @@ const tracer = trace.getTracer(TRACER_ID);
export type ProgressTracker = ReturnType;
-export class DefaultCatalogProcessingEngine implements CatalogProcessingEngine {
+// NOTE(freben): Perhaps surprisingly, this class does not implement the
+// CatalogProcessingEngine type. That type is externally visible and its name is
+// the way it is for historic reasons. This class has no particular reason to
+// implement that precise interface; nowadays there are several different
+// engines "hiding" behind the CatalogProcessingEngine interface, of which this
+// is just one.
+export class DefaultCatalogProcessingEngine {
private readonly config: Config;
private readonly scheduler?: PluginTaskScheduler;
private readonly logger: Logger;
+ private readonly knex: Knex;
private readonly processingDatabase: ProcessingDatabase;
private readonly orchestrator: CatalogProcessingOrchestrator;
private readonly stitcher: Stitcher;
@@ -69,6 +74,7 @@ export class DefaultCatalogProcessingEngine implements CatalogProcessingEngine {
config: Config;
scheduler?: PluginTaskScheduler;
logger: Logger;
+ knex: Knex;
processingDatabase: ProcessingDatabase;
orchestrator: CatalogProcessingOrchestrator;
stitcher: Stitcher;
@@ -84,6 +90,7 @@ export class DefaultCatalogProcessingEngine implements CatalogProcessingEngine {
this.config = options.config;
this.scheduler = options.scheduler;
this.logger = options.logger;
+ this.knex = options.knex;
this.processingDatabase = options.processingDatabase;
this.orchestrator = options.orchestrator;
this.stitcher = options.stitcher;
@@ -255,9 +262,11 @@ export class DefaultCatalogProcessingEngine implements CatalogProcessingEngine {
resultHash,
});
});
- await this.stitcher.stitch(
- new Set([stringifyEntityRef(unprocessedEntity)]),
- );
+
+ await this.stitcher.stitch({
+ entityRefs: [stringifyEntityRef(unprocessedEntity)],
+ });
+
track.markSuccessfulWithErrors();
return;
}
@@ -305,9 +314,11 @@ export class DefaultCatalogProcessingEngine implements CatalogProcessingEngine {
}
});
- await this.stitcher.stitch(setOfThingsToStitch);
+ await this.stitcher.stitch({
+ entityRefs: setOfThingsToStitch,
+ });
- track.markSuccessfulWithChanges(setOfThingsToStitch.size);
+ track.markSuccessfulWithChanges();
} catch (error) {
assertError(error);
track.markFailed(error);
@@ -318,20 +329,21 @@ export class DefaultCatalogProcessingEngine implements CatalogProcessingEngine {
}
private startOrphanCleanup(): () => void {
- const strategy =
+ const orphanStrategy =
this.config.getOptionalString('catalog.orphanStrategy') ?? 'keep';
- if (strategy !== 'delete') {
+ if (orphanStrategy !== 'delete') {
return () => {};
}
const runOnce = async () => {
try {
- await this.processingDatabase.transaction(async tx => {
- const n = await this.processingDatabase.deleteOrphanedEntities(tx);
- if (n > 0) {
- this.logger.info(`Deleted ${n} orphaned entities`);
- }
+ const n = await deleteOrphanedEntities({
+ knex: this.knex,
+ strategy: { mode: 'immediate' },
});
+ if (n > 0) {
+ this.logger.info(`Deleted ${n} orphaned entities`);
+ }
} catch (error) {
this.logger.warn(`Failed to delete orphaned entities`, error);
}
@@ -363,10 +375,6 @@ export class DefaultCatalogProcessingEngine implements CatalogProcessingEngine {
// Helps wrap the timing and logging behaviors
function progressTracker() {
// prom-client metrics are deprecated in favour of OpenTelemetry metrics.
- const promStitchedEntities = createCounterMetric({
- name: 'catalog_stitched_entities_count',
- help: 'Amount of entities stitched. DEPRECATED, use OpenTelemetry metrics instead',
- });
const promProcessedEntities = createCounterMetric({
name: 'catalog_processed_entities_count',
help: 'Amount of entities processed, DEPRECATED, use OpenTelemetry metrics instead',
@@ -388,11 +396,6 @@ function progressTracker() {
});
const meter = metrics.getMeter('default');
- const stitchedEntities = meter.createCounter(
- 'catalog.stitched.entities.count',
- { description: 'Amount of entities stitched' },
- );
-
const processedEntities = meter.createCounter(
'catalog.processed.entities.count',
{ description: 'Amount of entities processed' },
@@ -464,13 +467,11 @@ function progressTracker() {
processedEntities.add(1, { result: 'errors' });
}
- function markSuccessfulWithChanges(stitchedCount: number) {
+ function markSuccessfulWithChanges() {
endOverallTimer({ result: 'changed' });
- promStitchedEntities.inc(stitchedCount);
promProcessedEntities.inc({ result: 'changed' }, 1);
processingDuration.record(endTime(), { result: 'changed' });
- stitchedEntities.add(stitchedCount);
processedEntities.add(1, { result: 'changed' });
}
diff --git a/plugins/catalog-backend/src/processing/types.ts b/plugins/catalog-backend/src/processing/types.ts
index c0d0e5db0d..002747d4c4 100644
--- a/plugins/catalog-backend/src/processing/types.ts
+++ b/plugins/catalog-backend/src/processing/types.ts
@@ -64,8 +64,8 @@ export interface CatalogProcessingOrchestrator {
}
/**
- * Represents the engine that drives the processing loops. Some backend
- * instances may choose to not call start, if they focus only on API
+ * Represents the engine that drives the processing and stitching loops. Some
+ * backend instances may choose to not call start, if they focus only on API
* interactions.
*
* @public
diff --git a/plugins/catalog-backend/src/service/CatalogBuilder.ts b/plugins/catalog-backend/src/service/CatalogBuilder.ts
index 531bb91dd2..c12178e888 100644
--- a/plugins/catalog-backend/src/service/CatalogBuilder.ts
+++ b/plugins/catalog-backend/src/service/CatalogBuilder.ts
@@ -65,7 +65,7 @@ import { DefaultCatalogProcessingEngine } from '../processing/DefaultCatalogProc
import { DefaultLocationService } from './DefaultLocationService';
import { DefaultEntitiesCatalog } from './DefaultEntitiesCatalog';
import { DefaultCatalogProcessingOrchestrator } from '../processing/DefaultCatalogProcessingOrchestrator';
-import { Stitcher } from '../stitching/Stitcher';
+import { DefaultStitcher } from '../stitching/DefaultStitcher';
import {
createRandomProcessingInterval,
ProcessingIntervalFunction,
@@ -449,6 +449,11 @@ export class CatalogBuilder {
await applyDatabaseMigrations(dbClient);
}
+ const stitcher = DefaultStitcher.fromConfig(config, {
+ knex: dbClient,
+ logger,
+ });
+
const processingDatabase = new DefaultProcessingDatabase({
database: dbClient,
logger,
@@ -474,7 +479,6 @@ export class CatalogBuilder {
policy,
legacySingleProcessorValidation: this.legacySingleProcessorValidation,
});
- const stitcher = new Stitcher(dbClient, logger);
const unauthorizedEntitiesCatalog = new DefaultEntitiesCatalog({
database: dbClient,
logger,
@@ -535,6 +539,7 @@ export class CatalogBuilder {
config,
scheduler,
logger,
+ knex: dbClient,
processingDatabase,
orchestrator,
stitcher,
@@ -572,7 +577,16 @@ export class CatalogBuilder {
await connectEntityProviders(providerDatabase, entityProviders);
return {
- processingEngine,
+ processingEngine: {
+ async start() {
+ await processingEngine.start();
+ await stitcher.start();
+ },
+ async stop() {
+ await processingEngine.stop();
+ await stitcher.stop();
+ },
+ },
router,
};
}
diff --git a/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.test.ts b/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.test.ts
index 4f011813e6..fde3408c4b 100644
--- a/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.test.ts
+++ b/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.test.ts
@@ -30,10 +30,10 @@ import {
DbRefreshStateRow,
DbSearchRow,
} from '../database/tables';
-import { Stitcher } from '../stitching/Stitcher';
-import { buildEntitySearch } from '../stitching/buildEntitySearch';
+import { Stitcher } from '../stitching/types';
import { DefaultEntitiesCatalog } from './DefaultEntitiesCatalog';
import { EntitiesRequest } from '../catalog/types';
+import { buildEntitySearch } from '../database/operations/stitcher/buildEntitySearch';
jest.setTimeout(60_000);
@@ -1684,9 +1684,9 @@ describe('DefaultEntitiesCatalog', () => {
{ entity_ref: 'k:default/unrelated1', result_hash: 'not-changed' },
{ entity_ref: 'k:default/unrelated2', result_hash: 'not-changed' },
]);
- expect(stitch).toHaveBeenCalledWith(
- new Set(['k:default/unrelated1', 'k:default/unrelated2']),
- );
+ expect(stitch).toHaveBeenCalledWith({
+ entityRefs: new Set(['k:default/unrelated1', 'k:default/unrelated2']),
+ });
},
);
});
diff --git a/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.ts b/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.ts
index c328c83823..24f0432419 100644
--- a/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.ts
+++ b/plugins/catalog-backend/src/service/DefaultEntitiesCatalog.ts
@@ -49,8 +49,7 @@ import {
DbRelationsRow,
DbSearchRow,
} from '../database/tables';
-
-import { Stitcher } from '../stitching/Stitcher';
+import { Stitcher } from '../stitching/types';
import {
isQueryEntitiesCursorRequest,
@@ -606,7 +605,9 @@ export class DefaultEntitiesCatalog implements EntitiesCatalog {
.where('entity_id', uid)
.delete();
- await this.stitcher.stitch(new Set(relationPeers.map(p => p.ref)));
+ await this.stitcher.stitch({
+ entityRefs: new Set(relationPeers.map(p => p.ref)),
+ });
}
async entityAncestry(rootRef: string): Promise {
diff --git a/plugins/catalog-backend/src/service/DefaultRefreshService.test.ts b/plugins/catalog-backend/src/service/DefaultRefreshService.test.ts
index 76284ebbfd..5b29bb34d5 100644
--- a/plugins/catalog-backend/src/service/DefaultRefreshService.test.ts
+++ b/plugins/catalog-backend/src/service/DefaultRefreshService.test.ts
@@ -31,9 +31,9 @@ import {
import { ProcessingDatabase } from '../database/types';
import { DefaultCatalogProcessingEngine } from '../processing/DefaultCatalogProcessingEngine';
import { EntityProcessingRequest } from '../processing/types';
-import { Stitcher } from '../stitching/Stitcher';
import { DefaultRefreshService } from './DefaultRefreshService';
import { ConfigReader } from '@backstage/config';
+import { DefaultStitcher } from '../stitching/DefaultStitcher';
jest.setTimeout(60_000);
@@ -109,10 +109,16 @@ describe('DefaultRefreshService', () => {
}
}
+ const stitcher = DefaultStitcher.fromConfig(new ConfigReader({}), {
+ knex,
+ logger: defaultLogger,
+ });
const engine = new DefaultCatalogProcessingEngine({
config: new ConfigReader({}),
logger: defaultLogger,
processingDatabase: db,
+ knex: knex,
+ stitcher: stitcher,
orchestrator: {
async process(request: EntityProcessingRequest) {
const entityRef = stringifyEntityRef(request.entity);
@@ -151,7 +157,6 @@ describe('DefaultRefreshService', () => {
};
},
},
- stitcher: new Stitcher(knex, defaultLogger),
createHash: () => createHash('sha1'),
pollingIntervalMs: 50,
});
diff --git a/plugins/catalog-backend/src/stitching/Stitcher.test.ts b/plugins/catalog-backend/src/stitching/DefaultStitcher.test.ts
similarity index 95%
rename from plugins/catalog-backend/src/stitching/Stitcher.test.ts
rename to plugins/catalog-backend/src/stitching/DefaultStitcher.test.ts
index 1efcb01a3c..5b33fc424c 100644
--- a/plugins/catalog-backend/src/stitching/Stitcher.test.ts
+++ b/plugins/catalog-backend/src/stitching/DefaultStitcher.test.ts
@@ -25,7 +25,7 @@ import {
DbRelationsRow,
DbSearchRow,
} from '../database/tables';
-import { Stitcher } from './Stitcher';
+import { DefaultStitcher } from './DefaultStitcher';
jest.setTimeout(60_000);
@@ -41,7 +41,11 @@ describe('Stitcher', () => {
const db = await databases.init(databaseId);
await applyDatabaseMigrations(db);
- const stitcher = new Stitcher(db, logger);
+ const stitcher = new DefaultStitcher({
+ knex: db,
+ logger,
+ strategy: { mode: 'immediate' },
+ });
let entities: DbFinalEntitiesRow[];
let entity: Entity;
@@ -85,7 +89,7 @@ describe('Stitcher', () => {
},
]);
- await stitcher.stitch(new Set(['k:ns/n']));
+ await stitcher.stitch({ entityRefs: ['k:ns/n'] });
entities = await db('final_entities');
@@ -165,7 +169,7 @@ describe('Stitcher', () => {
);
// Re-stitch without any changes
- await stitcher.stitch(new Set(['k:ns/n']));
+ await stitcher.stitch({ entityRefs: ['k:ns/n'] });
entities = await db('final_entities');
expect(entities.length).toBe(1);
@@ -183,7 +187,7 @@ describe('Stitcher', () => {
},
]);
- await stitcher.stitch(new Set(['k:ns/n']));
+ await stitcher.stitch({ entityRefs: ['k:ns/n'] });
entities = await db('final_entities');
diff --git a/plugins/catalog-backend/src/stitching/DefaultStitcher.ts b/plugins/catalog-backend/src/stitching/DefaultStitcher.ts
new file mode 100644
index 0000000000..095d80ad83
--- /dev/null
+++ b/plugins/catalog-backend/src/stitching/DefaultStitcher.ts
@@ -0,0 +1,124 @@
+/*
+ * Copyright 2021 The Backstage Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { Config } from '@backstage/config';
+import { Knex } from 'knex';
+import splitToChunks from 'lodash/chunk';
+import { DateTime } from 'luxon';
+import { Logger } from 'winston';
+import { performStitching } from '../database/operations/stitcher/performStitching';
+import { DbRefreshStateRow } from '../database/tables';
+import { progressTracker } from './progressTracker';
+import { Stitcher, StitchingStrategy } from './types';
+
+type StitchProgressTracker = ReturnType;
+
+/**
+ * Performs the act of stitching - to take all of the various outputs from the
+ * ingestion process, and stitching them together into the final entity JSON
+ * shape.
+ */
+export class DefaultStitcher implements Stitcher {
+ private readonly knex: Knex;
+ private readonly logger: Logger;
+ private readonly strategy: StitchingStrategy;
+ private readonly tracker: StitchProgressTracker;
+
+ static fromConfig(
+ _config: Config,
+ options: {
+ knex: Knex;
+ logger: Logger;
+ },
+ ): DefaultStitcher {
+ return new DefaultStitcher({
+ knex: options.knex,
+ logger: options.logger,
+ strategy: { mode: 'immediate' },
+ });
+ }
+
+ constructor(options: {
+ knex: Knex;
+ logger: Logger;
+ strategy: StitchingStrategy;
+ }) {
+ this.knex = options.knex;
+ this.logger = options.logger;
+ this.strategy = options.strategy;
+ this.tracker = progressTracker(options.knex, options.logger);
+ }
+
+ async stitch(options: {
+ entityRefs?: Iterable;
+ entityIds?: Iterable;
+ }) {
+ const { entityRefs, entityIds } = options;
+
+ if (entityRefs) {
+ for (const entityRef of entityRefs) {
+ await this.#stitchOne({ entityRef });
+ }
+ }
+
+ if (entityIds) {
+ const chunks = splitToChunks(
+ Array.isArray(entityIds) ? entityIds : [...entityIds],
+ 100,
+ );
+ for (const chunk of chunks) {
+ const rows = await this.knex('refresh_state')
+ .select('entity_ref')
+ .whereIn('entity_id', chunk);
+ for (const row of rows) {
+ await this.#stitchOne({ entityRef: row.entity_ref });
+ }
+ }
+ }
+ }
+
+ async start() {
+ // Only called immediately for now
+ }
+
+ async stop() {
+ // Only called immediately for now
+ }
+
+ async #stitchOne(options: {
+ entityRef: string;
+ stitchTicket?: string;
+ stitchRequestedAt?: DateTime;
+ }) {
+ const track = this.tracker.stitchStart({
+ entityRef: options.entityRef,
+ stitchRequestedAt: options.stitchRequestedAt,
+ });
+
+ try {
+ const result = await performStitching({
+ knex: this.knex,
+ logger: this.logger,
+ strategy: this.strategy,
+ entityRef: options.entityRef,
+ stitchTicket: options.stitchTicket,
+ });
+ track.markComplete(result);
+ } catch (error) {
+ track.markFailed(error);
+ }
+ }
+}
diff --git a/plugins/catalog-backend/src/stitching/Stitcher.ts b/plugins/catalog-backend/src/stitching/Stitcher.ts
deleted file mode 100644
index 38d0fd263f..0000000000
--- a/plugins/catalog-backend/src/stitching/Stitcher.ts
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
- * Copyright 2021 The Backstage Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { ENTITY_STATUS_CATALOG_PROCESSING_TYPE } from '@backstage/catalog-client';
-import { AlphaEntity, EntityStatusItem } from '@backstage/catalog-model/alpha';
-import {
- ANNOTATION_EDIT_URL,
- ANNOTATION_VIEW_URL,
- EntityRelation,
-} from '@backstage/catalog-model';
-import { SerializedError, stringifyError } from '@backstage/errors';
-import { Knex } from 'knex';
-import { v4 as uuid } from 'uuid';
-import { Logger } from 'winston';
-import {
- DbFinalEntitiesRow,
- DbRefreshStateRow,
- DbSearchRow,
-} from '../database/tables';
-import { buildEntitySearch } from './buildEntitySearch';
-import { BATCH_SIZE, generateStableHash } from './util';
-
-// See https://github.com/facebook/react/blob/f0cf832e1d0c8544c36aa8b310960885a11a847c/packages/react-dom-bindings/src/shared/sanitizeURL.js
-const scriptProtocolPattern =
- // eslint-disable-next-line no-control-regex
- /^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*\:/i;
-
-/**
- * Performs the act of stitching - to take all of the various outputs from the
- * ingestion process, and stitching them together into the final entity JSON
- * shape.
- */
-export class Stitcher {
- constructor(
- private readonly database: Knex,
- private readonly logger: Logger,
- ) {}
-
- async stitch(entityRefs: Set) {
- for (const entityRef of entityRefs) {
- try {
- await this.stitchOne(entityRef);
- } catch (error) {
- this.logger.error(
- `Failed to stitch ${entityRef}, ${stringifyError(error)}`,
- );
- }
- }
- }
-
- private async stitchOne(entityRef: string): Promise {
- const entityResult = await this.database('refresh_state')
- .where({ entity_ref: entityRef })
- .limit(1)
- .select('entity_id');
- if (!entityResult.length) {
- // Entity does no exist in refresh state table, no stitching required.
- return;
- }
-
- // Insert stitching ticket that will be compared before inserting the final entity.
- const ticket = uuid();
- await this.database('final_entities')
- .insert({
- entity_id: entityResult[0].entity_id,
- hash: '',
- stitch_ticket: ticket,
- })
- .onConflict('entity_id')
- .merge(['stitch_ticket']);
-
- // Selecting from refresh_state and final_entities should yield exactly
- // one row (except in abnormal cases where the stitch was invoked for
- // something that didn't exist at all, in which case it's zero rows).
- // The join with the temporary incoming_references still gives one row.
- const [processedResult, relationsResult] = await Promise.all([
- this.database
- .with('incoming_references', function incomingReferences(builder) {
- return builder
- .from('refresh_state_references')
- .where({ target_entity_ref: entityRef })
- .count({ count: '*' });
- })
- .select({
- entityId: 'refresh_state.entity_id',
- processedEntity: 'refresh_state.processed_entity',
- errors: 'refresh_state.errors',
- incomingReferenceCount: 'incoming_references.count',
- previousHash: 'final_entities.hash',
- })
- .from('refresh_state')
- .where({ 'refresh_state.entity_ref': entityRef })
- .crossJoin(this.database.raw('incoming_references'))
- .leftOuterJoin('final_entities', {
- 'final_entities.entity_id': 'refresh_state.entity_id',
- }),
- this.database
- .distinct({
- relationType: 'type',
- relationTarget: 'target_entity_ref',
- })
- .from('relations')
- .where({ source_entity_ref: entityRef })
- .orderBy('relationType', 'asc')
- .orderBy('relationTarget', 'asc'),
- ]);
-
- // If there were no rows returned, it would mean that there was no
- // matching row even in the refresh_state. This can happen for example
- // if we emit a relation to something that hasn't been ingested yet.
- // It's safe to ignore this stitch attempt in that case.
- if (!processedResult.length) {
- this.logger.error(
- `Unable to stitch ${entityRef}, item does not exist in refresh state table`,
- );
- return;
- }
-
- const {
- entityId,
- processedEntity,
- errors,
- incomingReferenceCount,
- previousHash,
- } = processedResult[0];
-
- // If there was no processed entity in place, the target hasn't been
- // through the processing steps yet. It's safe to ignore this stitch
- // attempt in that case, since another stitch will be triggered when
- // that processing has finished.
- if (!processedEntity) {
- this.logger.debug(
- `Unable to stitch ${entityRef}, the entity has not yet been processed`,
- );
- return;
- }
-
- // Grab the processed entity and stitch all of the relevant data into
- // it
- const entity = JSON.parse(processedEntity) as AlphaEntity;
- const isOrphan = Number(incomingReferenceCount) === 0;
- let statusItems: EntityStatusItem[] = [];
-
- if (isOrphan) {
- this.logger.debug(`${entityRef} is an orphan`);
- entity.metadata.annotations = {
- ...entity.metadata.annotations,
- ['backstage.io/orphan']: 'true',
- };
- }
- if (errors) {
- const parsedErrors = JSON.parse(errors) as SerializedError[];
- if (Array.isArray(parsedErrors) && parsedErrors.length) {
- statusItems = parsedErrors.map(e => ({
- type: ENTITY_STATUS_CATALOG_PROCESSING_TYPE,
- level: 'error',
- message: `${e.name}: ${e.message}`,
- error: e,
- }));
- }
- }
- // We opt to do this check here as we otherwise can't guarantee that it will be run after all processors
- for (const annotation of [ANNOTATION_VIEW_URL, ANNOTATION_EDIT_URL]) {
- const value = entity.metadata.annotations?.[annotation];
- if (typeof value === 'string' && scriptProtocolPattern.test(value)) {
- entity.metadata.annotations![annotation] =
- 'https://backstage.io/annotation-rejected-for-security-reasons';
- }
- }
-
- // TODO: entityRef is lower case and should be uppercase in the final
- // result
- entity.relations = relationsResult
- .filter(row => row.relationType /* exclude null row, if relevant */)
- .map(row => ({
- type: row.relationType!,
- targetRef: row.relationTarget!,
- }));
- if (statusItems.length) {
- entity.status = {
- ...entity.status,
- items: [...(entity.status?.items ?? []), ...statusItems],
- };
- }
-
- // If the output entity was actually not changed, just abort
- const hash = generateStableHash(entity);
- if (hash === previousHash) {
- this.logger.debug(`Skipped stitching of ${entityRef}, no changes`);
- return;
- }
-
- entity.metadata.uid = entityId;
- if (!entity.metadata.etag) {
- // If the original data source did not have its own etag handling,
- // use the hash as a good-quality etag
- entity.metadata.etag = hash;
- }
-
- // This may throw if the entity is invalid, so we call it before
- // the final_entities write, even though we may end up not needing
- // to write the search index.
- const searchEntries = buildEntitySearch(entityId, entity);
-
- const amountOfRowsChanged = await this.database(
- 'final_entities',
- )
- .update({
- final_entity: JSON.stringify(entity),
- hash,
- last_updated_at: this.database.fn.now(),
- })
- .where('entity_id', entityId)
- .where('stitch_ticket', ticket)
- .onConflict('entity_id')
- .merge(['final_entity', 'hash', 'last_updated_at']);
-
- if (amountOfRowsChanged === 0) {
- this.logger.debug(
- `Entity ${entityRef} is already processed, skipping write.`,
- );
- return;
- }
-
- // TODO(freben): Search will probably need a similar safeguard against
- // race conditions like the final_entities ticket handling above.
- // Otherwise, it can be the case that:
- // A writes the entity ->
- // B writes the entity ->
- // B writes search ->
- // A writes search
- await this.database('search')
- .where({ entity_id: entityId })
- .delete();
- await this.database.batchInsert('search', searchEntries, BATCH_SIZE);
- }
-}
diff --git a/plugins/catalog-backend/src/stitching/progressTracker.ts b/plugins/catalog-backend/src/stitching/progressTracker.ts
new file mode 100644
index 0000000000..e8e08dbc54
--- /dev/null
+++ b/plugins/catalog-backend/src/stitching/progressTracker.ts
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2023 The Backstage Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { stringifyError } from '@backstage/errors';
+import { metrics } from '@opentelemetry/api';
+import { Knex } from 'knex';
+import { DateTime } from 'luxon';
+import { Logger } from 'winston';
+import { createCounterMetric } from '../util/metrics';
+
+// Helps wrap the timing and logging behaviors
+export function progressTracker(_knex: Knex, logger: Logger) {
+ // prom-client metrics are deprecated in favour of OpenTelemetry metrics.
+ const promStitchedEntities = createCounterMetric({
+ name: 'catalog_stitched_entities_count',
+ help: 'Amount of entities stitched. DEPRECATED, use OpenTelemetry metrics instead',
+ });
+
+ const meter = metrics.getMeter('default');
+
+ const stitchedEntities = meter.createCounter(
+ 'catalog.stitched.entities.count',
+ {
+ description: 'Amount of entities stitched',
+ },
+ );
+
+ const stitchingDuration = meter.createHistogram(
+ 'catalog.stitching.duration',
+ {
+ description: 'Time spent executing the full stitching flow',
+ unit: 'seconds',
+ },
+ );
+
+ function stitchStart(item: {
+ entityRef: string;
+ stitchRequestedAt?: DateTime;
+ }) {
+ logger.debug(`Stitching ${item.entityRef}`);
+
+ const startTime = process.hrtime();
+
+ function endTime() {
+ const delta = process.hrtime(startTime);
+ return delta[0] + delta[1] / 1e9;
+ }
+
+ function markComplete(result: string) {
+ promStitchedEntities.inc(1);
+ stitchedEntities.add(1, { result });
+ stitchingDuration.record(endTime(), { result });
+ }
+
+ function markFailed(error: Error) {
+ promStitchedEntities.inc(1);
+ stitchedEntities.add(1, { result: 'error' });
+ stitchingDuration.record(endTime(), { result: 'error' });
+ logger.error(
+ `Failed to stitch ${item.entityRef}, ${stringifyError(error)}`,
+ );
+ }
+
+ return {
+ markComplete,
+ markFailed,
+ };
+ }
+
+ return { stitchStart };
+}
diff --git a/plugins/catalog-backend/src/stitching/types.ts b/plugins/catalog-backend/src/stitching/types.ts
new file mode 100644
index 0000000000..5f32a85b1f
--- /dev/null
+++ b/plugins/catalog-backend/src/stitching/types.ts
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2023 The Backstage Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Performs the act of stitching - to take all of the various outputs from the
+ * ingestion process, and stitching them together into the final entity JSON
+ * shape.
+ */
+export interface Stitcher {
+ stitch(options: {
+ entityRefs?: Iterable;
+ entityIds?: Iterable;
+ }): Promise;
+}
+
+/**
+ * The strategies supported by the stitching process, in terms of when to
+ * perform stitching.
+ *
+ * @remarks
+ *
+ * In immediate mode, stitching happens "in-band" (blocking) immediately when
+ * each processing task finishes.
+ */
+export type StitchingStrategy = {
+ mode: 'immediate';
+};
diff --git a/plugins/catalog-backend/src/tests/integration.test.ts b/plugins/catalog-backend/src/tests/integration.test.ts
index e7f983f51f..8aeb95f49b 100644
--- a/plugins/catalog-backend/src/tests/integration.test.ts
+++ b/plugins/catalog-backend/src/tests/integration.test.ts
@@ -53,7 +53,7 @@ import { CatalogProcessingEngine } from '../processing/types';
import { DefaultEntitiesCatalog } from '../service/DefaultEntitiesCatalog';
import { DefaultRefreshService } from '../service/DefaultRefreshService';
import { RefreshOptions, RefreshService } from '../service/types';
-import { Stitcher } from '../stitching/Stitcher';
+import { DefaultStitcher } from '../stitching/DefaultStitcher';
const voidLogger = getVoidLogger();
@@ -268,7 +268,7 @@ class TestHarness {
policy: EntityPolicies.allOf([]),
legacySingleProcessorValidation: false,
});
- const stitcher = new Stitcher(db, logger);
+ const stitcher = DefaultStitcher.fromConfig(config, { knex: db, logger });
const catalog = new DefaultEntitiesCatalog({
database: db,
logger,
@@ -282,6 +282,7 @@ class TestHarness {
config: new ConfigReader({}),
logger,
processingDatabase,
+ knex: db,
orchestrator,
stitcher,
createHash: () => createHash('sha1'),
@@ -300,7 +301,16 @@ class TestHarness {
return new TestHarness(
catalog,
- engine,
+ {
+ async start() {
+ await engine.start();
+ await stitcher.start();
+ },
+ async stop() {
+ await engine.stop();
+ await stitcher.stop();
+ },
+ },
refresh,
provider,
proxyProgressTracker,
diff --git a/plugins/catalog-backend/src/tests/performance/stitchingPerformance.test.ts b/plugins/catalog-backend/src/tests/performance/stitchingPerformance.test.ts
index e60c0a33d6..c1a869f9ad 100644
--- a/plugins/catalog-backend/src/tests/performance/stitchingPerformance.test.ts
+++ b/plugins/catalog-backend/src/tests/performance/stitchingPerformance.test.ts
@@ -181,6 +181,7 @@ describePerformanceTest('stitchingPerformance', () => {
const backend = await startTestBackend({
features: [
import('@backstage/plugin-catalog-backend/alpha'),
+ staticDatabase(knex),
createBackendModule({
moduleId: 'syntheticLoadEntities',
pluginId: 'catalog',
@@ -200,7 +201,6 @@ describePerformanceTest('stitchingPerformance', () => {
});
},
}),
- staticDatabase(knex),
],
});
diff --git a/plugins/catalog-customized/CHANGELOG.md b/plugins/catalog-customized/CHANGELOG.md
deleted file mode 100644
index ac858f652d..0000000000
--- a/plugins/catalog-customized/CHANGELOG.md
+++ /dev/null
@@ -1,457 +0,0 @@
-# @internal/plugin-catalog-customized
-
-## 0.0.14
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog@1.13.0
- - @backstage/plugin-catalog-react@1.8.4
-
-## 0.0.14-next.3
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog@1.13.0-next.3
- - @backstage/plugin-catalog-react@1.8.4-next.3
-
-## 0.0.14-next.2
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog@1.13.0-next.2
- - @backstage/plugin-catalog-react@1.8.4-next.2
-
-## 0.0.14-next.1
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog-react@1.8.4-next.1
- - @backstage/plugin-catalog@1.12.5-next.1
-
-## 0.0.14-next.0
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog@1.12.4-next.0
- - @backstage/plugin-catalog-react@1.8.3-next.0
-
-## 0.0.13
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog@1.12.1
- - @backstage/plugin-catalog-react@1.8.1
-
-## 0.0.13-next.2
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog-react@1.8.1-next.1
- - @backstage/plugin-catalog@1.12.1-next.2
-
-## 0.0.13-next.1
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog@1.12.1-next.1
- - @backstage/plugin-catalog-react@1.8.1-next.0
-
-## 0.0.13-next.0
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog@1.12.1-next.0
- - @backstage/plugin-catalog-react@1.8.1-next.0
-
-## 0.0.12
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog-react@1.8.0
- - @backstage/plugin-catalog@1.12.0
-
-## 0.0.12-next.2
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog-react@1.8.0-next.2
- - @backstage/plugin-catalog@1.12.0-next.2
-
-## 0.0.12-next.1
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog@1.11.3-next.1
- - @backstage/plugin-catalog-react@1.7.1-next.1
-
-## 0.0.12-next.0
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog@1.11.3-next.0
- - @backstage/plugin-catalog-react@1.7.1-next.0
-
-## 0.0.11
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog@1.11.2
- - @backstage/plugin-catalog-react@1.7.0
-
-## 0.0.11-next.3
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog@1.11.2-next.3
- - @backstage/plugin-catalog-react@1.7.0-next.3
-
-## 0.0.11-next.2
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog-react@1.7.0-next.2
- - @backstage/plugin-catalog@1.11.1-next.2
-
-## 0.0.11-next.1
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog@1.11.1-next.1
- - @backstage/plugin-catalog-react@1.7.0-next.1
-
-## 0.0.11-next.0
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog-react@1.7.0-next.0
- - @backstage/plugin-catalog@1.11.1-next.0
-
-## 0.0.10
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog-react@1.6.0
- - @backstage/plugin-catalog@1.11.0
-
-## 0.0.10-next.2
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog@1.11.0-next.2
- - @backstage/plugin-catalog-react@1.6.0-next.2
-
-## 0.0.10-next.1
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog@1.11.0-next.1
- - @backstage/plugin-catalog-react@1.6.0-next.1
-
-## 0.0.10-next.0
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog-react@1.6.0-next.0
- - @backstage/plugin-catalog@1.11.0-next.0
-
-## 0.0.9
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog-react@1.5.0
- - @backstage/plugin-catalog@1.10.0
-
-## 0.0.9-next.3
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog-react@1.5.0-next.3
- - @backstage/plugin-catalog@1.10.0-next.3
-
-## 0.0.9-next.2
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog-react@1.4.1-next.2
- - @backstage/plugin-catalog@1.10.0-next.2
-
-## 0.0.9-next.1
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog-react@1.4.1-next.1
- - @backstage/plugin-catalog@1.10.0-next.1
-
-## 0.0.9-next.0
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog@1.10.0-next.0
- - @backstage/plugin-catalog-react@1.4.1-next.0
-
-## 0.0.8
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog@1.9.0
- - @backstage/plugin-catalog-react@1.4.0
-
-## 0.0.8-next.2
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog-react@1.4.0-next.2
- - @backstage/plugin-catalog@1.9.0-next.2
-
-## 0.0.8-next.1
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog@1.9.0-next.1
- - @backstage/plugin-catalog-react@1.4.0-next.1
-
-## 0.0.8-next.0
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog-react@1.4.0-next.0
- - @backstage/plugin-catalog@1.9.0-next.0
-
-## 0.0.7
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog@1.8.0
- - @backstage/plugin-catalog-react@1.3.0
-
-## 0.0.7-next.2
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog@1.8.0-next.2
- - @backstage/plugin-catalog-react@1.3.0-next.2
-
-## 0.0.7-next.1
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog@1.8.0-next.1
- - @backstage/plugin-catalog-react@1.3.0-next.1
-
-## 0.0.7-next.0
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog-react@1.3.0-next.0
- - @backstage/plugin-catalog@1.7.3-next.0
-
-## 0.0.6
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog-react@1.2.4
- - @backstage/plugin-catalog@1.7.2
-
-## 0.0.6-next.2
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog-react@1.2.4-next.2
- - @backstage/plugin-catalog@1.7.2-next.2
-
-## 0.0.6-next.1
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog@1.7.2-next.1
- - @backstage/plugin-catalog-react@1.2.4-next.1
-
-## 0.0.6-next.0
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog-react@1.2.4-next.0
- - @backstage/plugin-catalog@1.7.2-next.0
-
-## 0.0.6
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog@1.7.1
- - @backstage/plugin-catalog-react@1.2.3
-
-## 0.0.5
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog@1.7.0
- - @backstage/plugin-catalog-react@1.2.2
-
-## 0.0.5-next.4
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog@1.7.0-next.4
- - @backstage/plugin-catalog-react@1.2.2-next.4
-
-## 0.0.5-next.3
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog@1.7.0-next.3
- - @backstage/plugin-catalog-react@1.2.2-next.3
-
-## 0.0.5-next.2
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog@1.7.0-next.2
- - @backstage/plugin-catalog-react@1.2.2-next.2
-
-## 0.0.5-next.1
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog@1.6.2-next.1
- - @backstage/plugin-catalog-react@1.2.2-next.1
-
-## 0.0.5-next.0
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog-react@1.2.2-next.0
- - @backstage/plugin-catalog@1.6.2-next.0
-
-## 0.0.4
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog-react@1.2.1
- - @backstage/plugin-catalog@1.6.1
-
-## 0.0.4-next.1
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog@1.6.1-next.1
- - @backstage/plugin-catalog-react@1.2.1-next.1
-
-## 0.0.4-next.0
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog-react@1.2.1-next.0
- - @backstage/plugin-catalog@1.6.1-next.0
-
-## 0.0.3
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog-react@1.2.0
- - @backstage/plugin-catalog@1.6.0
-
-## 0.0.3-next.2
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog@1.6.0-next.2
- - @backstage/plugin-catalog-react@1.2.0-next.2
-
-## 0.0.3-next.1
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog-react@1.2.0-next.1
- - @backstage/plugin-catalog@1.6.0-next.1
-
-## 0.0.3-next.0
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog@1.5.2-next.0
- - @backstage/plugin-catalog-react@1.1.5-next.0
-
-## 0.0.2
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog-react@1.1.4
- - @backstage/plugin-catalog@1.5.1
-
-## 0.0.2-next.0
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog-react@1.1.4-next.0
- - @backstage/plugin-catalog@1.5.1-next.0
-
-## 0.0.1
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog@1.5.0
- - @backstage/plugin-catalog-react@1.1.3
-
-## 0.0.1-next.0
-
-### Patch Changes
-
-- Updated dependencies
- - @backstage/plugin-catalog@1.5.0-next.0
- - @backstage/plugin-catalog-react@1.1.3-next.0
diff --git a/plugins/catalog-customized/README.md b/plugins/catalog-customized/README.md
deleted file mode 100644
index b7323d7430..0000000000
--- a/plugins/catalog-customized/README.md
+++ /dev/null
@@ -1,57 +0,0 @@
-# Backstage Catalog Frontend
-
-This is the React frontend to customize Backstage [software
-catalog](http://backstage.io/docs/features/software-catalog/).
-This package supplies the example how it can be achieved.
-
-## Installation
-
-This `@internal/plugin-catalog-customized` package comes installed by default in example application of
-Backstage application.
-
-To check if you already have the package, look under
-`packages/app/package.json`, in the `dependencies` block, for
-`@internal/plugin-catalog-customized`. The instructions below walk through restoring the
-plugin, if you previously removed it.
-
-### Install the package
-
-```bash
-# From your Backstage root directory
-yarn add --cwd packages/app @internal/plugin-catalog-customized
-```
-
-### Add the plugin to your `packages/app`
-
-Add the import to a file where is your plugin catalog is defined:
-
-```diff
-// packages/app/src/App.tsx
-
-import from '@internal/plugin-catalog-customized';
-
-...
-
-import {
- CatalogIndexPage,
- CatalogEntityPage,
-} from '@backstage/plugin-catalog';
-
-...
-```
-
-## Development
-
-This frontend plugin can be started in a standalone mode from directly in this
-package with `yarn start`. However, it will have limited functionality and that
-process is most convenient when developing the catalog frontend plugin itself.
-
-To evaluate the catalog and have a greater amount of functionality available,
-run the entire Backstage example application from the root folder:
-
-```bash
-yarn dev
-```
-
-This will launch both frontend and backend in the same window, populated with
-some example entities.
diff --git a/plugins/catalog-customized/api-report.md b/plugins/catalog-customized/api-report.md
deleted file mode 100644
index 5cf6eefde1..0000000000
--- a/plugins/catalog-customized/api-report.md
+++ /dev/null
@@ -1,9 +0,0 @@
-## API Report File for "@internal/plugin-catalog-customized"
-
-> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).
-
-```ts
-export * from '@backstage/plugin-catalog';
-
-// (No @packageDocumentation comment for this package)
-```
diff --git a/plugins/catalog-customized/catalog-info.yaml b/plugins/catalog-customized/catalog-info.yaml
deleted file mode 100644
index 1a6d0e0a00..0000000000
--- a/plugins/catalog-customized/catalog-info.yaml
+++ /dev/null
@@ -1,12 +0,0 @@
-apiVersion: backstage.io/v1alpha1
-kind: Component
-metadata:
- name: internal-plugin-catalog-customized
- title: '@internal/plugin-catalog-customized'
- description: >-
- The internal Backstage Customizable plugin for browsing the Backstage
- catalog
-spec:
- lifecycle: experimental
- type: backstage-frontend-plugin
- owner: catalog-maintainers
diff --git a/plugins/catalog-customized/package.json b/plugins/catalog-customized/package.json
deleted file mode 100644
index 4c33911549..0000000000
--- a/plugins/catalog-customized/package.json
+++ /dev/null
@@ -1,51 +0,0 @@
-{
- "name": "@internal/plugin-catalog-customized",
- "description": "The internal Backstage Customizable plugin for browsing the Backstage catalog",
- "version": "0.0.14",
- "main": "src/index.ts",
- "types": "src/index.ts",
- "license": "Apache-2.0",
- "private": true,
- "publishConfig": {
- "access": "public",
- "main": "dist/index.esm.js",
- "types": "dist/index.d.ts"
- },
- "backstage": {
- "role": "frontend-plugin"
- },
- "homepage": "https://backstage.io",
- "repository": {
- "type": "git",
- "url": "https://github.com/backstage/backstage",
- "directory": "plugins/catalog-customized"
- },
- "keywords": [
- "backstage"
- ],
- "sideEffects": false,
- "scripts": {
- "build": "backstage-cli package build",
- "start": "backstage-cli package start",
- "lint": "backstage-cli package lint",
- "test": "backstage-cli package test",
- "prepack": "backstage-cli package prepack",
- "postpack": "backstage-cli package postpack",
- "clean": "backstage-cli package clean"
- },
- "dependencies": {
- "@backstage/plugin-catalog": "workspace:^",
- "@backstage/plugin-catalog-react": "workspace:^"
- },
- "devDependencies": {
- "@types/react": "^16.13.1 || ^17.0.0"
- },
- "peerDependencies": {
- "react": "^16.13.1 || ^17.0.0",
- "react-dom": "^16.13.1 || ^17.0.0",
- "react-router-dom": "6.0.0-beta.0 || ^6.3.0"
- },
- "files": [
- "dist"
- ]
-}
diff --git a/plugins/catalog-graph/CHANGELOG.md b/plugins/catalog-graph/CHANGELOG.md
index c5032a1cf4..456c1b13c9 100644
--- a/plugins/catalog-graph/CHANGELOG.md
+++ b/plugins/catalog-graph/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/plugin-catalog-graph
+## 0.2.37-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+ - @backstage/types@1.1.1
+
## 0.2.36
### Patch Changes
diff --git a/plugins/catalog-graph/api-report.md b/plugins/catalog-graph/api-report.md
index ce56245c49..98a68d8aa2 100644
--- a/plugins/catalog-graph/api-report.md
+++ b/plugins/catalog-graph/api-report.md
@@ -53,8 +53,7 @@ export const catalogGraphPlugin: BackstagePlugin<
},
true
>;
- },
- {}
+ }
>;
// @public
diff --git a/plugins/catalog-graph/package.json b/plugins/catalog-graph/package.json
index 236103471f..6de95b8ec6 100644
--- a/plugins/catalog-graph/package.json
+++ b/plugins/catalog-graph/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-graph",
- "version": "0.2.36",
+ "version": "0.2.37-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/catalog-import/CHANGELOG.md b/plugins/catalog-import/CHANGELOG.md
index 84efe07b7f..1c8cf69ead 100644
--- a/plugins/catalog-import/CHANGELOG.md
+++ b/plugins/catalog-import/CHANGELOG.md
@@ -1,5 +1,21 @@
# @backstage/plugin-catalog-import
+## 0.10.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/integration-react@1.1.20-next.0
+ - @backstage/config@1.1.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/plugin-catalog-common@1.0.16
+
## 0.10.0
### Minor Changes
diff --git a/plugins/catalog-import/api-report.md b/plugins/catalog-import/api-report.md
index 7397bfad1d..a513cfe87a 100644
--- a/plugins/catalog-import/api-report.md
+++ b/plugins/catalog-import/api-report.md
@@ -134,7 +134,6 @@ const catalogImportPlugin: BackstagePlugin<
{
importPage: RouteRef;
},
- {},
{}
>;
export { catalogImportPlugin };
diff --git a/plugins/catalog-import/package.json b/plugins/catalog-import/package.json
index 5d68888beb..b2661288bd 100644
--- a/plugins/catalog-import/package.json
+++ b/plugins/catalog-import/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-catalog-import",
"description": "A Backstage plugin the helps you import entities into your catalog",
- "version": "0.10.0",
+ "version": "0.10.1-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/catalog-node/CHANGELOG.md b/plugins/catalog-node/CHANGELOG.md
index 1d3b4d54da..4ab1791209 100644
--- a/plugins/catalog-node/CHANGELOG.md
+++ b/plugins/catalog-node/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-catalog-node
+## 1.4.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.16
+
## 1.4.4
### Patch Changes
diff --git a/plugins/catalog-node/package.json b/plugins/catalog-node/package.json
index ca2de8542d..6e11ee0820 100644
--- a/plugins/catalog-node/package.json
+++ b/plugins/catalog-node/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-catalog-node",
"description": "The plugin-catalog-node module for @backstage/plugin-catalog-backend",
- "version": "1.4.4",
+ "version": "1.4.6-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/catalog-react/CHANGELOG.md b/plugins/catalog-react/CHANGELOG.md
index f8ddbe2a0a..8b1c4bf90e 100644
--- a/plugins/catalog-react/CHANGELOG.md
+++ b/plugins/catalog-react/CHANGELOG.md
@@ -1,5 +1,24 @@
# @backstage/plugin-catalog-react
+## 1.8.5-next.0
+
+### Patch Changes
+
+- a402e1dfb9: Fixed an issue causing `EntityPage` to show an error for entities containing special characters
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/plugin-permission-react@0.4.16-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.5
+ - @backstage/plugin-catalog-common@1.0.16
+ - @backstage/plugin-permission-common@0.7.8
+
## 1.8.4
### Patch Changes
diff --git a/plugins/catalog-react/package.json b/plugins/catalog-react/package.json
index 277a37e1a2..c65be47791 100644
--- a/plugins/catalog-react/package.json
+++ b/plugins/catalog-react/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-catalog-react",
"description": "A frontend library that helps other Backstage plugins interact with the catalog",
- "version": "1.8.4",
+ "version": "1.8.5-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/catalog-unprocessed-entities/CHANGELOG.md b/plugins/catalog-unprocessed-entities/CHANGELOG.md
index f797b6b5e1..8e384e95cd 100644
--- a/plugins/catalog-unprocessed-entities/CHANGELOG.md
+++ b/plugins/catalog-unprocessed-entities/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-catalog-unprocessed-entities
+## 0.1.4-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+
## 0.1.3
### Patch Changes
diff --git a/plugins/catalog-unprocessed-entities/api-report.md b/plugins/catalog-unprocessed-entities/api-report.md
index 3ded42785a..cc4d6bba88 100644
--- a/plugins/catalog-unprocessed-entities/api-report.md
+++ b/plugins/catalog-unprocessed-entities/api-report.md
@@ -34,7 +34,6 @@ export const catalogUnprocessedEntitiesPlugin: BackstagePlugin<
{
root: RouteRef;
},
- {},
{}
>;
diff --git a/plugins/catalog-unprocessed-entities/package.json b/plugins/catalog-unprocessed-entities/package.json
index ce24df8001..0ae64d4feb 100644
--- a/plugins/catalog-unprocessed-entities/package.json
+++ b/plugins/catalog-unprocessed-entities/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-unprocessed-entities",
- "version": "0.1.3",
+ "version": "0.1.4-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/catalog/CHANGELOG.md b/plugins/catalog/CHANGELOG.md
index a26c19cfd6..a8fd34773f 100644
--- a/plugins/catalog/CHANGELOG.md
+++ b/plugins/catalog/CHANGELOG.md
@@ -1,5 +1,45 @@
# @backstage/plugin-catalog
+## 1.14.0-next.0
+
+### Minor Changes
+
+- 28f1ab2e1a: The catalog plugin no longer implements the experimental reconfiguration API. The create button title can now instead be configured using the new experimental internationalization API, via the `catalogTranslationRef` exported at `/alpha`. For example:
+
+ ```ts
+ import { catalogTranslationRef } from '@backstage/plugin-catalog/alpha';
+
+ const app = createApp({
+ __experimentalTranslations: {
+ resources: [
+ createTranslationMessages({
+ ref: catalogTranslationRef,
+ catalog_page_create_button_title: 'Create Software',
+ }),
+ ],
+ },
+ });
+ ```
+
+- f3561a2935: include owner chip in catalog search result item
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/integration-react@1.1.20-next.0
+ - @backstage/plugin-search-react@1.7.1-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.16
+ - @backstage/plugin-scaffolder-common@1.4.1
+ - @backstage/plugin-search-common@1.2.6
+
## 1.13.0
### Minor Changes
diff --git a/plugins/catalog/alpha-api-report.md b/plugins/catalog/alpha-api-report.md
new file mode 100644
index 0000000000..27de408f86
--- /dev/null
+++ b/plugins/catalog/alpha-api-report.md
@@ -0,0 +1,18 @@
+## API Report File for "@backstage/plugin-catalog"
+
+> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).
+
+```ts
+import { TranslationRef } from '@backstage/core-plugin-api/alpha';
+
+// @alpha (undocumented)
+export const catalogTranslationRef: TranslationRef<
+ 'catalog',
+ {
+ readonly catalog_page_title: '{{orgName}} Catalog';
+ readonly catalog_page_create_button_title: 'Create';
+ }
+>;
+
+// (No @packageDocumentation comment for this package)
+```
diff --git a/plugins/catalog/api-report.md b/plugins/catalog/api-report.md
index c8956dcbe8..8173c395ba 100644
--- a/plugins/catalog/api-report.md
+++ b/plugins/catalog/api-report.md
@@ -117,8 +117,7 @@ export const catalogPlugin: BackstagePlugin<
},
true
>;
- },
- CatalogInputPluginOptions
+ }
>;
// @public (undocumented)
diff --git a/plugins/catalog/package.json b/plugins/catalog/package.json
index 10a9eaf35e..412c7d0716 100644
--- a/plugins/catalog/package.json
+++ b/plugins/catalog/package.json
@@ -1,14 +1,27 @@
{
"name": "@backstage/plugin-catalog",
"description": "The Backstage plugin for browsing the Backstage catalog",
- "version": "1.13.0",
+ "version": "1.14.0-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
"publishConfig": {
- "access": "public",
- "main": "dist/index.esm.js",
- "types": "dist/index.d.ts"
+ "access": "public"
+ },
+ "exports": {
+ ".": "./src/index.ts",
+ "./alpha": "./src/alpha.ts",
+ "./package.json": "./package.json"
+ },
+ "typesVersions": {
+ "*": {
+ "alpha": [
+ "src/alpha.ts"
+ ],
+ "package.json": [
+ "package.json"
+ ]
+ }
},
"backstage": {
"role": "frontend-plugin"
diff --git a/plugins/catalog/src/alpha.ts b/plugins/catalog/src/alpha.ts
new file mode 100644
index 0000000000..3509c1fb7f
--- /dev/null
+++ b/plugins/catalog/src/alpha.ts
@@ -0,0 +1,17 @@
+/*
+ * Copyright 2023 The Backstage Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+export * from './translation';
diff --git a/plugins/catalog/src/components/CatalogPage/DefaultCatalogPage.test.tsx b/plugins/catalog/src/components/CatalogPage/DefaultCatalogPage.test.tsx
index f31d3baf39..b7d3ca3ed8 100644
--- a/plugins/catalog/src/components/CatalogPage/DefaultCatalogPage.test.tsx
+++ b/plugins/catalog/src/components/CatalogPage/DefaultCatalogPage.test.tsx
@@ -29,7 +29,6 @@ import {
MockStarredEntitiesApi,
starredEntitiesApiRef,
} from '@backstage/plugin-catalog-react';
-import { MockPluginProvider } from '@backstage/test-utils/alpha';
import {
mockBreakpoint,
MockStorageApi,
@@ -133,7 +132,7 @@ describe('DefaultCatalogPage', () => {
[starredEntitiesApiRef, new MockStarredEntitiesApi()],
]}
>
- {children}
+ {children}
,
{
mountedRoutes: {
diff --git a/plugins/catalog/src/components/CatalogPage/DefaultCatalogPage.tsx b/plugins/catalog/src/components/CatalogPage/DefaultCatalogPage.tsx
index 04f39ee66c..fb9b282d57 100644
--- a/plugins/catalog/src/components/CatalogPage/DefaultCatalogPage.tsx
+++ b/plugins/catalog/src/components/CatalogPage/DefaultCatalogPage.tsx
@@ -41,7 +41,8 @@ import {
import React, { ReactNode } from 'react';
import { createComponentRouteRef } from '../../routes';
import { CatalogTable, CatalogTableRow } from '../CatalogTable';
-import { useCatalogPluginOptions } from '../../options';
+import { catalogTranslationRef } from '../../translation';
+import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
/**
* Props for root catalog pages.
@@ -71,15 +72,14 @@ export function DefaultCatalogPage(props: DefaultCatalogPageProps) {
const orgName =
useApi(configApiRef).getOptionalString('organization.name') ?? 'Backstage';
const createComponentLink = useRouteRef(createComponentRouteRef);
-
- const { createButtonTitle } = useCatalogPluginOptions();
+ const { t } = useTranslationRef(catalogTranslationRef);
return (
-
+
All your software catalog entities
diff --git a/plugins/catalog/src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.tsx b/plugins/catalog/src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.tsx
index 50caf4ff8a..06906aecc1 100644
--- a/plugins/catalog/src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.tsx
+++ b/plugins/catalog/src/components/CatalogSearchResultListItem/CatalogSearchResultListItem.tsx
@@ -110,6 +110,9 @@ export function CatalogSearchResultListItem(
{result.lifecycle && (
)}
+ {result.owner && (
+
+ )}
diff --git a/plugins/catalog/src/plugin.ts b/plugins/catalog/src/plugin.ts
index 711f52767a..3410984ec3 100644
--- a/plugins/catalog/src/plugin.ts
+++ b/plugins/catalog/src/plugin.ts
@@ -52,7 +52,6 @@ import { HasSystemsCardProps } from './components/HasSystemsCard';
import { RelatedEntitiesCardProps } from './components/RelatedEntitiesCard';
import { CatalogSearchResultListItemProps } from './components/CatalogSearchResultListItem';
import { rootRouteRef } from './routes';
-import { CatalogInputPluginOptions, CatalogPluginOptions } from './options';
/** @public */
export const catalogPlugin = createPlugin({
@@ -83,14 +82,6 @@ export const catalogPlugin = createPlugin({
viewTechDoc: viewTechDocRouteRef,
createFromTemplate: createFromTemplateRouteRef,
},
- __experimentalConfigure(
- options?: CatalogInputPluginOptions,
- ): CatalogPluginOptions {
- const defaultOptions = {
- createButtonTitle: 'Create',
- };
- return { ...defaultOptions, ...options };
- },
});
/** @public */
diff --git a/plugins/catalog/src/translation.ts b/plugins/catalog/src/translation.ts
new file mode 100644
index 0000000000..2d1e3f2c8a
--- /dev/null
+++ b/plugins/catalog/src/translation.ts
@@ -0,0 +1,26 @@
+/*
+ * Copyright 2023 The Backstage Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { createTranslationRef } from '@backstage/core-plugin-api/alpha';
+
+/** @alpha */
+export const catalogTranslationRef = createTranslationRef({
+ id: 'catalog',
+ messages: {
+ catalog_page_title: `{{orgName}} Catalog`,
+ catalog_page_create_button_title: 'Create',
+ },
+});
diff --git a/plugins/cicd-statistics-module-gitlab/CHANGELOG.md b/plugins/cicd-statistics-module-gitlab/CHANGELOG.md
index 539caaef1e..e252bbe784 100644
--- a/plugins/cicd-statistics-module-gitlab/CHANGELOG.md
+++ b/plugins/cicd-statistics-module-gitlab/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-cicd-statistics-module-gitlab
+## 0.1.21-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/plugin-cicd-statistics@0.1.27-next.0
+ - @backstage/catalog-model@1.4.2
+
## 0.1.20
### Patch Changes
diff --git a/plugins/cicd-statistics-module-gitlab/package.json b/plugins/cicd-statistics-module-gitlab/package.json
index 7573ebd63e..2d2062914b 100644
--- a/plugins/cicd-statistics-module-gitlab/package.json
+++ b/plugins/cicd-statistics-module-gitlab/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-cicd-statistics-module-gitlab",
"description": "CI/CD Statistics plugin module; Gitlab CICD",
- "version": "0.1.20",
+ "version": "0.1.21-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/cicd-statistics/CHANGELOG.md b/plugins/cicd-statistics/CHANGELOG.md
index 6a70334cb1..b195c4bab4 100644
--- a/plugins/cicd-statistics/CHANGELOG.md
+++ b/plugins/cicd-statistics/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-cicd-statistics
+## 0.1.27-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/catalog-model@1.4.2
+
## 0.1.26
### Patch Changes
diff --git a/plugins/cicd-statistics/api-report.md b/plugins/cicd-statistics/api-report.md
index b0966aa281..70895d6a63 100644
--- a/plugins/cicd-statistics/api-report.md
+++ b/plugins/cicd-statistics/api-report.md
@@ -85,7 +85,6 @@ export const cicdStatisticsPlugin: BackstagePlugin<
{
entityContent: RouteRef;
},
- {},
{}
>;
diff --git a/plugins/cicd-statistics/package.json b/plugins/cicd-statistics/package.json
index 9936874270..a4a6552cd2 100644
--- a/plugins/cicd-statistics/package.json
+++ b/plugins/cicd-statistics/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-cicd-statistics",
"description": "A frontend plugin visualizing CI/CD pipeline statistics (build time)",
- "version": "0.1.26",
+ "version": "0.1.27-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/circleci/CHANGELOG.md b/plugins/circleci/CHANGELOG.md
index 71673c46eb..c29eda8985 100644
--- a/plugins/circleci/CHANGELOG.md
+++ b/plugins/circleci/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-circleci
+## 0.3.25-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+
## 0.3.24
### Patch Changes
diff --git a/plugins/circleci/api-report.md b/plugins/circleci/api-report.md
index d706115610..3bb8d4b6f9 100644
--- a/plugins/circleci/api-report.md
+++ b/plugins/circleci/api-report.md
@@ -63,7 +63,7 @@ export const circleCIApiRef: ApiRef;
export const circleCIBuildRouteRef: SubRouteRef>;
// @public (undocumented)
-const circleCIPlugin: BackstagePlugin<{}, {}, {}>;
+const circleCIPlugin: BackstagePlugin<{}, {}>;
export { circleCIPlugin };
export { circleCIPlugin as plugin };
diff --git a/plugins/circleci/package.json b/plugins/circleci/package.json
index 8d897fda4f..aca3879232 100644
--- a/plugins/circleci/package.json
+++ b/plugins/circleci/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-circleci",
"description": "A Backstage plugin that integrates towards Circle CI",
- "version": "0.3.24",
+ "version": "0.3.25-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/cloudbuild/CHANGELOG.md b/plugins/cloudbuild/CHANGELOG.md
index 0905269073..ced1a5b5aa 100644
--- a/plugins/cloudbuild/CHANGELOG.md
+++ b/plugins/cloudbuild/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-cloudbuild
+## 0.3.25-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+
## 0.3.24
### Patch Changes
diff --git a/plugins/cloudbuild/api-report.md b/plugins/cloudbuild/api-report.md
index dc2aacbc18..3fbb15000d 100644
--- a/plugins/cloudbuild/api-report.md
+++ b/plugins/cloudbuild/api-report.md
@@ -104,7 +104,6 @@ const cloudbuildPlugin: BackstagePlugin<
{
entityContent: RouteRef;
},
- {},
{}
>;
export { cloudbuildPlugin };
diff --git a/plugins/cloudbuild/package.json b/plugins/cloudbuild/package.json
index 74338240c6..42b706ea2d 100644
--- a/plugins/cloudbuild/package.json
+++ b/plugins/cloudbuild/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-cloudbuild",
"description": "A Backstage plugin that integrates towards Google Cloud Build",
- "version": "0.3.24",
+ "version": "0.3.25-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/code-climate/CHANGELOG.md b/plugins/code-climate/CHANGELOG.md
index 749de6cd76..2728a0b8b4 100644
--- a/plugins/code-climate/CHANGELOG.md
+++ b/plugins/code-climate/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-code-climate
+## 0.1.25-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+
## 0.1.24
### Patch Changes
diff --git a/plugins/code-climate/api-report.md b/plugins/code-climate/api-report.md
index 32359f663f..8243cada75 100644
--- a/plugins/code-climate/api-report.md
+++ b/plugins/code-climate/api-report.md
@@ -42,7 +42,6 @@ export const codeClimatePlugin: BackstagePlugin<
{
root: RouteRef;
},
- {},
{}
>;
diff --git a/plugins/code-climate/package.json b/plugins/code-climate/package.json
index 30e29490eb..5f6e89942f 100644
--- a/plugins/code-climate/package.json
+++ b/plugins/code-climate/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-code-climate",
- "version": "0.1.24",
+ "version": "0.1.25-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/code-coverage-backend/CHANGELOG.md b/plugins/code-coverage-backend/CHANGELOG.md
index 2c4d9685e5..3f34c973ce 100644
--- a/plugins/code-coverage-backend/CHANGELOG.md
+++ b/plugins/code-coverage-backend/CHANGELOG.md
@@ -1,5 +1,19 @@
# @backstage/plugin-code-coverage-backend
+## 0.2.19-next.0
+
+### Patch Changes
+
+- 4aa27aa200: Added option to set body size limit
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+
## 0.2.17
### Patch Changes
diff --git a/plugins/code-coverage-backend/package.json b/plugins/code-coverage-backend/package.json
index f875f4d03d..fb956403b1 100644
--- a/plugins/code-coverage-backend/package.json
+++ b/plugins/code-coverage-backend/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-code-coverage-backend",
"description": "A Backstage backend plugin that helps you keep track of your code coverage",
- "version": "0.2.17",
+ "version": "0.2.19-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/code-coverage/CHANGELOG.md b/plugins/code-coverage/CHANGELOG.md
index b8bf77b484..099fcbd4df 100644
--- a/plugins/code-coverage/CHANGELOG.md
+++ b/plugins/code-coverage/CHANGELOG.md
@@ -1,5 +1,19 @@
# @backstage/plugin-code-coverage
+## 0.2.18-next.0
+
+### Patch Changes
+
+- a468544fa9: Updated layout to improve contrasts and consistency with other plugins
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/config@1.1.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+
## 0.2.17
### Patch Changes
diff --git a/plugins/code-coverage/api-report.md b/plugins/code-coverage/api-report.md
index 5dcb5fcfd1..152cc93103 100644
--- a/plugins/code-coverage/api-report.md
+++ b/plugins/code-coverage/api-report.md
@@ -14,7 +14,6 @@ export const codeCoveragePlugin: BackstagePlugin<
{
root: RouteRef;
},
- {},
{}
>;
diff --git a/plugins/code-coverage/dev/__fixtures__/coverage-for-entity.json b/plugins/code-coverage/dev/__fixtures__/coverage-for-entity.json
new file mode 100644
index 0000000000..c2f4725818
--- /dev/null
+++ b/plugins/code-coverage/dev/__fixtures__/coverage-for-entity.json
@@ -0,0 +1,174 @@
+{
+ "metadata": {
+ "vcs": {
+ "type": "github",
+ "location": "https://github.com/backstage/backstage/tree/main/"
+ },
+ "generationTime": 1694413579498
+ },
+ "entity": {
+ "name": "backstage",
+ "namespace": "default",
+ "kind": "Component"
+ },
+ "files": [
+ {
+ "filename": "src/index.js",
+ "lineHits": {
+ "1": 1,
+ "2": 1,
+ "3": 1,
+ "4": 13,
+ "5": 13,
+ "6": 3,
+ "7": 13,
+ "8": 3,
+ "9": 13,
+ "10": 3,
+ "11": 13,
+ "12": 3,
+ "13": 13,
+ "14": 1,
+ "15": 13,
+ "16": 13
+ },
+ "branchHits": {
+ "3": {
+ "covered": 1,
+ "available": 1,
+ "missed": 0
+ },
+ "5": {
+ "covered": 1,
+ "available": 1,
+ "missed": 0
+ },
+ "7": {
+ "covered": 1,
+ "available": 1,
+ "missed": 0
+ },
+ "9": {
+ "covered": 1,
+ "available": 1,
+ "missed": 0
+ },
+ "11": {
+ "covered": 1,
+ "available": 1,
+ "missed": 0
+ },
+ "13": {
+ "covered": 1,
+ "available": 1,
+ "missed": 0
+ }
+ }
+ },
+ {
+ "filename": "src/math.js",
+ "lineHits": {
+ "1": 1,
+ "2": 3,
+ "3": 2,
+ "4": 2,
+ "5": 1,
+ "6": 1,
+ "7": 1,
+ "8": 1,
+ "9": 3,
+ "10": 2,
+ "11": 2,
+ "12": 1,
+ "13": 1,
+ "14": 1,
+ "15": 1,
+ "16": 3,
+ "17": 2,
+ "18": 2,
+ "19": 1,
+ "20": 1,
+ "21": 1,
+ "22": 1,
+ "23": 3,
+ "24": 2,
+ "25": 3,
+ "26": 0,
+ "27": 0,
+ "28": 1,
+ "29": 1
+ },
+ "branchHits": {
+ "2": {
+ "covered": 3,
+ "available": 3,
+ "missed": 0
+ },
+ "5": {
+ "covered": 1,
+ "available": 1,
+ "missed": 0
+ },
+ "8": {
+ "covered": 1,
+ "available": 1,
+ "missed": 0
+ },
+ "9": {
+ "covered": 2,
+ "available": 2,
+ "missed": 0
+ },
+ "12": {
+ "covered": 1,
+ "available": 1,
+ "missed": 0
+ },
+ "15": {
+ "covered": 1,
+ "available": 1,
+ "missed": 0
+ },
+ "16": {
+ "covered": 2,
+ "available": 2,
+ "missed": 0
+ },
+ "19": {
+ "covered": 1,
+ "available": 1,
+ "missed": 0
+ },
+ "22": {
+ "covered": 1,
+ "available": 1,
+ "missed": 0
+ },
+ "23": {
+ "covered": 2,
+ "available": 2,
+ "missed": 0
+ },
+ "25": {
+ "covered": 1,
+ "available": 2,
+ "missed": 1
+ }
+ }
+ }
+ ],
+ "aggregate": {
+ "line": {
+ "available": 45,
+ "covered": 43,
+ "missed": 2,
+ "percentage": 95.56
+ },
+ "branch": {
+ "available": 23,
+ "covered": 22,
+ "missed": 1,
+ "percentage": 95.65
+ }
+ }
+}
diff --git a/plugins/code-coverage/dev/__fixtures__/coverage-history-for-entity.json b/plugins/code-coverage/dev/__fixtures__/coverage-history-for-entity.json
new file mode 100644
index 0000000000..26b96875e5
--- /dev/null
+++ b/plugins/code-coverage/dev/__fixtures__/coverage-history-for-entity.json
@@ -0,0 +1,84 @@
+{
+ "entity": {
+ "name": "backstage",
+ "kind": "component",
+ "namespace": "default"
+ },
+ "history": [
+ {
+ "timestamp": 1694413579498,
+ "branch": {
+ "available": 23,
+ "covered": 22,
+ "missed": 1,
+ "percentage": 95.65
+ },
+ "line": {
+ "available": 45,
+ "covered": 43,
+ "missed": 2,
+ "percentage": 95.56
+ }
+ },
+ {
+ "timestamp": 1694178927072,
+ "branch": {
+ "available": 23,
+ "covered": 22,
+ "missed": 1,
+ "percentage": 95.65
+ },
+ "line": {
+ "available": 45,
+ "covered": 43,
+ "missed": 2,
+ "percentage": 95.56
+ }
+ },
+ {
+ "timestamp": 1694178830777,
+ "branch": {
+ "available": 19,
+ "covered": 18,
+ "missed": 1,
+ "percentage": 94.74
+ },
+ "line": {
+ "available": 45,
+ "covered": 43,
+ "missed": 2,
+ "percentage": 95.56
+ }
+ },
+ {
+ "timestamp": 1694178708402,
+ "branch": {
+ "available": 15,
+ "covered": 10,
+ "missed": 5,
+ "percentage": 66.67
+ },
+ "line": {
+ "available": 45,
+ "covered": 36,
+ "missed": 9,
+ "percentage": 80
+ }
+ },
+ {
+ "timestamp": 1694178270486,
+ "branch": {
+ "available": 10,
+ "covered": 5,
+ "missed": 5,
+ "percentage": 50
+ },
+ "line": {
+ "available": 45,
+ "covered": 26,
+ "missed": 19,
+ "percentage": 57.78
+ }
+ }
+ ]
+}
diff --git a/plugins/code-coverage/dev/__fixtures__/file-content-index-js.txt b/plugins/code-coverage/dev/__fixtures__/file-content-index-js.txt
new file mode 100644
index 0000000000..34df5226d5
--- /dev/null
+++ b/plugins/code-coverage/dev/__fixtures__/file-content-index-js.txt
@@ -0,0 +1,16 @@
+import { add, multiply, subtract, divide } from "./math";
+
+export default (a, b, operator) => {
+ switch(operator) {
+ case '+':
+ return add(a, b);
+ case '-':
+ return subtract(a, b);
+ case '*':
+ return multiply(a, b);
+ case '/':
+ return divide(a, b);
+ default:
+ throw new Error('Invalid operator');
+ }
+};
diff --git a/plugins/code-coverage/dev/__fixtures__/file-content-math-js.txt b/plugins/code-coverage/dev/__fixtures__/file-content-math-js.txt
new file mode 100644
index 0000000000..05f43438f5
--- /dev/null
+++ b/plugins/code-coverage/dev/__fixtures__/file-content-math-js.txt
@@ -0,0 +1,29 @@
+export function add(a, b) {
+ if (isNaN(a) || isNaN(b)) {
+ throw new Error('Invalid input');
+ }
+ return a + b;
+}
+
+export function subtract(a, b) {
+ if (isNaN(a) || isNaN(b)) {
+ throw new Error('Invalid input');
+ }
+ return a - b;
+}
+
+export function multiply(a, b) {
+ if (isNaN(a) || isNaN(b)) {
+ throw new Error('Invalid input');
+ }
+ return a * b;
+}
+
+export function divide(a, b) {
+ if (isNaN(a) || isNaN(b)) {
+ throw new Error('Invalid input');
+ } else if (b === 0) {
+ throw new Error('Division by zero');
+ }
+ return a / b;
+}
diff --git a/plugins/code-coverage/dev/__fixtures__/get-file-content-from-entity.ts b/plugins/code-coverage/dev/__fixtures__/get-file-content-from-entity.ts
new file mode 100644
index 0000000000..9fea0997f7
--- /dev/null
+++ b/plugins/code-coverage/dev/__fixtures__/get-file-content-from-entity.ts
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2023 The Backstage Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+export default {
+ 'src/index.js': `import { add, multiply, subtract, divide } from \"./math\";
+
+export default (a, b, operator) => {
+ switch(operator) {
+ case '+':
+ return add(a, b);
+ case '-':
+ return subtract(a, b);
+ case '*':
+ return multiply(a, b);
+ case '/':
+ return divide(a, b);
+ default:
+ throw new Error('Invalid operator');
+ }
+};
+ `,
+ 'src/math.js': `export function add(a, b) {
+ if (isNaN(a) || isNaN(b)) {
+ throw new Error('Invalid input');
+ }
+ return a + b;
+}
+
+export function subtract(a, b) {
+ if (isNaN(a) || isNaN(b)) {
+ throw new Error('Invalid input');
+ }
+ return a - b;
+}
+
+export function multiply(a, b) {
+ if (isNaN(a) || isNaN(b)) {
+ throw new Error('Invalid input');
+ }
+ return a * b;
+}
+
+export function divide(a, b) {
+ if (isNaN(a) || isNaN(b)) {
+ throw new Error('Invalid input');
+ } else if (b === 0) {
+ throw new Error('Division by zero');
+ }
+ return a / b;
+}
+ `,
+};
diff --git a/plugins/code-coverage/dev/index.tsx b/plugins/code-coverage/dev/index.tsx
index f364c2a0d1..e0c1ef7616 100644
--- a/plugins/code-coverage/dev/index.tsx
+++ b/plugins/code-coverage/dev/index.tsx
@@ -16,11 +16,65 @@
import React from 'react';
import { createDevApp } from '@backstage/dev-utils';
import { codeCoveragePlugin, EntityCodeCoverageContent } from '../src/plugin';
+import { CompoundEntityRef, Entity } from '@backstage/catalog-model';
+import { EntityProvider } from '@backstage/plugin-catalog-react';
+import { codeCoverageApiRef, CodeCoverageApi } from '../src/api';
+import coverageForEntity from './__fixtures__/coverage-for-entity.json';
+import coverageHistoryForEntity from './__fixtures__/coverage-history-for-entity.json';
+import fileContentFromEntity from './__fixtures__/get-file-content-from-entity';
+
+const mockEntity: Entity = {
+ apiVersion: 'backstage.io/v1alpha1',
+ kind: 'Component',
+ metadata: {
+ name: 'backstage',
+ description: 'backstage.io',
+ annotations: {
+ 'backstage.io/code-coverage': 'enabled',
+ },
+ },
+ spec: {
+ lifecycle: 'production',
+ type: 'website',
+ owner: 'user:guest',
+ },
+};
+
+const mockCodeCoverageApi: CodeCoverageApi = {
+ async getCoverageForEntity(_entity: CompoundEntityRef) {
+ return coverageForEntity as any;
+ },
+ async getFileContentFromEntity(_entity: CompoundEntityRef, filePath: string) {
+ switch (filePath) {
+ case 'src/index.js':
+ return fileContentFromEntity['src/index.js'];
+ case 'src/math.js':
+ return fileContentFromEntity['src/math.js'];
+ default:
+ return '';
+ }
+ },
+ async getCoverageHistoryForEntity(
+ _entity: CompoundEntityRef,
+ _limit?: number,
+ ) {
+ return coverageHistoryForEntity;
+ },
+};
createDevApp()
+ .registerApi({
+ api: codeCoverageApiRef,
+ deps: {},
+ factory: () => mockCodeCoverageApi,
+ })
.registerPlugin(codeCoveragePlugin)
.addPage({
- element: ,
+ element: (
+
+
+
+ ),
title: 'Root Page',
})
.render();
diff --git a/plugins/code-coverage/package.json b/plugins/code-coverage/package.json
index ede73b9506..05d035c45a 100644
--- a/plugins/code-coverage/package.json
+++ b/plugins/code-coverage/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-code-coverage",
"description": "A Backstage plugin that helps you keep track of your code coverage",
- "version": "0.2.17",
+ "version": "0.2.18-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/code-coverage/src/components/FileExplorer/CodeRow.tsx b/plugins/code-coverage/src/components/FileExplorer/CodeRow.tsx
index c7dee55f2b..20f0548f16 100644
--- a/plugins/code-coverage/src/components/FileExplorer/CodeRow.tsx
+++ b/plugins/code-coverage/src/components/FileExplorer/CodeRow.tsx
@@ -41,9 +41,11 @@ const useStyles = makeStyles(theme => ({
},
hitCountRoundedRectangle: {
backgroundColor: `${theme.palette.success.main}`,
+ color: `${theme.palette.success.contrastText}`,
},
notHitCountRoundedRectangle: {
backgroundColor: `${theme.palette.error.main}`,
+ color: `${theme.palette.error.contrastText}`,
},
codeLine: {
paddingLeft: `${theme.spacing(1)}`,
@@ -52,9 +54,11 @@ const useStyles = makeStyles(theme => ({
},
hitCodeLine: {
backgroundColor: `${theme.palette.success.main}`,
+ color: `${theme.palette.success.contrastText}`,
},
notHitCodeLine: {
backgroundColor: `${theme.palette.error.main}`,
+ color: `${theme.palette.error.contrastText}`,
},
}));
diff --git a/plugins/code-coverage/src/components/FileExplorer/FileExplorer.tsx b/plugins/code-coverage/src/components/FileExplorer/FileExplorer.tsx
index 3d41a1ff64..4017ba8264 100644
--- a/plugins/code-coverage/src/components/FileExplorer/FileExplorer.tsx
+++ b/plugins/code-coverage/src/components/FileExplorer/FileExplorer.tsx
@@ -15,15 +15,9 @@
*/
import { useEntity } from '@backstage/plugin-catalog-react';
-import {
- Box,
- Card,
- CardContent,
- CardHeader,
- Modal,
- Tooltip,
-} from '@material-ui/core';
-import DescriptionIcon from '@material-ui/icons/Description';
+import { Box, Modal, makeStyles } from '@material-ui/core';
+import FolderIcon from '@material-ui/icons/Folder';
+import FileOutlinedIcon from '@material-ui/icons/InsertDriveFileOutlined';
import { Alert } from '@material-ui/lab';
import React, { Fragment, useEffect, useState } from 'react';
import useAsync from 'react-use/lib/useAsync';
@@ -38,6 +32,19 @@ import {
} from '@backstage/core-components';
import { useApi } from '@backstage/core-plugin-api';
+const useStyles = makeStyles(theme => ({
+ container: {
+ marginTop: theme.spacing(2),
+ },
+ icon: {
+ marginRight: theme.spacing(1),
+ },
+ link: {
+ color: theme.palette.primary.main,
+ cursor: 'pointer',
+ },
+}));
+
type FileStructureObject = Record;
type CoverageTableRow = {
@@ -143,6 +150,7 @@ export const getObjectsAtPath = (
};
export const FileExplorer = () => {
+ const styles = useStyles();
const { entity } = useEntity();
const [curData, setCurData] = useState();
const [tableData, setTableData] = useState();
@@ -188,6 +196,7 @@ export const FileExplorer = () => {
const moveUpIntoPath = (idx: number) => {
const path = curPath.split('/').slice(0, idx + 1);
+ setCurFile('');
setCurPath(path.join('/'));
setTableData(getObjectsAtPath(curData, path.slice(1)));
};
@@ -197,43 +206,32 @@ export const FileExplorer = () => {
title: 'Path',
type: 'string',
field: 'path',
- render: (row: CoverageTableRow) => {
- if (row.files?.length) {
- return (
- {
- setCurPath(`${curPath}/${row.path}`);
- moveDownIntoPath(row.path);
- }}
- onClick={() => {
- setCurPath(`${curPath}/${row.path}`);
- moveDownIntoPath(row.path);
- }}
- >
- {row.path}
-
- );
- }
-
- return (
-
- {row.path}
-
- {
- setCurFile(`${curPath.slice(1)}/${row.path}`);
- setModalOpen(true);
- }}
- />
-
-
- );
- },
+ render: (row: CoverageTableRow) => (
+ {
+ if (row.files?.length) {
+ setCurPath(`${curPath}/${row.path}`);
+ moveDownIntoPath(row.path);
+ } else {
+ setCurFile(`${curPath.slice(1)}/${row.path}`);
+ setModalOpen(true);
+ }
+ }}
+ >
+ {row.files?.length > 0 && (
+
+ )}
+ {row.files?.length === 0 && (
+
+ )}
+ {row.path}
+
+ ),
},
{
title: 'Coverage',
@@ -264,42 +262,50 @@ export const FileExplorer = () => {
}
return (
-
-
-
-
- {pathArray.map((pathElement, idx) => (
-
- moveUpIntoPath(idx)}
- onClick={() => moveUpIntoPath(idx)}
- >
- {pathElement || 'root'}
-
- {'\u00A0/\u00A0'}
-
- ))}
-
- No files found>}
- data={tableData || []}
- columns={columns}
- />
- event.stopPropagation()}
- onClose={() => setModalOpen(false)}
- style={{ overflow: 'scroll' }}
- >
-
-
-
-
+
+ No files found>}
+ data={tableData || []}
+ columns={columns}
+ title={
+ <>
+ Explore Files
+
+ {pathArray.map((pathElement, idx) => (
+
+ moveUpIntoPath(idx)}
+ onClick={() => moveUpIntoPath(idx)}
+ >
+ {pathElement || 'root'}
+
+ {idx !== lastPathElementIndex && {'\u00A0/\u00A0'}
}
+
+ ))}
+
+ >
+ }
+ />
+ event.stopPropagation()}
+ onClose={() => setModalOpen(false)}
+ style={{ overflow: 'scroll' }}
+ >
+
+
+
);
};
diff --git a/plugins/code-coverage/src/components/FileExplorer/Highlighter.ts b/plugins/code-coverage/src/components/FileExplorer/Highlighter.ts
index d97d147da3..465e43f6e4 100644
--- a/plugins/code-coverage/src/components/FileExplorer/Highlighter.ts
+++ b/plugins/code-coverage/src/components/FileExplorer/Highlighter.ts
@@ -14,8 +14,8 @@
* limitations under the License.
*/
-import 'highlight.js/styles/atom-one-dark.css';
-import highlight from 'highlight.js';
+import 'highlight.js/styles/mono-blue.css';
+import { highlight } from 'highlight.js';
/*
* Given a file extension, repo name, and array of code lines, return a Promise resolving
@@ -30,7 +30,6 @@ import highlight from 'highlight.js';
*/
export const highlightLines = (fileExtension: string, lines: Array) => {
const formattedLines: Array = [];
- let state: CompiledMode | Language | undefined;
let fileformat = fileExtension;
if (fileExtension === 'm') {
fileformat = 'objectivec';
@@ -46,8 +45,10 @@ export const highlightLines = (fileExtension: string, lines: Array) => {
}
lines.forEach(line => {
- const result = highlight.highlight(fileformat, line, true, state);
- state = result.top;
+ const result = highlight(line, {
+ language: fileformat,
+ ignoreIllegals: true,
+ });
formattedLines.push(result.value);
});
return formattedLines;
diff --git a/plugins/codescene/CHANGELOG.md b/plugins/codescene/CHANGELOG.md
index 57f5fe44a9..45e23b905a 100644
--- a/plugins/codescene/CHANGELOG.md
+++ b/plugins/codescene/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-codescene
+## 0.1.18-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/config@1.1.0
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+
## 0.1.17
### Patch Changes
diff --git a/plugins/codescene/api-report.md b/plugins/codescene/api-report.md
index 662968d3c9..99eb2b6256 100644
--- a/plugins/codescene/api-report.md
+++ b/plugins/codescene/api-report.md
@@ -24,7 +24,6 @@ export const codescenePlugin: BackstagePlugin<
projectId: string;
}>;
},
- {},
{}
>;
diff --git a/plugins/codescene/package.json b/plugins/codescene/package.json
index a3a5564900..aa105dffd6 100644
--- a/plugins/codescene/package.json
+++ b/plugins/codescene/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-codescene",
- "version": "0.1.17",
+ "version": "0.1.18-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/config-schema/CHANGELOG.md b/plugins/config-schema/CHANGELOG.md
index d6d03c1caf..877bbe23c2 100644
--- a/plugins/config-schema/CHANGELOG.md
+++ b/plugins/config-schema/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-config-schema
+## 0.1.46-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/config@1.1.0
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+ - @backstage/types@1.1.1
+
## 0.1.45
### Patch Changes
diff --git a/plugins/config-schema/api-report.md b/plugins/config-schema/api-report.md
index 95d352d1b7..16630ae8d0 100644
--- a/plugins/config-schema/api-report.md
+++ b/plugins/config-schema/api-report.md
@@ -29,7 +29,6 @@ export const configSchemaPlugin: BackstagePlugin<
{
root: RouteRef;
},
- {},
{}
>;
diff --git a/plugins/config-schema/package.json b/plugins/config-schema/package.json
index ad642a4283..1428340190 100644
--- a/plugins/config-schema/package.json
+++ b/plugins/config-schema/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-config-schema",
"description": "A Backstage plugin that lets you browse the configuration schema of your app",
- "version": "0.1.45",
+ "version": "0.1.46-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/cost-insights/CHANGELOG.md b/plugins/cost-insights/CHANGELOG.md
index f74ae41fc0..5a29cfe729 100644
--- a/plugins/cost-insights/CHANGELOG.md
+++ b/plugins/cost-insights/CHANGELOG.md
@@ -1,5 +1,19 @@
# @backstage/plugin-cost-insights
+## 0.12.14-next.0
+
+### Patch Changes
+
+- 959aa2a09f: The experimental plugin configuration has been removed. The trend line can now instead be hidden by setting `costInsights.hideTrendLine` to `true` in the configuration.
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/config@1.1.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+ - @backstage/plugin-cost-insights-common@0.1.2
+
## 0.12.13
### Patch Changes
diff --git a/plugins/cost-insights/api-report.md b/plugins/cost-insights/api-report.md
index b37804c93d..11cdbd8141 100644
--- a/plugins/cost-insights/api-report.md
+++ b/plugins/cost-insights/api-report.md
@@ -242,6 +242,7 @@ export type ConfigContextProps = {
icons: Icon[];
engineerCost: number;
engineerThreshold: number;
+ hideTrendLine: boolean;
currencies: Currency[];
};
@@ -326,8 +327,7 @@ const costInsightsPlugin: BackstagePlugin<
growthAlerts: RouteRef;
unlabeledDataflowAlerts: RouteRef;
},
- {},
- CostInsightsInputPluginOptions
+ {}
>;
export { costInsightsPlugin };
export { costInsightsPlugin as plugin };
diff --git a/plugins/cost-insights/config.d.ts b/plugins/cost-insights/config.d.ts
index 61a54f76e2..786d6f5a59 100644
--- a/plugins/cost-insights/config.d.ts
+++ b/plugins/cost-insights/config.d.ts
@@ -26,6 +26,11 @@ export interface Config {
*/
engineerThreshold?: number;
+ /**
+ * @visibility frontend
+ */
+ hideTrendLine?: boolean;
+
/**
* @visibility frontend
*/
diff --git a/plugins/cost-insights/package.json b/plugins/cost-insights/package.json
index 28f6ece59e..4ff0db65f4 100644
--- a/plugins/cost-insights/package.json
+++ b/plugins/cost-insights/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-cost-insights",
"description": "A Backstage plugin that helps you keep track of your cloud spend",
- "version": "0.12.13",
+ "version": "0.12.14-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewCard.test.tsx b/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewCard.test.tsx
index d4fdc66bdb..2250392355 100644
--- a/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewCard.test.tsx
+++ b/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewCard.test.tsx
@@ -15,7 +15,6 @@
*/
import React from 'react';
import { fireEvent } from '@testing-library/react';
-import { MockPluginProvider } from '@backstage/test-utils/alpha';
import { renderInTestApp } from '@backstage/test-utils';
import { CostOverviewCard } from './CostOverviewCard';
import { Cost } from '@backstage/plugin-cost-insights-common';
@@ -45,9 +44,7 @@ function renderInContext(children: JSX.Element) {
-
- {children}
-
+ {children}
diff --git a/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewChart.tsx b/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewChart.tsx
index ce0623cc7e..2201dcc650 100644
--- a/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewChart.tsx
+++ b/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewChart.tsx
@@ -47,7 +47,6 @@ import { groupByDate, trendFrom } from '../../utils/charts';
import { aggregationSort } from '../../utils/sort';
import { CostOverviewLegend } from './CostOverviewLegend';
import { TooltipRenderer } from '../../types';
-import { useCostInsightsOptions } from '../../options';
import { useConfig } from '../../hooks';
type CostOverviewChartProps = {
@@ -65,7 +64,7 @@ export const CostOverviewChart = ({
}: CostOverviewChartProps) => {
const theme = useTheme();
const styles = useStyles(theme);
- const { baseCurrency } = useConfig();
+ const { baseCurrency, hideTrendLine } = useConfig();
const data = {
dailyCost: {
@@ -134,7 +133,6 @@ export const CostOverviewChart = ({
);
};
- const { hideTrendLine } = useCostInsightsOptions();
const localizedTickFormatter = formatGraphValue(baseCurrency);
return (
diff --git a/plugins/cost-insights/src/components/EntityCosts/EntityCost.test.tsx b/plugins/cost-insights/src/components/EntityCosts/EntityCost.test.tsx
index 6eb3369b40..6ad7285ab9 100644
--- a/plugins/cost-insights/src/components/EntityCosts/EntityCost.test.tsx
+++ b/plugins/cost-insights/src/components/EntityCosts/EntityCost.test.tsx
@@ -14,7 +14,6 @@
* limitations under the License.
*/
import React from 'react';
-import { MockPluginProvider } from '@backstage/test-utils/alpha';
import { renderInTestApp, TestApiProvider } from '@backstage/test-utils';
import {
changeOf,
@@ -65,9 +64,7 @@ function renderInContext(children: JSX.Element) {
-
- {children}
-
+ {children}
diff --git a/plugins/cost-insights/src/hooks/useConfig.tsx b/plugins/cost-insights/src/hooks/useConfig.tsx
index f42cea38c3..82c0ce26f5 100644
--- a/plugins/cost-insights/src/hooks/useConfig.tsx
+++ b/plugins/cost-insights/src/hooks/useConfig.tsx
@@ -72,6 +72,7 @@ export type ConfigContextProps = {
icons: Icon[];
engineerCost: number;
engineerThreshold: number;
+ hideTrendLine: boolean;
currencies: Currency[];
};
@@ -86,6 +87,7 @@ const defaultState: ConfigContextProps = {
icons: [],
engineerCost: 0,
engineerThreshold: EngineerThreshold,
+ hideTrendLine: false,
currencies: defaultCurrencies,
};
@@ -193,12 +195,20 @@ export const ConfigProvider = ({ children }: PropsWithChildren<{}>) => {
);
}
+ function getHideTrendLine(): boolean {
+ return (
+ c.getOptionalBoolean('costInsights.hideTrendLine') ??
+ defaultState.hideTrendLine
+ );
+ }
+
function getConfig() {
const baseCurrency = getBaseCurrency();
const products = getProducts();
const metrics = getMetrics();
const engineerCost = getEngineerCost();
const engineerThreshold = getEngineerThreshold();
+ const hideTrendLine = getHideTrendLine();
const icons = getIcons();
const currencies = getCurrencies();
@@ -212,6 +222,7 @@ export const ConfigProvider = ({ children }: PropsWithChildren<{}>) => {
products,
engineerCost,
engineerThreshold,
+ hideTrendLine,
icons,
currencies,
}));
diff --git a/plugins/cost-insights/src/options.ts b/plugins/cost-insights/src/options.ts
deleted file mode 100644
index acc977771d..0000000000
--- a/plugins/cost-insights/src/options.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright 2020 The Backstage Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { usePluginOptions } from '@backstage/core-plugin-api/alpha';
-
-export type CostInsightsPluginOptions = {
- hideTrendLine?: boolean;
-};
-
-/** @ignore */
-export type CostInsightsInputPluginOptions = {
- hideTrendLine?: boolean;
-};
-
-export const useCostInsightsOptions = () =>
- usePluginOptions();
diff --git a/plugins/cost-insights/src/plugin.ts b/plugins/cost-insights/src/plugin.ts
index c863c9e03a..04d58d1877 100644
--- a/plugins/cost-insights/src/plugin.ts
+++ b/plugins/cost-insights/src/plugin.ts
@@ -19,10 +19,6 @@ import {
createRouteRef,
createRoutableExtension,
} from '@backstage/core-plugin-api';
-import {
- CostInsightsInputPluginOptions,
- CostInsightsPluginOptions,
-} from './options';
export const rootRouteRef = createRouteRef({
id: 'cost-insights',
@@ -45,14 +41,6 @@ export const costInsightsPlugin = createPlugin({
growthAlerts: projectGrowthAlertRef,
unlabeledDataflowAlerts: unlabeledDataflowAlertRef,
},
- __experimentalConfigure(
- options?: CostInsightsInputPluginOptions,
- ): CostInsightsPluginOptions {
- const defaultOptions = {
- hideTrendLine: false,
- };
- return { ...defaultOptions, ...options };
- },
});
/** @public */
diff --git a/plugins/cost-insights/src/testUtils/providers.tsx b/plugins/cost-insights/src/testUtils/providers.tsx
index 9522dfb702..5df1b2512f 100644
--- a/plugins/cost-insights/src/testUtils/providers.tsx
+++ b/plugins/cost-insights/src/testUtils/providers.tsx
@@ -96,6 +96,7 @@ export const MockConfigProvider = (props: MockConfigProviderProps) => {
icons: [],
engineerCost: 0,
engineerThreshold: EngineerThreshold,
+ hideTrendLine: false,
currencies: [],
};
diff --git a/plugins/devtools-backend/CHANGELOG.md b/plugins/devtools-backend/CHANGELOG.md
index 7d679b0aa6..4b07850d2d 100644
--- a/plugins/devtools-backend/CHANGELOG.md
+++ b/plugins/devtools-backend/CHANGELOG.md
@@ -1,5 +1,22 @@
# @backstage/plugin-devtools-backend
+## 0.2.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/config-loader@1.5.1-next.0
+ - @backstage/cli-common@0.1.13-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-devtools-common@0.1.4
+ - @backstage/plugin-permission-common@0.7.8
+ - @backstage/plugin-permission-node@0.7.16-next.0
+
## 0.2.0
### Minor Changes
diff --git a/plugins/devtools-backend/package.json b/plugins/devtools-backend/package.json
index e8a3d5b151..085b0bf37c 100644
--- a/plugins/devtools-backend/package.json
+++ b/plugins/devtools-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-devtools-backend",
- "version": "0.2.0",
+ "version": "0.2.2-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/devtools/CHANGELOG.md b/plugins/devtools/CHANGELOG.md
index 2585103b45..6d8cdb219d 100644
--- a/plugins/devtools/CHANGELOG.md
+++ b/plugins/devtools/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/plugin-devtools
+## 0.1.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/plugin-permission-react@0.4.16-next.0
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-devtools-common@0.1.4
+
## 0.1.4
### Patch Changes
diff --git a/plugins/devtools/api-report.md b/plugins/devtools/api-report.md
index f0a9280162..21754d7c1e 100644
--- a/plugins/devtools/api-report.md
+++ b/plugins/devtools/api-report.md
@@ -36,7 +36,6 @@ export const devToolsPlugin: BackstagePlugin<
{
root: RouteRef;
},
- {},
{}
>;
diff --git a/plugins/devtools/package.json b/plugins/devtools/package.json
index 44010775a8..c1b4fb2f79 100644
--- a/plugins/devtools/package.json
+++ b/plugins/devtools/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-devtools",
- "version": "0.1.4",
+ "version": "0.1.5-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/dynatrace/CHANGELOG.md b/plugins/dynatrace/CHANGELOG.md
index 33ddc90338..a4dc207110 100644
--- a/plugins/dynatrace/CHANGELOG.md
+++ b/plugins/dynatrace/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-dynatrace
+## 7.0.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+
## 7.0.4
### Patch Changes
diff --git a/plugins/dynatrace/api-report.md b/plugins/dynatrace/api-report.md
index 0f25fc3108..f78b4060fd 100644
--- a/plugins/dynatrace/api-report.md
+++ b/plugins/dynatrace/api-report.md
@@ -10,7 +10,7 @@ import { Entity } from '@backstage/catalog-model';
import { JSX as JSX_2 } from 'react';
// @public
-export const dynatracePlugin: BackstagePlugin<{}, {}, {}>;
+export const dynatracePlugin: BackstagePlugin<{}, {}>;
// @public
export const DynatraceTab: () => JSX_2.Element;
diff --git a/plugins/dynatrace/package.json b/plugins/dynatrace/package.json
index 663744a454..c31e336e5c 100644
--- a/plugins/dynatrace/package.json
+++ b/plugins/dynatrace/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-dynatrace",
- "version": "7.0.4",
+ "version": "7.0.5-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/entity-feedback-backend/CHANGELOG.md b/plugins/entity-feedback-backend/CHANGELOG.md
index ac9527c416..6c2224bfcf 100644
--- a/plugins/entity-feedback-backend/CHANGELOG.md
+++ b/plugins/entity-feedback-backend/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/plugin-entity-feedback-backend
+## 0.2.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/plugin-entity-feedback-common@0.1.3
+
## 0.2.0
### Minor Changes
diff --git a/plugins/entity-feedback-backend/package.json b/plugins/entity-feedback-backend/package.json
index 41d33eb896..6cf4117995 100644
--- a/plugins/entity-feedback-backend/package.json
+++ b/plugins/entity-feedback-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-entity-feedback-backend",
- "version": "0.2.0",
+ "version": "0.2.2-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/entity-feedback/CHANGELOG.md b/plugins/entity-feedback/CHANGELOG.md
index c470784b86..c5b67f10cf 100644
--- a/plugins/entity-feedback/CHANGELOG.md
+++ b/plugins/entity-feedback/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/plugin-entity-feedback
+## 0.2.8-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+ - @backstage/plugin-entity-feedback-common@0.1.3
+
## 0.2.7
### Patch Changes
diff --git a/plugins/entity-feedback/api-report.md b/plugins/entity-feedback/api-report.md
index d61394ab9a..27e56e5282 100644
--- a/plugins/entity-feedback/api-report.md
+++ b/plugins/entity-feedback/api-report.md
@@ -70,7 +70,6 @@ export const entityFeedbackPlugin: BackstagePlugin<
{
root: RouteRef;
},
- {},
{}
>;
diff --git a/plugins/entity-feedback/package.json b/plugins/entity-feedback/package.json
index b8f2333ad4..032e6732bc 100644
--- a/plugins/entity-feedback/package.json
+++ b/plugins/entity-feedback/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-entity-feedback",
- "version": "0.2.7",
+ "version": "0.2.8-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/entity-validation/CHANGELOG.md b/plugins/entity-validation/CHANGELOG.md
index a975bdba54..985cc6656e 100644
--- a/plugins/entity-validation/CHANGELOG.md
+++ b/plugins/entity-validation/CHANGELOG.md
@@ -1,5 +1,19 @@
# @backstage/plugin-entity-validation
+## 0.1.10-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+ - @backstage/plugin-catalog-common@1.0.16
+
## 0.1.9
### Patch Changes
diff --git a/plugins/entity-validation/api-report.md b/plugins/entity-validation/api-report.md
index 48b309cfaa..9d69458ed0 100644
--- a/plugins/entity-validation/api-report.md
+++ b/plugins/entity-validation/api-report.md
@@ -20,7 +20,6 @@ export const entityValidationPlugin: BackstagePlugin<
{
root: RouteRef;
},
- {},
{}
>;
diff --git a/plugins/entity-validation/package.json b/plugins/entity-validation/package.json
index 1a17875970..fe9ab02d0f 100644
--- a/plugins/entity-validation/package.json
+++ b/plugins/entity-validation/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-entity-validation",
- "version": "0.1.9",
+ "version": "0.1.10-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/events-backend-module-aws-sqs/CHANGELOG.md b/plugins/events-backend-module-aws-sqs/CHANGELOG.md
index e79d836d49..f893794fdb 100644
--- a/plugins/events-backend-module-aws-sqs/CHANGELOG.md
+++ b/plugins/events-backend-module-aws-sqs/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-events-backend-module-aws-sqs
+## 0.2.8-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-events-node@0.2.14-next.0
+
## 0.2.6
### Patch Changes
diff --git a/plugins/events-backend-module-aws-sqs/package.json b/plugins/events-backend-module-aws-sqs/package.json
index b3f0d379c2..c4fad0d1e0 100644
--- a/plugins/events-backend-module-aws-sqs/package.json
+++ b/plugins/events-backend-module-aws-sqs/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-events-backend-module-aws-sqs",
- "version": "0.2.6",
+ "version": "0.2.8-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/events-backend-module-azure/CHANGELOG.md b/plugins/events-backend-module-azure/CHANGELOG.md
index 5289fdb465..f4d1657b0f 100644
--- a/plugins/events-backend-module-azure/CHANGELOG.md
+++ b/plugins/events-backend-module-azure/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/plugin-events-backend-module-azure
+## 0.1.15-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/plugin-events-node@0.2.14-next.0
+
## 0.1.13
### Patch Changes
diff --git a/plugins/events-backend-module-azure/package.json b/plugins/events-backend-module-azure/package.json
index 9cb0ff81c1..07b62130a2 100644
--- a/plugins/events-backend-module-azure/package.json
+++ b/plugins/events-backend-module-azure/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-events-backend-module-azure",
- "version": "0.1.13",
+ "version": "0.1.15-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md b/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md
index c21e46c15b..4dbb0932e5 100644
--- a/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md
+++ b/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/plugin-events-backend-module-bitbucket-cloud
+## 0.1.15-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/plugin-events-node@0.2.14-next.0
+
## 0.1.13
### Patch Changes
diff --git a/plugins/events-backend-module-bitbucket-cloud/package.json b/plugins/events-backend-module-bitbucket-cloud/package.json
index d5918731d1..4011a3f496 100644
--- a/plugins/events-backend-module-bitbucket-cloud/package.json
+++ b/plugins/events-backend-module-bitbucket-cloud/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-events-backend-module-bitbucket-cloud",
- "version": "0.1.13",
+ "version": "0.1.15-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/events-backend-module-gerrit/CHANGELOG.md b/plugins/events-backend-module-gerrit/CHANGELOG.md
index d09472671a..96918cd580 100644
--- a/plugins/events-backend-module-gerrit/CHANGELOG.md
+++ b/plugins/events-backend-module-gerrit/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/plugin-events-backend-module-gerrit
+## 0.1.15-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/plugin-events-node@0.2.14-next.0
+
## 0.1.13
### Patch Changes
diff --git a/plugins/events-backend-module-gerrit/package.json b/plugins/events-backend-module-gerrit/package.json
index 9cc5f77e20..89afd8a47c 100644
--- a/plugins/events-backend-module-gerrit/package.json
+++ b/plugins/events-backend-module-gerrit/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-events-backend-module-gerrit",
- "version": "0.1.13",
+ "version": "0.1.15-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/events-backend-module-github/CHANGELOG.md b/plugins/events-backend-module-github/CHANGELOG.md
index 0fa5c1e73a..bcc3afa0ca 100644
--- a/plugins/events-backend-module-github/CHANGELOG.md
+++ b/plugins/events-backend-module-github/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-events-backend-module-github
+## 0.1.15-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/plugin-events-node@0.2.14-next.0
+
## 0.1.13
### Patch Changes
diff --git a/plugins/events-backend-module-github/package.json b/plugins/events-backend-module-github/package.json
index ac94f83f41..a85ce50dee 100644
--- a/plugins/events-backend-module-github/package.json
+++ b/plugins/events-backend-module-github/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-events-backend-module-github",
- "version": "0.1.13",
+ "version": "0.1.15-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/events-backend-module-gitlab/CHANGELOG.md b/plugins/events-backend-module-gitlab/CHANGELOG.md
index 137f700504..140b3302ac 100644
--- a/plugins/events-backend-module-gitlab/CHANGELOG.md
+++ b/plugins/events-backend-module-gitlab/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-events-backend-module-gitlab
+## 0.1.15-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/plugin-events-node@0.2.14-next.0
+
## 0.1.13
### Patch Changes
diff --git a/plugins/events-backend-module-gitlab/package.json b/plugins/events-backend-module-gitlab/package.json
index 367ff8caf2..0d8c036303 100644
--- a/plugins/events-backend-module-gitlab/package.json
+++ b/plugins/events-backend-module-gitlab/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-events-backend-module-gitlab",
- "version": "0.1.13",
+ "version": "0.1.15-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/events-backend-test-utils/CHANGELOG.md b/plugins/events-backend-test-utils/CHANGELOG.md
index de26b9b864..f98f330f5b 100644
--- a/plugins/events-backend-test-utils/CHANGELOG.md
+++ b/plugins/events-backend-test-utils/CHANGELOG.md
@@ -1,5 +1,12 @@
# @backstage/plugin-events-backend-test-utils
+## 0.1.15-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-events-node@0.2.14-next.0
+
## 0.1.13
### Patch Changes
diff --git a/plugins/events-backend-test-utils/package.json b/plugins/events-backend-test-utils/package.json
index e749eecc28..945cbc2bf2 100644
--- a/plugins/events-backend-test-utils/package.json
+++ b/plugins/events-backend-test-utils/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-events-backend-test-utils",
"description": "The plugin-events-backend-test-utils for @backstage/plugin-events-node",
- "version": "0.1.13",
+ "version": "0.1.15-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/events-backend/CHANGELOG.md b/plugins/events-backend/CHANGELOG.md
index 64fb6da65a..6fb1b224d2 100644
--- a/plugins/events-backend/CHANGELOG.md
+++ b/plugins/events-backend/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-events-backend
+## 0.2.14-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/plugin-events-node@0.2.14-next.0
+
## 0.2.12
### Patch Changes
diff --git a/plugins/events-backend/package.json b/plugins/events-backend/package.json
index 135971b91f..808ee2b0ec 100644
--- a/plugins/events-backend/package.json
+++ b/plugins/events-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-events-backend",
- "version": "0.2.12",
+ "version": "0.2.14-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/events-node/CHANGELOG.md b/plugins/events-node/CHANGELOG.md
index e458e3e1e8..327c63a925 100644
--- a/plugins/events-node/CHANGELOG.md
+++ b/plugins/events-node/CHANGELOG.md
@@ -1,5 +1,12 @@
# @backstage/plugin-events-node
+## 0.2.14-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-plugin-api@0.6.5-next.0
+
## 0.2.12
### Patch Changes
diff --git a/plugins/events-node/package.json b/plugins/events-node/package.json
index 2a27e1c200..eae224aa62 100644
--- a/plugins/events-node/package.json
+++ b/plugins/events-node/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-events-node",
"description": "The plugin-events-node module for @backstage/plugin-events-backend",
- "version": "0.2.12",
+ "version": "0.2.14-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/example-todo-list-backend/CHANGELOG.md b/plugins/example-todo-list-backend/CHANGELOG.md
index 9518234111..5dfb9268a6 100644
--- a/plugins/example-todo-list-backend/CHANGELOG.md
+++ b/plugins/example-todo-list-backend/CHANGELOG.md
@@ -1,5 +1,16 @@
# @internal/plugin-todo-list-backend
+## 1.0.18-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/errors@1.2.2
+
## 1.0.17
### Patch Changes
diff --git a/plugins/example-todo-list-backend/package.json b/plugins/example-todo-list-backend/package.json
index 27a8536c7d..2659de88bd 100644
--- a/plugins/example-todo-list-backend/package.json
+++ b/plugins/example-todo-list-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@internal/plugin-todo-list-backend",
- "version": "1.0.17",
+ "version": "1.0.18-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/example-todo-list/CHANGELOG.md b/plugins/example-todo-list/CHANGELOG.md
index 5ec4c4ea8e..9d686f4ffc 100644
--- a/plugins/example-todo-list/CHANGELOG.md
+++ b/plugins/example-todo-list/CHANGELOG.md
@@ -1,5 +1,14 @@
# @internal/plugin-todo-list
+## 1.0.18-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/theme@0.4.2
+
## 1.0.17
### Patch Changes
diff --git a/plugins/example-todo-list/api-report.md b/plugins/example-todo-list/api-report.md
index 1b7aa49a19..2feeeb903d 100644
--- a/plugins/example-todo-list/api-report.md
+++ b/plugins/example-todo-list/api-report.md
@@ -17,7 +17,6 @@ export const todoListPlugin: BackstagePlugin<
{
root: RouteRef;
},
- {},
{}
>;
diff --git a/plugins/example-todo-list/package.json b/plugins/example-todo-list/package.json
index e61aaace42..7af06dc823 100644
--- a/plugins/example-todo-list/package.json
+++ b/plugins/example-todo-list/package.json
@@ -1,6 +1,6 @@
{
"name": "@internal/plugin-todo-list",
- "version": "1.0.17",
+ "version": "1.0.18-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/explore-backend/CHANGELOG.md b/plugins/explore-backend/CHANGELOG.md
index 3baae5db72..ec8dcd45cf 100644
--- a/plugins/explore-backend/CHANGELOG.md
+++ b/plugins/explore-backend/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-explore-backend
+## 0.0.15-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-explore-common@0.0.2
+ - @backstage/plugin-search-backend-module-explore@0.1.9-next.0
+ - @backstage/plugin-search-common@1.2.6
+
## 0.0.13
### Patch Changes
diff --git a/plugins/explore-backend/package.json b/plugins/explore-backend/package.json
index 50e179a4b9..ba5995651a 100644
--- a/plugins/explore-backend/package.json
+++ b/plugins/explore-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-explore-backend",
- "version": "0.0.13",
+ "version": "0.0.15-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/explore-react/CHANGELOG.md b/plugins/explore-react/CHANGELOG.md
index 708876c580..6d45e9a689 100644
--- a/plugins/explore-react/CHANGELOG.md
+++ b/plugins/explore-react/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/plugin-explore-react
+## 0.0.32-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/plugin-explore-common@0.0.2
+
## 0.0.31
### Patch Changes
diff --git a/plugins/explore-react/package.json b/plugins/explore-react/package.json
index 09edad02d9..9282573a38 100644
--- a/plugins/explore-react/package.json
+++ b/plugins/explore-react/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-explore-react",
"description": "A frontend library for Backstage plugins that want to interact with the explore plugin",
- "version": "0.0.31",
+ "version": "0.0.32-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/explore/CHANGELOG.md b/plugins/explore/CHANGELOG.md
index 5ddd9c74ad..81041c46df 100644
--- a/plugins/explore/CHANGELOG.md
+++ b/plugins/explore/CHANGELOG.md
@@ -1,5 +1,21 @@
# @backstage/plugin-explore
+## 0.4.11-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/plugin-explore-react@0.0.32-next.0
+ - @backstage/plugin-search-react@1.7.1-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+ - @backstage/plugin-explore-common@0.0.2
+ - @backstage/plugin-search-common@1.2.6
+
## 0.4.10
### Patch Changes
diff --git a/plugins/explore/api-report.md b/plugins/explore/api-report.md
index 193efb044d..d32a133685 100644
--- a/plugins/explore/api-report.md
+++ b/plugins/explore/api-report.md
@@ -99,8 +99,7 @@ const explorePlugin: BackstagePlugin<
},
true
>;
- },
- {}
+ }
>;
export { explorePlugin };
export { explorePlugin as plugin };
diff --git a/plugins/explore/package.json b/plugins/explore/package.json
index 1ac3ab6393..e1b210fb37 100644
--- a/plugins/explore/package.json
+++ b/plugins/explore/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-explore",
"description": "A Backstage plugin for building an exploration page of your software ecosystem",
- "version": "0.4.10",
+ "version": "0.4.11-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/firehydrant/CHANGELOG.md b/plugins/firehydrant/CHANGELOG.md
index 2e5fd2ac0f..0eab08760c 100644
--- a/plugins/firehydrant/CHANGELOG.md
+++ b/plugins/firehydrant/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-firehydrant
+## 0.2.9-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+
## 0.2.8
### Patch Changes
diff --git a/plugins/firehydrant/api-report.md b/plugins/firehydrant/api-report.md
index 76ccd8f019..9eeac41576 100644
--- a/plugins/firehydrant/api-report.md
+++ b/plugins/firehydrant/api-report.md
@@ -18,7 +18,6 @@ export const firehydrantPlugin: BackstagePlugin<
{
root: RouteRef;
},
- {},
{}
>;
diff --git a/plugins/firehydrant/package.json b/plugins/firehydrant/package.json
index f94732dd23..d6b02d8323 100644
--- a/plugins/firehydrant/package.json
+++ b/plugins/firehydrant/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-firehydrant",
"description": "A Backstage plugin that integrates towards FireHydrant",
- "version": "0.2.8",
+ "version": "0.2.9-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/fossa/CHANGELOG.md b/plugins/fossa/CHANGELOG.md
index 70330dd55a..35aa7423aa 100644
--- a/plugins/fossa/CHANGELOG.md
+++ b/plugins/fossa/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-fossa
+## 0.2.57-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+
## 0.2.56
### Patch Changes
diff --git a/plugins/fossa/api-report.md b/plugins/fossa/api-report.md
index ac76ff6af6..6be878d434 100644
--- a/plugins/fossa/api-report.md
+++ b/plugins/fossa/api-report.md
@@ -31,7 +31,6 @@ export const fossaPlugin: BackstagePlugin<
{
fossaOverview: RouteRef;
},
- {},
{}
>;
```
diff --git a/plugins/fossa/package.json b/plugins/fossa/package.json
index b2eba4ece9..78c39595b4 100644
--- a/plugins/fossa/package.json
+++ b/plugins/fossa/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-fossa",
"description": "A Backstage plugin that integrates towards FOSSA",
- "version": "0.2.56",
+ "version": "0.2.57-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/gcalendar/CHANGELOG.md b/plugins/gcalendar/CHANGELOG.md
index 7eaeed8bf6..f8adef32ea 100644
--- a/plugins/gcalendar/CHANGELOG.md
+++ b/plugins/gcalendar/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-gcalendar
+## 0.3.19-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+
## 0.3.18
### Patch Changes
diff --git a/plugins/gcalendar/api-report.md b/plugins/gcalendar/api-report.md
index 3f1d42d239..f1f505fc9a 100644
--- a/plugins/gcalendar/api-report.md
+++ b/plugins/gcalendar/api-report.md
@@ -51,7 +51,6 @@ export const gcalendarPlugin: BackstagePlugin<
{
root: RouteRef;
},
- {},
{}
>;
diff --git a/plugins/gcalendar/package.json b/plugins/gcalendar/package.json
index c94f635e30..6e0166402e 100644
--- a/plugins/gcalendar/package.json
+++ b/plugins/gcalendar/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-gcalendar",
- "version": "0.3.18",
+ "version": "0.3.19-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/gcp-projects/CHANGELOG.md b/plugins/gcp-projects/CHANGELOG.md
index d79cc5cbef..4f7d8546cd 100644
--- a/plugins/gcp-projects/CHANGELOG.md
+++ b/plugins/gcp-projects/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-gcp-projects
+## 0.3.42-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/theme@0.4.2
+
## 0.3.41
### Patch Changes
diff --git a/plugins/gcp-projects/api-report.md b/plugins/gcp-projects/api-report.md
index fd156687c0..e6938485fc 100644
--- a/plugins/gcp-projects/api-report.md
+++ b/plugins/gcp-projects/api-report.md
@@ -48,7 +48,6 @@ const gcpProjectsPlugin: BackstagePlugin<
{
root: RouteRef;
},
- {},
{}
>;
export { gcpProjectsPlugin };
diff --git a/plugins/gcp-projects/package.json b/plugins/gcp-projects/package.json
index 3f26a0eeab..7c0a6f9240 100644
--- a/plugins/gcp-projects/package.json
+++ b/plugins/gcp-projects/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-gcp-projects",
"description": "A Backstage plugin that helps you manage projects in GCP",
- "version": "0.3.41",
+ "version": "0.3.42-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/git-release-manager/CHANGELOG.md b/plugins/git-release-manager/CHANGELOG.md
index 0d2ce7cd6b..58ee33695d 100644
--- a/plugins/git-release-manager/CHANGELOG.md
+++ b/plugins/git-release-manager/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-git-release-manager
+## 0.3.38-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/theme@0.4.2
+
## 0.3.37
### Patch Changes
diff --git a/plugins/git-release-manager/api-report.md b/plugins/git-release-manager/api-report.md
index a3215041f0..3e4c0847a7 100644
--- a/plugins/git-release-manager/api-report.md
+++ b/plugins/git-release-manager/api-report.md
@@ -263,7 +263,6 @@ export const gitReleaseManagerPlugin: BackstagePlugin<
{
root: RouteRef;
},
- {},
{}
>;
diff --git a/plugins/git-release-manager/package.json b/plugins/git-release-manager/package.json
index 1085649e35..64b0a65d87 100644
--- a/plugins/git-release-manager/package.json
+++ b/plugins/git-release-manager/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-git-release-manager",
"description": "A Backstage plugin that helps you manage releases in git",
- "version": "0.3.37",
+ "version": "0.3.38-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/github-actions/CHANGELOG.md b/plugins/github-actions/CHANGELOG.md
index e1ba36001e..1278f32354 100644
--- a/plugins/github-actions/CHANGELOG.md
+++ b/plugins/github-actions/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/plugin-github-actions
+## 0.6.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/integration-react@1.1.20-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+
## 0.6.5
### Patch Changes
diff --git a/plugins/github-actions/api-report.md b/plugins/github-actions/api-report.md
index e7c6114c93..887556f431 100644
--- a/plugins/github-actions/api-report.md
+++ b/plugins/github-actions/api-report.md
@@ -177,7 +177,6 @@ const githubActionsPlugin: BackstagePlugin<
{
entityContent: RouteRef;
},
- {},
{}
>;
export { githubActionsPlugin };
diff --git a/plugins/github-actions/package.json b/plugins/github-actions/package.json
index 26e6f45211..2d48f24492 100644
--- a/plugins/github-actions/package.json
+++ b/plugins/github-actions/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-github-actions",
"description": "A Backstage plugin that integrates towards GitHub Actions",
- "version": "0.6.5",
+ "version": "0.6.6-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/github-deployments/CHANGELOG.md b/plugins/github-deployments/CHANGELOG.md
index 949f6c6f7c..ba62f6bdc4 100644
--- a/plugins/github-deployments/CHANGELOG.md
+++ b/plugins/github-deployments/CHANGELOG.md
@@ -1,5 +1,19 @@
# @backstage/plugin-github-deployments
+## 0.1.56-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/integration-react@1.1.20-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+
## 0.1.55
### Patch Changes
diff --git a/plugins/github-deployments/api-report.md b/plugins/github-deployments/api-report.md
index 669bcd74ba..26bb108d86 100644
--- a/plugins/github-deployments/api-report.md
+++ b/plugins/github-deployments/api-report.md
@@ -43,7 +43,7 @@ export type GithubDeployment = {
};
// @public (undocumented)
-export const githubDeploymentsPlugin: BackstagePlugin<{}, {}, {}>;
+export const githubDeploymentsPlugin: BackstagePlugin<{}, {}>;
// @public (undocumented)
export const GithubDeploymentsTable: {
diff --git a/plugins/github-deployments/package.json b/plugins/github-deployments/package.json
index 564b20a948..71fa3a7459 100644
--- a/plugins/github-deployments/package.json
+++ b/plugins/github-deployments/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-github-deployments",
"description": "A Backstage plugin that integrates towards GitHub Deployments",
- "version": "0.1.55",
+ "version": "0.1.56-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/github-issues/CHANGELOG.md b/plugins/github-issues/CHANGELOG.md
index f38c9ba630..a20c93cdeb 100644
--- a/plugins/github-issues/CHANGELOG.md
+++ b/plugins/github-issues/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/plugin-github-issues
+## 0.2.14-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+
## 0.2.13
### Patch Changes
diff --git a/plugins/github-issues/api-report.md b/plugins/github-issues/api-report.md
index 3c7b616f82..0efa863a01 100644
--- a/plugins/github-issues/api-report.md
+++ b/plugins/github-issues/api-report.md
@@ -52,7 +52,6 @@ export const githubIssuesPlugin: BackstagePlugin<
{
root: RouteRef;
},
- {},
{}
>;
diff --git a/plugins/github-issues/package.json b/plugins/github-issues/package.json
index 8cdded424c..5b0d34effe 100644
--- a/plugins/github-issues/package.json
+++ b/plugins/github-issues/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-github-issues",
- "version": "0.2.13",
+ "version": "0.2.14-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/github-pull-requests-board/CHANGELOG.md b/plugins/github-pull-requests-board/CHANGELOG.md
index 239baaaa0b..89957b1232 100644
--- a/plugins/github-pull-requests-board/CHANGELOG.md
+++ b/plugins/github-pull-requests-board/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-github-pull-requests-board
+## 0.1.19-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+
## 0.1.18
### Patch Changes
diff --git a/plugins/github-pull-requests-board/package.json b/plugins/github-pull-requests-board/package.json
index 96cea6bd3a..c81a7c76d7 100644
--- a/plugins/github-pull-requests-board/package.json
+++ b/plugins/github-pull-requests-board/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-github-pull-requests-board",
"description": "A Backstage plugin that allows you to see all open Pull Requests for all the repositories owned by your team",
- "version": "0.1.18",
+ "version": "0.1.19-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/gitops-profiles/CHANGELOG.md b/plugins/gitops-profiles/CHANGELOG.md
index acd81f3af2..81f51796c4 100644
--- a/plugins/gitops-profiles/CHANGELOG.md
+++ b/plugins/gitops-profiles/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-gitops-profiles
+## 0.3.41-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/config@1.1.0
+ - @backstage/theme@0.4.2
+
## 0.3.40
### Patch Changes
diff --git a/plugins/gitops-profiles/api-report.md b/plugins/gitops-profiles/api-report.md
index 3dc3c9add2..97f3a9864b 100644
--- a/plugins/gitops-profiles/api-report.md
+++ b/plugins/gitops-profiles/api-report.md
@@ -124,7 +124,6 @@ const gitopsProfilesPlugin: BackstagePlugin<
}>;
createPage: RouteRef;
},
- {},
{}
>;
export { gitopsProfilesPlugin };
diff --git a/plugins/gitops-profiles/package.json b/plugins/gitops-profiles/package.json
index db187a7964..56364215c5 100644
--- a/plugins/gitops-profiles/package.json
+++ b/plugins/gitops-profiles/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-gitops-profiles",
"description": "A Backstage plugin that helps you manage GitOps profiles",
- "version": "0.3.40",
+ "version": "0.3.41-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/gocd/CHANGELOG.md b/plugins/gocd/CHANGELOG.md
index c25eca242d..705ff97e0a 100644
--- a/plugins/gocd/CHANGELOG.md
+++ b/plugins/gocd/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-gocd
+## 0.1.31-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+
## 0.1.30
### Patch Changes
diff --git a/plugins/gocd/api-report.md b/plugins/gocd/api-report.md
index df93b5f2eb..de2c76e06b 100644
--- a/plugins/gocd/api-report.md
+++ b/plugins/gocd/api-report.md
@@ -15,7 +15,7 @@ export const EntityGoCdContent: () => JSX.Element;
export const GOCD_PIPELINES_ANNOTATION = 'gocd.org/pipelines';
// @public
-export const gocdPlugin: BackstagePlugin<{}, {}, {}>;
+export const gocdPlugin: BackstagePlugin<{}, {}>;
// @public
export const isGoCdAvailable: (entity: Entity) => boolean;
diff --git a/plugins/gocd/package.json b/plugins/gocd/package.json
index 4d195ffa31..4d6f41ec62 100644
--- a/plugins/gocd/package.json
+++ b/plugins/gocd/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-gocd",
"description": "A Backstage plugin that integrates towards GoCD",
- "version": "0.1.30",
+ "version": "0.1.31-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/graphiql/CHANGELOG.md b/plugins/graphiql/CHANGELOG.md
index c03f2e3c8f..429ca2496b 100644
--- a/plugins/graphiql/CHANGELOG.md
+++ b/plugins/graphiql/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-graphiql
+## 0.2.55-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/frontend-plugin-api@0.1.1-next.0
+ - @backstage/theme@0.4.2
+
## 0.2.54
### Patch Changes
diff --git a/plugins/graphiql/api-report.md b/plugins/graphiql/api-report.md
index cbecc37006..984b90ae88 100644
--- a/plugins/graphiql/api-report.md
+++ b/plugins/graphiql/api-report.md
@@ -44,7 +44,7 @@ export const GraphiQLIcon: IconComponent;
export const GraphiQLPage: () => JSX_2.Element;
// @public (undocumented)
-const graphiqlPlugin: BackstagePlugin<{}, {}, {}>;
+const graphiqlPlugin: BackstagePlugin<{}, {}>;
export { graphiqlPlugin };
export { graphiqlPlugin as plugin };
diff --git a/plugins/graphiql/package.json b/plugins/graphiql/package.json
index 100e14e7d0..15fc394ba0 100644
--- a/plugins/graphiql/package.json
+++ b/plugins/graphiql/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-graphiql",
"description": "Backstage plugin for browsing GraphQL APIs",
- "version": "0.2.54",
+ "version": "0.2.55-next.0",
"publishConfig": {
"access": "public"
},
diff --git a/plugins/graphql-backend/CHANGELOG.md b/plugins/graphql-backend/CHANGELOG.md
index 36d30d831f..fbe80e1091 100644
--- a/plugins/graphql-backend/CHANGELOG.md
+++ b/plugins/graphql-backend/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-graphql-backend
+## 0.1.43-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/plugin-catalog-graphql@0.3.23
+
## 0.1.41
### Patch Changes
diff --git a/plugins/graphql-backend/package.json b/plugins/graphql-backend/package.json
index d6316d3599..11fd377905 100644
--- a/plugins/graphql-backend/package.json
+++ b/plugins/graphql-backend/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-graphql-backend",
"description": "An experimental Backstage backend plugin for GraphQL",
- "version": "0.1.41",
+ "version": "0.1.43-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/graphql-voyager/CHANGELOG.md b/plugins/graphql-voyager/CHANGELOG.md
index d521429402..ef1eb4a5c1 100644
--- a/plugins/graphql-voyager/CHANGELOG.md
+++ b/plugins/graphql-voyager/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-graphql-voyager
+## 0.1.8-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/theme@0.4.2
+
## 0.1.7
### Patch Changes
diff --git a/plugins/graphql-voyager/api-report.md b/plugins/graphql-voyager/api-report.md
index 257a8ca7b7..e926bbd193 100644
--- a/plugins/graphql-voyager/api-report.md
+++ b/plugins/graphql-voyager/api-report.md
@@ -59,7 +59,6 @@ export const graphqlVoyagerPlugin: BackstagePlugin<
{
root: RouteRef;
},
- {},
{}
>;
diff --git a/plugins/graphql-voyager/package.json b/plugins/graphql-voyager/package.json
index 62d4e7be23..24901e8c17 100644
--- a/plugins/graphql-voyager/package.json
+++ b/plugins/graphql-voyager/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-graphql-voyager",
"description": "Backstage plugin for GraphQL Voyager",
- "version": "0.1.7",
+ "version": "0.1.8-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/home-react/CHANGELOG.md b/plugins/home-react/CHANGELOG.md
index c3dd8aefe6..197ba61e80 100644
--- a/plugins/home-react/CHANGELOG.md
+++ b/plugins/home-react/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/plugin-home-react
+## 0.1.4-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+
## 0.1.3
### Patch Changes
diff --git a/plugins/home-react/package.json b/plugins/home-react/package.json
index 9c7e3bf1db..f01adae751 100644
--- a/plugins/home-react/package.json
+++ b/plugins/home-react/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-home-react",
"description": "A Backstage plugin that contains react components helps you build a home page",
- "version": "0.1.3",
+ "version": "0.1.4-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/home/CHANGELOG.md b/plugins/home/CHANGELOG.md
index 841e9ea121..f8bd2aab50 100644
--- a/plugins/home/CHANGELOG.md
+++ b/plugins/home/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/plugin-home
+## 0.5.9-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/config@1.1.0
+ - @backstage/plugin-home-react@0.1.4-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+
## 0.5.8
### Patch Changes
diff --git a/plugins/home/api-report.md b/plugins/home/api-report.md
index 450bc054fa..497b11224d 100644
--- a/plugins/home/api-report.md
+++ b/plugins/home/api-report.md
@@ -137,7 +137,6 @@ export const homePlugin: BackstagePlugin<
{
root: RouteRef;
},
- {},
{}
>;
diff --git a/plugins/home/package.json b/plugins/home/package.json
index 1f4fa90148..bba62e9706 100644
--- a/plugins/home/package.json
+++ b/plugins/home/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-home",
"description": "A Backstage plugin that helps you build a home page",
- "version": "0.5.8",
+ "version": "0.5.9-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/ilert/CHANGELOG.md b/plugins/ilert/CHANGELOG.md
index 45fe31099a..02d39b0594 100644
--- a/plugins/ilert/CHANGELOG.md
+++ b/plugins/ilert/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-ilert
+## 0.2.14-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+
## 0.2.13
### Patch Changes
diff --git a/plugins/ilert/api-report.md b/plugins/ilert/api-report.md
index b2081e049e..821a3a6bd0 100644
--- a/plugins/ilert/api-report.md
+++ b/plugins/ilert/api-report.md
@@ -539,7 +539,6 @@ const ilertPlugin: BackstagePlugin<
{
root: RouteRef;
},
- {},
{}
>;
export { ilertPlugin };
diff --git a/plugins/ilert/package.json b/plugins/ilert/package.json
index 34af0e4a5a..83cde2ff54 100644
--- a/plugins/ilert/package.json
+++ b/plugins/ilert/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-ilert",
"description": "A Backstage plugin that integrates towards iLert",
- "version": "0.2.13",
+ "version": "0.2.14-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/jenkins-backend/CHANGELOG.md b/plugins/jenkins-backend/CHANGELOG.md
index f1ded9df99..4bcb34c73c 100644
--- a/plugins/jenkins-backend/CHANGELOG.md
+++ b/plugins/jenkins-backend/CHANGELOG.md
@@ -1,5 +1,20 @@
# @backstage/plugin-jenkins-backend
+## 0.2.8-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/plugin-jenkins-common@0.1.19
+ - @backstage/plugin-permission-common@0.7.8
+ - @backstage/plugin-permission-node@0.7.16-next.0
+
## 0.2.6
### Patch Changes
diff --git a/plugins/jenkins-backend/package.json b/plugins/jenkins-backend/package.json
index 542907781e..717d94733d 100644
--- a/plugins/jenkins-backend/package.json
+++ b/plugins/jenkins-backend/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-jenkins-backend",
"description": "A Backstage backend plugin that integrates towards Jenkins",
- "version": "0.2.6",
+ "version": "0.2.8-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/jenkins/CHANGELOG.md b/plugins/jenkins/CHANGELOG.md
index a43b0f7031..66f3d3b026 100644
--- a/plugins/jenkins/CHANGELOG.md
+++ b/plugins/jenkins/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/plugin-jenkins
+## 0.8.7-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+ - @backstage/plugin-jenkins-common@0.1.19
+
## 0.8.6
### Patch Changes
diff --git a/plugins/jenkins/api-report.md b/plugins/jenkins/api-report.md
index 0782f0abd2..611a56cd5f 100644
--- a/plugins/jenkins/api-report.md
+++ b/plugins/jenkins/api-report.md
@@ -99,7 +99,6 @@ const jenkinsPlugin: BackstagePlugin<
{
entityContent: RouteRef;
},
- {},
{}
>;
export { jenkinsPlugin };
diff --git a/plugins/jenkins/package.json b/plugins/jenkins/package.json
index b936aa80b3..e3042ccb53 100644
--- a/plugins/jenkins/package.json
+++ b/plugins/jenkins/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-jenkins",
"description": "A Backstage plugin that integrates towards Jenkins",
- "version": "0.8.6",
+ "version": "0.8.7-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/kafka-backend/CHANGELOG.md b/plugins/kafka-backend/CHANGELOG.md
index 63abf0bcc5..d5e7101f55 100644
--- a/plugins/kafka-backend/CHANGELOG.md
+++ b/plugins/kafka-backend/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-kafka-backend
+## 0.3.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+
## 0.3.0
### Minor Changes
diff --git a/plugins/kafka-backend/package.json b/plugins/kafka-backend/package.json
index a27f72fc9a..7afdb219ab 100644
--- a/plugins/kafka-backend/package.json
+++ b/plugins/kafka-backend/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-kafka-backend",
"description": "A Backstage backend plugin that integrates towards Kafka",
- "version": "0.3.0",
+ "version": "0.3.2-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/kafka/CHANGELOG.md b/plugins/kafka/CHANGELOG.md
index b4acb676c3..d741d0fe2d 100644
--- a/plugins/kafka/CHANGELOG.md
+++ b/plugins/kafka/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-kafka
+## 0.3.25-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/config@1.1.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+
## 0.3.24
### Patch Changes
diff --git a/plugins/kafka/api-report.md b/plugins/kafka/api-report.md
index 990a4da295..ba0c9a3820 100644
--- a/plugins/kafka/api-report.md
+++ b/plugins/kafka/api-report.md
@@ -28,7 +28,6 @@ const kafkaPlugin: BackstagePlugin<
{
entityContent: RouteRef;
},
- {},
{}
>;
export { kafkaPlugin };
diff --git a/plugins/kafka/package.json b/plugins/kafka/package.json
index ae8e602ce5..b48ee3322e 100644
--- a/plugins/kafka/package.json
+++ b/plugins/kafka/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-kafka",
"description": "A Backstage plugin that integrates towards Kafka",
- "version": "0.3.24",
+ "version": "0.3.25-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/kubernetes-backend/CHANGELOG.md b/plugins/kubernetes-backend/CHANGELOG.md
index 710d104033..8fc7a281db 100644
--- a/plugins/kubernetes-backend/CHANGELOG.md
+++ b/plugins/kubernetes-backend/CHANGELOG.md
@@ -1,5 +1,24 @@
# @backstage/plugin-kubernetes-backend
+## 0.12.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/integration-aws-node@0.1.6
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+ - @backstage/plugin-kubernetes-common@0.6.6
+ - @backstage/plugin-permission-common@0.7.8
+ - @backstage/plugin-permission-node@0.7.16-next.0
+
## 0.12.0
### Minor Changes
diff --git a/plugins/kubernetes-backend/package.json b/plugins/kubernetes-backend/package.json
index dce7b512fd..54c5a35201 100644
--- a/plugins/kubernetes-backend/package.json
+++ b/plugins/kubernetes-backend/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-kubernetes-backend",
"description": "A Backstage backend plugin that integrates towards Kubernetes",
- "version": "0.12.0",
+ "version": "0.12.2-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/kubernetes-common/api-report.md b/plugins/kubernetes-common/api-report.md
index 051293f37f..0840278394 100644
--- a/plugins/kubernetes-common/api-report.md
+++ b/plugins/kubernetes-common/api-report.md
@@ -5,7 +5,9 @@
```ts
import { BasicPermission } from '@backstage/plugin-permission-common';
import { Entity } from '@backstage/catalog-model';
+import { FetchResponse as FetchResponse_2 } from '@backstage/plugin-kubernetes-common';
import type { JsonObject } from '@backstage/types';
+import { ObjectsByEntityResponse as ObjectsByEntityResponse_2 } from '@backstage/plugin-kubernetes-common';
import { PodStatus } from '@kubernetes/client-node';
import { V1ConfigMap } from '@kubernetes/client-node';
import { V1CronJob } from '@kubernetes/client-node';
@@ -174,6 +176,67 @@ export interface DeploymentFetchResponse {
type: 'deployments';
}
+// @public (undocumented)
+export interface DeploymentResources {
+ // (undocumented)
+ deployments: V1Deployment[];
+ // (undocumented)
+ horizontalPodAutoscalers: V1HorizontalPodAutoscaler[];
+ // (undocumented)
+ pods: V1Pod[];
+ // (undocumented)
+ replicaSets: V1ReplicaSet[];
+}
+
+// @public
+export interface DetectedError {
+ // (undocumented)
+ message: string;
+ // (undocumented)
+ occurrenceCount: number;
+ // (undocumented)
+ proposedFix?: ProposedFix;
+ // (undocumented)
+ severity: ErrorSeverity;
+ // (undocumented)
+ sourceRef: ResourceRef;
+ // (undocumented)
+ type: string;
+}
+
+// @public
+export type DetectedErrorsByCluster = Map;
+
+// @public
+export const detectErrors: (
+ objects: ObjectsByEntityResponse_2,
+) => DetectedErrorsByCluster;
+
+// @public (undocumented)
+export interface DocsSolution extends ProposedFixBase {
+ // (undocumented)
+ docsLink: string;
+ // (undocumented)
+ type: 'docs';
+}
+
+// @public (undocumented)
+export interface ErrorMapper {
+ // (undocumented)
+ detectErrors: (resource: T) => DetectedError[];
+}
+
+// @public
+export type ErrorSeverity = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10;
+
+// @public (undocumented)
+export interface EventsSolution extends ProposedFixBase {
+ // (undocumented)
+ podName: string;
+ // (undocumented)
+ type: 'events';
+}
+
// @public (undocumented)
export type FetchResponse =
| PodFetchResponse
@@ -191,6 +254,29 @@ export type FetchResponse =
| DaemonSetsFetchResponse
| PodStatusFetchResponse;
+// @public (undocumented)
+export interface GroupedResponses extends DeploymentResources {
+ // (undocumented)
+ configMaps: V1ConfigMap[];
+ // (undocumented)
+ cronJobs: V1CronJob[];
+ // (undocumented)
+ customResources: any[];
+ // (undocumented)
+ ingresses: V1Ingress[];
+ // (undocumented)
+ jobs: V1Job[];
+ // (undocumented)
+ services: V1Service[];
+ // (undocumented)
+ statefulsets: V1StatefulSet[];
+}
+
+// @public (undocumented)
+export const groupResponses: (
+ fetchResponse: FetchResponse_2[],
+) => GroupedResponses;
+
// @public (undocumented)
export interface HorizontalPodAutoscalersFetchResponse {
// (undocumented)
@@ -251,6 +337,14 @@ export interface LimitRangeFetchResponse {
type: 'limitranges';
}
+// @public (undocumented)
+export interface LogSolution extends ProposedFixBase {
+ // (undocumented)
+ container: string;
+ // (undocumented)
+ type: 'logs';
+}
+
// @public (undocumented)
export interface ObjectsByEntityResponse {
// (undocumented)
@@ -273,6 +367,19 @@ export interface PodStatusFetchResponse {
type: 'podstatus';
}
+// @public (undocumented)
+export type ProposedFix = LogSolution | DocsSolution | EventsSolution;
+
+// @public (undocumented)
+export interface ProposedFixBase {
+ // (undocumented)
+ actions: string[];
+ // (undocumented)
+ errorType: string;
+ // (undocumented)
+ rootCauseExplanation: string;
+}
+
// @public (undocumented)
export interface RawFetchError {
// (undocumented)
@@ -289,6 +396,18 @@ export interface ReplicaSetsFetchResponse {
type: 'replicasets';
}
+// @public
+export interface ResourceRef {
+ // (undocumented)
+ apiGroup: string;
+ // (undocumented)
+ kind: string;
+ // (undocumented)
+ name: string;
+ // (undocumented)
+ namespace: string;
+}
+
// @public (undocumented)
export interface ServiceFetchResponse {
// (undocumented)
diff --git a/plugins/kubernetes-common/package.json b/plugins/kubernetes-common/package.json
index b563cbff4e..99d38b803e 100644
--- a/plugins/kubernetes-common/package.json
+++ b/plugins/kubernetes-common/package.json
@@ -40,11 +40,20 @@
},
"dependencies": {
"@backstage/catalog-model": "workspace:^",
+ "@backstage/core-plugin-api": "workspace:^",
+ "@backstage/errors": "workspace:^",
"@backstage/plugin-permission-common": "workspace:^",
- "@kubernetes/client-node": "0.18.1"
+ "@backstage/types": "workspace:^",
+ "@kubernetes/client-node": "0.18.1",
+ "kubernetes-models": "^4.3.1",
+ "lodash": "^4.17.21",
+ "luxon": "^3.0.0"
},
"devDependencies": {
- "@backstage/cli": "workspace:^"
+ "@backstage/cli": "workspace:^",
+ "@backstage/core-app-api": "workspace:^",
+ "@backstage/test-utils": "workspace:^",
+ "msw": "^1.3.1"
},
"jest": {
"roots": [
diff --git a/plugins/kubernetes/src/error-detection/__fixtures__/deploy-bad.json b/plugins/kubernetes-common/src/error-detection/__fixtures__/deploy-bad.json
similarity index 100%
rename from plugins/kubernetes/src/error-detection/__fixtures__/deploy-bad.json
rename to plugins/kubernetes-common/src/error-detection/__fixtures__/deploy-bad.json
diff --git a/plugins/kubernetes/src/error-detection/__fixtures__/deploy-healthy.json b/plugins/kubernetes-common/src/error-detection/__fixtures__/deploy-healthy.json
similarity index 100%
rename from plugins/kubernetes/src/error-detection/__fixtures__/deploy-healthy.json
rename to plugins/kubernetes-common/src/error-detection/__fixtures__/deploy-healthy.json
diff --git a/plugins/kubernetes/src/error-detection/__fixtures__/hpa-healthy.json b/plugins/kubernetes-common/src/error-detection/__fixtures__/hpa-healthy.json
similarity index 100%
rename from plugins/kubernetes/src/error-detection/__fixtures__/hpa-healthy.json
rename to plugins/kubernetes-common/src/error-detection/__fixtures__/hpa-healthy.json
diff --git a/plugins/kubernetes/src/error-detection/__fixtures__/hpa-maxed-out.json b/plugins/kubernetes-common/src/error-detection/__fixtures__/hpa-maxed-out.json
similarity index 100%
rename from plugins/kubernetes/src/error-detection/__fixtures__/hpa-maxed-out.json
rename to plugins/kubernetes-common/src/error-detection/__fixtures__/hpa-maxed-out.json
diff --git a/plugins/kubernetes/src/error-detection/__fixtures__/pod-crashing.json b/plugins/kubernetes-common/src/error-detection/__fixtures__/pod-crashing.json
similarity index 100%
rename from plugins/kubernetes/src/error-detection/__fixtures__/pod-crashing.json
rename to plugins/kubernetes-common/src/error-detection/__fixtures__/pod-crashing.json
diff --git a/plugins/kubernetes/src/error-detection/__fixtures__/pod-missing-cm.json b/plugins/kubernetes-common/src/error-detection/__fixtures__/pod-missing-cm.json
similarity index 100%
rename from plugins/kubernetes/src/error-detection/__fixtures__/pod-missing-cm.json
rename to plugins/kubernetes-common/src/error-detection/__fixtures__/pod-missing-cm.json
diff --git a/plugins/kubernetes/src/components/Pods/__fixtures__/pod.json b/plugins/kubernetes-common/src/error-detection/__fixtures__/pod.json
similarity index 100%
rename from plugins/kubernetes/src/components/Pods/__fixtures__/pod.json
rename to plugins/kubernetes-common/src/error-detection/__fixtures__/pod.json
diff --git a/plugins/kubernetes/src/error-detection/common.ts b/plugins/kubernetes-common/src/error-detection/common.ts
similarity index 100%
rename from plugins/kubernetes/src/error-detection/common.ts
rename to plugins/kubernetes-common/src/error-detection/common.ts
diff --git a/plugins/kubernetes/src/error-detection/deployments.ts b/plugins/kubernetes-common/src/error-detection/deployments.ts
similarity index 100%
rename from plugins/kubernetes/src/error-detection/deployments.ts
rename to plugins/kubernetes-common/src/error-detection/deployments.ts
diff --git a/plugins/kubernetes/src/error-detection/error-detection.test.ts b/plugins/kubernetes-common/src/error-detection/error-detection.test.ts
similarity index 100%
rename from plugins/kubernetes/src/error-detection/error-detection.test.ts
rename to plugins/kubernetes-common/src/error-detection/error-detection.test.ts
diff --git a/plugins/kubernetes/src/error-detection/error-detection.ts b/plugins/kubernetes-common/src/error-detection/error-detection.ts
similarity index 97%
rename from plugins/kubernetes/src/error-detection/error-detection.ts
rename to plugins/kubernetes-common/src/error-detection/error-detection.ts
index c33de18b80..a3a4d58d9e 100644
--- a/plugins/kubernetes/src/error-detection/error-detection.ts
+++ b/plugins/kubernetes-common/src/error-detection/error-detection.ts
@@ -16,7 +16,7 @@
import { DetectedError, DetectedErrorsByCluster } from './types';
import { ObjectsByEntityResponse } from '@backstage/plugin-kubernetes-common';
-import { groupResponses } from '../utils/response';
+import { groupResponses } from '../util';
import { detectErrorsInPods } from './pods';
import { detectErrorsInDeployments } from './deployments';
import { detectErrorsInHpa } from './hpas';
diff --git a/plugins/kubernetes/src/error-detection/hpas.ts b/plugins/kubernetes-common/src/error-detection/hpas.ts
similarity index 100%
rename from plugins/kubernetes/src/error-detection/hpas.ts
rename to plugins/kubernetes-common/src/error-detection/hpas.ts
diff --git a/plugins/catalog-customized/src/index.ts b/plugins/kubernetes-common/src/error-detection/index.ts
similarity index 88%
rename from plugins/catalog-customized/src/index.ts
rename to plugins/kubernetes-common/src/error-detection/index.ts
index cc8aefeaa6..0b79b023c2 100644
--- a/plugins/catalog-customized/src/index.ts
+++ b/plugins/kubernetes-common/src/error-detection/index.ts
@@ -13,6 +13,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-import './plugin';
-export * from '@backstage/plugin-catalog';
+export * from './types';
+export { detectErrors } from './error-detection';
diff --git a/plugins/kubernetes/src/error-detection/pods.ts b/plugins/kubernetes-common/src/error-detection/pods.ts
similarity index 100%
rename from plugins/kubernetes/src/error-detection/pods.ts
rename to plugins/kubernetes-common/src/error-detection/pods.ts
diff --git a/plugins/kubernetes/src/error-detection/types.ts b/plugins/kubernetes-common/src/error-detection/types.ts
similarity index 93%
rename from plugins/kubernetes/src/error-detection/types.ts
rename to plugins/kubernetes-common/src/error-detection/types.ts
index 4148056171..bf918bbacb 100644
--- a/plugins/kubernetes/src/error-detection/types.ts
+++ b/plugins/kubernetes-common/src/error-detection/types.ts
@@ -54,29 +54,35 @@ export interface DetectedError {
occurrenceCount: number;
}
+/** @public */
export type ProposedFix = LogSolution | DocsSolution | EventsSolution;
-interface ProposedFixBase {
+/** @public */
+export interface ProposedFixBase {
errorType: string;
rootCauseExplanation: string;
actions: string[];
}
+/** @public */
export interface LogSolution extends ProposedFixBase {
type: 'logs';
container: string;
}
+/** @public */
export interface DocsSolution extends ProposedFixBase {
type: 'docs';
docsLink: string;
}
+/** @public */
export interface EventsSolution extends ProposedFixBase {
type: 'events';
podName: string;
}
+/** @public */
export interface ErrorMapper {
detectErrors: (resource: T) => DetectedError[];
}
diff --git a/plugins/kubernetes-common/src/index.ts b/plugins/kubernetes-common/src/index.ts
index d5cf8dcf61..6704242383 100644
--- a/plugins/kubernetes-common/src/index.ts
+++ b/plugins/kubernetes-common/src/index.ts
@@ -26,3 +26,5 @@ export {
kubernetesProxyPermission,
kubernetesPermissions,
} from './permissions';
+export * from './error-detection';
+export * from './util';
diff --git a/plugins/kubernetes-common/src/types.ts b/plugins/kubernetes-common/src/types.ts
index feb213d520..9648293432 100644
--- a/plugins/kubernetes-common/src/types.ts
+++ b/plugins/kubernetes-common/src/types.ts
@@ -262,3 +262,22 @@ export interface ClientPodStatus {
memory: ClientCurrentResourceUsage;
containers: ClientContainerStatus[];
}
+
+/** @public */
+export interface DeploymentResources {
+ pods: V1Pod[];
+ replicaSets: V1ReplicaSet[];
+ deployments: V1Deployment[];
+ horizontalPodAutoscalers: V1HorizontalPodAutoscaler[];
+}
+
+/** @public */
+export interface GroupedResponses extends DeploymentResources {
+ services: V1Service[];
+ configMaps: V1ConfigMap[];
+ ingresses: V1Ingress[];
+ jobs: V1Job[];
+ cronJobs: V1CronJob[];
+ customResources: any[];
+ statefulsets: V1StatefulSet[];
+}
diff --git a/plugins/kubernetes/src/components/Cluster/index.ts b/plugins/kubernetes-common/src/util/index.ts
similarity index 94%
rename from plugins/kubernetes/src/components/Cluster/index.ts
rename to plugins/kubernetes-common/src/util/index.ts
index dc9df63d42..1cc287df08 100644
--- a/plugins/kubernetes/src/components/Cluster/index.ts
+++ b/plugins/kubernetes-common/src/util/index.ts
@@ -13,4 +13,5 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-export { Cluster } from './Cluster';
+
+export * from './response';
diff --git a/plugins/kubernetes/src/utils/response.ts b/plugins/kubernetes-common/src/util/response.ts
similarity index 95%
rename from plugins/kubernetes/src/utils/response.ts
rename to plugins/kubernetes-common/src/util/response.ts
index 894b881f22..a86d90f780 100644
--- a/plugins/kubernetes/src/utils/response.ts
+++ b/plugins/kubernetes-common/src/util/response.ts
@@ -15,12 +15,13 @@
*/
import { FetchResponse } from '@backstage/plugin-kubernetes-common';
-import { GroupedResponses } from '../types/types';
+import { GroupedResponses } from '../types';
-// TODO this could probably be a lodash groupBy
+/** @public */
export const groupResponses = (
fetchResponse: FetchResponse[],
): GroupedResponses => {
+ // TODO this could probably be a lodash groupBy
return fetchResponse.reduce(
(prev, next) => {
switch (next.type) {
diff --git a/plugins/kubernetes-react/.eslintrc.js b/plugins/kubernetes-react/.eslintrc.js
new file mode 100644
index 0000000000..e2a53a6ad2
--- /dev/null
+++ b/plugins/kubernetes-react/.eslintrc.js
@@ -0,0 +1 @@
+module.exports = require('@backstage/cli/config/eslint-factory')(__dirname);
diff --git a/plugins/kubernetes-react/README.md b/plugins/kubernetes-react/README.md
new file mode 100644
index 0000000000..02963c2e0a
--- /dev/null
+++ b/plugins/kubernetes-react/README.md
@@ -0,0 +1,5 @@
+# @backstage/plugin-kubernetes-react
+
+Welcome to the web library package for the kubernetes-react plugin!
+
+_This plugin was created through the Backstage CLI_
diff --git a/plugins/kubernetes-react/api-report.md b/plugins/kubernetes-react/api-report.md
new file mode 100644
index 0000000000..e182524426
--- /dev/null
+++ b/plugins/kubernetes-react/api-report.md
@@ -0,0 +1,751 @@
+## API Report File for "@backstage/plugin-kubernetes-react"
+
+> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).
+
+```ts
+import { ApiRef } from '@backstage/core-plugin-api';
+import { AsyncState } from 'react-use/lib/useAsyncFn';
+import { ClientContainerStatus } from '@backstage/plugin-kubernetes-common';
+import { ClientPodStatus } from '@backstage/plugin-kubernetes-common';
+import { ClusterAttributes } from '@backstage/plugin-kubernetes-common';
+import { ClusterObjects } from '@backstage/plugin-kubernetes-common';
+import { CustomObjectsByEntityRequest } from '@backstage/plugin-kubernetes-common';
+import { CustomResourceMatcher } from '@backstage/plugin-kubernetes-common';
+import { DetectedError } from '@backstage/plugin-kubernetes-common';
+import { DetectedErrorsByCluster } from '@backstage/plugin-kubernetes-common';
+import { DiscoveryApi } from '@backstage/core-plugin-api';
+import { Entity } from '@backstage/catalog-model';
+import { Event as Event_2 } from 'kubernetes-models/v1';
+import { GroupedResponses } from '@backstage/plugin-kubernetes-common';
+import { IContainer } from 'kubernetes-models/v1';
+import { IContainerStatus } from 'kubernetes-models/v1';
+import { IdentityApi } from '@backstage/core-plugin-api';
+import { IIoK8sApimachineryPkgApisMetaV1ObjectMeta } from '@kubernetes-models/apimachinery/apis/meta/v1/ObjectMeta';
+import { IObjectMeta } from '@kubernetes-models/apimachinery/apis/meta/v1/ObjectMeta';
+import { KubernetesRequestBody } from '@backstage/plugin-kubernetes-common';
+import { OAuthApi } from '@backstage/core-plugin-api';
+import { ObjectsByEntityResponse } from '@backstage/plugin-kubernetes-common';
+import { OpenIdConnectApi } from '@backstage/core-plugin-api';
+import { Pod } from 'kubernetes-models/v1';
+import { Pod as Pod_2 } from 'kubernetes-models/v1/Pod';
+import { default as React_2 } from 'react';
+import * as React_3 from 'react';
+import { TypeMeta } from '@kubernetes-models/base';
+import { V1HorizontalPodAutoscaler } from '@kubernetes/client-node';
+import { V1Job } from '@kubernetes/client-node';
+import { V1ObjectMeta } from '@kubernetes/client-node';
+import { V1Pod } from '@kubernetes/client-node';
+import { WorkloadsByEntityRequest } from '@backstage/plugin-kubernetes-common';
+
+// @public (undocumented)
+export class AksKubernetesAuthProvider implements KubernetesAuthProvider {
+ constructor(microsoftAuthApi: OAuthApi);
+ // (undocumented)
+ decorateRequestBodyForAuth(
+ requestBody: KubernetesRequestBody,
+ ): Promise;
+ // (undocumented)
+ getCredentials(): Promise<{
+ token?: string;
+ }>;
+}
+
+// @public
+export const Cluster: ({
+ clusterObjects,
+ podsWithErrors,
+}: ClusterProps) => React_2.JSX.Element;
+
+// @public (undocumented)
+export const ClusterContext: React_2.Context;
+
+// @public
+export type ClusterProps = {
+ clusterObjects: ClusterObjects;
+ podsWithErrors: Set;
+ children?: React_2.ReactNode;
+};
+
+// @public
+export const ContainerCard: React_2.FC;
+
+// @public
+export interface ContainerCardProps {
+ // (undocumented)
+ containerMetrics?: ClientContainerStatus;
+ // (undocumented)
+ containerSpec?: IContainer;
+ // (undocumented)
+ containerStatus: IContainerStatus;
+ // (undocumented)
+ podScope: PodScope;
+}
+
+// @public
+export interface ContainerScope extends PodScope {
+ // (undocumented)
+ containerName: string;
+}
+
+// @public (undocumented)
+export const CronJobsAccordions: ({}: CronJobsAccordionsProps) => React_2.JSX.Element;
+
+// @public (undocumented)
+export type CronJobsAccordionsProps = {
+ children?: React_2.ReactNode;
+};
+
+// @public (undocumented)
+export const CustomResources: ({}: CustomResourcesProps) => React_2.JSX.Element;
+
+// @public (undocumented)
+export interface CustomResourcesProps {
+ // (undocumented)
+ children?: React_2.ReactNode;
+}
+
+// @public
+export const DetectedErrorsContext: React_2.Context;
+
+// @public
+export const ErrorList: ({
+ podAndErrors,
+}: ErrorListProps) => React_2.JSX.Element;
+
+// @public
+export interface ErrorListProps {
+ // (undocumented)
+ podAndErrors: PodAndErrors[];
+}
+
+// @public (undocumented)
+export type ErrorMatcher = {
+ metadata?: IIoK8sApimachineryPkgApisMetaV1ObjectMeta;
+} & TypeMeta;
+
+// @public (undocumented)
+export const ErrorPanel: ({
+ entityName,
+ errorMessage,
+ clustersWithErrors,
+}: ErrorPanelProps) => React_2.JSX.Element;
+
+// @public (undocumented)
+export type ErrorPanelProps = {
+ entityName: string;
+ errorMessage?: string;
+ clustersWithErrors?: ClusterObjects[];
+ children?: React_2.ReactNode;
+};
+
+// @public (undocumented)
+export const ErrorReporting: ({
+ detectedErrors,
+}: ErrorReportingProps) => React_3.JSX.Element;
+
+// @public (undocumented)
+export type ErrorReportingProps = {
+ detectedErrors: DetectedErrorsByCluster;
+};
+
+// @public
+export const Events: ({
+ involvedObjectName,
+ namespace,
+ clusterName,
+ warningEventsOnly,
+}: EventsProps) => React_2.JSX.Element;
+
+// @public
+export const EventsContent: ({
+ events,
+ warningEventsOnly,
+}: EventsContentProps) => React_2.JSX.Element;
+
+// @public
+export interface EventsContentProps {
+ // (undocumented)
+ events: Event_2[];
+ // (undocumented)
+ warningEventsOnly?: boolean;
+}
+
+// @public
+export interface EventsOptions {
+ // (undocumented)
+ clusterName: string;
+ // (undocumented)
+ involvedObjectName: string;
+ // (undocumented)
+ namespace: string;
+}
+
+// @public
+export interface EventsProps {
+ // (undocumented)
+ clusterName: string;
+ // (undocumented)
+ involvedObjectName: string;
+ // (undocumented)
+ namespace: string;
+ // (undocumented)
+ warningEventsOnly?: boolean;
+}
+
+// @public
+export const FixDialog: React_2.FC;
+
+// @public
+export interface FixDialogProps {
+ // (undocumented)
+ clusterName: string;
+ // (undocumented)
+ error: DetectedError;
+ // (undocumented)
+ open?: boolean;
+ // (undocumented)
+ pod: Pod_2;
+}
+
+// @public (undocumented)
+export class GoogleKubernetesAuthProvider implements KubernetesAuthProvider {
+ constructor(authProvider: OAuthApi);
+ // (undocumented)
+ authProvider: OAuthApi;
+ // (undocumented)
+ decorateRequestBodyForAuth(
+ requestBody: KubernetesRequestBody,
+ ): Promise;
+ // (undocumented)
+ getCredentials(): Promise<{
+ token: string;
+ }>;
+}
+
+// @public (undocumented)
+export const GroupedResponsesContext: React_2.Context;
+
+// @public (undocumented)
+export const HorizontalPodAutoscalerDrawer: (props: {
+ hpa: V1HorizontalPodAutoscaler;
+ expanded?: boolean;
+ children?: React_2.ReactNode;
+}) => React_2.JSX.Element;
+
+// @public (undocumented)
+export const IngressesAccordions: ({}: IngressesAccordionsProps) => React_2.JSX.Element;
+
+// @public (undocumented)
+export type IngressesAccordionsProps = {};
+
+// @public (undocumented)
+export const JobsAccordions: ({
+ jobs,
+}: JobsAccordionsProps) => React_2.JSX.Element;
+
+// @public (undocumented)
+export type JobsAccordionsProps = {
+ jobs: V1Job[];
+ children?: React_2.ReactNode;
+};
+
+// @public (undocumented)
+export interface KubernetesApi {
+ // (undocumented)
+ getClusters(): Promise<
+ {
+ name: string;
+ authProvider: string;
+ oidcTokenProvider?: string | undefined;
+ }[]
+ >;
+ // (undocumented)
+ getCustomObjectsByEntity(
+ request: CustomObjectsByEntityRequest,
+ ): Promise;
+ // (undocumented)
+ getObjectsByEntity(
+ requestBody: KubernetesRequestBody,
+ ): Promise;
+ // (undocumented)
+ getWorkloadsByEntity(
+ request: WorkloadsByEntityRequest,
+ ): Promise;
+ // (undocumented)
+ proxy(options: {
+ clusterName: string;
+ path: string;
+ init?: RequestInit;
+ }): Promise;
+}
+
+// @public (undocumented)
+export const kubernetesApiRef: ApiRef;
+
+// @public (undocumented)
+export interface KubernetesAuthProvider {
+ // (undocumented)
+ decorateRequestBodyForAuth(
+ requestBody: KubernetesRequestBody,
+ ): Promise;
+ // (undocumented)
+ getCredentials(): Promise<{
+ token?: string;
+ }>;
+}
+
+// @public (undocumented)
+export class KubernetesAuthProviders implements KubernetesAuthProvidersApi {
+ constructor(options: {
+ microsoftAuthApi: OAuthApi;
+ googleAuthApi: OAuthApi;
+ oidcProviders?: {
+ [key: string]: OpenIdConnectApi;
+ };
+ });
+ // (undocumented)
+ decorateRequestBodyForAuth(
+ authProvider: string,
+ requestBody: KubernetesRequestBody,
+ ): Promise;
+ // (undocumented)
+ getCredentials(authProvider: string): Promise<{
+ token?: string;
+ }>;
+}
+
+// @public (undocumented)
+export interface KubernetesAuthProvidersApi {
+ // (undocumented)
+ decorateRequestBodyForAuth(
+ authProvider: string,
+ requestBody: KubernetesRequestBody,
+ ): Promise;
+ // (undocumented)
+ getCredentials(authProvider: string): Promise<{
+ token?: string;
+ }>;
+}
+
+// @public (undocumented)
+export const kubernetesAuthProvidersApiRef: ApiRef;
+
+// @public (undocumented)
+export class KubernetesBackendClient implements KubernetesApi {
+ constructor(options: {
+ discoveryApi: DiscoveryApi;
+ identityApi: IdentityApi;
+ kubernetesAuthProvidersApi: KubernetesAuthProvidersApi;
+ });
+ // (undocumented)
+ getClusters(): Promise<
+ {
+ name: string;
+ authProvider: string;
+ }[]
+ >;
+ // (undocumented)
+ getCustomObjectsByEntity(
+ request: CustomObjectsByEntityRequest,
+ ): Promise;
+ // (undocumented)
+ getObjectsByEntity(
+ requestBody: KubernetesRequestBody,
+ ): Promise;
+ // (undocumented)
+ getWorkloadsByEntity(
+ request: WorkloadsByEntityRequest,
+ ): Promise;
+ // (undocumented)
+ proxy(options: {
+ clusterName: string;
+ path: string;
+ init?: RequestInit;
+ }): Promise;
+}
+
+// @public
+export const KubernetesDrawer: ({
+ open,
+ label,
+ drawerContentsHeader,
+ kubernetesObject,
+ children,
+}: KubernetesDrawerProps) => React_2.JSX.Element;
+
+// @public (undocumented)
+export interface KubernetesDrawerable {
+ // (undocumented)
+ metadata?: V1ObjectMeta;
+}
+
+// @public
+export interface KubernetesDrawerProps {
+ // (undocumented)
+ children?: React_2.ReactNode;
+ // (undocumented)
+ drawerContentsHeader?: React_2.ReactNode;
+ // (undocumented)
+ kubernetesObject: KubernetesObject;
+ // (undocumented)
+ label: React_2.ReactNode;
+ // (undocumented)
+ open?: boolean;
+}
+
+// @public
+export interface KubernetesObject {
+ // (undocumented)
+ kind: string;
+ // (undocumented)
+ metadata?: IObjectMeta;
+}
+
+// @public (undocumented)
+export interface KubernetesObjects {
+ // (undocumented)
+ error?: string;
+ // (undocumented)
+ kubernetesObjects?: ObjectsByEntityResponse;
+ // (undocumented)
+ loading: boolean;
+}
+
+// @public (undocumented)
+export interface KubernetesProxyApi {
+ // (undocumented)
+ getEventsByInvolvedObjectName(request: {
+ clusterName: string;
+ involvedObjectName: string;
+ namespace: string;
+ }): Promise;
+ // (undocumented)
+ getPodLogs(request: {
+ podName: string;
+ namespace: string;
+ clusterName: string;
+ containerName: string;
+ previous?: boolean;
+ }): Promise<{
+ text: string;
+ }>;
+}
+
+// @public (undocumented)
+export const kubernetesProxyApiRef: ApiRef;
+
+// @public
+export class KubernetesProxyClient {
+ constructor(options: { kubernetesApi: KubernetesApi });
+ // (undocumented)
+ getEventsByInvolvedObjectName({
+ clusterName,
+ involvedObjectName,
+ namespace,
+ }: {
+ clusterName: string;
+ involvedObjectName: string;
+ namespace: string;
+ }): Promise;
+ // (undocumented)
+ getPodLogs({
+ podName,
+ namespace,
+ clusterName,
+ containerName,
+ previous,
+ }: {
+ podName: string;
+ namespace: string;
+ clusterName: string;
+ containerName: string;
+ previous?: boolean;
+ }): Promise<{
+ text: string;
+ }>;
+}
+
+// @public (undocumented)
+export const KubernetesStructuredMetadataTableDrawer: <
+ T extends KubernetesDrawerable,
+>({
+ object,
+ renderObject,
+ kind,
+ buttonVariant,
+ expanded,
+ children,
+}: KubernetesStructuredMetadataTableDrawerProps) => React_2.JSX.Element;
+
+// @public (undocumented)
+export interface KubernetesStructuredMetadataTableDrawerProps<
+ T extends KubernetesDrawerable,
+> {
+ // (undocumented)
+ buttonVariant?: 'h5' | 'subtitle2';
+ // (undocumented)
+ children?: React_2.ReactNode;
+ // (undocumented)
+ expanded?: boolean;
+ // (undocumented)
+ kind: string;
+ // (undocumented)
+ object: T;
+ // (undocumented)
+ renderObject: (obj: T) => object;
+}
+
+// @public (undocumented)
+export const LinkErrorPanel: ({
+ cluster,
+ errorMessage,
+}: LinkErrorPanelProps) => React_2.JSX.Element;
+
+// @public (undocumented)
+export type LinkErrorPanelProps = {
+ cluster: ClusterAttributes;
+ errorMessage?: string;
+ children?: React_2.ReactNode;
+};
+
+// @public
+export const ManifestYaml: ({
+ object,
+}: ManifestYamlProps) => React_2.JSX.Element;
+
+// @public
+export interface ManifestYamlProps {
+ // (undocumented)
+ object: object;
+}
+
+// @public (undocumented)
+export class OidcKubernetesAuthProvider implements KubernetesAuthProvider {
+ constructor(providerName: string, authProvider: OpenIdConnectApi);
+ // (undocumented)
+ authProvider: OpenIdConnectApi;
+ // (undocumented)
+ decorateRequestBodyForAuth(
+ requestBody: KubernetesRequestBody,
+ ): Promise;
+ // (undocumented)
+ getCredentials(): Promise<{
+ token: string;
+ }>;
+ // (undocumented)
+ providerName: string;
+}
+
+// @public
+export const PendingPodContent: ({
+ pod,
+}: PendingPodContentProps) => React_2.JSX.Element;
+
+// @public
+export interface PendingPodContentProps {
+ // (undocumented)
+ pod: Pod;
+}
+
+// @public
+export interface PodAndErrors {
+ // (undocumented)
+ clusterName: string;
+ // (undocumented)
+ errors: DetectedError[];
+ // (undocumented)
+ pod: Pod;
+}
+
+// @public (undocumented)
+export type PodColumns = 'READY' | 'RESOURCE';
+
+// @public
+export const PodDrawer: ({
+ podAndErrors,
+ open,
+}: PodDrawerProps) => React_2.JSX.Element;
+
+// @public
+export interface PodDrawerProps {
+ // (undocumented)
+ open?: boolean;
+ // (undocumented)
+ podAndErrors: PodAndErrors;
+}
+
+// @public
+export const PodExecTerminal: (
+ props: PodExecTerminalProps,
+) => React_2.JSX.Element;
+
+// @public
+export const PodExecTerminalDialog: (
+ props: PodExecTerminalProps,
+) => React_2.JSX.Element;
+
+// @public
+export interface PodExecTerminalProps {
+ // (undocumented)
+ clusterName: string;
+ // (undocumented)
+ containerName: string;
+ // (undocumented)
+ podName: string;
+ // (undocumented)
+ podNamespace: string;
+}
+
+// @public
+export const PodLogs: React_2.FC;
+
+// @public
+export const PodLogsDialog: ({
+ containerScope,
+}: PodLogsDialogProps) => React_2.JSX.Element;
+
+// @public
+export interface PodLogsDialogProps {
+ // (undocumented)
+ containerScope: ContainerScope;
+}
+
+// @public
+export interface PodLogsOptions {
+ // (undocumented)
+ containerScope: ContainerScope;
+ // (undocumented)
+ previous?: boolean;
+}
+
+// @public
+export interface PodLogsProps {
+ // (undocumented)
+ containerScope: ContainerScope;
+ // (undocumented)
+ previous?: boolean;
+}
+
+// @public
+export const PodMetricsContext: React_2.Context>;
+
+// @public (undocumented)
+export type PodMetricsMatcher = {
+ metadata?: IObjectMeta;
+};
+
+// @public (undocumented)
+export const PodNamesWithErrorsContext: React_2.Context>;
+
+// @public (undocumented)
+export const PodNamesWithMetricsContext: React_2.Context<
+ Map
+>;
+
+// @public
+export interface PodScope {
+ // (undocumented)
+ clusterName: string;
+ // (undocumented)
+ podName: string;
+ // (undocumented)
+ podNamespace: string;
+}
+
+// @public (undocumented)
+export const PodsTable: ({
+ pods,
+ extraColumns,
+}: PodsTablesProps) => React_2.JSX.Element;
+
+// @public (undocumented)
+export type PodsTablesProps = {
+ pods: Pod_2 | V1Pod[];
+ extraColumns?: PodColumns[];
+ children?: React_2.ReactNode;
+};
+
+// @public (undocumented)
+export const READY_COLUMNS: PodColumns;
+
+// @public (undocumented)
+export const RESOURCE_COLUMNS: PodColumns;
+
+// @public
+export const ResourceUtilization: ({
+ compressed,
+ title,
+ usage,
+ total,
+ totalFormatted,
+}: ResourceUtilizationProps) => React_2.JSX.Element;
+
+// @public
+export interface ResourceUtilizationProps {
+ // (undocumented)
+ compressed?: boolean;
+ // (undocumented)
+ title: string;
+ // (undocumented)
+ total: number | string;
+ // (undocumented)
+ totalFormatted: string;
+ // (undocumented)
+ usage: number | string;
+}
+
+// @public
+export class ServerSideKubernetesAuthProvider
+ implements KubernetesAuthProvider
+{
+ // (undocumented)
+ decorateRequestBodyForAuth(
+ requestBody: KubernetesRequestBody,
+ ): Promise;
+ // (undocumented)
+ getCredentials(): Promise<{}>;
+}
+
+// @public (undocumented)
+export const ServicesAccordions: ({}: ServicesAccordionsProps) => React_2.JSX.Element;
+
+// @public (undocumented)
+export type ServicesAccordionsProps = {};
+
+// @public
+export const useCustomResources: (
+ entity: Entity,
+ customResourceMatchers: CustomResourceMatcher[],
+ intervalMs?: number,
+) => KubernetesObjects;
+
+// @public
+export const useEvents: ({
+ involvedObjectName,
+ namespace,
+ clusterName,
+}: EventsOptions) => AsyncState;
+
+// @public (undocumented)
+export const useKubernetesObjects: (
+ entity: Entity,
+ intervalMs?: number,
+) => KubernetesObjects;
+
+// @public
+export const useMatchingErrors: (matcher: ErrorMatcher) => DetectedError[];
+
+// @public
+export const usePodLogs: ({
+ containerScope,
+ previous,
+}: PodLogsOptions) => AsyncState<{
+ text: string;
+}>;
+
+// @public
+export const usePodMetrics: (
+ clusterName: string,
+ matcher: PodMetricsMatcher,
+) => ClientPodStatus | undefined;
+```
diff --git a/plugins/kubernetes-react/catalog-info.yaml b/plugins/kubernetes-react/catalog-info.yaml
new file mode 100644
index 0000000000..a2fb40d32c
--- /dev/null
+++ b/plugins/kubernetes-react/catalog-info.yaml
@@ -0,0 +1,11 @@
+apiVersion: backstage.io/v1alpha1
+kind: Component
+metadata:
+ name: backstage-plugin-kubernetes-react
+ title: '@backstage/plugin-kubernetes-react'
+ description: >-
+ Shared frontend utilities for Kubernetes plugins
+spec:
+ lifecycle: experimental
+ type: backstage-web-library
+ owner: kubernetes-maintainers
diff --git a/plugins/kubernetes-react/package.json b/plugins/kubernetes-react/package.json
new file mode 100644
index 0000000000..5c95b29870
--- /dev/null
+++ b/plugins/kubernetes-react/package.json
@@ -0,0 +1,66 @@
+{
+ "name": "@backstage/plugin-kubernetes-react",
+ "description": "Web library for the kubernetes-react plugin",
+ "version": "0.0.0",
+ "main": "src/index.ts",
+ "types": "src/index.ts",
+ "license": "Apache-2.0",
+ "publishConfig": {
+ "access": "public",
+ "main": "dist/index.esm.js",
+ "types": "dist/index.d.ts"
+ },
+ "backstage": {
+ "role": "web-library"
+ },
+ "sideEffects": false,
+ "scripts": {
+ "start": "backstage-cli package start",
+ "build": "backstage-cli package build",
+ "lint": "backstage-cli package lint",
+ "test": "backstage-cli package test",
+ "clean": "backstage-cli package clean",
+ "prepack": "backstage-cli package prepack",
+ "postpack": "backstage-cli package postpack"
+ },
+ "dependencies": {
+ "@backstage/catalog-model": "workspace:^",
+ "@backstage/core-components": "workspace:^",
+ "@backstage/core-plugin-api": "workspace:^",
+ "@backstage/errors": "workspace:^",
+ "@backstage/plugin-kubernetes-common": "workspace:^",
+ "@backstage/types": "workspace:^",
+ "@kubernetes-models/apimachinery": "^1.1.0",
+ "@kubernetes-models/base": "^4.0.1",
+ "@kubernetes/client-node": "^0.19.0",
+ "@material-ui/core": "^4.9.13",
+ "@material-ui/icons": "^4.11.3",
+ "@material-ui/lab": "^4.0.0-alpha.61",
+ "@types/react": "^16.13.1 || ^17.0.0",
+ "cronstrue": "^2.32.0",
+ "js-yaml": "^4.1.0",
+ "kubernetes-models": "^4.3.1",
+ "lodash": "^4.17.21",
+ "luxon": "^3.0.0",
+ "react-use": "^17.4.0",
+ "xterm": "^5.3.0",
+ "xterm-addon-attach": "^0.9.0",
+ "xterm-addon-fit": "^0.8.0"
+ },
+ "peerDependencies": {
+ "react": "^16.13.1 || ^17.0.0"
+ },
+ "devDependencies": {
+ "@backstage/cli": "workspace:^",
+ "@backstage/core-app-api": "workspace:^",
+ "@backstage/test-utils": "workspace:^",
+ "@testing-library/jest-dom": "^5.10.1",
+ "@testing-library/react": "^12.1.3",
+ "@testing-library/react-hooks": "^8.0.1",
+ "jest-websocket-mock": "^2.5.0",
+ "msw": "^1.3.1"
+ },
+ "files": [
+ "dist"
+ ]
+}
diff --git a/plugins/kubernetes-react/src/__fixtures__/1-cronjobs.json b/plugins/kubernetes-react/src/__fixtures__/1-cronjobs.json
new file mode 100644
index 0000000000..1edc43710d
--- /dev/null
+++ b/plugins/kubernetes-react/src/__fixtures__/1-cronjobs.json
@@ -0,0 +1,446 @@
+{
+ "cronJobs": [
+ {
+ "metadata": {
+ "name": "dice-roller-cronjob",
+ "namespace": "default",
+ "uid": "9ea073bc-7a4b-4b99-8321-0305bce85568",
+ "resourceVersion": "1362732552",
+ "creationTimestamp": "2021-07-16T22:39:58Z",
+ "labels": {
+ "backstage.io/kubernetes-id": "dice-roller"
+ },
+ "annotations": {}
+ },
+ "spec": {
+ "schedule": "30 5 * * *",
+ "startingDeadlineSeconds": 1800,
+ "concurrencyPolicy": "Forbid",
+ "suspend": false,
+ "jobTemplate": {
+ "metadata": { "creationTimestamp": null },
+ "spec": {
+ "backoffLimit": 2,
+ "template": {
+ "metadata": {
+ "creationTimestamp": null,
+ "labels": {
+ "backstage.io/kubernetes-id": "dice-roller"
+ },
+ "annotations": {}
+ },
+ "spec": {
+ "containers": [
+ {
+ "name": "busybox",
+ "image": "busybox",
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "imagePullPolicy": "IfNotPresent",
+ "command": ["/bin/sh", "-c", "date; echo Rolling a die!"]
+ }
+ ],
+ "restartPolicy": "Never",
+ "terminationGracePeriodSeconds": 30,
+ "dnsPolicy": "ClusterFirst",
+ "securityContext": {},
+ "schedulerName": "default-scheduler"
+ }
+ }
+ }
+ },
+ "successfulJobsHistoryLimit": 2,
+ "failedJobsHistoryLimit": 2
+ },
+ "status": {
+ "active": [
+ {
+ "kind": "Job",
+ "namespace": "default",
+ "name": "dice-roller-cronjob-1637028600",
+ "uid": "32be1b89-5b53-45b2-aa84-277e75214f61",
+ "apiVersion": "batch/v1",
+ "resourceVersion": "1361174163"
+ }
+ ],
+ "lastScheduleTime": "2021-11-16T02:10:00Z"
+ }
+ }
+ ],
+ "jobs": [
+ {
+ "metadata": {
+ "name": "dice-roller-cronjob-1637025000",
+ "namespace": "default",
+ "uid": "69d5d242-a9a4-47b8-b9c7-c536ae8f151a",
+ "resourceVersion": "1361029181",
+ "creationTimestamp": "2021-11-16T01:10:24Z",
+ "labels": {
+ "backstage.io/kubernetes-id": "dice-roller"
+ },
+ "ownerReferences": [
+ {
+ "apiVersion": "batch/v1",
+ "kind": "CronJob",
+ "name": "dice-roller-cronjob",
+ "uid": "9ea073bc-7a4b-4b99-8321-0305bce85568",
+ "controller": true,
+ "blockOwnerDeletion": true
+ }
+ ]
+ },
+ "spec": {
+ "parallelism": 1,
+ "completions": 1,
+ "backoffLimit": 2,
+ "selector": {
+ "matchLabels": {
+ "controller-uid": "69d5d242-a9a4-47b8-b9c7-c536ae8f151a"
+ }
+ },
+ "template": {
+ "metadata": {
+ "creationTimestamp": null,
+ "labels": {
+ "backstage.io/kubernetes-id": "dice-roller",
+ "controller-uid": "69d5d242-a9a4-47b8-b9c7-c536ae8f151a",
+ "job-name": "dice-roller-cronjob-1637025000"
+ },
+ "annotations": {}
+ },
+ "spec": {
+ "containers": [
+ {
+ "command": ["/bin/sh", "-c", "date; echo Rolling a die!"],
+ "image": "busybox",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "busybox",
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File"
+ }
+ ],
+ "restartPolicy": "Never",
+ "terminationGracePeriodSeconds": 30,
+ "dnsPolicy": "ClusterFirst",
+ "securityContext": {},
+ "schedulerName": "default-scheduler"
+ }
+ }
+ },
+ "status": {
+ "conditions": [
+ {
+ "type": "Complete",
+ "status": "True",
+ "lastProbeTime": "2021-11-16T01:11:31Z",
+ "lastTransitionTime": "2021-11-16T01:11:31Z"
+ }
+ ],
+ "startTime": "2021-11-16T01:10:24Z",
+ "completionTime": "2021-11-16T01:11:31Z",
+ "succeeded": 1
+ }
+ },
+ {
+ "metadata": {
+ "name": "dice-roller-cronjob-1637028600",
+ "namespace": "default",
+ "uid": "32be1b89-5b53-45b2-aa84-277e75214f61",
+ "resourceVersion": "1361174166",
+ "creationTimestamp": "2021-11-16T02:10:22Z",
+ "labels": {
+ "backstage.io/kubernetes-id": "dice-roller"
+ },
+ "ownerReferences": [
+ {
+ "apiVersion": "batch/v1",
+ "kind": "CronJob",
+ "name": "dice-roller-cronjob",
+ "uid": "9ea073bc-7a4b-4b99-8321-0305bce85568",
+ "controller": true,
+ "blockOwnerDeletion": true
+ }
+ ]
+ },
+ "spec": {
+ "parallelism": 1,
+ "completions": 1,
+ "backoffLimit": 2,
+ "selector": {
+ "matchLabels": {
+ "controller-uid": "32be1b89-5b53-45b2-aa84-277e75214f61"
+ }
+ },
+ "template": {
+ "metadata": {
+ "creationTimestamp": null,
+ "labels": {
+ "backstage.io/kubernetes-id": "dice-roller",
+ "controller-uid": "32be1b89-5b53-45b2-aa84-277e75214f61",
+ "job-name": "dice-roller-cronjob-1637028600"
+ },
+ "annotations": {}
+ },
+ "spec": {
+ "containers": [
+ {
+ "command": ["/bin/sh", "-c", "date; echo Rolling a die!"],
+ "image": "busybox",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "busybox",
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File"
+ }
+ ],
+ "restartPolicy": "Never",
+ "terminationGracePeriodSeconds": 30,
+ "dnsPolicy": "ClusterFirst",
+ "securityContext": {},
+ "schedulerName": "default-scheduler"
+ }
+ }
+ },
+ "status": { "startTime": "2021-11-16T02:10:22Z", "active": 1 }
+ }
+ ],
+ "pods": [
+ {
+ "metadata": {
+ "name": "dice-roller-cronjob-1637025000-gstc4",
+ "generateName": "dice-roller-cronjob-1637025000-",
+ "namespace": "default",
+ "uid": "3b0f2b65-5ae2-441a-beda-bdc92bcafaf0",
+ "resourceVersion": "1361029179",
+ "creationTimestamp": "2021-11-16T01:10:24Z",
+ "labels": {
+ "backstage.io/kubernetes-id": "dice-roller",
+ "controller-uid": "69d5d242-a9a4-47b8-b9c7-c536ae8f151a",
+ "job-name": "dice-roller-cronjob-1637025000"
+ },
+ "annotations": {},
+ "ownerReferences": [
+ {
+ "apiVersion": "batch/v1",
+ "kind": "Job",
+ "name": "dice-roller-cronjob-1637025000",
+ "uid": "69d5d242-a9a4-47b8-b9c7-c536ae8f151a",
+ "controller": true,
+ "blockOwnerDeletion": true
+ }
+ ]
+ },
+ "spec": {
+ "volumes": [],
+ "containers": [
+ {
+ "command": ["/bin/sh", "-c", "date; echo Rolling a die!"],
+ "image": "busybox",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "busybox",
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File"
+ }
+ ],
+ "restartPolicy": "Never",
+ "terminationGracePeriodSeconds": 30,
+ "dnsPolicy": "ClusterFirst",
+ "serviceAccountName": "default",
+ "serviceAccount": "default",
+ "nodeName": "minikube",
+ "securityContext": {},
+ "schedulerName": "default-scheduler",
+ "tolerations": [
+ {
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "effect": "NoExecute",
+ "tolerationSeconds": 300
+ },
+ {
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "effect": "NoExecute",
+ "tolerationSeconds": 300
+ }
+ ],
+ "priority": 0,
+ "enableServiceLinks": true
+ },
+ "status": {
+ "phase": "Succeeded",
+ "conditions": [
+ {
+ "type": "Initialized",
+ "status": "True",
+ "lastProbeTime": null,
+ "lastTransitionTime": "2021-11-16T01:10:27Z",
+ "reason": "PodCompleted"
+ },
+ {
+ "type": "Ready",
+ "status": "False",
+ "lastProbeTime": null,
+ "lastTransitionTime": "2021-11-16T01:11:31Z",
+ "reason": "PodCompleted"
+ },
+ {
+ "type": "ContainersReady",
+ "status": "False",
+ "lastProbeTime": null,
+ "lastTransitionTime": "2021-11-16T01:11:31Z",
+ "reason": "PodCompleted"
+ },
+ {
+ "type": "PodScheduled",
+ "status": "True",
+ "lastProbeTime": null,
+ "lastTransitionTime": "2021-11-16T01:10:24Z"
+ }
+ ],
+ "hostIP": "192.168.49.2",
+ "podIP": "172.17.0.25",
+ "podIPs": [{ "ip": "172.17.0.25" }],
+ "startTime": "2021-11-16T01:10:24Z",
+ "containerStatuses": [
+ {
+ "name": "busybox",
+ "state": {
+ "terminated": {
+ "exitCode": 0,
+ "reason": "Completed",
+ "startedAt": "2021-11-16T01:10:31Z",
+ "finishedAt": "2021-11-16T01:11:30Z",
+ "containerID": "docker://1062343e1bb3625e36717bc15617c1bbca976366c3c9dd87035c71f33d015615"
+ }
+ },
+ "lastState": {},
+ "ready": false,
+ "restartCount": 0,
+ "image": "busybox:latest/node",
+ "imageID": "docker-pullable://busybox@sha256:e7157b6d7ebbe2cce5eaa8cfe8aa4fa82d173999b9f90a9ec42e57323546c353",
+ "containerID": "docker://1062343e1bb3625e36717bc15617c1bbca976366c3c9dd87035c71f33d015615",
+ "started": false
+ }
+ ],
+ "qosClass": "Burstable"
+ }
+ },
+ {
+ "metadata": {
+ "name": "dice-roller-cronjob-1637028600-p4mlc",
+ "generateName": "dice-roller-cronjob-1637028600-",
+ "namespace": "default",
+ "uid": "acddd5d2-ac7f-473b-a9d8-17a89f99ac39",
+ "resourceVersion": "1361174579",
+ "creationTimestamp": "2021-11-16T02:10:22Z",
+ "labels": {
+ "backstage.io/kubernetes-id": "dice-roller",
+ "controller-uid": "32be1b89-5b53-45b2-aa84-277e75214f61",
+ "job-name": "dice-roller-cronjob-1637028600"
+ },
+ "annotations": {},
+ "ownerReferences": [
+ {
+ "apiVersion": "batch/v1",
+ "kind": "Job",
+ "name": "dice-roller-cronjob-1637028600",
+ "uid": "32be1b89-5b53-45b2-aa84-277e75214f61",
+ "controller": true,
+ "blockOwnerDeletion": true
+ }
+ ]
+ },
+ "spec": {
+ "volumes": [],
+ "containers": [
+ {
+ "command": ["/bin/sh", "-c", "date; echo Rolling a die!"],
+ "image": "busybox",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "busybox",
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File"
+ }
+ ],
+ "restartPolicy": "Never",
+ "terminationGracePeriodSeconds": 30,
+ "dnsPolicy": "ClusterFirst",
+ "serviceAccountName": "default",
+ "serviceAccount": "default",
+ "nodeName": "minikube",
+ "securityContext": {},
+ "schedulerName": "default-scheduler",
+ "tolerations": [
+ {
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "effect": "NoExecute",
+ "tolerationSeconds": 300
+ },
+ {
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "effect": "NoExecute",
+ "tolerationSeconds": 300
+ }
+ ],
+ "priority": 0,
+ "enableServiceLinks": true
+ },
+ "status": {
+ "phase": "Running",
+ "conditions": [
+ {
+ "type": "Initialized",
+ "status": "True",
+ "lastProbeTime": null,
+ "lastTransitionTime": "2021-11-16T02:10:25Z"
+ },
+ {
+ "type": "Ready",
+ "status": "True",
+ "lastProbeTime": null,
+ "lastTransitionTime": "2021-11-16T02:10:35Z"
+ },
+ {
+ "type": "ContainersReady",
+ "status": "True",
+ "lastProbeTime": null,
+ "lastTransitionTime": "2021-11-16T02:10:35Z"
+ },
+ {
+ "type": "PodScheduled",
+ "status": "True",
+ "lastProbeTime": null,
+ "lastTransitionTime": "2021-11-16T02:10:22Z"
+ }
+ ],
+ "hostIP": "192.168.49.2",
+ "podIP": "172.17.0.25",
+ "podIPs": [{ "ip": "172.17.0.25" }],
+ "startTime": "2021-11-16T02:10:22Z",
+ "containerStatuses": [
+ {
+ "name": "busybox",
+ "state": {
+ "running": { "startedAt": "2021-11-16T02:10:31Z" }
+ },
+ "lastState": {},
+ "ready": true,
+ "restartCount": 0,
+ "image": "busybox:latest",
+ "imageID": "docker-pullable://busybox@sha256:e7157b6d7ebbe2cce5eaa8cfe8aa4fa82d173999b9f90a9ec42e57323546c353",
+ "containerID": "docker://1062343e1bb3625e36717bc15617c1bbca976366c3c9dd87035c71f33d015615",
+ "started": true
+ }
+ ],
+ "qosClass": "Burstable"
+ }
+ }
+ ]
+}
diff --git a/plugins/kubernetes-react/src/__fixtures__/1-deployments.json b/plugins/kubernetes-react/src/__fixtures__/1-deployments.json
new file mode 100644
index 0000000000..5ad847dc49
--- /dev/null
+++ b/plugins/kubernetes-react/src/__fixtures__/1-deployments.json
@@ -0,0 +1,2911 @@
+{
+ "pods": [
+ {
+ "metadata": {
+ "creationTimestamp": "2020-09-25T09:58:50.000Z",
+ "generateName": "dice-roller-6c8646bfd-",
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:generateName": {},
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"5126c354-4310-4e23-a9e4-c9b87cb69792\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:enableServiceLinks": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:50.000Z"
+ },
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:status": {
+ "f:conditions": {
+ "k:{\"type\":\"ContainersReady\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Initialized\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Ready\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:containerStatuses": {},
+ "f:hostIP": {},
+ "f:phase": {},
+ "f:podIP": {},
+ "f:podIPs": {
+ ".": {},
+ "k:{\"ip\":\"172.17.0.11\"}": {
+ ".": {},
+ "f:ip": {}
+ }
+ },
+ "f:startTime": {}
+ }
+ },
+ "manager": "kubelet",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:55.000Z"
+ }
+ ],
+ "name": "dice-roller-6c8646bfd-2m5hv",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "ReplicaSet",
+ "name": "dice-roller-6c8646bfd",
+ "uid": "5126c354-4310-4e23-a9e4-c9b87cb69792"
+ }
+ ],
+ "resourceVersion": "593216",
+ "selfLink": "/api/v1/namespaces/default/pods/dice-roller-6c8646bfd-2m5hv",
+ "uid": "aadb71c0-36fa-43e3-b38a-162f134d4359"
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "enableServiceLinks": true,
+ "nodeName": "minikube",
+ "priority": 0,
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "serviceAccount": "default",
+ "serviceAccountName": "default",
+ "terminationGracePeriodSeconds": 30,
+ "tolerations": [
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ },
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ }
+ ],
+ "volumes": [
+ {
+ "name": "default-token-5gctn",
+ "secret": {
+ "defaultMode": 420,
+ "secretName": "default-token-5gctn"
+ }
+ }
+ ]
+ },
+ "status": {
+ "conditions": [
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "Initialized"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:55.000Z",
+ "status": "True",
+ "type": "Ready"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:55.000Z",
+ "status": "True",
+ "type": "ContainersReady"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "PodScheduled"
+ }
+ ],
+ "containerStatuses": [
+ {
+ "containerID": "docker://aa4489297c34c48bb33c18474a8d2b33854a82ed42155680b259f635f556ce70",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {},
+ "name": "nginx",
+ "ready": true,
+ "restartCount": 0,
+ "started": true,
+ "state": {
+ "running": {
+ "startedAt": "2020-09-25T09:58:53.000Z"
+ }
+ }
+ }
+ ],
+ "hostIP": "192.168.64.2",
+ "phase": "Running",
+ "podIP": "172.17.0.11",
+ "podIPs": [
+ {
+ "ip": "172.17.0.11"
+ }
+ ],
+ "qosClass": "BestEffort",
+ "startTime": "2020-09-25T09:58:50.000Z"
+ }
+ },
+ {
+ "metadata": {
+ "creationTimestamp": "2020-09-25T09:58:50.000Z",
+ "generateName": "dice-roller-6c8646bfd-",
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:generateName": {},
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"5126c354-4310-4e23-a9e4-c9b87cb69792\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:enableServiceLinks": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:50.000Z"
+ },
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:status": {
+ "f:conditions": {
+ "k:{\"type\":\"ContainersReady\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Initialized\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Ready\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:containerStatuses": {},
+ "f:hostIP": {},
+ "f:phase": {},
+ "f:podIP": {},
+ "f:podIPs": {
+ ".": {},
+ "k:{\"ip\":\"172.17.0.7\"}": {
+ ".": {},
+ "f:ip": {}
+ }
+ },
+ "f:startTime": {}
+ }
+ },
+ "manager": "kubelet",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:55.000Z"
+ }
+ ],
+ "name": "dice-roller-6c8646bfd-4v6s8",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "ReplicaSet",
+ "name": "dice-roller-6c8646bfd",
+ "uid": "5126c354-4310-4e23-a9e4-c9b87cb69792"
+ }
+ ],
+ "resourceVersion": "593221",
+ "selfLink": "/api/v1/namespaces/default/pods/dice-roller-6c8646bfd-4v6s8",
+ "uid": "32e56490-6f20-4757-991f-a0c7fb407358"
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "enableServiceLinks": true,
+ "nodeName": "minikube",
+ "priority": 0,
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "serviceAccount": "default",
+ "serviceAccountName": "default",
+ "terminationGracePeriodSeconds": 30,
+ "tolerations": [
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ },
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ }
+ ],
+ "volumes": [
+ {
+ "name": "default-token-5gctn",
+ "secret": {
+ "defaultMode": 420,
+ "secretName": "default-token-5gctn"
+ }
+ }
+ ]
+ },
+ "status": {
+ "conditions": [
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "Initialized"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:55.000Z",
+ "status": "True",
+ "type": "Ready"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:55.000Z",
+ "status": "True",
+ "type": "ContainersReady"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "PodScheduled"
+ }
+ ],
+ "containerStatuses": [
+ {
+ "containerID": "docker://d91cc76c41249b8d3dfcf538d180b471b2a7966aae0d17a818307c8a9b4af897",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {},
+ "name": "nginx",
+ "ready": true,
+ "restartCount": 0,
+ "started": true,
+ "state": {
+ "running": {
+ "startedAt": "2020-09-25T09:58:53.000Z"
+ }
+ }
+ }
+ ],
+ "hostIP": "192.168.64.2",
+ "phase": "Running",
+ "podIP": "172.17.0.7",
+ "podIPs": [
+ {
+ "ip": "172.17.0.7"
+ }
+ ],
+ "qosClass": "BestEffort",
+ "startTime": "2020-09-25T09:58:50.000Z"
+ }
+ },
+ {
+ "metadata": {
+ "creationTimestamp": "2020-09-24T11:39:26.000Z",
+ "generateName": "dice-roller-6c8646bfd-",
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:generateName": {},
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"5126c354-4310-4e23-a9e4-c9b87cb69792\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:enableServiceLinks": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-24T11:39:26.000Z"
+ },
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:status": {
+ "f:conditions": {
+ "k:{\"type\":\"ContainersReady\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Initialized\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Ready\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:containerStatuses": {},
+ "f:hostIP": {},
+ "f:phase": {},
+ "f:podIP": {},
+ "f:podIPs": {
+ ".": {},
+ "k:{\"ip\":\"172.17.0.6\"}": {
+ ".": {},
+ "f:ip": {}
+ }
+ },
+ "f:startTime": {}
+ }
+ },
+ "manager": "kubelet",
+ "operation": "Update",
+ "time": "2020-09-24T11:39:27.000Z"
+ }
+ ],
+ "name": "dice-roller-6c8646bfd-b9zt5",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "ReplicaSet",
+ "name": "dice-roller-6c8646bfd",
+ "uid": "5126c354-4310-4e23-a9e4-c9b87cb69792"
+ }
+ ],
+ "resourceVersion": "503886",
+ "selfLink": "/api/v1/namespaces/default/pods/dice-roller-6c8646bfd-b9zt5",
+ "uid": "8b6601b6-469e-4e89-8fd0-abb2f1a567e4"
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "enableServiceLinks": true,
+ "nodeName": "minikube",
+ "priority": 0,
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "serviceAccount": "default",
+ "serviceAccountName": "default",
+ "terminationGracePeriodSeconds": 30,
+ "tolerations": [
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ },
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ }
+ ],
+ "volumes": [
+ {
+ "name": "default-token-5gctn",
+ "secret": {
+ "defaultMode": 420,
+ "secretName": "default-token-5gctn"
+ }
+ }
+ ]
+ },
+ "status": {
+ "conditions": [
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-24T11:39:26.000Z",
+ "status": "True",
+ "type": "Initialized"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-24T11:39:27.000Z",
+ "status": "True",
+ "type": "Ready"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-24T11:39:27.000Z",
+ "status": "True",
+ "type": "ContainersReady"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-24T11:39:26.000Z",
+ "status": "True",
+ "type": "PodScheduled"
+ }
+ ],
+ "containerStatuses": [
+ {
+ "containerID": "docker://c50e0d0fa96f09a2ed5df7dd5a7f7de88e6b7c7addb8f002f299d6afc52d82ce",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {},
+ "name": "nginx",
+ "ready": true,
+ "restartCount": 0,
+ "started": true,
+ "state": {
+ "running": {
+ "startedAt": "2020-09-24T11:39:27.000Z"
+ }
+ }
+ }
+ ],
+ "hostIP": "192.168.64.2",
+ "phase": "Running",
+ "podIP": "172.17.0.6",
+ "podIPs": [
+ {
+ "ip": "172.17.0.6"
+ }
+ ],
+ "qosClass": "BestEffort",
+ "startTime": "2020-09-24T11:39:26.000Z"
+ }
+ },
+ {
+ "metadata": {
+ "creationTimestamp": "2020-09-25T09:58:50.000Z",
+ "generateName": "dice-roller-6c8646bfd-",
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:generateName": {},
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"5126c354-4310-4e23-a9e4-c9b87cb69792\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:enableServiceLinks": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:50.000Z"
+ },
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:status": {
+ "f:conditions": {
+ "k:{\"type\":\"ContainersReady\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Initialized\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Ready\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:containerStatuses": {},
+ "f:hostIP": {},
+ "f:phase": {},
+ "f:podIP": {},
+ "f:podIPs": {
+ ".": {},
+ "k:{\"ip\":\"172.17.0.13\"}": {
+ ".": {},
+ "f:ip": {}
+ }
+ },
+ "f:startTime": {}
+ }
+ },
+ "manager": "kubelet",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:55.000Z"
+ }
+ ],
+ "name": "dice-roller-6c8646bfd-cfxqc",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "ReplicaSet",
+ "name": "dice-roller-6c8646bfd",
+ "uid": "5126c354-4310-4e23-a9e4-c9b87cb69792"
+ }
+ ],
+ "resourceVersion": "593211",
+ "selfLink": "/api/v1/namespaces/default/pods/dice-roller-6c8646bfd-cfxqc",
+ "uid": "e87e1776-0ca7-41fb-aeea-e1f648387545"
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "enableServiceLinks": true,
+ "nodeName": "minikube",
+ "priority": 0,
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "serviceAccount": "default",
+ "serviceAccountName": "default",
+ "terminationGracePeriodSeconds": 30,
+ "tolerations": [
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ },
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ }
+ ],
+ "volumes": [
+ {
+ "name": "default-token-5gctn",
+ "secret": {
+ "defaultMode": 420,
+ "secretName": "default-token-5gctn"
+ }
+ }
+ ]
+ },
+ "status": {
+ "conditions": [
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:51.000Z",
+ "status": "True",
+ "type": "Initialized"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:55.000Z",
+ "status": "True",
+ "type": "Ready"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:55.000Z",
+ "status": "True",
+ "type": "ContainersReady"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "PodScheduled"
+ }
+ ],
+ "containerStatuses": [
+ {
+ "containerID": "docker://c1641d986aae424429b7c2c1117baeb17d3794f73206bd57292cdf8264f929b2",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {},
+ "name": "nginx",
+ "ready": true,
+ "restartCount": 0,
+ "started": true,
+ "state": {
+ "running": {
+ "startedAt": "2020-09-25T09:58:53.000Z"
+ }
+ }
+ }
+ ],
+ "hostIP": "192.168.64.2",
+ "phase": "Running",
+ "podIP": "172.17.0.13",
+ "podIPs": [
+ {
+ "ip": "172.17.0.13"
+ }
+ ],
+ "qosClass": "BestEffort",
+ "startTime": "2020-09-25T09:58:51.000Z"
+ }
+ },
+ {
+ "metadata": {
+ "creationTimestamp": "2020-09-25T09:58:50.000Z",
+ "generateName": "dice-roller-6c8646bfd-",
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:generateName": {},
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"5126c354-4310-4e23-a9e4-c9b87cb69792\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:enableServiceLinks": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:50.000Z"
+ },
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:status": {
+ "f:conditions": {
+ "k:{\"type\":\"ContainersReady\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Initialized\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Ready\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:containerStatuses": {},
+ "f:hostIP": {},
+ "f:phase": {},
+ "f:podIP": {},
+ "f:podIPs": {
+ ".": {},
+ "k:{\"ip\":\"172.17.0.15\"}": {
+ ".": {},
+ "f:ip": {}
+ }
+ },
+ "f:startTime": {}
+ }
+ },
+ "manager": "kubelet",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:54.000Z"
+ }
+ ],
+ "name": "dice-roller-6c8646bfd-dtv5z",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "ReplicaSet",
+ "name": "dice-roller-6c8646bfd",
+ "uid": "5126c354-4310-4e23-a9e4-c9b87cb69792"
+ }
+ ],
+ "resourceVersion": "593190",
+ "selfLink": "/api/v1/namespaces/default/pods/dice-roller-6c8646bfd-dtv5z",
+ "uid": "1638a41b-e47e-4c17-a1f7-7b447df248b6"
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "enableServiceLinks": true,
+ "nodeName": "minikube",
+ "priority": 0,
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "serviceAccount": "default",
+ "serviceAccountName": "default",
+ "terminationGracePeriodSeconds": 30,
+ "tolerations": [
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ },
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ }
+ ],
+ "volumes": [
+ {
+ "name": "default-token-5gctn",
+ "secret": {
+ "defaultMode": 420,
+ "secretName": "default-token-5gctn"
+ }
+ }
+ ]
+ },
+ "status": {
+ "conditions": [
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:51.000Z",
+ "status": "True",
+ "type": "Initialized"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:53.000Z",
+ "status": "True",
+ "type": "Ready"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:53.000Z",
+ "status": "True",
+ "type": "ContainersReady"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "PodScheduled"
+ }
+ ],
+ "containerStatuses": [
+ {
+ "containerID": "docker://e62c32db58dbfe0a74b2d2cba0e0a97b7f222693c68e930037ac8738c4758ca3",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {},
+ "name": "nginx",
+ "ready": true,
+ "restartCount": 0,
+ "started": true,
+ "state": {
+ "running": {
+ "startedAt": "2020-09-25T09:58:53.000Z"
+ }
+ }
+ }
+ ],
+ "hostIP": "192.168.64.2",
+ "phase": "Running",
+ "podIP": "172.17.0.15",
+ "podIPs": [
+ {
+ "ip": "172.17.0.15"
+ }
+ ],
+ "qosClass": "BestEffort",
+ "startTime": "2020-09-25T09:58:51.000Z"
+ }
+ },
+ {
+ "metadata": {
+ "creationTimestamp": "2020-09-25T09:58:50.000Z",
+ "generateName": "dice-roller-6c8646bfd-",
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:generateName": {},
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"5126c354-4310-4e23-a9e4-c9b87cb69792\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:enableServiceLinks": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:50.000Z"
+ },
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:status": {
+ "f:conditions": {
+ "k:{\"type\":\"ContainersReady\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Initialized\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Ready\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:containerStatuses": {},
+ "f:hostIP": {},
+ "f:phase": {},
+ "f:podIP": {},
+ "f:podIPs": {
+ ".": {},
+ "k:{\"ip\":\"172.17.0.12\"}": {
+ ".": {},
+ "f:ip": {}
+ }
+ },
+ "f:startTime": {}
+ }
+ },
+ "manager": "kubelet",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:53.000Z"
+ }
+ ],
+ "name": "dice-roller-6c8646bfd-hhts2",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "ReplicaSet",
+ "name": "dice-roller-6c8646bfd",
+ "uid": "5126c354-4310-4e23-a9e4-c9b87cb69792"
+ }
+ ],
+ "resourceVersion": "593186",
+ "selfLink": "/api/v1/namespaces/default/pods/dice-roller-6c8646bfd-hhts2",
+ "uid": "ea0b147a-c56a-46e6-9445-7a0b1b0ed3c0"
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "enableServiceLinks": true,
+ "nodeName": "minikube",
+ "priority": 0,
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "serviceAccount": "default",
+ "serviceAccountName": "default",
+ "terminationGracePeriodSeconds": 30,
+ "tolerations": [
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ },
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ }
+ ],
+ "volumes": [
+ {
+ "name": "default-token-5gctn",
+ "secret": {
+ "defaultMode": 420,
+ "secretName": "default-token-5gctn"
+ }
+ }
+ ]
+ },
+ "status": {
+ "conditions": [
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "Initialized"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:53.000Z",
+ "status": "True",
+ "type": "Ready"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:53.000Z",
+ "status": "True",
+ "type": "ContainersReady"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "PodScheduled"
+ }
+ ],
+ "containerStatuses": [
+ {
+ "containerID": "docker://bcdbc153630f90556d57ff0d62f04d847ca63a5f0a7e5d9230683623d33d4b8d",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {},
+ "name": "nginx",
+ "ready": true,
+ "restartCount": 0,
+ "started": true,
+ "state": {
+ "running": {
+ "startedAt": "2020-09-25T09:58:53.000Z"
+ }
+ }
+ }
+ ],
+ "hostIP": "192.168.64.2",
+ "phase": "Running",
+ "podIP": "172.17.0.12",
+ "podIPs": [
+ {
+ "ip": "172.17.0.12"
+ }
+ ],
+ "qosClass": "BestEffort",
+ "startTime": "2020-09-25T09:58:50.000Z"
+ }
+ },
+ {
+ "metadata": {
+ "creationTimestamp": "2020-09-25T09:58:50.000Z",
+ "generateName": "dice-roller-6c8646bfd-",
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:generateName": {},
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"5126c354-4310-4e23-a9e4-c9b87cb69792\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:enableServiceLinks": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:50.000Z"
+ },
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:status": {
+ "f:conditions": {
+ "k:{\"type\":\"ContainersReady\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Initialized\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Ready\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:containerStatuses": {},
+ "f:hostIP": {},
+ "f:phase": {},
+ "f:podIP": {},
+ "f:podIPs": {
+ ".": {},
+ "k:{\"ip\":\"172.17.0.14\"}": {
+ ".": {},
+ "f:ip": {}
+ }
+ },
+ "f:startTime": {}
+ }
+ },
+ "manager": "kubelet",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:55.000Z"
+ }
+ ],
+ "name": "dice-roller-6c8646bfd-j68lm",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "ReplicaSet",
+ "name": "dice-roller-6c8646bfd",
+ "uid": "5126c354-4310-4e23-a9e4-c9b87cb69792"
+ }
+ ],
+ "resourceVersion": "593226",
+ "selfLink": "/api/v1/namespaces/default/pods/dice-roller-6c8646bfd-j68lm",
+ "uid": "b230ff1d-7a13-479b-9c7b-77c26bd79f62"
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "enableServiceLinks": true,
+ "nodeName": "minikube",
+ "priority": 0,
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "serviceAccount": "default",
+ "serviceAccountName": "default",
+ "terminationGracePeriodSeconds": 30,
+ "tolerations": [
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ },
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ }
+ ],
+ "volumes": [
+ {
+ "name": "default-token-5gctn",
+ "secret": {
+ "defaultMode": 420,
+ "secretName": "default-token-5gctn"
+ }
+ }
+ ]
+ },
+ "status": {
+ "conditions": [
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "Initialized"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:55.000Z",
+ "status": "True",
+ "type": "Ready"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:55.000Z",
+ "status": "True",
+ "type": "ContainersReady"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "PodScheduled"
+ }
+ ],
+ "containerStatuses": [
+ {
+ "containerID": "docker://30fa8a3429f86ab8e9a4cec472b79d74266609082703f48950f4aae021e9d6a2",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {},
+ "name": "nginx",
+ "ready": true,
+ "restartCount": 0,
+ "started": true,
+ "state": {
+ "running": {
+ "startedAt": "2020-09-25T09:58:53.000Z"
+ }
+ }
+ }
+ ],
+ "hostIP": "192.168.64.2",
+ "phase": "Running",
+ "podIP": "172.17.0.14",
+ "podIPs": [
+ {
+ "ip": "172.17.0.14"
+ }
+ ],
+ "qosClass": "BestEffort",
+ "startTime": "2020-09-25T09:58:50.000Z"
+ }
+ },
+ {
+ "metadata": {
+ "creationTimestamp": "2020-09-25T09:58:50.000Z",
+ "generateName": "dice-roller-6c8646bfd-",
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:generateName": {},
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"5126c354-4310-4e23-a9e4-c9b87cb69792\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:enableServiceLinks": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:50.000Z"
+ },
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:status": {
+ "f:conditions": {
+ "k:{\"type\":\"ContainersReady\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Initialized\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Ready\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:containerStatuses": {},
+ "f:hostIP": {},
+ "f:phase": {},
+ "f:podIP": {},
+ "f:podIPs": {
+ ".": {},
+ "k:{\"ip\":\"172.17.0.9\"}": {
+ ".": {},
+ "f:ip": {}
+ }
+ },
+ "f:startTime": {}
+ }
+ },
+ "manager": "kubelet",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:53.000Z"
+ }
+ ],
+ "name": "dice-roller-6c8646bfd-m6f9w",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "ReplicaSet",
+ "name": "dice-roller-6c8646bfd",
+ "uid": "5126c354-4310-4e23-a9e4-c9b87cb69792"
+ }
+ ],
+ "resourceVersion": "593181",
+ "selfLink": "/api/v1/namespaces/default/pods/dice-roller-6c8646bfd-m6f9w",
+ "uid": "9b0079f6-ff29-4619-bf6e-71cc10199ac5"
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "enableServiceLinks": true,
+ "nodeName": "minikube",
+ "priority": 0,
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "serviceAccount": "default",
+ "serviceAccountName": "default",
+ "terminationGracePeriodSeconds": 30,
+ "tolerations": [
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ },
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ }
+ ],
+ "volumes": [
+ {
+ "name": "default-token-5gctn",
+ "secret": {
+ "defaultMode": 420,
+ "secretName": "default-token-5gctn"
+ }
+ }
+ ]
+ },
+ "status": {
+ "conditions": [
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "Initialized"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:53.000Z",
+ "status": "True",
+ "type": "Ready"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:53.000Z",
+ "status": "True",
+ "type": "ContainersReady"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "PodScheduled"
+ }
+ ],
+ "containerStatuses": [
+ {
+ "containerID": "docker://f78767ee90eedffe46ff64bfe76d7f69426800dd89f3df012daf0baf3a9c5bdd",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {},
+ "name": "nginx",
+ "ready": true,
+ "restartCount": 0,
+ "started": true,
+ "state": {
+ "running": {
+ "startedAt": "2020-09-25T09:58:53.000Z"
+ }
+ }
+ }
+ ],
+ "hostIP": "192.168.64.2",
+ "phase": "Running",
+ "podIP": "172.17.0.9",
+ "podIPs": [
+ {
+ "ip": "172.17.0.9"
+ }
+ ],
+ "qosClass": "BestEffort",
+ "startTime": "2020-09-25T09:58:50.000Z"
+ }
+ },
+ {
+ "metadata": {
+ "creationTimestamp": "2020-09-24T11:39:27.000Z",
+ "generateName": "dice-roller-6c8646bfd-",
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:generateName": {},
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"5126c354-4310-4e23-a9e4-c9b87cb69792\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:enableServiceLinks": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-24T11:39:27.000Z"
+ },
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:status": {
+ "f:conditions": {
+ "k:{\"type\":\"ContainersReady\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Initialized\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Ready\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:containerStatuses": {},
+ "f:hostIP": {},
+ "f:phase": {},
+ "f:podIP": {},
+ "f:podIPs": {
+ ".": {},
+ "k:{\"ip\":\"172.17.0.4\"}": {
+ ".": {},
+ "f:ip": {}
+ }
+ },
+ "f:startTime": {}
+ }
+ },
+ "manager": "kubelet",
+ "operation": "Update",
+ "time": "2020-09-24T11:39:28.000Z"
+ }
+ ],
+ "name": "dice-roller-6c8646bfd-nv9pk",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "ReplicaSet",
+ "name": "dice-roller-6c8646bfd",
+ "uid": "5126c354-4310-4e23-a9e4-c9b87cb69792"
+ }
+ ],
+ "resourceVersion": "503918",
+ "selfLink": "/api/v1/namespaces/default/pods/dice-roller-6c8646bfd-nv9pk",
+ "uid": "acf7f77f-78c6-4d4b-bc73-637211770ffc"
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "enableServiceLinks": true,
+ "nodeName": "minikube",
+ "priority": 0,
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "serviceAccount": "default",
+ "serviceAccountName": "default",
+ "terminationGracePeriodSeconds": 30,
+ "tolerations": [
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ },
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ }
+ ],
+ "volumes": [
+ {
+ "name": "default-token-5gctn",
+ "secret": {
+ "defaultMode": 420,
+ "secretName": "default-token-5gctn"
+ }
+ }
+ ]
+ },
+ "status": {
+ "conditions": [
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-24T11:39:27.000Z",
+ "status": "True",
+ "type": "Initialized"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-24T11:39:28.000Z",
+ "status": "True",
+ "type": "Ready"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-24T11:39:28.000Z",
+ "status": "True",
+ "type": "ContainersReady"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-24T11:39:27.000Z",
+ "status": "True",
+ "type": "PodScheduled"
+ }
+ ],
+ "containerStatuses": [
+ {
+ "containerID": "docker://63dec9b32942c4b09ae43d09d6978261f674a3ee623823b8f1d20da8044c12ac",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {},
+ "name": "nginx",
+ "ready": true,
+ "restartCount": 0,
+ "started": true,
+ "state": {
+ "running": {
+ "startedAt": "2020-09-24T11:39:28.000Z"
+ }
+ }
+ }
+ ],
+ "hostIP": "192.168.64.2",
+ "phase": "Running",
+ "podIP": "172.17.0.4",
+ "podIPs": [
+ {
+ "ip": "172.17.0.4"
+ }
+ ],
+ "qosClass": "BestEffort",
+ "startTime": "2020-09-24T11:39:27.000Z"
+ }
+ },
+ {
+ "metadata": {
+ "creationTimestamp": "2020-09-25T09:58:50.000Z",
+ "generateName": "dice-roller-6c8646bfd-",
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:generateName": {},
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"5126c354-4310-4e23-a9e4-c9b87cb69792\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:enableServiceLinks": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:50.000Z"
+ },
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:status": {
+ "f:conditions": {
+ "k:{\"type\":\"ContainersReady\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Initialized\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Ready\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:containerStatuses": {},
+ "f:hostIP": {},
+ "f:phase": {},
+ "f:podIP": {},
+ "f:podIPs": {
+ ".": {},
+ "k:{\"ip\":\"172.17.0.10\"}": {
+ ".": {},
+ "f:ip": {}
+ }
+ },
+ "f:startTime": {}
+ }
+ },
+ "manager": "kubelet",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:55.000Z"
+ }
+ ],
+ "name": "dice-roller-6c8646bfd-pjhfj",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "ReplicaSet",
+ "name": "dice-roller-6c8646bfd",
+ "uid": "5126c354-4310-4e23-a9e4-c9b87cb69792"
+ }
+ ],
+ "resourceVersion": "593205",
+ "selfLink": "/api/v1/namespaces/default/pods/dice-roller-6c8646bfd-pjhfj",
+ "uid": "78775c3a-7af2-4ebe-a676-bc2e5dfa2bcc"
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "enableServiceLinks": true,
+ "nodeName": "minikube",
+ "priority": 0,
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "serviceAccount": "default",
+ "serviceAccountName": "default",
+ "terminationGracePeriodSeconds": 30,
+ "tolerations": [
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ },
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ }
+ ],
+ "volumes": [
+ {
+ "name": "default-token-5gctn",
+ "secret": {
+ "defaultMode": 420,
+ "secretName": "default-token-5gctn"
+ }
+ }
+ ]
+ },
+ "status": {
+ "conditions": [
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "Initialized"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:55.000Z",
+ "status": "True",
+ "type": "Ready"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:55.000Z",
+ "status": "True",
+ "type": "ContainersReady"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "PodScheduled"
+ }
+ ],
+ "containerStatuses": [
+ {
+ "containerID": "docker://cbb83dda250db74285dcbe0b81bd0896acf402bac9710af090311f7360f824aa",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {},
+ "name": "nginx",
+ "ready": true,
+ "restartCount": 0,
+ "started": true,
+ "state": {
+ "running": {
+ "startedAt": "2020-09-25T09:58:53.000Z"
+ }
+ }
+ }
+ ],
+ "hostIP": "192.168.64.2",
+ "phase": "Running",
+ "podIP": "172.17.0.10",
+ "podIPs": [
+ {
+ "ip": "172.17.0.10"
+ }
+ ],
+ "qosClass": "BestEffort",
+ "startTime": "2020-09-25T09:58:50.000Z"
+ }
+ }
+ ],
+ "replicaSets": [
+ {
+ "metadata": {
+ "annotations": {
+ "deployment.kubernetes.io/desired-replicas": "10",
+ "deployment.kubernetes.io/max-replicas": "13",
+ "deployment.kubernetes.io/revision": "2"
+ },
+ "creationTimestamp": "2020-09-24T11:39:26.000Z",
+ "generation": 3,
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "apps/v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:annotations": {
+ ".": {},
+ "f:deployment.kubernetes.io/desired-replicas": {},
+ "f:deployment.kubernetes.io/max-replicas": {},
+ "f:deployment.kubernetes.io/revision": {}
+ },
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"7551e949-42d1-4061-83c5-9da107186e47\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:replicas": {},
+ "f:selector": {
+ "f:matchLabels": {
+ ".": {},
+ "f:app": {},
+ "f:pod-template-hash": {}
+ }
+ },
+ "f:template": {
+ "f:metadata": {
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ }
+ },
+ "f:status": {
+ "f:availableReplicas": {},
+ "f:fullyLabeledReplicas": {},
+ "f:observedGeneration": {},
+ "f:readyReplicas": {},
+ "f:replicas": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:55.000Z"
+ }
+ ],
+ "name": "dice-roller-6c8646bfd",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "Deployment",
+ "name": "dice-roller",
+ "uid": "7551e949-42d1-4061-83c5-9da107186e47"
+ }
+ ],
+ "resourceVersion": "593228",
+ "selfLink": "/apis/apps/v1/namespaces/default/replicasets/dice-roller-6c8646bfd",
+ "uid": "5126c354-4310-4e23-a9e4-c9b87cb69792"
+ },
+ "spec": {
+ "replicas": 10,
+ "selector": {
+ "matchLabels": {
+ "app": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ }
+ },
+ "template": {
+ "metadata": {
+ "creationTimestamp": null,
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ }
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File"
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "terminationGracePeriodSeconds": 30
+ }
+ }
+ },
+ "status": {
+ "availableReplicas": 10,
+ "fullyLabeledReplicas": 10,
+ "observedGeneration": 3,
+ "readyReplicas": 10,
+ "replicas": 10
+ }
+ }
+ ],
+ "deployments": [
+ {
+ "metadata": {
+ "annotations": {
+ "deployment.kubernetes.io/revision": "2",
+ "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"apps/v1\",\"kind\":\"Deployment\",\"metadata\":{\"annotations\":{},\"labels\":{\"backstage.io/kubernetes-id\":\"dice-roller\"},\"name\":\"dice-roller\",\"namespace\":\"default\"},\"spec\":{\"replicas\":10,\"selector\":{\"matchLabels\":{\"app\":\"dice-roller\"}},\"template\":{\"metadata\":{\"labels\":{\"app\":\"dice-roller\",\"backstage.io/kubernetes-id\":\"dice-roller\"}},\"spec\":{\"containers\":[{\"image\":\"nginx:1.14.2\",\"name\":\"nginx\",\"ports\":[{\"containerPort\":80}]}]}}}}\n"
+ },
+ "creationTimestamp": "2020-09-23T12:00:55.000Z",
+ "generation": 3,
+ "labels": {
+ "backstage.io/kubernetes-id": "dice-roller"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "apps/v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:annotations": {
+ ".": {},
+ "f:kubectl.kubernetes.io/last-applied-configuration": {}
+ },
+ "f:labels": {
+ ".": {},
+ "f:backstage.io/kubernetes-id": {}
+ }
+ },
+ "f:spec": {
+ "f:progressDeadlineSeconds": {},
+ "f:replicas": {},
+ "f:revisionHistoryLimit": {},
+ "f:selector": {
+ "f:matchLabels": {
+ ".": {},
+ "f:app": {}
+ }
+ },
+ "f:strategy": {
+ "f:rollingUpdate": {
+ ".": {},
+ "f:maxSurge": {},
+ "f:maxUnavailable": {}
+ },
+ "f:type": {}
+ },
+ "f:template": {
+ "f:metadata": {
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {}
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ }
+ }
+ },
+ "manager": "kubectl",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:50.000Z"
+ },
+ {
+ "apiVersion": "apps/v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:annotations": {
+ "f:deployment.kubernetes.io/revision": {}
+ }
+ },
+ "f:status": {
+ "f:availableReplicas": {},
+ "f:conditions": {
+ ".": {},
+ "k:{\"type\":\"Available\"}": {
+ ".": {},
+ "f:lastTransitionTime": {},
+ "f:lastUpdateTime": {},
+ "f:message": {},
+ "f:reason": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Progressing\"}": {
+ ".": {},
+ "f:lastTransitionTime": {},
+ "f:lastUpdateTime": {},
+ "f:message": {},
+ "f:reason": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:observedGeneration": {},
+ "f:readyReplicas": {},
+ "f:replicas": {},
+ "f:updatedReplicas": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:55.000Z"
+ }
+ ],
+ "name": "dice-roller",
+ "namespace": "default",
+ "resourceVersion": "593230",
+ "selfLink": "/apis/apps/v1/namespaces/default/deployments/dice-roller",
+ "uid": "7551e949-42d1-4061-83c5-9da107186e47"
+ },
+ "spec": {
+ "progressDeadlineSeconds": 600,
+ "replicas": 10,
+ "revisionHistoryLimit": 10,
+ "selector": {
+ "matchLabels": {
+ "app": "dice-roller"
+ }
+ },
+ "strategy": {
+ "rollingUpdate": {
+ "maxSurge": "25%",
+ "maxUnavailable": "25%"
+ },
+ "type": "RollingUpdate"
+ },
+ "template": {
+ "metadata": {
+ "creationTimestamp": null,
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller"
+ }
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File"
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "terminationGracePeriodSeconds": 30
+ }
+ }
+ },
+ "status": {
+ "availableReplicas": 10,
+ "conditions": [
+ {
+ "lastTransitionTime": "2020-09-23T12:00:55.000Z",
+ "lastUpdateTime": "2020-09-24T11:39:28.000Z",
+ "message": "ReplicaSet \"dice-roller-6c8646bfd\" has successfully progressed.",
+ "reason": "NewReplicaSetAvailable",
+ "status": "True",
+ "type": "Progressing"
+ },
+ {
+ "lastTransitionTime": "2020-09-25T09:58:55.000Z",
+ "lastUpdateTime": "2020-09-25T09:58:55.000Z",
+ "message": "Deployment has minimum availability.",
+ "reason": "MinimumReplicasAvailable",
+ "status": "True",
+ "type": "Available"
+ }
+ ],
+ "observedGeneration": 3,
+ "readyReplicas": 10,
+ "replicas": 10,
+ "updatedReplicas": 10
+ }
+ }
+ ],
+ "horizontalPodAutoscalers": [
+ {
+ "apiVersion": "autoscaling/v1",
+ "kind": "HorizontalPodAutoscaler",
+ "metadata": {
+ "annotations": {
+ "autoscaling.alpha.kubernetes.io/conditions": "[{\"type\":\"AbleToScale\",\"status\":\"True\",\"lastTransitionTime\":\"2021-01-05T10:26:04Z\",\"reason\":\"SucceededGetScale\",\"message\":\"the HPA controller was able to get the target's current scale\"},{\"type\":\"ScalingActive\",\"status\":\"False\",\"lastTransitionTime\":\"2021-01-05T10:26:04Z\",\"reason\":\"FailedGetResourceMetric\",\"message\":\"the HPA was unable to compute the replica count: unable to get metrics for resource cpu: no metrics returned from resource metrics API\"}]",
+ "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"autoscaling/v1\",\"kind\":\"HorizontalPodAutoscaler\",\"metadata\":{\"annotations\":{},\"labels\":{\"backstage.io/kubernetes-id\":\"dice-roller\"},\"name\":\"dice-roller\",\"namespace\":\"default\"},\"spec\":{\"maxReplicas\":15,\"minReplicas\":10,\"scaleTargetRef\":{\"apiVersion\":\"apps/v1\",\"kind\":\"Deployment\",\"name\":\"dice-roller\"},\"targetCPUUtilizationPercentage\":50}}\n"
+ },
+ "creationTimestamp": "2021-01-05T10:25:48Z",
+ "labels": {
+ "backstage.io/kubernetes-id": "dice-roller"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "autoscaling/v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:annotations": {
+ ".": {},
+ "f:kubectl.kubernetes.io/last-applied-configuration": {}
+ },
+ "f:labels": {
+ ".": {},
+ "f:backstage.io/kubernetes-id": {}
+ }
+ },
+ "f:spec": {
+ "f:maxReplicas": {},
+ "f:minReplicas": {},
+ "f:scaleTargetRef": {
+ "f:apiVersion": {},
+ "f:kind": {},
+ "f:name": {}
+ },
+ "f:targetCPUUtilizationPercentage": {}
+ }
+ },
+ "manager": "kubectl-client-side-apply",
+ "operation": "Update",
+ "time": "2021-01-05T10:25:48Z"
+ },
+ {
+ "apiVersion": "autoscaling/v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:annotations": {
+ "f:autoscaling.alpha.kubernetes.io/conditions": {}
+ }
+ },
+ "f:status": {
+ "f:currentReplicas": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2021-01-05T10:26:04Z"
+ }
+ ],
+ "name": "dice-roller",
+ "namespace": "default",
+ "resourceVersion": "598",
+ "selfLink": "/apis/autoscaling/v1/namespaces/default/horizontalpodautoscalers/dice-roller",
+ "uid": "dd7c5329-567c-43c2-b159-756808d90a8e"
+ },
+ "spec": {
+ "maxReplicas": 15,
+ "minReplicas": 10,
+ "scaleTargetRef": {
+ "apiVersion": "apps/v1",
+ "kind": "Deployment",
+ "name": "dice-roller"
+ },
+ "targetCPUUtilizationPercentage": 50
+ },
+ "status": {
+ "currentReplicas": 10,
+ "desiredReplicas": 0,
+ "currentCPUUtilizationPercentage": 30
+ }
+ }
+ ]
+}
diff --git a/plugins/kubernetes-react/src/__fixtures__/1-statefulsets.json b/plugins/kubernetes-react/src/__fixtures__/1-statefulsets.json
new file mode 100644
index 0000000000..6c04774ff1
--- /dev/null
+++ b/plugins/kubernetes-react/src/__fixtures__/1-statefulsets.json
@@ -0,0 +1,2912 @@
+{
+ "pods": [
+ {
+ "metadata": {
+ "creationTimestamp": "2020-09-25T09:58:50.000Z",
+ "generateName": "dice-roller-6c8646bfd-",
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:generateName": {},
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"5126c354-4310-4e23-a9e4-c9b87cb69792\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:enableServiceLinks": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:50.000Z"
+ },
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:status": {
+ "f:conditions": {
+ "k:{\"type\":\"ContainersReady\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Initialized\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Ready\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:containerStatuses": {},
+ "f:hostIP": {},
+ "f:phase": {},
+ "f:podIP": {},
+ "f:podIPs": {
+ ".": {},
+ "k:{\"ip\":\"172.17.0.11\"}": {
+ ".": {},
+ "f:ip": {}
+ }
+ },
+ "f:startTime": {}
+ }
+ },
+ "manager": "kubelet",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:55.000Z"
+ }
+ ],
+ "name": "dice-roller-6c8646bfd-2m5hv",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "ReplicaSet",
+ "name": "dice-roller-6c8646bfd",
+ "uid": "5126c354-4310-4e23-a9e4-c9b87cb69792"
+ }
+ ],
+ "resourceVersion": "593216",
+ "selfLink": "/api/v1/namespaces/default/pods/dice-roller-6c8646bfd-2m5hv",
+ "uid": "aadb71c0-36fa-43e3-b38a-162f134d4359"
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "enableServiceLinks": true,
+ "nodeName": "minikube",
+ "priority": 0,
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "serviceAccount": "default",
+ "serviceAccountName": "default",
+ "terminationGracePeriodSeconds": 30,
+ "tolerations": [
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ },
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ }
+ ],
+ "volumes": [
+ {
+ "name": "default-token-5gctn",
+ "secret": {
+ "defaultMode": 420,
+ "secretName": "default-token-5gctn"
+ }
+ }
+ ]
+ },
+ "status": {
+ "conditions": [
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "Initialized"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:55.000Z",
+ "status": "True",
+ "type": "Ready"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:55.000Z",
+ "status": "True",
+ "type": "ContainersReady"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "PodScheduled"
+ }
+ ],
+ "containerStatuses": [
+ {
+ "containerID": "docker://aa4489297c34c48bb33c18474a8d2b33854a82ed42155680b259f635f556ce70",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {},
+ "name": "nginx",
+ "ready": true,
+ "restartCount": 0,
+ "started": true,
+ "state": {
+ "running": {
+ "startedAt": "2020-09-25T09:58:53.000Z"
+ }
+ }
+ }
+ ],
+ "hostIP": "192.168.64.2",
+ "phase": "Running",
+ "podIP": "172.17.0.11",
+ "podIPs": [
+ {
+ "ip": "172.17.0.11"
+ }
+ ],
+ "qosClass": "BestEffort",
+ "startTime": "2020-09-25T09:58:50.000Z"
+ }
+ },
+ {
+ "metadata": {
+ "creationTimestamp": "2020-09-25T09:58:50.000Z",
+ "generateName": "dice-roller-6c8646bfd-",
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:generateName": {},
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"5126c354-4310-4e23-a9e4-c9b87cb69792\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:enableServiceLinks": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:50.000Z"
+ },
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:status": {
+ "f:conditions": {
+ "k:{\"type\":\"ContainersReady\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Initialized\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Ready\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:containerStatuses": {},
+ "f:hostIP": {},
+ "f:phase": {},
+ "f:podIP": {},
+ "f:podIPs": {
+ ".": {},
+ "k:{\"ip\":\"172.17.0.7\"}": {
+ ".": {},
+ "f:ip": {}
+ }
+ },
+ "f:startTime": {}
+ }
+ },
+ "manager": "kubelet",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:55.000Z"
+ }
+ ],
+ "name": "dice-roller-6c8646bfd-4v6s8",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "ReplicaSet",
+ "name": "dice-roller-6c8646bfd",
+ "uid": "5126c354-4310-4e23-a9e4-c9b87cb69792"
+ }
+ ],
+ "resourceVersion": "593221",
+ "selfLink": "/api/v1/namespaces/default/pods/dice-roller-6c8646bfd-4v6s8",
+ "uid": "32e56490-6f20-4757-991f-a0c7fb407358"
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "enableServiceLinks": true,
+ "nodeName": "minikube",
+ "priority": 0,
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "serviceAccount": "default",
+ "serviceAccountName": "default",
+ "terminationGracePeriodSeconds": 30,
+ "tolerations": [
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ },
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ }
+ ],
+ "volumes": [
+ {
+ "name": "default-token-5gctn",
+ "secret": {
+ "defaultMode": 420,
+ "secretName": "default-token-5gctn"
+ }
+ }
+ ]
+ },
+ "status": {
+ "conditions": [
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "Initialized"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:55.000Z",
+ "status": "True",
+ "type": "Ready"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:55.000Z",
+ "status": "True",
+ "type": "ContainersReady"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "PodScheduled"
+ }
+ ],
+ "containerStatuses": [
+ {
+ "containerID": "docker://d91cc76c41249b8d3dfcf538d180b471b2a7966aae0d17a818307c8a9b4af897",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {},
+ "name": "nginx",
+ "ready": true,
+ "restartCount": 0,
+ "started": true,
+ "state": {
+ "running": {
+ "startedAt": "2020-09-25T09:58:53.000Z"
+ }
+ }
+ }
+ ],
+ "hostIP": "192.168.64.2",
+ "phase": "Running",
+ "podIP": "172.17.0.7",
+ "podIPs": [
+ {
+ "ip": "172.17.0.7"
+ }
+ ],
+ "qosClass": "BestEffort",
+ "startTime": "2020-09-25T09:58:50.000Z"
+ }
+ },
+ {
+ "metadata": {
+ "creationTimestamp": "2020-09-24T11:39:26.000Z",
+ "generateName": "dice-roller-6c8646bfd-",
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:generateName": {},
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"5126c354-4310-4e23-a9e4-c9b87cb69792\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:enableServiceLinks": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-24T11:39:26.000Z"
+ },
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:status": {
+ "f:conditions": {
+ "k:{\"type\":\"ContainersReady\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Initialized\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Ready\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:containerStatuses": {},
+ "f:hostIP": {},
+ "f:phase": {},
+ "f:podIP": {},
+ "f:podIPs": {
+ ".": {},
+ "k:{\"ip\":\"172.17.0.6\"}": {
+ ".": {},
+ "f:ip": {}
+ }
+ },
+ "f:startTime": {}
+ }
+ },
+ "manager": "kubelet",
+ "operation": "Update",
+ "time": "2020-09-24T11:39:27.000Z"
+ }
+ ],
+ "name": "dice-roller-6c8646bfd-b9zt5",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "ReplicaSet",
+ "name": "dice-roller-6c8646bfd",
+ "uid": "5126c354-4310-4e23-a9e4-c9b87cb69792"
+ }
+ ],
+ "resourceVersion": "503886",
+ "selfLink": "/api/v1/namespaces/default/pods/dice-roller-6c8646bfd-b9zt5",
+ "uid": "8b6601b6-469e-4e89-8fd0-abb2f1a567e4"
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "enableServiceLinks": true,
+ "nodeName": "minikube",
+ "priority": 0,
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "serviceAccount": "default",
+ "serviceAccountName": "default",
+ "terminationGracePeriodSeconds": 30,
+ "tolerations": [
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ },
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ }
+ ],
+ "volumes": [
+ {
+ "name": "default-token-5gctn",
+ "secret": {
+ "defaultMode": 420,
+ "secretName": "default-token-5gctn"
+ }
+ }
+ ]
+ },
+ "status": {
+ "conditions": [
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-24T11:39:26.000Z",
+ "status": "True",
+ "type": "Initialized"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-24T11:39:27.000Z",
+ "status": "True",
+ "type": "Ready"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-24T11:39:27.000Z",
+ "status": "True",
+ "type": "ContainersReady"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-24T11:39:26.000Z",
+ "status": "True",
+ "type": "PodScheduled"
+ }
+ ],
+ "containerStatuses": [
+ {
+ "containerID": "docker://c50e0d0fa96f09a2ed5df7dd5a7f7de88e6b7c7addb8f002f299d6afc52d82ce",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {},
+ "name": "nginx",
+ "ready": true,
+ "restartCount": 0,
+ "started": true,
+ "state": {
+ "running": {
+ "startedAt": "2020-09-24T11:39:27.000Z"
+ }
+ }
+ }
+ ],
+ "hostIP": "192.168.64.2",
+ "phase": "Running",
+ "podIP": "172.17.0.6",
+ "podIPs": [
+ {
+ "ip": "172.17.0.6"
+ }
+ ],
+ "qosClass": "BestEffort",
+ "startTime": "2020-09-24T11:39:26.000Z"
+ }
+ },
+ {
+ "metadata": {
+ "creationTimestamp": "2020-09-25T09:58:50.000Z",
+ "generateName": "dice-roller-6c8646bfd-",
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:generateName": {},
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"5126c354-4310-4e23-a9e4-c9b87cb69792\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:enableServiceLinks": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:50.000Z"
+ },
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:status": {
+ "f:conditions": {
+ "k:{\"type\":\"ContainersReady\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Initialized\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Ready\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:containerStatuses": {},
+ "f:hostIP": {},
+ "f:phase": {},
+ "f:podIP": {},
+ "f:podIPs": {
+ ".": {},
+ "k:{\"ip\":\"172.17.0.13\"}": {
+ ".": {},
+ "f:ip": {}
+ }
+ },
+ "f:startTime": {}
+ }
+ },
+ "manager": "kubelet",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:55.000Z"
+ }
+ ],
+ "name": "dice-roller-6c8646bfd-cfxqc",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "ReplicaSet",
+ "name": "dice-roller-6c8646bfd",
+ "uid": "5126c354-4310-4e23-a9e4-c9b87cb69792"
+ }
+ ],
+ "resourceVersion": "593211",
+ "selfLink": "/api/v1/namespaces/default/pods/dice-roller-6c8646bfd-cfxqc",
+ "uid": "e87e1776-0ca7-41fb-aeea-e1f648387545"
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "enableServiceLinks": true,
+ "nodeName": "minikube",
+ "priority": 0,
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "serviceAccount": "default",
+ "serviceAccountName": "default",
+ "terminationGracePeriodSeconds": 30,
+ "tolerations": [
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ },
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ }
+ ],
+ "volumes": [
+ {
+ "name": "default-token-5gctn",
+ "secret": {
+ "defaultMode": 420,
+ "secretName": "default-token-5gctn"
+ }
+ }
+ ]
+ },
+ "status": {
+ "conditions": [
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:51.000Z",
+ "status": "True",
+ "type": "Initialized"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:55.000Z",
+ "status": "True",
+ "type": "Ready"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:55.000Z",
+ "status": "True",
+ "type": "ContainersReady"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "PodScheduled"
+ }
+ ],
+ "containerStatuses": [
+ {
+ "containerID": "docker://c1641d986aae424429b7c2c1117baeb17d3794f73206bd57292cdf8264f929b2",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {},
+ "name": "nginx",
+ "ready": true,
+ "restartCount": 0,
+ "started": true,
+ "state": {
+ "running": {
+ "startedAt": "2020-09-25T09:58:53.000Z"
+ }
+ }
+ }
+ ],
+ "hostIP": "192.168.64.2",
+ "phase": "Running",
+ "podIP": "172.17.0.13",
+ "podIPs": [
+ {
+ "ip": "172.17.0.13"
+ }
+ ],
+ "qosClass": "BestEffort",
+ "startTime": "2020-09-25T09:58:51.000Z"
+ }
+ },
+ {
+ "metadata": {
+ "creationTimestamp": "2020-09-25T09:58:50.000Z",
+ "generateName": "dice-roller-6c8646bfd-",
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:generateName": {},
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"5126c354-4310-4e23-a9e4-c9b87cb69792\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:enableServiceLinks": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:50.000Z"
+ },
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:status": {
+ "f:conditions": {
+ "k:{\"type\":\"ContainersReady\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Initialized\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Ready\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:containerStatuses": {},
+ "f:hostIP": {},
+ "f:phase": {},
+ "f:podIP": {},
+ "f:podIPs": {
+ ".": {},
+ "k:{\"ip\":\"172.17.0.15\"}": {
+ ".": {},
+ "f:ip": {}
+ }
+ },
+ "f:startTime": {}
+ }
+ },
+ "manager": "kubelet",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:54.000Z"
+ }
+ ],
+ "name": "dice-roller-6c8646bfd-dtv5z",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "ReplicaSet",
+ "name": "dice-roller-6c8646bfd",
+ "uid": "5126c354-4310-4e23-a9e4-c9b87cb69792"
+ }
+ ],
+ "resourceVersion": "593190",
+ "selfLink": "/api/v1/namespaces/default/pods/dice-roller-6c8646bfd-dtv5z",
+ "uid": "1638a41b-e47e-4c17-a1f7-7b447df248b6"
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "enableServiceLinks": true,
+ "nodeName": "minikube",
+ "priority": 0,
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "serviceAccount": "default",
+ "serviceAccountName": "default",
+ "terminationGracePeriodSeconds": 30,
+ "tolerations": [
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ },
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ }
+ ],
+ "volumes": [
+ {
+ "name": "default-token-5gctn",
+ "secret": {
+ "defaultMode": 420,
+ "secretName": "default-token-5gctn"
+ }
+ }
+ ]
+ },
+ "status": {
+ "conditions": [
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:51.000Z",
+ "status": "True",
+ "type": "Initialized"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:53.000Z",
+ "status": "True",
+ "type": "Ready"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:53.000Z",
+ "status": "True",
+ "type": "ContainersReady"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "PodScheduled"
+ }
+ ],
+ "containerStatuses": [
+ {
+ "containerID": "docker://e62c32db58dbfe0a74b2d2cba0e0a97b7f222693c68e930037ac8738c4758ca3",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {},
+ "name": "nginx",
+ "ready": true,
+ "restartCount": 0,
+ "started": true,
+ "state": {
+ "running": {
+ "startedAt": "2020-09-25T09:58:53.000Z"
+ }
+ }
+ }
+ ],
+ "hostIP": "192.168.64.2",
+ "phase": "Running",
+ "podIP": "172.17.0.15",
+ "podIPs": [
+ {
+ "ip": "172.17.0.15"
+ }
+ ],
+ "qosClass": "BestEffort",
+ "startTime": "2020-09-25T09:58:51.000Z"
+ }
+ },
+ {
+ "metadata": {
+ "creationTimestamp": "2020-09-25T09:58:50.000Z",
+ "generateName": "dice-roller-6c8646bfd-",
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:generateName": {},
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"5126c354-4310-4e23-a9e4-c9b87cb69792\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:enableServiceLinks": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:50.000Z"
+ },
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:status": {
+ "f:conditions": {
+ "k:{\"type\":\"ContainersReady\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Initialized\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Ready\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:containerStatuses": {},
+ "f:hostIP": {},
+ "f:phase": {},
+ "f:podIP": {},
+ "f:podIPs": {
+ ".": {},
+ "k:{\"ip\":\"172.17.0.12\"}": {
+ ".": {},
+ "f:ip": {}
+ }
+ },
+ "f:startTime": {}
+ }
+ },
+ "manager": "kubelet",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:53.000Z"
+ }
+ ],
+ "name": "dice-roller-6c8646bfd-hhts2",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "ReplicaSet",
+ "name": "dice-roller-6c8646bfd",
+ "uid": "5126c354-4310-4e23-a9e4-c9b87cb69792"
+ }
+ ],
+ "resourceVersion": "593186",
+ "selfLink": "/api/v1/namespaces/default/pods/dice-roller-6c8646bfd-hhts2",
+ "uid": "ea0b147a-c56a-46e6-9445-7a0b1b0ed3c0"
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "enableServiceLinks": true,
+ "nodeName": "minikube",
+ "priority": 0,
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "serviceAccount": "default",
+ "serviceAccountName": "default",
+ "terminationGracePeriodSeconds": 30,
+ "tolerations": [
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ },
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ }
+ ],
+ "volumes": [
+ {
+ "name": "default-token-5gctn",
+ "secret": {
+ "defaultMode": 420,
+ "secretName": "default-token-5gctn"
+ }
+ }
+ ]
+ },
+ "status": {
+ "conditions": [
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "Initialized"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:53.000Z",
+ "status": "True",
+ "type": "Ready"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:53.000Z",
+ "status": "True",
+ "type": "ContainersReady"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "PodScheduled"
+ }
+ ],
+ "containerStatuses": [
+ {
+ "containerID": "docker://bcdbc153630f90556d57ff0d62f04d847ca63a5f0a7e5d9230683623d33d4b8d",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {},
+ "name": "nginx",
+ "ready": true,
+ "restartCount": 0,
+ "started": true,
+ "state": {
+ "running": {
+ "startedAt": "2020-09-25T09:58:53.000Z"
+ }
+ }
+ }
+ ],
+ "hostIP": "192.168.64.2",
+ "phase": "Running",
+ "podIP": "172.17.0.12",
+ "podIPs": [
+ {
+ "ip": "172.17.0.12"
+ }
+ ],
+ "qosClass": "BestEffort",
+ "startTime": "2020-09-25T09:58:50.000Z"
+ }
+ },
+ {
+ "metadata": {
+ "creationTimestamp": "2020-09-25T09:58:50.000Z",
+ "generateName": "dice-roller-6c8646bfd-",
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:generateName": {},
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"5126c354-4310-4e23-a9e4-c9b87cb69792\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:enableServiceLinks": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:50.000Z"
+ },
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:status": {
+ "f:conditions": {
+ "k:{\"type\":\"ContainersReady\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Initialized\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Ready\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:containerStatuses": {},
+ "f:hostIP": {},
+ "f:phase": {},
+ "f:podIP": {},
+ "f:podIPs": {
+ ".": {},
+ "k:{\"ip\":\"172.17.0.14\"}": {
+ ".": {},
+ "f:ip": {}
+ }
+ },
+ "f:startTime": {}
+ }
+ },
+ "manager": "kubelet",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:55.000Z"
+ }
+ ],
+ "name": "dice-roller-6c8646bfd-j68lm",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "ReplicaSet",
+ "name": "dice-roller-6c8646bfd",
+ "uid": "5126c354-4310-4e23-a9e4-c9b87cb69792"
+ }
+ ],
+ "resourceVersion": "593226",
+ "selfLink": "/api/v1/namespaces/default/pods/dice-roller-6c8646bfd-j68lm",
+ "uid": "b230ff1d-7a13-479b-9c7b-77c26bd79f62"
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "enableServiceLinks": true,
+ "nodeName": "minikube",
+ "priority": 0,
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "serviceAccount": "default",
+ "serviceAccountName": "default",
+ "terminationGracePeriodSeconds": 30,
+ "tolerations": [
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ },
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ }
+ ],
+ "volumes": [
+ {
+ "name": "default-token-5gctn",
+ "secret": {
+ "defaultMode": 420,
+ "secretName": "default-token-5gctn"
+ }
+ }
+ ]
+ },
+ "status": {
+ "conditions": [
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "Initialized"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:55.000Z",
+ "status": "True",
+ "type": "Ready"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:55.000Z",
+ "status": "True",
+ "type": "ContainersReady"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "PodScheduled"
+ }
+ ],
+ "containerStatuses": [
+ {
+ "containerID": "docker://30fa8a3429f86ab8e9a4cec472b79d74266609082703f48950f4aae021e9d6a2",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {},
+ "name": "nginx",
+ "ready": true,
+ "restartCount": 0,
+ "started": true,
+ "state": {
+ "running": {
+ "startedAt": "2020-09-25T09:58:53.000Z"
+ }
+ }
+ }
+ ],
+ "hostIP": "192.168.64.2",
+ "phase": "Running",
+ "podIP": "172.17.0.14",
+ "podIPs": [
+ {
+ "ip": "172.17.0.14"
+ }
+ ],
+ "qosClass": "BestEffort",
+ "startTime": "2020-09-25T09:58:50.000Z"
+ }
+ },
+ {
+ "metadata": {
+ "creationTimestamp": "2020-09-25T09:58:50.000Z",
+ "generateName": "dice-roller-6c8646bfd-",
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:generateName": {},
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"5126c354-4310-4e23-a9e4-c9b87cb69792\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:enableServiceLinks": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:50.000Z"
+ },
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:status": {
+ "f:conditions": {
+ "k:{\"type\":\"ContainersReady\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Initialized\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Ready\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:containerStatuses": {},
+ "f:hostIP": {},
+ "f:phase": {},
+ "f:podIP": {},
+ "f:podIPs": {
+ ".": {},
+ "k:{\"ip\":\"172.17.0.9\"}": {
+ ".": {},
+ "f:ip": {}
+ }
+ },
+ "f:startTime": {}
+ }
+ },
+ "manager": "kubelet",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:53.000Z"
+ }
+ ],
+ "name": "dice-roller-6c8646bfd-m6f9w",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "ReplicaSet",
+ "name": "dice-roller-6c8646bfd",
+ "uid": "5126c354-4310-4e23-a9e4-c9b87cb69792"
+ }
+ ],
+ "resourceVersion": "593181",
+ "selfLink": "/api/v1/namespaces/default/pods/dice-roller-6c8646bfd-m6f9w",
+ "uid": "9b0079f6-ff29-4619-bf6e-71cc10199ac5"
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "enableServiceLinks": true,
+ "nodeName": "minikube",
+ "priority": 0,
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "serviceAccount": "default",
+ "serviceAccountName": "default",
+ "terminationGracePeriodSeconds": 30,
+ "tolerations": [
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ },
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ }
+ ],
+ "volumes": [
+ {
+ "name": "default-token-5gctn",
+ "secret": {
+ "defaultMode": 420,
+ "secretName": "default-token-5gctn"
+ }
+ }
+ ]
+ },
+ "status": {
+ "conditions": [
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "Initialized"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:53.000Z",
+ "status": "True",
+ "type": "Ready"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:53.000Z",
+ "status": "True",
+ "type": "ContainersReady"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "PodScheduled"
+ }
+ ],
+ "containerStatuses": [
+ {
+ "containerID": "docker://f78767ee90eedffe46ff64bfe76d7f69426800dd89f3df012daf0baf3a9c5bdd",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {},
+ "name": "nginx",
+ "ready": true,
+ "restartCount": 0,
+ "started": true,
+ "state": {
+ "running": {
+ "startedAt": "2020-09-25T09:58:53.000Z"
+ }
+ }
+ }
+ ],
+ "hostIP": "192.168.64.2",
+ "phase": "Running",
+ "podIP": "172.17.0.9",
+ "podIPs": [
+ {
+ "ip": "172.17.0.9"
+ }
+ ],
+ "qosClass": "BestEffort",
+ "startTime": "2020-09-25T09:58:50.000Z"
+ }
+ },
+ {
+ "metadata": {
+ "creationTimestamp": "2020-09-24T11:39:27.000Z",
+ "generateName": "dice-roller-6c8646bfd-",
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:generateName": {},
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"5126c354-4310-4e23-a9e4-c9b87cb69792\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:enableServiceLinks": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-24T11:39:27.000Z"
+ },
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:status": {
+ "f:conditions": {
+ "k:{\"type\":\"ContainersReady\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Initialized\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Ready\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:containerStatuses": {},
+ "f:hostIP": {},
+ "f:phase": {},
+ "f:podIP": {},
+ "f:podIPs": {
+ ".": {},
+ "k:{\"ip\":\"172.17.0.4\"}": {
+ ".": {},
+ "f:ip": {}
+ }
+ },
+ "f:startTime": {}
+ }
+ },
+ "manager": "kubelet",
+ "operation": "Update",
+ "time": "2020-09-24T11:39:28.000Z"
+ }
+ ],
+ "name": "dice-roller-6c8646bfd-nv9pk",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "ReplicaSet",
+ "name": "dice-roller-6c8646bfd",
+ "uid": "5126c354-4310-4e23-a9e4-c9b87cb69792"
+ }
+ ],
+ "resourceVersion": "503918",
+ "selfLink": "/api/v1/namespaces/default/pods/dice-roller-6c8646bfd-nv9pk",
+ "uid": "acf7f77f-78c6-4d4b-bc73-637211770ffc"
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "enableServiceLinks": true,
+ "nodeName": "minikube",
+ "priority": 0,
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "serviceAccount": "default",
+ "serviceAccountName": "default",
+ "terminationGracePeriodSeconds": 30,
+ "tolerations": [
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ },
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ }
+ ],
+ "volumes": [
+ {
+ "name": "default-token-5gctn",
+ "secret": {
+ "defaultMode": 420,
+ "secretName": "default-token-5gctn"
+ }
+ }
+ ]
+ },
+ "status": {
+ "conditions": [
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-24T11:39:27.000Z",
+ "status": "True",
+ "type": "Initialized"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-24T11:39:28.000Z",
+ "status": "True",
+ "type": "Ready"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-24T11:39:28.000Z",
+ "status": "True",
+ "type": "ContainersReady"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-24T11:39:27.000Z",
+ "status": "True",
+ "type": "PodScheduled"
+ }
+ ],
+ "containerStatuses": [
+ {
+ "containerID": "docker://63dec9b32942c4b09ae43d09d6978261f674a3ee623823b8f1d20da8044c12ac",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {},
+ "name": "nginx",
+ "ready": true,
+ "restartCount": 0,
+ "started": true,
+ "state": {
+ "running": {
+ "startedAt": "2020-09-24T11:39:28.000Z"
+ }
+ }
+ }
+ ],
+ "hostIP": "192.168.64.2",
+ "phase": "Running",
+ "podIP": "172.17.0.4",
+ "podIPs": [
+ {
+ "ip": "172.17.0.4"
+ }
+ ],
+ "qosClass": "BestEffort",
+ "startTime": "2020-09-24T11:39:27.000Z"
+ }
+ },
+ {
+ "metadata": {
+ "creationTimestamp": "2020-09-25T09:58:50.000Z",
+ "generateName": "dice-roller-6c8646bfd-",
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:generateName": {},
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"5126c354-4310-4e23-a9e4-c9b87cb69792\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:enableServiceLinks": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:50.000Z"
+ },
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:status": {
+ "f:conditions": {
+ "k:{\"type\":\"ContainersReady\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Initialized\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Ready\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:containerStatuses": {},
+ "f:hostIP": {},
+ "f:phase": {},
+ "f:podIP": {},
+ "f:podIPs": {
+ ".": {},
+ "k:{\"ip\":\"172.17.0.10\"}": {
+ ".": {},
+ "f:ip": {}
+ }
+ },
+ "f:startTime": {}
+ }
+ },
+ "manager": "kubelet",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:55.000Z"
+ }
+ ],
+ "name": "dice-roller-6c8646bfd-pjhfj",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "ReplicaSet",
+ "name": "dice-roller-6c8646bfd",
+ "uid": "5126c354-4310-4e23-a9e4-c9b87cb69792"
+ }
+ ],
+ "resourceVersion": "593205",
+ "selfLink": "/api/v1/namespaces/default/pods/dice-roller-6c8646bfd-pjhfj",
+ "uid": "78775c3a-7af2-4ebe-a676-bc2e5dfa2bcc"
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "enableServiceLinks": true,
+ "nodeName": "minikube",
+ "priority": 0,
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "serviceAccount": "default",
+ "serviceAccountName": "default",
+ "terminationGracePeriodSeconds": 30,
+ "tolerations": [
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ },
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ }
+ ],
+ "volumes": [
+ {
+ "name": "default-token-5gctn",
+ "secret": {
+ "defaultMode": 420,
+ "secretName": "default-token-5gctn"
+ }
+ }
+ ]
+ },
+ "status": {
+ "conditions": [
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "Initialized"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:55.000Z",
+ "status": "True",
+ "type": "Ready"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:55.000Z",
+ "status": "True",
+ "type": "ContainersReady"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "PodScheduled"
+ }
+ ],
+ "containerStatuses": [
+ {
+ "containerID": "docker://cbb83dda250db74285dcbe0b81bd0896acf402bac9710af090311f7360f824aa",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {},
+ "name": "nginx",
+ "ready": true,
+ "restartCount": 0,
+ "started": true,
+ "state": {
+ "running": {
+ "startedAt": "2020-09-25T09:58:53.000Z"
+ }
+ }
+ }
+ ],
+ "hostIP": "192.168.64.2",
+ "phase": "Running",
+ "podIP": "172.17.0.10",
+ "podIPs": [
+ {
+ "ip": "172.17.0.10"
+ }
+ ],
+ "qosClass": "BestEffort",
+ "startTime": "2020-09-25T09:58:50.000Z"
+ }
+ }
+ ],
+ "replicaSets": [
+ {
+ "metadata": {
+ "annotations": {
+ "deployment.kubernetes.io/desired-replicas": "10",
+ "deployment.kubernetes.io/max-replicas": "13",
+ "deployment.kubernetes.io/revision": "2"
+ },
+ "creationTimestamp": "2020-09-24T11:39:26.000Z",
+ "generation": 3,
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "apps/v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:annotations": {
+ ".": {},
+ "f:deployment.kubernetes.io/desired-replicas": {},
+ "f:deployment.kubernetes.io/max-replicas": {},
+ "f:deployment.kubernetes.io/revision": {}
+ },
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"7551e949-42d1-4061-83c5-9da107186e47\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:replicas": {},
+ "f:selector": {
+ "f:matchLabels": {
+ ".": {},
+ "f:app": {},
+ "f:pod-template-hash": {}
+ }
+ },
+ "f:template": {
+ "f:metadata": {
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ }
+ },
+ "f:status": {
+ "f:availableReplicas": {},
+ "f:fullyLabeledReplicas": {},
+ "f:observedGeneration": {},
+ "f:readyReplicas": {},
+ "f:replicas": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:55.000Z"
+ }
+ ],
+ "name": "dice-roller-6c8646bfd",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "Deployment",
+ "name": "dice-roller",
+ "uid": "7551e949-42d1-4061-83c5-9da107186e47"
+ }
+ ],
+ "resourceVersion": "593228",
+ "selfLink": "/apis/apps/v1/namespaces/default/replicasets/dice-roller-6c8646bfd",
+ "uid": "5126c354-4310-4e23-a9e4-c9b87cb69792"
+ },
+ "spec": {
+ "replicas": 10,
+ "selector": {
+ "matchLabels": {
+ "app": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ }
+ },
+ "template": {
+ "metadata": {
+ "creationTimestamp": null,
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ }
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File"
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "terminationGracePeriodSeconds": 30
+ }
+ }
+ },
+ "status": {
+ "availableReplicas": 10,
+ "fullyLabeledReplicas": 10,
+ "observedGeneration": 3,
+ "readyReplicas": 10,
+ "replicas": 10
+ }
+ }
+ ],
+ "statefulsets": [
+ {
+ "metadata": {
+ "annotations": {
+ "deployment.kubernetes.io/revision": "2",
+ "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"apps/v1\",\"kind\":\"StatefulSet\",\"metadata\":{\"annotations\":{},\"labels\":{\"backstage.io/kubernetes-id\":\"dice-roller\"},\"name\":\"dice-roller\",\"namespace\":\"default\"},\"spec\":{\"replicas\":10,\"selector\":{\"matchLabels\":{\"app\":\"dice-roller\"}},\"template\":{\"metadata\":{\"labels\":{\"app\":\"dice-roller\",\"backstage.io/kubernetes-id\":\"dice-roller\"}},\"spec\":{\"containers\":[{\"image\":\"nginx:1.14.2\",\"name\":\"nginx\",\"ports\":[{\"containerPort\":80}]}]}}}}\n"
+ },
+ "creationTimestamp": "2020-09-23T12:00:55.000Z",
+ "generation": 3,
+ "labels": {
+ "backstage.io/kubernetes-id": "dice-roller"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "apps/v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:annotations": {
+ ".": {},
+ "f:kubectl.kubernetes.io/last-applied-configuration": {}
+ },
+ "f:labels": {
+ ".": {},
+ "f:backstage.io/kubernetes-id": {}
+ }
+ },
+ "f:spec": {
+ "f:progressDeadlineSeconds": {},
+ "f:replicas": {},
+ "f:revisionHistoryLimit": {},
+ "f:selector": {
+ "f:matchLabels": {
+ ".": {},
+ "f:app": {}
+ }
+ },
+ "f:strategy": {
+ "f:rollingUpdate": {
+ ".": {},
+ "f:maxSurge": {},
+ "f:maxUnavailable": {}
+ },
+ "f:type": {}
+ },
+ "f:template": {
+ "f:metadata": {
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {}
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ }
+ }
+ },
+ "manager": "kubectl",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:50.000Z"
+ },
+ {
+ "apiVersion": "apps/v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:annotations": {
+ "f:deployment.kubernetes.io/revision": {}
+ }
+ },
+ "f:status": {
+ "f:availableReplicas": {},
+ "f:conditions": {
+ ".": {},
+ "k:{\"type\":\"Available\"}": {
+ ".": {},
+ "f:lastTransitionTime": {},
+ "f:lastUpdateTime": {},
+ "f:message": {},
+ "f:reason": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Progressing\"}": {
+ ".": {},
+ "f:lastTransitionTime": {},
+ "f:lastUpdateTime": {},
+ "f:message": {},
+ "f:reason": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:observedGeneration": {},
+ "f:readyReplicas": {},
+ "f:replicas": {},
+ "f:updatedReplicas": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:55.000Z"
+ }
+ ],
+ "name": "dice-roller",
+ "namespace": "default",
+ "resourceVersion": "593230",
+ "selfLink": "/apis/apps/v1/namespaces/default/deployments/dice-roller",
+ "uid": "7551e949-42d1-4061-83c5-9da107186e47"
+ },
+ "spec": {
+ "replicas": 10,
+ "revisionHistoryLimit": 10,
+ "selector": {
+ "matchLabels": {
+ "app": "dice-roller"
+ }
+ },
+ "updateStrategy": {
+ "rollingUpdate": {
+ "maxSurge": "25%",
+ "maxUnavailable": "25%"
+ },
+ "type": "RollingUpdate"
+ },
+ "podManagementPolicy": "Parallel",
+ "serviceName": "dice-roller",
+ "template": {
+ "metadata": {
+ "creationTimestamp": null,
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller"
+ }
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File"
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "terminationGracePeriodSeconds": 30
+ }
+ }
+ },
+ "status": {
+ "availableReplicas": 10,
+ "conditions": [
+ {
+ "lastTransitionTime": "2020-09-23T12:00:55.000Z",
+ "lastUpdateTime": "2020-09-24T11:39:28.000Z",
+ "message": "ReplicaSet \"dice-roller-6c8646bfd\" has successfully progressed.",
+ "reason": "NewReplicaSetAvailable",
+ "status": "True",
+ "type": "Progressing"
+ },
+ {
+ "lastTransitionTime": "2020-09-25T09:58:55.000Z",
+ "lastUpdateTime": "2020-09-25T09:58:55.000Z",
+ "message": "Deployment has minimum availability.",
+ "reason": "MinimumReplicasAvailable",
+ "status": "True",
+ "type": "Available"
+ }
+ ],
+ "observedGeneration": 3,
+ "readyReplicas": 10,
+ "replicas": 10,
+ "updatedReplicas": 10
+ }
+ }
+ ],
+ "horizontalPodAutoscalers": [
+ {
+ "apiVersion": "autoscaling/v1",
+ "kind": "HorizontalPodAutoscaler",
+ "metadata": {
+ "annotations": {
+ "autoscaling.alpha.kubernetes.io/conditions": "[{\"type\":\"AbleToScale\",\"status\":\"True\",\"lastTransitionTime\":\"2021-01-05T10:26:04Z\",\"reason\":\"SucceededGetScale\",\"message\":\"the HPA controller was able to get the target's current scale\"},{\"type\":\"ScalingActive\",\"status\":\"False\",\"lastTransitionTime\":\"2021-01-05T10:26:04Z\",\"reason\":\"FailedGetResourceMetric\",\"message\":\"the HPA was unable to compute the replica count: unable to get metrics for resource cpu: no metrics returned from resource metrics API\"}]",
+ "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"autoscaling/v1\",\"kind\":\"HorizontalPodAutoscaler\",\"metadata\":{\"annotations\":{},\"labels\":{\"backstage.io/kubernetes-id\":\"dice-roller\"},\"name\":\"dice-roller\",\"namespace\":\"default\"},\"spec\":{\"maxReplicas\":15,\"minReplicas\":10,\"scaleTargetRef\":{\"apiVersion\":\"apps/v1\",\"kind\":\"Deployment\",\"name\":\"dice-roller\"},\"targetCPUUtilizationPercentage\":50}}\n"
+ },
+ "creationTimestamp": "2021-01-05T10:25:48Z",
+ "labels": {
+ "backstage.io/kubernetes-id": "dice-roller"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "autoscaling/v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:annotations": {
+ ".": {},
+ "f:kubectl.kubernetes.io/last-applied-configuration": {}
+ },
+ "f:labels": {
+ ".": {},
+ "f:backstage.io/kubernetes-id": {}
+ }
+ },
+ "f:spec": {
+ "f:maxReplicas": {},
+ "f:minReplicas": {},
+ "f:scaleTargetRef": {
+ "f:apiVersion": {},
+ "f:kind": {},
+ "f:name": {}
+ },
+ "f:targetCPUUtilizationPercentage": {}
+ }
+ },
+ "manager": "kubectl-client-side-apply",
+ "operation": "Update",
+ "time": "2021-01-05T10:25:48Z"
+ },
+ {
+ "apiVersion": "autoscaling/v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:annotations": {
+ "f:autoscaling.alpha.kubernetes.io/conditions": {}
+ }
+ },
+ "f:status": {
+ "f:currentReplicas": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2021-01-05T10:26:04Z"
+ }
+ ],
+ "name": "dice-roller",
+ "namespace": "default",
+ "resourceVersion": "598",
+ "selfLink": "/apis/autoscaling/v1/namespaces/default/horizontalpodautoscalers/dice-roller",
+ "uid": "dd7c5329-567c-43c2-b159-756808d90a8e"
+ },
+ "spec": {
+ "maxReplicas": 15,
+ "minReplicas": 10,
+ "scaleTargetRef": {
+ "apiVersion": "apps/v1",
+ "kind": "Deployment",
+ "name": "dice-roller"
+ },
+ "targetCPUUtilizationPercentage": 50
+ },
+ "status": {
+ "currentReplicas": 10,
+ "desiredReplicas": 0,
+ "currentCPUUtilizationPercentage": 30
+ }
+ }
+ ]
+}
diff --git a/plugins/kubernetes-react/src/__fixtures__/2-cronjobs.json b/plugins/kubernetes-react/src/__fixtures__/2-cronjobs.json
new file mode 100644
index 0000000000..6c087023b7
--- /dev/null
+++ b/plugins/kubernetes-react/src/__fixtures__/2-cronjobs.json
@@ -0,0 +1,385 @@
+{
+ "cronJobs": [
+ {
+ "metadata": {
+ "name": "dice-roller-cronjob",
+ "namespace": "default",
+ "uid": "9ea073bc-7a4b-4b99-8321-0305bce85568",
+ "resourceVersion": "1362732552",
+ "creationTimestamp": "2021-07-16T22:39:58Z",
+ "labels": {
+ "backstage.io/kubernetes-id": "dice-roller"
+ },
+ "annotations": {}
+ },
+ "spec": {
+ "schedule": "* */2 * * *",
+ "startingDeadlineSeconds": 1800,
+ "concurrencyPolicy": "Forbid",
+ "suspend": true,
+ "jobTemplate": {
+ "metadata": { "creationTimestamp": null },
+ "spec": {
+ "backoffLimit": 2,
+ "template": {
+ "metadata": {
+ "creationTimestamp": null,
+ "labels": {
+ "backstage.io/kubernetes-id": "dice-roller"
+ },
+ "annotations": {}
+ },
+ "spec": {
+ "containers": [
+ {
+ "name": "busybox",
+ "image": "busybox",
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "imagePullPolicy": "IfNotPresent",
+ "command": ["/bin/sh", "-c", "date; echo Rolling a die!"]
+ }
+ ],
+ "restartPolicy": "Never",
+ "terminationGracePeriodSeconds": 30,
+ "dnsPolicy": "ClusterFirst",
+ "securityContext": {},
+ "schedulerName": "default-scheduler"
+ }
+ }
+ }
+ },
+ "successfulJobsHistoryLimit": 2,
+ "failedJobsHistoryLimit": 2
+ },
+ "status": {
+ "lastScheduleTime": "2021-11-16T02:10:00Z"
+ }
+ }
+ ],
+ "jobs": [
+ {
+ "metadata": {
+ "name": "dice-roller-cronjob-1637025000",
+ "namespace": "default",
+ "uid": "69d5d242-a9a4-47b8-b9c7-c536ae8f151a",
+ "resourceVersion": "1361029181",
+ "creationTimestamp": "2021-11-16T01:10:24Z",
+ "labels": {
+ "backstage.io/kubernetes-id": "dice-roller"
+ },
+ "ownerReferences": [
+ {
+ "apiVersion": "batch/v1",
+ "kind": "CronJob",
+ "name": "dice-roller-cronjob",
+ "uid": "9ea073bc-7a4b-4b99-8321-0305bce85568",
+ "controller": true,
+ "blockOwnerDeletion": true
+ }
+ ]
+ },
+ "spec": {
+ "parallelism": 1,
+ "completions": 1,
+ "backoffLimit": 2,
+ "selector": {
+ "matchLabels": {
+ "controller-uid": "69d5d242-a9a4-47b8-b9c7-c536ae8f151a"
+ }
+ },
+ "template": {
+ "metadata": {
+ "creationTimestamp": null,
+ "labels": {
+ "backstage.io/kubernetes-id": "dice-roller",
+ "controller-uid": "69d5d242-a9a4-47b8-b9c7-c536ae8f151a",
+ "job-name": "dice-roller-cronjob-1637025000"
+ },
+ "annotations": {}
+ },
+ "spec": {
+ "containers": [
+ {
+ "command": ["/bin/sh", "-c", "date; echo Rolling a die!"],
+ "image": "busybox",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "busybox",
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File"
+ }
+ ],
+ "restartPolicy": "Never",
+ "terminationGracePeriodSeconds": 30,
+ "dnsPolicy": "ClusterFirst",
+ "securityContext": {},
+ "schedulerName": "default-scheduler"
+ }
+ }
+ },
+ "status": {
+ "conditions": [
+ {
+ "type": "Failed",
+ "status": "True",
+ "reason": "BackoffLimitExceeded",
+ "lastProbeTime": "2021-11-16T01:11:31Z",
+ "lastTransitionTime": "2021-11-16T01:11:31Z"
+ }
+ ],
+ "startTime": "2021-11-16T01:10:24Z",
+ "failed": 2
+ }
+ }
+ ],
+ "pods": [
+ {
+ "metadata": {
+ "name": "dice-roller-cronjob-1637025000-gstc4",
+ "generateName": "dice-roller-cronjob-1637025000-",
+ "namespace": "default",
+ "uid": "3b0f2b65-5ae2-441a-beda-bdc92bcafaf0",
+ "resourceVersion": "1361029179",
+ "creationTimestamp": "2021-11-16T01:10:24Z",
+ "labels": {
+ "backstage.io/kubernetes-id": "dice-roller",
+ "controller-uid": "69d5d242-a9a4-47b8-b9c7-c536ae8f151a",
+ "job-name": "dice-roller-cronjob-1637025000"
+ },
+ "annotations": {},
+ "ownerReferences": [
+ {
+ "apiVersion": "batch/v1",
+ "kind": "Job",
+ "name": "dice-roller-cronjob-1637025000",
+ "uid": "69d5d242-a9a4-47b8-b9c7-c536ae8f151a",
+ "controller": true,
+ "blockOwnerDeletion": true
+ }
+ ]
+ },
+ "spec": {
+ "volumes": [],
+ "containers": [
+ {
+ "command": ["/bin/sh", "-c", "date; echo Rolling a die!"],
+ "image": "busybox",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "busybox",
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File"
+ }
+ ],
+ "restartPolicy": "Never",
+ "terminationGracePeriodSeconds": 30,
+ "dnsPolicy": "ClusterFirst",
+ "serviceAccountName": "default",
+ "serviceAccount": "default",
+ "nodeName": "minikube",
+ "securityContext": {},
+ "schedulerName": "default-scheduler",
+ "tolerations": [
+ {
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "effect": "NoExecute",
+ "tolerationSeconds": 300
+ },
+ {
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "effect": "NoExecute",
+ "tolerationSeconds": 300
+ }
+ ],
+ "priority": 0,
+ "enableServiceLinks": true
+ },
+ "status": {
+ "phase": "Failed",
+ "conditions": [
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2021-11-18T19:10:13Z",
+ "status": "True",
+ "type": "Initialized"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2021-11-18T19:11:02Z",
+ "message": "containers with unready status: [busybox]",
+ "reason": "ContainersNotReady",
+ "status": "False",
+ "type": "Ready"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2021-11-18T19:11:02Z",
+ "message": "containers with unready status: [busybox]",
+ "reason": "ContainersNotReady",
+ "status": "False",
+ "type": "ContainersReady"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2021-11-18T19:10:08Z",
+ "status": "True",
+ "type": "PodScheduled"
+ }
+ ],
+ "hostIP": "192.168.49.2",
+ "podIP": "172.17.0.25",
+ "podIPs": [{ "ip": "172.17.0.25" }],
+ "startTime": "2021-11-18T19:10:08Z",
+ "containerStatuses": [
+ {
+ "name": "busybox",
+ "state": {
+ "terminated": {
+ "exitCode": 1,
+ "finishedAt": "2021-11-18T19:11:01Z",
+ "reason": "Error",
+ "startedAt": "2021-11-18T19:10:17Z",
+ "containerID": "docker://1062343e1bb3625e36717bc15617c1bbca976366c3c9dd87035c71f33d015615"
+ }
+ },
+ "lastState": {},
+ "ready": false,
+ "restartCount": 0,
+ "image": "busybox:latest",
+ "imageID": "docker-pullable://busybox@sha256:e7157b6d7ebbe2cce5eaa8cfe8aa4fa82d173999b9f90a9ec42e57323546c353",
+ "containerID": "docker://1062343e1bb3625e36717bc15617c1bbca976366c3c9dd87035c71f33d015615",
+ "started": false
+ }
+ ],
+ "qosClass": "Burstable"
+ }
+ },
+ {
+ "metadata": {
+ "name": "dice-roller-cronjob-1637025000-p4mlc",
+ "generateName": "dice-roller-cronjob-1637025000-",
+ "namespace": "default",
+ "uid": "acddd5d2-ac7f-473b-a9d8-17a89f99ac39",
+ "resourceVersion": "1361174579",
+ "creationTimestamp": "2021-11-16T02:10:22Z",
+ "labels": {
+ "backstage.io/kubernetes-id": "dice-roller",
+ "controller-uid": "69d5d242-a9a4-47b8-b9c7-c536ae8f151a",
+ "job-name": "dice-roller-cronjob-1637025000"
+ },
+ "annotations": {},
+ "ownerReferences": [
+ {
+ "apiVersion": "batch/v1",
+ "kind": "Job",
+ "name": "dice-roller-cronjob-1637025000",
+ "uid": "69d5d242-a9a4-47b8-b9c7-c536ae8f151a",
+ "controller": true,
+ "blockOwnerDeletion": true
+ }
+ ]
+ },
+ "spec": {
+ "volumes": [],
+ "containers": [
+ {
+ "command": ["/bin/sh", "-c", "date; echo Rolling a die!"],
+ "image": "busybox",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "busybox",
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File"
+ }
+ ],
+ "restartPolicy": "Never",
+ "terminationGracePeriodSeconds": 30,
+ "dnsPolicy": "ClusterFirst",
+ "serviceAccountName": "default",
+ "serviceAccount": "default",
+ "nodeName": "minikube",
+ "securityContext": {},
+ "schedulerName": "default-scheduler",
+ "tolerations": [
+ {
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "effect": "NoExecute",
+ "tolerationSeconds": 300
+ },
+ {
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "effect": "NoExecute",
+ "tolerationSeconds": 300
+ }
+ ],
+ "priority": 0,
+ "enableServiceLinks": true
+ },
+ "status": {
+ "phase": "Failed",
+ "conditions": [
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2021-11-18T19:10:13Z",
+ "status": "True",
+ "type": "Initialized"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2021-11-18T19:11:02Z",
+ "message": "containers with unready status: [busybox]",
+ "reason": "ContainersNotReady",
+ "status": "False",
+ "type": "Ready"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2021-11-18T19:11:02Z",
+ "message": "containers with unready status: [busybox]",
+ "reason": "ContainersNotReady",
+ "status": "False",
+ "type": "ContainersReady"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2021-11-18T19:10:08Z",
+ "status": "True",
+ "type": "PodScheduled"
+ }
+ ],
+ "hostIP": "192.168.49.2",
+ "podIP": "172.17.0.25",
+ "podIPs": [{ "ip": "172.17.0.25" }],
+ "startTime": "2021-11-16T02:10:22Z",
+ "containerStatuses": [
+ {
+ "name": "busybox",
+ "state": {
+ "terminated": {
+ "exitCode": 1,
+ "finishedAt": "2021-11-18T19:11:01Z",
+ "reason": "Error",
+ "startedAt": "2021-11-18T19:10:17Z",
+ "containerID": "docker://2659c4d0f8a68f2b49863c18738322f1686d5b87275428e5e641fd9fd9e06739"
+ }
+ },
+ "lastState": {},
+ "ready": true,
+ "restartCount": 0,
+ "image": "busybox:latest",
+ "imageID": "docker-pullable://busybox@sha256:e7157b6d7ebbe2cce5eaa8cfe8aa4fa82d173999b9f90a9ec42e57323546c353",
+ "containerID": "docker://2659c4d0f8a68f2b49863c18738322f1686d5b87275428e5e641fd9fd9e06739",
+ "started": true
+ }
+ ],
+ "qosClass": "Burstable"
+ }
+ }
+ ]
+}
diff --git a/plugins/kubernetes-react/src/__fixtures__/2-deployments.json b/plugins/kubernetes-react/src/__fixtures__/2-deployments.json
new file mode 100644
index 0000000000..f5efdbf1cb
--- /dev/null
+++ b/plugins/kubernetes-react/src/__fixtures__/2-deployments.json
@@ -0,0 +1,4519 @@
+{
+ "pods": [
+ {
+ "metadata": {
+ "creationTimestamp": "2020-09-25T09:58:50.000Z",
+ "generateName": "dice-roller-6c8646bfd-",
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:generateName": {},
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"5126c354-4310-4e23-a9e4-c9b87cb69792\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:enableServiceLinks": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:50.000Z"
+ },
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:status": {
+ "f:conditions": {
+ "k:{\"type\":\"ContainersReady\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Initialized\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Ready\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:containerStatuses": {},
+ "f:hostIP": {},
+ "f:phase": {},
+ "f:podIP": {},
+ "f:podIPs": {
+ ".": {},
+ "k:{\"ip\":\"172.17.0.11\"}": {
+ ".": {},
+ "f:ip": {}
+ }
+ },
+ "f:startTime": {}
+ }
+ },
+ "manager": "kubelet",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:55.000Z"
+ }
+ ],
+ "name": "dice-roller-6c8646bfd-2m5hv",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "ReplicaSet",
+ "name": "dice-roller-6c8646bfd",
+ "uid": "5126c354-4310-4e23-a9e4-c9b87cb69792"
+ }
+ ],
+ "resourceVersion": "593216",
+ "selfLink": "/api/v1/namespaces/default/pods/dice-roller-6c8646bfd-2m5hv",
+ "uid": "aadb71c0-36fa-43e3-b38a-162f134d4359"
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "enableServiceLinks": true,
+ "nodeName": "minikube",
+ "priority": 0,
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "serviceAccount": "default",
+ "serviceAccountName": "default",
+ "terminationGracePeriodSeconds": 30,
+ "tolerations": [
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ },
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ }
+ ],
+ "volumes": [
+ {
+ "name": "default-token-5gctn",
+ "secret": {
+ "defaultMode": 420,
+ "secretName": "default-token-5gctn"
+ }
+ }
+ ]
+ },
+ "status": {
+ "conditions": [
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "Initialized"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:55.000Z",
+ "status": "True",
+ "type": "Ready"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:55.000Z",
+ "status": "True",
+ "type": "ContainersReady"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "PodScheduled"
+ }
+ ],
+ "containerStatuses": [
+ {
+ "containerID": "docker://aa4489297c34c48bb33c18474a8d2b33854a82ed42155680b259f635f556ce70",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {},
+ "name": "nginx",
+ "ready": true,
+ "restartCount": 0,
+ "started": true,
+ "state": {
+ "running": {
+ "startedAt": "2020-09-25T09:58:53.000Z"
+ }
+ }
+ }
+ ],
+ "hostIP": "192.168.64.2",
+ "phase": "Running",
+ "podIP": "172.17.0.11",
+ "podIPs": [
+ {
+ "ip": "172.17.0.11"
+ }
+ ],
+ "qosClass": "BestEffort",
+ "startTime": "2020-09-25T09:58:50.000Z"
+ }
+ },
+ {
+ "metadata": {
+ "creationTimestamp": "2020-09-25T09:58:50.000Z",
+ "generateName": "dice-roller-6c8646bfd-",
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:generateName": {},
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"5126c354-4310-4e23-a9e4-c9b87cb69792\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:enableServiceLinks": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:50.000Z"
+ },
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:status": {
+ "f:conditions": {
+ "k:{\"type\":\"ContainersReady\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Initialized\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Ready\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:containerStatuses": {},
+ "f:hostIP": {},
+ "f:phase": {},
+ "f:podIP": {},
+ "f:podIPs": {
+ ".": {},
+ "k:{\"ip\":\"172.17.0.7\"}": {
+ ".": {},
+ "f:ip": {}
+ }
+ },
+ "f:startTime": {}
+ }
+ },
+ "manager": "kubelet",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:55.000Z"
+ }
+ ],
+ "name": "dice-roller-6c8646bfd-4v6s8",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "ReplicaSet",
+ "name": "dice-roller-6c8646bfd",
+ "uid": "5126c354-4310-4e23-a9e4-c9b87cb69792"
+ }
+ ],
+ "resourceVersion": "593221",
+ "selfLink": "/api/v1/namespaces/default/pods/dice-roller-6c8646bfd-4v6s8",
+ "uid": "32e56490-6f20-4757-991f-a0c7fb407358"
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "enableServiceLinks": true,
+ "nodeName": "minikube",
+ "priority": 0,
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "serviceAccount": "default",
+ "serviceAccountName": "default",
+ "terminationGracePeriodSeconds": 30,
+ "tolerations": [
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ },
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ }
+ ],
+ "volumes": [
+ {
+ "name": "default-token-5gctn",
+ "secret": {
+ "defaultMode": 420,
+ "secretName": "default-token-5gctn"
+ }
+ }
+ ]
+ },
+ "status": {
+ "conditions": [
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "Initialized"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:55.000Z",
+ "status": "True",
+ "type": "Ready"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:55.000Z",
+ "status": "True",
+ "type": "ContainersReady"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "PodScheduled"
+ }
+ ],
+ "containerStatuses": [
+ {
+ "containerID": "docker://d91cc76c41249b8d3dfcf538d180b471b2a7966aae0d17a818307c8a9b4af897",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {},
+ "name": "nginx",
+ "ready": true,
+ "restartCount": 0,
+ "started": true,
+ "state": {
+ "running": {
+ "startedAt": "2020-09-25T09:58:53.000Z"
+ }
+ }
+ }
+ ],
+ "hostIP": "192.168.64.2",
+ "phase": "Running",
+ "podIP": "172.17.0.7",
+ "podIPs": [
+ {
+ "ip": "172.17.0.7"
+ }
+ ],
+ "qosClass": "BestEffort",
+ "startTime": "2020-09-25T09:58:50.000Z"
+ }
+ },
+ {
+ "metadata": {
+ "creationTimestamp": "2020-09-24T11:39:26.000Z",
+ "generateName": "dice-roller-6c8646bfd-",
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:generateName": {},
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"5126c354-4310-4e23-a9e4-c9b87cb69792\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:enableServiceLinks": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-24T11:39:26.000Z"
+ },
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:status": {
+ "f:conditions": {
+ "k:{\"type\":\"ContainersReady\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Initialized\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Ready\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:containerStatuses": {},
+ "f:hostIP": {},
+ "f:phase": {},
+ "f:podIP": {},
+ "f:podIPs": {
+ ".": {},
+ "k:{\"ip\":\"172.17.0.6\"}": {
+ ".": {},
+ "f:ip": {}
+ }
+ },
+ "f:startTime": {}
+ }
+ },
+ "manager": "kubelet",
+ "operation": "Update",
+ "time": "2020-09-24T11:39:27.000Z"
+ }
+ ],
+ "name": "dice-roller-6c8646bfd-b9zt5",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "ReplicaSet",
+ "name": "dice-roller-6c8646bfd",
+ "uid": "5126c354-4310-4e23-a9e4-c9b87cb69792"
+ }
+ ],
+ "resourceVersion": "503886",
+ "selfLink": "/api/v1/namespaces/default/pods/dice-roller-6c8646bfd-b9zt5",
+ "uid": "8b6601b6-469e-4e89-8fd0-abb2f1a567e4"
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "enableServiceLinks": true,
+ "nodeName": "minikube",
+ "priority": 0,
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "serviceAccount": "default",
+ "serviceAccountName": "default",
+ "terminationGracePeriodSeconds": 30,
+ "tolerations": [
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ },
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ }
+ ],
+ "volumes": [
+ {
+ "name": "default-token-5gctn",
+ "secret": {
+ "defaultMode": 420,
+ "secretName": "default-token-5gctn"
+ }
+ }
+ ]
+ },
+ "status": {
+ "conditions": [
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-24T11:39:26.000Z",
+ "status": "True",
+ "type": "Initialized"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-24T11:39:27.000Z",
+ "status": "True",
+ "type": "Ready"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-24T11:39:27.000Z",
+ "status": "True",
+ "type": "ContainersReady"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-24T11:39:26.000Z",
+ "status": "True",
+ "type": "PodScheduled"
+ }
+ ],
+ "containerStatuses": [
+ {
+ "containerID": "docker://c50e0d0fa96f09a2ed5df7dd5a7f7de88e6b7c7addb8f002f299d6afc52d82ce",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {},
+ "name": "nginx",
+ "ready": true,
+ "restartCount": 0,
+ "started": true,
+ "state": {
+ "running": {
+ "startedAt": "2020-09-24T11:39:27.000Z"
+ }
+ }
+ }
+ ],
+ "hostIP": "192.168.64.2",
+ "phase": "Running",
+ "podIP": "172.17.0.6",
+ "podIPs": [
+ {
+ "ip": "172.17.0.6"
+ }
+ ],
+ "qosClass": "BestEffort",
+ "startTime": "2020-09-24T11:39:26.000Z"
+ }
+ },
+ {
+ "metadata": {
+ "creationTimestamp": "2020-09-25T09:58:50.000Z",
+ "generateName": "dice-roller-6c8646bfd-",
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:generateName": {},
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"5126c354-4310-4e23-a9e4-c9b87cb69792\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:enableServiceLinks": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:50.000Z"
+ },
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:status": {
+ "f:conditions": {
+ "k:{\"type\":\"ContainersReady\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Initialized\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Ready\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:containerStatuses": {},
+ "f:hostIP": {},
+ "f:phase": {},
+ "f:podIP": {},
+ "f:podIPs": {
+ ".": {},
+ "k:{\"ip\":\"172.17.0.13\"}": {
+ ".": {},
+ "f:ip": {}
+ }
+ },
+ "f:startTime": {}
+ }
+ },
+ "manager": "kubelet",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:55.000Z"
+ }
+ ],
+ "name": "dice-roller-6c8646bfd-cfxqc",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "ReplicaSet",
+ "name": "dice-roller-6c8646bfd",
+ "uid": "5126c354-4310-4e23-a9e4-c9b87cb69792"
+ }
+ ],
+ "resourceVersion": "593211",
+ "selfLink": "/api/v1/namespaces/default/pods/dice-roller-6c8646bfd-cfxqc",
+ "uid": "e87e1776-0ca7-41fb-aeea-e1f648387545"
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "enableServiceLinks": true,
+ "nodeName": "minikube",
+ "priority": 0,
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "serviceAccount": "default",
+ "serviceAccountName": "default",
+ "terminationGracePeriodSeconds": 30,
+ "tolerations": [
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ },
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ }
+ ],
+ "volumes": [
+ {
+ "name": "default-token-5gctn",
+ "secret": {
+ "defaultMode": 420,
+ "secretName": "default-token-5gctn"
+ }
+ }
+ ]
+ },
+ "status": {
+ "conditions": [
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:51.000Z",
+ "status": "True",
+ "type": "Initialized"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:55.000Z",
+ "status": "True",
+ "type": "Ready"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:55.000Z",
+ "status": "True",
+ "type": "ContainersReady"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "PodScheduled"
+ }
+ ],
+ "containerStatuses": [
+ {
+ "containerID": "docker://c1641d986aae424429b7c2c1117baeb17d3794f73206bd57292cdf8264f929b2",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {},
+ "name": "nginx",
+ "ready": true,
+ "restartCount": 0,
+ "started": true,
+ "state": {
+ "running": {
+ "startedAt": "2020-09-25T09:58:53.000Z"
+ }
+ }
+ }
+ ],
+ "hostIP": "192.168.64.2",
+ "phase": "Running",
+ "podIP": "172.17.0.13",
+ "podIPs": [
+ {
+ "ip": "172.17.0.13"
+ }
+ ],
+ "qosClass": "BestEffort",
+ "startTime": "2020-09-25T09:58:51.000Z"
+ }
+ },
+ {
+ "metadata": {
+ "creationTimestamp": "2020-09-25T09:58:50.000Z",
+ "generateName": "dice-roller-6c8646bfd-",
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:generateName": {},
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"5126c354-4310-4e23-a9e4-c9b87cb69792\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:enableServiceLinks": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:50.000Z"
+ },
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:status": {
+ "f:conditions": {
+ "k:{\"type\":\"ContainersReady\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Initialized\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Ready\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:containerStatuses": {},
+ "f:hostIP": {},
+ "f:phase": {},
+ "f:podIP": {},
+ "f:podIPs": {
+ ".": {},
+ "k:{\"ip\":\"172.17.0.15\"}": {
+ ".": {},
+ "f:ip": {}
+ }
+ },
+ "f:startTime": {}
+ }
+ },
+ "manager": "kubelet",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:54.000Z"
+ }
+ ],
+ "name": "dice-roller-6c8646bfd-dtv5z",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "ReplicaSet",
+ "name": "dice-roller-6c8646bfd",
+ "uid": "5126c354-4310-4e23-a9e4-c9b87cb69792"
+ }
+ ],
+ "resourceVersion": "593190",
+ "selfLink": "/api/v1/namespaces/default/pods/dice-roller-6c8646bfd-dtv5z",
+ "uid": "1638a41b-e47e-4c17-a1f7-7b447df248b6"
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "enableServiceLinks": true,
+ "nodeName": "minikube",
+ "priority": 0,
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "serviceAccount": "default",
+ "serviceAccountName": "default",
+ "terminationGracePeriodSeconds": 30,
+ "tolerations": [
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ },
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ }
+ ],
+ "volumes": [
+ {
+ "name": "default-token-5gctn",
+ "secret": {
+ "defaultMode": 420,
+ "secretName": "default-token-5gctn"
+ }
+ }
+ ]
+ },
+ "status": {
+ "conditions": [
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:51.000Z",
+ "status": "True",
+ "type": "Initialized"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:53.000Z",
+ "status": "True",
+ "type": "Ready"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:53.000Z",
+ "status": "True",
+ "type": "ContainersReady"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "PodScheduled"
+ }
+ ],
+ "containerStatuses": [
+ {
+ "containerID": "docker://e62c32db58dbfe0a74b2d2cba0e0a97b7f222693c68e930037ac8738c4758ca3",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {},
+ "name": "nginx",
+ "ready": true,
+ "restartCount": 0,
+ "started": true,
+ "state": {
+ "running": {
+ "startedAt": "2020-09-25T09:58:53.000Z"
+ }
+ }
+ }
+ ],
+ "hostIP": "192.168.64.2",
+ "phase": "Running",
+ "podIP": "172.17.0.15",
+ "podIPs": [
+ {
+ "ip": "172.17.0.15"
+ }
+ ],
+ "qosClass": "BestEffort",
+ "startTime": "2020-09-25T09:58:51.000Z"
+ }
+ },
+ {
+ "metadata": {
+ "creationTimestamp": "2020-09-25T09:58:50.000Z",
+ "generateName": "dice-roller-6c8646bfd-",
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:generateName": {},
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"5126c354-4310-4e23-a9e4-c9b87cb69792\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:enableServiceLinks": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:50.000Z"
+ },
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:status": {
+ "f:conditions": {
+ "k:{\"type\":\"ContainersReady\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Initialized\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Ready\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:containerStatuses": {},
+ "f:hostIP": {},
+ "f:phase": {},
+ "f:podIP": {},
+ "f:podIPs": {
+ ".": {},
+ "k:{\"ip\":\"172.17.0.12\"}": {
+ ".": {},
+ "f:ip": {}
+ }
+ },
+ "f:startTime": {}
+ }
+ },
+ "manager": "kubelet",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:53.000Z"
+ }
+ ],
+ "name": "dice-roller-6c8646bfd-hhts2",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "ReplicaSet",
+ "name": "dice-roller-6c8646bfd",
+ "uid": "5126c354-4310-4e23-a9e4-c9b87cb69792"
+ }
+ ],
+ "resourceVersion": "593186",
+ "selfLink": "/api/v1/namespaces/default/pods/dice-roller-6c8646bfd-hhts2",
+ "uid": "ea0b147a-c56a-46e6-9445-7a0b1b0ed3c0"
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "enableServiceLinks": true,
+ "nodeName": "minikube",
+ "priority": 0,
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "serviceAccount": "default",
+ "serviceAccountName": "default",
+ "terminationGracePeriodSeconds": 30,
+ "tolerations": [
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ },
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ }
+ ],
+ "volumes": [
+ {
+ "name": "default-token-5gctn",
+ "secret": {
+ "defaultMode": 420,
+ "secretName": "default-token-5gctn"
+ }
+ }
+ ]
+ },
+ "status": {
+ "conditions": [
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "Initialized"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:53.000Z",
+ "status": "True",
+ "type": "Ready"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:53.000Z",
+ "status": "True",
+ "type": "ContainersReady"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "PodScheduled"
+ }
+ ],
+ "containerStatuses": [
+ {
+ "containerID": "docker://bcdbc153630f90556d57ff0d62f04d847ca63a5f0a7e5d9230683623d33d4b8d",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {},
+ "name": "nginx",
+ "ready": true,
+ "restartCount": 0,
+ "started": true,
+ "state": {
+ "running": {
+ "startedAt": "2020-09-25T09:58:53.000Z"
+ }
+ }
+ }
+ ],
+ "hostIP": "192.168.64.2",
+ "phase": "Running",
+ "podIP": "172.17.0.12",
+ "podIPs": [
+ {
+ "ip": "172.17.0.12"
+ }
+ ],
+ "qosClass": "BestEffort",
+ "startTime": "2020-09-25T09:58:50.000Z"
+ }
+ },
+ {
+ "metadata": {
+ "creationTimestamp": "2020-09-25T09:58:50.000Z",
+ "generateName": "dice-roller-6c8646bfd-",
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:generateName": {},
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"5126c354-4310-4e23-a9e4-c9b87cb69792\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:enableServiceLinks": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:50.000Z"
+ },
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:status": {
+ "f:conditions": {
+ "k:{\"type\":\"ContainersReady\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Initialized\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Ready\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:containerStatuses": {},
+ "f:hostIP": {},
+ "f:phase": {},
+ "f:podIP": {},
+ "f:podIPs": {
+ ".": {},
+ "k:{\"ip\":\"172.17.0.14\"}": {
+ ".": {},
+ "f:ip": {}
+ }
+ },
+ "f:startTime": {}
+ }
+ },
+ "manager": "kubelet",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:55.000Z"
+ }
+ ],
+ "name": "dice-roller-6c8646bfd-j68lm",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "ReplicaSet",
+ "name": "dice-roller-6c8646bfd",
+ "uid": "5126c354-4310-4e23-a9e4-c9b87cb69792"
+ }
+ ],
+ "resourceVersion": "593226",
+ "selfLink": "/api/v1/namespaces/default/pods/dice-roller-6c8646bfd-j68lm",
+ "uid": "b230ff1d-7a13-479b-9c7b-77c26bd79f62"
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "enableServiceLinks": true,
+ "nodeName": "minikube",
+ "priority": 0,
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "serviceAccount": "default",
+ "serviceAccountName": "default",
+ "terminationGracePeriodSeconds": 30,
+ "tolerations": [
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ },
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ }
+ ],
+ "volumes": [
+ {
+ "name": "default-token-5gctn",
+ "secret": {
+ "defaultMode": 420,
+ "secretName": "default-token-5gctn"
+ }
+ }
+ ]
+ },
+ "status": {
+ "conditions": [
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "Initialized"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:55.000Z",
+ "status": "True",
+ "type": "Ready"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:55.000Z",
+ "status": "True",
+ "type": "ContainersReady"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "PodScheduled"
+ }
+ ],
+ "containerStatuses": [
+ {
+ "containerID": "docker://30fa8a3429f86ab8e9a4cec472b79d74266609082703f48950f4aae021e9d6a2",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {},
+ "name": "nginx",
+ "ready": true,
+ "restartCount": 0,
+ "started": true,
+ "state": {
+ "running": {
+ "startedAt": "2020-09-25T09:58:53.000Z"
+ }
+ }
+ }
+ ],
+ "hostIP": "192.168.64.2",
+ "phase": "Running",
+ "podIP": "172.17.0.14",
+ "podIPs": [
+ {
+ "ip": "172.17.0.14"
+ }
+ ],
+ "qosClass": "BestEffort",
+ "startTime": "2020-09-25T09:58:50.000Z"
+ }
+ },
+ {
+ "metadata": {
+ "creationTimestamp": "2020-09-25T09:58:50.000Z",
+ "generateName": "dice-roller-6c8646bfd-",
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:generateName": {},
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"5126c354-4310-4e23-a9e4-c9b87cb69792\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:enableServiceLinks": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:50.000Z"
+ },
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:status": {
+ "f:conditions": {
+ "k:{\"type\":\"ContainersReady\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Initialized\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Ready\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:containerStatuses": {},
+ "f:hostIP": {},
+ "f:phase": {},
+ "f:podIP": {},
+ "f:podIPs": {
+ ".": {},
+ "k:{\"ip\":\"172.17.0.9\"}": {
+ ".": {},
+ "f:ip": {}
+ }
+ },
+ "f:startTime": {}
+ }
+ },
+ "manager": "kubelet",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:53.000Z"
+ }
+ ],
+ "name": "dice-roller-6c8646bfd-m6f9w",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "ReplicaSet",
+ "name": "dice-roller-6c8646bfd",
+ "uid": "5126c354-4310-4e23-a9e4-c9b87cb69792"
+ }
+ ],
+ "resourceVersion": "593181",
+ "selfLink": "/api/v1/namespaces/default/pods/dice-roller-6c8646bfd-m6f9w",
+ "uid": "9b0079f6-ff29-4619-bf6e-71cc10199ac5"
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "enableServiceLinks": true,
+ "nodeName": "minikube",
+ "priority": 0,
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "serviceAccount": "default",
+ "serviceAccountName": "default",
+ "terminationGracePeriodSeconds": 30,
+ "tolerations": [
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ },
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ }
+ ],
+ "volumes": [
+ {
+ "name": "default-token-5gctn",
+ "secret": {
+ "defaultMode": 420,
+ "secretName": "default-token-5gctn"
+ }
+ }
+ ]
+ },
+ "status": {
+ "conditions": [
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "Initialized"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:53.000Z",
+ "status": "True",
+ "type": "Ready"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:53.000Z",
+ "status": "True",
+ "type": "ContainersReady"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "PodScheduled"
+ }
+ ],
+ "containerStatuses": [
+ {
+ "containerID": "docker://f78767ee90eedffe46ff64bfe76d7f69426800dd89f3df012daf0baf3a9c5bdd",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {},
+ "name": "nginx",
+ "ready": true,
+ "restartCount": 0,
+ "started": true,
+ "state": {
+ "running": {
+ "startedAt": "2020-09-25T09:58:53.000Z"
+ }
+ }
+ }
+ ],
+ "hostIP": "192.168.64.2",
+ "phase": "Running",
+ "podIP": "172.17.0.9",
+ "podIPs": [
+ {
+ "ip": "172.17.0.9"
+ }
+ ],
+ "qosClass": "BestEffort",
+ "startTime": "2020-09-25T09:58:50.000Z"
+ }
+ },
+ {
+ "metadata": {
+ "creationTimestamp": "2020-09-24T11:39:27.000Z",
+ "generateName": "dice-roller-6c8646bfd-",
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:generateName": {},
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"5126c354-4310-4e23-a9e4-c9b87cb69792\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:enableServiceLinks": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-24T11:39:27.000Z"
+ },
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:status": {
+ "f:conditions": {
+ "k:{\"type\":\"ContainersReady\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Initialized\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Ready\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:containerStatuses": {},
+ "f:hostIP": {},
+ "f:phase": {},
+ "f:podIP": {},
+ "f:podIPs": {
+ ".": {},
+ "k:{\"ip\":\"172.17.0.4\"}": {
+ ".": {},
+ "f:ip": {}
+ }
+ },
+ "f:startTime": {}
+ }
+ },
+ "manager": "kubelet",
+ "operation": "Update",
+ "time": "2020-09-24T11:39:28.000Z"
+ }
+ ],
+ "name": "dice-roller-6c8646bfd-nv9pk",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "ReplicaSet",
+ "name": "dice-roller-6c8646bfd",
+ "uid": "5126c354-4310-4e23-a9e4-c9b87cb69792"
+ }
+ ],
+ "resourceVersion": "503918",
+ "selfLink": "/api/v1/namespaces/default/pods/dice-roller-6c8646bfd-nv9pk",
+ "uid": "acf7f77f-78c6-4d4b-bc73-637211770ffc"
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "enableServiceLinks": true,
+ "nodeName": "minikube",
+ "priority": 0,
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "serviceAccount": "default",
+ "serviceAccountName": "default",
+ "terminationGracePeriodSeconds": 30,
+ "tolerations": [
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ },
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ }
+ ],
+ "volumes": [
+ {
+ "name": "default-token-5gctn",
+ "secret": {
+ "defaultMode": 420,
+ "secretName": "default-token-5gctn"
+ }
+ }
+ ]
+ },
+ "status": {
+ "conditions": [
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-24T11:39:27.000Z",
+ "status": "True",
+ "type": "Initialized"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-24T11:39:28.000Z",
+ "status": "True",
+ "type": "Ready"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-24T11:39:28.000Z",
+ "status": "True",
+ "type": "ContainersReady"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-24T11:39:27.000Z",
+ "status": "True",
+ "type": "PodScheduled"
+ }
+ ],
+ "containerStatuses": [
+ {
+ "containerID": "docker://63dec9b32942c4b09ae43d09d6978261f674a3ee623823b8f1d20da8044c12ac",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {},
+ "name": "nginx",
+ "ready": true,
+ "restartCount": 0,
+ "started": true,
+ "state": {
+ "running": {
+ "startedAt": "2020-09-24T11:39:28.000Z"
+ }
+ }
+ }
+ ],
+ "hostIP": "192.168.64.2",
+ "phase": "Running",
+ "podIP": "172.17.0.4",
+ "podIPs": [
+ {
+ "ip": "172.17.0.4"
+ }
+ ],
+ "qosClass": "BestEffort",
+ "startTime": "2020-09-24T11:39:27.000Z"
+ }
+ },
+ {
+ "metadata": {
+ "creationTimestamp": "2020-09-25T09:58:50.000Z",
+ "generateName": "dice-roller-6c8646bfd-",
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:generateName": {},
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"5126c354-4310-4e23-a9e4-c9b87cb69792\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:enableServiceLinks": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:50.000Z"
+ },
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:status": {
+ "f:conditions": {
+ "k:{\"type\":\"ContainersReady\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Initialized\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Ready\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:containerStatuses": {},
+ "f:hostIP": {},
+ "f:phase": {},
+ "f:podIP": {},
+ "f:podIPs": {
+ ".": {},
+ "k:{\"ip\":\"172.17.0.10\"}": {
+ ".": {},
+ "f:ip": {}
+ }
+ },
+ "f:startTime": {}
+ }
+ },
+ "manager": "kubelet",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:55.000Z"
+ }
+ ],
+ "name": "dice-roller-6c8646bfd-pjhfj",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "ReplicaSet",
+ "name": "dice-roller-6c8646bfd",
+ "uid": "5126c354-4310-4e23-a9e4-c9b87cb69792"
+ }
+ ],
+ "resourceVersion": "593205",
+ "selfLink": "/api/v1/namespaces/default/pods/dice-roller-6c8646bfd-pjhfj",
+ "uid": "78775c3a-7af2-4ebe-a676-bc2e5dfa2bcc"
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "enableServiceLinks": true,
+ "nodeName": "minikube",
+ "priority": 0,
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "serviceAccount": "default",
+ "serviceAccountName": "default",
+ "terminationGracePeriodSeconds": 30,
+ "tolerations": [
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ },
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ }
+ ],
+ "volumes": [
+ {
+ "name": "default-token-5gctn",
+ "secret": {
+ "defaultMode": 420,
+ "secretName": "default-token-5gctn"
+ }
+ }
+ ]
+ },
+ "status": {
+ "conditions": [
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "Initialized"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:55.000Z",
+ "status": "True",
+ "type": "Ready"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:55.000Z",
+ "status": "True",
+ "type": "ContainersReady"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "PodScheduled"
+ }
+ ],
+ "containerStatuses": [
+ {
+ "containerID": "docker://cbb83dda250db74285dcbe0b81bd0896acf402bac9710af090311f7360f824aa",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {},
+ "name": "nginx",
+ "ready": true,
+ "restartCount": 0,
+ "started": true,
+ "state": {
+ "running": {
+ "startedAt": "2020-09-25T09:58:53.000Z"
+ }
+ }
+ }
+ ],
+ "hostIP": "192.168.64.2",
+ "phase": "Running",
+ "podIP": "172.17.0.10",
+ "podIPs": [
+ {
+ "ip": "172.17.0.10"
+ }
+ ],
+ "qosClass": "BestEffort",
+ "startTime": "2020-09-25T09:58:50.000Z"
+ }
+ },
+ {
+ "metadata": {
+ "creationTimestamp": "2020-09-25T10:34:01.000Z",
+ "generateName": "dice-roller-canary-7d64cd756c-",
+ "labels": {
+ "app": "dice-roller-canary",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "7d64cd756c"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:generateName": {},
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"9208395b-a9a7-4e46-b881-6a189f7fbdb0\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ },
+ "k:{\"name\":\"other-side-car\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":82,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ },
+ "k:{\"name\":\"side-car\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":81,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:enableServiceLinks": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T10:34:01.000Z"
+ },
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:status": {
+ "f:conditions": {
+ "k:{\"type\":\"ContainersReady\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:message": {},
+ "f:reason": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Initialized\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Ready\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:message": {},
+ "f:reason": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:containerStatuses": {},
+ "f:hostIP": {},
+ "f:phase": {},
+ "f:podIP": {},
+ "f:podIPs": {
+ ".": {},
+ "k:{\"ip\":\"172.17.0.16\"}": {
+ ".": {},
+ "f:ip": {}
+ }
+ },
+ "f:startTime": {}
+ }
+ },
+ "manager": "kubelet",
+ "operation": "Update",
+ "time": "2020-09-25T14:18:54.000Z"
+ }
+ ],
+ "name": "dice-roller-canary-7d64cd756c-55rfq",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "ReplicaSet",
+ "name": "dice-roller-canary-7d64cd756c",
+ "uid": "9208395b-a9a7-4e46-b881-6a189f7fbdb0"
+ }
+ ],
+ "resourceVersion": "620452",
+ "selfLink": "/api/v1/namespaces/default/pods/dice-roller-canary-7d64cd756c-55rfq",
+ "uid": "65ad28e3-5d51-4b4b-9bf8-4cb069803034"
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ },
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "side-car",
+ "ports": [
+ {
+ "containerPort": 81,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ },
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "other-side-car",
+ "ports": [
+ {
+ "containerPort": 82,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "enableServiceLinks": true,
+ "nodeName": "minikube",
+ "priority": 0,
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "serviceAccount": "default",
+ "serviceAccountName": "default",
+ "terminationGracePeriodSeconds": 30,
+ "tolerations": [
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ },
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ }
+ ],
+ "volumes": [
+ {
+ "name": "default-token-5gctn",
+ "secret": {
+ "defaultMode": 420,
+ "secretName": "default-token-5gctn"
+ }
+ }
+ ]
+ },
+ "status": {
+ "conditions": [
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T10:34:01.000Z",
+ "status": "True",
+ "type": "Initialized"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T14:18:53.000Z",
+ "message": "containers with unready status: [side-car other-side-car]",
+ "reason": "ContainersNotReady",
+ "status": "False",
+ "type": "Ready"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T14:18:53.000Z",
+ "message": "containers with unready status: [side-car other-side-car]",
+ "reason": "ContainersNotReady",
+ "status": "False",
+ "type": "ContainersReady"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T10:34:01.000Z",
+ "status": "True",
+ "type": "PodScheduled"
+ }
+ ],
+ "containerStatuses": [
+ {
+ "containerID": "docker://6ce15178d114a85f3d2e832de45c3355ab5b71ed5f4d4d225ee1c83bf07f69d9",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {},
+ "name": "nginx",
+ "ready": true,
+ "restartCount": 0,
+ "started": true,
+ "state": {
+ "running": {
+ "startedAt": "2020-09-25T10:34:01.000Z"
+ }
+ }
+ },
+ {
+ "containerID": "docker://b3ce93d7f90bfe22558c61d2505b8473580574accdebb5fa4e51c0729c3511f4",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {
+ "terminated": {
+ "containerID": "docker://b3ce93d7f90bfe22558c61d2505b8473580574accdebb5fa4e51c0729c3511f4",
+ "exitCode": 1,
+ "finishedAt": "2020-09-25T14:18:52.000Z",
+ "reason": "Error",
+ "startedAt": "2020-09-25T14:18:50.000Z"
+ }
+ },
+ "name": "other-side-car",
+ "ready": false,
+ "restartCount": 38,
+ "started": false,
+ "state": {
+ "waiting": {
+ "message": "back-off 5m0s restarting failed container=other-side-car pod=dice-roller-canary-7d64cd756c-55rfq_default(65ad28e3-5d51-4b4b-9bf8-4cb069803034)",
+ "reason": "CrashLoopBackOff"
+ }
+ }
+ },
+ {
+ "containerID": "docker://b7f0e65a2b8ab48c5f234616cfe8286aa96b55c3ef09c5cfbc4cdbe67a96f8cb",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {
+ "terminated": {
+ "containerID": "docker://b7f0e65a2b8ab48c5f234616cfe8286aa96b55c3ef09c5cfbc4cdbe67a96f8cb",
+ "exitCode": 1,
+ "finishedAt": "2020-09-25T14:18:52.000Z",
+ "reason": "Error",
+ "startedAt": "2020-09-25T14:18:50.000Z"
+ }
+ },
+ "name": "side-car",
+ "ready": false,
+ "restartCount": 38,
+ "started": false,
+ "state": {
+ "waiting": {
+ "message": "back-off 5m0s restarting failed container=side-car pod=dice-roller-canary-7d64cd756c-55rfq_default(65ad28e3-5d51-4b4b-9bf8-4cb069803034)",
+ "reason": "CrashLoopBackOff"
+ }
+ }
+ }
+ ],
+ "hostIP": "192.168.64.2",
+ "phase": "Running",
+ "podIP": "172.17.0.16",
+ "podIPs": [
+ {
+ "ip": "172.17.0.16"
+ }
+ ],
+ "qosClass": "BestEffort",
+ "startTime": "2020-09-25T10:34:01.000Z"
+ }
+ },
+ {
+ "metadata": {
+ "creationTimestamp": "2020-09-25T10:34:02.000Z",
+ "generateName": "dice-roller-canary-7d64cd756c-",
+ "labels": {
+ "app": "dice-roller-canary",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "7d64cd756c"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:generateName": {},
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"9208395b-a9a7-4e46-b881-6a189f7fbdb0\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ },
+ "k:{\"name\":\"other-side-car\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":82,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ },
+ "k:{\"name\":\"side-car\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":81,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:enableServiceLinks": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T10:34:02.000Z"
+ },
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:status": {
+ "f:conditions": {
+ "k:{\"type\":\"ContainersReady\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:message": {},
+ "f:reason": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Initialized\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Ready\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:message": {},
+ "f:reason": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:containerStatuses": {},
+ "f:hostIP": {},
+ "f:phase": {},
+ "f:podIP": {},
+ "f:podIPs": {
+ ".": {},
+ "k:{\"ip\":\"172.17.0.5\"}": {
+ ".": {},
+ "f:ip": {}
+ }
+ },
+ "f:startTime": {}
+ }
+ },
+ "manager": "kubelet",
+ "operation": "Update",
+ "time": "2020-09-25T14:19:05.000Z"
+ }
+ ],
+ "name": "dice-roller-canary-7d64cd756c-vtbdx",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "ReplicaSet",
+ "name": "dice-roller-canary-7d64cd756c",
+ "uid": "9208395b-a9a7-4e46-b881-6a189f7fbdb0"
+ }
+ ],
+ "resourceVersion": "620481",
+ "selfLink": "/api/v1/namespaces/default/pods/dice-roller-canary-7d64cd756c-vtbdx",
+ "uid": "0b8d9d79-b43d-4339-be57-ad5c63add77e"
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ },
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "side-car",
+ "ports": [
+ {
+ "containerPort": 81,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ },
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "other-side-car",
+ "ports": [
+ {
+ "containerPort": 82,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "enableServiceLinks": true,
+ "nodeName": "minikube",
+ "priority": 0,
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "serviceAccount": "default",
+ "serviceAccountName": "default",
+ "terminationGracePeriodSeconds": 30,
+ "tolerations": [
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ },
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ }
+ ],
+ "volumes": [
+ {
+ "name": "default-token-5gctn",
+ "secret": {
+ "defaultMode": 420,
+ "secretName": "default-token-5gctn"
+ }
+ }
+ ]
+ },
+ "status": {
+ "conditions": [
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T10:34:02.000Z",
+ "status": "True",
+ "type": "Initialized"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T14:19:04.000Z",
+ "message": "containers with unready status: [side-car other-side-car]",
+ "reason": "ContainersNotReady",
+ "status": "False",
+ "type": "Ready"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T14:19:04.000Z",
+ "message": "containers with unready status: [side-car other-side-car]",
+ "reason": "ContainersNotReady",
+ "status": "False",
+ "type": "ContainersReady"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T10:34:02.000Z",
+ "status": "True",
+ "type": "PodScheduled"
+ }
+ ],
+ "containerStatuses": [
+ {
+ "containerID": "docker://3f9cadc6f135247eb2df9aaca8f25ea05dcf42be86d58fb833c8acf192da0d66",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {},
+ "name": "nginx",
+ "ready": true,
+ "restartCount": 0,
+ "started": true,
+ "state": {
+ "running": {
+ "startedAt": "2020-09-25T10:34:03.000Z"
+ }
+ }
+ },
+ {
+ "containerID": "docker://5e3a9f9129e5ce74fea249c013afcc056ee95a940fed24495ef9b58df67771f3",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {
+ "terminated": {
+ "containerID": "docker://5e3a9f9129e5ce74fea249c013afcc056ee95a940fed24495ef9b58df67771f3",
+ "exitCode": 1,
+ "finishedAt": "2020-09-25T14:19:03.000Z",
+ "reason": "Error",
+ "startedAt": "2020-09-25T14:19:01.000Z"
+ }
+ },
+ "name": "other-side-car",
+ "ready": false,
+ "restartCount": 38,
+ "started": false,
+ "state": {
+ "waiting": {
+ "message": "back-off 5m0s restarting failed container=other-side-car pod=dice-roller-canary-7d64cd756c-vtbdx_default(0b8d9d79-b43d-4339-be57-ad5c63add77e)",
+ "reason": "CrashLoopBackOff"
+ }
+ }
+ },
+ {
+ "containerID": "docker://21b42cae298c0ed7f90373974d8c88b0941d17733f35398144a17ece32e03210",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {
+ "terminated": {
+ "containerID": "docker://21b42cae298c0ed7f90373974d8c88b0941d17733f35398144a17ece32e03210",
+ "exitCode": 1,
+ "finishedAt": "2020-09-25T14:19:03.000Z",
+ "reason": "Error",
+ "startedAt": "2020-09-25T14:19:01.000Z"
+ }
+ },
+ "name": "side-car",
+ "ready": false,
+ "restartCount": 38,
+ "started": false,
+ "state": {
+ "waiting": {
+ "message": "back-off 5m0s restarting failed container=side-car pod=dice-roller-canary-7d64cd756c-vtbdx_default(0b8d9d79-b43d-4339-be57-ad5c63add77e)",
+ "reason": "CrashLoopBackOff"
+ }
+ }
+ }
+ ],
+ "hostIP": "192.168.64.2",
+ "phase": "Running",
+ "podIP": "172.17.0.5",
+ "podIPs": [
+ {
+ "ip": "172.17.0.5"
+ }
+ ],
+ "qosClass": "BestEffort",
+ "startTime": "2020-09-25T10:34:02.000Z"
+ }
+ }
+ ],
+ "replicaSets": [
+ {
+ "metadata": {
+ "annotations": {
+ "deployment.kubernetes.io/desired-replicas": "10",
+ "deployment.kubernetes.io/max-replicas": "13",
+ "deployment.kubernetes.io/revision": "2"
+ },
+ "creationTimestamp": "2020-09-24T11:39:26.000Z",
+ "generation": 3,
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "apps/v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:annotations": {
+ ".": {},
+ "f:deployment.kubernetes.io/desired-replicas": {},
+ "f:deployment.kubernetes.io/max-replicas": {},
+ "f:deployment.kubernetes.io/revision": {}
+ },
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"7551e949-42d1-4061-83c5-9da107186e47\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:replicas": {},
+ "f:selector": {
+ "f:matchLabels": {
+ ".": {},
+ "f:app": {},
+ "f:pod-template-hash": {}
+ }
+ },
+ "f:template": {
+ "f:metadata": {
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ }
+ },
+ "f:status": {
+ "f:availableReplicas": {},
+ "f:fullyLabeledReplicas": {},
+ "f:observedGeneration": {},
+ "f:readyReplicas": {},
+ "f:replicas": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:55.000Z"
+ }
+ ],
+ "name": "dice-roller-6c8646bfd",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "Deployment",
+ "name": "dice-roller",
+ "uid": "7551e949-42d1-4061-83c5-9da107186e47"
+ }
+ ],
+ "resourceVersion": "593228",
+ "selfLink": "/apis/apps/v1/namespaces/default/replicasets/dice-roller-6c8646bfd",
+ "uid": "5126c354-4310-4e23-a9e4-c9b87cb69792"
+ },
+ "spec": {
+ "replicas": 10,
+ "selector": {
+ "matchLabels": {
+ "app": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ }
+ },
+ "template": {
+ "metadata": {
+ "creationTimestamp": null,
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ }
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File"
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "terminationGracePeriodSeconds": 30
+ }
+ }
+ },
+ "status": {
+ "availableReplicas": 10,
+ "fullyLabeledReplicas": 10,
+ "observedGeneration": 3,
+ "readyReplicas": 10,
+ "replicas": 10
+ }
+ },
+ {
+ "metadata": {
+ "annotations": {
+ "deployment.kubernetes.io/desired-replicas": "2",
+ "deployment.kubernetes.io/max-replicas": "3",
+ "deployment.kubernetes.io/revision": "3"
+ },
+ "creationTimestamp": "2020-09-25T10:34:01.000Z",
+ "generation": 2,
+ "labels": {
+ "app": "dice-roller-canary",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "7d64cd756c"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "apps/v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:annotations": {
+ ".": {},
+ "f:deployment.kubernetes.io/desired-replicas": {},
+ "f:deployment.kubernetes.io/max-replicas": {},
+ "f:deployment.kubernetes.io/revision": {}
+ },
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"0b6ae80f-999b-40e9-b116-ea925f0ed07b\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:replicas": {},
+ "f:selector": {
+ "f:matchLabels": {
+ ".": {},
+ "f:app": {},
+ "f:pod-template-hash": {}
+ }
+ },
+ "f:template": {
+ "f:metadata": {
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ },
+ "k:{\"name\":\"other-side-car\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":82,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ },
+ "k:{\"name\":\"side-car\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":81,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ }
+ },
+ "f:status": {
+ "f:fullyLabeledReplicas": {},
+ "f:observedGeneration": {},
+ "f:replicas": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T14:19:01.000Z"
+ }
+ ],
+ "name": "dice-roller-canary-7d64cd756c",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "Deployment",
+ "name": "dice-roller-canary",
+ "uid": "0b6ae80f-999b-40e9-b116-ea925f0ed07b"
+ }
+ ],
+ "resourceVersion": "620479",
+ "selfLink": "/apis/apps/v1/namespaces/default/replicasets/dice-roller-canary-7d64cd756c",
+ "uid": "9208395b-a9a7-4e46-b881-6a189f7fbdb0"
+ },
+ "spec": {
+ "replicas": 2,
+ "selector": {
+ "matchLabels": {
+ "app": "dice-roller-canary",
+ "pod-template-hash": "7d64cd756c"
+ }
+ },
+ "template": {
+ "metadata": {
+ "creationTimestamp": null,
+ "labels": {
+ "app": "dice-roller-canary",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "7d64cd756c"
+ }
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File"
+ },
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "side-car",
+ "ports": [
+ {
+ "containerPort": 81,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File"
+ },
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "other-side-car",
+ "ports": [
+ {
+ "containerPort": 82,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File"
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "terminationGracePeriodSeconds": 30
+ }
+ }
+ },
+ "status": {
+ "fullyLabeledReplicas": 2,
+ "observedGeneration": 2,
+ "replicas": 2
+ }
+ },
+ {
+ "metadata": {
+ "annotations": {
+ "deployment.kubernetes.io/desired-replicas": "2",
+ "deployment.kubernetes.io/max-replicas": "3",
+ "deployment.kubernetes.io/revision": "2"
+ },
+ "creationTimestamp": "2020-09-25T09:25:16.000Z",
+ "generation": 4,
+ "labels": {
+ "app": "dice-roller-canary",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "bcb8d54dd"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "apps/v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:annotations": {
+ ".": {},
+ "f:deployment.kubernetes.io/desired-replicas": {},
+ "f:deployment.kubernetes.io/max-replicas": {},
+ "f:deployment.kubernetes.io/revision": {}
+ },
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"0b6ae80f-999b-40e9-b116-ea925f0ed07b\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:replicas": {},
+ "f:selector": {
+ "f:matchLabels": {
+ ".": {},
+ "f:app": {},
+ "f:pod-template-hash": {}
+ }
+ },
+ "f:template": {
+ "f:metadata": {
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ },
+ "k:{\"name\":\"side-car\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":81,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ }
+ },
+ "f:status": {
+ "f:observedGeneration": {},
+ "f:replicas": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T10:34:04.000Z"
+ }
+ ],
+ "name": "dice-roller-canary-bcb8d54dd",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "Deployment",
+ "name": "dice-roller-canary",
+ "uid": "0b6ae80f-999b-40e9-b116-ea925f0ed07b"
+ }
+ ],
+ "resourceVersion": "598025",
+ "selfLink": "/apis/apps/v1/namespaces/default/replicasets/dice-roller-canary-bcb8d54dd",
+ "uid": "51942585-d599-42aa-bf23-9cf1acad4006"
+ },
+ "spec": {
+ "replicas": 0,
+ "selector": {
+ "matchLabels": {
+ "app": "dice-roller-canary",
+ "pod-template-hash": "bcb8d54dd"
+ }
+ },
+ "template": {
+ "metadata": {
+ "creationTimestamp": null,
+ "labels": {
+ "app": "dice-roller-canary",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "bcb8d54dd"
+ }
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File"
+ },
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "side-car",
+ "ports": [
+ {
+ "containerPort": 81,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File"
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "terminationGracePeriodSeconds": 30
+ }
+ }
+ },
+ "status": {
+ "observedGeneration": 4,
+ "replicas": 0
+ }
+ },
+ {
+ "metadata": {
+ "annotations": {
+ "deployment.kubernetes.io/desired-replicas": "2",
+ "deployment.kubernetes.io/max-replicas": "3",
+ "deployment.kubernetes.io/revision": "1"
+ },
+ "creationTimestamp": "2020-09-25T09:02:53.000Z",
+ "generation": 3,
+ "labels": {
+ "app": "dice-roller-canary",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "c866fbf67"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "apps/v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:annotations": {
+ ".": {},
+ "f:deployment.kubernetes.io/desired-replicas": {},
+ "f:deployment.kubernetes.io/max-replicas": {},
+ "f:deployment.kubernetes.io/revision": {}
+ },
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"0b6ae80f-999b-40e9-b116-ea925f0ed07b\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:replicas": {},
+ "f:selector": {
+ "f:matchLabels": {
+ ".": {},
+ "f:app": {},
+ "f:pod-template-hash": {}
+ }
+ },
+ "f:template": {
+ "f:metadata": {
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ }
+ },
+ "f:status": {
+ "f:observedGeneration": {},
+ "f:replicas": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T09:25:20.000Z"
+ }
+ ],
+ "name": "dice-roller-canary-c866fbf67",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "Deployment",
+ "name": "dice-roller-canary",
+ "uid": "0b6ae80f-999b-40e9-b116-ea925f0ed07b"
+ }
+ ],
+ "resourceVersion": "588501",
+ "selfLink": "/apis/apps/v1/namespaces/default/replicasets/dice-roller-canary-c866fbf67",
+ "uid": "4d2dfe13-978f-4504-9036-ca585acdea6c"
+ },
+ "spec": {
+ "replicas": 0,
+ "selector": {
+ "matchLabels": {
+ "app": "dice-roller-canary",
+ "pod-template-hash": "c866fbf67"
+ }
+ },
+ "template": {
+ "metadata": {
+ "creationTimestamp": null,
+ "labels": {
+ "app": "dice-roller-canary",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "c866fbf67"
+ }
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File"
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "terminationGracePeriodSeconds": 30
+ }
+ }
+ },
+ "status": {
+ "observedGeneration": 3,
+ "replicas": 0
+ }
+ }
+ ],
+ "deployments": [
+ {
+ "metadata": {
+ "annotations": {
+ "deployment.kubernetes.io/revision": "2",
+ "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"apps/v1\",\"kind\":\"Deployment\",\"metadata\":{\"annotations\":{},\"labels\":{\"backstage.io/kubernetes-id\":\"dice-roller\"},\"name\":\"dice-roller\",\"namespace\":\"default\"},\"spec\":{\"replicas\":10,\"selector\":{\"matchLabels\":{\"app\":\"dice-roller\"}},\"template\":{\"metadata\":{\"labels\":{\"app\":\"dice-roller\",\"backstage.io/kubernetes-id\":\"dice-roller\"}},\"spec\":{\"containers\":[{\"image\":\"nginx:1.14.2\",\"name\":\"nginx\",\"ports\":[{\"containerPort\":80}]}]}}}}\n"
+ },
+ "creationTimestamp": "2020-09-23T12:00:55.000Z",
+ "generation": 3,
+ "labels": {
+ "backstage.io/kubernetes-id": "dice-roller"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "apps/v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:annotations": {
+ ".": {},
+ "f:kubectl.kubernetes.io/last-applied-configuration": {}
+ },
+ "f:labels": {
+ ".": {},
+ "f:backstage.io/kubernetes-id": {}
+ }
+ },
+ "f:spec": {
+ "f:progressDeadlineSeconds": {},
+ "f:replicas": {},
+ "f:revisionHistoryLimit": {},
+ "f:selector": {
+ "f:matchLabels": {
+ ".": {},
+ "f:app": {}
+ }
+ },
+ "f:strategy": {
+ "f:rollingUpdate": {
+ ".": {},
+ "f:maxSurge": {},
+ "f:maxUnavailable": {}
+ },
+ "f:type": {}
+ },
+ "f:template": {
+ "f:metadata": {
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {}
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ }
+ }
+ },
+ "manager": "kubectl",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:50.000Z"
+ },
+ {
+ "apiVersion": "apps/v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:annotations": {
+ "f:deployment.kubernetes.io/revision": {}
+ }
+ },
+ "f:status": {
+ "f:availableReplicas": {},
+ "f:conditions": {
+ ".": {},
+ "k:{\"type\":\"Available\"}": {
+ ".": {},
+ "f:lastTransitionTime": {},
+ "f:lastUpdateTime": {},
+ "f:message": {},
+ "f:reason": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Progressing\"}": {
+ ".": {},
+ "f:lastTransitionTime": {},
+ "f:lastUpdateTime": {},
+ "f:message": {},
+ "f:reason": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:observedGeneration": {},
+ "f:readyReplicas": {},
+ "f:replicas": {},
+ "f:updatedReplicas": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:55.000Z"
+ }
+ ],
+ "name": "dice-roller",
+ "namespace": "default",
+ "resourceVersion": "593230",
+ "selfLink": "/apis/apps/v1/namespaces/default/deployments/dice-roller",
+ "uid": "7551e949-42d1-4061-83c5-9da107186e47"
+ },
+ "spec": {
+ "progressDeadlineSeconds": 600,
+ "replicas": 10,
+ "revisionHistoryLimit": 10,
+ "selector": {
+ "matchLabels": {
+ "app": "dice-roller"
+ }
+ },
+ "strategy": {
+ "rollingUpdate": {
+ "maxSurge": "25%",
+ "maxUnavailable": "25%"
+ },
+ "type": "RollingUpdate"
+ },
+ "template": {
+ "metadata": {
+ "creationTimestamp": null,
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller"
+ }
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File"
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "terminationGracePeriodSeconds": 30
+ }
+ }
+ },
+ "status": {
+ "availableReplicas": 10,
+ "conditions": [
+ {
+ "lastTransitionTime": "2020-09-23T12:00:55.000Z",
+ "lastUpdateTime": "2020-09-24T11:39:28.000Z",
+ "message": "ReplicaSet \"dice-roller-6c8646bfd\" has successfully progressed.",
+ "reason": "NewReplicaSetAvailable",
+ "status": "True",
+ "type": "Progressing"
+ },
+ {
+ "lastTransitionTime": "2020-09-25T09:58:55.000Z",
+ "lastUpdateTime": "2020-09-25T09:58:55.000Z",
+ "message": "Deployment has minimum availability.",
+ "reason": "MinimumReplicasAvailable",
+ "status": "True",
+ "type": "Available"
+ }
+ ],
+ "observedGeneration": 3,
+ "readyReplicas": 10,
+ "replicas": 10,
+ "updatedReplicas": 10
+ }
+ },
+ {
+ "metadata": {
+ "annotations": {
+ "deployment.kubernetes.io/revision": "3",
+ "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"apps/v1\",\"kind\":\"Deployment\",\"metadata\":{\"annotations\":{},\"labels\":{\"backstage.io/kubernetes-id\":\"dice-roller\"},\"name\":\"dice-roller-canary\",\"namespace\":\"default\"},\"spec\":{\"replicas\":2,\"selector\":{\"matchLabels\":{\"app\":\"dice-roller-canary\"}},\"template\":{\"metadata\":{\"labels\":{\"app\":\"dice-roller-canary\",\"backstage.io/kubernetes-id\":\"dice-roller\"}},\"spec\":{\"containers\":[{\"image\":\"nginx:1.14.2\",\"name\":\"nginx\",\"ports\":[{\"containerPort\":80}]},{\"image\":\"nginx:1.14.2\",\"name\":\"side-car\",\"ports\":[{\"containerPort\":81}]},{\"image\":\"nginx:1.14.2\",\"name\":\"other-side-car\",\"ports\":[{\"containerPort\":82}]}]}}}}\n"
+ },
+ "creationTimestamp": "2020-09-25T09:02:53.000Z",
+ "generation": 3,
+ "labels": {
+ "backstage.io/kubernetes-id": "dice-roller"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "apps/v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:annotations": {
+ ".": {},
+ "f:kubectl.kubernetes.io/last-applied-configuration": {}
+ },
+ "f:labels": {
+ ".": {},
+ "f:backstage.io/kubernetes-id": {}
+ }
+ },
+ "f:spec": {
+ "f:progressDeadlineSeconds": {},
+ "f:replicas": {},
+ "f:revisionHistoryLimit": {},
+ "f:selector": {
+ "f:matchLabels": {
+ ".": {},
+ "f:app": {}
+ }
+ },
+ "f:strategy": {
+ "f:rollingUpdate": {
+ ".": {},
+ "f:maxSurge": {},
+ "f:maxUnavailable": {}
+ },
+ "f:type": {}
+ },
+ "f:template": {
+ "f:metadata": {
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {}
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ },
+ "k:{\"name\":\"other-side-car\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":82,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ },
+ "k:{\"name\":\"side-car\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":81,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ }
+ }
+ },
+ "manager": "kubectl",
+ "operation": "Update",
+ "time": "2020-09-25T10:34:01.000Z"
+ },
+ {
+ "apiVersion": "apps/v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:annotations": {
+ "f:deployment.kubernetes.io/revision": {}
+ }
+ },
+ "f:status": {
+ "f:conditions": {
+ ".": {},
+ "k:{\"type\":\"Available\"}": {
+ ".": {},
+ "f:lastTransitionTime": {},
+ "f:lastUpdateTime": {},
+ "f:message": {},
+ "f:reason": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Progressing\"}": {
+ ".": {},
+ "f:lastTransitionTime": {},
+ "f:lastUpdateTime": {},
+ "f:message": {},
+ "f:reason": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:observedGeneration": {},
+ "f:replicas": {},
+ "f:unavailableReplicas": {},
+ "f:updatedReplicas": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T14:19:04.000Z"
+ }
+ ],
+ "name": "dice-roller-canary",
+ "namespace": "default",
+ "resourceVersion": "620480",
+ "selfLink": "/apis/apps/v1/namespaces/default/deployments/dice-roller-canary",
+ "uid": "0b6ae80f-999b-40e9-b116-ea925f0ed07b"
+ },
+ "spec": {
+ "progressDeadlineSeconds": 600,
+ "replicas": 2,
+ "revisionHistoryLimit": 10,
+ "selector": {
+ "matchLabels": {
+ "app": "dice-roller-canary"
+ }
+ },
+ "strategy": {
+ "rollingUpdate": {
+ "maxSurge": "25%",
+ "maxUnavailable": "25%"
+ },
+ "type": "RollingUpdate"
+ },
+ "template": {
+ "metadata": {
+ "creationTimestamp": null,
+ "labels": {
+ "app": "dice-roller-canary",
+ "backstage.io/kubernetes-id": "dice-roller"
+ }
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File"
+ },
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "side-car",
+ "ports": [
+ {
+ "containerPort": 81,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File"
+ },
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "other-side-car",
+ "ports": [
+ {
+ "containerPort": 82,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File"
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "terminationGracePeriodSeconds": 30
+ }
+ }
+ },
+ "status": {
+ "conditions": [
+ {
+ "lastTransitionTime": "2020-09-25T09:02:53.000Z",
+ "lastUpdateTime": "2020-09-25T10:34:04.000Z",
+ "message": "ReplicaSet \"dice-roller-canary-7d64cd756c\" has successfully progressed.",
+ "reason": "NewReplicaSetAvailable",
+ "status": "True",
+ "type": "Progressing"
+ },
+ {
+ "lastTransitionTime": "2020-09-25T13:48:06.000Z",
+ "lastUpdateTime": "2020-09-25T13:48:06.000Z",
+ "message": "Deployment does not have minimum availability.",
+ "reason": "MinimumReplicasUnavailable",
+ "status": "False",
+ "type": "Available"
+ }
+ ],
+ "observedGeneration": 3,
+ "replicas": 2,
+ "unavailableReplicas": 2,
+ "updatedReplicas": 2
+ }
+ }
+ ],
+ "horizontalPodAutoscalers": [
+ {
+ "apiVersion": "autoscaling/v1",
+ "kind": "HorizontalPodAutoscaler",
+ "metadata": {
+ "annotations": {
+ "autoscaling.alpha.kubernetes.io/conditions": "[{\"type\":\"AbleToScale\",\"status\":\"True\",\"lastTransitionTime\":\"2021-01-05T10:26:04Z\",\"reason\":\"SucceededGetScale\",\"message\":\"the HPA controller was able to get the target's current scale\"},{\"type\":\"ScalingActive\",\"status\":\"False\",\"lastTransitionTime\":\"2021-01-05T10:26:04Z\",\"reason\":\"FailedGetResourceMetric\",\"message\":\"the HPA was unable to compute the replica count: unable to get metrics for resource cpu: no metrics returned from resource metrics API\"}]",
+ "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"autoscaling/v1\",\"kind\":\"HorizontalPodAutoscaler\",\"metadata\":{\"annotations\":{},\"labels\":{\"backstage.io/kubernetes-id\":\"dice-roller\"},\"name\":\"dice-roller\",\"namespace\":\"default\"},\"spec\":{\"maxReplicas\":15,\"minReplicas\":10,\"scaleTargetRef\":{\"apiVersion\":\"apps/v1\",\"kind\":\"Deployment\",\"name\":\"dice-roller\"},\"targetCPUUtilizationPercentage\":50}}\n"
+ },
+ "creationTimestamp": "2021-01-05T10:25:48Z",
+ "labels": {
+ "backstage.io/kubernetes-id": "dice-roller"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "autoscaling/v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:annotations": {
+ ".": {},
+ "f:kubectl.kubernetes.io/last-applied-configuration": {}
+ },
+ "f:labels": {
+ ".": {},
+ "f:backstage.io/kubernetes-id": {}
+ }
+ },
+ "f:spec": {
+ "f:maxReplicas": {},
+ "f:minReplicas": {},
+ "f:scaleTargetRef": {
+ "f:apiVersion": {},
+ "f:kind": {},
+ "f:name": {}
+ },
+ "f:targetCPUUtilizationPercentage": {}
+ }
+ },
+ "manager": "kubectl-client-side-apply",
+ "operation": "Update",
+ "time": "2021-01-05T10:25:48Z"
+ },
+ {
+ "apiVersion": "autoscaling/v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:annotations": {
+ "f:autoscaling.alpha.kubernetes.io/conditions": {}
+ }
+ },
+ "f:status": {
+ "f:currentReplicas": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2021-01-05T10:26:04Z"
+ }
+ ],
+ "name": "dice-roller",
+ "namespace": "default",
+ "resourceVersion": "598",
+ "selfLink": "/apis/autoscaling/v1/namespaces/default/horizontalpodautoscalers/dice-roller",
+ "uid": "dd7c5329-567c-43c2-b159-756808d90a8e"
+ },
+ "spec": {
+ "maxReplicas": 15,
+ "minReplicas": 10,
+ "scaleTargetRef": {
+ "apiVersion": "apps/v1",
+ "kind": "Deployment",
+ "name": "dice-roller"
+ },
+ "targetCPUUtilizationPercentage": 50
+ },
+ "status": {
+ "currentReplicas": 10,
+ "desiredReplicas": 0,
+ "currentCPUUtilizationPercentage": 30
+ }
+ }
+ ]
+}
diff --git a/plugins/kubernetes-react/src/__fixtures__/2-statefulsets.json b/plugins/kubernetes-react/src/__fixtures__/2-statefulsets.json
new file mode 100644
index 0000000000..0a8c26c198
--- /dev/null
+++ b/plugins/kubernetes-react/src/__fixtures__/2-statefulsets.json
@@ -0,0 +1,4521 @@
+{
+ "pods": [
+ {
+ "metadata": {
+ "creationTimestamp": "2020-09-25T09:58:50.000Z",
+ "generateName": "dice-roller-6c8646bfd-",
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:generateName": {},
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"5126c354-4310-4e23-a9e4-c9b87cb69792\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:enableServiceLinks": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:50.000Z"
+ },
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:status": {
+ "f:conditions": {
+ "k:{\"type\":\"ContainersReady\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Initialized\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Ready\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:containerStatuses": {},
+ "f:hostIP": {},
+ "f:phase": {},
+ "f:podIP": {},
+ "f:podIPs": {
+ ".": {},
+ "k:{\"ip\":\"172.17.0.11\"}": {
+ ".": {},
+ "f:ip": {}
+ }
+ },
+ "f:startTime": {}
+ }
+ },
+ "manager": "kubelet",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:55.000Z"
+ }
+ ],
+ "name": "dice-roller-6c8646bfd-2m5hv",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "StatefulSet",
+ "name": "dice-roller-6c8646bfd",
+ "uid": "5126c354-4310-4e23-a9e4-c9b87cb69792"
+ }
+ ],
+ "resourceVersion": "593216",
+ "selfLink": "/api/v1/namespaces/default/pods/dice-roller-6c8646bfd-2m5hv",
+ "uid": "aadb71c0-36fa-43e3-b38a-162f134d4359"
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "enableServiceLinks": true,
+ "nodeName": "minikube",
+ "priority": 0,
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "serviceAccount": "default",
+ "serviceAccountName": "default",
+ "terminationGracePeriodSeconds": 30,
+ "tolerations": [
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ },
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ }
+ ],
+ "volumes": [
+ {
+ "name": "default-token-5gctn",
+ "secret": {
+ "defaultMode": 420,
+ "secretName": "default-token-5gctn"
+ }
+ }
+ ]
+ },
+ "status": {
+ "conditions": [
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "Initialized"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:55.000Z",
+ "status": "True",
+ "type": "Ready"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:55.000Z",
+ "status": "True",
+ "type": "ContainersReady"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "PodScheduled"
+ }
+ ],
+ "containerStatuses": [
+ {
+ "containerID": "docker://aa4489297c34c48bb33c18474a8d2b33854a82ed42155680b259f635f556ce70",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {},
+ "name": "nginx",
+ "ready": true,
+ "restartCount": 0,
+ "started": true,
+ "state": {
+ "running": {
+ "startedAt": "2020-09-25T09:58:53.000Z"
+ }
+ }
+ }
+ ],
+ "hostIP": "192.168.64.2",
+ "phase": "Running",
+ "podIP": "172.17.0.11",
+ "podIPs": [
+ {
+ "ip": "172.17.0.11"
+ }
+ ],
+ "qosClass": "BestEffort",
+ "startTime": "2020-09-25T09:58:50.000Z"
+ }
+ },
+ {
+ "metadata": {
+ "creationTimestamp": "2020-09-25T09:58:50.000Z",
+ "generateName": "dice-roller-6c8646bfd-",
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:generateName": {},
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"5126c354-4310-4e23-a9e4-c9b87cb69792\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:enableServiceLinks": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:50.000Z"
+ },
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:status": {
+ "f:conditions": {
+ "k:{\"type\":\"ContainersReady\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Initialized\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Ready\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:containerStatuses": {},
+ "f:hostIP": {},
+ "f:phase": {},
+ "f:podIP": {},
+ "f:podIPs": {
+ ".": {},
+ "k:{\"ip\":\"172.17.0.7\"}": {
+ ".": {},
+ "f:ip": {}
+ }
+ },
+ "f:startTime": {}
+ }
+ },
+ "manager": "kubelet",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:55.000Z"
+ }
+ ],
+ "name": "dice-roller-6c8646bfd-4v6s8",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "ReplicaSet",
+ "name": "dice-roller-6c8646bfd",
+ "uid": "5126c354-4310-4e23-a9e4-c9b87cb69792"
+ }
+ ],
+ "resourceVersion": "593221",
+ "selfLink": "/api/v1/namespaces/default/pods/dice-roller-6c8646bfd-4v6s8",
+ "uid": "32e56490-6f20-4757-991f-a0c7fb407358"
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "enableServiceLinks": true,
+ "nodeName": "minikube",
+ "priority": 0,
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "serviceAccount": "default",
+ "serviceAccountName": "default",
+ "terminationGracePeriodSeconds": 30,
+ "tolerations": [
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ },
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ }
+ ],
+ "volumes": [
+ {
+ "name": "default-token-5gctn",
+ "secret": {
+ "defaultMode": 420,
+ "secretName": "default-token-5gctn"
+ }
+ }
+ ]
+ },
+ "status": {
+ "conditions": [
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "Initialized"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:55.000Z",
+ "status": "True",
+ "type": "Ready"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:55.000Z",
+ "status": "True",
+ "type": "ContainersReady"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "PodScheduled"
+ }
+ ],
+ "containerStatuses": [
+ {
+ "containerID": "docker://d91cc76c41249b8d3dfcf538d180b471b2a7966aae0d17a818307c8a9b4af897",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {},
+ "name": "nginx",
+ "ready": true,
+ "restartCount": 0,
+ "started": true,
+ "state": {
+ "running": {
+ "startedAt": "2020-09-25T09:58:53.000Z"
+ }
+ }
+ }
+ ],
+ "hostIP": "192.168.64.2",
+ "phase": "Running",
+ "podIP": "172.17.0.7",
+ "podIPs": [
+ {
+ "ip": "172.17.0.7"
+ }
+ ],
+ "qosClass": "BestEffort",
+ "startTime": "2020-09-25T09:58:50.000Z"
+ }
+ },
+ {
+ "metadata": {
+ "creationTimestamp": "2020-09-24T11:39:26.000Z",
+ "generateName": "dice-roller-6c8646bfd-",
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:generateName": {},
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"5126c354-4310-4e23-a9e4-c9b87cb69792\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:enableServiceLinks": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-24T11:39:26.000Z"
+ },
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:status": {
+ "f:conditions": {
+ "k:{\"type\":\"ContainersReady\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Initialized\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Ready\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:containerStatuses": {},
+ "f:hostIP": {},
+ "f:phase": {},
+ "f:podIP": {},
+ "f:podIPs": {
+ ".": {},
+ "k:{\"ip\":\"172.17.0.6\"}": {
+ ".": {},
+ "f:ip": {}
+ }
+ },
+ "f:startTime": {}
+ }
+ },
+ "manager": "kubelet",
+ "operation": "Update",
+ "time": "2020-09-24T11:39:27.000Z"
+ }
+ ],
+ "name": "dice-roller-6c8646bfd-b9zt5",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "ReplicaSet",
+ "name": "dice-roller-6c8646bfd",
+ "uid": "5126c354-4310-4e23-a9e4-c9b87cb69792"
+ }
+ ],
+ "resourceVersion": "503886",
+ "selfLink": "/api/v1/namespaces/default/pods/dice-roller-6c8646bfd-b9zt5",
+ "uid": "8b6601b6-469e-4e89-8fd0-abb2f1a567e4"
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "enableServiceLinks": true,
+ "nodeName": "minikube",
+ "priority": 0,
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "serviceAccount": "default",
+ "serviceAccountName": "default",
+ "terminationGracePeriodSeconds": 30,
+ "tolerations": [
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ },
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ }
+ ],
+ "volumes": [
+ {
+ "name": "default-token-5gctn",
+ "secret": {
+ "defaultMode": 420,
+ "secretName": "default-token-5gctn"
+ }
+ }
+ ]
+ },
+ "status": {
+ "conditions": [
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-24T11:39:26.000Z",
+ "status": "True",
+ "type": "Initialized"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-24T11:39:27.000Z",
+ "status": "True",
+ "type": "Ready"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-24T11:39:27.000Z",
+ "status": "True",
+ "type": "ContainersReady"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-24T11:39:26.000Z",
+ "status": "True",
+ "type": "PodScheduled"
+ }
+ ],
+ "containerStatuses": [
+ {
+ "containerID": "docker://c50e0d0fa96f09a2ed5df7dd5a7f7de88e6b7c7addb8f002f299d6afc52d82ce",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {},
+ "name": "nginx",
+ "ready": true,
+ "restartCount": 0,
+ "started": true,
+ "state": {
+ "running": {
+ "startedAt": "2020-09-24T11:39:27.000Z"
+ }
+ }
+ }
+ ],
+ "hostIP": "192.168.64.2",
+ "phase": "Running",
+ "podIP": "172.17.0.6",
+ "podIPs": [
+ {
+ "ip": "172.17.0.6"
+ }
+ ],
+ "qosClass": "BestEffort",
+ "startTime": "2020-09-24T11:39:26.000Z"
+ }
+ },
+ {
+ "metadata": {
+ "creationTimestamp": "2020-09-25T09:58:50.000Z",
+ "generateName": "dice-roller-6c8646bfd-",
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:generateName": {},
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"5126c354-4310-4e23-a9e4-c9b87cb69792\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:enableServiceLinks": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:50.000Z"
+ },
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:status": {
+ "f:conditions": {
+ "k:{\"type\":\"ContainersReady\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Initialized\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Ready\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:containerStatuses": {},
+ "f:hostIP": {},
+ "f:phase": {},
+ "f:podIP": {},
+ "f:podIPs": {
+ ".": {},
+ "k:{\"ip\":\"172.17.0.13\"}": {
+ ".": {},
+ "f:ip": {}
+ }
+ },
+ "f:startTime": {}
+ }
+ },
+ "manager": "kubelet",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:55.000Z"
+ }
+ ],
+ "name": "dice-roller-6c8646bfd-cfxqc",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "ReplicaSet",
+ "name": "dice-roller-6c8646bfd",
+ "uid": "5126c354-4310-4e23-a9e4-c9b87cb69792"
+ }
+ ],
+ "resourceVersion": "593211",
+ "selfLink": "/api/v1/namespaces/default/pods/dice-roller-6c8646bfd-cfxqc",
+ "uid": "e87e1776-0ca7-41fb-aeea-e1f648387545"
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "enableServiceLinks": true,
+ "nodeName": "minikube",
+ "priority": 0,
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "serviceAccount": "default",
+ "serviceAccountName": "default",
+ "terminationGracePeriodSeconds": 30,
+ "tolerations": [
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ },
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ }
+ ],
+ "volumes": [
+ {
+ "name": "default-token-5gctn",
+ "secret": {
+ "defaultMode": 420,
+ "secretName": "default-token-5gctn"
+ }
+ }
+ ]
+ },
+ "status": {
+ "conditions": [
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:51.000Z",
+ "status": "True",
+ "type": "Initialized"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:55.000Z",
+ "status": "True",
+ "type": "Ready"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:55.000Z",
+ "status": "True",
+ "type": "ContainersReady"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "PodScheduled"
+ }
+ ],
+ "containerStatuses": [
+ {
+ "containerID": "docker://c1641d986aae424429b7c2c1117baeb17d3794f73206bd57292cdf8264f929b2",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {},
+ "name": "nginx",
+ "ready": true,
+ "restartCount": 0,
+ "started": true,
+ "state": {
+ "running": {
+ "startedAt": "2020-09-25T09:58:53.000Z"
+ }
+ }
+ }
+ ],
+ "hostIP": "192.168.64.2",
+ "phase": "Running",
+ "podIP": "172.17.0.13",
+ "podIPs": [
+ {
+ "ip": "172.17.0.13"
+ }
+ ],
+ "qosClass": "BestEffort",
+ "startTime": "2020-09-25T09:58:51.000Z"
+ }
+ },
+ {
+ "metadata": {
+ "creationTimestamp": "2020-09-25T09:58:50.000Z",
+ "generateName": "dice-roller-6c8646bfd-",
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:generateName": {},
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"5126c354-4310-4e23-a9e4-c9b87cb69792\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:enableServiceLinks": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:50.000Z"
+ },
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:status": {
+ "f:conditions": {
+ "k:{\"type\":\"ContainersReady\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Initialized\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Ready\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:containerStatuses": {},
+ "f:hostIP": {},
+ "f:phase": {},
+ "f:podIP": {},
+ "f:podIPs": {
+ ".": {},
+ "k:{\"ip\":\"172.17.0.15\"}": {
+ ".": {},
+ "f:ip": {}
+ }
+ },
+ "f:startTime": {}
+ }
+ },
+ "manager": "kubelet",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:54.000Z"
+ }
+ ],
+ "name": "dice-roller-6c8646bfd-dtv5z",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "ReplicaSet",
+ "name": "dice-roller-6c8646bfd",
+ "uid": "5126c354-4310-4e23-a9e4-c9b87cb69792"
+ }
+ ],
+ "resourceVersion": "593190",
+ "selfLink": "/api/v1/namespaces/default/pods/dice-roller-6c8646bfd-dtv5z",
+ "uid": "1638a41b-e47e-4c17-a1f7-7b447df248b6"
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "enableServiceLinks": true,
+ "nodeName": "minikube",
+ "priority": 0,
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "serviceAccount": "default",
+ "serviceAccountName": "default",
+ "terminationGracePeriodSeconds": 30,
+ "tolerations": [
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ },
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ }
+ ],
+ "volumes": [
+ {
+ "name": "default-token-5gctn",
+ "secret": {
+ "defaultMode": 420,
+ "secretName": "default-token-5gctn"
+ }
+ }
+ ]
+ },
+ "status": {
+ "conditions": [
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:51.000Z",
+ "status": "True",
+ "type": "Initialized"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:53.000Z",
+ "status": "True",
+ "type": "Ready"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:53.000Z",
+ "status": "True",
+ "type": "ContainersReady"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "PodScheduled"
+ }
+ ],
+ "containerStatuses": [
+ {
+ "containerID": "docker://e62c32db58dbfe0a74b2d2cba0e0a97b7f222693c68e930037ac8738c4758ca3",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {},
+ "name": "nginx",
+ "ready": true,
+ "restartCount": 0,
+ "started": true,
+ "state": {
+ "running": {
+ "startedAt": "2020-09-25T09:58:53.000Z"
+ }
+ }
+ }
+ ],
+ "hostIP": "192.168.64.2",
+ "phase": "Running",
+ "podIP": "172.17.0.15",
+ "podIPs": [
+ {
+ "ip": "172.17.0.15"
+ }
+ ],
+ "qosClass": "BestEffort",
+ "startTime": "2020-09-25T09:58:51.000Z"
+ }
+ },
+ {
+ "metadata": {
+ "creationTimestamp": "2020-09-25T09:58:50.000Z",
+ "generateName": "dice-roller-6c8646bfd-",
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:generateName": {},
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"5126c354-4310-4e23-a9e4-c9b87cb69792\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:enableServiceLinks": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:50.000Z"
+ },
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:status": {
+ "f:conditions": {
+ "k:{\"type\":\"ContainersReady\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Initialized\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Ready\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:containerStatuses": {},
+ "f:hostIP": {},
+ "f:phase": {},
+ "f:podIP": {},
+ "f:podIPs": {
+ ".": {},
+ "k:{\"ip\":\"172.17.0.12\"}": {
+ ".": {},
+ "f:ip": {}
+ }
+ },
+ "f:startTime": {}
+ }
+ },
+ "manager": "kubelet",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:53.000Z"
+ }
+ ],
+ "name": "dice-roller-6c8646bfd-hhts2",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "ReplicaSet",
+ "name": "dice-roller-6c8646bfd",
+ "uid": "5126c354-4310-4e23-a9e4-c9b87cb69792"
+ }
+ ],
+ "resourceVersion": "593186",
+ "selfLink": "/api/v1/namespaces/default/pods/dice-roller-6c8646bfd-hhts2",
+ "uid": "ea0b147a-c56a-46e6-9445-7a0b1b0ed3c0"
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "enableServiceLinks": true,
+ "nodeName": "minikube",
+ "priority": 0,
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "serviceAccount": "default",
+ "serviceAccountName": "default",
+ "terminationGracePeriodSeconds": 30,
+ "tolerations": [
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ },
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ }
+ ],
+ "volumes": [
+ {
+ "name": "default-token-5gctn",
+ "secret": {
+ "defaultMode": 420,
+ "secretName": "default-token-5gctn"
+ }
+ }
+ ]
+ },
+ "status": {
+ "conditions": [
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "Initialized"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:53.000Z",
+ "status": "True",
+ "type": "Ready"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:53.000Z",
+ "status": "True",
+ "type": "ContainersReady"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "PodScheduled"
+ }
+ ],
+ "containerStatuses": [
+ {
+ "containerID": "docker://bcdbc153630f90556d57ff0d62f04d847ca63a5f0a7e5d9230683623d33d4b8d",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {},
+ "name": "nginx",
+ "ready": true,
+ "restartCount": 0,
+ "started": true,
+ "state": {
+ "running": {
+ "startedAt": "2020-09-25T09:58:53.000Z"
+ }
+ }
+ }
+ ],
+ "hostIP": "192.168.64.2",
+ "phase": "Running",
+ "podIP": "172.17.0.12",
+ "podIPs": [
+ {
+ "ip": "172.17.0.12"
+ }
+ ],
+ "qosClass": "BestEffort",
+ "startTime": "2020-09-25T09:58:50.000Z"
+ }
+ },
+ {
+ "metadata": {
+ "creationTimestamp": "2020-09-25T09:58:50.000Z",
+ "generateName": "dice-roller-6c8646bfd-",
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:generateName": {},
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"5126c354-4310-4e23-a9e4-c9b87cb69792\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:enableServiceLinks": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:50.000Z"
+ },
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:status": {
+ "f:conditions": {
+ "k:{\"type\":\"ContainersReady\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Initialized\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Ready\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:containerStatuses": {},
+ "f:hostIP": {},
+ "f:phase": {},
+ "f:podIP": {},
+ "f:podIPs": {
+ ".": {},
+ "k:{\"ip\":\"172.17.0.14\"}": {
+ ".": {},
+ "f:ip": {}
+ }
+ },
+ "f:startTime": {}
+ }
+ },
+ "manager": "kubelet",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:55.000Z"
+ }
+ ],
+ "name": "dice-roller-6c8646bfd-j68lm",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "ReplicaSet",
+ "name": "dice-roller-6c8646bfd",
+ "uid": "5126c354-4310-4e23-a9e4-c9b87cb69792"
+ }
+ ],
+ "resourceVersion": "593226",
+ "selfLink": "/api/v1/namespaces/default/pods/dice-roller-6c8646bfd-j68lm",
+ "uid": "b230ff1d-7a13-479b-9c7b-77c26bd79f62"
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "enableServiceLinks": true,
+ "nodeName": "minikube",
+ "priority": 0,
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "serviceAccount": "default",
+ "serviceAccountName": "default",
+ "terminationGracePeriodSeconds": 30,
+ "tolerations": [
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ },
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ }
+ ],
+ "volumes": [
+ {
+ "name": "default-token-5gctn",
+ "secret": {
+ "defaultMode": 420,
+ "secretName": "default-token-5gctn"
+ }
+ }
+ ]
+ },
+ "status": {
+ "conditions": [
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "Initialized"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:55.000Z",
+ "status": "True",
+ "type": "Ready"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:55.000Z",
+ "status": "True",
+ "type": "ContainersReady"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "PodScheduled"
+ }
+ ],
+ "containerStatuses": [
+ {
+ "containerID": "docker://30fa8a3429f86ab8e9a4cec472b79d74266609082703f48950f4aae021e9d6a2",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {},
+ "name": "nginx",
+ "ready": true,
+ "restartCount": 0,
+ "started": true,
+ "state": {
+ "running": {
+ "startedAt": "2020-09-25T09:58:53.000Z"
+ }
+ }
+ }
+ ],
+ "hostIP": "192.168.64.2",
+ "phase": "Running",
+ "podIP": "172.17.0.14",
+ "podIPs": [
+ {
+ "ip": "172.17.0.14"
+ }
+ ],
+ "qosClass": "BestEffort",
+ "startTime": "2020-09-25T09:58:50.000Z"
+ }
+ },
+ {
+ "metadata": {
+ "creationTimestamp": "2020-09-25T09:58:50.000Z",
+ "generateName": "dice-roller-6c8646bfd-",
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:generateName": {},
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"5126c354-4310-4e23-a9e4-c9b87cb69792\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:enableServiceLinks": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:50.000Z"
+ },
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:status": {
+ "f:conditions": {
+ "k:{\"type\":\"ContainersReady\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Initialized\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Ready\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:containerStatuses": {},
+ "f:hostIP": {},
+ "f:phase": {},
+ "f:podIP": {},
+ "f:podIPs": {
+ ".": {},
+ "k:{\"ip\":\"172.17.0.9\"}": {
+ ".": {},
+ "f:ip": {}
+ }
+ },
+ "f:startTime": {}
+ }
+ },
+ "manager": "kubelet",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:53.000Z"
+ }
+ ],
+ "name": "dice-roller-6c8646bfd-m6f9w",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "ReplicaSet",
+ "name": "dice-roller-6c8646bfd",
+ "uid": "5126c354-4310-4e23-a9e4-c9b87cb69792"
+ }
+ ],
+ "resourceVersion": "593181",
+ "selfLink": "/api/v1/namespaces/default/pods/dice-roller-6c8646bfd-m6f9w",
+ "uid": "9b0079f6-ff29-4619-bf6e-71cc10199ac5"
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "enableServiceLinks": true,
+ "nodeName": "minikube",
+ "priority": 0,
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "serviceAccount": "default",
+ "serviceAccountName": "default",
+ "terminationGracePeriodSeconds": 30,
+ "tolerations": [
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ },
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ }
+ ],
+ "volumes": [
+ {
+ "name": "default-token-5gctn",
+ "secret": {
+ "defaultMode": 420,
+ "secretName": "default-token-5gctn"
+ }
+ }
+ ]
+ },
+ "status": {
+ "conditions": [
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "Initialized"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:53.000Z",
+ "status": "True",
+ "type": "Ready"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:53.000Z",
+ "status": "True",
+ "type": "ContainersReady"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "PodScheduled"
+ }
+ ],
+ "containerStatuses": [
+ {
+ "containerID": "docker://f78767ee90eedffe46ff64bfe76d7f69426800dd89f3df012daf0baf3a9c5bdd",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {},
+ "name": "nginx",
+ "ready": true,
+ "restartCount": 0,
+ "started": true,
+ "state": {
+ "running": {
+ "startedAt": "2020-09-25T09:58:53.000Z"
+ }
+ }
+ }
+ ],
+ "hostIP": "192.168.64.2",
+ "phase": "Running",
+ "podIP": "172.17.0.9",
+ "podIPs": [
+ {
+ "ip": "172.17.0.9"
+ }
+ ],
+ "qosClass": "BestEffort",
+ "startTime": "2020-09-25T09:58:50.000Z"
+ }
+ },
+ {
+ "metadata": {
+ "creationTimestamp": "2020-09-24T11:39:27.000Z",
+ "generateName": "dice-roller-6c8646bfd-",
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:generateName": {},
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"5126c354-4310-4e23-a9e4-c9b87cb69792\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:enableServiceLinks": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-24T11:39:27.000Z"
+ },
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:status": {
+ "f:conditions": {
+ "k:{\"type\":\"ContainersReady\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Initialized\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Ready\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:containerStatuses": {},
+ "f:hostIP": {},
+ "f:phase": {},
+ "f:podIP": {},
+ "f:podIPs": {
+ ".": {},
+ "k:{\"ip\":\"172.17.0.4\"}": {
+ ".": {},
+ "f:ip": {}
+ }
+ },
+ "f:startTime": {}
+ }
+ },
+ "manager": "kubelet",
+ "operation": "Update",
+ "time": "2020-09-24T11:39:28.000Z"
+ }
+ ],
+ "name": "dice-roller-6c8646bfd-nv9pk",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "ReplicaSet",
+ "name": "dice-roller-6c8646bfd",
+ "uid": "5126c354-4310-4e23-a9e4-c9b87cb69792"
+ }
+ ],
+ "resourceVersion": "503918",
+ "selfLink": "/api/v1/namespaces/default/pods/dice-roller-6c8646bfd-nv9pk",
+ "uid": "acf7f77f-78c6-4d4b-bc73-637211770ffc"
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "enableServiceLinks": true,
+ "nodeName": "minikube",
+ "priority": 0,
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "serviceAccount": "default",
+ "serviceAccountName": "default",
+ "terminationGracePeriodSeconds": 30,
+ "tolerations": [
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ },
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ }
+ ],
+ "volumes": [
+ {
+ "name": "default-token-5gctn",
+ "secret": {
+ "defaultMode": 420,
+ "secretName": "default-token-5gctn"
+ }
+ }
+ ]
+ },
+ "status": {
+ "conditions": [
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-24T11:39:27.000Z",
+ "status": "True",
+ "type": "Initialized"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-24T11:39:28.000Z",
+ "status": "True",
+ "type": "Ready"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-24T11:39:28.000Z",
+ "status": "True",
+ "type": "ContainersReady"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-24T11:39:27.000Z",
+ "status": "True",
+ "type": "PodScheduled"
+ }
+ ],
+ "containerStatuses": [
+ {
+ "containerID": "docker://63dec9b32942c4b09ae43d09d6978261f674a3ee623823b8f1d20da8044c12ac",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {},
+ "name": "nginx",
+ "ready": true,
+ "restartCount": 0,
+ "started": true,
+ "state": {
+ "running": {
+ "startedAt": "2020-09-24T11:39:28.000Z"
+ }
+ }
+ }
+ ],
+ "hostIP": "192.168.64.2",
+ "phase": "Running",
+ "podIP": "172.17.0.4",
+ "podIPs": [
+ {
+ "ip": "172.17.0.4"
+ }
+ ],
+ "qosClass": "BestEffort",
+ "startTime": "2020-09-24T11:39:27.000Z"
+ }
+ },
+ {
+ "metadata": {
+ "creationTimestamp": "2020-09-25T09:58:50.000Z",
+ "generateName": "dice-roller-6c8646bfd-",
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:generateName": {},
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"5126c354-4310-4e23-a9e4-c9b87cb69792\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:enableServiceLinks": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:50.000Z"
+ },
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:status": {
+ "f:conditions": {
+ "k:{\"type\":\"ContainersReady\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Initialized\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Ready\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:containerStatuses": {},
+ "f:hostIP": {},
+ "f:phase": {},
+ "f:podIP": {},
+ "f:podIPs": {
+ ".": {},
+ "k:{\"ip\":\"172.17.0.10\"}": {
+ ".": {},
+ "f:ip": {}
+ }
+ },
+ "f:startTime": {}
+ }
+ },
+ "manager": "kubelet",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:55.000Z"
+ }
+ ],
+ "name": "dice-roller-6c8646bfd-pjhfj",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "ReplicaSet",
+ "name": "dice-roller-6c8646bfd",
+ "uid": "5126c354-4310-4e23-a9e4-c9b87cb69792"
+ }
+ ],
+ "resourceVersion": "593205",
+ "selfLink": "/api/v1/namespaces/default/pods/dice-roller-6c8646bfd-pjhfj",
+ "uid": "78775c3a-7af2-4ebe-a676-bc2e5dfa2bcc"
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "enableServiceLinks": true,
+ "nodeName": "minikube",
+ "priority": 0,
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "serviceAccount": "default",
+ "serviceAccountName": "default",
+ "terminationGracePeriodSeconds": 30,
+ "tolerations": [
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ },
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ }
+ ],
+ "volumes": [
+ {
+ "name": "default-token-5gctn",
+ "secret": {
+ "defaultMode": 420,
+ "secretName": "default-token-5gctn"
+ }
+ }
+ ]
+ },
+ "status": {
+ "conditions": [
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "Initialized"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:55.000Z",
+ "status": "True",
+ "type": "Ready"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:55.000Z",
+ "status": "True",
+ "type": "ContainersReady"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T09:58:50.000Z",
+ "status": "True",
+ "type": "PodScheduled"
+ }
+ ],
+ "containerStatuses": [
+ {
+ "containerID": "docker://cbb83dda250db74285dcbe0b81bd0896acf402bac9710af090311f7360f824aa",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {},
+ "name": "nginx",
+ "ready": true,
+ "restartCount": 0,
+ "started": true,
+ "state": {
+ "running": {
+ "startedAt": "2020-09-25T09:58:53.000Z"
+ }
+ }
+ }
+ ],
+ "hostIP": "192.168.64.2",
+ "phase": "Running",
+ "podIP": "172.17.0.10",
+ "podIPs": [
+ {
+ "ip": "172.17.0.10"
+ }
+ ],
+ "qosClass": "BestEffort",
+ "startTime": "2020-09-25T09:58:50.000Z"
+ }
+ },
+ {
+ "metadata": {
+ "creationTimestamp": "2020-09-25T10:34:01.000Z",
+ "generateName": "dice-roller-canary-7d64cd756c-",
+ "labels": {
+ "app": "dice-roller-canary",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "7d64cd756c"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:generateName": {},
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"9208395b-a9a7-4e46-b881-6a189f7fbdb0\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ },
+ "k:{\"name\":\"other-side-car\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":82,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ },
+ "k:{\"name\":\"side-car\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":81,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:enableServiceLinks": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T10:34:01.000Z"
+ },
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:status": {
+ "f:conditions": {
+ "k:{\"type\":\"ContainersReady\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:message": {},
+ "f:reason": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Initialized\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Ready\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:message": {},
+ "f:reason": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:containerStatuses": {},
+ "f:hostIP": {},
+ "f:phase": {},
+ "f:podIP": {},
+ "f:podIPs": {
+ ".": {},
+ "k:{\"ip\":\"172.17.0.16\"}": {
+ ".": {},
+ "f:ip": {}
+ }
+ },
+ "f:startTime": {}
+ }
+ },
+ "manager": "kubelet",
+ "operation": "Update",
+ "time": "2020-09-25T14:18:54.000Z"
+ }
+ ],
+ "name": "dice-roller-canary-7d64cd756c-55rfq",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "ReplicaSet",
+ "name": "dice-roller-canary-7d64cd756c",
+ "uid": "9208395b-a9a7-4e46-b881-6a189f7fbdb0"
+ }
+ ],
+ "resourceVersion": "620452",
+ "selfLink": "/api/v1/namespaces/default/pods/dice-roller-canary-7d64cd756c-55rfq",
+ "uid": "65ad28e3-5d51-4b4b-9bf8-4cb069803034"
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ },
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "side-car",
+ "ports": [
+ {
+ "containerPort": 81,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ },
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "other-side-car",
+ "ports": [
+ {
+ "containerPort": 82,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "enableServiceLinks": true,
+ "nodeName": "minikube",
+ "priority": 0,
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "serviceAccount": "default",
+ "serviceAccountName": "default",
+ "terminationGracePeriodSeconds": 30,
+ "tolerations": [
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ },
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ }
+ ],
+ "volumes": [
+ {
+ "name": "default-token-5gctn",
+ "secret": {
+ "defaultMode": 420,
+ "secretName": "default-token-5gctn"
+ }
+ }
+ ]
+ },
+ "status": {
+ "conditions": [
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T10:34:01.000Z",
+ "status": "True",
+ "type": "Initialized"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T14:18:53.000Z",
+ "message": "containers with unready status: [side-car other-side-car]",
+ "reason": "ContainersNotReady",
+ "status": "False",
+ "type": "Ready"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T14:18:53.000Z",
+ "message": "containers with unready status: [side-car other-side-car]",
+ "reason": "ContainersNotReady",
+ "status": "False",
+ "type": "ContainersReady"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T10:34:01.000Z",
+ "status": "True",
+ "type": "PodScheduled"
+ }
+ ],
+ "containerStatuses": [
+ {
+ "containerID": "docker://6ce15178d114a85f3d2e832de45c3355ab5b71ed5f4d4d225ee1c83bf07f69d9",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {},
+ "name": "nginx",
+ "ready": true,
+ "restartCount": 0,
+ "started": true,
+ "state": {
+ "running": {
+ "startedAt": "2020-09-25T10:34:01.000Z"
+ }
+ }
+ },
+ {
+ "containerID": "docker://b3ce93d7f90bfe22558c61d2505b8473580574accdebb5fa4e51c0729c3511f4",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {
+ "terminated": {
+ "containerID": "docker://b3ce93d7f90bfe22558c61d2505b8473580574accdebb5fa4e51c0729c3511f4",
+ "exitCode": 1,
+ "finishedAt": "2020-09-25T14:18:52.000Z",
+ "reason": "Error",
+ "startedAt": "2020-09-25T14:18:50.000Z"
+ }
+ },
+ "name": "other-side-car",
+ "ready": false,
+ "restartCount": 38,
+ "started": false,
+ "state": {
+ "waiting": {
+ "message": "back-off 5m0s restarting failed container=other-side-car pod=dice-roller-canary-7d64cd756c-55rfq_default(65ad28e3-5d51-4b4b-9bf8-4cb069803034)",
+ "reason": "CrashLoopBackOff"
+ }
+ }
+ },
+ {
+ "containerID": "docker://b7f0e65a2b8ab48c5f234616cfe8286aa96b55c3ef09c5cfbc4cdbe67a96f8cb",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {
+ "terminated": {
+ "containerID": "docker://b7f0e65a2b8ab48c5f234616cfe8286aa96b55c3ef09c5cfbc4cdbe67a96f8cb",
+ "exitCode": 1,
+ "finishedAt": "2020-09-25T14:18:52.000Z",
+ "reason": "Error",
+ "startedAt": "2020-09-25T14:18:50.000Z"
+ }
+ },
+ "name": "side-car",
+ "ready": false,
+ "restartCount": 38,
+ "started": false,
+ "state": {
+ "waiting": {
+ "message": "back-off 5m0s restarting failed container=side-car pod=dice-roller-canary-7d64cd756c-55rfq_default(65ad28e3-5d51-4b4b-9bf8-4cb069803034)",
+ "reason": "CrashLoopBackOff"
+ }
+ }
+ }
+ ],
+ "hostIP": "192.168.64.2",
+ "phase": "Running",
+ "podIP": "172.17.0.16",
+ "podIPs": [
+ {
+ "ip": "172.17.0.16"
+ }
+ ],
+ "qosClass": "BestEffort",
+ "startTime": "2020-09-25T10:34:01.000Z"
+ }
+ },
+ {
+ "metadata": {
+ "creationTimestamp": "2020-09-25T10:34:02.000Z",
+ "generateName": "dice-roller-canary-7d64cd756c-",
+ "labels": {
+ "app": "dice-roller-canary",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "7d64cd756c"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:generateName": {},
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"9208395b-a9a7-4e46-b881-6a189f7fbdb0\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ },
+ "k:{\"name\":\"other-side-car\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":82,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ },
+ "k:{\"name\":\"side-car\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":81,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:enableServiceLinks": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T10:34:02.000Z"
+ },
+ {
+ "apiVersion": "v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:status": {
+ "f:conditions": {
+ "k:{\"type\":\"ContainersReady\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:message": {},
+ "f:reason": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Initialized\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Ready\"}": {
+ ".": {},
+ "f:lastProbeTime": {},
+ "f:lastTransitionTime": {},
+ "f:message": {},
+ "f:reason": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:containerStatuses": {},
+ "f:hostIP": {},
+ "f:phase": {},
+ "f:podIP": {},
+ "f:podIPs": {
+ ".": {},
+ "k:{\"ip\":\"172.17.0.5\"}": {
+ ".": {},
+ "f:ip": {}
+ }
+ },
+ "f:startTime": {}
+ }
+ },
+ "manager": "kubelet",
+ "operation": "Update",
+ "time": "2020-09-25T14:19:05.000Z"
+ }
+ ],
+ "name": "dice-roller-canary-7d64cd756c-vtbdx",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "ReplicaSet",
+ "name": "dice-roller-canary-7d64cd756c",
+ "uid": "9208395b-a9a7-4e46-b881-6a189f7fbdb0"
+ }
+ ],
+ "resourceVersion": "620481",
+ "selfLink": "/api/v1/namespaces/default/pods/dice-roller-canary-7d64cd756c-vtbdx",
+ "uid": "0b8d9d79-b43d-4339-be57-ad5c63add77e"
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ },
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "side-car",
+ "ports": [
+ {
+ "containerPort": 81,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ },
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "other-side-car",
+ "ports": [
+ {
+ "containerPort": 82,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File",
+ "volumeMounts": [
+ {
+ "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+ "name": "default-token-5gctn",
+ "readOnly": true
+ }
+ ]
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "enableServiceLinks": true,
+ "nodeName": "minikube",
+ "priority": 0,
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "serviceAccount": "default",
+ "serviceAccountName": "default",
+ "terminationGracePeriodSeconds": 30,
+ "tolerations": [
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/not-ready",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ },
+ {
+ "effect": "NoExecute",
+ "key": "node.kubernetes.io/unreachable",
+ "operator": "Exists",
+ "tolerationSeconds": 300
+ }
+ ],
+ "volumes": [
+ {
+ "name": "default-token-5gctn",
+ "secret": {
+ "defaultMode": 420,
+ "secretName": "default-token-5gctn"
+ }
+ }
+ ]
+ },
+ "status": {
+ "conditions": [
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T10:34:02.000Z",
+ "status": "True",
+ "type": "Initialized"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T14:19:04.000Z",
+ "message": "containers with unready status: [side-car other-side-car]",
+ "reason": "ContainersNotReady",
+ "status": "False",
+ "type": "Ready"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T14:19:04.000Z",
+ "message": "containers with unready status: [side-car other-side-car]",
+ "reason": "ContainersNotReady",
+ "status": "False",
+ "type": "ContainersReady"
+ },
+ {
+ "lastProbeTime": null,
+ "lastTransitionTime": "2020-09-25T10:34:02.000Z",
+ "status": "True",
+ "type": "PodScheduled"
+ }
+ ],
+ "containerStatuses": [
+ {
+ "containerID": "docker://3f9cadc6f135247eb2df9aaca8f25ea05dcf42be86d58fb833c8acf192da0d66",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {},
+ "name": "nginx",
+ "ready": true,
+ "restartCount": 0,
+ "started": true,
+ "state": {
+ "running": {
+ "startedAt": "2020-09-25T10:34:03.000Z"
+ }
+ }
+ },
+ {
+ "containerID": "docker://5e3a9f9129e5ce74fea249c013afcc056ee95a940fed24495ef9b58df67771f3",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {
+ "terminated": {
+ "containerID": "docker://5e3a9f9129e5ce74fea249c013afcc056ee95a940fed24495ef9b58df67771f3",
+ "exitCode": 1,
+ "finishedAt": "2020-09-25T14:19:03.000Z",
+ "reason": "Error",
+ "startedAt": "2020-09-25T14:19:01.000Z"
+ }
+ },
+ "name": "other-side-car",
+ "ready": false,
+ "restartCount": 38,
+ "started": false,
+ "state": {
+ "waiting": {
+ "message": "back-off 5m0s restarting failed container=other-side-car pod=dice-roller-canary-7d64cd756c-vtbdx_default(0b8d9d79-b43d-4339-be57-ad5c63add77e)",
+ "reason": "CrashLoopBackOff"
+ }
+ }
+ },
+ {
+ "containerID": "docker://21b42cae298c0ed7f90373974d8c88b0941d17733f35398144a17ece32e03210",
+ "image": "nginx:1.14.2",
+ "imageID": "docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d",
+ "lastState": {
+ "terminated": {
+ "containerID": "docker://21b42cae298c0ed7f90373974d8c88b0941d17733f35398144a17ece32e03210",
+ "exitCode": 1,
+ "finishedAt": "2020-09-25T14:19:03.000Z",
+ "reason": "Error",
+ "startedAt": "2020-09-25T14:19:01.000Z"
+ }
+ },
+ "name": "side-car",
+ "ready": false,
+ "restartCount": 38,
+ "started": false,
+ "state": {
+ "waiting": {
+ "message": "back-off 5m0s restarting failed container=side-car pod=dice-roller-canary-7d64cd756c-vtbdx_default(0b8d9d79-b43d-4339-be57-ad5c63add77e)",
+ "reason": "CrashLoopBackOff"
+ }
+ }
+ }
+ ],
+ "hostIP": "192.168.64.2",
+ "phase": "Running",
+ "podIP": "172.17.0.5",
+ "podIPs": [
+ {
+ "ip": "172.17.0.5"
+ }
+ ],
+ "qosClass": "BestEffort",
+ "startTime": "2020-09-25T10:34:02.000Z"
+ }
+ }
+ ],
+ "replicaSets": [
+ {
+ "metadata": {
+ "annotations": {
+ "deployment.kubernetes.io/desired-replicas": "10",
+ "deployment.kubernetes.io/max-replicas": "13",
+ "deployment.kubernetes.io/revision": "2"
+ },
+ "creationTimestamp": "2020-09-24T11:39:26.000Z",
+ "generation": 3,
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "apps/v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:annotations": {
+ ".": {},
+ "f:deployment.kubernetes.io/desired-replicas": {},
+ "f:deployment.kubernetes.io/max-replicas": {},
+ "f:deployment.kubernetes.io/revision": {}
+ },
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"7551e949-42d1-4061-83c5-9da107186e47\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:replicas": {},
+ "f:selector": {
+ "f:matchLabels": {
+ ".": {},
+ "f:app": {},
+ "f:pod-template-hash": {}
+ }
+ },
+ "f:template": {
+ "f:metadata": {
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ }
+ },
+ "f:status": {
+ "f:availableReplicas": {},
+ "f:fullyLabeledReplicas": {},
+ "f:observedGeneration": {},
+ "f:readyReplicas": {},
+ "f:replicas": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:55.000Z"
+ }
+ ],
+ "name": "dice-roller-6c8646bfd",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "Deployment",
+ "name": "dice-roller",
+ "uid": "7551e949-42d1-4061-83c5-9da107186e47"
+ }
+ ],
+ "resourceVersion": "593228",
+ "selfLink": "/apis/apps/v1/namespaces/default/replicasets/dice-roller-6c8646bfd",
+ "uid": "5126c354-4310-4e23-a9e4-c9b87cb69792"
+ },
+ "spec": {
+ "replicas": 10,
+ "selector": {
+ "matchLabels": {
+ "app": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ }
+ },
+ "template": {
+ "metadata": {
+ "creationTimestamp": null,
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "6c8646bfd"
+ }
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File"
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "terminationGracePeriodSeconds": 30
+ }
+ }
+ },
+ "status": {
+ "availableReplicas": 10,
+ "fullyLabeledReplicas": 10,
+ "observedGeneration": 3,
+ "readyReplicas": 10,
+ "replicas": 10
+ }
+ },
+ {
+ "metadata": {
+ "annotations": {
+ "deployment.kubernetes.io/desired-replicas": "2",
+ "deployment.kubernetes.io/max-replicas": "3",
+ "deployment.kubernetes.io/revision": "3"
+ },
+ "creationTimestamp": "2020-09-25T10:34:01.000Z",
+ "generation": 2,
+ "labels": {
+ "app": "dice-roller-canary",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "7d64cd756c"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "apps/v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:annotations": {
+ ".": {},
+ "f:deployment.kubernetes.io/desired-replicas": {},
+ "f:deployment.kubernetes.io/max-replicas": {},
+ "f:deployment.kubernetes.io/revision": {}
+ },
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"0b6ae80f-999b-40e9-b116-ea925f0ed07b\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:replicas": {},
+ "f:selector": {
+ "f:matchLabels": {
+ ".": {},
+ "f:app": {},
+ "f:pod-template-hash": {}
+ }
+ },
+ "f:template": {
+ "f:metadata": {
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ },
+ "k:{\"name\":\"other-side-car\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":82,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ },
+ "k:{\"name\":\"side-car\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":81,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ }
+ },
+ "f:status": {
+ "f:fullyLabeledReplicas": {},
+ "f:observedGeneration": {},
+ "f:replicas": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T14:19:01.000Z"
+ }
+ ],
+ "name": "dice-roller-canary-7d64cd756c",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "Deployment",
+ "name": "dice-roller-canary",
+ "uid": "0b6ae80f-999b-40e9-b116-ea925f0ed07b"
+ }
+ ],
+ "resourceVersion": "620479",
+ "selfLink": "/apis/apps/v1/namespaces/default/replicasets/dice-roller-canary-7d64cd756c",
+ "uid": "9208395b-a9a7-4e46-b881-6a189f7fbdb0"
+ },
+ "spec": {
+ "replicas": 2,
+ "selector": {
+ "matchLabels": {
+ "app": "dice-roller-canary",
+ "pod-template-hash": "7d64cd756c"
+ }
+ },
+ "template": {
+ "metadata": {
+ "creationTimestamp": null,
+ "labels": {
+ "app": "dice-roller-canary",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "7d64cd756c"
+ }
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File"
+ },
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "side-car",
+ "ports": [
+ {
+ "containerPort": 81,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File"
+ },
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "other-side-car",
+ "ports": [
+ {
+ "containerPort": 82,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File"
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "terminationGracePeriodSeconds": 30
+ }
+ }
+ },
+ "status": {
+ "fullyLabeledReplicas": 2,
+ "observedGeneration": 2,
+ "replicas": 2
+ }
+ },
+ {
+ "metadata": {
+ "annotations": {
+ "deployment.kubernetes.io/desired-replicas": "2",
+ "deployment.kubernetes.io/max-replicas": "3",
+ "deployment.kubernetes.io/revision": "2"
+ },
+ "creationTimestamp": "2020-09-25T09:25:16.000Z",
+ "generation": 4,
+ "labels": {
+ "app": "dice-roller-canary",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "bcb8d54dd"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "apps/v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:annotations": {
+ ".": {},
+ "f:deployment.kubernetes.io/desired-replicas": {},
+ "f:deployment.kubernetes.io/max-replicas": {},
+ "f:deployment.kubernetes.io/revision": {}
+ },
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"0b6ae80f-999b-40e9-b116-ea925f0ed07b\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:replicas": {},
+ "f:selector": {
+ "f:matchLabels": {
+ ".": {},
+ "f:app": {},
+ "f:pod-template-hash": {}
+ }
+ },
+ "f:template": {
+ "f:metadata": {
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ },
+ "k:{\"name\":\"side-car\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":81,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ }
+ },
+ "f:status": {
+ "f:observedGeneration": {},
+ "f:replicas": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T10:34:04.000Z"
+ }
+ ],
+ "name": "dice-roller-canary-bcb8d54dd",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "Deployment",
+ "name": "dice-roller-canary",
+ "uid": "0b6ae80f-999b-40e9-b116-ea925f0ed07b"
+ }
+ ],
+ "resourceVersion": "598025",
+ "selfLink": "/apis/apps/v1/namespaces/default/replicasets/dice-roller-canary-bcb8d54dd",
+ "uid": "51942585-d599-42aa-bf23-9cf1acad4006"
+ },
+ "spec": {
+ "replicas": 0,
+ "selector": {
+ "matchLabels": {
+ "app": "dice-roller-canary",
+ "pod-template-hash": "bcb8d54dd"
+ }
+ },
+ "template": {
+ "metadata": {
+ "creationTimestamp": null,
+ "labels": {
+ "app": "dice-roller-canary",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "bcb8d54dd"
+ }
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File"
+ },
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "side-car",
+ "ports": [
+ {
+ "containerPort": 81,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File"
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "terminationGracePeriodSeconds": 30
+ }
+ }
+ },
+ "status": {
+ "observedGeneration": 4,
+ "replicas": 0
+ }
+ },
+ {
+ "metadata": {
+ "annotations": {
+ "deployment.kubernetes.io/desired-replicas": "2",
+ "deployment.kubernetes.io/max-replicas": "3",
+ "deployment.kubernetes.io/revision": "1"
+ },
+ "creationTimestamp": "2020-09-25T09:02:53.000Z",
+ "generation": 3,
+ "labels": {
+ "app": "dice-roller-canary",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "c866fbf67"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "apps/v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:annotations": {
+ ".": {},
+ "f:deployment.kubernetes.io/desired-replicas": {},
+ "f:deployment.kubernetes.io/max-replicas": {},
+ "f:deployment.kubernetes.io/revision": {}
+ },
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ },
+ "f:ownerReferences": {
+ ".": {},
+ "k:{\"uid\":\"0b6ae80f-999b-40e9-b116-ea925f0ed07b\"}": {
+ ".": {},
+ "f:apiVersion": {},
+ "f:blockOwnerDeletion": {},
+ "f:controller": {},
+ "f:kind": {},
+ "f:name": {},
+ "f:uid": {}
+ }
+ }
+ },
+ "f:spec": {
+ "f:replicas": {},
+ "f:selector": {
+ "f:matchLabels": {
+ ".": {},
+ "f:app": {},
+ "f:pod-template-hash": {}
+ }
+ },
+ "f:template": {
+ "f:metadata": {
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {},
+ "f:pod-template-hash": {}
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ }
+ },
+ "f:status": {
+ "f:observedGeneration": {},
+ "f:replicas": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T09:25:20.000Z"
+ }
+ ],
+ "name": "dice-roller-canary-c866fbf67",
+ "namespace": "default",
+ "ownerReferences": [
+ {
+ "apiVersion": "apps/v1",
+ "blockOwnerDeletion": true,
+ "controller": true,
+ "kind": "Deployment",
+ "name": "dice-roller-canary",
+ "uid": "0b6ae80f-999b-40e9-b116-ea925f0ed07b"
+ }
+ ],
+ "resourceVersion": "588501",
+ "selfLink": "/apis/apps/v1/namespaces/default/replicasets/dice-roller-canary-c866fbf67",
+ "uid": "4d2dfe13-978f-4504-9036-ca585acdea6c"
+ },
+ "spec": {
+ "replicas": 0,
+ "selector": {
+ "matchLabels": {
+ "app": "dice-roller-canary",
+ "pod-template-hash": "c866fbf67"
+ }
+ },
+ "template": {
+ "metadata": {
+ "creationTimestamp": null,
+ "labels": {
+ "app": "dice-roller-canary",
+ "backstage.io/kubernetes-id": "dice-roller",
+ "pod-template-hash": "c866fbf67"
+ }
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File"
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "terminationGracePeriodSeconds": 30
+ }
+ }
+ },
+ "status": {
+ "observedGeneration": 3,
+ "replicas": 0
+ }
+ }
+ ],
+ "statefulsets": [
+ {
+ "metadata": {
+ "annotations": {
+ "deployment.kubernetes.io/revision": "2",
+ "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"apps/v1\",\"kind\":\"StatefulSet\",\"metadata\":{\"annotations\":{},\"labels\":{\"backstage.io/kubernetes-id\":\"dice-roller\"},\"name\":\"dice-roller\",\"namespace\":\"default\"},\"spec\":{\"replicas\":10,\"selector\":{\"matchLabels\":{\"app\":\"dice-roller\"}},\"template\":{\"metadata\":{\"labels\":{\"app\":\"dice-roller\",\"backstage.io/kubernetes-id\":\"dice-roller\"}},\"spec\":{\"containers\":[{\"image\":\"nginx:1.14.2\",\"name\":\"nginx\",\"ports\":[{\"containerPort\":80}]}]}}}}\n"
+ },
+ "creationTimestamp": "2020-09-23T12:00:55.000Z",
+ "generation": 3,
+ "labels": {
+ "backstage.io/kubernetes-id": "dice-roller"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "apps/v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:annotations": {
+ ".": {},
+ "f:kubectl.kubernetes.io/last-applied-configuration": {}
+ },
+ "f:labels": {
+ ".": {},
+ "f:backstage.io/kubernetes-id": {}
+ }
+ },
+ "f:spec": {
+ "f:progressDeadlineSeconds": {},
+ "f:replicas": {},
+ "f:revisionHistoryLimit": {},
+ "f:selector": {
+ "f:matchLabels": {
+ ".": {},
+ "f:app": {}
+ }
+ },
+ "f:strategy": {
+ "f:rollingUpdate": {
+ ".": {},
+ "f:maxSurge": {},
+ "f:maxUnavailable": {}
+ },
+ "f:type": {}
+ },
+ "f:template": {
+ "f:metadata": {
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {}
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ }
+ }
+ },
+ "manager": "kubectl",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:50.000Z"
+ },
+ {
+ "apiVersion": "apps/v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:annotations": {
+ "f:deployment.kubernetes.io/revision": {}
+ }
+ },
+ "f:status": {
+ "f:availableReplicas": {},
+ "f:conditions": {
+ ".": {},
+ "k:{\"type\":\"Available\"}": {
+ ".": {},
+ "f:lastTransitionTime": {},
+ "f:lastUpdateTime": {},
+ "f:message": {},
+ "f:reason": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Progressing\"}": {
+ ".": {},
+ "f:lastTransitionTime": {},
+ "f:lastUpdateTime": {},
+ "f:message": {},
+ "f:reason": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:observedGeneration": {},
+ "f:readyReplicas": {},
+ "f:replicas": {},
+ "f:updatedReplicas": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T09:58:55.000Z"
+ }
+ ],
+ "name": "dice-roller",
+ "namespace": "default",
+ "resourceVersion": "593230",
+ "selfLink": "/apis/apps/v1/namespaces/default/statefulsets/dice-roller",
+ "uid": "5126c354-4310-4e23-a9e4-c9b87cb69792"
+ },
+ "spec": {
+ "replicas": 10,
+ "revisionHistoryLimit": 10,
+ "selector": {
+ "matchLabels": {
+ "app": "dice-roller"
+ }
+ },
+ "updateStrategy": {
+ "rollingUpdate": {
+ "maxSurge": "25%",
+ "maxUnavailable": "25%"
+ },
+ "type": "RollingUpdate"
+ },
+ "podManagementPolicy": "Parallel",
+ "serviceName": "dice-roller",
+ "template": {
+ "metadata": {
+ "creationTimestamp": null,
+ "labels": {
+ "app": "dice-roller",
+ "backstage.io/kubernetes-id": "dice-roller"
+ }
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File"
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "terminationGracePeriodSeconds": 30
+ }
+ }
+ },
+ "status": {
+ "availableReplicas": 10,
+ "conditions": [
+ {
+ "lastTransitionTime": "2020-09-23T12:00:55.000Z",
+ "lastUpdateTime": "2020-09-24T11:39:28.000Z",
+ "message": "ReplicaSet \"dice-roller-6c8646bfd\" has successfully progressed.",
+ "reason": "NewReplicaSetAvailable",
+ "status": "True",
+ "type": "Progressing"
+ },
+ {
+ "lastTransitionTime": "2020-09-25T09:58:55.000Z",
+ "lastUpdateTime": "2020-09-25T09:58:55.000Z",
+ "message": "Deployment has minimum availability.",
+ "reason": "MinimumReplicasAvailable",
+ "status": "True",
+ "type": "Available"
+ }
+ ],
+ "observedGeneration": 3,
+ "readyReplicas": 10,
+ "replicas": 10,
+ "updatedReplicas": 10
+ }
+ },
+ {
+ "metadata": {
+ "annotations": {
+ "deployment.kubernetes.io/revision": "3",
+ "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"apps/v1\",\"kind\":\"StatefulSet\",\"metadata\":{\"annotations\":{},\"labels\":{\"backstage.io/kubernetes-id\":\"dice-roller\"},\"name\":\"dice-roller-canary\",\"namespace\":\"default\"},\"spec\":{\"replicas\":2,\"selector\":{\"matchLabels\":{\"app\":\"dice-roller-canary\"}},\"template\":{\"metadata\":{\"labels\":{\"app\":\"dice-roller-canary\",\"backstage.io/kubernetes-id\":\"dice-roller\"}},\"spec\":{\"containers\":[{\"image\":\"nginx:1.14.2\",\"name\":\"nginx\",\"ports\":[{\"containerPort\":80}]},{\"image\":\"nginx:1.14.2\",\"name\":\"side-car\",\"ports\":[{\"containerPort\":81}]},{\"image\":\"nginx:1.14.2\",\"name\":\"other-side-car\",\"ports\":[{\"containerPort\":82}]}]}}}}\n"
+ },
+ "creationTimestamp": "2020-09-25T09:02:53.000Z",
+ "generation": 3,
+ "labels": {
+ "backstage.io/kubernetes-id": "dice-roller"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "apps/v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:annotations": {
+ ".": {},
+ "f:kubectl.kubernetes.io/last-applied-configuration": {}
+ },
+ "f:labels": {
+ ".": {},
+ "f:backstage.io/kubernetes-id": {}
+ }
+ },
+ "f:spec": {
+ "f:progressDeadlineSeconds": {},
+ "f:replicas": {},
+ "f:revisionHistoryLimit": {},
+ "f:selector": {
+ "f:matchLabels": {
+ ".": {},
+ "f:app": {}
+ }
+ },
+ "f:strategy": {
+ "f:rollingUpdate": {
+ ".": {},
+ "f:maxSurge": {},
+ "f:maxUnavailable": {}
+ },
+ "f:type": {}
+ },
+ "f:template": {
+ "f:metadata": {
+ "f:labels": {
+ ".": {},
+ "f:app": {},
+ "f:backstage.io/kubernetes-id": {}
+ }
+ },
+ "f:spec": {
+ "f:containers": {
+ "k:{\"name\":\"nginx\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ },
+ "k:{\"name\":\"other-side-car\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":82,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ },
+ "k:{\"name\":\"side-car\"}": {
+ ".": {},
+ "f:image": {},
+ "f:imagePullPolicy": {},
+ "f:name": {},
+ "f:ports": {
+ ".": {},
+ "k:{\"containerPort\":81,\"protocol\":\"TCP\"}": {
+ ".": {},
+ "f:containerPort": {},
+ "f:protocol": {}
+ }
+ },
+ "f:resources": {},
+ "f:terminationMessagePath": {},
+ "f:terminationMessagePolicy": {}
+ }
+ },
+ "f:dnsPolicy": {},
+ "f:restartPolicy": {},
+ "f:schedulerName": {},
+ "f:securityContext": {},
+ "f:terminationGracePeriodSeconds": {}
+ }
+ }
+ }
+ },
+ "manager": "kubectl",
+ "operation": "Update",
+ "time": "2020-09-25T10:34:01.000Z"
+ },
+ {
+ "apiVersion": "apps/v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:annotations": {
+ "f:deployment.kubernetes.io/revision": {}
+ }
+ },
+ "f:status": {
+ "f:conditions": {
+ ".": {},
+ "k:{\"type\":\"Available\"}": {
+ ".": {},
+ "f:lastTransitionTime": {},
+ "f:lastUpdateTime": {},
+ "f:message": {},
+ "f:reason": {},
+ "f:status": {},
+ "f:type": {}
+ },
+ "k:{\"type\":\"Progressing\"}": {
+ ".": {},
+ "f:lastTransitionTime": {},
+ "f:lastUpdateTime": {},
+ "f:message": {},
+ "f:reason": {},
+ "f:status": {},
+ "f:type": {}
+ }
+ },
+ "f:observedGeneration": {},
+ "f:replicas": {},
+ "f:unavailableReplicas": {},
+ "f:updatedReplicas": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2020-09-25T14:19:04.000Z"
+ }
+ ],
+ "name": "dice-roller-canary",
+ "namespace": "default",
+ "resourceVersion": "620480",
+ "selfLink": "/apis/apps/v1/namespaces/default/statefulsets/dice-roller-canary",
+ "uid": "9208395b-a9a7-4e46-b881-6a189f7fbdb0"
+ },
+ "spec": {
+ "replicas": 2,
+ "revisionHistoryLimit": 10,
+ "selector": {
+ "matchLabels": {
+ "app": "dice-roller-canary"
+ }
+ },
+ "updateStrategy": {
+ "rollingUpdate": {
+ "maxSurge": "25%",
+ "maxUnavailable": "25%"
+ },
+ "type": "RollingUpdate"
+ },
+ "podManagementPolicy": "Parallel",
+ "serviceName": "dice-roller",
+ "template": {
+ "metadata": {
+ "creationTimestamp": null,
+ "labels": {
+ "app": "dice-roller-canary",
+ "backstage.io/kubernetes-id": "dice-roller"
+ }
+ },
+ "spec": {
+ "containers": [
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "nginx",
+ "ports": [
+ {
+ "containerPort": 80,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File"
+ },
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "side-car",
+ "ports": [
+ {
+ "containerPort": 81,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File"
+ },
+ {
+ "image": "nginx:1.14.2",
+ "imagePullPolicy": "IfNotPresent",
+ "name": "other-side-car",
+ "ports": [
+ {
+ "containerPort": 82,
+ "protocol": "TCP"
+ }
+ ],
+ "resources": {},
+ "terminationMessagePath": "/dev/termination-log",
+ "terminationMessagePolicy": "File"
+ }
+ ],
+ "dnsPolicy": "ClusterFirst",
+ "restartPolicy": "Always",
+ "schedulerName": "default-scheduler",
+ "securityContext": {},
+ "terminationGracePeriodSeconds": 30
+ }
+ }
+ },
+ "status": {
+ "conditions": [
+ {
+ "lastTransitionTime": "2020-09-25T09:02:53.000Z",
+ "lastUpdateTime": "2020-09-25T10:34:04.000Z",
+ "message": "ReplicaSet \"dice-roller-canary-7d64cd756c\" has successfully progressed.",
+ "reason": "NewReplicaSetAvailable",
+ "status": "True",
+ "type": "Progressing"
+ },
+ {
+ "lastTransitionTime": "2020-09-25T13:48:06.000Z",
+ "lastUpdateTime": "2020-09-25T13:48:06.000Z",
+ "message": "Deployment does not have minimum availability.",
+ "reason": "MinimumReplicasUnavailable",
+ "status": "False",
+ "type": "Available"
+ }
+ ],
+ "observedGeneration": 3,
+ "replicas": 2,
+ "unavailableReplicas": 2,
+ "updatedReplicas": 2
+ }
+ }
+ ],
+ "horizontalPodAutoscalers": [
+ {
+ "apiVersion": "autoscaling/v1",
+ "kind": "HorizontalPodAutoscaler",
+ "metadata": {
+ "annotations": {
+ "autoscaling.alpha.kubernetes.io/conditions": "[{\"type\":\"AbleToScale\",\"status\":\"True\",\"lastTransitionTime\":\"2021-01-05T10:26:04Z\",\"reason\":\"SucceededGetScale\",\"message\":\"the HPA controller was able to get the target's current scale\"},{\"type\":\"ScalingActive\",\"status\":\"False\",\"lastTransitionTime\":\"2021-01-05T10:26:04Z\",\"reason\":\"FailedGetResourceMetric\",\"message\":\"the HPA was unable to compute the replica count: unable to get metrics for resource cpu: no metrics returned from resource metrics API\"}]",
+ "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"autoscaling/v1\",\"kind\":\"HorizontalPodAutoscaler\",\"metadata\":{\"annotations\":{},\"labels\":{\"backstage.io/kubernetes-id\":\"dice-roller\"},\"name\":\"dice-roller\",\"namespace\":\"default\"},\"spec\":{\"maxReplicas\":15,\"minReplicas\":10,\"scaleTargetRef\":{\"apiVersion\":\"apps/v1\",\"kind\":\"Deployment\",\"name\":\"dice-roller\"},\"targetCPUUtilizationPercentage\":50}}\n"
+ },
+ "creationTimestamp": "2021-01-05T10:25:48Z",
+ "labels": {
+ "backstage.io/kubernetes-id": "dice-roller"
+ },
+ "managedFields": [
+ {
+ "apiVersion": "autoscaling/v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:annotations": {
+ ".": {},
+ "f:kubectl.kubernetes.io/last-applied-configuration": {}
+ },
+ "f:labels": {
+ ".": {},
+ "f:backstage.io/kubernetes-id": {}
+ }
+ },
+ "f:spec": {
+ "f:maxReplicas": {},
+ "f:minReplicas": {},
+ "f:scaleTargetRef": {
+ "f:apiVersion": {},
+ "f:kind": {},
+ "f:name": {}
+ },
+ "f:targetCPUUtilizationPercentage": {}
+ }
+ },
+ "manager": "kubectl-client-side-apply",
+ "operation": "Update",
+ "time": "2021-01-05T10:25:48Z"
+ },
+ {
+ "apiVersion": "autoscaling/v1",
+ "fieldsType": "FieldsV1",
+ "fieldsV1": {
+ "f:metadata": {
+ "f:annotations": {
+ "f:autoscaling.alpha.kubernetes.io/conditions": {}
+ }
+ },
+ "f:status": {
+ "f:currentReplicas": {}
+ }
+ },
+ "manager": "kube-controller-manager",
+ "operation": "Update",
+ "time": "2021-01-05T10:26:04Z"
+ }
+ ],
+ "name": "dice-roller",
+ "namespace": "default",
+ "resourceVersion": "598",
+ "selfLink": "/apis/autoscaling/v1/namespaces/default/horizontalpodautoscalers/dice-roller",
+ "uid": "dd7c5329-567c-43c2-b159-756808d90a8e"
+ },
+ "spec": {
+ "maxReplicas": 15,
+ "minReplicas": 10,
+ "scaleTargetRef": {
+ "apiVersion": "apps/v1",
+ "kind": "Deployment",
+ "name": "dice-roller"
+ },
+ "targetCPUUtilizationPercentage": 50
+ },
+ "status": {
+ "currentReplicas": 10,
+ "desiredReplicas": 0,
+ "currentCPUUtilizationPercentage": 30
+ }
+ }
+ ]
+}
diff --git a/plugins/kubernetes/src/api/KubernetesBackendClient.test.ts b/plugins/kubernetes-react/src/api/KubernetesBackendClient.test.ts
similarity index 100%
rename from plugins/kubernetes/src/api/KubernetesBackendClient.test.ts
rename to plugins/kubernetes-react/src/api/KubernetesBackendClient.test.ts
diff --git a/plugins/kubernetes/src/api/KubernetesBackendClient.ts b/plugins/kubernetes-react/src/api/KubernetesBackendClient.ts
similarity index 99%
rename from plugins/kubernetes/src/api/KubernetesBackendClient.ts
rename to plugins/kubernetes-react/src/api/KubernetesBackendClient.ts
index 681daa0ac0..b483c267d8 100644
--- a/plugins/kubernetes/src/api/KubernetesBackendClient.ts
+++ b/plugins/kubernetes-react/src/api/KubernetesBackendClient.ts
@@ -26,6 +26,7 @@ import { stringifyEntityRef } from '@backstage/catalog-model';
import { KubernetesAuthProvidersApi } from '../kubernetes-auth-provider';
import { NotFoundError } from '@backstage/errors';
+/** @public */
export class KubernetesBackendClient implements KubernetesApi {
private readonly discoveryApi: DiscoveryApi;
private readonly identityApi: IdentityApi;
diff --git a/plugins/kubernetes/src/api/KubernetesProxyClient.test.ts b/plugins/kubernetes-react/src/api/KubernetesProxyClient.test.ts
similarity index 100%
rename from plugins/kubernetes/src/api/KubernetesProxyClient.test.ts
rename to plugins/kubernetes-react/src/api/KubernetesProxyClient.test.ts
diff --git a/plugins/kubernetes/src/api/KubernetesProxyClient.ts b/plugins/kubernetes-react/src/api/KubernetesProxyClient.ts
similarity index 100%
rename from plugins/kubernetes/src/api/KubernetesProxyClient.ts
rename to plugins/kubernetes-react/src/api/KubernetesProxyClient.ts
diff --git a/plugins/kubernetes/src/api/index.ts b/plugins/kubernetes-react/src/api/index.ts
similarity index 100%
rename from plugins/kubernetes/src/api/index.ts
rename to plugins/kubernetes-react/src/api/index.ts
diff --git a/plugins/kubernetes/src/api/types.ts b/plugins/kubernetes-react/src/api/types.ts
similarity index 97%
rename from plugins/kubernetes/src/api/types.ts
rename to plugins/kubernetes-react/src/api/types.ts
index 6065e47169..c0f97ffd41 100644
--- a/plugins/kubernetes/src/api/types.ts
+++ b/plugins/kubernetes-react/src/api/types.ts
@@ -23,14 +23,17 @@ import {
import { createApiRef } from '@backstage/core-plugin-api';
import { Event } from 'kubernetes-models/v1';
+/** @public */
export const kubernetesApiRef = createApiRef({
id: 'plugin.kubernetes.service',
});
+/** @public */
export const kubernetesProxyApiRef = createApiRef({
id: 'plugin.kubernetes.proxy-service',
});
+/** @public */
export interface KubernetesApi {
getObjectsByEntity(
requestBody: KubernetesRequestBody,
@@ -55,6 +58,7 @@ export interface KubernetesApi {
}): Promise;
}
+/** @public */
export interface KubernetesProxyApi {
getPodLogs(request: {
podName: string;
diff --git a/plugins/kubernetes/src/components/Cluster/Cluster.test.tsx b/plugins/kubernetes-react/src/components/Cluster/Cluster.test.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/Cluster/Cluster.test.tsx
rename to plugins/kubernetes-react/src/components/Cluster/Cluster.test.tsx
diff --git a/plugins/kubernetes/src/components/Cluster/Cluster.tsx b/plugins/kubernetes-react/src/components/Cluster/Cluster.tsx
similarity index 96%
rename from plugins/kubernetes/src/components/Cluster/Cluster.tsx
rename to plugins/kubernetes-react/src/components/Cluster/Cluster.tsx
index bea7a46d37..42f1aca3a0 100644
--- a/plugins/kubernetes/src/components/Cluster/Cluster.tsx
+++ b/plugins/kubernetes-react/src/components/Cluster/Cluster.tsx
@@ -25,11 +25,11 @@ import {
import {
ClientPodStatus,
ClusterObjects,
+ groupResponses,
} from '@backstage/plugin-kubernetes-common';
import ExpandMoreIcon from '@material-ui/icons/ExpandMore';
import { DeploymentsAccordions } from '../DeploymentsAccordions';
import { StatefulSetsAccordions } from '../StatefulSetsAccordions';
-import { groupResponses } from '../../utils/response';
import { IngressesAccordions } from '../IngressesAccordions';
import { ServicesAccordions } from '../ServicesAccordions';
import { CronJobsAccordions } from '../CronJobsAccordions';
@@ -103,12 +103,22 @@ const ClusterSummary = ({
);
};
-type ClusterProps = {
+/**
+ * Props for Cluster
+ *
+ * @public
+ */
+export type ClusterProps = {
clusterObjects: ClusterObjects;
podsWithErrors: Set;
children?: React.ReactNode;
};
+/**
+ * Component for rendering Kubernetes resources in a cluster
+ *
+ * @public
+ */
export const Cluster = ({ clusterObjects, podsWithErrors }: ClusterProps) => {
const groupedResponses = groupResponses(clusterObjects.resources);
diff --git a/plugins/kubernetes/src/components/ErrorPanel/index.ts b/plugins/kubernetes-react/src/components/Cluster/index.ts
similarity index 93%
rename from plugins/kubernetes/src/components/ErrorPanel/index.ts
rename to plugins/kubernetes-react/src/components/Cluster/index.ts
index 2d3778e2c2..eac1e358b6 100644
--- a/plugins/kubernetes/src/components/ErrorPanel/index.ts
+++ b/plugins/kubernetes-react/src/components/Cluster/index.ts
@@ -13,4 +13,4 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-export { ErrorPanel } from './ErrorPanel';
+export * from './Cluster';
diff --git a/plugins/kubernetes/src/components/CronJobsAccordions/CronJobsAccordions.test.tsx b/plugins/kubernetes-react/src/components/CronJobsAccordions/CronJobsAccordions.test.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/CronJobsAccordions/CronJobsAccordions.test.tsx
rename to plugins/kubernetes-react/src/components/CronJobsAccordions/CronJobsAccordions.test.tsx
diff --git a/plugins/kubernetes/src/components/CronJobsAccordions/CronJobsAccordions.tsx b/plugins/kubernetes-react/src/components/CronJobsAccordions/CronJobsAccordions.tsx
similarity index 97%
rename from plugins/kubernetes/src/components/CronJobsAccordions/CronJobsAccordions.tsx
rename to plugins/kubernetes-react/src/components/CronJobsAccordions/CronJobsAccordions.tsx
index c5babe67fc..e724c14fdf 100644
--- a/plugins/kubernetes/src/components/CronJobsAccordions/CronJobsAccordions.tsx
+++ b/plugins/kubernetes-react/src/components/CronJobsAccordions/CronJobsAccordions.tsx
@@ -30,7 +30,12 @@ import { GroupedResponsesContext } from '../../hooks';
import { StatusError, StatusOK } from '@backstage/core-components';
import { humanizeCron } from '../../utils/crons';
-type CronJobsAccordionsProps = {
+/**
+ *
+ *
+ * @public
+ */
+export type CronJobsAccordionsProps = {
children?: React.ReactNode;
};
@@ -101,6 +106,11 @@ const CronJobAccordion = ({ cronJob, ownedJobs }: CronJobAccordionProps) => {
);
};
+/**
+ *
+ *
+ * @public
+ */
export const CronJobsAccordions = ({}: CronJobsAccordionsProps) => {
const groupedResponses = useContext(GroupedResponsesContext);
diff --git a/plugins/kubernetes/src/components/CronJobsAccordions/CronJobsDrawer.test.tsx b/plugins/kubernetes-react/src/components/CronJobsAccordions/CronJobsDrawer.test.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/CronJobsAccordions/CronJobsDrawer.test.tsx
rename to plugins/kubernetes-react/src/components/CronJobsAccordions/CronJobsDrawer.test.tsx
diff --git a/plugins/kubernetes/src/components/CronJobsAccordions/CronJobsDrawer.tsx b/plugins/kubernetes-react/src/components/CronJobsAccordions/CronJobsDrawer.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/CronJobsAccordions/CronJobsDrawer.tsx
rename to plugins/kubernetes-react/src/components/CronJobsAccordions/CronJobsDrawer.tsx
diff --git a/plugins/kubernetes/src/components/JobsAccordions/index.ts b/plugins/kubernetes-react/src/components/CronJobsAccordions/index.ts
similarity index 92%
rename from plugins/kubernetes/src/components/JobsAccordions/index.ts
rename to plugins/kubernetes-react/src/components/CronJobsAccordions/index.ts
index 392309de79..ecc7172523 100644
--- a/plugins/kubernetes/src/components/JobsAccordions/index.ts
+++ b/plugins/kubernetes-react/src/components/CronJobsAccordions/index.ts
@@ -13,4 +13,4 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-export { JobsAccordions } from './JobsAccordions';
+export * from './CronJobsAccordions';
diff --git a/plugins/kubernetes/src/components/CustomResources/ArgoRollouts/Rollout.test.tsx b/plugins/kubernetes-react/src/components/CustomResources/ArgoRollouts/Rollout.test.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/CustomResources/ArgoRollouts/Rollout.test.tsx
rename to plugins/kubernetes-react/src/components/CustomResources/ArgoRollouts/Rollout.test.tsx
diff --git a/plugins/kubernetes/src/components/CustomResources/ArgoRollouts/Rollout.tsx b/plugins/kubernetes-react/src/components/CustomResources/ArgoRollouts/Rollout.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/CustomResources/ArgoRollouts/Rollout.tsx
rename to plugins/kubernetes-react/src/components/CustomResources/ArgoRollouts/Rollout.tsx
diff --git a/plugins/kubernetes/src/components/CustomResources/ArgoRollouts/RolloutDrawer.tsx b/plugins/kubernetes-react/src/components/CustomResources/ArgoRollouts/RolloutDrawer.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/CustomResources/ArgoRollouts/RolloutDrawer.tsx
rename to plugins/kubernetes-react/src/components/CustomResources/ArgoRollouts/RolloutDrawer.tsx
diff --git a/plugins/kubernetes/src/components/CustomResources/ArgoRollouts/StepsProgress.test.tsx b/plugins/kubernetes-react/src/components/CustomResources/ArgoRollouts/StepsProgress.test.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/CustomResources/ArgoRollouts/StepsProgress.test.tsx
rename to plugins/kubernetes-react/src/components/CustomResources/ArgoRollouts/StepsProgress.test.tsx
diff --git a/plugins/kubernetes/src/components/CustomResources/ArgoRollouts/StepsProgress.tsx b/plugins/kubernetes-react/src/components/CustomResources/ArgoRollouts/StepsProgress.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/CustomResources/ArgoRollouts/StepsProgress.tsx
rename to plugins/kubernetes-react/src/components/CustomResources/ArgoRollouts/StepsProgress.tsx
diff --git a/plugins/kubernetes/src/components/CustomResources/ArgoRollouts/__fixtures__/aborted-rollout.json b/plugins/kubernetes-react/src/components/CustomResources/ArgoRollouts/__fixtures__/aborted-rollout.json
similarity index 100%
rename from plugins/kubernetes/src/components/CustomResources/ArgoRollouts/__fixtures__/aborted-rollout.json
rename to plugins/kubernetes-react/src/components/CustomResources/ArgoRollouts/__fixtures__/aborted-rollout.json
diff --git a/plugins/kubernetes/src/components/CustomResources/ArgoRollouts/__fixtures__/analysis-steps.ts b/plugins/kubernetes-react/src/components/CustomResources/ArgoRollouts/__fixtures__/analysis-steps.ts
similarity index 100%
rename from plugins/kubernetes/src/components/CustomResources/ArgoRollouts/__fixtures__/analysis-steps.ts
rename to plugins/kubernetes-react/src/components/CustomResources/ArgoRollouts/__fixtures__/analysis-steps.ts
diff --git a/plugins/kubernetes/src/components/CustomResources/ArgoRollouts/__fixtures__/grouped-resources.json b/plugins/kubernetes-react/src/components/CustomResources/ArgoRollouts/__fixtures__/grouped-resources.json
similarity index 100%
rename from plugins/kubernetes/src/components/CustomResources/ArgoRollouts/__fixtures__/grouped-resources.json
rename to plugins/kubernetes-react/src/components/CustomResources/ArgoRollouts/__fixtures__/grouped-resources.json
diff --git a/plugins/kubernetes/src/components/CustomResources/ArgoRollouts/__fixtures__/pause-steps.ts b/plugins/kubernetes-react/src/components/CustomResources/ArgoRollouts/__fixtures__/pause-steps.ts
similarity index 100%
rename from plugins/kubernetes/src/components/CustomResources/ArgoRollouts/__fixtures__/pause-steps.ts
rename to plugins/kubernetes-react/src/components/CustomResources/ArgoRollouts/__fixtures__/pause-steps.ts
diff --git a/plugins/kubernetes/src/components/CustomResources/ArgoRollouts/__fixtures__/paused-rollout.json b/plugins/kubernetes-react/src/components/CustomResources/ArgoRollouts/__fixtures__/paused-rollout.json
similarity index 100%
rename from plugins/kubernetes/src/components/CustomResources/ArgoRollouts/__fixtures__/paused-rollout.json
rename to plugins/kubernetes-react/src/components/CustomResources/ArgoRollouts/__fixtures__/paused-rollout.json
diff --git a/plugins/kubernetes/src/components/CustomResources/ArgoRollouts/__fixtures__/rollout.json b/plugins/kubernetes-react/src/components/CustomResources/ArgoRollouts/__fixtures__/rollout.json
similarity index 100%
rename from plugins/kubernetes/src/components/CustomResources/ArgoRollouts/__fixtures__/rollout.json
rename to plugins/kubernetes-react/src/components/CustomResources/ArgoRollouts/__fixtures__/rollout.json
diff --git a/plugins/kubernetes/src/components/CustomResources/ArgoRollouts/__fixtures__/setweight-steps.ts b/plugins/kubernetes-react/src/components/CustomResources/ArgoRollouts/__fixtures__/setweight-steps.ts
similarity index 100%
rename from plugins/kubernetes/src/components/CustomResources/ArgoRollouts/__fixtures__/setweight-steps.ts
rename to plugins/kubernetes-react/src/components/CustomResources/ArgoRollouts/__fixtures__/setweight-steps.ts
diff --git a/plugins/kubernetes/src/components/CustomResources/ArgoRollouts/index.ts b/plugins/kubernetes-react/src/components/CustomResources/ArgoRollouts/index.ts
similarity index 100%
rename from plugins/kubernetes/src/components/CustomResources/ArgoRollouts/index.ts
rename to plugins/kubernetes-react/src/components/CustomResources/ArgoRollouts/index.ts
diff --git a/plugins/kubernetes/src/components/CustomResources/ArgoRollouts/types.ts b/plugins/kubernetes-react/src/components/CustomResources/ArgoRollouts/types.ts
similarity index 100%
rename from plugins/kubernetes/src/components/CustomResources/ArgoRollouts/types.ts
rename to plugins/kubernetes-react/src/components/CustomResources/ArgoRollouts/types.ts
diff --git a/plugins/kubernetes/src/components/CustomResources/CustomResources.tsx b/plugins/kubernetes-react/src/components/CustomResources/CustomResources.tsx
similarity index 95%
rename from plugins/kubernetes/src/components/CustomResources/CustomResources.tsx
rename to plugins/kubernetes-react/src/components/CustomResources/CustomResources.tsx
index 436e97fce8..f204f5fdd1 100644
--- a/plugins/kubernetes/src/components/CustomResources/CustomResources.tsx
+++ b/plugins/kubernetes-react/src/components/CustomResources/CustomResources.tsx
@@ -20,7 +20,12 @@ import { RolloutAccordions } from './ArgoRollouts';
import { DefaultCustomResourceAccordions } from './DefaultCustomResource';
import { GroupedResponsesContext } from '../../hooks';
-interface CustomResourcesProps {
+/**
+ *
+ *
+ * @public
+ */
+export interface CustomResourcesProps {
children?: React.ReactNode;
}
@@ -30,6 +35,11 @@ const kindToResource = (customResources: any[]): Dictionary => {
});
};
+/**
+ *
+ *
+ * @public
+ */
export const CustomResources = ({}: CustomResourcesProps) => {
const groupedResponses = useContext(GroupedResponsesContext);
const kindToResourceMap = kindToResource(groupedResponses.customResources);
diff --git a/plugins/kubernetes/src/components/CustomResources/DefaultCustomResource.test.tsx b/plugins/kubernetes-react/src/components/CustomResources/DefaultCustomResource.test.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/CustomResources/DefaultCustomResource.test.tsx
rename to plugins/kubernetes-react/src/components/CustomResources/DefaultCustomResource.test.tsx
diff --git a/plugins/kubernetes/src/components/CustomResources/DefaultCustomResource.tsx b/plugins/kubernetes-react/src/components/CustomResources/DefaultCustomResource.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/CustomResources/DefaultCustomResource.tsx
rename to plugins/kubernetes-react/src/components/CustomResources/DefaultCustomResource.tsx
diff --git a/plugins/kubernetes/src/components/CustomResources/DefaultCustomResourceDrawer.tsx b/plugins/kubernetes-react/src/components/CustomResources/DefaultCustomResourceDrawer.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/CustomResources/DefaultCustomResourceDrawer.tsx
rename to plugins/kubernetes-react/src/components/CustomResources/DefaultCustomResourceDrawer.tsx
diff --git a/plugins/kubernetes/src/components/CustomResources/__fixtures__/analysis-run.json b/plugins/kubernetes-react/src/components/CustomResources/__fixtures__/analysis-run.json
similarity index 100%
rename from plugins/kubernetes/src/components/CustomResources/__fixtures__/analysis-run.json
rename to plugins/kubernetes-react/src/components/CustomResources/__fixtures__/analysis-run.json
diff --git a/plugins/kubernetes/src/components/ErrorReporting/index.ts b/plugins/kubernetes-react/src/components/CustomResources/index.ts
similarity index 92%
rename from plugins/kubernetes/src/components/ErrorReporting/index.ts
rename to plugins/kubernetes-react/src/components/CustomResources/index.ts
index 451d08ec76..0c5e0ce7a0 100644
--- a/plugins/kubernetes/src/components/ErrorReporting/index.ts
+++ b/plugins/kubernetes-react/src/components/CustomResources/index.ts
@@ -13,4 +13,4 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-export { ErrorReporting } from './ErrorReporting';
+export * from './CustomResources';
diff --git a/plugins/kubernetes/src/components/DeploymentsAccordions/DeploymentDrawer.test.tsx b/plugins/kubernetes-react/src/components/DeploymentsAccordions/DeploymentDrawer.test.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/DeploymentsAccordions/DeploymentDrawer.test.tsx
rename to plugins/kubernetes-react/src/components/DeploymentsAccordions/DeploymentDrawer.test.tsx
diff --git a/plugins/kubernetes/src/components/DeploymentsAccordions/DeploymentDrawer.tsx b/plugins/kubernetes-react/src/components/DeploymentsAccordions/DeploymentDrawer.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/DeploymentsAccordions/DeploymentDrawer.tsx
rename to plugins/kubernetes-react/src/components/DeploymentsAccordions/DeploymentDrawer.tsx
diff --git a/plugins/kubernetes/src/components/DeploymentsAccordions/DeploymentsAccordions.test.tsx b/plugins/kubernetes-react/src/components/DeploymentsAccordions/DeploymentsAccordions.test.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/DeploymentsAccordions/DeploymentsAccordions.test.tsx
rename to plugins/kubernetes-react/src/components/DeploymentsAccordions/DeploymentsAccordions.test.tsx
diff --git a/plugins/kubernetes/src/components/DeploymentsAccordions/DeploymentsAccordions.tsx b/plugins/kubernetes-react/src/components/DeploymentsAccordions/DeploymentsAccordions.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/DeploymentsAccordions/DeploymentsAccordions.tsx
rename to plugins/kubernetes-react/src/components/DeploymentsAccordions/DeploymentsAccordions.tsx
diff --git a/plugins/kubernetes/src/components/DeploymentsAccordions/index.ts b/plugins/kubernetes-react/src/components/DeploymentsAccordions/index.ts
similarity index 100%
rename from plugins/kubernetes/src/components/DeploymentsAccordions/index.ts
rename to plugins/kubernetes-react/src/components/DeploymentsAccordions/index.ts
diff --git a/plugins/kubernetes/src/components/ErrorPanel/ErrorPanel.test.tsx b/plugins/kubernetes-react/src/components/ErrorPanel/ErrorPanel.test.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/ErrorPanel/ErrorPanel.test.tsx
rename to plugins/kubernetes-react/src/components/ErrorPanel/ErrorPanel.test.tsx
diff --git a/plugins/kubernetes/src/components/ErrorPanel/ErrorPanel.tsx b/plugins/kubernetes-react/src/components/ErrorPanel/ErrorPanel.tsx
similarity index 96%
rename from plugins/kubernetes/src/components/ErrorPanel/ErrorPanel.tsx
rename to plugins/kubernetes-react/src/components/ErrorPanel/ErrorPanel.tsx
index d2cb88b9ca..b02f4c18dc 100644
--- a/plugins/kubernetes/src/components/ErrorPanel/ErrorPanel.tsx
+++ b/plugins/kubernetes-react/src/components/ErrorPanel/ErrorPanel.tsx
@@ -41,13 +41,23 @@ const clustersWithErrorsToErrorMessage = (
});
};
-type ErrorPanelProps = {
+/**
+ *
+ *
+ * @public
+ */
+export type ErrorPanelProps = {
entityName: string;
errorMessage?: string;
clustersWithErrors?: ClusterObjects[];
children?: React.ReactNode;
};
+/**
+ *
+ *
+ * @public
+ */
export const ErrorPanel = ({
entityName,
errorMessage,
diff --git a/plugins/kubernetes/src/components/CustomResources/index.ts b/plugins/kubernetes-react/src/components/ErrorPanel/index.ts
similarity index 91%
rename from plugins/kubernetes/src/components/CustomResources/index.ts
rename to plugins/kubernetes-react/src/components/ErrorPanel/index.ts
index 9297fd8ac1..94d6e5b028 100644
--- a/plugins/kubernetes/src/components/CustomResources/index.ts
+++ b/plugins/kubernetes-react/src/components/ErrorPanel/index.ts
@@ -13,4 +13,4 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-export { CustomResources } from './CustomResources';
+export * from './ErrorPanel';
diff --git a/plugins/kubernetes/src/components/ErrorReporting/ErrorReporting.tsx b/plugins/kubernetes-react/src/components/ErrorReporting/ErrorReporting.tsx
similarity index 92%
rename from plugins/kubernetes/src/components/ErrorReporting/ErrorReporting.tsx
rename to plugins/kubernetes-react/src/components/ErrorReporting/ErrorReporting.tsx
index 367e791067..64345662ed 100644
--- a/plugins/kubernetes/src/components/ErrorReporting/ErrorReporting.tsx
+++ b/plugins/kubernetes-react/src/components/ErrorReporting/ErrorReporting.tsx
@@ -14,10 +14,18 @@
* limitations under the License.
*/
import * as React from 'react';
-import { DetectedError, DetectedErrorsByCluster } from '../../error-detection';
+import {
+ DetectedError,
+ DetectedErrorsByCluster,
+} from '@backstage/plugin-kubernetes-common';
import { Table, TableColumn } from '@backstage/core-components';
-type ErrorReportingProps = {
+/**
+ *
+ *
+ * @public
+ */
+export type ErrorReportingProps = {
detectedErrors: DetectedErrorsByCluster;
};
@@ -65,6 +73,11 @@ const sortBySeverity = (a: Row, b: Row) => {
return 0;
};
+/**
+ *
+ *
+ * @public
+ */
export const ErrorReporting = ({ detectedErrors }: ErrorReportingProps) => {
const errors = Array.from(detectedErrors.entries())
.flatMap(([clusterName, resourceErrors]) => {
diff --git a/plugins/kubernetes-react/src/components/ErrorReporting/index.ts b/plugins/kubernetes-react/src/components/ErrorReporting/index.ts
new file mode 100644
index 0000000000..3382849229
--- /dev/null
+++ b/plugins/kubernetes-react/src/components/ErrorReporting/index.ts
@@ -0,0 +1,16 @@
+/*
+ * Copyright 2020 The Backstage Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+export * from './ErrorReporting';
diff --git a/plugins/kubernetes/src/components/HorizontalPodAutoscalers/HorizontalPodAutoscalerDrawer.test.tsx b/plugins/kubernetes-react/src/components/HorizontalPodAutoscalers/HorizontalPodAutoscalerDrawer.test.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/HorizontalPodAutoscalers/HorizontalPodAutoscalerDrawer.test.tsx
rename to plugins/kubernetes-react/src/components/HorizontalPodAutoscalers/HorizontalPodAutoscalerDrawer.test.tsx
diff --git a/plugins/kubernetes/src/components/HorizontalPodAutoscalers/HorizontalPodAutoscalerDrawer.tsx b/plugins/kubernetes-react/src/components/HorizontalPodAutoscalers/HorizontalPodAutoscalerDrawer.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/HorizontalPodAutoscalers/HorizontalPodAutoscalerDrawer.tsx
rename to plugins/kubernetes-react/src/components/HorizontalPodAutoscalers/HorizontalPodAutoscalerDrawer.tsx
diff --git a/plugins/kubernetes/src/components/HorizontalPodAutoscalers/__fixtures__/horizontalpodautoscalers.json b/plugins/kubernetes-react/src/components/HorizontalPodAutoscalers/__fixtures__/horizontalpodautoscalers.json
similarity index 100%
rename from plugins/kubernetes/src/components/HorizontalPodAutoscalers/__fixtures__/horizontalpodautoscalers.json
rename to plugins/kubernetes-react/src/components/HorizontalPodAutoscalers/__fixtures__/horizontalpodautoscalers.json
diff --git a/plugins/kubernetes/src/components/HorizontalPodAutoscalers/index.ts b/plugins/kubernetes-react/src/components/HorizontalPodAutoscalers/index.ts
similarity index 100%
rename from plugins/kubernetes/src/components/HorizontalPodAutoscalers/index.ts
rename to plugins/kubernetes-react/src/components/HorizontalPodAutoscalers/index.ts
diff --git a/plugins/kubernetes/src/components/IngressesAccordions/IngressDrawer.test.tsx b/plugins/kubernetes-react/src/components/IngressesAccordions/IngressDrawer.test.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/IngressesAccordions/IngressDrawer.test.tsx
rename to plugins/kubernetes-react/src/components/IngressesAccordions/IngressDrawer.test.tsx
diff --git a/plugins/kubernetes/src/components/IngressesAccordions/IngressDrawer.tsx b/plugins/kubernetes-react/src/components/IngressesAccordions/IngressDrawer.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/IngressesAccordions/IngressDrawer.tsx
rename to plugins/kubernetes-react/src/components/IngressesAccordions/IngressDrawer.tsx
diff --git a/plugins/kubernetes/src/components/IngressesAccordions/IngressesAccordions.test.tsx b/plugins/kubernetes-react/src/components/IngressesAccordions/IngressesAccordions.test.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/IngressesAccordions/IngressesAccordions.test.tsx
rename to plugins/kubernetes-react/src/components/IngressesAccordions/IngressesAccordions.test.tsx
diff --git a/plugins/kubernetes/src/components/IngressesAccordions/IngressesAccordions.tsx b/plugins/kubernetes-react/src/components/IngressesAccordions/IngressesAccordions.tsx
similarity index 96%
rename from plugins/kubernetes/src/components/IngressesAccordions/IngressesAccordions.tsx
rename to plugins/kubernetes-react/src/components/IngressesAccordions/IngressesAccordions.tsx
index 6e12c033ba..28aa5d42e4 100644
--- a/plugins/kubernetes/src/components/IngressesAccordions/IngressesAccordions.tsx
+++ b/plugins/kubernetes-react/src/components/IngressesAccordions/IngressesAccordions.tsx
@@ -27,7 +27,12 @@ import { IngressDrawer } from './IngressDrawer';
import { GroupedResponsesContext } from '../../hooks';
import { StructuredMetadataTable } from '@backstage/core-components';
-type IngressesAccordionsProps = {};
+/**
+ *
+ *
+ * @public
+ */
+export type IngressesAccordionsProps = {};
type IngressAccordionProps = {
ingress: V1Ingress;
@@ -78,6 +83,12 @@ const IngressAccordion = ({ ingress }: IngressAccordionProps) => {
);
};
+
+/**
+ *
+ *
+ * @public
+ */
export const IngressesAccordions = ({}: IngressesAccordionsProps) => {
const groupedResponses = useContext(GroupedResponsesContext);
return (
diff --git a/plugins/kubernetes/src/components/IngressesAccordions/__fixtures__/2-ingresses.json b/plugins/kubernetes-react/src/components/IngressesAccordions/__fixtures__/2-ingresses.json
similarity index 100%
rename from plugins/kubernetes/src/components/IngressesAccordions/__fixtures__/2-ingresses.json
rename to plugins/kubernetes-react/src/components/IngressesAccordions/__fixtures__/2-ingresses.json
diff --git a/plugins/kubernetes-react/src/components/IngressesAccordions/index.ts b/plugins/kubernetes-react/src/components/IngressesAccordions/index.ts
new file mode 100644
index 0000000000..ece35ab17a
--- /dev/null
+++ b/plugins/kubernetes-react/src/components/IngressesAccordions/index.ts
@@ -0,0 +1,16 @@
+/*
+ * Copyright 2020 The Backstage Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+export * from './IngressesAccordions';
diff --git a/plugins/kubernetes/src/components/JobsAccordions/JobsAccordions.test.tsx b/plugins/kubernetes-react/src/components/JobsAccordions/JobsAccordions.test.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/JobsAccordions/JobsAccordions.test.tsx
rename to plugins/kubernetes-react/src/components/JobsAccordions/JobsAccordions.test.tsx
diff --git a/plugins/kubernetes/src/components/JobsAccordions/JobsAccordions.tsx b/plugins/kubernetes-react/src/components/JobsAccordions/JobsAccordions.tsx
similarity index 97%
rename from plugins/kubernetes/src/components/JobsAccordions/JobsAccordions.tsx
rename to plugins/kubernetes-react/src/components/JobsAccordions/JobsAccordions.tsx
index e805e3664b..460d0b80c0 100644
--- a/plugins/kubernetes/src/components/JobsAccordions/JobsAccordions.tsx
+++ b/plugins/kubernetes-react/src/components/JobsAccordions/JobsAccordions.tsx
@@ -32,7 +32,12 @@ import {
StatusPending,
} from '@backstage/core-components';
-type JobsAccordionsProps = {
+/**
+ *
+ *
+ * @public
+ */
+export type JobsAccordionsProps = {
jobs: V1Job[];
children?: React.ReactNode;
};
@@ -98,6 +103,11 @@ const JobAccordion = ({ job, ownedPods }: JobAccordionProps) => {
);
};
+/**
+ *
+ *
+ * @public
+ */
export const JobsAccordions = ({ jobs }: JobsAccordionsProps) => {
const groupedResponses = useContext(GroupedResponsesContext);
diff --git a/plugins/kubernetes/src/components/JobsAccordions/JobsDrawer.test.tsx b/plugins/kubernetes-react/src/components/JobsAccordions/JobsDrawer.test.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/JobsAccordions/JobsDrawer.test.tsx
rename to plugins/kubernetes-react/src/components/JobsAccordions/JobsDrawer.test.tsx
diff --git a/plugins/kubernetes/src/components/JobsAccordions/JobsDrawer.tsx b/plugins/kubernetes-react/src/components/JobsAccordions/JobsDrawer.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/JobsAccordions/JobsDrawer.tsx
rename to plugins/kubernetes-react/src/components/JobsAccordions/JobsDrawer.tsx
diff --git a/cypress/src/plugins/index.ts b/plugins/kubernetes-react/src/components/JobsAccordions/index.ts
similarity index 94%
rename from cypress/src/plugins/index.ts
rename to plugins/kubernetes-react/src/components/JobsAccordions/index.ts
index 4c8a35f0d1..c69c493dc8 100644
--- a/cypress/src/plugins/index.ts
+++ b/plugins/kubernetes-react/src/components/JobsAccordions/index.ts
@@ -13,4 +13,4 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-export default () => {};
+export * from './JobsAccordions';
diff --git a/plugins/kubernetes/src/components/KubernetesDrawer/KubernetesDrawer.tsx b/plugins/kubernetes-react/src/components/KubernetesDrawer/KubernetesDrawer.tsx
similarity index 93%
rename from plugins/kubernetes/src/components/KubernetesDrawer/KubernetesDrawer.tsx
rename to plugins/kubernetes-react/src/components/KubernetesDrawer/KubernetesDrawer.tsx
index 18ef5d9505..598dac4fe8 100644
--- a/plugins/kubernetes/src/components/KubernetesDrawer/KubernetesDrawer.tsx
+++ b/plugins/kubernetes-react/src/components/KubernetesDrawer/KubernetesDrawer.tsx
@@ -48,7 +48,12 @@ const useDrawerContentStyles = makeStyles((_theme: Theme) =>
}),
);
-interface KubernetesObject {
+/**
+ * The type of object that can be represented by the Drawer
+ *
+ * @public
+ */
+export interface KubernetesObject {
kind: string;
metadata?: IObjectMeta;
}
@@ -60,7 +65,7 @@ interface KubernetesDrawerContentProps {
children?: React.ReactNode;
}
-export const KubernetesDrawerContent = ({
+const KubernetesDrawerContent = ({
children,
header,
kubernetesObject,
@@ -115,7 +120,12 @@ export const KubernetesDrawerContent = ({
);
};
-interface KubernetesDrawerProps {
+/**
+ * Props of KubernetesDrawer
+ *
+ * @public
+ */
+export interface KubernetesDrawerProps {
open?: boolean;
kubernetesObject: KubernetesObject;
label: React.ReactNode;
@@ -142,6 +152,11 @@ const DrawerButton = withStyles({
},
})(Button);
+/**
+ * Button/Drawer component for Kubernetes Objects
+ *
+ * @public
+ */
export const KubernetesDrawer = ({
open,
label,
diff --git a/plugins/kubernetes/src/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.tsx b/plugins/kubernetes-react/src/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.tsx
similarity index 95%
rename from plugins/kubernetes/src/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.tsx
rename to plugins/kubernetes-react/src/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.tsx
index 8f28549f83..65001c658e 100644
--- a/plugins/kubernetes/src/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.tsx
+++ b/plugins/kubernetes-react/src/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.tsx
@@ -86,13 +86,26 @@ const PodDrawerButton = withStyles({
},
})(Button);
-type ErrorPanelProps = {
+/**
+ *
+ *
+ * @public
+ */
+export type LinkErrorPanelProps = {
cluster: ClusterAttributes;
errorMessage?: string;
children?: React.ReactNode;
};
-export const LinkErrorPanel = ({ cluster, errorMessage }: ErrorPanelProps) => (
+/**
+ *
+ *
+ * @public
+ */
+export const LinkErrorPanel = ({
+ cluster,
+ errorMessage,
+}: LinkErrorPanelProps) => (
(
);
-interface KubernetesDrawerable {
+/**
+ *
+ *
+ * @public
+ */
+export interface KubernetesDrawerable {
metadata?: V1ObjectMeta;
}
@@ -234,7 +252,12 @@ const KubernetesStructuredMetadataTableDrawerContent = <
>
);
};
-interface KubernetesStructuredMetadataTableDrawerProps<
+
+/**
+ *
+ * @public
+ */
+export interface KubernetesStructuredMetadataTableDrawerProps<
T extends KubernetesDrawerable,
> {
object: T;
@@ -245,6 +268,10 @@ interface KubernetesStructuredMetadataTableDrawerProps<
children?: React.ReactNode;
}
+/**
+ *
+ * @public
+ */
export const KubernetesStructuredMetadataTableDrawer = <
T extends KubernetesDrawerable,
>({
diff --git a/plugins/kubernetes/src/components/KubernetesDrawer/ManifestYaml.tsx b/plugins/kubernetes-react/src/components/KubernetesDrawer/ManifestYaml.tsx
similarity index 94%
rename from plugins/kubernetes/src/components/KubernetesDrawer/ManifestYaml.tsx
rename to plugins/kubernetes-react/src/components/KubernetesDrawer/ManifestYaml.tsx
index 8f0c38afde..246477b53b 100644
--- a/plugins/kubernetes/src/components/KubernetesDrawer/ManifestYaml.tsx
+++ b/plugins/kubernetes-react/src/components/KubernetesDrawer/ManifestYaml.tsx
@@ -18,10 +18,20 @@ import { FormControlLabel, Switch } from '@material-ui/core';
import jsyaml from 'js-yaml';
import React, { useState } from 'react';
+/**
+ * Props of ManifestYaml
+ *
+ * @public
+ */
export interface ManifestYamlProps {
object: object;
}
+/**
+ * Renders a Kubernetes object as a YAML code snippet
+ *
+ * @public
+ */
export const ManifestYaml = ({ object }: ManifestYamlProps) => {
// Toggle whether the Kubernetes resource managed fields should be shown in
// the YAML display. This toggle is only available when the YAML is being
diff --git a/plugins/kubernetes/src/components/KubernetesDrawer/index.ts b/plugins/kubernetes-react/src/components/KubernetesDrawer/index.ts
similarity index 95%
rename from plugins/kubernetes/src/components/KubernetesDrawer/index.ts
rename to plugins/kubernetes-react/src/components/KubernetesDrawer/index.ts
index a0108cbda6..cc5337544b 100644
--- a/plugins/kubernetes/src/components/KubernetesDrawer/index.ts
+++ b/plugins/kubernetes-react/src/components/KubernetesDrawer/index.ts
@@ -16,3 +16,4 @@
export * from './KubernetesStructuredMetadataTableDrawer';
export * from './KubernetesDrawer';
+export * from './ManifestYaml';
diff --git a/plugins/kubernetes/src/components/PodExecTerminal/PodExecTerminal.test.tsx b/plugins/kubernetes-react/src/components/PodExecTerminal/PodExecTerminal.test.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/PodExecTerminal/PodExecTerminal.test.tsx
rename to plugins/kubernetes-react/src/components/PodExecTerminal/PodExecTerminal.test.tsx
diff --git a/plugins/kubernetes/src/components/PodExecTerminal/PodExecTerminal.tsx b/plugins/kubernetes-react/src/components/PodExecTerminal/PodExecTerminal.tsx
similarity index 99%
rename from plugins/kubernetes/src/components/PodExecTerminal/PodExecTerminal.tsx
rename to plugins/kubernetes-react/src/components/PodExecTerminal/PodExecTerminal.tsx
index a741f4e189..f8106bd011 100644
--- a/plugins/kubernetes/src/components/PodExecTerminal/PodExecTerminal.tsx
+++ b/plugins/kubernetes-react/src/components/PodExecTerminal/PodExecTerminal.tsx
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-import 'xterm/css/xterm.css';
+import 'xterm';
import { discoveryApiRef, useApi } from '@backstage/core-plugin-api';
import React, { useEffect, useMemo, useState } from 'react';
diff --git a/plugins/kubernetes/src/components/PodExecTerminal/PodExecTerminalAttachAddon.ts b/plugins/kubernetes-react/src/components/PodExecTerminal/PodExecTerminalAttachAddon.ts
similarity index 100%
rename from plugins/kubernetes/src/components/PodExecTerminal/PodExecTerminalAttachAddon.ts
rename to plugins/kubernetes-react/src/components/PodExecTerminal/PodExecTerminalAttachAddon.ts
diff --git a/plugins/kubernetes/src/components/PodExecTerminal/PodExecTerminalDialog.tsx b/plugins/kubernetes-react/src/components/PodExecTerminal/PodExecTerminalDialog.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/PodExecTerminal/PodExecTerminalDialog.tsx
rename to plugins/kubernetes-react/src/components/PodExecTerminal/PodExecTerminalDialog.tsx
diff --git a/plugins/kubernetes/src/components/PodExecTerminal/index.ts b/plugins/kubernetes-react/src/components/PodExecTerminal/index.ts
similarity index 100%
rename from plugins/kubernetes/src/components/PodExecTerminal/index.ts
rename to plugins/kubernetes-react/src/components/PodExecTerminal/index.ts
diff --git a/plugins/kubernetes/src/components/PodExecTerminal/matchMedia.mock.ts b/plugins/kubernetes-react/src/components/PodExecTerminal/matchMedia.mock.ts
similarity index 100%
rename from plugins/kubernetes/src/components/PodExecTerminal/matchMedia.mock.ts
rename to plugins/kubernetes-react/src/components/PodExecTerminal/matchMedia.mock.ts
diff --git a/plugins/kubernetes/src/components/Pods/ErrorList/ErrorList.test.tsx b/plugins/kubernetes-react/src/components/Pods/ErrorList/ErrorList.test.tsx
similarity index 97%
rename from plugins/kubernetes/src/components/Pods/ErrorList/ErrorList.test.tsx
rename to plugins/kubernetes-react/src/components/Pods/ErrorList/ErrorList.test.tsx
index b05b4d2d9e..2423654cc3 100644
--- a/plugins/kubernetes/src/components/Pods/ErrorList/ErrorList.test.tsx
+++ b/plugins/kubernetes-react/src/components/Pods/ErrorList/ErrorList.test.tsx
@@ -18,7 +18,7 @@ import React from 'react';
import { render } from '@testing-library/react';
import { ErrorList } from './ErrorList';
-import { Pod } from 'kubernetes-models/v1/Pod';
+import { Pod } from 'kubernetes-models/v1';
describe('ErrorList', () => {
it('error highlight should render', () => {
diff --git a/plugins/kubernetes/src/components/Pods/ErrorList/ErrorList.tsx b/plugins/kubernetes-react/src/components/Pods/ErrorList/ErrorList.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/Pods/ErrorList/ErrorList.tsx
rename to plugins/kubernetes-react/src/components/Pods/ErrorList/ErrorList.tsx
diff --git a/plugins/kubernetes/src/components/Pods/ErrorList/index.ts b/plugins/kubernetes-react/src/components/Pods/ErrorList/index.ts
similarity index 100%
rename from plugins/kubernetes/src/components/Pods/ErrorList/index.ts
rename to plugins/kubernetes-react/src/components/Pods/ErrorList/index.ts
diff --git a/plugins/kubernetes/src/components/Pods/Events/Events.test.tsx b/plugins/kubernetes-react/src/components/Pods/Events/Events.test.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/Pods/Events/Events.test.tsx
rename to plugins/kubernetes-react/src/components/Pods/Events/Events.test.tsx
diff --git a/plugins/kubernetes/src/components/Pods/Events/Events.tsx b/plugins/kubernetes-react/src/components/Pods/Events/Events.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/Pods/Events/Events.tsx
rename to plugins/kubernetes-react/src/components/Pods/Events/Events.tsx
diff --git a/plugins/kubernetes/src/components/Pods/Events/index.ts b/plugins/kubernetes-react/src/components/Pods/Events/index.ts
similarity index 100%
rename from plugins/kubernetes/src/components/Pods/Events/index.ts
rename to plugins/kubernetes-react/src/components/Pods/Events/index.ts
diff --git a/plugins/kubernetes/src/components/Pods/Events/useEvents.test.tsx b/plugins/kubernetes-react/src/components/Pods/Events/useEvents.test.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/Pods/Events/useEvents.test.tsx
rename to plugins/kubernetes-react/src/components/Pods/Events/useEvents.test.tsx
diff --git a/plugins/kubernetes/src/components/Pods/Events/useEvents.ts b/plugins/kubernetes-react/src/components/Pods/Events/useEvents.ts
similarity index 95%
rename from plugins/kubernetes/src/components/Pods/Events/useEvents.ts
rename to plugins/kubernetes-react/src/components/Pods/Events/useEvents.ts
index 441937507d..e31a4ee859 100644
--- a/plugins/kubernetes/src/components/Pods/Events/useEvents.ts
+++ b/plugins/kubernetes-react/src/components/Pods/Events/useEvents.ts
@@ -15,7 +15,7 @@
*/
import { useApi } from '@backstage/core-plugin-api';
import useAsync from 'react-use/lib/useAsync';
-import { kubernetesProxyApiRef } from '../../../api';
+import { kubernetesProxyApiRef } from '../../../api/types';
/**
* Arguments for useEvents
diff --git a/plugins/kubernetes/src/components/Pods/FixDialog/FixDialog.test.tsx b/plugins/kubernetes-react/src/components/Pods/FixDialog/FixDialog.test.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/Pods/FixDialog/FixDialog.test.tsx
rename to plugins/kubernetes-react/src/components/Pods/FixDialog/FixDialog.test.tsx
diff --git a/plugins/kubernetes/src/components/Pods/FixDialog/FixDialog.tsx b/plugins/kubernetes-react/src/components/Pods/FixDialog/FixDialog.tsx
similarity index 98%
rename from plugins/kubernetes/src/components/Pods/FixDialog/FixDialog.tsx
rename to plugins/kubernetes-react/src/components/Pods/FixDialog/FixDialog.tsx
index 63ce4af03b..c691cc67fd 100644
--- a/plugins/kubernetes/src/components/Pods/FixDialog/FixDialog.tsx
+++ b/plugins/kubernetes-react/src/components/Pods/FixDialog/FixDialog.tsx
@@ -28,7 +28,7 @@ import HelpIcon from '@material-ui/icons/Help';
import OpenInNewIcon from '@material-ui/icons/OpenInNew';
import { Pod } from 'kubernetes-models/v1/Pod';
-import { DetectedError } from '../../../error-detection';
+import { DetectedError } from '@backstage/plugin-kubernetes-common';
import { PodLogs } from '../PodLogs';
import { Events } from '../Events';
import { LinkButton } from '@backstage/core-components';
diff --git a/plugins/kubernetes/src/components/Pods/FixDialog/index.ts b/plugins/kubernetes-react/src/components/Pods/FixDialog/index.ts
similarity index 100%
rename from plugins/kubernetes/src/components/Pods/FixDialog/index.ts
rename to plugins/kubernetes-react/src/components/Pods/FixDialog/index.ts
diff --git a/plugins/kubernetes/src/components/Pods/PodDrawer/ContainerCard.test.tsx b/plugins/kubernetes-react/src/components/Pods/PodDrawer/ContainerCard.test.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/Pods/PodDrawer/ContainerCard.test.tsx
rename to plugins/kubernetes-react/src/components/Pods/PodDrawer/ContainerCard.test.tsx
diff --git a/plugins/kubernetes/src/components/Pods/PodDrawer/ContainerCard.tsx b/plugins/kubernetes-react/src/components/Pods/PodDrawer/ContainerCard.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/Pods/PodDrawer/ContainerCard.tsx
rename to plugins/kubernetes-react/src/components/Pods/PodDrawer/ContainerCard.tsx
diff --git a/plugins/kubernetes/src/components/Pods/PodDrawer/PendingPodContent.test.tsx b/plugins/kubernetes-react/src/components/Pods/PodDrawer/PendingPodContent.test.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/Pods/PodDrawer/PendingPodContent.test.tsx
rename to plugins/kubernetes-react/src/components/Pods/PodDrawer/PendingPodContent.test.tsx
diff --git a/plugins/kubernetes/src/components/Pods/PodDrawer/PendingPodContent.tsx b/plugins/kubernetes-react/src/components/Pods/PodDrawer/PendingPodContent.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/Pods/PodDrawer/PendingPodContent.tsx
rename to plugins/kubernetes-react/src/components/Pods/PodDrawer/PendingPodContent.tsx
diff --git a/plugins/kubernetes/src/components/Pods/PodDrawer/PodDrawer.test.tsx b/plugins/kubernetes-react/src/components/Pods/PodDrawer/PodDrawer.test.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/Pods/PodDrawer/PodDrawer.test.tsx
rename to plugins/kubernetes-react/src/components/Pods/PodDrawer/PodDrawer.test.tsx
diff --git a/plugins/kubernetes/src/components/Pods/PodDrawer/PodDrawer.tsx b/plugins/kubernetes-react/src/components/Pods/PodDrawer/PodDrawer.tsx
similarity index 99%
rename from plugins/kubernetes/src/components/Pods/PodDrawer/PodDrawer.tsx
rename to plugins/kubernetes-react/src/components/Pods/PodDrawer/PodDrawer.tsx
index 30588cd347..1b98237d5a 100644
--- a/plugins/kubernetes/src/components/Pods/PodDrawer/PodDrawer.tsx
+++ b/plugins/kubernetes-react/src/components/Pods/PodDrawer/PodDrawer.tsx
@@ -67,7 +67,7 @@ function getContainerSpecByName(pod: Pod, containerName: string) {
*
* @public
*/
-interface PodDrawerProps {
+export interface PodDrawerProps {
open?: boolean;
podAndErrors: PodAndErrors;
}
diff --git a/plugins/kubernetes/src/components/Pods/PodDrawer/index.ts b/plugins/kubernetes-react/src/components/Pods/PodDrawer/index.ts
similarity index 100%
rename from plugins/kubernetes/src/components/Pods/PodDrawer/index.ts
rename to plugins/kubernetes-react/src/components/Pods/PodDrawer/index.ts
diff --git a/plugins/kubernetes/src/components/Pods/PodLogs/PodLogs.tsx b/plugins/kubernetes-react/src/components/Pods/PodLogs/PodLogs.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/Pods/PodLogs/PodLogs.tsx
rename to plugins/kubernetes-react/src/components/Pods/PodLogs/PodLogs.tsx
diff --git a/plugins/kubernetes/src/components/Pods/PodLogs/PodLogsDialog.tsx b/plugins/kubernetes-react/src/components/Pods/PodLogs/PodLogsDialog.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/Pods/PodLogs/PodLogsDialog.tsx
rename to plugins/kubernetes-react/src/components/Pods/PodLogs/PodLogsDialog.tsx
diff --git a/plugins/kubernetes/src/components/Pods/PodLogs/index.ts b/plugins/kubernetes-react/src/components/Pods/PodLogs/index.ts
similarity index 100%
rename from plugins/kubernetes/src/components/Pods/PodLogs/index.ts
rename to plugins/kubernetes-react/src/components/Pods/PodLogs/index.ts
diff --git a/plugins/kubernetes/src/components/Pods/PodLogs/types.ts b/plugins/kubernetes-react/src/components/Pods/PodLogs/types.ts
similarity index 100%
rename from plugins/kubernetes/src/components/Pods/PodLogs/types.ts
rename to plugins/kubernetes-react/src/components/Pods/PodLogs/types.ts
diff --git a/plugins/kubernetes/src/components/Pods/PodLogs/usePodLogs.ts b/plugins/kubernetes-react/src/components/Pods/PodLogs/usePodLogs.ts
similarity index 95%
rename from plugins/kubernetes/src/components/Pods/PodLogs/usePodLogs.ts
rename to plugins/kubernetes-react/src/components/Pods/PodLogs/usePodLogs.ts
index 495bb1dc71..26764fc64c 100644
--- a/plugins/kubernetes/src/components/Pods/PodLogs/usePodLogs.ts
+++ b/plugins/kubernetes-react/src/components/Pods/PodLogs/usePodLogs.ts
@@ -17,7 +17,7 @@ import useAsync from 'react-use/lib/useAsync';
import { ContainerScope } from './types';
import { useApi } from '@backstage/core-plugin-api';
-import { kubernetesProxyApiRef } from '../../../api';
+import { kubernetesProxyApiRef } from '../../../api/types';
/**
* Arguments for usePodLogs
diff --git a/plugins/kubernetes/src/components/Pods/PodsTable.test.tsx b/plugins/kubernetes-react/src/components/Pods/PodsTable.test.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/Pods/PodsTable.test.tsx
rename to plugins/kubernetes-react/src/components/Pods/PodsTable.test.tsx
diff --git a/plugins/kubernetes/src/components/Pods/PodsTable.tsx b/plugins/kubernetes-react/src/components/Pods/PodsTable.tsx
similarity index 96%
rename from plugins/kubernetes/src/components/Pods/PodsTable.tsx
rename to plugins/kubernetes-react/src/components/Pods/PodsTable.tsx
index bebfbd0b5d..f7c2660c84 100644
--- a/plugins/kubernetes/src/components/Pods/PodsTable.tsx
+++ b/plugins/kubernetes-react/src/components/Pods/PodsTable.tsx
@@ -31,11 +31,33 @@ import { V1Pod } from '@kubernetes/client-node';
import { usePodMetrics } from '../../hooks/usePodMetrics';
import { Typography } from '@material-ui/core';
+/**
+ *
+ *
+ * @public
+ */
export const READY_COLUMNS: PodColumns = 'READY';
+
+/**
+ *
+ *
+ * @public
+ */
export const RESOURCE_COLUMNS: PodColumns = 'RESOURCE';
+
+/**
+ *
+ *
+ * @public
+ */
export type PodColumns = 'READY' | 'RESOURCE';
-type PodsTablesProps = {
+/**
+ *
+ *
+ * @public
+ */
+export type PodsTablesProps = {
pods: Pod | V1Pod[];
extraColumns?: PodColumns[];
children?: React.ReactNode;
@@ -95,6 +117,11 @@ const Memory = ({ clusterName, pod }: { clusterName: string; pod: Pod }) => {
return <>{podStatusToMemoryUtil(metrics)}>;
};
+/**
+ *
+ *
+ * @public
+ */
export const PodsTable = ({ pods, extraColumns = [] }: PodsTablesProps) => {
const cluster = useContext(ClusterContext);
const defaultColumns: TableColumn[] = [
diff --git a/plugins/kubernetes/src/components/Pods/__fixtures__/crashing-pod.json b/plugins/kubernetes-react/src/components/Pods/__fixtures__/crashing-pod.json
similarity index 100%
rename from plugins/kubernetes/src/components/Pods/__fixtures__/crashing-pod.json
rename to plugins/kubernetes-react/src/components/Pods/__fixtures__/crashing-pod.json
diff --git a/plugins/kubernetes/src/error-detection/__fixtures__/pod.json b/plugins/kubernetes-react/src/components/Pods/__fixtures__/pod.json
similarity index 100%
rename from plugins/kubernetes/src/error-detection/__fixtures__/pod.json
rename to plugins/kubernetes-react/src/components/Pods/__fixtures__/pod.json
diff --git a/plugins/kubernetes/src/components/Pods/index.ts b/plugins/kubernetes-react/src/components/Pods/index.ts
similarity index 94%
rename from plugins/kubernetes/src/components/Pods/index.ts
rename to plugins/kubernetes-react/src/components/Pods/index.ts
index c4282de53a..6297a0abce 100644
--- a/plugins/kubernetes/src/components/Pods/index.ts
+++ b/plugins/kubernetes-react/src/components/Pods/index.ts
@@ -18,5 +18,5 @@ export * from './PodLogs';
export * from './FixDialog';
export * from './Events';
export * from './ErrorList';
-export { PodsTable } from './PodsTable';
+export * from './PodsTable';
export * from './types';
diff --git a/plugins/kubernetes/src/components/Pods/types.ts b/plugins/kubernetes-react/src/components/Pods/types.ts
similarity index 92%
rename from plugins/kubernetes/src/components/Pods/types.ts
rename to plugins/kubernetes-react/src/components/Pods/types.ts
index 877df39c24..847e6d63bc 100644
--- a/plugins/kubernetes/src/components/Pods/types.ts
+++ b/plugins/kubernetes-react/src/components/Pods/types.ts
@@ -14,7 +14,7 @@
* limitations under the License.
*/
import { Pod } from 'kubernetes-models/v1';
-import { DetectedError } from '../../error-detection';
+import { DetectedError } from '@backstage/plugin-kubernetes-common';
/**
* Wraps a pod with the associated detected errors and cluster name
diff --git a/plugins/kubernetes/src/components/ResourceUtilization/ResourceUtilization.test.tsx b/plugins/kubernetes-react/src/components/ResourceUtilization/ResourceUtilization.test.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/ResourceUtilization/ResourceUtilization.test.tsx
rename to plugins/kubernetes-react/src/components/ResourceUtilization/ResourceUtilization.test.tsx
diff --git a/plugins/kubernetes/src/components/ResourceUtilization/ResourceUtilization.tsx b/plugins/kubernetes-react/src/components/ResourceUtilization/ResourceUtilization.tsx
similarity index 96%
rename from plugins/kubernetes/src/components/ResourceUtilization/ResourceUtilization.tsx
rename to plugins/kubernetes-react/src/components/ResourceUtilization/ResourceUtilization.tsx
index 75927958e6..15f906e469 100644
--- a/plugins/kubernetes/src/components/ResourceUtilization/ResourceUtilization.tsx
+++ b/plugins/kubernetes-react/src/components/ResourceUtilization/ResourceUtilization.tsx
@@ -32,8 +32,7 @@ export interface ResourceUtilizationProps {
totalFormatted: string;
}
-// Visible for testing
-export const getProgressColor: GaugePropsGetColor = ({
+const getProgressColor: GaugePropsGetColor = ({
palette,
value,
inverse,
diff --git a/plugins/kubernetes-react/src/components/ResourceUtilization/index.ts b/plugins/kubernetes-react/src/components/ResourceUtilization/index.ts
new file mode 100644
index 0000000000..088d78a40b
--- /dev/null
+++ b/plugins/kubernetes-react/src/components/ResourceUtilization/index.ts
@@ -0,0 +1,16 @@
+/*
+ * Copyright 2023 The Backstage Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+export * from './ResourceUtilization';
diff --git a/plugins/kubernetes/src/components/ServicesAccordions/ServiceDrawer.test.tsx b/plugins/kubernetes-react/src/components/ServicesAccordions/ServiceDrawer.test.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/ServicesAccordions/ServiceDrawer.test.tsx
rename to plugins/kubernetes-react/src/components/ServicesAccordions/ServiceDrawer.test.tsx
diff --git a/plugins/kubernetes/src/components/ServicesAccordions/ServiceDrawer.tsx b/plugins/kubernetes-react/src/components/ServicesAccordions/ServiceDrawer.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/ServicesAccordions/ServiceDrawer.tsx
rename to plugins/kubernetes-react/src/components/ServicesAccordions/ServiceDrawer.tsx
diff --git a/plugins/kubernetes/src/components/ServicesAccordions/ServicesAccordions.test.tsx b/plugins/kubernetes-react/src/components/ServicesAccordions/ServicesAccordions.test.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/ServicesAccordions/ServicesAccordions.test.tsx
rename to plugins/kubernetes-react/src/components/ServicesAccordions/ServicesAccordions.test.tsx
diff --git a/plugins/kubernetes/src/components/ServicesAccordions/ServicesAccordions.tsx b/plugins/kubernetes-react/src/components/ServicesAccordions/ServicesAccordions.tsx
similarity index 97%
rename from plugins/kubernetes/src/components/ServicesAccordions/ServicesAccordions.tsx
rename to plugins/kubernetes-react/src/components/ServicesAccordions/ServicesAccordions.tsx
index f0cb99ec9c..50d6ec6f3e 100644
--- a/plugins/kubernetes/src/components/ServicesAccordions/ServicesAccordions.tsx
+++ b/plugins/kubernetes-react/src/components/ServicesAccordions/ServicesAccordions.tsx
@@ -83,7 +83,12 @@ const ServiceCard = ({ service }: ServiceCardProps) => {
);
};
-type ServicesAccordionsProps = {};
+/**
+ *
+ *
+ * @public
+ */
+export type ServicesAccordionsProps = {};
type ServiceAccordionProps = {
service: V1Service;
@@ -102,6 +107,11 @@ const ServiceAccordion = ({ service }: ServiceAccordionProps) => {
);
};
+/**
+ *
+ *
+ * @public
+ */
export const ServicesAccordions = ({}: ServicesAccordionsProps) => {
const groupedResponses = useContext(GroupedResponsesContext);
return (
diff --git a/plugins/kubernetes/src/components/ServicesAccordions/__fixtures__/2-services.json b/plugins/kubernetes-react/src/components/ServicesAccordions/__fixtures__/2-services.json
similarity index 100%
rename from plugins/kubernetes/src/components/ServicesAccordions/__fixtures__/2-services.json
rename to plugins/kubernetes-react/src/components/ServicesAccordions/__fixtures__/2-services.json
diff --git a/plugins/kubernetes-react/src/components/ServicesAccordions/index.ts b/plugins/kubernetes-react/src/components/ServicesAccordions/index.ts
new file mode 100644
index 0000000000..db37d34b5f
--- /dev/null
+++ b/plugins/kubernetes-react/src/components/ServicesAccordions/index.ts
@@ -0,0 +1,16 @@
+/*
+ * Copyright 2020 The Backstage Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+export * from './ServicesAccordions';
diff --git a/plugins/kubernetes/src/components/StatefulSetsAccordions/StatefulSetDrawer.test.tsx b/plugins/kubernetes-react/src/components/StatefulSetsAccordions/StatefulSetDrawer.test.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/StatefulSetsAccordions/StatefulSetDrawer.test.tsx
rename to plugins/kubernetes-react/src/components/StatefulSetsAccordions/StatefulSetDrawer.test.tsx
diff --git a/plugins/kubernetes/src/components/StatefulSetsAccordions/StatefulSetDrawer.tsx b/plugins/kubernetes-react/src/components/StatefulSetsAccordions/StatefulSetDrawer.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/StatefulSetsAccordions/StatefulSetDrawer.tsx
rename to plugins/kubernetes-react/src/components/StatefulSetsAccordions/StatefulSetDrawer.tsx
diff --git a/plugins/kubernetes/src/components/StatefulSetsAccordions/StatefulSetsAccordions.test.tsx b/plugins/kubernetes-react/src/components/StatefulSetsAccordions/StatefulSetsAccordions.test.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/StatefulSetsAccordions/StatefulSetsAccordions.test.tsx
rename to plugins/kubernetes-react/src/components/StatefulSetsAccordions/StatefulSetsAccordions.test.tsx
diff --git a/plugins/kubernetes/src/components/StatefulSetsAccordions/StatefulSetsAccordions.tsx b/plugins/kubernetes-react/src/components/StatefulSetsAccordions/StatefulSetsAccordions.tsx
similarity index 100%
rename from plugins/kubernetes/src/components/StatefulSetsAccordions/StatefulSetsAccordions.tsx
rename to plugins/kubernetes-react/src/components/StatefulSetsAccordions/StatefulSetsAccordions.tsx
diff --git a/plugins/kubernetes/src/components/StatefulSetsAccordions/index.ts b/plugins/kubernetes-react/src/components/StatefulSetsAccordions/index.ts
similarity index 100%
rename from plugins/kubernetes/src/components/StatefulSetsAccordions/index.ts
rename to plugins/kubernetes-react/src/components/StatefulSetsAccordions/index.ts
diff --git a/plugins/kubernetes/src/components/index.ts b/plugins/kubernetes-react/src/components/index.ts
similarity index 96%
rename from plugins/kubernetes/src/components/index.ts
rename to plugins/kubernetes-react/src/components/index.ts
index 18b75247e5..d9cebe35a3 100644
--- a/plugins/kubernetes/src/components/index.ts
+++ b/plugins/kubernetes-react/src/components/index.ts
@@ -25,6 +25,5 @@ export * from './JobsAccordions';
export * from './KubernetesDrawer';
export * from './Pods';
export * from './ServicesAccordions';
-export * from './KubernetesContent';
export * from './ResourceUtilization';
export * from './PodExecTerminal';
diff --git a/plugins/kubernetes/src/hooks/Cluster.ts b/plugins/kubernetes-react/src/hooks/Cluster.ts
similarity index 97%
rename from plugins/kubernetes/src/hooks/Cluster.ts
rename to plugins/kubernetes-react/src/hooks/Cluster.ts
index e8d01c462c..ee950b7f4d 100644
--- a/plugins/kubernetes/src/hooks/Cluster.ts
+++ b/plugins/kubernetes-react/src/hooks/Cluster.ts
@@ -16,6 +16,9 @@
import React from 'react';
import { ClusterAttributes } from '@backstage/plugin-kubernetes-common';
+/**
+ * @public
+ */
export const ClusterContext = React.createContext({
name: '',
});
diff --git a/plugins/kubernetes/src/hooks/GroupedResponses.ts b/plugins/kubernetes-react/src/hooks/GroupedResponses.ts
similarity index 90%
rename from plugins/kubernetes/src/hooks/GroupedResponses.ts
rename to plugins/kubernetes-react/src/hooks/GroupedResponses.ts
index 8383c9e1d9..7a81a74337 100644
--- a/plugins/kubernetes/src/hooks/GroupedResponses.ts
+++ b/plugins/kubernetes-react/src/hooks/GroupedResponses.ts
@@ -14,8 +14,13 @@
* limitations under the License.
*/
import React from 'react';
-import { GroupedResponses } from '../types/types';
+import { GroupedResponses } from '@backstage/plugin-kubernetes-common';
+/**
+ *
+ *
+ * @public
+ */
export const GroupedResponsesContext = React.createContext({
pods: [],
replicaSets: [],
diff --git a/plugins/kubernetes/src/hooks/PodNamesWithErrors.ts b/plugins/kubernetes-react/src/hooks/PodNamesWithErrors.ts
similarity index 97%
rename from plugins/kubernetes/src/hooks/PodNamesWithErrors.ts
rename to plugins/kubernetes-react/src/hooks/PodNamesWithErrors.ts
index 7505da3fd2..001a40805f 100644
--- a/plugins/kubernetes/src/hooks/PodNamesWithErrors.ts
+++ b/plugins/kubernetes-react/src/hooks/PodNamesWithErrors.ts
@@ -15,6 +15,9 @@
*/
import React from 'react';
+/**
+ * @public
+ */
export const PodNamesWithErrorsContext = React.createContext>(
new Set(),
);
diff --git a/plugins/kubernetes/src/hooks/PodNamesWithMetrics.ts b/plugins/kubernetes-react/src/hooks/PodNamesWithMetrics.ts
similarity index 97%
rename from plugins/kubernetes/src/hooks/PodNamesWithMetrics.ts
rename to plugins/kubernetes-react/src/hooks/PodNamesWithMetrics.ts
index 0df42a8ab0..12da138cfb 100644
--- a/plugins/kubernetes/src/hooks/PodNamesWithMetrics.ts
+++ b/plugins/kubernetes-react/src/hooks/PodNamesWithMetrics.ts
@@ -16,8 +16,8 @@
import React from 'react';
import { ClientPodStatus } from '@backstage/plugin-kubernetes-common';
-/*
- * @deprecated
+/**
+ * @public
*/
export const PodNamesWithMetricsContext = React.createContext<
Map
diff --git a/plugins/kubernetes/src/hooks/__mocks__/useIsPodExecTerminalSupported.ts b/plugins/kubernetes-react/src/hooks/__mocks__/useIsPodExecTerminalSupported.ts
similarity index 100%
rename from plugins/kubernetes/src/hooks/__mocks__/useIsPodExecTerminalSupported.ts
rename to plugins/kubernetes-react/src/hooks/__mocks__/useIsPodExecTerminalSupported.ts
diff --git a/plugins/kubernetes/src/hooks/auth.test.ts b/plugins/kubernetes-react/src/hooks/auth.test.ts
similarity index 100%
rename from plugins/kubernetes/src/hooks/auth.test.ts
rename to plugins/kubernetes-react/src/hooks/auth.test.ts
diff --git a/plugins/kubernetes/src/hooks/auth.ts b/plugins/kubernetes-react/src/hooks/auth.ts
similarity index 98%
rename from plugins/kubernetes/src/hooks/auth.ts
rename to plugins/kubernetes-react/src/hooks/auth.ts
index cce0bc27d6..76e08f2783 100644
--- a/plugins/kubernetes/src/hooks/auth.ts
+++ b/plugins/kubernetes-react/src/hooks/auth.ts
@@ -15,9 +15,9 @@
*/
import { Entity } from '@backstage/catalog-model';
-import { KubernetesApi } from '../api/types';
-import { KubernetesAuthProvidersApi } from '../kubernetes-auth-provider/types';
import { KubernetesRequestBody } from '@backstage/plugin-kubernetes-common';
+import { KubernetesAuthProvidersApi } from '../kubernetes-auth-provider';
+import { KubernetesApi } from '../api/types';
export const generateAuth = async (
entity: Entity,
diff --git a/plugins/kubernetes/src/hooks/index.ts b/plugins/kubernetes-react/src/hooks/index.ts
similarity index 100%
rename from plugins/kubernetes/src/hooks/index.ts
rename to plugins/kubernetes-react/src/hooks/index.ts
diff --git a/plugins/kubernetes/src/hooks/test-utils.tsx b/plugins/kubernetes-react/src/hooks/test-utils.tsx
similarity index 100%
rename from plugins/kubernetes/src/hooks/test-utils.tsx
rename to plugins/kubernetes-react/src/hooks/test-utils.tsx
diff --git a/plugins/kubernetes/src/hooks/types.ts b/plugins/kubernetes-react/src/hooks/types.ts
similarity index 100%
rename from plugins/kubernetes/src/hooks/types.ts
rename to plugins/kubernetes-react/src/hooks/types.ts
diff --git a/plugins/kubernetes/src/hooks/useCustomResources.test.ts b/plugins/kubernetes-react/src/hooks/useCustomResources.test.ts
similarity index 100%
rename from plugins/kubernetes/src/hooks/useCustomResources.test.ts
rename to plugins/kubernetes-react/src/hooks/useCustomResources.test.ts
diff --git a/plugins/kubernetes/src/hooks/useCustomResources.ts b/plugins/kubernetes-react/src/hooks/useCustomResources.ts
similarity index 99%
rename from plugins/kubernetes/src/hooks/useCustomResources.ts
rename to plugins/kubernetes-react/src/hooks/useCustomResources.ts
index c53e00d81c..4faeb48894 100644
--- a/plugins/kubernetes/src/hooks/useCustomResources.ts
+++ b/plugins/kubernetes-react/src/hooks/useCustomResources.ts
@@ -15,8 +15,6 @@
*/
import { Entity } from '@backstage/catalog-model';
-import { kubernetesApiRef } from '../api/types';
-import { kubernetesAuthProvidersApiRef } from '../kubernetes-auth-provider/types';
import { useCallback } from 'react';
import useInterval from 'react-use/lib/useInterval';
import {
@@ -27,6 +25,8 @@ import { useApi } from '@backstage/core-plugin-api';
import { KubernetesObjects } from './useKubernetesObjects';
import { generateAuth } from './auth';
import useAsyncRetry from 'react-use/lib/useAsyncRetry';
+import { kubernetesAuthProvidersApiRef } from '../kubernetes-auth-provider';
+import { kubernetesApiRef } from '../api/types';
/**
* Retrieves the provided custom resources related to the provided entity, refreshes at an interval.
diff --git a/plugins/kubernetes/src/hooks/useIsPodExecTerminalSupported.test.ts b/plugins/kubernetes-react/src/hooks/useIsPodExecTerminalSupported.test.ts
similarity index 100%
rename from plugins/kubernetes/src/hooks/useIsPodExecTerminalSupported.test.ts
rename to plugins/kubernetes-react/src/hooks/useIsPodExecTerminalSupported.test.ts
diff --git a/plugins/kubernetes/src/hooks/useIsPodExecTerminalSupported.ts b/plugins/kubernetes-react/src/hooks/useIsPodExecTerminalSupported.ts
similarity index 96%
rename from plugins/kubernetes/src/hooks/useIsPodExecTerminalSupported.ts
rename to plugins/kubernetes-react/src/hooks/useIsPodExecTerminalSupported.ts
index 17f64bf0dd..e881951059 100644
--- a/plugins/kubernetes/src/hooks/useIsPodExecTerminalSupported.ts
+++ b/plugins/kubernetes-react/src/hooks/useIsPodExecTerminalSupported.ts
@@ -15,8 +15,7 @@
*/
import { useApi } from '@backstage/core-plugin-api';
import useAsync, { AsyncState } from 'react-use/lib/useAsync';
-
-import { kubernetesApiRef } from '../api';
+import { kubernetesApiRef } from '../api/types';
/**
* Check if conditions for a pod exec call through the proxy endpoint are met
diff --git a/plugins/kubernetes/src/hooks/useKubernetesObjects.test.ts b/plugins/kubernetes-react/src/hooks/useKubernetesObjects.test.ts
similarity index 100%
rename from plugins/kubernetes/src/hooks/useKubernetesObjects.test.ts
rename to plugins/kubernetes-react/src/hooks/useKubernetesObjects.test.ts
diff --git a/plugins/kubernetes/src/hooks/useKubernetesObjects.ts b/plugins/kubernetes-react/src/hooks/useKubernetesObjects.ts
similarity index 97%
rename from plugins/kubernetes/src/hooks/useKubernetesObjects.ts
rename to plugins/kubernetes-react/src/hooks/useKubernetesObjects.ts
index aad2f48fd3..f2b8de3cc6 100644
--- a/plugins/kubernetes/src/hooks/useKubernetesObjects.ts
+++ b/plugins/kubernetes-react/src/hooks/useKubernetesObjects.ts
@@ -15,21 +15,29 @@
*/
import { Entity } from '@backstage/catalog-model';
-import { kubernetesApiRef } from '../api/types';
-import { kubernetesAuthProvidersApiRef } from '../kubernetes-auth-provider/types';
import { useCallback } from 'react';
import useInterval from 'react-use/lib/useInterval';
import { ObjectsByEntityResponse } from '@backstage/plugin-kubernetes-common';
import { useApi } from '@backstage/core-plugin-api';
import { generateAuth } from './auth';
import useAsyncRetry from 'react-use/lib/useAsyncRetry';
+import { kubernetesAuthProvidersApiRef } from '../kubernetes-auth-provider';
+import { kubernetesApiRef } from '../api/types';
+/**
+ *
+ * @public
+ */
export interface KubernetesObjects {
kubernetesObjects?: ObjectsByEntityResponse;
loading: boolean;
error?: string;
}
+/**
+ *
+ * @public
+ */
export const useKubernetesObjects = (
entity: Entity,
intervalMs: number = 10000,
diff --git a/plugins/kubernetes/src/hooks/useMatchingErrors.test.tsx b/plugins/kubernetes-react/src/hooks/useMatchingErrors.test.tsx
similarity index 95%
rename from plugins/kubernetes/src/hooks/useMatchingErrors.test.tsx
rename to plugins/kubernetes-react/src/hooks/useMatchingErrors.test.tsx
index 4ed4dbd73c..4d817e838d 100644
--- a/plugins/kubernetes/src/hooks/useMatchingErrors.test.tsx
+++ b/plugins/kubernetes-react/src/hooks/useMatchingErrors.test.tsx
@@ -16,8 +16,10 @@
import React from 'react';
import { renderHook } from '@testing-library/react-hooks';
import { DetectedErrorsContext, useMatchingErrors } from './useMatchingErrors';
-import { DetectedError } from '../error-detection';
-import { ResourceRef } from '../error-detection/types';
+import {
+ DetectedError,
+ ResourceRef,
+} from '@backstage/plugin-kubernetes-common';
const genericErrorWithRef = (resourceRef: ResourceRef): DetectedError => {
return {
diff --git a/plugins/kubernetes/src/hooks/useMatchingErrors.ts b/plugins/kubernetes-react/src/hooks/useMatchingErrors.ts
similarity index 95%
rename from plugins/kubernetes/src/hooks/useMatchingErrors.ts
rename to plugins/kubernetes-react/src/hooks/useMatchingErrors.ts
index aa90d52cbb..1975065b7b 100644
--- a/plugins/kubernetes/src/hooks/useMatchingErrors.ts
+++ b/plugins/kubernetes-react/src/hooks/useMatchingErrors.ts
@@ -14,7 +14,10 @@
* limitations under the License.
*/
import React, { useContext } from 'react';
-import { DetectedError, ResourceRef } from '../error-detection/types';
+import {
+ DetectedError,
+ ResourceRef,
+} from '@backstage/plugin-kubernetes-common';
import { TypeMeta } from '@kubernetes-models/base';
import { IIoK8sApimachineryPkgApisMetaV1ObjectMeta as V1ObjectMeta } from '@kubernetes-models/apimachinery/apis/meta/v1/ObjectMeta';
diff --git a/plugins/kubernetes/src/hooks/usePodMetrics.test.tsx b/plugins/kubernetes-react/src/hooks/usePodMetrics.test.tsx
similarity index 100%
rename from plugins/kubernetes/src/hooks/usePodMetrics.test.tsx
rename to plugins/kubernetes-react/src/hooks/usePodMetrics.test.tsx
diff --git a/plugins/kubernetes/src/hooks/usePodMetrics.ts b/plugins/kubernetes-react/src/hooks/usePodMetrics.ts
similarity index 99%
rename from plugins/kubernetes/src/hooks/usePodMetrics.ts
rename to plugins/kubernetes-react/src/hooks/usePodMetrics.ts
index 4392487cac..6d3c52690f 100644
--- a/plugins/kubernetes/src/hooks/usePodMetrics.ts
+++ b/plugins/kubernetes-react/src/hooks/usePodMetrics.ts
@@ -26,8 +26,8 @@ export const PodMetricsContext = React.createContext<
Map
>(new Map());
-/*
- * @alpha
+/**
+ * @public
*/
export type PodMetricsMatcher = {
metadata?: IObjectMeta;
diff --git a/plugins/catalog/src/options.ts b/plugins/kubernetes-react/src/index.ts
similarity index 61%
rename from plugins/catalog/src/options.ts
rename to plugins/kubernetes-react/src/index.ts
index 4ea6449a4b..e5c84eab79 100644
--- a/plugins/catalog/src/options.ts
+++ b/plugins/kubernetes-react/src/index.ts
@@ -1,5 +1,5 @@
/*
- * Copyright 2020 The Backstage Authors
+ * Copyright 2023 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,16 +14,16 @@
* limitations under the License.
*/
-import { usePluginOptions } from '@backstage/core-plugin-api/alpha';
+/**
+ * Web library for the kubernetes-react plugin.
+ *
+ * @packageDocumentation
+ */
-export type CatalogPluginOptions = {
- createButtonTitle: string;
-};
+// In this package you might for example export components or hooks
+// that are useful to other plugins or modules.
-/** @ignore */
-export type CatalogInputPluginOptions = {
- createButtonTitle: string;
-};
-
-export const useCatalogPluginOptions = () =>
- usePluginOptions();
+export * from './hooks';
+export * from './api';
+export * from './kubernetes-auth-provider';
+export * from './components';
diff --git a/plugins/kubernetes/src/kubernetes-auth-provider/AksKubernetesAuthProvider.ts b/plugins/kubernetes-react/src/kubernetes-auth-provider/AksKubernetesAuthProvider.ts
similarity index 98%
rename from plugins/kubernetes/src/kubernetes-auth-provider/AksKubernetesAuthProvider.ts
rename to plugins/kubernetes-react/src/kubernetes-auth-provider/AksKubernetesAuthProvider.ts
index 401fc1e127..34a83dfed3 100644
--- a/plugins/kubernetes/src/kubernetes-auth-provider/AksKubernetesAuthProvider.ts
+++ b/plugins/kubernetes-react/src/kubernetes-auth-provider/AksKubernetesAuthProvider.ts
@@ -17,6 +17,7 @@ import { OAuthApi } from '@backstage/core-plugin-api';
import { KubernetesRequestBody } from '@backstage/plugin-kubernetes-common';
import { KubernetesAuthProvider } from './types';
+/** @public */
export class AksKubernetesAuthProvider implements KubernetesAuthProvider {
constructor(private readonly microsoftAuthApi: OAuthApi) {}
diff --git a/plugins/kubernetes/src/kubernetes-auth-provider/GoogleKubernetesAuthProvider.ts b/plugins/kubernetes-react/src/kubernetes-auth-provider/GoogleKubernetesAuthProvider.ts
similarity index 99%
rename from plugins/kubernetes/src/kubernetes-auth-provider/GoogleKubernetesAuthProvider.ts
rename to plugins/kubernetes-react/src/kubernetes-auth-provider/GoogleKubernetesAuthProvider.ts
index fbce644a89..9d7259b70e 100644
--- a/plugins/kubernetes/src/kubernetes-auth-provider/GoogleKubernetesAuthProvider.ts
+++ b/plugins/kubernetes-react/src/kubernetes-auth-provider/GoogleKubernetesAuthProvider.ts
@@ -18,6 +18,7 @@ import { KubernetesAuthProvider } from './types';
import { KubernetesRequestBody } from '@backstage/plugin-kubernetes-common';
import { OAuthApi } from '@backstage/core-plugin-api';
+/** @public */
export class GoogleKubernetesAuthProvider implements KubernetesAuthProvider {
authProvider: OAuthApi;
diff --git a/plugins/kubernetes/src/kubernetes-auth-provider/KubernetesAuthProviders.test.ts b/plugins/kubernetes-react/src/kubernetes-auth-provider/KubernetesAuthProviders.test.ts
similarity index 100%
rename from plugins/kubernetes/src/kubernetes-auth-provider/KubernetesAuthProviders.test.ts
rename to plugins/kubernetes-react/src/kubernetes-auth-provider/KubernetesAuthProviders.test.ts
diff --git a/plugins/kubernetes/src/kubernetes-auth-provider/KubernetesAuthProviders.ts b/plugins/kubernetes-react/src/kubernetes-auth-provider/KubernetesAuthProviders.ts
similarity index 99%
rename from plugins/kubernetes/src/kubernetes-auth-provider/KubernetesAuthProviders.ts
rename to plugins/kubernetes-react/src/kubernetes-auth-provider/KubernetesAuthProviders.ts
index 84154d5e96..77a7b156d7 100644
--- a/plugins/kubernetes/src/kubernetes-auth-provider/KubernetesAuthProviders.ts
+++ b/plugins/kubernetes-react/src/kubernetes-auth-provider/KubernetesAuthProviders.ts
@@ -22,6 +22,7 @@ import { OAuthApi, OpenIdConnectApi } from '@backstage/core-plugin-api';
import { OidcKubernetesAuthProvider } from './OidcKubernetesAuthProvider';
import { AksKubernetesAuthProvider } from './AksKubernetesAuthProvider';
+/** @public */
export class KubernetesAuthProviders implements KubernetesAuthProvidersApi {
private readonly kubernetesAuthProviderMap: Map<
string,
diff --git a/plugins/kubernetes/src/kubernetes-auth-provider/OidcKubernetesAuthProvider.ts b/plugins/kubernetes-react/src/kubernetes-auth-provider/OidcKubernetesAuthProvider.ts
similarity index 99%
rename from plugins/kubernetes/src/kubernetes-auth-provider/OidcKubernetesAuthProvider.ts
rename to plugins/kubernetes-react/src/kubernetes-auth-provider/OidcKubernetesAuthProvider.ts
index b2e6c5cbc2..c117200f56 100644
--- a/plugins/kubernetes/src/kubernetes-auth-provider/OidcKubernetesAuthProvider.ts
+++ b/plugins/kubernetes-react/src/kubernetes-auth-provider/OidcKubernetesAuthProvider.ts
@@ -19,6 +19,7 @@ import { KubernetesRequestBody } from '@backstage/plugin-kubernetes-common';
import { OpenIdConnectApi } from '@backstage/core-plugin-api';
import { KubernetesAuthProvider } from './types';
+/** @public */
export class OidcKubernetesAuthProvider implements KubernetesAuthProvider {
providerName: string;
authProvider: OpenIdConnectApi;
diff --git a/plugins/kubernetes/src/kubernetes-auth-provider/ServerSideAuthProvider.ts b/plugins/kubernetes-react/src/kubernetes-auth-provider/ServerSideAuthProvider.ts
similarity index 100%
rename from plugins/kubernetes/src/kubernetes-auth-provider/ServerSideAuthProvider.ts
rename to plugins/kubernetes-react/src/kubernetes-auth-provider/ServerSideAuthProvider.ts
diff --git a/packages/core-plugin-api/src/plugin-options/index.ts b/plugins/kubernetes-react/src/kubernetes-auth-provider/index.ts
similarity index 70%
rename from packages/core-plugin-api/src/plugin-options/index.ts
rename to plugins/kubernetes-react/src/kubernetes-auth-provider/index.ts
index 1737a1c836..5ab8b0be43 100644
--- a/packages/core-plugin-api/src/plugin-options/index.ts
+++ b/plugins/kubernetes-react/src/kubernetes-auth-provider/index.ts
@@ -14,5 +14,9 @@
* limitations under the License.
*/
-export { usePluginOptions, PluginProvider } from './usePluginOptions';
-export type { PluginOptionsProviderProps } from './usePluginOptions';
+export * from './types';
+export * from './KubernetesAuthProviders';
+export * from './GoogleKubernetesAuthProvider';
+export * from './ServerSideAuthProvider';
+export * from './OidcKubernetesAuthProvider';
+export * from './AksKubernetesAuthProvider';
diff --git a/plugins/kubernetes/src/kubernetes-auth-provider/types.ts b/plugins/kubernetes-react/src/kubernetes-auth-provider/types.ts
similarity index 96%
rename from plugins/kubernetes/src/kubernetes-auth-provider/types.ts
rename to plugins/kubernetes-react/src/kubernetes-auth-provider/types.ts
index 418758dd31..adf323d1d8 100644
--- a/plugins/kubernetes/src/kubernetes-auth-provider/types.ts
+++ b/plugins/kubernetes-react/src/kubernetes-auth-provider/types.ts
@@ -17,6 +17,7 @@
import { KubernetesRequestBody } from '@backstage/plugin-kubernetes-common';
import { createApiRef } from '@backstage/core-plugin-api';
+/** @public */
export interface KubernetesAuthProvider {
decorateRequestBodyForAuth(
requestBody: KubernetesRequestBody,
@@ -24,11 +25,13 @@ export interface KubernetesAuthProvider {
getCredentials(): Promise<{ token?: string }>;
}
+/** @public */
export const kubernetesAuthProvidersApiRef =
createApiRef({
id: 'plugin.kubernetes-auth-providers.service',
});
+/** @public */
export interface KubernetesAuthProvidersApi {
decorateRequestBodyForAuth(
authProvider: string,
diff --git a/plugins/kubernetes-react/src/setupTests.ts b/plugins/kubernetes-react/src/setupTests.ts
new file mode 100644
index 0000000000..865308e634
--- /dev/null
+++ b/plugins/kubernetes-react/src/setupTests.ts
@@ -0,0 +1,16 @@
+/*
+ * Copyright 2023 The Backstage Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import '@testing-library/jest-dom';
diff --git a/plugins/kubernetes/src/types/index.ts b/plugins/kubernetes-react/src/types/index.ts
similarity index 100%
rename from plugins/kubernetes/src/types/index.ts
rename to plugins/kubernetes-react/src/types/index.ts
diff --git a/packages/techdocs-cli-embedded-app/cypress/integration/app.js b/plugins/kubernetes-react/src/types/types.ts
similarity index 68%
rename from packages/techdocs-cli-embedded-app/cypress/integration/app.js
rename to plugins/kubernetes-react/src/types/types.ts
index d31f7a7964..7efd1ef3ff 100644
--- a/packages/techdocs-cli-embedded-app/cypress/integration/app.js
+++ b/plugins/kubernetes-react/src/types/types.ts
@@ -14,9 +14,15 @@
* limitations under the License.
*/
-describe('App', () => {
- it('should render the catalog', () => {
- cy.visit('/');
- cy.contains('My Company Service Catalog');
- });
-});
+import type { JsonObject } from '@backstage/types';
+
+export interface ClusterLinksFormatterOptions {
+ dashboardUrl?: URL;
+ dashboardParameters?: JsonObject;
+ object: any;
+ kind: string;
+}
+
+export type ClusterLinksFormatter = (
+ options: ClusterLinksFormatterOptions,
+) => URL;
diff --git a/plugins/kubernetes/src/utils/clusterLinks/formatClusterLink.test.ts b/plugins/kubernetes-react/src/utils/clusterLinks/formatClusterLink.test.ts
similarity index 100%
rename from plugins/kubernetes/src/utils/clusterLinks/formatClusterLink.test.ts
rename to plugins/kubernetes-react/src/utils/clusterLinks/formatClusterLink.test.ts
diff --git a/plugins/kubernetes/src/utils/clusterLinks/formatClusterLink.ts b/plugins/kubernetes-react/src/utils/clusterLinks/formatClusterLink.ts
similarity index 90%
rename from plugins/kubernetes/src/utils/clusterLinks/formatClusterLink.ts
rename to plugins/kubernetes-react/src/utils/clusterLinks/formatClusterLink.ts
index 6a998bbce2..ae3bdb950f 100644
--- a/plugins/kubernetes/src/utils/clusterLinks/formatClusterLink.ts
+++ b/plugins/kubernetes-react/src/utils/clusterLinks/formatClusterLink.ts
@@ -17,6 +17,7 @@
import type { JsonObject } from '@backstage/types';
import { defaultFormatterName, clusterLinksFormatters } from './formatters';
+// @Deprecated use import { FormatClusterLinkOptions } from '@backstage/kubernetes-react'
export type FormatClusterLinkOptions = {
dashboardUrl?: string;
dashboardApp?: string;
@@ -25,6 +26,7 @@ export type FormatClusterLinkOptions = {
kind: string;
};
+// @Deprecated use import { formatClusterLink } from '@backstage/kubernetes-react'
export function formatClusterLink(options: FormatClusterLinkOptions) {
if (!options.dashboardUrl && !options.dashboardParameters) {
return undefined;
diff --git a/plugins/kubernetes/src/utils/clusterLinks/formatters/aks.test.ts b/plugins/kubernetes-react/src/utils/clusterLinks/formatters/aks.test.ts
similarity index 100%
rename from plugins/kubernetes/src/utils/clusterLinks/formatters/aks.test.ts
rename to plugins/kubernetes-react/src/utils/clusterLinks/formatters/aks.test.ts
diff --git a/plugins/kubernetes/src/utils/clusterLinks/formatters/aks.ts b/plugins/kubernetes-react/src/utils/clusterLinks/formatters/aks.ts
similarity index 100%
rename from plugins/kubernetes/src/utils/clusterLinks/formatters/aks.ts
rename to plugins/kubernetes-react/src/utils/clusterLinks/formatters/aks.ts
diff --git a/plugins/kubernetes/src/utils/clusterLinks/formatters/eks.test.ts b/plugins/kubernetes-react/src/utils/clusterLinks/formatters/eks.test.ts
similarity index 100%
rename from plugins/kubernetes/src/utils/clusterLinks/formatters/eks.test.ts
rename to plugins/kubernetes-react/src/utils/clusterLinks/formatters/eks.test.ts
diff --git a/plugins/kubernetes/src/utils/clusterLinks/formatters/eks.ts b/plugins/kubernetes-react/src/utils/clusterLinks/formatters/eks.ts
similarity index 100%
rename from plugins/kubernetes/src/utils/clusterLinks/formatters/eks.ts
rename to plugins/kubernetes-react/src/utils/clusterLinks/formatters/eks.ts
diff --git a/plugins/kubernetes/src/utils/clusterLinks/formatters/gke.test.ts b/plugins/kubernetes-react/src/utils/clusterLinks/formatters/gke.test.ts
similarity index 100%
rename from plugins/kubernetes/src/utils/clusterLinks/formatters/gke.test.ts
rename to plugins/kubernetes-react/src/utils/clusterLinks/formatters/gke.test.ts
diff --git a/plugins/kubernetes/src/utils/clusterLinks/formatters/gke.ts b/plugins/kubernetes-react/src/utils/clusterLinks/formatters/gke.ts
similarity index 100%
rename from plugins/kubernetes/src/utils/clusterLinks/formatters/gke.ts
rename to plugins/kubernetes-react/src/utils/clusterLinks/formatters/gke.ts
diff --git a/plugins/kubernetes/src/utils/clusterLinks/formatters/index.ts b/plugins/kubernetes-react/src/utils/clusterLinks/formatters/index.ts
similarity index 100%
rename from plugins/kubernetes/src/utils/clusterLinks/formatters/index.ts
rename to plugins/kubernetes-react/src/utils/clusterLinks/formatters/index.ts
diff --git a/plugins/kubernetes/src/utils/clusterLinks/formatters/openshift.test.ts b/plugins/kubernetes-react/src/utils/clusterLinks/formatters/openshift.test.ts
similarity index 100%
rename from plugins/kubernetes/src/utils/clusterLinks/formatters/openshift.test.ts
rename to plugins/kubernetes-react/src/utils/clusterLinks/formatters/openshift.test.ts
diff --git a/plugins/kubernetes/src/utils/clusterLinks/formatters/openshift.ts b/plugins/kubernetes-react/src/utils/clusterLinks/formatters/openshift.ts
similarity index 100%
rename from plugins/kubernetes/src/utils/clusterLinks/formatters/openshift.ts
rename to plugins/kubernetes-react/src/utils/clusterLinks/formatters/openshift.ts
diff --git a/plugins/kubernetes/src/utils/clusterLinks/formatters/rancher.test.ts b/plugins/kubernetes-react/src/utils/clusterLinks/formatters/rancher.test.ts
similarity index 100%
rename from plugins/kubernetes/src/utils/clusterLinks/formatters/rancher.test.ts
rename to plugins/kubernetes-react/src/utils/clusterLinks/formatters/rancher.test.ts
diff --git a/plugins/kubernetes/src/utils/clusterLinks/formatters/rancher.ts b/plugins/kubernetes-react/src/utils/clusterLinks/formatters/rancher.ts
similarity index 100%
rename from plugins/kubernetes/src/utils/clusterLinks/formatters/rancher.ts
rename to plugins/kubernetes-react/src/utils/clusterLinks/formatters/rancher.ts
diff --git a/plugins/kubernetes/src/utils/clusterLinks/formatters/standard.test.ts b/plugins/kubernetes-react/src/utils/clusterLinks/formatters/standard.test.ts
similarity index 100%
rename from plugins/kubernetes/src/utils/clusterLinks/formatters/standard.test.ts
rename to plugins/kubernetes-react/src/utils/clusterLinks/formatters/standard.test.ts
diff --git a/plugins/kubernetes/src/utils/clusterLinks/formatters/standard.ts b/plugins/kubernetes-react/src/utils/clusterLinks/formatters/standard.ts
similarity index 100%
rename from plugins/kubernetes/src/utils/clusterLinks/formatters/standard.ts
rename to plugins/kubernetes-react/src/utils/clusterLinks/formatters/standard.ts
diff --git a/plugins/kubernetes/src/utils/clusterLinks/index.ts b/plugins/kubernetes-react/src/utils/clusterLinks/index.ts
similarity index 100%
rename from plugins/kubernetes/src/utils/clusterLinks/index.ts
rename to plugins/kubernetes-react/src/utils/clusterLinks/index.ts
diff --git a/plugins/kubernetes/src/utils/crons.test.ts b/plugins/kubernetes-react/src/utils/crons.test.ts
similarity index 100%
rename from plugins/kubernetes/src/utils/crons.test.ts
rename to plugins/kubernetes-react/src/utils/crons.test.ts
diff --git a/plugins/kubernetes/src/utils/crons.ts b/plugins/kubernetes-react/src/utils/crons.ts
similarity index 100%
rename from plugins/kubernetes/src/utils/crons.ts
rename to plugins/kubernetes-react/src/utils/crons.ts
diff --git a/plugins/kubernetes/src/utils/index.ts b/plugins/kubernetes-react/src/utils/index.ts
similarity index 100%
rename from plugins/kubernetes/src/utils/index.ts
rename to plugins/kubernetes-react/src/utils/index.ts
diff --git a/plugins/kubernetes/src/utils/owner.test.ts b/plugins/kubernetes-react/src/utils/owner.test.ts
similarity index 100%
rename from plugins/kubernetes/src/utils/owner.test.ts
rename to plugins/kubernetes-react/src/utils/owner.test.ts
diff --git a/plugins/kubernetes/src/utils/owner.ts b/plugins/kubernetes-react/src/utils/owner.ts
similarity index 100%
rename from plugins/kubernetes/src/utils/owner.ts
rename to plugins/kubernetes-react/src/utils/owner.ts
diff --git a/plugins/kubernetes/src/utils/pod.test.tsx b/plugins/kubernetes-react/src/utils/pod.test.tsx
similarity index 100%
rename from plugins/kubernetes/src/utils/pod.test.tsx
rename to plugins/kubernetes-react/src/utils/pod.test.tsx
diff --git a/plugins/kubernetes/src/utils/pod.tsx b/plugins/kubernetes-react/src/utils/pod.tsx
similarity index 100%
rename from plugins/kubernetes/src/utils/pod.tsx
rename to plugins/kubernetes-react/src/utils/pod.tsx
diff --git a/plugins/kubernetes/src/utils/resources.ts b/plugins/kubernetes-react/src/utils/resources.ts
similarity index 100%
rename from plugins/kubernetes/src/utils/resources.ts
rename to plugins/kubernetes-react/src/utils/resources.ts
diff --git a/plugins/kubernetes/CHANGELOG.md b/plugins/kubernetes/CHANGELOG.md
index 3bc309c060..451825ca33 100644
--- a/plugins/kubernetes/CHANGELOG.md
+++ b/plugins/kubernetes/CHANGELOG.md
@@ -1,5 +1,20 @@
# @backstage/plugin-kubernetes
+## 0.10.4-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/config@1.1.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-kubernetes-common@0.6.6
+
## 0.10.3
### Patch Changes
diff --git a/plugins/kubernetes/api-report.md b/plugins/kubernetes/api-report.md
index 77ec8dd19c..64b56cf786 100644
--- a/plugins/kubernetes/api-report.md
+++ b/plugins/kubernetes/api-report.md
@@ -5,162 +5,10 @@
```ts
///
-import { ApiRef } from '@backstage/core-plugin-api';
-import { AsyncState } from 'react-use/lib/useAsyncFn';
import { BackstagePlugin } from '@backstage/core-plugin-api';
-import { ClientContainerStatus } from '@backstage/plugin-kubernetes-common';
-import { ClientPodStatus } from '@backstage/plugin-kubernetes-common';
-import { ClusterAttributes } from '@backstage/plugin-kubernetes-common';
-import { ClusterObjects } from '@backstage/plugin-kubernetes-common';
-import { CustomObjectsByEntityRequest } from '@backstage/plugin-kubernetes-common';
-import { CustomResourceMatcher } from '@backstage/plugin-kubernetes-common';
-import { DiscoveryApi } from '@backstage/core-plugin-api';
import { Entity } from '@backstage/catalog-model';
-import { Event as Event_2 } from 'kubernetes-models/v1';
-import { IContainer } from 'kubernetes-models/v1';
-import { IContainerStatus } from 'kubernetes-models/v1';
-import { IdentityApi } from '@backstage/core-plugin-api';
-import { IIoK8sApimachineryPkgApisMetaV1ObjectMeta } from '@kubernetes-models/apimachinery/apis/meta/v1/ObjectMeta';
-import { IObjectMeta } from '@kubernetes-models/apimachinery/apis/meta/v1/ObjectMeta';
-import type { JsonObject } from '@backstage/types';
-import { KubernetesRequestBody } from '@backstage/plugin-kubernetes-common';
-import { OAuthApi } from '@backstage/core-plugin-api';
-import { ObjectsByEntityResponse } from '@backstage/plugin-kubernetes-common';
-import { OpenIdConnectApi } from '@backstage/core-plugin-api';
-import { Pod } from 'kubernetes-models/v1/Pod';
-import { Pod as Pod_2 } from 'kubernetes-models/v1';
import { default as React_2 } from 'react';
-import * as React_3 from 'react';
import { RouteRef } from '@backstage/core-plugin-api';
-import { TypeMeta } from '@kubernetes-models/base';
-import { V1ConfigMap } from '@kubernetes/client-node';
-import { V1CronJob } from '@kubernetes/client-node';
-import { V1Deployment } from '@kubernetes/client-node';
-import { V1HorizontalPodAutoscaler } from '@kubernetes/client-node';
-import { V1Ingress } from '@kubernetes/client-node';
-import { V1Job } from '@kubernetes/client-node';
-import { V1ObjectMeta } from '@kubernetes/client-node';
-import { V1Pod } from '@kubernetes/client-node';
-import { V1ReplicaSet } from '@kubernetes/client-node';
-import { V1Service } from '@kubernetes/client-node';
-import { V1StatefulSet } from '@kubernetes/client-node';
-import { WorkloadsByEntityRequest } from '@backstage/plugin-kubernetes-common';
-
-// Warning: (ae-forgotten-export) The symbol "ClusterProps" needs to be exported by the entry point index.d.ts
-// Warning: (ae-missing-release-tag) "Cluster" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
-//
-// @public (undocumented)
-export const Cluster: ({
- clusterObjects,
- podsWithErrors,
-}: ClusterProps) => React_2.JSX.Element;
-
-// Warning: (ae-missing-release-tag) "ClusterContext" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
-//
-// @public (undocumented)
-export const ClusterContext: React_2.Context;
-
-// Warning: (ae-missing-release-tag) "ClusterLinksFormatter" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
-//
-// @public (undocumented)
-export type ClusterLinksFormatter = (
- options: ClusterLinksFormatterOptions,
-) => URL;
-
-// Warning: (ae-missing-release-tag) "ClusterLinksFormatterOptions" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
-//
-// @public (undocumented)
-export interface ClusterLinksFormatterOptions {
- // (undocumented)
- dashboardParameters?: JsonObject;
- // (undocumented)
- dashboardUrl?: URL;
- // (undocumented)
- kind: string;
- // (undocumented)
- object: any;
-}
-
-// Warning: (ae-missing-release-tag) "clusterLinksFormatters" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
-//
-// @public (undocumented)
-export const clusterLinksFormatters: Record;
-
-// @public
-export const ContainerCard: React_2.FC;
-
-// @public
-export interface ContainerCardProps {
- // (undocumented)
- containerMetrics?: ClientContainerStatus;
- // (undocumented)
- containerSpec?: IContainer;
- // (undocumented)
- containerStatus: IContainerStatus;
- // (undocumented)
- podScope: PodScope;
-}
-
-// @public
-export interface ContainerScope extends PodScope {
- // (undocumented)
- containerName: string;
-}
-
-// Warning: (ae-forgotten-export) The symbol "CronJobsAccordionsProps" needs to be exported by the entry point index.d.ts
-// Warning: (ae-missing-release-tag) "CronJobsAccordions" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
-//
-// @public (undocumented)
-export const CronJobsAccordions: ({}: CronJobsAccordionsProps) => React_2.JSX.Element;
-
-// Warning: (ae-forgotten-export) The symbol "CustomResourcesProps" needs to be exported by the entry point index.d.ts
-// Warning: (ae-missing-release-tag) "CustomResources" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
-//
-// @public (undocumented)
-export const CustomResources: ({}: CustomResourcesProps) => React_2.JSX.Element;
-
-// Warning: (ae-missing-release-tag) "DeploymentResources" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
-//
-// @public (undocumented)
-export interface DeploymentResources {
- // (undocumented)
- deployments: V1Deployment[];
- // (undocumented)
- horizontalPodAutoscalers: V1HorizontalPodAutoscaler[];
- // (undocumented)
- pods: V1Pod[];
- // (undocumented)
- replicaSets: V1ReplicaSet[];
-}
-
-// @public
-export interface DetectedError {
- // (undocumented)
- message: string;
- // (undocumented)
- occurrenceCount: number;
- // Warning: (ae-forgotten-export) The symbol "ProposedFix" needs to be exported by the entry point index.d.ts
- //
- // (undocumented)
- proposedFix?: ProposedFix;
- // (undocumented)
- severity: ErrorSeverity;
- // (undocumented)
- sourceRef: ResourceRef;
- // (undocumented)
- type: string;
-}
-
-// @public
-export type DetectedErrorsByCluster = Map;
-
-// @public
-export const DetectedErrorsContext: React_2.Context;
-
-// @public
-export const detectErrors: (
- objects: ObjectsByEntityResponse,
-) => DetectedErrorsByCluster;
// Warning: (ae-missing-release-tag) "EntityKubernetesContent" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
@@ -174,338 +22,11 @@ export type EntityKubernetesContentProps = {
refreshIntervalMs?: number;
};
-// @public
-export const ErrorList: ({
- podAndErrors,
-}: ErrorListProps) => React_2.JSX.Element;
-
-// @public
-export interface ErrorListProps {
- // (undocumented)
- podAndErrors: PodAndErrors[];
-}
-
-// @public (undocumented)
-export type ErrorMatcher = {
- metadata?: IIoK8sApimachineryPkgApisMetaV1ObjectMeta;
-} & TypeMeta;
-
-// Warning: (ae-forgotten-export) The symbol "ErrorPanelProps" needs to be exported by the entry point index.d.ts
-// Warning: (ae-missing-release-tag) "ErrorPanel" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
-//
-// @public (undocumented)
-export const ErrorPanel: ({
- entityName,
- errorMessage,
- clustersWithErrors,
-}: ErrorPanelProps) => React_2.JSX.Element;
-
-// Warning: (ae-forgotten-export) The symbol "ErrorReportingProps" needs to be exported by the entry point index.d.ts
-// Warning: (ae-missing-release-tag) "ErrorReporting" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
-//
-// @public (undocumented)
-export const ErrorReporting: ({
- detectedErrors,
-}: ErrorReportingProps) => React_3.JSX.Element;
-
-// @public
-export type ErrorSeverity = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10;
-
-// @public
-export const Events: ({
- involvedObjectName,
- namespace,
- clusterName,
- warningEventsOnly,
-}: EventsProps) => React_2.JSX.Element;
-
-// @public
-export const EventsContent: ({
- events,
- warningEventsOnly,
-}: EventsContentProps) => React_2.JSX.Element;
-
-// @public
-export interface EventsContentProps {
- // (undocumented)
- events: Event_2[];
- // (undocumented)
- warningEventsOnly?: boolean;
-}
-
-// @public
-export interface EventsOptions {
- // (undocumented)
- clusterName: string;
- // (undocumented)
- involvedObjectName: string;
- // (undocumented)
- namespace: string;
-}
-
-// @public
-export interface EventsProps {
- // (undocumented)
- clusterName: string;
- // (undocumented)
- involvedObjectName: string;
- // (undocumented)
- namespace: string;
- // (undocumented)
- warningEventsOnly?: boolean;
-}
-
-// @public
-export const FixDialog: React_2.FC;
-
-// @public
-export interface FixDialogProps {
- // (undocumented)
- clusterName: string;
- // (undocumented)
- error: DetectedError;
- // (undocumented)
- open?: boolean;
- // (undocumented)
- pod: Pod;
-}
-
-// Warning: (ae-forgotten-export) The symbol "FormatClusterLinkOptions" needs to be exported by the entry point index.d.ts
-// Warning: (ae-missing-release-tag) "formatClusterLink" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
-//
-// @public (undocumented)
-export function formatClusterLink(
- options: FormatClusterLinkOptions,
-): string | undefined;
-
-// Warning: (ae-forgotten-export) The symbol "KubernetesAuthProvider" needs to be exported by the entry point index.d.ts
-// Warning: (ae-missing-release-tag) "GoogleKubernetesAuthProvider" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
-//
-// @public (undocumented)
-export class GoogleKubernetesAuthProvider implements KubernetesAuthProvider {
- constructor(authProvider: OAuthApi);
- // (undocumented)
- authProvider: OAuthApi;
- // (undocumented)
- decorateRequestBodyForAuth(
- requestBody: KubernetesRequestBody,
- ): Promise;
- // (undocumented)
- getCredentials(): Promise<{
- token: string;
- }>;
-}
-
-// Warning: (ae-missing-release-tag) "GroupedResponses" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
-//
-// @public (undocumented)
-export interface GroupedResponses extends DeploymentResources {
- // (undocumented)
- configMaps: V1ConfigMap[];
- // (undocumented)
- cronJobs: V1CronJob[];
- // (undocumented)
- customResources: any[];
- // (undocumented)
- ingresses: V1Ingress[];
- // (undocumented)
- jobs: V1Job[];
- // (undocumented)
- services: V1Service[];
- // (undocumented)
- statefulsets: V1StatefulSet[];
-}
-
-// Warning: (ae-missing-release-tag) "GroupedResponsesContext" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
-//
-// @public (undocumented)
-export const GroupedResponsesContext: React_2.Context;
-
-// @public (undocumented)
-export const HorizontalPodAutoscalerDrawer: (props: {
- hpa: V1HorizontalPodAutoscaler;
- expanded?: boolean;
- children?: React_2.ReactNode;
-}) => React_2.JSX.Element;
-
-// Warning: (ae-forgotten-export) The symbol "IngressesAccordionsProps" needs to be exported by the entry point index.d.ts
-// Warning: (ae-missing-release-tag) "IngressesAccordions" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
-//
-// @public (undocumented)
-export const IngressesAccordions: ({}: IngressesAccordionsProps) => React_2.JSX.Element;
-
// Warning: (ae-missing-release-tag) "isKubernetesAvailable" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
export const isKubernetesAvailable: (entity: Entity) => boolean;
-// Warning: (ae-forgotten-export) The symbol "JobsAccordionsProps" needs to be exported by the entry point index.d.ts
-// Warning: (ae-missing-release-tag) "JobsAccordions" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
-//
-// @public (undocumented)
-export const JobsAccordions: ({
- jobs,
-}: JobsAccordionsProps) => React_2.JSX.Element;
-
-// Warning: (ae-missing-release-tag) "KubernetesApi" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
-//
-// @public (undocumented)
-export interface KubernetesApi {
- // (undocumented)
- getClusters(): Promise<
- {
- name: string;
- authProvider: string;
- oidcTokenProvider?: string | undefined;
- }[]
- >;
- // (undocumented)
- getCustomObjectsByEntity(
- request: CustomObjectsByEntityRequest,
- ): Promise;
- // (undocumented)
- getObjectsByEntity(
- requestBody: KubernetesRequestBody,
- ): Promise;
- // (undocumented)
- getWorkloadsByEntity(
- request: WorkloadsByEntityRequest,
- ): Promise;
- // (undocumented)
- proxy(options: {
- clusterName: string;
- path: string;
- init?: RequestInit;
- }): Promise;
-}
-
-// Warning: (ae-missing-release-tag) "kubernetesApiRef" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
-//
-// @public (undocumented)
-export const kubernetesApiRef: ApiRef;
-
-// Warning: (ae-missing-release-tag) "KubernetesAuthProviders" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
-//
-// @public (undocumented)
-export class KubernetesAuthProviders implements KubernetesAuthProvidersApi {
- constructor(options: {
- microsoftAuthApi: OAuthApi;
- googleAuthApi: OAuthApi;
- oidcProviders?: {
- [key: string]: OpenIdConnectApi;
- };
- });
- // (undocumented)
- decorateRequestBodyForAuth(
- authProvider: string,
- requestBody: KubernetesRequestBody,
- ): Promise;
- // (undocumented)
- getCredentials(authProvider: string): Promise<{
- token?: string;
- }>;
-}
-
-// Warning: (ae-missing-release-tag) "KubernetesAuthProvidersApi" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
-//
-// @public (undocumented)
-export interface KubernetesAuthProvidersApi {
- // (undocumented)
- decorateRequestBodyForAuth(
- authProvider: string,
- requestBody: KubernetesRequestBody,
- ): Promise;
- // (undocumented)
- getCredentials(authProvider: string): Promise<{
- token?: string;
- }>;
-}
-
-// Warning: (ae-missing-release-tag) "kubernetesAuthProvidersApiRef" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
-//
-// @public (undocumented)
-export const kubernetesAuthProvidersApiRef: ApiRef;
-
-// Warning: (ae-missing-release-tag) "KubernetesBackendClient" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
-//
-// @public (undocumented)
-export class KubernetesBackendClient implements KubernetesApi {
- constructor(options: {
- discoveryApi: DiscoveryApi;
- identityApi: IdentityApi;
- kubernetesAuthProvidersApi: KubernetesAuthProvidersApi;
- });
- // (undocumented)
- getClusters(): Promise<
- {
- name: string;
- authProvider: string;
- }[]
- >;
- // (undocumented)
- getCustomObjectsByEntity(
- request: CustomObjectsByEntityRequest,
- ): Promise;
- // (undocumented)
- getObjectsByEntity(
- requestBody: KubernetesRequestBody,
- ): Promise;
- // (undocumented)
- getWorkloadsByEntity(
- request: WorkloadsByEntityRequest,
- ): Promise;
- // (undocumented)
- proxy(options: {
- clusterName: string;
- path: string;
- init?: RequestInit;
- }): Promise;
-}
-
-// Warning: (ae-forgotten-export) The symbol "KubernetesContentProps" needs to be exported by the entry point index.d.ts
-// Warning: (ae-missing-release-tag) "KubernetesContent" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
-//
-// @public (undocumented)
-export const KubernetesContent: ({
- entity,
- refreshIntervalMs,
-}: KubernetesContentProps) => React_2.JSX.Element;
-
-// Warning: (ae-forgotten-export) The symbol "KubernetesDrawerProps" needs to be exported by the entry point index.d.ts
-// Warning: (ae-missing-release-tag) "KubernetesDrawer" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
-//
-// @public (undocumented)
-export const KubernetesDrawer: ({
- open,
- label,
- drawerContentsHeader,
- kubernetesObject,
- children,
-}: KubernetesDrawerProps) => React_2.JSX.Element;
-
-// Warning: (ae-forgotten-export) The symbol "KubernetesDrawerContentProps" needs to be exported by the entry point index.d.ts
-// Warning: (ae-missing-release-tag) "KubernetesDrawerContent" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
-//
-// @public (undocumented)
-export const KubernetesDrawerContent: ({
- children,
- header,
- kubernetesObject,
- close,
-}: KubernetesDrawerContentProps) => React_2.JSX.Element;
-
-// Warning: (ae-missing-release-tag) "KubernetesObjects" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
-//
-// @public (undocumented)
-export interface KubernetesObjects {
- // (undocumented)
- error?: string;
- // (undocumented)
- kubernetesObjects?: ObjectsByEntityResponse;
- // (undocumented)
- loading: boolean;
-}
-
// Warning: (ae-missing-release-tag) "kubernetesPlugin" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
@@ -513,240 +34,11 @@ const kubernetesPlugin: BackstagePlugin<
{
entityContent: RouteRef;
},
- {},
{}
>;
export { kubernetesPlugin };
export { kubernetesPlugin as plugin };
-// Warning: (ae-missing-release-tag) "KubernetesProxyApi" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
-//
-// @public (undocumented)
-export interface KubernetesProxyApi {
- // (undocumented)
- getEventsByInvolvedObjectName(request: {
- clusterName: string;
- involvedObjectName: string;
- namespace: string;
- }): Promise;
- // (undocumented)
- getPodLogs(request: {
- podName: string;
- namespace: string;
- clusterName: string;
- containerName: string;
- previous?: boolean;
- }): Promise<{
- text: string;
- }>;
-}
-
-// Warning: (ae-missing-release-tag) "kubernetesProxyApiRef" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
-//
-// @public (undocumented)
-export const kubernetesProxyApiRef: ApiRef;
-
-// @public
-export class KubernetesProxyClient {
- constructor(options: { kubernetesApi: KubernetesApi });
- // (undocumented)
- getEventsByInvolvedObjectName({
- clusterName,
- involvedObjectName,
- namespace,
- }: {
- clusterName: string;
- involvedObjectName: string;
- namespace: string;
- }): Promise;
- // (undocumented)
- getPodLogs({
- podName,
- namespace,
- clusterName,
- containerName,
- previous,
- }: {
- podName: string;
- namespace: string;
- clusterName: string;
- containerName: string;
- previous?: boolean;
- }): Promise<{
- text: string;
- }>;
-}
-
-// Warning: (ae-forgotten-export) The symbol "KubernetesDrawerable" needs to be exported by the entry point index.d.ts
-// Warning: (ae-forgotten-export) The symbol "KubernetesStructuredMetadataTableDrawerProps" needs to be exported by the entry point index.d.ts
-// Warning: (ae-missing-release-tag) "KubernetesStructuredMetadataTableDrawer" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
-//
-// @public (undocumented)
-export const KubernetesStructuredMetadataTableDrawer: <
- T extends KubernetesDrawerable,
->({
- object,
- renderObject,
- kind,
- buttonVariant,
- expanded,
- children,
-}: KubernetesStructuredMetadataTableDrawerProps) => React_2.JSX.Element;
-
-// Warning: (ae-forgotten-export) The symbol "ErrorPanelProps_2" needs to be exported by the entry point index.d.ts
-// Warning: (ae-missing-release-tag) "LinkErrorPanel" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
-//
-// @public (undocumented)
-export const LinkErrorPanel: ({
- cluster,
- errorMessage,
-}: ErrorPanelProps_2) => React_2.JSX.Element;
-
-// @public
-export const PendingPodContent: ({
- pod,
-}: PendingPodContentProps) => React_2.JSX.Element;
-
-// @public
-export interface PendingPodContentProps {
- // (undocumented)
- pod: Pod_2;
-}
-
-// @public
-export interface PodAndErrors {
- // (undocumented)
- clusterName: string;
- // (undocumented)
- errors: DetectedError[];
- // (undocumented)
- pod: Pod_2;
-}
-
-// Warning: (ae-forgotten-export) The symbol "PodDrawerProps" needs to be exported by the entry point index.d.ts
-//
-// @public
-export const PodDrawer: ({
- podAndErrors,
- open,
-}: PodDrawerProps) => React_2.JSX.Element;
-
-// @public
-export const PodExecTerminal: (
- props: PodExecTerminalProps,
-) => React_2.JSX.Element;
-
-// @public
-export const PodExecTerminalDialog: (
- props: PodExecTerminalProps,
-) => React_2.JSX.Element;
-
-// @public
-export interface PodExecTerminalProps {
- // (undocumented)
- clusterName: string;
- // (undocumented)
- containerName: string;
- // (undocumented)
- podName: string;
- // (undocumented)
- podNamespace: string;
-}
-
-// @public
-export const PodLogs: React_2.FC;
-
-// @public
-export const PodLogsDialog: ({
- containerScope,
-}: PodLogsDialogProps) => React_2.JSX.Element;
-
-// @public
-export interface PodLogsDialogProps {
- // (undocumented)
- containerScope: ContainerScope;
-}
-
-// @public
-export interface PodLogsOptions {
- // (undocumented)
- containerScope: ContainerScope;
- // (undocumented)
- previous?: boolean;
-}
-
-// @public
-export interface PodLogsProps {
- // (undocumented)
- containerScope: ContainerScope;
- // (undocumented)
- previous?: boolean;
-}
-
-// @public
-export const PodMetricsContext: React_2.Context>;
-
-// Warning: (ae-missing-release-tag) "PodMetricsMatcher" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
-//
-// @public (undocumented)
-export type PodMetricsMatcher = {
- metadata?: IObjectMeta;
-};
-
-// Warning: (ae-missing-release-tag) "PodNamesWithErrorsContext" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
-//
-// @public (undocumented)
-export const PodNamesWithErrorsContext: React_2.Context>;
-
-// Warning: (ae-missing-release-tag) "PodNamesWithMetricsContext" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
-//
-// @public (undocumented)
-export const PodNamesWithMetricsContext: React_2.Context<
- Map
->;
-
-// @public
-export interface PodScope {
- // (undocumented)
- clusterName: string;
- // (undocumented)
- podName: string;
- // (undocumented)
- podNamespace: string;
-}
-
-// Warning: (ae-forgotten-export) The symbol "PodsTablesProps" needs to be exported by the entry point index.d.ts
-// Warning: (ae-missing-release-tag) "PodsTable" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
-//
-// @public (undocumented)
-export const PodsTable: ({
- pods,
- extraColumns,
-}: PodsTablesProps) => React_2.JSX.Element;
-
-// @public
-export interface ResourceRef {
- // (undocumented)
- apiGroup: string;
- // (undocumented)
- kind: string;
- // (undocumented)
- name: string;
- // (undocumented)
- namespace: string;
-}
-
-// Warning: (ae-forgotten-export) The symbol "ResourceUtilizationProps" needs to be exported by the entry point index.d.ts
-//
-// @public
-export const ResourceUtilization: ({
- compressed,
- title,
- usage,
- total,
- totalFormatted,
-}: ResourceUtilizationProps) => React_2.JSX.Element;
-
// Warning: (ae-missing-release-tag) "Router" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
//
// @public (undocumented)
@@ -754,60 +46,5 @@ export const Router: (props: {
refreshIntervalMs?: number;
}) => React_2.JSX.Element;
-// @public
-export class ServerSideKubernetesAuthProvider
- implements KubernetesAuthProvider
-{
- // (undocumented)
- decorateRequestBodyForAuth(
- requestBody: KubernetesRequestBody,
- ): Promise;
- // (undocumented)
- getCredentials(): Promise<{}>;
-}
-
-// Warning: (ae-forgotten-export) The symbol "ServicesAccordionsProps" needs to be exported by the entry point index.d.ts
-// Warning: (ae-missing-release-tag) "ServicesAccordions" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
-//
-// @public (undocumented)
-export const ServicesAccordions: ({}: ServicesAccordionsProps) => React_2.JSX.Element;
-
-// @public
-export const useCustomResources: (
- entity: Entity,
- customResourceMatchers: CustomResourceMatcher[],
- intervalMs?: number,
-) => KubernetesObjects;
-
-// @public
-export const useEvents: ({
- involvedObjectName,
- namespace,
- clusterName,
-}: EventsOptions) => AsyncState;
-
-// Warning: (ae-missing-release-tag) "useKubernetesObjects" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
-//
-// @public (undocumented)
-export const useKubernetesObjects: (
- entity: Entity,
- intervalMs?: number,
-) => KubernetesObjects;
-
-// @public
-export const useMatchingErrors: (matcher: ErrorMatcher) => DetectedError[];
-
-// @public
-export const usePodLogs: ({
- containerScope,
- previous,
-}: PodLogsOptions) => AsyncState<{
- text: string;
-}>;
-
-// @public
-export const usePodMetrics: (
- clusterName: string,
- matcher: PodMetricsMatcher,
-) => ClientPodStatus | undefined;
+export * from '@backstage/plugin-kubernetes-react';
```
diff --git a/plugins/kubernetes/package.json b/plugins/kubernetes/package.json
index 80498b5b69..fdc792fc52 100644
--- a/plugins/kubernetes/package.json
+++ b/plugins/kubernetes/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-kubernetes",
"description": "A Backstage plugin that integrates towards Kubernetes",
- "version": "0.10.3",
+ "version": "0.10.4-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -41,6 +41,7 @@
"@backstage/errors": "workspace:^",
"@backstage/plugin-catalog-react": "workspace:^",
"@backstage/plugin-kubernetes-common": "workspace:^",
+ "@backstage/plugin-kubernetes-react": "workspace:^",
"@backstage/theme": "workspace:^",
"@backstage/types": "workspace:^",
"@kubernetes-models/apimachinery": "^1.1.0",
diff --git a/plugins/kubernetes/src/components/KubernetesContent.test.tsx b/plugins/kubernetes/src/KubernetesContent.test.tsx
similarity index 91%
rename from plugins/kubernetes/src/components/KubernetesContent.test.tsx
rename to plugins/kubernetes/src/KubernetesContent.test.tsx
index 4c85298dba..7c21c6f5a7 100644
--- a/plugins/kubernetes/src/components/KubernetesContent.test.tsx
+++ b/plugins/kubernetes/src/KubernetesContent.test.tsx
@@ -18,13 +18,19 @@ import React from 'react';
import { screen } from '@testing-library/react';
import { renderInTestApp } from '@backstage/test-utils';
import { KubernetesContent } from './KubernetesContent';
-import { useKubernetesObjects } from '../hooks';
+import { useKubernetesObjects } from '@backstage/plugin-kubernetes-react';
+import * as oneDeployment from './__fixtures__/1-deployments.json';
+import * as twoDeployments from './__fixtures__/2-deployments.json';
-jest.mock('../hooks');
-import * as oneDeployment from '../__fixtures__/1-deployments.json';
-import * as twoDeployments from '../__fixtures__/2-deployments.json';
+jest.mock('@backstage/plugin-kubernetes-react', () => ({
+ ...jest.requireActual('@backstage/plugin-kubernetes-react'),
+ useKubernetesObjects: jest.fn(),
+}));
describe('KubernetesContent', () => {
+ beforeEach(() => {
+ jest.clearAllMocks();
+ });
it('render empty response', async () => {
(useKubernetesObjects as any).mockReturnValue({
kubernetesObjects: {
diff --git a/plugins/kubernetes/src/components/KubernetesContent.tsx b/plugins/kubernetes/src/KubernetesContent.tsx
similarity index 81%
rename from plugins/kubernetes/src/components/KubernetesContent.tsx
rename to plugins/kubernetes/src/KubernetesContent.tsx
index a465422095..9c266b1854 100644
--- a/plugins/kubernetes/src/components/KubernetesContent.tsx
+++ b/plugins/kubernetes/src/KubernetesContent.tsx
@@ -17,14 +17,23 @@
import React from 'react';
import { Grid, Typography } from '@material-ui/core';
import { Entity } from '@backstage/catalog-model';
-import { ErrorPanel } from './ErrorPanel';
-import { ErrorReporting } from './ErrorReporting';
-import { DetectedError, detectErrors } from '../error-detection';
-import { Cluster } from './Cluster';
-import EmptyStateImage from '../assets/emptystate.svg';
-import { useKubernetesObjects } from '../hooks';
-import { Content, Page, Progress } from '@backstage/core-components';
-import { DetectedErrorsContext } from '../hooks/useMatchingErrors';
+import {
+ ErrorPanel,
+ ErrorReporting,
+ Cluster,
+ useKubernetesObjects,
+ DetectedErrorsContext,
+} from '@backstage/plugin-kubernetes-react';
+import {
+ DetectedError,
+ detectErrors,
+} from '@backstage/plugin-kubernetes-common';
+import {
+ Content,
+ EmptyState,
+ Page,
+ Progress,
+} from '@backstage/core-components';
type KubernetesContentProps = {
entity: Entity;
@@ -98,17 +107,11 @@ export const KubernetesContent = ({
alignItems="center"
spacing={2}
>
-
-
- No resources on any known clusters for{' '}
- {entity.metadata.name}
-
-
-
-
+
diff --git a/plugins/kubernetes/src/Router.tsx b/plugins/kubernetes/src/Router.tsx
index fd3a4bd0ce..bd8fc09edc 100644
--- a/plugins/kubernetes/src/Router.tsx
+++ b/plugins/kubernetes/src/Router.tsx
@@ -18,7 +18,7 @@ import React from 'react';
import { Entity } from '@backstage/catalog-model';
import { useEntity } from '@backstage/plugin-catalog-react';
import { Route, Routes } from 'react-router-dom';
-import { KubernetesContent } from './components/KubernetesContent';
+import { KubernetesContent } from './KubernetesContent';
import { Button } from '@material-ui/core';
import { MissingAnnotationEmptyState } from '@backstage/core-components';
diff --git a/plugins/kubernetes/src/assets/emptystate.svg b/plugins/kubernetes/src/assets/emptystate.svg
deleted file mode 100644
index 8a0490727f..0000000000
--- a/plugins/kubernetes/src/assets/emptystate.svg
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/plugins/kubernetes/src/components/CronJobsAccordions/index.ts b/plugins/kubernetes/src/components/CronJobsAccordions/index.ts
deleted file mode 100644
index e72e3f7e6d..0000000000
--- a/plugins/kubernetes/src/components/CronJobsAccordions/index.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * Copyright 2021 The Backstage Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-export { CronJobsAccordions } from './CronJobsAccordions';
diff --git a/plugins/kubernetes/src/components/IngressesAccordions/index.ts b/plugins/kubernetes/src/components/IngressesAccordions/index.ts
deleted file mode 100644
index 8e7f103e42..0000000000
--- a/plugins/kubernetes/src/components/IngressesAccordions/index.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * Copyright 2020 The Backstage Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-export { IngressesAccordions } from './IngressesAccordions';
diff --git a/plugins/kubernetes/src/components/ServicesAccordions/index.ts b/plugins/kubernetes/src/components/ServicesAccordions/index.ts
deleted file mode 100644
index 04fee9caca..0000000000
--- a/plugins/kubernetes/src/components/ServicesAccordions/index.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * Copyright 2020 The Backstage Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-export { ServicesAccordions } from './ServicesAccordions';
diff --git a/plugins/kubernetes/src/error-detection/index.ts b/plugins/kubernetes/src/error-detection/index.ts
deleted file mode 100644
index 3a8789d79d..0000000000
--- a/plugins/kubernetes/src/error-detection/index.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright 2020 The Backstage Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-export type {
- DetectedError,
- DetectedErrorsByCluster,
- ErrorSeverity,
- ResourceRef,
-} from './types';
-export { detectErrors } from './error-detection';
diff --git a/plugins/kubernetes/src/index.ts b/plugins/kubernetes/src/index.ts
index 616caaef62..3651a861fc 100644
--- a/plugins/kubernetes/src/index.ts
+++ b/plugins/kubernetes/src/index.ts
@@ -27,10 +27,5 @@ export {
} from './plugin';
export type { EntityKubernetesContentProps } from './plugin';
export { Router, isKubernetesAvailable } from './Router';
-export * from './api';
-export * from './kubernetes-auth-provider';
-export * from './utils/clusterLinks';
-export * from './components';
-export * from './error-detection';
-export * from './hooks';
-export * from './types';
+// TODO remove this re-export as a breaking change after a couple of releases
+export * from '@backstage/plugin-kubernetes-react';
diff --git a/plugins/kubernetes/src/kubernetes-auth-provider/index.ts b/plugins/kubernetes/src/kubernetes-auth-provider/index.ts
deleted file mode 100644
index 23197321f6..0000000000
--- a/plugins/kubernetes/src/kubernetes-auth-provider/index.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Copyright 2020 The Backstage Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-export { kubernetesAuthProvidersApiRef } from './types';
-export type { KubernetesAuthProvidersApi } from './types';
-export { KubernetesAuthProviders } from './KubernetesAuthProviders';
-export { GoogleKubernetesAuthProvider } from './GoogleKubernetesAuthProvider';
-export { ServerSideKubernetesAuthProvider } from './ServerSideAuthProvider';
diff --git a/plugins/kubernetes/src/plugin.ts b/plugins/kubernetes/src/plugin.ts
index 02c7bfd2d6..ac55dbbf23 100644
--- a/plugins/kubernetes/src/plugin.ts
+++ b/plugins/kubernetes/src/plugin.ts
@@ -13,10 +13,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-import { KubernetesBackendClient } from './api/KubernetesBackendClient';
-import { kubernetesApiRef, kubernetesProxyApiRef } from './api/types';
-import { kubernetesAuthProvidersApiRef } from './kubernetes-auth-provider/types';
-import { KubernetesAuthProviders } from './kubernetes-auth-provider/KubernetesAuthProviders';
+import {
+ KubernetesBackendClient,
+ kubernetesApiRef,
+ kubernetesProxyApiRef,
+ kubernetesAuthProvidersApiRef,
+ KubernetesAuthProviders,
+ KubernetesProxyClient,
+} from '@backstage/plugin-kubernetes-react';
import {
createApiFactory,
createPlugin,
@@ -30,7 +34,6 @@ import {
oneloginAuthApiRef,
createRoutableExtension,
} from '@backstage/core-plugin-api';
-import { KubernetesProxyClient } from './api';
export const rootCatalogKubernetesRouteRef = createRouteRef({
id: 'kubernetes',
diff --git a/plugins/kubernetes/src/types/types.ts b/plugins/kubernetes/src/types/types.ts
deleted file mode 100644
index f15c4f335a..0000000000
--- a/plugins/kubernetes/src/types/types.ts
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright 2020 The Backstage Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import type { JsonObject } from '@backstage/types';
-import {
- V1Deployment,
- V1Pod,
- V1ReplicaSet,
- V1HorizontalPodAutoscaler,
- V1Service,
- V1ConfigMap,
- V1Ingress,
- V1Job,
- V1CronJob,
- V1StatefulSet,
-} from '@kubernetes/client-node';
-
-export interface DeploymentResources {
- pods: V1Pod[];
- replicaSets: V1ReplicaSet[];
- deployments: V1Deployment[];
- horizontalPodAutoscalers: V1HorizontalPodAutoscaler[];
-}
-
-export interface GroupedResponses extends DeploymentResources {
- services: V1Service[];
- configMaps: V1ConfigMap[];
- ingresses: V1Ingress[];
- jobs: V1Job[];
- cronJobs: V1CronJob[];
- customResources: any[];
- statefulsets: V1StatefulSet[];
-}
-
-export interface ClusterLinksFormatterOptions {
- dashboardUrl?: URL;
- dashboardParameters?: JsonObject;
- object: any;
- kind: string;
-}
-
-export type ClusterLinksFormatter = (
- options: ClusterLinksFormatterOptions,
-) => URL;
diff --git a/plugins/lighthouse-backend/CHANGELOG.md b/plugins/lighthouse-backend/CHANGELOG.md
index 209ca47094..420f70c1d2 100644
--- a/plugins/lighthouse-backend/CHANGELOG.md
+++ b/plugins/lighthouse-backend/CHANGELOG.md
@@ -1,5 +1,20 @@
# @backstage/plugin-lighthouse-backend
+## 0.3.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+ - @backstage/plugin-lighthouse-common@0.1.3
+
## 0.3.0
### Minor Changes
diff --git a/plugins/lighthouse-backend/package.json b/plugins/lighthouse-backend/package.json
index 555f3e2819..4946391d4a 100644
--- a/plugins/lighthouse-backend/package.json
+++ b/plugins/lighthouse-backend/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-lighthouse-backend",
"description": "Backend functionalities for lighthouse",
- "version": "0.3.0",
+ "version": "0.3.2-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/lighthouse/CHANGELOG.md b/plugins/lighthouse/CHANGELOG.md
index 56882e2a45..9690efc150 100644
--- a/plugins/lighthouse/CHANGELOG.md
+++ b/plugins/lighthouse/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/plugin-lighthouse
+## 0.4.10-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/config@1.1.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+ - @backstage/plugin-lighthouse-common@0.1.3
+
## 0.4.9
### Patch Changes
diff --git a/plugins/lighthouse/api-report.md b/plugins/lighthouse/api-report.md
index 9794fe1728..40a4ff514f 100644
--- a/plugins/lighthouse/api-report.md
+++ b/plugins/lighthouse/api-report.md
@@ -49,7 +49,6 @@ const lighthousePlugin: BackstagePlugin<
root: RouteRef;
entityContent: RouteRef;
},
- {},
{}
>;
export { lighthousePlugin };
diff --git a/plugins/lighthouse/package.json b/plugins/lighthouse/package.json
index 3e62644212..e23b8ae742 100644
--- a/plugins/lighthouse/package.json
+++ b/plugins/lighthouse/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-lighthouse",
"description": "A Backstage plugin that integrates towards Lighthouse",
- "version": "0.4.9",
+ "version": "0.4.10-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/linguist-backend/CHANGELOG.md b/plugins/linguist-backend/CHANGELOG.md
index 10bfface1c..037bba87c2 100644
--- a/plugins/linguist-backend/CHANGELOG.md
+++ b/plugins/linguist-backend/CHANGELOG.md
@@ -1,5 +1,22 @@
# @backstage/plugin-linguist-backend
+## 0.5.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+ - @backstage/plugin-linguist-common@0.1.2
+
## 0.5.0
### Minor Changes
diff --git a/plugins/linguist-backend/package.json b/plugins/linguist-backend/package.json
index d2c63c7f44..e75d9daef2 100644
--- a/plugins/linguist-backend/package.json
+++ b/plugins/linguist-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-linguist-backend",
- "version": "0.5.0",
+ "version": "0.5.2-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/linguist/CHANGELOG.md b/plugins/linguist/CHANGELOG.md
index 6b0b23a4bb..eae430348d 100644
--- a/plugins/linguist/CHANGELOG.md
+++ b/plugins/linguist/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/plugin-linguist
+## 0.1.10-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+ - @backstage/plugin-linguist-common@0.1.2
+
## 0.1.9
### Patch Changes
diff --git a/plugins/linguist/api-report.md b/plugins/linguist/api-report.md
index 5182ce12f6..71e2460088 100644
--- a/plugins/linguist/api-report.md
+++ b/plugins/linguist/api-report.md
@@ -16,7 +16,7 @@ export const EntityLinguistCard: () => JSX_2.Element;
export const isLinguistAvailable: (entity: Entity) => boolean;
// @public (undocumented)
-export const linguistPlugin: BackstagePlugin<{}, {}, {}>;
+export const linguistPlugin: BackstagePlugin<{}, {}>;
// (No @packageDocumentation comment for this package)
```
diff --git a/plugins/linguist/package.json b/plugins/linguist/package.json
index ecae75cddf..a748670653 100644
--- a/plugins/linguist/package.json
+++ b/plugins/linguist/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-linguist",
- "version": "0.1.9",
+ "version": "0.1.10-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/microsoft-calendar/CHANGELOG.md b/plugins/microsoft-calendar/CHANGELOG.md
index 7c88ec2087..3ada5bb9d1 100644
--- a/plugins/microsoft-calendar/CHANGELOG.md
+++ b/plugins/microsoft-calendar/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-microsoft-calendar
+## 0.1.8-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+
## 0.1.7
### Patch Changes
diff --git a/plugins/microsoft-calendar/package.json b/plugins/microsoft-calendar/package.json
index 8ffe31e790..5f66f361fe 100644
--- a/plugins/microsoft-calendar/package.json
+++ b/plugins/microsoft-calendar/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-microsoft-calendar",
- "version": "0.1.7",
+ "version": "0.1.8-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/newrelic-dashboard/CHANGELOG.md b/plugins/newrelic-dashboard/CHANGELOG.md
index 6a6ad77acf..b7c866f7f8 100644
--- a/plugins/newrelic-dashboard/CHANGELOG.md
+++ b/plugins/newrelic-dashboard/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-newrelic-dashboard
+## 0.2.18-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+
## 0.2.17
### Patch Changes
diff --git a/plugins/newrelic-dashboard/api-report.md b/plugins/newrelic-dashboard/api-report.md
index 2e9b11a88e..ce7b8d5b7e 100644
--- a/plugins/newrelic-dashboard/api-report.md
+++ b/plugins/newrelic-dashboard/api-report.md
@@ -31,7 +31,6 @@ export const newRelicDashboardPlugin: BackstagePlugin<
{
root: RouteRef;
},
- {},
{}
>;
diff --git a/plugins/newrelic-dashboard/package.json b/plugins/newrelic-dashboard/package.json
index 42db37738a..d491e86ab7 100644
--- a/plugins/newrelic-dashboard/package.json
+++ b/plugins/newrelic-dashboard/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-newrelic-dashboard",
- "version": "0.2.17",
+ "version": "0.2.18-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/newrelic/CHANGELOG.md b/plugins/newrelic/CHANGELOG.md
index dc69d20143..e896702b4b 100644
--- a/plugins/newrelic/CHANGELOG.md
+++ b/plugins/newrelic/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-newrelic
+## 0.3.41-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/theme@0.4.2
+
## 0.3.40
### Patch Changes
diff --git a/plugins/newrelic/api-report.md b/plugins/newrelic/api-report.md
index 04fd229465..a77b80c862 100644
--- a/plugins/newrelic/api-report.md
+++ b/plugins/newrelic/api-report.md
@@ -17,7 +17,6 @@ const newRelicPlugin: BackstagePlugin<
{
root: RouteRef;
},
- {},
{}
>;
export { newRelicPlugin };
diff --git a/plugins/newrelic/package.json b/plugins/newrelic/package.json
index 5629a10f86..1ab21391da 100644
--- a/plugins/newrelic/package.json
+++ b/plugins/newrelic/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-newrelic",
"description": "A Backstage plugin that integrates towards New Relic",
- "version": "0.3.40",
+ "version": "0.3.41-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/nomad-backend/CHANGELOG.md b/plugins/nomad-backend/CHANGELOG.md
index 9ff5e392fc..188bba8900 100644
--- a/plugins/nomad-backend/CHANGELOG.md
+++ b/plugins/nomad-backend/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-nomad-backend
+## 0.1.7-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/errors@1.2.2
+
## 0.1.5
### Patch Changes
diff --git a/plugins/nomad-backend/package.json b/plugins/nomad-backend/package.json
index 24ffd9eeff..ac16ab79ec 100644
--- a/plugins/nomad-backend/package.json
+++ b/plugins/nomad-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-nomad-backend",
- "version": "0.1.5",
+ "version": "0.1.7-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/nomad/CHANGELOG.md b/plugins/nomad/CHANGELOG.md
index 8f3d96519a..cf42bd5820 100644
--- a/plugins/nomad/CHANGELOG.md
+++ b/plugins/nomad/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-nomad
+## 0.1.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/config@1.1.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+
## 0.1.5
### Patch Changes
diff --git a/plugins/nomad/api-report.md b/plugins/nomad/api-report.md
index c2d06b9892..68cc47c33d 100644
--- a/plugins/nomad/api-report.md
+++ b/plugins/nomad/api-report.md
@@ -28,7 +28,6 @@ export const nomadPlugin: BackstagePlugin<
root: RouteRef;
entityContent: RouteRef;
},
- {},
{}
>;
diff --git a/plugins/nomad/package.json b/plugins/nomad/package.json
index 80971f5b6c..7e7fc1a739 100644
--- a/plugins/nomad/package.json
+++ b/plugins/nomad/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-nomad",
- "version": "0.1.5",
+ "version": "0.1.6-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/octopus-deploy/CHANGELOG.md b/plugins/octopus-deploy/CHANGELOG.md
index 29b46afc14..aa0f193a62 100644
--- a/plugins/octopus-deploy/CHANGELOG.md
+++ b/plugins/octopus-deploy/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-octopus-deploy
+## 0.2.7-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+
## 0.2.6
### Patch Changes
diff --git a/plugins/octopus-deploy/api-report.md b/plugins/octopus-deploy/api-report.md
index 713d99aa8f..3d65e40c64 100644
--- a/plugins/octopus-deploy/api-report.md
+++ b/plugins/octopus-deploy/api-report.md
@@ -55,7 +55,7 @@ export type OctopusDeployment = {
};
// @public (undocumented)
-export const octopusDeployPlugin: BackstagePlugin<{}, {}, {}>;
+export const octopusDeployPlugin: BackstagePlugin<{}, {}>;
// @public (undocumented)
export type OctopusEnvironment = {
diff --git a/plugins/octopus-deploy/package.json b/plugins/octopus-deploy/package.json
index 608f9d5ace..a82e7f74e1 100644
--- a/plugins/octopus-deploy/package.json
+++ b/plugins/octopus-deploy/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-octopus-deploy",
- "version": "0.2.6",
+ "version": "0.2.7-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/opencost/CHANGELOG.md b/plugins/opencost/CHANGELOG.md
index ca4b9a990a..960faf29e7 100644
--- a/plugins/opencost/CHANGELOG.md
+++ b/plugins/opencost/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-opencost
+## 0.2.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/theme@0.4.2
+
## 0.2.0
### Minor Changes
diff --git a/plugins/opencost/api-report.md b/plugins/opencost/api-report.md
index 079f394618..996bcea6ac 100644
--- a/plugins/opencost/api-report.md
+++ b/plugins/opencost/api-report.md
@@ -17,7 +17,6 @@ export const openCostPlugin: BackstagePlugin<
{
root: RouteRef;
},
- {},
{}
>;
```
diff --git a/plugins/opencost/package.json b/plugins/opencost/package.json
index 9db26eeb58..87b533f153 100644
--- a/plugins/opencost/package.json
+++ b/plugins/opencost/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-opencost",
- "version": "0.2.0",
+ "version": "0.2.1-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/org-react/CHANGELOG.md b/plugins/org-react/CHANGELOG.md
index fa32f33f00..71e1b94403 100644
--- a/plugins/org-react/CHANGELOG.md
+++ b/plugins/org-react/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-org-react
+## 0.1.14-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+
## 0.1.13
### Patch Changes
diff --git a/plugins/org-react/package.json b/plugins/org-react/package.json
index eecdd4fa6c..a5e5a8562b 100644
--- a/plugins/org-react/package.json
+++ b/plugins/org-react/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-org-react",
- "version": "0.1.13",
+ "version": "0.1.14-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/org/CHANGELOG.md b/plugins/org/CHANGELOG.md
index df02adcdfd..a2e7a2b60a 100644
--- a/plugins/org/CHANGELOG.md
+++ b/plugins/org/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-org
+## 0.6.15-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+
## 0.6.14
### Patch Changes
diff --git a/plugins/org/api-report.md b/plugins/org/api-report.md
index d85df7125c..922b25b610 100644
--- a/plugins/org/api-report.md
+++ b/plugins/org/api-report.md
@@ -69,8 +69,7 @@ const orgPlugin: BackstagePlugin<
{},
{
catalogIndex: ExternalRouteRef;
- },
- {}
+ }
>;
export { orgPlugin };
export { orgPlugin as plugin };
diff --git a/plugins/org/package.json b/plugins/org/package.json
index e0483b6e64..7d931c4797 100644
--- a/plugins/org/package.json
+++ b/plugins/org/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-org",
"description": "A Backstage plugin that helps you create entity pages for your organization",
- "version": "0.6.14",
+ "version": "0.6.15-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/pagerduty/CHANGELOG.md b/plugins/pagerduty/CHANGELOG.md
index ad47a35b37..d9936c4f41 100644
--- a/plugins/pagerduty/CHANGELOG.md
+++ b/plugins/pagerduty/CHANGELOG.md
@@ -1,5 +1,19 @@
# @backstage/plugin-pagerduty
+## 0.6.6-next.0
+
+### Patch Changes
+
+- b9ce306814: Minor fix to avoid usage of deprecated prop
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/plugin-home-react@0.1.4-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+
## 0.6.5
### Patch Changes
diff --git a/plugins/pagerduty/api-report.md b/plugins/pagerduty/api-report.md
index 24c2e103cf..db73259dd5 100644
--- a/plugins/pagerduty/api-report.md
+++ b/plugins/pagerduty/api-report.md
@@ -177,7 +177,7 @@ export type PagerDutyOnCallsResponse = {
};
// @public (undocumented)
-const pagerDutyPlugin: BackstagePlugin<{}, {}, {}>;
+const pagerDutyPlugin: BackstagePlugin<{}, {}>;
export { pagerDutyPlugin };
export { pagerDutyPlugin as plugin };
diff --git a/plugins/pagerduty/package.json b/plugins/pagerduty/package.json
index 3551ab55ec..28682c2f2d 100644
--- a/plugins/pagerduty/package.json
+++ b/plugins/pagerduty/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-pagerduty",
"description": "A Backstage plugin that integrates towards PagerDuty",
- "version": "0.6.5",
+ "version": "0.6.6-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/periskop-backend/CHANGELOG.md b/plugins/periskop-backend/CHANGELOG.md
index 79abda94c5..448a804f23 100644
--- a/plugins/periskop-backend/CHANGELOG.md
+++ b/plugins/periskop-backend/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-periskop-backend
+## 0.2.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+
## 0.2.0
### Minor Changes
diff --git a/plugins/periskop-backend/package.json b/plugins/periskop-backend/package.json
index 2d08441b02..ad0bcf0ad2 100644
--- a/plugins/periskop-backend/package.json
+++ b/plugins/periskop-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-periskop-backend",
- "version": "0.2.0",
+ "version": "0.2.2-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/periskop/CHANGELOG.md b/plugins/periskop/CHANGELOG.md
index 98dd5ff8d9..a38ca46956 100644
--- a/plugins/periskop/CHANGELOG.md
+++ b/plugins/periskop/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-periskop
+## 0.1.23-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+
## 0.1.22
### Patch Changes
diff --git a/plugins/periskop/api-report.md b/plugins/periskop/api-report.md
index 578fb1dc49..607cbbb4d0 100644
--- a/plugins/periskop/api-report.md
+++ b/plugins/periskop/api-report.md
@@ -120,7 +120,7 @@ export class PeriskopClient implements PeriskopApi {
}
// @public (undocumented)
-export const periskopPlugin: BackstagePlugin<{}, {}, {}>;
+export const periskopPlugin: BackstagePlugin<{}, {}>;
// @public (undocumented)
export interface RequestHeaders {
diff --git a/plugins/periskop/package.json b/plugins/periskop/package.json
index 3d4a8976a8..e2d7f6e74d 100644
--- a/plugins/periskop/package.json
+++ b/plugins/periskop/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-periskop",
- "version": "0.1.22",
+ "version": "0.1.23-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/permission-backend-module-policy-allow-all/CHANGELOG.md b/plugins/permission-backend-module-policy-allow-all/CHANGELOG.md
index 64a3619daa..49b6cfd3a0 100644
--- a/plugins/permission-backend-module-policy-allow-all/CHANGELOG.md
+++ b/plugins/permission-backend-module-policy-allow-all/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-permission-backend-module-allow-all-policy
+## 0.1.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/plugin-permission-common@0.7.8
+ - @backstage/plugin-permission-node@0.7.16-next.0
+
## 0.1.0
### Minor Changes
diff --git a/plugins/permission-backend-module-policy-allow-all/package.json b/plugins/permission-backend-module-policy-allow-all/package.json
index c2f8488369..12e60881af 100644
--- a/plugins/permission-backend-module-policy-allow-all/package.json
+++ b/plugins/permission-backend-module-policy-allow-all/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-permission-backend-module-allow-all-policy",
"description": "Allow all policy backend module for the permission plugin.",
- "version": "0.1.0",
+ "version": "0.1.2-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/permission-backend/CHANGELOG.md b/plugins/permission-backend/CHANGELOG.md
index b85d177879..978552f3ed 100644
--- a/plugins/permission-backend/CHANGELOG.md
+++ b/plugins/permission-backend/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/plugin-permission-backend
+## 0.5.28-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/errors@1.2.2
+ - @backstage/plugin-permission-common@0.7.8
+ - @backstage/plugin-permission-node@0.7.16-next.0
+
## 0.5.26
### Patch Changes
diff --git a/plugins/permission-backend/package.json b/plugins/permission-backend/package.json
index 184e782782..0833e9e89b 100644
--- a/plugins/permission-backend/package.json
+++ b/plugins/permission-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-permission-backend",
- "version": "0.5.26",
+ "version": "0.5.28-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/permission-node/CHANGELOG.md b/plugins/permission-node/CHANGELOG.md
index 5bdb0edf7b..bcdf5ce358 100644
--- a/plugins/permission-node/CHANGELOG.md
+++ b/plugins/permission-node/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-permission-node
+## 0.7.16-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/errors@1.2.2
+ - @backstage/plugin-permission-common@0.7.8
+
## 0.7.14
### Patch Changes
diff --git a/plugins/permission-node/package.json b/plugins/permission-node/package.json
index c90d011332..3bacf5e3ed 100644
--- a/plugins/permission-node/package.json
+++ b/plugins/permission-node/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-permission-node",
"description": "Common permission and authorization utilities for backend plugins",
- "version": "0.7.14",
+ "version": "0.7.16-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/permission-react/CHANGELOG.md b/plugins/permission-react/CHANGELOG.md
index 45bb4dc7d9..0df727d454 100644
--- a/plugins/permission-react/CHANGELOG.md
+++ b/plugins/permission-react/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-permission-react
+## 0.4.16-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/config@1.1.0
+ - @backstage/plugin-permission-common@0.7.8
+
## 0.4.15
### Patch Changes
diff --git a/plugins/permission-react/package.json b/plugins/permission-react/package.json
index 267cf89f5f..7e79128739 100644
--- a/plugins/permission-react/package.json
+++ b/plugins/permission-react/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-permission-react",
- "version": "0.4.15",
+ "version": "0.4.16-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/playlist-backend/CHANGELOG.md b/plugins/playlist-backend/CHANGELOG.md
index 7d957d259a..0af03356ae 100644
--- a/plugins/playlist-backend/CHANGELOG.md
+++ b/plugins/playlist-backend/CHANGELOG.md
@@ -1,5 +1,22 @@
# @backstage/plugin-playlist-backend
+## 0.3.9-next.0
+
+### Patch Changes
+
+- 9e46f5ff49: Added support to the playlist plugin for the new backend
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/plugin-permission-common@0.7.8
+ - @backstage/plugin-permission-node@0.7.16-next.0
+ - @backstage/plugin-playlist-common@0.1.10
+
## 0.3.7
### Patch Changes
diff --git a/plugins/playlist-backend/README.md b/plugins/playlist-backend/README.md
index c0055ebdf7..b5c9b8797b 100644
--- a/plugins/playlist-backend/README.md
+++ b/plugins/playlist-backend/README.md
@@ -85,3 +85,20 @@ export default async function createPlugin(env: PluginEnvironment): Promise Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).
```ts
+import { BackendFeature } from '@backstage/backend-plugin-api';
import { BackstageIdentityResponse } from '@backstage/plugin-auth-node';
import { ConditionalPolicyDecision } from '@backstage/plugin-permission-common';
import { Conditions } from '@backstage/plugin-permission-node';
@@ -80,6 +81,10 @@ export const playlistConditions: Conditions<{
>;
}>;
+// @public
+const playlistPlugin: () => BackendFeature;
+export default playlistPlugin;
+
// @public (undocumented)
export interface RouterOptions {
// (undocumented)
diff --git a/plugins/playlist-backend/package.json b/plugins/playlist-backend/package.json
index 78a1fa5e69..ac2ec35fb9 100644
--- a/plugins/playlist-backend/package.json
+++ b/plugins/playlist-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-playlist-backend",
- "version": "0.3.7",
+ "version": "0.3.9-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -29,6 +29,7 @@
},
"dependencies": {
"@backstage/backend-common": "workspace:^",
+ "@backstage/backend-plugin-api": "workspace:^",
"@backstage/catalog-client": "workspace:^",
"@backstage/catalog-model": "workspace:^",
"@backstage/config": "workspace:^",
diff --git a/plugins/playlist-backend/src/index.ts b/plugins/playlist-backend/src/index.ts
index eeccd8913f..9081552e00 100644
--- a/plugins/playlist-backend/src/index.ts
+++ b/plugins/playlist-backend/src/index.ts
@@ -26,3 +26,4 @@ export {
isPlaylistPermission,
playlistConditions,
} from './permissions';
+export { playlistPlugin as default } from './plugin';
diff --git a/plugins/playlist-backend/src/plugin.ts b/plugins/playlist-backend/src/plugin.ts
new file mode 100644
index 0000000000..b4d926c05e
--- /dev/null
+++ b/plugins/playlist-backend/src/plugin.ts
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2023 The Backstage Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import {
+ coreServices,
+ createBackendPlugin,
+} from '@backstage/backend-plugin-api';
+import { createRouter } from './service';
+import { loggerToWinstonLogger } from '@backstage/backend-common';
+
+/**
+ * Playlist backend plugin
+ *
+ * @public
+ */
+export const playlistPlugin = createBackendPlugin({
+ pluginId: 'playlist',
+ register(env) {
+ env.registerInit({
+ deps: {
+ http: coreServices.httpRouter,
+ logger: coreServices.logger,
+ database: coreServices.database,
+ identity: coreServices.identity,
+ discovery: coreServices.discovery,
+ permissions: coreServices.permissions,
+ },
+ async init({ http, logger, database, identity, discovery, permissions }) {
+ http.use(
+ await createRouter({
+ logger: loggerToWinstonLogger(logger),
+ database,
+ identity,
+ discovery,
+ permissions,
+ }),
+ );
+ },
+ });
+ },
+});
diff --git a/plugins/playlist/CHANGELOG.md b/plugins/playlist/CHANGELOG.md
index f3ed681214..46888d22f0 100644
--- a/plugins/playlist/CHANGELOG.md
+++ b/plugins/playlist/CHANGELOG.md
@@ -1,5 +1,22 @@
# @backstage/plugin-playlist
+## 0.1.17-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/plugin-permission-react@0.4.16-next.0
+ - @backstage/plugin-search-react@1.7.1-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+ - @backstage/plugin-catalog-common@1.0.16
+ - @backstage/plugin-permission-common@0.7.8
+ - @backstage/plugin-playlist-common@0.1.10
+
## 0.1.16
### Patch Changes
diff --git a/plugins/playlist/api-report.md b/plugins/playlist/api-report.md
index cf0ebe8a37..be7605d1e6 100644
--- a/plugins/playlist/api-report.md
+++ b/plugins/playlist/api-report.md
@@ -101,7 +101,6 @@ export const playlistPlugin: BackstagePlugin<
{
root: RouteRef;
},
- {},
{}
>;
```
diff --git a/plugins/playlist/package.json b/plugins/playlist/package.json
index 5613a61baa..c472d8cb0c 100644
--- a/plugins/playlist/package.json
+++ b/plugins/playlist/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-playlist",
- "version": "0.1.16",
+ "version": "0.1.17-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/proxy-backend/CHANGELOG.md b/plugins/proxy-backend/CHANGELOG.md
index 81319f537b..96693d55d3 100644
--- a/plugins/proxy-backend/CHANGELOG.md
+++ b/plugins/proxy-backend/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-proxy-backend
+## 0.4.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+
## 0.4.0
### Minor Changes
diff --git a/plugins/proxy-backend/package.json b/plugins/proxy-backend/package.json
index 2b98ba54ab..5c2d9e82c5 100644
--- a/plugins/proxy-backend/package.json
+++ b/plugins/proxy-backend/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-proxy-backend",
"description": "A Backstage backend plugin that helps you set up proxy endpoints in the backend",
- "version": "0.4.0",
+ "version": "0.4.2-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/puppetdb/CHANGELOG.md b/plugins/puppetdb/CHANGELOG.md
index 1fc509b29c..c1da915673 100644
--- a/plugins/puppetdb/CHANGELOG.md
+++ b/plugins/puppetdb/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-puppetdb
+## 0.1.8-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+
## 0.1.7
### Patch Changes
diff --git a/plugins/puppetdb/api-report.md b/plugins/puppetdb/api-report.md
index c7d1d0ff0e..890980591f 100644
--- a/plugins/puppetdb/api-report.md
+++ b/plugins/puppetdb/api-report.md
@@ -20,7 +20,7 @@ export const isPuppetDbAvailable: (entity: Entity) => boolean;
export const PuppetDbPage: () => JSX_2.Element;
// @public
-const puppetdbPlugin: BackstagePlugin<{}, {}, {}>;
+const puppetdbPlugin: BackstagePlugin<{}, {}>;
export { puppetdbPlugin as plugin };
export { puppetdbPlugin };
diff --git a/plugins/puppetdb/package.json b/plugins/puppetdb/package.json
index 73c8d5d88a..cb8a9898fd 100644
--- a/plugins/puppetdb/package.json
+++ b/plugins/puppetdb/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-puppetdb",
"description": "Backstage plugin to visualize resource information and Puppet facts from PuppetDB.",
- "version": "0.1.7",
+ "version": "0.1.8-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/rollbar-backend/CHANGELOG.md b/plugins/rollbar-backend/CHANGELOG.md
index 8f6eb0f67c..93b97226df 100644
--- a/plugins/rollbar-backend/CHANGELOG.md
+++ b/plugins/rollbar-backend/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-rollbar-backend
+## 0.1.50-next.0
+
+### Patch Changes
+
+- 407f4284be: ensure rollbar token is hidden
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+
## 0.1.48
### Patch Changes
diff --git a/plugins/rollbar-backend/package.json b/plugins/rollbar-backend/package.json
index 491dcd409c..596a1cf096 100644
--- a/plugins/rollbar-backend/package.json
+++ b/plugins/rollbar-backend/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-rollbar-backend",
"description": "A Backstage backend plugin that integrates towards Rollbar",
- "version": "0.1.48",
+ "version": "0.1.50-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/rollbar/CHANGELOG.md b/plugins/rollbar/CHANGELOG.md
index 77e2631e93..6bd10a118f 100644
--- a/plugins/rollbar/CHANGELOG.md
+++ b/plugins/rollbar/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-rollbar
+## 0.4.25-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+
## 0.4.24
### Patch Changes
diff --git a/plugins/rollbar/api-report.md b/plugins/rollbar/api-report.md
index 45c672e7bb..c59475466f 100644
--- a/plugins/rollbar/api-report.md
+++ b/plugins/rollbar/api-report.md
@@ -196,7 +196,6 @@ const rollbarPlugin: BackstagePlugin<
{
entityContent: RouteRef;
},
- {},
{}
>;
export { rollbarPlugin as plugin };
diff --git a/plugins/rollbar/package.json b/plugins/rollbar/package.json
index 262b51abc0..fb3171d2dc 100644
--- a/plugins/rollbar/package.json
+++ b/plugins/rollbar/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-rollbar",
"description": "A Backstage plugin that integrates towards Rollbar",
- "version": "0.4.24",
+ "version": "0.4.25-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md b/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md
index 7ccbb5e286..a2d833056a 100644
--- a/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md
+++ b/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-scaffolder-backend-module-confluence-to-markdown
+## 0.2.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/plugin-scaffolder-node@0.2.5-next.0
+ - @backstage/config@1.1.0
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+
## 0.2.4
### Patch Changes
diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/package.json b/plugins/scaffolder-backend-module-confluence-to-markdown/package.json
index b1ce79bf1d..9160a70062 100644
--- a/plugins/scaffolder-backend-module-confluence-to-markdown/package.json
+++ b/plugins/scaffolder-backend-module-confluence-to-markdown/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-scaffolder-backend-module-confluence-to-markdown",
"description": "The confluence-to-markdown module for @backstage/plugin-scaffolder-backend",
- "version": "0.2.4",
+ "version": "0.2.6-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md b/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md
index 5662119c27..ee0b07ee8b 100644
--- a/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md
+++ b/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-scaffolder-backend-module-cookiecutter
+## 0.2.29-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/plugin-scaffolder-node@0.2.5-next.0
+ - @backstage/config@1.1.0
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+
## 0.2.27
### Patch Changes
diff --git a/plugins/scaffolder-backend-module-cookiecutter/package.json b/plugins/scaffolder-backend-module-cookiecutter/package.json
index 152b103919..9ef5c6f3ec 100644
--- a/plugins/scaffolder-backend-module-cookiecutter/package.json
+++ b/plugins/scaffolder-backend-module-cookiecutter/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-scaffolder-backend-module-cookiecutter",
"description": "A module for the scaffolder backend that lets you template projects using cookiecutter",
- "version": "0.2.27",
+ "version": "0.2.29-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md b/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md
index 44c9337b17..fbb987bb11 100644
--- a/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md
+++ b/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-scaffolder-backend-module-gitlab
+## 0.2.8-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/plugin-scaffolder-node@0.2.5-next.0
+ - @backstage/config@1.1.0
+ - @backstage/errors@1.2.2
+
## 0.2.6
### Patch Changes
diff --git a/plugins/scaffolder-backend-module-gitlab/package.json b/plugins/scaffolder-backend-module-gitlab/package.json
index e34ee93523..71ee372afc 100644
--- a/plugins/scaffolder-backend-module-gitlab/package.json
+++ b/plugins/scaffolder-backend-module-gitlab/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder-backend-module-gitlab",
- "version": "0.2.6",
+ "version": "0.2.8-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/scaffolder-backend-module-rails/CHANGELOG.md b/plugins/scaffolder-backend-module-rails/CHANGELOG.md
index eed053be6f..bc5965d9be 100644
--- a/plugins/scaffolder-backend-module-rails/CHANGELOG.md
+++ b/plugins/scaffolder-backend-module-rails/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/plugin-scaffolder-backend-module-rails
+## 0.4.22-next.0
+
+### Patch Changes
+
+- de42eebaaf: Bumped dev dependencies `@types/node` and `mock-fs`.
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/plugin-scaffolder-node@0.2.5-next.0
+ - @backstage/config@1.1.0
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+
## 0.4.20
### Patch Changes
diff --git a/plugins/scaffolder-backend-module-rails/package.json b/plugins/scaffolder-backend-module-rails/package.json
index f53072ebc3..586bc2e7dc 100644
--- a/plugins/scaffolder-backend-module-rails/package.json
+++ b/plugins/scaffolder-backend-module-rails/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-scaffolder-backend-module-rails",
"description": "A module for the scaffolder backend that lets you template projects using Rails",
- "version": "0.4.20",
+ "version": "0.4.22-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/scaffolder-backend-module-sentry/CHANGELOG.md b/plugins/scaffolder-backend-module-sentry/CHANGELOG.md
index ad10b1467c..f13f300877 100644
--- a/plugins/scaffolder-backend-module-sentry/CHANGELOG.md
+++ b/plugins/scaffolder-backend-module-sentry/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-scaffolder-backend-module-sentry
+## 0.1.13-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-node@0.2.5-next.0
+ - @backstage/config@1.1.0
+ - @backstage/errors@1.2.2
+
## 0.1.11
### Patch Changes
diff --git a/plugins/scaffolder-backend-module-sentry/package.json b/plugins/scaffolder-backend-module-sentry/package.json
index d735b34666..74e0d7b397 100644
--- a/plugins/scaffolder-backend-module-sentry/package.json
+++ b/plugins/scaffolder-backend-module-sentry/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder-backend-module-sentry",
- "version": "0.1.11",
+ "version": "0.1.13-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md b/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md
index d2df8786c0..14d2ef1c08 100644
--- a/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md
+++ b/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-scaffolder-backend-module-yeoman
+## 0.2.26-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-scaffolder-node@0.2.5-next.0
+ - @backstage/config@1.1.0
+ - @backstage/types@1.1.1
+
## 0.2.24
### Patch Changes
diff --git a/plugins/scaffolder-backend-module-yeoman/package.json b/plugins/scaffolder-backend-module-yeoman/package.json
index 2eec398969..e4e6b2941c 100644
--- a/plugins/scaffolder-backend-module-yeoman/package.json
+++ b/plugins/scaffolder-backend-module-yeoman/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder-backend-module-yeoman",
- "version": "0.2.24",
+ "version": "0.2.26-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/scaffolder-backend/CHANGELOG.md b/plugins/scaffolder-backend/CHANGELOG.md
index 9dd4c120b5..a512a87555 100644
--- a/plugins/scaffolder-backend/CHANGELOG.md
+++ b/plugins/scaffolder-backend/CHANGELOG.md
@@ -1,5 +1,29 @@
# @backstage/plugin-scaffolder-backend
+## 1.17.3-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/plugin-catalog-backend@1.14.0-next.0
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/plugin-scaffolder-node@0.2.5-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.2-next.0
+ - @backstage/plugin-catalog-common@1.0.16
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+ - @backstage/plugin-permission-common@0.7.8
+ - @backstage/plugin-permission-node@0.7.16-next.0
+ - @backstage/plugin-scaffolder-common@1.4.1
+
## 1.17.0
### Minor Changes
diff --git a/plugins/scaffolder-backend/package.json b/plugins/scaffolder-backend/package.json
index 99f6256069..550ad90b47 100644
--- a/plugins/scaffolder-backend/package.json
+++ b/plugins/scaffolder-backend/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-scaffolder-backend",
"description": "The Backstage backend plugin that helps you create new things",
- "version": "1.17.0",
+ "version": "1.17.3-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/scaffolder-node/CHANGELOG.md b/plugins/scaffolder-node/CHANGELOG.md
index 6d21eef023..e4f43dd69e 100644
--- a/plugins/scaffolder-node/CHANGELOG.md
+++ b/plugins/scaffolder-node/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/plugin-scaffolder-node
+## 0.2.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-scaffolder-common@1.4.1
+
## 0.2.3
### Patch Changes
diff --git a/plugins/scaffolder-node/package.json b/plugins/scaffolder-node/package.json
index 694e440ef9..b6d2bde6e9 100644
--- a/plugins/scaffolder-node/package.json
+++ b/plugins/scaffolder-node/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-scaffolder-node",
"description": "The plugin-scaffolder-node module for @backstage/plugin-scaffolder-backend",
- "version": "0.2.3",
+ "version": "0.2.5-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/scaffolder-react/CHANGELOG.md b/plugins/scaffolder-react/CHANGELOG.md
index 3b41c76469..dcb87e1497 100644
--- a/plugins/scaffolder-react/CHANGELOG.md
+++ b/plugins/scaffolder-react/CHANGELOG.md
@@ -1,5 +1,21 @@
# @backstage/plugin-scaffolder-react
+## 1.5.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.5
+ - @backstage/plugin-scaffolder-common@1.4.1
+
## 1.5.5
### Patch Changes
diff --git a/plugins/scaffolder-react/package.json b/plugins/scaffolder-react/package.json
index e6859ad369..eb8d886b9a 100644
--- a/plugins/scaffolder-react/package.json
+++ b/plugins/scaffolder-react/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-scaffolder-react",
"description": "A frontend library that helps other Backstage plugins interact with the Scaffolder",
- "version": "1.5.5",
+ "version": "1.5.6-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/scaffolder/CHANGELOG.md b/plugins/scaffolder/CHANGELOG.md
index 940331aa80..4cb5125f4f 100644
--- a/plugins/scaffolder/CHANGELOG.md
+++ b/plugins/scaffolder/CHANGELOG.md
@@ -1,5 +1,27 @@
# @backstage/plugin-scaffolder
+## 1.15.1-next.0
+
+### Patch Changes
+
+- b337d78c3b: fixed issue related template editor fails with multiple templates per file.
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/integration-react@1.1.20-next.0
+ - @backstage/plugin-scaffolder-react@1.5.6-next.0
+ - @backstage/config@1.1.0
+ - @backstage/plugin-permission-react@0.4.16-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-catalog-common@1.0.16
+ - @backstage/plugin-scaffolder-common@1.4.1
+
## 1.15.0
### Minor Changes
diff --git a/plugins/scaffolder/api-report.md b/plugins/scaffolder/api-report.md
index a776628da5..ddda40d95f 100644
--- a/plugins/scaffolder/api-report.md
+++ b/plugins/scaffolder/api-report.md
@@ -561,8 +561,7 @@ export const scaffolderPlugin: BackstagePlugin<
},
true
>;
- },
- {}
+ }
>;
// @public @deprecated (undocumented)
diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json
index 2e28f70cff..086ef3cea1 100644
--- a/plugins/scaffolder/package.json
+++ b/plugins/scaffolder/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-scaffolder",
"description": "The Backstage plugin that helps you create new things",
- "version": "1.15.0",
+ "version": "1.15.1-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/search-backend-module-catalog/CHANGELOG.md b/plugins/search-backend-module-catalog/CHANGELOG.md
index ed17ffbf63..46f3b4c9de 100644
--- a/plugins/search-backend-module-catalog/CHANGELOG.md
+++ b/plugins/search-backend-module-catalog/CHANGELOG.md
@@ -1,5 +1,23 @@
# @backstage/plugin-search-backend-module-catalog
+## 0.1.9-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/plugin-catalog-common@1.0.16
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+ - @backstage/plugin-permission-common@0.7.8
+ - @backstage/plugin-search-backend-node@1.2.9-next.0
+ - @backstage/plugin-search-common@1.2.6
+
## 0.1.7
### Patch Changes
diff --git a/plugins/search-backend-module-catalog/package.json b/plugins/search-backend-module-catalog/package.json
index 1fb18a303b..11f64cf817 100644
--- a/plugins/search-backend-module-catalog/package.json
+++ b/plugins/search-backend-module-catalog/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-search-backend-module-catalog",
"description": "A module for the search backend that exports catalog modules",
- "version": "0.1.7",
+ "version": "0.1.9-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/search-backend-module-elasticsearch/CHANGELOG.md b/plugins/search-backend-module-elasticsearch/CHANGELOG.md
index 6b0bb7ce1a..f56b1f28da 100644
--- a/plugins/search-backend-module-elasticsearch/CHANGELOG.md
+++ b/plugins/search-backend-module-elasticsearch/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/plugin-search-backend-module-elasticsearch
+## 1.3.8-next.0
+
+### Patch Changes
+
+- 3963d0b885: Ensure that all relevant config fields are properly marked as secret
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/integration-aws-node@0.1.6
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/plugin-search-backend-node@1.2.9-next.0
+ - @backstage/plugin-search-common@1.2.6
+
## 1.3.6
### Patch Changes
diff --git a/plugins/search-backend-module-elasticsearch/package.json b/plugins/search-backend-module-elasticsearch/package.json
index f1c9f39a17..2750e1d2dc 100644
--- a/plugins/search-backend-module-elasticsearch/package.json
+++ b/plugins/search-backend-module-elasticsearch/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-search-backend-module-elasticsearch",
"description": "A module for the search backend that implements search using ElasticSearch",
- "version": "1.3.6",
+ "version": "1.3.8-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/search-backend-module-explore/CHANGELOG.md b/plugins/search-backend-module-explore/CHANGELOG.md
index dfcfa262de..5260222ed3 100644
--- a/plugins/search-backend-module-explore/CHANGELOG.md
+++ b/plugins/search-backend-module-explore/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/plugin-search-backend-module-explore
+## 0.1.9-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/plugin-explore-common@0.0.2
+ - @backstage/plugin-search-backend-node@1.2.9-next.0
+ - @backstage/plugin-search-common@1.2.6
+
## 0.1.7
### Patch Changes
diff --git a/plugins/search-backend-module-explore/package.json b/plugins/search-backend-module-explore/package.json
index 630020a93d..a4a1dcf881 100644
--- a/plugins/search-backend-module-explore/package.json
+++ b/plugins/search-backend-module-explore/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-search-backend-module-explore",
"description": "A module for the search backend that exports explore modules",
- "version": "0.1.7",
+ "version": "0.1.9-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/search-backend-module-pg/CHANGELOG.md b/plugins/search-backend-module-pg/CHANGELOG.md
index e119c76e26..b49fb7aad9 100644
--- a/plugins/search-backend-module-pg/CHANGELOG.md
+++ b/plugins/search-backend-module-pg/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-search-backend-module-pg
+## 0.5.14-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/plugin-search-backend-node@1.2.9-next.0
+ - @backstage/plugin-search-common@1.2.6
+
## 0.5.12
### Patch Changes
diff --git a/plugins/search-backend-module-pg/package.json b/plugins/search-backend-module-pg/package.json
index a411464d52..10536678d5 100644
--- a/plugins/search-backend-module-pg/package.json
+++ b/plugins/search-backend-module-pg/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-search-backend-module-pg",
"description": "A module for the search backend that implements search using PostgreSQL",
- "version": "0.5.12",
+ "version": "0.5.14-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/search-backend-module-techdocs/CHANGELOG.md b/plugins/search-backend-module-techdocs/CHANGELOG.md
index 6a0fd46b02..666fe0a7c3 100644
--- a/plugins/search-backend-module-techdocs/CHANGELOG.md
+++ b/plugins/search-backend-module-techdocs/CHANGELOG.md
@@ -1,5 +1,23 @@
# @backstage/plugin-search-backend-module-techdocs
+## 0.1.9-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/plugin-techdocs-node@1.8.2-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/plugin-catalog-common@1.0.16
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+ - @backstage/plugin-permission-common@0.7.8
+ - @backstage/plugin-search-backend-node@1.2.9-next.0
+ - @backstage/plugin-search-common@1.2.6
+
## 0.1.7
### Patch Changes
diff --git a/plugins/search-backend-module-techdocs/package.json b/plugins/search-backend-module-techdocs/package.json
index fda3d1cd8f..075403d512 100644
--- a/plugins/search-backend-module-techdocs/package.json
+++ b/plugins/search-backend-module-techdocs/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-search-backend-module-techdocs",
"description": "A module for the search backend that exports techdocs modules",
- "version": "0.1.7",
+ "version": "0.1.9-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/search-backend-node/CHANGELOG.md b/plugins/search-backend-node/CHANGELOG.md
index a6374f7701..bfdf91c150 100644
--- a/plugins/search-backend-node/CHANGELOG.md
+++ b/plugins/search-backend-node/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/plugin-search-backend-node
+## 1.2.9-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/errors@1.2.2
+ - @backstage/plugin-permission-common@0.7.8
+ - @backstage/plugin-search-common@1.2.6
+
## 1.2.7
### Patch Changes
diff --git a/plugins/search-backend-node/package.json b/plugins/search-backend-node/package.json
index cc688e7bb6..3e87e29ce9 100644
--- a/plugins/search-backend-node/package.json
+++ b/plugins/search-backend-node/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-search-backend-node",
"description": "A library for Backstage backend plugins that want to interact with the search backend plugin",
- "version": "1.2.7",
+ "version": "1.2.9-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/search-backend/CHANGELOG.md b/plugins/search-backend/CHANGELOG.md
index b7c6873af2..af05809517 100644
--- a/plugins/search-backend/CHANGELOG.md
+++ b/plugins/search-backend/CHANGELOG.md
@@ -1,5 +1,22 @@
# @backstage/plugin-search-backend
+## 1.4.5-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-openapi-utils@0.0.4
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-permission-common@0.7.8
+ - @backstage/plugin-permission-node@0.7.16-next.0
+ - @backstage/plugin-search-backend-node@1.2.9-next.0
+ - @backstage/plugin-search-common@1.2.6
+
## 1.4.3
### Patch Changes
diff --git a/plugins/search-backend/package.json b/plugins/search-backend/package.json
index fc02e552cd..c71356dda3 100644
--- a/plugins/search-backend/package.json
+++ b/plugins/search-backend/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-search-backend",
"description": "The Backstage backend plugin that provides your backstage app with search",
- "version": "1.4.3",
+ "version": "1.4.5-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/search-react/CHANGELOG.md b/plugins/search-react/CHANGELOG.md
index f01b5b0a54..7904129b3e 100644
--- a/plugins/search-react/CHANGELOG.md
+++ b/plugins/search-react/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-search-react
+## 1.7.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/theme@0.4.2
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.5
+ - @backstage/plugin-search-common@1.2.6
+
## 1.7.0
### Minor Changes
diff --git a/plugins/search-react/package.json b/plugins/search-react/package.json
index 9ed330c37b..4454d44574 100644
--- a/plugins/search-react/package.json
+++ b/plugins/search-react/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-search-react",
- "version": "1.7.0",
+ "version": "1.7.1-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/search/CHANGELOG.md b/plugins/search/CHANGELOG.md
index 24ea0920c7..0a5b57b7a2 100644
--- a/plugins/search/CHANGELOG.md
+++ b/plugins/search/CHANGELOG.md
@@ -1,5 +1,22 @@
# @backstage/plugin-search
+## 1.4.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/config@1.1.0
+ - @backstage/plugin-search-react@1.7.1-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+ - @backstage/types@1.1.1
+ - @backstage/version-bridge@1.0.5
+ - @backstage/plugin-search-common@1.2.6
+
## 1.4.0
### Minor Changes
diff --git a/plugins/search/api-report.md b/plugins/search/api-report.md
index 616b63bd31..64f596ab11 100644
--- a/plugins/search/api-report.md
+++ b/plugins/search/api-report.md
@@ -71,7 +71,6 @@ const searchPlugin: BackstagePlugin<
{
root: RouteRef;
},
- {},
{}
>;
export { searchPlugin as plugin };
diff --git a/plugins/search/package.json b/plugins/search/package.json
index d31a9e0c1f..77c3bd4727 100644
--- a/plugins/search/package.json
+++ b/plugins/search/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-search",
"description": "The Backstage plugin that provides your backstage app with search",
- "version": "1.4.0",
+ "version": "1.4.1-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/sentry/CHANGELOG.md b/plugins/sentry/CHANGELOG.md
index dcb5684f9a..5f28cbf0fd 100644
--- a/plugins/sentry/CHANGELOG.md
+++ b/plugins/sentry/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-sentry
+## 0.5.10-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+
## 0.5.9
### Patch Changes
diff --git a/plugins/sentry/api-report.md b/plugins/sentry/api-report.md
index 43a5caa0bd..dc5fb69556 100644
--- a/plugins/sentry/api-report.md
+++ b/plugins/sentry/api-report.md
@@ -138,7 +138,6 @@ const sentryPlugin: BackstagePlugin<
{
root: RouteRef;
},
- {},
{}
>;
export { sentryPlugin as plugin };
diff --git a/plugins/sentry/package.json b/plugins/sentry/package.json
index be9230572d..242e26ff51 100644
--- a/plugins/sentry/package.json
+++ b/plugins/sentry/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-sentry",
"description": "A Backstage plugin that integrates towards Sentry",
- "version": "0.5.9",
+ "version": "0.5.10-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/shortcuts/CHANGELOG.md b/plugins/shortcuts/CHANGELOG.md
index c8774a9fcb..1e168daa77 100644
--- a/plugins/shortcuts/CHANGELOG.md
+++ b/plugins/shortcuts/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-shortcuts
+## 0.3.15-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/theme@0.4.2
+ - @backstage/types@1.1.1
+
## 0.3.14
### Patch Changes
diff --git a/plugins/shortcuts/api-report.md b/plugins/shortcuts/api-report.md
index ae8225d5b5..64d9d15156 100644
--- a/plugins/shortcuts/api-report.md
+++ b/plugins/shortcuts/api-report.md
@@ -58,7 +58,7 @@ export const Shortcuts: (props: ShortcutsProps) => JSX_2.Element;
export const shortcutsApiRef: ApiRef;
// @public (undocumented)
-export const shortcutsPlugin: BackstagePlugin<{}, {}, {}>;
+export const shortcutsPlugin: BackstagePlugin<{}, {}>;
// @public
export interface ShortcutsProps {
diff --git a/plugins/shortcuts/package.json b/plugins/shortcuts/package.json
index a344e111c6..994dabbd1d 100644
--- a/plugins/shortcuts/package.json
+++ b/plugins/shortcuts/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-shortcuts",
"description": "A Backstage plugin that provides a shortcuts feature to the sidebar",
- "version": "0.3.14",
+ "version": "0.3.15-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/sonarqube-backend/CHANGELOG.md b/plugins/sonarqube-backend/CHANGELOG.md
index f7353f9985..a7b8b4e171 100644
--- a/plugins/sonarqube-backend/CHANGELOG.md
+++ b/plugins/sonarqube-backend/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-sonarqube-backend
+## 0.2.7-next.0
+
+### Patch Changes
+
+- a5d592d0ad: Added support for the [new backend system](https://backstage.io/docs/backend-system/)
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/errors@1.2.2
+
## 0.2.5
### Patch Changes
diff --git a/plugins/sonarqube-backend/README.md b/plugins/sonarqube-backend/README.md
index b417fea7c4..1a1e2ae2dd 100644
--- a/plugins/sonarqube-backend/README.md
+++ b/plugins/sonarqube-backend/README.md
@@ -2,6 +2,20 @@
Welcome to the sonarqube-backend backend plugin!
+## New Backend System
+
+The Sonarqube backend plugin has support for the [new backend system](https://backstage.io/docs/backend-system/), here's how you can set that up:
+
+In your `packages/backend/src/index.ts` make the following changes:
+
+```diff
+ import { createBackend } from '@backstage/backend-defaults';
+ const backend = createBackend();
+ // ... other feature additions
++ backend.add(import('@backstage/plugin-sonarqube-backend');
+ backend.start();
+```
+
## Integrating into a backstage instance
This plugin needs to be added to an existing backstage instance.
diff --git a/plugins/sonarqube-backend/api-report.md b/plugins/sonarqube-backend/api-report.md
index 535db37185..c3c684f9d4 100644
--- a/plugins/sonarqube-backend/api-report.md
+++ b/plugins/sonarqube-backend/api-report.md
@@ -3,6 +3,7 @@
> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).
```ts
+import { BackendFeature } from '@backstage/backend-plugin-api';
import { Config } from '@backstage/config';
import express from 'express';
import { Logger } from 'winston';
@@ -72,5 +73,9 @@ export interface SonarqubeMeasure {
value: string;
}
+// @public
+const sonarqubePlugin: () => BackendFeature;
+export default sonarqubePlugin;
+
// (No @packageDocumentation comment for this package)
```
diff --git a/plugins/sonarqube-backend/package.json b/plugins/sonarqube-backend/package.json
index 2b1d8182c8..89c96bfcf4 100644
--- a/plugins/sonarqube-backend/package.json
+++ b/plugins/sonarqube-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-sonarqube-backend",
- "version": "0.2.5",
+ "version": "0.2.7-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -29,6 +29,7 @@
},
"dependencies": {
"@backstage/backend-common": "workspace:^",
+ "@backstage/backend-plugin-api": "workspace:^",
"@backstage/config": "workspace:^",
"@backstage/errors": "workspace:^",
"@types/express": "*",
diff --git a/plugins/sonarqube-backend/src/index.ts b/plugins/sonarqube-backend/src/index.ts
index c91aef09f8..4bb82df34e 100644
--- a/plugins/sonarqube-backend/src/index.ts
+++ b/plugins/sonarqube-backend/src/index.ts
@@ -16,3 +16,4 @@
export * from './service/router';
export * from './service/sonarqubeInfoProvider';
+export { sonarqubePlugin as default } from './plugin';
diff --git a/packages/app/cypress/support/commands.js b/plugins/sonarqube-backend/src/plugin.test.tsx
similarity index 77%
rename from packages/app/cypress/support/commands.js
rename to plugins/sonarqube-backend/src/plugin.test.tsx
index f26d2c999b..9b26a88862 100644
--- a/packages/app/cypress/support/commands.js
+++ b/plugins/sonarqube-backend/src/plugin.test.tsx
@@ -13,7 +13,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-Cypress.Commands.add('enterAsGuest', () => {
- cy.visit('/');
- cy.get('button').contains('Enter').click();
+import { sonarqubePlugin } from './plugin';
+
+describe('sonarqube', () => {
+ it('should export the sonarqube plugin', () => {
+ expect(sonarqubePlugin).toBeDefined();
+ });
});
diff --git a/plugins/sonarqube-backend/src/plugin.ts b/plugins/sonarqube-backend/src/plugin.ts
new file mode 100644
index 0000000000..fd4fb77fb4
--- /dev/null
+++ b/plugins/sonarqube-backend/src/plugin.ts
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2023 The Backstage Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { loggerToWinstonLogger } from '@backstage/backend-common';
+import {
+ createBackendPlugin,
+ coreServices,
+} from '@backstage/backend-plugin-api';
+import { DefaultSonarqubeInfoProvider } from './service/sonarqubeInfoProvider';
+import { createRouter } from './service/router';
+
+/**
+ * Sonarqube backend plugin
+ *
+ * @public
+ */
+export const sonarqubePlugin = createBackendPlugin({
+ pluginId: 'sonarqube',
+ register(env) {
+ env.registerInit({
+ deps: {
+ logger: coreServices.logger,
+ config: coreServices.rootConfig,
+ httpRouter: coreServices.httpRouter,
+ },
+ async init({ logger, config, httpRouter }) {
+ const winstonLogger = loggerToWinstonLogger(logger);
+ httpRouter.use(
+ await createRouter({
+ /**
+ * Logger for logging purposes
+ */
+ logger: winstonLogger,
+ /**
+ * Info provider to be able to get all necessary information for the APIs
+ */
+ sonarqubeInfoProvider:
+ DefaultSonarqubeInfoProvider.fromConfig(config),
+ }),
+ );
+ },
+ });
+ },
+});
diff --git a/plugins/sonarqube-react/CHANGELOG.md b/plugins/sonarqube-react/CHANGELOG.md
index e8fdd45a40..5fea1d2e9e 100644
--- a/plugins/sonarqube-react/CHANGELOG.md
+++ b/plugins/sonarqube-react/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/plugin-sonarqube-react
+## 0.1.9-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/catalog-model@1.4.2
+
## 0.1.8
### Patch Changes
diff --git a/plugins/sonarqube-react/package.json b/plugins/sonarqube-react/package.json
index 7ffb55ad69..6e1adb42f9 100644
--- a/plugins/sonarqube-react/package.json
+++ b/plugins/sonarqube-react/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-sonarqube-react",
- "version": "0.1.8",
+ "version": "0.1.9-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/sonarqube/CHANGELOG.md b/plugins/sonarqube/CHANGELOG.md
index 178058ef03..0fa5143c1a 100644
--- a/plugins/sonarqube/CHANGELOG.md
+++ b/plugins/sonarqube/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-sonarqube
+## 0.7.6-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+ - @backstage/plugin-sonarqube-react@0.1.9-next.0
+
## 0.7.5
### Patch Changes
diff --git a/plugins/sonarqube/api-report.md b/plugins/sonarqube/api-report.md
index 72f2eb1c09..32894b6eeb 100644
--- a/plugins/sonarqube/api-report.md
+++ b/plugins/sonarqube/api-report.md
@@ -71,5 +71,5 @@ export type SonarQubeContentPageProps = {
};
// @public (undocumented)
-export const sonarQubePlugin: BackstagePlugin<{}, {}, {}>;
+export const sonarQubePlugin: BackstagePlugin<{}, {}>;
```
diff --git a/plugins/sonarqube/package.json b/plugins/sonarqube/package.json
index 238423fc98..780b81468a 100644
--- a/plugins/sonarqube/package.json
+++ b/plugins/sonarqube/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-sonarqube",
"description": "",
- "version": "0.7.5",
+ "version": "0.7.6-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/splunk-on-call/CHANGELOG.md b/plugins/splunk-on-call/CHANGELOG.md
index 3360ebdcae..76bd4b9ddb 100644
--- a/plugins/splunk-on-call/CHANGELOG.md
+++ b/plugins/splunk-on-call/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-splunk-on-call
+## 0.4.14-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/theme@0.4.2
+
## 0.4.13
### Patch Changes
diff --git a/plugins/splunk-on-call/api-report.md b/plugins/splunk-on-call/api-report.md
index 4c054e8a1a..d80ee6f874 100644
--- a/plugins/splunk-on-call/api-report.md
+++ b/plugins/splunk-on-call/api-report.md
@@ -240,7 +240,6 @@ const splunkOnCallPlugin: BackstagePlugin<
{
root: RouteRef;
},
- {},
{}
>;
export { splunkOnCallPlugin as plugin };
diff --git a/plugins/splunk-on-call/package.json b/plugins/splunk-on-call/package.json
index d86d555fe1..ab6155e96c 100644
--- a/plugins/splunk-on-call/package.json
+++ b/plugins/splunk-on-call/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-splunk-on-call",
"description": "A Backstage plugin that integrates towards Splunk On-Call",
- "version": "0.4.13",
+ "version": "0.4.14-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/stack-overflow-backend/CHANGELOG.md b/plugins/stack-overflow-backend/CHANGELOG.md
index f5922da46c..6eb8d27731 100644
--- a/plugins/stack-overflow-backend/CHANGELOG.md
+++ b/plugins/stack-overflow-backend/CHANGELOG.md
@@ -1,5 +1,14 @@
# @backstage/plugin-stack-overflow-backend
+## 0.2.9-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/plugin-search-common@1.2.6
+
## 0.2.7
### Patch Changes
diff --git a/plugins/stack-overflow-backend/package.json b/plugins/stack-overflow-backend/package.json
index 2825bfc310..f090c8d25f 100644
--- a/plugins/stack-overflow-backend/package.json
+++ b/plugins/stack-overflow-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-stack-overflow-backend",
- "version": "0.2.7",
+ "version": "0.2.9-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/stack-overflow/CHANGELOG.md b/plugins/stack-overflow/CHANGELOG.md
index 857aa92607..12cf74570e 100644
--- a/plugins/stack-overflow/CHANGELOG.md
+++ b/plugins/stack-overflow/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/plugin-stack-overflow
+## 0.1.21-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/config@1.1.0
+ - @backstage/plugin-home-react@0.1.4-next.0
+ - @backstage/plugin-search-react@1.7.1-next.0
+ - @backstage/theme@0.4.2
+ - @backstage/plugin-search-common@1.2.6
+
## 0.1.20
### Patch Changes
diff --git a/plugins/stack-overflow/api-report.md b/plugins/stack-overflow/api-report.md
index 4277aaac24..293c2ac226 100644
--- a/plugins/stack-overflow/api-report.md
+++ b/plugins/stack-overflow/api-report.md
@@ -32,7 +32,7 @@ export const stackOverflowApiRef: ApiRef;
export const StackOverflowIcon: () => React_2.JSX.Element;
// @public
-export const stackOverflowPlugin: BackstagePlugin<{}, {}, {}>;
+export const stackOverflowPlugin: BackstagePlugin<{}, {}>;
// @public
export type StackOverflowQuestion = {
diff --git a/plugins/stack-overflow/package.json b/plugins/stack-overflow/package.json
index 2e211987c4..7be47012e8 100644
--- a/plugins/stack-overflow/package.json
+++ b/plugins/stack-overflow/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-stack-overflow",
- "version": "0.1.20",
+ "version": "0.1.21-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/stackstorm/CHANGELOG.md b/plugins/stackstorm/CHANGELOG.md
index fcb1dfed42..c8056438d7 100644
--- a/plugins/stackstorm/CHANGELOG.md
+++ b/plugins/stackstorm/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-stackstorm
+## 0.1.7-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+
## 0.1.6
### Patch Changes
diff --git a/plugins/stackstorm/api-report.md b/plugins/stackstorm/api-report.md
index f6279be1bd..14f09c3202 100644
--- a/plugins/stackstorm/api-report.md
+++ b/plugins/stackstorm/api-report.md
@@ -25,7 +25,6 @@ export const stackstormPlugin: BackstagePlugin<
{
root: RouteRef;
},
- {},
{}
>;
```
diff --git a/plugins/stackstorm/package.json b/plugins/stackstorm/package.json
index df9a9f1d41..a65e8692e2 100644
--- a/plugins/stackstorm/package.json
+++ b/plugins/stackstorm/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-stackstorm",
"description": "A Backstage plugin that integrates towards StackStorm",
- "version": "0.1.6",
+ "version": "0.1.7-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md b/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md
index 78a66da5a4..a884f1dfc7 100644
--- a/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md
+++ b/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-tech-insights-backend-module-jsonfc
+## 0.1.37-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/errors@1.2.2
+ - @backstage/plugin-tech-insights-common@0.2.12
+ - @backstage/plugin-tech-insights-node@0.4.11-next.0
+
## 0.1.35
### Patch Changes
diff --git a/plugins/tech-insights-backend-module-jsonfc/package.json b/plugins/tech-insights-backend-module-jsonfc/package.json
index 65e94067e2..8823de7697 100644
--- a/plugins/tech-insights-backend-module-jsonfc/package.json
+++ b/plugins/tech-insights-backend-module-jsonfc/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-tech-insights-backend-module-jsonfc",
- "version": "0.1.35",
+ "version": "0.1.37-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/tech-insights-backend/CHANGELOG.md b/plugins/tech-insights-backend/CHANGELOG.md
index 368490c8bb..fe3f4ce37c 100644
--- a/plugins/tech-insights-backend/CHANGELOG.md
+++ b/plugins/tech-insights-backend/CHANGELOG.md
@@ -1,5 +1,21 @@
# @backstage/plugin-tech-insights-backend
+## 0.5.19-next.0
+
+### Patch Changes
+
+- cc7dddfa7f: Increase the maximum allowed length of an entity filter for tech insights fact schemas.
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-tech-insights-common@0.2.12
+ - @backstage/plugin-tech-insights-node@0.4.11-next.0
+
## 0.5.17
### Patch Changes
diff --git a/cypress/src/integration/user/logout.spec.ts b/plugins/tech-insights-backend/migrations/20230925145017_increase_filter_fact_schemas_size.js
similarity index 52%
rename from cypress/src/integration/user/logout.spec.ts
rename to plugins/tech-insights-backend/migrations/20230925145017_increase_filter_fact_schemas_size.js
index a3aea9d6a8..848fb25777 100644
--- a/cypress/src/integration/user/logout.spec.ts
+++ b/plugins/tech-insights-backend/migrations/20230925145017_increase_filter_fact_schemas_size.js
@@ -1,5 +1,5 @@
/*
- * Copyright 2020 The Backstage Authors
+ * Copyright 2023 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -13,23 +13,25 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-///
-import 'os';
-describe('Logout', () => {
- before(() => {
- cy.loginAsGuest();
+const factSchemasTable = 'fact_schemas';
+
+/**
+ * @param { import("knex").Knex } knex
+ * @returns { Promise }
+ */
+exports.up = async function up(knex) {
+ await knex.schema.alterTable(factSchemasTable, table => {
+ table.text('entityFilter').alter();
});
- it('should be able to logout', () => {
- cy.visit('/settings');
- cy.get('[data-testid="user-settings-menu"]').click();
- return cy
- .get('[data-testid="sign-out"]')
- .click()
- .then(() => {
- return expect(
- localStorage.getItem('@backstage/core:SignInPage:provider'),
- ).to.be.null;
- });
+};
+
+/**
+ * @param { import("knex").Knex } knex
+ * @returns { Promise }
+ */
+exports.down = async function down() {
+ await knex.schema.alterTable(factSchemasTable, table => {
+ table.string('entityFilter').alter();
});
-});
+};
diff --git a/plugins/tech-insights-backend/package.json b/plugins/tech-insights-backend/package.json
index 2aa1a4793f..2b5a427eef 100644
--- a/plugins/tech-insights-backend/package.json
+++ b/plugins/tech-insights-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-tech-insights-backend",
- "version": "0.5.17",
+ "version": "0.5.19-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/tech-insights-node/CHANGELOG.md b/plugins/tech-insights-node/CHANGELOG.md
index a2669c4e4a..2a29e65bf2 100644
--- a/plugins/tech-insights-node/CHANGELOG.md
+++ b/plugins/tech-insights-node/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-tech-insights-node
+## 0.4.11-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/types@1.1.1
+ - @backstage/plugin-tech-insights-common@0.2.12
+
## 0.4.9
### Patch Changes
diff --git a/plugins/tech-insights-node/package.json b/plugins/tech-insights-node/package.json
index 0dae5947f1..80befca1d1 100644
--- a/plugins/tech-insights-node/package.json
+++ b/plugins/tech-insights-node/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-tech-insights-node",
- "version": "0.4.9",
+ "version": "0.4.11-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/tech-insights/CHANGELOG.md b/plugins/tech-insights/CHANGELOG.md
index 56648e0cda..83bd2f6d1c 100644
--- a/plugins/tech-insights/CHANGELOG.md
+++ b/plugins/tech-insights/CHANGELOG.md
@@ -1,5 +1,19 @@
# @backstage/plugin-tech-insights
+## 0.3.17-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+ - @backstage/types@1.1.1
+ - @backstage/plugin-tech-insights-common@0.2.12
+
## 0.3.16
### Patch Changes
diff --git a/plugins/tech-insights/api-report.md b/plugins/tech-insights/api-report.md
index 14fe512ba0..92f66c14b3 100644
--- a/plugins/tech-insights/api-report.md
+++ b/plugins/tech-insights/api-report.md
@@ -125,7 +125,6 @@ export const techInsightsPlugin: BackstagePlugin<
{
root: RouteRef;
},
- {},
{}
>;
diff --git a/plugins/tech-insights/package.json b/plugins/tech-insights/package.json
index d3ae234abc..a0f74ff425 100644
--- a/plugins/tech-insights/package.json
+++ b/plugins/tech-insights/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-tech-insights",
- "version": "0.3.16",
+ "version": "0.3.17-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/tech-radar/CHANGELOG.md b/plugins/tech-radar/CHANGELOG.md
index 385b536004..48369b1e49 100644
--- a/plugins/tech-radar/CHANGELOG.md
+++ b/plugins/tech-radar/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-tech-radar
+## 0.6.9-next.0
+
+### Patch Changes
+
+- c09d2fa1d6: Added experimental support for the declarative integration.
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/frontend-plugin-api@0.1.1-next.0
+ - @backstage/theme@0.4.2
+
## 0.6.8
### Patch Changes
diff --git a/plugins/tech-radar/alpha-api-report.md b/plugins/tech-radar/alpha-api-report.md
new file mode 100644
index 0000000000..c54f692982
--- /dev/null
+++ b/plugins/tech-radar/alpha-api-report.md
@@ -0,0 +1,24 @@
+## API Report File for "@backstage/plugin-tech-radar"
+
+> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).
+
+```ts
+import { BackstagePlugin } from '@backstage/frontend-plugin-api';
+import { Extension } from '@backstage/frontend-plugin-api';
+
+// @alpha (undocumented)
+const _default: BackstagePlugin;
+export default _default;
+
+// @alpha (undocumented)
+export const TechRadarPage: Extension<{
+ height: number;
+ width: number;
+ title: string;
+ path: string;
+ subtitle: string;
+ pageTitle: string;
+}>;
+
+// (No @packageDocumentation comment for this package)
+```
diff --git a/plugins/tech-radar/api-report.md b/plugins/tech-radar/api-report.md
index f55f0ee39e..178fc202cd 100644
--- a/plugins/tech-radar/api-report.md
+++ b/plugins/tech-radar/api-report.md
@@ -106,7 +106,6 @@ const techRadarPlugin: BackstagePlugin<
{
root: RouteRef;
},
- {},
{}
>;
export { techRadarPlugin as plugin };
diff --git a/plugins/tech-radar/package.json b/plugins/tech-radar/package.json
index 59b776d319..7505fa0813 100644
--- a/plugins/tech-radar/package.json
+++ b/plugins/tech-radar/package.json
@@ -1,14 +1,12 @@
{
"name": "@backstage/plugin-tech-radar",
"description": "A Backstage plugin that lets you display a Tech Radar for your organization",
- "version": "0.6.8",
+ "version": "0.6.9-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
"publishConfig": {
- "access": "public",
- "main": "dist/index.esm.js",
- "types": "dist/index.d.ts"
+ "access": "public"
},
"backstage": {
"role": "frontend-plugin"
@@ -22,6 +20,21 @@
"keywords": [
"backstage"
],
+ "exports": {
+ ".": "./src/index.ts",
+ "./alpha": "./src/alpha.tsx",
+ "./package.json": "./package.json"
+ },
+ "typesVersions": {
+ "*": {
+ "alpha": [
+ "src/alpha.tsx"
+ ],
+ "package.json": [
+ "package.json"
+ ]
+ }
+ },
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
@@ -35,6 +48,7 @@
"dependencies": {
"@backstage/core-components": "workspace:^",
"@backstage/core-plugin-api": "workspace:^",
+ "@backstage/frontend-plugin-api": "workspace:^",
"@backstage/theme": "workspace:^",
"@material-ui/core": "^4.12.2",
"@material-ui/icons": "^4.9.1",
diff --git a/plugins/tech-radar/src/alpha.tsx b/plugins/tech-radar/src/alpha.tsx
new file mode 100644
index 0000000000..6a2ec882ba
--- /dev/null
+++ b/plugins/tech-radar/src/alpha.tsx
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2023 The Backstage Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { createApiFactory, createRouteRef } from '@backstage/core-plugin-api';
+import {
+ createApiExtension,
+ createPageExtension,
+ createPlugin,
+ createSchemaFromZod,
+} from '@backstage/frontend-plugin-api';
+import React from 'react';
+import { techRadarApiRef } from './api';
+import { SampleTechRadarApi } from './sample';
+
+const techRadarRouteRef = createRouteRef({ id: 'plugin.techradar.page' });
+
+/** @alpha */
+export const TechRadarPage = createPageExtension({
+ id: 'plugin.techradar.page',
+ defaultPath: '/tech-radar',
+ routeRef: techRadarRouteRef,
+ configSchema: createSchemaFromZod(z =>
+ z.object({
+ title: z.string().default('Tech Radar'),
+ subtitle: z
+ .string()
+ .default('Pick the recommended technologies for your projects'),
+ pageTitle: z.string().default('Company Radar'),
+ path: z.string().default('/tech-radar'),
+ width: z.number().default(1500),
+ height: z.number().default(800),
+ }),
+ ),
+ loader: ({ config }) =>
+ import('./components').then(m => ),
+});
+
+const sampleTechRadarApi = createApiExtension({
+ api: techRadarApiRef,
+ factory() {
+ return createApiFactory(techRadarApiRef, new SampleTechRadarApi());
+ },
+});
+
+/** @alpha */
+export default createPlugin({
+ id: 'tech-radar',
+ extensions: [TechRadarPage, sampleTechRadarApi],
+});
diff --git a/plugins/techdocs-addons-test-utils/CHANGELOG.md b/plugins/techdocs-addons-test-utils/CHANGELOG.md
index 7c1c5eb0e3..812543f3c8 100644
--- a/plugins/techdocs-addons-test-utils/CHANGELOG.md
+++ b/plugins/techdocs-addons-test-utils/CHANGELOG.md
@@ -1,5 +1,21 @@
# @backstage/plugin-techdocs-addons-test-utils
+## 1.0.22-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/test-utils@1.4.4-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/plugin-catalog@1.14.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/integration-react@1.1.20-next.0
+ - @backstage/plugin-techdocs@1.7.1-next.0
+ - @backstage/core-app-api@1.10.1-next.0
+ - @backstage/plugin-search-react@1.7.1-next.0
+ - @backstage/plugin-techdocs-react@1.1.12-next.0
+ - @backstage/theme@0.4.2
+
## 1.0.21
### Patch Changes
diff --git a/plugins/techdocs-addons-test-utils/package.json b/plugins/techdocs-addons-test-utils/package.json
index af016f8c32..0a88a3d99f 100644
--- a/plugins/techdocs-addons-test-utils/package.json
+++ b/plugins/techdocs-addons-test-utils/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-techdocs-addons-test-utils",
- "version": "1.0.21",
+ "version": "1.0.22-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/techdocs-backend/CHANGELOG.md b/plugins/techdocs-backend/CHANGELOG.md
index 55b6aefe3f..7566b7baff 100644
--- a/plugins/techdocs-backend/CHANGELOG.md
+++ b/plugins/techdocs-backend/CHANGELOG.md
@@ -1,5 +1,23 @@
# @backstage/plugin-techdocs-backend
+## 1.7.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/plugin-techdocs-node@1.8.2-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/plugin-catalog-common@1.0.16
+ - @backstage/plugin-permission-common@0.7.8
+ - @backstage/plugin-search-backend-module-techdocs@0.1.9-next.0
+ - @backstage/plugin-search-common@1.2.6
+
## 1.7.0
### Minor Changes
diff --git a/plugins/techdocs-backend/package.json b/plugins/techdocs-backend/package.json
index f4e13111dc..935990c305 100644
--- a/plugins/techdocs-backend/package.json
+++ b/plugins/techdocs-backend/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-techdocs-backend",
"description": "The Backstage backend plugin that renders technical documentation for your components",
- "version": "1.7.0",
+ "version": "1.7.2-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/techdocs-module-addons-contrib/CHANGELOG.md b/plugins/techdocs-module-addons-contrib/CHANGELOG.md
index 68bf1fce2e..3f79ff32b8 100644
--- a/plugins/techdocs-module-addons-contrib/CHANGELOG.md
+++ b/plugins/techdocs-module-addons-contrib/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-techdocs-module-addons-contrib
+## 1.1.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/integration-react@1.1.20-next.0
+ - @backstage/plugin-techdocs-react@1.1.12-next.0
+ - @backstage/theme@0.4.2
+
## 1.1.0
### Minor Changes
diff --git a/plugins/techdocs-module-addons-contrib/api-report.md b/plugins/techdocs-module-addons-contrib/api-report.md
index c242bb02f2..48e6b2bcdc 100644
--- a/plugins/techdocs-module-addons-contrib/api-report.md
+++ b/plugins/techdocs-module-addons-contrib/api-report.md
@@ -34,7 +34,7 @@ export type ReportIssueTemplateBuilder = (options: {
}) => ReportIssueTemplate;
// @public
-export const techdocsModuleAddonsContribPlugin: BackstagePlugin<{}, {}, {}>;
+export const techdocsModuleAddonsContribPlugin: BackstagePlugin<{}, {}>;
// @public
export const TextSize: () => JSX.Element | null;
diff --git a/plugins/techdocs-module-addons-contrib/package.json b/plugins/techdocs-module-addons-contrib/package.json
index 6ffb5c4afa..933f18eb48 100644
--- a/plugins/techdocs-module-addons-contrib/package.json
+++ b/plugins/techdocs-module-addons-contrib/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-techdocs-module-addons-contrib",
"description": "Plugin module for contributed TechDocs Addons",
- "version": "1.1.0",
+ "version": "1.1.1-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/techdocs-node/CHANGELOG.md b/plugins/techdocs-node/CHANGELOG.md
index 06d0d88fae..dca68479be 100644
--- a/plugins/techdocs-node/CHANGELOG.md
+++ b/plugins/techdocs-node/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/plugin-techdocs-node
+## 1.8.2-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/integration-aws-node@0.1.6
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/plugin-search-common@1.2.6
+
## 1.8.0
### Minor Changes
diff --git a/plugins/techdocs-node/package.json b/plugins/techdocs-node/package.json
index 28de8a94fd..35feb3b0b4 100644
--- a/plugins/techdocs-node/package.json
+++ b/plugins/techdocs-node/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-techdocs-node",
"description": "Common node.js functionalities for TechDocs, to be shared between techdocs-backend plugin and techdocs-cli",
- "version": "1.8.0",
+ "version": "1.8.2-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"publishConfig": {
diff --git a/plugins/techdocs-react/CHANGELOG.md b/plugins/techdocs-react/CHANGELOG.md
index 9e14cdbf36..f14e5b5a60 100644
--- a/plugins/techdocs-react/CHANGELOG.md
+++ b/plugins/techdocs-react/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-techdocs-react
+## 1.1.12-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/config@1.1.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/version-bridge@1.0.5
+
## 1.1.11
### Patch Changes
diff --git a/plugins/techdocs-react/package.json b/plugins/techdocs-react/package.json
index c07283c0b4..79ef7241f0 100644
--- a/plugins/techdocs-react/package.json
+++ b/plugins/techdocs-react/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-techdocs-react",
"description": "Shared frontend utilities for TechDocs and Addons",
- "version": "1.1.11",
+ "version": "1.1.12-next.0",
"publishConfig": {
"access": "public",
"main": "dist/index.esm.js",
diff --git a/plugins/techdocs/CHANGELOG.md b/plugins/techdocs/CHANGELOG.md
index e834585259..e2256c8f15 100644
--- a/plugins/techdocs/CHANGELOG.md
+++ b/plugins/techdocs/CHANGELOG.md
@@ -1,5 +1,23 @@
# @backstage/plugin-techdocs
+## 1.7.1-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/integration-react@1.1.20-next.0
+ - @backstage/config@1.1.0
+ - @backstage/plugin-search-react@1.7.1-next.0
+ - @backstage/plugin-techdocs-react@1.1.12-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+ - @backstage/plugin-search-common@1.2.6
+
## 1.7.0
### Minor Changes
diff --git a/plugins/techdocs/api-report.md b/plugins/techdocs/api-report.md
index 3207a16f87..f351996654 100644
--- a/plugins/techdocs/api-report.md
+++ b/plugins/techdocs/api-report.md
@@ -79,6 +79,7 @@ export const DocsTable: {
columns: {
createNameColumn(): TableColumn;
createOwnerColumn(): TableColumn;
+ createKindColumn(): TableColumn;
createTypeColumn(): TableColumn;
};
actions: {
@@ -142,6 +143,7 @@ export const EntityListDocsTable: {
columns: {
createNameColumn(): TableColumn;
createOwnerColumn(): TableColumn;
+ createKindColumn(): TableColumn;
createTypeColumn(): TableColumn;
};
actions: {
@@ -318,7 +320,6 @@ const techdocsPlugin: BackstagePlugin<
}>;
entityContent: RouteRef;
},
- {},
{}
>;
export { techdocsPlugin as plugin };
diff --git a/plugins/techdocs/package.json b/plugins/techdocs/package.json
index a1f26694f8..7a34577f01 100644
--- a/plugins/techdocs/package.json
+++ b/plugins/techdocs/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-techdocs",
"description": "The Backstage plugin that renders technical documentation for your components",
- "version": "1.7.0",
+ "version": "1.7.1-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/techdocs/src/home/components/Tables/DocsTable.tsx b/plugins/techdocs/src/home/components/Tables/DocsTable.tsx
index 5e5b41ee3e..03ba442578 100644
--- a/plugins/techdocs/src/home/components/Tables/DocsTable.tsx
+++ b/plugins/techdocs/src/home/components/Tables/DocsTable.tsx
@@ -17,16 +17,16 @@
import React from 'react';
import useCopyToClipboard from 'react-use/lib/useCopyToClipboard';
-import { useRouteRef, useApi, configApiRef } from '@backstage/core-plugin-api';
+import { configApiRef, useApi, useRouteRef } from '@backstage/core-plugin-api';
import { Entity, RELATION_OWNED_BY } from '@backstage/catalog-model';
import {
- humanizeEntityRef,
getEntityRelations,
+ humanizeEntityRef,
} from '@backstage/plugin-catalog-react';
import { rootDocsRouteRef } from '../../../routes';
import {
- LinkButton,
EmptyState,
+ LinkButton,
Table,
TableColumn,
TableOptions,
@@ -87,6 +87,7 @@ export const DocsTable = (props: DocsTableProps) => {
const defaultColumns: TableColumn[] = [
columnFactories.createNameColumn(),
columnFactories.createOwnerColumn(),
+ columnFactories.createKindColumn(),
columnFactories.createTypeColumn(),
];
diff --git a/plugins/techdocs/src/home/components/Tables/columns.tsx b/plugins/techdocs/src/home/components/Tables/columns.tsx
index 774cfc5e8a..bc85bb7a63 100644
--- a/plugins/techdocs/src/home/components/Tables/columns.tsx
+++ b/plugins/techdocs/src/home/components/Tables/columns.tsx
@@ -57,6 +57,12 @@ export const columnFactories = {
),
};
},
+ createKindColumn(): TableColumn {
+ return {
+ title: 'Kind',
+ field: 'entity.kind',
+ };
+ },
createTypeColumn(): TableColumn {
return {
title: 'Type',
diff --git a/plugins/todo-backend/CHANGELOG.md b/plugins/todo-backend/CHANGELOG.md
index e468aa66e6..e7afb9ecd0 100644
--- a/plugins/todo-backend/CHANGELOG.md
+++ b/plugins/todo-backend/CHANGELOG.md
@@ -1,5 +1,20 @@
# @backstage/plugin-todo-backend
+## 0.3.3-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/integration@1.7.1-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-openapi-utils@0.0.4
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/catalog-client@1.4.4
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/plugin-catalog-node@1.4.6-next.0
+
## 0.3.1
### Minor Changes
diff --git a/plugins/todo-backend/package.json b/plugins/todo-backend/package.json
index 1f9c74e11c..1d4f396de1 100644
--- a/plugins/todo-backend/package.json
+++ b/plugins/todo-backend/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-todo-backend",
"description": "A Backstage backend plugin that lets you browse TODO comments in your source code",
- "version": "0.3.1",
+ "version": "0.3.3-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/todo/CHANGELOG.md b/plugins/todo/CHANGELOG.md
index f4ea8e5a23..7e9e8c6933 100644
--- a/plugins/todo/CHANGELOG.md
+++ b/plugins/todo/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-todo
+## 0.2.28-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+
## 0.2.27
### Patch Changes
diff --git a/plugins/todo/api-report.md b/plugins/todo/api-report.md
index ae4c4f3645..215d1730bc 100644
--- a/plugins/todo/api-report.md
+++ b/plugins/todo/api-report.md
@@ -85,7 +85,6 @@ export const todoPlugin: BackstagePlugin<
{
entityContent: RouteRef;
},
- {},
{}
>;
```
diff --git a/plugins/todo/package.json b/plugins/todo/package.json
index 21a9dbaf6a..fa1d1d9e62 100644
--- a/plugins/todo/package.json
+++ b/plugins/todo/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-todo",
"description": "A Backstage plugin that lets you browse TODO comments in your source code",
- "version": "0.2.27",
+ "version": "0.2.28-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/user-settings-backend/CHANGELOG.md b/plugins/user-settings-backend/CHANGELOG.md
index e3bcd23555..9af11fffbf 100644
--- a/plugins/user-settings-backend/CHANGELOG.md
+++ b/plugins/user-settings-backend/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-user-settings-backend
+## 0.2.3-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-auth-node@0.3.2-next.0
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/backend-plugin-api@0.6.5-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/types@1.1.1
+
## 0.2.1
### Minor Changes
diff --git a/plugins/user-settings-backend/package.json b/plugins/user-settings-backend/package.json
index 6d0b85b06c..0feaba734e 100644
--- a/plugins/user-settings-backend/package.json
+++ b/plugins/user-settings-backend/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-user-settings-backend",
"description": "The Backstage backend plugin to manage user settings",
- "version": "0.2.1",
+ "version": "0.2.3-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/user-settings/CHANGELOG.md b/plugins/user-settings/CHANGELOG.md
index 011e0e2511..9e81589e7d 100644
--- a/plugins/user-settings/CHANGELOG.md
+++ b/plugins/user-settings/CHANGELOG.md
@@ -1,5 +1,19 @@
# @backstage/plugin-user-settings
+## 0.7.11-next.0
+
+### Patch Changes
+
+- d1b637d005: Fixed a bug where the theme icons would not be colored according to their active state.
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/core-app-api@1.10.1-next.0
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+ - @backstage/types@1.1.1
+
## 0.7.10
### Patch Changes
diff --git a/plugins/user-settings/api-report.md b/plugins/user-settings/api-report.md
index cdb576c45c..b92677f8ce 100644
--- a/plugins/user-settings/api-report.md
+++ b/plugins/user-settings/api-report.md
@@ -112,7 +112,6 @@ const userSettingsPlugin: BackstagePlugin<
{
settingsPage: RouteRef;
},
- {},
{}
>;
export { userSettingsPlugin as plugin };
diff --git a/plugins/user-settings/package.json b/plugins/user-settings/package.json
index 01e158dc2c..d2c9f440e6 100644
--- a/plugins/user-settings/package.json
+++ b/plugins/user-settings/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-user-settings",
"description": "A Backstage plugin that provides a settings page",
- "version": "0.7.10",
+ "version": "0.7.11-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/user-settings/src/components/General/UserSettingsThemeToggle.tsx b/plugins/user-settings/src/components/General/UserSettingsThemeToggle.tsx
index 7279fcb96a..ca57de3a78 100644
--- a/plugins/user-settings/src/components/General/UserSettingsThemeToggle.tsx
+++ b/plugins/user-settings/src/components/General/UserSettingsThemeToggle.tsx
@@ -141,8 +141,8 @@ export const UserSettingsThemeToggle = () => {
onChange={handleSetTheme}
>
{themeIds.map(theme => {
- const themeIcon = themeIds.find(it => it.id === theme.id)?.icon;
const themeId = theme.id;
+ const themeIcon = theme.icon;
const themeTitle =
theme.title ||
(themeId === 'light' || themeId === 'dark'
@@ -156,7 +156,11 @@ export const UserSettingsThemeToggle = () => {
>
<>
{themeTitle}
-
+
>
);
diff --git a/plugins/vault-backend/CHANGELOG.md b/plugins/vault-backend/CHANGELOG.md
index a15ae01ac6..fcb259e047 100644
--- a/plugins/vault-backend/CHANGELOG.md
+++ b/plugins/vault-backend/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-vault-backend
+## 0.3.10-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/backend-common@0.19.7-next.0
+ - @backstage/config@1.1.0
+ - @backstage/backend-tasks@0.5.10-next.0
+ - @backstage/errors@1.2.2
+
## 0.3.8
### Patch Changes
diff --git a/plugins/vault-backend/package.json b/plugins/vault-backend/package.json
index 034e8474aa..f8de4e2845 100644
--- a/plugins/vault-backend/package.json
+++ b/plugins/vault-backend/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-vault-backend",
"description": "A Backstage backend plugin that integrates towards Vault",
- "version": "0.3.8",
+ "version": "0.3.10-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/vault/CHANGELOG.md b/plugins/vault/CHANGELOG.md
index 79f7427d28..940345da8d 100644
--- a/plugins/vault/CHANGELOG.md
+++ b/plugins/vault/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-vault
+## 0.1.20-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/plugin-catalog-react@1.8.5-next.0
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/catalog-model@1.4.2
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+
## 0.1.19
### Patch Changes
diff --git a/plugins/vault/api-report.md b/plugins/vault/api-report.md
index da13e2092d..59bcb1c527 100644
--- a/plugins/vault/api-report.md
+++ b/plugins/vault/api-report.md
@@ -33,7 +33,7 @@ export interface VaultApi {
export const vaultApiRef: ApiRef;
// @public
-export const vaultPlugin: BackstagePlugin<{}, {}, {}>;
+export const vaultPlugin: BackstagePlugin<{}, {}>;
// @public
export type VaultSecret = {
diff --git a/plugins/vault/package.json b/plugins/vault/package.json
index dcc7a03d62..d571efe444 100644
--- a/plugins/vault/package.json
+++ b/plugins/vault/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-vault",
"description": "A Backstage plugin that integrates towards Vault",
- "version": "0.1.19",
+ "version": "0.1.20-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/vault/src/components/EntityVaultCard/EntityVaultCard.test.tsx b/plugins/vault/src/components/EntityVaultCard/EntityVaultCard.test.tsx
index f46aa1e4c2..9450ddc41d 100644
--- a/plugins/vault/src/components/EntityVaultCard/EntityVaultCard.test.tsx
+++ b/plugins/vault/src/components/EntityVaultCard/EntityVaultCard.test.tsx
@@ -46,7 +46,7 @@ describe('EntityVaultCard', () => {
,
);
expect(
- rendered.getByText(/Add the annotation to your component YAML/),
+ rendered.getByText(/Add the annotation to your Component YAML/),
).toBeInTheDocument();
});
});
diff --git a/plugins/xcmetrics/CHANGELOG.md b/plugins/xcmetrics/CHANGELOG.md
index 61f0561fbf..c296cc3e0b 100644
--- a/plugins/xcmetrics/CHANGELOG.md
+++ b/plugins/xcmetrics/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-xcmetrics
+## 0.2.44-next.0
+
+### Patch Changes
+
+- Updated dependencies
+ - @backstage/core-plugin-api@1.7.0-next.0
+ - @backstage/core-components@0.13.6-next.0
+ - @backstage/errors@1.2.2
+ - @backstage/theme@0.4.2
+
## 0.2.43
### Patch Changes
diff --git a/plugins/xcmetrics/api-report.md b/plugins/xcmetrics/api-report.md
index 4cbac0683c..94a2d4afcd 100644
--- a/plugins/xcmetrics/api-report.md
+++ b/plugins/xcmetrics/api-report.md
@@ -17,7 +17,6 @@ export const xcmetricsPlugin: BackstagePlugin<
{
root: RouteRef;
},
- {},
{}
>;
```
diff --git a/plugins/xcmetrics/package.json b/plugins/xcmetrics/package.json
index ee16b186c1..b63915c1f0 100644
--- a/plugins/xcmetrics/package.json
+++ b/plugins/xcmetrics/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-xcmetrics",
"description": "A Backstage plugin that shows XCode build metrics for your components",
- "version": "0.2.43",
+ "version": "0.2.44-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/scripts/verify-lockfile-duplicates.js b/scripts/verify-lockfile-duplicates.js
index a8d344b741..ddf99f4fd6 100644
--- a/scripts/verify-lockfile-duplicates.js
+++ b/scripts/verify-lockfile-duplicates.js
@@ -36,7 +36,7 @@ async function findLockFiles() {
if (!files.length) {
// List all lock files that are in the root or in an immediate subdirectory
- files = ['yarn.lock', 'cypress/yarn.lock', 'microsite/yarn.lock'];
+ files = ['yarn.lock', 'microsite/yarn.lock'];
}
return files.map(file => ({
diff --git a/yarn.lock b/yarn.lock
index 4331f26d49..6f1a40c8c5 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3305,7 +3305,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.14.6, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.18.6, @babel/runtime@npm:^7.2.0, @babel/runtime@npm:^7.20.1, @babel/runtime@npm:^7.20.13, @babel/runtime@npm:^7.20.6, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.22.15, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.4.4, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.0, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2":
+"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.18.6, @babel/runtime@npm:^7.2.0, @babel/runtime@npm:^7.20.1, @babel/runtime@npm:^7.20.13, @babel/runtime@npm:^7.20.6, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.22.15, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.4.4, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.0, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2":
version: 7.22.15
resolution: "@babel/runtime@npm:7.22.15"
dependencies:
@@ -3661,7 +3661,7 @@ __metadata:
languageName: unknown
linkType: soft
-"@backstage/catalog-client@workspace:^, @backstage/catalog-client@workspace:packages/catalog-client":
+"@backstage/catalog-client@^1.4.4, @backstage/catalog-client@workspace:^, @backstage/catalog-client@workspace:packages/catalog-client":
version: 0.0.0-use.local
resolution: "@backstage/catalog-client@workspace:packages/catalog-client"
dependencies:
@@ -3673,7 +3673,7 @@ __metadata:
languageName: unknown
linkType: soft
-"@backstage/catalog-model@^1.1.5, @backstage/catalog-model@^1.4.1, @backstage/catalog-model@workspace:^, @backstage/catalog-model@workspace:packages/catalog-model":
+"@backstage/catalog-model@^1.1.5, @backstage/catalog-model@^1.4.1, @backstage/catalog-model@^1.4.2, @backstage/catalog-model@workspace:^, @backstage/catalog-model@workspace:packages/catalog-model":
version: 0.0.0-use.local
resolution: "@backstage/catalog-model@workspace:packages/catalog-model"
dependencies:
@@ -3921,7 +3921,7 @@ __metadata:
languageName: unknown
linkType: soft
-"@backstage/config@^1.0.6, @backstage/config@^1.0.7, @backstage/config@workspace:^, @backstage/config@workspace:packages/config":
+"@backstage/config@^1.0.6, @backstage/config@^1.0.7, @backstage/config@^1.1.0, @backstage/config@workspace:^, @backstage/config@workspace:packages/config":
version: 0.0.0-use.local
resolution: "@backstage/config@workspace:packages/config"
dependencies:
@@ -3969,15 +3969,121 @@ __metadata:
languageName: unknown
linkType: soft
-"@backstage/core-components@^0.13.4, @backstage/core-components@workspace:^, @backstage/core-components@workspace:packages/core-components":
+"@backstage/core-components@npm:^0.12.3":
+ version: 0.12.5
+ resolution: "@backstage/core-components@npm:0.12.5"
+ dependencies:
+ "@backstage/config": ^1.0.7
+ "@backstage/core-plugin-api": ^1.5.0
+ "@backstage/errors": ^1.1.5
+ "@backstage/theme": ^0.2.18
+ "@backstage/version-bridge": ^1.0.3
+ "@material-table/core": ^3.1.0
+ "@material-ui/core": ^4.12.2
+ "@material-ui/icons": ^4.9.1
+ "@material-ui/lab": 4.0.0-alpha.57
+ "@react-hookz/web": ^20.0.0
+ "@types/react-sparklines": ^1.7.0
+ "@types/react-text-truncate": ^0.14.0
+ ansi-regex: ^6.0.1
+ classnames: ^2.2.6
+ d3-selection: ^3.0.0
+ d3-shape: ^3.0.0
+ d3-zoom: ^3.0.0
+ dagre: ^0.8.5
+ history: ^5.0.0
+ immer: ^9.0.1
+ lodash: ^4.17.21
+ pluralize: ^8.0.0
+ prop-types: ^15.7.2
+ qs: ^6.9.4
+ rc-progress: 3.4.1
+ react-helmet: 6.1.0
+ react-hook-form: ^7.12.2
+ react-markdown: ^8.0.0
+ react-sparklines: ^1.7.0
+ react-syntax-highlighter: ^15.4.5
+ react-text-truncate: ^0.19.0
+ react-use: ^17.3.2
+ react-virtualized-auto-sizer: ^1.0.6
+ react-window: ^1.8.6
+ remark-gfm: ^3.0.1
+ zen-observable: ^0.10.0
+ zod: ~3.18.0
+ peerDependencies:
+ "@types/react": ^16.13.1 || ^17.0.0
+ react: ^16.13.1 || ^17.0.0
+ react-dom: ^16.13.1 || ^17.0.0
+ react-router-dom: 6.0.0-beta.0 || ^6.3.0
+ checksum: 8308c1b90247911f6cf22963b530cef169287f508ff29d159d0c83758134dd43bd5acd2113350690a46a02246bc05dca975bcc38325000aefb1c93c80e2f19c7
+ languageName: node
+ linkType: hard
+
+"@backstage/core-components@npm:^0.13.4, @backstage/core-components@npm:^0.13.5":
+ version: 0.13.5
+ resolution: "@backstage/core-components@npm:0.13.5"
+ dependencies:
+ "@backstage/config": ^1.1.0
+ "@backstage/core-plugin-api": ^1.6.0
+ "@backstage/errors": ^1.2.2
+ "@backstage/theme": ^0.4.2
+ "@backstage/version-bridge": ^1.0.5
+ "@date-io/core": ^1.3.13
+ "@material-table/core": ^3.1.0
+ "@material-ui/core": ^4.12.2
+ "@material-ui/icons": ^4.9.1
+ "@material-ui/lab": 4.0.0-alpha.61
+ "@react-hookz/web": ^20.0.0
+ "@types/react": ^16.13.1 || ^17.0.0
+ "@types/react-sparklines": ^1.7.0
+ "@types/react-text-truncate": ^0.14.0
+ ansi-regex: ^6.0.1
+ classnames: ^2.2.6
+ d3-selection: ^3.0.0
+ d3-shape: ^3.0.0
+ d3-zoom: ^3.0.0
+ dagre: ^0.8.5
+ history: ^5.0.0
+ immer: ^9.0.1
+ linkify-react: 4.1.1
+ linkifyjs: 4.1.1
+ lodash: ^4.17.21
+ pluralize: ^8.0.0
+ prop-types: ^15.7.2
+ qs: ^6.9.4
+ rc-progress: 3.5.1
+ react-helmet: 6.1.0
+ react-hook-form: ^7.12.2
+ react-idle-timer: 5.6.2
+ react-markdown: ^8.0.0
+ react-sparklines: ^1.7.0
+ react-syntax-highlighter: ^15.4.5
+ react-text-truncate: ^0.19.0
+ react-use: ^17.3.2
+ react-virtualized-auto-sizer: ^1.0.11
+ react-window: ^1.8.6
+ remark-gfm: ^3.0.1
+ zen-observable: ^0.10.0
+ zod: ^3.21.4
+ peerDependencies:
+ react: ^16.13.1 || ^17.0.0
+ react-dom: ^16.13.1 || ^17.0.0
+ react-router-dom: 6.0.0-beta.0 || ^6.3.0
+ checksum: f1c9290fd1358561c9a1098200cdf1d2dc16117aebf4010759f122b0a638acb50a89faa24988ad4a854ace59a74606329550c59fc98ab6281feb4b4f5bfe52c0
+ languageName: node
+ linkType: hard
+
+"@backstage/core-components@workspace:^, @backstage/core-components@workspace:packages/core-components":
version: 0.0.0-use.local
resolution: "@backstage/core-components@workspace:packages/core-components"
dependencies:
+ "@backstage/catalog-model": "workspace:^"
"@backstage/cli": "workspace:^"
"@backstage/config": "workspace:^"
"@backstage/core-app-api": "workspace:^"
"@backstage/core-plugin-api": "workspace:^"
"@backstage/errors": "workspace:^"
+ "@backstage/plugin-catalog-react": "workspace:^"
"@backstage/test-utils": "workspace:^"
"@backstage/theme": "workspace:^"
"@backstage/version-bridge": "workspace:^"
@@ -4044,57 +4150,27 @@ __metadata:
languageName: unknown
linkType: soft
-"@backstage/core-components@npm:^0.12.3":
- version: 0.12.5
- resolution: "@backstage/core-components@npm:0.12.5"
+"@backstage/core-plugin-api@npm:^1.3.0, @backstage/core-plugin-api@npm:^1.5.0, @backstage/core-plugin-api@npm:^1.5.3, @backstage/core-plugin-api@npm:^1.6.0":
+ version: 1.6.0
+ resolution: "@backstage/core-plugin-api@npm:1.6.0"
dependencies:
- "@backstage/config": ^1.0.7
- "@backstage/core-plugin-api": ^1.5.0
- "@backstage/errors": ^1.1.5
- "@backstage/theme": ^0.2.18
- "@backstage/version-bridge": ^1.0.3
- "@material-table/core": ^3.1.0
- "@material-ui/core": ^4.12.2
- "@material-ui/icons": ^4.9.1
- "@material-ui/lab": 4.0.0-alpha.57
- "@react-hookz/web": ^20.0.0
- "@types/react-sparklines": ^1.7.0
- "@types/react-text-truncate": ^0.14.0
- ansi-regex: ^6.0.1
- classnames: ^2.2.6
- d3-selection: ^3.0.0
- d3-shape: ^3.0.0
- d3-zoom: ^3.0.0
- dagre: ^0.8.5
- history: ^5.0.0
- immer: ^9.0.1
- lodash: ^4.17.21
- pluralize: ^8.0.0
- prop-types: ^15.7.2
- qs: ^6.9.4
- rc-progress: 3.4.1
- react-helmet: 6.1.0
- react-hook-form: ^7.12.2
- react-markdown: ^8.0.0
- react-sparklines: ^1.7.0
- react-syntax-highlighter: ^15.4.5
- react-text-truncate: ^0.19.0
- react-use: ^17.3.2
- react-virtualized-auto-sizer: ^1.0.6
- react-window: ^1.8.6
- remark-gfm: ^3.0.1
- zen-observable: ^0.10.0
- zod: ~3.18.0
- peerDependencies:
+ "@backstage/config": ^1.1.0
+ "@backstage/types": ^1.1.1
+ "@backstage/version-bridge": ^1.0.5
"@types/react": ^16.13.1 || ^17.0.0
+ history: ^5.0.0
+ i18next: ^22.4.15
+ prop-types: ^15.7.2
+ zen-observable: ^0.10.0
+ peerDependencies:
react: ^16.13.1 || ^17.0.0
react-dom: ^16.13.1 || ^17.0.0
react-router-dom: 6.0.0-beta.0 || ^6.3.0
- checksum: 8308c1b90247911f6cf22963b530cef169287f508ff29d159d0c83758134dd43bd5acd2113350690a46a02246bc05dca975bcc38325000aefb1c93c80e2f19c7
+ checksum: 540deb91d3c143ce1c3736359c3301af64fbd6eccbaae61bfc96f4e180654e7eb025bb1d4ff5be62b7ea3d6dac7ed617e4dba0c176cfdbf865400fde0f987ddb
languageName: node
linkType: hard
-"@backstage/core-plugin-api@^1.3.0, @backstage/core-plugin-api@^1.5.0, @backstage/core-plugin-api@^1.5.3, @backstage/core-plugin-api@workspace:^, @backstage/core-plugin-api@workspace:packages/core-plugin-api":
+"@backstage/core-plugin-api@workspace:^, @backstage/core-plugin-api@workspace:packages/core-plugin-api":
version: 0.0.0-use.local
resolution: "@backstage/core-plugin-api@workspace:packages/core-plugin-api"
dependencies:
@@ -4180,7 +4256,24 @@ __metadata:
languageName: unknown
linkType: soft
-"@backstage/errors@^1.1.5, @backstage/errors@workspace:^, @backstage/errors@workspace:packages/errors":
+"@backstage/e2e-test-utils@workspace:*, @backstage/e2e-test-utils@workspace:packages/e2e-test-utils":
+ version: 0.0.0-use.local
+ resolution: "@backstage/e2e-test-utils@workspace:packages/e2e-test-utils"
+ dependencies:
+ "@backstage/cli": "workspace:^"
+ "@backstage/cli-node": "workspace:^"
+ "@manypkg/get-packages": ^1.1.3
+ "@types/fs-extra": ^9.0.1
+ fs-extra: ^10.1.0
+ peerDependencies:
+ "@playwright/test": ^1.32.3
+ peerDependenciesMeta:
+ "@playwright/test":
+ optional: true
+ languageName: unknown
+ linkType: soft
+
+"@backstage/errors@^1.1.5, @backstage/errors@^1.2.2, @backstage/errors@workspace:^, @backstage/errors@workspace:packages/errors":
version: 0.0.0-use.local
resolution: "@backstage/errors@workspace:packages/errors"
dependencies:
@@ -4265,7 +4358,29 @@ __metadata:
languageName: unknown
linkType: soft
-"@backstage/integration-react@^1.1.18, @backstage/integration-react@workspace:^, @backstage/integration-react@workspace:packages/integration-react":
+"@backstage/integration-react@npm:^1.1.18":
+ version: 1.1.19
+ resolution: "@backstage/integration-react@npm:1.1.19"
+ dependencies:
+ "@backstage/config": ^1.1.0
+ "@backstage/core-components": ^0.13.5
+ "@backstage/core-plugin-api": ^1.6.0
+ "@backstage/integration": ^1.7.0
+ "@backstage/theme": ^0.4.2
+ "@material-ui/core": ^4.12.2
+ "@material-ui/icons": ^4.9.1
+ "@material-ui/lab": 4.0.0-alpha.61
+ "@types/react": ^16.13.1 || ^17.0.0
+ react-use: ^17.2.4
+ peerDependencies:
+ react: ^16.13.1 || ^17.0.0
+ react-dom: ^16.13.1 || ^17.0.0
+ react-router-dom: 6.0.0-beta.0 || ^6.3.0
+ checksum: 8ef2b46bf91b71351aa4b114de147d130e0298d8849cf2fa358ac1559c2026ffbfad10b15f6fa4bf94c7bbb4f4419766c6c66b77d2859fe184a43351f1f5df81
+ languageName: node
+ linkType: hard
+
+"@backstage/integration-react@workspace:^, @backstage/integration-react@workspace:packages/integration-react":
version: 0.0.0-use.local
resolution: "@backstage/integration-react@workspace:packages/integration-react"
dependencies:
@@ -4294,6 +4409,23 @@ __metadata:
languageName: unknown
linkType: soft
+"@backstage/integration@npm:^1.7.0":
+ version: 1.7.0
+ resolution: "@backstage/integration@npm:1.7.0"
+ dependencies:
+ "@azure/identity": ^3.2.1
+ "@backstage/config": ^1.1.0
+ "@backstage/errors": ^1.2.2
+ "@octokit/auth-app": ^4.0.0
+ "@octokit/rest": ^19.0.3
+ cross-fetch: ^3.1.5
+ git-url-parse: ^13.0.0
+ lodash: ^4.17.21
+ luxon: ^3.0.0
+ checksum: f02516b7bdb7adb0516b49b90802e588f09c43b4db66bcce68314518c46b9c6fb8ca76ac7a55d4a80cdd414bb6876475b42eb6256b2efda9824ad3667ffa8f54
+ languageName: node
+ linkType: hard
+
"@backstage/integration@workspace:^, @backstage/integration@workspace:packages/integration":
version: 0.0.0-use.local
resolution: "@backstage/integration@workspace:packages/integration"
@@ -5628,7 +5760,7 @@ __metadata:
languageName: unknown
linkType: soft
-"@backstage/plugin-catalog-common@^1.0.10, @backstage/plugin-catalog-common@workspace:^, @backstage/plugin-catalog-common@workspace:plugins/catalog-common":
+"@backstage/plugin-catalog-common@^1.0.10, @backstage/plugin-catalog-common@^1.0.16, @backstage/plugin-catalog-common@workspace:^, @backstage/plugin-catalog-common@workspace:plugins/catalog-common":
version: 0.0.0-use.local
resolution: "@backstage/plugin-catalog-common@workspace:plugins/catalog-common"
dependencies:
@@ -5765,7 +5897,44 @@ __metadata:
languageName: unknown
linkType: soft
-"@backstage/plugin-catalog-react@^1.2.4, @backstage/plugin-catalog-react@^1.8.3, @backstage/plugin-catalog-react@workspace:^, @backstage/plugin-catalog-react@workspace:plugins/catalog-react":
+"@backstage/plugin-catalog-react@npm:^1.2.4, @backstage/plugin-catalog-react@npm:^1.8.3, @backstage/plugin-catalog-react@npm:^1.8.4":
+ version: 1.8.4
+ resolution: "@backstage/plugin-catalog-react@npm:1.8.4"
+ dependencies:
+ "@backstage/catalog-client": ^1.4.4
+ "@backstage/catalog-model": ^1.4.2
+ "@backstage/core-components": ^0.13.5
+ "@backstage/core-plugin-api": ^1.6.0
+ "@backstage/errors": ^1.2.2
+ "@backstage/integration": ^1.7.0
+ "@backstage/plugin-catalog-common": ^1.0.16
+ "@backstage/plugin-permission-common": ^0.7.8
+ "@backstage/plugin-permission-react": ^0.4.15
+ "@backstage/theme": ^0.4.2
+ "@backstage/types": ^1.1.1
+ "@backstage/version-bridge": ^1.0.5
+ "@material-ui/core": ^4.12.2
+ "@material-ui/icons": ^4.9.1
+ "@material-ui/lab": 4.0.0-alpha.61
+ "@react-hookz/web": ^23.0.0
+ "@types/react": ^16.13.1 || ^17.0.0
+ classnames: ^2.2.6
+ jwt-decode: ^3.1.0
+ lodash: ^4.17.21
+ material-ui-popup-state: ^1.9.3
+ qs: ^6.9.4
+ react-use: ^17.2.4
+ yaml: ^2.0.0
+ zen-observable: ^0.10.0
+ peerDependencies:
+ react: ^16.13.1 || ^17.0.0
+ react-dom: ^16.13.1 || ^17.0.0
+ react-router-dom: 6.0.0-beta.0 || ^6.3.0
+ checksum: 6434741a60e4f53604a958c121d283d3d8b2756e1013d3a9b32659ae41b58359cbc3bee0791a95a35c847f43a76de9f9d2ea1f8e5fa6697adfc9115b5042a57e
+ languageName: node
+ linkType: hard
+
+"@backstage/plugin-catalog-react@workspace:^, @backstage/plugin-catalog-react@workspace:plugins/catalog-react":
version: 0.0.0-use.local
resolution: "@backstage/plugin-catalog-react@workspace:plugins/catalog-react"
dependencies:
@@ -7126,6 +7295,24 @@ __metadata:
languageName: unknown
linkType: soft
+"@backstage/plugin-home-react@npm:^0.1.3":
+ version: 0.1.3
+ resolution: "@backstage/plugin-home-react@npm:0.1.3"
+ dependencies:
+ "@backstage/core-components": ^0.13.5
+ "@backstage/core-plugin-api": ^1.6.0
+ "@material-ui/core": ^4.12.2
+ "@material-ui/icons": ^4.9.1
+ "@rjsf/utils": 5.13.0
+ "@types/react": ^16.13.1 || ^17.0.0
+ peerDependencies:
+ react: ^16.13.1 || ^17.0.0
+ react-dom: ^16.13.1 || ^17.0.0
+ react-router-dom: 6.0.0-beta.0 || ^6.3.0
+ checksum: e87c9fd44c65aa1a768555812f32f42b1d2dc7ab1097c283cae37105d1f17a7b1b198c85d39d72258551015161f317c8e4538a652f6e8ebe9800c3a365f6ebc3
+ languageName: node
+ linkType: hard
+
"@backstage/plugin-home-react@workspace:^, @backstage/plugin-home-react@workspace:plugins/home-react":
version: 0.0.0-use.local
resolution: "@backstage/plugin-home-react@workspace:plugins/home-react"
@@ -7154,7 +7341,39 @@ __metadata:
languageName: unknown
linkType: soft
-"@backstage/plugin-home@^0.5.7, @backstage/plugin-home@workspace:^, @backstage/plugin-home@workspace:plugins/home":
+"@backstage/plugin-home@npm:^0.5.7":
+ version: 0.5.8
+ resolution: "@backstage/plugin-home@npm:0.5.8"
+ dependencies:
+ "@backstage/catalog-model": ^1.4.2
+ "@backstage/config": ^1.1.0
+ "@backstage/core-components": ^0.13.5
+ "@backstage/core-plugin-api": ^1.6.0
+ "@backstage/plugin-catalog-react": ^1.8.4
+ "@backstage/plugin-home-react": ^0.1.3
+ "@backstage/theme": ^0.4.2
+ "@material-ui/core": ^4.12.2
+ "@material-ui/icons": ^4.9.1
+ "@material-ui/lab": 4.0.0-alpha.61
+ "@rjsf/core-v5": "npm:@rjsf/core@5.13.0"
+ "@rjsf/material-ui-v5": "npm:@rjsf/material-ui@5.13.0"
+ "@rjsf/utils": 5.13.0
+ "@rjsf/validator-ajv8": 5.13.0
+ "@types/react": ^16.13.1 || ^17.0.0
+ lodash: ^4.17.21
+ react-grid-layout: ^1.3.4
+ react-resizable: ^3.0.4
+ react-use: ^17.2.4
+ zod: ^3.21.4
+ peerDependencies:
+ react: ^16.13.1 || ^17.0.0
+ react-dom: ^16.13.1 || ^17.0.0
+ react-router-dom: 6.0.0-beta.0 || ^6.3.0
+ checksum: 4f895b3a7e7f61149ba7b8fd6ec998d1f83b6e5262073893c5863fe79c46e5e2f52b43346f310733e04815aaebd82b8a13d34616e8d0848f60f87b1fb3193d60
+ languageName: node
+ linkType: hard
+
+"@backstage/plugin-home@workspace:^, @backstage/plugin-home@workspace:plugins/home":
version: 0.0.0-use.local
resolution: "@backstage/plugin-home@workspace:plugins/home"
dependencies:
@@ -7417,8 +7636,56 @@ __metadata:
dependencies:
"@backstage/catalog-model": "workspace:^"
"@backstage/cli": "workspace:^"
+ "@backstage/core-app-api": "workspace:^"
+ "@backstage/core-plugin-api": "workspace:^"
+ "@backstage/errors": "workspace:^"
"@backstage/plugin-permission-common": "workspace:^"
+ "@backstage/test-utils": "workspace:^"
+ "@backstage/types": "workspace:^"
"@kubernetes/client-node": 0.18.1
+ kubernetes-models: ^4.3.1
+ lodash: ^4.17.21
+ luxon: ^3.0.0
+ msw: ^1.3.1
+ languageName: unknown
+ linkType: soft
+
+"@backstage/plugin-kubernetes-react@workspace:^, @backstage/plugin-kubernetes-react@workspace:plugins/kubernetes-react":
+ version: 0.0.0-use.local
+ resolution: "@backstage/plugin-kubernetes-react@workspace:plugins/kubernetes-react"
+ dependencies:
+ "@backstage/catalog-model": "workspace:^"
+ "@backstage/cli": "workspace:^"
+ "@backstage/core-app-api": "workspace:^"
+ "@backstage/core-components": "workspace:^"
+ "@backstage/core-plugin-api": "workspace:^"
+ "@backstage/errors": "workspace:^"
+ "@backstage/plugin-kubernetes-common": "workspace:^"
+ "@backstage/test-utils": "workspace:^"
+ "@backstage/types": "workspace:^"
+ "@kubernetes-models/apimachinery": ^1.1.0
+ "@kubernetes-models/base": ^4.0.1
+ "@kubernetes/client-node": ^0.19.0
+ "@material-ui/core": ^4.9.13
+ "@material-ui/icons": ^4.11.3
+ "@material-ui/lab": ^4.0.0-alpha.61
+ "@testing-library/jest-dom": ^5.10.1
+ "@testing-library/react": ^12.1.3
+ "@testing-library/react-hooks": ^8.0.1
+ "@types/react": ^16.13.1 || ^17.0.0
+ cronstrue: ^2.32.0
+ jest-websocket-mock: ^2.5.0
+ js-yaml: ^4.1.0
+ kubernetes-models: ^4.3.1
+ lodash: ^4.17.21
+ luxon: ^3.0.0
+ msw: ^1.3.1
+ react-use: ^17.4.0
+ xterm: ^5.3.0
+ xterm-addon-attach: ^0.9.0
+ xterm-addon-fit: ^0.8.0
+ peerDependencies:
+ react: ^16.13.1 || ^17.0.0
languageName: unknown
linkType: soft
@@ -7436,6 +7703,7 @@ __metadata:
"@backstage/errors": "workspace:^"
"@backstage/plugin-catalog-react": "workspace:^"
"@backstage/plugin-kubernetes-common": "workspace:^"
+ "@backstage/plugin-kubernetes-react": "workspace:^"
"@backstage/test-utils": "workspace:^"
"@backstage/theme": "workspace:^"
"@backstage/types": "workspace:^"
@@ -8011,7 +8279,7 @@ __metadata:
languageName: unknown
linkType: soft
-"@backstage/plugin-permission-common@workspace:^, @backstage/plugin-permission-common@workspace:plugins/permission-common":
+"@backstage/plugin-permission-common@^0.7.8, @backstage/plugin-permission-common@workspace:^, @backstage/plugin-permission-common@workspace:plugins/permission-common":
version: 0.0.0-use.local
resolution: "@backstage/plugin-permission-common@workspace:plugins/permission-common"
dependencies:
@@ -8049,6 +8317,25 @@ __metadata:
languageName: unknown
linkType: soft
+"@backstage/plugin-permission-react@npm:^0.4.15":
+ version: 0.4.15
+ resolution: "@backstage/plugin-permission-react@npm:0.4.15"
+ dependencies:
+ "@backstage/config": ^1.1.0
+ "@backstage/core-plugin-api": ^1.6.0
+ "@backstage/plugin-permission-common": ^0.7.8
+ "@types/react": ^16.13.1 || ^17.0.0
+ cross-fetch: ^3.1.5
+ react-use: ^17.2.4
+ swr: ^2.0.0
+ peerDependencies:
+ react: ^16.13.1 || ^17.0.0
+ react-dom: ^16.13.1 || ^17.0.0
+ react-router-dom: 6.0.0-beta.0 || ^6.3.0
+ checksum: 5f11264a7d46bee0924b9a00133e756e38d3cce5ce842104546963e08b8bfc6445e28ac4b2b75878fd5407631353e964e5f0b399bc958a76aaa732741b80a52a
+ languageName: node
+ linkType: hard
+
"@backstage/plugin-permission-react@workspace:^, @backstage/plugin-permission-react@workspace:plugins/permission-react":
version: 0.0.0-use.local
resolution: "@backstage/plugin-permission-react@workspace:plugins/permission-react"
@@ -8076,6 +8363,7 @@ __metadata:
resolution: "@backstage/plugin-playlist-backend@workspace:plugins/playlist-backend"
dependencies:
"@backstage/backend-common": "workspace:^"
+ "@backstage/backend-plugin-api": "workspace:^"
"@backstage/backend-test-utils": "workspace:^"
"@backstage/catalog-client": "workspace:^"
"@backstage/catalog-model": "workspace:^"
@@ -8923,11 +9211,12 @@ __metadata:
languageName: unknown
linkType: soft
-"@backstage/plugin-sonarqube-backend@workspace:plugins/sonarqube-backend":
+"@backstage/plugin-sonarqube-backend@workspace:^, @backstage/plugin-sonarqube-backend@workspace:plugins/sonarqube-backend":
version: 0.0.0-use.local
resolution: "@backstage/plugin-sonarqube-backend@workspace:plugins/sonarqube-backend"
dependencies:
"@backstage/backend-common": "workspace:^"
+ "@backstage/backend-plugin-api": "workspace:^"
"@backstage/backend-test-utils": "workspace:^"
"@backstage/cli": "workspace:^"
"@backstage/config": "workspace:^"
@@ -9227,6 +9516,7 @@ __metadata:
"@backstage/core-components": "workspace:^"
"@backstage/core-plugin-api": "workspace:^"
"@backstage/dev-utils": "workspace:^"
+ "@backstage/frontend-plugin-api": "workspace:^"
"@backstage/test-utils": "workspace:^"
"@backstage/theme": "workspace:^"
"@material-ui/core": ^4.12.2
@@ -9776,7 +10066,7 @@ __metadata:
languageName: unknown
linkType: soft
-"@backstage/theme@^0.4.1, @backstage/theme@workspace:^, @backstage/theme@workspace:packages/theme":
+"@backstage/theme@^0.4.1, @backstage/theme@^0.4.2, @backstage/theme@workspace:^, @backstage/theme@workspace:packages/theme":
version: 0.0.0-use.local
resolution: "@backstage/theme@workspace:packages/theme"
dependencies:
@@ -9805,7 +10095,7 @@ __metadata:
languageName: node
linkType: hard
-"@backstage/types@^1.0.2, @backstage/types@workspace:^, @backstage/types@workspace:packages/types":
+"@backstage/types@^1.0.2, @backstage/types@^1.1.1, @backstage/types@workspace:^, @backstage/types@workspace:packages/types":
version: 0.0.0-use.local
resolution: "@backstage/types@workspace:packages/types"
dependencies:
@@ -9816,7 +10106,7 @@ __metadata:
languageName: unknown
linkType: soft
-"@backstage/version-bridge@^1.0.3, @backstage/version-bridge@workspace:^, @backstage/version-bridge@workspace:packages/version-bridge":
+"@backstage/version-bridge@^1.0.3, @backstage/version-bridge@^1.0.5, @backstage/version-bridge@workspace:^, @backstage/version-bridge@workspace:packages/version-bridge":
version: 0.0.0-use.local
resolution: "@backstage/version-bridge@workspace:packages/version-bridge"
dependencies:
@@ -10209,42 +10499,6 @@ __metadata:
languageName: node
linkType: hard
-"@cypress/request@npm:2.88.12, @cypress/request@npm:^2.88.10":
- version: 2.88.12
- resolution: "@cypress/request@npm:2.88.12"
- dependencies:
- aws-sign2: ~0.7.0
- aws4: ^1.8.0
- caseless: ~0.12.0
- combined-stream: ~1.0.6
- extend: ~3.0.2
- forever-agent: ~0.6.1
- form-data: ~2.3.2
- http-signature: ~1.3.6
- is-typedarray: ~1.0.0
- isstream: ~0.1.2
- json-stringify-safe: ~5.0.1
- mime-types: ~2.1.19
- performance-now: ^2.1.0
- qs: ~6.10.3
- safe-buffer: ^5.1.2
- tough-cookie: ^4.1.3
- tunnel-agent: ^0.6.0
- uuid: ^8.3.2
- checksum: 2c6fbf7f3127d41bffca8374beaa8cf95450495a8a077b00309ea9d94dd2a4da450a77fe038e8ad26c97cdd7c39b65c53c850f8338ce9bc2dbe23ce2e2b48329
- languageName: node
- linkType: hard
-
-"@cypress/xvfb@npm:^1.2.4":
- version: 1.2.4
- resolution: "@cypress/xvfb@npm:1.2.4"
- dependencies:
- debug: ^3.1.0
- lodash.once: ^4.1.1
- checksum: 7bdcdaeb1bb692ec9d9bf8ec52538aa0bead6764753f4a067a171a511807a43fab016f7285a56bef6a606c2467ff3f1365e1ad2d2d583b81beed849ee1573fd1
- languageName: node
- linkType: hard
-
"@dabh/diagnostics@npm:^2.0.2":
version: 2.0.2
resolution: "@dabh/diagnostics@npm:2.0.2"
@@ -10985,30 +11239,6 @@ __metadata:
languageName: node
linkType: hard
-"@frsource/base64@npm:1.0.17":
- version: 1.0.17
- resolution: "@frsource/base64@npm:1.0.17"
- checksum: a01689ef785516ff0b7460f55792685fc782f8507518768396acb9283270d50a8149774f3acd5fa690ccd5a48b5ec4ace90a491458ffdd9e9f591c6b23eb5da5
- languageName: node
- linkType: hard
-
-"@frsource/cypress-plugin-visual-regression-diff@npm:^3.2.8":
- version: 3.3.10
- resolution: "@frsource/cypress-plugin-visual-regression-diff@npm:3.3.10"
- dependencies:
- "@frsource/base64": 1.0.17
- glob: 8.1.0
- meta-png: 1.0.6
- move-file: 2.1.0
- pixelmatch: 5.3.0
- pngjs: 7.0.0
- sharp: 0.32.1
- peerDependencies:
- cypress: ">=4.5.0"
- checksum: 879954ecba8829fd870379a1f4150a511fceab4c5a5c3df8abbab54e655e6560d52d925109364ea7f2d3484467ed5e9c3e4cfaf0058c12bbfbfc21d76ed79b40
- languageName: node
- linkType: hard
-
"@gar/promisify@npm:^1.0.1, @gar/promisify@npm:^1.1.3":
version: 1.1.3
resolution: "@gar/promisify@npm:1.1.3"
@@ -11952,22 +12182,6 @@ __metadata:
languageName: node
linkType: hard
-"@hapi/hoek@npm:^9.0.0":
- version: 9.0.4
- resolution: "@hapi/hoek@npm:9.0.4"
- checksum: a5503ebaad5407e0c99d0656b0bbc3e9ccac9eddc9b9f66e0358a2da9a9dd173c63c9f7c5e46504a05e1fc41d853e9a19617e258d4fcbe1a4be7f9e61da83920
- languageName: node
- linkType: hard
-
-"@hapi/topo@npm:^5.0.0":
- version: 5.0.0
- resolution: "@hapi/topo@npm:5.0.0"
- dependencies:
- "@hapi/hoek": ^9.0.0
- checksum: 8aa81f71696f88d7daeab4547e120e43c6ab78081a4f215eec5103dd858f3122a703512cdacc43aa7e27d99607345165acfeb2ee69e556e63afd50c5c57a36c3
- languageName: node
- linkType: hard
-
"@humanwhocodes/config-array@npm:^0.11.11":
version: 0.11.11
resolution: "@humanwhocodes/config-array@npm:0.11.11"
@@ -12015,20 +12229,6 @@ __metadata:
languageName: node
linkType: hard
-"@internal/plugin-catalog-customized@workspace:^, @internal/plugin-catalog-customized@workspace:plugins/catalog-customized":
- version: 0.0.0-use.local
- resolution: "@internal/plugin-catalog-customized@workspace:plugins/catalog-customized"
- dependencies:
- "@backstage/plugin-catalog": "workspace:^"
- "@backstage/plugin-catalog-react": "workspace:^"
- "@types/react": ^16.13.1 || ^17.0.0
- peerDependencies:
- react: ^16.13.1 || ^17.0.0
- react-dom: ^16.13.1 || ^17.0.0
- react-router-dom: 6.0.0-beta.0 || ^6.3.0
- languageName: unknown
- linkType: soft
-
"@internal/plugin-todo-list-backend@workspace:plugins/example-todo-list-backend":
version: 0.0.0-use.local
resolution: "@internal/plugin-todo-list-backend@workspace:plugins/example-todo-list-backend"
@@ -12625,6 +12825,32 @@ __metadata:
languageName: node
linkType: hard
+"@kubernetes/client-node@npm:^0.19.0":
+ version: 0.19.0
+ resolution: "@kubernetes/client-node@npm:0.19.0"
+ dependencies:
+ "@types/js-yaml": ^4.0.1
+ "@types/node": ^20.1.1
+ "@types/request": ^2.47.1
+ "@types/ws": ^8.5.3
+ byline: ^5.0.0
+ isomorphic-ws: ^5.0.0
+ js-yaml: ^4.1.0
+ jsonpath-plus: ^7.2.0
+ openid-client: ^5.3.0
+ request: ^2.88.0
+ rfc4648: ^1.3.0
+ stream-buffers: ^3.0.2
+ tar: ^6.1.11
+ tslib: ^2.4.1
+ ws: ^8.11.0
+ dependenciesMeta:
+ openid-client:
+ optional: true
+ checksum: d29ccfb562ac51a81f74de570eb832d150be6b73ba887ae1be682df9a34c3ab846d4d4ba74f0a9f0e0ce4da573f949ba712115e1d0513148cdf683a22d729e7f
+ languageName: node
+ linkType: hard
+
"@leichtgewicht/ip-codec@npm:^2.0.1":
version: 2.0.3
resolution: "@leichtgewicht/ip-codec@npm:2.0.3"
@@ -12798,7 +13024,7 @@ __metadata:
languageName: node
linkType: hard
-"@material-ui/icons@npm:^4.11.2, @material-ui/icons@npm:^4.9.1":
+"@material-ui/icons@npm:^4.11.2, @material-ui/icons@npm:^4.11.3, @material-ui/icons@npm:^4.9.1":
version: 4.11.3
resolution: "@material-ui/icons@npm:4.11.3"
dependencies:
@@ -12857,7 +13083,7 @@ __metadata:
languageName: node
linkType: hard
-"@material-ui/lab@npm:4.0.0-alpha.61, @material-ui/lab@npm:^4.0.0-alpha.57, @material-ui/lab@npm:^4.0.0-alpha.60":
+"@material-ui/lab@npm:4.0.0-alpha.61, @material-ui/lab@npm:^4.0.0-alpha.57, @material-ui/lab@npm:^4.0.0-alpha.60, @material-ui/lab@npm:^4.0.0-alpha.61":
version: 4.0.0-alpha.61
resolution: "@material-ui/lab@npm:4.0.0-alpha.61"
dependencies:
@@ -14210,6 +14436,17 @@ __metadata:
languageName: node
linkType: hard
+"@playwright/test@npm:^1.32.3":
+ version: 1.38.1
+ resolution: "@playwright/test@npm:1.38.1"
+ dependencies:
+ playwright: 1.38.1
+ bin:
+ playwright: cli.js
+ checksum: c5ec0b23261fe1ef163b6234f69263bc10e7e5a3fb676c7773ffc70b87459a7ab225f57c03b9de649475771638a04c2e00d9b2739304a4dcf5d3edf20a7a4a82
+ languageName: node
+ linkType: hard
+
"@pmmmwh/react-refresh-webpack-plugin@npm:^0.5.7":
version: 0.5.11
resolution: "@pmmmwh/react-refresh-webpack-plugin@npm:0.5.11"
@@ -14768,29 +15005,6 @@ __metadata:
languageName: node
linkType: hard
-"@sideway/address@npm:^4.1.3":
- version: 4.1.4
- resolution: "@sideway/address@npm:4.1.4"
- dependencies:
- "@hapi/hoek": ^9.0.0
- checksum: b9fca2a93ac2c975ba12e0a6d97853832fb1f4fb02393015e012b47fa916a75ca95102d77214b2a29a2784740df2407951af8c5dde054824c65577fd293c4cdb
- languageName: node
- linkType: hard
-
-"@sideway/formula@npm:^3.0.0":
- version: 3.0.1
- resolution: "@sideway/formula@npm:3.0.1"
- checksum: e4beeebc9dbe2ff4ef0def15cec0165e00d1612e3d7cea0bc9ce5175c3263fc2c818b679bd558957f49400ee7be9d4e5ac90487e1625b4932e15c4aa7919c57a
- languageName: node
- linkType: hard
-
-"@sideway/pinpoint@npm:^2.0.0":
- version: 2.0.0
- resolution: "@sideway/pinpoint@npm:2.0.0"
- checksum: 0f4491e5897fcf5bf02c46f5c359c56a314e90ba243f42f0c100437935daa2488f20482f0f77186bd6bf43345095a95d8143ecf8b1f4d876a7bc0806aba9c3d2
- languageName: node
- linkType: hard
-
"@sinclair/typebox@npm:^0.24.1":
version: 0.24.42
resolution: "@sinclair/typebox@npm:0.24.42"
@@ -16454,7 +16668,6 @@ __metadata:
"@backstage/cli-common": "workspace:^"
"@backstage/config": "workspace:^"
"@backstage/plugin-techdocs-node": "workspace:^"
- "@frsource/cypress-plugin-visual-regression-diff": ^3.2.8
"@types/commander": ^2.12.2
"@types/dockerode": ^3.3.0
"@types/fs-extra": ^9.0.6
@@ -16463,7 +16676,6 @@ __metadata:
"@types/serve-handler": ^6.1.0
"@types/webpack-env": ^1.15.3
commander: ^9.1.0
- cypress: ^10.0.0
dockerode: ^3.3.1
find-process: ^1.4.5
fs-extra: ^10.0.1
@@ -16480,19 +16692,7 @@ __metadata:
languageName: unknown
linkType: soft
-"@testing-library/cypress@npm:^9.0.0":
- version: 9.0.0
- resolution: "@testing-library/cypress@npm:9.0.0"
- dependencies:
- "@babel/runtime": ^7.14.6
- "@testing-library/dom": ^8.1.0
- peerDependencies:
- cypress: ^12.0.0
- checksum: fbd24e8f0b8a60279b336de5f6bc0e7ad6fb31316eacab5128dacc7fccde1eb40935b90f2c3bddc7d814115fe3965c6dbf011785448cd15b5a5b0bc40ef5bb4c
- languageName: node
- linkType: hard
-
-"@testing-library/dom@npm:^8.0.0, @testing-library/dom@npm:^8.1.0":
+"@testing-library/dom@npm:^8.0.0":
version: 8.20.1
resolution: "@testing-library/dom@npm:8.20.1"
dependencies:
@@ -16660,11 +16860,11 @@ __metadata:
linkType: hard
"@types/archiver@npm:^5.1.0, @types/archiver@npm:^5.3.1":
- version: 5.3.2
- resolution: "@types/archiver@npm:5.3.2"
+ version: 5.3.3
+ resolution: "@types/archiver@npm:5.3.3"
dependencies:
"@types/readdir-glob": "*"
- checksum: 9db5b4fdc1740fa07d08340ed827598cc6eda97406ac18a06a158670c7124d4120650a3b9cd660e9e39b42f033cf8f052566da32681e8ad91163473df88a3c4c
+ checksum: e660465ac9a622570ddbad86a306c7234c3272cb28eafe9c3ad7229f06e499dfadae9f0cb0caf41443318eea559b75ef662ea276ae64f19695e72018dae37ee7
languageName: node
linkType: hard
@@ -17028,9 +17228,9 @@ __metadata:
linkType: hard
"@types/d3-selection@npm:*, @types/d3-selection@npm:^3.0.1":
- version: 3.0.6
- resolution: "@types/d3-selection@npm:3.0.6"
- checksum: 01f9f3a41b98280947109911bcc6ebffff5c8c3e617695979c04ef9beef445a8cdc48a9fbdb3c9cff45a7345e83e8a5d6b346d7ceedca6ebc11dfd9717dbff6b
+ version: 3.0.7
+ resolution: "@types/d3-selection@npm:3.0.7"
+ checksum: 715a0c7a78732650ae70b3487b3b6432b063482c1937bcd52c8b7a201563103170fdaa1f8c0ace882062521ac009f07fefb41198c8c43c5d3c518f8368c459d6
languageName: node
linkType: hard
@@ -17067,19 +17267,19 @@ __metadata:
linkType: hard
"@types/d3-zoom@npm:^3.0.1":
- version: 3.0.4
- resolution: "@types/d3-zoom@npm:3.0.4"
+ version: 3.0.5
+ resolution: "@types/d3-zoom@npm:3.0.5"
dependencies:
"@types/d3-interpolate": "*"
"@types/d3-selection": "*"
- checksum: 6330b8411822b979ab0fd5a7a7755295377b4dfc61fd8f925d97e5b388e3dd604b455c0009b0eda3320c14c4ea367f740a04991a71d35befdca5f75218492a68
+ checksum: acff15a30b2b81a99b46692c7aacc110c635a272e8d7e87af6aa5a01ebe9ebcafcaf475399d79ec73461a5ef037041dade49a6371d7587b759710123539b81b0
languageName: node
linkType: hard
"@types/dagre@npm:^0.7.44":
- version: 0.7.49
- resolution: "@types/dagre@npm:0.7.49"
- checksum: cb27683074f8c89c073d0b7b549692b67ddae7225a2b6f9586d75c11598f7bd32d9246ecb184017a55592e7daaf63e4d33dcbc56ca4c3999cf34352460ddf772
+ version: 0.7.50
+ resolution: "@types/dagre@npm:0.7.50"
+ checksum: a128048b5202c501a4595bbc17288aafbef90f3535e79385ddaf0842237e69aa5998dbc12bc2867244eefe3fb6c5026d9785bfdedea46d813f006066e06e8f44
languageName: node
linkType: hard
@@ -17093,9 +17293,9 @@ __metadata:
linkType: hard
"@types/diff@npm:^5.0.0":
- version: 5.0.4
- resolution: "@types/diff@npm:5.0.4"
- checksum: 58f8c3e9c8ed40e97fc8039af95d8f12a620e9facf351273906612ad795678c3f64309e0ce29b03bce8e04a2913f0e6bc5cf2289821bdd312b99f1220025f90a
+ version: 5.0.5
+ resolution: "@types/diff@npm:5.0.5"
+ checksum: 5f093341d5488cd33079400d4b2ff463dfd4f589bf0a54fbb25f7c87a7bdc16bd1e6125f252c081fa9a3ad44fc78b156c0a5f38bd8128edceb40ba084e051885
languageName: node
linkType: hard
@@ -17172,9 +17372,9 @@ __metadata:
linkType: hard
"@types/event-source-polyfill@npm:^1.0.0":
- version: 1.0.1
- resolution: "@types/event-source-polyfill@npm:1.0.1"
- checksum: 37f3ccc40e2fc43230047c3323f8bfc55f6ed40aee8c61af7f6b702a923be5615362cf3241f5a536f9c64932309a2184a0181bb48e105a94b968b8321cae1c60
+ version: 1.0.2
+ resolution: "@types/event-source-polyfill@npm:1.0.2"
+ checksum: f0813edfee0af768e6e0994b48f9f618df7a5d9023c383a8f35e9e805dec560222dc40fc583d5f1404977febb7353c27c1d0606c67d948a2d18634c18ae437a9
languageName: node
linkType: hard
@@ -17186,14 +17386,14 @@ __metadata:
linkType: hard
"@types/express-serve-static-core@npm:*, @types/express-serve-static-core@npm:^4.17.30, @types/express-serve-static-core@npm:^4.17.33, @types/express-serve-static-core@npm:^4.17.5":
- version: 4.17.36
- resolution: "@types/express-serve-static-core@npm:4.17.36"
+ version: 4.17.37
+ resolution: "@types/express-serve-static-core@npm:4.17.37"
dependencies:
"@types/node": "*"
"@types/qs": "*"
"@types/range-parser": "*"
"@types/send": "*"
- checksum: 410b13cbd663f18c0f8729e7f2ff54d960d96de76ebbae7cadb612972f85cc66c54051e00d32f11aa230c0a683d81a6d6fc7f7e4e383a95c0801494c517f36e1
+ checksum: 2dab1380e45eb44e56ecc1be1c42c4b897364d2f2a08e03ca28fbcb1e6866e390217385435813711c046f9acd684424d088855dc32825d5cbecf72c60ecd037f
languageName: node
linkType: hard
@@ -17583,9 +17783,9 @@ __metadata:
linkType: hard
"@types/lodash@npm:^4.14.151, @types/lodash@npm:^4.14.173, @types/lodash@npm:^4.14.175":
- version: 4.14.198
- resolution: "@types/lodash@npm:4.14.198"
- checksum: b290e4480707151bcec738bca40527915defe52a0d8e26c83685c674163a265e1a88cb2ee56b0fb587a89819d0cd5df86ada836aec3e9c2e4bf516e7d348d524
+ version: 4.14.199
+ resolution: "@types/lodash@npm:4.14.199"
+ checksum: e68d1fcbbfce953ed87b296a628573f62939227bcda0c934954e862b421e8a34c5e71cad6fea27b9980567909e6a4698f09025692958e36d64ea9ed99ec6fb2e
languageName: node
linkType: hard
@@ -17621,9 +17821,9 @@ __metadata:
linkType: hard
"@types/marked@npm:^4.0.0":
- version: 4.3.1
- resolution: "@types/marked@npm:4.3.1"
- checksum: eb6891b925d53ea53057f088b28f9232016499e62639cbb4a67f7d34f288ec6a8e40aae4836dbd06bd0fc3c541fca1175cd50d9e8d405547b6be7b7781e6a2a5
+ version: 4.3.2
+ resolution: "@types/marked@npm:4.3.2"
+ checksum: c1107079d6c368dd60a668a41aa2101d006cad404b6eb4af6723d419dc869b278928fb769825f11d0d311a8cf437428992729c8a47253b6a3894a6326b1ee4d9
languageName: node
linkType: hard
@@ -17644,9 +17844,9 @@ __metadata:
linkType: hard
"@types/mime-types@npm:^2.1.0":
- version: 2.1.1
- resolution: "@types/mime-types@npm:2.1.1"
- checksum: 106b5d556add46446a579ad25ff15d6b421851790d887edcad558c90c1e64b1defc72bfbaf4b08f208916e21d9cc45cdb951d77be51268b18221544cfe054a3c
+ version: 2.1.2
+ resolution: "@types/mime-types@npm:2.1.2"
+ checksum: 9e3c78f1c63211e0450901212566a046da68d4438a5e543333ec9b0be3259bd5d01532734dc51ead40104889b98d12c7663b65212a318aafad3e34c98204e9e1
languageName: node
linkType: hard
@@ -17672,27 +17872,27 @@ __metadata:
linkType: hard
"@types/minimist@npm:^1.2.0":
- version: 1.2.2
- resolution: "@types/minimist@npm:1.2.2"
- checksum: b8da83c66eb4aac0440e64674b19564d9d86c80ae273144db9681e5eeff66f238ade9515f5006ffbfa955ceff8b89ad2bd8ec577d7caee74ba101431fb07045d
+ version: 1.2.3
+ resolution: "@types/minimist@npm:1.2.3"
+ checksum: 666ea4f8c39dcbdfbc3171fe6b3902157c845cc9cb8cee33c10deb706cda5e0cc80f98ace2d6d29f6774b0dc21180c96cd73c592a1cbefe04777247c7ba0e84b
languageName: node
linkType: hard
"@types/mock-fs@npm:^4.10.0, @types/mock-fs@npm:^4.13.0":
- version: 4.13.1
- resolution: "@types/mock-fs@npm:4.13.1"
+ version: 4.13.2
+ resolution: "@types/mock-fs@npm:4.13.2"
dependencies:
"@types/node": "*"
- checksum: a5fcf8212daa270e6aa560019a4bd28a66e6fa49c55c1373746d5894f4aa1aafa5588335194953cf014de3c77df6be67a041fb6638ead7124307370985880b6c
+ checksum: 726975ae51f7b4068bb059c633ae28a1d85595d3036c235d3f9c9dc3a9c519dc6b811713af1b686807e80a484a6ec47a742a11b4ada32a6e74eee6538a9f4658
languageName: node
linkType: hard
"@types/morgan@npm:^1.9.0":
- version: 1.9.5
- resolution: "@types/morgan@npm:1.9.5"
+ version: 1.9.6
+ resolution: "@types/morgan@npm:1.9.6"
dependencies:
"@types/node": "*"
- checksum: f98deb4c7f2ad6049ad34ed7b0f0d427546bdf2358011070af9d597de1b0a03b38cc10cfe65ef2e7673e569c384303d949e76df701acefe288d547f614142973
+ checksum: 6525248325a74342f929c958be69c0840c8f3a288e003a8904319cae92e531f17a8aa2700701e66775adcca7f9506dd630fec2f95dc04a3e73add04fde42aab8
languageName: node
linkType: hard
@@ -17713,12 +17913,12 @@ __metadata:
linkType: hard
"@types/ndjson@npm:^2.0.1":
- version: 2.0.1
- resolution: "@types/ndjson@npm:2.0.1"
+ version: 2.0.2
+ resolution: "@types/ndjson@npm:2.0.2"
dependencies:
"@types/node": "*"
"@types/through": "*"
- checksum: d7e5ef9d43424851d1d3e1b223c0d6508bf283c4a769eb08312a96b1e6e60011b3454a5599dbecfdad4128f7c9c6c1b5b4abfabe29bb5065d412dead1c20f9e8
+ checksum: 2f4d60229a01dadd4ed1d7df923223788cc4517a15d0fc07b56b3dbdefb567646334e173d7f976a8a7ce7b85df74bf78fd8805f41bdd9ebd8d135310f472a2cb
languageName: node
linkType: hard
@@ -17733,18 +17933,18 @@ __metadata:
linkType: hard
"@types/node-forge@npm:^1.3.0":
- version: 1.3.5
- resolution: "@types/node-forge@npm:1.3.5"
+ version: 1.3.6
+ resolution: "@types/node-forge@npm:1.3.6"
dependencies:
"@types/node": "*"
- checksum: b93dae2639ab166d8703567285538f14a53fbe9199b02c1e3752d147260be4a8be5257246558a81fc3eee3c5880704039a6aa22c4415aeb06758aad0391ac39c
+ checksum: 5fe97ce83937c51215a52eb8c9d5c4458abbca2b3cfd91a65142f20fd4a2830ed10ab1a8c860efc55ff36553f939a75c4a6d5c243ed6e24e55a005c9bddeaf43
languageName: node
linkType: hard
-"@types/node@npm:*, @types/node@npm:>=12.12.47, @types/node@npm:>=13.7.0":
- version: 20.6.3
- resolution: "@types/node@npm:20.6.3"
- checksum: 444a6f1f41cfa8d3e20ce0108e6e43960fb2ae0e481f233bb1c14d6252aa63a92e021de561cd317d9fdb411688f871065f40175a1f18763282dee2613a08f8a3
+"@types/node@npm:*, @types/node@npm:>=12.12.47, @types/node@npm:>=13.7.0, @types/node@npm:^20.1.1":
+ version: 20.6.5
+ resolution: "@types/node@npm:20.6.5"
+ checksum: b849e849cf7631458a65c5019c81962028e306d8c4455a48422277b240f5a7eb8a1f1dafa60306bd4c773b77263bb8b05c074b1026e868bd137bb2022cf63ea2
languageName: node
linkType: hard
@@ -17755,13 +17955,6 @@ __metadata:
languageName: node
linkType: hard
-"@types/node@npm:^14.14.31":
- version: 14.18.62
- resolution: "@types/node@npm:14.18.62"
- checksum: 1335b4d58d2a21c7f60b8b78d0902ec0653a44f1ead4e921c37dd5f836910e0b00370abfde02c57bc3a73a35ebcbf4ef86b598be9a9ec13981a9a6d40e98fab0
- languageName: node
- linkType: hard
-
"@types/node@npm:^15.6.1":
version: 15.14.9
resolution: "@types/node@npm:15.14.9"
@@ -17769,7 +17962,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/node@npm:^16.18.39, @types/node@npm:^16.9.2":
+"@types/node@npm:^16.9.2":
version: 16.18.53
resolution: "@types/node@npm:16.18.53"
checksum: 26c05cde59664360c22e0dda70776ca6f1b35f0b94e4f84d2c21e2afa2e69ac3a2c99bbb57b43405f81df1b2598f6d707ccc7c4c31865f90e45c4625d8400518
@@ -17798,9 +17991,9 @@ __metadata:
linkType: hard
"@types/nunjucks@npm:^3.1.4":
- version: 3.2.3
- resolution: "@types/nunjucks@npm:3.2.3"
- checksum: f4263a39f0bafb701fe75a088cf2100f0fe717ab29c53d13eb60fea77e945f8cfdabfb84bd6ce85fd11586f90aa36539cf5bd489166edcf56a189a0407d481a2
+ version: 3.2.4
+ resolution: "@types/nunjucks@npm:3.2.4"
+ checksum: d154c6cc98320b6b9f48892eb4238f961b0196e24eb98252f9dceaa0b17bf70cd480a11d4ffda9f419d2570abf6d96524ebd3193b101f0fcf73c65af3e56d064
languageName: node
linkType: hard
@@ -17828,43 +18021,43 @@ __metadata:
linkType: hard
"@types/passport-auth0@npm:^1.0.5":
- version: 1.0.5
- resolution: "@types/passport-auth0@npm:1.0.5"
+ version: 1.0.7
+ resolution: "@types/passport-auth0@npm:1.0.7"
dependencies:
"@types/express": "*"
"@types/passport": "*"
- checksum: b86b69a182864cae6877c0f16a1d62e24a394dc9cde8e7285a29aef89d52fbb555b899e061157bfd52420dcbccd6fd9b189155e5367a22763b0b2813cbb28354
+ checksum: 75b17c3424054a8b0238905088a7c34efab771a0bccc5ce0270d5c6f238ba859fb7354531c0df4f39e7b2c28f10090f9c260ffc42773211fc216a9acbf11170a
languageName: node
linkType: hard
"@types/passport-github2@npm:^1.2.4":
- version: 1.2.5
- resolution: "@types/passport-github2@npm:1.2.5"
+ version: 1.2.6
+ resolution: "@types/passport-github2@npm:1.2.6"
dependencies:
"@types/express": "*"
"@types/passport": "*"
"@types/passport-oauth2": "*"
- checksum: a4f1851edb91a2502136b7e76dd10fd3c52aebec938ff21ffa2ade40b1f62d0e7f65991c80589f5cfa40b6cba04bf0b8ea46db6942975bf5918fa4690f681235
+ checksum: 72d1c8bc335d0d7f329372ac8bc7edb22c8bea151d4438d876036b6b768f4d12c8de305abbc25b650f373b902bae250008cb185074d2d78da49d15e981208d81
languageName: node
linkType: hard
"@types/passport-google-oauth20@npm:^2.0.3":
- version: 2.0.11
- resolution: "@types/passport-google-oauth20@npm:2.0.11"
+ version: 2.0.12
+ resolution: "@types/passport-google-oauth20@npm:2.0.12"
dependencies:
"@types/express": "*"
"@types/passport": "*"
"@types/passport-oauth2": "*"
- checksum: 5e87a0bf40d77ce863dbcea4ae1cd6bccc663282593c9b6ce83b0e2d5d6c56ed9dc0275a04f5d81832f03b3a477fd47d17fd9b3ee22ceb69ca445ab0b0d326d7
+ checksum: e73fff5b7e3191ab1a3633b05b4463d656ef658fe0612bc33517a1df81c8a1f019c91dcbd244233320f9eb133892b589dcb6a6348082e85e45aa5c6ed034d191
languageName: node
linkType: hard
"@types/passport-microsoft@npm:^1.0.0":
- version: 1.0.0
- resolution: "@types/passport-microsoft@npm:1.0.0"
+ version: 1.0.1
+ resolution: "@types/passport-microsoft@npm:1.0.1"
dependencies:
"@types/passport-oauth2": "*"
- checksum: d7c8b439b18cddcf707ea0c575748ecb344b6fb3c78a847aaad83246abf081c8b485efa86a3788cd5f49f4ca84a1444d813697a433fab9d04f35fb67d628cb23
+ checksum: eec44ee6e14448b89434503a438021df6738513fa705b42a6d979a6b817ce89f939996a5d30707a64bca700dbc7c6ae52f1010ad2e986bb7ccd9f935d2114c9e
languageName: node
linkType: hard
@@ -17880,22 +18073,22 @@ __metadata:
linkType: hard
"@types/passport-saml@npm:^1.1.3":
- version: 1.1.3
- resolution: "@types/passport-saml@npm:1.1.3"
+ version: 1.1.4
+ resolution: "@types/passport-saml@npm:1.1.4"
dependencies:
"@types/express": "*"
"@types/passport": "*"
- checksum: 1d0abc04b1f19c043f9dd311248d3d98b00b311ed6d2cfa6cb17ef0954d0b403de4ccca4f1be192cbfda92105eb799c7963da6f39e4542ca254b06d5c467ed4a
+ checksum: 2a71d64c72b0f6cf4cafcc21138f5c925cc9bc375a0dd7ece664e8b1254dd4a704566632bafa3e16032821a7f010de4023169589b643a3b952709cde228a8c8c
languageName: node
linkType: hard
"@types/passport-strategy@npm:^0.2.35":
- version: 0.2.35
- resolution: "@types/passport-strategy@npm:0.2.35"
+ version: 0.2.36
+ resolution: "@types/passport-strategy@npm:0.2.36"
dependencies:
"@types/express": "*"
"@types/passport": "*"
- checksum: e5949063ad8977ce1f7cf2a5df6bc379c4d43a959c9946bfed6570ef379c6c12d1713212a29b3b5aafc631c5ebe9bfe082116f3e75ca1bf45d79dd889671532d
+ checksum: 7f626eb6a12110c1ce64dd5d5181fc0795e77d60123872e33f6fa1c02a2a19451207eaf03543232241a1d70bfe0318f2ffeef88f6309d7cbaa43d2bf6ec1d1e8
languageName: node
linkType: hard
@@ -17909,13 +18102,13 @@ __metadata:
linkType: hard
"@types/pg@npm:^8.6.6":
- version: 8.10.2
- resolution: "@types/pg@npm:8.10.2"
+ version: 8.10.3
+ resolution: "@types/pg@npm:8.10.3"
dependencies:
"@types/node": "*"
pg-protocol: "*"
pg-types: ^4.0.1
- checksum: 49da89f64cec1bd12a3fbc0c72b17d685c2fee579726a529f62fcab395dbc5696d80455073409947a577164b3c53a90181a331e4a5d9357679f724d4ce37f4b9
+ checksum: 05a12be3f18cc67728e3aee5a7426f065351ca991e351d2e7a0562c5d9063425d67fe88fd35108834e0fa1f5624032fefbf371cf8f3cc47230a666aa953425b9
languageName: node
linkType: hard
@@ -18279,14 +18472,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/sinonjs__fake-timers@npm:8.1.1":
- version: 8.1.1
- resolution: "@types/sinonjs__fake-timers@npm:8.1.1"
- checksum: ca09d54d47091d87020824a73f026300fa06b17cd9f2f9b9387f28b549364b141ef194ee28db762f6588de71d8febcd17f753163cb7ea116b8387c18e80ebd5c
- languageName: node
- linkType: hard
-
-"@types/sizzle@npm:*, @types/sizzle@npm:^2.3.2":
+"@types/sizzle@npm:*":
version: 2.3.2
resolution: "@types/sizzle@npm:2.3.2"
checksum: 783b6382934d8f12f2e21220a01c4557150f07abd18336f392664fb74ceaa9a9d59b7c859c0b82fd3f15b6484774cd0d493261fe64c78ee399bf198a8fe8d89d
@@ -18572,7 +18758,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/yauzl@npm:^2.10.0, @types/yauzl@npm:^2.9.1":
+"@types/yauzl@npm:^2.10.0":
version: 2.10.0
resolution: "@types/yauzl@npm:2.10.0"
dependencies:
@@ -19541,13 +19727,6 @@ __metadata:
languageName: node
linkType: hard
-"arch@npm:^2.2.0":
- version: 2.2.0
- resolution: "arch@npm:2.2.0"
- checksum: e21b7635029fe8e9cdd5a026f9a6c659103e63fff423834323cdf836a1bb240a72d0c39ca8c470f84643385cf581bd8eda2cad8bf493e27e54bd9783abe9101f
- languageName: node
- linkType: hard
-
"archiver-utils@npm:^2.1.0":
version: 2.1.0
resolution: "archiver-utils@npm:2.1.0"
@@ -19608,13 +19787,6 @@ __metadata:
languageName: node
linkType: hard
-"arg@npm:^5.0.2":
- version: 5.0.2
- resolution: "arg@npm:5.0.2"
- checksum: 6c69ada1a9943d332d9e5382393e897c500908d91d5cb735a01120d5f71daf1b339b7b8980cbeaba8fd1afc68e658a739746179e4315a26e8a28951ff9930078
- languageName: node
- linkType: hard
-
"argparse@npm:^1.0.10, argparse@npm:^1.0.7, argparse@npm:~1.0.9":
version: 1.0.10
resolution: "argparse@npm:1.0.10"
@@ -20529,14 +20701,7 @@ __metadata:
languageName: node
linkType: hard
-"blob-util@npm:^2.0.2":
- version: 2.0.2
- resolution: "blob-util@npm:2.0.2"
- checksum: d543e6b92e4ca715ca33c78e89a07a2290d43e5b2bc897d7ec588c5c7bbf59df93e45225ac0c9258aa6ce4320358990f99c9288f1c48280f8ec5d7a2e088d19b
- languageName: node
- linkType: hard
-
-"bluebird@npm:3.7.2, bluebird@npm:^3.5.5, bluebird@npm:^3.7.2":
+"bluebird@npm:^3.5.5, bluebird@npm:^3.7.2":
version: 3.7.2
resolution: "bluebird@npm:3.7.2"
checksum: 869417503c722e7dc54ca46715f70e15f4d9c602a423a02c825570862d12935be59ed9c7ba34a9b31f186c017c23cac6b54e35446f8353059c101da73eac22ef
@@ -20861,7 +21026,7 @@ __metadata:
languageName: node
linkType: hard
-"buffer@npm:^5.2.1, buffer@npm:^5.5.0, buffer@npm:^5.6.0":
+"buffer@npm:^5.5.0":
version: 5.7.1
resolution: "buffer@npm:5.7.1"
dependencies:
@@ -21026,13 +21191,6 @@ __metadata:
languageName: node
linkType: hard
-"cachedir@npm:^2.3.0":
- version: 2.3.0
- resolution: "cachedir@npm:2.3.0"
- checksum: ec90cb0f2e6336e266aa748dbadf3da9e0b20e843e43f1591acab7a3f1451337dc2f26cb9dd833ae8cfefeffeeb43ef5b5ff62782a685f4e3c2305dd98482fcb
- languageName: node
- linkType: hard
-
"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2":
version: 1.0.2
resolution: "call-bind@npm:1.0.2"
@@ -21319,13 +21477,6 @@ __metadata:
languageName: node
linkType: hard
-"check-more-types@npm:2.24.0, check-more-types@npm:^2.24.0":
- version: 2.24.0
- resolution: "check-more-types@npm:2.24.0"
- checksum: b09080ec3404d20a4b0ead828994b2e5913236ef44ed3033a27062af0004cf7d2091fbde4b396bf13b7ce02fb018bc9960b48305e6ab2304cd82d73ed7a51ef4
- languageName: node
- linkType: hard
-
"check-types@npm:^11.1.1":
version: 11.1.2
resolution: "check-types@npm:11.1.2"
@@ -21472,19 +21623,6 @@ __metadata:
languageName: node
linkType: hard
-"cli-table3@npm:~0.6.1":
- version: 0.6.1
- resolution: "cli-table3@npm:0.6.1"
- dependencies:
- colors: 1.4.0
- string-width: ^4.2.0
- dependenciesMeta:
- colors:
- optional: true
- checksum: 956e175f8eb019c26465b9f1e51121c08d8978e2aab04be7f8520ea8a4e67906fcbd8516dfb77e386ae3730ef0281aa21a65613dffbfa3d62969263252bd25a9
- languageName: node
- linkType: hard
-
"cli-table@npm:^0.3.1":
version: 0.3.6
resolution: "cli-table@npm:0.3.6"
@@ -21804,7 +21942,7 @@ __metadata:
languageName: node
linkType: hard
-"color@npm:^4.0.1, color@npm:^4.2.3":
+"color@npm:^4.0.1":
version: 4.2.3
resolution: "color@npm:4.2.3"
dependencies:
@@ -21842,13 +21980,6 @@ __metadata:
languageName: node
linkType: hard
-"colors@npm:1.4.0":
- version: 1.4.0
- resolution: "colors@npm:1.4.0"
- checksum: 98aa2c2418ad87dedf25d781be69dc5fc5908e279d9d30c34d8b702e586a0474605b3a189511482b9d5ed0d20c867515d22749537f7bc546256c6014f3ebdcec
- languageName: node
- linkType: hard
-
"colors@npm:~1.2.1":
version: 1.2.5
resolution: "colors@npm:1.2.5"
@@ -21945,13 +22076,6 @@ __metadata:
languageName: node
linkType: hard
-"commander@npm:^6.2.1":
- version: 6.2.1
- resolution: "commander@npm:6.2.1"
- checksum: d7090410c0de6bc5c67d3ca41c41760d6d268f3c799e530aafb73b7437d1826bbf0d2a3edac33f8b57cc9887b4a986dce307fa5557e109be40eadb7c43b21742
- languageName: node
- linkType: hard
-
"commander@npm:^7.2.0":
version: 7.2.0
resolution: "commander@npm:7.2.0"
@@ -21980,7 +22104,7 @@ __metadata:
languageName: node
linkType: hard
-"common-tags@npm:1.8.2, common-tags@npm:^1.8.0":
+"common-tags@npm:1.8.2":
version: 1.8.2
resolution: "common-tags@npm:1.8.2"
checksum: 767a6255a84bbc47df49a60ab583053bb29a7d9687066a18500a516188a062c4e4cd52de341f22de0b07062e699b1b8fe3cfa1cb55b241cb9301aeb4f45b4dff
@@ -22521,12 +22645,12 @@ __metadata:
languageName: node
linkType: hard
-"cronstrue@npm:^2.2.0":
- version: 2.31.0
- resolution: "cronstrue@npm:2.31.0"
+"cronstrue@npm:^2.2.0, cronstrue@npm:^2.32.0":
+ version: 2.32.0
+ resolution: "cronstrue@npm:2.32.0"
bin:
cronstrue: bin/cli.js
- checksum: 8001433f65751ccd471497be14924dfecd6b91992d615ec7de1fec978792e4a3ab977d05874bea7b6a478dc786ea775554735126c79c8bbe3c94535f20ebebab
+ checksum: a0925e256583122792fe2f3b92cd49b954ab3e4466c7569a9148b9981db8a389faca139d4eb215142e7b67438a5562219956c56041ed0b8b046b798e72a357a8
languageName: node
linkType: hard
@@ -22542,15 +22666,6 @@ __metadata:
languageName: node
linkType: hard
-"cross-fetch@npm:3.1.5":
- version: 3.1.5
- resolution: "cross-fetch@npm:3.1.5"
- dependencies:
- node-fetch: 2.6.7
- checksum: f6b8c6ee3ef993ace6277fd789c71b6acf1b504fd5f5c7128df4ef2f125a429e29cd62dc8c127523f04a5f2fa4771ed80e3f3d9695617f441425045f505cf3bb
- languageName: node
- linkType: hard
-
"cross-fetch@npm:^3.1.3, cross-fetch@npm:^3.1.5, cross-fetch@npm:^3.1.8 <4":
version: 3.1.8
resolution: "cross-fetch@npm:3.1.8"
@@ -22918,111 +23033,6 @@ __metadata:
languageName: node
linkType: hard
-"cypress@npm:^10.0.0":
- version: 10.11.0
- resolution: "cypress@npm:10.11.0"
- dependencies:
- "@cypress/request": ^2.88.10
- "@cypress/xvfb": ^1.2.4
- "@types/node": ^14.14.31
- "@types/sinonjs__fake-timers": 8.1.1
- "@types/sizzle": ^2.3.2
- arch: ^2.2.0
- blob-util: ^2.0.2
- bluebird: ^3.7.2
- buffer: ^5.6.0
- cachedir: ^2.3.0
- chalk: ^4.1.0
- check-more-types: ^2.24.0
- cli-cursor: ^3.1.0
- cli-table3: ~0.6.1
- commander: ^5.1.0
- common-tags: ^1.8.0
- dayjs: ^1.10.4
- debug: ^4.3.2
- enquirer: ^2.3.6
- eventemitter2: 6.4.7
- execa: 4.1.0
- executable: ^4.1.1
- extract-zip: 2.0.1
- figures: ^3.2.0
- fs-extra: ^9.1.0
- getos: ^3.2.1
- is-ci: ^3.0.0
- is-installed-globally: ~0.4.0
- lazy-ass: ^1.6.0
- listr2: ^3.8.3
- lodash: ^4.17.21
- log-symbols: ^4.0.0
- minimist: ^1.2.6
- ospath: ^1.2.2
- pretty-bytes: ^5.6.0
- proxy-from-env: 1.0.0
- request-progress: ^3.0.0
- semver: ^7.3.2
- supports-color: ^8.1.1
- tmp: ~0.2.1
- untildify: ^4.0.0
- yauzl: ^2.10.0
- bin:
- cypress: bin/cypress
- checksum: 938cc6a20f7eeace5c8e850d234904ee1651cbb36d94666fe600cf17ce964e73d4f7d8d944aab677491702a57364e6aceeb4fe8bcbd96147ff5e2b575a956fb2
- languageName: node
- linkType: hard
-
-"cypress@npm:^12.0.0":
- version: 12.17.4
- resolution: "cypress@npm:12.17.4"
- dependencies:
- "@cypress/request": 2.88.12
- "@cypress/xvfb": ^1.2.4
- "@types/node": ^16.18.39
- "@types/sinonjs__fake-timers": 8.1.1
- "@types/sizzle": ^2.3.2
- arch: ^2.2.0
- blob-util: ^2.0.2
- bluebird: ^3.7.2
- buffer: ^5.6.0
- cachedir: ^2.3.0
- chalk: ^4.1.0
- check-more-types: ^2.24.0
- cli-cursor: ^3.1.0
- cli-table3: ~0.6.1
- commander: ^6.2.1
- common-tags: ^1.8.0
- dayjs: ^1.10.4
- debug: ^4.3.4
- enquirer: ^2.3.6
- eventemitter2: 6.4.7
- execa: 4.1.0
- executable: ^4.1.1
- extract-zip: 2.0.1
- figures: ^3.2.0
- fs-extra: ^9.1.0
- getos: ^3.2.1
- is-ci: ^3.0.0
- is-installed-globally: ~0.4.0
- lazy-ass: ^1.6.0
- listr2: ^3.8.3
- lodash: ^4.17.21
- log-symbols: ^4.0.0
- minimist: ^1.2.8
- ospath: ^1.2.2
- pretty-bytes: ^5.6.0
- process: ^0.11.10
- proxy-from-env: 1.0.0
- request-progress: ^3.0.0
- semver: ^7.5.3
- supports-color: ^8.1.1
- tmp: ~0.2.1
- untildify: ^4.0.0
- yauzl: ^2.10.0
- bin:
- cypress: bin/cypress
- checksum: c9c79f5493b23e9c8cfb92d45d50ea9d0fae54210dde203bfa794a79436faf60108d826fe9007a7d67fddf7919802ad8f006b7ae56c5c198c75d5bc85bbc851b
- languageName: node
- linkType: hard
-
"d3-array@npm:2 - 3, d3-array@npm:2.10.0 - 3, d3-array@npm:^3.1.6":
version: 3.2.3
resolution: "d3-array@npm:3.2.3"
@@ -23271,13 +23281,6 @@ __metadata:
languageName: node
linkType: hard
-"dayjs@npm:^1.10.4":
- version: 1.10.4
- resolution: "dayjs@npm:1.10.4"
- checksum: d248d6aa1e04f8577a94978e5194c1023347bc08b7c2766d4a4d50b0b69382d3f4fd912b9fcb64ffad4ee2947d53cd8e5d707f49b14817eb7810959d8d95c938
- languageName: node
- linkType: hard
-
"debounce@npm:^1.1.0, debounce@npm:^1.2.0":
version: 1.2.1
resolution: "debounce@npm:1.2.1"
@@ -23306,7 +23309,7 @@ __metadata:
languageName: node
linkType: hard
-"debug@npm:^3.1.0, debug@npm:^3.2.7":
+"debug@npm:^3.2.7":
version: 3.2.7
resolution: "debug@npm:3.2.7"
dependencies:
@@ -23599,7 +23602,7 @@ __metadata:
languageName: node
linkType: hard
-"detect-libc@npm:^2.0.0, detect-libc@npm:^2.0.1":
+"detect-libc@npm:^2.0.0":
version: 2.0.1
resolution: "detect-libc@npm:2.0.1"
checksum: ccb05fcabbb555beb544d48080179c18523a343face9ee4e1a86605a8715b4169f94d663c21a03c310ac824592f2ba9a5270218819bb411ad7be578a527593d7
@@ -23633,13 +23636,6 @@ __metadata:
languageName: node
linkType: hard
-"devtools-protocol@npm:0.0.1036444":
- version: 0.0.1036444
- resolution: "devtools-protocol@npm:0.0.1036444"
- checksum: 6975c8def95a5e1a4207d6deb05322e335d6a37bdaa3e589cbd5bde40fbbe3ab0df2cfedb1b3ad2785401f208c150fd489a6a065a4624b56e4c0c4c1bfd89172
- languageName: node
- linkType: hard
-
"dezalgo@npm:^1.0.0, dezalgo@npm:^1.0.4":
version: 1.0.4
resolution: "dezalgo@npm:1.0.4"
@@ -23961,7 +23957,7 @@ __metadata:
languageName: node
linkType: hard
-"duplexer@npm:^0.1.2, duplexer@npm:~0.1.1":
+"duplexer@npm:^0.1.2":
version: 0.1.2
resolution: "duplexer@npm:0.1.2"
checksum: 62ba61a830c56801db28ff6305c7d289b6dc9f859054e8c982abd8ee0b0a14d2e9a8e7d086ffee12e868d43e2bbe8a964be55ddbd8c8957714c87373c7a4f9b0
@@ -23999,7 +23995,6 @@ __metadata:
mysql2: ^2.2.5
nodemon: ^3.0.1
pgtools: ^1.0.0
- puppeteer: ^17.0.0
tree-kill: ^1.2.2
ts-node: ^10.0.0
bin:
@@ -24180,7 +24175,7 @@ __metadata:
languageName: node
linkType: hard
-"enquirer@npm:^2.3.0, enquirer@npm:^2.3.6":
+"enquirer@npm:^2.3.0":
version: 2.3.6
resolution: "enquirer@npm:2.3.6"
dependencies:
@@ -24939,17 +24934,6 @@ __metadata:
languageName: node
linkType: hard
-"eslint-plugin-cypress@npm:^2.10.3":
- version: 2.14.0
- resolution: "eslint-plugin-cypress@npm:2.14.0"
- dependencies:
- globals: ^13.20.0
- peerDependencies:
- eslint: ">= 3.2.1"
- checksum: 3fa118a757aebb1aa6b419b2944744796aa4fa3cc1e2e19fa97777fd6792fba12b5ae117bf19bf7e7d9a1abdd48398cfba9ca6f2c62fd690a2108a9a02f3f2ae
- languageName: node
- linkType: hard
-
"eslint-plugin-deprecation@npm:^1.3.2":
version: 1.5.0
resolution: "eslint-plugin-deprecation@npm:1.5.0"
@@ -25311,21 +25295,6 @@ __metadata:
languageName: node
linkType: hard
-"event-stream@npm:=3.3.4":
- version: 3.3.4
- resolution: "event-stream@npm:3.3.4"
- dependencies:
- duplexer: ~0.1.1
- from: ~0
- map-stream: ~0.1.0
- pause-stream: 0.0.11
- split: 0.3
- stream-combiner: ~0.0.4
- through: ~2.3.1
- checksum: 80b467820b6daf824d9fb4345d2daf115a056e5c104463f2e98534e92d196a27f2df5ea2aa085624db26f4c45698905499e881d13bc7c01f7a13eac85be72a22
- languageName: node
- linkType: hard
-
"event-target-polyfill@npm:^0.0.3":
version: 0.0.3
resolution: "event-target-polyfill@npm:0.0.3"
@@ -25340,7 +25309,7 @@ __metadata:
languageName: node
linkType: hard
-"eventemitter2@npm:6.4.7, eventemitter2@npm:^6.4.4":
+"eventemitter2@npm:^6.4.4":
version: 6.4.7
resolution: "eventemitter2@npm:6.4.7"
checksum: 1b36a77e139d6965ebf3a36c01fa00c089ae6b80faa1911e52888f40b3a7057b36a2cc45dcd1ad87cda3798fe7b97a0aabcbb8175a8b96092a23bb7d0f039e66
@@ -25407,6 +25376,7 @@ __metadata:
"@backstage/plugin-azure-devops": "workspace:^"
"@backstage/plugin-azure-sites": "workspace:^"
"@backstage/plugin-badges": "workspace:^"
+ "@backstage/plugin-catalog": "workspace:^"
"@backstage/plugin-catalog-common": "workspace:^"
"@backstage/plugin-catalog-graph": "workspace:^"
"@backstage/plugin-catalog-import": "workspace:^"
@@ -25460,7 +25430,6 @@ __metadata:
"@backstage/plugin-user-settings": "workspace:^"
"@backstage/test-utils": "workspace:^"
"@backstage/theme": "workspace:^"
- "@internal/plugin-catalog-customized": "workspace:^"
"@material-ui/core": ^4.12.2
"@material-ui/icons": ^4.9.1
"@material-ui/lab": 4.0.0-alpha.61
@@ -25470,7 +25439,6 @@ __metadata:
"@roadiehq/backstage-plugin-github-insights": ^2.0.5
"@roadiehq/backstage-plugin-github-pull-requests": ^2.2.7
"@roadiehq/backstage-plugin-travis-ci": ^2.0.5
- "@testing-library/cypress": ^9.0.0
"@testing-library/dom": ^8.0.0
"@testing-library/jest-dom": ^5.10.1
"@testing-library/react": ^12.1.3
@@ -25481,8 +25449,6 @@ __metadata:
"@types/zen-observable": ^0.8.0
app-next-example-plugin: "workspace:^"
cross-env: ^7.0.0
- cypress: ^12.0.0
- eslint-plugin-cypress: ^2.10.3
history: ^5.0.0
lodash: ^4.17.21
prop-types: ^15.7.2
@@ -25491,7 +25457,6 @@ __metadata:
react-router: ^6.3.0
react-router-dom: ^6.3.0
react-use: ^17.2.4
- start-server-and-test: ^1.10.11
zen-observable: ^0.10.0
languageName: unknown
linkType: soft
@@ -25522,6 +25487,7 @@ __metadata:
"@backstage/plugin-azure-devops": "workspace:^"
"@backstage/plugin-azure-sites": "workspace:^"
"@backstage/plugin-badges": "workspace:^"
+ "@backstage/plugin-catalog": "workspace:^"
"@backstage/plugin-catalog-common": "workspace:^"
"@backstage/plugin-catalog-graph": "workspace:^"
"@backstage/plugin-catalog-import": "workspace:^"
@@ -25576,17 +25542,16 @@ __metadata:
"@backstage/plugin-user-settings": "workspace:^"
"@backstage/test-utils": "workspace:^"
"@backstage/theme": "workspace:^"
- "@internal/plugin-catalog-customized": "workspace:^"
"@material-ui/core": ^4.12.2
"@material-ui/icons": ^4.9.1
"@material-ui/lab": 4.0.0-alpha.61
"@octokit/rest": ^19.0.3
"@oriflame/backstage-plugin-score-card": ^0.7.0
+ "@playwright/test": ^1.32.3
"@roadiehq/backstage-plugin-buildkite": ^2.0.8
"@roadiehq/backstage-plugin-github-insights": ^2.0.5
"@roadiehq/backstage-plugin-github-pull-requests": ^2.2.7
"@roadiehq/backstage-plugin-travis-ci": ^2.0.5
- "@testing-library/cypress": ^9.0.0
"@testing-library/dom": ^8.0.0
"@testing-library/jest-dom": ^5.10.1
"@testing-library/react": ^12.1.3
@@ -25596,8 +25561,6 @@ __metadata:
"@types/react-dom": "*"
"@types/zen-observable": ^0.8.0
cross-env: ^7.0.0
- cypress: ^12.0.0
- eslint-plugin-cypress: ^2.10.3
history: ^5.0.0
prop-types: ^15.7.2
react: ^17.0.2
@@ -25605,7 +25568,6 @@ __metadata:
react-router: ^6.3.0
react-router-dom: ^6.3.0
react-use: ^17.2.4
- start-server-and-test: ^1.10.11
zen-observable: ^0.10.0
languageName: unknown
linkType: soft
@@ -25635,6 +25597,7 @@ __metadata:
"@backstage/plugin-permission-backend-module-allow-all-policy": "workspace:^"
"@backstage/plugin-permission-common": "workspace:^"
"@backstage/plugin-permission-node": "workspace:^"
+ "@backstage/plugin-playlist-backend": "workspace:^"
"@backstage/plugin-proxy-backend": "workspace:^"
"@backstage/plugin-scaffolder-backend": "workspace:^"
"@backstage/plugin-search-backend": "workspace:^"
@@ -25642,6 +25605,7 @@ __metadata:
"@backstage/plugin-search-backend-module-explore": "workspace:^"
"@backstage/plugin-search-backend-module-techdocs": "workspace:^"
"@backstage/plugin-search-backend-node": "workspace:^"
+ "@backstage/plugin-sonarqube-backend": "workspace:^"
"@backstage/plugin-techdocs-backend": "workspace:^"
"@backstage/plugin-todo-backend": "workspace:^"
languageName: unknown
@@ -25729,40 +25693,6 @@ __metadata:
languageName: unknown
linkType: soft
-"execa@npm:4.1.0":
- version: 4.1.0
- resolution: "execa@npm:4.1.0"
- dependencies:
- cross-spawn: ^7.0.0
- get-stream: ^5.0.0
- human-signals: ^1.1.1
- is-stream: ^2.0.0
- merge-stream: ^2.0.0
- npm-run-path: ^4.0.0
- onetime: ^5.1.0
- signal-exit: ^3.0.2
- strip-final-newline: ^2.0.0
- checksum: e30d298934d9c52f90f3847704fd8224e849a081ab2b517bbc02f5f7732c24e56a21f14cb96a08256deffeb2d12b2b7cb7e2b014a12fb36f8d3357e06417ed55
- languageName: node
- linkType: hard
-
-"execa@npm:5.1.1, execa@npm:^5.0.0":
- version: 5.1.1
- resolution: "execa@npm:5.1.1"
- dependencies:
- cross-spawn: ^7.0.3
- get-stream: ^6.0.0
- human-signals: ^2.1.0
- is-stream: ^2.0.0
- merge-stream: ^2.0.0
- npm-run-path: ^4.0.1
- onetime: ^5.1.2
- signal-exit: ^3.0.3
- strip-final-newline: ^2.0.0
- checksum: fba9022c8c8c15ed862847e94c252b3d946036d7547af310e344a527e59021fd8b6bb0723883ea87044dc4f0201f949046993124a42ccb0855cae5bf8c786343
- languageName: node
- linkType: hard
-
"execa@npm:7.2.0":
version: 7.2.0
resolution: "execa@npm:7.2.0"
@@ -25780,12 +25710,20 @@ __metadata:
languageName: node
linkType: hard
-"executable@npm:^4.1.1":
- version: 4.1.1
- resolution: "executable@npm:4.1.1"
+"execa@npm:^5.0.0":
+ version: 5.1.1
+ resolution: "execa@npm:5.1.1"
dependencies:
- pify: ^2.2.0
- checksum: f01927ce59bccec804e171bf859a26e362c1f50aa9ebc69f7cafdcce3859d29d4b6267fd47237c18b0a1830614bd3f0ee14b7380d9bad18a4e7af9b5f0b6984f
+ cross-spawn: ^7.0.3
+ get-stream: ^6.0.0
+ human-signals: ^2.1.0
+ is-stream: ^2.0.0
+ merge-stream: ^2.0.0
+ npm-run-path: ^4.0.1
+ onetime: ^5.1.2
+ signal-exit: ^3.0.3
+ strip-final-newline: ^2.0.0
+ checksum: fba9022c8c8c15ed862847e94c252b3d946036d7547af310e344a527e59021fd8b6bb0723883ea87044dc4f0201f949046993124a42ccb0855cae5bf8c786343
languageName: node
linkType: hard
@@ -25989,23 +25927,6 @@ __metadata:
languageName: node
linkType: hard
-"extract-zip@npm:2.0.1":
- version: 2.0.1
- resolution: "extract-zip@npm:2.0.1"
- dependencies:
- "@types/yauzl": ^2.9.1
- debug: ^4.1.1
- get-stream: ^5.1.0
- yauzl: ^2.10.0
- dependenciesMeta:
- "@types/yauzl":
- optional: true
- bin:
- extract-zip: cli.js
- checksum: 8cbda9debdd6d6980819cc69734d874ddd71051c9fe5bde1ef307ebcedfe949ba57b004894b585f758b7c9eeeea0e3d87f2dda89b7d25320459c2c9643ebb635
- languageName: node
- linkType: hard
-
"extsprintf@npm:1.3.0":
version: 1.3.0
resolution: "extsprintf@npm:1.3.0"
@@ -26276,7 +26197,7 @@ __metadata:
languageName: node
linkType: hard
-"figures@npm:^3.0.0, figures@npm:^3.2.0":
+"figures@npm:^3.0.0":
version: 3.2.0
resolution: "figures@npm:3.2.0"
dependencies:
@@ -26714,13 +26635,6 @@ __metadata:
languageName: node
linkType: hard
-"from@npm:~0":
- version: 0.1.7
- resolution: "from@npm:0.1.7"
- checksum: b85125b7890489656eb2e4f208f7654a93ec26e3aefaf3bbbcc0d496fc1941e4405834fcc9fe7333192aa2187905510ace70417bbf9ac6f6f4784a731d986939
- languageName: node
- linkType: hard
-
"fromentries@npm:^1.3.1":
version: 1.3.2
resolution: "fromentries@npm:1.3.2"
@@ -26744,7 +26658,7 @@ __metadata:
languageName: node
linkType: hard
-"fs-extra@npm:10.1.0, fs-extra@npm:^10.0.0, fs-extra@npm:^10.0.1":
+"fs-extra@npm:10.1.0, fs-extra@npm:^10.0.0, fs-extra@npm:^10.0.1, fs-extra@npm:^10.1.0":
version: 10.1.0
resolution: "fs-extra@npm:10.1.0"
dependencies:
@@ -26777,7 +26691,7 @@ __metadata:
languageName: node
linkType: hard
-"fs-extra@npm:^9.0.0, fs-extra@npm:^9.1.0":
+"fs-extra@npm:^9.0.0":
version: 9.1.0
resolution: "fs-extra@npm:9.1.0"
dependencies:
@@ -26821,7 +26735,7 @@ __metadata:
languageName: node
linkType: hard
-"fsevents@npm:^2.3.2, fsevents@npm:~2.3.2":
+"fsevents@npm:2.3.2, fsevents@npm:^2.3.2, fsevents@npm:~2.3.2":
version: 2.3.2
resolution: "fsevents@npm:2.3.2"
dependencies:
@@ -26831,7 +26745,7 @@ __metadata:
languageName: node
linkType: hard
-"fsevents@patch:fsevents@^2.3.2#~builtin, fsevents@patch:fsevents@~2.3.2#~builtin":
+"fsevents@patch:fsevents@2.3.2#~builtin, fsevents@patch:fsevents@^2.3.2#~builtin, fsevents@patch:fsevents@~2.3.2#~builtin":
version: 2.3.2
resolution: "fsevents@patch:fsevents@npm%3A2.3.2#~builtin::version=2.3.2&hash=18f3a7"
dependencies:
@@ -27004,7 +26918,7 @@ __metadata:
languageName: node
linkType: hard
-"get-stream@npm:^5.0.0, get-stream@npm:^5.1.0":
+"get-stream@npm:^5.1.0":
version: 5.1.0
resolution: "get-stream@npm:5.1.0"
dependencies:
@@ -27044,15 +26958,6 @@ __metadata:
languageName: node
linkType: hard
-"getos@npm:^3.2.1":
- version: 3.2.1
- resolution: "getos@npm:3.2.1"
- dependencies:
- async: ^3.2.0
- checksum: 42fd78a66d47cebd3e09de5566cc0044e034b08f4a000a310dbd89a77b02c65d8f4002554bfa495ea5bdc4fa9d515f5ac785a7cc474ba45383cc697f865eeaf1
- languageName: node
- linkType: hard
-
"getpass@npm:^0.1.1":
version: 0.1.7
resolution: "getpass@npm:0.1.7"
@@ -27127,19 +27032,6 @@ __metadata:
languageName: node
linkType: hard
-"glob@npm:8.1.0, glob@npm:^8.0.0, glob@npm:^8.0.1, glob@npm:^8.0.3":
- version: 8.1.0
- resolution: "glob@npm:8.1.0"
- dependencies:
- fs.realpath: ^1.0.0
- inflight: ^1.0.4
- inherits: 2
- minimatch: ^5.0.1
- once: ^1.3.0
- checksum: 92fbea3221a7d12075f26f0227abac435de868dd0736a17170663783296d0dd8d3d532a5672b4488a439bf5d7fb85cdd07c11185d6cd39184f0385cbdfb86a47
- languageName: node
- linkType: hard
-
"glob@npm:^10.2.2":
version: 10.2.7
resolution: "glob@npm:10.2.7"
@@ -27169,6 +27061,19 @@ __metadata:
languageName: node
linkType: hard
+"glob@npm:^8.0.0, glob@npm:^8.0.1, glob@npm:^8.0.3":
+ version: 8.1.0
+ resolution: "glob@npm:8.1.0"
+ dependencies:
+ fs.realpath: ^1.0.0
+ inflight: ^1.0.4
+ inherits: 2
+ minimatch: ^5.0.1
+ once: ^1.3.0
+ checksum: 92fbea3221a7d12075f26f0227abac435de868dd0736a17170663783296d0dd8d3d532a5672b4488a439bf5d7fb85cdd07c11185d6cd39184f0385cbdfb86a47
+ languageName: node
+ linkType: hard
+
"global-agent@npm:^3.0.0":
version: 3.0.0
resolution: "global-agent@npm:3.0.0"
@@ -27183,15 +27088,6 @@ __metadata:
languageName: node
linkType: hard
-"global-dirs@npm:^3.0.0":
- version: 3.0.0
- resolution: "global-dirs@npm:3.0.0"
- dependencies:
- ini: 2.0.0
- checksum: 953c17cf14bf6ee0e2100ae82a0d779934eed8a3ec5c94a7a4f37c5b3b592c31ea015fb9a15cf32484de13c79f4a814f3015152f3e1d65976cfbe47c1bfe4a88
- languageName: node
- linkType: hard
-
"global-modules@npm:^2.0.0":
version: 2.0.0
resolution: "global-modules@npm:2.0.0"
@@ -27219,7 +27115,7 @@ __metadata:
languageName: node
linkType: hard
-"globals@npm:^13.19.0, globals@npm:^13.20.0":
+"globals@npm:^13.19.0":
version: 13.20.0
resolution: "globals@npm:13.20.0"
dependencies:
@@ -28100,17 +27996,6 @@ __metadata:
languageName: node
linkType: hard
-"http-signature@npm:~1.3.6":
- version: 1.3.6
- resolution: "http-signature@npm:1.3.6"
- dependencies:
- assert-plus: ^1.0.0
- jsprim: ^2.0.2
- sshpk: ^1.14.1
- checksum: 10be2af4764e71fee0281392937050201ee576ac755c543f570d6d87134ce5e858663fe999a7adb3e4e368e1e356d0d7fec6b9542295b875726ff615188e7a0c
- languageName: node
- linkType: hard
-
"http2-wrapper@npm:^1.0.0-beta.5.2":
version: 1.0.0-beta.5.2
resolution: "http2-wrapper@npm:1.0.0-beta.5.2"
@@ -28128,7 +28013,7 @@ __metadata:
languageName: node
linkType: hard
-"https-proxy-agent@npm:5.0.1, https-proxy-agent@npm:^5.0.0, https-proxy-agent@npm:^5.0.1":
+"https-proxy-agent@npm:^5.0.0, https-proxy-agent@npm:^5.0.1":
version: 5.0.1
resolution: "https-proxy-agent@npm:5.0.1"
dependencies:
@@ -28145,13 +28030,6 @@ __metadata:
languageName: node
linkType: hard
-"human-signals@npm:^1.1.1":
- version: 1.1.1
- resolution: "human-signals@npm:1.1.1"
- checksum: d587647c9e8ec24e02821b6be7de5a0fc37f591f6c4e319b3054b43fd4c35a70a94c46fc74d8c1a43c47fde157d23acd7421f375e1c1365b09a16835b8300205
- languageName: node
- linkType: hard
-
"human-signals@npm:^2.1.0":
version: 2.1.0
resolution: "human-signals@npm:2.1.0"
@@ -28446,13 +28324,6 @@ __metadata:
languageName: node
linkType: hard
-"ini@npm:2.0.0":
- version: 2.0.0
- resolution: "ini@npm:2.0.0"
- checksum: e7aadc5fb2e4aefc666d74ee2160c073995a4061556b1b5b4241ecb19ad609243b9cceafe91bae49c219519394bbd31512516cb22a3b1ca6e66d869e0447e84e
- languageName: node
- linkType: hard
-
"ini@npm:^1.3.5, ini@npm:~1.3.0":
version: 1.3.8
resolution: "ini@npm:1.3.8"
@@ -28757,7 +28628,7 @@ __metadata:
languageName: node
linkType: hard
-"is-ci@npm:^3.0.0, is-ci@npm:^3.0.1":
+"is-ci@npm:^3.0.1":
version: 3.0.1
resolution: "is-ci@npm:3.0.1"
dependencies:
@@ -28885,16 +28756,6 @@ __metadata:
languageName: node
linkType: hard
-"is-installed-globally@npm:~0.4.0":
- version: 0.4.0
- resolution: "is-installed-globally@npm:0.4.0"
- dependencies:
- global-dirs: ^3.0.0
- is-path-inside: ^3.0.2
- checksum: 3359840d5982d22e9b350034237b2cda2a12bac1b48a721912e1ab8e0631dd07d45a2797a120b7b87552759a65ba03e819f1bd63f2d7ab8657ec0b44ee0bf399
- languageName: node
- linkType: hard
-
"is-interactive@npm:^1.0.0":
version: 1.0.0
resolution: "is-interactive@npm:1.0.0"
@@ -28986,7 +28847,7 @@ __metadata:
languageName: node
linkType: hard
-"is-path-inside@npm:^3.0.2, is-path-inside@npm:^3.0.3":
+"is-path-inside@npm:^3.0.3":
version: 3.0.3
resolution: "is-path-inside@npm:3.0.3"
checksum: abd50f06186a052b349c15e55b182326f1936c89a78bf6c8f2b707412517c097ce04bc49a0ca221787bc44e1049f51f09a2ffb63d22899051988d3a618ba13e9
@@ -30047,7 +29908,7 @@ __metadata:
languageName: node
linkType: hard
-"jest-websocket-mock@npm:^2.4.1":
+"jest-websocket-mock@npm:^2.4.1, jest-websocket-mock@npm:^2.5.0":
version: 2.5.0
resolution: "jest-websocket-mock@npm:2.5.0"
dependencies:
@@ -30151,19 +30012,6 @@ __metadata:
languageName: node
linkType: hard
-"joi@npm:^17.7.0":
- version: 17.7.0
- resolution: "joi@npm:17.7.0"
- dependencies:
- "@hapi/hoek": ^9.0.0
- "@hapi/topo": ^5.0.0
- "@sideway/address": ^4.1.3
- "@sideway/formula": ^3.0.0
- "@sideway/pinpoint": ^2.0.0
- checksum: 767a847936cb66787256c4351ff86e1b9e8d7383cbe81a5c827064032c2a8e8b6e938baef5ad32c4035fe4c56e537bd90aa2a952be8a0658601c920cdeb4fb3c
- languageName: node
- linkType: hard
-
"jose@npm:^4.14.4, jose@npm:^4.6.0":
version: 4.14.6
resolution: "jose@npm:4.14.6"
@@ -30759,18 +30607,6 @@ __metadata:
languageName: node
linkType: hard
-"jsprim@npm:^2.0.2":
- version: 2.0.2
- resolution: "jsprim@npm:2.0.2"
- dependencies:
- assert-plus: 1.0.0
- extsprintf: 1.3.0
- json-schema: 0.4.0
- verror: 1.10.0
- checksum: d175f6b1991e160cb0aa39bc857da780e035611986b5492f32395411879fdaf4e513d98677f08f7352dac93a16b66b8361c674b86a3fa406e2e7af6b26321838
- languageName: node
- linkType: hard
-
"jss-camel-case@npm:^6.0.0":
version: 6.1.0
resolution: "jss-camel-case@npm:6.1.0"
@@ -31126,7 +30962,7 @@ __metadata:
languageName: node
linkType: hard
-"kubernetes-models@npm:^4.1.0":
+"kubernetes-models@npm:^4.1.0, kubernetes-models@npm:^4.3.1":
version: 4.3.1
resolution: "kubernetes-models@npm:4.3.1"
dependencies:
@@ -31178,13 +31014,6 @@ __metadata:
languageName: node
linkType: hard
-"lazy-ass@npm:1.6.0, lazy-ass@npm:^1.6.0":
- version: 1.6.0
- resolution: "lazy-ass@npm:1.6.0"
- checksum: 5a3ebb17915b03452320804466345382a6c25ac782ec4874fecdb2385793896cd459be2f187dc7def8899180c32ee0ab9a1aa7fe52193ac3ff3fe29bb0591729
- languageName: node
- linkType: hard
-
"lazystream@npm:^1.0.0":
version: 1.0.0
resolution: "lazystream@npm:1.0.0"
@@ -31405,27 +31234,6 @@ __metadata:
languageName: node
linkType: hard
-"listr2@npm:^3.8.3":
- version: 3.14.0
- resolution: "listr2@npm:3.14.0"
- dependencies:
- cli-truncate: ^2.1.0
- colorette: ^2.0.16
- log-update: ^4.0.0
- p-map: ^4.0.0
- rfdc: ^1.3.0
- rxjs: ^7.5.1
- through: ^2.3.8
- wrap-ansi: ^7.0.0
- peerDependencies:
- enquirer: ">= 2.3.0 < 3"
- peerDependenciesMeta:
- enquirer:
- optional: true
- checksum: fdb8b2d6bdf5df9371ebd5082bee46c6d0ca3d1e5f2b11fbb5a127839855d5f3da9d4968fce94f0a5ec67cac2459766abbb1faeef621065ebb1829b11ef9476d
- languageName: node
- linkType: hard
-
"listr2@npm:^4.0.5":
version: 4.0.5
resolution: "listr2@npm:4.0.5"
@@ -31698,13 +31506,6 @@ __metadata:
languageName: node
linkType: hard
-"lodash.once@npm:^4.1.1":
- version: 4.1.1
- resolution: "lodash.once@npm:4.1.1"
- checksum: d768fa9f9b4e1dc6453be99b753906f58990e0c45e7b2ca5a3b40a33111e5d17f6edf2f768786e2716af90a8e78f8f91431ab8435f761fef00f9b0c256f6d245
- languageName: node
- linkType: hard
-
"lodash.sortby@npm:^4.7.0":
version: 4.7.0
resolution: "lodash.sortby@npm:4.7.0"
@@ -32110,13 +31911,6 @@ __metadata:
languageName: node
linkType: hard
-"map-stream@npm:~0.1.0":
- version: 0.1.0
- resolution: "map-stream@npm:0.1.0"
- checksum: 38abbe4eb883888031e6b2fc0630bc583c99396be16b8ace5794b937b682a8a081f03e8b15bfd4914d1bc88318f0e9ac73ba3512ae65955cd449f63256ddb31d
- languageName: node
- linkType: hard
-
"markdown-it-anchor@npm:^8.4.1":
version: 8.6.4
resolution: "markdown-it-anchor@npm:8.6.4"
@@ -32502,13 +32296,6 @@ __metadata:
languageName: node
linkType: hard
-"meta-png@npm:1.0.6":
- version: 1.0.6
- resolution: "meta-png@npm:1.0.6"
- checksum: aed14b3b53189c9d32002d76c40926bd93dd9d439bae3ad23ffb2645c375c9772c160879aa8af59ac85a2f43ae8bbe06b9648a53fe27815f4aeab238f4e9b79d
- languageName: node
- linkType: hard
-
"methods@npm:^1.0.0, methods@npm:^1.1.2, methods@npm:~1.1.2":
version: 1.1.2
resolution: "methods@npm:1.1.2"
@@ -33057,7 +32844,7 @@ __metadata:
languageName: node
linkType: hard
-"minimist@npm:>=1.2.2, minimist@npm:^1.2.0, minimist@npm:^1.2.3, minimist@npm:^1.2.5, minimist@npm:^1.2.6, minimist@npm:^1.2.7, minimist@npm:^1.2.8":
+"minimist@npm:>=1.2.2, minimist@npm:^1.2.0, minimist@npm:^1.2.3, minimist@npm:^1.2.5, minimist@npm:^1.2.6":
version: 1.2.8
resolution: "minimist@npm:1.2.8"
checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0
@@ -33306,15 +33093,6 @@ __metadata:
languageName: node
linkType: hard
-"move-file@npm:2.1.0":
- version: 2.1.0
- resolution: "move-file@npm:2.1.0"
- dependencies:
- path-exists: ^4.0.0
- checksum: 2b92bbe047a302b593fcb2c0bf1131bb090ec80b3264569fc80d782c8ff829eecc13573943fa4d804c9747dec612ef2d1e84a5cfcf29cbc64a69ffcbb7ea09b3
- languageName: node
- linkType: hard
-
"mri@npm:1.1.4":
version: 1.1.4
resolution: "mri@npm:1.1.4"
@@ -33350,7 +33128,7 @@ __metadata:
languageName: node
linkType: hard
-"msw@npm:^1.0.0, msw@npm:^1.0.1, msw@npm:^1.2.1, msw@npm:^1.2.3":
+"msw@npm:^1.0.0, msw@npm:^1.0.1, msw@npm:^1.2.1, msw@npm:^1.2.3, msw@npm:^1.3.1":
version: 1.3.1
resolution: "msw@npm:1.3.1"
dependencies:
@@ -33645,15 +33423,6 @@ __metadata:
languageName: node
linkType: hard
-"node-addon-api@npm:^6.1.0":
- version: 6.1.0
- resolution: "node-addon-api@npm:6.1.0"
- dependencies:
- node-gyp: latest
- checksum: 3a539510e677cfa3a833aca5397300e36141aca064cdc487554f2017110709a03a95da937e98c2a14ec3c626af7b2d1b6dabe629a481f9883143d0d5bff07bf2
- languageName: node
- linkType: hard
-
"node-cache@npm:^5.1.2":
version: 5.1.2
resolution: "node-cache@npm:5.1.2"
@@ -33679,20 +33448,6 @@ __metadata:
languageName: node
linkType: hard
-"node-fetch@npm:2.6.7":
- version: 2.6.7
- resolution: "node-fetch@npm:2.6.7"
- dependencies:
- whatwg-url: ^5.0.0
- peerDependencies:
- encoding: ^0.1.0
- peerDependenciesMeta:
- encoding:
- optional: true
- checksum: 8d816ffd1ee22cab8301c7756ef04f3437f18dace86a1dae22cf81db8ef29c0bf6655f3215cb0cdb22b420b6fe141e64b26905e7f33f9377a7fa59135ea3e10b
- languageName: node
- linkType: hard
-
"node-fetch@npm:^1.0.1":
version: 1.7.3
resolution: "node-fetch@npm:1.7.3"
@@ -34041,7 +33796,7 @@ __metadata:
languageName: node
linkType: hard
-"npm-run-path@npm:^4.0.0, npm-run-path@npm:^4.0.1":
+"npm-run-path@npm:^4.0.1":
version: 4.0.1
resolution: "npm-run-path@npm:4.0.1"
dependencies:
@@ -34498,13 +34253,6 @@ __metadata:
languageName: node
linkType: hard
-"ospath@npm:^1.2.2":
- version: 1.2.2
- resolution: "ospath@npm:1.2.2"
- checksum: 505f48a4f4f1c557d6c656ec985707726e3714721680139be037613e903aa8c8fa4ddd8d1342006f9b2dc0065e6e20f8b7bea2ee05354f31257044790367b347
- languageName: node
- linkType: hard
-
"outdent@npm:^0.5.0":
version: 0.5.0
resolution: "outdent@npm:0.5.0"
@@ -35203,15 +34951,6 @@ __metadata:
languageName: node
linkType: hard
-"pause-stream@npm:0.0.11":
- version: 0.0.11
- resolution: "pause-stream@npm:0.0.11"
- dependencies:
- through: ~2.3
- checksum: 3c4a14052a638b92e0c96eb00c0d7977df7f79ea28395250c525d197f1fc02d34ce1165d5362e2e6ebbb251524b94a76f3f0d4abc39ab8b016d97449fe15583c
- languageName: node
- linkType: hard
-
"pause@npm:0.0.1":
version: 0.0.1
resolution: "pause@npm:0.0.1"
@@ -35409,7 +35148,7 @@ __metadata:
languageName: node
linkType: hard
-"pify@npm:^2.2.0, pify@npm:^2.3.0":
+"pify@npm:^2.3.0":
version: 2.3.0
resolution: "pify@npm:2.3.0"
checksum: 9503aaeaf4577acc58642ad1d25c45c6d90288596238fb68f82811c08104c800e5a7870398e9f015d82b44ecbcbef3dc3d4251a1cbb582f6e5959fe09884b2ba
@@ -35486,17 +35225,6 @@ __metadata:
languageName: node
linkType: hard
-"pixelmatch@npm:5.3.0":
- version: 5.3.0
- resolution: "pixelmatch@npm:5.3.0"
- dependencies:
- pngjs: ^6.0.0
- bin:
- pixelmatch: bin/pixelmatch
- checksum: f542713d89536551181ad9ddb666a1792ba00a8632d831093232a075cb3ccac05856e7a453ed7d0a41aaef64dcb5962e8ae5cbe646dd2761790d8ee51b0a0743
- languageName: node
- linkType: hard
-
"pkg-dir@npm:^3.0.0":
version: 3.0.0
resolution: "pkg-dir@npm:3.0.0"
@@ -35538,6 +35266,30 @@ __metadata:
languageName: node
linkType: hard
+"playwright-core@npm:1.38.1":
+ version: 1.38.1
+ resolution: "playwright-core@npm:1.38.1"
+ bin:
+ playwright-core: cli.js
+ checksum: 66e83fe040f309b13ad94ba39dea40ac207bfcbbc22de13141af88dbdedd64e1c4e3ce1d0cb070d4efd8050d7e579953ec3681dd8a0acf2c1cc738d9c50e545e
+ languageName: node
+ linkType: hard
+
+"playwright@npm:1.38.1":
+ version: 1.38.1
+ resolution: "playwright@npm:1.38.1"
+ dependencies:
+ fsevents: 2.3.2
+ playwright-core: 1.38.1
+ dependenciesMeta:
+ fsevents:
+ optional: true
+ bin:
+ playwright: cli.js
+ checksum: 4e01d4ee52d9ccf75a80d8492829106802590721d56bff7c5957ff1f21eb3c328ee5bc3c1784a59c4b515df1b98d08ef92e4a35a807f454cd00dc481d30fadc2
+ languageName: node
+ linkType: hard
+
"pluralize@npm:^8.0.0":
version: 8.0.0
resolution: "pluralize@npm:8.0.0"
@@ -35545,20 +35297,6 @@ __metadata:
languageName: node
linkType: hard
-"pngjs@npm:7.0.0":
- version: 7.0.0
- resolution: "pngjs@npm:7.0.0"
- checksum: b19a018930d27de26229c1b3ff250b3a25d09caa22cbb0b0459987d91eb0a560a18ab5d67da45a38ed7514140f26d1db58de83c31159ec101f2bb270a3c707f1
- languageName: node
- linkType: hard
-
-"pngjs@npm:^6.0.0":
- version: 6.0.0
- resolution: "pngjs@npm:6.0.0"
- checksum: ab6c285086060087097eab9fe6b5a528a24f9e79c03dea2b4fd6264ed4fdb5beff4a3257eeeaf2a9dc18249b539609c2a4e4013c567164a1f6b5ba2c974d5ecb
- languageName: node
- linkType: hard
-
"pony-cause@npm:^1.0.0":
version: 1.1.1
resolution: "pony-cause@npm:1.1.1"
@@ -36130,7 +35868,7 @@ __metadata:
languageName: node
linkType: hard
-"pretty-bytes@npm:^5.3.0, pretty-bytes@npm:^5.6.0":
+"pretty-bytes@npm:^5.3.0":
version: 5.6.0
resolution: "pretty-bytes@npm:5.6.0"
checksum: 9c082500d1e93434b5b291bd651662936b8bd6204ec9fa17d563116a192d6d86b98f6d328526b4e8d783c07d5499e2614a807520249692da9ec81564b2f439cd
@@ -36218,13 +35956,6 @@ __metadata:
languageName: node
linkType: hard
-"progress@npm:2.0.3":
- version: 2.0.3
- resolution: "progress@npm:2.0.3"
- checksum: f67403fe7b34912148d9252cb7481266a354bd99ce82c835f79070643bb3c6583d10dbcfda4d41e04bbc1d8437e9af0fb1e1f2135727878f5308682a579429b7
- languageName: node
- linkType: hard
-
"prom-client@npm:^14.0.1":
version: 14.2.0
resolution: "prom-client@npm:14.2.0"
@@ -36410,31 +36141,13 @@ __metadata:
languageName: node
linkType: hard
-"proxy-from-env@npm:1.0.0":
- version: 1.0.0
- resolution: "proxy-from-env@npm:1.0.0"
- checksum: 292e28d1de0c315958d71d8315eb546dd3cd8c8cbc2dab7c54eeb9f5c17f421771964ad0b5e1f77011bab2305bdae42e1757ce33bdb1ccc3e87732322a8efcf1
- languageName: node
- linkType: hard
-
-"proxy-from-env@npm:1.1.0, proxy-from-env@npm:^1.1.0":
+"proxy-from-env@npm:^1.1.0":
version: 1.1.0
resolution: "proxy-from-env@npm:1.1.0"
checksum: ed7fcc2ba0a33404958e34d95d18638249a68c430e30fcb6c478497d72739ba64ce9810a24f53a7d921d0c065e5b78e3822759800698167256b04659366ca4d4
languageName: node
linkType: hard
-"ps-tree@npm:1.2.0":
- version: 1.2.0
- resolution: "ps-tree@npm:1.2.0"
- dependencies:
- event-stream: =3.3.4
- bin:
- ps-tree: ./bin/ps-tree.js
- checksum: e635dd00f53d30d31696cf5f95b3a8dbdf9b1aeb36d4391578ce8e8cd22949b7c5536c73b0dc18c78615ea3ddd4be96101166be59ca2e3e3cb1e2f79ba3c7f98
- languageName: node
- linkType: hard
-
"pseudomap@npm:^1.0.2":
version: 1.0.2
resolution: "pseudomap@npm:1.0.2"
@@ -36501,25 +36214,6 @@ __metadata:
languageName: node
linkType: hard
-"puppeteer@npm:^17.0.0":
- version: 17.1.3
- resolution: "puppeteer@npm:17.1.3"
- dependencies:
- cross-fetch: 3.1.5
- debug: 4.3.4
- devtools-protocol: 0.0.1036444
- extract-zip: 2.0.1
- https-proxy-agent: 5.0.1
- progress: 2.0.3
- proxy-from-env: 1.1.0
- rimraf: 3.0.2
- tar-fs: 2.1.1
- unbzip2-stream: 1.4.3
- ws: 8.8.1
- checksum: b4518956c661df4c37690d46b9c6744d42d59d01fe3764938b4b3af8de4c94ef11a9dfa6bc261798f5e5490c6dce4d4f555f05d42c735249683da3017faf4585
- languageName: node
- linkType: hard
-
"pure-color@npm:^1.2.0":
version: 1.3.0
resolution: "pure-color@npm:1.3.0"
@@ -36568,15 +36262,6 @@ __metadata:
languageName: node
linkType: hard
-"qs@npm:~6.10.3":
- version: 6.10.4
- resolution: "qs@npm:6.10.4"
- dependencies:
- side-channel: ^1.0.4
- checksum: 31e4fedd759d01eae52dde6692abab175f9af3e639993c5caaa513a2a3607b34d8058d3ae52ceeccf37c3025f22ed5e90e9ddd6c2537e19c0562ddd10dc5b1eb
- languageName: node
- linkType: hard
-
"qs@npm:~6.5.2":
version: 6.5.3
resolution: "qs@npm:6.5.3"
@@ -38028,15 +37713,6 @@ __metadata:
languageName: node
linkType: hard
-"request-progress@npm:^3.0.0":
- version: 3.0.0
- resolution: "request-progress@npm:3.0.0"
- dependencies:
- throttleit: ^1.0.0
- checksum: 6ea1761dcc8a8b7b5894afd478c0286aa31bd69438d7050294bd4fd0d0b3e09b5cde417d38deef9c49809039c337d8744e4bb49d8632b0c3e4ffa5e8a687e0fd
- languageName: node
- linkType: hard
-
"request@npm:^2.88.0":
version: 2.88.2
resolution: "request@npm:2.88.2"
@@ -38331,17 +38007,6 @@ __metadata:
languageName: node
linkType: hard
-"rimraf@npm:3.0.2, rimraf@npm:^3.0.0, rimraf@npm:^3.0.2":
- version: 3.0.2
- resolution: "rimraf@npm:3.0.2"
- dependencies:
- glob: ^7.1.3
- bin:
- rimraf: bin.js
- checksum: 87f4164e396f0171b0a3386cc1877a817f572148ee13a7e113b238e48e8a9f2f31d009a92ec38a591ff1567d9662c6b67fd8818a2dbbaed74bc26a87a2a4a9a0
- languageName: node
- linkType: hard
-
"rimraf@npm:^2.6.3":
version: 2.7.1
resolution: "rimraf@npm:2.7.1"
@@ -38353,6 +38018,17 @@ __metadata:
languageName: node
linkType: hard
+"rimraf@npm:^3.0.0, rimraf@npm:^3.0.2":
+ version: 3.0.2
+ resolution: "rimraf@npm:3.0.2"
+ dependencies:
+ glob: ^7.1.3
+ bin:
+ rimraf: bin.js
+ checksum: 87f4164e396f0171b0a3386cc1877a817f572148ee13a7e113b238e48e8a9f2f31d009a92ec38a591ff1567d9662c6b67fd8818a2dbbaed74bc26a87a2a4a9a0
+ languageName: node
+ linkType: hard
+
"rimraf@npm:~2.6.2":
version: 2.6.3
resolution: "rimraf@npm:2.6.3"
@@ -38512,11 +38188,13 @@ __metadata:
"@backstage/cli": "workspace:*"
"@backstage/codemods": "workspace:*"
"@backstage/create-app": "workspace:*"
+ "@backstage/e2e-test-utils": "workspace:*"
"@backstage/errors": "workspace:^"
"@backstage/repo-tools": "workspace:*"
"@changesets/cli": ^2.14.0
"@manypkg/get-packages": ^1.1.3
"@octokit/rest": ^19.0.3
+ "@playwright/test": ^1.32.3
"@spotify/eslint-plugin": ^14.1.3
"@spotify/prettier-config": ^14.0.0
"@techdocs/cli": "workspace:*"
@@ -38625,7 +38303,7 @@ __metadata:
languageName: node
linkType: hard
-"rxjs@npm:^7.2.0, rxjs@npm:^7.5.1, rxjs@npm:^7.5.5, rxjs@npm:^7.8.0, rxjs@npm:^7.8.1":
+"rxjs@npm:^7.2.0, rxjs@npm:^7.5.5, rxjs@npm:^7.8.1":
version: 7.8.1
resolution: "rxjs@npm:7.8.1"
dependencies:
@@ -38888,7 +38566,7 @@ __metadata:
languageName: node
linkType: hard
-"semver@npm:^7.1.1, semver@npm:^7.1.2, semver@npm:^7.1.3, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.0, semver@npm:^7.5.3, semver@npm:~7.5.4":
+"semver@npm:^7.1.1, semver@npm:^7.1.2, semver@npm:^7.1.3, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.3, semver@npm:~7.5.4":
version: 7.5.4
resolution: "semver@npm:7.5.4"
dependencies:
@@ -39088,23 +38766,6 @@ __metadata:
languageName: node
linkType: hard
-"sharp@npm:0.32.1":
- version: 0.32.1
- resolution: "sharp@npm:0.32.1"
- dependencies:
- color: ^4.2.3
- detect-libc: ^2.0.1
- node-addon-api: ^6.1.0
- node-gyp: latest
- prebuild-install: ^7.1.1
- semver: ^7.5.0
- simple-get: ^4.0.1
- tar-fs: ^2.1.1
- tunnel-agent: ^0.6.0
- checksum: 99f50df380442aa8f3f952dd6f2e27634f9cab249cce47aa7f1a97c468334979ea94d71555f782aae5f5016e44b7832799f1c5ea1cb3ca975c089acd00e62e2e
- languageName: node
- linkType: hard
-
"shebang-command@npm:^1.2.0":
version: 1.2.0
resolution: "shebang-command@npm:1.2.0"
@@ -39627,15 +39288,6 @@ __metadata:
languageName: node
linkType: hard
-"split@npm:0.3":
- version: 0.3.3
- resolution: "split@npm:0.3.3"
- dependencies:
- through: 2
- checksum: 2e076634c9637cfdc54ab4387b6a243b8c33b360874a25adf6f327a5647f07cb3bf1c755d515248eb3afee4e382278d01f62c62d87263c118f28065b86f74f02
- languageName: node
- linkType: hard
-
"split@npm:^1.0.0":
version: 1.0.1
resolution: "split@npm:1.0.1"
@@ -39702,7 +39354,7 @@ __metadata:
languageName: node
linkType: hard
-"sshpk@npm:^1.14.1, sshpk@npm:^1.7.0":
+"sshpk@npm:^1.7.0":
version: 1.16.1
resolution: "sshpk@npm:1.16.1"
dependencies:
@@ -39824,26 +39476,6 @@ __metadata:
languageName: node
linkType: hard
-"start-server-and-test@npm:^1.10.11":
- version: 1.15.4
- resolution: "start-server-and-test@npm:1.15.4"
- dependencies:
- arg: ^5.0.2
- bluebird: 3.7.2
- check-more-types: 2.24.0
- debug: 4.3.4
- execa: 5.1.1
- lazy-ass: 1.6.0
- ps-tree: 1.2.0
- wait-on: 7.0.1
- bin:
- server-test: src/bin/start.js
- start-server-and-test: src/bin/start.js
- start-test: src/bin/start.js
- checksum: 0df9a4710ea45ddb1a9f719e0865faa8e26a973beff693dfe244ae2d914bfc6eed4d2db8529cdcad3d53658c4655356e5aca3520485a3ef4d9d9f320956b0e7d
- languageName: node
- linkType: hard
-
"statuses@npm:2.0.1":
version: 2.0.1
resolution: "statuses@npm:2.0.1"
@@ -39892,15 +39524,6 @@ __metadata:
languageName: node
linkType: hard
-"stream-combiner@npm:~0.0.4":
- version: 0.0.4
- resolution: "stream-combiner@npm:0.0.4"
- dependencies:
- duplexer: ~0.1.1
- checksum: 844b622cfe8b9de45a6007404f613b60aaf85200ab9862299066204242f89a7c8033b1c356c998aa6cfc630f6cd9eba119ec1c6dc1f93e245982be4a847aee7d
- languageName: node
- linkType: hard
-
"stream-events@npm:^1.0.5":
version: 1.0.5
resolution: "stream-events@npm:1.0.5"
@@ -40561,7 +40184,7 @@ __metadata:
languageName: node
linkType: hard
-"tar-fs@npm:2.1.1, tar-fs@npm:^2.0.0, tar-fs@npm:^2.1.1":
+"tar-fs@npm:^2.0.0, tar-fs@npm:^2.1.1":
version: 2.1.1
resolution: "tar-fs@npm:2.1.1"
dependencies:
@@ -40660,14 +40283,11 @@ __metadata:
"@types/react": "*"
"@types/react-dom": "*"
cross-env: ^7.0.0
- cypress: ^10.0.0
- eslint-plugin-cypress: ^2.10.3
history: ^5.0.0
react: ^17.0.2
react-dom: ^17.0.2
react-router-dom: ^6.3.0
react-use: ^17.2.4
- start-server-and-test: ^1.10.11
languageName: unknown
linkType: soft
@@ -40820,13 +40440,6 @@ __metadata:
languageName: node
linkType: hard
-"throttleit@npm:^1.0.0":
- version: 1.0.0
- resolution: "throttleit@npm:1.0.0"
- checksum: 1b2db4d2454202d589e8236c07a69d2fab838876d370030ebea237c34c0a7d1d9cf11c29f994531ebb00efd31e9728291042b7754f2798a8352ec4463455b659
- languageName: node
- linkType: hard
-
"through2@npm:^4.0.0":
version: 4.0.2
resolution: "through2@npm:4.0.2"
@@ -40836,7 +40449,7 @@ __metadata:
languageName: node
linkType: hard
-"through@npm:2, through@npm:^2.3.6, through@npm:^2.3.8, through@npm:~2.3, through@npm:~2.3.1":
+"through@npm:2, through@npm:^2.3.6, through@npm:^2.3.8":
version: 2.3.8
resolution: "through@npm:2.3.8"
checksum: a38c3e059853c494af95d50c072b83f8b676a9ba2818dcc5b108ef252230735c54e0185437618596c790bbba8fcdaef5b290405981ffa09dce67b1f1bf190cbd
@@ -40928,7 +40541,7 @@ __metadata:
languageName: node
linkType: hard
-"tmp@npm:^0.2.0, tmp@npm:^0.2.1, tmp@npm:~0.2.1":
+"tmp@npm:^0.2.0, tmp@npm:^0.2.1":
version: 0.2.1
resolution: "tmp@npm:0.2.1"
dependencies:
@@ -41016,7 +40629,7 @@ __metadata:
languageName: node
linkType: hard
-"tough-cookie@npm:^4.0.0, tough-cookie@npm:^4.1.3":
+"tough-cookie@npm:^4.0.0":
version: 4.1.3
resolution: "tough-cookie@npm:4.1.3"
dependencies:
@@ -41618,16 +41231,6 @@ __metadata:
languageName: node
linkType: hard
-"unbzip2-stream@npm:1.4.3":
- version: 1.4.3
- resolution: "unbzip2-stream@npm:1.4.3"
- dependencies:
- buffer: ^5.2.1
- through: ^2.3.8
- checksum: 0e67c4a91f4fa0fc7b4045f8b914d3498c2fc2e8c39c359977708ec85ac6d6029840e97f508675fdbdf21fcb8d276ca502043406f3682b70f075e69aae626d1d
- languageName: node
- linkType: hard
-
"unc-path-regex@npm:^0.1.2":
version: 0.1.2
resolution: "unc-path-regex@npm:0.1.2"
@@ -42425,21 +42028,6 @@ __metadata:
languageName: node
linkType: hard
-"wait-on@npm:7.0.1":
- version: 7.0.1
- resolution: "wait-on@npm:7.0.1"
- dependencies:
- axios: ^0.27.2
- joi: ^17.7.0
- lodash: ^4.17.21
- minimist: ^1.2.7
- rxjs: ^7.8.0
- bin:
- wait-on: bin/wait-on
- checksum: 1e8a17d8ee6436f71d3ab82781ce31267481fcd7bbccde49b0f8124871e6e40a1acac3401f04f775ba6203853a5813352fa131620fc139914351f3b2894d573f
- languageName: node
- linkType: hard
-
"walk-up-path@npm:^1.0.0":
version: 1.0.0
resolution: "walk-up-path@npm:1.0.0"
@@ -43021,21 +42609,6 @@ __metadata:
languageName: node
linkType: hard
-"ws@npm:8.8.1":
- version: 8.8.1
- resolution: "ws@npm:8.8.1"
- peerDependencies:
- bufferutil: ^4.0.1
- utf-8-validate: ^5.0.2
- peerDependenciesMeta:
- bufferutil:
- optional: true
- utf-8-validate:
- optional: true
- checksum: 2152cf862cae0693f3775bc688a6afb2e989d19d626d215e70f5fcd8eb55b1c3b0d3a6a4052905ec320e2d7734e20aeedbf9744496d62f15a26ad79cf4cf7dae
- languageName: node
- linkType: hard
-
"ws@npm:^5.2.0 || ^6.0.0 || ^7.0.0, ws@npm:^7.4.6":
version: 7.5.9
resolution: "ws@npm:7.5.9"
@@ -43205,6 +42778,15 @@ __metadata:
languageName: node
linkType: hard
+"xterm-addon-attach@npm:^0.9.0":
+ version: 0.9.0
+ resolution: "xterm-addon-attach@npm:0.9.0"
+ peerDependencies:
+ xterm: ^5.0.0
+ checksum: 70e5d3ecf139c04fae13c644b79c33858ef1a6e28dfe78f91dad3e34f5a155579029b87e91d1d016575acaf17f74e6c59402bde4bcff03461595bea0870f1ec1
+ languageName: node
+ linkType: hard
+
"xterm-addon-fit@npm:^0.7.0":
version: 0.7.0
resolution: "xterm-addon-fit@npm:0.7.0"
@@ -43214,10 +42796,19 @@ __metadata:
languageName: node
linkType: hard
-"xterm@npm:^5.2.1":
- version: 5.2.1
- resolution: "xterm@npm:5.2.1"
- checksum: 3a9de30e772c7ae30895ec97fcfb3b0906429c5ea0cddf8948e8e30301385f82e467c6e6aca28ae50a48300ce795381d83fe35b4e17886ab4a1357054a15f68f
+"xterm-addon-fit@npm:^0.8.0":
+ version: 0.8.0
+ resolution: "xterm-addon-fit@npm:0.8.0"
+ peerDependencies:
+ xterm: ^5.0.0
+ checksum: 5af2041b442f7c804eda2e6f62e3b68b5159b0ae6bd96e2aa8d85b26441df57291cbfed653d1196d4af5d9b94bfc39993df8b409a25c35e0d36bdaf6f5cdfe5f
+ languageName: node
+ linkType: hard
+
+"xterm@npm:^5.2.1, xterm@npm:^5.3.0":
+ version: 5.3.0
+ resolution: "xterm@npm:5.3.0"
+ checksum: 1bdfdfe4cae4412128376180d85e476b43fb021cdd1114b18acad821c9ea44b5b600e0d88febf2b3572f38fad7741e5161ce0178a44369617cf937222cc6e011
languageName: node
linkType: hard