From 2510b6418592fd02899d2a3a180a22f3f1216e2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Tunkl?= Date: Fri, 5 Aug 2022 15:20:07 +0200 Subject: [PATCH 001/110] Adds possibility to not skip default namespace MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomáš Tunkl --- .../components/EntityRefLink/humanize.test.ts | 28 +++++++++++++++++++ .../src/components/EntityRefLink/humanize.ts | 8 ++++-- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/plugins/catalog-react/src/components/EntityRefLink/humanize.test.ts b/plugins/catalog-react/src/components/EntityRefLink/humanize.test.ts index d41d3c6635..ac873b5140 100644 --- a/plugins/catalog-react/src/components/EntityRefLink/humanize.test.ts +++ b/plugins/catalog-react/src/components/EntityRefLink/humanize.test.ts @@ -34,6 +34,23 @@ describe('humanizeEntityRef', () => { expect(title).toEqual('component:software'); }); + it('formats entity in default namespace without skipping default namespace', () => { + const entity = { + apiVersion: 'v1', + kind: 'Component', + metadata: { + name: 'software', + }, + spec: { + owner: 'guest', + type: 'service', + lifecycle: 'production', + }, + }; + const title = humanizeEntityRef(entity, {skipDefaultNamespace: false}); + expect(title).toEqual('component:default/software'); + }); + it('formats entity in other namespace', () => { const entity = { apiVersion: 'v1', @@ -103,4 +120,15 @@ describe('humanizeEntityRef', () => { }); expect(title).toEqual('test/software'); }); + + it('formats entity name in default namespace without skip of default namespace', () => { + const entityName = { + kind: 'Component', + namespace: 'default', + name: 'software', + }; + + const title = humanizeEntityRef(entityName, {skipDefaultNamespace: false}); + expect(title).toEqual('component:default/software'); + }); }); diff --git a/plugins/catalog-react/src/components/EntityRefLink/humanize.ts b/plugins/catalog-react/src/components/EntityRefLink/humanize.ts index 2f72a7ee3b..bbf826ecb2 100644 --- a/plugins/catalog-react/src/components/EntityRefLink/humanize.ts +++ b/plugins/catalog-react/src/components/EntityRefLink/humanize.ts @@ -23,9 +23,13 @@ import { /** @public */ export function humanizeEntityRef( entityRef: Entity | CompoundEntityRef, - opts?: { defaultKind?: string }, + opts?: { + defaultKind?: string + skipDefaultNamespace?: boolean + }, ) { const defaultKind = opts?.defaultKind; + const skipDefaultNamespace = opts?.skipDefaultNamespace ?? true; let kind; let namespace; let name; @@ -40,7 +44,7 @@ export function humanizeEntityRef( name = entityRef.name; } - if (namespace === DEFAULT_NAMESPACE) { + if (skipDefaultNamespace === true && namespace === DEFAULT_NAMESPACE) { namespace = undefined; } From f6033d1121a053901f1df02c852db25171ffb43c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Tunkl?= Date: Tue, 23 Aug 2022 12:06:57 +0200 Subject: [PATCH 002/110] New changeset MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomáš Tunkl --- .changeset/eight-shrimps-call.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/eight-shrimps-call.md diff --git a/.changeset/eight-shrimps-call.md b/.changeset/eight-shrimps-call.md new file mode 100644 index 0000000000..2e19681f7a --- /dev/null +++ b/.changeset/eight-shrimps-call.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-react': patch +--- + +humanizeEntityRef function can now be forced to include default namespace From 727e66aeb60258c04399defdd56585b159f1e3aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Tunkl?= Date: Tue, 23 Aug 2022 12:50:27 +0200 Subject: [PATCH 003/110] Applied prettier on files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomáš Tunkl --- .../src/components/EntityRefLink/humanize.test.ts | 6 ++++-- .../catalog-react/src/components/EntityRefLink/humanize.ts | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/plugins/catalog-react/src/components/EntityRefLink/humanize.test.ts b/plugins/catalog-react/src/components/EntityRefLink/humanize.test.ts index ac873b5140..9f08290095 100644 --- a/plugins/catalog-react/src/components/EntityRefLink/humanize.test.ts +++ b/plugins/catalog-react/src/components/EntityRefLink/humanize.test.ts @@ -47,7 +47,7 @@ describe('humanizeEntityRef', () => { lifecycle: 'production', }, }; - const title = humanizeEntityRef(entity, {skipDefaultNamespace: false}); + const title = humanizeEntityRef(entity, { skipDefaultNamespace: false }); expect(title).toEqual('component:default/software'); }); @@ -128,7 +128,9 @@ describe('humanizeEntityRef', () => { name: 'software', }; - const title = humanizeEntityRef(entityName, {skipDefaultNamespace: false}); + const title = humanizeEntityRef(entityName, { + skipDefaultNamespace: false, + }); expect(title).toEqual('component:default/software'); }); }); diff --git a/plugins/catalog-react/src/components/EntityRefLink/humanize.ts b/plugins/catalog-react/src/components/EntityRefLink/humanize.ts index bbf826ecb2..bd97ce2548 100644 --- a/plugins/catalog-react/src/components/EntityRefLink/humanize.ts +++ b/plugins/catalog-react/src/components/EntityRefLink/humanize.ts @@ -24,8 +24,8 @@ import { export function humanizeEntityRef( entityRef: Entity | CompoundEntityRef, opts?: { - defaultKind?: string - skipDefaultNamespace?: boolean + defaultKind?: string; + skipDefaultNamespace?: boolean; }, ) { const defaultKind = opts?.defaultKind; From e7f1848c4ed74090439938fe50db4601fb349f5b Mon Sep 17 00:00:00 2001 From: Eric Peterson Date: Fri, 2 Sep 2022 16:47:27 +0200 Subject: [PATCH 004/110] Initial draft promoting the plugin analytics api Signed-off-by: Eric Peterson Co-authored-by: Emma White <251374+ewhite1997@users.noreply.github.com> --- .../2022-09-08-fyi-plugin-analytics-api.md | 88 +++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 microsite/blog/2022-09-08-fyi-plugin-analytics-api.md diff --git a/microsite/blog/2022-09-08-fyi-plugin-analytics-api.md b/microsite/blog/2022-09-08-fyi-plugin-analytics-api.md new file mode 100644 index 0000000000..24304c0d10 --- /dev/null +++ b/microsite/blog/2022-09-08-fyi-plugin-analytics-api.md @@ -0,0 +1,88 @@ +--- +# prettier-ignore +title: FYI 📣 The Plugin Analytics API +author: Eric Peterson, Spotify +authorURL: https://github.com/iamEAP +authorImageURL: https://avatars.githubusercontent.com/u/3496491?v=4 +--- + +**TL;DR** If you didn't know, now you know: the Backstage plugin analytics API is here to help you understand how developers in your organization are using Backstage. + +## What is the plugin analytics API? + +The plugin analytics API is a [utility api](https://backstage.io/docs/api/utility-apis) available by default in every Backstage instance, intended to bridge the gap between the needs of Backstage integrators and plugin developers. While Backstage integrators want visibility into the plugins they’ve installed, they lack the power to instrument those plugins. And although plugin developers have the power to instrument plugins, they can’t do so without a single, vendor-agnostic way to track events. Enter: the plugin analytics API. + +While “analytics” as a concept can be broad, the goal of the API is narrowly focused: empower those deploying Backstage to understand usage of their instance. The plugin analytics API isn’t designed to solve for observability use-cases like tracing, logging, performance monitoring, error metrics, or alerting. Rather, the API is designed to capture and quantify real user interactions, which can form the basis for metrics like daily active users, top plugins, and more. + +## Start collecting data + +Backstage core (and a few other plugins) are already instrumented with [key events](https://backstage.io/docs/plugins/analytics#key-events) that are ready for you to start collecting and analyzing. + +The simplest way to get started is to use one of the [supported analytics tools](https://backstage.io/docs/plugins/analytics#supported-analytics-tools) and install its provided API implementation like you would any other utility API. For example: + +```tsx +// packages/app/src/apis.ts +import { + analyticsApiRef, + configApiRef, + identityApiRef, +} from '@backstage/core-plugin-api'; +import { GoogleAnalytics } from '@backstage/plugin-analytics-module-ga'; + +export const apis: AnyApiFactory[] = [ + // Instantiate and register the GA Analytics API Implementation. + createApiFactory({ + api: analyticsApiRef, + deps: { configApi: configApiRef, identityApi: identityApiRef }, + factory: ({ configApi, identityApi }) => + GoogleAnalytics.fromConfig(configApi, { + identityApi, + }), + }), +]; +``` + +If your chosen analytics tool doesn’t have an integration yet, you can write a custom integration by [following these instructions](https://backstage.io/docs/plugins/analytics#writing-integrations). (And if you’re integrating with a publicly available analytics service, as opposed to a custom in-house system, why not [consider contributing it back to the community](https://backstage.io/docs/plugins/create-a-plugin)?) + +## Instrument plugins + +While some key events are already instrumented, there may be important actions in open source plugins that are un-instrumented, not to mention in your custom, InnerSource plugins. Luckily, the plugin analytics API can be leveraged by open source and InnerSource plugins all the same. + +To capture an event, invoke the `useAnalytics()` react hook and call the function it returns when the user performs the action you wish to track (e.g. merging a pull request): + +```tsx +import { useAnalytics } from '@backstage/core-plugin-api'; + +const analytics = useAnalytics(); +analytics.captureEvent('merge', pullRequestName); +``` + +Don’t worry about having to stuff additional levels of detail into just the event action and subject, you can provide extra dimensional data on the `attributes` property, as well as a primary metric on the `value` property, like this: + +```tsx +analytics.captureEvent('merge', pullRequestName, { + value: pullRequestAgeInMinutes, + attributes: { + org: orgName, + repo: repoName, + }, +}); +``` + +In situations where your plugin is tracking multiple events and you want all of those events to share common dimensional data, you can use the ``. Every event captured in child components underneath this context automatically inherits the values you set: + +```tsx +import { AnalyticsContext } from '@backstage/core-plugin-api'; + + + {children} +` to automatically decorate every event with a corresponding plugin ID and an extension name in order to facilitate plugin-level analysis. + +While the above should be enough to get you going, don’t forget to check out [the complete guide to event capture](https://backstage.io/docs/plugins/analytics#capturing-events), which covers event naming considerations, testing, and more. + +## Get involved + +If you didn’t know, now you know! If you’re passionate about data and want to help push the Backstage analytics ecosystem forward, join us in the [#analytics channel on discord](https://discord.com/channels/687207715902193673/1007303347914690610), contribute [integration ideas](https://github.com/backstage/backstage/issues/new?assignees=&labels=plugin&template=plugin_template.md&title=%5BAnalytics+Module%5D+THE+ANALYTICS+TOOL+TO+INTEGRATE), or [suggest a new analytics event](https://github.com/backstage/backstage/issues/new?assignees=&labels=enhancement&template=feature_template.md&title=[Analytics%20Event]:%20THE+EVENT+TO+CAPTURE). From f0510a20b5e25fa9f693f8ba9138c778f56abd68 Mon Sep 17 00:00:00 2001 From: mufaddal motiwala Date: Mon, 5 Sep 2022 01:16:22 +0530 Subject: [PATCH 005/110] add Dismissable Error Banner Signed-off-by: mufaddal motiwala --- .changeset/new-taxis-vanish.md | 5 +++ .../src/components/TaskPage/TaskErrors.tsx | 35 +++++++++++++++++++ .../src/components/TaskPage/TaskPage.tsx | 2 ++ .../src/components/hooks/useEventStream.ts | 3 ++ 4 files changed, 45 insertions(+) create mode 100644 .changeset/new-taxis-vanish.md create mode 100644 plugins/scaffolder/src/components/TaskPage/TaskErrors.tsx diff --git a/.changeset/new-taxis-vanish.md b/.changeset/new-taxis-vanish.md new file mode 100644 index 0000000000..c461d06824 --- /dev/null +++ b/.changeset/new-taxis-vanish.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +Addition of a Dismissable Error Banner in Scaffolder page diff --git a/plugins/scaffolder/src/components/TaskPage/TaskErrors.tsx b/plugins/scaffolder/src/components/TaskPage/TaskErrors.tsx new file mode 100644 index 0000000000..3d82bfc5a3 --- /dev/null +++ b/plugins/scaffolder/src/components/TaskPage/TaskErrors.tsx @@ -0,0 +1,35 @@ +/* + * 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 { Box } from '@material-ui/core'; +import React from 'react'; +import { DismissableBanner } from '@backstage/core-components'; +import { TaskStream } from '../hooks/useEventStream'; + +type TaskPageLinksProps = { + taskStream: TaskStream; +}; + +export const TaskErrors = ({ taskStream }: TaskPageLinksProps) => { + return taskStream.error ? ( + + + + ) : null; +}; diff --git a/plugins/scaffolder/src/components/TaskPage/TaskPage.tsx b/plugins/scaffolder/src/components/TaskPage/TaskPage.tsx index 3dd54e1d09..4fa5968216 100644 --- a/plugins/scaffolder/src/components/TaskPage/TaskPage.tsx +++ b/plugins/scaffolder/src/components/TaskPage/TaskPage.tsx @@ -54,6 +54,7 @@ import { } from '../../routes'; import { ScaffolderTaskStatus, ScaffolderTaskOutput } from '../../types'; import { useTaskEventStream } from '../hooks/useEventStream'; +import { TaskErrors } from './TaskErrors'; import { TaskPageLinks } from './TaskPageLinks'; // typings are wrong for this library, so fallback to not parsing types. @@ -356,6 +357,7 @@ export const TaskPage = ({ loadingText }: TaskPageProps) => { {!currentStepId && }
+
diff --git a/plugins/scaffolder/src/components/hooks/useEventStream.ts b/plugins/scaffolder/src/components/hooks/useEventStream.ts index 8ff9a30d0b..bb24c0d612 100644 --- a/plugins/scaffolder/src/components/hooks/useEventStream.ts +++ b/plugins/scaffolder/src/components/hooks/useEventStream.ts @@ -49,6 +49,7 @@ type ReducerLogEntry = { status?: ScaffolderTaskStatus; message: string; output?: ScaffolderTaskOutput; + error?: Error; }; }; @@ -114,6 +115,8 @@ function reducer(draft: TaskStream, action: ReducerAction) { case 'COMPLETED': { draft.completed = true; draft.output = action.data.body.output; + draft.error = action.data.body.error; + return; } From d9b7dd9032b6e46ad1cf70129313e38e7359729a Mon Sep 17 00:00:00 2001 From: mufaddal motiwala Date: Mon, 5 Sep 2022 01:35:31 +0530 Subject: [PATCH 006/110] changeset fix Signed-off-by: mufaddal motiwala --- .changeset/new-taxis-vanish.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/new-taxis-vanish.md b/.changeset/new-taxis-vanish.md index c461d06824..4d0c6d64b9 100644 --- a/.changeset/new-taxis-vanish.md +++ b/.changeset/new-taxis-vanish.md @@ -2,4 +2,4 @@ '@backstage/plugin-scaffolder': patch --- -Addition of a Dismissable Error Banner in Scaffolder page +Addition of a dismissible Error Banner in Scaffolder page From 5f388ca50154c43d1270dcc7d4ed4648fb37a0bc Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 2 Sep 2022 15:39:36 +0200 Subject: [PATCH 007/110] backend-plugin-api: built-in options in service factories MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Fredrik Adelöw Signed-off-by: Patrik Oldsberg --- .../src/services/system/types.test.ts | 89 +++++++++++++++++++ .../src/services/system/types.ts | 18 +++- 2 files changed, 104 insertions(+), 3 deletions(-) create mode 100644 packages/backend-plugin-api/src/services/system/types.test.ts diff --git a/packages/backend-plugin-api/src/services/system/types.test.ts b/packages/backend-plugin-api/src/services/system/types.test.ts new file mode 100644 index 0000000000..29512d3a58 --- /dev/null +++ b/packages/backend-plugin-api/src/services/system/types.test.ts @@ -0,0 +1,89 @@ +/* + * 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 { createServiceFactory, createServiceRef } from './types'; + +describe('createServiceFactory', () => { + it('should create a meta factory with no options', () => { + const ref = createServiceRef({ id: 'x' }); + const metaFactory = createServiceFactory({ + service: ref, + deps: {}, + async factory(_deps) { + return async () => 'x'; + }, + }); + expect(metaFactory).toEqual(expect.any(Function)); + expect(metaFactory().service).toBe(ref); + + // @ts-expect-error + metaFactory('string'); + // @ts-expect-error + metaFactory({}); + // @ts-expect-error + metaFactory({ x: 1 }); + // @ts-expect-error + metaFactory(null); + metaFactory(undefined); + metaFactory(); + }); + + it('should create a meta factory with optional options', () => { + const ref = createServiceRef({ id: 'x' }); + const metaFactory = createServiceFactory({ + service: ref, + deps: {}, + async factory(_deps, _opts?: { x: number }) { + return async () => 'x'; + }, + }); + expect(metaFactory).toEqual(expect.any(Function)); + + // @ts-expect-error + metaFactory('string'); + // @ts-expect-error + metaFactory({}); + metaFactory({ x: 1 }); + // @ts-expect-error + metaFactory(null); + metaFactory(undefined); + metaFactory(); + }); + + it('should create a meta factory with required options', () => { + const ref = createServiceRef({ id: 'x' }); + const metaFactory = createServiceFactory({ + service: ref, + deps: {}, + async factory(_deps, _opts: { x: number }) { + return async () => 'x'; + }, + }); + expect(metaFactory).toEqual(expect.any(Function)); + + // @ts-expect-error + metaFactory('string'); + // @ts-expect-error + metaFactory({}); + metaFactory({ x: 1 }); + // @ts-expect-error + metaFactory(null); + // @ts-expect-error + metaFactory(undefined); + // @ts-expect-error + metaFactory(); + }); +}); diff --git a/packages/backend-plugin-api/src/services/system/types.ts b/packages/backend-plugin-api/src/services/system/types.ts index d622b3917f..4737c6a0e8 100644 --- a/packages/backend-plugin-api/src/services/system/types.ts +++ b/packages/backend-plugin-api/src/services/system/types.ts @@ -90,10 +90,22 @@ export function createServiceFactory< TService, TImpl extends TService, TDeps extends { [name in string]: unknown }, + TOpts extends { [name in string]: unknown } | undefined = undefined, >(factory: { service: ServiceRef; deps: TypesToServiceRef; - factory(deps: DepsToDepFactories): Promise>; -}): ServiceFactory { - return factory as ServiceFactory; + factory( + deps: DepsToDepFactories, + options: TOpts, + ): Promise>; +}): undefined extends TOpts + ? (options?: TOpts) => ServiceFactory + : (options: TOpts) => ServiceFactory { + return (options?: TOpts) => ({ + service: factory.service, + deps: factory.deps, + factory(deps: DepsToDepFactories) { + return factory.factory(deps, options!); + }, + }); } From 5263e9449d0c47f49f903ff4224fab40c0fbbae0 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 2 Sep 2022 16:27:29 +0200 Subject: [PATCH 008/110] backend-next: widen accepted ServiceFactory types to include meta method MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Fredrik Adelöw Signed-off-by: Patrik Oldsberg --- .../src/wiring/ServiceRegistry.ts | 26 ++++++++++++++----- packages/backend-app-api/src/wiring/types.ts | 6 +++-- .../backend-defaults/src/CreateBackend.ts | 14 ++-------- .../src/services/system/types.ts | 8 ++++-- .../src/next/wiring/TestBackend.ts | 1 + 5 files changed, 33 insertions(+), 22 deletions(-) diff --git a/packages/backend-app-api/src/wiring/ServiceRegistry.ts b/packages/backend-app-api/src/wiring/ServiceRegistry.ts index 45b82aac56..e0509aecde 100644 --- a/packages/backend-app-api/src/wiring/ServiceRegistry.ts +++ b/packages/backend-app-api/src/wiring/ServiceRegistry.ts @@ -26,7 +26,9 @@ import { stringifyError } from '@backstage/errors'; * @internal */ export type InternalServiceRef = ServiceRef & { - __defaultFactory?: (service: ServiceRef) => Promise>; + __defaultFactory?: ( + service: ServiceRef, + ) => Promise | (() => ServiceFactory)>; }; export class ServiceRegistry { @@ -40,8 +42,18 @@ export class ServiceRegistry { } >; - constructor(factories: ServiceFactory[]) { - this.#providedFactories = new Map(factories.map(f => [f.service.id, f])); + constructor( + factories: Array | (() => ServiceFactory)>, + ) { + this.#providedFactories = new Map( + factories.map(f => { + if (typeof f === 'function') { + const cf = f(); + return [cf.service.id, cf]; + } + return [f.service.id, f]; + }), + ); this.#loadedDefaultFactories = new Map(); this.#implementations = new Map(); } @@ -57,9 +69,11 @@ export class ServiceRegistry { if (!factory) { let loadedFactory = this.#loadedDefaultFactories.get(defaultFactory!); if (!loadedFactory) { - loadedFactory = Promise.resolve().then( - () => defaultFactory!(ref) as Promise, - ); + loadedFactory = Promise.resolve() + .then(() => defaultFactory!(ref)) + .then(f => + typeof f === 'function' ? f() : f, + ) as Promise; this.#loadedDefaultFactories.set(defaultFactory!, loadedFactory); } // NOTE: This await is safe as long as #providedFactories is not mutated. diff --git a/packages/backend-app-api/src/wiring/types.ts b/packages/backend-app-api/src/wiring/types.ts index 55009edbdf..febc6830c7 100644 --- a/packages/backend-app-api/src/wiring/types.ts +++ b/packages/backend-app-api/src/wiring/types.ts @@ -43,7 +43,7 @@ export interface BackendRegisterInit { * @public */ export interface CreateSpecializedBackendOptions { - services: ServiceFactory[]; + services: (ServiceFactory | (() => ServiceFactory))[]; } export type ServiceHolder = { @@ -56,7 +56,9 @@ export type ServiceHolder = { export function createSpecializedBackend( options: CreateSpecializedBackendOptions, ): Backend { - return new BackstageBackend(options.services); + return new BackstageBackend( + options.services.map(s => (typeof s === 'function' ? s() : s)), + ); } /** diff --git a/packages/backend-defaults/src/CreateBackend.ts b/packages/backend-defaults/src/CreateBackend.ts index 819a77ea11..5130d6733b 100644 --- a/packages/backend-defaults/src/CreateBackend.ts +++ b/packages/backend-defaults/src/CreateBackend.ts @@ -47,24 +47,14 @@ export const defaultServiceFactories = [ * @public */ export interface CreateBackendOptions { - services?: ServiceFactory[]; + services?: (ServiceFactory | (() => ServiceFactory))[]; } /** * @public */ export function createBackend(options?: CreateBackendOptions): Backend { - const services = new Map( - defaultServiceFactories.map(sf => [sf.service.id, sf as ServiceFactory]), - ); - - if (options?.services) { - for (const sf of options.services) { - services.set(sf.service.id, sf); - } - } - return createSpecializedBackend({ - services: Array.from(services.values()), + services: [...defaultServiceFactories, ...(options?.services ?? [])], }); } diff --git a/packages/backend-plugin-api/src/services/system/types.ts b/packages/backend-plugin-api/src/services/system/types.ts index 4737c6a0e8..a19c17bb9c 100644 --- a/packages/backend-plugin-api/src/services/system/types.ts +++ b/packages/backend-plugin-api/src/services/system/types.ts @@ -41,7 +41,9 @@ export type InternalServiceRef = ServiceRef & { * The default factory that will be used to create service * instances if no other factory is provided. */ - __defaultFactory?: (service: ServiceRef) => Promise>; + __defaultFactory?: ( + service: ServiceRef, + ) => Promise | (() => ServiceFactory)>; }; /** @public */ @@ -67,7 +69,9 @@ export type ServiceFactory = { */ export function createServiceRef(options: { id: string; - defaultFactory?: (service: ServiceRef) => Promise>; + defaultFactory?: ( + service: ServiceRef, + ) => Promise | (() => ServiceFactory)>; }): ServiceRef { const { id, defaultFactory } = options; return { diff --git a/packages/backend-test-utils/src/next/wiring/TestBackend.ts b/packages/backend-test-utils/src/next/wiring/TestBackend.ts index 98e979793e..f93b34cdd8 100644 --- a/packages/backend-test-utils/src/next/wiring/TestBackend.ts +++ b/packages/backend-test-utils/src/next/wiring/TestBackend.ts @@ -32,6 +32,7 @@ export interface TestBackendOptions< ...{ [index in keyof TServices]: | ServiceFactory + | (() => ServiceFactory) | [ServiceRef, Partial]; }, ]; From d2c6465a43337af3322af95f04aecc2dc576e9e5 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 2 Sep 2022 16:29:37 +0200 Subject: [PATCH 009/110] update API reports Signed-off-by: Patrik Oldsberg --- packages/backend-app-api/api-report.md | 40 +++++++++++++++-------- packages/backend-defaults/api-report.md | 2 +- packages/backend-plugin-api/api-report.md | 18 ++++++++-- packages/backend-test-utils/api-report.md | 1 + 4 files changed, 44 insertions(+), 17 deletions(-) diff --git a/packages/backend-app-api/api-report.md b/packages/backend-app-api/api-report.md index 0f8806870d..ea149a44f2 100644 --- a/packages/backend-app-api/api-report.md +++ b/packages/backend-app-api/api-report.md @@ -28,10 +28,12 @@ export interface Backend { } // @public (undocumented) -export const cacheFactory: ServiceFactory; +export const cacheFactory: ( + options?: undefined, +) => ServiceFactory; // @public (undocumented) -export const configFactory: ServiceFactory; +export const configFactory: (options?: undefined) => ServiceFactory; // @public (undocumented) export function createSpecializedBackend( @@ -41,28 +43,36 @@ export function createSpecializedBackend( // @public (undocumented) export interface CreateSpecializedBackendOptions { // (undocumented) - services: ServiceFactory[]; + services: (ServiceFactory | (() => ServiceFactory))[]; } // @public (undocumented) -export const databaseFactory: ServiceFactory; +export const databaseFactory: ( + options?: undefined, +) => ServiceFactory; // @public (undocumented) -export const discoveryFactory: ServiceFactory; +export const discoveryFactory: ( + options?: undefined, +) => ServiceFactory; // @public (undocumented) -export const httpRouterFactory: ServiceFactory; +export const httpRouterFactory: ( + options?: undefined, +) => ServiceFactory; // @public (undocumented) -export const loggerFactory: ServiceFactory; +export const loggerFactory: (options?: undefined) => ServiceFactory; // @public (undocumented) -export const permissionsFactory: ServiceFactory< - PermissionAuthorizer | PermissionEvaluator ->; +export const permissionsFactory: ( + options?: undefined, +) => ServiceFactory; // @public (undocumented) -export const schedulerFactory: ServiceFactory; +export const schedulerFactory: ( + options?: undefined, +) => ServiceFactory; // @public (undocumented) export type ServiceOrExtensionPoint = @@ -70,8 +80,12 @@ export type ServiceOrExtensionPoint = | ServiceRef; // @public (undocumented) -export const tokenManagerFactory: ServiceFactory; +export const tokenManagerFactory: ( + options?: undefined, +) => ServiceFactory; // @public (undocumented) -export const urlReaderFactory: ServiceFactory; +export const urlReaderFactory: ( + options?: undefined, +) => ServiceFactory; ``` diff --git a/packages/backend-defaults/api-report.md b/packages/backend-defaults/api-report.md index b5f1e154bb..050ebde759 100644 --- a/packages/backend-defaults/api-report.md +++ b/packages/backend-defaults/api-report.md @@ -12,6 +12,6 @@ export function createBackend(options?: CreateBackendOptions): Backend; // @public (undocumented) export interface CreateBackendOptions { // (undocumented) - services?: ServiceFactory[]; + services?: (ServiceFactory | (() => ServiceFactory))[]; } ``` diff --git a/packages/backend-plugin-api/api-report.md b/packages/backend-plugin-api/api-report.md index 5ea7f52c4b..30e58237af 100644 --- a/packages/backend-plugin-api/api-report.md +++ b/packages/backend-plugin-api/api-report.md @@ -109,16 +109,28 @@ export function createServiceFactory< TDeps extends { [name in string]: unknown; }, + TOpts extends + | { + [name in string]: unknown; + } + | undefined = undefined, >(factory: { service: ServiceRef; deps: TypesToServiceRef; - factory(deps: DepsToDepFactories): Promise>; -}): ServiceFactory; + factory( + deps: DepsToDepFactories, + options: TOpts, + ): Promise>; +}): undefined extends TOpts + ? (options?: TOpts) => ServiceFactory + : (options: TOpts) => ServiceFactory; // @public (undocumented) export function createServiceRef(options: { id: string; - defaultFactory?: (service: ServiceRef) => Promise>; + defaultFactory?: ( + service: ServiceRef, + ) => Promise | (() => ServiceFactory)>; }): ServiceRef; // @public (undocumented) diff --git a/packages/backend-test-utils/api-report.md b/packages/backend-test-utils/api-report.md index c0f6a43321..2fe4ed31d3 100644 --- a/packages/backend-test-utils/api-report.md +++ b/packages/backend-test-utils/api-report.md @@ -46,6 +46,7 @@ export interface TestBackendOptions< ...{ [index in keyof TServices]: | ServiceFactory + | (() => ServiceFactory) | [ServiceRef, Partial]; }, ]; From 854ba373576faa4367c4d6ab091cc813c151f5db Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 5 Sep 2022 14:13:30 +0200 Subject: [PATCH 010/110] changesets: added changeset createServiceFactory update Signed-off-by: Patrik Oldsberg --- .changeset/metal-weeks-kiss.md | 7 +++++++ .changeset/short-mice-explode.md | 5 +++++ 2 files changed, 12 insertions(+) create mode 100644 .changeset/metal-weeks-kiss.md create mode 100644 .changeset/short-mice-explode.md diff --git a/.changeset/metal-weeks-kiss.md b/.changeset/metal-weeks-kiss.md new file mode 100644 index 0000000000..90e453dd5c --- /dev/null +++ b/.changeset/metal-weeks-kiss.md @@ -0,0 +1,7 @@ +--- +'@backstage/backend-app-api': patch +'@backstage/backend-defaults': patch +'@backstage/backend-test-utils': patch +--- + +Updated to support new `ServiceFactory` formats. diff --git a/.changeset/short-mice-explode.md b/.changeset/short-mice-explode.md new file mode 100644 index 0000000000..42ebfa9f5c --- /dev/null +++ b/.changeset/short-mice-explode.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-plugin-api': patch +--- + +The `createServiceFactory` method has been updated to return a higher-order factory that can accept options. From 17a4968d408b44f857a1eedb0fe2c9b444e3b91b Mon Sep 17 00:00:00 2001 From: Alex Crome Date: Mon, 5 Sep 2022 21:56:28 +0100 Subject: [PATCH 011/110] Avoid loading github installation if owner is not in allowedInstallationOwners Signed-off-by: Alex Crome --- .../src/github/SingleInstanceGithubCredentialsProvider.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts b/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts index 2fd2e7f7dc..8b87d985a5 100644 --- a/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts +++ b/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts @@ -93,12 +93,13 @@ class GithubAppManager { owner: string, repo?: string, ): Promise<{ accessToken: string | undefined }> { - const { installationId, suspended } = await this.getInstallationData(owner); if (this.allowedInstallationOwners) { if (!this.allowedInstallationOwners?.includes(owner)) { return { accessToken: undefined }; // An empty token allows anonymous access to public repos } } + + const { installationId, suspended } = await this.getInstallationData(owner); if (suspended) { throw new Error(`The GitHub application for ${owner} is suspended`); } From d0e8705afd554e953e011696aea75c39c9d3febf Mon Sep 17 00:00:00 2001 From: Alex Crome Date: Mon, 5 Sep 2022 22:05:29 +0100 Subject: [PATCH 012/110] Moved Github Installation loading to be within cached data Signed-off-by: Alex Crome --- .../SingleInstanceGithubCredentialsProvider.ts | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts b/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts index 8b87d985a5..5e98ddd3b1 100644 --- a/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts +++ b/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts @@ -99,19 +99,22 @@ class GithubAppManager { } } - const { installationId, suspended } = await this.getInstallationData(owner); - if (suspended) { - throw new Error(`The GitHub application for ${owner} is suspended`); - } - const cacheKey = repo ? `${owner}/${repo}` : owner; // Go and grab an access token for the app scoped to a repository if provided, if not use the organisation installation. return this.cache.getOrCreateToken(cacheKey, async () => { + const { installationId, suspended } = await this.getInstallationData( + owner, + ); + if (suspended) { + throw new Error(`The GitHub application for ${owner} is suspended`); + } + const result = await this.appClient.apps.createInstallationAccessToken({ installation_id: installationId, headers: HEADERS, }); + if (repo && result.data.repository_selection === 'selected') { const installationClient = new Octokit({ baseUrl: this.baseUrl, From d57e5f182cd983f4f1007993fa4a13c705072449 Mon Sep 17 00:00:00 2001 From: Alex Crome Date: Mon, 5 Sep 2022 23:20:18 +0100 Subject: [PATCH 013/110] Add initial test around cache Signed-off-by: Alex Crome --- ...eInstanceGithubCredentialsProvider.test.ts | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.test.ts b/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.test.ts index 1dcc45c1ef..3d58ffbb61 100644 --- a/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.test.ts +++ b/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.test.ts @@ -400,4 +400,36 @@ describe('SingleInstanceGithubCredentialsProvider tests', () => { }), ).resolves.not.toThrow(); }); + + it('should cache access token', async () => { + octokit.apps.listInstallations.mockResolvedValueOnce({ + headers: { + etag: '123', + }, + data: [ + { + id: 1, + repository_selection: 'all', + account: { + login: 'backstage', + }, + }, + ], + } as RestEndpointMethodTypes['apps']['listInstallations']['response']); + + octokit.apps.createInstallationAccessToken.mockResolvedValueOnce({ + data: { + expires_at: DateTime.local().plus({ hours: 1 }).toString(), + token: 'secret_token', + }, + } as RestEndpointMethodTypes['apps']['createInstallationAccessToken']['response']); + + for (let i = 0; i < 2; i++) { + const { token, headers } = await github.getCredentials({ + url: 'https://github.com/backstage', + }); + expect(headers).toEqual({ Authorization: 'Bearer secret_token' }); + expect(token).toEqual('secret_token'); + } + }); }); From 97d6f238315b6f95a54f3f033fcf4b273e19707f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 5 Sep 2022 22:46:26 +0000 Subject: [PATCH 014/110] fix(deps): update dependency @swc/core to v1.2.247 Signed-off-by: Renovate Bot --- storybook/yarn.lock | 110 ++++++++++++++++++++++---------------------- yarn.lock | 110 ++++++++++++++++++++++---------------------- 2 files changed, 110 insertions(+), 110 deletions(-) diff --git a/storybook/yarn.lock b/storybook/yarn.lock index eefa1a4165..3592f58d4b 100644 --- a/storybook/yarn.lock +++ b/storybook/yarn.lock @@ -2866,126 +2866,126 @@ __metadata: languageName: node linkType: hard -"@swc/core-android-arm-eabi@npm:1.2.246": - version: 1.2.246 - resolution: "@swc/core-android-arm-eabi@npm:1.2.246" +"@swc/core-android-arm-eabi@npm:1.2.247": + version: 1.2.247 + resolution: "@swc/core-android-arm-eabi@npm:1.2.247" dependencies: "@swc/wasm": 1.2.122 conditions: os=android & cpu=arm languageName: node linkType: hard -"@swc/core-android-arm64@npm:1.2.246": - version: 1.2.246 - resolution: "@swc/core-android-arm64@npm:1.2.246" +"@swc/core-android-arm64@npm:1.2.247": + version: 1.2.247 + resolution: "@swc/core-android-arm64@npm:1.2.247" dependencies: "@swc/wasm": 1.2.130 conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-arm64@npm:1.2.246": - version: 1.2.246 - resolution: "@swc/core-darwin-arm64@npm:1.2.246" +"@swc/core-darwin-arm64@npm:1.2.247": + version: 1.2.247 + resolution: "@swc/core-darwin-arm64@npm:1.2.247" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-x64@npm:1.2.246": - version: 1.2.246 - resolution: "@swc/core-darwin-x64@npm:1.2.246" +"@swc/core-darwin-x64@npm:1.2.247": + version: 1.2.247 + resolution: "@swc/core-darwin-x64@npm:1.2.247" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@swc/core-freebsd-x64@npm:1.2.246": - version: 1.2.246 - resolution: "@swc/core-freebsd-x64@npm:1.2.246" +"@swc/core-freebsd-x64@npm:1.2.247": + version: 1.2.247 + resolution: "@swc/core-freebsd-x64@npm:1.2.247" dependencies: "@swc/wasm": 1.2.130 conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@swc/core-linux-arm-gnueabihf@npm:1.2.246": - version: 1.2.246 - resolution: "@swc/core-linux-arm-gnueabihf@npm:1.2.246" +"@swc/core-linux-arm-gnueabihf@npm:1.2.247": + version: 1.2.247 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.2.247" dependencies: "@swc/wasm": 1.2.130 conditions: os=linux & cpu=arm languageName: node linkType: hard -"@swc/core-linux-arm64-gnu@npm:1.2.246": - version: 1.2.246 - resolution: "@swc/core-linux-arm64-gnu@npm:1.2.246" +"@swc/core-linux-arm64-gnu@npm:1.2.247": + version: 1.2.247 + resolution: "@swc/core-linux-arm64-gnu@npm:1.2.247" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-arm64-musl@npm:1.2.246": - version: 1.2.246 - resolution: "@swc/core-linux-arm64-musl@npm:1.2.246" +"@swc/core-linux-arm64-musl@npm:1.2.247": + version: 1.2.247 + resolution: "@swc/core-linux-arm64-musl@npm:1.2.247" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@swc/core-linux-x64-gnu@npm:1.2.246": - version: 1.2.246 - resolution: "@swc/core-linux-x64-gnu@npm:1.2.246" +"@swc/core-linux-x64-gnu@npm:1.2.247": + version: 1.2.247 + resolution: "@swc/core-linux-x64-gnu@npm:1.2.247" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-x64-musl@npm:1.2.246": - version: 1.2.246 - resolution: "@swc/core-linux-x64-musl@npm:1.2.246" +"@swc/core-linux-x64-musl@npm:1.2.247": + version: 1.2.247 + resolution: "@swc/core-linux-x64-musl@npm:1.2.247" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@swc/core-win32-arm64-msvc@npm:1.2.246": - version: 1.2.246 - resolution: "@swc/core-win32-arm64-msvc@npm:1.2.246" +"@swc/core-win32-arm64-msvc@npm:1.2.247": + version: 1.2.247 + resolution: "@swc/core-win32-arm64-msvc@npm:1.2.247" dependencies: "@swc/wasm": 1.2.130 conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@swc/core-win32-ia32-msvc@npm:1.2.246": - version: 1.2.246 - resolution: "@swc/core-win32-ia32-msvc@npm:1.2.246" +"@swc/core-win32-ia32-msvc@npm:1.2.247": + version: 1.2.247 + resolution: "@swc/core-win32-ia32-msvc@npm:1.2.247" dependencies: "@swc/wasm": 1.2.130 conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@swc/core-win32-x64-msvc@npm:1.2.246": - version: 1.2.246 - resolution: "@swc/core-win32-x64-msvc@npm:1.2.246" +"@swc/core-win32-x64-msvc@npm:1.2.247": + version: 1.2.247 + resolution: "@swc/core-win32-x64-msvc@npm:1.2.247" conditions: os=win32 & cpu=x64 languageName: node linkType: hard "@swc/core@npm:^1.2.239": - version: 1.2.246 - resolution: "@swc/core@npm:1.2.246" + version: 1.2.247 + resolution: "@swc/core@npm:1.2.247" dependencies: - "@swc/core-android-arm-eabi": 1.2.246 - "@swc/core-android-arm64": 1.2.246 - "@swc/core-darwin-arm64": 1.2.246 - "@swc/core-darwin-x64": 1.2.246 - "@swc/core-freebsd-x64": 1.2.246 - "@swc/core-linux-arm-gnueabihf": 1.2.246 - "@swc/core-linux-arm64-gnu": 1.2.246 - "@swc/core-linux-arm64-musl": 1.2.246 - "@swc/core-linux-x64-gnu": 1.2.246 - "@swc/core-linux-x64-musl": 1.2.246 - "@swc/core-win32-arm64-msvc": 1.2.246 - "@swc/core-win32-ia32-msvc": 1.2.246 - "@swc/core-win32-x64-msvc": 1.2.246 + "@swc/core-android-arm-eabi": 1.2.247 + "@swc/core-android-arm64": 1.2.247 + "@swc/core-darwin-arm64": 1.2.247 + "@swc/core-darwin-x64": 1.2.247 + "@swc/core-freebsd-x64": 1.2.247 + "@swc/core-linux-arm-gnueabihf": 1.2.247 + "@swc/core-linux-arm64-gnu": 1.2.247 + "@swc/core-linux-arm64-musl": 1.2.247 + "@swc/core-linux-x64-gnu": 1.2.247 + "@swc/core-linux-x64-musl": 1.2.247 + "@swc/core-win32-arm64-msvc": 1.2.247 + "@swc/core-win32-ia32-msvc": 1.2.247 + "@swc/core-win32-x64-msvc": 1.2.247 dependenciesMeta: "@swc/core-android-arm-eabi": optional: true @@ -3015,7 +3015,7 @@ __metadata: optional: true bin: swcx: run_swcx.js - checksum: 499379abebaa35624670757113a9a592b88117a5afe922cf24af4aa804bf3f3636753d230b8d5b0b4c9f2cb902b8bc2db0b468db33b7a1a460eae950f702978b + checksum: 8ad850c5637405473cb7680865c0b1bdd9e955c0f32e86e6564d43c6a3fb0941b69d7ca152b661694e614530c69fe9824f32d10b606564187730d1d146f62805 languageName: node linkType: hard diff --git a/yarn.lock b/yarn.lock index 3bc5ac7598..d460f2a5dc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13139,126 +13139,126 @@ __metadata: languageName: node linkType: hard -"@swc/core-android-arm-eabi@npm:1.2.246": - version: 1.2.246 - resolution: "@swc/core-android-arm-eabi@npm:1.2.246" +"@swc/core-android-arm-eabi@npm:1.2.247": + version: 1.2.247 + resolution: "@swc/core-android-arm-eabi@npm:1.2.247" dependencies: "@swc/wasm": 1.2.122 conditions: os=android & cpu=arm languageName: node linkType: hard -"@swc/core-android-arm64@npm:1.2.246": - version: 1.2.246 - resolution: "@swc/core-android-arm64@npm:1.2.246" +"@swc/core-android-arm64@npm:1.2.247": + version: 1.2.247 + resolution: "@swc/core-android-arm64@npm:1.2.247" dependencies: "@swc/wasm": 1.2.130 conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-arm64@npm:1.2.246": - version: 1.2.246 - resolution: "@swc/core-darwin-arm64@npm:1.2.246" +"@swc/core-darwin-arm64@npm:1.2.247": + version: 1.2.247 + resolution: "@swc/core-darwin-arm64@npm:1.2.247" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-x64@npm:1.2.246": - version: 1.2.246 - resolution: "@swc/core-darwin-x64@npm:1.2.246" +"@swc/core-darwin-x64@npm:1.2.247": + version: 1.2.247 + resolution: "@swc/core-darwin-x64@npm:1.2.247" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@swc/core-freebsd-x64@npm:1.2.246": - version: 1.2.246 - resolution: "@swc/core-freebsd-x64@npm:1.2.246" +"@swc/core-freebsd-x64@npm:1.2.247": + version: 1.2.247 + resolution: "@swc/core-freebsd-x64@npm:1.2.247" dependencies: "@swc/wasm": 1.2.130 conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@swc/core-linux-arm-gnueabihf@npm:1.2.246": - version: 1.2.246 - resolution: "@swc/core-linux-arm-gnueabihf@npm:1.2.246" +"@swc/core-linux-arm-gnueabihf@npm:1.2.247": + version: 1.2.247 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.2.247" dependencies: "@swc/wasm": 1.2.130 conditions: os=linux & cpu=arm languageName: node linkType: hard -"@swc/core-linux-arm64-gnu@npm:1.2.246": - version: 1.2.246 - resolution: "@swc/core-linux-arm64-gnu@npm:1.2.246" +"@swc/core-linux-arm64-gnu@npm:1.2.247": + version: 1.2.247 + resolution: "@swc/core-linux-arm64-gnu@npm:1.2.247" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-arm64-musl@npm:1.2.246": - version: 1.2.246 - resolution: "@swc/core-linux-arm64-musl@npm:1.2.246" +"@swc/core-linux-arm64-musl@npm:1.2.247": + version: 1.2.247 + resolution: "@swc/core-linux-arm64-musl@npm:1.2.247" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@swc/core-linux-x64-gnu@npm:1.2.246": - version: 1.2.246 - resolution: "@swc/core-linux-x64-gnu@npm:1.2.246" +"@swc/core-linux-x64-gnu@npm:1.2.247": + version: 1.2.247 + resolution: "@swc/core-linux-x64-gnu@npm:1.2.247" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-x64-musl@npm:1.2.246": - version: 1.2.246 - resolution: "@swc/core-linux-x64-musl@npm:1.2.246" +"@swc/core-linux-x64-musl@npm:1.2.247": + version: 1.2.247 + resolution: "@swc/core-linux-x64-musl@npm:1.2.247" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@swc/core-win32-arm64-msvc@npm:1.2.246": - version: 1.2.246 - resolution: "@swc/core-win32-arm64-msvc@npm:1.2.246" +"@swc/core-win32-arm64-msvc@npm:1.2.247": + version: 1.2.247 + resolution: "@swc/core-win32-arm64-msvc@npm:1.2.247" dependencies: "@swc/wasm": 1.2.130 conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@swc/core-win32-ia32-msvc@npm:1.2.246": - version: 1.2.246 - resolution: "@swc/core-win32-ia32-msvc@npm:1.2.246" +"@swc/core-win32-ia32-msvc@npm:1.2.247": + version: 1.2.247 + resolution: "@swc/core-win32-ia32-msvc@npm:1.2.247" dependencies: "@swc/wasm": 1.2.130 conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@swc/core-win32-x64-msvc@npm:1.2.246": - version: 1.2.246 - resolution: "@swc/core-win32-x64-msvc@npm:1.2.246" +"@swc/core-win32-x64-msvc@npm:1.2.247": + version: 1.2.247 + resolution: "@swc/core-win32-x64-msvc@npm:1.2.247" conditions: os=win32 & cpu=x64 languageName: node linkType: hard "@swc/core@npm:^1.2.239": - version: 1.2.246 - resolution: "@swc/core@npm:1.2.246" + version: 1.2.247 + resolution: "@swc/core@npm:1.2.247" dependencies: - "@swc/core-android-arm-eabi": 1.2.246 - "@swc/core-android-arm64": 1.2.246 - "@swc/core-darwin-arm64": 1.2.246 - "@swc/core-darwin-x64": 1.2.246 - "@swc/core-freebsd-x64": 1.2.246 - "@swc/core-linux-arm-gnueabihf": 1.2.246 - "@swc/core-linux-arm64-gnu": 1.2.246 - "@swc/core-linux-arm64-musl": 1.2.246 - "@swc/core-linux-x64-gnu": 1.2.246 - "@swc/core-linux-x64-musl": 1.2.246 - "@swc/core-win32-arm64-msvc": 1.2.246 - "@swc/core-win32-ia32-msvc": 1.2.246 - "@swc/core-win32-x64-msvc": 1.2.246 + "@swc/core-android-arm-eabi": 1.2.247 + "@swc/core-android-arm64": 1.2.247 + "@swc/core-darwin-arm64": 1.2.247 + "@swc/core-darwin-x64": 1.2.247 + "@swc/core-freebsd-x64": 1.2.247 + "@swc/core-linux-arm-gnueabihf": 1.2.247 + "@swc/core-linux-arm64-gnu": 1.2.247 + "@swc/core-linux-arm64-musl": 1.2.247 + "@swc/core-linux-x64-gnu": 1.2.247 + "@swc/core-linux-x64-musl": 1.2.247 + "@swc/core-win32-arm64-msvc": 1.2.247 + "@swc/core-win32-ia32-msvc": 1.2.247 + "@swc/core-win32-x64-msvc": 1.2.247 dependenciesMeta: "@swc/core-android-arm-eabi": optional: true @@ -13288,7 +13288,7 @@ __metadata: optional: true bin: swcx: run_swcx.js - checksum: 499379abebaa35624670757113a9a592b88117a5afe922cf24af4aa804bf3f3636753d230b8d5b0b4c9f2cb902b8bc2db0b468db33b7a1a460eae950f702978b + checksum: 8ad850c5637405473cb7680865c0b1bdd9e955c0f32e86e6564d43c6a3fb0941b69d7ca152b661694e614530c69fe9824f32d10b606564187730d1d146f62805 languageName: node linkType: hard From f70d22e3b75488becc0af9d8561e71d24eed681e Mon Sep 17 00:00:00 2001 From: Simone Corsi Date: Mon, 5 Sep 2022 18:28:07 +0200 Subject: [PATCH 015/110] docs: adds backstage-plugin-ldap-auth Signed-off-by: Simone Corsi --- microsite/data/plugins/backstage-plugin-ldap-auth.yml | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 microsite/data/plugins/backstage-plugin-ldap-auth.yml diff --git a/microsite/data/plugins/backstage-plugin-ldap-auth.yml b/microsite/data/plugins/backstage-plugin-ldap-auth.yml new file mode 100644 index 0000000000..ca91b9bd30 --- /dev/null +++ b/microsite/data/plugins/backstage-plugin-ldap-auth.yml @@ -0,0 +1,9 @@ +--- +title: Backstage Plugin LDAP Auth +author: ImmobiliareLabs +authorUrl: https://github.com/immobiliare +category: Authentication +description: Backstage plugin to authenticate users to an external LDAP server +documentation: https://github.com/immobiliare/backstage-plugin-ldap-auth/blob/main/README.md +iconUrl: https://avatars.githubusercontent.com/u/10090828 +npmPackageName: '@immobiliarelabs/backstage-plugin-ldap-auth' From 11904b7616a4cf5261b38271d206ccd5f1f4ef66 Mon Sep 17 00:00:00 2001 From: Alex Crome Date: Tue, 6 Sep 2022 09:26:28 +0100 Subject: [PATCH 016/110] Share access token between repos in the same app Signed-off-by: Alex Crome --- ...eInstanceGithubCredentialsProvider.test.ts | 29 ++++---- ...SingleInstanceGithubCredentialsProvider.ts | 66 ++++++++++++------- 2 files changed, 57 insertions(+), 38 deletions(-) diff --git a/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.test.ts b/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.test.ts index 3d58ffbb61..b48103eea1 100644 --- a/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.test.ts +++ b/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.test.ts @@ -57,6 +57,7 @@ describe('SingleInstanceGithubCredentialsProvider tests', () => { token: 'hardcoded_token', }); }); + it('create repository specific tokens', async () => { octokit.apps.listInstallations.mockResolvedValue({ headers: { @@ -66,11 +67,6 @@ describe('SingleInstanceGithubCredentialsProvider tests', () => { { id: 1, repository_selection: 'selected', - account: null, - }, - { - id: 2, - repository_selection: 'selected', account: { login: 'backstage', }, @@ -195,9 +191,14 @@ describe('SingleInstanceGithubCredentialsProvider tests', () => { data: { expires_at: DateTime.local().plus({ hours: 1 }).toString(), token: 'secret_token', + repository_selection: 'selected', }, } as RestEndpointMethodTypes['apps']['createInstallationAccessToken']['response']); + octokit.apps.listReposAccessibleToInstallation.mockReturnValue({ + data: [{ name: 'some-repo' }], + } as unknown as RestEndpointMethodTypes['apps']['listReposAccessibleToInstallation']['response']); + const { token, headers } = await github.getCredentials({ url: 'https://github.com/backstage', }); @@ -402,7 +403,7 @@ describe('SingleInstanceGithubCredentialsProvider tests', () => { }); it('should cache access token', async () => { - octokit.apps.listInstallations.mockResolvedValueOnce({ + octokit.apps.listInstallations.mockReturnValue({ headers: { etag: '123', }, @@ -417,19 +418,19 @@ describe('SingleInstanceGithubCredentialsProvider tests', () => { ], } as RestEndpointMethodTypes['apps']['listInstallations']['response']); - octokit.apps.createInstallationAccessToken.mockResolvedValueOnce({ + octokit.apps.createInstallationAccessToken.mockReturnValue({ data: { expires_at: DateTime.local().plus({ hours: 1 }).toString(), token: 'secret_token', }, } as RestEndpointMethodTypes['apps']['createInstallationAccessToken']['response']); - for (let i = 0; i < 2; i++) { - const { token, headers } = await github.getCredentials({ - url: 'https://github.com/backstage', - }); - expect(headers).toEqual({ Authorization: 'Bearer secret_token' }); - expect(token).toEqual('secret_token'); - } + await github.getCredentials({ url: 'https://github.com/backstage' }); + await github.getCredentials({ url: 'https://github.com/backstage' }); + + expect(octokit.apps.listInstallations.mock.calls.length).toBe(1); + expect(octokit.apps.createInstallationAccessToken.mock.calls.length).toBe( + 1, + ); }); }); diff --git a/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts b/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts index 5e98ddd3b1..a502590a17 100644 --- a/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts +++ b/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts @@ -30,29 +30,52 @@ type InstallationData = { suspended: boolean; }; +type InstallationTokenData = { + token: string; + expiresAt: DateTime; + repositories?: String[]; +}; + class Cache { - private readonly tokenCache = new Map< - string, - { token: string; expiresAt: DateTime } - >(); + private readonly tokenCache = new Map(); async getOrCreateToken( - key: string, - supplier: () => Promise<{ token: string; expiresAt: DateTime }>, + owner: string, + repo: string | undefined, + supplier: () => Promise, ): Promise<{ accessToken: string }> { - const item = this.tokenCache.get(key); - if (item && this.isNotExpired(item.expiresAt)) { - return { accessToken: item.token }; + let ownerData = this.tokenCache.get(owner); + + if (!ownerData || !this.isNotExpired(ownerData.expiresAt)) { + ownerData = await supplier(); + this.tokenCache.set(owner, ownerData); } - const result = await supplier(); - this.tokenCache.set(key, result); - return { accessToken: result.token }; + if (!this.appliesToRepo(ownerData, repo)) { + throw new Error( + `The Backstage GitHub application used in the ${owner} organization does not have access to a repository with the name ${repo}`, + ); + } + + return { accessToken: ownerData.token }; } // consider timestamps older than 50 minutes to be expired. private isNotExpired = (date: DateTime) => date.diff(DateTime.local(), 'minutes').minutes > 50; + + private appliesToRepo(tokenData: InstallationTokenData, repo?: string) { + // If no specific repo has been requested the token is applicable + if (repo === undefined) { + return true; + } + // If the token is restricted to repositories, the token only applies if the repo is in the allow list + if (tokenData.repositories !== undefined) { + return tokenData.repositories.includes(repo); + } + // Otherwise the token is applicable + return true; + } } /** @@ -99,10 +122,8 @@ class GithubAppManager { } } - const cacheKey = repo ? `${owner}/${repo}` : owner; - // Go and grab an access token for the app scoped to a repository if provided, if not use the organisation installation. - return this.cache.getOrCreateToken(cacheKey, async () => { + return this.cache.getOrCreateToken(owner, repo, async () => { const { installationId, suspended } = await this.getInstallationData( owner, ); @@ -115,7 +136,9 @@ class GithubAppManager { headers: HEADERS, }); - if (repo && result.data.repository_selection === 'selected') { + let repositoryNames; + + if (result.data.repository_selection === 'selected') { const installationClient = new Octokit({ baseUrl: this.baseUrl, auth: result.data.token, @@ -126,18 +149,13 @@ class GithubAppManager { // The return type of the paginate method is incorrect. const repositories: RestEndpointMethodTypes['apps']['listReposAccessibleToInstallation']['response']['data']['repositories'] = repos.repositories ?? repos; - const hasRepo = repositories.some(repository => { - return repository.name === repo; - }); - if (!hasRepo) { - throw new Error( - `The Backstage GitHub application used in the ${owner} organization does not have access to a repository with the name ${repo}`, - ); - } + + repositoryNames = repositories.map(repository => repository.name); } return { token: result.data.token, expiresAt: DateTime.fromISO(result.data.expires_at), + repositories: repositoryNames, }; }); } From de6c99b043288f9acae6861207f4884c88838d1e Mon Sep 17 00:00:00 2001 From: Alex Crome Date: Tue, 6 Sep 2022 09:35:41 +0100 Subject: [PATCH 017/110] Fix access token cache time Signed-off-by: Alex Crome --- ...eInstanceGithubCredentialsProvider.test.ts | 34 ++++++++++++++++++- ...SingleInstanceGithubCredentialsProvider.ts | 7 ++-- 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.test.ts b/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.test.ts index b48103eea1..d9b2a4e749 100644 --- a/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.test.ts +++ b/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.test.ts @@ -420,7 +420,7 @@ describe('SingleInstanceGithubCredentialsProvider tests', () => { octokit.apps.createInstallationAccessToken.mockReturnValue({ data: { - expires_at: DateTime.local().plus({ hours: 1 }).toString(), + expires_at: DateTime.local().plus({ minutes: 11 }).toString(), token: 'secret_token', }, } as RestEndpointMethodTypes['apps']['createInstallationAccessToken']['response']); @@ -433,4 +433,36 @@ describe('SingleInstanceGithubCredentialsProvider tests', () => { 1, ); }); + + it('should expire access token cache 10 mins before token expires', async () => { + octokit.apps.listInstallations.mockReturnValue({ + headers: { + etag: '123', + }, + data: [ + { + id: 1, + repository_selection: 'all', + account: { + login: 'backstage', + }, + }, + ], + } as RestEndpointMethodTypes['apps']['listInstallations']['response']); + + octokit.apps.createInstallationAccessToken.mockReturnValue({ + data: { + expires_at: DateTime.local().plus({ minutes: 10 }).toString(), + token: 'secret_token', + }, + } as RestEndpointMethodTypes['apps']['createInstallationAccessToken']['response']); + + await github.getCredentials({ url: 'https://github.com/backstage' }); + await github.getCredentials({ url: 'https://github.com/backstage' }); + + expect(octokit.apps.listInstallations.mock.calls.length).toBe(2); + expect(octokit.apps.createInstallationAccessToken.mock.calls.length).toBe( + 2, + ); + }); }); diff --git a/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts b/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts index a502590a17..02e0893d8a 100644 --- a/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts +++ b/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts @@ -46,8 +46,10 @@ class Cache { ): Promise<{ accessToken: string }> { let ownerData = this.tokenCache.get(owner); - if (!ownerData || !this.isNotExpired(ownerData.expiresAt)) { + if (!ownerData || this.isExpired(ownerData.expiresAt)) { ownerData = await supplier(); + // Allow 10 minutes grace to account for clock skew + ownerData.expiresAt = ownerData.expiresAt.minus({ minutes: 10 }); this.tokenCache.set(owner, ownerData); } @@ -61,8 +63,7 @@ class Cache { } // consider timestamps older than 50 minutes to be expired. - private isNotExpired = (date: DateTime) => - date.diff(DateTime.local(), 'minutes').minutes > 50; + private isExpired = (date: DateTime) => DateTime.local() > date; private appliesToRepo(tokenData: InstallationTokenData, repo?: string) { // If no specific repo has been requested the token is applicable From 6cd4e06d91d9f74f0c49256b64f2e819d1b7efb5 Mon Sep 17 00:00:00 2001 From: Luka Siric Date: Tue, 6 Sep 2022 10:55:03 +0200 Subject: [PATCH 018/110] passing select attr to the getUsers Signed-off-by: Luka Siric --- .../catalog-backend-module-msgraph/src/microsoftGraph/read.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.ts b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.ts index ecf74b34d9..0542e4fd8e 100644 --- a/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.ts +++ b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.ts @@ -89,6 +89,7 @@ export async function readMicrosoftGraphUsers( queryMode?: 'basic' | 'advanced'; userFilter?: string; userExpand?: string; + userSelect?: string[]; transformer?: UserTransformer; logger: Logger; }, @@ -105,6 +106,7 @@ export async function readMicrosoftGraphUsers( { filter: options.userFilter, expand: options.userExpand, + select: options.userSelect || [], }, options.queryMode, )) { From b38f4cc987cbdad737b38e6a38b53a320329dc58 Mon Sep 17 00:00:00 2001 From: Luka Siric Date: Tue, 6 Sep 2022 11:04:56 +0200 Subject: [PATCH 019/110] updated readme Signed-off-by: Luka Siric --- plugins/catalog-backend-module-msgraph/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/catalog-backend-module-msgraph/README.md b/plugins/catalog-backend-module-msgraph/README.md index fe2e568b5a..9bf979f6a6 100644 --- a/plugins/catalog-backend-module-msgraph/README.md +++ b/plugins/catalog-backend-module-msgraph/README.md @@ -54,6 +54,8 @@ catalog: # and for the syntax https://docs.microsoft.com/en-us/graph/query-parameters#filter-parameter # This and userGroupMemberFilter are mutually exclusive, only one can be specified filter: accountEnabled eq true and userType eq 'member' + # See https://docs.microsoft.com/en-us/graph/api/resources/schemaextension?view=graph-rest-1.0 + select: ['id', 'displayName', 'description'] # Optional configuration block userGroupMember: # Optional filter for users, use group membership to get users. From d80aab31aed670120da2d7199639e857b1bceae5 Mon Sep 17 00:00:00 2001 From: Luka Siric Date: Tue, 6 Sep 2022 11:06:09 +0200 Subject: [PATCH 020/110] added changeset Signed-off-by: Luka Siric --- .changeset/cuddly-clocks-dance.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/cuddly-clocks-dance.md diff --git a/.changeset/cuddly-clocks-dance.md b/.changeset/cuddly-clocks-dance.md new file mode 100644 index 0000000000..1a9c05bf20 --- /dev/null +++ b/.changeset/cuddly-clocks-dance.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-msgraph': minor +--- + +Added $select attribute to user query From ced29ddfeea99060825bd40af144dddc08f29f8e Mon Sep 17 00:00:00 2001 From: Luka Siric Date: Tue, 6 Sep 2022 13:48:39 +0200 Subject: [PATCH 021/110] passing userSelect to the readMicrosoftGraphOrg Signed-off-by: Luka Siric --- .../src/microsoftGraph/read.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.ts b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.ts index 0542e4fd8e..8e1d9a3776 100644 --- a/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.ts +++ b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.ts @@ -106,7 +106,7 @@ export async function readMicrosoftGraphUsers( { filter: options.userFilter, expand: options.userExpand, - select: options.userSelect || [], + select: options.userSelect, }, options.queryMode, )) { @@ -147,6 +147,7 @@ export async function readMicrosoftGraphUsersInGroups( options: { queryMode?: 'basic' | 'advanced'; userExpand?: string; + userSelect?: string[]; userGroupMemberSearch?: string; userGroupMemberFilter?: string; groupExpand?: string; @@ -536,6 +537,7 @@ export async function readMicrosoftGraphOrg( options: { userExpand?: string; userFilter?: string; + userSelect?: string[]; userGroupMemberSearch?: string; userGroupMemberFilter?: string; groupExpand?: string; @@ -567,6 +569,7 @@ export async function readMicrosoftGraphOrg( const { users: usersWithFilter } = await readMicrosoftGraphUsers(client, { queryMode: options.queryMode, userFilter: options.userFilter, + userSelect: options.userSelect, userExpand: options.userExpand, transformer: options.userTransformer, logger: options.logger, From e821a3db3d132696a8ea27f9bd6eb3bb33f4db6c Mon Sep 17 00:00:00 2001 From: Luka Siric Date: Tue, 6 Sep 2022 13:49:02 +0200 Subject: [PATCH 022/110] added unit test for userSelect option Signed-off-by: Luka Siric --- .../src/microsoftGraph/read.test.ts | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.test.ts b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.test.ts index 3f43807809..7fe98cf1cf 100644 --- a/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.test.ts +++ b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.test.ts @@ -1002,6 +1002,12 @@ describe('read microsoft graph', () => { }; } + async function* getExampleUsersEmail() { + yield { + mail: 'user.name@example.com', + }; + } + async function getExampleUserProfile(userId: string) { return { id: userId, @@ -1109,6 +1115,37 @@ describe('read microsoft graph', () => { ); }); + it('should read users with userSelect', async () => { + client.getOrganization.mockResolvedValue({ + id: 'tenantid', + displayName: 'Organization Name', + }); + + client.getUsers.mockImplementation(getExampleUsersEmail); + client.getUserPhotoWithSizeLimit.mockResolvedValue( + 'data:image/jpeg;base64,...', + ); + + client.getGroups.mockImplementation(getExampleGroups); + client.getGroupMembers.mockImplementation(getExampleGroupMembers); + client.getGroupPhotoWithSizeLimit.mockResolvedValue( + 'data:image/jpeg;base64,...', + ); + + await readMicrosoftGraphOrg(client, 'tenantid', { + logger: getVoidLogger(), + userSelect: ['mail'], + }); + + expect(client.getUsers).toHaveBeenCalledTimes(1); + expect(client.getUsers).toHaveBeenCalledWith( + { + select: ['mail'], + }, + undefined, + ); + }); + it('should read users using userExpand and userGroupMemberFilter', async () => { client.getOrganization.mockResolvedValue({ id: 'tenantid', From 86b22c7d5dac2126fc18a1878b6edeb4642d89a0 Mon Sep 17 00:00:00 2001 From: Luka Siric Date: Tue, 6 Sep 2022 13:50:17 +0200 Subject: [PATCH 023/110] removed unused mock getGroupPhotoWithSizeLimit Signed-off-by: Luka Siric --- .../src/microsoftGraph/read.test.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.test.ts b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.test.ts index 7fe98cf1cf..a537526a9e 100644 --- a/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.test.ts +++ b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/read.test.ts @@ -1128,9 +1128,6 @@ describe('read microsoft graph', () => { client.getGroups.mockImplementation(getExampleGroups); client.getGroupMembers.mockImplementation(getExampleGroupMembers); - client.getGroupPhotoWithSizeLimit.mockResolvedValue( - 'data:image/jpeg;base64,...', - ); await readMicrosoftGraphOrg(client, 'tenantid', { logger: getVoidLogger(), From 8948d577426a72bdca102f7e0ebfcd27d822f4ae Mon Sep 17 00:00:00 2001 From: Luka Siric Date: Tue, 6 Sep 2022 14:19:19 +0200 Subject: [PATCH 024/110] generated new api report for catalog-backend-module-msgraph Signed-off-by: Luka Siric --- plugins/catalog-backend-module-msgraph/api-report.md | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/catalog-backend-module-msgraph/api-report.md b/plugins/catalog-backend-module-msgraph/api-report.md index 8f773e1b90..2a244c60d8 100644 --- a/plugins/catalog-backend-module-msgraph/api-report.md +++ b/plugins/catalog-backend-module-msgraph/api-report.md @@ -232,6 +232,7 @@ export function readMicrosoftGraphOrg( options: { userExpand?: string; userFilter?: string; + userSelect?: string[]; userGroupMemberSearch?: string; userGroupMemberFilter?: string; groupExpand?: string; From 852ebeeb24fcc62aeed8b5e6bd67f371347becf3 Mon Sep 17 00:00:00 2001 From: Luka Siric Date: Tue, 6 Sep 2022 14:33:31 +0200 Subject: [PATCH 025/110] added userSelect attribute to config Signed-off-by: Luka Siric --- plugins/catalog-backend-module-msgraph/config.d.ts | 6 ++++++ .../src/microsoftGraph/config.ts | 8 ++++++++ 2 files changed, 14 insertions(+) diff --git a/plugins/catalog-backend-module-msgraph/config.d.ts b/plugins/catalog-backend-module-msgraph/config.d.ts index 8748df5974..df41b581f9 100644 --- a/plugins/catalog-backend-module-msgraph/config.d.ts +++ b/plugins/catalog-backend-module-msgraph/config.d.ts @@ -74,6 +74,12 @@ export interface Config { * E.g. "securityEnabled eq false and mailEnabled eq true" */ groupFilter?: string; + /** + * The fields to be fetched on query. + * + * E.g. ["id", "displayName", "description"] + */ + userSelect?: string[]; /** * The search criteria to apply to extract users by groups memberships. * diff --git a/plugins/catalog-backend-module-msgraph/src/microsoftGraph/config.ts b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/config.ts index f7675acf42..2429b67c89 100644 --- a/plugins/catalog-backend-module-msgraph/src/microsoftGraph/config.ts +++ b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/config.ts @@ -62,6 +62,12 @@ export type MicrosoftGraphProviderConfig = { * E.g. "accountEnabled eq true and userType eq 'member'" */ userFilter?: string; + /** + * The fields to be fetched on query. + * + * E.g. ["id", "displayName", "description"] + */ + userSelect?: string[]; /** * The "expand" argument to apply to users. * @@ -144,6 +150,7 @@ export function readMicrosoftGraphConfig( const userExpand = providerConfig.getOptionalString('userExpand'); const userFilter = providerConfig.getOptionalString('userFilter'); + const userSelect = providerConfig.getOptionalStringArray('userSelect'); const userGroupMemberFilter = providerConfig.getOptionalString( 'userGroupMemberFilter', ); @@ -196,6 +203,7 @@ export function readMicrosoftGraphConfig( clientSecret, userExpand, userFilter, + userSelect, userGroupMemberFilter, userGroupMemberSearch, groupExpand, From b6af632b83bed51b6d60bd79fe64e9d4c9103557 Mon Sep 17 00:00:00 2001 From: Luka Siric Date: Tue, 6 Sep 2022 15:30:48 +0200 Subject: [PATCH 026/110] generated new api report for catalog-backend-module-msgraph Signed-off-by: Luka Siric --- plugins/catalog-backend-module-msgraph/api-report.md | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/catalog-backend-module-msgraph/api-report.md b/plugins/catalog-backend-module-msgraph/api-report.md index 2a244c60d8..8b77ddf7c3 100644 --- a/plugins/catalog-backend-module-msgraph/api-report.md +++ b/plugins/catalog-backend-module-msgraph/api-report.md @@ -193,6 +193,7 @@ export type MicrosoftGraphProviderConfig = { clientId?: string; clientSecret?: string; userFilter?: string; + userSelect?: string[]; userExpand?: string; userGroupMemberFilter?: string; userGroupMemberSearch?: string; From f76f22c649ea8a773911829467ad1dfb5360201a Mon Sep 17 00:00:00 2001 From: Alex Crome Date: Wed, 7 Sep 2022 10:11:46 +0100 Subject: [PATCH 027/110] Added changeset + docs Signed-off-by: Alex Crome --- .changeset/sweet-grapes-explain.md | 8 ++++++++ docs/integrations/github/github-apps.md | 4 +++- 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 .changeset/sweet-grapes-explain.md diff --git a/.changeset/sweet-grapes-explain.md b/.changeset/sweet-grapes-explain.md new file mode 100644 index 0000000000..3b75b8849d --- /dev/null +++ b/.changeset/sweet-grapes-explain.md @@ -0,0 +1,8 @@ +--- +'@backstage/integration': minor +--- + +Improved caching around github app tokens. +Tokens are now cached for 50 minutes, not 10. +Calls to get app installations are also included in this cache. +If you have more than one github app configured, consider adding `allowedInstallationOwners` to your apps configuration to gain the most benefit from these performance changes. diff --git a/docs/integrations/github/github-apps.md b/docs/integrations/github/github-apps.md index 4f2c58bbec..38459acf75 100644 --- a/docs/integrations/github/github-apps.md +++ b/docs/integrations/github/github-apps.md @@ -98,7 +98,9 @@ integrations: ### Limiting the GitHub App installations If you want to limit the GitHub app installations visible to backstage you may -optionally include the `allowedInstallationOwners` option. +optionally include the `allowedInstallationOwners` option. If you configure +multiple apps, specifying this will bring some small performance benefits +as backstage can more easily select which app to use for a url. ```yaml appId: app id From a7f6f1c3fad15d11a1812058ab58a48791e6faae Mon Sep 17 00:00:00 2001 From: Alex Crome Date: Wed, 7 Sep 2022 11:51:54 +0100 Subject: [PATCH 028/110] Remove erroneous comment Signed-off-by: Alex Crome --- .../src/github/SingleInstanceGithubCredentialsProvider.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts b/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts index 02e0893d8a..aeaa0f5e04 100644 --- a/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts +++ b/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts @@ -62,7 +62,6 @@ class Cache { return { accessToken: ownerData.token }; } - // consider timestamps older than 50 minutes to be expired. private isExpired = (date: DateTime) => DateTime.local() > date; private appliesToRepo(tokenData: InstallationTokenData, repo?: string) { From 858833a4d5d5bbf4b2d1d5418f6ae5a92ec0d5d3 Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Wed, 7 Sep 2022 13:00:48 +0200 Subject: [PATCH 029/110] add refresh to connection Signed-off-by: Kiss Miklos --- plugins/catalog-backend/src/database/types.ts | 8 ++++++++ .../src/processing/connectEntityProviders.ts | 10 ++++++++++ 2 files changed, 18 insertions(+) diff --git a/plugins/catalog-backend/src/database/types.ts b/plugins/catalog-backend/src/database/types.ts index 07241f0682..2d30f8bd86 100644 --- a/plugins/catalog-backend/src/database/types.ts +++ b/plugins/catalog-backend/src/database/types.ts @@ -157,6 +157,14 @@ export interface ProcessingDatabase { */ refresh(txOpaque: Transaction, options: RefreshOptions): Promise; + /** + * Schedules a refresh for every entity that has a matching set of refresh key stored for it. + */ + refreshByRefreshKeys( + txOpaque: Transaction, + options: RefreshByKeyOptions, + ): Promise; + /** * Lists all ancestors of a given entityRef. * diff --git a/plugins/catalog-backend/src/processing/connectEntityProviders.ts b/plugins/catalog-backend/src/processing/connectEntityProviders.ts index 70a43de589..8325e2bcac 100644 --- a/plugins/catalog-backend/src/processing/connectEntityProviders.ts +++ b/plugins/catalog-backend/src/processing/connectEntityProviders.ts @@ -61,6 +61,16 @@ class Connection implements EntityProviderConnection { } } + async refresh(keys: string[]): Promise { + const db = this.config.processingDatabase; + + await db.transaction(async (tx: any) => { + return db.refreshByRefreshKeys(tx, { + keys, + }); + }); + } + private check(entities: Entity[]) { for (const entity of entities) { try { From 6e63bc43f27d0b72ee17f2273fe7e1267223138b Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Wed, 7 Sep 2022 13:58:39 +0200 Subject: [PATCH 030/110] add changeset Signed-off-by: Kiss Miklos --- .changeset/rude-weeks-retire.md | 5 +++++ plugins/catalog-node/src/api/provider.ts | 1 + 2 files changed, 6 insertions(+) create mode 100644 .changeset/rude-weeks-retire.md diff --git a/.changeset/rude-weeks-retire.md b/.changeset/rude-weeks-retire.md new file mode 100644 index 0000000000..fddddd7a9c --- /dev/null +++ b/.changeset/rude-weeks-retire.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend': minor +--- + +Added refresh function to the EntityProviderConnection to be able to schedule refreshes from entity providers. diff --git a/plugins/catalog-node/src/api/provider.ts b/plugins/catalog-node/src/api/provider.ts index fa7659ee32..437da4e7d6 100644 --- a/plugins/catalog-node/src/api/provider.ts +++ b/plugins/catalog-node/src/api/provider.ts @@ -36,6 +36,7 @@ export interface EntityProviderConnection { * Applies either a full or delta update to the catalog engine. */ applyMutation(mutation: EntityProviderMutation): Promise; + refresh(keys: string[]): Promise; } /** From 652dc0fa0c6b554e0989e38a46a3353d2965b2b5 Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Wed, 7 Sep 2022 14:03:47 +0200 Subject: [PATCH 031/110] fix tests Signed-off-by: Kiss Miklos --- .../src/providers/AwsS3EntityProvider.test.ts | 1 + .../src/providers/AzureDevOpsEntityProvider.test.ts | 1 + .../src/BitbucketCloudEntityProvider.test.ts | 1 + .../src/providers/BitbucketServerEntityProvider.test.ts | 2 ++ .../src/providers/GerritEntityProvider.test.ts | 1 + .../src/providers/GitHubEntityProvider.test.ts | 4 ++++ .../src/providers/GitHubOrgEntityProvider.test.ts | 1 + .../src/providers/GitlabDiscoveryEntityProvider.test.ts | 2 ++ .../src/processors/MicrosoftGraphOrgEntityProvider.test.ts | 1 + .../src/modules/core/DefaultLocationStore.test.ts | 2 +- plugins/catalog-node/src/api/provider.ts | 4 ++++ 11 files changed, 19 insertions(+), 1 deletion(-) diff --git a/plugins/catalog-backend-module-aws/src/providers/AwsS3EntityProvider.test.ts b/plugins/catalog-backend-module-aws/src/providers/AwsS3EntityProvider.test.ts index 9d3bba0e8a..3d59d738cf 100644 --- a/plugins/catalog-backend-module-aws/src/providers/AwsS3EntityProvider.test.ts +++ b/plugins/catalog-backend-module-aws/src/providers/AwsS3EntityProvider.test.ts @@ -100,6 +100,7 @@ describe('AwsS3EntityProvider', () => { const schedule = new PersistingTaskRunner(); const entityProviderConnection: EntityProviderConnection = { applyMutation: jest.fn(), + refresh: jest.fn(), }; const provider = AwsS3EntityProvider.fromConfig(config, { diff --git a/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.test.ts b/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.test.ts index 1c2c3d0082..c57455d8d6 100644 --- a/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.test.ts +++ b/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.test.ts @@ -71,6 +71,7 @@ describe('AzureDevOpsEntityProvider', () => { const schedule = new PersistingTaskRunner(); const entityProviderConnection: EntityProviderConnection = { applyMutation: jest.fn(), + refresh: jest.fn(), }; const provider = AzureDevOpsEntityProvider.fromConfig(config, { diff --git a/plugins/catalog-backend-module-bitbucket-cloud/src/BitbucketCloudEntityProvider.test.ts b/plugins/catalog-backend-module-bitbucket-cloud/src/BitbucketCloudEntityProvider.test.ts index 08b127f69e..641150acbf 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/src/BitbucketCloudEntityProvider.test.ts +++ b/plugins/catalog-backend-module-bitbucket-cloud/src/BitbucketCloudEntityProvider.test.ts @@ -127,6 +127,7 @@ describe('BitbucketCloudEntityProvider', () => { const schedule = new PersistingTaskRunner(); const entityProviderConnection: EntityProviderConnection = { applyMutation: jest.fn(), + refresh: jest.fn(), }; const provider = BitbucketCloudEntityProvider.fromConfig(config, { logger, diff --git a/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProvider.test.ts b/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProvider.test.ts index fe2c81b9b6..39689b6c1d 100644 --- a/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProvider.test.ts +++ b/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProvider.test.ts @@ -221,6 +221,7 @@ describe('BitbucketServerEntityProvider', () => { const schedule = new PersistingTaskRunner(); const entityProviderConnection: EntityProviderConnection = { applyMutation: jest.fn(), + refresh: jest.fn(), }; const provider = BitbucketServerEntityProvider.fromConfig(config, { logger, @@ -296,6 +297,7 @@ describe('BitbucketServerEntityProvider', () => { const schedule = new PersistingTaskRunner(); const entityProviderConnection: EntityProviderConnection = { applyMutation: jest.fn(), + refresh: jest.fn(), }; const provider = BitbucketServerEntityProvider.fromConfig(config, { logger, diff --git a/plugins/catalog-backend-module-gerrit/src/providers/GerritEntityProvider.test.ts b/plugins/catalog-backend-module-gerrit/src/providers/GerritEntityProvider.test.ts index d5be045e6c..d6ad0ff668 100644 --- a/plugins/catalog-backend-module-gerrit/src/providers/GerritEntityProvider.test.ts +++ b/plugins/catalog-backend-module-gerrit/src/providers/GerritEntityProvider.test.ts @@ -83,6 +83,7 @@ describe('GerritEntityProvider', () => { const entityProviderConnection: EntityProviderConnection = { applyMutation: jest.fn(), + refresh: jest.fn(), }; it('discovers projects from the api.', async () => { diff --git a/plugins/catalog-backend-module-github/src/providers/GitHubEntityProvider.test.ts b/plugins/catalog-backend-module-github/src/providers/GitHubEntityProvider.test.ts index 871718cc05..63fb77288b 100644 --- a/plugins/catalog-backend-module-github/src/providers/GitHubEntityProvider.test.ts +++ b/plugins/catalog-backend-module-github/src/providers/GitHubEntityProvider.test.ts @@ -146,6 +146,7 @@ describe('GitHubEntityProvider', () => { const schedule = new PersistingTaskRunner(); const entityProviderConnection: EntityProviderConnection = { applyMutation: jest.fn(), + refresh: jest.fn(), }; const provider = GitHubEntityProvider.fromConfig(config, { @@ -233,6 +234,7 @@ describe('GitHubEntityProvider', () => { const schedule = new PersistingTaskRunner(); const entityProviderConnection: EntityProviderConnection = { applyMutation: jest.fn(), + refresh: jest.fn(), }; const provider = GitHubEntityProvider.fromConfig(config, { @@ -306,6 +308,7 @@ describe('GitHubEntityProvider', () => { const schedule = new PersistingTaskRunner(); const entityProviderConnection: EntityProviderConnection = { applyMutation: jest.fn(), + refresh: jest.fn(), }; const provider = GitHubEntityProvider.fromConfig(config, { @@ -404,6 +407,7 @@ it('apply full update on scheduled execution with topic exclusion taking priorit const schedule = new PersistingTaskRunner(); const entityProviderConnection: EntityProviderConnection = { applyMutation: jest.fn(), + refresh: jest.fn(), }; const provider = GitHubEntityProvider.fromConfig(config, { diff --git a/plugins/catalog-backend-module-github/src/providers/GitHubOrgEntityProvider.test.ts b/plugins/catalog-backend-module-github/src/providers/GitHubOrgEntityProvider.test.ts index 77d585eae1..2d05346f01 100644 --- a/plugins/catalog-backend-module-github/src/providers/GitHubOrgEntityProvider.test.ts +++ b/plugins/catalog-backend-module-github/src/providers/GitHubOrgEntityProvider.test.ts @@ -83,6 +83,7 @@ describe('GitHubOrgEntityProvider', () => { const entityProviderConnection: EntityProviderConnection = { applyMutation: jest.fn(), + refresh: jest.fn(), }; const logger = getVoidLogger(); diff --git a/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.test.ts b/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.test.ts index 7fb4bf8d09..3f3c4e7f91 100644 --- a/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.test.ts +++ b/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.test.ts @@ -155,6 +155,7 @@ describe('GitlabDiscoveryEntityProvider', () => { const schedule = new PersistingTaskRunner(); const entityProviderConnection: EntityProviderConnection = { applyMutation: jest.fn(), + refresh: jest.fn(), }; const provider = GitlabDiscoveryEntityProvider.fromConfig(config, { logger, @@ -253,6 +254,7 @@ describe('GitlabDiscoveryEntityProvider', () => { const schedule = new PersistingTaskRunner(); const entityProviderConnection: EntityProviderConnection = { applyMutation: jest.fn(), + refresh: jest.fn(), }; const provider = GitlabDiscoveryEntityProvider.fromConfig(config, { logger, diff --git a/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.test.ts b/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.test.ts index e34eee0499..ff68235c4c 100644 --- a/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.test.ts +++ b/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.test.ts @@ -95,6 +95,7 @@ describe('MicrosoftGraphOrgEntityProvider', () => { }; const entityProviderConnection: EntityProviderConnection = { applyMutation: jest.fn(), + refresh: jest.fn(), }; const provider = MicrosoftGraphOrgEntityProvider.fromConfig( new ConfigReader(config), diff --git a/plugins/catalog-backend/src/modules/core/DefaultLocationStore.test.ts b/plugins/catalog-backend/src/modules/core/DefaultLocationStore.test.ts index dfbc37f6c9..2a9b1f8d65 100644 --- a/plugins/catalog-backend/src/modules/core/DefaultLocationStore.test.ts +++ b/plugins/catalog-backend/src/modules/core/DefaultLocationStore.test.ts @@ -26,7 +26,7 @@ describe('DefaultLocationStore', () => { async function createLocationStore(databaseId: TestDatabaseId) { const knex = await databases.init(databaseId); await applyDatabaseMigrations(knex); - const connection = { applyMutation: jest.fn() }; + const connection = { applyMutation: jest.fn(), refresh: jest.fn() }; const store = new DefaultLocationStore(knex); await store.connect(connection); return { store, connection }; diff --git a/plugins/catalog-node/src/api/provider.ts b/plugins/catalog-node/src/api/provider.ts index 437da4e7d6..a29df7bcba 100644 --- a/plugins/catalog-node/src/api/provider.ts +++ b/plugins/catalog-node/src/api/provider.ts @@ -36,6 +36,10 @@ export interface EntityProviderConnection { * Applies either a full or delta update to the catalog engine. */ applyMutation(mutation: EntityProviderMutation): Promise; + + /** + * Schedules a refresh on all of the entities that has a matching refresh key associated with the provided keys. + */ refresh(keys: string[]): Promise; } From fabd576219bea5086293b4a058941ff7ce27f722 Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Wed, 7 Sep 2022 14:21:35 +0200 Subject: [PATCH 032/110] add new api-report.md Signed-off-by: Kiss Miklos --- plugins/catalog-node/api-report.md | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/catalog-node/api-report.md b/plugins/catalog-node/api-report.md index 7d12c2e065..7ffae771ef 100644 --- a/plugins/catalog-node/api-report.md +++ b/plugins/catalog-node/api-report.md @@ -126,6 +126,7 @@ export interface EntityProvider { // @public export interface EntityProviderConnection { applyMutation(mutation: EntityProviderMutation): Promise; + refresh(keys: string[]): Promise; } // @public From 38d4f9a8cfe0b4bf0e5937cd486fad642252178c Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 7 Sep 2022 15:58:07 +0200 Subject: [PATCH 033/110] chore: fixing issue with the microsite banner positioning Signed-off-by: blam --- microsite/static/css/custom.css | 6 +++++- microsite/static/js/dismissable-banner.js | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/microsite/static/css/custom.css b/microsite/static/css/custom.css index 4b52a72e42..dd8fada3b7 100644 --- a/microsite/static/css/custom.css +++ b/microsite/static/css/custom.css @@ -1086,11 +1086,15 @@ code { display: flex; } -.Banner--hidden { +.Banner--hiding { opacity: 0; transition: opacity 200ms ease-in-out; } +.Banner--hidden { + display: none; +} + .Banner a { color: #000; text-decoration: underline; diff --git a/microsite/static/js/dismissable-banner.js b/microsite/static/js/dismissable-banner.js index 2fcdbe5692..f38fd0ebf1 100644 --- a/microsite/static/js/dismissable-banner.js +++ b/microsite/static/js/dismissable-banner.js @@ -10,7 +10,7 @@ window.addEventListener('DOMContentLoaded', () => { const dismissButton = banner.querySelector('[data-banner-dismiss]'); if (dismissButton) { dismissButton.addEventListener('click', () => { - banner.classList.add('Banner--hidden'); + banner.classList.add('Banner--hiding'); localStorage.setItem(storageKey, 'true'); }); } From cb13c56c84a803b1ec0386b3f0d4c2096eec5956 Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 7 Sep 2022 16:12:42 +0200 Subject: [PATCH 034/110] chore: added markup for the homepage text Signed-off-by: blam --- microsite/pages/en/index.js | 91 +++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) diff --git a/microsite/pages/en/index.js b/microsite/pages/en/index.js index 520157163a..11c9f9ac70 100644 --- a/microsite/pages/en/index.js +++ b/microsite/pages/en/index.js @@ -394,6 +394,97 @@ class Index extends React.Component { + + + + {' '} + + Backstage Search Platform + + A search platform made just for you + + + + + + } + /> + + + + Way more than a text box{' '} + + + Backstage Search more than just a box you type questions into + — it’s an entire platform all by itself, which you can + customize to fit your organization’s needs + + + + + + Search the way you want + + + Bring your own search engine, create a customized search page + experience, or edit the look and feel of each search result + + + + + + + Index everything, find anything + + + With an extensible backend, you can search beyond the Software + Catalog and index any source you’d like — whether it’s + TechDocs or Confluence and Stack Overflow + + + + + + + Discoverability unlocked + + + New hires and seasoned employees alike can easily search your + infrastructure instead of getting lost in it + + + + + + + + Learn more about Backstage Search + + + Read + + + From 96689fbdcb7c0a8042278fac5d310998faafdcff Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 7 Sep 2022 16:48:30 +0200 Subject: [PATCH 035/110] backend-common: workaround for database client being collected before interval Signed-off-by: Patrik Oldsberg --- .changeset/twenty-dolls-smoke.md | 5 +++++ packages/backend-common/src/database/DatabaseManager.ts | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 .changeset/twenty-dolls-smoke.md diff --git a/.changeset/twenty-dolls-smoke.md b/.changeset/twenty-dolls-smoke.md new file mode 100644 index 0000000000..7456bd5557 --- /dev/null +++ b/.changeset/twenty-dolls-smoke.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-common': patch +--- + +Workaround for a rare race condition in tests. diff --git a/packages/backend-common/src/database/DatabaseManager.ts b/packages/backend-common/src/database/DatabaseManager.ts index 290cd4b181..363bcac30b 100644 --- a/packages/backend-common/src/database/DatabaseManager.ts +++ b/packages/backend-common/src/database/DatabaseManager.ts @@ -352,7 +352,9 @@ export class DatabaseManager { let lastKeepaliveFailed = false; setInterval(() => { - client.raw('select 1').then( + // During testing it can happen that the environment is torn down and + // this client is `undefined`, but this interval is still run. + client?.raw('select 1').then( () => { lastKeepaliveFailed = false; }, From 42258e7106e90bbc58372356dbf05f03a8e37f51 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 7 Sep 2022 16:51:18 +0200 Subject: [PATCH 036/110] create-app: mock versions module to avoid race condition with mock-fs Signed-off-by: Patrik Oldsberg --- packages/create-app/src/createApp.test.ts | 5 +++ packages/create-app/src/lib/tasks.test.ts | 52 ++++++++++++++++++++++- 2 files changed, 55 insertions(+), 2 deletions(-) diff --git a/packages/create-app/src/createApp.test.ts b/packages/create-app/src/createApp.test.ts index 09099e2d15..d339460243 100644 --- a/packages/create-app/src/createApp.test.ts +++ b/packages/create-app/src/createApp.test.ts @@ -23,6 +23,11 @@ import createApp from './createApp'; jest.mock('./lib/tasks'); +// By mocking this the filesystem mocks won't mess with reading all of the package.jsons +jest.mock('./lib/versions', () => ({ + packageVersions: { root: '1.0.0' }, +})); + beforeAll(() => { mockFs({ [`${__dirname}/package.json`]: '', // required by `findPaths(__dirname)` diff --git a/packages/create-app/src/lib/tasks.test.ts b/packages/create-app/src/lib/tasks.test.ts index 7a8f85bf71..6a312436bf 100644 --- a/packages/create-app/src/lib/tasks.test.ts +++ b/packages/create-app/src/lib/tasks.test.ts @@ -18,7 +18,6 @@ import fs from 'fs-extra'; import mockFs from 'mock-fs'; import child_process from 'child_process'; import path from 'path'; -import { version as releaseVersion } from '../../../../package.json'; import { buildAppTask, checkAppExistsTask, @@ -30,6 +29,55 @@ import { jest.mock('child_process'); +// By mocking this the filesystem mocks won't mess with reading all of the package.jsons +jest.mock('./versions', () => ({ + packageVersions: { + root: '1.2.3', + '@backstage/cli': '1.0.0', + '@backstage/backend-common': '1.0.0', + '@backstage/backend-tasks': '1.0.0', + '@backstage/catalog-model': '1.0.0', + '@backstage/catalog-client': '1.0.0', + '@backstage/config': '1.0.0', + '@backstage/plugin-app-backend': '1.0.0', + '@backstage/plugin-auth-backend': '1.0.0', + '@backstage/plugin-auth-node': '1.0.0', + '@backstage/plugin-catalog-backend': '1.0.0', + '@backstage/plugin-permission-common': '1.0.0', + '@backstage/plugin-permission-node': '1.0.0', + '@backstage/plugin-proxy-backend': '1.0.0', + '@backstage/plugin-scaffolder-backend': '1.0.0', + '@backstage/plugin-search-backend': '1.0.0', + '@backstage/plugin-search-backend-module-pg': '1.0.0', + '@backstage/plugin-search-backend-node': '1.0.0', + '@backstage/plugin-techdocs-backend': '1.0.0', + '@backstage/app-defaults': '1.0.0', + '@backstage/core-app-api': '1.0.0', + '@backstage/core-components': '1.0.0', + '@backstage/core-plugin-api': '1.0.0', + '@backstage/integration-react': '1.0.0', + '@backstage/plugin-api-docs': '1.0.0', + '@backstage/plugin-catalog': '1.0.0', + '@backstage/plugin-catalog-common': '1.0.0', + '@backstage/plugin-catalog-graph': '1.0.0', + '@backstage/plugin-catalog-import': '1.0.0', + '@backstage/plugin-catalog-react': '1.0.0', + '@backstage/plugin-github-actions': '1.0.0', + '@backstage/plugin-org': '1.0.0', + '@backstage/plugin-scaffolder': '1.0.0', + '@backstage/plugin-permission-react': '1.0.0', + '@backstage/plugin-search': '1.0.0', + '@backstage/plugin-search-react': '1.0.0', + '@backstage/plugin-tech-radar': '1.0.0', + '@backstage/plugin-techdocs': '1.0.0', + '@backstage/plugin-techdocs-react': '1.0.0', + '@backstage/plugin-techdocs-module-addons-contrib': '1.0.0', + '@backstage/plugin-user-settings': '1.0.0', + '@backstage/theme': '1.0.0', + '@backstage/test-utils': '1.0.0', + }, +})); + beforeEach(() => { mockFs({ 'projects/my-module.ts': '', @@ -200,7 +248,7 @@ describe('templatingTask', () => { expect(fs.existsSync('templatedApp/package.json')).toBe(true); expect(fs.existsSync('templatedApp/.dockerignore')).toBe(true); await expect(fs.readJson('templatedApp/backstage.json')).resolves.toEqual({ - version: releaseVersion, + version: '1.2.3', }); // catalog was populated with `context.name` expect( From 9743bc788cd71d2cca37b5b8f5f6f86ab36be79b Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Wed, 7 Sep 2022 17:16:54 +0200 Subject: [PATCH 037/110] use object as param in refresh function Signed-off-by: Kiss Miklos --- .changeset/flat-crabs-love.md | 5 +++++ .changeset/rude-weeks-retire.md | 2 +- .../src/processing/connectEntityProviders.ts | 5 +++-- plugins/catalog-node/api-report.md | 7 ++++++- plugins/catalog-node/src/api/index.ts | 1 + plugins/catalog-node/src/api/provider.ts | 9 ++++++++- 6 files changed, 24 insertions(+), 5 deletions(-) create mode 100644 .changeset/flat-crabs-love.md diff --git a/.changeset/flat-crabs-love.md b/.changeset/flat-crabs-love.md new file mode 100644 index 0000000000..96f566d712 --- /dev/null +++ b/.changeset/flat-crabs-love.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-node': minor +--- + +Added refresh function to the `EntityProviderConnection` to be able to schedule refreshes from entity providers. diff --git a/.changeset/rude-weeks-retire.md b/.changeset/rude-weeks-retire.md index fddddd7a9c..c2073c5826 100644 --- a/.changeset/rude-weeks-retire.md +++ b/.changeset/rude-weeks-retire.md @@ -2,4 +2,4 @@ '@backstage/plugin-catalog-backend': minor --- -Added refresh function to the EntityProviderConnection to be able to schedule refreshes from entity providers. +Added the `refresh` function to the Connection of the entity providers. diff --git a/plugins/catalog-backend/src/processing/connectEntityProviders.ts b/plugins/catalog-backend/src/processing/connectEntityProviders.ts index 8325e2bcac..a4795532f0 100644 --- a/plugins/catalog-backend/src/processing/connectEntityProviders.ts +++ b/plugins/catalog-backend/src/processing/connectEntityProviders.ts @@ -22,6 +22,7 @@ import { ProcessingDatabase } from '../database/types'; import { EntityProvider, EntityProviderConnection, + EntityProviderRefreshOptions, EntityProviderMutation, } from '@backstage/plugin-catalog-node'; @@ -61,12 +62,12 @@ class Connection implements EntityProviderConnection { } } - async refresh(keys: string[]): Promise { + async refresh(options: EntityProviderRefreshOptions): Promise { const db = this.config.processingDatabase; await db.transaction(async (tx: any) => { return db.refreshByRefreshKeys(tx, { - keys, + keys: options.keys, }); }); } diff --git a/plugins/catalog-node/api-report.md b/plugins/catalog-node/api-report.md index 7ffae771ef..3873e3376d 100644 --- a/plugins/catalog-node/api-report.md +++ b/plugins/catalog-node/api-report.md @@ -126,7 +126,7 @@ export interface EntityProvider { // @public export interface EntityProviderConnection { applyMutation(mutation: EntityProviderMutation): Promise; - refresh(keys: string[]): Promise; + refresh(options: EntityProviderRefreshOptions): Promise; } // @public @@ -141,6 +141,11 @@ export type EntityProviderMutation = removed: DeferredEntity[]; }; +// @public (undocumented) +export type EntityProviderRefreshOptions = { + keys: string[]; +}; + // @public export type EntityRelationSpec = { source: CompoundEntityRef; diff --git a/plugins/catalog-node/src/api/index.ts b/plugins/catalog-node/src/api/index.ts index 136c23d20d..66e8d6bd21 100644 --- a/plugins/catalog-node/src/api/index.ts +++ b/plugins/catalog-node/src/api/index.ts @@ -32,4 +32,5 @@ export type { EntityProvider, EntityProviderConnection, EntityProviderMutation, + EntityProviderRefreshOptions, } from './provider'; diff --git a/plugins/catalog-node/src/api/provider.ts b/plugins/catalog-node/src/api/provider.ts index a29df7bcba..fc9a172e0d 100644 --- a/plugins/catalog-node/src/api/provider.ts +++ b/plugins/catalog-node/src/api/provider.ts @@ -26,6 +26,13 @@ export type EntityProviderMutation = | { type: 'full'; entities: DeferredEntity[] } | { type: 'delta'; added: DeferredEntity[]; removed: DeferredEntity[] }; +/** + * @public + */ +export type EntityProviderRefreshOptions = { + keys: string[]; +}; + /** * The EntityProviderConnection is the connection between the catalog and the entity provider. * The EntityProvider use this connection to add and remove entities from the catalog. @@ -40,7 +47,7 @@ export interface EntityProviderConnection { /** * Schedules a refresh on all of the entities that has a matching refresh key associated with the provided keys. */ - refresh(keys: string[]): Promise; + refresh(options: EntityProviderRefreshOptions): Promise; } /** From c86741a0527d72b5bc80934f53b0965e81aa4cfd Mon Sep 17 00:00:00 2001 From: Phil Kuang Date: Wed, 7 Sep 2022 12:05:58 -0400 Subject: [PATCH 038/110] feat(EntityTagPicker): support showing option counts Signed-off-by: Phil Kuang --- .changeset/gorgeous-pillows-retire.md | 5 ++++ plugins/catalog-react/api-report.md | 9 ++++++- .../EntityTagPicker/EntityTagPicker.test.tsx | 24 ++++++++++++++++++- .../EntityTagPicker/EntityTagPicker.tsx | 21 ++++++++++++---- .../src/components/EntityTagPicker/index.ts | 5 +++- 5 files changed, 56 insertions(+), 8 deletions(-) create mode 100644 .changeset/gorgeous-pillows-retire.md diff --git a/.changeset/gorgeous-pillows-retire.md b/.changeset/gorgeous-pillows-retire.md new file mode 100644 index 0000000000..d6d4009ac2 --- /dev/null +++ b/.changeset/gorgeous-pillows-retire.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-react': patch +--- + +Support showing counts in option labels of the `EntityTagPicker`. You can enable this by adding the `showCounts` property diff --git a/plugins/catalog-react/api-report.md b/plugins/catalog-react/api-report.md index 6e0ba235b7..1ae82f702b 100644 --- a/plugins/catalog-react/api-report.md +++ b/plugins/catalog-react/api-report.md @@ -364,7 +364,14 @@ export class EntityTagFilter implements EntityFilter { } // @public (undocumented) -export const EntityTagPicker: () => JSX.Element | null; +export const EntityTagPicker: ( + props: EntityTagPickerProps, +) => JSX.Element | null; + +// @public (undocumented) +export type EntityTagPickerProps = { + showCounts?: boolean; +}; // @public export class EntityTextFilter implements EntityFilter { diff --git a/plugins/catalog-react/src/components/EntityTagPicker/EntityTagPicker.test.tsx b/plugins/catalog-react/src/components/EntityTagPicker/EntityTagPicker.test.tsx index 2be521203f..78bdde1994 100644 --- a/plugins/catalog-react/src/components/EntityTagPicker/EntityTagPicker.test.tsx +++ b/plugins/catalog-react/src/components/EntityTagPicker/EntityTagPicker.test.tsx @@ -28,7 +28,9 @@ const tags = ['tag1', 'tag2', 'tag3', 'tag4']; describe('', () => { const mockCatalogApiRef = { getEntityFacets: async () => ({ - facets: { 'metadata.tags': tags.map(value => ({ value })) }, + facets: { + 'metadata.tags': tags.map((value, idx) => ({ value, count: idx })), + }, }), } as unknown as CatalogApi; @@ -68,6 +70,26 @@ describe('', () => { ]); }); + it('renders tags with counts', async () => { + const rendered = render( + + + + + , + ); + await waitFor(() => expect(rendered.getByText('Tags')).toBeInTheDocument()); + + fireEvent.click(rendered.getByTestId('tag-picker-expand')); + + expect(rendered.getAllByRole('option').map(o => o.textContent)).toEqual([ + 'tag1 (0)', + 'tag2 (1)', + 'tag3 (2)', + 'tag4 (3)', + ]); + }); + it('respects the query parameter filter value', async () => { const updateFilters = jest.fn(); const queryParameters = { tags: ['tag3'] }; diff --git a/plugins/catalog-react/src/components/EntityTagPicker/EntityTagPicker.tsx b/plugins/catalog-react/src/components/EntityTagPicker/EntityTagPicker.tsx index 39895f229d..25f02e8adc 100644 --- a/plugins/catalog-react/src/components/EntityTagPicker/EntityTagPicker.tsx +++ b/plugins/catalog-react/src/components/EntityTagPicker/EntityTagPicker.tsx @@ -49,7 +49,12 @@ const icon = ; const checkedIcon = ; /** @public */ -export const EntityTagPicker = () => { +export type EntityTagPickerProps = { + showCounts?: boolean; +}; + +/** @public */ +export const EntityTagPicker = (props: EntityTagPickerProps) => { const classes = useStyles(); const { updateFilters, @@ -65,7 +70,9 @@ export const EntityTagPicker = () => { filter: filters.kind?.getCatalogFilters(), }); - return facets[facet].map(({ value }) => value); + return Object.fromEntries( + facets[facet].map(({ value, count }) => [value, count]), + ); }, [filters.kind]); const queryParamTags = useMemo( @@ -91,7 +98,7 @@ export const EntityTagPicker = () => { }); }, [selectedTags, updateFilters]); - if (!availableTags?.length) return null; + if (!Object.keys(availableTags ?? {}).length) return null; return ( @@ -99,7 +106,7 @@ export const EntityTagPicker = () => { Tags setSelectedTags(value)} renderOption={(option, { selected }) => ( @@ -111,7 +118,11 @@ export const EntityTagPicker = () => { checked={selected} /> } - label={option} + label={ + props.showCounts + ? `${option} (${availableTags?.[option]})` + : option + } /> )} size="small" diff --git a/plugins/catalog-react/src/components/EntityTagPicker/index.ts b/plugins/catalog-react/src/components/EntityTagPicker/index.ts index c982d33df0..28c8c844f8 100644 --- a/plugins/catalog-react/src/components/EntityTagPicker/index.ts +++ b/plugins/catalog-react/src/components/EntityTagPicker/index.ts @@ -15,4 +15,7 @@ */ export { EntityTagPicker } from './EntityTagPicker'; -export type { CatalogReactEntityTagPickerClassKey } from './EntityTagPicker'; +export type { + CatalogReactEntityTagPickerClassKey, + EntityTagPickerProps, +} from './EntityTagPicker'; From 2bfe26336b79486e02113ee1b00433a598368376 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 7 Sep 2022 18:11:39 +0200 Subject: [PATCH 039/110] microsite: add fold and header for analytics blog post Signed-off-by: Patrik Oldsberg --- .../blog/2022-09-08-fyi-plugin-analytics-api.md | 4 ++++ .../blog/assets/22-09-08/analytics-api-fyi.png | Bin 0 -> 30010 bytes 2 files changed, 4 insertions(+) create mode 100644 microsite/blog/assets/22-09-08/analytics-api-fyi.png diff --git a/microsite/blog/2022-09-08-fyi-plugin-analytics-api.md b/microsite/blog/2022-09-08-fyi-plugin-analytics-api.md index 24304c0d10..4fba242e3e 100644 --- a/microsite/blog/2022-09-08-fyi-plugin-analytics-api.md +++ b/microsite/blog/2022-09-08-fyi-plugin-analytics-api.md @@ -8,6 +8,10 @@ authorImageURL: https://avatars.githubusercontent.com/u/3496491?v=4 **TL;DR** If you didn't know, now you know: the Backstage plugin analytics API is here to help you understand how developers in your organization are using Backstage. +![The Plugin Analytics API](assets/22-09-08/analytics-api-fyi.png) + + + ## What is the plugin analytics API? The plugin analytics API is a [utility api](https://backstage.io/docs/api/utility-apis) available by default in every Backstage instance, intended to bridge the gap between the needs of Backstage integrators and plugin developers. While Backstage integrators want visibility into the plugins they’ve installed, they lack the power to instrument those plugins. And although plugin developers have the power to instrument plugins, they can’t do so without a single, vendor-agnostic way to track events. Enter: the plugin analytics API. diff --git a/microsite/blog/assets/22-09-08/analytics-api-fyi.png b/microsite/blog/assets/22-09-08/analytics-api-fyi.png new file mode 100644 index 0000000000000000000000000000000000000000..444d3fa465b8d1af72503d6afe3e05f9bac3ad30 GIT binary patch literal 30010 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 PBA{_!OC=X>>hpg9nDVzv literal 0 HcmV?d00001 From 09216f8c7aaad92665b654962146ac30879cee8e Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 7 Sep 2022 19:14:17 +0200 Subject: [PATCH 040/110] chore: fromat different Signed-off-by: blam --- .prettierignore | 1 - microsite/core/Components.js | 9 +++-- microsite/pages/en/index.js | 31 ++++++++++-------- .../backstage-search-platform-icon-1.gif | Bin 0 -> 21479 bytes .../img/search-platform-overview-small.png | Bin 0 -> 114210 bytes .../static/img/search-platform-overview.png | Bin 0 -> 279537 bytes 6 files changed, 24 insertions(+), 17 deletions(-) create mode 100644 microsite/static/animations/backstage-search-platform-icon-1.gif create mode 100644 microsite/static/img/search-platform-overview-small.png create mode 100644 microsite/static/img/search-platform-overview.png diff --git a/.prettierignore b/.prettierignore index 8f1fae0456..90179b93ff 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,6 +1,5 @@ .yarn dist -microsite coverage *.hbs templates diff --git a/microsite/core/Components.js b/microsite/core/Components.js index 4811b49291..2abf507f5e 100644 --- a/microsite/core/Components.js +++ b/microsite/core/Components.js @@ -53,14 +53,19 @@ Block.QuoteContainer = simpleComponent('div', 'Block__QuoteContainer'); Block.Quote = simpleComponent('p', 'Block__Quote'); Block.Divider = simpleComponent('p', 'Block__Divider', ['quote']); Block.MediaFrame = simpleComponent('div', 'Block__MediaFrame'); -Block.Graphics = ({ padding, children }) => { +Block.Graphics = ({ padding, children, innerPadding }) => { const style = {}; + const innerStyle = {}; if (padding) { style.padding = `${padding}% 0`; } + + if (innerPadding) { + innerStyle.padding = `${innerPadding}% 0`; + } return (
-
+
); }; diff --git a/microsite/pages/en/index.js b/microsite/pages/en/index.js index 11c9f9ac70..af1e2e0b66 100644 --- a/microsite/pages/en/index.js +++ b/microsite/pages/en/index.js @@ -88,7 +88,7 @@ class Index extends React.Component { /> The Speed Paradox - At Spotify, we’ve always believed in the speed and ingenuity + At Spotify, we've always believed in the speed and ingenuity that comes from having autonomous development teams. But as we learned firsthand, the faster you grow, the more fragmented and complex your software ecosystem becomes. And then @@ -238,7 +238,7 @@ class Index extends React.Component { Using templates, engineers can spin up a new microservice with - your organization’s best practices built-in, right from the + your organization's best practices built-in, right from the start @@ -350,7 +350,7 @@ class Index extends React.Component { Easy to maintain - Updating code? Update your documentation while you’re there — + Updating code? Update your documentation while you're there — with docs and code in the same place, it becomes a natural part of your workstream @@ -400,7 +400,7 @@ class Index extends React.Component { {' '} Backstage Search Platform @@ -409,11 +409,12 @@ class Index extends React.Component { + } @@ -425,8 +426,8 @@ class Index extends React.Component { Backstage Search more than just a box you type questions into - — it’s an entire platform all by itself, which you can - customize to fit your organization’s needs + — it's an entire platform all by itself, which you can + customize to fit your organization's needs @@ -442,11 +443,13 @@ class Index extends React.Component { @@ -456,7 +459,7 @@ class Index extends React.Component { With an extensible backend, you can search beyond the Software - Catalog and index any source you’d like — whether it’s + Catalog and index any source you'd like — whether it's TechDocs or Confluence and Stack Overflow @@ -603,7 +606,7 @@ class Index extends React.Component { BYO Plugins - If you don’t see the plugin you need, it’s simple to build + If you don't see the plugin you need, it's simple to build your own diff --git a/microsite/static/animations/backstage-search-platform-icon-1.gif b/microsite/static/animations/backstage-search-platform-icon-1.gif new file mode 100644 index 0000000000000000000000000000000000000000..07e7f45335390366fe052de97cb39ef975b54296 GIT binary patch literal 21479 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

$KRuTY{Vs$1)%7Vc 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 JPDHLkV1ibqv;+VE literal 0 HcmV?d00001 diff --git a/microsite/static/img/search-platform-overview.png b/microsite/static/img/search-platform-overview.png new file mode 100644 index 0000000000000000000000000000000000000000..7faddc684c1f4c5fdd45275179f4f1c438f95af4 GIT binary patch literal 279537 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 z z)}s1-IwVNzgFII@$xilG<*w=MEs)_WpwUNiU0B;3KnXe))C;L8&t1e6mGf>h*oAki zFLH=8mo*e7tYxbc+iYLhXFVoxtID=w2E;4N61UYj(AetDV_iNT%amS@jVW*g5?||} z*f#MJK)8!0OCI&W#owbIS&jx_3RHR61LE@kRvCmrdea}u1h6<XW9kNuEqmJB)f%0DHgok@<< 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�~5CDo0 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%0D0OQ`7}nch37e=0 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

  • ReAQYGC-{iX5?7hhj}q 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

    2&E+-$DKVn;@N6s<}^bdleX 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 Date: Wed, 7 Sep 2022 20:54:21 +0200 Subject: [PATCH 041/110] chore: nice new section for seach Signed-off-by: blam --- microsite/core/Components.js | 6 +++- .../plugins/backstage-search-platform.yaml | 10 +++++++ microsite/pages/en/index.js | 29 ++++++++++--------- .../static/img/backstage-search-platform.svg | 17 +++++++++++ 4 files changed, 48 insertions(+), 14 deletions(-) create mode 100644 microsite/data/plugins/backstage-search-platform.yaml create mode 100644 microsite/static/img/backstage-search-platform.svg diff --git a/microsite/core/Components.js b/microsite/core/Components.js index 2abf507f5e..7453d21e3e 100644 --- a/microsite/core/Components.js +++ b/microsite/core/Components.js @@ -53,13 +53,17 @@ Block.QuoteContainer = simpleComponent('div', 'Block__QuoteContainer'); Block.Quote = simpleComponent('p', 'Block__Quote'); Block.Divider = simpleComponent('p', 'Block__Divider', ['quote']); Block.MediaFrame = simpleComponent('div', 'Block__MediaFrame'); -Block.Graphics = ({ padding, children, innerPadding }) => { +Block.Graphics = ({ padding, children, innerPadding, width }) => { const style = {}; const innerStyle = {}; if (padding) { style.padding = `${padding}% 0`; } + if (width) { + style.width = width; + } + if (innerPadding) { innerStyle.padding = `${innerPadding}% 0`; } diff --git a/microsite/data/plugins/backstage-search-platform.yaml b/microsite/data/plugins/backstage-search-platform.yaml new file mode 100644 index 0000000000..18bbbd1fd1 --- /dev/null +++ b/microsite/data/plugins/backstage-search-platform.yaml @@ -0,0 +1,10 @@ +--- +title: Backstage Search +author: Spotify +authorUrl: https://github.com/spotify +category: Core Feature +description: A composable and extensible search platform built to fit your organization’s needs and find information quickly. +documentation: https://backstage.io/docs/features/software-catalog/software-catalog-overview +iconUrl: img/backstage-search-platform.svg +npmPackageName: '@backstage/plugin-search' +order: 5 diff --git a/microsite/pages/en/index.js b/microsite/pages/en/index.js index af1e2e0b66..8e963c2453 100644 --- a/microsite/pages/en/index.js +++ b/microsite/pages/en/index.js @@ -440,18 +440,6 @@ class Index extends React.Component { experience, or edit the look and feel of each search result - @@ -463,7 +451,6 @@ class Index extends React.Component { TechDocs or Confluence and Stack Overflow - @@ -475,6 +462,22 @@ class Index extends React.Component { + + + + } + /> diff --git a/microsite/static/img/backstage-search-platform.svg b/microsite/static/img/backstage-search-platform.svg new file mode 100644 index 0000000000..0c058386ad --- /dev/null +++ b/microsite/static/img/backstage-search-platform.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + From 8d692524c5951b1208fcd1d66aa378ce44d3281e Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 7 Sep 2022 20:54:54 +0200 Subject: [PATCH 042/110] chore: revert prettier ignore Signed-off-by: blam --- .prettierignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.prettierignore b/.prettierignore index 90179b93ff..8f1fae0456 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,5 +1,6 @@ .yarn dist +microsite coverage *.hbs templates From a58e5bfbd2ed67e8cd515684a5cf2966f77a209a Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 7 Sep 2022 20:57:58 +0200 Subject: [PATCH 043/110] chore: add another classlist Signed-off-by: blam --- microsite/static/js/dismissable-banner.js | 1 + 1 file changed, 1 insertion(+) diff --git a/microsite/static/js/dismissable-banner.js b/microsite/static/js/dismissable-banner.js index f38fd0ebf1..6320803a77 100644 --- a/microsite/static/js/dismissable-banner.js +++ b/microsite/static/js/dismissable-banner.js @@ -12,6 +12,7 @@ window.addEventListener('DOMContentLoaded', () => { dismissButton.addEventListener('click', () => { banner.classList.add('Banner--hiding'); localStorage.setItem(storageKey, 'true'); + setTimeout(() => banner.classList.add('Banner--hidden'), 300); }); } }); From 67acd209cfc5b764ca9fc424554eac11d7adf9f1 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 7 Sep 2022 22:24:09 +0200 Subject: [PATCH 044/110] kubernetes-backend: ignore taffydb vulnerability Signed-off-by: Patrik Oldsberg --- plugins/kubernetes-backend/.snyk | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 plugins/kubernetes-backend/.snyk diff --git a/plugins/kubernetes-backend/.snyk b/plugins/kubernetes-backend/.snyk new file mode 100644 index 0000000000..2f19f3fcf7 --- /dev/null +++ b/plugins/kubernetes-backend/.snyk @@ -0,0 +1,10 @@ +# Snyk (https://snyk.io) policy file, patches or ignores known vulnerabilities. +version: v1.22.1 +# ignores vulnerabilities until expiry date; change duration by modifying expiry date +ignore: + SNYK-JS-TAFFYDB-2992450: + - '*': + reason: Development dependency only + expires: 2023-03-07T20:23:00.000Z + created: 2022-09-07T20:23:00.000Z +patch: {} From 54f14d5b88eee65693896124e1013776e377781b Mon Sep 17 00:00:00 2001 From: Taras Date: Wed, 7 Sep 2022 17:32:06 -0400 Subject: [PATCH 045/110] Added /validate-entity to the catalog client Signed-off-by: Taras --- .../catalog-client/src/CatalogClient.test.ts | 63 +++++++++++++++++++ packages/catalog-client/src/CatalogClient.ts | 38 ++++++++++- packages/catalog-client/src/types/api.ts | 23 +++++++ 3 files changed, 123 insertions(+), 1 deletion(-) diff --git a/packages/catalog-client/src/CatalogClient.test.ts b/packages/catalog-client/src/CatalogClient.test.ts index 0b838eb4c2..3fc70e25ae 100644 --- a/packages/catalog-client/src/CatalogClient.test.ts +++ b/packages/catalog-client/src/CatalogClient.test.ts @@ -295,4 +295,67 @@ describe('CatalogClient', () => { await client.getLocationById('42'); }); }); + + describe('validateEntity', () => { + it('returns valid false when validation fails', async () => { + server.use( + rest.post(`${mockBaseUrl}/validate-entity`, (req, res, ctx) => { + return res( + ctx.status(400), + ctx.json({ + errors: [ + { + message: 'Missing name', + }, + ], + }), + ); + }), + ); + + expect( + await client.validateEntity( + { + apiVersion: '1', + kind: 'Component', + metadata: { + name: '', + }, + }, + 'http://example.com', + ), + ).toMatchObject({ + valid: false, + errors: [ + { + message: 'Missing name', + }, + ], + }); + }); + + it('returns valid true when validation fails', async () => { + server.use( + rest.post(`${mockBaseUrl}/validate-entity`, (req, res, ctx) => { + return res(ctx.status(200), ctx.text('')); + }), + ); + + expect( + await client.validateEntity( + { + apiVersion: '1', + kind: 'Component', + metadata: { + name: 'good', + }, + }, + 'http://example.com', + ), + ).toMatchObject({ + valid: true, + errors: undefined, + }); + }); + }); }); diff --git a/packages/catalog-client/src/CatalogClient.ts b/packages/catalog-client/src/CatalogClient.ts index 8ddc3eb36d..bbc9b0b62d 100644 --- a/packages/catalog-client/src/CatalogClient.ts +++ b/packages/catalog-client/src/CatalogClient.ts @@ -21,7 +21,7 @@ import { stringifyEntityRef, stringifyLocationRef, } from '@backstage/catalog-model'; -import { ResponseError } from '@backstage/errors'; +import { ResponseError, SerializedError } from '@backstage/errors'; import crossFetch from 'cross-fetch'; import { CATALOG_FILTER_EXISTS, @@ -36,6 +36,7 @@ import { Location, GetEntityFacetsRequest, GetEntityFacetsResponse, + ValidateEntityResponse, } from './types/api'; import { DiscoveryApi } from './types/discovery'; import { FetchApi } from './types/fetch'; @@ -353,6 +354,41 @@ export class CatalogClient implements CatalogApi { ); } + /** + * {@inheritdoc CatalogApi.validateEntity} + */ + async validateEntity( + entity: Entity, + location: string, + options?: CatalogRequestOptions, + ): Promise { + const response = await this.fetchApi.fetch( + `${await this.discoveryApi.getBaseUrl('catalog')}/validate-entity`, + { + headers: { + 'Content-Type': 'application/json', + ...(options?.token && { Authorization: `Bearer ${options?.token}` }), + }, + method: 'POST', + body: JSON.stringify({ entity, location }), + }, + ); + + if (response.ok) { + return { + valid: true, + errors: undefined, + }; + } + + const { errors } = (await response.json()) as { errors: SerializedError[] }; + + return { + valid: false, + errors, + }; + } + // // Private methods // diff --git a/packages/catalog-client/src/types/api.ts b/packages/catalog-client/src/types/api.ts index 389b82c081..d66e2dfaf9 100644 --- a/packages/catalog-client/src/types/api.ts +++ b/packages/catalog-client/src/types/api.ts @@ -15,6 +15,7 @@ */ import { CompoundEntityRef, Entity } from '@backstage/catalog-model'; +import { SerializedError } from '@backstage/errors'; /** * This symbol can be used in place of a value when passed to filters in e.g. @@ -269,6 +270,16 @@ export type AddLocationResponse = { exists?: boolean; }; +/** + * The response type for {@link CatalogClient.validateEntity} + * + * @public + */ +export type ValidateEntityResponse = { + valid: boolean; + errors?: SerializedError[]; +}; + /** * A client for interacting with the Backstage software catalog through its API. * @@ -390,4 +401,16 @@ export interface CatalogApi { id: string, options?: CatalogRequestOptions, ): Promise; + + /** + * Validate entity and its location. + * + * @param entity - Entity to validate + * @param location - URL location of the entity + */ + validateEntity( + entity: Entity, + location: string, + options?: CatalogRequestOptions, + ): Promise; } From 93a1072a0a6d51815bbca6fa84e055ee157fd885 Mon Sep 17 00:00:00 2001 From: Taras Date: Wed, 7 Sep 2022 18:12:01 -0400 Subject: [PATCH 046/110] Updated tests to include validateEntity in mocks Signed-off-by: Taras --- packages/catalog-client/src/CatalogClient.test.ts | 4 ++-- .../src/lib/catalog/CatalogIdentityClient.test.ts | 1 + plugins/badges-backend/src/service/router.test.ts | 1 + .../src/components/CatalogGraphCard/CatalogGraphCard.test.tsx | 1 + .../src/components/CatalogGraphPage/CatalogGraphPage.test.tsx | 1 + .../EntityRelationsGraph/EntityRelationsGraph.test.tsx | 1 + .../components/EntityRelationsGraph/useEntityStore.test.ts | 1 + plugins/catalog-import/src/api/CatalogImportClient.test.ts | 1 + .../StepPrepareCreatePullRequest.test.tsx | 1 + .../components/DefaultExplorePage/DefaultExplorePage.test.tsx | 1 + .../DomainExplorerContent/DomainExplorerContent.test.tsx | 1 + .../GroupsExplorerContent/GroupsExplorerContent.test.tsx | 1 + plugins/fossa/src/components/FossaPage/FossaPage.test.tsx | 1 + plugins/todo-backend/src/service/TodoReaderService.test.ts | 1 + 14 files changed, 15 insertions(+), 2 deletions(-) diff --git a/packages/catalog-client/src/CatalogClient.test.ts b/packages/catalog-client/src/CatalogClient.test.ts index 3fc70e25ae..9427d78f5c 100644 --- a/packages/catalog-client/src/CatalogClient.test.ts +++ b/packages/catalog-client/src/CatalogClient.test.ts @@ -299,7 +299,7 @@ describe('CatalogClient', () => { describe('validateEntity', () => { it('returns valid false when validation fails', async () => { server.use( - rest.post(`${mockBaseUrl}/validate-entity`, (req, res, ctx) => { + rest.post(`${mockBaseUrl}/validate-entity`, (_req, res, ctx) => { return res( ctx.status(400), ctx.json({ @@ -336,7 +336,7 @@ describe('CatalogClient', () => { it('returns valid true when validation fails', async () => { server.use( - rest.post(`${mockBaseUrl}/validate-entity`, (req, res, ctx) => { + rest.post(`${mockBaseUrl}/validate-entity`, (_req, res, ctx) => { return res(ctx.status(200), ctx.text('')); }), ); diff --git a/plugins/auth-backend/src/lib/catalog/CatalogIdentityClient.test.ts b/plugins/auth-backend/src/lib/catalog/CatalogIdentityClient.test.ts index 587b433ca1..e4d9304892 100644 --- a/plugins/auth-backend/src/lib/catalog/CatalogIdentityClient.test.ts +++ b/plugins/auth-backend/src/lib/catalog/CatalogIdentityClient.test.ts @@ -35,6 +35,7 @@ describe('CatalogIdentityClient', () => { refreshEntity: jest.fn(), getEntityAncestors: jest.fn(), getEntityFacets: jest.fn(), + validateEntity: jest.fn(), }; const tokenManager: jest.Mocked = { getToken: jest.fn(), diff --git a/plugins/badges-backend/src/service/router.test.ts b/plugins/badges-backend/src/service/router.test.ts index 1750a55be7..5fc809906f 100644 --- a/plugins/badges-backend/src/service/router.test.ts +++ b/plugins/badges-backend/src/service/router.test.ts @@ -68,6 +68,7 @@ describe('createRouter', () => { refreshEntity: jest.fn(), getEntityAncestors: jest.fn(), getEntityFacets: jest.fn(), + validateEntity: jest.fn(), }; config = new ConfigReader({ diff --git a/plugins/catalog-graph/src/components/CatalogGraphCard/CatalogGraphCard.test.tsx b/plugins/catalog-graph/src/components/CatalogGraphCard/CatalogGraphCard.test.tsx index 9b354b5f38..74fcd4e501 100644 --- a/plugins/catalog-graph/src/components/CatalogGraphCard/CatalogGraphCard.test.tsx +++ b/plugins/catalog-graph/src/components/CatalogGraphCard/CatalogGraphCard.test.tsx @@ -59,6 +59,7 @@ describe('', () => { refreshEntity: jest.fn(), getEntityAncestors: jest.fn(), getEntityFacets: jest.fn(), + validateEntity: jest.fn(), }; apis = TestApiRegistry.from([catalogApiRef, catalog]); diff --git a/plugins/catalog-graph/src/components/CatalogGraphPage/CatalogGraphPage.test.tsx b/plugins/catalog-graph/src/components/CatalogGraphPage/CatalogGraphPage.test.tsx index d8b7ede2c2..9cca6ef9be 100644 --- a/plugins/catalog-graph/src/components/CatalogGraphPage/CatalogGraphPage.test.tsx +++ b/plugins/catalog-graph/src/components/CatalogGraphPage/CatalogGraphPage.test.tsx @@ -92,6 +92,7 @@ describe('', () => { refreshEntity: jest.fn(), getEntityAncestors: jest.fn(), getEntityFacets: jest.fn(), + validateEntity: jest.fn(), }; wrapper = ( diff --git a/plugins/catalog-graph/src/components/EntityRelationsGraph/EntityRelationsGraph.test.tsx b/plugins/catalog-graph/src/components/EntityRelationsGraph/EntityRelationsGraph.test.tsx index db6711a0a5..c79f975789 100644 --- a/plugins/catalog-graph/src/components/EntityRelationsGraph/EntityRelationsGraph.test.tsx +++ b/plugins/catalog-graph/src/components/EntityRelationsGraph/EntityRelationsGraph.test.tsx @@ -119,6 +119,7 @@ describe('', () => { refreshEntity: jest.fn(), getEntityAncestors: jest.fn(), getEntityFacets: jest.fn(), + validateEntity: jest.fn(), }; Wrapper = ({ children }) => ( diff --git a/plugins/catalog-graph/src/components/EntityRelationsGraph/useEntityStore.test.ts b/plugins/catalog-graph/src/components/EntityRelationsGraph/useEntityStore.test.ts index 74d7423eea..e76b1001c6 100644 --- a/plugins/catalog-graph/src/components/EntityRelationsGraph/useEntityStore.test.ts +++ b/plugins/catalog-graph/src/components/EntityRelationsGraph/useEntityStore.test.ts @@ -38,6 +38,7 @@ describe('useEntityStore', () => { refreshEntity: jest.fn(), getEntityAncestors: jest.fn(), getEntityFacets: jest.fn(), + validateEntity: jest.fn(), }; useApi.mockReturnValue(catalogApi); diff --git a/plugins/catalog-import/src/api/CatalogImportClient.test.ts b/plugins/catalog-import/src/api/CatalogImportClient.test.ts index e26d6c5d6a..30b9f47d99 100644 --- a/plugins/catalog-import/src/api/CatalogImportClient.test.ts +++ b/plugins/catalog-import/src/api/CatalogImportClient.test.ts @@ -100,6 +100,7 @@ describe('CatalogImportClient', () => { refreshEntity: jest.fn(), getEntityAncestors: jest.fn(), getEntityFacets: jest.fn(), + validateEntity: jest.fn(), }; let catalogImportClient: CatalogImportClient; diff --git a/plugins/catalog-import/src/components/StepPrepareCreatePullRequest/StepPrepareCreatePullRequest.test.tsx b/plugins/catalog-import/src/components/StepPrepareCreatePullRequest/StepPrepareCreatePullRequest.test.tsx index f3dc1f2144..5ad7e27c4b 100644 --- a/plugins/catalog-import/src/components/StepPrepareCreatePullRequest/StepPrepareCreatePullRequest.test.tsx +++ b/plugins/catalog-import/src/components/StepPrepareCreatePullRequest/StepPrepareCreatePullRequest.test.tsx @@ -46,6 +46,7 @@ describe('', () => { refreshEntity: jest.fn(), getEntityAncestors: jest.fn(), getEntityFacets: jest.fn(), + validateEntity: jest.fn(), }; const errorApi: jest.Mocked = { diff --git a/plugins/explore/src/components/DefaultExplorePage/DefaultExplorePage.test.tsx b/plugins/explore/src/components/DefaultExplorePage/DefaultExplorePage.test.tsx index a79d02a2a0..399112fac6 100644 --- a/plugins/explore/src/components/DefaultExplorePage/DefaultExplorePage.test.tsx +++ b/plugins/explore/src/components/DefaultExplorePage/DefaultExplorePage.test.tsx @@ -32,6 +32,7 @@ describe('', () => { refreshEntity: jest.fn(), getEntityAncestors: jest.fn(), getEntityFacets: jest.fn(), + validateEntity: jest.fn(), }; const Wrapper = ({ children }: { children?: React.ReactNode }) => ( diff --git a/plugins/explore/src/components/DomainExplorerContent/DomainExplorerContent.test.tsx b/plugins/explore/src/components/DomainExplorerContent/DomainExplorerContent.test.tsx index c30e845112..c84363f5c6 100644 --- a/plugins/explore/src/components/DomainExplorerContent/DomainExplorerContent.test.tsx +++ b/plugins/explore/src/components/DomainExplorerContent/DomainExplorerContent.test.tsx @@ -33,6 +33,7 @@ describe('', () => { refreshEntity: jest.fn(), getEntityAncestors: jest.fn(), getEntityFacets: jest.fn(), + validateEntity: jest.fn(), }; const Wrapper = ({ children }: { children?: React.ReactNode }) => ( diff --git a/plugins/explore/src/components/GroupsExplorerContent/GroupsExplorerContent.test.tsx b/plugins/explore/src/components/GroupsExplorerContent/GroupsExplorerContent.test.tsx index 4488a4d0d9..a4769e8f4f 100644 --- a/plugins/explore/src/components/GroupsExplorerContent/GroupsExplorerContent.test.tsx +++ b/plugins/explore/src/components/GroupsExplorerContent/GroupsExplorerContent.test.tsx @@ -33,6 +33,7 @@ describe('', () => { refreshEntity: jest.fn(), getEntityAncestors: jest.fn(), getEntityFacets: jest.fn(), + validateEntity: jest.fn(), }; const Wrapper = ({ children }: { children?: React.ReactNode }) => ( diff --git a/plugins/fossa/src/components/FossaPage/FossaPage.test.tsx b/plugins/fossa/src/components/FossaPage/FossaPage.test.tsx index 7ef6c799df..676a3cff3c 100644 --- a/plugins/fossa/src/components/FossaPage/FossaPage.test.tsx +++ b/plugins/fossa/src/components/FossaPage/FossaPage.test.tsx @@ -37,6 +37,7 @@ describe('', () => { refreshEntity: jest.fn(), getEntityAncestors: jest.fn(), getEntityFacets: jest.fn(), + validateEntity: jest.fn(), }; const fossaApi: jest.Mocked = { getFindingSummary: jest.fn(), diff --git a/plugins/todo-backend/src/service/TodoReaderService.test.ts b/plugins/todo-backend/src/service/TodoReaderService.test.ts index 6dd14afcb4..8077e2ddb9 100644 --- a/plugins/todo-backend/src/service/TodoReaderService.test.ts +++ b/plugins/todo-backend/src/service/TodoReaderService.test.ts @@ -53,6 +53,7 @@ function mockCatalogClient(entity?: Entity): jest.Mocked { refreshEntity: jest.fn(), getEntityAncestors: jest.fn(), getEntityFacets: jest.fn(), + validateEntity: jest.fn(), }; if (entity) { mock.getEntityByRef.mockReturnValue(entity); From 184a610d12de1bbabef326d2443c649c2e1cf105 Mon Sep 17 00:00:00 2001 From: Taras Date: Wed, 7 Sep 2022 18:20:10 -0400 Subject: [PATCH 047/110] Add missing export and generate api report Signed-off-by: Taras --- packages/catalog-client/api-report.md | 17 +++++++++++++++++ packages/catalog-client/src/types/index.ts | 1 + 2 files changed, 18 insertions(+) diff --git a/packages/catalog-client/api-report.md b/packages/catalog-client/api-report.md index 964a3c1018..1d66b469a9 100644 --- a/packages/catalog-client/api-report.md +++ b/packages/catalog-client/api-report.md @@ -5,6 +5,7 @@ ```ts import { CompoundEntityRef } from '@backstage/catalog-model'; import { Entity } from '@backstage/catalog-model'; +import { SerializedError } from '@backstage/errors'; // @public export type AddLocationRequest = { @@ -65,6 +66,11 @@ export interface CatalogApi { id: string, options?: CatalogRequestOptions, ): Promise; + validateEntity( + entity: Entity, + location: string, + options?: CatalogRequestOptions, + ): Promise; } // @public @@ -122,6 +128,11 @@ export class CatalogClient implements CatalogApi { id: string, options?: CatalogRequestOptions, ): Promise; + validateEntity( + entity: Entity, + location: string, + options?: CatalogRequestOptions, + ): Promise; } // @public @@ -196,4 +207,10 @@ type Location_2 = { target: string; }; export { Location_2 as Location }; + +// @public +export type ValidateEntityResponse = { + valid: boolean; + errors?: SerializedError[]; +}; ``` diff --git a/packages/catalog-client/src/types/index.ts b/packages/catalog-client/src/types/index.ts index 8bf4e34da2..86f7b18ab0 100644 --- a/packages/catalog-client/src/types/index.ts +++ b/packages/catalog-client/src/types/index.ts @@ -27,5 +27,6 @@ export type { Location, GetEntityFacetsRequest, GetEntityFacetsResponse, + ValidateEntityResponse, } from './api'; export { ENTITY_STATUS_CATALOG_PROCESSING_TYPE } from './status'; From 65d1d4343ff6cf56b8cf28879d6d2891400b572b Mon Sep 17 00:00:00 2001 From: Taras Date: Wed, 7 Sep 2022 18:22:07 -0400 Subject: [PATCH 048/110] Added changeset Signed-off-by: Taras --- .changeset/large-books-deny.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/large-books-deny.md diff --git a/.changeset/large-books-deny.md b/.changeset/large-books-deny.md new file mode 100644 index 0000000000..51d2ce38c0 --- /dev/null +++ b/.changeset/large-books-deny.md @@ -0,0 +1,5 @@ +--- +'@backstage/catalog-client': minor +--- + +Adding validateEntity method that calls /validate-entity endpoint From 64fe8e121344bc57833c3b87af013395c98e22f8 Mon Sep 17 00:00:00 2001 From: Joe Patterson Date: Thu, 8 Sep 2022 13:52:34 +1000 Subject: [PATCH 049/110] change auth0 passport to the correct passport-auth0 package and allow passing the audience into the auth for api Signed-off-by: Joe Patterson --- plugins/auth-backend/package.json | 2 + .../lib/passport/PassportStrategyHelper.ts | 3 +- .../src/providers/auth0/provider.ts | 14 ++++- .../src/providers/auth0/strategy.ts | 6 +- yarn.lock | 62 +++++++++++++++---- 5 files changed, 69 insertions(+), 18 deletions(-) diff --git a/plugins/auth-backend/package.json b/plugins/auth-backend/package.json index 4537b9e5db..35e6f86f2c 100644 --- a/plugins/auth-backend/package.json +++ b/plugins/auth-backend/package.json @@ -62,6 +62,7 @@ "node-fetch": "^2.6.7", "openid-client": "^5.1.3", "passport": "^0.6.0", + "passport-auth0": "^1.4.3", "passport-bitbucket-oauth2": "^0.1.2", "passport-github2": "^0.1.12", "passport-gitlab2": "^5.0.0", @@ -81,6 +82,7 @@ "@types/cookie-parser": "^1.4.2", "@types/express-session": "^1.17.2", "@types/jwt-decode": "^3.1.0", + "@types/passport-auth0": "^1.0.5", "@types/passport-github2": "^1.2.4", "@types/passport-google-oauth20": "^2.0.3", "@types/passport-microsoft": "^0.0.0", diff --git a/plugins/auth-backend/src/lib/passport/PassportStrategyHelper.ts b/plugins/auth-backend/src/lib/passport/PassportStrategyHelper.ts index 16377f17f2..7589254862 100644 --- a/plugins/auth-backend/src/lib/passport/PassportStrategyHelper.ts +++ b/plugins/auth-backend/src/lib/passport/PassportStrategyHelper.ts @@ -91,6 +91,7 @@ export const executeRedirectStrategy = async ( export const executeFrameHandlerStrategy = async ( req: express.Request, providerStrategy: passport.Strategy, + options?: Record, ) => { return new Promise<{ result: Result; privateInfo: PrivateInfo }>( (resolve, reject) => { @@ -124,7 +125,7 @@ export const executeFrameHandlerStrategy = async ( strategy.redirect = () => { reject(new Error('Unexpected redirect')); }; - strategy.authenticate(req, {}); + strategy.authenticate(req, { ...(options ?? {}) }); }, ); }; diff --git a/plugins/auth-backend/src/providers/auth0/provider.ts b/plugins/auth-backend/src/providers/auth0/provider.ts index 8e0255ebe6..7f2310ab80 100644 --- a/plugins/auth-backend/src/providers/auth0/provider.ts +++ b/plugins/auth-backend/src/providers/auth0/provider.ts @@ -43,9 +43,11 @@ import { AuthResolverContext, } from '../types'; import { createAuthProviderIntegration } from '../createAuthProviderIntegration'; +import { ExtraVerificationParams } from 'passport-auth0'; type PrivateInfo = { refreshToken: string; + extraParams: ExtraVerificationParams, }; export type Auth0AuthProviderOptions = OAuthProviderOptions & { @@ -53,6 +55,7 @@ export type Auth0AuthProviderOptions = OAuthProviderOptions & { signInResolver?: SignInResolver; authHandler: AuthHandler; resolverContext: AuthResolverContext; + audience?: string; }; export class Auth0AuthProvider implements OAuthHandlers { @@ -60,11 +63,13 @@ export class Auth0AuthProvider implements OAuthHandlers { private readonly signInResolver?: SignInResolver; private readonly authHandler: AuthHandler; private readonly resolverContext: AuthResolverContext; + private readonly audience?: string; constructor(options: Auth0AuthProviderOptions) { this.signInResolver = options.signInResolver; this.authHandler = options.authHandler; this.resolverContext = options.resolverContext; + this.audience = options.audience; this._strategy = new Auth0Strategy( { clientID: options.clientId, @@ -79,6 +84,7 @@ export class Auth0AuthProvider implements OAuthHandlers { accessToken: any, refreshToken: any, params: any, + extraParams: ExtraVerificationParams, fullProfile: passport.Profile, done: PassportDoneCallback, ) => { @@ -92,6 +98,7 @@ export class Auth0AuthProvider implements OAuthHandlers { }, { refreshToken, + extraParams }, ); }, @@ -104,6 +111,7 @@ export class Auth0AuthProvider implements OAuthHandlers { prompt: 'consent', scope: req.scope, state: encodeState(req.state), + audience: this.audience as string }); } @@ -111,7 +119,9 @@ export class Auth0AuthProvider implements OAuthHandlers { const { result, privateInfo } = await executeFrameHandlerStrategy< OAuthResult, PrivateInfo - >(req, this._strategy); + >(req, this._strategy, { + audience: this.audience as string + }); return { response: await this.handleResult(result), @@ -198,6 +208,7 @@ export const auth0 = createAuthProviderIntegration({ const clientSecret = envConfig.getString('clientSecret'); const domain = envConfig.getString('domain'); const customCallbackUrl = envConfig.getOptionalString('callbackUrl'); + const audience = envConfig.getOptionalString('audience'); const callbackUrl = customCallbackUrl || `${globalConfig.baseUrl}/${providerId}/handler/frame`; @@ -218,6 +229,7 @@ export const auth0 = createAuthProviderIntegration({ authHandler, signInResolver, resolverContext, + audience, }); return OAuthAdapter.fromConfig(globalConfig, provider, { diff --git a/plugins/auth-backend/src/providers/auth0/strategy.ts b/plugins/auth-backend/src/providers/auth0/strategy.ts index bac82db0ee..bef2836ab5 100644 --- a/plugins/auth-backend/src/providers/auth0/strategy.ts +++ b/plugins/auth-backend/src/providers/auth0/strategy.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import OAuth2Strategy from 'passport-oauth2'; +import Auth0InternalStrategy from 'passport-auth0'; export interface Auth0StrategyOptionsWithRequest { clientID: string; @@ -23,10 +23,10 @@ export interface Auth0StrategyOptionsWithRequest { passReqToCallback: true; } -export default class Auth0Strategy extends OAuth2Strategy { +export default class Auth0Strategy extends Auth0InternalStrategy { constructor( options: Auth0StrategyOptionsWithRequest, - verify: OAuth2Strategy.VerifyFunctionWithRequest, + verify: Auth0InternalStrategy.VerifyFunctionWithRequest, ) { const optionsWithURLs = { ...options, diff --git a/yarn.lock b/yarn.lock index 92a44ee343..34bcd2aacb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3946,6 +3946,7 @@ __metadata: "@types/express-session": ^1.17.2 "@types/jwt-decode": ^3.1.0 "@types/passport": ^1.0.3 + "@types/passport-auth0": ^1.0.5 "@types/passport-github2": ^1.2.4 "@types/passport-google-oauth20": ^2.0.3 "@types/passport-microsoft": ^0.0.0 @@ -3972,6 +3973,7 @@ __metadata: node-fetch: ^2.6.7 openid-client: ^5.1.3 passport: ^0.6.0 + passport-auth0: ^1.4.3 passport-bitbucket-oauth2: ^0.1.2 passport-github2: ^0.1.12 passport-gitlab2: ^5.0.0 @@ -14635,6 +14637,16 @@ __metadata: languageName: node linkType: hard +"@types/passport-auth0@npm:^1.0.5": + version: 1.0.5 + resolution: "@types/passport-auth0@npm:1.0.5" + dependencies: + "@types/express": "*" + "@types/passport": "*" + checksum: b86b69a182864cae6877c0f16a1d62e24a394dc9cde8e7285a29aef89d52fbb555b899e061157bfd52420dcbccd6fd9b189155e5367a22763b0b2813cbb28354 + languageName: node + linkType: hard + "@types/passport-github2@npm:^1.2.4": version: 1.2.5 resolution: "@types/passport-github2@npm:1.2.5" @@ -16977,6 +16989,16 @@ __metadata: languageName: node linkType: hard +"axios@npm:^0.27.2": + version: 0.27.2 + resolution: "axios@npm:0.27.2" + dependencies: + follow-redirects: ^1.14.9 + form-data: ^4.0.0 + checksum: 38cb7540465fe8c4102850c4368053c21683af85c5fdf0ea619f9628abbcb59415d1e22ebc8a6390d2bbc9b58a9806c874f139767389c862ec9b772235f06854 + languageName: node + linkType: hard + "axobject-query@npm:^2.2.0": version: 2.2.0 resolution: "axobject-query@npm:2.2.0" @@ -18098,17 +18120,10 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001286": - version: 1.0.30001315 - resolution: "caniuse-lite@npm:1.0.30001315" - checksum: 3938596c61e4a5c6e96d1c6aecbde67b31c4c92e55a9d443b8e51e0eac64b6dd848dfac84891f75464f8d25c7e1ed6e9c9640593922b9bd360629fd433fb69e2 - languageName: node - linkType: hard - -"caniuse-lite@npm:^1.0.30001366": - version: 1.0.30001367 - resolution: "caniuse-lite@npm:1.0.30001367" - checksum: 9912aed182b8b3a834787424b56a0e71b5ecb5d2cb7235fb022227bc3a81202e8a34bebc5dc9cc504c515b4e052f825c36c2db4b0b880c10e195fe63673edfc6 +"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001286, caniuse-lite@npm:^1.0.30001366": + version: 1.0.30001392 + resolution: "caniuse-lite@npm:1.0.30001392" + checksum: b46fdb4cd63f43e608c9378e9a4cfc1092407fccda32f13f53db8818e0e654e5b2b9e7aee76b95a1a4fd3f2c2eabd1157aef19905f2c60dfcec136b27ac5fce6 languageName: node linkType: hard @@ -23310,6 +23325,16 @@ __metadata: languageName: node linkType: hard +"follow-redirects@npm:^1.14.9": + version: 1.15.1 + resolution: "follow-redirects@npm:1.15.1" + peerDependenciesMeta: + debug: + optional: true + checksum: 6aa4e3e3cdfa3b9314801a1cd192ba756a53479d9d8cca65bf4db3a3e8834e62139245cd2f9566147c8dfe2efff1700d3e6aefd103de4004a7b99985e71dd533 + languageName: node + linkType: hard + "for-in@npm:^1.0.2": version: 1.0.2 resolution: "for-in@npm:1.0.2" @@ -32321,6 +32346,17 @@ __metadata: languageName: node linkType: hard +"passport-auth0@npm:^1.4.3": + version: 1.4.3 + resolution: "passport-auth0@npm:1.4.3" + dependencies: + axios: ^0.27.2 + passport-oauth: ^1.0.0 + passport-oauth2: ^1.6.0 + checksum: 7658f58fd24831c67c783a9b0df3946bae9e6e42f8572747f17e77a2129d58ba21917a7531a4a328119b99a2a979ee857a1107c8e22e63e55739cdc1a8d1ccbc + languageName: node + linkType: hard + "passport-bitbucket-oauth2@npm:^0.1.2": version: 0.1.2 resolution: "passport-bitbucket-oauth2@npm:0.1.2" @@ -32379,7 +32415,7 @@ __metadata: languageName: node linkType: hard -"passport-oauth2@npm:1.6.1, passport-oauth2@npm:1.x.x, passport-oauth2@npm:^1.1.2, passport-oauth2@npm:^1.4.0, passport-oauth2@npm:^1.6.1": +"passport-oauth2@npm:1.6.1, passport-oauth2@npm:1.x.x, passport-oauth2@npm:^1.1.2, passport-oauth2@npm:^1.4.0, passport-oauth2@npm:^1.6.0, passport-oauth2@npm:^1.6.1": version: 1.6.1 resolution: "passport-oauth2@npm:1.6.1" dependencies: @@ -32392,7 +32428,7 @@ __metadata: languageName: node linkType: hard -"passport-oauth@npm:1.0.0": +"passport-oauth@npm:1.0.0, passport-oauth@npm:^1.0.0": version: 1.0.0 resolution: "passport-oauth@npm:1.0.0" dependencies: From 8600855fbf786cf575b77bb3d63f1ac36f9fe25a Mon Sep 17 00:00:00 2001 From: Joe Patterson Date: Thu, 8 Sep 2022 13:59:05 +1000 Subject: [PATCH 050/110] Update docs to reflect the change and add change set Signed-off-by: Joe Patterson --- .changeset/smart-sloths-search.md | 5 +++++ docs/auth/auth0/provider.md | 1 + 2 files changed, 6 insertions(+) create mode 100644 .changeset/smart-sloths-search.md diff --git a/.changeset/smart-sloths-search.md b/.changeset/smart-sloths-search.md new file mode 100644 index 0000000000..4b69184fa6 --- /dev/null +++ b/.changeset/smart-sloths-search.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-auth-backend': minor +--- + +Converts the auth0 to the passport-auth0 package and allows the addition of audience to auth0 connections this means that you can connect to the correct API to get permissions, access tokens and full profile diff --git a/docs/auth/auth0/provider.md b/docs/auth/auth0/provider.md index 80106a73c9..1bfa333191 100644 --- a/docs/auth/auth0/provider.md +++ b/docs/auth/auth0/provider.md @@ -34,6 +34,7 @@ auth: clientId: ${AUTH_AUTH0_CLIENT_ID} clientSecret: ${AUTH_AUTH0_CLIENT_SECRET} domain: ${AUTH_AUTH0_DOMAIN_ID} + audience: ${AUTH_AUTH0_AUDIENCE} ``` The Auth0 provider is a structure with three configuration keys: From 3152ca4b743c84395b62b9caa3ef2fbb448a0c51 Mon Sep 17 00:00:00 2001 From: Joe Patterson Date: Thu, 8 Sep 2022 14:25:20 +1000 Subject: [PATCH 051/110] run prettier Signed-off-by: Joe Patterson --- plugins/auth-backend/src/providers/auth0/provider.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/auth-backend/src/providers/auth0/provider.ts b/plugins/auth-backend/src/providers/auth0/provider.ts index 7f2310ab80..3321ff38af 100644 --- a/plugins/auth-backend/src/providers/auth0/provider.ts +++ b/plugins/auth-backend/src/providers/auth0/provider.ts @@ -47,7 +47,7 @@ import { ExtraVerificationParams } from 'passport-auth0'; type PrivateInfo = { refreshToken: string; - extraParams: ExtraVerificationParams, + extraParams: ExtraVerificationParams; }; export type Auth0AuthProviderOptions = OAuthProviderOptions & { @@ -98,7 +98,7 @@ export class Auth0AuthProvider implements OAuthHandlers { }, { refreshToken, - extraParams + extraParams, }, ); }, @@ -111,7 +111,7 @@ export class Auth0AuthProvider implements OAuthHandlers { prompt: 'consent', scope: req.scope, state: encodeState(req.state), - audience: this.audience as string + audience: this.audience as string, }); } @@ -120,7 +120,7 @@ export class Auth0AuthProvider implements OAuthHandlers { OAuthResult, PrivateInfo >(req, this._strategy, { - audience: this.audience as string + audience: this.audience as string, }); return { From df1e0d44bfa565ba54e9c01739d06931cdb0fd7a Mon Sep 17 00:00:00 2001 From: Luka Siric Date: Thu, 8 Sep 2022 09:18:26 +0200 Subject: [PATCH 052/110] Update .changeset/cuddly-clocks-dance.md changed plugin-catalog-backend-module-msgraph change to "patch" Co-authored-by: Patrik Oldsberg Signed-off-by: Luka Siric --- .changeset/cuddly-clocks-dance.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/cuddly-clocks-dance.md b/.changeset/cuddly-clocks-dance.md index 1a9c05bf20..9d33535a62 100644 --- a/.changeset/cuddly-clocks-dance.md +++ b/.changeset/cuddly-clocks-dance.md @@ -1,5 +1,5 @@ --- -'@backstage/plugin-catalog-backend-module-msgraph': minor +'@backstage/plugin-catalog-backend-module-msgraph': patch --- Added $select attribute to user query From d9e39544be21514f51ed89845257ceca998ae91f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Thu, 8 Sep 2022 09:39:49 +0200 Subject: [PATCH 053/110] start chipping away a bit at the yarn3 dependency warnings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- .changeset/tame-socks-sniff.md | 6 ++++++ package.json | 1 + packages/app-defaults/package.json | 2 ++ packages/app/package.json | 1 + packages/test-utils/package.json | 1 + yarn.lock | 5 +++++ 6 files changed, 16 insertions(+) create mode 100644 .changeset/tame-socks-sniff.md diff --git a/.changeset/tame-socks-sniff.md b/.changeset/tame-socks-sniff.md new file mode 100644 index 0000000000..b6cca23380 --- /dev/null +++ b/.changeset/tame-socks-sniff.md @@ -0,0 +1,6 @@ +--- +'@backstage/app-defaults': patch +'@backstage/test-utils': patch +--- + +Add missing peer dependencies diff --git a/package.json b/package.json index 312d71858d..3c9e2743cb 100644 --- a/package.json +++ b/package.json @@ -67,6 +67,7 @@ "concurrently": "^7.0.0", "cross-env": "^7.0.0", "e2e-test": "workspace:*", + "eslint": "^8.6.0", "eslint-plugin-notice": "^0.9.10", "fs-extra": "10.1.0", "husky": "^8.0.0", diff --git a/packages/app-defaults/package.json b/packages/app-defaults/package.json index e7e2b8fbf4..f59ab4b071 100644 --- a/packages/app-defaults/package.json +++ b/packages/app-defaults/package.json @@ -42,6 +42,8 @@ }, "peerDependencies": { "react": "^16.13.1 || ^17.0.0", + "react-dom": "^16.13.1 || ^17.0.0", + "react-router": "6.0.0-beta.0 || ^6.3.0", "react-router-dom": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { diff --git a/packages/app/package.json b/packages/app/package.json index 8052bf39d4..6ed4cadff0 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -89,6 +89,7 @@ "@types/jest": "^26.0.7", "@types/jquery": "^3.3.34", "@types/node": "^16.11.26", + "@types/react": "*", "@types/react-dom": "*", "@types/zen-observable": "^0.8.0", "cross-env": "^7.0.0", diff --git a/packages/test-utils/package.json b/packages/test-utils/package.json index 1e99921b3c..d08a1f3e08 100644 --- a/packages/test-utils/package.json +++ b/packages/test-utils/package.json @@ -50,6 +50,7 @@ "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": "6.0.0-beta.0 || ^6.3.0", "react-router-dom": "6.0.0-beta.0 || ^6.3.0" }, diff --git a/yarn.lock b/yarn.lock index 1b47544c1d..ddb1e7f4d1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2834,6 +2834,8 @@ __metadata: "@types/react": ^16.13.1 || ^17.0.0 peerDependencies: react: ^16.13.1 || ^17.0.0 + react-dom: ^16.13.1 || ^17.0.0 + react-router: 6.0.0-beta.0 || ^6.3.0 react-router-dom: 6.0.0-beta.0 || ^6.3.0 languageName: unknown linkType: soft @@ -7503,6 +7505,7 @@ __metadata: 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: 6.0.0-beta.0 || ^6.3.0 react-router-dom: 6.0.0-beta.0 || ^6.3.0 languageName: unknown @@ -22556,6 +22559,7 @@ __metadata: "@types/jest": ^26.0.7 "@types/jquery": ^3.3.34 "@types/node": ^16.11.26 + "@types/react": "*" "@types/react-dom": "*" "@types/zen-observable": ^0.8.0 cross-env: ^7.0.0 @@ -36131,6 +36135,7 @@ __metadata: concurrently: ^7.0.0 cross-env: ^7.0.0 e2e-test: "workspace:*" + eslint: ^8.6.0 eslint-plugin-notice: ^0.9.10 fs-extra: 10.1.0 husky: ^8.0.0 From 644b267bdeb1bcc3a469ef4ec98b3c714868e550 Mon Sep 17 00:00:00 2001 From: Joe Patterson Date: Thu, 8 Sep 2022 18:41:15 +1000 Subject: [PATCH 054/110] fix the session issue by copying okta Signed-off-by: Joe Patterson --- .../src/providers/auth0/provider.ts | 25 +++++++++++++++---- .../src/providers/auth0/strategy.ts | 4 ++- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/plugins/auth-backend/src/providers/auth0/provider.ts b/plugins/auth-backend/src/providers/auth0/provider.ts index 3321ff38af..3726fe10c0 100644 --- a/plugins/auth-backend/src/providers/auth0/provider.ts +++ b/plugins/auth-backend/src/providers/auth0/provider.ts @@ -43,11 +43,10 @@ import { AuthResolverContext, } from '../types'; import { createAuthProviderIntegration } from '../createAuthProviderIntegration'; -import { ExtraVerificationParams } from 'passport-auth0'; +import { StateStore } from 'passport-oauth2'; type PrivateInfo = { refreshToken: string; - extraParams: ExtraVerificationParams; }; export type Auth0AuthProviderOptions = OAuthProviderOptions & { @@ -65,6 +64,23 @@ export class Auth0AuthProvider implements OAuthHandlers { private readonly resolverContext: AuthResolverContext; private readonly audience?: string; + /** + * Due to passport-auth0 forcing options.state = true, + * passport-oauth2 requires express-session to be installed + * so that the 'state' parameter of the oauth2 flow can be stored. + * This implementation of StateStore matches the NullStore found within + * passport-oauth2, which is the StateStore implementation used when options.state = false, + * allowing us to avoid using express-session in order to integrate with Okta. + */ + private store: StateStore = { + store(_req: express.Request, cb: any) { + cb(null, null); + }, + verify(_req: express.Request, _state: string, cb: any) { + cb(null, true); + }, + }; + constructor(options: Auth0AuthProviderOptions) { this.signInResolver = options.signInResolver; this.authHandler = options.authHandler; @@ -79,12 +95,12 @@ export class Auth0AuthProvider implements OAuthHandlers { // We need passReqToCallback set to false to get params, but there's // no matching type signature for that, so instead behold this beauty passReqToCallback: false as true, + store: this.store, }, ( accessToken: any, refreshToken: any, params: any, - extraParams: ExtraVerificationParams, fullProfile: passport.Profile, done: PassportDoneCallback, ) => { @@ -97,8 +113,7 @@ export class Auth0AuthProvider implements OAuthHandlers { params, }, { - refreshToken, - extraParams, + refreshToken }, ); }, diff --git a/plugins/auth-backend/src/providers/auth0/strategy.ts b/plugins/auth-backend/src/providers/auth0/strategy.ts index bef2836ab5..cf5b522ec5 100644 --- a/plugins/auth-backend/src/providers/auth0/strategy.ts +++ b/plugins/auth-backend/src/providers/auth0/strategy.ts @@ -14,6 +14,7 @@ * limitations under the License. */ import Auth0InternalStrategy from 'passport-auth0'; +import { StateStore } from 'passport-oauth2'; export interface Auth0StrategyOptionsWithRequest { clientID: string; @@ -21,12 +22,13 @@ export interface Auth0StrategyOptionsWithRequest { callbackURL: string; domain: string; passReqToCallback: true; + store: StateStore; } export default class Auth0Strategy extends Auth0InternalStrategy { constructor( options: Auth0StrategyOptionsWithRequest, - verify: Auth0InternalStrategy.VerifyFunctionWithRequest, + verify: Auth0InternalStrategy.VerifyFunction, ) { const optionsWithURLs = { ...options, From 3db53bbfa3b0cc32bc58cc1f8234e3e59dfe6d30 Mon Sep 17 00:00:00 2001 From: Joe Patterson Date: Thu, 8 Sep 2022 19:49:32 +1000 Subject: [PATCH 055/110] fix prettier error Signed-off-by: Joe Patterson --- plugins/auth-backend/src/providers/auth0/provider.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/auth-backend/src/providers/auth0/provider.ts b/plugins/auth-backend/src/providers/auth0/provider.ts index 3726fe10c0..5df37313f3 100644 --- a/plugins/auth-backend/src/providers/auth0/provider.ts +++ b/plugins/auth-backend/src/providers/auth0/provider.ts @@ -80,7 +80,7 @@ export class Auth0AuthProvider implements OAuthHandlers { cb(null, true); }, }; - + constructor(options: Auth0AuthProviderOptions) { this.signInResolver = options.signInResolver; this.authHandler = options.authHandler; @@ -113,7 +113,7 @@ export class Auth0AuthProvider implements OAuthHandlers { params, }, { - refreshToken + refreshToken, }, ); }, From 018b7ec1f3171dba66f7a787952c8fe07e1c1ad6 Mon Sep 17 00:00:00 2001 From: Joe Patterson Date: Thu, 8 Sep 2022 20:33:54 +1000 Subject: [PATCH 056/110] update provider for changes in review and update changeset message Signed-off-by: Joe Patterson --- .changeset/smart-sloths-search.md | 2 +- plugins/auth-backend/src/providers/auth0/provider.ts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.changeset/smart-sloths-search.md b/.changeset/smart-sloths-search.md index 4b69184fa6..fe7565844e 100644 --- a/.changeset/smart-sloths-search.md +++ b/.changeset/smart-sloths-search.md @@ -2,4 +2,4 @@ '@backstage/plugin-auth-backend': minor --- -Converts the auth0 to the passport-auth0 package and allows the addition of audience to auth0 connections this means that you can connect to the correct API to get permissions, access tokens and full profile +The auth0 integration is updated to use the passport-auth0 library. The configuration under auth.providers.auth0.* now supports an optional audience parameter; providing that allows you to connect to the correct API to get permissions, access tokens, and full profile information. diff --git a/plugins/auth-backend/src/providers/auth0/provider.ts b/plugins/auth-backend/src/providers/auth0/provider.ts index 5df37313f3..309fb0fc7b 100644 --- a/plugins/auth-backend/src/providers/auth0/provider.ts +++ b/plugins/auth-backend/src/providers/auth0/provider.ts @@ -70,7 +70,7 @@ export class Auth0AuthProvider implements OAuthHandlers { * so that the 'state' parameter of the oauth2 flow can be stored. * This implementation of StateStore matches the NullStore found within * passport-oauth2, which is the StateStore implementation used when options.state = false, - * allowing us to avoid using express-session in order to integrate with Okta. + * allowing us to avoid using express-session in order to integrate with auth0. */ private store: StateStore = { store(_req: express.Request, cb: any) { @@ -126,7 +126,7 @@ export class Auth0AuthProvider implements OAuthHandlers { prompt: 'consent', scope: req.scope, state: encodeState(req.state), - audience: this.audience as string, + ...(this.audience ? { audience: this.audience } : {}), }); } @@ -135,7 +135,7 @@ export class Auth0AuthProvider implements OAuthHandlers { OAuthResult, PrivateInfo >(req, this._strategy, { - audience: this.audience as string, + ...(this.audience ? { audience: this.audience } : {}), }); return { From ec12bbe64b5060a87f521bf2f81baf5174ed4aad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Tunkl?= Date: Thu, 8 Sep 2022 13:04:03 +0200 Subject: [PATCH 057/110] Implemented new tests for humanize update. Fix of logic MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomáš Tunkl --- .../components/EntityRefLink/humanize.test.ts | 80 ++++++++++++++++++- .../src/components/EntityRefLink/humanize.ts | 18 ++++- 2 files changed, 92 insertions(+), 6 deletions(-) diff --git a/plugins/catalog-react/src/components/EntityRefLink/humanize.test.ts b/plugins/catalog-react/src/components/EntityRefLink/humanize.test.ts index 9f08290095..80ce2100f6 100644 --- a/plugins/catalog-react/src/components/EntityRefLink/humanize.test.ts +++ b/plugins/catalog-react/src/components/EntityRefLink/humanize.test.ts @@ -47,7 +47,7 @@ describe('humanizeEntityRef', () => { lifecycle: 'production', }, }; - const title = humanizeEntityRef(entity, { skipDefaultNamespace: false }); + const title = humanizeEntityRef(entity, { defaultNamespace: false }); expect(title).toEqual('component:default/software'); }); @@ -69,6 +69,24 @@ describe('humanizeEntityRef', () => { expect(title).toEqual('component:test/software'); }); + it('formats entity in other namespace and hides this namespace', () => { + const entity = { + apiVersion: 'v1', + kind: 'Component', + metadata: { + name: 'software', + namespace: 'test', + }, + spec: { + owner: 'guest', + type: 'service', + lifecycle: 'production', + }, + }; + const title = humanizeEntityRef(entity, { defaultNamespace: 'test' }); + expect(title).toEqual('component:software'); + }); + it('formats entity and hides default kind', () => { const entity = { apiVersion: 'v1', @@ -87,6 +105,27 @@ describe('humanizeEntityRef', () => { expect(title).toEqual('test/software'); }); + it('formats entity and hides default kind and hiding namespace', () => { + const entity = { + apiVersion: 'v1', + kind: 'Component', + metadata: { + name: 'software', + namespace: 'test', + }, + spec: { + owner: 'guest', + type: 'service', + lifecycle: 'production', + }, + }; + const title = humanizeEntityRef(entity, { + defaultKind: 'Component', + defaultNamespace: 'test', + }); + expect(title).toEqual('software'); + }); + it('formats entity name in default namespace', () => { const entityName = { kind: 'Component', @@ -97,6 +136,16 @@ describe('humanizeEntityRef', () => { expect(title).toEqual('component:software'); }); + it('formats entity name in default namespace and does not skip default namespace', () => { + const entityName = { + kind: 'Component', + namespace: 'default', + name: 'software', + }; + const title = humanizeEntityRef(entityName, { defaultNamespace: false }); + expect(title).toEqual('component:default/software'); + }); + it('formats entity name in other namespace', () => { const entityName = { kind: 'Component', @@ -108,6 +157,19 @@ describe('humanizeEntityRef', () => { expect(title).toEqual('component:test/software'); }); + it('formats entity name in other namespace with skipping this namespace', () => { + const entityName = { + kind: 'Component', + namespace: 'test', + name: 'software', + }; + + const title = humanizeEntityRef(entityName, { + defaultNamespace: 'test', + }); + expect(title).toEqual('component:software'); + }); + it('renders link for entity name and hides default kind', () => { const entityName = { kind: 'Component', @@ -121,6 +183,20 @@ describe('humanizeEntityRef', () => { expect(title).toEqual('test/software'); }); + it('renders link for entity name and hides default kind with skipping namespace', () => { + const entityName = { + kind: 'Component', + namespace: 'test', + name: 'software', + }; + + const title = humanizeEntityRef(entityName, { + defaultKind: 'component', + defaultNamespace: 'test', + }); + expect(title).toEqual('software'); + }); + it('formats entity name in default namespace without skip of default namespace', () => { const entityName = { kind: 'Component', @@ -129,7 +205,7 @@ describe('humanizeEntityRef', () => { }; const title = humanizeEntityRef(entityName, { - skipDefaultNamespace: false, + defaultNamespace: false, }); expect(title).toEqual('component:default/software'); }); diff --git a/plugins/catalog-react/src/components/EntityRefLink/humanize.ts b/plugins/catalog-react/src/components/EntityRefLink/humanize.ts index bd97ce2548..536b9a3a6e 100644 --- a/plugins/catalog-react/src/components/EntityRefLink/humanize.ts +++ b/plugins/catalog-react/src/components/EntityRefLink/humanize.ts @@ -20,16 +20,19 @@ import { DEFAULT_NAMESPACE, } from '@backstage/catalog-model'; -/** @public */ +/** + * @property defaultNamespace - if set to false then namespace is never ommited, + * if set to string which matches namespace of entity then omited + * + * @public */ export function humanizeEntityRef( entityRef: Entity | CompoundEntityRef, opts?: { defaultKind?: string; - skipDefaultNamespace?: boolean; + defaultNamespace?: string | boolean; }, ) { const defaultKind = opts?.defaultKind; - const skipDefaultNamespace = opts?.skipDefaultNamespace ?? true; let kind; let namespace; let name; @@ -44,7 +47,14 @@ export function humanizeEntityRef( name = entityRef.name; } - if (skipDefaultNamespace === true && namespace === DEFAULT_NAMESPACE) { + if (namespace === undefined || namespace === '') { + namespace = DEFAULT_NAMESPACE; + } + if (opts?.defaultNamespace !== undefined) { + if (opts?.defaultNamespace === namespace) { + namespace = undefined; + } + } else if (namespace === DEFAULT_NAMESPACE) { namespace = undefined; } From 13ec891dd37dafc3cb7ee0d0910ceaf1d46f58e7 Mon Sep 17 00:00:00 2001 From: Alex Crome Date: Thu, 8 Sep 2022 12:31:54 +0100 Subject: [PATCH 058/110] Correct URL spelling Signed-off-by: Alex Crome --- docs/integrations/github/github-apps.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/integrations/github/github-apps.md b/docs/integrations/github/github-apps.md index 38459acf75..b526c306e7 100644 --- a/docs/integrations/github/github-apps.md +++ b/docs/integrations/github/github-apps.md @@ -100,7 +100,7 @@ integrations: If you want to limit the GitHub app installations visible to backstage you may optionally include the `allowedInstallationOwners` option. If you configure multiple apps, specifying this will bring some small performance benefits -as backstage can more easily select which app to use for a url. +as backstage can more easily select which app to use for a URL. ```yaml appId: app id From dfe117438b31e2826ed331800b9914bcf94c0d32 Mon Sep 17 00:00:00 2001 From: Joe Patterson Date: Thu, 8 Sep 2022 21:32:50 +1000 Subject: [PATCH 059/110] update changeset for styling Signed-off-by: Joe Patterson --- .changeset/smart-sloths-search.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/smart-sloths-search.md b/.changeset/smart-sloths-search.md index fe7565844e..8028fe3e49 100644 --- a/.changeset/smart-sloths-search.md +++ b/.changeset/smart-sloths-search.md @@ -2,4 +2,4 @@ '@backstage/plugin-auth-backend': minor --- -The auth0 integration is updated to use the passport-auth0 library. The configuration under auth.providers.auth0.* now supports an optional audience parameter; providing that allows you to connect to the correct API to get permissions, access tokens, and full profile information. +The auth0 integration is updated to use the `passport-auth0` library. The configuration under `auth.providers.auth0.\*` now supports an optional `audience` parameter; providing that allows you to connect to the correct API to get permissions, access tokens, and full profile information. From 926aa67040a022c19927dfc850fc283b02bfc2a1 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 8 Sep 2022 13:42:11 +0200 Subject: [PATCH 060/110] app: bump roadie plugins Signed-off-by: Patrik Oldsberg --- packages/app/package.json | 8 +++--- yarn.lock | 54 +++++++++++++++++++-------------------- 2 files changed, 31 insertions(+), 31 deletions(-) diff --git a/packages/app/package.json b/packages/app/package.json index f53035b29f..e9c9632d81 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -66,10 +66,10 @@ "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", "@octokit/rest": "^19.0.3", - "@roadiehq/backstage-plugin-buildkite": "^2.0.0", - "@roadiehq/backstage-plugin-github-insights": "^2.0.0", - "@roadiehq/backstage-plugin-github-pull-requests": "^2.0.0", - "@roadiehq/backstage-plugin-travis-ci": "^2.0.0", + "@roadiehq/backstage-plugin-buildkite": "^2.0.8", + "@roadiehq/backstage-plugin-github-insights": "^2.0.5", + "@roadiehq/backstage-plugin-github-pull-requests": "^2.2.7", + "@roadiehq/backstage-plugin-travis-ci": "^2.0.5", "history": "^5.0.0", "prop-types": "^15.7.2", "react": "^17.0.2", diff --git a/yarn.lock b/yarn.lock index 9b3a89c02b..e8c07a2c57 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12492,9 +12492,9 @@ __metadata: languageName: node linkType: hard -"@roadiehq/backstage-plugin-buildkite@npm:^2.0.0": - version: 2.0.7 - resolution: "@roadiehq/backstage-plugin-buildkite@npm:2.0.7" +"@roadiehq/backstage-plugin-buildkite@npm:^2.0.8": + version: 2.0.8 + resolution: "@roadiehq/backstage-plugin-buildkite@npm:2.0.8" dependencies: "@backstage/catalog-model": ^1.0.0 "@backstage/core-components": ^0.11.0 @@ -12506,19 +12506,19 @@ __metadata: "@material-ui/lab": 4.0.0-alpha.57 history: ^5.0.0 moment: ^2.29.1 - react-router: 6.0.0-beta.0 - react-router-dom: 6.0.0-beta.0 react-use: ^17.2.4 peerDependencies: react: ^16.13.1 || ^17.0.0 react-dom: ^16.13.1 || ^17.0.0 - checksum: cf7ba623c418d3ea7ea56c67b0fe10d6be7fe36531539c31e87b586897fcb9c3474a432239d7d6c01623ff6fc29fb4ae905564a9d2aae11e2ce54b8502cc1c29 + react-router: 6.0.0-beta.0 || ^6.3.0 + react-router-dom: 6.0.0-beta.0 || ^6.3.0 + checksum: 589f89b53ff166ca9099ea8d2a5b6f96b87a3daf2e0cb115e94c8880639f69bc25a04cab2926cba0c99dc9bb70a159528c6f1fc10a9fba67e4fb3abe40bce0bf languageName: node linkType: hard -"@roadiehq/backstage-plugin-github-insights@npm:^2.0.0": - version: 2.0.4 - resolution: "@roadiehq/backstage-plugin-github-insights@npm:2.0.4" +"@roadiehq/backstage-plugin-github-insights@npm:^2.0.5": + version: 2.0.5 + resolution: "@roadiehq/backstage-plugin-github-insights@npm:2.0.5" dependencies: "@backstage/catalog-model": ^1.0.0 "@backstage/core-components": ^0.11.0 @@ -12534,19 +12534,19 @@ __metadata: "@octokit/types": ^6.14.2 history: ^5.0.0 immer: 9.0.7 - react-router: ^6.0.0-beta.0 react-use: ^17.2.4 zustand: 3.6.9 peerDependencies: react: ^16.13.1 || ^17.0.0 react-dom: ^16.13.1 || ^17.0.0 - checksum: 2cc6eb992e78d7ce32ecce09996bda4eb34d4af3564ab54d180543d3a195a8b6e93f3137724569c49e645d44bfc00f3802285418f690393c456700668be01c25 + react-router: 6.0.0-beta.0 || ^6.3.0 + checksum: 37f99d0478dee6acbbafaf334a2eb1f75c251e96f8b10cead0d6f6dc203667dca51ded935ca704900251c01493b6287a66814f79245410a79ad66c843a3d4803 languageName: node linkType: hard -"@roadiehq/backstage-plugin-github-pull-requests@npm:^2.0.0": - version: 2.2.6 - resolution: "@roadiehq/backstage-plugin-github-pull-requests@npm:2.2.6" +"@roadiehq/backstage-plugin-github-pull-requests@npm:^2.2.7": + version: 2.2.7 + resolution: "@roadiehq/backstage-plugin-github-pull-requests@npm:2.2.7" dependencies: "@backstage/catalog-model": ^1.0.0 "@backstage/core-components": ^0.11.0 @@ -12564,18 +12564,18 @@ __metadata: moment: ^2.27.0 msw: ^0.39.2 node-fetch: ^2.6.1 - react-router: 6.0.0-beta.0 react-use: ^17.2.4 peerDependencies: react: ^16.13.1 || ^17.0.0 react-dom: ^16.13.1 || ^17.0.0 - checksum: 1b6d584a1e6cc668026d9bcdea7e5588ad22084412e5e2c52659aed9da0f90fa5edb81e8d90d2ff67b645e0fb96790b91cb0a1024f1682319c7fb4799b62baa8 + react-router: 6.0.0-beta.0 || ^6.3.0 + checksum: 2453f72c4b853e4d6f43cb27aaf27cbce5d122fbcdc71625b1e1493486acde551798524cc84f792d986397011ab458ba9b7e56eec34cde55660ccd69ea488cb0 languageName: node linkType: hard -"@roadiehq/backstage-plugin-travis-ci@npm:^2.0.0": - version: 2.0.4 - resolution: "@roadiehq/backstage-plugin-travis-ci@npm:2.0.4" +"@roadiehq/backstage-plugin-travis-ci@npm:^2.0.5": + version: 2.0.5 + resolution: "@roadiehq/backstage-plugin-travis-ci@npm:2.0.5" dependencies: "@backstage/catalog-model": ^1.0.0 "@backstage/core-components": ^0.11.0 @@ -12589,13 +12589,13 @@ __metadata: date-fns: ^2.18.0 history: ^5.0.0 moment: ^2.29.1 - react-router: 6.0.0-beta.0 - react-router-dom: 6.0.0-beta.0 react-use: ^17.2.4 peerDependencies: react: ^16.13.1 || ^17.0.0 react-dom: ^16.13.1 || ^17.0.0 - checksum: 1c0f3389f6415d23fe1926e3387433da7f3d22b4a237c3a690c894cfa4c281b21307a3ec51a2c48cfa115727cca182c15017ef1e58a2e9b893d89d06df6db35e + react-router: 6.0.0-beta.0 || ^6.3.0 + react-router-dom: 6.0.0-beta.0 || ^6.3.0 + checksum: bafcef69ca1b36585dbafcf8964d897942bd026f74dad81f372aed9ee1ce496a4821570f462b62b1b8d0cb86013615ad39e103827163bde8cf32037143b05c7a languageName: node linkType: hard @@ -22435,10 +22435,10 @@ __metadata: "@material-ui/lab": 4.0.0-alpha.57 "@octokit/rest": ^19.0.3 "@rjsf/core": ^3.2.1 - "@roadiehq/backstage-plugin-buildkite": ^2.0.0 - "@roadiehq/backstage-plugin-github-insights": ^2.0.0 - "@roadiehq/backstage-plugin-github-pull-requests": ^2.0.0 - "@roadiehq/backstage-plugin-travis-ci": ^2.0.0 + "@roadiehq/backstage-plugin-buildkite": ^2.0.8 + "@roadiehq/backstage-plugin-github-insights": ^2.0.5 + "@roadiehq/backstage-plugin-github-pull-requests": ^2.2.7 + "@roadiehq/backstage-plugin-travis-ci": ^2.0.5 "@testing-library/cypress": ^8.0.2 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 @@ -34556,7 +34556,7 @@ __metadata: languageName: node linkType: hard -"react-router-stable@npm:react-router@^6.3.0, react-router@npm:6.3.0, react-router@npm:^6.0.0-beta.0, react-router@npm:^6.3.0": +"react-router-stable@npm:react-router@^6.3.0, react-router@npm:6.3.0, react-router@npm:^6.3.0": version: 6.3.0 resolution: "react-router@npm:6.3.0" dependencies: From 298df14c06e5f1fac044c6453ec37708c5af774e Mon Sep 17 00:00:00 2001 From: Joe Patterson Date: Thu, 8 Sep 2022 22:11:00 +1000 Subject: [PATCH 061/110] add what is an audience to the markdown Signed-off-by: Joe Patterson --- .changeset/smart-sloths-search.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.changeset/smart-sloths-search.md b/.changeset/smart-sloths-search.md index 8028fe3e49..7404030515 100644 --- a/.changeset/smart-sloths-search.md +++ b/.changeset/smart-sloths-search.md @@ -3,3 +3,5 @@ --- The auth0 integration is updated to use the `passport-auth0` library. The configuration under `auth.providers.auth0.\*` now supports an optional `audience` parameter; providing that allows you to connect to the correct API to get permissions, access tokens, and full profile information. + +[What is an Audience](https://community.auth0.com/t/what-is-the-audience/71414) \ No newline at end of file From 5986fa4f2d77abccaed491b65cbcab16a581f6fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Tunkl?= Date: Thu, 8 Sep 2022 14:11:37 +0200 Subject: [PATCH 062/110] Fix of typo MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomáš Tunkl --- .../catalog-react/src/components/EntityRefLink/humanize.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/catalog-react/src/components/EntityRefLink/humanize.ts b/plugins/catalog-react/src/components/EntityRefLink/humanize.ts index 536b9a3a6e..4a53ace1e3 100644 --- a/plugins/catalog-react/src/components/EntityRefLink/humanize.ts +++ b/plugins/catalog-react/src/components/EntityRefLink/humanize.ts @@ -21,8 +21,8 @@ import { } from '@backstage/catalog-model'; /** - * @property defaultNamespace - if set to false then namespace is never ommited, - * if set to string which matches namespace of entity then omited + * @property defaultNamespace - if set to false then namespace is never omitted, + * if set to string which matches namespace of entity then omitted * * @public */ export function humanizeEntityRef( From 2a46e3701e291ac499997ecae9bc2d6fbf81290d Mon Sep 17 00:00:00 2001 From: Taras Date: Thu, 8 Sep 2022 08:42:07 -0400 Subject: [PATCH 063/110] Integrated feedback from @freben Signed-off-by: Taras --- .changeset/large-books-deny.md | 2 +- packages/catalog-client/api-report.md | 12 ++++++++---- packages/catalog-client/src/CatalogClient.ts | 9 ++++++--- packages/catalog-client/src/types/api.ts | 7 +++---- 4 files changed, 18 insertions(+), 12 deletions(-) diff --git a/.changeset/large-books-deny.md b/.changeset/large-books-deny.md index 51d2ce38c0..c88d391639 100644 --- a/.changeset/large-books-deny.md +++ b/.changeset/large-books-deny.md @@ -2,4 +2,4 @@ '@backstage/catalog-client': minor --- -Adding validateEntity method that calls /validate-entity endpoint +Adding `validateEntity` method that calls `/validate-entity` endpoint. diff --git a/packages/catalog-client/api-report.md b/packages/catalog-client/api-report.md index 1d66b469a9..0ad77ce39c 100644 --- a/packages/catalog-client/api-report.md +++ b/packages/catalog-client/api-report.md @@ -209,8 +209,12 @@ type Location_2 = { export { Location_2 as Location }; // @public -export type ValidateEntityResponse = { - valid: boolean; - errors?: SerializedError[]; -}; +export type ValidateEntityResponse = + | { + valid: true; + } + | { + valid: false; + errors: SerializedError[]; + }; ``` diff --git a/packages/catalog-client/src/CatalogClient.ts b/packages/catalog-client/src/CatalogClient.ts index bbc9b0b62d..f2b4186bfb 100644 --- a/packages/catalog-client/src/CatalogClient.ts +++ b/packages/catalog-client/src/CatalogClient.ts @@ -21,7 +21,7 @@ import { stringifyEntityRef, stringifyLocationRef, } from '@backstage/catalog-model'; -import { ResponseError, SerializedError } from '@backstage/errors'; +import { ResponseError } from '@backstage/errors'; import crossFetch from 'cross-fetch'; import { CATALOG_FILTER_EXISTS, @@ -377,11 +377,14 @@ export class CatalogClient implements CatalogApi { if (response.ok) { return { valid: true, - errors: undefined, }; } - const { errors } = (await response.json()) as { errors: SerializedError[] }; + if (response.status !== 400) { + throw await ResponseError.fromResponse(response); + } + + const { errors = [] } = await response.json(); return { valid: false, diff --git a/packages/catalog-client/src/types/api.ts b/packages/catalog-client/src/types/api.ts index d66e2dfaf9..f483c3454c 100644 --- a/packages/catalog-client/src/types/api.ts +++ b/packages/catalog-client/src/types/api.ts @@ -275,10 +275,9 @@ export type AddLocationResponse = { * * @public */ -export type ValidateEntityResponse = { - valid: boolean; - errors?: SerializedError[]; -}; +export type ValidateEntityResponse = + | { valid: true } + | { valid: false; errors: SerializedError[] }; /** * A client for interacting with the Backstage software catalog through its API. From 321a1b2d3609b0295bb22ae614810b0221580506 Mon Sep 17 00:00:00 2001 From: Simone Corsi Date: Thu, 8 Sep 2022 15:49:31 +0200 Subject: [PATCH 064/110] docs(backstage-plugin-ldap-auth): reviewed labels Signed-off-by: Simone Corsi --- microsite/data/plugins/backstage-plugin-ldap-auth.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/microsite/data/plugins/backstage-plugin-ldap-auth.yml b/microsite/data/plugins/backstage-plugin-ldap-auth.yml index ca91b9bd30..1800f7370c 100644 --- a/microsite/data/plugins/backstage-plugin-ldap-auth.yml +++ b/microsite/data/plugins/backstage-plugin-ldap-auth.yml @@ -1,9 +1,9 @@ --- -title: Backstage Plugin LDAP Auth +title: LDAP Auth author: ImmobiliareLabs authorUrl: https://github.com/immobiliare category: Authentication -description: Backstage plugin to authenticate users to an external LDAP server +description: Authenticate users to an external LDAP server documentation: https://github.com/immobiliare/backstage-plugin-ldap-auth/blob/main/README.md iconUrl: https://avatars.githubusercontent.com/u/10090828 npmPackageName: '@immobiliarelabs/backstage-plugin-ldap-auth' From afcafda62064363d13897f9839009de065df1df8 Mon Sep 17 00:00:00 2001 From: Taras Date: Thu, 8 Sep 2022 11:20:43 -0400 Subject: [PATCH 065/110] Fix the test Signed-off-by: Taras --- packages/catalog-client/src/CatalogClient.test.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/catalog-client/src/CatalogClient.test.ts b/packages/catalog-client/src/CatalogClient.test.ts index 9427d78f5c..263bb8971d 100644 --- a/packages/catalog-client/src/CatalogClient.test.ts +++ b/packages/catalog-client/src/CatalogClient.test.ts @@ -354,7 +354,6 @@ describe('CatalogClient', () => { ), ).toMatchObject({ valid: true, - errors: undefined, }); }); }); From c5cf37026ec31e83364e3c655e2594588892733e Mon Sep 17 00:00:00 2001 From: Taras Date: Thu, 8 Sep 2022 11:55:08 -0400 Subject: [PATCH 066/110] Add test for unexpected error Signed-off-by: Taras --- .../catalog-client/src/CatalogClient.test.ts | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/packages/catalog-client/src/CatalogClient.test.ts b/packages/catalog-client/src/CatalogClient.test.ts index 263bb8971d..6c9c68efa2 100644 --- a/packages/catalog-client/src/CatalogClient.test.ts +++ b/packages/catalog-client/src/CatalogClient.test.ts @@ -356,5 +356,26 @@ describe('CatalogClient', () => { valid: true, }); }); + + it('throws unexpected error', async () => { + server.use( + rest.post(`${mockBaseUrl}/validate-entity`, (_req, res, ctx) => { + return res(ctx.status(500), ctx.json({})); + }), + ); + + await expect(() => + client.validateEntity( + { + apiVersion: '1', + kind: 'Component', + metadata: { + name: 'good', + }, + }, + 'http://example.com', + ), + ).rejects.toThrow(/Request failed with 500 Error/); + }); }); }); From a7e82c9b017424f4adeab90fd3962b11fc788979 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 8 Sep 2022 13:01:46 +0200 Subject: [PATCH 067/110] cli: update versions:bump to work with Yarn 3 Signed-off-by: Patrik Oldsberg --- .changeset/weak-radios-sin.md | 5 + .../cli/src/commands/versions/bump.test.ts | 125 ++++-------------- packages/cli/src/lib/run.ts | 2 +- .../cli/src/lib/versioning/packages.test.ts | 60 +++++++-- packages/cli/src/lib/versioning/packages.ts | 51 +++++-- packages/cli/src/lib/yarn.ts | 49 +++++++ 6 files changed, 173 insertions(+), 119 deletions(-) create mode 100644 .changeset/weak-radios-sin.md create mode 100644 packages/cli/src/lib/yarn.ts diff --git a/.changeset/weak-radios-sin.md b/.changeset/weak-radios-sin.md new file mode 100644 index 0000000000..e2aac006d4 --- /dev/null +++ b/.changeset/weak-radios-sin.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +Updated `versions:bump` command to be compatible with Yarn 3. diff --git a/packages/cli/src/commands/versions/bump.test.ts b/packages/cli/src/commands/versions/bump.test.ts index a127d15953..25682a4cd4 100644 --- a/packages/cli/src/commands/versions/bump.test.ts +++ b/packages/cli/src/commands/versions/bump.test.ts @@ -28,6 +28,7 @@ import { import { YarnInfoInspectData } from '../../lib/versioning/packages'; import { setupServer } from 'msw/node'; import { rest } from 'msw'; +import { NotFoundError } from '@backstage/errors'; // Remove log coloring to simplify log matching jest.mock('chalk', () => ({ @@ -54,7 +55,15 @@ jest.mock('ora', () => ({ jest.mock('../../lib/run', () => { return { run: jest.fn(), - runPlain: jest.fn(), + }; +}); + +const mockFetchPackageInfo = jest.fn(); +jest.mock('../../lib/versioning/packages', () => { + const actual = jest.requireActual('../../lib/versioning/packages'); + return { + ...actual, + fetchPackageInfo: (name: string) => mockFetchPackageInfo(name), }; }); @@ -105,6 +114,14 @@ const lockfileMockResult = `${HEADER} `; describe('bump', () => { + beforeEach(() => { + mockFetchPackageInfo.mockImplementation(async name => ({ + name: name, + 'dist-tags': { + latest: REGISTRY_VERSIONS[name], + }, + })); + }); afterEach(() => { mockFs.restore(); jest.resetAllMocks(); @@ -138,17 +155,6 @@ describe('bump', () => { jest .spyOn(paths, 'resolveTargetRoot') .mockImplementation((...path) => resolvePath('/', ...path)); - jest.spyOn(runObj, 'runPlain').mockImplementation(async (...[, , , name]) => - JSON.stringify({ - type: 'inspect', - data: { - name: name, - 'dist-tags': { - latest: REGISTRY_VERSIONS[name], - }, - }, - }), - ); jest.spyOn(runObj, 'run').mockResolvedValue(undefined); worker.use( rest.get( @@ -184,19 +190,10 @@ describe('bump', () => { 'Version bump complete!', ]); - expect(runObj.runPlain).toHaveBeenCalledTimes(3); - expect(runObj.runPlain).toHaveBeenCalledWith( - 'yarn', - 'info', - '--json', - '@backstage/core', - ); - expect(runObj.runPlain).toHaveBeenCalledWith( - 'yarn', - 'info', - '--json', - '@backstage/theme', - ); + expect(mockFetchPackageInfo).toHaveBeenCalledTimes(3); + expect(mockFetchPackageInfo).toHaveBeenCalledWith('@backstage/core'); + expect(mockFetchPackageInfo).toHaveBeenCalledWith('@backstage/core-api'); + expect(mockFetchPackageInfo).toHaveBeenCalledWith('@backstage/theme'); expect(runObj.run).toHaveBeenCalledTimes(1); expect(runObj.run).toHaveBeenCalledWith( @@ -251,17 +248,6 @@ describe('bump', () => { jest .spyOn(paths, 'resolveTargetRoot') .mockImplementation((...path) => resolvePath('/', ...path)); - jest.spyOn(runObj, 'runPlain').mockImplementation(async (...[, , , name]) => - JSON.stringify({ - type: 'inspect', - data: { - name: name, - 'dist-tags': { - latest: REGISTRY_VERSIONS[name], - }, - }, - }), - ); jest.spyOn(runObj, 'run').mockResolvedValue(undefined); worker.use( rest.get( @@ -309,19 +295,9 @@ describe('bump', () => { 'Version bump complete!', ]); - expect(runObj.runPlain).toHaveBeenCalledTimes(2); - expect(runObj.runPlain).toHaveBeenCalledWith( - 'yarn', - 'info', - '--json', - '@backstage/core', - ); - expect(runObj.runPlain).not.toHaveBeenCalledWith( - 'yarn', - 'info', - '--json', - '@backstage/theme', - ); + expect(mockFetchPackageInfo).toHaveBeenCalledTimes(2); + expect(mockFetchPackageInfo).toHaveBeenCalledWith('@backstage/core'); + expect(mockFetchPackageInfo).not.toHaveBeenCalledWith('@backstage/theme'); expect(runObj.run).toHaveBeenCalledTimes(1); expect(runObj.run).toHaveBeenCalledWith( @@ -372,17 +348,6 @@ describe('bump', () => { }, }), }); - jest.spyOn(runObj, 'runPlain').mockImplementation(async (...[, , , name]) => - JSON.stringify({ - type: 'inspect', - data: { - name: name, - 'dist-tags': { - latest: REGISTRY_VERSIONS[name], - }, - }, - }), - ); jest .spyOn(paths, 'resolveTargetRoot') .mockImplementation((...path) => resolvePath('/', ...path)); @@ -480,17 +445,6 @@ describe('bump', () => { jest .spyOn(paths, 'resolveTargetRoot') .mockImplementation((...path) => resolvePath('/', ...path)); - jest.spyOn(runObj, 'runPlain').mockImplementation(async (...[, , , name]) => - JSON.stringify({ - type: 'inspect', - data: { - name: name, - 'dist-tags': { - latest: REGISTRY_VERSIONS[name], - }, - }, - }), - ); jest.spyOn(runObj, 'run').mockResolvedValue(undefined); worker.use( rest.get( @@ -614,17 +568,6 @@ describe('bump', () => { jest .spyOn(paths, 'resolveTargetRoot') .mockImplementation((...path) => resolvePath('/', ...path)); - jest.spyOn(runObj, 'runPlain').mockImplementation(async (...[, , , name]) => - JSON.stringify({ - type: 'inspect', - data: { - name: name, - 'dist-tags': { - latest: REGISTRY_VERSIONS[name], - }, - }, - }), - ); jest.spyOn(runObj, 'run').mockResolvedValue(undefined); worker.use( rest.get( @@ -672,19 +615,9 @@ describe('bump', () => { 'Version bump complete!', ]); - expect(runObj.runPlain).toHaveBeenCalledTimes(5); - expect(runObj.runPlain).toHaveBeenCalledWith( - 'yarn', - 'info', - '--json', - '@backstage/core', - ); - expect(runObj.runPlain).toHaveBeenCalledWith( - 'yarn', - 'info', - '--json', - '@backstage/theme', - ); + expect(mockFetchPackageInfo).toHaveBeenCalledTimes(5); + expect(mockFetchPackageInfo).toHaveBeenCalledWith('@backstage/core'); + expect(mockFetchPackageInfo).toHaveBeenCalledWith('@backstage/theme'); expect(runObj.run).toHaveBeenCalledTimes(1); expect(runObj.run).toHaveBeenCalledWith( @@ -743,7 +676,7 @@ describe('bump', () => { jest .spyOn(paths, 'resolveTargetRoot') .mockImplementation((...path) => resolvePath('/', ...path)); - jest.spyOn(runObj, 'runPlain').mockImplementation(async () => ''); + mockFetchPackageInfo.mockRejectedValue(new NotFoundError('Nope')); jest.spyOn(runObj, 'run').mockResolvedValue(undefined); worker.use( rest.get( diff --git a/packages/cli/src/lib/run.ts b/packages/cli/src/lib/run.ts index 4efb791c30..1ef25cae62 100644 --- a/packages/cli/src/lib/run.ts +++ b/packages/cli/src/lib/run.ts @@ -25,7 +25,7 @@ import { promisify } from 'util'; import { LogFunc } from './logging'; import { assertError, ForwardedError } from '@backstage/errors'; -const execFile = promisify(execFileCb); +export const execFile = promisify(execFileCb); type SpawnOptionsPartialEnv = Omit & { env?: Partial; diff --git a/packages/cli/src/lib/versioning/packages.test.ts b/packages/cli/src/lib/versioning/packages.test.ts index 975be74abd..5a255532f9 100644 --- a/packages/cli/src/lib/versioning/packages.test.ts +++ b/packages/cli/src/lib/versioning/packages.test.ts @@ -17,13 +17,20 @@ import mockFs from 'mock-fs'; import path from 'path'; import * as runObj from '../run'; +import * as yarn from '../yarn'; import { fetchPackageInfo, mapDependencies } from './packages'; import { NotFoundError } from '../errors'; jest.mock('../run', () => { return { run: jest.fn(), - runPlain: jest.fn(), + execFile: jest.fn(), + }; +}); + +jest.mock('../yarn', () => { + return { + detectYarnVersion: jest.fn(), }; }); @@ -32,24 +39,55 @@ describe('fetchPackageInfo', () => { jest.resetAllMocks(); }); - it('should forward info', async () => { - jest - .spyOn(runObj, 'runPlain') - .mockResolvedValue(`{"type":"inspect","data":{"the":"data"}}`); + it('should forward info for yarn classic', async () => { + jest.spyOn(runObj, 'execFile').mockResolvedValue({ + stdout: `{"type":"inspect","data":{"the":"data"}}`, + stderr: '', + }); + jest.spyOn(yarn, 'detectYarnVersion').mockResolvedValue('classic'); await expect(fetchPackageInfo('my-package')).resolves.toEqual({ the: 'data', }); - expect(runObj.runPlain).toHaveBeenCalledWith( + expect(runObj.execFile).toHaveBeenCalledWith( 'yarn', - 'info', - '--json', - 'my-package', + ['info', '--json', 'my-package'], + { shell: true }, ); }); - it('should throw if no info', async () => { - jest.spyOn(runObj, 'runPlain').mockResolvedValue(''); + it('should forward info for yarn berry', async () => { + jest + .spyOn(runObj, 'execFile') + .mockResolvedValue({ stdout: `{"the":"data"}`, stderr: '' }); + jest.spyOn(yarn, 'detectYarnVersion').mockResolvedValue('berry'); + + await expect(fetchPackageInfo('my-package')).resolves.toEqual({ + the: 'data', + }); + expect(runObj.execFile).toHaveBeenCalledWith( + 'yarn', + ['npm', 'info', '--json', 'my-package'], + { shell: true }, + ); + }); + + it('should throw if no info with yarn classic', async () => { + jest + .spyOn(runObj, 'execFile') + .mockResolvedValue({ stdout: '', stderr: '' }); + jest.spyOn(yarn, 'detectYarnVersion').mockResolvedValue('classic'); + + await expect(fetchPackageInfo('my-package')).rejects.toThrow( + new NotFoundError(`No package information found for package my-package`), + ); + }); + + it('should throw if no info with yarn berry', async () => { + jest + .spyOn(runObj, 'execFile') + .mockRejectedValue({ stdout: 'bla bla bla Response Code: 404 bla bla' }); + jest.spyOn(yarn, 'detectYarnVersion').mockResolvedValue('berry'); await expect(fetchPackageInfo('my-package')).rejects.toThrow( new NotFoundError(`No package information found for package my-package`), diff --git a/packages/cli/src/lib/versioning/packages.ts b/packages/cli/src/lib/versioning/packages.ts index ed7266a692..70229b6fed 100644 --- a/packages/cli/src/lib/versioning/packages.ts +++ b/packages/cli/src/lib/versioning/packages.ts @@ -13,10 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import minimatch from 'minimatch'; import { getPackages } from '@manypkg/get-packages'; -import { runPlain } from '../../lib/run'; import { NotFoundError } from '../errors'; +import { detectYarnVersion } from '../yarn'; +import { execFile } from '../run'; const DEP_TYPES = [ 'dependencies', @@ -48,18 +50,45 @@ type PkgVersionInfo = { export async function fetchPackageInfo( name: string, ): Promise { - const output = await runPlain('yarn', 'info', '--json', name); + const yarnVersion = await detectYarnVersion(); - if (!output) { - throw new NotFoundError(`No package information found for package ${name}`); + const cmd = yarnVersion === 'classic' ? ['info'] : ['npm', 'info']; + try { + const { stdout: output } = await execFile( + 'yarn', + [...cmd, '--json', name], + { shell: true }, + ); + + if (!output) { + throw new NotFoundError( + `No package information found for package ${name}`, + ); + } + + if (yarnVersion === 'berry') { + return JSON.parse(output) as YarnInfoInspectData; + } + + const info = JSON.parse(output) as YarnInfo; + if (info.type !== 'inspect') { + throw new Error(`Received unknown yarn info for ${name}, ${output}`); + } + + return info.data as YarnInfoInspectData; + } catch (error) { + if (yarnVersion === 'classic') { + throw error; + } + + if (error?.stdout.includes('Response Code: 404')) { + throw new NotFoundError( + `No package information found for package ${name}`, + ); + } + + throw error; } - - const info = JSON.parse(output) as YarnInfo; - if (info.type !== 'inspect') { - throw new Error(`Received unknown yarn info for ${name}, ${output}`); - } - - return info.data as YarnInfoInspectData; } /** Map all dependencies in the repo as dependency => dependents */ diff --git a/packages/cli/src/lib/yarn.ts b/packages/cli/src/lib/yarn.ts new file mode 100644 index 0000000000..b6c0383bc2 --- /dev/null +++ b/packages/cli/src/lib/yarn.ts @@ -0,0 +1,49 @@ +/* + * 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 { assertError, ForwardedError } from '@backstage/errors'; +import { execFile as execFileCb } from 'child_process'; +import { promisify } from 'util'; + +const execFile = promisify(execFileCb); + +const versions = new Map>(); + +export function detectYarnVersion(dir?: string): Promise<'classic' | 'berry'> { + const cwd = dir ?? process.cwd(); + if (versions.has(cwd)) { + return versions.get(cwd)!; + } + + const promise = Promise.resolve().then(async () => { + try { + const { stdout } = await execFile('yarn', ['--version'], { + shell: true, + cwd, + }); + return stdout.trim().startsWith('1.') ? 'classic' : 'berry'; + } catch (error) { + assertError(error); + if ('stderr' in error) { + process.stderr.write(error.stderr as Buffer); + } + throw new ForwardedError('Failed to determine yarn version', error); + } + }); + + versions.set(cwd, promise); + return promise; +} From f95ceb273751456e2d2f8e59272d689929f13dec Mon Sep 17 00:00:00 2001 From: Alex Crome Date: Thu, 8 Sep 2022 17:36:28 +0100 Subject: [PATCH 068/110] PR Feedback Signed-off-by: Alex Crome --- .changeset/sweet-grapes-explain.md | 2 +- .../SingleInstanceGithubCredentialsProvider.ts | 18 +++++++++++------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/.changeset/sweet-grapes-explain.md b/.changeset/sweet-grapes-explain.md index 3b75b8849d..014fbb3d41 100644 --- a/.changeset/sweet-grapes-explain.md +++ b/.changeset/sweet-grapes-explain.md @@ -1,5 +1,5 @@ --- -'@backstage/integration': minor +'@backstage/integration': patch --- Improved caching around github app tokens. diff --git a/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts b/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts index aeaa0f5e04..02f050f69f 100644 --- a/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts +++ b/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts @@ -44,22 +44,26 @@ class Cache { repo: string | undefined, supplier: () => Promise, ): Promise<{ accessToken: string }> { - let ownerData = this.tokenCache.get(owner); + let existingInstallationData = this.tokenCache.get(owner); - if (!ownerData || this.isExpired(ownerData.expiresAt)) { - ownerData = await supplier(); + if ( + !existingInstallationData || + this.isExpired(existingInstallationData.expiresAt) + ) { + existingInstallationData = await supplier(); // Allow 10 minutes grace to account for clock skew - ownerData.expiresAt = ownerData.expiresAt.minus({ minutes: 10 }); - this.tokenCache.set(owner, ownerData); + existingInstallationData.expiresAt = + existingInstallationData.expiresAt.minus({ minutes: 10 }); + this.tokenCache.set(owner, existingInstallationData); } - if (!this.appliesToRepo(ownerData, repo)) { + if (!this.appliesToRepo(existingInstallationData, repo)) { throw new Error( `The Backstage GitHub application used in the ${owner} organization does not have access to a repository with the name ${repo}`, ); } - return { accessToken: ownerData.token }; + return { accessToken: existingInstallationData.token }; } private isExpired = (date: DateTime) => DateTime.local() > date; From a68c0b3f94bd5d1a2b64be6110627b8c908aa479 Mon Sep 17 00:00:00 2001 From: Alex Crome Date: Thu, 8 Sep 2022 18:41:09 +0100 Subject: [PATCH 069/110] Fix potentially flakey expiration test by making sure the record has less than 10 mins remaining, rather than exactly 10 mins Signed-off-by: Alex Crome --- .../github/SingleInstanceGithubCredentialsProvider.test.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.test.ts b/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.test.ts index d9b2a4e749..a1544fbc68 100644 --- a/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.test.ts +++ b/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.test.ts @@ -434,7 +434,7 @@ describe('SingleInstanceGithubCredentialsProvider tests', () => { ); }); - it('should expire access token cache 10 mins before token expires', async () => { + it('should expire access token cache when less than 10 mins before token expires', async () => { octokit.apps.listInstallations.mockReturnValue({ headers: { etag: '123', @@ -452,7 +452,9 @@ describe('SingleInstanceGithubCredentialsProvider tests', () => { octokit.apps.createInstallationAccessToken.mockReturnValue({ data: { - expires_at: DateTime.local().plus({ minutes: 10 }).toString(), + expires_at: DateTime.local() + .plus({ minutes: 9, seconds: 59, milliseconds: 999 }) + .toString(), token: 'secret_token', }, } as RestEndpointMethodTypes['apps']['createInstallationAccessToken']['response']); From 6522e459aae698f2e1da1c04ac3cc25d387e5ca7 Mon Sep 17 00:00:00 2001 From: Phil Kuang Date: Thu, 8 Sep 2022 14:45:09 -0400 Subject: [PATCH 070/110] feat(EntityTagPicker): support displaying and ordering by counts Signed-off-by: Phil Kuang --- .changeset/lucky-ads-worry.md | 5 +++ plugins/scaffolder/api-report.md | 4 ++ .../EntityTagsPicker/EntityTagsPicker.tsx | 40 +++++++++++++------ 3 files changed, 37 insertions(+), 12 deletions(-) create mode 100644 .changeset/lucky-ads-worry.md diff --git a/.changeset/lucky-ads-worry.md b/.changeset/lucky-ads-worry.md new file mode 100644 index 0000000000..a7f749da17 --- /dev/null +++ b/.changeset/lucky-ads-worry.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +Support displaying and ordering by counts in `EntityTagPicker` field. Add the `showCounts` option to enable this. Also support configuring `helperText`. diff --git a/plugins/scaffolder/api-report.md b/plugins/scaffolder/api-report.md index d611309df3..9541098934 100644 --- a/plugins/scaffolder/api-report.md +++ b/plugins/scaffolder/api-report.md @@ -76,8 +76,12 @@ export const EntityTagsPickerFieldExtension: FieldExtensionComponent< // @public export interface EntityTagsPickerUiOptions { + // (undocumented) + helperText?: string; // (undocumented) kinds?: string[]; + // (undocumented) + showCounts?: boolean; } // @public diff --git a/plugins/scaffolder/src/components/fields/EntityTagsPicker/EntityTagsPicker.tsx b/plugins/scaffolder/src/components/fields/EntityTagsPicker/EntityTagsPicker.tsx index 5cf98cb8aa..c0e3aab436 100644 --- a/plugins/scaffolder/src/components/fields/EntityTagsPicker/EntityTagsPicker.tsx +++ b/plugins/scaffolder/src/components/fields/EntityTagsPicker/EntityTagsPicker.tsx @@ -16,8 +16,8 @@ import React, { useState } from 'react'; import useAsync from 'react-use/lib/useAsync'; import useEffectOnce from 'react-use/lib/useEffectOnce'; -import { GetEntitiesRequest } from '@backstage/catalog-client'; -import { Entity, makeValidator } from '@backstage/catalog-model'; +import { GetEntityFacetsRequest } from '@backstage/catalog-client'; +import { makeValidator } from '@backstage/catalog-model'; import { useApi } from '@backstage/core-plugin-api'; import { catalogApiRef } from '@backstage/plugin-catalog-react'; import { FormControl, TextField } from '@material-ui/core'; @@ -32,6 +32,8 @@ import { FieldExtensionComponentProps } from '../../../extensions'; */ export interface EntityTagsPickerUiOptions { kinds?: string[]; + showCounts?: boolean; + helperText?: string; } /** @@ -45,26 +47,34 @@ export const EntityTagsPicker = ( ) => { const { formData, onChange, uiSchema } = props; const catalogApi = useApi(catalogApiRef); + const [tagOptions, setTagOptions] = useState([]); const [inputValue, setInputValue] = useState(''); const [inputError, setInputError] = useState(false); const tagValidator = makeValidator().isValidTag; const kinds = uiSchema['ui:options']?.kinds; + const showCounts = uiSchema['ui:options']?.showCounts; + const helperText = uiSchema['ui:options']?.helperText; const { loading, value: existingTags } = useAsync(async () => { - const tagsRequest: GetEntitiesRequest = { fields: ['metadata.tags'] }; + const facet = 'metadata.tags'; + const tagsRequest: GetEntityFacetsRequest = { facets: [facet] }; if (kinds) { tagsRequest.filter = { kind: kinds }; } - const entities = await catalogApi.getEntities(tagsRequest); + const { facets } = await catalogApi.getEntityFacets(tagsRequest); - return [ - ...new Set( - entities.items - .flatMap((e: Entity) => e.metadata?.tags) - .filter(Boolean) as string[], + const tagFacets = Object.fromEntries( + facets[facet].map(({ value, count }) => [value, count]), + ); + + setTagOptions( + Object.keys(tagFacets).sort((a, b) => + showCounts ? tagFacets[b] - tagFacets[a] : a.localeCompare(b), ), - ].sort(); + ); + + return tagFacets; }); const setTags = (_: React.ChangeEvent<{}>, values: string[] | null) => { @@ -102,15 +112,21 @@ export const EntityTagsPicker = ( value={formData || []} inputValue={inputValue} loading={loading} - options={existingTags || []} + options={tagOptions} ChipProps={{ size: 'small' }} + renderOption={option => + showCounts ? `${option} (${existingTags?.[option]})` : option + } renderInput={params => ( setInputValue(e.target.value)} error={inputError} - helperText="Add any relevant tags, hit 'Enter' to add new tags. Valid format: [a-z0-9+#] separated by [-], at most 63 characters" + helperText={ + helperText ?? + "Add any relevant tags, hit 'Enter' to add new tags. Valid format: [a-z0-9+#] separated by [-], at most 63 characters" + } /> )} /> From 7f7c7f2033dd0b1aec46aa225e52c27797aba871 Mon Sep 17 00:00:00 2001 From: Joe Patterson Date: Fri, 9 Sep 2022 09:56:42 +1000 Subject: [PATCH 071/110] prettier again on changeset Signed-off-by: Joe Patterson --- .changeset/smart-sloths-search.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/smart-sloths-search.md b/.changeset/smart-sloths-search.md index 7404030515..542928debc 100644 --- a/.changeset/smart-sloths-search.md +++ b/.changeset/smart-sloths-search.md @@ -4,4 +4,4 @@ The auth0 integration is updated to use the `passport-auth0` library. The configuration under `auth.providers.auth0.\*` now supports an optional `audience` parameter; providing that allows you to connect to the correct API to get permissions, access tokens, and full profile information. -[What is an Audience](https://community.auth0.com/t/what-is-the-audience/71414) \ No newline at end of file +[What is an Audience](https://community.auth0.com/t/what-is-the-audience/71414) From b55966c460aabc2ddb23d1a12e19786bd32abb8b Mon Sep 17 00:00:00 2001 From: mufaddal motiwala Date: Fri, 9 Sep 2022 11:03:45 +0530 Subject: [PATCH 072/110] fix props Signed-off-by: mufaddal motiwala --- .../src/components/TaskPage/TaskErrors.tsx | 20 +++++++++++-------- .../src/components/TaskPage/TaskPage.tsx | 2 +- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/plugins/scaffolder/src/components/TaskPage/TaskErrors.tsx b/plugins/scaffolder/src/components/TaskPage/TaskErrors.tsx index 3d82bfc5a3..4f8ce974c8 100644 --- a/plugins/scaffolder/src/components/TaskPage/TaskErrors.tsx +++ b/plugins/scaffolder/src/components/TaskPage/TaskErrors.tsx @@ -14,21 +14,25 @@ * limitations under the License. */ import { Box } from '@material-ui/core'; -import React from 'react'; +import React, { useEffect, useRef } from 'react'; import { DismissableBanner } from '@backstage/core-components'; -import { TaskStream } from '../hooks/useEventStream'; -type TaskPageLinksProps = { - taskStream: TaskStream; +type TaskErrorsProps = { + error?: Error; }; -export const TaskErrors = ({ taskStream }: TaskPageLinksProps) => { - return taskStream.error ? ( +export const TaskErrors = ({ error }: TaskErrorsProps) => { + const id = useRef(''); + + useEffect(() => { + id.current = String(Math.random()); + }, [error]); + return error ? ( ) : null; diff --git a/plugins/scaffolder/src/components/TaskPage/TaskPage.tsx b/plugins/scaffolder/src/components/TaskPage/TaskPage.tsx index 4fa5968216..0267c58fe1 100644 --- a/plugins/scaffolder/src/components/TaskPage/TaskPage.tsx +++ b/plugins/scaffolder/src/components/TaskPage/TaskPage.tsx @@ -357,7 +357,7 @@ export const TaskPage = ({ loadingText }: TaskPageProps) => { {!currentStepId && }

    - +
    From 4f88489770084e22f0820336d77b7b03c83a0fdf Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 9 Sep 2022 06:59:43 +0000 Subject: [PATCH 073/110] chore(deps): update dependency canvas to v2.10.1 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index c1728d70b0..e0c57482ef 100644 --- a/yarn.lock +++ b/yarn.lock @@ -18131,14 +18131,14 @@ __metadata: linkType: hard "canvas@npm:^2.6.1": - version: 2.10.0 - resolution: "canvas@npm:2.10.0" + version: 2.10.1 + resolution: "canvas@npm:2.10.1" dependencies: "@mapbox/node-pre-gyp": ^1.0.0 nan: ^2.15.0 node-gyp: latest simple-get: ^3.0.3 - checksum: bed0f61d51a6f5d721742776e2dd1203ad6ca2475e1177cfb7a6f9ed1d313372ab8b4aa5a6780c85d35e533e2400cb5f291be1a1d35a84fc71d6372cd4cdbc61 + checksum: 29b162a59df8c63e5591cae62711ab3cc3b0a078f260b39b4594b51c5bcb9baa597eff40b52f25bd788aceb81756a41097c2dd0c01cbc17ae4a15e873da44cdf languageName: node linkType: hard From 8ace73b579159a2077accd57197c07e5a4d31f1c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 9 Sep 2022 07:00:42 +0000 Subject: [PATCH 074/110] chore(deps): update dependency puppeteer to v17.1.3 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index c1728d70b0..b1f3cc567f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -33955,8 +33955,8 @@ __metadata: linkType: hard "puppeteer@npm:^17.0.0": - version: 17.1.1 - resolution: "puppeteer@npm:17.1.1" + version: 17.1.3 + resolution: "puppeteer@npm:17.1.3" dependencies: cross-fetch: 3.1.5 debug: 4.3.4 @@ -33969,7 +33969,7 @@ __metadata: tar-fs: 2.1.1 unbzip2-stream: 1.4.3 ws: 8.8.1 - checksum: 064537270ea5745186c87888252395bb0d06d3ae73b02a617856329501d21e2ce5d05c1ee307dc2e851f7d45a2185b9cddd44ec54106ffcba51e7a622bb6faeb + checksum: b4518956c661df4c37690d46b9c6744d42d59d01fe3764938b4b3af8de4c94ef11a9dfa6bc261798f5e5490c6dce4d4f555f05d42c735249683da3017faf4585 languageName: node linkType: hard From 978d691ed2b5adfafdf9e3dad659f4f4c2d07349 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Tunkl?= Date: Fri, 9 Sep 2022 09:53:09 +0200 Subject: [PATCH 075/110] Update of api-report.md after change of humanize public api MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomáš Tunkl --- plugins/catalog-react/api-report.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/plugins/catalog-react/api-report.md b/plugins/catalog-react/api-report.md index 5232c49150..a5567aa9c8 100644 --- a/plugins/catalog-react/api-report.md +++ b/plugins/catalog-react/api-report.md @@ -436,11 +436,14 @@ export function getEntitySourceLocation( scmIntegrationsApi: ScmIntegrationRegistry, ): EntitySourceLocation | undefined; -// @public (undocumented) +// Warning: (tsdoc-undefined-tag) The TSDoc tag "@property" is not defined in this configuration +// +// @public export function humanizeEntityRef( entityRef: Entity | CompoundEntityRef, opts?: { defaultKind?: string; + defaultNamespace?: string | boolean; }, ): string; From 007204a8befe871f5de7ce62bd5ffcce820bd68f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Tunkl?= Date: Fri, 9 Sep 2022 11:03:30 +0200 Subject: [PATCH 076/110] Update of api-report.md and humanize documentation. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomáš Tunkl --- plugins/catalog-react/api-report.md | 4 +--- .../catalog-react/src/components/EntityRefLink/humanize.ts | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/plugins/catalog-react/api-report.md b/plugins/catalog-react/api-report.md index a5567aa9c8..b2b098ec68 100644 --- a/plugins/catalog-react/api-report.md +++ b/plugins/catalog-react/api-report.md @@ -436,9 +436,7 @@ export function getEntitySourceLocation( scmIntegrationsApi: ScmIntegrationRegistry, ): EntitySourceLocation | undefined; -// Warning: (tsdoc-undefined-tag) The TSDoc tag "@property" is not defined in this configuration -// -// @public +// @public (undocumented) export function humanizeEntityRef( entityRef: Entity | CompoundEntityRef, opts?: { diff --git a/plugins/catalog-react/src/components/EntityRefLink/humanize.ts b/plugins/catalog-react/src/components/EntityRefLink/humanize.ts index 4a53ace1e3..358b6a5851 100644 --- a/plugins/catalog-react/src/components/EntityRefLink/humanize.ts +++ b/plugins/catalog-react/src/components/EntityRefLink/humanize.ts @@ -21,7 +21,7 @@ import { } from '@backstage/catalog-model'; /** - * @property defaultNamespace - if set to false then namespace is never omitted, + * @param defaultNamespace - if set to false then namespace is never omitted, * if set to string which matches namespace of entity then omitted * * @public */ From b0f96f085f0ab3b22e0a3b348a59e47a4d8bdb33 Mon Sep 17 00:00:00 2001 From: Martin Ehrnst Date: Fri, 9 Sep 2022 12:59:31 +0200 Subject: [PATCH 077/110] Update ADOPTERS.md add vipps to adopters Signed-off-by: Martin Ehrnst --- ADOPTERS.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ADOPTERS.md b/ADOPTERS.md index 527a4d7a98..6ea4d5dacb 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -211,3 +211,5 @@ _You can do this by using the [Adopter form](https://form.typeform.com/to/zcOaKi | [Stone](https://stone.com.br/) | [Levy Fialho](mailto:lfialho@stone.com.br) | We're using Backstage as our Credit Team Developer Portal and microservices catalog for mapping ownership. We are also using mkdocs for microservices documentation. | | [REI](https://www.rei.com/) | [Jen Evans](mailto:jenevan@rei.com) | Developer portal focused on an enterprise-wide app catalog to track ownership and surface APIs. | | [next](https://next.me) | [Devan Jeronimo Nack](mailto:devan.j.nack@next.me), [Everson Crusara](mailto:everson.crusara@next.me), [Thiago Carneiro da Silva](mailto:thiagoc.silva@next.me) | We are building our Internal Developer Portal using Backstage to improve developer's experience by centralizing our services catalog and identifing microservices' ownership. Also we are going to improve Technical Documentation and speed up development using software templates to help squads in creation and deployment of new microservices. | +| [Vipps](https://vipps.no) | [Martin Ehrnst](https://github.com/ehrnst) | Vipps use backstage for our service catalog, documentation, and developer portal. Using templates we are able to simplify the developer experience when deploying new services to our platform. | + From d527faf591d4ebddb1f9fad143ab61542b5514df Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 9 Sep 2022 11:18:42 +0000 Subject: [PATCH 078/110] fix(deps): update dependency @google-cloud/container to v4.1.2 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index b1f3cc567f..a2b69d78f9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8093,11 +8093,11 @@ __metadata: linkType: hard "@google-cloud/container@npm:^4.0.0": - version: 4.1.1 - resolution: "@google-cloud/container@npm:4.1.1" + version: 4.1.2 + resolution: "@google-cloud/container@npm:4.1.2" dependencies: google-gax: ^3.3.0 - checksum: 85c124163be7300c57b1f35323ea48a25c398bf072497a3e4a5d9117fe44547a63071dced681dbe8d2bd1a0997588d36c2428900184b030daf29b0f87ec7b09c + checksum: deb1b88732b2dd3dba5f7bea48fd672636fedb0d3bd894e29c8d097e087de3bfd30b53668e3686f8d879b3312be2e86d5a65cd1ba6bf630ba1c2bbe892e8bbb8 languageName: node linkType: hard From bf329f41026f1fa53d87cf5dba8874d4305e80b3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 9 Sep 2022 14:45:55 +0000 Subject: [PATCH 079/110] fix(deps): update dependency @swc/core to v1.2.249 Signed-off-by: Renovate Bot --- storybook/yarn.lock | 110 ++++++++++++++++++++++---------------------- yarn.lock | 110 ++++++++++++++++++++++---------------------- 2 files changed, 110 insertions(+), 110 deletions(-) diff --git a/storybook/yarn.lock b/storybook/yarn.lock index 3592f58d4b..0bcfa0c48a 100644 --- a/storybook/yarn.lock +++ b/storybook/yarn.lock @@ -2866,126 +2866,126 @@ __metadata: languageName: node linkType: hard -"@swc/core-android-arm-eabi@npm:1.2.247": - version: 1.2.247 - resolution: "@swc/core-android-arm-eabi@npm:1.2.247" +"@swc/core-android-arm-eabi@npm:1.2.249": + version: 1.2.249 + resolution: "@swc/core-android-arm-eabi@npm:1.2.249" dependencies: "@swc/wasm": 1.2.122 conditions: os=android & cpu=arm languageName: node linkType: hard -"@swc/core-android-arm64@npm:1.2.247": - version: 1.2.247 - resolution: "@swc/core-android-arm64@npm:1.2.247" +"@swc/core-android-arm64@npm:1.2.249": + version: 1.2.249 + resolution: "@swc/core-android-arm64@npm:1.2.249" dependencies: "@swc/wasm": 1.2.130 conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-arm64@npm:1.2.247": - version: 1.2.247 - resolution: "@swc/core-darwin-arm64@npm:1.2.247" +"@swc/core-darwin-arm64@npm:1.2.249": + version: 1.2.249 + resolution: "@swc/core-darwin-arm64@npm:1.2.249" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-x64@npm:1.2.247": - version: 1.2.247 - resolution: "@swc/core-darwin-x64@npm:1.2.247" +"@swc/core-darwin-x64@npm:1.2.249": + version: 1.2.249 + resolution: "@swc/core-darwin-x64@npm:1.2.249" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@swc/core-freebsd-x64@npm:1.2.247": - version: 1.2.247 - resolution: "@swc/core-freebsd-x64@npm:1.2.247" +"@swc/core-freebsd-x64@npm:1.2.249": + version: 1.2.249 + resolution: "@swc/core-freebsd-x64@npm:1.2.249" dependencies: "@swc/wasm": 1.2.130 conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@swc/core-linux-arm-gnueabihf@npm:1.2.247": - version: 1.2.247 - resolution: "@swc/core-linux-arm-gnueabihf@npm:1.2.247" +"@swc/core-linux-arm-gnueabihf@npm:1.2.249": + version: 1.2.249 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.2.249" dependencies: "@swc/wasm": 1.2.130 conditions: os=linux & cpu=arm languageName: node linkType: hard -"@swc/core-linux-arm64-gnu@npm:1.2.247": - version: 1.2.247 - resolution: "@swc/core-linux-arm64-gnu@npm:1.2.247" +"@swc/core-linux-arm64-gnu@npm:1.2.249": + version: 1.2.249 + resolution: "@swc/core-linux-arm64-gnu@npm:1.2.249" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-arm64-musl@npm:1.2.247": - version: 1.2.247 - resolution: "@swc/core-linux-arm64-musl@npm:1.2.247" +"@swc/core-linux-arm64-musl@npm:1.2.249": + version: 1.2.249 + resolution: "@swc/core-linux-arm64-musl@npm:1.2.249" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@swc/core-linux-x64-gnu@npm:1.2.247": - version: 1.2.247 - resolution: "@swc/core-linux-x64-gnu@npm:1.2.247" +"@swc/core-linux-x64-gnu@npm:1.2.249": + version: 1.2.249 + resolution: "@swc/core-linux-x64-gnu@npm:1.2.249" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-x64-musl@npm:1.2.247": - version: 1.2.247 - resolution: "@swc/core-linux-x64-musl@npm:1.2.247" +"@swc/core-linux-x64-musl@npm:1.2.249": + version: 1.2.249 + resolution: "@swc/core-linux-x64-musl@npm:1.2.249" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@swc/core-win32-arm64-msvc@npm:1.2.247": - version: 1.2.247 - resolution: "@swc/core-win32-arm64-msvc@npm:1.2.247" +"@swc/core-win32-arm64-msvc@npm:1.2.249": + version: 1.2.249 + resolution: "@swc/core-win32-arm64-msvc@npm:1.2.249" dependencies: "@swc/wasm": 1.2.130 conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@swc/core-win32-ia32-msvc@npm:1.2.247": - version: 1.2.247 - resolution: "@swc/core-win32-ia32-msvc@npm:1.2.247" +"@swc/core-win32-ia32-msvc@npm:1.2.249": + version: 1.2.249 + resolution: "@swc/core-win32-ia32-msvc@npm:1.2.249" dependencies: "@swc/wasm": 1.2.130 conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@swc/core-win32-x64-msvc@npm:1.2.247": - version: 1.2.247 - resolution: "@swc/core-win32-x64-msvc@npm:1.2.247" +"@swc/core-win32-x64-msvc@npm:1.2.249": + version: 1.2.249 + resolution: "@swc/core-win32-x64-msvc@npm:1.2.249" conditions: os=win32 & cpu=x64 languageName: node linkType: hard "@swc/core@npm:^1.2.239": - version: 1.2.247 - resolution: "@swc/core@npm:1.2.247" + version: 1.2.249 + resolution: "@swc/core@npm:1.2.249" dependencies: - "@swc/core-android-arm-eabi": 1.2.247 - "@swc/core-android-arm64": 1.2.247 - "@swc/core-darwin-arm64": 1.2.247 - "@swc/core-darwin-x64": 1.2.247 - "@swc/core-freebsd-x64": 1.2.247 - "@swc/core-linux-arm-gnueabihf": 1.2.247 - "@swc/core-linux-arm64-gnu": 1.2.247 - "@swc/core-linux-arm64-musl": 1.2.247 - "@swc/core-linux-x64-gnu": 1.2.247 - "@swc/core-linux-x64-musl": 1.2.247 - "@swc/core-win32-arm64-msvc": 1.2.247 - "@swc/core-win32-ia32-msvc": 1.2.247 - "@swc/core-win32-x64-msvc": 1.2.247 + "@swc/core-android-arm-eabi": 1.2.249 + "@swc/core-android-arm64": 1.2.249 + "@swc/core-darwin-arm64": 1.2.249 + "@swc/core-darwin-x64": 1.2.249 + "@swc/core-freebsd-x64": 1.2.249 + "@swc/core-linux-arm-gnueabihf": 1.2.249 + "@swc/core-linux-arm64-gnu": 1.2.249 + "@swc/core-linux-arm64-musl": 1.2.249 + "@swc/core-linux-x64-gnu": 1.2.249 + "@swc/core-linux-x64-musl": 1.2.249 + "@swc/core-win32-arm64-msvc": 1.2.249 + "@swc/core-win32-ia32-msvc": 1.2.249 + "@swc/core-win32-x64-msvc": 1.2.249 dependenciesMeta: "@swc/core-android-arm-eabi": optional: true @@ -3015,7 +3015,7 @@ __metadata: optional: true bin: swcx: run_swcx.js - checksum: 8ad850c5637405473cb7680865c0b1bdd9e955c0f32e86e6564d43c6a3fb0941b69d7ca152b661694e614530c69fe9824f32d10b606564187730d1d146f62805 + checksum: c47f17fefccd94fb7be3787e832f3e3fd62c07e22f8bf566435bd1de032efd9fdefb4a64e0eefd684a9a24902509a235afeacb5ed93e03512fa09064bf1e1268 languageName: node linkType: hard diff --git a/yarn.lock b/yarn.lock index f4c0b81d8c..350e067b4a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13048,126 +13048,126 @@ __metadata: languageName: node linkType: hard -"@swc/core-android-arm-eabi@npm:1.2.247": - version: 1.2.247 - resolution: "@swc/core-android-arm-eabi@npm:1.2.247" +"@swc/core-android-arm-eabi@npm:1.2.249": + version: 1.2.249 + resolution: "@swc/core-android-arm-eabi@npm:1.2.249" dependencies: "@swc/wasm": 1.2.122 conditions: os=android & cpu=arm languageName: node linkType: hard -"@swc/core-android-arm64@npm:1.2.247": - version: 1.2.247 - resolution: "@swc/core-android-arm64@npm:1.2.247" +"@swc/core-android-arm64@npm:1.2.249": + version: 1.2.249 + resolution: "@swc/core-android-arm64@npm:1.2.249" dependencies: "@swc/wasm": 1.2.130 conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-arm64@npm:1.2.247": - version: 1.2.247 - resolution: "@swc/core-darwin-arm64@npm:1.2.247" +"@swc/core-darwin-arm64@npm:1.2.249": + version: 1.2.249 + resolution: "@swc/core-darwin-arm64@npm:1.2.249" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-x64@npm:1.2.247": - version: 1.2.247 - resolution: "@swc/core-darwin-x64@npm:1.2.247" +"@swc/core-darwin-x64@npm:1.2.249": + version: 1.2.249 + resolution: "@swc/core-darwin-x64@npm:1.2.249" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@swc/core-freebsd-x64@npm:1.2.247": - version: 1.2.247 - resolution: "@swc/core-freebsd-x64@npm:1.2.247" +"@swc/core-freebsd-x64@npm:1.2.249": + version: 1.2.249 + resolution: "@swc/core-freebsd-x64@npm:1.2.249" dependencies: "@swc/wasm": 1.2.130 conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@swc/core-linux-arm-gnueabihf@npm:1.2.247": - version: 1.2.247 - resolution: "@swc/core-linux-arm-gnueabihf@npm:1.2.247" +"@swc/core-linux-arm-gnueabihf@npm:1.2.249": + version: 1.2.249 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.2.249" dependencies: "@swc/wasm": 1.2.130 conditions: os=linux & cpu=arm languageName: node linkType: hard -"@swc/core-linux-arm64-gnu@npm:1.2.247": - version: 1.2.247 - resolution: "@swc/core-linux-arm64-gnu@npm:1.2.247" +"@swc/core-linux-arm64-gnu@npm:1.2.249": + version: 1.2.249 + resolution: "@swc/core-linux-arm64-gnu@npm:1.2.249" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-arm64-musl@npm:1.2.247": - version: 1.2.247 - resolution: "@swc/core-linux-arm64-musl@npm:1.2.247" +"@swc/core-linux-arm64-musl@npm:1.2.249": + version: 1.2.249 + resolution: "@swc/core-linux-arm64-musl@npm:1.2.249" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@swc/core-linux-x64-gnu@npm:1.2.247": - version: 1.2.247 - resolution: "@swc/core-linux-x64-gnu@npm:1.2.247" +"@swc/core-linux-x64-gnu@npm:1.2.249": + version: 1.2.249 + resolution: "@swc/core-linux-x64-gnu@npm:1.2.249" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-x64-musl@npm:1.2.247": - version: 1.2.247 - resolution: "@swc/core-linux-x64-musl@npm:1.2.247" +"@swc/core-linux-x64-musl@npm:1.2.249": + version: 1.2.249 + resolution: "@swc/core-linux-x64-musl@npm:1.2.249" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@swc/core-win32-arm64-msvc@npm:1.2.247": - version: 1.2.247 - resolution: "@swc/core-win32-arm64-msvc@npm:1.2.247" +"@swc/core-win32-arm64-msvc@npm:1.2.249": + version: 1.2.249 + resolution: "@swc/core-win32-arm64-msvc@npm:1.2.249" dependencies: "@swc/wasm": 1.2.130 conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@swc/core-win32-ia32-msvc@npm:1.2.247": - version: 1.2.247 - resolution: "@swc/core-win32-ia32-msvc@npm:1.2.247" +"@swc/core-win32-ia32-msvc@npm:1.2.249": + version: 1.2.249 + resolution: "@swc/core-win32-ia32-msvc@npm:1.2.249" dependencies: "@swc/wasm": 1.2.130 conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@swc/core-win32-x64-msvc@npm:1.2.247": - version: 1.2.247 - resolution: "@swc/core-win32-x64-msvc@npm:1.2.247" +"@swc/core-win32-x64-msvc@npm:1.2.249": + version: 1.2.249 + resolution: "@swc/core-win32-x64-msvc@npm:1.2.249" conditions: os=win32 & cpu=x64 languageName: node linkType: hard "@swc/core@npm:^1.2.239": - version: 1.2.247 - resolution: "@swc/core@npm:1.2.247" + version: 1.2.249 + resolution: "@swc/core@npm:1.2.249" dependencies: - "@swc/core-android-arm-eabi": 1.2.247 - "@swc/core-android-arm64": 1.2.247 - "@swc/core-darwin-arm64": 1.2.247 - "@swc/core-darwin-x64": 1.2.247 - "@swc/core-freebsd-x64": 1.2.247 - "@swc/core-linux-arm-gnueabihf": 1.2.247 - "@swc/core-linux-arm64-gnu": 1.2.247 - "@swc/core-linux-arm64-musl": 1.2.247 - "@swc/core-linux-x64-gnu": 1.2.247 - "@swc/core-linux-x64-musl": 1.2.247 - "@swc/core-win32-arm64-msvc": 1.2.247 - "@swc/core-win32-ia32-msvc": 1.2.247 - "@swc/core-win32-x64-msvc": 1.2.247 + "@swc/core-android-arm-eabi": 1.2.249 + "@swc/core-android-arm64": 1.2.249 + "@swc/core-darwin-arm64": 1.2.249 + "@swc/core-darwin-x64": 1.2.249 + "@swc/core-freebsd-x64": 1.2.249 + "@swc/core-linux-arm-gnueabihf": 1.2.249 + "@swc/core-linux-arm64-gnu": 1.2.249 + "@swc/core-linux-arm64-musl": 1.2.249 + "@swc/core-linux-x64-gnu": 1.2.249 + "@swc/core-linux-x64-musl": 1.2.249 + "@swc/core-win32-arm64-msvc": 1.2.249 + "@swc/core-win32-ia32-msvc": 1.2.249 + "@swc/core-win32-x64-msvc": 1.2.249 dependenciesMeta: "@swc/core-android-arm-eabi": optional: true @@ -13197,7 +13197,7 @@ __metadata: optional: true bin: swcx: run_swcx.js - checksum: 8ad850c5637405473cb7680865c0b1bdd9e955c0f32e86e6564d43c6a3fb0941b69d7ca152b661694e614530c69fe9824f32d10b606564187730d1d146f62805 + checksum: c47f17fefccd94fb7be3787e832f3e3fd62c07e22f8bf566435bd1de032efd9fdefb4a64e0eefd684a9a24902509a235afeacb5ed93e03512fa09064bf1e1268 languageName: node linkType: hard From 8e598a1bc1576fb01c5623a148b9aaf0b5bb308d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 9 Sep 2022 14:46:45 +0000 Subject: [PATCH 080/110] fix(deps): update dependency @yarnpkg/parsers to v3.0.0-rc.18 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index f4c0b81d8c..d50db888eb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15870,12 +15870,12 @@ __metadata: linkType: hard "@yarnpkg/parsers@npm:^3.0.0-rc.4": - version: 3.0.0-rc.15 - resolution: "@yarnpkg/parsers@npm:3.0.0-rc.15" + version: 3.0.0-rc.18 + resolution: "@yarnpkg/parsers@npm:3.0.0-rc.18" dependencies: js-yaml: ^3.10.0 tslib: ^2.4.0 - checksum: 2c6044479b1a8b5716d1536fce306c3c1f1989e00be5b7072255d0378d8679eba3dd6e3a854e75d8f675ea98a9612e5fbb1c3aac973860e6d5089658d3abf1d7 + checksum: 73cc59cb2349ce78a376d6ad7953117360de9aff866f42329a3e957ebabbbd4cbd91bfe79e30aa3bf07f126af66b72c00a7fc733724ac93d7f46d420ba81beec languageName: node linkType: hard From 409f999595f128ef803cf05fb02d5f5bebd48c09 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 9 Sep 2022 15:38:06 +0000 Subject: [PATCH 081/110] fix(deps): update dependency core-js to v3.25.1 Signed-off-by: Renovate Bot --- yarn.lock | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/yarn.lock b/yarn.lock index d50db888eb..701a3f3229 100644 --- a/yarn.lock +++ b/yarn.lock @@ -19450,13 +19450,20 @@ __metadata: languageName: node linkType: hard -"core-js@npm:^3.4.1, core-js@npm:^3.6.5": +"core-js@npm:^3.4.1": version: 3.25.0 resolution: "core-js@npm:3.25.0" checksum: 5a72740bf5babaf2e6203da4c0e831a0b97c3fe6f21b4c1aa8601d3a927660a22128dd8f0e86ce84778c4e5372ab0fc03c7944afa7e215c7fb13b2c79d5d5504 languageName: node linkType: hard +"core-js@npm:^3.6.5": + version: 3.25.1 + resolution: "core-js@npm:3.25.1" + checksum: bfacb078e790913841e2d5008b9b6705ae56ed23f83c7f0ae08d330d874561012611089d53b71520105234ed0abba36f28d91b391514a16541a8c8d98c464239 + languageName: node + linkType: hard + "core-util-is@npm:1.0.2, core-util-is@npm:~1.0.0": version: 1.0.2 resolution: "core-util-is@npm:1.0.2" From c703978d53f03b8ae0c682d99b3f624f2dd0e109 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 9 Sep 2022 15:38:57 +0000 Subject: [PATCH 082/110] fix(deps): update dependency eslint-plugin-jest to v27.0.2 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index d50db888eb..93c0e08f49 100644 --- a/yarn.lock +++ b/yarn.lock @@ -21992,8 +21992,8 @@ __metadata: linkType: hard "eslint-plugin-jest@npm:^27.0.0": - version: 27.0.1 - resolution: "eslint-plugin-jest@npm:27.0.1" + version: 27.0.2 + resolution: "eslint-plugin-jest@npm:27.0.2" dependencies: "@typescript-eslint/utils": ^5.10.0 peerDependencies: @@ -22004,7 +22004,7 @@ __metadata: optional: true jest: optional: true - checksum: 269d4dc46bb925eb4c19106fd9e03775a863f53e05716628cc47777abc15887775ee47d73c4f8bdd98bb26b7462d8d8f654610bb2a367f8c97881204a2c3f42e + checksum: 0545568a1ddd14138f08015f5f1a99e08c0d5ef5d2f14a8e66c28c1b8296a541c1075e9660f637fcb71be01f2a709991937878fc96abc760c00efc768f4598c8 languageName: node linkType: hard From 229a1fa92716a384f67850cfe887bbfa91668f01 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 8 Sep 2022 15:46:16 +0200 Subject: [PATCH 083/110] backend-{plugin,app}-api: introduce service scopes and update registry to support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Fredrik Adelöw Co-authored-by: blam Co-authored-by: Johan Haals Signed-off-by: Patrik Oldsberg --- .../src/wiring/ServiceRegistry.test.ts | 155 +++++++-------- .../src/wiring/ServiceRegistry.ts | 185 ++++++++++++------ packages/backend-app-api/src/wiring/types.ts | 3 +- .../src/services/system/types.ts | 135 ++++++++----- 4 files changed, 284 insertions(+), 194 deletions(-) diff --git a/packages/backend-app-api/src/wiring/ServiceRegistry.test.ts b/packages/backend-app-api/src/wiring/ServiceRegistry.test.ts index a00f6c0b4b..ab709dcb77 100644 --- a/packages/backend-app-api/src/wiring/ServiceRegistry.test.ts +++ b/packages/backend-app-api/src/wiring/ServiceRegistry.test.ts @@ -21,28 +21,28 @@ import { } from '@backstage/backend-plugin-api'; import { ServiceRegistry } from './ServiceRegistry'; -const ref1 = createServiceRef<{ x: number; pluginId: string }>({ +const ref1 = createServiceRef<{ x: number }>({ id: '1', }); const sf1 = createServiceFactory({ service: ref1, deps: {}, factory: async () => { - return async pluginId => { - return { x: 1, pluginId }; + return async () => { + return { x: 1 }; }; }, }); -const ref2 = createServiceRef<{ x: number; pluginId: string }>({ +const ref2 = createServiceRef<{ x: number }>({ id: '2', }); const sf2 = createServiceFactory({ service: ref2, deps: {}, factory: async () => { - return async pluginId => { - return { x: 2, pluginId }; + return async () => { + return { x: 2 }; }; }, }); @@ -50,126 +50,115 @@ const sf2b = createServiceFactory({ service: ref2, deps: {}, factory: async () => { - return async pluginId => { - return { x: 22, pluginId }; + return async () => { + return { x: 22 }; }; }, }); -const refDefault1 = createServiceRef<{ x: number; pluginId: string }>({ +const refDefault1 = createServiceRef<{ x: number }>({ id: '1', defaultFactory: async service => createServiceFactory({ service, deps: {}, - factory: async () => async pluginId => ({ x: 10, pluginId }), + factory: async () => async () => ({ x: 10 }), }), }); -const refDefault2a = createServiceRef<{ x: number; pluginId: string }>({ +const refDefault2a = createServiceRef<{ x: number }>({ id: '2a', defaultFactory: async service => createServiceFactory({ service, deps: {}, - factory: async () => async pluginId => ({ x: 20, pluginId }), + factory: async () => async () => ({ x: 20 }), }), }); -const refDefault2b = createServiceRef<{ x: number; pluginId: string }>({ +const refDefault2b = createServiceRef<{ x: number }>({ id: '2b', defaultFactory: async service => createServiceFactory({ service, deps: {}, - factory: async () => async pluginId => ({ x: 220, pluginId }), + factory: async () => async () => ({ x: 220 }), }), }); describe('ServiceRegistry', () => { it('should return undefined if there is no factory defined', async () => { const registry = new ServiceRegistry([]); - expect(registry.get(ref1)).toBe(undefined); + expect(registry.get(ref1, 'catalog')).toBe(undefined); }); - it('should return a factory for a registered ref', async () => { + it('should return an implementation for a registered ref', async () => { const registry = new ServiceRegistry([sf1]); - const factory = registry.get(ref1)!; - expect(factory).toEqual(expect.any(Function)); - await expect(factory('catalog')).resolves.toEqual({ - x: 1, - pluginId: 'catalog', - }); - await expect(factory('scaffolder')).resolves.toEqual({ - x: 1, - pluginId: 'scaffolder', - }); - expect(await factory('catalog')).toBe(await factory('catalog')); + await expect(registry.get(ref1, 'catalog')).resolves.toEqual({ x: 1 }); + await expect(registry.get(ref1, 'scaffolder')).resolves.toEqual({ x: 1 }); + expect(await registry.get(ref1, 'catalog')).toBe( + await registry.get(ref1, 'catalog'), + ); + expect(await registry.get(ref1, 'scaffolder')).toBe( + await registry.get(ref1, 'scaffolder'), + ); + expect(await registry.get(ref1, 'catalog')).not.toBe( + await registry.get(ref1, 'scaffolder'), + ); }); it('should handle multiple factories with different serviceRefs', async () => { const registry = new ServiceRegistry([sf1, sf2]); - const factory1 = registry.get(ref1)!; - const factory2 = registry.get(ref2)!; - expect(factory1).toEqual(expect.any(Function)); - expect(factory2).toEqual(expect.any(Function)); - await expect(factory1('catalog')).resolves.toEqual({ + + await expect(registry.get(ref1, 'catalog')).resolves.toEqual({ x: 1, - pluginId: 'catalog', }); - await expect(factory2('catalog')).resolves.toEqual({ + await expect(registry.get(ref2, 'catalog')).resolves.toEqual({ x: 2, - pluginId: 'catalog', }); - expect(await factory1('catalog')).not.toBe(await factory2('catalog')); + expect(await registry.get(ref1, 'catalog')).not.toBe( + await registry.get(ref2, 'catalog'), + ); }); it('should use the last factory for each ref', async () => { const registry = new ServiceRegistry([sf2, sf2b]); - const factory2 = registry.get(ref2)!; - await expect(factory2('catalog')).resolves.toEqual({ + await expect(registry.get(ref2, 'catalog')).resolves.toEqual({ x: 22, - pluginId: 'catalog', }); }); - it('should return the defaultFactory from the ref if not provided to the registry', async () => { + it('should use the defaultFactory from the ref if not provided to the registry', async () => { const registry = new ServiceRegistry([]); - const factory = registry.get(refDefault1)!; - expect(factory).toEqual(expect.any(Function)); - await expect(factory('catalog')).resolves.toEqual({ + await expect(registry.get(refDefault1, 'catalog')).resolves.toEqual({ x: 10, - pluginId: 'catalog', }); }); - it('should not return the defaultFactory from the ref if provided to the registry', async () => { + it('should not use the defaultFactory from the ref if provided to the registry', async () => { const registry = new ServiceRegistry([sf1]); - const factory = registry.get(refDefault1)!; - expect(factory).toEqual(expect.any(Function)); - await expect(factory('catalog')).resolves.toEqual({ + await expect(registry.get(refDefault1, 'catalog')).resolves.toEqual({ x: 1, - pluginId: 'catalog', }); }); it('should handle duplicate defaultFactories by duplicating the implementations', async () => { const registry = new ServiceRegistry([]); - const factoryA = registry.get(refDefault2a)!; - const factoryB = registry.get(refDefault2b)!; - expect(factoryA).toEqual(expect.any(Function)); - expect(factoryB).toEqual(expect.any(Function)); - await expect(factoryA('catalog')).resolves.toEqual({ + await expect(registry.get(refDefault2a, 'catalog')).resolves.toEqual({ x: 20, - pluginId: 'catalog', }); - await expect(factoryB('catalog')).resolves.toEqual({ + await expect(registry.get(refDefault2b, 'catalog')).resolves.toEqual({ x: 220, - pluginId: 'catalog', }); - expect(await factoryA('catalog')).toBe(await factoryA('catalog')); - expect(await factoryB('catalog')).toBe(await factoryB('catalog')); - expect(await factoryA('catalog')).not.toBe(await factoryB('catalog')); + expect(await registry.get(refDefault2a, 'catalog')).toBe( + await registry.get(refDefault2a, 'catalog'), + ); + expect(await registry.get(refDefault2b, 'catalog')).toBe( + await registry.get(refDefault2b, 'catalog'), + ); + expect(await registry.get(refDefault2a, 'catalog')).not.toBe( + await registry.get(refDefault2b, 'catalog'), + ); }); it('should only call each default factory loader once', async () => { @@ -186,17 +175,16 @@ describe('ServiceRegistry', () => { }); const registry = new ServiceRegistry([]); - const factory = registry.get(ref)!; await Promise.all([ - expect(factory('catalog')).resolves.toBeUndefined(), - expect(factory('catalog')).resolves.toBeUndefined(), + expect(registry.get(ref, 'catalog')).resolves.toBeUndefined(), + expect(registry.get(ref, 'catalog')).resolves.toBeUndefined(), ]); expect(factoryLoader).toHaveBeenCalledTimes(1); }); it('should not call factory functions more than once', async () => { - const innerFactory = jest.fn(async (pluginId: string) => { - return { x: 1, pluginId }; + const innerFactory = jest.fn(async () => { + return { x: 1 }; }); const factory = jest.fn(async () => innerFactory); const myFactory = createServiceFactory({ @@ -208,17 +196,15 @@ describe('ServiceRegistry', () => { const registry = new ServiceRegistry([myFactory]); await Promise.all([ - registry.get(ref1)!('catalog')!, - registry.get(ref1)!('catalog')!, - registry.get(ref1)!('catalog')!, - registry.get(ref1)!('scaffolder')!, - registry.get(ref1)!('scaffolder')!, + registry.get(ref1, 'catalog')!, + registry.get(ref1, 'catalog')!, + registry.get(ref1, 'catalog')!, + registry.get(ref1, 'scaffolder')!, + registry.get(ref1, 'scaffolder')!, ]); expect(factory).toHaveBeenCalledTimes(1); expect(innerFactory).toHaveBeenCalledTimes(2); - expect(innerFactory).toHaveBeenCalledWith('catalog'); - expect(innerFactory).toHaveBeenCalledWith('scaffolder'); }); it('should throw if dependencies are not available', async () => { @@ -231,9 +217,8 @@ describe('ServiceRegistry', () => { }); const registry = new ServiceRegistry([myFactory]); - const factory = registry.get(ref1)!; - await expect(factory('catalog')).rejects.toThrow( + await expect(registry.get(ref1, 'catalog')).rejects.toThrow( "Failed to instantiate service '1' for 'catalog' because the following dependent services are missing: '2'", ); }); @@ -247,8 +232,8 @@ describe('ServiceRegistry', () => { const factoryA = createServiceFactory({ service: refA, deps: { b: refB }, - async factory({ b }) { - return async pluginId => b(pluginId); + async factory() { + return async ({ b }) => b; }, }); @@ -261,9 +246,8 @@ describe('ServiceRegistry', () => { }); const registry = new ServiceRegistry([factoryA, factoryB]); - const factory = registry.get(refA)!; - await expect(factory('catalog')).rejects.toThrow( + await expect(registry.get(refA, 'catalog')).rejects.toThrow( "Failed to instantiate service 'a' for 'catalog' because the factory function threw an error, Error: Failed to instantiate service 'b' for 'catalog' because the following dependent services are missing: 'c', 'd'", ); }); @@ -278,9 +262,8 @@ describe('ServiceRegistry', () => { }); const registry = new ServiceRegistry([myFactory]); - const factory = registry.get(ref1)!; - await expect(factory('catalog')).rejects.toThrow( + await expect(registry.get(ref1, 'catalog')).rejects.toThrow( "Failed to instantiate service '1' because the top-level factory function threw an error, Error: top-level error", ); }); @@ -290,17 +273,16 @@ describe('ServiceRegistry', () => { service: ref1, deps: {}, async factory() { - return pluginId => { - throw new Error(`error in plugin ${pluginId}`); + return () => { + throw new Error(`error in plugin`); }; }, }); const registry = new ServiceRegistry([myFactory]); - const factory = registry.get(ref1)!; - await expect(factory('catalog')).rejects.toThrow( - "Failed to instantiate service '1' for 'catalog' because the factory function threw an error, Error: error in plugin catalog", + await expect(registry.get(ref1, 'catalog')).rejects.toThrow( + "Failed to instantiate service '1' for 'catalog' because the factory function threw an error, Error: error in plugin", ); }); @@ -313,9 +295,8 @@ describe('ServiceRegistry', () => { }); const registry = new ServiceRegistry([]); - const factory = registry.get(ref)!; - await expect(factory('catalog')).rejects.toThrow( + await expect(registry.get(ref, 'catalog')).rejects.toThrow( "Failed to instantiate service '1' because the default factory loader threw an error, Error: default factory error", ); }); diff --git a/packages/backend-app-api/src/wiring/ServiceRegistry.ts b/packages/backend-app-api/src/wiring/ServiceRegistry.ts index e0509aecde..007ca00c88 100644 --- a/packages/backend-app-api/src/wiring/ServiceRegistry.ts +++ b/packages/backend-app-api/src/wiring/ServiceRegistry.ts @@ -16,8 +16,8 @@ import { ServiceFactory, - FactoryFunc, ServiceRef, + pluginMetadataServiceRef, } from '@backstage/backend-plugin-api'; import { stringifyError } from '@backstage/errors'; @@ -37,7 +37,9 @@ export class ServiceRegistry { readonly #implementations: Map< ServiceFactory, { - factoryFunc: Promise>; + factoryFunc: Promise< + (deps: { [name in string]: unknown }) => Promise + >; byPlugin: Map>; } >; @@ -58,67 +60,123 @@ export class ServiceRegistry { this.#implementations = new Map(); } - get(ref: ServiceRef): FactoryFunc | undefined { - let factory = this.#providedFactories.get(ref.id); - const { __defaultFactory: defaultFactory } = ref as InternalServiceRef; - if (!factory && !defaultFactory) { + #resolveFactory( + ref: ServiceRef, + pluginId: string, + ): Promise | undefined { + // Special case handling of the plugin metadata service, generating a custom factory for it each time + if (ref.id === pluginMetadataServiceRef.id) { + return Promise.resolve({ + scope: 'plugin', + service: pluginMetadataServiceRef, + deps: {}, + factory: async () => async () => ({ + getId() { + return pluginId; + }, + }), + }); + } + + let resolvedFactory: Promise | ServiceFactory | undefined = + this.#providedFactories.get(ref.id); + const { __defaultFactory: defaultFactory } = + ref as InternalServiceRef; + if (!resolvedFactory && !defaultFactory) { return undefined; } - return async (pluginId: string): Promise => { - if (!factory) { - let loadedFactory = this.#loadedDefaultFactories.get(defaultFactory!); - if (!loadedFactory) { - loadedFactory = Promise.resolve() - .then(() => defaultFactory!(ref)) - .then(f => - typeof f === 'function' ? f() : f, - ) as Promise; - this.#loadedDefaultFactories.set(defaultFactory!, loadedFactory); - } - // NOTE: This await is safe as long as #providedFactories is not mutated. - factory = await loadedFactory.catch(error => { - throw new Error( - `Failed to instantiate service '${ - ref.id - }' because the default factory loader threw an error, ${stringifyError( - error, - )}`, + if (!resolvedFactory) { + let loadedFactory = this.#loadedDefaultFactories.get(defaultFactory!); + if (!loadedFactory) { + loadedFactory = Promise.resolve() + .then(() => defaultFactory!(ref)) + .then(f => + typeof f === 'function' ? f() : f, + ) as Promise; + this.#loadedDefaultFactories.set(defaultFactory!, loadedFactory); + } + resolvedFactory = loadedFactory.catch(error => { + throw new Error( + `Failed to instantiate service '${ + ref.id + }' because the default factory loader threw an error, ${stringifyError( + error, + )}`, + ); + }); + } + + return Promise.resolve(resolvedFactory); + } + + #separateMapForTheRootService = new Map>(); + + #checkForMissingDeps(factory: ServiceFactory, pluginId: string) { + const missingDeps = Object.values(factory.deps).filter(ref => { + if (ref.id === pluginMetadataServiceRef.id) { + return false; + } + if (this.#providedFactories.get(ref.id)) { + return false; + } + + return !(ref as InternalServiceRef).__defaultFactory; + }); + + if (missingDeps.length) { + const missing = missingDeps.map(r => `'${r.id}'`).join(', '); + throw new Error( + `Failed to instantiate service '${factory.service.id}' for '${pluginId}' because the following dependent services are missing: ${missing}`, + ); + } + } + + get(ref: ServiceRef, pluginId: string): Promise | undefined { + return this.#resolveFactory(ref, pluginId)?.then(factory => { + if (factory.scope === 'root') { + let existing = this.#separateMapForTheRootService.get(factory); + if (!existing) { + this.#checkForMissingDeps(factory, pluginId); + const rootDeps = new Array>(); + + for (const [name, serviceRef] of Object.entries(factory.deps)) { + if (serviceRef.scope !== 'root') { + throw new Error( + `Failed to instantiate 'root' scoped service '${ref.id}' because it depends on '${serviceRef.scope}' scoped service '${serviceRef.id}'.`, + ); + } + const target = this.get(serviceRef, pluginId)!; + rootDeps.push(target.then(impl => [name, impl])); + } + + existing = Promise.all(rootDeps).then(entries => + factory.factory(Object.fromEntries(entries)), ); - }); + this.#separateMapForTheRootService.set(factory, existing); + } + return existing as Promise; } let implementation = this.#implementations.get(factory); if (!implementation) { - const missingRefs = new Array>(); - const factoryDeps: { [name in string]: FactoryFunc } = {}; + this.#checkForMissingDeps(factory, pluginId); + const rootDeps = new Array>(); for (const [name, serviceRef] of Object.entries(factory.deps)) { - const target = this.get(serviceRef); - if (!target) { - missingRefs.push(serviceRef); - } else { - factoryDeps[name] = target; + if (serviceRef.scope === 'root') { + const target = this.get(serviceRef, pluginId)!; + rootDeps.push(target.then(impl => [name, impl])); } } - if (missingRefs.length) { - const missing = missingRefs.map(r => `'${r.id}'`).join(', '); - throw new Error( - `Failed to instantiate service '${ref.id}' for '${pluginId}' because the following dependent services are missing: ${missing}`, - ); - } - implementation = { - factoryFunc: Promise.resolve() - .then(() => factory!.factory(factoryDeps)) + factoryFunc: Promise.all(rootDeps) + .then(entries => factory.factory(Object.fromEntries(entries))) .catch(error => { + const cause = stringifyError(error); throw new Error( - `Failed to instantiate service '${ - ref.id - }' because the top-level factory function threw an error, ${stringifyError( - error, - )}`, + `Failed to instantiate service '${ref.id}' because the top-level factory function threw an error, ${cause}`, ); }), byPlugin: new Map(), @@ -129,24 +187,29 @@ export class ServiceRegistry { let result = implementation.byPlugin.get(pluginId) as Promise; if (!result) { - result = implementation.factoryFunc.then(func => - Promise.resolve() - .then(() => func(pluginId)) - .catch(error => { - throw new Error( - `Failed to instantiate service '${ - ref.id - }' for '${pluginId}' because the factory function threw an error, ${stringifyError( - error, - )}`, - ); - }), - ); + const allDeps = new Array>(); + for (const [name, serviceRef] of Object.entries(factory.deps)) { + const target = this.get(serviceRef, pluginId)!; + allDeps.push(target.then(impl => [name, impl])); + } + + result = implementation.factoryFunc + .then(func => + Promise.all(allDeps).then(entries => + func(Object.fromEntries(entries)), + ), + ) + .catch(error => { + const cause = stringifyError(error); + throw new Error( + `Failed to instantiate service '${ref.id}' for '${pluginId}' because the factory function threw an error, ${cause}`, + ); + }); implementation.byPlugin.set(pluginId, result); } return result; - }; + }); } } diff --git a/packages/backend-app-api/src/wiring/types.ts b/packages/backend-app-api/src/wiring/types.ts index febc6830c7..40ce6aa1ae 100644 --- a/packages/backend-app-api/src/wiring/types.ts +++ b/packages/backend-app-api/src/wiring/types.ts @@ -18,7 +18,6 @@ import { ServiceFactory, BackendFeature, ExtensionPoint, - FactoryFunc, ServiceRef, } from '@backstage/backend-plugin-api'; import { BackstageBackend } from './BackstageBackend'; @@ -47,7 +46,7 @@ export interface CreateSpecializedBackendOptions { } export type ServiceHolder = { - get(api: ServiceRef): FactoryFunc | undefined; + get(api: ServiceRef, pluginId: string): Promise | undefined; }; /** diff --git a/packages/backend-plugin-api/src/services/system/types.ts b/packages/backend-plugin-api/src/services/system/types.ts index a19c17bb9c..4a9f91541a 100644 --- a/packages/backend-plugin-api/src/services/system/types.ts +++ b/packages/backend-plugin-api/src/services/system/types.ts @@ -19,63 +19,84 @@ * * @public */ -export type ServiceRef = { +export type ServiceRef< + TService, + TScope extends 'root' | 'plugin' = 'root' | 'plugin', +> = { id: string; + /** + * This determines the scope at which this service is available. + * + * Root scoped services are available to all other services but + * may only depend on other root scoped services. + * + * Plugin scoped services are only available to other plugin scoped + * services but may depend on all other services. + */ + scope: TScope; + /** * Utility for getting the type of the service, using `typeof serviceRef.T`. * Attempting to actually read this value will result in an exception. */ - T: T; + T: TService; toString(): string; $$ref: 'service'; }; -/** - * @internal - */ -export type InternalServiceRef = ServiceRef & { - /** - * The default factory that will be used to create service - * instances if no other factory is provided. - */ - __defaultFactory?: ( - service: ServiceRef, - ) => Promise | (() => ServiceFactory)>; -}; - /** @public */ export type TypesToServiceRef = { [key in keyof T]: ServiceRef }; /** @public */ -export type DepsToDepFactories = { - [key in keyof T]: (pluginId: string) => Promise; -}; - -/** @public */ -export type FactoryFunc = (pluginId: string) => Promise; - -/** @public */ -export type ServiceFactory = { - service: ServiceRef; - deps: { [key in string]: ServiceRef }; - factory(deps: { [key in string]: unknown }): Promise>; -}; +export type ServiceFactory = + | { + // This scope prop is needed in addition to the service ref, as TypeScript + // can't properly discriminate the two factory types otherwise. + scope: 'root'; + service: ServiceRef; + deps: { [key in string]: ServiceRef }; + factory(deps: { [key in string]: unknown }): Promise; + } + | { + scope: 'plugin'; + service: ServiceRef; + deps: { [key in string]: ServiceRef }; + factory(deps: { [key in string]: unknown }): Promise< + (deps: { [key in string]: unknown }) => Promise + >; + }; /** * @public */ export function createServiceRef(options: { id: string; + scope?: 'plugin'; defaultFactory?: ( service: ServiceRef, ) => Promise | (() => ServiceFactory)>; -}): ServiceRef { - const { id, defaultFactory } = options; +}): ServiceRef; +export function createServiceRef(options: { + id: string; + scope: 'root'; + defaultFactory?: ( + service: ServiceRef, + ) => Promise | (() => ServiceFactory)>; +}): ServiceRef; +export function createServiceRef(options: { + id: string; + scope?: 'plugin' | 'root'; + defaultFactory?: ( + service: ServiceRef, + ) => Promise | (() => ServiceFactory)>; +}): ServiceRef { + const { id, scope = 'plugin', defaultFactory } = options; return { id, + scope, get T(): T { throw new Error(`tried to read ServiceRef.T of ${this}`); }, @@ -84,32 +105,58 @@ export function createServiceRef(options: { }, $$ref: 'service', // TODO: declare __defaultFactory: defaultFactory, - } as InternalServiceRef; + } as ServiceRef & { + __defaultFactory?: ( + service: ServiceRef, + ) => Promise | (() => ServiceFactory)>; + }; } +type OnlyRootScopeDependencies< + TDeps extends { [key in string]: ServiceRef }, +> = Pick< + TDeps, + { + [name in keyof TDeps]: TDeps[name]['scope'] extends 'root' ? name : never; + }[keyof TDeps] +>; + +type DependencyRefsToInstances< + T extends { [key in string]: ServiceRef }, +> = { + [key in keyof T]: T[key] extends ServiceRef ? TImpl : never; +}; + /** * @public */ export function createServiceFactory< TService, + TScope extends 'root' | 'plugin', TImpl extends TService, - TDeps extends { [name in string]: unknown }, + TDeps extends { [name in string]: ServiceRef }, TOpts extends { [name in string]: unknown } | undefined = undefined, ->(factory: { - service: ServiceRef; - deps: TypesToServiceRef; +>(config: { + service: ServiceRef; + deps: TDeps; factory( - deps: DepsToDepFactories, + deps: DependencyRefsToInstances>, options: TOpts, - ): Promise>; + ): TScope extends 'root' + ? Promise + : Promise<(deps: DependencyRefsToInstances) => Promise>; }): undefined extends TOpts ? (options?: TOpts) => ServiceFactory : (options: TOpts) => ServiceFactory { - return (options?: TOpts) => ({ - service: factory.service, - deps: factory.deps, - factory(deps: DepsToDepFactories) { - return factory.factory(deps, options!); - }, - }); + return (options?: TOpts) => + ({ + scope: config.service.scope, + service: config.service, + deps: config.deps, + factory( + deps: DependencyRefsToInstances>, + ) { + return config.factory(deps, options!); + }, + } as ServiceFactory); } From 4b324c83f8bbc62f191139735cf9e4d43a100e54 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 8 Sep 2022 16:09:42 +0200 Subject: [PATCH 084/110] backend-app-api: 100% coverage of ServiceRegistry MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Fredrik Adelöw Co-authored-by: blam Co-authored-by: Johan Haals Signed-off-by: Patrik Oldsberg --- .../src/wiring/ServiceRegistry.test.ts | 72 ++++++++++++++++--- 1 file changed, 64 insertions(+), 8 deletions(-) diff --git a/packages/backend-app-api/src/wiring/ServiceRegistry.test.ts b/packages/backend-app-api/src/wiring/ServiceRegistry.test.ts index ab709dcb77..211f9ac31e 100644 --- a/packages/backend-app-api/src/wiring/ServiceRegistry.test.ts +++ b/packages/backend-app-api/src/wiring/ServiceRegistry.test.ts @@ -18,6 +18,7 @@ import { createServiceRef, createServiceFactory, ServiceRef, + pluginMetadataServiceRef, } from '@backstage/backend-plugin-api'; import { ServiceRegistry } from './ServiceRegistry'; @@ -35,26 +36,23 @@ const sf1 = createServiceFactory({ }); const ref2 = createServiceRef<{ x: number }>({ + scope: 'root', id: '2', }); const sf2 = createServiceFactory({ service: ref2, deps: {}, factory: async () => { - return async () => { - return { x: 2 }; - }; + return { x: 2 }; }, }); const sf2b = createServiceFactory({ service: ref2, deps: {}, factory: async () => { - return async () => { - return { x: 22 }; - }; + return { x: 22 }; }, -}); +})(); const refDefault1 = createServiceRef<{ x: number }>({ id: '1', @@ -63,7 +61,7 @@ const refDefault1 = createServiceRef<{ x: number }>({ service, deps: {}, factory: async () => async () => ({ x: 10 }), - }), + })(), }); const refDefault2a = createServiceRef<{ x: number }>({ @@ -121,6 +119,64 @@ describe('ServiceRegistry', () => { ); }); + it('should not be possible for root scoped services to depend on plugin scoped services', async () => { + const factory = createServiceFactory({ + service: ref2, + deps: { pluginDep: ref1 }, + factory: async () => { + return { x: 2 }; + }, + }); + const registry = new ServiceRegistry([factory, sf1]); + await expect(registry.get(ref2, 'catalog')).rejects.toThrow( + "Failed to instantiate 'root' scoped service '2' because it depends on 'plugin' scoped service '1'.", + ); + }); + + it('should be possible for plugin scoped services to depend on root scoped services', async () => { + const factory = createServiceFactory({ + service: ref1, + deps: { rootDep: ref2 }, + factory: async ({ rootDep }) => { + return async () => ({ x: rootDep.x }); + }, + }); + const registry = new ServiceRegistry([factory, sf2]); + await expect(registry.get(ref1, 'catalog')).resolves.toEqual({ + x: 2, + }); + }); + + it('should be possible for root scoped services to depend on root scoped services', async () => { + const ref = createServiceRef<{ x: number }>({ id: 'x', scope: 'root' }); + const factory = createServiceFactory({ + service: ref, + deps: { rootDep: ref2 }, + factory: async ({ rootDep }) => { + return { x: rootDep.x }; + }, + }); + const registry = new ServiceRegistry([factory, sf2]); + await expect(registry.get(ref, 'catalog')).resolves.toEqual({ + x: 2, + }); + }); + + it('should return the pluginId from the pluginMetadata service', async () => { + const ref = createServiceRef<{ pluginId: string }>({ id: 'x' }); + const factory = createServiceFactory({ + service: ref, + deps: { meta: pluginMetadataServiceRef }, + factory: async ({}) => { + return async ({ meta }) => ({ pluginId: meta.getId() }); + }, + }); + const registry = new ServiceRegistry([factory]); + await expect(registry.get(ref, 'catalog')).resolves.toEqual({ + pluginId: 'catalog', + }); + }); + it('should use the last factory for each ref', async () => { const registry = new ServiceRegistry([sf2, sf2b]); await expect(registry.get(ref2, 'catalog')).resolves.toEqual({ From dc74ebd10d57f8f290db50c172aad3435e46e6bf Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 9 Sep 2022 15:29:44 +0200 Subject: [PATCH 085/110] backend-plugin-api: refactor createServiceFactory helper types MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Fredrik Adelöw Co-authored-by: blam Co-authored-by: Johan Haals Signed-off-by: Patrik Oldsberg --- .../src/services/system/types.ts | 24 +++++++------------ 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/packages/backend-plugin-api/src/services/system/types.ts b/packages/backend-plugin-api/src/services/system/types.ts index 4a9f91541a..579d7abaab 100644 --- a/packages/backend-plugin-api/src/services/system/types.ts +++ b/packages/backend-plugin-api/src/services/system/types.ts @@ -112,19 +112,13 @@ export function createServiceRef(options: { }; } -type OnlyRootScopeDependencies< - TDeps extends { [key in string]: ServiceRef }, -> = Pick< - TDeps, - { - [name in keyof TDeps]: TDeps[name]['scope'] extends 'root' ? name : never; - }[keyof TDeps] ->; - -type DependencyRefsToInstances< +type ServiceRefsToInstances< T extends { [key in string]: ServiceRef }, + TScope extends 'root' | 'plugin' = 'root' | 'plugin', > = { - [key in keyof T]: T[key] extends ServiceRef ? TImpl : never; + [key in keyof T]: T[key] extends ServiceRef + ? TImpl + : never; }; /** @@ -140,11 +134,11 @@ export function createServiceFactory< service: ServiceRef; deps: TDeps; factory( - deps: DependencyRefsToInstances>, + deps: ServiceRefsToInstances, options: TOpts, ): TScope extends 'root' ? Promise - : Promise<(deps: DependencyRefsToInstances) => Promise>; + : Promise<(deps: ServiceRefsToInstances) => Promise>; }): undefined extends TOpts ? (options?: TOpts) => ServiceFactory : (options: TOpts) => ServiceFactory { @@ -153,9 +147,7 @@ export function createServiceFactory< scope: config.service.scope, service: config.service, deps: config.deps, - factory( - deps: DependencyRefsToInstances>, - ) { + factory(deps: ServiceRefsToInstances) { return config.factory(deps, options!); }, } as ServiceFactory); From 2bf8855c1dc37ceb21dda11c1590795a96e8fa1e Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 9 Sep 2022 15:30:08 +0200 Subject: [PATCH 086/110] core-app-api: switch to non-broken way of defining service factories MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: blam Co-authored-by: Fredrik Adelöw Co-authored-by: Johan Haals Signed-off-by: Patrik Oldsberg --- .../src/wiring/ServiceRegistry.test.ts | 30 ++++++++++++------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/packages/backend-app-api/src/wiring/ServiceRegistry.test.ts b/packages/backend-app-api/src/wiring/ServiceRegistry.test.ts index 211f9ac31e..897ed4e3cd 100644 --- a/packages/backend-app-api/src/wiring/ServiceRegistry.test.ts +++ b/packages/backend-app-api/src/wiring/ServiceRegistry.test.ts @@ -28,7 +28,7 @@ const ref1 = createServiceRef<{ x: number }>({ const sf1 = createServiceFactory({ service: ref1, deps: {}, - factory: async () => { + async factory() { return async () => { return { x: 1 }; }; @@ -42,14 +42,14 @@ const ref2 = createServiceRef<{ x: number }>({ const sf2 = createServiceFactory({ service: ref2, deps: {}, - factory: async () => { + async factory() { return { x: 2 }; }, }); const sf2b = createServiceFactory({ service: ref2, deps: {}, - factory: async () => { + async factory() { return { x: 22 }; }, })(); @@ -60,7 +60,9 @@ const refDefault1 = createServiceRef<{ x: number }>({ createServiceFactory({ service, deps: {}, - factory: async () => async () => ({ x: 10 }), + async factory() { + return async () => ({ x: 10 }); + }, })(), }); @@ -70,7 +72,9 @@ const refDefault2a = createServiceRef<{ x: number }>({ createServiceFactory({ service, deps: {}, - factory: async () => async () => ({ x: 20 }), + async factory() { + return async () => ({ x: 20 }); + }, }), }); @@ -80,7 +84,9 @@ const refDefault2b = createServiceRef<{ x: number }>({ createServiceFactory({ service, deps: {}, - factory: async () => async () => ({ x: 220 }), + async factory() { + return async () => ({ x: 220 }); + }, }), }); @@ -123,7 +129,7 @@ describe('ServiceRegistry', () => { const factory = createServiceFactory({ service: ref2, deps: { pluginDep: ref1 }, - factory: async () => { + async factory() { return { x: 2 }; }, }); @@ -137,7 +143,7 @@ describe('ServiceRegistry', () => { const factory = createServiceFactory({ service: ref1, deps: { rootDep: ref2 }, - factory: async ({ rootDep }) => { + async factory({ rootDep }) { return async () => ({ x: rootDep.x }); }, }); @@ -152,7 +158,7 @@ describe('ServiceRegistry', () => { const factory = createServiceFactory({ service: ref, deps: { rootDep: ref2 }, - factory: async ({ rootDep }) => { + async factory({ rootDep }) { return { x: rootDep.x }; }, }); @@ -167,7 +173,7 @@ describe('ServiceRegistry', () => { const factory = createServiceFactory({ service: ref, deps: { meta: pluginMetadataServiceRef }, - factory: async ({}) => { + async factory() { return async ({ meta }) => ({ pluginId: meta.getId() }); }, }); @@ -222,7 +228,9 @@ describe('ServiceRegistry', () => { createServiceFactory({ service, deps: {}, - factory: async () => async () => {}, + async factory() { + return async () => {}; + }, }), ); const ref = createServiceRef({ From f55c11f29d55cf2639b3d75976167f1506274cfa Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 9 Sep 2022 15:34:29 +0200 Subject: [PATCH 087/110] core-plugin-api: narrow scope type of service refs passed to default factory loader Co-authored-by: blam Signed-off-by: Patrik Oldsberg --- .../src/services/system/types.ts | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/packages/backend-plugin-api/src/services/system/types.ts b/packages/backend-plugin-api/src/services/system/types.ts index 579d7abaab..e52ef5cc5a 100644 --- a/packages/backend-plugin-api/src/services/system/types.ts +++ b/packages/backend-plugin-api/src/services/system/types.ts @@ -76,23 +76,27 @@ export function createServiceRef(options: { id: string; scope?: 'plugin'; defaultFactory?: ( - service: ServiceRef, + service: ServiceRef, ) => Promise | (() => ServiceFactory)>; }): ServiceRef; export function createServiceRef(options: { id: string; scope: 'root'; defaultFactory?: ( - service: ServiceRef, + service: ServiceRef, ) => Promise | (() => ServiceFactory)>; }): ServiceRef; export function createServiceRef(options: { id: string; scope?: 'plugin' | 'root'; - defaultFactory?: ( - service: ServiceRef, - ) => Promise | (() => ServiceFactory)>; -}): ServiceRef { + defaultFactory?: + | (( + service: ServiceRef, + ) => Promise | (() => ServiceFactory)>) + | (( + service: ServiceRef, + ) => Promise | (() => ServiceFactory)>); +}): ServiceRef { const { id, scope = 'plugin', defaultFactory } = options; return { id, From 06c744d142d7d9e8112dfe897ae0c3028560437a Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 9 Sep 2022 15:35:21 +0200 Subject: [PATCH 088/110] backend-plugin-api: add initial PluginMetadataService definition MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Fredrik Adelöw Co-authored-by: blam Co-authored-by: Johan Haals Signed-off-by: Patrik Oldsberg --- .../src/services/definitions/index.ts | 1 + .../definitions/pluginMetadataServiceRef.ts | 31 +++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 packages/backend-plugin-api/src/services/definitions/pluginMetadataServiceRef.ts diff --git a/packages/backend-plugin-api/src/services/definitions/index.ts b/packages/backend-plugin-api/src/services/definitions/index.ts index 797cfb5a76..fb204df495 100644 --- a/packages/backend-plugin-api/src/services/definitions/index.ts +++ b/packages/backend-plugin-api/src/services/definitions/index.ts @@ -26,3 +26,4 @@ export { discoveryServiceRef } from './discoveryServiceRef'; export { tokenManagerServiceRef } from './tokenManagerServiceRef'; export { permissionsServiceRef } from './permissionsServiceRef'; export { schedulerServiceRef } from './schedulerServiceRef'; +export { pluginMetadataServiceRef } from './pluginMetadataServiceRef'; diff --git a/packages/backend-plugin-api/src/services/definitions/pluginMetadataServiceRef.ts b/packages/backend-plugin-api/src/services/definitions/pluginMetadataServiceRef.ts new file mode 100644 index 0000000000..3af6e54900 --- /dev/null +++ b/packages/backend-plugin-api/src/services/definitions/pluginMetadataServiceRef.ts @@ -0,0 +1,31 @@ +/* + * 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 { createServiceRef } from '../system/types'; + +/** + * @public + */ +export interface PluginMetadata { + getId(): string; +} + +/** + * @public + */ +export const pluginMetadataServiceRef = createServiceRef({ + id: 'core.plugin-metadata', +}); From fb93ecad9cf98f0410fb7341eff7d427347b1ab2 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 9 Sep 2022 15:52:03 +0200 Subject: [PATCH 089/110] backend-plugin-api: remove services with scope mismatch from deps type Co-authored-by: blam Signed-off-by: Patrik Oldsberg --- packages/backend-plugin-api/src/services/system/types.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/backend-plugin-api/src/services/system/types.ts b/packages/backend-plugin-api/src/services/system/types.ts index e52ef5cc5a..3edee2ec0f 100644 --- a/packages/backend-plugin-api/src/services/system/types.ts +++ b/packages/backend-plugin-api/src/services/system/types.ts @@ -120,9 +120,9 @@ type ServiceRefsToInstances< T extends { [key in string]: ServiceRef }, TScope extends 'root' | 'plugin' = 'root' | 'plugin', > = { - [key in keyof T]: T[key] extends ServiceRef - ? TImpl - : never; + [name in { + [key in keyof T]: T[key] extends ServiceRef ? key : never; + }[keyof T]]: T[name] extends ServiceRef ? TImpl : never; }; /** From 2a29d24519cd5ae64e6787eb55beaa4ff7665ca5 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 9 Sep 2022 16:10:59 +0200 Subject: [PATCH 090/110] backend-app-api,backend-plugin-api: refactor existing service factories and fix type issues Co-authored-by: blam Signed-off-by: Patrik Oldsberg --- .../services/implementations/cacheService.ts | 11 +++-- .../services/implementations/configService.ts | 11 ++--- .../implementations/databaseService.ts | 11 +++-- .../implementations/discoveryService.ts | 5 +- .../implementations/httpRouterService.ts | 11 +++-- .../services/implementations/loggerService.ts | 33 ++++--------- .../implementations/permissionsService.ts | 22 ++++----- .../implementations/rootLoggerService.ts | 48 +++++++++++++++++++ .../implementations/schedulerService.ts | 11 +++-- .../implementations/tokenManagerService.ts | 29 ++--------- .../implementations/urlReaderService.ts | 11 ++--- .../src/wiring/BackendInitializer.ts | 7 +-- .../services/definitions/configServiceRef.ts | 3 +- .../src/services/definitions/index.ts | 1 + .../definitions/rootLoggerServiceRef.ts | 26 ++++++++++ .../src/services/system/index.ts | 8 +--- .../src/services/system/types.ts | 1 + plugins/catalog-node/src/catalogService.ts | 10 ++-- 18 files changed, 145 insertions(+), 114 deletions(-) create mode 100644 packages/backend-app-api/src/services/implementations/rootLoggerService.ts create mode 100644 packages/backend-plugin-api/src/services/definitions/rootLoggerServiceRef.ts diff --git a/packages/backend-app-api/src/services/implementations/cacheService.ts b/packages/backend-app-api/src/services/implementations/cacheService.ts index c5e58b4a41..7e15f031c6 100644 --- a/packages/backend-app-api/src/services/implementations/cacheService.ts +++ b/packages/backend-app-api/src/services/implementations/cacheService.ts @@ -18,6 +18,7 @@ import { CacheManager } from '@backstage/backend-common'; import { configServiceRef, createServiceFactory, + pluginMetadataServiceRef, cacheServiceRef, } from '@backstage/backend-plugin-api'; @@ -25,13 +26,13 @@ import { export const cacheFactory = createServiceFactory({ service: cacheServiceRef, deps: { - configFactory: configServiceRef, + config: configServiceRef, + plugin: pluginMetadataServiceRef, }, - factory: async ({ configFactory }) => { - const config = await configFactory('root'); + async factory({ config }) { const cacheManager = CacheManager.fromConfig(config); - return async (pluginId: string) => { - return cacheManager.forPlugin(pluginId); + return async ({ plugin }) => { + return cacheManager.forPlugin(plugin.getId()); }; }, }); diff --git a/packages/backend-app-api/src/services/implementations/configService.ts b/packages/backend-app-api/src/services/implementations/configService.ts index c4aa641f72..91327289df 100644 --- a/packages/backend-app-api/src/services/implementations/configService.ts +++ b/packages/backend-app-api/src/services/implementations/configService.ts @@ -19,23 +19,20 @@ import { configServiceRef, createServiceFactory, loggerToWinstonLogger, - loggerServiceRef, + rootLoggerServiceRef, } from '@backstage/backend-plugin-api'; /** @public */ export const configFactory = createServiceFactory({ service: configServiceRef, deps: { - loggerFactory: loggerServiceRef, + logger: rootLoggerServiceRef, }, - factory: async ({ loggerFactory }) => { - const logger = await loggerFactory('root'); + async factory({ logger }) { const config = await loadBackendConfig({ argv: process.argv, logger: loggerToWinstonLogger(logger), }); - return async () => { - return config; - }; + return config; }, }); diff --git a/packages/backend-app-api/src/services/implementations/databaseService.ts b/packages/backend-app-api/src/services/implementations/databaseService.ts index b2bc19de84..f6401528e6 100644 --- a/packages/backend-app-api/src/services/implementations/databaseService.ts +++ b/packages/backend-app-api/src/services/implementations/databaseService.ts @@ -19,19 +19,20 @@ import { configServiceRef, createServiceFactory, databaseServiceRef, + pluginMetadataServiceRef, } from '@backstage/backend-plugin-api'; /** @public */ export const databaseFactory = createServiceFactory({ service: databaseServiceRef, deps: { - configFactory: configServiceRef, + config: configServiceRef, + plugin: pluginMetadataServiceRef, }, - factory: async ({ configFactory }) => { - const config = await configFactory('root'); + async factory({ config }) { const databaseManager = DatabaseManager.fromConfig(config); - return async (pluginId: string) => { - return databaseManager.forPlugin(pluginId); + return async ({ plugin }) => { + return databaseManager.forPlugin(plugin.getId()); }; }, }); diff --git a/packages/backend-app-api/src/services/implementations/discoveryService.ts b/packages/backend-app-api/src/services/implementations/discoveryService.ts index 3f1a584c61..7f35bf2447 100644 --- a/packages/backend-app-api/src/services/implementations/discoveryService.ts +++ b/packages/backend-app-api/src/services/implementations/discoveryService.ts @@ -25,10 +25,9 @@ import { export const discoveryFactory = createServiceFactory({ service: discoveryServiceRef, deps: { - configFactory: configServiceRef, + config: configServiceRef, }, - factory: async ({ configFactory }) => { - const config = await configFactory('root'); + async factory({ config }) { const discovery = SingleHostDiscovery.fromConfig(config); return async () => { return discovery; diff --git a/packages/backend-app-api/src/services/implementations/httpRouterService.ts b/packages/backend-app-api/src/services/implementations/httpRouterService.ts index 6460a77eaf..be4af664c4 100644 --- a/packages/backend-app-api/src/services/implementations/httpRouterService.ts +++ b/packages/backend-app-api/src/services/implementations/httpRouterService.ts @@ -18,6 +18,7 @@ import { createServiceFactory, httpRouterServiceRef, configServiceRef, + pluginMetadataServiceRef, } from '@backstage/backend-plugin-api'; import Router from 'express-promise-router'; import { Handler } from 'express'; @@ -27,18 +28,20 @@ import { createServiceBuilder } from '@backstage/backend-common'; export const httpRouterFactory = createServiceFactory({ service: httpRouterServiceRef, deps: { - configFactory: configServiceRef, + config: configServiceRef, + plugin: pluginMetadataServiceRef, }, - factory: async ({ configFactory }) => { + async factory({ config }) { const rootRouter = Router(); const service = createServiceBuilder(module) - .loadConfig(await configFactory('root')) + .loadConfig(config) .addRouter('', rootRouter); await service.start(); - return async (pluginId?: string) => { + return async ({ plugin }) => { + const pluginId = plugin.getId(); const path = pluginId ? `/api/${pluginId}` : ''; return { use(handler: Handler) { diff --git a/packages/backend-app-api/src/services/implementations/loggerService.ts b/packages/backend-app-api/src/services/implementations/loggerService.ts index e90b591302..ff72020140 100644 --- a/packages/backend-app-api/src/services/implementations/loggerService.ts +++ b/packages/backend-app-api/src/services/implementations/loggerService.ts @@ -14,38 +14,23 @@ * limitations under the License. */ -import { createRootLogger } from '@backstage/backend-common'; import { createServiceFactory, - Logger, loggerServiceRef, + pluginMetadataServiceRef, + rootLoggerServiceRef, } from '@backstage/backend-plugin-api'; -import { Logger as WinstonLogger } from 'winston'; - -class BackstageLogger implements Logger { - static fromWinston(logger: WinstonLogger): BackstageLogger { - return new BackstageLogger(logger); - } - - private constructor(private readonly winston: WinstonLogger) {} - - info(message: string, ...meta: any[]): void { - this.winston.info(message, ...meta); - } - - child(fields: { [name: string]: string }): Logger { - return new BackstageLogger(this.winston.child(fields)); - } -} /** @public */ export const loggerFactory = createServiceFactory({ service: loggerServiceRef, - deps: {}, - factory: async () => { - const root = BackstageLogger.fromWinston(createRootLogger()); - return async (pluginId: string) => { - return root.child({ pluginId }); + deps: { + rootLogger: rootLoggerServiceRef, + plugin: pluginMetadataServiceRef, + }, + async factory({ rootLogger }) { + return async ({ plugin }) => { + return rootLogger.child({ pluginId: plugin.getId() }); }; }, }); diff --git a/packages/backend-app-api/src/services/implementations/permissionsService.ts b/packages/backend-app-api/src/services/implementations/permissionsService.ts index 26fe012a20..32e8a1a9f9 100644 --- a/packages/backend-app-api/src/services/implementations/permissionsService.ts +++ b/packages/backend-app-api/src/services/implementations/permissionsService.ts @@ -27,20 +27,16 @@ import { ServerPermissionClient } from '@backstage/plugin-permission-node'; export const permissionsFactory = createServiceFactory({ service: permissionsServiceRef, deps: { - configFactory: configServiceRef, - discoveryFactory: discoveryServiceRef, - tokenManagerFactory: tokenManagerServiceRef, + config: configServiceRef, + discovery: discoveryServiceRef, + tokenManager: tokenManagerServiceRef, }, - factory: async ({ configFactory, discoveryFactory, tokenManagerFactory }) => { - const config = await configFactory('root'); - const discovery = await discoveryFactory('root'); - const tokenManager = await tokenManagerFactory('root'); - const permissions = ServerPermissionClient.fromConfig(config, { - discovery, - tokenManager, - }); - return async (_pluginId: string) => { - return permissions; + async factory({ config }) { + return async ({ discovery, tokenManager }) => { + return ServerPermissionClient.fromConfig(config, { + discovery, + tokenManager, + }); }; }, }); diff --git a/packages/backend-app-api/src/services/implementations/rootLoggerService.ts b/packages/backend-app-api/src/services/implementations/rootLoggerService.ts new file mode 100644 index 0000000000..d7da11723e --- /dev/null +++ b/packages/backend-app-api/src/services/implementations/rootLoggerService.ts @@ -0,0 +1,48 @@ +/* + * 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 { createRootLogger } from '@backstage/backend-common'; +import { + createServiceFactory, + Logger, + rootLoggerServiceRef, +} from '@backstage/backend-plugin-api'; +import { Logger as WinstonLogger } from 'winston'; + +class BackstageLogger implements Logger { + static fromWinston(logger: WinstonLogger): BackstageLogger { + return new BackstageLogger(logger); + } + + private constructor(private readonly winston: WinstonLogger) {} + + info(message: string, ...meta: any[]): void { + this.winston.info(message, ...meta); + } + + child(fields: { [name: string]: string }): Logger { + return new BackstageLogger(this.winston.child(fields)); + } +} + +/** @public */ +export const loggerFactory = createServiceFactory({ + service: rootLoggerServiceRef, + deps: {}, + async factory() { + return BackstageLogger.fromWinston(createRootLogger()); + }, +}); diff --git a/packages/backend-app-api/src/services/implementations/schedulerService.ts b/packages/backend-app-api/src/services/implementations/schedulerService.ts index 39dbf26ba9..40676344ec 100644 --- a/packages/backend-app-api/src/services/implementations/schedulerService.ts +++ b/packages/backend-app-api/src/services/implementations/schedulerService.ts @@ -17,6 +17,7 @@ import { configServiceRef, createServiceFactory, + pluginMetadataServiceRef, schedulerServiceRef, } from '@backstage/backend-plugin-api'; import { TaskScheduler } from '@backstage/backend-tasks'; @@ -25,13 +26,13 @@ import { TaskScheduler } from '@backstage/backend-tasks'; export const schedulerFactory = createServiceFactory({ service: schedulerServiceRef, deps: { - configFactory: configServiceRef, + config: configServiceRef, + plugin: pluginMetadataServiceRef, }, - factory: async ({ configFactory }) => { - const config = await configFactory('root'); + async factory({ config }) { const taskScheduler = TaskScheduler.fromConfig(config); - return async (pluginId: string) => { - return taskScheduler.forPlugin(pluginId); + return async ({ plugin }) => { + return taskScheduler.forPlugin(plugin.getId()); }; }, }); diff --git a/packages/backend-app-api/src/services/implementations/tokenManagerService.ts b/packages/backend-app-api/src/services/implementations/tokenManagerService.ts index 7767c17944..92f42c10db 100644 --- a/packages/backend-app-api/src/services/implementations/tokenManagerService.ts +++ b/packages/backend-app-api/src/services/implementations/tokenManagerService.ts @@ -27,32 +27,11 @@ import { ServerTokenManager } from '@backstage/backend-common'; export const tokenManagerFactory = createServiceFactory({ service: tokenManagerServiceRef, deps: { - configFactory: configServiceRef, - loggerFactory: loggerServiceRef, + config: configServiceRef, + logger: loggerServiceRef, }, - factory: async ({ configFactory, loggerFactory }) => { - const logger = await loggerFactory('root'); - const config = await configFactory('root'); - return async (_pluginId: string) => { - // doesn't the logger want to be inferred from the plugin tho here? - // maybe ... also why do we recreate it every time otherwise - // we should memoize on a per plugin right? so I think it's should be fine to re-use the plugin one - // we shouldn't recreate on a per plugin basis. - // hm - on the other hand, is this really ever called more than once? - // not this function right. should only be called when the plugin requests this serviceRef - // yeah so no need to worry about memo probably - // but we still want to scope the logger to the ServrTokenmanagfer>? - // mm sure maybe - // maybe in this case it doesn't provide so much value b - // oh hang on - isn't it up to THE MANAGER to make a child internally if it wants to do that - // so that it becomes a property intrinsic to that class, no matter how it's constructed - // or is that too much responsibility for it - making the constructor complex so to speak, making it harder to tweak that behavior - // this is not ultra efficient :) - - // I think the naming here is wrong to be gonest - // this isn't like the cache manager or the database manager - // the manager name is confusuion i think - // aye perhaps + async factory() { + return async ({ config, logger }) => { return ServerTokenManager.fromConfig(config, { logger: loggerToWinstonLogger(logger), }); diff --git a/packages/backend-app-api/src/services/implementations/urlReaderService.ts b/packages/backend-app-api/src/services/implementations/urlReaderService.ts index df353a52d2..d7d7502a08 100644 --- a/packages/backend-app-api/src/services/implementations/urlReaderService.ts +++ b/packages/backend-app-api/src/services/implementations/urlReaderService.ts @@ -27,15 +27,14 @@ import { export const urlReaderFactory = createServiceFactory({ service: urlReaderServiceRef, deps: { - configFactory: configServiceRef, - loggerFactory: loggerServiceRef, + config: configServiceRef, + logger: loggerServiceRef, }, - factory: async ({ configFactory, loggerFactory }) => { - return async (pluginId: string) => { - const logger = await loggerFactory(pluginId); + async factory() { + return async ({ config, logger }) => { return UrlReaders.default({ + config, logger: loggerToWinstonLogger(logger), - config: await configFactory(pluginId), }); }; }, diff --git a/packages/backend-app-api/src/wiring/BackendInitializer.ts b/packages/backend-app-api/src/wiring/BackendInitializer.ts index afb5250504..c86cd8382d 100644 --- a/packages/backend-app-api/src/wiring/BackendInitializer.ts +++ b/packages/backend-app-api/src/wiring/BackendInitializer.ts @@ -50,11 +50,12 @@ export class BackendInitializer { if (extensionPoint) { result.set(name, extensionPoint); } else { - const factory = await this.#serviceHolder.get( + const impl = await this.#serviceHolder.get( ref as ServiceRef, + pluginId, ); - if (factory) { - result.set(name, await factory(pluginId)); + if (impl) { + result.set(name, impl); } else { missingRefs.add(ref); } diff --git a/packages/backend-plugin-api/src/services/definitions/configServiceRef.ts b/packages/backend-plugin-api/src/services/definitions/configServiceRef.ts index ba5dcacdc8..f17c5f57bc 100644 --- a/packages/backend-plugin-api/src/services/definitions/configServiceRef.ts +++ b/packages/backend-plugin-api/src/services/definitions/configServiceRef.ts @@ -21,5 +21,6 @@ import { createServiceRef } from '../system/types'; * @public */ export const configServiceRef = createServiceRef({ - id: 'core.config', + id: 'core.root.config', + scope: 'root', }); diff --git a/packages/backend-plugin-api/src/services/definitions/index.ts b/packages/backend-plugin-api/src/services/definitions/index.ts index fb204df495..44ccb62978 100644 --- a/packages/backend-plugin-api/src/services/definitions/index.ts +++ b/packages/backend-plugin-api/src/services/definitions/index.ts @@ -26,4 +26,5 @@ export { discoveryServiceRef } from './discoveryServiceRef'; export { tokenManagerServiceRef } from './tokenManagerServiceRef'; export { permissionsServiceRef } from './permissionsServiceRef'; export { schedulerServiceRef } from './schedulerServiceRef'; +export { rootLoggerServiceRef } from './rootLoggerServiceRef'; export { pluginMetadataServiceRef } from './pluginMetadataServiceRef'; diff --git a/packages/backend-plugin-api/src/services/definitions/rootLoggerServiceRef.ts b/packages/backend-plugin-api/src/services/definitions/rootLoggerServiceRef.ts new file mode 100644 index 0000000000..62e22c53d9 --- /dev/null +++ b/packages/backend-plugin-api/src/services/definitions/rootLoggerServiceRef.ts @@ -0,0 +1,26 @@ +/* + * 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 { createServiceRef } from '../system/types'; +import { Logger } from './loggerServiceRef'; + +/** + * @public + */ +export const rootLoggerServiceRef = createServiceRef({ + id: 'core.root.logger', + scope: 'root', +}); diff --git a/packages/backend-plugin-api/src/services/system/index.ts b/packages/backend-plugin-api/src/services/system/index.ts index 817b0a590f..8c666af42e 100644 --- a/packages/backend-plugin-api/src/services/system/index.ts +++ b/packages/backend-plugin-api/src/services/system/index.ts @@ -14,11 +14,5 @@ * limitations under the License. */ -export type { - ServiceRef, - TypesToServiceRef, - DepsToDepFactories, - FactoryFunc, - ServiceFactory, -} from './types'; +export type { ServiceRef, TypesToServiceRef, ServiceFactory } from './types'; export { createServiceRef, createServiceFactory } from './types'; diff --git a/packages/backend-plugin-api/src/services/system/types.ts b/packages/backend-plugin-api/src/services/system/types.ts index 3edee2ec0f..a7bce3d220 100644 --- a/packages/backend-plugin-api/src/services/system/types.ts +++ b/packages/backend-plugin-api/src/services/system/types.ts @@ -116,6 +116,7 @@ export function createServiceRef(options: { }; } +/** @ignore */ type ServiceRefsToInstances< T extends { [key in string]: ServiceRef }, TScope extends 'root' | 'plugin' = 'root' | 'plugin', diff --git a/plugins/catalog-node/src/catalogService.ts b/plugins/catalog-node/src/catalogService.ts index ddfff75462..c6a8fb44f5 100644 --- a/plugins/catalog-node/src/catalogService.ts +++ b/plugins/catalog-node/src/catalogService.ts @@ -31,13 +31,11 @@ export const catalogServiceRef = createServiceRef({ createServiceFactory({ service, deps: { - discoveryFactory: discoveryServiceRef, + discoveryApi: discoveryServiceRef, }, - factory: async ({ discoveryFactory }) => { - const discoveryApi = await discoveryFactory('root'); - const catalogClient = new CatalogClient({ discoveryApi }); - return async _pluginId => { - return catalogClient; + async factory() { + return async ({ discoveryApi }) => { + return new CatalogClient({ discoveryApi }); }; }, }), From 06ad1b16de01f67d529e202e0aed997fd901b964 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 9 Sep 2022 16:15:09 +0200 Subject: [PATCH 091/110] update API reports + fixes Co-authored-by: blam Signed-off-by: Patrik Oldsberg --- packages/backend-plugin-api/api-report.md | 108 ++++++++++++------ .../src/services/definitions/index.ts | 1 + .../src/services/system/types.ts | 5 +- plugins/catalog-node/api-report.md | 2 +- 4 files changed, 77 insertions(+), 39 deletions(-) diff --git a/packages/backend-plugin-api/api-report.md b/packages/backend-plugin-api/api-report.md index 30e58237af..3344576db8 100644 --- a/packages/backend-plugin-api/api-report.md +++ b/packages/backend-plugin-api/api-report.md @@ -66,10 +66,10 @@ export interface BackendRegistrationPoints { } // @public (undocumented) -export const cacheServiceRef: ServiceRef; +export const cacheServiceRef: ServiceRef; // @public (undocumented) -export const configServiceRef: ServiceRef; +export const configServiceRef: ServiceRef; // @public (undocumented) export function createBackendModule< @@ -105,22 +105,25 @@ export function createExtensionPoint(options: { // @public (undocumented) export function createServiceFactory< TService, + TScope extends 'root' | 'plugin', TImpl extends TService, TDeps extends { - [name in string]: unknown; + [name in string]: ServiceRef; }, TOpts extends | { [name in string]: unknown; } | undefined = undefined, ->(factory: { - service: ServiceRef; - deps: TypesToServiceRef; +>(config: { + service: ServiceRef; + deps: TDeps; factory( - deps: DepsToDepFactories, + deps: ServiceRefsToInstances, options: TOpts, - ): Promise>; + ): TScope extends 'root' + ? Promise + : Promise<(deps: ServiceRefsToInstances) => Promise>; }): undefined extends TOpts ? (options?: TOpts) => ServiceFactory : (options: TOpts) => ServiceFactory; @@ -128,21 +131,26 @@ export function createServiceFactory< // @public (undocumented) export function createServiceRef(options: { id: string; + scope?: 'plugin'; defaultFactory?: ( - service: ServiceRef, + service: ServiceRef, ) => Promise | (() => ServiceFactory)>; -}): ServiceRef; +}): ServiceRef; // @public (undocumented) -export const databaseServiceRef: ServiceRef; +export function createServiceRef(options: { + id: string; + scope: 'root'; + defaultFactory?: ( + service: ServiceRef, + ) => Promise | (() => ServiceFactory)>; +}): ServiceRef; // @public (undocumented) -export type DepsToDepFactories = { - [key in keyof T]: (pluginId: string) => Promise; -}; +export const databaseServiceRef: ServiceRef; // @public (undocumented) -export const discoveryServiceRef: ServiceRef; +export const discoveryServiceRef: ServiceRef; // @public export type ExtensionPoint = { @@ -152,9 +160,6 @@ export type ExtensionPoint = { $$ref: 'extension-point'; }; -// @public (undocumented) -export type FactoryFunc = (pluginId: string) => Promise; - // @public (undocumented) export interface HttpRouterService { // (undocumented) @@ -162,7 +167,7 @@ export interface HttpRouterService { } // @public (undocumented) -export const httpRouterServiceRef: ServiceRef; +export const httpRouterServiceRef: ServiceRef; // @public (undocumented) export interface Logger { @@ -173,7 +178,7 @@ export interface Logger { } // @public (undocumented) -export const loggerServiceRef: ServiceRef; +export const loggerServiceRef: ServiceRef; // @public (undocumented) export function loggerToWinstonLogger( @@ -183,33 +188,66 @@ export function loggerToWinstonLogger( // @public (undocumented) export const permissionsServiceRef: ServiceRef< - PermissionAuthorizer | PermissionEvaluator + PermissionAuthorizer | PermissionEvaluator, + 'plugin' >; // @public (undocumented) -export const schedulerServiceRef: ServiceRef; +export interface PluginMetadata { + // (undocumented) + getId(): string; +} // @public (undocumented) -export type ServiceFactory = { - service: ServiceRef; - deps: { - [key in string]: ServiceRef; - }; - factory(deps: { - [key in string]: unknown; - }): Promise>; -}; +export const pluginMetadataServiceRef: ServiceRef; + +// @public (undocumented) +export const rootLoggerServiceRef: ServiceRef; + +// @public (undocumented) +export const schedulerServiceRef: ServiceRef; + +// @public (undocumented) +export type ServiceFactory = + | { + scope: 'root'; + service: ServiceRef; + deps: { + [key in string]: ServiceRef; + }; + factory(deps: { + [key in string]: unknown; + }): Promise; + } + | { + scope: 'plugin'; + service: ServiceRef; + deps: { + [key in string]: ServiceRef; + }; + factory(deps: { + [key in string]: unknown; + }): Promise< + (deps: { + [key in string]: unknown; + }) => Promise + >; + }; // @public -export type ServiceRef = { +export type ServiceRef< + TService, + TScope extends 'root' | 'plugin' = 'root' | 'plugin', +> = { id: string; - T: T; + scope: TScope; + T: TService; toString(): string; $$ref: 'service'; }; // @public (undocumented) -export const tokenManagerServiceRef: ServiceRef; +export const tokenManagerServiceRef: ServiceRef; // @public (undocumented) export type TypesToServiceRef = { @@ -217,5 +255,5 @@ export type TypesToServiceRef = { }; // @public (undocumented) -export const urlReaderServiceRef: ServiceRef; +export const urlReaderServiceRef: ServiceRef; ``` diff --git a/packages/backend-plugin-api/src/services/definitions/index.ts b/packages/backend-plugin-api/src/services/definitions/index.ts index 44ccb62978..e5f032ef60 100644 --- a/packages/backend-plugin-api/src/services/definitions/index.ts +++ b/packages/backend-plugin-api/src/services/definitions/index.ts @@ -28,3 +28,4 @@ export { permissionsServiceRef } from './permissionsServiceRef'; export { schedulerServiceRef } from './schedulerServiceRef'; export { rootLoggerServiceRef } from './rootLoggerServiceRef'; export { pluginMetadataServiceRef } from './pluginMetadataServiceRef'; +export type { PluginMetadata } from './pluginMetadataServiceRef'; diff --git a/packages/backend-plugin-api/src/services/system/types.ts b/packages/backend-plugin-api/src/services/system/types.ts index a7bce3d220..d20fd6fd8f 100644 --- a/packages/backend-plugin-api/src/services/system/types.ts +++ b/packages/backend-plugin-api/src/services/system/types.ts @@ -69,9 +69,7 @@ export type ServiceFactory = >; }; -/** - * @public - */ +/** @public */ export function createServiceRef(options: { id: string; scope?: 'plugin'; @@ -79,6 +77,7 @@ export function createServiceRef(options: { service: ServiceRef, ) => Promise | (() => ServiceFactory)>; }): ServiceRef; +/** @public */ export function createServiceRef(options: { id: string; scope: 'root'; diff --git a/plugins/catalog-node/api-report.md b/plugins/catalog-node/api-report.md index 3873e3376d..525516be54 100644 --- a/plugins/catalog-node/api-report.md +++ b/plugins/catalog-node/api-report.md @@ -109,7 +109,7 @@ export type CatalogProcessorResult = | CatalogProcessorRefreshKeysResult; // @alpha -export const catalogServiceRef: ServiceRef; +export const catalogServiceRef: ServiceRef; // @public export type DeferredEntity = { From 409ed984e8e506abc9327cb8381c2a12aa59b5ce Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 9 Sep 2022 18:26:34 +0200 Subject: [PATCH 092/110] changesets: added changesets for scoped services Signed-off-by: Patrik Oldsberg --- .changeset/flat-humans-dance.md | 5 +++++ .changeset/quick-items-invite.md | 5 +++++ .changeset/slow-phones-count.md | 5 +++++ 3 files changed, 15 insertions(+) create mode 100644 .changeset/flat-humans-dance.md create mode 100644 .changeset/quick-items-invite.md create mode 100644 .changeset/slow-phones-count.md diff --git a/.changeset/flat-humans-dance.md b/.changeset/flat-humans-dance.md new file mode 100644 index 0000000000..ea7571f5bc --- /dev/null +++ b/.changeset/flat-humans-dance.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-plugin-api': patch +--- + +Service are now scoped to either `'plugin'` or `'root'` scope. Service factories have been updated to provide dependency instances directly rather than factory functions. diff --git a/.changeset/quick-items-invite.md b/.changeset/quick-items-invite.md new file mode 100644 index 0000000000..33f90cb662 --- /dev/null +++ b/.changeset/quick-items-invite.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-node': patch +--- + +Updated usage of experimental backend service APIs. diff --git a/.changeset/slow-phones-count.md b/.changeset/slow-phones-count.md new file mode 100644 index 0000000000..ce2f9c8432 --- /dev/null +++ b/.changeset/slow-phones-count.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-app-api': patch +--- + +Updated service implementations and backend wiring to support scoped service. From ab014e17d99bf888b4bf571316b8de7e098cb2f3 Mon Sep 17 00:00:00 2001 From: John Kilmister Date: Fri, 9 Sep 2022 20:20:22 +0100 Subject: [PATCH 093/110] Added new docs for plugin feature flags Signed-off-by: John Kilmister --- docs/plugins/feature-flags.md | 64 +++++++++++++++++++++++++++++++++++ mkdocs.yml | 2 +- 2 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 docs/plugins/feature-flags.md diff --git a/docs/plugins/feature-flags.md b/docs/plugins/feature-flags.md new file mode 100644 index 0000000000..466fdace21 --- /dev/null +++ b/docs/plugins/feature-flags.md @@ -0,0 +1,64 @@ +--- +id: feature-flags +title: Feature Flags +description: Details the process of defining setting and reading a plugin feature flag. +--- + +Backstage offers the ability to define feature flags inside a plugin. This allows you to restrict parts of your plugin to those individual users who have toggled the feature flag to on. + +This page describes the process of defining setting and reading a plugin feature flag. If you are looking for using Feature flags with software templates that can be found under [Writing Templates](https://backstage.io/docs/features/software-templates/writing-templates#remove-sections-or-fields-based-on-feature-flags). + +## Defining a Feature Flag + +Before using a feature flag we must first define it. This is done when we create the plugin by passing the name of the feature flag into the `featureFlags` array. + +```ts +/* src/plugin.ts */ +import { createPlugin, createRouteRef } from '@backstage/core-plugin-api'; +import ExampleComponent from './components/ExampleComponent'; + +export const examplePlugin = createPlugin({ + id: 'example', + routes: { + root: rootRouteRef, + }, + featureFlags: [{ name: 'show-example-feature' }], +}); +``` + +## Enabling Feature Flags + +Feature flags are defaulted to off and can be updated by individual users in the backstage interface. + +These are set by navigating to the page under `Settings` > `Feature Flags`. + +The users selection is saved in the users browsers local storage. Once toggled it may be required for a user to refresh the page to see any new changes. + +## FeatureFlagged Component + +The easiest way to control content based on the state of a feature flag is to use the [FeatureFlagged](https://backstage.io/docs/reference/core-app-api.featureflagged) component. + +```ts +import { FeatureFlagged } from '@backstage/core-app-api' + +... + + + + + + + + +``` + +## Evaluating Feature Flag State + +It is also possible to test the feature flag state using the [FeatureFlags Api](https://backstage.io/docs/reference/core-plugin-api.featureflagsapi). + +```ts +import { useApi, featureFlagsApiRef } from '@backstage/core-plugin-api'; + +const featureFlagsApi = useApi(featureFlagsApiRef); +const isOn = featureFlagsApi.isActive('show-example-feature'); +``` diff --git a/mkdocs.yml b/mkdocs.yml index 7368602298..0d386e63fa 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -127,10 +127,10 @@ nav: - Create a Backstage Plugin: 'plugins/create-a-plugin.md' - Plugin Development: 'plugins/plugin-development.md' - Structure of a plugin: 'plugins/structure-of-a-plugin.md' - - Plugin Development: 'plugins/plugin-development.md' - Integrate into the Software Catalog: 'plugins/integrating-plugin-into-software-catalog.md' - Composability System: 'plugins/composability.md' - Plugin Analytics: 'plugins/analytics.md' + - Feature Flags: 'plugins/feature-flags.md' - Backends and APIs: - Proxying: 'plugins/proxying.md' - Backend plugin: 'plugins/backend-plugin.md' From 073db8e0b84762a82c5eb2c8c1a5c8d233431c74 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 9 Sep 2022 19:45:07 +0000 Subject: [PATCH 094/110] fix(deps): update dependency @graphql-tools/schema to v9.0.4 Signed-off-by: Renovate Bot --- yarn.lock | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/yarn.lock b/yarn.lock index 2f616154ca..6a28ee0ab2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8683,15 +8683,15 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/merge@npm:8.3.5": - version: 8.3.5 - resolution: "@graphql-tools/merge@npm:8.3.5" +"@graphql-tools/merge@npm:8.3.6": + version: 8.3.6 + resolution: "@graphql-tools/merge@npm:8.3.6" dependencies: - "@graphql-tools/utils": 8.11.0 + "@graphql-tools/utils": 8.12.0 tslib: ^2.4.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: c834619acabe0587d7528a795e2e7527b09e528486b965f4638f2bd831e0c1ac6439fb22e82d3512329cf293f69bca4db0e4696a5aac88748a09cb6de6597fb4 + checksum: 3e45ebff0dce9524e72c4af1d2b9799c16515c1236290e07cd68fb2226c4e54734e2444d89a64b387b7ba991d15c6f948fdfc20c77a74b1d24babddd865ff32a languageName: node linkType: hard @@ -8805,16 +8805,16 @@ __metadata: linkType: hard "@graphql-tools/schema@npm:^9.0.0": - version: 9.0.3 - resolution: "@graphql-tools/schema@npm:9.0.3" + version: 9.0.4 + resolution: "@graphql-tools/schema@npm:9.0.4" dependencies: - "@graphql-tools/merge": 8.3.5 - "@graphql-tools/utils": 8.11.0 + "@graphql-tools/merge": 8.3.6 + "@graphql-tools/utils": 8.12.0 tslib: ^2.4.0 value-or-promise: 1.0.11 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 7ce960e3af637de592f7859db5841e3f0974997bd48767efab163bbafdc88a40e95a789f1f7cb7a178fb53b89f5a5bc881af5f8d796c096ce09386340b85ca4f + checksum: 0644ba225ff7fb03c6fb7f026b6a77a4ac5dd14fd10bb562ea0072bfe0258620fd4789b851b0b97007db8754d0b7d88a1061bb98bacc679b22e2eb7706e79e0e languageName: node linkType: hard @@ -8868,14 +8868,14 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/utils@npm:8.11.0": - version: 8.11.0 - resolution: "@graphql-tools/utils@npm:8.11.0" +"@graphql-tools/utils@npm:8.12.0": + version: 8.12.0 + resolution: "@graphql-tools/utils@npm:8.12.0" dependencies: tslib: ^2.4.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 2a223ba056c3c3851defa87a4e3a83fe523e5946f63ccdc8a181c7b290abcc9c3712cb0fb6a33edc8ae072c6530e4b667dc822a8debd9f80fea937a5b253eb26 + checksum: 24edc6ba3bcfa9a4c1d1d37117c3f96d847beed9638325083c32c6ec9674729dc89fc8cc389d317ae5d9dba22e91443bd9788f1dc8de91a1b6f1e592112bd48f languageName: node linkType: hard From 90aefde6d3e51c4c3b8ef7c234f77fdb913a8447 Mon Sep 17 00:00:00 2001 From: John Kilmister Date: Sat, 10 Sep 2022 12:02:48 +0100 Subject: [PATCH 095/110] Updated case on feature flag text Signed-off-by: John Kilmister --- docs/plugins/feature-flags.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/plugins/feature-flags.md b/docs/plugins/feature-flags.md index 466fdace21..a26eb49a9b 100644 --- a/docs/plugins/feature-flags.md +++ b/docs/plugins/feature-flags.md @@ -6,7 +6,7 @@ description: Details the process of defining setting and reading a plugin featur Backstage offers the ability to define feature flags inside a plugin. This allows you to restrict parts of your plugin to those individual users who have toggled the feature flag to on. -This page describes the process of defining setting and reading a plugin feature flag. If you are looking for using Feature flags with software templates that can be found under [Writing Templates](https://backstage.io/docs/features/software-templates/writing-templates#remove-sections-or-fields-based-on-feature-flags). +This page describes the process of defining setting and reading a plugin feature flag. If you are looking for using feature flags with software templates that can be found under [Writing Templates](https://backstage.io/docs/features/software-templates/writing-templates#remove-sections-or-fields-based-on-feature-flags). ## Defining a Feature Flag From 329ed2b9c7babfc633644e6e16aaecf244586908 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 10 Sep 2022 14:01:55 +0200 Subject: [PATCH 096/110] dev-utils: fix route discovery with react-router stable Signed-off-by: Patrik Oldsberg --- .changeset/metal-candles-tease.md | 5 +++++ packages/dev-utils/src/devApp/render.tsx | 15 +++++++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) create mode 100644 .changeset/metal-candles-tease.md diff --git a/.changeset/metal-candles-tease.md b/.changeset/metal-candles-tease.md new file mode 100644 index 0000000000..a48df562e4 --- /dev/null +++ b/.changeset/metal-candles-tease.md @@ -0,0 +1,5 @@ +--- +'@backstage/dev-utils': patch +--- + +Fixed routing when using React Router v6 stable. diff --git a/packages/dev-utils/src/devApp/render.tsx b/packages/dev-utils/src/devApp/render.tsx index 5cd77528a4..e04779b4d1 100644 --- a/packages/dev-utils/src/devApp/render.tsx +++ b/packages/dev-utils/src/devApp/render.tsx @@ -46,16 +46,23 @@ import { Box } from '@material-ui/core'; import BookmarkIcon from '@material-ui/icons/Bookmark'; import React, { ComponentType, ReactNode } from 'react'; import ReactDOM from 'react-dom'; -import { Route } from 'react-router'; +import { createRoutesFromChildren, Route } from 'react-router'; import { SidebarThemeSwitcher } from './SidebarThemeSwitcher'; -const GatheringRoute: (props: { +export function isReactRouterBeta(): boolean { + const [obj] = createRoutesFromChildren(} />); + return !obj.index; +} + +const MaybeGatheringRoute: (props: { path: string; element: JSX.Element; children?: ReactNode; }) => JSX.Element = ({ element }) => element; -attachComponentData(GatheringRoute, 'core.gatherMountPoints', true); +if (isReactRouterBeta()) { + attachComponentData(MaybeGatheringRoute, 'core.gatherMountPoints', true); +} /** @public */ export type DevAppPageOptions = { @@ -136,7 +143,7 @@ export class DevAppBuilder { ); } this.routes.push( - Date: Fri, 9 Sep 2022 18:10:48 +0200 Subject: [PATCH 097/110] Bazaar plugin: Remove 'Router' as 'RoutedTabs' children During the 'react-router-dom' upgrades the Bazaar routing broke. This patch removes the wrapping 'Router' from the 'RouterTabs' children. Opening the Bazaar plugin would result in the followin error: "A is only ever to be used as the child of element, never rendered directly. Please wrap your in a ." Also removed 'react-router-dom' as a peer dependency of the bazaar plugin. Signed-off-by: Niklas Aronsson --- .changeset/gorgeous-boats-prove.md | 5 +++++ plugins/bazaar/package.json | 3 +-- plugins/bazaar/src/components/HomePage/HomePage.tsx | 5 ++--- yarn.lock | 1 - 4 files changed, 8 insertions(+), 6 deletions(-) create mode 100644 .changeset/gorgeous-boats-prove.md diff --git a/.changeset/gorgeous-boats-prove.md b/.changeset/gorgeous-boats-prove.md new file mode 100644 index 0000000000..46e72db735 --- /dev/null +++ b/.changeset/gorgeous-boats-prove.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-bazaar': patch +--- + +Fixed broken routing by removing the wrapping `Router` from the `RoutedTabs` children. diff --git a/plugins/bazaar/package.json b/plugins/bazaar/package.json index 43f443ffce..f78a4f08fe 100644 --- a/plugins/bazaar/package.json +++ b/plugins/bazaar/package.json @@ -41,8 +41,7 @@ "react-use": "^17.2.4" }, "peerDependencies": { - "react": "^16.13.1 || ^17.0.0", - "react-router-dom": "6.0.0-beta.0 || ^6.3.0" + "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { "@backstage/cli": "^0.19.0-next.1", diff --git a/plugins/bazaar/src/components/HomePage/HomePage.tsx b/plugins/bazaar/src/components/HomePage/HomePage.tsx index b34b7ac949..cec7171c20 100644 --- a/plugins/bazaar/src/components/HomePage/HomePage.tsx +++ b/plugins/bazaar/src/components/HomePage/HomePage.tsx @@ -16,7 +16,6 @@ import React from 'react'; import { Header, RoutedTabs } from '@backstage/core-components'; -import { Route } from 'react-router-dom'; import { SortView } from '../SortView'; import { About } from '../About'; @@ -25,12 +24,12 @@ export const HomePage = () => { { path: '/', title: 'Home', - children: } />, + children: , }, { path: '/about', title: 'About', - children: } />, + children: , }, ]; diff --git a/yarn.lock b/yarn.lock index d50db888eb..d8e81821f8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4168,7 +4168,6 @@ __metadata: react-use: ^17.2.4 peerDependencies: react: ^16.13.1 || ^17.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 languageName: unknown linkType: soft From 1d2e28c26f826ec0eb0c6c1c0288db0cc738ee6e Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sun, 11 Sep 2022 14:25:00 +0200 Subject: [PATCH 098/110] core-app-api: clean up log output in tests Signed-off-by: Patrik Oldsberg --- .../core-app-api/src/routing/RoutingProvider.compat.test.tsx | 3 +-- .../core-app-api/src/routing/RoutingProvider.stable.test.tsx | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/core-app-api/src/routing/RoutingProvider.compat.test.tsx b/packages/core-app-api/src/routing/RoutingProvider.compat.test.tsx index 1ff80fcacc..ac54780f7c 100644 --- a/packages/core-app-api/src/routing/RoutingProvider.compat.test.tsx +++ b/packages/core-app-api/src/routing/RoutingProvider.compat.test.tsx @@ -251,7 +251,6 @@ describe.each(['beta', 'stable'])('react-router %s', rrVersion => { await new Promise(r => setTimeout(r, 500)); - rendered.debug(); await expect( rendered.findByText('Path at inside: /foo/bar'), ).resolves.toBeInTheDocument(); @@ -344,7 +343,6 @@ describe.each(['beta', 'stable'])('react-router %s', rrVersion => { await expect( rendered.findByText('Path at inside: /foo/blob/baz'), ).resolves.toBeInTheDocument(); - rendered.debug(); }); it('should throw errors for routing to other routeRefs with unsupported parameters', () => { @@ -352,6 +350,7 @@ describe.each(['beta', 'stable'])('react-router %s', rrVersion => { const root = ( + } /> }> { await expect( rendered.findByText('Path at inside: /foo/blob/baz'), ).resolves.toBeInTheDocument(); - rendered.debug(); }); it('should throw errors for routing to other routeRefs with unsupported parameters', () => { const root = ( + } /> }> Date: Sun, 11 Sep 2022 14:32:30 +0200 Subject: [PATCH 099/110] core-plugin-api: clean up log output in tests Signed-off-by: Patrik Oldsberg --- .../src/extensions/extensions.test.tsx | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/packages/core-plugin-api/src/extensions/extensions.test.tsx b/packages/core-plugin-api/src/extensions/extensions.test.tsx index dcc92d9d47..0601c01a17 100644 --- a/packages/core-plugin-api/src/extensions/extensions.test.tsx +++ b/packages/core-plugin-api/src/extensions/extensions.test.tsx @@ -61,11 +61,19 @@ describe('extensions', () => { const Component = () =>
    ; const routeRef = createRouteRef({ id: 'foo' }); - const extension1 = createComponentExtension({ - component: { - sync: Component, - }, + let extension1: ReturnType; + const { warn } = withLogCollector(['warn'], () => { + extension1 = createComponentExtension({ + component: { + sync: Component, + }, + }); }); + expect(warn).toEqual([ + expect.stringMatching( + /^Declaring extensions without name is DEPRECATED. /, + ), + ]); const extension2 = createRoutableExtension({ name: 'Extension2', @@ -73,7 +81,7 @@ describe('extensions', () => { mountPoint: routeRef, }); - const ExtensionComponent1 = plugin.provide(extension1); + const ExtensionComponent1 = plugin.provide(extension1!); const ExtensionComponent2 = plugin.provide(extension2); const element1 = ; From 5ecca7e44b9f5b67dfcd38b0b390c105f24c3e3d Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sun, 11 Sep 2022 15:24:37 +0200 Subject: [PATCH 100/110] config-loader: remove logging from remote config watch Signed-off-by: Patrik Oldsberg --- .changeset/empty-colts-whisper.md | 5 +++++ packages/config-loader/src/loader.ts | 4 ---- 2 files changed, 5 insertions(+), 4 deletions(-) create mode 100644 .changeset/empty-colts-whisper.md diff --git a/.changeset/empty-colts-whisper.md b/.changeset/empty-colts-whisper.md new file mode 100644 index 0000000000..1eabe8c58c --- /dev/null +++ b/.changeset/empty-colts-whisper.md @@ -0,0 +1,5 @@ +--- +'@backstage/config-loader': patch +--- + +No longer log when reloading remote config. diff --git a/packages/config-loader/src/loader.ts b/packages/config-loader/src/loader.ts index 9537d2d945..f5ce0eb80c 100644 --- a/packages/config-loader/src/loader.ts +++ b/packages/config-loader/src/loader.ts @@ -287,13 +287,10 @@ export async function loadConfig( let handle: NodeJS.Timeout | undefined; try { handle = setInterval(async () => { - console.info(`Checking for config update`); const newRemoteConfigs = await loadRemoteConfigFiles(); if (await hasConfigChanged(remoteConfigs, newRemoteConfigs)) { remoteConfigs = newRemoteConfigs; - console.info(`Remote config change, reloading config ...`); watchProp.onChange([...remoteConfigs, ...fileConfigs, ...envConfigs]); - console.info(`Remote config reloaded`); } }, remoteProp.reloadIntervalSeconds * 1000); } catch (error) { @@ -303,7 +300,6 @@ export async function loadConfig( if (watchProp.stopSignal) { watchProp.stopSignal.then(() => { if (handle !== undefined) { - console.info(`Stopping remote config watch`); clearInterval(handle); handle = undefined; } From 50d6c7e07e23a8b24be93587a122e69a91aaeaed Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sun, 11 Sep 2022 15:51:31 +0200 Subject: [PATCH 101/110] create-app: clean up log output in tests Signed-off-by: Patrik Oldsberg --- packages/create-app/src/lib/tasks.test.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/create-app/src/lib/tasks.test.ts b/packages/create-app/src/lib/tasks.test.ts index 6a312436bf..d2efe81b90 100644 --- a/packages/create-app/src/lib/tasks.test.ts +++ b/packages/create-app/src/lib/tasks.test.ts @@ -19,6 +19,7 @@ import mockFs from 'mock-fs'; import child_process from 'child_process'; import path from 'path'; import { + Task, buildAppTask, checkAppExistsTask, checkPathExistsTask, @@ -27,6 +28,13 @@ import { templatingTask, } from './tasks'; +jest.spyOn(Task, 'log').mockReturnValue(undefined); +jest.spyOn(Task, 'error').mockReturnValue(undefined); +jest.spyOn(Task, 'section').mockReturnValue(undefined); +jest + .spyOn(Task, 'forItem') + .mockImplementation((_a, _b, taskFunc) => taskFunc()); + jest.mock('child_process'); // By mocking this the filesystem mocks won't mess with reading all of the package.jsons From 3742ccbfc319b4ff5fb2d7ef232c722d650afb91 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sun, 11 Sep 2022 16:52:07 +0200 Subject: [PATCH 102/110] core-components: avoid logging in GaugeCard test Signed-off-by: Patrik Oldsberg --- .../src/components/ProgressBars/GaugeCard.test.tsx | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/core-components/src/components/ProgressBars/GaugeCard.test.tsx b/packages/core-components/src/components/ProgressBars/GaugeCard.test.tsx index ea29a288e6..e4d84ca059 100644 --- a/packages/core-components/src/components/ProgressBars/GaugeCard.test.tsx +++ b/packages/core-components/src/components/ProgressBars/GaugeCard.test.tsx @@ -15,7 +15,7 @@ */ import React from 'react'; -import { renderInTestApp } from '@backstage/test-utils'; +import { renderInTestApp, withLogCollector } from '@backstage/test-utils'; import { GaugeCard } from './GaugeCard'; @@ -40,7 +40,12 @@ describe('', () => { it('handles invalid numbers', async () => { const badProps = { title: 'Tingle upgrade', progress: 'hejjo' } as any; - const { getByText } = await renderInTestApp(); - expect(getByText(/N\/A.*/)).toBeInTheDocument(); + const { error } = await withLogCollector(async () => { + const { getByText } = await renderInTestApp(); + expect(getByText(/N\/A.*/)).toBeInTheDocument(); + }); + expect(error).toEqual([ + expect.stringMatching(/^Warning: `NaN` is an invalid value/), + ]); }); }); From a1a3a5f16a4ce1822e370673fda2f9e3a7d0a5da Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sun, 11 Sep 2022 16:52:18 +0200 Subject: [PATCH 103/110] core-components: avoid logging in HeaderTabs test Signed-off-by: Patrik Oldsberg --- .../core-components/src/layout/HeaderTabs/HeaderTabs.test.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/core-components/src/layout/HeaderTabs/HeaderTabs.test.tsx b/packages/core-components/src/layout/HeaderTabs/HeaderTabs.test.tsx index 2501785701..f9348ffa9a 100644 --- a/packages/core-components/src/layout/HeaderTabs/HeaderTabs.test.tsx +++ b/packages/core-components/src/layout/HeaderTabs/HeaderTabs.test.tsx @@ -58,6 +58,7 @@ describe('', () => { const TextualBadge = React.forwardRef((props, ref) => ( From 4710e6eeb640edd8f61142a2710bb3020be87255 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sun, 11 Sep 2022 16:54:25 +0200 Subject: [PATCH 104/110] core-components: avoid logging in HomepageTimer test Signed-off-by: Patrik Oldsberg --- .../HomepageTimer/HomepageTimer.test.tsx | 27 ++++++++++++------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/packages/core-components/src/layout/HomepageTimer/HomepageTimer.test.tsx b/packages/core-components/src/layout/HomepageTimer/HomepageTimer.test.tsx index 3d9dfe70a1..9a7a8ac47d 100644 --- a/packages/core-components/src/layout/HomepageTimer/HomepageTimer.test.tsx +++ b/packages/core-components/src/layout/HomepageTimer/HomepageTimer.test.tsx @@ -14,7 +14,11 @@ * limitations under the License. */ -import { renderWithEffects, TestApiProvider } from '@backstage/test-utils'; +import { + renderWithEffects, + TestApiProvider, + withLogCollector, +} from '@backstage/test-utils'; import { HomepageTimer } from './HomepageTimer'; import React from 'react'; import { lightTheme } from '@backstage/theme'; @@ -35,13 +39,18 @@ it('changes default timezone to GMT', async () => { context: 'test', }); - const rendered = await renderWithEffects( - - - - - , - ); + const { warn } = await withLogCollector(async () => { + const rendered = await renderWithEffects( + + + + + , + ); - expect(rendered.getByText('GMT')).toBeInTheDocument(); + expect(rendered.getByText('GMT')).toBeInTheDocument(); + }); + expect(warn).toEqual([ + 'The timezone America/New_Pork is invalid. Defaulting to GMT', + ]); }); From 87de8ed3f7e6784381f2eab535c3d8399e99c472 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sun, 11 Sep 2022 16:57:35 +0200 Subject: [PATCH 105/110] core-components: fix usage of invalid elements in DependencyGrape tests Signed-off-by: Patrik Oldsberg --- .../components/DependencyGraph/Edge.test.tsx | 27 ++++++++++++++----- .../components/DependencyGraph/Node.test.tsx | 23 +++++++++++----- 2 files changed, 37 insertions(+), 13 deletions(-) diff --git a/packages/core-components/src/components/DependencyGraph/Edge.test.tsx b/packages/core-components/src/components/DependencyGraph/Edge.test.tsx index 82f0435ebd..db6fbe7552 100644 --- a/packages/core-components/src/components/DependencyGraph/Edge.test.tsx +++ b/packages/core-components/src/components/DependencyGraph/Edge.test.tsx @@ -38,7 +38,7 @@ const id = { const setEdge = jest.fn(); const renderElement = jest.fn((props: RenderLabelProps) => ( - {props.edge.label} +
    {props.edge.label}
    )); const minProps = { @@ -53,8 +53,7 @@ const edgeWithLabel = { ...edge, label }; describe('', () => { beforeEach(() => { - // jsdom does not support SVG elements so we have to fall back to HTMLUnknownElement - Object.defineProperty(window.HTMLUnknownElement.prototype, 'getBBox', { + Object.defineProperty(window.SVGElement.prototype, 'getBBox', { value: () => ({ width: 100, height: 100 }), configurable: true, }); @@ -63,26 +62,40 @@ describe('', () => { afterEach(jest.clearAllMocks); it('does not render the supplied label element if label is missing', () => { - const { container } = render(); + const { container } = render( + + + , + ); expect(container.getElementsByTagName('g')).toHaveLength(0); }); it('renders the supplied label element if label is present', () => { - const { getByText } = render(); + const { getByText } = render( + + + , + ); expect(getByText(label)).toBeInTheDocument(); }); it('passes down edge properties to the render method if label is present', () => { const edgeWithRandomProp = { ...edge, label, randomProp: true }; render( - , + + + , ); expect(renderElement).toHaveBeenCalledWith({ edge: edgeWithRandomProp }); }); it('calls setEdge with edge ID and actual label size after rendering', () => { - const { getByText } = render(); + const { getByText } = render( + + + , + ); expect(getByText(label)).toBeInTheDocument(); // Updates the edge in the graph diff --git a/packages/core-components/src/components/DependencyGraph/Node.test.tsx b/packages/core-components/src/components/DependencyGraph/Node.test.tsx index aaba09c004..ea69220336 100644 --- a/packages/core-components/src/components/DependencyGraph/Node.test.tsx +++ b/packages/core-components/src/components/DependencyGraph/Node.test.tsx @@ -23,7 +23,7 @@ import { RenderNodeProps } from './types'; const node = { id: 'abc', x: 0, y: 0, width: 0, height: 0 }; const setNode = jest.fn(() => new dagre.graphlib.Graph()); const renderElement = jest.fn((props: RenderNodeProps) => ( - {props.node.id} +
    {props.node.id}
    )); const minProps = { @@ -34,8 +34,7 @@ const minProps = { describe('', () => { beforeEach(() => { - // jsdom does not support SVG elements so we have to fall back to HTMLUnknownElement - Object.defineProperty(window.HTMLUnknownElement.prototype, 'getBBox', { + Object.defineProperty(window.SVGElement.prototype, 'getBBox', { value: () => ({ width: 100, height: 100 }), configurable: true, }); @@ -44,19 +43,31 @@ describe('', () => { afterEach(jest.clearAllMocks); it('renders the supplied element', () => { - const { getByText } = render(); + const { getByText } = render( + + + , + ); expect(getByText(minProps.node.id)).toBeInTheDocument(); }); it('passes down node properties to the render method', () => { const nodeWithRandomProp = { ...node, randomProp: true }; - render(); + render( + + + , + ); expect(renderElement).toHaveBeenCalledWith({ node: nodeWithRandomProp }); }); it('calls setNode with node ID and actual size after rendering', () => { - const { getByText } = render(); + const { getByText } = render( + + + , + ); expect(getByText(minProps.node.id)).toBeInTheDocument(); // Updates the node in the graph From 940d2929f013ce10058e0355d91888970780f815 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Rosado?= <55427141+khatharsiss@users.noreply.github.com> Date: Sun, 11 Sep 2022 23:38:37 +0200 Subject: [PATCH 106/110] added ferrovial as adopter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: José Rosado <55427141+khatharsiss@users.noreply.github.com> --- ADOPTERS.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ADOPTERS.md b/ADOPTERS.md index 6ea4d5dacb..7cd7f6b092 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -212,4 +212,6 @@ _You can do this by using the [Adopter form](https://form.typeform.com/to/zcOaKi | [REI](https://www.rei.com/) | [Jen Evans](mailto:jenevan@rei.com) | Developer portal focused on an enterprise-wide app catalog to track ownership and surface APIs. | | [next](https://next.me) | [Devan Jeronimo Nack](mailto:devan.j.nack@next.me), [Everson Crusara](mailto:everson.crusara@next.me), [Thiago Carneiro da Silva](mailto:thiagoc.silva@next.me) | We are building our Internal Developer Portal using Backstage to improve developer's experience by centralizing our services catalog and identifing microservices' ownership. Also we are going to improve Technical Documentation and speed up development using software templates to help squads in creation and deployment of new microservices. | | [Vipps](https://vipps.no) | [Martin Ehrnst](https://github.com/ehrnst) | Vipps use backstage for our service catalog, documentation, and developer portal. Using templates we are able to simplify the developer experience when deploying new services to our platform. | +| [Ferrovial](https://ferrovial.com) | [Jose Luis Rosado](mailto:jlrosado@ferrovial.com) | Backstage is helping us to improve and acelerate dev experience helping teams to quickly find technical documentation, infrastructure templates, pipelines, software components and quickstarters that have been developed by our squads in a inner source friendly environment. + | From d9ab14d04cfa73e14882d50fe95c95e92e31c4d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Tunkl?= Date: Mon, 12 Sep 2022 14:05:34 +0200 Subject: [PATCH 107/110] Update of humanize method parameters type MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomáš Tunkl --- plugins/catalog-react/api-report.md | 2 +- plugins/catalog-react/src/components/EntityRefLink/humanize.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/catalog-react/api-report.md b/plugins/catalog-react/api-report.md index b2b098ec68..f6ead9a31a 100644 --- a/plugins/catalog-react/api-report.md +++ b/plugins/catalog-react/api-report.md @@ -441,7 +441,7 @@ export function humanizeEntityRef( entityRef: Entity | CompoundEntityRef, opts?: { defaultKind?: string; - defaultNamespace?: string | boolean; + defaultNamespace?: string | false; }, ): string; diff --git a/plugins/catalog-react/src/components/EntityRefLink/humanize.ts b/plugins/catalog-react/src/components/EntityRefLink/humanize.ts index 358b6a5851..bfc8e2af84 100644 --- a/plugins/catalog-react/src/components/EntityRefLink/humanize.ts +++ b/plugins/catalog-react/src/components/EntityRefLink/humanize.ts @@ -29,7 +29,7 @@ export function humanizeEntityRef( entityRef: Entity | CompoundEntityRef, opts?: { defaultKind?: string; - defaultNamespace?: string | boolean; + defaultNamespace?: string | false; }, ) { const defaultKind = opts?.defaultKind; From 07fa501761e432effe6148b43cf49ed91f6a23e5 Mon Sep 17 00:00:00 2001 From: Andre Wanlin <67169551+awanlin@users.noreply.github.com> Date: Mon, 12 Sep 2022 15:12:50 -0500 Subject: [PATCH 108/110] Minor updates to the Pemissions docs Signed-off-by: Andre Wanlin <67169551+awanlin@users.noreply.github.com> --- docs/permissions/custom-rules.md | 4 +++- docs/permissions/getting-started.md | 5 +---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/docs/permissions/custom-rules.md b/docs/permissions/custom-rules.md index 0ff0bc230c..1408d732d3 100644 --- a/docs/permissions/custom-rules.md +++ b/docs/permissions/custom-rules.md @@ -49,6 +49,8 @@ The api for providing custom rules may differ between plugins, but there should // packages/backend/src/plugins/catalog.ts import { isInSystemRule } from './permission'; +// The CatalogBuilder with the addPermissionRules function is in the alpha path +import { CatalogBuilder } from '@backstage/plugin-catalog-backend/alpha'; ... @@ -56,7 +58,7 @@ export default async function createPlugin( env: PluginEnvironment, ): Promise { const builder = await CatalogBuilder.create(env); - builder.addPermissionRules(isInSystem); + builder.addPermissionRules(isInSystemRule); ... return router; } diff --git a/docs/permissions/getting-started.md b/docs/permissions/getting-started.md index 6daf448cdd..6e6bcd2d03 100644 --- a/docs/permissions/getting-started.md +++ b/docs/permissions/getting-started.md @@ -77,10 +77,7 @@ export default async function createPlugin( logger: env.logger, discovery: env.discovery, policy: new TestPermissionPolicy(), - identity: IdentityClient.create({ - discovery: env.discovery, - issuer: await env.discovery.getExternalBaseUrl('auth'), - }), + identity: env.identity, }); } ``` From 423e01d903ee486ea171c6f1ba02f3e7e5f80a03 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 13 Sep 2022 08:56:36 +0000 Subject: [PATCH 109/110] Version Packages (next) Signed-off-by: Patrik Oldsberg --- .changeset/pre.json | 25 + docs/releases/v1.6.0-next.3-changelog.md | 1768 ++++++++++++ package.json | 2 +- packages/app-defaults/CHANGELOG.md | 12 + packages/app-defaults/package.json | 14 +- packages/app/CHANGELOG.md | 56 + packages/app/package.json | 104 +- packages/backend-app-api/CHANGELOG.md | 13 + packages/backend-app-api/package.json | 14 +- packages/backend-common/CHANGELOG.md | 12 + packages/backend-common/package.json | 16 +- packages/backend-defaults/CHANGELOG.md | 9 + packages/backend-defaults/package.json | 8 +- packages/backend-plugin-api/CHANGELOG.md | 12 + packages/backend-plugin-api/package.json | 12 +- packages/backend-tasks/CHANGELOG.md | 9 + packages/backend-tasks/package.json | 12 +- packages/backend-test-utils/CHANGELOG.md | 12 + packages/backend-test-utils/package.json | 14 +- packages/backend/CHANGELOG.md | 40 + packages/backend/package.json | 70 +- packages/catalog-client/CHANGELOG.md | 13 + packages/catalog-client/package.json | 8 +- packages/catalog-model/CHANGELOG.md | 9 + packages/catalog-model/package.json | 8 +- packages/cli-common/CHANGELOG.md | 6 + packages/cli-common/package.json | 4 +- packages/cli/CHANGELOG.md | 13 + packages/cli/package.json | 26 +- packages/codemods/CHANGELOG.md | 7 + packages/codemods/package.json | 6 +- packages/config-loader/CHANGELOG.md | 11 + packages/config-loader/package.json | 10 +- packages/config/CHANGELOG.md | 6 + packages/config/package.json | 6 +- packages/core-app-api/CHANGELOG.md | 9 + packages/core-app-api/package.json | 10 +- packages/core-components/CHANGELOG.md | 10 + packages/core-components/package.json | 14 +- packages/core-plugin-api/CHANGELOG.md | 8 + packages/core-plugin-api/package.json | 10 +- packages/create-app/CHANGELOG.md | 8 + packages/create-app/package.json | 6 +- packages/dev-utils/CHANGELOG.md | 16 + packages/dev-utils/package.json | 20 +- packages/e2e-test/package.json | 6 +- packages/errors/CHANGELOG.md | 6 + packages/errors/package.json | 4 +- packages/integration-react/CHANGELOG.md | 11 + packages/integration-react/package.json | 16 +- packages/integration/CHANGELOG.md | 13 + packages/integration/package.json | 12 +- packages/release-manifests/CHANGELOG.md | 6 + packages/release-manifests/package.json | 6 +- .../techdocs-cli-embedded-app/CHANGELOG.md | 18 + .../techdocs-cli-embedded-app/package.json | 28 +- packages/techdocs-cli/CHANGELOG.md | 12 + packages/techdocs-cli/package.json | 14 +- packages/test-utils/CHANGELOG.md | 13 + packages/test-utils/package.json | 14 +- plugins/adr-backend/CHANGELOG.md | 13 + plugins/adr-backend/package.json | 18 +- plugins/adr-common/CHANGELOG.md | 8 + plugins/adr-common/package.json | 8 +- plugins/adr/CHANGELOG.md | 13 + plugins/adr/package.json | 22 +- plugins/airbrake-backend/CHANGELOG.md | 8 + plugins/airbrake-backend/package.json | 8 +- plugins/airbrake/CHANGELOG.md | 13 + plugins/airbrake/package.json | 22 +- plugins/allure/CHANGELOG.md | 11 + plugins/allure/package.json | 18 +- plugins/analytics-module-ga/CHANGELOG.md | 10 + plugins/analytics-module-ga/package.json | 16 +- plugins/apache-airflow/CHANGELOG.md | 9 + plugins/apache-airflow/package.json | 14 +- plugins/api-docs/CHANGELOG.md | 12 + plugins/api-docs/package.json | 20 +- plugins/apollo-explorer/CHANGELOG.md | 9 + plugins/apollo-explorer/package.json | 14 +- plugins/app-backend/CHANGELOG.md | 9 + plugins/app-backend/package.json | 12 +- plugins/auth-backend/CHANGELOG.md | 18 + plugins/auth-backend/package.json | 18 +- plugins/auth-node/CHANGELOG.md | 9 + plugins/auth-node/package.json | 12 +- plugins/azure-devops-backend/CHANGELOG.md | 8 + plugins/azure-devops-backend/package.json | 8 +- plugins/azure-devops/CHANGELOG.md | 12 + plugins/azure-devops/package.json | 20 +- plugins/badges-backend/CHANGELOG.md | 11 + plugins/badges-backend/package.json | 14 +- plugins/badges/CHANGELOG.md | 12 + plugins/badges/package.json | 20 +- plugins/bazaar-backend/CHANGELOG.md | 9 + plugins/bazaar-backend/package.json | 10 +- plugins/bazaar/CHANGELOG.md | 14 + plugins/bazaar/package.json | 20 +- plugins/bitrise/CHANGELOG.md | 11 + plugins/bitrise/package.json | 18 +- .../catalog-backend-module-aws/CHANGELOG.md | 13 + .../catalog-backend-module-aws/package.json | 18 +- .../catalog-backend-module-azure/CHANGELOG.md | 13 + .../catalog-backend-module-azure/package.json | 20 +- .../CHANGELOG.md | 10 + .../package.json | 16 +- .../CHANGELOG.md | 13 + .../package.json | 20 +- .../CHANGELOG.md | 12 + .../package.json | 18 +- .../CHANGELOG.md | 13 + .../package.json | 20 +- .../CHANGELOG.md | 15 + .../package.json | 24 +- .../CHANGELOG.md | 13 + .../package.json | 20 +- .../catalog-backend-module-ldap/CHANGELOG.md | 11 + .../catalog-backend-module-ldap/package.json | 14 +- .../CHANGELOG.md | 11 + .../package.json | 16 +- .../CHANGELOG.md | 12 + .../package.json | 18 +- plugins/catalog-backend/CHANGELOG.md | 21 + plugins/catalog-backend/package.json | 32 +- plugins/catalog-graph/CHANGELOG.md | 12 + plugins/catalog-graph/package.json | 22 +- plugins/catalog-graphql/CHANGELOG.md | 8 + plugins/catalog-graphql/package.json | 10 +- plugins/catalog-import/CHANGELOG.md | 16 + plugins/catalog-import/package.json | 28 +- plugins/catalog-node/CHANGELOG.md | 15 + plugins/catalog-node/package.json | 16 +- plugins/catalog-react/CHANGELOG.md | 17 + plugins/catalog-react/package.json | 26 +- plugins/catalog/CHANGELOG.md | 14 + plugins/catalog/package.json | 26 +- .../CHANGELOG.md | 9 + .../package.json | 10 +- plugins/cicd-statistics/CHANGELOG.md | 9 + plugins/cicd-statistics/package.json | 10 +- plugins/circleci/CHANGELOG.md | 11 + plugins/circleci/package.json | 18 +- plugins/cloudbuild/CHANGELOG.md | 11 + plugins/cloudbuild/package.json | 18 +- plugins/code-climate/CHANGELOG.md | 11 + plugins/code-climate/package.json | 16 +- plugins/code-coverage-backend/CHANGELOG.md | 12 + plugins/code-coverage-backend/package.json | 16 +- plugins/code-coverage/CHANGELOG.md | 13 + plugins/code-coverage/package.json | 22 +- plugins/codescene/CHANGELOG.md | 11 + plugins/codescene/package.json | 18 +- plugins/config-schema/CHANGELOG.md | 11 + plugins/config-schema/package.json | 18 +- plugins/cost-insights/CHANGELOG.md | 11 + plugins/cost-insights/package.json | 18 +- plugins/dynatrace/CHANGELOG.md | 10 + plugins/dynatrace/package.json | 16 +- .../example-todo-list-backend/CHANGELOG.md | 10 + .../example-todo-list-backend/package.json | 12 +- plugins/explore-react/CHANGELOG.md | 8 + plugins/explore-react/package.json | 10 +- plugins/explore/CHANGELOG.md | 12 + plugins/explore/package.json | 20 +- plugins/firehydrant/CHANGELOG.md | 10 + plugins/firehydrant/package.json | 16 +- plugins/fossa/CHANGELOG.md | 12 + plugins/fossa/package.json | 20 +- plugins/gcalendar/CHANGELOG.md | 10 + plugins/gcalendar/package.json | 16 +- plugins/gcp-projects/CHANGELOG.md | 9 + plugins/gcp-projects/package.json | 14 +- plugins/git-release-manager/CHANGELOG.md | 10 + plugins/git-release-manager/package.json | 16 +- plugins/github-actions/CHANGELOG.md | 12 + plugins/github-actions/package.json | 20 +- plugins/github-deployments/CHANGELOG.md | 14 + plugins/github-deployments/package.json | 24 +- plugins/github-issues/CHANGELOG.md | 13 + plugins/github-issues/package.json | 22 +- .../github-pull-requests-board/CHANGELOG.md | 12 + .../github-pull-requests-board/package.json | 18 +- plugins/gitops-profiles/CHANGELOG.md | 9 + plugins/gitops-profiles/package.json | 14 +- plugins/gocd/CHANGELOG.md | 12 + plugins/gocd/package.json | 20 +- plugins/graphiql/CHANGELOG.md | 9 + plugins/graphiql/package.json | 14 +- plugins/graphql-backend/CHANGELOG.md | 9 + plugins/graphql-backend/package.json | 10 +- plugins/home/CHANGELOG.md | 13 + plugins/home/package.json | 22 +- plugins/ilert/CHANGELOG.md | 12 + plugins/ilert/package.json | 20 +- plugins/jenkins-backend/CHANGELOG.md | 13 + plugins/jenkins-backend/package.json | 18 +- plugins/jenkins/CHANGELOG.md | 12 + plugins/jenkins/package.json | 20 +- plugins/kafka-backend/CHANGELOG.md | 10 + plugins/kafka-backend/package.json | 12 +- plugins/kafka/CHANGELOG.md | 12 + plugins/kafka/package.json | 20 +- plugins/kubernetes-backend/CHANGELOG.md | 13 + plugins/kubernetes-backend/package.json | 18 +- plugins/kubernetes-common/CHANGELOG.md | 7 + plugins/kubernetes-common/package.json | 6 +- plugins/kubernetes/CHANGELOG.md | 14 + plugins/kubernetes/package.json | 22 +- plugins/lighthouse/CHANGELOG.md | 12 + plugins/lighthouse/package.json | 20 +- plugins/newrelic-dashboard/CHANGELOG.md | 11 + plugins/newrelic-dashboard/package.json | 16 +- plugins/newrelic/CHANGELOG.md | 9 + plugins/newrelic/package.json | 14 +- plugins/org/CHANGELOG.md | 11 + plugins/org/package.json | 20 +- plugins/pagerduty/CHANGELOG.md | 12 + plugins/pagerduty/package.json | 20 +- plugins/periskop-backend/CHANGELOG.md | 8 + plugins/periskop-backend/package.json | 8 +- plugins/periskop/CHANGELOG.md | 12 + plugins/periskop/package.json | 20 +- plugins/permission-backend/CHANGELOG.md | 12 + plugins/permission-backend/package.json | 16 +- plugins/permission-common/CHANGELOG.md | 9 + plugins/permission-common/package.json | 8 +- plugins/permission-node/CHANGELOG.md | 11 + plugins/permission-node/package.json | 16 +- plugins/permission-react/CHANGELOG.md | 10 + plugins/permission-react/package.json | 12 +- plugins/proxy-backend/CHANGELOG.md | 8 + plugins/proxy-backend/package.json | 8 +- plugins/rollbar-backend/CHANGELOG.md | 8 + plugins/rollbar-backend/package.json | 10 +- plugins/rollbar/CHANGELOG.md | 11 + plugins/rollbar/package.json | 18 +- .../CHANGELOG.md | 12 + .../package.json | 14 +- .../CHANGELOG.md | 12 + .../package.json | 14 +- .../CHANGELOG.md | 9 + .../package.json | 10 +- plugins/scaffolder-backend/CHANGELOG.md | 18 + plugins/scaffolder-backend/package.json | 28 +- plugins/scaffolder-common/CHANGELOG.md | 7 + plugins/scaffolder-common/package.json | 6 +- plugins/scaffolder/CHANGELOG.md | 20 + plugins/scaffolder/package.json | 34 +- .../CHANGELOG.md | 8 + .../package.json | 10 +- plugins/search-backend-module-pg/CHANGELOG.md | 9 + plugins/search-backend-module-pg/package.json | 12 +- plugins/search-backend-node/CHANGELOG.md | 11 + plugins/search-backend-node/package.json | 16 +- plugins/search-backend/CHANGELOG.md | 13 + plugins/search-backend/package.json | 18 +- plugins/search/CHANGELOG.md | 13 + plugins/search/package.json | 22 +- plugins/sentry/CHANGELOG.md | 11 + plugins/sentry/package.json | 18 +- plugins/shortcuts/CHANGELOG.md | 9 + plugins/shortcuts/package.json | 14 +- plugins/sonarqube-backend/CHANGELOG.md | 9 + plugins/sonarqube-backend/package.json | 12 +- plugins/sonarqube/CHANGELOG.md | 11 + plugins/sonarqube/package.json | 18 +- plugins/splunk-on-call/CHANGELOG.md | 11 + plugins/splunk-on-call/package.json | 18 +- plugins/stack-overflow-backend/CHANGELOG.md | 8 + plugins/stack-overflow-backend/package.json | 6 +- plugins/stack-overflow/CHANGELOG.md | 11 + plugins/stack-overflow/package.json | 18 +- .../CHANGELOG.md | 10 + .../package.json | 12 +- plugins/tech-insights-backend/CHANGELOG.md | 13 + plugins/tech-insights-backend/package.json | 20 +- plugins/tech-insights-node/CHANGELOG.md | 9 + plugins/tech-insights-node/package.json | 10 +- plugins/tech-insights/CHANGELOG.md | 12 + plugins/tech-insights/package.json | 20 +- plugins/tech-radar/CHANGELOG.md | 9 + plugins/tech-radar/package.json | 14 +- .../techdocs-addons-test-utils/CHANGELOG.md | 15 + .../techdocs-addons-test-utils/package.json | 22 +- plugins/techdocs-backend/CHANGELOG.md | 14 + plugins/techdocs-backend/package.json | 24 +- .../CHANGELOG.md | 12 + .../package.json | 22 +- plugins/techdocs-node/CHANGELOG.md | 11 + plugins/techdocs-node/package.json | 14 +- plugins/techdocs-react/CHANGELOG.md | 10 + plugins/techdocs-react/package.json | 14 +- plugins/techdocs/CHANGELOG.md | 16 + plugins/techdocs/package.json | 28 +- plugins/todo-backend/CHANGELOG.md | 12 + plugins/todo-backend/package.json | 16 +- plugins/todo/CHANGELOG.md | 12 + plugins/todo/package.json | 20 +- plugins/user-settings/CHANGELOG.md | 9 + plugins/user-settings/package.json | 14 +- plugins/vault-backend/CHANGELOG.md | 11 + plugins/vault-backend/package.json | 14 +- plugins/vault/CHANGELOG.md | 12 + plugins/vault/package.json | 20 +- plugins/xcmetrics/CHANGELOG.md | 10 + plugins/xcmetrics/package.json | 16 +- yarn.lock | 2484 +++++++++-------- 307 files changed, 6104 insertions(+), 2508 deletions(-) create mode 100644 docs/releases/v1.6.0-next.3-changelog.md diff --git a/.changeset/pre.json b/.changeset/pre.json index 96664632fd..028a1a665f 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -188,19 +188,24 @@ "clever-turtles-work", "cold-frogs-kiss", "cool-cameras-count", + "cuddly-clocks-dance", "cuddly-needles-marry", "curly-hounds-wait", "dry-games-end", "dry-tips-build", "dull-spoons-doubt", + "eight-shrimps-call", "eight-spies-protect", "eleven-bees-marry", + "empty-colts-whisper", "famous-cups-roll", "famous-hounds-sit", "famous-pianos-kick", "famous-wombats-happen", "fast-paws-press", "five-carrots-pay", + "flat-crabs-love", + "flat-humans-dance", "flat-plums-shout", "flat-walls-kiss", "fresh-rabbits-juggle", @@ -211,17 +216,21 @@ "gold-laws-attend", "good-avocados-grow", "good-papayas-dress", + "gorgeous-boats-prove", + "gorgeous-pillows-retire", "gorgeous-swans-kiss", "great-cats-sit", "great-rules-march", "grumpy-kiwis-juggle", "happy-kiwis-look", "heavy-ligers-laugh", + "hot-brooms-drive", "hot-files-begin", "hot-suits-glow", "hungry-dogs-agree", "itchy-brooms-end", "itchy-kiwis-warn", + "large-books-deny", "large-eagles-shop", "large-trainers-float", "late-turtles-listen", @@ -230,13 +239,17 @@ "light-donuts-obey", "loud-comics-search", "lovely-ants-invite", + "lucky-ads-worry", "lucky-points-wash", "many-rules-raise", "mean-tomatoes-visit", + "metal-candles-tease", "metal-crabs-wash", + "metal-weeks-kiss", "moody-berries-sneeze", "neat-kangaroos-turn", "nervous-rivers-sneeze", + "new-taxis-vanish", "old-lemons-switch", "old-readers-provide", "old-rockets-doubt", @@ -247,7 +260,9 @@ "purple-jeans-bathe", "purple-plums-travel", "purple-wolves-confess", + "quick-items-invite", "quick-lamps-talk", + "rare-tips-glow", "red-numbers-suffer", "renovate-16f36a0", "renovate-1a6cc1f", @@ -263,6 +278,7 @@ "rotten-books-crash", "rude-books-rush", "rude-tips-argue", + "rude-weeks-retire", "search-feet-flash", "search-planets-flash", "search-zebras-tap", @@ -273,11 +289,14 @@ "shiny-lobsters-fix", "shiny-ties-leave", "shiny-walls-kiss", + "short-mice-explode", "silent-kings-live", "slimy-stingrays-type", "slimy-zebras-reply", + "slow-phones-count", "small-lemons-brake", "small-walls-promise", + "smart-sloths-search", "smart-squids-change", "smooth-yaks-hug", "spicy-cherries-remember", @@ -286,10 +305,13 @@ "strong-planes-return", "stupid-pigs-appear", "sweet-fishes-taste", + "sweet-grapes-explain", "swift-readers-sin", "tall-trains-remain", "tame-papayas-protect", + "tame-socks-sniff", "tame-trainers-rule", + "tasty-clouds-cover", "techdocs-feet-dress", "techdocs-jeans-wait", "tender-ladybugs-relax", @@ -298,13 +320,16 @@ "tiny-oranges-thank", "tiny-rocks-flash", "tough-dolphins-smile", + "twenty-dolls-smoke", "two-planets-provide", "veka-fingrar-drar", "weak-camels-roll", + "weak-radios-sin", "weak-yaks-learn", "wild-sheep-roll", "witty-cats-wink", "witty-queens-happen", + "young-falcons-sleep", "young-trees-rescue" ] } diff --git a/docs/releases/v1.6.0-next.3-changelog.md b/docs/releases/v1.6.0-next.3-changelog.md new file mode 100644 index 0000000000..9cf02ac93f --- /dev/null +++ b/docs/releases/v1.6.0-next.3-changelog.md @@ -0,0 +1,1768 @@ +# Release v1.6.0-next.3 + +## @backstage/catalog-client@1.1.0-next.2 + +### Minor Changes + +- 65d1d4343f: Adding `validateEntity` method that calls `/validate-entity` endpoint. + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/errors@1.1.1-next.0 + +## @backstage/plugin-auth-backend@0.16.0-next.3 + +### Minor Changes + +- 8600855fbf: The auth0 integration is updated to use the `passport-auth0` library. The configuration under `auth.providers.auth0.\*` now supports an optional `audience` parameter; providing that allows you to connect to the correct API to get permissions, access tokens, and full profile information. + + [What is an Audience](https://community.auth0.com/t/what-is-the-audience/71414) + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.1.0-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/plugin-auth-node@0.2.5-next.3 + +## @backstage/plugin-catalog-backend@1.4.0-next.3 + +### Minor Changes + +- 6e63bc43f2: Added the `refresh` function to the Connection of the entity providers. + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.1.0-next.2 + - @backstage/backend-plugin-api@0.1.2-next.2 + - @backstage/catalog-client@1.1.0-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/plugin-permission-common@0.6.4-next.2 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/plugin-scaffolder-common@1.2.0-next.1 + - @backstage/plugin-permission-node@0.6.5-next.3 + +## @backstage/plugin-catalog-node@1.1.0-next.2 + +### Minor Changes + +- 9743bc788c: Added refresh function to the `EntityProviderConnection` to be able to schedule refreshes from entity providers. + +### Patch Changes + +- 409ed984e8: Updated usage of experimental backend service APIs. +- Updated dependencies + - @backstage/backend-plugin-api@0.1.2-next.2 + - @backstage/catalog-client@1.1.0-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/errors@1.1.1-next.0 + +## @backstage/app-defaults@1.0.6-next.2 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- d9e39544be: Add missing peer dependencies +- Updated dependencies + - @backstage/core-app-api@1.1.0-next.3 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/plugin-permission-react@0.4.5-next.2 + +## @backstage/backend-app-api@0.2.1-next.2 + +### Patch Changes + +- 854ba37357: Updated to support new `ServiceFactory` formats. +- 409ed984e8: Updated service implementations and backend wiring to support scoped service. +- Updated dependencies + - @backstage/backend-plugin-api@0.1.2-next.2 + - @backstage/errors@1.1.1-next.0 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/backend-tasks@0.3.5-next.1 + - @backstage/plugin-permission-node@0.6.5-next.3 + +## @backstage/backend-common@0.15.1-next.3 + +### Patch Changes + +- 96689fbdcb: Workaround for a rare race condition in tests. +- Updated dependencies + - @backstage/config-loader@1.1.4-next.2 + - @backstage/cli-common@0.1.10-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + +## @backstage/backend-defaults@0.1.1-next.1 + +### Patch Changes + +- 854ba37357: Updated to support new `ServiceFactory` formats. +- Updated dependencies + - @backstage/backend-plugin-api@0.1.2-next.2 + - @backstage/backend-app-api@0.2.1-next.2 + +## @backstage/backend-plugin-api@0.1.2-next.2 + +### Patch Changes + +- 409ed984e8: Service are now scoped to either `'plugin'` or `'root'` scope. Service factories have been updated to provide dependency instances directly rather than factory functions. +- 854ba37357: The `createServiceFactory` method has been updated to return a higher-order factory that can accept options. +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/plugin-permission-common@0.6.4-next.2 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/backend-tasks@0.3.5-next.1 + +## @backstage/backend-tasks@0.3.5-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/backend-common@0.15.1-next.3 + +## @backstage/backend-test-utils@0.1.28-next.3 + +### Patch Changes + +- 854ba37357: Updated to support new `ServiceFactory` formats. +- Updated dependencies + - @backstage/backend-plugin-api@0.1.2-next.2 + - @backstage/config@1.0.2-next.0 + - @backstage/backend-app-api@0.2.1-next.2 + - @backstage/cli@0.19.0-next.3 + - @backstage/backend-common@0.15.1-next.3 + +## @backstage/catalog-model@1.1.1-next.0 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + +## @backstage/cli@0.19.0-next.3 + +### Patch Changes + +- 7d47def9c4: Added dependency on `@types/jest` v27. The `@types/jest` dependency has also been removed from the plugin template and should be removed from any of your own internal packages. If you wish to override the version of `@types/jest` or `jest`, use Yarn resolutions. +- a7e82c9b01: Updated `versions:bump` command to be compatible with Yarn 3. +- Updated dependencies + - @backstage/config-loader@1.1.4-next.2 + - @backstage/cli-common@0.1.10-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/release-manifests@0.0.6-next.2 + +## @backstage/cli-common@0.1.10-next.0 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. + +## @backstage/codemods@0.1.39-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/cli-common@0.1.10-next.0 + +## @backstage/config@1.0.2-next.0 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. + +## @backstage/config-loader@1.1.4-next.2 + +### Patch Changes + +- 5ecca7e44b: No longer log when reloading remote config. +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/cli-common@0.1.10-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + +## @backstage/core-app-api@1.1.0-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/core-plugin-api@1.0.6-next.3 + +## @backstage/core-components@0.11.1-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + +## @backstage/core-plugin-api@1.0.6-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/config@1.0.2-next.0 + +## @backstage/create-app@0.4.31-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/cli-common@0.1.10-next.0 + +## @backstage/dev-utils@1.0.6-next.2 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- 329ed2b9c7: Fixed routing when using React Router v6 stable. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/app-defaults@1.0.6-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-app-api@1.1.0-next.3 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/integration-react@1.1.4-next.2 + - @backstage/test-utils@1.2.0-next.3 + +## @backstage/errors@1.1.1-next.0 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. + +## @backstage/integration@1.3.1-next.2 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- f76f22c649: Improved caching around github app tokens. + Tokens are now cached for 50 minutes, not 10. + Calls to get app installations are also included in this cache. + If you have more than one github app configured, consider adding `allowedInstallationOwners` to your apps configuration to gain the most benefit from these performance changes. +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + +## @backstage/integration-react@1.1.4-next.2 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/integration@1.3.1-next.2 + +## @backstage/release-manifests@0.0.6-next.2 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. + +## @techdocs/cli@1.2.1-next.2 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/cli-common@0.1.10-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/plugin-techdocs-node@1.4.0-next.2 + +## @backstage/test-utils@1.2.0-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- d9e39544be: Add missing peer dependencies +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/core-app-api@1.1.0-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/plugin-permission-common@0.6.4-next.2 + - @backstage/plugin-permission-react@0.4.5-next.2 + +## @backstage/plugin-adr@0.2.1-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/integration-react@1.1.4-next.2 + - @backstage/plugin-adr-common@0.2.1-next.1 + +## @backstage/plugin-adr-backend@0.2.1-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.1.0-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/plugin-adr-common@0.2.1-next.1 + +## @backstage/plugin-adr-common@0.2.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + +## @backstage/plugin-airbrake@0.3.9-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/dev-utils@1.0.6-next.2 + - @backstage/test-utils@1.2.0-next.3 + +## @backstage/plugin-airbrake-backend@0.2.9-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/backend-common@0.15.1-next.3 + +## @backstage/plugin-allure@0.1.25-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + +## @backstage/plugin-analytics-module-ga@0.1.20-next.2 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + +## @backstage/plugin-apache-airflow@0.2.2-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + +## @backstage/plugin-api-docs@0.8.9-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/plugin-catalog@1.5.1-next.3 + +## @backstage/plugin-apollo-explorer@0.1.2-next.2 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + +## @backstage/plugin-app-backend@0.3.36-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/config-loader@1.1.4-next.2 + - @backstage/config@1.0.2-next.0 + - @backstage/backend-common@0.15.1-next.3 + +## @backstage/plugin-auth-node@0.2.5-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/backend-common@0.15.1-next.3 + +## @backstage/plugin-azure-devops@0.2.0-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + +## @backstage/plugin-azure-devops-backend@0.3.15-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/backend-common@0.15.1-next.3 + +## @backstage/plugin-badges@0.2.33-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + +## @backstage/plugin-badges-backend@0.1.30-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.1.0-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/backend-common@0.15.1-next.3 + +## @backstage/plugin-bazaar@0.1.24-next.2 + +### Patch Changes + +- 1dd12349d1: Fixed broken routing by removing the wrapping `Router` from the `RoutedTabs` children. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-client@1.1.0-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/plugin-catalog@1.5.1-next.3 + - @backstage/cli@0.19.0-next.3 + +## @backstage/plugin-bazaar-backend@0.1.20-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/backend-test-utils@0.1.28-next.3 + - @backstage/backend-common@0.15.1-next.3 + +## @backstage/plugin-bitrise@0.1.36-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + +## @backstage/plugin-catalog@1.5.1-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-client@1.1.0-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration-react@1.1.4-next.2 + +## @backstage/plugin-catalog-backend-module-aws@0.1.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/plugin-catalog-backend@1.4.0-next.3 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/backend-tasks@0.3.5-next.1 + +## @backstage/plugin-catalog-backend-module-azure@0.1.7-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/plugin-catalog-backend@1.4.0-next.3 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/backend-tasks@0.3.5-next.1 + +## @backstage/plugin-catalog-backend-module-bitbucket@0.2.3-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/plugin-catalog-backend@1.4.0-next.3 + - @backstage/backend-common@0.15.1-next.3 + +## @backstage/plugin-catalog-backend-module-bitbucket-cloud@0.1.3-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/plugin-catalog-backend@1.4.0-next.3 + - @backstage/backend-tasks@0.3.5-next.1 + +## @backstage/plugin-catalog-backend-module-bitbucket-server@0.1.1-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/plugin-catalog-backend@1.4.0-next.3 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/backend-tasks@0.3.5-next.1 + +## @backstage/plugin-catalog-backend-module-gerrit@0.1.4-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/plugin-catalog-backend@1.4.0-next.3 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/backend-tasks@0.3.5-next.1 + +## @backstage/plugin-catalog-backend-module-github@0.1.7-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.1.0-next.2 + - @backstage/backend-plugin-api@0.1.2-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/plugin-catalog-backend@1.4.0-next.3 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/backend-tasks@0.3.5-next.1 + +## @backstage/plugin-catalog-backend-module-gitlab@0.1.7-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/plugin-catalog-backend@1.4.0-next.3 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/backend-tasks@0.3.5-next.1 + +## @backstage/plugin-catalog-backend-module-ldap@0.5.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/plugin-catalog-backend@1.4.0-next.3 + - @backstage/backend-tasks@0.3.5-next.1 + +## @backstage/plugin-catalog-backend-module-msgraph@0.4.2-next.3 + +### Patch Changes + +- d80aab31ae: Added $select attribute to user query +- Updated dependencies + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/plugin-catalog-backend@1.4.0-next.3 + - @backstage/backend-tasks@0.3.5-next.1 + +## @backstage/plugin-catalog-backend-module-openapi@0.1.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.1.0-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/plugin-catalog-backend@1.4.0-next.3 + - @backstage/backend-common@0.15.1-next.3 + +## @backstage/plugin-catalog-graph@0.2.21-next.2 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-client@1.1.0-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + +## @backstage/plugin-catalog-graphql@0.3.13-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + +## @backstage/plugin-catalog-import@0.8.12-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-client@1.1.0-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/integration-react@1.1.4-next.2 + +## @backstage/plugin-catalog-react@1.1.4-next.2 + +### Patch Changes + +- f6033d1121: humanizeEntityRef function can now be forced to include default namespace +- c86741a052: Support showing counts in option labels of the `EntityTagPicker`. You can enable this by adding the `showCounts` property +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/catalog-client@1.1.0-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/plugin-permission-common@0.6.4-next.2 + - @backstage/plugin-permission-react@0.4.5-next.2 + +## @backstage/plugin-cicd-statistics@0.1.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-plugin-api@1.0.6-next.3 + +## @backstage/plugin-cicd-statistics-module-gitlab@0.1.5-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/plugin-cicd-statistics@0.1.11-next.2 + +## @backstage/plugin-circleci@0.3.9-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + +## @backstage/plugin-cloudbuild@0.3.9-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + +## @backstage/plugin-code-climate@0.1.9-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + +## @backstage/plugin-code-coverage@0.2.2-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + +## @backstage/plugin-code-coverage-backend@0.2.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.1.0-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/backend-common@0.15.1-next.3 + +## @backstage/plugin-codescene@0.1.4-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + +## @backstage/plugin-config-schema@0.1.32-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + +## @backstage/plugin-cost-insights@0.11.31-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + +## @backstage/plugin-dynatrace@0.2.0-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + +## @backstage/plugin-explore@0.3.40-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/plugin-explore-react@0.0.21-next.3 + +## @backstage/plugin-explore-react@0.0.21-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/core-plugin-api@1.0.6-next.3 + +## @backstage/plugin-firehydrant@0.1.26-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + +## @backstage/plugin-fossa@0.2.41-next.2 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + +## @backstage/plugin-gcalendar@0.3.5-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + +## @backstage/plugin-gcp-projects@0.3.28-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + +## @backstage/plugin-git-release-manager@0.3.22-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/integration@1.3.1-next.2 + +## @backstage/plugin-github-actions@0.5.9-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/integration@1.3.1-next.2 + +## @backstage/plugin-github-deployments@0.1.40-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/integration-react@1.1.4-next.2 + +## @backstage/plugin-github-issues@0.1.1-next.2 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + +## @backstage/plugin-github-pull-requests-board@0.1.3-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/integration@1.3.1-next.2 + +## @backstage/plugin-gitops-profiles@0.3.27-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + +## @backstage/plugin-gocd@0.1.15-next.2 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + +## @backstage/plugin-graphiql@0.2.41-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + +## @backstage/plugin-graphql-backend@0.1.26-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/plugin-catalog-graphql@0.3.13-next.3 + +## @backstage/plugin-home@0.4.25-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/plugin-stack-overflow@0.1.5-next.3 + +## @backstage/plugin-ilert@0.1.35-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + +## @backstage/plugin-jenkins@0.7.8-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + +## @backstage/plugin-jenkins-backend@0.1.26-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.1.0-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/plugin-permission-common@0.6.4-next.2 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/plugin-auth-node@0.2.5-next.3 + +## @backstage/plugin-kafka@0.3.9-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + +## @backstage/plugin-kafka-backend@0.2.29-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/backend-common@0.15.1-next.3 + +## @backstage/plugin-kubernetes@0.7.2-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- 19a27929fb: Reset error state on success +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/plugin-kubernetes-common@0.4.2-next.1 + +## @backstage/plugin-kubernetes-backend@0.7.2-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.1.0-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/plugin-kubernetes-common@0.4.2-next.1 + - @backstage/plugin-auth-node@0.2.5-next.3 + +## @backstage/plugin-kubernetes-common@0.4.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.1-next.0 + +## @backstage/plugin-lighthouse@0.3.9-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + +## @backstage/plugin-newrelic@0.3.27-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + +## @backstage/plugin-newrelic-dashboard@0.2.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + +## @backstage/plugin-org@0.5.9-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + +## @backstage/plugin-pagerduty@0.5.2-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + +## @backstage/plugin-periskop@0.1.7-next.2 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + +## @backstage/plugin-periskop-backend@0.1.7-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/backend-common@0.15.1-next.3 + +## @backstage/plugin-permission-backend@0.5.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/plugin-permission-common@0.6.4-next.2 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/plugin-auth-node@0.2.5-next.3 + - @backstage/plugin-permission-node@0.6.5-next.3 + +## @backstage/plugin-permission-common@0.6.4-next.2 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + +## @backstage/plugin-permission-node@0.6.5-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/plugin-permission-common@0.6.4-next.2 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/plugin-auth-node@0.2.5-next.3 + +## @backstage/plugin-permission-react@0.4.5-next.2 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/plugin-permission-common@0.6.4-next.2 + +## @backstage/plugin-proxy-backend@0.2.30-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/backend-common@0.15.1-next.3 + +## @backstage/plugin-rollbar@0.4.9-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + +## @backstage/plugin-rollbar-backend@0.1.33-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/backend-common@0.15.1-next.3 + +## @backstage/plugin-scaffolder@1.6.0-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- 6522e459aa: Support displaying and ordering by counts in `EntityTagPicker` field. Add the `showCounts` option to enable this. Also support configuring `helperText`. +- f0510a20b5: Addition of a dismissible Error Banner in Scaffolder page +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-client@1.1.0-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/integration-react@1.1.4-next.2 + - @backstage/plugin-permission-react@0.4.5-next.2 + - @backstage/plugin-scaffolder-common@1.2.0-next.1 + +## @backstage/plugin-scaffolder-backend@1.6.0-next.3 + +### Patch Changes + +- 50467bc15b: The number of task workers used to execute templates now default to 3, rather than 1. +- Updated dependencies + - @backstage/plugin-catalog-node@1.1.0-next.2 + - @backstage/backend-plugin-api@0.1.2-next.2 + - @backstage/catalog-client@1.1.0-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/plugin-catalog-backend@1.4.0-next.3 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/plugin-scaffolder-common@1.2.0-next.1 + - @backstage/plugin-auth-node@0.2.5-next.3 + +## @backstage/plugin-scaffolder-backend-module-cookiecutter@0.2.11-next.2 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/plugin-scaffolder-backend@1.6.0-next.3 + +## @backstage/plugin-scaffolder-backend-module-rails@0.4.4-next.1 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/plugin-scaffolder-backend@1.6.0-next.3 + +## @backstage/plugin-scaffolder-backend-module-yeoman@0.2.9-next.1 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/plugin-scaffolder-backend@1.6.0-next.3 + +## @backstage/plugin-scaffolder-common@1.2.0-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.1-next.0 + +## @backstage/plugin-search@1.0.2-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + +## @backstage/plugin-search-backend@1.0.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/plugin-permission-common@0.6.4-next.2 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/plugin-auth-node@0.2.5-next.3 + - @backstage/plugin-permission-node@0.6.5-next.3 + - @backstage/plugin-search-backend-node@1.0.2-next.2 + +## @backstage/plugin-search-backend-module-elasticsearch@1.0.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/plugin-search-backend-node@1.0.2-next.2 + +## @backstage/plugin-search-backend-module-pg@0.4.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/plugin-search-backend-node@1.0.2-next.2 + +## @backstage/plugin-search-backend-node@1.0.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/plugin-permission-common@0.6.4-next.2 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/backend-tasks@0.3.5-next.1 + +## @backstage/plugin-sentry@0.4.2-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + +## @backstage/plugin-shortcuts@0.3.1-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + +## @backstage/plugin-sonarqube@0.4.1-next.2 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + +## @backstage/plugin-sonarqube-backend@0.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/backend-common@0.15.1-next.3 + +## @backstage/plugin-splunk-on-call@0.3.33-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + +## @backstage/plugin-stack-overflow@0.1.5-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/plugin-home@0.4.25-next.3 + +## @backstage/plugin-stack-overflow-backend@0.1.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/cli@0.19.0-next.3 + +## @backstage/plugin-tech-insights@0.3.0-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + +## @backstage/plugin-tech-insights-backend@0.5.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.1.0-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/backend-tasks@0.3.5-next.1 + - @backstage/plugin-tech-insights-node@0.3.4-next.1 + +## @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.20-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/plugin-tech-insights-node@0.3.4-next.1 + +## @backstage/plugin-tech-insights-node@0.3.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/backend-tasks@0.3.5-next.1 + +## @backstage/plugin-tech-radar@0.5.16-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + +## @backstage/plugin-techdocs@1.3.2-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/integration-react@1.1.4-next.2 + - @backstage/plugin-techdocs-react@1.0.4-next.2 + +## @backstage/plugin-techdocs-addons-test-utils@1.0.4-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/core-app-api@1.1.0-next.3 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/integration-react@1.1.4-next.2 + - @backstage/test-utils@1.2.0-next.3 + - @backstage/plugin-catalog@1.5.1-next.3 + - @backstage/plugin-techdocs@1.3.2-next.3 + - @backstage/plugin-techdocs-react@1.0.4-next.2 + +## @backstage/plugin-techdocs-backend@1.3.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.1.0-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/plugin-permission-common@0.6.4-next.2 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/plugin-techdocs-node@1.4.0-next.2 + +## @backstage/plugin-techdocs-module-addons-contrib@1.0.4-next.2 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/integration@1.3.1-next.2 + - @backstage/integration-react@1.1.4-next.2 + - @backstage/plugin-techdocs-react@1.0.4-next.2 + +## @backstage/plugin-techdocs-node@1.4.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/backend-common@0.15.1-next.3 + +## @backstage/plugin-techdocs-react@1.0.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + +## @backstage/plugin-todo@0.2.11-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + +## @backstage/plugin-todo-backend@0.1.33-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.1.0-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/backend-common@0.15.1-next.3 + +## @backstage/plugin-user-settings@0.4.8-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + +## @backstage/plugin-vault@0.1.3-next.2 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + +## @backstage/plugin-vault-backend@0.2.2-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/backend-test-utils@0.1.28-next.3 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/backend-tasks@0.3.5-next.1 + +## @backstage/plugin-xcmetrics@0.2.29-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + +## example-app@0.2.75-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/app-defaults@1.0.6-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/core-app-api@1.1.0-next.3 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/integration-react@1.1.4-next.2 + - @backstage/plugin-airbrake@0.3.9-next.3 + - @backstage/plugin-apache-airflow@0.2.2-next.3 + - @backstage/plugin-api-docs@0.8.9-next.3 + - @backstage/plugin-azure-devops@0.2.0-next.3 + - @backstage/plugin-badges@0.2.33-next.3 + - @backstage/plugin-catalog-graph@0.2.21-next.2 + - @backstage/plugin-catalog-import@0.8.12-next.3 + - @backstage/plugin-circleci@0.3.9-next.3 + - @backstage/plugin-cloudbuild@0.3.9-next.3 + - @backstage/plugin-code-coverage@0.2.2-next.3 + - @backstage/plugin-cost-insights@0.11.31-next.3 + - @backstage/plugin-dynatrace@0.2.0-next.3 + - @backstage/plugin-explore@0.3.40-next.3 + - @backstage/plugin-gcalendar@0.3.5-next.3 + - @backstage/plugin-gcp-projects@0.3.28-next.3 + - @backstage/plugin-github-actions@0.5.9-next.3 + - @backstage/plugin-gocd@0.1.15-next.2 + - @backstage/plugin-graphiql@0.2.41-next.3 + - @backstage/plugin-home@0.4.25-next.3 + - @backstage/plugin-jenkins@0.7.8-next.3 + - @backstage/plugin-kafka@0.3.9-next.3 + - @backstage/plugin-kubernetes@0.7.2-next.3 + - @backstage/plugin-lighthouse@0.3.9-next.3 + - @backstage/plugin-newrelic@0.3.27-next.3 + - @backstage/plugin-org@0.5.9-next.3 + - @backstage/plugin-pagerduty@0.5.2-next.3 + - @backstage/plugin-permission-react@0.4.5-next.2 + - @backstage/plugin-rollbar@0.4.9-next.3 + - @backstage/plugin-scaffolder@1.6.0-next.3 + - @backstage/plugin-search@1.0.2-next.3 + - @backstage/plugin-sentry@0.4.2-next.3 + - @backstage/plugin-shortcuts@0.3.1-next.3 + - @backstage/plugin-stack-overflow@0.1.5-next.3 + - @backstage/plugin-tech-insights@0.3.0-next.3 + - @backstage/plugin-tech-radar@0.5.16-next.3 + - @backstage/plugin-techdocs@1.3.2-next.3 + - @backstage/plugin-techdocs-module-addons-contrib@1.0.4-next.2 + - @backstage/plugin-todo@0.2.11-next.3 + - @backstage/plugin-user-settings@0.4.8-next.3 + - @backstage/cli@0.19.0-next.3 + - @backstage/plugin-newrelic-dashboard@0.2.2-next.2 + - @backstage/plugin-techdocs-react@1.0.4-next.2 + +## example-backend@0.2.75-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.1.0-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/plugin-permission-common@0.6.4-next.2 + - @backstage/plugin-scaffolder-backend-module-rails@0.4.4-next.1 + - @backstage/plugin-catalog-backend@1.4.0-next.3 + - @backstage/plugin-auth-backend@0.16.0-next.3 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/plugin-scaffolder-backend@1.6.0-next.3 + - @backstage/plugin-badges-backend@0.1.30-next.1 + - @backstage/plugin-code-coverage-backend@0.2.2-next.2 + - @backstage/plugin-jenkins-backend@0.1.26-next.3 + - @backstage/plugin-kubernetes-backend@0.7.2-next.3 + - @backstage/plugin-tech-insights-backend@0.5.2-next.2 + - @backstage/plugin-techdocs-backend@1.3.0-next.2 + - @backstage/plugin-todo-backend@0.1.33-next.2 + - example-app@0.2.75-next.3 + - @backstage/plugin-kafka-backend@0.2.29-next.1 + - @backstage/backend-tasks@0.3.5-next.1 + - @backstage/plugin-app-backend@0.3.36-next.3 + - @backstage/plugin-auth-node@0.2.5-next.3 + - @backstage/plugin-azure-devops-backend@0.3.15-next.2 + - @backstage/plugin-graphql-backend@0.1.26-next.3 + - @backstage/plugin-permission-backend@0.5.11-next.2 + - @backstage/plugin-permission-node@0.6.5-next.3 + - @backstage/plugin-proxy-backend@0.2.30-next.2 + - @backstage/plugin-rollbar-backend@0.1.33-next.3 + - @backstage/plugin-search-backend@1.0.2-next.1 + - @backstage/plugin-search-backend-module-elasticsearch@1.0.2-next.2 + - @backstage/plugin-search-backend-module-pg@0.4.0-next.2 + - @backstage/plugin-search-backend-node@1.0.2-next.2 + - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.20-next.1 + - @backstage/plugin-tech-insights-node@0.3.4-next.1 + +## techdocs-cli-embedded-app@0.2.74-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/app-defaults@1.0.6-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/core-app-api@1.1.0-next.3 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/integration-react@1.1.4-next.2 + - @backstage/test-utils@1.2.0-next.3 + - @backstage/plugin-catalog@1.5.1-next.3 + - @backstage/plugin-techdocs@1.3.2-next.3 + - @backstage/cli@0.19.0-next.3 + - @backstage/plugin-techdocs-react@1.0.4-next.2 + +## @internal/plugin-todo-list-backend@1.0.5-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/plugin-auth-node@0.2.5-next.3 diff --git a/package.json b/package.json index 3c9e2743cb..a0de99bfad 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "@types/react": "^17", "@types/react-dom": "^17" }, - "version": "1.6.0-next.2", + "version": "1.6.0-next.3", "dependencies": { "@manypkg/get-packages": "^1.1.3", "@microsoft/api-documenter": "^7.17.11", diff --git a/packages/app-defaults/CHANGELOG.md b/packages/app-defaults/CHANGELOG.md index 799c380dbc..c9216bf2a4 100644 --- a/packages/app-defaults/CHANGELOG.md +++ b/packages/app-defaults/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/app-defaults +## 1.0.6-next.2 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- d9e39544be: Add missing peer dependencies +- Updated dependencies + - @backstage/core-app-api@1.1.0-next.3 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/plugin-permission-react@0.4.5-next.2 + ## 1.0.6-next.1 ### Patch Changes diff --git a/packages/app-defaults/package.json b/packages/app-defaults/package.json index 355a7ee77e..c83e31b057 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.0.6-next.1", + "version": "1.0.6-next.2", "publishConfig": { "access": "public", "main": "dist/index.esm.js", @@ -32,10 +32,10 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/core-app-api": "^1.1.0-next.1", - "@backstage/core-components": "^0.11.1-next.1", - "@backstage/core-plugin-api": "^1.0.6-next.1", - "@backstage/plugin-permission-react": "^0.4.5-next.1", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/plugin-permission-react": "^0.4.5-next.2", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1" @@ -47,8 +47,8 @@ "react-router-dom": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.1", - "@backstage/test-utils": "^1.2.0-next.1", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@types/node": "^16.11.26", diff --git a/packages/app/CHANGELOG.md b/packages/app/CHANGELOG.md index ec851aa8d0..f763210b27 100644 --- a/packages/app/CHANGELOG.md +++ b/packages/app/CHANGELOG.md @@ -1,5 +1,61 @@ # example-app +## 0.2.75-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/app-defaults@1.0.6-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/core-app-api@1.1.0-next.3 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/integration-react@1.1.4-next.2 + - @backstage/plugin-airbrake@0.3.9-next.3 + - @backstage/plugin-apache-airflow@0.2.2-next.3 + - @backstage/plugin-api-docs@0.8.9-next.3 + - @backstage/plugin-azure-devops@0.2.0-next.3 + - @backstage/plugin-badges@0.2.33-next.3 + - @backstage/plugin-catalog-graph@0.2.21-next.2 + - @backstage/plugin-catalog-import@0.8.12-next.3 + - @backstage/plugin-circleci@0.3.9-next.3 + - @backstage/plugin-cloudbuild@0.3.9-next.3 + - @backstage/plugin-code-coverage@0.2.2-next.3 + - @backstage/plugin-cost-insights@0.11.31-next.3 + - @backstage/plugin-dynatrace@0.2.0-next.3 + - @backstage/plugin-explore@0.3.40-next.3 + - @backstage/plugin-gcalendar@0.3.5-next.3 + - @backstage/plugin-gcp-projects@0.3.28-next.3 + - @backstage/plugin-github-actions@0.5.9-next.3 + - @backstage/plugin-gocd@0.1.15-next.2 + - @backstage/plugin-graphiql@0.2.41-next.3 + - @backstage/plugin-home@0.4.25-next.3 + - @backstage/plugin-jenkins@0.7.8-next.3 + - @backstage/plugin-kafka@0.3.9-next.3 + - @backstage/plugin-kubernetes@0.7.2-next.3 + - @backstage/plugin-lighthouse@0.3.9-next.3 + - @backstage/plugin-newrelic@0.3.27-next.3 + - @backstage/plugin-org@0.5.9-next.3 + - @backstage/plugin-pagerduty@0.5.2-next.3 + - @backstage/plugin-permission-react@0.4.5-next.2 + - @backstage/plugin-rollbar@0.4.9-next.3 + - @backstage/plugin-scaffolder@1.6.0-next.3 + - @backstage/plugin-search@1.0.2-next.3 + - @backstage/plugin-sentry@0.4.2-next.3 + - @backstage/plugin-shortcuts@0.3.1-next.3 + - @backstage/plugin-stack-overflow@0.1.5-next.3 + - @backstage/plugin-tech-insights@0.3.0-next.3 + - @backstage/plugin-tech-radar@0.5.16-next.3 + - @backstage/plugin-techdocs@1.3.2-next.3 + - @backstage/plugin-techdocs-module-addons-contrib@1.0.4-next.2 + - @backstage/plugin-todo@0.2.11-next.3 + - @backstage/plugin-user-settings@0.4.8-next.3 + - @backstage/cli@0.19.0-next.3 + - @backstage/plugin-newrelic-dashboard@0.2.2-next.2 + - @backstage/plugin-techdocs-react@1.0.4-next.2 + ## 0.2.75-next.2 ### Patch Changes diff --git a/packages/app/package.json b/packages/app/package.json index e9c9632d81..df68e1032c 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,65 +1,65 @@ { "name": "example-app", - "version": "0.2.75-next.2", + "version": "0.2.75-next.3", "private": true, "backstage": { "role": "frontend" }, "bundled": true, "dependencies": { - "@backstage/app-defaults": "^1.0.6-next.1", - "@backstage/catalog-model": "^1.1.0", - "@backstage/cli": "^0.19.0-next.2", - "@backstage/config": "^1.0.1", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/integration-react": "^1.1.4-next.1", - "@backstage/plugin-airbrake": "^0.3.9-next.2", - "@backstage/plugin-apache-airflow": "^0.2.2-next.2", - "@backstage/plugin-api-docs": "^0.8.9-next.2", - "@backstage/plugin-azure-devops": "^0.2.0-next.2", - "@backstage/plugin-badges": "^0.2.33-next.2", + "@backstage/app-defaults": "^1.0.6-next.2", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/config": "^1.0.2-next.0", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/integration-react": "^1.1.4-next.2", + "@backstage/plugin-airbrake": "^0.3.9-next.3", + "@backstage/plugin-apache-airflow": "^0.2.2-next.3", + "@backstage/plugin-api-docs": "^0.8.9-next.3", + "@backstage/plugin-azure-devops": "^0.2.0-next.3", + "@backstage/plugin-badges": "^0.2.33-next.3", "@backstage/plugin-catalog-common": "^1.0.6-next.0", - "@backstage/plugin-catalog-graph": "^0.2.21-next.1", - "@backstage/plugin-catalog-import": "^0.8.12-next.2", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", - "@backstage/plugin-circleci": "^0.3.9-next.2", - "@backstage/plugin-cloudbuild": "^0.3.9-next.2", - "@backstage/plugin-code-coverage": "^0.2.2-next.2", - "@backstage/plugin-cost-insights": "^0.11.31-next.2", - "@backstage/plugin-dynatrace": "^0.2.0-next.2", - "@backstage/plugin-explore": "^0.3.40-next.2", - "@backstage/plugin-gcalendar": "^0.3.5-next.2", - "@backstage/plugin-gcp-projects": "^0.3.28-next.2", - "@backstage/plugin-github-actions": "^0.5.9-next.2", - "@backstage/plugin-gocd": "^0.1.15-next.1", - "@backstage/plugin-graphiql": "^0.2.41-next.2", - "@backstage/plugin-home": "^0.4.25-next.2", - "@backstage/plugin-jenkins": "^0.7.8-next.2", - "@backstage/plugin-kafka": "^0.3.9-next.2", - "@backstage/plugin-kubernetes": "^0.7.2-next.2", - "@backstage/plugin-lighthouse": "^0.3.9-next.2", - "@backstage/plugin-newrelic": "^0.3.27-next.2", - "@backstage/plugin-newrelic-dashboard": "^0.2.2-next.1", - "@backstage/plugin-org": "^0.5.9-next.2", - "@backstage/plugin-pagerduty": "0.5.2-next.2", - "@backstage/plugin-permission-react": "^0.4.5-next.1", - "@backstage/plugin-rollbar": "^0.4.9-next.2", - "@backstage/plugin-scaffolder": "^1.6.0-next.2", - "@backstage/plugin-search": "^1.0.2-next.2", + "@backstage/plugin-catalog-graph": "^0.2.21-next.2", + "@backstage/plugin-catalog-import": "^0.8.12-next.3", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", + "@backstage/plugin-circleci": "^0.3.9-next.3", + "@backstage/plugin-cloudbuild": "^0.3.9-next.3", + "@backstage/plugin-code-coverage": "^0.2.2-next.3", + "@backstage/plugin-cost-insights": "^0.11.31-next.3", + "@backstage/plugin-dynatrace": "^0.2.0-next.3", + "@backstage/plugin-explore": "^0.3.40-next.3", + "@backstage/plugin-gcalendar": "^0.3.5-next.3", + "@backstage/plugin-gcp-projects": "^0.3.28-next.3", + "@backstage/plugin-github-actions": "^0.5.9-next.3", + "@backstage/plugin-gocd": "^0.1.15-next.2", + "@backstage/plugin-graphiql": "^0.2.41-next.3", + "@backstage/plugin-home": "^0.4.25-next.3", + "@backstage/plugin-jenkins": "^0.7.8-next.3", + "@backstage/plugin-kafka": "^0.3.9-next.3", + "@backstage/plugin-kubernetes": "^0.7.2-next.3", + "@backstage/plugin-lighthouse": "^0.3.9-next.3", + "@backstage/plugin-newrelic": "^0.3.27-next.3", + "@backstage/plugin-newrelic-dashboard": "^0.2.2-next.2", + "@backstage/plugin-org": "^0.5.9-next.3", + "@backstage/plugin-pagerduty": "0.5.2-next.3", + "@backstage/plugin-permission-react": "^0.4.5-next.2", + "@backstage/plugin-rollbar": "^0.4.9-next.3", + "@backstage/plugin-scaffolder": "^1.6.0-next.3", + "@backstage/plugin-search": "^1.0.2-next.3", "@backstage/plugin-search-common": "^1.0.1-next.0", "@backstage/plugin-search-react": "^1.1.0-next.2", - "@backstage/plugin-sentry": "^0.4.2-next.2", - "@backstage/plugin-shortcuts": "^0.3.1-next.2", - "@backstage/plugin-stack-overflow": "^0.1.5-next.2", - "@backstage/plugin-tech-insights": "^0.3.0-next.2", - "@backstage/plugin-tech-radar": "^0.5.16-next.2", - "@backstage/plugin-techdocs": "^1.3.2-next.2", - "@backstage/plugin-techdocs-module-addons-contrib": "^1.0.4-next.1", - "@backstage/plugin-techdocs-react": "^1.0.4-next.1", - "@backstage/plugin-todo": "^0.2.11-next.2", - "@backstage/plugin-user-settings": "^0.4.8-next.2", + "@backstage/plugin-sentry": "^0.4.2-next.3", + "@backstage/plugin-shortcuts": "^0.3.1-next.3", + "@backstage/plugin-stack-overflow": "^0.1.5-next.3", + "@backstage/plugin-tech-insights": "^0.3.0-next.3", + "@backstage/plugin-tech-radar": "^0.5.16-next.3", + "@backstage/plugin-techdocs": "^1.3.2-next.3", + "@backstage/plugin-techdocs-module-addons-contrib": "^1.0.4-next.2", + "@backstage/plugin-techdocs-react": "^1.0.4-next.2", + "@backstage/plugin-todo": "^0.2.11-next.3", + "@backstage/plugin-user-settings": "^0.4.8-next.3", "@backstage/theme": "^0.2.16", "@internal/plugin-catalog-customized": "0.0.2-next.0", "@material-ui/core": "^4.12.2", @@ -80,7 +80,7 @@ "zen-observable": "^0.8.15" }, "devDependencies": { - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@rjsf/core": "^3.2.1", "@testing-library/cypress": "^8.0.2", "@testing-library/jest-dom": "^5.10.1", diff --git a/packages/backend-app-api/CHANGELOG.md b/packages/backend-app-api/CHANGELOG.md index 635dad30d0..a9ab990f92 100644 --- a/packages/backend-app-api/CHANGELOG.md +++ b/packages/backend-app-api/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/backend-app-api +## 0.2.1-next.2 + +### Patch Changes + +- 854ba37357: Updated to support new `ServiceFactory` formats. +- 409ed984e8: Updated service implementations and backend wiring to support scoped service. +- Updated dependencies + - @backstage/backend-plugin-api@0.1.2-next.2 + - @backstage/errors@1.1.1-next.0 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/backend-tasks@0.3.5-next.1 + - @backstage/plugin-permission-node@0.6.5-next.3 + ## 0.2.1-next.1 ### Patch Changes diff --git a/packages/backend-app-api/package.json b/packages/backend-app-api/package.json index d4379bcde6..a028af090f 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.2.1-next.1", + "version": "0.2.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { @@ -33,17 +33,17 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/backend-common": "^0.15.1-next.2", - "@backstage/backend-plugin-api": "^0.1.2-next.1", - "@backstage/backend-tasks": "^0.3.5-next.0", - "@backstage/errors": "^1.1.0", - "@backstage/plugin-permission-node": "^0.6.5-next.2", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/backend-plugin-api": "^0.1.2-next.2", + "@backstage/backend-tasks": "^0.3.5-next.1", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/plugin-permission-node": "^0.6.5-next.3", "express": "^4.17.1", "express-promise-router": "^4.1.0", "winston": "^3.2.1" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2" + "@backstage/cli": "^0.19.0-next.3" }, "files": [ "dist", diff --git a/packages/backend-common/CHANGELOG.md b/packages/backend-common/CHANGELOG.md index 87f95aa12a..aaa90ac704 100644 --- a/packages/backend-common/CHANGELOG.md +++ b/packages/backend-common/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/backend-common +## 0.15.1-next.3 + +### Patch Changes + +- 96689fbdcb: Workaround for a rare race condition in tests. +- Updated dependencies + - @backstage/config-loader@1.1.4-next.2 + - @backstage/cli-common@0.1.10-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + ## 0.15.1-next.2 ### Patch Changes diff --git a/packages/backend-common/package.json b/packages/backend-common/package.json index 5509adb752..81dc37caca 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.15.1-next.2", + "version": "0.15.1-next.3", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { @@ -34,11 +34,11 @@ "test:kubernetes": "backstage-cli package test -t KubernetesContainerRunner --no-watch" }, "dependencies": { - "@backstage/cli-common": "^0.1.9", - "@backstage/config": "^1.0.1", - "@backstage/config-loader": "^1.1.4-next.1", - "@backstage/errors": "^1.1.0", - "@backstage/integration": "^1.3.1-next.1", + "@backstage/cli-common": "^0.1.10-next.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/config-loader": "^1.1.4-next.2", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/integration": "^1.3.1-next.2", "@backstage/types": "^1.0.0", "@google-cloud/storage": "^6.0.0", "@keyv/redis": "^2.2.3", @@ -94,8 +94,8 @@ } }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.28-next.2", - "@backstage/cli": "^0.19.0-next.2", + "@backstage/backend-test-utils": "^0.1.28-next.3", + "@backstage/cli": "^0.19.0-next.3", "@types/archiver": "^5.1.0", "@types/base64-stream": "^1.0.2", "@types/compression": "^1.7.0", diff --git a/packages/backend-defaults/CHANGELOG.md b/packages/backend-defaults/CHANGELOG.md index e91d4880c6..9684395ce0 100644 --- a/packages/backend-defaults/CHANGELOG.md +++ b/packages/backend-defaults/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/backend-defaults +## 0.1.1-next.1 + +### Patch Changes + +- 854ba37357: Updated to support new `ServiceFactory` formats. +- Updated dependencies + - @backstage/backend-plugin-api@0.1.2-next.2 + - @backstage/backend-app-api@0.2.1-next.2 + ## 0.1.1-next.0 ### Patch Changes diff --git a/packages/backend-defaults/package.json b/packages/backend-defaults/package.json index 9485091f76..e754b74c4d 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.1-next.0", + "version": "0.1.1-next.1", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { @@ -32,11 +32,11 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/backend-app-api": "^0.2.1-next.0", - "@backstage/backend-plugin-api": "^0.1.2-next.0" + "@backstage/backend-app-api": "^0.2.1-next.2", + "@backstage/backend-plugin-api": "^0.1.2-next.2" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.1" + "@backstage/cli": "^0.19.0-next.3" }, "files": [ "dist" diff --git a/packages/backend-plugin-api/CHANGELOG.md b/packages/backend-plugin-api/CHANGELOG.md index 9bb9cbcc49..b0dadbf61c 100644 --- a/packages/backend-plugin-api/CHANGELOG.md +++ b/packages/backend-plugin-api/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/backend-plugin-api +## 0.1.2-next.2 + +### Patch Changes + +- 409ed984e8: Service are now scoped to either `'plugin'` or `'root'` scope. Service factories have been updated to provide dependency instances directly rather than factory functions. +- 854ba37357: The `createServiceFactory` method has been updated to return a higher-order factory that can accept options. +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/plugin-permission-common@0.6.4-next.2 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/backend-tasks@0.3.5-next.1 + ## 0.1.2-next.1 ### Patch Changes diff --git a/packages/backend-plugin-api/package.json b/packages/backend-plugin-api/package.json index 8510f2eaa8..e9593dec3d 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.1.2-next.1", + "version": "0.1.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { @@ -33,17 +33,17 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/backend-common": "^0.15.1-next.2", - "@backstage/backend-tasks": "^0.3.5-next.0", - "@backstage/config": "^1.0.1", - "@backstage/plugin-permission-common": "^0.6.4-next.1", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/backend-tasks": "^0.3.5-next.1", + "@backstage/config": "^1.0.2-next.0", + "@backstage/plugin-permission-common": "^0.6.4-next.2", "@types/express": "^4.17.6", "express": "^4.17.1", "winston": "^3.2.1", "winston-transport": "^4.5.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2" + "@backstage/cli": "^0.19.0-next.3" }, "files": [ "dist", diff --git a/packages/backend-tasks/CHANGELOG.md b/packages/backend-tasks/CHANGELOG.md index 28017cf3d5..2307fd5d57 100644 --- a/packages/backend-tasks/CHANGELOG.md +++ b/packages/backend-tasks/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/backend-tasks +## 0.3.5-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/backend-common@0.15.1-next.3 + ## 0.3.5-next.0 ### Patch Changes diff --git a/packages/backend-tasks/package.json b/packages/backend-tasks/package.json index 7d244a387c..444616660a 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.3.5-next.0", + "version": "0.3.5-next.1", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { @@ -32,9 +32,9 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/backend-common": "^0.15.1-next.1", - "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.1.0", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/config": "^1.0.2-next.0", + "@backstage/errors": "^1.1.1-next.0", "@backstage/types": "^1.0.0", "@types/luxon": "^3.0.0", "cron": "^2.0.0", @@ -47,8 +47,8 @@ "zod": "^3.9.5" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.28-next.1", - "@backstage/cli": "^0.19.0-next.1", + "@backstage/backend-test-utils": "^0.1.28-next.3", + "@backstage/cli": "^0.19.0-next.3", "@types/cron": "^2.0.0", "wait-for-expect": "^3.0.2" }, diff --git a/packages/backend-test-utils/CHANGELOG.md b/packages/backend-test-utils/CHANGELOG.md index ef8fdeaeec..5ec06645b0 100644 --- a/packages/backend-test-utils/CHANGELOG.md +++ b/packages/backend-test-utils/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/backend-test-utils +## 0.1.28-next.3 + +### Patch Changes + +- 854ba37357: Updated to support new `ServiceFactory` formats. +- Updated dependencies + - @backstage/backend-plugin-api@0.1.2-next.2 + - @backstage/config@1.0.2-next.0 + - @backstage/backend-app-api@0.2.1-next.2 + - @backstage/cli@0.19.0-next.3 + - @backstage/backend-common@0.15.1-next.3 + ## 0.1.28-next.2 ### Patch Changes diff --git a/packages/backend-test-utils/package.json b/packages/backend-test-utils/package.json index 5e421b4b38..374860a387 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.28-next.2", + "version": "0.1.28-next.3", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { @@ -34,11 +34,11 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/backend-app-api": "^0.2.1-next.1", - "@backstage/backend-common": "^0.15.1-next.2", - "@backstage/backend-plugin-api": "^0.1.2-next.1", - "@backstage/cli": "^0.19.0-next.2", - "@backstage/config": "^1.0.1", + "@backstage/backend-app-api": "^0.2.1-next.2", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/backend-plugin-api": "^0.1.2-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/config": "^1.0.2-next.0", "better-sqlite3": "^7.5.0", "knex": "^2.0.0", "msw": "^0.47.0", @@ -48,7 +48,7 @@ "uuid": "^8.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2" + "@backstage/cli": "^0.19.0-next.3" }, "files": [ "dist", diff --git a/packages/backend/CHANGELOG.md b/packages/backend/CHANGELOG.md index 43d4c1c7c2..7b20372856 100644 --- a/packages/backend/CHANGELOG.md +++ b/packages/backend/CHANGELOG.md @@ -1,5 +1,45 @@ # example-backend +## 0.2.75-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.1.0-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/plugin-permission-common@0.6.4-next.2 + - @backstage/plugin-scaffolder-backend-module-rails@0.4.4-next.1 + - @backstage/plugin-catalog-backend@1.4.0-next.3 + - @backstage/plugin-auth-backend@0.16.0-next.3 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/plugin-scaffolder-backend@1.6.0-next.3 + - @backstage/plugin-badges-backend@0.1.30-next.1 + - @backstage/plugin-code-coverage-backend@0.2.2-next.2 + - @backstage/plugin-jenkins-backend@0.1.26-next.3 + - @backstage/plugin-kubernetes-backend@0.7.2-next.3 + - @backstage/plugin-tech-insights-backend@0.5.2-next.2 + - @backstage/plugin-techdocs-backend@1.3.0-next.2 + - @backstage/plugin-todo-backend@0.1.33-next.2 + - example-app@0.2.75-next.3 + - @backstage/plugin-kafka-backend@0.2.29-next.1 + - @backstage/backend-tasks@0.3.5-next.1 + - @backstage/plugin-app-backend@0.3.36-next.3 + - @backstage/plugin-auth-node@0.2.5-next.3 + - @backstage/plugin-azure-devops-backend@0.3.15-next.2 + - @backstage/plugin-graphql-backend@0.1.26-next.3 + - @backstage/plugin-permission-backend@0.5.11-next.2 + - @backstage/plugin-permission-node@0.6.5-next.3 + - @backstage/plugin-proxy-backend@0.2.30-next.2 + - @backstage/plugin-rollbar-backend@0.1.33-next.3 + - @backstage/plugin-search-backend@1.0.2-next.1 + - @backstage/plugin-search-backend-module-elasticsearch@1.0.2-next.2 + - @backstage/plugin-search-backend-module-pg@0.4.0-next.2 + - @backstage/plugin-search-backend-node@1.0.2-next.2 + - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.20-next.1 + - @backstage/plugin-tech-insights-node@0.3.4-next.1 + ## 0.2.75-next.2 ### Patch Changes diff --git a/packages/backend/package.json b/packages/backend/package.json index 5518b9d586..a8ae29ee18 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -1,6 +1,6 @@ { "name": "example-backend", - "version": "0.2.75-next.2", + "version": "0.2.75-next.3", "main": "dist/index.cjs.js", "types": "src/index.ts", "license": "Apache-2.0", @@ -26,40 +26,40 @@ "build-image": "docker build ../.. -f Dockerfile --tag example-backend" }, "dependencies": { - "@backstage/backend-common": "^0.15.1-next.2", - "@backstage/backend-tasks": "^0.3.5-next.0", - "@backstage/catalog-client": "^1.0.5-next.1", - "@backstage/catalog-model": "^1.1.0", - "@backstage/config": "^1.0.1", - "@backstage/integration": "^1.3.1-next.1", - "@backstage/plugin-app-backend": "^0.3.36-next.2", - "@backstage/plugin-auth-backend": "^0.16.0-next.2", - "@backstage/plugin-auth-node": "^0.2.5-next.2", - "@backstage/plugin-azure-devops-backend": "^0.3.15-next.1", - "@backstage/plugin-badges-backend": "^0.1.30-next.0", - "@backstage/plugin-catalog-backend": "^1.4.0-next.2", - "@backstage/plugin-code-coverage-backend": "^0.2.2-next.1", - "@backstage/plugin-graphql-backend": "^0.1.26-next.2", - "@backstage/plugin-jenkins-backend": "^0.1.26-next.2", - "@backstage/plugin-kafka-backend": "^0.2.29-next.0", - "@backstage/plugin-kubernetes-backend": "^0.7.2-next.2", - "@backstage/plugin-permission-backend": "^0.5.11-next.1", - "@backstage/plugin-permission-common": "^0.6.4-next.1", - "@backstage/plugin-permission-node": "^0.6.5-next.2", - "@backstage/plugin-proxy-backend": "^0.2.30-next.1", - "@backstage/plugin-rollbar-backend": "^0.1.33-next.2", - "@backstage/plugin-scaffolder-backend": "^1.6.0-next.2", - "@backstage/plugin-scaffolder-backend-module-rails": "^0.4.4-next.0", - "@backstage/plugin-search-backend": "^1.0.2-next.0", - "@backstage/plugin-search-backend-module-elasticsearch": "^1.0.2-next.1", - "@backstage/plugin-search-backend-module-pg": "^0.4.0-next.1", - "@backstage/plugin-search-backend-node": "^1.0.2-next.1", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/backend-tasks": "^0.3.5-next.1", + "@backstage/catalog-client": "^1.1.0-next.2", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/integration": "^1.3.1-next.2", + "@backstage/plugin-app-backend": "^0.3.36-next.3", + "@backstage/plugin-auth-backend": "^0.16.0-next.3", + "@backstage/plugin-auth-node": "^0.2.5-next.3", + "@backstage/plugin-azure-devops-backend": "^0.3.15-next.2", + "@backstage/plugin-badges-backend": "^0.1.30-next.1", + "@backstage/plugin-catalog-backend": "^1.4.0-next.3", + "@backstage/plugin-code-coverage-backend": "^0.2.2-next.2", + "@backstage/plugin-graphql-backend": "^0.1.26-next.3", + "@backstage/plugin-jenkins-backend": "^0.1.26-next.3", + "@backstage/plugin-kafka-backend": "^0.2.29-next.1", + "@backstage/plugin-kubernetes-backend": "^0.7.2-next.3", + "@backstage/plugin-permission-backend": "^0.5.11-next.2", + "@backstage/plugin-permission-common": "^0.6.4-next.2", + "@backstage/plugin-permission-node": "^0.6.5-next.3", + "@backstage/plugin-proxy-backend": "^0.2.30-next.2", + "@backstage/plugin-rollbar-backend": "^0.1.33-next.3", + "@backstage/plugin-scaffolder-backend": "^1.6.0-next.3", + "@backstage/plugin-scaffolder-backend-module-rails": "^0.4.4-next.1", + "@backstage/plugin-search-backend": "^1.0.2-next.1", + "@backstage/plugin-search-backend-module-elasticsearch": "^1.0.2-next.2", + "@backstage/plugin-search-backend-module-pg": "^0.4.0-next.2", + "@backstage/plugin-search-backend-node": "^1.0.2-next.2", "@backstage/plugin-search-common": "^1.0.1-next.0", - "@backstage/plugin-tech-insights-backend": "^0.5.2-next.1", - "@backstage/plugin-tech-insights-backend-module-jsonfc": "^0.1.20-next.0", - "@backstage/plugin-tech-insights-node": "^0.3.4-next.0", - "@backstage/plugin-techdocs-backend": "^1.3.0-next.1", - "@backstage/plugin-todo-backend": "^0.1.33-next.1", + "@backstage/plugin-tech-insights-backend": "^0.5.2-next.2", + "@backstage/plugin-tech-insights-backend-module-jsonfc": "^0.1.20-next.1", + "@backstage/plugin-tech-insights-node": "^0.3.4-next.1", + "@backstage/plugin-techdocs-backend": "^1.3.0-next.2", + "@backstage/plugin-todo-backend": "^0.1.33-next.2", "@gitbeaker/node": "^35.1.0", "@octokit/rest": "^19.0.3", "azure-devops-node-api": "^11.0.1", @@ -76,7 +76,7 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", + "@backstage/cli": "^0.19.0-next.3", "@types/dockerode": "^3.3.0", "@types/express": "^4.17.6", "@types/express-serve-static-core": "^4.17.5", diff --git a/packages/catalog-client/CHANGELOG.md b/packages/catalog-client/CHANGELOG.md index 77e0b7ab48..6cbcab0a4e 100644 --- a/packages/catalog-client/CHANGELOG.md +++ b/packages/catalog-client/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/catalog-client +## 1.1.0-next.2 + +### Minor Changes + +- 65d1d4343f: Adding `validateEntity` method that calls `/validate-entity` endpoint. + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/errors@1.1.1-next.0 + ## 1.0.5-next.1 ### Patch Changes diff --git a/packages/catalog-client/package.json b/packages/catalog-client/package.json index 61d47aa65e..3a06074a4d 100644 --- a/packages/catalog-client/package.json +++ b/packages/catalog-client/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/catalog-client", "description": "An isomorphic client for the catalog backend", - "version": "1.0.5-next.1", + "version": "1.1.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -32,12 +32,12 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0", - "@backstage/errors": "^1.1.0", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/errors": "^1.1.1-next.0", "cross-fetch": "^3.1.5" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", + "@backstage/cli": "^0.19.0-next.3", "msw": "^0.47.0" }, "files": [ diff --git a/packages/catalog-model/CHANGELOG.md b/packages/catalog-model/CHANGELOG.md index 9554b94788..25d5866002 100644 --- a/packages/catalog-model/CHANGELOG.md +++ b/packages/catalog-model/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/catalog-model +## 1.1.1-next.0 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + ## 1.1.0 ### Minor Changes diff --git a/packages/catalog-model/package.json b/packages/catalog-model/package.json index be2cbb7664..28df6e58fc 100644 --- a/packages/catalog-model/package.json +++ b/packages/catalog-model/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/catalog-model", "description": "Types and validators that help describe the model of a Backstage Catalog", - "version": "1.1.0", + "version": "1.1.1-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,8 +33,8 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.1.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/errors": "^1.1.1-next.0", "@backstage/types": "^1.0.0", "ajv": "^8.10.0", "json-schema": "^0.4.0", @@ -42,7 +42,7 @@ "uuid": "^8.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.1", + "@backstage/cli": "^0.19.0-next.3", "@types/json-schema": "^7.0.5", "@types/lodash": "^4.14.151", "yaml": "^2.0.0" diff --git a/packages/cli-common/CHANGELOG.md b/packages/cli-common/CHANGELOG.md index b5b24d099e..05362b7a31 100644 --- a/packages/cli-common/CHANGELOG.md +++ b/packages/cli-common/CHANGELOG.md @@ -1,5 +1,11 @@ # @backstage/cli-common +## 0.1.10-next.0 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. + ## 0.1.9 ### Patch Changes diff --git a/packages/cli-common/package.json b/packages/cli-common/package.json index e95a07d401..965c62ce38 100644 --- a/packages/cli-common/package.json +++ b/packages/cli-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/cli-common", "description": "Common functionality used by cli, backend, and create-app", - "version": "0.1.9", + "version": "0.1.10-next.0", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { @@ -32,7 +32,7 @@ "start": "backstage-cli package start" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.1", + "@backstage/cli": "^0.19.0-next.3", "@types/node": "^16.0.0" }, "files": [ diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index 6d40a22cae..52ba0a24c6 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/cli +## 0.19.0-next.3 + +### Patch Changes + +- 7d47def9c4: Added dependency on `@types/jest` v27. The `@types/jest` dependency has also been removed from the plugin template and should be removed from any of your own internal packages. If you wish to override the version of `@types/jest` or `jest`, use Yarn resolutions. +- a7e82c9b01: Updated `versions:bump` command to be compatible with Yarn 3. +- Updated dependencies + - @backstage/config-loader@1.1.4-next.2 + - @backstage/cli-common@0.1.10-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/release-manifests@0.0.6-next.2 + ## 0.19.0-next.2 ### Patch Changes diff --git a/packages/cli/package.json b/packages/cli/package.json index f267a0d9ad..9a412d401f 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.19.0-next.2", + "version": "0.19.0-next.3", "publishConfig": { "access": "public" }, @@ -30,11 +30,11 @@ "backstage-cli": "bin/backstage-cli" }, "dependencies": { - "@backstage/cli-common": "^0.1.9", - "@backstage/config": "^1.0.1", - "@backstage/config-loader": "^1.1.4-next.1", - "@backstage/errors": "^1.1.0", - "@backstage/release-manifests": "^0.0.6-next.1", + "@backstage/cli-common": "^0.1.10-next.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/config-loader": "^1.1.4-next.2", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/release-manifests": "^0.0.6-next.2", "@backstage/types": "^1.0.0", "@manypkg/get-packages": "^1.1.3", "@octokit/request": "^6.0.0", @@ -129,13 +129,13 @@ "zod": "^3.11.6" }, "devDependencies": { - "@backstage/backend-common": "^0.15.1-next.2", - "@backstage/config": "^1.0.1", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/config": "^1.0.2-next.0", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@backstage/theme": "^0.2.16", "@types/diff": "^5.0.0", "@types/express": "^4.17.6", diff --git a/packages/codemods/CHANGELOG.md b/packages/codemods/CHANGELOG.md index ab9ddbc28c..43b2bb2d8a 100644 --- a/packages/codemods/CHANGELOG.md +++ b/packages/codemods/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/codemods +## 0.1.39-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/cli-common@0.1.10-next.0 + ## 0.1.38 ### Patch Changes diff --git a/packages/codemods/package.json b/packages/codemods/package.json index b95478b326..2e7bd09dbc 100644 --- a/packages/codemods/package.json +++ b/packages/codemods/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/codemods", "description": "A collection of codemods for Backstage projects", - "version": "0.1.38", + "version": "0.1.39-next.0", "publishConfig": { "access": "public", "main": "dist/index.cjs.js" @@ -33,13 +33,13 @@ "backstage-codemods": "bin/backstage-codemods" }, "dependencies": { - "@backstage/cli-common": "^0.1.9", + "@backstage/cli-common": "^0.1.10-next.0", "chalk": "^4.0.0", "jscodeshift": "^0.13.0", "jscodeshift-add-imports": "^1.0.10" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.1", + "@backstage/cli": "^0.19.0-next.3", "@types/jscodeshift": "^0.11.0", "@types/node": "^16.11.26", "commander": "^9.1.0", diff --git a/packages/config-loader/CHANGELOG.md b/packages/config-loader/CHANGELOG.md index 8e49a132ce..c46763bccd 100644 --- a/packages/config-loader/CHANGELOG.md +++ b/packages/config-loader/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/config-loader +## 1.1.4-next.2 + +### Patch Changes + +- 5ecca7e44b: No longer log when reloading remote config. +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/cli-common@0.1.10-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + ## 1.1.4-next.1 ### Patch Changes diff --git a/packages/config-loader/package.json b/packages/config-loader/package.json index 95704de6f3..3f0644e3d6 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.1.4-next.1", + "version": "1.1.4-next.2", "publishConfig": { "access": "public", "main": "dist/index.cjs.js", @@ -33,9 +33,9 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/cli-common": "^0.1.9", - "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.1.0", + "@backstage/cli-common": "^0.1.10-next.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/errors": "^1.1.1-next.0", "@backstage/types": "^1.0.0", "@types/json-schema": "^7.0.6", "ajv": "^8.10.0", @@ -50,7 +50,7 @@ "yup": "^0.32.9" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", + "@backstage/cli": "^0.19.0-next.3", "@types/json-schema-merge-allof": "^0.6.0", "@types/mock-fs": "^4.10.0", "@types/node": "^16.11.26", diff --git a/packages/config/CHANGELOG.md b/packages/config/CHANGELOG.md index 7858e99096..9b9ea96dd1 100644 --- a/packages/config/CHANGELOG.md +++ b/packages/config/CHANGELOG.md @@ -1,5 +1,11 @@ # @backstage/config +## 1.0.2-next.0 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. + ## 1.0.1 ### Patch Changes diff --git a/packages/config/package.json b/packages/config/package.json index ff759170bd..9610495455 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/config", "description": "Config API used by Backstage core, backend, and CLI", - "version": "1.0.1", + "version": "1.0.2-next.0", "publishConfig": { "access": "public", "main": "dist/index.cjs.js", @@ -36,8 +36,8 @@ "lodash": "^4.17.21" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.1", - "@backstage/test-utils": "^1.2.0-next.1", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/test-utils": "^1.2.0-next.3", "@types/node": "^16.0.0" }, "files": [ diff --git a/packages/core-app-api/CHANGELOG.md b/packages/core-app-api/CHANGELOG.md index 6fe94bee7f..47740e9e7b 100644 --- a/packages/core-app-api/CHANGELOG.md +++ b/packages/core-app-api/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/core-app-api +## 1.1.0-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/core-plugin-api@1.0.6-next.3 + ## 1.1.0-next.2 ### Patch Changes diff --git a/packages/core-app-api/package.json b/packages/core-app-api/package.json index c5b8907b8f..8532997477 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.1.0-next.2", + "version": "1.1.0-next.3", "publishConfig": { "access": "public", "main": "dist/index.esm.js", @@ -32,8 +32,8 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/config": "^1.0.1", - "@backstage/core-plugin-api": "^1.0.6-next.2", + "@backstage/config": "^1.0.2-next.0", + "@backstage/core-plugin-api": "^1.0.6-next.3", "@backstage/types": "^1.0.0", "@backstage/version-bridge": "^1.0.1", "@types/prop-types": "^15.7.3", @@ -48,8 +48,8 @@ "react-router-dom": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", diff --git a/packages/core-components/CHANGELOG.md b/packages/core-components/CHANGELOG.md index f0ecf302c9..64c5ddc502 100644 --- a/packages/core-components/CHANGELOG.md +++ b/packages/core-components/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/core-components +## 0.11.1-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + ## 0.11.1-next.2 ### Patch Changes diff --git a/packages/core-components/package.json b/packages/core-components/package.json index e316e7d6f4..a32961eece 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.11.1-next.2", + "version": "0.11.1-next.3", "publishConfig": { "access": "public", "main": "dist/index.esm.js", @@ -32,9 +32,9 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/config": "^1.0.1", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/errors": "^1.1.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/errors": "^1.1.1-next.0", "@backstage/theme": "^0.2.16", "@backstage/version-bridge": "^1.0.1", "@material-table/core": "^3.1.0", @@ -78,9 +78,9 @@ "react-router-dom": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", diff --git a/packages/core-plugin-api/CHANGELOG.md b/packages/core-plugin-api/CHANGELOG.md index a1da7291e9..0889d0d6e9 100644 --- a/packages/core-plugin-api/CHANGELOG.md +++ b/packages/core-plugin-api/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/core-plugin-api +## 1.0.6-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/config@1.0.2-next.0 + ## 1.0.6-next.2 ### Patch Changes diff --git a/packages/core-plugin-api/package.json b/packages/core-plugin-api/package.json index a40ffcf3bb..5d013f6e87 100644 --- a/packages/core-plugin-api/package.json +++ b/packages/core-plugin-api/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/core-plugin-api", "description": "Core API used by Backstage plugins", - "version": "1.0.6-next.2", + "version": "1.0.6-next.3", "publishConfig": { "access": "public", "main": "dist/index.esm.js", @@ -33,7 +33,7 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/config": "^1.0.1", + "@backstage/config": "^1.0.2-next.0", "@backstage/types": "^1.0.0", "@backstage/version-bridge": "^1.0.1", "history": "^5.0.0", @@ -46,9 +46,9 @@ "react-router-dom": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", diff --git a/packages/create-app/CHANGELOG.md b/packages/create-app/CHANGELOG.md index c30f0c9d75..e131c59b6c 100644 --- a/packages/create-app/CHANGELOG.md +++ b/packages/create-app/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/create-app +## 0.4.31-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/cli-common@0.1.10-next.0 + ## 0.4.31-next.2 ### Patch Changes diff --git a/packages/create-app/package.json b/packages/create-app/package.json index 6523e36bc0..d059446638 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.4.31-next.2", + "version": "0.4.31-next.3", "publishConfig": { "access": "public" }, @@ -32,7 +32,7 @@ "start": "nodemon --" }, "dependencies": { - "@backstage/cli-common": "^0.1.9", + "@backstage/cli-common": "^0.1.10-next.0", "chalk": "^4.0.0", "commander": "^9.1.0", "fs-extra": "10.1.0", @@ -42,7 +42,7 @@ "recursive-readdir": "^2.2.2" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", + "@backstage/cli": "^0.19.0-next.3", "@types/fs-extra": "^9.0.1", "@types/inquirer": "^8.1.3", "@types/node": "^16.11.26", diff --git a/packages/dev-utils/CHANGELOG.md b/packages/dev-utils/CHANGELOG.md index 6115fc076e..e292fde14c 100644 --- a/packages/dev-utils/CHANGELOG.md +++ b/packages/dev-utils/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/dev-utils +## 1.0.6-next.2 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- 329ed2b9c7: Fixed routing when using React Router v6 stable. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/app-defaults@1.0.6-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-app-api@1.1.0-next.3 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/integration-react@1.1.4-next.2 + - @backstage/test-utils@1.2.0-next.3 + ## 1.0.6-next.1 ### Patch Changes diff --git a/packages/dev-utils/package.json b/packages/dev-utils/package.json index 671f264e79..dbbdce225a 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.6-next.1", + "version": "1.0.6-next.2", "publishConfig": { "access": "public", "main": "dist/index.esm.js", @@ -32,14 +32,14 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/app-defaults": "^1.0.6-next.1", - "@backstage/catalog-model": "^1.1.0", - "@backstage/core-app-api": "^1.1.0-next.1", - "@backstage/core-components": "^0.11.1-next.1", - "@backstage/core-plugin-api": "^1.0.6-next.1", - "@backstage/integration-react": "^1.1.4-next.0", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", - "@backstage/test-utils": "^1.2.0-next.1", + "@backstage/app-defaults": "^1.0.6-next.2", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/integration-react": "^1.1.4-next.2", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -57,7 +57,7 @@ "react-router-dom": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.1", + "@backstage/cli": "^0.19.0-next.3", "@types/node": "^16.0.0" }, "files": [ diff --git a/packages/e2e-test/package.json b/packages/e2e-test/package.json index b9660518a5..12f430cad2 100644 --- a/packages/e2e-test/package.json +++ b/packages/e2e-test/package.json @@ -27,9 +27,9 @@ }, "bin": "bin/e2e-test", "devDependencies": { - "@backstage/cli": "^0.19.0-next.1", - "@backstage/cli-common": "^0.1.9-next.0", - "@backstage/errors": "^1.1.0-next.0", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/cli-common": "^0.1.10-next.0", + "@backstage/errors": "^1.1.1-next.0", "@types/fs-extra": "^9.0.1", "@types/node": "^16.11.26", "@types/puppeteer": "^5.4.4", diff --git a/packages/errors/CHANGELOG.md b/packages/errors/CHANGELOG.md index bb3eba0249..cbb5292829 100644 --- a/packages/errors/CHANGELOG.md +++ b/packages/errors/CHANGELOG.md @@ -1,5 +1,11 @@ # @backstage/errors +## 1.1.1-next.0 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. + ## 1.1.0 ### Minor Changes diff --git a/packages/errors/package.json b/packages/errors/package.json index 3a84d4c7c5..ab315338bb 100644 --- a/packages/errors/package.json +++ b/packages/errors/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/errors", "description": "Common utilities for error handling within Backstage", - "version": "1.1.0", + "version": "1.1.1-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -37,7 +37,7 @@ "serialize-error": "^8.0.1" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.1" + "@backstage/cli": "^0.19.0-next.3" }, "files": [ "dist" diff --git a/packages/integration-react/CHANGELOG.md b/packages/integration-react/CHANGELOG.md index 41afc53fe8..f09758bffe 100644 --- a/packages/integration-react/CHANGELOG.md +++ b/packages/integration-react/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/integration-react +## 1.1.4-next.2 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/integration@1.3.1-next.2 + ## 1.1.4-next.1 ### Patch Changes diff --git a/packages/integration-react/package.json b/packages/integration-react/package.json index 34e50cf84b..80ea2f029b 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.4-next.1", + "version": "1.1.4-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,10 +23,10 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/integration": "^1.3.1-next.1", + "@backstage/config": "^1.0.2-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/integration": "^1.3.1-next.2", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -37,9 +37,9 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/packages/integration/CHANGELOG.md b/packages/integration/CHANGELOG.md index ac5ec94bc4..0ac5e9e5bd 100644 --- a/packages/integration/CHANGELOG.md +++ b/packages/integration/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/integration +## 1.3.1-next.2 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- f76f22c649: Improved caching around github app tokens. + Tokens are now cached for 50 minutes, not 10. + Calls to get app installations are also included in this cache. + If you have more than one github app configured, consider adding `allowedInstallationOwners` to your apps configuration to gain the most benefit from these performance changes. +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + ## 1.3.1-next.1 ### Patch Changes diff --git a/packages/integration/package.json b/packages/integration/package.json index ba6ef42fb2..c68bd3176c 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.3.1-next.1", + "version": "1.3.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -32,8 +32,8 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.1.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/errors": "^1.1.1-next.0", "@octokit/auth-app": "^4.0.0", "@octokit/rest": "^19.0.3", "cross-fetch": "^3.1.5", @@ -42,9 +42,9 @@ "luxon": "^3.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/config-loader": "^1.1.4-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/config-loader": "^1.1.4-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@types/luxon": "^3.0.0", "msw": "^0.47.0" }, diff --git a/packages/release-manifests/CHANGELOG.md b/packages/release-manifests/CHANGELOG.md index 2445088982..b0e104511f 100644 --- a/packages/release-manifests/CHANGELOG.md +++ b/packages/release-manifests/CHANGELOG.md @@ -1,5 +1,11 @@ # @backstage/release-manifests +## 0.0.6-next.2 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. + ## 0.0.6-next.1 ### Patch Changes diff --git a/packages/release-manifests/package.json b/packages/release-manifests/package.json index 371745f43f..44c081581c 100644 --- a/packages/release-manifests/package.json +++ b/packages/release-manifests/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/release-manifests", "description": "Helper library for receiving release manifests", - "version": "0.0.6-next.1", + "version": "0.0.6-next.2", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { @@ -35,8 +35,8 @@ "cross-fetch": "^3.1.5" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/test-utils": "^1.2.0-next.3", "@types/node": "^16.0.0", "msw": "^0.47.0" }, diff --git a/packages/techdocs-cli-embedded-app/CHANGELOG.md b/packages/techdocs-cli-embedded-app/CHANGELOG.md index 55552f363e..ee1e3ea184 100644 --- a/packages/techdocs-cli-embedded-app/CHANGELOG.md +++ b/packages/techdocs-cli-embedded-app/CHANGELOG.md @@ -1,5 +1,23 @@ # techdocs-cli-embedded-app +## 0.2.74-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/app-defaults@1.0.6-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/core-app-api@1.1.0-next.3 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/integration-react@1.1.4-next.2 + - @backstage/test-utils@1.2.0-next.3 + - @backstage/plugin-catalog@1.5.1-next.3 + - @backstage/plugin-techdocs@1.3.2-next.3 + - @backstage/cli@0.19.0-next.3 + - @backstage/plugin-techdocs-react@1.0.4-next.2 + ## 0.2.74-next.1 ### Patch Changes diff --git a/packages/techdocs-cli-embedded-app/package.json b/packages/techdocs-cli-embedded-app/package.json index 295688eca8..a8d0e0cf4c 100644 --- a/packages/techdocs-cli-embedded-app/package.json +++ b/packages/techdocs-cli-embedded-app/package.json @@ -1,24 +1,24 @@ { "name": "techdocs-cli-embedded-app", - "version": "0.2.74-next.1", + "version": "0.2.74-next.2", "private": true, "backstage": { "role": "frontend" }, "bundled": true, "dependencies": { - "@backstage/app-defaults": "^1.0.6-next.1", - "@backstage/catalog-model": "^1.1.0", - "@backstage/cli": "^0.19.0-next.1", - "@backstage/config": "^1.0.1", - "@backstage/core-app-api": "^1.1.0-next.1", - "@backstage/core-components": "^0.11.1-next.1", - "@backstage/core-plugin-api": "^1.0.6-next.1", - "@backstage/integration-react": "^1.1.4-next.0", - "@backstage/plugin-catalog": "^1.5.1-next.1", - "@backstage/plugin-techdocs": "^1.3.2-next.1", - "@backstage/plugin-techdocs-react": "^1.0.4-next.1", - "@backstage/test-utils": "^1.2.0-next.1", + "@backstage/app-defaults": "^1.0.6-next.2", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/config": "^1.0.2-next.0", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/integration-react": "^1.1.4-next.2", + "@backstage/plugin-catalog": "^1.5.1-next.3", + "@backstage/plugin-techdocs": "^1.3.2-next.3", + "@backstage/plugin-techdocs-react": "^1.0.4-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.11.0", "@material-ui/icons": "^4.9.1", @@ -30,7 +30,7 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.1", + "@backstage/cli": "^0.19.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/packages/techdocs-cli/CHANGELOG.md b/packages/techdocs-cli/CHANGELOG.md index 17780a3887..56fdf6afd2 100644 --- a/packages/techdocs-cli/CHANGELOG.md +++ b/packages/techdocs-cli/CHANGELOG.md @@ -1,5 +1,17 @@ # @techdocs/cli +## 1.2.1-next.2 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/cli-common@0.1.10-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/plugin-techdocs-node@1.4.0-next.2 + ## 1.2.1-next.1 ### Patch Changes diff --git a/packages/techdocs-cli/package.json b/packages/techdocs-cli/package.json index 97d8a5e721..2ec384eb34 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.2.1-next.1", + "version": "1.2.1-next.2", "publishConfig": { "access": "public" }, @@ -36,7 +36,7 @@ "techdocs-cli": "bin/techdocs-cli" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", + "@backstage/cli": "^0.19.0-next.3", "@types/commander": "^2.12.2", "@types/fs-extra": "^9.0.6", "@types/http-proxy": "^1.17.4", @@ -60,11 +60,11 @@ "ext": "ts" }, "dependencies": { - "@backstage/backend-common": "^0.15.1-next.2", - "@backstage/catalog-model": "^1.1.0", - "@backstage/cli-common": "^0.1.9", - "@backstage/config": "^1.0.1", - "@backstage/plugin-techdocs-node": "^1.4.0-next.1", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/cli-common": "^0.1.10-next.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/plugin-techdocs-node": "^1.4.0-next.2", "@types/dockerode": "^3.3.0", "commander": "^9.1.0", "dockerode": "^3.3.1", diff --git a/packages/test-utils/CHANGELOG.md b/packages/test-utils/CHANGELOG.md index 2317386cf7..b4101d9514 100644 --- a/packages/test-utils/CHANGELOG.md +++ b/packages/test-utils/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/test-utils +## 1.2.0-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- d9e39544be: Add missing peer dependencies +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/core-app-api@1.1.0-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/plugin-permission-common@0.6.4-next.2 + - @backstage/plugin-permission-react@0.4.5-next.2 + ## 1.2.0-next.2 ### Patch Changes diff --git a/packages/test-utils/package.json b/packages/test-utils/package.json index 8399e09357..4d45519fa1 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.2.0-next.2", + "version": "1.2.0-next.3", "publishConfig": { "access": "public", "main": "dist/index.esm.js", @@ -32,11 +32,11 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/config": "^1.0.1", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/plugin-permission-common": "^0.6.4-next.1", - "@backstage/plugin-permission-react": "^0.4.5-next.1", + "@backstage/config": "^1.0.2-next.0", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/plugin-permission-common": "^0.6.4-next.2", + "@backstage/plugin-permission-react": "^0.4.5-next.2", "@backstage/theme": "^0.2.16", "@backstage/types": "^1.0.0", "@material-ui/core": "^4.12.2", @@ -55,7 +55,7 @@ "react-router-dom": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", + "@backstage/cli": "^0.19.0-next.3", "@types/node": "^16.11.26", "msw": "^0.47.0" }, diff --git a/plugins/adr-backend/CHANGELOG.md b/plugins/adr-backend/CHANGELOG.md index 9b5bdf0ebd..b92a33a8f0 100644 --- a/plugins/adr-backend/CHANGELOG.md +++ b/plugins/adr-backend/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-adr-backend +## 0.2.1-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.1.0-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/plugin-adr-common@0.2.1-next.1 + ## 0.2.1-next.2 ### Patch Changes diff --git a/plugins/adr-backend/package.json b/plugins/adr-backend/package.json index 2ebdd9c78f..91ed8e002c 100644 --- a/plugins/adr-backend/package.json +++ b/plugins/adr-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-adr-backend", - "version": "0.2.1-next.2", + "version": "0.2.1-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -28,13 +28,13 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/backend-common": "^0.15.1-next.2", - "@backstage/catalog-client": "^1.0.5-next.1", - "@backstage/catalog-model": "^1.1.0", - "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.1.0", - "@backstage/integration": "^1.3.1-next.1", - "@backstage/plugin-adr-common": "^0.2.1-next.0", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/catalog-client": "^1.1.0-next.2", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/integration": "^1.3.1-next.2", + "@backstage/plugin-adr-common": "^0.2.1-next.1", "@backstage/plugin-search-common": "^1.0.1-next.0", "luxon": "^3.0.0", "marked": "^4.0.14", @@ -43,7 +43,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", + "@backstage/cli": "^0.19.0-next.3", "@types/marked": "^4.0.0", "@types/supertest": "^2.0.8", "msw": "^0.47.0", diff --git a/plugins/adr-common/CHANGELOG.md b/plugins/adr-common/CHANGELOG.md index 63584b41b1..9269768185 100644 --- a/plugins/adr-common/CHANGELOG.md +++ b/plugins/adr-common/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-adr-common +## 0.2.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + ## 0.2.1-next.0 ### Patch Changes diff --git a/plugins/adr-common/package.json b/plugins/adr-common/package.json index c5a49f59fe..02631c3e6c 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.1-next.0", + "version": "0.2.1-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -29,12 +29,12 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0", - "@backstage/integration": "^1.3.1-next.0", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/integration": "^1.3.1-next.2", "@backstage/plugin-search-common": "^1.0.1-next.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.1" + "@backstage/cli": "^0.19.0-next.3" }, "files": [ "dist" diff --git a/plugins/adr/CHANGELOG.md b/plugins/adr/CHANGELOG.md index 494a7f33fe..3fc5634bd1 100644 --- a/plugins/adr/CHANGELOG.md +++ b/plugins/adr/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-adr +## 0.2.1-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/integration-react@1.1.4-next.2 + - @backstage/plugin-adr-common@0.2.1-next.1 + ## 0.2.1-next.2 ### Patch Changes diff --git a/plugins/adr/package.json b/plugins/adr/package.json index db9ba4a11c..732cb4d67f 100644 --- a/plugins/adr/package.json +++ b/plugins/adr/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-adr", - "version": "0.2.1-next.2", + "version": "0.2.1-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -22,12 +22,12 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/integration-react": "^1.1.4-next.1", - "@backstage/plugin-adr-common": "^0.2.1-next.0", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/integration-react": "^1.1.4-next.2", + "@backstage/plugin-adr-common": "^0.2.1-next.1", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", "@backstage/plugin-search-common": "^1.0.1-next.0", "@backstage/plugin-search-react": "^1.1.0-next.2", "@backstage/theme": "^0.2.16", @@ -45,10 +45,10 @@ "react-router-dom": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/airbrake-backend/CHANGELOG.md b/plugins/airbrake-backend/CHANGELOG.md index d6c30dddcb..1868062e0b 100644 --- a/plugins/airbrake-backend/CHANGELOG.md +++ b/plugins/airbrake-backend/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-airbrake-backend +## 0.2.9-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/backend-common@0.15.1-next.3 + ## 0.2.9-next.2 ### Patch Changes diff --git a/plugins/airbrake-backend/package.json b/plugins/airbrake-backend/package.json index 3a658af4e3..1a04e5185d 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.9-next.2", + "version": "0.2.9-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -22,8 +22,8 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.1-next.2", - "@backstage/config": "^1.0.1", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/config": "^1.0.2-next.0", "@types/express": "*", "express": "^4.17.1", "express-promise-router": "^4.1.0", @@ -32,7 +32,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", + "@backstage/cli": "^0.19.0-next.3", "@types/http-proxy-middleware": "^0.19.3", "@types/supertest": "^2.0.8", "msw": "^0.47.0", diff --git a/plugins/airbrake/CHANGELOG.md b/plugins/airbrake/CHANGELOG.md index 6935373985..8262a89cb0 100644 --- a/plugins/airbrake/CHANGELOG.md +++ b/plugins/airbrake/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-airbrake +## 0.3.9-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/dev-utils@1.0.6-next.2 + - @backstage/test-utils@1.2.0-next.3 + ## 0.3.9-next.2 ### Patch Changes diff --git a/plugins/airbrake/package.json b/plugins/airbrake/package.json index 3d829c4bd0..c8ec322420 100644 --- a/plugins/airbrake/package.json +++ b/plugins/airbrake/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-airbrake", - "version": "0.3.9-next.2", + "version": "0.3.9-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -22,12 +22,12 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -40,10 +40,10 @@ "react-router": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/app-defaults": "^1.0.6-next.1", - "@backstage/cli": "^0.19.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/app-defaults": "^1.0.6-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/allure/CHANGELOG.md b/plugins/allure/CHANGELOG.md index f7db453135..64e114dda7 100644 --- a/plugins/allure/CHANGELOG.md +++ b/plugins/allure/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-allure +## 0.1.25-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + ## 0.1.25-next.2 ### Patch Changes diff --git a/plugins/allure/package.json b/plugins/allure/package.json index 511b3b02a5..12400806a7 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.25-next.2", + "version": "0.1.25-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,10 +23,10 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -38,10 +38,10 @@ "react-router-dom": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/analytics-module-ga/CHANGELOG.md b/plugins/analytics-module-ga/CHANGELOG.md index 0e666be80a..fb5051da23 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.20-next.2 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + ## 0.1.20-next.1 ### Patch Changes diff --git a/plugins/analytics-module-ga/package.json b/plugins/analytics-module-ga/package.json index a10056153b..e9b5044d92 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.20-next.1", + "version": "0.1.20-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -22,9 +22,9 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", + "@backstage/config": "^1.0.2-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -36,10 +36,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/apache-airflow/CHANGELOG.md b/plugins/apache-airflow/CHANGELOG.md index 3f3f236b76..2396ca2b6f 100644 --- a/plugins/apache-airflow/CHANGELOG.md +++ b/plugins/apache-airflow/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-apache-airflow +## 0.2.2-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + ## 0.2.2-next.2 ### Patch Changes diff --git a/plugins/apache-airflow/package.json b/plugins/apache-airflow/package.json index 5cf15f7620..f132c46a78 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.2-next.2", + "version": "0.2.2-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -22,8 +22,8 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -35,10 +35,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/api-docs/CHANGELOG.md b/plugins/api-docs/CHANGELOG.md index d71021782f..db0ffbeada 100644 --- a/plugins/api-docs/CHANGELOG.md +++ b/plugins/api-docs/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-api-docs +## 0.8.9-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/plugin-catalog@1.5.1-next.3 + ## 0.8.9-next.2 ### Patch Changes diff --git a/plugins/api-docs/package.json b/plugins/api-docs/package.json index 1ae1c8e00f..8281a1522d 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.8.9-next.2", + "version": "0.8.9-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,11 +33,11 @@ }, "dependencies": { "@asyncapi/react-component": "1.0.0-next.40", - "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/plugin-catalog": "^1.5.1-next.2", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/plugin-catalog": "^1.5.1-next.3", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -56,10 +56,10 @@ "react-router-dom": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/apollo-explorer/CHANGELOG.md b/plugins/apollo-explorer/CHANGELOG.md index 68983a1f07..40c9fa0c57 100644 --- a/plugins/apollo-explorer/CHANGELOG.md +++ b/plugins/apollo-explorer/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-apollo-explorer +## 0.1.2-next.2 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + ## 0.1.2-next.1 ### Patch Changes diff --git a/plugins/apollo-explorer/package.json b/plugins/apollo-explorer/package.json index b33901b96f..39143c3133 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.2-next.1", + "version": "0.1.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,8 +23,8 @@ }, "dependencies": { "@apollo/explorer": "^1.1.1", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.9.13", "@material-ui/icons": "^4.9.1", @@ -36,10 +36,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/app-backend/CHANGELOG.md b/plugins/app-backend/CHANGELOG.md index 33df9f7078..02188afefc 100644 --- a/plugins/app-backend/CHANGELOG.md +++ b/plugins/app-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-app-backend +## 0.3.36-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/config-loader@1.1.4-next.2 + - @backstage/config@1.0.2-next.0 + - @backstage/backend-common@0.15.1-next.3 + ## 0.3.36-next.2 ### Patch Changes diff --git a/plugins/app-backend/package.json b/plugins/app-backend/package.json index f37e9e5ab8..c06c41e6dd 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.36-next.2", + "version": "0.3.36-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -32,9 +32,9 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.1-next.2", - "@backstage/config": "^1.0.1", - "@backstage/config-loader": "^1.1.4-next.1", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/config": "^1.0.2-next.0", + "@backstage/config-loader": "^1.1.4-next.2", "@backstage/types": "^1.0.0", "@types/express": "^4.17.6", "express": "^4.17.1", @@ -49,8 +49,8 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.28-next.2", - "@backstage/cli": "^0.19.0-next.2", + "@backstage/backend-test-utils": "^0.1.28-next.3", + "@backstage/cli": "^0.19.0-next.3", "@backstage/types": "^1.0.0", "@types/supertest": "^2.0.8", "mock-fs": "^5.1.0", diff --git a/plugins/auth-backend/CHANGELOG.md b/plugins/auth-backend/CHANGELOG.md index 7b723756cf..7c5fff0dd0 100644 --- a/plugins/auth-backend/CHANGELOG.md +++ b/plugins/auth-backend/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-auth-backend +## 0.16.0-next.3 + +### Minor Changes + +- 8600855fbf: The auth0 integration is updated to use the `passport-auth0` library. The configuration under `auth.providers.auth0.\*` now supports an optional `audience` parameter; providing that allows you to connect to the correct API to get permissions, access tokens, and full profile information. + + [What is an Audience](https://community.auth0.com/t/what-is-the-audience/71414) + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.1.0-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/plugin-auth-node@0.2.5-next.3 + ## 0.16.0-next.2 ### Patch Changes diff --git a/plugins/auth-backend/package.json b/plugins/auth-backend/package.json index 35e6f86f2c..4f820f4829 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.16.0-next.2", + "version": "0.16.0-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -32,12 +32,12 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.1-next.2", - "@backstage/catalog-client": "^1.0.5-next.1", - "@backstage/catalog-model": "^1.1.0", - "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.1.0", - "@backstage/plugin-auth-node": "^0.2.5-next.2", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/catalog-client": "^1.1.0-next.2", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/plugin-auth-node": "^0.2.5-next.3", "@backstage/types": "^1.0.0", "@davidzemon/passport-okta-oauth": "^0.0.5", "@google-cloud/firestore": "^6.0.0", @@ -76,8 +76,8 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.28-next.2", - "@backstage/cli": "^0.19.0-next.2", + "@backstage/backend-test-utils": "^0.1.28-next.3", + "@backstage/cli": "^0.19.0-next.3", "@types/body-parser": "^1.19.0", "@types/cookie-parser": "^1.4.2", "@types/express-session": "^1.17.2", diff --git a/plugins/auth-node/CHANGELOG.md b/plugins/auth-node/CHANGELOG.md index 71413dc6ef..13fb0bbcce 100644 --- a/plugins/auth-node/CHANGELOG.md +++ b/plugins/auth-node/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-auth-node +## 0.2.5-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/backend-common@0.15.1-next.3 + ## 0.2.5-next.2 ### Patch Changes diff --git a/plugins/auth-node/package.json b/plugins/auth-node/package.json index ebf8c6974d..52115d6611 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.5-next.2", + "version": "0.2.5-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -22,9 +22,9 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/backend-common": "^0.15.1-next.2", - "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.1.0", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/config": "^1.0.2-next.0", + "@backstage/errors": "^1.1.1-next.0", "@types/express": "*", "express": "^4.17.1", "jose": "^4.6.0", @@ -32,8 +32,8 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.28-next.2", - "@backstage/cli": "^0.19.0-next.2", + "@backstage/backend-test-utils": "^0.1.28-next.3", + "@backstage/cli": "^0.19.0-next.3", "lodash": "^4.17.21", "msw": "^0.47.0", "uuid": "^8.0.0" diff --git a/plugins/azure-devops-backend/CHANGELOG.md b/plugins/azure-devops-backend/CHANGELOG.md index dba2ff571a..d6145f3308 100644 --- a/plugins/azure-devops-backend/CHANGELOG.md +++ b/plugins/azure-devops-backend/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-azure-devops-backend +## 0.3.15-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/backend-common@0.15.1-next.3 + ## 0.3.15-next.1 ### Patch Changes diff --git a/plugins/azure-devops-backend/package.json b/plugins/azure-devops-backend/package.json index debcf701e2..92bcf84c62 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.15-next.1", + "version": "0.3.15-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -22,8 +22,8 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.1-next.2", - "@backstage/config": "^1.0.1", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/config": "^1.0.2-next.0", "@backstage/plugin-azure-devops-common": "^0.3.0-next.0", "@types/express": "^4.17.6", "azure-devops-node-api": "^11.0.1", @@ -35,7 +35,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", + "@backstage/cli": "^0.19.0-next.3", "@types/supertest": "^2.0.8", "msw": "^0.47.0", "supertest": "^6.1.6" diff --git a/plugins/azure-devops/CHANGELOG.md b/plugins/azure-devops/CHANGELOG.md index e4fa40551a..13ea5bbaa5 100644 --- a/plugins/azure-devops/CHANGELOG.md +++ b/plugins/azure-devops/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-azure-devops +## 0.2.0-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + ## 0.2.0-next.2 ### Patch Changes diff --git a/plugins/azure-devops/package.json b/plugins/azure-devops/package.json index 969103db00..0cdd048b1b 100644 --- a/plugins/azure-devops/package.json +++ b/plugins/azure-devops/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-azure-devops", - "version": "0.2.0-next.2", + "version": "0.2.0-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -28,12 +28,12 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/errors": "^1.1.0", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/errors": "^1.1.1-next.0", "@backstage/plugin-azure-devops-common": "^0.3.0-next.0", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -47,10 +47,10 @@ "react-router": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/badges-backend/CHANGELOG.md b/plugins/badges-backend/CHANGELOG.md index f26dab77f3..c54c09a08b 100644 --- a/plugins/badges-backend/CHANGELOG.md +++ b/plugins/badges-backend/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-badges-backend +## 0.1.30-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.1.0-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/backend-common@0.15.1-next.3 + ## 0.1.30-next.0 ### Patch Changes diff --git a/plugins/badges-backend/package.json b/plugins/badges-backend/package.json index 420bfbd86b..0002695cc8 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.1.30-next.0", + "version": "0.1.30-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,11 +33,11 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.1-next.1", - "@backstage/catalog-client": "^1.0.5-next.0", - "@backstage/catalog-model": "^1.1.0", - "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.1.0", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/catalog-client": "^1.1.0-next.2", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/errors": "^1.1.1-next.0", "@types/express": "^4.17.6", "badge-maker": "^3.3.0", "cors": "^2.8.5", @@ -47,7 +47,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.1", + "@backstage/cli": "^0.19.0-next.3", "@types/supertest": "^2.0.8", "supertest": "^6.1.3" }, diff --git a/plugins/badges/CHANGELOG.md b/plugins/badges/CHANGELOG.md index 0533b306d1..50137c221b 100644 --- a/plugins/badges/CHANGELOG.md +++ b/plugins/badges/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-badges +## 0.2.33-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + ## 0.2.33-next.2 ### Patch Changes diff --git a/plugins/badges/package.json b/plugins/badges/package.json index 100f2a6102..8748a05077 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.33-next.2", + "version": "0.2.33-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -29,11 +29,11 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/errors": "^1.1.0", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -45,10 +45,10 @@ "react-router": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/bazaar-backend/CHANGELOG.md b/plugins/bazaar-backend/CHANGELOG.md index b6cec7bc0d..4494697278 100644 --- a/plugins/bazaar-backend/CHANGELOG.md +++ b/plugins/bazaar-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-bazaar-backend +## 0.1.20-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/backend-test-utils@0.1.28-next.3 + - @backstage/backend-common@0.15.1-next.3 + ## 0.1.20-next.0 ### Patch Changes diff --git a/plugins/bazaar-backend/package.json b/plugins/bazaar-backend/package.json index 0c7c2c51ea..c1242acd7e 100644 --- a/plugins/bazaar-backend/package.json +++ b/plugins/bazaar-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-bazaar-backend", - "version": "0.1.20-next.0", + "version": "0.1.20-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -22,9 +22,9 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.1-next.1", - "@backstage/backend-test-utils": "^0.1.28-next.1", - "@backstage/config": "^1.0.1", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/backend-test-utils": "^0.1.28-next.3", + "@backstage/config": "^1.0.2-next.0", "@types/express": "^4.17.6", "express": "^4.17.1", "express-promise-router": "^4.1.0", @@ -33,7 +33,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.1" + "@backstage/cli": "^0.19.0-next.3" }, "files": [ "dist", diff --git a/plugins/bazaar/CHANGELOG.md b/plugins/bazaar/CHANGELOG.md index c8fbcb961b..8d93b89e0f 100644 --- a/plugins/bazaar/CHANGELOG.md +++ b/plugins/bazaar/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-bazaar +## 0.1.24-next.2 + +### Patch Changes + +- 1dd12349d1: Fixed broken routing by removing the wrapping `Router` from the `RoutedTabs` children. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-client@1.1.0-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/plugin-catalog@1.5.1-next.3 + - @backstage/cli@0.19.0-next.3 + ## 0.1.24-next.1 ### Patch Changes diff --git a/plugins/bazaar/package.json b/plugins/bazaar/package.json index f78a4f08fe..21e2f3ce25 100644 --- a/plugins/bazaar/package.json +++ b/plugins/bazaar/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-bazaar", - "version": "0.1.24-next.1", + "version": "0.1.24-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -22,13 +22,13 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-client": "^1.0.5-next.0", - "@backstage/catalog-model": "^1.1.0", - "@backstage/cli": "^0.19.0-next.1", - "@backstage/core-components": "^0.11.1-next.1", - "@backstage/core-plugin-api": "^1.0.6-next.1", - "@backstage/plugin-catalog": "^1.5.1-next.1", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", + "@backstage/catalog-client": "^1.1.0-next.2", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/plugin-catalog": "^1.5.1-next.3", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", "@date-io/luxon": "1.x", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -44,8 +44,8 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.1", - "@backstage/dev-utils": "^1.0.6-next.1", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", "@testing-library/jest-dom": "^5.10.1", "cross-fetch": "^3.1.5" }, diff --git a/plugins/bitrise/CHANGELOG.md b/plugins/bitrise/CHANGELOG.md index f940cb40df..114ab5549e 100644 --- a/plugins/bitrise/CHANGELOG.md +++ b/plugins/bitrise/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-bitrise +## 0.1.36-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + ## 0.1.36-next.2 ### Patch Changes diff --git a/plugins/bitrise/package.json b/plugins/bitrise/package.json index a849fba8ef..b659cac03a 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.36-next.2", + "version": "0.1.36-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,10 +23,10 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -42,10 +42,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/catalog-backend-module-aws/CHANGELOG.md b/plugins/catalog-backend-module-aws/CHANGELOG.md index 10196c0793..07b5446dcc 100644 --- a/plugins/catalog-backend-module-aws/CHANGELOG.md +++ b/plugins/catalog-backend-module-aws/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-catalog-backend-module-aws +## 0.1.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/plugin-catalog-backend@1.4.0-next.3 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/backend-tasks@0.3.5-next.1 + ## 0.1.9-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-aws/package.json b/plugins/catalog-backend-module-aws/package.json index 871f32773b..33158ac182 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.9-next.1", + "version": "0.1.9-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -32,13 +32,13 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/backend-common": "^0.15.1-next.1", - "@backstage/backend-tasks": "^0.3.5-next.0", - "@backstage/catalog-model": "^1.1.0", - "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.1.0", - "@backstage/integration": "^1.3.1-next.0", - "@backstage/plugin-catalog-backend": "^1.4.0-next.1", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/backend-tasks": "^0.3.5-next.1", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/integration": "^1.3.1-next.2", + "@backstage/plugin-catalog-backend": "^1.4.0-next.3", "@backstage/types": "^1.0.0", "aws-sdk": "^2.840.0", "lodash": "^4.17.21", @@ -47,7 +47,7 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.1", + "@backstage/cli": "^0.19.0-next.3", "@types/lodash": "^4.14.151", "aws-sdk-mock": "^5.2.1", "yaml": "^2.0.0" diff --git a/plugins/catalog-backend-module-azure/CHANGELOG.md b/plugins/catalog-backend-module-azure/CHANGELOG.md index de79e9f47c..57d5315cf4 100644 --- a/plugins/catalog-backend-module-azure/CHANGELOG.md +++ b/plugins/catalog-backend-module-azure/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-catalog-backend-module-azure +## 0.1.7-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/plugin-catalog-backend@1.4.0-next.3 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/backend-tasks@0.3.5-next.1 + ## 0.1.7-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-azure/package.json b/plugins/catalog-backend-module-azure/package.json index 2c7ab06064..3dd90d1bb3 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.7-next.2", + "version": "0.1.7-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -32,13 +32,13 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/backend-common": "^0.15.1-next.2", - "@backstage/backend-tasks": "^0.3.5-next.0", - "@backstage/catalog-model": "^1.1.0", - "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.1.0", - "@backstage/integration": "^1.3.1-next.1", - "@backstage/plugin-catalog-backend": "^1.4.0-next.2", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/backend-tasks": "^0.3.5-next.1", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/integration": "^1.3.1-next.2", + "@backstage/plugin-catalog-backend": "^1.4.0-next.3", "@backstage/types": "^1.0.0", "lodash": "^4.17.21", "msw": "^0.47.0", @@ -47,8 +47,8 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.28-next.2", - "@backstage/cli": "^0.19.0-next.2", + "@backstage/backend-test-utils": "^0.1.28-next.3", + "@backstage/cli": "^0.19.0-next.3", "@types/lodash": "^4.14.151" }, "files": [ diff --git a/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md index b75a810816..cd50519279 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-catalog-backend-module-bitbucket-cloud +## 0.1.3-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/plugin-catalog-backend@1.4.0-next.3 + - @backstage/backend-tasks@0.3.5-next.1 + ## 0.1.3-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-bitbucket-cloud/package.json b/plugins/catalog-backend-module-bitbucket-cloud/package.json index 441e7c5ab2..e8ddff85b0 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.3-next.2", + "version": "0.1.3-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -32,18 +32,18 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/backend-tasks": "^0.3.5-next.0", - "@backstage/config": "^1.0.1", - "@backstage/integration": "^1.3.1-next.1", + "@backstage/backend-tasks": "^0.3.5-next.1", + "@backstage/config": "^1.0.2-next.0", + "@backstage/integration": "^1.3.1-next.2", "@backstage/plugin-bitbucket-cloud-common": "^0.1.3-next.1", - "@backstage/plugin-catalog-backend": "^1.4.0-next.2", + "@backstage/plugin-catalog-backend": "^1.4.0-next.3", "uuid": "^8.0.0", "winston": "^3.2.1" }, "devDependencies": { - "@backstage/backend-common": "^0.15.1-next.2", - "@backstage/backend-test-utils": "^0.1.28-next.2", - "@backstage/cli": "^0.19.0-next.2", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/backend-test-utils": "^0.1.28-next.3", + "@backstage/cli": "^0.19.0-next.3", "msw": "^0.47.0" }, "files": [ diff --git a/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md index 7a8b1c95bc..ae82dc8ad7 100644 --- a/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-catalog-backend-module-bitbucket-server +## 0.1.1-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/plugin-catalog-backend@1.4.0-next.3 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/backend-tasks@0.3.5-next.1 + ## 0.1.1-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-bitbucket-server/package.json b/plugins/catalog-backend-module-bitbucket-server/package.json index 31b24687e8..4064732eca 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.1-next.2", + "version": "0.1.1-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -31,21 +31,21 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/backend-common": "^0.15.1-next.2", - "@backstage/backend-tasks": "^0.3.5-next.0", - "@backstage/catalog-model": "^1.0.1", - "@backstage/config": "^1.0.0", - "@backstage/errors": "^1.0.0", - "@backstage/integration": "^1.3.1-next.1", - "@backstage/plugin-catalog-backend": "^1.4.0-next.2", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/backend-tasks": "^0.3.5-next.1", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/integration": "^1.3.1-next.2", + "@backstage/plugin-catalog-backend": "^1.4.0-next.3", "@types/node-fetch": "^2.5.12", "node-fetch": "^2.6.7", "uuid": "^8.0.0", "winston": "^3.2.1" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.28-next.2", - "@backstage/cli": "^0.19.0-next.2", + "@backstage/backend-test-utils": "^0.1.28-next.3", + "@backstage/cli": "^0.19.0-next.3", "msw": "^0.47.0" }, "files": [ diff --git a/plugins/catalog-backend-module-bitbucket/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket/CHANGELOG.md index 65f5fb11f1..7533ebaa47 100644 --- a/plugins/catalog-backend-module-bitbucket/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-catalog-backend-module-bitbucket +## 0.2.3-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/plugin-catalog-backend@1.4.0-next.3 + - @backstage/backend-common@0.15.1-next.3 + ## 0.2.3-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-bitbucket/package.json b/plugins/catalog-backend-module-bitbucket/package.json index 7881402dea..7d27598d1f 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.3-next.2", + "version": "0.2.3-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -32,13 +32,13 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/backend-common": "^0.15.1-next.2", - "@backstage/catalog-model": "^1.1.0", - "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.1.0", - "@backstage/integration": "^1.3.1-next.1", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/integration": "^1.3.1-next.2", "@backstage/plugin-bitbucket-cloud-common": "^0.1.3-next.1", - "@backstage/plugin-catalog-backend": "^1.4.0-next.2", + "@backstage/plugin-catalog-backend": "^1.4.0-next.3", "@backstage/types": "^1.0.0", "lodash": "^4.17.21", "msw": "^0.47.0", @@ -46,8 +46,8 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.28-next.2", - "@backstage/cli": "^0.19.0-next.2", + "@backstage/backend-test-utils": "^0.1.28-next.3", + "@backstage/cli": "^0.19.0-next.3", "@types/lodash": "^4.14.151" }, "files": [ diff --git a/plugins/catalog-backend-module-gerrit/CHANGELOG.md b/plugins/catalog-backend-module-gerrit/CHANGELOG.md index 015804e6ea..d90cbfbe10 100644 --- a/plugins/catalog-backend-module-gerrit/CHANGELOG.md +++ b/plugins/catalog-backend-module-gerrit/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-catalog-backend-module-gerrit +## 0.1.4-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/plugin-catalog-backend@1.4.0-next.3 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/backend-tasks@0.3.5-next.1 + ## 0.1.4-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-gerrit/package.json b/plugins/catalog-backend-module-gerrit/package.json index af98288b4e..53d54afc06 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.4-next.2", + "version": "0.1.4-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -28,13 +28,13 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/backend-common": "^0.15.1-next.2", - "@backstage/backend-tasks": "^0.3.5-next.0", - "@backstage/catalog-model": "^1.1.0", - "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.1.0", - "@backstage/integration": "^1.3.1-next.1", - "@backstage/plugin-catalog-backend": "^1.4.0-next.2", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/backend-tasks": "^0.3.5-next.1", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/integration": "^1.3.1-next.2", + "@backstage/plugin-catalog-backend": "^1.4.0-next.3", "fs-extra": "10.1.0", "msw": "^0.47.0", "node-fetch": "^2.6.7", @@ -42,8 +42,8 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.28-next.2", - "@backstage/cli": "^0.19.0-next.2", + "@backstage/backend-test-utils": "^0.1.28-next.3", + "@backstage/cli": "^0.19.0-next.3", "@types/fs-extra": "^9.0.1" }, "files": [ diff --git a/plugins/catalog-backend-module-github/CHANGELOG.md b/plugins/catalog-backend-module-github/CHANGELOG.md index aa8db8962d..a1a11f1519 100644 --- a/plugins/catalog-backend-module-github/CHANGELOG.md +++ b/plugins/catalog-backend-module-github/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-catalog-backend-module-github +## 0.1.7-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.1.0-next.2 + - @backstage/backend-plugin-api@0.1.2-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/plugin-catalog-backend@1.4.0-next.3 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/backend-tasks@0.3.5-next.1 + ## 0.1.7-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-github/package.json b/plugins/catalog-backend-module-github/package.json index 04a4d3c01f..c27d3d4c60 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.1.7-next.2", + "version": "0.1.7-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,15 +33,15 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/backend-common": "^0.15.1-next.2", - "@backstage/backend-plugin-api": "^0.1.2-next.1", - "@backstage/backend-tasks": "^0.3.5-next.0", - "@backstage/catalog-model": "^1.1.0", - "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.1.0", - "@backstage/integration": "^1.3.1-next.1", - "@backstage/plugin-catalog-backend": "^1.4.0-next.2", - "@backstage/plugin-catalog-node": "^1.0.2-next.1", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/backend-plugin-api": "^0.1.2-next.2", + "@backstage/backend-tasks": "^0.3.5-next.1", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/integration": "^1.3.1-next.2", + "@backstage/plugin-catalog-backend": "^1.4.0-next.3", + "@backstage/plugin-catalog-node": "^1.1.0-next.2", "@backstage/types": "^1.0.0", "@octokit/graphql": "^5.0.0", "lodash": "^4.17.21", @@ -51,8 +51,8 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.28-next.2", - "@backstage/cli": "^0.19.0-next.2", + "@backstage/backend-test-utils": "^0.1.28-next.3", + "@backstage/cli": "^0.19.0-next.3", "@types/lodash": "^4.14.151" }, "files": [ diff --git a/plugins/catalog-backend-module-gitlab/CHANGELOG.md b/plugins/catalog-backend-module-gitlab/CHANGELOG.md index 958fce089d..ba2016b713 100644 --- a/plugins/catalog-backend-module-gitlab/CHANGELOG.md +++ b/plugins/catalog-backend-module-gitlab/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-catalog-backend-module-gitlab +## 0.1.7-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/plugin-catalog-backend@1.4.0-next.3 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/backend-tasks@0.3.5-next.1 + ## 0.1.7-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-gitlab/package.json b/plugins/catalog-backend-module-gitlab/package.json index 9933f8c5a8..56d6fd73e8 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.1.7-next.2", + "version": "0.1.7-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -32,13 +32,13 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/backend-common": "^0.15.1-next.2", - "@backstage/backend-tasks": "^0.3.5-next.0", - "@backstage/catalog-model": "^1.1.0", - "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.1.0", - "@backstage/integration": "^1.3.1-next.1", - "@backstage/plugin-catalog-backend": "^1.4.0-next.2", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/backend-tasks": "^0.3.5-next.1", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/integration": "^1.3.1-next.2", + "@backstage/plugin-catalog-backend": "^1.4.0-next.3", "@backstage/types": "^1.0.0", "lodash": "^4.17.21", "msw": "^0.47.0", @@ -47,8 +47,8 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.28-next.2", - "@backstage/cli": "^0.19.0-next.2", + "@backstage/backend-test-utils": "^0.1.28-next.3", + "@backstage/cli": "^0.19.0-next.3", "@types/lodash": "^4.14.151", "@types/uuid": "^8.0.0" }, diff --git a/plugins/catalog-backend-module-ldap/CHANGELOG.md b/plugins/catalog-backend-module-ldap/CHANGELOG.md index addb85f704..6429576b05 100644 --- a/plugins/catalog-backend-module-ldap/CHANGELOG.md +++ b/plugins/catalog-backend-module-ldap/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-catalog-backend-module-ldap +## 0.5.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/plugin-catalog-backend@1.4.0-next.3 + - @backstage/backend-tasks@0.3.5-next.1 + ## 0.5.3-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-ldap/package.json b/plugins/catalog-backend-module-ldap/package.json index 35924aaf67..4d9de73a77 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.3-next.1", + "version": "0.5.3-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -32,11 +32,11 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/backend-tasks": "^0.3.5-next.0", - "@backstage/catalog-model": "^1.1.0", - "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.1.0", - "@backstage/plugin-catalog-backend": "^1.4.0-next.1", + "@backstage/backend-tasks": "^0.3.5-next.1", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/plugin-catalog-backend": "^1.4.0-next.3", "@backstage/types": "^1.0.0", "@types/ldapjs": "^2.2.0", "ldapjs": "^2.2.0", @@ -45,7 +45,7 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.1", + "@backstage/cli": "^0.19.0-next.3", "@types/lodash": "^4.14.151" }, "files": [ diff --git a/plugins/catalog-backend-module-msgraph/CHANGELOG.md b/plugins/catalog-backend-module-msgraph/CHANGELOG.md index e69fa287c9..25ac8c2716 100644 --- a/plugins/catalog-backend-module-msgraph/CHANGELOG.md +++ b/plugins/catalog-backend-module-msgraph/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-catalog-backend-module-msgraph +## 0.4.2-next.3 + +### Patch Changes + +- d80aab31ae: Added $select attribute to user query +- Updated dependencies + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/plugin-catalog-backend@1.4.0-next.3 + - @backstage/backend-tasks@0.3.5-next.1 + ## 0.4.2-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-msgraph/package.json b/plugins/catalog-backend-module-msgraph/package.json index 3bddab4130..93270570fb 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.4.2-next.2", + "version": "0.4.2-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,10 +33,10 @@ }, "dependencies": { "@azure/identity": "^2.1.0", - "@backstage/backend-tasks": "^0.3.5-next.0", - "@backstage/catalog-model": "^1.1.0", - "@backstage/config": "^1.0.1", - "@backstage/plugin-catalog-backend": "^1.4.0-next.2", + "@backstage/backend-tasks": "^0.3.5-next.1", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/plugin-catalog-backend": "^1.4.0-next.3", "@microsoft/microsoft-graph-types": "^2.6.0", "@types/node-fetch": "^2.5.12", "lodash": "^4.17.21", @@ -47,9 +47,9 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/backend-common": "^0.15.1-next.2", - "@backstage/backend-test-utils": "^0.1.28-next.2", - "@backstage/cli": "^0.19.0-next.2", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/backend-test-utils": "^0.1.28-next.3", + "@backstage/cli": "^0.19.0-next.3", "@types/lodash": "^4.14.151", "msw": "^0.47.0" }, diff --git a/plugins/catalog-backend-module-openapi/CHANGELOG.md b/plugins/catalog-backend-module-openapi/CHANGELOG.md index e93151d472..f9a1ad9ed9 100644 --- a/plugins/catalog-backend-module-openapi/CHANGELOG.md +++ b/plugins/catalog-backend-module-openapi/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-catalog-backend-module-openapi +## 0.1.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.1.0-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/plugin-catalog-backend@1.4.0-next.3 + - @backstage/backend-common@0.15.1-next.3 + ## 0.1.2-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-openapi/package.json b/plugins/catalog-backend-module-openapi/package.json index 55ffe05fc7..420a9d547e 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.2-next.1", + "version": "0.1.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,19 +33,19 @@ }, "dependencies": { "@apidevtools/swagger-parser": "^10.1.0", - "@backstage/backend-common": "^0.15.1-next.1", - "@backstage/catalog-model": "^1.1.0", - "@backstage/config": "^1.0.1", - "@backstage/integration": "^1.3.1-next.0", - "@backstage/plugin-catalog-backend": "^1.4.0-next.1", - "@backstage/plugin-catalog-node": "^1.0.2-next.0", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/integration": "^1.3.1-next.2", + "@backstage/plugin-catalog-backend": "^1.4.0-next.3", + "@backstage/plugin-catalog-node": "^1.1.0-next.2", "@backstage/types": "^1.0.0", "winston": "^3.2.1", "yaml": "^2.1.1" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.28-next.1", - "@backstage/cli": "^0.19.0-next.1", + "@backstage/backend-test-utils": "^0.1.28-next.3", + "@backstage/cli": "^0.19.0-next.3", "openapi-types": "^12.0.0" }, "files": [ diff --git a/plugins/catalog-backend/CHANGELOG.md b/plugins/catalog-backend/CHANGELOG.md index 7fb1cf7cab..07d434b7b2 100644 --- a/plugins/catalog-backend/CHANGELOG.md +++ b/plugins/catalog-backend/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-catalog-backend +## 1.4.0-next.3 + +### Minor Changes + +- 6e63bc43f2: Added the `refresh` function to the Connection of the entity providers. + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.1.0-next.2 + - @backstage/backend-plugin-api@0.1.2-next.2 + - @backstage/catalog-client@1.1.0-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/plugin-permission-common@0.6.4-next.2 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/plugin-scaffolder-common@1.2.0-next.1 + - @backstage/plugin-permission-node@0.6.5-next.3 + ## 1.4.0-next.2 ### Patch Changes diff --git a/plugins/catalog-backend/package.json b/plugins/catalog-backend/package.json index fe0478e115..0b9d363b3a 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.4.0-next.2", + "version": "1.4.0-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,18 +33,18 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.1-next.2", - "@backstage/backend-plugin-api": "^0.1.2-next.1", - "@backstage/catalog-client": "^1.0.5-next.1", - "@backstage/catalog-model": "^1.1.0", - "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.1.0", - "@backstage/integration": "^1.3.1-next.1", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/backend-plugin-api": "^0.1.2-next.2", + "@backstage/catalog-client": "^1.1.0-next.2", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/integration": "^1.3.1-next.2", "@backstage/plugin-catalog-common": "^1.0.6-next.0", - "@backstage/plugin-catalog-node": "^1.0.2-next.1", - "@backstage/plugin-permission-common": "^0.6.4-next.1", - "@backstage/plugin-permission-node": "^0.6.5-next.2", - "@backstage/plugin-scaffolder-common": "^1.2.0-next.0", + "@backstage/plugin-catalog-node": "^1.1.0-next.2", + "@backstage/plugin-permission-common": "^0.6.4-next.2", + "@backstage/plugin-permission-node": "^0.6.5-next.3", + "@backstage/plugin-scaffolder-common": "^1.2.0-next.1", "@backstage/plugin-search-common": "^1.0.1-next.0", "@backstage/types": "^1.0.0", "@types/express": "^4.17.6", @@ -69,10 +69,10 @@ "zod": "^3.11.6" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.28-next.2", - "@backstage/cli": "^0.19.0-next.2", - "@backstage/plugin-permission-common": "^0.6.4-next.1", - "@backstage/plugin-search-backend-node": "1.0.2-next.1", + "@backstage/backend-test-utils": "^0.1.28-next.3", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/plugin-permission-common": "^0.6.4-next.2", + "@backstage/plugin-search-backend-node": "1.0.2-next.2", "@types/core-js": "^2.5.4", "@types/git-url-parse": "^9.0.0", "@types/lodash": "^4.14.151", diff --git a/plugins/catalog-graph/CHANGELOG.md b/plugins/catalog-graph/CHANGELOG.md index 7d11622796..5fbaa9ecca 100644 --- a/plugins/catalog-graph/CHANGELOG.md +++ b/plugins/catalog-graph/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-catalog-graph +## 0.2.21-next.2 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-client@1.1.0-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + ## 0.2.21-next.1 ### Patch Changes diff --git a/plugins/catalog-graph/package.json b/plugins/catalog-graph/package.json index 3f9a79ee9a..995ed3eebe 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.21-next.1", + "version": "0.2.21-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -22,11 +22,11 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-client": "^1.0.5-next.0", - "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.1-next.1", - "@backstage/core-plugin-api": "^1.0.6-next.1", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", + "@backstage/catalog-client": "^1.1.0-next.2", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -43,11 +43,11 @@ "react-router": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.1", - "@backstage/core-app-api": "^1.1.0-next.1", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/plugin-catalog": "^1.5.1-next.1", - "@backstage/test-utils": "^1.2.0-next.1", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/plugin-catalog": "^1.5.1-next.3", + "@backstage/test-utils": "^1.2.0-next.3", "@backstage/types": "^1.0.0", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/catalog-graphql/CHANGELOG.md b/plugins/catalog-graphql/CHANGELOG.md index 53e66ef2c7..28eafef43b 100644 --- a/plugins/catalog-graphql/CHANGELOG.md +++ b/plugins/catalog-graphql/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-catalog-graphql +## 0.3.13-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + ## 0.3.13-next.2 ### Patch Changes diff --git a/plugins/catalog-graphql/package.json b/plugins/catalog-graphql/package.json index d4268ea270..b8c65b2784 100644 --- a/plugins/catalog-graphql/package.json +++ b/plugins/catalog-graphql/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-graphql", "description": "An experimental Backstage catalog GraphQL module", - "version": "0.3.13-next.2", + "version": "0.3.13-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,8 +34,8 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0", - "@backstage/config": "^1.0.1", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/config": "^1.0.2-next.0", "@backstage/types": "^1.0.0", "apollo-server": "^3.0.0", "graphql": "^16.0.0", @@ -46,8 +46,8 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/test-utils": "^1.2.0-next.3", "@graphql-codegen/cli": "^2.3.1", "@graphql-codegen/graphql-modules-preset": "^2.3.2", "@graphql-codegen/typescript": "^2.4.2", diff --git a/plugins/catalog-import/CHANGELOG.md b/plugins/catalog-import/CHANGELOG.md index c817f09e8d..35633dca6a 100644 --- a/plugins/catalog-import/CHANGELOG.md +++ b/plugins/catalog-import/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-catalog-import +## 0.8.12-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-client@1.1.0-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/integration-react@1.1.4-next.2 + ## 0.8.12-next.2 ### Patch Changes diff --git a/plugins/catalog-import/package.json b/plugins/catalog-import/package.json index 9d6a6945e0..895973f1ca 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.8.12-next.2", + "version": "0.8.12-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -32,15 +32,15 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-client": "^1.0.5-next.1", - "@backstage/catalog-model": "^1.1.0", - "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/errors": "^1.1.0", - "@backstage/integration": "^1.3.1-next.1", - "@backstage/integration-react": "^1.1.4-next.1", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", + "@backstage/catalog-client": "^1.1.0-next.2", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/integration": "^1.3.1-next.2", + "@backstage/integration-react": "^1.1.4-next.2", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -58,10 +58,10 @@ "react-router": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", diff --git a/plugins/catalog-node/CHANGELOG.md b/plugins/catalog-node/CHANGELOG.md index 24006068f6..0c88527b97 100644 --- a/plugins/catalog-node/CHANGELOG.md +++ b/plugins/catalog-node/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-catalog-node +## 1.1.0-next.2 + +### Minor Changes + +- 9743bc788c: Added refresh function to the `EntityProviderConnection` to be able to schedule refreshes from entity providers. + +### Patch Changes + +- 409ed984e8: Updated usage of experimental backend service APIs. +- Updated dependencies + - @backstage/backend-plugin-api@0.1.2-next.2 + - @backstage/catalog-client@1.1.0-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/errors@1.1.1-next.0 + ## 1.0.2-next.1 ### Patch Changes diff --git a/plugins/catalog-node/package.json b/plugins/catalog-node/package.json index 991aa67b68..2ef9a738fc 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.0.2-next.1", + "version": "1.1.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -24,16 +24,16 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/backend-plugin-api": "^0.1.2-next.1", - "@backstage/catalog-client": "^1.0.5-next.1", - "@backstage/catalog-model": "^1.1.0", - "@backstage/errors": "1.1.0", + "@backstage/backend-plugin-api": "^0.1.2-next.2", + "@backstage/catalog-client": "^1.1.0-next.2", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/errors": "1.1.1-next.0", "@backstage/types": "^1.0.0" }, "devDependencies": { - "@backstage/backend-common": "^0.15.1-next.2", - "@backstage/backend-test-utils": "^0.1.28-next.2", - "@backstage/cli": "^0.19.0-next.2" + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/backend-test-utils": "^0.1.28-next.3", + "@backstage/cli": "^0.19.0-next.3" }, "files": [ "dist", diff --git a/plugins/catalog-react/CHANGELOG.md b/plugins/catalog-react/CHANGELOG.md index 59a178de9e..a0e7bfcae5 100644 --- a/plugins/catalog-react/CHANGELOG.md +++ b/plugins/catalog-react/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-catalog-react +## 1.1.4-next.2 + +### Patch Changes + +- f6033d1121: humanizeEntityRef function can now be forced to include default namespace +- c86741a052: Support showing counts in option labels of the `EntityTagPicker`. You can enable this by adding the `showCounts` property +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/catalog-client@1.1.0-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/plugin-permission-common@0.6.4-next.2 + - @backstage/plugin-permission-react@0.4.5-next.2 + ## 1.1.4-next.1 ### Patch Changes diff --git a/plugins/catalog-react/package.json b/plugins/catalog-react/package.json index c7c17f9b2f..962c859c62 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.1.4-next.1", + "version": "1.1.4-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,15 +33,15 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/catalog-client": "^1.0.5-next.0", - "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.1-next.1", - "@backstage/core-plugin-api": "^1.0.6-next.1", - "@backstage/errors": "^1.1.0", - "@backstage/integration": "^1.3.1-next.0", + "@backstage/catalog-client": "^1.1.0-next.2", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/integration": "^1.3.1-next.2", "@backstage/plugin-catalog-common": "^1.0.6-next.0", - "@backstage/plugin-permission-common": "^0.6.4-next.0", - "@backstage/plugin-permission-react": "^0.4.5-next.1", + "@backstage/plugin-permission-common": "^0.6.4-next.2", + "@backstage/plugin-permission-react": "^0.4.5-next.2", "@backstage/theme": "^0.2.16", "@backstage/types": "^1.0.0", "@backstage/version-bridge": "^1.0.1", @@ -62,11 +62,11 @@ "react-router": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.1", - "@backstage/core-app-api": "^1.1.0-next.1", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", "@backstage/plugin-catalog-common": "^1.0.6-next.0", - "@backstage/plugin-scaffolder-common": "^1.2.0-next.0", - "@backstage/test-utils": "^1.2.0-next.1", + "@backstage/plugin-scaffolder-common": "^1.2.0-next.1", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", diff --git a/plugins/catalog/CHANGELOG.md b/plugins/catalog/CHANGELOG.md index 814f75e80c..51507389cf 100644 --- a/plugins/catalog/CHANGELOG.md +++ b/plugins/catalog/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-catalog +## 1.5.1-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-client@1.1.0-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration-react@1.1.4-next.2 + ## 1.5.1-next.2 ### Patch Changes diff --git a/plugins/catalog/package.json b/plugins/catalog/package.json index ed0198b799..2610c9db93 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.5.1-next.2", + "version": "1.5.1-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -32,14 +32,14 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-client": "^1.0.5-next.1", - "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/errors": "^1.1.0", - "@backstage/integration-react": "^1.1.4-next.1", + "@backstage/catalog-client": "^1.1.0-next.2", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/integration-react": "^1.1.4-next.2", "@backstage/plugin-catalog-common": "^1.0.6-next.0", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", "@backstage/plugin-search-common": "^1.0.1-next.0", "@backstage/plugin-search-react": "^1.1.0-next.2", "@backstage/theme": "^0.2.16", @@ -59,11 +59,11 @@ "react-router": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/plugin-permission-react": "^0.4.5-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/plugin-permission-react": "^0.4.5-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/cicd-statistics-module-gitlab/CHANGELOG.md b/plugins/cicd-statistics-module-gitlab/CHANGELOG.md index 4846df3e12..32ababf2d9 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.5-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/plugin-cicd-statistics@0.1.11-next.2 + ## 0.1.5-next.0 ### Patch Changes diff --git a/plugins/cicd-statistics-module-gitlab/package.json b/plugins/cicd-statistics-module-gitlab/package.json index 15d3f5d6b3..ee8eaed465 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.5-next.0", + "version": "0.1.5-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -28,16 +28,16 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0", - "@backstage/core-plugin-api": "^1.0.6-next.1", - "@backstage/plugin-cicd-statistics": "^0.1.11-next.1", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/plugin-cicd-statistics": "^0.1.11-next.2", "@gitbeaker/browser": "^35.6.0", "@gitbeaker/core": "^35.6.0", "luxon": "^3.0.0", "p-limit": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.1" + "@backstage/cli": "^0.19.0-next.3" }, "files": [ "dist" diff --git a/plugins/cicd-statistics/CHANGELOG.md b/plugins/cicd-statistics/CHANGELOG.md index 1ad30f818b..ac1cd23660 100644 --- a/plugins/cicd-statistics/CHANGELOG.md +++ b/plugins/cicd-statistics/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-cicd-statistics +## 0.1.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-plugin-api@1.0.6-next.3 + ## 0.1.11-next.1 ### Patch Changes diff --git a/plugins/cicd-statistics/package.json b/plugins/cicd-statistics/package.json index 2964a0b6f1..6394baaf94 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.11-next.1", + "version": "0.1.11-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -32,14 +32,14 @@ "start": "backstage-cli package start" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.1", + "@backstage/cli": "^0.19.0-next.3", "@types/luxon": "^3.0.0", "@types/react": "^16.13.1 || ^17.0.0" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0", - "@backstage/core-plugin-api": "^1.0.6-next.1", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", "@date-io/luxon": "^1.3.13", "@material-ui/core": "^4.9.13", "@material-ui/icons": "^4.11.2", diff --git a/plugins/circleci/CHANGELOG.md b/plugins/circleci/CHANGELOG.md index 82c0ffdba6..44ccf89c42 100644 --- a/plugins/circleci/CHANGELOG.md +++ b/plugins/circleci/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-circleci +## 0.3.9-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + ## 0.3.9-next.2 ### Patch Changes diff --git a/plugins/circleci/package.json b/plugins/circleci/package.json index 29a4144db4..229ff9fb11 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.9-next.2", + "version": "0.3.9-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,10 +33,10 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -53,10 +53,10 @@ "react-router-dom": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/cloudbuild/CHANGELOG.md b/plugins/cloudbuild/CHANGELOG.md index 2f9cd9b608..35a8a675e0 100644 --- a/plugins/cloudbuild/CHANGELOG.md +++ b/plugins/cloudbuild/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-cloudbuild +## 0.3.9-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + ## 0.3.9-next.2 ### Patch Changes diff --git a/plugins/cloudbuild/package.json b/plugins/cloudbuild/package.json index 1994c6c3fd..6215547041 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.9-next.2", + "version": "0.3.9-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,10 +33,10 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -51,10 +51,10 @@ "react-router-dom": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/code-climate/CHANGELOG.md b/plugins/code-climate/CHANGELOG.md index 3bc35b9466..3d45e5c3a2 100644 --- a/plugins/code-climate/CHANGELOG.md +++ b/plugins/code-climate/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-code-climate +## 0.1.9-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + ## 0.1.9-next.2 ### Patch Changes diff --git a/plugins/code-climate/package.json b/plugins/code-climate/package.json index 83a1787c43..464142f680 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.9-next.2", + "version": "0.1.9-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -22,10 +22,10 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -39,9 +39,9 @@ "react-router": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/code-coverage-backend/CHANGELOG.md b/plugins/code-coverage-backend/CHANGELOG.md index 8f788c4614..2d440fd31b 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.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.1.0-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/backend-common@0.15.1-next.3 + ## 0.2.2-next.1 ### Patch Changes diff --git a/plugins/code-coverage-backend/package.json b/plugins/code-coverage-backend/package.json index b74209374f..bbc5714fb8 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.2-next.1", + "version": "0.2.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,12 +23,12 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.1-next.2", - "@backstage/catalog-client": "^1.0.5-next.1", - "@backstage/catalog-model": "^1.1.0", - "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.1.0", - "@backstage/integration": "^1.3.1-next.1", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/catalog-client": "^1.1.0-next.2", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/integration": "^1.3.1-next.2", "@types/express": "^4.17.6", "express": "^4.17.1", "express-promise-router": "^4.1.0", @@ -39,7 +39,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", + "@backstage/cli": "^0.19.0-next.3", "@types/express-xml-bodyparser": "^0.3.2", "@types/supertest": "^2.0.8", "msw": "^0.47.0", diff --git a/plugins/code-coverage/CHANGELOG.md b/plugins/code-coverage/CHANGELOG.md index 3b235f5926..9e120afd38 100644 --- a/plugins/code-coverage/CHANGELOG.md +++ b/plugins/code-coverage/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-code-coverage +## 0.2.2-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + ## 0.2.2-next.2 ### Patch Changes diff --git a/plugins/code-coverage/package.json b/plugins/code-coverage/package.json index 88fb957420..c3f992a428 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.2-next.2", + "version": "0.2.2-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,12 +23,12 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0", - "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/errors": "^1.1.0", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -45,10 +45,10 @@ "react-router-dom": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/codescene/CHANGELOG.md b/plugins/codescene/CHANGELOG.md index b42a2ec80c..aa43d5edd3 100644 --- a/plugins/codescene/CHANGELOG.md +++ b/plugins/codescene/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-codescene +## 0.1.4-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + ## 0.1.4-next.2 ### Patch Changes diff --git a/plugins/codescene/package.json b/plugins/codescene/package.json index 303046610a..bc709a215c 100644 --- a/plugins/codescene/package.json +++ b/plugins/codescene/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-codescene", - "version": "0.1.4-next.2", + "version": "0.1.4-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -22,10 +22,10 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/errors": "^1.1.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/errors": "^1.1.1-next.0", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.9.10", "@material-ui/icons": "^4.9.1", @@ -38,10 +38,10 @@ "react-router-dom": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/config-schema/CHANGELOG.md b/plugins/config-schema/CHANGELOG.md index d65e0a1cdc..3e7483e879 100644 --- a/plugins/config-schema/CHANGELOG.md +++ b/plugins/config-schema/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-config-schema +## 0.1.32-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + ## 0.1.32-next.2 ### Patch Changes diff --git a/plugins/config-schema/package.json b/plugins/config-schema/package.json index f8d3d3e5cf..7f650fb4bc 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.32-next.2", + "version": "0.1.32-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,10 +23,10 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/errors": "^1.1.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/errors": "^1.1.1-next.0", "@backstage/theme": "^0.2.16", "@backstage/types": "^1.0.0", "@material-ui/core": "^4.12.2", @@ -40,10 +40,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/cost-insights/CHANGELOG.md b/plugins/cost-insights/CHANGELOG.md index d0d1b2c76f..fec45acdd1 100644 --- a/plugins/cost-insights/CHANGELOG.md +++ b/plugins/cost-insights/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-cost-insights +## 0.11.31-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + ## 0.11.31-next.2 ### Patch Changes diff --git a/plugins/cost-insights/package.json b/plugins/cost-insights/package.json index 666e4bdbae..8034195d62 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.11.31-next.2", + "version": "0.11.31-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -32,10 +32,10 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0", - "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", "@backstage/plugin-cost-insights-common": "^0.1.1", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", @@ -59,10 +59,10 @@ "react-router-dom": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/dynatrace/CHANGELOG.md b/plugins/dynatrace/CHANGELOG.md index 4ca38cc5b7..33e547a2bf 100644 --- a/plugins/dynatrace/CHANGELOG.md +++ b/plugins/dynatrace/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-dynatrace +## 0.2.0-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + ## 0.2.0-next.2 ### Patch Changes diff --git a/plugins/dynatrace/package.json b/plugins/dynatrace/package.json index 008e6f116f..3df69ca25f 100644 --- a/plugins/dynatrace/package.json +++ b/plugins/dynatrace/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-dynatrace", - "version": "0.2.0-next.2", + "version": "0.2.0-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -22,9 +22,9 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.9.13", "@material-ui/icons": "^4.9.1", @@ -36,10 +36,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/example-todo-list-backend/CHANGELOG.md b/plugins/example-todo-list-backend/CHANGELOG.md index ba33b2f29d..f3bdba1397 100644 --- a/plugins/example-todo-list-backend/CHANGELOG.md +++ b/plugins/example-todo-list-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @internal/plugin-todo-list-backend +## 1.0.5-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/plugin-auth-node@0.2.5-next.3 + ## 1.0.5-next.0 ### Patch Changes diff --git a/plugins/example-todo-list-backend/package.json b/plugins/example-todo-list-backend/package.json index 876afd4ea8..5623c22f58 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.5-next.0", + "version": "1.0.5-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,10 +23,10 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.1-next.1", - "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.1.0", - "@backstage/plugin-auth-node": "^0.2.5-next.1", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/config": "^1.0.2-next.0", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/plugin-auth-node": "^0.2.5-next.3", "@types/express": "^4.17.6", "express": "^4.17.1", "express-promise-router": "^4.1.0", @@ -35,7 +35,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.1", + "@backstage/cli": "^0.19.0-next.3", "@types/supertest": "^2.0.8", "@types/uuid": "^8.0.0", "msw": "^0.47.0", diff --git a/plugins/explore-react/CHANGELOG.md b/plugins/explore-react/CHANGELOG.md index c61f7049a3..0a1d2c795d 100644 --- a/plugins/explore-react/CHANGELOG.md +++ b/plugins/explore-react/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-explore-react +## 0.0.21-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/core-plugin-api@1.0.6-next.3 + ## 0.0.21-next.2 ### Patch Changes diff --git a/plugins/explore-react/package.json b/plugins/explore-react/package.json index 404832050a..1e715965a8 100644 --- a/plugins/explore-react/package.json +++ b/plugins/explore-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-explore-react", "description": "A frontend library for Backstage plugins that want to interact with the explore plugin", - "version": "0.0.21-next.2", + "version": "0.0.21-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -32,12 +32,12 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/core-plugin-api": "^1.0.6-next.2" + "@backstage/core-plugin-api": "^1.0.6-next.3" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/explore/CHANGELOG.md b/plugins/explore/CHANGELOG.md index 84f1f77494..c558be8b63 100644 --- a/plugins/explore/CHANGELOG.md +++ b/plugins/explore/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-explore +## 0.3.40-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/plugin-explore-react@0.0.21-next.3 + ## 0.3.40-next.2 ### Patch Changes diff --git a/plugins/explore/package.json b/plugins/explore/package.json index c06fcfc709..c0a5453c02 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.3.40-next.2", + "version": "0.3.40-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -32,11 +32,11 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", - "@backstage/plugin-explore-react": "^0.0.21-next.2", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", + "@backstage/plugin-explore-react": "^0.0.21-next.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -51,10 +51,10 @@ "react-router-dom": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/firehydrant/CHANGELOG.md b/plugins/firehydrant/CHANGELOG.md index e1bea4bf11..1e55a1fdfa 100644 --- a/plugins/firehydrant/CHANGELOG.md +++ b/plugins/firehydrant/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-firehydrant +## 0.1.26-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + ## 0.1.26-next.2 ### Patch Changes diff --git a/plugins/firehydrant/package.json b/plugins/firehydrant/package.json index 695f0c60ee..bc10c957c6 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.1.26-next.2", + "version": "0.1.26-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,9 +23,9 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -37,10 +37,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/fossa/CHANGELOG.md b/plugins/fossa/CHANGELOG.md index 68e6ec5a6e..05ec48b992 100644 --- a/plugins/fossa/CHANGELOG.md +++ b/plugins/fossa/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-fossa +## 0.2.41-next.2 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + ## 0.2.41-next.1 ### Patch Changes diff --git a/plugins/fossa/package.json b/plugins/fossa/package.json index f84604135b..c96353f3d6 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.41-next.1", + "version": "0.2.41-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,11 +33,11 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/errors": "^1.1.0", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -51,10 +51,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/gcalendar/CHANGELOG.md b/plugins/gcalendar/CHANGELOG.md index 7f522a6f9f..f87f087880 100644 --- a/plugins/gcalendar/CHANGELOG.md +++ b/plugins/gcalendar/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-gcalendar +## 0.3.5-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + ## 0.3.5-next.2 ### Patch Changes diff --git a/plugins/gcalendar/package.json b/plugins/gcalendar/package.json index d5a5125fd3..fbcc9b0c33 100644 --- a/plugins/gcalendar/package.json +++ b/plugins/gcalendar/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-gcalendar", - "version": "0.3.5-next.2", + "version": "0.3.5-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -22,9 +22,9 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/errors": "^1.1.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/errors": "^1.1.1-next.0", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -43,10 +43,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/gcp-projects/CHANGELOG.md b/plugins/gcp-projects/CHANGELOG.md index 95d1360c7e..cbd55e8414 100644 --- a/plugins/gcp-projects/CHANGELOG.md +++ b/plugins/gcp-projects/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-gcp-projects +## 0.3.28-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + ## 0.3.28-next.2 ### Patch Changes diff --git a/plugins/gcp-projects/package.json b/plugins/gcp-projects/package.json index 88f8c2c99f..601d491184 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.28-next.2", + "version": "0.3.28-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,8 +33,8 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -46,10 +46,10 @@ "react-router-dom": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/git-release-manager/CHANGELOG.md b/plugins/git-release-manager/CHANGELOG.md index 9ca3416e82..1dc0bd72bd 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.22-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/integration@1.3.1-next.2 + ## 0.3.22-next.2 ### Patch Changes diff --git a/plugins/git-release-manager/package.json b/plugins/git-release-manager/package.json index 3b90a363e3..fb56a6d0e1 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.22-next.2", + "version": "0.3.22-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,9 +23,9 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/integration": "^1.3.1-next.1", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/integration": "^1.3.1-next.2", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -42,10 +42,10 @@ "react-router": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", diff --git a/plugins/github-actions/CHANGELOG.md b/plugins/github-actions/CHANGELOG.md index 91fdab23d7..b261cef2ba 100644 --- a/plugins/github-actions/CHANGELOG.md +++ b/plugins/github-actions/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-github-actions +## 0.5.9-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/integration@1.3.1-next.2 + ## 0.5.9-next.2 ### Patch Changes diff --git a/plugins/github-actions/package.json b/plugins/github-actions/package.json index 646c599663..7866ded70e 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.9-next.2", + "version": "0.5.9-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,11 +34,11 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/integration": "^1.3.1-next.1", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/integration": "^1.3.1-next.2", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -53,10 +53,10 @@ "react-router-dom": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/github-deployments/CHANGELOG.md b/plugins/github-deployments/CHANGELOG.md index e429e1f325..655d640357 100644 --- a/plugins/github-deployments/CHANGELOG.md +++ b/plugins/github-deployments/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-github-deployments +## 0.1.40-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/integration-react@1.1.4-next.2 + ## 0.1.40-next.2 ### Patch Changes diff --git a/plugins/github-deployments/package.json b/plugins/github-deployments/package.json index 04085204a8..8e32c3c0ff 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.40-next.2", + "version": "0.1.40-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,13 +23,13 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/errors": "^1.1.0", - "@backstage/integration": "^1.3.1-next.1", - "@backstage/integration-react": "^1.1.4-next.1", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/integration": "^1.3.1-next.2", + "@backstage/integration-react": "^1.1.4-next.2", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -42,10 +42,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/github-issues/CHANGELOG.md b/plugins/github-issues/CHANGELOG.md index e36a2f2af8..758146689a 100644 --- a/plugins/github-issues/CHANGELOG.md +++ b/plugins/github-issues/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-github-issues +## 0.1.1-next.2 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + ## 0.1.1-next.1 ### Patch Changes diff --git a/plugins/github-issues/package.json b/plugins/github-issues/package.json index 3cbcb54bca..b98197505c 100644 --- a/plugins/github-issues/package.json +++ b/plugins/github-issues/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-github-issues", - "version": "0.1.1-next.1", + "version": "0.1.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -22,12 +22,12 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/catalog-model": "^1.0.3", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/errors": "^1.1.0", - "@backstage/integration": "^1.3.1-next.1", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/integration": "^1.3.1-next.2", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", "@backstage/theme": "^0.2.15", "@material-ui/core": "^4.12.4", "@material-ui/icons": "^4.9.1", @@ -40,10 +40,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@spotify/prettier-config": "^14.0.0", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/github-pull-requests-board/CHANGELOG.md b/plugins/github-pull-requests-board/CHANGELOG.md index 8455285ce0..37d3fdc257 100644 --- a/plugins/github-pull-requests-board/CHANGELOG.md +++ b/plugins/github-pull-requests-board/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-github-pull-requests-board +## 0.1.3-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/integration@1.3.1-next.2 + ## 0.1.3-next.2 ### Patch Changes diff --git a/plugins/github-pull-requests-board/package.json b/plugins/github-pull-requests-board/package.json index 03a1bd081e..d667acb5a3 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.3-next.2", + "version": "0.1.3-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,11 +34,11 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/integration": "^1.3.1-next.1", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/integration": "^1.3.1-next.2", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -48,9 +48,9 @@ "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/gitops-profiles/CHANGELOG.md b/plugins/gitops-profiles/CHANGELOG.md index 88cd223f38..93975d7184 100644 --- a/plugins/gitops-profiles/CHANGELOG.md +++ b/plugins/gitops-profiles/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-gitops-profiles +## 0.3.27-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + ## 0.3.27-next.2 ### Patch Changes diff --git a/plugins/gitops-profiles/package.json b/plugins/gitops-profiles/package.json index 9b850e5dc3..6e54ed98e9 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.27-next.2", + "version": "0.3.27-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,8 +33,8 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -46,10 +46,10 @@ "react-router-dom": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/gocd/CHANGELOG.md b/plugins/gocd/CHANGELOG.md index 2a9f31f68b..3673cc4163 100644 --- a/plugins/gocd/CHANGELOG.md +++ b/plugins/gocd/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-gocd +## 0.1.15-next.2 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + ## 0.1.15-next.1 ### Patch Changes diff --git a/plugins/gocd/package.json b/plugins/gocd/package.json index cee6976b5b..0ab50a90e5 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.15-next.1", + "version": "0.1.15-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -29,11 +29,11 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/errors": "^1.1.0", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -47,10 +47,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/graphiql/CHANGELOG.md b/plugins/graphiql/CHANGELOG.md index 34c80287a7..a9f2f743ec 100644 --- a/plugins/graphiql/CHANGELOG.md +++ b/plugins/graphiql/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-graphiql +## 0.2.41-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + ## 0.2.41-next.2 ### Patch Changes diff --git a/plugins/graphiql/package.json b/plugins/graphiql/package.json index e19e1d4036..d6a16708b9 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.41-next.2", + "version": "0.2.41-next.3", "publishConfig": { "access": "public", "main": "dist/index.esm.js", @@ -32,8 +32,8 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -48,10 +48,10 @@ "react-router-dom": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/graphql-backend/CHANGELOG.md b/plugins/graphql-backend/CHANGELOG.md index 86b91c9329..c94a7619b5 100644 --- a/plugins/graphql-backend/CHANGELOG.md +++ b/plugins/graphql-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-graphql-backend +## 0.1.26-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/plugin-catalog-graphql@0.3.13-next.3 + ## 0.1.26-next.2 ### Patch Changes diff --git a/plugins/graphql-backend/package.json b/plugins/graphql-backend/package.json index 1f896d9128..96fe0c1fe8 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.26-next.2", + "version": "0.1.26-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,9 +33,9 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.1-next.2", - "@backstage/config": "^1.0.1", - "@backstage/plugin-catalog-graphql": "^0.3.13-next.2", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/config": "^1.0.2-next.0", + "@backstage/plugin-catalog-graphql": "^0.3.13-next.3", "@graphql-tools/schema": "^9.0.0", "@types/express": "^4.17.6", "apollo-server": "^3.0.0", @@ -50,7 +50,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", + "@backstage/cli": "^0.19.0-next.3", "@types/supertest": "^2.0.8", "msw": "^0.47.0", "supertest": "^6.1.3" diff --git a/plugins/home/CHANGELOG.md b/plugins/home/CHANGELOG.md index 4c5c71d262..55da92f23f 100644 --- a/plugins/home/CHANGELOG.md +++ b/plugins/home/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-home +## 0.4.25-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/plugin-stack-overflow@0.1.5-next.3 + ## 0.4.25-next.2 ### Patch Changes diff --git a/plugins/home/package.json b/plugins/home/package.json index c53de70940..df285bad43 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.4.25-next.2", + "version": "0.4.25-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,12 +33,12 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0", - "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", - "@backstage/plugin-stack-overflow": "^0.1.5-next.2", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", + "@backstage/plugin-stack-overflow": "^0.1.5-next.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -52,10 +52,10 @@ "react-router": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/ilert/CHANGELOG.md b/plugins/ilert/CHANGELOG.md index 75da9167fe..bfb3ada100 100644 --- a/plugins/ilert/CHANGELOG.md +++ b/plugins/ilert/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-ilert +## 0.1.35-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + ## 0.1.35-next.2 ### Patch Changes diff --git a/plugins/ilert/package.json b/plugins/ilert/package.json index bdf7bdd430..7aa79fb143 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.1.35-next.2", + "version": "0.1.35-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,11 +23,11 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/errors": "^1.1.0", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", "@backstage/theme": "^0.2.16", "@date-io/luxon": "1.x", "@material-ui/core": "^4.12.2", @@ -42,10 +42,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/jenkins-backend/CHANGELOG.md b/plugins/jenkins-backend/CHANGELOG.md index 90756caa1c..9aa3e20d79 100644 --- a/plugins/jenkins-backend/CHANGELOG.md +++ b/plugins/jenkins-backend/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-jenkins-backend +## 0.1.26-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.1.0-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/plugin-permission-common@0.6.4-next.2 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/plugin-auth-node@0.2.5-next.3 + ## 0.1.26-next.2 ### Patch Changes diff --git a/plugins/jenkins-backend/package.json b/plugins/jenkins-backend/package.json index d910c9e682..55f856003e 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.26-next.2", + "version": "0.1.26-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -24,14 +24,14 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.1-next.2", - "@backstage/catalog-client": "^1.0.5-next.1", - "@backstage/catalog-model": "^1.1.0", - "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.1.0", - "@backstage/plugin-auth-node": "^0.2.5-next.2", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/catalog-client": "^1.1.0-next.2", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/plugin-auth-node": "^0.2.5-next.3", "@backstage/plugin-jenkins-common": "^0.1.8-next.0", - "@backstage/plugin-permission-common": "^0.6.4-next.1", + "@backstage/plugin-permission-common": "^0.6.4-next.2", "@types/express": "^4.17.6", "express": "^4.17.1", "express-promise-router": "^4.1.0", @@ -41,7 +41,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", + "@backstage/cli": "^0.19.0-next.3", "@types/jenkins": "^0.23.1", "@types/supertest": "^2.0.8", "msw": "^0.47.0", diff --git a/plugins/jenkins/CHANGELOG.md b/plugins/jenkins/CHANGELOG.md index 5fc8526590..c6cc5ed432 100644 --- a/plugins/jenkins/CHANGELOG.md +++ b/plugins/jenkins/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-jenkins +## 0.7.8-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + ## 0.7.8-next.2 ### Patch Changes diff --git a/plugins/jenkins/package.json b/plugins/jenkins/package.json index 3243bd6411..f415770809 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.8-next.2", + "version": "0.7.8-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,11 +33,11 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/errors": "^1.1.0", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", "@backstage/plugin-jenkins-common": "^0.1.8-next.0", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", @@ -52,10 +52,10 @@ "react-router-dom": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/kafka-backend/CHANGELOG.md b/plugins/kafka-backend/CHANGELOG.md index 6dd2737b9a..6bd87b05b7 100644 --- a/plugins/kafka-backend/CHANGELOG.md +++ b/plugins/kafka-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-kafka-backend +## 0.2.29-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/backend-common@0.15.1-next.3 + ## 0.2.29-next.0 ### Patch Changes diff --git a/plugins/kafka-backend/package.json b/plugins/kafka-backend/package.json index 424c5db9fc..0d65283a53 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.29-next.0", + "version": "0.2.29-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,10 +34,10 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.1-next.1", - "@backstage/catalog-model": "^1.1.0", - "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.1.0", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/errors": "^1.1.1-next.0", "@types/express": "^4.17.6", "express": "^4.17.1", "express-promise-router": "^4.1.0", @@ -46,7 +46,7 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.1", + "@backstage/cli": "^0.19.0-next.3", "@types/jest-when": "^3.5.0", "@types/lodash": "^4.14.151", "jest-when": "^3.1.0", diff --git a/plugins/kafka/CHANGELOG.md b/plugins/kafka/CHANGELOG.md index 415c7603cd..3a9e86b62e 100644 --- a/plugins/kafka/CHANGELOG.md +++ b/plugins/kafka/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-kafka +## 0.3.9-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + ## 0.3.9-next.2 ### Patch Changes diff --git a/plugins/kafka/package.json b/plugins/kafka/package.json index 026d26de62..291f1dcea6 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.9-next.2", + "version": "0.3.9-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -24,11 +24,11 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0", - "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -40,10 +40,10 @@ "react-router": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", diff --git a/plugins/kubernetes-backend/CHANGELOG.md b/plugins/kubernetes-backend/CHANGELOG.md index f023e16e7d..626003f241 100644 --- a/plugins/kubernetes-backend/CHANGELOG.md +++ b/plugins/kubernetes-backend/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-kubernetes-backend +## 0.7.2-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.1.0-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/plugin-kubernetes-common@0.4.2-next.1 + - @backstage/plugin-auth-node@0.2.5-next.3 + ## 0.7.2-next.2 ### Patch Changes diff --git a/plugins/kubernetes-backend/package.json b/plugins/kubernetes-backend/package.json index 8af7439255..f40492e1b7 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.7.2-next.2", + "version": "0.7.2-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -35,13 +35,13 @@ }, "dependencies": { "@azure/identity": "^2.0.4", - "@backstage/backend-common": "^0.15.1-next.2", - "@backstage/catalog-client": "^1.0.5-next.1", - "@backstage/catalog-model": "^1.1.0", - "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.1.0", - "@backstage/plugin-auth-node": "^0.2.5-next.2", - "@backstage/plugin-kubernetes-common": "^0.4.2-next.0", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/catalog-client": "^1.1.0-next.2", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/plugin-auth-node": "^0.2.5-next.3", + "@backstage/plugin-kubernetes-common": "^0.4.2-next.1", "@google-cloud/container": "^4.0.0", "@kubernetes/client-node": "^0.17.0", "@types/express": "^4.17.6", @@ -62,7 +62,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", + "@backstage/cli": "^0.19.0-next.3", "@types/aws4": "^1.5.1", "aws-sdk-mock": "^5.2.1", "supertest": "^6.1.3" diff --git a/plugins/kubernetes-common/CHANGELOG.md b/plugins/kubernetes-common/CHANGELOG.md index 3046aab5d2..08ba0764dc 100644 --- a/plugins/kubernetes-common/CHANGELOG.md +++ b/plugins/kubernetes-common/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-kubernetes-common +## 0.4.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.1-next.0 + ## 0.4.2-next.0 ### Patch Changes diff --git a/plugins/kubernetes-common/package.json b/plugins/kubernetes-common/package.json index af5342db3f..3095ac68d4 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.4.2-next.0", + "version": "0.4.2-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -38,11 +38,11 @@ "url": "https://github.com/backstage/backstage/issues" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0", + "@backstage/catalog-model": "^1.1.1-next.0", "@kubernetes/client-node": "^0.17.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.1" + "@backstage/cli": "^0.19.0-next.3" }, "jest": { "roots": [ diff --git a/plugins/kubernetes/CHANGELOG.md b/plugins/kubernetes/CHANGELOG.md index 29f502d17a..264e550c5c 100644 --- a/plugins/kubernetes/CHANGELOG.md +++ b/plugins/kubernetes/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-kubernetes +## 0.7.2-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- 19a27929fb: Reset error state on success +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/plugin-kubernetes-common@0.4.2-next.1 + ## 0.7.2-next.2 ### Patch Changes diff --git a/plugins/kubernetes/package.json b/plugins/kubernetes/package.json index 574e1aa9fa..27b91b7c79 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.7.2-next.2", + "version": "0.7.2-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,12 +33,12 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0", - "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", - "@backstage/plugin-kubernetes-common": "^0.4.2-next.0", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", + "@backstage/plugin-kubernetes-common": "^0.4.2-next.1", "@backstage/theme": "^0.2.16", "@kubernetes/client-node": "^0.17.0", "@material-ui/core": "^4.12.2", @@ -56,10 +56,10 @@ "react-router-dom": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", diff --git a/plugins/lighthouse/CHANGELOG.md b/plugins/lighthouse/CHANGELOG.md index 4c2bf73400..7cb872e30f 100644 --- a/plugins/lighthouse/CHANGELOG.md +++ b/plugins/lighthouse/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-lighthouse +## 0.3.9-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + ## 0.3.9-next.2 ### Patch Changes diff --git a/plugins/lighthouse/package.json b/plugins/lighthouse/package.json index d209f4660f..cfe7be9b16 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.3.9-next.2", + "version": "0.3.9-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,11 +33,11 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0", - "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -49,10 +49,10 @@ "react-router-dom": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", diff --git a/plugins/newrelic-dashboard/CHANGELOG.md b/plugins/newrelic-dashboard/CHANGELOG.md index 0939b53154..8668e588fa 100644 --- a/plugins/newrelic-dashboard/CHANGELOG.md +++ b/plugins/newrelic-dashboard/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-newrelic-dashboard +## 0.2.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + ## 0.2.2-next.1 ### Patch Changes diff --git a/plugins/newrelic-dashboard/package.json b/plugins/newrelic-dashboard/package.json index 7673ba697b..d08ce75ef3 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.2-next.1", + "version": "0.2.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -22,19 +22,19 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.1-next.1", - "@backstage/core-plugin-api": "^1.0.6-next.1", - "@backstage/errors": "^1.1.0", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", "react-use": "^17.2.4" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.1", - "@backstage/dev-utils": "^1.0.6-next.1", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", "@testing-library/jest-dom": "^5.10.1", "@types/react": "^16.13.1 || ^17.0.0", "cross-fetch": "^3.1.5" diff --git a/plugins/newrelic/CHANGELOG.md b/plugins/newrelic/CHANGELOG.md index 0c56ba254d..3748b744de 100644 --- a/plugins/newrelic/CHANGELOG.md +++ b/plugins/newrelic/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-newrelic +## 0.3.27-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + ## 0.3.27-next.2 ### Patch Changes diff --git a/plugins/newrelic/package.json b/plugins/newrelic/package.json index 0d858cdc93..978b0abddd 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.27-next.2", + "version": "0.3.27-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,8 +33,8 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -45,10 +45,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/org/CHANGELOG.md b/plugins/org/CHANGELOG.md index 883a613b88..568bba4890 100644 --- a/plugins/org/CHANGELOG.md +++ b/plugins/org/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-org +## 0.5.9-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + ## 0.5.9-next.2 ### Patch Changes diff --git a/plugins/org/package.json b/plugins/org/package.json index a6701a3c1d..f62d938486 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.5.9-next.2", + "version": "0.5.9-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -28,10 +28,10 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -47,11 +47,11 @@ "react-router-dom": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/catalog-client": "^1.0.5-next.1", - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/catalog-client": "^1.1.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/pagerduty/CHANGELOG.md b/plugins/pagerduty/CHANGELOG.md index 42b61b3643..98485e3836 100644 --- a/plugins/pagerduty/CHANGELOG.md +++ b/plugins/pagerduty/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-pagerduty +## 0.5.2-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + ## 0.5.2-next.2 ### Patch Changes diff --git a/plugins/pagerduty/package.json b/plugins/pagerduty/package.json index df5971497d..dda460bbb6 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.2-next.2", + "version": "0.5.2-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,11 +33,11 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/errors": "^1.1.0", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -52,10 +52,10 @@ "react-router-dom": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/periskop-backend/CHANGELOG.md b/plugins/periskop-backend/CHANGELOG.md index 5e01c50257..adf1520cf9 100644 --- a/plugins/periskop-backend/CHANGELOG.md +++ b/plugins/periskop-backend/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-periskop-backend +## 0.1.7-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/backend-common@0.15.1-next.3 + ## 0.1.7-next.2 ### Patch Changes diff --git a/plugins/periskop-backend/package.json b/plugins/periskop-backend/package.json index 088fe43d9c..c49d71028e 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.7-next.2", + "version": "0.1.7-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,8 +23,8 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.1-next.2", - "@backstage/config": "^1.0.1", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/config": "^1.0.2-next.0", "@types/express": "*", "express": "^4.17.1", "express-promise-router": "^4.1.0", @@ -33,7 +33,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", + "@backstage/cli": "^0.19.0-next.3", "@types/supertest": "^2.0.8", "msw": "^0.47.0", "supertest": "^6.1.6" diff --git a/plugins/periskop/CHANGELOG.md b/plugins/periskop/CHANGELOG.md index 1e18571dc0..7b5cccc8d4 100644 --- a/plugins/periskop/CHANGELOG.md +++ b/plugins/periskop/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-periskop +## 0.1.7-next.2 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + ## 0.1.7-next.1 ### Patch Changes diff --git a/plugins/periskop/package.json b/plugins/periskop/package.json index 03a15b2b4a..b4494bc934 100644 --- a/plugins/periskop/package.json +++ b/plugins/periskop/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-periskop", - "version": "0.1.7-next.1", + "version": "0.1.7-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,11 +23,11 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/errors": "^1.1.0", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -40,10 +40,10 @@ "react-dom": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/permission-backend/CHANGELOG.md b/plugins/permission-backend/CHANGELOG.md index c8d4957c8a..615104ee9b 100644 --- a/plugins/permission-backend/CHANGELOG.md +++ b/plugins/permission-backend/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-permission-backend +## 0.5.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/plugin-permission-common@0.6.4-next.2 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/plugin-auth-node@0.2.5-next.3 + - @backstage/plugin-permission-node@0.6.5-next.3 + ## 0.5.11-next.1 ### Patch Changes diff --git a/plugins/permission-backend/package.json b/plugins/permission-backend/package.json index 1b47c84061..42dd4fcd1c 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.11-next.1", + "version": "0.5.11-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -22,12 +22,12 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.1-next.2", - "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.1.0", - "@backstage/plugin-auth-node": "^0.2.5-next.2", - "@backstage/plugin-permission-common": "^0.6.4-next.1", - "@backstage/plugin-permission-node": "^0.6.5-next.2", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/config": "^1.0.2-next.0", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/plugin-auth-node": "^0.2.5-next.3", + "@backstage/plugin-permission-common": "^0.6.4-next.2", + "@backstage/plugin-permission-node": "^0.6.5-next.3", "@types/express": "*", "dataloader": "^2.0.0", "express": "^4.17.1", @@ -39,7 +39,7 @@ "zod": "^3.11.6" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", + "@backstage/cli": "^0.19.0-next.3", "@types/lodash": "^4.14.151", "@types/supertest": "^2.0.8", "msw": "^0.47.0", diff --git a/plugins/permission-common/CHANGELOG.md b/plugins/permission-common/CHANGELOG.md index 592f6b4fdb..0a64a7faf8 100644 --- a/plugins/permission-common/CHANGELOG.md +++ b/plugins/permission-common/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-permission-common +## 0.6.4-next.2 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + ## 0.6.4-next.1 ### Patch Changes diff --git a/plugins/permission-common/package.json b/plugins/permission-common/package.json index 6c3c9d2d29..5a6d98aba5 100644 --- a/plugins/permission-common/package.json +++ b/plugins/permission-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-permission-common", "description": "Isomorphic types and client for Backstage permissions and authorization", - "version": "0.6.4-next.1", + "version": "0.6.4-next.2", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { @@ -41,14 +41,14 @@ "url": "https://github.com/backstage/backstage/issues" }, "dependencies": { - "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.1.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/errors": "^1.1.1-next.0", "cross-fetch": "^3.1.5", "uuid": "^8.0.0", "zod": "^3.11.6" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", + "@backstage/cli": "^0.19.0-next.3", "msw": "^0.47.0" } } diff --git a/plugins/permission-node/CHANGELOG.md b/plugins/permission-node/CHANGELOG.md index 887061acbf..6ac474d76d 100644 --- a/plugins/permission-node/CHANGELOG.md +++ b/plugins/permission-node/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-permission-node +## 0.6.5-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/plugin-permission-common@0.6.4-next.2 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/plugin-auth-node@0.2.5-next.3 + ## 0.6.5-next.2 ### Patch Changes diff --git a/plugins/permission-node/package.json b/plugins/permission-node/package.json index ef8c932b68..6cb3f771d5 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.6.5-next.2", + "version": "0.6.5-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,19 +33,19 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/backend-common": "^0.15.1-next.2", - "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.1.0", - "@backstage/plugin-auth-node": "^0.2.5-next.2", - "@backstage/plugin-permission-common": "^0.6.4-next.1", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/config": "^1.0.2-next.0", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/plugin-auth-node": "^0.2.5-next.3", + "@backstage/plugin-permission-common": "^0.6.4-next.2", "@types/express": "^4.17.6", "express": "^4.17.1", "express-promise-router": "^4.1.0", "zod": "^3.11.6" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.28-next.2", - "@backstage/cli": "^0.19.0-next.2", + "@backstage/backend-test-utils": "^0.1.28-next.3", + "@backstage/cli": "^0.19.0-next.3", "@types/supertest": "^2.0.8", "msw": "^0.47.0", "supertest": "^6.1.3" diff --git a/plugins/permission-react/CHANGELOG.md b/plugins/permission-react/CHANGELOG.md index e4414a7daa..8cc4c02424 100644 --- a/plugins/permission-react/CHANGELOG.md +++ b/plugins/permission-react/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-permission-react +## 0.4.5-next.2 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/plugin-permission-common@0.6.4-next.2 + ## 0.4.5-next.1 ### Patch Changes diff --git a/plugins/permission-react/package.json b/plugins/permission-react/package.json index 621379544c..82c5140f86 100644 --- a/plugins/permission-react/package.json +++ b/plugins/permission-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-permission-react", - "version": "0.4.5-next.1", + "version": "0.4.5-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -31,9 +31,9 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/config": "^1.0.1", - "@backstage/core-plugin-api": "^1.0.6-next.1", - "@backstage/plugin-permission-common": "^0.6.4-next.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/plugin-permission-common": "^0.6.4-next.2", "cross-fetch": "^3.1.5", "react-use": "^17.2.4", "swr": "^1.1.2" @@ -44,8 +44,8 @@ "react-router": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.1", - "@backstage/test-utils": "^1.2.0-next.1", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3" }, diff --git a/plugins/proxy-backend/CHANGELOG.md b/plugins/proxy-backend/CHANGELOG.md index d76c3511f9..08e89d6910 100644 --- a/plugins/proxy-backend/CHANGELOG.md +++ b/plugins/proxy-backend/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-proxy-backend +## 0.2.30-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/backend-common@0.15.1-next.3 + ## 0.2.30-next.1 ### Patch Changes diff --git a/plugins/proxy-backend/package.json b/plugins/proxy-backend/package.json index 1e7f7dc96e..1870c1ec7d 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.30-next.1", + "version": "0.2.30-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -32,8 +32,8 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.1-next.2", - "@backstage/config": "^1.0.1", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/config": "^1.0.2-next.0", "@types/express": "^4.17.6", "express": "^4.17.1", "express-promise-router": "^4.1.0", @@ -46,7 +46,7 @@ "yup": "^0.32.9" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", + "@backstage/cli": "^0.19.0-next.3", "@types/http-proxy-middleware": "^0.19.3", "@types/supertest": "^2.0.8", "@types/uuid": "^8.0.0", diff --git a/plugins/rollbar-backend/CHANGELOG.md b/plugins/rollbar-backend/CHANGELOG.md index aaca8497da..8f821f6e8f 100644 --- a/plugins/rollbar-backend/CHANGELOG.md +++ b/plugins/rollbar-backend/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-rollbar-backend +## 0.1.33-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/backend-common@0.15.1-next.3 + ## 0.1.33-next.2 ### Patch Changes diff --git a/plugins/rollbar-backend/package.json b/plugins/rollbar-backend/package.json index c0777e9950..eb3b74e69a 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.33-next.2", + "version": "0.1.33-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,8 +33,8 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.1-next.2", - "@backstage/config": "^1.0.1", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/config": "^1.0.2-next.0", "@types/express": "^4.17.6", "camelcase-keys": "^7.0.1", "compression": "^1.7.4", @@ -49,8 +49,8 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.28-next.2", - "@backstage/cli": "^0.19.0-next.2", + "@backstage/backend-test-utils": "^0.1.28-next.3", + "@backstage/cli": "^0.19.0-next.3", "@types/supertest": "^2.0.8", "msw": "^0.47.0", "supertest": "^6.1.3" diff --git a/plugins/rollbar/CHANGELOG.md b/plugins/rollbar/CHANGELOG.md index 55926c9611..6d1464aa02 100644 --- a/plugins/rollbar/CHANGELOG.md +++ b/plugins/rollbar/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-rollbar +## 0.4.9-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + ## 0.4.9-next.2 ### Patch Changes diff --git a/plugins/rollbar/package.json b/plugins/rollbar/package.json index 769e002539..9cf5aa4964 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.9-next.2", + "version": "0.4.9-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,10 +33,10 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -51,10 +51,10 @@ "react-router-dom": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", diff --git a/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md b/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md index 495712b802..77c0282940 100644 --- a/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-scaffolder-backend-module-cookiecutter +## 0.2.11-next.2 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/plugin-scaffolder-backend@1.6.0-next.3 + ## 0.2.11-next.1 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-cookiecutter/package.json b/plugins/scaffolder-backend-module-cookiecutter/package.json index a9c95cacb8..5c19a3d4cf 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.11-next.1", + "version": "0.2.11-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,11 +23,11 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.1-next.2", - "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.1.0", - "@backstage/integration": "^1.3.1-next.1", - "@backstage/plugin-scaffolder-backend": "^1.6.0-next.2", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/config": "^1.0.2-next.0", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/integration": "^1.3.1-next.2", + "@backstage/plugin-scaffolder-backend": "^1.6.0-next.3", "@backstage/types": "^1.0.0", "command-exists": "^1.2.9", "fs-extra": "10.1.0", @@ -35,7 +35,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", + "@backstage/cli": "^0.19.0-next.3", "@types/command-exists": "^1.2.0", "@types/fs-extra": "^9.0.1", "@types/mock-fs": "^4.13.0", diff --git a/plugins/scaffolder-backend-module-rails/CHANGELOG.md b/plugins/scaffolder-backend-module-rails/CHANGELOG.md index 15930b6b1d..ceb954110b 100644 --- a/plugins/scaffolder-backend-module-rails/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-rails/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-scaffolder-backend-module-rails +## 0.4.4-next.1 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/plugin-scaffolder-backend@1.6.0-next.3 + ## 0.4.4-next.0 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-rails/package.json b/plugins/scaffolder-backend-module-rails/package.json index 3c47c435df..e60e643880 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.4-next.0", + "version": "0.4.4-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,17 +23,17 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.1-next.1", - "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.1.0", - "@backstage/integration": "^1.3.1-next.0", - "@backstage/plugin-scaffolder-backend": "^1.6.0-next.1", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/config": "^1.0.2-next.0", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/integration": "^1.3.1-next.2", + "@backstage/plugin-scaffolder-backend": "^1.6.0-next.3", "@backstage/types": "^1.0.0", "command-exists": "^1.2.9", "fs-extra": "^10.0.1" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.1", + "@backstage/cli": "^0.19.0-next.3", "@types/command-exists": "^1.2.0", "@types/fs-extra": "^9.0.1", "@types/mock-fs": "^4.13.0", diff --git a/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md b/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md index 117dd2e7d0..1769ad172e 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.9-next.1 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/plugin-scaffolder-backend@1.6.0-next.3 + ## 0.2.9-next.0 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-yeoman/package.json b/plugins/scaffolder-backend-module-yeoman/package.json index 0a8648134f..eac08016f8 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.9-next.0", + "version": "0.2.9-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -22,15 +22,15 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/config": "^1.0.1", - "@backstage/plugin-scaffolder-backend": "^1.6.0-next.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/plugin-scaffolder-backend": "^1.6.0-next.3", "@backstage/types": "^1.0.0", "winston": "^3.2.1", "yeoman-environment": "^3.9.1" }, "devDependencies": { - "@backstage/backend-common": "^0.15.1-next.0", - "@backstage/cli": "^0.19.0-next.1" + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/cli": "^0.19.0-next.3" }, "files": [ "dist" diff --git a/plugins/scaffolder-backend/CHANGELOG.md b/plugins/scaffolder-backend/CHANGELOG.md index b612234d50..bf0b46c509 100644 --- a/plugins/scaffolder-backend/CHANGELOG.md +++ b/plugins/scaffolder-backend/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-scaffolder-backend +## 1.6.0-next.3 + +### Patch Changes + +- 50467bc15b: The number of task workers used to execute templates now default to 3, rather than 1. +- Updated dependencies + - @backstage/plugin-catalog-node@1.1.0-next.2 + - @backstage/backend-plugin-api@0.1.2-next.2 + - @backstage/catalog-client@1.1.0-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/plugin-catalog-backend@1.4.0-next.3 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/plugin-scaffolder-common@1.2.0-next.1 + - @backstage/plugin-auth-node@0.2.5-next.3 + ## 1.6.0-next.2 ### Minor Changes diff --git a/plugins/scaffolder-backend/package.json b/plugins/scaffolder-backend/package.json index 7f8d7e1f67..5b72ab2f07 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.6.0-next.2", + "version": "1.6.0-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,17 +34,17 @@ "build:assets": "node scripts/build-nunjucks.js" }, "dependencies": { - "@backstage/backend-common": "^0.15.1-next.2", - "@backstage/backend-plugin-api": "^0.1.2-next.1", - "@backstage/catalog-client": "^1.0.5-next.1", - "@backstage/catalog-model": "^1.1.0", - "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.1.0", - "@backstage/integration": "^1.3.1-next.1", - "@backstage/plugin-auth-node": "^0.2.5-next.2", - "@backstage/plugin-catalog-backend": "^1.4.0-next.2", - "@backstage/plugin-catalog-node": "^1.0.2-next.1", - "@backstage/plugin-scaffolder-common": "^1.2.0-next.0", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/backend-plugin-api": "^0.1.2-next.2", + "@backstage/catalog-client": "^1.1.0-next.2", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/integration": "^1.3.1-next.2", + "@backstage/plugin-auth-node": "^0.2.5-next.3", + "@backstage/plugin-catalog-backend": "^1.4.0-next.3", + "@backstage/plugin-catalog-node": "^1.1.0-next.2", + "@backstage/plugin-scaffolder-common": "^1.2.0-next.1", "@backstage/types": "^1.0.0", "@gitbeaker/core": "^35.6.0", "@gitbeaker/node": "^35.1.0", @@ -79,8 +79,8 @@ "zod": "^3.11.6" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.28-next.2", - "@backstage/cli": "^0.19.0-next.2", + "@backstage/backend-test-utils": "^0.1.28-next.3", + "@backstage/cli": "^0.19.0-next.3", "@types/command-exists": "^1.2.0", "@types/fs-extra": "^9.0.1", "@types/git-url-parse": "^9.0.0", diff --git a/plugins/scaffolder-common/CHANGELOG.md b/plugins/scaffolder-common/CHANGELOG.md index 95a5c9061b..f7cdcfe3b0 100644 --- a/plugins/scaffolder-common/CHANGELOG.md +++ b/plugins/scaffolder-common/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-scaffolder-common +## 1.2.0-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.1-next.0 + ## 1.2.0-next.0 ### Minor Changes diff --git a/plugins/scaffolder-common/package.json b/plugins/scaffolder-common/package.json index 834e3e266a..40ef29a3ae 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.2.0-next.0", + "version": "1.2.0-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -38,10 +38,10 @@ "url": "https://github.com/backstage/backstage/issues" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0", + "@backstage/catalog-model": "^1.1.1-next.0", "@backstage/types": "^1.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.1" + "@backstage/cli": "^0.19.0-next.3" } } diff --git a/plugins/scaffolder/CHANGELOG.md b/plugins/scaffolder/CHANGELOG.md index eccaecc152..d30be1c8fc 100644 --- a/plugins/scaffolder/CHANGELOG.md +++ b/plugins/scaffolder/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-scaffolder +## 1.6.0-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- 6522e459aa: Support displaying and ordering by counts in `EntityTagPicker` field. Add the `showCounts` option to enable this. Also support configuring `helperText`. +- f0510a20b5: Addition of a dismissible Error Banner in Scaffolder page +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-client@1.1.0-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/integration-react@1.1.4-next.2 + - @backstage/plugin-permission-react@0.4.5-next.2 + - @backstage/plugin-scaffolder-common@1.2.0-next.1 + ## 1.6.0-next.2 ### Patch Changes diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json index 5416c0bb2c..d0387ef4fe 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.6.0-next.2", + "version": "1.6.0-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,18 +33,18 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-client": "^1.0.5-next.1", - "@backstage/catalog-model": "^1.1.0", - "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/errors": "^1.1.0", - "@backstage/integration": "^1.3.1-next.1", - "@backstage/integration-react": "^1.1.4-next.1", + "@backstage/catalog-client": "^1.1.0-next.2", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/integration": "^1.3.1-next.2", + "@backstage/integration-react": "^1.1.4-next.2", "@backstage/plugin-catalog-common": "^1.0.6-next.0", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", - "@backstage/plugin-permission-react": "^0.4.5-next.1", - "@backstage/plugin-scaffolder-common": "^1.2.0-next.0", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", + "@backstage/plugin-permission-react": "^0.4.5-next.2", + "@backstage/plugin-scaffolder-common": "^1.2.0-next.1", "@backstage/theme": "^0.2.16", "@backstage/types": "^1.0.0", "@codemirror/language": "^6.0.0", @@ -79,11 +79,11 @@ "react-router-dom": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/plugin-catalog": "^1.5.1-next.2", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/plugin-catalog": "^1.5.1-next.3", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", diff --git a/plugins/search-backend-module-elasticsearch/CHANGELOG.md b/plugins/search-backend-module-elasticsearch/CHANGELOG.md index 83f4cdab3e..01b3be70b1 100644 --- a/plugins/search-backend-module-elasticsearch/CHANGELOG.md +++ b/plugins/search-backend-module-elasticsearch/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-search-backend-module-elasticsearch +## 1.0.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/plugin-search-backend-node@1.0.2-next.2 + ## 1.0.2-next.1 ### Patch Changes diff --git a/plugins/search-backend-module-elasticsearch/package.json b/plugins/search-backend-module-elasticsearch/package.json index 7b66d0c179..6ba1fe73d5 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.0.2-next.1", + "version": "1.0.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,8 +23,8 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/config": "^1.0.1", - "@backstage/plugin-search-backend-node": "^1.0.2-next.1", + "@backstage/config": "^1.0.2-next.0", + "@backstage/plugin-search-backend-node": "^1.0.2-next.2", "@backstage/plugin-search-common": "^1.0.1-next.0", "@elastic/elasticsearch": "^7.13.0", "@opensearch-project/opensearch": "^2.0.0", @@ -36,8 +36,8 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/backend-common": "^0.15.1-next.2", - "@backstage/cli": "^0.19.0-next.2", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/cli": "^0.19.0-next.3", "@elastic/elasticsearch-mock": "^1.0.0", "@short.io/opensearch-mock": "^0.3.1" }, diff --git a/plugins/search-backend-module-pg/CHANGELOG.md b/plugins/search-backend-module-pg/CHANGELOG.md index 93d0abe0be..2610be5997 100644 --- a/plugins/search-backend-module-pg/CHANGELOG.md +++ b/plugins/search-backend-module-pg/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-search-backend-module-pg +## 0.4.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/plugin-search-backend-node@1.0.2-next.2 + ## 0.4.0-next.1 ### Patch Changes diff --git a/plugins/search-backend-module-pg/package.json b/plugins/search-backend-module-pg/package.json index f98e440972..cc04e46be1 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.4.0-next.1", + "version": "0.4.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,17 +23,17 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.1-next.1", - "@backstage/config": "^1.0.1", - "@backstage/plugin-search-backend-node": "^1.0.2-next.1", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/config": "^1.0.2-next.0", + "@backstage/plugin-search-backend-node": "^1.0.2-next.2", "@backstage/plugin-search-common": "^1.0.1-next.0", "knex": "^2.0.0", "lodash": "^4.17.21", "uuid": "^8.3.2" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.28-next.1", - "@backstage/cli": "^0.19.0-next.1" + "@backstage/backend-test-utils": "^0.1.28-next.3", + "@backstage/cli": "^0.19.0-next.3" }, "files": [ "dist", diff --git a/plugins/search-backend-node/CHANGELOG.md b/plugins/search-backend-node/CHANGELOG.md index d5895611ab..dc16b57c18 100644 --- a/plugins/search-backend-node/CHANGELOG.md +++ b/plugins/search-backend-node/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-search-backend-node +## 1.0.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/plugin-permission-common@0.6.4-next.2 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/backend-tasks@0.3.5-next.1 + ## 1.0.2-next.1 ### Patch Changes diff --git a/plugins/search-backend-node/package.json b/plugins/search-backend-node/package.json index 6899afb192..096deeab9e 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.0.2-next.1", + "version": "1.0.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,11 +23,11 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.1-next.1", - "@backstage/backend-tasks": "^0.3.5-next.0", - "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.1.0", - "@backstage/plugin-permission-common": "^0.6.4-next.0", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/backend-tasks": "^0.3.5-next.1", + "@backstage/config": "^1.0.2-next.0", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/plugin-permission-common": "^0.6.4-next.2", "@backstage/plugin-search-common": "^1.0.1-next.0", "@types/lunr": "^2.3.3", "lodash": "^4.17.21", @@ -38,8 +38,8 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/backend-common": "^0.15.1-next.1", - "@backstage/cli": "^0.19.0-next.1", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/cli": "^0.19.0-next.3", "@types/ndjson": "^2.0.1" }, "files": [ diff --git a/plugins/search-backend/CHANGELOG.md b/plugins/search-backend/CHANGELOG.md index 6179dbff4f..0707bdd5d6 100644 --- a/plugins/search-backend/CHANGELOG.md +++ b/plugins/search-backend/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-search-backend +## 1.0.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/plugin-permission-common@0.6.4-next.2 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/plugin-auth-node@0.2.5-next.3 + - @backstage/plugin-permission-node@0.6.5-next.3 + - @backstage/plugin-search-backend-node@1.0.2-next.2 + ## 1.0.2-next.0 ### Patch Changes diff --git a/plugins/search-backend/package.json b/plugins/search-backend/package.json index c6a104b14e..56070040fd 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.0.2-next.0", + "version": "1.0.2-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,13 +23,13 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.1-next.1", - "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.1.0", - "@backstage/plugin-auth-node": "^0.2.5-next.1", - "@backstage/plugin-permission-common": "^0.6.4-next.0", - "@backstage/plugin-permission-node": "^0.6.5-next.1", - "@backstage/plugin-search-backend-node": "^1.0.2-next.1", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/config": "^1.0.2-next.0", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/plugin-auth-node": "^0.2.5-next.3", + "@backstage/plugin-permission-common": "^0.6.4-next.2", + "@backstage/plugin-permission-node": "^0.6.5-next.3", + "@backstage/plugin-search-backend-node": "^1.0.2-next.2", "@backstage/plugin-search-common": "^1.0.1-next.0", "@backstage/types": "^1.0.0", "@types/express": "^4.17.6", @@ -43,7 +43,7 @@ "zod": "^3.11.6" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.1", + "@backstage/cli": "^0.19.0-next.3", "@types/supertest": "^2.0.8", "supertest": "^6.1.3" }, diff --git a/plugins/search/CHANGELOG.md b/plugins/search/CHANGELOG.md index 6358e0495f..b02bccd5ed 100644 --- a/plugins/search/CHANGELOG.md +++ b/plugins/search/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-search +## 1.0.2-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + ## 1.0.2-next.2 ### Patch Changes diff --git a/plugins/search/package.json b/plugins/search/package.json index 89401a8189..ad9d95e81f 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.0.2-next.2", + "version": "1.0.2-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -32,12 +32,12 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0", - "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/errors": "^1.1.0", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", "@backstage/plugin-search-common": "^1.0.1-next.0", "@backstage/plugin-search-react": "^1.1.0-next.2", "@backstage/theme": "^0.2.16", @@ -56,10 +56,10 @@ "react-router-dom": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", diff --git a/plugins/sentry/CHANGELOG.md b/plugins/sentry/CHANGELOG.md index ea399442f6..049627446c 100644 --- a/plugins/sentry/CHANGELOG.md +++ b/plugins/sentry/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-sentry +## 0.4.2-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + ## 0.4.2-next.2 ### Patch Changes diff --git a/plugins/sentry/package.json b/plugins/sentry/package.json index d23bd17cdb..b48f5b7489 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.4.2-next.2", + "version": "0.4.2-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,10 +33,10 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", "@backstage/theme": "^0.2.16", "@material-table/core": "^3.1.0", "@material-ui/core": "^4.12.2", @@ -51,10 +51,10 @@ "react-router": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/shortcuts/CHANGELOG.md b/plugins/shortcuts/CHANGELOG.md index eed53a0314..8bf4e62b3a 100644 --- a/plugins/shortcuts/CHANGELOG.md +++ b/plugins/shortcuts/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-shortcuts +## 0.3.1-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + ## 0.3.1-next.2 ### Patch Changes diff --git a/plugins/shortcuts/package.json b/plugins/shortcuts/package.json index 80e0c75488..cf2038ffe3 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.1-next.2", + "version": "0.3.1-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,8 +23,8 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", "@backstage/theme": "^0.2.16", "@backstage/types": "^1.0.0", "@material-ui/core": "^4.12.2", @@ -41,10 +41,10 @@ "react-router": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/sonarqube-backend/CHANGELOG.md b/plugins/sonarqube-backend/CHANGELOG.md index ddb7eb49b4..dae521af5f 100644 --- a/plugins/sonarqube-backend/CHANGELOG.md +++ b/plugins/sonarqube-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-sonarqube-backend +## 0.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/backend-common@0.15.1-next.3 + ## 0.1.1-next.1 ### Patch Changes diff --git a/plugins/sonarqube-backend/package.json b/plugins/sonarqube-backend/package.json index 928c21f939..2ecc0e5d10 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.1-next.1", + "version": "0.1.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -22,9 +22,9 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/backend-common": "^0.15.1-next.2", - "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.1.0", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/config": "^1.0.2-next.0", + "@backstage/errors": "^1.1.1-next.0", "@types/express": "*", "express": "^4.18.1", "express-promise-router": "^4.1.0", @@ -33,8 +33,8 @@ "yn": "^5.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/test-utils": "^1.2.0-next.3", "@types/supertest": "^2.0.12", "msw": "^0.47.0", "supertest": "^6.2.4" diff --git a/plugins/sonarqube/CHANGELOG.md b/plugins/sonarqube/CHANGELOG.md index a0c70158ce..9a33a45ebb 100644 --- a/plugins/sonarqube/CHANGELOG.md +++ b/plugins/sonarqube/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-sonarqube +## 0.4.1-next.2 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + ## 0.4.1-next.1 ### Patch Changes diff --git a/plugins/sonarqube/package.json b/plugins/sonarqube/package.json index d4a36da284..422fcebcdf 100644 --- a/plugins/sonarqube/package.json +++ b/plugins/sonarqube/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-sonarqube", "description": "", - "version": "0.4.1-next.1", + "version": "0.4.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,10 +34,10 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -51,10 +51,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/splunk-on-call/CHANGELOG.md b/plugins/splunk-on-call/CHANGELOG.md index 7f9ee71ca2..a3c4536f17 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.3.33-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + ## 0.3.33-next.2 ### Patch Changes diff --git a/plugins/splunk-on-call/package.json b/plugins/splunk-on-call/package.json index f9e464819f..2ea4cbd62d 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.3.33-next.2", + "version": "0.3.33-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,10 +33,10 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -50,10 +50,10 @@ "react-router-dom": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/stack-overflow-backend/CHANGELOG.md b/plugins/stack-overflow-backend/CHANGELOG.md index 0d47f9362e..f844a3de68 100644 --- a/plugins/stack-overflow-backend/CHANGELOG.md +++ b/plugins/stack-overflow-backend/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-stack-overflow-backend +## 0.1.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/cli@0.19.0-next.3 + ## 0.1.5-next.1 ### Patch Changes diff --git a/plugins/stack-overflow-backend/package.json b/plugins/stack-overflow-backend/package.json index 2c4c18d9e8..9f12767ef1 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.1.5-next.1", + "version": "0.1.5-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -32,8 +32,8 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/cli": "^0.19.0-next.1", - "@backstage/config": "^1.0.1", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/config": "^1.0.2-next.0", "@backstage/plugin-search-common": "^1.0.1-next.0", "node-fetch": "^2.6.7", "qs": "^6.9.4", diff --git a/plugins/stack-overflow/CHANGELOG.md b/plugins/stack-overflow/CHANGELOG.md index 815d381673..25c55415b3 100644 --- a/plugins/stack-overflow/CHANGELOG.md +++ b/plugins/stack-overflow/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-stack-overflow +## 0.1.5-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/plugin-home@0.4.25-next.3 + ## 0.1.5-next.2 ### Patch Changes diff --git a/plugins/stack-overflow/package.json b/plugins/stack-overflow/package.json index 156f7b1a26..e3b514fca1 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.5-next.2", + "version": "0.1.5-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -22,10 +22,10 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/plugin-home": "^0.4.25-next.2", + "@backstage/config": "^1.0.2-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/plugin-home": "^0.4.25-next.3", "@backstage/plugin-search-common": "^1.0.1-next.0", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", @@ -41,10 +41,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", "@types/node": "^16.11.26", diff --git a/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md b/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md index 6951f1d4ef..27782333f2 100644 --- a/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md +++ b/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-tech-insights-backend-module-jsonfc +## 0.1.20-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/plugin-tech-insights-node@0.3.4-next.1 + ## 0.1.20-next.0 ### Patch Changes diff --git a/plugins/tech-insights-backend-module-jsonfc/package.json b/plugins/tech-insights-backend-module-jsonfc/package.json index e2a46b05bd..7716a426ab 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.20-next.0", + "version": "0.1.20-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,11 +33,11 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.1-next.1", - "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.1.0", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/config": "^1.0.2-next.0", + "@backstage/errors": "^1.1.1-next.0", "@backstage/plugin-tech-insights-common": "^0.2.6", - "@backstage/plugin-tech-insights-node": "^0.3.4-next.0", + "@backstage/plugin-tech-insights-node": "^0.3.4-next.1", "ajv": "^8.10.0", "json-rules-engine": "^6.1.2", "lodash": "^4.17.21", @@ -45,7 +45,7 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.1" + "@backstage/cli": "^0.19.0-next.3" }, "files": [ "dist" diff --git a/plugins/tech-insights-backend/CHANGELOG.md b/plugins/tech-insights-backend/CHANGELOG.md index 61a334770c..3daf38e0ef 100644 --- a/plugins/tech-insights-backend/CHANGELOG.md +++ b/plugins/tech-insights-backend/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-tech-insights-backend +## 0.5.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.1.0-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/backend-tasks@0.3.5-next.1 + - @backstage/plugin-tech-insights-node@0.3.4-next.1 + ## 0.5.2-next.1 ### Patch Changes diff --git a/plugins/tech-insights-backend/package.json b/plugins/tech-insights-backend/package.json index 556ad5163c..cd4db90942 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.2-next.1", + "version": "0.5.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,14 +33,14 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.1-next.1", - "@backstage/backend-tasks": "^0.3.5-next.0", - "@backstage/catalog-client": "^1.0.5-next.0", - "@backstage/catalog-model": "^1.1.0", - "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.1.0", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/backend-tasks": "^0.3.5-next.1", + "@backstage/catalog-client": "^1.1.0-next.2", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/errors": "^1.1.1-next.0", "@backstage/plugin-tech-insights-common": "^0.2.6", - "@backstage/plugin-tech-insights-node": "^0.3.4-next.0", + "@backstage/plugin-tech-insights-node": "^0.3.4-next.1", "@types/express": "^4.17.6", "@types/luxon": "^3.0.0", "express": "^4.17.1", @@ -54,8 +54,8 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.28-next.1", - "@backstage/cli": "^0.19.0-next.1", + "@backstage/backend-test-utils": "^0.1.28-next.3", + "@backstage/cli": "^0.19.0-next.3", "@types/semver": "^7.3.8", "@types/supertest": "^2.0.8", "supertest": "^6.1.3", diff --git a/plugins/tech-insights-node/CHANGELOG.md b/plugins/tech-insights-node/CHANGELOG.md index 53e8b06716..0411c2fe2a 100644 --- a/plugins/tech-insights-node/CHANGELOG.md +++ b/plugins/tech-insights-node/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-tech-insights-node +## 0.3.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/backend-tasks@0.3.5-next.1 + ## 0.3.4-next.0 ### Patch Changes diff --git a/plugins/tech-insights-node/package.json b/plugins/tech-insights-node/package.json index e74b9df57f..41d4bebc62 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.3.4-next.0", + "version": "0.3.4-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -32,9 +32,9 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.1-next.1", - "@backstage/backend-tasks": "^0.3.5-next.0", - "@backstage/config": "^1.0.1", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/backend-tasks": "^0.3.5-next.1", + "@backstage/config": "^1.0.2-next.0", "@backstage/plugin-tech-insights-common": "^0.2.6", "@backstage/types": "^1.0.0", "@types/luxon": "^3.0.0", @@ -42,7 +42,7 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.1" + "@backstage/cli": "^0.19.0-next.3" }, "files": [ "dist" diff --git a/plugins/tech-insights/CHANGELOG.md b/plugins/tech-insights/CHANGELOG.md index 5f2c9347a5..44b9d666d8 100644 --- a/plugins/tech-insights/CHANGELOG.md +++ b/plugins/tech-insights/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-tech-insights +## 0.3.0-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + ## 0.3.0-next.2 ### Patch Changes diff --git a/plugins/tech-insights/package.json b/plugins/tech-insights/package.json index 836181aea6..4e521c6436 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.0-next.2", + "version": "0.3.0-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -27,11 +27,11 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/errors": "^1.1.0", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", "@backstage/plugin-tech-insights-common": "^0.2.6", "@backstage/theme": "^0.2.16", "@backstage/types": "^1.0.0", @@ -46,10 +46,10 @@ "react-router-dom": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/tech-radar/CHANGELOG.md b/plugins/tech-radar/CHANGELOG.md index ef29d8e037..af98588824 100644 --- a/plugins/tech-radar/CHANGELOG.md +++ b/plugins/tech-radar/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-tech-radar +## 0.5.16-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + ## 0.5.16-next.2 ### Patch Changes diff --git a/plugins/tech-radar/package.json b/plugins/tech-radar/package.json index f2d4fd5ee2..e2cdbae22b 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.5.16-next.2", + "version": "0.5.16-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -32,8 +32,8 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -47,10 +47,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/techdocs-addons-test-utils/CHANGELOG.md b/plugins/techdocs-addons-test-utils/CHANGELOG.md index 288c24b4b9..ceb99b546b 100644 --- a/plugins/techdocs-addons-test-utils/CHANGELOG.md +++ b/plugins/techdocs-addons-test-utils/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-techdocs-addons-test-utils +## 1.0.4-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/core-app-api@1.1.0-next.3 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/integration-react@1.1.4-next.2 + - @backstage/test-utils@1.2.0-next.3 + - @backstage/plugin-catalog@1.5.1-next.3 + - @backstage/plugin-techdocs@1.3.2-next.3 + - @backstage/plugin-techdocs-react@1.0.4-next.2 + ## 1.0.4-next.2 ### Patch Changes diff --git a/plugins/techdocs-addons-test-utils/package.json b/plugins/techdocs-addons-test-utils/package.json index 54548fb080..574503a9d8 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.4-next.2", + "version": "1.0.4-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -32,15 +32,15 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/integration-react": "^1.1.4-next.1", - "@backstage/plugin-catalog": "^1.5.1-next.2", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/integration-react": "^1.1.4-next.2", + "@backstage/plugin-catalog": "^1.5.1-next.3", "@backstage/plugin-search-react": "^1.1.0-next.2", - "@backstage/plugin-techdocs": "^1.3.2-next.2", - "@backstage/plugin-techdocs-react": "^1.0.4-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/plugin-techdocs": "^1.3.2-next.3", + "@backstage/plugin-techdocs-react": "^1.0.4-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.9.13", "@material-ui/icons": "^4.9.1", @@ -56,8 +56,8 @@ "react-router-dom": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/techdocs-backend/CHANGELOG.md b/plugins/techdocs-backend/CHANGELOG.md index 6b4d76b393..8e695b9426 100644 --- a/plugins/techdocs-backend/CHANGELOG.md +++ b/plugins/techdocs-backend/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-techdocs-backend +## 1.3.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.1.0-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/plugin-permission-common@0.6.4-next.2 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/plugin-techdocs-node@1.4.0-next.2 + ## 1.3.0-next.1 ### Minor Changes diff --git a/plugins/techdocs-backend/package.json b/plugins/techdocs-backend/package.json index 9bed0743bd..6915d9b0b5 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.3.0-next.1", + "version": "1.3.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,16 +33,16 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/backend-common": "^0.15.1-next.2", - "@backstage/catalog-client": "^1.0.5-next.1", - "@backstage/catalog-model": "^1.1.0", - "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.1.0", - "@backstage/integration": "^1.3.1-next.1", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/catalog-client": "^1.1.0-next.2", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/integration": "^1.3.1-next.2", "@backstage/plugin-catalog-common": "^1.0.6-next.0", - "@backstage/plugin-permission-common": "^0.6.4-next.1", + "@backstage/plugin-permission-common": "^0.6.4-next.2", "@backstage/plugin-search-common": "^1.0.1-next.0", - "@backstage/plugin-techdocs-node": "^1.4.0-next.1", + "@backstage/plugin-techdocs-node": "^1.4.0-next.2", "@types/express": "^4.17.6", "dockerode": "^3.3.1", "express": "^4.17.1", @@ -55,9 +55,9 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/backend-test-utils": "^0.1.28-next.2", - "@backstage/cli": "^0.19.0-next.2", - "@backstage/plugin-search-backend-node": "1.0.2-next.1", + "@backstage/backend-test-utils": "^0.1.28-next.3", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/plugin-search-backend-node": "1.0.2-next.2", "@types/dockerode": "^3.3.0", "msw": "^0.47.0", "supertest": "^6.1.3" diff --git a/plugins/techdocs-module-addons-contrib/CHANGELOG.md b/plugins/techdocs-module-addons-contrib/CHANGELOG.md index b683b09e89..ea008bb121 100644 --- a/plugins/techdocs-module-addons-contrib/CHANGELOG.md +++ b/plugins/techdocs-module-addons-contrib/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-techdocs-module-addons-contrib +## 1.0.4-next.2 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/integration@1.3.1-next.2 + - @backstage/integration-react@1.1.4-next.2 + - @backstage/plugin-techdocs-react@1.0.4-next.2 + ## 1.0.4-next.1 ### Patch Changes diff --git a/plugins/techdocs-module-addons-contrib/package.json b/plugins/techdocs-module-addons-contrib/package.json index 35db982035..250394603c 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.4-next.1", + "version": "1.0.4-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,11 +33,11 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/integration": "^1.3.1-next.1", - "@backstage/integration-react": "^1.1.4-next.1", - "@backstage/plugin-techdocs-react": "^1.0.4-next.1", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/integration": "^1.3.1-next.2", + "@backstage/integration-react": "^1.1.4-next.2", + "@backstage/plugin-techdocs-react": "^1.0.4-next.2", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.9.13", "@material-ui/icons": "^4.9.1", @@ -50,11 +50,11 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/plugin-techdocs-addons-test-utils": "^1.0.4-next.2", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/plugin-techdocs-addons-test-utils": "^1.0.4-next.3", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/techdocs-node/CHANGELOG.md b/plugins/techdocs-node/CHANGELOG.md index f17a69ce4d..1dabca3005 100644 --- a/plugins/techdocs-node/CHANGELOG.md +++ b/plugins/techdocs-node/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-techdocs-node +## 1.4.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/backend-common@0.15.1-next.3 + ## 1.4.0-next.1 ### Minor Changes diff --git a/plugins/techdocs-node/package.json b/plugins/techdocs-node/package.json index f6d9042359..8bd6971528 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.4.0-next.1", + "version": "1.4.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { @@ -41,11 +41,11 @@ "dependencies": { "@azure/identity": "^2.0.1", "@azure/storage-blob": "^12.5.0", - "@backstage/backend-common": "^0.15.1-next.2", - "@backstage/catalog-model": "^1.1.0", - "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.1.0", - "@backstage/integration": "^1.3.1-next.1", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/integration": "^1.3.1-next.2", "@backstage/plugin-search-common": "^1.0.1-next.0", "@google-cloud/storage": "^6.0.0", "@trendyol-js/openstack-swift-sdk": "^0.0.5", @@ -63,7 +63,7 @@ "winston": "^3.2.1" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", + "@backstage/cli": "^0.19.0-next.3", "@types/fs-extra": "^9.0.5", "@types/js-yaml": "^4.0.0", "@types/mime-types": "^2.1.0", diff --git a/plugins/techdocs-react/CHANGELOG.md b/plugins/techdocs-react/CHANGELOG.md index 07599edc75..b7223d3ba4 100644 --- a/plugins/techdocs-react/CHANGELOG.md +++ b/plugins/techdocs-react/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-techdocs-react +## 1.0.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + ## 1.0.4-next.1 ### Patch Changes diff --git a/plugins/techdocs-react/package.json b/plugins/techdocs-react/package.json index f86ff600d8..d54de784aa 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.0.4-next.1", + "version": "1.0.4-next.2", "publishConfig": { "access": "public", "alphaTypes": "dist/index.alpha.d.ts", @@ -34,10 +34,10 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0", - "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.11.1-next.1", - "@backstage/core-plugin-api": "^1.0.6-next.1", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", "@backstage/version-bridge": "^1.0.1", "@material-ui/core": "^4.12.2", "@material-ui/lab": "4.0.0-alpha.57", @@ -53,8 +53,8 @@ "react-router-dom": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.1", - "@backstage/test-utils": "^1.2.0-next.1", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/test-utils": "^1.2.0-next.3", "@backstage/theme": "^0.2.16", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/plugins/techdocs/CHANGELOG.md b/plugins/techdocs/CHANGELOG.md index b40aed750d..a89b1361ca 100644 --- a/plugins/techdocs/CHANGELOG.md +++ b/plugins/techdocs/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-techdocs +## 1.3.2-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/integration-react@1.1.4-next.2 + - @backstage/plugin-techdocs-react@1.0.4-next.2 + ## 1.3.2-next.2 ### Patch Changes diff --git a/plugins/techdocs/package.json b/plugins/techdocs/package.json index 4ea6307408..e484b6ba07 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.3.2-next.2", + "version": "1.3.2-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,17 +33,17 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0", - "@backstage/config": "^1.0.1", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/errors": "^1.1.0", - "@backstage/integration": "^1.3.1-next.1", - "@backstage/integration-react": "^1.1.4-next.1", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/integration": "^1.3.1-next.2", + "@backstage/integration-react": "^1.1.4-next.2", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", "@backstage/plugin-search-common": "^1.0.1-next.0", "@backstage/plugin-search-react": "^1.1.0-next.2", - "@backstage/plugin-techdocs-react": "^1.0.4-next.1", + "@backstage/plugin-techdocs-react": "^1.0.4-next.2", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -65,10 +65,10 @@ "react-router-dom": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", diff --git a/plugins/todo-backend/CHANGELOG.md b/plugins/todo-backend/CHANGELOG.md index aca3dfb965..b77960123a 100644 --- a/plugins/todo-backend/CHANGELOG.md +++ b/plugins/todo-backend/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-todo-backend +## 0.1.33-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.1.0-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/integration@1.3.1-next.2 + - @backstage/backend-common@0.15.1-next.3 + ## 0.1.33-next.1 ### Patch Changes diff --git a/plugins/todo-backend/package.json b/plugins/todo-backend/package.json index 1ecce23282..55bf606f4e 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.33-next.1", + "version": "0.1.33-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -29,12 +29,12 @@ "start": "backstage-cli package start" }, "dependencies": { - "@backstage/backend-common": "^0.15.1-next.2", - "@backstage/catalog-client": "^1.0.5-next.1", - "@backstage/catalog-model": "^1.1.0", - "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.1.0", - "@backstage/integration": "^1.3.1-next.1", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/catalog-client": "^1.1.0-next.2", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/config": "^1.0.2-next.0", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/integration": "^1.3.1-next.2", "@types/express": "^4.17.6", "express": "^4.17.1", "express-promise-router": "^4.1.0", @@ -43,7 +43,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", + "@backstage/cli": "^0.19.0-next.3", "@types/supertest": "^2.0.8", "msw": "^0.47.0", "supertest": "^6.1.3" diff --git a/plugins/todo/CHANGELOG.md b/plugins/todo/CHANGELOG.md index 88d4812a28..da47468aa2 100644 --- a/plugins/todo/CHANGELOG.md +++ b/plugins/todo/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-todo +## 0.2.11-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + ## 0.2.11-next.2 ### Patch Changes diff --git a/plugins/todo/package.json b/plugins/todo/package.json index 880209654b..9ee1e06b98 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.11-next.2", + "version": "0.2.11-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -29,11 +29,11 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/errors": "^1.1.0", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -45,10 +45,10 @@ "react-router": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/user-settings/CHANGELOG.md b/plugins/user-settings/CHANGELOG.md index e720e3255d..e249499aa4 100644 --- a/plugins/user-settings/CHANGELOG.md +++ b/plugins/user-settings/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-user-settings +## 0.4.8-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + ## 0.4.8-next.2 ### Patch Changes diff --git a/plugins/user-settings/package.json b/plugins/user-settings/package.json index 0f6ab5161b..f99c0d206e 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.4.8-next.2", + "version": "0.4.8-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -32,8 +32,8 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -46,10 +46,10 @@ "react-router": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/vault-backend/CHANGELOG.md b/plugins/vault-backend/CHANGELOG.md index 7d839d2f31..8ef29cf44a 100644 --- a/plugins/vault-backend/CHANGELOG.md +++ b/plugins/vault-backend/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-vault-backend +## 0.2.2-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.2-next.0 + - @backstage/errors@1.1.1-next.0 + - @backstage/backend-test-utils@0.1.28-next.3 + - @backstage/backend-common@0.15.1-next.3 + - @backstage/backend-tasks@0.3.5-next.1 + ## 0.2.2-next.2 ### Patch Changes diff --git a/plugins/vault-backend/package.json b/plugins/vault-backend/package.json index b6b59892e0..b90118bb66 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.2.2-next.2", + "version": "0.2.2-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,11 +33,11 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/backend-common": "^0.15.1-next.2", - "@backstage/backend-tasks": "^0.3.5-next.0", - "@backstage/backend-test-utils": "^0.1.28-next.2", - "@backstage/config": "^1.0.1", - "@backstage/errors": "^1.1.0", + "@backstage/backend-common": "^0.15.1-next.3", + "@backstage/backend-tasks": "^0.3.5-next.1", + "@backstage/backend-test-utils": "^0.1.28-next.3", + "@backstage/config": "^1.0.2-next.0", + "@backstage/errors": "^1.1.1-next.0", "@types/express": "*", "compression": "^1.7.4", "cors": "^2.8.5", @@ -50,7 +50,7 @@ "yn": "^5.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", + "@backstage/cli": "^0.19.0-next.3", "@types/compression": "^1.7.2", "@types/supertest": "^2.0.8", "msw": "^0.47.0", diff --git a/plugins/vault/CHANGELOG.md b/plugins/vault/CHANGELOG.md index e551781a71..852be0d87e 100644 --- a/plugins/vault/CHANGELOG.md +++ b/plugins/vault/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-vault +## 0.1.3-next.2 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.1.4-next.2 + - @backstage/catalog-model@1.1.1-next.0 + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + ## 0.1.3-next.1 ### Patch Changes diff --git a/plugins/vault/package.json b/plugins/vault/package.json index 00d4d4bf47..762a5328ea 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.3-next.1", + "version": "0.1.3-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,11 +33,11 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/catalog-model": "^1.1.0", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/errors": "^1.1.0", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", + "@backstage/catalog-model": "^1.1.1-next.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/errors": "^1.1.1-next.0", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -48,10 +48,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/xcmetrics/CHANGELOG.md b/plugins/xcmetrics/CHANGELOG.md index 8d64162dbe..b998a9955e 100644 --- a/plugins/xcmetrics/CHANGELOG.md +++ b/plugins/xcmetrics/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-xcmetrics +## 0.2.29-next.3 + +### Patch Changes + +- 7d47def9c4: Removed dependency on `@types/jest`. +- Updated dependencies + - @backstage/core-components@0.11.1-next.3 + - @backstage/core-plugin-api@1.0.6-next.3 + - @backstage/errors@1.1.1-next.0 + ## 0.2.29-next.2 ### Patch Changes diff --git a/plugins/xcmetrics/package.json b/plugins/xcmetrics/package.json index 94cd0e8066..0b4099b691 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.29-next.2", + "version": "0.2.29-next.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -23,9 +23,9 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/errors": "^1.1.0", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", + "@backstage/errors": "^1.1.1-next.0", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", @@ -39,10 +39,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/yarn.lock b/yarn.lock index c772e1a835..8c36d1da02 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2814,16 +2814,16 @@ __metadata: languageName: node linkType: hard -"@backstage/app-defaults@^1.0.6-next.1, @backstage/app-defaults@workspace:packages/app-defaults": +"@backstage/app-defaults@^1.0.6-next.2, @backstage/app-defaults@workspace:packages/app-defaults": version: 0.0.0-use.local resolution: "@backstage/app-defaults@workspace:packages/app-defaults" dependencies: - "@backstage/cli": ^0.19.0-next.1 - "@backstage/core-app-api": ^1.1.0-next.1 - "@backstage/core-components": ^0.11.1-next.1 - "@backstage/core-plugin-api": ^1.0.6-next.1 - "@backstage/plugin-permission-react": ^0.4.5-next.1 - "@backstage/test-utils": ^1.2.0-next.1 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/plugin-permission-react": ^0.4.5-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -2839,33 +2839,33 @@ __metadata: languageName: unknown linkType: soft -"@backstage/backend-app-api@^0.2.1-next.0, @backstage/backend-app-api@^0.2.1-next.1, @backstage/backend-app-api@workspace:packages/backend-app-api": +"@backstage/backend-app-api@^0.2.1-next.2, @backstage/backend-app-api@workspace:packages/backend-app-api": version: 0.0.0-use.local resolution: "@backstage/backend-app-api@workspace:packages/backend-app-api" dependencies: - "@backstage/backend-common": ^0.15.1-next.2 - "@backstage/backend-plugin-api": ^0.1.2-next.1 - "@backstage/backend-tasks": ^0.3.5-next.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/errors": ^1.1.0 - "@backstage/plugin-permission-node": ^0.6.5-next.2 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/backend-plugin-api": ^0.1.2-next.2 + "@backstage/backend-tasks": ^0.3.5-next.1 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/plugin-permission-node": ^0.6.5-next.3 express: ^4.17.1 express-promise-router: ^4.1.0 winston: ^3.2.1 languageName: unknown linkType: soft -"@backstage/backend-common@^0.15.1-next.0, @backstage/backend-common@^0.15.1-next.1, @backstage/backend-common@^0.15.1-next.2, @backstage/backend-common@workspace:packages/backend-common": +"@backstage/backend-common@^0.15.1-next.3, @backstage/backend-common@workspace:packages/backend-common": version: 0.0.0-use.local resolution: "@backstage/backend-common@workspace:packages/backend-common" dependencies: - "@backstage/backend-test-utils": ^0.1.28-next.2 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/cli-common": ^0.1.9 - "@backstage/config": ^1.0.1 - "@backstage/config-loader": ^1.1.4-next.1 - "@backstage/errors": ^1.1.0 - "@backstage/integration": ^1.3.1-next.1 + "@backstage/backend-test-utils": ^0.1.28-next.3 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/cli-common": ^0.1.10-next.0 + "@backstage/config": ^1.0.2-next.0 + "@backstage/config-loader": ^1.1.4-next.2 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/integration": ^1.3.1-next.2 "@backstage/types": ^1.0.0 "@google-cloud/storage": ^6.0.0 "@keyv/redis": ^2.2.3 @@ -2945,21 +2945,21 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/backend-defaults@workspace:packages/backend-defaults" dependencies: - "@backstage/backend-app-api": ^0.2.1-next.0 - "@backstage/backend-plugin-api": ^0.1.2-next.0 - "@backstage/cli": ^0.19.0-next.1 + "@backstage/backend-app-api": ^0.2.1-next.2 + "@backstage/backend-plugin-api": ^0.1.2-next.2 + "@backstage/cli": ^0.19.0-next.3 languageName: unknown linkType: soft -"@backstage/backend-plugin-api@^0.1.2-next.0, @backstage/backend-plugin-api@^0.1.2-next.1, @backstage/backend-plugin-api@workspace:packages/backend-plugin-api": +"@backstage/backend-plugin-api@^0.1.2-next.2, @backstage/backend-plugin-api@workspace:packages/backend-plugin-api": version: 0.0.0-use.local resolution: "@backstage/backend-plugin-api@workspace:packages/backend-plugin-api" dependencies: - "@backstage/backend-common": ^0.15.1-next.2 - "@backstage/backend-tasks": ^0.3.5-next.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/plugin-permission-common": ^0.6.4-next.1 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/backend-tasks": ^0.3.5-next.1 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/plugin-permission-common": ^0.6.4-next.2 "@types/express": ^4.17.6 express: ^4.17.1 winston: ^3.2.1 @@ -2967,15 +2967,15 @@ __metadata: languageName: unknown linkType: soft -"@backstage/backend-tasks@^0.3.5-next.0, @backstage/backend-tasks@workspace:packages/backend-tasks": +"@backstage/backend-tasks@^0.3.5-next.1, @backstage/backend-tasks@workspace:packages/backend-tasks": version: 0.0.0-use.local resolution: "@backstage/backend-tasks@workspace:packages/backend-tasks" dependencies: - "@backstage/backend-common": ^0.15.1-next.1 - "@backstage/backend-test-utils": ^0.1.28-next.1 - "@backstage/cli": ^0.19.0-next.1 - "@backstage/config": ^1.0.1 - "@backstage/errors": ^1.1.0 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/backend-test-utils": ^0.1.28-next.3 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/errors": ^1.1.1-next.0 "@backstage/types": ^1.0.0 "@types/cron": ^2.0.0 "@types/luxon": ^3.0.0 @@ -2991,15 +2991,15 @@ __metadata: languageName: unknown linkType: soft -"@backstage/backend-test-utils@^0.1.28-next.1, @backstage/backend-test-utils@^0.1.28-next.2, @backstage/backend-test-utils@workspace:packages/backend-test-utils": +"@backstage/backend-test-utils@^0.1.28-next.3, @backstage/backend-test-utils@workspace:packages/backend-test-utils": version: 0.0.0-use.local resolution: "@backstage/backend-test-utils@workspace:packages/backend-test-utils" dependencies: - "@backstage/backend-app-api": ^0.2.1-next.1 - "@backstage/backend-common": ^0.15.1-next.2 - "@backstage/backend-plugin-api": ^0.1.2-next.1 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 + "@backstage/backend-app-api": ^0.2.1-next.2 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/backend-plugin-api": ^0.1.2-next.2 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 better-sqlite3: ^7.5.0 knex: ^2.0.0 msw: ^0.47.0 @@ -3010,13 +3010,13 @@ __metadata: languageName: unknown linkType: soft -"@backstage/catalog-client@^1.0.5-next.0, @backstage/catalog-client@^1.0.5-next.1, @backstage/catalog-client@workspace:packages/catalog-client": +"@backstage/catalog-client@^1.1.0-next.2, @backstage/catalog-client@workspace:packages/catalog-client": version: 0.0.0-use.local resolution: "@backstage/catalog-client@workspace:packages/catalog-client" dependencies: - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/errors": ^1.1.0 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/errors": ^1.1.1-next.0 cross-fetch: ^3.1.5 msw: ^0.47.0 languageName: unknown @@ -3033,13 +3033,13 @@ __metadata: languageName: node linkType: hard -"@backstage/catalog-model@^1.0.0, @backstage/catalog-model@^1.0.1, @backstage/catalog-model@^1.0.3, @backstage/catalog-model@^1.1.0, @backstage/catalog-model@workspace:packages/catalog-model": +"@backstage/catalog-model@^1.1.1-next.0, @backstage/catalog-model@workspace:packages/catalog-model": version: 0.0.0-use.local resolution: "@backstage/catalog-model@workspace:packages/catalog-model" dependencies: - "@backstage/cli": ^0.19.0-next.1 - "@backstage/config": ^1.0.1 - "@backstage/errors": ^1.1.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/errors": ^1.1.1-next.0 "@backstage/types": ^1.0.0 "@types/json-schema": ^7.0.5 "@types/lodash": ^4.14.151 @@ -3051,30 +3051,45 @@ __metadata: languageName: unknown linkType: soft -"@backstage/cli-common@^0.1.9, @backstage/cli-common@^0.1.9-next.0, @backstage/cli-common@workspace:packages/cli-common": +"@backstage/catalog-model@npm:^1.0.0, @backstage/catalog-model@npm:^1.1.0": + version: 1.1.0 + resolution: "@backstage/catalog-model@npm:1.1.0" + dependencies: + "@backstage/config": ^1.0.1 + "@backstage/errors": ^1.1.0 + "@backstage/types": ^1.0.0 + ajv: ^8.10.0 + json-schema: ^0.4.0 + lodash: ^4.17.21 + uuid: ^8.0.0 + checksum: 81db2da7f960e6207f2eeab3944d5bc54d739b6172575cf4cb9096a2058835af75534fd5232c450efddc8d656952ebbf130501ac0bba43690a3d742c3e11143d + languageName: node + linkType: hard + +"@backstage/cli-common@^0.1.10-next.0, @backstage/cli-common@workspace:packages/cli-common": version: 0.0.0-use.local resolution: "@backstage/cli-common@workspace:packages/cli-common" dependencies: - "@backstage/cli": ^0.19.0-next.1 + "@backstage/cli": ^0.19.0-next.3 "@types/node": ^16.0.0 languageName: unknown linkType: soft -"@backstage/cli@^0.19.0-next.1, @backstage/cli@^0.19.0-next.2, @backstage/cli@workspace:*, @backstage/cli@workspace:packages/cli": +"@backstage/cli@^0.19.0-next.1, @backstage/cli@^0.19.0-next.2, @backstage/cli@^0.19.0-next.3, @backstage/cli@workspace:*, @backstage/cli@workspace:packages/cli": version: 0.0.0-use.local resolution: "@backstage/cli@workspace:packages/cli" dependencies: - "@backstage/backend-common": ^0.15.1-next.2 - "@backstage/cli-common": ^0.1.9 - "@backstage/config": ^1.0.1 - "@backstage/config-loader": ^1.1.4-next.1 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/errors": ^1.1.0 - "@backstage/release-manifests": ^0.0.6-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/cli-common": ^0.1.10-next.0 + "@backstage/config": ^1.0.2-next.0 + "@backstage/config-loader": ^1.1.4-next.2 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/release-manifests": ^0.0.6-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@backstage/types": ^1.0.0 "@manypkg/get-packages": ^1.1.3 @@ -3204,8 +3219,8 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/codemods@workspace:packages/codemods" dependencies: - "@backstage/cli": ^0.19.0-next.1 - "@backstage/cli-common": ^0.1.9 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/cli-common": ^0.1.10-next.0 "@types/jscodeshift": ^0.11.0 "@types/node": ^16.11.26 chalk: ^4.0.0 @@ -3218,14 +3233,14 @@ __metadata: languageName: unknown linkType: soft -"@backstage/config-loader@^1.1.4-next.1, @backstage/config-loader@workspace:packages/config-loader": +"@backstage/config-loader@^1.1.4-next.2, @backstage/config-loader@workspace:packages/config-loader": version: 0.0.0-use.local resolution: "@backstage/config-loader@workspace:packages/config-loader" dependencies: - "@backstage/cli": ^0.19.0-next.2 - "@backstage/cli-common": ^0.1.9 - "@backstage/config": ^1.0.1 - "@backstage/errors": ^1.1.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/cli-common": ^0.1.10-next.0 + "@backstage/config": ^1.0.2-next.0 + "@backstage/errors": ^1.1.1-next.0 "@backstage/types": ^1.0.0 "@types/json-schema": ^7.0.6 "@types/json-schema-merge-allof": ^0.6.0 @@ -3247,26 +3262,36 @@ __metadata: languageName: unknown linkType: soft -"@backstage/config@^1.0.0, @backstage/config@^1.0.1, @backstage/config@workspace:packages/config": +"@backstage/config@^1.0.2-next.0, @backstage/config@workspace:packages/config": version: 0.0.0-use.local resolution: "@backstage/config@workspace:packages/config" dependencies: - "@backstage/cli": ^0.19.0-next.1 - "@backstage/test-utils": ^1.2.0-next.1 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/types": ^1.0.0 "@types/node": ^16.0.0 lodash: ^4.17.21 languageName: unknown linkType: soft -"@backstage/core-app-api@^1.1.0-next.1, @backstage/core-app-api@^1.1.0-next.2, @backstage/core-app-api@workspace:packages/core-app-api": +"@backstage/config@npm:^1.0.1": + version: 1.0.1 + resolution: "@backstage/config@npm:1.0.1" + dependencies: + "@backstage/types": ^1.0.0 + lodash: ^4.17.21 + checksum: 08ec95a9ddbfc8410c949314c464c63c0723a0681e21607463495454d7b06a9e7884110874efe7a9f7a8c9c864eb20a528a7a407dba7da84516d47d929e7ebc3 + languageName: node + linkType: hard + +"@backstage/core-app-api@^1.1.0-next.1, @backstage/core-app-api@^1.1.0-next.2, @backstage/core-app-api@^1.1.0-next.3, @backstage/core-app-api@workspace:packages/core-app-api": version: 0.0.0-use.local resolution: "@backstage/core-app-api@workspace:packages/core-app-api" dependencies: - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/types": ^1.0.0 "@backstage/version-bridge": ^1.0.1 "@testing-library/jest-dom": ^5.10.1 @@ -3293,16 +3318,16 @@ __metadata: languageName: unknown linkType: soft -"@backstage/core-components@^0.11.1-next.1, @backstage/core-components@^0.11.1-next.2, @backstage/core-components@workspace:packages/core-components": +"@backstage/core-components@^0.11.1-next.1, @backstage/core-components@^0.11.1-next.2, @backstage/core-components@^0.11.1-next.3, @backstage/core-components@workspace:packages/core-components": version: 0.0.0-use.local resolution: "@backstage/core-components@workspace:packages/core-components" dependencies: - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/errors": ^1.1.0 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@backstage/version-bridge": ^1.0.1 "@material-table/core": ^3.1.0 @@ -3416,14 +3441,14 @@ __metadata: languageName: node linkType: hard -"@backstage/core-plugin-api@^1.0.6-next.1, @backstage/core-plugin-api@^1.0.6-next.2, @backstage/core-plugin-api@workspace:packages/core-plugin-api": +"@backstage/core-plugin-api@^1.0.6-next.1, @backstage/core-plugin-api@^1.0.6-next.2, @backstage/core-plugin-api@^1.0.6-next.3, @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" dependencies: - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/types": ^1.0.0 "@backstage/version-bridge": ^1.0.1 "@testing-library/jest-dom": ^5.10.1 @@ -3467,8 +3492,8 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/create-app@workspace:packages/create-app" dependencies: - "@backstage/cli": ^0.19.0-next.2 - "@backstage/cli-common": ^0.1.9 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/cli-common": ^0.1.10-next.0 "@types/fs-extra": ^9.0.1 "@types/inquirer": ^8.1.3 "@types/node": ^16.11.26 @@ -3487,19 +3512,19 @@ __metadata: languageName: unknown linkType: soft -"@backstage/dev-utils@^1.0.6-next.1, @backstage/dev-utils@workspace:packages/dev-utils": +"@backstage/dev-utils@^1.0.6-next.1, @backstage/dev-utils@^1.0.6-next.2, @backstage/dev-utils@workspace:packages/dev-utils": version: 0.0.0-use.local resolution: "@backstage/dev-utils@workspace:packages/dev-utils" dependencies: - "@backstage/app-defaults": ^1.0.6-next.1 - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.1 - "@backstage/core-app-api": ^1.1.0-next.1 - "@backstage/core-components": ^0.11.1-next.1 - "@backstage/core-plugin-api": ^1.0.6-next.1 - "@backstage/integration-react": ^1.1.4-next.0 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 - "@backstage/test-utils": ^1.2.0-next.1 + "@backstage/app-defaults": ^1.0.6-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/integration-react": ^1.1.4-next.2 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -3518,28 +3543,39 @@ __metadata: languageName: unknown linkType: soft -"@backstage/errors@1.1.0, @backstage/errors@^1.0.0, @backstage/errors@^1.1.0, @backstage/errors@^1.1.0-next.0, @backstage/errors@workspace:packages/errors": +"@backstage/errors@1.1.1-next.0, @backstage/errors@^1.1.1-next.0, @backstage/errors@workspace:packages/errors": version: 0.0.0-use.local resolution: "@backstage/errors@workspace:packages/errors" dependencies: - "@backstage/cli": ^0.19.0-next.1 + "@backstage/cli": ^0.19.0-next.3 "@backstage/types": ^1.0.0 cross-fetch: ^3.1.5 serialize-error: ^8.0.1 languageName: unknown linkType: soft -"@backstage/integration-react@^1.1.4-next.0, @backstage/integration-react@^1.1.4-next.1, @backstage/integration-react@workspace:packages/integration-react": +"@backstage/errors@npm:^1.1.0": + version: 1.1.0 + resolution: "@backstage/errors@npm:1.1.0" + dependencies: + "@backstage/types": ^1.0.0 + cross-fetch: ^3.1.5 + serialize-error: ^8.0.1 + checksum: b21d35803ce1adf7c7d7219e02636340780dc7f007bdaa966f62120f3607548a5e7a557b364abf54da29081f30efe3df72c5bfefebde335c305034961c6ae620 + languageName: node + linkType: hard + +"@backstage/integration-react@^1.1.4-next.2, @backstage/integration-react@workspace:packages/integration-react": version: 0.0.0-use.local resolution: "@backstage/integration-react@workspace:packages/integration-react" dependencies: - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/integration": ^1.3.1-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/integration": ^1.3.1-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -3575,15 +3611,15 @@ __metadata: languageName: node linkType: hard -"@backstage/integration@^1.3.1-next.0, @backstage/integration@^1.3.1-next.1, @backstage/integration@workspace:packages/integration": +"@backstage/integration@^1.3.1-next.1, @backstage/integration@^1.3.1-next.2, @backstage/integration@workspace:packages/integration": version: 0.0.0-use.local resolution: "@backstage/integration@workspace:packages/integration" dependencies: - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/config-loader": ^1.1.4-next.1 - "@backstage/errors": ^1.1.0 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/config-loader": ^1.1.4-next.2 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/test-utils": ^1.2.0-next.3 "@octokit/auth-app": ^4.0.0 "@octokit/rest": ^19.0.3 "@types/luxon": ^3.0.0 @@ -3615,14 +3651,14 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-adr-backend@workspace:plugins/adr-backend" dependencies: - "@backstage/backend-common": ^0.15.1-next.2 - "@backstage/catalog-client": ^1.0.5-next.1 - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/errors": ^1.1.0 - "@backstage/integration": ^1.3.1-next.1 - "@backstage/plugin-adr-common": ^0.2.1-next.0 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/catalog-client": ^1.1.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/integration": ^1.3.1-next.2 + "@backstage/plugin-adr-common": ^0.2.1-next.1 "@backstage/plugin-search-common": ^1.0.1-next.0 "@types/marked": ^4.0.0 "@types/supertest": ^2.0.8 @@ -3636,13 +3672,13 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-adr-common@^0.2.1-next.0, @backstage/plugin-adr-common@workspace:plugins/adr-common": +"@backstage/plugin-adr-common@^0.2.1-next.1, @backstage/plugin-adr-common@workspace:plugins/adr-common": version: 0.0.0-use.local resolution: "@backstage/plugin-adr-common@workspace:plugins/adr-common" dependencies: - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.1 - "@backstage/integration": ^1.3.1-next.0 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/integration": ^1.3.1-next.2 "@backstage/plugin-search-common": ^1.0.1-next.0 languageName: unknown linkType: soft @@ -3651,18 +3687,18 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-adr@workspace:plugins/adr" dependencies: - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/integration-react": ^1.1.4-next.1 - "@backstage/plugin-adr-common": ^0.2.1-next.0 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/integration-react": ^1.1.4-next.2 + "@backstage/plugin-adr-common": ^0.2.1-next.1 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 "@backstage/plugin-search-common": ^1.0.1-next.0 "@backstage/plugin-search-react": ^1.1.0-next.2 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -3689,9 +3725,9 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-airbrake-backend@workspace:plugins/airbrake-backend" dependencies: - "@backstage/backend-common": ^0.15.1-next.2 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 "@types/express": "*" "@types/http-proxy-middleware": ^0.19.3 "@types/supertest": ^2.0.8 @@ -3705,18 +3741,18 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-airbrake@^0.3.9-next.2, @backstage/plugin-airbrake@workspace:plugins/airbrake": +"@backstage/plugin-airbrake@^0.3.9-next.3, @backstage/plugin-airbrake@workspace:plugins/airbrake": version: 0.0.0-use.local resolution: "@backstage/plugin-airbrake@workspace:plugins/airbrake" dependencies: - "@backstage/app-defaults": ^1.0.6-next.1 - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/app-defaults": ^1.0.6-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -3740,14 +3776,14 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-allure@workspace:plugins/allure" dependencies: - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -3769,13 +3805,13 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-analytics-module-ga@workspace:plugins/analytics-module-ga" dependencies: - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -3793,16 +3829,16 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-apache-airflow@^0.2.2-next.2, @backstage/plugin-apache-airflow@workspace:plugins/apache-airflow": +"@backstage/plugin-apache-airflow@^0.2.2-next.3, @backstage/plugin-apache-airflow@workspace:plugins/apache-airflow": version: 0.0.0-use.local resolution: "@backstage/plugin-apache-airflow@workspace:plugins/apache-airflow" dependencies: - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.57 @@ -3832,20 +3868,20 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-api-docs@^0.8.9-next.2, @backstage/plugin-api-docs@workspace:plugins/api-docs": +"@backstage/plugin-api-docs@^0.8.9-next.3, @backstage/plugin-api-docs@workspace:plugins/api-docs": version: 0.0.0-use.local resolution: "@backstage/plugin-api-docs@workspace:plugins/api-docs" dependencies: "@asyncapi/react-component": 1.0.0-next.40 - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/plugin-catalog": ^1.5.1-next.2 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/plugin-catalog": ^1.5.1-next.3 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -3876,12 +3912,12 @@ __metadata: resolution: "@backstage/plugin-apollo-explorer@workspace:plugins/apollo-explorer" dependencies: "@apollo/explorer": ^1.1.1 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.9.13 "@material-ui/icons": ^4.9.1 @@ -3899,15 +3935,15 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-app-backend@^0.3.36-next.2, @backstage/plugin-app-backend@workspace:plugins/app-backend": +"@backstage/plugin-app-backend@^0.3.36-next.3, @backstage/plugin-app-backend@workspace:plugins/app-backend": version: 0.0.0-use.local resolution: "@backstage/plugin-app-backend@workspace:plugins/app-backend" dependencies: - "@backstage/backend-common": ^0.15.1-next.2 - "@backstage/backend-test-utils": ^0.1.28-next.2 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/config-loader": ^1.1.4-next.1 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/backend-test-utils": ^0.1.28-next.3 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/config-loader": ^1.1.4-next.2 "@backstage/types": ^1.0.0 "@types/express": ^4.17.6 "@types/supertest": ^2.0.8 @@ -3927,18 +3963,18 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-auth-backend@^0.16.0-next.2, @backstage/plugin-auth-backend@workspace:plugins/auth-backend": +"@backstage/plugin-auth-backend@^0.16.0-next.3, @backstage/plugin-auth-backend@workspace:plugins/auth-backend": version: 0.0.0-use.local resolution: "@backstage/plugin-auth-backend@workspace:plugins/auth-backend" dependencies: - "@backstage/backend-common": ^0.15.1-next.2 - "@backstage/backend-test-utils": ^0.1.28-next.2 - "@backstage/catalog-client": ^1.0.5-next.1 - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/errors": ^1.1.0 - "@backstage/plugin-auth-node": ^0.2.5-next.2 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/backend-test-utils": ^0.1.28-next.3 + "@backstage/catalog-client": ^1.1.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/plugin-auth-node": ^0.2.5-next.3 "@backstage/types": ^1.0.0 "@davidzemon/passport-okta-oauth": ^0.0.5 "@google-cloud/firestore": ^6.0.0 @@ -3991,15 +4027,15 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-auth-node@^0.2.5-next.1, @backstage/plugin-auth-node@^0.2.5-next.2, @backstage/plugin-auth-node@workspace:plugins/auth-node": +"@backstage/plugin-auth-node@^0.2.5-next.3, @backstage/plugin-auth-node@workspace:plugins/auth-node": version: 0.0.0-use.local resolution: "@backstage/plugin-auth-node@workspace:plugins/auth-node" dependencies: - "@backstage/backend-common": ^0.15.1-next.2 - "@backstage/backend-test-utils": ^0.1.28-next.2 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/errors": ^1.1.0 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/backend-test-utils": ^0.1.28-next.3 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/errors": ^1.1.1-next.0 "@types/express": "*" express: ^4.17.1 jose: ^4.6.0 @@ -4011,13 +4047,13 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-azure-devops-backend@^0.3.15-next.1, @backstage/plugin-azure-devops-backend@workspace:plugins/azure-devops-backend": +"@backstage/plugin-azure-devops-backend@^0.3.15-next.2, @backstage/plugin-azure-devops-backend@workspace:plugins/azure-devops-backend": version: 0.0.0-use.local resolution: "@backstage/plugin-azure-devops-backend@workspace:plugins/azure-devops-backend" dependencies: - "@backstage/backend-common": ^0.15.1-next.2 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 "@backstage/plugin-azure-devops-common": ^0.3.0-next.0 "@types/express": ^4.17.6 "@types/supertest": ^2.0.8 @@ -4041,20 +4077,20 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-azure-devops@^0.2.0-next.2, @backstage/plugin-azure-devops@workspace:plugins/azure-devops": +"@backstage/plugin-azure-devops@^0.2.0-next.3, @backstage/plugin-azure-devops@workspace:plugins/azure-devops": version: 0.0.0-use.local resolution: "@backstage/plugin-azure-devops@workspace:plugins/azure-devops" dependencies: - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/errors": ^1.1.0 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/errors": ^1.1.1-next.0 "@backstage/plugin-azure-devops-common": ^0.3.0-next.0 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -4074,16 +4110,16 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-badges-backend@^0.1.30-next.0, @backstage/plugin-badges-backend@workspace:plugins/badges-backend": +"@backstage/plugin-badges-backend@^0.1.30-next.1, @backstage/plugin-badges-backend@workspace:plugins/badges-backend": version: 0.0.0-use.local resolution: "@backstage/plugin-badges-backend@workspace:plugins/badges-backend" dependencies: - "@backstage/backend-common": ^0.15.1-next.1 - "@backstage/catalog-client": ^1.0.5-next.0 - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.1 - "@backstage/config": ^1.0.1 - "@backstage/errors": ^1.1.0 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/catalog-client": ^1.1.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/errors": ^1.1.1-next.0 "@types/express": ^4.17.6 "@types/supertest": ^2.0.8 badge-maker: ^3.3.0 @@ -4096,19 +4132,19 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-badges@^0.2.33-next.2, @backstage/plugin-badges@workspace:plugins/badges": +"@backstage/plugin-badges@^0.2.33-next.3, @backstage/plugin-badges@workspace:plugins/badges": version: 0.0.0-use.local resolution: "@backstage/plugin-badges@workspace:plugins/badges" dependencies: - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/errors": ^1.1.0 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -4130,10 +4166,10 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-bazaar-backend@workspace:plugins/bazaar-backend" dependencies: - "@backstage/backend-common": ^0.15.1-next.1 - "@backstage/backend-test-utils": ^0.1.28-next.1 - "@backstage/cli": ^0.19.0-next.1 - "@backstage/config": ^1.0.1 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/backend-test-utils": ^0.1.28-next.3 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 "@types/express": ^4.17.6 express: ^4.17.1 express-promise-router: ^4.1.0 @@ -4147,14 +4183,14 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-bazaar@workspace:plugins/bazaar" dependencies: - "@backstage/catalog-client": ^1.0.5-next.0 - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.1 - "@backstage/core-components": ^0.11.1-next.1 - "@backstage/core-plugin-api": ^1.0.6-next.1 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/plugin-catalog": ^1.5.1-next.1 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 + "@backstage/catalog-client": ^1.1.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/plugin-catalog": ^1.5.1-next.3 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 "@date-io/luxon": 1.x "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -4188,14 +4224,14 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-bitrise@workspace:plugins/bitrise" dependencies: - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -4221,14 +4257,14 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-backend-module-aws@workspace:plugins/catalog-backend-module-aws" dependencies: - "@backstage/backend-common": ^0.15.1-next.1 - "@backstage/backend-tasks": ^0.3.5-next.0 - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.1 - "@backstage/config": ^1.0.1 - "@backstage/errors": ^1.1.0 - "@backstage/integration": ^1.3.1-next.0 - "@backstage/plugin-catalog-backend": ^1.4.0-next.1 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/backend-tasks": ^0.3.5-next.1 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/integration": ^1.3.1-next.2 + "@backstage/plugin-catalog-backend": ^1.4.0-next.3 "@backstage/types": ^1.0.0 "@types/lodash": ^4.14.151 aws-sdk: ^2.840.0 @@ -4245,15 +4281,15 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-backend-module-azure@workspace:plugins/catalog-backend-module-azure" dependencies: - "@backstage/backend-common": ^0.15.1-next.2 - "@backstage/backend-tasks": ^0.3.5-next.0 - "@backstage/backend-test-utils": ^0.1.28-next.2 - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/errors": ^1.1.0 - "@backstage/integration": ^1.3.1-next.1 - "@backstage/plugin-catalog-backend": ^1.4.0-next.2 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/backend-tasks": ^0.3.5-next.1 + "@backstage/backend-test-utils": ^0.1.28-next.3 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/integration": ^1.3.1-next.2 + "@backstage/plugin-catalog-backend": ^1.4.0-next.3 "@backstage/types": ^1.0.0 "@types/lodash": ^4.14.151 lodash: ^4.17.21 @@ -4268,14 +4304,14 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-backend-module-bitbucket-cloud@workspace:plugins/catalog-backend-module-bitbucket-cloud" dependencies: - "@backstage/backend-common": ^0.15.1-next.2 - "@backstage/backend-tasks": ^0.3.5-next.0 - "@backstage/backend-test-utils": ^0.1.28-next.2 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/integration": ^1.3.1-next.1 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/backend-tasks": ^0.3.5-next.1 + "@backstage/backend-test-utils": ^0.1.28-next.3 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/integration": ^1.3.1-next.2 "@backstage/plugin-bitbucket-cloud-common": ^0.1.3-next.1 - "@backstage/plugin-catalog-backend": ^1.4.0-next.2 + "@backstage/plugin-catalog-backend": ^1.4.0-next.3 msw: ^0.47.0 uuid: ^8.0.0 winston: ^3.2.1 @@ -4286,15 +4322,15 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-backend-module-bitbucket-server@workspace:plugins/catalog-backend-module-bitbucket-server" dependencies: - "@backstage/backend-common": ^0.15.1-next.2 - "@backstage/backend-tasks": ^0.3.5-next.0 - "@backstage/backend-test-utils": ^0.1.28-next.2 - "@backstage/catalog-model": ^1.0.1 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.0 - "@backstage/errors": ^1.0.0 - "@backstage/integration": ^1.3.1-next.1 - "@backstage/plugin-catalog-backend": ^1.4.0-next.2 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/backend-tasks": ^0.3.5-next.1 + "@backstage/backend-test-utils": ^0.1.28-next.3 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/integration": ^1.3.1-next.2 + "@backstage/plugin-catalog-backend": ^1.4.0-next.3 "@types/node-fetch": ^2.5.12 msw: ^0.47.0 node-fetch: ^2.6.7 @@ -4307,15 +4343,15 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-backend-module-bitbucket@workspace:plugins/catalog-backend-module-bitbucket" dependencies: - "@backstage/backend-common": ^0.15.1-next.2 - "@backstage/backend-test-utils": ^0.1.28-next.2 - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/errors": ^1.1.0 - "@backstage/integration": ^1.3.1-next.1 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/backend-test-utils": ^0.1.28-next.3 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/integration": ^1.3.1-next.2 "@backstage/plugin-bitbucket-cloud-common": ^0.1.3-next.1 - "@backstage/plugin-catalog-backend": ^1.4.0-next.2 + "@backstage/plugin-catalog-backend": ^1.4.0-next.3 "@backstage/types": ^1.0.0 "@types/lodash": ^4.14.151 lodash: ^4.17.21 @@ -4329,15 +4365,15 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-backend-module-gerrit@workspace:plugins/catalog-backend-module-gerrit" dependencies: - "@backstage/backend-common": ^0.15.1-next.2 - "@backstage/backend-tasks": ^0.3.5-next.0 - "@backstage/backend-test-utils": ^0.1.28-next.2 - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/errors": ^1.1.0 - "@backstage/integration": ^1.3.1-next.1 - "@backstage/plugin-catalog-backend": ^1.4.0-next.2 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/backend-tasks": ^0.3.5-next.1 + "@backstage/backend-test-utils": ^0.1.28-next.3 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/integration": ^1.3.1-next.2 + "@backstage/plugin-catalog-backend": ^1.4.0-next.3 "@types/fs-extra": ^9.0.1 fs-extra: 10.1.0 msw: ^0.47.0 @@ -4351,17 +4387,17 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-backend-module-github@workspace:plugins/catalog-backend-module-github" dependencies: - "@backstage/backend-common": ^0.15.1-next.2 - "@backstage/backend-plugin-api": ^0.1.2-next.1 - "@backstage/backend-tasks": ^0.3.5-next.0 - "@backstage/backend-test-utils": ^0.1.28-next.2 - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/errors": ^1.1.0 - "@backstage/integration": ^1.3.1-next.1 - "@backstage/plugin-catalog-backend": ^1.4.0-next.2 - "@backstage/plugin-catalog-node": ^1.0.2-next.1 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/backend-plugin-api": ^0.1.2-next.2 + "@backstage/backend-tasks": ^0.3.5-next.1 + "@backstage/backend-test-utils": ^0.1.28-next.3 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/integration": ^1.3.1-next.2 + "@backstage/plugin-catalog-backend": ^1.4.0-next.3 + "@backstage/plugin-catalog-node": ^1.1.0-next.2 "@backstage/types": ^1.0.0 "@octokit/graphql": ^5.0.0 "@types/lodash": ^4.14.151 @@ -4377,15 +4413,15 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-backend-module-gitlab@workspace:plugins/catalog-backend-module-gitlab" dependencies: - "@backstage/backend-common": ^0.15.1-next.2 - "@backstage/backend-tasks": ^0.3.5-next.0 - "@backstage/backend-test-utils": ^0.1.28-next.2 - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/errors": ^1.1.0 - "@backstage/integration": ^1.3.1-next.1 - "@backstage/plugin-catalog-backend": ^1.4.0-next.2 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/backend-tasks": ^0.3.5-next.1 + "@backstage/backend-test-utils": ^0.1.28-next.3 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/integration": ^1.3.1-next.2 + "@backstage/plugin-catalog-backend": ^1.4.0-next.3 "@backstage/types": ^1.0.0 "@types/lodash": ^4.14.151 "@types/uuid": ^8.0.0 @@ -4401,12 +4437,12 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-backend-module-ldap@workspace:plugins/catalog-backend-module-ldap" dependencies: - "@backstage/backend-tasks": ^0.3.5-next.0 - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.1 - "@backstage/config": ^1.0.1 - "@backstage/errors": ^1.1.0 - "@backstage/plugin-catalog-backend": ^1.4.0-next.1 + "@backstage/backend-tasks": ^0.3.5-next.1 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/plugin-catalog-backend": ^1.4.0-next.3 "@backstage/types": ^1.0.0 "@types/ldapjs": ^2.2.0 "@types/lodash": ^4.14.151 @@ -4422,13 +4458,13 @@ __metadata: resolution: "@backstage/plugin-catalog-backend-module-msgraph@workspace:plugins/catalog-backend-module-msgraph" dependencies: "@azure/identity": ^2.1.0 - "@backstage/backend-common": ^0.15.1-next.2 - "@backstage/backend-tasks": ^0.3.5-next.0 - "@backstage/backend-test-utils": ^0.1.28-next.2 - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/plugin-catalog-backend": ^1.4.0-next.2 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/backend-tasks": ^0.3.5-next.1 + "@backstage/backend-test-utils": ^0.1.28-next.3 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/plugin-catalog-backend": ^1.4.0-next.3 "@microsoft/microsoft-graph-types": ^2.6.0 "@types/lodash": ^4.14.151 "@types/node-fetch": ^2.5.12 @@ -4447,14 +4483,14 @@ __metadata: resolution: "@backstage/plugin-catalog-backend-module-openapi@workspace:plugins/catalog-backend-module-openapi" dependencies: "@apidevtools/swagger-parser": ^10.1.0 - "@backstage/backend-common": ^0.15.1-next.1 - "@backstage/backend-test-utils": ^0.1.28-next.1 - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.1 - "@backstage/config": ^1.0.1 - "@backstage/integration": ^1.3.1-next.0 - "@backstage/plugin-catalog-backend": ^1.4.0-next.1 - "@backstage/plugin-catalog-node": ^1.0.2-next.0 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/backend-test-utils": ^0.1.28-next.3 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/integration": ^1.3.1-next.2 + "@backstage/plugin-catalog-backend": ^1.4.0-next.3 + "@backstage/plugin-catalog-node": ^1.1.0-next.2 "@backstage/types": ^1.0.0 openapi-types: ^12.0.0 winston: ^3.2.1 @@ -4462,25 +4498,25 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-catalog-backend@^1.4.0-next.1, @backstage/plugin-catalog-backend@^1.4.0-next.2, @backstage/plugin-catalog-backend@workspace:plugins/catalog-backend": +"@backstage/plugin-catalog-backend@^1.4.0-next.1, @backstage/plugin-catalog-backend@^1.4.0-next.3, @backstage/plugin-catalog-backend@workspace:plugins/catalog-backend": version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-backend@workspace:plugins/catalog-backend" dependencies: - "@backstage/backend-common": ^0.15.1-next.2 - "@backstage/backend-plugin-api": ^0.1.2-next.1 - "@backstage/backend-test-utils": ^0.1.28-next.2 - "@backstage/catalog-client": ^1.0.5-next.1 - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/errors": ^1.1.0 - "@backstage/integration": ^1.3.1-next.1 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/backend-plugin-api": ^0.1.2-next.2 + "@backstage/backend-test-utils": ^0.1.28-next.3 + "@backstage/catalog-client": ^1.1.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/integration": ^1.3.1-next.2 "@backstage/plugin-catalog-common": ^1.0.6-next.0 - "@backstage/plugin-catalog-node": ^1.0.2-next.1 - "@backstage/plugin-permission-common": ^0.6.4-next.1 - "@backstage/plugin-permission-node": ^0.6.5-next.2 - "@backstage/plugin-scaffolder-common": ^1.2.0-next.0 - "@backstage/plugin-search-backend-node": 1.0.2-next.1 + "@backstage/plugin-catalog-node": ^1.1.0-next.2 + "@backstage/plugin-permission-common": ^0.6.4-next.2 + "@backstage/plugin-permission-node": ^0.6.5-next.3 + "@backstage/plugin-scaffolder-common": ^1.2.0-next.1 + "@backstage/plugin-search-backend-node": 1.0.2-next.2 "@backstage/plugin-search-common": ^1.0.1-next.0 "@backstage/types": ^1.0.0 "@types/core-js": ^2.5.4 @@ -4535,20 +4571,20 @@ __metadata: languageName: node linkType: hard -"@backstage/plugin-catalog-graph@^0.2.21-next.1, @backstage/plugin-catalog-graph@workspace:plugins/catalog-graph": +"@backstage/plugin-catalog-graph@^0.2.21-next.2, @backstage/plugin-catalog-graph@workspace:plugins/catalog-graph": version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-graph@workspace:plugins/catalog-graph" dependencies: - "@backstage/catalog-client": ^1.0.5-next.0 - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.1 - "@backstage/core-app-api": ^1.1.0-next.1 - "@backstage/core-components": ^0.11.1-next.1 - "@backstage/core-plugin-api": ^1.0.6-next.1 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/plugin-catalog": ^1.5.1-next.1 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 - "@backstage/test-utils": ^1.2.0-next.1 + "@backstage/catalog-client": ^1.1.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/plugin-catalog": ^1.5.1-next.3 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@backstage/types": ^1.0.0 "@material-ui/core": ^4.12.2 @@ -4570,14 +4606,14 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-catalog-graphql@^0.3.13-next.2, @backstage/plugin-catalog-graphql@workspace:plugins/catalog-graphql": +"@backstage/plugin-catalog-graphql@^0.3.13-next.3, @backstage/plugin-catalog-graphql@workspace:plugins/catalog-graphql": version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-graphql@workspace:plugins/catalog-graphql" dependencies: - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/types": ^1.0.0 "@graphql-codegen/cli": ^2.3.1 "@graphql-codegen/graphql-modules-preset": ^2.3.2 @@ -4595,23 +4631,23 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-catalog-import@^0.8.12-next.2, @backstage/plugin-catalog-import@workspace:plugins/catalog-import": +"@backstage/plugin-catalog-import@^0.8.12-next.3, @backstage/plugin-catalog-import@workspace:plugins/catalog-import": version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-import@workspace:plugins/catalog-import" dependencies: - "@backstage/catalog-client": ^1.0.5-next.1 - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/errors": ^1.1.0 - "@backstage/integration": ^1.3.1-next.1 - "@backstage/integration-react": ^1.1.4-next.1 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/catalog-client": ^1.1.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/integration": ^1.3.1-next.2 + "@backstage/integration-react": ^1.1.4-next.2 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.57 @@ -4635,38 +4671,38 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-catalog-node@^1.0.2-next.0, @backstage/plugin-catalog-node@^1.0.2-next.1, @backstage/plugin-catalog-node@workspace:plugins/catalog-node": +"@backstage/plugin-catalog-node@^1.1.0-next.2, @backstage/plugin-catalog-node@workspace:plugins/catalog-node": version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-node@workspace:plugins/catalog-node" dependencies: - "@backstage/backend-common": ^0.15.1-next.2 - "@backstage/backend-plugin-api": ^0.1.2-next.1 - "@backstage/backend-test-utils": ^0.1.28-next.2 - "@backstage/catalog-client": ^1.0.5-next.1 - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/errors": 1.1.0 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/backend-plugin-api": ^0.1.2-next.2 + "@backstage/backend-test-utils": ^0.1.28-next.3 + "@backstage/catalog-client": ^1.1.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/errors": 1.1.1-next.0 "@backstage/types": ^1.0.0 languageName: unknown linkType: soft -"@backstage/plugin-catalog-react@^1.1.4-next.0, @backstage/plugin-catalog-react@^1.1.4-next.1, @backstage/plugin-catalog-react@workspace:plugins/catalog-react": +"@backstage/plugin-catalog-react@^1.1.4-next.0, @backstage/plugin-catalog-react@^1.1.4-next.2, @backstage/plugin-catalog-react@workspace:plugins/catalog-react": version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-react@workspace:plugins/catalog-react" dependencies: - "@backstage/catalog-client": ^1.0.5-next.0 - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.1 - "@backstage/core-app-api": ^1.1.0-next.1 - "@backstage/core-components": ^0.11.1-next.1 - "@backstage/core-plugin-api": ^1.0.6-next.1 - "@backstage/errors": ^1.1.0 - "@backstage/integration": ^1.3.1-next.0 + "@backstage/catalog-client": ^1.1.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/integration": ^1.3.1-next.2 "@backstage/plugin-catalog-common": ^1.0.6-next.0 - "@backstage/plugin-permission-common": ^0.6.4-next.0 - "@backstage/plugin-permission-react": ^0.4.5-next.1 - "@backstage/plugin-scaffolder-common": ^1.2.0-next.0 - "@backstage/test-utils": ^1.2.0-next.1 + "@backstage/plugin-permission-common": ^0.6.4-next.2 + "@backstage/plugin-permission-react": ^0.4.5-next.2 + "@backstage/plugin-scaffolder-common": ^1.2.0-next.1 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@backstage/types": ^1.0.0 "@backstage/version-bridge": ^1.0.1 @@ -4729,25 +4765,25 @@ __metadata: languageName: node linkType: hard -"@backstage/plugin-catalog@^1.5.1-next.0, @backstage/plugin-catalog@^1.5.1-next.1, @backstage/plugin-catalog@^1.5.1-next.2, @backstage/plugin-catalog@workspace:plugins/catalog": +"@backstage/plugin-catalog@^1.5.1-next.0, @backstage/plugin-catalog@^1.5.1-next.3, @backstage/plugin-catalog@workspace:plugins/catalog": version: 0.0.0-use.local resolution: "@backstage/plugin-catalog@workspace:plugins/catalog" dependencies: - "@backstage/catalog-client": ^1.0.5-next.1 - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/errors": ^1.1.0 - "@backstage/integration-react": ^1.1.4-next.1 + "@backstage/catalog-client": ^1.1.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/integration-react": ^1.1.4-next.2 "@backstage/plugin-catalog-common": ^1.0.6-next.0 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 - "@backstage/plugin-permission-react": ^0.4.5-next.1 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 + "@backstage/plugin-permission-react": ^0.4.5-next.2 "@backstage/plugin-search-common": ^1.0.1-next.0 "@backstage/plugin-search-react": ^1.1.0-next.2 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@backstage/types": ^1.0.0 "@material-ui/core": ^4.12.2 @@ -4773,10 +4809,10 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-cicd-statistics-module-gitlab@workspace:plugins/cicd-statistics-module-gitlab" dependencies: - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.1 - "@backstage/core-plugin-api": ^1.0.6-next.1 - "@backstage/plugin-cicd-statistics": ^0.1.11-next.1 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/plugin-cicd-statistics": ^0.1.11-next.2 "@gitbeaker/browser": ^35.6.0 "@gitbeaker/core": ^35.6.0 luxon: ^3.0.0 @@ -4784,14 +4820,14 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-cicd-statistics@^0.1.11-next.1, @backstage/plugin-cicd-statistics@workspace:plugins/cicd-statistics": +"@backstage/plugin-cicd-statistics@^0.1.11-next.2, @backstage/plugin-cicd-statistics@workspace:plugins/cicd-statistics": version: 0.0.0-use.local resolution: "@backstage/plugin-cicd-statistics@workspace:plugins/cicd-statistics" dependencies: - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.1 - "@backstage/core-plugin-api": ^1.0.6-next.1 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 "@date-io/luxon": ^1.3.13 "@material-ui/core": ^4.9.13 "@material-ui/icons": ^4.11.2 @@ -4810,18 +4846,18 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-circleci@^0.3.9-next.2, @backstage/plugin-circleci@workspace:plugins/circleci": +"@backstage/plugin-circleci@^0.3.9-next.3, @backstage/plugin-circleci@workspace:plugins/circleci": version: 0.0.0-use.local resolution: "@backstage/plugin-circleci@workspace:plugins/circleci" dependencies: - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -4845,18 +4881,18 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-cloudbuild@^0.3.9-next.2, @backstage/plugin-cloudbuild@workspace:plugins/cloudbuild": +"@backstage/plugin-cloudbuild@^0.3.9-next.3, @backstage/plugin-cloudbuild@workspace:plugins/cloudbuild": version: 0.0.0-use.local resolution: "@backstage/plugin-cloudbuild@workspace:plugins/cloudbuild" dependencies: - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -4881,13 +4917,13 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-code-climate@workspace:plugins/code-climate" dependencies: - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -4909,17 +4945,17 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-code-coverage-backend@^0.2.2-next.1, @backstage/plugin-code-coverage-backend@workspace:plugins/code-coverage-backend": +"@backstage/plugin-code-coverage-backend@^0.2.2-next.2, @backstage/plugin-code-coverage-backend@workspace:plugins/code-coverage-backend": version: 0.0.0-use.local resolution: "@backstage/plugin-code-coverage-backend@workspace:plugins/code-coverage-backend" dependencies: - "@backstage/backend-common": ^0.15.1-next.2 - "@backstage/catalog-client": ^1.0.5-next.1 - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/errors": ^1.1.0 - "@backstage/integration": ^1.3.1-next.1 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/catalog-client": ^1.1.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/integration": ^1.3.1-next.2 "@types/express": ^4.17.6 "@types/express-xml-bodyparser": ^0.3.2 "@types/supertest": ^2.0.8 @@ -4936,20 +4972,20 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-code-coverage@^0.2.2-next.2, @backstage/plugin-code-coverage@workspace:plugins/code-coverage": +"@backstage/plugin-code-coverage@^0.2.2-next.3, @backstage/plugin-code-coverage@workspace:plugins/code-coverage": version: 0.0.0-use.local resolution: "@backstage/plugin-code-coverage@workspace:plugins/code-coverage" dependencies: - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/errors": ^1.1.0 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -4978,14 +5014,14 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-codescene@workspace:plugins/codescene" dependencies: - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/errors": ^1.1.0 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.9.10 "@material-ui/icons": ^4.9.1 @@ -5008,14 +5044,14 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-config-schema@workspace:plugins/config-schema" dependencies: - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/errors": ^1.1.0 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@backstage/types": ^1.0.0 "@material-ui/core": ^4.12.2 @@ -5043,19 +5079,19 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-cost-insights@^0.11.31-next.2, @backstage/plugin-cost-insights@workspace:plugins/cost-insights": +"@backstage/plugin-cost-insights@^0.11.31-next.3, @backstage/plugin-cost-insights@workspace:plugins/cost-insights": version: 0.0.0-use.local resolution: "@backstage/plugin-cost-insights@workspace:plugins/cost-insights" dependencies: - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 "@backstage/plugin-cost-insights-common": ^0.1.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -5088,17 +5124,17 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-dynatrace@^0.2.0-next.2, @backstage/plugin-dynatrace@workspace:plugins/dynatrace": +"@backstage/plugin-dynatrace@^0.2.0-next.3, @backstage/plugin-dynatrace@workspace:plugins/dynatrace": version: 0.0.0-use.local resolution: "@backstage/plugin-dynatrace@workspace:plugins/dynatrace" dependencies: - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.9.13 "@material-ui/icons": ^4.9.1 @@ -5116,14 +5152,14 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-explore-react@^0.0.21-next.2, @backstage/plugin-explore-react@workspace:plugins/explore-react": +"@backstage/plugin-explore-react@^0.0.21-next.3, @backstage/plugin-explore-react@workspace:plugins/explore-react": version: 0.0.0-use.local resolution: "@backstage/plugin-explore-react@workspace:plugins/explore-react" dependencies: - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -5133,19 +5169,19 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-explore@^0.3.40-next.2, @backstage/plugin-explore@workspace:plugins/explore": +"@backstage/plugin-explore@^0.3.40-next.3, @backstage/plugin-explore@workspace:plugins/explore": version: 0.0.0-use.local resolution: "@backstage/plugin-explore@workspace:plugins/explore" dependencies: - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 - "@backstage/plugin-explore-react": ^0.0.21-next.2 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 + "@backstage/plugin-explore-react": ^0.0.21-next.3 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -5170,13 +5206,13 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-firehydrant@workspace:plugins/firehydrant" dependencies: - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -5198,15 +5234,15 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-fossa@workspace:plugins/fossa" dependencies: - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/errors": ^1.1.0 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -5225,17 +5261,17 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-gcalendar@^0.3.5-next.2, @backstage/plugin-gcalendar@workspace:plugins/gcalendar": +"@backstage/plugin-gcalendar@^0.3.5-next.3, @backstage/plugin-gcalendar@workspace:plugins/gcalendar": version: 0.0.0-use.local resolution: "@backstage/plugin-gcalendar@workspace:plugins/gcalendar" dependencies: - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/errors": ^1.1.0 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -5261,16 +5297,16 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-gcp-projects@^0.3.28-next.2, @backstage/plugin-gcp-projects@workspace:plugins/gcp-projects": +"@backstage/plugin-gcp-projects@^0.3.28-next.3, @backstage/plugin-gcp-projects@workspace:plugins/gcp-projects": version: 0.0.0-use.local resolution: "@backstage/plugin-gcp-projects@workspace:plugins/gcp-projects" dependencies: - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -5292,13 +5328,13 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-git-release-manager@workspace:plugins/git-release-manager" dependencies: - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/integration": ^1.3.1-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/integration": ^1.3.1-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -5323,19 +5359,19 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-github-actions@^0.5.9-next.2, @backstage/plugin-github-actions@workspace:plugins/github-actions": +"@backstage/plugin-github-actions@^0.5.9-next.3, @backstage/plugin-github-actions@workspace:plugins/github-actions": version: 0.0.0-use.local resolution: "@backstage/plugin-github-actions@workspace:plugins/github-actions" dependencies: - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/integration": ^1.3.1-next.1 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/integration": ^1.3.1-next.2 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -5360,17 +5396,17 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-github-deployments@workspace:plugins/github-deployments" dependencies: - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/errors": ^1.1.0 - "@backstage/integration": ^1.3.1-next.1 - "@backstage/integration-react": ^1.1.4-next.1 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/integration": ^1.3.1-next.2 + "@backstage/integration-react": ^1.1.4-next.2 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -5393,16 +5429,16 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-github-issues@workspace:plugins/github-issues" dependencies: - "@backstage/catalog-model": ^1.0.3 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/errors": ^1.1.0 - "@backstage/integration": ^1.3.1-next.1 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/integration": ^1.3.1-next.2 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.15 "@material-ui/core": ^4.12.4 "@material-ui/icons": ^4.9.1 @@ -5427,14 +5463,14 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-github-pull-requests-board@workspace:plugins/github-pull-requests-board" dependencies: - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/integration": ^1.3.1-next.1 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/integration": ^1.3.1-next.2 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -5459,12 +5495,12 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-gitops-profiles@workspace:plugins/gitops-profiles" dependencies: - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -5482,19 +5518,19 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-gocd@^0.1.15-next.1, @backstage/plugin-gocd@workspace:plugins/gocd": +"@backstage/plugin-gocd@^0.1.15-next.2, @backstage/plugin-gocd@workspace:plugins/gocd": version: 0.0.0-use.local resolution: "@backstage/plugin-gocd@workspace:plugins/gocd" dependencies: - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/errors": ^1.1.0 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -5516,16 +5552,16 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-graphiql@^0.2.41-next.2, @backstage/plugin-graphiql@workspace:plugins/graphiql": +"@backstage/plugin-graphiql@^0.2.41-next.3, @backstage/plugin-graphiql@workspace:plugins/graphiql": version: 0.0.0-use.local resolution: "@backstage/plugin-graphiql@workspace:plugins/graphiql" dependencies: - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -5547,14 +5583,14 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-graphql-backend@^0.1.26-next.2, @backstage/plugin-graphql-backend@workspace:plugins/graphql-backend": +"@backstage/plugin-graphql-backend@^0.1.26-next.3, @backstage/plugin-graphql-backend@workspace:plugins/graphql-backend": version: 0.0.0-use.local resolution: "@backstage/plugin-graphql-backend@workspace:plugins/graphql-backend" dependencies: - "@backstage/backend-common": ^0.15.1-next.2 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/plugin-catalog-graphql": ^0.3.13-next.2 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/plugin-catalog-graphql": ^0.3.13-next.3 "@graphql-tools/schema": ^9.0.0 "@types/express": ^4.17.6 "@types/supertest": ^2.0.8 @@ -5573,20 +5609,20 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-home@^0.4.25-next.2, @backstage/plugin-home@workspace:plugins/home": +"@backstage/plugin-home@^0.4.25-next.3, @backstage/plugin-home@workspace:plugins/home": version: 0.0.0-use.local resolution: "@backstage/plugin-home@workspace:plugins/home" dependencies: - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 - "@backstage/plugin-stack-overflow": ^0.1.5-next.2 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 + "@backstage/plugin-stack-overflow": ^0.1.5-next.3 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -5634,15 +5670,15 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-ilert@workspace:plugins/ilert" dependencies: - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/errors": ^1.1.0 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@date-io/luxon": 1.x "@material-ui/core": ^4.12.2 @@ -5663,19 +5699,19 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-jenkins-backend@^0.1.26-next.2, @backstage/plugin-jenkins-backend@workspace:plugins/jenkins-backend": +"@backstage/plugin-jenkins-backend@^0.1.26-next.3, @backstage/plugin-jenkins-backend@workspace:plugins/jenkins-backend": version: 0.0.0-use.local resolution: "@backstage/plugin-jenkins-backend@workspace:plugins/jenkins-backend" dependencies: - "@backstage/backend-common": ^0.15.1-next.2 - "@backstage/catalog-client": ^1.0.5-next.1 - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/errors": ^1.1.0 - "@backstage/plugin-auth-node": ^0.2.5-next.2 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/catalog-client": ^1.1.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/plugin-auth-node": ^0.2.5-next.3 "@backstage/plugin-jenkins-common": ^0.1.8-next.0 - "@backstage/plugin-permission-common": ^0.6.4-next.1 + "@backstage/plugin-permission-common": ^0.6.4-next.2 "@types/express": ^4.17.6 "@types/jenkins": ^0.23.1 "@types/supertest": ^2.0.8 @@ -5700,20 +5736,20 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-jenkins@^0.7.8-next.2, @backstage/plugin-jenkins@workspace:plugins/jenkins": +"@backstage/plugin-jenkins@^0.7.8-next.3, @backstage/plugin-jenkins@workspace:plugins/jenkins": version: 0.0.0-use.local resolution: "@backstage/plugin-jenkins@workspace:plugins/jenkins" dependencies: - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/errors": ^1.1.0 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 "@backstage/plugin-jenkins-common": ^0.1.8-next.0 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -5734,15 +5770,15 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-kafka-backend@^0.2.29-next.0, @backstage/plugin-kafka-backend@workspace:plugins/kafka-backend": +"@backstage/plugin-kafka-backend@^0.2.29-next.1, @backstage/plugin-kafka-backend@workspace:plugins/kafka-backend": version: 0.0.0-use.local resolution: "@backstage/plugin-kafka-backend@workspace:plugins/kafka-backend" dependencies: - "@backstage/backend-common": ^0.15.1-next.1 - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.1 - "@backstage/config": ^1.0.1 - "@backstage/errors": ^1.1.0 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/errors": ^1.1.1-next.0 "@types/express": ^4.17.6 "@types/jest-when": ^3.5.0 "@types/lodash": ^4.14.151 @@ -5756,19 +5792,19 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-kafka@^0.3.9-next.2, @backstage/plugin-kafka@workspace:plugins/kafka": +"@backstage/plugin-kafka@^0.3.9-next.3, @backstage/plugin-kafka@workspace:plugins/kafka": version: 0.0.0-use.local resolution: "@backstage/plugin-kafka@workspace:plugins/kafka" dependencies: - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -5788,19 +5824,19 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-kubernetes-backend@^0.7.2-next.2, @backstage/plugin-kubernetes-backend@workspace:plugins/kubernetes-backend": +"@backstage/plugin-kubernetes-backend@^0.7.2-next.3, @backstage/plugin-kubernetes-backend@workspace:plugins/kubernetes-backend": version: 0.0.0-use.local resolution: "@backstage/plugin-kubernetes-backend@workspace:plugins/kubernetes-backend" dependencies: "@azure/identity": ^2.0.4 - "@backstage/backend-common": ^0.15.1-next.2 - "@backstage/catalog-client": ^1.0.5-next.1 - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/errors": ^1.1.0 - "@backstage/plugin-auth-node": ^0.2.5-next.2 - "@backstage/plugin-kubernetes-common": ^0.4.2-next.0 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/catalog-client": ^1.1.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/plugin-auth-node": ^0.2.5-next.3 + "@backstage/plugin-kubernetes-common": ^0.4.2-next.1 "@google-cloud/container": ^4.0.0 "@kubernetes/client-node": ^0.17.0 "@types/aws4": ^1.5.1 @@ -5825,30 +5861,30 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-kubernetes-common@^0.4.2-next.0, @backstage/plugin-kubernetes-common@workspace:plugins/kubernetes-common": +"@backstage/plugin-kubernetes-common@^0.4.2-next.1, @backstage/plugin-kubernetes-common@workspace:plugins/kubernetes-common": version: 0.0.0-use.local resolution: "@backstage/plugin-kubernetes-common@workspace:plugins/kubernetes-common" dependencies: - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.1 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 "@kubernetes/client-node": ^0.17.0 languageName: unknown linkType: soft -"@backstage/plugin-kubernetes@^0.7.2-next.2, @backstage/plugin-kubernetes@workspace:plugins/kubernetes": +"@backstage/plugin-kubernetes@^0.7.2-next.3, @backstage/plugin-kubernetes@workspace:plugins/kubernetes": version: 0.0.0-use.local resolution: "@backstage/plugin-kubernetes@workspace:plugins/kubernetes" dependencies: - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 - "@backstage/plugin-kubernetes-common": ^0.4.2-next.0 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 + "@backstage/plugin-kubernetes-common": ^0.4.2-next.1 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@kubernetes/client-node": ^0.17.0 "@material-ui/core": ^4.12.2 @@ -5873,19 +5909,19 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-lighthouse@^0.3.9-next.2, @backstage/plugin-lighthouse@workspace:plugins/lighthouse": +"@backstage/plugin-lighthouse@^0.3.9-next.3, @backstage/plugin-lighthouse@workspace:plugins/lighthouse": version: 0.0.0-use.local resolution: "@backstage/plugin-lighthouse@workspace:plugins/lighthouse" dependencies: - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -5905,17 +5941,17 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-newrelic-dashboard@^0.2.2-next.1, @backstage/plugin-newrelic-dashboard@workspace:plugins/newrelic-dashboard": +"@backstage/plugin-newrelic-dashboard@^0.2.2-next.2, @backstage/plugin-newrelic-dashboard@workspace:plugins/newrelic-dashboard": version: 0.0.0-use.local resolution: "@backstage/plugin-newrelic-dashboard@workspace:plugins/newrelic-dashboard" dependencies: - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.1 - "@backstage/core-components": ^0.11.1-next.1 - "@backstage/core-plugin-api": ^1.0.6-next.1 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/errors": ^1.1.0 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.57 @@ -5928,16 +5964,16 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-newrelic@^0.3.27-next.2, @backstage/plugin-newrelic@workspace:plugins/newrelic": +"@backstage/plugin-newrelic@^0.3.27-next.3, @backstage/plugin-newrelic@workspace:plugins/newrelic": version: 0.0.0-use.local resolution: "@backstage/plugin-newrelic@workspace:plugins/newrelic" dependencies: - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -5954,19 +5990,19 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-org@^0.5.9-next.2, @backstage/plugin-org@workspace:plugins/org": +"@backstage/plugin-org@^0.5.9-next.3, @backstage/plugin-org@workspace:plugins/org": version: 0.0.0-use.local resolution: "@backstage/plugin-org@workspace:plugins/org" dependencies: - "@backstage/catalog-client": ^1.0.5-next.1 - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/catalog-client": ^1.1.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -5988,19 +6024,19 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-pagerduty@0.5.2-next.2, @backstage/plugin-pagerduty@workspace:plugins/pagerduty": +"@backstage/plugin-pagerduty@0.5.2-next.3, @backstage/plugin-pagerduty@workspace:plugins/pagerduty": version: 0.0.0-use.local resolution: "@backstage/plugin-pagerduty@workspace:plugins/pagerduty" dependencies: - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/errors": ^1.1.0 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -6025,9 +6061,9 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-periskop-backend@workspace:plugins/periskop-backend" dependencies: - "@backstage/backend-common": ^0.15.1-next.2 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 "@types/express": "*" "@types/supertest": ^2.0.8 express: ^4.17.1 @@ -6044,15 +6080,15 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-periskop@workspace:plugins/periskop" dependencies: - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/errors": ^1.1.0 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -6072,17 +6108,17 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-permission-backend@^0.5.11-next.1, @backstage/plugin-permission-backend@workspace:plugins/permission-backend": +"@backstage/plugin-permission-backend@^0.5.11-next.2, @backstage/plugin-permission-backend@workspace:plugins/permission-backend": version: 0.0.0-use.local resolution: "@backstage/plugin-permission-backend@workspace:plugins/permission-backend" dependencies: - "@backstage/backend-common": ^0.15.1-next.2 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/errors": ^1.1.0 - "@backstage/plugin-auth-node": ^0.2.5-next.2 - "@backstage/plugin-permission-common": ^0.6.4-next.1 - "@backstage/plugin-permission-node": ^0.6.5-next.2 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/plugin-auth-node": ^0.2.5-next.3 + "@backstage/plugin-permission-common": ^0.6.4-next.2 + "@backstage/plugin-permission-node": ^0.6.5-next.3 "@types/express": "*" "@types/lodash": ^4.14.151 "@types/supertest": ^2.0.8 @@ -6099,13 +6135,13 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-permission-common@^0.6.4-next.0, @backstage/plugin-permission-common@^0.6.4-next.1, @backstage/plugin-permission-common@workspace:plugins/permission-common": +"@backstage/plugin-permission-common@^0.6.4-next.0, @backstage/plugin-permission-common@^0.6.4-next.2, @backstage/plugin-permission-common@workspace:plugins/permission-common": version: 0.0.0-use.local resolution: "@backstage/plugin-permission-common@workspace:plugins/permission-common" dependencies: - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/errors": ^1.1.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/errors": ^1.1.1-next.0 cross-fetch: ^3.1.5 msw: ^0.47.0 uuid: ^8.0.0 @@ -6126,17 +6162,17 @@ __metadata: languageName: node linkType: hard -"@backstage/plugin-permission-node@^0.6.5-next.1, @backstage/plugin-permission-node@^0.6.5-next.2, @backstage/plugin-permission-node@workspace:plugins/permission-node": +"@backstage/plugin-permission-node@^0.6.5-next.3, @backstage/plugin-permission-node@workspace:plugins/permission-node": version: 0.0.0-use.local resolution: "@backstage/plugin-permission-node@workspace:plugins/permission-node" dependencies: - "@backstage/backend-common": ^0.15.1-next.2 - "@backstage/backend-test-utils": ^0.1.28-next.2 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/errors": ^1.1.0 - "@backstage/plugin-auth-node": ^0.2.5-next.2 - "@backstage/plugin-permission-common": ^0.6.4-next.1 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/backend-test-utils": ^0.1.28-next.3 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/plugin-auth-node": ^0.2.5-next.3 + "@backstage/plugin-permission-common": ^0.6.4-next.2 "@types/express": ^4.17.6 "@types/supertest": ^2.0.8 express: ^4.17.1 @@ -6147,15 +6183,15 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-permission-react@^0.4.5-next.1, @backstage/plugin-permission-react@workspace:plugins/permission-react": +"@backstage/plugin-permission-react@^0.4.5-next.2, @backstage/plugin-permission-react@workspace:plugins/permission-react": version: 0.0.0-use.local resolution: "@backstage/plugin-permission-react@workspace:plugins/permission-react" dependencies: - "@backstage/cli": ^0.19.0-next.1 - "@backstage/config": ^1.0.1 - "@backstage/core-plugin-api": ^1.0.6-next.1 - "@backstage/plugin-permission-common": ^0.6.4-next.0 - "@backstage/test-utils": ^1.2.0-next.1 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/plugin-permission-common": ^0.6.4-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 cross-fetch: ^3.1.5 @@ -6186,13 +6222,13 @@ __metadata: languageName: node linkType: hard -"@backstage/plugin-proxy-backend@^0.2.30-next.1, @backstage/plugin-proxy-backend@workspace:plugins/proxy-backend": +"@backstage/plugin-proxy-backend@^0.2.30-next.2, @backstage/plugin-proxy-backend@workspace:plugins/proxy-backend": version: 0.0.0-use.local resolution: "@backstage/plugin-proxy-backend@workspace:plugins/proxy-backend" dependencies: - "@backstage/backend-common": ^0.15.1-next.2 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 "@types/express": ^4.17.6 "@types/http-proxy-middleware": ^0.19.3 "@types/supertest": ^2.0.8 @@ -6212,14 +6248,14 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-rollbar-backend@^0.1.33-next.2, @backstage/plugin-rollbar-backend@workspace:plugins/rollbar-backend": +"@backstage/plugin-rollbar-backend@^0.1.33-next.3, @backstage/plugin-rollbar-backend@workspace:plugins/rollbar-backend": version: 0.0.0-use.local resolution: "@backstage/plugin-rollbar-backend@workspace:plugins/rollbar-backend" dependencies: - "@backstage/backend-common": ^0.15.1-next.2 - "@backstage/backend-test-utils": ^0.1.28-next.2 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/backend-test-utils": ^0.1.28-next.3 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 "@types/express": ^4.17.6 "@types/supertest": ^2.0.8 camelcase-keys: ^7.0.1 @@ -6238,18 +6274,18 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-rollbar@^0.4.9-next.2, @backstage/plugin-rollbar@workspace:plugins/rollbar": +"@backstage/plugin-rollbar@^0.4.9-next.3, @backstage/plugin-rollbar@workspace:plugins/rollbar": version: 0.0.0-use.local resolution: "@backstage/plugin-rollbar@workspace:plugins/rollbar" dependencies: - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -6276,12 +6312,12 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-scaffolder-backend-module-cookiecutter@workspace:plugins/scaffolder-backend-module-cookiecutter" dependencies: - "@backstage/backend-common": ^0.15.1-next.2 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/errors": ^1.1.0 - "@backstage/integration": ^1.3.1-next.1 - "@backstage/plugin-scaffolder-backend": ^1.6.0-next.2 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/integration": ^1.3.1-next.2 + "@backstage/plugin-scaffolder-backend": ^1.6.0-next.3 "@backstage/types": ^1.0.0 "@types/command-exists": ^1.2.0 "@types/fs-extra": ^9.0.1 @@ -6295,16 +6331,16 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-scaffolder-backend-module-rails@^0.4.4-next.0, @backstage/plugin-scaffolder-backend-module-rails@workspace:plugins/scaffolder-backend-module-rails": +"@backstage/plugin-scaffolder-backend-module-rails@^0.4.4-next.1, @backstage/plugin-scaffolder-backend-module-rails@workspace:plugins/scaffolder-backend-module-rails": version: 0.0.0-use.local resolution: "@backstage/plugin-scaffolder-backend-module-rails@workspace:plugins/scaffolder-backend-module-rails" dependencies: - "@backstage/backend-common": ^0.15.1-next.1 - "@backstage/cli": ^0.19.0-next.1 - "@backstage/config": ^1.0.1 - "@backstage/errors": ^1.1.0 - "@backstage/integration": ^1.3.1-next.0 - "@backstage/plugin-scaffolder-backend": ^1.6.0-next.1 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/integration": ^1.3.1-next.2 + "@backstage/plugin-scaffolder-backend": ^1.6.0-next.3 "@backstage/types": ^1.0.0 "@types/command-exists": ^1.2.0 "@types/fs-extra": ^9.0.1 @@ -6321,33 +6357,33 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-scaffolder-backend-module-yeoman@workspace:plugins/scaffolder-backend-module-yeoman" dependencies: - "@backstage/backend-common": ^0.15.1-next.0 - "@backstage/cli": ^0.19.0-next.1 - "@backstage/config": ^1.0.1 - "@backstage/plugin-scaffolder-backend": ^1.6.0-next.0 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/plugin-scaffolder-backend": ^1.6.0-next.3 "@backstage/types": ^1.0.0 winston: ^3.2.1 yeoman-environment: ^3.9.1 languageName: unknown linkType: soft -"@backstage/plugin-scaffolder-backend@^1.6.0-next.0, @backstage/plugin-scaffolder-backend@^1.6.0-next.1, @backstage/plugin-scaffolder-backend@^1.6.0-next.2, @backstage/plugin-scaffolder-backend@workspace:plugins/scaffolder-backend": +"@backstage/plugin-scaffolder-backend@^1.6.0-next.1, @backstage/plugin-scaffolder-backend@^1.6.0-next.3, @backstage/plugin-scaffolder-backend@workspace:plugins/scaffolder-backend": version: 0.0.0-use.local resolution: "@backstage/plugin-scaffolder-backend@workspace:plugins/scaffolder-backend" dependencies: - "@backstage/backend-common": ^0.15.1-next.2 - "@backstage/backend-plugin-api": ^0.1.2-next.1 - "@backstage/backend-test-utils": ^0.1.28-next.2 - "@backstage/catalog-client": ^1.0.5-next.1 - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/errors": ^1.1.0 - "@backstage/integration": ^1.3.1-next.1 - "@backstage/plugin-auth-node": ^0.2.5-next.2 - "@backstage/plugin-catalog-backend": ^1.4.0-next.2 - "@backstage/plugin-catalog-node": ^1.0.2-next.1 - "@backstage/plugin-scaffolder-common": ^1.2.0-next.0 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/backend-plugin-api": ^0.1.2-next.2 + "@backstage/backend-test-utils": ^0.1.28-next.3 + "@backstage/catalog-client": ^1.1.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/integration": ^1.3.1-next.2 + "@backstage/plugin-auth-node": ^0.2.5-next.3 + "@backstage/plugin-catalog-backend": ^1.4.0-next.3 + "@backstage/plugin-catalog-node": ^1.1.0-next.2 + "@backstage/plugin-scaffolder-common": ^1.2.0-next.1 "@backstage/types": ^1.0.0 "@gitbeaker/core": ^35.6.0 "@gitbeaker/node": ^35.1.0 @@ -6395,37 +6431,37 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-scaffolder-common@^1.2.0-next.0, @backstage/plugin-scaffolder-common@workspace:plugins/scaffolder-common": +"@backstage/plugin-scaffolder-common@^1.2.0-next.1, @backstage/plugin-scaffolder-common@workspace:plugins/scaffolder-common": version: 0.0.0-use.local resolution: "@backstage/plugin-scaffolder-common@workspace:plugins/scaffolder-common" dependencies: - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.1 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 "@backstage/types": ^1.0.0 languageName: unknown linkType: soft -"@backstage/plugin-scaffolder@^1.6.0-next.2, @backstage/plugin-scaffolder@workspace:plugins/scaffolder": +"@backstage/plugin-scaffolder@^1.6.0-next.3, @backstage/plugin-scaffolder@workspace:plugins/scaffolder": version: 0.0.0-use.local resolution: "@backstage/plugin-scaffolder@workspace:plugins/scaffolder" dependencies: - "@backstage/catalog-client": ^1.0.5-next.1 - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/errors": ^1.1.0 - "@backstage/integration": ^1.3.1-next.1 - "@backstage/integration-react": ^1.1.4-next.1 - "@backstage/plugin-catalog": ^1.5.1-next.2 + "@backstage/catalog-client": ^1.1.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/integration": ^1.3.1-next.2 + "@backstage/integration-react": ^1.1.4-next.2 + "@backstage/plugin-catalog": ^1.5.1-next.3 "@backstage/plugin-catalog-common": ^1.0.6-next.0 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 - "@backstage/plugin-permission-react": ^0.4.5-next.1 - "@backstage/plugin-scaffolder-common": ^1.2.0-next.0 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 + "@backstage/plugin-permission-react": ^0.4.5-next.2 + "@backstage/plugin-scaffolder-common": ^1.2.0-next.1 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@backstage/types": ^1.0.0 "@codemirror/language": ^6.0.0 @@ -6469,14 +6505,14 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-search-backend-module-elasticsearch@^1.0.2-next.1, @backstage/plugin-search-backend-module-elasticsearch@workspace:plugins/search-backend-module-elasticsearch": +"@backstage/plugin-search-backend-module-elasticsearch@^1.0.2-next.2, @backstage/plugin-search-backend-module-elasticsearch@workspace:plugins/search-backend-module-elasticsearch": version: 0.0.0-use.local resolution: "@backstage/plugin-search-backend-module-elasticsearch@workspace:plugins/search-backend-module-elasticsearch" dependencies: - "@backstage/backend-common": ^0.15.1-next.2 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/plugin-search-backend-node": ^1.0.2-next.1 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/plugin-search-backend-node": ^1.0.2-next.2 "@backstage/plugin-search-common": ^1.0.1-next.0 "@elastic/elasticsearch": ^7.13.0 "@elastic/elasticsearch-mock": ^1.0.0 @@ -6491,15 +6527,15 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-search-backend-module-pg@^0.4.0-next.1, @backstage/plugin-search-backend-module-pg@workspace:plugins/search-backend-module-pg": +"@backstage/plugin-search-backend-module-pg@^0.4.0-next.2, @backstage/plugin-search-backend-module-pg@workspace:plugins/search-backend-module-pg": version: 0.0.0-use.local resolution: "@backstage/plugin-search-backend-module-pg@workspace:plugins/search-backend-module-pg" dependencies: - "@backstage/backend-common": ^0.15.1-next.1 - "@backstage/backend-test-utils": ^0.1.28-next.1 - "@backstage/cli": ^0.19.0-next.1 - "@backstage/config": ^1.0.1 - "@backstage/plugin-search-backend-node": ^1.0.2-next.1 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/backend-test-utils": ^0.1.28-next.3 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/plugin-search-backend-node": ^1.0.2-next.2 "@backstage/plugin-search-common": ^1.0.1-next.0 knex: ^2.0.0 lodash: ^4.17.21 @@ -6507,16 +6543,16 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-search-backend-node@1.0.2-next.1, @backstage/plugin-search-backend-node@^1.0.2-next.1, @backstage/plugin-search-backend-node@workspace:plugins/search-backend-node": +"@backstage/plugin-search-backend-node@1.0.2-next.2, @backstage/plugin-search-backend-node@^1.0.2-next.2, @backstage/plugin-search-backend-node@workspace:plugins/search-backend-node": version: 0.0.0-use.local resolution: "@backstage/plugin-search-backend-node@workspace:plugins/search-backend-node" dependencies: - "@backstage/backend-common": ^0.15.1-next.1 - "@backstage/backend-tasks": ^0.3.5-next.0 - "@backstage/cli": ^0.19.0-next.1 - "@backstage/config": ^1.0.1 - "@backstage/errors": ^1.1.0 - "@backstage/plugin-permission-common": ^0.6.4-next.0 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/backend-tasks": ^0.3.5-next.1 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/plugin-permission-common": ^0.6.4-next.2 "@backstage/plugin-search-common": ^1.0.1-next.0 "@types/lunr": ^2.3.3 "@types/ndjson": ^2.0.1 @@ -6529,18 +6565,18 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-search-backend@^1.0.2-next.0, @backstage/plugin-search-backend@workspace:plugins/search-backend": +"@backstage/plugin-search-backend@^1.0.2-next.1, @backstage/plugin-search-backend@workspace:plugins/search-backend": version: 0.0.0-use.local resolution: "@backstage/plugin-search-backend@workspace:plugins/search-backend" dependencies: - "@backstage/backend-common": ^0.15.1-next.1 - "@backstage/cli": ^0.19.0-next.1 - "@backstage/config": ^1.0.1 - "@backstage/errors": ^1.1.0 - "@backstage/plugin-auth-node": ^0.2.5-next.1 - "@backstage/plugin-permission-common": ^0.6.4-next.0 - "@backstage/plugin-permission-node": ^0.6.5-next.1 - "@backstage/plugin-search-backend-node": ^1.0.2-next.1 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/plugin-auth-node": ^0.2.5-next.3 + "@backstage/plugin-permission-common": ^0.6.4-next.2 + "@backstage/plugin-permission-node": ^0.6.5-next.3 + "@backstage/plugin-search-backend-node": ^1.0.2-next.2 "@backstage/plugin-search-common": ^1.0.1-next.0 "@backstage/types": ^1.0.0 "@types/express": ^4.17.6 @@ -6605,22 +6641,22 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-search@^1.0.2-next.2, @backstage/plugin-search@workspace:plugins/search": +"@backstage/plugin-search@^1.0.2-next.3, @backstage/plugin-search@workspace:plugins/search": version: 0.0.0-use.local resolution: "@backstage/plugin-search@workspace:plugins/search" dependencies: - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/errors": ^1.1.0 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 "@backstage/plugin-search-common": ^1.0.1-next.0 "@backstage/plugin-search-react": ^1.1.0-next.2 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@backstage/types": ^1.0.0 "@backstage/version-bridge": ^1.0.1 @@ -6644,18 +6680,18 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-sentry@^0.4.2-next.2, @backstage/plugin-sentry@workspace:plugins/sentry": +"@backstage/plugin-sentry@^0.4.2-next.3, @backstage/plugin-sentry@workspace:plugins/sentry": version: 0.0.0-use.local resolution: "@backstage/plugin-sentry@workspace:plugins/sentry" dependencies: - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-table/core": ^3.1.0 "@material-ui/core": ^4.12.2 @@ -6678,16 +6714,16 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-shortcuts@^0.3.1-next.2, @backstage/plugin-shortcuts@workspace:plugins/shortcuts": +"@backstage/plugin-shortcuts@^0.3.1-next.3, @backstage/plugin-shortcuts@workspace:plugins/shortcuts": version: 0.0.0-use.local resolution: "@backstage/plugin-shortcuts@workspace:plugins/shortcuts" dependencies: - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@backstage/types": ^1.0.0 "@material-ui/core": ^4.12.2 @@ -6714,11 +6750,11 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-sonarqube-backend@workspace:plugins/sonarqube-backend" dependencies: - "@backstage/backend-common": ^0.15.1-next.2 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/errors": ^1.1.0 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/test-utils": ^1.2.0-next.3 "@types/express": "*" "@types/supertest": ^2.0.12 express: ^4.18.1 @@ -6735,14 +6771,14 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-sonarqube@workspace:plugins/sonarqube" dependencies: - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -6765,14 +6801,14 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-splunk-on-call@workspace:plugins/splunk-on-call" dependencies: - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -6797,8 +6833,8 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-stack-overflow-backend@workspace:plugins/stack-overflow-backend" dependencies: - "@backstage/cli": ^0.19.0-next.1 - "@backstage/config": ^1.0.1 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 "@backstage/plugin-search-common": ^1.0.1-next.0 node-fetch: ^2.6.7 qs: ^6.9.4 @@ -6806,19 +6842,19 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-stack-overflow@^0.1.5-next.2, @backstage/plugin-stack-overflow@workspace:plugins/stack-overflow": +"@backstage/plugin-stack-overflow@^0.1.5-next.3, @backstage/plugin-stack-overflow@workspace:plugins/stack-overflow": version: 0.0.0-use.local resolution: "@backstage/plugin-stack-overflow@workspace:plugins/stack-overflow" dependencies: - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/plugin-home": ^0.4.25-next.2 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/plugin-home": ^0.4.25-next.3 "@backstage/plugin-search-common": ^1.0.1-next.0 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -6861,16 +6897,16 @@ __metadata: languageName: node linkType: hard -"@backstage/plugin-tech-insights-backend-module-jsonfc@^0.1.20-next.0, @backstage/plugin-tech-insights-backend-module-jsonfc@workspace:plugins/tech-insights-backend-module-jsonfc": +"@backstage/plugin-tech-insights-backend-module-jsonfc@^0.1.20-next.1, @backstage/plugin-tech-insights-backend-module-jsonfc@workspace:plugins/tech-insights-backend-module-jsonfc": version: 0.0.0-use.local resolution: "@backstage/plugin-tech-insights-backend-module-jsonfc@workspace:plugins/tech-insights-backend-module-jsonfc" dependencies: - "@backstage/backend-common": ^0.15.1-next.1 - "@backstage/cli": ^0.19.0-next.1 - "@backstage/config": ^1.0.1 - "@backstage/errors": ^1.1.0 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/errors": ^1.1.1-next.0 "@backstage/plugin-tech-insights-common": ^0.2.6 - "@backstage/plugin-tech-insights-node": ^0.3.4-next.0 + "@backstage/plugin-tech-insights-node": ^0.3.4-next.1 ajv: ^8.10.0 json-rules-engine: ^6.1.2 lodash: ^4.17.21 @@ -6879,20 +6915,20 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-tech-insights-backend@^0.5.2-next.1, @backstage/plugin-tech-insights-backend@workspace:plugins/tech-insights-backend": +"@backstage/plugin-tech-insights-backend@^0.5.2-next.2, @backstage/plugin-tech-insights-backend@workspace:plugins/tech-insights-backend": version: 0.0.0-use.local resolution: "@backstage/plugin-tech-insights-backend@workspace:plugins/tech-insights-backend" dependencies: - "@backstage/backend-common": ^0.15.1-next.1 - "@backstage/backend-tasks": ^0.3.5-next.0 - "@backstage/backend-test-utils": ^0.1.28-next.1 - "@backstage/catalog-client": ^1.0.5-next.0 - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.1 - "@backstage/config": ^1.0.1 - "@backstage/errors": ^1.1.0 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/backend-tasks": ^0.3.5-next.1 + "@backstage/backend-test-utils": ^0.1.28-next.3 + "@backstage/catalog-client": ^1.1.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/errors": ^1.1.1-next.0 "@backstage/plugin-tech-insights-common": ^0.2.6 - "@backstage/plugin-tech-insights-node": ^0.3.4-next.0 + "@backstage/plugin-tech-insights-node": ^0.3.4-next.1 "@types/express": ^4.17.6 "@types/luxon": ^3.0.0 "@types/semver": ^7.3.8 @@ -6922,14 +6958,14 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-tech-insights-node@^0.3.4-next.0, @backstage/plugin-tech-insights-node@workspace:plugins/tech-insights-node": +"@backstage/plugin-tech-insights-node@^0.3.4-next.1, @backstage/plugin-tech-insights-node@workspace:plugins/tech-insights-node": version: 0.0.0-use.local resolution: "@backstage/plugin-tech-insights-node@workspace:plugins/tech-insights-node" dependencies: - "@backstage/backend-common": ^0.15.1-next.1 - "@backstage/backend-tasks": ^0.3.5-next.0 - "@backstage/cli": ^0.19.0-next.1 - "@backstage/config": ^1.0.1 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/backend-tasks": ^0.3.5-next.1 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 "@backstage/plugin-tech-insights-common": ^0.2.6 "@backstage/types": ^1.0.0 "@types/luxon": ^3.0.0 @@ -6938,20 +6974,20 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-tech-insights@^0.3.0-next.2, @backstage/plugin-tech-insights@workspace:plugins/tech-insights": +"@backstage/plugin-tech-insights@^0.3.0-next.3, @backstage/plugin-tech-insights@workspace:plugins/tech-insights": version: 0.0.0-use.local resolution: "@backstage/plugin-tech-insights@workspace:plugins/tech-insights" dependencies: - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/errors": ^1.1.0 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 "@backstage/plugin-tech-insights-common": ^0.2.6 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@backstage/types": ^1.0.0 "@material-ui/core": ^4.12.2 @@ -6971,16 +7007,16 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-tech-radar@^0.5.16-next.2, @backstage/plugin-tech-radar@workspace:plugins/tech-radar": +"@backstage/plugin-tech-radar@^0.5.16-next.3, @backstage/plugin-tech-radar@workspace:plugins/tech-radar": version: 0.0.0-use.local resolution: "@backstage/plugin-tech-radar@workspace:plugins/tech-radar" dependencies: - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -7003,21 +7039,21 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-techdocs-addons-test-utils@^1.0.4-next.2, @backstage/plugin-techdocs-addons-test-utils@workspace:plugins/techdocs-addons-test-utils": +"@backstage/plugin-techdocs-addons-test-utils@^1.0.4-next.3, @backstage/plugin-techdocs-addons-test-utils@workspace:plugins/techdocs-addons-test-utils": version: 0.0.0-use.local resolution: "@backstage/plugin-techdocs-addons-test-utils@workspace:plugins/techdocs-addons-test-utils" dependencies: - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/integration-react": ^1.1.4-next.1 - "@backstage/plugin-catalog": ^1.5.1-next.2 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/integration-react": ^1.1.4-next.2 + "@backstage/plugin-catalog": ^1.5.1-next.3 "@backstage/plugin-search-react": ^1.1.0-next.2 - "@backstage/plugin-techdocs": ^1.3.2-next.2 - "@backstage/plugin-techdocs-react": ^1.0.4-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/plugin-techdocs": ^1.3.2-next.3 + "@backstage/plugin-techdocs-react": ^1.0.4-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.9.13 "@material-ui/icons": ^4.9.1 @@ -7038,23 +7074,23 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-techdocs-backend@^1.3.0-next.1, @backstage/plugin-techdocs-backend@workspace:plugins/techdocs-backend": +"@backstage/plugin-techdocs-backend@^1.3.0-next.2, @backstage/plugin-techdocs-backend@workspace:plugins/techdocs-backend": version: 0.0.0-use.local resolution: "@backstage/plugin-techdocs-backend@workspace:plugins/techdocs-backend" dependencies: - "@backstage/backend-common": ^0.15.1-next.2 - "@backstage/backend-test-utils": ^0.1.28-next.2 - "@backstage/catalog-client": ^1.0.5-next.1 - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/errors": ^1.1.0 - "@backstage/integration": ^1.3.1-next.1 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/backend-test-utils": ^0.1.28-next.3 + "@backstage/catalog-client": ^1.1.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/integration": ^1.3.1-next.2 "@backstage/plugin-catalog-common": ^1.0.6-next.0 - "@backstage/plugin-permission-common": ^0.6.4-next.1 - "@backstage/plugin-search-backend-node": 1.0.2-next.1 + "@backstage/plugin-permission-common": ^0.6.4-next.2 + "@backstage/plugin-search-backend-node": 1.0.2-next.2 "@backstage/plugin-search-common": ^1.0.1-next.0 - "@backstage/plugin-techdocs-node": ^1.4.0-next.1 + "@backstage/plugin-techdocs-node": ^1.4.0-next.2 "@types/dockerode": ^3.3.0 "@types/express": ^4.17.6 dockerode: ^3.3.1 @@ -7071,20 +7107,20 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-techdocs-module-addons-contrib@^1.0.4-next.1, @backstage/plugin-techdocs-module-addons-contrib@workspace:plugins/techdocs-module-addons-contrib": +"@backstage/plugin-techdocs-module-addons-contrib@^1.0.4-next.2, @backstage/plugin-techdocs-module-addons-contrib@workspace:plugins/techdocs-module-addons-contrib": version: 0.0.0-use.local resolution: "@backstage/plugin-techdocs-module-addons-contrib@workspace:plugins/techdocs-module-addons-contrib" dependencies: - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/integration": ^1.3.1-next.1 - "@backstage/integration-react": ^1.1.4-next.1 - "@backstage/plugin-techdocs-addons-test-utils": ^1.0.4-next.2 - "@backstage/plugin-techdocs-react": ^1.0.4-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/integration": ^1.3.1-next.2 + "@backstage/integration-react": ^1.1.4-next.2 + "@backstage/plugin-techdocs-addons-test-utils": ^1.0.4-next.3 + "@backstage/plugin-techdocs-react": ^1.0.4-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.9.13 "@material-ui/icons": ^4.9.1 @@ -7104,18 +7140,18 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-techdocs-node@^1.4.0-next.1, @backstage/plugin-techdocs-node@workspace:plugins/techdocs-node": +"@backstage/plugin-techdocs-node@^1.4.0-next.2, @backstage/plugin-techdocs-node@workspace:plugins/techdocs-node": version: 0.0.0-use.local resolution: "@backstage/plugin-techdocs-node@workspace:plugins/techdocs-node" dependencies: "@azure/identity": ^2.0.1 "@azure/storage-blob": ^12.5.0 - "@backstage/backend-common": ^0.15.1-next.2 - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/errors": ^1.1.0 - "@backstage/integration": ^1.3.1-next.1 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/integration": ^1.3.1-next.2 "@backstage/plugin-search-common": ^1.0.1-next.0 "@google-cloud/storage": ^6.0.0 "@trendyol-js/openstack-swift-sdk": ^0.0.5 @@ -7141,16 +7177,16 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-techdocs-react@^1.0.4-next.1, @backstage/plugin-techdocs-react@workspace:plugins/techdocs-react": +"@backstage/plugin-techdocs-react@^1.0.4-next.2, @backstage/plugin-techdocs-react@workspace:plugins/techdocs-react": version: 0.0.0-use.local resolution: "@backstage/plugin-techdocs-react@workspace:plugins/techdocs-react" dependencies: - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.1 - "@backstage/config": ^1.0.1 - "@backstage/core-components": ^0.11.1-next.1 - "@backstage/core-plugin-api": ^1.0.6-next.1 - "@backstage/test-utils": ^1.2.0-next.1 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@backstage/version-bridge": ^1.0.1 "@material-ui/core": ^4.12.2 @@ -7170,25 +7206,25 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-techdocs@^1.3.2-next.1, @backstage/plugin-techdocs@^1.3.2-next.2, @backstage/plugin-techdocs@workspace:plugins/techdocs": +"@backstage/plugin-techdocs@^1.3.2-next.3, @backstage/plugin-techdocs@workspace:plugins/techdocs": version: 0.0.0-use.local resolution: "@backstage/plugin-techdocs@workspace:plugins/techdocs" dependencies: - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/errors": ^1.1.0 - "@backstage/integration": ^1.3.1-next.1 - "@backstage/integration-react": ^1.1.4-next.1 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/integration": ^1.3.1-next.2 + "@backstage/integration-react": ^1.1.4-next.2 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 "@backstage/plugin-search-common": ^1.0.1-next.0 "@backstage/plugin-search-react": ^1.1.0-next.2 - "@backstage/plugin-techdocs-react": ^1.0.4-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/plugin-techdocs-react": ^1.0.4-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -7220,17 +7256,17 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-todo-backend@^0.1.33-next.1, @backstage/plugin-todo-backend@workspace:plugins/todo-backend": +"@backstage/plugin-todo-backend@^0.1.33-next.2, @backstage/plugin-todo-backend@workspace:plugins/todo-backend": version: 0.0.0-use.local resolution: "@backstage/plugin-todo-backend@workspace:plugins/todo-backend" dependencies: - "@backstage/backend-common": ^0.15.1-next.2 - "@backstage/catalog-client": ^1.0.5-next.1 - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/errors": ^1.1.0 - "@backstage/integration": ^1.3.1-next.1 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/catalog-client": ^1.1.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/integration": ^1.3.1-next.2 "@types/express": ^4.17.6 "@types/supertest": ^2.0.8 express: ^4.17.1 @@ -7243,19 +7279,19 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-todo@^0.2.11-next.2, @backstage/plugin-todo@workspace:plugins/todo": +"@backstage/plugin-todo@^0.2.11-next.3, @backstage/plugin-todo@workspace:plugins/todo": version: 0.0.0-use.local resolution: "@backstage/plugin-todo@workspace:plugins/todo" dependencies: - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/errors": ^1.1.0 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -7273,16 +7309,16 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-user-settings@^0.4.8-next.2, @backstage/plugin-user-settings@workspace:plugins/user-settings": +"@backstage/plugin-user-settings@^0.4.8-next.3, @backstage/plugin-user-settings@workspace:plugins/user-settings": version: 0.0.0-use.local resolution: "@backstage/plugin-user-settings@workspace:plugins/user-settings" dependencies: - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -7305,12 +7341,12 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-vault-backend@workspace:plugins/vault-backend" dependencies: - "@backstage/backend-common": ^0.15.1-next.2 - "@backstage/backend-tasks": ^0.3.5-next.0 - "@backstage/backend-test-utils": ^0.1.28-next.2 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/errors": ^1.1.0 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/backend-tasks": ^0.3.5-next.1 + "@backstage/backend-test-utils": ^0.1.28-next.3 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/errors": ^1.1.1-next.0 "@types/compression": ^1.7.2 "@types/express": "*" "@types/supertest": ^2.0.8 @@ -7332,15 +7368,15 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-vault@workspace:plugins/vault" dependencies: - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/errors": ^1.1.0 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -7361,13 +7397,13 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-xcmetrics@workspace:plugins/xcmetrics" dependencies: - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/errors": ^1.1.0 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -7388,28 +7424,28 @@ __metadata: languageName: unknown linkType: soft -"@backstage/release-manifests@^0.0.6-next.1, @backstage/release-manifests@workspace:packages/release-manifests": +"@backstage/release-manifests@^0.0.6-next.2, @backstage/release-manifests@workspace:packages/release-manifests": version: 0.0.0-use.local resolution: "@backstage/release-manifests@workspace:packages/release-manifests" dependencies: - "@backstage/cli": ^0.19.0-next.2 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/test-utils": ^1.2.0-next.3 "@types/node": ^16.0.0 cross-fetch: ^3.1.5 msw: ^0.47.0 languageName: unknown linkType: soft -"@backstage/test-utils@^1.2.0-next.1, @backstage/test-utils@^1.2.0-next.2, @backstage/test-utils@workspace:packages/test-utils": +"@backstage/test-utils@^1.2.0-next.1, @backstage/test-utils@^1.2.0-next.2, @backstage/test-utils@^1.2.0-next.3, @backstage/test-utils@workspace:packages/test-utils": version: 0.0.0-use.local resolution: "@backstage/test-utils@workspace:packages/test-utils" dependencies: - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/plugin-permission-common": ^0.6.4-next.1 - "@backstage/plugin-permission-react": ^0.4.5-next.1 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/plugin-permission-common": ^0.6.4-next.2 + "@backstage/plugin-permission-react": ^0.4.5-next.2 "@backstage/theme": ^0.2.16 "@backstage/types": ^1.0.0 "@material-ui/core": ^4.12.2 @@ -9105,11 +9141,11 @@ __metadata: version: 0.0.0-use.local resolution: "@internal/plugin-todo-list-backend@workspace:plugins/example-todo-list-backend" dependencies: - "@backstage/backend-common": ^0.15.1-next.1 - "@backstage/cli": ^0.19.0-next.1 - "@backstage/config": ^1.0.1 - "@backstage/errors": ^1.1.0 - "@backstage/plugin-auth-node": ^0.2.5-next.1 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/errors": ^1.1.1-next.0 + "@backstage/plugin-auth-node": ^0.2.5-next.3 "@types/express": ^4.17.6 "@types/supertest": ^2.0.8 "@types/uuid": ^8.0.0 @@ -13274,12 +13310,12 @@ __metadata: version: 0.0.0-use.local resolution: "@techdocs/cli@workspace:packages/techdocs-cli" dependencies: - "@backstage/backend-common": ^0.15.1-next.2 - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/cli-common": ^0.1.9 - "@backstage/config": ^1.0.1 - "@backstage/plugin-techdocs-node": ^1.4.0-next.1 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/cli-common": ^0.1.10-next.0 + "@backstage/config": ^1.0.2-next.0 + "@backstage/plugin-techdocs-node": ^1.4.0-next.2 "@types/commander": ^2.12.2 "@types/dockerode": ^3.3.0 "@types/fs-extra": ^9.0.6 @@ -21170,9 +21206,9 @@ __metadata: version: 0.0.0-use.local resolution: "e2e-test@workspace:packages/e2e-test" dependencies: - "@backstage/cli": ^0.19.0-next.1 - "@backstage/cli-common": ^0.1.9-next.0 - "@backstage/errors": ^1.1.0-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/cli-common": ^0.1.10-next.0 + "@backstage/errors": ^1.1.1-next.0 "@types/fs-extra": ^9.0.1 "@types/node": ^16.11.26 "@types/puppeteer": ^5.4.4 @@ -22395,60 +22431,60 @@ __metadata: version: 0.0.0-use.local resolution: "example-app@workspace:packages/app" dependencies: - "@backstage/app-defaults": ^1.0.6-next.1 - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/integration-react": ^1.1.4-next.1 - "@backstage/plugin-airbrake": ^0.3.9-next.2 - "@backstage/plugin-apache-airflow": ^0.2.2-next.2 - "@backstage/plugin-api-docs": ^0.8.9-next.2 - "@backstage/plugin-azure-devops": ^0.2.0-next.2 - "@backstage/plugin-badges": ^0.2.33-next.2 + "@backstage/app-defaults": ^1.0.6-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/integration-react": ^1.1.4-next.2 + "@backstage/plugin-airbrake": ^0.3.9-next.3 + "@backstage/plugin-apache-airflow": ^0.2.2-next.3 + "@backstage/plugin-api-docs": ^0.8.9-next.3 + "@backstage/plugin-azure-devops": ^0.2.0-next.3 + "@backstage/plugin-badges": ^0.2.33-next.3 "@backstage/plugin-catalog-common": ^1.0.6-next.0 - "@backstage/plugin-catalog-graph": ^0.2.21-next.1 - "@backstage/plugin-catalog-import": ^0.8.12-next.2 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 - "@backstage/plugin-circleci": ^0.3.9-next.2 - "@backstage/plugin-cloudbuild": ^0.3.9-next.2 - "@backstage/plugin-code-coverage": ^0.2.2-next.2 - "@backstage/plugin-cost-insights": ^0.11.31-next.2 - "@backstage/plugin-dynatrace": ^0.2.0-next.2 - "@backstage/plugin-explore": ^0.3.40-next.2 - "@backstage/plugin-gcalendar": ^0.3.5-next.2 - "@backstage/plugin-gcp-projects": ^0.3.28-next.2 - "@backstage/plugin-github-actions": ^0.5.9-next.2 - "@backstage/plugin-gocd": ^0.1.15-next.1 - "@backstage/plugin-graphiql": ^0.2.41-next.2 - "@backstage/plugin-home": ^0.4.25-next.2 - "@backstage/plugin-jenkins": ^0.7.8-next.2 - "@backstage/plugin-kafka": ^0.3.9-next.2 - "@backstage/plugin-kubernetes": ^0.7.2-next.2 - "@backstage/plugin-lighthouse": ^0.3.9-next.2 - "@backstage/plugin-newrelic": ^0.3.27-next.2 - "@backstage/plugin-newrelic-dashboard": ^0.2.2-next.1 - "@backstage/plugin-org": ^0.5.9-next.2 - "@backstage/plugin-pagerduty": 0.5.2-next.2 - "@backstage/plugin-permission-react": ^0.4.5-next.1 - "@backstage/plugin-rollbar": ^0.4.9-next.2 - "@backstage/plugin-scaffolder": ^1.6.0-next.2 - "@backstage/plugin-search": ^1.0.2-next.2 + "@backstage/plugin-catalog-graph": ^0.2.21-next.2 + "@backstage/plugin-catalog-import": ^0.8.12-next.3 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 + "@backstage/plugin-circleci": ^0.3.9-next.3 + "@backstage/plugin-cloudbuild": ^0.3.9-next.3 + "@backstage/plugin-code-coverage": ^0.2.2-next.3 + "@backstage/plugin-cost-insights": ^0.11.31-next.3 + "@backstage/plugin-dynatrace": ^0.2.0-next.3 + "@backstage/plugin-explore": ^0.3.40-next.3 + "@backstage/plugin-gcalendar": ^0.3.5-next.3 + "@backstage/plugin-gcp-projects": ^0.3.28-next.3 + "@backstage/plugin-github-actions": ^0.5.9-next.3 + "@backstage/plugin-gocd": ^0.1.15-next.2 + "@backstage/plugin-graphiql": ^0.2.41-next.3 + "@backstage/plugin-home": ^0.4.25-next.3 + "@backstage/plugin-jenkins": ^0.7.8-next.3 + "@backstage/plugin-kafka": ^0.3.9-next.3 + "@backstage/plugin-kubernetes": ^0.7.2-next.3 + "@backstage/plugin-lighthouse": ^0.3.9-next.3 + "@backstage/plugin-newrelic": ^0.3.27-next.3 + "@backstage/plugin-newrelic-dashboard": ^0.2.2-next.2 + "@backstage/plugin-org": ^0.5.9-next.3 + "@backstage/plugin-pagerduty": 0.5.2-next.3 + "@backstage/plugin-permission-react": ^0.4.5-next.2 + "@backstage/plugin-rollbar": ^0.4.9-next.3 + "@backstage/plugin-scaffolder": ^1.6.0-next.3 + "@backstage/plugin-search": ^1.0.2-next.3 "@backstage/plugin-search-common": ^1.0.1-next.0 "@backstage/plugin-search-react": ^1.1.0-next.2 - "@backstage/plugin-sentry": ^0.4.2-next.2 - "@backstage/plugin-shortcuts": ^0.3.1-next.2 - "@backstage/plugin-stack-overflow": ^0.1.5-next.2 - "@backstage/plugin-tech-insights": ^0.3.0-next.2 - "@backstage/plugin-tech-radar": ^0.5.16-next.2 - "@backstage/plugin-techdocs": ^1.3.2-next.2 - "@backstage/plugin-techdocs-module-addons-contrib": ^1.0.4-next.1 - "@backstage/plugin-techdocs-react": ^1.0.4-next.1 - "@backstage/plugin-todo": ^0.2.11-next.2 - "@backstage/plugin-user-settings": ^0.4.8-next.2 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/plugin-sentry": ^0.4.2-next.3 + "@backstage/plugin-shortcuts": ^0.3.1-next.3 + "@backstage/plugin-stack-overflow": ^0.1.5-next.3 + "@backstage/plugin-tech-insights": ^0.3.0-next.3 + "@backstage/plugin-tech-radar": ^0.5.16-next.3 + "@backstage/plugin-techdocs": ^1.3.2-next.3 + "@backstage/plugin-techdocs-module-addons-contrib": ^1.0.4-next.2 + "@backstage/plugin-techdocs-react": ^1.0.4-next.2 + "@backstage/plugin-todo": ^0.2.11-next.3 + "@backstage/plugin-user-settings": ^0.4.8-next.3 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@internal/plugin-catalog-customized": 0.0.2-next.0 "@material-ui/core": ^4.12.2 @@ -22499,41 +22535,41 @@ __metadata: version: 0.0.0-use.local resolution: "example-backend@workspace:packages/backend" dependencies: - "@backstage/backend-common": ^0.15.1-next.2 - "@backstage/backend-tasks": ^0.3.5-next.0 - "@backstage/catalog-client": ^1.0.5-next.1 - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.1 - "@backstage/integration": ^1.3.1-next.1 - "@backstage/plugin-app-backend": ^0.3.36-next.2 - "@backstage/plugin-auth-backend": ^0.16.0-next.2 - "@backstage/plugin-auth-node": ^0.2.5-next.2 - "@backstage/plugin-azure-devops-backend": ^0.3.15-next.1 - "@backstage/plugin-badges-backend": ^0.1.30-next.0 - "@backstage/plugin-catalog-backend": ^1.4.0-next.2 - "@backstage/plugin-code-coverage-backend": ^0.2.2-next.1 - "@backstage/plugin-graphql-backend": ^0.1.26-next.2 - "@backstage/plugin-jenkins-backend": ^0.1.26-next.2 - "@backstage/plugin-kafka-backend": ^0.2.29-next.0 - "@backstage/plugin-kubernetes-backend": ^0.7.2-next.2 - "@backstage/plugin-permission-backend": ^0.5.11-next.1 - "@backstage/plugin-permission-common": ^0.6.4-next.1 - "@backstage/plugin-permission-node": ^0.6.5-next.2 - "@backstage/plugin-proxy-backend": ^0.2.30-next.1 - "@backstage/plugin-rollbar-backend": ^0.1.33-next.2 - "@backstage/plugin-scaffolder-backend": ^1.6.0-next.2 - "@backstage/plugin-scaffolder-backend-module-rails": ^0.4.4-next.0 - "@backstage/plugin-search-backend": ^1.0.2-next.0 - "@backstage/plugin-search-backend-module-elasticsearch": ^1.0.2-next.1 - "@backstage/plugin-search-backend-module-pg": ^0.4.0-next.1 - "@backstage/plugin-search-backend-node": ^1.0.2-next.1 + "@backstage/backend-common": ^0.15.1-next.3 + "@backstage/backend-tasks": ^0.3.5-next.1 + "@backstage/catalog-client": ^1.1.0-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/integration": ^1.3.1-next.2 + "@backstage/plugin-app-backend": ^0.3.36-next.3 + "@backstage/plugin-auth-backend": ^0.16.0-next.3 + "@backstage/plugin-auth-node": ^0.2.5-next.3 + "@backstage/plugin-azure-devops-backend": ^0.3.15-next.2 + "@backstage/plugin-badges-backend": ^0.1.30-next.1 + "@backstage/plugin-catalog-backend": ^1.4.0-next.3 + "@backstage/plugin-code-coverage-backend": ^0.2.2-next.2 + "@backstage/plugin-graphql-backend": ^0.1.26-next.3 + "@backstage/plugin-jenkins-backend": ^0.1.26-next.3 + "@backstage/plugin-kafka-backend": ^0.2.29-next.1 + "@backstage/plugin-kubernetes-backend": ^0.7.2-next.3 + "@backstage/plugin-permission-backend": ^0.5.11-next.2 + "@backstage/plugin-permission-common": ^0.6.4-next.2 + "@backstage/plugin-permission-node": ^0.6.5-next.3 + "@backstage/plugin-proxy-backend": ^0.2.30-next.2 + "@backstage/plugin-rollbar-backend": ^0.1.33-next.3 + "@backstage/plugin-scaffolder-backend": ^1.6.0-next.3 + "@backstage/plugin-scaffolder-backend-module-rails": ^0.4.4-next.1 + "@backstage/plugin-search-backend": ^1.0.2-next.1 + "@backstage/plugin-search-backend-module-elasticsearch": ^1.0.2-next.2 + "@backstage/plugin-search-backend-module-pg": ^0.4.0-next.2 + "@backstage/plugin-search-backend-node": ^1.0.2-next.2 "@backstage/plugin-search-common": ^1.0.1-next.0 - "@backstage/plugin-tech-insights-backend": ^0.5.2-next.1 - "@backstage/plugin-tech-insights-backend-module-jsonfc": ^0.1.20-next.0 - "@backstage/plugin-tech-insights-node": ^0.3.4-next.0 - "@backstage/plugin-techdocs-backend": ^1.3.0-next.1 - "@backstage/plugin-todo-backend": ^0.1.33-next.1 + "@backstage/plugin-tech-insights-backend": ^0.5.2-next.2 + "@backstage/plugin-tech-insights-backend-module-jsonfc": ^0.1.20-next.1 + "@backstage/plugin-tech-insights-node": ^0.3.4-next.1 + "@backstage/plugin-techdocs-backend": ^1.3.0-next.2 + "@backstage/plugin-todo-backend": ^0.1.33-next.2 "@gitbeaker/node": ^35.1.0 "@octokit/rest": ^19.0.3 "@types/dockerode": ^3.3.0 @@ -38179,18 +38215,18 @@ __metadata: version: 0.0.0-use.local resolution: "techdocs-cli-embedded-app@workspace:packages/techdocs-cli-embedded-app" dependencies: - "@backstage/app-defaults": ^1.0.6-next.1 - "@backstage/catalog-model": ^1.1.0 - "@backstage/cli": ^0.19.0-next.1 - "@backstage/config": ^1.0.1 - "@backstage/core-app-api": ^1.1.0-next.1 - "@backstage/core-components": ^0.11.1-next.1 - "@backstage/core-plugin-api": ^1.0.6-next.1 - "@backstage/integration-react": ^1.1.4-next.0 - "@backstage/plugin-catalog": ^1.5.1-next.1 - "@backstage/plugin-techdocs": ^1.3.2-next.1 - "@backstage/plugin-techdocs-react": ^1.0.4-next.1 - "@backstage/test-utils": ^1.2.0-next.1 + "@backstage/app-defaults": ^1.0.6-next.2 + "@backstage/catalog-model": ^1.1.1-next.0 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/config": ^1.0.2-next.0 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/integration-react": ^1.1.4-next.2 + "@backstage/plugin-catalog": ^1.5.1-next.3 + "@backstage/plugin-techdocs": ^1.3.2-next.3 + "@backstage/plugin-techdocs-react": ^1.0.4-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.11.0 "@material-ui/icons": ^4.9.1 From f4a58d3a363a4635077d003305ca9bff7139cb0e Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Tue, 13 Sep 2022 17:52:56 -0400 Subject: [PATCH 110/110] codemods: fix pre/postpack Signed-off-by: Patrik Oldsberg --- packages/codemods/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/codemods/package.json b/packages/codemods/package.json index 69720ab0a2..b95478b326 100644 --- a/packages/codemods/package.json +++ b/packages/codemods/package.json @@ -25,8 +25,8 @@ "build": "backstage-cli package build", "lint": "backstage-cli package lint", "test": "backstage-cli package test", - "prepack": "backstage-cli prepack", - "postpack": "backstage-cli postpack", + "prepack": "backstage-cli package prepack", + "postpack": "backstage-cli package postpack", "clean": "backstage-cli package clean" }, "bin": {