Merge remote-tracking branch 'origin/master' into gcalendar

This commit is contained in:
Alex Rybchenko
2022-03-10 12:53:27 +01:00
321 changed files with 3618 additions and 1369 deletions
+49
View File
@@ -2,6 +2,38 @@
'@backstage/plugin-catalog-backend': minor
---
**BREAKING**: Removed `GithubDiscoveryProcessor`, `GithubMultiOrgReaderProcessor`, `GitHubOrgEntityProvider`, `GithubOrgReaderProcessor`, and `GithubMultiOrgConfig` which now instead should be imported from `@backstage/plugin-catalog-backend-module-github`. NOTE THAT the `GithubDiscoveryProcessor` and `GithubOrgReaderProcessor` were part of the default set of processors in the catalog backend, and if you are a user of discovery or location based org ingestion on GitLab, you MUST now add them manually in the catalog initialization code of your backend.
```diff
// In packages/backend/src/plugins/catalog.ts
+import {
+ GithubDiscoveryProcessor,
+ GithubOrgReaderProcessor,
+} from '@backstage/plugin-catalog-backend-module-github';
+import {
+ ScmIntegrations,
+ DefaultGithubCredentialsProvider
+} from '@backstage/integration';
export default async function createPlugin(
env: PluginEnvironment,
): Promise<Router> {
const builder = await CatalogBuilder.create(env);
+ const integrations = ScmIntegrations.fromConfig(config);
+ const githubCredentialsProvider =
+ DefaultGithubCredentialsProvider.fromIntegrations(integrations);
+ builder.addProcessor(
+ GithubDiscoveryProcessor.fromConfig(config, {
+ logger,
+ githubCredentialsProvider,
+ }),
+ GithubOrgReaderProcessor.fromConfig(config, {
+ logger,
+ githubCredentialsProvider,
+ }),
+ );
```
**BREAKING**: Removed `GitLabDiscoveryProcessor`, which now instead should be imported from `@backstage/plugin-catalog-backend-module-gitlab`. NOTE THAT this processor was part of the default set of processors in the catalog backend, and if you are a user of discovery on GitLab, you MUST now add it manually in the catalog initialization code of your backend.
```diff
@@ -17,4 +49,21 @@
+ );
```
**BREAKING**: Removed `BitbucketDiscoveryProcessor`, which now instead should be imported from `@backstage/plugin-catalog-backend-module-bitbucket`. NOTE THAT this processor was part of the default set of processors in the catalog backend, and if you are a user of discovery on Bitbucket, you MUST now add it manually in the catalog initialization code of your backend.
```diff
// In packages/backend/src/plugins/catalog.ts
+import { BitbucketDiscoveryProcessor } from '@backstage/plugin-catalog-backend-module-bitbucket';
export default async function createPlugin(
env: PluginEnvironment,
): Promise<Router> {
const builder = await CatalogBuilder.create(env);
+ builder.addProcessor(
+ BitbucketDiscoveryProcessor.fromConfig(env.config, { logger: env.logger })
+ );
```
**BREAKING**: Removed `AzureDevOpsDiscoveryProcessor`, which now instead should be imported from `@backstage/plugin-catalog-backend-module-azure`. This processor was not part of the set of default processors. If you were using it, you should already have a reference to it in your backend code and only need to update the import.
**BREAKING**: Removed the formerly deprecated type `BitbucketRepositoryParser`, which is instead reintroduced in `@backstage/plugin-catalog-backend-module-bitbucket`.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/cli': patch
---
build(deps-dev): bump `@types/npm-packlist` from 1.1.2 to 3.0.0
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-airbrake': patch
---
Fix a bug where API calls were being made and errors were being added to the snack bar when no project ID was present. This is a common use case for components that haven't added the Airbrake plugin annotation to their `catalog-info.yaml`.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog': patch
---
Added an `allowedKinds` option to `CatalogKindHeader` to limit entity kinds available in the dropdown.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder': patch
---
Fixing the border color for the `FavoriteEntity` star button on the `TemplateCard`
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/backend-tasks': patch
---
Add support for cron syntax to configure task frequency - `TaskScheduleDefinition.frequency` can now be both a `Duration` and an object on the form `{ cron: string }`, where the latter is expected to be on standard crontab format (e.g. `'0 */2 * * *'`).
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog-backend-module-github': minor
---
Added package, moving out GitHub specific functionality from the catalog-backend
+215
View File
@@ -0,0 +1,215 @@
{
"mode": "exit",
"tag": "next",
"initialVersions": {
"example-app": "0.2.67",
"@backstage/app-defaults": "0.2.0",
"example-backend": "0.2.67",
"@backstage/backend-common": "0.12.0",
"@backstage/backend-tasks": "0.1.10",
"@backstage/backend-test-utils": "0.1.20",
"@backstage/catalog-client": "0.8.0",
"@backstage/catalog-model": "0.12.0",
"@backstage/cli": "0.15.0",
"@backstage/cli-common": "0.1.8",
"@backstage/codemods": "0.1.34",
"@backstage/config": "0.1.15",
"@backstage/config-loader": "0.9.6",
"@backstage/core-app-api": "0.6.0",
"@backstage/core-components": "0.9.0",
"@backstage/core-plugin-api": "0.8.0",
"@backstage/create-app": "0.4.22",
"@backstage/dev-utils": "0.2.24",
"e2e-test": "0.2.0",
"@backstage/errors": "0.2.2",
"@backstage/integration": "0.8.0",
"@backstage/integration-react": "0.1.24",
"@backstage/release-manifests": "0.0.2",
"@backstage/search-common": "0.3.0",
"@techdocs/cli": "0.8.16",
"techdocs-cli-embedded-app": "0.2.66",
"@backstage/techdocs-common": "0.11.11",
"@backstage/test-utils": "0.3.0",
"@backstage/theme": "0.2.15",
"@backstage/types": "0.1.3",
"@backstage/version-bridge": "0.1.2",
"@backstage/plugin-airbrake": "0.3.1",
"@backstage/plugin-airbrake-backend": "0.2.1",
"@backstage/plugin-allure": "0.1.17",
"@backstage/plugin-analytics-module-ga": "0.1.12",
"@backstage/plugin-apache-airflow": "0.1.9",
"@backstage/plugin-api-docs": "0.8.1",
"@backstage/plugin-app-backend": "0.3.28",
"@backstage/plugin-auth-backend": "0.12.0",
"@backstage/plugin-auth-node": "0.1.4",
"@backstage/plugin-azure-devops": "0.1.17",
"@backstage/plugin-azure-devops-backend": "0.3.7",
"@backstage/plugin-azure-devops-common": "0.2.2",
"@backstage/plugin-badges": "0.2.25",
"@backstage/plugin-badges-backend": "0.1.22",
"@backstage/plugin-bazaar": "0.1.16",
"@backstage/plugin-bazaar-backend": "0.1.12",
"@backstage/plugin-bitrise": "0.1.28",
"@backstage/plugin-catalog": "0.9.1",
"@backstage/plugin-catalog-backend": "0.23.0",
"@backstage/plugin-catalog-backend-module-aws": "0.1.1",
"@backstage/plugin-catalog-backend-module-azure": "0.0.0",
"@backstage/plugin-catalog-backend-module-gitlab": "0.0.0",
"@backstage/plugin-catalog-backend-module-ldap": "0.3.15",
"@backstage/plugin-catalog-backend-module-msgraph": "0.2.18",
"@backstage/plugin-catalog-common": "0.2.0",
"@backstage/plugin-catalog-graph": "0.2.13",
"@backstage/plugin-catalog-graphql": "0.3.5",
"@backstage/plugin-catalog-import": "0.8.4",
"@backstage/plugin-catalog-react": "0.8.0",
"@backstage/plugin-cicd-statistics": "0.1.3",
"@backstage/plugin-circleci": "0.3.1",
"@backstage/plugin-cloudbuild": "0.3.1",
"@backstage/plugin-code-climate": "0.1.1",
"@backstage/plugin-code-coverage": "0.1.28",
"@backstage/plugin-code-coverage-backend": "0.1.26",
"@backstage/plugin-config-schema": "0.1.24",
"@backstage/plugin-cost-insights": "0.11.23",
"@backstage/plugin-explore": "0.3.32",
"@backstage/plugin-explore-react": "0.0.14",
"@backstage/plugin-firehydrant": "0.1.18",
"@backstage/plugin-fossa": "0.2.33",
"@backstage/plugin-gcp-projects": "0.3.20",
"@backstage/plugin-git-release-manager": "0.3.14",
"@backstage/plugin-github-actions": "0.5.1",
"@backstage/plugin-github-deployments": "0.1.32",
"@backstage/plugin-gitops-profiles": "0.3.19",
"@backstage/plugin-gocd": "0.1.7",
"@backstage/plugin-graphiql": "0.2.33",
"@backstage/plugin-graphql-backend": "0.1.18",
"@backstage/plugin-home": "0.4.17",
"@backstage/plugin-ilert": "0.1.27",
"@backstage/plugin-jenkins": "0.7.0",
"@backstage/plugin-jenkins-backend": "0.1.17",
"@backstage/plugin-jenkins-common": "0.1.0",
"@backstage/plugin-kafka": "0.3.1",
"@backstage/plugin-kafka-backend": "0.2.21",
"@backstage/plugin-kubernetes": "0.6.1",
"@backstage/plugin-kubernetes-backend": "0.4.11",
"@backstage/plugin-kubernetes-common": "0.2.6",
"@backstage/plugin-lighthouse": "0.3.1",
"@backstage/plugin-newrelic": "0.3.19",
"@backstage/plugin-newrelic-dashboard": "0.1.9",
"@backstage/plugin-org": "0.5.1",
"@backstage/plugin-pagerduty": "0.3.28",
"@backstage/plugin-periskop": "0.0.0",
"@backstage/plugin-periskop-backend": "0.0.0",
"@backstage/plugin-permission-backend": "0.5.3",
"@backstage/plugin-permission-common": "0.5.2",
"@backstage/plugin-permission-node": "0.5.3",
"@backstage/plugin-permission-react": "0.3.3",
"@backstage/plugin-proxy-backend": "0.2.22",
"@backstage/plugin-rollbar": "0.4.1",
"@backstage/plugin-rollbar-backend": "0.1.25",
"@backstage/plugin-scaffolder": "0.14.0",
"@backstage/plugin-scaffolder-backend": "0.17.3",
"@backstage/plugin-scaffolder-backend-module-cookiecutter": "0.2.3",
"@backstage/plugin-scaffolder-backend-module-rails": "0.3.3",
"@backstage/plugin-scaffolder-backend-module-yeoman": "0.2.1",
"@backstage/plugin-scaffolder-common": "0.2.3",
"@backstage/plugin-search": "0.7.2",
"@backstage/plugin-search-backend": "0.4.6",
"@backstage/plugin-search-backend-module-elasticsearch": "0.1.0",
"@backstage/plugin-search-backend-module-pg": "0.3.0",
"@backstage/plugin-search-backend-node": "0.5.0",
"@backstage/plugin-search-common": "0.3.0",
"@backstage/plugin-sentry": "0.3.39",
"@backstage/plugin-shortcuts": "0.2.2",
"@backstage/plugin-sonarqube": "0.3.1",
"@backstage/plugin-splunk-on-call": "0.3.25",
"@backstage/plugin-tech-insights": "0.1.11",
"@backstage/plugin-tech-insights-backend": "0.2.8",
"@backstage/plugin-tech-insights-backend-module-jsonfc": "0.1.12",
"@backstage/plugin-tech-insights-common": "0.2.3",
"@backstage/plugin-tech-insights-node": "0.2.6",
"@backstage/plugin-tech-radar": "0.5.8",
"@backstage/plugin-techdocs": "0.15.0",
"@backstage/plugin-techdocs-backend": "0.14.1",
"@backstage/plugin-techdocs-node": "0.11.11",
"@backstage/plugin-todo": "0.2.3",
"@backstage/plugin-todo-backend": "0.1.25",
"@backstage/plugin-user-settings": "0.4.0",
"@backstage/plugin-xcmetrics": "0.2.21"
},
"changesets": [
"beige-lies-pay",
"big-meals-fly",
"big-months-deliver",
"brave-brooms-tie",
"brown-points-impress",
"chilly-comics-jam",
"clever-garlics-rescue",
"curvy-forks-cross",
"dependabot-4014eb7",
"dependabot-ae5fb9c",
"dependabot-d2397d3",
"fair-ants-look",
"fair-roses-hide",
"fair-turtles-fetch",
"fifty-brooms-whisper",
"fuzzy-roses-swim",
"gentle-dancers-greet",
"great-hounds-allow",
"kind-experts-lay",
"late-pianos-attend",
"lazy-points-explain",
"many-coins-drive",
"many-swans-sort",
"many-tools-buy",
"mean-panthers-wonder",
"metal-glasses-join",
"modern-windows-brush",
"nasty-seahorses-bathe",
"neat-tools-design",
"new-books-protect",
"nice-windows-push",
"nine-frogs-yell",
"olive-emus-speak",
"olive-roses-sleep",
"pink-poets-grin",
"polite-apples-relax",
"popular-boxes-develop",
"popular-rats-return",
"pretty-vans-unite",
"proud-readers-nail",
"quiet-pens-wait",
"quiet-seals-fix",
"red-kiwis-divide",
"rich-ravens-clap",
"search-byta-namnet",
"search-common-people",
"search-talking-in-code",
"search-wellington-paranormal",
"shaggy-apricots-hug",
"shiny-eels-mix",
"silent-cats-kneel",
"slow-vans-rhyme",
"something-else-here",
"spotty-seals-press",
"spotty-swans-run",
"strong-beds-attack",
"strong-pandas-roll",
"swift-mails-sing",
"tasty-carpets-fold",
"techdocs-byta-namnet",
"techdocs-empty-office",
"techdocs-node-one",
"ten-queens-dance",
"ten-rats-join",
"tender-berries-lie",
"thick-games-dress",
"thick-gifts-cheat",
"twenty-birds-think",
"twenty-fireants-turn",
"twenty-planes-dress",
"two-mails-boil",
"warm-bananas-behave",
"weak-schools-wash",
"young-feet-flow"
]
}
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-kubernetes-backend': patch
---
refactor kubernetes fetcher
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog-backend-module-bitbucket': minor
---
Added package, moving out Bitbucket specific functionality from the catalog-backend
+3 -2
View File
@@ -24,7 +24,7 @@ backported
backporting
Bigtable
Billett
Bitbucket
bitbucket
Bitrise
Blackbox
bool
@@ -61,6 +61,7 @@ const
cookiecutter
cron
cronjobs
crontab
css
Datadog
dataflow
@@ -102,7 +103,7 @@ Firekube
Firestore
Fiverr
gitbeaker
GitHub
github
gitlab
GitLab
Gource
+4
View File
@@ -58,6 +58,10 @@ jobs:
- name: build
run: yarn backstage-cli repo build
- name: build embedded techdocs app
working-directory: packages/techdocs-cli-embedded-app
run: yarn build
# Prepares a nightly release version of any package with pending changesets
# Pre-mode is exited if case we're in it, otherwise it has no effect
- name: prepare nightly release
+1
View File
@@ -103,3 +103,4 @@ _If you're using Backstage in your organization, please try to add your company
| [Snyk](https://snyk.io/) | [@robcresswell](https://github.com/robcresswell) | Developer portal for software discovery, API documentation and templating |
| [Stilingue](https://www.stilingue.com.br/) | [@stilingue-inteligencia-artificial](https://github.com/Stilingue-IA), [@bbviana](https://github.com/bbviana) | Developer portal, services catalog and centralization of metrics from Grafana, Sentry and GCP. Furthermore, centralization of documentation and infra details like DNS, Network services, SSL and so on. |
| [TUI Group](https://www.tuigroup.com/) | [Simon Stamm](https://github.com/simonstamm), [Christian Rudolph](https://github.com/ChrisRu82) | Developer portal for all engineer to provide discoverability to all internal components, APIs, documentation and to scaffold templates with integrations to our internal tools extended by plugins from our community. |
| [Alliander](https://www.alliander.com/) | [@leon-vg](https://github.com/leon-vg), [@gieljl](https://github.com/gieljl), [@niekteg](https://github.com/niekteg) | Developer portal - software catalog, technical documentation, software templates, tech radar and exploration of used tools/services |
+2 -2
View File
@@ -133,9 +133,9 @@ familiar with. For other options, see
Go to
[https://github.com/settings/applications/new](https://github.com/settings/applications/new)
to create your OAuth App. The `Homepage URL` should point to Backstage's
frontend, in our tutorial it would be `http://127.0.0.1:3000`. The
frontend, in our tutorial it would be `http://localhost:3000`. The
`Authorization callback URL` will point to the auth backend, which will most
likely be `http://127.0.0.1:7007/api/auth/github/handler/frame`.
likely be `http://localhost:7007/api/auth/github/handler/frame`.
<p align='center'>
<img src='../assets/getting-started/gh-oauth.png' alt='Screenshot of the GitHub OAuth creation page' />
+8 -2
View File
@@ -27,8 +27,14 @@ catalog:
Note the `s3-discovery` type, as this is not a regular `url` processor.
As this processor is not one of the default providers, you will also need to add
the below to `packages/backend/src/plugins/catalog.ts`:
As this processor is not one of the default providers, you will first need to install the AWS catalog plugin:
```shell
cd packages/backend
yarn install @backstage/plugin-catalog-backend-module-aws
```
Once you've done that, you'll also need to add the segment below to `packages/backend/src/plugins/catalog.ts`:
```ts
/* packages/backend/src/plugins/catalog.ts */
+32 -7
View File
@@ -11,6 +11,34 @@ catalog entities located in Bitbucket. The processor will crawl your Bitbucket
account and register entities matching the configured path. This can be useful
as an alternative to static locations or manually adding things to the catalog.
## Installation
You will have to add the processor in the catalog initialization code of your
backend. The provider is not installed by default, therefore you have to add a
dependency to `@backstage/plugin-catalog-backend-module-bitbucket` to your backend
package.
```bash
# From your Backstage root directory
cd packages/backend
yarn add @backstage/plugin-catalog-backend-module-bitbucket
```
And then add the processor to your catalog builder:
```diff
// In packages/backend/src/plugins/catalog.ts
+import { BitbucketDiscoveryProcessor } from '@backstage/plugin-catalog-backend-module-bitbucket';
export default async function createPlugin(
env: PluginEnvironment,
): Promise<Router> {
const builder = await CatalogBuilder.create(env);
+ builder.addProcessor(
+ BitbucketDiscoveryProcessor.fromConfig(env.config, { logger: env.logger })
+ );
```
## Self-hosted Bitbucket Server
To use the discovery processor with a self-hosted Bitbucket Server, you'll need
@@ -137,14 +165,11 @@ matching repository is processed.
repository.
```typescript
const customRepositoryParser: BitbucketRepositoryParser =
async function* customRepositoryParser({ client, repository }) {
// Custom logic for interpret the matching repository.
// See defaultRepositoryParser for an example
};
const processor = BitbucketDiscoveryProcessor.fromConfig(env.config, {
parser: customRepositoryParser,
parser: async function* customRepositoryParser({ client, repository }) {
// Custom logic for interpreting the matching repository.
// See defaultRepositoryParser for an example
},
logger: env.logger,
});
```
+47
View File
@@ -12,6 +12,53 @@ organization and register entities matching the configured path. This can be
useful as an alternative to static locations or manually adding things to the
catalog.
## Installation
You will have to add the processors in the catalog initialization code of your
backend. They are not installed by default, therefore you have to add a
dependency to `@backstage/plugin-catalog-backend-module-github` to your backend
package.
```bash
# From your Backstage root directory
cd packages/backend
yarn add @backstage/plugin-catalog-backend-module-github
```
And then add the processors to your catalog builder:
```diff
// In packages/backend/src/plugins/catalog.ts
+import {
+ GithubDiscoveryProcessor,
+ GithubOrgReaderProcessor,
+} from '@backstage/plugin-catalog-backend-module-github';
+import {
+ ScmIntegrations,
+ DefaultGithubCredentialsProvider
+} from '@backstage/integration';
export default async function createPlugin(
env: PluginEnvironment,
): Promise<Router> {
const builder = await CatalogBuilder.create(env);
+ const integrations = ScmIntegrations.fromConfig(config);
+ const githubCredentialsProvider =
+ DefaultGithubCredentialsProvider.fromIntegrations(integrations);
+ builder.addProcessor(
+ GithubDiscoveryProcessor.fromConfig(config, {
+ logger,
+ githubCredentialsProvider,
+ }),
+ GithubOrgReaderProcessor.fromConfig(config, {
+ logger,
+ githubCredentialsProvider,
+ }),
+ );
```
## Configuration
To use the discovery processor, you'll need a GitHub integration
[set up](locations.md) with a `GITHUB_TOKEN`. Then you can add a location target
to the catalog configuration:
+1 -2
View File
@@ -19,8 +19,7 @@ entities that mirror your org setup.
## Installation
The processor that performs the import, `GithubOrgReaderProcessor`, comes
installed with the default setup of Backstage.
See the [discovery](discovery.md) article for installation instructions.
## Configuration
+1 -1
View File
@@ -47,7 +47,7 @@
"resolutions": {
"**/@graphql-codegen/cli/**/ws": "^7.4.6"
},
"version": "0.70.0",
"version": "0.71.0-next.0",
"dependencies": {
"@manypkg/get-packages": "^1.1.3",
"@microsoft/api-documenter": "^7.15.0",
+7
View File
@@ -1,5 +1,12 @@
# @backstage/app-defaults
## 0.2.1-next.0
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.9.1-next.0
## 0.2.0
### Minor Changes
+3 -3
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/app-defaults",
"description": "Provides the default wiring of a Backstage App",
"version": "0.2.0",
"version": "0.2.1-next.0",
"private": false,
"publishConfig": {
"access": "public",
@@ -33,7 +33,7 @@
"start": "backstage-cli package start"
},
"dependencies": {
"@backstage/core-components": "^0.9.0",
"@backstage/core-components": "^0.9.1-next.0",
"@backstage/core-app-api": "^0.6.0",
"@backstage/core-plugin-api": "^0.8.0",
"@backstage/plugin-permission-react": "^0.3.3",
@@ -46,7 +46,7 @@
"react": "^16.13.1 || ^17.0.0"
},
"devDependencies": {
"@backstage/cli": "^0.15.0",
"@backstage/cli": "^0.15.2-next.0",
"@backstage/test-utils": "^0.3.0",
"@testing-library/jest-dom": "^5.10.1",
"@testing-library/react": "^11.2.5",
+50
View File
@@ -1,5 +1,55 @@
# example-app
## 0.2.68-next.0
### Patch Changes
- Updated dependencies
- @backstage/cli@0.15.2-next.0
- @backstage/plugin-catalog@0.10.0-next.0
- @backstage/plugin-catalog-react@0.9.0-next.0
- @backstage/core-components@0.9.1-next.0
- @backstage/plugin-gcp-projects@0.3.21-next.0
- @backstage/plugin-scaffolder@0.15.0-next.0
- @backstage/catalog-model@0.13.0-next.0
- @backstage/plugin-rollbar@0.4.2-next.0
- @backstage/plugin-catalog-graph@0.2.14-next.0
- @backstage/plugin-catalog-import@0.8.5-next.0
- @backstage/plugin-explore@0.3.33-next.0
- @backstage/plugin-catalog-common@0.2.2-next.0
- @backstage/plugin-search-common@0.3.1-next.0
- @backstage/plugin-search@0.7.3-next.0
- @backstage/plugin-tech-radar@0.5.9-next.0
- @backstage/plugin-org@0.5.2-next.0
- @backstage/plugin-techdocs@0.15.1-next.0
- @backstage/app-defaults@0.2.1-next.0
- @backstage/integration-react@0.1.25-next.0
- @backstage/plugin-airbrake@0.3.2-next.0
- @backstage/plugin-apache-airflow@0.1.10-next.0
- @backstage/plugin-api-docs@0.8.2-next.0
- @backstage/plugin-azure-devops@0.1.18-next.0
- @backstage/plugin-badges@0.2.26-next.0
- @backstage/plugin-circleci@0.3.2-next.0
- @backstage/plugin-cloudbuild@0.3.2-next.0
- @backstage/plugin-code-coverage@0.1.29-next.0
- @backstage/plugin-cost-insights@0.11.24-next.0
- @backstage/plugin-github-actions@0.5.2-next.0
- @backstage/plugin-gocd@0.1.8-next.0
- @backstage/plugin-graphiql@0.2.34-next.0
- @backstage/plugin-home@0.4.18-next.0
- @backstage/plugin-jenkins@0.7.1-next.0
- @backstage/plugin-kafka@0.3.2-next.0
- @backstage/plugin-kubernetes@0.6.2-next.0
- @backstage/plugin-lighthouse@0.3.2-next.0
- @backstage/plugin-newrelic@0.3.20-next.0
- @backstage/plugin-newrelic-dashboard@0.1.10-next.0
- @backstage/plugin-pagerduty@0.3.29-next.0
- @backstage/plugin-sentry@0.3.40-next.0
- @backstage/plugin-shortcuts@0.2.3-next.0
- @backstage/plugin-tech-insights@0.1.12-next.0
- @backstage/plugin-todo@0.2.4-next.0
- @backstage/plugin-user-settings@0.4.1-next.0
## 0.2.67
### Patch Changes
+45 -45
View File
@@ -1,60 +1,60 @@
{
"name": "example-app",
"version": "0.2.67",
"version": "0.2.68-next.0",
"private": true,
"backstage": {
"role": "frontend"
},
"bundled": true,
"dependencies": {
"@backstage/app-defaults": "^0.2.0",
"@backstage/catalog-model": "^0.12.0",
"@backstage/cli": "^0.15.0",
"@backstage/app-defaults": "^0.2.1-next.0",
"@backstage/catalog-model": "^0.13.0-next.0",
"@backstage/cli": "^0.15.2-next.0",
"@backstage/core-app-api": "^0.6.0",
"@backstage/core-components": "^0.9.0",
"@backstage/core-components": "^0.9.1-next.0",
"@backstage/core-plugin-api": "^0.8.0",
"@backstage/integration-react": "^0.1.24",
"@backstage/plugin-airbrake": "^0.3.1",
"@backstage/plugin-api-docs": "^0.8.1",
"@backstage/plugin-azure-devops": "^0.1.17",
"@backstage/plugin-apache-airflow": "^0.1.9",
"@backstage/plugin-badges": "^0.2.25",
"@backstage/plugin-catalog": "^0.9.1",
"@backstage/plugin-catalog-common": "^0.2.0",
"@backstage/plugin-catalog-graph": "^0.2.13",
"@backstage/plugin-catalog-import": "^0.8.4",
"@backstage/plugin-catalog-react": "^0.8.0",
"@backstage/plugin-circleci": "^0.3.1",
"@backstage/plugin-cloudbuild": "^0.3.1",
"@backstage/plugin-code-coverage": "^0.1.28",
"@backstage/plugin-cost-insights": "^0.11.23",
"@backstage/plugin-explore": "^0.3.32",
"@backstage/integration-react": "^0.1.25-next.0",
"@backstage/plugin-airbrake": "^0.3.2-next.0",
"@backstage/plugin-api-docs": "^0.8.2-next.0",
"@backstage/plugin-azure-devops": "^0.1.18-next.0",
"@backstage/plugin-apache-airflow": "^0.1.10-next.0",
"@backstage/plugin-badges": "^0.2.26-next.0",
"@backstage/plugin-catalog": "^0.10.0-next.0",
"@backstage/plugin-catalog-common": "^0.2.2-next.0",
"@backstage/plugin-catalog-graph": "^0.2.14-next.0",
"@backstage/plugin-catalog-import": "^0.8.5-next.0",
"@backstage/plugin-catalog-react": "^0.9.0-next.0",
"@backstage/plugin-circleci": "^0.3.2-next.0",
"@backstage/plugin-cloudbuild": "^0.3.2-next.0",
"@backstage/plugin-code-coverage": "^0.1.29-next.0",
"@backstage/plugin-cost-insights": "^0.11.24-next.0",
"@backstage/plugin-explore": "^0.3.33-next.0",
"@backstage/plugin-gcp-projects": "^0.3.21-next.0",
"@backstage/plugin-gcalendar": "^0.1.0",
"@backstage/plugin-gcp-projects": "^0.3.20",
"@backstage/plugin-github-actions": "^0.5.1",
"@backstage/plugin-gocd": "^0.1.7",
"@backstage/plugin-graphiql": "^0.2.33",
"@backstage/plugin-home": "^0.4.17",
"@backstage/plugin-jenkins": "^0.7.0",
"@backstage/plugin-kafka": "^0.3.1",
"@backstage/plugin-kubernetes": "^0.6.1",
"@backstage/plugin-lighthouse": "^0.3.1",
"@backstage/plugin-newrelic": "^0.3.19",
"@backstage/plugin-newrelic-dashboard": "^0.1.9",
"@backstage/plugin-org": "^0.5.1",
"@backstage/plugin-pagerduty": "0.3.28",
"@backstage/plugin-github-actions": "^0.5.2-next.0",
"@backstage/plugin-gocd": "^0.1.8-next.0",
"@backstage/plugin-graphiql": "^0.2.34-next.0",
"@backstage/plugin-home": "^0.4.18-next.0",
"@backstage/plugin-jenkins": "^0.7.1-next.0",
"@backstage/plugin-kafka": "^0.3.2-next.0",
"@backstage/plugin-kubernetes": "^0.6.2-next.0",
"@backstage/plugin-lighthouse": "^0.3.2-next.0",
"@backstage/plugin-newrelic": "^0.3.20-next.0",
"@backstage/plugin-newrelic-dashboard": "^0.1.10-next.0",
"@backstage/plugin-org": "^0.5.2-next.0",
"@backstage/plugin-pagerduty": "0.3.29-next.0",
"@backstage/plugin-permission-react": "^0.3.3",
"@backstage/plugin-rollbar": "^0.4.1",
"@backstage/plugin-scaffolder": "^0.14.0",
"@backstage/plugin-search": "^0.7.2",
"@backstage/plugin-search-common": "^0.3.0",
"@backstage/plugin-sentry": "^0.3.39",
"@backstage/plugin-shortcuts": "^0.2.2",
"@backstage/plugin-tech-radar": "^0.5.8",
"@backstage/plugin-techdocs": "^0.15.0",
"@backstage/plugin-todo": "^0.2.3",
"@backstage/plugin-user-settings": "^0.4.0",
"@backstage/plugin-tech-insights": "^0.1.11",
"@backstage/plugin-rollbar": "^0.4.2-next.0",
"@backstage/plugin-scaffolder": "^0.15.0-next.0",
"@backstage/plugin-search": "^0.7.3-next.0",
"@backstage/plugin-search-common": "^0.3.1-next.0",
"@backstage/plugin-sentry": "^0.3.40-next.0",
"@backstage/plugin-shortcuts": "^0.2.3-next.0",
"@backstage/plugin-tech-radar": "^0.5.9-next.0",
"@backstage/plugin-techdocs": "^0.15.1-next.0",
"@backstage/plugin-todo": "^0.2.4-next.0",
"@backstage/plugin-user-settings": "^0.4.1-next.0",
"@backstage/plugin-tech-insights": "^0.1.12-next.0",
"@backstage/theme": "^0.2.15",
"@material-ui/core": "^4.12.2",
"@material-ui/icons": "^4.9.1",
+19
View File
@@ -1,5 +1,24 @@
# @backstage/backend-common
## 0.13.0-next.0
### Minor Changes
- ae9d6fb3df: **BREAKING**:
- Removed the (since way back) deprecated `createDatabase` export, please use `createDatabaseClient` instead.
- Removed the (since way back) deprecated `SingleConnectionDatabaseManager` export, please use `DatabaseManager` instead.
### Patch Changes
- ab7cd7d70e: Do some groundwork for supporting the `better-sqlite3` driver, to maybe eventually replace `@vscode/sqlite3` (#9912)
- e0a69ba49f: build(deps): bump `fs-extra` from 9.1.0 to 10.0.1
- aefca2a7e9: add support for ETag at `BitbucketUrlReader.readUrl`
- 3c2bc73901: Use `setupRequestMockHandlers` from `@backstage/backend-test-utils`
- b1aacbf96a: Applied the fix for the `/alpha` entry point resolution that was part of the `v0.70.1` release of Backstage.
- Updated dependencies
- @backstage/config-loader@0.9.7-next.0
## 0.12.1
### Patch Changes
+4 -4
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/backend-common",
"description": "Common functionality library for Backstage backends",
"version": "0.12.0",
"version": "0.13.0-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"private": false,
@@ -36,7 +36,7 @@
"dependencies": {
"@backstage/cli-common": "^0.1.8",
"@backstage/config": "^0.1.15",
"@backstage/config-loader": "^0.9.6",
"@backstage/config-loader": "^0.9.7-next.0",
"@backstage/errors": "^0.2.2",
"@backstage/integration": "^0.8.0",
"@backstage/types": "^0.1.3",
@@ -89,8 +89,8 @@
}
},
"devDependencies": {
"@backstage/backend-test-utils": "^0.1.20",
"@backstage/cli": "^0.15.0",
"@backstage/backend-test-utils": "^0.1.21-next.0",
"@backstage/cli": "^0.15.2-next.0",
"@types/archiver": "^5.1.0",
"@types/compression": "^1.7.0",
"@types/concat-stream": "^2.0.0",
+15
View File
@@ -1,5 +1,20 @@
# @backstage/backend-tasks
## 0.2.0-next.0
### Minor Changes
- 9461f73643: **BREAKING**: The `TaskDefinition` type has been removed, and replaced by the equal pair `TaskScheduleDefinition` and `TaskInvocationDefinition`. The interface for `PluginTaskScheduler.scheduleTask` stays effectively unchanged, so this only affects you if you use the actual types directly.
Added the method `PluginTaskScheduler.createTaskSchedule`, which returns a `TaskSchedule` wrapper that is convenient to pass down into classes that want to control their task invocations while the caller wants to retain control of the actual schedule chosen.
### Patch Changes
- ab7cd7d70e: Do some groundwork for supporting the `better-sqlite3` driver, to maybe eventually replace `@vscode/sqlite3` (#9912)
- 7290dda9d4: Relaxed the task ID requirement to now support any non-empty string
- Updated dependencies
- @backstage/backend-common@0.13.0-next.0
## 0.1.10
### Patch Changes
+1 -1
View File
@@ -22,7 +22,7 @@ const scheduler = TaskScheduler.fromConfig(rootConfig).forPlugin('my-plugin');
await scheduler.scheduleTask({
id: 'refresh_things',
frequency: Duration.fromObject({ minutes: 10 }),
frequency: { cron: '*/5 * * * *' }, // every 5 minutes, also supports Duration
timeout: Duration.fromObject({ minutes: 15 }),
fn: async () => {
await entityProvider.run();
+5 -1
View File
@@ -36,7 +36,11 @@ export interface TaskRunner {
// @public
export interface TaskScheduleDefinition {
frequency: Duration;
frequency:
| {
cron: string;
}
| Duration;
initialDelay?: Duration;
timeout: Duration;
}
+6 -4
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/backend-tasks",
"description": "Common distributed task management library for Backstage backends",
"version": "0.1.10",
"version": "0.2.0-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"private": false,
@@ -33,11 +33,12 @@
"start": "backstage-cli package start"
},
"dependencies": {
"@backstage/backend-common": "^0.12.0",
"@backstage/backend-common": "^0.13.0-next.0",
"@backstage/config": "^0.1.15",
"@backstage/errors": "^0.2.2",
"@backstage/types": "^0.1.3",
"@types/luxon": "^2.0.4",
"cron": "^1.8.2",
"knex": "^1.0.2",
"lodash": "^4.17.21",
"luxon": "^2.0.2",
@@ -47,8 +48,9 @@
"zod": "^3.9.5"
},
"devDependencies": {
"@backstage/backend-test-utils": "^0.1.20",
"@backstage/cli": "^0.15.0",
"@backstage/backend-test-utils": "^0.1.21-next.0",
"@backstage/cli": "^0.15.2-next.0",
"@types/cron": "^1.7.3",
"jest": "^26.0.1",
"wait-for-expect": "^3.0.2"
},
@@ -40,7 +40,7 @@ describe('PluginTaskManagerImpl', () => {
// TaskWorker.test.ts
describe('scheduleTask', () => {
it.each(databases.eachSupportedId())(
'can run the happy path, %p',
'can run the v1 happy path, %p',
async databaseId => {
const { manager } = await init(databaseId);
@@ -58,6 +58,26 @@ describe('PluginTaskManagerImpl', () => {
},
60_000,
);
it.each(databases.eachSupportedId())(
'can run the v2 happy path, %p',
async databaseId => {
const { manager } = await init(databaseId);
const fn = jest.fn();
await manager.scheduleTask({
id: 'task2',
timeout: Duration.fromMillis(5000),
frequency: { cron: '* * * * * *' },
fn,
});
await waitForExpect(() => {
expect(fn).toBeCalled();
});
},
60_000,
);
});
// This is just to test the wrapper code; most of the actual tests are in
@@ -40,13 +40,16 @@ export class PluginTaskSchedulerImpl implements PluginTaskScheduler {
validateId(task.id);
const knex = await this.databaseFactory();
const worker = new TaskWorker(task.id, task.fn, knex, this.logger);
await worker.start(
{
version: 1,
version: 2,
cadence:
'cron' in task.frequency
? task.frequency.cron
: task.frequency.toISO(),
initialDelayDuration: task.initialDelay?.toISO(),
recurringAtMostEveryDuration: task.frequency.toISO(),
timeoutAfterDuration: task.timeout.toISO(),
},
{
@@ -39,7 +39,7 @@ describe('TaskScheduler', () => {
}
it.each(databases.eachSupportedId())(
'can return a working plugin impl, %p',
'can return a working v1 plugin impl, %p',
async databaseId => {
const database = await createDatabase(databaseId);
const manager = new TaskScheduler(database, logger).forPlugin('test');
@@ -58,4 +58,25 @@ describe('TaskScheduler', () => {
},
60_000,
);
it.each(databases.eachSupportedId())(
'can return a working v2 plugin impl, %p',
async databaseId => {
const database = await createDatabase(databaseId);
const manager = new TaskScheduler(database, logger).forPlugin('test');
const fn = jest.fn();
await manager.scheduleTask({
id: 'task2',
timeout: Duration.fromMillis(5000),
frequency: { cron: '* * * * * *' },
fn,
});
await waitForExpect(() => {
expect(fn).toBeCalled();
});
},
60_000,
);
});
@@ -21,7 +21,7 @@ import waitForExpect from 'wait-for-expect';
import { migrateBackendTasks } from '../database/migrateBackendTasks';
import { DbTasksRow, DB_TASKS_TABLE } from '../database/tables';
import { TaskWorker } from './TaskWorker';
import { TaskSettingsV1 } from './types';
import { TaskSettingsV2 } from './types';
describe('TaskWorker', () => {
const logger = getVoidLogger();
@@ -42,11 +42,11 @@ describe('TaskWorker', () => {
const fn = jest.fn(
async () => new Promise<void>(resolve => setTimeout(resolve, 50)),
);
const settings: TaskSettingsV1 = {
version: 1,
initialDelayDuration: Duration.fromMillis(1000).toISO(),
recurringAtMostEveryDuration: Duration.fromMillis(2000).toISO(),
timeoutAfterDuration: Duration.fromMillis(60000).toISO(),
const settings: TaskSettingsV2 = {
version: 2,
cadence: '*/2 * * * * *',
initialDelayDuration: Duration.fromObject({ seconds: 1 }).toISO(),
timeoutAfterDuration: Duration.fromObject({ minutes: 1 }).toISO(),
};
const worker = new TaskWorker('task1', fn, knex, logger);
@@ -62,10 +62,10 @@ describe('TaskWorker', () => {
}),
);
expect(JSON.parse(row.settings_json)).toEqual({
version: 1,
version: 2,
cadence: '*/2 * * * * *',
initialDelayDuration: 'PT1S',
recurringAtMostEveryDuration: 'PT2S',
timeoutAfterDuration: 'PT60S',
timeoutAfterDuration: 'PT1M',
});
await expect(worker.findReadyTask()).resolves.toEqual({
@@ -125,10 +125,10 @@ describe('TaskWorker', () => {
await migrateBackendTasks(knex);
const fn = jest.fn().mockRejectedValue(new Error('failed'));
const settings: TaskSettingsV1 = {
version: 1,
const settings: TaskSettingsV2 = {
version: 2,
initialDelayDuration: undefined,
recurringAtMostEveryDuration: Duration.fromMillis(0).toISO(),
cadence: '* * * * * *',
timeoutAfterDuration: Duration.fromMillis(60000).toISO(),
};
@@ -151,18 +151,23 @@ describe('TaskWorker', () => {
const fn = jest.fn(
async () => new Promise<void>(resolve => setTimeout(resolve, 50)),
);
const settings: TaskSettingsV1 = {
version: 1,
recurringAtMostEveryDuration: Duration.fromMillis(0).toISO(),
const settings: TaskSettingsV2 = {
version: 2,
initialDelayDuration: undefined,
cadence: '* * * * * *',
timeoutAfterDuration: Duration.fromMillis(60000).toISO(),
};
const worker = new TaskWorker('task1', fn, knex, logger);
await worker.persistTask(settings);
await expect(worker.findReadyTask()).resolves.toEqual({
result: 'ready',
settings,
await waitForExpect(async () => {
await expect(worker.findReadyTask()).resolves.toEqual({
result: 'ready',
settings,
});
});
await expect(worker.tryClaimTask('ticket', settings)).resolves.toBe(true);
let row = (await knex<DbTasksRow>(DB_TASKS_TABLE))[0];
@@ -203,9 +208,10 @@ describe('TaskWorker', () => {
await migrateBackendTasks(knex);
const fn = jest.fn(async () => {});
const settings: TaskSettingsV1 = {
version: 1,
recurringAtMostEveryDuration: Duration.fromMillis(0).toISO(),
const settings: TaskSettingsV2 = {
version: 2,
initialDelayDuration: undefined,
cadence: '* * * * * *',
timeoutAfterDuration: Duration.fromMillis(60000).toISO(),
};
@@ -218,10 +224,14 @@ describe('TaskWorker', () => {
const worker2 = new TaskWorker('task2', fn, knex, logger);
await worker2.persistTask(settings);
await expect(worker2.findReadyTask()).resolves.toEqual({
result: 'ready',
settings,
await waitForExpect(async () => {
await expect(worker2.findReadyTask()).resolves.toEqual({
result: 'ready',
settings,
});
});
await knex<DbTasksRow>(DB_TASKS_TABLE).where('id', '=', 'task2').delete();
await expect(worker2.tryClaimTask('ticket', settings)).resolves.toBe(
false,
@@ -229,10 +239,14 @@ describe('TaskWorker', () => {
const worker3 = new TaskWorker('task3', fn, knex, logger);
await worker3.persistTask(settings);
await expect(worker3.findReadyTask()).resolves.toEqual({
result: 'ready',
settings,
await waitForExpect(async () => {
await expect(worker3.findReadyTask()).resolves.toEqual({
result: 'ready',
settings,
});
});
await expect(worker3.tryClaimTask('ticket', settings)).resolves.toBe(
true,
);
+56 -28
View File
@@ -15,13 +15,14 @@
*/
import { Knex } from 'knex';
import { Duration } from 'luxon';
import { DateTime, Duration } from 'luxon';
import { AbortSignal } from 'node-abort-controller';
import { v4 as uuid } from 'uuid';
import { Logger } from 'winston';
import { DbTasksRow, DB_TASKS_TABLE } from '../database/tables';
import { TaskFunction, TaskSettingsV1, taskSettingsV1Schema } from './types';
import { TaskFunction, TaskSettingsV2, taskSettingsV2Schema } from './types';
import { delegateAbortController, nowPlus, sleep } from './util';
import { CronTime } from 'cron';
const WORK_CHECK_FREQUENCY = Duration.fromObject({ seconds: 5 });
@@ -43,7 +44,7 @@ export class TaskWorker {
this.logger = logger;
}
async start(settings: TaskSettingsV1, options?: { signal?: AbortSignal }) {
async start(settings: TaskSettingsV2, options?: { signal?: AbortSignal }) {
try {
await this.persistTask(settings);
} catch (e) {
@@ -123,22 +124,39 @@ export class TaskWorker {
/**
* Perform the initial store of the task info
*/
async persistTask(settings: TaskSettingsV1) {
async persistTask(settings: TaskSettingsV2) {
// Perform an initial parse to ensure that we will definitely be able to
// read it back again.
taskSettingsV1Schema.parse(settings);
taskSettingsV2Schema.parse(settings);
const settingsJson = JSON.stringify(settings);
const startAt = settings.initialDelayDuration
? nowPlus(Duration.fromISO(settings.initialDelayDuration), this.knex)
: this.knex.fn.now();
const isCron = !settings?.cadence.startsWith('P');
let startAt: Knex.Raw;
if (settings.initialDelayDuration) {
startAt = nowPlus(
Duration.fromISO(settings.initialDelayDuration),
this.knex,
);
} else if (isCron) {
const time = new CronTime(settings.cadence)
.sendAt()
.add({ seconds: -1 }) // immediately, if "* * * * * *"
.toISOString();
startAt = this.knex.client.config.client.includes('sqlite3')
? this.knex.raw('datetime(?)', [time])
: this.knex.raw(`?`, [time]);
} else {
startAt = this.knex.fn.now();
}
this.logger.debug(`task: ${this.taskId} configured to run at: ${startAt}`);
// It's OK if the task already exists; if it does, just replace its
// settings with the new value and start the loop as usual.
await this.knex<DbTasksRow>(DB_TASKS_TABLE)
.insert({
id: this.taskId,
settings_json: settingsJson,
settings_json: JSON.stringify(settings),
next_run_start_at: startAt,
})
.onConflict('id')
@@ -151,15 +169,14 @@ export class TaskWorker {
async findReadyTask(): Promise<
| { result: 'not-ready-yet' }
| { result: 'abort' }
| { result: 'ready'; settings: TaskSettingsV1 }
| { result: 'ready'; settings: TaskSettingsV2 }
> {
const [row] = await this.knex<DbTasksRow>(DB_TASKS_TABLE)
.where('id', '=', this.taskId)
.select({
settingsJson: 'settings_json',
ready: this.knex.raw(
`
CASE
`CASE
WHEN next_run_start_at <= ? AND current_run_ticket IS NULL THEN TRUE
ELSE FALSE
END`,
@@ -177,7 +194,8 @@ export class TaskWorker {
}
try {
const settings = taskSettingsV1Schema.parse(JSON.parse(row.settingsJson));
const obj = JSON.parse(row.settingsJson);
const settings = taskSettingsV2Schema.parse(obj);
return { result: 'ready', settings };
} catch (e) {
this.logger.info(
@@ -199,7 +217,7 @@ export class TaskWorker {
*/
async tryClaimTask(
ticket: string,
settings: TaskSettingsV1,
settings: TaskSettingsV2,
): Promise<boolean> {
const startedAt = this.knex.fn.now();
const expiresAt = settings.timeoutAfterDuration
@@ -220,27 +238,37 @@ export class TaskWorker {
async tryReleaseTask(
ticket: string,
settings: TaskSettingsV1,
settings: TaskSettingsV2,
): Promise<boolean> {
const { recurringAtMostEveryDuration } = settings;
const isCron = !settings?.cadence.startsWith('P');
// We make an effort to keep the datetime calculations in the database
// layer, making sure to not have to perform conversions back and forth and
// leaning on the database as a central clock source
const dbNull = this.knex.raw('null');
const dt = Duration.fromISO(recurringAtMostEveryDuration).as('seconds');
const nextRun = this.knex.client.config.client.includes('sqlite3')
? this.knex.raw('datetime(next_run_start_at, ?)', [`+${dt} seconds`])
: this.knex.raw(`next_run_start_at + interval '${dt} seconds'`);
let nextRun: Knex.Raw;
if (isCron) {
const time = new CronTime(settings.cadence).sendAt().toISOString();
this.logger.debug(`task: ${this.taskId} will next occur around ${time}`);
nextRun = this.knex.client.config.client.includes('sqlite3')
? this.knex.raw('datetime(?)', [time])
: this.knex.raw(`?`, [time]);
} else {
const dt = Duration.fromISO(settings.cadence).as('seconds');
this.logger.debug(
`task: ${this.taskId} will next occur around ${DateTime.now().plus({
seconds: dt,
})}`,
);
nextRun = this.knex.client.config.client.includes('sqlite3')
? this.knex.raw('datetime(next_run_start_at, ?)', [`+${dt} seconds`])
: this.knex.raw(`next_run_start_at + interval '${dt} seconds'`);
}
const rows = await this.knex<DbTasksRow>(DB_TASKS_TABLE)
.where('id', '=', this.taskId)
.where('current_run_ticket', '=', ticket)
.update({
next_run_start_at: nextRun,
current_run_ticket: dbNull,
current_run_started_at: dbNull,
current_run_expires_at: dbNull,
current_run_ticket: this.knex.raw('null'),
current_run_started_at: this.knex.raw('null'),
current_run_expires_at: this.knex.raw('null'),
});
return rows === 1;
+84 -24
View File
@@ -17,6 +17,7 @@
import { Duration } from 'luxon';
import { AbortSignal } from 'node-abort-controller';
import { z } from 'zod';
import { CronTime } from 'cron';
/**
* A function that can be called as a scheduled task.
@@ -37,18 +38,8 @@ export type TaskFunction =
*/
export interface TaskScheduleDefinition {
/**
* The maximum amount of time that a single task invocation can take, before
* it's considered timed out and gets "released" such that a new invocation
* is permitted to take place (possibly, then, on a different worker).
*
* If no value is given for this field then there is no timeout. This is
* potentially dangerous.
*/
timeout: Duration;
/**
* The amount of time that should pass between task invocation starts.
* Essentially, this equals roughly how often you want the task to run.
* How often you want the task to run. The system does its best to avoid
* overlapping invocations.
*
* This is a best effort value; under some circumstances there can be
* deviations. For example, if the task runtime is longer than the frequency
@@ -56,12 +47,37 @@ export interface TaskScheduleDefinition {
* invocation of this task will be delayed until after the previous one
* finishes.
*
* The system does its best to avoid overlapping invocations.
*
* If no value is given for this field then the task will only be invoked
* once (on any worker) and then unscheduled automatically.
* This is a required field.
*/
frequency: Duration;
frequency:
| {
/**
* A crontab style string.
*
* Overview:
*
* ```
* second (optional)
* minute
* hour
* day of month
* month
* day of week
*
*
* * * * * * *
* ```
*/
cron: string;
}
| Duration;
/**
* The maximum amount of time that a single task invocation can take, before
* it's considered timed out and gets "released" such that a new invocation
* is permitted to take place (possibly, then, on a different worker).
*/
timeout: Duration;
/**
* The amount of time that should pass before the first invocation happens.
@@ -70,7 +86,7 @@ export interface TaskScheduleDefinition {
* compute jobs.
*
* If no value is given for this field then the first invocation will happen
* as soon as possible.
* as soon as possible according to the cadence.
*/
initialDelay?: Duration;
}
@@ -152,7 +168,21 @@ export interface PluginTaskScheduler {
function isValidOptionalDurationString(d: string | undefined): boolean {
try {
return !d || Duration.fromISO(d).isValid === true;
return !d || Duration.fromISO(d).isValid;
} catch {
return false;
}
}
function isValidCronFormat(c: string | undefined): boolean {
try {
if (!c) {
return false;
}
// parse cron format to ensure it's a valid format.
// eslint-disable-next-line no-new
new CronTime(c);
return true;
} catch {
return false;
}
@@ -163,16 +193,46 @@ export const taskSettingsV1Schema = z.object({
initialDelayDuration: z
.string()
.optional()
.refine(isValidOptionalDurationString, { message: 'Invalid duration' }),
.refine(isValidOptionalDurationString, {
message: 'Invalid duration, expecting ISO Period',
}),
recurringAtMostEveryDuration: z
.string()
.refine(isValidOptionalDurationString, { message: 'Invalid duration' }),
timeoutAfterDuration: z
.string()
.refine(isValidOptionalDurationString, { message: 'Invalid duration' }),
.refine(isValidOptionalDurationString, {
message: 'Invalid duration, expecting ISO Period',
}),
timeoutAfterDuration: z.string().refine(isValidOptionalDurationString, {
message: 'Invalid duration, expecting ISO Period',
}),
});
/**
* The properties that control a scheduled task (version 1).
*/
export type TaskSettingsV1 = z.infer<typeof taskSettingsV1Schema>;
export const taskSettingsV2Schema = z.object({
version: z.literal(2),
cadence: z
.string()
.refine(isValidCronFormat, { message: 'Invalid cron' })
.or(
z.string().refine(isValidOptionalDurationString, {
message: 'Invalid duration, expecting ISO Period',
}),
),
timeoutAfterDuration: z.string().refine(isValidOptionalDurationString, {
message: 'Invalid duration, expecting ISO Period',
}),
initialDelayDuration: z
.string()
.optional()
.refine(isValidOptionalDurationString, {
message: 'Invalid duration, expecting ISO Period',
}),
});
/**
* The properties that control a scheduled task (version 2).
*/
export type TaskSettingsV2 = z.infer<typeof taskSettingsV2Schema>;
+10
View File
@@ -1,5 +1,15 @@
# @backstage/backend-test-utils
## 0.1.21-next.0
### Patch Changes
- ab7cd7d70e: Do some groundwork for supporting the `better-sqlite3` driver, to maybe eventually replace `@vscode/sqlite3` (#9912)
- 3c2bc73901: Add `setupRequestMockHandlers` which sets up a good `msw` server foundation, copied from `@backstage/test-utils` which is a frontend-only package and should not be used from backends.
- Updated dependencies
- @backstage/backend-common@0.13.0-next.0
- @backstage/cli@0.15.2-next.0
## 0.1.20
### Patch Changes
+4 -4
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/backend-test-utils",
"description": "Test helpers library for Backstage backends",
"version": "0.1.20",
"version": "0.1.21-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"private": false,
@@ -34,8 +34,8 @@
"start": "backstage-cli package start"
},
"dependencies": {
"@backstage/backend-common": "^0.12.0",
"@backstage/cli": "^0.15.0",
"@backstage/backend-common": "^0.13.0-next.0",
"@backstage/cli": "^0.15.2-next.0",
"@backstage/config": "^0.1.15",
"@vscode/sqlite3": "^5.0.7",
"knex": "^1.0.2",
@@ -46,7 +46,7 @@
"uuid": "^8.0.0"
},
"devDependencies": {
"@backstage/cli": "^0.15.0",
"@backstage/cli": "^0.15.2-next.0",
"jest": "^26.0.1"
},
"files": [
+37
View File
@@ -1,5 +1,42 @@
# example-backend
## 0.2.68-next.0
### Patch Changes
- Updated dependencies
- @backstage/backend-common@0.13.0-next.0
- @backstage/backend-tasks@0.2.0-next.0
- @backstage/plugin-app-backend@0.3.29-next.0
- @backstage/plugin-auth-backend@0.12.1-next.0
- @backstage/plugin-catalog-backend@0.24.0-next.0
- @backstage/plugin-scaffolder-backend@0.18.0-next.0
- @backstage/plugin-scaffolder-backend-module-rails@0.3.4-next.0
- @backstage/plugin-kubernetes-backend@0.4.12-next.0
- @backstage/plugin-rollbar-backend@0.1.26-next.0
- @backstage/plugin-techdocs-backend@0.14.2-next.0
- @backstage/catalog-model@0.13.0-next.0
- @backstage/plugin-badges-backend@0.1.23-next.0
- @backstage/plugin-search-backend-module-elasticsearch@0.1.1-next.0
- @backstage/plugin-search-backend-module-pg@0.3.1-next.0
- @backstage/plugin-search-backend-node@0.5.1-next.0
- @backstage/plugin-search-backend@0.4.7-next.0
- @backstage/catalog-client@0.9.0-next.0
- @backstage/plugin-auth-node@0.1.5-next.0
- @backstage/plugin-azure-devops-backend@0.3.8-next.0
- @backstage/plugin-code-coverage-backend@0.1.27-next.0
- @backstage/plugin-graphql-backend@0.1.19-next.0
- @backstage/plugin-jenkins-backend@0.1.18-next.0
- @backstage/plugin-kafka-backend@0.2.22-next.0
- @backstage/plugin-permission-backend@0.5.4-next.0
- @backstage/plugin-permission-node@0.5.4-next.0
- @backstage/plugin-proxy-backend@0.2.23-next.0
- @backstage/plugin-tech-insights-backend@0.2.9-next.0
- @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.13-next.0
- @backstage/plugin-tech-insights-node@0.2.7-next.0
- @backstage/plugin-todo-backend@0.1.26-next.0
- example-app@0.2.68-next.0
## 0.2.67
### Patch Changes
+32 -32
View File
@@ -1,6 +1,6 @@
{
"name": "example-backend",
"version": "0.2.67",
"version": "0.2.68-next.0",
"main": "dist/index.cjs.js",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -27,39 +27,39 @@
"migrate:create": "knex migrate:make -x ts"
},
"dependencies": {
"@backstage/backend-common": "^0.12.0",
"@backstage/backend-tasks": "^0.1.10",
"@backstage/catalog-client": "^0.8.0",
"@backstage/catalog-model": "^0.12.0",
"@backstage/backend-common": "^0.13.0-next.0",
"@backstage/backend-tasks": "^0.2.0-next.0",
"@backstage/catalog-client": "^0.9.0-next.0",
"@backstage/catalog-model": "^0.13.0-next.0",
"@backstage/config": "^0.1.15",
"@backstage/integration": "^0.8.0",
"@backstage/plugin-app-backend": "^0.3.28",
"@backstage/plugin-auth-backend": "^0.12.0",
"@backstage/plugin-auth-node": "^0.1.4",
"@backstage/plugin-azure-devops-backend": "^0.3.7",
"@backstage/plugin-badges-backend": "^0.1.22",
"@backstage/plugin-catalog-backend": "^0.23.0",
"@backstage/plugin-code-coverage-backend": "^0.1.26",
"@backstage/plugin-graphql-backend": "^0.1.18",
"@backstage/plugin-jenkins-backend": "^0.1.17",
"@backstage/plugin-kubernetes-backend": "^0.4.11",
"@backstage/plugin-kafka-backend": "^0.2.21",
"@backstage/plugin-permission-backend": "^0.5.3",
"@backstage/plugin-app-backend": "^0.3.29-next.0",
"@backstage/plugin-auth-backend": "^0.12.1-next.0",
"@backstage/plugin-auth-node": "^0.1.5-next.0",
"@backstage/plugin-azure-devops-backend": "^0.3.8-next.0",
"@backstage/plugin-badges-backend": "^0.1.23-next.0",
"@backstage/plugin-catalog-backend": "^0.24.0-next.0",
"@backstage/plugin-code-coverage-backend": "^0.1.27-next.0",
"@backstage/plugin-graphql-backend": "^0.1.19-next.0",
"@backstage/plugin-jenkins-backend": "^0.1.18-next.0",
"@backstage/plugin-kubernetes-backend": "^0.4.12-next.0",
"@backstage/plugin-kafka-backend": "^0.2.22-next.0",
"@backstage/plugin-permission-backend": "^0.5.4-next.0",
"@backstage/plugin-permission-common": "^0.5.2",
"@backstage/plugin-permission-node": "^0.5.3",
"@backstage/plugin-proxy-backend": "^0.2.22",
"@backstage/plugin-rollbar-backend": "^0.1.25",
"@backstage/plugin-scaffolder-backend": "^0.17.3",
"@backstage/plugin-scaffolder-backend-module-rails": "^0.3.3",
"@backstage/plugin-search-backend": "^0.4.6",
"@backstage/plugin-search-backend-node": "^0.5.0",
"@backstage/plugin-search-backend-module-elasticsearch": "^0.1.0",
"@backstage/plugin-search-backend-module-pg": "^0.3.0",
"@backstage/plugin-techdocs-backend": "^0.14.1",
"@backstage/plugin-tech-insights-backend": "^0.2.8",
"@backstage/plugin-tech-insights-node": "^0.2.6",
"@backstage/plugin-tech-insights-backend-module-jsonfc": "^0.1.12",
"@backstage/plugin-todo-backend": "^0.1.25",
"@backstage/plugin-permission-node": "^0.5.4-next.0",
"@backstage/plugin-proxy-backend": "^0.2.23-next.0",
"@backstage/plugin-rollbar-backend": "^0.1.26-next.0",
"@backstage/plugin-scaffolder-backend": "^0.18.0-next.0",
"@backstage/plugin-scaffolder-backend-module-rails": "^0.3.4-next.0",
"@backstage/plugin-search-backend": "^0.4.7-next.0",
"@backstage/plugin-search-backend-node": "^0.5.1-next.0",
"@backstage/plugin-search-backend-module-elasticsearch": "^0.1.1-next.0",
"@backstage/plugin-search-backend-module-pg": "^0.3.1-next.0",
"@backstage/plugin-techdocs-backend": "^0.14.2-next.0",
"@backstage/plugin-tech-insights-backend": "^0.2.9-next.0",
"@backstage/plugin-tech-insights-node": "^0.2.7-next.0",
"@backstage/plugin-tech-insights-backend-module-jsonfc": "^0.1.13-next.0",
"@backstage/plugin-todo-backend": "^0.1.26-next.0",
"@gitbeaker/node": "^35.1.0",
"@octokit/rest": "^18.5.3",
"@vscode/sqlite3": "^5.0.7",
@@ -76,7 +76,7 @@
"winston": "^3.2.1"
},
"devDependencies": {
"@backstage/cli": "^0.15.0",
"@backstage/cli": "^0.15.2-next.0",
"@types/dockerode": "^3.3.0",
"@types/express": "^4.17.6",
"@types/express-serve-static-core": "^4.17.5"
+12
View File
@@ -1,5 +1,17 @@
# @backstage/catalog-client
## 0.9.0-next.0
### Minor Changes
- bf95bb806c: **BREAKING**: Removed previously deprecated `CatalogApi.getEntityByName`, please use `getEntityByRef` instead.
- a3eb3d2afa: **BREAKING**: Removed `CatalogClient.getLocationByEntity` and `CatalogClient.getOriginLocationByEntity` which had previously been deprecated. Please use `CatalogApi.getLocationByRef` instead. Note that this only affects you if you were using `CatalogClient` (the class) directly, rather than `CatalogApi` (the interface), since it has been removed from the interface in an earlier release.
### Patch Changes
- Updated dependencies
- @backstage/catalog-model@0.13.0-next.0
## 0.8.0
### Minor Changes
+3 -3
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/catalog-client",
"description": "An isomorphic client for the catalog backend",
"version": "0.8.0",
"version": "0.9.0-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -33,12 +33,12 @@
"clean": "backstage-cli package clean"
},
"dependencies": {
"@backstage/catalog-model": "^0.12.0",
"@backstage/catalog-model": "^0.13.0-next.0",
"@backstage/errors": "^0.2.2",
"cross-fetch": "^3.1.5"
},
"devDependencies": {
"@backstage/cli": "^0.15.0",
"@backstage/cli": "^0.15.2-next.0",
"@types/jest": "^26.0.7",
"msw": "^0.35.0"
},
+24
View File
@@ -1,5 +1,29 @@
# @backstage/catalog-model
## 0.13.0-next.0
### Minor Changes
- 51a9f8f122: **BREAKING**:
- Removed the previously deprecated type `EntityRef`. Please use `string` for stringified entity refs, `CompoundEntityRef` for compound kind-namespace-name triplet objects, or custom objects like `{ kind?: string; namespace?: string; name: string }` and similar if you have need for partial types.
- Removed the previously deprecated type `LocationSpec` type, which has been moved to `@backstage/plugin-catalog-backend`.
- Removed the previously deprecated function `parseEntityName`. Please use `parseEntityRef` instead.
- d1d488e371: **BREAKING**: The default validator for `metadata.tags` now permits the colon (`:`) character as well.
### Patch Changes
- 2952566587: Updated `parseEntityRef` to allow `:` and `/` in the entity name. For example, parsing `'component:default/foo:bar'` will result in the name `'foo:bar'`.
Note that only parsing `'foo:bar'` itself will result in the name `'bar'` and the entity kind `'foo'`, meaning this is a particularly nasty trap for user defined entity references. For this reason it is strongly discouraged to use names that contain these characters, and the catalog model does not allow it by default. However, this change now makes is possible to use these names if the default catalog validation is replaced, and in particular a high level of automation of the catalog population can limit issues that it might otherwise cause.
- b1aacbf96a: Applied the fix for the `/alpha` entry point resolution that was part of the `v0.70.1` release of Backstage.
- d1d488e371: **DEPRECATION**:
- Deprecated `CommonValidatorFunctions.isValidString`, please use `isNonEmptyString` instead which is equivalent but better named.
- Deprecated `CommonValidatorFunctions.isValidTag`, with no replacement. Its purpose was too specific and not reusable, so it will be removed.
## 0.12.1
### Patch Changes
+2 -2
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/catalog-model",
"description": "Types and validators that help describe the model of a Backstage Catalog",
"version": "0.12.0",
"version": "0.13.0-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -43,7 +43,7 @@
"uuid": "^8.0.0"
},
"devDependencies": {
"@backstage/cli": "^0.15.0",
"@backstage/cli": "^0.15.2-next.0",
"@types/jest": "^26.0.7",
"@types/json-schema": "^7.0.5",
"@types/lodash": "^4.14.151",
+26
View File
@@ -1,5 +1,31 @@
# @backstage/cli
## 0.15.2-next.0
### Patch Changes
- 2c528506aa: Added `--since <ref>` flag for `repo build` command.`
- d3d1b82198: chore(deps): bump `minimatch` from 5.0.0 to 5.0.1
- e0a69ba49f: build(deps): bump `fs-extra` from 9.1.0 to 10.0.1
- 44cc7c3b95: Added a new ESLint configuration setup for packages, which utilizes package roles to generate the correct configuration. The new configuration is available at `@backstage/cli/config/eslint-factory`.
Introduced a new `backstage-cli migrate package-lint-configs` command, which migrates old lint configurations to use `@backstage/cli/config/eslint-factory`.
- b1aacbf96a: Applied the fix from version `0.15.1` of this package, which was part of the `v0.70.1` release of Backstage.
- d2ecde959b: Package roles are now marked as stable and migration is encouraged. Please check out the [migration guide](https://backstage.io/docs/tutorials/package-role-migration).
The new `package`, `repo`, and `migrate` command categories are now marked as stable.
Marked all commands that are being replaced by the new `package` and `repo` commands as deprecated.
The package templates used by the `create` command have all been updated to use package roles.
- f06da37290: The backend development setup now ignores the `"browser"` and `"module"` entry points in `package.json`, and instead always uses `"main"`.
- 6a1fe077ad: Changed the logic for how modules are marked as external in the Rollup build of packages. Rather than only marking dependencies and build-in Node.js modules as external, all non-relative imports are now considered external.
- dc6002a7b9: The `--since` flag of repo commands now silently falls back to using the provided `ref` directly if no merge base is available.
- Updated dependencies
- @backstage/config-loader@0.9.7-next.0
## 0.15.1
### Patch Changes
+6 -6
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/cli",
"description": "CLI for developing Backstage plugins and apps",
"version": "0.15.0",
"version": "0.15.2-next.0",
"private": false,
"publishConfig": {
"access": "public"
@@ -33,7 +33,7 @@
"dependencies": {
"@backstage/cli-common": "^0.1.8",
"@backstage/config": "^0.1.15",
"@backstage/config-loader": "^0.9.6",
"@backstage/config-loader": "^0.9.7-next.0",
"@backstage/errors": "^0.2.2",
"@backstage/release-manifests": "^0.0.2",
"@backstage/types": "^0.1.3",
@@ -121,12 +121,12 @@
"zod": "^3.11.6"
},
"devDependencies": {
"@backstage/backend-common": "^0.12.0",
"@backstage/backend-common": "^0.13.0-next.0",
"@backstage/config": "^0.1.15",
"@backstage/core-components": "^0.9.0",
"@backstage/core-components": "^0.9.1-next.0",
"@backstage/core-plugin-api": "^0.8.0",
"@backstage/core-app-api": "^0.6.0",
"@backstage/dev-utils": "^0.2.24",
"@backstage/dev-utils": "^0.2.25-next.0",
"@backstage/test-utils": "^0.3.0",
"@backstage/theme": "^0.2.15",
"@types/diff": "^5.0.0",
@@ -137,7 +137,7 @@
"@types/minimatch": "^3.0.5",
"@types/mock-fs": "^4.13.0",
"@types/node": "^14.14.32",
"@types/npm-packlist": "^1.1.2",
"@types/npm-packlist": "^3.0.0",
"@types/recursive-readdir": "^2.2.0",
"@types/rollup-plugin-peer-deps-external": "^2.2.0",
"@types/rollup-plugin-postcss": "^3.1.4",
+7
View File
@@ -1,5 +1,12 @@
# @backstage/codemods
## 0.1.35-next.0
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.9.1-next.0
## 0.1.35
### Patch Changes
+2 -2
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/codemods",
"description": "A collection of codemods for Backstage projects",
"version": "0.1.34",
"version": "0.1.35-next.0",
"private": false,
"publishConfig": {
"access": "public",
@@ -36,7 +36,7 @@
"dependencies": {
"@backstage/cli-common": "^0.1.8",
"@backstage/core-app-api": "*",
"@backstage/core-components": "*",
"@backstage/core-components": "0.9.1-next.0",
"@backstage/core-plugin-api": "*",
"chalk": "^4.0.0",
"jscodeshift": "^0.13.0",
+6
View File
@@ -1,5 +1,11 @@
# @backstage/config-loader
## 0.9.7-next.0
### Patch Changes
- e0a69ba49f: build(deps): bump `fs-extra` from 9.1.0 to 10.0.1
## 0.9.6
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/config-loader",
"description": "Config loading functionality used by Backstage backend, and CLI",
"version": "0.9.6",
"version": "0.9.7-next.0",
"private": false,
"publishConfig": {
"access": "public",
+1 -1
View File
@@ -49,7 +49,7 @@
"react": "^16.13.1 || ^17.0.0"
},
"devDependencies": {
"@backstage/cli": "^0.15.0",
"@backstage/cli": "^0.15.2-next.0",
"@backstage/test-utils": "^0.3.0",
"@testing-library/jest-dom": "^5.10.1",
"@testing-library/react": "^11.2.5",
+7
View File
@@ -1,5 +1,12 @@
# @backstage/core-components
## 0.9.1-next.0
### Patch Changes
- 23568dd328: chore(deps): bump `@react-hookz/web` from 12.3.0 to 13.0.0
- 95667624c1: Add names to sidebar sub menu styles for customization
## 0.9.0
### Minor Changes
+2 -2
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/core-components",
"description": "Core components used by Backstage plugins and apps",
"version": "0.9.0",
"version": "0.9.1-next.0",
"private": false,
"publishConfig": {
"access": "public",
@@ -79,7 +79,7 @@
},
"devDependencies": {
"@backstage/core-app-api": "^0.6.0",
"@backstage/cli": "^0.15.0",
"@backstage/cli": "^0.15.2-next.0",
"@backstage/test-utils": "^0.3.0",
"@testing-library/jest-dom": "^5.10.1",
"@testing-library/react": "^11.2.5",
+1 -1
View File
@@ -46,7 +46,7 @@
"react": "^16.13.1 || ^17.0.0"
},
"devDependencies": {
"@backstage/cli": "^0.15.0",
"@backstage/cli": "^0.15.2-next.0",
"@backstage/core-app-api": "^0.6.0",
"@backstage/test-utils": "^0.3.0",
"@testing-library/jest-dom": "^5.10.1",
+68
View File
@@ -1,5 +1,73 @@
# @backstage/create-app
## 0.4.23-next.0
### Patch Changes
- f9c7bdd899: Builtin support for cookiecutter based templates has been removed from `@backstage/plugin-scaffolder-backend`. Due to this, the `containerRunner` argument to its `createRouter` has also been removed.
If you do not use cookiecutter templates and are fine with removing support from it in your own installation, update your `packages/backend/src/plugins/scaffolder.ts` file as follows:
```diff
-import { DockerContainerRunner } from '@backstage/backend-common';
import { CatalogClient } from '@backstage/catalog-client';
import { createRouter } from '@backstage/plugin-scaffolder-backend';
-import Docker from 'dockerode';
import { Router } from 'express';
import type { PluginEnvironment } from '../types';
export default async function createPlugin({
reader,
discovery,
}: PluginEnvironment): Promise<Router> {
- const dockerClient = new Docker();
- const containerRunner = new DockerContainerRunner({ dockerClient });
-
const catalogClient = new CatalogClient({ discoveryApi: discovery });
-
return await createRouter({
- containerRunner,
logger,
config,
// ...
```
If you want to retain cookiecutter support, please use the `@backstage/plugin-scaffolder-backend-module-cookiecutter` package explicitly (see [its README](https://github.com/backstage/backstage/tree/master/plugins/scaffolder-backend-module-cookiecutter) for installation instructions).
- 8a57b6595b: Removed the `cookiecutter-golang` template from the default `create-app` install as we no longer provide `cookiecutter` action out of the box.
You can remove the template by removing the following lines from your `app-config.yaml` under `catalog.locations`:
```diff
- - type: url
- target: https://github.com/spotify/cookiecutter-golang/blob/master/template.yaml
- rules:
- - allow: [Template]
```
- e0a69ba49f: build(deps): bump `fs-extra` from 9.1.0 to 10.0.1
- 1201383b60: Updated the template to write the Backstage release version to `backstage.json`, rather than the version of `@backstage/create-app`. This change is applied automatically when running `backstage-cli versions:bump` in the latest version of the Backstage CLI.
- c543fe3ff2: Postgres-based search is now installed when PG is chosen as the desired database for Backstage.
There is no need to make this change in an existing Backstage backend. See [supported search engines](https://backstage.io/docs/features/search/search-engines) for details about production-ready search engines.
- 55150919ed: - **BREAKING**: Support for `backstage.io/v1beta2` Software Templates has been removed. Please migrate your legacy templates to the new `scaffolder.backstage.io/v1beta3` `apiVersion` by following the [migration guide](https://backstage.io/docs/features/software-templates/migrating-from-v1beta2-to-v1beta3)
- bde30664c4: Updated template to use package roles. To apply this change to an existing app, check out the [migration guide](https://backstage.io/docs/tutorials/package-role-migration).
Specifically the following scripts in the root `package.json` have also been updated:
```diff
- "build": "lerna run build",
+ "build": "backstage-cli repo build --all",
...
- "lint": "lerna run lint --since origin/master --",
- "lint:all": "lerna run lint --",
+ "lint": "backstage-cli repo lint --since origin/master",
+ "lint:all": "backstage-cli repo lint",
```
## 0.4.22
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/create-app",
"description": "A CLI that helps you create your own Backstage app",
"version": "0.4.22",
"version": "0.4.23-next.0",
"private": false,
"publishConfig": {
"access": "public"
+11
View File
@@ -1,5 +1,16 @@
# @backstage/dev-utils
## 0.2.25-next.0
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog-react@0.9.0-next.0
- @backstage/core-components@0.9.1-next.0
- @backstage/catalog-model@0.13.0-next.0
- @backstage/app-defaults@0.2.1-next.0
- @backstage/integration-react@0.1.25-next.0
## 0.2.24
### Patch Changes
+7 -7
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/dev-utils",
"description": "Utilities for developing Backstage plugins.",
"version": "0.2.24",
"version": "0.2.25-next.0",
"private": false,
"publishConfig": {
"access": "public",
@@ -33,13 +33,13 @@
"start": "backstage-cli package start"
},
"dependencies": {
"@backstage/app-defaults": "^0.2.0",
"@backstage/app-defaults": "^0.2.1-next.0",
"@backstage/core-app-api": "^0.6.0",
"@backstage/core-components": "^0.9.0",
"@backstage/core-components": "^0.9.1-next.0",
"@backstage/core-plugin-api": "^0.8.0",
"@backstage/catalog-model": "^0.12.0",
"@backstage/integration-react": "^0.1.24",
"@backstage/plugin-catalog-react": "^0.8.0",
"@backstage/catalog-model": "^0.13.0-next.0",
"@backstage/integration-react": "^0.1.25-next.0",
"@backstage/plugin-catalog-react": "^0.9.0-next.0",
"@backstage/test-utils": "^0.3.0",
"@backstage/theme": "^0.2.15",
"@material-ui/core": "^4.12.2",
@@ -59,7 +59,7 @@
"react-dom": "^16.13.1 || ^17.0.0"
},
"devDependencies": {
"@backstage/cli": "^0.15.0",
"@backstage/cli": "^0.15.2-next.0",
"@types/jest": "^26.0.7",
"@types/node": "^14.14.32"
},
+1 -1
View File
@@ -38,7 +38,7 @@
"serialize-error": "^8.0.1"
},
"devDependencies": {
"@backstage/cli": "^0.15.0",
"@backstage/cli": "^0.15.2-next.0",
"@types/jest": "^26.0.7"
},
"files": [
+7
View File
@@ -1,5 +1,12 @@
# @backstage/integration-react
## 0.1.25-next.0
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.9.1-next.0
## 0.1.24
### Patch Changes
+4 -4
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/integration-react",
"description": "Frontend package for managing integrations towards external systems",
"version": "0.1.24",
"version": "0.1.25-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -25,7 +25,7 @@
},
"dependencies": {
"@backstage/config": "^0.1.15",
"@backstage/core-components": "^0.9.0",
"@backstage/core-components": "^0.9.1-next.0",
"@backstage/core-plugin-api": "^0.8.0",
"@backstage/integration": "^0.8.0",
"@backstage/theme": "^0.2.15",
@@ -38,8 +38,8 @@
"react": "^16.13.1 || ^17.0.0"
},
"devDependencies": {
"@backstage/cli": "^0.15.0",
"@backstage/dev-utils": "^0.2.24",
"@backstage/cli": "^0.15.2-next.0",
"@backstage/dev-utils": "^0.2.25-next.0",
"@backstage/test-utils": "^0.3.0",
"@testing-library/jest-dom": "^5.10.1",
"@testing-library/react": "^11.2.5",
+2 -2
View File
@@ -42,8 +42,8 @@
"lodash": "^4.17.21"
},
"devDependencies": {
"@backstage/cli": "^0.15.0",
"@backstage/config-loader": "^0.9.6",
"@backstage/cli": "^0.15.2-next.0",
"@backstage/config-loader": "^0.9.7-next.0",
"@backstage/test-utils": "^0.3.0",
"@types/jest": "^26.0.7",
"@types/luxon": "^2.0.4",
+11
View File
@@ -1,5 +1,16 @@
# @backstage/search-common
## 0.3.1-next.0
### Patch Changes
- d52155466a: **DEPRECATION**
The `@backstage/search-common` package is being renamed `@backstage/plugin-search-common`. We may continue to publish changes to `@backstage/search-common` for a time, but will stop doing so in the near future. If you depend on this package, you should update your dependencies to point at the renamed package.
- Updated dependencies
- @backstage/plugin-search-common@0.3.1-next.0
## 0.3.0
### Minor Changes
+2 -2
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/search-common",
"description": "Common functionalities for Search, to be shared between various search-enabled plugins",
"version": "0.3.0",
"version": "0.3.1-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"private": false,
@@ -39,7 +39,7 @@
"url": "https://github.com/backstage/backstage/issues"
},
"dependencies": {
"@backstage/plugin-search-common": "^0.3.0"
"@backstage/plugin-search-common": "^0.3.1-next.0"
},
"devDependencies": {},
"jest": {
@@ -1,5 +1,18 @@
# techdocs-cli-embedded-app
## 0.2.67-next.0
### Patch Changes
- Updated dependencies
- @backstage/cli@0.15.2-next.0
- @backstage/plugin-catalog@0.10.0-next.0
- @backstage/core-components@0.9.1-next.0
- @backstage/catalog-model@0.13.0-next.0
- @backstage/plugin-techdocs@0.15.1-next.0
- @backstage/app-defaults@0.2.1-next.0
- @backstage/integration-react@0.1.25-next.0
## 0.2.66
### Patch Changes
@@ -1,22 +1,22 @@
{
"name": "techdocs-cli-embedded-app",
"version": "0.2.66",
"version": "0.2.67-next.0",
"private": true,
"backstage": {
"role": "frontend"
},
"bundled": true,
"dependencies": {
"@backstage/app-defaults": "^0.2.0",
"@backstage/catalog-model": "^0.12.0",
"@backstage/cli": "^0.15.0",
"@backstage/app-defaults": "^0.2.1-next.0",
"@backstage/catalog-model": "^0.13.0-next.0",
"@backstage/cli": "^0.15.2-next.0",
"@backstage/config": "^0.1.15",
"@backstage/core-app-api": "^0.6.0",
"@backstage/core-components": "^0.9.0",
"@backstage/core-components": "^0.9.1-next.0",
"@backstage/core-plugin-api": "^0.8.0",
"@backstage/integration-react": "^0.1.24",
"@backstage/plugin-catalog": "^0.9.1",
"@backstage/plugin-techdocs": "^0.15.0",
"@backstage/integration-react": "^0.1.25-next.0",
"@backstage/plugin-catalog": "^0.10.0-next.0",
"@backstage/plugin-techdocs": "^0.15.1-next.0",
"@backstage/test-utils": "^0.3.0",
"@backstage/theme": "^0.2.15",
"@material-ui/core": "^4.11.0",
@@ -29,7 +29,7 @@
"react-use": "^17.2.4"
},
"devDependencies": {
"@backstage/cli": "^0.15.0",
"@backstage/cli": "^0.15.2-next.0",
"@testing-library/jest-dom": "^5.10.1",
"@testing-library/react": "^11.2.5",
"@testing-library/user-event": "^13.1.8",
+11
View File
@@ -1,5 +1,16 @@
# @techdocs/cli
## 0.8.17-next.0
### Patch Changes
- e0a69ba49f: build(deps): bump `fs-extra` from 9.1.0 to 10.0.1
- 91bf1e6c1a: Use `@backstage/plugin-techdocs-node` package instead of `@backstage/techdocs-common`.
- Updated dependencies
- @backstage/backend-common@0.13.0-next.0
- @backstage/plugin-techdocs-node@0.11.12-next.0
- @backstage/catalog-model@0.13.0-next.0
## 0.8.16
### Patch Changes
+5 -5
View File
@@ -1,7 +1,7 @@
{
"name": "@techdocs/cli",
"description": "Utility CLI for managing TechDocs sites in Backstage.",
"version": "0.8.16",
"version": "0.8.17-next.0",
"private": false,
"publishConfig": {
"access": "public"
@@ -37,7 +37,7 @@
"techdocs-cli": "bin/techdocs-cli"
},
"devDependencies": {
"@backstage/cli": "^0.15.0",
"@backstage/cli": "^0.15.2-next.0",
"@types/commander": "^2.12.2",
"@types/fs-extra": "^9.0.6",
"@types/http-proxy": "^1.17.4",
@@ -62,11 +62,11 @@
"ext": "ts"
},
"dependencies": {
"@backstage/backend-common": "^0.12.0",
"@backstage/catalog-model": "^0.12.0",
"@backstage/backend-common": "^0.13.0-next.0",
"@backstage/catalog-model": "^0.13.0-next.0",
"@backstage/cli-common": "^0.1.8",
"@backstage/config": "^0.1.15",
"@backstage/plugin-techdocs-node": "^0.11.11",
"@backstage/plugin-techdocs-node": "^0.11.12-next.0",
"@types/dockerode": "^3.3.0",
"commander": "^6.1.0",
"dockerode": "^3.3.1",
+11
View File
@@ -1,5 +1,16 @@
# @backstage/techdocs-common
## 0.11.12-next.0
### Patch Changes
- cea6f10b97: **DEPRECATION**
The `@backstage/techdocs-common` package is being renamed `@backstage/plugin-techdocs-node`. We may continue to publish changes to `@backstage/techdocs-common` for a time, but will stop doing so in the near future. If you depend on this package, you should update your dependencies to point at the renamed package.
- Updated dependencies
- @backstage/plugin-techdocs-node@0.11.12-next.0
## 0.11.11
### Patch Changes
+2 -2
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/techdocs-common",
"description": "Common node.js functionalities for TechDocs, to be shared between techdocs-backend plugin and techdocs-cli",
"version": "0.11.11",
"version": "0.11.12-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"private": false,
@@ -40,7 +40,7 @@
"url": "https://github.com/backstage/backstage/issues"
},
"dependencies": {
"@backstage/plugin-techdocs-node": "^0.11.11"
"@backstage/plugin-techdocs-node": "^0.11.12-next.0"
},
"devDependencies": {},
"jest": {
+1 -1
View File
@@ -55,7 +55,7 @@
"react": "^16.13.1 || ^17.0.0"
},
"devDependencies": {
"@backstage/cli": "^0.15.0",
"@backstage/cli": "^0.15.2-next.0",
"@types/jest": "^26.0.7",
"@types/node": "^14.14.32",
"msw": "^0.35.0"
+1 -1
View File
@@ -36,7 +36,7 @@
"@material-ui/core": "^4.12.2"
},
"devDependencies": {
"@backstage/cli": "^0.15.0"
"@backstage/cli": "^0.15.2-next.0"
},
"files": [
"dist"
+1 -1
View File
@@ -34,7 +34,7 @@
},
"dependencies": {},
"devDependencies": {
"@backstage/cli": "^0.15.0",
"@backstage/cli": "^0.15.2-next.0",
"@types/zen-observable": "^0.8.0",
"zen-observable": "^0.8.15"
},
+1 -1
View File
@@ -37,7 +37,7 @@
"react": "^16.13.1 || ^17.0.0"
},
"devDependencies": {
"@backstage/cli": "^0.15.0",
"@backstage/cli": "^0.15.2-next.0",
"@testing-library/jest-dom": "^5.10.1",
"@testing-library/react": "^11.2.5",
"@testing-library/react-hooks": "^7.0.2"
+8
View File
@@ -1,5 +1,13 @@
# @backstage/plugin-airbrake-backend
## 0.2.2-next.0
### Patch Changes
- 4f79204c47: Added `backstage.role` to `package.json`
- Updated dependencies
- @backstage/backend-common@0.13.0-next.0
## 0.2.1
### Patch Changes
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-airbrake-backend",
"version": "0.2.1",
"version": "0.2.2-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -22,7 +22,7 @@
"clean": "backstage-cli package clean"
},
"dependencies": {
"@backstage/backend-common": "^0.12.0",
"@backstage/backend-common": "^0.13.0-next.0",
"@backstage/config": "^0.1.15",
"@types/express": "*",
"express": "^4.17.1",
@@ -33,7 +33,7 @@
"yn": "^4.0.0"
},
"devDependencies": {
"@backstage/cli": "^0.15.0",
"@backstage/cli": "^0.15.2-next.0",
"@types/http-proxy-middleware": "^0.19.3",
"@types/supertest": "^2.0.8",
"supertest": "^6.1.6",
+10
View File
@@ -1,5 +1,15 @@
# @backstage/plugin-airbrake
## 0.3.2-next.0
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog-react@0.9.0-next.0
- @backstage/core-components@0.9.1-next.0
- @backstage/catalog-model@0.13.0-next.0
- @backstage/dev-utils@0.2.25-next.0
## 0.3.1
### Patch Changes
+8 -8
View File
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-airbrake",
"version": "0.3.1",
"version": "0.3.2-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -23,11 +23,11 @@
"clean": "backstage-cli package clean"
},
"dependencies": {
"@backstage/catalog-model": "^0.12.0",
"@backstage/core-components": "^0.9.0",
"@backstage/catalog-model": "^0.13.0-next.0",
"@backstage/core-components": "^0.9.1-next.0",
"@backstage/core-plugin-api": "^0.8.0",
"@backstage/dev-utils": "^0.2.24",
"@backstage/plugin-catalog-react": "^0.8.0",
"@backstage/dev-utils": "^0.2.25-next.0",
"@backstage/plugin-catalog-react": "^0.9.0-next.0",
"@backstage/test-utils": "^0.3.0",
"@backstage/theme": "^0.2.15",
"@material-ui/core": "^4.12.2",
@@ -40,9 +40,9 @@
"react": "^16.13.1 || ^17.0.0"
},
"devDependencies": {
"@backstage/app-defaults": "^0.2.0",
"@backstage/cli": "^0.15.0",
"@backstage/dev-utils": "^0.2.24",
"@backstage/app-defaults": "^0.2.1-next.0",
"@backstage/cli": "^0.15.2-next.0",
"@backstage/dev-utils": "^0.2.25-next.0",
"@backstage/test-utils": "^0.3.0",
"@testing-library/jest-dom": "^5.10.1",
"@testing-library/react": "^11.2.5",
@@ -18,23 +18,21 @@ import React from 'react';
import { EntityAirbrakeWidget } from './EntityAirbrakeWidget';
import exampleData from '../../api/mock/airbrakeGroupsApiMock.json';
import {
MockErrorApi,
renderInTestApp,
setupRequestMockHandlers,
TestApiProvider,
} from '@backstage/test-utils';
import { createEntity } from '../../api';
import {
airbrakeApiRef,
createEntity,
localDiscoveryApi,
MockAirbrakeApi,
ProductionAirbrakeApi,
} from '../../api';
import { errorApiRef } from '@backstage/core-plugin-api';
import { rest } from 'msw';
import { setupServer } from 'msw/node';
describe('EntityAirbrakeContent', () => {
describe('EntityAirbrakeWidget', () => {
const worker = setupServer();
setupRequestMockHandlers(worker);
@@ -47,20 +45,25 @@ describe('EntityAirbrakeContent', () => {
expect(exampleData.groups.length).toBeGreaterThan(0);
for (const group of exampleData.groups) {
expect(
await widget.getByText(group.errors[0].message),
await widget.findByText(group.errors[0].message),
).toBeInTheDocument();
}
});
it('states that the annotation is missing if no project ID annotation is provided', async () => {
it('states that the annotation is missing if no project ID annotation is provided but does not error', async () => {
const widget = await renderInTestApp(
<TestApiProvider apis={[[airbrakeApiRef, new MockAirbrakeApi()]]}>
<TestApiProvider
apis={[[airbrakeApiRef, new ProductionAirbrakeApi(localDiscoveryApi)]]}
>
<EntityAirbrakeWidget entity={createEntity()} />
</TestApiProvider>,
);
await expect(
widget.findByText('Missing Annotation'),
).resolves.toBeInTheDocument();
expect(
widget.queryByText(/.*Failed fetching Airbrake groups.*/),
).not.toBeInTheDocument();
});
it('states that an error occurred if the API call fails', async () => {
@@ -72,14 +75,10 @@ describe('EntityAirbrakeContent', () => {
},
),
);
const mockErrorApi = new MockErrorApi({ collect: true });
const widget = await renderInTestApp(
<TestApiProvider
apis={[
[airbrakeApiRef, new ProductionAirbrakeApi(localDiscoveryApi)],
[errorApiRef, mockErrorApi],
]}
apis={[[airbrakeApiRef, new ProductionAirbrakeApi(localDiscoveryApi)]]}
>
<EntityAirbrakeWidget entity={createEntity(123)} />
</TestApiProvider>,
@@ -88,9 +87,10 @@ describe('EntityAirbrakeContent', () => {
await expect(
widget.findByText(/.*there was an issue communicating with Airbrake.*/),
).resolves.toBeInTheDocument();
expect(mockErrorApi.getErrors().length).toBe(1);
expect(mockErrorApi.getErrors()[0].error.message).toStrictEqual(
'Failed fetching Airbrake groups',
);
expect(
widget.getByRole('heading', {
name: /.*Failed fetching Airbrake groups.*/,
}),
).toBeInTheDocument();
});
});
@@ -14,10 +14,11 @@
* limitations under the License.
*/
import { Entity } from '@backstage/catalog-model';
import React, { useEffect } from 'react';
import React from 'react';
import { Grid, Typography } from '@material-ui/core';
import {
EmptyState,
ErrorPanel,
InfoCard,
MissingAnnotationEmptyState,
Progress,
@@ -25,7 +26,7 @@ import {
import hash from 'object-hash';
import { makeStyles } from '@material-ui/core/styles';
import { BackstageTheme } from '@backstage/theme';
import { ErrorApi, errorApiRef, useApi } from '@backstage/core-plugin-api';
import { useApi } from '@backstage/core-plugin-api';
import { airbrakeApiRef } from '../../api';
import useAsync from 'react-use/lib/useAsync';
import { AIRBRAKE_PROJECT_ID_ANNOTATION, useProjectId } from '../useProjectId';
@@ -40,55 +41,50 @@ export const EntityAirbrakeWidget = ({ entity }: { entity: Entity }) => {
const classes = useStyles();
const projectId = useProjectId(entity);
const errorApi = useApi<ErrorApi>(errorApiRef);
const airbrakeApi = useApi(airbrakeApiRef);
const { loading, value, error } = useAsync(
() => airbrakeApi.fetchGroups(projectId),
[airbrakeApi, projectId],
);
useEffect(() => {
if (error) {
errorApi.post(error);
const { loading, value, error } = useAsync(() => {
if (!projectId) {
return Promise.resolve(undefined);
}
}, [error, errorApi]);
if (loading || !projectId || error) {
return airbrakeApi.fetchGroups(projectId);
}, [airbrakeApi, projectId]);
if (!projectId) {
return (
<InfoCard title="Airbrake groups" variant="gridItem">
{loading && <Progress />}
{!loading && !projectId && (
<MissingAnnotationEmptyState
annotation={AIRBRAKE_PROJECT_ID_ANNOTATION}
/>
)}
{!loading && error && (
<EmptyState
missing="info"
title="No information to display"
description={`There is no Airbrake project with id '${projectId}' or there was an issue communicating with Airbrake.`}
/>
)}
</InfoCard>
<MissingAnnotationEmptyState
annotation={AIRBRAKE_PROJECT_ID_ANNOTATION}
/>
);
} else if (loading) {
return <Progress />;
} else if (value) {
return (
<Grid container spacing={3} direction="column">
{value.groups?.map(group => (
<Grid item key={group.id}>
{group.errors?.map(groupError => (
<InfoCard title={groupError.type} key={hash(groupError)}>
<Typography variant="body1" className={classes.multilineText}>
{groupError.message}
</Typography>
</InfoCard>
))}
</Grid>
))}
</Grid>
);
}
return (
<Grid container spacing={3} direction="column">
{value?.groups?.map(group => (
<Grid item key={group.id}>
{group.errors?.map(groupError => (
<InfoCard title={groupError.type} key={hash(groupError)}>
<Typography variant="body1" className={classes.multilineText}>
{groupError.message}
</Typography>
</InfoCard>
))}
</Grid>
))}
</Grid>
<>
{error && <ErrorPanel error={error} />}
<EmptyState
missing="info"
title="No information to display"
description={`There is no Airbrake project with id '${projectId}' or there was an issue communicating with Airbrake.`}
/>
</>
);
};
+9
View File
@@ -1,5 +1,14 @@
# @backstage/plugin-allure
## 0.1.18-next.0
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog-react@0.9.0-next.0
- @backstage/core-components@0.9.1-next.0
- @backstage/catalog-model@0.13.0-next.0
## 0.1.17
### Patch Changes
+6 -6
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-allure",
"description": "A Backstage plugin that integrates with Allure",
"version": "0.1.17",
"version": "0.1.18-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -25,10 +25,10 @@
"clean": "backstage-cli package clean"
},
"dependencies": {
"@backstage/catalog-model": "^0.12.0",
"@backstage/core-components": "^0.9.0",
"@backstage/catalog-model": "^0.13.0-next.0",
"@backstage/core-components": "^0.9.1-next.0",
"@backstage/core-plugin-api": "^0.8.0",
"@backstage/plugin-catalog-react": "^0.8.0",
"@backstage/plugin-catalog-react": "^0.9.0-next.0",
"@backstage/theme": "^0.2.15",
"@material-ui/core": "^4.12.2",
"@material-ui/icons": "^4.9.1",
@@ -40,9 +40,9 @@
"react": "^16.13.1 || ^17.0.0"
},
"devDependencies": {
"@backstage/cli": "^0.15.0",
"@backstage/cli": "^0.15.2-next.0",
"@backstage/core-app-api": "^0.6.0",
"@backstage/dev-utils": "^0.2.24",
"@backstage/dev-utils": "^0.2.25-next.0",
"@backstage/test-utils": "^0.3.0",
"@testing-library/jest-dom": "^5.10.1",
"@testing-library/react": "^11.2.5",
+7
View File
@@ -1,5 +1,12 @@
# @backstage/plugin-analytics-module-ga
## 0.1.13-next.0
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.9.1-next.0
## 0.1.12
### Patch Changes
+4 -4
View File
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-analytics-module-ga",
"version": "0.1.12",
"version": "0.1.13-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -25,7 +25,7 @@
},
"dependencies": {
"@backstage/config": "^0.1.15",
"@backstage/core-components": "^0.9.0",
"@backstage/core-components": "^0.9.1-next.0",
"@backstage/core-plugin-api": "^0.8.0",
"@backstage/theme": "^0.2.15",
"@material-ui/core": "^4.12.2",
@@ -38,9 +38,9 @@
"react": "^16.13.1 || ^17.0.0"
},
"devDependencies": {
"@backstage/cli": "^0.15.0",
"@backstage/cli": "^0.15.2-next.0",
"@backstage/core-app-api": "^0.6.0",
"@backstage/dev-utils": "^0.2.24",
"@backstage/dev-utils": "^0.2.25-next.0",
"@backstage/test-utils": "^0.3.0",
"@testing-library/jest-dom": "^5.10.1",
"@testing-library/react": "^11.2.5",
+7
View File
@@ -1,5 +1,12 @@
# @backstage/plugin-apache-airflow
## 0.1.10-next.0
### Patch Changes
- Updated dependencies
- @backstage/core-components@0.9.1-next.0
## 0.1.9
### Patch Changes
+4 -4
View File
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-apache-airflow",
"version": "0.1.9",
"version": "0.1.10-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -23,7 +23,7 @@
"clean": "backstage-cli package clean"
},
"dependencies": {
"@backstage/core-components": "^0.9.0",
"@backstage/core-components": "^0.9.1-next.0",
"@backstage/core-plugin-api": "^0.8.0",
"@material-ui/core": "^4.12.2",
"@material-ui/icons": "^4.9.1",
@@ -36,9 +36,9 @@
"react": "^16.13.1 || ^17.0.0"
},
"devDependencies": {
"@backstage/cli": "^0.15.0",
"@backstage/cli": "^0.15.2-next.0",
"@backstage/core-app-api": "^0.6.0",
"@backstage/dev-utils": "^0.2.24",
"@backstage/dev-utils": "^0.2.25-next.0",
"@backstage/test-utils": "^0.3.0",
"@testing-library/jest-dom": "^5.10.1",
"@testing-library/react": "^11.2.5",
+10
View File
@@ -1,5 +1,15 @@
# @backstage/plugin-api-docs
## 0.8.2-next.0
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog@0.10.0-next.0
- @backstage/plugin-catalog-react@0.9.0-next.0
- @backstage/core-components@0.9.1-next.0
- @backstage/catalog-model@0.13.0-next.0
## 0.8.1
### Patch Changes
+7 -7
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-api-docs",
"description": "A Backstage plugin that helps represent API entities in the frontend",
"version": "0.8.1",
"version": "0.8.2-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -34,11 +34,11 @@
},
"dependencies": {
"@asyncapi/react-component": "1.0.0-next.33",
"@backstage/catalog-model": "^0.12.0",
"@backstage/core-components": "^0.9.0",
"@backstage/catalog-model": "^0.13.0-next.0",
"@backstage/core-components": "^0.9.1-next.0",
"@backstage/core-plugin-api": "^0.8.0",
"@backstage/plugin-catalog": "^0.9.1",
"@backstage/plugin-catalog-react": "^0.8.0",
"@backstage/plugin-catalog": "^0.10.0-next.0",
"@backstage/plugin-catalog-react": "^0.9.0-next.0",
"@backstage/theme": "^0.2.15",
"@material-ui/core": "^4.12.2",
"@material-ui/icons": "^4.9.1",
@@ -56,9 +56,9 @@
"react": "^16.13.1 || ^17.0.0"
},
"devDependencies": {
"@backstage/cli": "^0.15.0",
"@backstage/cli": "^0.15.2-next.0",
"@backstage/core-app-api": "^0.6.0",
"@backstage/dev-utils": "^0.2.24",
"@backstage/dev-utils": "^0.2.25-next.0",
"@backstage/test-utils": "^0.3.0",
"@testing-library/jest-dom": "^5.10.1",
"@testing-library/react": "^11.2.5",
+10
View File
@@ -1,5 +1,15 @@
# @backstage/plugin-app-backend
## 0.3.29-next.0
### Patch Changes
- ab7cd7d70e: Do some groundwork for supporting the `better-sqlite3` driver, to maybe eventually replace `@vscode/sqlite3` (#9912)
- e0a69ba49f: build(deps): bump `fs-extra` from 9.1.0 to 10.0.1
- Updated dependencies
- @backstage/backend-common@0.13.0-next.0
- @backstage/config-loader@0.9.7-next.0
## 0.3.28
### Patch Changes
+5 -5
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-app-backend",
"description": "A Backstage backend plugin that serves the Backstage frontend app",
"version": "0.3.28",
"version": "0.3.29-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -33,8 +33,8 @@
"clean": "backstage-cli package clean"
},
"dependencies": {
"@backstage/backend-common": "^0.12.0",
"@backstage/config-loader": "^0.9.6",
"@backstage/backend-common": "^0.13.0-next.0",
"@backstage/config-loader": "^0.9.7-next.0",
"@backstage/config": "^0.1.15",
"@backstage/types": "^0.1.3",
"@types/express": "^4.17.6",
@@ -50,8 +50,8 @@
"yn": "^4.0.0"
},
"devDependencies": {
"@backstage/backend-test-utils": "^0.1.20",
"@backstage/cli": "^0.15.0",
"@backstage/backend-test-utils": "^0.1.21-next.0",
"@backstage/cli": "^0.15.2-next.0",
"@backstage/types": "^0.1.3",
"@types/supertest": "^2.0.8",
"mock-fs": "^5.1.0",
+14
View File
@@ -1,5 +1,19 @@
# @backstage/plugin-auth-backend
## 0.12.1-next.0
### Patch Changes
- ab7cd7d70e: Do some groundwork for supporting the `better-sqlite3` driver, to maybe eventually replace `@vscode/sqlite3` (#9912)
- e0a69ba49f: build(deps): bump `fs-extra` from 9.1.0 to 10.0.1
- bf95bb806c: Remove usages of now-removed `CatalogApi.getEntityByName`
- 3c2bc73901: Use `setupRequestMockHandlers` from `@backstage/backend-test-utils`
- Updated dependencies
- @backstage/backend-common@0.13.0-next.0
- @backstage/catalog-model@0.13.0-next.0
- @backstage/catalog-client@0.9.0-next.0
- @backstage/plugin-auth-node@0.1.5-next.0
## 0.12.0
### Minor Changes
+7 -7
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-auth-backend",
"description": "A Backstage backend plugin that handles authentication",
"version": "0.12.0",
"version": "0.12.1-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -33,10 +33,10 @@
"clean": "backstage-cli package clean"
},
"dependencies": {
"@backstage/plugin-auth-node": "^0.1.4",
"@backstage/backend-common": "^0.12.0",
"@backstage/catalog-client": "^0.8.0",
"@backstage/catalog-model": "^0.12.0",
"@backstage/plugin-auth-node": "^0.1.5-next.0",
"@backstage/backend-common": "^0.13.0-next.0",
"@backstage/catalog-client": "^0.9.0-next.0",
"@backstage/catalog-model": "^0.13.0-next.0",
"@backstage/config": "^0.1.15",
"@backstage/errors": "^0.2.2",
"@backstage/types": "^0.1.3",
@@ -76,8 +76,8 @@
"yn": "^4.0.0"
},
"devDependencies": {
"@backstage/backend-test-utils": "^0.1.20",
"@backstage/cli": "^0.15.0",
"@backstage/backend-test-utils": "^0.1.21-next.0",
"@backstage/cli": "^0.15.2-next.0",
"@types/body-parser": "^1.19.0",
"@types/cookie-parser": "^1.4.2",
"@types/express-session": "^1.17.2",
+8
View File
@@ -1,5 +1,13 @@
# @backstage/plugin-auth-node
## 0.1.5-next.0
### Patch Changes
- Updated dependencies
- @backstage/backend-common@0.13.0-next.0
- @backstage/catalog-model@0.13.0-next.0
## 0.1.4
### Patch Changes
+4 -4
View File
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-auth-node",
"version": "0.1.4",
"version": "0.1.5-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -23,8 +23,8 @@
"start": "backstage-cli package start"
},
"dependencies": {
"@backstage/backend-common": "^0.12.0",
"@backstage/catalog-model": "^0.12.0",
"@backstage/backend-common": "^0.13.0-next.0",
"@backstage/catalog-model": "^0.13.0-next.0",
"@backstage/config": "^0.1.15",
"@backstage/errors": "^0.2.2",
"jose": "^1.27.1",
@@ -32,7 +32,7 @@
"winston": "^3.2.1"
},
"devDependencies": {
"@backstage/cli": "^0.15.0",
"@backstage/cli": "^0.15.2-next.0",
"msw": "^0.35.0",
"uuid": "^8.0.0"
},
@@ -1,5 +1,12 @@
# @backstage/plugin-azure-devops-backend
## 0.3.8-next.0
### Patch Changes
- Updated dependencies
- @backstage/backend-common@0.13.0-next.0
## 0.3.7
### Patch Changes
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-azure-devops-backend",
"version": "0.3.7",
"version": "0.3.8-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -23,7 +23,7 @@
"clean": "backstage-cli package clean"
},
"dependencies": {
"@backstage/backend-common": "^0.12.0",
"@backstage/backend-common": "^0.13.0-next.0",
"@backstage/config": "^0.1.15",
"@backstage/plugin-azure-devops-common": "^0.2.2",
"@types/express": "^4.17.6",
@@ -35,7 +35,7 @@
"yn": "^4.0.0"
},
"devDependencies": {
"@backstage/cli": "^0.15.0",
"@backstage/cli": "^0.15.2-next.0",
"@types/supertest": "^2.0.8",
"supertest": "^6.1.6",
"msw": "^0.35.0"
+1 -1
View File
@@ -32,7 +32,7 @@
"clean": "backstage-cli package clean"
},
"devDependencies": {
"@backstage/cli": "^0.15.0"
"@backstage/cli": "^0.15.2-next.0"
},
"files": [
"dist"
+9
View File
@@ -1,5 +1,14 @@
# @backstage/plugin-azure-devops
## 0.1.18-next.0
### Patch Changes
- Updated dependencies
- @backstage/plugin-catalog-react@0.9.0-next.0
- @backstage/core-components@0.9.1-next.0
- @backstage/catalog-model@0.13.0-next.0
## 0.1.17
### Patch Changes
+6 -6
View File
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-azure-devops",
"version": "0.1.17",
"version": "0.1.18-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -30,12 +30,12 @@
"clean": "backstage-cli package clean"
},
"dependencies": {
"@backstage/catalog-model": "^0.12.0",
"@backstage/core-components": "^0.9.0",
"@backstage/catalog-model": "^0.13.0-next.0",
"@backstage/core-components": "^0.9.1-next.0",
"@backstage/core-plugin-api": "^0.8.0",
"@backstage/errors": "^0.2.2",
"@backstage/plugin-azure-devops-common": "^0.2.2",
"@backstage/plugin-catalog-react": "^0.8.0",
"@backstage/plugin-catalog-react": "^0.9.0-next.0",
"@backstage/theme": "^0.2.15",
"@material-ui/core": "^4.12.2",
"@material-ui/icons": "^4.9.1",
@@ -49,9 +49,9 @@
"react": "^16.13.1 || ^17.0.0"
},
"devDependencies": {
"@backstage/cli": "^0.15.0",
"@backstage/cli": "^0.15.2-next.0",
"@backstage/core-app-api": "^0.6.0",
"@backstage/dev-utils": "^0.2.24",
"@backstage/dev-utils": "^0.2.25-next.0",
"@backstage/test-utils": "^0.3.0",
"@testing-library/jest-dom": "^5.10.1",
"@testing-library/react": "^11.2.5",
+10
View File
@@ -1,5 +1,15 @@
# @backstage/plugin-badges-backend
## 0.1.23-next.0
### Patch Changes
- bf95bb806c: Remove usages of now-removed `CatalogApi.getEntityByName`
- Updated dependencies
- @backstage/backend-common@0.13.0-next.0
- @backstage/catalog-model@0.13.0-next.0
- @backstage/catalog-client@0.9.0-next.0
## 0.1.22
### Patch Changes
+5 -5
View File
@@ -1,7 +1,7 @@
{
"name": "@backstage/plugin-badges-backend",
"description": "A Backstage backend plugin that generates README badges for your entities",
"version": "0.1.22",
"version": "0.1.23-next.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -34,9 +34,9 @@
"clean": "backstage-cli package clean"
},
"dependencies": {
"@backstage/backend-common": "^0.12.0",
"@backstage/catalog-client": "^0.8.0",
"@backstage/catalog-model": "^0.12.0",
"@backstage/backend-common": "^0.13.0-next.0",
"@backstage/catalog-client": "^0.9.0-next.0",
"@backstage/catalog-model": "^0.13.0-next.0",
"@backstage/config": "^0.1.15",
"@backstage/errors": "^0.2.2",
"@types/express": "^4.17.6",
@@ -48,7 +48,7 @@
"yn": "^4.0.0"
},
"devDependencies": {
"@backstage/cli": "^0.15.0",
"@backstage/cli": "^0.15.2-next.0",
"@types/supertest": "^2.0.8",
"supertest": "^6.1.3"
},

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