Merge remote-tracking branch 'backstage/master' into erikengervall/plugin-release-manager-as-a-service
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-explore': patch
|
||||
---
|
||||
|
||||
Add "Organization" tab with a diagram
|
||||
@@ -1,56 +0,0 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder-backend': minor
|
||||
---
|
||||
|
||||
Migrate the plugin to use the `ContainerRunner` interface instead of `runDockerContainer(…)`.
|
||||
It also provides the `ContainerRunner` to the individual templaters instead of to the `createRouter` function.
|
||||
|
||||
To apply this change to an existing backend application, add the following to `src/plugins/scaffolder.ts`:
|
||||
|
||||
```diff
|
||||
- import { SingleHostDiscovery } from '@backstage/backend-common';
|
||||
+ import {
|
||||
+ DockerContainerRunner,
|
||||
+ SingleHostDiscovery,
|
||||
+ } from '@backstage/backend-common';
|
||||
|
||||
|
||||
export default async function createPlugin({
|
||||
logger,
|
||||
config,
|
||||
database,
|
||||
reader,
|
||||
}: PluginEnvironment): Promise<Router> {
|
||||
+ const dockerClient = new Docker();
|
||||
+ const containerRunner = new DockerContainerRunner({ dockerClient });
|
||||
|
||||
+ const cookiecutterTemplater = new CookieCutter({ containerRunner });
|
||||
- const cookiecutterTemplater = new CookieCutter();
|
||||
+ const craTemplater = new CreateReactAppTemplater({ containerRunner });
|
||||
- const craTemplater = new CreateReactAppTemplater();
|
||||
const templaters = new Templaters();
|
||||
|
||||
templaters.register('cookiecutter', cookiecutterTemplater);
|
||||
templaters.register('cra', craTemplater);
|
||||
|
||||
const preparers = await Preparers.fromConfig(config, { logger });
|
||||
const publishers = await Publishers.fromConfig(config, { logger });
|
||||
|
||||
- const dockerClient = new Docker();
|
||||
|
||||
const discovery = SingleHostDiscovery.fromConfig(config);
|
||||
const catalogClient = new CatalogClient({ discoveryApi: discovery });
|
||||
|
||||
return await createRouter({
|
||||
preparers,
|
||||
templaters,
|
||||
publishers,
|
||||
logger,
|
||||
config,
|
||||
- dockerClient,
|
||||
database,
|
||||
catalogClient,
|
||||
reader,
|
||||
});
|
||||
}
|
||||
```
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
'@backstage/cli': patch
|
||||
'@backstage/create-app': patch
|
||||
'@backstage/plugin-catalog-graphql': patch
|
||||
---
|
||||
|
||||
chore: bump `ts-node` versions to 9.1.1
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/plugin-cost-insights': minor
|
||||
---
|
||||
|
||||
make change ratio optional
|
||||
@@ -1,58 +0,0 @@
|
||||
---
|
||||
'@backstage/backend-common': minor
|
||||
---
|
||||
|
||||
Refactor the `runDockerContainer(…)` function to an interface-based api.
|
||||
This gives the option to replace the docker runtime in the future.
|
||||
|
||||
Packages and plugins that previously used the `dockerode` as argument should be migrated to use the new `ContainerRunner` interface instead.
|
||||
|
||||
```diff
|
||||
import {
|
||||
- runDockerContainer,
|
||||
+ ContainerRunner,
|
||||
PluginEndpointDiscovery,
|
||||
} from '@backstage/backend-common';
|
||||
- import Docker from 'dockerode';
|
||||
|
||||
type RouterOptions = {
|
||||
// ...
|
||||
- dockerClient: Docker,
|
||||
+ containerRunner: ContainerRunner;
|
||||
};
|
||||
|
||||
export async function createRouter({
|
||||
// ...
|
||||
- dockerClient,
|
||||
+ containerRunner,
|
||||
}: RouterOptions): Promise<express.Router> {
|
||||
// ...
|
||||
|
||||
+ await containerRunner.runContainer({
|
||||
- await runDockerContainer({
|
||||
image: 'docker',
|
||||
// ...
|
||||
- dockerClient,
|
||||
});
|
||||
|
||||
// ...
|
||||
}
|
||||
```
|
||||
|
||||
To keep the `dockerode` based runtime, use the `DockerContainerRunner` implementation:
|
||||
|
||||
```diff
|
||||
+ import {
|
||||
+ ContainerRunner,
|
||||
+ DockerContainerRunner
|
||||
+ } from '@backstage/backend-common';
|
||||
- import { runDockerContainer } from '@backstage/backend-common';
|
||||
|
||||
+ const containerRunner: ContainerRunner = new DockerContainerRunner({dockerClient});
|
||||
+ await containerRunner.runContainer({
|
||||
- await runDockerContainer({
|
||||
image: 'docker',
|
||||
// ...
|
||||
- dockerClient,
|
||||
});
|
||||
```
|
||||
@@ -1,61 +0,0 @@
|
||||
---
|
||||
'@backstage/plugin-techdocs-backend': minor
|
||||
---
|
||||
|
||||
Migrate the plugin to use the `ContainerRunner` interface instead of `runDockerContainer(…)`.
|
||||
It also provides the `ContainerRunner` to the generators instead of to the `createRouter` function.
|
||||
|
||||
To apply this change to an existing backend application, add the following to `src/plugins/techdocs.ts`:
|
||||
|
||||
```diff
|
||||
+ import { DockerContainerRunner } from '@backstage/backend-common';
|
||||
|
||||
// ...
|
||||
|
||||
export default async function createPlugin({
|
||||
logger,
|
||||
config,
|
||||
discovery,
|
||||
reader,
|
||||
}: PluginEnvironment): Promise<Router> {
|
||||
// Preparers are responsible for fetching source files for documentation.
|
||||
const preparers = await Preparers.fromConfig(config, {
|
||||
logger,
|
||||
reader,
|
||||
});
|
||||
|
||||
+ // Docker client (conditionally) used by the generators, based on techdocs.generators config.
|
||||
+ const dockerClient = new Docker();
|
||||
+ const containerRunner = new DockerContainerRunner({ dockerClient });
|
||||
|
||||
// Generators are used for generating documentation sites.
|
||||
const generators = await Generators.fromConfig(config, {
|
||||
logger,
|
||||
+ containerRunner,
|
||||
});
|
||||
|
||||
// Publisher is used for
|
||||
// 1. Publishing generated files to storage
|
||||
// 2. Fetching files from storage and passing them to TechDocs frontend.
|
||||
const publisher = await Publisher.fromConfig(config, {
|
||||
logger,
|
||||
discovery,
|
||||
});
|
||||
|
||||
// checks if the publisher is working and logs the result
|
||||
await publisher.getReadiness();
|
||||
|
||||
- // Docker client (conditionally) used by the generators, based on techdocs.generators config.
|
||||
- const dockerClient = new Docker();
|
||||
|
||||
return await createRouter({
|
||||
preparers,
|
||||
generators,
|
||||
publisher,
|
||||
- dockerClient,
|
||||
logger,
|
||||
config,
|
||||
discovery,
|
||||
});
|
||||
}
|
||||
```
|
||||
@@ -1,10 +0,0 @@
|
||||
---
|
||||
'@backstage/backend-common': patch
|
||||
'@backstage/create-app': patch
|
||||
'@backstage/integration': patch
|
||||
'@backstage/plugin-catalog-import': patch
|
||||
'@backstage/plugin-github-actions': patch
|
||||
'@backstage/plugin-scaffolder-backend': patch
|
||||
---
|
||||
|
||||
The default `@octokit/rest` dependency was bumped to `"^18.5.3"`.
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
'@backstage/cli': patch
|
||||
'@backstage/core': patch
|
||||
---
|
||||
|
||||
Fix some transitive dependency warnings in yarn
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-react': patch
|
||||
---
|
||||
|
||||
Fetch relations in batches in `useRelatedEntities`
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
'@backstage/core': patch
|
||||
'@backstage/plugin-catalog-import': patch
|
||||
---
|
||||
|
||||
Bump react-hook-form version to be the same for the entire project.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder': patch
|
||||
---
|
||||
|
||||
Show error on task page if task does not exist.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-backend': patch
|
||||
---
|
||||
|
||||
Expose `BitbucketRepositoryParser` introduced in [#5295](https://github.com/backstage/backstage/pull/5295)
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/theme': patch
|
||||
---
|
||||
|
||||
Remove extra bottom padding in InfoCard content
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/cli': patch
|
||||
---
|
||||
|
||||
Added lax option to backstage-cli app:build command
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder-backend': patch
|
||||
---
|
||||
|
||||
Fix GithubPR built-in action `credentialsProvider.getCredentials` URL.
|
||||
Adding Documentation for GitHub PR built-in action.
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
'@backstage/plugin-kubernetes': patch
|
||||
'@backstage/plugin-kubernetes-backend': patch
|
||||
---
|
||||
|
||||
Adds @backstage/plugin-kubernetes-common library to share types between kubernetes frontend and backend.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder-backend': patch
|
||||
---
|
||||
|
||||
bump `jsonschema` from 1.2.7 to 1.4.0
|
||||
@@ -1,27 +0,0 @@
|
||||
---
|
||||
'@backstage/techdocs-common': minor
|
||||
---
|
||||
|
||||
Migrate the package to use the `ContainerRunner` interface instead of `runDockerContainer(…)`.
|
||||
It also no longer provides the `ContainerRunner` as an input to the `GeneratorBase#run(…)` function, but expects it as a constructor parameter instead.
|
||||
|
||||
If you use the `TechdocsGenerator` you need to update the usage:
|
||||
|
||||
```diff
|
||||
+ const containerRunner = new DockerContainerRunner({ dockerClient });
|
||||
|
||||
- const generator = new TechdocsGenerator(logger, config);
|
||||
+ const techdocsGenerator = new TechdocsGenerator({
|
||||
+ logger,
|
||||
+ containerRunner,
|
||||
+ config,
|
||||
+ });
|
||||
|
||||
await this.generator.run({
|
||||
inputDir: preparedDir,
|
||||
outputDir,
|
||||
- dockerClient: this.dockerClient,
|
||||
parsedLocationAnnotation,
|
||||
etag: newEtag,
|
||||
});
|
||||
```
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/plugin-tech-radar': patch
|
||||
---
|
||||
|
||||
Update README for composability
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-backend': patch
|
||||
---
|
||||
|
||||
Add support for non-organization accounts in GitHub Discovery
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/plugin-scaffolder': patch
|
||||
---
|
||||
|
||||
Close eventSource upon completion of a scaffolder task
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/plugin-techdocs': patch
|
||||
---
|
||||
|
||||
Fix navigation in a page using the table of contents.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/plugin-techdocs': patch
|
||||
---
|
||||
|
||||
Make git config optional for techdocs feedback links
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/plugin-proxy-backend': patch
|
||||
---
|
||||
|
||||
Prefix proxy routes with `/` if not present in configuration
|
||||
@@ -1,9 +0,0 @@
|
||||
---
|
||||
'@backstage/catalog-model': patch
|
||||
'@backstage/cli': patch
|
||||
'@backstage/config-loader': patch
|
||||
'@backstage/config': patch
|
||||
'@backstage/plugin-scaffolder': patch
|
||||
---
|
||||
|
||||
Bump `json-schema` dependency from `0.2.5` to `0.3.0`.
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
'@backstage/techdocs-common': patch
|
||||
---
|
||||
|
||||
Adding optional config to enable S3-like API for tech-docs using s3ForcePathStyle option.
|
||||
This allows providers like LocalStack, Minio and Wasabi (+possibly others) to be used to host tech docs.
|
||||
@@ -1,5 +0,0 @@
|
||||
---
|
||||
'@backstage/catalog-client': patch
|
||||
---
|
||||
|
||||
Allow `filter` parameter to be specified multiple times
|
||||
@@ -1,115 +0,0 @@
|
||||
---
|
||||
'@backstage/create-app': patch
|
||||
---
|
||||
|
||||
The `scaffolder-backend` and `techdocs-backend` plugins have been updated.
|
||||
In order to update, you need to apply the following changes to your existing backend application:
|
||||
|
||||
`@backstage/plugin-techdocs-backend`:
|
||||
|
||||
```diff
|
||||
// packages/backend/src/plugin/techdocs.ts
|
||||
|
||||
+ import { DockerContainerRunner } from '@backstage/backend-common';
|
||||
|
||||
// ...
|
||||
|
||||
export default async function createPlugin({
|
||||
logger,
|
||||
config,
|
||||
discovery,
|
||||
reader,
|
||||
}: PluginEnvironment): Promise<Router> {
|
||||
// Preparers are responsible for fetching source files for documentation.
|
||||
const preparers = await Preparers.fromConfig(config, {
|
||||
logger,
|
||||
reader,
|
||||
});
|
||||
|
||||
+ // Docker client (conditionally) used by the generators, based on techdocs.generators config.
|
||||
+ const dockerClient = new Docker();
|
||||
+ const containerRunner = new DockerContainerRunner({ dockerClient });
|
||||
|
||||
// Generators are used for generating documentation sites.
|
||||
const generators = await Generators.fromConfig(config, {
|
||||
logger,
|
||||
+ containerRunner,
|
||||
});
|
||||
|
||||
// Publisher is used for
|
||||
// 1. Publishing generated files to storage
|
||||
// 2. Fetching files from storage and passing them to TechDocs frontend.
|
||||
const publisher = await Publisher.fromConfig(config, {
|
||||
logger,
|
||||
discovery,
|
||||
});
|
||||
|
||||
// checks if the publisher is working and logs the result
|
||||
await publisher.getReadiness();
|
||||
|
||||
- // Docker client (conditionally) used by the generators, based on techdocs.generators config.
|
||||
- const dockerClient = new Docker();
|
||||
|
||||
return await createRouter({
|
||||
preparers,
|
||||
generators,
|
||||
publisher,
|
||||
- dockerClient,
|
||||
logger,
|
||||
config,
|
||||
discovery,
|
||||
});
|
||||
}
|
||||
```
|
||||
|
||||
`@backstage/plugin-scaffolder-backend`:
|
||||
|
||||
```diff
|
||||
// packages/backend/src/plugin/scaffolder.ts
|
||||
|
||||
- import { SingleHostDiscovery } from '@backstage/backend-common';
|
||||
+ import {
|
||||
+ DockerContainerRunner,
|
||||
+ SingleHostDiscovery,
|
||||
+ } from '@backstage/backend-common';
|
||||
|
||||
|
||||
export default async function createPlugin({
|
||||
logger,
|
||||
config,
|
||||
database,
|
||||
reader,
|
||||
}: PluginEnvironment): Promise<Router> {
|
||||
+ const dockerClient = new Docker();
|
||||
+ const containerRunner = new DockerContainerRunner({ dockerClient });
|
||||
|
||||
+ const cookiecutterTemplater = new CookieCutter({ containerRunner });
|
||||
- const cookiecutterTemplater = new CookieCutter();
|
||||
+ const craTemplater = new CreateReactAppTemplater({ containerRunner });
|
||||
- const craTemplater = new CreateReactAppTemplater();
|
||||
const templaters = new Templaters();
|
||||
|
||||
templaters.register('cookiecutter', cookiecutterTemplater);
|
||||
templaters.register('cra', craTemplater);
|
||||
|
||||
const preparers = await Preparers.fromConfig(config, { logger });
|
||||
const publishers = await Publishers.fromConfig(config, { logger });
|
||||
|
||||
- const dockerClient = new Docker();
|
||||
|
||||
const discovery = SingleHostDiscovery.fromConfig(config);
|
||||
const catalogClient = new CatalogClient({ discoveryApi: discovery });
|
||||
|
||||
return await createRouter({
|
||||
preparers,
|
||||
templaters,
|
||||
publishers,
|
||||
logger,
|
||||
config,
|
||||
- dockerClient,
|
||||
database,
|
||||
catalogClient,
|
||||
reader,
|
||||
});
|
||||
}
|
||||
```
|
||||
@@ -1,5 +1,36 @@
|
||||
# example-app
|
||||
|
||||
## 0.2.27
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [6f1b82b14]
|
||||
- Updated dependencies [38ca05168]
|
||||
- Updated dependencies [f65adcde7]
|
||||
- Updated dependencies [81c54d1f2]
|
||||
- Updated dependencies [80888659b]
|
||||
- Updated dependencies [7b8272fb7]
|
||||
- Updated dependencies [8aedbb4af]
|
||||
- Updated dependencies [fc79a6dd3]
|
||||
- Updated dependencies [f53fba29f]
|
||||
- Updated dependencies [b2e2ec753]
|
||||
- Updated dependencies [9314a8592]
|
||||
- Updated dependencies [2e05277e0]
|
||||
- Updated dependencies [4075c6367]
|
||||
- Updated dependencies [d8b81fd28]
|
||||
- @backstage/plugin-cost-insights@0.9.0
|
||||
- @backstage/plugin-catalog-import@0.5.5
|
||||
- @backstage/plugin-github-actions@0.4.5
|
||||
- @backstage/cli@0.6.10
|
||||
- @backstage/core@0.7.8
|
||||
- @backstage/plugin-catalog-react@0.1.5
|
||||
- @backstage/theme@0.2.7
|
||||
- @backstage/plugin-kubernetes@0.4.3
|
||||
- @backstage/plugin-tech-radar@0.3.10
|
||||
- @backstage/plugin-scaffolder@0.9.3
|
||||
- @backstage/plugin-techdocs@0.9.1
|
||||
- @backstage/catalog-model@0.7.8
|
||||
|
||||
## 0.2.26
|
||||
|
||||
### Patch Changes
|
||||
|
||||
+13
-13
@@ -1,42 +1,42 @@
|
||||
{
|
||||
"name": "example-app",
|
||||
"version": "0.2.26",
|
||||
"version": "0.2.27",
|
||||
"private": true,
|
||||
"bundled": true,
|
||||
"dependencies": {
|
||||
"@backstage/catalog-model": "^0.7.7",
|
||||
"@backstage/cli": "^0.6.9",
|
||||
"@backstage/core": "^0.7.7",
|
||||
"@backstage/catalog-model": "^0.7.8",
|
||||
"@backstage/cli": "^0.6.10",
|
||||
"@backstage/core": "^0.7.8",
|
||||
"@backstage/integration-react": "^0.1.1",
|
||||
"@backstage/plugin-api-docs": "^0.4.12",
|
||||
"@backstage/plugin-badges": "^0.2.0",
|
||||
"@backstage/plugin-catalog": "^0.5.6",
|
||||
"@backstage/plugin-catalog-import": "^0.5.4",
|
||||
"@backstage/plugin-catalog-react": "^0.1.3",
|
||||
"@backstage/plugin-catalog-import": "^0.5.5",
|
||||
"@backstage/plugin-catalog-react": "^0.1.5",
|
||||
"@backstage/plugin-circleci": "^0.2.13",
|
||||
"@backstage/plugin-cloudbuild": "^0.2.13",
|
||||
"@backstage/plugin-code-coverage": "^0.1.2",
|
||||
"@backstage/plugin-cost-insights": "^0.8.5",
|
||||
"@backstage/plugin-cost-insights": "^0.9.0",
|
||||
"@backstage/plugin-explore": "^0.3.4",
|
||||
"@backstage/plugin-gcp-projects": "^0.2.5",
|
||||
"@backstage/plugin-github-actions": "^0.4.4",
|
||||
"@backstage/plugin-github-actions": "^0.4.5",
|
||||
"@backstage/plugin-graphiql": "^0.2.10",
|
||||
"@backstage/plugin-jenkins": "^0.4.2",
|
||||
"@backstage/plugin-kafka": "^0.2.6",
|
||||
"@backstage/plugin-kubernetes": "^0.4.2",
|
||||
"@backstage/plugin-kubernetes": "^0.4.3",
|
||||
"@backstage/plugin-lighthouse": "^0.2.15",
|
||||
"@backstage/plugin-newrelic": "^0.2.6",
|
||||
"@backstage/plugin-org": "^0.3.12",
|
||||
"@backstage/plugin-pagerduty": "0.3.3",
|
||||
"@backstage/plugin-rollbar": "^0.3.4",
|
||||
"@backstage/plugin-scaffolder": "^0.9.2",
|
||||
"@backstage/plugin-scaffolder": "^0.9.3",
|
||||
"@backstage/plugin-search": "^0.3.5",
|
||||
"@backstage/plugin-sentry": "^0.3.9",
|
||||
"@backstage/plugin-tech-radar": "^0.3.9",
|
||||
"@backstage/plugin-techdocs": "^0.9.0",
|
||||
"@backstage/plugin-tech-radar": "^0.3.10",
|
||||
"@backstage/plugin-techdocs": "^0.9.1",
|
||||
"@backstage/plugin-todo": "^0.1.0",
|
||||
"@backstage/plugin-user-settings": "^0.2.8",
|
||||
"@backstage/theme": "^0.2.6",
|
||||
"@backstage/theme": "^0.2.7",
|
||||
"@material-ui/core": "^4.11.0",
|
||||
"@material-ui/icons": "^4.9.1",
|
||||
"@octokit/rest": "^18.5.3",
|
||||
|
||||
@@ -1,5 +1,73 @@
|
||||
# @backstage/backend-common
|
||||
|
||||
## 0.7.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- e0bfd3d44: Refactor the `runDockerContainer(…)` function to an interface-based api.
|
||||
This gives the option to replace the docker runtime in the future.
|
||||
|
||||
Packages and plugins that previously used the `dockerode` as argument should be migrated to use the new `ContainerRunner` interface instead.
|
||||
|
||||
```diff
|
||||
import {
|
||||
- runDockerContainer,
|
||||
+ ContainerRunner,
|
||||
PluginEndpointDiscovery,
|
||||
} from '@backstage/backend-common';
|
||||
- import Docker from 'dockerode';
|
||||
|
||||
type RouterOptions = {
|
||||
// ...
|
||||
- dockerClient: Docker,
|
||||
+ containerRunner: ContainerRunner;
|
||||
};
|
||||
|
||||
export async function createRouter({
|
||||
// ...
|
||||
- dockerClient,
|
||||
+ containerRunner,
|
||||
}: RouterOptions): Promise<express.Router> {
|
||||
// ...
|
||||
|
||||
+ await containerRunner.runContainer({
|
||||
- await runDockerContainer({
|
||||
image: 'docker',
|
||||
// ...
|
||||
- dockerClient,
|
||||
});
|
||||
|
||||
// ...
|
||||
}
|
||||
```
|
||||
|
||||
To keep the `dockerode` based runtime, use the `DockerContainerRunner` implementation:
|
||||
|
||||
```diff
|
||||
+ import {
|
||||
+ ContainerRunner,
|
||||
+ DockerContainerRunner
|
||||
+ } from '@backstage/backend-common';
|
||||
- import { runDockerContainer } from '@backstage/backend-common';
|
||||
|
||||
+ const containerRunner: ContainerRunner = new DockerContainerRunner({dockerClient});
|
||||
+ await containerRunner.runContainer({
|
||||
- await runDockerContainer({
|
||||
image: 'docker',
|
||||
// ...
|
||||
- dockerClient,
|
||||
});
|
||||
```
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 38ca05168: The default `@octokit/rest` dependency was bumped to `"^18.5.3"`.
|
||||
- Updated dependencies [38ca05168]
|
||||
- Updated dependencies [d8b81fd28]
|
||||
- @backstage/integration@0.5.2
|
||||
- @backstage/config-loader@0.6.1
|
||||
- @backstage/config@0.1.5
|
||||
|
||||
## 0.6.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/backend-common",
|
||||
"description": "Common functionality library for Backstage backends",
|
||||
"version": "0.6.3",
|
||||
"version": "0.7.0",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"private": false,
|
||||
@@ -30,10 +30,10 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/cli-common": "^0.1.1",
|
||||
"@backstage/config": "^0.1.4",
|
||||
"@backstage/config-loader": "^0.6.0",
|
||||
"@backstage/config": "^0.1.5",
|
||||
"@backstage/config-loader": "^0.6.1",
|
||||
"@backstage/errors": "^0.1.1",
|
||||
"@backstage/integration": "^0.5.1",
|
||||
"@backstage/integration": "^0.5.2",
|
||||
"@google-cloud/storage": "^5.8.0",
|
||||
"@octokit/rest": "^18.5.3",
|
||||
"@types/cors": "^2.8.6",
|
||||
@@ -73,7 +73,7 @@
|
||||
}
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.6.9",
|
||||
"@backstage/cli": "^0.6.10",
|
||||
"@backstage/test-utils": "^0.1.10",
|
||||
"@types/archiver": "^5.1.0",
|
||||
"@types/compression": "^1.7.0",
|
||||
|
||||
@@ -1,5 +1,41 @@
|
||||
# example-backend
|
||||
|
||||
## 0.2.27
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [e0bfd3d44]
|
||||
- Updated dependencies [e0bfd3d44]
|
||||
- Updated dependencies [e0bfd3d44]
|
||||
- Updated dependencies [38ca05168]
|
||||
- Updated dependencies [b219821a0]
|
||||
- Updated dependencies [69eefb5ae]
|
||||
- Updated dependencies [f53fba29f]
|
||||
- Updated dependencies [75c8cec39]
|
||||
- Updated dependencies [227439a72]
|
||||
- Updated dependencies [cdb3426e5]
|
||||
- Updated dependencies [d8b81fd28]
|
||||
- Updated dependencies [d1b1306d9]
|
||||
- @backstage/plugin-scaffolder-backend@0.11.0
|
||||
- @backstage/backend-common@0.7.0
|
||||
- @backstage/plugin-techdocs-backend@0.8.0
|
||||
- @backstage/plugin-catalog-backend@0.8.2
|
||||
- @backstage/plugin-kubernetes-backend@0.3.6
|
||||
- @backstage/plugin-proxy-backend@0.2.7
|
||||
- @backstage/catalog-model@0.7.8
|
||||
- @backstage/config@0.1.5
|
||||
- @backstage/catalog-client@0.3.11
|
||||
- example-app@0.2.27
|
||||
- @backstage/plugin-app-backend@0.3.12
|
||||
- @backstage/plugin-auth-backend@0.3.9
|
||||
- @backstage/plugin-badges-backend@0.1.3
|
||||
- @backstage/plugin-code-coverage-backend@0.1.4
|
||||
- @backstage/plugin-graphql-backend@0.1.7
|
||||
- @backstage/plugin-kafka-backend@0.2.4
|
||||
- @backstage/plugin-rollbar-backend@0.1.10
|
||||
- @backstage/plugin-search-backend@0.1.4
|
||||
- @backstage/plugin-todo-backend@0.1.4
|
||||
|
||||
## 0.2.25
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "example-backend",
|
||||
"version": "0.2.25",
|
||||
"version": "0.2.27",
|
||||
"main": "dist/index.cjs.js",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
@@ -27,30 +27,30 @@
|
||||
"migrate:create": "knex migrate:make -x ts"
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/backend-common": "^0.6.3",
|
||||
"@backstage/catalog-client": "^0.3.9",
|
||||
"@backstage/catalog-model": "^0.7.5",
|
||||
"@backstage/config": "^0.1.4",
|
||||
"@backstage/plugin-app-backend": "^0.3.10",
|
||||
"@backstage/plugin-auth-backend": "^0.3.7",
|
||||
"@backstage/plugin-badges-backend": "^0.1.1",
|
||||
"@backstage/plugin-catalog-backend": "^0.8.0",
|
||||
"@backstage/plugin-code-coverage-backend": "^0.1.2",
|
||||
"@backstage/plugin-graphql-backend": "^0.1.6",
|
||||
"@backstage/plugin-kubernetes-backend": "^0.3.5",
|
||||
"@backstage/plugin-kafka-backend": "^0.2.3",
|
||||
"@backstage/plugin-proxy-backend": "^0.2.6",
|
||||
"@backstage/plugin-rollbar-backend": "^0.1.9",
|
||||
"@backstage/plugin-scaffolder-backend": "^0.10.0",
|
||||
"@backstage/plugin-search-backend": "^0.1.3",
|
||||
"@backstage/backend-common": "^0.7.0",
|
||||
"@backstage/catalog-client": "^0.3.11",
|
||||
"@backstage/catalog-model": "^0.7.8",
|
||||
"@backstage/config": "^0.1.5",
|
||||
"@backstage/plugin-app-backend": "^0.3.12",
|
||||
"@backstage/plugin-auth-backend": "^0.3.9",
|
||||
"@backstage/plugin-badges-backend": "^0.1.3",
|
||||
"@backstage/plugin-catalog-backend": "^0.8.2",
|
||||
"@backstage/plugin-code-coverage-backend": "^0.1.4",
|
||||
"@backstage/plugin-graphql-backend": "^0.1.7",
|
||||
"@backstage/plugin-kubernetes-backend": "^0.3.6",
|
||||
"@backstage/plugin-kafka-backend": "^0.2.4",
|
||||
"@backstage/plugin-proxy-backend": "^0.2.7",
|
||||
"@backstage/plugin-rollbar-backend": "^0.1.10",
|
||||
"@backstage/plugin-scaffolder-backend": "^0.11.0",
|
||||
"@backstage/plugin-search-backend": "^0.1.4",
|
||||
"@backstage/plugin-search-backend-node": "^0.1.3",
|
||||
"@backstage/plugin-techdocs-backend": "^0.7.0",
|
||||
"@backstage/plugin-todo-backend": "^0.1.3",
|
||||
"@backstage/plugin-techdocs-backend": "^0.8.0",
|
||||
"@backstage/plugin-todo-backend": "^0.1.4",
|
||||
"@gitbeaker/node": "^28.0.2",
|
||||
"@octokit/rest": "^18.5.3",
|
||||
"azure-devops-node-api": "^10.1.1",
|
||||
"dockerode": "^3.2.1",
|
||||
"example-app": "^0.2.25",
|
||||
"example-app": "^0.2.27",
|
||||
"express": "^4.17.1",
|
||||
"express-promise-router": "^4.1.0",
|
||||
"knex": "^0.95.1",
|
||||
@@ -60,7 +60,7 @@
|
||||
"winston": "^3.2.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.6.9",
|
||||
"@backstage/cli": "^0.6.10",
|
||||
"@types/dockerode": "^3.2.1",
|
||||
"@types/express": "^4.17.6",
|
||||
"@types/express-serve-static-core": "^4.17.5"
|
||||
|
||||
@@ -20,6 +20,7 @@ import {
|
||||
createRouter,
|
||||
NextCatalogBuilder,
|
||||
runPeriodically,
|
||||
createNextRouter,
|
||||
} from '@backstage/plugin-catalog-backend';
|
||||
import { Router } from 'express';
|
||||
import { PluginEnvironment } from '../types';
|
||||
@@ -36,18 +37,18 @@ export default async function createPlugin(
|
||||
const builder = new NextCatalogBuilder(env);
|
||||
const {
|
||||
entitiesCatalog,
|
||||
locationsCatalog,
|
||||
locationAnalyzer,
|
||||
processingEngine,
|
||||
locationService,
|
||||
} = await builder.build();
|
||||
|
||||
// TODO(jhaals): run and manage in background.
|
||||
await processingEngine.start();
|
||||
|
||||
return await createRouter({
|
||||
return await createNextRouter({
|
||||
entitiesCatalog,
|
||||
locationsCatalog,
|
||||
locationAnalyzer,
|
||||
locationService,
|
||||
logger: env.logger,
|
||||
config: env.config,
|
||||
});
|
||||
|
||||
@@ -1,5 +1,14 @@
|
||||
# @backstage/catalog-client
|
||||
|
||||
## 0.3.11
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- d1b1306d9: Allow `filter` parameter to be specified multiple times
|
||||
- Updated dependencies [d8b81fd28]
|
||||
- @backstage/catalog-model@0.7.8
|
||||
- @backstage/config@0.1.5
|
||||
|
||||
## 0.3.10
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/catalog-client",
|
||||
"version": "0.3.10",
|
||||
"version": "0.3.11",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
@@ -29,13 +29,13 @@
|
||||
"clean": "backstage-cli clean"
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/catalog-model": "^0.7.7",
|
||||
"@backstage/config": "^0.1.4",
|
||||
"@backstage/catalog-model": "^0.7.8",
|
||||
"@backstage/config": "^0.1.5",
|
||||
"@backstage/errors": "^0.1.1",
|
||||
"cross-fetch": "^3.0.6"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.6.8",
|
||||
"@backstage/cli": "^0.6.10",
|
||||
"@types/jest": "^26.0.7",
|
||||
"msw": "^0.21.2"
|
||||
},
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
# @backstage/catalog-model
|
||||
|
||||
## 0.7.8
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- d8b81fd28: Bump `json-schema` dependency from `0.2.5` to `0.3.0`.
|
||||
- Updated dependencies [d8b81fd28]
|
||||
- @backstage/config@0.1.5
|
||||
|
||||
## 0.7.7
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/catalog-model",
|
||||
"version": "0.7.7",
|
||||
"version": "0.7.8",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
@@ -29,7 +29,7 @@
|
||||
"clean": "backstage-cli clean"
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/config": "^0.1.3",
|
||||
"@backstage/config": "^0.1.5",
|
||||
"@types/json-schema": "^7.0.5",
|
||||
"@types/yup": "^0.29.8",
|
||||
"ajv": "^7.0.3",
|
||||
@@ -39,7 +39,7 @@
|
||||
"yup": "^0.29.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.6.8",
|
||||
"@backstage/cli": "^0.6.10",
|
||||
"@types/express": "^4.17.6",
|
||||
"@types/jest": "^26.0.7",
|
||||
"@types/lodash": "^4.14.151",
|
||||
|
||||
@@ -1,5 +1,16 @@
|
||||
# @backstage/cli
|
||||
|
||||
## 0.6.10
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- f65adcde7: Fix some transitive dependency warnings in yarn
|
||||
- fc79a6dd3: Added lax option to backstage-cli app:build command
|
||||
- d8b81fd28: Bump `json-schema` dependency from `0.2.5` to `0.3.0`.
|
||||
- Updated dependencies [d8b81fd28]
|
||||
- @backstage/config-loader@0.6.1
|
||||
- @backstage/config@0.1.5
|
||||
|
||||
## 0.6.9
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/cli",
|
||||
"description": "CLI for developing Backstage plugins and apps",
|
||||
"version": "0.6.9",
|
||||
"version": "0.6.10",
|
||||
"private": false,
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
@@ -31,8 +31,8 @@
|
||||
"@babel/core": "^7.4.4",
|
||||
"@babel/plugin-transform-modules-commonjs": "^7.4.4",
|
||||
"@backstage/cli-common": "^0.1.1",
|
||||
"@backstage/config": "^0.1.4",
|
||||
"@backstage/config-loader": "^0.6.0",
|
||||
"@backstage/config": "^0.1.5",
|
||||
"@backstage/config-loader": "^0.6.1",
|
||||
"@hot-loader/react-dom": "^16.13.0",
|
||||
"@lerna/package-graph": "^4.0.0",
|
||||
"@lerna/project": "^4.0.0",
|
||||
@@ -117,12 +117,12 @@
|
||||
"yn": "^4.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/backend-common": "^0.6.3",
|
||||
"@backstage/config": "^0.1.4",
|
||||
"@backstage/core": "^0.7.6",
|
||||
"@backstage/backend-common": "^0.7.0",
|
||||
"@backstage/config": "^0.1.5",
|
||||
"@backstage/core": "^0.7.8",
|
||||
"@backstage/dev-utils": "^0.1.13",
|
||||
"@backstage/test-utils": "^0.1.10",
|
||||
"@backstage/theme": "^0.2.6",
|
||||
"@backstage/theme": "^0.2.7",
|
||||
"@types/diff": "^5.0.0",
|
||||
"@types/express": "^4.17.6",
|
||||
"@types/fs-extra": "^9.0.1",
|
||||
@@ -143,7 +143,7 @@
|
||||
"del": "^5.1.0",
|
||||
"mock-fs": "^4.13.0",
|
||||
"nodemon": "^2.0.2",
|
||||
"ts-node": "^8.6.2"
|
||||
"ts-node": "^9.1.1"
|
||||
},
|
||||
"files": [
|
||||
"asset-types",
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
# @backstage/config-loader
|
||||
|
||||
## 0.6.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- d8b81fd28: Bump `json-schema` dependency from `0.2.5` to `0.3.0`.
|
||||
- Updated dependencies [d8b81fd28]
|
||||
- @backstage/config@0.1.5
|
||||
|
||||
## 0.6.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/config-loader",
|
||||
"description": "Config loading functionality used by Backstage backend, and CLI",
|
||||
"version": "0.6.0",
|
||||
"version": "0.6.1",
|
||||
"private": false,
|
||||
"publishConfig": {
|
||||
"access": "public",
|
||||
@@ -31,7 +31,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/cli-common": "^0.1.1",
|
||||
"@backstage/config": "^0.1.1",
|
||||
"@backstage/config": "^0.1.5",
|
||||
"@types/json-schema": "^7.0.6",
|
||||
"ajv": "^7.0.3",
|
||||
"fs-extra": "^9.0.0",
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
# @backstage/config
|
||||
|
||||
## 0.1.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- d8b81fd28: Bump `json-schema` dependency from `0.2.5` to `0.3.0`.
|
||||
|
||||
## 0.1.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/config",
|
||||
"description": "Config API used by Backstage core, backend, and CLI",
|
||||
"version": "0.1.4",
|
||||
"version": "0.1.5",
|
||||
"private": false,
|
||||
"publishConfig": {
|
||||
"access": "public",
|
||||
|
||||
@@ -1,5 +1,16 @@
|
||||
# @backstage/core
|
||||
|
||||
## 0.7.8
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- f65adcde7: Fix some transitive dependency warnings in yarn
|
||||
- 80888659b: Bump react-hook-form version to be the same for the entire project.
|
||||
- Updated dependencies [7b8272fb7]
|
||||
- Updated dependencies [d8b81fd28]
|
||||
- @backstage/theme@0.2.7
|
||||
- @backstage/config@0.1.5
|
||||
|
||||
## 0.7.7
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/core",
|
||||
"description": "Core API used by Backstage plugins and apps",
|
||||
"version": "0.7.7",
|
||||
"version": "0.7.8",
|
||||
"private": false,
|
||||
"publishConfig": {
|
||||
"access": "public",
|
||||
@@ -29,10 +29,10 @@
|
||||
"clean": "backstage-cli clean"
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/config": "^0.1.4",
|
||||
"@backstage/config": "^0.1.5",
|
||||
"@backstage/core-api": "^0.2.17",
|
||||
"@backstage/errors": "^0.1.1",
|
||||
"@backstage/theme": "^0.2.6",
|
||||
"@backstage/theme": "^0.2.7",
|
||||
"@material-ui/core": "^4.11.0",
|
||||
"@material-ui/icons": "^4.9.1",
|
||||
"@material-ui/lab": "4.0.0-alpha.45",
|
||||
@@ -70,7 +70,7 @@
|
||||
"zen-observable": "^0.8.15"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.6.9",
|
||||
"@backstage/cli": "^0.6.10",
|
||||
"@backstage/test-utils": "^0.1.10",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
"@testing-library/react": "^11.2.5",
|
||||
|
||||
@@ -1,5 +1,162 @@
|
||||
# @backstage/create-app
|
||||
|
||||
## 0.3.21
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 38ca05168: The default `@octokit/rest` dependency was bumped to `"^18.5.3"`.
|
||||
- e0bfd3d44: The `scaffolder-backend` and `techdocs-backend` plugins have been updated.
|
||||
In order to update, you need to apply the following changes to your existing backend application:
|
||||
|
||||
`@backstage/plugin-techdocs-backend`:
|
||||
|
||||
```diff
|
||||
// packages/backend/src/plugin/techdocs.ts
|
||||
|
||||
+ import { DockerContainerRunner } from '@backstage/backend-common';
|
||||
|
||||
// ...
|
||||
|
||||
export default async function createPlugin({
|
||||
logger,
|
||||
config,
|
||||
discovery,
|
||||
reader,
|
||||
}: PluginEnvironment): Promise<Router> {
|
||||
// Preparers are responsible for fetching source files for documentation.
|
||||
const preparers = await Preparers.fromConfig(config, {
|
||||
logger,
|
||||
reader,
|
||||
});
|
||||
|
||||
+ // Docker client (conditionally) used by the generators, based on techdocs.generators config.
|
||||
+ const dockerClient = new Docker();
|
||||
+ const containerRunner = new DockerContainerRunner({ dockerClient });
|
||||
|
||||
// Generators are used for generating documentation sites.
|
||||
const generators = await Generators.fromConfig(config, {
|
||||
logger,
|
||||
+ containerRunner,
|
||||
});
|
||||
|
||||
// Publisher is used for
|
||||
// 1. Publishing generated files to storage
|
||||
// 2. Fetching files from storage and passing them to TechDocs frontend.
|
||||
const publisher = await Publisher.fromConfig(config, {
|
||||
logger,
|
||||
discovery,
|
||||
});
|
||||
|
||||
// checks if the publisher is working and logs the result
|
||||
await publisher.getReadiness();
|
||||
|
||||
- // Docker client (conditionally) used by the generators, based on techdocs.generators config.
|
||||
- const dockerClient = new Docker();
|
||||
|
||||
return await createRouter({
|
||||
preparers,
|
||||
generators,
|
||||
publisher,
|
||||
- dockerClient,
|
||||
logger,
|
||||
config,
|
||||
discovery,
|
||||
});
|
||||
}
|
||||
```
|
||||
|
||||
`@backstage/plugin-scaffolder-backend`:
|
||||
|
||||
```diff
|
||||
// packages/backend/src/plugin/scaffolder.ts
|
||||
|
||||
- import { SingleHostDiscovery } from '@backstage/backend-common';
|
||||
+ import {
|
||||
+ DockerContainerRunner,
|
||||
+ SingleHostDiscovery,
|
||||
+ } from '@backstage/backend-common';
|
||||
|
||||
|
||||
export default async function createPlugin({
|
||||
logger,
|
||||
config,
|
||||
database,
|
||||
reader,
|
||||
}: PluginEnvironment): Promise<Router> {
|
||||
+ const dockerClient = new Docker();
|
||||
+ const containerRunner = new DockerContainerRunner({ dockerClient });
|
||||
|
||||
+ const cookiecutterTemplater = new CookieCutter({ containerRunner });
|
||||
- const cookiecutterTemplater = new CookieCutter();
|
||||
+ const craTemplater = new CreateReactAppTemplater({ containerRunner });
|
||||
- const craTemplater = new CreateReactAppTemplater();
|
||||
const templaters = new Templaters();
|
||||
|
||||
templaters.register('cookiecutter', cookiecutterTemplater);
|
||||
templaters.register('cra', craTemplater);
|
||||
|
||||
const preparers = await Preparers.fromConfig(config, { logger });
|
||||
const publishers = await Publishers.fromConfig(config, { logger });
|
||||
|
||||
- const dockerClient = new Docker();
|
||||
|
||||
const discovery = SingleHostDiscovery.fromConfig(config);
|
||||
const catalogClient = new CatalogClient({ discoveryApi: discovery });
|
||||
|
||||
return await createRouter({
|
||||
preparers,
|
||||
templaters,
|
||||
publishers,
|
||||
logger,
|
||||
config,
|
||||
- dockerClient,
|
||||
database,
|
||||
catalogClient,
|
||||
reader,
|
||||
});
|
||||
}
|
||||
```
|
||||
|
||||
- Updated dependencies [e0bfd3d44]
|
||||
- Updated dependencies [e0bfd3d44]
|
||||
- Updated dependencies [e0bfd3d44]
|
||||
- Updated dependencies [38ca05168]
|
||||
- Updated dependencies [f65adcde7]
|
||||
- Updated dependencies [80888659b]
|
||||
- Updated dependencies [b219821a0]
|
||||
- Updated dependencies [7b8272fb7]
|
||||
- Updated dependencies [8aedbb4af]
|
||||
- Updated dependencies [fc79a6dd3]
|
||||
- Updated dependencies [69eefb5ae]
|
||||
- Updated dependencies [75c8cec39]
|
||||
- Updated dependencies [b2e2ec753]
|
||||
- Updated dependencies [227439a72]
|
||||
- Updated dependencies [9314a8592]
|
||||
- Updated dependencies [2e05277e0]
|
||||
- Updated dependencies [4075c6367]
|
||||
- Updated dependencies [cdb3426e5]
|
||||
- Updated dependencies [d8b81fd28]
|
||||
- Updated dependencies [d1b1306d9]
|
||||
- @backstage/plugin-scaffolder-backend@0.11.0
|
||||
- @backstage/backend-common@0.7.0
|
||||
- @backstage/plugin-techdocs-backend@0.8.0
|
||||
- @backstage/plugin-catalog-import@0.5.5
|
||||
- @backstage/plugin-github-actions@0.4.5
|
||||
- @backstage/cli@0.6.10
|
||||
- @backstage/core@0.7.8
|
||||
- @backstage/plugin-catalog-backend@0.8.2
|
||||
- @backstage/theme@0.2.7
|
||||
- @backstage/plugin-tech-radar@0.3.10
|
||||
- @backstage/plugin-scaffolder@0.9.3
|
||||
- @backstage/plugin-techdocs@0.9.1
|
||||
- @backstage/plugin-proxy-backend@0.2.7
|
||||
- @backstage/catalog-model@0.7.8
|
||||
- @backstage/config@0.1.5
|
||||
- @backstage/catalog-client@0.3.11
|
||||
- @backstage/plugin-app-backend@0.3.12
|
||||
- @backstage/plugin-auth-backend@0.3.9
|
||||
- @backstage/plugin-rollbar-backend@0.1.10
|
||||
|
||||
## 0.3.20
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/create-app",
|
||||
"description": "Create app package for Backstage",
|
||||
"version": "0.3.20",
|
||||
"version": "0.3.21",
|
||||
"private": false,
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
@@ -41,7 +41,7 @@
|
||||
"@types/inquirer": "^7.3.1",
|
||||
"@types/react-dev-utils": "^9.0.4",
|
||||
"@types/recursive-readdir": "^2.2.0",
|
||||
"ts-node": "^8.6.2"
|
||||
"ts-node": "^9.1.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@backstage/backend-common": "*",
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
"commander": "^6.1.0",
|
||||
"fs-extra": "^9.0.0",
|
||||
"github-slugger": "^1.3.0",
|
||||
"ts-node": "^8.6.2",
|
||||
"ts-node": "^9.1.1",
|
||||
"typescript": "^4.0.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
"handlebars": "^4.7.3",
|
||||
"pgtools": "^0.3.0",
|
||||
"tree-kill": "^1.2.2",
|
||||
"ts-node": "^8.6.2",
|
||||
"ts-node": "^9.1.1",
|
||||
"zombie": "^6.1.4"
|
||||
},
|
||||
"nodemonConfig": {
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
# @backstage/integration
|
||||
|
||||
## 0.5.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 38ca05168: The default `@octokit/rest` dependency was bumped to `"^18.5.3"`.
|
||||
- Updated dependencies [d8b81fd28]
|
||||
- @backstage/config@0.1.5
|
||||
|
||||
## 0.5.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/integration",
|
||||
"version": "0.5.1",
|
||||
"version": "0.5.2",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
@@ -29,7 +29,7 @@
|
||||
"clean": "backstage-cli clean"
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/config": "^0.1.2",
|
||||
"@backstage/config": "^0.1.5",
|
||||
"cross-fetch": "^3.0.6",
|
||||
"git-url-parse": "^11.4.4",
|
||||
"@octokit/rest": "^18.5.3",
|
||||
@@ -37,8 +37,8 @@
|
||||
"luxon": "^1.25.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.6.7",
|
||||
"@backstage/config-loader": "^0.6.0",
|
||||
"@backstage/cli": "^0.6.10",
|
||||
"@backstage/config-loader": "^0.6.1",
|
||||
"@backstage/test-utils": "^0.1.10",
|
||||
"@types/jest": "^26.0.7",
|
||||
"@types/luxon": "^1.25.0",
|
||||
|
||||
@@ -1,5 +1,45 @@
|
||||
# @backstage/techdocs-common
|
||||
|
||||
## 0.6.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- e0bfd3d44: Migrate the package to use the `ContainerRunner` interface instead of `runDockerContainer(…)`.
|
||||
It also no longer provides the `ContainerRunner` as an input to the `GeneratorBase#run(…)` function, but expects it as a constructor parameter instead.
|
||||
|
||||
If you use the `TechdocsGenerator` you need to update the usage:
|
||||
|
||||
```diff
|
||||
+ const containerRunner = new DockerContainerRunner({ dockerClient });
|
||||
|
||||
- const generator = new TechdocsGenerator(logger, config);
|
||||
+ const techdocsGenerator = new TechdocsGenerator({
|
||||
+ logger,
|
||||
+ containerRunner,
|
||||
+ config,
|
||||
+ });
|
||||
|
||||
await this.generator.run({
|
||||
inputDir: preparedDir,
|
||||
outputDir,
|
||||
- dockerClient: this.dockerClient,
|
||||
parsedLocationAnnotation,
|
||||
etag: newEtag,
|
||||
});
|
||||
```
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- e9e56b01a: Adding optional config to enable S3-like API for tech-docs using s3ForcePathStyle option.
|
||||
This allows providers like LocalStack, Minio and Wasabi (+possibly others) to be used to host tech docs.
|
||||
- Updated dependencies [e0bfd3d44]
|
||||
- Updated dependencies [38ca05168]
|
||||
- Updated dependencies [d8b81fd28]
|
||||
- @backstage/backend-common@0.7.0
|
||||
- @backstage/integration@0.5.2
|
||||
- @backstage/catalog-model@0.7.8
|
||||
- @backstage/config@0.1.5
|
||||
|
||||
## 0.5.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/techdocs-common",
|
||||
"description": "Common functionalities for TechDocs, to be shared between techdocs-backend plugin and techdocs-cli",
|
||||
"version": "0.5.1",
|
||||
"version": "0.6.0",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"private": false,
|
||||
@@ -38,11 +38,11 @@
|
||||
"dependencies": {
|
||||
"@azure/identity": "^1.2.2",
|
||||
"@azure/storage-blob": "^12.4.0",
|
||||
"@backstage/backend-common": "^0.6.0",
|
||||
"@backstage/catalog-model": "^0.7.7",
|
||||
"@backstage/config": "^0.1.4",
|
||||
"@backstage/backend-common": "^0.7.0",
|
||||
"@backstage/catalog-model": "^0.7.8",
|
||||
"@backstage/config": "^0.1.5",
|
||||
"@backstage/errors": "^0.1.1",
|
||||
"@backstage/integration": "^0.5.1",
|
||||
"@backstage/integration": "^0.5.2",
|
||||
"@google-cloud/storage": "^5.6.0",
|
||||
"@types/express": "^4.17.6",
|
||||
"aws-sdk": "^2.840.0",
|
||||
@@ -60,7 +60,7 @@
|
||||
"winston": "^3.2.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.6.8",
|
||||
"@backstage/cli": "^0.6.10",
|
||||
"@types/fs-extra": "^9.0.5",
|
||||
"@types/git-url-parse": "^9.0.0",
|
||||
"@types/js-yaml": "^4.0.0",
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
# @backstage/theme
|
||||
|
||||
## 0.2.7
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 7b8272fb7: Remove extra bottom padding in InfoCard content
|
||||
|
||||
## 0.2.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@backstage/theme",
|
||||
"description": "material-ui theme for use with Backstage.",
|
||||
"version": "0.2.6",
|
||||
"version": "0.2.7",
|
||||
"private": false,
|
||||
"publishConfig": {
|
||||
"access": "public",
|
||||
@@ -31,7 +31,7 @@
|
||||
"@material-ui/core": "^4.11.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.6.9"
|
||||
"@backstage/cli": "^0.6.10"
|
||||
},
|
||||
"files": [
|
||||
"dist"
|
||||
|
||||
@@ -31,9 +31,9 @@
|
||||
"dependencies": {
|
||||
"@asyncapi/react-component": "^0.23.0",
|
||||
"@backstage/catalog-model": "^0.7.7",
|
||||
"@backstage/core": "^0.7.7",
|
||||
"@backstage/core": "^0.7.8",
|
||||
"@backstage/plugin-catalog-react": "^0.1.4",
|
||||
"@backstage/theme": "^0.2.6",
|
||||
"@backstage/theme": "^0.2.7",
|
||||
"@material-icons/font": "^1.0.2",
|
||||
"@material-ui/core": "^4.11.0",
|
||||
"@material-ui/icons": "^4.9.1",
|
||||
@@ -49,7 +49,7 @@
|
||||
"swagger-ui-react": "^3.37.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.6.9",
|
||||
"@backstage/cli": "^0.6.10",
|
||||
"@backstage/dev-utils": "^0.1.13",
|
||||
"@backstage/test-utils": "^0.1.10",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
|
||||
@@ -1,5 +1,16 @@
|
||||
# @backstage/plugin-app-backend
|
||||
|
||||
## 0.3.12
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [e0bfd3d44]
|
||||
- Updated dependencies [38ca05168]
|
||||
- Updated dependencies [d8b81fd28]
|
||||
- @backstage/backend-common@0.7.0
|
||||
- @backstage/config-loader@0.6.1
|
||||
- @backstage/config@0.1.5
|
||||
|
||||
## 0.3.11
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/plugin-app-backend",
|
||||
"version": "0.3.11",
|
||||
"version": "0.3.12",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
@@ -29,9 +29,9 @@
|
||||
"clean": "backstage-cli clean"
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/backend-common": "^0.6.2",
|
||||
"@backstage/config-loader": "^0.6.0",
|
||||
"@backstage/config": "^0.1.4",
|
||||
"@backstage/backend-common": "^0.7.0",
|
||||
"@backstage/config-loader": "^0.6.1",
|
||||
"@backstage/config": "^0.1.5",
|
||||
"@types/express": "^4.17.6",
|
||||
"express": "^4.17.1",
|
||||
"express-promise-router": "^4.1.0",
|
||||
@@ -40,7 +40,7 @@
|
||||
"yn": "^4.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.6.7",
|
||||
"@backstage/cli": "^0.6.10",
|
||||
"@types/supertest": "^2.0.8",
|
||||
"msw": "^0.20.5",
|
||||
"supertest": "^6.1.3"
|
||||
|
||||
@@ -1,5 +1,18 @@
|
||||
# @backstage/plugin-auth-backend
|
||||
|
||||
## 0.3.9
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [e0bfd3d44]
|
||||
- Updated dependencies [38ca05168]
|
||||
- Updated dependencies [d8b81fd28]
|
||||
- Updated dependencies [d1b1306d9]
|
||||
- @backstage/backend-common@0.7.0
|
||||
- @backstage/catalog-model@0.7.8
|
||||
- @backstage/config@0.1.5
|
||||
- @backstage/catalog-client@0.3.11
|
||||
|
||||
## 0.3.8
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/plugin-auth-backend",
|
||||
"version": "0.3.8",
|
||||
"version": "0.3.9",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
@@ -29,10 +29,10 @@
|
||||
"clean": "backstage-cli clean"
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/backend-common": "^0.6.2",
|
||||
"@backstage/catalog-client": "^0.3.9",
|
||||
"@backstage/catalog-model": "^0.7.6",
|
||||
"@backstage/config": "^0.1.4",
|
||||
"@backstage/backend-common": "^0.7.0",
|
||||
"@backstage/catalog-client": "^0.3.11",
|
||||
"@backstage/catalog-model": "^0.7.8",
|
||||
"@backstage/config": "^0.1.5",
|
||||
"@backstage/errors": "^0.1.1",
|
||||
"@backstage/test-utils": "^0.1.10",
|
||||
"@types/express": "^4.17.6",
|
||||
@@ -68,7 +68,7 @@
|
||||
"yn": "^4.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.6.7",
|
||||
"@backstage/cli": "^0.6.10",
|
||||
"@types/body-parser": "^1.19.0",
|
||||
"@types/cookie-parser": "^1.4.2",
|
||||
"@types/express-session": "^1.17.2",
|
||||
|
||||
@@ -1,5 +1,18 @@
|
||||
# @backstage/plugin-badges-backend
|
||||
|
||||
## 0.1.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [e0bfd3d44]
|
||||
- Updated dependencies [38ca05168]
|
||||
- Updated dependencies [d8b81fd28]
|
||||
- Updated dependencies [d1b1306d9]
|
||||
- @backstage/backend-common@0.7.0
|
||||
- @backstage/catalog-model@0.7.8
|
||||
- @backstage/config@0.1.5
|
||||
- @backstage/catalog-client@0.3.11
|
||||
|
||||
## 0.1.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/plugin-badges-backend",
|
||||
"version": "0.1.2",
|
||||
"version": "0.1.3",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
@@ -30,10 +30,10 @@
|
||||
"clean": "backstage-cli clean"
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/backend-common": "^0.6.2",
|
||||
"@backstage/catalog-client": "^0.3.6",
|
||||
"@backstage/catalog-model": "^0.7.6",
|
||||
"@backstage/config": "^0.1.3",
|
||||
"@backstage/backend-common": "^0.7.0",
|
||||
"@backstage/catalog-client": "^0.3.11",
|
||||
"@backstage/catalog-model": "^0.7.8",
|
||||
"@backstage/config": "^0.1.5",
|
||||
"@backstage/errors": "^0.1.1",
|
||||
"@types/express": "^4.17.6",
|
||||
"badge-maker": "^3.3.0",
|
||||
@@ -45,7 +45,7 @@
|
||||
"yn": "^4.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.6.7",
|
||||
"@backstage/cli": "^0.6.10",
|
||||
"@types/supertest": "^2.0.8",
|
||||
"supertest": "^6.1.3"
|
||||
},
|
||||
|
||||
@@ -21,10 +21,10 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/catalog-model": "^0.7.6",
|
||||
"@backstage/core": "^0.7.7",
|
||||
"@backstage/core": "^0.7.8",
|
||||
"@backstage/errors": "^0.1.1",
|
||||
"@backstage/plugin-catalog-react": "^0.1.3",
|
||||
"@backstage/theme": "^0.2.6",
|
||||
"@backstage/theme": "^0.2.7",
|
||||
"@material-ui/core": "^4.11.0",
|
||||
"@material-ui/icons": "^4.9.1",
|
||||
"@material-ui/lab": "4.0.0-alpha.45",
|
||||
@@ -34,7 +34,7 @@
|
||||
"react-use": "^15.3.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.6.9",
|
||||
"@backstage/cli": "^0.6.10",
|
||||
"@backstage/dev-utils": "^0.1.13",
|
||||
"@backstage/test-utils": "^0.1.10",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
|
||||
@@ -21,9 +21,9 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/catalog-model": "^0.7.2",
|
||||
"@backstage/core": "^0.7.7",
|
||||
"@backstage/core": "^0.7.8",
|
||||
"@backstage/plugin-catalog-react": "^0.1.2",
|
||||
"@backstage/theme": "^0.2.6",
|
||||
"@backstage/theme": "^0.2.7",
|
||||
"@material-ui/core": "^4.11.0",
|
||||
"@material-ui/icons": "^4.9.1",
|
||||
"@material-ui/lab": "4.0.0-alpha.45",
|
||||
@@ -37,7 +37,7 @@
|
||||
"recharts": "^1.8.5"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.6.9",
|
||||
"@backstage/cli": "^0.6.10",
|
||||
"@backstage/dev-utils": "^0.1.13",
|
||||
"@backstage/test-utils": "^0.1.10",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
|
||||
@@ -1,5 +1,19 @@
|
||||
# @backstage/plugin-catalog-backend
|
||||
|
||||
## 0.8.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- b219821a0: Expose `BitbucketRepositoryParser` introduced in [#5295](https://github.com/backstage/backstage/pull/5295)
|
||||
- 227439a72: Add support for non-organization accounts in GitHub Discovery
|
||||
- Updated dependencies [e0bfd3d44]
|
||||
- Updated dependencies [38ca05168]
|
||||
- Updated dependencies [d8b81fd28]
|
||||
- @backstage/backend-common@0.7.0
|
||||
- @backstage/integration@0.5.2
|
||||
- @backstage/catalog-model@0.7.8
|
||||
- @backstage/config@0.1.5
|
||||
|
||||
## 0.8.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/plugin-catalog-backend",
|
||||
"version": "0.8.1",
|
||||
"version": "0.8.2",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
@@ -30,11 +30,11 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@azure/msal-node": "^1.0.0-beta.3",
|
||||
"@backstage/backend-common": "^0.6.3",
|
||||
"@backstage/catalog-model": "^0.7.7",
|
||||
"@backstage/config": "^0.1.4",
|
||||
"@backstage/backend-common": "^0.7.0",
|
||||
"@backstage/catalog-model": "^0.7.8",
|
||||
"@backstage/config": "^0.1.5",
|
||||
"@backstage/errors": "^0.1.1",
|
||||
"@backstage/integration": "^0.5.1",
|
||||
"@backstage/integration": "^0.5.2",
|
||||
"@backstage/plugin-search-backend-node": "^0.1.4",
|
||||
"@backstage/search-common": "^0.1.1",
|
||||
"@octokit/graphql": "^4.5.8",
|
||||
@@ -63,7 +63,7 @@
|
||||
"yup": "^0.29.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.6.9",
|
||||
"@backstage/cli": "^0.6.10",
|
||||
"@backstage/test-utils": "^0.1.9",
|
||||
"@types/core-js": "^2.5.4",
|
||||
"@types/git-url-parse": "^9.0.0",
|
||||
|
||||
@@ -97,11 +97,8 @@ export class DefaultCatalogProcessingOrchestrator
|
||||
async process(
|
||||
request: EntityProcessingRequest,
|
||||
): Promise<EntityProcessingResult> {
|
||||
const { entity } = request;
|
||||
|
||||
const result = await this.processSingleEntity(entity);
|
||||
|
||||
return result;
|
||||
// TODO: implement dryRun/eager
|
||||
return this.processSingleEntity(request.entity);
|
||||
}
|
||||
|
||||
private async processSingleEntity(
|
||||
|
||||
@@ -63,11 +63,12 @@ import {
|
||||
} from '../ingestion/processors/PlaceholderProcessor';
|
||||
import { defaultEntityDataParser } from '../ingestion/processors/util/parse';
|
||||
import { LocationAnalyzer } from '../ingestion/types';
|
||||
import { CatalogProcessingEngine } from '../next/types';
|
||||
import { CatalogProcessingEngine, LocationService } from '../next/types';
|
||||
import { ConfigLocationEntityProvider } from './ConfigLocationEntityProvider';
|
||||
import { DefaultProcessingDatabase } from './database/DefaultProcessingDatabase';
|
||||
import { DefaultCatalogProcessingEngine } from './DefaultCatalogProcessingEngine';
|
||||
import { DefaultCatalogProcessingOrchestrator } from './DefaultCatalogProcessingOrchestrator';
|
||||
import { DefaultLocationService } from './DefaultLocationService';
|
||||
import { DefaultLocationStore } from './DefaultLocationStore';
|
||||
import { NextEntitiesCatalog } from './NextEntitiesCatalog';
|
||||
import { Stitcher } from './Stitcher';
|
||||
@@ -233,6 +234,7 @@ export class NextCatalogBuilder {
|
||||
locationsCatalog: LocationsCatalog;
|
||||
locationAnalyzer: LocationAnalyzer;
|
||||
processingEngine: CatalogProcessingEngine;
|
||||
locationService: LocationService;
|
||||
}> {
|
||||
const { config, database, logger } = this.env;
|
||||
|
||||
@@ -274,12 +276,16 @@ export class NextCatalogBuilder {
|
||||
|
||||
const locationsCatalog = new DatabaseLocationsCatalog(db);
|
||||
const locationAnalyzer = new RepoLocationAnalyzer(logger);
|
||||
|
||||
const locationService = new DefaultLocationService(
|
||||
locationStore,
|
||||
orchestrator,
|
||||
);
|
||||
return {
|
||||
entitiesCatalog,
|
||||
locationsCatalog,
|
||||
locationAnalyzer,
|
||||
processingEngine,
|
||||
locationService,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -18,37 +18,128 @@ import { Knex } from 'knex';
|
||||
import { DbFinalEntitiesRow } from './Stitcher';
|
||||
import { EntitiesCatalog } from '../catalog';
|
||||
import { EntitiesRequest, EntitiesResponse } from '../catalog/types';
|
||||
import { DbRefreshStateRow } from './database/DefaultProcessingDatabase';
|
||||
import {
|
||||
DbEntitiesSearchRow,
|
||||
DbPageInfo,
|
||||
EntityPagination,
|
||||
} from '../database/types';
|
||||
import { InputError } from '@backstage/errors';
|
||||
|
||||
function parsePagination(
|
||||
input?: EntityPagination,
|
||||
): { limit?: number; offset?: number } {
|
||||
if (!input) {
|
||||
return {};
|
||||
}
|
||||
|
||||
let { limit, offset } = input;
|
||||
|
||||
if (input.after !== undefined) {
|
||||
let cursor;
|
||||
try {
|
||||
const json = Buffer.from(input.after, 'base64').toString('utf8');
|
||||
cursor = JSON.parse(json);
|
||||
} catch {
|
||||
throw new InputError('Malformed after cursor, could not be parsed');
|
||||
}
|
||||
if (cursor.limit !== undefined) {
|
||||
if (!Number.isInteger(cursor.limit)) {
|
||||
throw new InputError('Malformed after cursor, limit was not an number');
|
||||
}
|
||||
limit = cursor.limit;
|
||||
}
|
||||
if (cursor.offset !== undefined) {
|
||||
if (!Number.isInteger(cursor.offset)) {
|
||||
throw new InputError('Malformed after cursor, offset was not a number');
|
||||
}
|
||||
offset = cursor.offset;
|
||||
}
|
||||
}
|
||||
|
||||
return { limit, offset };
|
||||
}
|
||||
|
||||
function stringifyPagination(input: { limit: number; offset: number }) {
|
||||
const json = JSON.stringify({ limit: input.limit, offset: input.offset });
|
||||
const base64 = Buffer.from(json, 'utf8').toString('base64');
|
||||
return base64;
|
||||
}
|
||||
|
||||
export class NextEntitiesCatalog implements EntitiesCatalog {
|
||||
constructor(private readonly database: Knex) {}
|
||||
|
||||
async entities(request?: EntitiesRequest): Promise<EntitiesResponse> {
|
||||
if (request?.fields) {
|
||||
throw new Error('Fields extraction is not implemented');
|
||||
}
|
||||
if (request?.pagination) {
|
||||
throw new Error('Pagination is not implemented');
|
||||
}
|
||||
if (request?.filter) {
|
||||
throw new Error('Filters are not implemented');
|
||||
const db = this.database;
|
||||
|
||||
let entitiesQuery = db<DbFinalEntitiesRow>('final_entities');
|
||||
|
||||
for (const singleFilter of request?.filter?.anyOf ?? []) {
|
||||
entitiesQuery = entitiesQuery.orWhere(function singleFilterFn() {
|
||||
for (const { key, matchValueIn } of singleFilter.allOf) {
|
||||
// NOTE(freben): This used to be a set of OUTER JOIN, which may seem to
|
||||
// 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<DbEntitiesSearchRow>('search')
|
||||
.select('entity_id')
|
||||
.where(function keyFilter() {
|
||||
this.andWhere({ key: key.toLowerCase() });
|
||||
if (matchValueIn) {
|
||||
if (matchValueIn.length === 1) {
|
||||
this.andWhere({ value: matchValueIn[0].toLowerCase() });
|
||||
} else if (matchValueIn.length > 1) {
|
||||
this.andWhere(
|
||||
'value',
|
||||
'in',
|
||||
matchValueIn.map(v => v.toLowerCase()),
|
||||
);
|
||||
}
|
||||
}
|
||||
});
|
||||
this.andWhere('entity_id', 'in', matchQuery);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
const dbResponse = await this.database<DbFinalEntitiesRow>(
|
||||
'final_entities',
|
||||
).select();
|
||||
// TODO: move final_entities to use entity_Ref
|
||||
entitiesQuery = entitiesQuery
|
||||
.select('final_entities.*')
|
||||
.orderBy('entity_id', 'asc');
|
||||
|
||||
const entities = dbResponse.map(e => JSON.parse(e.final_entity));
|
||||
const { limit, offset } = parsePagination(request?.pagination);
|
||||
if (limit !== undefined) {
|
||||
entitiesQuery = entitiesQuery.limit(limit + 1);
|
||||
}
|
||||
if (offset !== undefined) {
|
||||
entitiesQuery = entitiesQuery.offset(offset);
|
||||
}
|
||||
|
||||
let rows = await entitiesQuery;
|
||||
|
||||
let pageInfo: DbPageInfo;
|
||||
if (limit === undefined || rows.length <= limit) {
|
||||
pageInfo = { hasNextPage: false };
|
||||
} else {
|
||||
rows = rows.slice(0, -1);
|
||||
pageInfo = {
|
||||
hasNextPage: true,
|
||||
endCursor: stringifyPagination({
|
||||
limit,
|
||||
offset: (offset ?? 0) + limit,
|
||||
}),
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
entities,
|
||||
pageInfo: {
|
||||
hasNextPage: false,
|
||||
},
|
||||
entities: rows.map(e => JSON.parse(e.final_entity)),
|
||||
pageInfo,
|
||||
};
|
||||
}
|
||||
|
||||
async removeEntityByUid(_uid: string): Promise<void> {
|
||||
throw new Error('Not implemented');
|
||||
async removeEntityByUid(uid: string): Promise<void> {
|
||||
await this.database<DbRefreshStateRow>('refresh_state')
|
||||
.where('entity_id', uid)
|
||||
.delete();
|
||||
}
|
||||
|
||||
async batchAddOrUpdateEntities(): Promise<never> {
|
||||
|
||||
@@ -0,0 +1,164 @@
|
||||
/*
|
||||
* Copyright 2020 Spotify AB
|
||||
*
|
||||
* 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 { errorHandler } from '@backstage/backend-common';
|
||||
import {
|
||||
analyzeLocationSchema,
|
||||
locationSpecSchema,
|
||||
} from '@backstage/catalog-model';
|
||||
import { Config } from '@backstage/config';
|
||||
import { NotFoundError } from '@backstage/errors';
|
||||
import express from 'express';
|
||||
import Router from 'express-promise-router';
|
||||
import { Logger } from 'winston';
|
||||
import yn from 'yn';
|
||||
import { EntitiesCatalog } from '../catalog';
|
||||
import { LocationAnalyzer } from '../ingestion/types';
|
||||
import {
|
||||
basicEntityFilter,
|
||||
parseEntityFilterParams,
|
||||
parseEntityPaginationParams,
|
||||
parseEntityTransformParams,
|
||||
} from '../service/request';
|
||||
import { LocationService } from './types';
|
||||
import { disallowReadonlyMode, validateRequestBody } from '../service/util';
|
||||
|
||||
export interface RouterOptions {
|
||||
entitiesCatalog?: EntitiesCatalog;
|
||||
locationAnalyzer?: LocationAnalyzer;
|
||||
locationService: LocationService;
|
||||
logger: Logger;
|
||||
config: Config;
|
||||
}
|
||||
|
||||
export async function createNextRouter(
|
||||
options: RouterOptions,
|
||||
): Promise<express.Router> {
|
||||
const {
|
||||
entitiesCatalog,
|
||||
locationAnalyzer,
|
||||
locationService,
|
||||
config,
|
||||
logger,
|
||||
} = options;
|
||||
|
||||
const router = Router();
|
||||
router.use(express.json());
|
||||
|
||||
const readonlyEnabled =
|
||||
config.getOptionalBoolean('catalog.readonly') || false;
|
||||
if (readonlyEnabled) {
|
||||
logger.info('Catalog is running in readonly mode');
|
||||
}
|
||||
|
||||
if (entitiesCatalog) {
|
||||
router
|
||||
.get('/entities', async (req, res) => {
|
||||
const { entities, pageInfo } = await entitiesCatalog.entities({
|
||||
filter: parseEntityFilterParams(req.query),
|
||||
fields: parseEntityTransformParams(req.query),
|
||||
pagination: parseEntityPaginationParams(req.query),
|
||||
});
|
||||
|
||||
// Add a Link header to the next page
|
||||
if (pageInfo.hasNextPage) {
|
||||
const url = new URL(`http://ignored${req.url}`);
|
||||
url.searchParams.delete('offset');
|
||||
url.searchParams.set('after', pageInfo.endCursor);
|
||||
res.setHeader('link', `<${url.pathname}${url.search}>; rel="next"`);
|
||||
}
|
||||
|
||||
// TODO(freben): encode the pageInfo in the response
|
||||
res.json(entities);
|
||||
})
|
||||
.get('/entities/by-uid/:uid', async (req, res) => {
|
||||
const { uid } = req.params;
|
||||
const { entities } = await entitiesCatalog.entities({
|
||||
filter: basicEntityFilter({ 'metadata.uid': uid }),
|
||||
});
|
||||
if (!entities.length) {
|
||||
throw new NotFoundError(`No entity with uid ${uid}`);
|
||||
}
|
||||
res.status(200).json(entities[0]);
|
||||
})
|
||||
.delete('/entities/by-uid/:uid', async (req, res) => {
|
||||
const { uid } = req.params;
|
||||
await entitiesCatalog.removeEntityByUid(uid);
|
||||
res.status(204).end();
|
||||
})
|
||||
.get('/entities/by-name/:kind/:namespace/:name', async (req, res) => {
|
||||
const { kind, namespace, name } = req.params;
|
||||
const { entities } = await entitiesCatalog.entities({
|
||||
filter: basicEntityFilter({
|
||||
kind: kind,
|
||||
'metadata.namespace': namespace,
|
||||
'metadata.name': name,
|
||||
}),
|
||||
});
|
||||
if (!entities.length) {
|
||||
throw new NotFoundError(
|
||||
`No entity named '${name}' found, with kind '${kind}' in namespace '${namespace}'`,
|
||||
);
|
||||
}
|
||||
res.status(200).json(entities[0]);
|
||||
});
|
||||
}
|
||||
|
||||
if (locationService) {
|
||||
router
|
||||
.post('/locations', async (req, res) => {
|
||||
const input = await validateRequestBody(req, locationSpecSchema);
|
||||
const dryRun = yn(req.query.dryRun, { default: false });
|
||||
|
||||
// when in dryRun addLocation is effectively a read operation so we don't
|
||||
// need to disallow readonly
|
||||
if (!dryRun) {
|
||||
disallowReadonlyMode(readonlyEnabled);
|
||||
}
|
||||
|
||||
const output = await locationService.createLocation(input, dryRun);
|
||||
res.status(201).json(output);
|
||||
})
|
||||
.get('/locations', async (_req, res) => {
|
||||
const output = await locationService.listLocations();
|
||||
res.status(200).json(output);
|
||||
})
|
||||
|
||||
.get('/locations/:id', async (req, res) => {
|
||||
const { id } = req.params;
|
||||
const output = await locationService.getLocation(id);
|
||||
res.status(200).json(output);
|
||||
})
|
||||
.delete('/locations/:id', async (req, res) => {
|
||||
disallowReadonlyMode(readonlyEnabled);
|
||||
|
||||
const { id } = req.params;
|
||||
await locationService.deleteLocation(id);
|
||||
res.status(204).end();
|
||||
});
|
||||
}
|
||||
|
||||
if (locationAnalyzer) {
|
||||
router.post('/analyze-location', async (req, res) => {
|
||||
const input = await validateRequestBody(req, analyzeLocationSchema);
|
||||
const output = await locationAnalyzer.analyzeLocation(input);
|
||||
res.status(200).json(output);
|
||||
});
|
||||
}
|
||||
|
||||
router.use(errorHandler());
|
||||
return router;
|
||||
}
|
||||
@@ -84,14 +84,14 @@ export class Stitcher {
|
||||
relationTarget: 'relations.target_entity_ref',
|
||||
})
|
||||
.from('refresh_state')
|
||||
.leftJoin('incoming_references', {})
|
||||
.where({ 'refresh_state.entity_ref': entityRef })
|
||||
.crossJoin(tx.raw('incoming_references'))
|
||||
.leftOuterJoin('final_entities', {
|
||||
'final_entities.entity_id': 'refresh_state.entity_id',
|
||||
})
|
||||
.leftOuterJoin('relations', {
|
||||
'relations.source_entity_ref': 'refresh_state.entity_ref',
|
||||
})
|
||||
.where({ 'refresh_state.entity_ref': entityRef })
|
||||
.orderBy('relationType', 'asc')
|
||||
.orderBy('relationTarget', 'asc');
|
||||
|
||||
|
||||
@@ -15,3 +15,4 @@
|
||||
*/
|
||||
|
||||
export { NextCatalogBuilder } from './NextCatalogBuilder';
|
||||
export { createNextRouter } from './NextRouter';
|
||||
|
||||
@@ -1,5 +1,16 @@
|
||||
# @backstage/plugin-catalog-graphql
|
||||
|
||||
## 0.2.8
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [e0bfd3d44]
|
||||
- Updated dependencies [38ca05168]
|
||||
- Updated dependencies [d8b81fd28]
|
||||
- @backstage/backend-common@0.7.0
|
||||
- @backstage/catalog-model@0.7.8
|
||||
- @backstage/config@0.1.5
|
||||
|
||||
## 0.2.7
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/plugin-catalog-graphql",
|
||||
"version": "0.2.7",
|
||||
"version": "0.2.8",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
@@ -30,9 +30,9 @@
|
||||
"clean": "backstage-cli clean"
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/backend-common": "^0.6.0",
|
||||
"@backstage/catalog-model": "^0.7.1",
|
||||
"@backstage/config": "^0.1.4",
|
||||
"@backstage/backend-common": "^0.7.0",
|
||||
"@backstage/catalog-model": "^0.7.8",
|
||||
"@backstage/config": "^0.1.5",
|
||||
"@graphql-modules/core": "^0.7.17",
|
||||
"apollo-server": "^2.16.1",
|
||||
"cross-fetch": "^3.0.6",
|
||||
@@ -42,7 +42,7 @@
|
||||
"winston": "^3.2.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.6.5",
|
||||
"@backstage/cli": "^0.6.10",
|
||||
"@backstage/test-utils": "^0.1.9",
|
||||
"@graphql-codegen/cli": "^1.21.3",
|
||||
"@graphql-codegen/typescript": "^1.17.7",
|
||||
@@ -52,7 +52,7 @@
|
||||
"eslint-plugin-graphql": "^4.0.0",
|
||||
"msw": "^0.21.2",
|
||||
"supertest": "^6.1.3",
|
||||
"ts-node": "^8.10.2"
|
||||
"ts-node": "^9.1.1"
|
||||
},
|
||||
"files": [
|
||||
"dist"
|
||||
|
||||
@@ -1,5 +1,26 @@
|
||||
# @backstage/plugin-catalog-import
|
||||
|
||||
## 0.5.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 38ca05168: The default `@octokit/rest` dependency was bumped to `"^18.5.3"`.
|
||||
- 80888659b: Bump react-hook-form version to be the same for the entire project.
|
||||
- 8aedbb4af: Fixes a typo and minor wording changes to the catalog import UI
|
||||
- Updated dependencies [38ca05168]
|
||||
- Updated dependencies [f65adcde7]
|
||||
- Updated dependencies [81c54d1f2]
|
||||
- Updated dependencies [80888659b]
|
||||
- Updated dependencies [7b8272fb7]
|
||||
- Updated dependencies [d8b81fd28]
|
||||
- Updated dependencies [d1b1306d9]
|
||||
- @backstage/integration@0.5.2
|
||||
- @backstage/core@0.7.8
|
||||
- @backstage/plugin-catalog-react@0.1.5
|
||||
- @backstage/theme@0.2.7
|
||||
- @backstage/catalog-model@0.7.8
|
||||
- @backstage/catalog-client@0.3.11
|
||||
|
||||
## 0.5.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/plugin-catalog-import",
|
||||
"version": "0.5.4",
|
||||
"version": "0.5.5",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
@@ -30,13 +30,13 @@
|
||||
"clean": "backstage-cli clean"
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/catalog-model": "^0.7.6",
|
||||
"@backstage/catalog-client": "^0.3.9",
|
||||
"@backstage/core": "^0.7.7",
|
||||
"@backstage/integration": "^0.5.0",
|
||||
"@backstage/catalog-model": "^0.7.8",
|
||||
"@backstage/catalog-client": "^0.3.11",
|
||||
"@backstage/core": "^0.7.8",
|
||||
"@backstage/integration": "^0.5.2",
|
||||
"@backstage/integration-react": "^0.1.1",
|
||||
"@backstage/plugin-catalog-react": "^0.1.4",
|
||||
"@backstage/theme": "^0.2.6",
|
||||
"@backstage/plugin-catalog-react": "^0.1.5",
|
||||
"@backstage/theme": "^0.2.7",
|
||||
"@material-ui/core": "^4.11.0",
|
||||
"@material-ui/icons": "^4.9.1",
|
||||
"@material-ui/lab": "4.0.0-alpha.45",
|
||||
@@ -53,7 +53,7 @@
|
||||
"yaml": "^1.10.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.6.9",
|
||||
"@backstage/cli": "^0.6.10",
|
||||
"@backstage/dev-utils": "^0.1.13",
|
||||
"@backstage/test-utils": "^0.1.10",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
|
||||
@@ -275,7 +275,7 @@ export function defaultGenerateStepper(
|
||||
}
|
||||
/>
|
||||
<FormHelperText>
|
||||
WARNING: This may fail is no CODEOWNERS file is found at
|
||||
WARNING: This may fail if no CODEOWNERS file is found at
|
||||
the target location.
|
||||
</FormHelperText>
|
||||
</>
|
||||
|
||||
+3
-4
@@ -176,10 +176,9 @@ export const StepPrepareCreatePullRequest = ({
|
||||
return (
|
||||
<>
|
||||
<Typography>
|
||||
You entered a link to a {analyzeResult.integrationType} repository but
|
||||
we didn't found a <code>catalog-info.yaml</code>. Use this form to
|
||||
create a Pull Request that creates an initial{' '}
|
||||
<code>catalog-info.yaml</code>.
|
||||
You entered a link to a {analyzeResult.integrationType} repository but a{' '}
|
||||
<code>catalog-info.yaml</code> could not be found. Use this form to open
|
||||
a Pull Request that creates one.
|
||||
</Typography>
|
||||
|
||||
<PreparePullRequestForm<FormData>
|
||||
|
||||
@@ -1,5 +1,18 @@
|
||||
# @backstage/plugin-catalog-react
|
||||
|
||||
## 0.1.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 81c54d1f2: Fetch relations in batches in `useRelatedEntities`
|
||||
- Updated dependencies [f65adcde7]
|
||||
- Updated dependencies [80888659b]
|
||||
- Updated dependencies [d8b81fd28]
|
||||
- Updated dependencies [d1b1306d9]
|
||||
- @backstage/core@0.7.8
|
||||
- @backstage/catalog-model@0.7.8
|
||||
- @backstage/catalog-client@0.3.11
|
||||
|
||||
## 0.1.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/plugin-catalog-react",
|
||||
"version": "0.1.4",
|
||||
"version": "0.1.5",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
@@ -28,9 +28,9 @@
|
||||
"clean": "backstage-cli clean"
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/catalog-client": "^0.3.9",
|
||||
"@backstage/catalog-model": "^0.7.5",
|
||||
"@backstage/core": "^0.7.3",
|
||||
"@backstage/catalog-client": "^0.3.11",
|
||||
"@backstage/catalog-model": "^0.7.8",
|
||||
"@backstage/core": "^0.7.8",
|
||||
"@material-ui/core": "^4.11.0",
|
||||
"@types/react": "^16.9",
|
||||
"lodash": "^4.17.15",
|
||||
@@ -40,7 +40,7 @@
|
||||
"react-use": "^15.3.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.6.6",
|
||||
"@backstage/cli": "^0.6.10",
|
||||
"@backstage/dev-utils": "^0.1.13",
|
||||
"@backstage/test-utils": "^0.1.9",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
|
||||
@@ -32,12 +32,12 @@
|
||||
"dependencies": {
|
||||
"@backstage/catalog-client": "^0.3.10",
|
||||
"@backstage/catalog-model": "^0.7.7",
|
||||
"@backstage/core": "^0.7.7",
|
||||
"@backstage/core": "^0.7.8",
|
||||
"@backstage/errors": "^0.1.1",
|
||||
"@backstage/integration": "^0.5.1",
|
||||
"@backstage/integration-react": "^0.1.1",
|
||||
"@backstage/plugin-catalog-react": "^0.1.4",
|
||||
"@backstage/theme": "^0.2.6",
|
||||
"@backstage/theme": "^0.2.7",
|
||||
"@material-ui/core": "^4.11.0",
|
||||
"@material-ui/icons": "^4.9.1",
|
||||
"@material-ui/lab": "4.0.0-alpha.45",
|
||||
@@ -52,7 +52,7 @@
|
||||
"react-use": "^15.3.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.6.9",
|
||||
"@backstage/cli": "^0.6.10",
|
||||
"@backstage/dev-utils": "^0.1.13",
|
||||
"@backstage/test-utils": "^0.1.10",
|
||||
"@microsoft/microsoft-graph-types": "^1.25.0",
|
||||
|
||||
@@ -32,9 +32,9 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/catalog-model": "^0.7.3",
|
||||
"@backstage/core": "^0.7.7",
|
||||
"@backstage/core": "^0.7.8",
|
||||
"@backstage/plugin-catalog-react": "^0.1.2",
|
||||
"@backstage/theme": "^0.2.6",
|
||||
"@backstage/theme": "^0.2.7",
|
||||
"@material-ui/core": "^4.11.0",
|
||||
"@material-ui/icons": "^4.9.1",
|
||||
"@material-ui/lab": "4.0.0-alpha.45",
|
||||
@@ -50,7 +50,7 @@
|
||||
"react-use": "^15.3.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.6.9",
|
||||
"@backstage/cli": "^0.6.10",
|
||||
"@backstage/dev-utils": "^0.1.13",
|
||||
"@backstage/test-utils": "^0.1.10",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
|
||||
@@ -32,8 +32,8 @@
|
||||
"dependencies": {
|
||||
"@backstage/catalog-model": "^0.7.3",
|
||||
"@backstage/plugin-catalog-react": "^0.1.2",
|
||||
"@backstage/core": "^0.7.7",
|
||||
"@backstage/theme": "^0.2.6",
|
||||
"@backstage/core": "^0.7.8",
|
||||
"@backstage/theme": "^0.2.7",
|
||||
"@material-ui/core": "^4.11.0",
|
||||
"@material-ui/icons": "^4.9.1",
|
||||
"@material-ui/lab": "4.0.0-alpha.45",
|
||||
@@ -47,7 +47,7 @@
|
||||
"react-use": "^15.3.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.6.9",
|
||||
"@backstage/cli": "^0.6.10",
|
||||
"@backstage/dev-utils": "^0.1.13",
|
||||
"@backstage/test-utils": "^0.1.10",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
|
||||
@@ -1,5 +1,19 @@
|
||||
# @backstage/plugin-code-coverage-backend
|
||||
|
||||
## 0.1.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [e0bfd3d44]
|
||||
- Updated dependencies [38ca05168]
|
||||
- Updated dependencies [d8b81fd28]
|
||||
- Updated dependencies [d1b1306d9]
|
||||
- @backstage/backend-common@0.7.0
|
||||
- @backstage/integration@0.5.2
|
||||
- @backstage/catalog-model@0.7.8
|
||||
- @backstage/config@0.1.5
|
||||
- @backstage/catalog-client@0.3.11
|
||||
|
||||
## 0.1.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/plugin-code-coverage-backend",
|
||||
"version": "0.1.3",
|
||||
"version": "0.1.4",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
@@ -19,12 +19,12 @@
|
||||
"clean": "backstage-cli clean"
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/backend-common": "^0.6.3",
|
||||
"@backstage/catalog-client": "^0.3.10",
|
||||
"@backstage/catalog-model": "^0.7.7",
|
||||
"@backstage/config": "^0.1.4",
|
||||
"@backstage/backend-common": "^0.7.0",
|
||||
"@backstage/catalog-client": "^0.3.11",
|
||||
"@backstage/catalog-model": "^0.7.8",
|
||||
"@backstage/config": "^0.1.5",
|
||||
"@backstage/errors": "^0.1.1",
|
||||
"@backstage/integration": "^0.5.1",
|
||||
"@backstage/integration": "^0.5.2",
|
||||
"@types/express": "^4.17.6",
|
||||
"cross-fetch": "^3.0.6",
|
||||
"express": "^4.17.1",
|
||||
@@ -36,7 +36,7 @@
|
||||
"yn": "^4.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.6.9",
|
||||
"@backstage/cli": "^0.6.10",
|
||||
"@types/express-xml-bodyparser": "^0.3.2",
|
||||
"@types/supertest": "^2.0.8",
|
||||
"msw": "^0.21.2",
|
||||
|
||||
@@ -22,10 +22,10 @@
|
||||
"dependencies": {
|
||||
"@backstage/catalog-model": "^0.7.7",
|
||||
"@backstage/config": "^0.1.4",
|
||||
"@backstage/core": "^0.7.7",
|
||||
"@backstage/core": "^0.7.8",
|
||||
"@backstage/errors": "^0.1.1",
|
||||
"@backstage/plugin-catalog-react": "^0.1.4",
|
||||
"@backstage/theme": "^0.2.6",
|
||||
"@backstage/theme": "^0.2.7",
|
||||
"@material-ui/core": "^4.11.0",
|
||||
"@material-ui/icons": "^4.9.1",
|
||||
"@material-ui/styles": "^4.11.0",
|
||||
@@ -39,7 +39,7 @@
|
||||
"recharts": "^1.8.5"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.6.9",
|
||||
"@backstage/cli": "^0.6.10",
|
||||
"@backstage/dev-utils": "^0.1.13",
|
||||
"@backstage/test-utils": "^0.1.10",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
|
||||
@@ -21,9 +21,9 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/config": "^0.1.4",
|
||||
"@backstage/core": "^0.7.7",
|
||||
"@backstage/core": "^0.7.8",
|
||||
"@backstage/errors": "^0.1.1",
|
||||
"@backstage/theme": "^0.2.6",
|
||||
"@backstage/theme": "^0.2.7",
|
||||
"@material-ui/core": "^4.11.0",
|
||||
"@material-ui/icons": "^4.9.1",
|
||||
"@material-ui/lab": "4.0.0-alpha.45",
|
||||
@@ -34,7 +34,7 @@
|
||||
"react-use": "^15.3.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.6.9",
|
||||
"@backstage/cli": "^0.6.10",
|
||||
"@backstage/dev-utils": "^0.1.13",
|
||||
"@backstage/test-utils": "^0.1.10",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
|
||||
@@ -1,5 +1,21 @@
|
||||
# @backstage/plugin-cost-insights
|
||||
|
||||
## 0.9.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- 6f1b82b14: make change ratio optional
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [f65adcde7]
|
||||
- Updated dependencies [80888659b]
|
||||
- Updated dependencies [7b8272fb7]
|
||||
- Updated dependencies [d8b81fd28]
|
||||
- @backstage/core@0.7.8
|
||||
- @backstage/theme@0.2.7
|
||||
- @backstage/config@0.1.5
|
||||
|
||||
## 0.8.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@backstage/plugin-cost-insights",
|
||||
"version": "0.8.5",
|
||||
"version": "0.9.0",
|
||||
"main": "src/index.ts",
|
||||
"types": "src/index.ts",
|
||||
"license": "Apache-2.0",
|
||||
@@ -30,9 +30,9 @@
|
||||
"clean": "backstage-cli clean"
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/config": "^0.1.3",
|
||||
"@backstage/core": "^0.7.7",
|
||||
"@backstage/theme": "^0.2.6",
|
||||
"@backstage/config": "^0.1.5",
|
||||
"@backstage/core": "^0.7.8",
|
||||
"@backstage/theme": "^0.2.7",
|
||||
"@material-ui/core": "^4.11.0",
|
||||
"@material-ui/icons": "^4.9.1",
|
||||
"@material-ui/lab": "4.0.0-alpha.45",
|
||||
@@ -55,7 +55,7 @@
|
||||
"yup": "^0.29.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.6.9",
|
||||
"@backstage/cli": "^0.6.10",
|
||||
"@backstage/dev-utils": "^0.1.13",
|
||||
"@backstage/test-utils": "^0.1.10",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
|
||||
@@ -31,10 +31,10 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/catalog-model": "^0.7.5",
|
||||
"@backstage/core": "^0.7.7",
|
||||
"@backstage/core": "^0.7.8",
|
||||
"@backstage/plugin-catalog-react": "^0.1.4",
|
||||
"@backstage/plugin-explore-react": "^0.0.4",
|
||||
"@backstage/theme": "^0.2.6",
|
||||
"@backstage/theme": "^0.2.7",
|
||||
"@material-ui/core": "^4.11.0",
|
||||
"@material-ui/icons": "^4.9.1",
|
||||
"@material-ui/lab": "4.0.0-alpha.45",
|
||||
@@ -45,7 +45,7 @@
|
||||
"react-use": "^15.3.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.6.9",
|
||||
"@backstage/cli": "^0.6.10",
|
||||
"@backstage/dev-utils": "^0.1.13",
|
||||
"@backstage/test-utils": "^0.1.10",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
import { TabbedLayout } from '@backstage/core';
|
||||
import React from 'react';
|
||||
import { DomainExplorerContent } from '../DomainExplorerContent';
|
||||
import { GroupsExplorerContent } from '../GroupsExplorerContent';
|
||||
import { ToolExplorerContent } from '../ToolExplorerContent';
|
||||
|
||||
export const ExploreTabs = () => (
|
||||
@@ -23,6 +24,9 @@ export const ExploreTabs = () => (
|
||||
<TabbedLayout.Route path="domains" title="Domains">
|
||||
<DomainExplorerContent />
|
||||
</TabbedLayout.Route>
|
||||
<TabbedLayout.Route path="groups" title="Groups">
|
||||
<GroupsExplorerContent />
|
||||
</TabbedLayout.Route>
|
||||
<TabbedLayout.Route path="tools" title="Tools">
|
||||
<ToolExplorerContent />
|
||||
</TabbedLayout.Route>
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
/*
|
||||
* Copyright 2020 Spotify AB
|
||||
*
|
||||
* 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 { ApiProvider, ApiRegistry } from '@backstage/core';
|
||||
import {
|
||||
catalogApiRef,
|
||||
CatalogApi,
|
||||
entityRouteRef,
|
||||
} from '@backstage/plugin-catalog-react';
|
||||
import { Entity } from '@backstage/catalog-model';
|
||||
import { renderInTestApp } from '@backstage/test-utils';
|
||||
import React from 'react';
|
||||
import { GroupsDiagram } from './GroupsDiagram';
|
||||
|
||||
describe('<GroupsDiagram />', () => {
|
||||
beforeAll(() => {
|
||||
Object.defineProperty(window.SVGElement.prototype, 'getBBox', {
|
||||
value: () => ({ width: 100, height: 100 }),
|
||||
configurable: true,
|
||||
});
|
||||
});
|
||||
|
||||
it('shows groups', async () => {
|
||||
const catalogApi: Partial<CatalogApi> = {
|
||||
getEntities: () =>
|
||||
Promise.resolve({
|
||||
items: [
|
||||
{
|
||||
apiVersion: 'backstage.io/v1alpha1',
|
||||
kind: 'Group',
|
||||
metadata: {
|
||||
name: 'group-a',
|
||||
namespace: 'my-namespace',
|
||||
},
|
||||
spec: {
|
||||
type: 'organization',
|
||||
},
|
||||
},
|
||||
] as Entity[],
|
||||
}),
|
||||
};
|
||||
|
||||
const { getByText } = await renderInTestApp(
|
||||
<ApiProvider apis={ApiRegistry.from([[catalogApiRef, catalogApi]])}>
|
||||
<GroupsDiagram />
|
||||
</ApiProvider>,
|
||||
{
|
||||
mountedRoutes: {
|
||||
'/catalog/:namespace/:kind/:name': entityRouteRef,
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
expect(getByText('my-namespace/group-a')).toBeInTheDocument();
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,190 @@
|
||||
/*
|
||||
* Copyright 2021 Spotify AB
|
||||
*
|
||||
* 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 {
|
||||
RELATION_CHILD_OF,
|
||||
stringifyEntityRef,
|
||||
parseEntityRef,
|
||||
} from '@backstage/catalog-model';
|
||||
import {
|
||||
catalogApiRef,
|
||||
entityRouteRef,
|
||||
getEntityRelations,
|
||||
formatEntityRefTitle,
|
||||
} from '@backstage/plugin-catalog-react';
|
||||
import {
|
||||
DependencyGraph,
|
||||
DependencyGraphTypes,
|
||||
Progress,
|
||||
useApi,
|
||||
ResponseErrorPanel,
|
||||
Link,
|
||||
useRouteRef,
|
||||
configApiRef,
|
||||
} from '@backstage/core';
|
||||
import { makeStyles, Typography } from '@material-ui/core';
|
||||
import ZoomOutMap from '@material-ui/icons/ZoomOutMap';
|
||||
import React from 'react';
|
||||
import { useAsync } from 'react-use';
|
||||
import { BackstageTheme } from '@backstage/theme';
|
||||
|
||||
const useStyles = makeStyles((theme: BackstageTheme) => ({
|
||||
organizationNode: {
|
||||
fill: 'coral',
|
||||
stroke: theme.palette.border,
|
||||
},
|
||||
groupNode: {
|
||||
fill: 'yellowgreen',
|
||||
stroke: theme.palette.border,
|
||||
},
|
||||
}));
|
||||
|
||||
function RenderNode(props: DependencyGraphTypes.RenderNodeProps<any>) {
|
||||
const classes = useStyles();
|
||||
const catalogEntityRoute = useRouteRef(entityRouteRef);
|
||||
|
||||
if (props.node.id === 'root') {
|
||||
return (
|
||||
<g>
|
||||
<rect
|
||||
width={180}
|
||||
height={80}
|
||||
rx={20}
|
||||
className={classes.organizationNode}
|
||||
/>
|
||||
<text
|
||||
x={90}
|
||||
y={45}
|
||||
textAnchor="middle"
|
||||
alignmentBaseline="baseline"
|
||||
style={{ fontWeight: 'bold' }}
|
||||
>
|
||||
{props.node.name}
|
||||
</text>
|
||||
</g>
|
||||
);
|
||||
}
|
||||
|
||||
const ref = parseEntityRef(props.node.id);
|
||||
|
||||
return (
|
||||
<g>
|
||||
<rect width={180} height={80} rx={20} className={classes.groupNode} />
|
||||
<Link
|
||||
to={catalogEntityRoute({
|
||||
kind: ref.kind,
|
||||
namespace: ref.namespace,
|
||||
name: ref.name,
|
||||
})}
|
||||
>
|
||||
<text
|
||||
x={90}
|
||||
y={45}
|
||||
textAnchor="middle"
|
||||
alignmentBaseline="baseline"
|
||||
style={{ fontWeight: 'bold' }}
|
||||
>
|
||||
{props.node.name}
|
||||
</text>
|
||||
</Link>
|
||||
</g>
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Dynamically generates a diagram of groups registered in the catalog.
|
||||
*/
|
||||
export function GroupsDiagram() {
|
||||
const nodes = new Array<{ id: string; kind: string; name: string }>();
|
||||
const edges = new Array<{ from: string; to: string; label: string }>();
|
||||
|
||||
const configApi = useApi(configApiRef);
|
||||
const catalogApi = useApi(catalogApiRef);
|
||||
const organizationName =
|
||||
configApi.getOptionalString('organization.name') ?? 'Backstage';
|
||||
const { loading, error, value: catalogResponse } = useAsync(() => {
|
||||
return catalogApi.getEntities({
|
||||
filter: {
|
||||
kind: ['Group'],
|
||||
},
|
||||
});
|
||||
}, [catalogApi]);
|
||||
|
||||
if (loading) {
|
||||
return <Progress />;
|
||||
} else if (error) {
|
||||
return <ResponseErrorPanel error={error} />;
|
||||
}
|
||||
|
||||
// the root of this diagram is the organization
|
||||
nodes.push({
|
||||
id: 'root',
|
||||
kind: 'Organization',
|
||||
name: organizationName,
|
||||
});
|
||||
|
||||
for (const catalogItem of catalogResponse?.items || []) {
|
||||
const currentItemId = stringifyEntityRef(catalogItem);
|
||||
|
||||
nodes.push({
|
||||
id: stringifyEntityRef(catalogItem),
|
||||
kind: catalogItem.kind,
|
||||
name: formatEntityRefTitle(catalogItem, { defaultKind: 'Group' }),
|
||||
});
|
||||
|
||||
// Edge to parent
|
||||
const catalogItemRelations_childOf = getEntityRelations(
|
||||
catalogItem,
|
||||
RELATION_CHILD_OF,
|
||||
);
|
||||
|
||||
// if no parent is found, link the node to the root
|
||||
if (catalogItemRelations_childOf.length === 0) {
|
||||
edges.push({
|
||||
from: currentItemId,
|
||||
to: 'root',
|
||||
label: '',
|
||||
});
|
||||
}
|
||||
|
||||
catalogItemRelations_childOf.forEach(relation => {
|
||||
edges.push({
|
||||
from: currentItemId,
|
||||
to: stringifyEntityRef(relation),
|
||||
label: '',
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
<DependencyGraph
|
||||
nodes={nodes}
|
||||
edges={edges}
|
||||
nodeMargin={10}
|
||||
direction={DependencyGraphTypes.Direction.RIGHT_LEFT}
|
||||
renderNode={RenderNode}
|
||||
/>
|
||||
<Typography
|
||||
variant="caption"
|
||||
style={{ display: 'block', textAlign: 'right' }}
|
||||
>
|
||||
<ZoomOutMap style={{ verticalAlign: 'bottom' }} /> Use pinch & zoom
|
||||
to move around the diagram.
|
||||
</Typography>
|
||||
</>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,103 @@
|
||||
/*
|
||||
* Copyright 2020 Spotify AB
|
||||
*
|
||||
* 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 } from '@backstage/catalog-model';
|
||||
import { ApiProvider, ApiRegistry } from '@backstage/core';
|
||||
import { catalogApiRef, entityRouteRef } from '@backstage/plugin-catalog-react';
|
||||
import { renderInTestApp } from '@backstage/test-utils';
|
||||
import { waitFor } from '@testing-library/react';
|
||||
import React from 'react';
|
||||
import { GroupsExplorerContent } from '../GroupsExplorerContent';
|
||||
|
||||
describe('<GroupsExplorerContent />', () => {
|
||||
const catalogApi: jest.Mocked<typeof catalogApiRef.T> = {
|
||||
addLocation: jest.fn(_a => new Promise(() => {})),
|
||||
getEntities: jest.fn(),
|
||||
getOriginLocationByEntity: jest.fn(),
|
||||
getLocationByEntity: jest.fn(),
|
||||
getLocationById: jest.fn(),
|
||||
removeLocationById: jest.fn(),
|
||||
removeEntityByUid: jest.fn(),
|
||||
getEntityByName: jest.fn(),
|
||||
};
|
||||
|
||||
const Wrapper = ({ children }: { children?: React.ReactNode }) => (
|
||||
<ApiProvider apis={ApiRegistry.with(catalogApiRef, catalogApi)}>
|
||||
{children}
|
||||
</ApiProvider>
|
||||
);
|
||||
|
||||
beforeEach(() => {
|
||||
jest.resetAllMocks();
|
||||
|
||||
Object.defineProperty(window.SVGElement.prototype, 'getBBox', {
|
||||
value: () => ({ width: 100, height: 100 }),
|
||||
configurable: true,
|
||||
});
|
||||
});
|
||||
|
||||
it('renders a groups diagram', async () => {
|
||||
const entities: Entity[] = [
|
||||
{
|
||||
apiVersion: 'backstage.io/v1alpha1',
|
||||
kind: 'Group',
|
||||
metadata: {
|
||||
name: 'group-a',
|
||||
namespace: 'my-namespace',
|
||||
},
|
||||
spec: {
|
||||
type: 'organization',
|
||||
},
|
||||
},
|
||||
];
|
||||
catalogApi.getEntities.mockResolvedValue({ items: entities });
|
||||
|
||||
const { getByText } = await renderInTestApp(
|
||||
<Wrapper>
|
||||
<GroupsExplorerContent />
|
||||
</Wrapper>,
|
||||
{
|
||||
mountedRoutes: {
|
||||
'/catalog/:namespace/:kind/:name': entityRouteRef,
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
await waitFor(() => {
|
||||
expect(getByText('my-namespace/group-a')).toBeInTheDocument();
|
||||
});
|
||||
});
|
||||
|
||||
it('renders a friendly error if it cannot collect domains', async () => {
|
||||
const catalogError = new Error('Network timeout');
|
||||
catalogApi.getEntities.mockRejectedValueOnce(catalogError);
|
||||
|
||||
const { getByText } = await renderInTestApp(
|
||||
<Wrapper>
|
||||
<GroupsExplorerContent />
|
||||
</Wrapper>,
|
||||
{
|
||||
mountedRoutes: {
|
||||
'/catalog/:namespace/:kind/:name': entityRouteRef,
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
await waitFor(() =>
|
||||
expect(getByText(/Warning: Network timeout/)).toBeInTheDocument(),
|
||||
);
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
* Copyright 2021 Spotify AB
|
||||
*
|
||||
* 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 { Content, ContentHeader, SupportButton } from '@backstage/core';
|
||||
import React from 'react';
|
||||
import { GroupsDiagram } from './GroupsDiagram';
|
||||
|
||||
export const GroupsExplorerContent = () => {
|
||||
return (
|
||||
<Content noPadding>
|
||||
<ContentHeader title="Groups">
|
||||
<SupportButton>Explore your groups.</SupportButton>
|
||||
</ContentHeader>
|
||||
|
||||
<GroupsDiagram />
|
||||
</Content>
|
||||
);
|
||||
};
|
||||
@@ -0,0 +1,16 @@
|
||||
/*
|
||||
* Copyright 2021 Spotify AB
|
||||
*
|
||||
* 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 { GroupsExplorerContent } from './GroupsExplorerContent';
|
||||
@@ -32,10 +32,10 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/catalog-model": "^0.7.3",
|
||||
"@backstage/core": "^0.7.7",
|
||||
"@backstage/core": "^0.7.8",
|
||||
"@backstage/errors": "^0.1.1",
|
||||
"@backstage/plugin-catalog-react": "^0.1.1",
|
||||
"@backstage/theme": "^0.2.6",
|
||||
"@backstage/theme": "^0.2.7",
|
||||
"@material-ui/core": "^4.11.0",
|
||||
"@material-ui/icons": "^4.9.1",
|
||||
"@material-ui/lab": "4.0.0-alpha.45",
|
||||
@@ -47,7 +47,7 @@
|
||||
"react-use": "^15.3.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.6.9",
|
||||
"@backstage/cli": "^0.6.10",
|
||||
"@backstage/dev-utils": "^0.1.13",
|
||||
"@backstage/test-utils": "^0.1.10",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
|
||||
@@ -30,8 +30,8 @@
|
||||
"clean": "backstage-cli clean"
|
||||
},
|
||||
"dependencies": {
|
||||
"@backstage/core": "^0.7.7",
|
||||
"@backstage/theme": "^0.2.6",
|
||||
"@backstage/core": "^0.7.8",
|
||||
"@backstage/theme": "^0.2.7",
|
||||
"@material-ui/core": "^4.11.0",
|
||||
"@material-ui/icons": "^4.9.1",
|
||||
"@material-ui/lab": "4.0.0-alpha.45",
|
||||
@@ -41,7 +41,7 @@
|
||||
"react-use": "^15.3.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@backstage/cli": "^0.6.9",
|
||||
"@backstage/cli": "^0.6.10",
|
||||
"@backstage/dev-utils": "^0.1.13",
|
||||
"@backstage/test-utils": "^0.1.10",
|
||||
"@testing-library/jest-dom": "^5.10.1",
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user