From 6cd4177c6415712dd9a22a959fbf09b8a496882c Mon Sep 17 00:00:00 2001 From: "antonio.bergas" Date: Fri, 28 Apr 2023 14:51:57 +0200 Subject: [PATCH 001/213] =?UTF-8?q?=E2=9C=A8=20feat(pluginsFilter):=20adde?= =?UTF-8?q?d=20dropdown=20filter=20for=20plugins=20list?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: antonio.bergas --- .../pluginsFilter/pluginsFilter.tsx | 36 ++++ microsite/src/pages/plugins/index.tsx | 171 +++++++++++++----- .../src/pages/plugins/plugins.module.scss | 35 +++- microsite/src/util/types.ts | 4 + 4 files changed, 202 insertions(+), 44 deletions(-) create mode 100644 microsite/src/components/pluginsFilter/pluginsFilter.tsx create mode 100644 microsite/src/util/types.ts diff --git a/microsite/src/components/pluginsFilter/pluginsFilter.tsx b/microsite/src/components/pluginsFilter/pluginsFilter.tsx new file mode 100644 index 0000000000..19b80b9f14 --- /dev/null +++ b/microsite/src/components/pluginsFilter/pluginsFilter.tsx @@ -0,0 +1,36 @@ +import { ChipCategory } from '@site/src/util/types'; +import React from 'react'; + +type Props = { + categories: ChipCategory[]; + handleChipClick: (name: string) => void; +}; + +const PluginsFilter = ({ categories, handleChipClick }: Props) => { + return ( +
+ +
    + {categories.map(chip => { + return ( +
  • +
    + handleChipClick(chip.name)} + /> + {chip.name} +
    +
  • + ); + })} +
+
+ ); +}; + +export default PluginsFilter; diff --git a/microsite/src/pages/plugins/index.tsx b/microsite/src/pages/plugins/index.tsx index 280a165daa..2349e391fa 100644 --- a/microsite/src/pages/plugins/index.tsx +++ b/microsite/src/pages/plugins/index.tsx @@ -1,13 +1,13 @@ import Link from '@docusaurus/Link'; import Layout from '@theme/Layout'; import clsx from 'clsx'; -import React from 'react'; - +import React, { useState } from 'react'; import { IPluginData, PluginCard } from './_pluginCard'; import pluginsStyles from './plugins.module.scss'; +import { ChipCategory } from '@site/src/util/types'; import { truncateDescription } from '@site/src/util/truncateDescription'; +import PluginsFilter from '@site/src/components/pluginsFilter/pluginsFilter'; -//#region Plugin data import const pluginsContext = require.context( '../../../data/plugins', false, @@ -29,50 +29,135 @@ const plugins = pluginsContext.keys().reduce( plugins.corePlugins.sort((a, b) => a.order - b.order); plugins.otherPlugins.sort((a, b) => a.order - b.order); -//#endregion -const Plugins = () => ( - -
-
-
-

Plugin Marketplace

+const Plugins = () => { + const allCategories: ChipCategory[] = []; + plugins.corePlugins.concat(plugins.otherPlugins).forEach(pluginData => { + const index = allCategories.findIndex( + chip => chip.name === pluginData.category, + ); + if (index === -1) { + allCategories.push({ + name: pluginData.category, + isSelected: false, + }); + } + }); -

- Open source plugins that you can add to your Backstage deployment. - Learn how to build a plugin. -

+ const [categories, setCategories] = useState(allCategories); + const [selectedCategories, setSelectedCategories] = useState([]); + const [showCoreFeaturesHeader, setShowCoreFeaturesHeader] = useState(true); + const [showOtherPluginsHeader, setShowOtherPluginsHeader] = useState(true); + + const handleChipClick = (categoryName: string) => { + console.log(categoryName); + const category = categories.find( + category => category.name === categoryName, + ); + const isSelected = category?.isSelected || false; + + let newSelectedCategories = selectedCategories; + + if (isSelected) { + newSelectedCategories = selectedCategories.filter( + c => c !== categoryName, + ); + } else { + newSelectedCategories.push(categoryName); + } + + setSelectedCategories(newSelectedCategories); + + const newCategories = categories.map(category => { + if (category.name === categoryName) { + return { ...category, isSelected: !isSelected }; + } + return category; + }); + + setCategories(newCategories); + + if (!newSelectedCategories.includes('Core Feature')) { + setShowCoreFeaturesHeader(false); + } else { + setShowCoreFeaturesHeader(true); + } + + if ( + newSelectedCategories.length === 1 && + newSelectedCategories[0] === 'Core Feature' + ) { + setShowOtherPluginsHeader(false); + } else { + setShowOtherPluginsHeader(true); + } + + if (newSelectedCategories.length === 0) { + setShowOtherPluginsHeader(true); + setShowCoreFeaturesHeader(true); + } + }; + + return ( + +
+
+
+

Plugin Marketplace

+ +

+ Open source plugins that you can add to your Backstage deployment. + Learn how to build a plugin. +

+
+ + + Add to Marketplace +
- - Add to Marketplace - +
+ + + + {showCoreFeaturesHeader &&

Core Features

} + +
+ {plugins.corePlugins + .filter( + pluginData => + !selectedCategories.length || + selectedCategories.includes(pluginData.category), + ) + .map(pluginData => ( + + ))} +
+ + {showOtherPluginsHeader &&

All Plugins

} + +
+ {plugins.otherPlugins + .filter( + pluginData => + !selectedCategories.length || + selectedCategories.includes(pluginData.category), + ) + .map(pluginData => ( + + ))} +
- -
- -

Core Features

- -
- {plugins.corePlugins.map(pluginData => ( - - ))} -
- -

All Plugins

- -
- {plugins.otherPlugins.map(pluginData => ( - - ))} -
-
- -); + + ); +}; export default Plugins; diff --git a/microsite/src/pages/plugins/plugins.module.scss b/microsite/src/pages/plugins/plugins.module.scss index bb08c2fd33..2f928fcbf0 100644 --- a/microsite/src/pages/plugins/plugins.module.scss +++ b/microsite/src/pages/plugins/plugins.module.scss @@ -28,10 +28,43 @@ :global(.pluginsContainer) { gap: 1rem; display: grid; - grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); + grid-template-columns: repeat(auto-fit, minmax(250px, 300px)); } :global(.fit-content) { width: fit-content; } + + :global(.dropdown) { + float: right; + } + + :global(.button--info) { + background-color: transparent; + border-color: var(--ifm-color-primary); + color: var(--ifm-color-primary); + min-width: 250px; + } + + :global(label.dropdown__item) { + display: flex; + align-items: center; + cursor: pointer; + margin-top: 5px; + + &:hover { + background-color: var(--ifm-color-primary); + color: black; + } + } + + :global(.dropdown__label) { + font-size: 15px; + cursor: pointer; + } + + :global(.dropdown__checkbox) { + margin-right: 10px; + cursor: pointer; + } } diff --git a/microsite/src/util/types.ts b/microsite/src/util/types.ts new file mode 100644 index 0000000000..fba7c0ba46 --- /dev/null +++ b/microsite/src/util/types.ts @@ -0,0 +1,4 @@ +export type ChipCategory = { + name: string; + isSelected: boolean; +}; From 2b663945cb6b12e654e6d3a5c0081713f0be86c8 Mon Sep 17 00:00:00 2001 From: Adam Harvey Date: Tue, 2 May 2023 19:39:03 -0400 Subject: [PATCH 002/213] fix: Minor product capitalization Signed-off-by: Adam Harvey --- plugins/techdocs/src/home/components/TechDocsPageWrapper.tsx | 2 +- plugins/techdocs/src/reader/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/techdocs/src/home/components/TechDocsPageWrapper.tsx b/plugins/techdocs/src/home/components/TechDocsPageWrapper.tsx index 52511bda19..a6192c13ee 100644 --- a/plugins/techdocs/src/home/components/TechDocsPageWrapper.tsx +++ b/plugins/techdocs/src/home/components/TechDocsPageWrapper.tsx @@ -29,7 +29,7 @@ export type TechDocsPageWrapperProps = { }; /** - * Component wrapping a techdocs page with Page and Header components + * Component wrapping a TechDocs page with Page and Header components * * @public */ diff --git a/plugins/techdocs/src/reader/README.md b/plugins/techdocs/src/reader/README.md index fe1d1ff488..58697298c6 100644 --- a/plugins/techdocs/src/reader/README.md +++ b/plugins/techdocs/src/reader/README.md @@ -2,7 +2,7 @@ The TechDocs reader is a component that fetches a remote page, runs transformers on it and renders it into a shadow dom. -Currently there's no easy way to customize which transformers to run or add new ones. If that is needed you would have to fork the techdocs plugin and make your changes in that fork. +Currently there's no easy way to customize which transformers to run or add new ones. If that is needed you would have to fork the TechDocs plugin and make your changes in that fork. Transformers are functions that optionally takes in parameters from the Reader.tsx component and returns a function which gets passed the DOM of the fetched page. A very simple transformer can look like this. From a606cae041c30ca76fc1b5f50d2c6c7693935884 Mon Sep 17 00:00:00 2001 From: Adam Harvey Date: Tue, 2 May 2023 19:39:47 -0400 Subject: [PATCH 003/213] chore: Remove deprecations and use shared react imports Signed-off-by: Adam Harvey --- plugins/techdocs/src/client.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/plugins/techdocs/src/client.ts b/plugins/techdocs/src/client.ts index 499a56580c..8680e14468 100644 --- a/plugins/techdocs/src/client.ts +++ b/plugins/techdocs/src/client.ts @@ -23,11 +23,13 @@ import { } from '@backstage/core-plugin-api'; import { NotFoundError, ResponseError } from '@backstage/errors'; import { + SyncResult, + TechDocsApi, TechDocsEntityMetadata, TechDocsMetadata, + TechDocsStorageApi, } from '@backstage/plugin-techdocs-react'; import { EventSourcePolyfill } from 'event-source-polyfill'; -import { SyncResult, TechDocsApi, TechDocsStorageApi } from './api'; /** * API to talk to `techdocs-backend`. @@ -189,7 +191,7 @@ export class TechDocsStorageClient implements TechDocsStorageApi { * @param entityId - Object containing entity data like name, namespace, etc. * @param logHandler - Callback to receive log messages from the build process * @returns Whether documents are currently synchronized to newest version - * @throws Throws error on error from sync endpoint in Techdocs Backend + * @throws Throws error on error from sync endpoint in TechDocs Backend */ async syncEntityDocs( entityId: CompoundEntityRef, From 956d09e8ea6835ae47a35609fdad11486274b788 Mon Sep 17 00:00:00 2001 From: Adam Harvey Date: Tue, 2 May 2023 19:45:41 -0400 Subject: [PATCH 004/213] chore: Add changeset Signed-off-by: Adam Harvey --- .changeset/short-seahorses-kiss.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/short-seahorses-kiss.md diff --git a/.changeset/short-seahorses-kiss.md b/.changeset/short-seahorses-kiss.md new file mode 100644 index 0000000000..0127e4c575 --- /dev/null +++ b/.changeset/short-seahorses-kiss.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-techdocs': patch +--- + +Change deprecated local references to import from shared `plugin-techdocs-react` plugin From 40421e79563992d503a918703746964cabe611a5 Mon Sep 17 00:00:00 2001 From: Adam Harvey Date: Tue, 2 May 2023 20:08:15 -0400 Subject: [PATCH 005/213] chore: Add updated API report Signed-off-by: Adam Harvey --- plugins/techdocs/api-report.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/plugins/techdocs/api-report.md b/plugins/techdocs/api-report.md index 6e14c52939..27af44bb13 100644 --- a/plugins/techdocs/api-report.md +++ b/plugins/techdocs/api-report.md @@ -20,11 +20,14 @@ import { ReactNode } from 'react'; import { ResultHighlight } from '@backstage/plugin-search-common'; import { RouteRef } from '@backstage/core-plugin-api'; import { SearchResultListItemExtensionProps } from '@backstage/plugin-search-react'; +import { SyncResult as SyncResult_2 } from '@backstage/plugin-techdocs-react'; import { TableColumn } from '@backstage/core-components'; import { TableOptions } from '@backstage/core-components'; import { TableProps } from '@backstage/core-components'; +import { TechDocsApi as TechDocsApi_2 } from '@backstage/plugin-techdocs-react'; import { TechDocsEntityMetadata as TechDocsEntityMetadata_2 } from '@backstage/plugin-techdocs-react'; import { TechDocsMetadata as TechDocsMetadata_2 } from '@backstage/plugin-techdocs-react'; +import { TechDocsStorageApi as TechDocsStorageApi_2 } from '@backstage/plugin-techdocs-react'; import { ToolbarProps } from '@material-ui/core'; import { UserListFilterKind } from '@backstage/plugin-catalog-react'; @@ -237,7 +240,7 @@ export interface TechDocsApi { export const techdocsApiRef: ApiRef; // @public -export class TechDocsClient implements TechDocsApi { +export class TechDocsClient implements TechDocsApi_2 { constructor(options: { configApi: Config; discoveryApi: DiscoveryApi; @@ -442,7 +445,7 @@ export interface TechDocsStorageApi { export const techdocsStorageApiRef: ApiRef; // @public -export class TechDocsStorageClient implements TechDocsStorageApi { +export class TechDocsStorageClient implements TechDocsStorageApi_2 { constructor(options: { configApi: Config; discoveryApi: DiscoveryApi; @@ -471,6 +474,6 @@ export class TechDocsStorageClient implements TechDocsStorageApi { syncEntityDocs( entityId: CompoundEntityRef, logHandler?: (line: string) => void, - ): Promise; + ): Promise; } ``` From 43f39db8e7f4dc2c9f1e0a8f62307bef2d49136a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Carmo?= Date: Tue, 9 May 2023 16:07:45 +0100 Subject: [PATCH 006/213] Update talkdesk contributor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: André Carmo --- ADOPTERS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ADOPTERS.md b/ADOPTERS.md index d4dcf8db7e..1d6be70a06 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -14,7 +14,7 @@ _You can do this by using the [Adopter form](https://info.backstage.spotify.com/ | [American Airlines](https://www.aa.com) | [@paulpach](https://github.com/paulpach) | Central place for developers to develop and maintain applications | | [Kiwi.com](https://kiwi.com) | [@aexvir](https://github.com/aexvir) | Replacing the frontend of [The Zoo](https://github.com/kiwicom/the-zoo), their service registry. | | [Voi](https://www.voiscooters.com/) | [@K-Phoen](https://github.com/K-Phoen) | Developer portal, main gateway to our infrastructure, documentation and internal tooling. | -| [Talkdesk](https://www.talkdesk.com) | [@jaime-talkdesk](https://github.com/jaime-talkdesk) | Initial work for Engineering Portal and Self Provisioning to R&D | +| [Talkdesk](https://www.talkdesk.com) | [@atmcarmo](https://github.com/atmcarmo) | Engineering Portal with all of our apps and services, overview about our deployment regions and scaffolding new services. | | [Wealthsimple](https://www.wealthsimple.com) | [@andrewthauer](https://github.com/andrewthauer) | Developer portal, service catalog, documentation and tooling | | [Grab](https://www.grab.com) | [@althafh](https://github.com/althafh) | Initial work as a unified interface for all of Grab's internal tooling | | [Telenor Sweden](https://www.telenor.se) | [@O5ten](https://github.com/O5ten) | Building a developer portal for scaffolding projects towards our unified build environment and microservice stacks | From 3276260077a52fd733032bf9959446b2e905559b Mon Sep 17 00:00:00 2001 From: Waldir Montoya Date: Tue, 21 Mar 2023 17:00:24 -0500 Subject: [PATCH 007/213] add an initial catalog user guide Signed-off-by: Waldir Montoya --- docs/assets/software-catalog/entity.svg | 4 ++++ docs/features/software-catalog/user-guide.md | 0 2 files changed, 4 insertions(+) create mode 100644 docs/assets/software-catalog/entity.svg create mode 100644 docs/features/software-catalog/user-guide.md diff --git a/docs/assets/software-catalog/entity.svg b/docs/assets/software-catalog/entity.svg new file mode 100644 index 0000000000..32fb9d3f3f --- /dev/null +++ b/docs/assets/software-catalog/entity.svg @@ -0,0 +1,4 @@ + + + +
Envelop
Envelop
ApiVersion
version of the spec
ApiVersion...
Kind
entity type
Kind...
Spec
Describes the entity
Spec...
Metadata
Thins that are not part of the spec
Metadata...
name
name
description
description
title
title
uid
uid
namespace
namespace
labels
labels
annotations
annotations
tags
tags
links
links
Entity
Entity
Text is not SVG - cannot display
\ No newline at end of file diff --git a/docs/features/software-catalog/user-guide.md b/docs/features/software-catalog/user-guide.md new file mode 100644 index 0000000000..e69de29bb2 From 33befe22a218176f8ce9be7aead2e02d04f22a0a Mon Sep 17 00:00:00 2001 From: Waldir Montoya Date: Tue, 21 Mar 2023 17:08:51 -0500 Subject: [PATCH 008/213] add Catalog User Guide Signed-off-by: Waldir Montoya --- docs/features/software-catalog/user-guide.md | 99 ++++++++++++++++++++ 1 file changed, 99 insertions(+) diff --git a/docs/features/software-catalog/user-guide.md b/docs/features/software-catalog/user-guide.md index e69de29bb2..75870bdb81 100644 --- a/docs/features/software-catalog/user-guide.md +++ b/docs/features/software-catalog/user-guide.md @@ -0,0 +1,99 @@ +#Architecting your Catalog + +## Overview + +The Software Catalog in Backstage is intended to capture entities relevant to humans and have a clear mental model around them rather than an exhaustive inventory of all possible things. The focus is on attaching functionality and visual views centered around these entities. Determining the "edge" where the catalog ends and the external world begins is crucial to ensure that the catalog's scope is appropriate. +The Backstage software catalog is a centralized hub for organizing and discovering software components and services. However, there may not be better tools for keeping track of the dynamic relationships between these components and services in real-time. Its primary objective is to offer a high-level overview of concepts rather than runtime aspects and to provide a user-friendly interface. To integrate data from external sources, it is recommended to attach tooling to the nodes in the graph using annotations. A front-end plugin can also be developed to showcase deployment information and other real-time data. +It is worth noting that the Backstage database should not be considered the ultimate source of truth. Instead, it is advisable to use the Backstage Catalog as a caching mechanism that utilizes a REST API to convey information to the catalog UI and other Backstage plugins. Adopting a GitOps approach is recommended to modify YAML files in Backstage, treating YAML files in repositories as the primary source of truth and using Scaffolder to make changes via the UI and generate a pull request in the repository with the updated changes. + +### Descriptor Components used to build the Catalog Graph + +**Entities:** An entity refers to a node in the graph that represents a distinct object, concept, or thing. Nodes are the fundamental building blocks of a graph database and are used to represent entities and their properties. + +![](../../assets/software-catalog/entity.svg) + +**Kinds:** These are broad categories used to group related entities. Kinds are used to provide a high-level categorization of entities, such as "service", "database", or "team". Kinds are often used to provide a way to filter entities in the catalog and to provide a high-level overview of the types of entities that are being managed. + +**Relations:** These are links between different entities in the catalog. Relations express the relationships between different entities, such as dependencies or ownership. Adopters can use relations to help users navigate the catalog and understand the relationships between different entities. + +**Spec:** A specification or "spec" is a schema that outlines the data structure of an entity in the Backstage catalog. It defines the properties, relationships, data types, and constraints for an entity, ensuring consistency and accuracy of data while allowing for easy sharing and consumption of data across components and plugins. Specs are useful when creating or extending entities and can help make data more reusable and interoperable. The spec section is fully customizable, and users can create their own components and plugins to render the information. + +**Types:** These are more specific categories used to classify entities within a given Kind. Types provide a more granular categorization of entities, such as "frontend-service" or "backend-service.". Types are often used to provide additional context and information about an entity and to help users understand the role and function of the entity within the broader system. + +**Annotations:** These key-value pairs can be attached to an entity in the catalog. They are typically used to add additional information or metadata to an entity. Annotations are often used to provide information that is used by automated tools or scripts and to provide further context to humans working with the entity or refer plugins to the external world. + +**Statuses:** These indicators represent an entity's current state. They are typically used to show whether an entity is healthy or not, whether it is up-to-date or out-of-date, or whether it is passing or failing various checks or tests. + +## Use cases out of the box + +The catalog builds a graph using descriptors as nodes and relations as edges. Out of the box you get the following use cases: + +- Ownership tracking +- Inventory +- Search +- Lifecycle tracking +- Tracking of real-time information sources +- Dependency mapping +- API exposure + +## Tracking Assets + +The recommended approach would be to represent information in catalog-info files, which the users themselves can manage. While automated classification based on repository contents can be helpful, it is recommended to use it only to generate the initial file and then allow humans to maintain it manually. The reason is that automation can sometimes fail, and it is essential to ensure the accuracy and reliability of this metadata. In short, humans should govern this piece of metadata to maintain its integrity. + +### Well-known trackable assets + +**Software Components** + +- Services +- Websites +- Libraries +- Data Pipelines +- Machine Learning Models +- Third-party software components: It is recommended to have a separate repo for all 3d party catalog-info files. + +**Systems** + +- Jira installation +- Pageduty +- Physical resources: This is probably more useful for longer-lived ones (eg, servers). + +**Ownership - users - groups by** + +- Business units +- Team +- Product area + +**Naming strategies:** + +- Ldap: Internal ldap usernames as entity names. e.g., owner: user:myuser or user: my-team-name. + +**Ownership strategies:** + +**Ownership based on teams:** The concept of ownership in the system is team-centric; hence, the "owner" field must reference the LDAP name of a squad according to a prescribed set of regulations. While there may be instances where the ownership is attributed to an individual, such deviations might create challenges. In such cases, the user could receive a notification through the web interface, highlighting that this departure is an exception and needs rectification. To ensure adherence to this system, every entity in the model should have a designated owner, preferably a valid team within the LDAP hierarchy. + +**Ownership of features:** To track the ownership of specific features within your products and their interrelationships, two options are available: introducing a new component type, such as "feature," or creating a new Kind altogether. Nonetheless, it is advisable to choose the former approach and introduce a new type, like "feature," is advisable as it is less complicated and poses a lower risk. + +**LDAP doesn’t reflect the organization structure:** If Workday or a similar system serves as the source of truth, and LDAP is utilized for user attributes, it is advisable to develop a layer on top of various systems to establish a unified API that the entire organization can query, rather than only Backstage. + +**APIs** + +- OpenApi +- AsyncApi +- graphQL +- gRPC + +APIs Could list networked services or libraries and it’s particularly useful to identify APIs that form boundaries between systems. There are some considerations to keep in mind: + +**API versions:** It’s not recommended to have multiple entity instances (e.g., metadata.name: my-api-v1 and metadata.name: my-api-v2). + +**Detail:** It’s not recommended going too granular because the catalog in its current form won't perhaps be a great platform to express it. + +**Relationships between APIs:** The idea is that you have a service component that exposes an api and then, it's not the api that consumes the other api, it's the component that consumes the other api. + +**Backend for front end API (BFF):** The suggestion is to create separate components for the frontend and backend services, with the frontend component having a type of "website" and the backend component having a type of "service". This is because the BFF API is tailored for a specific UI and is not meant to be used by others, making it unnecessary to include in the catalog. + +**API registry:** The exploration of all APIs within an organization is a typical use case for an API registry. + +## Reference models + +**C4 model:** For inspiration, you could review the [C4 model](https://c4model.com/), which defines a pattern for visualizing software architecture. From e44261e3b4ddd587449fdddf27116868e6e4e3d8 Mon Sep 17 00:00:00 2001 From: Waldir Montoya Date: Wed, 22 Mar 2023 09:58:04 -0500 Subject: [PATCH 009/213] Fix misspelling Signed-off-by: Waldir Montoya --- docs/assets/software-catalog/.$entity.svg.bkp | 4 ++++ docs/assets/software-catalog/entity.svg | 2 +- docs/features/software-catalog/user-guide.md | 4 ++-- 3 files changed, 7 insertions(+), 3 deletions(-) create mode 100644 docs/assets/software-catalog/.$entity.svg.bkp diff --git a/docs/assets/software-catalog/.$entity.svg.bkp b/docs/assets/software-catalog/.$entity.svg.bkp new file mode 100644 index 0000000000..a7b6fb1d7e --- /dev/null +++ b/docs/assets/software-catalog/.$entity.svg.bkp @@ -0,0 +1,4 @@ + + + +
Envelop
Envelop
ApiVersion
version of the spec
ApiVersion...
Kind
entity type
Kind...
Spec
Describes the entity
Spec...
Metadata
Things that are not part of the spec
Metadata...
name
name
description
description
title
title
uid
uid
namespace
namespace
labels
labels
annotations
annotations
tags
tags
links
links
Entity
Entity
Text is not SVG - cannot display
\ No newline at end of file diff --git a/docs/assets/software-catalog/entity.svg b/docs/assets/software-catalog/entity.svg index 32fb9d3f3f..ff637c407f 100644 --- a/docs/assets/software-catalog/entity.svg +++ b/docs/assets/software-catalog/entity.svg @@ -1,4 +1,4 @@ -
Envelop
Envelop
ApiVersion
version of the spec
ApiVersion...
Kind
entity type
Kind...
Spec
Describes the entity
Spec...
Metadata
Thins that are not part of the spec
Metadata...
name
name
description
description
title
title
uid
uid
namespace
namespace
labels
labels
annotations
annotations
tags
tags
links
links
Entity
Entity
Text is not SVG - cannot display
\ No newline at end of file +
Envelop
Envelop
ApiVersion
version of the spec
ApiVersion...
Kind
entity type
Kind...
Spec
Describes the entity
Spec...
Metadata
Things that are not part of the spec
Metadata...
name
name
description
description
title
title
uid
uid
namespace
namespace
labels
labels
annotations
annotations
tags
tags
links
links
Entity
Entity
Text is not SVG - cannot display
\ No newline at end of file diff --git a/docs/features/software-catalog/user-guide.md b/docs/features/software-catalog/user-guide.md index 75870bdb81..e86ddd43b2 100644 --- a/docs/features/software-catalog/user-guide.md +++ b/docs/features/software-catalog/user-guide.md @@ -54,8 +54,8 @@ The recommended approach would be to represent information in catalog-info files **Systems** - Jira installation -- Pageduty -- Physical resources: This is probably more useful for longer-lived ones (eg, servers). +- Pagerduty +- Physical resources: This is probably more useful for longer-lived ones (For example servers). **Ownership - users - groups by** From 744ace24f0df0fad22e049ccc1aaf458305abc18 Mon Sep 17 00:00:00 2001 From: Waldir Montoya <35240971+waldirmontoya25@users.noreply.github.com> Date: Thu, 30 Mar 2023 17:21:58 -0500 Subject: [PATCH 010/213] Update docs/features/software-catalog/user-guide.md Co-authored-by: Johan Haals Signed-off-by: Waldir Montoya <35240971+waldirmontoya25@users.noreply.github.com> --- docs/features/software-catalog/user-guide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/features/software-catalog/user-guide.md b/docs/features/software-catalog/user-guide.md index e86ddd43b2..105c9b120e 100644 --- a/docs/features/software-catalog/user-guide.md +++ b/docs/features/software-catalog/user-guide.md @@ -4,7 +4,7 @@ The Software Catalog in Backstage is intended to capture entities relevant to humans and have a clear mental model around them rather than an exhaustive inventory of all possible things. The focus is on attaching functionality and visual views centered around these entities. Determining the "edge" where the catalog ends and the external world begins is crucial to ensure that the catalog's scope is appropriate. The Backstage software catalog is a centralized hub for organizing and discovering software components and services. However, there may not be better tools for keeping track of the dynamic relationships between these components and services in real-time. Its primary objective is to offer a high-level overview of concepts rather than runtime aspects and to provide a user-friendly interface. To integrate data from external sources, it is recommended to attach tooling to the nodes in the graph using annotations. A front-end plugin can also be developed to showcase deployment information and other real-time data. -It is worth noting that the Backstage database should not be considered the ultimate source of truth. Instead, it is advisable to use the Backstage Catalog as a caching mechanism that utilizes a REST API to convey information to the catalog UI and other Backstage plugins. Adopting a GitOps approach is recommended to modify YAML files in Backstage, treating YAML files in repositories as the primary source of truth and using Scaffolder to make changes via the UI and generate a pull request in the repository with the updated changes. +It is worth noting that the Catalog should not be considered the ultimate source of truth. Instead, it is advisable to use the Backstage Catalog as a caching mechanism that utilizes a REST API to convey information to the catalog UI and other Backstage plugins. Adopting a GitOps approach is recommended to modify YAML files in Backstage, treating YAML files in repositories as the primary source of truth and using Scaffolder to make changes via the UI and generate a pull request in the repository with the updated changes. ### Descriptor Components used to build the Catalog Graph From ec17fe572a1a7eca6ab2f13bd7ed82115336857a Mon Sep 17 00:00:00 2001 From: Waldir Montoya <35240971+waldirmontoya25@users.noreply.github.com> Date: Thu, 30 Mar 2023 17:49:39 -0500 Subject: [PATCH 011/213] Correct H1 Heading MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Fredrik Adelöw Signed-off-by: Waldir Montoya <35240971+waldirmontoya25@users.noreply.github.com> --- docs/features/software-catalog/user-guide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/features/software-catalog/user-guide.md b/docs/features/software-catalog/user-guide.md index 105c9b120e..3d920de482 100644 --- a/docs/features/software-catalog/user-guide.md +++ b/docs/features/software-catalog/user-guide.md @@ -1,4 +1,4 @@ -#Architecting your Catalog +# Architecting your Catalog ## Overview From 30831e48915ad85f8c034ef96e0a357f93955c88 Mon Sep 17 00:00:00 2001 From: Waldir Montoya Date: Thu, 30 Mar 2023 19:06:13 -0500 Subject: [PATCH 012/213] Fix wording, image format and added links back to docs Signed-off-by: Waldir Montoya --- docs/assets/software-catalog/.$entity.svg.bkp | 4 -- .../{entity.svg => entity.drawio.svg} | 0 docs/features/software-catalog/user-guide.md | 37 +++++++++---------- 3 files changed, 18 insertions(+), 23 deletions(-) delete mode 100644 docs/assets/software-catalog/.$entity.svg.bkp rename docs/assets/software-catalog/{entity.svg => entity.drawio.svg} (100%) diff --git a/docs/assets/software-catalog/.$entity.svg.bkp b/docs/assets/software-catalog/.$entity.svg.bkp deleted file mode 100644 index a7b6fb1d7e..0000000000 --- a/docs/assets/software-catalog/.$entity.svg.bkp +++ /dev/null @@ -1,4 +0,0 @@ - - - -
Envelop
Envelop
ApiVersion
version of the spec
ApiVersion...
Kind
entity type
Kind...
Spec
Describes the entity
Spec...
Metadata
Things that are not part of the spec
Metadata...
name
name
description
description
title
title
uid
uid
namespace
namespace
labels
labels
annotations
annotations
tags
tags
links
links
Entity
Entity
Text is not SVG - cannot display
\ No newline at end of file diff --git a/docs/assets/software-catalog/entity.svg b/docs/assets/software-catalog/entity.drawio.svg similarity index 100% rename from docs/assets/software-catalog/entity.svg rename to docs/assets/software-catalog/entity.drawio.svg diff --git a/docs/features/software-catalog/user-guide.md b/docs/features/software-catalog/user-guide.md index 3d920de482..69fc75027c 100644 --- a/docs/features/software-catalog/user-guide.md +++ b/docs/features/software-catalog/user-guide.md @@ -1,32 +1,30 @@ -# Architecting your Catalog +#Architecting your Catalog ## Overview -The Software Catalog in Backstage is intended to capture entities relevant to humans and have a clear mental model around them rather than an exhaustive inventory of all possible things. The focus is on attaching functionality and visual views centered around these entities. Determining the "edge" where the catalog ends and the external world begins is crucial to ensure that the catalog's scope is appropriate. -The Backstage software catalog is a centralized hub for organizing and discovering software components and services. However, there may not be better tools for keeping track of the dynamic relationships between these components and services in real-time. Its primary objective is to offer a high-level overview of concepts rather than runtime aspects and to provide a user-friendly interface. To integrate data from external sources, it is recommended to attach tooling to the nodes in the graph using annotations. A front-end plugin can also be developed to showcase deployment information and other real-time data. -It is worth noting that the Catalog should not be considered the ultimate source of truth. Instead, it is advisable to use the Backstage Catalog as a caching mechanism that utilizes a REST API to convey information to the catalog UI and other Backstage plugins. Adopting a GitOps approach is recommended to modify YAML files in Backstage, treating YAML files in repositories as the primary source of truth and using Scaffolder to make changes via the UI and generate a pull request in the repository with the updated changes. +The Software Catalog in Backstage is intended to capture human mental models using entities and their relationships rather than an exhaustive inventory of all possible things. The focus is on attaching functionality and views centered around these entities. Determining the "edge" where the catalog ends and the external world begins is crucial to ensure that the catalog's scope is appropriate. +The Backstage software catalog serves as a centralized hub for organizing and discovering software components and services. While it excels at providing a high-level overview of these concepts, it may not be the ideal solution for tracking dynamic relationships between components and services in real-time. You can achieve real time views by attaching appropriate tooling to the nodes in the graph through [annotations](https://backstage.io/docs/features/software-catalog/well-known-annotations) and developing custom front-end plugins that display deployment information and other real-time data. +It is worth noting that the Backstage database should not be considered the ultimate source of truth. Instead, it is advisable to use the Backstage Catalog as a caching mechanism that utilizes a REST API to convey information to the catalog UI and other Backstage plugins. Adopting a GitOps approach is recommended to modify YAML files in Backstage, treating YAML files in repositories as the primary source of truth and using Scaffolder to make changes via the UI and generate a pull request in the repository with the updated changes. ### Descriptor Components used to build the Catalog Graph -**Entities:** An entity refers to a node in the graph that represents a distinct object, concept, or thing. Nodes are the fundamental building blocks of a graph database and are used to represent entities and their properties. +[**Entities:**](https://backstage.io/docs/features/software-catalog/system-model) An entity refers to a node in the graph that represents a distinct object, concept, or thing. Nodes are the fundamental building blocks of a graph database and are used to represent entities and their properties. -![](../../assets/software-catalog/entity.svg) +![](../../assets/software-catalog/entity.drawio.svg) -**Kinds:** These are broad categories used to group related entities. Kinds are used to provide a high-level categorization of entities, such as "service", "database", or "team". Kinds are often used to provide a way to filter entities in the catalog and to provide a high-level overview of the types of entities that are being managed. +[**Kinds:**](https://backstage.io/docs/features/software-catalog/descriptor-format#contents) These are broad categories used to group related entities. Kinds are used to provide a high-level categorization of entities, such as "service", "database", or "team". Kinds are often used to provide a way to filter entities in the catalog and to provide a high-level overview of the types of entities that are being managed. -**Relations:** These are links between different entities in the catalog. Relations express the relationships between different entities, such as dependencies or ownership. Adopters can use relations to help users navigate the catalog and understand the relationships between different entities. +[**Relations:**](https://backstage.io/docs/features/software-catalog/descriptor-format#common-to-all-kinds-relations) These are links between different entities in the catalog. Relations express the relationships between different entities, such as dependencies or ownership. Adopters can use relations to help users navigate the catalog and understand the relationships between different entities. -**Spec:** A specification or "spec" is a schema that outlines the data structure of an entity in the Backstage catalog. It defines the properties, relationships, data types, and constraints for an entity, ensuring consistency and accuracy of data while allowing for easy sharing and consumption of data across components and plugins. Specs are useful when creating or extending entities and can help make data more reusable and interoperable. The spec section is fully customizable, and users can create their own components and plugins to render the information. +[**Spec:**](https://backstage.io/docs/features/software-catalog/descriptor-format#spec-varies) A specification or "spec" is a schema that outlines the data structure of an entity in the Backstage catalog. It defines the properties, relationships, data types, and constraints for an entity, ensuring consistency and accuracy of data while allowing for easy sharing and consumption of data across components and plugins. Specs are useful when creating or extending entities and can help make data more reusable and interoperable. The spec section is fully customizable, and users can create their own components and plugins to render the information. -**Types:** These are more specific categories used to classify entities within a given Kind. Types provide a more granular categorization of entities, such as "frontend-service" or "backend-service.". Types are often used to provide additional context and information about an entity and to help users understand the role and function of the entity within the broader system. +[**Types:**](https://backstage.io/docs/features/software-catalog/system-model#type) These are more specific categories used to classify entities within a given Kind. Types provide a more granular categorization of entities, such as "frontend-service" or "backend-service.". Types are often used to provide additional context and information about an entity and to help users understand the role and function of the entity within the broader system. -**Annotations:** These key-value pairs can be attached to an entity in the catalog. They are typically used to add additional information or metadata to an entity. Annotations are often used to provide information that is used by automated tools or scripts and to provide further context to humans working with the entity or refer plugins to the external world. - -**Statuses:** These indicators represent an entity's current state. They are typically used to show whether an entity is healthy or not, whether it is up-to-date or out-of-date, or whether it is passing or failing various checks or tests. +[**Annotations:**](https://backstage.io/docs/features/software-catalog/well-known-annotations) These key-value pairs can be attached to an entity in the catalog. They are typically used to add additional information or metadata to an entity. Annotations are often used to provide information that is used by automated tools or scripts and to provide further context to humans working with the entity or refer plugins to the external world. ## Use cases out of the box -The catalog builds a graph using descriptors as nodes and relations as edges. Out of the box you get the following use cases: +The catalog builds a graph using [descriptors](https://backstage.io/docs/features/software-catalog/descriptor-format) as nodes and [relations](https://backstage.io/docs/features/software-catalog/descriptor-format#common-to-all-kinds-relations) as edges. Out of the box you get the following use cases: - Ownership tracking - Inventory @@ -42,7 +40,7 @@ The recommended approach would be to represent information in catalog-info files ### Well-known trackable assets -**Software Components** +**Components** - Services - Websites @@ -50,12 +48,13 @@ The recommended approach would be to represent information in catalog-info files - Data Pipelines - Machine Learning Models - Third-party software components: It is recommended to have a separate repo for all 3d party catalog-info files. - -**Systems** - - Jira installation - Pagerduty + +**Resources** + - Physical resources: This is probably more useful for longer-lived ones (For example servers). +- Cloud Infrastructure services **Ownership - users - groups by** @@ -84,7 +83,7 @@ The recommended approach would be to represent information in catalog-info files APIs Could list networked services or libraries and it’s particularly useful to identify APIs that form boundaries between systems. There are some considerations to keep in mind: -**API versions:** It’s not recommended to have multiple entity instances (e.g., metadata.name: my-api-v1 and metadata.name: my-api-v2). +**API versions:** Major API versions can be treated as distinct APIs, and it is possible to create separate entity instances for each (e.g., metadata.name: my-api-v1 and metadata.name: my-api-v2). However, this approach is not recommended for minor or patch-level variations **Detail:** It’s not recommended going too granular because the catalog in its current form won't perhaps be a great platform to express it. From 10156830b9ff7245e365130245b2bfb132522aef Mon Sep 17 00:00:00 2001 From: Waldir Montoya Date: Tue, 18 Apr 2023 09:29:33 -0500 Subject: [PATCH 013/213] Add the document to the microsite Signed-off-by: Waldir Montoya --- .../{user-guide.md => architecting-the-catalog.md} | 8 ++++---- microsite/sidebars.json | 3 ++- 2 files changed, 6 insertions(+), 5 deletions(-) rename docs/features/software-catalog/{user-guide.md => architecting-the-catalog.md} (87%) diff --git a/docs/features/software-catalog/user-guide.md b/docs/features/software-catalog/architecting-the-catalog.md similarity index 87% rename from docs/features/software-catalog/user-guide.md rename to docs/features/software-catalog/architecting-the-catalog.md index 69fc75027c..922dcad3ad 100644 --- a/docs/features/software-catalog/user-guide.md +++ b/docs/features/software-catalog/architecting-the-catalog.md @@ -1,10 +1,10 @@ -#Architecting your Catalog +# Architecting your Catalog ## Overview The Software Catalog in Backstage is intended to capture human mental models using entities and their relationships rather than an exhaustive inventory of all possible things. The focus is on attaching functionality and views centered around these entities. Determining the "edge" where the catalog ends and the external world begins is crucial to ensure that the catalog's scope is appropriate. -The Backstage software catalog serves as a centralized hub for organizing and discovering software components and services. While it excels at providing a high-level overview of these concepts, it may not be the ideal solution for tracking dynamic relationships between components and services in real-time. You can achieve real time views by attaching appropriate tooling to the nodes in the graph through [annotations](https://backstage.io/docs/features/software-catalog/well-known-annotations) and developing custom front-end plugins that display deployment information and other real-time data. -It is worth noting that the Backstage database should not be considered the ultimate source of truth. Instead, it is advisable to use the Backstage Catalog as a caching mechanism that utilizes a REST API to convey information to the catalog UI and other Backstage plugins. Adopting a GitOps approach is recommended to modify YAML files in Backstage, treating YAML files in repositories as the primary source of truth and using Scaffolder to make changes via the UI and generate a pull request in the repository with the updated changes. +The Backstage software catalog serves as a centralized hub for organizing and discovering software components and services. While it excels at providing a high-level overview of these concepts, it may not be the ideal solution for tracking dynamic relationships between components and services in real-time. You can achieve real time views by attaching appropriate tooling to the nodes in the graph through [annotations](https://backstage.io/docs/features/software-catalog/well-known-annotations) and developing custom front-end [plugins](http://localhost:3000/docs/plugins/) that display deployment information and other real-time data. +It is worth noting that the Backstage Software Catalog should not be considered the ultimate source of truth, instead, it is advisable to use the Backstage Catalog as a caching mechanism that utilizes a REST API to convey information to the catalog UI and other Backstage plugins. Adopting a GitOps approach is recommended to modify YAML files in Backstage, treating YAML files in repositories as the primary source of truth and using Scaffolder to make changes via the UI and generate a pull request in the repository with the updated changes. ### Descriptor Components used to build the Catalog Graph @@ -70,7 +70,7 @@ The recommended approach would be to represent information in catalog-info files **Ownership based on teams:** The concept of ownership in the system is team-centric; hence, the "owner" field must reference the LDAP name of a squad according to a prescribed set of regulations. While there may be instances where the ownership is attributed to an individual, such deviations might create challenges. In such cases, the user could receive a notification through the web interface, highlighting that this departure is an exception and needs rectification. To ensure adherence to this system, every entity in the model should have a designated owner, preferably a valid team within the LDAP hierarchy. -**Ownership of features:** To track the ownership of specific features within your products and their interrelationships, two options are available: introducing a new component type, such as "feature," or creating a new Kind altogether. Nonetheless, it is advisable to choose the former approach and introduce a new type, like "feature," is advisable as it is less complicated and poses a lower risk. +**Ownership of features:** To track the ownership of specific features within your products and their interrelationships, two options are available: introducing a new component [type](https://backstage.io/docs/features/software-catalog/system-model/#type), such as "feature," or creating a new [Kind](https://backstage.io/docs/features/software-catalog/descriptor-format/#contents) altogether. Nonetheless, it is advisable to choose the former approach and introduce a new type, like "feature," is advisable as it is less complicated and poses a lower risk. **LDAP doesn’t reflect the organization structure:** If Workday or a similar system serves as the source of truth, and LDAP is utilized for user attributes, it is advisable to develop a layer on top of various systems to establish a unified API that the entire organization can query, rather than only Backstage. diff --git a/microsite/sidebars.json b/microsite/sidebars.json index 1515c483b9..c2d18925eb 100644 --- a/microsite/sidebars.json +++ b/microsite/sidebars.json @@ -80,7 +80,8 @@ "features/software-catalog/extending-the-model", "features/software-catalog/external-integrations", "features/software-catalog/catalog-customization", - "features/software-catalog/software-catalog-api" + "features/software-catalog/software-catalog-api", + "features/software-catalog/architecting-the-catalog" ] }, { From 5b13710ea21480b5adb5571731dae5905dcc270c Mon Sep 17 00:00:00 2001 From: Waldir Montoya Date: Thu, 20 Apr 2023 14:12:36 -0500 Subject: [PATCH 014/213] Correct entity diagram envelope word Signed-off-by: Waldir Montoya --- .gitignore | 6 +++++- docs/assets/software-catalog/entity.drawio.svg | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index f3c687d49c..c0bf195947 100644 --- a/.gitignore +++ b/.gitignore @@ -155,4 +155,8 @@ tsconfig.tmp.json # Lighthouse CI Reports **/.lighthouseci/* -!**/.lighthouseci/scripts \ No newline at end of file +!**/.lighthouseci/scripts + +# VS Code backing up svg files +*svg.bkp +*svg.dtmp \ No newline at end of file diff --git a/docs/assets/software-catalog/entity.drawio.svg b/docs/assets/software-catalog/entity.drawio.svg index ff637c407f..557d037ecd 100644 --- a/docs/assets/software-catalog/entity.drawio.svg +++ b/docs/assets/software-catalog/entity.drawio.svg @@ -1,4 +1,4 @@ -
Envelop
Envelop
ApiVersion
version of the spec
ApiVersion...
Kind
entity type
Kind...
Spec
Describes the entity
Spec...
Metadata
Things that are not part of the spec
Metadata...
name
name
description
description
title
title
uid
uid
namespace
namespace
labels
labels
annotations
annotations
tags
tags
links
links
Entity
Entity
Text is not SVG - cannot display
\ No newline at end of file +
Envelope
Envelope
ApiVersion
version of the spec
ApiVersion...
Kind
entity type
Kind...
Spec
Describes the entity
Spec...
Metadata
Things that are not part of the spec
Metadata...
name
name
description
description
title
title
uid
uid
namespace
namespace
labels
labels
annotations
annotations
tags
tags
links
links
Entity
Entity
Text is not SVG - cannot display
\ No newline at end of file From 66ea69cb02ddba3f3f6a9ee941d37bf0a6125fb7 Mon Sep 17 00:00:00 2001 From: Waldir Montoya Date: Tue, 9 May 2023 12:17:33 -0500 Subject: [PATCH 015/213] Changing the title for the speller checker Signed-off-by: Waldir Montoya --- ...rchitecting-the-catalog.md => creating-the-catalog-graph.md} | 2 +- microsite/sidebars.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename docs/features/software-catalog/{architecting-the-catalog.md => creating-the-catalog-graph.md} (99%) diff --git a/docs/features/software-catalog/architecting-the-catalog.md b/docs/features/software-catalog/creating-the-catalog-graph.md similarity index 99% rename from docs/features/software-catalog/architecting-the-catalog.md rename to docs/features/software-catalog/creating-the-catalog-graph.md index 922dcad3ad..8b0f21a52c 100644 --- a/docs/features/software-catalog/architecting-the-catalog.md +++ b/docs/features/software-catalog/creating-the-catalog-graph.md @@ -1,4 +1,4 @@ -# Architecting your Catalog +# Creating the Catalog Graph ## Overview diff --git a/microsite/sidebars.json b/microsite/sidebars.json index c2d18925eb..ea34604e26 100644 --- a/microsite/sidebars.json +++ b/microsite/sidebars.json @@ -81,7 +81,7 @@ "features/software-catalog/external-integrations", "features/software-catalog/catalog-customization", "features/software-catalog/software-catalog-api", - "features/software-catalog/architecting-the-catalog" + "features/software-catalog/creating-the-catalog-graph" ] }, { From 12be418d14247d7dbeccc069841bfc075ad3f1ed Mon Sep 17 00:00:00 2001 From: Marcus Lindfeldt Date: Thu, 11 May 2023 16:26:38 +0200 Subject: [PATCH 016/213] fix: broken link to node-postgres docs Signed-off-by: Marcus Lindfeldt --- docs/tutorials/switching-sqlite-postgres.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/tutorials/switching-sqlite-postgres.md b/docs/tutorials/switching-sqlite-postgres.md index b87a77f4ed..87afabda60 100644 --- a/docs/tutorials/switching-sqlite-postgres.md +++ b/docs/tutorials/switching-sqlite-postgres.md @@ -37,7 +37,7 @@ backend: connection: ':memory:' # highlight-remove-end # highlight-add-start - # config options: https://node-postgres.com/api/client + # config options: https://node-postgres.com/apis/client client: pg connection: host: ${POSTGRES_HOST} @@ -72,7 +72,7 @@ backend: connection: ':memory:' # highlight-remove-end # highlight-add-start - # config options: https://node-postgres.com/api/client + # config options: https://node-postgres.com/apis/client client: pg connection: host: ${POSTGRES_HOST} From f5a66052f04ffb5791442ef17849b00187cf801e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Thu, 11 May 2023 18:14:02 +0200 Subject: [PATCH 017/213] Update code in readme a bit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- .changeset/perfect-readers-attack.md | 5 +++++ .../README.md | 19 ++++++------------- 2 files changed, 11 insertions(+), 13 deletions(-) create mode 100644 .changeset/perfect-readers-attack.md diff --git a/.changeset/perfect-readers-attack.md b/.changeset/perfect-readers-attack.md new file mode 100644 index 0000000000..93d205eb9c --- /dev/null +++ b/.changeset/perfect-readers-attack.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend-module-gitlab': patch +--- + +Tweak README diff --git a/plugins/scaffolder-backend-module-gitlab/README.md b/plugins/scaffolder-backend-module-gitlab/README.md index d071ca0cf6..340b57bbf8 100644 --- a/plugins/scaffolder-backend-module-gitlab/README.md +++ b/plugins/scaffolder-backend-module-gitlab/README.md @@ -20,9 +20,10 @@ Configure the action: // packages/backend/src/plugins/scaffolder.ts import { - createGitlabProjectAccessTokenAction, createGitlabProjectAccessTokenAction, createGitlabProjectDeployTokenAction, + createGitlabProjectVariableAction, + createGitlabGroupEnsureExistsAction, } from '@backstage/plugin-scaffolder-backend-module-gitlab'; // Create BuiltIn Actions @@ -36,18 +37,10 @@ const builtInActions = createBuiltinActions({ // Add Gitlab Actions const actions = [ ...builtInActions, - createGitlabProjectAccessTokenAction({ - integrations: integrations, - }), - createGitlabProjectAccessTokenAction({ - integrations: integrations, - }), - createGitlabProjectDeployTokenAction({ - integrations: integrations, - }), - createGitlabGroupEnsureExistsAction({ - integrations: integrations, - }), + createGitlabProjectAccessTokenAction({ integrations: integrations }), + createGitlabProjectDeployTokenAction({ integrations: integrations }), + createGitlabProjectVariableAction({ integrations: integrations }), + createGitlabGroupEnsureExistsAction({ integrations: integrations }), ]; // Create Scaffolder Router From 99c62d1e9cb2bb98a1a441536ab6194a894cf0ce Mon Sep 17 00:00:00 2001 From: sammy Date: Thu, 11 May 2023 16:22:59 +0100 Subject: [PATCH 018/213] docs: Add error handling instructions for 'No token available' error This commit adds instructions to the Backstage documentation on how to handle the `No token available for host: github.com, with owner , and repo from-backstage' error`. The instructions guide the user to restart Backstage using `Control-C` and `yarn dev` commands in the terminal, followed by clicking on the **START OVER** button. Signed-off-by: sammy. Signed-off-by: Samuel --- docs/getting-started/configuration.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/getting-started/configuration.md b/docs/getting-started/configuration.md index 2196a1a36d..ddf50c64e6 100644 --- a/docs/getting-started/configuration.md +++ b/docs/getting-started/configuration.md @@ -242,6 +242,7 @@ integrations: - host: github.com token: ${GITHUB_TOKEN} # this will use the environment variable GITHUB_TOKEN ``` +> If you encounter the error `No token available for host: github.com, with owner , and repo from-backstage`, try resolving it by restarting Backstage. First, stop the running instance by pressing `Control-C` in the terminal. Then, restart it by running the command `yarn dev`. Once Backstage is up and running, click the **START OVER** button." Some helpful links, for if you want to learn more about: From 4061d181c3473242f7f763fb1ce08cbce810142c Mon Sep 17 00:00:00 2001 From: Samuel Date: Thu, 11 May 2023 18:39:07 +0100 Subject: [PATCH 019/213] docs: Highlight error handling instructions with a note Signed-off-by: Samuel --- docs/getting-started/configuration.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/getting-started/configuration.md b/docs/getting-started/configuration.md index ddf50c64e6..4147f7bf11 100644 --- a/docs/getting-started/configuration.md +++ b/docs/getting-started/configuration.md @@ -242,7 +242,8 @@ integrations: - host: github.com token: ${GITHUB_TOKEN} # this will use the environment variable GITHUB_TOKEN ``` -> If you encounter the error `No token available for host: github.com, with owner , and repo from-backstage`, try resolving it by restarting Backstage. First, stop the running instance by pressing `Control-C` in the terminal. Then, restart it by running the command `yarn dev`. Once Backstage is up and running, click the **START OVER** button." + +> Note: If you encounter the error `No token available for host: github.com, with owner , and repo from-backstage`, try resolving it by restarting Backstage. First, stop the running instance by pressing `Control-C` in the terminal. Then, restart it by running the command `yarn dev`. Once Backstage is up and running, click the **START OVER** button." Some helpful links, for if you want to learn more about: From bbf91840a52a1521cc7123187ac4b0ee7519afd9 Mon Sep 17 00:00:00 2001 From: Andre Wanlin Date: Sat, 18 Mar 2023 16:21:20 -0500 Subject: [PATCH 020/213] Added backend tests Signed-off-by: Andre Wanlin --- .changeset/shaggy-gorillas-occur.md | 5 + plugins/linguist-backend/api-report.md | 12 + .../20230216_remove_processed_date_default.js | 39 +++ .../src/api/LinguistBackendApi.test.ts | 309 +++++++++++++++++- .../src/api/LinguistBackendApi.ts | 17 +- .../src/db/LinguistBackendDatabase.test.ts | 169 ++++++++++ .../src/db/LinguistBackendDatabase.ts | 22 +- 7 files changed, 562 insertions(+), 11 deletions(-) create mode 100644 .changeset/shaggy-gorillas-occur.md create mode 100644 plugins/linguist-backend/migrations/20230216_remove_processed_date_default.js create mode 100644 plugins/linguist-backend/src/db/LinguistBackendDatabase.test.ts diff --git a/.changeset/shaggy-gorillas-occur.md b/.changeset/shaggy-gorillas-occur.md new file mode 100644 index 0000000000..c122032e7f --- /dev/null +++ b/.changeset/shaggy-gorillas-occur.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-linguist-backend': patch +--- + +Added tests for the `LinguistBackendDatabase` and `LinguistBackendApi` which included refactoring to better support using SQLite and removed the default from the `processes_date` column diff --git a/plugins/linguist-backend/api-report.md b/plugins/linguist-backend/api-report.md index a47f123ac4..ca36a1f816 100644 --- a/plugins/linguist-backend/api-report.md +++ b/plugins/linguist-backend/api-report.md @@ -3,6 +3,7 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts +import { EntitiesOverview } from '@backstage/plugin-linguist-common'; import { EntityResults } from '@backstage/plugin-linguist-common'; import express from 'express'; import { HumanDuration } from '@backstage/types'; @@ -13,6 +14,7 @@ import { PluginDatabaseManager } from '@backstage/backend-common'; import { PluginEndpointDiscovery } from '@backstage/backend-common'; import { PluginTaskScheduler } from '@backstage/backend-tasks'; import { ProcessedEntity } from '@backstage/plugin-linguist-common'; +import { Results } from 'linguist-js/dist/types'; import { TaskScheduleDefinition } from '@backstage/backend-tasks'; import { TokenManager } from '@backstage/backend-common'; import { UrlReader } from '@backstage/backend-common'; @@ -38,8 +40,18 @@ export class LinguistBackendApi { linguistJsOptions?: Record, ); // (undocumented) + addNewEntities(): Promise; + // (undocumented) + generateEntitiesLanguages(): Promise; + // (undocumented) + generateEntityLanguages(entityRef: string, url: string): Promise; + // (undocumented) + getEntitiesOverview(): Promise; + // (undocumented) getEntityLanguages(entityRef: string): Promise; // (undocumented) + getLinguistResults(dir: string): Promise; + // (undocumented) processEntities(): Promise; } diff --git a/plugins/linguist-backend/migrations/20230216_remove_processed_date_default.js b/plugins/linguist-backend/migrations/20230216_remove_processed_date_default.js new file mode 100644 index 0000000000..5aaf02216e --- /dev/null +++ b/plugins/linguist-backend/migrations/20230216_remove_processed_date_default.js @@ -0,0 +1,39 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @param {import('knex').Knex} knex + */ +exports.up = async function up(knex) { + // Sqlite does not support this raw SQL + if (!knex.client.config.client.includes('sqlite3')) { + await knex.raw( + 'ALTER TABLE entity_result ALTER COLUMN processed_date DROP DEFAULT;', + ); + } +}; + +/** + * @param {import('knex').Knex} knex + */ +exports.down = async function down(knex) { + // Sqlite does not support this raw SQL + if (!knex.client.config.client.includes('sqlite3')) { + await knex.raw( + 'ALTER TABLE entity_result ALTER COLUMN processed_date SET DEFAULT now();', + ); + } +}; diff --git a/plugins/linguist-backend/src/api/LinguistBackendApi.test.ts b/plugins/linguist-backend/src/api/LinguistBackendApi.test.ts index 741d52e734..baf7d27ad7 100644 --- a/plugins/linguist-backend/src/api/LinguistBackendApi.test.ts +++ b/plugins/linguist-backend/src/api/LinguistBackendApi.test.ts @@ -13,7 +13,49 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { kindOrDefault } from './LinguistBackendApi'; +import { + getVoidLogger, + PluginEndpointDiscovery, + ReadTreeResponse, + ServerTokenManager, + UrlReader, +} from '@backstage/backend-common'; +import { GetEntitiesResponse } from '@backstage/catalog-client'; +import { Results } from 'linguist-js/dist/types'; +import { DateTime } from 'luxon'; +import { LinguistBackendStore } from '../db'; +import { kindOrDefault, LinguistBackendApi } from './LinguistBackendApi'; +import fs from 'fs-extra'; + +const linguistResultMock = Promise.resolve({ + files: { + count: 4, + bytes: 6010, + results: { + '/src/index.ts': 'TypeScript', + '/src/cli.js': 'JavaScript', + '/readme.md': 'Markdown', + '/no-lang': null, + }, + }, + languages: { + count: 3, + bytes: 6000, + results: { + JavaScript: { type: 'programming', bytes: 1000, color: '#f1e05a' }, + TypeScript: { type: 'programming', bytes: 2000, color: '#2b7489' }, + Markdown: { type: 'prose', bytes: 3000, color: '#083fa1' }, + }, + }, + unknown: { + count: 1, + bytes: 10, + filenames: { + 'no-lang': 10, + }, + extensions: {}, + }, +} as Results); describe('kindOrDefault', () => { it('should return default kind when undefined', () => { @@ -26,3 +68,268 @@ describe('kindOrDefault', () => { expect(kindOrDefault(['API'])).toEqual(['API']); }); }); + +describe('Linguist backend API', () => { + const getEntitiesMock = jest.fn(); + jest.mock('@backstage/catalog-client', () => { + return { + CatalogClient: jest + .fn() + .mockImplementation(() => ({ getEntities: getEntitiesMock })), + }; + }); + + const logger = getVoidLogger(); + + const store: jest.Mocked = { + insertEntityResults: jest.fn(), + insertNewEntity: jest.fn(), + getEntityResults: jest.fn(), + getProcessedEntities: jest.fn(), + getUnprocessedEntities: jest.fn(), + }; + + const urlReader: jest.Mocked = { + readTree: jest.fn(), + search: jest.fn(), + readUrl: jest.fn(), + }; + + const discovery: jest.Mocked = { + getBaseUrl: jest.fn(), + getExternalBaseUrl: jest.fn(), + }; + + const tokenManager = ServerTokenManager.noop(); + + const api = new LinguistBackendApi( + logger, + store, + urlReader, + discovery, + tokenManager, + ); + + beforeEach(() => { + jest.resetAllMocks(); + }); + + it('should get languages for an entity', async () => { + store.getEntityResults.mockResolvedValue({ + languageCount: 1, + totalBytes: 2205, + processedDate: '2023-02-15T20:10:21.378Z', + breakdown: [ + { + name: 'YAML', + percentage: 100, + bytes: 2205, + type: 'data', + color: '#cb171e', + }, + ], + }); + + const entityRef = 'template:default/create-react-app-template'; + const languages = await api.getEntityLanguages(entityRef); + expect(languages).toEqual({ + languageCount: 1, + totalBytes: 2205, + processedDate: '2023-02-15T20:10:21.378Z', + breakdown: [ + { + name: 'YAML', + percentage: 100, + bytes: 2205, + type: 'data', + color: '#cb171e', + }, + ], + }); + }); + + it('should add new entities', async () => { + const testEntityListResponse: GetEntitiesResponse = { + items: [ + { + apiVersion: 'backstage.io/v1beta1', + metadata: { + name: 'service-one', + }, + kind: 'Component', + }, + { + apiVersion: 'backstage.io/v1beta1', + metadata: { + name: 'service-two', + }, + kind: 'Component', + }, + { + apiVersion: 'backstage.io/v1beta1', + metadata: { + name: 'service-three', + }, + kind: 'Component', + }, + ], + }; + getEntitiesMock.mockResolvedValue(testEntityListResponse); + + await api.addNewEntities(); + expect(store.insertNewEntity).toHaveBeenCalledTimes(3); + }); + + it('should get default entity overview', async () => { + store.getProcessedEntities.mockResolvedValue([ + { + entityRef: 'component:default/service-one', + processedDate: DateTime.now().toJSDate(), + }, + { + entityRef: 'component:default/stale-service-two', + processedDate: DateTime.now().minus({ days: 45 }).toJSDate(), + }, + ]); + + store.getUnprocessedEntities.mockResolvedValue([ + 'component:default/service-three', + 'component:default/service-four', + 'component:default/service-five', + ]); + + const overview = await api.getEntitiesOverview(); + expect(overview.entityCount).toEqual(5); + expect(overview.processedCount).toEqual(2); + expect(overview.staleCount).toEqual(0); + expect(overview.pendingCount).toEqual(3); + expect(overview.filteredEntities).toEqual([ + 'component:default/service-three', + 'component:default/service-four', + 'component:default/service-five', + ]); + }); + + it('should get entity overview with stale items', async () => { + const staleApi = new LinguistBackendApi( + logger, + store, + urlReader, + discovery, + tokenManager, + { days: 5 }, + ); + store.getProcessedEntities.mockResolvedValue([ + { + entityRef: 'component:default/service-one', + processedDate: DateTime.now().toJSDate(), + }, + { + entityRef: 'component:default/stale-service-two', + processedDate: DateTime.now().minus({ days: 45 }).toJSDate(), + }, + ]); + + store.getUnprocessedEntities.mockResolvedValue([ + 'component:default/service-three', + 'component:default/service-four', + 'component:default/service-five', + ]); + + const overview = await staleApi.getEntitiesOverview(); + expect(overview.entityCount).toEqual(5); + expect(overview.processedCount).toEqual(2); + expect(overview.staleCount).toEqual(1); + expect(overview.pendingCount).toEqual(4); + expect(overview.filteredEntities).toEqual([ + 'component:default/stale-service-two', + 'component:default/service-three', + 'component:default/service-four', + 'component:default/service-five', + ]); + }); + + it('should generate and save languages for an entity', async () => { + const spy = jest + .spyOn(api, 'getLinguistResults') + .mockImplementation(() => linguistResultMock); + + urlReader.readTree.mockResolvedValueOnce({ + files: async () => [ + { + content: async () => Buffer.from('-- XXX: code-data', 'utf8'), + path: 'my-file.js', + }, + ], + dir: async () => '/temp/my-code', + } as ReadTreeResponse); + + const fsSpy = jest.spyOn(fs, 'remove'); + + await api.generateEntityLanguages( + 'component:default/fake-service', + 'https://some.fake/service/', + ); + expect(api.getLinguistResults).toHaveBeenCalled(); + expect(store.insertEntityResults).toHaveBeenCalled(); + expect(fs.remove).toHaveBeenCalled(); + spy.mockClear(); + fsSpy.mockClear(); + }); + + it('should generate languages for multiple entities using default', async () => { + store.getProcessedEntities.mockResolvedValue([ + { + entityRef: 'component:default/service-one', + processedDate: DateTime.now().toJSDate(), + }, + { + entityRef: 'component:default/stale-service-two', + processedDate: DateTime.now().minus({ days: 45 }).toJSDate(), + }, + ]); + + store.getUnprocessedEntities.mockResolvedValue([ + 'component:default/service-three', + 'component:default/service-four', + 'component:default/service-five', + ]); + const generateEntityLanguages = jest.spyOn(api, 'generateEntityLanguages'); + await api.generateEntitiesLanguages(); + expect(generateEntityLanguages).toHaveBeenCalledTimes(3); + }); + + it('should generate languages for multiple entities using defined batch size', async () => { + const batchApi = new LinguistBackendApi( + logger, + store, + urlReader, + discovery, + tokenManager, + undefined, + 1, + ); + store.getProcessedEntities.mockResolvedValue([ + { + entityRef: 'component:default/service-one', + processedDate: DateTime.now().toJSDate(), + }, + { + entityRef: 'component:default/stale-service-two', + processedDate: DateTime.now().minus({ days: 45 }).toJSDate(), + }, + ]); + + store.getUnprocessedEntities.mockResolvedValue([ + 'component:default/service-three', + 'component:default/service-four', + 'component:default/service-five', + ]); + const generateEntityLanguages = jest.spyOn( + batchApi, + 'generateEntityLanguages', + ); + await batchApi.generateEntitiesLanguages(); + expect(generateEntityLanguages).toHaveBeenCalledTimes(1); + }); +}); diff --git a/plugins/linguist-backend/src/api/LinguistBackendApi.ts b/plugins/linguist-backend/src/api/LinguistBackendApi.ts index df7e30a7b0..766012018f 100644 --- a/plugins/linguist-backend/src/api/LinguistBackendApi.ts +++ b/plugins/linguist-backend/src/api/LinguistBackendApi.ts @@ -99,7 +99,7 @@ export class LinguistBackendApi { await this.generateEntitiesLanguages(); } - private async addNewEntities() { + public async addNewEntities() { const annotationKey = this.useSourceLocation ? ANNOTATION_SOURCE_LOCATION : LINGUIST_ANNOTATION; @@ -121,7 +121,7 @@ export class LinguistBackendApi { }); } - private async generateEntitiesLanguages() { + public async generateEntitiesLanguages() { const entitiesOverview = await this.getEntitiesOverview(); this.logger?.info( `Entities overview: Entity: ${entitiesOverview.entityCount}, Processed: ${entitiesOverview.processedCount}, Pending: ${entitiesOverview.pendingCount}, Stale ${entitiesOverview.staleCount}`, @@ -156,7 +156,7 @@ export class LinguistBackendApi { }); } - private async getEntitiesOverview(): Promise { + public async getEntitiesOverview(): Promise { this.logger?.debug('Getting pending entities'); const processedEntities = await this.store.getProcessedEntities(); @@ -172,7 +172,7 @@ export class LinguistBackendApi { const filteredEntities = staleEntities.concat(unprocessedEntities); const entitiesOverview: EntitiesOverview = { - entityCount: unprocessedEntities.length, + entityCount: unprocessedEntities.length + processedEntities.length, processedCount: processedEntities.length, staleCount: staleEntities.length, pendingCount: filteredEntities.length, @@ -182,7 +182,7 @@ export class LinguistBackendApi { return entitiesOverview; } - private async generateEntityLanguages( + public async generateEntityLanguages( entityRef: string, url: string, ): Promise { @@ -193,7 +193,7 @@ export class LinguistBackendApi { const readTreeResponse = await this.urlReader.readTree(url); const dir = await readTreeResponse.dir(); - const results = await linguist(dir, this.linguistJsOptions); + const results = await this.getLinguistResults(dir); try { const totalBytes = results.languages.bytes; @@ -233,6 +233,11 @@ export class LinguistBackendApi { await fs.remove(dir); } } + + public async getLinguistResults(dir: string) { + const results = await linguist(dir, this.linguistJsOptions); + return results; + } } export function kindOrDefault(kind?: string[]) { diff --git a/plugins/linguist-backend/src/db/LinguistBackendDatabase.test.ts b/plugins/linguist-backend/src/db/LinguistBackendDatabase.test.ts new file mode 100644 index 0000000000..f4e0bba627 --- /dev/null +++ b/plugins/linguist-backend/src/db/LinguistBackendDatabase.test.ts @@ -0,0 +1,169 @@ +/* + * Copyright 2021 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Knex as KnexType, Knex } from 'knex'; +import { TestDatabases } from '@backstage/backend-test-utils'; +import { + LinguistBackendDatabase, + LinguistBackendStore, +} from './LinguistBackendDatabase'; +import { Languages, ProcessedEntity } from '@backstage/plugin-linguist-common'; + +function createDatabaseManager( + client: KnexType, + skipMigrations: boolean = false, +) { + return { + getClient: async () => client, + migrations: { + skip: skipMigrations, + }, + }; +} + +const rawDbEntityResultRows = [ + { + id: '14b32439-848a-49b2-92a4-98753f932606', + entity_ref: 'template:default/create-react-app-template', + languages: undefined, + processed_date: undefined, + }, + { + id: '8c85d3ec-ccea-4b29-9de9-ccdd7e5ba452', + entity_ref: 'template:default/docs-template', + languages: undefined, + processed_date: undefined, + }, + { + id: 'b922c87b-37bc-4505-b4af-70a1438decda', + entity_ref: 'template:default/pull-request', + languages: + '{"languageCount":1,"totalBytes":2205,"processedDate":"2023-02-15T20:10:21.378Z","breakdown":[{"name":"YAML","percentage":100,"bytes":2205,"type":"data","color":"#cb171e"}]}', + processed_date: new Date('2023-02-15 20:10:21.378Z'), + }, + { + id: 'bd555e6d-a3d0-4b48-a930-194db8f80db7', + entity_ref: 'template:default/react-ssr-template', + languages: + '{"languageCount":8,"totalBytes":8988,"processedDate":"2023-02-15T20:10:21.388Z","breakdown":[{"name":"INI","percentage":2.26,"bytes":203,"type":"data","color":"#d1dbe0"},{"name":"JavaScript","percentage":5.94,"bytes":534,"type":"programming","color":"#f1e05a"},{"name":"YAML","percentage":31.09,"bytes":2794,"type":"data","color":"#cb171e"},{"name":"Markdown","percentage":11.79,"bytes":1060,"type":"prose","color":"#083fa1"},{"name":"JSON","percentage":21.09,"bytes":1896,"type":"data","color":"#292929"},{"name":"CSS","percentage":0,"bytes":0,"type":"markup","color":"#563d7c"},{"name":"TSX","percentage":26.01,"bytes":2338,"type":"programming","color":"#3178c6"},{"name":"TypeScript","percentage":1.81,"bytes":163,"type":"programming","color":"#3178c6"}]}', + processed_date: new Date('2023-02-15 20:10:21.388Z'), + }, + { + id: '4145c0cf-44e9-4e95-9d57-781af4685b28', + entity_ref: 'template:default/springboot-template', + languages: + '{"languageCount":9,"totalBytes":80986,"processedDate":"2023-02-15T20:10:21.419Z","breakdown":[{"name":"Shell","percentage":0.16,"bytes":130,"type":"programming","color":"#89e051"},{"name":"INI","percentage":0.35,"bytes":286,"type":"data","color":"#d1dbe0"},{"name":"Dockerfile","percentage":0.3,"bytes":246,"type":"programming","color":"#384d54"},{"name":"YAML","percentage":3.92,"bytes":3171,"type":"data","color":"#cb171e"},{"name":"Markdown","percentage":1.31,"bytes":1059,"type":"prose","color":"#083fa1"},{"name":"XML","percentage":10.48,"bytes":8491,"type":"data","color":"#0060ac"},{"name":"Java","percentage":1.8,"bytes":1455,"type":"programming","color":"#b07219"},{"name":"Text","percentage":81.22,"bytes":65780,"type":"prose"},{"name":"Protocol Buffer","percentage":0.45,"bytes":368,"type":"data"}]}', + processed_date: new Date('2023-02-15 20:10:21.419Z'), + }, +]; + +describe('Linguist database', () => { + const databases = TestDatabases.create(); + let store: LinguistBackendStore; + let testDbClient: Knex; + beforeAll(async () => { + testDbClient = await databases.init('SQLITE_3'); + const database = createDatabaseManager(testDbClient); + + store = await LinguistBackendDatabase.create(await database.getClient()); + }); + beforeEach(async () => { + await testDbClient.batchInsert('entity_result', rawDbEntityResultRows); + }); + afterEach(async () => { + await testDbClient('entity_result').delete(); + }); + + it('should be able to return entity results', async () => { + const validLanguagesResult: Languages = { + languageCount: 1, + totalBytes: 2205, + processedDate: '2023-02-15T20:10:21.378Z', + breakdown: [ + { + name: 'YAML', + percentage: 100, + bytes: 2205, + type: 'data', + color: '#cb171e', + }, + ], + }; + + const entityResult = await store.getEntityResults( + 'template:default/pull-request', + ); + expect(entityResult).toMatchObject(validLanguagesResult); + }); + + it('should return empty entity results when not found', async () => { + const validEmptyLanguagesResult: Languages = { + languageCount: 0, + totalBytes: 0, + processedDate: 'undefined', + breakdown: [], + }; + + const entityResult = await store.getEntityResults( + 'template:default/create-react-app-template', + ); + expect(entityResult).toMatchObject(validEmptyLanguagesResult); + }); + + it('should be able to return unprocessed entities', async () => { + const validUnprocessedEntities: string[] = [ + 'template:default/create-react-app-template', + 'template:default/docs-template', + ]; + + const unprocessedEntities = await store.getUnprocessedEntities(); + + expect(unprocessedEntities).toMatchObject(validUnprocessedEntities); + }); + + it('should be able to return processed entities', async () => { + const validProcessedEntities: ProcessedEntity[] = [ + { + entityRef: 'template:default/pull-request', + processedDate: new Date('2023-02-15 20:10:21.378Z'), + }, + { + entityRef: 'template:default/react-ssr-template', + processedDate: new Date('2023-02-15 20:10:21.388Z'), + }, + { + entityRef: 'template:default/springboot-template', + processedDate: new Date('2023-02-15 20:10:21.419Z'), + }, + ]; + + const processedEntities = await store.getProcessedEntities(); + + expect(processedEntities).toMatchObject(validProcessedEntities); + }); + + it('should insert new entities and ignore duplicates', async () => { + const before = testDbClient.count('entity_result'); + + await store.insertNewEntity('component:/default/new-entity-one'); + await store.insertNewEntity('component:/default/new-entity-two'); + await store.insertNewEntity('template:default/pull-request'); + + const after = testDbClient.count('entity_result'); + + expect(before).toEqual(after); + }); +}); diff --git a/plugins/linguist-backend/src/db/LinguistBackendDatabase.ts b/plugins/linguist-backend/src/db/LinguistBackendDatabase.ts index cf93374800..c045d0a4a9 100644 --- a/plugins/linguist-backend/src/db/LinguistBackendDatabase.ts +++ b/plugins/linguist-backend/src/db/LinguistBackendDatabase.ts @@ -26,8 +26,8 @@ import { export type RawDbEntityResultRow = { id: string; entity_ref: string; - languages: string; - processed_date: Date; + languages?: string; + processed_date?: Date; }; /** @public */ @@ -102,7 +102,7 @@ export class LinguistBackendDatabase implements LinguistBackendStore { } try { - return JSON.parse(entityResults.languages); + return JSON.parse(entityResults.languages as string); } catch (error) { throw new Error(`Failed to parse languages for '${entityRef}', ${error}`); } @@ -118,9 +118,20 @@ export class LinguistBackendDatabase implements LinguistBackendStore { } const processedEntities = rawEntities.map(rawEntity => { + // Note: processed_date should never be null, this is handled by the DB query above + let processedDate = new Date(); + if (rawEntity.processed_date) { + // SQLite will return a Timestamp whereas Postgres will return a proper Date + // This tests to see if we are getting a timestamp and convert if needed + processedDate = new Date(+rawEntity.processed_date.toString()); + if (isNaN(+rawEntity.processed_date.toString())) { + processedDate = rawEntity.processed_date; + } + } + const processEntity = { entityRef: rawEntity.entity_ref, - processedDate: rawEntity.processed_date, + processedDate: processedDate, }; return processEntity; @@ -131,6 +142,9 @@ export class LinguistBackendDatabase implements LinguistBackendStore { async getUnprocessedEntities(): Promise { const rawEntities = await this.db('entity_result') + // TODO(ahhhndre) processed_date should always be null as well but it had a default to the current date + // once the default has been removed and released, we can then come back an enable this check + // .whereNull('processed_date') .whereNull('languages') .orderBy('created_at', 'asc'); From 72b27b1bf6fb37023b86fe31815f4459660e9902 Mon Sep 17 00:00:00 2001 From: Andre Wanlin Date: Sat, 18 Mar 2023 17:09:04 -0500 Subject: [PATCH 021/213] Added backend-test-utils Signed-off-by: Andre Wanlin --- plugins/linguist-backend/package.json | 1 + yarn.lock | 1 + 2 files changed, 2 insertions(+) diff --git a/plugins/linguist-backend/package.json b/plugins/linguist-backend/package.json index f3feacb740..a559ec5222 100644 --- a/plugins/linguist-backend/package.json +++ b/plugins/linguist-backend/package.json @@ -44,6 +44,7 @@ "yn": "^4.0.0" }, "devDependencies": { + "@backstage/backend-test-utils": "workspace:^", "@backstage/cli": "workspace:^", "@types/supertest": "^2.0.8", "msw": "^1.0.0", diff --git a/yarn.lock b/yarn.lock index 977fcbf506..d12796c4e5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7573,6 +7573,7 @@ __metadata: dependencies: "@backstage/backend-common": "workspace:^" "@backstage/backend-tasks": "workspace:^" + "@backstage/backend-test-utils": "workspace:^" "@backstage/catalog-client": "workspace:^" "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" From 23fade04fd460d72470b3cc7f4482f8bf73dc198 Mon Sep 17 00:00:00 2001 From: Andre Wanlin Date: Sun, 26 Mar 2023 13:25:07 -0500 Subject: [PATCH 022/213] Completed tests Signed-off-by: Andre Wanlin --- plugins/linguist-backend/api-report.md | 3 +- .../src/api/LinguistBackendApi.test.ts | 117 +++++++++++++----- .../src/api/LinguistBackendApi.ts | 26 ++-- .../linguist-backend/src/service/router.ts | 5 +- 4 files changed, 106 insertions(+), 45 deletions(-) diff --git a/plugins/linguist-backend/api-report.md b/plugins/linguist-backend/api-report.md index ca36a1f816..907a48c50f 100644 --- a/plugins/linguist-backend/api-report.md +++ b/plugins/linguist-backend/api-report.md @@ -3,6 +3,7 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts +import { CatalogApi } from '@backstage/catalog-client'; import { EntitiesOverview } from '@backstage/plugin-linguist-common'; import { EntityResults } from '@backstage/plugin-linguist-common'; import express from 'express'; @@ -31,8 +32,8 @@ export class LinguistBackendApi { logger: Logger, store: LinguistBackendStore, urlReader: UrlReader, - discovery: PluginEndpointDiscovery, tokenManager: TokenManager, + catalogApi: CatalogApi, age?: HumanDuration, batchSize?: number, useSourceLocation?: boolean, diff --git a/plugins/linguist-backend/src/api/LinguistBackendApi.test.ts b/plugins/linguist-backend/src/api/LinguistBackendApi.test.ts index baf7d27ad7..b0f20f0207 100644 --- a/plugins/linguist-backend/src/api/LinguistBackendApi.test.ts +++ b/plugins/linguist-backend/src/api/LinguistBackendApi.test.ts @@ -13,19 +13,20 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import { getVoidLogger, - PluginEndpointDiscovery, ReadTreeResponse, ServerTokenManager, UrlReader, } from '@backstage/backend-common'; -import { GetEntitiesResponse } from '@backstage/catalog-client'; +import { CatalogApi, GetEntitiesResponse } from '@backstage/catalog-client'; import { Results } from 'linguist-js/dist/types'; import { DateTime } from 'luxon'; import { LinguistBackendStore } from '../db'; import { kindOrDefault, LinguistBackendApi } from './LinguistBackendApi'; import fs from 'fs-extra'; +import { LINGUIST_ANNOTATION } from '@backstage/plugin-linguist-common'; const linguistResultMock = Promise.resolve({ files: { @@ -70,15 +71,6 @@ describe('kindOrDefault', () => { }); describe('Linguist backend API', () => { - const getEntitiesMock = jest.fn(); - jest.mock('@backstage/catalog-client', () => { - return { - CatalogClient: jest - .fn() - .mockImplementation(() => ({ getEntities: getEntitiesMock })), - }; - }); - const logger = getVoidLogger(); const store: jest.Mocked = { @@ -95,10 +87,10 @@ describe('Linguist backend API', () => { readUrl: jest.fn(), }; - const discovery: jest.Mocked = { - getBaseUrl: jest.fn(), - getExternalBaseUrl: jest.fn(), - }; + const catalogApi: jest.Mocked = { + getEntities: jest.fn(), + getEntityByRef: jest.fn(), + } as any; const tokenManager = ServerTokenManager.noop(); @@ -106,8 +98,8 @@ describe('Linguist backend API', () => { logger, store, urlReader, - discovery, tokenManager, + catalogApi, ); beforeEach(() => { @@ -174,7 +166,7 @@ describe('Linguist backend API', () => { }, ], }; - getEntitiesMock.mockResolvedValue(testEntityListResponse); + catalogApi.getEntities.mockResolvedValue(testEntityListResponse); await api.addNewEntities(); expect(store.insertNewEntity).toHaveBeenCalledTimes(3); @@ -211,12 +203,12 @@ describe('Linguist backend API', () => { }); it('should get entity overview with stale items', async () => { - const staleApi = new LinguistBackendApi( + const apiWithAge = new LinguistBackendApi( logger, store, urlReader, - discovery, tokenManager, + catalogApi, { days: 5 }, ); store.getProcessedEntities.mockResolvedValue([ @@ -236,7 +228,7 @@ describe('Linguist backend API', () => { 'component:default/service-five', ]); - const overview = await staleApi.getEntitiesOverview(); + const overview = await apiWithAge.getEntitiesOverview(); expect(overview.entityCount).toEqual(5); expect(overview.processedCount).toEqual(2); expect(overview.staleCount).toEqual(1); @@ -277,7 +269,7 @@ describe('Linguist backend API', () => { fsSpy.mockClear(); }); - it('should generate languages for multiple entities using default', async () => { + it('should generate languages for entities using default', async () => { store.getProcessedEntities.mockResolvedValue([ { entityRef: 'component:default/service-one', @@ -294,21 +286,56 @@ describe('Linguist backend API', () => { 'component:default/service-four', 'component:default/service-five', ]); + + const entity = { + apiVersion: 'backstage.io/v1beta1', + metadata: { + name: 'service-one', + annotations: { + [LINGUIST_ANNOTATION]: 'https://some.fake/service/', + }, + }, + kind: 'Component', + }; + + catalogApi.getEntityByRef.mockResolvedValue(entity); + + const resultsSpy = jest + .spyOn(api, 'getLinguistResults') + .mockImplementation(() => linguistResultMock); + + urlReader.readTree.mockResolvedValue({ + files: async () => [ + { + content: async () => Buffer.from('-- XXX: code-data', 'utf8'), + path: 'my-file.js', + }, + ], + dir: async () => '/temp/my-code', + } as ReadTreeResponse); + + const fsSpy = jest.spyOn(fs, 'remove'); + const generateEntityLanguages = jest.spyOn(api, 'generateEntityLanguages'); await api.generateEntitiesLanguages(); expect(generateEntityLanguages).toHaveBeenCalledTimes(3); + + generateEntityLanguages.mockClear(); + resultsSpy.mockClear(); + fsSpy.mockClear(); }); - it('should generate languages for multiple entities using defined batch size', async () => { - const batchApi = new LinguistBackendApi( + it('should generate languages for entities using defined batch size', async () => { + const apiWithBatchSize = new LinguistBackendApi( logger, store, urlReader, - discovery, tokenManager, + catalogApi, undefined, - 1, + 2, ); + store.getProcessedEntities.mockResolvedValue([ { entityRef: 'component:default/service-one', @@ -325,11 +352,45 @@ describe('Linguist backend API', () => { 'component:default/service-four', 'component:default/service-five', ]); + + const entity = { + apiVersion: 'backstage.io/v1beta1', + metadata: { + name: 'service-one', + annotations: { + [LINGUIST_ANNOTATION]: 'https://some.fake/service/', + }, + }, + kind: 'Component', + }; + + catalogApi.getEntityByRef.mockResolvedValue(entity); + + const resultsSpy = jest + .spyOn(apiWithBatchSize, 'getLinguistResults') + .mockImplementation(() => linguistResultMock); + + urlReader.readTree.mockResolvedValue({ + files: async () => [ + { + content: async () => Buffer.from('-- XXX: code-data', 'utf8'), + path: 'my-file.js', + }, + ], + dir: async () => '/temp/my-code', + } as ReadTreeResponse); + + const fsSpy = jest.spyOn(fs, 'remove'); + const generateEntityLanguages = jest.spyOn( - batchApi, + apiWithBatchSize, 'generateEntityLanguages', ); - await batchApi.generateEntitiesLanguages(); - expect(generateEntityLanguages).toHaveBeenCalledTimes(1); + await apiWithBatchSize.generateEntitiesLanguages(); + expect(generateEntityLanguages).toHaveBeenCalledTimes(2); + + generateEntityLanguages.mockClear(); + resultsSpy.mockClear(); + fsSpy.mockClear(); }); }); diff --git a/plugins/linguist-backend/src/api/LinguistBackendApi.ts b/plugins/linguist-backend/src/api/LinguistBackendApi.ts index 766012018f..f00aebcee1 100644 --- a/plugins/linguist-backend/src/api/LinguistBackendApi.ts +++ b/plugins/linguist-backend/src/api/LinguistBackendApi.ts @@ -22,14 +22,10 @@ import { } from '@backstage/plugin-linguist-common'; import { CATALOG_FILTER_EXISTS, - CatalogClient, GetEntitiesRequest, + CatalogApi, } from '@backstage/catalog-client'; -import { - PluginEndpointDiscovery, - TokenManager, - UrlReader, -} from '@backstage/backend-common'; +import { TokenManager, UrlReader } from '@backstage/backend-common'; import { DateTime } from 'luxon'; import { LINGUIST_ANNOTATION } from '@backstage/plugin-linguist-common'; @@ -49,10 +45,9 @@ export class LinguistBackendApi { private readonly logger: Logger; private readonly store: LinguistBackendStore; private readonly urlReader: UrlReader; - private readonly discovery: PluginEndpointDiscovery; private readonly tokenManager: TokenManager; - private readonly catalogClient: CatalogClient; + private readonly catalogApi: CatalogApi; private readonly age?: HumanDuration; private readonly batchSize?: number; private readonly useSourceLocation?: boolean; @@ -62,8 +57,8 @@ export class LinguistBackendApi { logger: Logger, store: LinguistBackendStore, urlReader: UrlReader, - discovery: PluginEndpointDiscovery, tokenManager: TokenManager, + catalogApi: CatalogApi, age?: HumanDuration, batchSize?: number, useSourceLocation?: boolean, @@ -73,9 +68,8 @@ export class LinguistBackendApi { this.logger = logger; this.store = store; this.urlReader = urlReader; - this.discovery = discovery; this.tokenManager = tokenManager; - this.catalogClient = new CatalogClient({ discoveryApi: this.discovery }); + this.catalogApi = catalogApi; this.batchSize = batchSize; this.age = age; this.useSourceLocation = useSourceLocation; @@ -112,7 +106,7 @@ export class LinguistBackendApi { }; const { token } = await this.tokenManager.getToken(); - const response = await this.catalogClient.getEntities(request, { token }); + const response = await this.catalogApi.getEntities(request, { token }); const entities = response.items; entities.forEach(entity => { @@ -131,9 +125,10 @@ export class LinguistBackendApi { 0, this.batchSize ?? 20, ); - entities.forEach(async entityRef => { + + for (const entityRef of entities) { const { token } = await this.tokenManager.getToken(); - const entity = await this.catalogClient.getEntityByRef(entityRef, { + const entity = await this.catalogApi.getEntityByRef(entityRef, { token, }); const annotationKey = this.useSourceLocation @@ -148,12 +143,13 @@ export class LinguistBackendApi { try { await this.generateEntityLanguages(entityRef, url); } catch (error) { + console.log(error); assertError(error); this.logger.error( `Unable to process "${entityRef}" using "${url}", message: ${error.message}, stack: ${error.stack}`, ); } - }); + } } public async getEntitiesOverview(): Promise { diff --git a/plugins/linguist-backend/src/service/router.ts b/plugins/linguist-backend/src/service/router.ts index 8d52a2e01d..4c636aa854 100644 --- a/plugins/linguist-backend/src/service/router.ts +++ b/plugins/linguist-backend/src/service/router.ts @@ -31,6 +31,7 @@ import { TaskScheduleDefinition, } from '@backstage/backend-tasks'; import { HumanDuration } from '@backstage/types'; +import { CatalogClient } from '@backstage/catalog-client'; /** @public */ export interface PluginOptions { @@ -74,14 +75,16 @@ export async function createRouter( await database.getClient(), ); + const catalogClient = new CatalogClient({ discoveryApi: discovery }); + const linguistBackendApi = routerOptions.linguistBackendApi || new LinguistBackendApi( logger, linguistBackendStore, reader, - discovery, tokenManager, + catalogClient, age, batchSize, useSourceLocation, From 4e08dda90960a5618c1ef7965497694fe8a03391 Mon Sep 17 00:00:00 2001 From: Andre Wanlin Date: Fri, 7 Apr 2023 08:07:39 -0500 Subject: [PATCH 023/213] Implemented interface for API Signed-off-by: Andre Wanlin --- plugins/linguist-backend/api-report.md | 22 ++++++-------- ....test.ts => LinguistBackendClient.test.ts} | 8 ++--- ...BackendApi.ts => LinguistBackendClient.ts} | 30 +++++++++++++------ plugins/linguist-backend/src/api/index.ts | 3 +- plugins/linguist-backend/src/index.ts | 3 +- .../src/service/router.test.ts | 2 +- .../linguist-backend/src/service/router.ts | 10 +++---- 7 files changed, 44 insertions(+), 34 deletions(-) rename plugins/linguist-backend/src/api/{LinguistBackendApi.test.ts => LinguistBackendClient.test.ts} (97%) rename plugins/linguist-backend/src/api/{LinguistBackendApi.ts => LinguistBackendClient.ts} (90%) diff --git a/plugins/linguist-backend/api-report.md b/plugins/linguist-backend/api-report.md index 907a48c50f..795271f46c 100644 --- a/plugins/linguist-backend/api-report.md +++ b/plugins/linguist-backend/api-report.md @@ -4,7 +4,6 @@ ```ts import { CatalogApi } from '@backstage/catalog-client'; -import { EntitiesOverview } from '@backstage/plugin-linguist-common'; import { EntityResults } from '@backstage/plugin-linguist-common'; import express from 'express'; import { HumanDuration } from '@backstage/types'; @@ -15,7 +14,6 @@ import { PluginDatabaseManager } from '@backstage/backend-common'; import { PluginEndpointDiscovery } from '@backstage/backend-common'; import { PluginTaskScheduler } from '@backstage/backend-tasks'; import { ProcessedEntity } from '@backstage/plugin-linguist-common'; -import { Results } from 'linguist-js/dist/types'; import { TaskScheduleDefinition } from '@backstage/backend-tasks'; import { TokenManager } from '@backstage/backend-common'; import { UrlReader } from '@backstage/backend-common'; @@ -27,7 +25,15 @@ export function createRouter( ): Promise; // @public (undocumented) -export class LinguistBackendApi { +export interface LinguistBackendApi { + // (undocumented) + getEntityLanguages(entityRef: string): Promise; + // (undocumented) + processEntities(): Promise; +} + +// @public (undocumented) +export class LinguistBackendClient implements LinguistBackendApi { constructor( logger: Logger, store: LinguistBackendStore, @@ -41,18 +47,8 @@ export class LinguistBackendApi { linguistJsOptions?: Record, ); // (undocumented) - addNewEntities(): Promise; - // (undocumented) - generateEntitiesLanguages(): Promise; - // (undocumented) - generateEntityLanguages(entityRef: string, url: string): Promise; - // (undocumented) - getEntitiesOverview(): Promise; - // (undocumented) getEntityLanguages(entityRef: string): Promise; // (undocumented) - getLinguistResults(dir: string): Promise; - // (undocumented) processEntities(): Promise; } diff --git a/plugins/linguist-backend/src/api/LinguistBackendApi.test.ts b/plugins/linguist-backend/src/api/LinguistBackendClient.test.ts similarity index 97% rename from plugins/linguist-backend/src/api/LinguistBackendApi.test.ts rename to plugins/linguist-backend/src/api/LinguistBackendClient.test.ts index b0f20f0207..58aae70106 100644 --- a/plugins/linguist-backend/src/api/LinguistBackendApi.test.ts +++ b/plugins/linguist-backend/src/api/LinguistBackendClient.test.ts @@ -24,7 +24,7 @@ import { CatalogApi, GetEntitiesResponse } from '@backstage/catalog-client'; import { Results } from 'linguist-js/dist/types'; import { DateTime } from 'luxon'; import { LinguistBackendStore } from '../db'; -import { kindOrDefault, LinguistBackendApi } from './LinguistBackendApi'; +import { kindOrDefault, LinguistBackendClient } from './LinguistBackendClient'; import fs from 'fs-extra'; import { LINGUIST_ANNOTATION } from '@backstage/plugin-linguist-common'; @@ -94,7 +94,7 @@ describe('Linguist backend API', () => { const tokenManager = ServerTokenManager.noop(); - const api = new LinguistBackendApi( + const api = new LinguistBackendClient( logger, store, urlReader, @@ -203,7 +203,7 @@ describe('Linguist backend API', () => { }); it('should get entity overview with stale items', async () => { - const apiWithAge = new LinguistBackendApi( + const apiWithAge = new LinguistBackendClient( logger, store, urlReader, @@ -326,7 +326,7 @@ describe('Linguist backend API', () => { }); it('should generate languages for entities using defined batch size', async () => { - const apiWithBatchSize = new LinguistBackendApi( + const apiWithBatchSize = new LinguistBackendClient( logger, store, urlReader, diff --git a/plugins/linguist-backend/src/api/LinguistBackendApi.ts b/plugins/linguist-backend/src/api/LinguistBackendClient.ts similarity index 90% rename from plugins/linguist-backend/src/api/LinguistBackendApi.ts rename to plugins/linguist-backend/src/api/LinguistBackendClient.ts index f00aebcee1..890e6438b2 100644 --- a/plugins/linguist-backend/src/api/LinguistBackendApi.ts +++ b/plugins/linguist-backend/src/api/LinguistBackendClient.ts @@ -39,9 +39,16 @@ import { } from '@backstage/catalog-model'; import { assertError } from '@backstage/errors'; import { HumanDuration } from '@backstage/types'; +import { Results } from 'linguist-js/dist/types'; /** @public */ -export class LinguistBackendApi { +export interface LinguistBackendApi { + getEntityLanguages(entityRef: string): Promise; + processEntities(): Promise; +} + +/** @public */ +export class LinguistBackendClient implements LinguistBackendApi { private readonly logger: Logger; private readonly store: LinguistBackendStore; private readonly urlReader: UrlReader; @@ -77,13 +84,13 @@ export class LinguistBackendApi { this.linguistJsOptions = linguistJsOptions; } - public async getEntityLanguages(entityRef: string): Promise { + async getEntityLanguages(entityRef: string): Promise { this.logger?.debug(`Getting languages for entity "${entityRef}"`); return this.store.getEntityResults(entityRef); } - public async processEntities() { + async processEntities(): Promise { this.logger?.info('Updating list of entities'); await this.addNewEntities(); @@ -93,7 +100,8 @@ export class LinguistBackendApi { await this.generateEntitiesLanguages(); } - public async addNewEntities() { + /** @internal */ + async addNewEntities(): Promise { const annotationKey = this.useSourceLocation ? ANNOTATION_SOURCE_LOCATION : LINGUIST_ANNOTATION; @@ -115,7 +123,8 @@ export class LinguistBackendApi { }); } - public async generateEntitiesLanguages() { + /** @internal */ + async generateEntitiesLanguages(): Promise { const entitiesOverview = await this.getEntitiesOverview(); this.logger?.info( `Entities overview: Entity: ${entitiesOverview.entityCount}, Processed: ${entitiesOverview.processedCount}, Pending: ${entitiesOverview.pendingCount}, Stale ${entitiesOverview.staleCount}`, @@ -152,7 +161,8 @@ export class LinguistBackendApi { } } - public async getEntitiesOverview(): Promise { + /** @internal */ + async getEntitiesOverview(): Promise { this.logger?.debug('Getting pending entities'); const processedEntities = await this.store.getProcessedEntities(); @@ -178,7 +188,8 @@ export class LinguistBackendApi { return entitiesOverview; } - public async generateEntityLanguages( + /** @internal */ + async generateEntityLanguages( entityRef: string, url: string, ): Promise { @@ -230,13 +241,14 @@ export class LinguistBackendApi { } } - public async getLinguistResults(dir: string) { + /** @internal */ + async getLinguistResults(dir: string): Promise { const results = await linguist(dir, this.linguistJsOptions); return results; } } -export function kindOrDefault(kind?: string[]) { +export function kindOrDefault(kind?: string[]): string[] { if (!kind || kind.length === 0) { return ['API', 'Component', 'Template']; } diff --git a/plugins/linguist-backend/src/api/index.ts b/plugins/linguist-backend/src/api/index.ts index a88fa051d4..53b427b3a7 100644 --- a/plugins/linguist-backend/src/api/index.ts +++ b/plugins/linguist-backend/src/api/index.ts @@ -14,4 +14,5 @@ * limitations under the License. */ -export { LinguistBackendApi } from './LinguistBackendApi'; +export { LinguistBackendClient } from './LinguistBackendClient'; +export type { LinguistBackendApi } from './LinguistBackendClient'; diff --git a/plugins/linguist-backend/src/index.ts b/plugins/linguist-backend/src/index.ts index da1e0ffb00..8969880618 100644 --- a/plugins/linguist-backend/src/index.ts +++ b/plugins/linguist-backend/src/index.ts @@ -15,6 +15,7 @@ */ export * from './service/router'; -export { LinguistBackendApi } from './api'; +export { LinguistBackendClient } from './api'; +export type { LinguistBackendApi } from './api'; export { LinguistBackendDatabase } from './db'; export type { LinguistBackendStore } from './db'; diff --git a/plugins/linguist-backend/src/service/router.test.ts b/plugins/linguist-backend/src/service/router.test.ts index b8bde9d35d..7ab8f1c238 100644 --- a/plugins/linguist-backend/src/service/router.test.ts +++ b/plugins/linguist-backend/src/service/router.test.ts @@ -73,7 +73,7 @@ describe('createRouter', () => { const router = await createRouter( { schedule: schedule, age: { days: 30 }, useSourceLocation: false }, { - linguistBackendApi, + linguistBackendApi: linguistBackendApi, discovery: testDiscovery, database: createDatabase(), reader: mockUrlReader, diff --git a/plugins/linguist-backend/src/service/router.ts b/plugins/linguist-backend/src/service/router.ts index 4c636aa854..21f03e08a3 100644 --- a/plugins/linguist-backend/src/service/router.ts +++ b/plugins/linguist-backend/src/service/router.ts @@ -24,7 +24,7 @@ import { import express from 'express'; import Router from 'express-promise-router'; import { Logger } from 'winston'; -import { LinguistBackendApi } from '../api'; +import { LinguistBackendApi, LinguistBackendClient } from '../api'; import { LinguistBackendDatabase } from '../db'; import { PluginTaskScheduler, @@ -77,9 +77,9 @@ export async function createRouter( const catalogClient = new CatalogClient({ discoveryApi: discovery }); - const linguistBackendApi = + const linguistBackendClient = routerOptions.linguistBackendApi || - new LinguistBackendApi( + new LinguistBackendClient( logger, linguistBackendStore, reader, @@ -103,7 +103,7 @@ export async function createRouter( initialDelay: schedule.initialDelay, scope: schedule.scope, fn: async () => { - await linguistBackendApi.processEntities(); + await linguistBackendClient.processEntities(); }, }); } @@ -125,7 +125,7 @@ export async function createRouter( throw new Error('No entityRef was provided'); } - const entityLanguages = await linguistBackendApi.getEntityLanguages( + const entityLanguages = await linguistBackendClient.getEntityLanguages( entityRef as string, ); res.status(200).json(entityLanguages); From 763bf4c8f29de23d9ccef692981f7ec1ffb60d3e Mon Sep 17 00:00:00 2001 From: Andre Wanlin Date: Fri, 7 Apr 2023 08:07:51 -0500 Subject: [PATCH 024/213] Refactored README Signed-off-by: Andre Wanlin --- plugins/linguist-backend/README.md | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/plugins/linguist-backend/README.md b/plugins/linguist-backend/README.md index 46c067fb5a..c1201fc70a 100644 --- a/plugins/linguist-backend/README.md +++ b/plugins/linguist-backend/README.md @@ -57,7 +57,11 @@ Here's how to get the backend up and running: 4. Now run `yarn start-backend` from the repo root 5. Finally open `http://localhost:7007/api/linguist/health` in a browser and it should return `{"status":"ok"}` -## Batch Size +## Plugin Option + +The Linguist backend has various plugin options that you can provide to the `createRouter` function in your `packages/backend/src/plugins/linguist.ts` file that will allow you to configure various aspects of how it works. The following sections go into the details of these options + +### Batch Size The Linguist backend is setup to process entities by acting as a queue where it will pull down all the applicable entities from the Catalog and add them to it's database (saving just the `entityRef`). Then it will grab the `n` oldest entities that have not been processed to determine their languages and process them. To control the batch size simply provide that to the `createRouter` function in your `packages/backend/src/plugins/linguist.ts` like this: @@ -67,7 +71,7 @@ return createRouter({ schedule: schedule, batchSize: 40 }, { ...env }); **Note:** The default batch size is 20 -## Kind +### Kind The default setup only processes entities of kind `['API', 'Component', 'Template']`. To control the `kind` that are processed provide that to the `createRouter` function in your `packages/backend/src/plugins/linguist.ts` like this: @@ -75,7 +79,7 @@ The default setup only processes entities of kind `['API', 'Component', 'Templat return createRouter({ schedule: schedule, kind: ['Component'] }, { ...env }); ``` -## Refresh +### Refresh The default setup will only generate the language breakdown for entities with the linguist annotation that have not been generated yet. If you want this process to also refresh the data you can do so by adding the `age` (as a `HumanDuration`) in your `packages/backend/src/plugins/linguist.ts` when you call `createRouter`: @@ -85,7 +89,7 @@ return createRouter({ schedule: schedule, age: { days: 30 } }, { ...env }); With the `age` setup like this if the language breakdown is older than 15 days it will get regenerated. It's recommended that if you choose to use this configuration to set it to a large value - 30, 90, or 180 - as this data generally does not change drastically. -## Linguist JS options +### Linguist JS options The default setup will use the default [linguist-js](https://www.npmjs.com/package/linguist-js) options, a full list of the available options can be found [here](https://www.npmjs.com/package/linguist-js#API). @@ -96,7 +100,7 @@ return createRouter( ); ``` -## Use Source Location +### Use Source Location You may wish to use the `backstage.io/source-location` annotation over using the `backstage.io/linguist` as you may not be able to quickly add that annotation to your Entities. To do this you'll just need to set the `useSourceLocation` boolean to `true` in your `packages/backend/src/plugins/linguist.ts` when you call `createRouter`: From 9febc291d62339a5e61827f5a2a591f1baa4a175 Mon Sep 17 00:00:00 2001 From: Andre Wanlin Date: Fri, 7 Apr 2023 11:14:04 -0500 Subject: [PATCH 025/213] Unprocessed should be processed before stale Signed-off-by: Andre Wanlin --- plugins/linguist-backend/api-report.md | 8 ++++---- .../src/api/LinguistBackendClient.test.ts | 2 +- .../src/api/LinguistBackendClient.ts | 2 +- .../src/db/LinguistBackendDatabase.test.ts | 14 ++++++++++++++ .../src/db/LinguistBackendDatabase.ts | 8 ++++---- 5 files changed, 24 insertions(+), 10 deletions(-) diff --git a/plugins/linguist-backend/api-report.md b/plugins/linguist-backend/api-report.md index 795271f46c..8b17b997dd 100644 --- a/plugins/linguist-backend/api-report.md +++ b/plugins/linguist-backend/api-report.md @@ -60,9 +60,9 @@ export class LinguistBackendDatabase implements LinguistBackendStore { // (undocumented) getEntityResults(entityRef: string): Promise; // (undocumented) - getProcessedEntities(): Promise; + getProcessedEntities(): Promise; // (undocumented) - getUnprocessedEntities(): Promise; + getUnprocessedEntities(): Promise; // (undocumented) insertEntityResults(entityLanguages: EntityResults): Promise; // (undocumented) @@ -74,9 +74,9 @@ export interface LinguistBackendStore { // (undocumented) getEntityResults(entityRef: string): Promise; // (undocumented) - getProcessedEntities(): Promise; + getProcessedEntities(): Promise; // (undocumented) - getUnprocessedEntities(): Promise; + getUnprocessedEntities(): Promise; // (undocumented) insertEntityResults(entityLanguages: EntityResults): Promise; // (undocumented) diff --git a/plugins/linguist-backend/src/api/LinguistBackendClient.test.ts b/plugins/linguist-backend/src/api/LinguistBackendClient.test.ts index 58aae70106..35336bb5e9 100644 --- a/plugins/linguist-backend/src/api/LinguistBackendClient.test.ts +++ b/plugins/linguist-backend/src/api/LinguistBackendClient.test.ts @@ -234,10 +234,10 @@ describe('Linguist backend API', () => { expect(overview.staleCount).toEqual(1); expect(overview.pendingCount).toEqual(4); expect(overview.filteredEntities).toEqual([ - 'component:default/stale-service-two', 'component:default/service-three', 'component:default/service-four', 'component:default/service-five', + 'component:default/stale-service-two', ]); }); diff --git a/plugins/linguist-backend/src/api/LinguistBackendClient.ts b/plugins/linguist-backend/src/api/LinguistBackendClient.ts index 890e6438b2..a2f6e1ef67 100644 --- a/plugins/linguist-backend/src/api/LinguistBackendClient.ts +++ b/plugins/linguist-backend/src/api/LinguistBackendClient.ts @@ -175,7 +175,7 @@ export class LinguistBackendClient implements LinguistBackendApi { .map(pe => pe.entityRef); const unprocessedEntities = await this.store.getUnprocessedEntities(); - const filteredEntities = staleEntities.concat(unprocessedEntities); + const filteredEntities = unprocessedEntities.concat(staleEntities); const entitiesOverview: EntitiesOverview = { entityCount: unprocessedEntities.length + processedEntities.length, diff --git a/plugins/linguist-backend/src/db/LinguistBackendDatabase.test.ts b/plugins/linguist-backend/src/db/LinguistBackendDatabase.test.ts index f4e0bba627..1ab092b953 100644 --- a/plugins/linguist-backend/src/db/LinguistBackendDatabase.test.ts +++ b/plugins/linguist-backend/src/db/LinguistBackendDatabase.test.ts @@ -134,6 +134,13 @@ describe('Linguist database', () => { expect(unprocessedEntities).toMatchObject(validUnprocessedEntities); }); + it('should return string[] when there is no unprocessed entities', async () => { + await testDbClient('entity_result').delete(); + const unprocessedEntities = await store.getUnprocessedEntities(); + + expect(unprocessedEntities).toMatchObject([]); + }); + it('should be able to return processed entities', async () => { const validProcessedEntities: ProcessedEntity[] = [ { @@ -155,6 +162,13 @@ describe('Linguist database', () => { expect(processedEntities).toMatchObject(validProcessedEntities); }); + it('should return string[] when there is no processed entities', async () => { + await testDbClient('entity_result').delete(); + const unprocessedEntities = await store.getProcessedEntities(); + + expect(unprocessedEntities).toMatchObject([]); + }); + it('should insert new entities and ignore duplicates', async () => { const before = testDbClient.count('entity_result'); diff --git a/plugins/linguist-backend/src/db/LinguistBackendDatabase.ts b/plugins/linguist-backend/src/db/LinguistBackendDatabase.ts index c045d0a4a9..5a165695da 100644 --- a/plugins/linguist-backend/src/db/LinguistBackendDatabase.ts +++ b/plugins/linguist-backend/src/db/LinguistBackendDatabase.ts @@ -35,8 +35,8 @@ export interface LinguistBackendStore { insertEntityResults(entityLanguages: EntityResults): Promise; insertNewEntity(entityRef: string): Promise; getEntityResults(entityRef: string): Promise; - getProcessedEntities(): Promise; - getUnprocessedEntities(): Promise; + getProcessedEntities(): Promise; + getUnprocessedEntities(): Promise; } const migrationsDir = resolvePackagePath( @@ -108,7 +108,7 @@ export class LinguistBackendDatabase implements LinguistBackendStore { } } - async getProcessedEntities(): Promise { + async getProcessedEntities(): Promise { const rawEntities = await this.db('entity_result') .whereNotNull('processed_date') .whereNotNull('languages'); @@ -140,7 +140,7 @@ export class LinguistBackendDatabase implements LinguistBackendStore { return processedEntities; } - async getUnprocessedEntities(): Promise { + async getUnprocessedEntities(): Promise { const rawEntities = await this.db('entity_result') // TODO(ahhhndre) processed_date should always be null as well but it had a default to the current date // once the default has been removed and released, we can then come back an enable this check From 25659d38d6486019a167eb4c57f454c03d711e3d Mon Sep 17 00:00:00 2001 From: Andre Wanlin Date: Fri, 7 Apr 2023 11:27:20 -0500 Subject: [PATCH 026/213] Clean up orphan entities Signed-off-by: Andre Wanlin --- plugins/linguist-backend/api-report.md | 8 +++++++ .../src/api/LinguistBackendClient.test.ts | 22 ++++++++++++++++++- .../src/api/LinguistBackendClient.ts | 22 +++++++++++++++++-- .../src/db/LinguistBackendDatabase.test.ts | 21 ++++++++++++++++-- .../src/db/LinguistBackendDatabase.ts | 22 +++++++++++++++++++ 5 files changed, 90 insertions(+), 5 deletions(-) diff --git a/plugins/linguist-backend/api-report.md b/plugins/linguist-backend/api-report.md index 8b17b997dd..1b2c4af832 100644 --- a/plugins/linguist-backend/api-report.md +++ b/plugins/linguist-backend/api-report.md @@ -58,6 +58,10 @@ export class LinguistBackendDatabase implements LinguistBackendStore { // (undocumented) static create(knex: Knex): Promise; // (undocumented) + deleteEntity(entityRef: string): Promise; + // (undocumented) + getAllEntities(): Promise; + // (undocumented) getEntityResults(entityRef: string): Promise; // (undocumented) getProcessedEntities(): Promise; @@ -71,6 +75,10 @@ export class LinguistBackendDatabase implements LinguistBackendStore { // @public (undocumented) export interface LinguistBackendStore { + // (undocumented) + deleteEntity(entityRef: string): Promise; + // (undocumented) + getAllEntities(): Promise; // (undocumented) getEntityResults(entityRef: string): Promise; // (undocumented) diff --git a/plugins/linguist-backend/src/api/LinguistBackendClient.test.ts b/plugins/linguist-backend/src/api/LinguistBackendClient.test.ts index 35336bb5e9..1b0a4f4673 100644 --- a/plugins/linguist-backend/src/api/LinguistBackendClient.test.ts +++ b/plugins/linguist-backend/src/api/LinguistBackendClient.test.ts @@ -79,6 +79,8 @@ describe('Linguist backend API', () => { getEntityResults: jest.fn(), getProcessedEntities: jest.fn(), getUnprocessedEntities: jest.fn(), + getAllEntities: jest.fn(), + deleteEntity: jest.fn(), }; const urlReader: jest.Mocked = { @@ -140,7 +142,7 @@ describe('Linguist backend API', () => { }); }); - it('should add new entities', async () => { + it('should insert new entities', async () => { const testEntityListResponse: GetEntitiesResponse = { items: [ { @@ -172,6 +174,24 @@ describe('Linguist backend API', () => { expect(store.insertNewEntity).toHaveBeenCalledTimes(3); }); + it('should delete entities not in Catalog', async () => { + store.getAllEntities.mockResolvedValue([ + 'component:default/service-one', + 'component:default/stale-service-two', + ]); + + catalogApi.getEntityByRef.mockResolvedValueOnce({ + apiVersion: 'backstage.io/v1beta1', + metadata: { + name: 'service-one', + }, + kind: 'Component', + }); + + await api.cleanEntities(); + expect(store.deleteEntity).toHaveBeenCalledTimes(1); + }); + it('should get default entity overview', async () => { store.getProcessedEntities.mockResolvedValue([ { diff --git a/plugins/linguist-backend/src/api/LinguistBackendClient.ts b/plugins/linguist-backend/src/api/LinguistBackendClient.ts index a2f6e1ef67..0bd6370ac3 100644 --- a/plugins/linguist-backend/src/api/LinguistBackendClient.ts +++ b/plugins/linguist-backend/src/api/LinguistBackendClient.ts @@ -92,11 +92,12 @@ export class LinguistBackendClient implements LinguistBackendApi { async processEntities(): Promise { this.logger?.info('Updating list of entities'); - await this.addNewEntities(); - this.logger?.info('Processing applicable entities through Linguist'); + this.logger?.info('Cleaning list of entities'); + await this.cleanEntities(); + this.logger?.info('Processing applicable entities through Linguist'); await this.generateEntitiesLanguages(); } @@ -123,6 +124,23 @@ export class LinguistBackendClient implements LinguistBackendApi { }); } + /** @internal */ + async cleanEntities(): Promise { + this.logger?.info('Cleaning entities in Linguist queue'); + const allEntities = await this.store.getAllEntities(); + + for (const entityRef of allEntities) { + const result = await this.catalogApi.getEntityByRef(entityRef); + + if (!result) { + this.logger?.info( + `Entity ${entityRef} was not found in the Catalog, it will be deleted`, + ); + await this.store.deleteEntity(entityRef); + } + } + } + /** @internal */ async generateEntitiesLanguages(): Promise { const entitiesOverview = await this.getEntitiesOverview(); diff --git a/plugins/linguist-backend/src/db/LinguistBackendDatabase.test.ts b/plugins/linguist-backend/src/db/LinguistBackendDatabase.test.ts index 1ab092b953..5998ddfc1e 100644 --- a/plugins/linguist-backend/src/db/LinguistBackendDatabase.test.ts +++ b/plugins/linguist-backend/src/db/LinguistBackendDatabase.test.ts @@ -170,14 +170,31 @@ describe('Linguist database', () => { }); it('should insert new entities and ignore duplicates', async () => { - const before = testDbClient.count('entity_result'); + const before = testDbClient.from('entity_result').count(); await store.insertNewEntity('component:/default/new-entity-one'); await store.insertNewEntity('component:/default/new-entity-two'); await store.insertNewEntity('template:default/pull-request'); - const after = testDbClient.count('entity_result'); + const after = testDbClient.from('entity_result').count(); expect(before).toEqual(after); }); + + it('should get all entities', async () => { + const allEntities = await store.getAllEntities(); + + expect(allEntities.length).toEqual(5); + }); + + it('should delete entity by its entityRef', async () => { + const before = await testDbClient.from('entity_result').count(); + + await store.deleteEntity('template:default/create-react-app-template'); + + const after = await testDbClient.from('entity_result').count(); + + expect(before).toEqual([{ 'count(*)': 5 }]); + expect(after).toEqual([{ 'count(*)': 4 }]); + }); }); diff --git a/plugins/linguist-backend/src/db/LinguistBackendDatabase.ts b/plugins/linguist-backend/src/db/LinguistBackendDatabase.ts index 5a165695da..2a15b2d823 100644 --- a/plugins/linguist-backend/src/db/LinguistBackendDatabase.ts +++ b/plugins/linguist-backend/src/db/LinguistBackendDatabase.ts @@ -37,6 +37,8 @@ export interface LinguistBackendStore { getEntityResults(entityRef: string): Promise; getProcessedEntities(): Promise; getUnprocessedEntities(): Promise; + getAllEntities(): Promise; + deleteEntity(entityRef: string): Promise; } const migrationsDir = resolvePackagePath( @@ -158,4 +160,24 @@ export class LinguistBackendDatabase implements LinguistBackendStore { return unprocessedEntities; } + + async getAllEntities(): Promise { + const rawEntities = await this.db('entity_result'); + + if (!rawEntities) { + return []; + } + + const allEntities = rawEntities.map(rawEntity => { + return rawEntity.entity_ref; + }); + + return allEntities; + } + + async deleteEntity(entityRef: string): Promise { + await this.db('entity_result') + .where('entity_ref', entityRef) + .delete(); + } } From 75fe31e5a4f3e05130e7c14f72640d1ac4467bb1 Mon Sep 17 00:00:00 2001 From: Andre Wanlin Date: Fri, 7 Apr 2023 11:38:52 -0500 Subject: [PATCH 027/213] Updated changeset to match changes Signed-off-by: Andre Wanlin --- .changeset/shaggy-gorillas-occur.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/.changeset/shaggy-gorillas-occur.md b/.changeset/shaggy-gorillas-occur.md index c122032e7f..94b0f6c21d 100644 --- a/.changeset/shaggy-gorillas-occur.md +++ b/.changeset/shaggy-gorillas-occur.md @@ -2,4 +2,13 @@ '@backstage/plugin-linguist-backend': patch --- -Added tests for the `LinguistBackendDatabase` and `LinguistBackendApi` which included refactoring to better support using SQLite and removed the default from the `processes_date` column +Several improvements to the Linguist backend have been made: + +- Added tests for the `LinguistBackendDatabase` and `LinguistBackendApi` +- Added support for using SQLite as a database, helpful for local development +- Removed the default from the `processes_date` column +- Converted the `LinguistBackendApi` into an Interface +- Added the `LinguistBackendClient` which implements the `LinguistBackendApi` Interface +- Unprocessed entities will get processed before stale entities +- Entities in the Linguist database but not in the Catalog anymore will be deleted +- Improved the README's headings From 62631dbbd7182b72e8bffae2b0fcd142bf4b9188 Mon Sep 17 00:00:00 2001 From: Andre Wanlin Date: Fri, 14 Apr 2023 20:14:52 -0500 Subject: [PATCH 028/213] Removed export Signed-off-by: Andre Wanlin --- plugins/linguist-backend/api-report.md | 21 ------------------- plugins/linguist-backend/src/api/index.ts | 1 - plugins/linguist-backend/src/index.ts | 1 - .../linguist-backend/src/service/router.ts | 3 ++- 4 files changed, 2 insertions(+), 24 deletions(-) diff --git a/plugins/linguist-backend/api-report.md b/plugins/linguist-backend/api-report.md index 1b2c4af832..0c70f936c6 100644 --- a/plugins/linguist-backend/api-report.md +++ b/plugins/linguist-backend/api-report.md @@ -3,7 +3,6 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts -import { CatalogApi } from '@backstage/catalog-client'; import { EntityResults } from '@backstage/plugin-linguist-common'; import express from 'express'; import { HumanDuration } from '@backstage/types'; @@ -32,26 +31,6 @@ export interface LinguistBackendApi { processEntities(): Promise; } -// @public (undocumented) -export class LinguistBackendClient implements LinguistBackendApi { - constructor( - logger: Logger, - store: LinguistBackendStore, - urlReader: UrlReader, - tokenManager: TokenManager, - catalogApi: CatalogApi, - age?: HumanDuration, - batchSize?: number, - useSourceLocation?: boolean, - kind?: string[], - linguistJsOptions?: Record, - ); - // (undocumented) - getEntityLanguages(entityRef: string): Promise; - // (undocumented) - processEntities(): Promise; -} - // @public (undocumented) export class LinguistBackendDatabase implements LinguistBackendStore { constructor(db: Knex); diff --git a/plugins/linguist-backend/src/api/index.ts b/plugins/linguist-backend/src/api/index.ts index 53b427b3a7..b3f73587e7 100644 --- a/plugins/linguist-backend/src/api/index.ts +++ b/plugins/linguist-backend/src/api/index.ts @@ -14,5 +14,4 @@ * limitations under the License. */ -export { LinguistBackendClient } from './LinguistBackendClient'; export type { LinguistBackendApi } from './LinguistBackendClient'; diff --git a/plugins/linguist-backend/src/index.ts b/plugins/linguist-backend/src/index.ts index 8969880618..6d3c86a8f2 100644 --- a/plugins/linguist-backend/src/index.ts +++ b/plugins/linguist-backend/src/index.ts @@ -15,7 +15,6 @@ */ export * from './service/router'; -export { LinguistBackendClient } from './api'; export type { LinguistBackendApi } from './api'; export { LinguistBackendDatabase } from './db'; export type { LinguistBackendStore } from './db'; diff --git a/plugins/linguist-backend/src/service/router.ts b/plugins/linguist-backend/src/service/router.ts index 21f03e08a3..9e45438ec8 100644 --- a/plugins/linguist-backend/src/service/router.ts +++ b/plugins/linguist-backend/src/service/router.ts @@ -24,7 +24,7 @@ import { import express from 'express'; import Router from 'express-promise-router'; import { Logger } from 'winston'; -import { LinguistBackendApi, LinguistBackendClient } from '../api'; +import { LinguistBackendApi } from '../api'; import { LinguistBackendDatabase } from '../db'; import { PluginTaskScheduler, @@ -32,6 +32,7 @@ import { } from '@backstage/backend-tasks'; import { HumanDuration } from '@backstage/types'; import { CatalogClient } from '@backstage/catalog-client'; +import { LinguistBackendClient } from '../api/LinguistBackendClient'; /** @public */ export interface PluginOptions { From 0f439d6508789da9d5e301d46f62d240e9f10d41 Mon Sep 17 00:00:00 2001 From: Andre Wanlin Date: Sat, 22 Apr 2023 10:12:28 -0500 Subject: [PATCH 029/213] Removed database export Signed-off-by: Andre Wanlin --- plugins/linguist-backend/api-report.md | 42 -------------------------- plugins/linguist-backend/src/index.ts | 2 -- 2 files changed, 44 deletions(-) diff --git a/plugins/linguist-backend/api-report.md b/plugins/linguist-backend/api-report.md index 0c70f936c6..294d569ff7 100644 --- a/plugins/linguist-backend/api-report.md +++ b/plugins/linguist-backend/api-report.md @@ -3,16 +3,13 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts -import { EntityResults } from '@backstage/plugin-linguist-common'; import express from 'express'; import { HumanDuration } from '@backstage/types'; -import { Knex } from 'knex'; import { Languages } from '@backstage/plugin-linguist-common'; import { Logger } from 'winston'; import { PluginDatabaseManager } from '@backstage/backend-common'; import { PluginEndpointDiscovery } from '@backstage/backend-common'; import { PluginTaskScheduler } from '@backstage/backend-tasks'; -import { ProcessedEntity } from '@backstage/plugin-linguist-common'; import { TaskScheduleDefinition } from '@backstage/backend-tasks'; import { TokenManager } from '@backstage/backend-common'; import { UrlReader } from '@backstage/backend-common'; @@ -31,45 +28,6 @@ export interface LinguistBackendApi { processEntities(): Promise; } -// @public (undocumented) -export class LinguistBackendDatabase implements LinguistBackendStore { - constructor(db: Knex); - // (undocumented) - static create(knex: Knex): Promise; - // (undocumented) - deleteEntity(entityRef: string): Promise; - // (undocumented) - getAllEntities(): Promise; - // (undocumented) - getEntityResults(entityRef: string): Promise; - // (undocumented) - getProcessedEntities(): Promise; - // (undocumented) - getUnprocessedEntities(): Promise; - // (undocumented) - insertEntityResults(entityLanguages: EntityResults): Promise; - // (undocumented) - insertNewEntity(entityRef: string): Promise; -} - -// @public (undocumented) -export interface LinguistBackendStore { - // (undocumented) - deleteEntity(entityRef: string): Promise; - // (undocumented) - getAllEntities(): Promise; - // (undocumented) - getEntityResults(entityRef: string): Promise; - // (undocumented) - getProcessedEntities(): Promise; - // (undocumented) - getUnprocessedEntities(): Promise; - // (undocumented) - insertEntityResults(entityLanguages: EntityResults): Promise; - // (undocumented) - insertNewEntity(entityRef: string): Promise; -} - // @public (undocumented) export interface PluginOptions { // (undocumented) diff --git a/plugins/linguist-backend/src/index.ts b/plugins/linguist-backend/src/index.ts index 6d3c86a8f2..37ecf2d47f 100644 --- a/plugins/linguist-backend/src/index.ts +++ b/plugins/linguist-backend/src/index.ts @@ -16,5 +16,3 @@ export * from './service/router'; export type { LinguistBackendApi } from './api'; -export { LinguistBackendDatabase } from './db'; -export type { LinguistBackendStore } from './db'; From b66092c1349c386b8efc8546e6faed8aa29b7e0d Mon Sep 17 00:00:00 2001 From: Andre Wanlin Date: Tue, 2 May 2023 15:35:25 -0500 Subject: [PATCH 030/213] Latest changes based on feedback Signed-off-by: Andre Wanlin --- .changeset/shaggy-gorillas-occur.md | 2 ++ plugins/linguist-backend/src/api/LinguistBackendClient.ts | 1 - plugins/linguist-backend/src/db/LinguistBackendDatabase.ts | 4 ++-- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.changeset/shaggy-gorillas-occur.md b/.changeset/shaggy-gorillas-occur.md index 94b0f6c21d..149ff6f424 100644 --- a/.changeset/shaggy-gorillas-occur.md +++ b/.changeset/shaggy-gorillas-occur.md @@ -2,6 +2,8 @@ '@backstage/plugin-linguist-backend': patch --- +**BREAKING**: Removed public constructor from `LinguistBackendApi`. Removed export of `LinguistBackendDatabase` and `LinguistBackendDatabase` + Several improvements to the Linguist backend have been made: - Added tests for the `LinguistBackendDatabase` and `LinguistBackendApi` diff --git a/plugins/linguist-backend/src/api/LinguistBackendClient.ts b/plugins/linguist-backend/src/api/LinguistBackendClient.ts index 0bd6370ac3..5a84201bcb 100644 --- a/plugins/linguist-backend/src/api/LinguistBackendClient.ts +++ b/plugins/linguist-backend/src/api/LinguistBackendClient.ts @@ -170,7 +170,6 @@ export class LinguistBackendClient implements LinguistBackendApi { try { await this.generateEntityLanguages(entityRef, url); } catch (error) { - console.log(error); assertError(error); this.logger.error( `Unable to process "${entityRef}" using "${url}", message: ${error.message}, stack: ${error.stack}`, diff --git a/plugins/linguist-backend/src/db/LinguistBackendDatabase.ts b/plugins/linguist-backend/src/db/LinguistBackendDatabase.ts index 2a15b2d823..12f44a5dca 100644 --- a/plugins/linguist-backend/src/db/LinguistBackendDatabase.ts +++ b/plugins/linguist-backend/src/db/LinguistBackendDatabase.ts @@ -93,7 +93,7 @@ export class LinguistBackendDatabase implements LinguistBackendStore { .where({ entity_ref: entityRef }) .first(); - if (!entityResults) { + if (!entityResults || !entityResults.languages) { const emptyResults: Languages = { languageCount: 0, totalBytes: 0, @@ -104,7 +104,7 @@ export class LinguistBackendDatabase implements LinguistBackendStore { } try { - return JSON.parse(entityResults.languages as string); + return JSON.parse(entityResults.languages); } catch (error) { throw new Error(`Failed to parse languages for '${entityRef}', ${error}`); } From 7a0010adee499756177e0f2e1c82039f55feb9c6 Mon Sep 17 00:00:00 2001 From: Andre Wanlin Date: Tue, 2 May 2023 15:36:47 -0500 Subject: [PATCH 031/213] Fixed changeset typo Signed-off-by: Andre Wanlin --- .changeset/shaggy-gorillas-occur.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/shaggy-gorillas-occur.md b/.changeset/shaggy-gorillas-occur.md index 149ff6f424..d36b8aef01 100644 --- a/.changeset/shaggy-gorillas-occur.md +++ b/.changeset/shaggy-gorillas-occur.md @@ -2,7 +2,7 @@ '@backstage/plugin-linguist-backend': patch --- -**BREAKING**: Removed public constructor from `LinguistBackendApi`. Removed export of `LinguistBackendDatabase` and `LinguistBackendDatabase` +**BREAKING**: Removed public constructor from `LinguistBackendApi`. Removed export of `LinguistBackendDatabase` and `LinguistBackendStore` Several improvements to the Linguist backend have been made: From 8676ebfd42d8c270fb4b400a6108b3e42c2f9442 Mon Sep 17 00:00:00 2001 From: Andre Wanlin Date: Tue, 2 May 2023 15:38:31 -0500 Subject: [PATCH 032/213] Syntax improvement Signed-off-by: Andre Wanlin --- plugins/linguist-backend/src/db/LinguistBackendDatabase.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/linguist-backend/src/db/LinguistBackendDatabase.ts b/plugins/linguist-backend/src/db/LinguistBackendDatabase.ts index 12f44a5dca..5a59d18e90 100644 --- a/plugins/linguist-backend/src/db/LinguistBackendDatabase.ts +++ b/plugins/linguist-backend/src/db/LinguistBackendDatabase.ts @@ -133,7 +133,7 @@ export class LinguistBackendDatabase implements LinguistBackendStore { const processEntity = { entityRef: rawEntity.entity_ref, - processedDate: processedDate, + processedDate, }; return processEntity; From d787cc504a4bc92669c413266fbe46dff5f1d282 Mon Sep 17 00:00:00 2001 From: Andre Wanlin Date: Tue, 2 May 2023 15:40:14 -0500 Subject: [PATCH 033/213] Changed to minor Signed-off-by: Andre Wanlin --- .changeset/shaggy-gorillas-occur.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/shaggy-gorillas-occur.md b/.changeset/shaggy-gorillas-occur.md index d36b8aef01..ce7c2aba3b 100644 --- a/.changeset/shaggy-gorillas-occur.md +++ b/.changeset/shaggy-gorillas-occur.md @@ -1,5 +1,5 @@ --- -'@backstage/plugin-linguist-backend': patch +'@backstage/plugin-linguist-backend': minor --- **BREAKING**: Removed public constructor from `LinguistBackendApi`. Removed export of `LinguistBackendDatabase` and `LinguistBackendStore` From 96e1004e2a02f568a9e14af73ea476c8f8aeff67 Mon Sep 17 00:00:00 2001 From: Adam Letizia Date: Thu, 11 May 2023 15:54:41 -0500 Subject: [PATCH 034/213] feat(github-actions): add support for GHES hosted repos Signed-off-by: Adam Letizia --- .changeset/silver-cars-type.md | 5 +++ plugins/github-actions/README.md | 16 ++++++++++ plugins/github-actions/api-report.md | 4 +-- plugins/github-actions/package.json | 2 ++ .../src/api/GithubActionsClient.ts | 21 ++++++++---- .../src/components/Cards/Cards.tsx | 10 ++---- .../Cards/RecentWorkflowRunsCard.tsx | 15 ++------- .../WorkflowRunDetails/WorkflowRunDetails.tsx | 9 ++---- .../WorkflowRunLogs/WorkflowRunLogs.tsx | 9 ++---- .../WorkflowRunsTable/WorkflowRunsTable.tsx | 10 ++---- .../src/components/getHostnameFromEntity.ts | 32 +++++++++++++++++++ plugins/github-actions/src/plugin.ts | 8 ++--- yarn.lock | 2 ++ 13 files changed, 90 insertions(+), 53 deletions(-) create mode 100644 .changeset/silver-cars-type.md create mode 100644 plugins/github-actions/src/components/getHostnameFromEntity.ts diff --git a/.changeset/silver-cars-type.md b/.changeset/silver-cars-type.md new file mode 100644 index 0000000000..126005db18 --- /dev/null +++ b/.changeset/silver-cars-type.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-github-actions': minor +--- + +add support for GHES hosted repositories diff --git a/plugins/github-actions/README.md b/plugins/github-actions/README.md index cb6867193c..b94862db2b 100644 --- a/plugins/github-actions/README.md +++ b/plugins/github-actions/README.md @@ -64,6 +64,22 @@ const serviceEntityPage = ( 3. Run the app with `yarn start` and the backend with `yarn start-backend`. Then navigate to `/github-actions/` under any entity. +### Self-hosted / Enterprise GitHub + +The plugin will try to use `backstage.io/source-location` or `backstage.io/managed-by-location` +annotations to figure out the location of the source code. + +1. Add the `host` and `apiBaseUrl` to your `app-config.yaml` + +```yaml +# app-config.yaml + +integrations: + github: + - host: 'your-github-host.com' + apiBaseUrl: 'https://api.your-github-host.com' +``` + ## Features - List workflow runs for a project diff --git a/plugins/github-actions/api-report.md b/plugins/github-actions/api-report.md index b1628996e0..0c9d06d90e 100644 --- a/plugins/github-actions/api-report.md +++ b/plugins/github-actions/api-report.md @@ -10,9 +10,9 @@ import { BackstagePlugin } from '@backstage/core-plugin-api'; import { ConfigApi } from '@backstage/core-plugin-api'; import { Entity } from '@backstage/catalog-model'; import { InfoCardVariants } from '@backstage/core-components'; -import { OAuthApi } from '@backstage/core-plugin-api'; import { RestEndpointMethodTypes } from '@octokit/rest'; import { RouteRef } from '@backstage/core-plugin-api'; +import { ScmAuthApi } from '@backstage/integration-react'; // @public (undocumented) export enum BuildStatus { @@ -111,7 +111,7 @@ export const githubActionsApiRef: ApiRef; // @public export class GithubActionsClient implements GithubActionsApi { - constructor(options: { configApi: ConfigApi; githubAuthApi: OAuthApi }); + constructor(options: { configApi: ConfigApi; scmAuthApi: ScmAuthApi }); // (undocumented) downloadJobLogsForWorkflowRun(options: { hostname?: string; diff --git a/plugins/github-actions/package.json b/plugins/github-actions/package.json index a2c25741be..b69f89e475 100644 --- a/plugins/github-actions/package.json +++ b/plugins/github-actions/package.json @@ -38,12 +38,14 @@ "@backstage/core-components": "workspace:^", "@backstage/core-plugin-api": "workspace:^", "@backstage/integration": "workspace:^", + "@backstage/integration-react": "workspace:^", "@backstage/plugin-catalog-react": "workspace:^", "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.61", "@octokit/rest": "^19.0.3", + "git-url-parse": "^13.0.0", "luxon": "^3.0.0", "react-use": "^17.2.4" }, diff --git a/plugins/github-actions/src/api/GithubActionsClient.ts b/plugins/github-actions/src/api/GithubActionsClient.ts index 724081320f..d1ff689f2e 100644 --- a/plugins/github-actions/src/api/GithubActionsClient.ts +++ b/plugins/github-actions/src/api/GithubActionsClient.ts @@ -15,9 +15,10 @@ */ import { readGithubIntegrationConfigs } from '@backstage/integration'; +import { ScmAuthApi } from '@backstage/integration-react'; import { GithubActionsApi } from './GithubActionsApi'; import { Octokit, RestEndpointMethodTypes } from '@octokit/rest'; -import { ConfigApi, OAuthApi } from '@backstage/core-plugin-api'; +import { ConfigApi } from '@backstage/core-plugin-api'; /** * A client for fetching information about GitHub actions. @@ -26,16 +27,22 @@ import { ConfigApi, OAuthApi } from '@backstage/core-plugin-api'; */ export class GithubActionsClient implements GithubActionsApi { private readonly configApi: ConfigApi; - private readonly githubAuthApi: OAuthApi; + private readonly scmAuthApi: ScmAuthApi; - constructor(options: { configApi: ConfigApi; githubAuthApi: OAuthApi }) { + constructor(options: { configApi: ConfigApi; scmAuthApi: ScmAuthApi }) { this.configApi = options.configApi; - this.githubAuthApi = options.githubAuthApi; + this.scmAuthApi = options.scmAuthApi; } - private async getOctokit(hostname?: string): Promise { - // TODO: Get access token for the specified hostname - const token = await this.githubAuthApi.getAccessToken(['repo']); + private async getOctokit(hostname: string = 'github.com'): Promise { + const { token } = await this.scmAuthApi.getCredentials({ + url: `https://${hostname}/`, + additionalScope: { + customScopes: { + github: ['repo'], + }, + }, + }); const configs = readGithubIntegrationConfigs( this.configApi.getOptionalConfigArray('integrations.github') ?? [], ); diff --git a/plugins/github-actions/src/components/Cards/Cards.tsx b/plugins/github-actions/src/components/Cards/Cards.tsx index e23f7f7d59..205288cba7 100644 --- a/plugins/github-actions/src/components/Cards/Cards.tsx +++ b/plugins/github-actions/src/components/Cards/Cards.tsx @@ -14,7 +14,6 @@ * limitations under the License. */ -import { readGithubIntegrationConfigs } from '@backstage/integration'; import { useEntity } from '@backstage/plugin-catalog-react'; import { LinearProgress, @@ -28,13 +27,14 @@ import { GITHUB_ACTIONS_ANNOTATION } from '../getProjectNameFromEntity'; import { useWorkflowRuns, WorkflowRun } from '../useWorkflowRuns'; import { WorkflowRunsTable } from '../WorkflowRunsTable'; import { WorkflowRunStatus } from '../WorkflowRunStatus'; -import { configApiRef, errorApiRef, useApi } from '@backstage/core-plugin-api'; +import { errorApiRef, useApi } from '@backstage/core-plugin-api'; import { InfoCard, InfoCardVariants, Link, StructuredMetadataTable, } from '@backstage/core-components'; +import { getHostnameFromEntity } from '../getHostnameFromEntity'; const useStyles = makeStyles({ externalLinkIcon: { @@ -85,12 +85,8 @@ export const LatestWorkflowRunCard = (props: { }) => { const { branch = 'master', variant } = props; const { entity } = useEntity(); - const config = useApi(configApiRef); const errorApi = useApi(errorApiRef); - // TODO: Get github hostname from metadata annotation - const hostname = readGithubIntegrationConfigs( - config.getOptionalConfigArray('integrations.github') ?? [], - )[0].host; + const hostname = getHostnameFromEntity(entity); const [owner, repo] = ( entity?.metadata.annotations?.[GITHUB_ACTIONS_ANNOTATION] ?? '/' ).split('/'); diff --git a/plugins/github-actions/src/components/Cards/RecentWorkflowRunsCard.tsx b/plugins/github-actions/src/components/Cards/RecentWorkflowRunsCard.tsx index 59d64af9c9..d48e4a6604 100644 --- a/plugins/github-actions/src/components/Cards/RecentWorkflowRunsCard.tsx +++ b/plugins/github-actions/src/components/Cards/RecentWorkflowRunsCard.tsx @@ -13,7 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { readGithubIntegrationConfigs } from '@backstage/integration'; import { useEntity } from '@backstage/plugin-catalog-react'; import React, { useEffect } from 'react'; import { Link as RouterLink } from 'react-router-dom'; @@ -22,12 +21,7 @@ import { useWorkflowRuns, WorkflowRun } from '../useWorkflowRuns'; import { WorkflowRunStatus } from '../WorkflowRunStatus'; import { Typography } from '@material-ui/core'; -import { - configApiRef, - errorApiRef, - useApi, - useRouteRef, -} from '@backstage/core-plugin-api'; +import { errorApiRef, useApi, useRouteRef } from '@backstage/core-plugin-api'; import { ErrorPanel, InfoCard, @@ -36,6 +30,7 @@ import { Table, } from '@backstage/core-components'; import { buildRouteRef } from '../../routes'; +import { getHostnameFromEntity } from '../getHostnameFromEntity'; const firstLine = (message: string): string => message.split('\n')[0]; @@ -49,13 +44,9 @@ export const RecentWorkflowRunsCard = (props: { const { branch, dense = false, limit = 5, variant } = props; const { entity } = useEntity(); - const config = useApi(configApiRef); const errorApi = useApi(errorApiRef); - // TODO: Get github hostname from metadata annotation - const hostname = readGithubIntegrationConfigs( - config.getOptionalConfigArray('integrations.github') ?? [], - )[0].host; + const hostname = getHostnameFromEntity(entity); const [owner, repo] = ( entity?.metadata.annotations?.[GITHUB_ACTIONS_ANNOTATION] ?? '/' diff --git a/plugins/github-actions/src/components/WorkflowRunDetails/WorkflowRunDetails.tsx b/plugins/github-actions/src/components/WorkflowRunDetails/WorkflowRunDetails.tsx index a2c87772d5..76ce8451e2 100644 --- a/plugins/github-actions/src/components/WorkflowRunDetails/WorkflowRunDetails.tsx +++ b/plugins/github-actions/src/components/WorkflowRunDetails/WorkflowRunDetails.tsx @@ -15,7 +15,6 @@ */ import { Entity } from '@backstage/catalog-model'; -import { readGithubIntegrationConfigs } from '@backstage/integration'; import { Accordion, AccordionDetails, @@ -44,8 +43,8 @@ import { WorkflowRunStatus } from '../WorkflowRunStatus'; import { useWorkflowRunJobs } from './useWorkflowRunJobs'; import { useWorkflowRunsDetails } from './useWorkflowRunsDetails'; import { WorkflowRunLogs } from '../WorkflowRunLogs'; -import { configApiRef, useApi } from '@backstage/core-plugin-api'; import { Breadcrumbs, Link } from '@backstage/core-components'; +import { getHostnameFromEntity } from '../getHostnameFromEntity'; const useStyles = makeStyles(theme => ({ root: { @@ -163,13 +162,9 @@ const JobsList = ({ jobs, entity }: { jobs?: Jobs; entity: Entity }) => { }; export const WorkflowRunDetails = ({ entity }: { entity: Entity }) => { - const config = useApi(configApiRef); const projectName = getProjectNameFromEntity(entity); - // TODO: Get github hostname from metadata annotation - const hostname = readGithubIntegrationConfigs( - config.getOptionalConfigArray('integrations.github') ?? [], - )[0].host; + const hostname = getHostnameFromEntity(entity); const [owner, repo] = (projectName && projectName.split('/')) || []; const details = useWorkflowRunsDetails({ hostname, owner, repo }); const jobs = useWorkflowRunJobs({ hostname, owner, repo }); diff --git a/plugins/github-actions/src/components/WorkflowRunLogs/WorkflowRunLogs.tsx b/plugins/github-actions/src/components/WorkflowRunLogs/WorkflowRunLogs.tsx index 2c9d41398a..2bf8d3356b 100644 --- a/plugins/github-actions/src/components/WorkflowRunLogs/WorkflowRunLogs.tsx +++ b/plugins/github-actions/src/components/WorkflowRunLogs/WorkflowRunLogs.tsx @@ -16,8 +16,6 @@ import { Entity } from '@backstage/catalog-model'; import { LogViewer } from '@backstage/core-components'; -import { configApiRef, useApi } from '@backstage/core-plugin-api'; -import { readGithubIntegrationConfigs } from '@backstage/integration'; import { Accordion, AccordionSummary, @@ -35,6 +33,7 @@ import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; import React from 'react'; import { getProjectNameFromEntity } from '../getProjectNameFromEntity'; import { useDownloadWorkflowRunLogs } from './useDownloadWorkflowRunLogs'; +import { getHostnameFromEntity } from '../getHostnameFromEntity'; const useStyles = makeStyles(theme => ({ button: { @@ -75,14 +74,10 @@ export const WorkflowRunLogs = ({ runId: number; inProgress: boolean; }) => { - const config = useApi(configApiRef); const classes = useStyles(); const projectName = getProjectNameFromEntity(entity); - // TODO: Get github hostname from metadata annotation - const hostname = readGithubIntegrationConfigs( - config.getOptionalConfigArray('integrations.github') ?? [], - )[0].host; + const hostname = getHostnameFromEntity(entity); const [owner, repo] = (projectName && projectName.split('/')) || []; const jobLogs = useDownloadWorkflowRunLogs({ hostname, diff --git a/plugins/github-actions/src/components/WorkflowRunsTable/WorkflowRunsTable.tsx b/plugins/github-actions/src/components/WorkflowRunsTable/WorkflowRunsTable.tsx index f05a41e71b..8471a5d7d6 100644 --- a/plugins/github-actions/src/components/WorkflowRunsTable/WorkflowRunsTable.tsx +++ b/plugins/github-actions/src/components/WorkflowRunsTable/WorkflowRunsTable.tsx @@ -30,7 +30,6 @@ import SyncIcon from '@material-ui/icons/Sync'; import { buildRouteRef } from '../../routes'; import { getProjectNameFromEntity } from '../getProjectNameFromEntity'; import { Entity } from '@backstage/catalog-model'; -import { readGithubIntegrationConfigs } from '@backstage/integration'; import { EmptyState, @@ -38,7 +37,8 @@ import { TableColumn, Link, } from '@backstage/core-components'; -import { configApiRef, useApi, useRouteRef } from '@backstage/core-plugin-api'; +import { useRouteRef } from '@backstage/core-plugin-api'; +import { getHostnameFromEntity } from '../getHostnameFromEntity'; const generatedColumns: TableColumn[] = [ { @@ -164,12 +164,8 @@ export const WorkflowRunsTable = ({ entity: Entity; branch?: string; }) => { - const config = useApi(configApiRef); const projectName = getProjectNameFromEntity(entity); - // TODO: Get github hostname from metadata annotation - const hostname = readGithubIntegrationConfigs( - config.getOptionalConfigArray('integrations.github') ?? [], - )[0].host; + const hostname = getHostnameFromEntity(entity); const [owner, repo] = (projectName ?? '/').split('/'); const [{ runs, ...tableProps }, { retry, setPage, setPageSize }] = useWorkflowRuns({ diff --git a/plugins/github-actions/src/components/getHostnameFromEntity.ts b/plugins/github-actions/src/components/getHostnameFromEntity.ts new file mode 100644 index 0000000000..27e3213d32 --- /dev/null +++ b/plugins/github-actions/src/components/getHostnameFromEntity.ts @@ -0,0 +1,32 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { + ANNOTATION_LOCATION, + ANNOTATION_SOURCE_LOCATION, + Entity, +} from '@backstage/catalog-model'; +import gitUrlParse from 'git-url-parse'; + +export const getHostnameFromEntity = (entity: Entity) => { + const location = + entity?.metadata.annotations?.[ANNOTATION_SOURCE_LOCATION] ?? + entity?.metadata.annotations?.[ANNOTATION_LOCATION]; + + return location && location.startsWith('url:') + ? gitUrlParse(location.slice(4)).resource + : ''; +}; diff --git a/plugins/github-actions/src/plugin.ts b/plugins/github-actions/src/plugin.ts index 26cf246fb9..906ab7c91c 100644 --- a/plugins/github-actions/src/plugin.ts +++ b/plugins/github-actions/src/plugin.ts @@ -20,10 +20,10 @@ import { configApiRef, createPlugin, createApiFactory, - githubAuthApiRef, createRoutableExtension, createComponentExtension, } from '@backstage/core-plugin-api'; +import { scmAuthApiRef } from '@backstage/integration-react'; /** @public */ export const githubActionsPlugin = createPlugin({ @@ -31,9 +31,9 @@ export const githubActionsPlugin = createPlugin({ apis: [ createApiFactory({ api: githubActionsApiRef, - deps: { configApi: configApiRef, githubAuthApi: githubAuthApiRef }, - factory: ({ configApi, githubAuthApi }) => - new GithubActionsClient({ configApi, githubAuthApi }), + deps: { configApi: configApiRef, scmAuthApi: scmAuthApiRef }, + factory: ({ configApi, scmAuthApi }) => + new GithubActionsClient({ configApi, scmAuthApi }), }), ], routes: { diff --git a/yarn.lock b/yarn.lock index 977fcbf506..c55735b5c7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6871,6 +6871,7 @@ __metadata: "@backstage/core-plugin-api": "workspace:^" "@backstage/dev-utils": "workspace:^" "@backstage/integration": "workspace:^" + "@backstage/integration-react": "workspace:^" "@backstage/plugin-catalog-react": "workspace:^" "@backstage/test-utils": "workspace:^" "@backstage/theme": "workspace:^" @@ -6885,6 +6886,7 @@ __metadata: "@types/node": ^16.11.26 "@types/react": ^16.13.1 || ^17.0.0 cross-fetch: ^3.1.5 + git-url-parse: ^13.0.0 luxon: ^3.0.0 msw: ^1.0.0 react-use: ^17.2.4 From 7515edff7eca43b5ca38a5935ff1d0d1fa2b1a35 Mon Sep 17 00:00:00 2001 From: Adam Letizia Date: Thu, 11 May 2023 16:01:55 -0500 Subject: [PATCH 035/213] chore: add hostname test update dev entity annotations Signed-off-by: Adam Letizia --- plugins/github-actions/dev/index.tsx | 2 ++ .../components/Cards/RecentWorkflowRunsCard.test.tsx | 10 ++++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/plugins/github-actions/dev/index.tsx b/plugins/github-actions/dev/index.tsx index 93e6ee4f74..153478ddbc 100644 --- a/plugins/github-actions/dev/index.tsx +++ b/plugins/github-actions/dev/index.tsx @@ -33,6 +33,8 @@ const mockEntity: Entity = { description: 'backstage.io', annotations: { 'github.com/project-slug': 'backstage/backstage', + 'backstage.io/source-location': + 'url:https://ghes.acme.co/backstage/backstage/tree/master/', }, }, spec: { diff --git a/plugins/github-actions/src/components/Cards/RecentWorkflowRunsCard.test.tsx b/plugins/github-actions/src/components/Cards/RecentWorkflowRunsCard.test.tsx index f55cad8424..dcafc3b6f2 100644 --- a/plugins/github-actions/src/components/Cards/RecentWorkflowRunsCard.test.tsx +++ b/plugins/github-actions/src/components/Cards/RecentWorkflowRunsCard.test.tsx @@ -48,6 +48,8 @@ describe('', () => { name: 'software', annotations: { 'github.com/project-slug': 'theorg/the-service', + 'backstage.io/source-location': + 'url:https://ghes.acme.co/theorg/the-service/tree/main/', }, }, spec: { @@ -119,10 +121,14 @@ describe('', () => { ); }); - it('uses the github repo and owner from the entity annotation', async () => { + it('uses the github hostname, repo and owner from the entity annotations', async () => { renderSubject(); expect(useWorkflowRuns).toHaveBeenCalledWith( - expect.objectContaining({ owner: 'theorg', repo: 'the-service' }), + expect.objectContaining({ + hostname: 'ghes.acme.co', + owner: 'theorg', + repo: 'the-service', + }), ); }); From 05f584f84d33728cf0dbf2df2ef2e30ebc1a8a96 Mon Sep 17 00:00:00 2001 From: Patrick Jungermann Date: Mon, 6 Mar 2023 23:39:35 +0100 Subject: [PATCH 036/213] feat: add documented component to uffizzi environment So far, none of the components at the uffizzi environment have techdocs. Hence, there are no docs available within this environment and related features are not covered. This change will add an example from techdocs-backend plugin to the deployed examples. It was possible to register this catalog file manually, however the build of the docs fail due to missing Docker. To allow the generation of docs, we use the local generator (no docker in docker) and install required dependencies. As we don't want all dependencies for all (default) extensions to be installed at this environment, the original example at techdocs-backend plugin was copied and reduced (PlantUML extension example was removed). Signed-off-by: Patrick Jungermann --- .github/uffizzi/docker-compose.uffizzi.yml | 1 + .../uffizzi.production.app-config.yaml | 12 ++- .github/workflows/uffizzi-build.yml | 2 +- packages/backend/Dockerfile | 7 +- .../catalog-info.yaml | 12 +++ .../docs/code/code-sample.md | 31 ++++++ .../docs/extensions.md | 99 +++++++++++++++++++ .../docs/images/backstage-logo-cncf.svg | 1 + .../docs/index.md | 55 +++++++++++ .../docs/sub-page.md | 12 +++ .../documented-component-uffizzi/mkdocs.yml | 12 +++ 11 files changed, 237 insertions(+), 7 deletions(-) create mode 100644 plugins/techdocs-backend/examples/documented-component-uffizzi/catalog-info.yaml create mode 100644 plugins/techdocs-backend/examples/documented-component-uffizzi/docs/code/code-sample.md create mode 100644 plugins/techdocs-backend/examples/documented-component-uffizzi/docs/extensions.md create mode 100644 plugins/techdocs-backend/examples/documented-component-uffizzi/docs/images/backstage-logo-cncf.svg create mode 100644 plugins/techdocs-backend/examples/documented-component-uffizzi/docs/index.md create mode 100644 plugins/techdocs-backend/examples/documented-component-uffizzi/docs/sub-page.md create mode 100644 plugins/techdocs-backend/examples/documented-component-uffizzi/mkdocs.yml diff --git a/.github/uffizzi/docker-compose.uffizzi.yml b/.github/uffizzi/docker-compose.uffizzi.yml index 76a7b4eafc..f2e9bbeee6 100644 --- a/.github/uffizzi/docker-compose.uffizzi.yml +++ b/.github/uffizzi/docker-compose.uffizzi.yml @@ -14,6 +14,7 @@ services: POSTGRES_PORT: 5432 POSTGRES_USER: postgres POSTGRES_PASSWORD: kiTMoTsiEuyQ43GrL4Hv + REF_NAME: ${GITHUB_SHA} NODE_ENV: production deploy: resources: diff --git a/.github/uffizzi/uffizzi.production.app-config.yaml b/.github/uffizzi/uffizzi.production.app-config.yaml index 30cffa11c9..3b24c20b3d 100644 --- a/.github/uffizzi/uffizzi.production.app-config.yaml +++ b/.github/uffizzi/uffizzi.production.app-config.yaml @@ -28,6 +28,7 @@ backend: credentials: true csp: connect-src: ["'self'", 'http:', 'https:'] + img-src: ["'self'", 'data:', 'https://cdnjs.cloudflare.com'] # Content-Security-Policy directives follow the Helmet format: https://helmetjs.github.io/#reference # Default Helmet Content-Security-Policy values can be removed by setting the key to false @@ -41,15 +42,18 @@ auth: catalog: locations: - type: url - target: https://github.com/backstage/backstage/blob/master/packages/catalog-model/examples/all.yaml + target: https://github.com/backstage/backstage/blob/${REF_NAME}/packages/catalog-model/examples/all.yaml - type: url - target: https://github.com/backstage/backstage/blob/master/packages/catalog-model/examples/acme-corp.yaml + target: https://github.com/backstage/backstage/blob/${REF_NAME}/plugins/techdocs-backend/examples/documented-component-uffizzi/catalog-info.yaml + + - type: url + target: https://github.com/backstage/backstage/blob/${REF_NAME}/packages/catalog-model/examples/acme-corp.yaml rules: - allow: [User, Group] - type: url - target: https://github.com/backstage/backstage/blob/master/plugins/scaffolder-backend/sample-templates/all-templates.yaml + target: https://github.com/backstage/backstage/blob/${REF_NAME}/plugins/scaffolder-backend/sample-templates/all-templates.yaml rules: - allow: [Template] @@ -124,7 +128,7 @@ proxy: techdocs: builder: 'local' # Alternatives - 'external' generator: - runIn: 'docker' + runIn: 'local' # dockerImage: my-org/techdocs # use a custom docker image # pullImage: true # or false to disable automatic pulling of image (e.g. if custom docker login is required) publisher: diff --git a/.github/workflows/uffizzi-build.yml b/.github/workflows/uffizzi-build.yml index ee629bbafe..1b031f50ad 100644 --- a/.github/workflows/uffizzi-build.yml +++ b/.github/workflows/uffizzi-build.yml @@ -81,7 +81,7 @@ jobs: BACKSTAGE_IMAGE=$(echo ${{ needs.build-backstage.outputs.tags }}) export BACKSTAGE_IMAGE # Render simple template from environment variables. - envsubst '$BACKSTAGE_IMAGE' < .github/uffizzi/docker-compose.uffizzi.yml > docker-compose.rendered.yml + envsubst '$BACKSTAGE_IMAGE $GITHUB_SHA' < .github/uffizzi/docker-compose.uffizzi.yml > docker-compose.rendered.yml cat docker-compose.rendered.yml - name: Upload Rendered Compose File as Artifact uses: actions/upload-artifact@v3 diff --git a/packages/backend/Dockerfile b/packages/backend/Dockerfile index eca6ce82c2..da25f9736c 100644 --- a/packages/backend/Dockerfile +++ b/packages/backend/Dockerfile @@ -13,11 +13,14 @@ FROM node:16-bullseye-slim # Install sqlite3 dependencies. You can skip this if you don't use sqlite3 in the image, # in which case you should also move better-sqlite3 to "devDependencies" in package.json. +# Additionally, we install dependencies for `techdocs.generator.runIn: local`. +# https://backstage.io/docs/features/techdocs/getting-started#disabling-docker-in-docker-situation-optional RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ --mount=type=cache,target=/var/lib/apt,sharing=locked \ apt-get update && \ - apt-get install -y --no-install-recommends libsqlite3-dev python3 build-essential && \ - yarn config set python /usr/bin/python3 + apt-get install -y --no-install-recommends libsqlite3-dev python3 python3-pip build-essential && \ + yarn config set python /usr/bin/python3 && \ + pip3 install mkdocs-techdocs-core==1.1.7 # From here on we use the least-privileged `node` user to run the backend. WORKDIR /app diff --git a/plugins/techdocs-backend/examples/documented-component-uffizzi/catalog-info.yaml b/plugins/techdocs-backend/examples/documented-component-uffizzi/catalog-info.yaml new file mode 100644 index 0000000000..a4d46593d3 --- /dev/null +++ b/plugins/techdocs-backend/examples/documented-component-uffizzi/catalog-info.yaml @@ -0,0 +1,12 @@ +apiVersion: backstage.io/v1alpha1 +kind: Component +metadata: + name: documented-component-uffizzi + title: Documented Component (Uffizzi) + description: A Service with TechDocs documentation. Excl. PlantUML extension. + annotations: + backstage.io/techdocs-ref: dir:. +spec: + type: service + lifecycle: experimental + owner: user:guest diff --git a/plugins/techdocs-backend/examples/documented-component-uffizzi/docs/code/code-sample.md b/plugins/techdocs-backend/examples/documented-component-uffizzi/docs/code/code-sample.md new file mode 100644 index 0000000000..f41ab1d506 --- /dev/null +++ b/plugins/techdocs-backend/examples/documented-component-uffizzi/docs/code/code-sample.md @@ -0,0 +1,31 @@ +# Sample Code + +This page provides some sample code which may be used in your example component. + +This code uses TypeScript, and the Markdown code fence to wrap the code. + +```typescript +const serviceEntityPage = ( + + + + + + + + + + + + +); +``` + +Here is an example of Python code: + +```python +def getUsersInGroup(targetGroup, secure=False): + + if __debug__: + print('targetGroup=[' + targetGroup + ']') +``` diff --git a/plugins/techdocs-backend/examples/documented-component-uffizzi/docs/extensions.md b/plugins/techdocs-backend/examples/documented-component-uffizzi/docs/extensions.md new file mode 100644 index 0000000000..2b101efdef --- /dev/null +++ b/plugins/techdocs-backend/examples/documented-component-uffizzi/docs/extensions.md @@ -0,0 +1,99 @@ +# Plugins & Extensions + +Just by including the TechDocs Core Plugin to your MkDocs site included with Backstage, +you gain the immediate use of a variety of popular plugins and extensions to MkDocs. + +For more information and full details of the available features, see the +[`mkdocs-techdocs-core` repository](https://github.com/backstage/mkdocs-techdocs-core#mkdocs-plugins-and-extensions). + +This page provides a demonstration of some of the available features. + +## Admonitions + +Admonitions are call outs that help catch a users attention. + +To define an admonition simply put the following Markdown into your content: + +``` +!!! warn + Defining admonitions can be addicting. +``` + +And they end up looking like this: + + +!!! warn + Defining admonitions can be addicting. + + +!!! note + You can learn a lot about TechDocs by just visiting the Backstage web site at + https://backstage.io/docs. + + +!!! info + TechDocs is the core feature that supports documentation as code in Backstage. + + +!!! tip + Don't forget to spell check your documentation. + +## Pymdownx Extensions + +Pymdownx (Python Markdown extensions) are a variety of smaller additions. + +### Details + + +??? note "What is the answer to life, the universe, and everything? (click me for the answer)" + The answer is 42. + + +??? note "What is 4 plus 4?" + The answer is 8. + + +???+ note "How do I get support?" + You can get support by opening an issue in this repository. This detail is open by default + so it's more easily visible without requiring the user to click to open it. + +### Task Lists + +Automatic rendering of Markdown task lists. + +- [x] Phase 1 +- [x] Phase 2 +- [ ] Phase 3 + +### Emojis + +Very nice job on documentation! :thumbsup: + +I've read a lot of documentation, but I love :heart: this document. + +Weather: :sunny: :umbrella: :cloud: :snowflake: + +Animals: :tiger: :horse: :turtle: :wolf: :frog: + +### Attributes + +[A Download Link](./images/backstage-logo-cncf.svg){: download } + +![A Scaled Image](./images/backstage-logo-cncf.svg){: style="width: 100px" } + +### MDX truly sane lists + +- `attributes` + +- `customer` + - `first_name` + - `test` + - `family_name` + - `email` +- `person` + - `first_name` + - `family_name` + - `birth_date` +- `subscription_id` + +- `request` diff --git a/plugins/techdocs-backend/examples/documented-component-uffizzi/docs/images/backstage-logo-cncf.svg b/plugins/techdocs-backend/examples/documented-component-uffizzi/docs/images/backstage-logo-cncf.svg new file mode 100644 index 0000000000..b5ff591d1b --- /dev/null +++ b/plugins/techdocs-backend/examples/documented-component-uffizzi/docs/images/backstage-logo-cncf.svg @@ -0,0 +1 @@ +05 Logo_Black \ No newline at end of file diff --git a/plugins/techdocs-backend/examples/documented-component-uffizzi/docs/index.md b/plugins/techdocs-backend/examples/documented-component-uffizzi/docs/index.md new file mode 100644 index 0000000000..6295a69406 --- /dev/null +++ b/plugins/techdocs-backend/examples/documented-component-uffizzi/docs/index.md @@ -0,0 +1,55 @@ +# Welcome! + +This is a basic example of documentation. It is intended as a showcase of some of the +features that TechDocs provides out of the box. + +You can see also: + +- [A sub page](sub-page.md) +- [Inline code examples](code/code-sample.md) +- [Plugin & Extension examples](extensions.md) - Diagrams, emojis, visual formatting. + +## Basic Markdown + +Headings: + +# h1 + +## h2 + +### h3 + +#### h4 + +##### h5 + +###### h6 + +Here is a bulleted list: + +- Item one +- Item two +- Item Three + +Check out the [Markdown Guide](https://www.markdownguide.org/) to learn more about how to +simply create documentation. + +You can also learn more about how to configure and setup this documentation in Backstage, +[read up on the TechDocs Overview](https://backstage.io/docs/features/techdocs/). + +## Image Example + +This documentation is powered by Backstage's TechDocs feature: + +![Backstage Logo](images/backstage-logo-cncf.svg) + +## Table Example + +While this documentation isn't comprehensive, in the future it should cover the following +topics outlined in this example table: + +| Topic | Description | +| ------- | ------------------------------------------------------------ | +| Topic 1 | An introductory topic to help you learn about the component. | +| Topic 2 | A more detailed topic that explains more information. | +| Topic 3 | A final topic that provides conclusions and lessons learned. | diff --git a/plugins/techdocs-backend/examples/documented-component-uffizzi/docs/sub-page.md b/plugins/techdocs-backend/examples/documented-component-uffizzi/docs/sub-page.md new file mode 100644 index 0000000000..987f5e8a95 --- /dev/null +++ b/plugins/techdocs-backend/examples/documented-component-uffizzi/docs/sub-page.md @@ -0,0 +1,12 @@ +# Another page in our documentation + +This sub-page can be used to elaborate on a specific part of the component. + +## Details + +It is linked off the main page, and due to its inclusion in the `mkdocs.yml` file, +becomes part of the auto-generated site navigation. + +## MkDocs + +Visit https://www.mkdocs.org for more information about the MkDocs tool. diff --git a/plugins/techdocs-backend/examples/documented-component-uffizzi/mkdocs.yml b/plugins/techdocs-backend/examples/documented-component-uffizzi/mkdocs.yml new file mode 100644 index 0000000000..1a159a4d12 --- /dev/null +++ b/plugins/techdocs-backend/examples/documented-component-uffizzi/mkdocs.yml @@ -0,0 +1,12 @@ +site_name: 'Example Documentation' +repo_url: https://github.com/backstage/backstage +edit_uri: edit/master/plugins/techdocs-backend/examples/documented-component/docs + +nav: + - Home: index.md + - Subpage: sub-page.md + - 'Code Sample': code/code-sample.md + - Extensions: extensions.md + +plugins: + - techdocs-core From cda753a797b5d78fc7db7c2f348c304b6fd241e4 Mon Sep 17 00:00:00 2001 From: Sander Aernouts Date: Thu, 11 May 2023 14:44:10 +0200 Subject: [PATCH 037/213] fix(scaffolder): forward authorization header on event source Signed-off-by: Sander Aernouts --- .changeset/curvy-years-smoke.md | 5 +++++ plugins/scaffolder/package.json | 2 +- plugins/scaffolder/src/api.test.ts | 15 ++++++++++++--- plugins/scaffolder/src/api.ts | 15 ++++++++++++--- yarn.lock | 9 ++++++++- 5 files changed, 38 insertions(+), 8 deletions(-) create mode 100644 .changeset/curvy-years-smoke.md diff --git a/.changeset/curvy-years-smoke.md b/.changeset/curvy-years-smoke.md new file mode 100644 index 0000000000..056056fdff --- /dev/null +++ b/.changeset/curvy-years-smoke.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +Forward `Authorization` header for `EventSource` when credentials are available. diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json index 4b5e34e5de..a80ecec049 100644 --- a/plugins/scaffolder/package.json +++ b/plugins/scaffolder/package.json @@ -74,6 +74,7 @@ "@types/react": "^16.13.1 || ^17.0.0", "@uiw/react-codemirror": "^4.9.3", "classnames": "^2.2.6", + "event-source-polyfill": "^1.0.31", "git-url-parse": "^13.0.0", "humanize-duration": "^3.25.1", "immer": "^9.0.1", @@ -108,7 +109,6 @@ "@types/json-schema": "^7.0.9", "@types/node": "^16.11.26", "cross-fetch": "^3.1.5", - "event-source-polyfill": "1.0.25", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/scaffolder/src/api.test.ts b/plugins/scaffolder/src/api.test.ts index e21bda8fd7..b9b1881066 100644 --- a/plugins/scaffolder/src/api.test.ts +++ b/plugins/scaffolder/src/api.test.ts @@ -20,11 +20,14 @@ import { MockFetchApi, setupRequestMockHandlers } from '@backstage/test-utils'; import { rest } from 'msw'; import { setupServer } from 'msw/node'; import { ScaffolderClient } from './api'; +import { EventSourcePolyfill } from 'event-source-polyfill'; -const MockedEventSource = global.EventSource as jest.MockedClass< - typeof EventSource +const MockedEventSource = EventSourcePolyfill as jest.MockedClass< + typeof EventSourcePolyfill >; +jest.mock('event-source-polyfill'); + const server = setupServer(); describe('api', () => { @@ -102,6 +105,9 @@ describe('api', () => { }, ); + const token = 'fake-token'; + identityApi.getCredentials.mockResolvedValue({ token: token }); + const next = jest.fn(); await new Promise(complete => { @@ -112,7 +118,10 @@ describe('api', () => { expect(MockedEventSource).toHaveBeenCalledWith( 'http://backstage/api/v2/tasks/a-random-task-id/eventstream', - { withCredentials: true }, + { + withCredentials: true, + headers: { Authorization: `Bearer ${token}` }, + }, ); expect(MockedEventSource.prototype.close).toHaveBeenCalled(); diff --git a/plugins/scaffolder/src/api.ts b/plugins/scaffolder/src/api.ts index 7a3f6c14bb..c67a5c944e 100644 --- a/plugins/scaffolder/src/api.ts +++ b/plugins/scaffolder/src/api.ts @@ -41,6 +41,7 @@ import { } from '@backstage/plugin-scaffolder-react'; import queryString from 'qs'; +import { EventSourcePolyfill } from 'event-source-polyfill'; /** * An API to interact with the scaffolder backend. @@ -224,8 +225,11 @@ export class ScaffolderClient implements ScaffolderApi { params.set('after', String(Number(after))); } - this.discoveryApi.getBaseUrl('scaffolder').then( - baseUrl => { + Promise.all([ + this.discoveryApi.getBaseUrl('scaffolder'), + this.identityApi?.getCredentials(), + ]).then( + ([baseUrl, credentials]) => { const url = `${baseUrl}/v2/tasks/${encodeURIComponent( taskId, )}/eventstream`; @@ -240,7 +244,12 @@ export class ScaffolderClient implements ScaffolderApi { } }; - const eventSource = new EventSource(url, { withCredentials: true }); + const eventSource = new EventSourcePolyfill(url, { + withCredentials: true, + headers: credentials?.token + ? { Authorization: `Bearer ${credentials.token}` } + : {}, + }); eventSource.addEventListener('log', processEvent); eventSource.addEventListener('cancelled', processEvent); eventSource.addEventListener('completion', (event: any) => { diff --git a/yarn.lock b/yarn.lock index e38ea3fff3..bcfa6ab89d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8658,7 +8658,7 @@ __metadata: "@uiw/react-codemirror": ^4.9.3 classnames: ^2.2.6 cross-fetch: ^3.1.5 - event-source-polyfill: 1.0.25 + event-source-polyfill: ^1.0.31 git-url-parse: ^13.0.0 humanize-duration: ^3.25.1 immer: ^9.0.1 @@ -23845,6 +23845,13 @@ __metadata: languageName: node linkType: hard +"event-source-polyfill@npm:^1.0.31": + version: 1.0.31 + resolution: "event-source-polyfill@npm:1.0.31" + checksum: 973f226404e2a1b14ed7ef15c718b89e213b41d7cfeeb1c10937fd09229f13904f3d7c3075ab28ccf858c213007559908eecdd577577330352f53a351383dd75 + languageName: node + linkType: hard + "event-stream@npm:=3.3.4": version: 3.3.4 resolution: "event-stream@npm:3.3.4" From 326aa376ef3c4e0ea846b7981180e97ab541ef95 Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Tue, 25 Apr 2023 22:47:00 +0200 Subject: [PATCH 038/213] catalog-react: humanizeEntity add defaultName Signed-off-by: Vincenzo Scamporlino --- .../components/EntityRefLink/humanize.test.ts | 18 ++++++++++------ .../src/components/EntityRefLink/humanize.ts | 21 +++++++------------ 2 files changed, 19 insertions(+), 20 deletions(-) diff --git a/plugins/catalog-react/src/components/EntityRefLink/humanize.test.ts b/plugins/catalog-react/src/components/EntityRefLink/humanize.test.ts index e7d1649a29..1182a7778d 100644 --- a/plugins/catalog-react/src/components/EntityRefLink/humanize.test.ts +++ b/plugins/catalog-react/src/components/EntityRefLink/humanize.test.ts @@ -215,9 +215,12 @@ describe('humanizeEntityRef', () => { describe('humanizeEntity', () => { it('gives a readable name when one is provided at metadata.title', () => { expect( - humanizeEntity({ - metadata: { name: 'my-entity', title: 'My Title' }, - } as Entity), + humanizeEntity( + { + metadata: { name: 'my-entity', title: 'My Title' }, + } as Entity, + 'default', + ), ).toBe('My Title'); }); @@ -257,13 +260,16 @@ describe('humanizeEntity', () => { ])( 'gives a readable name for kind %s when one is provided at spec.profile.displayName', (_, entity: Entity, expected) => { - expect(humanizeEntity(entity)).toBe(expected); + expect(humanizeEntity(entity, 'default')).toBe(expected); }, ); it('should pass through to humanizeEntityRef when nothing matches', () => { expect( - humanizeEntity({ kind: 'Group', metadata: { name: 'test' } } as Entity), - ).toBe('group:test'); + humanizeEntity( + { kind: 'Group', metadata: { name: 'test' } } as Entity, + 'default', + ), + ).toBe('default'); }); }); diff --git a/plugins/catalog-react/src/components/EntityRefLink/humanize.ts b/plugins/catalog-react/src/components/EntityRefLink/humanize.ts index 7f1501280a..478f0dce9d 100644 --- a/plugins/catalog-react/src/components/EntityRefLink/humanize.ts +++ b/plugins/catalog-react/src/components/EntityRefLink/humanize.ts @@ -25,7 +25,8 @@ import get from 'lodash/get'; * @param defaultNamespace - if set to false then namespace is never omitted, * if set to string which matches namespace of entity then omitted * - * @public */ + * @public + **/ export function humanizeEntityRef( entityRef: Entity | CompoundEntityRef, opts?: { @@ -73,27 +74,19 @@ export function humanizeEntityRef( * If an entity is either User or Group, this will be its `spec.profile.displayName`. * Otherwise, this is `metadata.title`. * - * If neither of those are found or populated, fallback to `humanizeEntityRef`. + * If neither of those are found or populated, fallback to `defaultName`. * * @param entity - Entity to convert. - * @param opts - If entity readable name is not available, opts will be used to specify humanizeEntityRef options. - * @returns Readable name, defaults to unique identifier. + * @param defaultName - If entity readable name is not available, `defaultName` will be returned. + * @returns Readable name, defaults to `defaultName`. * - * @public */ -export function humanizeEntity( - entity: Entity, - opts?: { - defaultKind?: string; - defaultNamespace?: string | false; - }, -) { +export function humanizeEntity(entity: Entity, defaultName: string) { for (const path of ['spec.profile.displayName', 'metadata.title']) { const value = get(entity, path); if (value && typeof value === 'string') { return value; } } - - return humanizeEntityRef(entity, opts); + return defaultName; } From 1271c0f71a31e784f48643e0b2b012e58451d522 Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Tue, 25 Apr 2023 22:49:37 +0200 Subject: [PATCH 039/213] catalog-react: EntityOwnerPicker paginate entities Signed-off-by: Vincenzo Scamporlino --- plugins/catalog-react/package.json | 1 + .../EntityOwnerPicker.test.tsx | 169 ++++++------ .../EntityOwnerPicker/EntityOwnerPicker.tsx | 243 +++++++++--------- yarn.lock | 17 ++ 4 files changed, 217 insertions(+), 213 deletions(-) diff --git a/plugins/catalog-react/package.json b/plugins/catalog-react/package.json index d5808553cb..ce3e5db783 100644 --- a/plugins/catalog-react/package.json +++ b/plugins/catalog-react/package.json @@ -60,6 +60,7 @@ "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.61", + "@react-hookz/web": "^23.0.0", "@types/react": "^16.13.1 || ^17.0.0", "classnames": "^2.2.6", "jwt-decode": "^3.1.0", diff --git a/plugins/catalog-react/src/components/EntityOwnerPicker/EntityOwnerPicker.test.tsx b/plugins/catalog-react/src/components/EntityOwnerPicker/EntityOwnerPicker.test.tsx index e4dc322c7c..86101d3579 100644 --- a/plugins/catalog-react/src/components/EntityOwnerPicker/EntityOwnerPicker.test.tsx +++ b/plugins/catalog-react/src/components/EntityOwnerPicker/EntityOwnerPicker.test.tsx @@ -14,8 +14,8 @@ * limitations under the License. */ -import { Entity, stringifyEntityRef } from '@backstage/catalog-model'; -import { fireEvent, screen } from '@testing-library/react'; +import { Entity } from '@backstage/catalog-model'; +import { fireEvent, screen, waitFor } from '@testing-library/react'; import React from 'react'; import { MockEntityListContextProvider } from '../../testUtils/providers'; import { EntityOwnerFilter } from '../../filters'; @@ -28,8 +28,9 @@ import { } from '@backstage/test-utils'; import { catalogApiRef, CatalogApi } from '../..'; import { errorApiRef } from '@backstage/core-plugin-api'; +import { QueryEntitiesCursorRequest } from '@backstage/catalog-client'; -const ownerEntities: Entity[] = [ +const ownerEntitiesBatch1: Entity[] = [ { apiVersion: '1', kind: 'Group', @@ -68,64 +69,52 @@ const ownerEntities: Entity[] = [ }, ]; -const sampleEntities: Entity[] = [ +const ownerEntitiesBatch2: Entity[] = [ { apiVersion: '1', - kind: 'Component', + kind: 'Group', metadata: { - name: 'component-1', + name: 'some-owner-batch-2', }, - relations: [ - { - type: 'ownedBy', - targetRef: 'group:default/some-owner', - }, - { - type: 'ownedBy', - targetRef: 'group:default/some-owner-2', - }, - ], }, { apiVersion: '1', - kind: 'Component', + kind: 'Group', metadata: { - name: 'component-2', + name: 'some-owner-2-batch-2', }, - relations: [ - { - type: 'ownedBy', - targetRef: 'group:default/another-owner', + spec: { + profile: { + displayName: 'Some Owner Batch 2', }, - { - type: 'ownedBy', - targetRef: 'group:test-namespace/another-owner-2', - }, - ], + }, }, { apiVersion: '1', - kind: 'Component', + kind: 'Group', metadata: { - name: 'component-3', + name: 'another-owner-batch-2', + title: 'Another Owner Batch 2', + }, + }, + { + apiVersion: '1', + kind: 'Group', + metadata: { + namespace: 'test-namespace', + name: 'another-owner-2-batch-2', + title: 'Another Owner in Another Namespace Batch 2', }, - relations: [ - { - type: 'ownedBy', - targetRef: 'group:default/some-owner', - }, - ], }, ]; -const getEntitiesByRefs = jest.fn(async ({ entityRefs }) => ({ - items: entityRefs.map((e: string) => - ownerEntities.find(f => stringifyEntityRef(f) === e), - ), -})); +const mockedQueryEntities: jest.MockedFn = + jest.fn(); + const mockCatalogApi: Partial = { - getEntitiesByRefs, + queryEntities: mockedQueryEntities, }; + const mockErrorApi = new MockErrorApi(); describe('', () => { @@ -134,12 +123,33 @@ describe('', () => { [errorApiRef, mockErrorApi], ); + beforeEach(() => { + jest.resetAllMocks(); + + mockedQueryEntities.mockImplementation(async request => { + const totalItems = + ownerEntitiesBatch1.length + ownerEntitiesBatch2.length; + if ((request as QueryEntitiesCursorRequest).cursor) { + return { + items: ownerEntitiesBatch2, + pageInfo: {}, + totalItems, + }; + } + return { + items: ownerEntitiesBatch1, + pageInfo: { + nextCursor: 'nextCursor', + }, + totalItems, + }; + }); + }); + it('renders all owners', async () => { await renderWithEffects( - + , @@ -147,36 +157,36 @@ describe('', () => { expect(screen.getByText('Owner')).toBeInTheDocument(); fireEvent.click(screen.getByTestId('owner-picker-expand')); + + await waitFor(() => + expect(screen.getByText('Another Owner')).toBeInTheDocument(), + ); + [ - 'Another Owner', 'some-owner', 'Some Owner 2', 'Another Owner in Another Namespace', ].forEach(owner => { expect(screen.getByText(owner)).toBeInTheDocument(); }); - }); - it('renders unique owners in alphabetical order', async () => { - await renderWithEffects( - - - - - , + expect(mockedQueryEntities).toHaveBeenCalledTimes(1); + + fireEvent.scroll(screen.getByTestId('owner-picker-listbox')); + + await waitFor(() => + expect(screen.getByText('some-owner-batch-2')).toBeInTheDocument(), ); - expect(screen.getByText('Owner')).toBeInTheDocument(); - fireEvent.click(screen.getByTestId('owner-picker-expand')); + [ + 'some-owner-batch-2', + 'Some Owner Batch 2', + 'Another Owner in Another Namespace Batch 2', + ].forEach(owner => { + expect(screen.getByText(owner)).toBeInTheDocument(); + }); - expect(screen.getAllByRole('option').map(o => o.textContent)).toEqual([ - 'Another Owner', - 'Another Owner in Another Namespace', - 'some-owner', - 'Some Owner 2', - ]); + expect(mockedQueryEntities).toHaveBeenCalledTimes(2); }); it('respects the query parameter filter value', async () => { @@ -186,8 +196,6 @@ describe('', () => { ', () => { @@ -222,6 +228,8 @@ describe('', () => { }); fireEvent.click(screen.getByTestId('owner-picker-expand')); + await waitFor(() => screen.getByText('some-owner')); + fireEvent.click(screen.getByText('some-owner')); expect(updateFilters).toHaveBeenLastCalledWith({ owners: new EntityOwnerFilter(['group:default/some-owner']), @@ -234,8 +242,6 @@ describe('', () => { ', () => { }); fireEvent.click(screen.getByTestId('owner-picker-expand')); - expect(screen.getByLabelText('some-owner')).toBeChecked(); + await waitFor(() => + expect(screen.getByLabelText('some-owner')).toBeChecked(), + ); fireEvent.click(screen.getByLabelText('some-owner')); expect(updateFilters).toHaveBeenLastCalledWith({ @@ -265,7 +273,6 @@ describe('', () => { value={{ updateFilters, queryParameters: { owners: ['team-a'] }, - backendEntities: sampleEntities, }} > @@ -281,7 +288,6 @@ describe('', () => { value={{ updateFilters, queryParameters: { owners: ['team-b'] }, - backendEntities: sampleEntities, }} > @@ -292,23 +298,4 @@ describe('', () => { owners: new EntityOwnerFilter(['group:default/team-b']), }); }); - it('removes owners from filters if there are none available', async () => { - const updateFilters = jest.fn(); - await renderWithEffects( - - - - - , - ); - expect(updateFilters).toHaveBeenLastCalledWith({ - owners: undefined, - }); - }); }); diff --git a/plugins/catalog-react/src/components/EntityOwnerPicker/EntityOwnerPicker.tsx b/plugins/catalog-react/src/components/EntityOwnerPicker/EntityOwnerPicker.tsx index 8c4f2bfea0..e5ca1b86f4 100644 --- a/plugins/catalog-react/src/components/EntityOwnerPicker/EntityOwnerPicker.tsx +++ b/plugins/catalog-react/src/components/EntityOwnerPicker/EntityOwnerPicker.tsx @@ -14,17 +14,11 @@ * limitations under the License. */ -import { - Entity, - parseEntityRef, - RELATION_OWNED_BY, - stringifyEntityRef, -} from '@backstage/catalog-model'; +import { Entity, stringifyEntityRef } from '@backstage/catalog-model'; import { Box, Checkbox, FormControlLabel, - makeStyles, TextField, Typography, } from '@material-ui/core'; @@ -35,38 +29,69 @@ import { Autocomplete } from '@material-ui/lab'; import React, { useEffect, useMemo, useState } from 'react'; import { useEntityList } from '../../hooks/useEntityListProvider'; import { EntityOwnerFilter } from '../../filters'; -import { getEntityRelations } from '../../utils'; -import useAsync from 'react-use/lib/useAsync'; -import { errorApiRef, useApi } from '@backstage/core-plugin-api'; +import { useApi } from '@backstage/core-plugin-api'; import { catalogApiRef } from '../../api'; -import { humanizeEntity, humanizeEntityRef } from '../EntityRefLink/humanize'; +import useAsyncFn from 'react-use/lib/useAsyncFn'; +import { useDebouncedEffect } from '@react-hookz/web'; +import PersonIcon from '@material-ui/icons/Person'; +import GroupIcon from '@material-ui/icons/Group'; +import { humanizeEntity } from '../EntityRefLink/humanize'; /** @public */ export type CatalogReactEntityOwnerPickerClassKey = 'input'; -const useStyles = makeStyles( - { - input: {}, - }, - { - name: 'CatalogReactEntityOwnerPicker', - }, -); - const icon = ; const checkedIcon = ; /** @public */ export const EntityOwnerPicker = () => { - const classes = useStyles(); const { updateFilters, - backendEntities, filters, queryParameters: { owners: ownersParameter }, } = useEntityList(); + const catalogApi = useApi(catalogApiRef); - const errorApi = useApi(errorApiRef); + const [text, setText] = useState(''); + + const [{ value, loading }, handleFetch] = useAsyncFn( + async (request: { text: string } | { cursor: string; prev: Entity[] }) => { + const initialRequest = request as { text: string }; + const cursorRequest = request as { cursor: string; prev: Entity[] }; + const limit = 20; + + if (cursorRequest.cursor) { + const response = await catalogApi.queryEntities({ + cursor: cursorRequest.cursor, + limit, + }); + return { + ...response, + items: [...cursorRequest.prev, ...response.items], + }; + } + + return catalogApi.queryEntities({ + fullTextFilter: { + term: initialRequest.text || '', + fields: [ + 'metadata.name', + 'kind', + 'spec.profile.displayname', + 'metadata.title', + ], + }, + filter: { kind: ['User', 'Group'] }, + orderFields: [{ field: 'metadata.name', order: 'asc' }], + limit, + }); + }, + [text], + ); + + useDebouncedEffect(() => handleFetch({ text }), [text], 250); + + const availableOwners = value?.items || []; const queryParamOwners = useMemo( () => [ownersParameter].flat().filter(Boolean) as string[], @@ -74,72 +99,9 @@ export const EntityOwnerPicker = () => { ); const [selectedOwners, setSelectedOwners] = useState( - queryParamOwners.length - ? new EntityOwnerFilter(queryParamOwners).values - : filters.owners?.values ?? [], + queryParamOwners.length ? queryParamOwners : filters.owners?.values ?? [], ); - const { - loading, - error, - value: ownerEntities, - } = useAsync(async () => { - const ownerEntityRefs = [ - ...new Set( - backendEntities - .flatMap((e: Entity) => - getEntityRelations(e, RELATION_OWNED_BY).map(o => - stringifyEntityRef(o), - ), - ) - .filter(Boolean) as string[], - ), - ]; - const { items: ownerEntitiesOrNull } = await catalogApi.getEntitiesByRefs({ - entityRefs: ownerEntityRefs, - fields: [ - 'kind', - 'metadata.name', - 'metadata.title', - 'metadata.namespace', - 'spec.profile.displayName', - ], - }); - const owners = ownerEntitiesOrNull.map((entity, index) => { - if (entity) { - return { - label: humanizeEntity(entity, { defaultKind: 'Group' }), - entityRef: stringifyEntityRef(entity), - }; - } - return { - label: humanizeEntityRef(parseEntityRef(ownerEntityRefs[index]), { - defaultKind: 'group', - }), - entityRef: ownerEntityRefs[index], - }; - }); - - return owners.sort((a, b) => - a.label.localeCompare(b.label, 'en-US', { - ignorePunctuation: true, - caseFirst: 'upper', - }), - ); - }, [backendEntities]); - - useEffect(() => { - if (error) { - errorApi.post( - { - ...error, - message: `EntityOwnerPicker failed to initialize: ${error.message}`, - }, - {}, - ); - } - }, [error, errorApi]); - // Set selected owners on query parameter updates; this happens at initial page load and from // external updates to the page location. useEffect(() => { @@ -150,17 +112,12 @@ export const EntityOwnerPicker = () => { }, [queryParamOwners]); useEffect(() => { - if (!loading && ownerEntities) { - updateFilters({ - owners: - selectedOwners.length && ownerEntities.length - ? new EntityOwnerFilter(selectedOwners) - : undefined, - }); - } - }, [selectedOwners, updateFilters, ownerEntities, loading]); - - if (!loading && !ownerEntities?.length) return null; + updateFilters({ + owners: selectedOwners.length + ? new EntityOwnerFilter(selectedOwners) + : undefined, + }); + }, [selectedOwners, updateFilters]); return ( @@ -170,38 +127,80 @@ export const EntityOwnerPicker = () => { multiple disableCloseOnSelect loading={loading} - options={ownerEntities || []} - value={ - ownerEntities?.filter(e => - selectedOwners.some((f: string) => f === e.entityRef), - ) ?? [] - } - onChange={(_: object, value: { entityRef: string }[]) => - setSelectedOwners(value.map(e => e.entityRef)) - } - getOptionLabel={option => option.label} - renderOption={(option, { selected }) => ( - - } - onClick={event => event.preventDefault()} - label={option.label} - /> - )} + options={availableOwners} + value={selectedOwners as unknown as Entity[]} + getOptionSelected={(o, v) => { + if (typeof v === 'string') { + return stringifyEntityRef(o) === v; + } + return o === v; + }} + onChange={(_: object, owners) => { + setText(''); + setSelectedOwners( + owners.map(e => + typeof e === 'string' ? e : stringifyEntityRef(e), + ), + ); + }} + filterOptions={x => x} + renderOption={(entity, { selected }) => { + const isGroup = entity.kind === 'Group'; + + return ( + + } + onClick={event => event.preventDefault()} + label={ + + {isGroup ? ( + + ) : ( + + )} +   + {humanizeEntity(entity, entity.metadata.name)} + + } + /> + ); + }} size="small" popupIcon={} renderInput={params => ( { + setText(e.currentTarget.value); + }} variant="outlined" /> )} + ListboxProps={{ + onScroll: (e: React.MouseEvent) => { + const element = e.currentTarget; + const hasReachedEnd = + Math.abs( + element.scrollHeight - + element.clientHeight - + element.scrollTop, + ) < 1; + + if (hasReachedEnd && value?.pageInfo.nextCursor) { + handleFetch({ + cursor: value.pageInfo.nextCursor, + prev: value.items, + }); + } + }, + 'data-testid': 'owner-picker-listbox', + }} /> diff --git a/yarn.lock b/yarn.lock index f91790c2a5..beab34f402 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5823,6 +5823,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 + "@react-hookz/web": ^23.0.0 "@testing-library/dom": ^8.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 @@ -13863,6 +13864,22 @@ __metadata: languageName: node linkType: hard +"@react-hookz/web@npm:^23.0.0": + version: 23.0.0 + resolution: "@react-hookz/web@npm:23.0.0" + dependencies: + "@react-hookz/deep-equal": ^1.0.4 + peerDependencies: + js-cookie: ^3.0.1 + react: ^16.8 || ^17 || ^18 + react-dom: ^16.8 || ^17 || ^18 + peerDependenciesMeta: + js-cookie: + optional: true + checksum: 230bff62291bcafa65e0b9adcc3f0769fd63fabc226c77149e7797d1ea67362e9ad581ceff3cdfe2949698798d2deefb223c05bdfed1e465b5d92298d48cf3e5 + languageName: node + linkType: hard + "@remix-run/router@npm:1.3.2": version: 1.3.2 resolution: "@remix-run/router@npm:1.3.2" From cb4c15989b6bfee4903a1881df56bda4c2dcecdf Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Tue, 25 Apr 2023 23:03:31 +0200 Subject: [PATCH 040/213] catalog-react: add EntityOwnerPicker changeset Signed-off-by: Vincenzo Scamporlino --- .changeset/little-boats-think.md | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 .changeset/little-boats-think.md diff --git a/.changeset/little-boats-think.md b/.changeset/little-boats-think.md new file mode 100644 index 0000000000..96bf9685e5 --- /dev/null +++ b/.changeset/little-boats-think.md @@ -0,0 +1,9 @@ +--- +'@backstage/plugin-catalog-react': minor +--- + +`EntityOwnerPicker` now loads entities asynchronously + +**BREAKING**: In order to improve the performance of the component, the users and groups displayed by `EntityOwnerPicker` aren't inferred +anymore by the entities available in the `EntityListContext` and are not affected by the filters applied to the `EntityListContext`. +Instead, the entities are displayed in batches, loaded asynchronously on scroll and filtered server side. From a2f46987f7729cd1966eaa7a018d6d263941112f Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Tue, 25 Apr 2023 23:52:00 +0200 Subject: [PATCH 041/213] catalog-react: hide EntityOwnerPicker if user or group kind is selected Signed-off-by: Vincenzo Scamporlino --- .../components/EntityOwnerPicker/EntityOwnerPicker.tsx | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/plugins/catalog-react/src/components/EntityOwnerPicker/EntityOwnerPicker.tsx b/plugins/catalog-react/src/components/EntityOwnerPicker/EntityOwnerPicker.tsx index e5ca1b86f4..7eae97b73a 100644 --- a/plugins/catalog-react/src/components/EntityOwnerPicker/EntityOwnerPicker.tsx +++ b/plugins/catalog-react/src/components/EntityOwnerPicker/EntityOwnerPicker.tsx @@ -119,6 +119,14 @@ export const EntityOwnerPicker = () => { }); }, [selectedOwners, updateFilters]); + if ( + ['user', 'group'].includes( + filters.kind?.value.toLocaleLowerCase('en-US') || '', + ) + ) { + return null; + } + return ( From 85b6e588ebabd850ac8e149cf92305ca70f64479 Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Thu, 27 Apr 2023 15:20:04 +0200 Subject: [PATCH 042/213] Update .changeset/little-boats-think.md Co-authored-by: Aramis <34432188+sennyeya@users.noreply.github.com> Signed-off-by: Vincenzo Scamporlino --- .changeset/little-boats-think.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/little-boats-think.md b/.changeset/little-boats-think.md index 96bf9685e5..a17cee4ec7 100644 --- a/.changeset/little-boats-think.md +++ b/.changeset/little-boats-think.md @@ -5,5 +5,5 @@ `EntityOwnerPicker` now loads entities asynchronously **BREAKING**: In order to improve the performance of the component, the users and groups displayed by `EntityOwnerPicker` aren't inferred -anymore by the entities available in the `EntityListContext` and are not affected by the filters applied to the `EntityListContext`. +anymore by the entities available in the `EntityListContext` and will no longer react to changes in the filters of `EntityListContext`. Instead, the entities are displayed in batches, loaded asynchronously on scroll and filtered server side. From 3648a4ebb86796f74bb319158ce6f160dcd6c819 Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Mon, 15 May 2023 14:53:43 +0200 Subject: [PATCH 043/213] catalog-react: humanize display selected entities Signed-off-by: Vincenzo Scamporlino --- .../EntityOwnerPicker.test.tsx | 74 ++++++++++++++++++- .../EntityOwnerPicker/EntityOwnerPicker.tsx | 58 ++++++++++++++- 2 files changed, 127 insertions(+), 5 deletions(-) diff --git a/plugins/catalog-react/src/components/EntityOwnerPicker/EntityOwnerPicker.test.tsx b/plugins/catalog-react/src/components/EntityOwnerPicker/EntityOwnerPicker.test.tsx index 86101d3579..e5497d022a 100644 --- a/plugins/catalog-react/src/components/EntityOwnerPicker/EntityOwnerPicker.test.tsx +++ b/plugins/catalog-react/src/components/EntityOwnerPicker/EntityOwnerPicker.test.tsx @@ -111,8 +111,12 @@ const ownerEntitiesBatch2: Entity[] = [ const mockedQueryEntities: jest.MockedFn = jest.fn(); +const mockedGetEntitiesByRef: jest.MockedFn = + jest.fn(); + const mockCatalogApi: Partial = { queryEntities: mockedQueryEntities, + getEntitiesByRefs: mockedGetEntitiesByRef, }; const mockErrorApi = new MockErrorApi(); @@ -146,7 +150,7 @@ describe('', () => { }); }); - it('renders all owners', async () => { + it('renders all users and groups', async () => { await renderWithEffects( @@ -171,6 +175,7 @@ describe('', () => { }); expect(mockedQueryEntities).toHaveBeenCalledTimes(1); + expect(mockedGetEntitiesByRef).not.toHaveBeenCalled(); fireEvent.scroll(screen.getByTestId('owner-picker-listbox')); @@ -205,11 +210,71 @@ describe('', () => { , ); + expect(mockedGetEntitiesByRef).toHaveBeenCalledWith({ + entityRefs: ['another-owner'], + }); expect(updateFilters).toHaveBeenLastCalledWith({ owners: new EntityOwnerFilter(['group:default/another-owner']), }); }); + it('should display the selected owners as humanized entities', async () => { + const updateFilters = jest.fn(); + const queryParameters = { owners: ['another-owner'] }; + + mockedGetEntitiesByRef.mockResolvedValue({ + items: [ + { + metadata: { + name: 'another-owner', + title: 'Beautiful display name', + namespace: 'default', + }, + apiVersion: '1', + kind: 'group', + }, + ], + }); + await renderWithEffects( + + + + + , + ); + + await waitFor(() => + expect( + screen.getByRole('button', { + name: 'Beautiful display name', + }), + ).toBeInTheDocument(), + ); + + expect(mockedGetEntitiesByRef).toHaveBeenCalledWith({ + entityRefs: ['another-owner'], + }); + + fireEvent.click(screen.getByTestId('owner-picker-expand')); + await waitFor(() => screen.getByText('Some Owner 2')); + fireEvent.click(screen.getByText('Some Owner 2')); + + expect(mockedGetEntitiesByRef).toHaveBeenCalledTimes(1); + + await waitFor(() => + expect( + screen.getByRole('button', { + name: 'Some Owner 2', + }), + ).toBeInTheDocument(), + ); + }); + it('adds owners to filters', async () => { const updateFilters = jest.fn(); await renderWithEffects( @@ -223,6 +288,7 @@ describe('', () => { , ); + expect(mockedGetEntitiesByRef).not.toHaveBeenCalled(); expect(updateFilters).toHaveBeenLastCalledWith({ owners: undefined, }); @@ -250,6 +316,9 @@ describe('', () => { , ); + expect(mockedGetEntitiesByRef).toHaveBeenCalledWith({ + entityRefs: ['group:default/some-owner'], + }); expect(updateFilters).toHaveBeenLastCalledWith({ owners: new EntityOwnerFilter(['group:default/some-owner']), }); @@ -279,6 +348,9 @@ describe('', () => { , ); + expect(mockedGetEntitiesByRef).toHaveBeenCalledWith({ + entityRefs: ['team-a'], + }); expect(updateFilters).toHaveBeenLastCalledWith({ owners: new EntityOwnerFilter(['group:default/team-a']), }); diff --git a/plugins/catalog-react/src/components/EntityOwnerPicker/EntityOwnerPicker.tsx b/plugins/catalog-react/src/components/EntityOwnerPicker/EntityOwnerPicker.tsx index 7eae97b73a..2b85b49434 100644 --- a/plugins/catalog-react/src/components/EntityOwnerPicker/EntityOwnerPicker.tsx +++ b/plugins/catalog-react/src/components/EntityOwnerPicker/EntityOwnerPicker.tsx @@ -26,11 +26,12 @@ import CheckBoxIcon from '@material-ui/icons/CheckBox'; import CheckBoxOutlineBlankIcon from '@material-ui/icons/CheckBoxOutlineBlank'; import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; import { Autocomplete } from '@material-ui/lab'; -import React, { useEffect, useMemo, useState } from 'react'; +import React, { useEffect, useMemo, useRef, useState } from 'react'; import { useEntityList } from '../../hooks/useEntityListProvider'; import { EntityOwnerFilter } from '../../filters'; import { useApi } from '@backstage/core-plugin-api'; import { catalogApiRef } from '../../api'; +import useAsync from 'react-use/lib/useAsync'; import useAsyncFn from 'react-use/lib/useAsyncFn'; import { useDebouncedEffect } from '@react-hookz/web'; import PersonIcon from '@material-ui/icons/Person'; @@ -102,6 +103,8 @@ export const EntityOwnerPicker = () => { queryParamOwners.length ? queryParamOwners : filters.owners?.values ?? [], ); + const { getEntity, setEntity } = useSelectedOwners(selectedOwners); + // Set selected owners on query parameter updates; this happens at initial page load and from // external updates to the page location. useEffect(() => { @@ -143,12 +146,26 @@ export const EntityOwnerPicker = () => { } return o === v; }} + getOptionLabel={o => { + const entity = typeof o === 'string' ? getEntity(o) || o : o; + + return typeof entity === 'string' + ? entity + : humanizeEntity(entity, entity.metadata.name); + }} onChange={(_: object, owners) => { setText(''); setSelectedOwners( - owners.map(e => - typeof e === 'string' ? e : stringifyEntityRef(e), - ), + owners.map(e => { + const entityRef = + typeof e === 'string' ? e : stringifyEntityRef(e); + + if (typeof e !== 'string') { + setEntity(e); + } + + return entityRef; + }), ); }} filterOptions={x => x} @@ -214,3 +231,36 @@ export const EntityOwnerPicker = () => { ); }; + +/** + * Hook used for storing the full entity of the specified owners + * in order to display users and group using the information contained on each entity. + * When a component is rendered for the first time, it loads the content of the entities + * specified by `initialSelectedOwnersRefs` and export the `getEntity` and `setEntity` + * utilities, used to retrieve and modify the owners. + */ +function useSelectedOwners(initialSelectedOwnersRefs: string[]) { + const allEntities = useRef>({}); + const catalogApi = useApi(catalogApiRef); + + useAsync(async () => { + if (initialSelectedOwnersRefs.length === 0) { + return; + } + const initialSelectedEntities = await catalogApi.getEntitiesByRefs({ + entityRefs: initialSelectedOwnersRefs, + }); + initialSelectedEntities.items.forEach(e => { + if (e) { + allEntities.current[stringifyEntityRef(e)] = e; + } + }); + }, []); + + return { + getEntity: (entityRef: string) => allEntities.current[entityRef], + setEntity: (entity: Entity) => { + allEntities.current[stringifyEntityRef(entity)] = entity; + }, + }; +} From a13d939781b30fca13a6a37f347a40341edaf9ab Mon Sep 17 00:00:00 2001 From: Adam Letizia <43392371+koalaty-code@users.noreply.github.com> Date: Mon, 15 May 2023 09:05:15 -0500 Subject: [PATCH 044/213] Update .changeset/silver-cars-type.md Co-authored-by: Johan Haals Signed-off-by: Adam Letizia <43392371+koalaty-code@users.noreply.github.com> --- .changeset/silver-cars-type.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.changeset/silver-cars-type.md b/.changeset/silver-cars-type.md index 126005db18..0636eccd8f 100644 --- a/.changeset/silver-cars-type.md +++ b/.changeset/silver-cars-type.md @@ -2,4 +2,6 @@ '@backstage/plugin-github-actions': minor --- -add support for GHES hosted repositories +Added support GitHub Enterprise hosted repositories. + +**BREAKING**: The `GithubActionsClient` is updated to take an `scmAuthApi` instead of the previous `githubAuthApi`. This does not require any code changes unless you construct your own `GithubActionsClient` From 37ad4a0cac50bc32f23cd583991f8d24c7cd25b1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 15 May 2023 17:56:02 +0000 Subject: [PATCH 045/213] fix(deps): update dependency qs to v6.11.2 Signed-off-by: Renovate Bot --- yarn.lock | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/yarn.lock b/yarn.lock index f91790c2a5..4756ea6253 100644 --- a/yarn.lock +++ b/yarn.lock @@ -34570,7 +34570,7 @@ __metadata: languageName: node linkType: hard -"qs@npm:6.11.0, qs@npm:^6.10.1, qs@npm:^6.10.2, qs@npm:^6.11.0, qs@npm:^6.9.1, qs@npm:^6.9.4, qs@npm:^6.9.6": +"qs@npm:6.11.0": version: 6.11.0 resolution: "qs@npm:6.11.0" dependencies: @@ -34579,6 +34579,15 @@ __metadata: languageName: node linkType: hard +"qs@npm:^6.10.1, qs@npm:^6.10.2, qs@npm:^6.11.0, qs@npm:^6.9.1, qs@npm:^6.9.4, qs@npm:^6.9.6": + version: 6.11.2 + resolution: "qs@npm:6.11.2" + dependencies: + side-channel: ^1.0.4 + checksum: e812f3c590b2262548647d62f1637b6989cc56656dc960b893fe2098d96e1bd633f36576f4cd7564dfbff9db42e17775884db96d846bebe4f37420d073ecdc0b + languageName: node + linkType: hard + "qs@npm:~6.5.2": version: 6.5.3 resolution: "qs@npm:6.5.3" From 3d3c4fe480e7314154afd9a20ad339b23a430715 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 15 May 2023 17:56:36 +0000 Subject: [PATCH 046/213] fix(deps): update docusaurus monorepo to v0.0.0-5580 Signed-off-by: Renovate Bot --- microsite/package.json | 8 +- microsite/yarn.lock | 470 ++++++++++++++++++++++++----------------- 2 files changed, 283 insertions(+), 195 deletions(-) diff --git a/microsite/package.json b/microsite/package.json index 601a234688..98301ce2d0 100644 --- a/microsite/package.json +++ b/microsite/package.json @@ -17,7 +17,7 @@ "docusaurus": "docusaurus" }, "devDependencies": { - "@docusaurus/module-type-aliases": "0.0.0-5569", + "@docusaurus/module-type-aliases": "0.0.0-5580", "@spotify/prettier-config": "^14.0.0", "@tsconfig/docusaurus": "^1.0.6", "@types/webpack-env": "^1.18.0", @@ -28,9 +28,9 @@ }, "prettier": "@spotify/prettier-config", "dependencies": { - "@docusaurus/core": "0.0.0-5569", - "@docusaurus/plugin-client-redirects": "0.0.0-5569", - "@docusaurus/preset-classic": "0.0.0-5569", + "@docusaurus/core": "0.0.0-5580", + "@docusaurus/plugin-client-redirects": "0.0.0-5580", + "@docusaurus/preset-classic": "0.0.0-5580", "@swc/core": "^1.3.46", "clsx": "^1.1.1", "docusaurus-plugin-sass": "^0.2.3", diff --git a/microsite/yarn.lock b/microsite/yarn.lock index c16f65240e..fe1c123575 100644 --- a/microsite/yarn.lock +++ b/microsite/yarn.lock @@ -1620,9 +1620,9 @@ __metadata: languageName: node linkType: hard -"@docusaurus/core@npm:0.0.0-5569": - version: 0.0.0-5569 - resolution: "@docusaurus/core@npm:0.0.0-5569" +"@docusaurus/core@npm:0.0.0-5580": + version: 0.0.0-5580 + resolution: "@docusaurus/core@npm:0.0.0-5580" dependencies: "@babel/core": ^7.20.12 "@babel/generator": ^7.21.1 @@ -1634,13 +1634,13 @@ __metadata: "@babel/runtime": ^7.21.0 "@babel/runtime-corejs3": ^7.21.0 "@babel/traverse": ^7.21.2 - "@docusaurus/cssnano-preset": 0.0.0-5569 - "@docusaurus/logger": 0.0.0-5569 - "@docusaurus/mdx-loader": 0.0.0-5569 + "@docusaurus/cssnano-preset": 0.0.0-5580 + "@docusaurus/logger": 0.0.0-5580 + "@docusaurus/mdx-loader": 0.0.0-5580 "@docusaurus/react-loadable": 5.5.2 - "@docusaurus/utils": 0.0.0-5569 - "@docusaurus/utils-common": 0.0.0-5569 - "@docusaurus/utils-validation": 0.0.0-5569 + "@docusaurus/utils": 0.0.0-5580 + "@docusaurus/utils-common": 0.0.0-5580 + "@docusaurus/utils-validation": 0.0.0-5580 "@slorber/static-site-generator-webpack-plugin": ^4.0.7 "@svgr/webpack": ^6.5.1 autoprefixer: ^10.4.13 @@ -1700,41 +1700,41 @@ __metadata: react-dom: ^16.8.4 || ^17.0.0 bin: docusaurus: bin/docusaurus.mjs - checksum: 573746ba85750381b110a98cfb529d8c961523b735c1945016bf8f79ba2cde38d08ecda88dc1be4852d8c9a49121e23ec964b05354fd6f6d26e6f31e71f175c1 + checksum: 1160559109aa834bcd3dc0210ca824ad6cbdea363951c5cba690c1882c78a7da6e1e52b8a5c35fef3bfc23f9f66e84880c354727b7987d371cac8ec6fb77d1bb languageName: node linkType: hard -"@docusaurus/cssnano-preset@npm:0.0.0-5569": - version: 0.0.0-5569 - resolution: "@docusaurus/cssnano-preset@npm:0.0.0-5569" +"@docusaurus/cssnano-preset@npm:0.0.0-5580": + version: 0.0.0-5580 + resolution: "@docusaurus/cssnano-preset@npm:0.0.0-5580" dependencies: cssnano-preset-advanced: ^5.3.10 postcss: ^8.4.21 postcss-sort-media-queries: ^4.3.0 tslib: ^2.5.0 - checksum: 11408a0f9eb1a4a83b2045a0172ef1fbf0523a99fa9d81a8efe9a3a968b449887616ad8d95b0abb55b2bf82a178193c20c0304942c4f2ba51b693b9209031204 + checksum: 4a46af1e9327d6ebbed3f0f6e60cc1ca59d5c07d39be35c42c13b0a64795b0b1565585adfca063798be79100aca425ee0c12f28a816b56686fb97726bec00f40 languageName: node linkType: hard -"@docusaurus/logger@npm:0.0.0-5569": - version: 0.0.0-5569 - resolution: "@docusaurus/logger@npm:0.0.0-5569" +"@docusaurus/logger@npm:0.0.0-5580": + version: 0.0.0-5580 + resolution: "@docusaurus/logger@npm:0.0.0-5580" dependencies: chalk: ^4.1.2 tslib: ^2.5.0 - checksum: 26be75d7180d9b9d525ce5014e1e24c69fd54d1707cabc5acc76b47e3282cfb185613fb4d27f32b5cced92fe80384c68e2d991cf4cabbecca331f570c3e10d9b + checksum: 5792b6672623b70d38871713c47ba88cc0df6c8d224c28ac58d0512b8bf1b672786cc2fa0b1a79cc045c473e1e14b5a9cce4b01e623dd252893294d6aff9d1c2 languageName: node linkType: hard -"@docusaurus/mdx-loader@npm:0.0.0-5569": - version: 0.0.0-5569 - resolution: "@docusaurus/mdx-loader@npm:0.0.0-5569" +"@docusaurus/mdx-loader@npm:0.0.0-5580": + version: 0.0.0-5580 + resolution: "@docusaurus/mdx-loader@npm:0.0.0-5580" dependencies: "@babel/parser": ^7.21.2 "@babel/traverse": ^7.21.2 - "@docusaurus/logger": 0.0.0-5569 - "@docusaurus/utils": 0.0.0-5569 - "@docusaurus/utils-validation": 0.0.0-5569 + "@docusaurus/logger": 0.0.0-5580 + "@docusaurus/utils": 0.0.0-5580 + "@docusaurus/utils-validation": 0.0.0-5580 "@mdx-js/mdx": ^2.1.5 escape-html: ^1.0.3 estree-util-value-to-estree: ^2.1.0 @@ -1744,6 +1744,7 @@ __metadata: image-size: ^1.0.2 mdast-util-mdx: ^2.0.0 mdast-util-to-string: ^3.0.0 + rehype-raw: ^6.1.1 remark-comment: ^1.0.0 remark-directive: ^2.0.1 remark-emoji: ^2.2.0 @@ -1757,16 +1758,16 @@ __metadata: peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: bcf3b58ea3840d648ddc81c090c9905d559f642d8dc495f3fa86b377ae0bdabb6e1486ae2b258efa459a8bcf1da729a4a3a0c144f0de5dc083155b6d5c83099c + checksum: b32812e0bca91a29761fda742a790f67077bb7e8860e20e83f009e297ca49017192fa14051ab82f1a3e66800de9e5a0b561b32ce2dffb4eecc0aee48116d3490 languageName: node linkType: hard -"@docusaurus/module-type-aliases@npm:0.0.0-5569": - version: 0.0.0-5569 - resolution: "@docusaurus/module-type-aliases@npm:0.0.0-5569" +"@docusaurus/module-type-aliases@npm:0.0.0-5580": + version: 0.0.0-5580 + resolution: "@docusaurus/module-type-aliases@npm:0.0.0-5580" dependencies: "@docusaurus/react-loadable": 5.5.2 - "@docusaurus/types": 0.0.0-5569 + "@docusaurus/types": 0.0.0-5580 "@types/history": ^4.7.11 "@types/react": "*" "@types/react-router-config": "*" @@ -1776,19 +1777,19 @@ __metadata: peerDependencies: react: "*" react-dom: "*" - checksum: 08168317c606e44f8ead775bfc23feaeb3a03178a19a07504130a32cbf189926c08ef40cdc4f00a6df0983383ca0145a42df9112451b15a19067d8b6b10d5f89 + checksum: b5b3544f2f2d395c1d406a1b3f03f719aee3aa3fd7603c54af3b09c4fb8bb153cf2ee6697bc9cfc9fb2550a11a3e474a52c9f2c132924e2be60662ffc6379ace languageName: node linkType: hard -"@docusaurus/plugin-client-redirects@npm:0.0.0-5569": - version: 0.0.0-5569 - resolution: "@docusaurus/plugin-client-redirects@npm:0.0.0-5569" +"@docusaurus/plugin-client-redirects@npm:0.0.0-5580": + version: 0.0.0-5580 + resolution: "@docusaurus/plugin-client-redirects@npm:0.0.0-5580" dependencies: - "@docusaurus/core": 0.0.0-5569 - "@docusaurus/logger": 0.0.0-5569 - "@docusaurus/utils": 0.0.0-5569 - "@docusaurus/utils-common": 0.0.0-5569 - "@docusaurus/utils-validation": 0.0.0-5569 + "@docusaurus/core": 0.0.0-5580 + "@docusaurus/logger": 0.0.0-5580 + "@docusaurus/utils": 0.0.0-5580 + "@docusaurus/utils-common": 0.0.0-5580 + "@docusaurus/utils-validation": 0.0.0-5580 eta: ^2.0.1 fs-extra: ^11.1.0 lodash: ^4.17.21 @@ -1796,21 +1797,21 @@ __metadata: peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: f082956089fc889ea67b89c5c19ad6cd0bc9bb35b663a701f05905786938b1302b8667c2b6d0354bcf9efd35496a5920e1871b488fbc6285d0e36cfe3187e84e + checksum: 7414d2026446862505d0c679ad3757107f28100ea76309d2a024ebe78865f2fcf3e3b85c3117361142e319362b5a5b22e6bce968763fdfd0741b6a60d2eb3f4b languageName: node linkType: hard -"@docusaurus/plugin-content-blog@npm:0.0.0-5569": - version: 0.0.0-5569 - resolution: "@docusaurus/plugin-content-blog@npm:0.0.0-5569" +"@docusaurus/plugin-content-blog@npm:0.0.0-5580": + version: 0.0.0-5580 + resolution: "@docusaurus/plugin-content-blog@npm:0.0.0-5580" dependencies: - "@docusaurus/core": 0.0.0-5569 - "@docusaurus/logger": 0.0.0-5569 - "@docusaurus/mdx-loader": 0.0.0-5569 - "@docusaurus/types": 0.0.0-5569 - "@docusaurus/utils": 0.0.0-5569 - "@docusaurus/utils-common": 0.0.0-5569 - "@docusaurus/utils-validation": 0.0.0-5569 + "@docusaurus/core": 0.0.0-5580 + "@docusaurus/logger": 0.0.0-5580 + "@docusaurus/mdx-loader": 0.0.0-5580 + "@docusaurus/types": 0.0.0-5580 + "@docusaurus/utils": 0.0.0-5580 + "@docusaurus/utils-common": 0.0.0-5580 + "@docusaurus/utils-validation": 0.0.0-5580 cheerio: ^1.0.0-rc.12 feed: ^4.2.2 fs-extra: ^11.1.0 @@ -1823,21 +1824,21 @@ __metadata: peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: b9eef1200e1b9bf1cfa7c4d4cb62b7344306d3a096c0cbfc36afd4b973a940b1bf9d6dc62124a0028bbd466313c7ee219444ebe2856588748d2fc33d1f48ae80 + checksum: 0c5d37fa84298ce12b2a0f5c1dea1ee7d72d4b28c545fd081f3c3e5f93f15a980d877dcf88718aa1f4b8a03abf3d0c8c0df10d0a2ef22aac7a8a96d2786f91c2 languageName: node linkType: hard -"@docusaurus/plugin-content-docs@npm:0.0.0-5569": - version: 0.0.0-5569 - resolution: "@docusaurus/plugin-content-docs@npm:0.0.0-5569" +"@docusaurus/plugin-content-docs@npm:0.0.0-5580": + version: 0.0.0-5580 + resolution: "@docusaurus/plugin-content-docs@npm:0.0.0-5580" dependencies: - "@docusaurus/core": 0.0.0-5569 - "@docusaurus/logger": 0.0.0-5569 - "@docusaurus/mdx-loader": 0.0.0-5569 - "@docusaurus/module-type-aliases": 0.0.0-5569 - "@docusaurus/types": 0.0.0-5569 - "@docusaurus/utils": 0.0.0-5569 - "@docusaurus/utils-validation": 0.0.0-5569 + "@docusaurus/core": 0.0.0-5580 + "@docusaurus/logger": 0.0.0-5580 + "@docusaurus/mdx-loader": 0.0.0-5580 + "@docusaurus/module-type-aliases": 0.0.0-5580 + "@docusaurus/types": 0.0.0-5580 + "@docusaurus/utils": 0.0.0-5580 + "@docusaurus/utils-validation": 0.0.0-5580 "@types/react-router-config": ^5.0.6 combine-promises: ^1.1.0 fs-extra: ^11.1.0 @@ -1850,133 +1851,133 @@ __metadata: peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 544d51dbb6c9037916aa8e3ed493624029ffdac0d0da70cfdb74f1d431a8da071eeeb0d567be6f63d48f9922f1594f08f950478a4ea427fae8001ff0b4ac5d83 + checksum: fa58801bf0cebf055ed11adbadc3f27f7ed0ddb95174ab60bab76a21f759dc7abdfdd15f32141f7e259090c456634ee2556ac9a7daaaf7f5f6e3666d9f247d00 languageName: node linkType: hard -"@docusaurus/plugin-content-pages@npm:0.0.0-5569": - version: 0.0.0-5569 - resolution: "@docusaurus/plugin-content-pages@npm:0.0.0-5569" +"@docusaurus/plugin-content-pages@npm:0.0.0-5580": + version: 0.0.0-5580 + resolution: "@docusaurus/plugin-content-pages@npm:0.0.0-5580" dependencies: - "@docusaurus/core": 0.0.0-5569 - "@docusaurus/mdx-loader": 0.0.0-5569 - "@docusaurus/types": 0.0.0-5569 - "@docusaurus/utils": 0.0.0-5569 - "@docusaurus/utils-validation": 0.0.0-5569 + "@docusaurus/core": 0.0.0-5580 + "@docusaurus/mdx-loader": 0.0.0-5580 + "@docusaurus/types": 0.0.0-5580 + "@docusaurus/utils": 0.0.0-5580 + "@docusaurus/utils-validation": 0.0.0-5580 fs-extra: ^11.1.0 tslib: ^2.5.0 webpack: ^5.76.0 peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 16fa680c069d57d9d299ef515487a773c5b89d605cfe5b843392a7bce5e59b539b1855d7e0f2e11878b3021038bff6468b5f4adb9af7dc06884d7207772c2f95 + checksum: 42bf814d9bf5540b8b2f8045f1577c49d3fca4a85069865695ff5dd9fa3f935283f9d46f920c4dd0a28190cf3b342d432b0985636bae9f05280835f73aec8c87 languageName: node linkType: hard -"@docusaurus/plugin-debug@npm:0.0.0-5569": - version: 0.0.0-5569 - resolution: "@docusaurus/plugin-debug@npm:0.0.0-5569" +"@docusaurus/plugin-debug@npm:0.0.0-5580": + version: 0.0.0-5580 + resolution: "@docusaurus/plugin-debug@npm:0.0.0-5580" dependencies: - "@docusaurus/core": 0.0.0-5569 - "@docusaurus/types": 0.0.0-5569 - "@docusaurus/utils": 0.0.0-5569 + "@docusaurus/core": 0.0.0-5580 + "@docusaurus/types": 0.0.0-5580 + "@docusaurus/utils": 0.0.0-5580 fs-extra: ^11.1.0 react-json-view: ^1.21.3 tslib: ^2.5.0 peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 0e3b8f5a92bc2b2ab193d76be6174b521238da7b4627775a852a4b4ff8690af28ab4586adbb84fc03abc6da276efc7474eed9350577b457e532defeb638d3184 + checksum: dc58659adab3c859daa2e0dfc0b5b588d490a4d2bb313dcfdc9e92d559d0c4145c686b001805ad44a1f2a0f55f87524637a34844a4438cfeec479a2c24ec1c4d languageName: node linkType: hard -"@docusaurus/plugin-google-analytics@npm:0.0.0-5569": - version: 0.0.0-5569 - resolution: "@docusaurus/plugin-google-analytics@npm:0.0.0-5569" +"@docusaurus/plugin-google-analytics@npm:0.0.0-5580": + version: 0.0.0-5580 + resolution: "@docusaurus/plugin-google-analytics@npm:0.0.0-5580" dependencies: - "@docusaurus/core": 0.0.0-5569 - "@docusaurus/types": 0.0.0-5569 - "@docusaurus/utils-validation": 0.0.0-5569 + "@docusaurus/core": 0.0.0-5580 + "@docusaurus/types": 0.0.0-5580 + "@docusaurus/utils-validation": 0.0.0-5580 tslib: ^2.5.0 peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: a3e55d3a616009db499ca61493f9cf308c8ae012ec1ff680bff20c3b0b486f8d5d9552fd5c3d7b198e6c72d8e13ace7808d978bd8d56496953d2fd51d5ce0c32 + checksum: f66a737a2b8b08648f28a279784e527fff34e2dba6f3022ec83b01a7f1781bfa0f208fac1db1fc919c1a01d405755c0816304cf4912e7b434b3924d5a968e6b0 languageName: node linkType: hard -"@docusaurus/plugin-google-gtag@npm:0.0.0-5569": - version: 0.0.0-5569 - resolution: "@docusaurus/plugin-google-gtag@npm:0.0.0-5569" +"@docusaurus/plugin-google-gtag@npm:0.0.0-5580": + version: 0.0.0-5580 + resolution: "@docusaurus/plugin-google-gtag@npm:0.0.0-5580" dependencies: - "@docusaurus/core": 0.0.0-5569 - "@docusaurus/types": 0.0.0-5569 - "@docusaurus/utils-validation": 0.0.0-5569 + "@docusaurus/core": 0.0.0-5580 + "@docusaurus/types": 0.0.0-5580 + "@docusaurus/utils-validation": 0.0.0-5580 "@types/gtag.js": ^0.0.12 tslib: ^2.5.0 peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: d0a7f58bea6d5bfd786120ab6c75ab10a4d67bae1d60aadedba649a516f2f9e49237a96a7764f964c79084ae500b9520761cbf6aab60bd5e43bb976f04dd3194 + checksum: 6b05e7c2a8e4d757660acca1131a0e3abfd21c5544a31e93bd08ff9c75deb5f3b131ed0e47283bbc2f102e00947ab7a64ee4d5a53f300e98fc82ec13c4a6eda1 languageName: node linkType: hard -"@docusaurus/plugin-google-tag-manager@npm:0.0.0-5569": - version: 0.0.0-5569 - resolution: "@docusaurus/plugin-google-tag-manager@npm:0.0.0-5569" +"@docusaurus/plugin-google-tag-manager@npm:0.0.0-5580": + version: 0.0.0-5580 + resolution: "@docusaurus/plugin-google-tag-manager@npm:0.0.0-5580" dependencies: - "@docusaurus/core": 0.0.0-5569 - "@docusaurus/types": 0.0.0-5569 - "@docusaurus/utils-validation": 0.0.0-5569 + "@docusaurus/core": 0.0.0-5580 + "@docusaurus/types": 0.0.0-5580 + "@docusaurus/utils-validation": 0.0.0-5580 tslib: ^2.5.0 peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: acafad7eea5ba06c62addcef4f3cfaa6c43193827ec4b6c2d39ed2799df5301defa8ac8c73d49e35c328bd118c78412745f088764d97eac00da090be8e7906e5 + checksum: 8904b150b2faa05dc49fd957ca8c392605e53073d031dfedb098be2abae924c3faf4f5e26ecfea91fe452695699801de9882a85a4371a1a35ca05fd57de232ae languageName: node linkType: hard -"@docusaurus/plugin-sitemap@npm:0.0.0-5569": - version: 0.0.0-5569 - resolution: "@docusaurus/plugin-sitemap@npm:0.0.0-5569" +"@docusaurus/plugin-sitemap@npm:0.0.0-5580": + version: 0.0.0-5580 + resolution: "@docusaurus/plugin-sitemap@npm:0.0.0-5580" dependencies: - "@docusaurus/core": 0.0.0-5569 - "@docusaurus/logger": 0.0.0-5569 - "@docusaurus/types": 0.0.0-5569 - "@docusaurus/utils": 0.0.0-5569 - "@docusaurus/utils-common": 0.0.0-5569 - "@docusaurus/utils-validation": 0.0.0-5569 + "@docusaurus/core": 0.0.0-5580 + "@docusaurus/logger": 0.0.0-5580 + "@docusaurus/types": 0.0.0-5580 + "@docusaurus/utils": 0.0.0-5580 + "@docusaurus/utils-common": 0.0.0-5580 + "@docusaurus/utils-validation": 0.0.0-5580 fs-extra: ^11.1.0 sitemap: ^7.1.1 tslib: ^2.5.0 peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 53fd5944a1cfbbe252e3f4398acf8aea3605ca3c5fb9ec48700ce6c162744bae541ccecd1d71e884777dfc2e98c6fa9a01b0f98829e6018e59003c3d4f4a1612 + checksum: 4243cf4ed649d8e9a29b122ce23f1a6194cc5d7fc244e33326320315d8ff2756b18b9d85a0f0d49df33b2e68224c1b747e87ad5fa9944e7572bc761f641c5b77 languageName: node linkType: hard -"@docusaurus/preset-classic@npm:0.0.0-5569": - version: 0.0.0-5569 - resolution: "@docusaurus/preset-classic@npm:0.0.0-5569" +"@docusaurus/preset-classic@npm:0.0.0-5580": + version: 0.0.0-5580 + resolution: "@docusaurus/preset-classic@npm:0.0.0-5580" dependencies: - "@docusaurus/core": 0.0.0-5569 - "@docusaurus/plugin-content-blog": 0.0.0-5569 - "@docusaurus/plugin-content-docs": 0.0.0-5569 - "@docusaurus/plugin-content-pages": 0.0.0-5569 - "@docusaurus/plugin-debug": 0.0.0-5569 - "@docusaurus/plugin-google-analytics": 0.0.0-5569 - "@docusaurus/plugin-google-gtag": 0.0.0-5569 - "@docusaurus/plugin-google-tag-manager": 0.0.0-5569 - "@docusaurus/plugin-sitemap": 0.0.0-5569 - "@docusaurus/theme-classic": 0.0.0-5569 - "@docusaurus/theme-common": 0.0.0-5569 - "@docusaurus/theme-search-algolia": 0.0.0-5569 - "@docusaurus/types": 0.0.0-5569 + "@docusaurus/core": 0.0.0-5580 + "@docusaurus/plugin-content-blog": 0.0.0-5580 + "@docusaurus/plugin-content-docs": 0.0.0-5580 + "@docusaurus/plugin-content-pages": 0.0.0-5580 + "@docusaurus/plugin-debug": 0.0.0-5580 + "@docusaurus/plugin-google-analytics": 0.0.0-5580 + "@docusaurus/plugin-google-gtag": 0.0.0-5580 + "@docusaurus/plugin-google-tag-manager": 0.0.0-5580 + "@docusaurus/plugin-sitemap": 0.0.0-5580 + "@docusaurus/theme-classic": 0.0.0-5580 + "@docusaurus/theme-common": 0.0.0-5580 + "@docusaurus/theme-search-algolia": 0.0.0-5580 + "@docusaurus/types": 0.0.0-5580 peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: a20013db1bd1c77e6fc2b901326d62f3003b6f6e6191f26aae6968cc2402837c0e84cc54571849d2af811fdae74d9359c0e96775d61b9f3efbbe881898e7f9a3 + checksum: 3aa48aea40e33c2c7adcad54918e117b1f1d917eba110889d85a273e82b4bbf0d73d9e5bb8c5aaadd846ec341981bbe701014cbd93ddf55c83245ce1bc4a56a6 languageName: node linkType: hard @@ -1992,22 +1993,22 @@ __metadata: languageName: node linkType: hard -"@docusaurus/theme-classic@npm:0.0.0-5569": - version: 0.0.0-5569 - resolution: "@docusaurus/theme-classic@npm:0.0.0-5569" +"@docusaurus/theme-classic@npm:0.0.0-5580": + version: 0.0.0-5580 + resolution: "@docusaurus/theme-classic@npm:0.0.0-5580" dependencies: - "@docusaurus/core": 0.0.0-5569 - "@docusaurus/mdx-loader": 0.0.0-5569 - "@docusaurus/module-type-aliases": 0.0.0-5569 - "@docusaurus/plugin-content-blog": 0.0.0-5569 - "@docusaurus/plugin-content-docs": 0.0.0-5569 - "@docusaurus/plugin-content-pages": 0.0.0-5569 - "@docusaurus/theme-common": 0.0.0-5569 - "@docusaurus/theme-translations": 0.0.0-5569 - "@docusaurus/types": 0.0.0-5569 - "@docusaurus/utils": 0.0.0-5569 - "@docusaurus/utils-common": 0.0.0-5569 - "@docusaurus/utils-validation": 0.0.0-5569 + "@docusaurus/core": 0.0.0-5580 + "@docusaurus/mdx-loader": 0.0.0-5580 + "@docusaurus/module-type-aliases": 0.0.0-5580 + "@docusaurus/plugin-content-blog": 0.0.0-5580 + "@docusaurus/plugin-content-docs": 0.0.0-5580 + "@docusaurus/plugin-content-pages": 0.0.0-5580 + "@docusaurus/theme-common": 0.0.0-5580 + "@docusaurus/theme-translations": 0.0.0-5580 + "@docusaurus/types": 0.0.0-5580 + "@docusaurus/utils": 0.0.0-5580 + "@docusaurus/utils-common": 0.0.0-5580 + "@docusaurus/utils-validation": 0.0.0-5580 "@mdx-js/react": ^2.1.5 clsx: ^1.2.1 copy-text-to-clipboard: ^3.0.1 @@ -2024,21 +2025,21 @@ __metadata: peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: ee25082a4abc0d812cc54ee1bea642766f903cfa47d28c6a6efbc53cdaacf67bee594a4745c7ae97fe3ba6ddb136de36dd0c8cda2c310c5b40c9023bee70fcbb + checksum: 6a8f99d5143017d4754601fbf6487b697dc77945f730763917578abe0a1ef694607f888d824146aef86fdc2a620f0ddbd4925a23dcfc15b57d8338c1de73d526 languageName: node linkType: hard -"@docusaurus/theme-common@npm:0.0.0-5569": - version: 0.0.0-5569 - resolution: "@docusaurus/theme-common@npm:0.0.0-5569" +"@docusaurus/theme-common@npm:0.0.0-5580": + version: 0.0.0-5580 + resolution: "@docusaurus/theme-common@npm:0.0.0-5580" dependencies: - "@docusaurus/mdx-loader": 0.0.0-5569 - "@docusaurus/module-type-aliases": 0.0.0-5569 - "@docusaurus/plugin-content-blog": 0.0.0-5569 - "@docusaurus/plugin-content-docs": 0.0.0-5569 - "@docusaurus/plugin-content-pages": 0.0.0-5569 - "@docusaurus/utils": 0.0.0-5569 - "@docusaurus/utils-common": 0.0.0-5569 + "@docusaurus/mdx-loader": 0.0.0-5580 + "@docusaurus/module-type-aliases": 0.0.0-5580 + "@docusaurus/plugin-content-blog": 0.0.0-5580 + "@docusaurus/plugin-content-docs": 0.0.0-5580 + "@docusaurus/plugin-content-pages": 0.0.0-5580 + "@docusaurus/utils": 0.0.0-5580 + "@docusaurus/utils-common": 0.0.0-5580 "@types/history": ^4.7.11 "@types/react": "*" "@types/react-router-config": "*" @@ -2051,22 +2052,22 @@ __metadata: peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 26a2d7dd6fd8b97e67db3bc093fcb9ce6f14d561aeccf94c3334d18a9a2900483dcb0ec4bb28d31e910bea459f20e4445207d5156c9cc02bd72601eb0256e3cc + checksum: 99524cb36a520568f63140734daaea8d56b35c0c8de3c36cb0102a93a0714f31a68aa5302607b9113a68e1b9fb7d73fd53ac80aa82ce48bf6f2d9e304ce21da2 languageName: node linkType: hard -"@docusaurus/theme-search-algolia@npm:0.0.0-5569": - version: 0.0.0-5569 - resolution: "@docusaurus/theme-search-algolia@npm:0.0.0-5569" +"@docusaurus/theme-search-algolia@npm:0.0.0-5580": + version: 0.0.0-5580 + resolution: "@docusaurus/theme-search-algolia@npm:0.0.0-5580" dependencies: "@docsearch/react": ^3.3.3 - "@docusaurus/core": 0.0.0-5569 - "@docusaurus/logger": 0.0.0-5569 - "@docusaurus/plugin-content-docs": 0.0.0-5569 - "@docusaurus/theme-common": 0.0.0-5569 - "@docusaurus/theme-translations": 0.0.0-5569 - "@docusaurus/utils": 0.0.0-5569 - "@docusaurus/utils-validation": 0.0.0-5569 + "@docusaurus/core": 0.0.0-5580 + "@docusaurus/logger": 0.0.0-5580 + "@docusaurus/plugin-content-docs": 0.0.0-5580 + "@docusaurus/theme-common": 0.0.0-5580 + "@docusaurus/theme-translations": 0.0.0-5580 + "@docusaurus/utils": 0.0.0-5580 + "@docusaurus/utils-validation": 0.0.0-5580 algoliasearch: ^4.15.0 algoliasearch-helper: ^3.12.0 clsx: ^1.2.1 @@ -2078,23 +2079,23 @@ __metadata: peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 16178b7b9278c91eaedbb1629192dc2255939de6f509b721305c4c1795283e0fd4f859b305ce051ec5efdbe71884ceede6239445916b60ebec1858e3b5161d8f + checksum: efc6054ad979b9fde43bec8befeb41c0f9ca609832b51e4da42fdcdfd7e4ee599fd3e6949c576d9ff348c0ffd044a4dbb07638a1990f57586f493ba394369c96 languageName: node linkType: hard -"@docusaurus/theme-translations@npm:0.0.0-5569": - version: 0.0.0-5569 - resolution: "@docusaurus/theme-translations@npm:0.0.0-5569" +"@docusaurus/theme-translations@npm:0.0.0-5580": + version: 0.0.0-5580 + resolution: "@docusaurus/theme-translations@npm:0.0.0-5580" dependencies: fs-extra: ^11.1.0 tslib: ^2.5.0 - checksum: 695f94ddc66d54b649042f0fb0a88b692613d10898ee3306c6c9b52340373493ac9bcceec9263332454d7c9179339517e40b083e949510f9e48ec834bc61fbb3 + checksum: 1555956d2a7cf3122ded374937559ab19e6a6620fd0910d6bdbf48be78a10e595cfd9a0b9157c129f36f0bfae4297f07991f071a394c87cb9d2facee04597dd2 languageName: node linkType: hard -"@docusaurus/types@npm:0.0.0-5569": - version: 0.0.0-5569 - resolution: "@docusaurus/types@npm:0.0.0-5569" +"@docusaurus/types@npm:0.0.0-5580": + version: 0.0.0-5580 + resolution: "@docusaurus/types@npm:0.0.0-5580" dependencies: "@types/history": ^4.7.11 "@types/react": "*" @@ -2107,13 +2108,13 @@ __metadata: peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 956b7af3a75b3632d1ff330d018353b38b22b3f4af8b39f452fcde33d74c70312dadd3e3bb40e04ecbe02e2462a67bfcbd4ef631462a9c710616c83186930b69 + checksum: 5df67f562c5d516eb020ecf63e6343e1d6d18e2716b1b530a24c5d63b48229623222861c1a69f0e4715c34a768f7c05599340f1af18ca1259709467fb1149af9 languageName: node linkType: hard -"@docusaurus/utils-common@npm:0.0.0-5569": - version: 0.0.0-5569 - resolution: "@docusaurus/utils-common@npm:0.0.0-5569" +"@docusaurus/utils-common@npm:0.0.0-5580": + version: 0.0.0-5580 + resolution: "@docusaurus/utils-common@npm:0.0.0-5580" dependencies: tslib: ^2.5.0 peerDependencies: @@ -2121,28 +2122,28 @@ __metadata: peerDependenciesMeta: "@docusaurus/types": optional: true - checksum: 7d98e31beea34be91de7fdc971033439e412f535617707c79c4d2c0653c769ff4ce7521bd87f038811ccbae3b1d5c0e5d26eab9935ee8bc3515b926cbe175365 + checksum: 238b2f12607834164fa82f9a3154703b75609719888cf96f06c9f70c17ab76a46babcfd66dce4f2722ecaaf47742a40a606101f0578f2345845fa23b6f262b5d languageName: node linkType: hard -"@docusaurus/utils-validation@npm:0.0.0-5569": - version: 0.0.0-5569 - resolution: "@docusaurus/utils-validation@npm:0.0.0-5569" +"@docusaurus/utils-validation@npm:0.0.0-5580": + version: 0.0.0-5580 + resolution: "@docusaurus/utils-validation@npm:0.0.0-5580" dependencies: - "@docusaurus/logger": 0.0.0-5569 - "@docusaurus/utils": 0.0.0-5569 + "@docusaurus/logger": 0.0.0-5580 + "@docusaurus/utils": 0.0.0-5580 joi: ^17.8.3 js-yaml: ^4.1.0 tslib: ^2.5.0 - checksum: b16730923e0d6fa627ca3e3105c152e814d540badb93f0a2ae1194672a76f8269ed48ed5c8f3259c0e0b9dfc6dc939035e0ac2e675b283ac4d414c642a95c893 + checksum: cf0602b2411738adc47f5596fd4a3076137aa754aca24a4630700dc6355fed07e9a66ec093e438fa1199d9076bebae036317d073a604e4f0666f8390ceb73b5d languageName: node linkType: hard -"@docusaurus/utils@npm:0.0.0-5569": - version: 0.0.0-5569 - resolution: "@docusaurus/utils@npm:0.0.0-5569" +"@docusaurus/utils@npm:0.0.0-5580": + version: 0.0.0-5580 + resolution: "@docusaurus/utils@npm:0.0.0-5580" dependencies: - "@docusaurus/logger": 0.0.0-5569 + "@docusaurus/logger": 0.0.0-5580 "@svgr/webpack": ^6.5.1 escape-string-regexp: ^4.0.0 file-loader: ^6.2.0 @@ -2163,7 +2164,7 @@ __metadata: peerDependenciesMeta: "@docusaurus/types": optional: true - checksum: 33e044f9b5328cf9d1b17637fa41a6138c5e18b5f3d73389bbb9f71735a273a9e27660d9a9103766406549edfa0691e2524cc84e6ebc2b0d308991df3bee0dd9 + checksum: c9b085d3724cba748b3db763f056742aace45cc58a636e23513ee6a7db781558377de5507b651b3566562fa71eebb42ac835034cdcbcc2c77edf9b4009c6a215 languageName: node linkType: hard @@ -2991,6 +2992,13 @@ __metadata: languageName: node linkType: hard +"@types/parse5@npm:^6.0.0": + version: 6.0.3 + resolution: "@types/parse5@npm:6.0.3" + checksum: ddb59ee4144af5dfcc508a8dcf32f37879d11e12559561e65788756b95b33e6f03ea027d88e1f5408f9b7bfb656bf630ace31a2169edf44151daaf8dd58df1b7 + languageName: node + linkType: hard + "@types/prop-types@npm:*": version: 15.7.5 resolution: "@types/prop-types@npm:15.7.5" @@ -3737,10 +3745,10 @@ __metadata: version: 0.0.0-use.local resolution: "backstage-microsite@workspace:." dependencies: - "@docusaurus/core": 0.0.0-5569 - "@docusaurus/module-type-aliases": 0.0.0-5569 - "@docusaurus/plugin-client-redirects": 0.0.0-5569 - "@docusaurus/preset-classic": 0.0.0-5569 + "@docusaurus/core": 0.0.0-5580 + "@docusaurus/module-type-aliases": 0.0.0-5580 + "@docusaurus/plugin-client-redirects": 0.0.0-5580 + "@docusaurus/preset-classic": 0.0.0-5580 "@spotify/prettier-config": ^14.0.0 "@swc/core": ^1.3.46 "@tsconfig/docusaurus": ^1.0.6 @@ -6132,6 +6140,21 @@ __metadata: languageName: node linkType: hard +"hast-util-from-parse5@npm:^7.0.0": + version: 7.1.2 + resolution: "hast-util-from-parse5@npm:7.1.2" + dependencies: + "@types/hast": ^2.0.0 + "@types/unist": ^2.0.0 + hastscript: ^7.0.0 + property-information: ^6.0.0 + vfile: ^5.0.0 + vfile-location: ^4.0.0 + web-namespaces: ^2.0.0 + checksum: 7b4ed5b508b1352127c6719f7b0c0880190cf9859fe54ccaf7c9228ecf623d36cef3097910b3874d2fe1aac6bf4cf45d3cc2303daac3135a05e9ade6534ddddb + languageName: node + linkType: hard + "hast-util-parse-selector@npm:^3.0.0": version: 3.1.1 resolution: "hast-util-parse-selector@npm:3.1.1" @@ -6141,6 +6164,25 @@ __metadata: languageName: node linkType: hard +"hast-util-raw@npm:^7.2.0": + version: 7.2.3 + resolution: "hast-util-raw@npm:7.2.3" + dependencies: + "@types/hast": ^2.0.0 + "@types/parse5": ^6.0.0 + hast-util-from-parse5: ^7.0.0 + hast-util-to-parse5: ^7.0.0 + html-void-elements: ^2.0.0 + parse5: ^6.0.0 + unist-util-position: ^4.0.0 + unist-util-visit: ^4.0.0 + vfile: ^5.0.0 + web-namespaces: ^2.0.0 + zwitch: ^2.0.0 + checksum: 21857eea3ffb8fd92d2d9be7793b56d0b2c40db03c4cfa14828855ae41d7c584917aa83efb7157220b2e41e25e95f81f24679ac342c35145e5f1c1d39015f81f + languageName: node + linkType: hard + "hast-util-to-estree@npm:^2.0.0": version: 2.3.2 resolution: "hast-util-to-estree@npm:2.3.2" @@ -6164,6 +6206,20 @@ __metadata: languageName: node linkType: hard +"hast-util-to-parse5@npm:^7.0.0": + version: 7.1.0 + resolution: "hast-util-to-parse5@npm:7.1.0" + dependencies: + "@types/hast": ^2.0.0 + comma-separated-tokens: ^2.0.0 + property-information: ^6.0.0 + space-separated-tokens: ^2.0.0 + web-namespaces: ^2.0.0 + zwitch: ^2.0.0 + checksum: 3a7f2175a3db599bbae7e49ba73d3e5e688e5efca7590ff50130ba108ad649f728402815d47db49146f6b94c14c934bf119915da9f6964e38802c122bcc8af6b + languageName: node + linkType: hard + "hast-util-whitespace@npm:^2.0.0": version: 2.0.1 resolution: "hast-util-whitespace@npm:2.0.1" @@ -6171,7 +6227,7 @@ __metadata: languageName: node linkType: hard -"hastscript@npm:^7.1.0": +"hastscript@npm:^7.0.0, hastscript@npm:^7.1.0": version: 7.2.0 resolution: "hastscript@npm:7.2.0" dependencies: @@ -6276,6 +6332,13 @@ __metadata: languageName: node linkType: hard +"html-void-elements@npm:^2.0.0": + version: 2.0.1 + resolution: "html-void-elements@npm:2.0.1" + checksum: 06d41f13b9d5d6e0f39861c4bec9a9196fa4906d56cd5cf6cf54ad2e52a85bf960cca2bf9600026bde16c8331db171bedba5e5a35e2e43630c8f1d497b2fb658 + languageName: node + linkType: hard + "html-webpack-plugin@npm:^5.5.0": version: 5.5.0 resolution: "html-webpack-plugin@npm:5.5.0" @@ -8735,6 +8798,13 @@ __metadata: languageName: node linkType: hard +"parse5@npm:^6.0.0": + version: 6.0.1 + resolution: "parse5@npm:6.0.1" + checksum: 7d569a176c5460897f7c8f3377eff640d54132b9be51ae8a8fa4979af940830b2b0c296ce75e5bd8f4041520aadde13170dbdec44889975f906098ea0002f4bd + languageName: node + linkType: hard + "parse5@npm:^7.0.0": version: 7.1.2 resolution: "parse5@npm:7.1.2" @@ -9901,6 +9971,17 @@ __metadata: languageName: node linkType: hard +"rehype-raw@npm:^6.1.1": + version: 6.1.1 + resolution: "rehype-raw@npm:6.1.1" + dependencies: + "@types/hast": ^2.0.0 + hast-util-raw: ^7.2.0 + unified: ^10.0.0 + checksum: a1f9d309e609f49fb1f1e06e722705f4dd2e569653a89f756eaccb33b612cf1bb511216a81d10a619d11d047afc161e4b3cb99b957df05a8ba8fdbd5843f949a + languageName: node + linkType: hard + "relateurl@npm:^0.2.7": version: 0.2.7 resolution: "relateurl@npm:0.2.7" @@ -11526,6 +11607,13 @@ __metadata: languageName: node linkType: hard +"web-namespaces@npm:^2.0.0": + version: 2.0.1 + resolution: "web-namespaces@npm:2.0.1" + checksum: b6d9f02f1a43d0ef0848a812d89c83801d5bbad57d8bb61f02eb6d7eb794c3736f6cc2e1191664bb26136594c8218ac609f4069722c6f56d9fc2d808fa9271c6 + languageName: node + linkType: hard + "webidl-conversions@npm:^3.0.0": version: 3.0.1 resolution: "webidl-conversions@npm:3.0.1" From 2da0dcea62aef213aa6830149e2c4b1c5ba09259 Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Mon, 15 May 2023 21:11:12 +0200 Subject: [PATCH 047/213] catalog-react: rollback styles Signed-off-by: Vincenzo Scamporlino --- .../EntityOwnerPicker/EntityOwnerPicker.tsx | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/plugins/catalog-react/src/components/EntityOwnerPicker/EntityOwnerPicker.tsx b/plugins/catalog-react/src/components/EntityOwnerPicker/EntityOwnerPicker.tsx index 2b85b49434..8b223c50b1 100644 --- a/plugins/catalog-react/src/components/EntityOwnerPicker/EntityOwnerPicker.tsx +++ b/plugins/catalog-react/src/components/EntityOwnerPicker/EntityOwnerPicker.tsx @@ -21,6 +21,7 @@ import { FormControlLabel, TextField, Typography, + makeStyles, } from '@material-ui/core'; import CheckBoxIcon from '@material-ui/icons/CheckBox'; import CheckBoxOutlineBlankIcon from '@material-ui/icons/CheckBoxOutlineBlank'; @@ -41,11 +42,21 @@ import { humanizeEntity } from '../EntityRefLink/humanize'; /** @public */ export type CatalogReactEntityOwnerPickerClassKey = 'input'; +const useStyles = makeStyles( + { + input: {}, + }, + { + name: 'CatalogReactEntityOwnerPicker', + }, +); + const icon = ; const checkedIcon = ; /** @public */ export const EntityOwnerPicker = () => { + const classes = useStyles(); const { updateFilters, filters, @@ -201,6 +212,7 @@ export const EntityOwnerPicker = () => { renderInput={params => ( { setText(e.currentTarget.value); }} From 73f9b42c11d4bb83afcc0f5ef5a82d706190ef94 Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Mon, 15 May 2023 21:16:34 +0200 Subject: [PATCH 048/213] catalog-react: patch changeset and rewording Signed-off-by: Vincenzo Scamporlino --- .changeset/little-boats-think.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/.changeset/little-boats-think.md b/.changeset/little-boats-think.md index a17cee4ec7..7c26c8d37c 100644 --- a/.changeset/little-boats-think.md +++ b/.changeset/little-boats-think.md @@ -1,9 +1,8 @@ --- -'@backstage/plugin-catalog-react': minor +'@backstage/plugin-catalog-react': patch --- -`EntityOwnerPicker` now loads entities asynchronously +The `EntityOwnerPicker` component has undergone improvements to enhance its performance. -**BREAKING**: In order to improve the performance of the component, the users and groups displayed by `EntityOwnerPicker` aren't inferred -anymore by the entities available in the `EntityListContext` and will no longer react to changes in the filters of `EntityListContext`. -Instead, the entities are displayed in batches, loaded asynchronously on scroll and filtered server side. +The component now loads entities asynchronously, resulting in improved performance and responsiveness. Instead of loading all entities upfront, they are now loaded in batches as the user scrolls. +The previous implementation inferred users and groups displayed by the `EntityOwnerPicker` component based on the entities available in the `EntityListContext`. The updated version no longer relies on the `EntityListContext` for inference, allowing for better decoupling and improved performance. From 73e7820731de24a778eaddc0f3e263aed431f82e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 16 May 2023 09:38:40 +0000 Subject: [PATCH 049/213] Version Packages --- .changeset/afraid-shirts-train.md | 10 - .changeset/angry-ducks-shake.md | 5 - .changeset/backend-like-a-tattoo.md | 5 - .changeset/beige-tigers-matter.md | 5 - .changeset/big-days-press.md | 7 - .changeset/blue-eyes-run.md | 7 - .changeset/brown-eyes-yell.md | 5 - .changeset/brown-keys-raise.md | 7 - .changeset/brown-meals-trade.md | 5 - .changeset/calm-buttons-type.md | 5 - .changeset/calm-snails-trade.md | 5 - .changeset/calm-wolves-taste.md | 5 - .changeset/chilled-goats-jump.md | 5 - .changeset/chilled-pants-wonder.md | 5 - .changeset/chilled-queens-wonder.md | 5 - .changeset/chilly-fireants-type.md | 5 - .changeset/chilly-taxis-shop.md | 5 - .changeset/clean-lobsters-brake.md | 7 - .changeset/clever-coins-deny.md | 5 - .changeset/cold-drinks-exercise.md | 5 - .changeset/cold-laws-turn.md | 5 - .changeset/cool-dingos-repair.md | 5 - .changeset/create-app-1682437922.md | 5 - .changeset/curly-rats-fold.md | 5 - .changeset/curvy-months-appear.md | 5 - .changeset/dry-boats-sniff.md | 10 - .changeset/dull-wombats-stare.md | 5 - .changeset/eighty-olives-live.md | 5 - .changeset/eleven-taxis-notice.md | 7 - .changeset/extragavent-fast-fly.md | 10 - .changeset/fair-suits-warn.md | 5 - .changeset/fast-wasps-peel.md | 5 - .changeset/fifty-grapes-explode.md | 5 - .changeset/fifty-laws-count.md | 5 - .changeset/five-lies-confess.md | 5 - .changeset/five-tigers-whisper.md | 5 - .changeset/fluffy-crabs-reply.md | 5 - .changeset/fluffy-mirrors-happen.md | 7 - .changeset/fresh-moons-unite.md | 5 - .changeset/friendly-frogs-drop.md | 5 - .changeset/funny-cups-count.md | 5 - .changeset/funny-trains-sniff.md | 25 - .changeset/giant-students-lie.md | 5 - .changeset/gold-vans-sin.md | 10 - .changeset/good-lions-approve.md | 5 - .changeset/green-cheetahs-cover.md | 5 - .changeset/healthy-ladybugs-chew.md | 5 - .changeset/heavy-penguins-burn.md | 6 - .changeset/honest-comics-ring.md | 5 - .changeset/honest-countries-deny.md | 5 - .changeset/honest-turkeys-learn.md | 5 - .changeset/hungry-countries-enjoy.md | 5 - .changeset/hungry-foxes-divide.md | 5 - .changeset/hungry-peas-sing.md | 5 - .changeset/itchy-impalas-fold.md | 9 - .changeset/khaki-brooms-kiss.md | 5 - .changeset/late-lizards-unite.md | 5 - .changeset/lazy-keys-work.md | 5 - .changeset/mighty-bears-glow.md | 10 - .changeset/mighty-cows-greet.md | 5 - .changeset/modern-pumpkins-join.md | 5 - .changeset/moody-lizards-beam.md | 40 - .changeset/moody-shrimps-train.md | 5 - .changeset/new-roses-fail.md | 16 - .changeset/nice-ants-type.md | 5 - .changeset/nine-planes-carry.md | 5 - .changeset/nine-ties-smoke.md | 5 - .changeset/ninety-eggs-lie.md | 6 - .changeset/ninety-mugs-sin.md | 5 - .changeset/olive-turkeys-switch.md | 5 - .changeset/polite-dingos-train.md | 33 - .changeset/pre.json | 308 -- .changeset/pretty-gifts-greet.md | 5 - .changeset/proud-chairs-sleep.md | 5 - .changeset/quick-flies-guess.md | 5 - .changeset/quiet-bikes-smash.md | 5 - .changeset/quiet-stingrays-fly.md | 5 - .changeset/rare-elephants-arrive.md | 5 - .changeset/real-baboons-vanish.md | 8 - .changeset/red-cheetahs-invite.md | 6 - .changeset/red-parrots-attack.md | 5 - .changeset/rotten-chefs-jog.md | 10 - .changeset/serious-hornets-remember.md | 5 - .changeset/serious-phones-flash.md | 5 - .changeset/shy-worms-enjoy.md | 6 - .changeset/six-mails-shout.md | 5 - .changeset/sixty-falcons-protect.md | 5 - .changeset/slimy-turkeys-return.md | 22 - .changeset/soft-readers-exist.md | 5 - .changeset/spicy-spies-warn.md | 7 - .changeset/spotty-walls-serve.md | 5 - .changeset/stupid-seas-stare.md | 5 - .changeset/swift-fishes-run.md | 5 - .changeset/swift-students-type.md | 5 - .changeset/thick-parents-pump.md | 6 - .changeset/thick-pugs-rush.md | 5 - .changeset/thin-ways-exist.md | 5 - .changeset/thirty-jobs-sort.md | 5 - .changeset/three-tools-pump.md | 5 - .changeset/tiny-crews-pull.md | 5 - .changeset/tough-moles-whisper.md | 5 - .changeset/twelve-birds-boil.md | 5 - .changeset/twelve-zebras-repair.md | 5 - .changeset/two-gorillas-drop.md | 5 - .changeset/unlucky-deers-teach.md | 7 - .changeset/unlucky-plants-give.md | 5 - .changeset/warm-lamps-tease.md | 7 - .changeset/wet-dolphins-love.md | 5 - docs/releases/v1.14.0-changelog.md | 2795 +++++++++++++++++ package.json | 2 +- packages/app-defaults/CHANGELOG.md | 18 + packages/app-defaults/package.json | 2 +- packages/app/CHANGELOG.md | 72 + packages/app/package.json | 2 +- packages/backend-app-api/CHANGELOG.md | 17 + packages/backend-app-api/package.json | 2 +- packages/backend-common/CHANGELOG.md | 20 + packages/backend-common/package.json | 2 +- packages/backend-defaults/CHANGELOG.md | 9 + packages/backend-defaults/package.json | 2 +- packages/backend-next/CHANGELOG.md | 22 + packages/backend-next/package.json | 2 +- packages/backend-openapi-utils/CHANGELOG.md | 9 + packages/backend-openapi-utils/package.json | 2 +- packages/backend-plugin-api/CHANGELOG.md | 11 + packages/backend-plugin-api/package.json | 2 +- packages/backend-tasks/CHANGELOG.md | 10 + packages/backend-tasks/package.json | 2 +- packages/backend-test-utils/CHANGELOG.md | 14 + packages/backend-test-utils/package.json | 2 +- packages/backend/CHANGELOG.md | 52 + packages/backend/package.json | 2 +- packages/cli/CHANGELOG.md | 16 + packages/cli/package.json | 2 +- packages/config-loader/CHANGELOG.md | 51 + packages/config-loader/package.json | 2 +- packages/core-app-api/CHANGELOG.md | 16 + packages/core-app-api/package.json | 2 +- packages/core-components/CHANGELOG.md | 15 + packages/core-components/package.json | 2 +- packages/create-app/CHANGELOG.md | 9 + packages/create-app/package.json | 2 +- packages/dev-utils/CHANGELOG.md | 15 + packages/dev-utils/package.json | 2 +- packages/e2e-test/CHANGELOG.md | 9 + packages/e2e-test/package.json | 2 +- packages/integration-aws-node/CHANGELOG.md | 9 + packages/integration-aws-node/package.json | 2 +- packages/integration-react/CHANGELOG.md | 11 + packages/integration-react/package.json | 2 +- packages/integration/CHANGELOG.md | 9 + packages/integration/package.json | 2 +- packages/repo-tools/CHANGELOG.md | 14 + packages/repo-tools/package.json | 2 +- .../techdocs-cli-embedded-app/CHANGELOG.md | 19 + .../techdocs-cli-embedded-app/package.json | 2 +- packages/techdocs-cli/CHANGELOG.md | 11 + packages/techdocs-cli/package.json | 2 +- packages/test-utils/CHANGELOG.md | 13 + packages/test-utils/package.json | 2 +- packages/theme/CHANGELOG.md | 10 + packages/theme/package.json | 2 +- plugins/adr-backend/CHANGELOG.md | 14 + plugins/adr-backend/package.json | 2 +- plugins/adr-common/CHANGELOG.md | 9 + plugins/adr-common/package.json | 2 +- plugins/adr/CHANGELOG.md | 19 + plugins/adr/package.json | 2 +- plugins/airbrake-backend/CHANGELOG.md | 8 + plugins/airbrake-backend/package.json | 2 +- plugins/airbrake/CHANGELOG.md | 13 + plugins/airbrake/package.json | 2 +- plugins/allure/CHANGELOG.md | 11 + plugins/allure/package.json | 2 +- plugins/analytics-module-ga/CHANGELOG.md | 10 + plugins/analytics-module-ga/package.json | 2 +- plugins/analytics-module-ga4/CHANGELOG.md | 14 + plugins/analytics-module-ga4/package.json | 2 +- plugins/apache-airflow/CHANGELOG.md | 8 + plugins/apache-airflow/package.json | 2 +- plugins/api-docs/CHANGELOG.md | 12 + plugins/api-docs/package.json | 2 +- plugins/apollo-explorer/CHANGELOG.md | 9 + plugins/apollo-explorer/package.json | 2 +- plugins/app-backend/CHANGELOG.md | 11 + plugins/app-backend/package.json | 2 +- plugins/auth-backend/CHANGELOG.md | 16 + plugins/auth-backend/package.json | 2 +- plugins/auth-node/CHANGELOG.md | 9 + plugins/auth-node/package.json | 2 +- plugins/azure-devops-backend/CHANGELOG.md | 9 + plugins/azure-devops-backend/package.json | 2 +- plugins/azure-devops/CHANGELOG.md | 17 + plugins/azure-devops/package.json | 2 +- plugins/azure-sites-backend/CHANGELOG.md | 10 + plugins/azure-sites-backend/package.json | 2 +- plugins/azure-sites/CHANGELOG.md | 12 + plugins/azure-sites/package.json | 2 +- plugins/badges-backend/CHANGELOG.md | 21 + plugins/badges-backend/package.json | 2 +- plugins/badges/CHANGELOG.md | 18 + plugins/badges/package.json | 2 +- plugins/bazaar-backend/CHANGELOG.md | 11 + plugins/bazaar-backend/package.json | 2 +- plugins/bazaar/CHANGELOG.md | 16 + plugins/bazaar/package.json | 2 +- plugins/bitbucket-cloud-common/CHANGELOG.md | 7 + plugins/bitbucket-cloud-common/package.json | 2 +- plugins/bitrise/CHANGELOG.md | 11 + plugins/bitrise/package.json | 2 +- .../catalog-backend-module-aws/CHANGELOG.md | 22 + .../catalog-backend-module-aws/package.json | 2 +- .../catalog-backend-module-azure/CHANGELOG.md | 16 + .../catalog-backend-module-azure/package.json | 2 +- .../CHANGELOG.md | 17 + .../package.json | 2 +- .../CHANGELOG.md | 14 + .../package.json | 2 +- .../CHANGELOG.md | 14 + .../package.json | 2 +- .../CHANGELOG.md | 14 + .../package.json | 2 +- .../CHANGELOG.md | 27 + .../package.json | 2 +- .../CHANGELOG.md | 16 + .../package.json | 2 +- .../CHANGELOG.md | 16 + .../package.json | 2 +- .../catalog-backend-module-ldap/CHANGELOG.md | 13 + .../catalog-backend-module-ldap/package.json | 2 +- .../CHANGELOG.md | 13 + .../package.json | 2 +- .../CHANGELOG.md | 15 + .../package.json | 2 +- .../CHANGELOG.md | 15 + .../package.json | 2 +- plugins/catalog-backend/CHANGELOG.md | 29 + plugins/catalog-backend/package.json | 2 +- plugins/catalog-customized/CHANGELOG.md | 8 + plugins/catalog-customized/package.json | 2 +- plugins/catalog-graph/CHANGELOG.md | 13 + plugins/catalog-graph/package.json | 2 +- plugins/catalog-import/CHANGELOG.md | 16 + plugins/catalog-import/package.json | 2 +- plugins/catalog-node/CHANGELOG.md | 12 + plugins/catalog-node/package.json | 2 +- plugins/catalog-react/CHANGELOG.md | 41 + plugins/catalog-react/package.json | 2 +- plugins/catalog/CHANGELOG.md | 41 + plugins/catalog/package.json | 2 +- .../CHANGELOG.md | 9 + .../package.json | 2 +- plugins/cicd-statistics/CHANGELOG.md | 9 + plugins/cicd-statistics/package.json | 2 +- plugins/circleci/CHANGELOG.md | 13 + plugins/circleci/package.json | 2 +- plugins/cloudbuild/CHANGELOG.md | 11 + plugins/cloudbuild/package.json | 2 +- plugins/code-climate/CHANGELOG.md | 11 + plugins/code-climate/package.json | 2 +- plugins/code-coverage-backend/CHANGELOG.md | 12 + plugins/code-coverage-backend/package.json | 2 +- plugins/code-coverage/CHANGELOG.md | 13 + plugins/code-coverage/package.json | 2 +- plugins/codescene/CHANGELOG.md | 11 + plugins/codescene/package.json | 2 +- plugins/config-schema/CHANGELOG.md | 12 + plugins/config-schema/package.json | 2 +- plugins/cost-insights/CHANGELOG.md | 13 + plugins/cost-insights/package.json | 2 +- plugins/devtools-backend/CHANGELOG.md | 20 + plugins/devtools-backend/package.json | 2 +- plugins/devtools-common/CHANGELOG.md | 12 + plugins/devtools-common/package.json | 2 +- plugins/devtools/CHANGELOG.md | 17 + plugins/devtools/package.json | 2 +- plugins/dynatrace/CHANGELOG.md | 11 + plugins/dynatrace/package.json | 2 +- plugins/entity-feedback-backend/CHANGELOG.md | 12 + plugins/entity-feedback-backend/package.json | 2 +- plugins/entity-feedback/CHANGELOG.md | 13 + plugins/entity-feedback/package.json | 2 +- plugins/entity-validation/CHANGELOG.md | 14 + plugins/entity-validation/package.json | 2 +- .../CHANGELOG.md | 17 + .../package.json | 2 +- .../events-backend-module-azure/CHANGELOG.md | 8 + .../events-backend-module-azure/package.json | 2 +- .../CHANGELOG.md | 8 + .../package.json | 2 +- .../events-backend-module-gerrit/CHANGELOG.md | 8 + .../events-backend-module-gerrit/package.json | 2 +- .../events-backend-module-github/CHANGELOG.md | 9 + .../events-backend-module-github/package.json | 2 +- .../events-backend-module-gitlab/CHANGELOG.md | 9 + .../events-backend-module-gitlab/package.json | 2 +- .../events-backend-test-utils/CHANGELOG.md | 7 + .../events-backend-test-utils/package.json | 2 +- plugins/events-backend/CHANGELOG.md | 10 + plugins/events-backend/package.json | 2 +- plugins/events-node/CHANGELOG.md | 7 + plugins/events-node/package.json | 2 +- .../example-todo-list-backend/CHANGELOG.md | 11 + .../example-todo-list-backend/package.json | 2 +- plugins/example-todo-list/CHANGELOG.md | 9 + plugins/example-todo-list/package.json | 2 +- plugins/explore-backend/CHANGELOG.md | 11 + plugins/explore-backend/package.json | 2 +- plugins/explore/CHANGELOG.md | 19 + plugins/explore/package.json | 2 +- plugins/firehydrant/CHANGELOG.md | 11 + plugins/firehydrant/package.json | 2 +- plugins/fossa/CHANGELOG.md | 12 + plugins/fossa/package.json | 2 +- plugins/gcalendar/CHANGELOG.md | 11 + plugins/gcalendar/package.json | 2 +- plugins/gcp-projects/CHANGELOG.md | 9 + plugins/gcp-projects/package.json | 2 +- plugins/git-release-manager/CHANGELOG.md | 10 + plugins/git-release-manager/package.json | 2 +- plugins/github-actions/CHANGELOG.md | 12 + plugins/github-actions/package.json | 2 +- plugins/github-deployments/CHANGELOG.md | 14 + plugins/github-deployments/package.json | 2 +- plugins/github-issues/CHANGELOG.md | 13 + plugins/github-issues/package.json | 2 +- .../github-pull-requests-board/CHANGELOG.md | 13 + .../github-pull-requests-board/package.json | 2 +- plugins/gitops-profiles/CHANGELOG.md | 10 + plugins/gitops-profiles/package.json | 2 +- plugins/gocd/CHANGELOG.md | 12 + plugins/gocd/package.json | 2 +- plugins/graphiql/CHANGELOG.md | 9 + plugins/graphiql/package.json | 2 +- plugins/graphql-backend/CHANGELOG.md | 9 + plugins/graphql-backend/package.json | 2 +- plugins/graphql-voyager/CHANGELOG.md | 9 + plugins/graphql-voyager/package.json | 2 +- plugins/home/CHANGELOG.md | 16 + plugins/home/package.json | 2 +- plugins/ilert/CHANGELOG.md | 12 + plugins/ilert/package.json | 2 +- plugins/jenkins-backend/CHANGELOG.md | 21 + plugins/jenkins-backend/package.json | 2 +- plugins/jenkins/CHANGELOG.md | 19 + plugins/jenkins/package.json | 2 +- plugins/kafka-backend/CHANGELOG.md | 11 + plugins/kafka-backend/package.json | 2 +- plugins/kafka/CHANGELOG.md | 12 + plugins/kafka/package.json | 2 +- plugins/kubernetes-backend/CHANGELOG.md | 33 + plugins/kubernetes-backend/package.json | 2 +- plugins/kubernetes-common/CHANGELOG.md | 9 + plugins/kubernetes-common/package.json | 2 +- plugins/kubernetes/CHANGELOG.md | 50 + plugins/kubernetes/package.json | 2 +- plugins/lighthouse-backend/CHANGELOG.md | 13 + plugins/lighthouse-backend/package.json | 2 +- plugins/lighthouse/CHANGELOG.md | 13 + plugins/lighthouse/package.json | 2 +- plugins/linguist-backend/CHANGELOG.md | 15 + plugins/linguist-backend/package.json | 2 +- plugins/linguist/CHANGELOG.md | 13 + plugins/linguist/package.json | 2 +- plugins/microsoft-calendar/CHANGELOG.md | 10 + plugins/microsoft-calendar/package.json | 2 +- plugins/newrelic-dashboard/CHANGELOG.md | 11 + plugins/newrelic-dashboard/package.json | 2 +- plugins/newrelic/CHANGELOG.md | 9 + plugins/newrelic/package.json | 2 +- plugins/octopus-deploy/CHANGELOG.md | 16 + plugins/octopus-deploy/package.json | 2 +- plugins/org-react/CHANGELOG.md | 12 + plugins/org-react/package.json | 2 +- plugins/org/CHANGELOG.md | 24 + plugins/org/package.json | 2 +- plugins/pagerduty/CHANGELOG.md | 12 + plugins/pagerduty/package.json | 2 +- plugins/periskop-backend/CHANGELOG.md | 9 + plugins/periskop-backend/package.json | 2 +- plugins/periskop/CHANGELOG.md | 12 + plugins/periskop/package.json | 2 +- plugins/permission-backend/CHANGELOG.md | 13 + plugins/permission-backend/package.json | 2 +- plugins/permission-node/CHANGELOG.md | 31 + plugins/permission-node/package.json | 2 +- plugins/playlist-backend/CHANGELOG.md | 15 + plugins/playlist-backend/package.json | 2 +- plugins/playlist/CHANGELOG.md | 17 + plugins/playlist/package.json | 2 +- plugins/proxy-backend/CHANGELOG.md | 9 + plugins/proxy-backend/package.json | 2 +- plugins/puppetdb/CHANGELOG.md | 12 + plugins/puppetdb/package.json | 2 +- plugins/rollbar-backend/CHANGELOG.md | 8 + plugins/rollbar-backend/package.json | 2 +- plugins/rollbar/CHANGELOG.md | 11 + plugins/rollbar/package.json | 2 +- .../CHANGELOG.md | 14 + .../package.json | 2 +- .../CHANGELOG.md | 13 + .../package.json | 2 +- .../CHANGELOG.md | 21 + .../package.json | 2 +- .../CHANGELOG.md | 13 + .../package.json | 2 +- .../CHANGELOG.md | 9 + .../package.json | 2 +- .../CHANGELOG.md | 9 + .../package.json | 2 +- plugins/scaffolder-backend/CHANGELOG.md | 34 + plugins/scaffolder-backend/package.json | 2 +- plugins/scaffolder-common/CHANGELOG.md | 16 + plugins/scaffolder-common/package.json | 2 +- plugins/scaffolder-node/CHANGELOG.md | 11 + plugins/scaffolder-node/package.json | 2 +- plugins/scaffolder-react/CHANGELOG.md | 26 + plugins/scaffolder-react/package.json | 2 +- plugins/scaffolder/CHANGELOG.md | 28 + plugins/scaffolder/package.json | 2 +- .../CHANGELOG.md | 16 + .../package.json | 2 +- .../CHANGELOG.md | 16 + .../package.json | 2 +- .../CHANGELOG.md | 13 + .../package.json | 2 +- plugins/search-backend-module-pg/CHANGELOG.md | 11 + plugins/search-backend-module-pg/package.json | 2 +- .../CHANGELOG.md | 17 + .../package.json | 2 +- plugins/search-backend-node/CHANGELOG.md | 13 + plugins/search-backend-node/package.json | 2 +- plugins/search-backend/CHANGELOG.md | 17 + plugins/search-backend/package.json | 2 +- plugins/search-react/CHANGELOG.md | 24 + plugins/search-react/package.json | 2 +- plugins/search/CHANGELOG.md | 26 + plugins/search/package.json | 2 +- plugins/sentry/CHANGELOG.md | 11 + plugins/sentry/package.json | 2 +- plugins/shortcuts/CHANGELOG.md | 11 + plugins/shortcuts/package.json | 2 +- plugins/sonarqube-backend/CHANGELOG.md | 9 + plugins/sonarqube-backend/package.json | 2 +- plugins/sonarqube/CHANGELOG.md | 12 + plugins/sonarqube/package.json | 2 +- plugins/splunk-on-call/CHANGELOG.md | 11 + plugins/splunk-on-call/package.json | 2 +- plugins/stack-overflow-backend/CHANGELOG.md | 9 + plugins/stack-overflow-backend/package.json | 2 +- plugins/stack-overflow/CHANGELOG.md | 14 + plugins/stack-overflow/package.json | 2 +- plugins/stackstorm/CHANGELOG.md | 10 + plugins/stackstorm/package.json | 2 +- .../CHANGELOG.md | 11 + .../package.json | 2 +- plugins/tech-insights-backend/CHANGELOG.md | 15 + plugins/tech-insights-backend/package.json | 2 +- plugins/tech-insights-node/CHANGELOG.md | 11 + plugins/tech-insights-node/package.json | 2 +- plugins/tech-insights/CHANGELOG.md | 21 + plugins/tech-insights/package.json | 2 +- plugins/tech-radar/CHANGELOG.md | 11 + plugins/tech-radar/package.json | 2 +- .../techdocs-addons-test-utils/CHANGELOG.md | 16 + .../techdocs-addons-test-utils/package.json | 2 +- plugins/techdocs-backend/CHANGELOG.md | 18 + plugins/techdocs-backend/package.json | 2 +- .../CHANGELOG.md | 13 + .../package.json | 2 +- plugins/techdocs-node/CHANGELOG.md | 14 + plugins/techdocs-node/package.json | 2 +- plugins/techdocs-react/CHANGELOG.md | 11 + plugins/techdocs-react/package.json | 2 +- plugins/techdocs/CHANGELOG.md | 19 + plugins/techdocs/package.json | 2 +- plugins/todo-backend/CHANGELOG.md | 15 + plugins/todo-backend/package.json | 2 +- plugins/todo/CHANGELOG.md | 12 + plugins/todo/package.json | 2 +- plugins/user-settings-backend/CHANGELOG.md | 12 + plugins/user-settings-backend/package.json | 2 +- plugins/user-settings/CHANGELOG.md | 14 + plugins/user-settings/package.json | 2 +- plugins/vault-backend/CHANGELOG.md | 10 + plugins/vault-backend/package.json | 2 +- plugins/vault/CHANGELOG.md | 12 + plugins/vault/package.json | 2 +- plugins/xcmetrics/CHANGELOG.md | 10 + plugins/xcmetrics/package.json | 2 +- yarn.lock | 276 +- 491 files changed, 5840 insertions(+), 1422 deletions(-) delete mode 100644 .changeset/afraid-shirts-train.md delete mode 100644 .changeset/angry-ducks-shake.md delete mode 100644 .changeset/backend-like-a-tattoo.md delete mode 100644 .changeset/beige-tigers-matter.md delete mode 100644 .changeset/big-days-press.md delete mode 100644 .changeset/blue-eyes-run.md delete mode 100644 .changeset/brown-eyes-yell.md delete mode 100644 .changeset/brown-keys-raise.md delete mode 100644 .changeset/brown-meals-trade.md delete mode 100644 .changeset/calm-buttons-type.md delete mode 100644 .changeset/calm-snails-trade.md delete mode 100644 .changeset/calm-wolves-taste.md delete mode 100644 .changeset/chilled-goats-jump.md delete mode 100644 .changeset/chilled-pants-wonder.md delete mode 100644 .changeset/chilled-queens-wonder.md delete mode 100644 .changeset/chilly-fireants-type.md delete mode 100644 .changeset/chilly-taxis-shop.md delete mode 100644 .changeset/clean-lobsters-brake.md delete mode 100644 .changeset/clever-coins-deny.md delete mode 100644 .changeset/cold-drinks-exercise.md delete mode 100644 .changeset/cold-laws-turn.md delete mode 100644 .changeset/cool-dingos-repair.md delete mode 100644 .changeset/create-app-1682437922.md delete mode 100644 .changeset/curly-rats-fold.md delete mode 100644 .changeset/curvy-months-appear.md delete mode 100644 .changeset/dry-boats-sniff.md delete mode 100644 .changeset/dull-wombats-stare.md delete mode 100644 .changeset/eighty-olives-live.md delete mode 100644 .changeset/eleven-taxis-notice.md delete mode 100644 .changeset/extragavent-fast-fly.md delete mode 100644 .changeset/fair-suits-warn.md delete mode 100644 .changeset/fast-wasps-peel.md delete mode 100644 .changeset/fifty-grapes-explode.md delete mode 100644 .changeset/fifty-laws-count.md delete mode 100644 .changeset/five-lies-confess.md delete mode 100644 .changeset/five-tigers-whisper.md delete mode 100644 .changeset/fluffy-crabs-reply.md delete mode 100644 .changeset/fluffy-mirrors-happen.md delete mode 100644 .changeset/fresh-moons-unite.md delete mode 100644 .changeset/friendly-frogs-drop.md delete mode 100644 .changeset/funny-cups-count.md delete mode 100644 .changeset/funny-trains-sniff.md delete mode 100644 .changeset/giant-students-lie.md delete mode 100644 .changeset/gold-vans-sin.md delete mode 100644 .changeset/good-lions-approve.md delete mode 100644 .changeset/green-cheetahs-cover.md delete mode 100644 .changeset/healthy-ladybugs-chew.md delete mode 100644 .changeset/heavy-penguins-burn.md delete mode 100644 .changeset/honest-comics-ring.md delete mode 100644 .changeset/honest-countries-deny.md delete mode 100644 .changeset/honest-turkeys-learn.md delete mode 100644 .changeset/hungry-countries-enjoy.md delete mode 100644 .changeset/hungry-foxes-divide.md delete mode 100644 .changeset/hungry-peas-sing.md delete mode 100644 .changeset/itchy-impalas-fold.md delete mode 100644 .changeset/khaki-brooms-kiss.md delete mode 100644 .changeset/late-lizards-unite.md delete mode 100644 .changeset/lazy-keys-work.md delete mode 100644 .changeset/mighty-bears-glow.md delete mode 100644 .changeset/mighty-cows-greet.md delete mode 100644 .changeset/modern-pumpkins-join.md delete mode 100644 .changeset/moody-lizards-beam.md delete mode 100644 .changeset/moody-shrimps-train.md delete mode 100644 .changeset/new-roses-fail.md delete mode 100644 .changeset/nice-ants-type.md delete mode 100644 .changeset/nine-planes-carry.md delete mode 100644 .changeset/nine-ties-smoke.md delete mode 100644 .changeset/ninety-eggs-lie.md delete mode 100644 .changeset/ninety-mugs-sin.md delete mode 100644 .changeset/olive-turkeys-switch.md delete mode 100644 .changeset/polite-dingos-train.md delete mode 100644 .changeset/pre.json delete mode 100644 .changeset/pretty-gifts-greet.md delete mode 100644 .changeset/proud-chairs-sleep.md delete mode 100644 .changeset/quick-flies-guess.md delete mode 100644 .changeset/quiet-bikes-smash.md delete mode 100644 .changeset/quiet-stingrays-fly.md delete mode 100644 .changeset/rare-elephants-arrive.md delete mode 100644 .changeset/real-baboons-vanish.md delete mode 100644 .changeset/red-cheetahs-invite.md delete mode 100644 .changeset/red-parrots-attack.md delete mode 100644 .changeset/rotten-chefs-jog.md delete mode 100644 .changeset/serious-hornets-remember.md delete mode 100644 .changeset/serious-phones-flash.md delete mode 100644 .changeset/shy-worms-enjoy.md delete mode 100644 .changeset/six-mails-shout.md delete mode 100644 .changeset/sixty-falcons-protect.md delete mode 100644 .changeset/slimy-turkeys-return.md delete mode 100644 .changeset/soft-readers-exist.md delete mode 100644 .changeset/spicy-spies-warn.md delete mode 100644 .changeset/spotty-walls-serve.md delete mode 100644 .changeset/stupid-seas-stare.md delete mode 100644 .changeset/swift-fishes-run.md delete mode 100644 .changeset/swift-students-type.md delete mode 100644 .changeset/thick-parents-pump.md delete mode 100644 .changeset/thick-pugs-rush.md delete mode 100644 .changeset/thin-ways-exist.md delete mode 100644 .changeset/thirty-jobs-sort.md delete mode 100644 .changeset/three-tools-pump.md delete mode 100644 .changeset/tiny-crews-pull.md delete mode 100644 .changeset/tough-moles-whisper.md delete mode 100644 .changeset/twelve-birds-boil.md delete mode 100644 .changeset/twelve-zebras-repair.md delete mode 100644 .changeset/two-gorillas-drop.md delete mode 100644 .changeset/unlucky-deers-teach.md delete mode 100644 .changeset/unlucky-plants-give.md delete mode 100644 .changeset/warm-lamps-tease.md delete mode 100644 .changeset/wet-dolphins-love.md create mode 100644 docs/releases/v1.14.0-changelog.md diff --git a/.changeset/afraid-shirts-train.md b/.changeset/afraid-shirts-train.md deleted file mode 100644 index bd83716dc4..0000000000 --- a/.changeset/afraid-shirts-train.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -'@backstage/plugin-tech-insights': patch ---- - -Added the possibility to customize the check description in the scorecard component. - -- The `CheckResultRenderer` type now exposes an optional `description` method that allows to overwrite the description with a different string or a React component for a provided check result. - -Until now only the `BooleanCheck` element could be overridden, but from now on it's also possible to override the description for a check. -As an example, the description could change depending on the check result. Refer to the [README](https://github.com/backstage/backstage/blob/master/plugins/tech-insights/README.md#adding-custom-rendering-components) file for more details diff --git a/.changeset/angry-ducks-shake.md b/.changeset/angry-ducks-shake.md deleted file mode 100644 index 58975123b4..0000000000 --- a/.changeset/angry-ducks-shake.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-test-utils': patch ---- - -Allow specifying custom Docker registry for database tests diff --git a/.changeset/backend-like-a-tattoo.md b/.changeset/backend-like-a-tattoo.md deleted file mode 100644 index 0d2edfa7a9..0000000000 --- a/.changeset/backend-like-a-tattoo.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-test-utils': patch ---- - -Added `POSTGRES_11` and `POSTGRES_12` as supported test database IDs. diff --git a/.changeset/beige-tigers-matter.md b/.changeset/beige-tigers-matter.md deleted file mode 100644 index 248ce1fbf9..0000000000 --- a/.changeset/beige-tigers-matter.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder': patch ---- - -Fix case GitLab workspace is a nested subgroup diff --git a/.changeset/big-days-press.md b/.changeset/big-days-press.md deleted file mode 100644 index 7dec7d6288..0000000000 --- a/.changeset/big-days-press.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': minor ---- - -Expose both types of scaffolder permissions and rules through the metadata endpoint. - -The metadata endpoint now correctly exposes both types of scaffolder permissions and rules (for both the template and action resource types) through the metadata endpoint. diff --git a/.changeset/blue-eyes-run.md b/.changeset/blue-eyes-run.md deleted file mode 100644 index 1b96e01f1c..0000000000 --- a/.changeset/blue-eyes-run.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/plugin-devtools': minor -'@backstage/plugin-devtools-backend': minor -'@backstage/plugin-devtools-common': minor ---- - -Introduced the DevTools plugin, checkout the plugin's [`README.md`](https://github.com/backstage/backstage/tree/master/plugins/devtools) for more details! diff --git a/.changeset/brown-eyes-yell.md b/.changeset/brown-eyes-yell.md deleted file mode 100644 index 5ed4140bba..0000000000 --- a/.changeset/brown-eyes-yell.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-github-pull-requests-board': patch ---- - -The `EntityTeamPullRequestsContent` and `EntityTeamPullRequestsCard` support the ability to view the labels/tags added to each PR diff --git a/.changeset/brown-keys-raise.md b/.changeset/brown-keys-raise.md deleted file mode 100644 index 1d288d9f57..0000000000 --- a/.changeset/brown-keys-raise.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/plugin-kubernetes': patch ---- - -The Kubernetes plugin now requests AKS access tokens from Azure when retrieving -objects from clusters configured with `authProvider: aks` and sets `auth.aks` in -its request bodies appropriately. diff --git a/.changeset/brown-meals-trade.md b/.changeset/brown-meals-trade.md deleted file mode 100644 index f6849fa19b..0000000000 --- a/.changeset/brown-meals-trade.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/repo-tools': minor ---- - -**BREAKING**: The OpenAPI commands are now found within the `schema openapi` sub-command. For example `yarn backstage-repo-tools schema:openapi:verify` is now `yarn backstage-repo-tools schema openapi verify`. diff --git a/.changeset/calm-buttons-type.md b/.changeset/calm-buttons-type.md deleted file mode 100644 index 11b300a684..0000000000 --- a/.changeset/calm-buttons-type.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': patch ---- - -Bump minimum required version of `vm2` to be 3.9.18 diff --git a/.changeset/calm-snails-trade.md b/.changeset/calm-snails-trade.md deleted file mode 100644 index 0738b5aa37..0000000000 --- a/.changeset/calm-snails-trade.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-bazaar': patch ---- - -Fixed `validateDOMNesting` warnings diff --git a/.changeset/calm-wolves-taste.md b/.changeset/calm-wolves-taste.md deleted file mode 100644 index ec0a7fb4f0..0000000000 --- a/.changeset/calm-wolves-taste.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-search': patch ---- - -Fixed 404 Error when fetching search results due to URL encoding changes diff --git a/.changeset/chilled-goats-jump.md b/.changeset/chilled-goats-jump.md deleted file mode 100644 index 3dd152712a..0000000000 --- a/.changeset/chilled-goats-jump.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/create-app': patch ---- - -Correct command to create new plugins diff --git a/.changeset/chilled-pants-wonder.md b/.changeset/chilled-pants-wonder.md deleted file mode 100644 index 501ced7cba..0000000000 --- a/.changeset/chilled-pants-wonder.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-openapi-utils': patch ---- - -Use permalinks for links including a line number reference diff --git a/.changeset/chilled-queens-wonder.md b/.changeset/chilled-queens-wonder.md deleted file mode 100644 index a10212792d..0000000000 --- a/.changeset/chilled-queens-wonder.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend': patch ---- - -Ensure that entity cache state is only written to the database when actually changed diff --git a/.changeset/chilly-fireants-type.md b/.changeset/chilly-fireants-type.md deleted file mode 100644 index 6bff750d57..0000000000 --- a/.changeset/chilly-fireants-type.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-common': patch ---- - -Remove the direct dependency on deprecated "request" library diff --git a/.changeset/chilly-taxis-shop.md b/.changeset/chilly-taxis-shop.md deleted file mode 100644 index 9e2e73a5e3..0000000000 --- a/.changeset/chilly-taxis-shop.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-home': patch ---- - -Remove object-hash dependency diff --git a/.changeset/clean-lobsters-brake.md b/.changeset/clean-lobsters-brake.md deleted file mode 100644 index f6da6e986e..0000000000 --- a/.changeset/clean-lobsters-brake.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/plugin-kubernetes-backend': minor ---- - -Allow fetching pod metrics limited by a `labelSelector`. - -This is used by the Kubernetes tab on a components' page and leads to much smaller responses being received from Kubernetes, especially with larger Kubernetes clusters. diff --git a/.changeset/clever-coins-deny.md b/.changeset/clever-coins-deny.md deleted file mode 100644 index 0c1e2ade26..0000000000 --- a/.changeset/clever-coins-deny.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-home': patch ---- - -Use the semantic time tag for rendering world clocks on homepage headers. diff --git a/.changeset/cold-drinks-exercise.md b/.changeset/cold-drinks-exercise.md deleted file mode 100644 index e47e133929..0000000000 --- a/.changeset/cold-drinks-exercise.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-explore': patch ---- - -Make sure that the first support button row does not break across lines diff --git a/.changeset/cold-laws-turn.md b/.changeset/cold-laws-turn.md deleted file mode 100644 index 6220f088db..0000000000 --- a/.changeset/cold-laws-turn.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-events-backend-module-aws-sqs': minor ---- - -Allow endpoint configuration for sqs, enabling use of localstack for testing. diff --git a/.changeset/cool-dingos-repair.md b/.changeset/cool-dingos-repair.md deleted file mode 100644 index fe8377f5f1..0000000000 --- a/.changeset/cool-dingos-repair.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/theme': minor ---- - -Updates light theme's primary foreground and `running` status indicator colours to meet WCAG. Previously #2E77D0 changed to #1F5493. diff --git a/.changeset/create-app-1682437922.md b/.changeset/create-app-1682437922.md deleted file mode 100644 index b50d431d4b..0000000000 --- a/.changeset/create-app-1682437922.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/create-app': patch ---- - -Bumped create-app version. diff --git a/.changeset/curly-rats-fold.md b/.changeset/curly-rats-fold.md deleted file mode 100644 index c4cd8d514b..0000000000 --- a/.changeset/curly-rats-fold.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend': patch ---- - -Internal refactoring for performance in the service handlers diff --git a/.changeset/curvy-months-appear.md b/.changeset/curvy-months-appear.md deleted file mode 100644 index 487e60c437..0000000000 --- a/.changeset/curvy-months-appear.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-techdocs': patch ---- - -Re-add the possibility to have trailing slashes in Techdocs navigation. diff --git a/.changeset/dry-boats-sniff.md b/.changeset/dry-boats-sniff.md deleted file mode 100644 index 0c359b5536..0000000000 --- a/.changeset/dry-boats-sniff.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -'@backstage/app-defaults': patch ---- - -Added a System Icon for resource entities. -This can be obtained using: - -```ts -useApp().getSystemIcon('kind:resource'); -``` diff --git a/.changeset/dull-wombats-stare.md b/.changeset/dull-wombats-stare.md deleted file mode 100644 index 36ba412c02..0000000000 --- a/.changeset/dull-wombats-stare.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-openapi-utils': patch ---- - -Adjusted README accordingly after the generated output now has a `.generated.ts` extension diff --git a/.changeset/eighty-olives-live.md b/.changeset/eighty-olives-live.md deleted file mode 100644 index 16898701f4..0000000000 --- a/.changeset/eighty-olives-live.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-common': patch ---- - -Updated the `DatabaseManager` to include the plugin id in the Postgres application name of the database connections created for each plugin. diff --git a/.changeset/eleven-taxis-notice.md b/.changeset/eleven-taxis-notice.md deleted file mode 100644 index 88a25991fa..0000000000 --- a/.changeset/eleven-taxis-notice.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend-module-confluence-to-markdown': patch -'@backstage/config-loader': patch -'@backstage/plugin-auth-backend': patch ---- - -Fixed the way that some request errors are thrown diff --git a/.changeset/extragavent-fast-fly.md b/.changeset/extragavent-fast-fly.md deleted file mode 100644 index 697b5163ec..0000000000 --- a/.changeset/extragavent-fast-fly.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -'@backstage/plugin-badges': patch -'@backstage/plugin-badges-backend': minor ---- - -Fixing badges-backend plugin to get a token from the TokenManager instead of parsing the request header. Hence, it's now possible to disable the authMiddleware for the badges-backend plugin to expose publicly the badges. - -Implementing an obfuscation feature to protect an open badges endpoint from being enumerated. The feature is disabled by default and the change is compatible with the previous version. - -**BREAKING**: `createRouter` now require that `tokenManager`, `logger`, and `identityApi`, are passed in as options. diff --git a/.changeset/fair-suits-warn.md b/.changeset/fair-suits-warn.md deleted file mode 100644 index 3edc2aa1ca..0000000000 --- a/.changeset/fair-suits-warn.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-tech-radar': patch ---- - -Fix description links when clicking entry in radar. diff --git a/.changeset/fast-wasps-peel.md b/.changeset/fast-wasps-peel.md deleted file mode 100644 index 075336a506..0000000000 --- a/.changeset/fast-wasps-peel.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -Enable strict config checking during `backstage-cli config:check` with the new `--strict` option which will surface schema errors. diff --git a/.changeset/fifty-grapes-explode.md b/.changeset/fifty-grapes-explode.md deleted file mode 100644 index 999a105c4f..0000000000 --- a/.changeset/fifty-grapes-explode.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend': patch ---- - -Fixed a bug in the `queryEntities` endpoint that was causing filtered entities to be included in cursor requests. diff --git a/.changeset/fifty-laws-count.md b/.changeset/fifty-laws-count.md deleted file mode 100644 index f20e41fc20..0000000000 --- a/.changeset/fifty-laws-count.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-kubernetes': patch ---- - -Omit managed fields in the Kubernetes resource YAML display. diff --git a/.changeset/five-lies-confess.md b/.changeset/five-lies-confess.md deleted file mode 100644 index eefd2bd6fa..0000000000 --- a/.changeset/five-lies-confess.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend': patch ---- - -Improve the query for orphan pruning diff --git a/.changeset/five-tigers-whisper.md b/.changeset/five-tigers-whisper.md deleted file mode 100644 index aa9758c3b5..0000000000 --- a/.changeset/five-tigers-whisper.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-stack-overflow': patch ---- - -StackOverflowSearchResultListItem can now accept an empty result prop so that it can be rendered in the suggested SearchResultListItem pattern. diff --git a/.changeset/fluffy-crabs-reply.md b/.changeset/fluffy-crabs-reply.md deleted file mode 100644 index 0665dd864d..0000000000 --- a/.changeset/fluffy-crabs-reply.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-search-backend-module-elasticsearch': minor ---- - -Upgrade to aws-sdk v3 and include OpenSearch Serverless support diff --git a/.changeset/fluffy-mirrors-happen.md b/.changeset/fluffy-mirrors-happen.md deleted file mode 100644 index 6dce398217..0000000000 --- a/.changeset/fluffy-mirrors-happen.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/plugin-kubernetes-backend': patch ---- - -Kubernetes clusters now support `authProvider: aks`. When configured this way, -the `retrieveObjectsByServiceId` action will use the `auth.aks` value in the -request body as a bearer token to authenticate with Kubernetes. diff --git a/.changeset/fresh-moons-unite.md b/.changeset/fresh-moons-unite.md deleted file mode 100644 index 3d3af7e698..0000000000 --- a/.changeset/fresh-moons-unite.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend': patch ---- - -Adjusted the OpenAPI schema file name according to the new structure diff --git a/.changeset/friendly-frogs-drop.md b/.changeset/friendly-frogs-drop.md deleted file mode 100644 index 682f1dbabb..0000000000 --- a/.changeset/friendly-frogs-drop.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend': patch ---- - -Change orphan cleanup task to only log a message if it deleted entities. diff --git a/.changeset/funny-cups-count.md b/.changeset/funny-cups-count.md deleted file mode 100644 index 19dbc3b8bf..0000000000 --- a/.changeset/funny-cups-count.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-gcalendar': patch ---- - -Pass user info email scope on auth refresh to resolve invalid credentials error diff --git a/.changeset/funny-trains-sniff.md b/.changeset/funny-trains-sniff.md deleted file mode 100644 index 91dbd28c28..0000000000 --- a/.changeset/funny-trains-sniff.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -'@backstage/plugin-catalog-react': minor -'@backstage/plugin-catalog': minor ---- - -Added an entity namespace filter and column on the default catalog page. - -If you have a custom version of the catalog page, you can add this filter in your CatalogPage code: - -```ts - - - - - - /* if you want namespace picker */ - - - - - - -``` - -The namespace column can be added using `createNamespaceColumn();`. This is only needed if you customized the columns for CatalogTable. diff --git a/.changeset/giant-students-lie.md b/.changeset/giant-students-lie.md deleted file mode 100644 index fdcb406296..0000000000 --- a/.changeset/giant-students-lie.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': minor ---- - -Add ability to use `defaultNamespace` and `defaultKind` for scaffolder action `catalog:fetch` diff --git a/.changeset/gold-vans-sin.md b/.changeset/gold-vans-sin.md deleted file mode 100644 index d99cb9834d..0000000000 --- a/.changeset/gold-vans-sin.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend-module-gitlab': patch ---- - -Fix input schema validation issue for gitlab actions: - -- gitlab:group:ensureExists -- gitlab:projectAccessToken:create -- gitlab:projectDeployToken:create -- gitlab:projectVariable:create diff --git a/.changeset/good-lions-approve.md b/.changeset/good-lions-approve.md deleted file mode 100644 index f4065a6ab3..0000000000 --- a/.changeset/good-lions-approve.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/integration': patch ---- - -Fixed a bug where the wrong credentials would be selected when using multiple GitHub app integrations. diff --git a/.changeset/green-cheetahs-cover.md b/.changeset/green-cheetahs-cover.md deleted file mode 100644 index 2633a5af01..0000000000 --- a/.changeset/green-cheetahs-cover.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/core-app-api': minor ---- - -The analytics' `navigate` event will now include the route parameters as attributes of the navigate event diff --git a/.changeset/healthy-ladybugs-chew.md b/.changeset/healthy-ladybugs-chew.md deleted file mode 100644 index 83f53d5c2c..0000000000 --- a/.changeset/healthy-ladybugs-chew.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/repo-tools': minor ---- - -Generated OpenAPI files now have a `.generated.ts` file name and a warning header at the top, to highlight that they should not be edited by hand. diff --git a/.changeset/heavy-penguins-burn.md b/.changeset/heavy-penguins-burn.md deleted file mode 100644 index b8c243a99b..0000000000 --- a/.changeset/heavy-penguins-burn.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-scaffolder-common': minor -'@backstage/plugin-scaffolder-react': minor ---- - -Add support for Markdown text blob outputs from templates diff --git a/.changeset/honest-comics-ring.md b/.changeset/honest-comics-ring.md deleted file mode 100644 index 38a962c5d3..0000000000 --- a/.changeset/honest-comics-ring.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-todo-backend': patch ---- - -Added OpenAPI schema diff --git a/.changeset/honest-countries-deny.md b/.changeset/honest-countries-deny.md deleted file mode 100644 index 14c9094592..0000000000 --- a/.changeset/honest-countries-deny.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-jenkins-backend': patch ---- - -Fix handling of slashes in branch names diff --git a/.changeset/honest-turkeys-learn.md b/.changeset/honest-turkeys-learn.md deleted file mode 100644 index e4e6aae5fc..0000000000 --- a/.changeset/honest-turkeys-learn.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend': patch ---- - -Remove unnecessary join in the entity facets endpoint, exclude nulls diff --git a/.changeset/hungry-countries-enjoy.md b/.changeset/hungry-countries-enjoy.md deleted file mode 100644 index c14ec702b9..0000000000 --- a/.changeset/hungry-countries-enjoy.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/core-app-api': patch ---- - -Fixed a bug in the Azure auth provider which prevented getting access tokens with multiple scopes for one resource diff --git a/.changeset/hungry-foxes-divide.md b/.changeset/hungry-foxes-divide.md deleted file mode 100644 index 589c899443..0000000000 --- a/.changeset/hungry-foxes-divide.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-graph': patch ---- - -Expose all `EntityRelationsGraphProps` to Catalog Graph Page diff --git a/.changeset/hungry-peas-sing.md b/.changeset/hungry-peas-sing.md deleted file mode 100644 index 8c39d33ddd..0000000000 --- a/.changeset/hungry-peas-sing.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-openapi': patch ---- - -Fixed bug in `jsonSchemaRefPlaceholderResolver` where relative $ref files were resolved through file system instead of base URL of file diff --git a/.changeset/itchy-impalas-fold.md b/.changeset/itchy-impalas-fold.md deleted file mode 100644 index 31840124ad..0000000000 --- a/.changeset/itchy-impalas-fold.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -'@backstage/plugin-events-backend-module-aws-sqs': patch -'@backstage/integration-aws-node': patch -'@backstage/plugin-kubernetes-backend': patch -'@backstage/backend-common': patch -'@backstage/plugin-techdocs-node': patch ---- - -Standardize `@aws-sdk` v3 versions diff --git a/.changeset/khaki-brooms-kiss.md b/.changeset/khaki-brooms-kiss.md deleted file mode 100644 index 76d4ff2cd2..0000000000 --- a/.changeset/khaki-brooms-kiss.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-explore': patch ---- - -Display the title of the entity on the explore card if present, otherwise stick to the name diff --git a/.changeset/late-lizards-unite.md b/.changeset/late-lizards-unite.md deleted file mode 100644 index bf0a03de12..0000000000 --- a/.changeset/late-lizards-unite.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/config-loader': patch ---- - -Added a new `noUndeclaredProperties` option to `SchemaLoader` to support enforcing that there are no extra keys when verifying config. diff --git a/.changeset/lazy-keys-work.md b/.changeset/lazy-keys-work.md deleted file mode 100644 index 8a01662929..0000000000 --- a/.changeset/lazy-keys-work.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-circleci': patch ---- - -Fixes row display for in progress jobs to not display trailing "took" diff --git a/.changeset/mighty-bears-glow.md b/.changeset/mighty-bears-glow.md deleted file mode 100644 index e540cdd8ae..0000000000 --- a/.changeset/mighty-bears-glow.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -'@backstage/plugin-search-react': minor -'@backstage/plugin-search': minor ---- - -Add close button & improve search input. - -MUI's Paper wrapping the SearchBar in the SearchPage was removed, we recommend users update their apps accordingly. - -SearchBarBase's TextField's label support added & aria-label uses label string if present, tests relying on the default placeholder value should still work unless custom placeholder was given. diff --git a/.changeset/mighty-cows-greet.md b/.changeset/mighty-cows-greet.md deleted file mode 100644 index 2e871db0c6..0000000000 --- a/.changeset/mighty-cows-greet.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-analytics-module-ga4': minor ---- - -Plugin provides Backstage Analytics API for Google Analytics 4. Once installed and configured, analytics events will be sent to GA4 as your users navigate and use your Backstage instance diff --git a/.changeset/modern-pumpkins-join.md b/.changeset/modern-pumpkins-join.md deleted file mode 100644 index dc0e4a6575..0000000000 --- a/.changeset/modern-pumpkins-join.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-app-api': patch ---- - -Switch `configServiceFactory` to use `ConfigSources` from `@backstage/config-loader` to load config. diff --git a/.changeset/moody-lizards-beam.md b/.changeset/moody-lizards-beam.md deleted file mode 100644 index 68fb9a9e40..0000000000 --- a/.changeset/moody-lizards-beam.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -'@backstage/config-loader': minor ---- - -Introduced a new config source system to replace `loadConfig`. There is a new `ConfigSource` interface along with utilities provided by `ConfigSources`, as well as a number of built-in configuration source implementations. The new system is more flexible and makes it easier to create new and reusable sources of configuration, such as loading configuration from secret providers. - -The following is an example of how to load configuration using the default behavior: - -```ts -const source = ConfigSources.default({ - argv: options?.argv, - remote: options?.remote, -}); -const config = await ConfigSources.toConfig(source); -``` - -The `ConfigSource` interface looks like this: - -```ts -export interface ConfigSource { - readConfigData(options?: ReadConfigDataOptions): AsyncConfigSourceIterator; -} -``` - -It is best implemented using an async iterator: - -```ts -class MyConfigSource implements ConfigSource { - async *readConfigData() { - yield { - config: [ - { - context: 'example', - data: { backend: { baseUrl: 'http://localhost' } }, - }, - ], - }; - } -} -``` diff --git a/.changeset/moody-shrimps-train.md b/.changeset/moody-shrimps-train.md deleted file mode 100644 index 397500e2cb..0000000000 --- a/.changeset/moody-shrimps-train.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend-module-gitlab': minor ---- - -Add a new scaffolder action for gitlab to ensure a group exists diff --git a/.changeset/new-roses-fail.md b/.changeset/new-roses-fail.md deleted file mode 100644 index 77495c5f54..0000000000 --- a/.changeset/new-roses-fail.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -'@backstage/plugin-org': patch ---- - -Changed the MembersListCard component to allow displaying aggregated members when viewing a group. Now, a toggle switch can be displayed that lets you switch between showing direct members and aggregated members. - -To enable this new feature, set the showAggregateMembersToggle prop on EntityMembersListCard: - -```jsx -// In packages/app/src/components/catalog/EntityPage.tsx -const groupPage = ( - // ... - - // ... -); -``` diff --git a/.changeset/nice-ants-type.md b/.changeset/nice-ants-type.md deleted file mode 100644 index 632d323213..0000000000 --- a/.changeset/nice-ants-type.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-aws': minor ---- - -**BREAKING**: AwsOrganizationCloudAccountProcessor.fromConfig now returns a promise instead of the instance directly. diff --git a/.changeset/nine-planes-carry.md b/.changeset/nine-planes-carry.md deleted file mode 100644 index 414cc25680..0000000000 --- a/.changeset/nine-planes-carry.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-azure-sites-backend': patch ---- - -Updated URL to `/health` and corrected typos in the `README.md` diff --git a/.changeset/nine-ties-smoke.md b/.changeset/nine-ties-smoke.md deleted file mode 100644 index f7ae8016be..0000000000 --- a/.changeset/nine-ties-smoke.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-home': patch ---- - -Bump to using the later v5 versions of `@rjsf/*` diff --git a/.changeset/ninety-eggs-lie.md b/.changeset/ninety-eggs-lie.md deleted file mode 100644 index 83b04b82af..0000000000 --- a/.changeset/ninety-eggs-lie.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/core-components': patch -'@backstage/theme': patch ---- - -Fix accessibility issue with Backstage Table's header style diff --git a/.changeset/ninety-mugs-sin.md b/.changeset/ninety-mugs-sin.md deleted file mode 100644 index 6b71a00667..0000000000 --- a/.changeset/ninety-mugs-sin.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-search-react': minor ---- - - accepts InputProp property that can override keys from default diff --git a/.changeset/olive-turkeys-switch.md b/.changeset/olive-turkeys-switch.md deleted file mode 100644 index d208f3b197..0000000000 --- a/.changeset/olive-turkeys-switch.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-github': patch ---- - -Fixed bug in queryWithPaging that caused secondary rate limit errors in GitHub with organizations having more than 1000 repositories. This change makes one request per second to avoid concurrency issues. diff --git a/.changeset/polite-dingos-train.md b/.changeset/polite-dingos-train.md deleted file mode 100644 index 49ac56a000..0000000000 --- a/.changeset/polite-dingos-train.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -'@backstage/plugin-kubernetes': minor ---- - -Added Pod logs components for Kubernetes plugin - -**BREAKING**: `kubernetesProxyApi` for custom plugins built with components from the Kubernetes plugin apis, `kubernetesProxyApi` should be added to the plugin's API list. - -``` -... -export const kubernetesPlugin = createPlugin({ - id: 'kubernetes', - apis: [ -... - createApiFactory({ - api: kubernetesProxyApiRef, - deps: { - kubernetesApi: kubernetesApiRef, - }, - factory: ({ kubernetesApi }) => - new KubernetesProxyClient({ - kubernetesApi, - }), - }), -``` - -**BREAKING**: `KubernetesDrawer` is now called `KubernetesStructuredMetadataTableDrawer` so that we can do more than just show `StructuredMetadataTable` - -`import { KubernetesDrawer } from "@backstage/plugin-kubernetes"` - -should now be: - -`import { KubernetesStructuredMetadataTableDrawer } from "@backstage/plugin-kubernetes"` diff --git a/.changeset/pre.json b/.changeset/pre.json deleted file mode 100644 index bec2a1e2df..0000000000 --- a/.changeset/pre.json +++ /dev/null @@ -1,308 +0,0 @@ -{ - "mode": "exit", - "tag": "next", - "initialVersions": { - "example-app": "0.2.82", - "@backstage/app-defaults": "1.3.0", - "example-backend": "0.2.82", - "@backstage/backend-app-api": "0.4.2", - "@backstage/backend-common": "0.18.4", - "@backstage/backend-defaults": "0.1.9", - "@backstage/backend-dev-utils": "0.1.1", - "example-backend-next": "0.0.10", - "@backstage/backend-openapi-utils": "0.0.1", - "@backstage/backend-plugin-api": "0.5.1", - "@backstage/backend-tasks": "0.5.1", - "@backstage/backend-test-utils": "0.1.36", - "@backstage/catalog-client": "1.4.1", - "@backstage/catalog-model": "1.3.0", - "@backstage/cli": "0.22.6", - "@backstage/cli-common": "0.1.12", - "@backstage/cli-node": "0.1.0", - "@backstage/codemods": "0.1.44", - "@backstage/config": "1.0.7", - "@backstage/config-loader": "1.2.0", - "@backstage/core-app-api": "1.7.0", - "@backstage/core-components": "0.13.0", - "@backstage/core-plugin-api": "1.5.1", - "@backstage/create-app": "0.5.0", - "@backstage/dev-utils": "1.0.14", - "e2e-test": "0.2.2", - "@backstage/errors": "1.1.5", - "@backstage/eslint-plugin": "0.1.3", - "@backstage/integration": "1.4.4", - "@backstage/integration-aws-node": "0.1.2", - "@backstage/integration-react": "1.1.12", - "@backstage/release-manifests": "0.0.9", - "@backstage/repo-tools": "0.2.0", - "@techdocs/cli": "1.4.1", - "techdocs-cli-embedded-app": "0.2.81", - "@backstage/test-utils": "1.3.0", - "@backstage/theme": "0.2.19", - "@backstage/types": "1.0.2", - "@backstage/version-bridge": "1.0.4", - "@backstage/plugin-adr": "0.5.0", - "@backstage/plugin-adr-backend": "0.3.2", - "@backstage/plugin-adr-common": "0.2.8", - "@backstage/plugin-airbrake": "0.3.17", - "@backstage/plugin-airbrake-backend": "0.2.17", - "@backstage/plugin-allure": "0.1.33", - "@backstage/plugin-analytics-module-ga": "0.1.28", - "@backstage/plugin-apache-airflow": "0.2.10", - "@backstage/plugin-api-docs": "0.9.2", - "@backstage/plugin-api-docs-module-protoc-gen-doc": "0.1.2", - "@backstage/plugin-apollo-explorer": "0.1.10", - "@backstage/plugin-app-backend": "0.3.44", - "@backstage/plugin-auth-backend": "0.18.2", - "@backstage/plugin-auth-node": "0.2.13", - "@backstage/plugin-azure-devops": "0.2.8", - "@backstage/plugin-azure-devops-backend": "0.3.23", - "@backstage/plugin-azure-devops-common": "0.3.0", - "@backstage/plugin-azure-sites": "0.1.6", - "@backstage/plugin-azure-sites-backend": "0.1.6", - "@backstage/plugin-azure-sites-common": "0.1.0", - "@backstage/plugin-badges": "0.2.41", - "@backstage/plugin-badges-backend": "0.1.38", - "@backstage/plugin-bazaar": "0.2.7", - "@backstage/plugin-bazaar-backend": "0.2.7", - "@backstage/plugin-bitbucket-cloud-common": "0.2.5", - "@backstage/plugin-bitrise": "0.1.44", - "@backstage/plugin-catalog": "1.10.0", - "@backstage/plugin-catalog-backend": "1.9.0", - "@backstage/plugin-catalog-backend-module-aws": "0.1.18", - "@backstage/plugin-catalog-backend-module-azure": "0.1.15", - "@backstage/plugin-catalog-backend-module-bitbucket": "0.2.11", - "@backstage/plugin-catalog-backend-module-bitbucket-cloud": "0.1.11", - "@backstage/plugin-catalog-backend-module-bitbucket-server": "0.1.9", - "@backstage/plugin-catalog-backend-module-gerrit": "0.1.12", - "@backstage/plugin-catalog-backend-module-github": "0.2.7", - "@backstage/plugin-catalog-backend-module-gitlab": "0.2.0", - "@backstage/plugin-catalog-backend-module-incremental-ingestion": "0.3.1", - "@backstage/plugin-catalog-backend-module-ldap": "0.5.11", - "@backstage/plugin-catalog-backend-module-msgraph": "0.5.3", - "@backstage/plugin-catalog-backend-module-openapi": "0.1.10", - "@backstage/plugin-catalog-backend-module-puppetdb": "0.1.1", - "@backstage/plugin-catalog-common": "1.0.13", - "@internal/plugin-catalog-customized": "0.0.9", - "@backstage/plugin-catalog-graph": "0.2.29", - "@backstage/plugin-catalog-graphql": "0.3.20", - "@backstage/plugin-catalog-import": "0.9.7", - "@backstage/plugin-catalog-node": "1.3.5", - "@backstage/plugin-catalog-react": "1.5.0", - "@backstage/plugin-cicd-statistics": "0.1.19", - "@backstage/plugin-cicd-statistics-module-gitlab": "0.1.13", - "@backstage/plugin-circleci": "0.3.17", - "@backstage/plugin-cloudbuild": "0.3.17", - "@backstage/plugin-code-climate": "0.1.17", - "@backstage/plugin-code-coverage": "0.2.10", - "@backstage/plugin-code-coverage-backend": "0.2.10", - "@backstage/plugin-codescene": "0.1.12", - "@backstage/plugin-config-schema": "0.1.40", - "@backstage/plugin-cost-insights": "0.12.6", - "@backstage/plugin-cost-insights-common": "0.1.1", - "@backstage/plugin-dynatrace": "4.0.0", - "@backstage/plugin-entity-feedback": "0.2.0", - "@backstage/plugin-entity-feedback-backend": "0.1.2", - "@backstage/plugin-entity-feedback-common": "0.1.1", - "@backstage/plugin-entity-validation": "0.1.2", - "@backstage/plugin-events-backend": "0.2.5", - "@backstage/plugin-events-backend-module-aws-sqs": "0.1.6", - "@backstage/plugin-events-backend-module-azure": "0.1.6", - "@backstage/plugin-events-backend-module-bitbucket-cloud": "0.1.6", - "@backstage/plugin-events-backend-module-gerrit": "0.1.6", - "@backstage/plugin-events-backend-module-github": "0.1.6", - "@backstage/plugin-events-backend-module-gitlab": "0.1.6", - "@backstage/plugin-events-backend-test-utils": "0.1.6", - "@backstage/plugin-events-node": "0.2.5", - "@internal/plugin-todo-list": "1.0.12", - "@internal/plugin-todo-list-backend": "1.0.12", - "@internal/plugin-todo-list-common": "1.0.10", - "@backstage/plugin-explore": "0.4.2", - "@backstage/plugin-explore-backend": "0.0.6", - "@backstage/plugin-explore-common": "0.0.1", - "@backstage/plugin-explore-react": "0.0.28", - "@backstage/plugin-firehydrant": "0.2.1", - "@backstage/plugin-fossa": "0.2.49", - "@backstage/plugin-gcalendar": "0.3.13", - "@backstage/plugin-gcp-projects": "0.3.36", - "@backstage/plugin-git-release-manager": "0.3.30", - "@backstage/plugin-github-actions": "0.5.17", - "@backstage/plugin-github-deployments": "0.1.48", - "@backstage/plugin-github-issues": "0.2.6", - "@backstage/plugin-github-pull-requests-board": "0.1.11", - "@backstage/plugin-gitops-profiles": "0.3.35", - "@backstage/plugin-gocd": "0.1.23", - "@backstage/plugin-graphiql": "0.2.49", - "@backstage/plugin-graphql-backend": "0.1.34", - "@backstage/plugin-graphql-voyager": "0.1.2", - "@backstage/plugin-home": "0.5.0", - "@backstage/plugin-ilert": "0.2.6", - "@backstage/plugin-jenkins": "0.7.16", - "@backstage/plugin-jenkins-backend": "0.1.34", - "@backstage/plugin-jenkins-common": "0.1.15", - "@backstage/plugin-kafka": "0.3.17", - "@backstage/plugin-kafka-backend": "0.2.37", - "@backstage/plugin-kubernetes": "0.8.0", - "@backstage/plugin-kubernetes-backend": "0.10.0", - "@backstage/plugin-kubernetes-common": "0.6.2", - "@backstage/plugin-lighthouse": "0.4.2", - "@backstage/plugin-lighthouse-backend": "0.2.0", - "@backstage/plugin-lighthouse-common": "0.1.1", - "@backstage/plugin-linguist": "0.1.2", - "@backstage/plugin-linguist-backend": "0.2.1", - "@backstage/plugin-linguist-common": "0.1.0", - "@backstage/plugin-microsoft-calendar": "0.1.2", - "@backstage/plugin-newrelic": "0.3.35", - "@backstage/plugin-newrelic-dashboard": "0.2.10", - "@backstage/plugin-octopus-deploy": "0.1.1", - "@backstage/plugin-org": "0.6.7", - "@backstage/plugin-org-react": "0.1.6", - "@backstage/plugin-pagerduty": "0.5.10", - "@backstage/plugin-periskop": "0.1.15", - "@backstage/plugin-periskop-backend": "0.1.15", - "@backstage/plugin-permission-backend": "0.5.19", - "@backstage/plugin-permission-common": "0.7.5", - "@backstage/plugin-permission-node": "0.7.7", - "@backstage/plugin-permission-react": "0.4.12", - "@backstage/plugin-playlist": "0.1.8", - "@backstage/plugin-playlist-backend": "0.3.0", - "@backstage/plugin-playlist-common": "0.1.6", - "@backstage/plugin-proxy-backend": "0.2.38", - "@backstage/plugin-puppetdb": "0.1.0", - "@backstage/plugin-rollbar": "0.4.17", - "@backstage/plugin-rollbar-backend": "0.1.41", - "@backstage/plugin-scaffolder": "1.13.0", - "@backstage/plugin-scaffolder-backend": "1.13.0", - "@backstage/plugin-scaffolder-backend-module-confluence-to-markdown": "0.1.0", - "@backstage/plugin-scaffolder-backend-module-cookiecutter": "0.2.19", - "@backstage/plugin-scaffolder-backend-module-gitlab": "0.1.0", - "@backstage/plugin-scaffolder-backend-module-rails": "0.4.12", - "@backstage/plugin-scaffolder-backend-module-sentry": "0.1.4", - "@backstage/plugin-scaffolder-backend-module-yeoman": "0.2.17", - "@backstage/plugin-scaffolder-common": "1.2.7", - "@backstage/plugin-scaffolder-node": "0.1.2", - "@backstage/plugin-scaffolder-react": "1.3.0", - "@backstage/plugin-search": "1.2.0", - "@backstage/plugin-search-backend": "1.3.0", - "@backstage/plugin-search-backend-module-catalog": "0.1.0", - "@backstage/plugin-search-backend-module-elasticsearch": "1.2.0", - "@backstage/plugin-search-backend-module-explore": "0.1.0", - "@backstage/plugin-search-backend-module-pg": "0.5.5", - "@backstage/plugin-search-backend-module-techdocs": "0.1.0", - "@backstage/plugin-search-backend-node": "1.2.0", - "@backstage/plugin-search-common": "1.2.3", - "@backstage/plugin-search-react": "1.5.2", - "@backstage/plugin-sentry": "0.5.2", - "@backstage/plugin-shortcuts": "0.3.9", - "@backstage/plugin-sonarqube": "0.6.6", - "@backstage/plugin-sonarqube-backend": "0.1.9", - "@backstage/plugin-sonarqube-react": "0.1.5", - "@backstage/plugin-splunk-on-call": "0.4.6", - "@backstage/plugin-stack-overflow": "0.1.13", - "@backstage/plugin-stack-overflow-backend": "0.2.0", - "@backstage/plugin-stackstorm": "0.1.1", - "@backstage/plugin-tech-insights": "0.3.9", - "@backstage/plugin-tech-insights-backend": "0.5.10", - "@backstage/plugin-tech-insights-backend-module-jsonfc": "0.1.28", - "@backstage/plugin-tech-insights-common": "0.2.10", - "@backstage/plugin-tech-insights-node": "0.4.2", - "@backstage/plugin-tech-radar": "0.6.3", - "@backstage/plugin-techdocs": "1.6.1", - "@backstage/plugin-techdocs-addons-test-utils": "1.0.12", - "@backstage/plugin-techdocs-backend": "1.6.1", - "@backstage/plugin-techdocs-module-addons-contrib": "1.0.12", - "@backstage/plugin-techdocs-node": "1.7.0", - "@backstage/plugin-techdocs-react": "1.1.5", - "@backstage/plugin-todo": "0.2.19", - "@backstage/plugin-todo-backend": "0.1.41", - "@backstage/plugin-user-settings": "0.7.2", - "@backstage/plugin-user-settings-backend": "0.1.8", - "@backstage/plugin-vault": "0.1.11", - "@backstage/plugin-vault-backend": "0.3.0", - "@backstage/plugin-xcmetrics": "0.2.37", - "@backstage/plugin-analytics-module-ga4": "0.0.0", - "@backstage/plugin-devtools": "0.0.0", - "@backstage/plugin-devtools-backend": "0.0.0", - "@backstage/plugin-devtools-common": "0.0.0" - }, - "changesets": [ - "afraid-shirts-train", - "backend-like-a-tattoo", - "beige-tigers-matter", - "blue-eyes-run", - "brown-eyes-yell", - "brown-keys-raise", - "calm-snails-trade", - "calm-wolves-taste", - "chilled-goats-jump", - "chilled-pants-wonder", - "chilled-queens-wonder", - "chilly-fireants-type", - "chilly-taxis-shop", - "clean-lobsters-brake", - "cold-drinks-exercise", - "cold-laws-turn", - "cool-dingos-repair", - "create-app-1682437922", - "curly-rats-fold", - "curvy-months-appear", - "dry-boats-sniff", - "dull-wombats-stare", - "eighty-olives-live", - "extragavent-fast-fly", - "fair-suits-warn", - "fifty-grapes-explode", - "fifty-laws-count", - "five-tigers-whisper", - "fluffy-crabs-reply", - "fluffy-mirrors-happen", - "fresh-moons-unite", - "funny-trains-sniff", - "good-lions-approve", - "green-cheetahs-cover", - "healthy-ladybugs-chew", - "heavy-penguins-burn", - "honest-countries-deny", - "honest-turkeys-learn", - "hungry-foxes-divide", - "hungry-peas-sing", - "khaki-brooms-kiss", - "lazy-keys-work", - "mighty-bears-glow", - "mighty-cows-greet", - "modern-pumpkins-join", - "moody-lizards-beam", - "moody-shrimps-train", - "new-roses-fail", - "nine-ties-smoke", - "ninety-eggs-lie", - "ninety-mugs-sin", - "olive-turkeys-switch", - "polite-dingos-train", - "pretty-gifts-greet", - "quick-flies-guess", - "quiet-bikes-smash", - "quiet-stingrays-fly", - "rare-elephants-arrive", - "red-cheetahs-invite", - "rotten-chefs-jog", - "serious-hornets-remember", - "six-mails-shout", - "slimy-turkeys-return", - "soft-readers-exist", - "stupid-seas-stare", - "swift-fishes-run", - "tame-games-rule", - "thick-parents-pump", - "thick-pugs-rush", - "thin-ways-exist", - "thirty-jobs-sort", - "tough-moles-whisper", - "twelve-zebras-repair", - "two-gorillas-drop", - "unlucky-deers-teach", - "unlucky-plants-give", - "warm-lamps-tease", - "wet-dolphins-love" - ] -} diff --git a/.changeset/pretty-gifts-greet.md b/.changeset/pretty-gifts-greet.md deleted file mode 100644 index 965f714a61..0000000000 --- a/.changeset/pretty-gifts-greet.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-home': patch ---- - -Add missing @rjsf/core dependency diff --git a/.changeset/proud-chairs-sleep.md b/.changeset/proud-chairs-sleep.md deleted file mode 100644 index 6df02d052d..0000000000 --- a/.changeset/proud-chairs-sleep.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-search-react': patch ---- - -`SearchPagination` now automatically resets the page cursor when the page limit is changed diff --git a/.changeset/quick-flies-guess.md b/.changeset/quick-flies-guess.md deleted file mode 100644 index 73e5589b98..0000000000 --- a/.changeset/quick-flies-guess.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/core-app-api': patch ---- - -Added `FrontendHostDiscovery` for config driven discovery implementation diff --git a/.changeset/quiet-bikes-smash.md b/.changeset/quiet-bikes-smash.md deleted file mode 100644 index ca751adaf7..0000000000 --- a/.changeset/quiet-bikes-smash.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-openapi-utils': patch ---- - -Corrected resolution of parameter nested schema to use central schemas. diff --git a/.changeset/quiet-stingrays-fly.md b/.changeset/quiet-stingrays-fly.md deleted file mode 100644 index 536ee18a6f..0000000000 --- a/.changeset/quiet-stingrays-fly.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-azure-devops': minor ---- - -The getBuildRuns function now checks contains multiple comma-separated builds and splits them to send multiple requests for each and concatenates the results. diff --git a/.changeset/rare-elephants-arrive.md b/.changeset/rare-elephants-arrive.md deleted file mode 100644 index d27f763d1f..0000000000 --- a/.changeset/rare-elephants-arrive.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-puppetdb': patch ---- - -Fixes import paths and updates documentation diff --git a/.changeset/real-baboons-vanish.md b/.changeset/real-baboons-vanish.md deleted file mode 100644 index ca09cc9bf3..0000000000 --- a/.changeset/real-baboons-vanish.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@backstage/plugin-jenkins-backend': minor -'@backstage/plugin-jenkins': minor ---- - -Updated rebuild to use Jenkins API replay build, which works for Jenkins jobs that have required parameters. Jenkins SDK could not be used for this request because it does not have support for replay. - -Added link to view build in Jenkins CI/CD table action column. diff --git a/.changeset/red-cheetahs-invite.md b/.changeset/red-cheetahs-invite.md deleted file mode 100644 index ef1711c761..0000000000 --- a/.changeset/red-cheetahs-invite.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-octopus-deploy': minor ---- - -Added support for Octopus Deploy spaces. The octopus.com/project-id annotation can now (optionally) be prefixed by a space identifier, for example. Spaces-1/Projects-102. -Also note that some of this plugins exported API's have changed to accommodate this change, changing from separate arguments to a single object. diff --git a/.changeset/red-parrots-attack.md b/.changeset/red-parrots-attack.md deleted file mode 100644 index 1530c17c8b..0000000000 --- a/.changeset/red-parrots-attack.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-gitlab': patch ---- - -Fix a corner case where returned users are null for bots diff --git a/.changeset/rotten-chefs-jog.md b/.changeset/rotten-chefs-jog.md deleted file mode 100644 index 120520c087..0000000000 --- a/.changeset/rotten-chefs-jog.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -'@backstage/plugin-scaffolder-react': patch -'@backstage/plugin-scaffolder': patch ---- - -Improvements to the `scaffolder/next` buttons UX: - -- Added padding around the "Create" button in the `Stepper` component -- Added a button bar that includes the "Cancel" and "Start Over" buttons to the `OngoingTask` component. The state of these buttons match their existing counter parts in the Context Menu -- Added a "Show Button Bar"/"Hide Button Bar" item to the `ContextMenu` component diff --git a/.changeset/serious-hornets-remember.md b/.changeset/serious-hornets-remember.md deleted file mode 100644 index 05221cd055..0000000000 --- a/.changeset/serious-hornets-remember.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-circleci': patch ---- - -Hide empty time field data for queued builds which haven't started yet diff --git a/.changeset/serious-phones-flash.md b/.changeset/serious-phones-flash.md deleted file mode 100644 index 4a4afe5d4e..0000000000 --- a/.changeset/serious-phones-flash.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-techdocs-module-addons-contrib': patch ---- - -Show cursor pointer when hovering on lightbox diff --git a/.changeset/shy-worms-enjoy.md b/.changeset/shy-worms-enjoy.md deleted file mode 100644 index cbfb2b5f7b..0000000000 --- a/.changeset/shy-worms-enjoy.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-user-settings': patch -'@backstage/plugin-auth-backend': patch ---- - -Fix config schema definition. diff --git a/.changeset/six-mails-shout.md b/.changeset/six-mails-shout.md deleted file mode 100644 index f803e0858e..0000000000 --- a/.changeset/six-mails-shout.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-shortcuts': patch ---- - -Marked `LocalStoredShortcuts` as deprecated, replacing it with `DefaultShortcutsApi` whose naming more clearly suggests that the shortcuts aren't necessarily stored locally (it depends on the storage implementation). diff --git a/.changeset/sixty-falcons-protect.md b/.changeset/sixty-falcons-protect.md deleted file mode 100644 index 0bc77bfbd9..0000000000 --- a/.changeset/sixty-falcons-protect.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-badges-backend': patch ---- - -Removed some unused dependencies diff --git a/.changeset/slimy-turkeys-return.md b/.changeset/slimy-turkeys-return.md deleted file mode 100644 index db10000509..0000000000 --- a/.changeset/slimy-turkeys-return.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -'@backstage/plugin-permission-node': patch ---- - -`createPermissionIntegrationRouter` now accepts rules and permissions for multiple resource types. Example: - -```typescript -createPermissionIntegrationRouter({ - resources: [ - { - resourceType: 'resourceType-1', - permissions: permissionsResourceType1, - rules: rulesResourceType1, - }, - { - resourceType: 'resourceType-2', - permissions: permissionsResourceType2, - rules: rulesResourceType2, - }, - ], -}); -``` diff --git a/.changeset/soft-readers-exist.md b/.changeset/soft-readers-exist.md deleted file mode 100644 index 8fce13caca..0000000000 --- a/.changeset/soft-readers-exist.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-common': patch ---- - -Added `HostDiscovery` to supersede deprecated `SingleHostDiscovery` (deprecated due to name) diff --git a/.changeset/spicy-spies-warn.md b/.changeset/spicy-spies-warn.md deleted file mode 100644 index 3ed26a2cc3..0000000000 --- a/.changeset/spicy-spies-warn.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/plugin-scaffolder-common': minor ---- - -Expose scaffolder permissions in new sub-aggregations. - -In addition to exporting a list of all scaffolder permissions in `scaffolderPermissions`, scaffolder-common now exports `scaffolderTemplatePermissions` and `scaffolderActionPermissions`, which contain subsets of the scaffolder permissions separated by resource type. diff --git a/.changeset/spotty-walls-serve.md b/.changeset/spotty-walls-serve.md deleted file mode 100644 index 9b0da31a5f..0000000000 --- a/.changeset/spotty-walls-serve.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-kubernetes-backend': patch ---- - -Fixed a bug in the Kubernetes proxy endpoint where requests to clusters configured with client-side auth providers would always fail with a 500 status. diff --git a/.changeset/stupid-seas-stare.md b/.changeset/stupid-seas-stare.md deleted file mode 100644 index f3d4f5e1f7..0000000000 --- a/.changeset/stupid-seas-stare.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/core-components': patch ---- - -Fix accessibility issue on controlled select input on tab navigation + keyboard enter/space action. diff --git a/.changeset/swift-fishes-run.md b/.changeset/swift-fishes-run.md deleted file mode 100644 index ee3d1217ed..0000000000 --- a/.changeset/swift-fishes-run.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': patch ---- - -Bump minimum required version of `vm2` to be 3.9.17 diff --git a/.changeset/swift-students-type.md b/.changeset/swift-students-type.md deleted file mode 100644 index 577fbeb8b6..0000000000 --- a/.changeset/swift-students-type.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-openapi-utils': patch ---- - -Updated README to reflect changes in `@backstage/repo-tools`. diff --git a/.changeset/thick-parents-pump.md b/.changeset/thick-parents-pump.md deleted file mode 100644 index ba65e10610..0000000000 --- a/.changeset/thick-parents-pump.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': patch -'@backstage/plugin-scaffolder-node': patch ---- - -Update typing for `RouterOptions::actions` and `ScaffolderActionsExtensionPoint::addActions` to allow any kind of action being assigned to it. diff --git a/.changeset/thick-pugs-rush.md b/.changeset/thick-pugs-rush.md deleted file mode 100644 index 7f0171eb83..0000000000 --- a/.changeset/thick-pugs-rush.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-auth-backend': patch ---- - -Added a persistent session store through the database diff --git a/.changeset/thin-ways-exist.md b/.changeset/thin-ways-exist.md deleted file mode 100644 index fd1ecb62a4..0000000000 --- a/.changeset/thin-ways-exist.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-search-react': patch ---- - -Fix text-overflow UI issue for Lifecycle spans in SearchFilter checkbox labels. diff --git a/.changeset/thirty-jobs-sort.md b/.changeset/thirty-jobs-sort.md deleted file mode 100644 index 8a40302502..0000000000 --- a/.changeset/thirty-jobs-sort.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-kubernetes-common': patch ---- - -AKS access tokens can now be sent over the wire to the Kubernetes backend. diff --git a/.changeset/three-tools-pump.md b/.changeset/three-tools-pump.md deleted file mode 100644 index ac9d3c9909..0000000000 --- a/.changeset/three-tools-pump.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/core-components': patch ---- - -Fix accessibility issue with Edit Metadata Link on screen readers missing notice about opening in a new tab. diff --git a/.changeset/tiny-crews-pull.md b/.changeset/tiny-crews-pull.md deleted file mode 100644 index 8d499ac5e6..0000000000 --- a/.changeset/tiny-crews-pull.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -Deprecated the use of React 16 diff --git a/.changeset/tough-moles-whisper.md b/.changeset/tough-moles-whisper.md deleted file mode 100644 index 14dd76c116..0000000000 --- a/.changeset/tough-moles-whisper.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-tech-radar': patch ---- - -Added the ability to display a timeline to each entry in the details box diff --git a/.changeset/twelve-birds-boil.md b/.changeset/twelve-birds-boil.md deleted file mode 100644 index 04317c26cd..0000000000 --- a/.changeset/twelve-birds-boil.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-adr': minor ---- - -render SupportButton only if config is set diff --git a/.changeset/twelve-zebras-repair.md b/.changeset/twelve-zebras-repair.md deleted file mode 100644 index 8d74080c38..0000000000 --- a/.changeset/twelve-zebras-repair.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-search-backend': patch ---- - -Added an OpenAPI 3.0 spec and enforced schema-first model on the router. diff --git a/.changeset/two-gorillas-drop.md b/.changeset/two-gorillas-drop.md deleted file mode 100644 index 72de66dbff..0000000000 --- a/.changeset/two-gorillas-drop.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-explore': patch ---- - -Updated the example code in the "Customization" section of the README to make the imports match the components used. diff --git a/.changeset/unlucky-deers-teach.md b/.changeset/unlucky-deers-teach.md deleted file mode 100644 index b773e9090f..0000000000 --- a/.changeset/unlucky-deers-teach.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-github': minor ---- - -Implement events support for `GithubMultiOrgEntityProvider` - -**BREAKING:** Passing in a custom `teamTransformer` will now correctly completely override the default transformer behavior diff --git a/.changeset/unlucky-plants-give.md b/.changeset/unlucky-plants-give.md deleted file mode 100644 index 504b475727..0000000000 --- a/.changeset/unlucky-plants-give.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/core-components': patch ---- - -Start capturing sidebar click events in analytics by default. diff --git a/.changeset/warm-lamps-tease.md b/.changeset/warm-lamps-tease.md deleted file mode 100644 index 954197dd13..0000000000 --- a/.changeset/warm-lamps-tease.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/plugin-kubernetes-backend': minor ---- - -Update `aws-sdk` client from v2 to v3. - -**BREAKING**: The `AwsIamKubernetesAuthTranslator` class no longer exposes the following methods `awsGetCredentials`, `getBearerToken`, `getCredentials` and `validCredentials`. There is no replacement for these methods. diff --git a/.changeset/wet-dolphins-love.md b/.changeset/wet-dolphins-love.md deleted file mode 100644 index 637d26ca70..0000000000 --- a/.changeset/wet-dolphins-love.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-github': patch ---- - -Updated the `team.edited` event emitted from `GithubOrgEntityProvider` to also include teams description. diff --git a/docs/releases/v1.14.0-changelog.md b/docs/releases/v1.14.0-changelog.md new file mode 100644 index 0000000000..eae0d82e71 --- /dev/null +++ b/docs/releases/v1.14.0-changelog.md @@ -0,0 +1,2795 @@ +# Release v1.14.0 + +## @backstage/config-loader@1.3.0 + +### Minor Changes + +- 201206132da: Introduced a new config source system to replace `loadConfig`. There is a new `ConfigSource` interface along with utilities provided by `ConfigSources`, as well as a number of built-in configuration source implementations. The new system is more flexible and makes it easier to create new and reusable sources of configuration, such as loading configuration from secret providers. + + The following is an example of how to load configuration using the default behavior: + + ```ts + const source = ConfigSources.default({ + argv: options?.argv, + remote: options?.remote, + }); + const config = await ConfigSources.toConfig(source); + ``` + + The `ConfigSource` interface looks like this: + + ```ts + export interface ConfigSource { + readConfigData(options?: ReadConfigDataOptions): AsyncConfigSourceIterator; + } + ``` + + It is best implemented using an async iterator: + + ```ts + class MyConfigSource implements ConfigSource { + async *readConfigData() { + yield { + config: [ + { + context: 'example', + data: { backend: { baseUrl: 'http://localhost' } }, + }, + ], + }; + } + } + ``` + +### Patch Changes + +- 7c116bcac7f: Fixed the way that some request errors are thrown +- 473db605a4f: Added a new `noUndeclaredProperties` option to `SchemaLoader` to support enforcing that there are no extra keys when verifying config. +- Updated dependencies + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + +## @backstage/core-app-api@1.8.0 + +### Minor Changes + +- c89437db899: The analytics' `navigate` event will now include the route parameters as attributes of the navigate event + +### Patch Changes + +- b645d70034a: Fixed a bug in the Azure auth provider which prevented getting access tokens with multiple scopes for one resource +- 42d817e76ab: Added `FrontendHostDiscovery` for config driven discovery implementation +- Updated dependencies + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.4 + +## @backstage/repo-tools@0.3.0 + +### Minor Changes + +- 799c33047ed: **BREAKING**: The OpenAPI commands are now found within the `schema openapi` sub-command. For example `yarn backstage-repo-tools schema:openapi:verify` is now `yarn backstage-repo-tools schema openapi verify`. +- 27956d78671: Generated OpenAPI files now have a `.generated.ts` file name and a warning header at the top, to highlight that they should not be edited by hand. + +### Patch Changes + +- Updated dependencies + - @backstage/cli-common@0.1.12 + - @backstage/cli-node@0.1.0 + - @backstage/errors@1.1.5 + +## @backstage/theme@0.3.0 + +### Minor Changes + +- 98c0c199b15: Updates light theme's primary foreground and `running` status indicator colours to meet WCAG. Previously #2E77D0 changed to #1F5493. + +### Patch Changes + +- 83b45f9df50: Fix accessibility issue with Backstage Table's header style + +## @backstage/plugin-adr@0.6.0 + +### Minor Changes + +- b12cd5dc221: render SupportButton only if config is set + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/plugin-search-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/integration-react@1.1.13 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-adr-common@0.2.9 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-analytics-module-ga4@0.1.0 + +### Minor Changes + +- 22b46f7f562: Plugin provides Backstage Analytics API for Google Analytics 4. Once installed and configured, analytics events will be sent to GA4 as your users navigate and use your Backstage instance + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-azure-devops@0.3.0 + +### Minor Changes + +- 877df261085: The getBuildRuns function now checks contains multiple comma-separated builds and splits them to send multiple requests for each and concatenates the results. + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-azure-devops-common@0.3.0 + +## @backstage/plugin-badges-backend@0.2.0 + +### Minor Changes + +- a0108c49774: Fixing badges-backend plugin to get a token from the TokenManager instead of parsing the request header. Hence, it's now possible to disable the authMiddleware for the badges-backend plugin to expose publicly the badges. + + Implementing an obfuscation feature to protect an open badges endpoint from being enumerated. The feature is disabled by default and the change is compatible with the previous version. + + **BREAKING**: `createRouter` now require that `tokenManager`, `logger`, and `identityApi`, are passed in as options. + +### Patch Changes + +- 0cd552c28d8: Removed some unused dependencies +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/plugin-catalog@1.11.0 + +### Minor Changes + +- 2258dcae970: Added an entity namespace filter and column on the default catalog page. + + If you have a custom version of the catalog page, you can add this filter in your CatalogPage code: + + ```ts + + + + + + /* if you want namespace picker */ + + + + + + + ``` + + The namespace column can be added using `createNamespaceColumn();`. This is only needed if you customized the columns for CatalogTable. + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/plugin-search-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/integration-react@1.1.13 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-catalog-backend-module-aws@0.2.0 + +### Minor Changes + +- 1a3b5f1e390: **BREAKING**: AwsOrganizationCloudAccountProcessor.fromConfig now returns a promise instead of the instance directly. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/integration-aws-node@0.1.3 + - @backstage/plugin-kubernetes-common@0.6.3 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + +## @backstage/plugin-catalog-backend-module-github@0.3.0 + +### Minor Changes + +- 970678adbe2: Implement events support for `GithubMultiOrgEntityProvider` + + **BREAKING:** Passing in a custom `teamTransformer` will now correctly completely override the default transformer behavior + +### Patch Changes + +- 78bb674a713: Fixed bug in queryWithPaging that caused secondary rate limit errors in GitHub with organizations having more than 1000 repositories. This change makes one request per second to avoid concurrency issues. +- bd101cefd37: Updated the `team.edited` event emitted from `GithubOrgEntityProvider` to also include teams description. +- Updated dependencies + - @backstage/plugin-catalog-backend@1.9.1 + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-events-node@0.2.6 + +## @backstage/plugin-catalog-react@1.6.0 + +### Minor Changes + +- 2258dcae970: Added an entity namespace filter and column on the default catalog page. + + If you have a custom version of the catalog page, you can add this filter in your CatalogPage code: + + ```ts + + + + + + /* if you want namespace picker */ + + + + + + + ``` + + The namespace column can be added using `createNamespaceColumn();`. This is only needed if you customized the columns for CatalogTable. + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/integration@1.4.5 + - @backstage/core-components@0.13.1 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.4 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-permission-react@0.4.12 + +## @backstage/plugin-devtools@0.1.0 + +### Minor Changes + +- 347aeca204c: Introduced the DevTools plugin, checkout the plugin's [`README.md`](https://github.com/backstage/backstage/tree/master/plugins/devtools) for more details! + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-devtools-common@0.1.0 + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-permission-react@0.4.12 + +## @backstage/plugin-devtools-backend@0.1.0 + +### Minor Changes + +- 347aeca204c: Introduced the DevTools plugin, checkout the plugin's [`README.md`](https://github.com/backstage/backstage/tree/master/plugins/devtools) for more details! + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-devtools-common@0.1.0 + - @backstage/backend-common@0.18.5 + - @backstage/config-loader@1.3.0 + - @backstage/plugin-permission-node@0.7.8 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-permission-common@0.7.5 + +## @backstage/plugin-devtools-common@0.1.0 + +### Minor Changes + +- 347aeca204c: Introduced the DevTools plugin, checkout the plugin's [`README.md`](https://github.com/backstage/backstage/tree/master/plugins/devtools) for more details! + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.0.2 + - @backstage/plugin-permission-common@0.7.5 + +## @backstage/plugin-events-backend-module-aws-sqs@0.2.0 + +### Minor Changes + +- 2c5661f3899: Allow endpoint configuration for sqs, enabling use of localstack for testing. + +### Patch Changes + +- 3659c71c5d9: Standardize `@aws-sdk` v3 versions +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-events-node@0.2.6 + +## @backstage/plugin-jenkins@0.8.0 + +### Minor Changes + +- cf95c5137c9: Updated rebuild to use Jenkins API replay build, which works for Jenkins jobs that have required parameters. Jenkins SDK could not be used for this request because it does not have support for replay. + + Added link to view build in Jenkins CI/CD table action column. + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-jenkins-common@0.1.15 + +## @backstage/plugin-jenkins-backend@0.2.0 + +### Minor Changes + +- cf95c5137c9: Updated rebuild to use Jenkins API replay build, which works for Jenkins jobs that have required parameters. Jenkins SDK could not be used for this request because it does not have support for replay. + + Added link to view build in Jenkins CI/CD table action column. + +### Patch Changes + +- 670a2dd6f4e: Fix handling of slashes in branch names +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-jenkins-common@0.1.15 + - @backstage/plugin-permission-common@0.7.5 + +## @backstage/plugin-kubernetes@0.9.0 + +### Minor Changes + +- 280ec10c18e: Added Pod logs components for Kubernetes plugin + + **BREAKING**: `kubernetesProxyApi` for custom plugins built with components from the Kubernetes plugin apis, `kubernetesProxyApi` should be added to the plugin's API list. + + ... + export const kubernetesPlugin = createPlugin({ + id: 'kubernetes', + apis: [ + ... + createApiFactory({ + api: kubernetesProxyApiRef, + deps: { + kubernetesApi: kubernetesApiRef, + }, + factory: ({ kubernetesApi }) => + new KubernetesProxyClient({ + kubernetesApi, + }), + }), + + **BREAKING**: `KubernetesDrawer` is now called `KubernetesStructuredMetadataTableDrawer` so that we can do more than just show `StructuredMetadataTable` + + `import { KubernetesDrawer } from "@backstage/plugin-kubernetes"` + + should now be: + + `import { KubernetesStructuredMetadataTableDrawer } from "@backstage/plugin-kubernetes"` + +### Patch Changes + +- c7bad1005ba: The Kubernetes plugin now requests AKS access tokens from Azure when retrieving + objects from clusters configured with `authProvider: aks` and sets `auth.aks` in + its request bodies appropriately. +- a160e02c3d7: Omit managed fields in the Kubernetes resource YAML display. +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/plugin-kubernetes-common@0.6.3 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + +## @backstage/plugin-kubernetes-backend@0.11.0 + +### Minor Changes + +- f4114f02d49: Allow fetching pod metrics limited by a `labelSelector`. + + This is used by the Kubernetes tab on a components' page and leads to much smaller responses being received from Kubernetes, especially with larger Kubernetes clusters. + +- 890988341e9: Update `aws-sdk` client from v2 to v3. + + **BREAKING**: The `AwsIamKubernetesAuthTranslator` class no longer exposes the following methods `awsGetCredentials`, `getBearerToken`, `getCredentials` and `validCredentials`. There is no replacement for these methods. + +### Patch Changes + +- 05f1d74539d: Kubernetes clusters now support `authProvider: aks`. When configured this way, + the `retrieveObjectsByServiceId` action will use the `auth.aks` value in the + request body as a bearer token to authenticate with Kubernetes. +- 3659c71c5d9: Standardize `@aws-sdk` v3 versions +- a341129b754: Fixed a bug in the Kubernetes proxy endpoint where requests to clusters configured with client-side auth providers would always fail with a 500 status. +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration-aws-node@0.1.3 + - @backstage/plugin-permission-node@0.7.8 + - @backstage/plugin-kubernetes-common@0.6.3 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-permission-common@0.7.5 + +## @backstage/plugin-octopus-deploy@0.2.0 + +### Minor Changes + +- 87211bc2873: Added support for Octopus Deploy spaces. The octopus.com/project-id annotation can now (optionally) be prefixed by a space identifier, for example. Spaces-1/Projects-102. + Also note that some of this plugins exported API's have changed to accommodate this change, changing from separate arguments to a single object. + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-scaffolder-backend@1.14.0 + +### Minor Changes + +- 67115f532b8: Expose both types of scaffolder permissions and rules through the metadata endpoint. + + The metadata endpoint now correctly exposes both types of scaffolder permissions and rules (for both the template and action resource types) through the metadata endpoint. + +- a73b3c0b097: Add ability to use `defaultNamespace` and `defaultKind` for scaffolder action `catalog:fetch` + +### Patch Changes + +- 1a48b84901c: Bump minimum required version of `vm2` to be 3.9.18 +- d20c87966a4: Bump minimum required version of `vm2` to be 3.9.17 +- 6d954de4b06: Update typing for `RouterOptions::actions` and `ScaffolderActionsExtensionPoint::addActions` to allow any kind of action being assigned to it. +- Updated dependencies + - @backstage/plugin-catalog-backend@1.9.1 + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/plugin-scaffolder-common@1.3.0 + - @backstage/plugin-permission-node@0.7.8 + - @backstage/plugin-scaffolder-node@0.1.3 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-common@0.7.5 + +## @backstage/plugin-scaffolder-backend-module-gitlab@0.2.0 + +### Minor Changes + +- 439e2986be1: Add a new scaffolder action for gitlab to ensure a group exists + +### Patch Changes + +- f1496d4ab6f: Fix input schema validation issue for gitlab actions: + + - gitlab:group:ensureExists + - gitlab:projectAccessToken:create + - gitlab:projectDeployToken:create + - gitlab:projectVariable:create + +- Updated dependencies + - @backstage/integration@1.4.5 + - @backstage/plugin-scaffolder-node@0.1.3 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/plugin-scaffolder-common@1.3.0 + +### Minor Changes + +- 82e10a6939c: Add support for Markdown text blob outputs from templates +- 67115f532b8: Expose scaffolder permissions in new sub-aggregations. + + In addition to exporting a list of all scaffolder permissions in `scaffolderPermissions`, scaffolder-common now exports `scaffolderTemplatePermissions` and `scaffolderActionPermissions`, which contain subsets of the scaffolder permissions separated by resource type. + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.3.0 + - @backstage/types@1.0.2 + - @backstage/plugin-permission-common@0.7.5 + +## @backstage/plugin-scaffolder-react@1.4.0 + +### Minor Changes + +- 82e10a6939c: Add support for Markdown text blob outputs from templates + +### Patch Changes + +- ad1a1429de4: Improvements to the `scaffolder/next` buttons UX: + + - Added padding around the "Create" button in the `Stepper` component + - Added a button bar that includes the "Cancel" and "Start Over" buttons to the `OngoingTask` component. The state of these buttons match their existing counter parts in the Context Menu + - Added a "Show Button Bar"/"Hide Button Bar" item to the `ContextMenu` component + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/plugin-scaffolder-common@1.3.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.4 + +## @backstage/plugin-search@1.3.0 + +### Minor Changes + +- 750e45539ad: Add close button & improve search input. + + MUI's Paper wrapping the SearchBar in the SearchPage was removed, we recommend users update their apps accordingly. + + SearchBarBase's TextField's label support added & aria-label uses label string if present, tests relying on the default placeholder value should still work unless custom placeholder was given. + +### Patch Changes + +- 0e3d8d69318: Fixed 404 Error when fetching search results due to URL encoding changes +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/plugin-search-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.4 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-search-backend-module-elasticsearch@1.3.0 + +### Minor Changes + +- 3d72bdb41c7: Upgrade to aws-sdk v3 and include OpenSearch Serverless support + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration-aws-node@0.1.3 + - @backstage/plugin-search-backend-node@1.2.1 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-search-react@1.6.0 + +### Minor Changes + +- 750e45539ad: Add close button & improve search input. + + MUI's Paper wrapping the SearchBar in the SearchPage was removed, we recommend users update their apps accordingly. + + SearchBarBase's TextField's label support added & aria-label uses label string if present, tests relying on the default placeholder value should still work unless custom placeholder was given. + +- 1ce7f84b2e8: accepts InputProp property that can override keys from default + +### Patch Changes + +- f785f0804cd: `SearchPagination` now automatically resets the page cursor when the page limit is changed +- adb31096bc2: Fix text-overflow UI issue for Lifecycle spans in SearchFilter checkbox labels. +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.4 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/app-defaults@1.3.1 + +### Patch Changes + +- 575d9178eff: Added a System Icon for resource entities. + This can be obtained using: + + ```ts + useApp().getSystemIcon('kind:resource'); + ``` + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-app-api@1.8.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-permission-react@0.4.12 + +## @backstage/backend-app-api@0.4.3 + +### Patch Changes + +- cf13b482f9e: Switch `configServiceFactory` to use `ConfigSources` from `@backstage/config-loader` to load config. +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/config-loader@1.3.0 + - @backstage/plugin-permission-node@0.7.8 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + +## @backstage/backend-common@0.18.5 + +### Patch Changes + +- 0297f7a54af: Remove the direct dependency on deprecated "request" library +- 284db225083: Updated the `DatabaseManager` to include the plugin id in the Postgres application name of the database connections created for each plugin. +- 3659c71c5d9: Standardize `@aws-sdk` v3 versions +- 42d817e76ab: Added `HostDiscovery` to supersede deprecated `SingleHostDiscovery` (deprecated due to name) +- Updated dependencies + - @backstage/config-loader@1.3.0 + - @backstage/integration@1.4.5 + - @backstage/integration-aws-node@0.1.3 + - @backstage/backend-app-api@0.4.3 + - @backstage/backend-dev-utils@0.1.1 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + +## @backstage/backend-defaults@0.1.10 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-app-api@0.4.3 + - @backstage/backend-plugin-api@0.5.2 + +## @backstage/backend-openapi-utils@0.0.2 + +### Patch Changes + +- fe16bd39e83: Use permalinks for links including a line number reference +- 27956d78671: Adjusted README accordingly after the generated output now has a `.generated.ts` extension +- 021cfbb5152: Corrected resolution of parameter nested schema to use central schemas. +- 799c33047ed: Updated README to reflect changes in `@backstage/repo-tools`. + +## @backstage/backend-plugin-api@0.5.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-permission-common@0.7.5 + +## @backstage/backend-tasks@0.5.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + +## @backstage/backend-test-utils@0.1.37 + +### Patch Changes + +- 63af7f6d53f: Allow specifying custom Docker registry for database tests +- b1eb268bf9d: Added `POSTGRES_11` and `POSTGRES_12` as supported test database IDs. +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-app-api@0.4.3 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + +## @backstage/cli@0.22.7 + +### Patch Changes + +- 473db605a4f: Enable strict config checking during `backstage-cli config:check` with the new `--strict` option which will surface schema errors. +- d548886872d: Deprecated the use of React 16 +- Updated dependencies + - @backstage/config-loader@1.3.0 + - @backstage/cli-common@0.1.12 + - @backstage/cli-node@0.1.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/eslint-plugin@0.1.3 + - @backstage/release-manifests@0.0.9 + - @backstage/types@1.0.2 + +## @backstage/core-components@0.13.1 + +### Patch Changes + +- 83b45f9df50: Fix accessibility issue with Backstage Table's header style +- e97769f7c0b: Fix accessibility issue on controlled select input on tab navigation + keyboard enter/space action. +- b1f13cb38aa: Fix accessibility issue with Edit Metadata Link on screen readers missing notice about opening in a new tab. +- 26cff1a5dfb: Start capturing sidebar click events in analytics by default. +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/version-bridge@1.0.4 + +## @backstage/create-app@0.5.1 + +### Patch Changes + +- 1d5e42655cd: Correct command to create new plugins +- e04bb20bdc4: Bumped create-app version. +- Updated dependencies + - @backstage/cli-common@0.1.12 + +## @backstage/dev-utils@1.0.15 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/app-defaults@1.3.1 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-app-api@1.8.0 + - @backstage/core-components@0.13.1 + - @backstage/integration-react@1.1.13 + - @backstage/test-utils@1.3.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/integration@1.4.5 + +### Patch Changes + +- b026275bcc8: Fixed a bug where the wrong credentials would be selected when using multiple GitHub app integrations. +- Updated dependencies + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/integration-aws-node@0.1.3 + +### Patch Changes + +- 3659c71c5d9: Standardize `@aws-sdk` v3 versions +- Updated dependencies + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/integration-react@1.1.13 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/integration@1.4.5 + - @backstage/core-components@0.13.1 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + +## @techdocs/cli@1.4.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-techdocs-node@1.7.1 + - @backstage/catalog-model@1.3.0 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + +## @backstage/test-utils@1.3.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-app-api@1.8.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/types@1.0.2 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-permission-react@0.4.12 + +## @backstage/plugin-adr-backend@0.3.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-adr-common@0.2.9 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-adr-common@0.2.9 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.4.5 + - @backstage/catalog-model@1.3.0 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-airbrake@0.3.18 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/dev-utils@1.0.15 + - @backstage/test-utils@1.3.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-airbrake-backend@0.2.18 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/config@1.0.7 + +## @backstage/plugin-allure@0.1.34 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-analytics-module-ga@0.1.29 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-apache-airflow@0.2.11 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-api-docs@0.9.3 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/plugin-catalog@1.11.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-apollo-explorer@0.1.11 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-app-backend@0.3.45 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/config-loader@1.3.0 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + +## @backstage/plugin-auth-backend@0.18.3 + +### Patch Changes + +- 7c116bcac7f: Fixed the way that some request errors are thrown +- 473db605a4f: Fix config schema definition. +- 3ffcdac7d07: Added a persistent session store through the database +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + +## @backstage/plugin-auth-node@0.2.14 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/plugin-azure-devops-backend@0.3.24 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/config@1.0.7 + - @backstage/plugin-azure-devops-common@0.3.0 + +## @backstage/plugin-azure-sites@0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-azure-sites-common@0.1.0 + +## @backstage/plugin-azure-sites-backend@0.1.7 + +### Patch Changes + +- d66d4f916aa: Updated URL to `/health` and corrected typos in the `README.md` +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/config@1.0.7 + - @backstage/plugin-azure-sites-common@0.1.0 + +## @backstage/plugin-badges@0.2.42 + +### Patch Changes + +- a0108c49774: Fixing badges-backend plugin to get a token from the TokenManager instead of parsing the request header. Hence, it's now possible to disable the authMiddleware for the badges-backend plugin to expose publicly the badges. + + Implementing an obfuscation feature to protect an open badges endpoint from being enumerated. The feature is disabled by default and the change is compatible with the previous version. + + **BREAKING**: `createRouter` now require that `tokenManager`, `logger`, and `identityApi`, are passed in as options. + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + +## @backstage/plugin-bazaar@0.2.8 + +### Patch Changes + +- 900880ab7c3: Fixed `validateDOMNesting` warnings +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/cli@0.22.7 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/plugin-catalog@1.11.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + +## @backstage/plugin-bazaar-backend@0.2.8 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/plugin-bitbucket-cloud-common@0.2.6 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.4.5 + +## @backstage/plugin-bitrise@0.1.45 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-catalog-backend@1.9.1 + +### Patch Changes + +- ce8d203235b: Ensure that entity cache state is only written to the database when actually changed +- 485a6c5f7b5: Internal refactoring for performance in the service handlers +- 3587a968dcd: Fixed a bug in the `queryEntities` endpoint that was causing filtered entities to be included in cursor requests. +- ce335df9d1c: Improve the query for orphan pruning +- 27956d78671: Adjusted the OpenAPI schema file name according to the new structure +- 51064e6e5ee: Change orphan cleanup task to only log a message if it deleted entities. +- 12a345317ab: Remove unnecessary join in the entity facets endpoint, exclude nulls +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/plugin-scaffolder-common@1.3.0 + - @backstage/plugin-permission-node@0.7.8 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/plugin-search-backend-module-catalog@0.1.1 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-catalog-backend-module-azure@0.1.16 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + +## @backstage/plugin-catalog-backend-module-bitbucket@0.2.12 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-bitbucket-cloud-common@0.2.6 + +## @backstage/plugin-catalog-backend-module-bitbucket-cloud@0.1.12 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/plugin-bitbucket-cloud-common@0.2.6 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-events-node@0.2.6 + +## @backstage/plugin-catalog-backend-module-bitbucket-server@0.1.10 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/plugin-catalog-backend-module-gerrit@0.1.13 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/plugin-catalog-backend-module-gitlab@0.2.1 + +### Patch Changes + +- b12c41fafc4: Fix a corner case where returned users are null for bots +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + +## @backstage/plugin-catalog-backend-module-incremental-ingestion@0.3.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.9.1 + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-events-node@0.2.6 + - @backstage/plugin-permission-common@0.7.5 + +## @backstage/plugin-catalog-backend-module-ldap@0.5.12 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + +## @backstage/plugin-catalog-backend-module-msgraph@0.5.4 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/plugin-catalog-common@1.0.13 + +## @backstage/plugin-catalog-backend-module-openapi@0.1.11 + +### Patch Changes + +- accaceadffa: Fixed bug in `jsonSchemaRefPlaceholderResolver` where relative $ref files were resolved through file system instead of base URL of file +- Updated dependencies + - @backstage/plugin-catalog-backend@1.9.1 + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + +## @backstage/plugin-catalog-backend-module-puppetdb@0.1.2 + +### Patch Changes + +- 95b2168d71b: Fixes import paths and updates documentation +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + +## @backstage/plugin-catalog-graph@0.2.30 + +### Patch Changes + +- d446f8fb0a8: Expose all `EntityRelationsGraphProps` to Catalog Graph Page +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-catalog-import@0.9.8 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/integration@1.4.5 + - @backstage/core-components@0.13.1 + - @backstage/integration-react@1.1.13 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-common@1.0.13 + +## @backstage/plugin-catalog-node@1.3.6 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + +## @backstage/plugin-cicd-statistics@0.1.20 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-cicd-statistics-module-gitlab@0.1.14 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-cicd-statistics@0.1.20 + +## @backstage/plugin-circleci@0.3.18 + +### Patch Changes + +- 451b3cadb3d: Fixes row display for in progress jobs to not display trailing "took" +- 1c4958d905f: Hide empty time field data for queued builds which haven't started yet +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-cloudbuild@0.3.18 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-code-climate@0.1.18 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-code-coverage@0.2.11 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + +## @backstage/plugin-code-coverage-backend@0.2.11 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/plugin-codescene@0.1.13 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + +## @backstage/plugin-config-schema@0.1.41 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + +## @backstage/plugin-cost-insights@0.12.7 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-cost-insights-common@0.1.1 + +## @backstage/plugin-dynatrace@5.0.0 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-entity-feedback@0.2.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-entity-feedback-common@0.1.1 + +## @backstage/plugin-entity-feedback-backend@0.1.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/plugin-entity-feedback-common@0.1.1 + +## @backstage/plugin-entity-validation@0.1.3 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-common@1.0.13 + +## @backstage/plugin-events-backend@0.2.6 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.6 + +## @backstage/plugin-events-backend-module-azure@0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2 + - @backstage/plugin-events-node@0.2.6 + +## @backstage/plugin-events-backend-module-bitbucket-cloud@0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2 + - @backstage/plugin-events-node@0.2.6 + +## @backstage/plugin-events-backend-module-gerrit@0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2 + - @backstage/plugin-events-node@0.2.6 + +## @backstage/plugin-events-backend-module-github@0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.6 + +## @backstage/plugin-events-backend-module-gitlab@0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.6 + +## @backstage/plugin-events-backend-test-utils@0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.2.6 + +## @backstage/plugin-events-node@0.2.6 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2 + +## @backstage/plugin-explore@0.4.3 + +### Patch Changes + +- 1996920782b: Make sure that the first support button row does not break across lines +- 4851581deb6: Display the title of the entity on the explore card if present, otherwise stick to the name +- a6025e25d99: Updated the example code in the "Customization" section of the README to make the imports match the components used. +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/plugin-search-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-explore-react@0.0.28 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-explore-backend@0.0.7 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-search-backend-module-explore@0.1.1 + - @backstage/config@1.0.7 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-firehydrant@0.2.2 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-fossa@0.2.50 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + +## @backstage/plugin-gcalendar@0.3.14 + +### Patch Changes + +- f493ccb9589: Pass user info email scope on auth refresh to resolve invalid credentials error +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + +## @backstage/plugin-gcp-projects@0.3.37 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-git-release-manager@0.3.31 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/integration@1.4.5 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-github-actions@0.5.18 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/integration@1.4.5 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-github-deployments@0.1.49 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/integration@1.4.5 + - @backstage/core-components@0.13.1 + - @backstage/integration-react@1.1.13 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + +## @backstage/plugin-github-issues@0.2.7 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/integration@1.4.5 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + +## @backstage/plugin-github-pull-requests-board@0.1.12 + +### Patch Changes + +- cf125c36569: The `EntityTeamPullRequestsContent` and `EntityTeamPullRequestsCard` support the ability to view the labels/tags added to each PR +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/integration@1.4.5 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-gitops-profiles@0.3.36 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-gocd@0.1.24 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + +## @backstage/plugin-graphiql@0.2.50 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-graphql-backend@0.1.35 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/config@1.0.7 + - @backstage/plugin-catalog-graphql@0.3.20 + +## @backstage/plugin-graphql-voyager@0.1.3 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-home@0.5.2 + +### Patch Changes + +- acca8966465: Remove object-hash dependency +- 957cd9b8958: Use the semantic time tag for rendering world clocks on homepage headers. +- 0e19e7b0f3a: Bump to using the later v5 versions of `@rjsf/*` +- 5272cfabc3b: Add missing @rjsf/core dependency +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-ilert@0.2.7 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + +## @backstage/plugin-kafka@0.3.18 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-kafka-backend@0.2.38 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/plugin-kubernetes-common@0.6.3 + +### Patch Changes + +- 05f1d74539d: AKS access tokens can now be sent over the wire to the Kubernetes backend. +- Updated dependencies + - @backstage/catalog-model@1.3.0 + - @backstage/plugin-permission-common@0.7.5 + +## @backstage/plugin-lighthouse@0.4.3 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-lighthouse-common@0.1.1 + +## @backstage/plugin-lighthouse-backend@0.2.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-lighthouse-common@0.1.1 + +## @backstage/plugin-linguist@0.1.3 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-linguist-common@0.1.0 + +## @backstage/plugin-linguist-backend@0.2.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-linguist-common@0.1.0 + +## @backstage/plugin-microsoft-calendar@0.1.3 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + +## @backstage/plugin-newrelic@0.3.36 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-newrelic-dashboard@0.2.11 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + +## @backstage/plugin-org@0.6.8 + +### Patch Changes + +- 6e387c077a4: Changed the MembersListCard component to allow displaying aggregated members when viewing a group. Now, a toggle switch can be displayed that lets you switch between showing direct members and aggregated members. + + To enable this new feature, set the showAggregateMembersToggle prop on EntityMembersListCard: + + ```jsx + // In packages/app/src/components/catalog/EntityPage.tsx + const groupPage = ( + // ... + + // ... + ); + ``` + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-org-react@0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-pagerduty@0.5.11 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + +## @backstage/plugin-periskop@0.1.16 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + +## @backstage/plugin-periskop-backend@0.1.16 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + +## @backstage/plugin-permission-backend@0.5.20 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-permission-node@0.7.8 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-permission-common@0.7.5 + +## @backstage/plugin-permission-node@0.7.8 + +### Patch Changes + +- a788e715cfc: `createPermissionIntegrationRouter` now accepts rules and permissions for multiple resource types. Example: + + ```typescript + createPermissionIntegrationRouter({ + resources: [ + { + resourceType: 'resourceType-1', + permissions: permissionsResourceType1, + rules: rulesResourceType1, + }, + { + resourceType: 'resourceType-2', + permissions: permissionsResourceType2, + rules: rulesResourceType2, + }, + ], + }); + ``` + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-permission-common@0.7.5 + +## @backstage/plugin-playlist@0.1.9 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/plugin-search-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-permission-react@0.4.12 + - @backstage/plugin-playlist-common@0.1.6 + +## @backstage/plugin-playlist-backend@0.3.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-permission-node@0.7.8 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-playlist-common@0.1.6 + +## @backstage/plugin-proxy-backend@0.2.39 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + +## @backstage/plugin-puppetdb@0.1.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + +## @backstage/plugin-rollbar@0.4.18 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-rollbar-backend@0.1.42 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/config@1.0.7 + +## @backstage/plugin-scaffolder@1.13.1 + +### Patch Changes + +- d560d457c98: Fix case GitLab workspace is a nested subgroup + +- ad1a1429de4: Improvements to the `scaffolder/next` buttons UX: + + - Added padding around the "Create" button in the `Stepper` component + - Added a button bar that includes the "Cancel" and "Start Over" buttons to the `OngoingTask` component. The state of these buttons match their existing counter parts in the Context Menu + - Added a "Show Button Bar"/"Hide Button Bar" item to the `ContextMenu` component + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/integration@1.4.5 + - @backstage/plugin-scaffolder-common@1.3.0 + - @backstage/plugin-scaffolder-react@1.4.0 + - @backstage/core-components@0.13.1 + - @backstage/integration-react@1.1.13 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-react@0.4.12 + +## @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.1.2 + +### Patch Changes + +- 7c116bcac7f: Fixed the way that some request errors are thrown +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.14.0 + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/plugin-scaffolder-node@0.1.3 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + +## @backstage/plugin-scaffolder-backend-module-cookiecutter@0.2.21 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.14.0 + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/plugin-scaffolder-node@0.1.3 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + +## @backstage/plugin-scaffolder-backend-module-rails@0.4.14 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.14.0 + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/plugin-scaffolder-node@0.1.3 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + +## @backstage/plugin-scaffolder-backend-module-sentry@0.1.5 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.1.3 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/plugin-scaffolder-backend-module-yeoman@0.2.18 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.1.3 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + +## @backstage/plugin-scaffolder-node@0.1.3 + +### Patch Changes + +- 6d954de4b06: Update typing for `RouterOptions::actions` and `ScaffolderActionsExtensionPoint::addActions` to allow any kind of action being assigned to it. +- Updated dependencies + - @backstage/plugin-scaffolder-common@1.3.0 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-model@1.3.0 + - @backstage/types@1.0.2 + +## @backstage/plugin-search-backend@1.3.1 + +### Patch Changes + +- 021cfbb5152: Added an OpenAPI 3.0 spec and enforced schema-first model on the router. +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-permission-node@0.7.8 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/plugin-search-backend-node@1.2.1 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-search-backend-module-catalog@0.1.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-search-backend-node@1.2.1 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-search-backend-module-explore@0.1.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-search-backend-node@1.2.1 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-search-backend-module-pg@0.5.6 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-search-backend-node@1.2.1 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-search-backend-module-techdocs@0.1.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-techdocs-node@1.7.1 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-search-backend-node@1.2.1 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-search-backend-node@1.2.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-sentry@0.5.3 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-shortcuts@0.3.10 + +### Patch Changes + +- 8a7174e297c: Marked `LocalStoredShortcuts` as deprecated, replacing it with `DefaultShortcutsApi` whose naming more clearly suggests that the shortcuts aren't necessarily stored locally (it depends on the storage implementation). +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + - @backstage/types@1.0.2 + +## @backstage/plugin-sonarqube@0.6.7 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-sonarqube-react@0.1.5 + +## @backstage/plugin-sonarqube-backend@0.1.10 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/plugin-splunk-on-call@0.4.7 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-stack-overflow@0.1.15 + +### Patch Changes + +- c1ff65f315a: StackOverflowSearchResultListItem can now accept an empty result prop so that it can be rendered in the suggested SearchResultListItem pattern. +- Updated dependencies + - @backstage/plugin-home@0.5.2 + - @backstage/theme@0.3.0 + - @backstage/plugin-search-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-stack-overflow-backend@0.2.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/config@1.0.7 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-stackstorm@0.1.2 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + +## @backstage/plugin-tech-insights@0.3.10 + +### Patch Changes + +- 22963209d23: Added the possibility to customize the check description in the scorecard component. + + - The `CheckResultRenderer` type now exposes an optional `description` method that allows to overwrite the description with a different string or a React component for a provided check result. + + Until now only the `BooleanCheck` element could be overridden, but from now on it's also possible to override the description for a check. + As an example, the description could change depending on the check result. Refer to the [README](https://github.com/backstage/backstage/blob/master/plugins/tech-insights/README.md#adding-custom-rendering-components) file for more details + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-tech-insights-common@0.2.10 + +## @backstage/plugin-tech-insights-backend@0.5.11 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-tech-insights-node@0.4.3 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-tech-insights-common@0.2.10 + +## @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.29 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-tech-insights-node@0.4.3 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-tech-insights-common@0.2.10 + +## @backstage/plugin-tech-insights-node@0.4.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-tech-insights-common@0.2.10 + +## @backstage/plugin-tech-radar@0.6.4 + +### Patch Changes + +- be4fa53fab8: Fix description links when clicking entry in radar. +- Added the ability to display a timeline to each entry in the details box +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-techdocs@1.6.2 + +### Patch Changes + +- 863beb49498: Re-add the possibility to have trailing slashes in Techdocs navigation. +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/integration@1.4.5 + - @backstage/plugin-search-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/integration-react@1.1.13 + - @backstage/plugin-techdocs-react@1.1.6 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-techdocs-addons-test-utils@1.0.13 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-techdocs@1.6.2 + - @backstage/plugin-catalog@1.11.0 + - @backstage/core-app-api@1.8.0 + - @backstage/plugin-search-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/integration-react@1.1.13 + - @backstage/test-utils@1.3.1 + - @backstage/plugin-techdocs-react@1.1.6 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-techdocs-backend@1.6.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/plugin-techdocs-node@1.7.1 + - @backstage/plugin-search-backend-module-techdocs@0.1.1 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-techdocs-module-addons-contrib@1.0.13 + +### Patch Changes + +- 6afc7f052ca: Show cursor pointer when hovering on lightbox +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/integration@1.4.5 + - @backstage/core-components@0.13.1 + - @backstage/integration-react@1.1.13 + - @backstage/plugin-techdocs-react@1.1.6 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-techdocs-node@1.7.1 + +### Patch Changes + +- 3659c71c5d9: Standardize `@aws-sdk` v3 versions +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/integration-aws-node@0.1.3 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-techdocs-react@1.1.6 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/version-bridge@1.0.4 + +## @backstage/plugin-todo@0.2.20 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + +## @backstage/plugin-todo-backend@0.1.42 + +### Patch Changes + +- 901f1ada325: Added OpenAPI schema +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/plugin-user-settings@0.7.3 + +### Patch Changes + +- 473db605a4f: Fix config schema definition. +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-app-api@1.8.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + +## @backstage/plugin-user-settings-backend@0.1.9 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + +## @backstage/plugin-vault@0.1.12 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + +## @backstage/plugin-vault-backend@0.3.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/plugin-xcmetrics@0.2.38 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + +## example-app@0.2.83 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-tech-insights@0.3.10 + - @backstage/plugin-scaffolder@1.13.1 + - @backstage/plugin-devtools@0.1.0 + - @backstage/plugin-kubernetes@0.9.0 + - @backstage/plugin-search@1.3.0 + - @backstage/plugin-home@0.5.2 + - @backstage/plugin-explore@0.4.3 + - @backstage/theme@0.3.0 + - @backstage/plugin-techdocs@1.6.2 + - @backstage/app-defaults@1.3.1 + - @backstage/plugin-badges@0.2.42 + - @backstage/plugin-tech-radar@0.6.4 + - @backstage/cli@0.22.7 + - @backstage/plugin-stack-overflow@0.1.15 + - @backstage/plugin-gcalendar@0.3.14 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-app-api@1.8.0 + - @backstage/plugin-scaffolder-react@1.4.0 + - @backstage/plugin-catalog-graph@0.2.30 + - @backstage/plugin-circleci@0.3.18 + - @backstage/plugin-search-react@1.6.0 + - @backstage/plugin-org@0.6.8 + - @backstage/core-components@0.13.1 + - @backstage/plugin-azure-devops@0.3.0 + - @backstage/plugin-jenkins@0.8.0 + - @backstage/plugin-octopus-deploy@0.2.0 + - @backstage/plugin-techdocs-module-addons-contrib@1.0.13 + - @backstage/plugin-user-settings@0.7.3 + - @backstage/plugin-shortcuts@0.3.10 + - @backstage/integration-react@1.1.13 + - @backstage/plugin-airbrake@0.3.18 + - @backstage/plugin-api-docs@0.9.3 + - @backstage/plugin-azure-sites@0.1.7 + - @backstage/plugin-cloudbuild@0.3.18 + - @backstage/plugin-code-coverage@0.2.11 + - @backstage/plugin-cost-insights@0.12.7 + - @backstage/plugin-dynatrace@5.0.0 + - @backstage/plugin-entity-feedback@0.2.1 + - @backstage/plugin-gcp-projects@0.3.37 + - @backstage/plugin-github-actions@0.5.18 + - @backstage/plugin-gocd@0.1.24 + - @backstage/plugin-graphiql@0.2.50 + - @backstage/plugin-kafka@0.3.18 + - @backstage/plugin-lighthouse@0.4.3 + - @backstage/plugin-linguist@0.1.3 + - @backstage/plugin-microsoft-calendar@0.1.3 + - @backstage/plugin-newrelic@0.3.36 + - @backstage/plugin-pagerduty@0.5.11 + - @backstage/plugin-playlist@0.1.9 + - @backstage/plugin-puppetdb@0.1.1 + - @backstage/plugin-rollbar@0.4.18 + - @backstage/plugin-sentry@0.5.3 + - @backstage/plugin-stackstorm@0.1.2 + - @backstage/plugin-techdocs-react@1.1.6 + - @backstage/plugin-todo@0.2.20 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-apache-airflow@0.2.11 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-catalog-import@0.9.8 + - @backstage/plugin-linguist-common@0.1.0 + - @backstage/plugin-newrelic-dashboard@0.2.11 + - @backstage/plugin-permission-react@0.4.12 + - @backstage/plugin-search-common@1.2.3 + - @internal/plugin-catalog-customized@0.0.10 + +## example-backend@0.2.83 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.14.0 + - @backstage/plugin-devtools-backend@0.1.0 + - @backstage/plugin-catalog-backend@1.9.1 + - @backstage/backend-common@0.18.5 + - @backstage/plugin-kubernetes-backend@0.11.0 + - @backstage/plugin-auth-backend@0.18.3 + - @backstage/plugin-badges-backend@0.2.0 + - @backstage/plugin-search-backend-module-elasticsearch@1.3.0 + - @backstage/integration@1.4.5 + - @backstage/plugin-todo-backend@0.1.42 + - @backstage/plugin-jenkins-backend@0.2.0 + - @backstage/plugin-azure-sites-backend@0.1.7 + - @backstage/plugin-permission-node@0.7.8 + - @backstage/plugin-search-backend@1.3.1 + - example-app@0.2.83 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-app-backend@0.3.45 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/plugin-entity-feedback-backend@0.1.3 + - @backstage/plugin-events-backend@0.2.6 + - @backstage/plugin-playlist-backend@0.3.1 + - @backstage/plugin-rollbar-backend@0.1.42 + - @backstage/plugin-search-backend-module-pg@0.5.6 + - @backstage/plugin-tech-insights-backend@0.5.11 + - @backstage/plugin-techdocs-backend@1.6.2 + - @backstage/plugin-scaffolder-backend-module-rails@0.4.14 + - @backstage/plugin-adr-backend@0.3.3 + - @backstage/plugin-azure-devops-backend@0.3.24 + - @backstage/plugin-code-coverage-backend@0.2.11 + - @backstage/plugin-explore-backend@0.0.7 + - @backstage/plugin-graphql-backend@0.1.35 + - @backstage/plugin-kafka-backend@0.2.38 + - @backstage/plugin-lighthouse-backend@0.2.1 + - @backstage/plugin-linguist-backend@0.2.2 + - @backstage/plugin-permission-backend@0.5.20 + - @backstage/plugin-proxy-backend@0.2.39 + - @backstage/plugin-search-backend-node@1.2.1 + - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.29 + - @backstage/plugin-tech-insights-node@0.4.3 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.6 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-search-common@1.2.3 + +## example-backend-next@0.0.11 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.14.0 + - @backstage/plugin-catalog-backend@1.9.1 + - @backstage/plugin-kubernetes-backend@0.11.0 + - @backstage/plugin-todo-backend@0.1.42 + - @backstage/plugin-permission-node@0.7.8 + - @backstage/plugin-search-backend@1.3.1 + - @backstage/backend-defaults@0.1.10 + - @backstage/plugin-app-backend@0.3.45 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/plugin-search-backend-module-catalog@0.1.1 + - @backstage/plugin-search-backend-module-explore@0.1.1 + - @backstage/plugin-search-backend-module-techdocs@0.1.1 + - @backstage/plugin-techdocs-backend@1.6.2 + - @backstage/plugin-permission-backend@0.5.20 + - @backstage/plugin-search-backend-node@1.2.1 + - @backstage/plugin-permission-common@0.7.5 + +## e2e-test@0.2.3 + +### Patch Changes + +- Updated dependencies + - @backstage/create-app@0.5.1 + - @backstage/cli-common@0.1.12 + - @backstage/errors@1.1.5 + +## techdocs-cli-embedded-app@0.2.82 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-techdocs@1.6.2 + - @backstage/app-defaults@1.3.1 + - @backstage/cli@0.22.7 + - @backstage/plugin-catalog@1.11.0 + - @backstage/core-app-api@1.8.0 + - @backstage/core-components@0.13.1 + - @backstage/integration-react@1.1.13 + - @backstage/test-utils@1.3.1 + - @backstage/plugin-techdocs-react@1.1.6 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + +## @internal/plugin-catalog-customized@0.0.10 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/plugin-catalog@1.11.0 + +## @internal/plugin-todo-list@1.0.13 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + +## @internal/plugin-todo-list-backend@1.0.13 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 diff --git a/package.json b/package.json index 7e77896821..3a7e05d65a 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "@types/react": "^17", "@types/react-dom": "^17" }, - "version": "1.14.0-next.2", + "version": "1.14.0", "dependencies": { "@backstage/errors": "workspace:^", "@manypkg/get-packages": "^1.1.3" diff --git a/packages/app-defaults/CHANGELOG.md b/packages/app-defaults/CHANGELOG.md index a4ab5e013c..7cb6737b73 100644 --- a/packages/app-defaults/CHANGELOG.md +++ b/packages/app-defaults/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/app-defaults +## 1.3.1 + +### Patch Changes + +- 575d9178eff: Added a System Icon for resource entities. + This can be obtained using: + + ```ts + useApp().getSystemIcon('kind:resource'); + ``` + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-app-api@1.8.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-permission-react@0.4.12 + ## 1.3.1-next.2 ### Patch Changes diff --git a/packages/app-defaults/package.json b/packages/app-defaults/package.json index f1c806ebe2..90f50d0eff 100644 --- a/packages/app-defaults/package.json +++ b/packages/app-defaults/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/app-defaults", "description": "Provides the default wiring of a Backstage App", - "version": "1.3.1-next.2", + "version": "1.3.1", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/packages/app/CHANGELOG.md b/packages/app/CHANGELOG.md index 84f7ab32a1..5fdee05829 100644 --- a/packages/app/CHANGELOG.md +++ b/packages/app/CHANGELOG.md @@ -1,5 +1,77 @@ # example-app +## 0.2.83 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-tech-insights@0.3.10 + - @backstage/plugin-scaffolder@1.13.1 + - @backstage/plugin-devtools@0.1.0 + - @backstage/plugin-kubernetes@0.9.0 + - @backstage/plugin-search@1.3.0 + - @backstage/plugin-home@0.5.2 + - @backstage/plugin-explore@0.4.3 + - @backstage/theme@0.3.0 + - @backstage/plugin-techdocs@1.6.2 + - @backstage/app-defaults@1.3.1 + - @backstage/plugin-badges@0.2.42 + - @backstage/plugin-tech-radar@0.6.4 + - @backstage/cli@0.22.7 + - @backstage/plugin-stack-overflow@0.1.15 + - @backstage/plugin-gcalendar@0.3.14 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-app-api@1.8.0 + - @backstage/plugin-scaffolder-react@1.4.0 + - @backstage/plugin-catalog-graph@0.2.30 + - @backstage/plugin-circleci@0.3.18 + - @backstage/plugin-search-react@1.6.0 + - @backstage/plugin-org@0.6.8 + - @backstage/core-components@0.13.1 + - @backstage/plugin-azure-devops@0.3.0 + - @backstage/plugin-jenkins@0.8.0 + - @backstage/plugin-octopus-deploy@0.2.0 + - @backstage/plugin-techdocs-module-addons-contrib@1.0.13 + - @backstage/plugin-user-settings@0.7.3 + - @backstage/plugin-shortcuts@0.3.10 + - @backstage/integration-react@1.1.13 + - @backstage/plugin-airbrake@0.3.18 + - @backstage/plugin-api-docs@0.9.3 + - @backstage/plugin-azure-sites@0.1.7 + - @backstage/plugin-cloudbuild@0.3.18 + - @backstage/plugin-code-coverage@0.2.11 + - @backstage/plugin-cost-insights@0.12.7 + - @backstage/plugin-dynatrace@5.0.0 + - @backstage/plugin-entity-feedback@0.2.1 + - @backstage/plugin-gcp-projects@0.3.37 + - @backstage/plugin-github-actions@0.5.18 + - @backstage/plugin-gocd@0.1.24 + - @backstage/plugin-graphiql@0.2.50 + - @backstage/plugin-kafka@0.3.18 + - @backstage/plugin-lighthouse@0.4.3 + - @backstage/plugin-linguist@0.1.3 + - @backstage/plugin-microsoft-calendar@0.1.3 + - @backstage/plugin-newrelic@0.3.36 + - @backstage/plugin-pagerduty@0.5.11 + - @backstage/plugin-playlist@0.1.9 + - @backstage/plugin-puppetdb@0.1.1 + - @backstage/plugin-rollbar@0.4.18 + - @backstage/plugin-sentry@0.5.3 + - @backstage/plugin-stackstorm@0.1.2 + - @backstage/plugin-techdocs-react@1.1.6 + - @backstage/plugin-todo@0.2.20 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-apache-airflow@0.2.11 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-catalog-import@0.9.8 + - @backstage/plugin-linguist-common@0.1.0 + - @backstage/plugin-newrelic-dashboard@0.2.11 + - @backstage/plugin-permission-react@0.4.12 + - @backstage/plugin-search-common@1.2.3 + - @internal/plugin-catalog-customized@0.0.10 + ## 0.2.83-next.2 ### Patch Changes diff --git a/packages/app/package.json b/packages/app/package.json index 56ae2e9c9e..c2330244d0 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,6 +1,6 @@ { "name": "example-app", - "version": "0.2.83-next.2", + "version": "0.2.83", "private": true, "backstage": { "role": "frontend" diff --git a/packages/backend-app-api/CHANGELOG.md b/packages/backend-app-api/CHANGELOG.md index 00e7582ad3..dcb0e722c0 100644 --- a/packages/backend-app-api/CHANGELOG.md +++ b/packages/backend-app-api/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/backend-app-api +## 0.4.3 + +### Patch Changes + +- cf13b482f9e: Switch `configServiceFactory` to use `ConfigSources` from `@backstage/config-loader` to load config. +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/config-loader@1.3.0 + - @backstage/plugin-permission-node@0.7.8 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + ## 0.4.3-next.1 ### Patch Changes diff --git a/packages/backend-app-api/package.json b/packages/backend-app-api/package.json index a21484ff2e..dc5b38daae 100644 --- a/packages/backend-app-api/package.json +++ b/packages/backend-app-api/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-app-api", "description": "Core API used by Backstage backend apps", - "version": "0.4.3-next.1", + "version": "0.4.3", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-common/CHANGELOG.md b/packages/backend-common/CHANGELOG.md index fc6d99cf93..cdf7f6259d 100644 --- a/packages/backend-common/CHANGELOG.md +++ b/packages/backend-common/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/backend-common +## 0.18.5 + +### Patch Changes + +- 0297f7a54af: Remove the direct dependency on deprecated "request" library +- 284db225083: Updated the `DatabaseManager` to include the plugin id in the Postgres application name of the database connections created for each plugin. +- 3659c71c5d9: Standardize `@aws-sdk` v3 versions +- 42d817e76ab: Added `HostDiscovery` to supersede deprecated `SingleHostDiscovery` (deprecated due to name) +- Updated dependencies + - @backstage/config-loader@1.3.0 + - @backstage/integration@1.4.5 + - @backstage/integration-aws-node@0.1.3 + - @backstage/backend-app-api@0.4.3 + - @backstage/backend-dev-utils@0.1.1 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + ## 0.18.5-next.1 ### Patch Changes diff --git a/packages/backend-common/package.json b/packages/backend-common/package.json index f8175bac29..914400368a 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.18.5-next.1", + "version": "0.18.5", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-defaults/CHANGELOG.md b/packages/backend-defaults/CHANGELOG.md index 52043b4ecf..49d5a8bf1f 100644 --- a/packages/backend-defaults/CHANGELOG.md +++ b/packages/backend-defaults/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/backend-defaults +## 0.1.10 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-app-api@0.4.3 + - @backstage/backend-plugin-api@0.5.2 + ## 0.1.10-next.1 ### Patch Changes diff --git a/packages/backend-defaults/package.json b/packages/backend-defaults/package.json index d99e462efa..09b5b82dfc 100644 --- a/packages/backend-defaults/package.json +++ b/packages/backend-defaults/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-defaults", "description": "Backend defaults used by Backstage backend apps", - "version": "0.1.10-next.1", + "version": "0.1.10", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-next/CHANGELOG.md b/packages/backend-next/CHANGELOG.md index e01a00f8d2..8253a108b9 100644 --- a/packages/backend-next/CHANGELOG.md +++ b/packages/backend-next/CHANGELOG.md @@ -1,5 +1,27 @@ # example-backend-next +## 0.0.11 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.14.0 + - @backstage/plugin-catalog-backend@1.9.1 + - @backstage/plugin-kubernetes-backend@0.11.0 + - @backstage/plugin-todo-backend@0.1.42 + - @backstage/plugin-permission-node@0.7.8 + - @backstage/plugin-search-backend@1.3.1 + - @backstage/backend-defaults@0.1.10 + - @backstage/plugin-app-backend@0.3.45 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/plugin-search-backend-module-catalog@0.1.1 + - @backstage/plugin-search-backend-module-explore@0.1.1 + - @backstage/plugin-search-backend-module-techdocs@0.1.1 + - @backstage/plugin-techdocs-backend@1.6.2 + - @backstage/plugin-permission-backend@0.5.20 + - @backstage/plugin-search-backend-node@1.2.1 + - @backstage/plugin-permission-common@0.7.5 + ## 0.0.11-next.2 ### Patch Changes diff --git a/packages/backend-next/package.json b/packages/backend-next/package.json index f69435a838..a50df741ec 100644 --- a/packages/backend-next/package.json +++ b/packages/backend-next/package.json @@ -1,6 +1,6 @@ { "name": "example-backend-next", - "version": "0.0.11-next.2", + "version": "0.0.11", "main": "dist/index.cjs.js", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/backend-openapi-utils/CHANGELOG.md b/packages/backend-openapi-utils/CHANGELOG.md index 2d3d5f021d..0255bbbf73 100644 --- a/packages/backend-openapi-utils/CHANGELOG.md +++ b/packages/backend-openapi-utils/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/backend-openapi-utils +## 0.0.2 + +### Patch Changes + +- fe16bd39e83: Use permalinks for links including a line number reference +- 27956d78671: Adjusted README accordingly after the generated output now has a `.generated.ts` extension +- 021cfbb5152: Corrected resolution of parameter nested schema to use central schemas. +- 799c33047ed: Updated README to reflect changes in `@backstage/repo-tools`. + ## 0.0.2-next.1 ### Patch Changes diff --git a/packages/backend-openapi-utils/package.json b/packages/backend-openapi-utils/package.json index b3926de712..89a4621a49 100644 --- a/packages/backend-openapi-utils/package.json +++ b/packages/backend-openapi-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-openapi-utils", "description": "OpenAPI typescript support.", - "version": "0.0.2-next.1", + "version": "0.0.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/backend-plugin-api/CHANGELOG.md b/packages/backend-plugin-api/CHANGELOG.md index 9a28b1dd3a..cf22e7a9c3 100644 --- a/packages/backend-plugin-api/CHANGELOG.md +++ b/packages/backend-plugin-api/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/backend-plugin-api +## 0.5.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-permission-common@0.7.5 + ## 0.5.2-next.1 ### Patch Changes diff --git a/packages/backend-plugin-api/package.json b/packages/backend-plugin-api/package.json index 58e103e647..d4c2bef5a2 100644 --- a/packages/backend-plugin-api/package.json +++ b/packages/backend-plugin-api/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-plugin-api", "description": "Core API used by Backstage backend plugins", - "version": "0.5.2-next.1", + "version": "0.5.2", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-tasks/CHANGELOG.md b/packages/backend-tasks/CHANGELOG.md index 1ef0203eb1..c7927d1e66 100644 --- a/packages/backend-tasks/CHANGELOG.md +++ b/packages/backend-tasks/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/backend-tasks +## 0.5.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + ## 0.5.2-next.1 ### Patch Changes diff --git a/packages/backend-tasks/package.json b/packages/backend-tasks/package.json index b0f5c3afb3..6a87b91202 100644 --- a/packages/backend-tasks/package.json +++ b/packages/backend-tasks/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-tasks", "description": "Common distributed task management library for Backstage backends", - "version": "0.5.2-next.1", + "version": "0.5.2", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-test-utils/CHANGELOG.md b/packages/backend-test-utils/CHANGELOG.md index 3ce5006003..7a2ea9c2e6 100644 --- a/packages/backend-test-utils/CHANGELOG.md +++ b/packages/backend-test-utils/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/backend-test-utils +## 0.1.37 + +### Patch Changes + +- 63af7f6d53f: Allow specifying custom Docker registry for database tests +- b1eb268bf9d: Added `POSTGRES_11` and `POSTGRES_12` as supported test database IDs. +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-app-api@0.4.3 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + ## 0.1.37-next.1 ### Patch Changes diff --git a/packages/backend-test-utils/package.json b/packages/backend-test-utils/package.json index b23d3b411e..5351ade035 100644 --- a/packages/backend-test-utils/package.json +++ b/packages/backend-test-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-test-utils", "description": "Test helpers library for Backstage backends", - "version": "0.1.37-next.1", + "version": "0.1.37", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend/CHANGELOG.md b/packages/backend/CHANGELOG.md index 7a4031b654..c775d70b2f 100644 --- a/packages/backend/CHANGELOG.md +++ b/packages/backend/CHANGELOG.md @@ -1,5 +1,57 @@ # example-backend +## 0.2.83 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.14.0 + - @backstage/plugin-devtools-backend@0.1.0 + - @backstage/plugin-catalog-backend@1.9.1 + - @backstage/backend-common@0.18.5 + - @backstage/plugin-kubernetes-backend@0.11.0 + - @backstage/plugin-auth-backend@0.18.3 + - @backstage/plugin-badges-backend@0.2.0 + - @backstage/plugin-search-backend-module-elasticsearch@1.3.0 + - @backstage/integration@1.4.5 + - @backstage/plugin-todo-backend@0.1.42 + - @backstage/plugin-jenkins-backend@0.2.0 + - @backstage/plugin-azure-sites-backend@0.1.7 + - @backstage/plugin-permission-node@0.7.8 + - @backstage/plugin-search-backend@1.3.1 + - example-app@0.2.83 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-app-backend@0.3.45 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/plugin-entity-feedback-backend@0.1.3 + - @backstage/plugin-events-backend@0.2.6 + - @backstage/plugin-playlist-backend@0.3.1 + - @backstage/plugin-rollbar-backend@0.1.42 + - @backstage/plugin-search-backend-module-pg@0.5.6 + - @backstage/plugin-tech-insights-backend@0.5.11 + - @backstage/plugin-techdocs-backend@1.6.2 + - @backstage/plugin-scaffolder-backend-module-rails@0.4.14 + - @backstage/plugin-adr-backend@0.3.3 + - @backstage/plugin-azure-devops-backend@0.3.24 + - @backstage/plugin-code-coverage-backend@0.2.11 + - @backstage/plugin-explore-backend@0.0.7 + - @backstage/plugin-graphql-backend@0.1.35 + - @backstage/plugin-kafka-backend@0.2.38 + - @backstage/plugin-lighthouse-backend@0.2.1 + - @backstage/plugin-linguist-backend@0.2.2 + - @backstage/plugin-permission-backend@0.5.20 + - @backstage/plugin-proxy-backend@0.2.39 + - @backstage/plugin-search-backend-node@1.2.1 + - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.29 + - @backstage/plugin-tech-insights-node@0.4.3 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.6 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-search-common@1.2.3 + ## 0.2.83-next.2 ### Patch Changes diff --git a/packages/backend/package.json b/packages/backend/package.json index b5a82fd611..7d6c1011e4 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -1,6 +1,6 @@ { "name": "example-backend", - "version": "0.2.83-next.2", + "version": "0.2.83", "main": "dist/index.cjs.js", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index a8c7207650..b91dad32b7 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/cli +## 0.22.7 + +### Patch Changes + +- 473db605a4f: Enable strict config checking during `backstage-cli config:check` with the new `--strict` option which will surface schema errors. +- d548886872d: Deprecated the use of React 16 +- Updated dependencies + - @backstage/config-loader@1.3.0 + - @backstage/cli-common@0.1.12 + - @backstage/cli-node@0.1.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/eslint-plugin@0.1.3 + - @backstage/release-manifests@0.0.9 + - @backstage/types@1.0.2 + ## 0.22.7-next.0 ### Patch Changes diff --git a/packages/cli/package.json b/packages/cli/package.json index 9de7b3dbb2..28c5ce7030 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/cli", "description": "CLI for developing Backstage plugins and apps", - "version": "0.22.7-next.0", + "version": "0.22.7", "publishConfig": { "access": "public" }, diff --git a/packages/config-loader/CHANGELOG.md b/packages/config-loader/CHANGELOG.md index 9b2d34f957..05e4398bc8 100644 --- a/packages/config-loader/CHANGELOG.md +++ b/packages/config-loader/CHANGELOG.md @@ -1,5 +1,56 @@ # @backstage/config-loader +## 1.3.0 + +### Minor Changes + +- 201206132da: Introduced a new config source system to replace `loadConfig`. There is a new `ConfigSource` interface along with utilities provided by `ConfigSources`, as well as a number of built-in configuration source implementations. The new system is more flexible and makes it easier to create new and reusable sources of configuration, such as loading configuration from secret providers. + + The following is an example of how to load configuration using the default behavior: + + ```ts + const source = ConfigSources.default({ + argv: options?.argv, + remote: options?.remote, + }); + const config = await ConfigSources.toConfig(source); + ``` + + The `ConfigSource` interface looks like this: + + ```ts + export interface ConfigSource { + readConfigData(options?: ReadConfigDataOptions): AsyncConfigSourceIterator; + } + ``` + + It is best implemented using an async iterator: + + ```ts + class MyConfigSource implements ConfigSource { + async *readConfigData() { + yield { + config: [ + { + context: 'example', + data: { backend: { baseUrl: 'http://localhost' } }, + }, + ], + }; + } + } + ``` + +### Patch Changes + +- 7c116bcac7f: Fixed the way that some request errors are thrown +- 473db605a4f: Added a new `noUndeclaredProperties` option to `SchemaLoader` to support enforcing that there are no extra keys when verifying config. +- Updated dependencies + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + ## 1.3.0-next.0 ### Minor Changes diff --git a/packages/config-loader/package.json b/packages/config-loader/package.json index 0aa071c206..d453b40201 100644 --- a/packages/config-loader/package.json +++ b/packages/config-loader/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/config-loader", "description": "Config loading functionality used by Backstage backend, and CLI", - "version": "1.3.0-next.0", + "version": "1.3.0", "publishConfig": { "access": "public", "main": "dist/index.cjs.js", diff --git a/packages/core-app-api/CHANGELOG.md b/packages/core-app-api/CHANGELOG.md index f4179e6fb6..f6df0da032 100644 --- a/packages/core-app-api/CHANGELOG.md +++ b/packages/core-app-api/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/core-app-api +## 1.8.0 + +### Minor Changes + +- c89437db899: The analytics' `navigate` event will now include the route parameters as attributes of the navigate event + +### Patch Changes + +- b645d70034a: Fixed a bug in the Azure auth provider which prevented getting access tokens with multiple scopes for one resource +- 42d817e76ab: Added `FrontendHostDiscovery` for config driven discovery implementation +- Updated dependencies + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.4 + ## 1.8.0-next.1 ### Minor Changes diff --git a/packages/core-app-api/package.json b/packages/core-app-api/package.json index 5d99754068..4416fa99e1 100644 --- a/packages/core-app-api/package.json +++ b/packages/core-app-api/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/core-app-api", "description": "Core app API used by Backstage apps", - "version": "1.8.0-next.1", + "version": "1.8.0", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/packages/core-components/CHANGELOG.md b/packages/core-components/CHANGELOG.md index 90f4e174b0..8ace83e62b 100644 --- a/packages/core-components/CHANGELOG.md +++ b/packages/core-components/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/core-components +## 0.13.1 + +### Patch Changes + +- 83b45f9df50: Fix accessibility issue with Backstage Table's header style +- e97769f7c0b: Fix accessibility issue on controlled select input on tab navigation + keyboard enter/space action. +- b1f13cb38aa: Fix accessibility issue with Edit Metadata Link on screen readers missing notice about opening in a new tab. +- 26cff1a5dfb: Start capturing sidebar click events in analytics by default. +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/version-bridge@1.0.4 + ## 0.13.1-next.1 ### Patch Changes diff --git a/packages/core-components/package.json b/packages/core-components/package.json index ec46c4c6e3..872808622f 100644 --- a/packages/core-components/package.json +++ b/packages/core-components/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/core-components", "description": "Core components used by Backstage plugins and apps", - "version": "0.13.1-next.1", + "version": "0.13.1", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/packages/create-app/CHANGELOG.md b/packages/create-app/CHANGELOG.md index 16d93b1867..c1b613ed28 100644 --- a/packages/create-app/CHANGELOG.md +++ b/packages/create-app/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/create-app +## 0.5.1 + +### Patch Changes + +- 1d5e42655cd: Correct command to create new plugins +- e04bb20bdc4: Bumped create-app version. +- Updated dependencies + - @backstage/cli-common@0.1.12 + ## 0.5.1-next.2 ### Patch Changes diff --git a/packages/create-app/package.json b/packages/create-app/package.json index 841c1b401d..ff9fdd6623 100644 --- a/packages/create-app/package.json +++ b/packages/create-app/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/create-app", "description": "A CLI that helps you create your own Backstage app", - "version": "0.5.1-next.2", + "version": "0.5.1", "publishConfig": { "access": "public" }, diff --git a/packages/dev-utils/CHANGELOG.md b/packages/dev-utils/CHANGELOG.md index 77e5241e7e..6e88b8d085 100644 --- a/packages/dev-utils/CHANGELOG.md +++ b/packages/dev-utils/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/dev-utils +## 1.0.15 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/app-defaults@1.3.1 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-app-api@1.8.0 + - @backstage/core-components@0.13.1 + - @backstage/integration-react@1.1.13 + - @backstage/test-utils@1.3.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + ## 1.0.15-next.2 ### Patch Changes diff --git a/packages/dev-utils/package.json b/packages/dev-utils/package.json index c14732070f..3ca693d906 100644 --- a/packages/dev-utils/package.json +++ b/packages/dev-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/dev-utils", "description": "Utilities for developing Backstage plugins.", - "version": "1.0.15-next.2", + "version": "1.0.15", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/packages/e2e-test/CHANGELOG.md b/packages/e2e-test/CHANGELOG.md index eaec405ec9..7186431398 100644 --- a/packages/e2e-test/CHANGELOG.md +++ b/packages/e2e-test/CHANGELOG.md @@ -1,5 +1,14 @@ # e2e-test +## 0.2.3 + +### Patch Changes + +- Updated dependencies + - @backstage/create-app@0.5.1 + - @backstage/cli-common@0.1.12 + - @backstage/errors@1.1.5 + ## 0.2.3-next.2 ### Patch Changes diff --git a/packages/e2e-test/package.json b/packages/e2e-test/package.json index 60877e8d66..011a9e876d 100644 --- a/packages/e2e-test/package.json +++ b/packages/e2e-test/package.json @@ -1,7 +1,7 @@ { "name": "e2e-test", "description": "E2E test for verifying Backstage packages", - "version": "0.2.3-next.2", + "version": "0.2.3", "private": true, "backstage": { "role": "cli" diff --git a/packages/integration-aws-node/CHANGELOG.md b/packages/integration-aws-node/CHANGELOG.md index 40192bdfaf..181b08c4ee 100644 --- a/packages/integration-aws-node/CHANGELOG.md +++ b/packages/integration-aws-node/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/integration-aws-node +## 0.1.3 + +### Patch Changes + +- 3659c71c5d9: Standardize `@aws-sdk` v3 versions +- Updated dependencies + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 0.1.2 ### Patch Changes diff --git a/packages/integration-aws-node/package.json b/packages/integration-aws-node/package.json index 30a95b549e..8eec21a143 100644 --- a/packages/integration-aws-node/package.json +++ b/packages/integration-aws-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/integration-aws-node", "description": "Helpers for fetching AWS account credentials", - "version": "0.1.2", + "version": "0.1.3", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/integration-react/CHANGELOG.md b/packages/integration-react/CHANGELOG.md index f9c035b7a6..b1bfe3e73f 100644 --- a/packages/integration-react/CHANGELOG.md +++ b/packages/integration-react/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/integration-react +## 1.1.13 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/integration@1.4.5 + - @backstage/core-components@0.13.1 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + ## 1.1.13-next.2 ### Patch Changes diff --git a/packages/integration-react/package.json b/packages/integration-react/package.json index 3124557ebc..929faae601 100644 --- a/packages/integration-react/package.json +++ b/packages/integration-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/integration-react", "description": "Frontend package for managing integrations towards external systems", - "version": "1.1.13-next.2", + "version": "1.1.13", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/integration/CHANGELOG.md b/packages/integration/CHANGELOG.md index 92eff86bb5..7dcef4fbc9 100644 --- a/packages/integration/CHANGELOG.md +++ b/packages/integration/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/integration +## 1.4.5 + +### Patch Changes + +- b026275bcc8: Fixed a bug where the wrong credentials would be selected when using multiple GitHub app integrations. +- Updated dependencies + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 1.4.5-next.0 ### Patch Changes diff --git a/packages/integration/package.json b/packages/integration/package.json index fbe8ac1fc3..14b64b3089 100644 --- a/packages/integration/package.json +++ b/packages/integration/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/integration", "description": "Helpers for managing integrations towards external systems", - "version": "1.4.5-next.0", + "version": "1.4.5", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/repo-tools/CHANGELOG.md b/packages/repo-tools/CHANGELOG.md index e31c05532c..7f1ece48d4 100644 --- a/packages/repo-tools/CHANGELOG.md +++ b/packages/repo-tools/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/repo-tools +## 0.3.0 + +### Minor Changes + +- 799c33047ed: **BREAKING**: The OpenAPI commands are now found within the `schema openapi` sub-command. For example `yarn backstage-repo-tools schema:openapi:verify` is now `yarn backstage-repo-tools schema openapi verify`. +- 27956d78671: Generated OpenAPI files now have a `.generated.ts` file name and a warning header at the top, to highlight that they should not be edited by hand. + +### Patch Changes + +- Updated dependencies + - @backstage/cli-common@0.1.12 + - @backstage/cli-node@0.1.0 + - @backstage/errors@1.1.5 + ## 0.3.0-next.0 ### Minor Changes diff --git a/packages/repo-tools/package.json b/packages/repo-tools/package.json index 74c39fc9a8..85f683a999 100644 --- a/packages/repo-tools/package.json +++ b/packages/repo-tools/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/repo-tools", "description": "CLI for Backstage repo tooling ", - "version": "0.3.0-next.0", + "version": "0.3.0", "publishConfig": { "access": "public" }, diff --git a/packages/techdocs-cli-embedded-app/CHANGELOG.md b/packages/techdocs-cli-embedded-app/CHANGELOG.md index 3e7e890e7c..6886f89c11 100644 --- a/packages/techdocs-cli-embedded-app/CHANGELOG.md +++ b/packages/techdocs-cli-embedded-app/CHANGELOG.md @@ -1,5 +1,24 @@ # techdocs-cli-embedded-app +## 0.2.82 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-techdocs@1.6.2 + - @backstage/app-defaults@1.3.1 + - @backstage/cli@0.22.7 + - @backstage/plugin-catalog@1.11.0 + - @backstage/core-app-api@1.8.0 + - @backstage/core-components@0.13.1 + - @backstage/integration-react@1.1.13 + - @backstage/test-utils@1.3.1 + - @backstage/plugin-techdocs-react@1.1.6 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + ## 0.2.82-next.2 ### Patch Changes diff --git a/packages/techdocs-cli-embedded-app/package.json b/packages/techdocs-cli-embedded-app/package.json index a645d2dac1..fb3715325b 100644 --- a/packages/techdocs-cli-embedded-app/package.json +++ b/packages/techdocs-cli-embedded-app/package.json @@ -1,6 +1,6 @@ { "name": "techdocs-cli-embedded-app", - "version": "0.2.82-next.2", + "version": "0.2.82", "private": true, "backstage": { "role": "frontend" diff --git a/packages/techdocs-cli/CHANGELOG.md b/packages/techdocs-cli/CHANGELOG.md index 35f3b4bc28..ce88475c7f 100644 --- a/packages/techdocs-cli/CHANGELOG.md +++ b/packages/techdocs-cli/CHANGELOG.md @@ -1,5 +1,16 @@ # @techdocs/cli +## 1.4.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-techdocs-node@1.7.1 + - @backstage/catalog-model@1.3.0 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + ## 1.4.2-next.1 ### Patch Changes diff --git a/packages/techdocs-cli/package.json b/packages/techdocs-cli/package.json index 8b533b4453..e61401e8ce 100644 --- a/packages/techdocs-cli/package.json +++ b/packages/techdocs-cli/package.json @@ -1,7 +1,7 @@ { "name": "@techdocs/cli", "description": "Utility CLI for managing TechDocs sites in Backstage.", - "version": "1.4.2-next.1", + "version": "1.4.2", "publishConfig": { "access": "public" }, diff --git a/packages/test-utils/CHANGELOG.md b/packages/test-utils/CHANGELOG.md index 6804a09762..4bebf94052 100644 --- a/packages/test-utils/CHANGELOG.md +++ b/packages/test-utils/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/test-utils +## 1.3.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-app-api@1.8.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/types@1.0.2 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-permission-react@0.4.12 + ## 1.3.1-next.2 ### Patch Changes diff --git a/packages/test-utils/package.json b/packages/test-utils/package.json index fa2557c4de..3024b25c05 100644 --- a/packages/test-utils/package.json +++ b/packages/test-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/test-utils", "description": "Utilities to test Backstage plugins and apps.", - "version": "1.3.1-next.2", + "version": "1.3.1", "publishConfig": { "access": "public" }, diff --git a/packages/theme/CHANGELOG.md b/packages/theme/CHANGELOG.md index 1e676394b5..0f8b4819b7 100644 --- a/packages/theme/CHANGELOG.md +++ b/packages/theme/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/theme +## 0.3.0 + +### Minor Changes + +- 98c0c199b15: Updates light theme's primary foreground and `running` status indicator colours to meet WCAG. Previously #2E77D0 changed to #1F5493. + +### Patch Changes + +- 83b45f9df50: Fix accessibility issue with Backstage Table's header style + ## 0.3.0-next.0 ### Minor Changes diff --git a/packages/theme/package.json b/packages/theme/package.json index f0e26f5739..fbc767fb2f 100644 --- a/packages/theme/package.json +++ b/packages/theme/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/theme", "description": "material-ui theme for use with Backstage.", - "version": "0.3.0-next.0", + "version": "0.3.0", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/plugins/adr-backend/CHANGELOG.md b/plugins/adr-backend/CHANGELOG.md index 39e8bf7e4c..dd7823c048 100644 --- a/plugins/adr-backend/CHANGELOG.md +++ b/plugins/adr-backend/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-adr-backend +## 0.3.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-adr-common@0.2.9 + - @backstage/plugin-search-common@1.2.3 + ## 0.3.3-next.1 ### Patch Changes diff --git a/plugins/adr-backend/package.json b/plugins/adr-backend/package.json index a1f6a859a0..a926239ba7 100644 --- a/plugins/adr-backend/package.json +++ b/plugins/adr-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-adr-backend", - "version": "0.3.3-next.1", + "version": "0.3.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/adr-common/CHANGELOG.md b/plugins/adr-common/CHANGELOG.md index c3b8806c80..9fddae2588 100644 --- a/plugins/adr-common/CHANGELOG.md +++ b/plugins/adr-common/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-adr-common +## 0.2.9 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.4.5 + - @backstage/catalog-model@1.3.0 + - @backstage/plugin-search-common@1.2.3 + ## 0.2.9-next.0 ### Patch Changes diff --git a/plugins/adr-common/package.json b/plugins/adr-common/package.json index 0fdf94003a..adbb6bea58 100644 --- a/plugins/adr-common/package.json +++ b/plugins/adr-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-adr-common", "description": "Common functionalities for the adr plugin", - "version": "0.2.9-next.0", + "version": "0.2.9", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/adr/CHANGELOG.md b/plugins/adr/CHANGELOG.md index ce583e56d2..b96e66e9d3 100644 --- a/plugins/adr/CHANGELOG.md +++ b/plugins/adr/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-adr +## 0.6.0 + +### Minor Changes + +- b12cd5dc221: render SupportButton only if config is set + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/plugin-search-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/integration-react@1.1.13 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-adr-common@0.2.9 + - @backstage/plugin-search-common@1.2.3 + ## 0.5.1-next.2 ### Patch Changes diff --git a/plugins/adr/package.json b/plugins/adr/package.json index 707f0396cf..cac6b89fcc 100644 --- a/plugins/adr/package.json +++ b/plugins/adr/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-adr", - "version": "0.5.1-next.2", + "version": "0.6.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/airbrake-backend/CHANGELOG.md b/plugins/airbrake-backend/CHANGELOG.md index 8407f5822e..15c10734de 100644 --- a/plugins/airbrake-backend/CHANGELOG.md +++ b/plugins/airbrake-backend/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-airbrake-backend +## 0.2.18 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/config@1.0.7 + ## 0.2.18-next.1 ### Patch Changes diff --git a/plugins/airbrake-backend/package.json b/plugins/airbrake-backend/package.json index c57ffa8be9..eaec28f797 100644 --- a/plugins/airbrake-backend/package.json +++ b/plugins/airbrake-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-airbrake-backend", - "version": "0.2.18-next.1", + "version": "0.2.18", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/airbrake/CHANGELOG.md b/plugins/airbrake/CHANGELOG.md index 15472a973a..854e9be255 100644 --- a/plugins/airbrake/CHANGELOG.md +++ b/plugins/airbrake/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-airbrake +## 0.3.18 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/dev-utils@1.0.15 + - @backstage/test-utils@1.3.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + ## 0.3.18-next.2 ### Patch Changes diff --git a/plugins/airbrake/package.json b/plugins/airbrake/package.json index 3934c29680..6933bad355 100644 --- a/plugins/airbrake/package.json +++ b/plugins/airbrake/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-airbrake", - "version": "0.3.18-next.2", + "version": "0.3.18", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/allure/CHANGELOG.md b/plugins/allure/CHANGELOG.md index e656638fd6..e89f981487 100644 --- a/plugins/allure/CHANGELOG.md +++ b/plugins/allure/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-allure +## 0.1.34 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + ## 0.1.34-next.2 ### Patch Changes diff --git a/plugins/allure/package.json b/plugins/allure/package.json index d8fb27f36c..e2f6c7241a 100644 --- a/plugins/allure/package.json +++ b/plugins/allure/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-allure", "description": "A Backstage plugin that integrates with Allure", - "version": "0.1.34-next.2", + "version": "0.1.34", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/analytics-module-ga/CHANGELOG.md b/plugins/analytics-module-ga/CHANGELOG.md index ec3122845a..fc0a434a5e 100644 --- a/plugins/analytics-module-ga/CHANGELOG.md +++ b/plugins/analytics-module-ga/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-analytics-module-ga +## 0.1.29 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + ## 0.1.29-next.1 ### Patch Changes diff --git a/plugins/analytics-module-ga/package.json b/plugins/analytics-module-ga/package.json index 2b2542ec2d..8062c304fa 100644 --- a/plugins/analytics-module-ga/package.json +++ b/plugins/analytics-module-ga/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-analytics-module-ga", - "version": "0.1.29-next.1", + "version": "0.1.29", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/analytics-module-ga4/CHANGELOG.md b/plugins/analytics-module-ga4/CHANGELOG.md index 15e67dd797..c69204bcc0 100644 --- a/plugins/analytics-module-ga4/CHANGELOG.md +++ b/plugins/analytics-module-ga4/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-analytics-module-ga4 +## 0.1.0 + +### Minor Changes + +- 22b46f7f562: Plugin provides Backstage Analytics API for Google Analytics 4. Once installed and configured, analytics events will be sent to GA4 as your users navigate and use your Backstage instance + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + ## 0.1.0-next.2 ### Patch Changes diff --git a/plugins/analytics-module-ga4/package.json b/plugins/analytics-module-ga4/package.json index eee914df92..dba9d0c8f4 100644 --- a/plugins/analytics-module-ga4/package.json +++ b/plugins/analytics-module-ga4/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-analytics-module-ga4", - "version": "0.1.0-next.2", + "version": "0.1.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/apache-airflow/CHANGELOG.md b/plugins/apache-airflow/CHANGELOG.md index 612a2a3e1d..f9f6958a87 100644 --- a/plugins/apache-airflow/CHANGELOG.md +++ b/plugins/apache-airflow/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-apache-airflow +## 0.2.11 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + ## 0.2.11-next.1 ### Patch Changes diff --git a/plugins/apache-airflow/package.json b/plugins/apache-airflow/package.json index cf7cf9553c..4ad427a972 100644 --- a/plugins/apache-airflow/package.json +++ b/plugins/apache-airflow/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-apache-airflow", - "version": "0.2.11-next.1", + "version": "0.2.11", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/api-docs/CHANGELOG.md b/plugins/api-docs/CHANGELOG.md index f370ab46ee..2455e7809c 100644 --- a/plugins/api-docs/CHANGELOG.md +++ b/plugins/api-docs/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-api-docs +## 0.9.3 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/plugin-catalog@1.11.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + ## 0.9.3-next.2 ### Patch Changes diff --git a/plugins/api-docs/package.json b/plugins/api-docs/package.json index e31e2ec48e..651a606d9c 100644 --- a/plugins/api-docs/package.json +++ b/plugins/api-docs/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-api-docs", "description": "A Backstage plugin that helps represent API entities in the frontend", - "version": "0.9.3-next.2", + "version": "0.9.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/apollo-explorer/CHANGELOG.md b/plugins/apollo-explorer/CHANGELOG.md index 38d322a270..9efa02cea9 100644 --- a/plugins/apollo-explorer/CHANGELOG.md +++ b/plugins/apollo-explorer/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-apollo-explorer +## 0.1.11 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + ## 0.1.11-next.1 ### Patch Changes diff --git a/plugins/apollo-explorer/package.json b/plugins/apollo-explorer/package.json index 5117fa632c..b28293777d 100644 --- a/plugins/apollo-explorer/package.json +++ b/plugins/apollo-explorer/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-apollo-explorer", - "version": "0.1.11-next.1", + "version": "0.1.11", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/app-backend/CHANGELOG.md b/plugins/app-backend/CHANGELOG.md index 1e98f25c64..d89ba0a4ec 100644 --- a/plugins/app-backend/CHANGELOG.md +++ b/plugins/app-backend/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-app-backend +## 0.3.45 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/config-loader@1.3.0 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + ## 0.3.45-next.1 ### Patch Changes diff --git a/plugins/app-backend/package.json b/plugins/app-backend/package.json index 85602a06e4..9a471f0021 100644 --- a/plugins/app-backend/package.json +++ b/plugins/app-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-app-backend", "description": "A Backstage backend plugin that serves the Backstage frontend app", - "version": "0.3.45-next.1", + "version": "0.3.45", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/auth-backend/CHANGELOG.md b/plugins/auth-backend/CHANGELOG.md index 406298f6d2..551872232d 100644 --- a/plugins/auth-backend/CHANGELOG.md +++ b/plugins/auth-backend/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-auth-backend +## 0.18.3 + +### Patch Changes + +- 7c116bcac7f: Fixed the way that some request errors are thrown +- 473db605a4f: Fix config schema definition. +- 3ffcdac7d07: Added a persistent session store through the database +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + ## 0.18.3-next.2 ### Patch Changes diff --git a/plugins/auth-backend/package.json b/plugins/auth-backend/package.json index fbaf3c5423..fb53d9b17f 100644 --- a/plugins/auth-backend/package.json +++ b/plugins/auth-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-auth-backend", "description": "A Backstage backend plugin that handles authentication", - "version": "0.18.3-next.2", + "version": "0.18.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/auth-node/CHANGELOG.md b/plugins/auth-node/CHANGELOG.md index 7cb9f4cc64..e299198f8f 100644 --- a/plugins/auth-node/CHANGELOG.md +++ b/plugins/auth-node/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-auth-node +## 0.2.14 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 0.2.14-next.1 ### Patch Changes diff --git a/plugins/auth-node/package.json b/plugins/auth-node/package.json index 1d8e71a4c0..25bcda593a 100644 --- a/plugins/auth-node/package.json +++ b/plugins/auth-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-node", - "version": "0.2.14-next.1", + "version": "0.2.14", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/azure-devops-backend/CHANGELOG.md b/plugins/azure-devops-backend/CHANGELOG.md index 3dd206ae66..232347e752 100644 --- a/plugins/azure-devops-backend/CHANGELOG.md +++ b/plugins/azure-devops-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-azure-devops-backend +## 0.3.24 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/config@1.0.7 + - @backstage/plugin-azure-devops-common@0.3.0 + ## 0.3.24-next.1 ### Patch Changes diff --git a/plugins/azure-devops-backend/package.json b/plugins/azure-devops-backend/package.json index f28bfa5cb4..2a0f3b76a5 100644 --- a/plugins/azure-devops-backend/package.json +++ b/plugins/azure-devops-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-azure-devops-backend", - "version": "0.3.24-next.1", + "version": "0.3.24", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/azure-devops/CHANGELOG.md b/plugins/azure-devops/CHANGELOG.md index 608f88437c..20bbec23b4 100644 --- a/plugins/azure-devops/CHANGELOG.md +++ b/plugins/azure-devops/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-azure-devops +## 0.3.0 + +### Minor Changes + +- 877df261085: The getBuildRuns function now checks contains multiple comma-separated builds and splits them to send multiple requests for each and concatenates the results. + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-azure-devops-common@0.3.0 + ## 0.3.0-next.2 ### Minor Changes diff --git a/plugins/azure-devops/package.json b/plugins/azure-devops/package.json index 8b3f4a8496..99122b62db 100644 --- a/plugins/azure-devops/package.json +++ b/plugins/azure-devops/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-azure-devops", - "version": "0.3.0-next.2", + "version": "0.3.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/azure-sites-backend/CHANGELOG.md b/plugins/azure-sites-backend/CHANGELOG.md index 9c25a70214..d8b123dec1 100644 --- a/plugins/azure-sites-backend/CHANGELOG.md +++ b/plugins/azure-sites-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-azure-sites-backend +## 0.1.7 + +### Patch Changes + +- d66d4f916aa: Updated URL to `/health` and corrected typos in the `README.md` +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/config@1.0.7 + - @backstage/plugin-azure-sites-common@0.1.0 + ## 0.1.7-next.1 ### Patch Changes diff --git a/plugins/azure-sites-backend/package.json b/plugins/azure-sites-backend/package.json index a58459d2aa..61c23a4b0f 100644 --- a/plugins/azure-sites-backend/package.json +++ b/plugins/azure-sites-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-azure-sites-backend", - "version": "0.1.7-next.1", + "version": "0.1.7", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/azure-sites/CHANGELOG.md b/plugins/azure-sites/CHANGELOG.md index 20703e33a5..bc7184c9ca 100644 --- a/plugins/azure-sites/CHANGELOG.md +++ b/plugins/azure-sites/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-azure-sites +## 0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-azure-sites-common@0.1.0 + ## 0.1.7-next.2 ### Patch Changes diff --git a/plugins/azure-sites/package.json b/plugins/azure-sites/package.json index c3335d6129..44775bcab4 100644 --- a/plugins/azure-sites/package.json +++ b/plugins/azure-sites/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-azure-sites", - "version": "0.1.7-next.2", + "version": "0.1.7", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/badges-backend/CHANGELOG.md b/plugins/badges-backend/CHANGELOG.md index c543efb0a6..e15a74e3de 100644 --- a/plugins/badges-backend/CHANGELOG.md +++ b/plugins/badges-backend/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-badges-backend +## 0.2.0 + +### Minor Changes + +- a0108c49774: Fixing badges-backend plugin to get a token from the TokenManager instead of parsing the request header. Hence, it's now possible to disable the authMiddleware for the badges-backend plugin to expose publicly the badges. + + Implementing an obfuscation feature to protect an open badges endpoint from being enumerated. The feature is disabled by default and the change is compatible with the previous version. + + **BREAKING**: `createRouter` now require that `tokenManager`, `logger`, and `identityApi`, are passed in as options. + +### Patch Changes + +- 0cd552c28d8: Removed some unused dependencies +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 0.2.0-next.2 ### Minor Changes diff --git a/plugins/badges-backend/package.json b/plugins/badges-backend/package.json index 84b4d324d7..f2db6ef5c5 100644 --- a/plugins/badges-backend/package.json +++ b/plugins/badges-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-badges-backend", "description": "A Backstage backend plugin that generates README badges for your entities", - "version": "0.2.0-next.2", + "version": "0.2.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/badges/CHANGELOG.md b/plugins/badges/CHANGELOG.md index a05ef8405d..1ec81cb321 100644 --- a/plugins/badges/CHANGELOG.md +++ b/plugins/badges/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-badges +## 0.2.42 + +### Patch Changes + +- a0108c49774: Fixing badges-backend plugin to get a token from the TokenManager instead of parsing the request header. Hence, it's now possible to disable the authMiddleware for the badges-backend plugin to expose publicly the badges. + + Implementing an obfuscation feature to protect an open badges endpoint from being enumerated. The feature is disabled by default and the change is compatible with the previous version. + + **BREAKING**: `createRouter` now require that `tokenManager`, `logger`, and `identityApi`, are passed in as options. + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + ## 0.2.42-next.2 ### Patch Changes diff --git a/plugins/badges/package.json b/plugins/badges/package.json index be2f7adc79..fcfb55c386 100644 --- a/plugins/badges/package.json +++ b/plugins/badges/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-badges", "description": "A Backstage plugin that generates README badges for your entities", - "version": "0.2.42-next.2", + "version": "0.2.42", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/bazaar-backend/CHANGELOG.md b/plugins/bazaar-backend/CHANGELOG.md index 11d820a334..da83be709c 100644 --- a/plugins/bazaar-backend/CHANGELOG.md +++ b/plugins/bazaar-backend/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-bazaar-backend +## 0.2.8 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 0.2.8-next.1 ### Patch Changes diff --git a/plugins/bazaar-backend/package.json b/plugins/bazaar-backend/package.json index 60e549655e..9dd25233c6 100644 --- a/plugins/bazaar-backend/package.json +++ b/plugins/bazaar-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-bazaar-backend", - "version": "0.2.8-next.1", + "version": "0.2.8", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/bazaar/CHANGELOG.md b/plugins/bazaar/CHANGELOG.md index 8f7de5e0f2..4b1a86deb9 100644 --- a/plugins/bazaar/CHANGELOG.md +++ b/plugins/bazaar/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-bazaar +## 0.2.8 + +### Patch Changes + +- 900880ab7c3: Fixed `validateDOMNesting` warnings +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/cli@0.22.7 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/plugin-catalog@1.11.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + ## 0.2.8-next.2 ### Patch Changes diff --git a/plugins/bazaar/package.json b/plugins/bazaar/package.json index 5e8bb28df6..d8d334b426 100644 --- a/plugins/bazaar/package.json +++ b/plugins/bazaar/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-bazaar", - "version": "0.2.8-next.2", + "version": "0.2.8", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/bitbucket-cloud-common/CHANGELOG.md b/plugins/bitbucket-cloud-common/CHANGELOG.md index c3c31ed392..04b2cc787b 100644 --- a/plugins/bitbucket-cloud-common/CHANGELOG.md +++ b/plugins/bitbucket-cloud-common/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-bitbucket-cloud-common +## 0.2.6 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.4.5 + ## 0.2.6-next.0 ### Patch Changes diff --git a/plugins/bitbucket-cloud-common/package.json b/plugins/bitbucket-cloud-common/package.json index 7bf2c5791e..a63b9588fb 100644 --- a/plugins/bitbucket-cloud-common/package.json +++ b/plugins/bitbucket-cloud-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-bitbucket-cloud-common", "description": "Common functionalities for bitbucket-cloud plugins", - "version": "0.2.6-next.0", + "version": "0.2.6", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/bitrise/CHANGELOG.md b/plugins/bitrise/CHANGELOG.md index 2fba6da9b3..069fc0ca6e 100644 --- a/plugins/bitrise/CHANGELOG.md +++ b/plugins/bitrise/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-bitrise +## 0.1.45 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + ## 0.1.45-next.2 ### Patch Changes diff --git a/plugins/bitrise/package.json b/plugins/bitrise/package.json index 1c1c3523ea..fe62603226 100644 --- a/plugins/bitrise/package.json +++ b/plugins/bitrise/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-bitrise", "description": "A Backstage plugin that integrates towards Bitrise", - "version": "0.1.45-next.2", + "version": "0.1.45", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-aws/CHANGELOG.md b/plugins/catalog-backend-module-aws/CHANGELOG.md index 886703f0c8..029ab14592 100644 --- a/plugins/catalog-backend-module-aws/CHANGELOG.md +++ b/plugins/catalog-backend-module-aws/CHANGELOG.md @@ -1,5 +1,27 @@ # @backstage/plugin-catalog-backend-module-aws +## 0.2.0 + +### Minor Changes + +- 1a3b5f1e390: **BREAKING**: AwsOrganizationCloudAccountProcessor.fromConfig now returns a promise instead of the instance directly. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/integration-aws-node@0.1.3 + - @backstage/plugin-kubernetes-common@0.6.3 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + ## 0.1.19-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-aws/package.json b/plugins/catalog-backend-module-aws/package.json index 50d7349cef..a5e0aad55b 100644 --- a/plugins/catalog-backend-module-aws/package.json +++ b/plugins/catalog-backend-module-aws/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-aws", "description": "A Backstage catalog backend module that helps integrate towards AWS", - "version": "0.1.19-next.2", + "version": "0.2.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-azure/CHANGELOG.md b/plugins/catalog-backend-module-azure/CHANGELOG.md index e8458d82e7..21b95b5861 100644 --- a/plugins/catalog-backend-module-azure/CHANGELOG.md +++ b/plugins/catalog-backend-module-azure/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-catalog-backend-module-azure +## 0.1.16 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + ## 0.1.16-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-azure/package.json b/plugins/catalog-backend-module-azure/package.json index 2e2ff96e7e..e9d6803571 100644 --- a/plugins/catalog-backend-module-azure/package.json +++ b/plugins/catalog-backend-module-azure/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-azure", "description": "A Backstage catalog backend module that helps integrate towards Azure", - "version": "0.1.16-next.1", + "version": "0.1.16", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md index af6e6c3a7f..94c83e6b2e 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-catalog-backend-module-bitbucket-cloud +## 0.1.12 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/plugin-bitbucket-cloud-common@0.2.6 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-events-node@0.2.6 + ## 0.1.12-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-bitbucket-cloud/package.json b/plugins/catalog-backend-module-bitbucket-cloud/package.json index 77df5b12b4..00e4269342 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/package.json +++ b/plugins/catalog-backend-module-bitbucket-cloud/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-bitbucket-cloud", "description": "A Backstage catalog backend module that helps integrate towards Bitbucket Cloud", - "version": "0.1.12-next.1", + "version": "0.1.12", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md index 3c9e51b08e..ae894c2e12 100644 --- a/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-catalog-backend-module-bitbucket-server +## 0.1.10 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 0.1.10-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-bitbucket-server/package.json b/plugins/catalog-backend-module-bitbucket-server/package.json index 68960fbf81..3dc8aca390 100644 --- a/plugins/catalog-backend-module-bitbucket-server/package.json +++ b/plugins/catalog-backend-module-bitbucket-server/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-bitbucket-server", - "version": "0.1.10-next.1", + "version": "0.1.10", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-bitbucket/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket/CHANGELOG.md index 0193d551a5..b7a9f2d0a2 100644 --- a/plugins/catalog-backend-module-bitbucket/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-catalog-backend-module-bitbucket +## 0.2.12 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-bitbucket-cloud-common@0.2.6 + ## 0.2.12-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-bitbucket/package.json b/plugins/catalog-backend-module-bitbucket/package.json index 64269a9102..1dbbb4bb45 100644 --- a/plugins/catalog-backend-module-bitbucket/package.json +++ b/plugins/catalog-backend-module-bitbucket/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-bitbucket", "description": "A Backstage catalog backend module that helps integrate towards Bitbucket", - "version": "0.2.12-next.1", + "version": "0.2.12", "deprecated": true, "main": "src/index.ts", "types": "src/index.ts", diff --git a/plugins/catalog-backend-module-gerrit/CHANGELOG.md b/plugins/catalog-backend-module-gerrit/CHANGELOG.md index ea3d4af960..8f94db98f3 100644 --- a/plugins/catalog-backend-module-gerrit/CHANGELOG.md +++ b/plugins/catalog-backend-module-gerrit/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-catalog-backend-module-gerrit +## 0.1.13 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 0.1.13-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-gerrit/package.json b/plugins/catalog-backend-module-gerrit/package.json index 22bc3a95e5..a69aac5034 100644 --- a/plugins/catalog-backend-module-gerrit/package.json +++ b/plugins/catalog-backend-module-gerrit/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-gerrit", - "version": "0.1.13-next.1", + "version": "0.1.13", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-github/CHANGELOG.md b/plugins/catalog-backend-module-github/CHANGELOG.md index 9e3b24071f..427b48e7bb 100644 --- a/plugins/catalog-backend-module-github/CHANGELOG.md +++ b/plugins/catalog-backend-module-github/CHANGELOG.md @@ -1,5 +1,32 @@ # @backstage/plugin-catalog-backend-module-github +## 0.3.0 + +### Minor Changes + +- 970678adbe2: Implement events support for `GithubMultiOrgEntityProvider` + + **BREAKING:** Passing in a custom `teamTransformer` will now correctly completely override the default transformer behavior + +### Patch Changes + +- 78bb674a713: Fixed bug in queryWithPaging that caused secondary rate limit errors in GitHub with organizations having more than 1000 repositories. This change makes one request per second to avoid concurrency issues. +- bd101cefd37: Updated the `team.edited` event emitted from `GithubOrgEntityProvider` to also include teams description. +- Updated dependencies + - @backstage/plugin-catalog-backend@1.9.1 + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-events-node@0.2.6 + ## 0.3.0-next.2 ### Minor Changes diff --git a/plugins/catalog-backend-module-github/package.json b/plugins/catalog-backend-module-github/package.json index 1f79fea531..029acdf0e0 100644 --- a/plugins/catalog-backend-module-github/package.json +++ b/plugins/catalog-backend-module-github/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-github", "description": "A Backstage catalog backend module that helps integrate towards GitHub", - "version": "0.3.0-next.2", + "version": "0.3.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-gitlab/CHANGELOG.md b/plugins/catalog-backend-module-gitlab/CHANGELOG.md index 9882178a2b..a8c58d386a 100644 --- a/plugins/catalog-backend-module-gitlab/CHANGELOG.md +++ b/plugins/catalog-backend-module-gitlab/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-catalog-backend-module-gitlab +## 0.2.1 + +### Patch Changes + +- b12c41fafc4: Fix a corner case where returned users are null for bots +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + ## 0.2.1-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-gitlab/package.json b/plugins/catalog-backend-module-gitlab/package.json index 22237862aa..223d578da1 100644 --- a/plugins/catalog-backend-module-gitlab/package.json +++ b/plugins/catalog-backend-module-gitlab/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-gitlab", "description": "A Backstage catalog backend module that helps integrate towards GitLab", - "version": "0.2.1-next.1", + "version": "0.2.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md b/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md index 8c7b041d06..fdf0de5b0b 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md +++ b/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-catalog-backend-module-incremental-ingestion +## 0.3.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.9.1 + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-events-node@0.2.6 + - @backstage/plugin-permission-common@0.7.5 + ## 0.3.2-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-incremental-ingestion/package.json b/plugins/catalog-backend-module-incremental-ingestion/package.json index 69bc2dfbd6..b37f2bfb6c 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/package.json +++ b/plugins/catalog-backend-module-incremental-ingestion/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-incremental-ingestion", "description": "An entity provider for streaming large asset sources into the catalog", - "version": "0.3.2-next.2", + "version": "0.3.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-ldap/CHANGELOG.md b/plugins/catalog-backend-module-ldap/CHANGELOG.md index 104e3f1c0f..052f1cc473 100644 --- a/plugins/catalog-backend-module-ldap/CHANGELOG.md +++ b/plugins/catalog-backend-module-ldap/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-catalog-backend-module-ldap +## 0.5.12 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + ## 0.5.12-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-ldap/package.json b/plugins/catalog-backend-module-ldap/package.json index 120131d95a..6943df23fe 100644 --- a/plugins/catalog-backend-module-ldap/package.json +++ b/plugins/catalog-backend-module-ldap/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-ldap", "description": "A Backstage catalog backend module that helps integrate towards LDAP", - "version": "0.5.12-next.1", + "version": "0.5.12", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-msgraph/CHANGELOG.md b/plugins/catalog-backend-module-msgraph/CHANGELOG.md index c0c0888f38..f45e0c3440 100644 --- a/plugins/catalog-backend-module-msgraph/CHANGELOG.md +++ b/plugins/catalog-backend-module-msgraph/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-catalog-backend-module-msgraph +## 0.5.4 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/plugin-catalog-common@1.0.13 + ## 0.5.4-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-msgraph/package.json b/plugins/catalog-backend-module-msgraph/package.json index 026386457a..ae836681b4 100644 --- a/plugins/catalog-backend-module-msgraph/package.json +++ b/plugins/catalog-backend-module-msgraph/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-msgraph", "description": "A Backstage catalog backend module that helps integrate towards Microsoft Graph", - "version": "0.5.4-next.1", + "version": "0.5.4", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-openapi/CHANGELOG.md b/plugins/catalog-backend-module-openapi/CHANGELOG.md index 345032bda7..0598ea46ef 100644 --- a/plugins/catalog-backend-module-openapi/CHANGELOG.md +++ b/plugins/catalog-backend-module-openapi/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-catalog-backend-module-openapi +## 0.1.11 + +### Patch Changes + +- accaceadffa: Fixed bug in `jsonSchemaRefPlaceholderResolver` where relative $ref files were resolved through file system instead of base URL of file +- Updated dependencies + - @backstage/plugin-catalog-backend@1.9.1 + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + ## 0.1.11-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-openapi/package.json b/plugins/catalog-backend-module-openapi/package.json index c9960d15f1..980a8920cd 100644 --- a/plugins/catalog-backend-module-openapi/package.json +++ b/plugins/catalog-backend-module-openapi/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-openapi", "description": "A Backstage catalog backend module that helps with OpenAPI specifications", - "version": "0.1.11-next.2", + "version": "0.1.11", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-puppetdb/CHANGELOG.md b/plugins/catalog-backend-module-puppetdb/CHANGELOG.md index b5f13f39cd..e8750bc1c4 100644 --- a/plugins/catalog-backend-module-puppetdb/CHANGELOG.md +++ b/plugins/catalog-backend-module-puppetdb/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-catalog-backend-module-puppetdb +## 0.1.2 + +### Patch Changes + +- 95b2168d71b: Fixes import paths and updates documentation +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + ## 0.1.2-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-puppetdb/package.json b/plugins/catalog-backend-module-puppetdb/package.json index 3d1734657b..7286f66095 100644 --- a/plugins/catalog-backend-module-puppetdb/package.json +++ b/plugins/catalog-backend-module-puppetdb/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-puppetdb", "description": "A Backstage catalog backend module that helps integrate towards PuppetDB", - "version": "0.1.2-next.2", + "version": "0.1.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend/CHANGELOG.md b/plugins/catalog-backend/CHANGELOG.md index 78021149ff..e8c18be461 100644 --- a/plugins/catalog-backend/CHANGELOG.md +++ b/plugins/catalog-backend/CHANGELOG.md @@ -1,5 +1,34 @@ # @backstage/plugin-catalog-backend +## 1.9.1 + +### Patch Changes + +- ce8d203235b: Ensure that entity cache state is only written to the database when actually changed +- 485a6c5f7b5: Internal refactoring for performance in the service handlers +- 3587a968dcd: Fixed a bug in the `queryEntities` endpoint that was causing filtered entities to be included in cursor requests. +- ce335df9d1c: Improve the query for orphan pruning +- 27956d78671: Adjusted the OpenAPI schema file name according to the new structure +- 51064e6e5ee: Change orphan cleanup task to only log a message if it deleted entities. +- 12a345317ab: Remove unnecessary join in the entity facets endpoint, exclude nulls +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/plugin-scaffolder-common@1.3.0 + - @backstage/plugin-permission-node@0.7.8 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/plugin-search-backend-module-catalog@0.1.1 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-search-common@1.2.3 + ## 1.9.1-next.2 ### Patch Changes diff --git a/plugins/catalog-backend/package.json b/plugins/catalog-backend/package.json index 13f358f1ff..1a2ca55253 100644 --- a/plugins/catalog-backend/package.json +++ b/plugins/catalog-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend", "description": "The Backstage backend plugin that provides the Backstage catalog", - "version": "1.9.1-next.2", + "version": "1.9.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-customized/CHANGELOG.md b/plugins/catalog-customized/CHANGELOG.md index 0f8d9dccb1..00d769e71e 100644 --- a/plugins/catalog-customized/CHANGELOG.md +++ b/plugins/catalog-customized/CHANGELOG.md @@ -1,5 +1,13 @@ # @internal/plugin-catalog-customized +## 0.0.10 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/plugin-catalog@1.11.0 + ## 0.0.10-next.2 ### Patch Changes diff --git a/plugins/catalog-customized/package.json b/plugins/catalog-customized/package.json index f7a6b0b80f..12f9bc584f 100644 --- a/plugins/catalog-customized/package.json +++ b/plugins/catalog-customized/package.json @@ -1,7 +1,7 @@ { "name": "@internal/plugin-catalog-customized", "description": "The internal Backstage Customizable plugin for browsing the Backstage catalog", - "version": "0.0.10-next.2", + "version": "0.0.10", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-graph/CHANGELOG.md b/plugins/catalog-graph/CHANGELOG.md index 00c907899a..277f0a70cf 100644 --- a/plugins/catalog-graph/CHANGELOG.md +++ b/plugins/catalog-graph/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-catalog-graph +## 0.2.30 + +### Patch Changes + +- d446f8fb0a8: Expose all `EntityRelationsGraphProps` to Catalog Graph Page +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + ## 0.2.30-next.2 ### Patch Changes diff --git a/plugins/catalog-graph/package.json b/plugins/catalog-graph/package.json index bd9508783d..fd4d3d0114 100644 --- a/plugins/catalog-graph/package.json +++ b/plugins/catalog-graph/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-graph", - "version": "0.2.30-next.2", + "version": "0.2.30", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-import/CHANGELOG.md b/plugins/catalog-import/CHANGELOG.md index 38ae6fbed8..50dee98951 100644 --- a/plugins/catalog-import/CHANGELOG.md +++ b/plugins/catalog-import/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-catalog-import +## 0.9.8 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/integration@1.4.5 + - @backstage/core-components@0.13.1 + - @backstage/integration-react@1.1.13 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-common@1.0.13 + ## 0.9.8-next.2 ### Patch Changes diff --git a/plugins/catalog-import/package.json b/plugins/catalog-import/package.json index 5fb8bb1b5b..a6cad7a986 100644 --- a/plugins/catalog-import/package.json +++ b/plugins/catalog-import/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-import", "description": "A Backstage plugin the helps you import entities into your catalog", - "version": "0.9.8-next.2", + "version": "0.9.8", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-node/CHANGELOG.md b/plugins/catalog-node/CHANGELOG.md index a1ca2c37c6..5ed8a9aba1 100644 --- a/plugins/catalog-node/CHANGELOG.md +++ b/plugins/catalog-node/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-catalog-node +## 1.3.6 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + ## 1.3.6-next.1 ### Patch Changes diff --git a/plugins/catalog-node/package.json b/plugins/catalog-node/package.json index 95136c2da1..7adf03eed2 100644 --- a/plugins/catalog-node/package.json +++ b/plugins/catalog-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-node", "description": "The plugin-catalog-node module for @backstage/plugin-catalog-backend", - "version": "1.3.6-next.1", + "version": "1.3.6", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-react/CHANGELOG.md b/plugins/catalog-react/CHANGELOG.md index 79ade18d8f..7d96283320 100644 --- a/plugins/catalog-react/CHANGELOG.md +++ b/plugins/catalog-react/CHANGELOG.md @@ -1,5 +1,46 @@ # @backstage/plugin-catalog-react +## 1.6.0 + +### Minor Changes + +- 2258dcae970: Added an entity namespace filter and column on the default catalog page. + + If you have a custom version of the catalog page, you can add this filter in your CatalogPage code: + + ```ts + + + + + + /* if you want namespace picker */ + + + + + + + ``` + + The namespace column can be added using `createNamespaceColumn();`. This is only needed if you customized the columns for CatalogTable. + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/integration@1.4.5 + - @backstage/core-components@0.13.1 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.4 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-permission-react@0.4.12 + ## 1.6.0-next.2 ### Patch Changes diff --git a/plugins/catalog-react/package.json b/plugins/catalog-react/package.json index d5808553cb..569e9d5d8a 100644 --- a/plugins/catalog-react/package.json +++ b/plugins/catalog-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-react", "description": "A frontend library that helps other Backstage plugins interact with the catalog", - "version": "1.6.0-next.2", + "version": "1.6.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog/CHANGELOG.md b/plugins/catalog/CHANGELOG.md index 8300e81422..41fdf9aad7 100644 --- a/plugins/catalog/CHANGELOG.md +++ b/plugins/catalog/CHANGELOG.md @@ -1,5 +1,46 @@ # @backstage/plugin-catalog +## 1.11.0 + +### Minor Changes + +- 2258dcae970: Added an entity namespace filter and column on the default catalog page. + + If you have a custom version of the catalog page, you can add this filter in your CatalogPage code: + + ```ts + + + + + + /* if you want namespace picker */ + + + + + + + ``` + + The namespace column can be added using `createNamespaceColumn();`. This is only needed if you customized the columns for CatalogTable. + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/plugin-search-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/integration-react@1.1.13 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-search-common@1.2.3 + ## 1.11.0-next.2 ### Patch Changes diff --git a/plugins/catalog/package.json b/plugins/catalog/package.json index 2a0cfb4625..21983f762e 100644 --- a/plugins/catalog/package.json +++ b/plugins/catalog/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog", "description": "The Backstage plugin for browsing the Backstage catalog", - "version": "1.11.0-next.2", + "version": "1.11.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/cicd-statistics-module-gitlab/CHANGELOG.md b/plugins/cicd-statistics-module-gitlab/CHANGELOG.md index 93b77f90f8..fed7193859 100644 --- a/plugins/cicd-statistics-module-gitlab/CHANGELOG.md +++ b/plugins/cicd-statistics-module-gitlab/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-cicd-statistics-module-gitlab +## 0.1.14 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-cicd-statistics@0.1.20 + ## 0.1.14-next.2 ### Patch Changes diff --git a/plugins/cicd-statistics-module-gitlab/package.json b/plugins/cicd-statistics-module-gitlab/package.json index 37bf35a907..ac719e1c1b 100644 --- a/plugins/cicd-statistics-module-gitlab/package.json +++ b/plugins/cicd-statistics-module-gitlab/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cicd-statistics-module-gitlab", "description": "CI/CD Statistics plugin module; Gitlab CICD", - "version": "0.1.14-next.2", + "version": "0.1.14", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/cicd-statistics/CHANGELOG.md b/plugins/cicd-statistics/CHANGELOG.md index a321674f8d..b1b539c55e 100644 --- a/plugins/cicd-statistics/CHANGELOG.md +++ b/plugins/cicd-statistics/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-cicd-statistics +## 0.1.20 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + ## 0.1.20-next.2 ### Patch Changes diff --git a/plugins/cicd-statistics/package.json b/plugins/cicd-statistics/package.json index dce541c0b8..1eaebdf236 100644 --- a/plugins/cicd-statistics/package.json +++ b/plugins/cicd-statistics/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cicd-statistics", "description": "A frontend plugin visualizing CI/CD pipeline statistics (build time)", - "version": "0.1.20-next.2", + "version": "0.1.20", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/circleci/CHANGELOG.md b/plugins/circleci/CHANGELOG.md index afa6a83d48..b2947ce517 100644 --- a/plugins/circleci/CHANGELOG.md +++ b/plugins/circleci/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-circleci +## 0.3.18 + +### Patch Changes + +- 451b3cadb3d: Fixes row display for in progress jobs to not display trailing "took" +- 1c4958d905f: Hide empty time field data for queued builds which haven't started yet +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + ## 0.3.18-next.2 ### Patch Changes diff --git a/plugins/circleci/package.json b/plugins/circleci/package.json index 4108700972..87620319b2 100644 --- a/plugins/circleci/package.json +++ b/plugins/circleci/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-circleci", "description": "A Backstage plugin that integrates towards Circle CI", - "version": "0.3.18-next.2", + "version": "0.3.18", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/cloudbuild/CHANGELOG.md b/plugins/cloudbuild/CHANGELOG.md index 048c6b73ca..3eb8b09596 100644 --- a/plugins/cloudbuild/CHANGELOG.md +++ b/plugins/cloudbuild/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-cloudbuild +## 0.3.18 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + ## 0.3.18-next.2 ### Patch Changes diff --git a/plugins/cloudbuild/package.json b/plugins/cloudbuild/package.json index ef57f77fde..231e6c319c 100644 --- a/plugins/cloudbuild/package.json +++ b/plugins/cloudbuild/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cloudbuild", "description": "A Backstage plugin that integrates towards Google Cloud Build", - "version": "0.3.18-next.2", + "version": "0.3.18", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/code-climate/CHANGELOG.md b/plugins/code-climate/CHANGELOG.md index c31c3ca3f3..1b732c2154 100644 --- a/plugins/code-climate/CHANGELOG.md +++ b/plugins/code-climate/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-code-climate +## 0.1.18 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + ## 0.1.18-next.2 ### Patch Changes diff --git a/plugins/code-climate/package.json b/plugins/code-climate/package.json index f650739510..b2da33c3f6 100644 --- a/plugins/code-climate/package.json +++ b/plugins/code-climate/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-code-climate", - "version": "0.1.18-next.2", + "version": "0.1.18", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/code-coverage-backend/CHANGELOG.md b/plugins/code-coverage-backend/CHANGELOG.md index a63405bd75..10acc2a11a 100644 --- a/plugins/code-coverage-backend/CHANGELOG.md +++ b/plugins/code-coverage-backend/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-code-coverage-backend +## 0.2.11 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 0.2.11-next.1 ### Patch Changes diff --git a/plugins/code-coverage-backend/package.json b/plugins/code-coverage-backend/package.json index 549e0a1b2c..4444287b23 100644 --- a/plugins/code-coverage-backend/package.json +++ b/plugins/code-coverage-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-code-coverage-backend", "description": "A Backstage backend plugin that helps you keep track of your code coverage", - "version": "0.2.11-next.1", + "version": "0.2.11", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/code-coverage/CHANGELOG.md b/plugins/code-coverage/CHANGELOG.md index e1ac2d6b77..b514b137a1 100644 --- a/plugins/code-coverage/CHANGELOG.md +++ b/plugins/code-coverage/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-code-coverage +## 0.2.11 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + ## 0.2.11-next.2 ### Patch Changes diff --git a/plugins/code-coverage/package.json b/plugins/code-coverage/package.json index 7e40175240..bb6fb411d5 100644 --- a/plugins/code-coverage/package.json +++ b/plugins/code-coverage/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-code-coverage", "description": "A Backstage plugin that helps you keep track of your code coverage", - "version": "0.2.11-next.2", + "version": "0.2.11", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/codescene/CHANGELOG.md b/plugins/codescene/CHANGELOG.md index 4483bc8351..242d8f6a4a 100644 --- a/plugins/codescene/CHANGELOG.md +++ b/plugins/codescene/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-codescene +## 0.1.13 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + ## 0.1.13-next.1 ### Patch Changes diff --git a/plugins/codescene/package.json b/plugins/codescene/package.json index 05f2d8cde1..13d5662812 100644 --- a/plugins/codescene/package.json +++ b/plugins/codescene/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-codescene", - "version": "0.1.13-next.1", + "version": "0.1.13", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/config-schema/CHANGELOG.md b/plugins/config-schema/CHANGELOG.md index 71c47d650c..059a476aed 100644 --- a/plugins/config-schema/CHANGELOG.md +++ b/plugins/config-schema/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-config-schema +## 0.1.41 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + ## 0.1.41-next.1 ### Patch Changes diff --git a/plugins/config-schema/package.json b/plugins/config-schema/package.json index bf8bfc2d9d..3f1488178e 100644 --- a/plugins/config-schema/package.json +++ b/plugins/config-schema/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-config-schema", "description": "A Backstage plugin that lets you browse the configuration schema of your app", - "version": "0.1.41-next.1", + "version": "0.1.41", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/cost-insights/CHANGELOG.md b/plugins/cost-insights/CHANGELOG.md index b9a289e963..63ac24c646 100644 --- a/plugins/cost-insights/CHANGELOG.md +++ b/plugins/cost-insights/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-cost-insights +## 0.12.7 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-cost-insights-common@0.1.1 + ## 0.12.7-next.2 ### Patch Changes diff --git a/plugins/cost-insights/package.json b/plugins/cost-insights/package.json index 62295bf737..8607bff31e 100644 --- a/plugins/cost-insights/package.json +++ b/plugins/cost-insights/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cost-insights", "description": "A Backstage plugin that helps you keep track of your cloud spend", - "version": "0.12.7-next.2", + "version": "0.12.7", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/devtools-backend/CHANGELOG.md b/plugins/devtools-backend/CHANGELOG.md index 6fefbd1524..45f9f7174d 100644 --- a/plugins/devtools-backend/CHANGELOG.md +++ b/plugins/devtools-backend/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-devtools-backend +## 0.1.0 + +### Minor Changes + +- 347aeca204c: Introduced the DevTools plugin, checkout the plugin's [`README.md`](https://github.com/backstage/backstage/tree/master/plugins/devtools) for more details! + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-devtools-common@0.1.0 + - @backstage/backend-common@0.18.5 + - @backstage/config-loader@1.3.0 + - @backstage/plugin-permission-node@0.7.8 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-permission-common@0.7.5 + ## 0.1.0-next.0 ### Minor Changes diff --git a/plugins/devtools-backend/package.json b/plugins/devtools-backend/package.json index 7235f1293a..77eaf43901 100644 --- a/plugins/devtools-backend/package.json +++ b/plugins/devtools-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-devtools-backend", - "version": "0.1.0-next.0", + "version": "0.1.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/devtools-common/CHANGELOG.md b/plugins/devtools-common/CHANGELOG.md index 79c40a24c1..6a566d0a67 100644 --- a/plugins/devtools-common/CHANGELOG.md +++ b/plugins/devtools-common/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-devtools-common +## 0.1.0 + +### Minor Changes + +- 347aeca204c: Introduced the DevTools plugin, checkout the plugin's [`README.md`](https://github.com/backstage/backstage/tree/master/plugins/devtools) for more details! + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.0.2 + - @backstage/plugin-permission-common@0.7.5 + ## 0.1.0-next.0 ### Minor Changes diff --git a/plugins/devtools-common/package.json b/plugins/devtools-common/package.json index ba48da49ad..0e114e39b9 100644 --- a/plugins/devtools-common/package.json +++ b/plugins/devtools-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-devtools-common", "description": "Common functionalities for the devtools plugin", - "version": "0.1.0-next.0", + "version": "0.1.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/devtools/CHANGELOG.md b/plugins/devtools/CHANGELOG.md index 0fe41704c6..2e0e2a2de0 100644 --- a/plugins/devtools/CHANGELOG.md +++ b/plugins/devtools/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-devtools +## 0.1.0 + +### Minor Changes + +- 347aeca204c: Introduced the DevTools plugin, checkout the plugin's [`README.md`](https://github.com/backstage/backstage/tree/master/plugins/devtools) for more details! + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-devtools-common@0.1.0 + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-permission-react@0.4.12 + ## 0.1.0-next.0 ### Minor Changes diff --git a/plugins/devtools/package.json b/plugins/devtools/package.json index 5997f79845..d5bd0c567a 100644 --- a/plugins/devtools/package.json +++ b/plugins/devtools/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-devtools", - "version": "0.1.0-next.0", + "version": "0.1.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/dynatrace/CHANGELOG.md b/plugins/dynatrace/CHANGELOG.md index bfb0eac993..fe0d954772 100644 --- a/plugins/dynatrace/CHANGELOG.md +++ b/plugins/dynatrace/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-dynatrace +## 5.0.0 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + ## 5.0.0-next.2 ### Patch Changes diff --git a/plugins/dynatrace/package.json b/plugins/dynatrace/package.json index ab241ec0ad..1546562169 100644 --- a/plugins/dynatrace/package.json +++ b/plugins/dynatrace/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-dynatrace", - "version": "5.0.0-next.2", + "version": "5.0.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/entity-feedback-backend/CHANGELOG.md b/plugins/entity-feedback-backend/CHANGELOG.md index 2ee2ffb799..82fd67a96c 100644 --- a/plugins/entity-feedback-backend/CHANGELOG.md +++ b/plugins/entity-feedback-backend/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-entity-feedback-backend +## 0.1.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/plugin-entity-feedback-common@0.1.1 + ## 0.1.3-next.1 ### Patch Changes diff --git a/plugins/entity-feedback-backend/package.json b/plugins/entity-feedback-backend/package.json index bfda97de8f..ec5a379830 100644 --- a/plugins/entity-feedback-backend/package.json +++ b/plugins/entity-feedback-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-entity-feedback-backend", - "version": "0.1.3-next.1", + "version": "0.1.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/entity-feedback/CHANGELOG.md b/plugins/entity-feedback/CHANGELOG.md index d32012518e..312f6c1fd4 100644 --- a/plugins/entity-feedback/CHANGELOG.md +++ b/plugins/entity-feedback/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-entity-feedback +## 0.2.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-entity-feedback-common@0.1.1 + ## 0.2.1-next.2 ### Patch Changes diff --git a/plugins/entity-feedback/package.json b/plugins/entity-feedback/package.json index 0b90caea9d..90a9f6e4ab 100644 --- a/plugins/entity-feedback/package.json +++ b/plugins/entity-feedback/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-entity-feedback", - "version": "0.2.1-next.2", + "version": "0.2.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/entity-validation/CHANGELOG.md b/plugins/entity-validation/CHANGELOG.md index 6d423d04bf..648e6fc107 100644 --- a/plugins/entity-validation/CHANGELOG.md +++ b/plugins/entity-validation/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-entity-validation +## 0.1.3 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-common@1.0.13 + ## 0.1.3-next.2 ### Patch Changes diff --git a/plugins/entity-validation/package.json b/plugins/entity-validation/package.json index 950687a884..0d375ccca9 100644 --- a/plugins/entity-validation/package.json +++ b/plugins/entity-validation/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-entity-validation", - "version": "0.1.3-next.2", + "version": "0.1.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-aws-sqs/CHANGELOG.md b/plugins/events-backend-module-aws-sqs/CHANGELOG.md index 241463ac5c..4b55725420 100644 --- a/plugins/events-backend-module-aws-sqs/CHANGELOG.md +++ b/plugins/events-backend-module-aws-sqs/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-events-backend-module-aws-sqs +## 0.2.0 + +### Minor Changes + +- 2c5661f3899: Allow endpoint configuration for sqs, enabling use of localstack for testing. + +### Patch Changes + +- 3659c71c5d9: Standardize `@aws-sdk` v3 versions +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-events-node@0.2.6 + ## 0.2.0-next.2 ### Minor Changes diff --git a/plugins/events-backend-module-aws-sqs/package.json b/plugins/events-backend-module-aws-sqs/package.json index f9b3fd071b..e89ea4413b 100644 --- a/plugins/events-backend-module-aws-sqs/package.json +++ b/plugins/events-backend-module-aws-sqs/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-aws-sqs", - "version": "0.2.0-next.2", + "version": "0.2.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-azure/CHANGELOG.md b/plugins/events-backend-module-azure/CHANGELOG.md index b89363b7c3..0e096953a4 100644 --- a/plugins/events-backend-module-azure/CHANGELOG.md +++ b/plugins/events-backend-module-azure/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-events-backend-module-azure +## 0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2 + - @backstage/plugin-events-node@0.2.6 + ## 0.1.7-next.1 ### Patch Changes diff --git a/plugins/events-backend-module-azure/package.json b/plugins/events-backend-module-azure/package.json index 3667e73ebd..099da38f40 100644 --- a/plugins/events-backend-module-azure/package.json +++ b/plugins/events-backend-module-azure/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-azure", - "version": "0.1.7-next.1", + "version": "0.1.7", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md b/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md index ea70f7686e..dc861fc027 100644 --- a/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md +++ b/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-events-backend-module-bitbucket-cloud +## 0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2 + - @backstage/plugin-events-node@0.2.6 + ## 0.1.7-next.1 ### Patch Changes diff --git a/plugins/events-backend-module-bitbucket-cloud/package.json b/plugins/events-backend-module-bitbucket-cloud/package.json index ea04a4faaa..b30f50265b 100644 --- a/plugins/events-backend-module-bitbucket-cloud/package.json +++ b/plugins/events-backend-module-bitbucket-cloud/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-bitbucket-cloud", - "version": "0.1.7-next.1", + "version": "0.1.7", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-gerrit/CHANGELOG.md b/plugins/events-backend-module-gerrit/CHANGELOG.md index 411d9ffff8..e0e19a0899 100644 --- a/plugins/events-backend-module-gerrit/CHANGELOG.md +++ b/plugins/events-backend-module-gerrit/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-events-backend-module-gerrit +## 0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2 + - @backstage/plugin-events-node@0.2.6 + ## 0.1.7-next.1 ### Patch Changes diff --git a/plugins/events-backend-module-gerrit/package.json b/plugins/events-backend-module-gerrit/package.json index 64fe31d31f..e18616d98d 100644 --- a/plugins/events-backend-module-gerrit/package.json +++ b/plugins/events-backend-module-gerrit/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-gerrit", - "version": "0.1.7-next.1", + "version": "0.1.7", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-github/CHANGELOG.md b/plugins/events-backend-module-github/CHANGELOG.md index 0e2b2ae8de..7f88bb5d13 100644 --- a/plugins/events-backend-module-github/CHANGELOG.md +++ b/plugins/events-backend-module-github/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-events-backend-module-github +## 0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.6 + ## 0.1.7-next.1 ### Patch Changes diff --git a/plugins/events-backend-module-github/package.json b/plugins/events-backend-module-github/package.json index 74b74469ca..0117792b8d 100644 --- a/plugins/events-backend-module-github/package.json +++ b/plugins/events-backend-module-github/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-github", - "version": "0.1.7-next.1", + "version": "0.1.7", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-gitlab/CHANGELOG.md b/plugins/events-backend-module-gitlab/CHANGELOG.md index d8d48674c8..f6827b90f4 100644 --- a/plugins/events-backend-module-gitlab/CHANGELOG.md +++ b/plugins/events-backend-module-gitlab/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-events-backend-module-gitlab +## 0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.6 + ## 0.1.7-next.1 ### Patch Changes diff --git a/plugins/events-backend-module-gitlab/package.json b/plugins/events-backend-module-gitlab/package.json index 07102c0b6f..fc33203460 100644 --- a/plugins/events-backend-module-gitlab/package.json +++ b/plugins/events-backend-module-gitlab/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-gitlab", - "version": "0.1.7-next.1", + "version": "0.1.7", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-test-utils/CHANGELOG.md b/plugins/events-backend-test-utils/CHANGELOG.md index 3d665a44ce..14d73356e0 100644 --- a/plugins/events-backend-test-utils/CHANGELOG.md +++ b/plugins/events-backend-test-utils/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-events-backend-test-utils +## 0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.2.6 + ## 0.1.7-next.1 ### Patch Changes diff --git a/plugins/events-backend-test-utils/package.json b/plugins/events-backend-test-utils/package.json index 3d46ea9210..d3340d5baf 100644 --- a/plugins/events-backend-test-utils/package.json +++ b/plugins/events-backend-test-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-events-backend-test-utils", "description": "The plugin-events-backend-test-utils for @backstage/plugin-events-node", - "version": "0.1.7-next.1", + "version": "0.1.7", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend/CHANGELOG.md b/plugins/events-backend/CHANGELOG.md index 929a003cf9..25b0561c74 100644 --- a/plugins/events-backend/CHANGELOG.md +++ b/plugins/events-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-events-backend +## 0.2.6 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.6 + ## 0.2.6-next.1 ### Patch Changes diff --git a/plugins/events-backend/package.json b/plugins/events-backend/package.json index fdaee7d4a8..8d75caf02b 100644 --- a/plugins/events-backend/package.json +++ b/plugins/events-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend", - "version": "0.2.6-next.1", + "version": "0.2.6", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-node/CHANGELOG.md b/plugins/events-node/CHANGELOG.md index c44e1e3999..a8ff8ed2e5 100644 --- a/plugins/events-node/CHANGELOG.md +++ b/plugins/events-node/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-events-node +## 0.2.6 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2 + ## 0.2.6-next.1 ### Patch Changes diff --git a/plugins/events-node/package.json b/plugins/events-node/package.json index 7a368206bf..497d668cde 100644 --- a/plugins/events-node/package.json +++ b/plugins/events-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-events-node", "description": "The plugin-events-node module for @backstage/plugin-events-backend", - "version": "0.2.6-next.1", + "version": "0.2.6", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/example-todo-list-backend/CHANGELOG.md b/plugins/example-todo-list-backend/CHANGELOG.md index 3fb578f05a..b71a26219e 100644 --- a/plugins/example-todo-list-backend/CHANGELOG.md +++ b/plugins/example-todo-list-backend/CHANGELOG.md @@ -1,5 +1,16 @@ # @internal/plugin-todo-list-backend +## 1.0.13 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 1.0.13-next.1 ### Patch Changes diff --git a/plugins/example-todo-list-backend/package.json b/plugins/example-todo-list-backend/package.json index 0b635586b7..bec7f06a4c 100644 --- a/plugins/example-todo-list-backend/package.json +++ b/plugins/example-todo-list-backend/package.json @@ -1,6 +1,6 @@ { "name": "@internal/plugin-todo-list-backend", - "version": "1.0.13-next.1", + "version": "1.0.13", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/example-todo-list/CHANGELOG.md b/plugins/example-todo-list/CHANGELOG.md index c12164fa62..fad5737566 100644 --- a/plugins/example-todo-list/CHANGELOG.md +++ b/plugins/example-todo-list/CHANGELOG.md @@ -1,5 +1,14 @@ # @internal/plugin-todo-list +## 1.0.13 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + ## 1.0.13-next.1 ### Patch Changes diff --git a/plugins/example-todo-list/package.json b/plugins/example-todo-list/package.json index 4ee26dea2c..5dff8b4a15 100644 --- a/plugins/example-todo-list/package.json +++ b/plugins/example-todo-list/package.json @@ -1,6 +1,6 @@ { "name": "@internal/plugin-todo-list", - "version": "1.0.13-next.1", + "version": "1.0.13", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/explore-backend/CHANGELOG.md b/plugins/explore-backend/CHANGELOG.md index d178b091b1..a1763f7a0c 100644 --- a/plugins/explore-backend/CHANGELOG.md +++ b/plugins/explore-backend/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-explore-backend +## 0.0.7 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-search-backend-module-explore@0.1.1 + - @backstage/config@1.0.7 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-search-common@1.2.3 + ## 0.0.7-next.1 ### Patch Changes diff --git a/plugins/explore-backend/package.json b/plugins/explore-backend/package.json index 7b21e885c1..538468a118 100644 --- a/plugins/explore-backend/package.json +++ b/plugins/explore-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-explore-backend", - "version": "0.0.7-next.1", + "version": "0.0.7", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/explore/CHANGELOG.md b/plugins/explore/CHANGELOG.md index 36d04b4231..fbfe54f16b 100644 --- a/plugins/explore/CHANGELOG.md +++ b/plugins/explore/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-explore +## 0.4.3 + +### Patch Changes + +- 1996920782b: Make sure that the first support button row does not break across lines +- 4851581deb6: Display the title of the entity on the explore card if present, otherwise stick to the name +- a6025e25d99: Updated the example code in the "Customization" section of the README to make the imports match the components used. +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/plugin-search-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-explore-react@0.0.28 + - @backstage/plugin-search-common@1.2.3 + ## 0.4.3-next.2 ### Patch Changes diff --git a/plugins/explore/package.json b/plugins/explore/package.json index 21c8fcc58b..b0c5bf3fd9 100644 --- a/plugins/explore/package.json +++ b/plugins/explore/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-explore", "description": "A Backstage plugin for building an exploration page of your software ecosystem", - "version": "0.4.3-next.2", + "version": "0.4.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/firehydrant/CHANGELOG.md b/plugins/firehydrant/CHANGELOG.md index 9822bb684e..4353f8e6ba 100644 --- a/plugins/firehydrant/CHANGELOG.md +++ b/plugins/firehydrant/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-firehydrant +## 0.2.2 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + ## 0.2.2-next.2 ### Patch Changes diff --git a/plugins/firehydrant/package.json b/plugins/firehydrant/package.json index 260b3ad47f..f2eda9092c 100644 --- a/plugins/firehydrant/package.json +++ b/plugins/firehydrant/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-firehydrant", "description": "A Backstage plugin that integrates towards FireHydrant", - "version": "0.2.2-next.2", + "version": "0.2.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/fossa/CHANGELOG.md b/plugins/fossa/CHANGELOG.md index ea411c0558..2ca2c69658 100644 --- a/plugins/fossa/CHANGELOG.md +++ b/plugins/fossa/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-fossa +## 0.2.50 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + ## 0.2.50-next.2 ### Patch Changes diff --git a/plugins/fossa/package.json b/plugins/fossa/package.json index a1b9e48f3b..caaa497130 100644 --- a/plugins/fossa/package.json +++ b/plugins/fossa/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-fossa", "description": "A Backstage plugin that integrates towards FOSSA", - "version": "0.2.50-next.2", + "version": "0.2.50", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/gcalendar/CHANGELOG.md b/plugins/gcalendar/CHANGELOG.md index b211ebd95a..cb1f1e451b 100644 --- a/plugins/gcalendar/CHANGELOG.md +++ b/plugins/gcalendar/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-gcalendar +## 0.3.14 + +### Patch Changes + +- f493ccb9589: Pass user info email scope on auth refresh to resolve invalid credentials error +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + ## 0.3.14-next.1 ### Patch Changes diff --git a/plugins/gcalendar/package.json b/plugins/gcalendar/package.json index 10375e2e3f..eb19dd4e6f 100644 --- a/plugins/gcalendar/package.json +++ b/plugins/gcalendar/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-gcalendar", - "version": "0.3.14-next.1", + "version": "0.3.14", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/gcp-projects/CHANGELOG.md b/plugins/gcp-projects/CHANGELOG.md index 8254e86dbc..54265c8c59 100644 --- a/plugins/gcp-projects/CHANGELOG.md +++ b/plugins/gcp-projects/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-gcp-projects +## 0.3.37 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + ## 0.3.37-next.1 ### Patch Changes diff --git a/plugins/gcp-projects/package.json b/plugins/gcp-projects/package.json index 9857a6ccf1..6d320cad6d 100644 --- a/plugins/gcp-projects/package.json +++ b/plugins/gcp-projects/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-gcp-projects", "description": "A Backstage plugin that helps you manage projects in GCP", - "version": "0.3.37-next.1", + "version": "0.3.37", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/git-release-manager/CHANGELOG.md b/plugins/git-release-manager/CHANGELOG.md index 7899cff4fe..80f09319d0 100644 --- a/plugins/git-release-manager/CHANGELOG.md +++ b/plugins/git-release-manager/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-git-release-manager +## 0.3.31 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/integration@1.4.5 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + ## 0.3.31-next.2 ### Patch Changes diff --git a/plugins/git-release-manager/package.json b/plugins/git-release-manager/package.json index a73c35aead..76d18dc224 100644 --- a/plugins/git-release-manager/package.json +++ b/plugins/git-release-manager/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-git-release-manager", "description": "A Backstage plugin that helps you manage releases in git", - "version": "0.3.31-next.2", + "version": "0.3.31", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/github-actions/CHANGELOG.md b/plugins/github-actions/CHANGELOG.md index 8b64c47ac8..199051dd04 100644 --- a/plugins/github-actions/CHANGELOG.md +++ b/plugins/github-actions/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-github-actions +## 0.5.18 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/integration@1.4.5 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + ## 0.5.18-next.2 ### Patch Changes diff --git a/plugins/github-actions/package.json b/plugins/github-actions/package.json index a2c25741be..98a558cd0d 100644 --- a/plugins/github-actions/package.json +++ b/plugins/github-actions/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-github-actions", "description": "A Backstage plugin that integrates towards GitHub Actions", - "version": "0.5.18-next.2", + "version": "0.5.18", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/github-deployments/CHANGELOG.md b/plugins/github-deployments/CHANGELOG.md index ba1d67aece..0a699bdc57 100644 --- a/plugins/github-deployments/CHANGELOG.md +++ b/plugins/github-deployments/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-github-deployments +## 0.1.49 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/integration@1.4.5 + - @backstage/core-components@0.13.1 + - @backstage/integration-react@1.1.13 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + ## 0.1.49-next.2 ### Patch Changes diff --git a/plugins/github-deployments/package.json b/plugins/github-deployments/package.json index c9df936591..08c7e1aa9d 100644 --- a/plugins/github-deployments/package.json +++ b/plugins/github-deployments/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-github-deployments", "description": "A Backstage plugin that integrates towards GitHub Deployments", - "version": "0.1.49-next.2", + "version": "0.1.49", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/github-issues/CHANGELOG.md b/plugins/github-issues/CHANGELOG.md index ee2e47570d..6f83ae81cf 100644 --- a/plugins/github-issues/CHANGELOG.md +++ b/plugins/github-issues/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-github-issues +## 0.2.7 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/integration@1.4.5 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + ## 0.2.7-next.2 ### Patch Changes diff --git a/plugins/github-issues/package.json b/plugins/github-issues/package.json index 8a12aeb2de..c6685eff13 100644 --- a/plugins/github-issues/package.json +++ b/plugins/github-issues/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-github-issues", - "version": "0.2.7-next.2", + "version": "0.2.7", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/github-pull-requests-board/CHANGELOG.md b/plugins/github-pull-requests-board/CHANGELOG.md index 53bcb9b570..704dc495c1 100644 --- a/plugins/github-pull-requests-board/CHANGELOG.md +++ b/plugins/github-pull-requests-board/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-github-pull-requests-board +## 0.1.12 + +### Patch Changes + +- cf125c36569: The `EntityTeamPullRequestsContent` and `EntityTeamPullRequestsCard` support the ability to view the labels/tags added to each PR +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/integration@1.4.5 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + ## 0.1.12-next.2 ### Patch Changes diff --git a/plugins/github-pull-requests-board/package.json b/plugins/github-pull-requests-board/package.json index 824d265abe..da3c929b43 100644 --- a/plugins/github-pull-requests-board/package.json +++ b/plugins/github-pull-requests-board/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-github-pull-requests-board", "description": "A Backstage plugin that allows you to see all open Pull Requests for all the repositories owned by your team", - "version": "0.1.12-next.2", + "version": "0.1.12", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/gitops-profiles/CHANGELOG.md b/plugins/gitops-profiles/CHANGELOG.md index c5eba8def3..4aed3f9ab3 100644 --- a/plugins/gitops-profiles/CHANGELOG.md +++ b/plugins/gitops-profiles/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-gitops-profiles +## 0.3.36 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + ## 0.3.36-next.1 ### Patch Changes diff --git a/plugins/gitops-profiles/package.json b/plugins/gitops-profiles/package.json index e721682976..e374b49335 100644 --- a/plugins/gitops-profiles/package.json +++ b/plugins/gitops-profiles/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-gitops-profiles", "description": "A Backstage plugin that helps you manage GitOps profiles", - "version": "0.3.36-next.1", + "version": "0.3.36", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/gocd/CHANGELOG.md b/plugins/gocd/CHANGELOG.md index 9eb9964c96..0014eebd8c 100644 --- a/plugins/gocd/CHANGELOG.md +++ b/plugins/gocd/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-gocd +## 0.1.24 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + ## 0.1.24-next.2 ### Patch Changes diff --git a/plugins/gocd/package.json b/plugins/gocd/package.json index c8fca38e23..11ee841aa2 100644 --- a/plugins/gocd/package.json +++ b/plugins/gocd/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-gocd", "description": "A Backstage plugin that integrates towards GoCD", - "version": "0.1.24-next.2", + "version": "0.1.24", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/graphiql/CHANGELOG.md b/plugins/graphiql/CHANGELOG.md index 3d49c1b29f..5f395bda29 100644 --- a/plugins/graphiql/CHANGELOG.md +++ b/plugins/graphiql/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-graphiql +## 0.2.50 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + ## 0.2.50-next.1 ### Patch Changes diff --git a/plugins/graphiql/package.json b/plugins/graphiql/package.json index 219551e6e7..d5dae8c2ec 100644 --- a/plugins/graphiql/package.json +++ b/plugins/graphiql/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-graphiql", "description": "Backstage plugin for browsing GraphQL APIs", - "version": "0.2.50-next.1", + "version": "0.2.50", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/plugins/graphql-backend/CHANGELOG.md b/plugins/graphql-backend/CHANGELOG.md index 898e185d5d..14f2b75eac 100644 --- a/plugins/graphql-backend/CHANGELOG.md +++ b/plugins/graphql-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-graphql-backend +## 0.1.35 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/config@1.0.7 + - @backstage/plugin-catalog-graphql@0.3.20 + ## 0.1.35-next.1 ### Patch Changes diff --git a/plugins/graphql-backend/package.json b/plugins/graphql-backend/package.json index 388b587040..cc8c3e3059 100644 --- a/plugins/graphql-backend/package.json +++ b/plugins/graphql-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-graphql-backend", "description": "An experimental Backstage backend plugin for GraphQL", - "version": "0.1.35-next.1", + "version": "0.1.35", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/graphql-voyager/CHANGELOG.md b/plugins/graphql-voyager/CHANGELOG.md index c47af7b006..394b99f5c7 100644 --- a/plugins/graphql-voyager/CHANGELOG.md +++ b/plugins/graphql-voyager/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-graphql-voyager +## 0.1.3 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + ## 0.1.3-next.1 ### Patch Changes diff --git a/plugins/graphql-voyager/package.json b/plugins/graphql-voyager/package.json index c459e4fbf8..683b664b33 100644 --- a/plugins/graphql-voyager/package.json +++ b/plugins/graphql-voyager/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-graphql-voyager", "description": "Backstage plugin for GraphQL Voyager", - "version": "0.1.3-next.1", + "version": "0.1.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/home/CHANGELOG.md b/plugins/home/CHANGELOG.md index 3996c77103..b626f5c5e6 100644 --- a/plugins/home/CHANGELOG.md +++ b/plugins/home/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-home +## 0.5.2 + +### Patch Changes + +- acca8966465: Remove object-hash dependency +- 957cd9b8958: Use the semantic time tag for rendering world clocks on homepage headers. +- 0e19e7b0f3a: Bump to using the later v5 versions of `@rjsf/*` +- 5272cfabc3b: Add missing @rjsf/core dependency +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + ## 0.5.2-next.2 ### Patch Changes diff --git a/plugins/home/package.json b/plugins/home/package.json index 12e55d80cd..ff714b16ca 100644 --- a/plugins/home/package.json +++ b/plugins/home/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-home", "description": "A Backstage plugin that helps you build a home page", - "version": "0.5.2-next.2", + "version": "0.5.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/ilert/CHANGELOG.md b/plugins/ilert/CHANGELOG.md index a1fb6e375d..0b1c5b5696 100644 --- a/plugins/ilert/CHANGELOG.md +++ b/plugins/ilert/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-ilert +## 0.2.7 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + ## 0.2.7-next.2 ### Patch Changes diff --git a/plugins/ilert/package.json b/plugins/ilert/package.json index 0e08159481..396d5f6860 100644 --- a/plugins/ilert/package.json +++ b/plugins/ilert/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-ilert", "description": "A Backstage plugin that integrates towards iLert", - "version": "0.2.7-next.2", + "version": "0.2.7", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/jenkins-backend/CHANGELOG.md b/plugins/jenkins-backend/CHANGELOG.md index 8e4463f46b..6bb9cba867 100644 --- a/plugins/jenkins-backend/CHANGELOG.md +++ b/plugins/jenkins-backend/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-jenkins-backend +## 0.2.0 + +### Minor Changes + +- cf95c5137c9: Updated rebuild to use Jenkins API replay build, which works for Jenkins jobs that have required parameters. Jenkins SDK could not be used for this request because it does not have support for replay. + + Added link to view build in Jenkins CI/CD table action column. + +### Patch Changes + +- 670a2dd6f4e: Fix handling of slashes in branch names +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-jenkins-common@0.1.15 + - @backstage/plugin-permission-common@0.7.5 + ## 0.1.35-next.1 ### Patch Changes diff --git a/plugins/jenkins-backend/package.json b/plugins/jenkins-backend/package.json index 07624593c3..f45908c04e 100644 --- a/plugins/jenkins-backend/package.json +++ b/plugins/jenkins-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-jenkins-backend", "description": "A Backstage backend plugin that integrates towards Jenkins", - "version": "0.1.35-next.1", + "version": "0.2.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/jenkins/CHANGELOG.md b/plugins/jenkins/CHANGELOG.md index 9d617e1d39..1b289faef2 100644 --- a/plugins/jenkins/CHANGELOG.md +++ b/plugins/jenkins/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-jenkins +## 0.8.0 + +### Minor Changes + +- cf95c5137c9: Updated rebuild to use Jenkins API replay build, which works for Jenkins jobs that have required parameters. Jenkins SDK could not be used for this request because it does not have support for replay. + + Added link to view build in Jenkins CI/CD table action column. + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-jenkins-common@0.1.15 + ## 0.7.17-next.2 ### Patch Changes diff --git a/plugins/jenkins/package.json b/plugins/jenkins/package.json index 6d8d50d26b..1f980215c2 100644 --- a/plugins/jenkins/package.json +++ b/plugins/jenkins/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-jenkins", "description": "A Backstage plugin that integrates towards Jenkins", - "version": "0.7.17-next.2", + "version": "0.8.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kafka-backend/CHANGELOG.md b/plugins/kafka-backend/CHANGELOG.md index 2b788a1bea..3620351d77 100644 --- a/plugins/kafka-backend/CHANGELOG.md +++ b/plugins/kafka-backend/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-kafka-backend +## 0.2.38 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 0.2.38-next.1 ### Patch Changes diff --git a/plugins/kafka-backend/package.json b/plugins/kafka-backend/package.json index 7eb51bfe72..584dcfe8a2 100644 --- a/plugins/kafka-backend/package.json +++ b/plugins/kafka-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kafka-backend", "description": "A Backstage backend plugin that integrates towards Kafka", - "version": "0.2.38-next.1", + "version": "0.2.38", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kafka/CHANGELOG.md b/plugins/kafka/CHANGELOG.md index 56e8a42053..fd41b779a6 100644 --- a/plugins/kafka/CHANGELOG.md +++ b/plugins/kafka/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-kafka +## 0.3.18 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + ## 0.3.18-next.2 ### Patch Changes diff --git a/plugins/kafka/package.json b/plugins/kafka/package.json index 4459b75b18..0baee01c27 100644 --- a/plugins/kafka/package.json +++ b/plugins/kafka/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kafka", "description": "A Backstage plugin that integrates towards Kafka", - "version": "0.3.18-next.2", + "version": "0.3.18", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kubernetes-backend/CHANGELOG.md b/plugins/kubernetes-backend/CHANGELOG.md index d7ac1585f8..3ede951ab9 100644 --- a/plugins/kubernetes-backend/CHANGELOG.md +++ b/plugins/kubernetes-backend/CHANGELOG.md @@ -1,5 +1,38 @@ # @backstage/plugin-kubernetes-backend +## 0.11.0 + +### Minor Changes + +- f4114f02d49: Allow fetching pod metrics limited by a `labelSelector`. + + This is used by the Kubernetes tab on a components' page and leads to much smaller responses being received from Kubernetes, especially with larger Kubernetes clusters. + +- 890988341e9: Update `aws-sdk` client from v2 to v3. + + **BREAKING**: The `AwsIamKubernetesAuthTranslator` class no longer exposes the following methods `awsGetCredentials`, `getBearerToken`, `getCredentials` and `validCredentials`. There is no replacement for these methods. + +### Patch Changes + +- 05f1d74539d: Kubernetes clusters now support `authProvider: aks`. When configured this way, + the `retrieveObjectsByServiceId` action will use the `auth.aks` value in the + request body as a bearer token to authenticate with Kubernetes. +- 3659c71c5d9: Standardize `@aws-sdk` v3 versions +- a341129b754: Fixed a bug in the Kubernetes proxy endpoint where requests to clusters configured with client-side auth providers would always fail with a 500 status. +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration-aws-node@0.1.3 + - @backstage/plugin-permission-node@0.7.8 + - @backstage/plugin-kubernetes-common@0.6.3 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-permission-common@0.7.5 + ## 0.11.0-next.2 ### Patch Changes diff --git a/plugins/kubernetes-backend/package.json b/plugins/kubernetes-backend/package.json index a45141b47d..7369e54041 100644 --- a/plugins/kubernetes-backend/package.json +++ b/plugins/kubernetes-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kubernetes-backend", "description": "A Backstage backend plugin that integrates towards Kubernetes", - "version": "0.11.0-next.2", + "version": "0.11.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kubernetes-common/CHANGELOG.md b/plugins/kubernetes-common/CHANGELOG.md index 9c8849c668..dd96cecbcf 100644 --- a/plugins/kubernetes-common/CHANGELOG.md +++ b/plugins/kubernetes-common/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-kubernetes-common +## 0.6.3 + +### Patch Changes + +- 05f1d74539d: AKS access tokens can now be sent over the wire to the Kubernetes backend. +- Updated dependencies + - @backstage/catalog-model@1.3.0 + - @backstage/plugin-permission-common@0.7.5 + ## 0.6.3-next.0 ### Patch Changes diff --git a/plugins/kubernetes-common/package.json b/plugins/kubernetes-common/package.json index 80911bac00..b3dff229d4 100644 --- a/plugins/kubernetes-common/package.json +++ b/plugins/kubernetes-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kubernetes-common", "description": "Common functionalities for kubernetes, to be shared between kubernetes and kubernetes-backend plugin", - "version": "0.6.3-next.0", + "version": "0.6.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kubernetes/CHANGELOG.md b/plugins/kubernetes/CHANGELOG.md index 0842800552..0f324ef8f0 100644 --- a/plugins/kubernetes/CHANGELOG.md +++ b/plugins/kubernetes/CHANGELOG.md @@ -1,5 +1,55 @@ # @backstage/plugin-kubernetes +## 0.9.0 + +### Minor Changes + +- 280ec10c18e: Added Pod logs components for Kubernetes plugin + + **BREAKING**: `kubernetesProxyApi` for custom plugins built with components from the Kubernetes plugin apis, `kubernetesProxyApi` should be added to the plugin's API list. + + ``` + ... + export const kubernetesPlugin = createPlugin({ + id: 'kubernetes', + apis: [ + ... + createApiFactory({ + api: kubernetesProxyApiRef, + deps: { + kubernetesApi: kubernetesApiRef, + }, + factory: ({ kubernetesApi }) => + new KubernetesProxyClient({ + kubernetesApi, + }), + }), + ``` + + **BREAKING**: `KubernetesDrawer` is now called `KubernetesStructuredMetadataTableDrawer` so that we can do more than just show `StructuredMetadataTable` + + `import { KubernetesDrawer } from "@backstage/plugin-kubernetes"` + + should now be: + + `import { KubernetesStructuredMetadataTableDrawer } from "@backstage/plugin-kubernetes"` + +### Patch Changes + +- c7bad1005ba: The Kubernetes plugin now requests AKS access tokens from Azure when retrieving + objects from clusters configured with `authProvider: aks` and sets `auth.aks` in + its request bodies appropriately. +- a160e02c3d7: Omit managed fields in the Kubernetes resource YAML display. +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/plugin-kubernetes-common@0.6.3 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + ## 0.9.0-next.2 ### Patch Changes diff --git a/plugins/kubernetes/package.json b/plugins/kubernetes/package.json index a581c1a82b..e6a0b518a1 100644 --- a/plugins/kubernetes/package.json +++ b/plugins/kubernetes/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kubernetes", "description": "A Backstage plugin that integrates towards Kubernetes", - "version": "0.9.0-next.2", + "version": "0.9.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/lighthouse-backend/CHANGELOG.md b/plugins/lighthouse-backend/CHANGELOG.md index 81da2807af..5b0d9d8ecc 100644 --- a/plugins/lighthouse-backend/CHANGELOG.md +++ b/plugins/lighthouse-backend/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-lighthouse-backend +## 0.2.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-lighthouse-common@0.1.1 + ## 0.2.1-next.1 ### Patch Changes diff --git a/plugins/lighthouse-backend/package.json b/plugins/lighthouse-backend/package.json index 351ee3fb7e..eb48a5673d 100644 --- a/plugins/lighthouse-backend/package.json +++ b/plugins/lighthouse-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-lighthouse-backend", "description": "Backend functionalities for lighthouse", - "version": "0.2.1-next.1", + "version": "0.2.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/lighthouse/CHANGELOG.md b/plugins/lighthouse/CHANGELOG.md index a90222b49a..b8d70898fd 100644 --- a/plugins/lighthouse/CHANGELOG.md +++ b/plugins/lighthouse/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-lighthouse +## 0.4.3 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-lighthouse-common@0.1.1 + ## 0.4.3-next.2 ### Patch Changes diff --git a/plugins/lighthouse/package.json b/plugins/lighthouse/package.json index 7e66e6fdc6..377614ca97 100644 --- a/plugins/lighthouse/package.json +++ b/plugins/lighthouse/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-lighthouse", "description": "A Backstage plugin that integrates towards Lighthouse", - "version": "0.4.3-next.2", + "version": "0.4.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/linguist-backend/CHANGELOG.md b/plugins/linguist-backend/CHANGELOG.md index 5096043450..a0ab8c5990 100644 --- a/plugins/linguist-backend/CHANGELOG.md +++ b/plugins/linguist-backend/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-linguist-backend +## 0.2.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-linguist-common@0.1.0 + ## 0.2.2-next.1 ### Patch Changes diff --git a/plugins/linguist-backend/package.json b/plugins/linguist-backend/package.json index f3feacb740..5907f11710 100644 --- a/plugins/linguist-backend/package.json +++ b/plugins/linguist-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-linguist-backend", - "version": "0.2.2-next.1", + "version": "0.2.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/linguist/CHANGELOG.md b/plugins/linguist/CHANGELOG.md index 5c12d0df14..0d927fed5b 100644 --- a/plugins/linguist/CHANGELOG.md +++ b/plugins/linguist/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-linguist +## 0.1.3 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-linguist-common@0.1.0 + ## 0.1.3-next.2 ### Patch Changes diff --git a/plugins/linguist/package.json b/plugins/linguist/package.json index 885462b0e0..89faf81fd0 100644 --- a/plugins/linguist/package.json +++ b/plugins/linguist/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-linguist", - "version": "0.1.3-next.2", + "version": "0.1.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/microsoft-calendar/CHANGELOG.md b/plugins/microsoft-calendar/CHANGELOG.md index 98e2cbf1c1..a9bc798414 100644 --- a/plugins/microsoft-calendar/CHANGELOG.md +++ b/plugins/microsoft-calendar/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-microsoft-calendar +## 0.1.3 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + ## 0.1.3-next.1 ### Patch Changes diff --git a/plugins/microsoft-calendar/package.json b/plugins/microsoft-calendar/package.json index ca444bf7df..070404422f 100644 --- a/plugins/microsoft-calendar/package.json +++ b/plugins/microsoft-calendar/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-microsoft-calendar", - "version": "0.1.3-next.1", + "version": "0.1.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/newrelic-dashboard/CHANGELOG.md b/plugins/newrelic-dashboard/CHANGELOG.md index 1bbac565ca..ad52878764 100644 --- a/plugins/newrelic-dashboard/CHANGELOG.md +++ b/plugins/newrelic-dashboard/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-newrelic-dashboard +## 0.2.11 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + ## 0.2.11-next.2 ### Patch Changes diff --git a/plugins/newrelic-dashboard/package.json b/plugins/newrelic-dashboard/package.json index 696762913b..cebda38964 100644 --- a/plugins/newrelic-dashboard/package.json +++ b/plugins/newrelic-dashboard/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-newrelic-dashboard", - "version": "0.2.11-next.2", + "version": "0.2.11", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/newrelic/CHANGELOG.md b/plugins/newrelic/CHANGELOG.md index 88daca0ff0..c03b0ad933 100644 --- a/plugins/newrelic/CHANGELOG.md +++ b/plugins/newrelic/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-newrelic +## 0.3.36 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + ## 0.3.36-next.1 ### Patch Changes diff --git a/plugins/newrelic/package.json b/plugins/newrelic/package.json index 628280099c..c8de615d73 100644 --- a/plugins/newrelic/package.json +++ b/plugins/newrelic/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-newrelic", "description": "A Backstage plugin that integrates towards New Relic", - "version": "0.3.36-next.1", + "version": "0.3.36", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/octopus-deploy/CHANGELOG.md b/plugins/octopus-deploy/CHANGELOG.md index 228c8b5a18..66465dc514 100644 --- a/plugins/octopus-deploy/CHANGELOG.md +++ b/plugins/octopus-deploy/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-octopus-deploy +## 0.2.0 + +### Minor Changes + +- 87211bc2873: Added support for Octopus Deploy spaces. The octopus.com/project-id annotation can now (optionally) be prefixed by a space identifier, for example. Spaces-1/Projects-102. + Also note that some of this plugins exported API's have changed to accommodate this change, changing from separate arguments to a single object. + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + ## 0.2.0-next.2 ### Patch Changes diff --git a/plugins/octopus-deploy/package.json b/plugins/octopus-deploy/package.json index 2140f130e5..6597f4f69c 100644 --- a/plugins/octopus-deploy/package.json +++ b/plugins/octopus-deploy/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-octopus-deploy", - "version": "0.2.0-next.2", + "version": "0.2.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/org-react/CHANGELOG.md b/plugins/org-react/CHANGELOG.md index d7a5b72817..a418acb8e5 100644 --- a/plugins/org-react/CHANGELOG.md +++ b/plugins/org-react/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-org-react +## 0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + ## 0.1.7-next.2 ### Patch Changes diff --git a/plugins/org-react/package.json b/plugins/org-react/package.json index 5c33388f69..bd7d59ba6b 100644 --- a/plugins/org-react/package.json +++ b/plugins/org-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-org-react", - "version": "0.1.7-next.2", + "version": "0.1.7", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/org/CHANGELOG.md b/plugins/org/CHANGELOG.md index f729d46e19..60bec7da2f 100644 --- a/plugins/org/CHANGELOG.md +++ b/plugins/org/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/plugin-org +## 0.6.8 + +### Patch Changes + +- 6e387c077a4: Changed the MembersListCard component to allow displaying aggregated members when viewing a group. Now, a toggle switch can be displayed that lets you switch between showing direct members and aggregated members. + + To enable this new feature, set the showAggregateMembersToggle prop on EntityMembersListCard: + + ```jsx + // In packages/app/src/components/catalog/EntityPage.tsx + const groupPage = ( + // ... + + // ... + ); + ``` + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + ## 0.6.8-next.2 ### Patch Changes diff --git a/plugins/org/package.json b/plugins/org/package.json index 6755d8fd64..cdbf8cd153 100644 --- a/plugins/org/package.json +++ b/plugins/org/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-org", "description": "A Backstage plugin that helps you create entity pages for your organization", - "version": "0.6.8-next.2", + "version": "0.6.8", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/pagerduty/CHANGELOG.md b/plugins/pagerduty/CHANGELOG.md index 36f1e4a7ca..671772c119 100644 --- a/plugins/pagerduty/CHANGELOG.md +++ b/plugins/pagerduty/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-pagerduty +## 0.5.11 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + ## 0.5.11-next.2 ### Patch Changes diff --git a/plugins/pagerduty/package.json b/plugins/pagerduty/package.json index 89bc2367da..b635ade95e 100644 --- a/plugins/pagerduty/package.json +++ b/plugins/pagerduty/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-pagerduty", "description": "A Backstage plugin that integrates towards PagerDuty", - "version": "0.5.11-next.2", + "version": "0.5.11", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/periskop-backend/CHANGELOG.md b/plugins/periskop-backend/CHANGELOG.md index fde89edbe9..fc478922db 100644 --- a/plugins/periskop-backend/CHANGELOG.md +++ b/plugins/periskop-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-periskop-backend +## 0.1.16 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + ## 0.1.16-next.1 ### Patch Changes diff --git a/plugins/periskop-backend/package.json b/plugins/periskop-backend/package.json index b453b2bc59..520c4c03ca 100644 --- a/plugins/periskop-backend/package.json +++ b/plugins/periskop-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-periskop-backend", - "version": "0.1.16-next.1", + "version": "0.1.16", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/periskop/CHANGELOG.md b/plugins/periskop/CHANGELOG.md index 79f636a76a..65e6b2640d 100644 --- a/plugins/periskop/CHANGELOG.md +++ b/plugins/periskop/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-periskop +## 0.1.16 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + ## 0.1.16-next.2 ### Patch Changes diff --git a/plugins/periskop/package.json b/plugins/periskop/package.json index 5b277bbcce..b3f97452b6 100644 --- a/plugins/periskop/package.json +++ b/plugins/periskop/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-periskop", - "version": "0.1.16-next.2", + "version": "0.1.16", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/permission-backend/CHANGELOG.md b/plugins/permission-backend/CHANGELOG.md index 02bb528853..a5a5325d16 100644 --- a/plugins/permission-backend/CHANGELOG.md +++ b/plugins/permission-backend/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-permission-backend +## 0.5.20 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-permission-node@0.7.8 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-permission-common@0.7.5 + ## 0.5.20-next.1 ### Patch Changes diff --git a/plugins/permission-backend/package.json b/plugins/permission-backend/package.json index 0156c96626..e1fa9785c1 100644 --- a/plugins/permission-backend/package.json +++ b/plugins/permission-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-permission-backend", - "version": "0.5.20-next.1", + "version": "0.5.20", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/permission-node/CHANGELOG.md b/plugins/permission-node/CHANGELOG.md index b2014e3e62..eb964866ce 100644 --- a/plugins/permission-node/CHANGELOG.md +++ b/plugins/permission-node/CHANGELOG.md @@ -1,5 +1,36 @@ # @backstage/plugin-permission-node +## 0.7.8 + +### Patch Changes + +- a788e715cfc: `createPermissionIntegrationRouter` now accepts rules and permissions for multiple resource types. Example: + + ```typescript + createPermissionIntegrationRouter({ + resources: [ + { + resourceType: 'resourceType-1', + permissions: permissionsResourceType1, + rules: rulesResourceType1, + }, + { + resourceType: 'resourceType-2', + permissions: permissionsResourceType2, + rules: rulesResourceType2, + }, + ], + }); + ``` + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-permission-common@0.7.5 + ## 0.7.8-next.1 ### Patch Changes diff --git a/plugins/permission-node/package.json b/plugins/permission-node/package.json index a0187f4576..6a955ef29f 100644 --- a/plugins/permission-node/package.json +++ b/plugins/permission-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-permission-node", "description": "Common permission and authorization utilities for backend plugins", - "version": "0.7.8-next.1", + "version": "0.7.8", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/playlist-backend/CHANGELOG.md b/plugins/playlist-backend/CHANGELOG.md index 2bf296d6b4..31f1177294 100644 --- a/plugins/playlist-backend/CHANGELOG.md +++ b/plugins/playlist-backend/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-playlist-backend +## 0.3.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-permission-node@0.7.8 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-playlist-common@0.1.6 + ## 0.3.1-next.1 ### Patch Changes diff --git a/plugins/playlist-backend/package.json b/plugins/playlist-backend/package.json index c0ac336383..0d909104b9 100644 --- a/plugins/playlist-backend/package.json +++ b/plugins/playlist-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-playlist-backend", - "version": "0.3.1-next.1", + "version": "0.3.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/playlist/CHANGELOG.md b/plugins/playlist/CHANGELOG.md index 30f6ef919d..2ecdf65cb7 100644 --- a/plugins/playlist/CHANGELOG.md +++ b/plugins/playlist/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-playlist +## 0.1.9 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/plugin-search-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-permission-react@0.4.12 + - @backstage/plugin-playlist-common@0.1.6 + ## 0.1.9-next.2 ### Patch Changes diff --git a/plugins/playlist/package.json b/plugins/playlist/package.json index d30f4851d7..5cd050940d 100644 --- a/plugins/playlist/package.json +++ b/plugins/playlist/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-playlist", - "version": "0.1.9-next.2", + "version": "0.1.9", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/proxy-backend/CHANGELOG.md b/plugins/proxy-backend/CHANGELOG.md index e18a0f5a7f..6bd1c9004c 100644 --- a/plugins/proxy-backend/CHANGELOG.md +++ b/plugins/proxy-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-proxy-backend +## 0.2.39 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + ## 0.2.39-next.1 ### Patch Changes diff --git a/plugins/proxy-backend/package.json b/plugins/proxy-backend/package.json index f16c87f3d7..2f44342962 100644 --- a/plugins/proxy-backend/package.json +++ b/plugins/proxy-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-proxy-backend", "description": "A Backstage backend plugin that helps you set up proxy endpoints in the backend", - "version": "0.2.39-next.1", + "version": "0.2.39", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/puppetdb/CHANGELOG.md b/plugins/puppetdb/CHANGELOG.md index 8581c7650b..272f07dc01 100644 --- a/plugins/puppetdb/CHANGELOG.md +++ b/plugins/puppetdb/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-puppetdb +## 0.1.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + ## 0.1.1-next.2 ### Patch Changes diff --git a/plugins/puppetdb/package.json b/plugins/puppetdb/package.json index 9782269666..b04b3a7b1c 100644 --- a/plugins/puppetdb/package.json +++ b/plugins/puppetdb/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-puppetdb", "description": "Backstage plugin to visualize resource information and Puppet facts from PuppetDB.", - "version": "0.1.1-next.2", + "version": "0.1.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/rollbar-backend/CHANGELOG.md b/plugins/rollbar-backend/CHANGELOG.md index 337ba58f5f..1c1d8faffa 100644 --- a/plugins/rollbar-backend/CHANGELOG.md +++ b/plugins/rollbar-backend/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-rollbar-backend +## 0.1.42 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/config@1.0.7 + ## 0.1.42-next.1 ### Patch Changes diff --git a/plugins/rollbar-backend/package.json b/plugins/rollbar-backend/package.json index 170f06dcb0..8c5a2bd669 100644 --- a/plugins/rollbar-backend/package.json +++ b/plugins/rollbar-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-rollbar-backend", "description": "A Backstage backend plugin that integrates towards Rollbar", - "version": "0.1.42-next.1", + "version": "0.1.42", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/rollbar/CHANGELOG.md b/plugins/rollbar/CHANGELOG.md index d4d34fec32..ebe6cd0a7e 100644 --- a/plugins/rollbar/CHANGELOG.md +++ b/plugins/rollbar/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-rollbar +## 0.4.18 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + ## 0.4.18-next.2 ### Patch Changes diff --git a/plugins/rollbar/package.json b/plugins/rollbar/package.json index cd3c302b03..ee46f656fd 100644 --- a/plugins/rollbar/package.json +++ b/plugins/rollbar/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-rollbar", "description": "A Backstage plugin that integrates towards Rollbar", - "version": "0.4.18-next.2", + "version": "0.4.18", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md b/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md index 5ef00b8f91..3add549e58 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-scaffolder-backend-module-confluence-to-markdown +## 0.1.2 + +### Patch Changes + +- 7c116bcac7f: Fixed the way that some request errors are thrown +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.14.0 + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/plugin-scaffolder-node@0.1.3 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + ## 0.1.2-next.2 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/package.json b/plugins/scaffolder-backend-module-confluence-to-markdown/package.json index 57602c2d27..40fc82ecea 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdown/package.json +++ b/plugins/scaffolder-backend-module-confluence-to-markdown/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-backend-module-confluence-to-markdown", "description": "The confluence-to-markdown module for @backstage/plugin-scaffolder-backend", - "version": "0.1.2-next.2", + "version": "0.1.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md b/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md index 1c1d336fd1..1ea629a2fb 100644 --- a/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-scaffolder-backend-module-cookiecutter +## 0.2.21 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.14.0 + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/plugin-scaffolder-node@0.1.3 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + ## 0.2.21-next.2 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-cookiecutter/package.json b/plugins/scaffolder-backend-module-cookiecutter/package.json index d8649918c0..89b2997ea3 100644 --- a/plugins/scaffolder-backend-module-cookiecutter/package.json +++ b/plugins/scaffolder-backend-module-cookiecutter/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-backend-module-cookiecutter", "description": "A module for the scaffolder backend that lets you template projects using cookiecutter", - "version": "0.2.21-next.2", + "version": "0.2.21", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md b/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md index 72999216df..f040e0670e 100644 --- a/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-scaffolder-backend-module-gitlab +## 0.2.0 + +### Minor Changes + +- 439e2986be1: Add a new scaffolder action for gitlab to ensure a group exists + +### Patch Changes + +- f1496d4ab6f: Fix input schema validation issue for gitlab actions: + + - gitlab:group:ensureExists + - gitlab:projectAccessToken:create + - gitlab:projectDeployToken:create + - gitlab:projectVariable:create + +- Updated dependencies + - @backstage/integration@1.4.5 + - @backstage/plugin-scaffolder-node@0.1.3 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 0.2.0-next.2 ### Minor Changes diff --git a/plugins/scaffolder-backend-module-gitlab/package.json b/plugins/scaffolder-backend-module-gitlab/package.json index 9c36616eb8..07cc725570 100644 --- a/plugins/scaffolder-backend-module-gitlab/package.json +++ b/plugins/scaffolder-backend-module-gitlab/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-gitlab", - "version": "0.2.0-next.2", + "version": "0.2.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-rails/CHANGELOG.md b/plugins/scaffolder-backend-module-rails/CHANGELOG.md index bd263d65a7..0350dfbf5c 100644 --- a/plugins/scaffolder-backend-module-rails/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-rails/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-scaffolder-backend-module-rails +## 0.4.14 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.14.0 + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/plugin-scaffolder-node@0.1.3 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + ## 0.4.14-next.2 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-rails/package.json b/plugins/scaffolder-backend-module-rails/package.json index e45fc153ae..226e4ab3cb 100644 --- a/plugins/scaffolder-backend-module-rails/package.json +++ b/plugins/scaffolder-backend-module-rails/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-backend-module-rails", "description": "A module for the scaffolder backend that lets you template projects using Rails", - "version": "0.4.14-next.2", + "version": "0.4.14", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-sentry/CHANGELOG.md b/plugins/scaffolder-backend-module-sentry/CHANGELOG.md index 4206d39413..f3cf978ea6 100644 --- a/plugins/scaffolder-backend-module-sentry/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-sentry/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-scaffolder-backend-module-sentry +## 0.1.5 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.1.3 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 0.1.5-next.2 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-sentry/package.json b/plugins/scaffolder-backend-module-sentry/package.json index d66fea6d60..2a1bf2f61f 100644 --- a/plugins/scaffolder-backend-module-sentry/package.json +++ b/plugins/scaffolder-backend-module-sentry/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-sentry", - "version": "0.1.5-next.2", + "version": "0.1.5", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md b/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md index 232510d721..7509ba3d76 100644 --- a/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-scaffolder-backend-module-yeoman +## 0.2.18 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.1.3 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + ## 0.2.18-next.2 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-yeoman/package.json b/plugins/scaffolder-backend-module-yeoman/package.json index 952a220c5a..67f6caff59 100644 --- a/plugins/scaffolder-backend-module-yeoman/package.json +++ b/plugins/scaffolder-backend-module-yeoman/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-yeoman", - "version": "0.2.18-next.2", + "version": "0.2.18", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend/CHANGELOG.md b/plugins/scaffolder-backend/CHANGELOG.md index 221362e637..d4aa251b34 100644 --- a/plugins/scaffolder-backend/CHANGELOG.md +++ b/plugins/scaffolder-backend/CHANGELOG.md @@ -1,5 +1,39 @@ # @backstage/plugin-scaffolder-backend +## 1.14.0 + +### Minor Changes + +- 67115f532b8: Expose both types of scaffolder permissions and rules through the metadata endpoint. + + The metadata endpoint now correctly exposes both types of scaffolder permissions and rules (for both the template and action resource types) through the metadata endpoint. + +- a73b3c0b097: Add ability to use `defaultNamespace` and `defaultKind` for scaffolder action `catalog:fetch` + +### Patch Changes + +- 1a48b84901c: Bump minimum required version of `vm2` to be 3.9.18 +- d20c87966a4: Bump minimum required version of `vm2` to be 3.9.17 +- 6d954de4b06: Update typing for `RouterOptions::actions` and `ScaffolderActionsExtensionPoint::addActions` to allow any kind of action being assigned to it. +- Updated dependencies + - @backstage/plugin-catalog-backend@1.9.1 + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/plugin-scaffolder-common@1.3.0 + - @backstage/plugin-permission-node@0.7.8 + - @backstage/plugin-scaffolder-node@0.1.3 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-common@0.7.5 + ## 1.13.2-next.2 ### Patch Changes diff --git a/plugins/scaffolder-backend/package.json b/plugins/scaffolder-backend/package.json index 3d1794410d..aeb7861f4b 100644 --- a/plugins/scaffolder-backend/package.json +++ b/plugins/scaffolder-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-backend", "description": "The Backstage backend plugin that helps you create new things", - "version": "1.13.2-next.2", + "version": "1.14.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-common/CHANGELOG.md b/plugins/scaffolder-common/CHANGELOG.md index b09bf55eb3..b5bcabb64f 100644 --- a/plugins/scaffolder-common/CHANGELOG.md +++ b/plugins/scaffolder-common/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-scaffolder-common +## 1.3.0 + +### Minor Changes + +- 82e10a6939c: Add support for Markdown text blob outputs from templates +- 67115f532b8: Expose scaffolder permissions in new sub-aggregations. + + In addition to exporting a list of all scaffolder permissions in `scaffolderPermissions`, scaffolder-common now exports `scaffolderTemplatePermissions` and `scaffolderActionPermissions`, which contain subsets of the scaffolder permissions separated by resource type. + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.3.0 + - @backstage/types@1.0.2 + - @backstage/plugin-permission-common@0.7.5 + ## 1.3.0-next.0 ### Minor Changes diff --git a/plugins/scaffolder-common/package.json b/plugins/scaffolder-common/package.json index c12f16dbad..45b4986155 100644 --- a/plugins/scaffolder-common/package.json +++ b/plugins/scaffolder-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-common", "description": "Common functionalities for the scaffolder, to be shared between scaffolder and scaffolder-backend plugin", - "version": "1.3.0-next.0", + "version": "1.3.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-node/CHANGELOG.md b/plugins/scaffolder-node/CHANGELOG.md index 5936463ac8..7c4f4316ec 100644 --- a/plugins/scaffolder-node/CHANGELOG.md +++ b/plugins/scaffolder-node/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-scaffolder-node +## 0.1.3 + +### Patch Changes + +- 6d954de4b06: Update typing for `RouterOptions::actions` and `ScaffolderActionsExtensionPoint::addActions` to allow any kind of action being assigned to it. +- Updated dependencies + - @backstage/plugin-scaffolder-common@1.3.0 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-model@1.3.0 + - @backstage/types@1.0.2 + ## 0.1.3-next.2 ### Patch Changes diff --git a/plugins/scaffolder-node/package.json b/plugins/scaffolder-node/package.json index d00dd15226..4eda195f91 100644 --- a/plugins/scaffolder-node/package.json +++ b/plugins/scaffolder-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-node", "description": "The plugin-scaffolder-node module for @backstage/plugin-scaffolder-backend", - "version": "0.1.3-next.2", + "version": "0.1.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-react/CHANGELOG.md b/plugins/scaffolder-react/CHANGELOG.md index 8d93049843..59434d30cf 100644 --- a/plugins/scaffolder-react/CHANGELOG.md +++ b/plugins/scaffolder-react/CHANGELOG.md @@ -1,5 +1,31 @@ # @backstage/plugin-scaffolder-react +## 1.4.0 + +### Minor Changes + +- 82e10a6939c: Add support for Markdown text blob outputs from templates + +### Patch Changes + +- ad1a1429de4: Improvements to the `scaffolder/next` buttons UX: + + - Added padding around the "Create" button in the `Stepper` component + - Added a button bar that includes the "Cancel" and "Start Over" buttons to the `OngoingTask` component. The state of these buttons match their existing counter parts in the Context Menu + - Added a "Show Button Bar"/"Hide Button Bar" item to the `ContextMenu` component + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/plugin-scaffolder-common@1.3.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.4 + ## 1.4.0-next.2 ### Minor Changes diff --git a/plugins/scaffolder-react/package.json b/plugins/scaffolder-react/package.json index c455eeebf6..5e5732fb04 100644 --- a/plugins/scaffolder-react/package.json +++ b/plugins/scaffolder-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-react", "description": "A frontend library that helps other Backstage plugins interact with the Scaffolder", - "version": "1.4.0-next.2", + "version": "1.4.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder/CHANGELOG.md b/plugins/scaffolder/CHANGELOG.md index 577517a127..9658bfc48f 100644 --- a/plugins/scaffolder/CHANGELOG.md +++ b/plugins/scaffolder/CHANGELOG.md @@ -1,5 +1,33 @@ # @backstage/plugin-scaffolder +## 1.13.1 + +### Patch Changes + +- d560d457c98: Fix case GitLab workspace is a nested subgroup +- ad1a1429de4: Improvements to the `scaffolder/next` buttons UX: + + - Added padding around the "Create" button in the `Stepper` component + - Added a button bar that includes the "Cancel" and "Start Over" buttons to the `OngoingTask` component. The state of these buttons match their existing counter parts in the Context Menu + - Added a "Show Button Bar"/"Hide Button Bar" item to the `ContextMenu` component + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/integration@1.4.5 + - @backstage/plugin-scaffolder-common@1.3.0 + - @backstage/plugin-scaffolder-react@1.4.0 + - @backstage/core-components@0.13.1 + - @backstage/integration-react@1.1.13 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-react@0.4.12 + ## 1.13.1-next.2 ### Patch Changes diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json index 4b5e34e5de..89bb9f90d6 100644 --- a/plugins/scaffolder/package.json +++ b/plugins/scaffolder/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder", "description": "The Backstage plugin that helps you create new things", - "version": "1.13.1-next.2", + "version": "1.13.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend-module-catalog/CHANGELOG.md b/plugins/search-backend-module-catalog/CHANGELOG.md index bf64047538..f8c7e04d44 100644 --- a/plugins/search-backend-module-catalog/CHANGELOG.md +++ b/plugins/search-backend-module-catalog/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-search-backend-module-catalog +## 0.1.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-search-backend-node@1.2.1 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-search-common@1.2.3 + ## 0.1.1-next.1 ### Patch Changes diff --git a/plugins/search-backend-module-catalog/package.json b/plugins/search-backend-module-catalog/package.json index 15421990e2..8e0e30d711 100644 --- a/plugins/search-backend-module-catalog/package.json +++ b/plugins/search-backend-module-catalog/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-module-catalog", "description": "A module for the search backend that exports catalog modules", - "version": "0.1.1-next.1", + "version": "0.1.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend-module-elasticsearch/CHANGELOG.md b/plugins/search-backend-module-elasticsearch/CHANGELOG.md index a74c8e5c0d..e699ee60c7 100644 --- a/plugins/search-backend-module-elasticsearch/CHANGELOG.md +++ b/plugins/search-backend-module-elasticsearch/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-search-backend-module-elasticsearch +## 1.3.0 + +### Minor Changes + +- 3d72bdb41c7: Upgrade to aws-sdk v3 and include OpenSearch Serverless support + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration-aws-node@0.1.3 + - @backstage/plugin-search-backend-node@1.2.1 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/plugin-search-common@1.2.3 + ## 1.3.0-next.2 ### Minor Changes diff --git a/plugins/search-backend-module-elasticsearch/package.json b/plugins/search-backend-module-elasticsearch/package.json index 20f12c3592..e8d999e840 100644 --- a/plugins/search-backend-module-elasticsearch/package.json +++ b/plugins/search-backend-module-elasticsearch/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-module-elasticsearch", "description": "A module for the search backend that implements search using ElasticSearch", - "version": "1.3.0-next.2", + "version": "1.3.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend-module-explore/CHANGELOG.md b/plugins/search-backend-module-explore/CHANGELOG.md index df693832db..529cdcc99e 100644 --- a/plugins/search-backend-module-explore/CHANGELOG.md +++ b/plugins/search-backend-module-explore/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-search-backend-module-explore +## 0.1.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-search-backend-node@1.2.1 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-search-common@1.2.3 + ## 0.1.1-next.1 ### Patch Changes diff --git a/plugins/search-backend-module-explore/package.json b/plugins/search-backend-module-explore/package.json index 00f63ef41e..6a6f92a9cc 100644 --- a/plugins/search-backend-module-explore/package.json +++ b/plugins/search-backend-module-explore/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-module-explore", "description": "A module for the search backend that exports explore modules", - "version": "0.1.1-next.1", + "version": "0.1.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend-module-pg/CHANGELOG.md b/plugins/search-backend-module-pg/CHANGELOG.md index 9b9ddfa0ff..98354dd3ea 100644 --- a/plugins/search-backend-module-pg/CHANGELOG.md +++ b/plugins/search-backend-module-pg/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-search-backend-module-pg +## 0.5.6 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-search-backend-node@1.2.1 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/plugin-search-common@1.2.3 + ## 0.5.6-next.1 ### Patch Changes diff --git a/plugins/search-backend-module-pg/package.json b/plugins/search-backend-module-pg/package.json index 5d63d913e0..e623ba034d 100644 --- a/plugins/search-backend-module-pg/package.json +++ b/plugins/search-backend-module-pg/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-module-pg", "description": "A module for the search backend that implements search using PostgreSQL", - "version": "0.5.6-next.1", + "version": "0.5.6", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend-module-techdocs/CHANGELOG.md b/plugins/search-backend-module-techdocs/CHANGELOG.md index 83eed95d8e..fe6fc1420d 100644 --- a/plugins/search-backend-module-techdocs/CHANGELOG.md +++ b/plugins/search-backend-module-techdocs/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-search-backend-module-techdocs +## 0.1.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-techdocs-node@1.7.1 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-search-backend-node@1.2.1 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-search-common@1.2.3 + ## 0.1.1-next.1 ### Patch Changes diff --git a/plugins/search-backend-module-techdocs/package.json b/plugins/search-backend-module-techdocs/package.json index f7d7151aeb..b45a7a3b66 100644 --- a/plugins/search-backend-module-techdocs/package.json +++ b/plugins/search-backend-module-techdocs/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-module-techdocs", "description": "A module for the search backend that exports techdocs modules", - "version": "0.1.1-next.1", + "version": "0.1.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend-node/CHANGELOG.md b/plugins/search-backend-node/CHANGELOG.md index 00a828f132..7aca52d696 100644 --- a/plugins/search-backend-node/CHANGELOG.md +++ b/plugins/search-backend-node/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-search-backend-node +## 1.2.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-search-common@1.2.3 + ## 1.2.1-next.1 ### Patch Changes diff --git a/plugins/search-backend-node/package.json b/plugins/search-backend-node/package.json index 9d7b0b0210..21a38cf3b5 100644 --- a/plugins/search-backend-node/package.json +++ b/plugins/search-backend-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-node", "description": "A library for Backstage backend plugins that want to interact with the search backend plugin", - "version": "1.2.1-next.1", + "version": "1.2.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend/CHANGELOG.md b/plugins/search-backend/CHANGELOG.md index fbc53b4f2d..5bbc969216 100644 --- a/plugins/search-backend/CHANGELOG.md +++ b/plugins/search-backend/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-search-backend +## 1.3.1 + +### Patch Changes + +- 021cfbb5152: Added an OpenAPI 3.0 spec and enforced schema-first model on the router. +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-permission-node@0.7.8 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/plugin-search-backend-node@1.2.1 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-search-common@1.2.3 + ## 1.3.1-next.2 ### Patch Changes diff --git a/plugins/search-backend/package.json b/plugins/search-backend/package.json index 53059b2355..c7658ab754 100644 --- a/plugins/search-backend/package.json +++ b/plugins/search-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend", "description": "The Backstage backend plugin that provides your backstage app with search", - "version": "1.3.1-next.2", + "version": "1.3.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-react/CHANGELOG.md b/plugins/search-react/CHANGELOG.md index 411953c6f9..6527d67bb9 100644 --- a/plugins/search-react/CHANGELOG.md +++ b/plugins/search-react/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/plugin-search-react +## 1.6.0 + +### Minor Changes + +- 750e45539ad: Add close button & improve search input. + + MUI's Paper wrapping the SearchBar in the SearchPage was removed, we recommend users update their apps accordingly. + + SearchBarBase's TextField's label support added & aria-label uses label string if present, tests relying on the default placeholder value should still work unless custom placeholder was given. + +- 1ce7f84b2e8: accepts InputProp property that can override keys from default + +### Patch Changes + +- f785f0804cd: `SearchPagination` now automatically resets the page cursor when the page limit is changed +- adb31096bc2: Fix text-overflow UI issue for Lifecycle spans in SearchFilter checkbox labels. +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.4 + - @backstage/plugin-search-common@1.2.3 + ## 1.6.0-next.2 ### Minor Changes diff --git a/plugins/search-react/package.json b/plugins/search-react/package.json index e424788e31..6a5b326f34 100644 --- a/plugins/search-react/package.json +++ b/plugins/search-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-search-react", - "version": "1.6.0-next.2", + "version": "1.6.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search/CHANGELOG.md b/plugins/search/CHANGELOG.md index f3c93f5142..2427adb905 100644 --- a/plugins/search/CHANGELOG.md +++ b/plugins/search/CHANGELOG.md @@ -1,5 +1,31 @@ # @backstage/plugin-search +## 1.3.0 + +### Minor Changes + +- 750e45539ad: Add close button & improve search input. + + MUI's Paper wrapping the SearchBar in the SearchPage was removed, we recommend users update their apps accordingly. + + SearchBarBase's TextField's label support added & aria-label uses label string if present, tests relying on the default placeholder value should still work unless custom placeholder was given. + +### Patch Changes + +- 0e3d8d69318: Fixed 404 Error when fetching search results due to URL encoding changes +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/plugin-search-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.4 + - @backstage/plugin-search-common@1.2.3 + ## 1.3.0-next.2 ### Patch Changes diff --git a/plugins/search/package.json b/plugins/search/package.json index c4f7f680b6..f95a25ee40 100644 --- a/plugins/search/package.json +++ b/plugins/search/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search", "description": "The Backstage plugin that provides your backstage app with search", - "version": "1.3.0-next.2", + "version": "1.3.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/sentry/CHANGELOG.md b/plugins/sentry/CHANGELOG.md index be844d6c4f..cd25c33475 100644 --- a/plugins/sentry/CHANGELOG.md +++ b/plugins/sentry/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-sentry +## 0.5.3 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + ## 0.5.3-next.2 ### Patch Changes diff --git a/plugins/sentry/package.json b/plugins/sentry/package.json index 70177fc4d7..454b1b0259 100644 --- a/plugins/sentry/package.json +++ b/plugins/sentry/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-sentry", "description": "A Backstage plugin that integrates towards Sentry", - "version": "0.5.3-next.2", + "version": "0.5.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/shortcuts/CHANGELOG.md b/plugins/shortcuts/CHANGELOG.md index fab37db64c..d151c6cdb4 100644 --- a/plugins/shortcuts/CHANGELOG.md +++ b/plugins/shortcuts/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-shortcuts +## 0.3.10 + +### Patch Changes + +- 8a7174e297c: Marked `LocalStoredShortcuts` as deprecated, replacing it with `DefaultShortcutsApi` whose naming more clearly suggests that the shortcuts aren't necessarily stored locally (it depends on the storage implementation). +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + - @backstage/types@1.0.2 + ## 0.3.10-next.2 ### Patch Changes diff --git a/plugins/shortcuts/package.json b/plugins/shortcuts/package.json index 511247369f..21dd39256d 100644 --- a/plugins/shortcuts/package.json +++ b/plugins/shortcuts/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-shortcuts", "description": "A Backstage plugin that provides a shortcuts feature to the sidebar", - "version": "0.3.10-next.2", + "version": "0.3.10", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/sonarqube-backend/CHANGELOG.md b/plugins/sonarqube-backend/CHANGELOG.md index cf90264ece..ab84aef856 100644 --- a/plugins/sonarqube-backend/CHANGELOG.md +++ b/plugins/sonarqube-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-sonarqube-backend +## 0.1.10 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 0.1.10-next.1 ### Patch Changes diff --git a/plugins/sonarqube-backend/package.json b/plugins/sonarqube-backend/package.json index 9b452471de..28b61aa1be 100644 --- a/plugins/sonarqube-backend/package.json +++ b/plugins/sonarqube-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-sonarqube-backend", - "version": "0.1.10-next.1", + "version": "0.1.10", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/sonarqube/CHANGELOG.md b/plugins/sonarqube/CHANGELOG.md index 1e186aa844..d9624d2449 100644 --- a/plugins/sonarqube/CHANGELOG.md +++ b/plugins/sonarqube/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-sonarqube +## 0.6.7 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-sonarqube-react@0.1.5 + ## 0.6.7-next.2 ### Patch Changes diff --git a/plugins/sonarqube/package.json b/plugins/sonarqube/package.json index fcf247969b..1fbe857d9d 100644 --- a/plugins/sonarqube/package.json +++ b/plugins/sonarqube/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-sonarqube", "description": "", - "version": "0.6.7-next.2", + "version": "0.6.7", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/splunk-on-call/CHANGELOG.md b/plugins/splunk-on-call/CHANGELOG.md index 4f1741cefe..9685a0c003 100644 --- a/plugins/splunk-on-call/CHANGELOG.md +++ b/plugins/splunk-on-call/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-splunk-on-call +## 0.4.7 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + ## 0.4.7-next.2 ### Patch Changes diff --git a/plugins/splunk-on-call/package.json b/plugins/splunk-on-call/package.json index 95293d447d..4d0a79927b 100644 --- a/plugins/splunk-on-call/package.json +++ b/plugins/splunk-on-call/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-splunk-on-call", "description": "A Backstage plugin that integrates towards Splunk On-Call", - "version": "0.4.7-next.2", + "version": "0.4.7", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/stack-overflow-backend/CHANGELOG.md b/plugins/stack-overflow-backend/CHANGELOG.md index 03006fd490..a82a7abb05 100644 --- a/plugins/stack-overflow-backend/CHANGELOG.md +++ b/plugins/stack-overflow-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-stack-overflow-backend +## 0.2.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/config@1.0.7 + - @backstage/plugin-search-common@1.2.3 + ## 0.2.1-next.1 ### Patch Changes diff --git a/plugins/stack-overflow-backend/package.json b/plugins/stack-overflow-backend/package.json index fd08b70f52..29285a5972 100644 --- a/plugins/stack-overflow-backend/package.json +++ b/plugins/stack-overflow-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-stack-overflow-backend", - "version": "0.2.1-next.1", + "version": "0.2.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/stack-overflow/CHANGELOG.md b/plugins/stack-overflow/CHANGELOG.md index dad8fb3385..d0a05501a9 100644 --- a/plugins/stack-overflow/CHANGELOG.md +++ b/plugins/stack-overflow/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-stack-overflow +## 0.1.15 + +### Patch Changes + +- c1ff65f315a: StackOverflowSearchResultListItem can now accept an empty result prop so that it can be rendered in the suggested SearchResultListItem pattern. +- Updated dependencies + - @backstage/plugin-home@0.5.2 + - @backstage/theme@0.3.0 + - @backstage/plugin-search-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-search-common@1.2.3 + ## 0.1.15-next.2 ### Patch Changes diff --git a/plugins/stack-overflow/package.json b/plugins/stack-overflow/package.json index 2f966224d2..5b9cdb0213 100644 --- a/plugins/stack-overflow/package.json +++ b/plugins/stack-overflow/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-stack-overflow", - "version": "0.1.15-next.2", + "version": "0.1.15", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/stackstorm/CHANGELOG.md b/plugins/stackstorm/CHANGELOG.md index 3763d9d295..c75324e862 100644 --- a/plugins/stackstorm/CHANGELOG.md +++ b/plugins/stackstorm/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-stackstorm +## 0.1.2 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + ## 0.1.2-next.1 ### Patch Changes diff --git a/plugins/stackstorm/package.json b/plugins/stackstorm/package.json index 8787199746..f1ba49ca0b 100644 --- a/plugins/stackstorm/package.json +++ b/plugins/stackstorm/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-stackstorm", "description": "A Backstage plugin that integrates towards StackStorm", - "version": "0.1.2-next.1", + "version": "0.1.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md b/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md index 864c0cb830..fd3e6023f8 100644 --- a/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md +++ b/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-tech-insights-backend-module-jsonfc +## 0.1.29 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-tech-insights-node@0.4.3 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-tech-insights-common@0.2.10 + ## 0.1.29-next.1 ### Patch Changes diff --git a/plugins/tech-insights-backend-module-jsonfc/package.json b/plugins/tech-insights-backend-module-jsonfc/package.json index 489f36e2f8..46ae292ff5 100644 --- a/plugins/tech-insights-backend-module-jsonfc/package.json +++ b/plugins/tech-insights-backend-module-jsonfc/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights-backend-module-jsonfc", - "version": "0.1.29-next.1", + "version": "0.1.29", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-insights-backend/CHANGELOG.md b/plugins/tech-insights-backend/CHANGELOG.md index 1c3b902c3f..faaa4b1960 100644 --- a/plugins/tech-insights-backend/CHANGELOG.md +++ b/plugins/tech-insights-backend/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-tech-insights-backend +## 0.5.11 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-tech-insights-node@0.4.3 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-tech-insights-common@0.2.10 + ## 0.5.11-next.1 ### Patch Changes diff --git a/plugins/tech-insights-backend/package.json b/plugins/tech-insights-backend/package.json index 09bb9c8d6f..2525d1e914 100644 --- a/plugins/tech-insights-backend/package.json +++ b/plugins/tech-insights-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights-backend", - "version": "0.5.11-next.1", + "version": "0.5.11", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-insights-node/CHANGELOG.md b/plugins/tech-insights-node/CHANGELOG.md index e5eec67a40..ee4a160a76 100644 --- a/plugins/tech-insights-node/CHANGELOG.md +++ b/plugins/tech-insights-node/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-tech-insights-node +## 0.4.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-tech-insights-common@0.2.10 + ## 0.4.3-next.1 ### Patch Changes diff --git a/plugins/tech-insights-node/package.json b/plugins/tech-insights-node/package.json index bc5c0816f7..b97076a11e 100644 --- a/plugins/tech-insights-node/package.json +++ b/plugins/tech-insights-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights-node", - "version": "0.4.3-next.1", + "version": "0.4.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-insights/CHANGELOG.md b/plugins/tech-insights/CHANGELOG.md index 23fb28deea..4f36cfba16 100644 --- a/plugins/tech-insights/CHANGELOG.md +++ b/plugins/tech-insights/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-tech-insights +## 0.3.10 + +### Patch Changes + +- 22963209d23: Added the possibility to customize the check description in the scorecard component. + + - The `CheckResultRenderer` type now exposes an optional `description` method that allows to overwrite the description with a different string or a React component for a provided check result. + + Until now only the `BooleanCheck` element could be overridden, but from now on it's also possible to override the description for a check. + As an example, the description could change depending on the check result. Refer to the [README](https://github.com/backstage/backstage/blob/master/plugins/tech-insights/README.md#adding-custom-rendering-components) file for more details + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-tech-insights-common@0.2.10 + ## 0.3.10-next.2 ### Patch Changes diff --git a/plugins/tech-insights/package.json b/plugins/tech-insights/package.json index 4e2604a33a..a6facfff46 100644 --- a/plugins/tech-insights/package.json +++ b/plugins/tech-insights/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights", - "version": "0.3.10-next.2", + "version": "0.3.10", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-radar/CHANGELOG.md b/plugins/tech-radar/CHANGELOG.md index c6d0bd29cd..8250d4bfe8 100644 --- a/plugins/tech-radar/CHANGELOG.md +++ b/plugins/tech-radar/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-tech-radar +## 0.6.4 + +### Patch Changes + +- be4fa53fab8: Fix description links when clicking entry in radar. +- Added the ability to display a timeline to each entry in the details box +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + ## 0.6.4-next.2 ### Patch Changes diff --git a/plugins/tech-radar/package.json b/plugins/tech-radar/package.json index a5f6456850..7fb7520e25 100644 --- a/plugins/tech-radar/package.json +++ b/plugins/tech-radar/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-tech-radar", "description": "A Backstage plugin that lets you display a Tech Radar for your organization", - "version": "0.6.4-next.2", + "version": "0.6.4", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/techdocs-addons-test-utils/CHANGELOG.md b/plugins/techdocs-addons-test-utils/CHANGELOG.md index 051190ab61..ede86cb6bb 100644 --- a/plugins/techdocs-addons-test-utils/CHANGELOG.md +++ b/plugins/techdocs-addons-test-utils/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-techdocs-addons-test-utils +## 1.0.13 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-techdocs@1.6.2 + - @backstage/plugin-catalog@1.11.0 + - @backstage/core-app-api@1.8.0 + - @backstage/plugin-search-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/integration-react@1.1.13 + - @backstage/test-utils@1.3.1 + - @backstage/plugin-techdocs-react@1.1.6 + - @backstage/core-plugin-api@1.5.1 + ## 1.0.13-next.2 ### Patch Changes diff --git a/plugins/techdocs-addons-test-utils/package.json b/plugins/techdocs-addons-test-utils/package.json index 7de356960f..2e31a0d6bd 100644 --- a/plugins/techdocs-addons-test-utils/package.json +++ b/plugins/techdocs-addons-test-utils/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-techdocs-addons-test-utils", - "version": "1.0.13-next.2", + "version": "1.0.13", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/techdocs-backend/CHANGELOG.md b/plugins/techdocs-backend/CHANGELOG.md index 8df2623fa0..309a3d3ea6 100644 --- a/plugins/techdocs-backend/CHANGELOG.md +++ b/plugins/techdocs-backend/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-techdocs-backend +## 1.6.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/plugin-techdocs-node@1.7.1 + - @backstage/plugin-search-backend-module-techdocs@0.1.1 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-search-common@1.2.3 + ## 1.6.2-next.1 ### Patch Changes diff --git a/plugins/techdocs-backend/package.json b/plugins/techdocs-backend/package.json index b90c299621..999bc7f93b 100644 --- a/plugins/techdocs-backend/package.json +++ b/plugins/techdocs-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-backend", "description": "The Backstage backend plugin that renders technical documentation for your components", - "version": "1.6.2-next.1", + "version": "1.6.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/techdocs-module-addons-contrib/CHANGELOG.md b/plugins/techdocs-module-addons-contrib/CHANGELOG.md index b267a89b8b..01765d39de 100644 --- a/plugins/techdocs-module-addons-contrib/CHANGELOG.md +++ b/plugins/techdocs-module-addons-contrib/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-techdocs-module-addons-contrib +## 1.0.13 + +### Patch Changes + +- 6afc7f052ca: Show cursor pointer when hovering on lightbox +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/integration@1.4.5 + - @backstage/core-components@0.13.1 + - @backstage/integration-react@1.1.13 + - @backstage/plugin-techdocs-react@1.1.6 + - @backstage/core-plugin-api@1.5.1 + ## 1.0.13-next.2 ### Patch Changes diff --git a/plugins/techdocs-module-addons-contrib/package.json b/plugins/techdocs-module-addons-contrib/package.json index 527e5487dc..7ef4a1f2c1 100644 --- a/plugins/techdocs-module-addons-contrib/package.json +++ b/plugins/techdocs-module-addons-contrib/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-module-addons-contrib", "description": "Plugin module for contributed TechDocs Addons", - "version": "1.0.13-next.2", + "version": "1.0.13", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/techdocs-node/CHANGELOG.md b/plugins/techdocs-node/CHANGELOG.md index e3715430c9..7737a13a13 100644 --- a/plugins/techdocs-node/CHANGELOG.md +++ b/plugins/techdocs-node/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-techdocs-node +## 1.7.1 + +### Patch Changes + +- 3659c71c5d9: Standardize `@aws-sdk` v3 versions +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/integration-aws-node@0.1.3 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-search-common@1.2.3 + ## 1.7.1-next.1 ### Patch Changes diff --git a/plugins/techdocs-node/package.json b/plugins/techdocs-node/package.json index dde49d6b2c..d3ec2232cd 100644 --- a/plugins/techdocs-node/package.json +++ b/plugins/techdocs-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-node", "description": "Common node.js functionalities for TechDocs, to be shared between techdocs-backend plugin and techdocs-cli", - "version": "1.7.1-next.1", + "version": "1.7.1", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/plugins/techdocs-react/CHANGELOG.md b/plugins/techdocs-react/CHANGELOG.md index 5247e6906f..9176553916 100644 --- a/plugins/techdocs-react/CHANGELOG.md +++ b/plugins/techdocs-react/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-techdocs-react +## 1.1.6 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/version-bridge@1.0.4 + ## 1.1.6-next.1 ### Patch Changes diff --git a/plugins/techdocs-react/package.json b/plugins/techdocs-react/package.json index 8a8c2c5cbc..ee523969c1 100644 --- a/plugins/techdocs-react/package.json +++ b/plugins/techdocs-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-react", "description": "Shared frontend utilities for TechDocs and Addons", - "version": "1.1.6-next.1", + "version": "1.1.6", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/plugins/techdocs/CHANGELOG.md b/plugins/techdocs/CHANGELOG.md index f076a23b0b..5d21c2a5fe 100644 --- a/plugins/techdocs/CHANGELOG.md +++ b/plugins/techdocs/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-techdocs +## 1.6.2 + +### Patch Changes + +- 863beb49498: Re-add the possibility to have trailing slashes in Techdocs navigation. +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/integration@1.4.5 + - @backstage/plugin-search-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/integration-react@1.1.13 + - @backstage/plugin-techdocs-react@1.1.6 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-search-common@1.2.3 + ## 1.6.2-next.2 ### Patch Changes diff --git a/plugins/techdocs/package.json b/plugins/techdocs/package.json index 1004055c45..cf6315286b 100644 --- a/plugins/techdocs/package.json +++ b/plugins/techdocs/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs", "description": "The Backstage plugin that renders technical documentation for your components", - "version": "1.6.2-next.2", + "version": "1.6.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/todo-backend/CHANGELOG.md b/plugins/todo-backend/CHANGELOG.md index 84d8807698..17a2eb8cf8 100644 --- a/plugins/todo-backend/CHANGELOG.md +++ b/plugins/todo-backend/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-todo-backend +## 0.1.42 + +### Patch Changes + +- 901f1ada325: Added OpenAPI schema +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 0.1.42-next.1 ### Patch Changes diff --git a/plugins/todo-backend/package.json b/plugins/todo-backend/package.json index 9385ec0ee6..84da46ced1 100644 --- a/plugins/todo-backend/package.json +++ b/plugins/todo-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-todo-backend", "description": "A Backstage backend plugin that lets you browse TODO comments in your source code", - "version": "0.1.42-next.1", + "version": "0.1.42", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/todo/CHANGELOG.md b/plugins/todo/CHANGELOG.md index 0a0a205d06..960f71c444 100644 --- a/plugins/todo/CHANGELOG.md +++ b/plugins/todo/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-todo +## 0.2.20 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + ## 0.2.20-next.2 ### Patch Changes diff --git a/plugins/todo/package.json b/plugins/todo/package.json index 3dd5822154..f388d19885 100644 --- a/plugins/todo/package.json +++ b/plugins/todo/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-todo", "description": "A Backstage plugin that lets you browse TODO comments in your source code", - "version": "0.2.20-next.2", + "version": "0.2.20", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/user-settings-backend/CHANGELOG.md b/plugins/user-settings-backend/CHANGELOG.md index 4420e63f8e..bf3b2630e0 100644 --- a/plugins/user-settings-backend/CHANGELOG.md +++ b/plugins/user-settings-backend/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-user-settings-backend +## 0.1.9 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + ## 0.1.9-next.1 ### Patch Changes diff --git a/plugins/user-settings-backend/package.json b/plugins/user-settings-backend/package.json index 6fdeee038d..25cc5ee812 100644 --- a/plugins/user-settings-backend/package.json +++ b/plugins/user-settings-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-user-settings-backend", "description": "The Backstage backend plugin to manage user settings", - "version": "0.1.9-next.1", + "version": "0.1.9", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/user-settings/CHANGELOG.md b/plugins/user-settings/CHANGELOG.md index 5fd080fe60..7240ceccd9 100644 --- a/plugins/user-settings/CHANGELOG.md +++ b/plugins/user-settings/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-user-settings +## 0.7.3 + +### Patch Changes + +- 473db605a4f: Fix config schema definition. +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-app-api@1.8.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + ## 0.7.3-next.2 ### Patch Changes diff --git a/plugins/user-settings/package.json b/plugins/user-settings/package.json index 98d688bcda..55672e358a 100644 --- a/plugins/user-settings/package.json +++ b/plugins/user-settings/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-user-settings", "description": "A Backstage plugin that provides a settings page", - "version": "0.7.3-next.2", + "version": "0.7.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/vault-backend/CHANGELOG.md b/plugins/vault-backend/CHANGELOG.md index 33fcd6017c..ceaa496252 100644 --- a/plugins/vault-backend/CHANGELOG.md +++ b/plugins/vault-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-vault-backend +## 0.3.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 0.3.1-next.1 ### Patch Changes diff --git a/plugins/vault-backend/package.json b/plugins/vault-backend/package.json index 0f4467ca80..26e30c91ad 100644 --- a/plugins/vault-backend/package.json +++ b/plugins/vault-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-vault-backend", "description": "A Backstage backend plugin that integrates towards Vault", - "version": "0.3.1-next.1", + "version": "0.3.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/vault/CHANGELOG.md b/plugins/vault/CHANGELOG.md index e5b521cdf9..7c2f0f0adf 100644 --- a/plugins/vault/CHANGELOG.md +++ b/plugins/vault/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-vault +## 0.1.12 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + ## 0.1.12-next.2 ### Patch Changes diff --git a/plugins/vault/package.json b/plugins/vault/package.json index 813217876c..0cc1df1d6b 100644 --- a/plugins/vault/package.json +++ b/plugins/vault/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-vault", "description": "A Backstage plugin that integrates towards Vault", - "version": "0.1.12-next.2", + "version": "0.1.12", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/xcmetrics/CHANGELOG.md b/plugins/xcmetrics/CHANGELOG.md index fbd75b686f..641a0697e0 100644 --- a/plugins/xcmetrics/CHANGELOG.md +++ b/plugins/xcmetrics/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-xcmetrics +## 0.2.38 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + ## 0.2.38-next.1 ### Patch Changes diff --git a/plugins/xcmetrics/package.json b/plugins/xcmetrics/package.json index 54dea03612..5f21dd0951 100644 --- a/plugins/xcmetrics/package.json +++ b/plugins/xcmetrics/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-xcmetrics", "description": "A Backstage plugin that shows XCode build metrics for your components", - "version": "0.2.38-next.1", + "version": "0.2.38", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/yarn.lock b/yarn.lock index 82626c846e..39ada76723 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3787,7 +3787,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/catalog-client@^1.4.1, @backstage/catalog-client@workspace:^, @backstage/catalog-client@workspace:packages/catalog-client": +"@backstage/catalog-client@workspace:^, @backstage/catalog-client@workspace:packages/catalog-client": version: 0.0.0-use.local resolution: "@backstage/catalog-client@workspace:packages/catalog-client" dependencies: @@ -4088,110 +4088,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/core-components@npm:^0.12.3": - version: 0.12.5 - resolution: "@backstage/core-components@npm:0.12.5" - dependencies: - "@backstage/config": ^1.0.7 - "@backstage/core-plugin-api": ^1.5.0 - "@backstage/errors": ^1.1.5 - "@backstage/theme": ^0.2.18 - "@backstage/version-bridge": ^1.0.3 - "@material-table/core": ^3.1.0 - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 - "@react-hookz/web": ^20.0.0 - "@types/react-sparklines": ^1.7.0 - "@types/react-text-truncate": ^0.14.0 - ansi-regex: ^6.0.1 - classnames: ^2.2.6 - d3-selection: ^3.0.0 - d3-shape: ^3.0.0 - d3-zoom: ^3.0.0 - dagre: ^0.8.5 - history: ^5.0.0 - immer: ^9.0.1 - lodash: ^4.17.21 - pluralize: ^8.0.0 - prop-types: ^15.7.2 - qs: ^6.9.4 - rc-progress: 3.4.1 - react-helmet: 6.1.0 - react-hook-form: ^7.12.2 - react-markdown: ^8.0.0 - react-sparklines: ^1.7.0 - react-syntax-highlighter: ^15.4.5 - react-text-truncate: ^0.19.0 - react-use: ^17.3.2 - react-virtualized-auto-sizer: ^1.0.6 - react-window: ^1.8.6 - remark-gfm: ^3.0.1 - zen-observable: ^0.10.0 - zod: ~3.18.0 - peerDependencies: - "@types/react": ^16.13.1 || ^17.0.0 - react: ^16.13.1 || ^17.0.0 - react-dom: ^16.13.1 || ^17.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - checksum: 8308c1b90247911f6cf22963b530cef169287f508ff29d159d0c83758134dd43bd5acd2113350690a46a02246bc05dca975bcc38325000aefb1c93c80e2f19c7 - languageName: node - linkType: hard - -"@backstage/core-components@npm:^0.13.0": - version: 0.13.0 - resolution: "@backstage/core-components@npm:0.13.0" - dependencies: - "@backstage/config": ^1.0.7 - "@backstage/core-plugin-api": ^1.5.1 - "@backstage/errors": ^1.1.5 - "@backstage/theme": ^0.2.19 - "@backstage/version-bridge": ^1.0.4 - "@date-io/core": ^1.3.13 - "@material-table/core": ^3.1.0 - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.61 - "@react-hookz/web": ^20.0.0 - "@types/react": ^16.13.1 || ^17.0.0 - "@types/react-sparklines": ^1.7.0 - "@types/react-text-truncate": ^0.14.0 - ansi-regex: ^6.0.1 - classnames: ^2.2.6 - d3-selection: ^3.0.0 - d3-shape: ^3.0.0 - d3-zoom: ^3.0.0 - dagre: ^0.8.5 - history: ^5.0.0 - immer: ^9.0.1 - linkify-react: 4.1.1 - linkifyjs: 4.1.1 - lodash: ^4.17.21 - pluralize: ^8.0.0 - prop-types: ^15.7.2 - qs: ^6.9.4 - rc-progress: 3.4.1 - react-helmet: 6.1.0 - react-hook-form: ^7.12.2 - react-markdown: ^8.0.0 - react-sparklines: ^1.7.0 - react-syntax-highlighter: ^15.4.5 - react-text-truncate: ^0.19.0 - react-use: ^17.3.2 - react-virtualized-auto-sizer: ^1.0.11 - react-window: ^1.8.6 - remark-gfm: ^3.0.1 - zen-observable: ^0.10.0 - zod: ^3.21.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 - react-dom: ^16.13.1 || ^17.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - checksum: 49c5301ff45c6f7516e78e80f46b25d2efb8d9ba510c7718f94c25b1f7d9b2869840db7ec896fbf9d083ceca8fa8cddf718a78eeb074993e95d474195f4bc9cd - languageName: node - linkType: hard - -"@backstage/core-components@workspace:^, @backstage/core-components@workspace:packages/core-components": +"@backstage/core-components@^0.13.0, @backstage/core-components@workspace:^, @backstage/core-components@workspace:packages/core-components": version: 0.0.0-use.local resolution: "@backstage/core-components@workspace:packages/core-components" dependencies: @@ -4266,6 +4163,56 @@ __metadata: languageName: unknown linkType: soft +"@backstage/core-components@npm:^0.12.3": + version: 0.12.5 + resolution: "@backstage/core-components@npm:0.12.5" + dependencies: + "@backstage/config": ^1.0.7 + "@backstage/core-plugin-api": ^1.5.0 + "@backstage/errors": ^1.1.5 + "@backstage/theme": ^0.2.18 + "@backstage/version-bridge": ^1.0.3 + "@material-table/core": ^3.1.0 + "@material-ui/core": ^4.12.2 + "@material-ui/icons": ^4.9.1 + "@material-ui/lab": 4.0.0-alpha.57 + "@react-hookz/web": ^20.0.0 + "@types/react-sparklines": ^1.7.0 + "@types/react-text-truncate": ^0.14.0 + ansi-regex: ^6.0.1 + classnames: ^2.2.6 + d3-selection: ^3.0.0 + d3-shape: ^3.0.0 + d3-zoom: ^3.0.0 + dagre: ^0.8.5 + history: ^5.0.0 + immer: ^9.0.1 + lodash: ^4.17.21 + pluralize: ^8.0.0 + prop-types: ^15.7.2 + qs: ^6.9.4 + rc-progress: 3.4.1 + react-helmet: 6.1.0 + react-hook-form: ^7.12.2 + react-markdown: ^8.0.0 + react-sparklines: ^1.7.0 + react-syntax-highlighter: ^15.4.5 + react-text-truncate: ^0.19.0 + react-use: ^17.3.2 + react-virtualized-auto-sizer: ^1.0.6 + react-window: ^1.8.6 + remark-gfm: ^3.0.1 + zen-observable: ^0.10.0 + zod: ~3.18.0 + peerDependencies: + "@types/react": ^16.13.1 || ^17.0.0 + react: ^16.13.1 || ^17.0.0 + react-dom: ^16.13.1 || ^17.0.0 + react-router-dom: 6.0.0-beta.0 || ^6.3.0 + checksum: 8308c1b90247911f6cf22963b530cef169287f508ff29d159d0c83758134dd43bd5acd2113350690a46a02246bc05dca975bcc38325000aefb1c93c80e2f19c7 + languageName: node + linkType: hard + "@backstage/core-plugin-api@^1.3.0, @backstage/core-plugin-api@^1.5.0, @backstage/core-plugin-api@^1.5.1, @backstage/core-plugin-api@workspace:^, @backstage/core-plugin-api@workspace:packages/core-plugin-api": version: 0.0.0-use.local resolution: "@backstage/core-plugin-api@workspace:packages/core-plugin-api" @@ -4395,28 +4342,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/integration-react@npm:^1.1.12": - version: 1.1.12 - resolution: "@backstage/integration-react@npm:1.1.12" - dependencies: - "@backstage/config": ^1.0.7 - "@backstage/core-components": ^0.13.0 - "@backstage/core-plugin-api": ^1.5.1 - "@backstage/integration": ^1.4.4 - "@backstage/theme": ^0.2.19 - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.61 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 - react-dom: ^16.13.1 || ^17.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - checksum: c7ae5754f074f3cee020a5dfca50deecaccd0f5a8510a1446bb1070d7b9b6e32a82564cff77b98ef63b19fde5a29aceaf4b8e8662dd1a3ed00c408c8ae06dc65 - languageName: node - linkType: hard - -"@backstage/integration-react@workspace:^, @backstage/integration-react@workspace:packages/integration-react": +"@backstage/integration-react@^1.1.12, @backstage/integration-react@workspace:^, @backstage/integration-react@workspace:packages/integration-react": version: 0.0.0-use.local resolution: "@backstage/integration-react@workspace:packages/integration-react" dependencies: @@ -4447,22 +4373,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/integration@npm:^1.4.4": - version: 1.4.4 - resolution: "@backstage/integration@npm:1.4.4" - dependencies: - "@backstage/config": ^1.0.7 - "@backstage/errors": ^1.1.5 - "@octokit/auth-app": ^4.0.0 - "@octokit/rest": ^19.0.3 - cross-fetch: ^3.1.5 - git-url-parse: ^13.0.0 - lodash: ^4.17.21 - luxon: ^3.0.0 - checksum: 715310efe55b3c2fb93f5197bc1422917822a15a7550aae9d84b257bb0a6cff2bfab9a44296a977a56651499fbecd0ef31f954f92a62cc94bfbc7319d9a48c04 - languageName: node - linkType: hard - "@backstage/integration@workspace:^, @backstage/integration@workspace:packages/integration": version: 0.0.0-use.local resolution: "@backstage/integration@workspace:packages/integration" @@ -5626,7 +5536,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-catalog-common@^1.0.10, @backstage/plugin-catalog-common@^1.0.13, @backstage/plugin-catalog-common@workspace:^, @backstage/plugin-catalog-common@workspace:plugins/catalog-common": +"@backstage/plugin-catalog-common@^1.0.10, @backstage/plugin-catalog-common@workspace:^, @backstage/plugin-catalog-common@workspace:plugins/catalog-common": version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-common@workspace:plugins/catalog-common" dependencies: @@ -5764,43 +5674,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-catalog-react@npm:^1.2.4, @backstage/plugin-catalog-react@npm:^1.5.0": - version: 1.5.0 - resolution: "@backstage/plugin-catalog-react@npm:1.5.0" - dependencies: - "@backstage/catalog-client": ^1.4.1 - "@backstage/catalog-model": ^1.3.0 - "@backstage/core-components": ^0.13.0 - "@backstage/core-plugin-api": ^1.5.1 - "@backstage/errors": ^1.1.5 - "@backstage/integration": ^1.4.4 - "@backstage/plugin-catalog-common": ^1.0.13 - "@backstage/plugin-permission-common": ^0.7.5 - "@backstage/plugin-permission-react": ^0.4.12 - "@backstage/theme": ^0.2.19 - "@backstage/types": ^1.0.2 - "@backstage/version-bridge": ^1.0.4 - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.61 - "@types/react": ^16.13.1 || ^17.0.0 - classnames: ^2.2.6 - jwt-decode: ^3.1.0 - lodash: ^4.17.21 - material-ui-popup-state: ^1.9.3 - qs: ^6.9.4 - react-use: ^17.2.4 - yaml: ^2.0.0 - zen-observable: ^0.10.0 - peerDependencies: - react: ^16.13.1 || ^17.0.0 - react-dom: ^16.13.1 || ^17.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - checksum: 0ffa1a9ecf142df389e2ecdbda1fae1718d4b65782654d99cd1de562520aae6ecc4677c15aff50a10fee9d9e89a35d2978e53da8f5f7129deef02c7044eb6e46 - languageName: node - linkType: hard - -"@backstage/plugin-catalog-react@workspace:^, @backstage/plugin-catalog-react@workspace:plugins/catalog-react": +"@backstage/plugin-catalog-react@^1.2.4, @backstage/plugin-catalog-react@^1.5.0, @backstage/plugin-catalog-react@workspace:^, @backstage/plugin-catalog-react@workspace:plugins/catalog-react": version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-react@workspace:plugins/catalog-react" dependencies: @@ -7162,39 +7036,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-home@npm:^0.5.1": - version: 0.5.1 - resolution: "@backstage/plugin-home@npm:0.5.1" - dependencies: - "@backstage/catalog-model": ^1.3.0 - "@backstage/config": ^1.0.7 - "@backstage/core-components": ^0.13.0 - "@backstage/core-plugin-api": ^1.5.1 - "@backstage/plugin-catalog-react": ^1.5.0 - "@backstage/theme": ^0.2.19 - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.61 - "@rjsf/core-v5": "npm:@rjsf/core@5.6.0" - "@rjsf/material-ui": 5.6.0 - "@rjsf/utils": 5.6.0 - "@rjsf/validator-ajv8": 5.6.0 - "@types/react": ^16.13.1 || ^17.0.0 - lodash: ^4.17.21 - object-hash: ^3.0.0 - react-grid-layout: ^1.3.4 - react-resizable: ^3.0.4 - react-use: ^17.2.4 - zod: ~3.21.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 - react-dom: ^16.13.1 || ^17.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - checksum: 0470e0d4848818c59fdf5c3765b769c22bf2b47e26b0ed0c80398baac6a8e1ac703e94152dc20498bfda790aec18a2af65605fcd8c6eb2e7ba7b85eb6ce80b69 - languageName: node - linkType: hard - -"@backstage/plugin-home@workspace:^, @backstage/plugin-home@workspace:plugins/home": +"@backstage/plugin-home@^0.5.1, @backstage/plugin-home@workspace:^, @backstage/plugin-home@workspace:plugins/home": version: 0.0.0-use.local resolution: "@backstage/plugin-home@workspace:plugins/home" dependencies: @@ -7957,7 +7799,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-permission-common@^0.7.5, @backstage/plugin-permission-common@workspace:^, @backstage/plugin-permission-common@workspace:plugins/permission-common": +"@backstage/plugin-permission-common@workspace:^, @backstage/plugin-permission-common@workspace:plugins/permission-common": version: 0.0.0-use.local resolution: "@backstage/plugin-permission-common@workspace:plugins/permission-common" dependencies: @@ -7995,7 +7837,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-permission-react@^0.4.12, @backstage/plugin-permission-react@workspace:^, @backstage/plugin-permission-react@workspace:plugins/permission-react": +"@backstage/plugin-permission-react@workspace:^, @backstage/plugin-permission-react@workspace:plugins/permission-react": version: 0.0.0-use.local resolution: "@backstage/plugin-permission-react@workspace:plugins/permission-react" dependencies: @@ -9768,7 +9610,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/version-bridge@^1.0.3, @backstage/version-bridge@^1.0.4, @backstage/version-bridge@workspace:^, @backstage/version-bridge@workspace:packages/version-bridge": +"@backstage/version-bridge@^1.0.3, @backstage/version-bridge@workspace:^, @backstage/version-bridge@workspace:packages/version-bridge": version: 0.0.0-use.local resolution: "@backstage/version-bridge@workspace:packages/version-bridge" dependencies: From ee4e668f0df5b25f076917eb5ebc46424a564f08 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Tue, 16 May 2023 12:43:10 +0200 Subject: [PATCH 050/213] config-loader: avoid setTimeout in file watching tests Signed-off-by: Patrik Oldsberg --- .../src/sources/FileConfigSource.test.ts | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/packages/config-loader/src/sources/FileConfigSource.test.ts b/packages/config-loader/src/sources/FileConfigSource.test.ts index c6980006c0..6479fb77c0 100644 --- a/packages/config-loader/src/sources/FileConfigSource.test.ts +++ b/packages/config-loader/src/sources/FileConfigSource.test.ts @@ -64,9 +64,10 @@ describe('FileConfigSource', () => { const source = FileConfigSource.create({ path: tmp.resolve('a.yaml') }); - setTimeout(() => { - tmp.write('a.yaml', 'a: 2'); - }, 10); + source + .readConfigData() + .next() + .then(() => tmp.write('a.yaml', 'a: 2')); await expect(readN(source, 2)).resolves.toEqual([ [{ data: { a: 1 }, context: 'a.yaml', path: tmp.resolve('a.yaml') }], @@ -130,9 +131,10 @@ describe('FileConfigSource', () => { substitutionFunc: async name => (name === 'MY_VALUE' ? '6' : '7'), }); - setTimeout(() => { - tmp.write('x.yaml', '${MY_OTHER_VALUE}'); - }, 10); + source + .readConfigData() + .next() + .then(() => tmp.write('x.yaml', '${MY_OTHER_VALUE}')); await expect(readN(source, 2)).resolves.toEqual([ [{ data: { a: '6' }, context: 'a.yaml', path: tmp.resolve('a.yaml') }], @@ -150,9 +152,10 @@ describe('FileConfigSource', () => { path: tmp.resolve('a.yaml'), }); - setTimeout(() => { - tmp.write('x.txt', '9'); - }, 10); + source + .readConfigData() + .next() + .then(() => tmp.write('x.txt', '9')); await expect(readN(source, 2)).resolves.toEqual([ [{ data: { a: '8' }, context: 'a.yaml', path: tmp.resolve('a.yaml') }], From 29820706548105dad0c089256b361a6f8b3b9aed Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Tue, 16 May 2023 13:10:33 +0200 Subject: [PATCH 051/213] config-loader: back to setTimeout with bigger margin Signed-off-by: Patrik Oldsberg --- .../src/sources/FileConfigSource.test.ts | 21 ++++++++----------- 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/packages/config-loader/src/sources/FileConfigSource.test.ts b/packages/config-loader/src/sources/FileConfigSource.test.ts index 6479fb77c0..61cdeed272 100644 --- a/packages/config-loader/src/sources/FileConfigSource.test.ts +++ b/packages/config-loader/src/sources/FileConfigSource.test.ts @@ -64,10 +64,9 @@ describe('FileConfigSource', () => { const source = FileConfigSource.create({ path: tmp.resolve('a.yaml') }); - source - .readConfigData() - .next() - .then(() => tmp.write('a.yaml', 'a: 2')); + setTimeout(() => { + tmp.write('a.yaml', 'a: 2'); + }, 100); await expect(readN(source, 2)).resolves.toEqual([ [{ data: { a: 1 }, context: 'a.yaml', path: tmp.resolve('a.yaml') }], @@ -131,10 +130,9 @@ describe('FileConfigSource', () => { substitutionFunc: async name => (name === 'MY_VALUE' ? '6' : '7'), }); - source - .readConfigData() - .next() - .then(() => tmp.write('x.yaml', '${MY_OTHER_VALUE}')); + setTimeout(() => { + tmp.write('x.yaml', '${MY_OTHER_VALUE}'); + }, 100); await expect(readN(source, 2)).resolves.toEqual([ [{ data: { a: '6' }, context: 'a.yaml', path: tmp.resolve('a.yaml') }], @@ -152,10 +150,9 @@ describe('FileConfigSource', () => { path: tmp.resolve('a.yaml'), }); - source - .readConfigData() - .next() - .then(() => tmp.write('x.txt', '9')); + setTimeout(() => { + tmp.write('x.txt', '9'); + }, 100); await expect(readN(source, 2)).resolves.toEqual([ [{ data: { a: '8' }, context: 'a.yaml', path: tmp.resolve('a.yaml') }], From d689fe34e37dbd5a53d2825c3d311fd3307d346b Mon Sep 17 00:00:00 2001 From: Samuel Date: Thu, 11 May 2023 18:39:07 +0100 Subject: [PATCH 052/213] docs: Highlight error handling instructions with a note Signed-off-by: Samuel --- docs/getting-started/configuration.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/getting-started/configuration.md b/docs/getting-started/configuration.md index ddf50c64e6..87995746d8 100644 --- a/docs/getting-started/configuration.md +++ b/docs/getting-started/configuration.md @@ -242,7 +242,8 @@ integrations: - host: github.com token: ${GITHUB_TOKEN} # this will use the environment variable GITHUB_TOKEN ``` -> If you encounter the error `No token available for host: github.com, with owner , and repo from-backstage`, try resolving it by restarting Backstage. First, stop the running instance by pressing `Control-C` in the terminal. Then, restart it by running the command `yarn dev`. Once Backstage is up and running, click the **START OVER** button." + +> Note: If you've updated the configuration for your integration, it's likely that the backend will need a restart to apply these changes. To do this, stop the running instance in your terminal with `Control-C`, then start it again with `yarn dev`. Once the backend has restarted, retry the operation. Some helpful links, for if you want to learn more about: From 4c86ec146602a27d54013b71ea41890c99073fb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Tue, 16 May 2023 22:02:57 +0200 Subject: [PATCH 053/213] add release to microsite MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- .github/vale/Vocab/Backstage/accept.txt | 3 + docs/releases/v1.14.0.md | 80 +++++++++++++++++++++++++ microsite/docusaurus.config.js | 2 +- microsite/sidebars.json | 1 + 4 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 docs/releases/v1.14.0.md diff --git a/.github/vale/Vocab/Backstage/accept.txt b/.github/vale/Vocab/Backstage/accept.txt index 83f05e390d..68fbdabb00 100644 --- a/.github/vale/Vocab/Backstage/accept.txt +++ b/.github/vale/Vocab/Backstage/accept.txt @@ -316,6 +316,7 @@ scaffolded scaffolder Scaffolder scrollbar +sdks seb semlas semver @@ -343,6 +344,8 @@ stdout storable stringified stringify +subcommand +subcommands subcomponent subcomponents subfolder diff --git a/docs/releases/v1.14.0.md b/docs/releases/v1.14.0.md new file mode 100644 index 0000000000..2c565e2519 --- /dev/null +++ b/docs/releases/v1.14.0.md @@ -0,0 +1,80 @@ +--- +id: v1.14.0 +title: v1.14.0 +description: Backstage Release v1.14.0 +--- + +These are the release notes for the v1.14.0 release of [Backstage](https://backstage.io/). + +A huge thanks to the whole team of maintainers and contributors as well as the amazing Backstage Community for their hard work in getting this release developed and done. + +## Highlights + +This release has an important security fix, along with a lot of squashed bugs and exciting additions! Enjoy. + +### **BREAKING**: Tweaks to the OpenAPI tooling + +There’s been further work made on the OpenAPI tooling! One of the changes is that the commands for this feature are grouped under a `schema openapi` subcommand. This lets us structure things a bit better for the future. The generated file now also has a `.generated.ts` extension, to more easily be able to keep it apart in linting and similar. + +### **BREAKING**: Kubernetes plugin log viewer and tweaks + +There’s been some awesome additions made to the Kubernetes plugin, including the ability to show pod logs! To support this, some breaking changes were made in some of its interfaces. Check out [#17120](https://github.com/backstage/backstage/pull/17120) for some details of what changed. + +### **DEPRECATION**: React 16 + +We are preparing for React 18, and as part of doing that, we are now officially deprecating support for React 16. Nothing will break for you just yet, but if you are still on React 16 your `backstage-cli` commands will start to show helpful warning messages guiding you to bump to version 17 when you can. + +See [#17752](https://github.com/backstage/backstage/pull/17752) for some details about this, and links to the relevant issues. + +### New plugin: DevTools + +This plugin is focused on integrators rather than end users. It allows you to see useful information about your Backstage installation, such as what operating system and NodeJS version it’s running on, what Backstage and individual package versions you have, and more! This may serve as a foundation for adding even more ops focused features in the future. + +Contributed by [@awanlin](https://github.com/awanlin) in [#17393](https://github.com/backstage/backstage/pull/17393) + +### Migration to AWS-SDK version 3 + +There’s been work done under the hood to migrate AWS features over to using v3 of their client SDKs. While this should mostly go below the radar and ultimately work the same as it did before, do reach out to us if you encounter any problems that might be related to this migration. + +There’s actually a minor interface breakage as part of this, where `AwsIamKubernetesAuthTranslator` has some methods removed, but that’s one which may not have a lot of use outside of the package. + +Contributed by [@aochsner](https://github.com/aochsner), see PRs linked at the bottom of issue [#16470](https://github.com/backstage/backstage/issues/16470) + +### Persistent session store for the auth backend + +For auth providers that use session storage, those sessions are now persisted in the auth backend database, instead of in local memory. This should make session handling work better across scaled auth backend instances. + +### Markdown Output Support for Software Templates + +You can now output Markdown from the Software Template runs which can provide more data to the end user after a job has completed in the outputs section of `scaffolder/next` + +Contributed by [@voximity](https://github.com/voximity) in [#17641](https://github.com/backstage/backstage/pull/17641) + +### Refactored Configuration Loading + +The configuration loading system has been refactored to make it easier to extend the system with additional sources of configuration. See the [initial PR](https://github.com/backstage/backstage/pull/17209) and the [`@backstage/config-loader` changelog](https://github.com/backstage/backstage/blob/master/packages/config-loader/CHANGELOG.md#130) for more details. + +### Catalog database performance tweaks + +We found some hotspots in the catalog database operations, and streamlined them. Hopefully this should be noticeable in the form of slightly lower CPU and IOPS usage. + +## Security Fixes + +A [security flaw in the `vm2` package](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-32314) used by the Scaffolder plugin was patched by our automated security processes in [#17810](https://github.com/backstage/backstage/pull/17810). The fixed version of `vm2` was already covered by the required version range of the Scaffolder plugin, so adopters are able to address this vulnerability separately without upgrading Backstage itself, as part of their regular security processes. + +## Upgrade path + +We recommend that you keep your Backstage project up to date with this latest release. For more guidance on how to upgrade, check out the documentation for [keeping Backstage updated](https://backstage.io/docs/getting-started/keeping-backstage-updated). + +## Links and References + +Below you can find a list of links and references to help you learn about and start using this new release. + +- [Backstage official website](https://backstage.io/), [documentation](https://backstage.io/docs/), and [getting started guide](https://backstage.io/docs/getting-started/) +- [GitHub repository](https://github.com/backstage/backstage) +- Backstage's [versioning and support policy](https://backstage.io/docs/overview/versioning-policy) +- [Community Discord](https://discord.gg/backstage-687207715902193673) for discussions and support +- [Changelog](https://github.com/backstage/backstage/tree/master/docs/releases/v1.14.0-changelog.md) +- Backstage [Demos](https://backstage.io/demos), [Blog](https://backstage.io/blog), [Roadmap](https://backstage.io/docs/overview/roadmap) and [Plugins](https://backstage.io/plugins) + +Sign up for our [newsletter](https://mailchi.mp/spotify/backstage-community) if you want to be informed about what is happening in the world of Backstage. diff --git a/microsite/docusaurus.config.js b/microsite/docusaurus.config.js index d0f6bb277f..9985796e3f 100644 --- a/microsite/docusaurus.config.js +++ b/microsite/docusaurus.config.js @@ -173,7 +173,7 @@ module.exports = { position: 'left', }, { - to: 'docs/releases/v1.12.0', + to: 'docs/releases/v1.14.0', label: 'Releases', position: 'left', }, diff --git a/microsite/sidebars.json b/microsite/sidebars.json index 1515c483b9..e75683f803 100644 --- a/microsite/sidebars.json +++ b/microsite/sidebars.json @@ -1,6 +1,7 @@ { "releases": { "Release Notes": [ + "releases/v1.14.0", "releases/v1.13.0", "releases/v1.12.0", "releases/v1.11.0", From 8b45bc7c122d6ec931d592373896518438864ffb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Tue, 16 May 2023 22:46:02 +0200 Subject: [PATCH 054/213] adjust change logs to show enableExperimentalRedirectFlow at root MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- docs/releases/v1.13.0-changelog.md | 10 +++++----- docs/releases/v1.13.0-next.0-changelog.md | 10 +++++----- docs/releases/v1.13.0.md | 2 +- packages/core-app-api/config.d.ts | 4 ++-- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/docs/releases/v1.13.0-changelog.md b/docs/releases/v1.13.0-changelog.md index 823ff337bc..506800eb38 100644 --- a/docs/releases/v1.13.0-changelog.md +++ b/docs/releases/v1.13.0-changelog.md @@ -4,7 +4,7 @@ ### Minor Changes -- 7908d72e033: Introduce a new global config parameter, `auth.enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window. +- 7908d72e033: Introduce a new global config parameter, `enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window. ### Patch Changes @@ -61,7 +61,7 @@ ### Minor Changes -- 7908d72e033: Introduce a new global config parameter, `auth.enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window. +- 7908d72e033: Introduce a new global config parameter, `enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window. - c15e0cedbe1: The `AuthConnector` interface now supports specifying a set of scopes when refreshing a session. The `DefaultAuthConnector` implementation passes the `scope` query parameter to the auth-backend plugin appropriately. The @@ -106,7 +106,7 @@ - 67140d9f96f: Upgrade `react-virtualized-auto-sizer´ to version `^1.0.11\` - 6e0b71493df: Switched internal declaration of `DependencyGraphTypes` to use `namespace`. - c8779cc1d09: Updated `LogLine` component, which is used by the `LogViewer`, to turn URLs into clickable links. This feature is on by default -- 7908d72e033: Introduce a new global config parameter, `auth.enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window. +- 7908d72e033: Introduce a new global config parameter, `enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window. - 1e4f5e91b8e: Bump `zod` and `zod-to-json-schema` dependencies. - 29ba8267d69: Updated dependency `@material-ui/lab` to `4.0.0-alpha.61`. - 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) @@ -170,7 +170,7 @@ ### Minor Changes -- 7908d72e033: Introduce a new global config parameter, `auth.enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window. +- 7908d72e033: Introduce a new global config parameter, `enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window. ### Patch Changes @@ -1245,7 +1245,7 @@ - d8f774c30df: Enforce the secret visibility of certificates and client secrets in the auth backend. Also, document all known options for each auth plugin. -- 7908d72e033: Introduce a new global config parameter, `auth.enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window. +- 7908d72e033: Introduce a new global config parameter, `enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window. - 475abd1dc3f: The `microsoft` (i.e. Azure) auth provider now supports negotiating tokens for Azure resources besides Microsoft Graph (e.g. AKS, Virtual Machines, Machine diff --git a/docs/releases/v1.13.0-next.0-changelog.md b/docs/releases/v1.13.0-next.0-changelog.md index 3075d80f61..7de0a370f9 100644 --- a/docs/releases/v1.13.0-next.0-changelog.md +++ b/docs/releases/v1.13.0-next.0-changelog.md @@ -4,7 +4,7 @@ ### Minor Changes -- 7908d72e033: Introduce a new global config parameter, `auth.enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window. +- 7908d72e033: Introduce a new global config parameter, `enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window. ### Patch Changes @@ -19,7 +19,7 @@ ### Minor Changes -- 7908d72e033: Introduce a new global config parameter, `auth.enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window. +- 7908d72e033: Introduce a new global config parameter, `enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window. ### Patch Changes @@ -33,7 +33,7 @@ ### Minor Changes -- 7908d72e033: Introduce a new global config parameter, `auth.enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window. +- 7908d72e033: Introduce a new global config parameter, `enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window. ### Patch Changes @@ -336,7 +336,7 @@ ### Patch Changes -- 7908d72e033: Introduce a new global config parameter, `auth.enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window. +- 7908d72e033: Introduce a new global config parameter, `enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window. - 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) - 7245e744ab1: Fixed the font color on `BackstageHeaderLabel` to respect the active page theme. - Updated dependencies @@ -530,7 +530,7 @@ ### Patch Changes - d8f774c30df: Enforce the secret visibility of certificates and client secrets in the auth backend. Also, document all known options for each auth plugin. -- 7908d72e033: Introduce a new global config parameter, `auth.enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window. +- 7908d72e033: Introduce a new global config parameter, `enableExperimentalRedirectFlow`. When enabled, auth will happen with an in-window redirect flow rather than through a popup window. - Updated dependencies - @backstage/backend-common@0.18.4-next.0 - @backstage/config@1.0.7 diff --git a/docs/releases/v1.13.0.md b/docs/releases/v1.13.0.md index 99253ac3d2..c8803453d4 100644 --- a/docs/releases/v1.13.0.md +++ b/docs/releases/v1.13.0.md @@ -86,7 +86,7 @@ Contributed by [@sennyeya](https://github.com/sennyeya) in [#15667](https://gith ### Experimental inline auth flows -There’s new support for running auth flows inline in the current page instead of in a separate popup window, enabled via the `auth.enableExperimentalRedirectFlow` app-config parameter. This will allow the use of some providers that do not support popup flows. It’s still an experimental feature, but do try it out if this applies to you! +There’s new support for running auth flows inline in the current page instead of in a separate popup window, enabled via the `enableExperimentalRedirectFlow` app-config parameter. This will allow the use of some providers that do not support popup flows. It’s still an experimental feature, but do try it out if this applies to you! Contributed by [@headphonejames](https://github.com/headphonejames) in [#15841](https://github.com/backstage/backstage/pull/15841) diff --git a/packages/core-app-api/config.d.ts b/packages/core-app-api/config.d.ts index 2de1d96114..e8cc879c90 100644 --- a/packages/core-app-api/config.d.ts +++ b/packages/core-app-api/config.d.ts @@ -117,8 +117,8 @@ export interface Config { }; /** - $ Enable redirect authentication flow type, instead of a popup for authentication - * default value: 'false' + * Enable redirect authentication flow type, instead of a popup for authentication. + * @defaultValue false * @visibility frontend */ enableExperimentalRedirectFlow?: boolean; From 25c8b0311dc3f76dbbe521a697affc103ba49067 Mon Sep 17 00:00:00 2001 From: Jen Evans Date: Wed, 10 May 2023 09:21:09 -0700 Subject: [PATCH 055/213] Reduce orphan cleanup logging from info to debug Signed-off-by: Jen Evans Signed-off-by: Christopher Diaz --- .changeset/friendly-frogs-drop.md | 5 +++++ .../src/processing/DefaultCatalogProcessingEngine.ts | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 .changeset/friendly-frogs-drop.md diff --git a/.changeset/friendly-frogs-drop.md b/.changeset/friendly-frogs-drop.md new file mode 100644 index 0000000000..a338bb3a7c --- /dev/null +++ b/.changeset/friendly-frogs-drop.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend': patch +--- + +Change orphan cleanup task to debug log from info. diff --git a/plugins/catalog-backend/src/processing/DefaultCatalogProcessingEngine.ts b/plugins/catalog-backend/src/processing/DefaultCatalogProcessingEngine.ts index e89d53f79f..c24698f7e9 100644 --- a/plugins/catalog-backend/src/processing/DefaultCatalogProcessingEngine.ts +++ b/plugins/catalog-backend/src/processing/DefaultCatalogProcessingEngine.ts @@ -317,7 +317,7 @@ export class DefaultCatalogProcessingEngine implements CatalogProcessingEngine { try { await this.processingDatabase.transaction(async tx => { const n = await this.processingDatabase.deleteOrphanedEntities(tx); - this.logger.info(`Deleted ${n} orphaned entities`); + this.logger.debug(`Deleted ${n} orphaned entities`); }); } catch (error) { this.logger.warn(`Failed to delete orphaned entities`, error); From 65b5b00c179b1cf2bdce5189c52e8ce1a027eb92 Mon Sep 17 00:00:00 2001 From: Jen Evans Date: Fri, 12 May 2023 10:51:38 -0700 Subject: [PATCH 056/213] Orphan cleanup - only log if entities were deleted Signed-off-by: Jen Evans Signed-off-by: Christopher Diaz --- .changeset/friendly-frogs-drop.md | 2 +- .../src/processing/DefaultCatalogProcessingEngine.ts | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.changeset/friendly-frogs-drop.md b/.changeset/friendly-frogs-drop.md index a338bb3a7c..682f1dbabb 100644 --- a/.changeset/friendly-frogs-drop.md +++ b/.changeset/friendly-frogs-drop.md @@ -2,4 +2,4 @@ '@backstage/plugin-catalog-backend': patch --- -Change orphan cleanup task to debug log from info. +Change orphan cleanup task to only log a message if it deleted entities. diff --git a/plugins/catalog-backend/src/processing/DefaultCatalogProcessingEngine.ts b/plugins/catalog-backend/src/processing/DefaultCatalogProcessingEngine.ts index c24698f7e9..8e2f8b2f6f 100644 --- a/plugins/catalog-backend/src/processing/DefaultCatalogProcessingEngine.ts +++ b/plugins/catalog-backend/src/processing/DefaultCatalogProcessingEngine.ts @@ -317,7 +317,9 @@ export class DefaultCatalogProcessingEngine implements CatalogProcessingEngine { try { await this.processingDatabase.transaction(async tx => { const n = await this.processingDatabase.deleteOrphanedEntities(tx); - this.logger.debug(`Deleted ${n} orphaned entities`); + if (n > 0) { + this.logger.info(`Deleted ${n} orphaned entities`); + } }); } catch (error) { this.logger.warn(`Failed to delete orphaned entities`, error); From 0c6715849634af1b51f6aaaf37271c598525bb8f Mon Sep 17 00:00:00 2001 From: Tim Soslow Date: Mon, 1 May 2023 12:39:54 -0500 Subject: [PATCH 057/213] Configuration for action column in Jenkins table Signed-off-by: Tim Soslow Signed-off-by: Christopher Diaz --- .changeset/real-baboons-vanish.md | 5 +++ plugins/jenkins/README.md | 18 +++++++++++ plugins/jenkins/api-report.md | 2 +- .../src/assets/customize_action_view.png | Bin 0 -> 52575 bytes .../BuildsPage/lib/CITable/CITable.tsx | 18 +++++++++++ plugins/jenkins/src/options.ts | 29 ++++++++++++++++++ plugins/jenkins/src/plugin.ts | 9 ++++++ 7 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 .changeset/real-baboons-vanish.md create mode 100644 plugins/jenkins/src/assets/customize_action_view.png create mode 100644 plugins/jenkins/src/options.ts diff --git a/.changeset/real-baboons-vanish.md b/.changeset/real-baboons-vanish.md new file mode 100644 index 0000000000..93c30d8389 --- /dev/null +++ b/.changeset/real-baboons-vanish.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-jenkins': minor +--- + +Added configuration for the action column in Jenkins CI/CD table. It can be set to rebuild, view, or replay. diff --git a/plugins/jenkins/README.md b/plugins/jenkins/README.md index 2a0ec451c8..12c6a197da 100644 --- a/plugins/jenkins/README.md +++ b/plugins/jenkins/README.md @@ -86,6 +86,24 @@ spec: 8. Click the component in the catalog. You should now see Jenkins builds, and a last build result for your master build. +## Customize Action + +You can customize the action in the CI/CD table. + +| Action | Description | +| ----------------- | ----------------------- | +| rebuild (default) | Run new build with API | +| view | link to view build page | +| replay | link to start replay | + +```yaml +jenkinsPlugin.__experimentalReconfigure({ + tableAction: 'view', +}); +``` + +Customized action - view + ## Features - View all runs inside a folder diff --git a/plugins/jenkins/api-report.md b/plugins/jenkins/api-report.md index a2ae16988b..bcba48e4b2 100644 --- a/plugins/jenkins/api-report.md +++ b/plugins/jenkins/api-report.md @@ -98,7 +98,7 @@ const jenkinsPlugin: BackstagePlugin< entityContent: RouteRef; }, {}, - {} + JenkinsInputPluginOptions >; export { jenkinsPlugin }; export { jenkinsPlugin as plugin }; diff --git a/plugins/jenkins/src/assets/customize_action_view.png b/plugins/jenkins/src/assets/customize_action_view.png new file mode 100644 index 0000000000000000000000000000000000000000..8be43c5971e6f764abd7d0c010dd967784271828 GIT binary patch literal 52575 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 { if (count !== 0) { @@ -202,6 +204,22 @@ const generatedColumns: TableColumn[] = [ } }; + const { tableAction } = useJenkinsPluginOptions(); + + if (tableAction === 'view') { + return row.lastBuild?.url ? ( + + + + ) : null; + } else if (tableAction === 'replay') { + return row.lastBuild?.url ? ( + + + + ) : null; + } + return ( <> diff --git a/plugins/jenkins/src/options.ts b/plugins/jenkins/src/options.ts new file mode 100644 index 0000000000..f78e6a75e9 --- /dev/null +++ b/plugins/jenkins/src/options.ts @@ -0,0 +1,29 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { usePluginOptions } from '@backstage/core-plugin-api/alpha'; + +export type JenkinsPluginOptions = { + tableAction: string; +}; + +/** @ignore */ +export type JenkinsInputPluginOptions = { + tableAction: string; +}; + +export const useJenkinsPluginOptions = () => + usePluginOptions(); diff --git a/plugins/jenkins/src/plugin.ts b/plugins/jenkins/src/plugin.ts index 7dbb6bfde1..ddef0a7dfd 100644 --- a/plugins/jenkins/src/plugin.ts +++ b/plugins/jenkins/src/plugin.ts @@ -25,6 +25,7 @@ import { identityApiRef, } from '@backstage/core-plugin-api'; import { JenkinsClient, jenkinsApiRef } from './api'; +import { JenkinsInputPluginOptions, JenkinsPluginOptions } from './options'; /** @public */ export const rootRouteRef = createRouteRef({ @@ -52,6 +53,14 @@ export const jenkinsPlugin = createPlugin({ routes: { entityContent: rootRouteRef, }, + __experimentalConfigure( + options?: JenkinsInputPluginOptions, + ): JenkinsPluginOptions { + const defaultOptions = { + tableAction: 'rebuild', + }; + return { ...defaultOptions, ...options }; + }, }); /** @public */ From cc2a06d745110249f7195dee3eede58ae7a787fd Mon Sep 17 00:00:00 2001 From: Tim Soslow Date: Thu, 4 May 2023 17:27:46 -0500 Subject: [PATCH 058/213] Update action column with both view & replay icons Signed-off-by: Tim Soslow Signed-off-by: Christopher Diaz --- .changeset/real-baboons-vanish.md | 2 +- plugins/jenkins/README.md | 18 ---- plugins/jenkins/api-report.md | 2 +- .../src/assets/customize_action_view.png | Bin 52575 -> 0 bytes plugins/jenkins/src/assets/folder-results.png | Bin 61908 -> 58657 bytes .../BuildsPage/lib/CITable/CITable.tsx | 79 ++++-------------- plugins/jenkins/src/options.ts | 29 ------- plugins/jenkins/src/plugin.ts | 9 -- 8 files changed, 16 insertions(+), 123 deletions(-) delete mode 100644 plugins/jenkins/src/assets/customize_action_view.png delete mode 100644 plugins/jenkins/src/options.ts diff --git a/.changeset/real-baboons-vanish.md b/.changeset/real-baboons-vanish.md index 93c30d8389..9c4a19cd49 100644 --- a/.changeset/real-baboons-vanish.md +++ b/.changeset/real-baboons-vanish.md @@ -2,4 +2,4 @@ '@backstage/plugin-jenkins': minor --- -Added configuration for the action column in Jenkins CI/CD table. It can be set to rebuild, view, or replay. +Updated action column in Jenkins CI/CD table to include links to view and replay. The API based rebuild action was replaced because it does not work for Jenkins workflows that have parameters. diff --git a/plugins/jenkins/README.md b/plugins/jenkins/README.md index 12c6a197da..2a0ec451c8 100644 --- a/plugins/jenkins/README.md +++ b/plugins/jenkins/README.md @@ -86,24 +86,6 @@ spec: 8. Click the component in the catalog. You should now see Jenkins builds, and a last build result for your master build. -## Customize Action - -You can customize the action in the CI/CD table. - -| Action | Description | -| ----------------- | ----------------------- | -| rebuild (default) | Run new build with API | -| view | link to view build page | -| replay | link to start replay | - -```yaml -jenkinsPlugin.__experimentalReconfigure({ - tableAction: 'view', -}); -``` - -Customized action - view - ## Features - View all runs inside a folder diff --git a/plugins/jenkins/api-report.md b/plugins/jenkins/api-report.md index bcba48e4b2..a2ae16988b 100644 --- a/plugins/jenkins/api-report.md +++ b/plugins/jenkins/api-report.md @@ -98,7 +98,7 @@ const jenkinsPlugin: BackstagePlugin< entityContent: RouteRef; }, {}, - JenkinsInputPluginOptions + {} >; export { jenkinsPlugin }; export { jenkinsPlugin as plugin }; diff --git a/plugins/jenkins/src/assets/customize_action_view.png b/plugins/jenkins/src/assets/customize_action_view.png deleted file mode 100644 index 8be43c5971e6f764abd7d0c010dd967784271828..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52575 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

G%Gf7bS0P$yaBcGYKD$3fm^*iFx?)WFG@#@{`o4 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 z z_ptauyWCZL>OYGJl}hape%Rzse-e}N?#X&3M}V7X13CK5D~J4-%;VhMJTz$SUs!#) zV-a{28M@ou+uUfJ5H7TGeqi{w?keqLB4AR?zHr3#rn9pr%kfpH3{hhUGyMLw(mKtGC@7Ju6aP~t$m3Jr1O-GA{MaYVu3khk(Vi^ei$YrQi2 z($2>dukZSY-A@h$mfe+)^mzUG! z-x!By+=SM|pD*pChrvy76YNDG=V42JC+#eWfBy&#G*Z|$1hkg+zhs(uGoF%VBeTDxLiH&#%kR^_5R0Gga*8HOaGE)0;B2c z-Iux6b>%P9RFjbP|I~ji?O^L`+T(fO;Ns8maz4aSq%?yg9cRpBcOV^Iuz^6?GiaT) z6~0?Y>0MA5H*H6WbQYQfAzXfD{9*3$i`8Ot%g=8l{OZ_FBrw=_inKUduZQQ;g_1%N zbSxwF%Oix`Yi_8taR`Vu7GB49&pt1b^i#*S&r8rD)QxV>Yl{~Cq_9Dxv7PhdjpB23 zdze4NEK!lGkN8Y9S}SY&AJ!ii8>#_{*XjM895f#1ff!oeIN$m>=PEMpqFUA12lXOg zq7G-@Q1NWrRG%&n*}wE=fzx#qPr=V2JfSJc8hYC}12@(ElcU^!B)1W_3r}s_*juS{ zE9>oO^QFTvLzvkrO=?9%%`V&<#8JYH0Ll5+G2%Vt3RoHnXoBvx;^-gY#E)U--ajzw zQa&K?P!RYUoUQ#P6N`ASRcTCM*G^Jw^dg$$r~{s1;|(|HT*J-V)i8N|-rIX4znJ7s zd1;fVu17k1Y{=IAXE%6srQ8@h%BW=U*%~S&(DSP?gT=@uzKVwY%u! zhIjjIg+(XCZJMG%>IF#;(M(^Sm+lqzox#7%nSL|c&7F-#DNkg06b2)y=3dU0pYcN+ zzUbkq{RXd4P7AN0Y4jN0st)Ffx6*n^QYxi&3&pq9a?shO27ZMsT z?%Z`B>{o~G7j@DfSdVK^dtIbYUE>fX78h$s4pbC9np<6US{CSHy563e4VE43l&sdG zOCmpsUDO>C4bu*B5{+aN0PR9PtrE3u$ks&K4f!`w-9dAG8f@BeP-w3VSkHQziN2*d7sP@@D(@- zQ6XjLncaCOt+De5#KX7qZWB%0#cW?Q)8h@8pG=G7c7M!$K`s^Bt)rlzQ1pquB&$@T zdS5|x9`nNoBW*2ZOZuz3qlzo-gRhwro3%E0jEF}%*_HBSv3pl?FnQ0>9zWKKn4bzS;J7=*V$k_{^6?Cu``6A8JP~1D zj7Q!E*D98@Bo>QP>%r>7HeS{=Tuvt9itFaJvC zpOY??{rvqs*^w5;#_YjY-7$CP>PN@Mu*#Sozvk|GbhkB}MIz>XaeC^0eM-A%D3`{6 zc6$2T{NK0J)Z8E5V>A{N{PjUZzvMh!YI|1o8`#`kJ~JyT_}{VElp&+4>U4ejH#RmF z0RdsE;!wTgBAlWP#qXfOaZgf4hR^-dMx@~GaQPREZ4SKL-ozVXVt$iBLOZ*Y+67~4 z>jN&kjsAF+)vWiV7?_w&yHk;gi9r{g1h)3}$!sQJX=#f$I>QYl5!PKJBhbNQt_S@J zA~^R!Z*TAHnN_Q~x+6y}9SFt;QBf>xZ0rY0CZ@qZe+~tlaU>)pPBw?SijW>=FJ;{? z=AD9Z7!&zDt^?wiR7tLtkf%^C(SE<7Y+{Jf%~S@E61A3uJSmhOv1FFglqxL(4z{S|<2gy}vi z@&FuzpEf-)5!?TFWrbYY{cuU>!-o$xHizJ4Q~BIL5(WhY@dqh!r*0M%6;)SPA1xTa zp`xVp+jOZ=3xN-ZM~8ce4L~R1cRQD+D;5(IJK^;@-<{^v#_y|q{rWXb2@LTxwX`e@ z4SnI!Lv0)#!-9eeFS3V6N7?A;dZ(wao();RKCz>rp@HQKyWJv2FZH--Mx>=Z{fK_N|X^oAIodX5PAq7%?zg($3 zm&kPDSC*E_trwfK#KOS?yl9Y88!G~VK{$?Dq-A6%HTRwNX2$;{16xc_PaD<%mt9^u zAM=NVKOVJ}mHKZwdwc2l`BQ!KKpb04mFo>8zFS^iHbk3@l#* zDSCN%nZRa(taN&Iwz|4HS*qROuru+gNagwS=YgV`RQy@sGvFBq%{NTc)LpZ)n#W|7 zF4?s0eSPNhKOGqQU;(HvUm6$~OqOV>Dl4x6yI=%%pH!BYN6e`*>o%{sq~7K$AB^-5 z41nABpp$<4_N_0LQM1MK&igqEB#y$y$!TbCkcpO7LPo}Ng}PE4g8brzT0L|fd}yLn zn*b9NWQ7PZIQcz1JdSX6ad0q<7e(*j@AkGNA9JKQ79nAy{ofJr(gSG%x|RHeM|h{F zrz@+goR%}9`sVKL?iLmnN*Imekf5+I@EG-asF9&zc4}(sSTgVnupt45#Z;Bq=tz!~ zksK}v$Y1U4z{!;$)jEQ4r3OfomPCYwyEl+pF5Vp%Q-_5);jUw1dDSAehYi#}@Vx0^$0)`n&v40wkGTu)7pRytrwZMMm4 znN`)*lf~*H_raH|;Q}KgBluq40KY5c4kt=9Az`@K*pWo^{SO12ixDooyu7}n1eHus zgm;!R>;=y!#>PM#zmPID^ap?_W!VE}_4naO_t$4TicLjjI!#|pOsM;7KDT)b++T`( z>FMa`fFa#X>UzbvSCy7pjpoX{q;x(myt~>=L&0IV?4qW0LCwp_k!TjY*q_JjG{*=O zovpQw(`t{RmTSH{*L=i_GNk6n0Q?Mq0YpSi`W->tJhn3$N^8cTW_nm^;?O-={ILnpP?i?Y(vsAy;lb+%cr<{<_bAb==2 zvlen9;pOf{K~MM1@0cDdi5Zvaan zBO?PKLdv$bvC&I)+21b>?IgcKfvyfEHWqu`9(DaN83N7$DC+yESpCPx(A2CQgH}*=)Q_q zMQtrJ6H{!VH3thz0$4EcpmNMX$Gx2Q2S-KlfT{aCr3v^u9^T!sA_33 zTv714Ymwa>gdCia4;)%6ynI-|yd?;Aph;LFAW^DZ;C7ydA3AA#6`!1(+>O0A9f3`ZS5tdZE!p>A2Agc$;^~db%x`(it5c9melx?C%=)5renKv3(>YG!&TEC6$?$mTc(g z>SWWw!2xFd4EF8-w1nbKe=ZiihE8rlfKaBLb%qkCmS}v~kBy5%ahac*x*QUCfKXEl zJlwJ+eEYo!Os;nWZbr$&2J9NXd1X0U^UeriV_;{=B{hx^PH&=EeeIIWK`b&d@^K~h ze_?BzJTA!DfixT(vB@YBI7EBXKg6K5FAxnu3~Fo7gFJ#X*t|PZKjBRSR_qr%pAE#M z?$!=lbxvKZFbH_-6BafIN_521lO?Uajq*~=!4~M_~UlKT{3fOPG`t=sH9@(A+ zxsQjxUOcFi=5Ql$<`rnKd;vv}|KZOQ4!&bEHFTl@F0$aj*s{EVY8^zKeo_DSVmiM64xTHQT2arI1 zC9KIsfT{@4aHp&#_LdoRQ$6ryMMYBEd=M|Zd?zzu?9j2YWJq;X2u;<;NqTnns*KI< zxBZFl%*C5tDrjmpc-%Oeo0}hRfyypnf)FV#Dx3#c%0iQyOR5tTO0LZaN;#x{mLRjJ z=qCKpD-s!DkmDXE7c>fj0?=zq?<2s&-=2=jt*@`I)wv$6JTE9BLrTSJ?QZUcL4qeG z>>3Pl9=fPM9k75_h5_O{68Ck}r63G%jU5h&81BBLA97XAq?I4}`#P7oYiz8lu1@Xz ziz}#e%=^j7ggrR+fLmo}LqH`$M-K5U}6U)ob&tHHiAt0b1V}UXM0T3Of;tsi# zqivpayAU~b)L3$=U#KIk@LhG!WaEZglxE#t{`n1pB%(-zXA*cErnkMmIA(EkSizSNC3V zg`7*SNeXjjDW`Lq@+fTey}uqZ3QEt`&GZ=nS?et>WRfx@B&0>J2M;qdTJ_2K1}BNc zv55()YC^yX;+Se>on6L-=C1l*2l0aK<@z2m8J3;t24iVtX z90!nizS?#tr=ZYna{Z*LTI=<2UtC=L=a0OIh{$n>xVM1kturR(EkKox{sa+M`G}KR zD*hcW=|j*Ez$~*(-cXT|J$W>@_8NDHkdTmY(W|TZ%TQr=d;8Pl^}c6MpGr$h+uPfN zUfV!lA9R&g=H^mQr@^JB#zs_BR0c*yB}K(<>uyDpksKWDtxalk>~U-3nhO^OC@jYn zpKl4Pet<2>CBGNCKH%VMlX7sUVjRf6;{o(ATc>9;zodld&EqlE9l?{4kpb#>+}u_6 zb=v0D^beCLT0njw9!$WFA6$#Md3d5alY)YfdnUu8=XMucbfMS)dQnhOAm-@@+yID8;6DYXQ3l4?65x-vS$%r(Dg~^(lZUNfh$9e$@5Gxa8d1t4= zum=V@!5pbLz!_n_j2MBSiRr!tp>cL{68!x;FtnqSQ=H@>>aV)GIxH-#hy*)3J3oeR z@DB<%Z_2hr{V6RP@$P*HWMF!4SY>rV0|2y>o&g|(%-7rHDO<;HZEXR?1;_@I+ zs4rjBeWmmYzj4Ck?HL914fD9l$LE>4w_%r%I)GQh?*u(3I2e1k5uc2O#SZ>6Uv#G#YlLlyUwtU$G{-%>{AWrCuL3KhdZS62Wp^YS=W zplG(VU&z8qINMvVyPCt54wQnRTYn6oKWNrkVW(2yX$L4juz5MWnFsCSp>Fo|_sy&5 zXe@s{K%Kfzu)i=p8ebw&-jC8nFi12L;Cm!JB!cSXKc4YZlI$Vw=jZ3ooBo6JL_JOA?G58Tuy~$j5 z-3!fN^}uyN?UD4ai{xEqdHa@BL9y~nT6FsfZ;RueM$dEDH!QD*y9;nb>-nECA=k%S z!xYe-!rcC)%}udbEe(ws=kQmsrJjP}vzy8BHN%&lq z>-<|m>(z6B%Hz08+Hlt$NzveRK!s>%WRzorBv^2?q^+gZ4fp6o%igFjl8=HNgr`0; zQy(;li0H)bpoaXl4t-Q})W3UW*>1w|lVs!H199(BmI-qLy+#L{wd#`xPfXquRqWo; zJUJN|nZ3O|&{wM;@Mv)~b5>aKGcwAUHd0UO+)uhy;$UMV;hh350UikwfJr@gSDsA~ z78NCN!f^zI!0AYMBTU|3ZvhtuN$h@mX=`To7sy&KQBk`wo<4il^D0!)LBOYwztyWQ(^OsuBXq4 z4V3~T5QkZZA(`Tc*X#P!%*p8@cc}GkKj1IoqMldB>jG4l!1#cns5yH)0457MQKZ>| zvNGlnG7(P+wMOToN5m+4#a<=xGREO`kxB`9*;87}FSio!DBIXjSC^MlFsae{PCPbV$-_JTm)$O!w@t3SUJLPJ6OLHI02?6nC2;K3RpfqoCA045&r6`~^7Yu?-Q7JnU?xO03d0q za(j2@x8Vgu-%CO1G=4rlK5f(Rhy8|wkNHBLpLo=o4V$ORe7koWVx60Z(3r%7Pve9O8!ud~KKo1qEju6$dlb zQZ?l_Enjtx7IDvj0_CM{qY$kC3h^It`E3KI=Z@Pae%;d+0KDdF)%QI=N}jvy6$q{ z=7R`(Py`oF8sp+{f4#+J)>(7mr>B?Nww3@>gh;LDUA7>Vk&%$v6wqLE^YftPA-nJE ziK6ad`RMHGn#%9-6XxE3N+lq!nQC z8*MWFRp zs6AGwXoe#*s!I~j%SYvUXQHIR^NxGy1en5Y;K5(aK8sIJCLKq?WyHKuTSG-*e755+O&9CHVO>Fkdqe z)n6<{sQU=3f1Co__V}CI$qbc?$^u1K+bwm zA#wTUr_FLZcuA0j;@&MDHykf*rYF5MFo96US(FEi8FrbT4wF2pq|4FlB}7HX|YuI4|AiBSW| zh=)g$rVGYLadT0#iuLo#b_kk6Njj0+-O<`g0Lx1#_FR_C=Kra-TtgEScv-~SS zzhY{9{7eS3(a)~~5K-`=pr`otHrqjoRa}A`>Hhxi1`h+Mz=tr8R51ezU17jn^(*Rt zzCl4D!T?&9#!GDsUWv~@wgmtJBKr93%%eeH{&EfT7Py#FAf;QCt%n6NQLNkI35J@A z+O*qzR6Q;RGBN`o3V&2q0zmvWk5<`yvk!PTAr@AZ`6Lq{;GU=tUCg6YRF^=1{NAww zBD=@y==_|@(y_fCgh+OWsGOV}Ya8eK=nbayA*{EzmynQf!Q6YX#Y}|sDfJ8Rb)h*=+ zdB^qgDf$-rhlHSx^b3Len*eb$l-e15r9ekS;O;akGV-+}{|hkLBH?wm*&HMyB1!>@ zL514w-Nhp3dS6u_k|zKh#SSjiUuv3~QO`zx|MuKYn=cu$Uv z@j4&2g84Q{i!|^O5cQdHf+d{LzJb|~8bfJuFz(R0Qn3+7epuo^H#vq)yo@6 zC*Nmsa`IuXcF{TY;^YJc85xGWcz%9v=*h#=P%C=~YB^!o5ibc5QRv092p>bh(A(=9 zN=uopT&#dOh>3~UO3aOosrnCgccm9%fs(<^%?|DrYzD0?;585W}++j!iALq{L}lBO&ZE<4LjI61j#KsK>MR5)y%cDgt3i zJr-Nz2&gCBLN@|s8@}j_ZIhaaX_1i?&PV#k?*`t6`1w7*8U|39lVLD2FktyO&GKLb zh@0*G8jiLaCXCkC2@K;5F)=oV&Ajc20bY{_zU6U}jjzwo|9({@M)(&hgEp4y?&{Tx zUEYx z%glUnc=-9vV@GUT+1u9#Ffd}tmR*uK^vn|}P?Vh2;!#6%0;S7tQ?wa_g7>&FAkCO9th|u60Kd(4GDquzN zf{H)SBka{09ry4Z`CkE7uSHpI>WWW~gLr#50%;{y854tz*Fet2mB9POz(9nbKw_`R z(A(sV@x%R{a9lXmzreW%k{00DeBjLhQE^Fa@p=GrGJcoY6W#~lG+ocDoZ{k;{zj{L zZZa+j%1fZGe?bBbA>>g;kEHdwzoM>huvr#vB>8G%Zx3mb1EUTVW#uZcQDvl<7$3j) ztuzo_>fQEcssYqSEp~uPO@rFo3^bu*Vt%j>D3U@<+Oat3tIkFb ztR&m;3Rv3kH~X;?)Wzir%q@e1g1Wc6U+H~?XHIzBHIdDq0^kUAE5$89mu=xq>t)%j6bNQ-CO-@f?wA9s{U?f z0xY2tI{?6cu{SHm6m0uV5agE$CO8^?o5#l7O8QisannDZkYV+pvi2xJq|uBN*?PFH6BQ$bor3? zD0WQrgWV~yMt*&Zphf`tjx18sN97DnWO7IS`}c2&R{b$}PWuO%$GLAyrjoPsd(gk0 zn?_$_%m5Wv4eT#sicS7DHXe~%;Qu8oD>Ks>;#Z|z)o0Mp|-X_lNNIf zsO3Mrk6~5L~|``JL5|qvj6v2 zFztH$?Y}=BrT_oOpZ|BAU6P?Sn#)!Tn_IIxa6)Cgg3d5Z2jmOe7S;XYo5u-DNLN3A zel**%N1py;vD|?pk>~m|FI0&r+yezH2@v!HvNn_0^Z0~!(4ggRTK`|Cd#?4lz1Yg( zW2`XOEqcZ*A>)Ms9G%@a8j3?nq9WPJo+Wv1*DoxC$vzI2tfD!l-n~0#1h)b^`5NQk z7u`O#FXkG~ZLPzU4@9)@VyjbXH66*Gwea~p{c*^CG%%1w|?{|cxDsi zQUytj$IoI5t1`px&rGTnN>{$zYvS#b_9pnZt4=&fPT!95|)UoT?7d~u$@UHrobm*E&ttMHl!@4rbg5~4c#fn4l?*tPN%3weFj2vd0Y3Z*UrL;p8RYXQ2JuhB zFEV|>?SLBY?kV8U@bR)<&kVU`eV_hCVQ>mTDEo6mnsyPPUq7TLf5ItwsC}nemDHf^ zIQVV!Sq!UHm_iz>qj%@d>}BBlpvSwx17S`4@Bw5zk9Do^AYagWVqWUbcFPKVXY?5P zDEs_?iEWW@mac5lxbZ!|U$WaCxl@Qj+T6Hxg8qc%`Uh3N#MQ8j#Tv=?l0mS59kuG< znVbkaIsTSRqm>@;OahGqnwNWF8I+QEoH49YJigZW@6^Mk4=~CrKeZ2MT%%cLUC=Q9 zlpM9!4Y(Rm8lp8`*xvs%HQ!JUE^~f4Ajvf!rCZ*@O|ADJG>B%Ey5a7pE_!3QKMQTM z^-FF5@e-D-FKA56LsKMi_iA0+$o zKea0q%1c*h75N&pqltOvnf=VuOjI=ftM<;JfUDse`|hDSO)X5n9=Pi;5D9D*CHw7^ zx*56jkOIHRWy)B;WVAE&40y|5LV363|L>GRrgM#XGpA`w4VFkFT(Sx9IY8DPE3h7Tl^H#gCE-$U5xJzQZ^sW>=kA{#>Hhl)1Z8Ug$ztTvqAGT% zh4;a>s_5t`sU1ns`WkZKM>Eq=b{T!no@iljlD2pU0D$@`#Oe%zB_bi(J5sH-SbYxh zKN9Blux?*=K>6lJ?*-bJ8{bP0IqqHtT5cTVsFk)15GLk|$>{_91S$)E7|XE>I-=U( z{k4>`D87K1`S8$a z@a+z%GL-r_<>_cgiODN7YCvUrUW>N3AG7GVU=@U|#K1W<6{@0;f!xt<8Q-kEnQl!J zOYj+6I`%v#0pJBuJ0}uSbD0Rci#W>(P6t%@oz(0WUnP=f@{BLq@?x#zdv4c}u?bs5 zp66w8GKZ3XC;cYuE0LGSGUKE${w>YT*)SqA`24lzte6Gmz{z~mF=A333PD+flI*Cx zSJGRkN;-&R1JfQsl$J?1=)PmnIs!pMO+rhpL%%10idnJSx7~Ab`t^f9T5`>P%AD#1 ztJ_vRtPs#^j@;YU260QzG+8@#S9hUm%PABTZ7>Az?I1^PAbnHLWfpW9`syPt2 zX`{^N;In}$c;?4Dn%_HZRK#m!Fe5*!O2}VH%1ahZ_SwPNd4M$l!Wm(*<4H@JUBs_) zBR-*y*HSwH+{sfbl@he&OzQxtAkIJPxzDjY(Z%AJpAl7l)K2`yVwVn!RDt2b&xAu} z6o3^?>`gnHD*wej?vG<`KMVQ(#_<6Yqz))#9hmwfoh3w-<#%^|#$QFG<~XTJu;%dJ zpzx&?Dd2PKvgD@qkK&c`dF;Z6QVo@ke4ea!I**Bc?Z0#BgxUBRH1I&sPh3JwxM?)- zKKNTBPqT|NvJDnJ{myeafj(OYLmGtWc5O(k87cKA_NJ65)5QBAmYBY>;=G_vS{1U* z{m%xqrJj9BIoiZztWh$DAUUEW53>#Za{n@YD*{Qqo;dP9*n7*cD%ZAM)H&6uC>S6T zibzW-t)zhlslMlZ@SXgAxDzrR^uL)cr(p z8^Sv_OoAuhYX{IaQ1}h)m&9)(jn1det(r7Gt6nGvGd}W`NhVwy%687K6ErlI7JZ+0 zlYowR1&p8v8rh#B&06Z}L*yIxD%V-KV;^=2XgMTEw2hw;xl7HOIZ1i_Qf0)=!mH<) zRSni2{PNZyJDIm+9rtbK)M6k8+e2AV zqwaGyz6mY^;;ZG}C~BO9&nVQhMzE(-)A3*~?d05Gy^cwbdL_8IA}`SOia_;2o&~y$ zimFdBt<>}xw)~+(5&CF0i|U+Zu?>D=d< zMdlo`?Xf2AC?n3sGcgo!Vw*}(&oxvha(sO6LCU^5!w&wcHXdfq#TsGv^al)egvDm* zp4MkW<5ZV{TH_1~Q}Qsc)ONm{XSUHC?k{|V;TqXGruFBQxyij5z2R>Zt)qqjmpW~( zEfs&h4_!OhGluHgbE<_$8%zkbNUkA&$D9058x=+`UOUm({9fHN=I(k^pZj%BYh~?8 z=k0giQA0P~m9Cr7yo%RWDPxsSz>W9v;$iSImuG4CnnSvAmQS|$Ngwwcwq1Khsz|?i zvfA0%K@G5ZT=UzYn#XoqqYQVJpFv4ctMdR;bwJ$P@}@kFZl1XaY%&MGWswDGcMp$Irqi>Ub7@cSD zZ5)(o(xQ$WsAYJ#G2c?luye-!{`Q67P0F4XIjg4yZ_maJL1Rsj;i~6;DqQJ5Fv2v`oB>v`=y_q5bY+Fmv5BKR3@2y85r2=$WVqfp%=1ByXihb zvo^-yp<+N%w>km6X09*KXy2~7wzPJk}7aSYomBQeoj>3bk)m&6=7o!V{GOR8(lP+jw{!*TGKe+c(yfR z{TaKC9WlFNVB_LX|Ra*ieP6mhZvxU};1z+pcFuRs3{Kk#5Xt;Td@#ku)h$lB$p(bNoD0@0;_7s^RD9yab zzZCfNoQYq)K$ljIAuE_NJ{9x1KRWE{?C<%fbIfem`|Q5CU}bQuQrX)D=7izEGFFB` zJ!tSIw16mb8dmep#oZ#Km%**%0S2gd^4vb2Xg@HB`3L7PE+10qD6Iv?mE z0pq0=oBa8c`smT?K!L-))+xzaCT@&V@*M#QTg5!8BODqmc z4Myod-0T#^NsbHe$q8$AzVIbk=#l%NO|{RNPvu@edyD-=FL(t^jE8q|OtsxG?ABki z!-y~P?-^`)i%kzjdD$w*iB#+EUO{QGWwCL$F4UU_-*f)BUM)^+a&PY-V}u@S^pJCD zO5u~fp3pQdIm?o6)8@lvc7uo$W72 zhe9&t=+J)X48Lb+yUUkPvorkFRVh_oMkRA`Uc$$XzH_RnCj}~>_G@YTWHKjwTDd5a zcE^P`6n-GZ7IrgW?n7W7I1Vk>YY--~?EpxH?|%1-ilUZn2hG;gljppLNR)l%h<`U|{_c}G@0aq}^gjiQ^OAtP` z#6*u&GvFx%^;bkh9vBd;Ov$8PTh27)SW?o`OziA_$%7d9*~#9fRA~H(y3JSqTFkki zF-I_4bk!`(%wq5|Ea<^KRkr}N`-JXbfQ+8^4`Z{4t@C@X8KA(-HDn@l>?TU$s*>=C zu+W^I*7lIwG|w}yvWS=U&XD(0@ec?U;_6M z>4K1D!@K1qC56Nwp$LdC7*Lq@l-1NCuFWc^UMoS#3Cs~#B|%KsC5 zn24yT=Pt+vb#-(q=4T#}+z+Tjd4$HeM#si79JNr2(rZkC;hkp$;)bqVe!|T>h#p&@nD)P&G!9!@3a_D{zAL&IQS>ln2R`6YBMz?VOW}hX7p53ysr`Ev$ zKmAgHBOilgUXU&QGO{cgdTr62m&&-p{WC<1G0q}#y#O7OLgx=0IEW3?zvX?i#i z4<(|4#6m0G;C(%_iW8azRkF`6$qAZ`97O@eL_y**0aLAo_c?=_*W==lvjz>?hL^rztc{G_$_a`r^720jTr7@lrmNn@`dP+bf( z>lYOSOv{DwX)$iHln-Cl#(W}S!k805RrXNPeVrN3vUdyRvHj=$#4d?d4pF&+j{xTNfKdQyD0x+S}dDMRSG)hx?HHDmKt|lW!u5{J*aTTd$YHs${;o3h{ zx!2_?T#dYc3fGT`DqO7^=yaFpbu2@(P40f#t_W=(3X%62>2`YuJ1}PENd|D- zrYy~mwhp@Viw1x~UTV}g9g^7x&QDqy&7uGZUxEA#Dxr~v5O}meUOC3a^P691AaaA0 z6heURmX?!5mASe8yVgK=ynXu?ZUAN$7By8>*+?GGR5Q3n2||Rv*FlU9abxXmZ7Qm& z{QUd@#|7tMM`wJ8CpbJk!(~Y7lhvUX*42ha&eIo^|K%Oh(aw8wC{ZctMfn;t3m{;IBg0kFcLe zuvDCRdzhZLWaFw$Mx;~X}y=w zrUE8gL>b#X%fSY`CW^ECl$t`yGutxdS*L_4$7gXmz#_?QrcriIVB~yN#@4;pSQA)G zj^V*z?pu;_UDmYus@xNH3!!)Q9E?LoF?tASjr&9kkTSNBKFc^KIn%!=Q!?7ErtLf@ zg>eN-#YD~+wT@o>QGQlt6ikc`37>8Nv#{CSdE{f~I^Ac-U(^Xc1~I;wO2!!-*8Y65 z%d_>S7#DP7x@QOJQ~aWh7(d|Q<9aP9N**@0cUlXg#m_mh!=-*;(N~U7mY4VyCLX3* zh0E$om|Q^}81+4qBrV79;gr;c_(Df#lc1cbxx`bOshWkKIDUIe6eM+T^g|d1ftcII z3UrPz;elvMtE$?DPX7SZCD3%jV>AV+=sDLlKGy1p<4@i-HBF;u2RZLBKhgjSU-8mH z5Ou0augFr2wi}b`DJx$0_>P$M=obqEaVfrP>#FWF4w&)Y>OFdNneo zMk*qSMb?s{L^=2QRl4GG)r}zF8vuK%Q%?kUZi4|yV&TS)9@LztP+!?@H!yvImlxo2 z72iVUvacMW3?+#@!fXB2)P;eWnK@Y`HOSb(k9jqhNEdI&`l>*uLvD3rAApmPzjP(TveU zWzM4k%BrYgC5oz^Sis@$mN=i71z&43rhPq?m65t>!2pC6!~ffd#vSoR(jm-H7DYxy z?IY*dHboo(>Mb(nYo?}u!5*rwLS;EsRru%6A3v_eiImKFLI8F+@8gyD9ekIUj^6ff z>!4aau#u+V1io~xkO+@pbb(z`J_^dECnLOo^4@1=giKJ8aK~`h zH+ugDdh7T65h*KB&5lWTtiojEi1<81#7JR;=dL`^CgLlpfXc$!Pb>dMWE*$M(p9sk z>6sVJ(wF=QzGNjxWm`EXUnMq-4^wdFx)^2PlkBW)#aV4&V!W z>i1XiEitynbfmZP$@;beV_LkYcR9b0A}%lQuIhJI`vmRxL^>|NdK$={9=x_A z_-Dh_eC<~SA4m4Q-j<(zlFKJkF}rp(eYfgJT5UD+v`WIWz9TjtJa->xe?>r+4NB~S zgp&u}VIDqgEXP`Ehi!1#ZxHb%ER`&+7()* zamv!UovWRtRko(+&yRCjqyO%n2(fl`pCQtv+z3lGQ=$_;&2cS1M(N!rP!Fia_Y%cj z)@}G24wOK;^wRGAX2I5Euc}b<)L1?a;+38iH8u|FK}C(i1lTWd_(JaFE9ID6reD#k z-VThkw;p56RM58eu*Q>qR@u+xD%@~*;%26)iqvFybH#Z%+YJSA7VIANIgTIlYD#}k ze{+y;4Z5|qfsw@>J%5%+P2C_1K$+y3JFz*LIB-Q?&q2PUv$J7z0(8}o4kTsSI%U^Q z1FBGNWBEKk^<{bc6k&8Rs-CK~%{~>5vGZq6B7MBGUhZ=Os2-IneRKbBmJBo!z~9ty zU|XEQ&8KemQSx34VO$a5J`d>R)JR{7x>aE0S-?h@1c1K3=l06JlU}*G0#lfk8 zis;6f(NWuPZwa{paUzaw{rx)X<3BsIpgw9icfW=j014^g!w=MUVa$j<-X;I;&Ws6# zw2*<_@`p4ta?d^+0Me1`B%SuAG|u-8O1kp*pog=jA&lLQ{jM~LV5e}6IvuCiW(-?_ zpU^*@1KN4~){s=b!RVqn2v#tstf-AOe(u(kNJ&6=iiZ~pueLiydEy01YfDaKE@vVb zqpnjWiD{gA?LM(fzMXG;Oh{!=*UoMJIQgrY0-se40wf(8V=}b3!*}$Ze|!hF_OF*d zfo}*JWEb*s>lOTQ48Es z06DlJ$0aHi_|V4>AK<1i0q`(A?FOU)GSqfHODn7CO$t4|L0EP;Ax29bhxkPda#eJM z$P0k?5oH}j^MpcS0qr2+mR7@0|3yVvnG8xL3Ih9ydrIIM+Fr`#YoofBVwoP`CB;aW ze(Df$Ka4SGJ1j0lx{@${a7{dyGL1ZF(=xk6MuEAPI+M5Y^$#*{*p@iD-9!a-<#FS9 zRcZPMW`~!mjITdpIQhSr5sNY!CW<3o902re=hn9W`cHwk^`q8lWVx)^*nt@O49G}+ zcdT$GG2xRJli89$l|{?4Xk^(E%Bt+P^3@x-fd4RBy=z|GAPzE(Omm?|^7n@a`uE9CiG;l91TYrB~InnChkQ8c_47uet3i_vs7jLAs% zi!qR@Y9QZ2QRtqO+lMXBg<7Wy^wYpSJy$QeSRvcFZxVPa@Hs=+6teHAm%bDeu`G0l z%&62LxFX$>fWoxDzal%E1CH@)8nD|!a)uo^BqRi~UD$~j)xJ(maUOlr(0SK1Y5?dV zJgtnin=rb=92XoM><}05{&rssJ(QWf#}yB0M)PQ zes;l!QjDbzbKfA&WMY}_Ek@Th4NWm}8H{`((j0yt@H?mlh*-G-tvrN2bZ5@UzlQFp z1~9|3sHiqRO9sz5&BaXJC>4sL%<4BQt` zsW>@ppJxjyEnPbUjn2mE0z^PI$BUuTfvQr5X$7|{Pd(qGk&waiTLX~?c`H0f83W$1 z#A2XhQhB^itj0|Nt4Rvmv&L{Y319#B>(e48UY$D!|HQd9|5a}Dv6Pq`P&jfM8W8=(r0FB3ZVE11w~dy1{Eb` z%(*)TSQGeUp=f7-IYrq6YDzCJNmbQOEGCE~!i%qGtIw^>4QD8)QBzY_I?N@)_9`PI z0|*l`B)GKbKSC$%zVuTSJ^aYkh7BXi6^viB2%75ZE$(@VL66v||9-wJ?(i<)ZX;m9 z9gh;9K;_li)<*BD#Du)0Ha=Oe=c@o<@TYEA^U;O`d+yq^=e*0xETn(#upL1Pos*qi ze@{zGD{iboeLk3nmv^SWY`NFE3Ub)5w`6~NPT;X^+XUW1XeK@NhrFlx`# zJ2fry_$L2!rbx~H!=m!PI8_K=|H-TI-}&-cMHYv@2w#4On8<(mJ^po7zhCvA zzWjgBPiIp@Us)+~T(R2cc(7E$ipr3dV?9ti;kC}U{0Cx!%J-iB)baO9kXSB>*5oMd z6B?bo5Z{;aMd))ezAi3dR+rSpy{g9NodDTWOBGI&1M^Kl`r=Ft*p~uJeWpykTaG?C zZU3ZCN#5lwmvy+K;eG2ZhgVd?*{;2u=e{tw?EIh9N#{TF%Gz9g)flbkbhB$+VJ0w7 z_}vyqSzwUdVa~R^z4qQtjM4*yeGMy-gC3FYrGo8janR~BK5)$GieGr zMXjaQ^q--xoH+7o&-zjP1!%$sWIU{khfJGaEQ!{3**`viQcb;|Z7F6}VZm?0GFYxi zTBt{8Dcj}Z&G_dAUWfTB-{?>8AKA}lW==b)^^cD{LsV(m<}-bG&^}_ z6Onrl+C~-|&So!GziO*m{4govUaZulW2@}!rT>?6YN6Kc&_1t{Gbb11Tls$+-paW& zu!-yWod1v8S4mo~lJ6{jP?p>$%0zo&Mh%8~b*=4-13e>>TF$)0ybbl4H@|rPBJ%E( zoqVB2C_LM*%_h-Y@@~8qYh+Z%`rr(bCcjLcA$ zpa(3+s*_aY%AI!Et|^0FaU%2;Zh<_x*)TyycV8YLw{H*F3d;49Uiy5*oPVu+KWHoO zlJr>c%~`$nH^jdsN_rRbW5SD0la`N!>e87DH4kzMkJVEJeb6YzEx6Xo@8a6d{YDXm z+$^1xtgM8`wmqrK`_HbvC8Gq|x$HChy{TQwdz79ua$Spm{;f!w<=y8!wvW%JKhqjO zd`W}Ty9)8j>mN>=$KBCM7n~NezuTKkmV8R%Q%#|AC@AzVcN> zv8)jHKx4_cyn=11Gv0pl&v4?%$ix_1^Ykk`8g-}M&k8iKkl&rL_3hzp{T$Vposu*t z>|ndFnDs#;rGLzd6dI*#;mUNK=dcn*#?@CSQh|QLL?>`7KgXJDYDAeeY5(L8R21toMk< ze^)bCdwtq_+e1HrGigp++GKlR!A`ae)=qVXkP zCe|8cNmmCoo%=%4#`OGyaDUw=i|lw%vO=v^)r!!R-5g+y_&j;Y9m2HmCr~e?h3W`= zVD&H%#B-42KF|NLJRxv9&_IySRRYUk&jD6 zx^-OFD%x47G;E)KVOCQY&)1G{6qamy{5G19fiE_&;=gOVGSk$E%w=Y%lepH;Zf}yh z9PUGHi-$fXX_<8D5z>uEX8ssmi~H5D9+feeICt!P5C4HVZK-_iZpYq+{xjc0p^<7~ zQIneGJgRd&cA8t_{d4h+KYT~M%HHu1Cz;(y4P3qexj zF#7DjP8(7NMR{sfy-8G*JB;zMZ}s5lezwAbrM2Bhe~&ijmvQ-6w>7?#c8Wy$IP94?cBBx4F(axH^w`W}0K3yI1OiVwD%&Z~Y??r9jH|UgV zxv=I-zHXeMQ19TjqpkC04L@c+abA@%nElB9v#K8>8DF}Oip(sLy*h|zXWk(|SAB3v ziuoX`$zZCwT)Oc%WwD+>wYk}Z?US_x%Qhm}O|z+^$2aM}IYS7^v5?vlC3l@JM$=_H zOgdkCu;=5R6>^A_PPYn|U7lh5w6OW-lXqYK+IuYTnN|~5bb#Q2xNm`PHH*z(eJLZnhteYnPwxr(srkhAC zE7U+RA(}(FREfyVH&+o$AQp#fJTGs>+7u1!8Wj8bn9DQ!Qe9g}AI;Ao%>2BTLRSym zWAiYl+=UHV&t9zA1!2X%6-p+h1EWo-Z(jE$U1K52aV+jh`p= z6g2e6Wit(?EAorBDlS!81-aSQ@Uh^*(rrCg@nB(MC$3#2*1D44cXB2h`zK?TDRb0k zH+}}+#g;Ih8YbgF`>rE8JG~B*%r~WC;?J9T=`&Mlp!!%N_bWO`w_gPlT2DbxqWix7 zv+28Me~;mP8ved1V`{vK%o9}nd^%FIBZGeooexPDSY3JSqpIhhw`Q|3cbJTEx%|@7 z#y|@_`sKj5QhZtSEh-a%M%U^xMu*^=!gZ5W*55@s7$S)idAd$3*gZv^GqS*bWS$nK z4z&oo4tKFO(4F!gVhAY+OJtpm=eI6a6Y}{Jr@r@v5$^IO>07kZ)LHsBP8a4Pn8%>0 zpDu1c#(h2c^^X)PvOF(ivQ3g>Y-J$Am7mS5jx)nDN%%9nr#C56udMuq>Ax%IxV1o% z`y0}RKKar&AIN=KCa5x^KL;IM^Uq(`y>gfR4CFD*ufEk_5BT93QCCvp8iHV5x$$10?DT*)b*|R4^FL02)8cgyq z|DRs^$Pr{d`h(~J(6^DOS$#``0 zaWSlh6-XD$p9A`MyLiP(P3Ya}$HZ5#3ZurlB=J;*V4w*#bm&gEj5Tnho~D-B_enLa z*<$UL`KjtgLDrARoj^_&oBKZEm zoPlS%X##DP`*jWu4zO%r$HyI!E(Y-sTIDZ2o7Wt#zK94eJnu1RiFDxZOy?y5!V_S8^c=049eKS z!Qx8+;Z}dPovrqA$Y4#5`QC2j<(@~h#Tg{|!#MKnVEb)vOrp_!=11;+ENkq&So-uA z5t|zh2NYP?xnpl;HzGQsf`}0JfiM}D{#1I> z{&GiNAZJ`$vp^@hy7Kab#(w-zS5x!ewOzvGVAIG&91<7j2CLH+kya(!c!^l6+i@$v)kBS_PGH6$ z{fZ5?xCzeNdv-WP?4mt##Ar3btX+3o)6~KO@f8)2iV@O3%&rMkqeYJwvc0vgNAQEg zI0ZQs5GI-2AJE50&Bkka6zAvD*~4+f#?Ia_2s}%>;K#NMAK(Tc7KjeL4frN*4D50K z@{r+N!@pz|Wh$-pUDeKxj-r1Pfa6<18HdPwFnIjU&qxgB(-F#Kh!^q$GWH?fbBQ3KkBQum5^#GGY?>g%p)p4e-2k2I21Gl|8S92KU*X8 zTCBu6KfizX+I5iD1J%H+$jtb7&x%EQqT~Br?z0bNXK#JawT>M^2k`@y5IP8}Ag$4T zSz$KQa(qQcK|9QnpjKIH(!F?kDKqqL@qpM%w(wU+=1&NGEbn1Al70U<9=m$9gSK6f zzSZ3P?l5JEFX+N-4SN9EON{R&sJOtBy)*$dV4(#)bHp?^NBKC)PxwJaMQ>(S^H*b{0((dDAr{9buMYPRO_Q%#{YtZ}IIHM@A_ZU)R+vxYPD3aBQ_p8m`? zH*<4wr^`Yw^9i*^&Ka8WtAZ2PG2$3vzsvEwOjgge{i(sze50AqcQpAl)&3o{sl{c9 zAr=Ht%GkMS$YTN5!4!_%MgsVV1jw6Yfu|^)etS8y+frNwFPM7P1v>r=Kz`RsmhkY)?4gItc5fnPs6B#8Xf~Wg-UdoPmDhy9G zf<@?q9&hy5cfQ@R#hXk;$e>#Ca*&sAPLq%S<|{W7I)nxXivU27nwyoNj2~1wqBBdE zv;SR2yjHMi=d@w3vw2v~1C)}F3v0@$c)g62q${K@X`d@l5GSZxr8_4cD#W1T;SJNL zPF?9&U62K8g`H&tXvT~cQ9REA(EY!UU z9Lsev!5Q>4sB=YzoiI{$zE7FPxrG@BqN8Umh1khD?oLHr;>VFhnSGAS4e1L{pJki$ z(M|7QtqO82kezQBsLtXiZp01N=>TXlzgrdkSn^RqPdXHGCG)Fe+#o{L0*5i);3bw$ zb^k(6$o~OKb$ME@vnz=G2>XaAqrGaHGuoyefM#aGSo9w2KLfU=%)#Q!#2h@Nw@mWM z`DEh-C2Q~3J9QH6?R*BLy=-X>DJ~~EHoven5>WCJ`$A{&-1= zT5e)qKDFCRGkx?7gzTza^qnDLV9UqV0DVa&vY0RUnR8O;(3>2NBm=912(y@Io+#0KGaSBKSxeC50cceIJ-OT&X{sErIfENh&UJy|mCGQz{KZ{H45P zulLX=LWq9+!8TI8Jo!pOn$(IMxAP;`{y}KK_h~RNI*>Z1{h)@}Ub>B( zO>InV-7;1$FPpH2lif1xke$LsCB@LAKKHlVyV=Gr zo=aeXXV8^)+N5TVUi+H`zRYNcTiVjrm6B7A^^BnyyUYHG;NO#v>PHB>Gl|-K(u0nt z_jWu>G;E>U+EHhdqug|j%l1w03PWOAns*{_$ouvt*4BDTO7sQqfzBr-Cy%t}x^4%M zV(4%xc_tcv#dvxm5s~J58QAK`zAToB=zVlyj4O8g{Q+-ub;YBUqmR9wF$TCLCei#d zsf+iDc+_9Uz9q}2!Wo8h@5PtF2SdlJTu-gaAzBr67=>LrNX$O|a6a3RaXrE2tSVpT zb-UtpT0Y`5WsdH%w?%TQ!0$ZMJ|Ck`DK1`% z0NnwwkSIu^1uRKV#~R+eS%}~a#H{s|J1#)1+11^RbV#g;eS@12Y8q{UW`HwZ?fP|W zRRSkZUQizg*9GxWG5qZNm0=_YT_-1bm_WCz46-=1?X-QS_2>BGo-;2V>*J;^W8#id z<{AiQxz-#85On5T&4w!bpiOH^!U<`kg3E1>&Ilg;6roF%%&jYPMX&Ay`gIf$=x70p zVJ&FID*u+Ul6CkU3)~~eEXLL;=kxWEaIW%;Gf+7Nm z#b3T?qJQ$zmxIOz)DQAM+}*dKG>;W=M35r1Sx8<%hJ90KC;!QlLnxh50oIslusn}51ZU}=AIMYGjR4)?do z!7StX9z$fzSq_fLq3S9fmd|~C8yF|=1GcAbz4kspgLEMFGiPwX0=;rfY;3%UBL0 z^z>}}AN-SPC9dT{ZaxS=5>e{o$F)^eZINHtV;)LLO&uN@D&n^B83{RW-;SVyLee;L z1quoZL_pM!+}w{8Pw>o-vH_x8{xw%c4%~D?p79S*!AkYj8*V%+v zNVojQ9Q9xKphlDmZ{Z>yMzr9f>P^b;V7}R}XXEps1~|q9@ryA@u3}moI=A+R>L9QKsTHK7am3$^+T(2?_d;V8eofOkP|+^sehr&LQ2p z=ksUOrr*G_bMx~fSY>@YE&kDmK3 zpZIt9#J|HQ{vAH?@9>F#hfn+;5k5f%$QMP{}q&aIY}%!|VT z#EQ{p=V{-u#3G*<#IBN(lK28r3r}-%!-WD{A$l)<*VH12UiFsRX0@CM*tH!l^~3=lc-N^Uc$7mpdQaaPyFE4TO7lJBqRL;NR7kd+;5;J4x(qYy7^=#@^*Ym`#UZ0N^J^v&<{>(M%7l|e1^Bj+#8H2y z9v(aEzSrpX-XgjHVq|8yx6evuxjh~9ec{VNzj)p|oWM!KS*6s-mZY9*xfo|JO|W0( zEwB^PLsDcLakTJSk7P%clCnI{afJ53WctXL8Yw)4)Ss#YU!%WBOix;q$?f~(J>J8= z*#qzn7q42+%A)9Yf7D{W1x^g54e|VMl9IK@MHRE4-dFk||5wUk$y!ENCFu~PLf|do zb~#Rzk5CArQJd8;q!}=caX!5^^EK$Ao8ynKK@XPCzj41YQ1A3jxP-rrRGzdPfc~U7 zxU>o|kf4EZ+8d!ge+vtpr?A~E)sAF9q{60|X-Y_>;H;R$#BWf$A`jRO>5O(XE-&bG zZE*i+e3s(vWH;8Y&hp8&7kof=3W3tyWhf~W?SCURXwu_zGDm(y9Lufe`VM8W~Ij z>?EDSt}(tpDVG}JYj0}&A-3y^S2}JrCXBgA_4?{+i#h!|_1pabg^fHM|RQsX@=eYM|TS9IYDWfyLmD9lKOX-rCPSpHqGK z4*48Rv4VGD2ZPSsb>Y+YvM`eF@8EDK@VQ6@e?n2U<)W;pSc2mwEG)9Uz2D8+_93zjWS3RMl6g`GLqqw%Fyf8s6w)&gNOG#kkpiZZGG~e|t)T-uW=|6hw6`lS zpMec#t55;)*o=%gb%hD+#nHBB79M$-nL=P(zgL9<$qNky-3F9Y*+v2g|3#1OKGO2r z`*4V&ilXAht$~*}WstYbmGZrftDUH z2oA`gRXYti)G>G4#lH3F-m@(=@dhOa?iOv7$veOPbb|%9VFn&ynF==J!HnX7Nd?zE2!ueiR@qvfsj&4~ zumIlz>YKWd@uBTDia-Ryde_{~Y_Wk%0iMj}Dx0WXJGLJbpO94&s3sh{fwXu9xDQlS zKYjc-?C6FF+a=}|9L|V%2jn5O@QE6}^TU7v!X@{ND*<3~a%Ej{dakxDJ$-TrplF-^dbVO;Oe=qLFP#?xUhED zgmxL-lPNnzR~^t&bn@U+n)8ae&#}wtuPw!}!ZYY)Ao$V}(QL>t0kXfk%(Hgl1QqTm z3~v+PwUS{Hrt}Hc=6urk)7HHAk-t<8_hAVV9f z5S)F40E4z5>LK@fL}!P-=W8PlXk{GauZF=1Uf-f8Us&TIeb&Y{&nFvVo?V0>F+*d! ztQ7_%*DY`+nmIix^3--q(Y|O4>p!fxaO<%;fU>2{p}Q4s=fig7;ER2!X8%i~Uj4>M zX%04Wf?W5mJokhEm5HR-O!YIOr~==su&yTWuCQE`HwuAD72^~RLBozTSUMLWRfNO* z!;@T)N4K5sTX<|EOjJomdFHVYoWL+_!Ni+l=H$0_1Z51CS6E<~#>^-RW$22v>Bde| z$>}<_cE(McAv6(NQLdr%=_X$Y_#LtRK`KFg-c7`3oIWT$C=&N{!cvsn=W+=1*DsA1 z5WRs^?_>7NvQb6|)yIU}vKqN%uw$F*f8**!&;)`g2ZgS^PE?j(mY@-r@f!bvv0mRN zf2wF4Szr0uXCjRLPW40F-k6%7sxk|-^&J6l)+4~M+wFwL?vi>%#A_0EMp*^yjL_0L zwW$OTA)A0ID^={eY^-*(>Eo|{2=jw(SxQJ^p6`FP_Cl7q$CX!3mEiY<^Z!s~hU?qw z$eTp|lyUzF-iyjov#2wW79e%HG&xX9PBPZ|Ep}7O#O2`mV?9^2PM;g-%tP$yV*|kq z2@(N2@!zCEGf9Tmn4=r4yO;cnQC$*FOV~0~dsDT%YmoW7iH&{CPlrqej`-#KeKhdT ze`Ly7n9P&zb&P(t$tQbO%i)26U=KTY(5~%LYtw00{l9{pdN0pdB7T6fYg0y9p7fLF zR%|k*YhZ~yZrqWNge;QOvmGIbQHj3P)Q@cwPa11h@&`?v)(F8W$J9KcZwfBUUx$@7 zDn-}9m8rvn&1SUYf9v8sUCQS~%3I&4g-j@fr8+fBL4A-{yOBSP02ze%y)p6smpiu- z)_MJX8G%%3i7<>pV}RfSJkHX!yhEfSKIKR>#OXHw0!Vz|4JGn$8Uoo#BGt6tem!!QoX(t~g z+A>T*HpV}=Sp$QYC=L=tx4=Dsb=WL0AKXsbl^1#^L?wZ^J0H%`o|^pyzP>Kgu86us z^p$B8a~LOd0sg{L`F(^$LJYplLMgGN&^v~(g9i`wzTFUUB29u5pO7Lsz$a_JujfL( zHtl=Lm+unRej(W9UAj5$$a?RikW?!k*ZZodR&==+u6xhUTrvBJwV^-j0-O3rM8lk` z4vEWF#S`Z5RI%GaY=+HlRS@hC8(n|)dlN2QVD4nMxUjn%^DqFcC!mg zW-zwTb3sUBJ!cxs$t8mduHG=@!sJZj9GE)3)s=AMBfm^VOE+C95<)@NN=zkgiyf7P z54(*L$x3e%{_;P|#$;XSGJA?%-r4G9 z8)<|VA~wgJA|F%LHT-3L^O9P&%MVj!F%n5iW9EForh`hi<|bNh@sUmud!u=F68aamNsz zP*PR~0T52U`ot%T_-yCxy6$cQO^1#m&CChAH&l-?qRvI0o)VWYUzU}98W3<$ww<`P z+-d2s$*c3A-R5pe2WtNk>NTO1mo23Fj<}vbr)A{py z@Z~KvCpqR-!Vtk+L|Q8Bk67>#mxAQeGBrBc_D#zgy@=>BHKcOdKdO(}%6gJ%;lZLM z;Zdf2k$-&e`gD>sa*G-+%%HI~8e^%rk%IZBy=5o#H7YSw12MhPKPrrjPB5;V<-hqM z6o=U);I!1?*PzAZ<3y0Nf=7SV>pOgiKYo~kcS1J9zF}MB%7F3m{_O$9w%QcM|Ku7W zZ-03vLM(di|EcL#()=-FnqTDeRdPciIm=6;ce8%mZnM()TvxGm$SnP_>AjjpS>C!a zt0-*yvjd(&^d2}6)oQR(mQ9_~i!O`{kLTGl-1V#T^vpO_VtRTS;~#yR(FZ)OGkTSi z6BC5Pc9fNe$HrJn_CW@hub!QdaB-R-{(^Nq`0G}U=YFV=a7>#>^ZU9w*?6(o>}8Y@ zD82q?Miyt0p?`uAGq4OAJm=-DDVF`9@zEpIdLNXL>npa_!!f;JgF$9D96>xiA*83X zb56t^*~hcw*Ok=i8~JJF2(FiTiZ*h&7h;;lRZXFJulMC1q(4Mb5!EC zc6Q8Tl)t|LXiDt8vCp0%73)h&5>DUDOiw@Ovhre*|0*9JU*+oeXppP2aEN{gWknRD z4v17QFE7}CaUwu2guIPNx>He8!x^C4Nu(KBS=-0}LIYRjFh~FXj(Jyh36f=0JoGAE zR&jW9{l-5(bXN2F^)B$qKV47Z01Rk;`T13UsIigyfJXJC!hAxy-t^QIxaGz>F_}Ln z6z}7tPqCz#{T+FAyB`b&(YIM4Qkpv`5TYIKHGPD{5ixd{0)P-a55 z=m-laj#>N{E&Jld3yipZOfxuE18ldFq9PGA6pKHCAaosRL`)xAyGspE5!44GJ$QJG zQ@pRIofFgrILhR!F@)N&@$qL$j$@AFtdy_QI3z(mJnVN+m<9t%>~ByN`1trZRA7dJ zbQH5k@eM^VP8`7#z=!~atPbmdY&%Yfl9HG24t)-mG$BDzRkaX{2P9fBM&pbb0*MMv z88;lUIXF(U3x;zwHJlE!4gqHUJZ#%I7L@$R5ylcFp7T_Hi7_&cppgbMy*QX<%9!9w zu!@2T-HOKv+Zq}@I248;lfWl<>4OcHidT_Fsw&n!I#Zm8*^I_}@NexjLh-7ru?!K8 zfWf14gdZKp2l4cGb%l>P@`RTs5-VOIDq7}CfV;ye#F1?g-J1@$a85oIqGxy zWjpR;ie!RW3|D~&;YR!;xt~tM)$ z#%NL<-|%m&ZVnUzUcnHiZ4e=;tR zs%oR(+-Jw}_a&F-?fNf`wS6s#1qDkm*PWQA{`=fNECAbz9%`>{r>V<9GWLs(Wak1D zh6m@HtV|UvE_D&#m7z30_P1{tubttpF4nqTVDfn_PJaTTp+NR*t1u@yhjhnxO9Ij? zy^OIIu};@3pTCq>;I4iAQ>O_I%ccc;UgC%Ul$*?)t%fPHRrK3BOts6;Ufsd<8;O#A zO*p+^M;sR>=5T#2LN_vYZ07ohk}RuRut(l#E`WM2xR+~rcZeSc#MvEOG5-JYb~wP7 zyzJ~^i%Jl_L*bU2CoF!2OSB`gvQ`C!_OMz(!v}v-H?M`x*y?$<@8NJlo^Ad7R~bQ| zAqLOX7rJ}(jUCdG*NJP>HD03?VO}+A->$IzV20?A=&~VlCt5EjMv}-#Ayvjp9uYBZ z{I_~3?p`$-JO1@}zpw*;39P{4+{NYgvp;>_b)5^u+YTY7Io9A8OoQ*l9_v$*h(Ce0 zTD+fZ@RY%U*-tRd)Uq#%L1l{^_>`O{2*OKItEX0)9N4SUioflm@Ee>Ygwk`{#T!^5 zBn;-rU;A`~t2-Wa(DM?vv!uU<&6NAsMVfC1aYgoVRWJhHfpu|>65N+3#`%g9mTpmM-h0xQ7^9jQW1D5(Q6w!HZsgS5V*Q0V zRv|y8liSK2LSf=s;w34oNIONrbvx+A)|+$(1jgSw@Q$UPzt}lGjkkwolE=u{7rNPm z6Aeb>Nylq@8RJzNE4rZ@ZjsFTZ*|lD-rHzpT*e$v5N!=2Kj^y!BSpDI{B5KAdVf&W z1gNy$^B<7NkAXWIzEtTCYE6}}|7F3UhAhIYsX#Vr{=40*LVsNqv_EydkJrK#E^*}5 zA_!mBRkHJa2f++`O4#7AbzUO1};W! zV)3n1b^oGyC_S;Z_>OjP^!?9D@-%#9g3~O|fHHMpJj5@%RMIkpJsWCA*g6O0tXjacv=;K(x`AGN~ zzU6V-2bF33oxjI z%D!+Zo{hAD+}AT2B4pB@Dx0|FHJ=`DJUjkd(SbwAHVE;CofC3yl~?!tde1};!P{FZ zvDqRp{wQ^eu{sVqy@Avw;<#SgfpGn1n`H};_qgTqv2u?bFE=>-?q zg!7C3sCmc!J)9t)XYz_6hhN_ANgvOLJN`yLXkjg-+q$s+s1|Zrd!GUR58N>ZB`3Zf zqx2d-WRIw&19$e+vxUC8iXmi3(LwN&4i38KzhK%{|Jz1;vF`tmHrjBngt}eI-tyna z{m$NvOEmvH(j!4)tK)3{levg8cX&{C)&m-8`sylk58A0izx;{Zp3D0yeCABRgVvAnWjnvF@E9F4Een6lf^8Ul97*z zMI?n(gjGYIGS%d>5M1?+CM0+DPHIT-w!Zz9MWvYRof~@iH21^uS5Ucf`I!dV3;Yg* z_#GbMYarN`ccZ{{uf}r-b@3srrGF9E{!3YIqw+6h`S>LdmhA&Owj(+0m$ZBgS3L6Y z%Zkar!A8y6#f_GhHg3$)V#{vs0YtCx(JgRx#l^%}n3#0e6T?B(S7;tFdG9w%gaggz z_PO!E4&c<-^Vy(vv@648eGi9Oa{5cc)U4phvTQq}#FR?=7+DfdjTtPpvhWcJjW((T z$tlOx?2T9*Y3nD+Nx{$_`KYrp{8Yd?rqCK*>T^f7bN*j$*me3En`ba8k^k*)2MzHo zduVf>X~~Z^6fFtk#I>hxMg)xp6q3BTvg3`rp~QeS++a%uso z)GdWeo5>uv;%_@7D_WE*4 zi!Q$=p|WOTig(bcc7}_}^)VqtVpQnelzYUkJhK~;^Xz6JR2o z#Em4BQm3o-NIvH&LS9n>;#ma+j>tbCKs@m`vxAHxL*LqI=;}ht0J^A9L!fLthq`bV3q=_1(f!40qDA3n0wVXGv6W4L=1kd)6T|}W zFi_`;nz%TqqChDi^=Csx`B;*J-**%ks!LSlU}sN|kW5-8eX0uQ}#!n)Upz&i|n0D*bm087D1#2`I`0Q$%`jw zRMpit=Gs)y3?9|VsIL%P+2}5refMfsa(6#LS?>2rxy{ujdxCrN%IgS)eZfzj?~`W_ zPPjG_3NuGlGBh4)_x8-U#+y;KQGvH~xR_>F2CJM*BW_WaJnNX{^Bff*n3Ojfxip&g z#h^4vX&O@pZ8G~Y%l;|h9Xk=?>?LVC^ch$UD(xZYcLgxfix>CV7IOvcTcu|D-&l+t zTiCv6v+qZ9YL80ll%o;9!o;QNWs`4ts&ijz`BIh3dxtHb*PcwYyBbxs-ogJnA<*J^ zYP?FsD8X#y-TL}iV<5LbJ;Uqa(O!w0cvX6yivE>WZL;3feqvd8{Ng!+QP@+O;?;EZ z{>49vHcwxP#E7go?WhlJVh=)H^I9AF|NIe>^oo7k_2}{J&udwWJ5~+aJ5yvgpAUK& z*ECx|V=8GJdd`DqZ!LSc6ST<`SC)_7b?%_nx9|>WbL(oGW;|UfOcUj89e8!_MfVZ* zqQ;QA%;!oxzePO7bcMP(rdJkAm1@mB$jG8kTFAIl>b*Su!=1*>nK+>`5EK}QcG{nE zenG6GIZDj*=FJZ|>3)9oImTJ)+hIGpZit z>Ze_(p???ULt9GR{)uZ)c|Po|mvPt8+>U9_liQW#Z@ne%tIs*>W!wF6Rkpq@Kcl9V zifZEU;r_yx*3YHpDeA^Voq}Q?7hRG))k}D8tjT=;wPvevEjhtKnLFyTX9VMY<1Q2V z&{5Oj;*f=?k)JaH7DuX_zC7y;q+IV+Q8^Z+>LV2%a9_E~v+L`0%uTN;0r#c%r{vwJ zYHMDP3nscw7w_KbI3J$>WFvCIeb>yBiL?>S>dQ<$IwWrH zSt~4#8o3d}(ktZ=qEyj#bH+Tx`0L>^-@hbB{dCQU@@ zxR}$rzq$M2E>#cZkF}o~A(IDk^!Sl`In(NSOO}~Nygo;EvtjU^O_+zGjRe+U-SZJf z7g>q2k$Slw{ixJ?qzCmKD&{0+Fi_jch#v$qpP)cr`UH(q%zEMe5l{(MV8n^!Kz{W( zDswq4Y;4fro76%R1rU*vo~Rem5wGm&?9>5jiq4l`Q&mxIg&QBl(^pV4G#mu%yLH>P zKa>(Ex{8at*-MyVBa89dOZ#C|;>5n*hzmX4MQS@jRm%Eq4}QXwDd>EuMi{Ff8?x^x zVu(oCHy@dQYjo%pmZ2a{pJrho+$mNrO;jFBU&*)`Kp+0<>zPg_H&aYGmu8(>{bi;4 zt9Gv%Zc7z!6;mBi_!e@9?L??YnUYtBaIW=RqJ90lYwpQBjC@S#*EBrbDa-dJcZd&& zS7=hXb?Q7LCmggn;PTsZW0qk|B6Ps}$cW8Gwq$`%)b=XMu@NVmti^^Yvxm(Q8KId@ z6a;x~X`KGC{-@hgVGXSXJNGCw-D;1s82chRe7pV~ZD8W;oVa#%)RzLsqrZ;mPn_o! z6tXyCr}0PNJQi8&mq)s1iLvKJeI?c=M32ZMsYo3ts_$@#CPHQG?JzflLZC&0x|t14_CjNRzK+zP;br9``KzOoGtt9b7z85gUuYn zgwAzQ*z&P-e&+jklCxK_erMPuZ%Q4U9G^Yk$GYi##p}JjCp1IWeunBp)?sjP5Gc2< zjt+<&95jz1i23!L7Xc#u(0=FQ;#wkC+2W3Tg{^H4@=pM(@7^u)_ou4QfrFBnnb}wD zz@apadMIY*Dik->)s1()H3XJ!@<}ZRA}6TdO4ln3KbnnA64{@@u(iXdRfzG|G|J1v z@(c2FrB)BsS_i`F%}^Q9hxYFeiEMjodvmNiH~r5Q!{inhn(q5oEb=U7y=NO~*KcSR z^h8ok#_bqAz%srNy-PjCKrFWDd?VlQR!w93v_raz+aI!w$X=o_)GWY!#U!8OwA57N z#bEf*DzFm!1S;Yq#LE#T{W`)EGvBo7)V(+PaoxBBWS)GRi^UdaN%iB2P3nh(gEpeGX zuAHMZ#TSIulyRf0g7-2LrG2-S7`Is$YT3KJlaq;ubrAa{)Z%+kS;XFUS4{uXnJv<^ zb}7GXeQ1TIk9P`;)`Z+i9<^4&WFxdUsJ)dlZu4_((qf5mDf{%}+LPb0zan~bMiZ^} zq4>>oP}j-+rY3|?98ngEiZvH-R;N_t#csTO?RkACmi`$$z8g$(2Jlbpdni z+V$&mkT}2_7)9+VSOjBEo!*``OgWO6TbGc-(Zel%*`kN`^mdza&pYw7ZZU^AjQD@o zCDGL<(N$=EWykPnV)|pa@fKett&_pJEvC!D*wUOfsL1nIE{47RaPdZ*jR|v6AH*>j!e0q1aT|%m#;xc; zaQ2s|-+*^(*y8xa8-eeJ_wCifV4%w&MT-We0hg+EyXM65qTDcLv1f4B-|BgKt#CFW zBKJ6$P*ji`0{v!ac(__Udo`ZVuo}#zX@BDrXU?3_)GUiWm$LsO@^M5Tf%#q$E2cd$ zr*(IVdC*MS42JCPo@#k@KkI?8pio_Pc-dm=F>yJ-`*p%q-?Z5g^!qe=8}n~;}DU$yfbOGRNRMl z_q0;%hOiO8VxmC(E~N%DFB`_9!mn|IyVwr%p9u-*#`j-Gnsd@)--dl}jetSGgfa6{ ze)b=ioi}Hu<{sWV${N;Bdh~wmUkZ*YN)FKwT*FkRm4bGP zJ^bkuSy5)*YV1Q>$5m#2+#?j0m~QJUU-|+_+U}UEs#- zVte`h@ncqEhlR9&0&z>X>}2v%z9I41vjH(PZ72BF^o>jNQF#Y-Yq{QSwD0nvU5F}= z-1EhO)ftXa&Y087?eV7LsTS$MFpi1dE!kLT4!EFJ% zRjZXk>oODQy5?@eDZTq)2}}2M%{z-{j`3_+XH3Moh=YV59B|L!yKxPToWDkMNLl0~ zhw|z_w@-fPl~%!Hi8=WYr=7*#*5==%A2WWx9k4Y|XcN6})5nf6zZmz8QOanW^|~C+ zjOVcoJKMOqqeiSI_r9!RbEd!hsfX*U!Ze~0KlSV{rtnVhOz4E)5o#`JN;=_+w% ze6&HOwW!3+AFIV_W+8o}hZiJ^KiN+mB795j3(~38^7JyLQff%d{VfprydYwq=?UI3 zn&O8QpN&HJBeNAp4`Ak0SbyofZv1^$akIr#7~!-McYA&w-PFQE@{IsXOUv~;O!WwE z5dZ*sTMB&uA0Mg&xKZ1~ay>&}z=xv!;L;@Ok_qmMx>v4TxpQX*B1teA)7gJHUy=P| zJKAG|;>M&JBm~s5)6cOEa#vBxJ==4|A+nWqS=fgb>|THOYa9genGf*(qdxpuI^{N_ zC%DBuXw0Y-QBP_RPnD{W68EpEm~S>(1@^;b!;k5nl6x)Fl-^HCwCuJjzU}x({V-Sm zi%Zj6+^=b0U z5D*Y2DN0Wlu@W6$tc*5@R#A$1PbK)h+rD(-qG>Q+kE{q5B>dmgTs+h_7rw&liE>av$aa(laP zSO-$EkxpTjRa?zM+~kph?M^eqiXlJ7arnHKjf@xSrYr2n&=B$~C@3gzzx8t}JDXRc zQYAu2$xU(Th?wKh$jB_EM@!rVNE)~hrwz`Z-(>aO;MOe?U$r|d!dMeg2`C~^;?Cim zfZ1J{ssQCX4_pYK3vM0HptgZ-0VJ8P>47R**3xy=l&KrI`Fox`m40ox*%@EWzP)c( zu*-{xy>sMRu5%DA+{A0Gt)(E&as!@fya)Da}-ZZ!hLY7yd)#@ z5hjj&^QM^oyQoozGzcWW4bGh-Q<{cz@eVXQGc&Wxm%pH_VCT-ATQ}c_4&%iWwsv-d z6*J(b)z;Q-zW*AnGeh+~C@Cl?cJIziPfwsKO;(CfQ&j~y9(NuZ8mg|P1y+YHp%T|j zwxQ{@ooGYr=HenMc~wK>RZvh>&M$bhS-K?HbR$xWl z-@Sv}3r7)&#O2*2YQ{M)-z>q(HvbbTkT?N<$~0aHb^h1 zWPw9)LOlmPD~EjV==yB}?mHW;eJIqdk zZWQP2?`mfDCLloNzn>eWNauIzN=ZwTlsfH(FU=T!Ofz$HcL#4KI6B(ez<|%B;T33l zF(?CZzqY*sH-fvOr47OmVUl-(aA(|AT3QMx_g!(ZmbNw&3`$TFaEv-3DJdj06v2Hq zrx;KoP`bd$$>EH6`4UwwQfV%$Yik$~eqe+D{b7^%`l>dMvTlJa#95E7YLY0iz*+^J zO#IFd@*`NlJRBVLcx1qRfgmFkyK&>#S&xQSd{9$xg}y!rbYOx(?WHa!Jt|5Uz#?8j zjnOkk$#UDDb~sb-5lhw;&9-o1P(oo4IjBNXgTh1UsBdVn#6u~I_`>b zG4I&csl=R`>U{CvV+o4W(n?YALmEEH|6ym*Js-p};_6)8;UJL8Z|>CXV;R_VGFZN( z?auNZcKYuBeu@KEwu?4t^xml+581h(U>q#$C)TKsq)*Y^xt8G;xd<*%mSD|qU7m-S z92#;0c=Jp|3_4C7s`8&)IkT-Usc%%=Ve8RDj*ao$0pHqP*hE z{9VMf?xwD8yPKDqAM>3RKad|?sOvbEu~$~e`#J7UTjt2?Pzi2>`1bZ-`>m^13wOfU zg4CYY{43utq2QIJ`b%$0H8u6mhf)59oFHn+Rz+z(HTj~r zy0e)ur{FZDm>;Y33$Wjz(IsjhG4!J9QWS#Il{1aUy-$v1 z=W%YYAQ7u$ygq-vc!Ibms9(F0z!l`^JK(J}*zCAN@D}NHFg%%t;X*qUBkLf$-A!}Uz^B|!f^=#Q>O#Ywh#cQt4rv$K2jjv^4{xcdR%O; zdH0SbZ$I1G3zH8#h9|NuuBlG`h+v7azra4>5#;TccS->dd`F9~YmwYush4?F`{VX- z$Q+5QE%7xi#VN|0D!r*MxX%jN%^F>^5!7`nNNc|8aVBYqNFmLEi@D^;QboBxE?|0( z2#q*X!b$=;Zijtb%b_&Uo+?P!MUi!~z+Tq8q~E`;+sFA6a>e5h*VK7^*ZXQx4aTbH8ZPE z>N9#*_e?;|X+fVg*g>DYL@Fh7H6bqZ>xqHQq>I^8_(=5qZKZ2472 zgmX$|Ed+^sf5Ut{GNu^&hsqcC@Hx>|h6<~>Kxc&f;~`G$qc`Zfdx_3lh% zJI5MaxtKky3P$%;QAV85Nw`v?O60+8)*x!oeuH9h4%Z_eTos) zF~%YW`XgOiEY}Vyck;*Gqvn7AEvB!RTG2`B;_NF!#L*_>>FHJ{Lv581AUbp^<7$C+ zh|e=fU5pxhvOJ6_p=hkm8<{;BnL$;0WOHqy242;#+D>A_#asc;XG23(5I`2}lK1mX zj_bI;x?;(z9j~aR422tCx_L1+br(cL^*AVOE7PRc-mdNXE%;tMt_Dr7myK66EpUJC zwjcBIJDrrfJ zGJ3$fw=|U9oZ;Ekw%1NAr*5z?8NEymmuhE%FK)MkUZgu>zqtjvfHfA-!7Sabsd79u6%*F;5G*~@Z7x`fxBN^-uQPb6D0_S? zhiTnx3U9jvTh=-F(Ej<#nekx}DGgj19>pmcMzvPHTYDW|ucgPFpe@z8$|M<~JmuwS z(Nbl&_wRi<%__j^=3ZdyX=t<%5DrjocA9BCY$OmSdAB<}d#dxsa^^YiqBqz~))(6J zBm-l6fKq<$M(^J;uH!pkH44L4DmFP@BgLb`0p8C;23+wYzZ*~4&gHS1_bn3h{v8U_ zy6z!=Os|^m7s1`XXJa6wz~{@-%tbTFZItWGtVDbOB~w)wAEsq7ao5@b`brBH=L=hQ zVpZ-^@8XYpox5QhevdR1GO7|YG@ge{ezXf231D%&WO&vE;_Drx0$E#bN$Vo)uQ7j`b*|u6{~X}WXw=#B3!vAd)Bj=oZ#L{Q=T26lJ+2-O}@`iJ;q*QzV$}k z?GMUrgkQ+4 zd$@D|1)7tiP|LW6O=r0#YNJLhs_#bHZ~8WJ7&C*vJWjS z759)hN?HD5^r^Gon+IjORefxgZJa%#mNmSFzJ1m^&1i$q$CsU$y3+Fgs%ZRm(fB;y zksr~thDNPV5_5jh*<9yVPrq)P=O|uZpf^HneI7QhMCWkW`vZ^jc(UrdGfSD?59&BtUT-

Anlwd% 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 diff --git a/plugins/jenkins/src/components/BuildsPage/lib/CITable/CITable.tsx b/plugins/jenkins/src/components/BuildsPage/lib/CITable/CITable.tsx index b0a8b84718..6fc5f2d35c 100644 --- a/plugins/jenkins/src/components/BuildsPage/lib/CITable/CITable.tsx +++ b/plugins/jenkins/src/components/BuildsPage/lib/CITable/CITable.tsx @@ -13,20 +13,17 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { Link, Progress, Table, TableColumn } from '@backstage/core-components'; -import { alertApiRef, useApi, useRouteRef } from '@backstage/core-plugin-api'; -import { useEntityPermission } from '@backstage/plugin-catalog-react/alpha'; -import { Box, IconButton, Tooltip, Typography } from '@material-ui/core'; +import { Link, Table, TableColumn } from '@backstage/core-components'; +import { useRouteRef } from '@backstage/core-plugin-api'; +import { Box, IconButton, Typography } from '@material-ui/core'; import RetryIcon from '@material-ui/icons/Replay'; import VisibilityIcon from '@material-ui/icons/Visibility'; -import { default as React, useState } from 'react'; +import { default as React } from 'react'; import { Project } from '../../../../api/JenkinsApi'; import JenkinsLogo from '../../../../assets/JenkinsLogo.svg'; import { buildRouteRef } from '../../../../plugin'; import { useBuilds } from '../../../useBuilds'; import { JenkinsRunStatus } from '../Status'; -import { jenkinsExecutePermission } from '@backstage/plugin-jenkins-common'; -import { useJenkinsPluginOptions } from '../../../../options'; const FailCount = ({ count }: { count: number }): JSX.Element | null => { if (count !== 0) { @@ -176,64 +173,16 @@ const generatedColumns: TableColumn[] = [ title: 'Actions', sorting: false, render: (row: Partial) => { - const ActionWrapper = () => { - const [isLoadingRebuild, setIsLoadingRebuild] = useState(false); - const { allowed, loading } = useEntityPermission( - jenkinsExecutePermission, - ); - - const alertApi = useApi(alertApiRef); - - const onRebuild = async () => { - if (row.onRestartClick) { - setIsLoadingRebuild(true); - try { - await row.onRestartClick(); - alertApi.post({ - message: 'Jenkins re-build has successfully executed', - severity: 'success', - }); - } catch (e) { - alertApi.post({ - message: `Jenkins re-build has failed. Error: ${e.message}`, - severity: 'error', - }); - } finally { - setIsLoadingRebuild(false); - } - } - }; - - const { tableAction } = useJenkinsPluginOptions(); - - if (tableAction === 'view') { - return row.lastBuild?.url ? ( - - - - ) : null; - } else if (tableAction === 'replay') { - return row.lastBuild?.url ? ( - - - - ) : null; - } - - return ( - - <> - {isLoadingRebuild && } - {!isLoadingRebuild && ( - - - - )} - - - ); - }; - return ; + return row.lastBuild?.url ? ( +

+ + + + + + +
+ ) : null; }, width: '10%', }, diff --git a/plugins/jenkins/src/options.ts b/plugins/jenkins/src/options.ts deleted file mode 100644 index f78e6a75e9..0000000000 --- a/plugins/jenkins/src/options.ts +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2020 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { usePluginOptions } from '@backstage/core-plugin-api/alpha'; - -export type JenkinsPluginOptions = { - tableAction: string; -}; - -/** @ignore */ -export type JenkinsInputPluginOptions = { - tableAction: string; -}; - -export const useJenkinsPluginOptions = () => - usePluginOptions(); diff --git a/plugins/jenkins/src/plugin.ts b/plugins/jenkins/src/plugin.ts index ddef0a7dfd..7dbb6bfde1 100644 --- a/plugins/jenkins/src/plugin.ts +++ b/plugins/jenkins/src/plugin.ts @@ -25,7 +25,6 @@ import { identityApiRef, } from '@backstage/core-plugin-api'; import { JenkinsClient, jenkinsApiRef } from './api'; -import { JenkinsInputPluginOptions, JenkinsPluginOptions } from './options'; /** @public */ export const rootRouteRef = createRouteRef({ @@ -53,14 +52,6 @@ export const jenkinsPlugin = createPlugin({ routes: { entityContent: rootRouteRef, }, - __experimentalConfigure( - options?: JenkinsInputPluginOptions, - ): JenkinsPluginOptions { - const defaultOptions = { - tableAction: 'rebuild', - }; - return { ...defaultOptions, ...options }; - }, }); /** @public */ From 5cda5e93387a71deaeaed1d07587f908faff87f1 Mon Sep 17 00:00:00 2001 From: Tim Soslow Date: Tue, 9 May 2023 19:26:49 -0500 Subject: [PATCH 059/213] Update JenkinsAPI to replay build This uses the Jenkins API directly because Jenkins SDK does not have support for replay Signed-off-by: Tim Soslow Signed-off-by: Christopher Diaz --- .changeset/real-baboons-vanish.md | 5 +- plugins/jenkins-backend/package.json | 1 + .../src/service/jenkinsApi.test.ts | 86 ++++++++----------- .../jenkins-backend/src/service/jenkinsApi.ts | 44 +++++----- plugins/jenkins-backend/src/service/router.ts | 14 +-- 5 files changed, 72 insertions(+), 78 deletions(-) diff --git a/.changeset/real-baboons-vanish.md b/.changeset/real-baboons-vanish.md index 9c4a19cd49..ca09cc9bf3 100644 --- a/.changeset/real-baboons-vanish.md +++ b/.changeset/real-baboons-vanish.md @@ -1,5 +1,8 @@ --- +'@backstage/plugin-jenkins-backend': minor '@backstage/plugin-jenkins': minor --- -Updated action column in Jenkins CI/CD table to include links to view and replay. The API based rebuild action was replaced because it does not work for Jenkins workflows that have parameters. +Updated rebuild to use Jenkins API replay build, which works for Jenkins jobs that have required parameters. Jenkins SDK could not be used for this request because it does not have support for replay. + +Added link to view build in Jenkins CI/CD table action column. diff --git a/plugins/jenkins-backend/package.json b/plugins/jenkins-backend/package.json index 4f58776df7..07624593c3 100644 --- a/plugins/jenkins-backend/package.json +++ b/plugins/jenkins-backend/package.json @@ -36,6 +36,7 @@ "express": "^4.17.1", "express-promise-router": "^4.1.0", "jenkins": "^1.0.0", + "node-fetch": "^2.6.7", "winston": "^3.2.1", "yn": "^4.0.0" }, diff --git a/plugins/jenkins-backend/src/service/jenkinsApi.test.ts b/plugins/jenkins-backend/src/service/jenkinsApi.test.ts index c89a3866c7..aa4866a263 100644 --- a/plugins/jenkins-backend/src/service/jenkinsApi.test.ts +++ b/plugins/jenkins-backend/src/service/jenkinsApi.test.ts @@ -19,9 +19,10 @@ import jenkins from 'jenkins'; import { JenkinsInfo } from './jenkinsInfoProvider'; import { JenkinsBuild, JenkinsProject } from '../types'; import { AuthorizeResult } from '@backstage/plugin-permission-common'; -import { NotAllowedError } from '@backstage/errors'; +import fetch, { Response } from 'node-fetch'; jest.mock('jenkins'); +jest.mock('node-fetch'); const mockedJenkinsClient = { job: { get: jest.fn(), @@ -34,7 +35,6 @@ const mockedJenkinsClient = { const mockedJenkins = jenkins as jest.Mocked; mockedJenkins.mockReturnValue(mockedJenkinsClient); -const resourceRef = 'component:default/example-component'; const jobFullName = 'example-jobName/foo'; const buildNumber = 19; const jenkinsInfo: JenkinsInfo = { @@ -54,6 +54,7 @@ const fakePermissionApi = { describe('JenkinsApi', () => { const jenkinsApi = new JenkinsApiImpl(fakePermissionApi); + const mockFetch = fetch as jest.MockedFunction; describe('getProjects', () => { const project: JenkinsProject = { @@ -689,55 +690,44 @@ describe('JenkinsApi', () => { buildNumber, ); }); - it('buildProject', async () => { - await jenkinsApi.buildProject(jenkinsInfo, jobFullName, resourceRef); + it('getBuildUrl', async () => { + const jenkinsApiProto = Object.getPrototypeOf(jenkinsApi); + const buildUrl = jenkinsApiProto.getBuildUrl( + jenkinsInfo, + jobFullName, + buildNumber, + ); + expect(buildUrl).toEqual( + 'https://jenkins.example.com/job/example-jobName/job/foo/19', + ); - expect(mockedJenkins).toHaveBeenCalledWith({ - baseUrl: jenkinsInfo.baseUrl, - headers: jenkinsInfo.headers, - promisify: true, - }); - expect(mockedJenkinsClient.job.build).toHaveBeenCalledWith(jobFullName); + const buildUrlTriple = jenkinsApiProto.getBuildUrl( + jenkinsInfo, + 'example-jobName/foo/bar', + buildNumber, + ); + expect(buildUrlTriple).toEqual( + 'https://jenkins.example.com/job/example-jobName/job/foo/job/bar/19', + ); }); - - it('buildProject should fail if it does not have required permissions', async () => { - fakePermissionApi.authorize.mockResolvedValueOnce([ - { - result: AuthorizeResult.DENY, - }, - ]); - - await expect(() => - jenkinsApi.buildProject(jenkinsInfo, jobFullName, resourceRef), - ).rejects.toThrow(NotAllowedError); - }); - - it('buildProject should succeed if it have required permissions', async () => { - fakePermissionApi.authorize.mockResolvedValueOnce([ - { - result: AuthorizeResult.ALLOW, - }, - ]); - - await jenkinsApi.buildProject(jenkinsInfo, jobFullName, resourceRef); - expect(mockedJenkins).toHaveBeenCalledWith({ - baseUrl: jenkinsInfo.baseUrl, - headers: jenkinsInfo.headers, - promisify: true, + describe('rebuildProject', () => { + it('successfully rebuilds', async () => { + mockFetch.mockResolvedValue({ status: 200 } as Response); + const status = await jenkinsApi.rebuildProject( + jenkinsInfo, + jobFullName, + buildNumber, + ); + expect(status).toEqual(200); }); - expect(mockedJenkinsClient.job.build).toHaveBeenCalledWith(jobFullName); - }); - - it('buildProject with crumbIssuer option', async () => { - const info: JenkinsInfo = { ...jenkinsInfo, crumbIssuer: true }; - await jenkinsApi.buildProject(info, jobFullName, resourceRef); - - expect(mockedJenkins).toHaveBeenCalledWith({ - baseUrl: jenkinsInfo.baseUrl, - headers: jenkinsInfo.headers, - promisify: true, - crumbIssuer: true, + it('fails to rebuild', async () => { + mockFetch.mockResolvedValue({ status: 401 } as Response); + const status = await jenkinsApi.rebuildProject( + jenkinsInfo, + jobFullName, + buildNumber, + ); + expect(status).toEqual(401); }); - expect(mockedJenkinsClient.job.build).toHaveBeenCalledWith(jobFullName); }); }); diff --git a/plugins/jenkins-backend/src/service/jenkinsApi.ts b/plugins/jenkins-backend/src/service/jenkinsApi.ts index e14437fa68..4ddeeea538 100644 --- a/plugins/jenkins-backend/src/service/jenkinsApi.ts +++ b/plugins/jenkins-backend/src/service/jenkinsApi.ts @@ -29,6 +29,7 @@ import { } from '@backstage/plugin-permission-common'; import { jenkinsExecutePermission } from '@backstage/plugin-jenkins-common'; import { NotAllowedError } from '@backstage/errors'; +import fetch, { HeaderInit } from 'node-fetch'; export class JenkinsApiImpl { private static readonly lastBuildTreeSpec = `lastBuild[ @@ -144,32 +145,20 @@ export class JenkinsApiImpl { * Trigger a build of a project * @see ../../../jenkins/src/api/JenkinsApi.ts#retry */ - async buildProject( + async rebuildProject( jenkinsInfo: JenkinsInfo, jobFullName: string, - resourceRef: string, - options?: { token?: string }, - ) { - const client = await JenkinsApiImpl.getClient(jenkinsInfo); + buildNumber: number, + ): Promise { + const buildUrl = this.getBuildUrl(jenkinsInfo, jobFullName, buildNumber); - if (this.permissionApi) { - const response = await this.permissionApi.authorize( - [{ permission: jenkinsExecutePermission, resourceRef }], - { token: options?.token }, - ); - // permission api returns always at least one item, we need to check only one result since we do not expect any additional results - const { result } = response[0]; - if (result === AuthorizeResult.DENY) { - throw new NotAllowedError(); - } - } - - // looks like the current SDK only supports triggering a new build - // can't see any support for replay (re-running the specific build with the same SCM info) - - // Note Jenkins itself has concepts of rebuild and replay on a job. - // The latter should be possible to trigger with a POST to /replay/rebuild - await client.job.build(jobFullName); + // the current SDK only supports triggering a new build + // replay the job by triggering request directly from Jenkins api + const response = await fetch(`${buildUrl}/replay/rebuild`, { + method: 'post', + headers: jenkinsInfo.headers as HeaderInit, + }); + return response.status; } // private helper methods @@ -318,4 +307,13 @@ export class JenkinsApiImpl { }) .pop(); } + + private getBuildUrl( + jenkinsInfo: JenkinsInfo, + jobFullName: string, + buildId: number, + ): string { + const jobs = jobFullName.split('/'); + return `${jenkinsInfo.baseUrl}/job/${jobs.join('/job/')}/${buildId}`; + } } diff --git a/plugins/jenkins-backend/src/service/router.ts b/plugins/jenkins-backend/src/service/router.ts index df4c3b5a11..eb29d5d019 100644 --- a/plugins/jenkins-backend/src/service/router.ts +++ b/plugins/jenkins-backend/src/service/router.ts @@ -147,7 +147,8 @@ export async function createRouter( router.post( '/v1/entity/:namespace/:kind/:name/job/:jobFullName/:buildNumber::rebuild', async (request, response) => { - const { namespace, kind, name, jobFullName } = request.params; + const { namespace, kind, name, jobFullName, buildNumber } = + request.params; const token = getBearerTokenFromAuthorizationHeader( request.header('authorization'), ); @@ -161,11 +162,12 @@ export async function createRouter( backstageToken: token, }); - const resourceRef = stringifyEntityRef({ kind, namespace, name }); - await jenkinsApi.buildProject(jenkinsInfo, jobFullName, resourceRef, { - token, - }); - response.json({}); + const status = await jenkinsApi.rebuildProject( + jenkinsInfo, + jobFullName, + parseInt(buildNumber, 10), + ); + response.json({}).status(status); }, ); router.use(errorHandler()); From 170f1e5bfccfcd2de7cb31fd235f8530a1f82f60 Mon Sep 17 00:00:00 2001 From: Tim Soslow Date: Tue, 9 May 2023 19:30:59 -0500 Subject: [PATCH 060/213] Commit yarn.lock Signed-off-by: Tim Soslow Signed-off-by: Christopher Diaz --- yarn.lock | 1 + 1 file changed, 1 insertion(+) diff --git a/yarn.lock b/yarn.lock index deac1514d8..82626c846e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7294,6 +7294,7 @@ __metadata: express-promise-router: ^4.1.0 jenkins: ^1.0.0 msw: ^1.0.0 + node-fetch: ^2.6.7 supertest: ^6.1.6 winston: ^3.2.1 yn: ^4.0.0 From 76524fbcfbcfc4ace038838433223997eceef157 Mon Sep 17 00:00:00 2001 From: Tim Soslow Date: Tue, 9 May 2023 21:28:14 -0500 Subject: [PATCH 061/213] Cleanup obsolete code Signed-off-by: Tim Soslow Signed-off-by: Christopher Diaz --- plugins/jenkins-backend/api-report.md | 4 --- .../src/service/jenkinsApi.test.ts | 12 +-------- .../jenkins-backend/src/service/jenkinsApi.ts | 8 ------ plugins/jenkins-backend/src/service/router.ts | 25 +++---------------- 4 files changed, 4 insertions(+), 45 deletions(-) diff --git a/plugins/jenkins-backend/api-report.md b/plugins/jenkins-backend/api-report.md index fd1365547d..4893592483 100644 --- a/plugins/jenkins-backend/api-report.md +++ b/plugins/jenkins-backend/api-report.md @@ -8,8 +8,6 @@ import { CompoundEntityRef } from '@backstage/catalog-model'; import { Config } from '@backstage/config'; import express from 'express'; import { Logger } from 'winston'; -import { PermissionAuthorizer } from '@backstage/plugin-permission-common'; -import { PermissionEvaluator } from '@backstage/plugin-permission-common'; // @public (undocumented) export function createRouter(options: RouterOptions): Promise; @@ -85,7 +83,5 @@ export interface RouterOptions { jenkinsInfoProvider: JenkinsInfoProvider; // (undocumented) logger: Logger; - // (undocumented) - permissions?: PermissionEvaluator | PermissionAuthorizer; } ``` diff --git a/plugins/jenkins-backend/src/service/jenkinsApi.test.ts b/plugins/jenkins-backend/src/service/jenkinsApi.test.ts index aa4866a263..3ae49d89f1 100644 --- a/plugins/jenkins-backend/src/service/jenkinsApi.test.ts +++ b/plugins/jenkins-backend/src/service/jenkinsApi.test.ts @@ -18,7 +18,6 @@ import { JenkinsApiImpl } from './jenkinsApi'; import jenkins from 'jenkins'; import { JenkinsInfo } from './jenkinsInfoProvider'; import { JenkinsBuild, JenkinsProject } from '../types'; -import { AuthorizeResult } from '@backstage/plugin-permission-common'; import fetch, { Response } from 'node-fetch'; jest.mock('jenkins'); @@ -43,17 +42,8 @@ const jenkinsInfo: JenkinsInfo = { jobFullName: 'example-jobName', }; -const fakePermissionApi = { - authorize: jest.fn().mockResolvedValue([ - { - result: AuthorizeResult.ALLOW, - }, - ]), - authorizeConditional: jest.fn(), -}; - describe('JenkinsApi', () => { - const jenkinsApi = new JenkinsApiImpl(fakePermissionApi); + const jenkinsApi = new JenkinsApiImpl(); const mockFetch = fetch as jest.MockedFunction; describe('getProjects', () => { diff --git a/plugins/jenkins-backend/src/service/jenkinsApi.ts b/plugins/jenkins-backend/src/service/jenkinsApi.ts index 4ddeeea538..e7c20e04df 100644 --- a/plugins/jenkins-backend/src/service/jenkinsApi.ts +++ b/plugins/jenkins-backend/src/service/jenkinsApi.ts @@ -23,12 +23,6 @@ import type { JenkinsProject, ScmDetails, } from '../types'; -import { - AuthorizeResult, - PermissionEvaluator, -} from '@backstage/plugin-permission-common'; -import { jenkinsExecutePermission } from '@backstage/plugin-jenkins-common'; -import { NotAllowedError } from '@backstage/errors'; import fetch, { HeaderInit } from 'node-fetch'; export class JenkinsApiImpl { @@ -65,8 +59,6 @@ export class JenkinsApiImpl { ${JenkinsApiImpl.jobTreeSpec} ]{0,50}`; - constructor(private readonly permissionApi?: PermissionEvaluator) {} - /** * Get a list of projects for the given JenkinsInfo. * @see ../../../jenkins/src/api/JenkinsApi.ts#getProjects diff --git a/plugins/jenkins-backend/src/service/router.ts b/plugins/jenkins-backend/src/service/router.ts index eb29d5d019..5f82f5e933 100644 --- a/plugins/jenkins-backend/src/service/router.ts +++ b/plugins/jenkins-backend/src/service/router.ts @@ -20,41 +20,22 @@ import Router from 'express-promise-router'; import { Logger } from 'winston'; import { JenkinsInfoProvider } from './jenkinsInfoProvider'; import { JenkinsApiImpl } from './jenkinsApi'; -import { - PermissionAuthorizer, - PermissionEvaluator, - toPermissionEvaluator, -} from '@backstage/plugin-permission-common'; import { getBearerTokenFromAuthorizationHeader } from '@backstage/plugin-auth-node'; -import { stringifyEntityRef } from '@backstage/catalog-model'; import { stringifyError } from '@backstage/errors'; /** @public */ export interface RouterOptions { logger: Logger; jenkinsInfoProvider: JenkinsInfoProvider; - permissions?: PermissionEvaluator | PermissionAuthorizer; } /** @public */ export async function createRouter( options: RouterOptions, ): Promise { - const { jenkinsInfoProvider, permissions, logger } = options; + const { jenkinsInfoProvider } = options; - let permissionEvaluator: PermissionEvaluator | undefined; - if (permissions && 'authorizeConditional' in permissions) { - permissionEvaluator = permissions as PermissionEvaluator; - } else { - logger.warn( - 'PermissionAuthorizer is deprecated. Please use an instance of PermissionEvaluator instead of PermissionAuthorizer in PluginEnvironment#permissions', - ); - permissionEvaluator = permissions - ? toPermissionEvaluator(permissions) - : undefined; - } - - const jenkinsApi = new JenkinsApiImpl(permissionEvaluator); + const jenkinsApi = new JenkinsApiImpl(); const router = Router(); router.use(express.json()); @@ -145,7 +126,7 @@ export async function createRouter( ); router.post( - '/v1/entity/:namespace/:kind/:name/job/:jobFullName/:buildNumber::rebuild', + '/v1/entity/:namespace/:kind/:name/job/:jobFullName/:buildNumber', async (request, response) => { const { namespace, kind, name, jobFullName, buildNumber } = request.params; From 2002e2d6c5c6937ea773c707f5e3b6eb499fb6ea Mon Sep 17 00:00:00 2001 From: Tim Soslow Date: Tue, 9 May 2023 21:58:46 -0500 Subject: [PATCH 062/213] Restore table action rebuild Signed-off-by: Tim Soslow Signed-off-by: Christopher Diaz --- .../BuildsPage/lib/CITable/CITable.tsx | 69 +++++++++++++++---- 1 file changed, 55 insertions(+), 14 deletions(-) diff --git a/plugins/jenkins/src/components/BuildsPage/lib/CITable/CITable.tsx b/plugins/jenkins/src/components/BuildsPage/lib/CITable/CITable.tsx index 6fc5f2d35c..f2d108eaf7 100644 --- a/plugins/jenkins/src/components/BuildsPage/lib/CITable/CITable.tsx +++ b/plugins/jenkins/src/components/BuildsPage/lib/CITable/CITable.tsx @@ -13,17 +13,19 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { Link, Table, TableColumn } from '@backstage/core-components'; -import { useRouteRef } from '@backstage/core-plugin-api'; -import { Box, IconButton, Typography } from '@material-ui/core'; +import { Link, Progress, Table, TableColumn } from '@backstage/core-components'; +import { alertApiRef, useApi, useRouteRef } from '@backstage/core-plugin-api'; +import { useEntityPermission } from '@backstage/plugin-catalog-react/alpha'; +import { Box, IconButton, Tooltip, Typography } from '@material-ui/core'; import RetryIcon from '@material-ui/icons/Replay'; import VisibilityIcon from '@material-ui/icons/Visibility'; -import { default as React } from 'react'; +import { default as React, useState } from 'react'; import { Project } from '../../../../api/JenkinsApi'; import JenkinsLogo from '../../../../assets/JenkinsLogo.svg'; import { buildRouteRef } from '../../../../plugin'; import { useBuilds } from '../../../useBuilds'; import { JenkinsRunStatus } from '../Status'; +import { jenkinsExecutePermission } from '@backstage/plugin-jenkins-common'; const FailCount = ({ count }: { count: number }): JSX.Element | null => { if (count !== 0) { @@ -173,16 +175,55 @@ const generatedColumns: TableColumn[] = [ title: 'Actions', sorting: false, render: (row: Partial) => { - return row.lastBuild?.url ? ( -
- - - - - - -
- ) : null; + const ActionWrapper = () => { + const [isLoadingRebuild, setIsLoadingRebuild] = useState(false); + const { allowed, loading } = useEntityPermission( + jenkinsExecutePermission, + ); + + const alertApi = useApi(alertApiRef); + + const onRebuild = async () => { + if (row.onRestartClick) { + setIsLoadingRebuild(true); + try { + await row.onRestartClick(); + alertApi.post({ + message: 'Jenkins re-build has successfully executed', + severity: 'success', + }); + } catch (e) { + alertApi.post({ + message: `Jenkins re-build has failed. Error: ${e.message}`, + severity: 'error', + }); + } finally { + setIsLoadingRebuild(false); + } + } + }; + + return ( +
+ {row.lastBuild?.url && ( + + + + + + )} + {isLoadingRebuild && } + {!isLoadingRebuild && ( + + + + + + )} +
+ ); + }; + return ; }, width: '10%', }, From 10580e3573c35a539837a368327b9a5eaaa4b4fd Mon Sep 17 00:00:00 2001 From: Tim Soslow Date: Wed, 10 May 2023 16:56:33 -0500 Subject: [PATCH 063/213] Re-add permission check and crumb issuer support Signed-off-by: Tim Soslow Signed-off-by: Christopher Diaz --- plugins/jenkins-backend/api-report.md | 4 + .../src/service/jenkinsApi.test.ts | 109 +++++++++++++++++- .../jenkins-backend/src/service/jenkinsApi.ts | 57 ++++++++- plugins/jenkins-backend/src/service/router.ts | 28 ++++- 4 files changed, 192 insertions(+), 6 deletions(-) diff --git a/plugins/jenkins-backend/api-report.md b/plugins/jenkins-backend/api-report.md index 4893592483..fd1365547d 100644 --- a/plugins/jenkins-backend/api-report.md +++ b/plugins/jenkins-backend/api-report.md @@ -8,6 +8,8 @@ import { CompoundEntityRef } from '@backstage/catalog-model'; import { Config } from '@backstage/config'; import express from 'express'; import { Logger } from 'winston'; +import { PermissionAuthorizer } from '@backstage/plugin-permission-common'; +import { PermissionEvaluator } from '@backstage/plugin-permission-common'; // @public (undocumented) export function createRouter(options: RouterOptions): Promise; @@ -83,5 +85,7 @@ export interface RouterOptions { jenkinsInfoProvider: JenkinsInfoProvider; // (undocumented) logger: Logger; + // (undocumented) + permissions?: PermissionEvaluator | PermissionAuthorizer; } ``` diff --git a/plugins/jenkins-backend/src/service/jenkinsApi.test.ts b/plugins/jenkins-backend/src/service/jenkinsApi.test.ts index 3ae49d89f1..3c52949268 100644 --- a/plugins/jenkins-backend/src/service/jenkinsApi.test.ts +++ b/plugins/jenkins-backend/src/service/jenkinsApi.test.ts @@ -18,7 +18,9 @@ import { JenkinsApiImpl } from './jenkinsApi'; import jenkins from 'jenkins'; import { JenkinsInfo } from './jenkinsInfoProvider'; import { JenkinsBuild, JenkinsProject } from '../types'; +import { AuthorizeResult } from '@backstage/plugin-permission-common'; import fetch, { Response } from 'node-fetch'; +import { ResponseError } from '@backstage/errors'; jest.mock('jenkins'); jest.mock('node-fetch'); @@ -34,6 +36,7 @@ const mockedJenkinsClient = { const mockedJenkins = jenkins as jest.Mocked; mockedJenkins.mockReturnValue(mockedJenkinsClient); +const resourceRef = 'component:default/example-component'; const jobFullName = 'example-jobName/foo'; const buildNumber = 19; const jenkinsInfo: JenkinsInfo = { @@ -42,10 +45,34 @@ const jenkinsInfo: JenkinsInfo = { jobFullName: 'example-jobName', }; +const fakePermissionApi = { + authorize: jest.fn().mockResolvedValue([ + { + result: AuthorizeResult.ALLOW, + }, + ]), + authorizeConditional: jest.fn(), +}; + +class NoErrorThrownError extends Error {} + +const getError = async (call: () => unknown): Promise => { + try { + await call(); + throw new NoErrorThrownError(); + } catch (error: unknown) { + return error as TError; + } +}; + describe('JenkinsApi', () => { - const jenkinsApi = new JenkinsApiImpl(); + const jenkinsApi = new JenkinsApiImpl(fakePermissionApi); const mockFetch = fetch as jest.MockedFunction; + afterEach(() => { + jest.clearAllMocks(); + }); + describe('getProjects', () => { const project: JenkinsProject = { actions: [], @@ -700,24 +727,100 @@ describe('JenkinsApi', () => { 'https://jenkins.example.com/job/example-jobName/job/foo/job/bar/19', ); }); + describe('getHeaders', () => { + const crumb = { crumb: 'foobar', crumbRequestField: '.crumb' }; + const json = jest.fn() as jest.MockedFunction; + json.mockResolvedValue(crumb); + const jenkinsInfoCrumb: JenkinsInfo = { ...jenkinsInfo, crumbIssuer: true }; + const jenkinsApiProto = Object.getPrototypeOf(jenkinsApi); + + it('adds crumb', async () => { + mockFetch.mockResolvedValueOnce({ ok: true, json } as Response); + const response = await jenkinsApiProto.getHeaders(jenkinsInfoCrumb); + expect(response).toEqual({ ...jenkinsInfo.headers, '.crumb': 'foobar' }); + }); + it('does not add crumb', async () => { + const response = await jenkinsApiProto.getHeaders(jenkinsInfo); + expect(response).toEqual(jenkinsInfo.headers); + }); + it('fails to get crumb', async () => { + mockFetch.mockResolvedValueOnce({ ok: false } as Response); + const error = await getError(async () => + jenkinsApiProto.getHeaders(jenkinsInfoCrumb), + ); + expect(error).toBeInstanceOf(ResponseError); + }); + }); describe('rebuildProject', () => { it('successfully rebuilds', async () => { - mockFetch.mockResolvedValue({ status: 200 } as Response); + mockFetch.mockResolvedValueOnce({ status: 200 } as Response); const status = await jenkinsApi.rebuildProject( jenkinsInfo, jobFullName, buildNumber, + resourceRef, ); expect(status).toEqual(200); }); it('fails to rebuild', async () => { - mockFetch.mockResolvedValue({ status: 401 } as Response); + mockFetch.mockResolvedValueOnce({ status: 401 } as Response); const status = await jenkinsApi.rebuildProject( jenkinsInfo, jobFullName, buildNumber, + resourceRef, ); expect(status).toEqual(401); }); + + it('should fail if it does not have required permissions', async () => { + fakePermissionApi.authorize.mockResolvedValueOnce([ + { + result: AuthorizeResult.DENY, + }, + ]); + + mockFetch.mockResolvedValueOnce({ status: 200 } as Response); + const status = await jenkinsApi.rebuildProject( + jenkinsInfo, + jobFullName, + buildNumber, + resourceRef, + ); + expect(status).toEqual(401); + }); + + it('with crumbIssuer option', async () => { + const info: JenkinsInfo = { ...jenkinsInfo, crumbIssuer: true }; + mockFetch.mockResolvedValueOnce({ status: 200 } as Response); + const crumbHeaders = { headerName: 'headerValue', '.crumb': 'bar' }; + + const privateGetHeaders = jest.spyOn( + JenkinsApiImpl.prototype as any, + 'getHeaders', + ); + privateGetHeaders.mockImplementation(() => { + return crumbHeaders; + }); + + const status = await jenkinsApi.rebuildProject( + info, + jobFullName, + buildNumber, + resourceRef, + ); + expect(status).toEqual(200); + + type HeaderResponse = { + headerName: string; + '.crumb': string; + }; + type OptionResponse = { + headers: HeaderResponse; + method: string; + }; + const requestOptions: OptionResponse = mockFetch.mock.calls[0][1] as any; + expect(requestOptions.headers).toStrictEqual(crumbHeaders); + }); }); }); diff --git a/plugins/jenkins-backend/src/service/jenkinsApi.ts b/plugins/jenkins-backend/src/service/jenkinsApi.ts index e7c20e04df..77a11c25af 100644 --- a/plugins/jenkins-backend/src/service/jenkinsApi.ts +++ b/plugins/jenkins-backend/src/service/jenkinsApi.ts @@ -23,6 +23,12 @@ import type { JenkinsProject, ScmDetails, } from '../types'; +import { + AuthorizeResult, + PermissionEvaluator, +} from '@backstage/plugin-permission-common'; +import { jenkinsExecutePermission } from '@backstage/plugin-jenkins-common'; +import { ResponseError } from '@backstage/errors'; import fetch, { HeaderInit } from 'node-fetch'; export class JenkinsApiImpl { @@ -59,6 +65,8 @@ export class JenkinsApiImpl { ${JenkinsApiImpl.jobTreeSpec} ]{0,50}`; + constructor(private readonly permissionApi?: PermissionEvaluator) {} + /** * Get a list of projects for the given JenkinsInfo. * @see ../../../jenkins/src/api/JenkinsApi.ts#getProjects @@ -141,14 +149,29 @@ export class JenkinsApiImpl { jenkinsInfo: JenkinsInfo, jobFullName: string, buildNumber: number, + resourceRef: string, + options?: { token?: string }, ): Promise { + if (this.permissionApi) { + const response = await this.permissionApi.authorize( + [{ permission: jenkinsExecutePermission, resourceRef }], + { token: options?.token }, + ); + // permission api returns always at least one item, we need to check only one result since we do not expect any additional results + const { result } = response[0]; + if (result === AuthorizeResult.DENY) { + return 401; + } + } + const buildUrl = this.getBuildUrl(jenkinsInfo, jobFullName, buildNumber); + const headers = await this.getHeaders(jenkinsInfo); // the current SDK only supports triggering a new build // replay the job by triggering request directly from Jenkins api const response = await fetch(`${buildUrl}/replay/rebuild`, { method: 'post', - headers: jenkinsInfo.headers as HeaderInit, + headers: headers, }); return response.status; } @@ -308,4 +331,36 @@ export class JenkinsApiImpl { const jobs = jobFullName.split('/'); return `${jenkinsInfo.baseUrl}/job/${jobs.join('/job/')}/${buildId}`; } + + private async getHeaders(jenkinsInfo: JenkinsInfo): Promise { + let headers = jenkinsInfo.headers as HeaderInit; + if (!jenkinsInfo.crumbIssuer) { + return headers; + } + const response = await fetch( + `${jenkinsInfo.baseUrl}/crumbIssuer/api/json`, + { + method: 'get', + headers: headers, + }, + ); + if (!response.ok) { + throw ResponseError.fromResponse(response); + } + type CrumbResponse = { + crumb: string; + crumbRequestField: string; + }; + + const crumbJson: CrumbResponse = await response.json(); + if ('crumb' in crumbJson && 'crumbRequestField' in crumbJson) { + const headerObject = { + ...jenkinsInfo.headers, + [crumbJson.crumbRequestField]: crumbJson.crumb, + }; + headers = headerObject as HeaderInit; + } + + return headers; + } } diff --git a/plugins/jenkins-backend/src/service/router.ts b/plugins/jenkins-backend/src/service/router.ts index 5f82f5e933..484bfa273f 100644 --- a/plugins/jenkins-backend/src/service/router.ts +++ b/plugins/jenkins-backend/src/service/router.ts @@ -20,22 +20,41 @@ import Router from 'express-promise-router'; import { Logger } from 'winston'; import { JenkinsInfoProvider } from './jenkinsInfoProvider'; import { JenkinsApiImpl } from './jenkinsApi'; +import { + PermissionAuthorizer, + PermissionEvaluator, + toPermissionEvaluator, +} from '@backstage/plugin-permission-common'; import { getBearerTokenFromAuthorizationHeader } from '@backstage/plugin-auth-node'; +import { stringifyEntityRef } from '@backstage/catalog-model'; import { stringifyError } from '@backstage/errors'; /** @public */ export interface RouterOptions { logger: Logger; jenkinsInfoProvider: JenkinsInfoProvider; + permissions?: PermissionEvaluator | PermissionAuthorizer; } /** @public */ export async function createRouter( options: RouterOptions, ): Promise { - const { jenkinsInfoProvider } = options; + const { jenkinsInfoProvider, permissions, logger } = options; - const jenkinsApi = new JenkinsApiImpl(); + let permissionEvaluator: PermissionEvaluator | undefined; + if (permissions && 'authorizeConditional' in permissions) { + permissionEvaluator = permissions as PermissionEvaluator; + } else { + logger.warn( + 'PermissionAuthorizer is deprecated. Please use an instance of PermissionEvaluator instead of PermissionAuthorizer in PluginEnvironment#permissions', + ); + permissionEvaluator = permissions + ? toPermissionEvaluator(permissions) + : undefined; + } + + const jenkinsApi = new JenkinsApiImpl(permissionEvaluator); const router = Router(); router.use(express.json()); @@ -143,10 +162,15 @@ export async function createRouter( backstageToken: token, }); + const resourceRef = stringifyEntityRef({ kind, namespace, name }); const status = await jenkinsApi.rebuildProject( jenkinsInfo, jobFullName, parseInt(buildNumber, 10), + resourceRef, + { + token, + }, ); response.json({}).status(status); }, From b9bac5a3e7c6bd5cf5f92f8a55e7a8337c7b86d8 Mon Sep 17 00:00:00 2001 From: Tim Soslow Date: Thu, 11 May 2023 23:22:26 -0500 Subject: [PATCH 064/213] Remove crumbIssuer support in rebuildProject Crumb issuer support is not required for API calls using a token, so I am simplifying the code to remove it. Signed-off-by: Tim Soslow Signed-off-by: Christopher Diaz --- .../src/service/jenkinsApi.test.ts | 69 ------------------- .../jenkins-backend/src/service/jenkinsApi.ts | 36 +--------- 2 files changed, 1 insertion(+), 104 deletions(-) diff --git a/plugins/jenkins-backend/src/service/jenkinsApi.test.ts b/plugins/jenkins-backend/src/service/jenkinsApi.test.ts index 3c52949268..8e80de34a3 100644 --- a/plugins/jenkins-backend/src/service/jenkinsApi.test.ts +++ b/plugins/jenkins-backend/src/service/jenkinsApi.test.ts @@ -20,7 +20,6 @@ import { JenkinsInfo } from './jenkinsInfoProvider'; import { JenkinsBuild, JenkinsProject } from '../types'; import { AuthorizeResult } from '@backstage/plugin-permission-common'; import fetch, { Response } from 'node-fetch'; -import { ResponseError } from '@backstage/errors'; jest.mock('jenkins'); jest.mock('node-fetch'); @@ -54,17 +53,6 @@ const fakePermissionApi = { authorizeConditional: jest.fn(), }; -class NoErrorThrownError extends Error {} - -const getError = async (call: () => unknown): Promise => { - try { - await call(); - throw new NoErrorThrownError(); - } catch (error: unknown) { - return error as TError; - } -}; - describe('JenkinsApi', () => { const jenkinsApi = new JenkinsApiImpl(fakePermissionApi); const mockFetch = fetch as jest.MockedFunction; @@ -727,30 +715,6 @@ describe('JenkinsApi', () => { 'https://jenkins.example.com/job/example-jobName/job/foo/job/bar/19', ); }); - describe('getHeaders', () => { - const crumb = { crumb: 'foobar', crumbRequestField: '.crumb' }; - const json = jest.fn() as jest.MockedFunction; - json.mockResolvedValue(crumb); - const jenkinsInfoCrumb: JenkinsInfo = { ...jenkinsInfo, crumbIssuer: true }; - const jenkinsApiProto = Object.getPrototypeOf(jenkinsApi); - - it('adds crumb', async () => { - mockFetch.mockResolvedValueOnce({ ok: true, json } as Response); - const response = await jenkinsApiProto.getHeaders(jenkinsInfoCrumb); - expect(response).toEqual({ ...jenkinsInfo.headers, '.crumb': 'foobar' }); - }); - it('does not add crumb', async () => { - const response = await jenkinsApiProto.getHeaders(jenkinsInfo); - expect(response).toEqual(jenkinsInfo.headers); - }); - it('fails to get crumb', async () => { - mockFetch.mockResolvedValueOnce({ ok: false } as Response); - const error = await getError(async () => - jenkinsApiProto.getHeaders(jenkinsInfoCrumb), - ); - expect(error).toBeInstanceOf(ResponseError); - }); - }); describe('rebuildProject', () => { it('successfully rebuilds', async () => { mockFetch.mockResolvedValueOnce({ status: 200 } as Response); @@ -789,38 +753,5 @@ describe('JenkinsApi', () => { ); expect(status).toEqual(401); }); - - it('with crumbIssuer option', async () => { - const info: JenkinsInfo = { ...jenkinsInfo, crumbIssuer: true }; - mockFetch.mockResolvedValueOnce({ status: 200 } as Response); - const crumbHeaders = { headerName: 'headerValue', '.crumb': 'bar' }; - - const privateGetHeaders = jest.spyOn( - JenkinsApiImpl.prototype as any, - 'getHeaders', - ); - privateGetHeaders.mockImplementation(() => { - return crumbHeaders; - }); - - const status = await jenkinsApi.rebuildProject( - info, - jobFullName, - buildNumber, - resourceRef, - ); - expect(status).toEqual(200); - - type HeaderResponse = { - headerName: string; - '.crumb': string; - }; - type OptionResponse = { - headers: HeaderResponse; - method: string; - }; - const requestOptions: OptionResponse = mockFetch.mock.calls[0][1] as any; - expect(requestOptions.headers).toStrictEqual(crumbHeaders); - }); }); }); diff --git a/plugins/jenkins-backend/src/service/jenkinsApi.ts b/plugins/jenkins-backend/src/service/jenkinsApi.ts index 77a11c25af..85271462eb 100644 --- a/plugins/jenkins-backend/src/service/jenkinsApi.ts +++ b/plugins/jenkins-backend/src/service/jenkinsApi.ts @@ -28,7 +28,6 @@ import { PermissionEvaluator, } from '@backstage/plugin-permission-common'; import { jenkinsExecutePermission } from '@backstage/plugin-jenkins-common'; -import { ResponseError } from '@backstage/errors'; import fetch, { HeaderInit } from 'node-fetch'; export class JenkinsApiImpl { @@ -165,13 +164,12 @@ export class JenkinsApiImpl { } const buildUrl = this.getBuildUrl(jenkinsInfo, jobFullName, buildNumber); - const headers = await this.getHeaders(jenkinsInfo); // the current SDK only supports triggering a new build // replay the job by triggering request directly from Jenkins api const response = await fetch(`${buildUrl}/replay/rebuild`, { method: 'post', - headers: headers, + headers: jenkinsInfo.headers as HeaderInit, }); return response.status; } @@ -331,36 +329,4 @@ export class JenkinsApiImpl { const jobs = jobFullName.split('/'); return `${jenkinsInfo.baseUrl}/job/${jobs.join('/job/')}/${buildId}`; } - - private async getHeaders(jenkinsInfo: JenkinsInfo): Promise { - let headers = jenkinsInfo.headers as HeaderInit; - if (!jenkinsInfo.crumbIssuer) { - return headers; - } - const response = await fetch( - `${jenkinsInfo.baseUrl}/crumbIssuer/api/json`, - { - method: 'get', - headers: headers, - }, - ); - if (!response.ok) { - throw ResponseError.fromResponse(response); - } - type CrumbResponse = { - crumb: string; - crumbRequestField: string; - }; - - const crumbJson: CrumbResponse = await response.json(); - if ('crumb' in crumbJson && 'crumbRequestField' in crumbJson) { - const headerObject = { - ...jenkinsInfo.headers, - [crumbJson.crumbRequestField]: crumbJson.crumb, - }; - headers = headerObject as HeaderInit; - } - - return headers; - } } From 2c0ed09987c49f656e317e8499a539493de064df Mon Sep 17 00:00:00 2001 From: blam Date: Fri, 12 May 2023 11:16:28 +0200 Subject: [PATCH 065/213] chore: tidy up the api-reports a little Signed-off-by: blam Signed-off-by: Christopher Diaz --- packages/backend-test-utils/api-report.md | 3 --- packages/backend-test-utils/src/database/types.ts | 2 +- packages/backend-test-utils/src/util/getDockerImageForName.ts | 1 - packages/backend-test-utils/src/util/index.ts | 1 - 4 files changed, 1 insertion(+), 6 deletions(-) diff --git a/packages/backend-test-utils/api-report.md b/packages/backend-test-utils/api-report.md index 1ff3521869..358b51071f 100644 --- a/packages/backend-test-utils/api-report.md +++ b/packages/backend-test-utils/api-report.md @@ -25,9 +25,6 @@ import { ServiceRef } from '@backstage/backend-plugin-api'; import { TokenManagerService } from '@backstage/backend-plugin-api'; import { UrlReaderService } from '@backstage/backend-plugin-api'; -// @public (undocumented) -export const getDockerImageForName: (name: string) => string; - // @public (undocumented) export function isDockerDisabledForTests(): boolean; diff --git a/packages/backend-test-utils/src/database/types.ts b/packages/backend-test-utils/src/database/types.ts index c35d23c571..8c1d6f5193 100644 --- a/packages/backend-test-utils/src/database/types.ts +++ b/packages/backend-test-utils/src/database/types.ts @@ -16,7 +16,7 @@ import { DatabaseManager } from '@backstage/backend-common'; import { Knex } from 'knex'; -import { getDockerImageForName } from '../util'; +import { getDockerImageForName } from '../util/getDockerImageForName'; /** * The possible databases to test against. diff --git a/packages/backend-test-utils/src/util/getDockerImageForName.ts b/packages/backend-test-utils/src/util/getDockerImageForName.ts index a3e1958bf6..7869e7b418 100644 --- a/packages/backend-test-utils/src/util/getDockerImageForName.ts +++ b/packages/backend-test-utils/src/util/getDockerImageForName.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -/** @public */ export const getDockerImageForName = (name: string) => { return process.env.BACKSTAGE_TEST_DOCKER_REGISTRY ? `${process.env.BACKSTAGE_TEST_DOCKER_REGISTRY}/${name}` diff --git a/packages/backend-test-utils/src/util/index.ts b/packages/backend-test-utils/src/util/index.ts index 837af39028..a6cdc621d4 100644 --- a/packages/backend-test-utils/src/util/index.ts +++ b/packages/backend-test-utils/src/util/index.ts @@ -15,4 +15,3 @@ */ export { isDockerDisabledForTests } from './isDockerDisabledForTests'; -export { getDockerImageForName } from './getDockerImageForName'; From 9e4301e370e5f4947d4ce9625e36ac13a22f2ead Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Tue, 16 May 2023 10:34:59 +0200 Subject: [PATCH 066/213] changesets: add inline codeblock for itchy impalas fold Signed-off-by: Patrik Oldsberg Signed-off-by: Christopher Diaz --- .changeset/itchy-impalas-fold.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/itchy-impalas-fold.md b/.changeset/itchy-impalas-fold.md index 68eee105ff..31840124ad 100644 --- a/.changeset/itchy-impalas-fold.md +++ b/.changeset/itchy-impalas-fold.md @@ -6,4 +6,4 @@ '@backstage/plugin-techdocs-node': patch --- -Standardize @aws-sdk v3 versions +Standardize `@aws-sdk` v3 versions From 67c1b53cdccf7790822c450c4d8654ee9a056a68 Mon Sep 17 00:00:00 2001 From: Andreas Berger Date: Thu, 11 May 2023 10:40:04 +0200 Subject: [PATCH 067/213] Add ability to use `defaultNamespace` and `defaultKind` for scaffolder action `catalog:fetch` Signed-off-by: Andreas Berger Signed-off-by: Christopher Diaz --- .changeset/giant-students-lie.md | 5 + plugins/scaffolder-backend/api-report.md | 2 + .../actions/builtin/catalog/fetch.test.ts | 354 +++++++++++------- .../actions/builtin/catalog/fetch.ts | 28 +- 4 files changed, 242 insertions(+), 147 deletions(-) create mode 100644 .changeset/giant-students-lie.md diff --git a/.changeset/giant-students-lie.md b/.changeset/giant-students-lie.md new file mode 100644 index 0000000000..fdcb406296 --- /dev/null +++ b/.changeset/giant-students-lie.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend': minor +--- + +Add ability to use `defaultNamespace` and `defaultKind` for scaffolder action `catalog:fetch` diff --git a/plugins/scaffolder-backend/api-report.md b/plugins/scaffolder-backend/api-report.md index c87521151b..07dd5eaf1d 100644 --- a/plugins/scaffolder-backend/api-report.md +++ b/plugins/scaffolder-backend/api-report.md @@ -119,6 +119,8 @@ export function createFetchCatalogEntityAction(options: { entityRef?: string | undefined; entityRefs?: string[] | undefined; optional?: boolean | undefined; + defaultKind?: string | undefined; + defaultNamespace?: string | undefined; }, { entity?: any; diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/catalog/fetch.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/catalog/fetch.test.ts index 1cce7d66cb..bed15f2e39 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/catalog/fetch.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/catalog/fetch.test.ts @@ -46,179 +46,249 @@ describe('catalog:fetch', () => { jest.resetAllMocks(); }); - it('should return entity from catalog', async () => { - getEntityByRef.mockReturnValueOnce({ - metadata: { - namespace: 'default', - name: 'test', - }, - kind: 'Component', - } as Entity); - - await action.handler({ - ...mockContext, - input: { - entityRef: 'component:default/test', - }, - }); - - expect(getEntityByRef).toHaveBeenCalledWith('component:default/test', { - token: 'secret', - }); - expect(mockContext.output).toHaveBeenCalledWith('entity', { - metadata: { - namespace: 'default', - name: 'test', - }, - kind: 'Component', - }); - }); - - it('should throw error if entity fetch fails from catalog and optional is false', async () => { - getEntityByRef.mockImplementationOnce(() => { - throw new Error('Not found'); - }); - - await expect( - action.handler({ - ...mockContext, - input: { - entityRef: 'component:default/test', - }, - }), - ).rejects.toThrow('Not found'); - - expect(getEntityByRef).toHaveBeenCalledWith('component:default/test', { - token: 'secret', - }); - expect(mockContext.output).not.toHaveBeenCalled(); - }); - - it('should throw error if entity not in catalog and optional is false', async () => { - getEntityByRef.mockReturnValueOnce(null); - - await expect( - action.handler({ - ...mockContext, - input: { - entityRef: 'component:default/test', - }, - }), - ).rejects.toThrow('Entity component:default/test not found'); - - expect(getEntityByRef).toHaveBeenCalledWith('component:default/test', { - token: 'secret', - }); - expect(mockContext.output).not.toHaveBeenCalled(); - }); - - it('should return entities from catalog', async () => { - getEntitiesByRefs.mockReturnValueOnce({ - items: [ - { - metadata: { - namespace: 'default', - name: 'test', - }, - kind: 'Component', - } as Entity, - ], - }); - - await action.handler({ - ...mockContext, - input: { - entityRefs: ['component:default/test'], - }, - }); - - expect(getEntitiesByRefs).toHaveBeenCalledWith( - { entityRefs: ['component:default/test'] }, - { - token: 'secret', - }, - ); - expect(mockContext.output).toHaveBeenCalledWith('entities', [ - { + describe('fetch single entity', () => { + it('should return entity from catalog', async () => { + getEntityByRef.mockReturnValueOnce({ metadata: { namespace: 'default', name: 'test', }, kind: 'Component', - }, - ]); + } as Entity); + + await action.handler({ + ...mockContext, + input: { + entityRef: 'component:default/test', + }, + }); + + expect(getEntityByRef).toHaveBeenCalledWith('component:default/test', { + token: 'secret', + }); + expect(mockContext.output).toHaveBeenCalledWith('entity', { + metadata: { + namespace: 'default', + name: 'test', + }, + kind: 'Component', + }); + }); + + it('should throw error if entity fetch fails from catalog and optional is false', async () => { + getEntityByRef.mockImplementationOnce(() => { + throw new Error('Not found'); + }); + + await expect( + action.handler({ + ...mockContext, + input: { + entityRef: 'component:default/test', + }, + }), + ).rejects.toThrow('Not found'); + + expect(getEntityByRef).toHaveBeenCalledWith('component:default/test', { + token: 'secret', + }); + expect(mockContext.output).not.toHaveBeenCalled(); + }); + + it('should throw error if entity not in catalog and optional is false', async () => { + getEntityByRef.mockReturnValueOnce(null); + + await expect( + action.handler({ + ...mockContext, + input: { + entityRef: 'component:default/test', + }, + }), + ).rejects.toThrow('Entity component:default/test not found'); + + expect(getEntityByRef).toHaveBeenCalledWith('component:default/test', { + token: 'secret', + }); + expect(mockContext.output).not.toHaveBeenCalled(); + }); + + it('should use defaultKind and defaultNamespace if provided', async () => { + const entity: Entity = { + metadata: { + namespace: 'ns', + name: 'test', + }, + kind: 'Group', + } as Entity; + getEntityByRef.mockReturnValueOnce(entity); + + await action.handler({ + ...mockContext, + input: { + entityRef: 'test', + defaultKind: 'Group', + defaultNamespace: 'ns', + }, + }); + + expect(getEntityByRef).toHaveBeenCalledWith('group:ns/test', { + token: 'secret', + }); + expect(mockContext.output).toHaveBeenCalledWith('entity', entity); + }); }); - it('should throw error if undefined is returned for some entity', async () => { - getEntitiesByRefs.mockReturnValueOnce({ - items: [ + describe('fetch multiple entities', () => { + it('should return entities from catalog', async () => { + getEntitiesByRefs.mockReturnValueOnce({ + items: [ + { + metadata: { + namespace: 'default', + name: 'test', + }, + kind: 'Component', + } as Entity, + ], + }); + + await action.handler({ + ...mockContext, + input: { + entityRefs: ['component:default/test'], + }, + }); + + expect(getEntitiesByRefs).toHaveBeenCalledWith( + { entityRefs: ['component:default/test'] }, + { + token: 'secret', + }, + ); + expect(mockContext.output).toHaveBeenCalledWith('entities', [ { metadata: { namespace: 'default', name: 'test', }, kind: 'Component', - } as Entity, - undefined, - ], + }, + ]); }); - await expect( - action.handler({ + it('should throw error if undefined is returned for some entity', async () => { + getEntitiesByRefs.mockReturnValueOnce({ + items: [ + { + metadata: { + namespace: 'default', + name: 'test', + }, + kind: 'Component', + } as Entity, + undefined, + ], + }); + + await expect( + action.handler({ + ...mockContext, + input: { + entityRefs: ['component:default/test', 'component:default/test2'], + optional: false, + }, + }), + ).rejects.toThrow('Entity component:default/test2 not found'); + + expect(getEntitiesByRefs).toHaveBeenCalledWith( + { entityRefs: ['component:default/test', 'component:default/test2'] }, + { + token: 'secret', + }, + ); + expect(mockContext.output).not.toHaveBeenCalled(); + }); + + it('should return null in case some of the entities not found and optional is true', async () => { + getEntitiesByRefs.mockReturnValueOnce({ + items: [ + { + metadata: { + namespace: 'default', + name: 'test', + }, + kind: 'Component', + } as Entity, + undefined, + ], + }); + + await action.handler({ ...mockContext, input: { entityRefs: ['component:default/test', 'component:default/test2'], - optional: false, + optional: true, }, - }), - ).rejects.toThrow('Entity component:default/test2 not found'); + }); - expect(getEntitiesByRefs).toHaveBeenCalledWith( - { entityRefs: ['component:default/test', 'component:default/test2'] }, - { - token: 'secret', - }, - ); - expect(mockContext.output).not.toHaveBeenCalled(); - }); - - it('should return null in case some of the entities not found and optional is true', async () => { - getEntitiesByRefs.mockReturnValueOnce({ - items: [ + expect(getEntitiesByRefs).toHaveBeenCalledWith( + { entityRefs: ['component:default/test', 'component:default/test2'] }, + { + token: 'secret', + }, + ); + expect(mockContext.output).toHaveBeenCalledWith('entities', [ { metadata: { namespace: 'default', name: 'test', }, kind: 'Component', - } as Entity, - undefined, - ], + }, + null, + ]); }); - await action.handler({ - ...mockContext, - input: { - entityRefs: ['component:default/test', 'component:default/test2'], - optional: true, - }, - }); - - expect(getEntitiesByRefs).toHaveBeenCalledWith( - { entityRefs: ['component:default/test', 'component:default/test2'] }, - { - token: 'secret', - }, - ); - expect(mockContext.output).toHaveBeenCalledWith('entities', [ - { + it('should use defaultKind and defaultNamespace if provided', async () => { + const entity1: Entity = { + metadata: { + namespace: 'ns', + name: 'test', + }, + kind: 'Group', + } as Entity; + const entity2: Entity = { metadata: { namespace: 'default', name: 'test', }, - kind: 'Component', - }, - null, - ]); + kind: 'User', + } as Entity; + getEntitiesByRefs.mockReturnValueOnce({ + items: [entity1, entity2], + }); + + await action.handler({ + ...mockContext, + input: { + entityRefs: ['test', 'user:default/test'], + defaultKind: 'Group', + defaultNamespace: 'ns', + }, + }); + + expect(getEntitiesByRefs).toHaveBeenCalledWith( + { entityRefs: ['group:ns/test', 'user:default/test'] }, + { + token: 'secret', + }, + ); + + expect(mockContext.output).toHaveBeenCalledWith('entities', [ + entity1, + entity2, + ]); + }); }); }); diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/catalog/fetch.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/catalog/fetch.ts index d6abeee792..437da8ae73 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/catalog/fetch.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/catalog/fetch.ts @@ -18,6 +18,7 @@ import { CatalogApi } from '@backstage/catalog-client'; import { createTemplateAction } from '@backstage/plugin-scaffolder-node'; import yaml from 'yaml'; import { z } from 'zod'; +import { parseEntityRef, stringifyEntityRef } from '@backstage/catalog-model'; const id = 'catalog:fetch'; @@ -69,6 +70,7 @@ export function createFetchCatalogEntityAction(options: { description: 'Returns entity or entities from the catalog by entity reference(s)', examples, + supportsDryRun: true, schema: { input: z.object({ entityRef: z @@ -87,6 +89,10 @@ export function createFetchCatalogEntityAction(options: { 'Allow the entity or entities to optionally exist. Default: false', }) .optional(), + defaultKind: z.string({ description: 'The default kind' }).optional(), + defaultNamespace: z + .string({ description: 'The default namespace' }) + .optional(), }), output: z.object({ entity: z @@ -106,7 +112,8 @@ export function createFetchCatalogEntityAction(options: { }), }, async handler(ctx) { - const { entityRef, entityRefs, optional } = ctx.input; + const { entityRef, entityRefs, optional, defaultKind, defaultNamespace } = + ctx.input; if (!entityRef && !entityRefs) { if (optional) { return; @@ -115,9 +122,14 @@ export function createFetchCatalogEntityAction(options: { } if (entityRef) { - const entity = await catalogClient.getEntityByRef(entityRef, { - token: ctx.secrets?.backstageToken, - }); + const entity = await catalogClient.getEntityByRef( + stringifyEntityRef( + parseEntityRef(entityRef, { defaultKind, defaultNamespace }), + ), + { + token: ctx.secrets?.backstageToken, + }, + ); if (!entity && !optional) { throw new Error(`Entity ${entityRef} not found`); @@ -127,7 +139,13 @@ export function createFetchCatalogEntityAction(options: { if (entityRefs) { const entities = await catalogClient.getEntitiesByRefs( - { entityRefs }, + { + entityRefs: entityRefs.map(ref => + stringifyEntityRef( + parseEntityRef(ref, { defaultKind, defaultNamespace }), + ), + ), + }, { token: ctx.secrets?.backstageToken, }, From 8a340bfb039d444e5cfe58c88f3185d4a8562475 Mon Sep 17 00:00:00 2001 From: Patrick Jungermann Date: Mon, 6 Mar 2023 23:39:35 +0100 Subject: [PATCH 068/213] feat: add documented component to uffizzi environment So far, none of the components at the uffizzi environment have techdocs. Hence, there are no docs available within this environment and related features are not covered. This change will add an example from techdocs-backend plugin to the deployed examples. It was possible to register this catalog file manually, however the build of the docs fail due to missing Docker. To allow the generation of docs, we use the local generator (no docker in docker) and install required dependencies. As we don't want all dependencies for all (default) extensions to be installed at this environment, the original example at techdocs-backend plugin was copied and reduced (PlantUML extension example was removed). Signed-off-by: Patrick Jungermann Signed-off-by: Christopher Diaz --- .github/uffizzi/docker-compose.uffizzi.yml | 1 + .../uffizzi.production.app-config.yaml | 12 ++- .github/workflows/uffizzi-build.yml | 2 +- packages/backend/Dockerfile | 7 +- .../catalog-info.yaml | 12 +++ .../docs/code/code-sample.md | 31 ++++++ .../docs/extensions.md | 99 +++++++++++++++++++ .../docs/images/backstage-logo-cncf.svg | 1 + .../docs/index.md | 55 +++++++++++ .../docs/sub-page.md | 12 +++ .../documented-component-uffizzi/mkdocs.yml | 12 +++ 11 files changed, 237 insertions(+), 7 deletions(-) create mode 100644 plugins/techdocs-backend/examples/documented-component-uffizzi/catalog-info.yaml create mode 100644 plugins/techdocs-backend/examples/documented-component-uffizzi/docs/code/code-sample.md create mode 100644 plugins/techdocs-backend/examples/documented-component-uffizzi/docs/extensions.md create mode 100644 plugins/techdocs-backend/examples/documented-component-uffizzi/docs/images/backstage-logo-cncf.svg create mode 100644 plugins/techdocs-backend/examples/documented-component-uffizzi/docs/index.md create mode 100644 plugins/techdocs-backend/examples/documented-component-uffizzi/docs/sub-page.md create mode 100644 plugins/techdocs-backend/examples/documented-component-uffizzi/mkdocs.yml diff --git a/.github/uffizzi/docker-compose.uffizzi.yml b/.github/uffizzi/docker-compose.uffizzi.yml index 76a7b4eafc..f2e9bbeee6 100644 --- a/.github/uffizzi/docker-compose.uffizzi.yml +++ b/.github/uffizzi/docker-compose.uffizzi.yml @@ -14,6 +14,7 @@ services: POSTGRES_PORT: 5432 POSTGRES_USER: postgres POSTGRES_PASSWORD: kiTMoTsiEuyQ43GrL4Hv + REF_NAME: ${GITHUB_SHA} NODE_ENV: production deploy: resources: diff --git a/.github/uffizzi/uffizzi.production.app-config.yaml b/.github/uffizzi/uffizzi.production.app-config.yaml index 30cffa11c9..3b24c20b3d 100644 --- a/.github/uffizzi/uffizzi.production.app-config.yaml +++ b/.github/uffizzi/uffizzi.production.app-config.yaml @@ -28,6 +28,7 @@ backend: credentials: true csp: connect-src: ["'self'", 'http:', 'https:'] + img-src: ["'self'", 'data:', 'https://cdnjs.cloudflare.com'] # Content-Security-Policy directives follow the Helmet format: https://helmetjs.github.io/#reference # Default Helmet Content-Security-Policy values can be removed by setting the key to false @@ -41,15 +42,18 @@ auth: catalog: locations: - type: url - target: https://github.com/backstage/backstage/blob/master/packages/catalog-model/examples/all.yaml + target: https://github.com/backstage/backstage/blob/${REF_NAME}/packages/catalog-model/examples/all.yaml - type: url - target: https://github.com/backstage/backstage/blob/master/packages/catalog-model/examples/acme-corp.yaml + target: https://github.com/backstage/backstage/blob/${REF_NAME}/plugins/techdocs-backend/examples/documented-component-uffizzi/catalog-info.yaml + + - type: url + target: https://github.com/backstage/backstage/blob/${REF_NAME}/packages/catalog-model/examples/acme-corp.yaml rules: - allow: [User, Group] - type: url - target: https://github.com/backstage/backstage/blob/master/plugins/scaffolder-backend/sample-templates/all-templates.yaml + target: https://github.com/backstage/backstage/blob/${REF_NAME}/plugins/scaffolder-backend/sample-templates/all-templates.yaml rules: - allow: [Template] @@ -124,7 +128,7 @@ proxy: techdocs: builder: 'local' # Alternatives - 'external' generator: - runIn: 'docker' + runIn: 'local' # dockerImage: my-org/techdocs # use a custom docker image # pullImage: true # or false to disable automatic pulling of image (e.g. if custom docker login is required) publisher: diff --git a/.github/workflows/uffizzi-build.yml b/.github/workflows/uffizzi-build.yml index ee629bbafe..1b031f50ad 100644 --- a/.github/workflows/uffizzi-build.yml +++ b/.github/workflows/uffizzi-build.yml @@ -81,7 +81,7 @@ jobs: BACKSTAGE_IMAGE=$(echo ${{ needs.build-backstage.outputs.tags }}) export BACKSTAGE_IMAGE # Render simple template from environment variables. - envsubst '$BACKSTAGE_IMAGE' < .github/uffizzi/docker-compose.uffizzi.yml > docker-compose.rendered.yml + envsubst '$BACKSTAGE_IMAGE $GITHUB_SHA' < .github/uffizzi/docker-compose.uffizzi.yml > docker-compose.rendered.yml cat docker-compose.rendered.yml - name: Upload Rendered Compose File as Artifact uses: actions/upload-artifact@v3 diff --git a/packages/backend/Dockerfile b/packages/backend/Dockerfile index eca6ce82c2..da25f9736c 100644 --- a/packages/backend/Dockerfile +++ b/packages/backend/Dockerfile @@ -13,11 +13,14 @@ FROM node:16-bullseye-slim # Install sqlite3 dependencies. You can skip this if you don't use sqlite3 in the image, # in which case you should also move better-sqlite3 to "devDependencies" in package.json. +# Additionally, we install dependencies for `techdocs.generator.runIn: local`. +# https://backstage.io/docs/features/techdocs/getting-started#disabling-docker-in-docker-situation-optional RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ --mount=type=cache,target=/var/lib/apt,sharing=locked \ apt-get update && \ - apt-get install -y --no-install-recommends libsqlite3-dev python3 build-essential && \ - yarn config set python /usr/bin/python3 + apt-get install -y --no-install-recommends libsqlite3-dev python3 python3-pip build-essential && \ + yarn config set python /usr/bin/python3 && \ + pip3 install mkdocs-techdocs-core==1.1.7 # From here on we use the least-privileged `node` user to run the backend. WORKDIR /app diff --git a/plugins/techdocs-backend/examples/documented-component-uffizzi/catalog-info.yaml b/plugins/techdocs-backend/examples/documented-component-uffizzi/catalog-info.yaml new file mode 100644 index 0000000000..a4d46593d3 --- /dev/null +++ b/plugins/techdocs-backend/examples/documented-component-uffizzi/catalog-info.yaml @@ -0,0 +1,12 @@ +apiVersion: backstage.io/v1alpha1 +kind: Component +metadata: + name: documented-component-uffizzi + title: Documented Component (Uffizzi) + description: A Service with TechDocs documentation. Excl. PlantUML extension. + annotations: + backstage.io/techdocs-ref: dir:. +spec: + type: service + lifecycle: experimental + owner: user:guest diff --git a/plugins/techdocs-backend/examples/documented-component-uffizzi/docs/code/code-sample.md b/plugins/techdocs-backend/examples/documented-component-uffizzi/docs/code/code-sample.md new file mode 100644 index 0000000000..f41ab1d506 --- /dev/null +++ b/plugins/techdocs-backend/examples/documented-component-uffizzi/docs/code/code-sample.md @@ -0,0 +1,31 @@ +# Sample Code + +This page provides some sample code which may be used in your example component. + +This code uses TypeScript, and the Markdown code fence to wrap the code. + +```typescript +const serviceEntityPage = ( + + + + + + + + + + + + +); +``` + +Here is an example of Python code: + +```python +def getUsersInGroup(targetGroup, secure=False): + + if __debug__: + print('targetGroup=[' + targetGroup + ']') +``` diff --git a/plugins/techdocs-backend/examples/documented-component-uffizzi/docs/extensions.md b/plugins/techdocs-backend/examples/documented-component-uffizzi/docs/extensions.md new file mode 100644 index 0000000000..2b101efdef --- /dev/null +++ b/plugins/techdocs-backend/examples/documented-component-uffizzi/docs/extensions.md @@ -0,0 +1,99 @@ +# Plugins & Extensions + +Just by including the TechDocs Core Plugin to your MkDocs site included with Backstage, +you gain the immediate use of a variety of popular plugins and extensions to MkDocs. + +For more information and full details of the available features, see the +[`mkdocs-techdocs-core` repository](https://github.com/backstage/mkdocs-techdocs-core#mkdocs-plugins-and-extensions). + +This page provides a demonstration of some of the available features. + +## Admonitions + +Admonitions are call outs that help catch a users attention. + +To define an admonition simply put the following Markdown into your content: + +``` +!!! warn + Defining admonitions can be addicting. +``` + +And they end up looking like this: + + +!!! warn + Defining admonitions can be addicting. + + +!!! note + You can learn a lot about TechDocs by just visiting the Backstage web site at + https://backstage.io/docs. + + +!!! info + TechDocs is the core feature that supports documentation as code in Backstage. + + +!!! tip + Don't forget to spell check your documentation. + +## Pymdownx Extensions + +Pymdownx (Python Markdown extensions) are a variety of smaller additions. + +### Details + + +??? note "What is the answer to life, the universe, and everything? (click me for the answer)" + The answer is 42. + + +??? note "What is 4 plus 4?" + The answer is 8. + + +???+ note "How do I get support?" + You can get support by opening an issue in this repository. This detail is open by default + so it's more easily visible without requiring the user to click to open it. + +### Task Lists + +Automatic rendering of Markdown task lists. + +- [x] Phase 1 +- [x] Phase 2 +- [ ] Phase 3 + +### Emojis + +Very nice job on documentation! :thumbsup: + +I've read a lot of documentation, but I love :heart: this document. + +Weather: :sunny: :umbrella: :cloud: :snowflake: + +Animals: :tiger: :horse: :turtle: :wolf: :frog: + +### Attributes + +[A Download Link](./images/backstage-logo-cncf.svg){: download } + +![A Scaled Image](./images/backstage-logo-cncf.svg){: style="width: 100px" } + +### MDX truly sane lists + +- `attributes` + +- `customer` + - `first_name` + - `test` + - `family_name` + - `email` +- `person` + - `first_name` + - `family_name` + - `birth_date` +- `subscription_id` + +- `request` diff --git a/plugins/techdocs-backend/examples/documented-component-uffizzi/docs/images/backstage-logo-cncf.svg b/plugins/techdocs-backend/examples/documented-component-uffizzi/docs/images/backstage-logo-cncf.svg new file mode 100644 index 0000000000..b5ff591d1b --- /dev/null +++ b/plugins/techdocs-backend/examples/documented-component-uffizzi/docs/images/backstage-logo-cncf.svg @@ -0,0 +1 @@ +05 Logo_Black \ No newline at end of file diff --git a/plugins/techdocs-backend/examples/documented-component-uffizzi/docs/index.md b/plugins/techdocs-backend/examples/documented-component-uffizzi/docs/index.md new file mode 100644 index 0000000000..6295a69406 --- /dev/null +++ b/plugins/techdocs-backend/examples/documented-component-uffizzi/docs/index.md @@ -0,0 +1,55 @@ +# Welcome! + +This is a basic example of documentation. It is intended as a showcase of some of the +features that TechDocs provides out of the box. + +You can see also: + +- [A sub page](sub-page.md) +- [Inline code examples](code/code-sample.md) +- [Plugin & Extension examples](extensions.md) - Diagrams, emojis, visual formatting. + +## Basic Markdown + +Headings: + +# h1 + +## h2 + +### h3 + +#### h4 + +##### h5 + +###### h6 + +Here is a bulleted list: + +- Item one +- Item two +- Item Three + +Check out the [Markdown Guide](https://www.markdownguide.org/) to learn more about how to +simply create documentation. + +You can also learn more about how to configure and setup this documentation in Backstage, +[read up on the TechDocs Overview](https://backstage.io/docs/features/techdocs/). + +## Image Example + +This documentation is powered by Backstage's TechDocs feature: + +![Backstage Logo](images/backstage-logo-cncf.svg) + +## Table Example + +While this documentation isn't comprehensive, in the future it should cover the following +topics outlined in this example table: + +| Topic | Description | +| ------- | ------------------------------------------------------------ | +| Topic 1 | An introductory topic to help you learn about the component. | +| Topic 2 | A more detailed topic that explains more information. | +| Topic 3 | A final topic that provides conclusions and lessons learned. | diff --git a/plugins/techdocs-backend/examples/documented-component-uffizzi/docs/sub-page.md b/plugins/techdocs-backend/examples/documented-component-uffizzi/docs/sub-page.md new file mode 100644 index 0000000000..987f5e8a95 --- /dev/null +++ b/plugins/techdocs-backend/examples/documented-component-uffizzi/docs/sub-page.md @@ -0,0 +1,12 @@ +# Another page in our documentation + +This sub-page can be used to elaborate on a specific part of the component. + +## Details + +It is linked off the main page, and due to its inclusion in the `mkdocs.yml` file, +becomes part of the auto-generated site navigation. + +## MkDocs + +Visit https://www.mkdocs.org for more information about the MkDocs tool. diff --git a/plugins/techdocs-backend/examples/documented-component-uffizzi/mkdocs.yml b/plugins/techdocs-backend/examples/documented-component-uffizzi/mkdocs.yml new file mode 100644 index 0000000000..1a159a4d12 --- /dev/null +++ b/plugins/techdocs-backend/examples/documented-component-uffizzi/mkdocs.yml @@ -0,0 +1,12 @@ +site_name: 'Example Documentation' +repo_url: https://github.com/backstage/backstage +edit_uri: edit/master/plugins/techdocs-backend/examples/documented-component/docs + +nav: + - Home: index.md + - Subpage: sub-page.md + - 'Code Sample': code/code-sample.md + - Extensions: extensions.md + +plugins: + - techdocs-core From f7c247c7a7e96b6e11e38d48d45d16916579c916 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 16 May 2023 09:38:40 +0000 Subject: [PATCH 069/213] Version Packages Signed-off-by: Christopher Diaz --- .changeset/afraid-shirts-train.md | 10 - .changeset/angry-ducks-shake.md | 5 - .changeset/backend-like-a-tattoo.md | 5 - .changeset/beige-tigers-matter.md | 5 - .changeset/big-days-press.md | 7 - .changeset/blue-eyes-run.md | 7 - .changeset/brown-eyes-yell.md | 5 - .changeset/brown-keys-raise.md | 7 - .changeset/brown-meals-trade.md | 5 - .changeset/calm-buttons-type.md | 5 - .changeset/calm-snails-trade.md | 5 - .changeset/calm-wolves-taste.md | 5 - .changeset/chilled-goats-jump.md | 5 - .changeset/chilled-pants-wonder.md | 5 - .changeset/chilled-queens-wonder.md | 5 - .changeset/chilly-fireants-type.md | 5 - .changeset/chilly-taxis-shop.md | 5 - .changeset/clean-lobsters-brake.md | 7 - .changeset/clever-coins-deny.md | 5 - .changeset/cold-drinks-exercise.md | 5 - .changeset/cold-laws-turn.md | 5 - .changeset/cool-dingos-repair.md | 5 - .changeset/create-app-1682437922.md | 5 - .changeset/curly-rats-fold.md | 5 - .changeset/curvy-months-appear.md | 5 - .changeset/dry-boats-sniff.md | 10 - .changeset/dull-wombats-stare.md | 5 - .changeset/eighty-olives-live.md | 5 - .changeset/eleven-taxis-notice.md | 7 - .changeset/extragavent-fast-fly.md | 10 - .changeset/fair-suits-warn.md | 5 - .changeset/fast-wasps-peel.md | 5 - .changeset/fifty-grapes-explode.md | 5 - .changeset/fifty-laws-count.md | 5 - .changeset/five-lies-confess.md | 5 - .changeset/five-tigers-whisper.md | 5 - .changeset/fluffy-crabs-reply.md | 5 - .changeset/fluffy-mirrors-happen.md | 7 - .changeset/fresh-moons-unite.md | 5 - .changeset/friendly-frogs-drop.md | 5 - .changeset/funny-cups-count.md | 5 - .changeset/funny-trains-sniff.md | 25 - .changeset/giant-students-lie.md | 5 - .changeset/gold-vans-sin.md | 10 - .changeset/good-lions-approve.md | 5 - .changeset/green-cheetahs-cover.md | 5 - .changeset/healthy-ladybugs-chew.md | 5 - .changeset/heavy-penguins-burn.md | 6 - .changeset/honest-comics-ring.md | 5 - .changeset/honest-countries-deny.md | 5 - .changeset/honest-turkeys-learn.md | 5 - .changeset/hungry-countries-enjoy.md | 5 - .changeset/hungry-foxes-divide.md | 5 - .changeset/hungry-peas-sing.md | 5 - .changeset/itchy-impalas-fold.md | 9 - .changeset/khaki-brooms-kiss.md | 5 - .changeset/late-lizards-unite.md | 5 - .changeset/lazy-keys-work.md | 5 - .changeset/mighty-bears-glow.md | 10 - .changeset/mighty-cows-greet.md | 5 - .changeset/modern-pumpkins-join.md | 5 - .changeset/moody-lizards-beam.md | 40 - .changeset/moody-shrimps-train.md | 5 - .changeset/new-roses-fail.md | 16 - .changeset/nice-ants-type.md | 5 - .changeset/nine-planes-carry.md | 5 - .changeset/nine-ties-smoke.md | 5 - .changeset/ninety-eggs-lie.md | 6 - .changeset/ninety-mugs-sin.md | 5 - .changeset/olive-turkeys-switch.md | 5 - .changeset/polite-dingos-train.md | 33 - .changeset/pre.json | 308 -- .changeset/pretty-gifts-greet.md | 5 - .changeset/proud-chairs-sleep.md | 5 - .changeset/quick-flies-guess.md | 5 - .changeset/quiet-bikes-smash.md | 5 - .changeset/quiet-stingrays-fly.md | 5 - .changeset/rare-elephants-arrive.md | 5 - .changeset/real-baboons-vanish.md | 8 - .changeset/red-cheetahs-invite.md | 6 - .changeset/red-parrots-attack.md | 5 - .changeset/rotten-chefs-jog.md | 10 - .changeset/serious-hornets-remember.md | 5 - .changeset/serious-phones-flash.md | 5 - .changeset/shy-worms-enjoy.md | 6 - .changeset/six-mails-shout.md | 5 - .changeset/sixty-falcons-protect.md | 5 - .changeset/slimy-turkeys-return.md | 22 - .changeset/soft-readers-exist.md | 5 - .changeset/spicy-spies-warn.md | 7 - .changeset/spotty-walls-serve.md | 5 - .changeset/stupid-seas-stare.md | 5 - .changeset/swift-fishes-run.md | 5 - .changeset/swift-students-type.md | 5 - .changeset/thick-parents-pump.md | 6 - .changeset/thick-pugs-rush.md | 5 - .changeset/thin-ways-exist.md | 5 - .changeset/thirty-jobs-sort.md | 5 - .changeset/three-tools-pump.md | 5 - .changeset/tiny-crews-pull.md | 5 - .changeset/tough-moles-whisper.md | 5 - .changeset/twelve-birds-boil.md | 5 - .changeset/twelve-zebras-repair.md | 5 - .changeset/two-gorillas-drop.md | 5 - .changeset/unlucky-deers-teach.md | 7 - .changeset/unlucky-plants-give.md | 5 - .changeset/warm-lamps-tease.md | 7 - .changeset/wet-dolphins-love.md | 5 - docs/releases/v1.14.0-changelog.md | 2795 +++++++++++++++++ package.json | 2 +- packages/app-defaults/CHANGELOG.md | 18 + packages/app-defaults/package.json | 2 +- packages/app/CHANGELOG.md | 72 + packages/app/package.json | 2 +- packages/backend-app-api/CHANGELOG.md | 17 + packages/backend-app-api/package.json | 2 +- packages/backend-common/CHANGELOG.md | 20 + packages/backend-common/package.json | 2 +- packages/backend-defaults/CHANGELOG.md | 9 + packages/backend-defaults/package.json | 2 +- packages/backend-next/CHANGELOG.md | 22 + packages/backend-next/package.json | 2 +- packages/backend-openapi-utils/CHANGELOG.md | 9 + packages/backend-openapi-utils/package.json | 2 +- packages/backend-plugin-api/CHANGELOG.md | 11 + packages/backend-plugin-api/package.json | 2 +- packages/backend-tasks/CHANGELOG.md | 10 + packages/backend-tasks/package.json | 2 +- packages/backend-test-utils/CHANGELOG.md | 14 + packages/backend-test-utils/package.json | 2 +- packages/backend/CHANGELOG.md | 52 + packages/backend/package.json | 2 +- packages/cli/CHANGELOG.md | 16 + packages/cli/package.json | 2 +- packages/config-loader/CHANGELOG.md | 51 + packages/config-loader/package.json | 2 +- packages/core-app-api/CHANGELOG.md | 16 + packages/core-app-api/package.json | 2 +- packages/core-components/CHANGELOG.md | 15 + packages/core-components/package.json | 2 +- packages/create-app/CHANGELOG.md | 9 + packages/create-app/package.json | 2 +- packages/dev-utils/CHANGELOG.md | 15 + packages/dev-utils/package.json | 2 +- packages/e2e-test/CHANGELOG.md | 9 + packages/e2e-test/package.json | 2 +- packages/integration-aws-node/CHANGELOG.md | 9 + packages/integration-aws-node/package.json | 2 +- packages/integration-react/CHANGELOG.md | 11 + packages/integration-react/package.json | 2 +- packages/integration/CHANGELOG.md | 9 + packages/integration/package.json | 2 +- packages/repo-tools/CHANGELOG.md | 14 + packages/repo-tools/package.json | 2 +- .../techdocs-cli-embedded-app/CHANGELOG.md | 19 + .../techdocs-cli-embedded-app/package.json | 2 +- packages/techdocs-cli/CHANGELOG.md | 11 + packages/techdocs-cli/package.json | 2 +- packages/test-utils/CHANGELOG.md | 13 + packages/test-utils/package.json | 2 +- packages/theme/CHANGELOG.md | 10 + packages/theme/package.json | 2 +- plugins/adr-backend/CHANGELOG.md | 14 + plugins/adr-backend/package.json | 2 +- plugins/adr-common/CHANGELOG.md | 9 + plugins/adr-common/package.json | 2 +- plugins/adr/CHANGELOG.md | 19 + plugins/adr/package.json | 2 +- plugins/airbrake-backend/CHANGELOG.md | 8 + plugins/airbrake-backend/package.json | 2 +- plugins/airbrake/CHANGELOG.md | 13 + plugins/airbrake/package.json | 2 +- plugins/allure/CHANGELOG.md | 11 + plugins/allure/package.json | 2 +- plugins/analytics-module-ga/CHANGELOG.md | 10 + plugins/analytics-module-ga/package.json | 2 +- plugins/analytics-module-ga4/CHANGELOG.md | 14 + plugins/analytics-module-ga4/package.json | 2 +- plugins/apache-airflow/CHANGELOG.md | 8 + plugins/apache-airflow/package.json | 2 +- plugins/api-docs/CHANGELOG.md | 12 + plugins/api-docs/package.json | 2 +- plugins/apollo-explorer/CHANGELOG.md | 9 + plugins/apollo-explorer/package.json | 2 +- plugins/app-backend/CHANGELOG.md | 11 + plugins/app-backend/package.json | 2 +- plugins/auth-backend/CHANGELOG.md | 16 + plugins/auth-backend/package.json | 2 +- plugins/auth-node/CHANGELOG.md | 9 + plugins/auth-node/package.json | 2 +- plugins/azure-devops-backend/CHANGELOG.md | 9 + plugins/azure-devops-backend/package.json | 2 +- plugins/azure-devops/CHANGELOG.md | 17 + plugins/azure-devops/package.json | 2 +- plugins/azure-sites-backend/CHANGELOG.md | 10 + plugins/azure-sites-backend/package.json | 2 +- plugins/azure-sites/CHANGELOG.md | 12 + plugins/azure-sites/package.json | 2 +- plugins/badges-backend/CHANGELOG.md | 21 + plugins/badges-backend/package.json | 2 +- plugins/badges/CHANGELOG.md | 18 + plugins/badges/package.json | 2 +- plugins/bazaar-backend/CHANGELOG.md | 11 + plugins/bazaar-backend/package.json | 2 +- plugins/bazaar/CHANGELOG.md | 16 + plugins/bazaar/package.json | 2 +- plugins/bitbucket-cloud-common/CHANGELOG.md | 7 + plugins/bitbucket-cloud-common/package.json | 2 +- plugins/bitrise/CHANGELOG.md | 11 + plugins/bitrise/package.json | 2 +- .../catalog-backend-module-aws/CHANGELOG.md | 22 + .../catalog-backend-module-aws/package.json | 2 +- .../catalog-backend-module-azure/CHANGELOG.md | 16 + .../catalog-backend-module-azure/package.json | 2 +- .../CHANGELOG.md | 17 + .../package.json | 2 +- .../CHANGELOG.md | 14 + .../package.json | 2 +- .../CHANGELOG.md | 14 + .../package.json | 2 +- .../CHANGELOG.md | 14 + .../package.json | 2 +- .../CHANGELOG.md | 27 + .../package.json | 2 +- .../CHANGELOG.md | 16 + .../package.json | 2 +- .../CHANGELOG.md | 16 + .../package.json | 2 +- .../catalog-backend-module-ldap/CHANGELOG.md | 13 + .../catalog-backend-module-ldap/package.json | 2 +- .../CHANGELOG.md | 13 + .../package.json | 2 +- .../CHANGELOG.md | 15 + .../package.json | 2 +- .../CHANGELOG.md | 15 + .../package.json | 2 +- plugins/catalog-backend/CHANGELOG.md | 29 + plugins/catalog-backend/package.json | 2 +- plugins/catalog-customized/CHANGELOG.md | 8 + plugins/catalog-customized/package.json | 2 +- plugins/catalog-graph/CHANGELOG.md | 13 + plugins/catalog-graph/package.json | 2 +- plugins/catalog-import/CHANGELOG.md | 16 + plugins/catalog-import/package.json | 2 +- plugins/catalog-node/CHANGELOG.md | 12 + plugins/catalog-node/package.json | 2 +- plugins/catalog-react/CHANGELOG.md | 41 + plugins/catalog-react/package.json | 2 +- plugins/catalog/CHANGELOG.md | 41 + plugins/catalog/package.json | 2 +- .../CHANGELOG.md | 9 + .../package.json | 2 +- plugins/cicd-statistics/CHANGELOG.md | 9 + plugins/cicd-statistics/package.json | 2 +- plugins/circleci/CHANGELOG.md | 13 + plugins/circleci/package.json | 2 +- plugins/cloudbuild/CHANGELOG.md | 11 + plugins/cloudbuild/package.json | 2 +- plugins/code-climate/CHANGELOG.md | 11 + plugins/code-climate/package.json | 2 +- plugins/code-coverage-backend/CHANGELOG.md | 12 + plugins/code-coverage-backend/package.json | 2 +- plugins/code-coverage/CHANGELOG.md | 13 + plugins/code-coverage/package.json | 2 +- plugins/codescene/CHANGELOG.md | 11 + plugins/codescene/package.json | 2 +- plugins/config-schema/CHANGELOG.md | 12 + plugins/config-schema/package.json | 2 +- plugins/cost-insights/CHANGELOG.md | 13 + plugins/cost-insights/package.json | 2 +- plugins/devtools-backend/CHANGELOG.md | 20 + plugins/devtools-backend/package.json | 2 +- plugins/devtools-common/CHANGELOG.md | 12 + plugins/devtools-common/package.json | 2 +- plugins/devtools/CHANGELOG.md | 17 + plugins/devtools/package.json | 2 +- plugins/dynatrace/CHANGELOG.md | 11 + plugins/dynatrace/package.json | 2 +- plugins/entity-feedback-backend/CHANGELOG.md | 12 + plugins/entity-feedback-backend/package.json | 2 +- plugins/entity-feedback/CHANGELOG.md | 13 + plugins/entity-feedback/package.json | 2 +- plugins/entity-validation/CHANGELOG.md | 14 + plugins/entity-validation/package.json | 2 +- .../CHANGELOG.md | 17 + .../package.json | 2 +- .../events-backend-module-azure/CHANGELOG.md | 8 + .../events-backend-module-azure/package.json | 2 +- .../CHANGELOG.md | 8 + .../package.json | 2 +- .../events-backend-module-gerrit/CHANGELOG.md | 8 + .../events-backend-module-gerrit/package.json | 2 +- .../events-backend-module-github/CHANGELOG.md | 9 + .../events-backend-module-github/package.json | 2 +- .../events-backend-module-gitlab/CHANGELOG.md | 9 + .../events-backend-module-gitlab/package.json | 2 +- .../events-backend-test-utils/CHANGELOG.md | 7 + .../events-backend-test-utils/package.json | 2 +- plugins/events-backend/CHANGELOG.md | 10 + plugins/events-backend/package.json | 2 +- plugins/events-node/CHANGELOG.md | 7 + plugins/events-node/package.json | 2 +- .../example-todo-list-backend/CHANGELOG.md | 11 + .../example-todo-list-backend/package.json | 2 +- plugins/example-todo-list/CHANGELOG.md | 9 + plugins/example-todo-list/package.json | 2 +- plugins/explore-backend/CHANGELOG.md | 11 + plugins/explore-backend/package.json | 2 +- plugins/explore/CHANGELOG.md | 19 + plugins/explore/package.json | 2 +- plugins/firehydrant/CHANGELOG.md | 11 + plugins/firehydrant/package.json | 2 +- plugins/fossa/CHANGELOG.md | 12 + plugins/fossa/package.json | 2 +- plugins/gcalendar/CHANGELOG.md | 11 + plugins/gcalendar/package.json | 2 +- plugins/gcp-projects/CHANGELOG.md | 9 + plugins/gcp-projects/package.json | 2 +- plugins/git-release-manager/CHANGELOG.md | 10 + plugins/git-release-manager/package.json | 2 +- plugins/github-actions/CHANGELOG.md | 12 + plugins/github-actions/package.json | 2 +- plugins/github-deployments/CHANGELOG.md | 14 + plugins/github-deployments/package.json | 2 +- plugins/github-issues/CHANGELOG.md | 13 + plugins/github-issues/package.json | 2 +- .../github-pull-requests-board/CHANGELOG.md | 13 + .../github-pull-requests-board/package.json | 2 +- plugins/gitops-profiles/CHANGELOG.md | 10 + plugins/gitops-profiles/package.json | 2 +- plugins/gocd/CHANGELOG.md | 12 + plugins/gocd/package.json | 2 +- plugins/graphiql/CHANGELOG.md | 9 + plugins/graphiql/package.json | 2 +- plugins/graphql-backend/CHANGELOG.md | 9 + plugins/graphql-backend/package.json | 2 +- plugins/graphql-voyager/CHANGELOG.md | 9 + plugins/graphql-voyager/package.json | 2 +- plugins/home/CHANGELOG.md | 16 + plugins/home/package.json | 2 +- plugins/ilert/CHANGELOG.md | 12 + plugins/ilert/package.json | 2 +- plugins/jenkins-backend/CHANGELOG.md | 21 + plugins/jenkins-backend/package.json | 2 +- plugins/jenkins/CHANGELOG.md | 19 + plugins/jenkins/package.json | 2 +- plugins/kafka-backend/CHANGELOG.md | 11 + plugins/kafka-backend/package.json | 2 +- plugins/kafka/CHANGELOG.md | 12 + plugins/kafka/package.json | 2 +- plugins/kubernetes-backend/CHANGELOG.md | 33 + plugins/kubernetes-backend/package.json | 2 +- plugins/kubernetes-common/CHANGELOG.md | 9 + plugins/kubernetes-common/package.json | 2 +- plugins/kubernetes/CHANGELOG.md | 50 + plugins/kubernetes/package.json | 2 +- plugins/lighthouse-backend/CHANGELOG.md | 13 + plugins/lighthouse-backend/package.json | 2 +- plugins/lighthouse/CHANGELOG.md | 13 + plugins/lighthouse/package.json | 2 +- plugins/linguist-backend/CHANGELOG.md | 15 + plugins/linguist-backend/package.json | 2 +- plugins/linguist/CHANGELOG.md | 13 + plugins/linguist/package.json | 2 +- plugins/microsoft-calendar/CHANGELOG.md | 10 + plugins/microsoft-calendar/package.json | 2 +- plugins/newrelic-dashboard/CHANGELOG.md | 11 + plugins/newrelic-dashboard/package.json | 2 +- plugins/newrelic/CHANGELOG.md | 9 + plugins/newrelic/package.json | 2 +- plugins/octopus-deploy/CHANGELOG.md | 16 + plugins/octopus-deploy/package.json | 2 +- plugins/org-react/CHANGELOG.md | 12 + plugins/org-react/package.json | 2 +- plugins/org/CHANGELOG.md | 24 + plugins/org/package.json | 2 +- plugins/pagerduty/CHANGELOG.md | 12 + plugins/pagerduty/package.json | 2 +- plugins/periskop-backend/CHANGELOG.md | 9 + plugins/periskop-backend/package.json | 2 +- plugins/periskop/CHANGELOG.md | 12 + plugins/periskop/package.json | 2 +- plugins/permission-backend/CHANGELOG.md | 13 + plugins/permission-backend/package.json | 2 +- plugins/permission-node/CHANGELOG.md | 31 + plugins/permission-node/package.json | 2 +- plugins/playlist-backend/CHANGELOG.md | 15 + plugins/playlist-backend/package.json | 2 +- plugins/playlist/CHANGELOG.md | 17 + plugins/playlist/package.json | 2 +- plugins/proxy-backend/CHANGELOG.md | 9 + plugins/proxy-backend/package.json | 2 +- plugins/puppetdb/CHANGELOG.md | 12 + plugins/puppetdb/package.json | 2 +- plugins/rollbar-backend/CHANGELOG.md | 8 + plugins/rollbar-backend/package.json | 2 +- plugins/rollbar/CHANGELOG.md | 11 + plugins/rollbar/package.json | 2 +- .../CHANGELOG.md | 14 + .../package.json | 2 +- .../CHANGELOG.md | 13 + .../package.json | 2 +- .../CHANGELOG.md | 21 + .../package.json | 2 +- .../CHANGELOG.md | 13 + .../package.json | 2 +- .../CHANGELOG.md | 9 + .../package.json | 2 +- .../CHANGELOG.md | 9 + .../package.json | 2 +- plugins/scaffolder-backend/CHANGELOG.md | 34 + plugins/scaffolder-backend/package.json | 2 +- plugins/scaffolder-common/CHANGELOG.md | 16 + plugins/scaffolder-common/package.json | 2 +- plugins/scaffolder-node/CHANGELOG.md | 11 + plugins/scaffolder-node/package.json | 2 +- plugins/scaffolder-react/CHANGELOG.md | 26 + plugins/scaffolder-react/package.json | 2 +- plugins/scaffolder/CHANGELOG.md | 28 + plugins/scaffolder/package.json | 2 +- .../CHANGELOG.md | 16 + .../package.json | 2 +- .../CHANGELOG.md | 16 + .../package.json | 2 +- .../CHANGELOG.md | 13 + .../package.json | 2 +- plugins/search-backend-module-pg/CHANGELOG.md | 11 + plugins/search-backend-module-pg/package.json | 2 +- .../CHANGELOG.md | 17 + .../package.json | 2 +- plugins/search-backend-node/CHANGELOG.md | 13 + plugins/search-backend-node/package.json | 2 +- plugins/search-backend/CHANGELOG.md | 17 + plugins/search-backend/package.json | 2 +- plugins/search-react/CHANGELOG.md | 24 + plugins/search-react/package.json | 2 +- plugins/search/CHANGELOG.md | 26 + plugins/search/package.json | 2 +- plugins/sentry/CHANGELOG.md | 11 + plugins/sentry/package.json | 2 +- plugins/shortcuts/CHANGELOG.md | 11 + plugins/shortcuts/package.json | 2 +- plugins/sonarqube-backend/CHANGELOG.md | 9 + plugins/sonarqube-backend/package.json | 2 +- plugins/sonarqube/CHANGELOG.md | 12 + plugins/sonarqube/package.json | 2 +- plugins/splunk-on-call/CHANGELOG.md | 11 + plugins/splunk-on-call/package.json | 2 +- plugins/stack-overflow-backend/CHANGELOG.md | 9 + plugins/stack-overflow-backend/package.json | 2 +- plugins/stack-overflow/CHANGELOG.md | 14 + plugins/stack-overflow/package.json | 2 +- plugins/stackstorm/CHANGELOG.md | 10 + plugins/stackstorm/package.json | 2 +- .../CHANGELOG.md | 11 + .../package.json | 2 +- plugins/tech-insights-backend/CHANGELOG.md | 15 + plugins/tech-insights-backend/package.json | 2 +- plugins/tech-insights-node/CHANGELOG.md | 11 + plugins/tech-insights-node/package.json | 2 +- plugins/tech-insights/CHANGELOG.md | 21 + plugins/tech-insights/package.json | 2 +- plugins/tech-radar/CHANGELOG.md | 11 + plugins/tech-radar/package.json | 2 +- .../techdocs-addons-test-utils/CHANGELOG.md | 16 + .../techdocs-addons-test-utils/package.json | 2 +- plugins/techdocs-backend/CHANGELOG.md | 18 + plugins/techdocs-backend/package.json | 2 +- .../CHANGELOG.md | 13 + .../package.json | 2 +- plugins/techdocs-node/CHANGELOG.md | 14 + plugins/techdocs-node/package.json | 2 +- plugins/techdocs-react/CHANGELOG.md | 11 + plugins/techdocs-react/package.json | 2 +- plugins/techdocs/CHANGELOG.md | 19 + plugins/techdocs/package.json | 2 +- plugins/todo-backend/CHANGELOG.md | 15 + plugins/todo-backend/package.json | 2 +- plugins/todo/CHANGELOG.md | 12 + plugins/todo/package.json | 2 +- plugins/user-settings-backend/CHANGELOG.md | 12 + plugins/user-settings-backend/package.json | 2 +- plugins/user-settings/CHANGELOG.md | 14 + plugins/user-settings/package.json | 2 +- plugins/vault-backend/CHANGELOG.md | 10 + plugins/vault-backend/package.json | 2 +- plugins/vault/CHANGELOG.md | 12 + plugins/vault/package.json | 2 +- plugins/xcmetrics/CHANGELOG.md | 10 + plugins/xcmetrics/package.json | 2 +- yarn.lock | 276 +- 491 files changed, 5840 insertions(+), 1422 deletions(-) delete mode 100644 .changeset/afraid-shirts-train.md delete mode 100644 .changeset/angry-ducks-shake.md delete mode 100644 .changeset/backend-like-a-tattoo.md delete mode 100644 .changeset/beige-tigers-matter.md delete mode 100644 .changeset/big-days-press.md delete mode 100644 .changeset/blue-eyes-run.md delete mode 100644 .changeset/brown-eyes-yell.md delete mode 100644 .changeset/brown-keys-raise.md delete mode 100644 .changeset/brown-meals-trade.md delete mode 100644 .changeset/calm-buttons-type.md delete mode 100644 .changeset/calm-snails-trade.md delete mode 100644 .changeset/calm-wolves-taste.md delete mode 100644 .changeset/chilled-goats-jump.md delete mode 100644 .changeset/chilled-pants-wonder.md delete mode 100644 .changeset/chilled-queens-wonder.md delete mode 100644 .changeset/chilly-fireants-type.md delete mode 100644 .changeset/chilly-taxis-shop.md delete mode 100644 .changeset/clean-lobsters-brake.md delete mode 100644 .changeset/clever-coins-deny.md delete mode 100644 .changeset/cold-drinks-exercise.md delete mode 100644 .changeset/cold-laws-turn.md delete mode 100644 .changeset/cool-dingos-repair.md delete mode 100644 .changeset/create-app-1682437922.md delete mode 100644 .changeset/curly-rats-fold.md delete mode 100644 .changeset/curvy-months-appear.md delete mode 100644 .changeset/dry-boats-sniff.md delete mode 100644 .changeset/dull-wombats-stare.md delete mode 100644 .changeset/eighty-olives-live.md delete mode 100644 .changeset/eleven-taxis-notice.md delete mode 100644 .changeset/extragavent-fast-fly.md delete mode 100644 .changeset/fair-suits-warn.md delete mode 100644 .changeset/fast-wasps-peel.md delete mode 100644 .changeset/fifty-grapes-explode.md delete mode 100644 .changeset/fifty-laws-count.md delete mode 100644 .changeset/five-lies-confess.md delete mode 100644 .changeset/five-tigers-whisper.md delete mode 100644 .changeset/fluffy-crabs-reply.md delete mode 100644 .changeset/fluffy-mirrors-happen.md delete mode 100644 .changeset/fresh-moons-unite.md delete mode 100644 .changeset/friendly-frogs-drop.md delete mode 100644 .changeset/funny-cups-count.md delete mode 100644 .changeset/funny-trains-sniff.md delete mode 100644 .changeset/giant-students-lie.md delete mode 100644 .changeset/gold-vans-sin.md delete mode 100644 .changeset/good-lions-approve.md delete mode 100644 .changeset/green-cheetahs-cover.md delete mode 100644 .changeset/healthy-ladybugs-chew.md delete mode 100644 .changeset/heavy-penguins-burn.md delete mode 100644 .changeset/honest-comics-ring.md delete mode 100644 .changeset/honest-countries-deny.md delete mode 100644 .changeset/honest-turkeys-learn.md delete mode 100644 .changeset/hungry-countries-enjoy.md delete mode 100644 .changeset/hungry-foxes-divide.md delete mode 100644 .changeset/hungry-peas-sing.md delete mode 100644 .changeset/itchy-impalas-fold.md delete mode 100644 .changeset/khaki-brooms-kiss.md delete mode 100644 .changeset/late-lizards-unite.md delete mode 100644 .changeset/lazy-keys-work.md delete mode 100644 .changeset/mighty-bears-glow.md delete mode 100644 .changeset/mighty-cows-greet.md delete mode 100644 .changeset/modern-pumpkins-join.md delete mode 100644 .changeset/moody-lizards-beam.md delete mode 100644 .changeset/moody-shrimps-train.md delete mode 100644 .changeset/new-roses-fail.md delete mode 100644 .changeset/nice-ants-type.md delete mode 100644 .changeset/nine-planes-carry.md delete mode 100644 .changeset/nine-ties-smoke.md delete mode 100644 .changeset/ninety-eggs-lie.md delete mode 100644 .changeset/ninety-mugs-sin.md delete mode 100644 .changeset/olive-turkeys-switch.md delete mode 100644 .changeset/polite-dingos-train.md delete mode 100644 .changeset/pre.json delete mode 100644 .changeset/pretty-gifts-greet.md delete mode 100644 .changeset/proud-chairs-sleep.md delete mode 100644 .changeset/quick-flies-guess.md delete mode 100644 .changeset/quiet-bikes-smash.md delete mode 100644 .changeset/quiet-stingrays-fly.md delete mode 100644 .changeset/rare-elephants-arrive.md delete mode 100644 .changeset/real-baboons-vanish.md delete mode 100644 .changeset/red-cheetahs-invite.md delete mode 100644 .changeset/red-parrots-attack.md delete mode 100644 .changeset/rotten-chefs-jog.md delete mode 100644 .changeset/serious-hornets-remember.md delete mode 100644 .changeset/serious-phones-flash.md delete mode 100644 .changeset/shy-worms-enjoy.md delete mode 100644 .changeset/six-mails-shout.md delete mode 100644 .changeset/sixty-falcons-protect.md delete mode 100644 .changeset/slimy-turkeys-return.md delete mode 100644 .changeset/soft-readers-exist.md delete mode 100644 .changeset/spicy-spies-warn.md delete mode 100644 .changeset/spotty-walls-serve.md delete mode 100644 .changeset/stupid-seas-stare.md delete mode 100644 .changeset/swift-fishes-run.md delete mode 100644 .changeset/swift-students-type.md delete mode 100644 .changeset/thick-parents-pump.md delete mode 100644 .changeset/thick-pugs-rush.md delete mode 100644 .changeset/thin-ways-exist.md delete mode 100644 .changeset/thirty-jobs-sort.md delete mode 100644 .changeset/three-tools-pump.md delete mode 100644 .changeset/tiny-crews-pull.md delete mode 100644 .changeset/tough-moles-whisper.md delete mode 100644 .changeset/twelve-birds-boil.md delete mode 100644 .changeset/twelve-zebras-repair.md delete mode 100644 .changeset/two-gorillas-drop.md delete mode 100644 .changeset/unlucky-deers-teach.md delete mode 100644 .changeset/unlucky-plants-give.md delete mode 100644 .changeset/warm-lamps-tease.md delete mode 100644 .changeset/wet-dolphins-love.md create mode 100644 docs/releases/v1.14.0-changelog.md diff --git a/.changeset/afraid-shirts-train.md b/.changeset/afraid-shirts-train.md deleted file mode 100644 index bd83716dc4..0000000000 --- a/.changeset/afraid-shirts-train.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -'@backstage/plugin-tech-insights': patch ---- - -Added the possibility to customize the check description in the scorecard component. - -- The `CheckResultRenderer` type now exposes an optional `description` method that allows to overwrite the description with a different string or a React component for a provided check result. - -Until now only the `BooleanCheck` element could be overridden, but from now on it's also possible to override the description for a check. -As an example, the description could change depending on the check result. Refer to the [README](https://github.com/backstage/backstage/blob/master/plugins/tech-insights/README.md#adding-custom-rendering-components) file for more details diff --git a/.changeset/angry-ducks-shake.md b/.changeset/angry-ducks-shake.md deleted file mode 100644 index 58975123b4..0000000000 --- a/.changeset/angry-ducks-shake.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-test-utils': patch ---- - -Allow specifying custom Docker registry for database tests diff --git a/.changeset/backend-like-a-tattoo.md b/.changeset/backend-like-a-tattoo.md deleted file mode 100644 index 0d2edfa7a9..0000000000 --- a/.changeset/backend-like-a-tattoo.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-test-utils': patch ---- - -Added `POSTGRES_11` and `POSTGRES_12` as supported test database IDs. diff --git a/.changeset/beige-tigers-matter.md b/.changeset/beige-tigers-matter.md deleted file mode 100644 index 248ce1fbf9..0000000000 --- a/.changeset/beige-tigers-matter.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder': patch ---- - -Fix case GitLab workspace is a nested subgroup diff --git a/.changeset/big-days-press.md b/.changeset/big-days-press.md deleted file mode 100644 index 7dec7d6288..0000000000 --- a/.changeset/big-days-press.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': minor ---- - -Expose both types of scaffolder permissions and rules through the metadata endpoint. - -The metadata endpoint now correctly exposes both types of scaffolder permissions and rules (for both the template and action resource types) through the metadata endpoint. diff --git a/.changeset/blue-eyes-run.md b/.changeset/blue-eyes-run.md deleted file mode 100644 index 1b96e01f1c..0000000000 --- a/.changeset/blue-eyes-run.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/plugin-devtools': minor -'@backstage/plugin-devtools-backend': minor -'@backstage/plugin-devtools-common': minor ---- - -Introduced the DevTools plugin, checkout the plugin's [`README.md`](https://github.com/backstage/backstage/tree/master/plugins/devtools) for more details! diff --git a/.changeset/brown-eyes-yell.md b/.changeset/brown-eyes-yell.md deleted file mode 100644 index 5ed4140bba..0000000000 --- a/.changeset/brown-eyes-yell.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-github-pull-requests-board': patch ---- - -The `EntityTeamPullRequestsContent` and `EntityTeamPullRequestsCard` support the ability to view the labels/tags added to each PR diff --git a/.changeset/brown-keys-raise.md b/.changeset/brown-keys-raise.md deleted file mode 100644 index 1d288d9f57..0000000000 --- a/.changeset/brown-keys-raise.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/plugin-kubernetes': patch ---- - -The Kubernetes plugin now requests AKS access tokens from Azure when retrieving -objects from clusters configured with `authProvider: aks` and sets `auth.aks` in -its request bodies appropriately. diff --git a/.changeset/brown-meals-trade.md b/.changeset/brown-meals-trade.md deleted file mode 100644 index f6849fa19b..0000000000 --- a/.changeset/brown-meals-trade.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/repo-tools': minor ---- - -**BREAKING**: The OpenAPI commands are now found within the `schema openapi` sub-command. For example `yarn backstage-repo-tools schema:openapi:verify` is now `yarn backstage-repo-tools schema openapi verify`. diff --git a/.changeset/calm-buttons-type.md b/.changeset/calm-buttons-type.md deleted file mode 100644 index 11b300a684..0000000000 --- a/.changeset/calm-buttons-type.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': patch ---- - -Bump minimum required version of `vm2` to be 3.9.18 diff --git a/.changeset/calm-snails-trade.md b/.changeset/calm-snails-trade.md deleted file mode 100644 index 0738b5aa37..0000000000 --- a/.changeset/calm-snails-trade.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-bazaar': patch ---- - -Fixed `validateDOMNesting` warnings diff --git a/.changeset/calm-wolves-taste.md b/.changeset/calm-wolves-taste.md deleted file mode 100644 index ec0a7fb4f0..0000000000 --- a/.changeset/calm-wolves-taste.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-search': patch ---- - -Fixed 404 Error when fetching search results due to URL encoding changes diff --git a/.changeset/chilled-goats-jump.md b/.changeset/chilled-goats-jump.md deleted file mode 100644 index 3dd152712a..0000000000 --- a/.changeset/chilled-goats-jump.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/create-app': patch ---- - -Correct command to create new plugins diff --git a/.changeset/chilled-pants-wonder.md b/.changeset/chilled-pants-wonder.md deleted file mode 100644 index 501ced7cba..0000000000 --- a/.changeset/chilled-pants-wonder.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-openapi-utils': patch ---- - -Use permalinks for links including a line number reference diff --git a/.changeset/chilled-queens-wonder.md b/.changeset/chilled-queens-wonder.md deleted file mode 100644 index a10212792d..0000000000 --- a/.changeset/chilled-queens-wonder.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend': patch ---- - -Ensure that entity cache state is only written to the database when actually changed diff --git a/.changeset/chilly-fireants-type.md b/.changeset/chilly-fireants-type.md deleted file mode 100644 index 6bff750d57..0000000000 --- a/.changeset/chilly-fireants-type.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-common': patch ---- - -Remove the direct dependency on deprecated "request" library diff --git a/.changeset/chilly-taxis-shop.md b/.changeset/chilly-taxis-shop.md deleted file mode 100644 index 9e2e73a5e3..0000000000 --- a/.changeset/chilly-taxis-shop.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-home': patch ---- - -Remove object-hash dependency diff --git a/.changeset/clean-lobsters-brake.md b/.changeset/clean-lobsters-brake.md deleted file mode 100644 index f6da6e986e..0000000000 --- a/.changeset/clean-lobsters-brake.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/plugin-kubernetes-backend': minor ---- - -Allow fetching pod metrics limited by a `labelSelector`. - -This is used by the Kubernetes tab on a components' page and leads to much smaller responses being received from Kubernetes, especially with larger Kubernetes clusters. diff --git a/.changeset/clever-coins-deny.md b/.changeset/clever-coins-deny.md deleted file mode 100644 index 0c1e2ade26..0000000000 --- a/.changeset/clever-coins-deny.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-home': patch ---- - -Use the semantic time tag for rendering world clocks on homepage headers. diff --git a/.changeset/cold-drinks-exercise.md b/.changeset/cold-drinks-exercise.md deleted file mode 100644 index e47e133929..0000000000 --- a/.changeset/cold-drinks-exercise.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-explore': patch ---- - -Make sure that the first support button row does not break across lines diff --git a/.changeset/cold-laws-turn.md b/.changeset/cold-laws-turn.md deleted file mode 100644 index 6220f088db..0000000000 --- a/.changeset/cold-laws-turn.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-events-backend-module-aws-sqs': minor ---- - -Allow endpoint configuration for sqs, enabling use of localstack for testing. diff --git a/.changeset/cool-dingos-repair.md b/.changeset/cool-dingos-repair.md deleted file mode 100644 index fe8377f5f1..0000000000 --- a/.changeset/cool-dingos-repair.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/theme': minor ---- - -Updates light theme's primary foreground and `running` status indicator colours to meet WCAG. Previously #2E77D0 changed to #1F5493. diff --git a/.changeset/create-app-1682437922.md b/.changeset/create-app-1682437922.md deleted file mode 100644 index b50d431d4b..0000000000 --- a/.changeset/create-app-1682437922.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/create-app': patch ---- - -Bumped create-app version. diff --git a/.changeset/curly-rats-fold.md b/.changeset/curly-rats-fold.md deleted file mode 100644 index c4cd8d514b..0000000000 --- a/.changeset/curly-rats-fold.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend': patch ---- - -Internal refactoring for performance in the service handlers diff --git a/.changeset/curvy-months-appear.md b/.changeset/curvy-months-appear.md deleted file mode 100644 index 487e60c437..0000000000 --- a/.changeset/curvy-months-appear.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-techdocs': patch ---- - -Re-add the possibility to have trailing slashes in Techdocs navigation. diff --git a/.changeset/dry-boats-sniff.md b/.changeset/dry-boats-sniff.md deleted file mode 100644 index 0c359b5536..0000000000 --- a/.changeset/dry-boats-sniff.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -'@backstage/app-defaults': patch ---- - -Added a System Icon for resource entities. -This can be obtained using: - -```ts -useApp().getSystemIcon('kind:resource'); -``` diff --git a/.changeset/dull-wombats-stare.md b/.changeset/dull-wombats-stare.md deleted file mode 100644 index 36ba412c02..0000000000 --- a/.changeset/dull-wombats-stare.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-openapi-utils': patch ---- - -Adjusted README accordingly after the generated output now has a `.generated.ts` extension diff --git a/.changeset/eighty-olives-live.md b/.changeset/eighty-olives-live.md deleted file mode 100644 index 16898701f4..0000000000 --- a/.changeset/eighty-olives-live.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-common': patch ---- - -Updated the `DatabaseManager` to include the plugin id in the Postgres application name of the database connections created for each plugin. diff --git a/.changeset/eleven-taxis-notice.md b/.changeset/eleven-taxis-notice.md deleted file mode 100644 index 88a25991fa..0000000000 --- a/.changeset/eleven-taxis-notice.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend-module-confluence-to-markdown': patch -'@backstage/config-loader': patch -'@backstage/plugin-auth-backend': patch ---- - -Fixed the way that some request errors are thrown diff --git a/.changeset/extragavent-fast-fly.md b/.changeset/extragavent-fast-fly.md deleted file mode 100644 index 697b5163ec..0000000000 --- a/.changeset/extragavent-fast-fly.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -'@backstage/plugin-badges': patch -'@backstage/plugin-badges-backend': minor ---- - -Fixing badges-backend plugin to get a token from the TokenManager instead of parsing the request header. Hence, it's now possible to disable the authMiddleware for the badges-backend plugin to expose publicly the badges. - -Implementing an obfuscation feature to protect an open badges endpoint from being enumerated. The feature is disabled by default and the change is compatible with the previous version. - -**BREAKING**: `createRouter` now require that `tokenManager`, `logger`, and `identityApi`, are passed in as options. diff --git a/.changeset/fair-suits-warn.md b/.changeset/fair-suits-warn.md deleted file mode 100644 index 3edc2aa1ca..0000000000 --- a/.changeset/fair-suits-warn.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-tech-radar': patch ---- - -Fix description links when clicking entry in radar. diff --git a/.changeset/fast-wasps-peel.md b/.changeset/fast-wasps-peel.md deleted file mode 100644 index 075336a506..0000000000 --- a/.changeset/fast-wasps-peel.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -Enable strict config checking during `backstage-cli config:check` with the new `--strict` option which will surface schema errors. diff --git a/.changeset/fifty-grapes-explode.md b/.changeset/fifty-grapes-explode.md deleted file mode 100644 index 999a105c4f..0000000000 --- a/.changeset/fifty-grapes-explode.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend': patch ---- - -Fixed a bug in the `queryEntities` endpoint that was causing filtered entities to be included in cursor requests. diff --git a/.changeset/fifty-laws-count.md b/.changeset/fifty-laws-count.md deleted file mode 100644 index f20e41fc20..0000000000 --- a/.changeset/fifty-laws-count.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-kubernetes': patch ---- - -Omit managed fields in the Kubernetes resource YAML display. diff --git a/.changeset/five-lies-confess.md b/.changeset/five-lies-confess.md deleted file mode 100644 index eefd2bd6fa..0000000000 --- a/.changeset/five-lies-confess.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend': patch ---- - -Improve the query for orphan pruning diff --git a/.changeset/five-tigers-whisper.md b/.changeset/five-tigers-whisper.md deleted file mode 100644 index aa9758c3b5..0000000000 --- a/.changeset/five-tigers-whisper.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-stack-overflow': patch ---- - -StackOverflowSearchResultListItem can now accept an empty result prop so that it can be rendered in the suggested SearchResultListItem pattern. diff --git a/.changeset/fluffy-crabs-reply.md b/.changeset/fluffy-crabs-reply.md deleted file mode 100644 index 0665dd864d..0000000000 --- a/.changeset/fluffy-crabs-reply.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-search-backend-module-elasticsearch': minor ---- - -Upgrade to aws-sdk v3 and include OpenSearch Serverless support diff --git a/.changeset/fluffy-mirrors-happen.md b/.changeset/fluffy-mirrors-happen.md deleted file mode 100644 index 6dce398217..0000000000 --- a/.changeset/fluffy-mirrors-happen.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/plugin-kubernetes-backend': patch ---- - -Kubernetes clusters now support `authProvider: aks`. When configured this way, -the `retrieveObjectsByServiceId` action will use the `auth.aks` value in the -request body as a bearer token to authenticate with Kubernetes. diff --git a/.changeset/fresh-moons-unite.md b/.changeset/fresh-moons-unite.md deleted file mode 100644 index 3d3af7e698..0000000000 --- a/.changeset/fresh-moons-unite.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend': patch ---- - -Adjusted the OpenAPI schema file name according to the new structure diff --git a/.changeset/friendly-frogs-drop.md b/.changeset/friendly-frogs-drop.md deleted file mode 100644 index 682f1dbabb..0000000000 --- a/.changeset/friendly-frogs-drop.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend': patch ---- - -Change orphan cleanup task to only log a message if it deleted entities. diff --git a/.changeset/funny-cups-count.md b/.changeset/funny-cups-count.md deleted file mode 100644 index 19dbc3b8bf..0000000000 --- a/.changeset/funny-cups-count.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-gcalendar': patch ---- - -Pass user info email scope on auth refresh to resolve invalid credentials error diff --git a/.changeset/funny-trains-sniff.md b/.changeset/funny-trains-sniff.md deleted file mode 100644 index 91dbd28c28..0000000000 --- a/.changeset/funny-trains-sniff.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -'@backstage/plugin-catalog-react': minor -'@backstage/plugin-catalog': minor ---- - -Added an entity namespace filter and column on the default catalog page. - -If you have a custom version of the catalog page, you can add this filter in your CatalogPage code: - -```ts - - - - - - /* if you want namespace picker */ - - - - - - -``` - -The namespace column can be added using `createNamespaceColumn();`. This is only needed if you customized the columns for CatalogTable. diff --git a/.changeset/giant-students-lie.md b/.changeset/giant-students-lie.md deleted file mode 100644 index fdcb406296..0000000000 --- a/.changeset/giant-students-lie.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': minor ---- - -Add ability to use `defaultNamespace` and `defaultKind` for scaffolder action `catalog:fetch` diff --git a/.changeset/gold-vans-sin.md b/.changeset/gold-vans-sin.md deleted file mode 100644 index d99cb9834d..0000000000 --- a/.changeset/gold-vans-sin.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend-module-gitlab': patch ---- - -Fix input schema validation issue for gitlab actions: - -- gitlab:group:ensureExists -- gitlab:projectAccessToken:create -- gitlab:projectDeployToken:create -- gitlab:projectVariable:create diff --git a/.changeset/good-lions-approve.md b/.changeset/good-lions-approve.md deleted file mode 100644 index f4065a6ab3..0000000000 --- a/.changeset/good-lions-approve.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/integration': patch ---- - -Fixed a bug where the wrong credentials would be selected when using multiple GitHub app integrations. diff --git a/.changeset/green-cheetahs-cover.md b/.changeset/green-cheetahs-cover.md deleted file mode 100644 index 2633a5af01..0000000000 --- a/.changeset/green-cheetahs-cover.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/core-app-api': minor ---- - -The analytics' `navigate` event will now include the route parameters as attributes of the navigate event diff --git a/.changeset/healthy-ladybugs-chew.md b/.changeset/healthy-ladybugs-chew.md deleted file mode 100644 index 83f53d5c2c..0000000000 --- a/.changeset/healthy-ladybugs-chew.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/repo-tools': minor ---- - -Generated OpenAPI files now have a `.generated.ts` file name and a warning header at the top, to highlight that they should not be edited by hand. diff --git a/.changeset/heavy-penguins-burn.md b/.changeset/heavy-penguins-burn.md deleted file mode 100644 index b8c243a99b..0000000000 --- a/.changeset/heavy-penguins-burn.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-scaffolder-common': minor -'@backstage/plugin-scaffolder-react': minor ---- - -Add support for Markdown text blob outputs from templates diff --git a/.changeset/honest-comics-ring.md b/.changeset/honest-comics-ring.md deleted file mode 100644 index 38a962c5d3..0000000000 --- a/.changeset/honest-comics-ring.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-todo-backend': patch ---- - -Added OpenAPI schema diff --git a/.changeset/honest-countries-deny.md b/.changeset/honest-countries-deny.md deleted file mode 100644 index 14c9094592..0000000000 --- a/.changeset/honest-countries-deny.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-jenkins-backend': patch ---- - -Fix handling of slashes in branch names diff --git a/.changeset/honest-turkeys-learn.md b/.changeset/honest-turkeys-learn.md deleted file mode 100644 index e4e6aae5fc..0000000000 --- a/.changeset/honest-turkeys-learn.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend': patch ---- - -Remove unnecessary join in the entity facets endpoint, exclude nulls diff --git a/.changeset/hungry-countries-enjoy.md b/.changeset/hungry-countries-enjoy.md deleted file mode 100644 index c14ec702b9..0000000000 --- a/.changeset/hungry-countries-enjoy.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/core-app-api': patch ---- - -Fixed a bug in the Azure auth provider which prevented getting access tokens with multiple scopes for one resource diff --git a/.changeset/hungry-foxes-divide.md b/.changeset/hungry-foxes-divide.md deleted file mode 100644 index 589c899443..0000000000 --- a/.changeset/hungry-foxes-divide.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-graph': patch ---- - -Expose all `EntityRelationsGraphProps` to Catalog Graph Page diff --git a/.changeset/hungry-peas-sing.md b/.changeset/hungry-peas-sing.md deleted file mode 100644 index 8c39d33ddd..0000000000 --- a/.changeset/hungry-peas-sing.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-openapi': patch ---- - -Fixed bug in `jsonSchemaRefPlaceholderResolver` where relative $ref files were resolved through file system instead of base URL of file diff --git a/.changeset/itchy-impalas-fold.md b/.changeset/itchy-impalas-fold.md deleted file mode 100644 index 31840124ad..0000000000 --- a/.changeset/itchy-impalas-fold.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -'@backstage/plugin-events-backend-module-aws-sqs': patch -'@backstage/integration-aws-node': patch -'@backstage/plugin-kubernetes-backend': patch -'@backstage/backend-common': patch -'@backstage/plugin-techdocs-node': patch ---- - -Standardize `@aws-sdk` v3 versions diff --git a/.changeset/khaki-brooms-kiss.md b/.changeset/khaki-brooms-kiss.md deleted file mode 100644 index 76d4ff2cd2..0000000000 --- a/.changeset/khaki-brooms-kiss.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-explore': patch ---- - -Display the title of the entity on the explore card if present, otherwise stick to the name diff --git a/.changeset/late-lizards-unite.md b/.changeset/late-lizards-unite.md deleted file mode 100644 index bf0a03de12..0000000000 --- a/.changeset/late-lizards-unite.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/config-loader': patch ---- - -Added a new `noUndeclaredProperties` option to `SchemaLoader` to support enforcing that there are no extra keys when verifying config. diff --git a/.changeset/lazy-keys-work.md b/.changeset/lazy-keys-work.md deleted file mode 100644 index 8a01662929..0000000000 --- a/.changeset/lazy-keys-work.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-circleci': patch ---- - -Fixes row display for in progress jobs to not display trailing "took" diff --git a/.changeset/mighty-bears-glow.md b/.changeset/mighty-bears-glow.md deleted file mode 100644 index e540cdd8ae..0000000000 --- a/.changeset/mighty-bears-glow.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -'@backstage/plugin-search-react': minor -'@backstage/plugin-search': minor ---- - -Add close button & improve search input. - -MUI's Paper wrapping the SearchBar in the SearchPage was removed, we recommend users update their apps accordingly. - -SearchBarBase's TextField's label support added & aria-label uses label string if present, tests relying on the default placeholder value should still work unless custom placeholder was given. diff --git a/.changeset/mighty-cows-greet.md b/.changeset/mighty-cows-greet.md deleted file mode 100644 index 2e871db0c6..0000000000 --- a/.changeset/mighty-cows-greet.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-analytics-module-ga4': minor ---- - -Plugin provides Backstage Analytics API for Google Analytics 4. Once installed and configured, analytics events will be sent to GA4 as your users navigate and use your Backstage instance diff --git a/.changeset/modern-pumpkins-join.md b/.changeset/modern-pumpkins-join.md deleted file mode 100644 index dc0e4a6575..0000000000 --- a/.changeset/modern-pumpkins-join.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-app-api': patch ---- - -Switch `configServiceFactory` to use `ConfigSources` from `@backstage/config-loader` to load config. diff --git a/.changeset/moody-lizards-beam.md b/.changeset/moody-lizards-beam.md deleted file mode 100644 index 68fb9a9e40..0000000000 --- a/.changeset/moody-lizards-beam.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -'@backstage/config-loader': minor ---- - -Introduced a new config source system to replace `loadConfig`. There is a new `ConfigSource` interface along with utilities provided by `ConfigSources`, as well as a number of built-in configuration source implementations. The new system is more flexible and makes it easier to create new and reusable sources of configuration, such as loading configuration from secret providers. - -The following is an example of how to load configuration using the default behavior: - -```ts -const source = ConfigSources.default({ - argv: options?.argv, - remote: options?.remote, -}); -const config = await ConfigSources.toConfig(source); -``` - -The `ConfigSource` interface looks like this: - -```ts -export interface ConfigSource { - readConfigData(options?: ReadConfigDataOptions): AsyncConfigSourceIterator; -} -``` - -It is best implemented using an async iterator: - -```ts -class MyConfigSource implements ConfigSource { - async *readConfigData() { - yield { - config: [ - { - context: 'example', - data: { backend: { baseUrl: 'http://localhost' } }, - }, - ], - }; - } -} -``` diff --git a/.changeset/moody-shrimps-train.md b/.changeset/moody-shrimps-train.md deleted file mode 100644 index 397500e2cb..0000000000 --- a/.changeset/moody-shrimps-train.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend-module-gitlab': minor ---- - -Add a new scaffolder action for gitlab to ensure a group exists diff --git a/.changeset/new-roses-fail.md b/.changeset/new-roses-fail.md deleted file mode 100644 index 77495c5f54..0000000000 --- a/.changeset/new-roses-fail.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -'@backstage/plugin-org': patch ---- - -Changed the MembersListCard component to allow displaying aggregated members when viewing a group. Now, a toggle switch can be displayed that lets you switch between showing direct members and aggregated members. - -To enable this new feature, set the showAggregateMembersToggle prop on EntityMembersListCard: - -```jsx -// In packages/app/src/components/catalog/EntityPage.tsx -const groupPage = ( - // ... - - // ... -); -``` diff --git a/.changeset/nice-ants-type.md b/.changeset/nice-ants-type.md deleted file mode 100644 index 632d323213..0000000000 --- a/.changeset/nice-ants-type.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-aws': minor ---- - -**BREAKING**: AwsOrganizationCloudAccountProcessor.fromConfig now returns a promise instead of the instance directly. diff --git a/.changeset/nine-planes-carry.md b/.changeset/nine-planes-carry.md deleted file mode 100644 index 414cc25680..0000000000 --- a/.changeset/nine-planes-carry.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-azure-sites-backend': patch ---- - -Updated URL to `/health` and corrected typos in the `README.md` diff --git a/.changeset/nine-ties-smoke.md b/.changeset/nine-ties-smoke.md deleted file mode 100644 index f7ae8016be..0000000000 --- a/.changeset/nine-ties-smoke.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-home': patch ---- - -Bump to using the later v5 versions of `@rjsf/*` diff --git a/.changeset/ninety-eggs-lie.md b/.changeset/ninety-eggs-lie.md deleted file mode 100644 index 83b04b82af..0000000000 --- a/.changeset/ninety-eggs-lie.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/core-components': patch -'@backstage/theme': patch ---- - -Fix accessibility issue with Backstage Table's header style diff --git a/.changeset/ninety-mugs-sin.md b/.changeset/ninety-mugs-sin.md deleted file mode 100644 index 6b71a00667..0000000000 --- a/.changeset/ninety-mugs-sin.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-search-react': minor ---- - - accepts InputProp property that can override keys from default diff --git a/.changeset/olive-turkeys-switch.md b/.changeset/olive-turkeys-switch.md deleted file mode 100644 index d208f3b197..0000000000 --- a/.changeset/olive-turkeys-switch.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-github': patch ---- - -Fixed bug in queryWithPaging that caused secondary rate limit errors in GitHub with organizations having more than 1000 repositories. This change makes one request per second to avoid concurrency issues. diff --git a/.changeset/polite-dingos-train.md b/.changeset/polite-dingos-train.md deleted file mode 100644 index 49ac56a000..0000000000 --- a/.changeset/polite-dingos-train.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -'@backstage/plugin-kubernetes': minor ---- - -Added Pod logs components for Kubernetes plugin - -**BREAKING**: `kubernetesProxyApi` for custom plugins built with components from the Kubernetes plugin apis, `kubernetesProxyApi` should be added to the plugin's API list. - -``` -... -export const kubernetesPlugin = createPlugin({ - id: 'kubernetes', - apis: [ -... - createApiFactory({ - api: kubernetesProxyApiRef, - deps: { - kubernetesApi: kubernetesApiRef, - }, - factory: ({ kubernetesApi }) => - new KubernetesProxyClient({ - kubernetesApi, - }), - }), -``` - -**BREAKING**: `KubernetesDrawer` is now called `KubernetesStructuredMetadataTableDrawer` so that we can do more than just show `StructuredMetadataTable` - -`import { KubernetesDrawer } from "@backstage/plugin-kubernetes"` - -should now be: - -`import { KubernetesStructuredMetadataTableDrawer } from "@backstage/plugin-kubernetes"` diff --git a/.changeset/pre.json b/.changeset/pre.json deleted file mode 100644 index bec2a1e2df..0000000000 --- a/.changeset/pre.json +++ /dev/null @@ -1,308 +0,0 @@ -{ - "mode": "exit", - "tag": "next", - "initialVersions": { - "example-app": "0.2.82", - "@backstage/app-defaults": "1.3.0", - "example-backend": "0.2.82", - "@backstage/backend-app-api": "0.4.2", - "@backstage/backend-common": "0.18.4", - "@backstage/backend-defaults": "0.1.9", - "@backstage/backend-dev-utils": "0.1.1", - "example-backend-next": "0.0.10", - "@backstage/backend-openapi-utils": "0.0.1", - "@backstage/backend-plugin-api": "0.5.1", - "@backstage/backend-tasks": "0.5.1", - "@backstage/backend-test-utils": "0.1.36", - "@backstage/catalog-client": "1.4.1", - "@backstage/catalog-model": "1.3.0", - "@backstage/cli": "0.22.6", - "@backstage/cli-common": "0.1.12", - "@backstage/cli-node": "0.1.0", - "@backstage/codemods": "0.1.44", - "@backstage/config": "1.0.7", - "@backstage/config-loader": "1.2.0", - "@backstage/core-app-api": "1.7.0", - "@backstage/core-components": "0.13.0", - "@backstage/core-plugin-api": "1.5.1", - "@backstage/create-app": "0.5.0", - "@backstage/dev-utils": "1.0.14", - "e2e-test": "0.2.2", - "@backstage/errors": "1.1.5", - "@backstage/eslint-plugin": "0.1.3", - "@backstage/integration": "1.4.4", - "@backstage/integration-aws-node": "0.1.2", - "@backstage/integration-react": "1.1.12", - "@backstage/release-manifests": "0.0.9", - "@backstage/repo-tools": "0.2.0", - "@techdocs/cli": "1.4.1", - "techdocs-cli-embedded-app": "0.2.81", - "@backstage/test-utils": "1.3.0", - "@backstage/theme": "0.2.19", - "@backstage/types": "1.0.2", - "@backstage/version-bridge": "1.0.4", - "@backstage/plugin-adr": "0.5.0", - "@backstage/plugin-adr-backend": "0.3.2", - "@backstage/plugin-adr-common": "0.2.8", - "@backstage/plugin-airbrake": "0.3.17", - "@backstage/plugin-airbrake-backend": "0.2.17", - "@backstage/plugin-allure": "0.1.33", - "@backstage/plugin-analytics-module-ga": "0.1.28", - "@backstage/plugin-apache-airflow": "0.2.10", - "@backstage/plugin-api-docs": "0.9.2", - "@backstage/plugin-api-docs-module-protoc-gen-doc": "0.1.2", - "@backstage/plugin-apollo-explorer": "0.1.10", - "@backstage/plugin-app-backend": "0.3.44", - "@backstage/plugin-auth-backend": "0.18.2", - "@backstage/plugin-auth-node": "0.2.13", - "@backstage/plugin-azure-devops": "0.2.8", - "@backstage/plugin-azure-devops-backend": "0.3.23", - "@backstage/plugin-azure-devops-common": "0.3.0", - "@backstage/plugin-azure-sites": "0.1.6", - "@backstage/plugin-azure-sites-backend": "0.1.6", - "@backstage/plugin-azure-sites-common": "0.1.0", - "@backstage/plugin-badges": "0.2.41", - "@backstage/plugin-badges-backend": "0.1.38", - "@backstage/plugin-bazaar": "0.2.7", - "@backstage/plugin-bazaar-backend": "0.2.7", - "@backstage/plugin-bitbucket-cloud-common": "0.2.5", - "@backstage/plugin-bitrise": "0.1.44", - "@backstage/plugin-catalog": "1.10.0", - "@backstage/plugin-catalog-backend": "1.9.0", - "@backstage/plugin-catalog-backend-module-aws": "0.1.18", - "@backstage/plugin-catalog-backend-module-azure": "0.1.15", - "@backstage/plugin-catalog-backend-module-bitbucket": "0.2.11", - "@backstage/plugin-catalog-backend-module-bitbucket-cloud": "0.1.11", - "@backstage/plugin-catalog-backend-module-bitbucket-server": "0.1.9", - "@backstage/plugin-catalog-backend-module-gerrit": "0.1.12", - "@backstage/plugin-catalog-backend-module-github": "0.2.7", - "@backstage/plugin-catalog-backend-module-gitlab": "0.2.0", - "@backstage/plugin-catalog-backend-module-incremental-ingestion": "0.3.1", - "@backstage/plugin-catalog-backend-module-ldap": "0.5.11", - "@backstage/plugin-catalog-backend-module-msgraph": "0.5.3", - "@backstage/plugin-catalog-backend-module-openapi": "0.1.10", - "@backstage/plugin-catalog-backend-module-puppetdb": "0.1.1", - "@backstage/plugin-catalog-common": "1.0.13", - "@internal/plugin-catalog-customized": "0.0.9", - "@backstage/plugin-catalog-graph": "0.2.29", - "@backstage/plugin-catalog-graphql": "0.3.20", - "@backstage/plugin-catalog-import": "0.9.7", - "@backstage/plugin-catalog-node": "1.3.5", - "@backstage/plugin-catalog-react": "1.5.0", - "@backstage/plugin-cicd-statistics": "0.1.19", - "@backstage/plugin-cicd-statistics-module-gitlab": "0.1.13", - "@backstage/plugin-circleci": "0.3.17", - "@backstage/plugin-cloudbuild": "0.3.17", - "@backstage/plugin-code-climate": "0.1.17", - "@backstage/plugin-code-coverage": "0.2.10", - "@backstage/plugin-code-coverage-backend": "0.2.10", - "@backstage/plugin-codescene": "0.1.12", - "@backstage/plugin-config-schema": "0.1.40", - "@backstage/plugin-cost-insights": "0.12.6", - "@backstage/plugin-cost-insights-common": "0.1.1", - "@backstage/plugin-dynatrace": "4.0.0", - "@backstage/plugin-entity-feedback": "0.2.0", - "@backstage/plugin-entity-feedback-backend": "0.1.2", - "@backstage/plugin-entity-feedback-common": "0.1.1", - "@backstage/plugin-entity-validation": "0.1.2", - "@backstage/plugin-events-backend": "0.2.5", - "@backstage/plugin-events-backend-module-aws-sqs": "0.1.6", - "@backstage/plugin-events-backend-module-azure": "0.1.6", - "@backstage/plugin-events-backend-module-bitbucket-cloud": "0.1.6", - "@backstage/plugin-events-backend-module-gerrit": "0.1.6", - "@backstage/plugin-events-backend-module-github": "0.1.6", - "@backstage/plugin-events-backend-module-gitlab": "0.1.6", - "@backstage/plugin-events-backend-test-utils": "0.1.6", - "@backstage/plugin-events-node": "0.2.5", - "@internal/plugin-todo-list": "1.0.12", - "@internal/plugin-todo-list-backend": "1.0.12", - "@internal/plugin-todo-list-common": "1.0.10", - "@backstage/plugin-explore": "0.4.2", - "@backstage/plugin-explore-backend": "0.0.6", - "@backstage/plugin-explore-common": "0.0.1", - "@backstage/plugin-explore-react": "0.0.28", - "@backstage/plugin-firehydrant": "0.2.1", - "@backstage/plugin-fossa": "0.2.49", - "@backstage/plugin-gcalendar": "0.3.13", - "@backstage/plugin-gcp-projects": "0.3.36", - "@backstage/plugin-git-release-manager": "0.3.30", - "@backstage/plugin-github-actions": "0.5.17", - "@backstage/plugin-github-deployments": "0.1.48", - "@backstage/plugin-github-issues": "0.2.6", - "@backstage/plugin-github-pull-requests-board": "0.1.11", - "@backstage/plugin-gitops-profiles": "0.3.35", - "@backstage/plugin-gocd": "0.1.23", - "@backstage/plugin-graphiql": "0.2.49", - "@backstage/plugin-graphql-backend": "0.1.34", - "@backstage/plugin-graphql-voyager": "0.1.2", - "@backstage/plugin-home": "0.5.0", - "@backstage/plugin-ilert": "0.2.6", - "@backstage/plugin-jenkins": "0.7.16", - "@backstage/plugin-jenkins-backend": "0.1.34", - "@backstage/plugin-jenkins-common": "0.1.15", - "@backstage/plugin-kafka": "0.3.17", - "@backstage/plugin-kafka-backend": "0.2.37", - "@backstage/plugin-kubernetes": "0.8.0", - "@backstage/plugin-kubernetes-backend": "0.10.0", - "@backstage/plugin-kubernetes-common": "0.6.2", - "@backstage/plugin-lighthouse": "0.4.2", - "@backstage/plugin-lighthouse-backend": "0.2.0", - "@backstage/plugin-lighthouse-common": "0.1.1", - "@backstage/plugin-linguist": "0.1.2", - "@backstage/plugin-linguist-backend": "0.2.1", - "@backstage/plugin-linguist-common": "0.1.0", - "@backstage/plugin-microsoft-calendar": "0.1.2", - "@backstage/plugin-newrelic": "0.3.35", - "@backstage/plugin-newrelic-dashboard": "0.2.10", - "@backstage/plugin-octopus-deploy": "0.1.1", - "@backstage/plugin-org": "0.6.7", - "@backstage/plugin-org-react": "0.1.6", - "@backstage/plugin-pagerduty": "0.5.10", - "@backstage/plugin-periskop": "0.1.15", - "@backstage/plugin-periskop-backend": "0.1.15", - "@backstage/plugin-permission-backend": "0.5.19", - "@backstage/plugin-permission-common": "0.7.5", - "@backstage/plugin-permission-node": "0.7.7", - "@backstage/plugin-permission-react": "0.4.12", - "@backstage/plugin-playlist": "0.1.8", - "@backstage/plugin-playlist-backend": "0.3.0", - "@backstage/plugin-playlist-common": "0.1.6", - "@backstage/plugin-proxy-backend": "0.2.38", - "@backstage/plugin-puppetdb": "0.1.0", - "@backstage/plugin-rollbar": "0.4.17", - "@backstage/plugin-rollbar-backend": "0.1.41", - "@backstage/plugin-scaffolder": "1.13.0", - "@backstage/plugin-scaffolder-backend": "1.13.0", - "@backstage/plugin-scaffolder-backend-module-confluence-to-markdown": "0.1.0", - "@backstage/plugin-scaffolder-backend-module-cookiecutter": "0.2.19", - "@backstage/plugin-scaffolder-backend-module-gitlab": "0.1.0", - "@backstage/plugin-scaffolder-backend-module-rails": "0.4.12", - "@backstage/plugin-scaffolder-backend-module-sentry": "0.1.4", - "@backstage/plugin-scaffolder-backend-module-yeoman": "0.2.17", - "@backstage/plugin-scaffolder-common": "1.2.7", - "@backstage/plugin-scaffolder-node": "0.1.2", - "@backstage/plugin-scaffolder-react": "1.3.0", - "@backstage/plugin-search": "1.2.0", - "@backstage/plugin-search-backend": "1.3.0", - "@backstage/plugin-search-backend-module-catalog": "0.1.0", - "@backstage/plugin-search-backend-module-elasticsearch": "1.2.0", - "@backstage/plugin-search-backend-module-explore": "0.1.0", - "@backstage/plugin-search-backend-module-pg": "0.5.5", - "@backstage/plugin-search-backend-module-techdocs": "0.1.0", - "@backstage/plugin-search-backend-node": "1.2.0", - "@backstage/plugin-search-common": "1.2.3", - "@backstage/plugin-search-react": "1.5.2", - "@backstage/plugin-sentry": "0.5.2", - "@backstage/plugin-shortcuts": "0.3.9", - "@backstage/plugin-sonarqube": "0.6.6", - "@backstage/plugin-sonarqube-backend": "0.1.9", - "@backstage/plugin-sonarqube-react": "0.1.5", - "@backstage/plugin-splunk-on-call": "0.4.6", - "@backstage/plugin-stack-overflow": "0.1.13", - "@backstage/plugin-stack-overflow-backend": "0.2.0", - "@backstage/plugin-stackstorm": "0.1.1", - "@backstage/plugin-tech-insights": "0.3.9", - "@backstage/plugin-tech-insights-backend": "0.5.10", - "@backstage/plugin-tech-insights-backend-module-jsonfc": "0.1.28", - "@backstage/plugin-tech-insights-common": "0.2.10", - "@backstage/plugin-tech-insights-node": "0.4.2", - "@backstage/plugin-tech-radar": "0.6.3", - "@backstage/plugin-techdocs": "1.6.1", - "@backstage/plugin-techdocs-addons-test-utils": "1.0.12", - "@backstage/plugin-techdocs-backend": "1.6.1", - "@backstage/plugin-techdocs-module-addons-contrib": "1.0.12", - "@backstage/plugin-techdocs-node": "1.7.0", - "@backstage/plugin-techdocs-react": "1.1.5", - "@backstage/plugin-todo": "0.2.19", - "@backstage/plugin-todo-backend": "0.1.41", - "@backstage/plugin-user-settings": "0.7.2", - "@backstage/plugin-user-settings-backend": "0.1.8", - "@backstage/plugin-vault": "0.1.11", - "@backstage/plugin-vault-backend": "0.3.0", - "@backstage/plugin-xcmetrics": "0.2.37", - "@backstage/plugin-analytics-module-ga4": "0.0.0", - "@backstage/plugin-devtools": "0.0.0", - "@backstage/plugin-devtools-backend": "0.0.0", - "@backstage/plugin-devtools-common": "0.0.0" - }, - "changesets": [ - "afraid-shirts-train", - "backend-like-a-tattoo", - "beige-tigers-matter", - "blue-eyes-run", - "brown-eyes-yell", - "brown-keys-raise", - "calm-snails-trade", - "calm-wolves-taste", - "chilled-goats-jump", - "chilled-pants-wonder", - "chilled-queens-wonder", - "chilly-fireants-type", - "chilly-taxis-shop", - "clean-lobsters-brake", - "cold-drinks-exercise", - "cold-laws-turn", - "cool-dingos-repair", - "create-app-1682437922", - "curly-rats-fold", - "curvy-months-appear", - "dry-boats-sniff", - "dull-wombats-stare", - "eighty-olives-live", - "extragavent-fast-fly", - "fair-suits-warn", - "fifty-grapes-explode", - "fifty-laws-count", - "five-tigers-whisper", - "fluffy-crabs-reply", - "fluffy-mirrors-happen", - "fresh-moons-unite", - "funny-trains-sniff", - "good-lions-approve", - "green-cheetahs-cover", - "healthy-ladybugs-chew", - "heavy-penguins-burn", - "honest-countries-deny", - "honest-turkeys-learn", - "hungry-foxes-divide", - "hungry-peas-sing", - "khaki-brooms-kiss", - "lazy-keys-work", - "mighty-bears-glow", - "mighty-cows-greet", - "modern-pumpkins-join", - "moody-lizards-beam", - "moody-shrimps-train", - "new-roses-fail", - "nine-ties-smoke", - "ninety-eggs-lie", - "ninety-mugs-sin", - "olive-turkeys-switch", - "polite-dingos-train", - "pretty-gifts-greet", - "quick-flies-guess", - "quiet-bikes-smash", - "quiet-stingrays-fly", - "rare-elephants-arrive", - "red-cheetahs-invite", - "rotten-chefs-jog", - "serious-hornets-remember", - "six-mails-shout", - "slimy-turkeys-return", - "soft-readers-exist", - "stupid-seas-stare", - "swift-fishes-run", - "tame-games-rule", - "thick-parents-pump", - "thick-pugs-rush", - "thin-ways-exist", - "thirty-jobs-sort", - "tough-moles-whisper", - "twelve-zebras-repair", - "two-gorillas-drop", - "unlucky-deers-teach", - "unlucky-plants-give", - "warm-lamps-tease", - "wet-dolphins-love" - ] -} diff --git a/.changeset/pretty-gifts-greet.md b/.changeset/pretty-gifts-greet.md deleted file mode 100644 index 965f714a61..0000000000 --- a/.changeset/pretty-gifts-greet.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-home': patch ---- - -Add missing @rjsf/core dependency diff --git a/.changeset/proud-chairs-sleep.md b/.changeset/proud-chairs-sleep.md deleted file mode 100644 index 6df02d052d..0000000000 --- a/.changeset/proud-chairs-sleep.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-search-react': patch ---- - -`SearchPagination` now automatically resets the page cursor when the page limit is changed diff --git a/.changeset/quick-flies-guess.md b/.changeset/quick-flies-guess.md deleted file mode 100644 index 73e5589b98..0000000000 --- a/.changeset/quick-flies-guess.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/core-app-api': patch ---- - -Added `FrontendHostDiscovery` for config driven discovery implementation diff --git a/.changeset/quiet-bikes-smash.md b/.changeset/quiet-bikes-smash.md deleted file mode 100644 index ca751adaf7..0000000000 --- a/.changeset/quiet-bikes-smash.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-openapi-utils': patch ---- - -Corrected resolution of parameter nested schema to use central schemas. diff --git a/.changeset/quiet-stingrays-fly.md b/.changeset/quiet-stingrays-fly.md deleted file mode 100644 index 536ee18a6f..0000000000 --- a/.changeset/quiet-stingrays-fly.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-azure-devops': minor ---- - -The getBuildRuns function now checks contains multiple comma-separated builds and splits them to send multiple requests for each and concatenates the results. diff --git a/.changeset/rare-elephants-arrive.md b/.changeset/rare-elephants-arrive.md deleted file mode 100644 index d27f763d1f..0000000000 --- a/.changeset/rare-elephants-arrive.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-puppetdb': patch ---- - -Fixes import paths and updates documentation diff --git a/.changeset/real-baboons-vanish.md b/.changeset/real-baboons-vanish.md deleted file mode 100644 index ca09cc9bf3..0000000000 --- a/.changeset/real-baboons-vanish.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@backstage/plugin-jenkins-backend': minor -'@backstage/plugin-jenkins': minor ---- - -Updated rebuild to use Jenkins API replay build, which works for Jenkins jobs that have required parameters. Jenkins SDK could not be used for this request because it does not have support for replay. - -Added link to view build in Jenkins CI/CD table action column. diff --git a/.changeset/red-cheetahs-invite.md b/.changeset/red-cheetahs-invite.md deleted file mode 100644 index ef1711c761..0000000000 --- a/.changeset/red-cheetahs-invite.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-octopus-deploy': minor ---- - -Added support for Octopus Deploy spaces. The octopus.com/project-id annotation can now (optionally) be prefixed by a space identifier, for example. Spaces-1/Projects-102. -Also note that some of this plugins exported API's have changed to accommodate this change, changing from separate arguments to a single object. diff --git a/.changeset/red-parrots-attack.md b/.changeset/red-parrots-attack.md deleted file mode 100644 index 1530c17c8b..0000000000 --- a/.changeset/red-parrots-attack.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-gitlab': patch ---- - -Fix a corner case where returned users are null for bots diff --git a/.changeset/rotten-chefs-jog.md b/.changeset/rotten-chefs-jog.md deleted file mode 100644 index 120520c087..0000000000 --- a/.changeset/rotten-chefs-jog.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -'@backstage/plugin-scaffolder-react': patch -'@backstage/plugin-scaffolder': patch ---- - -Improvements to the `scaffolder/next` buttons UX: - -- Added padding around the "Create" button in the `Stepper` component -- Added a button bar that includes the "Cancel" and "Start Over" buttons to the `OngoingTask` component. The state of these buttons match their existing counter parts in the Context Menu -- Added a "Show Button Bar"/"Hide Button Bar" item to the `ContextMenu` component diff --git a/.changeset/serious-hornets-remember.md b/.changeset/serious-hornets-remember.md deleted file mode 100644 index 05221cd055..0000000000 --- a/.changeset/serious-hornets-remember.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-circleci': patch ---- - -Hide empty time field data for queued builds which haven't started yet diff --git a/.changeset/serious-phones-flash.md b/.changeset/serious-phones-flash.md deleted file mode 100644 index 4a4afe5d4e..0000000000 --- a/.changeset/serious-phones-flash.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-techdocs-module-addons-contrib': patch ---- - -Show cursor pointer when hovering on lightbox diff --git a/.changeset/shy-worms-enjoy.md b/.changeset/shy-worms-enjoy.md deleted file mode 100644 index cbfb2b5f7b..0000000000 --- a/.changeset/shy-worms-enjoy.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-user-settings': patch -'@backstage/plugin-auth-backend': patch ---- - -Fix config schema definition. diff --git a/.changeset/six-mails-shout.md b/.changeset/six-mails-shout.md deleted file mode 100644 index f803e0858e..0000000000 --- a/.changeset/six-mails-shout.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-shortcuts': patch ---- - -Marked `LocalStoredShortcuts` as deprecated, replacing it with `DefaultShortcutsApi` whose naming more clearly suggests that the shortcuts aren't necessarily stored locally (it depends on the storage implementation). diff --git a/.changeset/sixty-falcons-protect.md b/.changeset/sixty-falcons-protect.md deleted file mode 100644 index 0bc77bfbd9..0000000000 --- a/.changeset/sixty-falcons-protect.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-badges-backend': patch ---- - -Removed some unused dependencies diff --git a/.changeset/slimy-turkeys-return.md b/.changeset/slimy-turkeys-return.md deleted file mode 100644 index db10000509..0000000000 --- a/.changeset/slimy-turkeys-return.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -'@backstage/plugin-permission-node': patch ---- - -`createPermissionIntegrationRouter` now accepts rules and permissions for multiple resource types. Example: - -```typescript -createPermissionIntegrationRouter({ - resources: [ - { - resourceType: 'resourceType-1', - permissions: permissionsResourceType1, - rules: rulesResourceType1, - }, - { - resourceType: 'resourceType-2', - permissions: permissionsResourceType2, - rules: rulesResourceType2, - }, - ], -}); -``` diff --git a/.changeset/soft-readers-exist.md b/.changeset/soft-readers-exist.md deleted file mode 100644 index 8fce13caca..0000000000 --- a/.changeset/soft-readers-exist.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-common': patch ---- - -Added `HostDiscovery` to supersede deprecated `SingleHostDiscovery` (deprecated due to name) diff --git a/.changeset/spicy-spies-warn.md b/.changeset/spicy-spies-warn.md deleted file mode 100644 index 3ed26a2cc3..0000000000 --- a/.changeset/spicy-spies-warn.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/plugin-scaffolder-common': minor ---- - -Expose scaffolder permissions in new sub-aggregations. - -In addition to exporting a list of all scaffolder permissions in `scaffolderPermissions`, scaffolder-common now exports `scaffolderTemplatePermissions` and `scaffolderActionPermissions`, which contain subsets of the scaffolder permissions separated by resource type. diff --git a/.changeset/spotty-walls-serve.md b/.changeset/spotty-walls-serve.md deleted file mode 100644 index 9b0da31a5f..0000000000 --- a/.changeset/spotty-walls-serve.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-kubernetes-backend': patch ---- - -Fixed a bug in the Kubernetes proxy endpoint where requests to clusters configured with client-side auth providers would always fail with a 500 status. diff --git a/.changeset/stupid-seas-stare.md b/.changeset/stupid-seas-stare.md deleted file mode 100644 index f3d4f5e1f7..0000000000 --- a/.changeset/stupid-seas-stare.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/core-components': patch ---- - -Fix accessibility issue on controlled select input on tab navigation + keyboard enter/space action. diff --git a/.changeset/swift-fishes-run.md b/.changeset/swift-fishes-run.md deleted file mode 100644 index ee3d1217ed..0000000000 --- a/.changeset/swift-fishes-run.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': patch ---- - -Bump minimum required version of `vm2` to be 3.9.17 diff --git a/.changeset/swift-students-type.md b/.changeset/swift-students-type.md deleted file mode 100644 index 577fbeb8b6..0000000000 --- a/.changeset/swift-students-type.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-openapi-utils': patch ---- - -Updated README to reflect changes in `@backstage/repo-tools`. diff --git a/.changeset/thick-parents-pump.md b/.changeset/thick-parents-pump.md deleted file mode 100644 index ba65e10610..0000000000 --- a/.changeset/thick-parents-pump.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': patch -'@backstage/plugin-scaffolder-node': patch ---- - -Update typing for `RouterOptions::actions` and `ScaffolderActionsExtensionPoint::addActions` to allow any kind of action being assigned to it. diff --git a/.changeset/thick-pugs-rush.md b/.changeset/thick-pugs-rush.md deleted file mode 100644 index 7f0171eb83..0000000000 --- a/.changeset/thick-pugs-rush.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-auth-backend': patch ---- - -Added a persistent session store through the database diff --git a/.changeset/thin-ways-exist.md b/.changeset/thin-ways-exist.md deleted file mode 100644 index fd1ecb62a4..0000000000 --- a/.changeset/thin-ways-exist.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-search-react': patch ---- - -Fix text-overflow UI issue for Lifecycle spans in SearchFilter checkbox labels. diff --git a/.changeset/thirty-jobs-sort.md b/.changeset/thirty-jobs-sort.md deleted file mode 100644 index 8a40302502..0000000000 --- a/.changeset/thirty-jobs-sort.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-kubernetes-common': patch ---- - -AKS access tokens can now be sent over the wire to the Kubernetes backend. diff --git a/.changeset/three-tools-pump.md b/.changeset/three-tools-pump.md deleted file mode 100644 index ac9d3c9909..0000000000 --- a/.changeset/three-tools-pump.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/core-components': patch ---- - -Fix accessibility issue with Edit Metadata Link on screen readers missing notice about opening in a new tab. diff --git a/.changeset/tiny-crews-pull.md b/.changeset/tiny-crews-pull.md deleted file mode 100644 index 8d499ac5e6..0000000000 --- a/.changeset/tiny-crews-pull.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -Deprecated the use of React 16 diff --git a/.changeset/tough-moles-whisper.md b/.changeset/tough-moles-whisper.md deleted file mode 100644 index 14dd76c116..0000000000 --- a/.changeset/tough-moles-whisper.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-tech-radar': patch ---- - -Added the ability to display a timeline to each entry in the details box diff --git a/.changeset/twelve-birds-boil.md b/.changeset/twelve-birds-boil.md deleted file mode 100644 index 04317c26cd..0000000000 --- a/.changeset/twelve-birds-boil.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-adr': minor ---- - -render SupportButton only if config is set diff --git a/.changeset/twelve-zebras-repair.md b/.changeset/twelve-zebras-repair.md deleted file mode 100644 index 8d74080c38..0000000000 --- a/.changeset/twelve-zebras-repair.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-search-backend': patch ---- - -Added an OpenAPI 3.0 spec and enforced schema-first model on the router. diff --git a/.changeset/two-gorillas-drop.md b/.changeset/two-gorillas-drop.md deleted file mode 100644 index 72de66dbff..0000000000 --- a/.changeset/two-gorillas-drop.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-explore': patch ---- - -Updated the example code in the "Customization" section of the README to make the imports match the components used. diff --git a/.changeset/unlucky-deers-teach.md b/.changeset/unlucky-deers-teach.md deleted file mode 100644 index b773e9090f..0000000000 --- a/.changeset/unlucky-deers-teach.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-github': minor ---- - -Implement events support for `GithubMultiOrgEntityProvider` - -**BREAKING:** Passing in a custom `teamTransformer` will now correctly completely override the default transformer behavior diff --git a/.changeset/unlucky-plants-give.md b/.changeset/unlucky-plants-give.md deleted file mode 100644 index 504b475727..0000000000 --- a/.changeset/unlucky-plants-give.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/core-components': patch ---- - -Start capturing sidebar click events in analytics by default. diff --git a/.changeset/warm-lamps-tease.md b/.changeset/warm-lamps-tease.md deleted file mode 100644 index 954197dd13..0000000000 --- a/.changeset/warm-lamps-tease.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/plugin-kubernetes-backend': minor ---- - -Update `aws-sdk` client from v2 to v3. - -**BREAKING**: The `AwsIamKubernetesAuthTranslator` class no longer exposes the following methods `awsGetCredentials`, `getBearerToken`, `getCredentials` and `validCredentials`. There is no replacement for these methods. diff --git a/.changeset/wet-dolphins-love.md b/.changeset/wet-dolphins-love.md deleted file mode 100644 index 637d26ca70..0000000000 --- a/.changeset/wet-dolphins-love.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-github': patch ---- - -Updated the `team.edited` event emitted from `GithubOrgEntityProvider` to also include teams description. diff --git a/docs/releases/v1.14.0-changelog.md b/docs/releases/v1.14.0-changelog.md new file mode 100644 index 0000000000..eae0d82e71 --- /dev/null +++ b/docs/releases/v1.14.0-changelog.md @@ -0,0 +1,2795 @@ +# Release v1.14.0 + +## @backstage/config-loader@1.3.0 + +### Minor Changes + +- 201206132da: Introduced a new config source system to replace `loadConfig`. There is a new `ConfigSource` interface along with utilities provided by `ConfigSources`, as well as a number of built-in configuration source implementations. The new system is more flexible and makes it easier to create new and reusable sources of configuration, such as loading configuration from secret providers. + + The following is an example of how to load configuration using the default behavior: + + ```ts + const source = ConfigSources.default({ + argv: options?.argv, + remote: options?.remote, + }); + const config = await ConfigSources.toConfig(source); + ``` + + The `ConfigSource` interface looks like this: + + ```ts + export interface ConfigSource { + readConfigData(options?: ReadConfigDataOptions): AsyncConfigSourceIterator; + } + ``` + + It is best implemented using an async iterator: + + ```ts + class MyConfigSource implements ConfigSource { + async *readConfigData() { + yield { + config: [ + { + context: 'example', + data: { backend: { baseUrl: 'http://localhost' } }, + }, + ], + }; + } + } + ``` + +### Patch Changes + +- 7c116bcac7f: Fixed the way that some request errors are thrown +- 473db605a4f: Added a new `noUndeclaredProperties` option to `SchemaLoader` to support enforcing that there are no extra keys when verifying config. +- Updated dependencies + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + +## @backstage/core-app-api@1.8.0 + +### Minor Changes + +- c89437db899: The analytics' `navigate` event will now include the route parameters as attributes of the navigate event + +### Patch Changes + +- b645d70034a: Fixed a bug in the Azure auth provider which prevented getting access tokens with multiple scopes for one resource +- 42d817e76ab: Added `FrontendHostDiscovery` for config driven discovery implementation +- Updated dependencies + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.4 + +## @backstage/repo-tools@0.3.0 + +### Minor Changes + +- 799c33047ed: **BREAKING**: The OpenAPI commands are now found within the `schema openapi` sub-command. For example `yarn backstage-repo-tools schema:openapi:verify` is now `yarn backstage-repo-tools schema openapi verify`. +- 27956d78671: Generated OpenAPI files now have a `.generated.ts` file name and a warning header at the top, to highlight that they should not be edited by hand. + +### Patch Changes + +- Updated dependencies + - @backstage/cli-common@0.1.12 + - @backstage/cli-node@0.1.0 + - @backstage/errors@1.1.5 + +## @backstage/theme@0.3.0 + +### Minor Changes + +- 98c0c199b15: Updates light theme's primary foreground and `running` status indicator colours to meet WCAG. Previously #2E77D0 changed to #1F5493. + +### Patch Changes + +- 83b45f9df50: Fix accessibility issue with Backstage Table's header style + +## @backstage/plugin-adr@0.6.0 + +### Minor Changes + +- b12cd5dc221: render SupportButton only if config is set + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/plugin-search-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/integration-react@1.1.13 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-adr-common@0.2.9 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-analytics-module-ga4@0.1.0 + +### Minor Changes + +- 22b46f7f562: Plugin provides Backstage Analytics API for Google Analytics 4. Once installed and configured, analytics events will be sent to GA4 as your users navigate and use your Backstage instance + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-azure-devops@0.3.0 + +### Minor Changes + +- 877df261085: The getBuildRuns function now checks contains multiple comma-separated builds and splits them to send multiple requests for each and concatenates the results. + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-azure-devops-common@0.3.0 + +## @backstage/plugin-badges-backend@0.2.0 + +### Minor Changes + +- a0108c49774: Fixing badges-backend plugin to get a token from the TokenManager instead of parsing the request header. Hence, it's now possible to disable the authMiddleware for the badges-backend plugin to expose publicly the badges. + + Implementing an obfuscation feature to protect an open badges endpoint from being enumerated. The feature is disabled by default and the change is compatible with the previous version. + + **BREAKING**: `createRouter` now require that `tokenManager`, `logger`, and `identityApi`, are passed in as options. + +### Patch Changes + +- 0cd552c28d8: Removed some unused dependencies +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/plugin-catalog@1.11.0 + +### Minor Changes + +- 2258dcae970: Added an entity namespace filter and column on the default catalog page. + + If you have a custom version of the catalog page, you can add this filter in your CatalogPage code: + + ```ts + + + + + + /* if you want namespace picker */ + + + + + + + ``` + + The namespace column can be added using `createNamespaceColumn();`. This is only needed if you customized the columns for CatalogTable. + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/plugin-search-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/integration-react@1.1.13 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-catalog-backend-module-aws@0.2.0 + +### Minor Changes + +- 1a3b5f1e390: **BREAKING**: AwsOrganizationCloudAccountProcessor.fromConfig now returns a promise instead of the instance directly. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/integration-aws-node@0.1.3 + - @backstage/plugin-kubernetes-common@0.6.3 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + +## @backstage/plugin-catalog-backend-module-github@0.3.0 + +### Minor Changes + +- 970678adbe2: Implement events support for `GithubMultiOrgEntityProvider` + + **BREAKING:** Passing in a custom `teamTransformer` will now correctly completely override the default transformer behavior + +### Patch Changes + +- 78bb674a713: Fixed bug in queryWithPaging that caused secondary rate limit errors in GitHub with organizations having more than 1000 repositories. This change makes one request per second to avoid concurrency issues. +- bd101cefd37: Updated the `team.edited` event emitted from `GithubOrgEntityProvider` to also include teams description. +- Updated dependencies + - @backstage/plugin-catalog-backend@1.9.1 + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-events-node@0.2.6 + +## @backstage/plugin-catalog-react@1.6.0 + +### Minor Changes + +- 2258dcae970: Added an entity namespace filter and column on the default catalog page. + + If you have a custom version of the catalog page, you can add this filter in your CatalogPage code: + + ```ts + + + + + + /* if you want namespace picker */ + + + + + + + ``` + + The namespace column can be added using `createNamespaceColumn();`. This is only needed if you customized the columns for CatalogTable. + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/integration@1.4.5 + - @backstage/core-components@0.13.1 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.4 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-permission-react@0.4.12 + +## @backstage/plugin-devtools@0.1.0 + +### Minor Changes + +- 347aeca204c: Introduced the DevTools plugin, checkout the plugin's [`README.md`](https://github.com/backstage/backstage/tree/master/plugins/devtools) for more details! + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-devtools-common@0.1.0 + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-permission-react@0.4.12 + +## @backstage/plugin-devtools-backend@0.1.0 + +### Minor Changes + +- 347aeca204c: Introduced the DevTools plugin, checkout the plugin's [`README.md`](https://github.com/backstage/backstage/tree/master/plugins/devtools) for more details! + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-devtools-common@0.1.0 + - @backstage/backend-common@0.18.5 + - @backstage/config-loader@1.3.0 + - @backstage/plugin-permission-node@0.7.8 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-permission-common@0.7.5 + +## @backstage/plugin-devtools-common@0.1.0 + +### Minor Changes + +- 347aeca204c: Introduced the DevTools plugin, checkout the plugin's [`README.md`](https://github.com/backstage/backstage/tree/master/plugins/devtools) for more details! + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.0.2 + - @backstage/plugin-permission-common@0.7.5 + +## @backstage/plugin-events-backend-module-aws-sqs@0.2.0 + +### Minor Changes + +- 2c5661f3899: Allow endpoint configuration for sqs, enabling use of localstack for testing. + +### Patch Changes + +- 3659c71c5d9: Standardize `@aws-sdk` v3 versions +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-events-node@0.2.6 + +## @backstage/plugin-jenkins@0.8.0 + +### Minor Changes + +- cf95c5137c9: Updated rebuild to use Jenkins API replay build, which works for Jenkins jobs that have required parameters. Jenkins SDK could not be used for this request because it does not have support for replay. + + Added link to view build in Jenkins CI/CD table action column. + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-jenkins-common@0.1.15 + +## @backstage/plugin-jenkins-backend@0.2.0 + +### Minor Changes + +- cf95c5137c9: Updated rebuild to use Jenkins API replay build, which works for Jenkins jobs that have required parameters. Jenkins SDK could not be used for this request because it does not have support for replay. + + Added link to view build in Jenkins CI/CD table action column. + +### Patch Changes + +- 670a2dd6f4e: Fix handling of slashes in branch names +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-jenkins-common@0.1.15 + - @backstage/plugin-permission-common@0.7.5 + +## @backstage/plugin-kubernetes@0.9.0 + +### Minor Changes + +- 280ec10c18e: Added Pod logs components for Kubernetes plugin + + **BREAKING**: `kubernetesProxyApi` for custom plugins built with components from the Kubernetes plugin apis, `kubernetesProxyApi` should be added to the plugin's API list. + + ... + export const kubernetesPlugin = createPlugin({ + id: 'kubernetes', + apis: [ + ... + createApiFactory({ + api: kubernetesProxyApiRef, + deps: { + kubernetesApi: kubernetesApiRef, + }, + factory: ({ kubernetesApi }) => + new KubernetesProxyClient({ + kubernetesApi, + }), + }), + + **BREAKING**: `KubernetesDrawer` is now called `KubernetesStructuredMetadataTableDrawer` so that we can do more than just show `StructuredMetadataTable` + + `import { KubernetesDrawer } from "@backstage/plugin-kubernetes"` + + should now be: + + `import { KubernetesStructuredMetadataTableDrawer } from "@backstage/plugin-kubernetes"` + +### Patch Changes + +- c7bad1005ba: The Kubernetes plugin now requests AKS access tokens from Azure when retrieving + objects from clusters configured with `authProvider: aks` and sets `auth.aks` in + its request bodies appropriately. +- a160e02c3d7: Omit managed fields in the Kubernetes resource YAML display. +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/plugin-kubernetes-common@0.6.3 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + +## @backstage/plugin-kubernetes-backend@0.11.0 + +### Minor Changes + +- f4114f02d49: Allow fetching pod metrics limited by a `labelSelector`. + + This is used by the Kubernetes tab on a components' page and leads to much smaller responses being received from Kubernetes, especially with larger Kubernetes clusters. + +- 890988341e9: Update `aws-sdk` client from v2 to v3. + + **BREAKING**: The `AwsIamKubernetesAuthTranslator` class no longer exposes the following methods `awsGetCredentials`, `getBearerToken`, `getCredentials` and `validCredentials`. There is no replacement for these methods. + +### Patch Changes + +- 05f1d74539d: Kubernetes clusters now support `authProvider: aks`. When configured this way, + the `retrieveObjectsByServiceId` action will use the `auth.aks` value in the + request body as a bearer token to authenticate with Kubernetes. +- 3659c71c5d9: Standardize `@aws-sdk` v3 versions +- a341129b754: Fixed a bug in the Kubernetes proxy endpoint where requests to clusters configured with client-side auth providers would always fail with a 500 status. +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration-aws-node@0.1.3 + - @backstage/plugin-permission-node@0.7.8 + - @backstage/plugin-kubernetes-common@0.6.3 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-permission-common@0.7.5 + +## @backstage/plugin-octopus-deploy@0.2.0 + +### Minor Changes + +- 87211bc2873: Added support for Octopus Deploy spaces. The octopus.com/project-id annotation can now (optionally) be prefixed by a space identifier, for example. Spaces-1/Projects-102. + Also note that some of this plugins exported API's have changed to accommodate this change, changing from separate arguments to a single object. + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-scaffolder-backend@1.14.0 + +### Minor Changes + +- 67115f532b8: Expose both types of scaffolder permissions and rules through the metadata endpoint. + + The metadata endpoint now correctly exposes both types of scaffolder permissions and rules (for both the template and action resource types) through the metadata endpoint. + +- a73b3c0b097: Add ability to use `defaultNamespace` and `defaultKind` for scaffolder action `catalog:fetch` + +### Patch Changes + +- 1a48b84901c: Bump minimum required version of `vm2` to be 3.9.18 +- d20c87966a4: Bump minimum required version of `vm2` to be 3.9.17 +- 6d954de4b06: Update typing for `RouterOptions::actions` and `ScaffolderActionsExtensionPoint::addActions` to allow any kind of action being assigned to it. +- Updated dependencies + - @backstage/plugin-catalog-backend@1.9.1 + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/plugin-scaffolder-common@1.3.0 + - @backstage/plugin-permission-node@0.7.8 + - @backstage/plugin-scaffolder-node@0.1.3 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-common@0.7.5 + +## @backstage/plugin-scaffolder-backend-module-gitlab@0.2.0 + +### Minor Changes + +- 439e2986be1: Add a new scaffolder action for gitlab to ensure a group exists + +### Patch Changes + +- f1496d4ab6f: Fix input schema validation issue for gitlab actions: + + - gitlab:group:ensureExists + - gitlab:projectAccessToken:create + - gitlab:projectDeployToken:create + - gitlab:projectVariable:create + +- Updated dependencies + - @backstage/integration@1.4.5 + - @backstage/plugin-scaffolder-node@0.1.3 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/plugin-scaffolder-common@1.3.0 + +### Minor Changes + +- 82e10a6939c: Add support for Markdown text blob outputs from templates +- 67115f532b8: Expose scaffolder permissions in new sub-aggregations. + + In addition to exporting a list of all scaffolder permissions in `scaffolderPermissions`, scaffolder-common now exports `scaffolderTemplatePermissions` and `scaffolderActionPermissions`, which contain subsets of the scaffolder permissions separated by resource type. + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.3.0 + - @backstage/types@1.0.2 + - @backstage/plugin-permission-common@0.7.5 + +## @backstage/plugin-scaffolder-react@1.4.0 + +### Minor Changes + +- 82e10a6939c: Add support for Markdown text blob outputs from templates + +### Patch Changes + +- ad1a1429de4: Improvements to the `scaffolder/next` buttons UX: + + - Added padding around the "Create" button in the `Stepper` component + - Added a button bar that includes the "Cancel" and "Start Over" buttons to the `OngoingTask` component. The state of these buttons match their existing counter parts in the Context Menu + - Added a "Show Button Bar"/"Hide Button Bar" item to the `ContextMenu` component + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/plugin-scaffolder-common@1.3.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.4 + +## @backstage/plugin-search@1.3.0 + +### Minor Changes + +- 750e45539ad: Add close button & improve search input. + + MUI's Paper wrapping the SearchBar in the SearchPage was removed, we recommend users update their apps accordingly. + + SearchBarBase's TextField's label support added & aria-label uses label string if present, tests relying on the default placeholder value should still work unless custom placeholder was given. + +### Patch Changes + +- 0e3d8d69318: Fixed 404 Error when fetching search results due to URL encoding changes +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/plugin-search-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.4 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-search-backend-module-elasticsearch@1.3.0 + +### Minor Changes + +- 3d72bdb41c7: Upgrade to aws-sdk v3 and include OpenSearch Serverless support + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration-aws-node@0.1.3 + - @backstage/plugin-search-backend-node@1.2.1 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-search-react@1.6.0 + +### Minor Changes + +- 750e45539ad: Add close button & improve search input. + + MUI's Paper wrapping the SearchBar in the SearchPage was removed, we recommend users update their apps accordingly. + + SearchBarBase's TextField's label support added & aria-label uses label string if present, tests relying on the default placeholder value should still work unless custom placeholder was given. + +- 1ce7f84b2e8: accepts InputProp property that can override keys from default + +### Patch Changes + +- f785f0804cd: `SearchPagination` now automatically resets the page cursor when the page limit is changed +- adb31096bc2: Fix text-overflow UI issue for Lifecycle spans in SearchFilter checkbox labels. +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.4 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/app-defaults@1.3.1 + +### Patch Changes + +- 575d9178eff: Added a System Icon for resource entities. + This can be obtained using: + + ```ts + useApp().getSystemIcon('kind:resource'); + ``` + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-app-api@1.8.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-permission-react@0.4.12 + +## @backstage/backend-app-api@0.4.3 + +### Patch Changes + +- cf13b482f9e: Switch `configServiceFactory` to use `ConfigSources` from `@backstage/config-loader` to load config. +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/config-loader@1.3.0 + - @backstage/plugin-permission-node@0.7.8 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + +## @backstage/backend-common@0.18.5 + +### Patch Changes + +- 0297f7a54af: Remove the direct dependency on deprecated "request" library +- 284db225083: Updated the `DatabaseManager` to include the plugin id in the Postgres application name of the database connections created for each plugin. +- 3659c71c5d9: Standardize `@aws-sdk` v3 versions +- 42d817e76ab: Added `HostDiscovery` to supersede deprecated `SingleHostDiscovery` (deprecated due to name) +- Updated dependencies + - @backstage/config-loader@1.3.0 + - @backstage/integration@1.4.5 + - @backstage/integration-aws-node@0.1.3 + - @backstage/backend-app-api@0.4.3 + - @backstage/backend-dev-utils@0.1.1 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + +## @backstage/backend-defaults@0.1.10 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-app-api@0.4.3 + - @backstage/backend-plugin-api@0.5.2 + +## @backstage/backend-openapi-utils@0.0.2 + +### Patch Changes + +- fe16bd39e83: Use permalinks for links including a line number reference +- 27956d78671: Adjusted README accordingly after the generated output now has a `.generated.ts` extension +- 021cfbb5152: Corrected resolution of parameter nested schema to use central schemas. +- 799c33047ed: Updated README to reflect changes in `@backstage/repo-tools`. + +## @backstage/backend-plugin-api@0.5.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-permission-common@0.7.5 + +## @backstage/backend-tasks@0.5.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + +## @backstage/backend-test-utils@0.1.37 + +### Patch Changes + +- 63af7f6d53f: Allow specifying custom Docker registry for database tests +- b1eb268bf9d: Added `POSTGRES_11` and `POSTGRES_12` as supported test database IDs. +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-app-api@0.4.3 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + +## @backstage/cli@0.22.7 + +### Patch Changes + +- 473db605a4f: Enable strict config checking during `backstage-cli config:check` with the new `--strict` option which will surface schema errors. +- d548886872d: Deprecated the use of React 16 +- Updated dependencies + - @backstage/config-loader@1.3.0 + - @backstage/cli-common@0.1.12 + - @backstage/cli-node@0.1.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/eslint-plugin@0.1.3 + - @backstage/release-manifests@0.0.9 + - @backstage/types@1.0.2 + +## @backstage/core-components@0.13.1 + +### Patch Changes + +- 83b45f9df50: Fix accessibility issue with Backstage Table's header style +- e97769f7c0b: Fix accessibility issue on controlled select input on tab navigation + keyboard enter/space action. +- b1f13cb38aa: Fix accessibility issue with Edit Metadata Link on screen readers missing notice about opening in a new tab. +- 26cff1a5dfb: Start capturing sidebar click events in analytics by default. +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/version-bridge@1.0.4 + +## @backstage/create-app@0.5.1 + +### Patch Changes + +- 1d5e42655cd: Correct command to create new plugins +- e04bb20bdc4: Bumped create-app version. +- Updated dependencies + - @backstage/cli-common@0.1.12 + +## @backstage/dev-utils@1.0.15 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/app-defaults@1.3.1 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-app-api@1.8.0 + - @backstage/core-components@0.13.1 + - @backstage/integration-react@1.1.13 + - @backstage/test-utils@1.3.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/integration@1.4.5 + +### Patch Changes + +- b026275bcc8: Fixed a bug where the wrong credentials would be selected when using multiple GitHub app integrations. +- Updated dependencies + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/integration-aws-node@0.1.3 + +### Patch Changes + +- 3659c71c5d9: Standardize `@aws-sdk` v3 versions +- Updated dependencies + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/integration-react@1.1.13 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/integration@1.4.5 + - @backstage/core-components@0.13.1 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + +## @techdocs/cli@1.4.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-techdocs-node@1.7.1 + - @backstage/catalog-model@1.3.0 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + +## @backstage/test-utils@1.3.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-app-api@1.8.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/types@1.0.2 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-permission-react@0.4.12 + +## @backstage/plugin-adr-backend@0.3.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-adr-common@0.2.9 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-adr-common@0.2.9 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.4.5 + - @backstage/catalog-model@1.3.0 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-airbrake@0.3.18 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/dev-utils@1.0.15 + - @backstage/test-utils@1.3.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-airbrake-backend@0.2.18 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/config@1.0.7 + +## @backstage/plugin-allure@0.1.34 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-analytics-module-ga@0.1.29 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-apache-airflow@0.2.11 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-api-docs@0.9.3 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/plugin-catalog@1.11.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-apollo-explorer@0.1.11 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-app-backend@0.3.45 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/config-loader@1.3.0 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + +## @backstage/plugin-auth-backend@0.18.3 + +### Patch Changes + +- 7c116bcac7f: Fixed the way that some request errors are thrown +- 473db605a4f: Fix config schema definition. +- 3ffcdac7d07: Added a persistent session store through the database +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + +## @backstage/plugin-auth-node@0.2.14 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/plugin-azure-devops-backend@0.3.24 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/config@1.0.7 + - @backstage/plugin-azure-devops-common@0.3.0 + +## @backstage/plugin-azure-sites@0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-azure-sites-common@0.1.0 + +## @backstage/plugin-azure-sites-backend@0.1.7 + +### Patch Changes + +- d66d4f916aa: Updated URL to `/health` and corrected typos in the `README.md` +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/config@1.0.7 + - @backstage/plugin-azure-sites-common@0.1.0 + +## @backstage/plugin-badges@0.2.42 + +### Patch Changes + +- a0108c49774: Fixing badges-backend plugin to get a token from the TokenManager instead of parsing the request header. Hence, it's now possible to disable the authMiddleware for the badges-backend plugin to expose publicly the badges. + + Implementing an obfuscation feature to protect an open badges endpoint from being enumerated. The feature is disabled by default and the change is compatible with the previous version. + + **BREAKING**: `createRouter` now require that `tokenManager`, `logger`, and `identityApi`, are passed in as options. + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + +## @backstage/plugin-bazaar@0.2.8 + +### Patch Changes + +- 900880ab7c3: Fixed `validateDOMNesting` warnings +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/cli@0.22.7 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/plugin-catalog@1.11.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + +## @backstage/plugin-bazaar-backend@0.2.8 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/plugin-bitbucket-cloud-common@0.2.6 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.4.5 + +## @backstage/plugin-bitrise@0.1.45 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-catalog-backend@1.9.1 + +### Patch Changes + +- ce8d203235b: Ensure that entity cache state is only written to the database when actually changed +- 485a6c5f7b5: Internal refactoring for performance in the service handlers +- 3587a968dcd: Fixed a bug in the `queryEntities` endpoint that was causing filtered entities to be included in cursor requests. +- ce335df9d1c: Improve the query for orphan pruning +- 27956d78671: Adjusted the OpenAPI schema file name according to the new structure +- 51064e6e5ee: Change orphan cleanup task to only log a message if it deleted entities. +- 12a345317ab: Remove unnecessary join in the entity facets endpoint, exclude nulls +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/plugin-scaffolder-common@1.3.0 + - @backstage/plugin-permission-node@0.7.8 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/plugin-search-backend-module-catalog@0.1.1 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-catalog-backend-module-azure@0.1.16 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + +## @backstage/plugin-catalog-backend-module-bitbucket@0.2.12 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-bitbucket-cloud-common@0.2.6 + +## @backstage/plugin-catalog-backend-module-bitbucket-cloud@0.1.12 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/plugin-bitbucket-cloud-common@0.2.6 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-events-node@0.2.6 + +## @backstage/plugin-catalog-backend-module-bitbucket-server@0.1.10 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/plugin-catalog-backend-module-gerrit@0.1.13 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/plugin-catalog-backend-module-gitlab@0.2.1 + +### Patch Changes + +- b12c41fafc4: Fix a corner case where returned users are null for bots +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + +## @backstage/plugin-catalog-backend-module-incremental-ingestion@0.3.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.9.1 + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-events-node@0.2.6 + - @backstage/plugin-permission-common@0.7.5 + +## @backstage/plugin-catalog-backend-module-ldap@0.5.12 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + +## @backstage/plugin-catalog-backend-module-msgraph@0.5.4 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/plugin-catalog-common@1.0.13 + +## @backstage/plugin-catalog-backend-module-openapi@0.1.11 + +### Patch Changes + +- accaceadffa: Fixed bug in `jsonSchemaRefPlaceholderResolver` where relative $ref files were resolved through file system instead of base URL of file +- Updated dependencies + - @backstage/plugin-catalog-backend@1.9.1 + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + +## @backstage/plugin-catalog-backend-module-puppetdb@0.1.2 + +### Patch Changes + +- 95b2168d71b: Fixes import paths and updates documentation +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + +## @backstage/plugin-catalog-graph@0.2.30 + +### Patch Changes + +- d446f8fb0a8: Expose all `EntityRelationsGraphProps` to Catalog Graph Page +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-catalog-import@0.9.8 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/integration@1.4.5 + - @backstage/core-components@0.13.1 + - @backstage/integration-react@1.1.13 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-common@1.0.13 + +## @backstage/plugin-catalog-node@1.3.6 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + +## @backstage/plugin-cicd-statistics@0.1.20 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-cicd-statistics-module-gitlab@0.1.14 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-cicd-statistics@0.1.20 + +## @backstage/plugin-circleci@0.3.18 + +### Patch Changes + +- 451b3cadb3d: Fixes row display for in progress jobs to not display trailing "took" +- 1c4958d905f: Hide empty time field data for queued builds which haven't started yet +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-cloudbuild@0.3.18 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-code-climate@0.1.18 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-code-coverage@0.2.11 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + +## @backstage/plugin-code-coverage-backend@0.2.11 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/plugin-codescene@0.1.13 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + +## @backstage/plugin-config-schema@0.1.41 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + +## @backstage/plugin-cost-insights@0.12.7 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-cost-insights-common@0.1.1 + +## @backstage/plugin-dynatrace@5.0.0 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-entity-feedback@0.2.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-entity-feedback-common@0.1.1 + +## @backstage/plugin-entity-feedback-backend@0.1.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/plugin-entity-feedback-common@0.1.1 + +## @backstage/plugin-entity-validation@0.1.3 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-common@1.0.13 + +## @backstage/plugin-events-backend@0.2.6 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.6 + +## @backstage/plugin-events-backend-module-azure@0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2 + - @backstage/plugin-events-node@0.2.6 + +## @backstage/plugin-events-backend-module-bitbucket-cloud@0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2 + - @backstage/plugin-events-node@0.2.6 + +## @backstage/plugin-events-backend-module-gerrit@0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2 + - @backstage/plugin-events-node@0.2.6 + +## @backstage/plugin-events-backend-module-github@0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.6 + +## @backstage/plugin-events-backend-module-gitlab@0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.6 + +## @backstage/plugin-events-backend-test-utils@0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.2.6 + +## @backstage/plugin-events-node@0.2.6 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2 + +## @backstage/plugin-explore@0.4.3 + +### Patch Changes + +- 1996920782b: Make sure that the first support button row does not break across lines +- 4851581deb6: Display the title of the entity on the explore card if present, otherwise stick to the name +- a6025e25d99: Updated the example code in the "Customization" section of the README to make the imports match the components used. +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/plugin-search-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-explore-react@0.0.28 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-explore-backend@0.0.7 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-search-backend-module-explore@0.1.1 + - @backstage/config@1.0.7 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-firehydrant@0.2.2 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-fossa@0.2.50 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + +## @backstage/plugin-gcalendar@0.3.14 + +### Patch Changes + +- f493ccb9589: Pass user info email scope on auth refresh to resolve invalid credentials error +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + +## @backstage/plugin-gcp-projects@0.3.37 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-git-release-manager@0.3.31 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/integration@1.4.5 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-github-actions@0.5.18 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/integration@1.4.5 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-github-deployments@0.1.49 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/integration@1.4.5 + - @backstage/core-components@0.13.1 + - @backstage/integration-react@1.1.13 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + +## @backstage/plugin-github-issues@0.2.7 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/integration@1.4.5 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + +## @backstage/plugin-github-pull-requests-board@0.1.12 + +### Patch Changes + +- cf125c36569: The `EntityTeamPullRequestsContent` and `EntityTeamPullRequestsCard` support the ability to view the labels/tags added to each PR +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/integration@1.4.5 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-gitops-profiles@0.3.36 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-gocd@0.1.24 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + +## @backstage/plugin-graphiql@0.2.50 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-graphql-backend@0.1.35 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/config@1.0.7 + - @backstage/plugin-catalog-graphql@0.3.20 + +## @backstage/plugin-graphql-voyager@0.1.3 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-home@0.5.2 + +### Patch Changes + +- acca8966465: Remove object-hash dependency +- 957cd9b8958: Use the semantic time tag for rendering world clocks on homepage headers. +- 0e19e7b0f3a: Bump to using the later v5 versions of `@rjsf/*` +- 5272cfabc3b: Add missing @rjsf/core dependency +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-ilert@0.2.7 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + +## @backstage/plugin-kafka@0.3.18 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-kafka-backend@0.2.38 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/plugin-kubernetes-common@0.6.3 + +### Patch Changes + +- 05f1d74539d: AKS access tokens can now be sent over the wire to the Kubernetes backend. +- Updated dependencies + - @backstage/catalog-model@1.3.0 + - @backstage/plugin-permission-common@0.7.5 + +## @backstage/plugin-lighthouse@0.4.3 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-lighthouse-common@0.1.1 + +## @backstage/plugin-lighthouse-backend@0.2.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-lighthouse-common@0.1.1 + +## @backstage/plugin-linguist@0.1.3 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-linguist-common@0.1.0 + +## @backstage/plugin-linguist-backend@0.2.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-linguist-common@0.1.0 + +## @backstage/plugin-microsoft-calendar@0.1.3 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + +## @backstage/plugin-newrelic@0.3.36 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-newrelic-dashboard@0.2.11 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + +## @backstage/plugin-org@0.6.8 + +### Patch Changes + +- 6e387c077a4: Changed the MembersListCard component to allow displaying aggregated members when viewing a group. Now, a toggle switch can be displayed that lets you switch between showing direct members and aggregated members. + + To enable this new feature, set the showAggregateMembersToggle prop on EntityMembersListCard: + + ```jsx + // In packages/app/src/components/catalog/EntityPage.tsx + const groupPage = ( + // ... + + // ... + ); + ``` + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-org-react@0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-pagerduty@0.5.11 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + +## @backstage/plugin-periskop@0.1.16 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + +## @backstage/plugin-periskop-backend@0.1.16 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + +## @backstage/plugin-permission-backend@0.5.20 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-permission-node@0.7.8 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-permission-common@0.7.5 + +## @backstage/plugin-permission-node@0.7.8 + +### Patch Changes + +- a788e715cfc: `createPermissionIntegrationRouter` now accepts rules and permissions for multiple resource types. Example: + + ```typescript + createPermissionIntegrationRouter({ + resources: [ + { + resourceType: 'resourceType-1', + permissions: permissionsResourceType1, + rules: rulesResourceType1, + }, + { + resourceType: 'resourceType-2', + permissions: permissionsResourceType2, + rules: rulesResourceType2, + }, + ], + }); + ``` + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-permission-common@0.7.5 + +## @backstage/plugin-playlist@0.1.9 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/plugin-search-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-permission-react@0.4.12 + - @backstage/plugin-playlist-common@0.1.6 + +## @backstage/plugin-playlist-backend@0.3.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-permission-node@0.7.8 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-playlist-common@0.1.6 + +## @backstage/plugin-proxy-backend@0.2.39 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + +## @backstage/plugin-puppetdb@0.1.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + +## @backstage/plugin-rollbar@0.4.18 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-rollbar-backend@0.1.42 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/config@1.0.7 + +## @backstage/plugin-scaffolder@1.13.1 + +### Patch Changes + +- d560d457c98: Fix case GitLab workspace is a nested subgroup + +- ad1a1429de4: Improvements to the `scaffolder/next` buttons UX: + + - Added padding around the "Create" button in the `Stepper` component + - Added a button bar that includes the "Cancel" and "Start Over" buttons to the `OngoingTask` component. The state of these buttons match their existing counter parts in the Context Menu + - Added a "Show Button Bar"/"Hide Button Bar" item to the `ContextMenu` component + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/integration@1.4.5 + - @backstage/plugin-scaffolder-common@1.3.0 + - @backstage/plugin-scaffolder-react@1.4.0 + - @backstage/core-components@0.13.1 + - @backstage/integration-react@1.1.13 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-react@0.4.12 + +## @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.1.2 + +### Patch Changes + +- 7c116bcac7f: Fixed the way that some request errors are thrown +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.14.0 + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/plugin-scaffolder-node@0.1.3 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + +## @backstage/plugin-scaffolder-backend-module-cookiecutter@0.2.21 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.14.0 + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/plugin-scaffolder-node@0.1.3 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + +## @backstage/plugin-scaffolder-backend-module-rails@0.4.14 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.14.0 + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/plugin-scaffolder-node@0.1.3 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + +## @backstage/plugin-scaffolder-backend-module-sentry@0.1.5 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.1.3 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/plugin-scaffolder-backend-module-yeoman@0.2.18 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.1.3 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + +## @backstage/plugin-scaffolder-node@0.1.3 + +### Patch Changes + +- 6d954de4b06: Update typing for `RouterOptions::actions` and `ScaffolderActionsExtensionPoint::addActions` to allow any kind of action being assigned to it. +- Updated dependencies + - @backstage/plugin-scaffolder-common@1.3.0 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-model@1.3.0 + - @backstage/types@1.0.2 + +## @backstage/plugin-search-backend@1.3.1 + +### Patch Changes + +- 021cfbb5152: Added an OpenAPI 3.0 spec and enforced schema-first model on the router. +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-permission-node@0.7.8 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/plugin-search-backend-node@1.2.1 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-search-backend-module-catalog@0.1.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-search-backend-node@1.2.1 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-search-backend-module-explore@0.1.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-search-backend-node@1.2.1 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-search-backend-module-pg@0.5.6 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-search-backend-node@1.2.1 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-search-backend-module-techdocs@0.1.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-techdocs-node@1.7.1 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-search-backend-node@1.2.1 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-search-backend-node@1.2.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-sentry@0.5.3 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-shortcuts@0.3.10 + +### Patch Changes + +- 8a7174e297c: Marked `LocalStoredShortcuts` as deprecated, replacing it with `DefaultShortcutsApi` whose naming more clearly suggests that the shortcuts aren't necessarily stored locally (it depends on the storage implementation). +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + - @backstage/types@1.0.2 + +## @backstage/plugin-sonarqube@0.6.7 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-sonarqube-react@0.1.5 + +## @backstage/plugin-sonarqube-backend@0.1.10 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/plugin-splunk-on-call@0.4.7 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-stack-overflow@0.1.15 + +### Patch Changes + +- c1ff65f315a: StackOverflowSearchResultListItem can now accept an empty result prop so that it can be rendered in the suggested SearchResultListItem pattern. +- Updated dependencies + - @backstage/plugin-home@0.5.2 + - @backstage/theme@0.3.0 + - @backstage/plugin-search-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-stack-overflow-backend@0.2.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/config@1.0.7 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-stackstorm@0.1.2 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + +## @backstage/plugin-tech-insights@0.3.10 + +### Patch Changes + +- 22963209d23: Added the possibility to customize the check description in the scorecard component. + + - The `CheckResultRenderer` type now exposes an optional `description` method that allows to overwrite the description with a different string or a React component for a provided check result. + + Until now only the `BooleanCheck` element could be overridden, but from now on it's also possible to override the description for a check. + As an example, the description could change depending on the check result. Refer to the [README](https://github.com/backstage/backstage/blob/master/plugins/tech-insights/README.md#adding-custom-rendering-components) file for more details + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-tech-insights-common@0.2.10 + +## @backstage/plugin-tech-insights-backend@0.5.11 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-tech-insights-node@0.4.3 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-tech-insights-common@0.2.10 + +## @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.29 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-tech-insights-node@0.4.3 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-tech-insights-common@0.2.10 + +## @backstage/plugin-tech-insights-node@0.4.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-tech-insights-common@0.2.10 + +## @backstage/plugin-tech-radar@0.6.4 + +### Patch Changes + +- be4fa53fab8: Fix description links when clicking entry in radar. +- Added the ability to display a timeline to each entry in the details box +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-techdocs@1.6.2 + +### Patch Changes + +- 863beb49498: Re-add the possibility to have trailing slashes in Techdocs navigation. +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/integration@1.4.5 + - @backstage/plugin-search-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/integration-react@1.1.13 + - @backstage/plugin-techdocs-react@1.1.6 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-techdocs-addons-test-utils@1.0.13 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-techdocs@1.6.2 + - @backstage/plugin-catalog@1.11.0 + - @backstage/core-app-api@1.8.0 + - @backstage/plugin-search-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/integration-react@1.1.13 + - @backstage/test-utils@1.3.1 + - @backstage/plugin-techdocs-react@1.1.6 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-techdocs-backend@1.6.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/plugin-techdocs-node@1.7.1 + - @backstage/plugin-search-backend-module-techdocs@0.1.1 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-techdocs-module-addons-contrib@1.0.13 + +### Patch Changes + +- 6afc7f052ca: Show cursor pointer when hovering on lightbox +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/integration@1.4.5 + - @backstage/core-components@0.13.1 + - @backstage/integration-react@1.1.13 + - @backstage/plugin-techdocs-react@1.1.6 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-techdocs-node@1.7.1 + +### Patch Changes + +- 3659c71c5d9: Standardize `@aws-sdk` v3 versions +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/integration-aws-node@0.1.3 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-techdocs-react@1.1.6 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/version-bridge@1.0.4 + +## @backstage/plugin-todo@0.2.20 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + +## @backstage/plugin-todo-backend@0.1.42 + +### Patch Changes + +- 901f1ada325: Added OpenAPI schema +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/plugin-user-settings@0.7.3 + +### Patch Changes + +- 473db605a4f: Fix config schema definition. +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-app-api@1.8.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + +## @backstage/plugin-user-settings-backend@0.1.9 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + +## @backstage/plugin-vault@0.1.12 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + +## @backstage/plugin-vault-backend@0.3.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/plugin-xcmetrics@0.2.38 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + +## example-app@0.2.83 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-tech-insights@0.3.10 + - @backstage/plugin-scaffolder@1.13.1 + - @backstage/plugin-devtools@0.1.0 + - @backstage/plugin-kubernetes@0.9.0 + - @backstage/plugin-search@1.3.0 + - @backstage/plugin-home@0.5.2 + - @backstage/plugin-explore@0.4.3 + - @backstage/theme@0.3.0 + - @backstage/plugin-techdocs@1.6.2 + - @backstage/app-defaults@1.3.1 + - @backstage/plugin-badges@0.2.42 + - @backstage/plugin-tech-radar@0.6.4 + - @backstage/cli@0.22.7 + - @backstage/plugin-stack-overflow@0.1.15 + - @backstage/plugin-gcalendar@0.3.14 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-app-api@1.8.0 + - @backstage/plugin-scaffolder-react@1.4.0 + - @backstage/plugin-catalog-graph@0.2.30 + - @backstage/plugin-circleci@0.3.18 + - @backstage/plugin-search-react@1.6.0 + - @backstage/plugin-org@0.6.8 + - @backstage/core-components@0.13.1 + - @backstage/plugin-azure-devops@0.3.0 + - @backstage/plugin-jenkins@0.8.0 + - @backstage/plugin-octopus-deploy@0.2.0 + - @backstage/plugin-techdocs-module-addons-contrib@1.0.13 + - @backstage/plugin-user-settings@0.7.3 + - @backstage/plugin-shortcuts@0.3.10 + - @backstage/integration-react@1.1.13 + - @backstage/plugin-airbrake@0.3.18 + - @backstage/plugin-api-docs@0.9.3 + - @backstage/plugin-azure-sites@0.1.7 + - @backstage/plugin-cloudbuild@0.3.18 + - @backstage/plugin-code-coverage@0.2.11 + - @backstage/plugin-cost-insights@0.12.7 + - @backstage/plugin-dynatrace@5.0.0 + - @backstage/plugin-entity-feedback@0.2.1 + - @backstage/plugin-gcp-projects@0.3.37 + - @backstage/plugin-github-actions@0.5.18 + - @backstage/plugin-gocd@0.1.24 + - @backstage/plugin-graphiql@0.2.50 + - @backstage/plugin-kafka@0.3.18 + - @backstage/plugin-lighthouse@0.4.3 + - @backstage/plugin-linguist@0.1.3 + - @backstage/plugin-microsoft-calendar@0.1.3 + - @backstage/plugin-newrelic@0.3.36 + - @backstage/plugin-pagerduty@0.5.11 + - @backstage/plugin-playlist@0.1.9 + - @backstage/plugin-puppetdb@0.1.1 + - @backstage/plugin-rollbar@0.4.18 + - @backstage/plugin-sentry@0.5.3 + - @backstage/plugin-stackstorm@0.1.2 + - @backstage/plugin-techdocs-react@1.1.6 + - @backstage/plugin-todo@0.2.20 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-apache-airflow@0.2.11 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-catalog-import@0.9.8 + - @backstage/plugin-linguist-common@0.1.0 + - @backstage/plugin-newrelic-dashboard@0.2.11 + - @backstage/plugin-permission-react@0.4.12 + - @backstage/plugin-search-common@1.2.3 + - @internal/plugin-catalog-customized@0.0.10 + +## example-backend@0.2.83 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.14.0 + - @backstage/plugin-devtools-backend@0.1.0 + - @backstage/plugin-catalog-backend@1.9.1 + - @backstage/backend-common@0.18.5 + - @backstage/plugin-kubernetes-backend@0.11.0 + - @backstage/plugin-auth-backend@0.18.3 + - @backstage/plugin-badges-backend@0.2.0 + - @backstage/plugin-search-backend-module-elasticsearch@1.3.0 + - @backstage/integration@1.4.5 + - @backstage/plugin-todo-backend@0.1.42 + - @backstage/plugin-jenkins-backend@0.2.0 + - @backstage/plugin-azure-sites-backend@0.1.7 + - @backstage/plugin-permission-node@0.7.8 + - @backstage/plugin-search-backend@1.3.1 + - example-app@0.2.83 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-app-backend@0.3.45 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/plugin-entity-feedback-backend@0.1.3 + - @backstage/plugin-events-backend@0.2.6 + - @backstage/plugin-playlist-backend@0.3.1 + - @backstage/plugin-rollbar-backend@0.1.42 + - @backstage/plugin-search-backend-module-pg@0.5.6 + - @backstage/plugin-tech-insights-backend@0.5.11 + - @backstage/plugin-techdocs-backend@1.6.2 + - @backstage/plugin-scaffolder-backend-module-rails@0.4.14 + - @backstage/plugin-adr-backend@0.3.3 + - @backstage/plugin-azure-devops-backend@0.3.24 + - @backstage/plugin-code-coverage-backend@0.2.11 + - @backstage/plugin-explore-backend@0.0.7 + - @backstage/plugin-graphql-backend@0.1.35 + - @backstage/plugin-kafka-backend@0.2.38 + - @backstage/plugin-lighthouse-backend@0.2.1 + - @backstage/plugin-linguist-backend@0.2.2 + - @backstage/plugin-permission-backend@0.5.20 + - @backstage/plugin-proxy-backend@0.2.39 + - @backstage/plugin-search-backend-node@1.2.1 + - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.29 + - @backstage/plugin-tech-insights-node@0.4.3 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.6 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-search-common@1.2.3 + +## example-backend-next@0.0.11 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.14.0 + - @backstage/plugin-catalog-backend@1.9.1 + - @backstage/plugin-kubernetes-backend@0.11.0 + - @backstage/plugin-todo-backend@0.1.42 + - @backstage/plugin-permission-node@0.7.8 + - @backstage/plugin-search-backend@1.3.1 + - @backstage/backend-defaults@0.1.10 + - @backstage/plugin-app-backend@0.3.45 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/plugin-search-backend-module-catalog@0.1.1 + - @backstage/plugin-search-backend-module-explore@0.1.1 + - @backstage/plugin-search-backend-module-techdocs@0.1.1 + - @backstage/plugin-techdocs-backend@1.6.2 + - @backstage/plugin-permission-backend@0.5.20 + - @backstage/plugin-search-backend-node@1.2.1 + - @backstage/plugin-permission-common@0.7.5 + +## e2e-test@0.2.3 + +### Patch Changes + +- Updated dependencies + - @backstage/create-app@0.5.1 + - @backstage/cli-common@0.1.12 + - @backstage/errors@1.1.5 + +## techdocs-cli-embedded-app@0.2.82 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-techdocs@1.6.2 + - @backstage/app-defaults@1.3.1 + - @backstage/cli@0.22.7 + - @backstage/plugin-catalog@1.11.0 + - @backstage/core-app-api@1.8.0 + - @backstage/core-components@0.13.1 + - @backstage/integration-react@1.1.13 + - @backstage/test-utils@1.3.1 + - @backstage/plugin-techdocs-react@1.1.6 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + +## @internal/plugin-catalog-customized@0.0.10 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/plugin-catalog@1.11.0 + +## @internal/plugin-todo-list@1.0.13 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + +## @internal/plugin-todo-list-backend@1.0.13 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 diff --git a/package.json b/package.json index 7e77896821..3a7e05d65a 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "@types/react": "^17", "@types/react-dom": "^17" }, - "version": "1.14.0-next.2", + "version": "1.14.0", "dependencies": { "@backstage/errors": "workspace:^", "@manypkg/get-packages": "^1.1.3" diff --git a/packages/app-defaults/CHANGELOG.md b/packages/app-defaults/CHANGELOG.md index a4ab5e013c..7cb6737b73 100644 --- a/packages/app-defaults/CHANGELOG.md +++ b/packages/app-defaults/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/app-defaults +## 1.3.1 + +### Patch Changes + +- 575d9178eff: Added a System Icon for resource entities. + This can be obtained using: + + ```ts + useApp().getSystemIcon('kind:resource'); + ``` + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-app-api@1.8.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-permission-react@0.4.12 + ## 1.3.1-next.2 ### Patch Changes diff --git a/packages/app-defaults/package.json b/packages/app-defaults/package.json index f1c806ebe2..90f50d0eff 100644 --- a/packages/app-defaults/package.json +++ b/packages/app-defaults/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/app-defaults", "description": "Provides the default wiring of a Backstage App", - "version": "1.3.1-next.2", + "version": "1.3.1", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/packages/app/CHANGELOG.md b/packages/app/CHANGELOG.md index 84f7ab32a1..5fdee05829 100644 --- a/packages/app/CHANGELOG.md +++ b/packages/app/CHANGELOG.md @@ -1,5 +1,77 @@ # example-app +## 0.2.83 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-tech-insights@0.3.10 + - @backstage/plugin-scaffolder@1.13.1 + - @backstage/plugin-devtools@0.1.0 + - @backstage/plugin-kubernetes@0.9.0 + - @backstage/plugin-search@1.3.0 + - @backstage/plugin-home@0.5.2 + - @backstage/plugin-explore@0.4.3 + - @backstage/theme@0.3.0 + - @backstage/plugin-techdocs@1.6.2 + - @backstage/app-defaults@1.3.1 + - @backstage/plugin-badges@0.2.42 + - @backstage/plugin-tech-radar@0.6.4 + - @backstage/cli@0.22.7 + - @backstage/plugin-stack-overflow@0.1.15 + - @backstage/plugin-gcalendar@0.3.14 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-app-api@1.8.0 + - @backstage/plugin-scaffolder-react@1.4.0 + - @backstage/plugin-catalog-graph@0.2.30 + - @backstage/plugin-circleci@0.3.18 + - @backstage/plugin-search-react@1.6.0 + - @backstage/plugin-org@0.6.8 + - @backstage/core-components@0.13.1 + - @backstage/plugin-azure-devops@0.3.0 + - @backstage/plugin-jenkins@0.8.0 + - @backstage/plugin-octopus-deploy@0.2.0 + - @backstage/plugin-techdocs-module-addons-contrib@1.0.13 + - @backstage/plugin-user-settings@0.7.3 + - @backstage/plugin-shortcuts@0.3.10 + - @backstage/integration-react@1.1.13 + - @backstage/plugin-airbrake@0.3.18 + - @backstage/plugin-api-docs@0.9.3 + - @backstage/plugin-azure-sites@0.1.7 + - @backstage/plugin-cloudbuild@0.3.18 + - @backstage/plugin-code-coverage@0.2.11 + - @backstage/plugin-cost-insights@0.12.7 + - @backstage/plugin-dynatrace@5.0.0 + - @backstage/plugin-entity-feedback@0.2.1 + - @backstage/plugin-gcp-projects@0.3.37 + - @backstage/plugin-github-actions@0.5.18 + - @backstage/plugin-gocd@0.1.24 + - @backstage/plugin-graphiql@0.2.50 + - @backstage/plugin-kafka@0.3.18 + - @backstage/plugin-lighthouse@0.4.3 + - @backstage/plugin-linguist@0.1.3 + - @backstage/plugin-microsoft-calendar@0.1.3 + - @backstage/plugin-newrelic@0.3.36 + - @backstage/plugin-pagerduty@0.5.11 + - @backstage/plugin-playlist@0.1.9 + - @backstage/plugin-puppetdb@0.1.1 + - @backstage/plugin-rollbar@0.4.18 + - @backstage/plugin-sentry@0.5.3 + - @backstage/plugin-stackstorm@0.1.2 + - @backstage/plugin-techdocs-react@1.1.6 + - @backstage/plugin-todo@0.2.20 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-apache-airflow@0.2.11 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-catalog-import@0.9.8 + - @backstage/plugin-linguist-common@0.1.0 + - @backstage/plugin-newrelic-dashboard@0.2.11 + - @backstage/plugin-permission-react@0.4.12 + - @backstage/plugin-search-common@1.2.3 + - @internal/plugin-catalog-customized@0.0.10 + ## 0.2.83-next.2 ### Patch Changes diff --git a/packages/app/package.json b/packages/app/package.json index 56ae2e9c9e..c2330244d0 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,6 +1,6 @@ { "name": "example-app", - "version": "0.2.83-next.2", + "version": "0.2.83", "private": true, "backstage": { "role": "frontend" diff --git a/packages/backend-app-api/CHANGELOG.md b/packages/backend-app-api/CHANGELOG.md index 00e7582ad3..dcb0e722c0 100644 --- a/packages/backend-app-api/CHANGELOG.md +++ b/packages/backend-app-api/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/backend-app-api +## 0.4.3 + +### Patch Changes + +- cf13b482f9e: Switch `configServiceFactory` to use `ConfigSources` from `@backstage/config-loader` to load config. +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/config-loader@1.3.0 + - @backstage/plugin-permission-node@0.7.8 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + ## 0.4.3-next.1 ### Patch Changes diff --git a/packages/backend-app-api/package.json b/packages/backend-app-api/package.json index a21484ff2e..dc5b38daae 100644 --- a/packages/backend-app-api/package.json +++ b/packages/backend-app-api/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-app-api", "description": "Core API used by Backstage backend apps", - "version": "0.4.3-next.1", + "version": "0.4.3", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-common/CHANGELOG.md b/packages/backend-common/CHANGELOG.md index fc6d99cf93..cdf7f6259d 100644 --- a/packages/backend-common/CHANGELOG.md +++ b/packages/backend-common/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/backend-common +## 0.18.5 + +### Patch Changes + +- 0297f7a54af: Remove the direct dependency on deprecated "request" library +- 284db225083: Updated the `DatabaseManager` to include the plugin id in the Postgres application name of the database connections created for each plugin. +- 3659c71c5d9: Standardize `@aws-sdk` v3 versions +- 42d817e76ab: Added `HostDiscovery` to supersede deprecated `SingleHostDiscovery` (deprecated due to name) +- Updated dependencies + - @backstage/config-loader@1.3.0 + - @backstage/integration@1.4.5 + - @backstage/integration-aws-node@0.1.3 + - @backstage/backend-app-api@0.4.3 + - @backstage/backend-dev-utils@0.1.1 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + ## 0.18.5-next.1 ### Patch Changes diff --git a/packages/backend-common/package.json b/packages/backend-common/package.json index f8175bac29..914400368a 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.18.5-next.1", + "version": "0.18.5", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-defaults/CHANGELOG.md b/packages/backend-defaults/CHANGELOG.md index 52043b4ecf..49d5a8bf1f 100644 --- a/packages/backend-defaults/CHANGELOG.md +++ b/packages/backend-defaults/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/backend-defaults +## 0.1.10 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-app-api@0.4.3 + - @backstage/backend-plugin-api@0.5.2 + ## 0.1.10-next.1 ### Patch Changes diff --git a/packages/backend-defaults/package.json b/packages/backend-defaults/package.json index d99e462efa..09b5b82dfc 100644 --- a/packages/backend-defaults/package.json +++ b/packages/backend-defaults/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-defaults", "description": "Backend defaults used by Backstage backend apps", - "version": "0.1.10-next.1", + "version": "0.1.10", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-next/CHANGELOG.md b/packages/backend-next/CHANGELOG.md index e01a00f8d2..8253a108b9 100644 --- a/packages/backend-next/CHANGELOG.md +++ b/packages/backend-next/CHANGELOG.md @@ -1,5 +1,27 @@ # example-backend-next +## 0.0.11 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.14.0 + - @backstage/plugin-catalog-backend@1.9.1 + - @backstage/plugin-kubernetes-backend@0.11.0 + - @backstage/plugin-todo-backend@0.1.42 + - @backstage/plugin-permission-node@0.7.8 + - @backstage/plugin-search-backend@1.3.1 + - @backstage/backend-defaults@0.1.10 + - @backstage/plugin-app-backend@0.3.45 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/plugin-search-backend-module-catalog@0.1.1 + - @backstage/plugin-search-backend-module-explore@0.1.1 + - @backstage/plugin-search-backend-module-techdocs@0.1.1 + - @backstage/plugin-techdocs-backend@1.6.2 + - @backstage/plugin-permission-backend@0.5.20 + - @backstage/plugin-search-backend-node@1.2.1 + - @backstage/plugin-permission-common@0.7.5 + ## 0.0.11-next.2 ### Patch Changes diff --git a/packages/backend-next/package.json b/packages/backend-next/package.json index f69435a838..a50df741ec 100644 --- a/packages/backend-next/package.json +++ b/packages/backend-next/package.json @@ -1,6 +1,6 @@ { "name": "example-backend-next", - "version": "0.0.11-next.2", + "version": "0.0.11", "main": "dist/index.cjs.js", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/backend-openapi-utils/CHANGELOG.md b/packages/backend-openapi-utils/CHANGELOG.md index 2d3d5f021d..0255bbbf73 100644 --- a/packages/backend-openapi-utils/CHANGELOG.md +++ b/packages/backend-openapi-utils/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/backend-openapi-utils +## 0.0.2 + +### Patch Changes + +- fe16bd39e83: Use permalinks for links including a line number reference +- 27956d78671: Adjusted README accordingly after the generated output now has a `.generated.ts` extension +- 021cfbb5152: Corrected resolution of parameter nested schema to use central schemas. +- 799c33047ed: Updated README to reflect changes in `@backstage/repo-tools`. + ## 0.0.2-next.1 ### Patch Changes diff --git a/packages/backend-openapi-utils/package.json b/packages/backend-openapi-utils/package.json index b3926de712..89a4621a49 100644 --- a/packages/backend-openapi-utils/package.json +++ b/packages/backend-openapi-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-openapi-utils", "description": "OpenAPI typescript support.", - "version": "0.0.2-next.1", + "version": "0.0.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/backend-plugin-api/CHANGELOG.md b/packages/backend-plugin-api/CHANGELOG.md index 9a28b1dd3a..cf22e7a9c3 100644 --- a/packages/backend-plugin-api/CHANGELOG.md +++ b/packages/backend-plugin-api/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/backend-plugin-api +## 0.5.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-permission-common@0.7.5 + ## 0.5.2-next.1 ### Patch Changes diff --git a/packages/backend-plugin-api/package.json b/packages/backend-plugin-api/package.json index 58e103e647..d4c2bef5a2 100644 --- a/packages/backend-plugin-api/package.json +++ b/packages/backend-plugin-api/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-plugin-api", "description": "Core API used by Backstage backend plugins", - "version": "0.5.2-next.1", + "version": "0.5.2", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-tasks/CHANGELOG.md b/packages/backend-tasks/CHANGELOG.md index 1ef0203eb1..c7927d1e66 100644 --- a/packages/backend-tasks/CHANGELOG.md +++ b/packages/backend-tasks/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/backend-tasks +## 0.5.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + ## 0.5.2-next.1 ### Patch Changes diff --git a/packages/backend-tasks/package.json b/packages/backend-tasks/package.json index b0f5c3afb3..6a87b91202 100644 --- a/packages/backend-tasks/package.json +++ b/packages/backend-tasks/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-tasks", "description": "Common distributed task management library for Backstage backends", - "version": "0.5.2-next.1", + "version": "0.5.2", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-test-utils/CHANGELOG.md b/packages/backend-test-utils/CHANGELOG.md index 3ce5006003..7a2ea9c2e6 100644 --- a/packages/backend-test-utils/CHANGELOG.md +++ b/packages/backend-test-utils/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/backend-test-utils +## 0.1.37 + +### Patch Changes + +- 63af7f6d53f: Allow specifying custom Docker registry for database tests +- b1eb268bf9d: Added `POSTGRES_11` and `POSTGRES_12` as supported test database IDs. +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-app-api@0.4.3 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + ## 0.1.37-next.1 ### Patch Changes diff --git a/packages/backend-test-utils/package.json b/packages/backend-test-utils/package.json index b23d3b411e..5351ade035 100644 --- a/packages/backend-test-utils/package.json +++ b/packages/backend-test-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-test-utils", "description": "Test helpers library for Backstage backends", - "version": "0.1.37-next.1", + "version": "0.1.37", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend/CHANGELOG.md b/packages/backend/CHANGELOG.md index 7a4031b654..c775d70b2f 100644 --- a/packages/backend/CHANGELOG.md +++ b/packages/backend/CHANGELOG.md @@ -1,5 +1,57 @@ # example-backend +## 0.2.83 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.14.0 + - @backstage/plugin-devtools-backend@0.1.0 + - @backstage/plugin-catalog-backend@1.9.1 + - @backstage/backend-common@0.18.5 + - @backstage/plugin-kubernetes-backend@0.11.0 + - @backstage/plugin-auth-backend@0.18.3 + - @backstage/plugin-badges-backend@0.2.0 + - @backstage/plugin-search-backend-module-elasticsearch@1.3.0 + - @backstage/integration@1.4.5 + - @backstage/plugin-todo-backend@0.1.42 + - @backstage/plugin-jenkins-backend@0.2.0 + - @backstage/plugin-azure-sites-backend@0.1.7 + - @backstage/plugin-permission-node@0.7.8 + - @backstage/plugin-search-backend@1.3.1 + - example-app@0.2.83 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-app-backend@0.3.45 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/plugin-entity-feedback-backend@0.1.3 + - @backstage/plugin-events-backend@0.2.6 + - @backstage/plugin-playlist-backend@0.3.1 + - @backstage/plugin-rollbar-backend@0.1.42 + - @backstage/plugin-search-backend-module-pg@0.5.6 + - @backstage/plugin-tech-insights-backend@0.5.11 + - @backstage/plugin-techdocs-backend@1.6.2 + - @backstage/plugin-scaffolder-backend-module-rails@0.4.14 + - @backstage/plugin-adr-backend@0.3.3 + - @backstage/plugin-azure-devops-backend@0.3.24 + - @backstage/plugin-code-coverage-backend@0.2.11 + - @backstage/plugin-explore-backend@0.0.7 + - @backstage/plugin-graphql-backend@0.1.35 + - @backstage/plugin-kafka-backend@0.2.38 + - @backstage/plugin-lighthouse-backend@0.2.1 + - @backstage/plugin-linguist-backend@0.2.2 + - @backstage/plugin-permission-backend@0.5.20 + - @backstage/plugin-proxy-backend@0.2.39 + - @backstage/plugin-search-backend-node@1.2.1 + - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.29 + - @backstage/plugin-tech-insights-node@0.4.3 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.6 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-search-common@1.2.3 + ## 0.2.83-next.2 ### Patch Changes diff --git a/packages/backend/package.json b/packages/backend/package.json index b5a82fd611..7d6c1011e4 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -1,6 +1,6 @@ { "name": "example-backend", - "version": "0.2.83-next.2", + "version": "0.2.83", "main": "dist/index.cjs.js", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index a8c7207650..b91dad32b7 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/cli +## 0.22.7 + +### Patch Changes + +- 473db605a4f: Enable strict config checking during `backstage-cli config:check` with the new `--strict` option which will surface schema errors. +- d548886872d: Deprecated the use of React 16 +- Updated dependencies + - @backstage/config-loader@1.3.0 + - @backstage/cli-common@0.1.12 + - @backstage/cli-node@0.1.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/eslint-plugin@0.1.3 + - @backstage/release-manifests@0.0.9 + - @backstage/types@1.0.2 + ## 0.22.7-next.0 ### Patch Changes diff --git a/packages/cli/package.json b/packages/cli/package.json index 9de7b3dbb2..28c5ce7030 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/cli", "description": "CLI for developing Backstage plugins and apps", - "version": "0.22.7-next.0", + "version": "0.22.7", "publishConfig": { "access": "public" }, diff --git a/packages/config-loader/CHANGELOG.md b/packages/config-loader/CHANGELOG.md index 9b2d34f957..05e4398bc8 100644 --- a/packages/config-loader/CHANGELOG.md +++ b/packages/config-loader/CHANGELOG.md @@ -1,5 +1,56 @@ # @backstage/config-loader +## 1.3.0 + +### Minor Changes + +- 201206132da: Introduced a new config source system to replace `loadConfig`. There is a new `ConfigSource` interface along with utilities provided by `ConfigSources`, as well as a number of built-in configuration source implementations. The new system is more flexible and makes it easier to create new and reusable sources of configuration, such as loading configuration from secret providers. + + The following is an example of how to load configuration using the default behavior: + + ```ts + const source = ConfigSources.default({ + argv: options?.argv, + remote: options?.remote, + }); + const config = await ConfigSources.toConfig(source); + ``` + + The `ConfigSource` interface looks like this: + + ```ts + export interface ConfigSource { + readConfigData(options?: ReadConfigDataOptions): AsyncConfigSourceIterator; + } + ``` + + It is best implemented using an async iterator: + + ```ts + class MyConfigSource implements ConfigSource { + async *readConfigData() { + yield { + config: [ + { + context: 'example', + data: { backend: { baseUrl: 'http://localhost' } }, + }, + ], + }; + } + } + ``` + +### Patch Changes + +- 7c116bcac7f: Fixed the way that some request errors are thrown +- 473db605a4f: Added a new `noUndeclaredProperties` option to `SchemaLoader` to support enforcing that there are no extra keys when verifying config. +- Updated dependencies + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + ## 1.3.0-next.0 ### Minor Changes diff --git a/packages/config-loader/package.json b/packages/config-loader/package.json index 0aa071c206..d453b40201 100644 --- a/packages/config-loader/package.json +++ b/packages/config-loader/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/config-loader", "description": "Config loading functionality used by Backstage backend, and CLI", - "version": "1.3.0-next.0", + "version": "1.3.0", "publishConfig": { "access": "public", "main": "dist/index.cjs.js", diff --git a/packages/core-app-api/CHANGELOG.md b/packages/core-app-api/CHANGELOG.md index f4179e6fb6..f6df0da032 100644 --- a/packages/core-app-api/CHANGELOG.md +++ b/packages/core-app-api/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/core-app-api +## 1.8.0 + +### Minor Changes + +- c89437db899: The analytics' `navigate` event will now include the route parameters as attributes of the navigate event + +### Patch Changes + +- b645d70034a: Fixed a bug in the Azure auth provider which prevented getting access tokens with multiple scopes for one resource +- 42d817e76ab: Added `FrontendHostDiscovery` for config driven discovery implementation +- Updated dependencies + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.4 + ## 1.8.0-next.1 ### Minor Changes diff --git a/packages/core-app-api/package.json b/packages/core-app-api/package.json index 5d99754068..4416fa99e1 100644 --- a/packages/core-app-api/package.json +++ b/packages/core-app-api/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/core-app-api", "description": "Core app API used by Backstage apps", - "version": "1.8.0-next.1", + "version": "1.8.0", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/packages/core-components/CHANGELOG.md b/packages/core-components/CHANGELOG.md index 90f4e174b0..8ace83e62b 100644 --- a/packages/core-components/CHANGELOG.md +++ b/packages/core-components/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/core-components +## 0.13.1 + +### Patch Changes + +- 83b45f9df50: Fix accessibility issue with Backstage Table's header style +- e97769f7c0b: Fix accessibility issue on controlled select input on tab navigation + keyboard enter/space action. +- b1f13cb38aa: Fix accessibility issue with Edit Metadata Link on screen readers missing notice about opening in a new tab. +- 26cff1a5dfb: Start capturing sidebar click events in analytics by default. +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/version-bridge@1.0.4 + ## 0.13.1-next.1 ### Patch Changes diff --git a/packages/core-components/package.json b/packages/core-components/package.json index ec46c4c6e3..872808622f 100644 --- a/packages/core-components/package.json +++ b/packages/core-components/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/core-components", "description": "Core components used by Backstage plugins and apps", - "version": "0.13.1-next.1", + "version": "0.13.1", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/packages/create-app/CHANGELOG.md b/packages/create-app/CHANGELOG.md index 16d93b1867..c1b613ed28 100644 --- a/packages/create-app/CHANGELOG.md +++ b/packages/create-app/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/create-app +## 0.5.1 + +### Patch Changes + +- 1d5e42655cd: Correct command to create new plugins +- e04bb20bdc4: Bumped create-app version. +- Updated dependencies + - @backstage/cli-common@0.1.12 + ## 0.5.1-next.2 ### Patch Changes diff --git a/packages/create-app/package.json b/packages/create-app/package.json index 841c1b401d..ff9fdd6623 100644 --- a/packages/create-app/package.json +++ b/packages/create-app/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/create-app", "description": "A CLI that helps you create your own Backstage app", - "version": "0.5.1-next.2", + "version": "0.5.1", "publishConfig": { "access": "public" }, diff --git a/packages/dev-utils/CHANGELOG.md b/packages/dev-utils/CHANGELOG.md index 77e5241e7e..6e88b8d085 100644 --- a/packages/dev-utils/CHANGELOG.md +++ b/packages/dev-utils/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/dev-utils +## 1.0.15 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/app-defaults@1.3.1 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-app-api@1.8.0 + - @backstage/core-components@0.13.1 + - @backstage/integration-react@1.1.13 + - @backstage/test-utils@1.3.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + ## 1.0.15-next.2 ### Patch Changes diff --git a/packages/dev-utils/package.json b/packages/dev-utils/package.json index c14732070f..3ca693d906 100644 --- a/packages/dev-utils/package.json +++ b/packages/dev-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/dev-utils", "description": "Utilities for developing Backstage plugins.", - "version": "1.0.15-next.2", + "version": "1.0.15", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/packages/e2e-test/CHANGELOG.md b/packages/e2e-test/CHANGELOG.md index eaec405ec9..7186431398 100644 --- a/packages/e2e-test/CHANGELOG.md +++ b/packages/e2e-test/CHANGELOG.md @@ -1,5 +1,14 @@ # e2e-test +## 0.2.3 + +### Patch Changes + +- Updated dependencies + - @backstage/create-app@0.5.1 + - @backstage/cli-common@0.1.12 + - @backstage/errors@1.1.5 + ## 0.2.3-next.2 ### Patch Changes diff --git a/packages/e2e-test/package.json b/packages/e2e-test/package.json index 60877e8d66..011a9e876d 100644 --- a/packages/e2e-test/package.json +++ b/packages/e2e-test/package.json @@ -1,7 +1,7 @@ { "name": "e2e-test", "description": "E2E test for verifying Backstage packages", - "version": "0.2.3-next.2", + "version": "0.2.3", "private": true, "backstage": { "role": "cli" diff --git a/packages/integration-aws-node/CHANGELOG.md b/packages/integration-aws-node/CHANGELOG.md index 40192bdfaf..181b08c4ee 100644 --- a/packages/integration-aws-node/CHANGELOG.md +++ b/packages/integration-aws-node/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/integration-aws-node +## 0.1.3 + +### Patch Changes + +- 3659c71c5d9: Standardize `@aws-sdk` v3 versions +- Updated dependencies + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 0.1.2 ### Patch Changes diff --git a/packages/integration-aws-node/package.json b/packages/integration-aws-node/package.json index 30a95b549e..8eec21a143 100644 --- a/packages/integration-aws-node/package.json +++ b/packages/integration-aws-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/integration-aws-node", "description": "Helpers for fetching AWS account credentials", - "version": "0.1.2", + "version": "0.1.3", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/integration-react/CHANGELOG.md b/packages/integration-react/CHANGELOG.md index f9c035b7a6..b1bfe3e73f 100644 --- a/packages/integration-react/CHANGELOG.md +++ b/packages/integration-react/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/integration-react +## 1.1.13 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/integration@1.4.5 + - @backstage/core-components@0.13.1 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + ## 1.1.13-next.2 ### Patch Changes diff --git a/packages/integration-react/package.json b/packages/integration-react/package.json index 3124557ebc..929faae601 100644 --- a/packages/integration-react/package.json +++ b/packages/integration-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/integration-react", "description": "Frontend package for managing integrations towards external systems", - "version": "1.1.13-next.2", + "version": "1.1.13", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/integration/CHANGELOG.md b/packages/integration/CHANGELOG.md index 92eff86bb5..7dcef4fbc9 100644 --- a/packages/integration/CHANGELOG.md +++ b/packages/integration/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/integration +## 1.4.5 + +### Patch Changes + +- b026275bcc8: Fixed a bug where the wrong credentials would be selected when using multiple GitHub app integrations. +- Updated dependencies + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 1.4.5-next.0 ### Patch Changes diff --git a/packages/integration/package.json b/packages/integration/package.json index fbe8ac1fc3..14b64b3089 100644 --- a/packages/integration/package.json +++ b/packages/integration/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/integration", "description": "Helpers for managing integrations towards external systems", - "version": "1.4.5-next.0", + "version": "1.4.5", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/repo-tools/CHANGELOG.md b/packages/repo-tools/CHANGELOG.md index e31c05532c..7f1ece48d4 100644 --- a/packages/repo-tools/CHANGELOG.md +++ b/packages/repo-tools/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/repo-tools +## 0.3.0 + +### Minor Changes + +- 799c33047ed: **BREAKING**: The OpenAPI commands are now found within the `schema openapi` sub-command. For example `yarn backstage-repo-tools schema:openapi:verify` is now `yarn backstage-repo-tools schema openapi verify`. +- 27956d78671: Generated OpenAPI files now have a `.generated.ts` file name and a warning header at the top, to highlight that they should not be edited by hand. + +### Patch Changes + +- Updated dependencies + - @backstage/cli-common@0.1.12 + - @backstage/cli-node@0.1.0 + - @backstage/errors@1.1.5 + ## 0.3.0-next.0 ### Minor Changes diff --git a/packages/repo-tools/package.json b/packages/repo-tools/package.json index 74c39fc9a8..85f683a999 100644 --- a/packages/repo-tools/package.json +++ b/packages/repo-tools/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/repo-tools", "description": "CLI for Backstage repo tooling ", - "version": "0.3.0-next.0", + "version": "0.3.0", "publishConfig": { "access": "public" }, diff --git a/packages/techdocs-cli-embedded-app/CHANGELOG.md b/packages/techdocs-cli-embedded-app/CHANGELOG.md index 3e7e890e7c..6886f89c11 100644 --- a/packages/techdocs-cli-embedded-app/CHANGELOG.md +++ b/packages/techdocs-cli-embedded-app/CHANGELOG.md @@ -1,5 +1,24 @@ # techdocs-cli-embedded-app +## 0.2.82 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-techdocs@1.6.2 + - @backstage/app-defaults@1.3.1 + - @backstage/cli@0.22.7 + - @backstage/plugin-catalog@1.11.0 + - @backstage/core-app-api@1.8.0 + - @backstage/core-components@0.13.1 + - @backstage/integration-react@1.1.13 + - @backstage/test-utils@1.3.1 + - @backstage/plugin-techdocs-react@1.1.6 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + ## 0.2.82-next.2 ### Patch Changes diff --git a/packages/techdocs-cli-embedded-app/package.json b/packages/techdocs-cli-embedded-app/package.json index a645d2dac1..fb3715325b 100644 --- a/packages/techdocs-cli-embedded-app/package.json +++ b/packages/techdocs-cli-embedded-app/package.json @@ -1,6 +1,6 @@ { "name": "techdocs-cli-embedded-app", - "version": "0.2.82-next.2", + "version": "0.2.82", "private": true, "backstage": { "role": "frontend" diff --git a/packages/techdocs-cli/CHANGELOG.md b/packages/techdocs-cli/CHANGELOG.md index 35f3b4bc28..ce88475c7f 100644 --- a/packages/techdocs-cli/CHANGELOG.md +++ b/packages/techdocs-cli/CHANGELOG.md @@ -1,5 +1,16 @@ # @techdocs/cli +## 1.4.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-techdocs-node@1.7.1 + - @backstage/catalog-model@1.3.0 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + ## 1.4.2-next.1 ### Patch Changes diff --git a/packages/techdocs-cli/package.json b/packages/techdocs-cli/package.json index 8b533b4453..e61401e8ce 100644 --- a/packages/techdocs-cli/package.json +++ b/packages/techdocs-cli/package.json @@ -1,7 +1,7 @@ { "name": "@techdocs/cli", "description": "Utility CLI for managing TechDocs sites in Backstage.", - "version": "1.4.2-next.1", + "version": "1.4.2", "publishConfig": { "access": "public" }, diff --git a/packages/test-utils/CHANGELOG.md b/packages/test-utils/CHANGELOG.md index 6804a09762..4bebf94052 100644 --- a/packages/test-utils/CHANGELOG.md +++ b/packages/test-utils/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/test-utils +## 1.3.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-app-api@1.8.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/types@1.0.2 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-permission-react@0.4.12 + ## 1.3.1-next.2 ### Patch Changes diff --git a/packages/test-utils/package.json b/packages/test-utils/package.json index fa2557c4de..3024b25c05 100644 --- a/packages/test-utils/package.json +++ b/packages/test-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/test-utils", "description": "Utilities to test Backstage plugins and apps.", - "version": "1.3.1-next.2", + "version": "1.3.1", "publishConfig": { "access": "public" }, diff --git a/packages/theme/CHANGELOG.md b/packages/theme/CHANGELOG.md index 1e676394b5..0f8b4819b7 100644 --- a/packages/theme/CHANGELOG.md +++ b/packages/theme/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/theme +## 0.3.0 + +### Minor Changes + +- 98c0c199b15: Updates light theme's primary foreground and `running` status indicator colours to meet WCAG. Previously #2E77D0 changed to #1F5493. + +### Patch Changes + +- 83b45f9df50: Fix accessibility issue with Backstage Table's header style + ## 0.3.0-next.0 ### Minor Changes diff --git a/packages/theme/package.json b/packages/theme/package.json index f0e26f5739..fbc767fb2f 100644 --- a/packages/theme/package.json +++ b/packages/theme/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/theme", "description": "material-ui theme for use with Backstage.", - "version": "0.3.0-next.0", + "version": "0.3.0", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/plugins/adr-backend/CHANGELOG.md b/plugins/adr-backend/CHANGELOG.md index 39e8bf7e4c..dd7823c048 100644 --- a/plugins/adr-backend/CHANGELOG.md +++ b/plugins/adr-backend/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-adr-backend +## 0.3.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-adr-common@0.2.9 + - @backstage/plugin-search-common@1.2.3 + ## 0.3.3-next.1 ### Patch Changes diff --git a/plugins/adr-backend/package.json b/plugins/adr-backend/package.json index a1f6a859a0..a926239ba7 100644 --- a/plugins/adr-backend/package.json +++ b/plugins/adr-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-adr-backend", - "version": "0.3.3-next.1", + "version": "0.3.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/adr-common/CHANGELOG.md b/plugins/adr-common/CHANGELOG.md index c3b8806c80..9fddae2588 100644 --- a/plugins/adr-common/CHANGELOG.md +++ b/plugins/adr-common/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-adr-common +## 0.2.9 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.4.5 + - @backstage/catalog-model@1.3.0 + - @backstage/plugin-search-common@1.2.3 + ## 0.2.9-next.0 ### Patch Changes diff --git a/plugins/adr-common/package.json b/plugins/adr-common/package.json index 0fdf94003a..adbb6bea58 100644 --- a/plugins/adr-common/package.json +++ b/plugins/adr-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-adr-common", "description": "Common functionalities for the adr plugin", - "version": "0.2.9-next.0", + "version": "0.2.9", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/adr/CHANGELOG.md b/plugins/adr/CHANGELOG.md index ce583e56d2..b96e66e9d3 100644 --- a/plugins/adr/CHANGELOG.md +++ b/plugins/adr/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-adr +## 0.6.0 + +### Minor Changes + +- b12cd5dc221: render SupportButton only if config is set + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/plugin-search-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/integration-react@1.1.13 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-adr-common@0.2.9 + - @backstage/plugin-search-common@1.2.3 + ## 0.5.1-next.2 ### Patch Changes diff --git a/plugins/adr/package.json b/plugins/adr/package.json index 707f0396cf..cac6b89fcc 100644 --- a/plugins/adr/package.json +++ b/plugins/adr/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-adr", - "version": "0.5.1-next.2", + "version": "0.6.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/airbrake-backend/CHANGELOG.md b/plugins/airbrake-backend/CHANGELOG.md index 8407f5822e..15c10734de 100644 --- a/plugins/airbrake-backend/CHANGELOG.md +++ b/plugins/airbrake-backend/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-airbrake-backend +## 0.2.18 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/config@1.0.7 + ## 0.2.18-next.1 ### Patch Changes diff --git a/plugins/airbrake-backend/package.json b/plugins/airbrake-backend/package.json index c57ffa8be9..eaec28f797 100644 --- a/plugins/airbrake-backend/package.json +++ b/plugins/airbrake-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-airbrake-backend", - "version": "0.2.18-next.1", + "version": "0.2.18", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/airbrake/CHANGELOG.md b/plugins/airbrake/CHANGELOG.md index 15472a973a..854e9be255 100644 --- a/plugins/airbrake/CHANGELOG.md +++ b/plugins/airbrake/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-airbrake +## 0.3.18 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/dev-utils@1.0.15 + - @backstage/test-utils@1.3.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + ## 0.3.18-next.2 ### Patch Changes diff --git a/plugins/airbrake/package.json b/plugins/airbrake/package.json index 3934c29680..6933bad355 100644 --- a/plugins/airbrake/package.json +++ b/plugins/airbrake/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-airbrake", - "version": "0.3.18-next.2", + "version": "0.3.18", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/allure/CHANGELOG.md b/plugins/allure/CHANGELOG.md index e656638fd6..e89f981487 100644 --- a/plugins/allure/CHANGELOG.md +++ b/plugins/allure/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-allure +## 0.1.34 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + ## 0.1.34-next.2 ### Patch Changes diff --git a/plugins/allure/package.json b/plugins/allure/package.json index d8fb27f36c..e2f6c7241a 100644 --- a/plugins/allure/package.json +++ b/plugins/allure/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-allure", "description": "A Backstage plugin that integrates with Allure", - "version": "0.1.34-next.2", + "version": "0.1.34", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/analytics-module-ga/CHANGELOG.md b/plugins/analytics-module-ga/CHANGELOG.md index ec3122845a..fc0a434a5e 100644 --- a/plugins/analytics-module-ga/CHANGELOG.md +++ b/plugins/analytics-module-ga/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-analytics-module-ga +## 0.1.29 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + ## 0.1.29-next.1 ### Patch Changes diff --git a/plugins/analytics-module-ga/package.json b/plugins/analytics-module-ga/package.json index 2b2542ec2d..8062c304fa 100644 --- a/plugins/analytics-module-ga/package.json +++ b/plugins/analytics-module-ga/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-analytics-module-ga", - "version": "0.1.29-next.1", + "version": "0.1.29", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/analytics-module-ga4/CHANGELOG.md b/plugins/analytics-module-ga4/CHANGELOG.md index 15e67dd797..c69204bcc0 100644 --- a/plugins/analytics-module-ga4/CHANGELOG.md +++ b/plugins/analytics-module-ga4/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-analytics-module-ga4 +## 0.1.0 + +### Minor Changes + +- 22b46f7f562: Plugin provides Backstage Analytics API for Google Analytics 4. Once installed and configured, analytics events will be sent to GA4 as your users navigate and use your Backstage instance + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + ## 0.1.0-next.2 ### Patch Changes diff --git a/plugins/analytics-module-ga4/package.json b/plugins/analytics-module-ga4/package.json index eee914df92..dba9d0c8f4 100644 --- a/plugins/analytics-module-ga4/package.json +++ b/plugins/analytics-module-ga4/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-analytics-module-ga4", - "version": "0.1.0-next.2", + "version": "0.1.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/apache-airflow/CHANGELOG.md b/plugins/apache-airflow/CHANGELOG.md index 612a2a3e1d..f9f6958a87 100644 --- a/plugins/apache-airflow/CHANGELOG.md +++ b/plugins/apache-airflow/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-apache-airflow +## 0.2.11 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + ## 0.2.11-next.1 ### Patch Changes diff --git a/plugins/apache-airflow/package.json b/plugins/apache-airflow/package.json index cf7cf9553c..4ad427a972 100644 --- a/plugins/apache-airflow/package.json +++ b/plugins/apache-airflow/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-apache-airflow", - "version": "0.2.11-next.1", + "version": "0.2.11", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/api-docs/CHANGELOG.md b/plugins/api-docs/CHANGELOG.md index f370ab46ee..2455e7809c 100644 --- a/plugins/api-docs/CHANGELOG.md +++ b/plugins/api-docs/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-api-docs +## 0.9.3 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/plugin-catalog@1.11.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + ## 0.9.3-next.2 ### Patch Changes diff --git a/plugins/api-docs/package.json b/plugins/api-docs/package.json index e31e2ec48e..651a606d9c 100644 --- a/plugins/api-docs/package.json +++ b/plugins/api-docs/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-api-docs", "description": "A Backstage plugin that helps represent API entities in the frontend", - "version": "0.9.3-next.2", + "version": "0.9.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/apollo-explorer/CHANGELOG.md b/plugins/apollo-explorer/CHANGELOG.md index 38d322a270..9efa02cea9 100644 --- a/plugins/apollo-explorer/CHANGELOG.md +++ b/plugins/apollo-explorer/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-apollo-explorer +## 0.1.11 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + ## 0.1.11-next.1 ### Patch Changes diff --git a/plugins/apollo-explorer/package.json b/plugins/apollo-explorer/package.json index 5117fa632c..b28293777d 100644 --- a/plugins/apollo-explorer/package.json +++ b/plugins/apollo-explorer/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-apollo-explorer", - "version": "0.1.11-next.1", + "version": "0.1.11", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/app-backend/CHANGELOG.md b/plugins/app-backend/CHANGELOG.md index 1e98f25c64..d89ba0a4ec 100644 --- a/plugins/app-backend/CHANGELOG.md +++ b/plugins/app-backend/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-app-backend +## 0.3.45 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/config-loader@1.3.0 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + ## 0.3.45-next.1 ### Patch Changes diff --git a/plugins/app-backend/package.json b/plugins/app-backend/package.json index 85602a06e4..9a471f0021 100644 --- a/plugins/app-backend/package.json +++ b/plugins/app-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-app-backend", "description": "A Backstage backend plugin that serves the Backstage frontend app", - "version": "0.3.45-next.1", + "version": "0.3.45", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/auth-backend/CHANGELOG.md b/plugins/auth-backend/CHANGELOG.md index 406298f6d2..551872232d 100644 --- a/plugins/auth-backend/CHANGELOG.md +++ b/plugins/auth-backend/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-auth-backend +## 0.18.3 + +### Patch Changes + +- 7c116bcac7f: Fixed the way that some request errors are thrown +- 473db605a4f: Fix config schema definition. +- 3ffcdac7d07: Added a persistent session store through the database +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + ## 0.18.3-next.2 ### Patch Changes diff --git a/plugins/auth-backend/package.json b/plugins/auth-backend/package.json index fbaf3c5423..fb53d9b17f 100644 --- a/plugins/auth-backend/package.json +++ b/plugins/auth-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-auth-backend", "description": "A Backstage backend plugin that handles authentication", - "version": "0.18.3-next.2", + "version": "0.18.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/auth-node/CHANGELOG.md b/plugins/auth-node/CHANGELOG.md index 7cb9f4cc64..e299198f8f 100644 --- a/plugins/auth-node/CHANGELOG.md +++ b/plugins/auth-node/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-auth-node +## 0.2.14 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 0.2.14-next.1 ### Patch Changes diff --git a/plugins/auth-node/package.json b/plugins/auth-node/package.json index 1d8e71a4c0..25bcda593a 100644 --- a/plugins/auth-node/package.json +++ b/plugins/auth-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-node", - "version": "0.2.14-next.1", + "version": "0.2.14", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/azure-devops-backend/CHANGELOG.md b/plugins/azure-devops-backend/CHANGELOG.md index 3dd206ae66..232347e752 100644 --- a/plugins/azure-devops-backend/CHANGELOG.md +++ b/plugins/azure-devops-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-azure-devops-backend +## 0.3.24 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/config@1.0.7 + - @backstage/plugin-azure-devops-common@0.3.0 + ## 0.3.24-next.1 ### Patch Changes diff --git a/plugins/azure-devops-backend/package.json b/plugins/azure-devops-backend/package.json index f28bfa5cb4..2a0f3b76a5 100644 --- a/plugins/azure-devops-backend/package.json +++ b/plugins/azure-devops-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-azure-devops-backend", - "version": "0.3.24-next.1", + "version": "0.3.24", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/azure-devops/CHANGELOG.md b/plugins/azure-devops/CHANGELOG.md index 608f88437c..20bbec23b4 100644 --- a/plugins/azure-devops/CHANGELOG.md +++ b/plugins/azure-devops/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-azure-devops +## 0.3.0 + +### Minor Changes + +- 877df261085: The getBuildRuns function now checks contains multiple comma-separated builds and splits them to send multiple requests for each and concatenates the results. + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-azure-devops-common@0.3.0 + ## 0.3.0-next.2 ### Minor Changes diff --git a/plugins/azure-devops/package.json b/plugins/azure-devops/package.json index 8b3f4a8496..99122b62db 100644 --- a/plugins/azure-devops/package.json +++ b/plugins/azure-devops/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-azure-devops", - "version": "0.3.0-next.2", + "version": "0.3.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/azure-sites-backend/CHANGELOG.md b/plugins/azure-sites-backend/CHANGELOG.md index 9c25a70214..d8b123dec1 100644 --- a/plugins/azure-sites-backend/CHANGELOG.md +++ b/plugins/azure-sites-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-azure-sites-backend +## 0.1.7 + +### Patch Changes + +- d66d4f916aa: Updated URL to `/health` and corrected typos in the `README.md` +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/config@1.0.7 + - @backstage/plugin-azure-sites-common@0.1.0 + ## 0.1.7-next.1 ### Patch Changes diff --git a/plugins/azure-sites-backend/package.json b/plugins/azure-sites-backend/package.json index a58459d2aa..61c23a4b0f 100644 --- a/plugins/azure-sites-backend/package.json +++ b/plugins/azure-sites-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-azure-sites-backend", - "version": "0.1.7-next.1", + "version": "0.1.7", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/azure-sites/CHANGELOG.md b/plugins/azure-sites/CHANGELOG.md index 20703e33a5..bc7184c9ca 100644 --- a/plugins/azure-sites/CHANGELOG.md +++ b/plugins/azure-sites/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-azure-sites +## 0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-azure-sites-common@0.1.0 + ## 0.1.7-next.2 ### Patch Changes diff --git a/plugins/azure-sites/package.json b/plugins/azure-sites/package.json index c3335d6129..44775bcab4 100644 --- a/plugins/azure-sites/package.json +++ b/plugins/azure-sites/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-azure-sites", - "version": "0.1.7-next.2", + "version": "0.1.7", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/badges-backend/CHANGELOG.md b/plugins/badges-backend/CHANGELOG.md index c543efb0a6..e15a74e3de 100644 --- a/plugins/badges-backend/CHANGELOG.md +++ b/plugins/badges-backend/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-badges-backend +## 0.2.0 + +### Minor Changes + +- a0108c49774: Fixing badges-backend plugin to get a token from the TokenManager instead of parsing the request header. Hence, it's now possible to disable the authMiddleware for the badges-backend plugin to expose publicly the badges. + + Implementing an obfuscation feature to protect an open badges endpoint from being enumerated. The feature is disabled by default and the change is compatible with the previous version. + + **BREAKING**: `createRouter` now require that `tokenManager`, `logger`, and `identityApi`, are passed in as options. + +### Patch Changes + +- 0cd552c28d8: Removed some unused dependencies +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 0.2.0-next.2 ### Minor Changes diff --git a/plugins/badges-backend/package.json b/plugins/badges-backend/package.json index 84b4d324d7..f2db6ef5c5 100644 --- a/plugins/badges-backend/package.json +++ b/plugins/badges-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-badges-backend", "description": "A Backstage backend plugin that generates README badges for your entities", - "version": "0.2.0-next.2", + "version": "0.2.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/badges/CHANGELOG.md b/plugins/badges/CHANGELOG.md index a05ef8405d..1ec81cb321 100644 --- a/plugins/badges/CHANGELOG.md +++ b/plugins/badges/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-badges +## 0.2.42 + +### Patch Changes + +- a0108c49774: Fixing badges-backend plugin to get a token from the TokenManager instead of parsing the request header. Hence, it's now possible to disable the authMiddleware for the badges-backend plugin to expose publicly the badges. + + Implementing an obfuscation feature to protect an open badges endpoint from being enumerated. The feature is disabled by default and the change is compatible with the previous version. + + **BREAKING**: `createRouter` now require that `tokenManager`, `logger`, and `identityApi`, are passed in as options. + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + ## 0.2.42-next.2 ### Patch Changes diff --git a/plugins/badges/package.json b/plugins/badges/package.json index be2f7adc79..fcfb55c386 100644 --- a/plugins/badges/package.json +++ b/plugins/badges/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-badges", "description": "A Backstage plugin that generates README badges for your entities", - "version": "0.2.42-next.2", + "version": "0.2.42", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/bazaar-backend/CHANGELOG.md b/plugins/bazaar-backend/CHANGELOG.md index 11d820a334..da83be709c 100644 --- a/plugins/bazaar-backend/CHANGELOG.md +++ b/plugins/bazaar-backend/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-bazaar-backend +## 0.2.8 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 0.2.8-next.1 ### Patch Changes diff --git a/plugins/bazaar-backend/package.json b/plugins/bazaar-backend/package.json index 60e549655e..9dd25233c6 100644 --- a/plugins/bazaar-backend/package.json +++ b/plugins/bazaar-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-bazaar-backend", - "version": "0.2.8-next.1", + "version": "0.2.8", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/bazaar/CHANGELOG.md b/plugins/bazaar/CHANGELOG.md index 8f7de5e0f2..4b1a86deb9 100644 --- a/plugins/bazaar/CHANGELOG.md +++ b/plugins/bazaar/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-bazaar +## 0.2.8 + +### Patch Changes + +- 900880ab7c3: Fixed `validateDOMNesting` warnings +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/cli@0.22.7 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/plugin-catalog@1.11.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + ## 0.2.8-next.2 ### Patch Changes diff --git a/plugins/bazaar/package.json b/plugins/bazaar/package.json index 5e8bb28df6..d8d334b426 100644 --- a/plugins/bazaar/package.json +++ b/plugins/bazaar/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-bazaar", - "version": "0.2.8-next.2", + "version": "0.2.8", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/bitbucket-cloud-common/CHANGELOG.md b/plugins/bitbucket-cloud-common/CHANGELOG.md index c3c31ed392..04b2cc787b 100644 --- a/plugins/bitbucket-cloud-common/CHANGELOG.md +++ b/plugins/bitbucket-cloud-common/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-bitbucket-cloud-common +## 0.2.6 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.4.5 + ## 0.2.6-next.0 ### Patch Changes diff --git a/plugins/bitbucket-cloud-common/package.json b/plugins/bitbucket-cloud-common/package.json index 7bf2c5791e..a63b9588fb 100644 --- a/plugins/bitbucket-cloud-common/package.json +++ b/plugins/bitbucket-cloud-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-bitbucket-cloud-common", "description": "Common functionalities for bitbucket-cloud plugins", - "version": "0.2.6-next.0", + "version": "0.2.6", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/bitrise/CHANGELOG.md b/plugins/bitrise/CHANGELOG.md index 2fba6da9b3..069fc0ca6e 100644 --- a/plugins/bitrise/CHANGELOG.md +++ b/plugins/bitrise/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-bitrise +## 0.1.45 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + ## 0.1.45-next.2 ### Patch Changes diff --git a/plugins/bitrise/package.json b/plugins/bitrise/package.json index 1c1c3523ea..fe62603226 100644 --- a/plugins/bitrise/package.json +++ b/plugins/bitrise/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-bitrise", "description": "A Backstage plugin that integrates towards Bitrise", - "version": "0.1.45-next.2", + "version": "0.1.45", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-aws/CHANGELOG.md b/plugins/catalog-backend-module-aws/CHANGELOG.md index 886703f0c8..029ab14592 100644 --- a/plugins/catalog-backend-module-aws/CHANGELOG.md +++ b/plugins/catalog-backend-module-aws/CHANGELOG.md @@ -1,5 +1,27 @@ # @backstage/plugin-catalog-backend-module-aws +## 0.2.0 + +### Minor Changes + +- 1a3b5f1e390: **BREAKING**: AwsOrganizationCloudAccountProcessor.fromConfig now returns a promise instead of the instance directly. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/integration-aws-node@0.1.3 + - @backstage/plugin-kubernetes-common@0.6.3 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + ## 0.1.19-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-aws/package.json b/plugins/catalog-backend-module-aws/package.json index 50d7349cef..a5e0aad55b 100644 --- a/plugins/catalog-backend-module-aws/package.json +++ b/plugins/catalog-backend-module-aws/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-aws", "description": "A Backstage catalog backend module that helps integrate towards AWS", - "version": "0.1.19-next.2", + "version": "0.2.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-azure/CHANGELOG.md b/plugins/catalog-backend-module-azure/CHANGELOG.md index e8458d82e7..21b95b5861 100644 --- a/plugins/catalog-backend-module-azure/CHANGELOG.md +++ b/plugins/catalog-backend-module-azure/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-catalog-backend-module-azure +## 0.1.16 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + ## 0.1.16-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-azure/package.json b/plugins/catalog-backend-module-azure/package.json index 2e2ff96e7e..e9d6803571 100644 --- a/plugins/catalog-backend-module-azure/package.json +++ b/plugins/catalog-backend-module-azure/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-azure", "description": "A Backstage catalog backend module that helps integrate towards Azure", - "version": "0.1.16-next.1", + "version": "0.1.16", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md index af6e6c3a7f..94c83e6b2e 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-catalog-backend-module-bitbucket-cloud +## 0.1.12 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/plugin-bitbucket-cloud-common@0.2.6 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-events-node@0.2.6 + ## 0.1.12-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-bitbucket-cloud/package.json b/plugins/catalog-backend-module-bitbucket-cloud/package.json index 77df5b12b4..00e4269342 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/package.json +++ b/plugins/catalog-backend-module-bitbucket-cloud/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-bitbucket-cloud", "description": "A Backstage catalog backend module that helps integrate towards Bitbucket Cloud", - "version": "0.1.12-next.1", + "version": "0.1.12", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md index 3c9e51b08e..ae894c2e12 100644 --- a/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-catalog-backend-module-bitbucket-server +## 0.1.10 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 0.1.10-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-bitbucket-server/package.json b/plugins/catalog-backend-module-bitbucket-server/package.json index 68960fbf81..3dc8aca390 100644 --- a/plugins/catalog-backend-module-bitbucket-server/package.json +++ b/plugins/catalog-backend-module-bitbucket-server/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-bitbucket-server", - "version": "0.1.10-next.1", + "version": "0.1.10", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-bitbucket/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket/CHANGELOG.md index 0193d551a5..b7a9f2d0a2 100644 --- a/plugins/catalog-backend-module-bitbucket/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-catalog-backend-module-bitbucket +## 0.2.12 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-bitbucket-cloud-common@0.2.6 + ## 0.2.12-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-bitbucket/package.json b/plugins/catalog-backend-module-bitbucket/package.json index 64269a9102..1dbbb4bb45 100644 --- a/plugins/catalog-backend-module-bitbucket/package.json +++ b/plugins/catalog-backend-module-bitbucket/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-bitbucket", "description": "A Backstage catalog backend module that helps integrate towards Bitbucket", - "version": "0.2.12-next.1", + "version": "0.2.12", "deprecated": true, "main": "src/index.ts", "types": "src/index.ts", diff --git a/plugins/catalog-backend-module-gerrit/CHANGELOG.md b/plugins/catalog-backend-module-gerrit/CHANGELOG.md index ea3d4af960..8f94db98f3 100644 --- a/plugins/catalog-backend-module-gerrit/CHANGELOG.md +++ b/plugins/catalog-backend-module-gerrit/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-catalog-backend-module-gerrit +## 0.1.13 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 0.1.13-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-gerrit/package.json b/plugins/catalog-backend-module-gerrit/package.json index 22bc3a95e5..a69aac5034 100644 --- a/plugins/catalog-backend-module-gerrit/package.json +++ b/plugins/catalog-backend-module-gerrit/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-gerrit", - "version": "0.1.13-next.1", + "version": "0.1.13", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-github/CHANGELOG.md b/plugins/catalog-backend-module-github/CHANGELOG.md index 9e3b24071f..427b48e7bb 100644 --- a/plugins/catalog-backend-module-github/CHANGELOG.md +++ b/plugins/catalog-backend-module-github/CHANGELOG.md @@ -1,5 +1,32 @@ # @backstage/plugin-catalog-backend-module-github +## 0.3.0 + +### Minor Changes + +- 970678adbe2: Implement events support for `GithubMultiOrgEntityProvider` + + **BREAKING:** Passing in a custom `teamTransformer` will now correctly completely override the default transformer behavior + +### Patch Changes + +- 78bb674a713: Fixed bug in queryWithPaging that caused secondary rate limit errors in GitHub with organizations having more than 1000 repositories. This change makes one request per second to avoid concurrency issues. +- bd101cefd37: Updated the `team.edited` event emitted from `GithubOrgEntityProvider` to also include teams description. +- Updated dependencies + - @backstage/plugin-catalog-backend@1.9.1 + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-events-node@0.2.6 + ## 0.3.0-next.2 ### Minor Changes diff --git a/plugins/catalog-backend-module-github/package.json b/plugins/catalog-backend-module-github/package.json index 1f79fea531..029acdf0e0 100644 --- a/plugins/catalog-backend-module-github/package.json +++ b/plugins/catalog-backend-module-github/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-github", "description": "A Backstage catalog backend module that helps integrate towards GitHub", - "version": "0.3.0-next.2", + "version": "0.3.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-gitlab/CHANGELOG.md b/plugins/catalog-backend-module-gitlab/CHANGELOG.md index 9882178a2b..a8c58d386a 100644 --- a/plugins/catalog-backend-module-gitlab/CHANGELOG.md +++ b/plugins/catalog-backend-module-gitlab/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-catalog-backend-module-gitlab +## 0.2.1 + +### Patch Changes + +- b12c41fafc4: Fix a corner case where returned users are null for bots +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + ## 0.2.1-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-gitlab/package.json b/plugins/catalog-backend-module-gitlab/package.json index 22237862aa..223d578da1 100644 --- a/plugins/catalog-backend-module-gitlab/package.json +++ b/plugins/catalog-backend-module-gitlab/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-gitlab", "description": "A Backstage catalog backend module that helps integrate towards GitLab", - "version": "0.2.1-next.1", + "version": "0.2.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md b/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md index 8c7b041d06..fdf0de5b0b 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md +++ b/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-catalog-backend-module-incremental-ingestion +## 0.3.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.9.1 + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-events-node@0.2.6 + - @backstage/plugin-permission-common@0.7.5 + ## 0.3.2-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-incremental-ingestion/package.json b/plugins/catalog-backend-module-incremental-ingestion/package.json index 69bc2dfbd6..b37f2bfb6c 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/package.json +++ b/plugins/catalog-backend-module-incremental-ingestion/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-incremental-ingestion", "description": "An entity provider for streaming large asset sources into the catalog", - "version": "0.3.2-next.2", + "version": "0.3.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-ldap/CHANGELOG.md b/plugins/catalog-backend-module-ldap/CHANGELOG.md index 104e3f1c0f..052f1cc473 100644 --- a/plugins/catalog-backend-module-ldap/CHANGELOG.md +++ b/plugins/catalog-backend-module-ldap/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-catalog-backend-module-ldap +## 0.5.12 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + ## 0.5.12-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-ldap/package.json b/plugins/catalog-backend-module-ldap/package.json index 120131d95a..6943df23fe 100644 --- a/plugins/catalog-backend-module-ldap/package.json +++ b/plugins/catalog-backend-module-ldap/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-ldap", "description": "A Backstage catalog backend module that helps integrate towards LDAP", - "version": "0.5.12-next.1", + "version": "0.5.12", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-msgraph/CHANGELOG.md b/plugins/catalog-backend-module-msgraph/CHANGELOG.md index c0c0888f38..f45e0c3440 100644 --- a/plugins/catalog-backend-module-msgraph/CHANGELOG.md +++ b/plugins/catalog-backend-module-msgraph/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-catalog-backend-module-msgraph +## 0.5.4 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/plugin-catalog-common@1.0.13 + ## 0.5.4-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-msgraph/package.json b/plugins/catalog-backend-module-msgraph/package.json index 026386457a..ae836681b4 100644 --- a/plugins/catalog-backend-module-msgraph/package.json +++ b/plugins/catalog-backend-module-msgraph/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-msgraph", "description": "A Backstage catalog backend module that helps integrate towards Microsoft Graph", - "version": "0.5.4-next.1", + "version": "0.5.4", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-openapi/CHANGELOG.md b/plugins/catalog-backend-module-openapi/CHANGELOG.md index 345032bda7..0598ea46ef 100644 --- a/plugins/catalog-backend-module-openapi/CHANGELOG.md +++ b/plugins/catalog-backend-module-openapi/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-catalog-backend-module-openapi +## 0.1.11 + +### Patch Changes + +- accaceadffa: Fixed bug in `jsonSchemaRefPlaceholderResolver` where relative $ref files were resolved through file system instead of base URL of file +- Updated dependencies + - @backstage/plugin-catalog-backend@1.9.1 + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + ## 0.1.11-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-openapi/package.json b/plugins/catalog-backend-module-openapi/package.json index c9960d15f1..980a8920cd 100644 --- a/plugins/catalog-backend-module-openapi/package.json +++ b/plugins/catalog-backend-module-openapi/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-openapi", "description": "A Backstage catalog backend module that helps with OpenAPI specifications", - "version": "0.1.11-next.2", + "version": "0.1.11", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-puppetdb/CHANGELOG.md b/plugins/catalog-backend-module-puppetdb/CHANGELOG.md index b5f13f39cd..e8750bc1c4 100644 --- a/plugins/catalog-backend-module-puppetdb/CHANGELOG.md +++ b/plugins/catalog-backend-module-puppetdb/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-catalog-backend-module-puppetdb +## 0.1.2 + +### Patch Changes + +- 95b2168d71b: Fixes import paths and updates documentation +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + ## 0.1.2-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-puppetdb/package.json b/plugins/catalog-backend-module-puppetdb/package.json index 3d1734657b..7286f66095 100644 --- a/plugins/catalog-backend-module-puppetdb/package.json +++ b/plugins/catalog-backend-module-puppetdb/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-puppetdb", "description": "A Backstage catalog backend module that helps integrate towards PuppetDB", - "version": "0.1.2-next.2", + "version": "0.1.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend/CHANGELOG.md b/plugins/catalog-backend/CHANGELOG.md index 78021149ff..e8c18be461 100644 --- a/plugins/catalog-backend/CHANGELOG.md +++ b/plugins/catalog-backend/CHANGELOG.md @@ -1,5 +1,34 @@ # @backstage/plugin-catalog-backend +## 1.9.1 + +### Patch Changes + +- ce8d203235b: Ensure that entity cache state is only written to the database when actually changed +- 485a6c5f7b5: Internal refactoring for performance in the service handlers +- 3587a968dcd: Fixed a bug in the `queryEntities` endpoint that was causing filtered entities to be included in cursor requests. +- ce335df9d1c: Improve the query for orphan pruning +- 27956d78671: Adjusted the OpenAPI schema file name according to the new structure +- 51064e6e5ee: Change orphan cleanup task to only log a message if it deleted entities. +- 12a345317ab: Remove unnecessary join in the entity facets endpoint, exclude nulls +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/plugin-scaffolder-common@1.3.0 + - @backstage/plugin-permission-node@0.7.8 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/plugin-search-backend-module-catalog@0.1.1 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-search-common@1.2.3 + ## 1.9.1-next.2 ### Patch Changes diff --git a/plugins/catalog-backend/package.json b/plugins/catalog-backend/package.json index 13f358f1ff..1a2ca55253 100644 --- a/plugins/catalog-backend/package.json +++ b/plugins/catalog-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend", "description": "The Backstage backend plugin that provides the Backstage catalog", - "version": "1.9.1-next.2", + "version": "1.9.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-customized/CHANGELOG.md b/plugins/catalog-customized/CHANGELOG.md index 0f8d9dccb1..00d769e71e 100644 --- a/plugins/catalog-customized/CHANGELOG.md +++ b/plugins/catalog-customized/CHANGELOG.md @@ -1,5 +1,13 @@ # @internal/plugin-catalog-customized +## 0.0.10 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/plugin-catalog@1.11.0 + ## 0.0.10-next.2 ### Patch Changes diff --git a/plugins/catalog-customized/package.json b/plugins/catalog-customized/package.json index f7a6b0b80f..12f9bc584f 100644 --- a/plugins/catalog-customized/package.json +++ b/plugins/catalog-customized/package.json @@ -1,7 +1,7 @@ { "name": "@internal/plugin-catalog-customized", "description": "The internal Backstage Customizable plugin for browsing the Backstage catalog", - "version": "0.0.10-next.2", + "version": "0.0.10", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-graph/CHANGELOG.md b/plugins/catalog-graph/CHANGELOG.md index 00c907899a..277f0a70cf 100644 --- a/plugins/catalog-graph/CHANGELOG.md +++ b/plugins/catalog-graph/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-catalog-graph +## 0.2.30 + +### Patch Changes + +- d446f8fb0a8: Expose all `EntityRelationsGraphProps` to Catalog Graph Page +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + ## 0.2.30-next.2 ### Patch Changes diff --git a/plugins/catalog-graph/package.json b/plugins/catalog-graph/package.json index bd9508783d..fd4d3d0114 100644 --- a/plugins/catalog-graph/package.json +++ b/plugins/catalog-graph/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-graph", - "version": "0.2.30-next.2", + "version": "0.2.30", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-import/CHANGELOG.md b/plugins/catalog-import/CHANGELOG.md index 38ae6fbed8..50dee98951 100644 --- a/plugins/catalog-import/CHANGELOG.md +++ b/plugins/catalog-import/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-catalog-import +## 0.9.8 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/integration@1.4.5 + - @backstage/core-components@0.13.1 + - @backstage/integration-react@1.1.13 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-common@1.0.13 + ## 0.9.8-next.2 ### Patch Changes diff --git a/plugins/catalog-import/package.json b/plugins/catalog-import/package.json index 5fb8bb1b5b..a6cad7a986 100644 --- a/plugins/catalog-import/package.json +++ b/plugins/catalog-import/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-import", "description": "A Backstage plugin the helps you import entities into your catalog", - "version": "0.9.8-next.2", + "version": "0.9.8", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-node/CHANGELOG.md b/plugins/catalog-node/CHANGELOG.md index a1ca2c37c6..5ed8a9aba1 100644 --- a/plugins/catalog-node/CHANGELOG.md +++ b/plugins/catalog-node/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-catalog-node +## 1.3.6 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + ## 1.3.6-next.1 ### Patch Changes diff --git a/plugins/catalog-node/package.json b/plugins/catalog-node/package.json index 95136c2da1..7adf03eed2 100644 --- a/plugins/catalog-node/package.json +++ b/plugins/catalog-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-node", "description": "The plugin-catalog-node module for @backstage/plugin-catalog-backend", - "version": "1.3.6-next.1", + "version": "1.3.6", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-react/CHANGELOG.md b/plugins/catalog-react/CHANGELOG.md index 79ade18d8f..7d96283320 100644 --- a/plugins/catalog-react/CHANGELOG.md +++ b/plugins/catalog-react/CHANGELOG.md @@ -1,5 +1,46 @@ # @backstage/plugin-catalog-react +## 1.6.0 + +### Minor Changes + +- 2258dcae970: Added an entity namespace filter and column on the default catalog page. + + If you have a custom version of the catalog page, you can add this filter in your CatalogPage code: + + ```ts + + + + + + /* if you want namespace picker */ + + + + + + + ``` + + The namespace column can be added using `createNamespaceColumn();`. This is only needed if you customized the columns for CatalogTable. + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/integration@1.4.5 + - @backstage/core-components@0.13.1 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.4 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-permission-react@0.4.12 + ## 1.6.0-next.2 ### Patch Changes diff --git a/plugins/catalog-react/package.json b/plugins/catalog-react/package.json index d5808553cb..569e9d5d8a 100644 --- a/plugins/catalog-react/package.json +++ b/plugins/catalog-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-react", "description": "A frontend library that helps other Backstage plugins interact with the catalog", - "version": "1.6.0-next.2", + "version": "1.6.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog/CHANGELOG.md b/plugins/catalog/CHANGELOG.md index 8300e81422..41fdf9aad7 100644 --- a/plugins/catalog/CHANGELOG.md +++ b/plugins/catalog/CHANGELOG.md @@ -1,5 +1,46 @@ # @backstage/plugin-catalog +## 1.11.0 + +### Minor Changes + +- 2258dcae970: Added an entity namespace filter and column on the default catalog page. + + If you have a custom version of the catalog page, you can add this filter in your CatalogPage code: + + ```ts + + + + + + /* if you want namespace picker */ + + + + + + + ``` + + The namespace column can be added using `createNamespaceColumn();`. This is only needed if you customized the columns for CatalogTable. + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/plugin-search-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/integration-react@1.1.13 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-search-common@1.2.3 + ## 1.11.0-next.2 ### Patch Changes diff --git a/plugins/catalog/package.json b/plugins/catalog/package.json index 2a0cfb4625..21983f762e 100644 --- a/plugins/catalog/package.json +++ b/plugins/catalog/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog", "description": "The Backstage plugin for browsing the Backstage catalog", - "version": "1.11.0-next.2", + "version": "1.11.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/cicd-statistics-module-gitlab/CHANGELOG.md b/plugins/cicd-statistics-module-gitlab/CHANGELOG.md index 93b77f90f8..fed7193859 100644 --- a/plugins/cicd-statistics-module-gitlab/CHANGELOG.md +++ b/plugins/cicd-statistics-module-gitlab/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-cicd-statistics-module-gitlab +## 0.1.14 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-cicd-statistics@0.1.20 + ## 0.1.14-next.2 ### Patch Changes diff --git a/plugins/cicd-statistics-module-gitlab/package.json b/plugins/cicd-statistics-module-gitlab/package.json index 37bf35a907..ac719e1c1b 100644 --- a/plugins/cicd-statistics-module-gitlab/package.json +++ b/plugins/cicd-statistics-module-gitlab/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cicd-statistics-module-gitlab", "description": "CI/CD Statistics plugin module; Gitlab CICD", - "version": "0.1.14-next.2", + "version": "0.1.14", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/cicd-statistics/CHANGELOG.md b/plugins/cicd-statistics/CHANGELOG.md index a321674f8d..b1b539c55e 100644 --- a/plugins/cicd-statistics/CHANGELOG.md +++ b/plugins/cicd-statistics/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-cicd-statistics +## 0.1.20 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + ## 0.1.20-next.2 ### Patch Changes diff --git a/plugins/cicd-statistics/package.json b/plugins/cicd-statistics/package.json index dce541c0b8..1eaebdf236 100644 --- a/plugins/cicd-statistics/package.json +++ b/plugins/cicd-statistics/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cicd-statistics", "description": "A frontend plugin visualizing CI/CD pipeline statistics (build time)", - "version": "0.1.20-next.2", + "version": "0.1.20", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/circleci/CHANGELOG.md b/plugins/circleci/CHANGELOG.md index afa6a83d48..b2947ce517 100644 --- a/plugins/circleci/CHANGELOG.md +++ b/plugins/circleci/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-circleci +## 0.3.18 + +### Patch Changes + +- 451b3cadb3d: Fixes row display for in progress jobs to not display trailing "took" +- 1c4958d905f: Hide empty time field data for queued builds which haven't started yet +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + ## 0.3.18-next.2 ### Patch Changes diff --git a/plugins/circleci/package.json b/plugins/circleci/package.json index 4108700972..87620319b2 100644 --- a/plugins/circleci/package.json +++ b/plugins/circleci/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-circleci", "description": "A Backstage plugin that integrates towards Circle CI", - "version": "0.3.18-next.2", + "version": "0.3.18", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/cloudbuild/CHANGELOG.md b/plugins/cloudbuild/CHANGELOG.md index 048c6b73ca..3eb8b09596 100644 --- a/plugins/cloudbuild/CHANGELOG.md +++ b/plugins/cloudbuild/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-cloudbuild +## 0.3.18 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + ## 0.3.18-next.2 ### Patch Changes diff --git a/plugins/cloudbuild/package.json b/plugins/cloudbuild/package.json index ef57f77fde..231e6c319c 100644 --- a/plugins/cloudbuild/package.json +++ b/plugins/cloudbuild/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cloudbuild", "description": "A Backstage plugin that integrates towards Google Cloud Build", - "version": "0.3.18-next.2", + "version": "0.3.18", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/code-climate/CHANGELOG.md b/plugins/code-climate/CHANGELOG.md index c31c3ca3f3..1b732c2154 100644 --- a/plugins/code-climate/CHANGELOG.md +++ b/plugins/code-climate/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-code-climate +## 0.1.18 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + ## 0.1.18-next.2 ### Patch Changes diff --git a/plugins/code-climate/package.json b/plugins/code-climate/package.json index f650739510..b2da33c3f6 100644 --- a/plugins/code-climate/package.json +++ b/plugins/code-climate/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-code-climate", - "version": "0.1.18-next.2", + "version": "0.1.18", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/code-coverage-backend/CHANGELOG.md b/plugins/code-coverage-backend/CHANGELOG.md index a63405bd75..10acc2a11a 100644 --- a/plugins/code-coverage-backend/CHANGELOG.md +++ b/plugins/code-coverage-backend/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-code-coverage-backend +## 0.2.11 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 0.2.11-next.1 ### Patch Changes diff --git a/plugins/code-coverage-backend/package.json b/plugins/code-coverage-backend/package.json index 549e0a1b2c..4444287b23 100644 --- a/plugins/code-coverage-backend/package.json +++ b/plugins/code-coverage-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-code-coverage-backend", "description": "A Backstage backend plugin that helps you keep track of your code coverage", - "version": "0.2.11-next.1", + "version": "0.2.11", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/code-coverage/CHANGELOG.md b/plugins/code-coverage/CHANGELOG.md index e1ac2d6b77..b514b137a1 100644 --- a/plugins/code-coverage/CHANGELOG.md +++ b/plugins/code-coverage/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-code-coverage +## 0.2.11 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + ## 0.2.11-next.2 ### Patch Changes diff --git a/plugins/code-coverage/package.json b/plugins/code-coverage/package.json index 7e40175240..bb6fb411d5 100644 --- a/plugins/code-coverage/package.json +++ b/plugins/code-coverage/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-code-coverage", "description": "A Backstage plugin that helps you keep track of your code coverage", - "version": "0.2.11-next.2", + "version": "0.2.11", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/codescene/CHANGELOG.md b/plugins/codescene/CHANGELOG.md index 4483bc8351..242d8f6a4a 100644 --- a/plugins/codescene/CHANGELOG.md +++ b/plugins/codescene/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-codescene +## 0.1.13 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + ## 0.1.13-next.1 ### Patch Changes diff --git a/plugins/codescene/package.json b/plugins/codescene/package.json index 05f2d8cde1..13d5662812 100644 --- a/plugins/codescene/package.json +++ b/plugins/codescene/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-codescene", - "version": "0.1.13-next.1", + "version": "0.1.13", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/config-schema/CHANGELOG.md b/plugins/config-schema/CHANGELOG.md index 71c47d650c..059a476aed 100644 --- a/plugins/config-schema/CHANGELOG.md +++ b/plugins/config-schema/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-config-schema +## 0.1.41 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + ## 0.1.41-next.1 ### Patch Changes diff --git a/plugins/config-schema/package.json b/plugins/config-schema/package.json index bf8bfc2d9d..3f1488178e 100644 --- a/plugins/config-schema/package.json +++ b/plugins/config-schema/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-config-schema", "description": "A Backstage plugin that lets you browse the configuration schema of your app", - "version": "0.1.41-next.1", + "version": "0.1.41", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/cost-insights/CHANGELOG.md b/plugins/cost-insights/CHANGELOG.md index b9a289e963..63ac24c646 100644 --- a/plugins/cost-insights/CHANGELOG.md +++ b/plugins/cost-insights/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-cost-insights +## 0.12.7 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-cost-insights-common@0.1.1 + ## 0.12.7-next.2 ### Patch Changes diff --git a/plugins/cost-insights/package.json b/plugins/cost-insights/package.json index 62295bf737..8607bff31e 100644 --- a/plugins/cost-insights/package.json +++ b/plugins/cost-insights/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cost-insights", "description": "A Backstage plugin that helps you keep track of your cloud spend", - "version": "0.12.7-next.2", + "version": "0.12.7", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/devtools-backend/CHANGELOG.md b/plugins/devtools-backend/CHANGELOG.md index 6fefbd1524..45f9f7174d 100644 --- a/plugins/devtools-backend/CHANGELOG.md +++ b/plugins/devtools-backend/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-devtools-backend +## 0.1.0 + +### Minor Changes + +- 347aeca204c: Introduced the DevTools plugin, checkout the plugin's [`README.md`](https://github.com/backstage/backstage/tree/master/plugins/devtools) for more details! + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-devtools-common@0.1.0 + - @backstage/backend-common@0.18.5 + - @backstage/config-loader@1.3.0 + - @backstage/plugin-permission-node@0.7.8 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-permission-common@0.7.5 + ## 0.1.0-next.0 ### Minor Changes diff --git a/plugins/devtools-backend/package.json b/plugins/devtools-backend/package.json index 7235f1293a..77eaf43901 100644 --- a/plugins/devtools-backend/package.json +++ b/plugins/devtools-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-devtools-backend", - "version": "0.1.0-next.0", + "version": "0.1.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/devtools-common/CHANGELOG.md b/plugins/devtools-common/CHANGELOG.md index 79c40a24c1..6a566d0a67 100644 --- a/plugins/devtools-common/CHANGELOG.md +++ b/plugins/devtools-common/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-devtools-common +## 0.1.0 + +### Minor Changes + +- 347aeca204c: Introduced the DevTools plugin, checkout the plugin's [`README.md`](https://github.com/backstage/backstage/tree/master/plugins/devtools) for more details! + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.0.2 + - @backstage/plugin-permission-common@0.7.5 + ## 0.1.0-next.0 ### Minor Changes diff --git a/plugins/devtools-common/package.json b/plugins/devtools-common/package.json index ba48da49ad..0e114e39b9 100644 --- a/plugins/devtools-common/package.json +++ b/plugins/devtools-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-devtools-common", "description": "Common functionalities for the devtools plugin", - "version": "0.1.0-next.0", + "version": "0.1.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/devtools/CHANGELOG.md b/plugins/devtools/CHANGELOG.md index 0fe41704c6..2e0e2a2de0 100644 --- a/plugins/devtools/CHANGELOG.md +++ b/plugins/devtools/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-devtools +## 0.1.0 + +### Minor Changes + +- 347aeca204c: Introduced the DevTools plugin, checkout the plugin's [`README.md`](https://github.com/backstage/backstage/tree/master/plugins/devtools) for more details! + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-devtools-common@0.1.0 + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-permission-react@0.4.12 + ## 0.1.0-next.0 ### Minor Changes diff --git a/plugins/devtools/package.json b/plugins/devtools/package.json index 5997f79845..d5bd0c567a 100644 --- a/plugins/devtools/package.json +++ b/plugins/devtools/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-devtools", - "version": "0.1.0-next.0", + "version": "0.1.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/dynatrace/CHANGELOG.md b/plugins/dynatrace/CHANGELOG.md index bfb0eac993..fe0d954772 100644 --- a/plugins/dynatrace/CHANGELOG.md +++ b/plugins/dynatrace/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-dynatrace +## 5.0.0 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + ## 5.0.0-next.2 ### Patch Changes diff --git a/plugins/dynatrace/package.json b/plugins/dynatrace/package.json index ab241ec0ad..1546562169 100644 --- a/plugins/dynatrace/package.json +++ b/plugins/dynatrace/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-dynatrace", - "version": "5.0.0-next.2", + "version": "5.0.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/entity-feedback-backend/CHANGELOG.md b/plugins/entity-feedback-backend/CHANGELOG.md index 2ee2ffb799..82fd67a96c 100644 --- a/plugins/entity-feedback-backend/CHANGELOG.md +++ b/plugins/entity-feedback-backend/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-entity-feedback-backend +## 0.1.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/plugin-entity-feedback-common@0.1.1 + ## 0.1.3-next.1 ### Patch Changes diff --git a/plugins/entity-feedback-backend/package.json b/plugins/entity-feedback-backend/package.json index bfda97de8f..ec5a379830 100644 --- a/plugins/entity-feedback-backend/package.json +++ b/plugins/entity-feedback-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-entity-feedback-backend", - "version": "0.1.3-next.1", + "version": "0.1.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/entity-feedback/CHANGELOG.md b/plugins/entity-feedback/CHANGELOG.md index d32012518e..312f6c1fd4 100644 --- a/plugins/entity-feedback/CHANGELOG.md +++ b/plugins/entity-feedback/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-entity-feedback +## 0.2.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-entity-feedback-common@0.1.1 + ## 0.2.1-next.2 ### Patch Changes diff --git a/plugins/entity-feedback/package.json b/plugins/entity-feedback/package.json index 0b90caea9d..90a9f6e4ab 100644 --- a/plugins/entity-feedback/package.json +++ b/plugins/entity-feedback/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-entity-feedback", - "version": "0.2.1-next.2", + "version": "0.2.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/entity-validation/CHANGELOG.md b/plugins/entity-validation/CHANGELOG.md index 6d423d04bf..648e6fc107 100644 --- a/plugins/entity-validation/CHANGELOG.md +++ b/plugins/entity-validation/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-entity-validation +## 0.1.3 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-common@1.0.13 + ## 0.1.3-next.2 ### Patch Changes diff --git a/plugins/entity-validation/package.json b/plugins/entity-validation/package.json index 950687a884..0d375ccca9 100644 --- a/plugins/entity-validation/package.json +++ b/plugins/entity-validation/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-entity-validation", - "version": "0.1.3-next.2", + "version": "0.1.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-aws-sqs/CHANGELOG.md b/plugins/events-backend-module-aws-sqs/CHANGELOG.md index 241463ac5c..4b55725420 100644 --- a/plugins/events-backend-module-aws-sqs/CHANGELOG.md +++ b/plugins/events-backend-module-aws-sqs/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-events-backend-module-aws-sqs +## 0.2.0 + +### Minor Changes + +- 2c5661f3899: Allow endpoint configuration for sqs, enabling use of localstack for testing. + +### Patch Changes + +- 3659c71c5d9: Standardize `@aws-sdk` v3 versions +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-events-node@0.2.6 + ## 0.2.0-next.2 ### Minor Changes diff --git a/plugins/events-backend-module-aws-sqs/package.json b/plugins/events-backend-module-aws-sqs/package.json index f9b3fd071b..e89ea4413b 100644 --- a/plugins/events-backend-module-aws-sqs/package.json +++ b/plugins/events-backend-module-aws-sqs/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-aws-sqs", - "version": "0.2.0-next.2", + "version": "0.2.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-azure/CHANGELOG.md b/plugins/events-backend-module-azure/CHANGELOG.md index b89363b7c3..0e096953a4 100644 --- a/plugins/events-backend-module-azure/CHANGELOG.md +++ b/plugins/events-backend-module-azure/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-events-backend-module-azure +## 0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2 + - @backstage/plugin-events-node@0.2.6 + ## 0.1.7-next.1 ### Patch Changes diff --git a/plugins/events-backend-module-azure/package.json b/plugins/events-backend-module-azure/package.json index 3667e73ebd..099da38f40 100644 --- a/plugins/events-backend-module-azure/package.json +++ b/plugins/events-backend-module-azure/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-azure", - "version": "0.1.7-next.1", + "version": "0.1.7", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md b/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md index ea70f7686e..dc861fc027 100644 --- a/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md +++ b/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-events-backend-module-bitbucket-cloud +## 0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2 + - @backstage/plugin-events-node@0.2.6 + ## 0.1.7-next.1 ### Patch Changes diff --git a/plugins/events-backend-module-bitbucket-cloud/package.json b/plugins/events-backend-module-bitbucket-cloud/package.json index ea04a4faaa..b30f50265b 100644 --- a/plugins/events-backend-module-bitbucket-cloud/package.json +++ b/plugins/events-backend-module-bitbucket-cloud/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-bitbucket-cloud", - "version": "0.1.7-next.1", + "version": "0.1.7", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-gerrit/CHANGELOG.md b/plugins/events-backend-module-gerrit/CHANGELOG.md index 411d9ffff8..e0e19a0899 100644 --- a/plugins/events-backend-module-gerrit/CHANGELOG.md +++ b/plugins/events-backend-module-gerrit/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-events-backend-module-gerrit +## 0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2 + - @backstage/plugin-events-node@0.2.6 + ## 0.1.7-next.1 ### Patch Changes diff --git a/plugins/events-backend-module-gerrit/package.json b/plugins/events-backend-module-gerrit/package.json index 64fe31d31f..e18616d98d 100644 --- a/plugins/events-backend-module-gerrit/package.json +++ b/plugins/events-backend-module-gerrit/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-gerrit", - "version": "0.1.7-next.1", + "version": "0.1.7", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-github/CHANGELOG.md b/plugins/events-backend-module-github/CHANGELOG.md index 0e2b2ae8de..7f88bb5d13 100644 --- a/plugins/events-backend-module-github/CHANGELOG.md +++ b/plugins/events-backend-module-github/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-events-backend-module-github +## 0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.6 + ## 0.1.7-next.1 ### Patch Changes diff --git a/plugins/events-backend-module-github/package.json b/plugins/events-backend-module-github/package.json index 74b74469ca..0117792b8d 100644 --- a/plugins/events-backend-module-github/package.json +++ b/plugins/events-backend-module-github/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-github", - "version": "0.1.7-next.1", + "version": "0.1.7", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-gitlab/CHANGELOG.md b/plugins/events-backend-module-gitlab/CHANGELOG.md index d8d48674c8..f6827b90f4 100644 --- a/plugins/events-backend-module-gitlab/CHANGELOG.md +++ b/plugins/events-backend-module-gitlab/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-events-backend-module-gitlab +## 0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.6 + ## 0.1.7-next.1 ### Patch Changes diff --git a/plugins/events-backend-module-gitlab/package.json b/plugins/events-backend-module-gitlab/package.json index 07102c0b6f..fc33203460 100644 --- a/plugins/events-backend-module-gitlab/package.json +++ b/plugins/events-backend-module-gitlab/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-gitlab", - "version": "0.1.7-next.1", + "version": "0.1.7", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-test-utils/CHANGELOG.md b/plugins/events-backend-test-utils/CHANGELOG.md index 3d665a44ce..14d73356e0 100644 --- a/plugins/events-backend-test-utils/CHANGELOG.md +++ b/plugins/events-backend-test-utils/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-events-backend-test-utils +## 0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.2.6 + ## 0.1.7-next.1 ### Patch Changes diff --git a/plugins/events-backend-test-utils/package.json b/plugins/events-backend-test-utils/package.json index 3d46ea9210..d3340d5baf 100644 --- a/plugins/events-backend-test-utils/package.json +++ b/plugins/events-backend-test-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-events-backend-test-utils", "description": "The plugin-events-backend-test-utils for @backstage/plugin-events-node", - "version": "0.1.7-next.1", + "version": "0.1.7", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend/CHANGELOG.md b/plugins/events-backend/CHANGELOG.md index 929a003cf9..25b0561c74 100644 --- a/plugins/events-backend/CHANGELOG.md +++ b/plugins/events-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-events-backend +## 0.2.6 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.6 + ## 0.2.6-next.1 ### Patch Changes diff --git a/plugins/events-backend/package.json b/plugins/events-backend/package.json index fdaee7d4a8..8d75caf02b 100644 --- a/plugins/events-backend/package.json +++ b/plugins/events-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend", - "version": "0.2.6-next.1", + "version": "0.2.6", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-node/CHANGELOG.md b/plugins/events-node/CHANGELOG.md index c44e1e3999..a8ff8ed2e5 100644 --- a/plugins/events-node/CHANGELOG.md +++ b/plugins/events-node/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-events-node +## 0.2.6 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2 + ## 0.2.6-next.1 ### Patch Changes diff --git a/plugins/events-node/package.json b/plugins/events-node/package.json index 7a368206bf..497d668cde 100644 --- a/plugins/events-node/package.json +++ b/plugins/events-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-events-node", "description": "The plugin-events-node module for @backstage/plugin-events-backend", - "version": "0.2.6-next.1", + "version": "0.2.6", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/example-todo-list-backend/CHANGELOG.md b/plugins/example-todo-list-backend/CHANGELOG.md index 3fb578f05a..b71a26219e 100644 --- a/plugins/example-todo-list-backend/CHANGELOG.md +++ b/plugins/example-todo-list-backend/CHANGELOG.md @@ -1,5 +1,16 @@ # @internal/plugin-todo-list-backend +## 1.0.13 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 1.0.13-next.1 ### Patch Changes diff --git a/plugins/example-todo-list-backend/package.json b/plugins/example-todo-list-backend/package.json index 0b635586b7..bec7f06a4c 100644 --- a/plugins/example-todo-list-backend/package.json +++ b/plugins/example-todo-list-backend/package.json @@ -1,6 +1,6 @@ { "name": "@internal/plugin-todo-list-backend", - "version": "1.0.13-next.1", + "version": "1.0.13", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/example-todo-list/CHANGELOG.md b/plugins/example-todo-list/CHANGELOG.md index c12164fa62..fad5737566 100644 --- a/plugins/example-todo-list/CHANGELOG.md +++ b/plugins/example-todo-list/CHANGELOG.md @@ -1,5 +1,14 @@ # @internal/plugin-todo-list +## 1.0.13 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + ## 1.0.13-next.1 ### Patch Changes diff --git a/plugins/example-todo-list/package.json b/plugins/example-todo-list/package.json index 4ee26dea2c..5dff8b4a15 100644 --- a/plugins/example-todo-list/package.json +++ b/plugins/example-todo-list/package.json @@ -1,6 +1,6 @@ { "name": "@internal/plugin-todo-list", - "version": "1.0.13-next.1", + "version": "1.0.13", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/explore-backend/CHANGELOG.md b/plugins/explore-backend/CHANGELOG.md index d178b091b1..a1763f7a0c 100644 --- a/plugins/explore-backend/CHANGELOG.md +++ b/plugins/explore-backend/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-explore-backend +## 0.0.7 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-search-backend-module-explore@0.1.1 + - @backstage/config@1.0.7 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-search-common@1.2.3 + ## 0.0.7-next.1 ### Patch Changes diff --git a/plugins/explore-backend/package.json b/plugins/explore-backend/package.json index 7b21e885c1..538468a118 100644 --- a/plugins/explore-backend/package.json +++ b/plugins/explore-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-explore-backend", - "version": "0.0.7-next.1", + "version": "0.0.7", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/explore/CHANGELOG.md b/plugins/explore/CHANGELOG.md index 36d04b4231..fbfe54f16b 100644 --- a/plugins/explore/CHANGELOG.md +++ b/plugins/explore/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-explore +## 0.4.3 + +### Patch Changes + +- 1996920782b: Make sure that the first support button row does not break across lines +- 4851581deb6: Display the title of the entity on the explore card if present, otherwise stick to the name +- a6025e25d99: Updated the example code in the "Customization" section of the README to make the imports match the components used. +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/plugin-search-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-explore-react@0.0.28 + - @backstage/plugin-search-common@1.2.3 + ## 0.4.3-next.2 ### Patch Changes diff --git a/plugins/explore/package.json b/plugins/explore/package.json index 21c8fcc58b..b0c5bf3fd9 100644 --- a/plugins/explore/package.json +++ b/plugins/explore/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-explore", "description": "A Backstage plugin for building an exploration page of your software ecosystem", - "version": "0.4.3-next.2", + "version": "0.4.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/firehydrant/CHANGELOG.md b/plugins/firehydrant/CHANGELOG.md index 9822bb684e..4353f8e6ba 100644 --- a/plugins/firehydrant/CHANGELOG.md +++ b/plugins/firehydrant/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-firehydrant +## 0.2.2 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + ## 0.2.2-next.2 ### Patch Changes diff --git a/plugins/firehydrant/package.json b/plugins/firehydrant/package.json index 260b3ad47f..f2eda9092c 100644 --- a/plugins/firehydrant/package.json +++ b/plugins/firehydrant/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-firehydrant", "description": "A Backstage plugin that integrates towards FireHydrant", - "version": "0.2.2-next.2", + "version": "0.2.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/fossa/CHANGELOG.md b/plugins/fossa/CHANGELOG.md index ea411c0558..2ca2c69658 100644 --- a/plugins/fossa/CHANGELOG.md +++ b/plugins/fossa/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-fossa +## 0.2.50 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + ## 0.2.50-next.2 ### Patch Changes diff --git a/plugins/fossa/package.json b/plugins/fossa/package.json index a1b9e48f3b..caaa497130 100644 --- a/plugins/fossa/package.json +++ b/plugins/fossa/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-fossa", "description": "A Backstage plugin that integrates towards FOSSA", - "version": "0.2.50-next.2", + "version": "0.2.50", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/gcalendar/CHANGELOG.md b/plugins/gcalendar/CHANGELOG.md index b211ebd95a..cb1f1e451b 100644 --- a/plugins/gcalendar/CHANGELOG.md +++ b/plugins/gcalendar/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-gcalendar +## 0.3.14 + +### Patch Changes + +- f493ccb9589: Pass user info email scope on auth refresh to resolve invalid credentials error +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + ## 0.3.14-next.1 ### Patch Changes diff --git a/plugins/gcalendar/package.json b/plugins/gcalendar/package.json index 10375e2e3f..eb19dd4e6f 100644 --- a/plugins/gcalendar/package.json +++ b/plugins/gcalendar/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-gcalendar", - "version": "0.3.14-next.1", + "version": "0.3.14", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/gcp-projects/CHANGELOG.md b/plugins/gcp-projects/CHANGELOG.md index 8254e86dbc..54265c8c59 100644 --- a/plugins/gcp-projects/CHANGELOG.md +++ b/plugins/gcp-projects/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-gcp-projects +## 0.3.37 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + ## 0.3.37-next.1 ### Patch Changes diff --git a/plugins/gcp-projects/package.json b/plugins/gcp-projects/package.json index 9857a6ccf1..6d320cad6d 100644 --- a/plugins/gcp-projects/package.json +++ b/plugins/gcp-projects/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-gcp-projects", "description": "A Backstage plugin that helps you manage projects in GCP", - "version": "0.3.37-next.1", + "version": "0.3.37", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/git-release-manager/CHANGELOG.md b/plugins/git-release-manager/CHANGELOG.md index 7899cff4fe..80f09319d0 100644 --- a/plugins/git-release-manager/CHANGELOG.md +++ b/plugins/git-release-manager/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-git-release-manager +## 0.3.31 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/integration@1.4.5 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + ## 0.3.31-next.2 ### Patch Changes diff --git a/plugins/git-release-manager/package.json b/plugins/git-release-manager/package.json index a73c35aead..76d18dc224 100644 --- a/plugins/git-release-manager/package.json +++ b/plugins/git-release-manager/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-git-release-manager", "description": "A Backstage plugin that helps you manage releases in git", - "version": "0.3.31-next.2", + "version": "0.3.31", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/github-actions/CHANGELOG.md b/plugins/github-actions/CHANGELOG.md index 8b64c47ac8..199051dd04 100644 --- a/plugins/github-actions/CHANGELOG.md +++ b/plugins/github-actions/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-github-actions +## 0.5.18 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/integration@1.4.5 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + ## 0.5.18-next.2 ### Patch Changes diff --git a/plugins/github-actions/package.json b/plugins/github-actions/package.json index a2c25741be..98a558cd0d 100644 --- a/plugins/github-actions/package.json +++ b/plugins/github-actions/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-github-actions", "description": "A Backstage plugin that integrates towards GitHub Actions", - "version": "0.5.18-next.2", + "version": "0.5.18", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/github-deployments/CHANGELOG.md b/plugins/github-deployments/CHANGELOG.md index ba1d67aece..0a699bdc57 100644 --- a/plugins/github-deployments/CHANGELOG.md +++ b/plugins/github-deployments/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-github-deployments +## 0.1.49 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/integration@1.4.5 + - @backstage/core-components@0.13.1 + - @backstage/integration-react@1.1.13 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + ## 0.1.49-next.2 ### Patch Changes diff --git a/plugins/github-deployments/package.json b/plugins/github-deployments/package.json index c9df936591..08c7e1aa9d 100644 --- a/plugins/github-deployments/package.json +++ b/plugins/github-deployments/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-github-deployments", "description": "A Backstage plugin that integrates towards GitHub Deployments", - "version": "0.1.49-next.2", + "version": "0.1.49", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/github-issues/CHANGELOG.md b/plugins/github-issues/CHANGELOG.md index ee2e47570d..6f83ae81cf 100644 --- a/plugins/github-issues/CHANGELOG.md +++ b/plugins/github-issues/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-github-issues +## 0.2.7 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/integration@1.4.5 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + ## 0.2.7-next.2 ### Patch Changes diff --git a/plugins/github-issues/package.json b/plugins/github-issues/package.json index 8a12aeb2de..c6685eff13 100644 --- a/plugins/github-issues/package.json +++ b/plugins/github-issues/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-github-issues", - "version": "0.2.7-next.2", + "version": "0.2.7", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/github-pull-requests-board/CHANGELOG.md b/plugins/github-pull-requests-board/CHANGELOG.md index 53bcb9b570..704dc495c1 100644 --- a/plugins/github-pull-requests-board/CHANGELOG.md +++ b/plugins/github-pull-requests-board/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-github-pull-requests-board +## 0.1.12 + +### Patch Changes + +- cf125c36569: The `EntityTeamPullRequestsContent` and `EntityTeamPullRequestsCard` support the ability to view the labels/tags added to each PR +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/integration@1.4.5 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + ## 0.1.12-next.2 ### Patch Changes diff --git a/plugins/github-pull-requests-board/package.json b/plugins/github-pull-requests-board/package.json index 824d265abe..da3c929b43 100644 --- a/plugins/github-pull-requests-board/package.json +++ b/plugins/github-pull-requests-board/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-github-pull-requests-board", "description": "A Backstage plugin that allows you to see all open Pull Requests for all the repositories owned by your team", - "version": "0.1.12-next.2", + "version": "0.1.12", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/gitops-profiles/CHANGELOG.md b/plugins/gitops-profiles/CHANGELOG.md index c5eba8def3..4aed3f9ab3 100644 --- a/plugins/gitops-profiles/CHANGELOG.md +++ b/plugins/gitops-profiles/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-gitops-profiles +## 0.3.36 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + ## 0.3.36-next.1 ### Patch Changes diff --git a/plugins/gitops-profiles/package.json b/plugins/gitops-profiles/package.json index e721682976..e374b49335 100644 --- a/plugins/gitops-profiles/package.json +++ b/plugins/gitops-profiles/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-gitops-profiles", "description": "A Backstage plugin that helps you manage GitOps profiles", - "version": "0.3.36-next.1", + "version": "0.3.36", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/gocd/CHANGELOG.md b/plugins/gocd/CHANGELOG.md index 9eb9964c96..0014eebd8c 100644 --- a/plugins/gocd/CHANGELOG.md +++ b/plugins/gocd/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-gocd +## 0.1.24 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + ## 0.1.24-next.2 ### Patch Changes diff --git a/plugins/gocd/package.json b/plugins/gocd/package.json index c8fca38e23..11ee841aa2 100644 --- a/plugins/gocd/package.json +++ b/plugins/gocd/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-gocd", "description": "A Backstage plugin that integrates towards GoCD", - "version": "0.1.24-next.2", + "version": "0.1.24", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/graphiql/CHANGELOG.md b/plugins/graphiql/CHANGELOG.md index 3d49c1b29f..5f395bda29 100644 --- a/plugins/graphiql/CHANGELOG.md +++ b/plugins/graphiql/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-graphiql +## 0.2.50 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + ## 0.2.50-next.1 ### Patch Changes diff --git a/plugins/graphiql/package.json b/plugins/graphiql/package.json index 219551e6e7..d5dae8c2ec 100644 --- a/plugins/graphiql/package.json +++ b/plugins/graphiql/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-graphiql", "description": "Backstage plugin for browsing GraphQL APIs", - "version": "0.2.50-next.1", + "version": "0.2.50", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/plugins/graphql-backend/CHANGELOG.md b/plugins/graphql-backend/CHANGELOG.md index 898e185d5d..14f2b75eac 100644 --- a/plugins/graphql-backend/CHANGELOG.md +++ b/plugins/graphql-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-graphql-backend +## 0.1.35 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/config@1.0.7 + - @backstage/plugin-catalog-graphql@0.3.20 + ## 0.1.35-next.1 ### Patch Changes diff --git a/plugins/graphql-backend/package.json b/plugins/graphql-backend/package.json index 388b587040..cc8c3e3059 100644 --- a/plugins/graphql-backend/package.json +++ b/plugins/graphql-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-graphql-backend", "description": "An experimental Backstage backend plugin for GraphQL", - "version": "0.1.35-next.1", + "version": "0.1.35", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/graphql-voyager/CHANGELOG.md b/plugins/graphql-voyager/CHANGELOG.md index c47af7b006..394b99f5c7 100644 --- a/plugins/graphql-voyager/CHANGELOG.md +++ b/plugins/graphql-voyager/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-graphql-voyager +## 0.1.3 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + ## 0.1.3-next.1 ### Patch Changes diff --git a/plugins/graphql-voyager/package.json b/plugins/graphql-voyager/package.json index c459e4fbf8..683b664b33 100644 --- a/plugins/graphql-voyager/package.json +++ b/plugins/graphql-voyager/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-graphql-voyager", "description": "Backstage plugin for GraphQL Voyager", - "version": "0.1.3-next.1", + "version": "0.1.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/home/CHANGELOG.md b/plugins/home/CHANGELOG.md index 3996c77103..b626f5c5e6 100644 --- a/plugins/home/CHANGELOG.md +++ b/plugins/home/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-home +## 0.5.2 + +### Patch Changes + +- acca8966465: Remove object-hash dependency +- 957cd9b8958: Use the semantic time tag for rendering world clocks on homepage headers. +- 0e19e7b0f3a: Bump to using the later v5 versions of `@rjsf/*` +- 5272cfabc3b: Add missing @rjsf/core dependency +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + ## 0.5.2-next.2 ### Patch Changes diff --git a/plugins/home/package.json b/plugins/home/package.json index 12e55d80cd..ff714b16ca 100644 --- a/plugins/home/package.json +++ b/plugins/home/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-home", "description": "A Backstage plugin that helps you build a home page", - "version": "0.5.2-next.2", + "version": "0.5.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/ilert/CHANGELOG.md b/plugins/ilert/CHANGELOG.md index a1fb6e375d..0b1c5b5696 100644 --- a/plugins/ilert/CHANGELOG.md +++ b/plugins/ilert/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-ilert +## 0.2.7 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + ## 0.2.7-next.2 ### Patch Changes diff --git a/plugins/ilert/package.json b/plugins/ilert/package.json index 0e08159481..396d5f6860 100644 --- a/plugins/ilert/package.json +++ b/plugins/ilert/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-ilert", "description": "A Backstage plugin that integrates towards iLert", - "version": "0.2.7-next.2", + "version": "0.2.7", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/jenkins-backend/CHANGELOG.md b/plugins/jenkins-backend/CHANGELOG.md index 8e4463f46b..6bb9cba867 100644 --- a/plugins/jenkins-backend/CHANGELOG.md +++ b/plugins/jenkins-backend/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-jenkins-backend +## 0.2.0 + +### Minor Changes + +- cf95c5137c9: Updated rebuild to use Jenkins API replay build, which works for Jenkins jobs that have required parameters. Jenkins SDK could not be used for this request because it does not have support for replay. + + Added link to view build in Jenkins CI/CD table action column. + +### Patch Changes + +- 670a2dd6f4e: Fix handling of slashes in branch names +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-jenkins-common@0.1.15 + - @backstage/plugin-permission-common@0.7.5 + ## 0.1.35-next.1 ### Patch Changes diff --git a/plugins/jenkins-backend/package.json b/plugins/jenkins-backend/package.json index 07624593c3..f45908c04e 100644 --- a/plugins/jenkins-backend/package.json +++ b/plugins/jenkins-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-jenkins-backend", "description": "A Backstage backend plugin that integrates towards Jenkins", - "version": "0.1.35-next.1", + "version": "0.2.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/jenkins/CHANGELOG.md b/plugins/jenkins/CHANGELOG.md index 9d617e1d39..1b289faef2 100644 --- a/plugins/jenkins/CHANGELOG.md +++ b/plugins/jenkins/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-jenkins +## 0.8.0 + +### Minor Changes + +- cf95c5137c9: Updated rebuild to use Jenkins API replay build, which works for Jenkins jobs that have required parameters. Jenkins SDK could not be used for this request because it does not have support for replay. + + Added link to view build in Jenkins CI/CD table action column. + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-jenkins-common@0.1.15 + ## 0.7.17-next.2 ### Patch Changes diff --git a/plugins/jenkins/package.json b/plugins/jenkins/package.json index 6d8d50d26b..1f980215c2 100644 --- a/plugins/jenkins/package.json +++ b/plugins/jenkins/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-jenkins", "description": "A Backstage plugin that integrates towards Jenkins", - "version": "0.7.17-next.2", + "version": "0.8.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kafka-backend/CHANGELOG.md b/plugins/kafka-backend/CHANGELOG.md index 2b788a1bea..3620351d77 100644 --- a/plugins/kafka-backend/CHANGELOG.md +++ b/plugins/kafka-backend/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-kafka-backend +## 0.2.38 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 0.2.38-next.1 ### Patch Changes diff --git a/plugins/kafka-backend/package.json b/plugins/kafka-backend/package.json index 7eb51bfe72..584dcfe8a2 100644 --- a/plugins/kafka-backend/package.json +++ b/plugins/kafka-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kafka-backend", "description": "A Backstage backend plugin that integrates towards Kafka", - "version": "0.2.38-next.1", + "version": "0.2.38", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kafka/CHANGELOG.md b/plugins/kafka/CHANGELOG.md index 56e8a42053..fd41b779a6 100644 --- a/plugins/kafka/CHANGELOG.md +++ b/plugins/kafka/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-kafka +## 0.3.18 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + ## 0.3.18-next.2 ### Patch Changes diff --git a/plugins/kafka/package.json b/plugins/kafka/package.json index 4459b75b18..0baee01c27 100644 --- a/plugins/kafka/package.json +++ b/plugins/kafka/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kafka", "description": "A Backstage plugin that integrates towards Kafka", - "version": "0.3.18-next.2", + "version": "0.3.18", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kubernetes-backend/CHANGELOG.md b/plugins/kubernetes-backend/CHANGELOG.md index d7ac1585f8..3ede951ab9 100644 --- a/plugins/kubernetes-backend/CHANGELOG.md +++ b/plugins/kubernetes-backend/CHANGELOG.md @@ -1,5 +1,38 @@ # @backstage/plugin-kubernetes-backend +## 0.11.0 + +### Minor Changes + +- f4114f02d49: Allow fetching pod metrics limited by a `labelSelector`. + + This is used by the Kubernetes tab on a components' page and leads to much smaller responses being received from Kubernetes, especially with larger Kubernetes clusters. + +- 890988341e9: Update `aws-sdk` client from v2 to v3. + + **BREAKING**: The `AwsIamKubernetesAuthTranslator` class no longer exposes the following methods `awsGetCredentials`, `getBearerToken`, `getCredentials` and `validCredentials`. There is no replacement for these methods. + +### Patch Changes + +- 05f1d74539d: Kubernetes clusters now support `authProvider: aks`. When configured this way, + the `retrieveObjectsByServiceId` action will use the `auth.aks` value in the + request body as a bearer token to authenticate with Kubernetes. +- 3659c71c5d9: Standardize `@aws-sdk` v3 versions +- a341129b754: Fixed a bug in the Kubernetes proxy endpoint where requests to clusters configured with client-side auth providers would always fail with a 500 status. +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration-aws-node@0.1.3 + - @backstage/plugin-permission-node@0.7.8 + - @backstage/plugin-kubernetes-common@0.6.3 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-permission-common@0.7.5 + ## 0.11.0-next.2 ### Patch Changes diff --git a/plugins/kubernetes-backend/package.json b/plugins/kubernetes-backend/package.json index a45141b47d..7369e54041 100644 --- a/plugins/kubernetes-backend/package.json +++ b/plugins/kubernetes-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kubernetes-backend", "description": "A Backstage backend plugin that integrates towards Kubernetes", - "version": "0.11.0-next.2", + "version": "0.11.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kubernetes-common/CHANGELOG.md b/plugins/kubernetes-common/CHANGELOG.md index 9c8849c668..dd96cecbcf 100644 --- a/plugins/kubernetes-common/CHANGELOG.md +++ b/plugins/kubernetes-common/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-kubernetes-common +## 0.6.3 + +### Patch Changes + +- 05f1d74539d: AKS access tokens can now be sent over the wire to the Kubernetes backend. +- Updated dependencies + - @backstage/catalog-model@1.3.0 + - @backstage/plugin-permission-common@0.7.5 + ## 0.6.3-next.0 ### Patch Changes diff --git a/plugins/kubernetes-common/package.json b/plugins/kubernetes-common/package.json index 80911bac00..b3dff229d4 100644 --- a/plugins/kubernetes-common/package.json +++ b/plugins/kubernetes-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kubernetes-common", "description": "Common functionalities for kubernetes, to be shared between kubernetes and kubernetes-backend plugin", - "version": "0.6.3-next.0", + "version": "0.6.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kubernetes/CHANGELOG.md b/plugins/kubernetes/CHANGELOG.md index 0842800552..0f324ef8f0 100644 --- a/plugins/kubernetes/CHANGELOG.md +++ b/plugins/kubernetes/CHANGELOG.md @@ -1,5 +1,55 @@ # @backstage/plugin-kubernetes +## 0.9.0 + +### Minor Changes + +- 280ec10c18e: Added Pod logs components for Kubernetes plugin + + **BREAKING**: `kubernetesProxyApi` for custom plugins built with components from the Kubernetes plugin apis, `kubernetesProxyApi` should be added to the plugin's API list. + + ``` + ... + export const kubernetesPlugin = createPlugin({ + id: 'kubernetes', + apis: [ + ... + createApiFactory({ + api: kubernetesProxyApiRef, + deps: { + kubernetesApi: kubernetesApiRef, + }, + factory: ({ kubernetesApi }) => + new KubernetesProxyClient({ + kubernetesApi, + }), + }), + ``` + + **BREAKING**: `KubernetesDrawer` is now called `KubernetesStructuredMetadataTableDrawer` so that we can do more than just show `StructuredMetadataTable` + + `import { KubernetesDrawer } from "@backstage/plugin-kubernetes"` + + should now be: + + `import { KubernetesStructuredMetadataTableDrawer } from "@backstage/plugin-kubernetes"` + +### Patch Changes + +- c7bad1005ba: The Kubernetes plugin now requests AKS access tokens from Azure when retrieving + objects from clusters configured with `authProvider: aks` and sets `auth.aks` in + its request bodies appropriately. +- a160e02c3d7: Omit managed fields in the Kubernetes resource YAML display. +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/plugin-kubernetes-common@0.6.3 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + ## 0.9.0-next.2 ### Patch Changes diff --git a/plugins/kubernetes/package.json b/plugins/kubernetes/package.json index a581c1a82b..e6a0b518a1 100644 --- a/plugins/kubernetes/package.json +++ b/plugins/kubernetes/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kubernetes", "description": "A Backstage plugin that integrates towards Kubernetes", - "version": "0.9.0-next.2", + "version": "0.9.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/lighthouse-backend/CHANGELOG.md b/plugins/lighthouse-backend/CHANGELOG.md index 81da2807af..5b0d9d8ecc 100644 --- a/plugins/lighthouse-backend/CHANGELOG.md +++ b/plugins/lighthouse-backend/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-lighthouse-backend +## 0.2.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-lighthouse-common@0.1.1 + ## 0.2.1-next.1 ### Patch Changes diff --git a/plugins/lighthouse-backend/package.json b/plugins/lighthouse-backend/package.json index 351ee3fb7e..eb48a5673d 100644 --- a/plugins/lighthouse-backend/package.json +++ b/plugins/lighthouse-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-lighthouse-backend", "description": "Backend functionalities for lighthouse", - "version": "0.2.1-next.1", + "version": "0.2.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/lighthouse/CHANGELOG.md b/plugins/lighthouse/CHANGELOG.md index a90222b49a..b8d70898fd 100644 --- a/plugins/lighthouse/CHANGELOG.md +++ b/plugins/lighthouse/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-lighthouse +## 0.4.3 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-lighthouse-common@0.1.1 + ## 0.4.3-next.2 ### Patch Changes diff --git a/plugins/lighthouse/package.json b/plugins/lighthouse/package.json index 7e66e6fdc6..377614ca97 100644 --- a/plugins/lighthouse/package.json +++ b/plugins/lighthouse/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-lighthouse", "description": "A Backstage plugin that integrates towards Lighthouse", - "version": "0.4.3-next.2", + "version": "0.4.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/linguist-backend/CHANGELOG.md b/plugins/linguist-backend/CHANGELOG.md index 5096043450..a0ab8c5990 100644 --- a/plugins/linguist-backend/CHANGELOG.md +++ b/plugins/linguist-backend/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-linguist-backend +## 0.2.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-linguist-common@0.1.0 + ## 0.2.2-next.1 ### Patch Changes diff --git a/plugins/linguist-backend/package.json b/plugins/linguist-backend/package.json index f3feacb740..5907f11710 100644 --- a/plugins/linguist-backend/package.json +++ b/plugins/linguist-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-linguist-backend", - "version": "0.2.2-next.1", + "version": "0.2.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/linguist/CHANGELOG.md b/plugins/linguist/CHANGELOG.md index 5c12d0df14..0d927fed5b 100644 --- a/plugins/linguist/CHANGELOG.md +++ b/plugins/linguist/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-linguist +## 0.1.3 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-linguist-common@0.1.0 + ## 0.1.3-next.2 ### Patch Changes diff --git a/plugins/linguist/package.json b/plugins/linguist/package.json index 885462b0e0..89faf81fd0 100644 --- a/plugins/linguist/package.json +++ b/plugins/linguist/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-linguist", - "version": "0.1.3-next.2", + "version": "0.1.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/microsoft-calendar/CHANGELOG.md b/plugins/microsoft-calendar/CHANGELOG.md index 98e2cbf1c1..a9bc798414 100644 --- a/plugins/microsoft-calendar/CHANGELOG.md +++ b/plugins/microsoft-calendar/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-microsoft-calendar +## 0.1.3 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + ## 0.1.3-next.1 ### Patch Changes diff --git a/plugins/microsoft-calendar/package.json b/plugins/microsoft-calendar/package.json index ca444bf7df..070404422f 100644 --- a/plugins/microsoft-calendar/package.json +++ b/plugins/microsoft-calendar/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-microsoft-calendar", - "version": "0.1.3-next.1", + "version": "0.1.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/newrelic-dashboard/CHANGELOG.md b/plugins/newrelic-dashboard/CHANGELOG.md index 1bbac565ca..ad52878764 100644 --- a/plugins/newrelic-dashboard/CHANGELOG.md +++ b/plugins/newrelic-dashboard/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-newrelic-dashboard +## 0.2.11 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + ## 0.2.11-next.2 ### Patch Changes diff --git a/plugins/newrelic-dashboard/package.json b/plugins/newrelic-dashboard/package.json index 696762913b..cebda38964 100644 --- a/plugins/newrelic-dashboard/package.json +++ b/plugins/newrelic-dashboard/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-newrelic-dashboard", - "version": "0.2.11-next.2", + "version": "0.2.11", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/newrelic/CHANGELOG.md b/plugins/newrelic/CHANGELOG.md index 88daca0ff0..c03b0ad933 100644 --- a/plugins/newrelic/CHANGELOG.md +++ b/plugins/newrelic/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-newrelic +## 0.3.36 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + ## 0.3.36-next.1 ### Patch Changes diff --git a/plugins/newrelic/package.json b/plugins/newrelic/package.json index 628280099c..c8de615d73 100644 --- a/plugins/newrelic/package.json +++ b/plugins/newrelic/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-newrelic", "description": "A Backstage plugin that integrates towards New Relic", - "version": "0.3.36-next.1", + "version": "0.3.36", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/octopus-deploy/CHANGELOG.md b/plugins/octopus-deploy/CHANGELOG.md index 228c8b5a18..66465dc514 100644 --- a/plugins/octopus-deploy/CHANGELOG.md +++ b/plugins/octopus-deploy/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-octopus-deploy +## 0.2.0 + +### Minor Changes + +- 87211bc2873: Added support for Octopus Deploy spaces. The octopus.com/project-id annotation can now (optionally) be prefixed by a space identifier, for example. Spaces-1/Projects-102. + Also note that some of this plugins exported API's have changed to accommodate this change, changing from separate arguments to a single object. + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + ## 0.2.0-next.2 ### Patch Changes diff --git a/plugins/octopus-deploy/package.json b/plugins/octopus-deploy/package.json index 2140f130e5..6597f4f69c 100644 --- a/plugins/octopus-deploy/package.json +++ b/plugins/octopus-deploy/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-octopus-deploy", - "version": "0.2.0-next.2", + "version": "0.2.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/org-react/CHANGELOG.md b/plugins/org-react/CHANGELOG.md index d7a5b72817..a418acb8e5 100644 --- a/plugins/org-react/CHANGELOG.md +++ b/plugins/org-react/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-org-react +## 0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + ## 0.1.7-next.2 ### Patch Changes diff --git a/plugins/org-react/package.json b/plugins/org-react/package.json index 5c33388f69..bd7d59ba6b 100644 --- a/plugins/org-react/package.json +++ b/plugins/org-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-org-react", - "version": "0.1.7-next.2", + "version": "0.1.7", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/org/CHANGELOG.md b/plugins/org/CHANGELOG.md index f729d46e19..60bec7da2f 100644 --- a/plugins/org/CHANGELOG.md +++ b/plugins/org/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/plugin-org +## 0.6.8 + +### Patch Changes + +- 6e387c077a4: Changed the MembersListCard component to allow displaying aggregated members when viewing a group. Now, a toggle switch can be displayed that lets you switch between showing direct members and aggregated members. + + To enable this new feature, set the showAggregateMembersToggle prop on EntityMembersListCard: + + ```jsx + // In packages/app/src/components/catalog/EntityPage.tsx + const groupPage = ( + // ... + + // ... + ); + ``` + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + ## 0.6.8-next.2 ### Patch Changes diff --git a/plugins/org/package.json b/plugins/org/package.json index 6755d8fd64..cdbf8cd153 100644 --- a/plugins/org/package.json +++ b/plugins/org/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-org", "description": "A Backstage plugin that helps you create entity pages for your organization", - "version": "0.6.8-next.2", + "version": "0.6.8", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/pagerduty/CHANGELOG.md b/plugins/pagerduty/CHANGELOG.md index 36f1e4a7ca..671772c119 100644 --- a/plugins/pagerduty/CHANGELOG.md +++ b/plugins/pagerduty/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-pagerduty +## 0.5.11 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + ## 0.5.11-next.2 ### Patch Changes diff --git a/plugins/pagerduty/package.json b/plugins/pagerduty/package.json index 89bc2367da..b635ade95e 100644 --- a/plugins/pagerduty/package.json +++ b/plugins/pagerduty/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-pagerduty", "description": "A Backstage plugin that integrates towards PagerDuty", - "version": "0.5.11-next.2", + "version": "0.5.11", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/periskop-backend/CHANGELOG.md b/plugins/periskop-backend/CHANGELOG.md index fde89edbe9..fc478922db 100644 --- a/plugins/periskop-backend/CHANGELOG.md +++ b/plugins/periskop-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-periskop-backend +## 0.1.16 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + ## 0.1.16-next.1 ### Patch Changes diff --git a/plugins/periskop-backend/package.json b/plugins/periskop-backend/package.json index b453b2bc59..520c4c03ca 100644 --- a/plugins/periskop-backend/package.json +++ b/plugins/periskop-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-periskop-backend", - "version": "0.1.16-next.1", + "version": "0.1.16", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/periskop/CHANGELOG.md b/plugins/periskop/CHANGELOG.md index 79f636a76a..65e6b2640d 100644 --- a/plugins/periskop/CHANGELOG.md +++ b/plugins/periskop/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-periskop +## 0.1.16 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + ## 0.1.16-next.2 ### Patch Changes diff --git a/plugins/periskop/package.json b/plugins/periskop/package.json index 5b277bbcce..b3f97452b6 100644 --- a/plugins/periskop/package.json +++ b/plugins/periskop/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-periskop", - "version": "0.1.16-next.2", + "version": "0.1.16", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/permission-backend/CHANGELOG.md b/plugins/permission-backend/CHANGELOG.md index 02bb528853..a5a5325d16 100644 --- a/plugins/permission-backend/CHANGELOG.md +++ b/plugins/permission-backend/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-permission-backend +## 0.5.20 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-permission-node@0.7.8 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-permission-common@0.7.5 + ## 0.5.20-next.1 ### Patch Changes diff --git a/plugins/permission-backend/package.json b/plugins/permission-backend/package.json index 0156c96626..e1fa9785c1 100644 --- a/plugins/permission-backend/package.json +++ b/plugins/permission-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-permission-backend", - "version": "0.5.20-next.1", + "version": "0.5.20", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/permission-node/CHANGELOG.md b/plugins/permission-node/CHANGELOG.md index b2014e3e62..eb964866ce 100644 --- a/plugins/permission-node/CHANGELOG.md +++ b/plugins/permission-node/CHANGELOG.md @@ -1,5 +1,36 @@ # @backstage/plugin-permission-node +## 0.7.8 + +### Patch Changes + +- a788e715cfc: `createPermissionIntegrationRouter` now accepts rules and permissions for multiple resource types. Example: + + ```typescript + createPermissionIntegrationRouter({ + resources: [ + { + resourceType: 'resourceType-1', + permissions: permissionsResourceType1, + rules: rulesResourceType1, + }, + { + resourceType: 'resourceType-2', + permissions: permissionsResourceType2, + rules: rulesResourceType2, + }, + ], + }); + ``` + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-permission-common@0.7.5 + ## 0.7.8-next.1 ### Patch Changes diff --git a/plugins/permission-node/package.json b/plugins/permission-node/package.json index a0187f4576..6a955ef29f 100644 --- a/plugins/permission-node/package.json +++ b/plugins/permission-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-permission-node", "description": "Common permission and authorization utilities for backend plugins", - "version": "0.7.8-next.1", + "version": "0.7.8", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/playlist-backend/CHANGELOG.md b/plugins/playlist-backend/CHANGELOG.md index 2bf296d6b4..31f1177294 100644 --- a/plugins/playlist-backend/CHANGELOG.md +++ b/plugins/playlist-backend/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-playlist-backend +## 0.3.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-permission-node@0.7.8 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-playlist-common@0.1.6 + ## 0.3.1-next.1 ### Patch Changes diff --git a/plugins/playlist-backend/package.json b/plugins/playlist-backend/package.json index c0ac336383..0d909104b9 100644 --- a/plugins/playlist-backend/package.json +++ b/plugins/playlist-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-playlist-backend", - "version": "0.3.1-next.1", + "version": "0.3.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/playlist/CHANGELOG.md b/plugins/playlist/CHANGELOG.md index 30f6ef919d..2ecdf65cb7 100644 --- a/plugins/playlist/CHANGELOG.md +++ b/plugins/playlist/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-playlist +## 0.1.9 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/plugin-search-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-permission-react@0.4.12 + - @backstage/plugin-playlist-common@0.1.6 + ## 0.1.9-next.2 ### Patch Changes diff --git a/plugins/playlist/package.json b/plugins/playlist/package.json index d30f4851d7..5cd050940d 100644 --- a/plugins/playlist/package.json +++ b/plugins/playlist/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-playlist", - "version": "0.1.9-next.2", + "version": "0.1.9", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/proxy-backend/CHANGELOG.md b/plugins/proxy-backend/CHANGELOG.md index e18a0f5a7f..6bd1c9004c 100644 --- a/plugins/proxy-backend/CHANGELOG.md +++ b/plugins/proxy-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-proxy-backend +## 0.2.39 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + ## 0.2.39-next.1 ### Patch Changes diff --git a/plugins/proxy-backend/package.json b/plugins/proxy-backend/package.json index f16c87f3d7..2f44342962 100644 --- a/plugins/proxy-backend/package.json +++ b/plugins/proxy-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-proxy-backend", "description": "A Backstage backend plugin that helps you set up proxy endpoints in the backend", - "version": "0.2.39-next.1", + "version": "0.2.39", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/puppetdb/CHANGELOG.md b/plugins/puppetdb/CHANGELOG.md index 8581c7650b..272f07dc01 100644 --- a/plugins/puppetdb/CHANGELOG.md +++ b/plugins/puppetdb/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-puppetdb +## 0.1.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + ## 0.1.1-next.2 ### Patch Changes diff --git a/plugins/puppetdb/package.json b/plugins/puppetdb/package.json index 9782269666..b04b3a7b1c 100644 --- a/plugins/puppetdb/package.json +++ b/plugins/puppetdb/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-puppetdb", "description": "Backstage plugin to visualize resource information and Puppet facts from PuppetDB.", - "version": "0.1.1-next.2", + "version": "0.1.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/rollbar-backend/CHANGELOG.md b/plugins/rollbar-backend/CHANGELOG.md index 337ba58f5f..1c1d8faffa 100644 --- a/plugins/rollbar-backend/CHANGELOG.md +++ b/plugins/rollbar-backend/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-rollbar-backend +## 0.1.42 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/config@1.0.7 + ## 0.1.42-next.1 ### Patch Changes diff --git a/plugins/rollbar-backend/package.json b/plugins/rollbar-backend/package.json index 170f06dcb0..8c5a2bd669 100644 --- a/plugins/rollbar-backend/package.json +++ b/plugins/rollbar-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-rollbar-backend", "description": "A Backstage backend plugin that integrates towards Rollbar", - "version": "0.1.42-next.1", + "version": "0.1.42", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/rollbar/CHANGELOG.md b/plugins/rollbar/CHANGELOG.md index d4d34fec32..ebe6cd0a7e 100644 --- a/plugins/rollbar/CHANGELOG.md +++ b/plugins/rollbar/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-rollbar +## 0.4.18 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + ## 0.4.18-next.2 ### Patch Changes diff --git a/plugins/rollbar/package.json b/plugins/rollbar/package.json index cd3c302b03..ee46f656fd 100644 --- a/plugins/rollbar/package.json +++ b/plugins/rollbar/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-rollbar", "description": "A Backstage plugin that integrates towards Rollbar", - "version": "0.4.18-next.2", + "version": "0.4.18", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md b/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md index 5ef00b8f91..3add549e58 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-scaffolder-backend-module-confluence-to-markdown +## 0.1.2 + +### Patch Changes + +- 7c116bcac7f: Fixed the way that some request errors are thrown +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.14.0 + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/plugin-scaffolder-node@0.1.3 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + ## 0.1.2-next.2 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/package.json b/plugins/scaffolder-backend-module-confluence-to-markdown/package.json index 57602c2d27..40fc82ecea 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdown/package.json +++ b/plugins/scaffolder-backend-module-confluence-to-markdown/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-backend-module-confluence-to-markdown", "description": "The confluence-to-markdown module for @backstage/plugin-scaffolder-backend", - "version": "0.1.2-next.2", + "version": "0.1.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md b/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md index 1c1d336fd1..1ea629a2fb 100644 --- a/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-scaffolder-backend-module-cookiecutter +## 0.2.21 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.14.0 + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/plugin-scaffolder-node@0.1.3 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + ## 0.2.21-next.2 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-cookiecutter/package.json b/plugins/scaffolder-backend-module-cookiecutter/package.json index d8649918c0..89b2997ea3 100644 --- a/plugins/scaffolder-backend-module-cookiecutter/package.json +++ b/plugins/scaffolder-backend-module-cookiecutter/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-backend-module-cookiecutter", "description": "A module for the scaffolder backend that lets you template projects using cookiecutter", - "version": "0.2.21-next.2", + "version": "0.2.21", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md b/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md index 72999216df..f040e0670e 100644 --- a/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-scaffolder-backend-module-gitlab +## 0.2.0 + +### Minor Changes + +- 439e2986be1: Add a new scaffolder action for gitlab to ensure a group exists + +### Patch Changes + +- f1496d4ab6f: Fix input schema validation issue for gitlab actions: + + - gitlab:group:ensureExists + - gitlab:projectAccessToken:create + - gitlab:projectDeployToken:create + - gitlab:projectVariable:create + +- Updated dependencies + - @backstage/integration@1.4.5 + - @backstage/plugin-scaffolder-node@0.1.3 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 0.2.0-next.2 ### Minor Changes diff --git a/plugins/scaffolder-backend-module-gitlab/package.json b/plugins/scaffolder-backend-module-gitlab/package.json index 9c36616eb8..07cc725570 100644 --- a/plugins/scaffolder-backend-module-gitlab/package.json +++ b/plugins/scaffolder-backend-module-gitlab/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-gitlab", - "version": "0.2.0-next.2", + "version": "0.2.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-rails/CHANGELOG.md b/plugins/scaffolder-backend-module-rails/CHANGELOG.md index bd263d65a7..0350dfbf5c 100644 --- a/plugins/scaffolder-backend-module-rails/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-rails/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-scaffolder-backend-module-rails +## 0.4.14 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.14.0 + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/plugin-scaffolder-node@0.1.3 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + ## 0.4.14-next.2 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-rails/package.json b/plugins/scaffolder-backend-module-rails/package.json index e45fc153ae..226e4ab3cb 100644 --- a/plugins/scaffolder-backend-module-rails/package.json +++ b/plugins/scaffolder-backend-module-rails/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-backend-module-rails", "description": "A module for the scaffolder backend that lets you template projects using Rails", - "version": "0.4.14-next.2", + "version": "0.4.14", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-sentry/CHANGELOG.md b/plugins/scaffolder-backend-module-sentry/CHANGELOG.md index 4206d39413..f3cf978ea6 100644 --- a/plugins/scaffolder-backend-module-sentry/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-sentry/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-scaffolder-backend-module-sentry +## 0.1.5 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.1.3 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 0.1.5-next.2 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-sentry/package.json b/plugins/scaffolder-backend-module-sentry/package.json index d66fea6d60..2a1bf2f61f 100644 --- a/plugins/scaffolder-backend-module-sentry/package.json +++ b/plugins/scaffolder-backend-module-sentry/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-sentry", - "version": "0.1.5-next.2", + "version": "0.1.5", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md b/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md index 232510d721..7509ba3d76 100644 --- a/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-scaffolder-backend-module-yeoman +## 0.2.18 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.1.3 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + ## 0.2.18-next.2 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-yeoman/package.json b/plugins/scaffolder-backend-module-yeoman/package.json index 952a220c5a..67f6caff59 100644 --- a/plugins/scaffolder-backend-module-yeoman/package.json +++ b/plugins/scaffolder-backend-module-yeoman/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-yeoman", - "version": "0.2.18-next.2", + "version": "0.2.18", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend/CHANGELOG.md b/plugins/scaffolder-backend/CHANGELOG.md index 221362e637..d4aa251b34 100644 --- a/plugins/scaffolder-backend/CHANGELOG.md +++ b/plugins/scaffolder-backend/CHANGELOG.md @@ -1,5 +1,39 @@ # @backstage/plugin-scaffolder-backend +## 1.14.0 + +### Minor Changes + +- 67115f532b8: Expose both types of scaffolder permissions and rules through the metadata endpoint. + + The metadata endpoint now correctly exposes both types of scaffolder permissions and rules (for both the template and action resource types) through the metadata endpoint. + +- a73b3c0b097: Add ability to use `defaultNamespace` and `defaultKind` for scaffolder action `catalog:fetch` + +### Patch Changes + +- 1a48b84901c: Bump minimum required version of `vm2` to be 3.9.18 +- d20c87966a4: Bump minimum required version of `vm2` to be 3.9.17 +- 6d954de4b06: Update typing for `RouterOptions::actions` and `ScaffolderActionsExtensionPoint::addActions` to allow any kind of action being assigned to it. +- Updated dependencies + - @backstage/plugin-catalog-backend@1.9.1 + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/plugin-scaffolder-common@1.3.0 + - @backstage/plugin-permission-node@0.7.8 + - @backstage/plugin-scaffolder-node@0.1.3 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-common@0.7.5 + ## 1.13.2-next.2 ### Patch Changes diff --git a/plugins/scaffolder-backend/package.json b/plugins/scaffolder-backend/package.json index 3d1794410d..aeb7861f4b 100644 --- a/plugins/scaffolder-backend/package.json +++ b/plugins/scaffolder-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-backend", "description": "The Backstage backend plugin that helps you create new things", - "version": "1.13.2-next.2", + "version": "1.14.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-common/CHANGELOG.md b/plugins/scaffolder-common/CHANGELOG.md index b09bf55eb3..b5bcabb64f 100644 --- a/plugins/scaffolder-common/CHANGELOG.md +++ b/plugins/scaffolder-common/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-scaffolder-common +## 1.3.0 + +### Minor Changes + +- 82e10a6939c: Add support for Markdown text blob outputs from templates +- 67115f532b8: Expose scaffolder permissions in new sub-aggregations. + + In addition to exporting a list of all scaffolder permissions in `scaffolderPermissions`, scaffolder-common now exports `scaffolderTemplatePermissions` and `scaffolderActionPermissions`, which contain subsets of the scaffolder permissions separated by resource type. + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.3.0 + - @backstage/types@1.0.2 + - @backstage/plugin-permission-common@0.7.5 + ## 1.3.0-next.0 ### Minor Changes diff --git a/plugins/scaffolder-common/package.json b/plugins/scaffolder-common/package.json index c12f16dbad..45b4986155 100644 --- a/plugins/scaffolder-common/package.json +++ b/plugins/scaffolder-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-common", "description": "Common functionalities for the scaffolder, to be shared between scaffolder and scaffolder-backend plugin", - "version": "1.3.0-next.0", + "version": "1.3.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-node/CHANGELOG.md b/plugins/scaffolder-node/CHANGELOG.md index 5936463ac8..7c4f4316ec 100644 --- a/plugins/scaffolder-node/CHANGELOG.md +++ b/plugins/scaffolder-node/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-scaffolder-node +## 0.1.3 + +### Patch Changes + +- 6d954de4b06: Update typing for `RouterOptions::actions` and `ScaffolderActionsExtensionPoint::addActions` to allow any kind of action being assigned to it. +- Updated dependencies + - @backstage/plugin-scaffolder-common@1.3.0 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-model@1.3.0 + - @backstage/types@1.0.2 + ## 0.1.3-next.2 ### Patch Changes diff --git a/plugins/scaffolder-node/package.json b/plugins/scaffolder-node/package.json index d00dd15226..4eda195f91 100644 --- a/plugins/scaffolder-node/package.json +++ b/plugins/scaffolder-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-node", "description": "The plugin-scaffolder-node module for @backstage/plugin-scaffolder-backend", - "version": "0.1.3-next.2", + "version": "0.1.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-react/CHANGELOG.md b/plugins/scaffolder-react/CHANGELOG.md index 8d93049843..59434d30cf 100644 --- a/plugins/scaffolder-react/CHANGELOG.md +++ b/plugins/scaffolder-react/CHANGELOG.md @@ -1,5 +1,31 @@ # @backstage/plugin-scaffolder-react +## 1.4.0 + +### Minor Changes + +- 82e10a6939c: Add support for Markdown text blob outputs from templates + +### Patch Changes + +- ad1a1429de4: Improvements to the `scaffolder/next` buttons UX: + + - Added padding around the "Create" button in the `Stepper` component + - Added a button bar that includes the "Cancel" and "Start Over" buttons to the `OngoingTask` component. The state of these buttons match their existing counter parts in the Context Menu + - Added a "Show Button Bar"/"Hide Button Bar" item to the `ContextMenu` component + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/plugin-scaffolder-common@1.3.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.4 + ## 1.4.0-next.2 ### Minor Changes diff --git a/plugins/scaffolder-react/package.json b/plugins/scaffolder-react/package.json index c455eeebf6..5e5732fb04 100644 --- a/plugins/scaffolder-react/package.json +++ b/plugins/scaffolder-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-react", "description": "A frontend library that helps other Backstage plugins interact with the Scaffolder", - "version": "1.4.0-next.2", + "version": "1.4.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder/CHANGELOG.md b/plugins/scaffolder/CHANGELOG.md index 577517a127..9658bfc48f 100644 --- a/plugins/scaffolder/CHANGELOG.md +++ b/plugins/scaffolder/CHANGELOG.md @@ -1,5 +1,33 @@ # @backstage/plugin-scaffolder +## 1.13.1 + +### Patch Changes + +- d560d457c98: Fix case GitLab workspace is a nested subgroup +- ad1a1429de4: Improvements to the `scaffolder/next` buttons UX: + + - Added padding around the "Create" button in the `Stepper` component + - Added a button bar that includes the "Cancel" and "Start Over" buttons to the `OngoingTask` component. The state of these buttons match their existing counter parts in the Context Menu + - Added a "Show Button Bar"/"Hide Button Bar" item to the `ContextMenu` component + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/integration@1.4.5 + - @backstage/plugin-scaffolder-common@1.3.0 + - @backstage/plugin-scaffolder-react@1.4.0 + - @backstage/core-components@0.13.1 + - @backstage/integration-react@1.1.13 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-react@0.4.12 + ## 1.13.1-next.2 ### Patch Changes diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json index 4b5e34e5de..89bb9f90d6 100644 --- a/plugins/scaffolder/package.json +++ b/plugins/scaffolder/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder", "description": "The Backstage plugin that helps you create new things", - "version": "1.13.1-next.2", + "version": "1.13.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend-module-catalog/CHANGELOG.md b/plugins/search-backend-module-catalog/CHANGELOG.md index bf64047538..f8c7e04d44 100644 --- a/plugins/search-backend-module-catalog/CHANGELOG.md +++ b/plugins/search-backend-module-catalog/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-search-backend-module-catalog +## 0.1.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-search-backend-node@1.2.1 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-search-common@1.2.3 + ## 0.1.1-next.1 ### Patch Changes diff --git a/plugins/search-backend-module-catalog/package.json b/plugins/search-backend-module-catalog/package.json index 15421990e2..8e0e30d711 100644 --- a/plugins/search-backend-module-catalog/package.json +++ b/plugins/search-backend-module-catalog/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-module-catalog", "description": "A module for the search backend that exports catalog modules", - "version": "0.1.1-next.1", + "version": "0.1.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend-module-elasticsearch/CHANGELOG.md b/plugins/search-backend-module-elasticsearch/CHANGELOG.md index a74c8e5c0d..e699ee60c7 100644 --- a/plugins/search-backend-module-elasticsearch/CHANGELOG.md +++ b/plugins/search-backend-module-elasticsearch/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-search-backend-module-elasticsearch +## 1.3.0 + +### Minor Changes + +- 3d72bdb41c7: Upgrade to aws-sdk v3 and include OpenSearch Serverless support + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration-aws-node@0.1.3 + - @backstage/plugin-search-backend-node@1.2.1 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/plugin-search-common@1.2.3 + ## 1.3.0-next.2 ### Minor Changes diff --git a/plugins/search-backend-module-elasticsearch/package.json b/plugins/search-backend-module-elasticsearch/package.json index 20f12c3592..e8d999e840 100644 --- a/plugins/search-backend-module-elasticsearch/package.json +++ b/plugins/search-backend-module-elasticsearch/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-module-elasticsearch", "description": "A module for the search backend that implements search using ElasticSearch", - "version": "1.3.0-next.2", + "version": "1.3.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend-module-explore/CHANGELOG.md b/plugins/search-backend-module-explore/CHANGELOG.md index df693832db..529cdcc99e 100644 --- a/plugins/search-backend-module-explore/CHANGELOG.md +++ b/plugins/search-backend-module-explore/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-search-backend-module-explore +## 0.1.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-search-backend-node@1.2.1 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-search-common@1.2.3 + ## 0.1.1-next.1 ### Patch Changes diff --git a/plugins/search-backend-module-explore/package.json b/plugins/search-backend-module-explore/package.json index 00f63ef41e..6a6f92a9cc 100644 --- a/plugins/search-backend-module-explore/package.json +++ b/plugins/search-backend-module-explore/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-module-explore", "description": "A module for the search backend that exports explore modules", - "version": "0.1.1-next.1", + "version": "0.1.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend-module-pg/CHANGELOG.md b/plugins/search-backend-module-pg/CHANGELOG.md index 9b9ddfa0ff..98354dd3ea 100644 --- a/plugins/search-backend-module-pg/CHANGELOG.md +++ b/plugins/search-backend-module-pg/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-search-backend-module-pg +## 0.5.6 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-search-backend-node@1.2.1 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/plugin-search-common@1.2.3 + ## 0.5.6-next.1 ### Patch Changes diff --git a/plugins/search-backend-module-pg/package.json b/plugins/search-backend-module-pg/package.json index 5d63d913e0..e623ba034d 100644 --- a/plugins/search-backend-module-pg/package.json +++ b/plugins/search-backend-module-pg/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-module-pg", "description": "A module for the search backend that implements search using PostgreSQL", - "version": "0.5.6-next.1", + "version": "0.5.6", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend-module-techdocs/CHANGELOG.md b/plugins/search-backend-module-techdocs/CHANGELOG.md index 83eed95d8e..fe6fc1420d 100644 --- a/plugins/search-backend-module-techdocs/CHANGELOG.md +++ b/plugins/search-backend-module-techdocs/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-search-backend-module-techdocs +## 0.1.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-techdocs-node@1.7.1 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-search-backend-node@1.2.1 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-search-common@1.2.3 + ## 0.1.1-next.1 ### Patch Changes diff --git a/plugins/search-backend-module-techdocs/package.json b/plugins/search-backend-module-techdocs/package.json index f7d7151aeb..b45a7a3b66 100644 --- a/plugins/search-backend-module-techdocs/package.json +++ b/plugins/search-backend-module-techdocs/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-module-techdocs", "description": "A module for the search backend that exports techdocs modules", - "version": "0.1.1-next.1", + "version": "0.1.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend-node/CHANGELOG.md b/plugins/search-backend-node/CHANGELOG.md index 00a828f132..7aca52d696 100644 --- a/plugins/search-backend-node/CHANGELOG.md +++ b/plugins/search-backend-node/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-search-backend-node +## 1.2.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-search-common@1.2.3 + ## 1.2.1-next.1 ### Patch Changes diff --git a/plugins/search-backend-node/package.json b/plugins/search-backend-node/package.json index 9d7b0b0210..21a38cf3b5 100644 --- a/plugins/search-backend-node/package.json +++ b/plugins/search-backend-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-node", "description": "A library for Backstage backend plugins that want to interact with the search backend plugin", - "version": "1.2.1-next.1", + "version": "1.2.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend/CHANGELOG.md b/plugins/search-backend/CHANGELOG.md index fbc53b4f2d..5bbc969216 100644 --- a/plugins/search-backend/CHANGELOG.md +++ b/plugins/search-backend/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-search-backend +## 1.3.1 + +### Patch Changes + +- 021cfbb5152: Added an OpenAPI 3.0 spec and enforced schema-first model on the router. +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-permission-node@0.7.8 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/plugin-search-backend-node@1.2.1 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-search-common@1.2.3 + ## 1.3.1-next.2 ### Patch Changes diff --git a/plugins/search-backend/package.json b/plugins/search-backend/package.json index 53059b2355..c7658ab754 100644 --- a/plugins/search-backend/package.json +++ b/plugins/search-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend", "description": "The Backstage backend plugin that provides your backstage app with search", - "version": "1.3.1-next.2", + "version": "1.3.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-react/CHANGELOG.md b/plugins/search-react/CHANGELOG.md index 411953c6f9..6527d67bb9 100644 --- a/plugins/search-react/CHANGELOG.md +++ b/plugins/search-react/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/plugin-search-react +## 1.6.0 + +### Minor Changes + +- 750e45539ad: Add close button & improve search input. + + MUI's Paper wrapping the SearchBar in the SearchPage was removed, we recommend users update their apps accordingly. + + SearchBarBase's TextField's label support added & aria-label uses label string if present, tests relying on the default placeholder value should still work unless custom placeholder was given. + +- 1ce7f84b2e8: accepts InputProp property that can override keys from default + +### Patch Changes + +- f785f0804cd: `SearchPagination` now automatically resets the page cursor when the page limit is changed +- adb31096bc2: Fix text-overflow UI issue for Lifecycle spans in SearchFilter checkbox labels. +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.4 + - @backstage/plugin-search-common@1.2.3 + ## 1.6.0-next.2 ### Minor Changes diff --git a/plugins/search-react/package.json b/plugins/search-react/package.json index e424788e31..6a5b326f34 100644 --- a/plugins/search-react/package.json +++ b/plugins/search-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-search-react", - "version": "1.6.0-next.2", + "version": "1.6.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search/CHANGELOG.md b/plugins/search/CHANGELOG.md index f3c93f5142..2427adb905 100644 --- a/plugins/search/CHANGELOG.md +++ b/plugins/search/CHANGELOG.md @@ -1,5 +1,31 @@ # @backstage/plugin-search +## 1.3.0 + +### Minor Changes + +- 750e45539ad: Add close button & improve search input. + + MUI's Paper wrapping the SearchBar in the SearchPage was removed, we recommend users update their apps accordingly. + + SearchBarBase's TextField's label support added & aria-label uses label string if present, tests relying on the default placeholder value should still work unless custom placeholder was given. + +### Patch Changes + +- 0e3d8d69318: Fixed 404 Error when fetching search results due to URL encoding changes +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/plugin-search-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.4 + - @backstage/plugin-search-common@1.2.3 + ## 1.3.0-next.2 ### Patch Changes diff --git a/plugins/search/package.json b/plugins/search/package.json index c4f7f680b6..f95a25ee40 100644 --- a/plugins/search/package.json +++ b/plugins/search/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search", "description": "The Backstage plugin that provides your backstage app with search", - "version": "1.3.0-next.2", + "version": "1.3.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/sentry/CHANGELOG.md b/plugins/sentry/CHANGELOG.md index be844d6c4f..cd25c33475 100644 --- a/plugins/sentry/CHANGELOG.md +++ b/plugins/sentry/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-sentry +## 0.5.3 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + ## 0.5.3-next.2 ### Patch Changes diff --git a/plugins/sentry/package.json b/plugins/sentry/package.json index 70177fc4d7..454b1b0259 100644 --- a/plugins/sentry/package.json +++ b/plugins/sentry/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-sentry", "description": "A Backstage plugin that integrates towards Sentry", - "version": "0.5.3-next.2", + "version": "0.5.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/shortcuts/CHANGELOG.md b/plugins/shortcuts/CHANGELOG.md index fab37db64c..d151c6cdb4 100644 --- a/plugins/shortcuts/CHANGELOG.md +++ b/plugins/shortcuts/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-shortcuts +## 0.3.10 + +### Patch Changes + +- 8a7174e297c: Marked `LocalStoredShortcuts` as deprecated, replacing it with `DefaultShortcutsApi` whose naming more clearly suggests that the shortcuts aren't necessarily stored locally (it depends on the storage implementation). +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + - @backstage/types@1.0.2 + ## 0.3.10-next.2 ### Patch Changes diff --git a/plugins/shortcuts/package.json b/plugins/shortcuts/package.json index 511247369f..21dd39256d 100644 --- a/plugins/shortcuts/package.json +++ b/plugins/shortcuts/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-shortcuts", "description": "A Backstage plugin that provides a shortcuts feature to the sidebar", - "version": "0.3.10-next.2", + "version": "0.3.10", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/sonarqube-backend/CHANGELOG.md b/plugins/sonarqube-backend/CHANGELOG.md index cf90264ece..ab84aef856 100644 --- a/plugins/sonarqube-backend/CHANGELOG.md +++ b/plugins/sonarqube-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-sonarqube-backend +## 0.1.10 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 0.1.10-next.1 ### Patch Changes diff --git a/plugins/sonarqube-backend/package.json b/plugins/sonarqube-backend/package.json index 9b452471de..28b61aa1be 100644 --- a/plugins/sonarqube-backend/package.json +++ b/plugins/sonarqube-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-sonarqube-backend", - "version": "0.1.10-next.1", + "version": "0.1.10", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/sonarqube/CHANGELOG.md b/plugins/sonarqube/CHANGELOG.md index 1e186aa844..d9624d2449 100644 --- a/plugins/sonarqube/CHANGELOG.md +++ b/plugins/sonarqube/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-sonarqube +## 0.6.7 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-sonarqube-react@0.1.5 + ## 0.6.7-next.2 ### Patch Changes diff --git a/plugins/sonarqube/package.json b/plugins/sonarqube/package.json index fcf247969b..1fbe857d9d 100644 --- a/plugins/sonarqube/package.json +++ b/plugins/sonarqube/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-sonarqube", "description": "", - "version": "0.6.7-next.2", + "version": "0.6.7", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/splunk-on-call/CHANGELOG.md b/plugins/splunk-on-call/CHANGELOG.md index 4f1741cefe..9685a0c003 100644 --- a/plugins/splunk-on-call/CHANGELOG.md +++ b/plugins/splunk-on-call/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-splunk-on-call +## 0.4.7 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + ## 0.4.7-next.2 ### Patch Changes diff --git a/plugins/splunk-on-call/package.json b/plugins/splunk-on-call/package.json index 95293d447d..4d0a79927b 100644 --- a/plugins/splunk-on-call/package.json +++ b/plugins/splunk-on-call/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-splunk-on-call", "description": "A Backstage plugin that integrates towards Splunk On-Call", - "version": "0.4.7-next.2", + "version": "0.4.7", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/stack-overflow-backend/CHANGELOG.md b/plugins/stack-overflow-backend/CHANGELOG.md index 03006fd490..a82a7abb05 100644 --- a/plugins/stack-overflow-backend/CHANGELOG.md +++ b/plugins/stack-overflow-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-stack-overflow-backend +## 0.2.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/config@1.0.7 + - @backstage/plugin-search-common@1.2.3 + ## 0.2.1-next.1 ### Patch Changes diff --git a/plugins/stack-overflow-backend/package.json b/plugins/stack-overflow-backend/package.json index fd08b70f52..29285a5972 100644 --- a/plugins/stack-overflow-backend/package.json +++ b/plugins/stack-overflow-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-stack-overflow-backend", - "version": "0.2.1-next.1", + "version": "0.2.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/stack-overflow/CHANGELOG.md b/plugins/stack-overflow/CHANGELOG.md index dad8fb3385..d0a05501a9 100644 --- a/plugins/stack-overflow/CHANGELOG.md +++ b/plugins/stack-overflow/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-stack-overflow +## 0.1.15 + +### Patch Changes + +- c1ff65f315a: StackOverflowSearchResultListItem can now accept an empty result prop so that it can be rendered in the suggested SearchResultListItem pattern. +- Updated dependencies + - @backstage/plugin-home@0.5.2 + - @backstage/theme@0.3.0 + - @backstage/plugin-search-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-search-common@1.2.3 + ## 0.1.15-next.2 ### Patch Changes diff --git a/plugins/stack-overflow/package.json b/plugins/stack-overflow/package.json index 2f966224d2..5b9cdb0213 100644 --- a/plugins/stack-overflow/package.json +++ b/plugins/stack-overflow/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-stack-overflow", - "version": "0.1.15-next.2", + "version": "0.1.15", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/stackstorm/CHANGELOG.md b/plugins/stackstorm/CHANGELOG.md index 3763d9d295..c75324e862 100644 --- a/plugins/stackstorm/CHANGELOG.md +++ b/plugins/stackstorm/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-stackstorm +## 0.1.2 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + ## 0.1.2-next.1 ### Patch Changes diff --git a/plugins/stackstorm/package.json b/plugins/stackstorm/package.json index 8787199746..f1ba49ca0b 100644 --- a/plugins/stackstorm/package.json +++ b/plugins/stackstorm/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-stackstorm", "description": "A Backstage plugin that integrates towards StackStorm", - "version": "0.1.2-next.1", + "version": "0.1.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md b/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md index 864c0cb830..fd3e6023f8 100644 --- a/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md +++ b/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-tech-insights-backend-module-jsonfc +## 0.1.29 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-tech-insights-node@0.4.3 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-tech-insights-common@0.2.10 + ## 0.1.29-next.1 ### Patch Changes diff --git a/plugins/tech-insights-backend-module-jsonfc/package.json b/plugins/tech-insights-backend-module-jsonfc/package.json index 489f36e2f8..46ae292ff5 100644 --- a/plugins/tech-insights-backend-module-jsonfc/package.json +++ b/plugins/tech-insights-backend-module-jsonfc/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights-backend-module-jsonfc", - "version": "0.1.29-next.1", + "version": "0.1.29", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-insights-backend/CHANGELOG.md b/plugins/tech-insights-backend/CHANGELOG.md index 1c3b902c3f..faaa4b1960 100644 --- a/plugins/tech-insights-backend/CHANGELOG.md +++ b/plugins/tech-insights-backend/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-tech-insights-backend +## 0.5.11 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/plugin-tech-insights-node@0.4.3 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-tech-insights-common@0.2.10 + ## 0.5.11-next.1 ### Patch Changes diff --git a/plugins/tech-insights-backend/package.json b/plugins/tech-insights-backend/package.json index 09bb9c8d6f..2525d1e914 100644 --- a/plugins/tech-insights-backend/package.json +++ b/plugins/tech-insights-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights-backend", - "version": "0.5.11-next.1", + "version": "0.5.11", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-insights-node/CHANGELOG.md b/plugins/tech-insights-node/CHANGELOG.md index e5eec67a40..ee4a160a76 100644 --- a/plugins/tech-insights-node/CHANGELOG.md +++ b/plugins/tech-insights-node/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-tech-insights-node +## 0.4.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-tech-insights-common@0.2.10 + ## 0.4.3-next.1 ### Patch Changes diff --git a/plugins/tech-insights-node/package.json b/plugins/tech-insights-node/package.json index bc5c0816f7..b97076a11e 100644 --- a/plugins/tech-insights-node/package.json +++ b/plugins/tech-insights-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights-node", - "version": "0.4.3-next.1", + "version": "0.4.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-insights/CHANGELOG.md b/plugins/tech-insights/CHANGELOG.md index 23fb28deea..4f36cfba16 100644 --- a/plugins/tech-insights/CHANGELOG.md +++ b/plugins/tech-insights/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-tech-insights +## 0.3.10 + +### Patch Changes + +- 22963209d23: Added the possibility to customize the check description in the scorecard component. + + - The `CheckResultRenderer` type now exposes an optional `description` method that allows to overwrite the description with a different string or a React component for a provided check result. + + Until now only the `BooleanCheck` element could be overridden, but from now on it's also possible to override the description for a check. + As an example, the description could change depending on the check result. Refer to the [README](https://github.com/backstage/backstage/blob/master/plugins/tech-insights/README.md#adding-custom-rendering-components) file for more details + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-tech-insights-common@0.2.10 + ## 0.3.10-next.2 ### Patch Changes diff --git a/plugins/tech-insights/package.json b/plugins/tech-insights/package.json index 4e2604a33a..a6facfff46 100644 --- a/plugins/tech-insights/package.json +++ b/plugins/tech-insights/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights", - "version": "0.3.10-next.2", + "version": "0.3.10", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-radar/CHANGELOG.md b/plugins/tech-radar/CHANGELOG.md index c6d0bd29cd..8250d4bfe8 100644 --- a/plugins/tech-radar/CHANGELOG.md +++ b/plugins/tech-radar/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-tech-radar +## 0.6.4 + +### Patch Changes + +- be4fa53fab8: Fix description links when clicking entry in radar. +- Added the ability to display a timeline to each entry in the details box +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + ## 0.6.4-next.2 ### Patch Changes diff --git a/plugins/tech-radar/package.json b/plugins/tech-radar/package.json index a5f6456850..7fb7520e25 100644 --- a/plugins/tech-radar/package.json +++ b/plugins/tech-radar/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-tech-radar", "description": "A Backstage plugin that lets you display a Tech Radar for your organization", - "version": "0.6.4-next.2", + "version": "0.6.4", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/techdocs-addons-test-utils/CHANGELOG.md b/plugins/techdocs-addons-test-utils/CHANGELOG.md index 051190ab61..ede86cb6bb 100644 --- a/plugins/techdocs-addons-test-utils/CHANGELOG.md +++ b/plugins/techdocs-addons-test-utils/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-techdocs-addons-test-utils +## 1.0.13 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-techdocs@1.6.2 + - @backstage/plugin-catalog@1.11.0 + - @backstage/core-app-api@1.8.0 + - @backstage/plugin-search-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/integration-react@1.1.13 + - @backstage/test-utils@1.3.1 + - @backstage/plugin-techdocs-react@1.1.6 + - @backstage/core-plugin-api@1.5.1 + ## 1.0.13-next.2 ### Patch Changes diff --git a/plugins/techdocs-addons-test-utils/package.json b/plugins/techdocs-addons-test-utils/package.json index 7de356960f..2e31a0d6bd 100644 --- a/plugins/techdocs-addons-test-utils/package.json +++ b/plugins/techdocs-addons-test-utils/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-techdocs-addons-test-utils", - "version": "1.0.13-next.2", + "version": "1.0.13", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/techdocs-backend/CHANGELOG.md b/plugins/techdocs-backend/CHANGELOG.md index 8df2623fa0..309a3d3ea6 100644 --- a/plugins/techdocs-backend/CHANGELOG.md +++ b/plugins/techdocs-backend/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-techdocs-backend +## 1.6.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/plugin-techdocs-node@1.7.1 + - @backstage/plugin-search-backend-module-techdocs@0.1.1 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-search-common@1.2.3 + ## 1.6.2-next.1 ### Patch Changes diff --git a/plugins/techdocs-backend/package.json b/plugins/techdocs-backend/package.json index b90c299621..999bc7f93b 100644 --- a/plugins/techdocs-backend/package.json +++ b/plugins/techdocs-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-backend", "description": "The Backstage backend plugin that renders technical documentation for your components", - "version": "1.6.2-next.1", + "version": "1.6.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/techdocs-module-addons-contrib/CHANGELOG.md b/plugins/techdocs-module-addons-contrib/CHANGELOG.md index b267a89b8b..01765d39de 100644 --- a/plugins/techdocs-module-addons-contrib/CHANGELOG.md +++ b/plugins/techdocs-module-addons-contrib/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-techdocs-module-addons-contrib +## 1.0.13 + +### Patch Changes + +- 6afc7f052ca: Show cursor pointer when hovering on lightbox +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/integration@1.4.5 + - @backstage/core-components@0.13.1 + - @backstage/integration-react@1.1.13 + - @backstage/plugin-techdocs-react@1.1.6 + - @backstage/core-plugin-api@1.5.1 + ## 1.0.13-next.2 ### Patch Changes diff --git a/plugins/techdocs-module-addons-contrib/package.json b/plugins/techdocs-module-addons-contrib/package.json index 527e5487dc..7ef4a1f2c1 100644 --- a/plugins/techdocs-module-addons-contrib/package.json +++ b/plugins/techdocs-module-addons-contrib/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-module-addons-contrib", "description": "Plugin module for contributed TechDocs Addons", - "version": "1.0.13-next.2", + "version": "1.0.13", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/techdocs-node/CHANGELOG.md b/plugins/techdocs-node/CHANGELOG.md index e3715430c9..7737a13a13 100644 --- a/plugins/techdocs-node/CHANGELOG.md +++ b/plugins/techdocs-node/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-techdocs-node +## 1.7.1 + +### Patch Changes + +- 3659c71c5d9: Standardize `@aws-sdk` v3 versions +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/integration-aws-node@0.1.3 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-search-common@1.2.3 + ## 1.7.1-next.1 ### Patch Changes diff --git a/plugins/techdocs-node/package.json b/plugins/techdocs-node/package.json index dde49d6b2c..d3ec2232cd 100644 --- a/plugins/techdocs-node/package.json +++ b/plugins/techdocs-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-node", "description": "Common node.js functionalities for TechDocs, to be shared between techdocs-backend plugin and techdocs-cli", - "version": "1.7.1-next.1", + "version": "1.7.1", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/plugins/techdocs-react/CHANGELOG.md b/plugins/techdocs-react/CHANGELOG.md index 5247e6906f..9176553916 100644 --- a/plugins/techdocs-react/CHANGELOG.md +++ b/plugins/techdocs-react/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-techdocs-react +## 1.1.6 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/version-bridge@1.0.4 + ## 1.1.6-next.1 ### Patch Changes diff --git a/plugins/techdocs-react/package.json b/plugins/techdocs-react/package.json index 8a8c2c5cbc..ee523969c1 100644 --- a/plugins/techdocs-react/package.json +++ b/plugins/techdocs-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-react", "description": "Shared frontend utilities for TechDocs and Addons", - "version": "1.1.6-next.1", + "version": "1.1.6", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/plugins/techdocs/CHANGELOG.md b/plugins/techdocs/CHANGELOG.md index f076a23b0b..5d21c2a5fe 100644 --- a/plugins/techdocs/CHANGELOG.md +++ b/plugins/techdocs/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-techdocs +## 1.6.2 + +### Patch Changes + +- 863beb49498: Re-add the possibility to have trailing slashes in Techdocs navigation. +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/integration@1.4.5 + - @backstage/plugin-search-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/integration-react@1.1.13 + - @backstage/plugin-techdocs-react@1.1.6 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/plugin-search-common@1.2.3 + ## 1.6.2-next.2 ### Patch Changes diff --git a/plugins/techdocs/package.json b/plugins/techdocs/package.json index 1004055c45..cf6315286b 100644 --- a/plugins/techdocs/package.json +++ b/plugins/techdocs/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs", "description": "The Backstage plugin that renders technical documentation for your components", - "version": "1.6.2-next.2", + "version": "1.6.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/todo-backend/CHANGELOG.md b/plugins/todo-backend/CHANGELOG.md index 84d8807698..17a2eb8cf8 100644 --- a/plugins/todo-backend/CHANGELOG.md +++ b/plugins/todo-backend/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-todo-backend +## 0.1.42 + +### Patch Changes + +- 901f1ada325: Added OpenAPI schema +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/integration@1.4.5 + - @backstage/plugin-catalog-node@1.3.6 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 0.1.42-next.1 ### Patch Changes diff --git a/plugins/todo-backend/package.json b/plugins/todo-backend/package.json index 9385ec0ee6..84da46ced1 100644 --- a/plugins/todo-backend/package.json +++ b/plugins/todo-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-todo-backend", "description": "A Backstage backend plugin that lets you browse TODO comments in your source code", - "version": "0.1.42-next.1", + "version": "0.1.42", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/todo/CHANGELOG.md b/plugins/todo/CHANGELOG.md index 0a0a205d06..960f71c444 100644 --- a/plugins/todo/CHANGELOG.md +++ b/plugins/todo/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-todo +## 0.2.20 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + ## 0.2.20-next.2 ### Patch Changes diff --git a/plugins/todo/package.json b/plugins/todo/package.json index 3dd5822154..f388d19885 100644 --- a/plugins/todo/package.json +++ b/plugins/todo/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-todo", "description": "A Backstage plugin that lets you browse TODO comments in your source code", - "version": "0.2.20-next.2", + "version": "0.2.20", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/user-settings-backend/CHANGELOG.md b/plugins/user-settings-backend/CHANGELOG.md index 4420e63f8e..bf3b2630e0 100644 --- a/plugins/user-settings-backend/CHANGELOG.md +++ b/plugins/user-settings-backend/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-user-settings-backend +## 0.1.9 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/backend-plugin-api@0.5.2 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + ## 0.1.9-next.1 ### Patch Changes diff --git a/plugins/user-settings-backend/package.json b/plugins/user-settings-backend/package.json index 6fdeee038d..25cc5ee812 100644 --- a/plugins/user-settings-backend/package.json +++ b/plugins/user-settings-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-user-settings-backend", "description": "The Backstage backend plugin to manage user settings", - "version": "0.1.9-next.1", + "version": "0.1.9", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/user-settings/CHANGELOG.md b/plugins/user-settings/CHANGELOG.md index 5fd080fe60..7240ceccd9 100644 --- a/plugins/user-settings/CHANGELOG.md +++ b/plugins/user-settings/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-user-settings +## 0.7.3 + +### Patch Changes + +- 473db605a4f: Fix config schema definition. +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-app-api@1.8.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + ## 0.7.3-next.2 ### Patch Changes diff --git a/plugins/user-settings/package.json b/plugins/user-settings/package.json index 98d688bcda..55672e358a 100644 --- a/plugins/user-settings/package.json +++ b/plugins/user-settings/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-user-settings", "description": "A Backstage plugin that provides a settings page", - "version": "0.7.3-next.2", + "version": "0.7.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/vault-backend/CHANGELOG.md b/plugins/vault-backend/CHANGELOG.md index 33fcd6017c..ceaa496252 100644 --- a/plugins/vault-backend/CHANGELOG.md +++ b/plugins/vault-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-vault-backend +## 0.3.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5 + - @backstage/backend-tasks@0.5.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 0.3.1-next.1 ### Patch Changes diff --git a/plugins/vault-backend/package.json b/plugins/vault-backend/package.json index 0f4467ca80..26e30c91ad 100644 --- a/plugins/vault-backend/package.json +++ b/plugins/vault-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-vault-backend", "description": "A Backstage backend plugin that integrates towards Vault", - "version": "0.3.1-next.1", + "version": "0.3.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/vault/CHANGELOG.md b/plugins/vault/CHANGELOG.md index e5b521cdf9..7c2f0f0adf 100644 --- a/plugins/vault/CHANGELOG.md +++ b/plugins/vault/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-vault +## 0.1.12 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/plugin-catalog-react@1.6.0 + - @backstage/core-components@0.13.1 + - @backstage/catalog-model@1.3.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + ## 0.1.12-next.2 ### Patch Changes diff --git a/plugins/vault/package.json b/plugins/vault/package.json index 813217876c..0cc1df1d6b 100644 --- a/plugins/vault/package.json +++ b/plugins/vault/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-vault", "description": "A Backstage plugin that integrates towards Vault", - "version": "0.1.12-next.2", + "version": "0.1.12", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/xcmetrics/CHANGELOG.md b/plugins/xcmetrics/CHANGELOG.md index fbd75b686f..641a0697e0 100644 --- a/plugins/xcmetrics/CHANGELOG.md +++ b/plugins/xcmetrics/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-xcmetrics +## 0.2.38 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.3.0 + - @backstage/core-components@0.13.1 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + ## 0.2.38-next.1 ### Patch Changes diff --git a/plugins/xcmetrics/package.json b/plugins/xcmetrics/package.json index 54dea03612..5f21dd0951 100644 --- a/plugins/xcmetrics/package.json +++ b/plugins/xcmetrics/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-xcmetrics", "description": "A Backstage plugin that shows XCode build metrics for your components", - "version": "0.2.38-next.1", + "version": "0.2.38", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/yarn.lock b/yarn.lock index 82626c846e..39ada76723 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3787,7 +3787,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/catalog-client@^1.4.1, @backstage/catalog-client@workspace:^, @backstage/catalog-client@workspace:packages/catalog-client": +"@backstage/catalog-client@workspace:^, @backstage/catalog-client@workspace:packages/catalog-client": version: 0.0.0-use.local resolution: "@backstage/catalog-client@workspace:packages/catalog-client" dependencies: @@ -4088,110 +4088,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/core-components@npm:^0.12.3": - version: 0.12.5 - resolution: "@backstage/core-components@npm:0.12.5" - dependencies: - "@backstage/config": ^1.0.7 - "@backstage/core-plugin-api": ^1.5.0 - "@backstage/errors": ^1.1.5 - "@backstage/theme": ^0.2.18 - "@backstage/version-bridge": ^1.0.3 - "@material-table/core": ^3.1.0 - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 - "@react-hookz/web": ^20.0.0 - "@types/react-sparklines": ^1.7.0 - "@types/react-text-truncate": ^0.14.0 - ansi-regex: ^6.0.1 - classnames: ^2.2.6 - d3-selection: ^3.0.0 - d3-shape: ^3.0.0 - d3-zoom: ^3.0.0 - dagre: ^0.8.5 - history: ^5.0.0 - immer: ^9.0.1 - lodash: ^4.17.21 - pluralize: ^8.0.0 - prop-types: ^15.7.2 - qs: ^6.9.4 - rc-progress: 3.4.1 - react-helmet: 6.1.0 - react-hook-form: ^7.12.2 - react-markdown: ^8.0.0 - react-sparklines: ^1.7.0 - react-syntax-highlighter: ^15.4.5 - react-text-truncate: ^0.19.0 - react-use: ^17.3.2 - react-virtualized-auto-sizer: ^1.0.6 - react-window: ^1.8.6 - remark-gfm: ^3.0.1 - zen-observable: ^0.10.0 - zod: ~3.18.0 - peerDependencies: - "@types/react": ^16.13.1 || ^17.0.0 - react: ^16.13.1 || ^17.0.0 - react-dom: ^16.13.1 || ^17.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - checksum: 8308c1b90247911f6cf22963b530cef169287f508ff29d159d0c83758134dd43bd5acd2113350690a46a02246bc05dca975bcc38325000aefb1c93c80e2f19c7 - languageName: node - linkType: hard - -"@backstage/core-components@npm:^0.13.0": - version: 0.13.0 - resolution: "@backstage/core-components@npm:0.13.0" - dependencies: - "@backstage/config": ^1.0.7 - "@backstage/core-plugin-api": ^1.5.1 - "@backstage/errors": ^1.1.5 - "@backstage/theme": ^0.2.19 - "@backstage/version-bridge": ^1.0.4 - "@date-io/core": ^1.3.13 - "@material-table/core": ^3.1.0 - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.61 - "@react-hookz/web": ^20.0.0 - "@types/react": ^16.13.1 || ^17.0.0 - "@types/react-sparklines": ^1.7.0 - "@types/react-text-truncate": ^0.14.0 - ansi-regex: ^6.0.1 - classnames: ^2.2.6 - d3-selection: ^3.0.0 - d3-shape: ^3.0.0 - d3-zoom: ^3.0.0 - dagre: ^0.8.5 - history: ^5.0.0 - immer: ^9.0.1 - linkify-react: 4.1.1 - linkifyjs: 4.1.1 - lodash: ^4.17.21 - pluralize: ^8.0.0 - prop-types: ^15.7.2 - qs: ^6.9.4 - rc-progress: 3.4.1 - react-helmet: 6.1.0 - react-hook-form: ^7.12.2 - react-markdown: ^8.0.0 - react-sparklines: ^1.7.0 - react-syntax-highlighter: ^15.4.5 - react-text-truncate: ^0.19.0 - react-use: ^17.3.2 - react-virtualized-auto-sizer: ^1.0.11 - react-window: ^1.8.6 - remark-gfm: ^3.0.1 - zen-observable: ^0.10.0 - zod: ^3.21.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 - react-dom: ^16.13.1 || ^17.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - checksum: 49c5301ff45c6f7516e78e80f46b25d2efb8d9ba510c7718f94c25b1f7d9b2869840db7ec896fbf9d083ceca8fa8cddf718a78eeb074993e95d474195f4bc9cd - languageName: node - linkType: hard - -"@backstage/core-components@workspace:^, @backstage/core-components@workspace:packages/core-components": +"@backstage/core-components@^0.13.0, @backstage/core-components@workspace:^, @backstage/core-components@workspace:packages/core-components": version: 0.0.0-use.local resolution: "@backstage/core-components@workspace:packages/core-components" dependencies: @@ -4266,6 +4163,56 @@ __metadata: languageName: unknown linkType: soft +"@backstage/core-components@npm:^0.12.3": + version: 0.12.5 + resolution: "@backstage/core-components@npm:0.12.5" + dependencies: + "@backstage/config": ^1.0.7 + "@backstage/core-plugin-api": ^1.5.0 + "@backstage/errors": ^1.1.5 + "@backstage/theme": ^0.2.18 + "@backstage/version-bridge": ^1.0.3 + "@material-table/core": ^3.1.0 + "@material-ui/core": ^4.12.2 + "@material-ui/icons": ^4.9.1 + "@material-ui/lab": 4.0.0-alpha.57 + "@react-hookz/web": ^20.0.0 + "@types/react-sparklines": ^1.7.0 + "@types/react-text-truncate": ^0.14.0 + ansi-regex: ^6.0.1 + classnames: ^2.2.6 + d3-selection: ^3.0.0 + d3-shape: ^3.0.0 + d3-zoom: ^3.0.0 + dagre: ^0.8.5 + history: ^5.0.0 + immer: ^9.0.1 + lodash: ^4.17.21 + pluralize: ^8.0.0 + prop-types: ^15.7.2 + qs: ^6.9.4 + rc-progress: 3.4.1 + react-helmet: 6.1.0 + react-hook-form: ^7.12.2 + react-markdown: ^8.0.0 + react-sparklines: ^1.7.0 + react-syntax-highlighter: ^15.4.5 + react-text-truncate: ^0.19.0 + react-use: ^17.3.2 + react-virtualized-auto-sizer: ^1.0.6 + react-window: ^1.8.6 + remark-gfm: ^3.0.1 + zen-observable: ^0.10.0 + zod: ~3.18.0 + peerDependencies: + "@types/react": ^16.13.1 || ^17.0.0 + react: ^16.13.1 || ^17.0.0 + react-dom: ^16.13.1 || ^17.0.0 + react-router-dom: 6.0.0-beta.0 || ^6.3.0 + checksum: 8308c1b90247911f6cf22963b530cef169287f508ff29d159d0c83758134dd43bd5acd2113350690a46a02246bc05dca975bcc38325000aefb1c93c80e2f19c7 + languageName: node + linkType: hard + "@backstage/core-plugin-api@^1.3.0, @backstage/core-plugin-api@^1.5.0, @backstage/core-plugin-api@^1.5.1, @backstage/core-plugin-api@workspace:^, @backstage/core-plugin-api@workspace:packages/core-plugin-api": version: 0.0.0-use.local resolution: "@backstage/core-plugin-api@workspace:packages/core-plugin-api" @@ -4395,28 +4342,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/integration-react@npm:^1.1.12": - version: 1.1.12 - resolution: "@backstage/integration-react@npm:1.1.12" - dependencies: - "@backstage/config": ^1.0.7 - "@backstage/core-components": ^0.13.0 - "@backstage/core-plugin-api": ^1.5.1 - "@backstage/integration": ^1.4.4 - "@backstage/theme": ^0.2.19 - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.61 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 - react-dom: ^16.13.1 || ^17.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - checksum: c7ae5754f074f3cee020a5dfca50deecaccd0f5a8510a1446bb1070d7b9b6e32a82564cff77b98ef63b19fde5a29aceaf4b8e8662dd1a3ed00c408c8ae06dc65 - languageName: node - linkType: hard - -"@backstage/integration-react@workspace:^, @backstage/integration-react@workspace:packages/integration-react": +"@backstage/integration-react@^1.1.12, @backstage/integration-react@workspace:^, @backstage/integration-react@workspace:packages/integration-react": version: 0.0.0-use.local resolution: "@backstage/integration-react@workspace:packages/integration-react" dependencies: @@ -4447,22 +4373,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/integration@npm:^1.4.4": - version: 1.4.4 - resolution: "@backstage/integration@npm:1.4.4" - dependencies: - "@backstage/config": ^1.0.7 - "@backstage/errors": ^1.1.5 - "@octokit/auth-app": ^4.0.0 - "@octokit/rest": ^19.0.3 - cross-fetch: ^3.1.5 - git-url-parse: ^13.0.0 - lodash: ^4.17.21 - luxon: ^3.0.0 - checksum: 715310efe55b3c2fb93f5197bc1422917822a15a7550aae9d84b257bb0a6cff2bfab9a44296a977a56651499fbecd0ef31f954f92a62cc94bfbc7319d9a48c04 - languageName: node - linkType: hard - "@backstage/integration@workspace:^, @backstage/integration@workspace:packages/integration": version: 0.0.0-use.local resolution: "@backstage/integration@workspace:packages/integration" @@ -5626,7 +5536,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-catalog-common@^1.0.10, @backstage/plugin-catalog-common@^1.0.13, @backstage/plugin-catalog-common@workspace:^, @backstage/plugin-catalog-common@workspace:plugins/catalog-common": +"@backstage/plugin-catalog-common@^1.0.10, @backstage/plugin-catalog-common@workspace:^, @backstage/plugin-catalog-common@workspace:plugins/catalog-common": version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-common@workspace:plugins/catalog-common" dependencies: @@ -5764,43 +5674,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-catalog-react@npm:^1.2.4, @backstage/plugin-catalog-react@npm:^1.5.0": - version: 1.5.0 - resolution: "@backstage/plugin-catalog-react@npm:1.5.0" - dependencies: - "@backstage/catalog-client": ^1.4.1 - "@backstage/catalog-model": ^1.3.0 - "@backstage/core-components": ^0.13.0 - "@backstage/core-plugin-api": ^1.5.1 - "@backstage/errors": ^1.1.5 - "@backstage/integration": ^1.4.4 - "@backstage/plugin-catalog-common": ^1.0.13 - "@backstage/plugin-permission-common": ^0.7.5 - "@backstage/plugin-permission-react": ^0.4.12 - "@backstage/theme": ^0.2.19 - "@backstage/types": ^1.0.2 - "@backstage/version-bridge": ^1.0.4 - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.61 - "@types/react": ^16.13.1 || ^17.0.0 - classnames: ^2.2.6 - jwt-decode: ^3.1.0 - lodash: ^4.17.21 - material-ui-popup-state: ^1.9.3 - qs: ^6.9.4 - react-use: ^17.2.4 - yaml: ^2.0.0 - zen-observable: ^0.10.0 - peerDependencies: - react: ^16.13.1 || ^17.0.0 - react-dom: ^16.13.1 || ^17.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - checksum: 0ffa1a9ecf142df389e2ecdbda1fae1718d4b65782654d99cd1de562520aae6ecc4677c15aff50a10fee9d9e89a35d2978e53da8f5f7129deef02c7044eb6e46 - languageName: node - linkType: hard - -"@backstage/plugin-catalog-react@workspace:^, @backstage/plugin-catalog-react@workspace:plugins/catalog-react": +"@backstage/plugin-catalog-react@^1.2.4, @backstage/plugin-catalog-react@^1.5.0, @backstage/plugin-catalog-react@workspace:^, @backstage/plugin-catalog-react@workspace:plugins/catalog-react": version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-react@workspace:plugins/catalog-react" dependencies: @@ -7162,39 +7036,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-home@npm:^0.5.1": - version: 0.5.1 - resolution: "@backstage/plugin-home@npm:0.5.1" - dependencies: - "@backstage/catalog-model": ^1.3.0 - "@backstage/config": ^1.0.7 - "@backstage/core-components": ^0.13.0 - "@backstage/core-plugin-api": ^1.5.1 - "@backstage/plugin-catalog-react": ^1.5.0 - "@backstage/theme": ^0.2.19 - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.61 - "@rjsf/core-v5": "npm:@rjsf/core@5.6.0" - "@rjsf/material-ui": 5.6.0 - "@rjsf/utils": 5.6.0 - "@rjsf/validator-ajv8": 5.6.0 - "@types/react": ^16.13.1 || ^17.0.0 - lodash: ^4.17.21 - object-hash: ^3.0.0 - react-grid-layout: ^1.3.4 - react-resizable: ^3.0.4 - react-use: ^17.2.4 - zod: ~3.21.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 - react-dom: ^16.13.1 || ^17.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - checksum: 0470e0d4848818c59fdf5c3765b769c22bf2b47e26b0ed0c80398baac6a8e1ac703e94152dc20498bfda790aec18a2af65605fcd8c6eb2e7ba7b85eb6ce80b69 - languageName: node - linkType: hard - -"@backstage/plugin-home@workspace:^, @backstage/plugin-home@workspace:plugins/home": +"@backstage/plugin-home@^0.5.1, @backstage/plugin-home@workspace:^, @backstage/plugin-home@workspace:plugins/home": version: 0.0.0-use.local resolution: "@backstage/plugin-home@workspace:plugins/home" dependencies: @@ -7957,7 +7799,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-permission-common@^0.7.5, @backstage/plugin-permission-common@workspace:^, @backstage/plugin-permission-common@workspace:plugins/permission-common": +"@backstage/plugin-permission-common@workspace:^, @backstage/plugin-permission-common@workspace:plugins/permission-common": version: 0.0.0-use.local resolution: "@backstage/plugin-permission-common@workspace:plugins/permission-common" dependencies: @@ -7995,7 +7837,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-permission-react@^0.4.12, @backstage/plugin-permission-react@workspace:^, @backstage/plugin-permission-react@workspace:plugins/permission-react": +"@backstage/plugin-permission-react@workspace:^, @backstage/plugin-permission-react@workspace:plugins/permission-react": version: 0.0.0-use.local resolution: "@backstage/plugin-permission-react@workspace:plugins/permission-react" dependencies: @@ -9768,7 +9610,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/version-bridge@^1.0.3, @backstage/version-bridge@^1.0.4, @backstage/version-bridge@workspace:^, @backstage/version-bridge@workspace:packages/version-bridge": +"@backstage/version-bridge@^1.0.3, @backstage/version-bridge@workspace:^, @backstage/version-bridge@workspace:packages/version-bridge": version: 0.0.0-use.local resolution: "@backstage/version-bridge@workspace:packages/version-bridge" dependencies: From 811eeb2f7c748418f5ecab9c3157d095c9374fe4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Carmo?= Date: Tue, 9 May 2023 16:07:45 +0100 Subject: [PATCH 070/213] Update talkdesk contributor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: André Carmo Signed-off-by: Christopher Diaz --- ADOPTERS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ADOPTERS.md b/ADOPTERS.md index 7db99119dc..d3fc55966f 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -14,7 +14,7 @@ _You can do this by using the [Adopter form](https://info.backstage.spotify.com/ | [American Airlines](https://www.aa.com) | [@paulpach](https://github.com/paulpach) | Central place for developers to develop and maintain applications | | [Kiwi.com](https://kiwi.com) | [@aexvir](https://github.com/aexvir) | Replacing the frontend of [The Zoo](https://github.com/kiwicom/the-zoo), their service registry. | | [Voi](https://www.voiscooters.com/) | [@K-Phoen](https://github.com/K-Phoen) | Developer portal, main gateway to our infrastructure, documentation and internal tooling. | -| [Talkdesk](https://www.talkdesk.com) | [@jaime-talkdesk](https://github.com/jaime-talkdesk) | Initial work for Engineering Portal and Self Provisioning to R&D | +| [Talkdesk](https://www.talkdesk.com) | [@atmcarmo](https://github.com/atmcarmo) | Engineering Portal with all of our apps and services, overview about our deployment regions and scaffolding new services. | | [Wealthsimple](https://www.wealthsimple.com) | [@andrewthauer](https://github.com/andrewthauer) | Developer portal, service catalog, documentation and tooling | | [Grab](https://www.grab.com) | [@althafh](https://github.com/althafh) | Initial work as a unified interface for all of Grab's internal tooling | | [Telenor Sweden](https://www.telenor.se) | [@O5ten](https://github.com/O5ten) | Building a developer portal for scaffolding projects towards our unified build environment and microservice stacks | From fc0badcfbd2959fe2867989c2d3bc994f0452c3c Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Tue, 16 May 2023 12:43:10 +0200 Subject: [PATCH 071/213] config-loader: avoid setTimeout in file watching tests Signed-off-by: Patrik Oldsberg Signed-off-by: Christopher Diaz --- .../src/sources/FileConfigSource.test.ts | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/packages/config-loader/src/sources/FileConfigSource.test.ts b/packages/config-loader/src/sources/FileConfigSource.test.ts index c6980006c0..6479fb77c0 100644 --- a/packages/config-loader/src/sources/FileConfigSource.test.ts +++ b/packages/config-loader/src/sources/FileConfigSource.test.ts @@ -64,9 +64,10 @@ describe('FileConfigSource', () => { const source = FileConfigSource.create({ path: tmp.resolve('a.yaml') }); - setTimeout(() => { - tmp.write('a.yaml', 'a: 2'); - }, 10); + source + .readConfigData() + .next() + .then(() => tmp.write('a.yaml', 'a: 2')); await expect(readN(source, 2)).resolves.toEqual([ [{ data: { a: 1 }, context: 'a.yaml', path: tmp.resolve('a.yaml') }], @@ -130,9 +131,10 @@ describe('FileConfigSource', () => { substitutionFunc: async name => (name === 'MY_VALUE' ? '6' : '7'), }); - setTimeout(() => { - tmp.write('x.yaml', '${MY_OTHER_VALUE}'); - }, 10); + source + .readConfigData() + .next() + .then(() => tmp.write('x.yaml', '${MY_OTHER_VALUE}')); await expect(readN(source, 2)).resolves.toEqual([ [{ data: { a: '6' }, context: 'a.yaml', path: tmp.resolve('a.yaml') }], @@ -150,9 +152,10 @@ describe('FileConfigSource', () => { path: tmp.resolve('a.yaml'), }); - setTimeout(() => { - tmp.write('x.txt', '9'); - }, 10); + source + .readConfigData() + .next() + .then(() => tmp.write('x.txt', '9')); await expect(readN(source, 2)).resolves.toEqual([ [{ data: { a: '8' }, context: 'a.yaml', path: tmp.resolve('a.yaml') }], From d11b742b040b41856d581dcaf3e5c6e34877052b Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Tue, 16 May 2023 13:10:33 +0200 Subject: [PATCH 072/213] config-loader: back to setTimeout with bigger margin Signed-off-by: Patrik Oldsberg Signed-off-by: Christopher Diaz --- .../src/sources/FileConfigSource.test.ts | 21 ++++++++----------- 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/packages/config-loader/src/sources/FileConfigSource.test.ts b/packages/config-loader/src/sources/FileConfigSource.test.ts index 6479fb77c0..61cdeed272 100644 --- a/packages/config-loader/src/sources/FileConfigSource.test.ts +++ b/packages/config-loader/src/sources/FileConfigSource.test.ts @@ -64,10 +64,9 @@ describe('FileConfigSource', () => { const source = FileConfigSource.create({ path: tmp.resolve('a.yaml') }); - source - .readConfigData() - .next() - .then(() => tmp.write('a.yaml', 'a: 2')); + setTimeout(() => { + tmp.write('a.yaml', 'a: 2'); + }, 100); await expect(readN(source, 2)).resolves.toEqual([ [{ data: { a: 1 }, context: 'a.yaml', path: tmp.resolve('a.yaml') }], @@ -131,10 +130,9 @@ describe('FileConfigSource', () => { substitutionFunc: async name => (name === 'MY_VALUE' ? '6' : '7'), }); - source - .readConfigData() - .next() - .then(() => tmp.write('x.yaml', '${MY_OTHER_VALUE}')); + setTimeout(() => { + tmp.write('x.yaml', '${MY_OTHER_VALUE}'); + }, 100); await expect(readN(source, 2)).resolves.toEqual([ [{ data: { a: '6' }, context: 'a.yaml', path: tmp.resolve('a.yaml') }], @@ -152,10 +150,9 @@ describe('FileConfigSource', () => { path: tmp.resolve('a.yaml'), }); - source - .readConfigData() - .next() - .then(() => tmp.write('x.txt', '9')); + setTimeout(() => { + tmp.write('x.txt', '9'); + }, 100); await expect(readN(source, 2)).resolves.toEqual([ [{ data: { a: '8' }, context: 'a.yaml', path: tmp.resolve('a.yaml') }], From c837a02c4c6a1eb7885d3705095dba7207e76aa2 Mon Sep 17 00:00:00 2001 From: Marcus Lindfeldt Date: Thu, 11 May 2023 16:26:38 +0200 Subject: [PATCH 073/213] fix: broken link to node-postgres docs Signed-off-by: Marcus Lindfeldt Signed-off-by: Christopher Diaz --- docs/tutorials/switching-sqlite-postgres.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/tutorials/switching-sqlite-postgres.md b/docs/tutorials/switching-sqlite-postgres.md index b87a77f4ed..87afabda60 100644 --- a/docs/tutorials/switching-sqlite-postgres.md +++ b/docs/tutorials/switching-sqlite-postgres.md @@ -37,7 +37,7 @@ backend: connection: ':memory:' # highlight-remove-end # highlight-add-start - # config options: https://node-postgres.com/api/client + # config options: https://node-postgres.com/apis/client client: pg connection: host: ${POSTGRES_HOST} @@ -72,7 +72,7 @@ backend: connection: ':memory:' # highlight-remove-end # highlight-add-start - # config options: https://node-postgres.com/api/client + # config options: https://node-postgres.com/apis/client client: pg connection: host: ${POSTGRES_HOST} From 81b73f57e378b61d65ca8170967a50a364d597bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Thu, 11 May 2023 18:14:02 +0200 Subject: [PATCH 074/213] Update code in readme a bit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw Signed-off-by: Christopher Diaz --- .changeset/perfect-readers-attack.md | 5 +++++ .../README.md | 19 ++++++------------- 2 files changed, 11 insertions(+), 13 deletions(-) create mode 100644 .changeset/perfect-readers-attack.md diff --git a/.changeset/perfect-readers-attack.md b/.changeset/perfect-readers-attack.md new file mode 100644 index 0000000000..93d205eb9c --- /dev/null +++ b/.changeset/perfect-readers-attack.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend-module-gitlab': patch +--- + +Tweak README diff --git a/plugins/scaffolder-backend-module-gitlab/README.md b/plugins/scaffolder-backend-module-gitlab/README.md index d071ca0cf6..340b57bbf8 100644 --- a/plugins/scaffolder-backend-module-gitlab/README.md +++ b/plugins/scaffolder-backend-module-gitlab/README.md @@ -20,9 +20,10 @@ Configure the action: // packages/backend/src/plugins/scaffolder.ts import { - createGitlabProjectAccessTokenAction, createGitlabProjectAccessTokenAction, createGitlabProjectDeployTokenAction, + createGitlabProjectVariableAction, + createGitlabGroupEnsureExistsAction, } from '@backstage/plugin-scaffolder-backend-module-gitlab'; // Create BuiltIn Actions @@ -36,18 +37,10 @@ const builtInActions = createBuiltinActions({ // Add Gitlab Actions const actions = [ ...builtInActions, - createGitlabProjectAccessTokenAction({ - integrations: integrations, - }), - createGitlabProjectAccessTokenAction({ - integrations: integrations, - }), - createGitlabProjectDeployTokenAction({ - integrations: integrations, - }), - createGitlabGroupEnsureExistsAction({ - integrations: integrations, - }), + createGitlabProjectAccessTokenAction({ integrations: integrations }), + createGitlabProjectDeployTokenAction({ integrations: integrations }), + createGitlabProjectVariableAction({ integrations: integrations }), + createGitlabGroupEnsureExistsAction({ integrations: integrations }), ]; // Create Scaffolder Router From a5baeea2cb8715a9f2f28df37bb4c0132eb90d83 Mon Sep 17 00:00:00 2001 From: Christopher Diaz Date: Mon, 8 May 2023 10:17:18 -0400 Subject: [PATCH 075/213] feat(explore): adds optional token manager to collator to authenticate requests Signed-off-by: Christopher Diaz --- .changeset/lovely-impalas-sell.md | 5 +++++ .../collators/ToolDocumentCollatorFactory.ts | 20 +++++++++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 .changeset/lovely-impalas-sell.md diff --git a/.changeset/lovely-impalas-sell.md b/.changeset/lovely-impalas-sell.md new file mode 100644 index 0000000000..e8e3ad8706 --- /dev/null +++ b/.changeset/lovely-impalas-sell.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-search-backend-module-explore': patch +--- + +Allows for an optional tokenManager to authenticate requests from the collator to the explore backend diff --git a/plugins/search-backend-module-explore/src/collators/ToolDocumentCollatorFactory.ts b/plugins/search-backend-module-explore/src/collators/ToolDocumentCollatorFactory.ts index dd9872acec..bf6f07839b 100644 --- a/plugins/search-backend-module-explore/src/collators/ToolDocumentCollatorFactory.ts +++ b/plugins/search-backend-module-explore/src/collators/ToolDocumentCollatorFactory.ts @@ -14,7 +14,10 @@ * limitations under the License. */ -import { PluginEndpointDiscovery } from '@backstage/backend-common'; +import { + PluginEndpointDiscovery, + TokenManager, +} from '@backstage/backend-common'; import { Config } from '@backstage/config'; import { ExploreTool } from '@backstage/plugin-explore-common'; import { @@ -40,6 +43,7 @@ export interface ToolDocument extends IndexableDocument, ExploreTool {} export type ToolDocumentCollatorFactoryOptions = { discovery: PluginEndpointDiscovery; logger: Logger; + tokenManager?: TokenManager; }; /** @@ -52,10 +56,12 @@ export class ToolDocumentCollatorFactory implements DocumentCollatorFactory { private readonly discovery: PluginEndpointDiscovery; private readonly logger: Logger; + private readonly tokenManager?: TokenManager; private constructor(options: ToolDocumentCollatorFactoryOptions) { this.discovery = options.discovery; this.logger = options.logger; + this.tokenManager = options.tokenManager; } static fromConfig( @@ -87,7 +93,17 @@ export class ToolDocumentCollatorFactory implements DocumentCollatorFactory { private async fetchTools() { const baseUrl = await this.discovery.getBaseUrl('explore'); - const response = await fetch(`${baseUrl}/tools`); + + let headers = {}; + + if (this.tokenManager) { + const { token } = await this.tokenManager.getToken(); + headers = { + Authorization: `Bearer ${token}`, + }; + } + + const response = await fetch(`${baseUrl}/tools`, headers); if (!response.ok) { throw new Error( From 394295286e0e4ed9f32e677ead3c9a2b1e283f94 Mon Sep 17 00:00:00 2001 From: Christopher Diaz Date: Mon, 8 May 2023 10:45:36 -0400 Subject: [PATCH 076/213] update changeset for spelling Signed-off-by: Christopher Diaz --- .changeset/lovely-impalas-sell.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/lovely-impalas-sell.md b/.changeset/lovely-impalas-sell.md index e8e3ad8706..b52f11695c 100644 --- a/.changeset/lovely-impalas-sell.md +++ b/.changeset/lovely-impalas-sell.md @@ -2,4 +2,4 @@ '@backstage/plugin-search-backend-module-explore': patch --- -Allows for an optional tokenManager to authenticate requests from the collator to the explore backend +Allows for an optional token manager to authenticate requests from the collator to the explore backend From 47b9f0fe93682ea51de2d5f660690d94270128a3 Mon Sep 17 00:00:00 2001 From: Christopher Diaz Date: Mon, 15 May 2023 16:54:43 -0400 Subject: [PATCH 077/213] update api reports Signed-off-by: Christopher Diaz --- plugins/search-backend-module-explore/api-report.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/search-backend-module-explore/api-report.md b/plugins/search-backend-module-explore/api-report.md index 80e8c0c06b..50cda184a9 100644 --- a/plugins/search-backend-module-explore/api-report.md +++ b/plugins/search-backend-module-explore/api-report.md @@ -12,6 +12,7 @@ import { IndexableDocument } from '@backstage/plugin-search-common'; import { Logger } from 'winston'; import { PluginEndpointDiscovery } from '@backstage/backend-common'; import { Readable } from 'stream'; +import { TokenManager } from '@backstage/backend-common'; // @public export interface ToolDocument extends IndexableDocument, ExploreTool {} @@ -35,5 +36,6 @@ export class ToolDocumentCollatorFactory implements DocumentCollatorFactory { export type ToolDocumentCollatorFactoryOptions = { discovery: PluginEndpointDiscovery; logger: Logger; + tokenManager?: TokenManager; }; ``` From 3361cb8a32a516d4f5922589b5f41a207aea743b Mon Sep 17 00:00:00 2001 From: Christopher Diaz Date: Tue, 16 May 2023 10:49:44 -0400 Subject: [PATCH 078/213] update changelog and docs Signed-off-by: Christopher Diaz --- .changeset/lovely-impalas-sell.md | 13 ++++++++++++- plugins/search-backend-module-explore/README.md | 15 +++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/.changeset/lovely-impalas-sell.md b/.changeset/lovely-impalas-sell.md index b52f11695c..fa3ae9d5c5 100644 --- a/.changeset/lovely-impalas-sell.md +++ b/.changeset/lovely-impalas-sell.md @@ -2,4 +2,15 @@ '@backstage/plugin-search-backend-module-explore': patch --- -Allows for an optional token manager to authenticate requests from the collator to the explore backend +Allows for an optional token manager to authenticate requests from the collator to the explore backend. For example: + +``` + indexBuilder.addCollator({ + schedule: every10MinutesSchedule, + factory: ToolDocumentCollatorFactory.fromConfig(env.config, { + discovery: env.discovery, + logger: env.logger, + tokenManager: env.tokenManager, + }), + }); +``` diff --git a/plugins/search-backend-module-explore/README.md b/plugins/search-backend-module-explore/README.md index a87f2d78f9..7d0f25b543 100644 --- a/plugins/search-backend-module-explore/README.md +++ b/plugins/search-backend-module-explore/README.md @@ -39,3 +39,18 @@ backend.add(searchPlugin()); backend.add(searchModuleExploreCollator({ schedule })); backend.start(); ``` + +### Using Auth Middleware + +If your Backstage instance uses service-to-service authentication you can pass an optional tokenManager to the collator factory. This will ensure that the collator makes authenticated requests to the explore backend. + +```tsx +indexBuilder.addCollator({ + schedule: every10MinutesSchedule, + factory: ToolDocumentCollatorFactory.fromConfig(env.config, { + discovery: env.discovery, + logger: env.logger, + tokenManager: env.tokenManager, + }), +}); +``` From 1e646bdaa712a65eefeb90d59d287974bdb4936b Mon Sep 17 00:00:00 2001 From: Christopher Diaz Date: Tue, 16 May 2023 14:14:53 -0400 Subject: [PATCH 079/213] update changelog docs Signed-off-by: Christopher Diaz --- plugins/search-backend-module-explore/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/search-backend-module-explore/README.md b/plugins/search-backend-module-explore/README.md index 7d0f25b543..e775cf42b6 100644 --- a/plugins/search-backend-module-explore/README.md +++ b/plugins/search-backend-module-explore/README.md @@ -42,7 +42,7 @@ backend.start(); ### Using Auth Middleware -If your Backstage instance uses service-to-service authentication you can pass an optional tokenManager to the collator factory. This will ensure that the collator makes authenticated requests to the explore backend. +If your Backstage instance uses service-to-service authentication you can pass an optional `tokenManager` to the collator factory. This will ensure that the collator makes authenticated requests to the explore backend. ```tsx indexBuilder.addCollator({ From 2ebf6eaf82d080313e064d2c6d6585456bee8f42 Mon Sep 17 00:00:00 2001 From: Christophe Fargette Date: Tue, 16 May 2023 23:48:04 -0400 Subject: [PATCH 080/213] Add 7 Janus plugins Signed-off-by: Christophe Fargette --- microsite/data/plugins/3scale.yaml | 10 ++++++++++ microsite/data/plugins/jfrog-artifactory.yaml | 10 ++++++++++ microsite/data/plugins/keycloak.yaml | 10 ++++++++++ microsite/data/plugins/ocm.yaml | 10 ++++++++++ microsite/data/plugins/quay.yaml | 10 ++++++++++ microsite/data/plugins/tekton.yaml | 10 ++++++++++ microsite/data/plugins/topology.yaml | 10 ++++++++++ 7 files changed, 70 insertions(+) create mode 100644 microsite/data/plugins/3scale.yaml create mode 100644 microsite/data/plugins/jfrog-artifactory.yaml create mode 100644 microsite/data/plugins/keycloak.yaml create mode 100644 microsite/data/plugins/ocm.yaml create mode 100644 microsite/data/plugins/quay.yaml create mode 100644 microsite/data/plugins/tekton.yaml create mode 100644 microsite/data/plugins/topology.yaml diff --git a/microsite/data/plugins/3scale.yaml b/microsite/data/plugins/3scale.yaml new file mode 100644 index 0000000000..c190ed7e9e --- /dev/null +++ b/microsite/data/plugins/3scale.yaml @@ -0,0 +1,10 @@ +--- +title: APIs with 3scale +author: Red Hat +authorUrl: https://redhat.com +category: Discovery +description: Synchronize 3scale content into the Backstage catalog. +documentation: https://janus-idp.io/plugins/3scale +iconUrl: http://janus-idp.io/images/plugins/3scale.svg +npmPackageName: '@janus-idp/backstage-plugin-3scale-backend' +addedDate: '2023-05-15' diff --git a/microsite/data/plugins/jfrog-artifactory.yaml b/microsite/data/plugins/jfrog-artifactory.yaml new file mode 100644 index 0000000000..279cbc161e --- /dev/null +++ b/microsite/data/plugins/jfrog-artifactory.yaml @@ -0,0 +1,10 @@ +--- +title: Container Image Registry for JFrog Artifactory +author: Red Hat +authorUrl: https://redhat.com +category: Image +description: View container image details from JFrog Artifactory in Backstage. +documentation: https://janus-idp.io/plugins/jfrog-artifactory +iconUrl: http://janus-idp.io/images/plugins/jfrog-artifactory.svg +npmPackageName: '@janus-idp/backstage-plugin-jfrog-artifactory' +addedDate: '2023-05-15' diff --git a/microsite/data/plugins/keycloak.yaml b/microsite/data/plugins/keycloak.yaml new file mode 100644 index 0000000000..882d43f515 --- /dev/null +++ b/microsite/data/plugins/keycloak.yaml @@ -0,0 +1,10 @@ +--- +title: Authentication and Authorization with Keycloak +author: Red Hat +authorUrl: https://redhat.com +category: Authentication +description: Load users and groups from Keycloak, enabling use of multiple authentication providers to be applied to Backstage entities. +documentation: https://janus-idp.io/plugins/keycloak +iconUrl: http://janus-idp.io/images/plugins/keycloak.svg +npmPackageName: '@janus-idp/backstage-plugin-keycloak-backend' +addedDate: '2023-05-15' diff --git a/microsite/data/plugins/ocm.yaml b/microsite/data/plugins/ocm.yaml new file mode 100644 index 0000000000..15c23a0fb7 --- /dev/null +++ b/microsite/data/plugins/ocm.yaml @@ -0,0 +1,10 @@ +--- +title: Multi Cluster View with OCM +author: Red Hat +authorUrl: https://redhat.com +category: OCM +description: View clusters from OCM's MultiClusterHub and MultiCluster Engine in Backstage. +documentation: https://janus-idp.io/plugins/ocm +iconUrl: http://janus-idp.io/images/plugins/ocm.svg +npmPackageName: '@janus-idp/backstage-plugin-ocm' +addedDate: '2023-05-15' diff --git a/microsite/data/plugins/quay.yaml b/microsite/data/plugins/quay.yaml new file mode 100644 index 0000000000..e4aeb1ec1a --- /dev/null +++ b/microsite/data/plugins/quay.yaml @@ -0,0 +1,10 @@ +--- +title: Container Image Registry for Quay +author: Red Hat +authorUrl: https://redhat.com +category: Image +description: View container image details from Quay in Backstage. +documentation: https://janus-idp.io/plugins/quay +iconUrl: http://janus-idp.io/images/plugins/quay.svg +npmPackageName: '@janus-idp/backstage-plugin-quay' +addedDate: '2023-05-15' diff --git a/microsite/data/plugins/tekton.yaml b/microsite/data/plugins/tekton.yaml new file mode 100644 index 0000000000..b1ebfb1349 --- /dev/null +++ b/microsite/data/plugins/tekton.yaml @@ -0,0 +1,10 @@ +--- +title: Pipelines with Tekton +author: Red Hat +authorUrl: https://redhat.com +category: CI +description: Easily view Tekton PipelineRun status for your services in Backstage. +documentation: https://janus-idp.io/plugins/tekton +iconUrl: http://janus-idp.io/images/plugins/tekton.svg +npmPackageName: '@janus-idp/backstage-plugin-tekton' +addedDate: '2023-05-15' diff --git a/microsite/data/plugins/topology.yaml b/microsite/data/plugins/topology.yaml new file mode 100644 index 0000000000..2f26f7c755 --- /dev/null +++ b/microsite/data/plugins/topology.yaml @@ -0,0 +1,10 @@ +--- +title: Application Topology for Kubernetes +author: Red Hat +authorUrl: https://redhat.com +category: Kubernetes +description: Visualize the deployment status and related resources of your applications deployed on any Kubernetes cluster. +documentation: https://janus-idp.io/plugins/topology +iconUrl: http://janus-idp.io/images/plugins/topology.svg +npmPackageName: '@janus-idp/backstage-plugin-topology' +addedDate: '2023-05-15' From 65b63dba5c1abdc4d8ce4f4ab53125d9f0102c3b Mon Sep 17 00:00:00 2001 From: Sergey Shevchenko Date: Wed, 17 May 2023 10:58:25 +0300 Subject: [PATCH 081/213] docs: Fix authenticate-api-requests doc Signed-off-by: Sergey Shevchenko --- contrib/docs/tutorials/authenticate-api-requests.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/contrib/docs/tutorials/authenticate-api-requests.md b/contrib/docs/tutorials/authenticate-api-requests.md index 49b6ae0a4d..c14eaebb54 100644 --- a/contrib/docs/tutorials/authenticate-api-requests.md +++ b/contrib/docs/tutorials/authenticate-api-requests.md @@ -82,10 +82,20 @@ export const createAuthMiddleware = async ( }; ``` +Install cookie-parser: + +```bash +# From your Backstage root directory +yarn add --cwd packages/backend cookie-parser +``` + +Update routes in `packages/backend/src/index.ts`: + ```typescript // packages/backend/src/index.ts from a create-app deployment import { createAuthMiddleware } from './authMiddleware'; +import cookieParser from 'cookie-parser'; // ... From 933fe2c34447095c6b8e26aa667a290cbefd3f98 Mon Sep 17 00:00:00 2001 From: Sergey Shevchenko Date: Wed, 17 May 2023 11:30:06 +0300 Subject: [PATCH 082/213] docs: Update plugin installation commands Signed-off-by: Sergey Shevchenko --- .changeset/honest-peas-guess.md | 7 +++++++ plugins/analytics-module-ga4/README.md | 6 +++++- plugins/devtools-backend/README.md | 3 +-- plugins/linguist-backend/README.md | 3 +-- 4 files changed, 14 insertions(+), 5 deletions(-) create mode 100644 .changeset/honest-peas-guess.md diff --git a/.changeset/honest-peas-guess.md b/.changeset/honest-peas-guess.md new file mode 100644 index 0000000000..cac2330a06 --- /dev/null +++ b/.changeset/honest-peas-guess.md @@ -0,0 +1,7 @@ +--- +'@backstage/plugin-analytics-module-ga4': patch +'@backstage/plugin-devtools-backend': patch +'@backstage/plugin-linguist-backend': patch +--- + +Update plugin installation docs to be more consistent across documentations diff --git a/plugins/analytics-module-ga4/README.md b/plugins/analytics-module-ga4/README.md index d060c9d9b1..e9d227788a 100644 --- a/plugins/analytics-module-ga4/README.md +++ b/plugins/analytics-module-ga4/README.md @@ -9,7 +9,11 @@ This plugin contains no other functionality. ## Installation 1. Install the plugin package in your Backstage app: - `cd packages/app && yarn add @backstage/plugin-analytics-module-ga4` + +```sh +yarn add --cwd packages/app @backstage/@backstage/plugin-analytics-module-ga4 +``` + 2. Wire up the API implementation to your App: ```tsx diff --git a/plugins/devtools-backend/README.md b/plugins/devtools-backend/README.md index e505a04963..7304ce33d7 100644 --- a/plugins/devtools-backend/README.md +++ b/plugins/devtools-backend/README.md @@ -10,8 +10,7 @@ Here's how to get the DevTools Backend up and running: ```sh # From the Backstage root directory - cd packages/backend - yarn add @backstage/plugin-devtools-backend + yarn add --cwd packages/backend @backstage/plugin-devtools-backend ``` 2. Then we will create a new file named `packages/backend/src/plugins/devtools.ts`, and add the diff --git a/plugins/linguist-backend/README.md b/plugins/linguist-backend/README.md index 46c067fb5a..95599d421c 100644 --- a/plugins/linguist-backend/README.md +++ b/plugins/linguist-backend/README.md @@ -14,8 +14,7 @@ Here's how to get the backend up and running: ```sh # From the Backstage root directory - cd packages/backend - yarn add @backstage/plugin-linguist-backend + yarn add --cwd packages/backend @backstage/plugin-linguist-backend ``` 2. Then we will create a new file named `packages/backend/src/plugins/linguist.ts`, and add the From 84a5c7724c7e35a80f0d7f9201fae9d0da171391 Mon Sep 17 00:00:00 2001 From: Rogerio Angeliski Date: Fri, 5 May 2023 19:27:59 -0300 Subject: [PATCH 083/213] fix: corrected the disconnection behavior to get stream logs Close #15002 Signed-off-by: Rogerio Angeliski --- .changeset/chatty-ads-attack.md | 5 + .../src/hooks/useEventStream.ts | 130 ++++++++++-------- 2 files changed, 79 insertions(+), 56 deletions(-) create mode 100644 .changeset/chatty-ads-attack.md diff --git a/.changeset/chatty-ads-attack.md b/.changeset/chatty-ads-attack.md new file mode 100644 index 0000000000..709db946dd --- /dev/null +++ b/.changeset/chatty-ads-attack.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-react': patch +--- + +fixed refresh problem when backstage backend disconnects without any feedback to user. Now we send a generic message and try to reconnect after 15 seconds diff --git a/plugins/scaffolder-react/src/hooks/useEventStream.ts b/plugins/scaffolder-react/src/hooks/useEventStream.ts index ec49911471..ad802dba99 100644 --- a/plugins/scaffolder-react/src/hooks/useEventStream.ts +++ b/plugins/scaffolder-react/src/hooks/useEventStream.ts @@ -169,67 +169,85 @@ export const useTaskEventStream = (taskId: string): TaskStream => { let didCancel = false; let subscription: Subscription | undefined; let logPusher: NodeJS.Timeout | undefined; - - scaffolderApi.getTask(taskId).then( - task => { - if (didCancel) { - return; - } - dispatch({ type: 'INIT', data: task }); - - // TODO(blam): Use a normal fetch to fetch the current log for the event stream - // and use that for an INIT_EVENTs dispatch event, and then - // use the last event ID to subscribe using after option to - // stream logs. Without this, if you have a lot of logs, it can look like the - // task is being rebuilt on load as it progresses through the steps at a slower - // rate whilst it builds the status from the event logs - const observable = scaffolderApi.streamLogs({ taskId }); - - const collectedLogEvents = new Array(); - - function emitLogs() { - if (collectedLogEvents.length) { - const logs = collectedLogEvents.splice( - 0, - collectedLogEvents.length, - ); - dispatch({ type: 'LOGS', data: logs }); + let retryCount = 1; + const startStreamLogProcess = () => + scaffolderApi.getTask(taskId).then( + task => { + if (didCancel) { + return; } - } + dispatch({ type: 'INIT', data: task }); - logPusher = setInterval(emitLogs, 500); + // TODO(blam): Use a normal fetch to fetch the current log for the event stream + // and use that for an INIT_EVENTs dispatch event, and then + // use the last event ID to subscribe using after option to + // stream logs. Without this, if you have a lot of logs, it can look like the + // task is being rebuilt on load as it progresses through the steps at a slower + // rate whilst it builds the status from the event logs + const observable = scaffolderApi.streamLogs({ taskId }); - subscription = observable.subscribe({ - next: event => { - switch (event.type) { - case 'log': - return collectedLogEvents.push(event); - case 'cancelled': - dispatch({ type: 'CANCELLED' }); - return undefined; - case 'completion': - emitLogs(); - dispatch({ type: 'COMPLETED', data: event }); - return undefined; - default: - throw new Error( - `Unhandled event type ${event.type} in observer`, - ); + const collectedLogEvents = new Array(); + + function emitLogs() { + if (collectedLogEvents.length) { + const logs = collectedLogEvents.splice( + 0, + collectedLogEvents.length, + ); + dispatch({ type: 'LOGS', data: logs }); } - }, - error: error => { - emitLogs(); - dispatch({ type: 'ERROR', data: error }); - }, - }); - }, - error => { - if (!didCancel) { - dispatch({ type: 'ERROR', data: error }); - } - }, - ); + } + logPusher = setInterval(emitLogs, 500); + + subscription = observable.subscribe({ + next: event => { + switch (event.type) { + case 'log': + return collectedLogEvents.push(event); + case 'cancelled': + dispatch({ type: 'CANCELLED' }); + return undefined; + case 'completion': + emitLogs(); + dispatch({ type: 'COMPLETED', data: event }); + return undefined; + default: + throw new Error( + `Unhandled event type ${event.type} in observer`, + ); + } + }, + error: error => { + emitLogs(); + // in some cases the error is a refused connection from backend + // this can happen from internet issues or proxy problems + // so we try to reconnect again after some time + // just to restart the fetch process + // details here https://github.com/backstage/backstage/issues/15002 + + if (!error.message) { + error.message = `We cannot connect at the moment, trying again in some seconds... Retrying (${retryCount}/3 retries)`; + } + + if (retryCount <= 3) { + setTimeout(() => { + retryCount += 1; + startStreamLogProcess(); + }, 15000); + } + + dispatch({ type: 'ERROR', data: error }); + }, + }); + }, + error => { + if (!didCancel) { + dispatch({ type: 'ERROR', data: error }); + } + }, + ); + startStreamLogProcess(); return () => { didCancel = true; if (subscription) { From b8744e53ff393b17f6b833d20ad0489b5c736da3 Mon Sep 17 00:00:00 2001 From: Adam Letizia Date: Wed, 17 May 2023 10:02:19 -0500 Subject: [PATCH 084/213] chore: return undefined when entity is missing url location annotation Signed-off-by: Adam Letizia --- plugins/github-actions/src/api/GithubActionsClient.ts | 4 +--- .../github-actions/src/components/getHostnameFromEntity.ts | 4 ++-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/plugins/github-actions/src/api/GithubActionsClient.ts b/plugins/github-actions/src/api/GithubActionsClient.ts index d1ff689f2e..e427c343e2 100644 --- a/plugins/github-actions/src/api/GithubActionsClient.ts +++ b/plugins/github-actions/src/api/GithubActionsClient.ts @@ -46,9 +46,7 @@ export class GithubActionsClient implements GithubActionsApi { const configs = readGithubIntegrationConfigs( this.configApi.getOptionalConfigArray('integrations.github') ?? [], ); - const githubIntegrationConfig = configs.find( - v => v.host === hostname ?? 'github.com', - ); + const githubIntegrationConfig = configs.find(v => v.host === hostname); const baseUrl = githubIntegrationConfig?.apiBaseUrl; return new Octokit({ auth: token, baseUrl }); } diff --git a/plugins/github-actions/src/components/getHostnameFromEntity.ts b/plugins/github-actions/src/components/getHostnameFromEntity.ts index 27e3213d32..836fd22860 100644 --- a/plugins/github-actions/src/components/getHostnameFromEntity.ts +++ b/plugins/github-actions/src/components/getHostnameFromEntity.ts @@ -26,7 +26,7 @@ export const getHostnameFromEntity = (entity: Entity) => { entity?.metadata.annotations?.[ANNOTATION_SOURCE_LOCATION] ?? entity?.metadata.annotations?.[ANNOTATION_LOCATION]; - return location && location.startsWith('url:') + return location?.startsWith('url:') ? gitUrlParse(location.slice(4)).resource - : ''; + : undefined; }; From 662b446d3c3b14f9c267afeb6804e39247cde071 Mon Sep 17 00:00:00 2001 From: Sergey Shevchenko Date: Wed, 17 May 2023 21:57:46 +0300 Subject: [PATCH 085/213] Update plugins/analytics-module-ga4/README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Fredrik Adelöw Signed-off-by: Sergey Shevchenko --- plugins/analytics-module-ga4/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/analytics-module-ga4/README.md b/plugins/analytics-module-ga4/README.md index e9d227788a..7bb8447f51 100644 --- a/plugins/analytics-module-ga4/README.md +++ b/plugins/analytics-module-ga4/README.md @@ -11,7 +11,7 @@ This plugin contains no other functionality. 1. Install the plugin package in your Backstage app: ```sh -yarn add --cwd packages/app @backstage/@backstage/plugin-analytics-module-ga4 +yarn add --cwd packages/app @backstage/plugin-analytics-module-ga4 ``` 2. Wire up the API implementation to your App: From c630c0d7ebd1e4ca5ce777d5e992b2bfc3892d5d Mon Sep 17 00:00:00 2001 From: Antonio Bergas Date: Wed, 17 May 2023 21:29:35 +0200 Subject: [PATCH 086/213] refactor(microsite/src/pages/plugins/index.tsx): Refactor of newSelectedCategories Co-authored-by: Ben Lambert Signed-off-by: Antonio Bergas --- microsite/src/pages/plugins/index.tsx | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/microsite/src/pages/plugins/index.tsx b/microsite/src/pages/plugins/index.tsx index 2349e391fa..02f7854110 100644 --- a/microsite/src/pages/plugins/index.tsx +++ b/microsite/src/pages/plugins/index.tsx @@ -56,15 +56,9 @@ const Plugins = () => { ); const isSelected = category?.isSelected || false; - let newSelectedCategories = selectedCategories; - - if (isSelected) { - newSelectedCategories = selectedCategories.filter( + const newSelectedCategories = isSelected ? selectedCategories.filter( c => c !== categoryName, - ); - } else { - newSelectedCategories.push(categoryName); - } + ) : selectedCategories.push(categoryName); setSelectedCategories(newSelectedCategories); From dfd0dd0475b9186e2a76e2a5b701f8ac681910ec Mon Sep 17 00:00:00 2001 From: "antonio.bergas" Date: Wed, 17 May 2023 23:19:37 +0200 Subject: [PATCH 087/213] =?UTF-8?q?=E2=9C=A8=20feat(pluginsFilter):=20adde?= =?UTF-8?q?d=20dropdown=20filter=20for=20plugins=20list?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: antonio.bergas --- microsite/src/pages/plugins/index.tsx | 41 ++++++++++++--------------- 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/microsite/src/pages/plugins/index.tsx b/microsite/src/pages/plugins/index.tsx index 02f7854110..6b2ebe22a1 100644 --- a/microsite/src/pages/plugins/index.tsx +++ b/microsite/src/pages/plugins/index.tsx @@ -31,34 +31,29 @@ plugins.corePlugins.sort((a, b) => a.order - b.order); plugins.otherPlugins.sort((a, b) => a.order - b.order); const Plugins = () => { - const allCategories: ChipCategory[] = []; - plugins.corePlugins.concat(plugins.otherPlugins).forEach(pluginData => { - const index = allCategories.findIndex( - chip => chip.name === pluginData.category, - ); - if (index === -1) { - allCategories.push({ - name: pluginData.category, - isSelected: false, - }); - } - }); - - const [categories, setCategories] = useState(allCategories); - const [selectedCategories, setSelectedCategories] = useState([]); + const allCategoriesSet = new Set( + [...plugins.corePlugins, ...plugins.otherPlugins].map( + ({ category }) => category, + ), + ); + const allCategoriesArray = Array.from(allCategoriesSet).map(category => ({ + name: category, + isSelected: false, + })); + const [categories, setCategories] = + useState(allCategoriesArray); + const [selectedCategories, setSelectedCategories] = useState([]); const [showCoreFeaturesHeader, setShowCoreFeaturesHeader] = useState(true); const [showOtherPluginsHeader, setShowOtherPluginsHeader] = useState(true); const handleChipClick = (categoryName: string) => { - console.log(categoryName); - const category = categories.find( - category => category.name === categoryName, - ); - const isSelected = category?.isSelected || false; + const isSelected = + categories.find(category => category.name === categoryName)?.isSelected || + false; - const newSelectedCategories = isSelected ? selectedCategories.filter( - c => c !== categoryName, - ) : selectedCategories.push(categoryName); + const newSelectedCategories = isSelected + ? selectedCategories.filter(c => c !== categoryName) + : [...selectedCategories, categoryName]; setSelectedCategories(newSelectedCategories); From 56575be2a26769bd18cce79f782682dede98cc06 Mon Sep 17 00:00:00 2001 From: Sergey Shevchenko Date: Thu, 18 May 2023 10:56:10 +0300 Subject: [PATCH 088/213] docs: Add notes about backstage root dir Signed-off-by: Sergey Shevchenko --- docs/integrations/github/discovery.md | 3 +-- docs/permissions/getting-started.md | 2 +- docs/permissions/plugin-authors/01-setup.md | 4 ++-- plugins/analytics-module-ga4/README.md | 1 + plugins/dynatrace/README.md | 1 + plugins/entity-validation/README.md | 1 + plugins/pagerduty/README.md | 2 +- plugins/techdocs-react/README.md | 1 + 8 files changed, 9 insertions(+), 6 deletions(-) diff --git a/docs/integrations/github/discovery.md b/docs/integrations/github/discovery.md index 7f6cc057cd..f01085dd86 100644 --- a/docs/integrations/github/discovery.md +++ b/docs/integrations/github/discovery.md @@ -263,8 +263,7 @@ package, plus `@backstage/integration` for the basic credentials management: ```bash # From your Backstage root directory -yarn add --cwd packages/backend @backstage/integration -yarn add --cwd packages/backend @backstage/plugin-catalog-backend-module-github +yarn add --cwd packages/backend @backstage/integration @backstage/plugin-catalog-backend-module-github ``` And then add the processors to your catalog builder: diff --git a/docs/permissions/getting-started.md b/docs/permissions/getting-started.md index 8cb6dd953e..01a268f7ef 100644 --- a/docs/permissions/getting-started.md +++ b/docs/permissions/getting-started.md @@ -48,7 +48,7 @@ The permissions framework uses a new `permission-backend` plugin to accept autho ```bash # From your Backstage root directory - $ yarn add --cwd packages/backend @backstage/plugin-permission-backend + yarn add --cwd packages/backend @backstage/plugin-permission-backend ``` 2. Add the following to a new file, `packages/backend/src/plugins/permission.ts`. This adds the permission-backend router, and configures it with a policy which allows everything. diff --git a/docs/permissions/plugin-authors/01-setup.md b/docs/permissions/plugin-authors/01-setup.md index 6827096900..8134fc0c39 100644 --- a/docs/permissions/plugin-authors/01-setup.md +++ b/docs/permissions/plugin-authors/01-setup.md @@ -41,8 +41,8 @@ The source code is available here: ```sh # From your Backstage root directory - $ yarn add --cwd packages/backend @internal/plugin-todo-list-backend @internal/plugin-todo-list-common - $ yarn add --cwd packages/app @internal/plugin-todo-list + yarn add --cwd packages/backend @internal/plugin-todo-list-backend @internal/plugin-todo-list-common + yarn add --cwd packages/app @internal/plugin-todo-list ``` 3. Include the backend and frontend plugin in your application: diff --git a/plugins/analytics-module-ga4/README.md b/plugins/analytics-module-ga4/README.md index 7bb8447f51..97bb751ca8 100644 --- a/plugins/analytics-module-ga4/README.md +++ b/plugins/analytics-module-ga4/README.md @@ -11,6 +11,7 @@ This plugin contains no other functionality. 1. Install the plugin package in your Backstage app: ```sh +# From your Backstage root directory yarn add --cwd packages/app @backstage/plugin-analytics-module-ga4 ``` diff --git a/plugins/dynatrace/README.md b/plugins/dynatrace/README.md index b07fe985fe..3d14be9145 100644 --- a/plugins/dynatrace/README.md +++ b/plugins/dynatrace/README.md @@ -26,6 +26,7 @@ The Dynatrace plugin will require the following information, to be used in the c 1. Install the plugin on your frontend: ``` +# From your Backstage root directory yarn add --cwd packages/app @backstage/plugin-dynatrace ``` diff --git a/plugins/entity-validation/README.md b/plugins/entity-validation/README.md index 1f864d0857..7816262836 100644 --- a/plugins/entity-validation/README.md +++ b/plugins/entity-validation/README.md @@ -9,6 +9,7 @@ This plugin creates a new page in Backstage where the user can validate the enti First of all, install the package in the `app` package by running the following command: ```bash +# From your Backstage root directory yarn add --cwd packages/app @backstage/plugin-entity-validation ``` diff --git a/plugins/pagerduty/README.md b/plugins/pagerduty/README.md index ac3ba529dd..2affe1c423 100644 --- a/plugins/pagerduty/README.md +++ b/plugins/pagerduty/README.md @@ -42,7 +42,7 @@ The file paths mentioned in the following steps are relative to your app's root First, install the PagerDuty plugin via a CLI: ```bash -# From your Backstage app root directory +# From your Backstage root directory yarn add --cwd packages/app @backstage/plugin-pagerduty ``` diff --git a/plugins/techdocs-react/README.md b/plugins/techdocs-react/README.md index 548ba8be5a..53e9fc6a3a 100644 --- a/plugins/techdocs-react/README.md +++ b/plugins/techdocs-react/README.md @@ -5,5 +5,6 @@ This package provides frontend utilities for TechDocs and Addons. ## Installation ```sh +# From your Backstage root directory yarn add --cwd packages/app @backstage/plugin-techdocs-react ``` From 2a0945cc39b033d10d5fc6b959d983d4d2bc8fe0 Mon Sep 17 00:00:00 2001 From: Sergey Shevchenko Date: Thu, 18 May 2023 10:59:49 +0300 Subject: [PATCH 089/213] docs: Update changeset Signed-off-by: Sergey Shevchenko --- .changeset/wise-ties-thank.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 .changeset/wise-ties-thank.md diff --git a/.changeset/wise-ties-thank.md b/.changeset/wise-ties-thank.md new file mode 100644 index 0000000000..ce3ce84ad7 --- /dev/null +++ b/.changeset/wise-ties-thank.md @@ -0,0 +1,11 @@ +--- +'@backstage/plugin-analytics-module-ga4': patch +'@backstage/plugin-entity-validation': patch +'@backstage/plugin-devtools-backend': patch +'@backstage/plugin-linguist-backend': patch +'@backstage/plugin-techdocs-react': patch +'@backstage/plugin-dynatrace': patch +'@backstage/plugin-pagerduty': patch +--- + +Update plugin installation docs to be more consistent across documentations From c8c711acac47e89c4cc2c1a1408318468e4ead06 Mon Sep 17 00:00:00 2001 From: "antonio.bergas" Date: Thu, 18 May 2023 11:01:58 +0200 Subject: [PATCH 090/213] =?UTF-8?q?=E2=9C=A8=20feat(pluginsFilter):=20fixe?= =?UTF-8?q?d=20style=20issues?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: antonio.bergas --- microsite/src/pages/plugins/index.tsx | 11 ++++++----- microsite/src/pages/plugins/plugins.module.scss | 13 +++++++++++++ 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/microsite/src/pages/plugins/index.tsx b/microsite/src/pages/plugins/index.tsx index 6b2ebe22a1..6b1116712a 100644 --- a/microsite/src/pages/plugins/index.tsx +++ b/microsite/src/pages/plugins/index.tsx @@ -111,11 +111,12 @@ const Plugins = () => {
- - +
+ +
{showCoreFeaturesHeader &&

Core Features

} diff --git a/microsite/src/pages/plugins/plugins.module.scss b/microsite/src/pages/plugins/plugins.module.scss index 2f928fcbf0..3babf0959c 100644 --- a/microsite/src/pages/plugins/plugins.module.scss +++ b/microsite/src/pages/plugins/plugins.module.scss @@ -31,12 +31,25 @@ grid-template-columns: repeat(auto-fit, minmax(250px, 300px)); } + @media (max-width: 768px) { + :global(.pluginsContainer) { + grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); + } + } + :global(.fit-content) { width: fit-content; } + :global(.pluginsFilterBox) { + width: 100%; + margin-bottom: 1rem; + height: 1rem; + } + :global(.dropdown) { float: right; + margin-bottom: 1rem; } :global(.button--info) { From e64ebe6106e58fad510960fb1c71aed7b5818a14 Mon Sep 17 00:00:00 2001 From: "antonio.bergas" Date: Thu, 18 May 2023 11:28:11 +0200 Subject: [PATCH 091/213] =?UTF-8?q?=E2=9C=A8=20feat(pluginsFilter):=20refi?= =?UTF-8?q?nement=20of=20hide=20&&=20dropdown=20behaviours?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: antonio.bergas --- .../pluginsFilter/pluginsFilter.tsx | 2 +- microsite/src/pages/plugins/index.tsx | 80 +++++++++++-------- .../src/pages/plugins/plugins.module.scss | 4 + 3 files changed, 51 insertions(+), 35 deletions(-) diff --git a/microsite/src/components/pluginsFilter/pluginsFilter.tsx b/microsite/src/components/pluginsFilter/pluginsFilter.tsx index 19b80b9f14..25c8a5ff52 100644 --- a/microsite/src/components/pluginsFilter/pluginsFilter.tsx +++ b/microsite/src/components/pluginsFilter/pluginsFilter.tsx @@ -15,7 +15,7 @@ const PluginsFilter = ({ categories, handleChipClick }: Props) => {
    {categories.map(chip => { return ( -
  • +
  • handleChipClick(chip.name)}>
    { const [categories, setCategories] = useState(allCategoriesArray); const [selectedCategories, setSelectedCategories] = useState([]); - const [showCoreFeaturesHeader, setShowCoreFeaturesHeader] = useState(true); - const [showOtherPluginsHeader, setShowOtherPluginsHeader] = useState(true); + const [showCoreFeatures, setShowCoreFeatures] = useState(true); + const [showOtherPlugins, setShowOtherPlugins] = useState(true); const handleChipClick = (categoryName: string) => { const isSelected = @@ -67,23 +67,23 @@ const Plugins = () => { setCategories(newCategories); if (!newSelectedCategories.includes('Core Feature')) { - setShowCoreFeaturesHeader(false); + setShowCoreFeatures(false); } else { - setShowCoreFeaturesHeader(true); + setShowCoreFeatures(true); } if ( newSelectedCategories.length === 1 && newSelectedCategories[0] === 'Core Feature' ) { - setShowOtherPluginsHeader(false); + setShowOtherPlugins(false); } else { - setShowOtherPluginsHeader(true); + setShowOtherPlugins(true); } if (newSelectedCategories.length === 0) { - setShowOtherPluginsHeader(true); - setShowCoreFeaturesHeader(true); + setShowOtherPlugins(true); + setShowCoreFeatures(true); } }; @@ -118,33 +118,45 @@ const Plugins = () => { />
    - {showCoreFeaturesHeader &&

    Core Features

    } + {showCoreFeatures && ( +
    +

    Core Features

    +
    + {plugins.corePlugins + .filter( + pluginData => + !selectedCategories.length || + selectedCategories.includes(pluginData.category), + ) + .map(pluginData => ( + + ))} +
    +
    + )} -
    - {plugins.corePlugins - .filter( - pluginData => - !selectedCategories.length || - selectedCategories.includes(pluginData.category), - ) - .map(pluginData => ( - - ))} -
    - - {showOtherPluginsHeader &&

    All Plugins

    } - -
    - {plugins.otherPlugins - .filter( - pluginData => - !selectedCategories.length || - selectedCategories.includes(pluginData.category), - ) - .map(pluginData => ( - - ))} -
    + {showOtherPlugins && ( +
    +

    All Plugins

    +
    + {plugins.otherPlugins + .filter( + pluginData => + !selectedCategories.length || + selectedCategories.includes(pluginData.category), + ) + .map(pluginData => ( + + ))} +
    +
    + )}
); diff --git a/microsite/src/pages/plugins/plugins.module.scss b/microsite/src/pages/plugins/plugins.module.scss index 3babf0959c..d5ea5de6e7 100644 --- a/microsite/src/pages/plugins/plugins.module.scss +++ b/microsite/src/pages/plugins/plugins.module.scss @@ -37,6 +37,10 @@ } } + :global(.hidePluginsHeader) { + display: none; + } + :global(.fit-content) { width: fit-content; } From 2ef84c05aee73b0b677ba62f93075c40226ef53e Mon Sep 17 00:00:00 2001 From: Antonio Musolino Date: Thu, 6 Apr 2023 16:09:30 +0200 Subject: [PATCH 092/213] feat: added import entity analytics event Signed-off-by: Antonio Musolino --- .changeset/breezy-kids-obey.md | 5 +++++ .../components/StepReviewLocation/StepReviewLocation.tsx | 6 ++++-- 2 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 .changeset/breezy-kids-obey.md diff --git a/.changeset/breezy-kids-obey.md b/.changeset/breezy-kids-obey.md new file mode 100644 index 0000000000..db3fa796e9 --- /dev/null +++ b/.changeset/breezy-kids-obey.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-import': minor +--- + +Added analytics event for import entity button diff --git a/plugins/catalog-import/src/components/StepReviewLocation/StepReviewLocation.tsx b/plugins/catalog-import/src/components/StepReviewLocation/StepReviewLocation.tsx index 7943b6e3b8..74ebd973d0 100644 --- a/plugins/catalog-import/src/components/StepReviewLocation/StepReviewLocation.tsx +++ b/plugins/catalog-import/src/components/StepReviewLocation/StepReviewLocation.tsx @@ -22,7 +22,7 @@ import { BackButton, NextButton } from '../Buttons'; import { EntityListComponent } from '../EntityListComponent'; import { PrepareResult, ReviewResult } from '../useImportState'; -import { configApiRef, useApi } from '@backstage/core-plugin-api'; +import { configApiRef, useAnalytics, useApi } from '@backstage/core-plugin-api'; import { Link } from '@backstage/core-components'; import { stringifyEntityRef } from '@backstage/catalog-model'; import { assertError } from '@backstage/errors'; @@ -40,6 +40,7 @@ export const StepReviewLocation = ({ }: Props) => { const catalogApi = useApi(catalogApiRef); const configApi = useApi(configApiRef); + const analytics = useAnalytics(); const appTitle = configApi.getOptional('app.title') || 'Backstage'; @@ -52,6 +53,7 @@ export const StepReviewLocation = ({ : false; const handleClick = useCallback(async () => { setSubmitted(true); + analytics.captureEvent('click', 'import entity'); try { let refreshed = new Array<{ target: string }>(); if (prepareResult.type === 'locations') { @@ -108,7 +110,7 @@ export const StepReviewLocation = ({ setSubmitted(false); } } - }, [prepareResult, onReview, catalogApi]); + }, [prepareResult, onReview, catalogApi, analytics]); return ( <> From 5717a6ef39fd74bd845ddc3fe941432ef462225c Mon Sep 17 00:00:00 2001 From: Antonio Musolino Date: Thu, 11 May 2023 16:45:51 +0200 Subject: [PATCH 093/213] Update .changeset/breezy-kids-obey.md Co-authored-by: Patrik Oldsberg Signed-off-by: Antonio Musolino --- .changeset/breezy-kids-obey.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/breezy-kids-obey.md b/.changeset/breezy-kids-obey.md index db3fa796e9..131a1ec1f3 100644 --- a/.changeset/breezy-kids-obey.md +++ b/.changeset/breezy-kids-obey.md @@ -1,5 +1,5 @@ --- -'@backstage/plugin-catalog-import': minor +'@backstage/plugin-catalog-import': patch --- Added analytics event for import entity button From f6e0586381882210b2c3599efd78b535e6ddd698 Mon Sep 17 00:00:00 2001 From: Christopher Diaz Date: Thu, 18 May 2023 08:53:10 -0400 Subject: [PATCH 094/213] use diff in changelog Signed-off-by: Christopher Diaz --- .changeset/lovely-impalas-sell.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.changeset/lovely-impalas-sell.md b/.changeset/lovely-impalas-sell.md index fa3ae9d5c5..8980c986ae 100644 --- a/.changeset/lovely-impalas-sell.md +++ b/.changeset/lovely-impalas-sell.md @@ -2,15 +2,15 @@ '@backstage/plugin-search-backend-module-explore': patch --- -Allows for an optional token manager to authenticate requests from the collator to the explore backend. For example: +Allows for an optional `tokenManager` to authenticate requests from the collator to the explore backend. For example: -``` +```diff indexBuilder.addCollator({ schedule: every10MinutesSchedule, factory: ToolDocumentCollatorFactory.fromConfig(env.config, { discovery: env.discovery, logger: env.logger, - tokenManager: env.tokenManager, + + tokenManager: env.tokenManager, }), }); -``` +``` \ No newline at end of file From 4a1f788b51f668863e0527488ccbdf03956ea357 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 18 May 2023 13:53:03 +0000 Subject: [PATCH 095/213] fix(deps): update dependency @octokit/request to v6.2.5 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 43067a5f19..2d4a940cea 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13352,8 +13352,8 @@ __metadata: linkType: hard "@octokit/request@npm:^6.0.0": - version: 6.2.3 - resolution: "@octokit/request@npm:6.2.3" + version: 6.2.5 + resolution: "@octokit/request@npm:6.2.5" dependencies: "@octokit/endpoint": ^7.0.0 "@octokit/request-error": ^3.0.0 @@ -13361,7 +13361,7 @@ __metadata: is-plain-object: ^5.0.0 node-fetch: ^2.6.7 universal-user-agent: ^6.0.0 - checksum: fef4097be8375d20bb0b3276d8a3adf866ec628f2b0664d334f3c29b92157da847899497abdc7a5be540053819b55564990543175ad48f04e9e6f25f0395d4d3 + checksum: 856451ea8cc6b1dd0f6e350a141e65c318b5e3a25b8dea373d3afd115f9a3077535a0330f5d90e9db81dc3234dba1dd64edd31e68f639553baa10b4d02b99498 languageName: node linkType: hard From 7a8441b9a323c5fcac0e6ec3675b0e7cde9a60ea Mon Sep 17 00:00:00 2001 From: Brian Fletcher Date: Fri, 19 May 2023 11:07:03 +0100 Subject: [PATCH 096/213] authentication providers page to reflect status Signed-off-by: Brian Fletcher --- .changeset/beige-zebras-walk.md | 5 +++++ .../components/AuthProviders/ProviderSettingsItem.tsx | 9 +++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 .changeset/beige-zebras-walk.md diff --git a/.changeset/beige-zebras-walk.md b/.changeset/beige-zebras-walk.md new file mode 100644 index 0000000000..26ad52dc1d --- /dev/null +++ b/.changeset/beige-zebras-walk.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-user-settings': patch +--- + +Reflect the updated sign on status for a provider after signing out. diff --git a/plugins/user-settings/src/components/AuthProviders/ProviderSettingsItem.tsx b/plugins/user-settings/src/components/AuthProviders/ProviderSettingsItem.tsx index 852af7e78b..e3fb597a15 100644 --- a/plugins/user-settings/src/components/AuthProviders/ProviderSettingsItem.tsx +++ b/plugins/user-settings/src/components/AuthProviders/ProviderSettingsItem.tsx @@ -37,6 +37,8 @@ import { } from '@backstage/core-plugin-api'; import { ProviderSettingsAvatar } from './ProviderSettingsAvatar'; +const emptyProfile: ProfileInfo = {}; + /** @public */ export const ProviderSettingsItem = (props: { title: string; @@ -49,8 +51,7 @@ export const ProviderSettingsItem = (props: { const api = useApi(apiRef); const errorApi = useApi(errorApiRef); const [signedIn, setSignedIn] = useState(false); - const emptyProfile: ProfileInfo = {}; - const [profile, setProfile] = useState(emptyProfile); + const [profile, setProfile] = useState(emptyProfile); useEffect(() => { let didCancel = false; @@ -58,6 +59,10 @@ export const ProviderSettingsItem = (props: { const subscription = api .sessionState$() .subscribe((sessionState: SessionState) => { + if (sessionState !== SessionState.SignedIn) { + setProfile(emptyProfile); + setSignedIn(false); + } if (!didCancel) { api .getProfile({ optional: true }) From 3d11596a72b5749923d4f8d9e6b1db626a416831 Mon Sep 17 00:00:00 2001 From: Sergey Shevchenko Date: Fri, 19 May 2023 14:28:58 +0300 Subject: [PATCH 097/213] fix: Fix changesets Signed-off-by: Sergey Shevchenko --- .changeset/honest-peas-guess.md | 7 ------- .changeset/{wise-ties-thank.md => yellow-crews-float.md} | 0 2 files changed, 7 deletions(-) delete mode 100644 .changeset/honest-peas-guess.md rename .changeset/{wise-ties-thank.md => yellow-crews-float.md} (100%) diff --git a/.changeset/honest-peas-guess.md b/.changeset/honest-peas-guess.md deleted file mode 100644 index cac2330a06..0000000000 --- a/.changeset/honest-peas-guess.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/plugin-analytics-module-ga4': patch -'@backstage/plugin-devtools-backend': patch -'@backstage/plugin-linguist-backend': patch ---- - -Update plugin installation docs to be more consistent across documentations diff --git a/.changeset/wise-ties-thank.md b/.changeset/yellow-crews-float.md similarity index 100% rename from .changeset/wise-ties-thank.md rename to .changeset/yellow-crews-float.md From 3f11ae24ab6c157def394d118a273074acb21628 Mon Sep 17 00:00:00 2001 From: Malikah Montgomery Date: Mon, 15 May 2023 10:25:10 -0400 Subject: [PATCH 098/213] Create new package for plugin with react components Signed-off-by: Malikah Montgomery --- plugins/home-react/.eslintrc.js | 1 + plugins/home-react/CHANGELOG.md | 0 plugins/home-react/README.md | 244 ++++++++++++++++++ plugins/home-react/package.json | 78 ++++++ .../src/components/SettingsModal.tsx | 46 ++++ plugins/home-react/src/components/index.ts | 17 ++ plugins/home-react/src/extensions.tsx | 194 ++++++++++++++ plugins/home-react/src/index.ts | 31 +++ yarn.lock | 76 +++++- 9 files changed, 686 insertions(+), 1 deletion(-) create mode 100644 plugins/home-react/.eslintrc.js create mode 100644 plugins/home-react/CHANGELOG.md create mode 100644 plugins/home-react/README.md create mode 100644 plugins/home-react/package.json create mode 100644 plugins/home-react/src/components/SettingsModal.tsx create mode 100644 plugins/home-react/src/components/index.ts create mode 100644 plugins/home-react/src/extensions.tsx create mode 100644 plugins/home-react/src/index.ts diff --git a/plugins/home-react/.eslintrc.js b/plugins/home-react/.eslintrc.js new file mode 100644 index 0000000000..e2a53a6ad2 --- /dev/null +++ b/plugins/home-react/.eslintrc.js @@ -0,0 +1 @@ +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/home-react/CHANGELOG.md b/plugins/home-react/CHANGELOG.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/plugins/home-react/README.md b/plugins/home-react/README.md new file mode 100644 index 0000000000..7da0034662 --- /dev/null +++ b/plugins/home-react/README.md @@ -0,0 +1,244 @@ +# Home + +The Home plugin introduces a system for composing a Home Page for Backstage in order to surface relevant info and provide convenient shortcuts for common tasks. It's designed with composability in mind with an open ecosystem that allows anyone to contribute with any component, to be included in any Home Page. + +For App Integrators, the system is designed to be composable to give total freedom in designing a Home Page that suits the needs of the organization. From the perspective of a Component Developer who wishes to contribute with building blocks to be included in Home Pages, there's a convenient interface for bundling the different parts and exporting them with both error boundary and lazy loading handled under the surface. + +## Getting started + +If you have a standalone app (you didn't clone this repo), then do + +```bash +# From your Backstage root directory +yarn add --cwd packages/app @backstage/plugin-home +``` + +### Setting up the Home Page + +1. Create a Home Page Component that will be used for composition. + +`packages/app/src/components/home/HomePage.tsx` + +```tsx +import React from 'react'; + +export const HomePage = () => { + return { + /* TODO: Compose a Home Page here */ + }; +}; +``` + +2. Add a route where the homepage will live, presumably `/`. + +`packages/app/src/App.tsx` + +```tsx +import { HomepageCompositionRoot } from '@backstage/plugin-home'; +import { HomePage } from './components/home/HomePage'; + +// ... +}> + +; +// ... +``` + +### Creating Components + +The Home Page can be composed with regular React components, so there's no magic in creating components to be used for composition 🪄 🎩 . However, in order to assure that your component fits into a diverse set of Home Pages, there's an extension creator for this purpose, that creates a Card-based layout, for consistency between components (read more about extensions [here](https://backstage.io/docs/plugins/composability#extensions)). The extension creator requires two fields: `title` and `components`. The `components` field is expected to be an asynchronous import that should at least contain a `Content` field. Additionally, you can optionally provide `settings`, `actions` and `contextProvider` as well. These parts will be combined to create a card, where the `content`, `actions` and `settings` will be wrapped within the `contextProvider` in order to be able to access to context and effectively communicate with one another. + +Finally, the `createCardExtension` also accepts a generic, such that Component Developers can indicate to App Integrators what custom props their component will accept, such as the example below where the default category of the random jokes can be set. + +```tsx +export const RandomJokeHomePageComponent = homePlugin.provide( + createCardExtension<{ defaultCategory?: 'programming' | 'any' }>({ + title: 'Random Joke', + components: () => import('./homePageComponents/RandomJoke'), + }), +); +``` + +In summary: it is not necessary to use the `createCardExtension` extension creator to register a home page component, although it is convenient since it provides error boundary and lazy loading, and it also may hook into other functionality in the future. + +### Composing a Home Page + +Composing a Home Page is no different from creating a regular React Component, i.e. the App Integrator is free to include whatever content they like. However, there are components developed with the Home Page in mind, as described in the previous section. If created by the `createCardExtension` extension creator, they are rendered like so + +```tsx +import React from 'react'; +import Grid from '@material-ui/core/Grid'; +import { RandomJokeHomePageComponent } from '@backstage/plugin-home'; + +export const HomePage = () => { + return ( + + + + + + ); +}; +``` + +Additionally, the App Integrator is provided an escape hatch in case the way the card is rendered does not fit their requirements. They may optionally pass the `Renderer`-prop, which will receive the `title`, `content` and optionally `actions`, `settings` and `contextProvider`, if they exist for the component. This allows the App Integrator to render the content in any way they want. + +## Customizable home page + +If you want to allow users to customize the components that are shown in the home page, you can use CustomHomePageGrid component. +By adding the allowed components inside the grid, the user can add, configure, remove and move the components around in their +home page. The user configuration is also saved and restored in the process for later use. + +```tsx +import { + HomePageRandomJoke, + HomePageStarredEntities, + CustomHomepageGrid, +} from '@backstage/plugin-home'; +import { Content, Header, Page } from '@backstage/core-components'; +import { HomePageSearchBar } from '@backstage/plugin-search'; +import { HomePageCalendar } from '@backstage/plugin-gcalendar'; +import { MicrosoftCalendarCard } from '@backstage/plugin-microsoft-calendar'; + +export const HomePage = () => { + return ( + + // Insert the allowed widgets inside the grid + + + + + + + ); +}; +``` + +### Creating Customizable Components + +The custom home page can use the default components created by using the default `createCardExtension` method but if you +want to add additional configuration like component size or settings, you can define those in the `layout` +property: + +```tsx +export const RandomJokeHomePageComponent = homePlugin.provide( + createCardExtension<{ defaultCategory?: 'any' | 'programming' }>({ + name: 'HomePageRandomJoke', + title: 'Random Joke', + components: () => import('./homePageComponents/RandomJoke'), + layout: { + height: { minRows: 7 }, + width: { minColumns: 3 }, + }, + }), +); +``` + +These settings can also be defined for components that use `createReactExtension` instead `createCardExtension` by using +the data property: + +```tsx +export const HomePageSearchBar = searchPlugin.provide( + createReactExtension({ + name: 'HomePageSearchBar', + component: { + lazy: () => + import('./components/HomePageComponent').then(m => m.HomePageSearchBar), + }, + data: { + 'home.widget.config': { + layout: { + height: { maxRows: 1 }, + }, + }, + }, + }), +); +``` + +Available home page properties that are used for homepage widgets are: + +| Key | Type | Description | +| ----------------------------- | ------- | ------------------------------------------------------------ | +| `title` | string | User friend title. Shown when user adds widgets to homepage | +| `description` | string | Widget description. Shown when user adds widgets to homepage | +| `layout.width.defaultColumns` | integer | Default width of the widget (1-12) | +| `layout.width.minColumns` | integer | Minimum width of the widget (1-12) | +| `layout.width.maxColumns` | integer | Maximum width of the widget (1-12) | +| `layout.height.defaultRows` | integer | Default height of the widget (1-12) | +| `layout.height.minRows` | integer | Minimum height of the widget (1-12) | +| `layout.height.maxRows` | integer | Maximum height of the widget (1-12) | +| `settings.schema` | object | Customization settings of the widget, see below | + +#### Widget Specific Settings + +To define settings that the users can change for your component, you should define the `layout` and `settings` +properties. The `settings.schema` object should follow +[react-jsonschema-form](https://rjsf-team.github.io/react-jsonschema-form/docs/) definition and the type of the schema +must be `object`. + +```tsx +export const HomePageRandomJoke = homePlugin.provide( + createCardExtension<{ defaultCategory?: 'any' | 'programming' }>({ + name: 'HomePageRandomJoke', + title: 'Random Joke', + components: () => import('./homePageComponents/RandomJoke'), + description: 'Shows a random joke about optional category', + layout: { + height: { minRows: 4 }, + width: { minColumns: 3 }, + }, + settings: { + schema: { + title: 'Random Joke settings', + type: 'object', + properties: { + defaultCategory: { + title: 'Category', + type: 'string', + enum: ['any', 'programming', 'dad'], + default: 'any', + }, + }, + }, + }, + }), +); +``` + +This allows the user to select `defaultCategory` for the RandomJoke widgets that are added to the homepage. +Each widget has its own settings and the setting values are passed to the underlying React component in props. + +In case your `CardExtension` had `Settings` component defined, it will automatically disappear when you add the +`settingsSchema` to the component data structure. + +### Adding Default Layout + +You can set the default layout of the customizable home page by passing configuration to the `CustomHomepageGrid` +component: + +```tsx +const defaultConfig = [ + { + component: , // Or 'HomePageSearchBar' as a string if you know the component name + x: 0, + y: 0, + width: 12, + height: 1, + }, +]; + + +``` + +## Contributing + +### Homepage Components + +We believe that people have great ideas for what makes a useful Home Page, and we want to make it easy for every to benefit from the effort you put in to create something cool for the Home Page. Therefore, a great way of contributing is by simply creating more Home Page Components, than can then be used by everyone when composing their own Home Page. If they are tightly coupled to an existing plugin, it is recommended to allow them to live within that plugin, for convenience and to limit complex dependencies. On the other hand, if there's no clear plugin that the component is based on, it's also fine to contribute them into the [home plugin](/plugins/home/src/homePageComponents) + +Additionally, the API is at a very early state, so contributing with additional use cases may expose weaknesses in the current solution that we may iterate on, to provide more flexibility and ease of use for those who wish to develop components for the Home Page. + +### Homepage Templates + +We are hoping that we together can build up a collection of Homepage templates. We therefore put together a place where we can collect all the templates for the Home Plugin in the [storybook](https://backstage.io/storybook/?path=/story/plugins-home-templates). If you would like to contribute with a template, start by taking a look at the [DefaultTemplate storybook example to create your own](/packages/app/src/components/home/templates/DefaultTemplate.stories.tsx), and then open a PR with your suggestion. diff --git a/plugins/home-react/package.json b/plugins/home-react/package.json new file mode 100644 index 0000000000..0e94e3ee49 --- /dev/null +++ b/plugins/home-react/package.json @@ -0,0 +1,78 @@ +{ + "name": "@backstage/plugin-home-react", + "description": "A Backstage plugin that contains react components helps you build a home page", + "version": "0.0.1", + "main": "src/index.ts", + "types": "src/index.ts", + "license": "Apache-2.0", + "publishConfig": { + "access": "public", + "main": "dist/index.esm.js", + "types": "dist/index.d.ts" + }, + "backstage": { + "role": "frontend-plugin" + }, + "homepage": "https://github.com/backstage/backstage/tree/master/plugins/home-react#readme", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/home-react" + }, + "keywords": [ + "backstage", + "homepage" + ], + "scripts": { + "build": "backstage-cli package build", + "start": "backstage-cli package start", + "lint": "backstage-cli package lint", + "test": "backstage-cli package test", + "prepack": "backstage-cli package prepack", + "postpack": "backstage-cli package postpack", + "clean": "backstage-cli package clean" + }, + "dependencies": { + "@backstage/catalog-model": "workspace:^", + "@backstage/config": "workspace:^", + "@backstage/core-components": "workspace:^", + "@backstage/core-plugin-api": "workspace:^", + "@backstage/plugin-catalog-react": "workspace:^", + "@backstage/theme": "workspace:^", + "@material-ui/core": "^4.12.2", + "@material-ui/icons": "^4.9.1", + "@material-ui/lab": "4.0.0-alpha.61", + "@rjsf/core-v5": "npm:@rjsf/core@5.6.0", + "@rjsf/material-ui": "5.6.0", + "@rjsf/utils": "5.6.0", + "@rjsf/validator-ajv8": "5.6.0", + "@types/react": "^16.13.1 || ^17.0.0", + "lodash": "^4.17.21", + "react-grid-layout": "^1.3.4", + "react-resizable": "^3.0.4", + "react-use": "^17.2.4", + "zod": "~3.21.4" + }, + "peerDependencies": { + "react": "^16.13.1 || ^17.0.0", + "react-dom": "^16.13.1 || ^17.0.0", + "react-router-dom": "6.0.0-beta.0 || ^6.3.0" + }, + "devDependencies": { + "@backstage/cli": "workspace:^", + "@backstage/core-app-api": "workspace:^", + "@backstage/dev-utils": "workspace:^", + "@backstage/test-utils": "workspace:^", + "@testing-library/dom": "^8.0.0", + "@testing-library/jest-dom": "^5.10.1", + "@testing-library/react": "^12.1.3", + "@testing-library/user-event": "^14.0.0", + "@types/node": "^16.11.26", + "@types/react-grid-layout": "^1.3.2", + "cross-fetch": "^3.1.5", + "msw": "^1.0.0" + }, + "files": [ + "dist" + ] +} diff --git a/plugins/home-react/src/components/SettingsModal.tsx b/plugins/home-react/src/components/SettingsModal.tsx new file mode 100644 index 0000000000..ace9944f28 --- /dev/null +++ b/plugins/home-react/src/components/SettingsModal.tsx @@ -0,0 +1,46 @@ +/* + * Copyright 2021 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import React from 'react'; +import { + Button, + Dialog, + DialogActions, + DialogContent, + DialogTitle, +} from '@material-ui/core'; + +/** @public */ +export const SettingsModal = (props: { + open: boolean; + close: Function; + componentName: string; + children: JSX.Element; +}) => { + const { open, close, componentName, children } = props; + + return ( + close()}> + Settings - {componentName} + {children} + + + + + ); +}; diff --git a/plugins/home-react/src/components/index.ts b/plugins/home-react/src/components/index.ts new file mode 100644 index 0000000000..dce6968b36 --- /dev/null +++ b/plugins/home-react/src/components/index.ts @@ -0,0 +1,17 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export { SettingsModal } from './SettingsModal'; diff --git a/plugins/home-react/src/extensions.tsx b/plugins/home-react/src/extensions.tsx new file mode 100644 index 0000000000..380ff6713a --- /dev/null +++ b/plugins/home-react/src/extensions.tsx @@ -0,0 +1,194 @@ +/* + * Copyright 2021 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import React, { Suspense } from 'react'; +import { IconButton } from '@material-ui/core'; +import SettingsIcon from '@material-ui/icons/Settings'; +import { InfoCard } from '@backstage/core-components'; +import { SettingsModal } from './components'; +import { createReactExtension, useApp } from '@backstage/core-plugin-api'; +import { RJSFSchema } from '@rjsf/utils'; + +/** + * @public + */ +export type ComponentRenderer = { + Renderer?: (props: RendererProps) => JSX.Element; +}; + +/** + * @public + */ +export type ComponentParts = { + Content: (props?: any) => JSX.Element; + Actions?: () => JSX.Element; + Settings?: () => JSX.Element; + ContextProvider?: (props: any) => JSX.Element; +}; + +/** + * @public + */ +export type RendererProps = { title: string } & ComponentParts; + +/** + * @public + */ +export type CardExtensionProps = ComponentRenderer & { title?: string } & T; + +/** + * @public + */ +export type CardLayout = { + width?: { minColumns?: number; maxColumns?: number; defaultColumns?: number }; + height?: { minRows?: number; maxRows?: number; defaultRows?: number }; +}; + +/** + * @public + */ +export type CardSettings = { + schema?: RJSFSchema; +}; + +/** + * @public + */ +export type CardConfig = { + layout?: CardLayout; + settings?: CardSettings; +}; + +/** + * An extension creator to create card based components for the homepage + * + * @public + */ +export function createCardExtension(options: { + title: string; + components: () => Promise; + name?: string; + description?: string; + layout?: CardLayout; + settings?: CardSettings; +}) { + const { title, components, name, description, layout, settings } = options; + // If widget settings schema is defined, we don't want to show the Settings icon or dialog + const isCustomizable = settings?.schema !== undefined; + + return createReactExtension({ + name, + data: { title, description, 'home.widget.config': { layout, settings } }, + component: { + lazy: () => + components().then(componentParts => { + return (props: CardExtensionProps) => { + return ( + + ); + }; + }), + }, + }); +} + +type CardExtensionComponentProps = CardExtensionProps & + ComponentParts & { + title: string; + isCustomizable?: boolean; + overrideTitle?: string; + }; + +function CardExtension(props: CardExtensionComponentProps) { + const { + Renderer, + Content, + Settings, + Actions, + ContextProvider, + isCustomizable, + title, + ...childProps + } = props; + const app = useApp(); + const { Progress } = app.getComponents(); + const [settingsOpen, setSettingsOpen] = React.useState(false); + + if (Renderer) { + return ( + }> + + + ); + } + + const cardProps = { + title: title, + ...(Settings && !isCustomizable + ? { + action: ( + setSettingsOpen(true)}> + Settings + + ), + } + : {}), + ...(Actions + ? { + actions: , + } + : {}), + }; + + const innerContent = ( + + {Settings && !isCustomizable && ( + setSettingsOpen(false)} + > + + + )} + + + ); + + return ( + }> + {ContextProvider ? ( + {innerContent} + ) : ( + innerContent + )} + + ); +} diff --git a/plugins/home-react/src/index.ts b/plugins/home-react/src/index.ts new file mode 100644 index 0000000000..90c76d0836 --- /dev/null +++ b/plugins/home-react/src/index.ts @@ -0,0 +1,31 @@ +/* + * Copyright 2021 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * A Backstage plugin that helps you build a home page + * + * @packageDocumentation + */ +export * from './components'; +export { createCardExtension } from './extensions'; +export type { + CardExtensionProps, + ComponentParts, + ComponentRenderer, + RendererProps, + CardLayout, + CardSettings, +} from './extensions'; diff --git a/yarn.lock b/yarn.lock index 2d4a940cea..78782deb48 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7036,7 +7036,81 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-home@^0.5.1, @backstage/plugin-home@workspace:^, @backstage/plugin-home@workspace:plugins/home": +"@backstage/plugin-home-react@workspace:plugins/home-react": + version: 0.0.0-use.local + resolution: "@backstage/plugin-home-react@workspace:plugins/home-react" + dependencies: + "@backstage/catalog-model": "workspace:^" + "@backstage/cli": "workspace:^" + "@backstage/config": "workspace:^" + "@backstage/core-app-api": "workspace:^" + "@backstage/core-components": "workspace:^" + "@backstage/core-plugin-api": "workspace:^" + "@backstage/dev-utils": "workspace:^" + "@backstage/plugin-catalog-react": "workspace:^" + "@backstage/test-utils": "workspace:^" + "@backstage/theme": "workspace:^" + "@material-ui/core": ^4.12.2 + "@material-ui/icons": ^4.9.1 + "@material-ui/lab": 4.0.0-alpha.61 + "@rjsf/core-v5": "npm:@rjsf/core@5.6.0" + "@rjsf/material-ui": 5.6.0 + "@rjsf/utils": 5.6.0 + "@rjsf/validator-ajv8": 5.6.0 + "@testing-library/dom": ^8.0.0 + "@testing-library/jest-dom": ^5.10.1 + "@testing-library/react": ^12.1.3 + "@testing-library/user-event": ^14.0.0 + "@types/node": ^16.11.26 + "@types/react": ^16.13.1 || ^17.0.0 + "@types/react-grid-layout": ^1.3.2 + cross-fetch: ^3.1.5 + lodash: ^4.17.21 + msw: ^1.0.0 + react-grid-layout: ^1.3.4 + react-resizable: ^3.0.4 + react-use: ^17.2.4 + zod: ~3.21.4 + peerDependencies: + react: ^16.13.1 || ^17.0.0 + react-dom: ^16.13.1 || ^17.0.0 + react-router-dom: 6.0.0-beta.0 || ^6.3.0 + languageName: unknown + linkType: soft + +"@backstage/plugin-home@npm:^0.5.1": + version: 0.5.1 + resolution: "@backstage/plugin-home@npm:0.5.1" + dependencies: + "@backstage/catalog-model": ^1.3.0 + "@backstage/config": ^1.0.7 + "@backstage/core-components": ^0.13.0 + "@backstage/core-plugin-api": ^1.5.1 + "@backstage/plugin-catalog-react": ^1.5.0 + "@backstage/theme": ^0.2.19 + "@material-ui/core": ^4.12.2 + "@material-ui/icons": ^4.9.1 + "@material-ui/lab": 4.0.0-alpha.61 + "@rjsf/core-v5": "npm:@rjsf/core@5.6.0" + "@rjsf/material-ui": 5.6.0 + "@rjsf/utils": 5.6.0 + "@rjsf/validator-ajv8": 5.6.0 + "@types/react": ^16.13.1 || ^17.0.0 + lodash: ^4.17.21 + object-hash: ^3.0.0 + react-grid-layout: ^1.3.4 + react-resizable: ^3.0.4 + react-use: ^17.2.4 + zod: ~3.21.4 + peerDependencies: + react: ^16.13.1 || ^17.0.0 + react-dom: ^16.13.1 || ^17.0.0 + react-router-dom: 6.0.0-beta.0 || ^6.3.0 + checksum: 0470e0d4848818c59fdf5c3765b769c22bf2b47e26b0ed0c80398baac6a8e1ac703e94152dc20498bfda790aec18a2af65605fcd8c6eb2e7ba7b85eb6ce80b69 + languageName: node + linkType: hard + +"@backstage/plugin-home@workspace:^, @backstage/plugin-home@workspace:plugins/home": version: 0.0.0-use.local resolution: "@backstage/plugin-home@workspace:plugins/home" dependencies: From 838267c68c8be707c7f1b8e6af7d649e0715dceb Mon Sep 17 00:00:00 2001 From: Malikah Montgomery Date: Mon, 15 May 2023 10:49:36 -0400 Subject: [PATCH 099/213] deprecated createCardExtension in plugin-home and updated stack-overflow to use new plugin-home-react package Signed-off-by: Malikah Montgomery --- plugins/home-react/package.json | 15 +-------------- plugins/home/src/extensions.tsx | 6 ++++++ plugins/stack-overflow/package.json | 2 +- plugins/stack-overflow/src/plugin.ts | 2 +- yarn.lock | 17 ++--------------- 5 files changed, 11 insertions(+), 31 deletions(-) diff --git a/plugins/home-react/package.json b/plugins/home-react/package.json index 0e94e3ee49..e6f96e65f4 100644 --- a/plugins/home-react/package.json +++ b/plugins/home-react/package.json @@ -33,25 +33,12 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "workspace:^", - "@backstage/config": "workspace:^", "@backstage/core-components": "workspace:^", "@backstage/core-plugin-api": "workspace:^", - "@backstage/plugin-catalog-react": "workspace:^", - "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.61", - "@rjsf/core-v5": "npm:@rjsf/core@5.6.0", - "@rjsf/material-ui": "5.6.0", "@rjsf/utils": "5.6.0", - "@rjsf/validator-ajv8": "5.6.0", - "@types/react": "^16.13.1 || ^17.0.0", - "lodash": "^4.17.21", - "react-grid-layout": "^1.3.4", - "react-resizable": "^3.0.4", - "react-use": "^17.2.4", - "zod": "~3.21.4" + "@types/react": "^16.13.1 || ^17.0.0" }, "peerDependencies": { "react": "^16.13.1 || ^17.0.0", diff --git a/plugins/home/src/extensions.tsx b/plugins/home/src/extensions.tsx index 380ff6713a..fdb9e9d67f 100644 --- a/plugins/home/src/extensions.tsx +++ b/plugins/home/src/extensions.tsx @@ -24,6 +24,7 @@ import { RJSFSchema } from '@rjsf/utils'; /** * @public + * @deprecated Please use the same type from `@backstage/plugin-home-react` instead */ export type ComponentRenderer = { Renderer?: (props: RendererProps) => JSX.Element; @@ -31,6 +32,7 @@ export type ComponentRenderer = { /** * @public + * @deprecated Please use the same type from `@backstage/plugin-home-react` instead */ export type ComponentParts = { Content: (props?: any) => JSX.Element; @@ -41,16 +43,19 @@ export type ComponentParts = { /** * @public + * @deprecated Please use the same type from `@backstage/plugin-home-react` instead */ export type RendererProps = { title: string } & ComponentParts; /** * @public + * @deprecated Please use the same type from `@backstage/plugin-home-react` instead */ export type CardExtensionProps = ComponentRenderer & { title?: string } & T; /** * @public + * @deprecated Please use the same type from `@backstage/plugin-home-react` instead */ export type CardLayout = { width?: { minColumns?: number; maxColumns?: number; defaultColumns?: number }; @@ -76,6 +81,7 @@ export type CardConfig = { * An extension creator to create card based components for the homepage * * @public + * @deprecated Please use the same type from `@backstage/plugin-home-react` instead */ export function createCardExtension(options: { title: string; diff --git a/plugins/stack-overflow/package.json b/plugins/stack-overflow/package.json index 5b9cdb0213..e550e15762 100644 --- a/plugins/stack-overflow/package.json +++ b/plugins/stack-overflow/package.json @@ -25,7 +25,7 @@ "@backstage/config": "workspace:^", "@backstage/core-components": "workspace:^", "@backstage/core-plugin-api": "workspace:^", - "@backstage/plugin-home": "workspace:^", + "@backstage/plugin-home-react": "workspace:^", "@backstage/plugin-search-common": "workspace:^", "@backstage/plugin-search-react": "workspace:^", "@backstage/theme": "workspace:^", diff --git a/plugins/stack-overflow/src/plugin.ts b/plugins/stack-overflow/src/plugin.ts index 5be4c89cbe..017900bc02 100644 --- a/plugins/stack-overflow/src/plugin.ts +++ b/plugins/stack-overflow/src/plugin.ts @@ -20,7 +20,7 @@ import { createApiFactory, configApiRef, } from '@backstage/core-plugin-api'; -import { createCardExtension } from '@backstage/plugin-home'; +import { createCardExtension } from '@backstage/plugin-home-react'; import { StackOverflowQuestionsContentProps } from './types'; import { stackOverflowApiRef, StackOverflowClient } from './api'; import { SearchResultListItemExtensionProps } from '@backstage/plugin-search-react'; diff --git a/yarn.lock b/yarn.lock index 78782deb48..b5fbc69c3b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7036,27 +7036,19 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-home-react@workspace:plugins/home-react": +"@backstage/plugin-home-react@workspace:^, @backstage/plugin-home-react@workspace:plugins/home-react": version: 0.0.0-use.local resolution: "@backstage/plugin-home-react@workspace:plugins/home-react" dependencies: - "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" - "@backstage/config": "workspace:^" "@backstage/core-app-api": "workspace:^" "@backstage/core-components": "workspace:^" "@backstage/core-plugin-api": "workspace:^" "@backstage/dev-utils": "workspace:^" - "@backstage/plugin-catalog-react": "workspace:^" "@backstage/test-utils": "workspace:^" - "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.61 - "@rjsf/core-v5": "npm:@rjsf/core@5.6.0" - "@rjsf/material-ui": 5.6.0 "@rjsf/utils": 5.6.0 - "@rjsf/validator-ajv8": 5.6.0 "@testing-library/dom": ^8.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 @@ -7065,12 +7057,7 @@ __metadata: "@types/react": ^16.13.1 || ^17.0.0 "@types/react-grid-layout": ^1.3.2 cross-fetch: ^3.1.5 - lodash: ^4.17.21 msw: ^1.0.0 - react-grid-layout: ^1.3.4 - react-resizable: ^3.0.4 - react-use: ^17.2.4 - zod: ~3.21.4 peerDependencies: react: ^16.13.1 || ^17.0.0 react-dom: ^16.13.1 || ^17.0.0 @@ -8918,7 +8905,7 @@ __metadata: "@backstage/core-components": "workspace:^" "@backstage/core-plugin-api": "workspace:^" "@backstage/dev-utils": "workspace:^" - "@backstage/plugin-home": "workspace:^" + "@backstage/plugin-home-react": "workspace:^" "@backstage/plugin-search-common": "workspace:^" "@backstage/plugin-search-react": "workspace:^" "@backstage/test-utils": "workspace:^" From 41e8037a8a6d20dde150b6a48c2cf3e3b8565d0e Mon Sep 17 00:00:00 2001 From: Malikah Montgomery Date: Mon, 15 May 2023 10:54:53 -0400 Subject: [PATCH 100/213] Extract new plugin-home-react package and deprecate createCardExtension in plugin-home Signed-off-by: Malikah Montgomery --- .changeset/violet-pots-push.md | 7 ++ plugins/home-react/api-report.md | 198 +++++++++++++++++++++++++++++++ 2 files changed, 205 insertions(+) create mode 100644 .changeset/violet-pots-push.md create mode 100644 plugins/home-react/api-report.md diff --git a/.changeset/violet-pots-push.md b/.changeset/violet-pots-push.md new file mode 100644 index 0000000000..8e668977a9 --- /dev/null +++ b/.changeset/violet-pots-push.md @@ -0,0 +1,7 @@ +--- +'@backstage/plugin-stack-overflow': patch +'@backstage/plugin-home-react': patch +'@backstage/plugin-home': patch +--- + +Extract new plugin-home-react package and deprecate createCardExtension in plugin-home diff --git a/plugins/home-react/api-report.md b/plugins/home-react/api-report.md new file mode 100644 index 0000000000..43fdbf403c --- /dev/null +++ b/plugins/home-react/api-report.md @@ -0,0 +1,198 @@ +## API Report File for "@backstage/plugin-home" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +/// + +import { BackstagePlugin } from '@backstage/core-plugin-api'; +import { Extension } from '@backstage/core-plugin-api'; +import { default as React_2 } from 'react'; +import { ReactElement } from 'react'; +import { ReactNode } from 'react'; +import { RJSFSchema } from '@rjsf/utils'; +import { RouteRef } from '@backstage/core-plugin-api'; + +// @public (undocumented) +export type CardExtensionProps = ComponentRenderer & { + title?: string; +} & T; + +// @public (undocumented) +export type CardLayout = { + width?: { + minColumns?: number; + maxColumns?: number; + defaultColumns?: number; + }; + height?: { + minRows?: number; + maxRows?: number; + defaultRows?: number; + }; +}; + +// @public (undocumented) +export type CardSettings = { + schema?: RJSFSchema; +}; + +// @public (undocumented) +export type ClockConfig = { + label: string; + timeZone: string; +}; + +// @public (undocumented) +export const ComponentAccordion: (props: { + title: string; + expanded?: boolean | undefined; + Content: () => JSX.Element; + Actions?: (() => JSX.Element) | undefined; + Settings?: (() => JSX.Element) | undefined; + ContextProvider?: ((props: any) => JSX.Element) | undefined; +}) => JSX.Element; + +// @public (undocumented) +export type ComponentParts = { + Content: (props?: any) => JSX.Element; + Actions?: () => JSX.Element; + Settings?: () => JSX.Element; + ContextProvider?: (props: any) => JSX.Element; +}; + +// @public (undocumented) +export type ComponentRenderer = { + Renderer?: (props: RendererProps) => JSX.Element; +}; + +// @public (undocumented) +export const ComponentTab: (props: { + title: string; + Content: () => JSX.Element; + ContextProvider?: ((props: any) => JSX.Element) | undefined; +}) => JSX.Element; + +// @public (undocumented) +export const ComponentTabs: (props: { + title: string; + tabs: { + label: string; + Component: () => JSX.Element; + }[]; +}) => JSX.Element; + +// @public +export function createCardExtension(options: { + title: string; + components: () => Promise; + name?: string; + description?: string; + layout?: CardLayout; + settings?: CardSettings; +}): Extension<(props: CardExtensionProps) => JSX.Element>; + +// @public +export const CustomHomepageGrid: ( + props: CustomHomepageGridProps, +) => JSX.Element; + +// @public (undocumented) +export type CustomHomepageGridProps = { + children?: ReactNode; + config?: LayoutConfiguration[]; + rowHeight?: number; +}; + +// @public +export const HeaderWorldClock: (props: { + clockConfigs: ClockConfig[]; + customTimeFormat?: Intl.DateTimeFormatOptions | undefined; +}) => JSX.Element | null; + +// @public +export const HomePageCompanyLogo: (props: { + logo?: ReactNode; + className?: string | undefined; +}) => JSX.Element; + +// @public (undocumented) +export const HomepageCompositionRoot: (props: { + title?: string | undefined; + children?: ReactNode; +}) => JSX.Element; + +// @public (undocumented) +export const HomePageRandomJoke: ( + props: CardExtensionProps<{ + defaultCategory?: 'any' | 'programming' | undefined; + }>, +) => JSX.Element; + +// @public +export const HomePageStarredEntities: ( + props: CardExtensionProps, +) => JSX.Element; + +// @public +export const HomePageToolkit: ( + props: CardExtensionProps, +) => JSX.Element; + +// @public (undocumented) +export const homePlugin: BackstagePlugin< + { + root: RouteRef; + }, + {}, + {} +>; + +// @public +export type LayoutConfiguration = { + component: ReactElement | string; + x: number; + y: number; + width: number; + height: number; +}; + +// @public (undocumented) +export type RendererProps = { + title: string; +} & ComponentParts; + +// @public (undocumented) +export const SettingsModal: (props: { + open: boolean; + close: Function; + componentName: string; + children: JSX.Element; +}) => JSX.Element; + +// @public (undocumented) +export const TemplateBackstageLogo: (props: { + classes: { + svg: string; + path: string; + }; +}) => JSX.Element; + +// @public (undocumented) +export const TemplateBackstageLogoIcon: () => JSX.Element; + +// @public (undocumented) +export type Tool = { + label: string; + url: string; + icon: React_2.ReactNode; +}; + +// @public +export type ToolkitContentProps = { + tools: Tool[]; +}; + +// @public +export const WelcomeTitle: () => JSX.Element; +``` From 1f6ce3afa76df3563d4f1a5bfc62d0c0f0667ff2 Mon Sep 17 00:00:00 2001 From: Malikah Montgomery Date: Mon, 15 May 2023 12:08:42 -0400 Subject: [PATCH 101/213] generate api report Signed-off-by: Malikah Montgomery --- plugins/home-react/api-report.md | 130 +-------------------------- plugins/home/api-report.md | 12 +-- plugins/stack-overflow/api-report.md | 2 +- 3 files changed, 8 insertions(+), 136 deletions(-) diff --git a/plugins/home-react/api-report.md b/plugins/home-react/api-report.md index 43fdbf403c..9367fd61cc 100644 --- a/plugins/home-react/api-report.md +++ b/plugins/home-react/api-report.md @@ -1,17 +1,12 @@ -## API Report File for "@backstage/plugin-home" +## API Report File for "@backstage/plugin-home-react" > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts /// -import { BackstagePlugin } from '@backstage/core-plugin-api'; import { Extension } from '@backstage/core-plugin-api'; -import { default as React_2 } from 'react'; -import { ReactElement } from 'react'; -import { ReactNode } from 'react'; import { RJSFSchema } from '@rjsf/utils'; -import { RouteRef } from '@backstage/core-plugin-api'; // @public (undocumented) export type CardExtensionProps = ComponentRenderer & { @@ -37,22 +32,6 @@ export type CardSettings = { schema?: RJSFSchema; }; -// @public (undocumented) -export type ClockConfig = { - label: string; - timeZone: string; -}; - -// @public (undocumented) -export const ComponentAccordion: (props: { - title: string; - expanded?: boolean | undefined; - Content: () => JSX.Element; - Actions?: (() => JSX.Element) | undefined; - Settings?: (() => JSX.Element) | undefined; - ContextProvider?: ((props: any) => JSX.Element) | undefined; -}) => JSX.Element; - // @public (undocumented) export type ComponentParts = { Content: (props?: any) => JSX.Element; @@ -66,22 +45,6 @@ export type ComponentRenderer = { Renderer?: (props: RendererProps) => JSX.Element; }; -// @public (undocumented) -export const ComponentTab: (props: { - title: string; - Content: () => JSX.Element; - ContextProvider?: ((props: any) => JSX.Element) | undefined; -}) => JSX.Element; - -// @public (undocumented) -export const ComponentTabs: (props: { - title: string; - tabs: { - label: string; - Component: () => JSX.Element; - }[]; -}) => JSX.Element; - // @public export function createCardExtension(options: { title: string; @@ -92,71 +55,6 @@ export function createCardExtension(options: { settings?: CardSettings; }): Extension<(props: CardExtensionProps) => JSX.Element>; -// @public -export const CustomHomepageGrid: ( - props: CustomHomepageGridProps, -) => JSX.Element; - -// @public (undocumented) -export type CustomHomepageGridProps = { - children?: ReactNode; - config?: LayoutConfiguration[]; - rowHeight?: number; -}; - -// @public -export const HeaderWorldClock: (props: { - clockConfigs: ClockConfig[]; - customTimeFormat?: Intl.DateTimeFormatOptions | undefined; -}) => JSX.Element | null; - -// @public -export const HomePageCompanyLogo: (props: { - logo?: ReactNode; - className?: string | undefined; -}) => JSX.Element; - -// @public (undocumented) -export const HomepageCompositionRoot: (props: { - title?: string | undefined; - children?: ReactNode; -}) => JSX.Element; - -// @public (undocumented) -export const HomePageRandomJoke: ( - props: CardExtensionProps<{ - defaultCategory?: 'any' | 'programming' | undefined; - }>, -) => JSX.Element; - -// @public -export const HomePageStarredEntities: ( - props: CardExtensionProps, -) => JSX.Element; - -// @public -export const HomePageToolkit: ( - props: CardExtensionProps, -) => JSX.Element; - -// @public (undocumented) -export const homePlugin: BackstagePlugin< - { - root: RouteRef; - }, - {}, - {} ->; - -// @public -export type LayoutConfiguration = { - component: ReactElement | string; - x: number; - y: number; - width: number; - height: number; -}; - // @public (undocumented) export type RendererProps = { title: string; @@ -169,30 +67,4 @@ export const SettingsModal: (props: { componentName: string; children: JSX.Element; }) => JSX.Element; - -// @public (undocumented) -export const TemplateBackstageLogo: (props: { - classes: { - svg: string; - path: string; - }; -}) => JSX.Element; - -// @public (undocumented) -export const TemplateBackstageLogoIcon: () => JSX.Element; - -// @public (undocumented) -export type Tool = { - label: string; - url: string; - icon: React_2.ReactNode; -}; - -// @public -export type ToolkitContentProps = { - tools: Tool[]; -}; - -// @public -export const WelcomeTitle: () => JSX.Element; ``` diff --git a/plugins/home/api-report.md b/plugins/home/api-report.md index 43fdbf403c..30ee6732cd 100644 --- a/plugins/home/api-report.md +++ b/plugins/home/api-report.md @@ -13,12 +13,12 @@ import { ReactNode } from 'react'; import { RJSFSchema } from '@rjsf/utils'; import { RouteRef } from '@backstage/core-plugin-api'; -// @public (undocumented) +// @public @deprecated (undocumented) export type CardExtensionProps = ComponentRenderer & { title?: string; } & T; -// @public (undocumented) +// @public @deprecated (undocumented) export type CardLayout = { width?: { minColumns?: number; @@ -53,7 +53,7 @@ export const ComponentAccordion: (props: { ContextProvider?: ((props: any) => JSX.Element) | undefined; }) => JSX.Element; -// @public (undocumented) +// @public @deprecated (undocumented) export type ComponentParts = { Content: (props?: any) => JSX.Element; Actions?: () => JSX.Element; @@ -61,7 +61,7 @@ export type ComponentParts = { ContextProvider?: (props: any) => JSX.Element; }; -// @public (undocumented) +// @public @deprecated (undocumented) export type ComponentRenderer = { Renderer?: (props: RendererProps) => JSX.Element; }; @@ -82,7 +82,7 @@ export const ComponentTabs: (props: { }[]; }) => JSX.Element; -// @public +// @public @deprecated export function createCardExtension(options: { title: string; components: () => Promise; @@ -157,7 +157,7 @@ export type LayoutConfiguration = { height: number; }; -// @public (undocumented) +// @public @deprecated (undocumented) export type RendererProps = { title: string; } & ComponentParts; diff --git a/plugins/stack-overflow/api-report.md b/plugins/stack-overflow/api-report.md index b006f263ed..3e27318acb 100644 --- a/plugins/stack-overflow/api-report.md +++ b/plugins/stack-overflow/api-report.md @@ -7,7 +7,7 @@ import { ApiRef } from '@backstage/core-plugin-api'; import { BackstagePlugin } from '@backstage/core-plugin-api'; -import { CardExtensionProps } from '@backstage/plugin-home'; +import { CardExtensionProps } from '@backstage/plugin-home-react'; import { default as React_2 } from 'react'; import { ResultHighlight } from '@backstage/plugin-search-common'; import { SearchResultListItemExtensionProps } from '@backstage/plugin-search-react'; From e5e686f72df2cb3943a9f282b4bbf7ebc0970dc0 Mon Sep 17 00:00:00 2001 From: Malikah Montgomery Date: Mon, 15 May 2023 12:39:36 -0400 Subject: [PATCH 102/213] move react to dev depend fix error Signed-off-by: Malikah Montgomery --- plugins/home-react/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/home-react/package.json b/plugins/home-react/package.json index e6f96e65f4..24c75b05eb 100644 --- a/plugins/home-react/package.json +++ b/plugins/home-react/package.json @@ -37,8 +37,7 @@ "@backstage/core-plugin-api": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@rjsf/utils": "5.6.0", - "@types/react": "^16.13.1 || ^17.0.0" + "@rjsf/utils": "5.6.0" }, "peerDependencies": { "react": "^16.13.1 || ^17.0.0", @@ -55,6 +54,7 @@ "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", "@types/node": "^16.11.26", + "@types/react": "^16.13.1 || ^17.0.0", "@types/react-grid-layout": "^1.3.2", "cross-fetch": "^3.1.5", "msw": "^1.0.0" From 976b021d09c396d027f3e148daeb5d2599692f44 Mon Sep 17 00:00:00 2001 From: Malikah Montgomery Date: Tue, 16 May 2023 09:08:46 -0400 Subject: [PATCH 103/213] Update readme, remove changelog, and reset version to 0.0.0 Signed-off-by: Malikah Montgomery --- plugins/home-react/CHANGELOG.md | 0 plugins/home-react/README.md | 245 +------------------------------- plugins/home-react/package.json | 2 +- 3 files changed, 3 insertions(+), 244 deletions(-) delete mode 100644 plugins/home-react/CHANGELOG.md diff --git a/plugins/home-react/CHANGELOG.md b/plugins/home-react/CHANGELOG.md deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/plugins/home-react/README.md b/plugins/home-react/README.md index 7da0034662..a341de8f08 100644 --- a/plugins/home-react/README.md +++ b/plugins/home-react/README.md @@ -1,244 +1,3 @@ -# Home +# Home React -The Home plugin introduces a system for composing a Home Page for Backstage in order to surface relevant info and provide convenient shortcuts for common tasks. It's designed with composability in mind with an open ecosystem that allows anyone to contribute with any component, to be included in any Home Page. - -For App Integrators, the system is designed to be composable to give total freedom in designing a Home Page that suits the needs of the organization. From the perspective of a Component Developer who wishes to contribute with building blocks to be included in Home Pages, there's a convenient interface for bundling the different parts and exporting them with both error boundary and lazy loading handled under the surface. - -## Getting started - -If you have a standalone app (you didn't clone this repo), then do - -```bash -# From your Backstage root directory -yarn add --cwd packages/app @backstage/plugin-home -``` - -### Setting up the Home Page - -1. Create a Home Page Component that will be used for composition. - -`packages/app/src/components/home/HomePage.tsx` - -```tsx -import React from 'react'; - -export const HomePage = () => { - return { - /* TODO: Compose a Home Page here */ - }; -}; -``` - -2. Add a route where the homepage will live, presumably `/`. - -`packages/app/src/App.tsx` - -```tsx -import { HomepageCompositionRoot } from '@backstage/plugin-home'; -import { HomePage } from './components/home/HomePage'; - -// ... -}> - -; -// ... -``` - -### Creating Components - -The Home Page can be composed with regular React components, so there's no magic in creating components to be used for composition 🪄 🎩 . However, in order to assure that your component fits into a diverse set of Home Pages, there's an extension creator for this purpose, that creates a Card-based layout, for consistency between components (read more about extensions [here](https://backstage.io/docs/plugins/composability#extensions)). The extension creator requires two fields: `title` and `components`. The `components` field is expected to be an asynchronous import that should at least contain a `Content` field. Additionally, you can optionally provide `settings`, `actions` and `contextProvider` as well. These parts will be combined to create a card, where the `content`, `actions` and `settings` will be wrapped within the `contextProvider` in order to be able to access to context and effectively communicate with one another. - -Finally, the `createCardExtension` also accepts a generic, such that Component Developers can indicate to App Integrators what custom props their component will accept, such as the example below where the default category of the random jokes can be set. - -```tsx -export const RandomJokeHomePageComponent = homePlugin.provide( - createCardExtension<{ defaultCategory?: 'programming' | 'any' }>({ - title: 'Random Joke', - components: () => import('./homePageComponents/RandomJoke'), - }), -); -``` - -In summary: it is not necessary to use the `createCardExtension` extension creator to register a home page component, although it is convenient since it provides error boundary and lazy loading, and it also may hook into other functionality in the future. - -### Composing a Home Page - -Composing a Home Page is no different from creating a regular React Component, i.e. the App Integrator is free to include whatever content they like. However, there are components developed with the Home Page in mind, as described in the previous section. If created by the `createCardExtension` extension creator, they are rendered like so - -```tsx -import React from 'react'; -import Grid from '@material-ui/core/Grid'; -import { RandomJokeHomePageComponent } from '@backstage/plugin-home'; - -export const HomePage = () => { - return ( - - - - - - ); -}; -``` - -Additionally, the App Integrator is provided an escape hatch in case the way the card is rendered does not fit their requirements. They may optionally pass the `Renderer`-prop, which will receive the `title`, `content` and optionally `actions`, `settings` and `contextProvider`, if they exist for the component. This allows the App Integrator to render the content in any way they want. - -## Customizable home page - -If you want to allow users to customize the components that are shown in the home page, you can use CustomHomePageGrid component. -By adding the allowed components inside the grid, the user can add, configure, remove and move the components around in their -home page. The user configuration is also saved and restored in the process for later use. - -```tsx -import { - HomePageRandomJoke, - HomePageStarredEntities, - CustomHomepageGrid, -} from '@backstage/plugin-home'; -import { Content, Header, Page } from '@backstage/core-components'; -import { HomePageSearchBar } from '@backstage/plugin-search'; -import { HomePageCalendar } from '@backstage/plugin-gcalendar'; -import { MicrosoftCalendarCard } from '@backstage/plugin-microsoft-calendar'; - -export const HomePage = () => { - return ( - - // Insert the allowed widgets inside the grid - - - - - - - ); -}; -``` - -### Creating Customizable Components - -The custom home page can use the default components created by using the default `createCardExtension` method but if you -want to add additional configuration like component size or settings, you can define those in the `layout` -property: - -```tsx -export const RandomJokeHomePageComponent = homePlugin.provide( - createCardExtension<{ defaultCategory?: 'any' | 'programming' }>({ - name: 'HomePageRandomJoke', - title: 'Random Joke', - components: () => import('./homePageComponents/RandomJoke'), - layout: { - height: { minRows: 7 }, - width: { minColumns: 3 }, - }, - }), -); -``` - -These settings can also be defined for components that use `createReactExtension` instead `createCardExtension` by using -the data property: - -```tsx -export const HomePageSearchBar = searchPlugin.provide( - createReactExtension({ - name: 'HomePageSearchBar', - component: { - lazy: () => - import('./components/HomePageComponent').then(m => m.HomePageSearchBar), - }, - data: { - 'home.widget.config': { - layout: { - height: { maxRows: 1 }, - }, - }, - }, - }), -); -``` - -Available home page properties that are used for homepage widgets are: - -| Key | Type | Description | -| ----------------------------- | ------- | ------------------------------------------------------------ | -| `title` | string | User friend title. Shown when user adds widgets to homepage | -| `description` | string | Widget description. Shown when user adds widgets to homepage | -| `layout.width.defaultColumns` | integer | Default width of the widget (1-12) | -| `layout.width.minColumns` | integer | Minimum width of the widget (1-12) | -| `layout.width.maxColumns` | integer | Maximum width of the widget (1-12) | -| `layout.height.defaultRows` | integer | Default height of the widget (1-12) | -| `layout.height.minRows` | integer | Minimum height of the widget (1-12) | -| `layout.height.maxRows` | integer | Maximum height of the widget (1-12) | -| `settings.schema` | object | Customization settings of the widget, see below | - -#### Widget Specific Settings - -To define settings that the users can change for your component, you should define the `layout` and `settings` -properties. The `settings.schema` object should follow -[react-jsonschema-form](https://rjsf-team.github.io/react-jsonschema-form/docs/) definition and the type of the schema -must be `object`. - -```tsx -export const HomePageRandomJoke = homePlugin.provide( - createCardExtension<{ defaultCategory?: 'any' | 'programming' }>({ - name: 'HomePageRandomJoke', - title: 'Random Joke', - components: () => import('./homePageComponents/RandomJoke'), - description: 'Shows a random joke about optional category', - layout: { - height: { minRows: 4 }, - width: { minColumns: 3 }, - }, - settings: { - schema: { - title: 'Random Joke settings', - type: 'object', - properties: { - defaultCategory: { - title: 'Category', - type: 'string', - enum: ['any', 'programming', 'dad'], - default: 'any', - }, - }, - }, - }, - }), -); -``` - -This allows the user to select `defaultCategory` for the RandomJoke widgets that are added to the homepage. -Each widget has its own settings and the setting values are passed to the underlying React component in props. - -In case your `CardExtension` had `Settings` component defined, it will automatically disappear when you add the -`settingsSchema` to the component data structure. - -### Adding Default Layout - -You can set the default layout of the customizable home page by passing configuration to the `CustomHomepageGrid` -component: - -```tsx -const defaultConfig = [ - { - component: , // Or 'HomePageSearchBar' as a string if you know the component name - x: 0, - y: 0, - width: 12, - height: 1, - }, -]; - - -``` - -## Contributing - -### Homepage Components - -We believe that people have great ideas for what makes a useful Home Page, and we want to make it easy for every to benefit from the effort you put in to create something cool for the Home Page. Therefore, a great way of contributing is by simply creating more Home Page Components, than can then be used by everyone when composing their own Home Page. If they are tightly coupled to an existing plugin, it is recommended to allow them to live within that plugin, for convenience and to limit complex dependencies. On the other hand, if there's no clear plugin that the component is based on, it's also fine to contribute them into the [home plugin](/plugins/home/src/homePageComponents) - -Additionally, the API is at a very early state, so contributing with additional use cases may expose weaknesses in the current solution that we may iterate on, to provide more flexibility and ease of use for those who wish to develop components for the Home Page. - -### Homepage Templates - -We are hoping that we together can build up a collection of Homepage templates. We therefore put together a place where we can collect all the templates for the Home Plugin in the [storybook](https://backstage.io/storybook/?path=/story/plugins-home-templates). If you would like to contribute with a template, start by taking a look at the [DefaultTemplate storybook example to create your own](/packages/app/src/components/home/templates/DefaultTemplate.stories.tsx), and then open a PR with your suggestion. +A Library that contains React Components for [home plugin](/plugins/home/README.md) depend on. diff --git a/plugins/home-react/package.json b/plugins/home-react/package.json index 24c75b05eb..e32581bfd6 100644 --- a/plugins/home-react/package.json +++ b/plugins/home-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-home-react", "description": "A Backstage plugin that contains react components helps you build a home page", - "version": "0.0.1", + "version": "0.0.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", From 63b2dfd870a64ed299bb13ce0417b2f53b6fc003 Mon Sep 17 00:00:00 2001 From: Malikah Montgomery Date: Tue, 16 May 2023 10:17:55 -0400 Subject: [PATCH 104/213] update readme Signed-off-by: Malikah Montgomery --- plugins/home-react/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/home-react/README.md b/plugins/home-react/README.md index a341de8f08..c10ad8d323 100644 --- a/plugins/home-react/README.md +++ b/plugins/home-react/README.md @@ -1,3 +1,3 @@ # Home React -A Library that contains React Components for [home plugin](/plugins/home/README.md) depend on. +A new Library that contains React Components for [home plugin](/plugins/home/README.md) depend on. From e1e7e0a4aed3010f3b3b999f0e933640af87a360 Mon Sep 17 00:00:00 2001 From: Malikah Montgomery Date: Tue, 16 May 2023 14:33:16 -0400 Subject: [PATCH 105/213] update yarn lock after rebase Signed-off-by: Malikah Montgomery --- yarn.lock | 34 +--------------------------------- 1 file changed, 1 insertion(+), 33 deletions(-) diff --git a/yarn.lock b/yarn.lock index b5fbc69c3b..f644a4e4a1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7065,39 +7065,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-home@npm:^0.5.1": - version: 0.5.1 - resolution: "@backstage/plugin-home@npm:0.5.1" - dependencies: - "@backstage/catalog-model": ^1.3.0 - "@backstage/config": ^1.0.7 - "@backstage/core-components": ^0.13.0 - "@backstage/core-plugin-api": ^1.5.1 - "@backstage/plugin-catalog-react": ^1.5.0 - "@backstage/theme": ^0.2.19 - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.61 - "@rjsf/core-v5": "npm:@rjsf/core@5.6.0" - "@rjsf/material-ui": 5.6.0 - "@rjsf/utils": 5.6.0 - "@rjsf/validator-ajv8": 5.6.0 - "@types/react": ^16.13.1 || ^17.0.0 - lodash: ^4.17.21 - object-hash: ^3.0.0 - react-grid-layout: ^1.3.4 - react-resizable: ^3.0.4 - react-use: ^17.2.4 - zod: ~3.21.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 - react-dom: ^16.13.1 || ^17.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - checksum: 0470e0d4848818c59fdf5c3765b769c22bf2b47e26b0ed0c80398baac6a8e1ac703e94152dc20498bfda790aec18a2af65605fcd8c6eb2e7ba7b85eb6ce80b69 - languageName: node - linkType: hard - -"@backstage/plugin-home@workspace:^, @backstage/plugin-home@workspace:plugins/home": +"@backstage/plugin-home@^0.5.1, @backstage/plugin-home@workspace:^, @backstage/plugin-home@workspace:plugins/home": version: 0.0.0-use.local resolution: "@backstage/plugin-home@workspace:plugins/home" dependencies: From 785694d143680dac9f21a6d6acbb5ef73dcdfe59 Mon Sep 17 00:00:00 2001 From: Malikah Montgomery Date: Wed, 17 May 2023 09:38:34 -0400 Subject: [PATCH 106/213] update changeset version, codeowners, and library type Signed-off-by: Malikah Montgomery --- .changeset/violet-pots-push.md | 2 +- .github/CODEOWNERS | 1 + plugins/home-react/package.json | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.changeset/violet-pots-push.md b/.changeset/violet-pots-push.md index 8e668977a9..f0074ed82e 100644 --- a/.changeset/violet-pots-push.md +++ b/.changeset/violet-pots-push.md @@ -1,6 +1,6 @@ --- '@backstage/plugin-stack-overflow': patch -'@backstage/plugin-home-react': patch +'@backstage/plugin-home-react': minor '@backstage/plugin-home': patch --- diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 3880a0facd..7518fbab96 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -56,6 +56,7 @@ yarn.lock @backstage/maintainers @back /plugins/gcalendar @backstage/maintainers @szubster @ptychu @kielosz @alexrybch /plugins/git-release-manager @backstage/maintainers @erikengervall /plugins/home @backstage/discoverability-maintainers +/plugins/home-* @backstage/discoverability-maintainers /plugins/ilert @backstage/maintainers @yacut /plugins/jenkins @backstage/maintainers @timja /plugins/jenkins-backend @backstage/maintainers @timja diff --git a/plugins/home-react/package.json b/plugins/home-react/package.json index e32581bfd6..a001db5b53 100644 --- a/plugins/home-react/package.json +++ b/plugins/home-react/package.json @@ -11,7 +11,7 @@ "types": "dist/index.d.ts" }, "backstage": { - "role": "frontend-plugin" + "role": "web-library" }, "homepage": "https://github.com/backstage/backstage/tree/master/plugins/home-react#readme", "repository": { From b27f802f180e25fa3332939037b4bdb16853529d Mon Sep 17 00:00:00 2001 From: Malikah Montgomery Date: Wed, 17 May 2023 10:04:04 -0400 Subject: [PATCH 107/213] refactor how to export deprecated module Signed-off-by: Malikah Montgomery --- plugins/home/src/deprecated.ts | 21 +++++++++++++++++++++ plugins/home/src/index.ts | 10 +--------- 2 files changed, 22 insertions(+), 9 deletions(-) create mode 100644 plugins/home/src/deprecated.ts diff --git a/plugins/home/src/deprecated.ts b/plugins/home/src/deprecated.ts new file mode 100644 index 0000000000..05c8537f99 --- /dev/null +++ b/plugins/home/src/deprecated.ts @@ -0,0 +1,21 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// import { createCardExtension } from './extensions'; + +// export { createCardExtension }; + +export * from './extensions'; diff --git a/plugins/home/src/index.ts b/plugins/home/src/index.ts index daa781f02c..63407c8531 100644 --- a/plugins/home/src/index.ts +++ b/plugins/home/src/index.ts @@ -36,12 +36,4 @@ export { export * from './components'; export * from './assets'; export * from './homePageComponents'; -export { createCardExtension } from './extensions'; -export type { - CardExtensionProps, - ComponentParts, - ComponentRenderer, - RendererProps, - CardLayout, - CardSettings, -} from './extensions'; +export * from './deprecated'; From b1c117375d9daa75d580d506843e2107c158ec6d Mon Sep 17 00:00:00 2001 From: kmarkow Date: Wed, 17 May 2023 11:16:22 -0400 Subject: [PATCH 108/213] Update api-report.md Signed-off-by: kmarkow --- plugins/home/api-report.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/plugins/home/api-report.md b/plugins/home/api-report.md index 30ee6732cd..d06f5266eb 100644 --- a/plugins/home/api-report.md +++ b/plugins/home/api-report.md @@ -13,6 +13,12 @@ import { ReactNode } from 'react'; import { RJSFSchema } from '@rjsf/utils'; import { RouteRef } from '@backstage/core-plugin-api'; +// @public (undocumented) +export type CardConfig = { + layout?: CardLayout; + settings?: CardSettings; +}; + // @public @deprecated (undocumented) export type CardExtensionProps = ComponentRenderer & { title?: string; From 3c8761d5c64c656d4a8b981b0630b24a0d879a1c Mon Sep 17 00:00:00 2001 From: kmarkow Date: Wed, 17 May 2023 13:15:09 -0400 Subject: [PATCH 109/213] Code Review: Add depreacted.ts and remove the old duplicated code Signed-off-by: kmarkow --- plugins/home-react/api-report.md | 6 + plugins/home-react/src/index.ts | 1 + plugins/home/api-report.md | 94 ++++---- plugins/home/package.json | 1 + .../componentRenderers/ComponentAccordion.tsx | 3 +- .../CustomHomepage/CustomHomepageGrid.tsx | 2 +- plugins/home/src/components/index.ts | 1 - plugins/home/src/deprecated.ts | 60 +++++- plugins/home/src/extensions.tsx | 200 ------------------ plugins/home/src/plugin.ts | 2 +- 10 files changed, 109 insertions(+), 261 deletions(-) delete mode 100644 plugins/home/src/extensions.tsx diff --git a/plugins/home-react/api-report.md b/plugins/home-react/api-report.md index 9367fd61cc..42e8fd0b0f 100644 --- a/plugins/home-react/api-report.md +++ b/plugins/home-react/api-report.md @@ -8,6 +8,12 @@ import { Extension } from '@backstage/core-plugin-api'; import { RJSFSchema } from '@rjsf/utils'; +// @public (undocumented) +export type CardConfig = { + layout?: CardLayout; + settings?: CardSettings; +}; + // @public (undocumented) export type CardExtensionProps = ComponentRenderer & { title?: string; diff --git a/plugins/home-react/src/index.ts b/plugins/home-react/src/index.ts index 90c76d0836..1f02ded1c6 100644 --- a/plugins/home-react/src/index.ts +++ b/plugins/home-react/src/index.ts @@ -28,4 +28,5 @@ export type { RendererProps, CardLayout, CardSettings, + CardConfig, } from './extensions'; diff --git a/plugins/home/api-report.md b/plugins/home/api-report.md index d06f5266eb..20849501cd 100644 --- a/plugins/home/api-report.md +++ b/plugins/home/api-report.md @@ -6,42 +6,38 @@ /// import { BackstagePlugin } from '@backstage/core-plugin-api'; -import { Extension } from '@backstage/core-plugin-api'; +import { CardConfig as CardConfig_2 } from '@backstage/plugin-home-react'; +import { CardExtensionProps as CardExtensionProps_2 } from '@backstage/plugin-home-react'; +import { CardLayout as CardLayout_2 } from '@backstage/plugin-home-react'; +import { CardSettings as CardSettings_2 } from '@backstage/plugin-home-react'; +import { ComponentParts as ComponentParts_2 } from '@backstage/plugin-home-react'; +import { ComponentRenderer as ComponentRenderer_2 } from '@backstage/plugin-home-react'; +import { createCardExtension as createCardExtension_2 } from '@backstage/plugin-home-react'; import { default as React_2 } from 'react'; import { ReactElement } from 'react'; import { ReactNode } from 'react'; -import { RJSFSchema } from '@rjsf/utils'; +import { RendererProps as RendererProps_2 } from '@backstage/plugin-home-react'; import { RouteRef } from '@backstage/core-plugin-api'; -// @public (undocumented) -export type CardConfig = { - layout?: CardLayout; - settings?: CardSettings; -}; - +// Warning: (tsdoc-at-sign-in-word) The "@" character looks like part of a TSDoc tag; use a backslash to escape it +// // @public @deprecated (undocumented) -export type CardExtensionProps = ComponentRenderer & { - title?: string; -} & T; +export type CardConfig = CardConfig_2; +// Warning: (tsdoc-at-sign-in-word) The "@" character looks like part of a TSDoc tag; use a backslash to escape it +// // @public @deprecated (undocumented) -export type CardLayout = { - width?: { - minColumns?: number; - maxColumns?: number; - defaultColumns?: number; - }; - height?: { - minRows?: number; - maxRows?: number; - defaultRows?: number; - }; -}; +export type CardExtensionProps = CardExtensionProps_2; -// @public (undocumented) -export type CardSettings = { - schema?: RJSFSchema; -}; +// Warning: (tsdoc-at-sign-in-word) The "@" character looks like part of a TSDoc tag; use a backslash to escape it +// +// @public @deprecated (undocumented) +export type CardLayout = CardLayout_2; + +// Warning: (tsdoc-at-sign-in-word) The "@" character looks like part of a TSDoc tag; use a backslash to escape it +// +// @public @deprecated (undocumented) +export type CardSettings = CardSettings_2; // @public (undocumented) export type ClockConfig = { @@ -59,18 +55,15 @@ export const ComponentAccordion: (props: { ContextProvider?: ((props: any) => JSX.Element) | undefined; }) => JSX.Element; +// Warning: (tsdoc-at-sign-in-word) The "@" character looks like part of a TSDoc tag; use a backslash to escape it +// // @public @deprecated (undocumented) -export type ComponentParts = { - Content: (props?: any) => JSX.Element; - Actions?: () => JSX.Element; - Settings?: () => JSX.Element; - ContextProvider?: (props: any) => JSX.Element; -}; +export type ComponentParts = ComponentParts_2; +// Warning: (tsdoc-at-sign-in-word) The "@" character looks like part of a TSDoc tag; use a backslash to escape it +// // @public @deprecated (undocumented) -export type ComponentRenderer = { - Renderer?: (props: RendererProps) => JSX.Element; -}; +export type ComponentRenderer = ComponentRenderer_2; // @public (undocumented) export const ComponentTab: (props: { @@ -88,15 +81,10 @@ export const ComponentTabs: (props: { }[]; }) => JSX.Element; -// @public @deprecated -export function createCardExtension(options: { - title: string; - components: () => Promise; - name?: string; - description?: string; - layout?: CardLayout; - settings?: CardSettings; -}): Extension<(props: CardExtensionProps) => JSX.Element>; +// Warning: (tsdoc-at-sign-in-word) The "@" character looks like part of a TSDoc tag; use a backslash to escape it +// +// @public @deprecated (undocumented) +export const createCardExtension: typeof createCardExtension_2; // @public export const CustomHomepageGrid: ( @@ -130,19 +118,19 @@ export const HomepageCompositionRoot: (props: { // @public (undocumented) export const HomePageRandomJoke: ( - props: CardExtensionProps<{ + props: CardExtensionProps_2<{ defaultCategory?: 'any' | 'programming' | undefined; }>, ) => JSX.Element; // @public export const HomePageStarredEntities: ( - props: CardExtensionProps, + props: CardExtensionProps_2, ) => JSX.Element; // @public export const HomePageToolkit: ( - props: CardExtensionProps, + props: CardExtensionProps_2, ) => JSX.Element; // @public (undocumented) @@ -163,12 +151,14 @@ export type LayoutConfiguration = { height: number; }; +// Warning: (tsdoc-at-sign-in-word) The "@" character looks like part of a TSDoc tag; use a backslash to escape it +// // @public @deprecated (undocumented) -export type RendererProps = { - title: string; -} & ComponentParts; +export type RendererProps = RendererProps_2; -// @public (undocumented) +// Warning: (tsdoc-at-sign-in-word) The "@" character looks like part of a TSDoc tag; use a backslash to escape it +// +// @public @deprecated (undocumented) export const SettingsModal: (props: { open: boolean; close: Function; diff --git a/plugins/home/package.json b/plugins/home/package.json index ff714b16ca..c0b2b005df 100644 --- a/plugins/home/package.json +++ b/plugins/home/package.json @@ -38,6 +38,7 @@ "@backstage/core-components": "workspace:^", "@backstage/core-plugin-api": "workspace:^", "@backstage/plugin-catalog-react": "workspace:^", + "@backstage/plugin-home-react": "workspace:^", "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", diff --git a/plugins/home/src/componentRenderers/ComponentAccordion.tsx b/plugins/home/src/componentRenderers/ComponentAccordion.tsx index 8b9795c9c3..77e7561e55 100644 --- a/plugins/home/src/componentRenderers/ComponentAccordion.tsx +++ b/plugins/home/src/componentRenderers/ComponentAccordion.tsx @@ -15,6 +15,7 @@ */ import React from 'react'; +import { SettingsModal } from '@backstage/plugin-home-react'; import { Accordion, AccordionDetails, @@ -27,8 +28,6 @@ import { makeStyles } from '@material-ui/core/styles'; import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; import SettingsIcon from '@material-ui/icons/Settings'; -import { SettingsModal } from '../components'; - const useStyles = makeStyles((theme: Theme) => ({ settingsIconButton: { padding: theme.spacing(0, 1, 0, 0), diff --git a/plugins/home/src/components/CustomHomepage/CustomHomepageGrid.tsx b/plugins/home/src/components/CustomHomepage/CustomHomepageGrid.tsx index 6af9044cbd..ae8e0dd9bb 100644 --- a/plugins/home/src/components/CustomHomepage/CustomHomepageGrid.tsx +++ b/plugins/home/src/components/CustomHomepage/CustomHomepageGrid.tsx @@ -42,7 +42,7 @@ import { LayoutConfigurationSchema, WidgetSchema, } from './types'; -import { CardConfig } from '../../extensions'; +import { CardConfig } from '@backstage/plugin-home-react'; // eslint-disable-next-line new-cap const ResponsiveGrid = WidthProvider(Responsive); diff --git a/plugins/home/src/components/index.ts b/plugins/home/src/components/index.ts index e06013d3fa..e528e0795d 100644 --- a/plugins/home/src/components/index.ts +++ b/plugins/home/src/components/index.ts @@ -15,5 +15,4 @@ */ export { HomepageCompositionRoot } from './HomepageCompositionRoot'; -export { SettingsModal } from './SettingsModal'; export * from './CustomHomepage'; diff --git a/plugins/home/src/deprecated.ts b/plugins/home/src/deprecated.ts index 05c8537f99..6fe9320316 100644 --- a/plugins/home/src/deprecated.ts +++ b/plugins/home/src/deprecated.ts @@ -14,8 +14,60 @@ * limitations under the License. */ -// import { createCardExtension } from './extensions'; +import { + createCardExtension as homeReactCreateCardExtension, + CardConfig as homeReactCardConfig, + CardExtensionProps as homeReactCardExtensionProps, + CardLayout as homeReactCardLayout, + CardSettings as homeReactCardSettings, + ComponentParts as homeReactComponentParts, + ComponentRenderer as homeReactComponentRenderer, + RendererProps as homeReactRendererProps, + SettingsModal as homeReactSettingsModal, +} from '@backstage/plugin-home-react'; -// export { createCardExtension }; - -export * from './extensions'; +/** + * @public + * @deprecated Import from '@backstage/plugin-home-react' instead + */ +export const createCardExtension = homeReactCreateCardExtension; +/** + * @public + * @deprecated Import from '@backstage/plugin-home-react' instead + */ +export type CardExtensionProps = homeReactCardExtensionProps; +/** + * @public + * @deprecated Import from '@backstage/plugin-home-react' instead + */ +export type CardLayout = homeReactCardLayout; +/** + * @public + * @deprecated Import from '@backstage/plugin-home-react' instead + */ +export type CardSettings = homeReactCardSettings; +/** + * @public + * @deprecated Import from '@backstage/plugin-home-react' instead + */ +export type CardConfig = homeReactCardConfig; +/** + * @public + * @deprecated Import from '@backstage/plugin-home-react' instead + */ +export type ComponentParts = homeReactComponentParts; +/** + * @public + * @deprecated Import from '@backstage/plugin-home-react' instead + */ +export type ComponentRenderer = homeReactComponentRenderer; +/** + * @public + * @deprecated Import from '@backstage/plugin-home-react' instead + */ +export type RendererProps = homeReactRendererProps; +/** + * @public + * @deprecated Import from '@backstage/plugin-home-react' instead + */ +export const SettingsModal = homeReactSettingsModal; diff --git a/plugins/home/src/extensions.tsx b/plugins/home/src/extensions.tsx deleted file mode 100644 index fdb9e9d67f..0000000000 --- a/plugins/home/src/extensions.tsx +++ /dev/null @@ -1,200 +0,0 @@ -/* - * Copyright 2021 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import React, { Suspense } from 'react'; -import { IconButton } from '@material-ui/core'; -import SettingsIcon from '@material-ui/icons/Settings'; -import { InfoCard } from '@backstage/core-components'; -import { SettingsModal } from './components'; -import { createReactExtension, useApp } from '@backstage/core-plugin-api'; -import { RJSFSchema } from '@rjsf/utils'; - -/** - * @public - * @deprecated Please use the same type from `@backstage/plugin-home-react` instead - */ -export type ComponentRenderer = { - Renderer?: (props: RendererProps) => JSX.Element; -}; - -/** - * @public - * @deprecated Please use the same type from `@backstage/plugin-home-react` instead - */ -export type ComponentParts = { - Content: (props?: any) => JSX.Element; - Actions?: () => JSX.Element; - Settings?: () => JSX.Element; - ContextProvider?: (props: any) => JSX.Element; -}; - -/** - * @public - * @deprecated Please use the same type from `@backstage/plugin-home-react` instead - */ -export type RendererProps = { title: string } & ComponentParts; - -/** - * @public - * @deprecated Please use the same type from `@backstage/plugin-home-react` instead - */ -export type CardExtensionProps = ComponentRenderer & { title?: string } & T; - -/** - * @public - * @deprecated Please use the same type from `@backstage/plugin-home-react` instead - */ -export type CardLayout = { - width?: { minColumns?: number; maxColumns?: number; defaultColumns?: number }; - height?: { minRows?: number; maxRows?: number; defaultRows?: number }; -}; - -/** - * @public - */ -export type CardSettings = { - schema?: RJSFSchema; -}; - -/** - * @public - */ -export type CardConfig = { - layout?: CardLayout; - settings?: CardSettings; -}; - -/** - * An extension creator to create card based components for the homepage - * - * @public - * @deprecated Please use the same type from `@backstage/plugin-home-react` instead - */ -export function createCardExtension(options: { - title: string; - components: () => Promise; - name?: string; - description?: string; - layout?: CardLayout; - settings?: CardSettings; -}) { - const { title, components, name, description, layout, settings } = options; - // If widget settings schema is defined, we don't want to show the Settings icon or dialog - const isCustomizable = settings?.schema !== undefined; - - return createReactExtension({ - name, - data: { title, description, 'home.widget.config': { layout, settings } }, - component: { - lazy: () => - components().then(componentParts => { - return (props: CardExtensionProps) => { - return ( - - ); - }; - }), - }, - }); -} - -type CardExtensionComponentProps = CardExtensionProps & - ComponentParts & { - title: string; - isCustomizable?: boolean; - overrideTitle?: string; - }; - -function CardExtension(props: CardExtensionComponentProps) { - const { - Renderer, - Content, - Settings, - Actions, - ContextProvider, - isCustomizable, - title, - ...childProps - } = props; - const app = useApp(); - const { Progress } = app.getComponents(); - const [settingsOpen, setSettingsOpen] = React.useState(false); - - if (Renderer) { - return ( - }> - - - ); - } - - const cardProps = { - title: title, - ...(Settings && !isCustomizable - ? { - action: ( - setSettingsOpen(true)}> - Settings - - ), - } - : {}), - ...(Actions - ? { - actions: , - } - : {}), - }; - - const innerContent = ( - - {Settings && !isCustomizable && ( - setSettingsOpen(false)} - > - - - )} - - - ); - - return ( - }> - {ContextProvider ? ( - {innerContent} - ) : ( - innerContent - )} - - ); -} diff --git a/plugins/home/src/plugin.ts b/plugins/home/src/plugin.ts index 339e6dba2b..74a1c11390 100644 --- a/plugins/home/src/plugin.ts +++ b/plugins/home/src/plugin.ts @@ -19,7 +19,7 @@ import { createPlugin, createRoutableExtension, } from '@backstage/core-plugin-api'; -import { createCardExtension } from './extensions'; +import { createCardExtension } from '@backstage/plugin-home-react'; import { ToolkitContentProps } from './homePageComponents'; import { rootRouteRef } from './routes'; From d878bd873cbd43973e07b42ab6d353c7489299f0 Mon Sep 17 00:00:00 2001 From: kmarkow Date: Wed, 17 May 2023 13:17:53 -0400 Subject: [PATCH 110/213] Update yarn.lock Signed-off-by: kmarkow --- yarn.lock | 1 + 1 file changed, 1 insertion(+) diff --git a/yarn.lock b/yarn.lock index f644a4e4a1..90101be828 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7077,6 +7077,7 @@ __metadata: "@backstage/core-plugin-api": "workspace:^" "@backstage/dev-utils": "workspace:^" "@backstage/plugin-catalog-react": "workspace:^" + "@backstage/plugin-home-react": "workspace:^" "@backstage/test-utils": "workspace:^" "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 From 8d3ebb7b0c070d9fb88892bef56b5497ffcf202e Mon Sep 17 00:00:00 2001 From: kmarkow Date: Wed, 17 May 2023 13:27:25 -0400 Subject: [PATCH 111/213] Code Review: Update documentation Signed-off-by: kmarkow --- plugins/home/README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/plugins/home/README.md b/plugins/home/README.md index 7da0034662..20b91289b1 100644 --- a/plugins/home/README.md +++ b/plugins/home/README.md @@ -51,6 +51,8 @@ The Home Page can be composed with regular React components, so there's no magic Finally, the `createCardExtension` also accepts a generic, such that Component Developers can indicate to App Integrators what custom props their component will accept, such as the example below where the default category of the random jokes can be set. ```tsx +import { createCardExtension } from '@backstage/plugin-home-react'; + export const RandomJokeHomePageComponent = homePlugin.provide( createCardExtension<{ defaultCategory?: 'programming' | 'any' }>({ title: 'Random Joke', @@ -121,6 +123,8 @@ want to add additional configuration like component size or settings, you can de property: ```tsx +import { createCardExtension } from '@backstage/plugin-home-react'; + export const RandomJokeHomePageComponent = homePlugin.provide( createCardExtension<{ defaultCategory?: 'any' | 'programming' }>({ name: 'HomePageRandomJoke', @@ -178,6 +182,8 @@ properties. The `settings.schema` object should follow must be `object`. ```tsx +import { createCardExtension } from '@backstage/plugin-home-react'; + export const HomePageRandomJoke = homePlugin.provide( createCardExtension<{ defaultCategory?: 'any' | 'programming' }>({ name: 'HomePageRandomJoke', From e37c2b4590d7b343d5ff1101b53f8f2269bf5b64 Mon Sep 17 00:00:00 2001 From: kmarkow Date: Wed, 17 May 2023 14:24:43 -0400 Subject: [PATCH 112/213] Fix api-report in plugins/home package Signed-off-by: kmarkow --- plugins/home/api-report.md | 18 ------------------ plugins/home/src/deprecated.ts | 18 +++++++++--------- 2 files changed, 9 insertions(+), 27 deletions(-) diff --git a/plugins/home/api-report.md b/plugins/home/api-report.md index 20849501cd..56b1f54331 100644 --- a/plugins/home/api-report.md +++ b/plugins/home/api-report.md @@ -19,23 +19,15 @@ import { ReactNode } from 'react'; import { RendererProps as RendererProps_2 } from '@backstage/plugin-home-react'; import { RouteRef } from '@backstage/core-plugin-api'; -// Warning: (tsdoc-at-sign-in-word) The "@" character looks like part of a TSDoc tag; use a backslash to escape it -// // @public @deprecated (undocumented) export type CardConfig = CardConfig_2; -// Warning: (tsdoc-at-sign-in-word) The "@" character looks like part of a TSDoc tag; use a backslash to escape it -// // @public @deprecated (undocumented) export type CardExtensionProps = CardExtensionProps_2; -// Warning: (tsdoc-at-sign-in-word) The "@" character looks like part of a TSDoc tag; use a backslash to escape it -// // @public @deprecated (undocumented) export type CardLayout = CardLayout_2; -// Warning: (tsdoc-at-sign-in-word) The "@" character looks like part of a TSDoc tag; use a backslash to escape it -// // @public @deprecated (undocumented) export type CardSettings = CardSettings_2; @@ -55,13 +47,9 @@ export const ComponentAccordion: (props: { ContextProvider?: ((props: any) => JSX.Element) | undefined; }) => JSX.Element; -// Warning: (tsdoc-at-sign-in-word) The "@" character looks like part of a TSDoc tag; use a backslash to escape it -// // @public @deprecated (undocumented) export type ComponentParts = ComponentParts_2; -// Warning: (tsdoc-at-sign-in-word) The "@" character looks like part of a TSDoc tag; use a backslash to escape it -// // @public @deprecated (undocumented) export type ComponentRenderer = ComponentRenderer_2; @@ -81,8 +69,6 @@ export const ComponentTabs: (props: { }[]; }) => JSX.Element; -// Warning: (tsdoc-at-sign-in-word) The "@" character looks like part of a TSDoc tag; use a backslash to escape it -// // @public @deprecated (undocumented) export const createCardExtension: typeof createCardExtension_2; @@ -151,13 +137,9 @@ export type LayoutConfiguration = { height: number; }; -// Warning: (tsdoc-at-sign-in-word) The "@" character looks like part of a TSDoc tag; use a backslash to escape it -// // @public @deprecated (undocumented) export type RendererProps = RendererProps_2; -// Warning: (tsdoc-at-sign-in-word) The "@" character looks like part of a TSDoc tag; use a backslash to escape it -// // @public @deprecated (undocumented) export const SettingsModal: (props: { open: boolean; diff --git a/plugins/home/src/deprecated.ts b/plugins/home/src/deprecated.ts index 6fe9320316..119e5ab731 100644 --- a/plugins/home/src/deprecated.ts +++ b/plugins/home/src/deprecated.ts @@ -28,46 +28,46 @@ import { /** * @public - * @deprecated Import from '@backstage/plugin-home-react' instead + * @deprecated Import from `@backstage/plugin-home-react` instead */ export const createCardExtension = homeReactCreateCardExtension; /** * @public - * @deprecated Import from '@backstage/plugin-home-react' instead + * @deprecated Import from `@backstage/plugin-home-react` instead */ export type CardExtensionProps = homeReactCardExtensionProps; /** * @public - * @deprecated Import from '@backstage/plugin-home-react' instead + * @deprecated Import from `@backstage/plugin-home-react` instead */ export type CardLayout = homeReactCardLayout; /** * @public - * @deprecated Import from '@backstage/plugin-home-react' instead + * @deprecated Import from `@backstage/plugin-home-react` instead */ export type CardSettings = homeReactCardSettings; /** * @public - * @deprecated Import from '@backstage/plugin-home-react' instead + * @deprecated Import from `@backstage/plugin-home-react` instead */ export type CardConfig = homeReactCardConfig; /** * @public - * @deprecated Import from '@backstage/plugin-home-react' instead + * @deprecated Import from `@backstage/plugin-home-react` instead */ export type ComponentParts = homeReactComponentParts; /** * @public - * @deprecated Import from '@backstage/plugin-home-react' instead + * @deprecated Import from `@backstage/plugin-home-react` instead */ export type ComponentRenderer = homeReactComponentRenderer; /** * @public - * @deprecated Import from '@backstage/plugin-home-react' instead + * @deprecated Import from `@backstage/plugin-home-react` instead */ export type RendererProps = homeReactRendererProps; /** * @public - * @deprecated Import from '@backstage/plugin-home-react' instead + * @deprecated Import from `@backstage/plugin-home-react` instead */ export const SettingsModal = homeReactSettingsModal; From 8ccd534ec095323dde4571542afe964e1b3921ad Mon Sep 17 00:00:00 2001 From: Camila Belo Date: Wed, 17 May 2023 20:35:43 +0200 Subject: [PATCH 113/213] fix(home): remove duplicated settings modal Signed-off-by: Camila Belo --- plugins/home/src/components/SettingsModal.tsx | 46 ------------------- 1 file changed, 46 deletions(-) delete mode 100644 plugins/home/src/components/SettingsModal.tsx diff --git a/plugins/home/src/components/SettingsModal.tsx b/plugins/home/src/components/SettingsModal.tsx deleted file mode 100644 index ace9944f28..0000000000 --- a/plugins/home/src/components/SettingsModal.tsx +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright 2021 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import React from 'react'; -import { - Button, - Dialog, - DialogActions, - DialogContent, - DialogTitle, -} from '@material-ui/core'; - -/** @public */ -export const SettingsModal = (props: { - open: boolean; - close: Function; - componentName: string; - children: JSX.Element; -}) => { - const { open, close, componentName, children } = props; - - return ( - close()}> - Settings - {componentName} - {children} - - - - - ); -}; From 8a42303a0e4eea955785a9860bde3f78b4d691bf Mon Sep 17 00:00:00 2001 From: Camila Belo Date: Wed, 17 May 2023 20:36:31 +0200 Subject: [PATCH 114/213] fix(home): remove api report warnings Signed-off-by: Camila Belo --- plugins/home/src/deprecated.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/plugins/home/src/deprecated.ts b/plugins/home/src/deprecated.ts index 119e5ab731..f116d2c9f9 100644 --- a/plugins/home/src/deprecated.ts +++ b/plugins/home/src/deprecated.ts @@ -31,41 +31,49 @@ import { * @deprecated Import from `@backstage/plugin-home-react` instead */ export const createCardExtension = homeReactCreateCardExtension; + /** * @public * @deprecated Import from `@backstage/plugin-home-react` instead */ export type CardExtensionProps = homeReactCardExtensionProps; + /** * @public * @deprecated Import from `@backstage/plugin-home-react` instead */ export type CardLayout = homeReactCardLayout; + /** * @public * @deprecated Import from `@backstage/plugin-home-react` instead */ export type CardSettings = homeReactCardSettings; + /** * @public * @deprecated Import from `@backstage/plugin-home-react` instead */ export type CardConfig = homeReactCardConfig; + /** * @public * @deprecated Import from `@backstage/plugin-home-react` instead */ export type ComponentParts = homeReactComponentParts; + /** * @public * @deprecated Import from `@backstage/plugin-home-react` instead */ export type ComponentRenderer = homeReactComponentRenderer; + /** * @public * @deprecated Import from `@backstage/plugin-home-react` instead */ export type RendererProps = homeReactRendererProps; + /** * @public * @deprecated Import from `@backstage/plugin-home-react` instead From b269da39ac2d02841abcb391d59d2d692cebf87d Mon Sep 17 00:00:00 2001 From: Simone Fumagalli Date: Wed, 17 May 2023 15:27:28 +0200 Subject: [PATCH 115/213] DX: Improved error message for publish:gitlab:merge-request action Signed-off-by: Simone Fumagalli --- .changeset/light-cows-bow.md | 5 +++++ .../actions/builtin/publish/gitlabMergeRequest.ts | 6 ++++-- 2 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 .changeset/light-cows-bow.md diff --git a/.changeset/light-cows-bow.md b/.changeset/light-cows-bow.md new file mode 100644 index 0000000000..231a4245c3 --- /dev/null +++ b/.changeset/light-cows-bow.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend': minor +--- + +Clearer error messages for action publish:gitlab:merge-request diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlabMergeRequest.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlabMergeRequest.ts index 06e056cda3..84a17024d1 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlabMergeRequest.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlabMergeRequest.ts @@ -218,14 +218,16 @@ export const createPublishGitlabMergeRequestAction = (options: { try { await api.Branches.create(repoID, branchName, String(defaultBranch)); } catch (e) { - throw new InputError(`The branch creation failed ${e}`); + throw new InputError( + `The branch creation failed. Please check that your repo does not already contain a branch named '${branchName}'. ${e}`, + ); } try { await api.Commits.create(repoID, branchName, ctx.input.title, actions); } catch (e) { throw new InputError( - `Committing the changes to ${branchName} failed ${e}`, + `Committing the changes to ${branchName} failed. Please check that none of the files created by the template already exists. ${e}`, ); } From 9345eae3add1fe0a1caef60647d9a0c2391648d5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 19 May 2023 17:27:15 +0000 Subject: [PATCH 116/213] fix(deps): update dependency @octokit/auth-app to v4.0.13 Signed-off-by: Renovate Bot --- yarn.lock | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/yarn.lock b/yarn.lock index 2d4a940cea..56914eedff 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13005,20 +13005,19 @@ __metadata: linkType: hard "@octokit/auth-app@npm:^4.0.0": - version: 4.0.9 - resolution: "@octokit/auth-app@npm:4.0.9" + version: 4.0.13 + resolution: "@octokit/auth-app@npm:4.0.13" dependencies: "@octokit/auth-oauth-app": ^5.0.0 "@octokit/auth-oauth-user": ^2.0.0 "@octokit/request": ^6.0.0 "@octokit/request-error": ^3.0.0 "@octokit/types": ^9.0.0 - "@types/lru-cache": ^5.1.0 deprecation: ^2.3.1 - lru-cache: ^6.0.0 + lru-cache: ^9.0.0 universal-github-app-jwt: ^1.1.1 universal-user-agent: ^6.0.0 - checksum: 3846ebeda40bf88684fa310741ec4b5838d57e18ba5c38986e422161e1ce95c750053fbb2aa18bdce120d6eb857d16bb8e9988597c3dfda40fec985dbdda1b2a + checksum: 809004bc3e985fd4911cc42060fecd7b88e609e1334b90c4f79711aa27cade03fa1d930945ea8f7339ddd8d4514dd220a6ae8489faefa9e0ce6881519a02fc37 languageName: node linkType: hard @@ -16104,13 +16103,6 @@ __metadata: languageName: node linkType: hard -"@types/lru-cache@npm:^5.1.0": - version: 5.1.1 - resolution: "@types/lru-cache@npm:5.1.1" - checksum: e1d6c0085f61b16ec5b3073ec76ad1be4844ea036561c3f145fc19f71f084b58a6eb600b14128aa95809d057d28f1d147c910186ae51219f58366ffd2ff2e118 - languageName: node - linkType: hard - "@types/lunr@npm:^2.3.3": version: 2.3.4 resolution: "@types/lunr@npm:2.3.4" @@ -29873,6 +29865,13 @@ __metadata: languageName: node linkType: hard +"lru-cache@npm:^9.0.0": + version: 9.1.1 + resolution: "lru-cache@npm:9.1.1" + checksum: 4d703bb9b66216bbee55ead82a9682820a2b6acbdfca491b235390b1ef1056000a032d56dfb373fdf9ad4492f1fa9d04cc9a05a77f25bd7ce6901d21ad9b68b7 + languageName: node + linkType: hard + "lunr@npm:^2.3.9": version: 2.3.9 resolution: "lunr@npm:2.3.9" From 9c6bd22433991d30d7a1688872def15686bb2c06 Mon Sep 17 00:00:00 2001 From: Camila Belo Date: Fri, 19 May 2023 22:32:09 +0200 Subject: [PATCH 117/213] Fix changeset format Signed-off-by: Camila Belo --- .changeset/lovely-impalas-sell.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/lovely-impalas-sell.md b/.changeset/lovely-impalas-sell.md index 8980c986ae..80447c066f 100644 --- a/.changeset/lovely-impalas-sell.md +++ b/.changeset/lovely-impalas-sell.md @@ -13,4 +13,4 @@ Allows for an optional `tokenManager` to authenticate requests from the collator + tokenManager: env.tokenManager, }), }); -``` \ No newline at end of file +``` From 963880b7846099efd927715670b42850f3369c0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Munhoz?= <44208316+joaovitormunhoz@users.noreply.github.com> Date: Fri, 19 May 2023 17:51:55 -0300 Subject: [PATCH 118/213] Adding Inventa as one of Backstage adoopters MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adding Inventa as one of Backstage adoopters Signed-off-by: João Munhoz <44208316+joaovitormunhoz@users.noreply.github.com> --- ADOPTERS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/ADOPTERS.md b/ADOPTERS.md index d3fc55966f..b0b7d06f07 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -247,3 +247,4 @@ _You can do this by using the [Adopter form](https://info.backstage.spotify.com/ | [Mercantil Andina](https://www.mercantilandina.com.ar/) | [Sebastian Paredero](https://www.linkedin.com/in/sebastian-paredero/), [Matias Javier Gomez](https://www.linkedin.com/in/matias-javier-gomez-140540a3/), [Gustavo Wilgenhoff](https://github.com/wilgustavo) | Developer portal: documentation, service templates, org structure, service catalog, plugins for integration with internal systems. | | [Livelo](https://www.livelo.com.br) | [Felipe Nardon](https://www.linkedin.com/in/felipe-nardon-dos-santos/), [Yves Galvão](https://www.linkedin.com/in/yvesgalvao/), [Isaque Rocha](https://www.linkedin.com/in/isaque-rocha/) | Internal platform that aims to reduce the teams' cognitive load through self-service, abstracting processes that are now part of the teams' daily lives, enabling a centralized management of documentation, catalog, metrics and knowledge. | | [Worten](https://www.worten.pt) | [@elisiariocouto](https://github.com/elisiariocouto) | We are proud to be an adopter of Backstage. Our goal is to make our Backstage installation the go-to location for every developer. To achieve this, we developed a custom plugin to populate Backstage's catalog with information from our internal deployment tool. As a result, we now have full visibility of all Worten systems, components, APIs, messaging topics, and documentation. We also migrated the internal deployment tool's Web UI to Backstage. Currently, we are working on Backstage's Software Templates feature. | +| [Inventa](https://www.inventa.shop) | [João Munhoz](https://github.com/joaovitormunhoz), [Lucca Fonte](https://github.com/luccafonte) | We use Backstage at Inventa to share knowledge between squads, in the form of technical documentation, API contracts, and service status/ownership info, fomenting a self-service and scalable engineering culture. We also developed a plugin that allows us to have a centralized view of all the engineering tools we have for each environment, making it easy to access each one of our tools and increasing productivity. | From 47479cd2ba377fdb6c2da581ea443dfa95026dce Mon Sep 17 00:00:00 2001 From: Amaury Date: Sun, 21 May 2023 19:44:20 +0100 Subject: [PATCH 119/213] Added alphabetical sorting to plugin categories. Signed-off-by: Amaury --- microsite/src/components/pluginsFilter/pluginsFilter.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/microsite/src/components/pluginsFilter/pluginsFilter.tsx b/microsite/src/components/pluginsFilter/pluginsFilter.tsx index 25c8a5ff52..5635fb5a29 100644 --- a/microsite/src/components/pluginsFilter/pluginsFilter.tsx +++ b/microsite/src/components/pluginsFilter/pluginsFilter.tsx @@ -7,13 +7,15 @@ type Props = { }; const PluginsFilter = ({ categories, handleChipClick }: Props) => { + const alphaCategories = categories.sort((a,b) => a.name.localeCompare(b.name)) + return (
    - {categories.map(chip => { + {alphaCategories.map(chip => { return (
  • handleChipClick(chip.name)}>
    From 330516ce007e9ff24131272abd8703e7697b7c7b Mon Sep 17 00:00:00 2001 From: Amaury Date: Sun, 21 May 2023 20:05:29 +0100 Subject: [PATCH 120/213] Addressed prettier issue. Signed-off-by: Amaury --- microsite/src/components/pluginsFilter/pluginsFilter.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/microsite/src/components/pluginsFilter/pluginsFilter.tsx b/microsite/src/components/pluginsFilter/pluginsFilter.tsx index 5635fb5a29..4023415fa6 100644 --- a/microsite/src/components/pluginsFilter/pluginsFilter.tsx +++ b/microsite/src/components/pluginsFilter/pluginsFilter.tsx @@ -7,8 +7,9 @@ type Props = { }; const PluginsFilter = ({ categories, handleChipClick }: Props) => { - const alphaCategories = categories.sort((a,b) => a.name.localeCompare(b.name)) - + const alphaCategories = categories.sort((a, b) => + a.name.localeCompare(b.name), + ); return (
    diff --git a/plugins/kubernetes/src/components/Pods/PodsTable.tsx b/plugins/kubernetes/src/components/Pods/PodsTable.tsx index 4b7b4b93ed..620e91ce72 100644 --- a/plugins/kubernetes/src/components/Pods/PodsTable.tsx +++ b/plugins/kubernetes/src/components/Pods/PodsTable.tsx @@ -15,7 +15,6 @@ */ import React, { useContext } from 'react'; -import { V1Pod } from '@kubernetes/client-node'; import { PodDrawer } from './PodDrawer'; import { containersReady, @@ -27,18 +26,21 @@ import { import { Table, TableColumn } from '@backstage/core-components'; import { PodNamesWithMetricsContext } from '../../hooks/PodNamesWithMetrics'; import { ClusterContext } from '../../hooks/Cluster'; +import { useMatchingErrors } from '../../hooks/useMatchingErrors'; +import { Pod } from 'kubernetes-models/v1/Pod'; +import { V1Pod } from '@kubernetes/client-node'; export const READY_COLUMNS: PodColumns = 'READY'; export const RESOURCE_COLUMNS: PodColumns = 'RESOURCE'; export type PodColumns = 'READY' | 'RESOURCE'; type PodsTablesProps = { - pods: V1Pod[]; + pods: Pod | V1Pod[]; extraColumns?: PodColumns[]; children?: React.ReactNode; }; -const READY: TableColumn[] = [ +const READY: TableColumn[] = [ { title: 'containers ready', align: 'center', @@ -54,26 +56,37 @@ const READY: TableColumn[] = [ }, ]; +const PodDrawerTrigger = ({ pod }: { pod: Pod }) => { + const cluster = useContext(ClusterContext); + const errors = useMatchingErrors({ + kind: 'Pod', + apiVersion: 'v1', + metadata: pod.metadata, + }); + return ( + + ); +}; + export const PodsTable = ({ pods, extraColumns = [] }: PodsTablesProps) => { const podNamesWithMetrics = useContext(PodNamesWithMetricsContext); - const cluster = useContext(ClusterContext); - const defaultColumns: TableColumn[] = [ + const defaultColumns: TableColumn[] = [ { title: 'name', highlight: true, - render: (pod: V1Pod) => ( - - ), + render: (pod: Pod) => { + return ; + }, }, { title: 'phase', - render: (pod: V1Pod) => pod.status?.phase ?? 'unknown', + render: (pod: Pod) => pod.status?.phase ?? 'unknown', width: 'auto', }, { @@ -81,16 +94,16 @@ export const PodsTable = ({ pods, extraColumns = [] }: PodsTablesProps) => { render: containerStatuses, }, ]; - const columns: TableColumn[] = [...defaultColumns]; + const columns: TableColumn[] = [...defaultColumns]; if (extraColumns.includes(READY_COLUMNS)) { columns.push(...READY); } if (extraColumns.includes(RESOURCE_COLUMNS)) { - const resourceColumns: TableColumn[] = [ + const resourceColumns: TableColumn[] = [ { title: 'CPU usage %', - render: (pod: V1Pod) => { + render: (pod: Pod) => { const metrics = podNamesWithMetrics.get(pod.metadata?.name ?? ''); if (!metrics) { @@ -103,7 +116,7 @@ export const PodsTable = ({ pods, extraColumns = [] }: PodsTablesProps) => { }, { title: 'Memory usage %', - render: (pod: V1Pod) => { + render: (pod: Pod) => { const metrics = podNamesWithMetrics.get(pod.metadata?.name ?? ''); if (!metrics) { @@ -123,13 +136,11 @@ export const PodsTable = ({ pods, extraColumns = [] }: PodsTablesProps) => { width: '100%', }; - const usePods = pods.map(p => ({ ...p, id: p.metadata?.uid })); - return (
    diff --git a/plugins/kubernetes/src/components/Pods/types.ts b/plugins/kubernetes/src/components/Pods/types.ts index 195f0b9135..ac707c2a57 100644 --- a/plugins/kubernetes/src/components/Pods/types.ts +++ b/plugins/kubernetes/src/components/Pods/types.ts @@ -14,9 +14,10 @@ * limitations under the License. */ import { Pod } from 'kubernetes-models/v1'; +import { DetectedError } from '../../error-detection'; export interface PodAndErrors { clusterName: string; pod: Pod; - errors: any[]; + errors: DetectedError[]; } diff --git a/plugins/kubernetes/src/hooks/useMatchingErrors.test.tsx b/plugins/kubernetes/src/hooks/useMatchingErrors.test.tsx new file mode 100644 index 0000000000..b5fe588e86 --- /dev/null +++ b/plugins/kubernetes/src/hooks/useMatchingErrors.test.tsx @@ -0,0 +1,85 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import React from 'react'; +import { renderHook } from '@testing-library/react-hooks'; +import { DetectedErrorsContext, useMatchingErrors } from './useMatchingErrors'; +import { DetectedError } from '../error-detection'; +import { ResourceRef } from '../error-detection/types'; + +const genericErrorWithRef = (resourceRef: ResourceRef): DetectedError => { + return { + type: 'some-error', + severity: 10, + message: 'some error message', + occuranceCount: 1, + sourceRef: resourceRef, + proposedFix: [ + { + type: 'logs', + container: 'some-container', + errorType: 'some error type', + rootCauseExplanation: 'some root cause', + possibleFixes: ['fix1', 'fix2'], + }, + ], + }; +}; + +describe('useMatchingErrors', () => { + it('should filter non-matching resources', () => { + const wrapper = ({ children }: { children: React.ReactNode }) => ( + + {children} + + ); + + const { result } = renderHook( + () => + useMatchingErrors({ + metadata: { + name: 'some-name', + namespace: 'some-namespace', + }, + kind: 'some-kind', + apiVersion: 'some-apiGroup', + }), + { wrapper }, + ); + expect(result.current).toStrictEqual([ + genericErrorWithRef({ + name: 'some-name', + namespace: 'some-namespace', + kind: 'some-kind', + apiGroup: 'some-apiGroup', + }), + ]); + }); +}); diff --git a/plugins/kubernetes/src/hooks/useMatchingErrors.ts b/plugins/kubernetes/src/hooks/useMatchingErrors.ts new file mode 100644 index 0000000000..623a32bdf8 --- /dev/null +++ b/plugins/kubernetes/src/hooks/useMatchingErrors.ts @@ -0,0 +1,46 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import React, { useContext } from 'react'; +import { DetectedError, ResourceRef } from '../error-detection/types'; +import { TypeMeta } from '@kubernetes-models/base'; +import { IIoK8sApimachineryPkgApisMetaV1ObjectMeta as V1ObjectMeta } from '@kubernetes-models/apimachinery/apis/meta/v1/ObjectMeta'; + +export const DetectedErrorsContext = React.createContext([]); + +type Matcher = { + metadata?: V1ObjectMeta; +} & TypeMeta; + +export const useMatchingErrors = (matcher: Matcher): DetectedError[] => { + const targetRef: ResourceRef = { + name: matcher.metadata?.name ?? '', + namespace: matcher.metadata?.namespace ?? '', + kind: matcher.kind, + apiGroup: matcher.apiVersion, + }; + + const errors = useContext(DetectedErrorsContext); + + return errors.filter(e => { + const r = e.sourceRef; + return ( + targetRef.apiGroup === r.apiGroup && + targetRef.kind === r.kind && + targetRef.name === r.name && + targetRef.namespace === r.namespace + ); + }); +}; diff --git a/plugins/kubernetes/src/utils/pod.tsx b/plugins/kubernetes/src/utils/pod.tsx index 2f657e7658..ce556fbc8d 100644 --- a/plugins/kubernetes/src/utils/pod.tsx +++ b/plugins/kubernetes/src/utils/pod.tsx @@ -28,6 +28,7 @@ import { SubvalueCell, } from '@backstage/core-components'; import { ClientPodStatus } from '@backstage/plugin-kubernetes-common'; +import { Pod } from 'kubernetes-models/v1/Pod'; export const imageChips = (pod: V1Pod): ReactNode => { const containerStatuses = pod.status?.containerStatuses ?? []; @@ -38,19 +39,19 @@ export const imageChips = (pod: V1Pod): ReactNode => { return
    {images}
    ; }; -export const containersReady = (pod: V1Pod): string => { +export const containersReady = (pod: Pod): string => { const containerStatuses = pod.status?.containerStatuses ?? []; const containersReadyItem = containerStatuses.filter(cs => cs.ready).length; return `${containersReadyItem}/${containerStatuses.length}`; }; -export const totalRestarts = (pod: V1Pod): number => { +export const totalRestarts = (pod: Pod): number => { const containerStatuses = pod.status?.containerStatuses ?? []; return containerStatuses?.reduce((a, b) => a + b.restartCount, 0); }; -export const containerStatuses = (pod: V1Pod): ReactNode => { +export const containerStatuses = (pod: Pod): ReactNode => { const containerStatusesItem = pod.status?.containerStatuses ?? []; const errors = containerStatusesItem.reduce((accum, next) => { if (next.state === undefined) { diff --git a/yarn.lock b/yarn.lock index 632d538a16..66b27be455 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7357,6 +7357,7 @@ __metadata: "@backstage/test-utils": "workspace:^" "@backstage/theme": "workspace:^" "@kubernetes-models/apimachinery": ^1.1.0 + "@kubernetes-models/base": ^4.0.1 "@kubernetes/client-node": 0.18.1 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 From 17d55744fe2467f2932b6037c9223605b45d37ab Mon Sep 17 00:00:00 2001 From: Johan Haals Date: Tue, 23 May 2023 10:34:17 +0200 Subject: [PATCH 155/213] chore: Align msw version Signed-off-by: Johan Haals --- .../package.json | 2 +- plugins/devtools-backend/package.json | 2 +- plugins/devtools/package.json | 2 +- yarn.lock | 79 ++----------------- 4 files changed, 8 insertions(+), 77 deletions(-) diff --git a/plugins/catalog-backend-module-puppetdb/package.json b/plugins/catalog-backend-module-puppetdb/package.json index 7286f66095..e703c81beb 100644 --- a/plugins/catalog-backend-module-puppetdb/package.json +++ b/plugins/catalog-backend-module-puppetdb/package.json @@ -65,7 +65,7 @@ "@backstage/backend-test-utils": "workspace:^", "@backstage/cli": "workspace:^", "@types/lodash": "^4.14.151", - "msw": "^0.49.0" + "msw": "^1.0.0" }, "files": [ "dist", diff --git a/plugins/devtools-backend/package.json b/plugins/devtools-backend/package.json index 77eaf43901..286e45d9ee 100644 --- a/plugins/devtools-backend/package.json +++ b/plugins/devtools-backend/package.json @@ -52,7 +52,7 @@ "@types/ping": "^0.4.1", "@types/supertest": "^2.0.8", "@types/yarnpkg__lockfile": "^1.1.4", - "msw": "^0.47.0", + "msw": "^1.0.0", "supertest": "^6.2.4" }, "files": [ diff --git a/plugins/devtools/package.json b/plugins/devtools/package.json index d5bd0c567a..a06bf780f9 100644 --- a/plugins/devtools/package.json +++ b/plugins/devtools/package.json @@ -56,7 +56,7 @@ "@testing-library/user-event": "^14.0.0", "@types/node": "*", "cross-fetch": "^3.1.5", - "msw": "^0.47.0" + "msw": "^1.0.0" }, "files": [ "dist" diff --git a/yarn.lock b/yarn.lock index 66b27be455..2b2ee1e9f4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5471,7 +5471,7 @@ __metadata: "@types/lodash": ^4.14.151 lodash: ^4.17.21 luxon: ^3.0.0 - msw: ^0.49.0 + msw: ^1.0.0 node-fetch: ^2.6.7 uuid: ^8.0.0 winston: ^3.2.1 @@ -6139,7 +6139,7 @@ __metadata: express-promise-router: ^4.1.0 fs-extra: ^10.0.0 lodash: ^4.17.21 - msw: ^0.47.0 + msw: ^1.0.0 node-fetch: ^2.6.7 ping: ^0.4.1 semver: ^7.3.2 @@ -6182,7 +6182,7 @@ __metadata: "@testing-library/user-event": ^14.0.0 "@types/node": "*" cross-fetch: ^3.1.5 - msw: ^0.47.0 + msw: ^1.0.0 react-json-view: ^1.21.3 react-use: ^17.2.4 peerDependencies: @@ -31245,75 +31245,6 @@ __metadata: languageName: node linkType: hard -"msw@npm:^0.47.0": - version: 0.47.4 - resolution: "msw@npm:0.47.4" - dependencies: - "@mswjs/cookies": ^0.2.2 - "@mswjs/interceptors": ^0.17.5 - "@open-draft/until": ^1.0.3 - "@types/cookie": ^0.4.1 - "@types/js-levenshtein": ^1.1.1 - chalk: 4.1.1 - chokidar: ^3.4.2 - cookie: ^0.4.2 - graphql: ^15.0.0 || ^16.0.0 - headers-polyfill: ^3.1.0 - inquirer: ^8.2.0 - is-node-process: ^1.0.1 - js-levenshtein: ^1.1.6 - node-fetch: ^2.6.7 - outvariant: ^1.3.0 - path-to-regexp: ^6.2.0 - statuses: ^2.0.0 - strict-event-emitter: ^0.2.6 - type-fest: ^2.19.0 - yargs: ^17.3.1 - peerDependencies: - typescript: ">= 4.2.x <= 4.8.x" - peerDependenciesMeta: - typescript: - optional: true - bin: - msw: cli/index.js - checksum: 10ff632641d40384d6622abf4df6399e4ae649db0f676b5d1ee2d0a515ec96f33abe9d4fecba08cdba4b2e43255af419da9eefc020d40a7e10669d0906457197 - languageName: node - linkType: hard - -"msw@npm:^0.49.0": - version: 0.49.3 - resolution: "msw@npm:0.49.3" - dependencies: - "@mswjs/cookies": ^0.2.2 - "@mswjs/interceptors": ^0.17.5 - "@open-draft/until": ^1.0.3 - "@types/cookie": ^0.4.1 - "@types/js-levenshtein": ^1.1.1 - chalk: 4.1.1 - chokidar: ^3.4.2 - cookie: ^0.4.2 - graphql: ^15.0.0 || ^16.0.0 - headers-polyfill: ^3.1.0 - inquirer: ^8.2.0 - is-node-process: ^1.0.1 - js-levenshtein: ^1.1.6 - node-fetch: ^2.6.7 - outvariant: ^1.3.0 - path-to-regexp: ^6.2.0 - strict-event-emitter: ^0.4.3 - type-fest: ^2.19.0 - yargs: ^17.3.1 - peerDependencies: - typescript: ">= 4.4.x <= 4.9.x" - peerDependenciesMeta: - typescript: - optional: true - bin: - msw: cli/index.js - checksum: 8322cd42cd69f289c05517d02bde22fc2f10e86fc2d0d209d9df54bd03d10b8123723c5587a2654dcd2cd0f314a016f9eccac88cffa30fafd1f9fead16db639e - languageName: node - linkType: hard - "msw@npm:^1.0.0, msw@npm:^1.0.1": version: 1.2.0 resolution: "msw@npm:1.2.0" @@ -37641,7 +37572,7 @@ __metadata: languageName: node linkType: hard -"statuses@npm:2.0.1, statuses@npm:^2.0.0": +"statuses@npm:2.0.1": version: 2.0.1 resolution: "statuses@npm:2.0.1" checksum: 18c7623fdb8f646fb213ca4051be4df7efb3484d4ab662937ca6fbef7ced9b9e12842709872eb3020cc3504b93bde88935c9f6417489627a7786f24f8031cbcb @@ -37743,7 +37674,7 @@ __metadata: languageName: node linkType: hard -"strict-event-emitter@npm:^0.2.4, strict-event-emitter@npm:^0.2.6": +"strict-event-emitter@npm:^0.2.4": version: 0.2.8 resolution: "strict-event-emitter@npm:0.2.8" dependencies: From 433f60a06013e66a3146160786814bfdc7198efe Mon Sep 17 00:00:00 2001 From: blam Date: Tue, 23 May 2023 15:29:49 +0200 Subject: [PATCH 156/213] chore: enter pre Signed-off-by: blam --- .changeset/pre.json | 230 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 230 insertions(+) create mode 100644 .changeset/pre.json diff --git a/.changeset/pre.json b/.changeset/pre.json new file mode 100644 index 0000000000..2856f9e0af --- /dev/null +++ b/.changeset/pre.json @@ -0,0 +1,230 @@ +{ + "mode": "pre", + "tag": "next", + "initialVersions": { + "example-app": "0.2.83", + "@backstage/app-defaults": "1.3.1", + "example-backend": "0.2.83", + "@backstage/backend-app-api": "0.4.3", + "@backstage/backend-common": "0.18.5", + "@backstage/backend-defaults": "0.1.10", + "@backstage/backend-dev-utils": "0.1.1", + "example-backend-next": "0.0.11", + "@backstage/backend-openapi-utils": "0.0.2", + "@backstage/backend-plugin-api": "0.5.2", + "@backstage/backend-tasks": "0.5.2", + "@backstage/backend-test-utils": "0.1.37", + "@backstage/catalog-client": "1.4.1", + "@backstage/catalog-model": "1.3.0", + "@backstage/cli": "0.22.7", + "@backstage/cli-common": "0.1.12", + "@backstage/cli-node": "0.1.0", + "@backstage/codemods": "0.1.44", + "@backstage/config": "1.0.7", + "@backstage/config-loader": "1.3.0", + "@backstage/core-app-api": "1.8.0", + "@backstage/core-components": "0.13.1", + "@backstage/core-plugin-api": "1.5.1", + "@backstage/create-app": "0.5.1", + "@backstage/dev-utils": "1.0.15", + "e2e-test": "0.2.3", + "@backstage/errors": "1.1.5", + "@backstage/eslint-plugin": "0.1.3", + "@backstage/integration": "1.4.5", + "@backstage/integration-aws-node": "0.1.3", + "@backstage/integration-react": "1.1.13", + "@backstage/release-manifests": "0.0.9", + "@backstage/repo-tools": "0.3.0", + "@techdocs/cli": "1.4.2", + "techdocs-cli-embedded-app": "0.2.82", + "@backstage/test-utils": "1.3.1", + "@backstage/theme": "0.3.0", + "@backstage/types": "1.0.2", + "@backstage/version-bridge": "1.0.4", + "@backstage/plugin-adr": "0.6.0", + "@backstage/plugin-adr-backend": "0.3.3", + "@backstage/plugin-adr-common": "0.2.9", + "@backstage/plugin-airbrake": "0.3.18", + "@backstage/plugin-airbrake-backend": "0.2.18", + "@backstage/plugin-allure": "0.1.34", + "@backstage/plugin-analytics-module-ga": "0.1.29", + "@backstage/plugin-analytics-module-ga4": "0.1.0", + "@backstage/plugin-apache-airflow": "0.2.11", + "@backstage/plugin-api-docs": "0.9.3", + "@backstage/plugin-api-docs-module-protoc-gen-doc": "0.1.2", + "@backstage/plugin-apollo-explorer": "0.1.11", + "@backstage/plugin-app-backend": "0.3.45", + "@backstage/plugin-auth-backend": "0.18.3", + "@backstage/plugin-auth-node": "0.2.14", + "@backstage/plugin-azure-devops": "0.3.0", + "@backstage/plugin-azure-devops-backend": "0.3.24", + "@backstage/plugin-azure-devops-common": "0.3.0", + "@backstage/plugin-azure-sites": "0.1.7", + "@backstage/plugin-azure-sites-backend": "0.1.7", + "@backstage/plugin-azure-sites-common": "0.1.0", + "@backstage/plugin-badges": "0.2.42", + "@backstage/plugin-badges-backend": "0.2.0", + "@backstage/plugin-bazaar": "0.2.8", + "@backstage/plugin-bazaar-backend": "0.2.8", + "@backstage/plugin-bitbucket-cloud-common": "0.2.6", + "@backstage/plugin-bitrise": "0.1.45", + "@backstage/plugin-catalog": "1.11.0", + "@backstage/plugin-catalog-backend": "1.9.1", + "@backstage/plugin-catalog-backend-module-aws": "0.2.0", + "@backstage/plugin-catalog-backend-module-azure": "0.1.16", + "@backstage/plugin-catalog-backend-module-bitbucket": "0.2.12", + "@backstage/plugin-catalog-backend-module-bitbucket-cloud": "0.1.12", + "@backstage/plugin-catalog-backend-module-bitbucket-server": "0.1.10", + "@backstage/plugin-catalog-backend-module-gerrit": "0.1.13", + "@backstage/plugin-catalog-backend-module-github": "0.3.0", + "@backstage/plugin-catalog-backend-module-gitlab": "0.2.1", + "@backstage/plugin-catalog-backend-module-incremental-ingestion": "0.3.2", + "@backstage/plugin-catalog-backend-module-ldap": "0.5.12", + "@backstage/plugin-catalog-backend-module-msgraph": "0.5.4", + "@backstage/plugin-catalog-backend-module-openapi": "0.1.11", + "@backstage/plugin-catalog-backend-module-puppetdb": "0.1.2", + "@backstage/plugin-catalog-common": "1.0.13", + "@internal/plugin-catalog-customized": "0.0.10", + "@backstage/plugin-catalog-graph": "0.2.30", + "@backstage/plugin-catalog-graphql": "0.3.20", + "@backstage/plugin-catalog-import": "0.9.8", + "@backstage/plugin-catalog-node": "1.3.6", + "@backstage/plugin-catalog-react": "1.6.0", + "@backstage/plugin-cicd-statistics": "0.1.20", + "@backstage/plugin-cicd-statistics-module-gitlab": "0.1.14", + "@backstage/plugin-circleci": "0.3.18", + "@backstage/plugin-cloudbuild": "0.3.18", + "@backstage/plugin-code-climate": "0.1.18", + "@backstage/plugin-code-coverage": "0.2.11", + "@backstage/plugin-code-coverage-backend": "0.2.11", + "@backstage/plugin-codescene": "0.1.13", + "@backstage/plugin-config-schema": "0.1.41", + "@backstage/plugin-cost-insights": "0.12.7", + "@backstage/plugin-cost-insights-common": "0.1.1", + "@backstage/plugin-devtools": "0.1.0", + "@backstage/plugin-devtools-backend": "0.1.0", + "@backstage/plugin-devtools-common": "0.1.0", + "@backstage/plugin-dynatrace": "5.0.0", + "@backstage/plugin-entity-feedback": "0.2.1", + "@backstage/plugin-entity-feedback-backend": "0.1.3", + "@backstage/plugin-entity-feedback-common": "0.1.1", + "@backstage/plugin-entity-validation": "0.1.3", + "@backstage/plugin-events-backend": "0.2.6", + "@backstage/plugin-events-backend-module-aws-sqs": "0.2.0", + "@backstage/plugin-events-backend-module-azure": "0.1.7", + "@backstage/plugin-events-backend-module-bitbucket-cloud": "0.1.7", + "@backstage/plugin-events-backend-module-gerrit": "0.1.7", + "@backstage/plugin-events-backend-module-github": "0.1.7", + "@backstage/plugin-events-backend-module-gitlab": "0.1.7", + "@backstage/plugin-events-backend-test-utils": "0.1.7", + "@backstage/plugin-events-node": "0.2.6", + "@internal/plugin-todo-list": "1.0.13", + "@internal/plugin-todo-list-backend": "1.0.13", + "@internal/plugin-todo-list-common": "1.0.10", + "@backstage/plugin-explore": "0.4.3", + "@backstage/plugin-explore-backend": "0.0.7", + "@backstage/plugin-explore-common": "0.0.1", + "@backstage/plugin-explore-react": "0.0.28", + "@backstage/plugin-firehydrant": "0.2.2", + "@backstage/plugin-fossa": "0.2.50", + "@backstage/plugin-gcalendar": "0.3.14", + "@backstage/plugin-gcp-projects": "0.3.37", + "@backstage/plugin-git-release-manager": "0.3.31", + "@backstage/plugin-github-actions": "0.5.18", + "@backstage/plugin-github-deployments": "0.1.49", + "@backstage/plugin-github-issues": "0.2.7", + "@backstage/plugin-github-pull-requests-board": "0.1.12", + "@backstage/plugin-gitops-profiles": "0.3.36", + "@backstage/plugin-gocd": "0.1.24", + "@backstage/plugin-graphiql": "0.2.50", + "@backstage/plugin-graphql-backend": "0.1.35", + "@backstage/plugin-graphql-voyager": "0.1.3", + "@backstage/plugin-home": "0.5.2", + "@backstage/plugin-home-react": "0.0.0", + "@backstage/plugin-ilert": "0.2.7", + "@backstage/plugin-jenkins": "0.8.0", + "@backstage/plugin-jenkins-backend": "0.2.0", + "@backstage/plugin-jenkins-common": "0.1.15", + "@backstage/plugin-kafka": "0.3.18", + "@backstage/plugin-kafka-backend": "0.2.38", + "@backstage/plugin-kubernetes": "0.9.0", + "@backstage/plugin-kubernetes-backend": "0.11.0", + "@backstage/plugin-kubernetes-common": "0.6.3", + "@backstage/plugin-lighthouse": "0.4.3", + "@backstage/plugin-lighthouse-backend": "0.2.1", + "@backstage/plugin-lighthouse-common": "0.1.1", + "@backstage/plugin-linguist": "0.1.3", + "@backstage/plugin-linguist-backend": "0.2.2", + "@backstage/plugin-linguist-common": "0.1.0", + "@backstage/plugin-microsoft-calendar": "0.1.3", + "@backstage/plugin-newrelic": "0.3.36", + "@backstage/plugin-newrelic-dashboard": "0.2.11", + "@backstage/plugin-octopus-deploy": "0.2.0", + "@backstage/plugin-org": "0.6.8", + "@backstage/plugin-org-react": "0.1.7", + "@backstage/plugin-pagerduty": "0.5.11", + "@backstage/plugin-periskop": "0.1.16", + "@backstage/plugin-periskop-backend": "0.1.16", + "@backstage/plugin-permission-backend": "0.5.20", + "@backstage/plugin-permission-common": "0.7.5", + "@backstage/plugin-permission-node": "0.7.8", + "@backstage/plugin-permission-react": "0.4.12", + "@backstage/plugin-playlist": "0.1.9", + "@backstage/plugin-playlist-backend": "0.3.1", + "@backstage/plugin-playlist-common": "0.1.6", + "@backstage/plugin-proxy-backend": "0.2.39", + "@backstage/plugin-puppetdb": "0.1.1", + "@backstage/plugin-rollbar": "0.4.18", + "@backstage/plugin-rollbar-backend": "0.1.42", + "@backstage/plugin-scaffolder": "1.13.1", + "@backstage/plugin-scaffolder-backend": "1.14.0", + "@backstage/plugin-scaffolder-backend-module-confluence-to-markdown": "0.1.2", + "@backstage/plugin-scaffolder-backend-module-cookiecutter": "0.2.21", + "@backstage/plugin-scaffolder-backend-module-gitlab": "0.2.0", + "@backstage/plugin-scaffolder-backend-module-rails": "0.4.14", + "@backstage/plugin-scaffolder-backend-module-sentry": "0.1.5", + "@backstage/plugin-scaffolder-backend-module-yeoman": "0.2.18", + "@backstage/plugin-scaffolder-common": "1.3.0", + "@backstage/plugin-scaffolder-node": "0.1.3", + "@backstage/plugin-scaffolder-react": "1.4.0", + "@backstage/plugin-search": "1.3.0", + "@backstage/plugin-search-backend": "1.3.1", + "@backstage/plugin-search-backend-module-catalog": "0.1.1", + "@backstage/plugin-search-backend-module-elasticsearch": "1.3.0", + "@backstage/plugin-search-backend-module-explore": "0.1.1", + "@backstage/plugin-search-backend-module-pg": "0.5.6", + "@backstage/plugin-search-backend-module-techdocs": "0.1.1", + "@backstage/plugin-search-backend-node": "1.2.1", + "@backstage/plugin-search-common": "1.2.3", + "@backstage/plugin-search-react": "1.6.0", + "@backstage/plugin-sentry": "0.5.3", + "@backstage/plugin-shortcuts": "0.3.10", + "@backstage/plugin-sonarqube": "0.6.7", + "@backstage/plugin-sonarqube-backend": "0.1.10", + "@backstage/plugin-sonarqube-react": "0.1.5", + "@backstage/plugin-splunk-on-call": "0.4.7", + "@backstage/plugin-stack-overflow": "0.1.15", + "@backstage/plugin-stack-overflow-backend": "0.2.1", + "@backstage/plugin-stackstorm": "0.1.2", + "@backstage/plugin-tech-insights": "0.3.10", + "@backstage/plugin-tech-insights-backend": "0.5.11", + "@backstage/plugin-tech-insights-backend-module-jsonfc": "0.1.29", + "@backstage/plugin-tech-insights-common": "0.2.10", + "@backstage/plugin-tech-insights-node": "0.4.3", + "@backstage/plugin-tech-radar": "0.6.4", + "@backstage/plugin-techdocs": "1.6.2", + "@backstage/plugin-techdocs-addons-test-utils": "1.0.13", + "@backstage/plugin-techdocs-backend": "1.6.2", + "@backstage/plugin-techdocs-module-addons-contrib": "1.0.13", + "@backstage/plugin-techdocs-node": "1.7.1", + "@backstage/plugin-techdocs-react": "1.1.6", + "@backstage/plugin-todo": "0.2.20", + "@backstage/plugin-todo-backend": "0.1.42", + "@backstage/plugin-user-settings": "0.7.3", + "@backstage/plugin-user-settings-backend": "0.1.9", + "@backstage/plugin-vault": "0.1.12", + "@backstage/plugin-vault-backend": "0.3.1", + "@backstage/plugin-xcmetrics": "0.2.38" + }, + "changesets": [] +} From b1e4a70b32e8ca1aa66c1720b2ee8bf7c6d8ae19 Mon Sep 17 00:00:00 2001 From: blam Date: Tue, 23 May 2023 16:00:37 +0200 Subject: [PATCH 157/213] fix: bug with cyclical dependencies in the built output Signed-off-by: blam --- plugins/kubernetes/src/components/Pods/PodLogs/usePodLogs.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/kubernetes/src/components/Pods/PodLogs/usePodLogs.ts b/plugins/kubernetes/src/components/Pods/PodLogs/usePodLogs.ts index 9f3af5cb3b..446969f509 100644 --- a/plugins/kubernetes/src/components/Pods/PodLogs/usePodLogs.ts +++ b/plugins/kubernetes/src/components/Pods/PodLogs/usePodLogs.ts @@ -13,11 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { kubernetesProxyApiRef } from '@backstage/plugin-kubernetes'; import useAsync from 'react-use/lib/useAsync'; import { ContainerScope } from './types'; import { useApi } from '@backstage/core-plugin-api'; +import { kubernetesProxyApiRef } from '../../../api'; interface PodLogsOptions { podScope: ContainerScope; From dc3cddf51ab58840938916ec4d6756d7fc623936 Mon Sep 17 00:00:00 2001 From: blam Date: Tue, 23 May 2023 16:01:28 +0200 Subject: [PATCH 158/213] chore: changeset Signed-off-by: blam --- .changeset/beige-kangaroos-suffer.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/beige-kangaroos-suffer.md diff --git a/.changeset/beige-kangaroos-suffer.md b/.changeset/beige-kangaroos-suffer.md new file mode 100644 index 0000000000..249fb5a4b6 --- /dev/null +++ b/.changeset/beige-kangaroos-suffer.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-kubernetes': patch +--- + +Fix cyclical dependency in built output From c48ff747950e650aec9bfdfe78ff9ee21c38fdaf Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 30 Dec 2022 14:47:36 +0100 Subject: [PATCH 159/213] theme: namespace MUI v4 methods and types Signed-off-by: Patrik Oldsberg --- packages/theme/api-report.md | 40 ++++++--- packages/theme/src/index.ts | 40 +++++++-- packages/theme/src/types.ts | 65 +------------- packages/theme/src/{ => v4}/baseTheme.ts | 23 +++-- packages/theme/src/v4/index.ts | 30 +++++++ packages/theme/src/{ => v4}/pageTheme.ts | 3 +- packages/theme/src/{ => v4}/themes.ts | 6 +- packages/theme/src/v4/types.ts | 105 +++++++++++++++++++++++ 8 files changed, 212 insertions(+), 100 deletions(-) rename packages/theme/src/{ => v4}/baseTheme.ts (93%) create mode 100644 packages/theme/src/v4/index.ts rename packages/theme/src/{ => v4}/pageTheme.ts (99%) rename packages/theme/src/{ => v4}/themes.ts (96%) create mode 100644 packages/theme/src/v4/types.ts diff --git a/packages/theme/api-report.md b/packages/theme/api-report.md index 863ab81b68..c61245e0e2 100644 --- a/packages/theme/api-report.md +++ b/packages/theme/api-report.md @@ -9,7 +9,7 @@ import { PaletteOptions } from '@material-ui/core/styles/createPalette'; import { Theme } from '@material-ui/core'; import { ThemeOptions } from '@material-ui/core'; -// @public +// @public @deprecated export type BackstagePalette = Palette & BackstagePaletteAdditions; // @public @@ -75,11 +75,11 @@ export type BackstagePaletteAdditions = { }; }; -// @public +// @public @deprecated export type BackstagePaletteOptions = PaletteOptions & BackstagePaletteAdditions; -// @public +// @public @deprecated export interface BackstageTheme extends Theme { // (undocumented) getPageTheme: (selector: PageThemeSelector) => PageTheme; @@ -89,7 +89,7 @@ export interface BackstageTheme extends Theme { palette: BackstagePalette; } -// @public +// @public @deprecated export interface BackstageThemeOptions extends ThemeOptions { // (undocumented) getPageTheme: (selector: PageThemeSelector) => PageTheme; @@ -102,19 +102,28 @@ export interface BackstageThemeOptions extends ThemeOptions { // @public export const colorVariants: Record; -// @public -export function createTheme(options: SimpleThemeOptions): BackstageTheme; +// @public @deprecated (undocumented) +export const createTheme: typeof createV4Theme; + +// @public @deprecated (undocumented) +export const createThemeOptions: typeof createV4ThemeOptions; + +// @public @deprecated (undocumented) +export const createThemeOverrides: typeof createV4ThemeOverrides; // @public -export function createThemeOptions( - options: SimpleThemeOptions, -): BackstageThemeOptions; +export function createV4Theme(options: SimpleV4ThemeOptions): Theme; // @public -export function createThemeOverrides(theme: BackstageTheme): Overrides; +export function createV4ThemeOptions( + options: SimpleV4ThemeOptions, +): ThemeOptions; // @public -export const darkTheme: BackstageTheme; +export function createV4ThemeOverrides(theme: Theme): Overrides; + +// @public +export const darkTheme: Theme; // @public export function genPageTheme(props: { @@ -126,7 +135,7 @@ export function genPageTheme(props: { }): PageTheme; // @public -export const lightTheme: BackstageTheme; +export const lightTheme: Theme; // @public export type PageTheme = { @@ -147,9 +156,12 @@ export type PageThemeSelector = { // @public export const shapes: Record; +// @public @deprecated (undocumented) +export type SimpleThemeOptions = SimpleV4ThemeOptions; + // @public -export type SimpleThemeOptions = { - palette: BackstagePaletteOptions; +export type SimpleV4ThemeOptions = { + palette: PaletteOptions; defaultPageTheme: string; pageTheme?: Record; fontFamily?: string; diff --git a/packages/theme/src/index.ts b/packages/theme/src/index.ts index 41f827bf43..33b5c9a697 100644 --- a/packages/theme/src/index.ts +++ b/packages/theme/src/index.ts @@ -1,5 +1,5 @@ /* - * Copyright 2020 The Backstage Authors + * Copyright 2022 The Backstage Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,7 +20,37 @@ * @packageDocumentation */ -export * from './themes'; -export * from './baseTheme'; -export * from './types'; -export * from './pageTheme'; +export * from './v4'; +export type { + BackstagePaletteAdditions, + PageTheme, + PageThemeSelector, +} from './types'; + +import { + createV4Theme, + createV4ThemeOptions, + createV4ThemeOverrides, +} from './v4'; +import type { SimpleV4ThemeOptions } from './v4'; + +/** + * @public + * @deprecated Use {@link createV4Theme} instead. + */ +export const createTheme = createV4Theme; +/** + * @public + * @deprecated Use {@link createV4ThemeOptions} instead. + */ +export const createThemeOptions = createV4ThemeOptions; +/** + * @public + * @deprecated Use {@link createV4ThemeOverrides} instead. + */ +export const createThemeOverrides = createV4ThemeOverrides; +/** + * @public + * @deprecated Use {@link SimpleV4ThemeOptions} instead. + */ +export type SimpleThemeOptions = SimpleV4ThemeOptions; diff --git a/packages/theme/src/types.ts b/packages/theme/src/types.ts index 0295e491f1..143ccbabaa 100644 --- a/packages/theme/src/types.ts +++ b/packages/theme/src/types.ts @@ -1,5 +1,5 @@ /* - * Copyright 2020 The Backstage Authors + * Copyright 2022 The Backstage Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,12 +14,6 @@ * limitations under the License. */ -import { Theme, ThemeOptions } from '@material-ui/core'; -import { - PaletteOptions, - Palette, -} from '@material-ui/core/styles/createPalette'; - /** * Backstage specific additions to the material-ui palette. * @@ -90,21 +84,6 @@ export type BackstagePaletteAdditions = { }; }; -/** - * The full Backstage palette. - * - * @public - */ -export type BackstagePalette = Palette & BackstagePaletteAdditions; - -/** - * The full Backstage palette options. - * - * @public - */ -export type BackstagePaletteOptions = PaletteOptions & - BackstagePaletteAdditions; - /** * Selector for what page theme to use. * @@ -114,48 +93,6 @@ export type PageThemeSelector = { themeId: string; }; -/** - * A Backstage theme. - * - * @public - */ -export interface BackstageTheme extends Theme { - palette: BackstagePalette; - page: PageTheme; - getPageTheme: (selector: PageThemeSelector) => PageTheme; -} - -/** - * Backstage theme options. - * - * @public - * @remarks - * - * This is essentially a partial theme definition made by the user, that then - * gets merged together with defaults and other values to form the final - * {@link BackstageTheme}. - * - */ -export interface BackstageThemeOptions extends ThemeOptions { - palette: BackstagePaletteOptions; - page: PageTheme; - getPageTheme: (selector: PageThemeSelector) => PageTheme; -} - -/** - * A simpler configuration for creating a new theme that just tweaks some parts - * of the backstage one. - * - * @public - */ -export type SimpleThemeOptions = { - palette: BackstagePaletteOptions; - defaultPageTheme: string; - pageTheme?: Record; - fontFamily?: string; - htmlFontSize?: number; -}; - /** * The theme definitions for a given layout page. * diff --git a/packages/theme/src/baseTheme.ts b/packages/theme/src/v4/baseTheme.ts similarity index 93% rename from packages/theme/src/baseTheme.ts rename to packages/theme/src/v4/baseTheme.ts index c0a9022bd0..b326018e87 100644 --- a/packages/theme/src/baseTheme.ts +++ b/packages/theme/src/v4/baseTheme.ts @@ -15,14 +15,11 @@ */ import { createTheme as createMuiTheme } from '@material-ui/core/styles'; +import { Theme, ThemeOptions } from '@material-ui/core'; import { darken, lighten } from '@material-ui/core/styles/colorManipulator'; import { Overrides } from '@material-ui/core/styles/overrides'; -import { - BackstageTheme, - BackstageThemeOptions, - SimpleThemeOptions, -} from './types'; import { pageTheme as defaultPageThemes } from './pageTheme'; +import { SimpleV4ThemeOptions } from './types'; const DEFAULT_HTML_FONT_SIZE = 16; const DEFAULT_FONT_FAMILY = @@ -33,9 +30,9 @@ const DEFAULT_FONT_FAMILY = * * @public */ -export function createThemeOptions( - options: SimpleThemeOptions, -): BackstageThemeOptions { +export function createV4ThemeOptions( + options: SimpleV4ThemeOptions, +): ThemeOptions { const { palette, htmlFontSize = DEFAULT_HTML_FONT_SIZE, @@ -103,7 +100,7 @@ export function createThemeOptions( * * @public */ -export function createThemeOverrides(theme: BackstageTheme): Overrides { +export function createV4ThemeOverrides(theme: Theme): Overrides { return { MuiCssBaseline: { '@global': { @@ -291,10 +288,10 @@ export function createThemeOverrides(theme: BackstageTheme): Overrides { * * @public */ -export function createTheme(options: SimpleThemeOptions): BackstageTheme { - const themeOptions = createThemeOptions(options); - const baseTheme = createMuiTheme(themeOptions) as BackstageTheme; - const overrides = createThemeOverrides(baseTheme); +export function createV4Theme(options: SimpleV4ThemeOptions): Theme { + const themeOptions = createV4ThemeOptions(options); + const baseTheme = createMuiTheme(themeOptions); + const overrides = createV4ThemeOverrides(baseTheme); const theme = { ...baseTheme, overrides }; return theme; } diff --git a/packages/theme/src/v4/index.ts b/packages/theme/src/v4/index.ts new file mode 100644 index 0000000000..f897070f0e --- /dev/null +++ b/packages/theme/src/v4/index.ts @@ -0,0 +1,30 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export { darkTheme, lightTheme } from './themes'; +export { + createV4Theme, + createV4ThemeOptions, + createV4ThemeOverrides, +} from './baseTheme'; +export type { + BackstagePalette, + BackstagePaletteOptions, + BackstageTheme, + BackstageThemeOptions, + SimpleV4ThemeOptions, +} from './types'; +export { colorVariants, genPageTheme, pageTheme, shapes } from './pageTheme'; diff --git a/packages/theme/src/pageTheme.ts b/packages/theme/src/v4/pageTheme.ts similarity index 99% rename from packages/theme/src/pageTheme.ts rename to packages/theme/src/v4/pageTheme.ts index dd36d7641b..93eb2be0e3 100644 --- a/packages/theme/src/pageTheme.ts +++ b/packages/theme/src/v4/pageTheme.ts @@ -13,7 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { PageTheme } from './types'; + +import { PageTheme } from '../types'; /** * The default predefined burst shapes. diff --git a/packages/theme/src/themes.ts b/packages/theme/src/v4/themes.ts similarity index 96% rename from packages/theme/src/themes.ts rename to packages/theme/src/v4/themes.ts index 23438a1c14..9432aa2b57 100644 --- a/packages/theme/src/themes.ts +++ b/packages/theme/src/v4/themes.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { createTheme } from './baseTheme'; +import { createV4Theme } from './baseTheme'; import { pageTheme } from './pageTheme'; import { yellow } from '@material-ui/core/colors'; @@ -23,7 +23,7 @@ import { yellow } from '@material-ui/core/colors'; * * @public */ -export const lightTheme = createTheme({ +export const lightTheme = createV4Theme({ palette: { type: 'light', background: { @@ -101,7 +101,7 @@ export const lightTheme = createTheme({ * * @public */ -export const darkTheme = createTheme({ +export const darkTheme = createV4Theme({ palette: { type: 'dark', background: { diff --git a/packages/theme/src/v4/types.ts b/packages/theme/src/v4/types.ts new file mode 100644 index 0000000000..7a292fe0a1 --- /dev/null +++ b/packages/theme/src/v4/types.ts @@ -0,0 +1,105 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Theme, ThemeOptions } from '@material-ui/core'; +import { + PaletteOptions, + Palette, +} from '@material-ui/core/styles/createPalette'; +import { + BackstagePaletteAdditions, + PageTheme, + PageThemeSelector, +} from '../types'; + +/** + * The full Backstage palette. + * + * @public + * @deprecated This type is deprecated, the MUI Palette type is now always extended instead. + */ +export type BackstagePalette = Palette & BackstagePaletteAdditions; + +/** + * The full Backstage palette options. + * + * @public + * @deprecated This type is deprecated, the MUI PaletteOptions type is now always extended instead. + */ +export type BackstagePaletteOptions = PaletteOptions & + BackstagePaletteAdditions; + +/** + * Backstage theme options. + * + * @public + * @deprecated This type is deprecated, the MUI ThemeOptions type is now always extended instead. + * @remarks + * + * This is essentially a partial theme definition made by the user, that then + * gets merged together with defaults and other values to form the final + * {@link BackstageTheme}. + * + */ +export interface BackstageThemeOptions extends ThemeOptions { + palette: BackstagePaletteOptions; + page: PageTheme; + getPageTheme: (selector: PageThemeSelector) => PageTheme; +} + +/** + * A Backstage theme. + * + * @public + * @deprecated This type is deprecated, the MUI Theme type is now always extended instead. + */ +export interface BackstageTheme extends Theme { + palette: BackstagePalette; + page: PageTheme; + getPageTheme: (selector: PageThemeSelector) => PageTheme; +} + +/** + * A simpler configuration for creating a new theme that just tweaks some parts + * of the backstage one. + * + * @public + */ +export type SimpleV4ThemeOptions = { + palette: PaletteOptions; + defaultPageTheme: string; + pageTheme?: Record; + fontFamily?: string; + htmlFontSize?: number; +}; + +declare module '@material-ui/core/styles/createPalette' { + interface Palette extends BackstagePaletteAdditions {} + + interface PaletteOptions extends BackstagePaletteAdditions {} +} + +declare module '@material-ui/core/styles/createTheme' { + interface Theme { + page: PageTheme; + getPageTheme: (selector: PageThemeSelector) => PageTheme; + } + + interface ThemeOptions { + page: PageTheme; + getPageTheme: (selector: PageThemeSelector) => PageTheme; + } +} From 91ea8e83433aa79c9f7df2eb69e3e4f8cfafcc1a Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 30 Dec 2022 15:00:40 +0100 Subject: [PATCH 160/213] theme: initial mui v5 types + workaround Signed-off-by: Patrik Oldsberg --- packages/theme/package.json | 7 ++++- packages/theme/src/index.ts | 1 + packages/theme/src/v5/index.ts | 17 +++++++++++ packages/theme/src/v5/types.ts | 53 ++++++++++++++++++++++++++++++++++ 4 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 packages/theme/src/v5/index.ts create mode 100644 packages/theme/src/v5/types.ts diff --git a/packages/theme/package.json b/packages/theme/package.json index fbc767fb2f..99d9929525 100644 --- a/packages/theme/package.json +++ b/packages/theme/package.json @@ -32,7 +32,12 @@ "test": "backstage-cli package test" }, "dependencies": { - "@material-ui/core": "^4.12.2" + "@material-ui/core": "^4.12.2", + "@mui/material": "^5.11.2" + }, + "peerDependencies": { + "@types/react": "^16.13.1 || ^17.0.0", + "react": "^16.13.1 || ^17.0.0" }, "peerDependencies": { "react": "^16.13.1 || ^17.0.0", diff --git a/packages/theme/src/index.ts b/packages/theme/src/index.ts index 33b5c9a697..5a07f66536 100644 --- a/packages/theme/src/index.ts +++ b/packages/theme/src/index.ts @@ -21,6 +21,7 @@ */ export * from './v4'; +export * from './v5'; export type { BackstagePaletteAdditions, PageTheme, diff --git a/packages/theme/src/v5/index.ts b/packages/theme/src/v5/index.ts new file mode 100644 index 0000000000..db229eae34 --- /dev/null +++ b/packages/theme/src/v5/index.ts @@ -0,0 +1,17 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export * from './types'; diff --git a/packages/theme/src/v5/types.ts b/packages/theme/src/v5/types.ts new file mode 100644 index 0000000000..d1ffdf2e80 --- /dev/null +++ b/packages/theme/src/v5/types.ts @@ -0,0 +1,53 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { + BackstagePaletteAdditions, + PageTheme, + PageThemeSelector, +} from '../types'; + +declare module '@mui/material/styles/createPalette' { + interface Palette extends BackstagePaletteAdditions {} + + interface PaletteOptions extends BackstagePaletteAdditions {} +} + +declare module '@mui/material/styles/createTheme' { + interface Theme { + pageTheme: PageTheme; + getPageTheme: (selector: PageThemeSelector) => PageTheme; + } + + interface ThemeOptions { + pageTheme: PageTheme; + getPageTheme: (selector: PageThemeSelector) => PageTheme; + } +} + +// This is a workaround for missing methods in React 17 that MUI v5 depends on +// See https://github.com/mui/material-ui/issues/35287 +declare global { + namespace React { + type React = typeof import('react'); + + interface DOMAttributes { + onResize?: React.EventHandler | undefined; + onResizeCapture?: React.EventHandler | undefined; + nonce?: string | undefined; + } + } +} From f728b0f62e8d013f0a24bd0d00fa6a117a6fe4d4 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 30 Dec 2022 15:02:27 +0100 Subject: [PATCH 161/213] theme: unify theme additions type Signed-off-by: Patrik Oldsberg --- packages/theme/src/types.ts | 10 ++++++++++ packages/theme/src/v4/types.ts | 11 +++-------- packages/theme/src/v5/types.ts | 16 +++------------- 3 files changed, 16 insertions(+), 21 deletions(-) diff --git a/packages/theme/src/types.ts b/packages/theme/src/types.ts index 143ccbabaa..8f71ce4292 100644 --- a/packages/theme/src/types.ts +++ b/packages/theme/src/types.ts @@ -104,3 +104,13 @@ export type PageTheme = { backgroundImage: string; fontColor: string; }; + +/** + * Backstage specific additions to the material-ui theme. + * + * @public + */ +export type BackstageThemeAdditions = { + page: PageTheme; + getPageTheme: (selector: PageThemeSelector) => PageTheme; +}; diff --git a/packages/theme/src/v4/types.ts b/packages/theme/src/v4/types.ts index 7a292fe0a1..e21ced6e94 100644 --- a/packages/theme/src/v4/types.ts +++ b/packages/theme/src/v4/types.ts @@ -21,6 +21,7 @@ import { } from '@material-ui/core/styles/createPalette'; import { BackstagePaletteAdditions, + BackstageThemeAdditions, PageTheme, PageThemeSelector, } from '../types'; @@ -93,13 +94,7 @@ declare module '@material-ui/core/styles/createPalette' { } declare module '@material-ui/core/styles/createTheme' { - interface Theme { - page: PageTheme; - getPageTheme: (selector: PageThemeSelector) => PageTheme; - } + interface Theme extends BackstageThemeAdditions {} - interface ThemeOptions { - page: PageTheme; - getPageTheme: (selector: PageThemeSelector) => PageTheme; - } + interface ThemeOptions extends BackstageThemeAdditions {} } diff --git a/packages/theme/src/v5/types.ts b/packages/theme/src/v5/types.ts index d1ffdf2e80..d3cf97411d 100644 --- a/packages/theme/src/v5/types.ts +++ b/packages/theme/src/v5/types.ts @@ -14,11 +14,7 @@ * limitations under the License. */ -import { - BackstagePaletteAdditions, - PageTheme, - PageThemeSelector, -} from '../types'; +import { BackstagePaletteAdditions, BackstageThemeAdditions } from '../types'; declare module '@mui/material/styles/createPalette' { interface Palette extends BackstagePaletteAdditions {} @@ -27,15 +23,9 @@ declare module '@mui/material/styles/createPalette' { } declare module '@mui/material/styles/createTheme' { - interface Theme { - pageTheme: PageTheme; - getPageTheme: (selector: PageThemeSelector) => PageTheme; - } + interface Theme extends BackstageThemeAdditions {} - interface ThemeOptions { - pageTheme: PageTheme; - getPageTheme: (selector: PageThemeSelector) => PageTheme; - } + interface ThemeOptions extends BackstageThemeAdditions {} } // This is a workaround for missing methods in React 17 that MUI v5 depends on From be7c4cdab9044da044ac785533588601141db2b0 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 30 Dec 2022 15:05:27 +0100 Subject: [PATCH 162/213] theme: move pageTheme to root Signed-off-by: Patrik Oldsberg --- packages/theme/src/index.ts | 1 + packages/theme/src/{v4 => }/pageTheme.ts | 2 +- packages/theme/src/v4/baseTheme.ts | 2 +- packages/theme/src/v4/index.ts | 1 - packages/theme/src/v4/themes.ts | 2 +- 5 files changed, 4 insertions(+), 4 deletions(-) rename packages/theme/src/{v4 => }/pageTheme.ts (99%) diff --git a/packages/theme/src/index.ts b/packages/theme/src/index.ts index 5a07f66536..c9f0ebd289 100644 --- a/packages/theme/src/index.ts +++ b/packages/theme/src/index.ts @@ -22,6 +22,7 @@ export * from './v4'; export * from './v5'; +export { colorVariants, genPageTheme, pageTheme, shapes } from './pageTheme'; export type { BackstagePaletteAdditions, PageTheme, diff --git a/packages/theme/src/v4/pageTheme.ts b/packages/theme/src/pageTheme.ts similarity index 99% rename from packages/theme/src/v4/pageTheme.ts rename to packages/theme/src/pageTheme.ts index 93eb2be0e3..12a73b6089 100644 --- a/packages/theme/src/v4/pageTheme.ts +++ b/packages/theme/src/pageTheme.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { PageTheme } from '../types'; +import { PageTheme } from './types'; /** * The default predefined burst shapes. diff --git a/packages/theme/src/v4/baseTheme.ts b/packages/theme/src/v4/baseTheme.ts index b326018e87..1dcd2cf7d7 100644 --- a/packages/theme/src/v4/baseTheme.ts +++ b/packages/theme/src/v4/baseTheme.ts @@ -18,7 +18,7 @@ import { createTheme as createMuiTheme } from '@material-ui/core/styles'; import { Theme, ThemeOptions } from '@material-ui/core'; import { darken, lighten } from '@material-ui/core/styles/colorManipulator'; import { Overrides } from '@material-ui/core/styles/overrides'; -import { pageTheme as defaultPageThemes } from './pageTheme'; +import { pageTheme as defaultPageThemes } from '../pageTheme'; import { SimpleV4ThemeOptions } from './types'; const DEFAULT_HTML_FONT_SIZE = 16; diff --git a/packages/theme/src/v4/index.ts b/packages/theme/src/v4/index.ts index f897070f0e..331e0e4c1e 100644 --- a/packages/theme/src/v4/index.ts +++ b/packages/theme/src/v4/index.ts @@ -27,4 +27,3 @@ export type { BackstageThemeOptions, SimpleV4ThemeOptions, } from './types'; -export { colorVariants, genPageTheme, pageTheme, shapes } from './pageTheme'; diff --git a/packages/theme/src/v4/themes.ts b/packages/theme/src/v4/themes.ts index 9432aa2b57..4aa1902f4a 100644 --- a/packages/theme/src/v4/themes.ts +++ b/packages/theme/src/v4/themes.ts @@ -15,7 +15,7 @@ */ import { createV4Theme } from './baseTheme'; -import { pageTheme } from './pageTheme'; +import { pageTheme } from '../pageTheme'; import { yellow } from '@material-ui/core/colors'; /** From 231b39bae838454001a3285d1dc33f48e6e0c0af Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 31 Dec 2022 12:32:17 +0100 Subject: [PATCH 163/213] theme: add v5->v4 component theme adapter Signed-off-by: Patrik Oldsberg --- packages/theme/src/compat/overrides.test.ts | 138 ++++++++++++++++++++ packages/theme/src/compat/overrides.ts | 71 ++++++++++ 2 files changed, 209 insertions(+) create mode 100644 packages/theme/src/compat/overrides.test.ts create mode 100644 packages/theme/src/compat/overrides.ts diff --git a/packages/theme/src/compat/overrides.test.ts b/packages/theme/src/compat/overrides.test.ts new file mode 100644 index 0000000000..68fd883168 --- /dev/null +++ b/packages/theme/src/compat/overrides.test.ts @@ -0,0 +1,138 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Theme } from '@mui/material'; +import { transformV5ComponentThemesToV4 } from './overrides'; + +describe('transformV5ComponentThemesToV4', () => { + const mockTheme = { + palette: { + primary: { + main: 'red', + }, + }, + } as unknown as Theme; + it('transforms empty component themes', () => { + expect(transformV5ComponentThemesToV4(mockTheme)).toEqual({ + overrides: {}, + props: {}, + }); + expect(transformV5ComponentThemesToV4(mockTheme, {})).toEqual({ + overrides: {}, + props: {}, + }); + expect( + transformV5ComponentThemesToV4(mockTheme, { + MuiButton: { + styleOverrides: undefined, + defaultProps: undefined, + }, + }), + ).toEqual({ overrides: {}, props: {} }); + expect( + transformV5ComponentThemesToV4(mockTheme, { + MuiButton: { + styleOverrides: {}, + defaultProps: {}, + }, + }), + ).toEqual({ overrides: { MuiButton: {} }, props: { MuiButton: {} } }); + }); + + it('transforms component themes', () => { + expect( + transformV5ComponentThemesToV4(mockTheme, { + MuiButton: { + styleOverrides: { + root: { + color: 'green', + }, + }, + defaultProps: { + disableRipple: true, + }, + }, + }), + ).toEqual({ + overrides: { + MuiButton: { + root: { + color: 'green', + }, + }, + }, + props: { + MuiButton: { + disableRipple: true, + }, + }, + }); + expect( + transformV5ComponentThemesToV4(mockTheme, { + MuiButton: { + styleOverrides: { + root: ({ theme }) => ({ + color: theme.palette.primary.main, + }), + }, + }, + }), + ).toEqual({ + overrides: { + MuiButton: { + root: { + color: 'red', + }, + }, + }, + props: {}, + }); + }); + + it('transforms CSSBaseline theme', () => { + expect( + transformV5ComponentThemesToV4(mockTheme, { + MuiCssBaseline: { + styleOverrides: theme => ({ + '@global': { + html: { + color: theme.palette.primary.main, + }, + }, + }), + defaultProps: { + enableColorScheme: true, + }, + }, + }), + ).toEqual({ + overrides: { + MuiCssBaseline: { + '@global': { + html: { + color: 'red', + }, + }, + }, + }, + props: { + MuiCssBaseline: { + enableColorScheme: true, + }, + }, + }); + }); +}); diff --git a/packages/theme/src/compat/overrides.ts b/packages/theme/src/compat/overrides.ts new file mode 100644 index 0000000000..0ada593740 --- /dev/null +++ b/packages/theme/src/compat/overrides.ts @@ -0,0 +1,71 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Overrides } from '@material-ui/core/styles/overrides'; +import { ComponentsProps } from '@material-ui/core/styles/props'; +import { ComponentsOverrides, Theme } from '@mui/material/styles'; + +type V5Override = ComponentsOverrides[keyof ComponentsOverrides]; +type V4Override = Overrides[keyof Overrides]; + +// Converts callback-based overrides to static styles, e.g. +// { root: theme => ({ color: theme.color }) } -> { root: { color: 'red' } } +function adaptV5Override(theme: Theme, overrides: V5Override): V4Override { + if (!overrides) { + return overrides as V4Override; + } + if (typeof overrides === 'function') { + return overrides(theme) as V4Override; + } + if (typeof overrides === 'object') { + return Object.fromEntries( + Object.entries(overrides).map(([className, style]) => { + if (typeof style === 'function') { + return [className, style({ theme })]; + } + return [className, style]; + }), + ); + } + return overrides as V4Override; +} + +// Transform v5 theme overrides into a v4 theme, by converting the callback-based overrides +export function transformV5ComponentThemesToV4( + theme: Theme, + components: Theme['components'] = {}, +): { overrides: Overrides; props: ComponentsProps } { + const overrides: Record = {}; + const props: Record = {}; + + for (const name of Object.keys(components)) { + const component = components[name as keyof typeof components]; + if (!component) { + continue; + } + if ('styleOverrides' in component) { + overrides[name] = adaptV5Override( + theme, + component.styleOverrides as V5Override, + ); + } + if ('defaultProps' in component) { + props[name] = component.defaultProps; + } + } + + return { overrides, props }; +} From b678641ab16a6648c5a6ac23f06fc08ac3453675 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 31 Dec 2022 14:16:31 +0100 Subject: [PATCH 164/213] theme: add multi theme provider and holder Signed-off-by: Patrik Oldsberg --- .../theme/src/compat/MultiThemeProvider.tsx | 58 +++++++++++++++++++ packages/theme/src/compat/types.ts | 19 ++++++ 2 files changed, 77 insertions(+) create mode 100644 packages/theme/src/compat/MultiThemeProvider.tsx create mode 100644 packages/theme/src/compat/types.ts diff --git a/packages/theme/src/compat/MultiThemeProvider.tsx b/packages/theme/src/compat/MultiThemeProvider.tsx new file mode 100644 index 0000000000..e707010dc9 --- /dev/null +++ b/packages/theme/src/compat/MultiThemeProvider.tsx @@ -0,0 +1,58 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import React, { ReactNode } from 'react'; +import { + Theme as Mui4Theme, + ThemeProvider as Mui4Provider, +} from '@material-ui/core/styles'; +import { + Theme as Mui5Theme, + ThemeProvider as Mui5Provider, +} from '@mui/material/styles'; +import CssBaseline from '@mui/material/CssBaseline'; +import { MultiThemeHolder } from './types'; + +interface ThemeProviderProps { + children: ReactNode; + theme: MultiThemeHolder; + noCssBaseline?: boolean; +} + +export function MultiThemeProvider(props: ThemeProviderProps) { + const { children, theme, noCssBaseline } = props; + + let result = noCssBaseline ? ( + children + ) : ( + <> + + {children} + + ); + + const v4Theme = theme.getThemeForVersion('v4'); + if (v4Theme) { + result = {result}; + } + + const v5Theme = theme.getThemeForVersion('v5'); + if (v5Theme) { + result = {result}; + } + + return result; +} diff --git a/packages/theme/src/compat/types.ts b/packages/theme/src/compat/types.ts new file mode 100644 index 0000000000..dac6ef9492 --- /dev/null +++ b/packages/theme/src/compat/types.ts @@ -0,0 +1,19 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export interface MultiThemeHolder { + getThemeForVersion(version: string): unknown | undefined; +} From 9457dc832c5dabf74d52742c13c3fca183a35f7c Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 31 Dec 2022 14:17:57 +0100 Subject: [PATCH 165/213] theme: exports for compat Signed-off-by: Patrik Oldsberg --- packages/theme/src/compat/index.ts | 18 ++++++++++++++++++ packages/theme/src/index.ts | 1 + 2 files changed, 19 insertions(+) create mode 100644 packages/theme/src/compat/index.ts diff --git a/packages/theme/src/compat/index.ts b/packages/theme/src/compat/index.ts new file mode 100644 index 0000000000..fe6863b8bc --- /dev/null +++ b/packages/theme/src/compat/index.ts @@ -0,0 +1,18 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export { MultiThemeProvider } from './MultiThemeProvider'; +export type { MultiThemeHolder } from './types'; diff --git a/packages/theme/src/index.ts b/packages/theme/src/index.ts index c9f0ebd289..a6c9632983 100644 --- a/packages/theme/src/index.ts +++ b/packages/theme/src/index.ts @@ -20,6 +20,7 @@ * @packageDocumentation */ +export * from './compat'; export * from './v4'; export * from './v5'; export { colorVariants, genPageTheme, pageTheme, shapes } from './pageTheme'; From 744b36547627634442b950c3b270993f5291571a Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 31 Dec 2022 14:36:52 +0100 Subject: [PATCH 166/213] theme: make home the default page theme Signed-off-by: Patrik Oldsberg --- packages/theme/src/v4/baseTheme.ts | 3 ++- packages/theme/src/v4/types.ts | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/theme/src/v4/baseTheme.ts b/packages/theme/src/v4/baseTheme.ts index 1dcd2cf7d7..5bd7981377 100644 --- a/packages/theme/src/v4/baseTheme.ts +++ b/packages/theme/src/v4/baseTheme.ts @@ -24,6 +24,7 @@ import { SimpleV4ThemeOptions } from './types'; const DEFAULT_HTML_FONT_SIZE = 16; const DEFAULT_FONT_FAMILY = '"Helvetica Neue", Helvetica, Roboto, Arial, sans-serif'; +const DEFAULT_PAGE_THEME = 'home'; /** * A helper for creating theme options. @@ -37,7 +38,7 @@ export function createV4ThemeOptions( palette, htmlFontSize = DEFAULT_HTML_FONT_SIZE, fontFamily = DEFAULT_FONT_FAMILY, - defaultPageTheme, + defaultPageTheme = DEFAULT_PAGE_THEME, pageTheme = defaultPageThemes, } = options; diff --git a/packages/theme/src/v4/types.ts b/packages/theme/src/v4/types.ts index e21ced6e94..9da80e73a3 100644 --- a/packages/theme/src/v4/types.ts +++ b/packages/theme/src/v4/types.ts @@ -81,7 +81,7 @@ export interface BackstageTheme extends Theme { */ export type SimpleV4ThemeOptions = { palette: PaletteOptions; - defaultPageTheme: string; + defaultPageTheme?: string; pageTheme?: Record; fontFamily?: string; htmlFontSize?: number; From f25222d7c1275f0abd8fca9c6a1255536e565e34 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 31 Dec 2022 15:06:51 +0100 Subject: [PATCH 167/213] theme: add unified theme abstraction + creators and base theme options Signed-off-by: Patrik Oldsberg --- packages/theme/src/compat/UnifiedTheme.tsx | 96 +++++++ ...eProvider.tsx => UnifiedThemeProvider.tsx} | 10 +- .../src/compat/createBaseThemeOptions.ts | 93 +++++++ packages/theme/src/compat/index.ts | 4 +- packages/theme/src/compat/overrides.ts | 4 +- packages/theme/src/compat/types.ts | 11 +- .../theme/src/v5/defaultComponentThemes.ts | 243 ++++++++++++++++++ packages/theme/src/v5/index.ts | 1 + packages/theme/src/v5/types.ts | 21 +- 9 files changed, 471 insertions(+), 12 deletions(-) create mode 100644 packages/theme/src/compat/UnifiedTheme.tsx rename packages/theme/src/compat/{MultiThemeProvider.tsx => UnifiedThemeProvider.tsx} (85%) create mode 100644 packages/theme/src/compat/createBaseThemeOptions.ts create mode 100644 packages/theme/src/v5/defaultComponentThemes.ts diff --git a/packages/theme/src/compat/UnifiedTheme.tsx b/packages/theme/src/compat/UnifiedTheme.tsx new file mode 100644 index 0000000000..7bd907bc84 --- /dev/null +++ b/packages/theme/src/compat/UnifiedTheme.tsx @@ -0,0 +1,96 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { + Theme as Mui4Theme, + createTheme as createV4Theme, + ThemeOptions as ThemeOptionsV4, +} from '@material-ui/core/styles'; +import { PaletteOptions as PaletteOptionsV4 } from '@material-ui/core/styles/createPalette'; +import { PaletteOptions as PaletteOptionsV5 } from '@mui/material/styles/createPalette'; +import { + adaptV4Theme, + Theme as Mui5Theme, + createTheme as createV5Theme, + ThemeOptions as ThemeOptionsV5, +} from '@mui/material/styles'; +import { transformV5ComponentThemesToV4 } from './overrides'; +import { PageTheme } from '../types'; +import { defaultComponentThemes } from '../v5'; +import { createBaseThemeOptions } from './createBaseThemeOptions'; +import { UnifiedTheme } from './types'; + +export class UnifiedThemeHolder implements UnifiedTheme { + #themes = new Map(); + + constructor(v4?: Mui4Theme, v5?: Mui5Theme) { + this.#themes = new Map(); + if (v4) { + this.#themes.set('v4', v4); + } + if (v5) { + this.#themes.set('v5', v5); + } + } + + getTheme(version: string): unknown | undefined { + return this.#themes.get(version); + } +} + +/** + * Options for creating a new {@link UnifiedTheme}. + * + * @public + */ +export interface UnifiedThemeOptions { + palette: PaletteOptionsV4 & PaletteOptionsV5; + defaultPageTheme?: string; + pageTheme?: Record; + fontFamily?: string; + htmlFontSize?: number; + components?: ThemeOptionsV5['components']; +} + +/** + * Creates a new {@link UnifiedTheme} using the provided options. + * + * @public + */ +export function createUnifiedTheme( + options: UnifiedThemeOptions, +): UnifiedThemeHolder { + const themeOptions = createBaseThemeOptions(options); + const components = { ...defaultComponentThemes, ...options.components }; + const v5Theme = createV5Theme({ ...themeOptions, components }); + const v4Overrides = transformV5ComponentThemesToV4(v5Theme, components); + const v4Theme = { ...createV4Theme(themeOptions), ...v4Overrides }; + + return new UnifiedThemeHolder(v4Theme, v5Theme); +} + +/** + * Creates a new {@link UnifiedTheme} using MUI v4 theme options. + * Note that this uses `adaptV4Theme` from MUI v5, which is deprecated. + * + * @public + */ +export function createUnifiedThemeFromV4(options: ThemeOptionsV4) { + const v4Theme = createV4Theme(options); + const v5Theme = adaptV4Theme(options as any); + + return new UnifiedThemeHolder(v4Theme, v5Theme); +} diff --git a/packages/theme/src/compat/MultiThemeProvider.tsx b/packages/theme/src/compat/UnifiedThemeProvider.tsx similarity index 85% rename from packages/theme/src/compat/MultiThemeProvider.tsx rename to packages/theme/src/compat/UnifiedThemeProvider.tsx index e707010dc9..19fd13eb08 100644 --- a/packages/theme/src/compat/MultiThemeProvider.tsx +++ b/packages/theme/src/compat/UnifiedThemeProvider.tsx @@ -24,15 +24,15 @@ import { ThemeProvider as Mui5Provider, } from '@mui/material/styles'; import CssBaseline from '@mui/material/CssBaseline'; -import { MultiThemeHolder } from './types'; +import { UnifiedTheme } from './types'; interface ThemeProviderProps { children: ReactNode; - theme: MultiThemeHolder; + theme: UnifiedTheme; noCssBaseline?: boolean; } -export function MultiThemeProvider(props: ThemeProviderProps) { +export function UnifiedThemeProvider(props: ThemeProviderProps) { const { children, theme, noCssBaseline } = props; let result = noCssBaseline ? ( @@ -44,12 +44,12 @@ export function MultiThemeProvider(props: ThemeProviderProps) { ); - const v4Theme = theme.getThemeForVersion('v4'); + const v4Theme = theme.getTheme('v4'); if (v4Theme) { result = {result}; } - const v5Theme = theme.getThemeForVersion('v5'); + const v5Theme = theme.getTheme('v5'); if (v5Theme) { result = {result}; } diff --git a/packages/theme/src/compat/createBaseThemeOptions.ts b/packages/theme/src/compat/createBaseThemeOptions.ts new file mode 100644 index 0000000000..ab8a80fb94 --- /dev/null +++ b/packages/theme/src/compat/createBaseThemeOptions.ts @@ -0,0 +1,93 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { PageTheme, PageThemeSelector } from '../types'; +import { pageTheme as defaultPageThemes } from '../pageTheme'; + +const DEFAULT_HTML_FONT_SIZE = 16; +const DEFAULT_FONT_FAMILY = + '"Helvetica Neue", Helvetica, Roboto, Arial, sans-serif'; +const DEFAULT_PAGE_THEME = 'home'; + +export interface BaseThemeOptionsInput { + palette: PaletteOptions; + defaultPageTheme?: string; + pageTheme?: Record; + fontFamily?: string; + htmlFontSize?: number; +} + +/** + * A helper for creating theme options. + * + * @public + */ +export function createBaseThemeOptions( + options: BaseThemeOptionsInput, +) { + const { + palette, + htmlFontSize = DEFAULT_HTML_FONT_SIZE, + fontFamily = DEFAULT_FONT_FAMILY, + defaultPageTheme = DEFAULT_PAGE_THEME, + pageTheme = defaultPageThemes, + } = options; + + if (!pageTheme[defaultPageTheme]) { + throw new Error(`${defaultPageTheme} is not defined in pageTheme.`); + } + + return { + palette, + typography: { + htmlFontSize, + fontFamily, + h6: { + fontWeight: 700, + fontSize: 20, + marginBottom: 2, + }, + h5: { + fontWeight: 700, + fontSize: 24, + marginBottom: 4, + }, + h4: { + fontWeight: 700, + fontSize: 28, + marginBottom: 6, + }, + h3: { + fontSize: 32, + fontWeight: 700, + marginBottom: 6, + }, + h2: { + fontSize: 40, + fontWeight: 700, + marginBottom: 8, + }, + h1: { + fontSize: 54, + fontWeight: 700, + marginBottom: 10, + }, + }, + page: pageTheme[defaultPageTheme], + getPageTheme: ({ themeId }: PageThemeSelector) => + pageTheme[themeId] ?? pageTheme[defaultPageTheme], + }; +} diff --git a/packages/theme/src/compat/index.ts b/packages/theme/src/compat/index.ts index fe6863b8bc..836c8e6563 100644 --- a/packages/theme/src/compat/index.ts +++ b/packages/theme/src/compat/index.ts @@ -14,5 +14,5 @@ * limitations under the License. */ -export { MultiThemeProvider } from './MultiThemeProvider'; -export type { MultiThemeHolder } from './types'; +export { UnifiedThemeProvider } from './UnifiedThemeProvider'; +export type { UnifiedTheme } from './types'; diff --git a/packages/theme/src/compat/overrides.ts b/packages/theme/src/compat/overrides.ts index 0ada593740..8b6c3f94bc 100644 --- a/packages/theme/src/compat/overrides.ts +++ b/packages/theme/src/compat/overrides.ts @@ -16,7 +16,7 @@ import { Overrides } from '@material-ui/core/styles/overrides'; import { ComponentsProps } from '@material-ui/core/styles/props'; -import { ComponentsOverrides, Theme } from '@mui/material/styles'; +import { ComponentsOverrides, Theme, ThemeOptions } from '@mui/material/styles'; type V5Override = ComponentsOverrides[keyof ComponentsOverrides]; type V4Override = Overrides[keyof Overrides]; @@ -46,7 +46,7 @@ function adaptV5Override(theme: Theme, overrides: V5Override): V4Override { // Transform v5 theme overrides into a v4 theme, by converting the callback-based overrides export function transformV5ComponentThemesToV4( theme: Theme, - components: Theme['components'] = {}, + components: ThemeOptions['components'] = {}, ): { overrides: Overrides; props: ComponentsProps } { const overrides: Record = {}; const props: Record = {}; diff --git a/packages/theme/src/compat/types.ts b/packages/theme/src/compat/types.ts index dac6ef9492..f090a99b83 100644 --- a/packages/theme/src/compat/types.ts +++ b/packages/theme/src/compat/types.ts @@ -14,6 +14,13 @@ * limitations under the License. */ -export interface MultiThemeHolder { - getThemeForVersion(version: string): unknown | undefined; +/** + * A container of one theme for multiple different MUI versions. + * + * Currently known keys are 'v4' and 'v5'. + * + * @public + */ +export interface UnifiedTheme { + getTheme(version: string): unknown | undefined; } diff --git a/packages/theme/src/v5/defaultComponentThemes.ts b/packages/theme/src/v5/defaultComponentThemes.ts new file mode 100644 index 0000000000..3389018f18 --- /dev/null +++ b/packages/theme/src/v5/defaultComponentThemes.ts @@ -0,0 +1,243 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { darken, lighten, ThemeOptions } from '@mui/material/styles'; + +/** + * A helper for creating theme overrides. + * + * @public + */ +export const defaultComponentThemes: ThemeOptions['components'] = { + MuiCssBaseline: { + styleOverrides: theme => ({ + '@global': { + html: { + height: '100%', + fontFamily: theme.typography.fontFamily, + }, + body: { + height: '100%', + fontFamily: theme.typography.fontFamily, + 'overscroll-behavior-y': 'none', + }, + a: { + color: 'inherit', + textDecoration: 'none', + }, + }, + }), + }, + MuiGrid: { + defaultProps: { + spacing: 2, + }, + }, + MuiSwitch: { + defaultProps: { + color: 'primary', + }, + }, + MuiTableRow: { + styleOverrides: { + // Alternating row backgrounds + root: ({ theme }) => ({ + '&:nth-of-type(odd)': { + backgroundColor: theme.palette.background.default, + }, + }), + // Use pointer for hoverable rows + hover: { + '&:hover': { + cursor: 'pointer', + }, + }, + // Alternating head backgrounds + head: ({ theme }) => ({ + '&:nth-of-type(odd)': { + backgroundColor: theme.palette.background.paper, + }, + }), + }, + }, + // Tables are more dense than default mui tables + MuiTableCell: { + styleOverrides: { + root: ({ theme }) => ({ + wordBreak: 'break-word', + overflow: 'hidden', + verticalAlign: 'middle', + lineHeight: '1', + margin: 0, + padding: theme.spacing(3, 2, 3, 2.5), + borderBottom: 0, + }), + sizeSmall: ({ theme }) => ({ + padding: theme.spacing(1.5, 2, 1.5, 2.5), + }), + head: { + wordBreak: 'break-word', + overflow: 'hidden', + color: 'rgb(179, 179, 179)', + fontWeight: 'normal', + lineHeight: '1', + }, + }, + }, + MuiTabs: { + styleOverrides: { + // Tabs are smaller than default mui tab rows + root: { + minHeight: 24, + }, + }, + }, + MuiTab: { + styleOverrides: { + // Tabs are smaller and have a hover background + root: ({ theme }) => ({ + color: theme.palette.link, + minHeight: 24, + textTransform: 'initial', + letterSpacing: '0.07em', + '&:hover': { + color: darken(theme.palette.link, 0.3), + background: lighten(theme.palette.link, 0.95), + }, + [theme.breakpoints.up('md')]: { + minWidth: 120, + fontSize: theme.typography.pxToRem(14), + fontWeight: 500, + }, + }), + textColorPrimary: ({ theme }) => ({ + color: theme.palette.link, + }), + }, + }, + MuiTableSortLabel: { + styleOverrides: { + // No color change on hover, just rely on the arrow showing up instead. + root: { + color: 'inherit', + '&:hover': { + color: 'inherit', + }, + '&:focus': { + color: 'inherit', + }, + }, + // Bold font for highlighting selected column + active: { + fontWeight: 'bold', + color: 'inherit', + }, + }, + }, + MuiListItemText: { + styleOverrides: { + dense: { + // Default dense list items to adding ellipsis for really long str... + whiteSpace: 'nowrap', + overflow: 'hidden', + textOverflow: 'ellipsis', + }, + }, + }, + MuiButton: { + styleOverrides: { + text: { + // Text buttons have less padding by default, but we want to keep the original padding + padding: undefined, + }, + }, + }, + MuiChip: { + styleOverrides: { + root: ({ theme }) => ({ + backgroundColor: '#D9D9D9', + // By default there's no margin, but it's usually wanted, so we add some trailing margin + marginRight: theme.spacing(1), + marginBottom: theme.spacing(1), + color: theme.palette.grey[900], + }), + outlined: ({ theme }) => ({ + color: theme.palette.text.primary, + }), + label: ({ theme }) => ({ + lineHeight: `${theme.spacing(2.5)}px`, + fontWeight: theme.typography.fontWeightMedium, + fontSize: `${theme.spacing(1.75)}px`, + }), + labelSmall: ({ theme }) => ({ + fontSize: `${theme.spacing(1.5)}px`, + }), + deleteIcon: ({ theme }) => ({ + color: theme.palette.grey[500], + width: `${theme.spacing(3)}px`, + height: `${theme.spacing(3)}px`, + margin: `0 ${theme.spacing(0.75)}px 0 -${theme.spacing(0.75)}px`, + }), + deleteIconSmall: ({ theme }) => ({ + width: `${theme.spacing(2)}px`, + height: `${theme.spacing(2)}px`, + margin: `0 ${theme.spacing(0.5)}px 0 -${theme.spacing(0.5)}px`, + }), + }, + }, + MuiCard: { + styleOverrides: { + root: { + // When cards have a forced size, such as when they are arranged in a + // CSS grid, the content needs to flex such that the actions (buttons + // etc) end up at the bottom of the card instead of just below the body + // contents. + display: 'flex', + flexDirection: 'column', + }, + }, + }, + MuiCardHeader: { + styleOverrides: { + root: { + // Reduce padding between header and content + paddingBottom: 0, + }, + }, + }, + MuiCardContent: { + styleOverrides: { + root: { + // When cards have a forced size, such as when they are arranged in a + // CSS grid, the content needs to flex such that the actions (buttons + // etc) end up at the bottom of the card instead of just below the body + // contents. + flexGrow: 1, + '&:last-child': { + paddingBottom: undefined, + }, + }, + }, + }, + MuiCardActions: { + styleOverrides: { + root: { + // We default to putting the card actions at the end + justifyContent: 'flex-end', + }, + }, + }, +}; diff --git a/packages/theme/src/v5/index.ts b/packages/theme/src/v5/index.ts index db229eae34..eee5d852b1 100644 --- a/packages/theme/src/v5/index.ts +++ b/packages/theme/src/v5/index.ts @@ -15,3 +15,4 @@ */ export * from './types'; +export { defaultComponentThemes } from './defaultComponentThemes'; diff --git a/packages/theme/src/v5/types.ts b/packages/theme/src/v5/types.ts index d3cf97411d..c6788bdc06 100644 --- a/packages/theme/src/v5/types.ts +++ b/packages/theme/src/v5/types.ts @@ -14,7 +14,26 @@ * limitations under the License. */ -import { BackstagePaletteAdditions, BackstageThemeAdditions } from '../types'; +import { PaletteOptions } from '@mui/material/styles'; +import { + BackstagePaletteAdditions, + BackstageThemeAdditions, + PageTheme, +} from '../types'; + +/** + * A simpler configuration for creating a new theme that just tweaks some parts + * of the backstage one. + * + * @public + */ +export type SimpleV5ThemeOptions = { + palette: PaletteOptions; + defaultPageTheme?: string; + pageTheme?: Record; + fontFamily?: string; + htmlFontSize?: number; +}; declare module '@mui/material/styles/createPalette' { interface Palette extends BackstagePaletteAdditions {} From 6882ca559837745c53fbbe9e191322146e6d484b Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 31 Dec 2022 15:10:52 +0100 Subject: [PATCH 168/213] theme: separate out base theme constructs Signed-off-by: Patrik Oldsberg --- .../createBaseThemeOptions.ts | 46 +++++++++---------- packages/theme/src/base/index.ts | 23 ++++++++++ packages/theme/src/{ => base}/pageTheme.ts | 0 packages/theme/src/{ => base}/types.ts | 0 packages/theme/src/compat/UnifiedTheme.tsx | 4 +- packages/theme/src/index.ts | 7 +-- packages/theme/src/v4/baseTheme.ts | 2 +- packages/theme/src/v4/themes.ts | 2 +- packages/theme/src/v4/types.ts | 2 +- packages/theme/src/v5/types.ts | 2 +- 10 files changed, 53 insertions(+), 35 deletions(-) rename packages/theme/src/{compat => base}/createBaseThemeOptions.ts (94%) create mode 100644 packages/theme/src/base/index.ts rename packages/theme/src/{ => base}/pageTheme.ts (100%) rename packages/theme/src/{ => base}/types.ts (100%) diff --git a/packages/theme/src/compat/createBaseThemeOptions.ts b/packages/theme/src/base/createBaseThemeOptions.ts similarity index 94% rename from packages/theme/src/compat/createBaseThemeOptions.ts rename to packages/theme/src/base/createBaseThemeOptions.ts index ab8a80fb94..15903462e7 100644 --- a/packages/theme/src/compat/createBaseThemeOptions.ts +++ b/packages/theme/src/base/createBaseThemeOptions.ts @@ -14,8 +14,8 @@ * limitations under the License. */ -import { PageTheme, PageThemeSelector } from '../types'; -import { pageTheme as defaultPageThemes } from '../pageTheme'; +import { PageTheme, PageThemeSelector } from './types'; +import { pageTheme as defaultPageThemes } from './pageTheme'; const DEFAULT_HTML_FONT_SIZE = 16; const DEFAULT_FONT_FAMILY = @@ -55,35 +55,35 @@ export function createBaseThemeOptions( typography: { htmlFontSize, fontFamily, - h6: { + h1: { + fontSize: 54, fontWeight: 700, - fontSize: 20, - marginBottom: 2, - }, - h5: { - fontWeight: 700, - fontSize: 24, - marginBottom: 4, - }, - h4: { - fontWeight: 700, - fontSize: 28, - marginBottom: 6, - }, - h3: { - fontSize: 32, - fontWeight: 700, - marginBottom: 6, + marginBottom: 10, }, h2: { fontSize: 40, fontWeight: 700, marginBottom: 8, }, - h1: { - fontSize: 54, + h3: { + fontSize: 32, fontWeight: 700, - marginBottom: 10, + marginBottom: 6, + }, + h4: { + fontWeight: 700, + fontSize: 28, + marginBottom: 6, + }, + h5: { + fontWeight: 700, + fontSize: 24, + marginBottom: 4, + }, + h6: { + fontWeight: 700, + fontSize: 20, + marginBottom: 2, }, }, page: pageTheme[defaultPageTheme], diff --git a/packages/theme/src/base/index.ts b/packages/theme/src/base/index.ts new file mode 100644 index 0000000000..9440bcfd59 --- /dev/null +++ b/packages/theme/src/base/index.ts @@ -0,0 +1,23 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export { createBaseThemeOptions } from './createBaseThemeOptions'; +export { colorVariants, genPageTheme, pageTheme, shapes } from './pageTheme'; +export type { + BackstagePaletteAdditions, + PageTheme, + PageThemeSelector, +} from './types'; diff --git a/packages/theme/src/pageTheme.ts b/packages/theme/src/base/pageTheme.ts similarity index 100% rename from packages/theme/src/pageTheme.ts rename to packages/theme/src/base/pageTheme.ts diff --git a/packages/theme/src/types.ts b/packages/theme/src/base/types.ts similarity index 100% rename from packages/theme/src/types.ts rename to packages/theme/src/base/types.ts diff --git a/packages/theme/src/compat/UnifiedTheme.tsx b/packages/theme/src/compat/UnifiedTheme.tsx index 7bd907bc84..d00999a8b1 100644 --- a/packages/theme/src/compat/UnifiedTheme.tsx +++ b/packages/theme/src/compat/UnifiedTheme.tsx @@ -28,9 +28,9 @@ import { ThemeOptions as ThemeOptionsV5, } from '@mui/material/styles'; import { transformV5ComponentThemesToV4 } from './overrides'; -import { PageTheme } from '../types'; +import { PageTheme } from '../base/types'; import { defaultComponentThemes } from '../v5'; -import { createBaseThemeOptions } from './createBaseThemeOptions'; +import { createBaseThemeOptions } from '../base/createBaseThemeOptions'; import { UnifiedTheme } from './types'; export class UnifiedThemeHolder implements UnifiedTheme { diff --git a/packages/theme/src/index.ts b/packages/theme/src/index.ts index a6c9632983..8fdb961705 100644 --- a/packages/theme/src/index.ts +++ b/packages/theme/src/index.ts @@ -21,14 +21,9 @@ */ export * from './compat'; +export * from './base'; export * from './v4'; export * from './v5'; -export { colorVariants, genPageTheme, pageTheme, shapes } from './pageTheme'; -export type { - BackstagePaletteAdditions, - PageTheme, - PageThemeSelector, -} from './types'; import { createV4Theme, diff --git a/packages/theme/src/v4/baseTheme.ts b/packages/theme/src/v4/baseTheme.ts index 5bd7981377..cc15630f9e 100644 --- a/packages/theme/src/v4/baseTheme.ts +++ b/packages/theme/src/v4/baseTheme.ts @@ -18,7 +18,7 @@ import { createTheme as createMuiTheme } from '@material-ui/core/styles'; import { Theme, ThemeOptions } from '@material-ui/core'; import { darken, lighten } from '@material-ui/core/styles/colorManipulator'; import { Overrides } from '@material-ui/core/styles/overrides'; -import { pageTheme as defaultPageThemes } from '../pageTheme'; +import { pageTheme as defaultPageThemes } from '../base/pageTheme'; import { SimpleV4ThemeOptions } from './types'; const DEFAULT_HTML_FONT_SIZE = 16; diff --git a/packages/theme/src/v4/themes.ts b/packages/theme/src/v4/themes.ts index 4aa1902f4a..c63dcb591e 100644 --- a/packages/theme/src/v4/themes.ts +++ b/packages/theme/src/v4/themes.ts @@ -15,7 +15,7 @@ */ import { createV4Theme } from './baseTheme'; -import { pageTheme } from '../pageTheme'; +import { pageTheme } from '../base/pageTheme'; import { yellow } from '@material-ui/core/colors'; /** diff --git a/packages/theme/src/v4/types.ts b/packages/theme/src/v4/types.ts index 9da80e73a3..ded91bec3f 100644 --- a/packages/theme/src/v4/types.ts +++ b/packages/theme/src/v4/types.ts @@ -24,7 +24,7 @@ import { BackstageThemeAdditions, PageTheme, PageThemeSelector, -} from '../types'; +} from '../base/types'; /** * The full Backstage palette. diff --git a/packages/theme/src/v5/types.ts b/packages/theme/src/v5/types.ts index c6788bdc06..8fce16be05 100644 --- a/packages/theme/src/v5/types.ts +++ b/packages/theme/src/v5/types.ts @@ -19,7 +19,7 @@ import { BackstagePaletteAdditions, BackstageThemeAdditions, PageTheme, -} from '../types'; +} from '../base/types'; /** * A simpler configuration for creating a new theme that just tweaks some parts From eef94b1f7420a23cf48bc2b4f50f011d37f78e51 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 31 Dec 2022 15:14:43 +0100 Subject: [PATCH 169/213] theme: use base theme to create v4 options Signed-off-by: Patrik Oldsberg --- packages/theme/src/v4/baseTheme.ts | 71 ++++-------------------------- 1 file changed, 8 insertions(+), 63 deletions(-) diff --git a/packages/theme/src/v4/baseTheme.ts b/packages/theme/src/v4/baseTheme.ts index cc15630f9e..54a67d7d20 100644 --- a/packages/theme/src/v4/baseTheme.ts +++ b/packages/theme/src/v4/baseTheme.ts @@ -15,16 +15,12 @@ */ import { createTheme as createMuiTheme } from '@material-ui/core/styles'; -import { Theme, ThemeOptions } from '@material-ui/core'; +import { GridProps, SwitchProps, Theme, ThemeOptions } from '@material-ui/core'; import { darken, lighten } from '@material-ui/core/styles/colorManipulator'; import { Overrides } from '@material-ui/core/styles/overrides'; -import { pageTheme as defaultPageThemes } from '../base/pageTheme'; import { SimpleV4ThemeOptions } from './types'; - -const DEFAULT_HTML_FONT_SIZE = 16; -const DEFAULT_FONT_FAMILY = - '"Helvetica Neue", Helvetica, Roboto, Arial, sans-serif'; -const DEFAULT_PAGE_THEME = 'home'; +import { createBaseThemeOptions } from '../base'; +import { defaultComponentThemes } from '../v5'; /** * A helper for creating theme options. @@ -34,65 +30,14 @@ const DEFAULT_PAGE_THEME = 'home'; export function createV4ThemeOptions( options: SimpleV4ThemeOptions, ): ThemeOptions { - const { - palette, - htmlFontSize = DEFAULT_HTML_FONT_SIZE, - fontFamily = DEFAULT_FONT_FAMILY, - defaultPageTheme = DEFAULT_PAGE_THEME, - pageTheme = defaultPageThemes, - } = options; - - if (!pageTheme[defaultPageTheme]) { - throw new Error(`${defaultPageTheme} is not defined in pageTheme.`); - } - return { - palette, props: { - MuiGrid: { - spacing: 2, - }, - MuiSwitch: { - color: 'primary', - }, + MuiGrid: defaultComponentThemes?.MuiGrid + ?.defaultProps as Partial, + MuiSwitch: defaultComponentThemes?.MuiSwitch + ?.defaultProps as Partial, }, - typography: { - htmlFontSize, - fontFamily, - h6: { - fontWeight: 700, - fontSize: 20, - marginBottom: 2, - }, - h5: { - fontWeight: 700, - fontSize: 24, - marginBottom: 4, - }, - h4: { - fontWeight: 700, - fontSize: 28, - marginBottom: 6, - }, - h3: { - fontSize: 32, - fontWeight: 700, - marginBottom: 6, - }, - h2: { - fontSize: 40, - fontWeight: 700, - marginBottom: 8, - }, - h1: { - fontSize: 54, - fontWeight: 700, - marginBottom: 10, - }, - }, - page: pageTheme[defaultPageTheme], - getPageTheme: ({ themeId }) => - pageTheme[themeId] ?? pageTheme[defaultPageTheme], + ...createBaseThemeOptions(options), }; } From 5b30bdbb737375b4ac97ce44b935e5deebf57d82 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 31 Dec 2022 15:25:58 +0100 Subject: [PATCH 170/213] theme: use v5 component themes to create v4 overrides Signed-off-by: Patrik Oldsberg --- packages/theme/src/v4/baseTheme.ts | 187 +----------------- .../theme/src/v5/defaultComponentThemes.ts | 6 +- 2 files changed, 10 insertions(+), 183 deletions(-) diff --git a/packages/theme/src/v4/baseTheme.ts b/packages/theme/src/v4/baseTheme.ts index 54a67d7d20..9ae8507e9c 100644 --- a/packages/theme/src/v4/baseTheme.ts +++ b/packages/theme/src/v4/baseTheme.ts @@ -14,13 +14,14 @@ * limitations under the License. */ +import { Theme as Mui5Theme } from '@mui/material/styles'; import { createTheme as createMuiTheme } from '@material-ui/core/styles'; import { GridProps, SwitchProps, Theme, ThemeOptions } from '@material-ui/core'; -import { darken, lighten } from '@material-ui/core/styles/colorManipulator'; import { Overrides } from '@material-ui/core/styles/overrides'; import { SimpleV4ThemeOptions } from './types'; import { createBaseThemeOptions } from '../base'; import { defaultComponentThemes } from '../v5'; +import { transformV5ComponentThemesToV4 } from '../compat/overrides'; /** * A helper for creating theme options. @@ -47,185 +48,11 @@ export function createV4ThemeOptions( * @public */ export function createV4ThemeOverrides(theme: Theme): Overrides { - return { - MuiCssBaseline: { - '@global': { - html: { - height: '100%', - fontFamily: theme.typography.fontFamily, - }, - body: { - height: '100%', - fontFamily: theme.typography.fontFamily, - 'overscroll-behavior-y': 'none', - }, - a: { - color: 'inherit', - textDecoration: 'none', - }, - }, - }, - MuiTableRow: { - // Alternating row backgrounds - root: { - '&:nth-of-type(odd)': { - backgroundColor: theme.palette.background.default, - }, - }, - // Use pointer for hoverable rows - hover: { - '&:hover': { - cursor: 'pointer', - }, - }, - // Alternating head backgrounds - head: { - '&:nth-of-type(odd)': { - backgroundColor: theme.palette.background.paper, - }, - }, - }, - // Tables are more dense than default mui tables - MuiTableCell: { - root: { - wordBreak: 'break-word', - overflow: 'hidden', - verticalAlign: 'middle', - lineHeight: '1', - margin: 0, - padding: theme.spacing(3, 2, 3, 2.5), - borderBottom: 0, - }, - sizeSmall: { - padding: theme.spacing(1.5, 2, 1.5, 2.5), - }, - head: { - wordBreak: 'break-word', - overflow: 'hidden', - fontWeight: 'normal', - lineHeight: '1', - }, - }, - MuiTabs: { - // Tabs are smaller than default mui tab rows - root: { - minHeight: 24, - }, - }, - MuiTab: { - // Tabs are smaller and have a hover background - root: { - color: theme.palette.link, - minHeight: 24, - textTransform: 'initial', - letterSpacing: '0.07em', - '&:hover': { - color: darken(theme.palette.link, 0.3), - background: lighten(theme.palette.link, 0.95), - }, - [theme.breakpoints.up('md')]: { - minWidth: 120, - fontSize: theme.typography.pxToRem(14), - fontWeight: 500, - }, - }, - textColorPrimary: { - color: theme.palette.link, - }, - }, - MuiTableSortLabel: { - // No color change on hover, just rely on the arrow showing up instead. - root: { - color: 'inherit', - '&:hover': { - color: 'inherit', - }, - }, - // Bold font for highlighting selected column - active: { - fontWeight: 'bold', - }, - }, - MuiListItemText: { - dense: { - // Default dense list items to adding ellipsis for really long str... - whiteSpace: 'nowrap', - overflow: 'hidden', - textOverflow: 'ellipsis', - }, - }, - MuiButton: { - text: { - // Text buttons have less padding by default, but we want to keep the original padding - padding: undefined, - }, - }, - MuiChip: { - root: { - backgroundColor: '#D9D9D9', - // By default there's no margin, but it's usually wanted, so we add some trailing margin - marginRight: theme.spacing(1), - marginBottom: theme.spacing(1), - color: theme.palette.grey[900], - }, - outlined: { - color: theme.palette.text.primary, - }, - label: { - lineHeight: `${theme.spacing(2.5)}px`, - fontWeight: theme.typography.fontWeightMedium, - fontSize: `${theme.spacing(1.75)}px`, - }, - labelSmall: { - fontSize: `${theme.spacing(1.5)}px`, - }, - deleteIcon: { - color: theme.palette.grey[500], - width: `${theme.spacing(3)}px`, - height: `${theme.spacing(3)}px`, - margin: `0 ${theme.spacing(0.75)}px 0 -${theme.spacing(0.75)}px`, - }, - deleteIconSmall: { - width: `${theme.spacing(2)}px`, - height: `${theme.spacing(2)}px`, - margin: `0 ${theme.spacing(0.5)}px 0 -${theme.spacing(0.5)}px`, - }, - }, - MuiCard: { - root: { - // When cards have a forced size, such as when they are arranged in a - // CSS grid, the content needs to flex such that the actions (buttons - // etc) end up at the bottom of the card instead of just below the body - // contents. - display: 'flex', - flexDirection: 'column', - }, - }, - MuiCardHeader: { - root: { - // Reduce padding between header and content - paddingBottom: 0, - }, - }, - MuiCardContent: { - root: { - // When cards have a forced size, such as when they are arranged in a - // CSS grid, the content needs to flex such that the actions (buttons - // etc) end up at the bottom of the card instead of just below the body - // contents. - flexGrow: 1, - '&:last-child': { - paddingBottom: undefined, - }, - }, - }, - MuiCardActions: { - root: { - // We default to putting the card actions at the end - justifyContent: 'flex-end', - }, - }, - }; + return transformV5ComponentThemesToV4( + // Safe but we have to make sure we don't use mui5 specific stuff in the default component themes + theme as unknown as Mui5Theme, + defaultComponentThemes, + ).overrides; } /** diff --git a/packages/theme/src/v5/defaultComponentThemes.ts b/packages/theme/src/v5/defaultComponentThemes.ts index 3389018f18..288ba819bf 100644 --- a/packages/theme/src/v5/defaultComponentThemes.ts +++ b/packages/theme/src/v5/defaultComponentThemes.ts @@ -88,13 +88,13 @@ export const defaultComponentThemes: ThemeOptions['components'] = { sizeSmall: ({ theme }) => ({ padding: theme.spacing(1.5, 2, 1.5, 2.5), }), - head: { + head: ({ theme }) => ({ wordBreak: 'break-word', overflow: 'hidden', - color: 'rgb(179, 179, 179)', + color: theme.palette.textSubtle, fontWeight: 'normal', lineHeight: '1', - }, + }), }, }, MuiTabs: { From 689a2f6099c4f1d108b1d768483506f997c801f1 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 31 Dec 2022 15:27:29 +0100 Subject: [PATCH 171/213] theme: bring in mui 5 style deps Signed-off-by: Patrik Oldsberg --- packages/theme/package.json | 5 +- yarn.lock | 564 +++++++++++++++++++++++++++++++++++- 2 files changed, 560 insertions(+), 9 deletions(-) diff --git a/packages/theme/package.json b/packages/theme/package.json index 99d9929525..dd741581a4 100644 --- a/packages/theme/package.json +++ b/packages/theme/package.json @@ -32,8 +32,11 @@ "test": "backstage-cli package test" }, "dependencies": { + "@emotion/react": "^11.10.5", + "@emotion/styled": "^11.10.5", "@material-ui/core": "^4.12.2", - "@mui/material": "^5.11.2" + "@mui/material": "^5.11.2", + "@mui/styles": "^5.11.2" }, "peerDependencies": { "@types/react": "^16.13.1 || ^17.0.0", diff --git a/yarn.lock b/yarn.lock index 52a508235d..784c38bb73 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1,6 +1,3 @@ -# This file is generated by running "yarn install" inside your project. -# Manual changes might be lost - proceed with caution! - __metadata: version: 6 cacheKey: 8 @@ -2248,7 +2245,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-imports@npm:^7.0.0, @babel/helper-module-imports@npm:^7.12.13, @babel/helper-module-imports@npm:^7.16.0, @babel/helper-module-imports@npm:^7.18.6": +"@babel/helper-module-imports@npm:^7.0.0, @babel/helper-module-imports@npm:^7.12.13, @babel/helper-module-imports@npm:^7.16.0, @babel/helper-module-imports@npm:^7.16.7, @babel/helper-module-imports@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-module-imports@npm:7.18.6" dependencies: @@ -2730,7 +2727,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-jsx@npm:^7.0.0, @babel/plugin-syntax-jsx@npm:^7.18.6, @babel/plugin-syntax-jsx@npm:^7.7.2": +"@babel/plugin-syntax-jsx@npm:^7.0.0, @babel/plugin-syntax-jsx@npm:^7.17.12, @babel/plugin-syntax-jsx@npm:^7.18.6, @babel/plugin-syntax-jsx@npm:^7.7.2": version: 7.18.6 resolution: "@babel/plugin-syntax-jsx@npm:7.18.6" dependencies: @@ -3472,6 +3469,15 @@ __metadata: languageName: node linkType: hard +"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.14.6, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.18.6, @babel/runtime@npm:^7.18.9, @babel/runtime@npm:^7.20.1, @babel/runtime@npm:^7.20.6, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.4.4, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.0, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": + version: 7.20.7 + resolution: "@babel/runtime@npm:7.20.7" + dependencies: + regenerator-runtime: ^0.13.11 + checksum: 4629ce5c46f06cca9cfb9b7fc00d48003335a809888e2b91ec2069a2dcfbfef738480cff32ba81e0b7c290f8918e5c22ddcf2b710001464ee84ba62c7e32a3a3 + languageName: node + linkType: hard + "@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.14.6, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.18.6, @babel/runtime@npm:^7.2.0, @babel/runtime@npm:^7.20.1, @babel/runtime@npm:^7.20.13, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.4.4, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.0, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": version: 7.21.0 resolution: "@babel/runtime@npm:7.21.0" @@ -3481,6 +3487,15 @@ __metadata: languageName: node linkType: hard +"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.14.6, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.18.6, @babel/runtime@npm:^7.2.0, @babel/runtime@npm:^7.20.1, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.4.4, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.0, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": + version: 7.21.0 + resolution: "@babel/runtime@npm:7.21.0" + dependencies: + regenerator-runtime: ^0.13.11 + checksum: 7b33e25bfa9e0e1b9e8828bb61b2d32bdd46b41b07ba7cb43319ad08efc6fda8eb89445193e67d6541814627df0ca59122c0ea795e412b99c5183a0540d338ab + languageName: node + linkType: hard + "@babel/template@npm:^7.18.10, @babel/template@npm:^7.18.6, @babel/template@npm:^7.3.3": version: 7.18.10 resolution: "@babel/template@npm:7.18.10" @@ -9627,11 +9642,14 @@ __metadata: resolution: "@backstage/theme@workspace:packages/theme" dependencies: "@backstage/cli": "workspace:^" + "@emotion/react": ^11.10.5 + "@emotion/styled": ^11.10.5 "@material-ui/core": ^4.12.2 - "@types/react": ^16.13.1 || ^17.0.0 + "@mui/material": ^5.11.2 + "@mui/styles": ^5.11.2 peerDependencies: + "@types/react": ^16.13.1 || ^17.0.0 react: ^16.13.1 || ^17.0.0 - react-dom: ^16.13.1 || ^17.0.0 languageName: unknown linkType: soft @@ -10157,6 +10175,41 @@ __metadata: languageName: node linkType: hard +"@emotion/babel-plugin@npm:^11.10.5": + version: 11.10.5 + resolution: "@emotion/babel-plugin@npm:11.10.5" + dependencies: + "@babel/helper-module-imports": ^7.16.7 + "@babel/plugin-syntax-jsx": ^7.17.12 + "@babel/runtime": ^7.18.3 + "@emotion/hash": ^0.9.0 + "@emotion/memoize": ^0.8.0 + "@emotion/serialize": ^1.1.1 + babel-plugin-macros: ^3.1.0 + convert-source-map: ^1.5.0 + escape-string-regexp: ^4.0.0 + find-root: ^1.1.0 + source-map: ^0.5.7 + stylis: 4.1.3 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: e3353499c76c4422d6e900c0dfab73607056d9da86161a3f27c3459c193c4908050c5d252c68fcde231e13f02a9d8e0dc07d260317ae0e5206841e331cc4caae + languageName: node + linkType: hard + +"@emotion/cache@npm:^11.10.5": + version: 11.10.5 + resolution: "@emotion/cache@npm:11.10.5" + dependencies: + "@emotion/memoize": ^0.8.0 + "@emotion/sheet": ^1.2.1 + "@emotion/utils": ^1.2.0 + "@emotion/weak-memoize": ^0.3.0 + stylis: 4.1.3 + checksum: 1dd2d9af2d3ecbd3d4469ecdf91a335eef6034c851b57a474471b2d2280613eb35bbed98c0368cc4625f188619fbdaf04cf07e8107aaffce94b2178444c0fe7b + languageName: node + linkType: hard + "@emotion/hash@npm:^0.8.0": version: 0.8.0 resolution: "@emotion/hash@npm:0.8.0" @@ -10164,6 +10217,13 @@ __metadata: languageName: node linkType: hard +"@emotion/hash@npm:^0.9.0": + version: 0.9.0 + resolution: "@emotion/hash@npm:0.9.0" + checksum: b63428f7c8186607acdca5d003700cecf0ded519d0b5c5cc3b3154eafcad6ff433f8361bd2bac8882715b557e6f06945694aeb6ba8b25c6095d7a88570e2e0bb + languageName: node + linkType: hard + "@emotion/is-prop-valid@npm:^1.1.0": version: 1.1.2 resolution: "@emotion/is-prop-valid@npm:1.1.2" @@ -10173,6 +10233,15 @@ __metadata: languageName: node linkType: hard +"@emotion/is-prop-valid@npm:^1.2.0": + version: 1.2.0 + resolution: "@emotion/is-prop-valid@npm:1.2.0" + dependencies: + "@emotion/memoize": ^0.8.0 + checksum: cc7a19850a4c5b24f1514665289442c8c641709e6f7711067ad550e05df331da0692a16148e85eda6f47e31b3261b64d74c5e25194d053223be16231f969d633 + languageName: node + linkType: hard + "@emotion/memoize@npm:^0.7.4": version: 0.7.5 resolution: "@emotion/memoize@npm:0.7.5" @@ -10180,6 +10249,80 @@ __metadata: languageName: node linkType: hard +"@emotion/memoize@npm:^0.8.0": + version: 0.8.0 + resolution: "@emotion/memoize@npm:0.8.0" + checksum: c87bb110b829edd8e1c13b90a6bc37cebc39af29c7599a1e66a48e06f9bec43e8e53495ba86278cc52e7589549492c8dfdc81d19f4fdec0cee6ba13d2ad2c928 + languageName: node + linkType: hard + +"@emotion/react@npm:^11.10.5": + version: 11.10.5 + resolution: "@emotion/react@npm:11.10.5" + dependencies: + "@babel/runtime": ^7.18.3 + "@emotion/babel-plugin": ^11.10.5 + "@emotion/cache": ^11.10.5 + "@emotion/serialize": ^1.1.1 + "@emotion/use-insertion-effect-with-fallbacks": ^1.0.0 + "@emotion/utils": ^1.2.0 + "@emotion/weak-memoize": ^0.3.0 + hoist-non-react-statics: ^3.3.1 + peerDependencies: + "@babel/core": ^7.0.0 + react: ">=16.8.0" + peerDependenciesMeta: + "@babel/core": + optional: true + "@types/react": + optional: true + checksum: 32b67b28e9b6d6c53b970072680697f04c2521441050bdeb19a1a7f0164af549b4dad39ff375eda1b6a3cf1cc86ba2c6fa55460ec040e6ebbca3e9ec58353cf7 + languageName: node + linkType: hard + +"@emotion/serialize@npm:^1.1.1": + version: 1.1.1 + resolution: "@emotion/serialize@npm:1.1.1" + dependencies: + "@emotion/hash": ^0.9.0 + "@emotion/memoize": ^0.8.0 + "@emotion/unitless": ^0.8.0 + "@emotion/utils": ^1.2.0 + csstype: ^3.0.2 + checksum: 24cfd5b16e6f2335c032ca33804a876e0442aaf8f9c94d269d23735ebd194fb1ed142542dd92191a3e6ef8bad5bd560dfc5aaf363a1b70954726dbd4dd93085c + languageName: node + linkType: hard + +"@emotion/sheet@npm:^1.2.1": + version: 1.2.1 + resolution: "@emotion/sheet@npm:1.2.1" + checksum: ce78763588ea522438156344d9f592203e2da582d8d67b32e1b0b98eaba26994c6c270f8c7ad46442fc9c0a9f048685d819cd73ca87e544520fd06f0e24a1562 + languageName: node + linkType: hard + +"@emotion/styled@npm:^11.10.5": + version: 11.10.5 + resolution: "@emotion/styled@npm:11.10.5" + dependencies: + "@babel/runtime": ^7.18.3 + "@emotion/babel-plugin": ^11.10.5 + "@emotion/is-prop-valid": ^1.2.0 + "@emotion/serialize": ^1.1.1 + "@emotion/use-insertion-effect-with-fallbacks": ^1.0.0 + "@emotion/utils": ^1.2.0 + peerDependencies: + "@babel/core": ^7.0.0 + "@emotion/react": ^11.0.0-rc.0 + react: ">=16.8.0" + peerDependenciesMeta: + "@babel/core": + optional: true + "@types/react": + optional: true + checksum: 1cec5f6aeb227a7255141031e8594f38ad83902413472aae0a46c27e5f9769c01e23c1ad39adee408d8a2168a697464314d1a0c4f50b31a5d25ea506b2d7bbc8 + languageName: node + linkType: hard + "@emotion/stylis@npm:^0.8.4": version: 0.8.5 resolution: "@emotion/stylis@npm:0.8.5" @@ -10194,6 +10337,36 @@ __metadata: languageName: node linkType: hard +"@emotion/unitless@npm:^0.8.0": + version: 0.8.0 + resolution: "@emotion/unitless@npm:0.8.0" + checksum: 176141117ed23c0eb6e53a054a69c63e17ae532ec4210907a20b2208f91771821835f1c63dd2ec63e30e22fcc984026d7f933773ee6526dd038e0850919fae7a + languageName: node + linkType: hard + +"@emotion/use-insertion-effect-with-fallbacks@npm:^1.0.0": + version: 1.0.0 + resolution: "@emotion/use-insertion-effect-with-fallbacks@npm:1.0.0" + peerDependencies: + react: ">=16.8.0" + checksum: 4f06a3b48258c832aa8022a262572061a31ff078d377e9164cccc99951309d70f4466e774fe704461b2f8715007a82ed625a54a5c7a127c89017d3ce3187d4f1 + languageName: node + linkType: hard + +"@emotion/utils@npm:^1.2.0": + version: 1.2.0 + resolution: "@emotion/utils@npm:1.2.0" + checksum: 55457a49ddd4db6a014ea0454dc09eaa23eedfb837095c8ff90470cb26a303f7ceb5fcc1e2190ef64683e64cfd33d3ba3ca3109cd87d12bc9e379e4195c9a4dd + languageName: node + linkType: hard + +"@emotion/weak-memoize@npm:^0.3.0": + version: 0.3.0 + resolution: "@emotion/weak-memoize@npm:0.3.0" + checksum: f43ef4c8b7de70d9fa5eb3105921724651e4188e895beb71f0c5919dc899a7b8743e1fdd99d38b9092dd5722c7be2312ebb47fbdad0c4e38bea58f6df5885cc0 + languageName: node + linkType: hard + "@esbuild-kit/cjs-loader@npm:^2.4.1": version: 2.4.2 resolution: "@esbuild-kit/cjs-loader@npm:2.4.2" @@ -10214,6 +10387,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-arm64@npm:0.16.14": + version: 0.16.14 + resolution: "@esbuild/android-arm64@npm:0.16.14" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/android-arm64@npm:0.16.17": version: 0.16.17 resolution: "@esbuild/android-arm64@npm:0.16.17" @@ -12734,6 +12914,193 @@ __metadata: languageName: node linkType: hard +"@mui/base@npm:5.0.0-alpha.112": + version: 5.0.0-alpha.112 + resolution: "@mui/base@npm:5.0.0-alpha.112" + dependencies: + "@babel/runtime": ^7.20.7 + "@emotion/is-prop-valid": ^1.2.0 + "@mui/types": ^7.2.3 + "@mui/utils": ^5.11.2 + "@popperjs/core": ^2.11.6 + clsx: ^1.2.1 + prop-types: ^15.8.1 + react-is: ^18.2.0 + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: fd19240ac16859d62f057fd80261fc4e0dbc960a648b601bd7beaeb44b88c059f654b0989f33cea655ad61106832bffa0cd8446730c1be7671b6cde383dbce80 + languageName: node + linkType: hard + +"@mui/core-downloads-tracker@npm:^5.11.2": + version: 5.11.2 + resolution: "@mui/core-downloads-tracker@npm:5.11.2" + checksum: 1f2c45ef37b13829fa2331811548cdd3f3cb94e384513db8820533570c8ef4569e5f835f8757a48d783553f44af3f4ed2f93d402891e27718fcc58e16129a874 + languageName: node + linkType: hard + +"@mui/material@npm:^5.11.2": + version: 5.11.2 + resolution: "@mui/material@npm:5.11.2" + dependencies: + "@babel/runtime": ^7.20.7 + "@mui/base": 5.0.0-alpha.112 + "@mui/core-downloads-tracker": ^5.11.2 + "@mui/system": ^5.11.2 + "@mui/types": ^7.2.3 + "@mui/utils": ^5.11.2 + "@types/react-transition-group": ^4.4.5 + clsx: ^1.2.1 + csstype: ^3.1.1 + prop-types: ^15.8.1 + react-is: ^18.2.0 + react-transition-group: ^4.4.5 + peerDependencies: + "@emotion/react": ^11.5.0 + "@emotion/styled": ^11.3.0 + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@emotion/react": + optional: true + "@emotion/styled": + optional: true + "@types/react": + optional: true + checksum: 4f2baa4b4d8f7842b081e9e919172020f7055e33c24af36c5a458eac1a76ff3e896651fdf21daa523a68ac0bfb3670864c1b4dec9fae6d8fadf2b602f14f95ea + languageName: node + linkType: hard + +"@mui/private-theming@npm:^5.11.2": + version: 5.11.2 + resolution: "@mui/private-theming@npm:5.11.2" + dependencies: + "@babel/runtime": ^7.20.7 + "@mui/utils": ^5.11.2 + prop-types: ^15.8.1 + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 4a36ca48a7a8187d46c3e0d21ec08f7cb732bd4a5bac91c959337c8b0af031beb3a6c5ceac979b685c2e0e66321273d55dd54648f925bfdb946d6513fc6150e6 + languageName: node + linkType: hard + +"@mui/styled-engine@npm:^5.11.0": + version: 5.11.0 + resolution: "@mui/styled-engine@npm:5.11.0" + dependencies: + "@babel/runtime": ^7.20.6 + "@emotion/cache": ^11.10.5 + csstype: ^3.1.1 + prop-types: ^15.8.1 + peerDependencies: + "@emotion/react": ^11.4.1 + "@emotion/styled": ^11.3.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@emotion/react": + optional: true + "@emotion/styled": + optional: true + checksum: ddc486bc5e0e8e7b683e4c3bffecd11c2ce1e6c67a485354c5fc5a6fe04ed5ce76db737609a2ae04779e9d5f57c7936174d458a3795eab62291c2d7681184062 + languageName: node + linkType: hard + +"@mui/styles@npm:^5.11.2": + version: 5.11.2 + resolution: "@mui/styles@npm:5.11.2" + dependencies: + "@babel/runtime": ^7.20.7 + "@emotion/hash": ^0.9.0 + "@mui/private-theming": ^5.11.2 + "@mui/types": ^7.2.3 + "@mui/utils": ^5.11.2 + clsx: ^1.2.1 + csstype: ^3.1.1 + hoist-non-react-statics: ^3.3.2 + jss: ^10.9.2 + jss-plugin-camel-case: ^10.9.2 + jss-plugin-default-unit: ^10.9.2 + jss-plugin-global: ^10.9.2 + jss-plugin-nested: ^10.9.2 + jss-plugin-props-sort: ^10.9.2 + jss-plugin-rule-value-function: ^10.9.2 + jss-plugin-vendor-prefixer: ^10.9.2 + prop-types: ^15.8.1 + peerDependencies: + "@types/react": ^17.0.0 + react: ^17.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: d565e53acd6f49679446dbb9d85ab055d6c16225afd429ac9a738fba3cddfc394f88530cebfe1b3640ca89f58e7db73bb47d09e9bb05c80e47a5018418802378 + languageName: node + linkType: hard + +"@mui/system@npm:^5.11.2": + version: 5.11.2 + resolution: "@mui/system@npm:5.11.2" + dependencies: + "@babel/runtime": ^7.20.7 + "@mui/private-theming": ^5.11.2 + "@mui/styled-engine": ^5.11.0 + "@mui/types": ^7.2.3 + "@mui/utils": ^5.11.2 + clsx: ^1.2.1 + csstype: ^3.1.1 + prop-types: ^15.8.1 + peerDependencies: + "@emotion/react": ^11.5.0 + "@emotion/styled": ^11.3.0 + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@emotion/react": + optional: true + "@emotion/styled": + optional: true + "@types/react": + optional: true + checksum: d6b136464ec48cbc270f0cb91eb83f10f6b6801c143cc320ef5c6ec71655f9b3ceda98ab38fde537d1c0a7669defcb9af6f4940c78101603f8b6800854d0133d + languageName: node + linkType: hard + +"@mui/types@npm:^7.2.3": + version: 7.2.3 + resolution: "@mui/types@npm:7.2.3" + peerDependencies: + "@types/react": "*" + peerDependenciesMeta: + "@types/react": + optional: true + checksum: b8511cb78f8df25c8978317ad3fd585c782116b657f2d32233352c09d415c77040e532f41bbe96de6ad46be87138767d3129a9f0de3561900a9a64db7693bce4 + languageName: node + linkType: hard + +"@mui/utils@npm:^5.11.2": + version: 5.11.2 + resolution: "@mui/utils@npm:5.11.2" + dependencies: + "@babel/runtime": ^7.20.7 + "@types/prop-types": ^15.7.5 + "@types/react-is": ^16.7.1 || ^17.0.0 + prop-types: ^15.8.1 + react-is: ^18.2.0 + peerDependencies: + react: ^17.0.0 || ^18.0.0 + checksum: 69091d9120681dee29fc20220b7db5dd61334194c139df735d932f072dab00eeae6e440058ffbccebbe93d4a3a998c23b6f4df570cb66cdacd023fce9f0f5912 + languageName: node + linkType: hard + "@n1ru4l/push-pull-async-iterable-iterator@npm:^3.1.0": version: 3.1.0 resolution: "@n1ru4l/push-pull-async-iterable-iterator@npm:3.1.0" @@ -13645,6 +14012,13 @@ __metadata: languageName: node linkType: hard +"@popperjs/core@npm:^2.11.6": + version: 2.11.6 + resolution: "@popperjs/core@npm:2.11.6" + checksum: 47fb328cec1924559d759b48235c78574f2d71a8a6c4c03edb6de5d7074078371633b91e39bbf3f901b32aa8af9b9d8f82834856d2f5737a23475036b16817f0 + languageName: node + linkType: hard + "@protobufjs/aspromise@npm:^1.1.1, @protobufjs/aspromise@npm:^1.1.2": version: 1.1.2 resolution: "@protobufjs/aspromise@npm:1.1.2" @@ -16489,7 +16863,7 @@ __metadata: languageName: node linkType: hard -"@types/prop-types@npm:*, @types/prop-types@npm:^15.0.0, @types/prop-types@npm:^15.7.3": +"@types/prop-types@npm:*, @types/prop-types@npm:^15.0.0, @types/prop-types@npm:^15.7.3, @types/prop-types@npm:^15.7.5": version: 15.7.5 resolution: "@types/prop-types@npm:15.7.5" checksum: 5b43b8b15415e1f298243165f1d44390403bb2bd42e662bca3b5b5633fdd39c938e91b7fce3a9483699db0f7a715d08cef220c121f723a634972fdf596aec980 @@ -16555,6 +16929,15 @@ __metadata: languageName: node linkType: hard +"@types/react-is@npm:^16.7.1 || ^17.0.0": + version: 17.0.3 + resolution: "@types/react-is@npm:17.0.3" + dependencies: + "@types/react": "*" + checksum: 6abb7c47d54f012272650df8a962a28bd82f219291e5ef8b4dfa7fe0bb98ae243b060bf9fbe8ceff6213141794855a006db194b490b00ffd15842ae19d0ce1f0 + languageName: node + linkType: hard + "@types/react-redux@npm:^7.1.16": version: 7.1.19 resolution: "@types/react-redux@npm:7.1.19" @@ -16612,6 +16995,15 @@ __metadata: languageName: node linkType: hard +"@types/react-transition-group@npm:^4.4.5": + version: 4.4.5 + resolution: "@types/react-transition-group@npm:4.4.5" + dependencies: + "@types/react": "*" + checksum: 265f1c74061556708ffe8d15559e35c60d6c11478c9950d3735575d2c116ca69f461d85effa06d73a613eb8b73c84fd32682feb57cf7c5f9e4284021dbca25b0 + languageName: node + linkType: hard + "@types/react-virtualized-auto-sizer@npm:^1.0.1": version: 1.0.1 resolution: "@types/react-virtualized-auto-sizer@npm:1.0.1" @@ -18665,6 +19057,17 @@ __metadata: languageName: node linkType: hard +"babel-plugin-macros@npm:^3.1.0": + version: 3.1.0 + resolution: "babel-plugin-macros@npm:3.1.0" + dependencies: + "@babel/runtime": ^7.12.5 + cosmiconfig: ^7.0.0 + resolve: ^1.19.0 + checksum: 765de4abebd3e4688ebdfbff8571ddc8cd8061f839bb6c3e550b0344a4027b04c60491f843296ce3f3379fb356cc873d57a9ee6694262547eb822c14a25be9a6 + languageName: node + linkType: hard + "babel-plugin-polyfill-corejs2@npm:^0.3.1": version: 0.3.1 resolution: "babel-plugin-polyfill-corejs2@npm:0.3.1" @@ -20127,6 +20530,13 @@ __metadata: languageName: node linkType: hard +"clsx@npm:^1.2.1": + version: 1.2.1 + resolution: "clsx@npm:1.2.1" + checksum: 30befca8019b2eb7dbad38cff6266cf543091dae2825c856a62a8ccf2c3ab9c2907c4d12b288b73101196767f66812365400a227581484a05f968b0307cfaf12 + languageName: node + linkType: hard + "cluster-key-slot@npm:^1.1.0": version: 1.1.0 resolution: "cluster-key-slot@npm:1.1.0" @@ -20703,6 +21113,13 @@ __metadata: languageName: node linkType: hard +"convert-source-map@npm:^1.5.0": + version: 1.9.0 + resolution: "convert-source-map@npm:1.9.0" + checksum: dc55a1f28ddd0e9485ef13565f8f756b342f9a46c4ae18b843fe3c30c675d058d6a4823eff86d472f187b176f0adf51ea7b69ea38be34be4a63cbbf91b0593c8 + languageName: node + linkType: hard + "convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0": version: 1.7.0 resolution: "convert-source-map@npm:1.7.0" @@ -21335,6 +21752,13 @@ __metadata: languageName: node linkType: hard +"csstype@npm:^3.1.1": + version: 3.1.1 + resolution: "csstype@npm:3.1.1" + checksum: 1f7b4f5fdd955b7444b18ebdddf3f5c699159f13e9cf8ac9027ae4a60ae226aef9bbb14a6e12ca7dba3358b007cee6354b116e720262867c398de6c955ea451d + languageName: node + linkType: hard + "csv-generate@npm:^3.4.3": version: 3.4.3 resolution: "csv-generate@npm:3.4.3" @@ -25972,6 +26396,15 @@ __metadata: languageName: node linkType: hard +"hoist-non-react-statics@npm:^3.0.0, hoist-non-react-statics@npm:^3.3.0, hoist-non-react-statics@npm:^3.3.1, hoist-non-react-statics@npm:^3.3.2": + version: 3.3.2 + resolution: "hoist-non-react-statics@npm:3.3.2" + dependencies: + react-is: ^16.7.0 + checksum: b1538270429b13901ee586aa44f4cc3ecd8831c061d06cb8322e50ea17b3f5ce4d0e2e66394761e6c8e152cd8c34fb3b4b690116c6ce2bd45b18c746516cb9e8 + languageName: node + linkType: hard + "hoopy@npm:^0.1.4": version: 0.1.4 resolution: "hoopy@npm:0.1.4" @@ -28854,6 +29287,17 @@ __metadata: languageName: node linkType: hard +"jss-plugin-camel-case@npm:^10.9.2": + version: 10.9.2 + resolution: "jss-plugin-camel-case@npm:10.9.2" + dependencies: + "@babel/runtime": ^7.3.1 + hyphenate-style-name: ^1.0.3 + jss: 10.9.2 + checksum: 5fa617b23ce9718244691c59ace6a0d1271dbcb4430ce3e13b851ee1879c1db8ecab7e941c33802bea763a0f0e2b609d004b8a975b2063f213cdd639cdd384d2 + languageName: node + linkType: hard + "jss-plugin-default-unit@npm:^10.5.1": version: 10.6.0 resolution: "jss-plugin-default-unit@npm:10.6.0" @@ -28864,6 +29308,16 @@ __metadata: languageName: node linkType: hard +"jss-plugin-default-unit@npm:^10.9.2": + version: 10.9.2 + resolution: "jss-plugin-default-unit@npm:10.9.2" + dependencies: + "@babel/runtime": ^7.3.1 + jss: 10.9.2 + checksum: 48d8d836d36dd15513d98de11fba6be373ac29e6fd5702eb2edd143c815fb9e2f9969b2af6b1b964e9b8a052828690887042f6bcb34836836d5c359e52702d0f + languageName: node + linkType: hard + "jss-plugin-global@npm:^10.5.1": version: 10.6.0 resolution: "jss-plugin-global@npm:10.6.0" @@ -28874,6 +29328,16 @@ __metadata: languageName: node linkType: hard +"jss-plugin-global@npm:^10.9.2": + version: 10.9.2 + resolution: "jss-plugin-global@npm:10.9.2" + dependencies: + "@babel/runtime": ^7.3.1 + jss: 10.9.2 + checksum: 9b29b0c1f169d5a1033890875df072d76364a902d0f6470f448544669a388612a9a4d51844fb2bcb6d25a1c43d67c1637f11a162c2cdd9f4b6b0a8f9c94f6090 + languageName: node + linkType: hard + "jss-plugin-nested@npm:^10.5.1": version: 10.6.0 resolution: "jss-plugin-nested@npm:10.6.0" @@ -28885,6 +29349,17 @@ __metadata: languageName: node linkType: hard +"jss-plugin-nested@npm:^10.9.2": + version: 10.9.2 + resolution: "jss-plugin-nested@npm:10.9.2" + dependencies: + "@babel/runtime": ^7.3.1 + jss: 10.9.2 + tiny-warning: ^1.0.2 + checksum: ee08df07f3d553931b48037674842a8314bbc7857cc954a52f962a516bfc4b2d4e9871578b06b8fa3981edf5a927cea00021fd368d4ce315870065b7647f7b57 + languageName: node + linkType: hard + "jss-plugin-props-sort@npm:^10.5.1": version: 10.6.0 resolution: "jss-plugin-props-sort@npm:10.6.0" @@ -28895,6 +29370,16 @@ __metadata: languageName: node linkType: hard +"jss-plugin-props-sort@npm:^10.9.2": + version: 10.9.2 + resolution: "jss-plugin-props-sort@npm:10.9.2" + dependencies: + "@babel/runtime": ^7.3.1 + jss: 10.9.2 + checksum: 70bd181a458a6078f19ad4d7350570c78d26b9aabc25a1fbde673839edcc19825af7b636861b208a38aa17e551e68d0ea38599480716b4aec08e353bbe737222 + languageName: node + linkType: hard + "jss-plugin-rule-value-function@npm:^10.5.1": version: 10.6.0 resolution: "jss-plugin-rule-value-function@npm:10.6.0" @@ -28906,6 +29391,17 @@ __metadata: languageName: node linkType: hard +"jss-plugin-rule-value-function@npm:^10.9.2": + version: 10.9.2 + resolution: "jss-plugin-rule-value-function@npm:10.9.2" + dependencies: + "@babel/runtime": ^7.3.1 + jss: 10.9.2 + tiny-warning: ^1.0.2 + checksum: b1a03209d0249f13ea6de766d3ee14c1769cd1f67d8c543c7d1ce6178c32cf15507c021ecb3e3b7585a8a7a2425dddbe0bdae02f4135c4598725a4152bebfc99 + languageName: node + linkType: hard + "jss-plugin-vendor-prefixer@npm:^10.5.1": version: 10.6.0 resolution: "jss-plugin-vendor-prefixer@npm:10.6.0" @@ -28917,6 +29413,17 @@ __metadata: languageName: node linkType: hard +"jss-plugin-vendor-prefixer@npm:^10.9.2": + version: 10.9.2 + resolution: "jss-plugin-vendor-prefixer@npm:10.9.2" + dependencies: + "@babel/runtime": ^7.3.1 + css-vendor: ^2.0.8 + jss: 10.9.2 + checksum: a5c352a500fea82e8a782a090cc9815f6331259f1a331158ed74ed77c750fb45750f5ae95f07d27922742830b45d4c3592cfaab194b3ba4a50591acbdeab04d8 + languageName: node + linkType: hard + "jss-props-sort@npm:^6.0.0": version: 6.0.0 resolution: "jss-props-sort@npm:6.0.0" @@ -28950,6 +29457,18 @@ __metadata: languageName: node linkType: hard +"jss@npm:10.9.2, jss@npm:^10.5.1, jss@npm:^10.9.2, jss@npm:~10.9.0": + version: 10.9.2 + resolution: "jss@npm:10.9.2" + dependencies: + "@babel/runtime": ^7.3.1 + csstype: ^3.0.2 + is-in-browser: ^1.1.3 + tiny-warning: ^1.0.2 + checksum: ecf71971df42729668c283e432e841349b7fdbe52e520f7704991cf4a738fd2451ec0feeb25c12cdc5addf7facecf838e74e62936fd461fb4c99f23d54a4792d + languageName: node + linkType: hard + "jss@npm:^10.5.1, jss@npm:~10.10.0": version: 10.10.0 resolution: "jss@npm:10.10.0" @@ -35239,6 +35758,21 @@ __metadata: languageName: node linkType: hard +"react-transition-group@npm:^4.4.5": + version: 4.4.5 + resolution: "react-transition-group@npm:4.4.5" + dependencies: + "@babel/runtime": ^7.5.5 + dom-helpers: ^5.0.1 + loose-envify: ^1.4.0 + prop-types: ^15.6.2 + peerDependencies: + react: ">=16.6.0" + react-dom: ">=16.6.0" + checksum: 75602840106aa9c6545149d6d7ae1502fb7b7abadcce70a6954c4b64a438ff1cd16fc77a0a1e5197cdd72da398f39eb929ea06f9005c45b132ed34e056ebdeb1 + languageName: node + linkType: hard + "react-universal-interface@npm:^0.6.2": version: 0.6.2 resolution: "react-universal-interface@npm:0.6.2" @@ -37229,6 +37763,13 @@ __metadata: languageName: node linkType: hard +"source-map@npm:^0.5.7": + version: 0.5.7 + resolution: "source-map@npm:0.5.7" + checksum: 5dc2043b93d2f194142c7f38f74a24670cd7a0063acdaf4bf01d2964b402257ae843c2a8fa822ad5b71013b5fcafa55af7421383da919752f22ff488bc553f4d + languageName: node + linkType: hard + "source-map@npm:^0.6.0, source-map@npm:^0.6.1, source-map@npm:~0.6.0, source-map@npm:~0.6.1": version: 0.6.1 resolution: "source-map@npm:0.6.1" @@ -38030,6 +38571,13 @@ __metadata: languageName: node linkType: hard +"stylis@npm:4.1.3": + version: 4.1.3 + resolution: "stylis@npm:4.1.3" + checksum: d04dbffcb9bf2c5ca8d8dc09534203c75df3bf711d33973ea22038a99cc475412a350b661ebd99cbc01daa50d7eedcf0d130d121800eb7318759a197023442a6 + languageName: node + linkType: hard + "stylis@npm:^4.0.6": version: 4.0.7 resolution: "stylis@npm:4.0.7" From 7044183030ca8b630b837ecdad3bdc35b0ff2487 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 31 Dec 2022 16:13:39 +0100 Subject: [PATCH 172/213] theme: update API report + fixes Signed-off-by: Patrik Oldsberg --- packages/theme/api-report.md | 96 ++++++++++++++++++- .../theme/src/base/createBaseThemeOptions.ts | 5 + packages/theme/src/base/index.ts | 1 + .../theme/src/compat/UnifiedThemeProvider.tsx | 14 ++- packages/theme/src/compat/index.ts | 1 + packages/theme/src/v5/types.ts | 20 +++- 6 files changed, 130 insertions(+), 7 deletions(-) diff --git a/packages/theme/api-report.md b/packages/theme/api-report.md index c61245e0e2..131fa185ed 100644 --- a/packages/theme/api-report.md +++ b/packages/theme/api-report.md @@ -6,8 +6,12 @@ import { Overrides } from '@material-ui/core/styles/overrides'; import { Palette } from '@material-ui/core/styles/createPalette'; import { PaletteOptions } from '@material-ui/core/styles/createPalette'; +import { PaletteOptions as PaletteOptions_2 } from '@mui/material/styles'; +import { default as React_2 } from 'react'; +import { ReactNode } from 'react'; import { Theme } from '@material-ui/core'; import { ThemeOptions } from '@material-ui/core'; +import { ThemeOptions as ThemeOptions_2 } from '@mui/material/styles'; // @public @deprecated export type BackstagePalette = Palette & BackstagePaletteAdditions; @@ -99,9 +103,66 @@ export interface BackstageThemeOptions extends ThemeOptions { palette: BackstagePaletteOptions; } +// @public +export interface BaseThemeOptionsInput { + // (undocumented) + defaultPageTheme?: string; + // (undocumented) + fontFamily?: string; + // (undocumented) + htmlFontSize?: number; + // (undocumented) + pageTheme?: Record; + // (undocumented) + palette: PaletteOptions; +} + // @public export const colorVariants: Record; +// @public +export function createBaseThemeOptions( + options: BaseThemeOptionsInput, +): { + palette: PaletteOptions; + typography: { + htmlFontSize: number; + fontFamily: string; + h1: { + fontSize: number; + fontWeight: number; + marginBottom: number; + }; + h2: { + fontSize: number; + fontWeight: number; + marginBottom: number; + }; + h3: { + fontSize: number; + fontWeight: number; + marginBottom: number; + }; + h4: { + fontWeight: number; + fontSize: number; + marginBottom: number; + }; + h5: { + fontWeight: number; + fontSize: number; + marginBottom: number; + }; + h6: { + fontWeight: number; + fontSize: number; + marginBottom: number; + }; + }; + page: PageTheme; + getPageTheme: ({ themeId }: PageThemeSelector) => PageTheme; +}; + // @public @deprecated (undocumented) export const createTheme: typeof createV4Theme; @@ -125,6 +186,9 @@ export function createV4ThemeOverrides(theme: Theme): Overrides; // @public export const darkTheme: Theme; +// @public +export const defaultComponentThemes: ThemeOptions_2['components']; + // @public export function genPageTheme(props: { colors: string[]; @@ -162,9 +226,39 @@ export type SimpleThemeOptions = SimpleV4ThemeOptions; // @public export type SimpleV4ThemeOptions = { palette: PaletteOptions; - defaultPageTheme: string; + defaultPageTheme?: string; pageTheme?: Record; fontFamily?: string; htmlFontSize?: number; }; + +// @public +export type SimpleV5ThemeOptions = { + palette: PaletteOptions_2; + defaultPageTheme?: string; + pageTheme?: Record; + fontFamily?: string; + htmlFontSize?: number; +}; + +// @public +export interface UnifiedTheme { + // (undocumented) + getTheme(version: string): unknown | undefined; +} + +// @public +export function UnifiedThemeProvider( + props: UnifiedThemeProviderProps, +): React_2.ReactNode; + +// @public +export interface UnifiedThemeProviderProps { + // (undocumented) + children: ReactNode; + // (undocumented) + noCssBaseline?: boolean; + // (undocumented) + theme: UnifiedTheme; +} ``` diff --git a/packages/theme/src/base/createBaseThemeOptions.ts b/packages/theme/src/base/createBaseThemeOptions.ts index 15903462e7..e54e920deb 100644 --- a/packages/theme/src/base/createBaseThemeOptions.ts +++ b/packages/theme/src/base/createBaseThemeOptions.ts @@ -22,6 +22,11 @@ const DEFAULT_FONT_FAMILY = '"Helvetica Neue", Helvetica, Roboto, Arial, sans-serif'; const DEFAULT_PAGE_THEME = 'home'; +/** + * Options for {@link createBaseThemeOptions}. + * + * @public + */ export interface BaseThemeOptionsInput { palette: PaletteOptions; defaultPageTheme?: string; diff --git a/packages/theme/src/base/index.ts b/packages/theme/src/base/index.ts index 9440bcfd59..891d0bd275 100644 --- a/packages/theme/src/base/index.ts +++ b/packages/theme/src/base/index.ts @@ -15,6 +15,7 @@ */ export { createBaseThemeOptions } from './createBaseThemeOptions'; +export type { BaseThemeOptionsInput } from './createBaseThemeOptions'; export { colorVariants, genPageTheme, pageTheme, shapes } from './pageTheme'; export type { BackstagePaletteAdditions, diff --git a/packages/theme/src/compat/UnifiedThemeProvider.tsx b/packages/theme/src/compat/UnifiedThemeProvider.tsx index 19fd13eb08..72fb708c23 100644 --- a/packages/theme/src/compat/UnifiedThemeProvider.tsx +++ b/packages/theme/src/compat/UnifiedThemeProvider.tsx @@ -26,13 +26,23 @@ import { import CssBaseline from '@mui/material/CssBaseline'; import { UnifiedTheme } from './types'; -interface ThemeProviderProps { +/** + * Props for {@link UnifiedThemeProvider}. + * + * @public + */ +export interface UnifiedThemeProviderProps { children: ReactNode; theme: UnifiedTheme; noCssBaseline?: boolean; } -export function UnifiedThemeProvider(props: ThemeProviderProps) { +/** + * Provides themes for all MUI versions supported by the provided unified theme. + * + * @public + */ +export function UnifiedThemeProvider(props: UnifiedThemeProviderProps) { const { children, theme, noCssBaseline } = props; let result = noCssBaseline ? ( diff --git a/packages/theme/src/compat/index.ts b/packages/theme/src/compat/index.ts index 836c8e6563..5dc9e1e3ea 100644 --- a/packages/theme/src/compat/index.ts +++ b/packages/theme/src/compat/index.ts @@ -15,4 +15,5 @@ */ export { UnifiedThemeProvider } from './UnifiedThemeProvider'; +export type { UnifiedThemeProviderProps } from './UnifiedThemeProvider'; export type { UnifiedTheme } from './types'; diff --git a/packages/theme/src/v5/types.ts b/packages/theme/src/v5/types.ts index 8fce16be05..4f8bfe6634 100644 --- a/packages/theme/src/v5/types.ts +++ b/packages/theme/src/v5/types.ts @@ -51,12 +51,24 @@ declare module '@mui/material/styles/createTheme' { // See https://github.com/mui/material-ui/issues/35287 declare global { namespace React { - type React = typeof import('react'); + interface DOMAttributes { + // onResize?: ReactEventHandler | undefined; + // onResizeCapture?: ReactEventHandler | undefined; - interface DOMAttributes { - onResize?: React.EventHandler | undefined; - onResizeCapture?: React.EventHandler | undefined; + onResize?: (event: Event) => void; + onResizeCapture?: (event: Event) => void; nonce?: string | undefined; } } } +// declare global { +// namespace React { +// type React = typeof import('react'); + +// interface DOMAttributes { +// onResize?: React.EventHandler | undefined; +// onResizeCapture?: React.EventHandler | undefined; +// nonce?: string | undefined; +// } +// } +// } From 563b9ef5cb6b85786eefc9c1df99507f3c93cb91 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 31 Dec 2022 16:24:31 +0100 Subject: [PATCH 173/213] theme: extract out base palettes Signed-off-by: Patrik Oldsberg --- packages/theme/src/base/index.ts | 1 + packages/theme/src/base/palettes.ts | 165 ++++++++++++++++++++++++++++ packages/theme/src/v4/themes.ts | 149 +------------------------ 3 files changed, 169 insertions(+), 146 deletions(-) create mode 100644 packages/theme/src/base/palettes.ts diff --git a/packages/theme/src/base/index.ts b/packages/theme/src/base/index.ts index 891d0bd275..45b8326f2e 100644 --- a/packages/theme/src/base/index.ts +++ b/packages/theme/src/base/index.ts @@ -17,6 +17,7 @@ export { createBaseThemeOptions } from './createBaseThemeOptions'; export type { BaseThemeOptionsInput } from './createBaseThemeOptions'; export { colorVariants, genPageTheme, pageTheme, shapes } from './pageTheme'; +export { palettes } from './palettes'; export type { BackstagePaletteAdditions, PageTheme, diff --git a/packages/theme/src/base/palettes.ts b/packages/theme/src/base/palettes.ts new file mode 100644 index 0000000000..f049237f60 --- /dev/null +++ b/packages/theme/src/base/palettes.ts @@ -0,0 +1,165 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Built-in Backstage color palettes. + * + * @public + */ +export const palettes = { + light: { + type: 'light' as const, + mode: 'light' as const, + background: { + default: '#F8F8F8', + }, + status: { + ok: '#1DB954', + warning: '#FF9800', + error: '#E22134', + running: '#1F5493', + pending: '#FFED51', + aborted: '#757575', + }, + bursts: { + fontColor: '#FEFEFE', + slackChannelText: '#ddd', + backgroundColor: { + default: '#7C3699', + }, + gradient: { + linear: 'linear-gradient(-137deg, #4BB8A5 0%, #187656 100%)', + }, + }, + primary: { + main: '#1F5493', + }, + banner: { + info: '#2E77D0', + error: '#E22134', + text: '#FFFFFF', + link: '#000000', + closeButtonColor: '#FFFFFF', + warning: '#FF9800', + }, + border: '#E6E6E6', + textContrast: '#000000', + textVerySubtle: '#DDD', + textSubtle: '#6E6E6E', + highlight: '#FFFBCC', + errorBackground: '#FFEBEE', + warningBackground: '#F59B23', + infoBackground: '#ebf5ff', + errorText: '#CA001B', + infoText: '#004e8a', + warningText: '#000000', + linkHover: '#2196F3', + link: '#0A6EBE', + gold: '#FFD600', + navigation: { + background: '#171717', + indicator: '#9BF0E1', + color: '#b5b5b5', + selectedColor: '#FFF', + navItem: { + hoverBackground: '#404040', + }, + submenu: { + background: '#404040', + }, + }, + pinSidebarButton: { + icon: '#181818', + background: '#BDBDBD', + }, + tabbar: { + indicator: '#9BF0E1', + }, + }, + dark: { + type: 'dark' as const, + mode: 'dark' as const, + background: { + default: '#333333', + }, + status: { + ok: '#71CF88', + warning: '#FFB84D', + error: '#F84C55', + running: '#3488E3', + pending: '#FEF071', + aborted: '#9E9E9E', + }, + bursts: { + fontColor: '#FEFEFE', + slackChannelText: '#ddd', + backgroundColor: { + default: '#7C3699', + }, + gradient: { + linear: 'linear-gradient(-137deg, #4BB8A5 0%, #187656 100%)', + }, + }, + primary: { + main: '#9CC9FF', + dark: '#82BAFD', + }, + secondary: { + main: '#FF88B2', + }, + banner: { + info: '#2E77D0', + error: '#E22134', + text: '#FFFFFF', + link: '#000000', + closeButtonColor: '#FFFFFF', + warning: '#FF9800', + }, + border: '#E6E6E6', + textContrast: '#FFFFFF', + textVerySubtle: '#727272', + textSubtle: '#CCCCCC', + highlight: '#FFFBCC', + errorBackground: '#FFEBEE', + warningBackground: '#F59B23', + infoBackground: '#ebf5ff', + errorText: '#CA001B', + infoText: '#004e8a', + warningText: '#000000', + linkHover: '#82BAFD', + link: '#9CC9FF', + gold: '#FFD600', + navigation: { + background: '#424242', + indicator: '#9BF0E1', + color: '#b5b5b5', + selectedColor: '#FFF', + navItem: { + hoverBackground: '#404040', + }, + submenu: { + background: '#404040', + }, + }, + pinSidebarButton: { + icon: '#404040', + background: '#BDBDBD', + }, + tabbar: { + indicator: '#9BF0E1', + }, + }, +}; diff --git a/packages/theme/src/v4/themes.ts b/packages/theme/src/v4/themes.ts index c63dcb591e..ad4faeeac6 100644 --- a/packages/theme/src/v4/themes.ts +++ b/packages/theme/src/v4/themes.ts @@ -15,8 +15,7 @@ */ import { createV4Theme } from './baseTheme'; -import { pageTheme } from '../base/pageTheme'; -import { yellow } from '@material-ui/core/colors'; +import { palettes } from '../base'; /** * The default Backstage light theme. @@ -24,76 +23,7 @@ import { yellow } from '@material-ui/core/colors'; * @public */ export const lightTheme = createV4Theme({ - palette: { - type: 'light', - background: { - default: '#F8F8F8', - }, - status: { - ok: '#1DB954', - warning: '#FF9800', - error: '#E22134', - running: '#1F5493', - pending: '#FFED51', - aborted: '#757575', - }, - bursts: { - fontColor: '#FEFEFE', - slackChannelText: '#ddd', - backgroundColor: { - default: '#7C3699', - }, - gradient: { - linear: 'linear-gradient(-137deg, #4BB8A5 0%, #187656 100%)', - }, - }, - primary: { - main: '#1F5493', - }, - banner: { - info: '#2E77D0', - error: '#E22134', - text: '#FFFFFF', - link: '#000000', - closeButtonColor: '#FFFFFF', - warning: '#FF9800', - }, - border: '#E6E6E6', - textContrast: '#000000', - textVerySubtle: '#DDD', - textSubtle: '#6E6E6E', - highlight: '#FFFBCC', - errorBackground: '#FFEBEE', - warningBackground: '#F59B23', - infoBackground: '#ebf5ff', - errorText: '#CA001B', - infoText: '#004e8a', - warningText: '#000000', - linkHover: '#2196F3', - link: '#0A6EBE', - gold: yellow.A700, - navigation: { - background: '#171717', - indicator: '#9BF0E1', - color: '#b5b5b5', - selectedColor: '#FFF', - navItem: { - hoverBackground: '#404040', - }, - submenu: { - background: '#404040', - }, - }, - pinSidebarButton: { - icon: '#181818', - background: '#BDBDBD', - }, - tabbar: { - indicator: '#9BF0E1', - }, - }, - defaultPageTheme: 'home', - pageTheme, + palette: palettes.light, }); /** @@ -102,78 +32,5 @@ export const lightTheme = createV4Theme({ * @public */ export const darkTheme = createV4Theme({ - palette: { - type: 'dark', - background: { - default: '#333333', - }, - status: { - ok: '#71CF88', - warning: '#FFB84D', - error: '#F84C55', - running: '#3488E3', - pending: '#FEF071', - aborted: '#9E9E9E', - }, - bursts: { - fontColor: '#FEFEFE', - slackChannelText: '#ddd', - backgroundColor: { - default: '#7C3699', - }, - gradient: { - linear: 'linear-gradient(-137deg, #4BB8A5 0%, #187656 100%)', - }, - }, - primary: { - main: '#9CC9FF', - dark: '#82BAFD', - }, - secondary: { - main: '#FF88B2', - }, - banner: { - info: '#2E77D0', - error: '#E22134', - text: '#FFFFFF', - link: '#000000', - closeButtonColor: '#FFFFFF', - warning: '#FF9800', - }, - border: '#E6E6E6', - textContrast: '#FFFFFF', - textVerySubtle: '#727272', - textSubtle: '#CCCCCC', - highlight: '#FFFBCC', - errorBackground: '#FFEBEE', - warningBackground: '#F59B23', - infoBackground: '#ebf5ff', - errorText: '#CA001B', - infoText: '#004e8a', - warningText: '#000000', - linkHover: '#82BAFD', - link: '#9CC9FF', - gold: yellow.A700, - navigation: { - background: '#424242', - indicator: '#9BF0E1', - color: '#b5b5b5', - selectedColor: '#FFF', - navItem: { - hoverBackground: '#404040', - }, - submenu: { - background: '#404040', - }, - }, - pinSidebarButton: { - icon: '#404040', - background: '#BDBDBD', - }, - tabbar: { - indicator: '#9BF0E1', - }, - }, - defaultPageTheme: 'home', - pageTheme, + palette: palettes.dark, }); From d1505050ab7ae1ae76643d5aa7d9a14e3e88bbea Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 31 Dec 2022 16:25:48 +0100 Subject: [PATCH 174/213] theme: new unified themes export Signed-off-by: Patrik Oldsberg --- packages/theme/src/compat/index.ts | 1 + packages/theme/src/compat/themes.ts | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 packages/theme/src/compat/themes.ts diff --git a/packages/theme/src/compat/index.ts b/packages/theme/src/compat/index.ts index 5dc9e1e3ea..8b5e01e231 100644 --- a/packages/theme/src/compat/index.ts +++ b/packages/theme/src/compat/index.ts @@ -15,5 +15,6 @@ */ export { UnifiedThemeProvider } from './UnifiedThemeProvider'; +export { themes } from './themes'; export type { UnifiedThemeProviderProps } from './UnifiedThemeProvider'; export type { UnifiedTheme } from './types'; diff --git a/packages/theme/src/compat/themes.ts b/packages/theme/src/compat/themes.ts new file mode 100644 index 0000000000..7b5bae8029 --- /dev/null +++ b/packages/theme/src/compat/themes.ts @@ -0,0 +1,23 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { palettes } from '../base'; +import { createUnifiedTheme } from './UnifiedTheme'; + +export const themes = { + light: createUnifiedTheme({ palette: palettes.light }), + dark: createUnifiedTheme({ palette: palettes.dark }), +}; From 130f4343ed91da1f0e6b684db27ad4e56f92ef5f Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 31 Dec 2022 16:27:01 +0100 Subject: [PATCH 175/213] theme: deprecate v4 themes Signed-off-by: Patrik Oldsberg --- packages/theme/src/v4/themes.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/theme/src/v4/themes.ts b/packages/theme/src/v4/themes.ts index ad4faeeac6..e5ce783e0f 100644 --- a/packages/theme/src/v4/themes.ts +++ b/packages/theme/src/v4/themes.ts @@ -18,18 +18,20 @@ import { createV4Theme } from './baseTheme'; import { palettes } from '../base'; /** - * The default Backstage light theme. + * The old MUI v4 Backstage light theme. * * @public + * @deprecated Use {@link themes.light} instead. */ export const lightTheme = createV4Theme({ palette: palettes.light, }); /** - * The default Backstage dark theme. + * The old MUI v4 Backstage dark theme. * * @public + * @deprecated Use {@link themes.dark} instead. */ export const darkTheme = createV4Theme({ palette: palettes.dark, From 1b7f1124524622933ed7307cf024bc4c0a5c823b Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 31 Dec 2022 16:29:42 +0100 Subject: [PATCH 176/213] theme: remove unused SimpleV5ThemeOptions + cleanup Signed-off-by: Patrik Oldsberg --- packages/theme/src/v5/types.ts | 30 ------------------------------ 1 file changed, 30 deletions(-) diff --git a/packages/theme/src/v5/types.ts b/packages/theme/src/v5/types.ts index 4f8bfe6634..f679d9e53b 100644 --- a/packages/theme/src/v5/types.ts +++ b/packages/theme/src/v5/types.ts @@ -14,27 +14,11 @@ * limitations under the License. */ -import { PaletteOptions } from '@mui/material/styles'; import { BackstagePaletteAdditions, BackstageThemeAdditions, - PageTheme, } from '../base/types'; -/** - * A simpler configuration for creating a new theme that just tweaks some parts - * of the backstage one. - * - * @public - */ -export type SimpleV5ThemeOptions = { - palette: PaletteOptions; - defaultPageTheme?: string; - pageTheme?: Record; - fontFamily?: string; - htmlFontSize?: number; -}; - declare module '@mui/material/styles/createPalette' { interface Palette extends BackstagePaletteAdditions {} @@ -52,23 +36,9 @@ declare module '@mui/material/styles/createTheme' { declare global { namespace React { interface DOMAttributes { - // onResize?: ReactEventHandler | undefined; - // onResizeCapture?: ReactEventHandler | undefined; - onResize?: (event: Event) => void; onResizeCapture?: (event: Event) => void; nonce?: string | undefined; } } } -// declare global { -// namespace React { -// type React = typeof import('react'); - -// interface DOMAttributes { -// onResize?: React.EventHandler | undefined; -// onResizeCapture?: React.EventHandler | undefined; -// nonce?: string | undefined; -// } -// } -// } From daa9125e4d44f233faea84114b8e977a6eeae74d Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 31 Dec 2022 16:37:01 +0100 Subject: [PATCH 177/213] theme: remove new V4 methods, deprecate all existing methods Signed-off-by: Patrik Oldsberg --- packages/theme/src/index.ts | 28 ---------------------------- packages/theme/src/v4/baseTheme.ts | 25 +++++++++++++------------ packages/theme/src/v4/index.ts | 8 ++++---- packages/theme/src/v4/themes.ts | 6 +++--- packages/theme/src/v4/types.ts | 3 ++- 5 files changed, 22 insertions(+), 48 deletions(-) diff --git a/packages/theme/src/index.ts b/packages/theme/src/index.ts index 8fdb961705..55bcf3beaa 100644 --- a/packages/theme/src/index.ts +++ b/packages/theme/src/index.ts @@ -24,31 +24,3 @@ export * from './compat'; export * from './base'; export * from './v4'; export * from './v5'; - -import { - createV4Theme, - createV4ThemeOptions, - createV4ThemeOverrides, -} from './v4'; -import type { SimpleV4ThemeOptions } from './v4'; - -/** - * @public - * @deprecated Use {@link createV4Theme} instead. - */ -export const createTheme = createV4Theme; -/** - * @public - * @deprecated Use {@link createV4ThemeOptions} instead. - */ -export const createThemeOptions = createV4ThemeOptions; -/** - * @public - * @deprecated Use {@link createV4ThemeOverrides} instead. - */ -export const createThemeOverrides = createV4ThemeOverrides; -/** - * @public - * @deprecated Use {@link SimpleV4ThemeOptions} instead. - */ -export type SimpleThemeOptions = SimpleV4ThemeOptions; diff --git a/packages/theme/src/v4/baseTheme.ts b/packages/theme/src/v4/baseTheme.ts index 9ae8507e9c..2349cfb13b 100644 --- a/packages/theme/src/v4/baseTheme.ts +++ b/packages/theme/src/v4/baseTheme.ts @@ -18,19 +18,18 @@ import { Theme as Mui5Theme } from '@mui/material/styles'; import { createTheme as createMuiTheme } from '@material-ui/core/styles'; import { GridProps, SwitchProps, Theme, ThemeOptions } from '@material-ui/core'; import { Overrides } from '@material-ui/core/styles/overrides'; -import { SimpleV4ThemeOptions } from './types'; +import { SimpleThemeOptions } from './types'; import { createBaseThemeOptions } from '../base'; import { defaultComponentThemes } from '../v5'; import { transformV5ComponentThemesToV4 } from '../compat/overrides'; /** - * A helper for creating theme options. + * An old helper for creating MUI v4 theme options. * * @public + * @deprecated Use {@link createBaseThemeOptions} instead. */ -export function createV4ThemeOptions( - options: SimpleV4ThemeOptions, -): ThemeOptions { +export function createThemeOptions(options: SimpleThemeOptions): ThemeOptions { return { props: { MuiGrid: defaultComponentThemes?.MuiGrid @@ -43,11 +42,12 @@ export function createV4ThemeOptions( } /** - * A helper for creating theme overrides. + * * An old helper for creating MUI v4 theme overrides. * * @public + * @deprecated Use {@link defaultComponentThemes} with {@link transformV5ComponentThemesToV4} instead. */ -export function createV4ThemeOverrides(theme: Theme): Overrides { +export function createThemeOverrides(theme: Theme): Overrides { return transformV5ComponentThemesToV4( // Safe but we have to make sure we don't use mui5 specific stuff in the default component themes theme as unknown as Mui5Theme, @@ -56,15 +56,16 @@ export function createV4ThemeOverrides(theme: Theme): Overrides { } /** - * Creates a Backstage MUI theme using a palette. The theme is created with the - * common Backstage options and component styles. + * The old method to create a Backstage MUI v4 theme using a palette. + * The theme is created with the common Backstage options and component styles. * * @public + * @deprecated Use {@link createUnifiedTheme} instead. */ -export function createV4Theme(options: SimpleV4ThemeOptions): Theme { - const themeOptions = createV4ThemeOptions(options); +export function createTheme(options: SimpleThemeOptions): Theme { + const themeOptions = createThemeOptions(options); const baseTheme = createMuiTheme(themeOptions); - const overrides = createV4ThemeOverrides(baseTheme); + const overrides = createThemeOverrides(baseTheme); const theme = { ...baseTheme, overrides }; return theme; } diff --git a/packages/theme/src/v4/index.ts b/packages/theme/src/v4/index.ts index 331e0e4c1e..fad349b849 100644 --- a/packages/theme/src/v4/index.ts +++ b/packages/theme/src/v4/index.ts @@ -16,14 +16,14 @@ export { darkTheme, lightTheme } from './themes'; export { - createV4Theme, - createV4ThemeOptions, - createV4ThemeOverrides, + createTheme, + createThemeOptions, + createThemeOverrides, } from './baseTheme'; export type { BackstagePalette, BackstagePaletteOptions, BackstageTheme, BackstageThemeOptions, - SimpleV4ThemeOptions, + SimpleThemeOptions, } from './types'; diff --git a/packages/theme/src/v4/themes.ts b/packages/theme/src/v4/themes.ts index e5ce783e0f..488ee58831 100644 --- a/packages/theme/src/v4/themes.ts +++ b/packages/theme/src/v4/themes.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { createV4Theme } from './baseTheme'; +import { createTheme } from './baseTheme'; import { palettes } from '../base'; /** @@ -23,7 +23,7 @@ import { palettes } from '../base'; * @public * @deprecated Use {@link themes.light} instead. */ -export const lightTheme = createV4Theme({ +export const lightTheme = createTheme({ palette: palettes.light, }); @@ -33,6 +33,6 @@ export const lightTheme = createV4Theme({ * @public * @deprecated Use {@link themes.dark} instead. */ -export const darkTheme = createV4Theme({ +export const darkTheme = createTheme({ palette: palettes.dark, }); diff --git a/packages/theme/src/v4/types.ts b/packages/theme/src/v4/types.ts index ded91bec3f..24736e5d88 100644 --- a/packages/theme/src/v4/types.ts +++ b/packages/theme/src/v4/types.ts @@ -78,8 +78,9 @@ export interface BackstageTheme extends Theme { * of the backstage one. * * @public + * @deprecated Use {@link BaseThemeOptionsInput} instead. */ -export type SimpleV4ThemeOptions = { +export type SimpleThemeOptions = { palette: PaletteOptions; defaultPageTheme?: string; pageTheme?: Record; From 2c2e98562c4829b7a2a648cc06ff6fdd7e9c5afa Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 31 Dec 2022 16:42:08 +0100 Subject: [PATCH 178/213] theme: update API report + fixes Signed-off-by: Patrik Oldsberg --- packages/theme/api-report.md | 233 +++++++++++++++++---- packages/theme/src/compat/UnifiedTheme.tsx | 8 +- packages/theme/src/compat/index.ts | 5 +- packages/theme/src/compat/overrides.ts | 6 +- packages/theme/src/compat/themes.ts | 5 + 5 files changed, 215 insertions(+), 42 deletions(-) diff --git a/packages/theme/api-report.md b/packages/theme/api-report.md index 131fa185ed..59c894ba19 100644 --- a/packages/theme/api-report.md +++ b/packages/theme/api-report.md @@ -3,15 +3,18 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts +import { ComponentsProps } from '@material-ui/core/styles/props'; import { Overrides } from '@material-ui/core/styles/overrides'; import { Palette } from '@material-ui/core/styles/createPalette'; import { PaletteOptions } from '@material-ui/core/styles/createPalette'; -import { PaletteOptions as PaletteOptions_2 } from '@mui/material/styles'; +import { PaletteOptions as PaletteOptions_2 } from '@mui/material/styles/createPalette'; import { default as React_2 } from 'react'; import { ReactNode } from 'react'; -import { Theme } from '@material-ui/core'; -import { ThemeOptions } from '@material-ui/core'; -import { ThemeOptions as ThemeOptions_2 } from '@mui/material/styles'; +import { Theme } from '@mui/material/styles'; +import { Theme as Theme_2 } from '@material-ui/core'; +import { ThemeOptions } from '@mui/material/styles'; +import { ThemeOptions as ThemeOptions_2 } from '@material-ui/core/styles'; +import { ThemeOptions as ThemeOptions_3 } from '@material-ui/core'; // @public @deprecated export type BackstagePalette = Palette & BackstagePaletteAdditions; @@ -84,7 +87,7 @@ export type BackstagePaletteOptions = PaletteOptions & BackstagePaletteAdditions; // @public @deprecated -export interface BackstageTheme extends Theme { +export interface BackstageTheme extends Theme_2 { // (undocumented) getPageTheme: (selector: PageThemeSelector) => PageTheme; // (undocumented) @@ -94,7 +97,7 @@ export interface BackstageTheme extends Theme { } // @public @deprecated -export interface BackstageThemeOptions extends ThemeOptions { +export interface BackstageThemeOptions extends ThemeOptions_3 { // (undocumented) getPageTheme: (selector: PageThemeSelector) => PageTheme; // (undocumented) @@ -163,31 +166,26 @@ export function createBaseThemeOptions( getPageTheme: ({ themeId }: PageThemeSelector) => PageTheme; }; -// @public @deprecated (undocumented) -export const createTheme: typeof createV4Theme; +// @public @deprecated +export function createTheme(options: SimpleThemeOptions): Theme_2; -// @public @deprecated (undocumented) -export const createThemeOptions: typeof createV4ThemeOptions; +// @public @deprecated +export function createThemeOptions(options: SimpleThemeOptions): ThemeOptions_3; -// @public @deprecated (undocumented) -export const createThemeOverrides: typeof createV4ThemeOverrides; +// @public @deprecated +export function createThemeOverrides(theme: Theme_2): Overrides; // @public -export function createV4Theme(options: SimpleV4ThemeOptions): Theme; +export function createUnifiedTheme(options: UnifiedThemeOptions): UnifiedTheme; // @public -export function createV4ThemeOptions( - options: SimpleV4ThemeOptions, -): ThemeOptions; +export function createUnifiedThemeFromV4(options: ThemeOptions_2): UnifiedTheme; + +// @public @deprecated +export const darkTheme: Theme_2; // @public -export function createV4ThemeOverrides(theme: Theme): Overrides; - -// @public -export const darkTheme: Theme; - -// @public -export const defaultComponentThemes: ThemeOptions_2['components']; +export const defaultComponentThemes: ThemeOptions['components']; // @public export function genPageTheme(props: { @@ -198,8 +196,8 @@ export function genPageTheme(props: { }; }): PageTheme; -// @public -export const lightTheme: Theme; +// @public @deprecated +export const lightTheme: Theme_2; // @public export type PageTheme = { @@ -218,13 +216,154 @@ export type PageThemeSelector = { }; // @public -export const shapes: Record; - -// @public @deprecated (undocumented) -export type SimpleThemeOptions = SimpleV4ThemeOptions; +export const palettes: { + light: { + type: 'light'; + mode: 'light'; + background: { + default: string; + }; + status: { + ok: string; + warning: string; + error: string; + running: string; + pending: string; + aborted: string; + }; + bursts: { + fontColor: string; + slackChannelText: string; + backgroundColor: { + default: string; + }; + gradient: { + linear: string; + }; + }; + primary: { + main: string; + }; + banner: { + info: string; + error: string; + text: string; + link: string; + warning: string; + }; + border: string; + textContrast: string; + textVerySubtle: string; + textSubtle: string; + highlight: string; + errorBackground: string; + warningBackground: string; + infoBackground: string; + errorText: string; + infoText: string; + warningText: string; + linkHover: string; + link: string; + gold: string; + navigation: { + background: string; + indicator: string; + color: string; + selectedColor: string; + navItem: { + hoverBackground: string; + }; + submenu: { + background: string; + }; + }; + pinSidebarButton: { + icon: string; + background: string; + }; + tabbar: { + indicator: string; + }; + }; + dark: { + type: 'dark'; + mode: 'dark'; + background: { + default: string; + }; + status: { + ok: string; + warning: string; + error: string; + running: string; + pending: string; + aborted: string; + }; + bursts: { + fontColor: string; + slackChannelText: string; + backgroundColor: { + default: string; + }; + gradient: { + linear: string; + }; + }; + primary: { + main: string; + dark: string; + }; + secondary: { + main: string; + }; + banner: { + info: string; + error: string; + text: string; + link: string; + warning: string; + }; + border: string; + textContrast: string; + textVerySubtle: string; + textSubtle: string; + highlight: string; + errorBackground: string; + warningBackground: string; + infoBackground: string; + errorText: string; + infoText: string; + warningText: string; + linkHover: string; + link: string; + gold: string; + navigation: { + background: string; + indicator: string; + color: string; + selectedColor: string; + navItem: { + hoverBackground: string; + }; + submenu: { + background: string; + }; + }; + pinSidebarButton: { + icon: string; + background: string; + }; + tabbar: { + indicator: string; + }; + }; +}; // @public -export type SimpleV4ThemeOptions = { +export const shapes: Record; + +// @public @deprecated +export type SimpleThemeOptions = { palette: PaletteOptions; defaultPageTheme?: string; pageTheme?: Record; @@ -233,12 +372,18 @@ export type SimpleV4ThemeOptions = { }; // @public -export type SimpleV5ThemeOptions = { - palette: PaletteOptions_2; - defaultPageTheme?: string; - pageTheme?: Record; - fontFamily?: string; - htmlFontSize?: number; +export const themes: { + light: UnifiedTheme; + dark: UnifiedTheme; +}; + +// @public +export function transformV5ComponentThemesToV4( + theme: Theme, + components?: ThemeOptions['components'], +): { + overrides: Overrides; + props: ComponentsProps; }; // @public @@ -247,6 +392,22 @@ export interface UnifiedTheme { getTheme(version: string): unknown | undefined; } +// @public +export interface UnifiedThemeOptions { + // (undocumented) + components?: ThemeOptions['components']; + // (undocumented) + defaultPageTheme?: string; + // (undocumented) + fontFamily?: string; + // (undocumented) + htmlFontSize?: number; + // (undocumented) + pageTheme?: Record; + // (undocumented) + palette: PaletteOptions & PaletteOptions_2; +} + // @public export function UnifiedThemeProvider( props: UnifiedThemeProviderProps, diff --git a/packages/theme/src/compat/UnifiedTheme.tsx b/packages/theme/src/compat/UnifiedTheme.tsx index d00999a8b1..dbb50c979e 100644 --- a/packages/theme/src/compat/UnifiedTheme.tsx +++ b/packages/theme/src/compat/UnifiedTheme.tsx @@ -70,9 +70,7 @@ export interface UnifiedThemeOptions { * * @public */ -export function createUnifiedTheme( - options: UnifiedThemeOptions, -): UnifiedThemeHolder { +export function createUnifiedTheme(options: UnifiedThemeOptions): UnifiedTheme { const themeOptions = createBaseThemeOptions(options); const components = { ...defaultComponentThemes, ...options.components }; const v5Theme = createV5Theme({ ...themeOptions, components }); @@ -88,7 +86,9 @@ export function createUnifiedTheme( * * @public */ -export function createUnifiedThemeFromV4(options: ThemeOptionsV4) { +export function createUnifiedThemeFromV4( + options: ThemeOptionsV4, +): UnifiedTheme { const v4Theme = createV4Theme(options); const v5Theme = adaptV4Theme(options as any); diff --git a/packages/theme/src/compat/index.ts b/packages/theme/src/compat/index.ts index 8b5e01e231..f5c805d3ed 100644 --- a/packages/theme/src/compat/index.ts +++ b/packages/theme/src/compat/index.ts @@ -14,7 +14,10 @@ * limitations under the License. */ -export { UnifiedThemeProvider } from './UnifiedThemeProvider'; +export { transformV5ComponentThemesToV4 } from './overrides'; +export { createUnifiedTheme, createUnifiedThemeFromV4 } from './UnifiedTheme'; +export type { UnifiedThemeOptions } from './UnifiedTheme'; export { themes } from './themes'; +export { UnifiedThemeProvider } from './UnifiedThemeProvider'; export type { UnifiedThemeProviderProps } from './UnifiedThemeProvider'; export type { UnifiedTheme } from './types'; diff --git a/packages/theme/src/compat/overrides.ts b/packages/theme/src/compat/overrides.ts index 8b6c3f94bc..a9e080af36 100644 --- a/packages/theme/src/compat/overrides.ts +++ b/packages/theme/src/compat/overrides.ts @@ -43,7 +43,11 @@ function adaptV5Override(theme: Theme, overrides: V5Override): V4Override { return overrides as V4Override; } -// Transform v5 theme overrides into a v4 theme, by converting the callback-based overrides +/** + * Transform MUI v5 component themes into a v4 theme props and overrides. + * + * @public + */ export function transformV5ComponentThemesToV4( theme: Theme, components: ThemeOptions['components'] = {}, diff --git a/packages/theme/src/compat/themes.ts b/packages/theme/src/compat/themes.ts index 7b5bae8029..24e1b1026b 100644 --- a/packages/theme/src/compat/themes.ts +++ b/packages/theme/src/compat/themes.ts @@ -17,6 +17,11 @@ import { palettes } from '../base'; import { createUnifiedTheme } from './UnifiedTheme'; +/** + * Built-in Backstage MUI themes. + * + * @public + */ export const themes = { light: createUnifiedTheme({ palette: palettes.light }), dark: createUnifiedTheme({ palette: palettes.dark }), From ac45497e1eba614e337e8be47970e06f6ceb27bb Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 31 Dec 2022 16:47:46 +0100 Subject: [PATCH 179/213] theme: rename compat -> unified Signed-off-by: Patrik Oldsberg --- packages/theme/src/index.ts | 2 +- packages/theme/src/{compat => unified}/UnifiedTheme.tsx | 0 packages/theme/src/{compat => unified}/UnifiedThemeProvider.tsx | 0 packages/theme/src/{compat => unified}/index.ts | 0 packages/theme/src/{compat => unified}/overrides.test.ts | 0 packages/theme/src/{compat => unified}/overrides.ts | 0 packages/theme/src/{compat => unified}/themes.ts | 0 packages/theme/src/{compat => unified}/types.ts | 0 packages/theme/src/v4/baseTheme.ts | 2 +- 9 files changed, 2 insertions(+), 2 deletions(-) rename packages/theme/src/{compat => unified}/UnifiedTheme.tsx (100%) rename packages/theme/src/{compat => unified}/UnifiedThemeProvider.tsx (100%) rename packages/theme/src/{compat => unified}/index.ts (100%) rename packages/theme/src/{compat => unified}/overrides.test.ts (100%) rename packages/theme/src/{compat => unified}/overrides.ts (100%) rename packages/theme/src/{compat => unified}/themes.ts (100%) rename packages/theme/src/{compat => unified}/types.ts (100%) diff --git a/packages/theme/src/index.ts b/packages/theme/src/index.ts index 55bcf3beaa..b0e3590273 100644 --- a/packages/theme/src/index.ts +++ b/packages/theme/src/index.ts @@ -20,7 +20,7 @@ * @packageDocumentation */ -export * from './compat'; +export * from './unified'; export * from './base'; export * from './v4'; export * from './v5'; diff --git a/packages/theme/src/compat/UnifiedTheme.tsx b/packages/theme/src/unified/UnifiedTheme.tsx similarity index 100% rename from packages/theme/src/compat/UnifiedTheme.tsx rename to packages/theme/src/unified/UnifiedTheme.tsx diff --git a/packages/theme/src/compat/UnifiedThemeProvider.tsx b/packages/theme/src/unified/UnifiedThemeProvider.tsx similarity index 100% rename from packages/theme/src/compat/UnifiedThemeProvider.tsx rename to packages/theme/src/unified/UnifiedThemeProvider.tsx diff --git a/packages/theme/src/compat/index.ts b/packages/theme/src/unified/index.ts similarity index 100% rename from packages/theme/src/compat/index.ts rename to packages/theme/src/unified/index.ts diff --git a/packages/theme/src/compat/overrides.test.ts b/packages/theme/src/unified/overrides.test.ts similarity index 100% rename from packages/theme/src/compat/overrides.test.ts rename to packages/theme/src/unified/overrides.test.ts diff --git a/packages/theme/src/compat/overrides.ts b/packages/theme/src/unified/overrides.ts similarity index 100% rename from packages/theme/src/compat/overrides.ts rename to packages/theme/src/unified/overrides.ts diff --git a/packages/theme/src/compat/themes.ts b/packages/theme/src/unified/themes.ts similarity index 100% rename from packages/theme/src/compat/themes.ts rename to packages/theme/src/unified/themes.ts diff --git a/packages/theme/src/compat/types.ts b/packages/theme/src/unified/types.ts similarity index 100% rename from packages/theme/src/compat/types.ts rename to packages/theme/src/unified/types.ts diff --git a/packages/theme/src/v4/baseTheme.ts b/packages/theme/src/v4/baseTheme.ts index 2349cfb13b..411bcdf9a8 100644 --- a/packages/theme/src/v4/baseTheme.ts +++ b/packages/theme/src/v4/baseTheme.ts @@ -21,7 +21,7 @@ import { Overrides } from '@material-ui/core/styles/overrides'; import { SimpleThemeOptions } from './types'; import { createBaseThemeOptions } from '../base'; import { defaultComponentThemes } from '../v5'; -import { transformV5ComponentThemesToV4 } from '../compat/overrides'; +import { transformV5ComponentThemesToV4 } from '../unified/overrides'; /** * An old helper for creating MUI v4 theme options. From 879153617741ac081f3ff79cf71d444429cbdb15 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 31 Dec 2022 16:50:03 +0100 Subject: [PATCH 180/213] theme: fix UnifiedThemeProvider type Signed-off-by: Patrik Oldsberg --- packages/theme/api-report.md | 3 +-- packages/theme/src/unified/UnifiedThemeProvider.tsx | 6 ++++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/theme/api-report.md b/packages/theme/api-report.md index 59c894ba19..e8f7ef30f8 100644 --- a/packages/theme/api-report.md +++ b/packages/theme/api-report.md @@ -8,7 +8,6 @@ import { Overrides } from '@material-ui/core/styles/overrides'; import { Palette } from '@material-ui/core/styles/createPalette'; import { PaletteOptions } from '@material-ui/core/styles/createPalette'; import { PaletteOptions as PaletteOptions_2 } from '@mui/material/styles/createPalette'; -import { default as React_2 } from 'react'; import { ReactNode } from 'react'; import { Theme } from '@mui/material/styles'; import { Theme as Theme_2 } from '@material-ui/core'; @@ -411,7 +410,7 @@ export interface UnifiedThemeOptions { // @public export function UnifiedThemeProvider( props: UnifiedThemeProviderProps, -): React_2.ReactNode; +): JSX.Element; // @public export interface UnifiedThemeProviderProps { diff --git a/packages/theme/src/unified/UnifiedThemeProvider.tsx b/packages/theme/src/unified/UnifiedThemeProvider.tsx index 72fb708c23..93bceac022 100644 --- a/packages/theme/src/unified/UnifiedThemeProvider.tsx +++ b/packages/theme/src/unified/UnifiedThemeProvider.tsx @@ -42,11 +42,13 @@ export interface UnifiedThemeProviderProps { * * @public */ -export function UnifiedThemeProvider(props: UnifiedThemeProviderProps) { +export function UnifiedThemeProvider( + props: UnifiedThemeProviderProps, +): JSX.Element { const { children, theme, noCssBaseline } = props; let result = noCssBaseline ? ( - children + <>{children} ) : ( <> From 8bca331617f998d1c85ebf10a715e90116d7e6e5 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 31 Dec 2022 17:57:15 +0100 Subject: [PATCH 181/213] app-defaults: switch to use new unified themes Signed-off-by: Patrik Oldsberg --- packages/app-defaults/src/defaults/themes.tsx | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/packages/app-defaults/src/defaults/themes.tsx b/packages/app-defaults/src/defaults/themes.tsx index 397c160168..10368bd3bc 100644 --- a/packages/app-defaults/src/defaults/themes.tsx +++ b/packages/app-defaults/src/defaults/themes.tsx @@ -15,11 +15,12 @@ */ import React from 'react'; -import { darkTheme, lightTheme } from '@backstage/theme'; +import { + UnifiedThemeProvider, + themes as builtinThemes, +} from '@backstage/theme'; import DarkIcon from '@material-ui/icons/Brightness2'; import LightIcon from '@material-ui/icons/WbSunny'; -import { ThemeProvider } from '@material-ui/core/styles'; -import CssBaseline from '@material-ui/core/CssBaseline'; import { AppTheme } from '@backstage/core-plugin-api'; export const themes: AppTheme[] = [ @@ -29,9 +30,7 @@ export const themes: AppTheme[] = [ variant: 'light', icon: , Provider: ({ children }) => ( - - {children} - + ), }, { @@ -40,9 +39,7 @@ export const themes: AppTheme[] = [ variant: 'dark', icon: , Provider: ({ children }) => ( - - {children} - + ), }, ]; From 3eca9ee94c0a5b8c1be28ccec041a6b70c8fcb1b Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 31 Dec 2022 18:03:17 +0100 Subject: [PATCH 182/213] theme: add StyledEngineProvider for v5 theme Signed-off-by: Patrik Oldsberg --- packages/theme/src/unified/UnifiedThemeProvider.tsx | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/theme/src/unified/UnifiedThemeProvider.tsx b/packages/theme/src/unified/UnifiedThemeProvider.tsx index 93bceac022..f2cc2d573f 100644 --- a/packages/theme/src/unified/UnifiedThemeProvider.tsx +++ b/packages/theme/src/unified/UnifiedThemeProvider.tsx @@ -20,6 +20,7 @@ import { ThemeProvider as Mui4Provider, } from '@material-ui/core/styles'; import { + StyledEngineProvider, Theme as Mui5Theme, ThemeProvider as Mui5Provider, } from '@mui/material/styles'; @@ -63,7 +64,11 @@ export function UnifiedThemeProvider( const v5Theme = theme.getTheme('v5'); if (v5Theme) { - result = {result}; + result = ( + + {result} + + ); } return result; From 6bdc603a5255ad85e753c20aaae1fa32ae232f2e Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 31 Dec 2022 18:41:13 +0100 Subject: [PATCH 183/213] core-app-api: update app docs to reflect new theme API Signed-off-by: Patrik Oldsberg --- packages/core-app-api/src/app/types.ts | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/packages/core-app-api/src/app/types.ts b/packages/core-app-api/src/app/types.ts index 3d9005b0c0..c34407ca3a 100644 --- a/packages/core-app-api/src/app/types.ts +++ b/packages/core-app-api/src/app/types.ts @@ -236,21 +236,13 @@ export type AppOptions = { * title: 'Light Theme', * variant: 'light', * icon: , - * Provider: ({ children }) => ( - * - * {children} - * - * ), + * Provider: ({ children }) => , * }, { * id: 'dark', * title: 'Dark Theme', * variant: 'dark', * icon: , - * Provider: ({ children }) => ( - * - * {children} - * - * ), + * Provider: ({ children }) => , * }] * ``` */ From 2a4cf543fb91b3ecf185f2be9f3348f0d1717ad3 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 31 Dec 2022 18:41:30 +0100 Subject: [PATCH 184/213] test-utils: use new theme API Signed-off-by: Patrik Oldsberg --- packages/test-utils/src/testUtils/appWrappers.tsx | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/test-utils/src/testUtils/appWrappers.tsx b/packages/test-utils/src/testUtils/appWrappers.tsx index 8b644ad2d1..012cbe0b98 100644 --- a/packages/test-utils/src/testUtils/appWrappers.tsx +++ b/packages/test-utils/src/testUtils/appWrappers.tsx @@ -17,8 +17,7 @@ import React, { ComponentType, ReactNode, ReactElement } from 'react'; import { MemoryRouter } from 'react-router-dom'; import { Route } from 'react-router-dom'; -import { lightTheme } from '@backstage/theme'; -import { ThemeProvider } from '@material-ui/core/styles'; +import { UnifiedThemeProvider, themes } from '@backstage/theme'; import { CssBaseline } from '@material-ui/core'; import MockIcon from '@material-ui/icons/AcUnit'; import { createSpecializedApp } from '@backstage/core-app-api'; @@ -142,9 +141,9 @@ export function createTestAppWrapper( title: 'Test App Theme', variant: 'light', Provider: ({ children }) => ( - + {children} - + ), }, ], From bbc5f6cd6bd0150610d12b25a4d54edbed8558be Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sun, 1 Jan 2023 17:52:24 +0100 Subject: [PATCH 185/213] theme: add component style transform for v5 state to v4 Signed-off-by: Patrik Oldsberg --- packages/theme/src/unified/overrides.test.ts | 29 ++++++++++ packages/theme/src/unified/overrides.ts | 58 ++++++++++++++++--- .../theme/src/v5/defaultComponentThemes.ts | 10 ++-- 3 files changed, 84 insertions(+), 13 deletions(-) diff --git a/packages/theme/src/unified/overrides.test.ts b/packages/theme/src/unified/overrides.test.ts index 68fd883168..4cf2fdedf5 100644 --- a/packages/theme/src/unified/overrides.test.ts +++ b/packages/theme/src/unified/overrides.test.ts @@ -135,4 +135,33 @@ describe('transformV5ComponentThemesToV4', () => { }, }); }); + + it('transform state styles', () => { + expect( + transformV5ComponentThemesToV4(mockTheme, { + MuiButton: { + styleOverrides: { + root: { + color: 'green', + '&.Mui-disabled': { + color: 'red', + }, + }, + }, + }, + }), + ).toEqual({ + overrides: { + MuiButton: { + root: { + color: 'green', + }, + disabled: { + color: 'red', + }, + }, + }, + props: {}, + }); + }); }); diff --git a/packages/theme/src/unified/overrides.ts b/packages/theme/src/unified/overrides.ts index a9e080af36..5c5990c65d 100644 --- a/packages/theme/src/unified/overrides.ts +++ b/packages/theme/src/unified/overrides.ts @@ -17,18 +17,26 @@ import { Overrides } from '@material-ui/core/styles/overrides'; import { ComponentsProps } from '@material-ui/core/styles/props'; import { ComponentsOverrides, Theme, ThemeOptions } from '@mui/material/styles'; +import { CSSProperties } from 'react'; type V5Override = ComponentsOverrides[keyof ComponentsOverrides]; type V4Override = Overrides[keyof Overrides]; +type StaticStyleRules = Record< + string, + CSSProperties | Record +>; // Converts callback-based overrides to static styles, e.g. // { root: theme => ({ color: theme.color }) } -> { root: { color: 'red' } } -function adaptV5Override(theme: Theme, overrides: V5Override): V4Override { - if (!overrides) { - return overrides as V4Override; +function adaptV5Override( + theme: Theme, + overrides: V5Override, +): StaticStyleRules | undefined { + if (!overrides || typeof overrides === 'string') { + return undefined; } if (typeof overrides === 'function') { - return overrides(theme) as V4Override; + return overrides(theme) as StaticStyleRules; } if (typeof overrides === 'object') { return Object.fromEntries( @@ -40,7 +48,42 @@ function adaptV5Override(theme: Theme, overrides: V5Override): V4Override { }), ); } - return overrides as V4Override; + return overrides as StaticStyleRules; +} + +const stateStyleKeyPattern = /^&.Mui-([\w-]+)$/; + +// Move state style overrides to the top level, e.g. +// { root: { '&.Mui-active': { color: 'red' } } } -> { active: { color: 'red' } } +function extractV5StateOverrides( + overrides: StaticStyleRules | undefined, +): StaticStyleRules | undefined { + let output = overrides; + if (!overrides || typeof overrides !== 'object') { + return output; + } + for (const className of Object.keys(overrides)) { + const styles = overrides[className]; + if (!styles || typeof styles !== 'object') { + continue; + } + for (const _styleKey of Object.keys(styles)) { + const styleKey = _styleKey as keyof typeof styles; + const match = styleKey.match(stateStyleKeyPattern); + if (match) { + const [, state] = match; + const { [styleKey]: stateStyles, ...restStyles } = styles; + if (stateStyles) { + output = { + ...output, + [className]: restStyles, + [state]: stateStyles, + }; + } + } + } + } + return output; } /** @@ -61,9 +104,8 @@ export function transformV5ComponentThemesToV4( continue; } if ('styleOverrides' in component) { - overrides[name] = adaptV5Override( - theme, - component.styleOverrides as V5Override, + overrides[name] = extractV5StateOverrides( + adaptV5Override(theme, component.styleOverrides as V5Override), ); } if ('defaultProps' in component) { diff --git a/packages/theme/src/v5/defaultComponentThemes.ts b/packages/theme/src/v5/defaultComponentThemes.ts index 288ba819bf..15cba7f6b6 100644 --- a/packages/theme/src/v5/defaultComponentThemes.ts +++ b/packages/theme/src/v5/defaultComponentThemes.ts @@ -139,11 +139,11 @@ export const defaultComponentThemes: ThemeOptions['components'] = { '&:focus': { color: 'inherit', }, - }, - // Bold font for highlighting selected column - active: { - fontWeight: 'bold', - color: 'inherit', + // Bold font for highlighting selected column + '&.Mui-active': { + fontWeight: 'bold', + color: 'inherit', + }, }, }, }, From d2a81a24b415bffe10cffdf2159a3a7598ed9778 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sun, 1 Jan 2023 17:52:55 +0100 Subject: [PATCH 186/213] theme: fix pxpx Signed-off-by: Patrik Oldsberg --- .../theme/src/v5/defaultComponentThemes.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/theme/src/v5/defaultComponentThemes.ts b/packages/theme/src/v5/defaultComponentThemes.ts index 15cba7f6b6..9b4a7fde6b 100644 --- a/packages/theme/src/v5/defaultComponentThemes.ts +++ b/packages/theme/src/v5/defaultComponentThemes.ts @@ -178,23 +178,23 @@ export const defaultComponentThemes: ThemeOptions['components'] = { color: theme.palette.text.primary, }), label: ({ theme }) => ({ - lineHeight: `${theme.spacing(2.5)}px`, + lineHeight: theme.spacing(2.5), fontWeight: theme.typography.fontWeightMedium, - fontSize: `${theme.spacing(1.75)}px`, + fontSize: theme.spacing(1.75), }), labelSmall: ({ theme }) => ({ - fontSize: `${theme.spacing(1.5)}px`, + fontSize: theme.spacing(1.5), }), deleteIcon: ({ theme }) => ({ color: theme.palette.grey[500], - width: `${theme.spacing(3)}px`, - height: `${theme.spacing(3)}px`, - margin: `0 ${theme.spacing(0.75)}px 0 -${theme.spacing(0.75)}px`, + width: theme.spacing(3), + height: theme.spacing(3), + margin: `0 ${theme.spacing(0.75)}px 0 -${theme.spacing(0.75)}`, }), deleteIconSmall: ({ theme }) => ({ - width: `${theme.spacing(2)}px`, - height: `${theme.spacing(2)}px`, - margin: `0 ${theme.spacing(0.5)}px 0 -${theme.spacing(0.5)}px`, + width: theme.spacing(2), + height: theme.spacing(2), + margin: `0 ${theme.spacing(0.5)}px 0 -${theme.spacing(0.5)}`, }), }, }, From ff91bfa9936fc19cccb8cd30246f254eac8575ff Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sun, 1 Jan 2023 17:54:14 +0100 Subject: [PATCH 187/213] theme: declare default v5 theme Signed-off-by: Patrik Oldsberg --- packages/theme/src/v5/types.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/theme/src/v5/types.ts b/packages/theme/src/v5/types.ts index f679d9e53b..5369cda37b 100644 --- a/packages/theme/src/v5/types.ts +++ b/packages/theme/src/v5/types.ts @@ -14,6 +14,7 @@ * limitations under the License. */ +import { Theme } from '@mui/material/styles'; import { BackstagePaletteAdditions, BackstageThemeAdditions, @@ -31,6 +32,10 @@ declare module '@mui/material/styles/createTheme' { interface ThemeOptions extends BackstageThemeAdditions {} } +declare module '@mui/private-theming/defaultTheme' { + interface DefaultTheme extends Theme {} +} + // This is a workaround for missing methods in React 17 that MUI v5 depends on // See https://github.com/mui/material-ui/issues/35287 declare global { From 7fa73df55e3e9f3108f4ce8808abc426375471e5 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sun, 1 Jan 2023 18:12:16 +0100 Subject: [PATCH 188/213] theme: add transform for CssBaseline to fix v5 style Signed-off-by: Patrik Oldsberg --- packages/theme/src/unified/overrides.test.ts | 6 +-- packages/theme/src/unified/overrides.ts | 39 +++++++++++++++---- .../theme/src/v5/defaultComponentThemes.ts | 26 ++++++------- 3 files changed, 46 insertions(+), 25 deletions(-) diff --git a/packages/theme/src/unified/overrides.test.ts b/packages/theme/src/unified/overrides.test.ts index 4cf2fdedf5..38b4738444 100644 --- a/packages/theme/src/unified/overrides.test.ts +++ b/packages/theme/src/unified/overrides.test.ts @@ -107,10 +107,8 @@ describe('transformV5ComponentThemesToV4', () => { transformV5ComponentThemesToV4(mockTheme, { MuiCssBaseline: { styleOverrides: theme => ({ - '@global': { - html: { - color: theme.palette.primary.main, - }, + html: { + color: theme.palette.primary.main, }, }), defaultProps: { diff --git a/packages/theme/src/unified/overrides.ts b/packages/theme/src/unified/overrides.ts index 5c5990c65d..db1fb54c87 100644 --- a/packages/theme/src/unified/overrides.ts +++ b/packages/theme/src/unified/overrides.ts @@ -19,13 +19,34 @@ import { ComponentsProps } from '@material-ui/core/styles/props'; import { ComponentsOverrides, Theme, ThemeOptions } from '@mui/material/styles'; import { CSSProperties } from 'react'; -type V5Override = ComponentsOverrides[keyof ComponentsOverrides]; +type V5Override = ComponentsOverrides[Exclude< + keyof ComponentsOverrides, + 'MuiCssBaseline' +>]; type V4Override = Overrides[keyof Overrides]; type StaticStyleRules = Record< string, CSSProperties | Record >; +// Converts callback-based overrides to static styles, e.g. +// { root: theme => ({ color: theme.color }) } -> { root: { color: 'red' } } +function adaptV5CssBaselineOverride( + theme: Theme, + overrides: ComponentsOverrides['MuiCssBaseline'], +): StaticStyleRules | undefined { + if (!overrides || typeof overrides === 'string') { + return undefined; + } + + const styles = typeof overrides === 'function' ? overrides(theme) : overrides; + if (styles) { + return { '@global': styles } as StaticStyleRules; + } + + return undefined; +} + // Converts callback-based overrides to static styles, e.g. // { root: theme => ({ color: theme.color }) } -> { root: { color: 'red' } } function adaptV5Override( @@ -35,9 +56,6 @@ function adaptV5Override( if (!overrides || typeof overrides === 'string') { return undefined; } - if (typeof overrides === 'function') { - return overrides(theme) as StaticStyleRules; - } if (typeof overrides === 'object') { return Object.fromEntries( Object.entries(overrides).map(([className, style]) => { @@ -104,9 +122,16 @@ export function transformV5ComponentThemesToV4( continue; } if ('styleOverrides' in component) { - overrides[name] = extractV5StateOverrides( - adaptV5Override(theme, component.styleOverrides as V5Override), - ); + if (name === 'MuiCssBaseline') { + overrides[name] = adaptV5CssBaselineOverride( + theme, + component.styleOverrides as ComponentsOverrides['MuiCssBaseline'], + ); + } else { + overrides[name] = extractV5StateOverrides( + adaptV5Override(theme, component.styleOverrides as V5Override), + ); + } } if ('defaultProps' in component) { props[name] = component.defaultProps; diff --git a/packages/theme/src/v5/defaultComponentThemes.ts b/packages/theme/src/v5/defaultComponentThemes.ts index 9b4a7fde6b..eec52e1c8b 100644 --- a/packages/theme/src/v5/defaultComponentThemes.ts +++ b/packages/theme/src/v5/defaultComponentThemes.ts @@ -24,20 +24,18 @@ import { darken, lighten, ThemeOptions } from '@mui/material/styles'; export const defaultComponentThemes: ThemeOptions['components'] = { MuiCssBaseline: { styleOverrides: theme => ({ - '@global': { - html: { - height: '100%', - fontFamily: theme.typography.fontFamily, - }, - body: { - height: '100%', - fontFamily: theme.typography.fontFamily, - 'overscroll-behavior-y': 'none', - }, - a: { - color: 'inherit', - textDecoration: 'none', - }, + html: { + height: '100%', + fontFamily: theme.typography.fontFamily, + }, + body: { + height: '100%', + fontFamily: theme.typography.fontFamily, + overscrollBehaviorY: 'none', + }, + a: { + color: 'inherit', + textDecoration: 'none', }, }), }, From 43c55754919407a6d700a9133ff6eb8db50858c2 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sun, 1 Jan 2023 18:13:16 +0100 Subject: [PATCH 189/213] theme: separated css classes and detect css baseline in unified theme provider Signed-off-by: Patrik Oldsberg --- .../src/unified/UnifiedThemeProvider.tsx | 51 ++++++++++++++----- 1 file changed, 39 insertions(+), 12 deletions(-) diff --git a/packages/theme/src/unified/UnifiedThemeProvider.tsx b/packages/theme/src/unified/UnifiedThemeProvider.tsx index f2cc2d573f..75fcc3c6ae 100644 --- a/packages/theme/src/unified/UnifiedThemeProvider.tsx +++ b/packages/theme/src/unified/UnifiedThemeProvider.tsx @@ -16,6 +16,7 @@ import React, { ReactNode } from 'react'; import { + StylesProvider as Mui4StylesProvider, Theme as Mui4Theme, ThemeProvider as Mui4Provider, } from '@material-ui/core/styles'; @@ -24,9 +25,21 @@ import { Theme as Mui5Theme, ThemeProvider as Mui5Provider, } from '@mui/material/styles'; -import CssBaseline from '@mui/material/CssBaseline'; +import { + StylesProvider as Mui5StylesProvider, + createGenerateClassName, +} from '@mui/styles'; +import Mui4CssBaseline from '@material-ui/core/CssBaseline'; +import Mui5CssBaseline from '@mui/material/CssBaseline'; import { UnifiedTheme } from './types'; +const generateV4ClassName = createGenerateClassName({ + seed: 'm4', +}); +const generateV5ClassName = createGenerateClassName({ + seed: 'm5', +}); + /** * Props for {@link UnifiedThemeProvider}. * @@ -46,28 +59,42 @@ export interface UnifiedThemeProviderProps { export function UnifiedThemeProvider( props: UnifiedThemeProviderProps, ): JSX.Element { - const { children, theme, noCssBaseline } = props; + const { children, theme, noCssBaseline = false } = props; - let result = noCssBaseline ? ( - <>{children} - ) : ( + const v4Theme = theme.getTheme('v4'); + const v5Theme = theme.getTheme('v5'); + + let cssBaseline: JSX.Element | undefined = undefined; + if (!noCssBaseline) { + if (v5Theme) { + cssBaseline = ; + } else if (v4Theme) { + cssBaseline = ; + } + } + + let result = ( <> - + {cssBaseline} {children} ); - const v4Theme = theme.getTheme('v4'); if (v4Theme) { - result = {result}; + result = ( + + {result} + + ); } - const v5Theme = theme.getTheme('v5'); if (v5Theme) { result = ( - - {result} - + + + {result} + + ); } From 033754c242cd634ec52760e491b05c3f6981b06b Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sun, 1 Jan 2023 18:31:02 +0100 Subject: [PATCH 190/213] theme: explicit background paper color Signed-off-by: Patrik Oldsberg --- packages/theme/src/base/palettes.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/theme/src/base/palettes.ts b/packages/theme/src/base/palettes.ts index f049237f60..c230ce94c0 100644 --- a/packages/theme/src/base/palettes.ts +++ b/packages/theme/src/base/palettes.ts @@ -25,6 +25,7 @@ export const palettes = { mode: 'light' as const, background: { default: '#F8F8F8', + paper: '#FAFAFA', }, status: { ok: '#1DB954', @@ -94,6 +95,7 @@ export const palettes = { mode: 'dark' as const, background: { default: '#333333', + paper: '#424242', }, status: { ok: '#71CF88', From 3780167d8e81d37a42b624ba331f060d100dc62f Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sun, 1 Jan 2023 19:16:50 +0100 Subject: [PATCH 191/213] graphiql: migrate to mui 5 Signed-off-by: Patrik Oldsberg --- plugins/graphiql/package.json | 7 ++++--- .../GraphiQLBrowser/GraphiQLBrowser.tsx | 15 ++++++++++----- .../src/components/GraphiQLPage/GraphiQLPage.tsx | 2 +- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/plugins/graphiql/package.json b/plugins/graphiql/package.json index d5dae8c2ec..6cc65e8e80 100644 --- a/plugins/graphiql/package.json +++ b/plugins/graphiql/package.json @@ -35,9 +35,10 @@ "@backstage/core-components": "workspace:^", "@backstage/core-plugin-api": "workspace:^", "@backstage/theme": "workspace:^", - "@material-ui/core": "^4.12.2", - "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "4.0.0-alpha.61", + "@mui/icons-material": "^5.11.0", + "@mui/lab": "5.0.0-alpha.114", + "@mui/material": "^5.11.2", + "@mui/styles": "^5.11.2", "graphiql": "^1.5.12", "graphql": "^16.0.0", "graphql-ws": "^5.4.1", diff --git a/plugins/graphiql/src/components/GraphiQLBrowser/GraphiQLBrowser.tsx b/plugins/graphiql/src/components/GraphiQLBrowser/GraphiQLBrowser.tsx index dd38f513be..058801dabf 100644 --- a/plugins/graphiql/src/components/GraphiQLBrowser/GraphiQLBrowser.tsx +++ b/plugins/graphiql/src/components/GraphiQLBrowser/GraphiQLBrowser.tsx @@ -15,18 +15,18 @@ */ import React, { useState, Suspense } from 'react'; -import { Tabs, Tab, makeStyles, Typography, Divider } from '@material-ui/core'; +import { Tabs, Tab, Typography, Divider } from '@mui/material'; +import makeStyles from '@mui/styles/makeStyles'; import 'graphiql/graphiql.css'; import { StorageBucket } from '../../lib/storage'; import { GraphQLEndpoint } from '../../lib/api'; -import { BackstageTheme } from '@backstage/theme'; import { Progress } from '@backstage/core-components'; const GraphiQL = React.lazy(() => import('graphiql').then(m => ({ default: m.GraphiQL })), ); -const useStyles = makeStyles(theme => ({ +const useStyles = makeStyles(theme => ({ root: { height: '100%', display: 'flex', @@ -69,10 +69,15 @@ export const GraphiQLBrowser = (props: GraphiQLBrowserProps) => { classes={{ root: classes.tabs }} value={tabIndex} onChange={(_, value) => setTabIndex(value)} - indicatorColor="primary" + textColor="inherit" > {endpoints.map(({ title }, index) => ( - + ))} diff --git a/plugins/graphiql/src/components/GraphiQLPage/GraphiQLPage.tsx b/plugins/graphiql/src/components/GraphiQLPage/GraphiQLPage.tsx index 0b4399948a..b075e0d478 100644 --- a/plugins/graphiql/src/components/GraphiQLPage/GraphiQLPage.tsx +++ b/plugins/graphiql/src/components/GraphiQLPage/GraphiQLPage.tsx @@ -19,7 +19,7 @@ import useAsync from 'react-use/lib/useAsync'; import 'graphiql/graphiql.css'; import { graphQlBrowseApiRef } from '../../lib/api'; import { GraphiQLBrowser } from '../GraphiQLBrowser'; -import { Typography } from '@material-ui/core'; +import { Typography } from '@mui/material'; import { Content, Header, From 623ed7527b9b503ddcdd3ecd0f792da6c019e057 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sun, 1 Jan 2023 19:29:43 +0100 Subject: [PATCH 192/213] theme: update API report Signed-off-by: Patrik Oldsberg --- packages/theme/api-report.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/theme/api-report.md b/packages/theme/api-report.md index e8f7ef30f8..763cc48e41 100644 --- a/packages/theme/api-report.md +++ b/packages/theme/api-report.md @@ -221,6 +221,7 @@ export const palettes: { mode: 'light'; background: { default: string; + paper: string; }; status: { ok: string; @@ -289,6 +290,7 @@ export const palettes: { mode: 'dark'; background: { default: string; + paper: string; }; status: { ok: string; From 1268ec01d9bcd32b14d19d4d1a8d59a16ae3ff6b Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sun, 1 Jan 2023 22:00:13 +0100 Subject: [PATCH 193/213] theme: remove nonce field from react type workaround to unbreak material-table Signed-off-by: Patrik Oldsberg --- packages/theme/src/v5/types.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/theme/src/v5/types.ts b/packages/theme/src/v5/types.ts index 5369cda37b..293383180a 100644 --- a/packages/theme/src/v5/types.ts +++ b/packages/theme/src/v5/types.ts @@ -43,7 +43,6 @@ declare global { interface DOMAttributes { onResize?: (event: Event) => void; onResizeCapture?: (event: Event) => void; - nonce?: string | undefined; } } } From c545211e917aba1a1cfafaaa1fcac7762dd997eb Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sun, 1 Jan 2023 22:01:11 +0100 Subject: [PATCH 194/213] yarn.lock: dedup jss Signed-off-by: Patrik Oldsberg --- packages/theme/package.json | 4 - yarn.lock | 294 ++++++++++-------------------------- 2 files changed, 77 insertions(+), 221 deletions(-) diff --git a/packages/theme/package.json b/packages/theme/package.json index dd741581a4..b47c5e256d 100644 --- a/packages/theme/package.json +++ b/packages/theme/package.json @@ -38,10 +38,6 @@ "@mui/material": "^5.11.2", "@mui/styles": "^5.11.2" }, - "peerDependencies": { - "@types/react": "^16.13.1 || ^17.0.0", - "react": "^16.13.1 || ^17.0.0" - }, "peerDependencies": { "react": "^16.13.1 || ^17.0.0", "react-dom": "^16.13.1 || ^17.0.0" diff --git a/yarn.lock b/yarn.lock index 784c38bb73..9e1a19ab4f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1,3 +1,6 @@ +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + __metadata: version: 6 cacheKey: 8 @@ -3469,15 +3472,6 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.14.6, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.18.6, @babel/runtime@npm:^7.18.9, @babel/runtime@npm:^7.20.1, @babel/runtime@npm:^7.20.6, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.4.4, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.0, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": - version: 7.20.7 - resolution: "@babel/runtime@npm:7.20.7" - dependencies: - regenerator-runtime: ^0.13.11 - checksum: 4629ce5c46f06cca9cfb9b7fc00d48003335a809888e2b91ec2069a2dcfbfef738480cff32ba81e0b7c290f8918e5c22ddcf2b710001464ee84ba62c7e32a3a3 - languageName: node - linkType: hard - "@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.14.6, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.18.6, @babel/runtime@npm:^7.2.0, @babel/runtime@npm:^7.20.1, @babel/runtime@npm:^7.20.13, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.4.4, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.0, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": version: 7.21.0 resolution: "@babel/runtime@npm:7.21.0" @@ -3487,12 +3481,12 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.14.6, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.18.6, @babel/runtime@npm:^7.2.0, @babel/runtime@npm:^7.20.1, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.4.4, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.0, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": - version: 7.21.0 - resolution: "@babel/runtime@npm:7.21.0" +"@babel/runtime@npm:^7.20.6": + version: 7.20.7 + resolution: "@babel/runtime@npm:7.20.7" dependencies: regenerator-runtime: ^0.13.11 - checksum: 7b33e25bfa9e0e1b9e8828bb61b2d32bdd46b41b07ba7cb43319ad08efc6fda8eb89445193e67d6541814627df0ca59122c0ea795e412b99c5183a0540d338ab + checksum: 4629ce5c46f06cca9cfb9b7fc00d48003335a809888e2b91ec2069a2dcfbfef738480cff32ba81e0b7c290f8918e5c22ddcf2b710001464ee84ba62c7e32a3a3 languageName: node linkType: hard @@ -6975,9 +6969,10 @@ __metadata: "@backstage/dev-utils": "workspace:^" "@backstage/test-utils": "workspace:^" "@backstage/theme": "workspace:^" - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.61 + "@mui/icons-material": ^5.11.0 + "@mui/lab": 5.0.0-alpha.114 + "@mui/material": ^5.11.2 + "@mui/styles": ^5.11.2 "@testing-library/dom": ^8.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 @@ -9647,9 +9642,10 @@ __metadata: "@material-ui/core": ^4.12.2 "@mui/material": ^5.11.2 "@mui/styles": ^5.11.2 - peerDependencies: "@types/react": ^16.13.1 || ^17.0.0 + peerDependencies: react: ^16.13.1 || ^17.0.0 + react-dom: ^16.13.1 || ^17.0.0 languageName: unknown linkType: soft @@ -10224,16 +10220,7 @@ __metadata: languageName: node linkType: hard -"@emotion/is-prop-valid@npm:^1.1.0": - version: 1.1.2 - resolution: "@emotion/is-prop-valid@npm:1.1.2" - dependencies: - "@emotion/memoize": ^0.7.4 - checksum: 58b1f2d429a589f8f5bc2c33a8732cbb7bbcb17131a103511ef9a94ac754d7eeb53d627f947da480cd977f9d419fd92e244991680292f3287204159652745707 - languageName: node - linkType: hard - -"@emotion/is-prop-valid@npm:^1.2.0": +"@emotion/is-prop-valid@npm:^1.1.0, @emotion/is-prop-valid@npm:^1.2.0": version: 1.2.0 resolution: "@emotion/is-prop-valid@npm:1.2.0" dependencies: @@ -10242,13 +10229,6 @@ __metadata: languageName: node linkType: hard -"@emotion/memoize@npm:^0.7.4": - version: 0.7.5 - resolution: "@emotion/memoize@npm:0.7.5" - checksum: 83da8d4a7649a92c72f960817692bc6be13cc13e107b9f7e878d63766525ed4402881bfeb3cda61145c050281e7e260f114a0a2870515527346f2ef896b915b3 - languageName: node - linkType: hard - "@emotion/memoize@npm:^0.8.0": version: 0.8.0 resolution: "@emotion/memoize@npm:0.8.0" @@ -10387,13 +10367,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm64@npm:0.16.14": - version: 0.16.14 - resolution: "@esbuild/android-arm64@npm:0.16.14" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/android-arm64@npm:0.16.17": version: 0.16.17 resolution: "@esbuild/android-arm64@npm:0.16.17" @@ -12944,6 +12917,52 @@ __metadata: languageName: node linkType: hard +"@mui/icons-material@npm:^5.11.0": + version: 5.11.0 + resolution: "@mui/icons-material@npm:5.11.0" + dependencies: + "@babel/runtime": ^7.20.6 + peerDependencies: + "@mui/material": ^5.0.0 + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 764c1185b3432f0228f3c5217b0e218b10f106fa96d305dfc62c0ef5afd2a7a087b0d664fd0a8171282e195c18d3ee073d5f037901a2bed1a1519a70fbb0501c + languageName: node + linkType: hard + +"@mui/lab@npm:5.0.0-alpha.114": + version: 5.0.0-alpha.114 + resolution: "@mui/lab@npm:5.0.0-alpha.114" + dependencies: + "@babel/runtime": ^7.20.7 + "@mui/base": 5.0.0-alpha.112 + "@mui/system": ^5.11.2 + "@mui/types": ^7.2.3 + "@mui/utils": ^5.11.2 + clsx: ^1.2.1 + prop-types: ^15.8.1 + react-is: ^18.2.0 + peerDependencies: + "@emotion/react": ^11.5.0 + "@emotion/styled": ^11.3.0 + "@mui/material": ^5.0.0 + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@emotion/react": + optional: true + "@emotion/styled": + optional: true + "@types/react": + optional: true + checksum: 0b6441e7f7a69e2a6910f044ef2a222462a219f61e3a05c023484508e7f14a5fe6baeddf08b37bceab357c7cb0eed90324ac42ecd8e59a6eb6e1c801ea01504a + languageName: node + linkType: hard + "@mui/material@npm:^5.11.2": version: 5.11.2 resolution: "@mui/material@npm:5.11.2" @@ -16986,16 +17005,7 @@ __metadata: languageName: node linkType: hard -"@types/react-transition-group@npm:^4.2.0": - version: 4.2.4 - resolution: "@types/react-transition-group@npm:4.2.4" - dependencies: - "@types/react": "*" - checksum: a8abb3ad3c6e0575c630b591503a78ae3a94e21d1285905a49c36168e5d3de68b0886e2c6d75b751e30f2dc6e4245351cde30e4b3ff2649aec345f2088961e2c - languageName: node - linkType: hard - -"@types/react-transition-group@npm:^4.4.5": +"@types/react-transition-group@npm:^4.2.0, @types/react-transition-group@npm:^4.4.5": version: 4.4.5 resolution: "@types/react-transition-group@npm:4.4.5" dependencies: @@ -20523,14 +20533,7 @@ __metadata: languageName: node linkType: hard -"clsx@npm:^1.0.2, clsx@npm:^1.0.4, clsx@npm:^1.1.1": - version: 1.2.1 - resolution: "clsx@npm:1.2.1" - checksum: 30befca8019b2eb7dbad38cff6266cf543091dae2825c856a62a8ccf2c3ab9c2907c4d12b288b73101196767f66812365400a227581484a05f968b0307cfaf12 - languageName: node - linkType: hard - -"clsx@npm:^1.2.1": +"clsx@npm:^1.0.2, clsx@npm:^1.0.4, clsx@npm:^1.1.1, clsx@npm:^1.2.1": version: 1.2.1 resolution: "clsx@npm:1.2.1" checksum: 30befca8019b2eb7dbad38cff6266cf543091dae2825c856a62a8ccf2c3ab9c2907c4d12b288b73101196767f66812365400a227581484a05f968b0307cfaf12 @@ -21113,22 +21116,13 @@ __metadata: languageName: node linkType: hard -"convert-source-map@npm:^1.5.0": +"convert-source-map@npm:^1.5.0, convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0": version: 1.9.0 resolution: "convert-source-map@npm:1.9.0" checksum: dc55a1f28ddd0e9485ef13565f8f756b342f9a46c4ae18b843fe3c30c675d058d6a4823eff86d472f187b176f0adf51ea7b69ea38be34be4a63cbbf91b0593c8 languageName: node linkType: hard -"convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0": - version: 1.7.0 - resolution: "convert-source-map@npm:1.7.0" - dependencies: - safe-buffer: ~5.1.1 - checksum: bcd2e3ea7d37f96b85a6e362c8a89402ccc73757256e3ee53aa2c22fe915adb854c66b1f81111be815a3a6a6ce3c58e8001858e883c9d5b4fe08a853fa865967 - languageName: node - linkType: hard - "convert-source-map@npm:^2.0.0": version: 2.0.0 resolution: "convert-source-map@npm:2.0.0" @@ -21745,14 +21739,7 @@ __metadata: languageName: node linkType: hard -"csstype@npm:^3.0.2, csstype@npm:^3.0.6": - version: 3.0.7 - resolution: "csstype@npm:3.0.7" - checksum: 2f30c993be570c6d0de334b979a718370ee9bca9569c90340f13e05e542146c55b22e87372b858c061f9f8ded494da7a4715957882f9356cf9993ba11ab6f09c - languageName: node - linkType: hard - -"csstype@npm:^3.1.1": +"csstype@npm:^3.0.2, csstype@npm:^3.0.6, csstype@npm:^3.1.1": version: 3.1.1 resolution: "csstype@npm:3.1.1" checksum: 1f7b4f5fdd955b7444b18ebdddf3f5c699159f13e9cf8ac9027ae4a60ae226aef9bbb14a6e12ca7dba3358b007cee6354b116e720262867c398de6c955ea451d @@ -26387,16 +26374,7 @@ __metadata: languageName: node linkType: hard -"hoist-non-react-statics@npm:^3.0.0, hoist-non-react-statics@npm:^3.2.1, hoist-non-react-statics@npm:^3.3.0, hoist-non-react-statics@npm:^3.3.2": - version: 3.3.2 - resolution: "hoist-non-react-statics@npm:3.3.2" - dependencies: - react-is: ^16.7.0 - checksum: b1538270429b13901ee586aa44f4cc3ecd8831c061d06cb8322e50ea17b3f5ce4d0e2e66394761e6c8e152cd8c34fb3b4b690116c6ce2bd45b18c746516cb9e8 - languageName: node - linkType: hard - -"hoist-non-react-statics@npm:^3.0.0, hoist-non-react-statics@npm:^3.3.0, hoist-non-react-statics@npm:^3.3.1, hoist-non-react-statics@npm:^3.3.2": +"hoist-non-react-statics@npm:^3.0.0, hoist-non-react-statics@npm:^3.2.1, hoist-non-react-statics@npm:^3.3.0, hoist-non-react-statics@npm:^3.3.1, hoist-non-react-statics@npm:^3.3.2": version: 3.3.2 resolution: "hoist-non-react-statics@npm:3.3.2" dependencies: @@ -26935,15 +26913,6 @@ __metadata: languageName: node linkType: hard -"indefinite-observable@npm:^2.0.1": - version: 2.0.1 - resolution: "indefinite-observable@npm:2.0.1" - dependencies: - symbol-observable: 1.2.0 - checksum: b4305c999b7596901f8798e569b8faa030361dfb77f8b720e229558a29f544826f7e8987c55cc2a84c37ff2723594a965b96a40a6c71daae92b918f3eb393077 - languageName: node - linkType: hard - "indent-string@npm:^4.0.0": version: 4.0.0 resolution: "indent-string@npm:4.0.0" @@ -29276,18 +29245,7 @@ __metadata: languageName: node linkType: hard -"jss-plugin-camel-case@npm:^10.5.1": - version: 10.6.0 - resolution: "jss-plugin-camel-case@npm:10.6.0" - dependencies: - "@babel/runtime": ^7.3.1 - hyphenate-style-name: ^1.0.3 - jss: 10.6.0 - checksum: 75c23826deef63c3603cfb47331d1eaf9feeafd097bd115a076f2ee9fb696855d3f18b3f41455a046120fddf0ea11985259c1b8b8a37b3556f4de1a1c83affd5 - languageName: node - linkType: hard - -"jss-plugin-camel-case@npm:^10.9.2": +"jss-plugin-camel-case@npm:^10.5.1, jss-plugin-camel-case@npm:^10.9.2": version: 10.9.2 resolution: "jss-plugin-camel-case@npm:10.9.2" dependencies: @@ -29298,17 +29256,7 @@ __metadata: languageName: node linkType: hard -"jss-plugin-default-unit@npm:^10.5.1": - version: 10.6.0 - resolution: "jss-plugin-default-unit@npm:10.6.0" - dependencies: - "@babel/runtime": ^7.3.1 - jss: 10.6.0 - checksum: 7ae36fadf4f206a16e49c40806ef92ba1f0e60395488ab8ad4df96796b408013b38ea5ed975155ecd7833a42a96c8d5cb1e90aef011279816633e60f807ec330 - languageName: node - linkType: hard - -"jss-plugin-default-unit@npm:^10.9.2": +"jss-plugin-default-unit@npm:^10.5.1, jss-plugin-default-unit@npm:^10.9.2": version: 10.9.2 resolution: "jss-plugin-default-unit@npm:10.9.2" dependencies: @@ -29318,17 +29266,7 @@ __metadata: languageName: node linkType: hard -"jss-plugin-global@npm:^10.5.1": - version: 10.6.0 - resolution: "jss-plugin-global@npm:10.6.0" - dependencies: - "@babel/runtime": ^7.3.1 - jss: 10.6.0 - checksum: 7aab58408c77071c571dd2c2132edad8d40b683513a8de534f0ec7f63926fd9d9fcf6bdda82103eb541452a723b992f061720f8e5cf2014acb7f6bbbde111f56 - languageName: node - linkType: hard - -"jss-plugin-global@npm:^10.9.2": +"jss-plugin-global@npm:^10.5.1, jss-plugin-global@npm:^10.9.2": version: 10.9.2 resolution: "jss-plugin-global@npm:10.9.2" dependencies: @@ -29338,18 +29276,7 @@ __metadata: languageName: node linkType: hard -"jss-plugin-nested@npm:^10.5.1": - version: 10.6.0 - resolution: "jss-plugin-nested@npm:10.6.0" - dependencies: - "@babel/runtime": ^7.3.1 - jss: 10.6.0 - tiny-warning: ^1.0.2 - checksum: 38095127e8b5ddb0a33ccaf61a4d89dc1b0f78e6d06d079a47a14bca4aed4e885f1957d83f11c5da08b4249b2c629e8bc62b2996f1674ca1302575a7b2b11171 - languageName: node - linkType: hard - -"jss-plugin-nested@npm:^10.9.2": +"jss-plugin-nested@npm:^10.5.1, jss-plugin-nested@npm:^10.9.2": version: 10.9.2 resolution: "jss-plugin-nested@npm:10.9.2" dependencies: @@ -29360,17 +29287,7 @@ __metadata: languageName: node linkType: hard -"jss-plugin-props-sort@npm:^10.5.1": - version: 10.6.0 - resolution: "jss-plugin-props-sort@npm:10.6.0" - dependencies: - "@babel/runtime": ^7.3.1 - jss: 10.6.0 - checksum: 2917ff301e667f75efa15df865a860a50d4319d415d1169c213e66b464edc2b37b6f428be2d974ccdde7c8d61c50123f18e788143a96eacc2a1c42ad250ae375 - languageName: node - linkType: hard - -"jss-plugin-props-sort@npm:^10.9.2": +"jss-plugin-props-sort@npm:^10.5.1, jss-plugin-props-sort@npm:^10.9.2": version: 10.9.2 resolution: "jss-plugin-props-sort@npm:10.9.2" dependencies: @@ -29380,18 +29297,7 @@ __metadata: languageName: node linkType: hard -"jss-plugin-rule-value-function@npm:^10.5.1": - version: 10.6.0 - resolution: "jss-plugin-rule-value-function@npm:10.6.0" - dependencies: - "@babel/runtime": ^7.3.1 - jss: 10.6.0 - tiny-warning: ^1.0.2 - checksum: 709e1ce0afdc39a52cb78e371fef626f933e99992790b15771d85056176bdf69365d62cfed6ce95434752cc1a1e7e05a6f2548e4cd5999808d50a28174315be3 - languageName: node - linkType: hard - -"jss-plugin-rule-value-function@npm:^10.9.2": +"jss-plugin-rule-value-function@npm:^10.5.1, jss-plugin-rule-value-function@npm:^10.9.2": version: 10.9.2 resolution: "jss-plugin-rule-value-function@npm:10.9.2" dependencies: @@ -29402,18 +29308,7 @@ __metadata: languageName: node linkType: hard -"jss-plugin-vendor-prefixer@npm:^10.5.1": - version: 10.6.0 - resolution: "jss-plugin-vendor-prefixer@npm:10.6.0" - dependencies: - "@babel/runtime": ^7.3.1 - css-vendor: ^2.0.8 - jss: 10.6.0 - checksum: 9db048022ee2fb79a223a9f1be5976e131715057e3c0200cfcead9b9f8625023942534afa261e3c967cee6ad716bfd7d4a2f356556178f60f4eddcf83bcd8856 - languageName: node - linkType: hard - -"jss-plugin-vendor-prefixer@npm:^10.9.2": +"jss-plugin-vendor-prefixer@npm:^10.5.1, jss-plugin-vendor-prefixer@npm:^10.9.2": version: 10.9.2 resolution: "jss-plugin-vendor-prefixer@npm:10.9.2" dependencies: @@ -29444,20 +29339,7 @@ __metadata: languageName: node linkType: hard -"jss@npm:10.6.0": - version: 10.6.0 - resolution: "jss@npm:10.6.0" - dependencies: - "@babel/runtime": ^7.3.1 - csstype: ^3.0.2 - indefinite-observable: ^2.0.1 - is-in-browser: ^1.1.3 - tiny-warning: ^1.0.2 - checksum: 529edd871ddf059beef55ee0f974ad8436fbcf050d6538e6d2d7edab53ce2c09983d2f863e42a1473dd0e42a0447e9912bce6706bb0e539226d92cdaad128d46 - languageName: node - linkType: hard - -"jss@npm:10.9.2, jss@npm:^10.5.1, jss@npm:^10.9.2, jss@npm:~10.9.0": +"jss@npm:10.9.2": version: 10.9.2 resolution: "jss@npm:10.9.2" dependencies: @@ -29465,11 +29347,11 @@ __metadata: csstype: ^3.0.2 is-in-browser: ^1.1.3 tiny-warning: ^1.0.2 - checksum: ecf71971df42729668c283e432e841349b7fdbe52e520f7704991cf4a738fd2451ec0feeb25c12cdc5addf7facecf838e74e62936fd461fb4c99f23d54a4792d + checksum: 7ae5cd2f8602bf197ec90251d774b9f10d55eb2db0854ac78dc7fb6983828c202e8eb0d5c8c59c73b2f64718ebd33d6063afa799d625a995986a22dc1cc27230 languageName: node linkType: hard -"jss@npm:^10.5.1, jss@npm:~10.10.0": +"jss@npm:^10.5.1, jss@npm:^10.9.2, jss@npm:~10.10.0": version: 10.10.0 resolution: "jss@npm:10.10.0" dependencies: @@ -35743,22 +35625,7 @@ __metadata: languageName: node linkType: hard -"react-transition-group@npm:^4.0.0, react-transition-group@npm:^4.4.0": - version: 4.4.1 - resolution: "react-transition-group@npm:4.4.1" - dependencies: - "@babel/runtime": ^7.5.5 - dom-helpers: ^5.0.1 - loose-envify: ^1.4.0 - prop-types: ^15.6.2 - peerDependencies: - react: ">=16.6.0" - react-dom: ">=16.6.0" - checksum: 0bcd8af483709832e318dcef84c26ebddeb866bf4f58010286367ef0c1e7c5106e00cfc65688b9102414cb3d572c63909c2eb7ea972b4420fc70a78c10b6e8ad - languageName: node - linkType: hard - -"react-transition-group@npm:^4.4.5": +"react-transition-group@npm:^4.0.0, react-transition-group@npm:^4.4.0, react-transition-group@npm:^4.4.5": version: 4.4.5 resolution: "react-transition-group@npm:4.4.5" dependencies: @@ -38571,20 +38438,13 @@ __metadata: languageName: node linkType: hard -"stylis@npm:4.1.3": +"stylis@npm:4.1.3, stylis@npm:^4.0.6": version: 4.1.3 resolution: "stylis@npm:4.1.3" checksum: d04dbffcb9bf2c5ca8d8dc09534203c75df3bf711d33973ea22038a99cc475412a350b661ebd99cbc01daa50d7eedcf0d130d121800eb7318759a197023442a6 languageName: node linkType: hard -"stylis@npm:^4.0.6": - version: 4.0.7 - resolution: "stylis@npm:4.0.7" - checksum: 4f9fdc4b131b54cdc5988aaf23e796fcf77927c9d2f3147f6b23b8f3a9568eb38ce91b338b9d1b50a50391da32969c34ff68ff971c453fc3a5af89941c60ab06 - languageName: node - linkType: hard - "subscriptions-transport-ws@npm:^0.11.0": version: 0.11.0 resolution: "subscriptions-transport-ws@npm:0.11.0" From d2d90b1d30c1227a8f8cbfd97fe281e60ef30cfc Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 7 Jan 2023 15:56:01 +0100 Subject: [PATCH 195/213] theme: make MUI v4 an optional peer dep Signed-off-by: Patrik Oldsberg --- packages/theme/package.json | 8 +++++++- yarn.lock | 12 +++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/packages/theme/package.json b/packages/theme/package.json index b47c5e256d..3d9e6fa132 100644 --- a/packages/theme/package.json +++ b/packages/theme/package.json @@ -34,14 +34,20 @@ "dependencies": { "@emotion/react": "^11.10.5", "@emotion/styled": "^11.10.5", - "@material-ui/core": "^4.12.2", "@mui/material": "^5.11.2", "@mui/styles": "^5.11.2" }, "peerDependencies": { + "@material-ui/core": "^4.12.2", + "@types/react": "^16.13.1 || ^17.0.0", "react": "^16.13.1 || ^17.0.0", "react-dom": "^16.13.1 || ^17.0.0" }, + "peerDependenciesMeta": { + "@material-ui/core": { + "optional": true + } + }, "devDependencies": { "@backstage/cli": "workspace:^", "@types/react": "^16.13.1 || ^17.0.0" diff --git a/yarn.lock b/yarn.lock index 9e1a19ab4f..2c0ecbd030 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9639,13 +9639,23 @@ __metadata: "@backstage/cli": "workspace:^" "@emotion/react": ^11.10.5 "@emotion/styled": ^11.10.5 - "@material-ui/core": ^4.12.2 "@mui/material": ^5.11.2 "@mui/styles": ^5.11.2 +<<<<<<< HEAD +======= + peerDependencies: + "@material-ui/core": ^4.12.2 +>>>>>>> f1f6a256b36 (theme: make MUI v4 an optional peer dep) "@types/react": ^16.13.1 || ^17.0.0 peerDependencies: react: ^16.13.1 || ^17.0.0 +<<<<<<< HEAD react-dom: ^16.13.1 || ^17.0.0 +======= + peerDependenciesMeta: + "@material-ui/core": + optional: true +>>>>>>> f1f6a256b36 (theme: make MUI v4 an optional peer dep) languageName: unknown linkType: soft From 139207fe213645c329d2b8a6294f542fcb638bd7 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 7 Jan 2023 15:57:55 +0100 Subject: [PATCH 196/213] theme: explicit type imports from MUI v4 Signed-off-by: Patrik Oldsberg --- packages/theme/src/unified/UnifiedTheme.tsx | 6 +++--- .../src/unified/UnifiedThemeProvider.tsx | 2 +- packages/theme/src/unified/overrides.ts | 4 ++-- packages/theme/src/v4/baseTheme.ts | 7 ++++++- packages/theme/src/v4/types.ts | 21 +++++++++++-------- 5 files changed, 24 insertions(+), 16 deletions(-) diff --git a/packages/theme/src/unified/UnifiedTheme.tsx b/packages/theme/src/unified/UnifiedTheme.tsx index dbb50c979e..bb31d88016 100644 --- a/packages/theme/src/unified/UnifiedTheme.tsx +++ b/packages/theme/src/unified/UnifiedTheme.tsx @@ -14,12 +14,12 @@ * limitations under the License. */ -import { +import { createTheme as createV4Theme } from '@material-ui/core/styles'; +import type { Theme as Mui4Theme, - createTheme as createV4Theme, ThemeOptions as ThemeOptionsV4, } from '@material-ui/core/styles'; -import { PaletteOptions as PaletteOptionsV4 } from '@material-ui/core/styles/createPalette'; +import type { PaletteOptions as PaletteOptionsV4 } from '@material-ui/core/styles/createPalette'; import { PaletteOptions as PaletteOptionsV5 } from '@mui/material/styles/createPalette'; import { adaptV4Theme, diff --git a/packages/theme/src/unified/UnifiedThemeProvider.tsx b/packages/theme/src/unified/UnifiedThemeProvider.tsx index 75fcc3c6ae..60f28bc353 100644 --- a/packages/theme/src/unified/UnifiedThemeProvider.tsx +++ b/packages/theme/src/unified/UnifiedThemeProvider.tsx @@ -17,9 +17,9 @@ import React, { ReactNode } from 'react'; import { StylesProvider as Mui4StylesProvider, - Theme as Mui4Theme, ThemeProvider as Mui4Provider, } from '@material-ui/core/styles'; +import type { Theme as Mui4Theme } from '@material-ui/core/styles'; import { StyledEngineProvider, Theme as Mui5Theme, diff --git a/packages/theme/src/unified/overrides.ts b/packages/theme/src/unified/overrides.ts index db1fb54c87..7417fccedc 100644 --- a/packages/theme/src/unified/overrides.ts +++ b/packages/theme/src/unified/overrides.ts @@ -14,8 +14,8 @@ * limitations under the License. */ -import { Overrides } from '@material-ui/core/styles/overrides'; -import { ComponentsProps } from '@material-ui/core/styles/props'; +import type { Overrides } from '@material-ui/core/styles/overrides'; +import type { ComponentsProps } from '@material-ui/core/styles/props'; import { ComponentsOverrides, Theme, ThemeOptions } from '@mui/material/styles'; import { CSSProperties } from 'react'; diff --git a/packages/theme/src/v4/baseTheme.ts b/packages/theme/src/v4/baseTheme.ts index 411bcdf9a8..8143183ec0 100644 --- a/packages/theme/src/v4/baseTheme.ts +++ b/packages/theme/src/v4/baseTheme.ts @@ -16,7 +16,12 @@ import { Theme as Mui5Theme } from '@mui/material/styles'; import { createTheme as createMuiTheme } from '@material-ui/core/styles'; -import { GridProps, SwitchProps, Theme, ThemeOptions } from '@material-ui/core'; +import type { + GridProps, + SwitchProps, + Theme, + ThemeOptions, +} from '@material-ui/core'; import { Overrides } from '@material-ui/core/styles/overrides'; import { SimpleThemeOptions } from './types'; import { createBaseThemeOptions } from '../base'; diff --git a/packages/theme/src/v4/types.ts b/packages/theme/src/v4/types.ts index 24736e5d88..8bca5b8c3b 100644 --- a/packages/theme/src/v4/types.ts +++ b/packages/theme/src/v4/types.ts @@ -14,10 +14,13 @@ * limitations under the License. */ -import { Theme, ThemeOptions } from '@material-ui/core'; -import { - PaletteOptions, - Palette, +import type { + Theme as MuiTheme, + ThemeOptions as MuiThemeOptions, +} from '@material-ui/core'; +import type { + PaletteOptions as MuiPaletteOptions, + Palette as MuiPalette, } from '@material-ui/core/styles/createPalette'; import { BackstagePaletteAdditions, @@ -32,7 +35,7 @@ import { * @public * @deprecated This type is deprecated, the MUI Palette type is now always extended instead. */ -export type BackstagePalette = Palette & BackstagePaletteAdditions; +export type BackstagePalette = MuiPalette & BackstagePaletteAdditions; /** * The full Backstage palette options. @@ -40,7 +43,7 @@ export type BackstagePalette = Palette & BackstagePaletteAdditions; * @public * @deprecated This type is deprecated, the MUI PaletteOptions type is now always extended instead. */ -export type BackstagePaletteOptions = PaletteOptions & +export type BackstagePaletteOptions = MuiPaletteOptions & BackstagePaletteAdditions; /** @@ -55,7 +58,7 @@ export type BackstagePaletteOptions = PaletteOptions & * {@link BackstageTheme}. * */ -export interface BackstageThemeOptions extends ThemeOptions { +export interface BackstageThemeOptions extends MuiThemeOptions { palette: BackstagePaletteOptions; page: PageTheme; getPageTheme: (selector: PageThemeSelector) => PageTheme; @@ -67,7 +70,7 @@ export interface BackstageThemeOptions extends ThemeOptions { * @public * @deprecated This type is deprecated, the MUI Theme type is now always extended instead. */ -export interface BackstageTheme extends Theme { +export interface BackstageTheme extends MuiTheme { palette: BackstagePalette; page: PageTheme; getPageTheme: (selector: PageThemeSelector) => PageTheme; @@ -81,7 +84,7 @@ export interface BackstageTheme extends Theme { * @deprecated Use {@link BaseThemeOptionsInput} instead. */ export type SimpleThemeOptions = { - palette: PaletteOptions; + palette: MuiPaletteOptions; defaultPageTheme?: string; pageTheme?: Record; fontFamily?: string; From 4ef505886fdeba87e16269a4c6cfa6f0510d0716 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 7 Jan 2023 18:42:24 +0100 Subject: [PATCH 197/213] theme: optional loading of mui 4 runtime Signed-off-by: Patrik Oldsberg --- packages/theme/src/unified/UnifiedTheme.tsx | 18 ++++- .../src/unified/UnifiedThemeProvider.tsx | 23 +++--- packages/theme/src/v4/load.ts | 74 +++++++++++++++++++ 3 files changed, 102 insertions(+), 13 deletions(-) create mode 100644 packages/theme/src/v4/load.ts diff --git a/packages/theme/src/unified/UnifiedTheme.tsx b/packages/theme/src/unified/UnifiedTheme.tsx index bb31d88016..28da80424b 100644 --- a/packages/theme/src/unified/UnifiedTheme.tsx +++ b/packages/theme/src/unified/UnifiedTheme.tsx @@ -14,7 +14,6 @@ * limitations under the License. */ -import { createTheme as createV4Theme } from '@material-ui/core/styles'; import type { Theme as Mui4Theme, ThemeOptions as ThemeOptionsV4, @@ -32,6 +31,7 @@ import { PageTheme } from '../base/types'; import { defaultComponentThemes } from '../v5'; import { createBaseThemeOptions } from '../base/createBaseThemeOptions'; import { UnifiedTheme } from './types'; +import { maybeLoadMui4Styles } from '../v4/load'; export class UnifiedThemeHolder implements UnifiedTheme { #themes = new Map(); @@ -74,9 +74,14 @@ export function createUnifiedTheme(options: UnifiedThemeOptions): UnifiedTheme { const themeOptions = createBaseThemeOptions(options); const components = { ...defaultComponentThemes, ...options.components }; const v5Theme = createV5Theme({ ...themeOptions, components }); - const v4Overrides = transformV5ComponentThemesToV4(v5Theme, components); - const v4Theme = { ...createV4Theme(themeOptions), ...v4Overrides }; + const mui4Styles = maybeLoadMui4Styles(); + if (!mui4Styles) { + return new UnifiedThemeHolder(undefined, v5Theme); + } + + const v4Overrides = transformV5ComponentThemesToV4(v5Theme, components); + const v4Theme = { ...mui4Styles.createTheme(themeOptions), ...v4Overrides }; return new UnifiedThemeHolder(v4Theme, v5Theme); } @@ -89,8 +94,13 @@ export function createUnifiedTheme(options: UnifiedThemeOptions): UnifiedTheme { export function createUnifiedThemeFromV4( options: ThemeOptionsV4, ): UnifiedTheme { - const v4Theme = createV4Theme(options); const v5Theme = adaptV4Theme(options as any); + const mui4Styles = maybeLoadMui4Styles(); + if (!mui4Styles) { + return new UnifiedThemeHolder(undefined, v5Theme); + } + + const v4Theme = mui4Styles.createTheme(options); return new UnifiedThemeHolder(v4Theme, v5Theme); } diff --git a/packages/theme/src/unified/UnifiedThemeProvider.tsx b/packages/theme/src/unified/UnifiedThemeProvider.tsx index 60f28bc353..d28dfab292 100644 --- a/packages/theme/src/unified/UnifiedThemeProvider.tsx +++ b/packages/theme/src/unified/UnifiedThemeProvider.tsx @@ -15,10 +15,6 @@ */ import React, { ReactNode } from 'react'; -import { - StylesProvider as Mui4StylesProvider, - ThemeProvider as Mui4Provider, -} from '@material-ui/core/styles'; import type { Theme as Mui4Theme } from '@material-ui/core/styles'; import { StyledEngineProvider, @@ -29,9 +25,9 @@ import { StylesProvider as Mui5StylesProvider, createGenerateClassName, } from '@mui/styles'; -import Mui4CssBaseline from '@material-ui/core/CssBaseline'; import Mui5CssBaseline from '@mui/material/CssBaseline'; import { UnifiedTheme } from './types'; +import { maybeLoadMui4CssBaseline, maybeLoadMui4Styles } from '../v4/load'; const generateV4ClassName = createGenerateClassName({ seed: 'm4', @@ -69,7 +65,11 @@ export function UnifiedThemeProvider( if (v5Theme) { cssBaseline = ; } else if (v4Theme) { - cssBaseline = ; + const CssBaseline = maybeLoadMui4CssBaseline(); + if (!CssBaseline) { + throw new Error('Failed to load MUI 4 CssBaseline component'); + } + cssBaseline = ; } } @@ -81,10 +81,15 @@ export function UnifiedThemeProvider( ); if (v4Theme) { + const styles = maybeLoadMui4Styles(); + if (!styles) { + throw new Error('Failed to load MUI 4 styles package'); + } + const { StylesProvider, ThemeProvider } = styles; result = ( - - {result} - + + {result} + ); } diff --git a/packages/theme/src/v4/load.ts b/packages/theme/src/v4/load.ts new file mode 100644 index 0000000000..899aa8af93 --- /dev/null +++ b/packages/theme/src/v4/load.ts @@ -0,0 +1,74 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Loads MUI v4 styles if it is available. + * + * This should always be used to access MUI v4 at runtime in this + * package, to ensure that it's not brought into the bundle unnecessarily. + * + * @internal + */ +export function maybeLoadMui4Styles(): + | typeof import('@material-ui/core/styles') + | undefined { + if ( + __webpack_modules__[ + require.resolveWeak('@material-ui/core/styles') as number + ] + ) { + return __webpack_modules__[ + require.resolveWeak('@material-ui/core/styles') as number + ] as typeof import('@material-ui/core/styles'); + } + if (__webpack_modules__[require.resolveWeak('@material-ui/core') as number]) { + return __webpack_modules__[ + require.resolveWeak('@material-ui/core') as number + ] as typeof import('@material-ui/core'); + } + + return undefined; +} + +/** + * Loads the MUI v4 CssBaseline component if it is available. + * + * This should always be used to access MUI v4 at runtime in this + * package, to ensure that it's not brought into the bundle unnecessarily. + * + * @internal + */ +export function maybeLoadMui4CssBaseline(): + | typeof import('@material-ui/core/CssBaseline')['default'] + | undefined { + if ( + __webpack_modules__[ + require.resolveWeak('@material-ui/core/CssBaseline') as number + ] + ) { + const m = __webpack_modules__[ + require.resolveWeak('@material-ui/core/CssBaseline') as number + ] as typeof import('@material-ui/core/CssBaseline'); + return m.default; + } + if (__webpack_modules__[require.resolveWeak('@material-ui/core') as number]) { + const m = __webpack_modules__[ + require.resolveWeak('@material-ui/core') as number + ] as typeof import('@material-ui/core'); + return m.CssBaseline; + } + return undefined; +} From 1d75719a99d0eae4af05ad42d2efa822eaf12d41 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 9 Jan 2023 10:51:41 +0100 Subject: [PATCH 198/213] theme: fix two lingering pxpx Signed-off-by: Patrik Oldsberg --- packages/theme/src/v5/defaultComponentThemes.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/theme/src/v5/defaultComponentThemes.ts b/packages/theme/src/v5/defaultComponentThemes.ts index eec52e1c8b..bd29ad38c5 100644 --- a/packages/theme/src/v5/defaultComponentThemes.ts +++ b/packages/theme/src/v5/defaultComponentThemes.ts @@ -187,12 +187,12 @@ export const defaultComponentThemes: ThemeOptions['components'] = { color: theme.palette.grey[500], width: theme.spacing(3), height: theme.spacing(3), - margin: `0 ${theme.spacing(0.75)}px 0 -${theme.spacing(0.75)}`, + margin: `0 ${theme.spacing(0.75)} 0 -${theme.spacing(0.75)}`, }), deleteIconSmall: ({ theme }) => ({ width: theme.spacing(2), height: theme.spacing(2), - margin: `0 ${theme.spacing(0.5)}px 0 -${theme.spacing(0.5)}`, + margin: `0 ${theme.spacing(0.5)} 0 -${theme.spacing(0.5)}`, }), }, }, From d65e6a542316819ed99d733fed253c4438792533 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 26 Apr 2023 17:41:55 +0200 Subject: [PATCH 199/213] yarn lock fixes Signed-off-by: Patrik Oldsberg --- yarn.lock | 21 +++------------------ 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/yarn.lock b/yarn.lock index 2c0ecbd030..fd6d623b4f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3472,7 +3472,7 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.14.6, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.18.6, @babel/runtime@npm:^7.2.0, @babel/runtime@npm:^7.20.1, @babel/runtime@npm:^7.20.13, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.4.4, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.0, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": +"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.14.6, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.18.6, @babel/runtime@npm:^7.2.0, @babel/runtime@npm:^7.20.1, @babel/runtime@npm:^7.20.13, @babel/runtime@npm:^7.20.6, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.4.4, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.0, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": version: 7.21.0 resolution: "@babel/runtime@npm:7.21.0" dependencies: @@ -3481,15 +3481,6 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.20.6": - version: 7.20.7 - resolution: "@babel/runtime@npm:7.20.7" - dependencies: - regenerator-runtime: ^0.13.11 - checksum: 4629ce5c46f06cca9cfb9b7fc00d48003335a809888e2b91ec2069a2dcfbfef738480cff32ba81e0b7c290f8918e5c22ddcf2b710001464ee84ba62c7e32a3a3 - languageName: node - linkType: hard - "@babel/template@npm:^7.18.10, @babel/template@npm:^7.18.6, @babel/template@npm:^7.3.3": version: 7.18.10 resolution: "@babel/template@npm:7.18.10" @@ -9641,21 +9632,15 @@ __metadata: "@emotion/styled": ^11.10.5 "@mui/material": ^5.11.2 "@mui/styles": ^5.11.2 -<<<<<<< HEAD -======= - peerDependencies: - "@material-ui/core": ^4.12.2 ->>>>>>> f1f6a256b36 (theme: make MUI v4 an optional peer dep) "@types/react": ^16.13.1 || ^17.0.0 peerDependencies: + "@material-ui/core": ^4.12.2 + "@types/react": ^16.13.1 || ^17.0.0 react: ^16.13.1 || ^17.0.0 -<<<<<<< HEAD react-dom: ^16.13.1 || ^17.0.0 -======= peerDependenciesMeta: "@material-ui/core": optional: true ->>>>>>> f1f6a256b36 (theme: make MUI v4 an optional peer dep) languageName: unknown linkType: soft From c36f7b944946ded4b81a4fe0a1bc7c214b2e3faf Mon Sep 17 00:00:00 2001 From: Philipp Hugenroth Date: Wed, 26 Apr 2023 19:39:00 +0200 Subject: [PATCH 200/213] Make MUIv4 not optional - Fix smaller v5 errors in GraphQL Plugin Signed-off-by: Philipp Hugenroth --- .../OAuthRequestDialog/OAuthRequestDialog.tsx | 6 +- packages/theme/src/unified/UnifiedTheme.tsx | 10 +- .../src/unified/UnifiedThemeProvider.tsx | 16 +- plugins/graphiql/package.json | 2 +- .../GraphiQLBrowser/GraphiQLBrowser.tsx | 8 +- yarn.lock | 145 ++++++++++-------- 6 files changed, 108 insertions(+), 79 deletions(-) diff --git a/packages/core-components/src/components/OAuthRequestDialog/OAuthRequestDialog.tsx b/packages/core-components/src/components/OAuthRequestDialog/OAuthRequestDialog.tsx index 0159d8f503..8fdace3766 100644 --- a/packages/core-components/src/components/OAuthRequestDialog/OAuthRequestDialog.tsx +++ b/packages/core-components/src/components/OAuthRequestDialog/OAuthRequestDialog.tsx @@ -89,7 +89,11 @@ export function OAuthRequestDialog(_props: {}) { classes={{ root: classes.title }} id="oauth-req-dialog-title" > - + Login Required {authRedirect ? ( diff --git a/packages/theme/src/unified/UnifiedTheme.tsx b/packages/theme/src/unified/UnifiedTheme.tsx index 28da80424b..341b9e0a1f 100644 --- a/packages/theme/src/unified/UnifiedTheme.tsx +++ b/packages/theme/src/unified/UnifiedTheme.tsx @@ -14,9 +14,10 @@ * limitations under the License. */ -import type { +import { Theme as Mui4Theme, ThemeOptions as ThemeOptionsV4, + createTheme, } from '@material-ui/core/styles'; import type { PaletteOptions as PaletteOptionsV4 } from '@material-ui/core/styles/createPalette'; import { PaletteOptions as PaletteOptionsV5 } from '@mui/material/styles/createPalette'; @@ -75,13 +76,14 @@ export function createUnifiedTheme(options: UnifiedThemeOptions): UnifiedTheme { const components = { ...defaultComponentThemes, ...options.components }; const v5Theme = createV5Theme({ ...themeOptions, components }); - const mui4Styles = maybeLoadMui4Styles(); + // TODO: Not super relevant in the beginning + /* const mui4Styles = maybeLoadMui4Styles(); if (!mui4Styles) { return new UnifiedThemeHolder(undefined, v5Theme); - } + } */ const v4Overrides = transformV5ComponentThemesToV4(v5Theme, components); - const v4Theme = { ...mui4Styles.createTheme(themeOptions), ...v4Overrides }; + const v4Theme = { ...createTheme(themeOptions), ...v4Overrides }; return new UnifiedThemeHolder(v4Theme, v5Theme); } diff --git a/packages/theme/src/unified/UnifiedThemeProvider.tsx b/packages/theme/src/unified/UnifiedThemeProvider.tsx index d28dfab292..10277136e5 100644 --- a/packages/theme/src/unified/UnifiedThemeProvider.tsx +++ b/packages/theme/src/unified/UnifiedThemeProvider.tsx @@ -15,7 +15,11 @@ */ import React, { ReactNode } from 'react'; -import type { Theme as Mui4Theme } from '@material-ui/core/styles'; +import { + Theme as Mui4Theme, + StylesProvider, + ThemeProvider, +} from '@material-ui/core/styles'; import { StyledEngineProvider, Theme as Mui5Theme, @@ -27,7 +31,7 @@ import { } from '@mui/styles'; import Mui5CssBaseline from '@mui/material/CssBaseline'; import { UnifiedTheme } from './types'; -import { maybeLoadMui4CssBaseline, maybeLoadMui4Styles } from '../v4/load'; +import { CssBaseline } from '@material-ui/core'; const generateV4ClassName = createGenerateClassName({ seed: 'm4', @@ -65,10 +69,10 @@ export function UnifiedThemeProvider( if (v5Theme) { cssBaseline = ; } else if (v4Theme) { - const CssBaseline = maybeLoadMui4CssBaseline(); + /* const CssBaseline = maybeLoadMui4CssBaseline(); if (!CssBaseline) { throw new Error('Failed to load MUI 4 CssBaseline component'); - } + } */ cssBaseline = ; } } @@ -81,11 +85,11 @@ export function UnifiedThemeProvider( ); if (v4Theme) { - const styles = maybeLoadMui4Styles(); + /* const styles = maybeLoadMui4Styles(); if (!styles) { throw new Error('Failed to load MUI 4 styles package'); } - const { StylesProvider, ThemeProvider } = styles; + const { StylesProvider, ThemeProvider } = styles; */ result = ( {result} diff --git a/plugins/graphiql/package.json b/plugins/graphiql/package.json index 6cc65e8e80..3afd582bb5 100644 --- a/plugins/graphiql/package.json +++ b/plugins/graphiql/package.json @@ -37,7 +37,7 @@ "@backstage/theme": "workspace:^", "@mui/icons-material": "^5.11.0", "@mui/lab": "5.0.0-alpha.114", - "@mui/material": "^5.11.2", + "@mui/material": "^5.12.2", "@mui/styles": "^5.11.2", "graphiql": "^1.5.12", "graphql": "^16.0.0", diff --git a/plugins/graphiql/src/components/GraphiQLBrowser/GraphiQLBrowser.tsx b/plugins/graphiql/src/components/GraphiQLBrowser/GraphiQLBrowser.tsx index 058801dabf..fd084f1be8 100644 --- a/plugins/graphiql/src/components/GraphiQLBrowser/GraphiQLBrowser.tsx +++ b/plugins/graphiql/src/components/GraphiQLBrowser/GraphiQLBrowser.tsx @@ -69,15 +69,11 @@ export const GraphiQLBrowser = (props: GraphiQLBrowserProps) => { classes={{ root: classes.tabs }} value={tabIndex} onChange={(_, value) => setTabIndex(value)} + indicatorColor="secondary" textColor="inherit" > {endpoints.map(({ title }, index) => ( - + ))} diff --git a/yarn.lock b/yarn.lock index fd6d623b4f..38d9819ae7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3472,7 +3472,7 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.14.6, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.18.6, @babel/runtime@npm:^7.2.0, @babel/runtime@npm:^7.20.1, @babel/runtime@npm:^7.20.13, @babel/runtime@npm:^7.20.6, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.4.4, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.0, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": +"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.14.6, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.18.6, @babel/runtime@npm:^7.2.0, @babel/runtime@npm:^7.20.1, @babel/runtime@npm:^7.20.13, @babel/runtime@npm:^7.20.6, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.4.4, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.0, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": version: 7.21.0 resolution: "@babel/runtime@npm:7.21.0" dependencies: @@ -6962,7 +6962,7 @@ __metadata: "@backstage/theme": "workspace:^" "@mui/icons-material": ^5.11.0 "@mui/lab": 5.0.0-alpha.114 - "@mui/material": ^5.11.2 + "@mui/material": ^5.12.2 "@mui/styles": ^5.11.2 "@testing-library/dom": ^8.0.0 "@testing-library/jest-dom": ^5.10.1 @@ -10188,16 +10188,16 @@ __metadata: languageName: node linkType: hard -"@emotion/cache@npm:^11.10.5": - version: 11.10.5 - resolution: "@emotion/cache@npm:11.10.5" +"@emotion/cache@npm:^11.10.5, @emotion/cache@npm:^11.10.7": + version: 11.10.7 + resolution: "@emotion/cache@npm:11.10.7" dependencies: "@emotion/memoize": ^0.8.0 "@emotion/sheet": ^1.2.1 "@emotion/utils": ^1.2.0 "@emotion/weak-memoize": ^0.3.0 stylis: 4.1.3 - checksum: 1dd2d9af2d3ecbd3d4469ecdf91a335eef6034c851b57a474471b2d2280613eb35bbed98c0368cc4625f188619fbdaf04cf07e8107aaffce94b2178444c0fe7b + checksum: 6b1efed2dffc93dac419409d91f6d57a200d858ec5ffa4b7c30080fdbd93db431ff86bb779c5b8830b8373f3c5dd754d9beb386604ed2667c7d55608ff653dfc languageName: node linkType: hard @@ -12905,10 +12905,33 @@ __metadata: languageName: node linkType: hard -"@mui/core-downloads-tracker@npm:^5.11.2": - version: 5.11.2 - resolution: "@mui/core-downloads-tracker@npm:5.11.2" - checksum: 1f2c45ef37b13829fa2331811548cdd3f3cb94e384513db8820533570c8ef4569e5f835f8757a48d783553f44af3f4ed2f93d402891e27718fcc58e16129a874 +"@mui/base@npm:5.0.0-alpha.127": + version: 5.0.0-alpha.127 + resolution: "@mui/base@npm:5.0.0-alpha.127" + dependencies: + "@babel/runtime": ^7.21.0 + "@emotion/is-prop-valid": ^1.2.0 + "@mui/types": ^7.2.4 + "@mui/utils": ^5.12.0 + "@popperjs/core": ^2.11.7 + clsx: ^1.2.1 + prop-types: ^15.8.1 + react-is: ^18.2.0 + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 330baeef1fdaa513707f295e07a3436af24d0831a18109ed877f76b86cf1f392309833d33a2c7ca250db79fdf53f5e88c2618f876f50dbbbf9323bbf08e367e7 + languageName: node + linkType: hard + +"@mui/core-downloads-tracker@npm:^5.12.2": + version: 5.12.2 + resolution: "@mui/core-downloads-tracker@npm:5.12.2" + checksum: d748bdc56df6fdfe6712550a94263cf094c53ddcb70f6a8f633caf23927edf5ac88b1f888429d895fe2a5045b27eb7aa9826ccee5b917e31973667d604ed87fe languageName: node linkType: hard @@ -12958,19 +12981,19 @@ __metadata: languageName: node linkType: hard -"@mui/material@npm:^5.11.2": - version: 5.11.2 - resolution: "@mui/material@npm:5.11.2" +"@mui/material@npm:^5.11.2, @mui/material@npm:^5.12.2": + version: 5.12.2 + resolution: "@mui/material@npm:5.12.2" dependencies: - "@babel/runtime": ^7.20.7 - "@mui/base": 5.0.0-alpha.112 - "@mui/core-downloads-tracker": ^5.11.2 - "@mui/system": ^5.11.2 - "@mui/types": ^7.2.3 - "@mui/utils": ^5.11.2 + "@babel/runtime": ^7.21.0 + "@mui/base": 5.0.0-alpha.127 + "@mui/core-downloads-tracker": ^5.12.2 + "@mui/system": ^5.12.1 + "@mui/types": ^7.2.4 + "@mui/utils": ^5.12.0 "@types/react-transition-group": ^4.4.5 clsx: ^1.2.1 - csstype: ^3.1.1 + csstype: ^3.1.2 prop-types: ^15.8.1 react-is: ^18.2.0 react-transition-group: ^4.4.5 @@ -12987,16 +13010,16 @@ __metadata: optional: true "@types/react": optional: true - checksum: 4f2baa4b4d8f7842b081e9e919172020f7055e33c24af36c5a458eac1a76ff3e896651fdf21daa523a68ac0bfb3670864c1b4dec9fae6d8fadf2b602f14f95ea + checksum: a3464dfbcc496164967e134d6f1d40e060ee02fc2ddb5fcf648ca85580efdbd5eff5aab6a73486d0a7f329f7299127b52501a13993bb131cbd4e310c7f2e633f languageName: node linkType: hard -"@mui/private-theming@npm:^5.11.2": - version: 5.11.2 - resolution: "@mui/private-theming@npm:5.11.2" +"@mui/private-theming@npm:^5.11.2, @mui/private-theming@npm:^5.12.0": + version: 5.12.0 + resolution: "@mui/private-theming@npm:5.12.0" dependencies: - "@babel/runtime": ^7.20.7 - "@mui/utils": ^5.11.2 + "@babel/runtime": ^7.21.0 + "@mui/utils": ^5.12.0 prop-types: ^15.8.1 peerDependencies: "@types/react": ^17.0.0 || ^18.0.0 @@ -13004,17 +13027,17 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: 4a36ca48a7a8187d46c3e0d21ec08f7cb732bd4a5bac91c959337c8b0af031beb3a6c5ceac979b685c2e0e66321273d55dd54648f925bfdb946d6513fc6150e6 + checksum: 761bc7a57e1643c2c4c327886882fa5efc7bacae1c6fffe6be4197f49d337261c916a883d96996445efcdedc0672251725c1e5b264b6250d6c9527fd0cafcc62 languageName: node linkType: hard -"@mui/styled-engine@npm:^5.11.0": - version: 5.11.0 - resolution: "@mui/styled-engine@npm:5.11.0" +"@mui/styled-engine@npm:^5.12.0": + version: 5.12.0 + resolution: "@mui/styled-engine@npm:5.12.0" dependencies: - "@babel/runtime": ^7.20.6 - "@emotion/cache": ^11.10.5 - csstype: ^3.1.1 + "@babel/runtime": ^7.21.0 + "@emotion/cache": ^11.10.7 + csstype: ^3.1.2 prop-types: ^15.8.1 peerDependencies: "@emotion/react": ^11.4.1 @@ -13025,7 +13048,7 @@ __metadata: optional: true "@emotion/styled": optional: true - checksum: ddc486bc5e0e8e7b683e4c3bffecd11c2ce1e6c67a485354c5fc5a6fe04ed5ce76db737609a2ae04779e9d5f57c7936174d458a3795eab62291c2d7681184062 + checksum: 4a415473cf62aa05012f667dd2e9b1dc2fb175be5b0c4d0b8df541e2dac3d7db410e920e0d5910c8e2b8996a4fb51f74d79483e2878a9b5c0d334498f5537d74 languageName: node linkType: hard @@ -13060,17 +13083,17 @@ __metadata: languageName: node linkType: hard -"@mui/system@npm:^5.11.2": - version: 5.11.2 - resolution: "@mui/system@npm:5.11.2" +"@mui/system@npm:^5.11.2, @mui/system@npm:^5.12.1": + version: 5.12.1 + resolution: "@mui/system@npm:5.12.1" dependencies: - "@babel/runtime": ^7.20.7 - "@mui/private-theming": ^5.11.2 - "@mui/styled-engine": ^5.11.0 - "@mui/types": ^7.2.3 - "@mui/utils": ^5.11.2 + "@babel/runtime": ^7.21.0 + "@mui/private-theming": ^5.12.0 + "@mui/styled-engine": ^5.12.0 + "@mui/types": ^7.2.4 + "@mui/utils": ^5.12.0 clsx: ^1.2.1 - csstype: ^3.1.1 + csstype: ^3.1.2 prop-types: ^15.8.1 peerDependencies: "@emotion/react": ^11.5.0 @@ -13084,34 +13107,34 @@ __metadata: optional: true "@types/react": optional: true - checksum: d6b136464ec48cbc270f0cb91eb83f10f6b6801c143cc320ef5c6ec71655f9b3ceda98ab38fde537d1c0a7669defcb9af6f4940c78101603f8b6800854d0133d + checksum: b951959bf5e5af581319354c044f441d97849ff120cfec111d2ed5e7fa05efd63721acff96f48093b8e2bdeb5ccbe35c48613fb925be2b58c596447d10dbed3e languageName: node linkType: hard -"@mui/types@npm:^7.2.3": - version: 7.2.3 - resolution: "@mui/types@npm:7.2.3" +"@mui/types@npm:^7.2.3, @mui/types@npm:^7.2.4": + version: 7.2.4 + resolution: "@mui/types@npm:7.2.4" peerDependencies: "@types/react": "*" peerDependenciesMeta: "@types/react": optional: true - checksum: b8511cb78f8df25c8978317ad3fd585c782116b657f2d32233352c09d415c77040e532f41bbe96de6ad46be87138767d3129a9f0de3561900a9a64db7693bce4 + checksum: 16bea0547492193a22fd1794382f314698a114f6c673825314c66b56766c3a9d305992cc495684722b7be16a1ecf7e6e48a79caa64f90c439b530e8c02611a61 languageName: node linkType: hard -"@mui/utils@npm:^5.11.2": - version: 5.11.2 - resolution: "@mui/utils@npm:5.11.2" +"@mui/utils@npm:^5.11.2, @mui/utils@npm:^5.12.0": + version: 5.12.0 + resolution: "@mui/utils@npm:5.12.0" dependencies: - "@babel/runtime": ^7.20.7 + "@babel/runtime": ^7.21.0 "@types/prop-types": ^15.7.5 "@types/react-is": ^16.7.1 || ^17.0.0 prop-types: ^15.8.1 react-is: ^18.2.0 peerDependencies: react: ^17.0.0 || ^18.0.0 - checksum: 69091d9120681dee29fc20220b7db5dd61334194c139df735d932f072dab00eeae6e440058ffbccebbe93d4a3a998c23b6f4df570cb66cdacd023fce9f0f5912 + checksum: 87b2c7468803b083f50af28d7c215c45291e73fef16570848b596d0f1cde1fc613c20e8951f431217b31451de254744abd50eda5013dedec4982420b5bf1c6b6 languageName: node linkType: hard @@ -14026,10 +14049,10 @@ __metadata: languageName: node linkType: hard -"@popperjs/core@npm:^2.11.6": - version: 2.11.6 - resolution: "@popperjs/core@npm:2.11.6" - checksum: 47fb328cec1924559d759b48235c78574f2d71a8a6c4c03edb6de5d7074078371633b91e39bbf3f901b32aa8af9b9d8f82834856d2f5737a23475036b16817f0 +"@popperjs/core@npm:^2.11.6, @popperjs/core@npm:^2.11.7": + version: 2.11.7 + resolution: "@popperjs/core@npm:2.11.7" + checksum: 5b6553747899683452a1d28898c1b39173a4efd780e74360bfcda8eb42f1c5e819602769c81a10920fc68c881d07fb40429604517d499567eac079cfa6470f19 languageName: node linkType: hard @@ -21734,10 +21757,10 @@ __metadata: languageName: node linkType: hard -"csstype@npm:^3.0.2, csstype@npm:^3.0.6, csstype@npm:^3.1.1": - version: 3.1.1 - resolution: "csstype@npm:3.1.1" - checksum: 1f7b4f5fdd955b7444b18ebdddf3f5c699159f13e9cf8ac9027ae4a60ae226aef9bbb14a6e12ca7dba3358b007cee6354b116e720262867c398de6c955ea451d +"csstype@npm:^3.0.2, csstype@npm:^3.0.6, csstype@npm:^3.1.1, csstype@npm:^3.1.2": + version: 3.1.2 + resolution: "csstype@npm:3.1.2" + checksum: e1a52e6c25c1314d6beef5168da704ab29c5186b877c07d822bd0806717d9a265e8493a2e35ca7e68d0f5d472d43fac1cdce70fd79fd0853dff81f3028d857b5 languageName: node linkType: hard From 39f4c10c61aea42050e929c1bd921de025655f3e Mon Sep 17 00:00:00 2001 From: Philipp Hugenroth Date: Thu, 27 Apr 2023 11:15:29 +0200 Subject: [PATCH 201/213] Fix tsc types by csstype dependency resolution - Fix Paper background color to be consistent - Fix line-height & font-size on body to be consitent Signed-off-by: Philipp Hugenroth --- package.json | 3 ++- .../core-components/src/layout/Sidebar/Page.tsx | 12 ++++++------ packages/theme/src/base/palettes.ts | 2 +- packages/theme/src/v5/defaultComponentThemes.ts | 2 ++ yarn.lock | 15 ++++----------- 5 files changed, 15 insertions(+), 19 deletions(-) diff --git a/package.json b/package.json index 3a7e05d65a..9d688b0cc6 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,8 @@ }, "resolutions": { "@types/react": "^17", - "@types/react-dom": "^17" + "@types/react-dom": "^17", + "csstype": "3.0.9" }, "version": "1.14.0", "dependencies": { diff --git a/packages/core-components/src/layout/Sidebar/Page.tsx b/packages/core-components/src/layout/Sidebar/Page.tsx index 5f660547d1..a1564c0409 100644 --- a/packages/core-components/src/layout/Sidebar/Page.tsx +++ b/packages/core-components/src/layout/Sidebar/Page.tsx @@ -33,23 +33,23 @@ import { SidebarPinStateProvider } from './SidebarPinStateContext'; export type SidebarPageClassKey = 'root'; -const useStyles = makeStyles< - BackstageTheme, - { sidebarConfig: SidebarConfig; isPinned: boolean } ->( +type PageStyleProps = { sidebarConfig: SidebarConfig; isPinned: boolean }; + +const useStyles = makeStyles( theme => ({ root: { width: '100%', transition: 'padding-left 0.1s ease-out', isolation: 'isolate', [theme.breakpoints.up('sm')]: { - paddingLeft: props => + paddingLeft: (props: PageStyleProps) => props.isPinned ? props.sidebarConfig.drawerWidthOpen : props.sidebarConfig.drawerWidthClosed, }, [theme.breakpoints.down('xs')]: { - paddingBottom: props => props.sidebarConfig.mobileSidebarHeight, + paddingBottom: (props: PageStyleProps) => + props.sidebarConfig.mobileSidebarHeight, }, }, content: { diff --git a/packages/theme/src/base/palettes.ts b/packages/theme/src/base/palettes.ts index c230ce94c0..5e70afd7b8 100644 --- a/packages/theme/src/base/palettes.ts +++ b/packages/theme/src/base/palettes.ts @@ -25,7 +25,7 @@ export const palettes = { mode: 'light' as const, background: { default: '#F8F8F8', - paper: '#FAFAFA', + paper: '#FFFFFF', }, status: { ok: '#1DB954', diff --git a/packages/theme/src/v5/defaultComponentThemes.ts b/packages/theme/src/v5/defaultComponentThemes.ts index bd29ad38c5..14656b007d 100644 --- a/packages/theme/src/v5/defaultComponentThemes.ts +++ b/packages/theme/src/v5/defaultComponentThemes.ts @@ -32,6 +32,8 @@ export const defaultComponentThemes: ThemeOptions['components'] = { height: '100%', fontFamily: theme.typography.fontFamily, overscrollBehaviorY: 'none', + fontSize: '0.875rem', + lineHeight: 1.43, }, a: { color: 'inherit', diff --git a/yarn.lock b/yarn.lock index 38d9819ae7..b884ebd728 100644 --- a/yarn.lock +++ b/yarn.lock @@ -21750,17 +21750,10 @@ __metadata: languageName: node linkType: hard -"csstype@npm:^2.0.0, csstype@npm:^2.5.2, csstype@npm:^2.6.7": - version: 2.6.21 - resolution: "csstype@npm:2.6.21" - checksum: 2ce8bc832375146eccdf6115a1f8565a27015b74cce197c35103b4494955e9516b246140425ad24103864076aa3e1257ac9bab25a06c8d931dd87a6428c9dccf - languageName: node - linkType: hard - -"csstype@npm:^3.0.2, csstype@npm:^3.0.6, csstype@npm:^3.1.1, csstype@npm:^3.1.2": - version: 3.1.2 - resolution: "csstype@npm:3.1.2" - checksum: e1a52e6c25c1314d6beef5168da704ab29c5186b877c07d822bd0806717d9a265e8493a2e35ca7e68d0f5d472d43fac1cdce70fd79fd0853dff81f3028d857b5 +"csstype@npm:3.0.9": + version: 3.0.9 + resolution: "csstype@npm:3.0.9" + checksum: 199f9af7e673f9f188525c3102a329d637ff46c52f6385a4427ff5cb17adcb736189150170a7af7c5701d18d7704bdad130273f4aa7e44c6c4f9967e6115dc93 languageName: node linkType: hard From 0eea40f03db09cbb1ede060a72099f901be4acd1 Mon Sep 17 00:00:00 2001 From: Philipp Hugenroth Date: Thu, 27 Apr 2023 11:58:31 +0200 Subject: [PATCH 202/213] Change resolution to directly enforce version in yarn.lock Signed-off-by: Philipp Hugenroth --- package.json | 3 +-- yarn.lock | 9 ++++++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 9d688b0cc6..3a7e05d65a 100644 --- a/package.json +++ b/package.json @@ -45,8 +45,7 @@ }, "resolutions": { "@types/react": "^17", - "@types/react-dom": "^17", - "csstype": "3.0.9" + "@types/react-dom": "^17" }, "version": "1.14.0", "dependencies": { diff --git a/yarn.lock b/yarn.lock index b884ebd728..cf277ac9fa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -21750,7 +21750,14 @@ __metadata: languageName: node linkType: hard -"csstype@npm:3.0.9": +"csstype@npm:^2.0.0, csstype@npm:^2.5.2, csstype@npm:^2.6.7": + version: 2.6.21 + resolution: "csstype@npm:2.6.21" + checksum: 2ce8bc832375146eccdf6115a1f8565a27015b74cce197c35103b4494955e9516b246140425ad24103864076aa3e1257ac9bab25a06c8d931dd87a6428c9dccf + languageName: node + linkType: hard + +"csstype@npm:^3.0.2, csstype@npm:^3.0.6, csstype@npm:^3.1.1, csstype@npm:^3.1.2": version: 3.0.9 resolution: "csstype@npm:3.0.9" checksum: 199f9af7e673f9f188525c3102a329d637ff46c52f6385a4427ff5cb17adcb736189150170a7af7c5701d18d7704bdad130273f4aa7e44c6c4f9967e6115dc93 From d53afd8a8071a46a44718d5f107fbff9908bc905 Mon Sep 17 00:00:00 2001 From: Philipp Hugenroth Date: Thu, 27 Apr 2023 13:28:12 +0200 Subject: [PATCH 203/213] Adjust typing to review - Build api-report Signed-off-by: Philipp Hugenroth --- packages/theme/api-report.md | 12 +++++++----- packages/theme/package.json | 2 +- packages/theme/src/unified/UnifiedTheme.tsx | 2 +- packages/theme/src/v5/types.ts | 15 ++------------- yarn.lock | 4 ++-- 5 files changed, 13 insertions(+), 22 deletions(-) diff --git a/packages/theme/api-report.md b/packages/theme/api-report.md index 763cc48e41..9fd00ff877 100644 --- a/packages/theme/api-report.md +++ b/packages/theme/api-report.md @@ -3,17 +3,17 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts -import { ComponentsProps } from '@material-ui/core/styles/props'; +import type { ComponentsProps } from '@material-ui/core/styles/props'; import { Overrides } from '@material-ui/core/styles/overrides'; -import { Palette } from '@material-ui/core/styles/createPalette'; -import { PaletteOptions } from '@material-ui/core/styles/createPalette'; -import { PaletteOptions as PaletteOptions_2 } from '@mui/material/styles/createPalette'; +import type { Palette } from '@material-ui/core/styles/createPalette'; +import type { PaletteOptions } from '@material-ui/core/styles/createPalette'; +import { PaletteOptions as PaletteOptions_2 } from '@mui/material/styles'; import { ReactNode } from 'react'; import { Theme } from '@mui/material/styles'; import { Theme as Theme_2 } from '@material-ui/core'; import { ThemeOptions } from '@mui/material/styles'; import { ThemeOptions as ThemeOptions_2 } from '@material-ui/core/styles'; -import { ThemeOptions as ThemeOptions_3 } from '@material-ui/core'; +import type { ThemeOptions as ThemeOptions_3 } from '@material-ui/core'; // @public @deprecated export type BackstagePalette = Palette & BackstagePaletteAdditions; @@ -249,6 +249,7 @@ export const palettes: { error: string; text: string; link: string; + closeButtonColor: string; warning: string; }; border: string; @@ -322,6 +323,7 @@ export const palettes: { error: string; text: string; link: string; + closeButtonColor: string; warning: string; }; border: string; diff --git a/packages/theme/package.json b/packages/theme/package.json index 3d9e6fa132..fba9072aa0 100644 --- a/packages/theme/package.json +++ b/packages/theme/package.json @@ -34,7 +34,7 @@ "dependencies": { "@emotion/react": "^11.10.5", "@emotion/styled": "^11.10.5", - "@mui/material": "^5.11.2", + "@mui/material": "^5.12.2", "@mui/styles": "^5.11.2" }, "peerDependencies": { diff --git a/packages/theme/src/unified/UnifiedTheme.tsx b/packages/theme/src/unified/UnifiedTheme.tsx index 341b9e0a1f..c878cfd5e1 100644 --- a/packages/theme/src/unified/UnifiedTheme.tsx +++ b/packages/theme/src/unified/UnifiedTheme.tsx @@ -20,7 +20,7 @@ import { createTheme, } from '@material-ui/core/styles'; import type { PaletteOptions as PaletteOptionsV4 } from '@material-ui/core/styles/createPalette'; -import { PaletteOptions as PaletteOptionsV5 } from '@mui/material/styles/createPalette'; +import { PaletteOptions as PaletteOptionsV5 } from '@mui/material/styles'; import { adaptV4Theme, Theme as Mui5Theme, diff --git a/packages/theme/src/v5/types.ts b/packages/theme/src/v5/types.ts index 293383180a..31fe72b5b9 100644 --- a/packages/theme/src/v5/types.ts +++ b/packages/theme/src/v5/types.ts @@ -20,13 +20,13 @@ import { BackstageThemeAdditions, } from '../base/types'; -declare module '@mui/material/styles/createPalette' { +declare module '@mui/material/styles' { interface Palette extends BackstagePaletteAdditions {} interface PaletteOptions extends BackstagePaletteAdditions {} } -declare module '@mui/material/styles/createTheme' { +declare module '@mui/material/styles' { interface Theme extends BackstageThemeAdditions {} interface ThemeOptions extends BackstageThemeAdditions {} @@ -35,14 +35,3 @@ declare module '@mui/material/styles/createTheme' { declare module '@mui/private-theming/defaultTheme' { interface DefaultTheme extends Theme {} } - -// This is a workaround for missing methods in React 17 that MUI v5 depends on -// See https://github.com/mui/material-ui/issues/35287 -declare global { - namespace React { - interface DOMAttributes { - onResize?: (event: Event) => void; - onResizeCapture?: (event: Event) => void; - } - } -} diff --git a/yarn.lock b/yarn.lock index cf277ac9fa..1983495c23 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9630,7 +9630,7 @@ __metadata: "@backstage/cli": "workspace:^" "@emotion/react": ^11.10.5 "@emotion/styled": ^11.10.5 - "@mui/material": ^5.11.2 + "@mui/material": ^5.12.2 "@mui/styles": ^5.11.2 "@types/react": ^16.13.1 || ^17.0.0 peerDependencies: @@ -12981,7 +12981,7 @@ __metadata: languageName: node linkType: hard -"@mui/material@npm:^5.11.2, @mui/material@npm:^5.12.2": +"@mui/material@npm:^5.12.2": version: 5.12.2 resolution: "@mui/material@npm:5.12.2" dependencies: From 7cfe41766f0cde50c80bf66216f3cc024b75d72b Mon Sep 17 00:00:00 2001 From: Philipp Hugenroth Date: Thu, 27 Apr 2023 14:50:43 +0200 Subject: [PATCH 204/213] Fix EntityKindIcon test regarding prefixed MUI classes - Simple fix not changing what is tested, but adjusting the way the element is queried Signed-off-by: Philipp Hugenroth --- .../components/EntityRelationsGraph/EntityKindIcon.test.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/catalog-graph/src/components/EntityRelationsGraph/EntityKindIcon.test.tsx b/plugins/catalog-graph/src/components/EntityRelationsGraph/EntityKindIcon.test.tsx index 6592c6195e..cc47c8850b 100644 --- a/plugins/catalog-graph/src/components/EntityRelationsGraph/EntityKindIcon.test.tsx +++ b/plugins/catalog-graph/src/components/EntityRelationsGraph/EntityKindIcon.test.tsx @@ -24,7 +24,7 @@ describe('', () => { , ); - expect(baseElement.querySelector('.MuiSvgIcon-root')).toBeInTheDocument(); + expect(baseElement.querySelector('svg')).toBeInTheDocument(); }); it('renders without exploding for unknown kind', async () => { @@ -32,6 +32,6 @@ describe('', () => { , ); - expect(baseElement.querySelector('.MuiSvgIcon-root')).toBeInTheDocument(); + expect(baseElement.querySelector('svg')).toBeInTheDocument(); }); }); From 9b714a9bfd02f6934656fa2577f95011859e891e Mon Sep 17 00:00:00 2001 From: Philipp Hugenroth Date: Fri, 28 Apr 2023 16:05:36 +0200 Subject: [PATCH 205/213] Only use one class name generator to avoid side effects - Remove duplicate CSSBaseline from test app wrapper Signed-off-by: Philipp Hugenroth --- .eslintrc.js | 6 +++ .../test-utils/src/testUtils/appWrappers.tsx | 3 +- .../theme/src/unified/MuiClassNameSetup.ts | 24 ++++++++++++ .../src/unified/UnifiedThemeProvider.tsx | 38 +++---------------- 4 files changed, 37 insertions(+), 34 deletions(-) create mode 100644 packages/theme/src/unified/MuiClassNameSetup.ts diff --git a/.eslintrc.js b/.eslintrc.js index 1616404a6f..5c1012e501 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -28,6 +28,12 @@ module.exports = { onNonMatchingHeader: 'replace', }, ], + 'no-restricted-imports': [ + 'error', + { + patterns: ['@mui/*/*/*'], + }, + ], 'no-restricted-syntax': [ 'error', { diff --git a/packages/test-utils/src/testUtils/appWrappers.tsx b/packages/test-utils/src/testUtils/appWrappers.tsx index 012cbe0b98..6545cc312a 100644 --- a/packages/test-utils/src/testUtils/appWrappers.tsx +++ b/packages/test-utils/src/testUtils/appWrappers.tsx @@ -18,7 +18,6 @@ import React, { ComponentType, ReactNode, ReactElement } from 'react'; import { MemoryRouter } from 'react-router-dom'; import { Route } from 'react-router-dom'; import { UnifiedThemeProvider, themes } from '@backstage/theme'; -import { CssBaseline } from '@material-ui/core'; import MockIcon from '@material-ui/icons/AcUnit'; import { createSpecializedApp } from '@backstage/core-app-api'; import { @@ -142,7 +141,7 @@ export function createTestAppWrapper( variant: 'light', Provider: ({ children }) => ( - {children} + {children} ), }, diff --git a/packages/theme/src/unified/MuiClassNameSetup.ts b/packages/theme/src/unified/MuiClassNameSetup.ts new file mode 100644 index 0000000000..42b948af32 --- /dev/null +++ b/packages/theme/src/unified/MuiClassNameSetup.ts @@ -0,0 +1,24 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { unstable_ClassNameGenerator as ClassNameGenerator } from '@mui/material/className'; + +/** + * This API is introduced in @mui/material (v5.0.5) as a replacement of deprecated createGenerateClassName & only affects v5 MUI components from `@mui/*` + */ +ClassNameGenerator.configure(componentName => { + return `v5-${componentName}`; +}); diff --git a/packages/theme/src/unified/UnifiedThemeProvider.tsx b/packages/theme/src/unified/UnifiedThemeProvider.tsx index 10277136e5..88cc1d9457 100644 --- a/packages/theme/src/unified/UnifiedThemeProvider.tsx +++ b/packages/theme/src/unified/UnifiedThemeProvider.tsx @@ -15,31 +15,16 @@ */ import React, { ReactNode } from 'react'; -import { - Theme as Mui4Theme, - StylesProvider, - ThemeProvider, -} from '@material-ui/core/styles'; +import './MuiClassNameSetup'; +import { ThemeProvider } from '@material-ui/core/styles'; import { StyledEngineProvider, - Theme as Mui5Theme, ThemeProvider as Mui5Provider, } from '@mui/material/styles'; -import { - StylesProvider as Mui5StylesProvider, - createGenerateClassName, -} from '@mui/styles'; import Mui5CssBaseline from '@mui/material/CssBaseline'; import { UnifiedTheme } from './types'; import { CssBaseline } from '@material-ui/core'; -const generateV4ClassName = createGenerateClassName({ - seed: 'm4', -}); -const generateV5ClassName = createGenerateClassName({ - seed: 'm5', -}); - /** * Props for {@link UnifiedThemeProvider}. * @@ -85,25 +70,14 @@ export function UnifiedThemeProvider( ); if (v4Theme) { - /* const styles = maybeLoadMui4Styles(); - if (!styles) { - throw new Error('Failed to load MUI 4 styles package'); - } - const { StylesProvider, ThemeProvider } = styles; */ - result = ( - - {result} - - ); + result = {result}; } if (v5Theme) { result = ( - - - {result} - - + + {result} + ); } From 103cd94ef1266bcda9da1f0f90fbbb4cd87417e2 Mon Sep 17 00:00:00 2001 From: Philipp Hugenroth Date: Wed, 3 May 2023 14:49:48 +0200 Subject: [PATCH 206/213] Fix TechDocs test Signed-off-by: Philipp Hugenroth --- packages/theme/package.json | 3 +-- plugins/techdocs-addons-test-utils/src/test-utils.tsx | 6 ++++-- yarn.lock | 1 - 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/theme/package.json b/packages/theme/package.json index fba9072aa0..0e73918072 100644 --- a/packages/theme/package.json +++ b/packages/theme/package.json @@ -34,8 +34,7 @@ "dependencies": { "@emotion/react": "^11.10.5", "@emotion/styled": "^11.10.5", - "@mui/material": "^5.12.2", - "@mui/styles": "^5.11.2" + "@mui/material": "^5.12.2" }, "peerDependencies": { "@material-ui/core": "^4.12.2", diff --git a/plugins/techdocs-addons-test-utils/src/test-utils.tsx b/plugins/techdocs-addons-test-utils/src/test-utils.tsx index e60a96402c..c7a3992281 100644 --- a/plugins/techdocs-addons-test-utils/src/test-utils.tsx +++ b/plugins/techdocs-addons-test-utils/src/test-utils.tsx @@ -21,7 +21,7 @@ import React, { ReactElement } from 'react'; import { screen } from 'testing-library__dom'; import { renderToStaticMarkup } from 'react-dom/server'; import { Route } from 'react-router-dom'; -import { act, render } from '@testing-library/react'; +import { act, render, waitFor } from '@testing-library/react'; import { wrapInTestApp, TestApiProvider } from '@backstage/test-utils'; import { FlatRoutes } from '@backstage/core-app-api'; @@ -278,7 +278,9 @@ export class TechDocsAddonTester { render(this.build()); }); - const shadowHost = screen.getByTestId('techdocs-native-shadowroot'); + await waitFor(() => screen.getByText('Documentation')); + + const shadowHost = await screen.findByTestId('techdocs-native-shadowroot'); return { ...screen, diff --git a/yarn.lock b/yarn.lock index 1983495c23..bdc04393da 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9631,7 +9631,6 @@ __metadata: "@emotion/react": ^11.10.5 "@emotion/styled": ^11.10.5 "@mui/material": ^5.12.2 - "@mui/styles": ^5.11.2 "@types/react": ^16.13.1 || ^17.0.0 peerDependencies: "@material-ui/core": ^4.12.2 From 8e88caa0299a1502326ac7c9c2e5e7cac18f5bcb Mon Sep 17 00:00:00 2001 From: Philipp Hugenroth Date: Fri, 5 May 2023 15:37:47 +0200 Subject: [PATCH 207/213] Simplify PR after review Co-authored-by: Patrik Oldsberg Signed-off-by: Philipp Hugenroth --- .eslintrc.js | 6 -- packages/cli/config/eslint-factory.js | 10 +++ packages/theme/src/base/index.ts | 1 + packages/theme/src/unified/UnifiedTheme.tsx | 9 +-- .../src/unified/UnifiedThemeProvider.tsx | 13 +--- packages/theme/src/v4/load.ts | 74 ------------------- .../src/test-utils.tsx | 2 - 7 files changed, 14 insertions(+), 101 deletions(-) delete mode 100644 packages/theme/src/v4/load.ts diff --git a/.eslintrc.js b/.eslintrc.js index 5c1012e501..1616404a6f 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -28,12 +28,6 @@ module.exports = { onNonMatchingHeader: 'replace', }, ], - 'no-restricted-imports': [ - 'error', - { - patterns: ['@mui/*/*/*'], - }, - ], 'no-restricted-syntax': [ 'error', { diff --git a/packages/cli/config/eslint-factory.js b/packages/cli/config/eslint-factory.js index dde853fdff..6888e0ff67 100644 --- a/packages/cli/config/eslint-factory.js +++ b/packages/cli/config/eslint-factory.js @@ -24,6 +24,7 @@ const { join: joinPath } = require('path'); * - `tsRules`: Additional ESLint rules to apply to TypeScript * - `testRules`: Additional ESLint rules to apply to tests * - `restrictedImports`: Additional paths to add to no-restricted-imports + * - `restrictedImportsPattern`: Additional patterns to add to no-restricted-imports * - `restrictedSrcImports`: Additional paths to add to no-restricted-imports in src files * - `restrictedTestImports`: Additional paths to add to no-restricted-imports in test files * - `restrictedSyntax`: Additional patterns to add to no-restricted-syntax @@ -44,6 +45,7 @@ function createConfig(dir, extraConfig = {}) { testRules, restrictedImports, + restrictedImportsPatterns, restrictedSrcImports, restrictedTestImports, restrictedSyntax, @@ -114,6 +116,7 @@ function createConfig(dir, extraConfig = {}) { '*.test*', '**/__testUtils__/**', '**/__mocks__/**', + ...(restrictedImportsPatterns ?? []), ], }, ], @@ -208,9 +211,16 @@ function createConfigForRole(dir, role, extraConfig = {}) { name: '@material-ui/icons/', // because this is possible too ._. message: "Please import '@material-ui/icons/' instead.", }, + { + // https://mui.com/material-ui/guides/minimizing-bundle-size/ + name: '@mui/material', + message: "Please import '@mui/material/...' instead.", + }, ...require('module').builtinModules, ...(extraConfig.restrictedImports ?? []), ], + // https://mui.com/material-ui/guides/minimizing-bundle-size/ + restrictedImportsPatterns: ['@mui/*/*/*'], tsRules: { 'react/prop-types': 0, ...extraConfig.tsRules, diff --git a/packages/theme/src/base/index.ts b/packages/theme/src/base/index.ts index 45b8326f2e..4bb80aa42b 100644 --- a/packages/theme/src/base/index.ts +++ b/packages/theme/src/base/index.ts @@ -19,6 +19,7 @@ export type { BaseThemeOptionsInput } from './createBaseThemeOptions'; export { colorVariants, genPageTheme, pageTheme, shapes } from './pageTheme'; export { palettes } from './palettes'; export type { + BackstageThemeAdditions, BackstagePaletteAdditions, PageTheme, PageThemeSelector, diff --git a/packages/theme/src/unified/UnifiedTheme.tsx b/packages/theme/src/unified/UnifiedTheme.tsx index c878cfd5e1..0c5f80357a 100644 --- a/packages/theme/src/unified/UnifiedTheme.tsx +++ b/packages/theme/src/unified/UnifiedTheme.tsx @@ -32,7 +32,6 @@ import { PageTheme } from '../base/types'; import { defaultComponentThemes } from '../v5'; import { createBaseThemeOptions } from '../base/createBaseThemeOptions'; import { UnifiedTheme } from './types'; -import { maybeLoadMui4Styles } from '../v4/load'; export class UnifiedThemeHolder implements UnifiedTheme { #themes = new Map(); @@ -97,12 +96,6 @@ export function createUnifiedThemeFromV4( options: ThemeOptionsV4, ): UnifiedTheme { const v5Theme = adaptV4Theme(options as any); - - const mui4Styles = maybeLoadMui4Styles(); - if (!mui4Styles) { - return new UnifiedThemeHolder(undefined, v5Theme); - } - - const v4Theme = mui4Styles.createTheme(options); + const v4Theme = createTheme(options); return new UnifiedThemeHolder(v4Theme, v5Theme); } diff --git a/packages/theme/src/unified/UnifiedThemeProvider.tsx b/packages/theme/src/unified/UnifiedThemeProvider.tsx index 88cc1d9457..c7054e0e55 100644 --- a/packages/theme/src/unified/UnifiedThemeProvider.tsx +++ b/packages/theme/src/unified/UnifiedThemeProvider.tsx @@ -21,9 +21,8 @@ import { StyledEngineProvider, ThemeProvider as Mui5Provider, } from '@mui/material/styles'; -import Mui5CssBaseline from '@mui/material/CssBaseline'; +import CSSBaseline from '@mui/material/CssBaseline'; import { UnifiedTheme } from './types'; -import { CssBaseline } from '@material-ui/core'; /** * Props for {@link UnifiedThemeProvider}. @@ -51,15 +50,7 @@ export function UnifiedThemeProvider( let cssBaseline: JSX.Element | undefined = undefined; if (!noCssBaseline) { - if (v5Theme) { - cssBaseline = ; - } else if (v4Theme) { - /* const CssBaseline = maybeLoadMui4CssBaseline(); - if (!CssBaseline) { - throw new Error('Failed to load MUI 4 CssBaseline component'); - } */ - cssBaseline = ; - } + cssBaseline = ; } let result = ( diff --git a/packages/theme/src/v4/load.ts b/packages/theme/src/v4/load.ts deleted file mode 100644 index 899aa8af93..0000000000 --- a/packages/theme/src/v4/load.ts +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright 2023 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * Loads MUI v4 styles if it is available. - * - * This should always be used to access MUI v4 at runtime in this - * package, to ensure that it's not brought into the bundle unnecessarily. - * - * @internal - */ -export function maybeLoadMui4Styles(): - | typeof import('@material-ui/core/styles') - | undefined { - if ( - __webpack_modules__[ - require.resolveWeak('@material-ui/core/styles') as number - ] - ) { - return __webpack_modules__[ - require.resolveWeak('@material-ui/core/styles') as number - ] as typeof import('@material-ui/core/styles'); - } - if (__webpack_modules__[require.resolveWeak('@material-ui/core') as number]) { - return __webpack_modules__[ - require.resolveWeak('@material-ui/core') as number - ] as typeof import('@material-ui/core'); - } - - return undefined; -} - -/** - * Loads the MUI v4 CssBaseline component if it is available. - * - * This should always be used to access MUI v4 at runtime in this - * package, to ensure that it's not brought into the bundle unnecessarily. - * - * @internal - */ -export function maybeLoadMui4CssBaseline(): - | typeof import('@material-ui/core/CssBaseline')['default'] - | undefined { - if ( - __webpack_modules__[ - require.resolveWeak('@material-ui/core/CssBaseline') as number - ] - ) { - const m = __webpack_modules__[ - require.resolveWeak('@material-ui/core/CssBaseline') as number - ] as typeof import('@material-ui/core/CssBaseline'); - return m.default; - } - if (__webpack_modules__[require.resolveWeak('@material-ui/core') as number]) { - const m = __webpack_modules__[ - require.resolveWeak('@material-ui/core') as number - ] as typeof import('@material-ui/core'); - return m.CssBaseline; - } - return undefined; -} diff --git a/plugins/techdocs-addons-test-utils/src/test-utils.tsx b/plugins/techdocs-addons-test-utils/src/test-utils.tsx index c7a3992281..a6e83262fb 100644 --- a/plugins/techdocs-addons-test-utils/src/test-utils.tsx +++ b/plugins/techdocs-addons-test-utils/src/test-utils.tsx @@ -278,8 +278,6 @@ export class TechDocsAddonTester { render(this.build()); }); - await waitFor(() => screen.getByText('Documentation')); - const shadowHost = await screen.findByTestId('techdocs-native-shadowroot'); return { From df1edd9cbc54a8a16eab1e6b70ca8d2d48581654 Mon Sep 17 00:00:00 2001 From: Philipp Hugenroth Date: Fri, 5 May 2023 15:40:39 +0200 Subject: [PATCH 208/213] Restore GraphiQL to seperate concerns in PRs Signed-off-by: Philipp Hugenroth --- plugins/graphiql/package.json | 7 +++---- .../components/GraphiQLBrowser/GraphiQLBrowser.tsx | 11 +++++------ .../src/components/GraphiQLPage/GraphiQLPage.tsx | 2 +- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/plugins/graphiql/package.json b/plugins/graphiql/package.json index 3afd582bb5..d5dae8c2ec 100644 --- a/plugins/graphiql/package.json +++ b/plugins/graphiql/package.json @@ -35,10 +35,9 @@ "@backstage/core-components": "workspace:^", "@backstage/core-plugin-api": "workspace:^", "@backstage/theme": "workspace:^", - "@mui/icons-material": "^5.11.0", - "@mui/lab": "5.0.0-alpha.114", - "@mui/material": "^5.12.2", - "@mui/styles": "^5.11.2", + "@material-ui/core": "^4.12.2", + "@material-ui/icons": "^4.9.1", + "@material-ui/lab": "4.0.0-alpha.61", "graphiql": "^1.5.12", "graphql": "^16.0.0", "graphql-ws": "^5.4.1", diff --git a/plugins/graphiql/src/components/GraphiQLBrowser/GraphiQLBrowser.tsx b/plugins/graphiql/src/components/GraphiQLBrowser/GraphiQLBrowser.tsx index fd084f1be8..dd38f513be 100644 --- a/plugins/graphiql/src/components/GraphiQLBrowser/GraphiQLBrowser.tsx +++ b/plugins/graphiql/src/components/GraphiQLBrowser/GraphiQLBrowser.tsx @@ -15,18 +15,18 @@ */ import React, { useState, Suspense } from 'react'; -import { Tabs, Tab, Typography, Divider } from '@mui/material'; -import makeStyles from '@mui/styles/makeStyles'; +import { Tabs, Tab, makeStyles, Typography, Divider } from '@material-ui/core'; import 'graphiql/graphiql.css'; import { StorageBucket } from '../../lib/storage'; import { GraphQLEndpoint } from '../../lib/api'; +import { BackstageTheme } from '@backstage/theme'; import { Progress } from '@backstage/core-components'; const GraphiQL = React.lazy(() => import('graphiql').then(m => ({ default: m.GraphiQL })), ); -const useStyles = makeStyles(theme => ({ +const useStyles = makeStyles(theme => ({ root: { height: '100%', display: 'flex', @@ -69,11 +69,10 @@ export const GraphiQLBrowser = (props: GraphiQLBrowserProps) => { classes={{ root: classes.tabs }} value={tabIndex} onChange={(_, value) => setTabIndex(value)} - indicatorColor="secondary" - textColor="inherit" + indicatorColor="primary" > {endpoints.map(({ title }, index) => ( - + ))} diff --git a/plugins/graphiql/src/components/GraphiQLPage/GraphiQLPage.tsx b/plugins/graphiql/src/components/GraphiQLPage/GraphiQLPage.tsx index b075e0d478..0b4399948a 100644 --- a/plugins/graphiql/src/components/GraphiQLPage/GraphiQLPage.tsx +++ b/plugins/graphiql/src/components/GraphiQLPage/GraphiQLPage.tsx @@ -19,7 +19,7 @@ import useAsync from 'react-use/lib/useAsync'; import 'graphiql/graphiql.css'; import { graphQlBrowseApiRef } from '../../lib/api'; import { GraphiQLBrowser } from '../GraphiQLBrowser'; -import { Typography } from '@mui/material'; +import { Typography } from '@material-ui/core'; import { Content, Header, From 2a34253e2a6c9c5017d3965ab48e0eb171a4c7d5 Mon Sep 17 00:00:00 2001 From: Philipp Hugenroth Date: Fri, 5 May 2023 15:49:54 +0200 Subject: [PATCH 209/213] Fix tsc & build api-reports Signed-off-by: Philipp Hugenroth --- packages/theme/api-report.md | 6 ++++++ plugins/techdocs-addons-test-utils/src/test-utils.tsx | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/theme/api-report.md b/packages/theme/api-report.md index 9fd00ff877..fe05ca6b4e 100644 --- a/packages/theme/api-report.md +++ b/packages/theme/api-report.md @@ -95,6 +95,12 @@ export interface BackstageTheme extends Theme_2 { palette: BackstagePalette; } +// @public +export type BackstageThemeAdditions = { + page: PageTheme; + getPageTheme: (selector: PageThemeSelector) => PageTheme; +}; + // @public @deprecated export interface BackstageThemeOptions extends ThemeOptions_3 { // (undocumented) diff --git a/plugins/techdocs-addons-test-utils/src/test-utils.tsx b/plugins/techdocs-addons-test-utils/src/test-utils.tsx index a6e83262fb..1a921437b1 100644 --- a/plugins/techdocs-addons-test-utils/src/test-utils.tsx +++ b/plugins/techdocs-addons-test-utils/src/test-utils.tsx @@ -21,7 +21,7 @@ import React, { ReactElement } from 'react'; import { screen } from 'testing-library__dom'; import { renderToStaticMarkup } from 'react-dom/server'; import { Route } from 'react-router-dom'; -import { act, render, waitFor } from '@testing-library/react'; +import { act, render } from '@testing-library/react'; import { wrapInTestApp, TestApiProvider } from '@backstage/test-utils'; import { FlatRoutes } from '@backstage/core-app-api'; From 0b03f317350e3ff1db50af05dde16307d05e0c36 Mon Sep 17 00:00:00 2001 From: Philipp Hugenroth Date: Fri, 5 May 2023 16:03:09 +0200 Subject: [PATCH 210/213] Remove non-intended changes Signed-off-by: Philipp Hugenroth --- .../src/layout/Sidebar/Page.tsx | 12 +- yarn.lock | 137 +++--------------- 2 files changed, 24 insertions(+), 125 deletions(-) diff --git a/packages/core-components/src/layout/Sidebar/Page.tsx b/packages/core-components/src/layout/Sidebar/Page.tsx index a1564c0409..5f660547d1 100644 --- a/packages/core-components/src/layout/Sidebar/Page.tsx +++ b/packages/core-components/src/layout/Sidebar/Page.tsx @@ -33,23 +33,23 @@ import { SidebarPinStateProvider } from './SidebarPinStateContext'; export type SidebarPageClassKey = 'root'; -type PageStyleProps = { sidebarConfig: SidebarConfig; isPinned: boolean }; - -const useStyles = makeStyles( +const useStyles = makeStyles< + BackstageTheme, + { sidebarConfig: SidebarConfig; isPinned: boolean } +>( theme => ({ root: { width: '100%', transition: 'padding-left 0.1s ease-out', isolation: 'isolate', [theme.breakpoints.up('sm')]: { - paddingLeft: (props: PageStyleProps) => + paddingLeft: props => props.isPinned ? props.sidebarConfig.drawerWidthOpen : props.sidebarConfig.drawerWidthClosed, }, [theme.breakpoints.down('xs')]: { - paddingBottom: (props: PageStyleProps) => - props.sidebarConfig.mobileSidebarHeight, + paddingBottom: props => props.sidebarConfig.mobileSidebarHeight, }, }, content: { diff --git a/yarn.lock b/yarn.lock index bdc04393da..cc32ce9a0e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3472,7 +3472,7 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.14.6, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.18.6, @babel/runtime@npm:^7.2.0, @babel/runtime@npm:^7.20.1, @babel/runtime@npm:^7.20.13, @babel/runtime@npm:^7.20.6, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.4.4, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.0, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": +"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.14.6, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.18.6, @babel/runtime@npm:^7.2.0, @babel/runtime@npm:^7.20.1, @babel/runtime@npm:^7.20.13, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.4.4, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.0, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": version: 7.21.0 resolution: "@babel/runtime@npm:7.21.0" dependencies: @@ -6960,10 +6960,9 @@ __metadata: "@backstage/dev-utils": "workspace:^" "@backstage/test-utils": "workspace:^" "@backstage/theme": "workspace:^" - "@mui/icons-material": ^5.11.0 - "@mui/lab": 5.0.0-alpha.114 - "@mui/material": ^5.12.2 - "@mui/styles": ^5.11.2 + "@material-ui/core": ^4.12.2 + "@material-ui/icons": ^4.9.1 + "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/dom": ^8.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 @@ -12881,29 +12880,6 @@ __metadata: languageName: node linkType: hard -"@mui/base@npm:5.0.0-alpha.112": - version: 5.0.0-alpha.112 - resolution: "@mui/base@npm:5.0.0-alpha.112" - dependencies: - "@babel/runtime": ^7.20.7 - "@emotion/is-prop-valid": ^1.2.0 - "@mui/types": ^7.2.3 - "@mui/utils": ^5.11.2 - "@popperjs/core": ^2.11.6 - clsx: ^1.2.1 - prop-types: ^15.8.1 - react-is: ^18.2.0 - peerDependencies: - "@types/react": ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 - react-dom: ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: fd19240ac16859d62f057fd80261fc4e0dbc960a648b601bd7beaeb44b88c059f654b0989f33cea655ad61106832bffa0cd8446730c1be7671b6cde383dbce80 - languageName: node - linkType: hard - "@mui/base@npm:5.0.0-alpha.127": version: 5.0.0-alpha.127 resolution: "@mui/base@npm:5.0.0-alpha.127" @@ -12934,52 +12910,6 @@ __metadata: languageName: node linkType: hard -"@mui/icons-material@npm:^5.11.0": - version: 5.11.0 - resolution: "@mui/icons-material@npm:5.11.0" - dependencies: - "@babel/runtime": ^7.20.6 - peerDependencies: - "@mui/material": ^5.0.0 - "@types/react": ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 764c1185b3432f0228f3c5217b0e218b10f106fa96d305dfc62c0ef5afd2a7a087b0d664fd0a8171282e195c18d3ee073d5f037901a2bed1a1519a70fbb0501c - languageName: node - linkType: hard - -"@mui/lab@npm:5.0.0-alpha.114": - version: 5.0.0-alpha.114 - resolution: "@mui/lab@npm:5.0.0-alpha.114" - dependencies: - "@babel/runtime": ^7.20.7 - "@mui/base": 5.0.0-alpha.112 - "@mui/system": ^5.11.2 - "@mui/types": ^7.2.3 - "@mui/utils": ^5.11.2 - clsx: ^1.2.1 - prop-types: ^15.8.1 - react-is: ^18.2.0 - peerDependencies: - "@emotion/react": ^11.5.0 - "@emotion/styled": ^11.3.0 - "@mui/material": ^5.0.0 - "@types/react": ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 - react-dom: ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - "@emotion/react": - optional: true - "@emotion/styled": - optional: true - "@types/react": - optional: true - checksum: 0b6441e7f7a69e2a6910f044ef2a222462a219f61e3a05c023484508e7f14a5fe6baeddf08b37bceab357c7cb0eed90324ac42ecd8e59a6eb6e1c801ea01504a - languageName: node - linkType: hard - "@mui/material@npm:^5.12.2": version: 5.12.2 resolution: "@mui/material@npm:5.12.2" @@ -13013,7 +12943,7 @@ __metadata: languageName: node linkType: hard -"@mui/private-theming@npm:^5.11.2, @mui/private-theming@npm:^5.12.0": +"@mui/private-theming@npm:^5.12.0": version: 5.12.0 resolution: "@mui/private-theming@npm:5.12.0" dependencies: @@ -13051,38 +12981,7 @@ __metadata: languageName: node linkType: hard -"@mui/styles@npm:^5.11.2": - version: 5.11.2 - resolution: "@mui/styles@npm:5.11.2" - dependencies: - "@babel/runtime": ^7.20.7 - "@emotion/hash": ^0.9.0 - "@mui/private-theming": ^5.11.2 - "@mui/types": ^7.2.3 - "@mui/utils": ^5.11.2 - clsx: ^1.2.1 - csstype: ^3.1.1 - hoist-non-react-statics: ^3.3.2 - jss: ^10.9.2 - jss-plugin-camel-case: ^10.9.2 - jss-plugin-default-unit: ^10.9.2 - jss-plugin-global: ^10.9.2 - jss-plugin-nested: ^10.9.2 - jss-plugin-props-sort: ^10.9.2 - jss-plugin-rule-value-function: ^10.9.2 - jss-plugin-vendor-prefixer: ^10.9.2 - prop-types: ^15.8.1 - peerDependencies: - "@types/react": ^17.0.0 - react: ^17.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: d565e53acd6f49679446dbb9d85ab055d6c16225afd429ac9a738fba3cddfc394f88530cebfe1b3640ca89f58e7db73bb47d09e9bb05c80e47a5018418802378 - languageName: node - linkType: hard - -"@mui/system@npm:^5.11.2, @mui/system@npm:^5.12.1": +"@mui/system@npm:^5.12.1": version: 5.12.1 resolution: "@mui/system@npm:5.12.1" dependencies: @@ -13110,7 +13009,7 @@ __metadata: languageName: node linkType: hard -"@mui/types@npm:^7.2.3, @mui/types@npm:^7.2.4": +"@mui/types@npm:^7.2.4": version: 7.2.4 resolution: "@mui/types@npm:7.2.4" peerDependencies: @@ -13122,7 +13021,7 @@ __metadata: languageName: node linkType: hard -"@mui/utils@npm:^5.11.2, @mui/utils@npm:^5.12.0": +"@mui/utils@npm:^5.12.0": version: 5.12.0 resolution: "@mui/utils@npm:5.12.0" dependencies: @@ -14048,7 +13947,7 @@ __metadata: languageName: node linkType: hard -"@popperjs/core@npm:^2.11.6, @popperjs/core@npm:^2.11.7": +"@popperjs/core@npm:^2.11.7": version: 2.11.7 resolution: "@popperjs/core@npm:2.11.7" checksum: 5b6553747899683452a1d28898c1b39173a4efd780e74360bfcda8eb42f1c5e819602769c81a10920fc68c881d07fb40429604517d499567eac079cfa6470f19 @@ -21756,7 +21655,7 @@ __metadata: languageName: node linkType: hard -"csstype@npm:^3.0.2, csstype@npm:^3.0.6, csstype@npm:^3.1.1, csstype@npm:^3.1.2": +"csstype@npm:^3.0.2, csstype@npm:^3.0.6, csstype@npm:^3.1.2": version: 3.0.9 resolution: "csstype@npm:3.0.9" checksum: 199f9af7e673f9f188525c3102a329d637ff46c52f6385a4427ff5cb17adcb736189150170a7af7c5701d18d7704bdad130273f4aa7e44c6c4f9967e6115dc93 @@ -29262,7 +29161,7 @@ __metadata: languageName: node linkType: hard -"jss-plugin-camel-case@npm:^10.5.1, jss-plugin-camel-case@npm:^10.9.2": +"jss-plugin-camel-case@npm:^10.5.1": version: 10.9.2 resolution: "jss-plugin-camel-case@npm:10.9.2" dependencies: @@ -29273,7 +29172,7 @@ __metadata: languageName: node linkType: hard -"jss-plugin-default-unit@npm:^10.5.1, jss-plugin-default-unit@npm:^10.9.2": +"jss-plugin-default-unit@npm:^10.5.1": version: 10.9.2 resolution: "jss-plugin-default-unit@npm:10.9.2" dependencies: @@ -29283,7 +29182,7 @@ __metadata: languageName: node linkType: hard -"jss-plugin-global@npm:^10.5.1, jss-plugin-global@npm:^10.9.2": +"jss-plugin-global@npm:^10.5.1": version: 10.9.2 resolution: "jss-plugin-global@npm:10.9.2" dependencies: @@ -29293,7 +29192,7 @@ __metadata: languageName: node linkType: hard -"jss-plugin-nested@npm:^10.5.1, jss-plugin-nested@npm:^10.9.2": +"jss-plugin-nested@npm:^10.5.1": version: 10.9.2 resolution: "jss-plugin-nested@npm:10.9.2" dependencies: @@ -29304,7 +29203,7 @@ __metadata: languageName: node linkType: hard -"jss-plugin-props-sort@npm:^10.5.1, jss-plugin-props-sort@npm:^10.9.2": +"jss-plugin-props-sort@npm:^10.5.1": version: 10.9.2 resolution: "jss-plugin-props-sort@npm:10.9.2" dependencies: @@ -29314,7 +29213,7 @@ __metadata: languageName: node linkType: hard -"jss-plugin-rule-value-function@npm:^10.5.1, jss-plugin-rule-value-function@npm:^10.9.2": +"jss-plugin-rule-value-function@npm:^10.5.1": version: 10.9.2 resolution: "jss-plugin-rule-value-function@npm:10.9.2" dependencies: @@ -29325,7 +29224,7 @@ __metadata: languageName: node linkType: hard -"jss-plugin-vendor-prefixer@npm:^10.5.1, jss-plugin-vendor-prefixer@npm:^10.9.2": +"jss-plugin-vendor-prefixer@npm:^10.5.1": version: 10.9.2 resolution: "jss-plugin-vendor-prefixer@npm:10.9.2" dependencies: @@ -29368,7 +29267,7 @@ __metadata: languageName: node linkType: hard -"jss@npm:^10.5.1, jss@npm:^10.9.2, jss@npm:~10.10.0": +"jss@npm:^10.5.1, jss@npm:~10.10.0": version: 10.10.0 resolution: "jss@npm:10.10.0" dependencies: From 20b7da6f1311c36a5bacdb523f2a6a235737a57b Mon Sep 17 00:00:00 2001 From: Philipp Hugenroth Date: Fri, 5 May 2023 16:40:57 +0200 Subject: [PATCH 211/213] Add changeset Signed-off-by: Philipp Hugenroth --- .changeset/weak-snails-sparkle.md | 24 ++++++++++++++++++++ packages/theme/src/unified/overrides.test.ts | 2 +- 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 .changeset/weak-snails-sparkle.md diff --git a/.changeset/weak-snails-sparkle.md b/.changeset/weak-snails-sparkle.md new file mode 100644 index 0000000000..55450e0869 --- /dev/null +++ b/.changeset/weak-snails-sparkle.md @@ -0,0 +1,24 @@ +--- +'@backstage/app-defaults': minor +'@backstage/test-utils': minor +'@backstage/theme': minor +'@backstage/plugin-techdocs-addons-test-utils': patch +'@backstage/cli': patch +--- + +**MUI v5 Support:** Adding platform-wide support for MUI v5 allowing a transition phase for migrating central plugins & components over. We still support v4 instances & plugins by adding a + +To allow the future support of plugins & components using MUI v5 you want to upgrade your `AppTheme`'s to using the `UnifiedThemeProvider` + +```diff + Provider: ({ children }) => ( +- +- {children} +- ++ + ), +``` + +**'@backstage/test-utils':** Test App Wrapper is using `UnifiedThemeProvider` for tests now. +**'@backstage/plugin-techdocs-addons-test-utils':** Fix avoiding test to run on unmount. +**'@backstage/cli':** Enforcing MUI v5 specific linting to minimize bundle size. diff --git a/packages/theme/src/unified/overrides.test.ts b/packages/theme/src/unified/overrides.test.ts index 38b4738444..e84cedade6 100644 --- a/packages/theme/src/unified/overrides.test.ts +++ b/packages/theme/src/unified/overrides.test.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { Theme } from '@mui/material'; +import { Theme } from '@mui/material/styles'; import { transformV5ComponentThemesToV4 } from './overrides'; describe('transformV5ComponentThemesToV4', () => { From 05169a796dfd8cea5bc59485bbf5edc3f127f723 Mon Sep 17 00:00:00 2001 From: Philipp Hugenroth Date: Mon, 8 May 2023 11:29:37 +0200 Subject: [PATCH 212/213] Fix lint factory & changeset Signed-off-by: Philipp Hugenroth --- .changeset/weak-snails-sparkle.md | 2 +- docs/local-dev/cli-build-system.md | 21 +++++++++++---------- packages/cli/config/eslint-factory.js | 9 ++++++--- 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/.changeset/weak-snails-sparkle.md b/.changeset/weak-snails-sparkle.md index 55450e0869..947c20117b 100644 --- a/.changeset/weak-snails-sparkle.md +++ b/.changeset/weak-snails-sparkle.md @@ -20,5 +20,5 @@ To allow the future support of plugins & components using MUI v5 you want to upg ``` **'@backstage/test-utils':** Test App Wrapper is using `UnifiedThemeProvider` for tests now. -**'@backstage/plugin-techdocs-addons-test-utils':** Fix avoiding test to run on unmount. +**'@backstage/plugin-techdocs-addons-test-utils':** Fix tests by avoiding re-running theme on cleanup. **'@backstage/cli':** Enforcing MUI v5 specific linting to minimize bundle size. diff --git a/docs/local-dev/cli-build-system.md b/docs/local-dev/cli-build-system.md index a5df84f8dc..61e94e9ef4 100644 --- a/docs/local-dev/cli-build-system.md +++ b/docs/local-dev/cli-build-system.md @@ -165,16 +165,17 @@ module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { The configuration factory also provides utilities for extending the configuration in ways that are otherwise very cumbersome to do with plain ESLint, particularly for rules like `no-restricted-syntax`. These are the extra keys that are available: -| Key | Description | -| ----------------------- | ------------------------------------------------------------------ | -| `tsRules` | Additional rules to apply to TypeScript files | -| `testRules` | Additional rules to apply to tests files | -| `restrictedImports` | Additional paths to add to `no-restricted-imports` | -| `restrictedSrcImports` | Additional paths to add to `no-restricted-imports` in src files | -| `restrictedTestImports` | Additional paths to add to `no-restricted-imports` in test files | -| `restrictedSyntax` | Additional patterns to add to `no-restricted-syntax` | -| `restrictedSrcSyntax` | Additional patterns to add to `no-restricted-syntax` in src files | -| `restrictedTestSyntax` | Additional patterns to add to `no-restricted-syntax` in test files | +| Key | Description | +| -------------------------- | ------------------------------------------------------------------ | +| `tsRules` | Additional rules to apply to TypeScript files | +| `testRules` | Additional rules to apply to tests files | +| `restrictedImports` | Additional paths to add to `no-restricted-imports` | +| `restrictedImportPatterns` | Additional patterns to add to `no-restricted-imports` | +| `restrictedSrcImports` | Additional paths to add to `no-restricted-imports` in src files | +| `restrictedTestImports` | Additional paths to add to `no-restricted-imports` in test files | +| `restrictedSyntax` | Additional patterns to add to `no-restricted-syntax` | +| `restrictedSrcSyntax` | Additional patterns to add to `no-restricted-syntax` in src files | +| `restrictedTestSyntax` | Additional patterns to add to `no-restricted-syntax` in test files | ## Type Checking diff --git a/packages/cli/config/eslint-factory.js b/packages/cli/config/eslint-factory.js index 6888e0ff67..36b51324fc 100644 --- a/packages/cli/config/eslint-factory.js +++ b/packages/cli/config/eslint-factory.js @@ -45,7 +45,7 @@ function createConfig(dir, extraConfig = {}) { testRules, restrictedImports, - restrictedImportsPatterns, + restrictedImportPatterns, restrictedSrcImports, restrictedTestImports, restrictedSyntax, @@ -116,7 +116,7 @@ function createConfig(dir, extraConfig = {}) { '*.test*', '**/__testUtils__/**', '**/__mocks__/**', - ...(restrictedImportsPatterns ?? []), + ...(restrictedImportPatterns ?? []), ], }, ], @@ -220,7 +220,10 @@ function createConfigForRole(dir, role, extraConfig = {}) { ...(extraConfig.restrictedImports ?? []), ], // https://mui.com/material-ui/guides/minimizing-bundle-size/ - restrictedImportsPatterns: ['@mui/*/*/*'], + restrictedImportPatterns: [ + '@mui/*/*/*', + ...(extraConfig.restrictedImportPatterns ?? []), + ], tsRules: { 'react/prop-types': 0, ...extraConfig.tsRules, From 1fd38bc4141a1ba472053b05264b86fcb86b249b Mon Sep 17 00:00:00 2001 From: Philipp Hugenroth Date: Tue, 23 May 2023 16:21:22 +0200 Subject: [PATCH 213/213] Update changesets Signed-off-by: Philipp Hugenroth --- .changeset/weak-snails-spar.md | 5 +++++ .changeset/weak-snails-spark.md | 5 +++++ .changeset/weak-snails-sparkl.md | 17 +++++++++++++++++ .changeset/weak-snails-sparkle.md | 21 +-------------------- packages/theme/package.json | 5 ----- yarn.lock | 3 --- 6 files changed, 28 insertions(+), 28 deletions(-) create mode 100644 .changeset/weak-snails-spar.md create mode 100644 .changeset/weak-snails-spark.md create mode 100644 .changeset/weak-snails-sparkl.md diff --git a/.changeset/weak-snails-spar.md b/.changeset/weak-snails-spar.md new file mode 100644 index 0000000000..3cd930d5b0 --- /dev/null +++ b/.changeset/weak-snails-spar.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-techdocs-addons-test-utils': patch +--- + +Avoiding re-running tests on cleanup. diff --git a/.changeset/weak-snails-spark.md b/.changeset/weak-snails-spark.md new file mode 100644 index 0000000000..c82626ea39 --- /dev/null +++ b/.changeset/weak-snails-spark.md @@ -0,0 +1,5 @@ +--- +'@backstage/test-utils': minor +--- + +Test App Wrapper is now using `UnifiedThemeProvider` for supporting MUI v5 next to MUI v4 in tests. diff --git a/.changeset/weak-snails-sparkl.md b/.changeset/weak-snails-sparkl.md new file mode 100644 index 0000000000..9bbc7d843b --- /dev/null +++ b/.changeset/weak-snails-sparkl.md @@ -0,0 +1,17 @@ +--- +'@backstage/app-defaults': minor +'@backstage/theme': minor +--- + +**MUI v5 Support:** Adding platform-wide support for MUI v5 allowing a transition phase for migrating central plugins & components over. We still support v4 instances & plugins by adding a + +To allow the future support of plugins & components using MUI v5 you want to upgrade your `AppTheme`'s to using the `UnifiedThemeProvider` + +```diff + Provider: ({ children }) => ( +- +- {children} +- ++ + ), +``` diff --git a/.changeset/weak-snails-sparkle.md b/.changeset/weak-snails-sparkle.md index 947c20117b..95a2255e56 100644 --- a/.changeset/weak-snails-sparkle.md +++ b/.changeset/weak-snails-sparkle.md @@ -1,24 +1,5 @@ --- -'@backstage/app-defaults': minor -'@backstage/test-utils': minor -'@backstage/theme': minor -'@backstage/plugin-techdocs-addons-test-utils': patch '@backstage/cli': patch --- -**MUI v5 Support:** Adding platform-wide support for MUI v5 allowing a transition phase for migrating central plugins & components over. We still support v4 instances & plugins by adding a - -To allow the future support of plugins & components using MUI v5 you want to upgrade your `AppTheme`'s to using the `UnifiedThemeProvider` - -```diff - Provider: ({ children }) => ( -- -- {children} -- -+ - ), -``` - -**'@backstage/test-utils':** Test App Wrapper is using `UnifiedThemeProvider` for tests now. -**'@backstage/plugin-techdocs-addons-test-utils':** Fix tests by avoiding re-running theme on cleanup. -**'@backstage/cli':** Enforcing MUI v5 specific linting to minimize bundle size. +Enforcing MUI v5 specific linting to minimize bundle size. diff --git a/packages/theme/package.json b/packages/theme/package.json index 0e73918072..52def665d6 100644 --- a/packages/theme/package.json +++ b/packages/theme/package.json @@ -42,11 +42,6 @@ "react": "^16.13.1 || ^17.0.0", "react-dom": "^16.13.1 || ^17.0.0" }, - "peerDependenciesMeta": { - "@material-ui/core": { - "optional": true - } - }, "devDependencies": { "@backstage/cli": "workspace:^", "@types/react": "^16.13.1 || ^17.0.0" diff --git a/yarn.lock b/yarn.lock index cc32ce9a0e..2e6f814cf5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9636,9 +9636,6 @@ __metadata: "@types/react": ^16.13.1 || ^17.0.0 react: ^16.13.1 || ^17.0.0 react-dom: ^16.13.1 || ^17.0.0 - peerDependenciesMeta: - "@material-ui/core": - optional: true languageName: unknown linkType: soft