Merge branch 'master' into github-squash-merge-options
This commit is contained in:
@@ -1,5 +1,20 @@
|
||||
# @backstage/plugin-adr-backend
|
||||
|
||||
## 0.2.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 3280711113: Updated dependency `msw` to `^0.49.0`.
|
||||
- Updated dependencies
|
||||
- @backstage/catalog-client@1.2.0
|
||||
- @backstage/backend-common@0.17.0
|
||||
- @backstage/errors@1.1.4
|
||||
- @backstage/integration@1.4.1
|
||||
- @backstage/plugin-search-common@1.2.0
|
||||
- @backstage/catalog-model@1.1.4
|
||||
- @backstage/config@1.0.5
|
||||
- @backstage/plugin-adr-common@0.2.4
|
||||
|
||||
## 0.2.4-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/plugin-adr-backend",
|
||||
"version": "0.2.4-next.3",
|
||||
"version": "0.2.4",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -1,5 +1,14 @@
|
||||
# @backstage/plugin-adr-common
|
||||
|
||||
## 0.2.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/integration@1.4.1
|
||||
- @backstage/plugin-search-common@1.2.0
|
||||
- @backstage/catalog-model@1.1.4
|
||||
|
||||
## 0.2.4-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/plugin-adr-common",
|
||||
"description": "Common functionalities for the adr plugin",
|
||||
"version": "0.2.4-next.3",
|
||||
"version": "0.2.4",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -1,5 +1,32 @@
|
||||
# @backstage/plugin-adr
|
||||
|
||||
## 0.2.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/core-components@0.12.2
|
||||
- @backstage/integration-react@1.1.8
|
||||
- @backstage/plugin-catalog-react@1.2.3
|
||||
- @backstage/plugin-search-react@1.3.1
|
||||
|
||||
## 0.2.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- a19cffbeed: Update search links to only have header as linkable text
|
||||
- 3280711113: Updated dependency `msw` to `^0.49.0`.
|
||||
- Updated dependencies
|
||||
- @backstage/core-plugin-api@1.2.0
|
||||
- @backstage/plugin-search-react@1.3.0
|
||||
- @backstage/core-components@0.12.1
|
||||
- @backstage/plugin-catalog-react@1.2.2
|
||||
- @backstage/integration-react@1.1.7
|
||||
- @backstage/plugin-search-common@1.2.0
|
||||
- @backstage/catalog-model@1.1.4
|
||||
- @backstage/theme@0.2.16
|
||||
- @backstage/plugin-adr-common@0.2.4
|
||||
|
||||
## 0.2.4-next.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/plugin-adr",
|
||||
"version": "0.2.4-next.4",
|
||||
"version": "0.2.4",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -1,5 +1,14 @@
|
||||
# @backstage/plugin-airbrake-backend
|
||||
|
||||
## 0.2.12
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 3280711113: Updated dependency `msw` to `^0.49.0`.
|
||||
- Updated dependencies
|
||||
- @backstage/backend-common@0.17.0
|
||||
- @backstage/config@1.0.5
|
||||
|
||||
## 0.2.12-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/plugin-airbrake-backend",
|
||||
"version": "0.2.12-next.3",
|
||||
"version": "0.2.12",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -1,5 +1,30 @@
|
||||
# @backstage/plugin-airbrake
|
||||
|
||||
## 0.3.13
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/core-components@0.12.2
|
||||
- @backstage/dev-utils@1.0.10
|
||||
- @backstage/plugin-catalog-react@1.2.3
|
||||
|
||||
## 0.3.12
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 2e701b3796: Internal refactor to use `react-router-dom` rather than `react-router`.
|
||||
- 3280711113: Updated dependency `msw` to `^0.49.0`.
|
||||
- 151c0e1477: Remove the `object-hash` dependency
|
||||
- Updated dependencies
|
||||
- @backstage/core-plugin-api@1.2.0
|
||||
- @backstage/core-components@0.12.1
|
||||
- @backstage/test-utils@1.2.3
|
||||
- @backstage/dev-utils@1.0.9
|
||||
- @backstage/plugin-catalog-react@1.2.2
|
||||
- @backstage/catalog-model@1.1.4
|
||||
- @backstage/theme@0.2.16
|
||||
|
||||
## 0.3.12-next.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/plugin-airbrake",
|
||||
"version": "0.3.12-next.4",
|
||||
"version": "0.3.12",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -1,5 +1,25 @@
|
||||
# @backstage/plugin-allure
|
||||
|
||||
## 0.1.29
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/core-components@0.12.2
|
||||
- @backstage/plugin-catalog-react@1.2.3
|
||||
|
||||
## 0.1.28
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 3280711113: Updated dependency `msw` to `^0.49.0`.
|
||||
- Updated dependencies
|
||||
- @backstage/core-plugin-api@1.2.0
|
||||
- @backstage/core-components@0.12.1
|
||||
- @backstage/plugin-catalog-react@1.2.2
|
||||
- @backstage/catalog-model@1.1.4
|
||||
- @backstage/theme@0.2.16
|
||||
|
||||
## 0.1.28-next.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/plugin-allure",
|
||||
"description": "A Backstage plugin that integrates with Allure",
|
||||
"version": "0.1.28-next.4",
|
||||
"version": "0.1.28",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -1,5 +1,26 @@
|
||||
# @backstage/plugin-analytics-module-ga
|
||||
|
||||
## 0.1.24
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/core-components@0.12.2
|
||||
|
||||
## 0.1.23
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- d3fea4ae0a: Internal fixes to avoid implicit usage of globals
|
||||
- 3280711113: Updated dependency `msw` to `^0.49.0`.
|
||||
- 9516b0c355: Added support for sending virtual pageviews on `search` events in order to enable
|
||||
Site Search functionality in GA. For more information consult [README](/plugins/analytics-module-ga/README.md#enabling-site-search)
|
||||
- Updated dependencies
|
||||
- @backstage/core-plugin-api@1.2.0
|
||||
- @backstage/core-components@0.12.1
|
||||
- @backstage/config@1.0.5
|
||||
- @backstage/theme@0.2.16
|
||||
|
||||
## 0.1.23-next.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/plugin-analytics-module-ga",
|
||||
"version": "0.1.23-next.4",
|
||||
"version": "0.1.23",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -1,5 +1,21 @@
|
||||
# @backstage/plugin-apache-airflow
|
||||
|
||||
## 0.2.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/core-components@0.12.2
|
||||
|
||||
## 0.2.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 3280711113: Updated dependency `msw` to `^0.49.0`.
|
||||
- Updated dependencies
|
||||
- @backstage/core-plugin-api@1.2.0
|
||||
- @backstage/core-components@0.12.1
|
||||
|
||||
## 0.2.5-next.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/plugin-apache-airflow",
|
||||
"version": "0.2.5-next.4",
|
||||
"version": "0.2.5",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -1,5 +1,28 @@
|
||||
# @backstage/plugin-api-docs
|
||||
|
||||
## 0.8.13
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/core-components@0.12.2
|
||||
- @backstage/plugin-catalog@1.7.1
|
||||
- @backstage/plugin-catalog-react@1.2.3
|
||||
|
||||
## 0.8.12
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 2e701b3796: Internal refactor to use `react-router-dom` rather than `react-router`.
|
||||
- 3280711113: Updated dependency `msw` to `^0.49.0`.
|
||||
- Updated dependencies
|
||||
- @backstage/plugin-catalog@1.7.0
|
||||
- @backstage/core-plugin-api@1.2.0
|
||||
- @backstage/core-components@0.12.1
|
||||
- @backstage/plugin-catalog-react@1.2.2
|
||||
- @backstage/catalog-model@1.1.4
|
||||
- @backstage/theme@0.2.16
|
||||
|
||||
## 0.8.12-next.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/plugin-api-docs",
|
||||
"description": "A Backstage plugin that helps represent API entities in the frontend",
|
||||
"version": "0.8.12-next.4",
|
||||
"version": "0.8.12",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -1,5 +1,22 @@
|
||||
# @backstage/plugin-apollo-explorer
|
||||
|
||||
## 0.1.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/core-components@0.12.2
|
||||
|
||||
## 0.1.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 3280711113: Updated dependency `msw` to `^0.49.0`.
|
||||
- Updated dependencies
|
||||
- @backstage/core-plugin-api@1.2.0
|
||||
- @backstage/core-components@0.12.1
|
||||
- @backstage/theme@0.2.16
|
||||
|
||||
## 0.1.5-next.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/plugin-apollo-explorer",
|
||||
"version": "0.1.5-next.4",
|
||||
"version": "0.1.5",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -1,5 +1,18 @@
|
||||
# @backstage/plugin-app-backend
|
||||
|
||||
## 0.3.39
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 884d749b14: Refactored to use `coreServices` from `@backstage/backend-plugin-api`.
|
||||
- 3280711113: Updated dependency `msw` to `^0.49.0`.
|
||||
- Updated dependencies
|
||||
- @backstage/backend-common@0.17.0
|
||||
- @backstage/backend-plugin-api@0.2.0
|
||||
- @backstage/config-loader@1.1.7
|
||||
- @backstage/types@1.0.2
|
||||
- @backstage/config@1.0.5
|
||||
|
||||
## 0.3.39-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/plugin-app-backend",
|
||||
"description": "A Backstage backend plugin that serves the Backstage frontend app",
|
||||
"version": "0.3.39-next.3",
|
||||
"version": "0.3.39",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -30,7 +30,7 @@ import { ConfigReader } from '@backstage/config';
|
||||
import getPort from 'get-port';
|
||||
|
||||
describe('appPlugin', () => {
|
||||
beforeAll(() => {
|
||||
beforeEach(() => {
|
||||
mockFs({
|
||||
[resolvePath(process.cwd(), 'node_modules/app')]: {
|
||||
'package.json': '{}',
|
||||
@@ -42,7 +42,7 @@ describe('appPlugin', () => {
|
||||
});
|
||||
});
|
||||
|
||||
afterAll(() => {
|
||||
afterEach(() => {
|
||||
mockFs.restore();
|
||||
});
|
||||
|
||||
|
||||
@@ -1,5 +1,19 @@
|
||||
# @backstage/plugin-auth-backend
|
||||
|
||||
## 0.17.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 3280711113: Updated dependency `msw` to `^0.49.0`.
|
||||
- Updated dependencies
|
||||
- @backstage/catalog-client@1.2.0
|
||||
- @backstage/backend-common@0.17.0
|
||||
- @backstage/errors@1.1.4
|
||||
- @backstage/plugin-auth-node@0.2.8
|
||||
- @backstage/types@1.0.2
|
||||
- @backstage/catalog-model@1.1.4
|
||||
- @backstage/config@1.0.5
|
||||
|
||||
## 0.17.2-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/plugin-auth-backend",
|
||||
"description": "A Backstage backend plugin that handles authentication",
|
||||
"version": "0.17.2-next.3",
|
||||
"version": "0.17.2",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -1,5 +1,15 @@
|
||||
# @backstage/plugin-auth-node
|
||||
|
||||
## 0.2.8
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 3280711113: Updated dependency `msw` to `^0.49.0`.
|
||||
- Updated dependencies
|
||||
- @backstage/backend-common@0.17.0
|
||||
- @backstage/errors@1.1.4
|
||||
- @backstage/config@1.0.5
|
||||
|
||||
## 0.2.8-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/plugin-auth-node",
|
||||
"version": "0.2.8-next.3",
|
||||
"version": "0.2.8",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -1,5 +1,16 @@
|
||||
# @backstage/plugin-azure-devops-backend
|
||||
|
||||
## 0.3.18
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- eaccf6d628: Updated installation documentation
|
||||
- 3280711113: Updated dependency `msw` to `^0.49.0`.
|
||||
- Updated dependencies
|
||||
- @backstage/backend-common@0.17.0
|
||||
- @backstage/config@1.0.5
|
||||
- @backstage/plugin-azure-devops-common@0.3.0
|
||||
|
||||
## 0.3.18-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/plugin-azure-devops-backend",
|
||||
"version": "0.3.18-next.3",
|
||||
"version": "0.3.18",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -1,5 +1,28 @@
|
||||
# @backstage/plugin-azure-devops
|
||||
|
||||
## 0.2.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/core-components@0.12.2
|
||||
- @backstage/plugin-catalog-react@1.2.3
|
||||
|
||||
## 0.2.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 2e701b3796: Internal refactor to use `react-router-dom` rather than `react-router`.
|
||||
- 3280711113: Updated dependency `msw` to `^0.49.0`.
|
||||
- Updated dependencies
|
||||
- @backstage/core-plugin-api@1.2.0
|
||||
- @backstage/core-components@0.12.1
|
||||
- @backstage/errors@1.1.4
|
||||
- @backstage/plugin-catalog-react@1.2.2
|
||||
- @backstage/catalog-model@1.1.4
|
||||
- @backstage/theme@0.2.16
|
||||
- @backstage/plugin-azure-devops-common@0.3.0
|
||||
|
||||
## 0.2.3-next.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/plugin-azure-devops",
|
||||
"version": "0.2.3-next.4",
|
||||
"version": "0.2.3",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -1,5 +1,15 @@
|
||||
# @backstage/plugin-azure-sites-backend
|
||||
|
||||
## 0.1.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 3280711113: Updated dependency `msw` to `^0.49.0`.
|
||||
- Updated dependencies
|
||||
- @backstage/backend-common@0.17.0
|
||||
- @backstage/config@1.0.5
|
||||
- @backstage/plugin-azure-sites-common@0.1.0
|
||||
|
||||
## 0.1.1-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/plugin-azure-sites-backend",
|
||||
"version": "0.1.1-next.3",
|
||||
"version": "0.1.1",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -1,5 +1,26 @@
|
||||
# @backstage/plugin-azure-sites
|
||||
|
||||
## 0.1.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/core-components@0.12.2
|
||||
- @backstage/plugin-catalog-react@1.2.3
|
||||
|
||||
## 0.1.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 3280711113: Updated dependency `msw` to `^0.49.0`.
|
||||
- Updated dependencies
|
||||
- @backstage/core-plugin-api@1.2.0
|
||||
- @backstage/core-components@0.12.1
|
||||
- @backstage/plugin-catalog-react@1.2.2
|
||||
- @backstage/catalog-model@1.1.4
|
||||
- @backstage/theme@0.2.16
|
||||
- @backstage/plugin-azure-sites-common@0.1.0
|
||||
|
||||
## 0.1.1-next.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/plugin-azure-sites",
|
||||
"version": "0.1.1-next.4",
|
||||
"version": "0.1.1",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -1,5 +1,16 @@
|
||||
# @backstage/plugin-badges-backend
|
||||
|
||||
## 0.1.33
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/catalog-client@1.2.0
|
||||
- @backstage/backend-common@0.17.0
|
||||
- @backstage/errors@1.1.4
|
||||
- @backstage/catalog-model@1.1.4
|
||||
- @backstage/config@1.0.5
|
||||
|
||||
## 0.1.33-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/plugin-badges-backend",
|
||||
"description": "A Backstage backend plugin that generates README badges for your entities",
|
||||
"version": "0.1.33-next.3",
|
||||
"version": "0.1.33",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -1,5 +1,27 @@
|
||||
# @backstage/plugin-badges
|
||||
|
||||
## 0.2.37
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/core-components@0.12.2
|
||||
- @backstage/plugin-catalog-react@1.2.3
|
||||
|
||||
## 0.2.36
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 2e701b3796: Internal refactor to use `react-router-dom` rather than `react-router`.
|
||||
- 3280711113: Updated dependency `msw` to `^0.49.0`.
|
||||
- Updated dependencies
|
||||
- @backstage/core-plugin-api@1.2.0
|
||||
- @backstage/core-components@0.12.1
|
||||
- @backstage/errors@1.1.4
|
||||
- @backstage/plugin-catalog-react@1.2.2
|
||||
- @backstage/catalog-model@1.1.4
|
||||
- @backstage/theme@0.2.16
|
||||
|
||||
## 0.2.36-next.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/plugin-badges",
|
||||
"description": "A Backstage plugin that generates README badges for your entities",
|
||||
"version": "0.2.36-next.4",
|
||||
"version": "0.2.36",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -1,5 +1,18 @@
|
||||
# @backstage/plugin-bazaar-backend
|
||||
|
||||
## 0.2.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- c507aee8a2: Ensured typescript type checks in migration files.
|
||||
- 9b1891061c: Column `title` has replaced column `name` for `BazaarProject` in database
|
||||
- Updated dependencies
|
||||
- @backstage/backend-common@0.17.0
|
||||
- @backstage/backend-test-utils@0.1.31
|
||||
- @backstage/errors@1.1.4
|
||||
- @backstage/plugin-auth-node@0.2.8
|
||||
- @backstage/config@1.0.5
|
||||
|
||||
## 0.2.2-next.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/plugin-bazaar-backend",
|
||||
"version": "0.2.2-next.4",
|
||||
"version": "0.2.2",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -1,5 +1,32 @@
|
||||
# @backstage/plugin-bazaar
|
||||
|
||||
## 0.2.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/core-components@0.12.2
|
||||
- @backstage/cli@0.22.0
|
||||
- @backstage/plugin-catalog@1.7.1
|
||||
- @backstage/plugin-catalog-react@1.2.3
|
||||
|
||||
## 0.2.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 9b1891061c: `HomePageBazaarInfoCard` is now displaying `title` instead of `name`. Title is a string that doesn't have to be URL friendly.
|
||||
The BazaarOverviewCard have the new property `fullHeight`. Link in `BazaarOverviewCard`is moved to header in card.
|
||||
- 312962da30: Add `title` as optional parameter to `BazaarOverviewCard`
|
||||
- Updated dependencies
|
||||
- @backstage/plugin-catalog@1.7.0
|
||||
- @backstage/core-plugin-api@1.2.0
|
||||
- @backstage/catalog-client@1.2.0
|
||||
- @backstage/core-components@0.12.1
|
||||
- @backstage/cli@0.22.0
|
||||
- @backstage/errors@1.1.4
|
||||
- @backstage/plugin-catalog-react@1.2.2
|
||||
- @backstage/catalog-model@1.1.4
|
||||
|
||||
## 0.2.1-next.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/plugin-bazaar",
|
||||
"version": "0.2.1-next.4",
|
||||
"version": "0.2.1",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
# @backstage/plugin-bitbucket-cloud-common
|
||||
|
||||
## 0.2.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 3280711113: Updated dependency `msw` to `^0.49.0`.
|
||||
- Updated dependencies
|
||||
- @backstage/integration@1.4.1
|
||||
|
||||
## 0.2.2-next.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/plugin-bitbucket-cloud-common",
|
||||
"description": "Common functionalities for bitbucket-cloud plugins",
|
||||
"version": "0.2.2-next.1",
|
||||
"version": "0.2.2",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -1,5 +1,25 @@
|
||||
# @backstage/plugin-bitrise
|
||||
|
||||
## 0.1.40
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/core-components@0.12.2
|
||||
- @backstage/plugin-catalog-react@1.2.3
|
||||
|
||||
## 0.1.39
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 3280711113: Updated dependency `msw` to `^0.49.0`.
|
||||
- Updated dependencies
|
||||
- @backstage/core-plugin-api@1.2.0
|
||||
- @backstage/core-components@0.12.1
|
||||
- @backstage/plugin-catalog-react@1.2.2
|
||||
- @backstage/catalog-model@1.1.4
|
||||
- @backstage/theme@0.2.16
|
||||
|
||||
## 0.1.39-next.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/plugin-bitrise",
|
||||
"description": "A Backstage plugin that integrates towards Bitrise",
|
||||
"version": "0.1.39-next.4",
|
||||
"version": "0.1.39",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -1,5 +1,22 @@
|
||||
# @backstage/plugin-catalog-backend-module-aws
|
||||
|
||||
## 0.1.12
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 884d749b14: Refactored to use `coreServices` from `@backstage/backend-plugin-api`.
|
||||
- Updated dependencies
|
||||
- @backstage/plugin-catalog-backend@1.6.0
|
||||
- @backstage/backend-common@0.17.0
|
||||
- @backstage/plugin-catalog-node@1.3.0
|
||||
- @backstage/backend-tasks@0.4.0
|
||||
- @backstage/errors@1.1.4
|
||||
- @backstage/backend-plugin-api@0.2.0
|
||||
- @backstage/integration@1.4.1
|
||||
- @backstage/types@1.0.2
|
||||
- @backstage/catalog-model@1.1.4
|
||||
- @backstage/config@1.0.5
|
||||
|
||||
## 0.1.12-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/plugin-catalog-backend-module-aws",
|
||||
"description": "A Backstage catalog backend module that helps integrate towards AWS",
|
||||
"version": "0.1.12-next.3",
|
||||
"version": "0.1.12",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -1,5 +1,23 @@
|
||||
# @backstage/plugin-catalog-backend-module-azure
|
||||
|
||||
## 0.1.10
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 884d749b14: Refactored to use `coreServices` from `@backstage/backend-plugin-api`.
|
||||
- 3280711113: Updated dependency `msw` to `^0.49.0`.
|
||||
- Updated dependencies
|
||||
- @backstage/plugin-catalog-backend@1.6.0
|
||||
- @backstage/backend-common@0.17.0
|
||||
- @backstage/plugin-catalog-node@1.3.0
|
||||
- @backstage/backend-tasks@0.4.0
|
||||
- @backstage/errors@1.1.4
|
||||
- @backstage/backend-plugin-api@0.2.0
|
||||
- @backstage/integration@1.4.1
|
||||
- @backstage/types@1.0.2
|
||||
- @backstage/catalog-model@1.1.4
|
||||
- @backstage/config@1.0.5
|
||||
|
||||
## 0.1.10-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -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.10-next.3",
|
||||
"version": "0.1.10",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -1,5 +1,27 @@
|
||||
# @backstage/plugin-catalog-backend-module-bitbucket-cloud
|
||||
|
||||
## 0.1.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- ce08e1798e: Refresh (potentially) updated catalog files on `repo:push` more efficiently.
|
||||
- 884d749b14: Refactored to use `coreServices` from `@backstage/backend-plugin-api`.
|
||||
- 3280711113: Updated dependency `msw` to `^0.49.0`.
|
||||
- 4eb0bce299: Fix repo:push topic not matching `BitbucketCloudEventRouter`.
|
||||
- Updated dependencies
|
||||
- @backstage/plugin-catalog-backend@1.6.0
|
||||
- @backstage/catalog-client@1.2.0
|
||||
- @backstage/backend-common@0.17.0
|
||||
- @backstage/plugin-catalog-node@1.3.0
|
||||
- @backstage/backend-tasks@0.4.0
|
||||
- @backstage/backend-plugin-api@0.2.0
|
||||
- @backstage/plugin-events-node@0.2.0
|
||||
- @backstage/integration@1.4.1
|
||||
- @backstage/plugin-bitbucket-cloud-common@0.2.2
|
||||
- @backstage/catalog-model@1.1.4
|
||||
- @backstage/config@1.0.5
|
||||
- @backstage/plugin-catalog-common@1.0.9
|
||||
|
||||
## 0.1.6-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -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.6-next.3",
|
||||
"version": "0.1.6",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -1,5 +1,22 @@
|
||||
# @backstage/plugin-catalog-backend-module-bitbucket-server
|
||||
|
||||
## 0.1.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 884d749b14: Refactored to use `coreServices` from `@backstage/backend-plugin-api`.
|
||||
- 3280711113: Updated dependency `msw` to `^0.49.0`.
|
||||
- Updated dependencies
|
||||
- @backstage/plugin-catalog-backend@1.6.0
|
||||
- @backstage/backend-common@0.17.0
|
||||
- @backstage/plugin-catalog-node@1.3.0
|
||||
- @backstage/backend-tasks@0.4.0
|
||||
- @backstage/errors@1.1.4
|
||||
- @backstage/backend-plugin-api@0.2.0
|
||||
- @backstage/integration@1.4.1
|
||||
- @backstage/catalog-model@1.1.4
|
||||
- @backstage/config@1.0.5
|
||||
|
||||
## 0.1.4-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/plugin-catalog-backend-module-bitbucket-server",
|
||||
"version": "0.1.4-next.3",
|
||||
"version": "0.1.4",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -1,5 +1,20 @@
|
||||
# @backstage/plugin-catalog-backend-module-bitbucket
|
||||
|
||||
## 0.2.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 3280711113: Updated dependency `msw` to `^0.49.0`.
|
||||
- Updated dependencies
|
||||
- @backstage/plugin-catalog-backend@1.6.0
|
||||
- @backstage/backend-common@0.17.0
|
||||
- @backstage/errors@1.1.4
|
||||
- @backstage/integration@1.4.1
|
||||
- @backstage/plugin-bitbucket-cloud-common@0.2.2
|
||||
- @backstage/types@1.0.2
|
||||
- @backstage/catalog-model@1.1.4
|
||||
- @backstage/config@1.0.5
|
||||
|
||||
## 0.2.6-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -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.6-next.3",
|
||||
"version": "0.2.6",
|
||||
"deprecated": true,
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
|
||||
@@ -1,5 +1,22 @@
|
||||
# @backstage/plugin-catalog-backend-module-gerrit
|
||||
|
||||
## 0.1.7
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 884d749b14: Refactored to use `coreServices` from `@backstage/backend-plugin-api`.
|
||||
- 3280711113: Updated dependency `msw` to `^0.49.0`.
|
||||
- Updated dependencies
|
||||
- @backstage/plugin-catalog-backend@1.6.0
|
||||
- @backstage/backend-common@0.17.0
|
||||
- @backstage/plugin-catalog-node@1.3.0
|
||||
- @backstage/backend-tasks@0.4.0
|
||||
- @backstage/errors@1.1.4
|
||||
- @backstage/backend-plugin-api@0.2.0
|
||||
- @backstage/integration@1.4.1
|
||||
- @backstage/catalog-model@1.1.4
|
||||
- @backstage/config@1.0.5
|
||||
|
||||
## 0.1.7-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/plugin-catalog-backend-module-gerrit",
|
||||
"version": "0.1.7-next.3",
|
||||
"version": "0.1.7",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -1,5 +1,40 @@
|
||||
# @backstage/plugin-catalog-backend-module-github
|
||||
|
||||
## 0.2.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 70fa5ec3ec: Fixes the assignment of group member references in `GithubMultiOrgProcessor` so membership relations are resolved correctly.
|
||||
- 884d749b14: Refactored to use `coreServices` from `@backstage/backend-plugin-api`.
|
||||
- fe93cce743: Added the githubCredentialsProvider property to the GithubLocationAnalyzerOptions to be able to override the GithubCredentialsProvider.
|
||||
- a0fd4af94a: Handle GitHub `push` events at the `GithubEntityProvider` by subscribing to the topic `github.push.`
|
||||
|
||||
Implements `EventSubscriber` to receive events for the topic `github.push`.
|
||||
|
||||
On `github.push`, the affected repository will be refreshed.
|
||||
This includes adding new Location entities, refreshing existing ones,
|
||||
and removing obsolete ones.
|
||||
|
||||
Please find more information at
|
||||
https://backstage.io/docs/integrations/github/discovery#installation-with-events-support
|
||||
|
||||
- 3280711113: Updated dependency `msw` to `^0.49.0`.
|
||||
- 754b5854df: Fix incorrectly exported GithubOrgEntityProvider as a type
|
||||
- Updated dependencies
|
||||
- @backstage/plugin-catalog-backend@1.6.0
|
||||
- @backstage/catalog-client@1.2.0
|
||||
- @backstage/backend-common@0.17.0
|
||||
- @backstage/plugin-catalog-node@1.3.0
|
||||
- @backstage/backend-tasks@0.4.0
|
||||
- @backstage/errors@1.1.4
|
||||
- @backstage/backend-plugin-api@0.2.0
|
||||
- @backstage/plugin-events-node@0.2.0
|
||||
- @backstage/integration@1.4.1
|
||||
- @backstage/types@1.0.2
|
||||
- @backstage/catalog-model@1.1.4
|
||||
- @backstage/config@1.0.5
|
||||
- @backstage/plugin-catalog-common@1.0.9
|
||||
|
||||
## 0.2.2-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/plugin-catalog-backend-module-github",
|
||||
"description": "A Backstage catalog backend module that helps integrate towards GitHub",
|
||||
"version": "0.2.2-next.3",
|
||||
"version": "0.2.2",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -1,5 +1,23 @@
|
||||
# @backstage/plugin-catalog-backend-module-gitlab
|
||||
|
||||
## 0.1.10
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 884d749b14: Refactored to use `coreServices` from `@backstage/backend-plugin-api`.
|
||||
- 3280711113: Updated dependency `msw` to `^0.49.0`.
|
||||
- Updated dependencies
|
||||
- @backstage/plugin-catalog-backend@1.6.0
|
||||
- @backstage/backend-common@0.17.0
|
||||
- @backstage/plugin-catalog-node@1.3.0
|
||||
- @backstage/backend-tasks@0.4.0
|
||||
- @backstage/errors@1.1.4
|
||||
- @backstage/backend-plugin-api@0.2.0
|
||||
- @backstage/integration@1.4.1
|
||||
- @backstage/types@1.0.2
|
||||
- @backstage/catalog-model@1.1.4
|
||||
- @backstage/config@1.0.5
|
||||
|
||||
## 0.1.10-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/plugin-catalog-backend-module-gitlab",
|
||||
"description": "A Backstage catalog backend module that helps integrate towards GitLab",
|
||||
"version": "0.1.10-next.3",
|
||||
"version": "0.1.10",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -1,5 +1,39 @@
|
||||
# @backstage/plugin-catalog-backend-module-incremental-ingestion
|
||||
|
||||
## 0.1.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- 98c643a1a2: Introduces incremental entity providers, which are used for streaming very large data sources into the catalog.
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- c507aee8a2: Ensured typescript type checks in migration files.
|
||||
- 884d749b14: Refactored to use `coreServices` from `@backstage/backend-plugin-api`.
|
||||
- de8a975911: Changed to use native `AbortController` and `AbortSignal` from Node.js, instead
|
||||
of the one from `node-abort-controller`. This is possible now that the minimum
|
||||
supported Node.js version of the project is 16.
|
||||
|
||||
Note that their interfaces are very slightly different, but typically not in a
|
||||
way that matters to consumers. If you see any typescript errors as a direct
|
||||
result from this, they are compatible with each other in the ways that we
|
||||
interact with them, and should be possible to type-cast across without ill
|
||||
effects.
|
||||
|
||||
- 05a928e296: Updated usages of types from `@backstage/backend-plugin-api`.
|
||||
- 61d4efe978: Make incremental providers more resilient to failures
|
||||
- Updated dependencies
|
||||
- @backstage/plugin-catalog-backend@1.6.0
|
||||
- @backstage/backend-common@0.17.0
|
||||
- @backstage/plugin-catalog-node@1.3.0
|
||||
- @backstage/backend-tasks@0.4.0
|
||||
- @backstage/plugin-permission-common@0.7.2
|
||||
- @backstage/backend-test-utils@0.1.31
|
||||
- @backstage/errors@1.1.4
|
||||
- @backstage/backend-plugin-api@0.2.0
|
||||
- @backstage/catalog-model@1.1.4
|
||||
- @backstage/config@1.0.5
|
||||
|
||||
## 0.1.0-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -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.1.0-next.3",
|
||||
"version": "0.1.0",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -14,9 +14,12 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { Logger, loggerToWinstonLogger } from '@backstage/backend-plugin-api';
|
||||
import { PluginTaskScheduler } from '@backstage/backend-tasks';
|
||||
import { Config } from '@backstage/config';
|
||||
import {
|
||||
ConfigService,
|
||||
LoggerService,
|
||||
SchedulerService,
|
||||
loggerToWinstonLogger,
|
||||
} from '@backstage/backend-plugin-api';
|
||||
import { stringifyError } from '@backstage/errors';
|
||||
import {
|
||||
EntityProvider,
|
||||
@@ -46,10 +49,10 @@ export class WrapperProviders {
|
||||
|
||||
constructor(
|
||||
private readonly options: {
|
||||
config: Config;
|
||||
logger: Logger;
|
||||
config: ConfigService;
|
||||
logger: LoggerService;
|
||||
client: Knex;
|
||||
scheduler: PluginTaskScheduler;
|
||||
scheduler: SchedulerService;
|
||||
applyDatabaseMigrations?: typeof applyDatabaseMigrations;
|
||||
},
|
||||
) {}
|
||||
|
||||
@@ -1,5 +1,17 @@
|
||||
# @backstage/plugin-catalog-backend-module-ldap
|
||||
|
||||
## 0.5.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/plugin-catalog-backend@1.6.0
|
||||
- @backstage/backend-tasks@0.4.0
|
||||
- @backstage/errors@1.1.4
|
||||
- @backstage/types@1.0.2
|
||||
- @backstage/catalog-model@1.1.4
|
||||
- @backstage/config@1.0.5
|
||||
|
||||
## 0.5.6-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -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.6-next.3",
|
||||
"version": "0.5.6",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -1,5 +1,19 @@
|
||||
# @backstage/plugin-catalog-backend-module-msgraph
|
||||
|
||||
## 0.4.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 884d749b14: Refactored to use `coreServices` from `@backstage/backend-plugin-api`.
|
||||
- 3280711113: Updated dependency `msw` to `^0.49.0`.
|
||||
- Updated dependencies
|
||||
- @backstage/plugin-catalog-backend@1.6.0
|
||||
- @backstage/plugin-catalog-node@1.3.0
|
||||
- @backstage/backend-tasks@0.4.0
|
||||
- @backstage/backend-plugin-api@0.2.0
|
||||
- @backstage/catalog-model@1.1.4
|
||||
- @backstage/config@1.0.5
|
||||
|
||||
## 0.4.5-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -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.4.5-next.3",
|
||||
"version": "0.4.5",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -1,5 +1,19 @@
|
||||
# @backstage/plugin-catalog-backend-module-openapi
|
||||
|
||||
## 0.1.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- dd995cdc72: Enabled support of resolving `$refs` in all kind of yaml documents, not only OpenAPI. This implicitly adds `$ref` resolving support for AsyncAPI specs. Thus, the `openApiPlaceholderResolver` has been renamed to `jsonSchemaRefPlaceholderResolver`.
|
||||
- Updated dependencies
|
||||
- @backstage/plugin-catalog-backend@1.6.0
|
||||
- @backstage/backend-common@0.17.0
|
||||
- @backstage/plugin-catalog-node@1.3.0
|
||||
- @backstage/integration@1.4.1
|
||||
- @backstage/types@1.0.2
|
||||
- @backstage/catalog-model@1.1.4
|
||||
- @backstage/config@1.0.5
|
||||
|
||||
## 0.1.5-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -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.5-next.3",
|
||||
"version": "0.1.5",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -1,5 +1,72 @@
|
||||
# @backstage/plugin-catalog-backend
|
||||
|
||||
## 1.6.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- 16891a212c: Added new `POST /entities/by-refs` endpoint, which allows you to efficiently
|
||||
batch-fetch entities by their entity ref. This can be useful e.g. in graphql
|
||||
resolvers or similar contexts where you need to fetch many entities at the same
|
||||
time.
|
||||
- 273ba3a77f: Deprecated Prometheus metrics in favour of OpenTelemtry metrics.
|
||||
- c395abb5b2: The catalog no longer stops after the first processor `validateEntityKind`
|
||||
method returns `true` when validating entity kind shapes. Instead, it continues
|
||||
through all registered processors that have this method, and requires that _at
|
||||
least one_ of them returned true.
|
||||
|
||||
The old behavior of stopping early made it harder to extend existing core kinds
|
||||
with additional fields, since the `BuiltinKindsEntityProcessor` is always
|
||||
present at the top of the processing chain and ensures that your additional
|
||||
validation code would never be run.
|
||||
|
||||
This is technically a breaking change, although it should not affect anybody
|
||||
under normal circumstances, except if you had problematic validation code that
|
||||
you were unaware that it was not being run. That code may now start to exhibit
|
||||
those problems.
|
||||
|
||||
If you need to disable this new behavior, `CatalogBuilder` as used in your
|
||||
`packages/backend/src/plugins/catalog.ts` file now has a
|
||||
`useLegacySingleProcessorValidation()` method to go back to the old behavior.
|
||||
|
||||
```diff
|
||||
const builder = await CatalogBuilder.create(env);
|
||||
+builder.useLegacySingleProcessorValidation();
|
||||
```
|
||||
|
||||
- 3072ebfdd7: The search table also holds the original entity value now and the facets endpoint fetches the filtered entity data from the search table.
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- ba13ff663c: Added a new `catalog.rules[].location` configuration that makes it possible to configure catalog rules to only apply to specific locations, either via exact match or a glob pattern.
|
||||
- d8593ce0e6: Do not use deprecated `LocationSpec` from the `@backstage/plugin-catalog-node` package
|
||||
- c507aee8a2: Ensured typescript type checks in migration files.
|
||||
- 2a8e3cc0b5: Optimize `Stitcher` process to be more memory efficient
|
||||
- 884d749b14: Refactored to use `coreServices` from `@backstage/backend-plugin-api`.
|
||||
- eacc8e2b55: Make it possible for entity providers to supply only entity refs, instead of full entities, in `delta` mutation deletions.
|
||||
- b05dcd5530: Move the `zod` dependency to a version that does not collide with other libraries
|
||||
- 5b3e2afa45: Fixed deprecated use of `substr` into `substring`.
|
||||
- 71147d5c16: Internal code reorganization.
|
||||
- 93870e4df1: Track the last time the final entity changed with new timestamp "last updated at" data in final entities database, which gets updated with the time when final entity is updated.
|
||||
- 20a5161f04: Adds MySQL support for the catalog-backend
|
||||
- 3280711113: Updated dependency `msw` to `^0.49.0`.
|
||||
- e982f77fe3: Registered shutdown hook in experimental catalog plugin.
|
||||
- b3fac9c107: Ignore attempts at emitting the current entity as a child of itself.
|
||||
- Updated dependencies
|
||||
- @backstage/catalog-client@1.2.0
|
||||
- @backstage/backend-common@0.17.0
|
||||
- @backstage/plugin-catalog-node@1.3.0
|
||||
- @backstage/plugin-permission-common@0.7.2
|
||||
- @backstage/plugin-permission-node@0.7.2
|
||||
- @backstage/errors@1.1.4
|
||||
- @backstage/backend-plugin-api@0.2.0
|
||||
- @backstage/integration@1.4.1
|
||||
- @backstage/types@1.0.2
|
||||
- @backstage/plugin-search-common@1.2.0
|
||||
- @backstage/catalog-model@1.1.4
|
||||
- @backstage/config@1.0.5
|
||||
- @backstage/plugin-catalog-common@1.0.9
|
||||
- @backstage/plugin-scaffolder-common@1.2.3
|
||||
|
||||
## 1.6.0-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
// @ts-check
|
||||
|
||||
/**
|
||||
* @param { import("knex").Knex } knex
|
||||
*/
|
||||
exports.up = async function up(knex) {
|
||||
await knex.schema.table('final_entities', table => {
|
||||
table
|
||||
.dateTime('last_updated_at')
|
||||
.nullable()
|
||||
.comment('The time when final_entity changed');
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* @param { import("knex").Knex } knex
|
||||
* @returns { Promise<void> }
|
||||
*/
|
||||
exports.down = async function down(knex) {
|
||||
await knex.schema.table('final_entities', table => {
|
||||
table.dropColumn('last_updated_at');
|
||||
});
|
||||
};
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/plugin-catalog-backend",
|
||||
"description": "The Backstage backend plugin that provides the Backstage catalog",
|
||||
"version": "1.6.0-next.3",
|
||||
"version": "1.6.0",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
@@ -47,6 +47,7 @@
|
||||
"@backstage/plugin-scaffolder-common": "workspace:^",
|
||||
"@backstage/plugin-search-common": "workspace:^",
|
||||
"@backstage/types": "workspace:^",
|
||||
"@opentelemetry/api": "^1.3.0",
|
||||
"@types/express": "^4.17.6",
|
||||
"codeowners-utils": "^1.0.2",
|
||||
"core-js": "^3.6.5",
|
||||
|
||||
@@ -38,6 +38,14 @@ export type EntityPagination = {
|
||||
after?: string;
|
||||
};
|
||||
|
||||
/**
|
||||
* A sorting rule for entities.
|
||||
*/
|
||||
export type EntityOrder = {
|
||||
field: string;
|
||||
order: 'asc' | 'desc';
|
||||
};
|
||||
|
||||
/**
|
||||
* Matches rows in the search table.
|
||||
* @public
|
||||
@@ -71,6 +79,7 @@ export type PageInfo =
|
||||
export type EntitiesRequest = {
|
||||
filter?: EntityFilter;
|
||||
fields?: (entity: Entity) => Entity;
|
||||
order?: EntityOrder[];
|
||||
pagination?: EntityPagination;
|
||||
authorizationToken?: string;
|
||||
};
|
||||
|
||||
@@ -462,12 +462,17 @@ describe('DefaultProcessingDatabase', () => {
|
||||
knexTx<DbRefreshStateReferencesRow>(
|
||||
'refresh_state_references',
|
||||
).select(),
|
||||
).resolves.toEqual([
|
||||
expect.objectContaining({
|
||||
source_entity_ref: 'location:default/fakelocation',
|
||||
target_entity_ref: 'component:default/1',
|
||||
}),
|
||||
]);
|
||||
).resolves.toEqual(
|
||||
step.expectConflict
|
||||
? []
|
||||
: [
|
||||
// eslint-disable-next-line jest/no-conditional-expect
|
||||
expect.objectContaining({
|
||||
source_entity_ref: 'location:default/fakelocation',
|
||||
target_entity_ref: 'component:default/1',
|
||||
}),
|
||||
],
|
||||
);
|
||||
|
||||
expect(mockLogger.error).not.toHaveBeenCalled();
|
||||
}
|
||||
|
||||
@@ -314,7 +314,6 @@ export class DefaultProcessingDatabase implements ProcessingDatabase {
|
||||
|
||||
// Keeps track of the entities that we end up inserting to update refresh_state_references afterwards
|
||||
const stateReferences = new Array<string>();
|
||||
const conflictingStateReferences = new Array<string>();
|
||||
|
||||
// Upsert all of the unprocessed entities into the refresh_state table, by
|
||||
// their entity ref.
|
||||
@@ -357,13 +356,11 @@ export class DefaultProcessingDatabase implements ProcessingDatabase {
|
||||
this.options.logger.warn(
|
||||
`Detected conflicting entityRef ${entityRef} already referenced by ${conflictingKey} and now also ${locationKey}`,
|
||||
);
|
||||
conflictingStateReferences.push(entityRef);
|
||||
}
|
||||
}
|
||||
|
||||
// Replace all references for the originating entity or source and then create new ones
|
||||
await tx<DbRefreshStateReferencesRow>('refresh_state_references')
|
||||
.whereNotIn('target_entity_ref', conflictingStateReferences)
|
||||
.andWhere({ source_entity_ref: options.sourceEntityRef })
|
||||
.delete();
|
||||
await tx.batchInsert(
|
||||
|
||||
@@ -610,6 +610,23 @@ describe('DefaultProviderDatabase', () => {
|
||||
}),
|
||||
]),
|
||||
);
|
||||
let references = await knex<DbRefreshStateReferencesRow>(
|
||||
'refresh_state_references',
|
||||
).select();
|
||||
expect(references).toEqual([
|
||||
{
|
||||
id: 1,
|
||||
source_key: 'lols',
|
||||
source_entity_ref: null,
|
||||
target_entity_ref: 'component:default/a',
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
source_key: 'lols',
|
||||
source_entity_ref: null,
|
||||
target_entity_ref: 'component:default/b',
|
||||
},
|
||||
]);
|
||||
|
||||
await db.transaction(async tx => {
|
||||
await db.replaceUnprocessedEntities(tx, {
|
||||
@@ -653,6 +670,23 @@ describe('DefaultProviderDatabase', () => {
|
||||
}),
|
||||
]),
|
||||
);
|
||||
references = await knex<DbRefreshStateReferencesRow>(
|
||||
'refresh_state_references',
|
||||
).select();
|
||||
expect(references).toEqual([
|
||||
{
|
||||
id: 2,
|
||||
source_key: 'lols',
|
||||
source_entity_ref: null,
|
||||
target_entity_ref: 'component:default/b',
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
source_key: 'lols',
|
||||
source_entity_ref: null,
|
||||
target_entity_ref: 'component:default/a',
|
||||
},
|
||||
]);
|
||||
},
|
||||
60_000,
|
||||
);
|
||||
|
||||
@@ -161,6 +161,11 @@ export class DefaultProviderDatabase implements ProviderDatabase {
|
||||
});
|
||||
}
|
||||
|
||||
await tx<DbRefreshStateReferencesRow>('refresh_state_references')
|
||||
.where('target_entity_ref', entityRef)
|
||||
.andWhere({ source_key: options.sourceKey })
|
||||
.delete();
|
||||
|
||||
if (ok) {
|
||||
await tx<DbRefreshStateReferencesRow>(
|
||||
'refresh_state_references',
|
||||
|
||||
@@ -66,6 +66,7 @@ export type DbFinalEntitiesRow = {
|
||||
hash: string;
|
||||
stitch_ticket: string;
|
||||
final_entity?: string;
|
||||
last_updated_at?: string | Date;
|
||||
};
|
||||
|
||||
export type DbSearchRow = {
|
||||
|
||||
@@ -100,4 +100,82 @@ describe('migrations', () => {
|
||||
},
|
||||
60_000,
|
||||
);
|
||||
|
||||
it.each(databases.eachSupportedId())(
|
||||
'20221201085245_add_last_updated_at_in_final_entities.js, %p',
|
||||
async databaseId => {
|
||||
const knex = await databases.init(databaseId);
|
||||
|
||||
await migrateUntilBefore(
|
||||
knex,
|
||||
'20221201085245_add_last_updated_at_in_final_entities.js',
|
||||
);
|
||||
|
||||
await knex
|
||||
.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(),
|
||||
},
|
||||
])
|
||||
.into('refresh_state');
|
||||
|
||||
await knex
|
||||
.insert({
|
||||
entity_id: 'my-id',
|
||||
hash: 'd1c0c56d5fea4238e4c091d9dde4cb42d05a6b7e',
|
||||
stitch_ticket: '52367ed7-120b-405f-b7e0-cdd90f956312',
|
||||
final_entity:
|
||||
'{"apiVersion":"a","kind":"k","metadata":{"name":"n","namespace":"ns","uid":"my-id","etag":"d1c0c56d5fea4238e4c091d9dde4cb42d05a6b7e"},"spec":{"k":"v"},"relations":[{"type":"looksAt","targetRef":"k:ns/other"}]}',
|
||||
})
|
||||
.into('final_entities');
|
||||
|
||||
await migrateUpOnce(knex);
|
||||
|
||||
await expect(knex('final_entities')).resolves.toEqual(
|
||||
expect.arrayContaining([
|
||||
{
|
||||
entity_id: 'my-id',
|
||||
hash: 'd1c0c56d5fea4238e4c091d9dde4cb42d05a6b7e',
|
||||
stitch_ticket: '52367ed7-120b-405f-b7e0-cdd90f956312',
|
||||
final_entity:
|
||||
'{"apiVersion":"a","kind":"k","metadata":{"name":"n","namespace":"ns","uid":"my-id","etag":"d1c0c56d5fea4238e4c091d9dde4cb42d05a6b7e"},"spec":{"k":"v"},"relations":[{"type":"looksAt","targetRef":"k:ns/other"}]}',
|
||||
last_updated_at: null,
|
||||
},
|
||||
]),
|
||||
);
|
||||
|
||||
await migrateDownOnce(knex);
|
||||
|
||||
await expect(knex('final_entities')).resolves.toEqual(
|
||||
expect.arrayContaining([
|
||||
{
|
||||
entity_id: 'my-id',
|
||||
hash: 'd1c0c56d5fea4238e4c091d9dde4cb42d05a6b7e',
|
||||
stitch_ticket: '52367ed7-120b-405f-b7e0-cdd90f956312',
|
||||
final_entity:
|
||||
'{"apiVersion":"a","kind":"k","metadata":{"name":"n","namespace":"ns","uid":"my-id","etag":"d1c0c56d5fea4238e4c091d9dde4cb42d05a6b7e"},"spec":{"k":"v"},"relations":[{"type":"looksAt","targetRef":"k:ns/other"}]}',
|
||||
},
|
||||
]),
|
||||
);
|
||||
|
||||
await knex.destroy();
|
||||
},
|
||||
60_000,
|
||||
);
|
||||
});
|
||||
|
||||
@@ -23,6 +23,7 @@ import { assertError, serializeError, stringifyError } from '@backstage/errors';
|
||||
import { Hash } from 'crypto';
|
||||
import stableStringify from 'fast-json-stable-stringify';
|
||||
import { Logger } from 'winston';
|
||||
import { metrics } from '@opentelemetry/api';
|
||||
import { ProcessingDatabase, RefreshStateItem } from '../database/types';
|
||||
import { createCounterMetric, createSummaryMetric } from '../util/metrics';
|
||||
import {
|
||||
@@ -257,62 +258,123 @@ export class DefaultCatalogProcessingEngine implements CatalogProcessingEngine {
|
||||
|
||||
// Helps wrap the timing and logging behaviors
|
||||
function progressTracker() {
|
||||
const stitchedEntities = createCounterMetric({
|
||||
// prom-client metrics are deprecated in favour of OpenTelemetry metrics.
|
||||
const promStitchedEntities = createCounterMetric({
|
||||
name: 'catalog_stitched_entities_count',
|
||||
help: 'Amount of entities stitched',
|
||||
help: 'Amount of entities stitched. DEPRECATED, use OpenTelemetry metrics instead',
|
||||
});
|
||||
const processedEntities = createCounterMetric({
|
||||
const promProcessedEntities = createCounterMetric({
|
||||
name: 'catalog_processed_entities_count',
|
||||
help: 'Amount of entities processed',
|
||||
help: 'Amount of entities processed, DEPRECATED, use OpenTelemetry metrics instead',
|
||||
labelNames: ['result'],
|
||||
});
|
||||
const processingDuration = createSummaryMetric({
|
||||
const promProcessingDuration = createSummaryMetric({
|
||||
name: 'catalog_processing_duration_seconds',
|
||||
help: 'Time spent executing the full processing flow',
|
||||
help: 'Time spent executing the full processing flow, DEPRECATED, use OpenTelemetry metrics instead',
|
||||
labelNames: ['result'],
|
||||
});
|
||||
const processorsDuration = createSummaryMetric({
|
||||
const promProcessorsDuration = createSummaryMetric({
|
||||
name: 'catalog_processors_duration_seconds',
|
||||
help: 'Time spent executing catalog processors',
|
||||
help: 'Time spent executing catalog processors, DEPRECATED, use OpenTelemetry metrics instead',
|
||||
labelNames: ['result'],
|
||||
});
|
||||
const processingQueueDelay = createSummaryMetric({
|
||||
const promProcessingQueueDelay = createSummaryMetric({
|
||||
name: 'catalog_processing_queue_delay_seconds',
|
||||
help: 'The amount of delay between being scheduled for processing, and the start of actually being processed',
|
||||
help: 'The amount of delay between being scheduled for processing, and the start of actually being processed, DEPRECATED, use OpenTelemetry metrics instead',
|
||||
});
|
||||
|
||||
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' },
|
||||
);
|
||||
|
||||
const processingDuration = meter.createHistogram(
|
||||
'catalog.processing.duration',
|
||||
{
|
||||
description: 'Time spent executing the full processing flow',
|
||||
unit: 'seconds',
|
||||
},
|
||||
);
|
||||
|
||||
const processorsDuration = meter.createHistogram(
|
||||
'catalog.processors.duration',
|
||||
{
|
||||
description: 'Time spent executing catalog processors',
|
||||
unit: 'seconds',
|
||||
},
|
||||
);
|
||||
|
||||
const processingQueueDelay = meter.createHistogram(
|
||||
'catalog.processing.queue.delay',
|
||||
{
|
||||
description:
|
||||
'The amount of delay between being scheduled for processing, and the start of actually being processed',
|
||||
unit: 'seconds',
|
||||
},
|
||||
);
|
||||
|
||||
function processStart(item: RefreshStateItem, logger: Logger) {
|
||||
const startTime = process.hrtime();
|
||||
const endOverallTimer = promProcessingDuration.startTimer();
|
||||
const endProcessorsTimer = promProcessorsDuration.startTimer();
|
||||
|
||||
logger.debug(`Processing ${item.entityRef}`);
|
||||
|
||||
if (item.nextUpdateAt) {
|
||||
processingQueueDelay.observe(-item.nextUpdateAt.diffNow().as('seconds'));
|
||||
const seconds = -item.nextUpdateAt.diffNow().as('seconds');
|
||||
promProcessingQueueDelay.observe(seconds);
|
||||
processingQueueDelay.record(seconds);
|
||||
}
|
||||
|
||||
const endOverallTimer = processingDuration.startTimer();
|
||||
const endProcessorsTimer = processorsDuration.startTimer();
|
||||
function endTime() {
|
||||
const delta = process.hrtime(startTime);
|
||||
return delta[0] + delta[1] / 1e9;
|
||||
}
|
||||
|
||||
function markProcessorsCompleted(result: EntityProcessingResult) {
|
||||
endProcessorsTimer({ result: result.ok ? 'ok' : 'failed' });
|
||||
processorsDuration.record(endTime(), {
|
||||
result: result.ok ? 'ok' : 'failed',
|
||||
});
|
||||
}
|
||||
|
||||
function markSuccessfulWithNoChanges() {
|
||||
endOverallTimer({ result: 'unchanged' });
|
||||
processedEntities.inc({ result: 'unchanged' }, 1);
|
||||
promProcessedEntities.inc({ result: 'unchanged' }, 1);
|
||||
|
||||
processingDuration.record(endTime(), { result: 'unchanged' });
|
||||
processedEntities.add(1, { result: 'unchanged' });
|
||||
}
|
||||
|
||||
function markSuccessfulWithErrors() {
|
||||
endOverallTimer({ result: 'errors' });
|
||||
processedEntities.inc({ result: 'errors' }, 1);
|
||||
promProcessedEntities.inc({ result: 'errors' }, 1);
|
||||
|
||||
processingDuration.record(endTime(), { result: 'errors' });
|
||||
processedEntities.add(1, { result: 'errors' });
|
||||
}
|
||||
|
||||
function markSuccessfulWithChanges(stitchedCount: number) {
|
||||
endOverallTimer({ result: 'changed' });
|
||||
stitchedEntities.inc(stitchedCount);
|
||||
processedEntities.inc({ result: 'changed' }, 1);
|
||||
promStitchedEntities.inc(stitchedCount);
|
||||
promProcessedEntities.inc({ result: 'changed' }, 1);
|
||||
|
||||
processingDuration.record(endTime(), { result: 'changed' });
|
||||
stitchedEntities.add(stitchedCount);
|
||||
processedEntities.add(1, { result: 'changed' });
|
||||
}
|
||||
|
||||
function markFailed(error: Error) {
|
||||
processedEntities.inc({ result: 'failed' }, 1);
|
||||
promProcessedEntities.inc({ result: 'failed' }, 1);
|
||||
processedEntities.add(1, { result: 'failed' });
|
||||
logger.warn(`Processing of ${item.entityRef} failed`, error);
|
||||
}
|
||||
|
||||
|
||||
+11
-2
@@ -258,13 +258,22 @@ describe('DefaultCatalogProcessingOrchestrator', () => {
|
||||
},
|
||||
};
|
||||
|
||||
const child: Entity = {
|
||||
apiVersion: '1',
|
||||
kind: 'Component',
|
||||
metadata: {
|
||||
name: 'Test2',
|
||||
namespace: 'test1',
|
||||
},
|
||||
};
|
||||
|
||||
it('enforces catalog rules', async () => {
|
||||
const integrations = ScmIntegrations.fromConfig(new ConfigReader({}));
|
||||
const processor: jest.Mocked<CatalogProcessor> = {
|
||||
getProcessorName: jest.fn(),
|
||||
validateEntityKind: jest.fn(async () => true),
|
||||
readLocation: jest.fn(async (_l, _o, emit) => {
|
||||
emit(processingResult.entity({ type: 't', target: 't' }, entity));
|
||||
emit(processingResult.entity({ type: 't', target: 't' }, child));
|
||||
return true;
|
||||
}),
|
||||
};
|
||||
@@ -300,7 +309,7 @@ describe('DefaultCatalogProcessingOrchestrator', () => {
|
||||
getProcessorName: jest.fn(),
|
||||
validateEntityKind: jest.fn(async () => true),
|
||||
readLocation: jest.fn(async (_l, _o, emit) => {
|
||||
emit(processingResult.entity({ type: 't', target: 't' }, entity));
|
||||
emit(processingResult.entity({ type: 't', target: 't' }, child));
|
||||
return true;
|
||||
}),
|
||||
};
|
||||
|
||||
@@ -187,7 +187,7 @@ export class DefaultCatalogProcessingOrchestrator
|
||||
res = await processor.preProcessEntity(
|
||||
res,
|
||||
context.location,
|
||||
context.collector.onEmit,
|
||||
context.collector.forProcessor(processor),
|
||||
context.originLocation,
|
||||
context.cache.forProcessor(processor),
|
||||
);
|
||||
@@ -300,7 +300,7 @@ export class DefaultCatalogProcessingOrchestrator
|
||||
|
||||
for (const maybeRelativeTarget of targets) {
|
||||
if (type === 'file' && maybeRelativeTarget.endsWith(path.sep)) {
|
||||
context.collector.onEmit(
|
||||
context.collector.generic()(
|
||||
processingResult.inputError(
|
||||
context.location,
|
||||
`LocationEntityProcessor cannot handle ${type} type location with target ${context.location.target} that ends with a path separator`,
|
||||
@@ -326,7 +326,7 @@ export class DefaultCatalogProcessingOrchestrator
|
||||
presence,
|
||||
},
|
||||
presence === 'optional',
|
||||
context.collector.onEmit,
|
||||
context.collector.forProcessor(processor),
|
||||
this.options.parser,
|
||||
context.cache.forProcessor(processor, target),
|
||||
);
|
||||
@@ -365,7 +365,7 @@ export class DefaultCatalogProcessingOrchestrator
|
||||
res = await processor.postProcessEntity(
|
||||
res,
|
||||
context.location,
|
||||
context.collector.onEmit,
|
||||
context.collector.forProcessor(processor),
|
||||
context.cache.forProcessor(processor),
|
||||
);
|
||||
} catch (e) {
|
||||
|
||||
@@ -19,10 +19,12 @@ import {
|
||||
ANNOTATION_LOCATION,
|
||||
ANNOTATION_ORIGIN_LOCATION,
|
||||
stringifyLocationRef,
|
||||
stringifyEntityRef,
|
||||
} from '@backstage/catalog-model';
|
||||
import { assertError } from '@backstage/errors';
|
||||
import { Logger } from 'winston';
|
||||
import {
|
||||
CatalogProcessor,
|
||||
CatalogProcessorResult,
|
||||
DeferredEntity,
|
||||
EntityRelationSpec,
|
||||
@@ -50,8 +52,17 @@ export class ProcessorOutputCollector {
|
||||
private readonly parentEntity: Entity,
|
||||
) {}
|
||||
|
||||
get onEmit(): (i: CatalogProcessorResult) => void {
|
||||
return i => this.receive(i);
|
||||
generic(): (i: CatalogProcessorResult) => void {
|
||||
return i => this.receive(this.logger, i);
|
||||
}
|
||||
|
||||
forProcessor(
|
||||
processor: CatalogProcessor,
|
||||
): (i: CatalogProcessorResult) => void {
|
||||
const logger = this.logger.child({
|
||||
processor: processor.getProcessorName(),
|
||||
});
|
||||
return i => this.receive(logger, i);
|
||||
}
|
||||
|
||||
results() {
|
||||
@@ -64,9 +75,9 @@ export class ProcessorOutputCollector {
|
||||
};
|
||||
}
|
||||
|
||||
private receive(i: CatalogProcessorResult) {
|
||||
private receive(logger: Logger, i: CatalogProcessorResult) {
|
||||
if (this.done) {
|
||||
this.logger.warn(
|
||||
logger.warn(
|
||||
`Item of type "${
|
||||
i.type
|
||||
}" was emitted after processing had completed. Stack trace: ${
|
||||
@@ -84,11 +95,24 @@ export class ProcessorOutputCollector {
|
||||
entity = validateEntityEnvelope(i.entity);
|
||||
} catch (e) {
|
||||
assertError(e);
|
||||
this.logger.debug(`Envelope validation failed at ${location}, ${e}`);
|
||||
logger.debug(`Envelope validation failed at ${location}, ${e}`);
|
||||
this.errors.push(e);
|
||||
return;
|
||||
}
|
||||
|
||||
// The processor contract says you should return the "trunk" (current)
|
||||
// entity, not emit it. But it happens that this is misunderstood or
|
||||
// accidentally forgotten. This can lead to circular references which at
|
||||
// best is wasteful, so we try to be helpful by ignoring such emitted
|
||||
// entities.
|
||||
const entityRef = stringifyEntityRef(entity);
|
||||
if (entityRef === stringifyEntityRef(this.parentEntity)) {
|
||||
logger.warn(
|
||||
`Ignored emitted entity ${entityRef} whose ref was identical to the one being processed. This commonly indicates mistakenly emitting the input entity instead of returning it.`,
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
// Note that at this point, we have only validated the envelope part of
|
||||
// the entity data. Annotations are not part of that, so we have to be
|
||||
// defensive. If the annotations were malformed (e.g. were not a valid
|
||||
|
||||
@@ -28,6 +28,7 @@ import {
|
||||
import { Stitcher } from '../stitching/Stitcher';
|
||||
import { buildEntitySearch } from '../stitching/buildEntitySearch';
|
||||
import { DefaultEntitiesCatalog } from './DefaultEntitiesCatalog';
|
||||
import { EntitiesRequest } from '../catalog/types';
|
||||
|
||||
describe('DefaultEntitiesCatalog', () => {
|
||||
const databases = TestDatabases.create({
|
||||
@@ -254,7 +255,7 @@ describe('DefaultEntitiesCatalog', () => {
|
||||
|
||||
describe('entities', () => {
|
||||
it.each(databases.eachSupportedId())(
|
||||
'should return correct entity for simple filter',
|
||||
'should return correct entity for simple filter, %p',
|
||||
async databaseId => {
|
||||
const { knex } = await createDatabase(databaseId);
|
||||
const entity1: Entity = {
|
||||
@@ -284,10 +285,11 @@ describe('DefaultEntitiesCatalog', () => {
|
||||
expect(entities.length).toBe(1);
|
||||
expect(entities[0]).toEqual(entity2);
|
||||
},
|
||||
60_000,
|
||||
);
|
||||
|
||||
it.each(databases.eachSupportedId())(
|
||||
'should return correct entity for negation filter',
|
||||
'should return correct entity for negation filter, %p',
|
||||
async databaseId => {
|
||||
const { knex } = await createDatabase(databaseId);
|
||||
const entity1: Entity = {
|
||||
@@ -319,10 +321,11 @@ describe('DefaultEntitiesCatalog', () => {
|
||||
expect(entities.length).toBe(1);
|
||||
expect(entities[0]).toEqual(entity1);
|
||||
},
|
||||
60_000,
|
||||
);
|
||||
|
||||
it.each(databases.eachSupportedId())(
|
||||
'should return correct entities for nested filter',
|
||||
'should return correct entities for nested filter, %p',
|
||||
async databaseId => {
|
||||
const { knex } = await createDatabase(databaseId);
|
||||
const entity1: Entity = {
|
||||
@@ -388,10 +391,11 @@ describe('DefaultEntitiesCatalog', () => {
|
||||
expect(entities).toContainEqual(entity2);
|
||||
expect(entities).toContainEqual(entity4);
|
||||
},
|
||||
60_000,
|
||||
);
|
||||
|
||||
it.each(databases.eachSupportedId())(
|
||||
'should return correct entities for complex negation filter',
|
||||
'should return correct entities for complex negation filter, %p',
|
||||
async databaseId => {
|
||||
const { knex } = await createDatabase(databaseId);
|
||||
const entity1: Entity = {
|
||||
@@ -429,10 +433,11 @@ describe('DefaultEntitiesCatalog', () => {
|
||||
expect(entities.length).toBe(1);
|
||||
expect(entities).toContainEqual(entity1);
|
||||
},
|
||||
60_000,
|
||||
);
|
||||
|
||||
it.each(databases.eachSupportedId())(
|
||||
'should return no matches for an empty values array',
|
||||
'should return no matches for an empty values array, %p',
|
||||
// NOTE: An empty values array is not a sensible input in a realistic scenario.
|
||||
async databaseId => {
|
||||
const { knex } = await createDatabase(databaseId);
|
||||
@@ -461,6 +466,7 @@ describe('DefaultEntitiesCatalog', () => {
|
||||
|
||||
expect(entities.length).toBe(0);
|
||||
},
|
||||
60_000,
|
||||
);
|
||||
|
||||
it.each(databases.eachSupportedId())(
|
||||
@@ -517,12 +523,105 @@ describe('DefaultEntitiesCatalog', () => {
|
||||
},
|
||||
]);
|
||||
},
|
||||
60_000,
|
||||
);
|
||||
|
||||
it.each(databases.eachSupportedId())(
|
||||
'can order and combine with filtering, %p',
|
||||
async databaseId => {
|
||||
const { knex } = await createDatabase(databaseId);
|
||||
|
||||
const entity1: Entity = {
|
||||
apiVersion: 'a',
|
||||
kind: 'k',
|
||||
metadata: { name: 'n1' },
|
||||
spec: { a: 'foo' },
|
||||
};
|
||||
const entity2: Entity = {
|
||||
apiVersion: 'a',
|
||||
kind: 'k',
|
||||
metadata: { name: 'n2' },
|
||||
spec: { a: 'bar' },
|
||||
};
|
||||
const entity3: Entity = {
|
||||
apiVersion: 'a',
|
||||
kind: 'k',
|
||||
metadata: { name: 'n3' },
|
||||
spec: { a: 'bar', b: 'lonely' },
|
||||
};
|
||||
const entity4: Entity = {
|
||||
apiVersion: 'a',
|
||||
kind: 'k',
|
||||
metadata: { name: 'n4' },
|
||||
spec: { a: 'baz', b: 'only' },
|
||||
};
|
||||
await addEntityToSearch(knex, entity1);
|
||||
await addEntityToSearch(knex, entity2);
|
||||
await addEntityToSearch(knex, entity3);
|
||||
await addEntityToSearch(knex, entity4);
|
||||
|
||||
const catalog = new DefaultEntitiesCatalog(knex, stitcher);
|
||||
|
||||
function f(request: EntitiesRequest): Promise<string[]> {
|
||||
return catalog
|
||||
.entities(request)
|
||||
.then(response => response.entities.map(e => e.metadata.name));
|
||||
}
|
||||
|
||||
await expect(
|
||||
f({ order: [{ field: 'metadata.name', order: 'asc' }] }),
|
||||
).resolves.toEqual(['n1', 'n2', 'n3', 'n4']);
|
||||
|
||||
await expect(
|
||||
f({ order: [{ field: 'metadata.name', order: 'desc' }] }),
|
||||
).resolves.toEqual(['n4', 'n3', 'n2', 'n1']);
|
||||
|
||||
await expect(
|
||||
f({
|
||||
order: [
|
||||
{ field: 'spec.a', order: 'asc' },
|
||||
{ field: 'metadata.name', order: 'desc' },
|
||||
],
|
||||
}),
|
||||
).resolves.toEqual(['n3', 'n2', 'n4', 'n1']);
|
||||
|
||||
await expect(
|
||||
f({
|
||||
filter: { not: { key: 'spec.b', values: ['lonely'] } },
|
||||
order: [
|
||||
{ field: 'spec.a', order: 'asc' },
|
||||
{ field: 'metadata.name', order: 'desc' },
|
||||
],
|
||||
}),
|
||||
).resolves.toEqual(['n2', 'n4', 'n1']);
|
||||
|
||||
// only n3 and n4 has spec.b, nulls (no match) always goes last no matter the order
|
||||
await expect(
|
||||
f({
|
||||
order: [
|
||||
{ field: 'spec.b', order: 'asc' },
|
||||
{ field: 'metadata.name', order: 'asc' },
|
||||
],
|
||||
}),
|
||||
).resolves.toEqual(['n3', 'n4', 'n1', 'n2']);
|
||||
|
||||
// only n3 and n4 has spec.b, nulls (no match) always goes last no matter the order
|
||||
await expect(
|
||||
f({
|
||||
order: [
|
||||
{ field: 'spec.b', order: 'desc' },
|
||||
{ field: 'metadata.name', order: 'asc' },
|
||||
],
|
||||
}),
|
||||
).resolves.toEqual(['n4', 'n3', 'n1', 'n2']);
|
||||
},
|
||||
60_000,
|
||||
);
|
||||
});
|
||||
|
||||
describe('entitiesBatch', () => {
|
||||
it.each(databases.eachSupportedId())(
|
||||
'queries for entities by ref, including duplicates, and gracefully returns null for missing entities',
|
||||
'queries for entities by ref, including duplicates, and gracefully returns null for missing entities, %p',
|
||||
async databaseId => {
|
||||
const { knex } = await createDatabase(databaseId);
|
||||
|
||||
@@ -571,12 +670,13 @@ describe('DefaultEntitiesCatalog', () => {
|
||||
'k:default/two',
|
||||
]);
|
||||
},
|
||||
60_000,
|
||||
);
|
||||
});
|
||||
|
||||
describe('removeEntityByUid', () => {
|
||||
it.each(databases.eachSupportedId())(
|
||||
'also clears parent hashes',
|
||||
'also clears parent hashes, %p',
|
||||
async databaseId => {
|
||||
const { knex } = await createDatabase(databaseId);
|
||||
|
||||
@@ -659,12 +759,13 @@ describe('DefaultEntitiesCatalog', () => {
|
||||
new Set(['k:default/unrelated1', 'k:default/unrelated2']),
|
||||
);
|
||||
},
|
||||
60_000,
|
||||
);
|
||||
});
|
||||
|
||||
describe('facets', () => {
|
||||
it.each(databases.eachSupportedId())(
|
||||
'can filter and collect properly',
|
||||
'can filter and collect properly, %p',
|
||||
async databaseId => {
|
||||
const { knex } = await createDatabase(databaseId);
|
||||
|
||||
@@ -697,10 +798,11 @@ describe('DefaultEntitiesCatalog', () => {
|
||||
},
|
||||
});
|
||||
},
|
||||
60_000,
|
||||
);
|
||||
|
||||
it.each(databases.eachSupportedId())(
|
||||
'can match on annotations and labels with dots in them',
|
||||
'can match on annotations and labels with dots in them, %p',
|
||||
async databaseId => {
|
||||
const { knex } = await createDatabase(databaseId);
|
||||
|
||||
@@ -743,10 +845,11 @@ describe('DefaultEntitiesCatalog', () => {
|
||||
},
|
||||
});
|
||||
},
|
||||
60_000,
|
||||
);
|
||||
|
||||
it.each(databases.eachSupportedId())(
|
||||
'can match on strings in arrays',
|
||||
'can match on strings in arrays, %p',
|
||||
async databaseId => {
|
||||
const { knex } = await createDatabase(databaseId);
|
||||
|
||||
@@ -784,6 +887,7 @@ describe('DefaultEntitiesCatalog', () => {
|
||||
},
|
||||
});
|
||||
},
|
||||
60_000,
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -97,7 +97,7 @@ function addCondition(
|
||||
// make a lot of sense. However, it had abysmal performance on sqlite
|
||||
// when datasets grew large, so we're using IN instead.
|
||||
const matchQuery = db<DbSearchRow>('search')
|
||||
.select(entityIdField)
|
||||
.select('search.entity_id')
|
||||
.where({ key: filter.key.toLowerCase() })
|
||||
.andWhere(function keyFilter() {
|
||||
if (filter.values) {
|
||||
@@ -178,14 +178,48 @@ export class DefaultEntitiesCatalog implements EntitiesCatalog {
|
||||
|
||||
let entitiesQuery =
|
||||
db<DbFinalEntitiesRow>('final_entities').select('final_entities.*');
|
||||
|
||||
request?.order?.forEach(({ field }, index) => {
|
||||
const alias = `order_${index}`;
|
||||
entitiesQuery = entitiesQuery.leftOuterJoin(
|
||||
{ [alias]: 'search' },
|
||||
function search(inner) {
|
||||
inner
|
||||
.on(`${alias}.entity_id`, 'final_entities.entity_id')
|
||||
.andOn(`${alias}.key`, db.raw('?', [field]));
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
entitiesQuery = entitiesQuery.whereNotNull('final_entities.final_entity');
|
||||
|
||||
if (request?.filter) {
|
||||
entitiesQuery = parseFilter(request.filter, entitiesQuery, db);
|
||||
entitiesQuery = parseFilter(
|
||||
request.filter,
|
||||
entitiesQuery,
|
||||
db,
|
||||
false,
|
||||
'final_entities.entity_id',
|
||||
);
|
||||
}
|
||||
|
||||
// TODO: move final_entities to use entity_ref
|
||||
entitiesQuery = entitiesQuery
|
||||
.whereNotNull('final_entities.final_entity')
|
||||
.orderBy('entity_id', 'asc');
|
||||
request?.order?.forEach(({ order }, index) => {
|
||||
if (db.client.config.client === 'pg') {
|
||||
// pg correctly orders by the column value and handling nulls in one go
|
||||
entitiesQuery = entitiesQuery.orderBy([
|
||||
{ column: `order_${index}.value`, order, nulls: 'last' },
|
||||
]);
|
||||
} else {
|
||||
// sqlite and mysql translate the above statement ONLY into "order by (value is null) asc"
|
||||
// no matter what the order is, for some reason, so we have to manually add back the statement
|
||||
// that translates to "order by value <order>" while avoiding to give an order
|
||||
entitiesQuery = entitiesQuery.orderBy([
|
||||
{ column: `order_${index}.value`, order: undefined, nulls: 'last' },
|
||||
{ column: `order_${index}.value`, order },
|
||||
]);
|
||||
}
|
||||
});
|
||||
entitiesQuery = entitiesQuery.orderBy('final_entities.entity_id', 'asc'); // stable sort
|
||||
|
||||
const { limit, offset } = parsePagination(request?.pagination);
|
||||
if (limit !== undefined) {
|
||||
|
||||
@@ -41,6 +41,7 @@ import {
|
||||
parseEntityTransformParams,
|
||||
} from './request';
|
||||
import { parseEntityFacetParams } from './request/parseEntityFacetParams';
|
||||
import { parseEntityOrderParams } from './request/parseEntityOrderParams';
|
||||
import { LocationService, RefreshOptions, RefreshService } from './types';
|
||||
import {
|
||||
disallowReadonlyMode,
|
||||
@@ -113,6 +114,7 @@ export async function createRouter(
|
||||
const { entities, pageInfo } = await entitiesCatalog.entities({
|
||||
filter: parseEntityFilterParams(req.query),
|
||||
fields: parseEntityTransformParams(req.query),
|
||||
order: parseEntityOrderParams(req.query),
|
||||
pagination: parseEntityPaginationParams(req.query),
|
||||
authorizationToken: getBearerToken(req.header('authorization')),
|
||||
});
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
* 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 { parseEntityOrderParams } from './parseEntityOrderParams';
|
||||
|
||||
describe('parseEntityOrderParams', () => {
|
||||
it('handles missing parameter', () => {
|
||||
expect(parseEntityOrderParams({})).toBeUndefined();
|
||||
});
|
||||
|
||||
it('handles parameters with various orders', () => {
|
||||
expect(
|
||||
parseEntityOrderParams({ order: ['asc:a', 'desc:b', 'asc:c:d'] }),
|
||||
).toEqual([
|
||||
{ field: 'a', order: 'asc' },
|
||||
{ field: 'b', order: 'desc' },
|
||||
{ field: 'c:d', order: 'asc' },
|
||||
]);
|
||||
});
|
||||
|
||||
it.each(['', ':', 'ascii:', 'ascii:ebcdic', ':colon'])(
|
||||
'rejects missing/bad order or key, %p',
|
||||
order => {
|
||||
expect(() => parseEntityOrderParams({ order: [order] })).toThrow(
|
||||
`Invalid order parameter "${order}", expected "<asc or desc>:<field name>"`,
|
||||
);
|
||||
},
|
||||
);
|
||||
});
|
||||
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* 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 { InputError } from '@backstage/errors';
|
||||
import { EntityOrder } from '../../catalog/types';
|
||||
import { parseStringsParam } from './common';
|
||||
|
||||
export function parseEntityOrderParams(
|
||||
params: Record<string, unknown>,
|
||||
): EntityOrder[] | undefined {
|
||||
return parseStringsParam(params.order, 'order')?.map(item => {
|
||||
const match = item.match(/^(asc|desc):(.+)$/);
|
||||
if (!match) {
|
||||
throw new InputError(
|
||||
`Invalid order parameter "${item}", expected "<asc or desc>:<field name>"`,
|
||||
);
|
||||
}
|
||||
|
||||
return {
|
||||
order: match[1] as 'asc' | 'desc',
|
||||
field: match[2],
|
||||
};
|
||||
});
|
||||
}
|
||||
@@ -110,6 +110,8 @@ describe('Stitcher', () => {
|
||||
});
|
||||
|
||||
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 db<DbSearchRow>('search');
|
||||
@@ -127,7 +129,12 @@ describe('Stitcher', () => {
|
||||
original_value: 'a',
|
||||
value: 'a',
|
||||
},
|
||||
{ entity_id: 'my-id', key: 'kind', original_value: 'k', value: 'k' },
|
||||
{
|
||||
entity_id: 'my-id',
|
||||
key: 'kind',
|
||||
original_value: 'k',
|
||||
value: 'k',
|
||||
},
|
||||
{
|
||||
entity_id: 'my-id',
|
||||
key: 'metadata.name',
|
||||
@@ -227,7 +234,12 @@ describe('Stitcher', () => {
|
||||
original_value: 'a',
|
||||
value: 'a',
|
||||
},
|
||||
{ entity_id: 'my-id', key: 'kind', original_value: 'k', value: 'k' },
|
||||
{
|
||||
entity_id: 'my-id',
|
||||
key: 'kind',
|
||||
original_value: 'k',
|
||||
value: 'k',
|
||||
},
|
||||
{
|
||||
entity_id: 'my-id',
|
||||
key: 'metadata.name',
|
||||
|
||||
@@ -207,11 +207,12 @@ export class Stitcher {
|
||||
.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']);
|
||||
.merge(['final_entity', 'hash', 'last_updated_at']);
|
||||
|
||||
if (amountOfRowsChanged === 0) {
|
||||
this.logger.debug(
|
||||
|
||||
@@ -1,5 +1,14 @@
|
||||
# @backstage/plugin-catalog-common
|
||||
|
||||
## 1.0.9
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/plugin-permission-common@0.7.2
|
||||
- @backstage/plugin-search-common@1.2.0
|
||||
- @backstage/catalog-model@1.1.4
|
||||
|
||||
## 1.0.9-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/plugin-catalog-common",
|
||||
"description": "Common functionalities for the catalog plugin",
|
||||
"version": "1.0.9-next.3",
|
||||
"version": "1.0.9",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -1,5 +1,21 @@
|
||||
# @internal/plugin-catalog-customized
|
||||
|
||||
## 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
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@internal/plugin-catalog-customized",
|
||||
"description": "The internal Backstage Customizable plugin for browsing the Backstage catalog",
|
||||
"version": "0.0.5-next.4",
|
||||
"version": "0.0.5",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -1,5 +1,28 @@
|
||||
# @backstage/plugin-catalog-graph
|
||||
|
||||
## 0.2.25
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @backstage/core-components@0.12.2
|
||||
- @backstage/plugin-catalog-react@1.2.3
|
||||
|
||||
## 0.2.24
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- cb716004ef: Internal refactor to improve tests
|
||||
- 2e701b3796: Internal refactor to use `react-router-dom` rather than `react-router`.
|
||||
- 454f2e90db: Set the default `maxDepth` prop for `EntityRelationsGraph` to a smaller value to provide better readability.
|
||||
- Updated dependencies
|
||||
- @backstage/core-plugin-api@1.2.0
|
||||
- @backstage/catalog-client@1.2.0
|
||||
- @backstage/core-components@0.12.1
|
||||
- @backstage/plugin-catalog-react@1.2.2
|
||||
- @backstage/catalog-model@1.1.4
|
||||
- @backstage/theme@0.2.16
|
||||
|
||||
## 0.2.24-next.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/plugin-catalog-graph",
|
||||
"version": "0.2.24-next.4",
|
||||
"version": "0.2.24",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -1,5 +1,15 @@
|
||||
# @backstage/plugin-catalog-graphql
|
||||
|
||||
## 0.3.16
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 3280711113: Updated dependency `msw` to `^0.49.0`.
|
||||
- Updated dependencies
|
||||
- @backstage/types@1.0.2
|
||||
- @backstage/catalog-model@1.1.4
|
||||
- @backstage/config@1.0.5
|
||||
|
||||
## 0.3.16-next.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user