From 1b3e2db75ff5d30c57792b925e297f385db33729 Mon Sep 17 00:00:00 2001 From: Himanshu Mishra Date: Wed, 18 Nov 2020 22:44:57 +0100 Subject: [PATCH 1/3] TechDocs: Add basic and production deployment architecture diagrams --- .../techdocs/architecture-basic.drawio.svg | 462 ++++++++++++++++++ .../architecture-recommended.drawio.svg | 391 +++++++++++++++ docs/assets/techdocs/techdocs_big_picture.png | Bin 113762 -> 0 bytes docs/features/techdocs/architecture.md | 39 +- 4 files changed, 891 insertions(+), 1 deletion(-) create mode 100644 docs/assets/techdocs/architecture-basic.drawio.svg create mode 100644 docs/assets/techdocs/architecture-recommended.drawio.svg delete mode 100644 docs/assets/techdocs/techdocs_big_picture.png diff --git a/docs/assets/techdocs/architecture-basic.drawio.svg b/docs/assets/techdocs/architecture-basic.drawio.svg new file mode 100644 index 0000000000..8e3be76f8b --- /dev/null +++ b/docs/assets/techdocs/architecture-basic.drawio.svg @@ -0,0 +1,462 @@ + + + + + + + + + + + + + + +
+
+
+ Repo 1 +
+ (with docs) +
+
+
+
+ + Repo 1... + +
+
+ + + + +
+
+
+ Repo 2 +
+ (with docs) +
+
+
+
+ + Repo 2... + +
+
+ + + + +
+
+
+ TechDocs plugin +
+
+
+
+ + TechDocs plugin + +
+
+ + + + + +
+
+
+ Request TechDocs site +
+
+
+
+ + Request TechDocs site + +
+
+ + + + + + + + + + + + + + + + + + +
+
+
+ Source code hosting +
+
+
+
+ + Source code hosting + +
+
+ + + + +
+
+
+ TechDocs Backend Plugin +
+
+
+
+ + TechDocs Backend Plugin + +
+
+ + + + +
+
+
+ (Stages) +
+
+
+
+ + (Stages) + +
+
+ + + + + + +
+
+
+ Prepare +
+
+
+
+ + Prepare + +
+
+ + + + + + +
+
+
+ Generate +
+
+
+
+ + Generate + +
+
+ + + + +
+
+
+ Publish +
+
+
+
+ + Publish + +
+
+ + + + + +
+
+
+ Local Filesystem +
+
+
+
+ + Local File... + +
+
+ + + + +
+
+
+ Fetch markdown files +
+
+
+
+ + Fetch mark... + +
+
+ + + + +
+
+
+ Build doc files using mkdocs +
+
+
+
+ + Build doc... + +
+
+ + + + +
+
+
+ Store generated static content +
+
+
+
+ + Store gene... + +
+
+ + + + +
+
+
+ TechDocs Basic (out-of-the-box) architecture +
+
+
+
+ + TechDocs Basic (out-of-the-box) architect... + +
+
+ + + + + + + + +
+
+
+ + Route handler + +
+
+
+
+ + Route hand... + +
+
+ + + + +
+
+
+ or +
+
+
+
+ + or + +
+
+ + + + +
+
+
+ Trigger new build if docs D.N.E. +
+ or are outdated +
+
+
+
+ + Trigger new build... + +
+
+ + + + +
+
+
+ Fetch files to render +
+
+
+
+ + Fetch files... + +
+
+ + + + + + + + + + + +
+
+
+ + GCP +
+ Bucket +
+
+
+
+
+ + GCP... + +
+
+ + + + +
+
+
+ Azure storage +
+
+
+
+ + Azure st... + +
+
+ + + + + +
+
+
+ Storage solutions +
+
+
+
+ + Storage solutions + +
+
+ + + + + + + + +
+
+
+ + Amazon S3 + +
+
+
+
+ + Amazon S3 + +
+
+ +
+ + + + + Viewer does not support full SVG 1.1 + + + +
diff --git a/docs/assets/techdocs/architecture-recommended.drawio.svg b/docs/assets/techdocs/architecture-recommended.drawio.svg new file mode 100644 index 0000000000..e3af4b6b5f --- /dev/null +++ b/docs/assets/techdocs/architecture-recommended.drawio.svg @@ -0,0 +1,391 @@ + + + + + + + + + + + + + + +
+
+
+ Repo 1 +
+ (with docs) +
+
+
+
+ + Repo 1... + +
+
+ + + + +
+
+
+ Repo 2 +
+ (with docs) +
+
+
+
+ + Repo 2... + +
+
+ + + + + + + + +
+
+
+ CI/CD System +
+
+
+
+ + CI/CD System + +
+
+ + + + + + +
+
+
+ techdocs-cli +
+
+
+
+ + techdocs-cli + +
+
+ + + + +
+
+
+ Cloud Storage +
+
+
+
+ + Cloud Storage + +
+
+ + + + + + +
+
+
+ + Amazon S3 + +
+
+
+
+ + Amazon S3 + +
+
+ + + + + + + + + +
+
+
+ + GCP +
+ Bucket +
+
+
+
+
+ + GCP... + +
+
+ + + + +
+
+
+ Azure storage +
+
+
+
+ + Azure st... + +
+
+ + + + +
+
+
+ New commit +
+
+
+
+ + New commit + +
+
+ + + + +
+
+
+ New commit +
+
+
+
+ + New commit + +
+
+ + + + +
+
+
+ Build docs +
+ & +
+ Store generated static content +
+
+
+
+ + Build docs... + +
+
+ + + + + + + +
+
+
+ TechDocs plugin +
+
+
+
+ + TechDocs plugin + +
+
+ + + + +
+
+
+ TechDocs Backend plugin +
+
+
+
+ + TechDocs Backend plu... + +
+
+ + + + + + +
+
+
+ Request TechDocs site +
+
+
+
+ + Request TechDocs site + +
+
+ + + + +
+
+
+ Fetch files to render +
+
+
+
+ + Fetch files to render + +
+
+ + + + + + + + + + + + + + + +
+
+
+ Source code hosting +
+
+
+
+ + Source code hosting + +
+
+ + + + + +
+
+
+ Caching +
+ (Optional) +
+
+
+
+ + Caching... + +
+
+ + + + + + +
+
+
+ Storage solutions +
+
+
+
+ + Storage solutions + +
+
+ + + + +
+
+
+ TechDocs Recommended deployment architecture +
+
+
+
+ + TechDocs Recommended deployment architecture + +
+
+
+ + + + + Viewer does not support full SVG 1.1 + + + +
diff --git a/docs/assets/techdocs/techdocs_big_picture.png b/docs/assets/techdocs/techdocs_big_picture.png deleted file mode 100644 index 8b8f7a2338100d49fff40371797eda704fdf4a51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113762 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. + +## Recommended deployment + +This is how we recommend deploying TechDocs for potential production use. + +![TechDocs Architecture diagram](../../assets/techdocs/architecture-recommended.drawio.svg) + +TechDocs Backend: Responsible for access control and sending files over to +TechDocs. + +Tokens (if possible): Read and Write tokens. + +## FAQ + +Q: Why don't use Backstage server to serve static files? A: Not scalable. +[Investigate more] + +# Future work + +Instead of storing frontend assets in cloud storage, it can only store texts and +images. And all of frontend rendering is handled by Backstage and TechDocs +reader. From 8fc3fc9629bc605521fc4d6641974f79852cb2d3 Mon Sep 17 00:00:00 2001 From: Himanshu Mishra Date: Fri, 20 Nov 2020 13:29:26 +0100 Subject: [PATCH 2/3] TechDocs: Document basic and recommended architecture --- docs/features/techdocs/architecture.md | 149 +++++++++++++++++++++---- mkdocs.yml | 6 +- plugins/techdocs/src/api.ts | 18 +++ plugins/techdocs/src/plugin.ts | 1 + plugins/techdocs/src/types.ts | 6 + 5 files changed, 157 insertions(+), 23 deletions(-) diff --git a/docs/features/techdocs/architecture.md b/docs/features/techdocs/architecture.md index 45a7713c39..01497b31bc 100644 --- a/docs/features/techdocs/architecture.md +++ b/docs/features/techdocs/architecture.md @@ -1,44 +1,153 @@ --- id: architecture -title: Architecture -description: Documentation on Architecture +title: TechDocs Architecture +description: Documentation on TechDocs Architecture --- ## Basic (out-of-the-box) When you deploy Backstage (with TechDocs enabled by default), you get a basic -out-of-the box experience. This is how the architecture of it looks. - -Note: See below for our recommended production architecture which takes care of -stability, scalability and speed. +out-of-the box experience. ![TechDocs Architecture diagram](../../assets/techdocs/architecture-basic.drawio.svg) -We store the timestamp in memory. +> Note: See below for our recommended deployment architecture which takes care +> of stability, scalability and speed. -Publishing to external storage is also possible. But status: none of the cloud -storage solutions are supported yet. +When you open a TechDocs site in Backstage, the +[TechDocs Reader](./concepts.md#techdocs-reader) makes a request to +`techdocs-backend` with the entity ID and the path of the current page you are +looking at. In response, it receives the static files (HTML, CSS, JSON, etc.) to +render on the page in TechDocs/Backstage. -Speed is a bottleneck if doc repositories are very large (>100MBs). +The static files consist of HTML, CSS and Images generated by MkDocs. We remove +all the Javascript before adding them to Backstage for security reasons. And +there are some additional techdocs metadata JSON files that TechDocs needs to +render a site. + +The TechDocs Reader then applies a list of "Transformers" (see +[Concepts](./concepts.md)) which modify the generated static HTML files for a +number of use cases e.g. Remove certain headers, filter out some HTML tags, etc. + +Currently, we use the Backstage server's (or techdocs-backend's) local file +system to store the generated files. Publishing to an external storage system +(AWS S3, GCS, etc.) is also possible, but has not been implemented yet. + +A word about `UrlReader` vs Git preparer - Right now, we have two ways to fetch +files from its source repository for docs site generation. 1. By using Git +and 2. By directly using Source control (GitHub, Azure, etc.) APIs. This work is +heavily in progress. Please reach out to us on Discord in the #docs-like-code +channel to talk about it. ## Recommended deployment -This is how we recommend deploying TechDocs for potential production use. +This is how we recommend deploying TechDocs in production environment. ![TechDocs Architecture diagram](../../assets/techdocs/architecture-recommended.drawio.svg) -TechDocs Backend: Responsible for access control and sending files over to -TechDocs. +The key difference in the recommended deployment approach is where the docs are +built. -Tokens (if possible): Read and Write tokens. +We assume each entity lives in a repository somewhere (GitHub, GitLab, etc.). We +recommend using a CI/CD pipeline with the repository that has a dedicated +step/job to build docs for TechDocs. The generated static files are then stored +in a cloud storage solution of your choice. +[Track progress here](https://github.com/backstage/backstage/issues/3096). -## FAQ +Similar to how it is done in the Basic setup, the TechDocs Reader requests +`techdocs-backend` plugin for the docs site. `techdocs-backend` then requests +your configured storage solution for the necessary files and returns them to +TechDocs Reader. -Q: Why don't use Backstage server to serve static files? A: Not scalable. -[Investigate more] +We will provide instructions, scripts and/or templates (e.g. GitHub actions) to +build docs in your CI/CD system. +[Track progress here.](https://github.com/backstage/backstage/issues/3400) You +will be able to use `techdocs-cli` to build docs and publish the generated docs +site files to your cloud storage system. + +Note about caching: We have noticed internally that some storage providers can +be quite slow, which is why we are recommending a cache that sits between the +TechDocs Reader and the Storage. + +_Feel free to suggest better ideas to us in #docs-like-code channel in Discord +or via a GitHub issue._ + +### Security consideration + +Our biggest security concern is managing the access to the docs in the cloud +storage. We also want to have only one security solution for all different types +of storage (GCS, AWS, custom SFTP server, etc.) Restricting access to the +storage and only allowing `techdocs-backend` to fetch files is a good way to +achieve this. + +This would also allow us to use the access control management Backstage when +that is ready. +[Track progress here.](https://github.com/backstage/backstage/issues/3218) + +In theory, you can directly enable TechDocs Reader to read from your storage. +But, you will have to think about how to do it without the docs being public and +how access to user groups is managed. + +For cloud storage access tokens, `techdocs-backend` only needs a token with Read +permissions. But in your CI/CD system, there needs to be a token with Write +permissions to publish the generated docs site files. + +## FAQs + +**Q: Why do you have separate "basic" and "recommended" deployment approaches?** + +A: The basic or out-of-the-box setup is what you get when you create a new app +or do a git clone of the Backstage repository. We want the first experience to +_just work magically_ so that you can have your first experience with TechDocs +which is smooth. However, if you decide to deploy Backstage/TechDocs for +production use, the basic setup would work but there are going to be downsides +as you scale with the number of documentation sites and sizes of them. So you +would want to make sure the deployment is as stable as possible. Hence there is +a recommended approach. There can be even more deployment approaches to TechDocs +and we welcome such "Alternative" ideas from the community. + +**Q: Why don't you recommend techdocs-backend local filesystem to serve static +files?** + +A: It would make scaling a Backstage instance harder. Think about the case where +we have distributed Backstage deployments. Using a separate file storage system +for TechDocs makes it easier to do some operations like delete a docs site and +wipe its contents. + +**Q: Why aren't docs built on the fly i.e. when users visits a page, generate +docs site in real-time?** + +A: Generating the content from Markdown on the fly is not optimal (although that +is how the basic out-of-the-box setup is implemented). Storage solutions act as +a cache for the generated static content. TechDocs is also currently built on +MkDocs which does not allow us to build docs per-page, so we would have to build +all docs for a entity on every request. # Future work -Instead of storing frontend assets in cloud storage, it can only store texts and -images. And all of frontend rendering is handled by Backstage and TechDocs -reader. +_Ideas here are far fetched and not in the project's milestone for near future +(~6 months)._ + +We currently depend on MkDocs to parse doc sites written in Markdown. And we +store the generated static assets and re-use it later to render in Backstage. A +better (futuristic) approach will be to directly parse whatever type of source +files you have in your docs repository and directly render in Backstage in +real-time. + +# Features status + +Status of all the features mentioned above. + +**In place ✅** + +- Basic setup with techdocs-backend file server as storage. + +**Work in progress 🚧** + +- Basic setup with cloud storage solution. + +**Not implemented yet ❌** + +- `techdocs-cli` is able to generate docs in CI/CD environment. +- `techdocs-cli` is able to publish docs site to any storage. +- `techdocs-backend` integration with Backstage access control management. diff --git a/mkdocs.yml b/mkdocs.yml index 8a4a78ddf1..1086259710 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,6 +1,9 @@ site_name: 'Backstage' site_description: 'Main documentation for Backstage features and platform APIs' +plugins: + - techdocs-core + nav: - Overview: - What is Backstage?: 'overview/what-is-backstage.md' @@ -111,6 +114,3 @@ nav: - 'support/support.md' - 'support/project-structure.md' - FAQ: FAQ.md - -plugins: - - techdocs-core diff --git a/plugins/techdocs/src/api.ts b/plugins/techdocs/src/api.ts index 31e4a10e4c..194ad14d30 100644 --- a/plugins/techdocs/src/api.ts +++ b/plugins/techdocs/src/api.ts @@ -41,6 +41,11 @@ export interface TechDocs { getMetadata(metadataType: string, entityId: ParsedEntityId): Promise; } +/** + * API to talk to techdocs-backend. + * + * @property {string} apiOrigin Set to techdocs.requestUrl as the URL for techdocs-backend API + */ export class TechDocsApi implements TechDocs { public apiOrigin: string; @@ -60,6 +65,11 @@ export class TechDocsApi implements TechDocs { } } +/** + * API which talks to TechDocs storage to fetch files to render. + * + * @property {string} apiOrigin Set to techdocs.requestUrl as the URL for techdocs-backend API + */ export class TechDocsStorageApi implements TechDocsStorage { public apiOrigin: string; @@ -67,6 +77,14 @@ export class TechDocsStorageApi implements TechDocsStorage { this.apiOrigin = apiOrigin; } + /** + * Fetch HTML content as text for an individual docs page in an entity's docs site. + * + * @param {ParsedEntityId} entityId Object containing entity data like name, namespace, etc. + * @param {string} path The unique path to an individual docs page e.g. overview/what-is-new + * @returns {string} HTML content of the docs page as string + * @throws {Error} Throws error when the page is not found. + */ async getEntityDocs(entityId: ParsedEntityId, path: string) { const { kind, namespace, name } = entityId; diff --git a/plugins/techdocs/src/plugin.ts b/plugins/techdocs/src/plugin.ts index ee2cab60fa..576ba0a292 100644 --- a/plugins/techdocs/src/plugin.ts +++ b/plugins/techdocs/src/plugin.ts @@ -57,6 +57,7 @@ export const rootCatalogDocsRouteRef = createRouteRef({ title: 'Docs', }); +// TODO: Use discovery API for frontend to get URL for techdocs-backend instead of requestUrl export const plugin = createPlugin({ id: 'techdocs', apis: [ diff --git a/plugins/techdocs/src/types.ts b/plugins/techdocs/src/types.ts index ec907cc6fa..341d3f0c92 100644 --- a/plugins/techdocs/src/types.ts +++ b/plugins/techdocs/src/types.ts @@ -14,6 +14,12 @@ * limitations under the License. */ +/** + * To uniquely identify an entity in Backstage. + * @property {string} kind + * @property {string} namespace + * @property {string} name + */ export type ParsedEntityId = { kind: string; namespace?: string; From 7d564164fdd07b0eab5ea851922b5a737d7117f7 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 24 Nov 2020 13:34:37 +0000 Subject: [PATCH 3/3] Version Packages --- .changeset/breezy-cobras-deny.md | 5 --- .changeset/chatty-radios-beam.md | 7 ---- .changeset/clever-moons-shake.md | 5 --- .changeset/cli-links.md | 5 --- .changeset/cost-insights-quiet-bikes-occur.md | 5 --- .../cost-insights-tiny-llamas-perform.md | 5 --- .changeset/curly-yaks-invite.md | 5 --- .changeset/dull-pans-sip.md | 6 --- .changeset/empty-kids-look.md | 5 --- .changeset/forty-buses-watch.md | 14 ------- .changeset/long-flowers-wink.md | 5 --- .changeset/mighty-cycles-impress.md | 5 --- .changeset/new-ladybugs-nail.md | 5 --- .changeset/orange-cherries-run.md | 5 --- .changeset/poor-mails-marry.md | 5 --- .changeset/small-worms-check.md | 6 --- .changeset/tame-rockets-explode.md | 5 --- .changeset/tidy-brooms-look.md | 5 --- packages/app/CHANGELOG.md | 37 ++++++++++++++++++ packages/app/package.json | 38 +++++++++---------- packages/backend-common/CHANGELOG.md | 7 ++++ packages/backend-common/package.json | 4 +- packages/backend/CHANGELOG.md | 21 ++++++++++ packages/backend/package.json | 20 +++++----- packages/catalog-client/CHANGELOG.md | 8 ++++ packages/catalog-client/package.json | 6 +-- packages/catalog-model/CHANGELOG.md | 18 +++++++++ packages/catalog-model/package.json | 4 +- packages/cli/CHANGELOG.md | 9 +++++ packages/cli/package.json | 6 +-- packages/core/CHANGELOG.md | 6 +++ packages/core/package.json | 4 +- packages/create-app/package.json | 32 ++++++++-------- plugins/api-docs/CHANGELOG.md | 11 ++++++ plugins/api-docs/package.json | 10 ++--- plugins/auth-backend/CHANGELOG.md | 12 ++++++ plugins/auth-backend/package.json | 10 ++--- plugins/catalog-backend/CHANGELOG.md | 22 +++++++++++ plugins/catalog-backend/package.json | 8 ++-- plugins/catalog-graphql/CHANGELOG.md | 11 ++++++ plugins/catalog-graphql/package.json | 8 ++-- plugins/catalog/CHANGELOG.md | 14 +++++++ plugins/catalog/package.json | 14 +++---- plugins/circleci/CHANGELOG.md | 12 ++++++ plugins/circleci/package.json | 10 ++--- plugins/cloudbuild/CHANGELOG.md | 11 ++++++ plugins/cloudbuild/package.json | 10 ++--- plugins/cost-insights/CHANGELOG.md | 9 +++++ plugins/cost-insights/package.json | 6 +-- plugins/github-actions/CHANGELOG.md | 11 ++++++ plugins/github-actions/package.json | 10 ++--- plugins/jenkins/CHANGELOG.md | 11 ++++++ plugins/jenkins/package.json | 10 ++--- plugins/kubernetes-backend/CHANGELOG.md | 15 ++++++++ plugins/kubernetes-backend/package.json | 8 ++-- plugins/kubernetes/CHANGELOG.md | 15 ++++++++ plugins/kubernetes/package.json | 10 ++--- plugins/lighthouse/CHANGELOG.md | 11 ++++++ plugins/lighthouse/package.json | 10 ++--- plugins/register-component/CHANGELOG.md | 12 ++++++ plugins/register-component/package.json | 10 ++--- plugins/rollbar/CHANGELOG.md | 11 ++++++ plugins/rollbar/package.json | 10 ++--- plugins/scaffolder-backend/CHANGELOG.md | 13 +++++++ plugins/scaffolder-backend/package.json | 8 ++-- plugins/scaffolder/CHANGELOG.md | 12 ++++++ plugins/scaffolder/package.json | 10 ++--- plugins/search/CHANGELOG.md | 13 +++++++ plugins/search/package.json | 10 ++--- plugins/sentry/CHANGELOG.md | 10 +++++ plugins/sentry/package.json | 8 ++-- plugins/sonarqube/CHANGELOG.md | 11 ++++++ plugins/sonarqube/package.json | 8 ++-- plugins/techdocs-backend/CHANGELOG.md | 11 ++++++ plugins/techdocs-backend/package.json | 8 ++-- plugins/techdocs/CHANGELOG.md | 11 ++++++ plugins/techdocs/package.json | 10 ++--- 77 files changed, 535 insertions(+), 263 deletions(-) delete mode 100644 .changeset/breezy-cobras-deny.md delete mode 100644 .changeset/chatty-radios-beam.md delete mode 100644 .changeset/clever-moons-shake.md delete mode 100644 .changeset/cli-links.md delete mode 100644 .changeset/cost-insights-quiet-bikes-occur.md delete mode 100644 .changeset/cost-insights-tiny-llamas-perform.md delete mode 100644 .changeset/curly-yaks-invite.md delete mode 100644 .changeset/dull-pans-sip.md delete mode 100644 .changeset/empty-kids-look.md delete mode 100644 .changeset/forty-buses-watch.md delete mode 100644 .changeset/long-flowers-wink.md delete mode 100644 .changeset/mighty-cycles-impress.md delete mode 100644 .changeset/new-ladybugs-nail.md delete mode 100644 .changeset/orange-cherries-run.md delete mode 100644 .changeset/poor-mails-marry.md delete mode 100644 .changeset/small-worms-check.md delete mode 100644 .changeset/tame-rockets-explode.md delete mode 100644 .changeset/tidy-brooms-look.md create mode 100644 plugins/search/CHANGELOG.md diff --git a/.changeset/breezy-cobras-deny.md b/.changeset/breezy-cobras-deny.md deleted file mode 100644 index 5f035c05ce..0000000000 --- a/.changeset/breezy-cobras-deny.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/core': patch ---- - -Clear sidebar search field once a search is executed diff --git a/.changeset/chatty-radios-beam.md b/.changeset/chatty-radios-beam.md deleted file mode 100644 index 91ad76ee88..0000000000 --- a/.changeset/chatty-radios-beam.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/catalog-model': minor -'@backstage/plugin-kubernetes': minor -'@backstage/plugin-kubernetes-backend': minor ---- - -add kubernetes selector to component model diff --git a/.changeset/clever-moons-shake.md b/.changeset/clever-moons-shake.md deleted file mode 100644 index 0fb6c690c2..0000000000 --- a/.changeset/clever-moons-shake.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-common': patch ---- - -Added readTree support to AzureUrlReader diff --git a/.changeset/cli-links.md b/.changeset/cli-links.md deleted file mode 100644 index 0a9779de93..0000000000 --- a/.changeset/cli-links.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -The CLI now detects and transforms linked packages. You can link in external packages by adding them to both the `lerna.json` and `package.json` workspace paths. diff --git a/.changeset/cost-insights-quiet-bikes-occur.md b/.changeset/cost-insights-quiet-bikes-occur.md deleted file mode 100644 index aac283bbd4..0000000000 --- a/.changeset/cost-insights-quiet-bikes-occur.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-cost-insights': patch ---- - -fix product icon configuration diff --git a/.changeset/cost-insights-tiny-llamas-perform.md b/.changeset/cost-insights-tiny-llamas-perform.md deleted file mode 100644 index c81c28f8f8..0000000000 --- a/.changeset/cost-insights-tiny-llamas-perform.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-cost-insights': patch ---- - -truncate large percentages > 1000% diff --git a/.changeset/curly-yaks-invite.md b/.changeset/curly-yaks-invite.md deleted file mode 100644 index b9191a3895..0000000000 --- a/.changeset/curly-yaks-invite.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend': patch ---- - -Add support for reading groups and users from the Microsoft Graph API. diff --git a/.changeset/dull-pans-sip.md b/.changeset/dull-pans-sip.md deleted file mode 100644 index 13616c1f8d..0000000000 --- a/.changeset/dull-pans-sip.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-scaffolder': patch -'@backstage/plugin-scaffolder-backend': patch ---- - -Move constructing the catalog-info.yaml URL for scaffolded components to the publishers diff --git a/.changeset/empty-kids-look.md b/.changeset/empty-kids-look.md deleted file mode 100644 index 680cd7f25c..0000000000 --- a/.changeset/empty-kids-look.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-register-component': patch ---- - -Remove catalog link on validate popup diff --git a/.changeset/forty-buses-watch.md b/.changeset/forty-buses-watch.md deleted file mode 100644 index 4074566fe7..0000000000 --- a/.changeset/forty-buses-watch.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -'@backstage/catalog-model': patch -'@backstage/plugin-catalog-backend': patch ---- - -Marked the `Group` entity fields `ancestors` and `descendants` for deprecation on Dec 6th, 2020. See https://github.com/backstage/backstage/issues/3049 for details. - -Code that consumes these fields should remove those usages as soon as possible. There is no current or planned replacement for these fields. - -The BuiltinKindsEntityProcessor has been updated to inject these fields as empty arrays if they are missing. Therefore, if you are on a catalog instance that uses the updated version of this code, you can start removing the fields from your source catalog-info.yaml data as well, without breaking validation. - -After Dec 6th, the fields will be removed from types and classes of the Backstage repository. At the first release after that, they will not be present in released packages either. - -If your catalog-info.yaml files still contain these fields after the deletion, they will still be valid and your ingestion will not break, but they won't be visible in the types for consuming code. diff --git a/.changeset/long-flowers-wink.md b/.changeset/long-flowers-wink.md deleted file mode 100644 index 7f9cf12315..0000000000 --- a/.changeset/long-flowers-wink.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-sonarqube': patch ---- - -Add configuration schema diff --git a/.changeset/mighty-cycles-impress.md b/.changeset/mighty-cycles-impress.md deleted file mode 100644 index 56ec35098f..0000000000 --- a/.changeset/mighty-cycles-impress.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-circleci': patch ---- - -Improved CircleCI builds table to show more information and relevant links diff --git a/.changeset/new-ladybugs-nail.md b/.changeset/new-ladybugs-nail.md deleted file mode 100644 index 5351b6dff3..0000000000 --- a/.changeset/new-ladybugs-nail.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -New lint rule to disallow assertions and promote `as` assertions. - @typescript-eslint/consistent-type-assertions diff --git a/.changeset/orange-cherries-run.md b/.changeset/orange-cherries-run.md deleted file mode 100644 index 3c06c27b47..0000000000 --- a/.changeset/orange-cherries-run.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -Add experimental backend:bundle command diff --git a/.changeset/poor-mails-marry.md b/.changeset/poor-mails-marry.md deleted file mode 100644 index fdc7e6f1b8..0000000000 --- a/.changeset/poor-mails-marry.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -Add new `versions:check` and `versions:bump` commands to simplify version management and avoid conflicts diff --git a/.changeset/small-worms-check.md b/.changeset/small-worms-check.md deleted file mode 100644 index e39265f8f9..0000000000 --- a/.changeset/small-worms-check.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'example-app': patch -'@backstage/plugin-search': patch ---- - -Using the search field in the sidebar now navigates to the search result page. diff --git a/.changeset/tame-rockets-explode.md b/.changeset/tame-rockets-explode.md deleted file mode 100644 index 123472701e..0000000000 --- a/.changeset/tame-rockets-explode.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-common': patch ---- - -Make integration host and url configurations visible in the frontend diff --git a/.changeset/tidy-brooms-look.md b/.changeset/tidy-brooms-look.md deleted file mode 100644 index f2c2a9064e..0000000000 --- a/.changeset/tidy-brooms-look.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': patch ---- - -Fix React entity YAML filename to new standard diff --git a/packages/app/CHANGELOG.md b/packages/app/CHANGELOG.md index ab00924a26..f70cd198b4 100644 --- a/packages/app/CHANGELOG.md +++ b/packages/app/CHANGELOG.md @@ -1,5 +1,42 @@ # example-app +## 0.2.3 + +### Patch Changes + +- 475fc0aaa: Using the search field in the sidebar now navigates to the search result page. +- Updated dependencies [475fc0aaa] +- Updated dependencies [1166fcc36] +- Updated dependencies [29a0ccab2] +- Updated dependencies [8e6728e25] +- Updated dependencies [c93a14b49] +- Updated dependencies [ef2831dde] +- Updated dependencies [2a71f4bab] +- Updated dependencies [1185919f3] +- Updated dependencies [a8de7f554] +- Updated dependencies [faf311c26] +- Updated dependencies [31d8b6979] +- Updated dependencies [991345969] +- Updated dependencies [475fc0aaa] + - @backstage/core@0.3.2 + - @backstage/catalog-model@0.3.0 + - @backstage/plugin-kubernetes@0.3.0 + - @backstage/cli@0.3.1 + - @backstage/plugin-cost-insights@0.4.1 + - @backstage/plugin-scaffolder@0.3.1 + - @backstage/plugin-register-component@0.2.2 + - @backstage/plugin-circleci@0.2.2 + - @backstage/plugin-search@0.2.1 + - @backstage/plugin-api-docs@0.2.2 + - @backstage/plugin-catalog@0.2.3 + - @backstage/plugin-cloudbuild@0.2.2 + - @backstage/plugin-github-actions@0.2.2 + - @backstage/plugin-jenkins@0.3.1 + - @backstage/plugin-lighthouse@0.2.3 + - @backstage/plugin-rollbar@0.2.3 + - @backstage/plugin-sentry@0.2.3 + - @backstage/plugin-techdocs@0.2.3 + ## 0.2.2 ### Patch Changes diff --git a/packages/app/package.json b/packages/app/package.json index 042fd47188..9e54005cd3 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,33 +1,33 @@ { "name": "example-app", - "version": "0.2.2", + "version": "0.2.3", "private": true, "bundled": true, "dependencies": { - "@backstage/catalog-model": "^0.2.0", - "@backstage/cli": "^0.3.0", - "@backstage/core": "^0.3.1", - "@backstage/plugin-api-docs": "^0.2.1", - "@backstage/plugin-catalog": "^0.2.2", - "@backstage/plugin-circleci": "^0.2.1", - "@backstage/plugin-cloudbuild": "^0.2.1", - "@backstage/plugin-cost-insights": "^0.4.0", + "@backstage/catalog-model": "^0.3.0", + "@backstage/cli": "^0.3.1", + "@backstage/core": "^0.3.2", + "@backstage/plugin-api-docs": "^0.2.2", + "@backstage/plugin-catalog": "^0.2.3", + "@backstage/plugin-circleci": "^0.2.2", + "@backstage/plugin-cloudbuild": "^0.2.2", + "@backstage/plugin-cost-insights": "^0.4.1", "@backstage/plugin-explore": "^0.2.1", "@backstage/plugin-gcp-projects": "^0.2.1", - "@backstage/plugin-github-actions": "^0.2.1", + "@backstage/plugin-github-actions": "^0.2.2", "@backstage/plugin-gitops-profiles": "^0.2.1", "@backstage/plugin-graphiql": "^0.2.1", - "@backstage/plugin-jenkins": "^0.3.0", - "@backstage/plugin-kubernetes": "^0.2.1", - "@backstage/plugin-lighthouse": "^0.2.2", + "@backstage/plugin-jenkins": "^0.3.1", + "@backstage/plugin-kubernetes": "^0.3.0", + "@backstage/plugin-lighthouse": "^0.2.3", "@backstage/plugin-newrelic": "^0.2.1", - "@backstage/plugin-register-component": "^0.2.1", - "@backstage/plugin-rollbar": "^0.2.2", - "@backstage/plugin-scaffolder": "^0.3.0", - "@backstage/plugin-sentry": "^0.2.2", - "@backstage/plugin-search": "^0.2.0", + "@backstage/plugin-register-component": "^0.2.2", + "@backstage/plugin-rollbar": "^0.2.3", + "@backstage/plugin-scaffolder": "^0.3.1", + "@backstage/plugin-sentry": "^0.2.3", + "@backstage/plugin-search": "^0.2.1", "@backstage/plugin-tech-radar": "^0.3.0", - "@backstage/plugin-techdocs": "^0.2.2", + "@backstage/plugin-techdocs": "^0.2.3", "@backstage/plugin-user-settings": "^0.2.2", "@backstage/plugin-welcome": "^0.2.1", "@backstage/test-utils": "^0.1.3", diff --git a/packages/backend-common/CHANGELOG.md b/packages/backend-common/CHANGELOG.md index 4822032c7f..793a554905 100644 --- a/packages/backend-common/CHANGELOG.md +++ b/packages/backend-common/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/backend-common +## 0.3.1 + +### Patch Changes + +- bff3305aa: Added readTree support to AzureUrlReader +- b47dce06f: Make integration host and url configurations visible in the frontend + ## 0.3.0 ### Minor Changes diff --git a/packages/backend-common/package.json b/packages/backend-common/package.json index b22e4638f5..731e2679cb 100644 --- a/packages/backend-common/package.json +++ b/packages/backend-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-common", "description": "Common functionality library for Backstage backends", - "version": "0.3.0", + "version": "0.3.1", "main": "src/index.ts", "types": "src/index.ts", "private": false, @@ -67,7 +67,7 @@ } }, "devDependencies": { - "@backstage/cli": "^0.3.0", + "@backstage/cli": "^0.3.1", "@backstage/test-utils": "^0.1.3", "@types/archiver": "^3.1.1", "@types/compression": "^1.7.0", diff --git a/packages/backend/CHANGELOG.md b/packages/backend/CHANGELOG.md index a8bc1fef7d..bc2a08e983 100644 --- a/packages/backend/CHANGELOG.md +++ b/packages/backend/CHANGELOG.md @@ -1,5 +1,26 @@ # example-backend +## 0.2.3 + +### Patch Changes + +- Updated dependencies [1166fcc36] +- Updated dependencies [bff3305aa] +- Updated dependencies [0c2121240] +- Updated dependencies [ef2831dde] +- Updated dependencies [1185919f3] +- Updated dependencies [475fc0aaa] +- Updated dependencies [b47dce06f] +- Updated dependencies [5a1d8dca3] + - @backstage/catalog-model@0.3.0 + - @backstage/plugin-kubernetes-backend@0.2.0 + - @backstage/backend-common@0.3.1 + - @backstage/plugin-catalog-backend@0.2.2 + - @backstage/plugin-scaffolder-backend@0.3.2 + - example-app@0.2.3 + - @backstage/plugin-auth-backend@0.2.3 + - @backstage/plugin-techdocs-backend@0.2.2 + ## 0.2.2 ### Patch Changes diff --git a/packages/backend/package.json b/packages/backend/package.json index 014a3f78d5..5d3678a284 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -1,6 +1,6 @@ { "name": "example-backend", - "version": "0.2.2", + "version": "0.2.3", "main": "dist/index.cjs.js", "types": "src/index.ts", "private": true, @@ -18,24 +18,24 @@ "migrate:create": "knex migrate:make -x ts" }, "dependencies": { - "@backstage/backend-common": "^0.3.0", - "@backstage/catalog-model": "^0.2.0", + "@backstage/backend-common": "^0.3.1", + "@backstage/catalog-model": "^0.3.0", "@backstage/config": "^0.1.1", "@backstage/plugin-app-backend": "^0.3.0", - "@backstage/plugin-auth-backend": "^0.2.2", - "@backstage/plugin-catalog-backend": "^0.2.1", + "@backstage/plugin-auth-backend": "^0.2.3", + "@backstage/plugin-catalog-backend": "^0.2.2", "@backstage/plugin-graphql-backend": "^0.1.3", - "@backstage/plugin-kubernetes-backend": "^0.1.3", + "@backstage/plugin-kubernetes-backend": "^0.2.0", "@backstage/plugin-proxy-backend": "^0.2.1", "@backstage/plugin-rollbar-backend": "^0.1.3", - "@backstage/plugin-scaffolder-backend": "^0.3.1", + "@backstage/plugin-scaffolder-backend": "^0.3.2", "@backstage/plugin-sentry-backend": "^0.1.3", - "@backstage/plugin-techdocs-backend": "^0.2.1", + "@backstage/plugin-techdocs-backend": "^0.2.2", "@gitbeaker/node": "^25.2.0", "@octokit/rest": "^18.0.0", "azure-devops-node-api": "^10.1.1", "dockerode": "^3.2.0", - "example-app": "^0.2.2", + "example-app": "^0.2.3", "express": "^4.17.1", "express-promise-router": "^3.0.3", "knex": "^0.21.6", @@ -45,7 +45,7 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/cli": "^0.3.0", + "@backstage/cli": "^0.3.1", "@types/dockerode": "^2.5.32", "@types/express": "^4.17.6", "@types/express-serve-static-core": "^4.17.5", diff --git a/packages/catalog-client/CHANGELOG.md b/packages/catalog-client/CHANGELOG.md index 574cd301bf..3454a6c8e0 100644 --- a/packages/catalog-client/CHANGELOG.md +++ b/packages/catalog-client/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/catalog-client +## 0.3.1 + +### Patch Changes + +- Updated dependencies [1166fcc36] +- Updated dependencies [1185919f3] + - @backstage/catalog-model@0.3.0 + ## 0.3.0 ### Minor Changes diff --git a/packages/catalog-client/package.json b/packages/catalog-client/package.json index 2482f9579d..4509b7d547 100644 --- a/packages/catalog-client/package.json +++ b/packages/catalog-client/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/catalog-client", - "version": "0.3.0", + "version": "0.3.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -20,12 +20,12 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/catalog-model": "^0.2.0", + "@backstage/catalog-model": "^0.3.0", "@backstage/config": "^0.1.1", "cross-fetch": "^3.0.6" }, "devDependencies": { - "@backstage/cli": "^0.3.0", + "@backstage/cli": "^0.3.1", "@types/jest": "^26.0.7", "msw": "^0.21.2" }, diff --git a/packages/catalog-model/CHANGELOG.md b/packages/catalog-model/CHANGELOG.md index 051aa82c80..10bf540b46 100644 --- a/packages/catalog-model/CHANGELOG.md +++ b/packages/catalog-model/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/catalog-model +## 0.3.0 + +### Minor Changes + +- 1166fcc36: add kubernetes selector to component model + +### Patch Changes + +- 1185919f3: Marked the `Group` entity fields `ancestors` and `descendants` for deprecation on Dec 6th, 2020. See https://github.com/backstage/backstage/issues/3049 for details. + + Code that consumes these fields should remove those usages as soon as possible. There is no current or planned replacement for these fields. + + The BuiltinKindsEntityProcessor has been updated to inject these fields as empty arrays if they are missing. Therefore, if you are on a catalog instance that uses the updated version of this code, you can start removing the fields from your source catalog-info.yaml data as well, without breaking validation. + + After Dec 6th, the fields will be removed from types and classes of the Backstage repository. At the first release after that, they will not be present in released packages either. + + If your catalog-info.yaml files still contain these fields after the deletion, they will still be valid and your ingestion will not break, but they won't be visible in the types for consuming code. + ## 0.2.0 ### Minor Changes diff --git a/packages/catalog-model/package.json b/packages/catalog-model/package.json index e712e66f58..7956454ca9 100644 --- a/packages/catalog-model/package.json +++ b/packages/catalog-model/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/catalog-model", - "version": "0.2.0", + "version": "0.3.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -29,7 +29,7 @@ "yup": "^0.29.3" }, "devDependencies": { - "@backstage/cli": "^0.3.0", + "@backstage/cli": "^0.3.1", "@types/express": "^4.17.6", "@types/jest": "^26.0.7", "@types/lodash": "^4.14.151", diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index a5bcc6bcfd..d198444c86 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/cli +## 0.3.1 + +### Patch Changes + +- 29a0ccab2: The CLI now detects and transforms linked packages. You can link in external packages by adding them to both the `lerna.json` and `package.json` workspace paths. +- faf311c26: New lint rule to disallow assertions and promote `as` assertions. - @typescript-eslint/consistent-type-assertions +- 31d8b6979: Add experimental backend:bundle command +- 991345969: Add new `versions:check` and `versions:bump` commands to simplify version management and avoid conflicts + ## 0.3.0 ### Minor Changes diff --git a/packages/cli/package.json b/packages/cli/package.json index eb56b19971..034c8a3de5 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/cli", "description": "CLI for developing Backstage plugins and apps", - "version": "0.3.0", + "version": "0.3.1", "private": false, "publishConfig": { "access": "public" @@ -111,9 +111,9 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/backend-common": "^0.3.0", + "@backstage/backend-common": "^0.3.1", "@backstage/config": "^0.1.1", - "@backstage/core": "^0.3.1", + "@backstage/core": "^0.3.2", "@backstage/dev-utils": "^0.1.4", "@backstage/test-utils": "^0.1.3", "@backstage/theme": "^0.2.1", diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index 213e2b5246..d29bc53452 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -1,5 +1,11 @@ # @backstage/core +## 0.3.2 + +### Patch Changes + +- 475fc0aaa: Clear sidebar search field once a search is executed + ## 0.3.1 ### Patch Changes diff --git a/packages/core/package.json b/packages/core/package.json index d65f0a16e5..f667ffe7be 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/core", "description": "Core API used by Backstage plugins and apps", - "version": "0.3.1", + "version": "0.3.2", "private": false, "publishConfig": { "access": "public", @@ -64,7 +64,7 @@ "zen-observable": "^0.8.15" }, "devDependencies": { - "@backstage/cli": "^0.3.0", + "@backstage/cli": "^0.3.1", "@backstage/test-utils": "^0.1.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^10.4.1", diff --git a/packages/create-app/package.json b/packages/create-app/package.json index c01d4d3dbb..6e91a916a1 100644 --- a/packages/create-app/package.json +++ b/packages/create-app/package.json @@ -37,28 +37,28 @@ "recursive-readdir": "^2.2.2" }, "devDependencies": { - "@backstage/backend-common": "^0.3.0", - "@backstage/catalog-model": "^0.2.0", - "@backstage/cli": "^0.3.0", + "@backstage/backend-common": "^0.3.1", + "@backstage/catalog-model": "^0.3.0", + "@backstage/cli": "^0.3.1", "@backstage/config": "^0.1.1", - "@backstage/core": "^0.3.1", - "@backstage/plugin-api-docs": "^0.2.1", + "@backstage/core": "^0.3.2", + "@backstage/plugin-api-docs": "^0.2.2", "@backstage/plugin-app-backend": "^0.3.0", - "@backstage/plugin-auth-backend": "^0.2.2", - "@backstage/plugin-catalog": "^0.2.2", - "@backstage/plugin-catalog-backend": "^0.2.1", - "@backstage/plugin-circleci": "^0.2.1", + "@backstage/plugin-auth-backend": "^0.2.3", + "@backstage/plugin-catalog": "^0.2.3", + "@backstage/plugin-catalog-backend": "^0.2.2", + "@backstage/plugin-circleci": "^0.2.2", "@backstage/plugin-explore": "^0.2.1", - "@backstage/plugin-github-actions": "^0.2.1", - "@backstage/plugin-lighthouse": "^0.2.2", + "@backstage/plugin-github-actions": "^0.2.2", + "@backstage/plugin-lighthouse": "^0.2.3", "@backstage/plugin-proxy-backend": "^0.2.1", - "@backstage/plugin-register-component": "^0.2.1", + "@backstage/plugin-register-component": "^0.2.2", "@backstage/plugin-rollbar-backend": "^0.1.3", - "@backstage/plugin-scaffolder": "^0.3.0", - "@backstage/plugin-scaffolder-backend": "^0.3.1", + "@backstage/plugin-scaffolder": "^0.3.1", + "@backstage/plugin-scaffolder-backend": "^0.3.2", "@backstage/plugin-tech-radar": "^0.3.0", - "@backstage/plugin-techdocs": "^0.2.2", - "@backstage/plugin-techdocs-backend": "^0.2.1", + "@backstage/plugin-techdocs": "^0.2.3", + "@backstage/plugin-techdocs-backend": "^0.2.2", "@backstage/plugin-user-settings": "^0.2.2", "@backstage/test-utils": "^0.1.3", "@backstage/theme": "^0.2.1", diff --git a/plugins/api-docs/CHANGELOG.md b/plugins/api-docs/CHANGELOG.md index 5f1ad97e64..60a5caf55b 100644 --- a/plugins/api-docs/CHANGELOG.md +++ b/plugins/api-docs/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-api-docs +## 0.2.2 + +### Patch Changes + +- Updated dependencies [475fc0aaa] +- Updated dependencies [1166fcc36] +- Updated dependencies [1185919f3] + - @backstage/core@0.3.2 + - @backstage/catalog-model@0.3.0 + - @backstage/plugin-catalog@0.2.3 + ## 0.2.1 ### Patch Changes diff --git a/plugins/api-docs/package.json b/plugins/api-docs/package.json index bfefaef3a5..691f2680b2 100644 --- a/plugins/api-docs/package.json +++ b/plugins/api-docs/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-api-docs", - "version": "0.2.1", + "version": "0.2.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -20,9 +20,9 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/catalog-model": "^0.2.0", - "@backstage/core": "^0.3.1", - "@backstage/plugin-catalog": "^0.2.2", + "@backstage/catalog-model": "^0.3.0", + "@backstage/core": "^0.3.2", + "@backstage/plugin-catalog": "^0.2.3", "@backstage/theme": "^0.2.1", "@kyma-project/asyncapi-react": "^0.14.2", "@material-icons/font": "^1.0.2", @@ -39,7 +39,7 @@ "swagger-ui-react": "^3.31.1" }, "devDependencies": { - "@backstage/cli": "^0.3.0", + "@backstage/cli": "^0.3.1", "@backstage/dev-utils": "^0.1.4", "@backstage/test-utils": "^0.1.3", "@testing-library/jest-dom": "^5.10.1", diff --git a/plugins/auth-backend/CHANGELOG.md b/plugins/auth-backend/CHANGELOG.md index 546855c92f..4a2161ad71 100644 --- a/plugins/auth-backend/CHANGELOG.md +++ b/plugins/auth-backend/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-auth-backend +## 0.2.3 + +### Patch Changes + +- Updated dependencies [1166fcc36] +- Updated dependencies [bff3305aa] +- Updated dependencies [1185919f3] +- Updated dependencies [b47dce06f] + - @backstage/catalog-model@0.3.0 + - @backstage/backend-common@0.3.1 + - @backstage/catalog-client@0.3.1 + ## 0.2.2 ### Patch Changes diff --git a/plugins/auth-backend/package.json b/plugins/auth-backend/package.json index 4d1e52aa21..43e2c59f88 100644 --- a/plugins/auth-backend/package.json +++ b/plugins/auth-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-backend", - "version": "0.2.2", + "version": "0.2.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -20,9 +20,9 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/backend-common": "^0.3.0", - "@backstage/catalog-client": "^0.3.0", - "@backstage/catalog-model": "^0.2.0", + "@backstage/backend-common": "^0.3.1", + "@backstage/catalog-client": "^0.3.1", + "@backstage/catalog-model": "^0.3.0", "@backstage/config": "^0.1.1", "@types/express": "^4.17.6", "compression": "^1.7.4", @@ -55,7 +55,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.3.0", + "@backstage/cli": "^0.3.1", "@types/body-parser": "^1.19.0", "@types/cookie-parser": "^1.4.2", "@types/express-session": "^1.17.2", diff --git a/plugins/catalog-backend/CHANGELOG.md b/plugins/catalog-backend/CHANGELOG.md index 1a3199ee14..3bf25a494b 100644 --- a/plugins/catalog-backend/CHANGELOG.md +++ b/plugins/catalog-backend/CHANGELOG.md @@ -1,5 +1,27 @@ # @backstage/plugin-catalog-backend +## 0.2.2 + +### Patch Changes + +- 0c2121240: Add support for reading groups and users from the Microsoft Graph API. +- 1185919f3: Marked the `Group` entity fields `ancestors` and `descendants` for deprecation on Dec 6th, 2020. See https://github.com/backstage/backstage/issues/3049 for details. + + Code that consumes these fields should remove those usages as soon as possible. There is no current or planned replacement for these fields. + + The BuiltinKindsEntityProcessor has been updated to inject these fields as empty arrays if they are missing. Therefore, if you are on a catalog instance that uses the updated version of this code, you can start removing the fields from your source catalog-info.yaml data as well, without breaking validation. + + After Dec 6th, the fields will be removed from types and classes of the Backstage repository. At the first release after that, they will not be present in released packages either. + + If your catalog-info.yaml files still contain these fields after the deletion, they will still be valid and your ingestion will not break, but they won't be visible in the types for consuming code. + +- Updated dependencies [1166fcc36] +- Updated dependencies [bff3305aa] +- Updated dependencies [1185919f3] +- Updated dependencies [b47dce06f] + - @backstage/catalog-model@0.3.0 + - @backstage/backend-common@0.3.1 + ## 0.2.1 ### Patch Changes diff --git a/plugins/catalog-backend/package.json b/plugins/catalog-backend/package.json index 12a17d6365..51a9978f30 100644 --- a/plugins/catalog-backend/package.json +++ b/plugins/catalog-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend", - "version": "0.2.1", + "version": "0.2.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -21,8 +21,8 @@ }, "dependencies": { "@azure/msal-node": "^1.0.0-alpha.8", - "@backstage/backend-common": "^0.3.0", - "@backstage/catalog-model": "^0.2.0", + "@backstage/backend-common": "^0.3.1", + "@backstage/catalog-model": "^0.3.0", "@backstage/config": "^0.1.1", "@octokit/graphql": "^4.5.6", "@types/express": "^4.17.6", @@ -47,7 +47,7 @@ "yup": "^0.29.3" }, "devDependencies": { - "@backstage/cli": "^0.3.0", + "@backstage/cli": "^0.3.1", "@backstage/test-utils": "^0.1.3", "@types/core-js": "^2.5.4", "@types/git-url-parse": "^9.0.0", diff --git a/plugins/catalog-graphql/CHANGELOG.md b/plugins/catalog-graphql/CHANGELOG.md index 35737b7dd1..56911b9c45 100644 --- a/plugins/catalog-graphql/CHANGELOG.md +++ b/plugins/catalog-graphql/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-catalog-graphql +## 0.2.2 + +### Patch Changes + +- Updated dependencies [1166fcc36] +- Updated dependencies [bff3305aa] +- Updated dependencies [1185919f3] +- Updated dependencies [b47dce06f] + - @backstage/catalog-model@0.3.0 + - @backstage/backend-common@0.3.1 + ## 0.2.1 ### Patch Changes diff --git a/plugins/catalog-graphql/package.json b/plugins/catalog-graphql/package.json index c55be89b62..a489d66e5b 100644 --- a/plugins/catalog-graphql/package.json +++ b/plugins/catalog-graphql/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-graphql", - "version": "0.2.1", + "version": "0.2.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -20,8 +20,8 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/backend-common": "^0.3.0", - "@backstage/catalog-model": "^0.2.0", + "@backstage/backend-common": "^0.3.1", + "@backstage/catalog-model": "^0.3.0", "@backstage/config": "^0.1.1", "@graphql-modules/core": "^0.7.17", "apollo-server": "^2.16.1", @@ -32,7 +32,7 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/cli": "^0.3.0", + "@backstage/cli": "^0.3.1", "@backstage/test-utils": "^0.1.3", "@graphql-codegen/cli": "^1.17.7", "@graphql-codegen/typescript": "^1.17.7", diff --git a/plugins/catalog/CHANGELOG.md b/plugins/catalog/CHANGELOG.md index 1b8b884f1c..9137b7e948 100644 --- a/plugins/catalog/CHANGELOG.md +++ b/plugins/catalog/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-catalog +## 0.2.3 + +### Patch Changes + +- Updated dependencies [475fc0aaa] +- Updated dependencies [1166fcc36] +- Updated dependencies [ef2831dde] +- Updated dependencies [1185919f3] + - @backstage/core@0.3.2 + - @backstage/catalog-model@0.3.0 + - @backstage/plugin-scaffolder@0.3.1 + - @backstage/catalog-client@0.3.1 + - @backstage/plugin-techdocs@0.2.3 + ## 0.2.2 ### Patch Changes diff --git a/plugins/catalog/package.json b/plugins/catalog/package.json index 2c65096fd6..7b58358734 100644 --- a/plugins/catalog/package.json +++ b/plugins/catalog/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog", - "version": "0.2.2", + "version": "0.2.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -21,11 +21,11 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/catalog-client": "^0.3.0", - "@backstage/catalog-model": "^0.2.0", - "@backstage/core": "^0.3.1", - "@backstage/plugin-scaffolder": "^0.3.0", - "@backstage/plugin-techdocs": "^0.2.2", + "@backstage/catalog-client": "^0.3.1", + "@backstage/catalog-model": "^0.3.0", + "@backstage/core": "^0.3.2", + "@backstage/plugin-scaffolder": "^0.3.1", + "@backstage/plugin-techdocs": "^0.2.3", "@backstage/theme": "^0.2.1", "@material-ui/core": "^4.11.0", "@material-ui/icons": "^4.9.1", @@ -43,7 +43,7 @@ "swr": "^0.3.0" }, "devDependencies": { - "@backstage/cli": "^0.3.0", + "@backstage/cli": "^0.3.1", "@backstage/dev-utils": "^0.1.4", "@backstage/test-utils": "^0.1.3", "@microsoft/microsoft-graph-types": "^1.25.0", diff --git a/plugins/circleci/CHANGELOG.md b/plugins/circleci/CHANGELOG.md index 2894ce1bd3..a81531e28d 100644 --- a/plugins/circleci/CHANGELOG.md +++ b/plugins/circleci/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-circleci +## 0.2.2 + +### Patch Changes + +- a8de7f554: Improved CircleCI builds table to show more information and relevant links +- Updated dependencies [475fc0aaa] +- Updated dependencies [1166fcc36] +- Updated dependencies [1185919f3] + - @backstage/core@0.3.2 + - @backstage/catalog-model@0.3.0 + - @backstage/plugin-catalog@0.2.3 + ## 0.2.1 ### Patch Changes diff --git a/plugins/circleci/package.json b/plugins/circleci/package.json index eaa8c319a0..fd32ff9891 100644 --- a/plugins/circleci/package.json +++ b/plugins/circleci/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-circleci", - "version": "0.2.1", + "version": "0.2.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -21,9 +21,9 @@ "postpack": "backstage-cli postpack" }, "dependencies": { - "@backstage/catalog-model": "^0.2.0", - "@backstage/core": "^0.3.1", - "@backstage/plugin-catalog": "^0.2.2", + "@backstage/catalog-model": "^0.3.0", + "@backstage/core": "^0.3.2", + "@backstage/plugin-catalog": "^0.2.3", "@backstage/theme": "^0.2.1", "@material-ui/core": "^4.11.0", "@material-ui/icons": "^4.9.1", @@ -40,7 +40,7 @@ "react-use": "^15.3.3" }, "devDependencies": { - "@backstage/cli": "^0.3.0", + "@backstage/cli": "^0.3.1", "@backstage/dev-utils": "^0.1.4", "@backstage/test-utils": "^0.1.3", "@testing-library/jest-dom": "^5.10.1", diff --git a/plugins/cloudbuild/CHANGELOG.md b/plugins/cloudbuild/CHANGELOG.md index 9d02fd1ea3..4cb2d01377 100644 --- a/plugins/cloudbuild/CHANGELOG.md +++ b/plugins/cloudbuild/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-cloudbuild +## 0.2.2 + +### Patch Changes + +- Updated dependencies [475fc0aaa] +- Updated dependencies [1166fcc36] +- Updated dependencies [1185919f3] + - @backstage/core@0.3.2 + - @backstage/catalog-model@0.3.0 + - @backstage/plugin-catalog@0.2.3 + ## 0.2.1 ### Patch Changes diff --git a/plugins/cloudbuild/package.json b/plugins/cloudbuild/package.json index c0b36ef1e7..3e7f0c9175 100644 --- a/plugins/cloudbuild/package.json +++ b/plugins/cloudbuild/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-cloudbuild", - "version": "0.2.1", + "version": "0.2.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -20,9 +20,9 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/catalog-model": "^0.2.0", - "@backstage/core": "^0.3.1", - "@backstage/plugin-catalog": "^0.2.2", + "@backstage/catalog-model": "^0.3.0", + "@backstage/core": "^0.3.2", + "@backstage/plugin-catalog": "^0.2.3", "@backstage/theme": "^0.2.1", "@material-ui/core": "^4.11.0", "@material-ui/icons": "^4.9.1", @@ -39,7 +39,7 @@ "react-use": "^15.3.3" }, "devDependencies": { - "@backstage/cli": "^0.3.0", + "@backstage/cli": "^0.3.1", "@backstage/dev-utils": "^0.1.4", "@backstage/test-utils": "^0.1.3", "@testing-library/jest-dom": "^5.10.1", diff --git a/plugins/cost-insights/CHANGELOG.md b/plugins/cost-insights/CHANGELOG.md index 157d92f251..b7bdfa9d50 100644 --- a/plugins/cost-insights/CHANGELOG.md +++ b/plugins/cost-insights/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-cost-insights +## 0.4.1 + +### Patch Changes + +- 8e6728e25: fix product icon configuration +- c93a14b49: truncate large percentages > 1000% +- Updated dependencies [475fc0aaa] + - @backstage/core@0.3.2 + ## 0.4.0 ### Minor Changes diff --git a/plugins/cost-insights/package.json b/plugins/cost-insights/package.json index 8ebeac91c0..06083b855b 100644 --- a/plugins/cost-insights/package.json +++ b/plugins/cost-insights/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-cost-insights", - "version": "0.4.0", + "version": "0.4.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -22,7 +22,7 @@ }, "dependencies": { "@backstage/config": "^0.1.1", - "@backstage/core": "^0.3.1", + "@backstage/core": "^0.3.2", "@backstage/test-utils": "^0.1.3", "@backstage/theme": "^0.2.1", "@material-ui/core": "^4.11.0", @@ -46,7 +46,7 @@ "yup": "^0.29.3" }, "devDependencies": { - "@backstage/cli": "^0.3.0", + "@backstage/cli": "^0.3.1", "@backstage/dev-utils": "^0.1.4", "@backstage/test-utils": "^0.1.3", "@testing-library/jest-dom": "^5.10.1", diff --git a/plugins/github-actions/CHANGELOG.md b/plugins/github-actions/CHANGELOG.md index b679d6844b..96f3876802 100644 --- a/plugins/github-actions/CHANGELOG.md +++ b/plugins/github-actions/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-github-actions +## 0.2.2 + +### Patch Changes + +- Updated dependencies [475fc0aaa] +- Updated dependencies [1166fcc36] +- Updated dependencies [1185919f3] + - @backstage/core@0.3.2 + - @backstage/catalog-model@0.3.0 + - @backstage/plugin-catalog@0.2.3 + ## 0.2.1 ### Patch Changes diff --git a/plugins/github-actions/package.json b/plugins/github-actions/package.json index 49ecfc5423..b1924034f1 100644 --- a/plugins/github-actions/package.json +++ b/plugins/github-actions/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-github-actions", - "version": "0.2.1", + "version": "0.2.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -21,10 +21,10 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/catalog-model": "^0.2.0", - "@backstage/core": "^0.3.1", + "@backstage/catalog-model": "^0.3.0", + "@backstage/core": "^0.3.2", "@backstage/core-api": "^0.2.1", - "@backstage/plugin-catalog": "^0.2.2", + "@backstage/plugin-catalog": "^0.2.3", "@backstage/theme": "^0.2.1", "@material-ui/core": "^4.11.0", "@material-ui/icons": "^4.9.1", @@ -40,7 +40,7 @@ "react-use": "^15.3.3" }, "devDependencies": { - "@backstage/cli": "^0.3.0", + "@backstage/cli": "^0.3.1", "@backstage/dev-utils": "^0.1.4", "@backstage/test-utils": "^0.1.3", "@testing-library/jest-dom": "^5.10.1", diff --git a/plugins/jenkins/CHANGELOG.md b/plugins/jenkins/CHANGELOG.md index 44febbc63d..aeeb069f19 100644 --- a/plugins/jenkins/CHANGELOG.md +++ b/plugins/jenkins/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-jenkins +## 0.3.1 + +### Patch Changes + +- Updated dependencies [475fc0aaa] +- Updated dependencies [1166fcc36] +- Updated dependencies [1185919f3] + - @backstage/core@0.3.2 + - @backstage/catalog-model@0.3.0 + - @backstage/plugin-catalog@0.2.3 + ## 0.3.0 ### Minor Changes diff --git a/plugins/jenkins/package.json b/plugins/jenkins/package.json index 0279592a75..961f551dfa 100644 --- a/plugins/jenkins/package.json +++ b/plugins/jenkins/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-jenkins", - "version": "0.3.0", + "version": "0.3.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -21,9 +21,9 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/catalog-model": "^0.2.0", - "@backstage/core": "^0.3.1", - "@backstage/plugin-catalog": "^0.2.2", + "@backstage/catalog-model": "^0.3.0", + "@backstage/core": "^0.3.2", + "@backstage/plugin-catalog": "^0.2.3", "@backstage/theme": "^0.2.1", "@material-ui/core": "^4.11.0", "@material-ui/icons": "^4.9.1", @@ -36,7 +36,7 @@ "react-use": "^15.3.3" }, "devDependencies": { - "@backstage/cli": "^0.3.0", + "@backstage/cli": "^0.3.1", "@backstage/dev-utils": "^0.1.4", "@backstage/test-utils": "^0.1.3", "@testing-library/jest-dom": "^5.10.1", diff --git a/plugins/kubernetes-backend/CHANGELOG.md b/plugins/kubernetes-backend/CHANGELOG.md index 7c55a7407d..2877264e54 100644 --- a/plugins/kubernetes-backend/CHANGELOG.md +++ b/plugins/kubernetes-backend/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-kubernetes-backend +## 0.2.0 + +### Minor Changes + +- 1166fcc36: add kubernetes selector to component model + +### Patch Changes + +- Updated dependencies [1166fcc36] +- Updated dependencies [bff3305aa] +- Updated dependencies [1185919f3] +- Updated dependencies [b47dce06f] + - @backstage/catalog-model@0.3.0 + - @backstage/backend-common@0.3.1 + ## 0.1.3 ### Patch Changes diff --git a/plugins/kubernetes-backend/package.json b/plugins/kubernetes-backend/package.json index be7b86dd52..e607e51f80 100644 --- a/plugins/kubernetes-backend/package.json +++ b/plugins/kubernetes-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-kubernetes-backend", - "version": "0.1.3", + "version": "0.2.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -20,8 +20,8 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/backend-common": "^0.3.0", - "@backstage/catalog-model": "^0.2.0", + "@backstage/backend-common": "^0.3.1", + "@backstage/catalog-model": "^0.3.0", "@backstage/config": "^0.1.1", "@kubernetes/client-node": "^0.12.1", "@types/express": "^4.17.6", @@ -38,7 +38,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.3.0", + "@backstage/cli": "^0.3.1", "supertest": "^4.0.2" }, "files": [ diff --git a/plugins/kubernetes/CHANGELOG.md b/plugins/kubernetes/CHANGELOG.md index e5611e4953..652fc394a2 100644 --- a/plugins/kubernetes/CHANGELOG.md +++ b/plugins/kubernetes/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-kubernetes +## 0.3.0 + +### Minor Changes + +- 1166fcc36: add kubernetes selector to component model + +### Patch Changes + +- Updated dependencies [475fc0aaa] +- Updated dependencies [1166fcc36] +- Updated dependencies [1185919f3] + - @backstage/core@0.3.2 + - @backstage/catalog-model@0.3.0 + - @backstage/plugin-kubernetes-backend@0.2.0 + ## 0.2.1 ### Patch Changes diff --git a/plugins/kubernetes/package.json b/plugins/kubernetes/package.json index 36954cc5b9..2afff2ae3f 100644 --- a/plugins/kubernetes/package.json +++ b/plugins/kubernetes/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-kubernetes", - "version": "0.2.1", + "version": "0.3.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -20,10 +20,10 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/catalog-model": "^0.2.0", + "@backstage/catalog-model": "^0.3.0", "@backstage/config": "^0.1.1", - "@backstage/core": "^0.3.1", - "@backstage/plugin-kubernetes-backend": "^0.1.3", + "@backstage/core": "^0.3.2", + "@backstage/plugin-kubernetes-backend": "^0.2.0", "@backstage/theme": "^0.2.1", "@kubernetes/client-node": "^0.12.1", "@material-ui/core": "^4.11.0", @@ -35,7 +35,7 @@ "react-use": "^15.3.3" }, "devDependencies": { - "@backstage/cli": "^0.3.0", + "@backstage/cli": "^0.3.1", "@backstage/dev-utils": "^0.1.4", "@backstage/test-utils": "^0.1.3", "@testing-library/jest-dom": "^5.10.1", diff --git a/plugins/lighthouse/CHANGELOG.md b/plugins/lighthouse/CHANGELOG.md index 666e7c4411..e35f3dece0 100644 --- a/plugins/lighthouse/CHANGELOG.md +++ b/plugins/lighthouse/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-lighthouse +## 0.2.3 + +### Patch Changes + +- Updated dependencies [475fc0aaa] +- Updated dependencies [1166fcc36] +- Updated dependencies [1185919f3] + - @backstage/core@0.3.2 + - @backstage/catalog-model@0.3.0 + - @backstage/plugin-catalog@0.2.3 + ## 0.2.2 ### Patch Changes diff --git a/plugins/lighthouse/package.json b/plugins/lighthouse/package.json index 90230f5248..ad1264cfbb 100644 --- a/plugins/lighthouse/package.json +++ b/plugins/lighthouse/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-lighthouse", - "version": "0.2.2", + "version": "0.2.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -21,11 +21,11 @@ "start": "backstage-cli plugin:serve" }, "dependencies": { - "@backstage/catalog-model": "^0.2.0", + "@backstage/catalog-model": "^0.3.0", "@backstage/config": "^0.1.1", - "@backstage/core": "^0.3.1", + "@backstage/core": "^0.3.2", "@backstage/core-api": "^0.2.1", - "@backstage/plugin-catalog": "^0.2.2", + "@backstage/plugin-catalog": "^0.2.3", "@backstage/theme": "^0.2.1", "@material-ui/core": "^4.11.0", "@material-ui/icons": "^4.9.1", @@ -38,7 +38,7 @@ "react-use": "^15.3.3" }, "devDependencies": { - "@backstage/cli": "^0.3.0", + "@backstage/cli": "^0.3.1", "@backstage/dev-utils": "^0.1.4", "@backstage/test-utils": "^0.1.3", "@testing-library/jest-dom": "^5.10.1", diff --git a/plugins/register-component/CHANGELOG.md b/plugins/register-component/CHANGELOG.md index 3e966ef0d0..c569046855 100644 --- a/plugins/register-component/CHANGELOG.md +++ b/plugins/register-component/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-register-component +## 0.2.2 + +### Patch Changes + +- 2a71f4bab: Remove catalog link on validate popup +- Updated dependencies [475fc0aaa] +- Updated dependencies [1166fcc36] +- Updated dependencies [1185919f3] + - @backstage/core@0.3.2 + - @backstage/catalog-model@0.3.0 + - @backstage/plugin-catalog@0.2.3 + ## 0.2.1 ### Patch Changes diff --git a/plugins/register-component/package.json b/plugins/register-component/package.json index 06ae17cb0e..1564faae0e 100644 --- a/plugins/register-component/package.json +++ b/plugins/register-component/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-register-component", - "version": "0.2.1", + "version": "0.2.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -21,9 +21,9 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/catalog-model": "^0.2.0", - "@backstage/core": "^0.3.1", - "@backstage/plugin-catalog": "^0.2.2", + "@backstage/catalog-model": "^0.3.0", + "@backstage/core": "^0.3.2", + "@backstage/plugin-catalog": "^0.2.3", "@backstage/theme": "^0.2.1", "@material-ui/core": "^4.11.0", "@material-ui/icons": "^4.9.1", @@ -36,7 +36,7 @@ "react-use": "^15.3.3" }, "devDependencies": { - "@backstage/cli": "^0.3.0", + "@backstage/cli": "^0.3.1", "@backstage/dev-utils": "^0.1.4", "@backstage/test-utils": "^0.1.3", "@testing-library/jest-dom": "^5.10.1", diff --git a/plugins/rollbar/CHANGELOG.md b/plugins/rollbar/CHANGELOG.md index e4a6671f90..1ccfe16c41 100644 --- a/plugins/rollbar/CHANGELOG.md +++ b/plugins/rollbar/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-rollbar +## 0.2.3 + +### Patch Changes + +- Updated dependencies [475fc0aaa] +- Updated dependencies [1166fcc36] +- Updated dependencies [1185919f3] + - @backstage/core@0.3.2 + - @backstage/catalog-model@0.3.0 + - @backstage/plugin-catalog@0.2.3 + ## 0.2.2 ### Patch Changes diff --git a/plugins/rollbar/package.json b/plugins/rollbar/package.json index c107573ca8..1177a83eb6 100644 --- a/plugins/rollbar/package.json +++ b/plugins/rollbar/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-rollbar", - "version": "0.2.2", + "version": "0.2.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -21,9 +21,9 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/catalog-model": "^0.2.0", - "@backstage/core": "^0.3.1", - "@backstage/plugin-catalog": "^0.2.2", + "@backstage/catalog-model": "^0.3.0", + "@backstage/core": "^0.3.2", + "@backstage/plugin-catalog": "^0.2.3", "@backstage/theme": "^0.2.1", "@material-ui/core": "^4.11.0", "@material-ui/icons": "^4.9.1", @@ -37,7 +37,7 @@ "react-use": "^15.3.3" }, "devDependencies": { - "@backstage/cli": "^0.3.0", + "@backstage/cli": "^0.3.1", "@backstage/dev-utils": "^0.1.4", "@backstage/test-utils": "^0.1.3", "@testing-library/jest-dom": "^5.10.1", diff --git a/plugins/scaffolder-backend/CHANGELOG.md b/plugins/scaffolder-backend/CHANGELOG.md index a388a29a00..ea7e5c85ee 100644 --- a/plugins/scaffolder-backend/CHANGELOG.md +++ b/plugins/scaffolder-backend/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-scaffolder-backend +## 0.3.2 + +### Patch Changes + +- ef2831dde: Move constructing the catalog-info.yaml URL for scaffolded components to the publishers +- 5a1d8dca3: Fix React entity YAML filename to new standard +- Updated dependencies [1166fcc36] +- Updated dependencies [bff3305aa] +- Updated dependencies [1185919f3] +- Updated dependencies [b47dce06f] + - @backstage/catalog-model@0.3.0 + - @backstage/backend-common@0.3.1 + ## 0.3.1 ### Patch Changes diff --git a/plugins/scaffolder-backend/package.json b/plugins/scaffolder-backend/package.json index 73c07d158f..a095167a08 100644 --- a/plugins/scaffolder-backend/package.json +++ b/plugins/scaffolder-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend", - "version": "0.3.1", + "version": "0.3.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -20,8 +20,8 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/backend-common": "^0.3.0", - "@backstage/catalog-model": "^0.2.0", + "@backstage/backend-common": "^0.3.1", + "@backstage/catalog-model": "^0.3.0", "@backstage/config": "^0.1.1", "@gitbeaker/core": "^25.2.0", "@gitbeaker/node": "^25.2.0", @@ -48,7 +48,7 @@ "cross-fetch": "^3.0.6" }, "devDependencies": { - "@backstage/cli": "^0.3.0", + "@backstage/cli": "^0.3.1", "@octokit/types": "^5.4.1", "@types/fs-extra": "^9.0.1", "@types/git-url-parse": "^9.0.0", diff --git a/plugins/scaffolder/CHANGELOG.md b/plugins/scaffolder/CHANGELOG.md index 9eac595997..c78e05c3e0 100644 --- a/plugins/scaffolder/CHANGELOG.md +++ b/plugins/scaffolder/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-scaffolder +## 0.3.1 + +### Patch Changes + +- ef2831dde: Move constructing the catalog-info.yaml URL for scaffolded components to the publishers +- Updated dependencies [475fc0aaa] +- Updated dependencies [1166fcc36] +- Updated dependencies [1185919f3] + - @backstage/core@0.3.2 + - @backstage/catalog-model@0.3.0 + - @backstage/plugin-catalog@0.2.3 + ## 0.3.0 ### Minor Changes diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json index 439fc0ad9a..791221bc62 100644 --- a/plugins/scaffolder/package.json +++ b/plugins/scaffolder/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder", - "version": "0.3.0", + "version": "0.3.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -21,9 +21,9 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/catalog-model": "^0.2.0", - "@backstage/core": "^0.3.1", - "@backstage/plugin-catalog": "^0.2.2", + "@backstage/catalog-model": "^0.3.0", + "@backstage/core": "^0.3.2", + "@backstage/plugin-catalog": "^0.2.3", "@backstage/theme": "^0.2.1", "@material-ui/core": "^4.11.0", "@material-ui/icons": "^4.9.1", @@ -41,7 +41,7 @@ "swr": "^0.3.0" }, "devDependencies": { - "@backstage/cli": "^0.3.0", + "@backstage/cli": "^0.3.1", "@backstage/dev-utils": "^0.1.4", "@backstage/test-utils": "^0.1.3", "@testing-library/jest-dom": "^5.10.1", diff --git a/plugins/search/CHANGELOG.md b/plugins/search/CHANGELOG.md new file mode 100644 index 0000000000..3545914e96 --- /dev/null +++ b/plugins/search/CHANGELOG.md @@ -0,0 +1,13 @@ +# @backstage/plugin-search + +## 0.2.1 + +### Patch Changes + +- 475fc0aaa: Using the search field in the sidebar now navigates to the search result page. +- Updated dependencies [475fc0aaa] +- Updated dependencies [1166fcc36] +- Updated dependencies [1185919f3] + - @backstage/core@0.3.2 + - @backstage/catalog-model@0.3.0 + - @backstage/plugin-catalog@0.2.3 diff --git a/plugins/search/package.json b/plugins/search/package.json index df5c6c25b9..021e3f71f3 100644 --- a/plugins/search/package.json +++ b/plugins/search/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-search", - "version": "0.2.0", + "version": "0.2.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -20,9 +20,9 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/core": "^0.3.1", - "@backstage/plugin-catalog": "^0.2.2", - "@backstage/catalog-model": "^0.2.0", + "@backstage/core": "^0.3.2", + "@backstage/plugin-catalog": "^0.2.3", + "@backstage/catalog-model": "^0.3.0", "@backstage/theme": "^0.2.1", "@material-ui/core": "^4.11.0", "@material-ui/icons": "^4.9.1", @@ -34,7 +34,7 @@ "react-use": "^15.3.3" }, "devDependencies": { - "@backstage/cli": "^0.3.0", + "@backstage/cli": "^0.3.1", "@backstage/dev-utils": "^0.1.4", "@backstage/test-utils": "^0.1.3", "@testing-library/jest-dom": "^5.10.1", diff --git a/plugins/sentry/CHANGELOG.md b/plugins/sentry/CHANGELOG.md index 92327c1668..b388548d8e 100644 --- a/plugins/sentry/CHANGELOG.md +++ b/plugins/sentry/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-sentry +## 0.2.3 + +### Patch Changes + +- Updated dependencies [475fc0aaa] +- Updated dependencies [1166fcc36] +- Updated dependencies [1185919f3] + - @backstage/core@0.3.2 + - @backstage/catalog-model@0.3.0 + ## 0.2.2 ### Patch Changes diff --git a/plugins/sentry/package.json b/plugins/sentry/package.json index 80a37c574e..4c10936148 100644 --- a/plugins/sentry/package.json +++ b/plugins/sentry/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-sentry", - "version": "0.2.2", + "version": "0.2.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -21,8 +21,8 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/catalog-model": "^0.2.0", - "@backstage/core": "^0.3.1", + "@backstage/catalog-model": "^0.3.0", + "@backstage/core": "^0.3.2", "@backstage/theme": "^0.2.1", "@material-ui/core": "^4.11.0", "@material-ui/icons": "^4.9.1", @@ -36,7 +36,7 @@ "timeago.js": "^4.0.2" }, "devDependencies": { - "@backstage/cli": "^0.3.0", + "@backstage/cli": "^0.3.1", "@backstage/dev-utils": "^0.1.4", "@backstage/test-utils": "^0.1.3", "@testing-library/jest-dom": "^5.10.1", diff --git a/plugins/sonarqube/CHANGELOG.md b/plugins/sonarqube/CHANGELOG.md index 0296bd0416..9ebd73b812 100644 --- a/plugins/sonarqube/CHANGELOG.md +++ b/plugins/sonarqube/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-sonarqube +## 0.1.4 + +### Patch Changes + +- 26484d413: Add configuration schema +- Updated dependencies [475fc0aaa] +- Updated dependencies [1166fcc36] +- Updated dependencies [1185919f3] + - @backstage/core@0.3.2 + - @backstage/catalog-model@0.3.0 + ## 0.1.3 ### Patch Changes diff --git a/plugins/sonarqube/package.json b/plugins/sonarqube/package.json index be8a878e50..6a9d0fe0d4 100644 --- a/plugins/sonarqube/package.json +++ b/plugins/sonarqube/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-sonarqube", - "version": "0.1.3", + "version": "0.1.4", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -21,8 +21,8 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/catalog-model": "^0.2.0", - "@backstage/core": "^0.3.1", + "@backstage/catalog-model": "^0.3.0", + "@backstage/core": "^0.3.2", "@backstage/theme": "^0.2.1", "@material-ui/core": "^4.11.0", "@material-ui/icons": "^4.9.1", @@ -35,7 +35,7 @@ "react-use": "^15.3.3" }, "devDependencies": { - "@backstage/cli": "^0.3.0", + "@backstage/cli": "^0.3.1", "@backstage/dev-utils": "^0.1.4", "@backstage/test-utils": "^0.1.3", "@testing-library/jest-dom": "^5.10.1", diff --git a/plugins/techdocs-backend/CHANGELOG.md b/plugins/techdocs-backend/CHANGELOG.md index 4a3fbf6821..d9054230e2 100644 --- a/plugins/techdocs-backend/CHANGELOG.md +++ b/plugins/techdocs-backend/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-techdocs-backend +## 0.2.2 + +### Patch Changes + +- Updated dependencies [1166fcc36] +- Updated dependencies [bff3305aa] +- Updated dependencies [1185919f3] +- Updated dependencies [b47dce06f] + - @backstage/catalog-model@0.3.0 + - @backstage/backend-common@0.3.1 + ## 0.2.1 ### Patch Changes diff --git a/plugins/techdocs-backend/package.json b/plugins/techdocs-backend/package.json index b139bb9acf..1d9f3ea7c1 100644 --- a/plugins/techdocs-backend/package.json +++ b/plugins/techdocs-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-techdocs-backend", - "version": "0.2.1", + "version": "0.2.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -20,8 +20,8 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/backend-common": "^0.3.0", - "@backstage/catalog-model": "^0.2.0", + "@backstage/backend-common": "^0.3.1", + "@backstage/catalog-model": "^0.3.0", "@backstage/config": "^0.1.1", "@types/dockerode": "^2.5.34", "@types/express": "^4.17.6", @@ -37,7 +37,7 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/cli": "^0.3.0", + "@backstage/cli": "^0.3.1", "supertest": "^4.0.2" }, "files": [ diff --git a/plugins/techdocs/CHANGELOG.md b/plugins/techdocs/CHANGELOG.md index bd3ae21ab8..3f46e1358b 100644 --- a/plugins/techdocs/CHANGELOG.md +++ b/plugins/techdocs/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-techdocs +## 0.2.3 + +### Patch Changes + +- Updated dependencies [475fc0aaa] +- Updated dependencies [1166fcc36] +- Updated dependencies [1185919f3] + - @backstage/core@0.3.2 + - @backstage/catalog-model@0.3.0 + - @backstage/plugin-catalog@0.2.3 + ## 0.2.2 ### Patch Changes diff --git a/plugins/techdocs/package.json b/plugins/techdocs/package.json index 35b196e124..23d7a25b57 100644 --- a/plugins/techdocs/package.json +++ b/plugins/techdocs/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-techdocs", - "version": "0.2.2", + "version": "0.2.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -21,10 +21,10 @@ "clean": "backstage-cli clean" }, "dependencies": { - "@backstage/catalog-model": "^0.2.0", - "@backstage/core": "^0.3.1", + "@backstage/catalog-model": "^0.3.0", + "@backstage/core": "^0.3.2", "@backstage/core-api": "^0.2.1", - "@backstage/plugin-catalog": "^0.2.2", + "@backstage/plugin-catalog": "^0.2.3", "@backstage/test-utils": "^0.1.3", "@backstage/theme": "^0.2.1", "@material-ui/core": "^4.11.0", @@ -39,7 +39,7 @@ "sanitize-html": "^1.27.0" }, "devDependencies": { - "@backstage/cli": "^0.3.0", + "@backstage/cli": "^0.3.1", "@backstage/dev-utils": "^0.1.4", "@backstage/test-utils": "^0.1.3", "@testing-library/jest-dom": "^5.10.1",