From 2a40cd46a8eca9b6af94892596845da13d2db8e3 Mon Sep 17 00:00:00 2001 From: raffitamizian Date: Fri, 8 Sep 2023 14:43:18 +0100 Subject: [PATCH 001/227] Exposes the useRedisSets config option for keyv redis Signed-off-by: raffitamizian --- .changeset/small-avocados-live.md | 5 ++ docs/overview/architecture-overview.md | 3 + .../src/cache/CacheManager.test.ts | 78 +++++++++++++------ .../backend-common/src/cache/CacheManager.ts | 14 +++- 4 files changed, 77 insertions(+), 23 deletions(-) create mode 100644 .changeset/small-avocados-live.md diff --git a/.changeset/small-avocados-live.md b/.changeset/small-avocados-live.md new file mode 100644 index 0000000000..ddb01a9dfa --- /dev/null +++ b/.changeset/small-avocados-live.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-common': patch +--- + +Adds the optional flag for useRedisSets for the Redis cache to the config. diff --git a/docs/overview/architecture-overview.md b/docs/overview/architecture-overview.md index 3ba3f4ba0b..f975baf1e1 100644 --- a/docs/overview/architecture-overview.md +++ b/docs/overview/architecture-overview.md @@ -323,8 +323,11 @@ backend: cache: store: redis connection: redis://user:pass@cache.example.com:6379 + useRedisSets: true ``` +The useRedisSets flag is explained [here](https://github.com/jaredwray/keyv/tree/main/packages/redis#useredissets). + Contributions supporting other cache stores are welcome! ## Containerization diff --git a/packages/backend-common/src/cache/CacheManager.test.ts b/packages/backend-common/src/cache/CacheManager.test.ts index 4578d4fed9..13a4a0d599 100644 --- a/packages/backend-common/src/cache/CacheManager.test.ts +++ b/packages/backend-common/src/cache/CacheManager.test.ts @@ -48,8 +48,10 @@ describe('CacheManager', () => { describe('CacheManager.fromConfig', () => { it('accesses the backend.cache key', () => { const getOptionalString = jest.fn(); + const getOptionalBoolean = jest.fn(); const config = defaultConfig(); config.getOptionalString = getOptionalString; + config.getOptionalBoolean = getOptionalBoolean; CacheManager.fromConfig(config); @@ -57,6 +59,9 @@ describe('CacheManager', () => { expect(getOptionalString.mock.calls[1][0]).toEqual( 'backend.cache.connection', ); + expect(getOptionalBoolean.mock.calls[0][0]).toEqual( + 'backend.cache.useRedisSets', + ); }); it('does not require the backend.cache key', () => { @@ -195,32 +200,61 @@ describe('CacheManager', () => { const mockMemcacheCalls = memcache.mock.calls.splice(-1); expect(mockMemcacheCalls[0][0]).toEqual(expectedHost); }); - }); - it('returns a Redis client when configured', () => { - const redisConnection = 'redis://127.0.0.1:6379'; - const manager = CacheManager.fromConfig( - new ConfigReader({ - backend: { - cache: { - store: 'redis', - connection: redisConnection, + it('returns a Redis client when configured', () => { + const redisConnection = 'redis://127.0.0.1:6379'; + const manager = CacheManager.fromConfig( + new ConfigReader({ + backend: { + cache: { + store: 'redis', + connection: redisConnection, + }, }, - }, - }), - ); - const expectedTtl = 3600; - manager.forPlugin('test').getClient({ defaultTtl: expectedTtl }); + }), + ); + const expectedTtl = 3600; + manager.forPlugin('test').getClient({ defaultTtl: expectedTtl }); - const cache = Keyv as unknown as jest.Mock; - const mockCacheCalls = cache.mock.calls.splice(-1); - expect(mockCacheCalls[0][0]).toMatchObject({ - ttl: expectedTtl, + const cache = Keyv as unknown as jest.Mock; + const mockCacheCalls = cache.mock.calls.splice(-1); + expect(mockCacheCalls[0][0]).toMatchObject({ + ttl: expectedTtl, + }); + expect(mockCacheCalls[0][0].store).toBeInstanceOf(KeyvRedis); + const redis = KeyvRedis as unknown as jest.Mock; + const mockRedisCalls = redis.mock.calls.splice(-1); + expect(mockRedisCalls[0][0]).toEqual(redisConnection); + }); + + it('returns a Redis client when configured with useRedisSets flag', () => { + const redisConnection = 'redis://127.0.0.1:6379'; + const useRedisSets = false; + const manager = CacheManager.fromConfig( + new ConfigReader({ + backend: { + cache: { + store: 'redis', + connection: redisConnection, + useRedisSets: useRedisSets, + }, + }, + }), + ); + const expectedTtl = 3600; + manager.forPlugin('test').getClient({ defaultTtl: expectedTtl }); + + const cache = Keyv as unknown as jest.Mock; + const mockCacheCalls = cache.mock.calls.splice(-1); + expect(mockCacheCalls[0][0]).toMatchObject({ + ttl: expectedTtl, + useRedisSets: useRedisSets, + }); + expect(mockCacheCalls[0][0].store).toBeInstanceOf(KeyvRedis); + const redis = KeyvRedis as unknown as jest.Mock; + const mockRedisCalls = redis.mock.calls.splice(-1); + expect(mockRedisCalls[0][0]).toEqual(redisConnection); }); - expect(mockCacheCalls[0][0].store).toBeInstanceOf(KeyvRedis); - const redis = KeyvRedis as unknown as jest.Mock; - const mockRedisCalls = redis.mock.calls.splice(-1); - expect(mockRedisCalls[0][0]).toEqual(redisConnection); }); describe('connection errors', () => { diff --git a/packages/backend-common/src/cache/CacheManager.ts b/packages/backend-common/src/cache/CacheManager.ts index 9101445b08..efaaf04e3a 100644 --- a/packages/backend-common/src/cache/CacheManager.ts +++ b/packages/backend-common/src/cache/CacheManager.ts @@ -55,6 +55,7 @@ export class CacheManager { private readonly logger: LoggerService; private readonly store: keyof CacheManager['storeFactories']; private readonly connection: string; + private readonly useRedisSets: boolean; private readonly errorHandler: CacheManagerOptions['onError']; /** @@ -72,15 +73,24 @@ export class CacheManager { const store = config.getOptionalString('backend.cache.store') || 'memory'; const connectionString = config.getOptionalString('backend.cache.connection') || ''; + const useRedisSets = + config.getOptionalBoolean('backend.cache.useRedisSets') ?? true; const logger = (options.logger || getRootLogger()).child({ type: 'cacheManager', }); - return new CacheManager(store, connectionString, logger, options.onError); + return new CacheManager( + store, + connectionString, + useRedisSets, + logger, + options.onError, + ); } private constructor( store: string, connectionString: string, + useRedisSets: boolean, logger: LoggerService, errorHandler: CacheManagerOptions['onError'], ) { @@ -90,6 +100,7 @@ export class CacheManager { this.logger = logger; this.store = store as keyof CacheManager['storeFactories']; this.connection = connectionString; + this.useRedisSets = useRedisSets; this.errorHandler = errorHandler; } @@ -143,6 +154,7 @@ export class CacheManager { namespace: pluginId, ttl: defaultTtl, store: new KeyvRedis(this.connection), + useRedisSets: this.useRedisSets, }); } From 831c6c711f5949b86a27d9f169cd945fdbd4de10 Mon Sep 17 00:00:00 2001 From: Abhay-soni-developer Date: Mon, 11 Sep 2023 19:54:31 +0530 Subject: [PATCH 002/227] jenkins JobRunTable added Signed-off-by: Abhay-soni-developer --- .../app/src/components/catalog/EntityPage.tsx | 4 + .../jenkins-backend/src/service/jenkinsApi.ts | 21 ++ plugins/jenkins-backend/src/service/router.ts | 26 +++ plugins/jenkins/src/api/JenkinsApi.ts | 52 +++++ .../components/JobRunsTable/JobRunsTable.tsx | 186 ++++++++++++++++++ .../src/components/JobRunsTable/index.ts | 16 ++ plugins/jenkins/src/components/useJobRuns.ts | 81 ++++++++ plugins/jenkins/src/index.ts | 1 + plugins/jenkins/src/plugin.ts | 10 + 9 files changed, 397 insertions(+) create mode 100644 plugins/jenkins/src/components/JobRunsTable/JobRunsTable.tsx create mode 100644 plugins/jenkins/src/components/JobRunsTable/index.ts create mode 100644 plugins/jenkins/src/components/useJobRuns.ts diff --git a/packages/app/src/components/catalog/EntityPage.tsx b/packages/app/src/components/catalog/EntityPage.tsx index 25630253d4..6036f89310 100644 --- a/packages/app/src/components/catalog/EntityPage.tsx +++ b/packages/app/src/components/catalog/EntityPage.tsx @@ -100,6 +100,7 @@ import { EntityJenkinsContent, EntityLatestJenkinsRunCard, isJenkinsAvailable, + EntityJobRunsTable, } from '@backstage/plugin-jenkins'; import { EntityKafkaContent } from '@backstage/plugin-kafka'; import { EntityKubernetesContent } from '@backstage/plugin-kubernetes'; @@ -245,6 +246,9 @@ export const cicdContent = ( +
+
+
diff --git a/plugins/jenkins-backend/src/service/jenkinsApi.ts b/plugins/jenkins-backend/src/service/jenkinsApi.ts index 85271462eb..4072eb6ca2 100644 --- a/plugins/jenkins-backend/src/service/jenkinsApi.ts +++ b/plugins/jenkins-backend/src/service/jenkinsApi.ts @@ -64,6 +64,16 @@ export class JenkinsApiImpl { ${JenkinsApiImpl.jobTreeSpec} ]{0,50}`; + private static readonly jobBuildsTreeSpec = ` + name, + description, + url, + fullName, + displayName, + fullDisplayName, + inQueue, + builds[*]`; + constructor(private readonly permissionApi?: PermissionEvaluator) {} /** @@ -329,4 +339,15 @@ export class JenkinsApiImpl { const jobs = jobFullName.split('/'); return `${jenkinsInfo.baseUrl}/job/${jobs.join('/job/')}/${buildId}`; } + + async getJobBuilds(jenkinsInfo: JenkinsInfo) { + const client = await JenkinsApiImpl.getClient(jenkinsInfo); + + const jobBuilds = await client.job.get({ + name: jenkinsInfo.jobFullName, + tree: JenkinsApiImpl.jobBuildsTreeSpec.replace(/\s/g, ''), + }); + + return jobBuilds; + } } diff --git a/plugins/jenkins-backend/src/service/router.ts b/plugins/jenkins-backend/src/service/router.ts index eea067fab6..88777ff098 100644 --- a/plugins/jenkins-backend/src/service/router.ts +++ b/plugins/jenkins-backend/src/service/router.ts @@ -151,6 +151,32 @@ export async function createRouter( }, ); + router.get( + '/v1/entity/:namespace/:kind/:name/job/:jobFullName', + async (request, response) => { + const token = getBearerTokenFromAuthorizationHeader( + request.header('authorization'), + ); + const { namespace, kind, name, jobFullName } = request.params; + + const jenkinsInfo = await jenkinsInfoProvider.getInstance({ + entityRef: { + kind, + namespace, + name, + }, + jobFullName, + backstageToken: token, + }); + + const build = await jenkinsApi.getJobBuilds(jenkinsInfo); + + response.json({ + build: build, + }); + }, + ); + router.post( '/v1/entity/:namespace/:kind/:name/job/:jobFullName/:buildNumber', async (request, response) => { diff --git a/plugins/jenkins/src/api/JenkinsApi.ts b/plugins/jenkins/src/api/JenkinsApi.ts index 04bd313227..4f083fdb9d 100644 --- a/plugins/jenkins/src/api/JenkinsApi.ts +++ b/plugins/jenkins/src/api/JenkinsApi.ts @@ -56,6 +56,30 @@ export interface Build { }; status: string; // == building ? 'running' : result, } +export interface JobBuild { + timestamp: number; + building: boolean; + duration: number; + result?: string; + fullDisplayName: string; + displayName: string; + url: string; + number: number; + inProgress: boolean; + queueId: number; + id: number; +} + +export interface Job { + name: string; + displayName: string; + description: string; + fullDisplayName: string; + inQueue: boolean; + fullName: string; + url: string; + builds: JobBuild[]; +} export interface Project { // standard Jenkins @@ -67,6 +91,10 @@ export interface Project { // added by us status: string; // == inQueue ? 'queued' : lastBuild.building ? 'running' : lastBuild.result, onRestartClick: () => Promise; // TODO rename to handle.* ? also, should this be on lastBuild? + getJobBuilds(options: { + entity: CompoundEntityRef; + jobFullName: string; + }): Promise; } export interface JenkinsApi { @@ -212,4 +240,28 @@ export class JenkinsClient implements JenkinsApi { const { token } = await this.identityApi.getCredentials(); return token; } + + async getJobBuilds(options: { + entity: CompoundEntityRef; + jobFullName: string; + }): Promise { + const { entity, jobFullName } = options; + const url = `${await this.discoveryApi.getBaseUrl( + 'jenkins', + )}/v1/entity/${encodeURIComponent(entity.namespace)}/${encodeURIComponent( + entity.kind, + )}/${encodeURIComponent(entity.name)}/job/${encodeURIComponent( + jobFullName, + )}`; + + const idToken = await this.getToken(); + const response = await fetch(url, { + method: 'GET', + headers: { + ...(idToken && { Authorization: `Bearer ${idToken}` }), + }, + }); + + return (await response.json()).build; + } } diff --git a/plugins/jenkins/src/components/JobRunsTable/JobRunsTable.tsx b/plugins/jenkins/src/components/JobRunsTable/JobRunsTable.tsx new file mode 100644 index 0000000000..3bf36c2823 --- /dev/null +++ b/plugins/jenkins/src/components/JobRunsTable/JobRunsTable.tsx @@ -0,0 +1,186 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { Link, Table, TableColumn } from '@backstage/core-components'; +import { Box, IconButton, Tooltip, Typography } from '@material-ui/core'; +import { default as React } from 'react'; +import JenkinsLogo from './../../assets/JenkinsLogo.svg'; +import { useJobRuns } from './../useJobRuns'; +import { Job, JobBuild } from './../../api/JenkinsApi'; +import { JenkinsRunStatus } from './../BuildsPage/lib/Status'; +import VisibilityIcon from '@material-ui/icons/Visibility'; + +const generatedColumns: TableColumn[] = [ + { + title: 'Number', + field: 'number', + render: (row: Partial) => { + return ( + + + {row.number} + + + ); + }, + }, + { + title: 'Timestamp', + field: 'timestamp', + render: (row: Partial) => { + return ( + + + {row?.timestamp ? new Date(row?.timestamp).toLocaleString() : ' '} + + + ); + }, + }, + { + title: 'Result', + field: 'result', + render: (row: Partial) => { + return ( + + {row.inProgress ? ( + In Progress + ) : ( + + )} + + ); + }, + }, + { + title: 'Duration', + field: 'duration', + render: (row: Partial) => { + return ( + + + {row?.duration + ? (row.duration / 1000).toFixed(1).toString().concat(' s') + : ''} + + + ); + }, + }, + + { + title: 'Actions', + render: (row: Partial) => { + const ActionWrapper = () => { + return ( +
+ {row?.url && ( + + + + + + )} +
+ ); + }; + return ; + }, + width: '10%', + }, +]; + +type Props = { + loading: boolean; + jobRuns?: Job; + page: number; + onChangePage: (page: number) => void; + total: number; + pageSize: number; + onChangePageSize: (pageSize: number) => void; +}; + +export const JobRunsTableView = ({ + loading, + pageSize, + page, + jobRuns, + onChangePage, + onChangePageSize, + total, +}: Props) => { + const builds = jobRuns?.builds.slice( + page * pageSize, + page * pageSize + pageSize, + ); + let sumOfAllSuccessfullJobDuration = 0; + + const successfullJobCount = + builds?.reduce((count, build) => { + if (!build.inProgress && build.result === 'SUCCESS') { + sumOfAllSuccessfullJobDuration += build.duration; + return count + 1; + } + return count; + }, 0) || 0; + + let avgTime; + + if (successfullJobCount > 0) { + avgTime = (sumOfAllSuccessfullJobDuration / successfullJobCount / 1000) + .toFixed(1) + .toString(); + } + + return ( + + + Jenkins logo + + Job Runs + + + + Average Build Time For Last {successfullJobCount} Successfull jobs + : {avgTime || 0} + + + + } + columns={generatedColumns} + /> + ); +}; + +export const JobRunsTable = () => { + const [tableProps, { setPage, setPageSize }] = useJobRuns(); + + return ( + + ); +}; diff --git a/plugins/jenkins/src/components/JobRunsTable/index.ts b/plugins/jenkins/src/components/JobRunsTable/index.ts new file mode 100644 index 0000000000..b74beeb315 --- /dev/null +++ b/plugins/jenkins/src/components/JobRunsTable/index.ts @@ -0,0 +1,16 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +export { JobRunsTable } from './JobRunsTable'; diff --git a/plugins/jenkins/src/components/useJobRuns.ts b/plugins/jenkins/src/components/useJobRuns.ts new file mode 100644 index 0000000000..0724fd7495 --- /dev/null +++ b/plugins/jenkins/src/components/useJobRuns.ts @@ -0,0 +1,81 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { useState } from 'react'; +import useAsyncRetry from 'react-use/lib/useAsyncRetry'; +import { jenkinsApiRef } from '../api'; +import { errorApiRef, useApi } from '@backstage/core-plugin-api'; +import { useEntity } from '@backstage/plugin-catalog-react'; +import { getCompoundEntityRef } from '@backstage/catalog-model'; +import { JENKINS_ANNOTATION, LEGACY_JENKINS_ANNOTATION } from '../constants'; + +export enum ErrorType { + CONNECTION_ERROR, + NOT_FOUND, +} + +export function useJobRuns() { + const { entity } = useEntity(); + const api = useApi(jenkinsApiRef); + const errorApi = useApi(errorApiRef); + + const [total, setTotal] = useState(0); + const [page, setPage] = useState(0); + const [pageSize, setPageSize] = useState(5); + + const [error, setError] = useState<{ + message: string; + errorType: ErrorType; + }>(); + + const jobFullName = + entity.metadata.annotations?.[JENKINS_ANNOTATION] || + entity.metadata.annotations?.[LEGACY_JENKINS_ANNOTATION] || + ''; + + const { loading, value: jobRuns } = useAsyncRetry(async () => { + try { + const jobBuilds = await api.getJobBuilds({ + entity: getCompoundEntityRef(entity), + jobFullName, + }); + + setTotal(jobBuilds.builds.length); + + return jobBuilds; + } catch (e) { + const errorType = e.notFound + ? ErrorType.NOT_FOUND + : ErrorType.CONNECTION_ERROR; + setError({ message: e.message, errorType }); + throw e; + } + }, [api, errorApi, entity]); + + return [ + { + page, + pageSize, + loading, + jobRuns, + total, + error, + }, + { + setPage, + setPageSize, + }, + ] as const; +} diff --git a/plugins/jenkins/src/index.ts b/plugins/jenkins/src/index.ts index 7562026bdc..7063485511 100644 --- a/plugins/jenkins/src/index.ts +++ b/plugins/jenkins/src/index.ts @@ -23,6 +23,7 @@ export { jenkinsPlugin, jenkinsPlugin as plugin, + EntityJobRunsTable, EntityJenkinsContent, EntityLatestJenkinsRunCard, } from './plugin'; diff --git a/plugins/jenkins/src/plugin.ts b/plugins/jenkins/src/plugin.ts index 7dbb6bfde1..6e0bd77f91 100644 --- a/plugins/jenkins/src/plugin.ts +++ b/plugins/jenkins/src/plugin.ts @@ -72,3 +72,13 @@ export const EntityLatestJenkinsRunCard = jenkinsPlugin.provide( }, }), ); + +/** @public */ +export const EntityJobRunsTable = jenkinsPlugin.provide( + createComponentExtension({ + name: 'EntityLatestJenkinsRunCard', + component: { + lazy: () => import('./components/JobRunsTable').then(m => m.JobRunsTable), + }, + }), +); From 574f3c5edeb597da354f74b78a256351031914b9 Mon Sep 17 00:00:00 2001 From: Abhay-soni-developer Date: Mon, 11 Sep 2023 20:19:50 +0530 Subject: [PATCH 003/227] jenkins api interface extended Signed-off-by: Abhay-soni-developer --- plugins/jenkins/src/api/JenkinsApi.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/plugins/jenkins/src/api/JenkinsApi.ts b/plugins/jenkins/src/api/JenkinsApi.ts index 4f083fdb9d..dec7890aac 100644 --- a/plugins/jenkins/src/api/JenkinsApi.ts +++ b/plugins/jenkins/src/api/JenkinsApi.ts @@ -126,6 +126,11 @@ export interface JenkinsApi { buildNumber: string; }): Promise; + getJobBuilds(options: { + entity: CompoundEntityRef; + jobFullName: string; + }): Promise; + retry(options: { entity: CompoundEntityRef; jobFullName: string; From 411896faf98fd54d2403deae3b6ef2ef6a13a39b Mon Sep 17 00:00:00 2001 From: Abhay-soni-developer Date: Mon, 11 Sep 2023 20:34:48 +0530 Subject: [PATCH 004/227] changeset added Signed-off-by: Abhay-soni-developer --- .changeset/perfect-cobras-bake.md | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 .changeset/perfect-cobras-bake.md diff --git a/.changeset/perfect-cobras-bake.md b/.changeset/perfect-cobras-bake.md new file mode 100644 index 0000000000..e0a4cff04d --- /dev/null +++ b/.changeset/perfect-cobras-bake.md @@ -0,0 +1,9 @@ +--- +'@backstage/plugin-jenkins-backend': minor +'@backstage/plugin-jenkins': minor +'example-app': minor +--- + +Added JobRunTable in EntityPage +Added JobRunTable component in Jenkins frontend plugin. +Added new Route and extended Api to get buildJobs. From 26761ebec49d4f868dcf506c37ac086b8d8c3b81 Mon Sep 17 00:00:00 2001 From: Abhay-soni-developer Date: Tue, 12 Sep 2023 12:45:54 +0530 Subject: [PATCH 005/227] typo fixed Signed-off-by: Abhay-soni-developer --- .../jenkins/src/components/JobRunsTable/JobRunsTable.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/jenkins/src/components/JobRunsTable/JobRunsTable.tsx b/plugins/jenkins/src/components/JobRunsTable/JobRunsTable.tsx index 3bf36c2823..43b866523b 100644 --- a/plugins/jenkins/src/components/JobRunsTable/JobRunsTable.tsx +++ b/plugins/jenkins/src/components/JobRunsTable/JobRunsTable.tsx @@ -127,7 +127,7 @@ export const JobRunsTableView = ({ ); let sumOfAllSuccessfullJobDuration = 0; - const successfullJobCount = + const successfulJobCount = builds?.reduce((count, build) => { if (!build.inProgress && build.result === 'SUCCESS') { sumOfAllSuccessfullJobDuration += build.duration; @@ -138,8 +138,8 @@ export const JobRunsTableView = ({ let avgTime; - if (successfullJobCount > 0) { - avgTime = (sumOfAllSuccessfullJobDuration / successfullJobCount / 1000) + if (successfulJobCount > 0) { + avgTime = (sumOfAllSuccessfullJobDuration / successfulJobCount / 1000) .toFixed(1) .toString(); } @@ -162,7 +162,7 @@ export const JobRunsTableView = ({ - Average Build Time For Last {successfullJobCount} Successfull jobs + Average Build Time For Last {successfulJobCount} Successfull jobs : {avgTime || 0} From 5d6d2531001f93faa392bd6a18a03809a88c6950 Mon Sep 17 00:00:00 2001 From: Abhay-soni-developer Date: Tue, 12 Sep 2023 20:22:03 +0530 Subject: [PATCH 006/227] type fixed Signed-off-by: Abhay-soni-developer --- .../src/components/JobRunsTable/JobRunsTable.tsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/plugins/jenkins/src/components/JobRunsTable/JobRunsTable.tsx b/plugins/jenkins/src/components/JobRunsTable/JobRunsTable.tsx index 43b866523b..352417c29d 100644 --- a/plugins/jenkins/src/components/JobRunsTable/JobRunsTable.tsx +++ b/plugins/jenkins/src/components/JobRunsTable/JobRunsTable.tsx @@ -125,12 +125,12 @@ export const JobRunsTableView = ({ page * pageSize, page * pageSize + pageSize, ); - let sumOfAllSuccessfullJobDuration = 0; + let sumOfAllSuccessfulJobDuration = 0; const successfulJobCount = builds?.reduce((count, build) => { if (!build.inProgress && build.result === 'SUCCESS') { - sumOfAllSuccessfullJobDuration += build.duration; + sumOfAllSuccessfulJobDuration += build.duration; return count + 1; } return count; @@ -139,7 +139,7 @@ export const JobRunsTableView = ({ let avgTime; if (successfulJobCount > 0) { - avgTime = (sumOfAllSuccessfullJobDuration / successfulJobCount / 1000) + avgTime = (sumOfAllSuccessfulJobDuration / successfulJobCount / 1000) .toFixed(1) .toString(); } @@ -162,8 +162,8 @@ export const JobRunsTableView = ({ - Average Build Time For Last {successfulJobCount} Successfull jobs - : {avgTime || 0} + Average Build Time For Last {successfulJobCount} Successful jobs :{' '} + {avgTime || 0} From 4c948955dd8fe2b35496157e2f94d8c54f5993f6 Mon Sep 17 00:00:00 2001 From: Abhay-soni-developer Date: Thu, 14 Sep 2023 20:17:51 +0530 Subject: [PATCH 007/227] readme modified Signed-off-by: Abhay-soni-developer --- plugins/jenkins/README.md | 12 +++++++++++- plugins/jenkins/src/assets/jobrun-table.png | Bin 0 -> 184331 bytes 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 plugins/jenkins/src/assets/jobrun-table.png diff --git a/plugins/jenkins/README.md b/plugins/jenkins/README.md index 2a0ec451c8..b3e328da65 100644 --- a/plugins/jenkins/README.md +++ b/plugins/jenkins/README.md @@ -5,6 +5,7 @@ Website: [https://jenkins.io/](https://jenkins.io/) Last master build Folder results Build details +Job builds records ## Setup @@ -27,6 +28,7 @@ import { EntityJenkinsContent, EntityLatestJenkinsRunCard, isJenkinsAvailable, + EntityJobRunsTable, } from '@backstage/plugin-jenkins'; // You can add the tab to any number of pages, the service page is shown as an @@ -52,6 +54,7 @@ const serviceEntityPage = ( + {/* ... */} @@ -74,7 +77,9 @@ metadata: name: 'your-component' description: 'a description' annotations: - jenkins.io/github-folder: 'folder-name/project-name' + jenkins.io/github-folder: 'folder-name/project-name' # deprecated + jenkins.io/job-full-name: 'folder-name/project-name' # use this instead + spec: type: service lifecycle: experimental @@ -97,3 +102,8 @@ spec: - Only works with organization folder projects backed by GitHub - No pagination support currently, limited to 50 projects - don't run this on a Jenkins instance with lots of builds + +## EntityJobRunsTable + +- View all builds of a particular job +- shows average build for successful builds diff --git a/plugins/jenkins/src/assets/jobrun-table.png b/plugins/jenkins/src/assets/jobrun-table.png new file mode 100644 index 0000000000000000000000000000000000000000..9fff841c3bdbab53c8f43bd218c2e900290ac14b GIT binary patch literal 184331 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%0A%mWuuy-c1JJmNbyFA%6U+#Eg{`ECBTABRUFNhc6 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%0DL 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�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 literal 0 HcmV?d00001 From 1a05cf34f6dfd84bca969eb02a28b458e3e3163b Mon Sep 17 00:00:00 2001 From: Abhay-soni-developer Date: Thu, 14 Sep 2023 20:36:55 +0530 Subject: [PATCH 008/227] extended EntityJenkinsContent Table to support passing of columns from top level to modify table. Signed-off-by: Abhay-soni-developer --- .changeset/spicy-poets-sell.md | 5 +++++ plugins/jenkins/src/api/index.ts | 2 +- .../components/BuildsPage/lib/CITable/CITable.tsx | 11 +++++++++-- plugins/jenkins/src/components/Router.tsx | 15 ++++++++++++--- 4 files changed, 27 insertions(+), 6 deletions(-) create mode 100644 .changeset/spicy-poets-sell.md diff --git a/.changeset/spicy-poets-sell.md b/.changeset/spicy-poets-sell.md new file mode 100644 index 0000000000..28ef965282 --- /dev/null +++ b/.changeset/spicy-poets-sell.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-jenkins': minor +--- + +Extend EntityJenkinsContent to recieve columns as prop diff --git a/plugins/jenkins/src/api/index.ts b/plugins/jenkins/src/api/index.ts index af1829c0b4..32c98ae5a6 100644 --- a/plugins/jenkins/src/api/index.ts +++ b/plugins/jenkins/src/api/index.ts @@ -16,4 +16,4 @@ export { JenkinsClient, jenkinsApiRef } from './JenkinsApi'; -export type { JenkinsApi } from './JenkinsApi'; +export type { JenkinsApi, Project } from './JenkinsApi'; diff --git a/plugins/jenkins/src/components/BuildsPage/lib/CITable/CITable.tsx b/plugins/jenkins/src/components/BuildsPage/lib/CITable/CITable.tsx index f82ce2e7ec..b0474b73da 100644 --- a/plugins/jenkins/src/components/BuildsPage/lib/CITable/CITable.tsx +++ b/plugins/jenkins/src/components/BuildsPage/lib/CITable/CITable.tsx @@ -239,6 +239,7 @@ type Props = { total: number; pageSize: number; onChangePageSize: (pageSize: number) => void; + columns: TableColumn[]; }; export const CITableView = ({ @@ -249,6 +250,7 @@ export const CITableView = ({ projects, onChangePage, onChangePageSize, + columns, total, }: Props) => { const projectsInPage = projects?.slice( @@ -279,17 +281,22 @@ export const CITableView = ({ Projects } - columns={generatedColumns} + columns={columns && columns.length !== 0 ? columns : generatedColumns} /> ); }; -export const CITable = () => { +type CITableProps = { + columns?: TableColumn[]; +}; + +export const CITable = ({ columns }: CITableProps) => { const [tableProps, { setPage, retry, setPageSize }] = useBuilds(); return ( Boolean(entity.metadata.annotations?.[JENKINS_ANNOTATION]) || Boolean(entity.metadata.annotations?.[LEGACY_JENKINS_ANNOTATION]); -export const Router = () => { +type Props = { + columns?: TableColumn[]; +}; + +export const Router = (props: Props) => { const { entity } = useEntity(); if (!isJenkinsAvailable(entity)) { return ; } + const columns = props.columns; + return ( - } /> + } /> } /> ); From 78cfb4e2b2647adbc9a00ef1eb6fb82c4234256f Mon Sep 17 00:00:00 2001 From: Abhay-soni-developer Date: Thu, 14 Sep 2023 21:45:48 +0530 Subject: [PATCH 009/227] modified readme Signed-off-by: Abhay-soni-developer --- plugins/jenkins/README.md | 29 +++++++++++++++++- .../jenkins/src/assets/dynamic-columns.png | Bin 0 -> 218507 bytes 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 plugins/jenkins/src/assets/dynamic-columns.png diff --git a/plugins/jenkins/README.md b/plugins/jenkins/README.md index 2a0ec451c8..d21fee2b8a 100644 --- a/plugins/jenkins/README.md +++ b/plugins/jenkins/README.md @@ -5,7 +5,7 @@ Website: [https://jenkins.io/](https://jenkins.io/) Last master build Folder results Build details - +Modify Table Columns ## Setup 1. If you have a standalone app (you didn't clone this repo), then do @@ -97,3 +97,30 @@ spec: - Only works with organization folder projects backed by GitHub - No pagination support currently, limited to 50 projects - don't run this on a Jenkins instance with lots of builds + +## Modify Columns of EntityJenkinsContent + +- now you can pass down column props to show the columns/metadata as per your use case. + +```tsx +export const generatedColumns: TableColumn[] = [ + { + title: 'Timestamp', + field: 'lastBuild.timestamp', + render: (row: Partial) => ( + <> + + {` + ${new Date(row.lastBuild?.timestamp).toLocaleDateString()} + ${new Date(row.lastBuild?.timestamp).toLocaleTimeString()} + `} + + + ), + }, +] + +// ... + +// ... +``` diff --git a/plugins/jenkins/src/assets/dynamic-columns.png b/plugins/jenkins/src/assets/dynamic-columns.png new file mode 100644 index 0000000000000000000000000000000000000000..1a8525740354a40436511a11b18e545442070fba GIT binary patch literal 218507 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ê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�>jFn(W06uRj+2zVy+$kK(nZv>i(D$GkqK_O91iodi+( zh!bT~>UWE+Ir+tPM+Mh93hREAiP4MN{L5A7ozZM3O`od8^}jO#S1Rc}vtYI6w}n`< zY!~XT)W)+kjX6nTsQsoR15xlR?%2~q;^kL#kovmJ@flLw!}Z5`M49X;#iYmNgK3Xs z8T{&1g8zc3NfS8s{Js(KN!es$je{=6yHRrToYb{pGa2x;ph*8-xopv^XEOTiNzw25 z#L@b*$!EnC*Z-+0T=b-26twDVGW3R@7`{;%`#L^Mp&6rO4@+A=#-colk6RjiqaQyc z_1N_iUZ!a3(*HWFUr{rNYdQTx+1lZ^kT)hs7w_|uuk~6r&S)&?`=sA3%}h{dtx=8j zp+85ZlVR~kwz0Y_*R6P-O}5I`h|Je4opl z8a%Zzlay77lc$SLpm&6hpWy<(qgxTQF6hiWJ@|KgimyxWzl~QwEH_Z{xt){WJj+$x zTnrhfK-0zw2kq_@!Uig1O>Js)BLghhEM2MD?bu-BRkU06zgg4+QnEqZPnIyq#Ma_@ z{r8B4`k5U;6Qo12o`A)eQnRm06E4Gk9(W-W@9?;Na6SjRg}ph;HG7m!KnMT1m?L1E zf?~eZFw5D2{lTf&|)=JCkBHp#a_C_*P?wRCx#Lx@K94|)h|I5dUxu0nP{mjk)Tz6)VclCJc1r7^_IxZmnv7&gD z@^fE2OLJKd!As4F44nq=`C(yk)*Uh59WP*mOb_}jAKh@8W$~UkKb&#oX8O|L(H0ke z+huA}tU_O)wxXAex4qAFBb1eHlacYp@vun7Nk6G^KM+ZmO)QDQirmy4FLho^Zz7lc zmg$*I$$IYmvzJSe#V*(rtp7Ss9$fl(#;?!D%v2?Gac5lRm@K)Hvb7ugW z>ZoGix&y=dby0#}Znsr|pj(g98b+x#0%w=y_q*IUGJ9%n0oyocgXtzjJ#<4%t8gYs zq#n(lGX(mtye4(uro3>2aAs4w;uUCD;IC90aohIaIAnA*x8RJ;<>yoGicM-GYbO@l zLCg5zF0x4hnK_~H>AI9Y^UC({IvV8@|JD7B!29+2E{{bpySi*!(HfAAw&9{T{_fjt zC1J%0b+&D{348g4xLBtyS;!n<>%8;N&Iu}Y1x3V;W+o47IhEiw4c@EyWp1_VgjWwZ z^NBwl#Y&ih9wX;!R)SM;sxJhZT!mGxcHYnV<3Be){S~na0%YWo$#cj~*F*|ETyniv zWIVUtP1;uzO^$UkIhZzc_fglpZfH#Cg-ma=>1(GH!s_OQ95blhYC@Yk)s8E>nA025hEbkZY)+3j}7NGULP$} zQZ`-38Kwr!Hjde+4w8os`CE-_$X?A zBeUf<2VKL3Q~3Khq~$y5d1usHoD8{Qs;orn5B?DFo76Cu(C(byygProL?KpaWd}?< zt6XJ-4dxV4&9sbi1IdPfp`h?I?p7?!>xntD}uI4*41;r{QMDfy*UcKWF z=foitAX-2D;#6|})W9fr&!&=pnC{)k$e5^})zN|<)Ib^R%)akyY&c}5qPgkWInnzQ zxkT$;Y9K}rmtK4ihCV)t_Q+L1Gs#LT4J`emi}{^91|y{Fr845yGm=V^oB={?V|7z| zR!t4l?*}_2Jm<+P;7p`?j{8qw=C54$_DU$O=+IHOhNe%L_w4QMWywOEcMufb3_88v zR;15o7j5d3f(n&!V7n;h&9w^Q?e`mLHM({OJnq(K2^j89y_JGCKW*<9h7>}a^AiqB zl_PAyUinL7@Rw6@tOFcxU1dy1ATU|qK-or$##lM2rGp7=;4|Q=zOg{xQhW& zH*x{XybXRV09gr>>Blu!~jAxS6eq^MwF>OFGQBB5+lPdMFd1XYf^#*k} zEE4#7Hb46X@TNM}XXFX&SafaNYeQJ;DX4E+iqVs5h_2~tG{^vQ(7%9{Sp`N-$yXL# z;n}+G0;~nE48E(+)vW}ZX+bw#nu$2)MErzRv`s*NY%8yV0(_@QJoSH6sf`Fy6*EKz z_rA#G>y6UO{G1Z6akqjNfuJ8xY(B84;0kqo0;{n##Iu|+7%jfT^jE3#uPLW5gMa0` zrh_0jK|UVHFx9&#UFvrWE{_RZgeljkgOJ+S@&grLhHp*8-Tuj_oY=>0eupAA&+IJysefjM&UyuxCoY5h zMzPcrKd5S-Z}V;&Xdcvjrs3!Leuw5k-rmQYwl8Gfsk-T&ucsMFP_3tHZZ7{lM#^U> zuTPrDs+Vd>BSEQU`v&IDQ+cT-YtPG&PUBmFZ1_b%C8Zj9d{WrG;lfldqwHGRAg)W< z6)gyw)7L{X1m{2K3ATVrV;kr}3}@IkOV<^TJrAVkX|LRva3w2BAHgJ?5gag8(m^wr z)=NK3U#JrJ`R1F($${o-k;-OsR9dhar?$T3=_o}ughO-oe}3Rye0(Dv3a+--Y=f_2 zWcyPp?3@UrEYONYC-EQVueY%_PT~(t`=9(hK)vA0REQ&W4kM?2)sSscB&6qMxL&so z-^a9L|-+U%9Bv1B*bv zyNHrq`CvAA^ifgDYy|VP9i7LIQPo4kS7P-j3tbLhNr9Msj!S+NI|E4o>UYfmwenM+ zdL9mgk(mhBU=|unN!G_poPkNFuf~sok?W%AKU=RrMi}21f=T*tlc1cnWfW(>({UN) zejKekcw=&G+#F}tfXgS|4zGZ82*4`ba^)G`g<8Fvuh!IC(tdQ&syYT0T>`pxLX9Ui z$9!7WJSfE^U$K-244S!jnw{regqdLa1j-}$Wo4QIRjL*CEH6xd?hBLZKezy#jQ)wv zRo=Q3!xA=Xb{XFcN83rcJ5=3ddY!sy0!hHqb1lLP+drtr?^jKoHL33}^~L)0YrCg) zHQg?h91AI@CH0_aE$$Wj?^l)z##hE%u)m&Oemp_x=Ui3<8dyOq(n>`MLQ~c*d)TPN zSDFmSKj=7&HF{lJ{Ok60vO{e#a9t5NQSK;jX6g%D3i^DjmU9apE%nXjcTOal>=G03 zoD>?@%Mfb!l+k0W$#)k{-^V#&+N+yeg>{+KOZCL)A4G}im(DmlzDz618Y?1_M^((l zE=>Xtrc|#jg|Oj2_t6`C?sQpgrg`+X^qq&^ASaGGeXKNis}e~by$`AivuVjOjy#vN zf$qdz$iOdBaA$-Op5k$8 zbU@g=b7YyQRTpdS(g0G7|G2i;bdsc7%+@jWo8(&^j`2fD!q zFilZj-T~_V!JMStQN!%f(|bJuY(uTc&auzSa!fAUG-)@C@+kFwYa9gi{L`b1TrDt$ zP3Arjq4yXza8Y)t8Akn4B$tS>+KOK9pkiA3A)W6OJ-UWd5F6;?K`-jYsOWz@{JWU_ z->XfaRb{>Sh^>xGuFWp#=jqNJEgQV!Jv-|j{~}_58JQgAQA&?^sC(c3;NUq_|HG{x zn=uL0t)KQ~A!ij46Z6}FR`pnSfx5B`S$~Md`h*PcC14${Kah*~2;&rOrxlKRrS?-a zj;Y)8m4N3U7c;31OboGf4sE?XjaNwL=_>R{ZFQg2c+DbF|9vtegV0Mcq+UPY40ii; zqTi_P$0Ffb0m6QLt!MUPGs{T>QEz_QnsMTN9yp`BxSv-Q-94PE3k>{cXBau$vK@io zW;!EnQ6nDdSkLLHXHp)R)@N8fl%etxUo{J;Ppck}RwB0mH1^@74V$QJsNRGK36_iEUAO24~ z|NS8U)mK}}GaUUu{9t)>ze?6&JFwb-C?*)xx^e#t4hmu!uK{F}1dYySSyXZ1;~@Y! z1@#Y!f%|34jDL98lsHVS3Fua!6UwIOQKxTy^pdTpi|D0WU1XS$;8swngKRx5!&=?4G1V+osuKk2#K~Vm7OFr9R ze*`vkEn|+z?M&RgY%r;&0kH;V6!+yOG+C-0LGJ)UcxN);P2f^e5cvG3o*j6p$Ml_Q zF9Zq{@<1sPu3OP1Hw;v_R0TIP7KLh{MW2lgdFSS8}nV{dg$+T_8jfyJAiwF zPQcMp^6_#{3iJ#bq(paTKX^R73{fehDym+wC`Ost7~!*9zDj1IG8 zV3!HYb&Bhif96o5D$sI@n4D0)f@v4CScz$If_|ZiL9xHKE3Z**H#93xd}7|r(C;`U zGB0zlg@4@yHI)0?GJG4Rvn&XBFCq<{40cOhSv88>MXTu7$6()BxU0u2V?>K=sBn+|P6(N^SLi#b3?A{;-b*gKqpZMN@5UDd zgs;gvaw8!gj9r__F=`lmDc zE50)euJ&3qjlGl6Pns+eFlwA8qv|ovnba#yCIn>&2z)m%UHo+C-=5SXvN!Jv-@ubP zl650ht}_-7nP@Hw?j}?uw)@NOS2a&4a~pe7b~2QX#}+I8mC8act12{8o^EusZ62T9 zbMELjJ6ju&%8QltJ>;fHdN$X99o{-B;|DW5hD$d_Ot~pVxB7i0bJJHb)70TF=ZWJ7 zMIc-ZFDY9l{@Y9Wf4_|}2{CLb!fxI3C+g}x{WNW-6$mA4BDXz_P}H{{_!HR!HYy;v zfzNy)*eeUKY(edRQc(UZJqoXHXiDdt2gad?3WQQM)R%=k)<|LX&ZQQc&&EF%DJ|{+ zEQ1+=44}Q}Gj5p72r5(OKb=4GB4$u$yn%_-n7kZcS}+SPB*v!HmcCL;Uy;i%J z{XD9;*Z+Ir|LY%QN0;~_?!mB0_PDtWvvIf5up%mx-M6Zb=h13?mB{lYp9q?+>uX$M(nl)U z@S2wxrsHll4#L9PC&Gy2$^$gA8h!3hq^)oLtFrxjy8--y>lUeEfG$FxO-6DZssg}u z1snOe8fL1FM^xsVK0apG&H^P#|9RVP3RJ4;$X@faH{Y6ZQ}sTC4lx$!ZYlraH;kg% z#_2rG?tWVkpGnoA`LSc1S~3!dEW_7Srt$n{Lo}{ao&7)}NE;$%?yNn^H-KZD0o=hU z<9vnZ9g0|(o2T@g@vGBRfxfl;;;Y2&n#M^N_*Cr=TR|hX%B=7(0kR%7RQj3P-ECl5TjYrCE8ZCBk?{B_4lRsIO$ncC~ zn=HyA3c15&PjH&BMqh-tv-!YuJ$|qAq~#gU|Hs~UhBcY4>y8Cf5YZ7tsdf~ksC1-> zh)Pumy*VI(KZss0auM5$Oq`hZZ0LQlz&KAV5TVAaoKSBsm{z&&-;&_FA*g zK7Y=i^-nIZK)&~TpLRd@b3d=k3N`EQHyW*AEM;Z9jeoQx1*MOT~?z zDzKUb6HpJE^p^$)B^8TH@&1o1?%0o)$Wo{1jjkIT5#zQCWDGF25-BvJ%M4iRWy&6= zrW0sX0KGLZEo3#REqQ=A3In#FYGWCiM%eP@6ZPa5=V`a<^8n!4|S`CLc8!71dx}U!r6EMz{XU z*#JHpsavTW7bxx+PI3JYn6Jx9PKC*fn}=pI09m9gDayjz{&4fR+8Ak&`r72O=x}Mp zM@l37ZAAKuibJubbUN3|=cmK9EGw2*&fRCb6jepo%}ePjE01=eH=S`a|9&dJ5E5Kp zV*wIpFJ(-+2lKE-Ee_<3J-s8HMZ@K zUNFW0t&i2jTrmiQ4QY~=v+1-vE7Vt_QQi)ReK{RG7p)PhBB8)sF{ukOb0#GC{`i=s zx|?Z8&<46qK<|x`q?QJa7k}Sb9?K>^I2>&ddiqFBCRXz0q9!j{4m#}EDBAhT_^nZs5?jGu$zoo3_HrFPu)J2;=e7d@B5s-S zAfnY2!{?7N=8+7uU4w$QlFb*grA!v7@0#qx8&bz8JPeW@qk&EqgDmv(<6_{pp!Ez;p% zAM+noUXcjL@i#7`6t#EQveL0kY^_6gv%{ia(l5luqi`n}l4Ee5*F5n%yq8;pt+b%CvGEY;x%pj83#m5(a^m9~0WBAezO3FGb$t z^;m$Tf$gSLfC!hca{r;J2MJeBtk?4X7bEwN!}`PU|9+@EY|n;j%U?Fcd;WpRsGr~s zSYs@Q80sbZw_IvjJ_)E5f)K%sf>&tQ`3_Q);etK}e>C>n`VC@wf(OM^%1@)xOp~s- zRAds`TQC;vy3-I}Y@$QIW!*;M69)U+gzTzLD5UBlUzbUNzR{h@`}L}k?$BL(H>ROh zg}jxSUItLqP`5U7z?^k#^y*65gybTjQw`KUQ25!RSU(LnDup5=TQF|M;zQSnlkV1b zMFGXXgpNB9+~WToHvQWZet9OTuD+xWKjgvq%>x$M9?6B0TSx{Qv!gYkT*~yh@X0i| zFQ41OX!cv%0uB!~eE(qyDIedz#8Aw>Yq4L1WP&q6IULCp) zs160%1Uz)82E3iz+P2z=K{umU7+dG=pnCFO`slyED#6_S2d9n=n5HfKrc3{f@yL$) z4qt~s>Z>N1WCJ~bQ&n9EuvE0J%kB7yF0XyqN$&3a@or}QN>tyE?$^zbQ@0>i-y5Eu1i$L#N&>EC0?KcxoG4m>H7(Rb0Ixlr~g(sqwCXr9(!J z6o7FL4g($$`VGlN)oG@#Kq4U3_fsLB-J)LBPod1S!fa{foH4Qyf}1-Il@Kp?ZsA!RvN8dcN|Y(fP?Doj z`~(J&Kl_ue{d4vHPdUza^^<4M`hTkZVfFi7^F_k`iK6)I#%}Lw=?G+l=DvJjM{nO= zKM^`sccJFWjj>!mkgY5fu#>leY>LG$w6sh=+nRvNRTrvW!{u#RepTl*=vaBQye);!X$vDD zdM_Bvq9}Xl-Cx@NrG5LowC3?s7Qfeqt(;eKd0z_)C0hU;gzy|iRpEh3{c_)>z-@85 z$I#c-8c2NGFaQ*qFWkkTJyVf>hH*-O^uKTLR%d-e!Qb-y^RuO31Fy$bt?a>~kDO%! z+=KCr7V>2P3Z^Y0)-ns^2bgCPM#xO-!5r@x;&an0BKSUxKIXw5<7#*;ky^ei+JzAr zCA2zo!a!Aa${1_LSe(evBmvhRs>NlCBg0`A}6gXlUknv!;edy{K_nK{TVL6JV_rZP{ zcC$X}OuR(RURsh_07d)c{XC(U^cNc?_6+6w)1O<#oITa8<@jFx{^k}D`}Gz~Vn1%x zWVu}EU%hMso z;u=6}GMe%o-O{=15GvhUWCFqhPMKN{GaUl@(L2L?c6R1fUq8RR0{6d{F8HrYb;T9% zS{y|2hV4Ht@5;4J-$A}+r$7rw#v6;R3Z&BdW>H@cu;K7CjiGfWw=E?i^5@1%y2F&Vpp|(B^)KYdk%5gJ4kdaT#=eqr@ zFv%178v1R>4IZ*{l33;9KWgu!@#06*`F8oQPH!!8f|~C6R&Tct0&9?6&MzD~36K{n zuq^tM6&c&uyc_(B`-AyKee|tVBy$#UGi6IA#a3r4f#(ipaaCQhQ4^ z9V`lMr2%e$ux@k6ZeUkm>n>HVv>`Cryd+?zg_Vl+CrT}C{+$f>uib*-06;zA-8B8M z@Egzi*?Ccq$s}zceTm=otyOWT8QbZ|DfehnGU7Dg!hm3FwabeMtdJiF6mke=N?q-* z7Xf@H$7M<$H%^`crZh{0rtP;v`uI)27>mRsr9k%Z?yWB$dbC2zDJOyJd^=)Ut)aQg z%(e7XVN3_gsxIGGF}E0AM@*gK<;Fn|-0haeZ~`pl=8+XLI;i$Gpq1X_^SPH6XS+nuJ;fKF-=Vs>j=TWE9?`5Z}e zo&j(;`V*|x-0G@--D->~_1jWx4B`cqu@8_{|8^ z3l5H0Gjp$g$wWRD8Ha0iK=Ch)_EiG?wink54a>`}9<5L{ZbAcT4wXit7O%%DUo5ea zPJe^%@hlC?sr%Uq^I*D^Vg%}tR9G?;N#Haw{!UrfE{u7;!BeEPlmHHIVm{ng_t=1? zdc%F@Gf46@4LB=-hF8}P>-qSetDfX`dBTlT{MrqpEhi42OJ5lSH|7jMyEkd=%;nFM zi$K;IQ9kZ}L+$S0GUg>&wB;E4?qoI0UpP6gV{>7%X0k~tpSAMst;Cp)JqBe`f){|V z7Wx-`0-8Qls!AfjQAh&KhHWc#<@xUtcuF`U8~l;%3IxzJXN3`nx3*ijZUpERoX#hU zsPW77F8R!!5ZC8PrjHv^4_UqEf^08U^s2P0dSVq-|PuA3;=B1V8h4&u*}IL zEg&F~VFqo#2u%foR)?P;D2Nk@cgC_~kVDh3YNs1ZPGh+VwX2Cb`7by>YQ^?tJs1Mz z_?6BwePVb?#QicssWrE{W8aF^IBzVytE@#1-k;ggd4I(%mefOF22P&IewrS6)HI*S zbEIXDbhJm33TD-bQ-Nv@CNw*FDAYwoNd|AE#`DHl2k)V<1Vj$Xfr{8UkB@SO*daGc zvV&U(;`dARdxZGIvHsV82>!I+_>J;UHV%@%hsu}bU-nWafDw>An8FWf8BPyWS(vMP zcLuP$k{6N=m@gP-kaR&{E&pJty|NR|&wJLemCegYBj%~qIrw!&mEXMd|B$u)1}6Uvz;!B4p8gYp`|tkD zAEpiTL{I#D_N?i18(qnNzwPYzoB5|Na#jbx3lrFk{)ZR%kMC3K9`KhU@=}7`ANUq}X|INqLm4M5okIV3P_x+!1@&D;sd~z6x`TFcn zX`A}l?)}RClyYl;D?w?0|HD4S?VSJexV^F;Wi4fo#_^I*Dglrx1*RSU{+0jRzrKWC z`I3rZtY}TX|7{Tc)7+8WTi_&X+SjP7RYh1y)h_+zUdc=J9gP1Pjle!k$Z)))pK*J* zkBZMQHJ^WX>HNA^@`q}>2_Hx|sQKH=NOxBNYjqb-V2HLut*q}{TS1HhK zpM_MgXg?CEW8K~iId{hNc^8|)AO||umZ|j1>KM+g2ta%9CR~48`h}<|I%K~bvS3=n zYK!C8SpKykK!v%Y+a)?Zcmyc5C~o2ThJ(_^fMtsG>2Sqo8~d2{OivitYBq+x10m;cg8+y=GE z+>_pwzdlB>>7QGTxHbR)vb#aI$S`2o_99?Hq)T)($LdrAv<96GHa|L@^|m)QU>=<{~97wET_UW7RE z-ao$gn468%l6j$7#W$0D;$kAo%WQH4|D(VXAO=;o_hIZNrOr^l2x#t3#4Ps6bnmM& zn^pe8Htu!ujexYHWB%B#*g6xK6tt`k%E;4#Xc#X}>8X@CRQd@1)aMQT8TwA*@n4 zq>g1kwPJ}d)|M#ALm7m$pZ&)^SAWVxRcE)Elk`8>69E+dMuF@TefzbVY1KE`n_(31 zkr{#&GpaObWLnghn$z>iG2V9FSiz5jZG$FTecmd7hLYd?MGB_aHZFXlzFSxknqJEq z>-HPJo_ZdYI#d;pakpqub2oEg!Q5AbV{0=13WQQmKIm14`jCBcLi$fucJXJ02DSq@ zgiN=wuTCsPE2-ZQQ)TC)oLkK0Pcgr#J>hCQQe(6E-6!zY(}NI`JUf4@fP9LFM15C9FeYhEp`GAXvfWOY4j6wyO>cXS8g!Sd1&4O_ zV!anyCuSwB1(LeDpBL!C-PePmLGE)HmTc6x_jc7WXbNdL95=J+?fUQU@A1}@pLnO% zW|~cYe_-`=K0}XO(kD+jUnWONu~YojJ6YwKQ5aV{urPjHpWJu3#bwL0ZGZ5@`dc~s ziMD%Zkq;tD21_)!l&Nn{?G3zMNSCE7M%`bhY(BHsOV6>>O~Q>9FlM8e^G`&D-Bgt2 zxK2%zi~TS!{XEu#sO!LdtLqOdBDvwlbldxv*jQldHtDF0{$k%q=y0{lQZ*v_0|dcP z=#*kX5nXeJ&_%+vj<7Qt{BD zRo@^|Lys0pwu6n*^ITt-SG+PoSI})meh}0qTd95!TDhG6Jb&;q@kKV_-g4&;$?c)) zhY|}z`32U*iWE?xv8sYkM@#X|#36Cp=<=&ewL%9EU}7UNsG%oID%&Y(l(7Y)^E2fW zNr+wPrg6brT>zVIk|CBLK1uvQmfeOTB!|a|6BG`JMWMAc&pk_AAPR&w>+0?!p_xlC zq-Qp^ZY6jlCy$c?h)d9)BvMs7a8%paFlc;x;wHgQzcA)L$kte3l5i** z127y)^Egemp1K09GzN*$AEVG}TJdT#h#q%uMf)>t>y2mW7=00p+obRbPR3?I-g11^ z_kl0-6t<01`g>}XbgVe!{aU~^ZjrC?7W>!(%94A|apZ1$H$P``sj zvBwR}amiuE7shH<%y5bqZY)m~C`PR{5F>MdP%*6u<7jA=hb_!qHH-i#@!H?mEpet*d~ucM_>S^_d&D*{KSe zyxeWM)bOkwy75|zx`v>Q#Zq%P>{xWjd&X?s3A*vkxcLU&1%b-5JARu={Co1wyA~#kM!zr8EG~PG86p&6K^EBNkoXL)S?!x4ULm+{M=9xRnEN zw%+RV{ANVWnFBFkJ%HaZvX?)qr(c0G!|xGu~+sMkcR zx3m2#+T<6e_?uDdS_Wu^EHDJN=bc?8lPB^8T^>zUX_=MpzLCyx0?y zz#*){Qe)zU93rfcn<}5puIh&=96w=WF8>o>p^f`16F2Fx!$>3aJB$yy-Z<}qye1(} zAiXp(-w&knz&t!T9wy5UdfG}+SV$v4=aZxT;<3X)oq1!_VJncfan@~lFou=wi>fLl zzfGB;yB-HemfL=J^C%cE8a6%N8wvqM+iF}IbThuH3A%4Qp@o+R#6283N2_GK;SDq-{OR%C@o0YxbL|whaFG$#IWpU&+9v#5S6fO$?$#F7Jl^j2Rmy2FacGH56 zLyFR80O?n#)S!m+QcB?(GLE>{2#Gu-m79Fc74UXgILP8)M6H~>qT%) zy*(J~fq%dncbyb#-t>sy5yK)fkOyOlU`S5P?yboSMs!nuX=$C?BZ^OlICK-kXacv}-BZPQs1`OXAAW{mw zKy7`pJi?rjs;n7fAqg}2-L1tOwH;tD3868y`{B~&2#}d^A#RaO;|9Q%Y=<|6AF9g* z%`vxSy23IY7XtPoVQy-IBi`HQH3 z<@B=yH_qmy_-p8(;G-VNn||_5Yf8ou(+ObJQpI4DzmGHV%KX#OPsODnE=6vKWXDAX za|GfcNm&BVC(_HElt^mT<)(^k%|01xX{PL3<(AbGe8R}PUg_AY!NV`2E(x9Lk8b|1 z6iXhuR-;VvyDyLOZG0e~nGxltOQI3uLM(IU0F6`R-E;wr#&>D6nWd(bk8Znq+$0N$ z42|Ep7wPE^FGoxD1l4ho-$o4>Zw?z%4V+z zYrXOvr?!e$=hb1$WMTKZOVjvR_;+{#O34iOY;w1IXyv*s)9XDPX}5)iW52d(V{X*8 z!VCsyuQFagQ)j1=@p_Up<#i@mc5O-nqj#hC3DNcz=g`vD*% zTxX-nhMAO%FbSt2Z_ik>e%NBYwsj9^{Xm*jUuK$R^V5zpsXK z8Qxw|Dx~b~*)UkaVK(nQfLXdZfY0&kq$+L@k9aSh;(KkBdvEzFiURq)^_NOr|;rfW90nkQCN)e!i4{F)ll-lw`xBa73AAsY4!b~=3_lrIfR#^V!p8T zLP0g+b|gOp6CB~9m`}yj_bhnlpd|A+ypUVeH>j^PGV2MuL%8pw)m)E{p{w^myPqY} zJoJ%fxvNbE{nR6^S!B9h31Jlrhr4oH1@@^TSgKylkQ}Sy2w;!8{NO(;9sZtn?A4{E zqlw4G_d^gZPP_?(_CCG*voZ-Ouq$Tr4Is}Rg{7WT%S6z9 z*dvO*^)Kz>V8WntKWc*M!v;n-#iz9jKdp@7RJX?6m|UY?2Rrv@R&Gt6Ol@EFfee`AE>BER%Y zj-r?G{1sJ(76zu);z7CO4;E%(0fp(u4Ha$yLj<>n_>m(#LI8Og8eG3>UO#;Yp;Hzr zrfn#ze=gU3ls0B&|CG~@Z8B359sce7dhVz1KxO$(LXgjD6g?|ML477ysdCpU280wj zAzFSh=`amZUdTO0e?D1Of_(0r+c(12;#fN#Iy0`e5vtT2u_?oo)+YtJ$j>oiO{fS4 zBu56-?#3Up9Ef#Qf-V<_pJ6fQqVDmkLq&kE6a>tr7kj)Ky94Mp0Rs}? zHz#+Q9TzSvi(nc+^r4k|K;E;$^hy?<-Jd#3qGeYcE<~}whTjblBKT9ue?^hQ#eCUk zs-Z8@G;re@uco{M$rt)@?M5Va<+ap(wdk_V1K2k45a9Dyzl;@FbKi&|QRj`!GIIiiN9f!DgQ#KgE7vMVtqJ>}PW zu4?uI6$>|QvDdyGTEW1K{)2cQ3XXp&fFI(L(w2^tp=}C$+>liBgPP%EuAN4X^aGEBTSiZj?q!?BPtl~&ymMqG&)6`;M4YM@Vi>R=N zCOVDR7IHl(Qy`WkgT#g!2_FTI6ggUc_<9m1cWZVo#*v7#~FGXBOhz5Zu}Hgaz+U;kL$o;KH`)_MN7@ z9o5r<;z`;dn*q;4X3HUJj(2SNcZPYOyVhOMSrg?SqM?L}d!cF%nt%2EGc5aOkA3j? zmMq)L5Osb0LF4Vm1z1J7uNVoT>rX;2cEpPWU?|&k)PePyS7%-Q0v00Q+QqwFMqaXz zHZInHMu(*f+^J3v=nZ$@9z+2GUS)|m!BnUa8U;HzQMp%S&}@2@Eya6*=&6HiCQZDV7MKP}9K-If{;(k~ag$uXPSSBoB- zx$S^d&v}|OB3(Oap&DT+t3sPMcx$3xZO;0E25Wa!8NCYfD^SMa6x}fpqe{v|MdXNp zzx4--3?JHJ+47omHkHwXhn<(e%NS5Hd?>ZnEBf(sWg-##H|h>oK!d3LB0zR5L@Rg| z+wNDu;eFNP6NeA7C<78=8=agsJ9vLPFqZ5%8b!0oZr6bT``%=ino}c@Q6Kxz&__fz z@vJs8I;R-0)G|;~Ec3Kr;U{63i?r!C`~HL}v4%MqsvKEg`33V1+g~fypea9$Z&><# zXq*~WuE@o(Ix1$PpNzfr^Bbd;JLiO8 z`aQJLS5^@O?_ggUSbTS*q!OPI~jfBMe&125Za%iYgk>xLQu8g zkPx2`-!?0}X0g3~mdTnZb}@)HAHErcxb@%U8~@HGdNy!`XZz{sRsUV7$A>SY2DR35kq-920?n_hx^FhiNrS zsEiOfGaOM?5mVCLcKsF?fS$ZOgfTk48^($H`NY+S!a*PzN zp|fWp5w)rYh43JK_MEpt21oahi{!agM-y%Grzk1zL{&3^v$g(4L) zA-;XpbsJ3Enf1$TP*89*)X+co+J_tS9puXoI%7O^p)yaTAoQfFCh~<3q_%l~MP?=gX~S-xML%;| znA^(t-PmrKOVg5AA9*%o|I|(&7$FJhw4ODfQKL_?$2ZV*Ha7qc^cIkk*4qJ4(J*qF zt7Fgxqle_SzCtB@sXg{0Qp|PUo0uGJY2^`|!QIA&;AA=wU40i zRUgMcqUr44c@k}go||0yDv@iW==rJSJ$+cv<(ePv@QI@l3+u|{Swk%X?>(LQ9x1o4 zoSXCBWeqlf+R!_db8H8_`6bANl|9v7+owHXOBHhBVVQC_V%j7vR^@^1k`QVT%>F2R zHZS1l$Y?V$QMILsKW|s{vv1BAZbkc2!T@%m#%h=Zeud$83XbrYb<9c0aDbGl6PtA9mcW4AssfouSaZB&PL`t3wqyMzb7k;xx!`Pi^Mzd5`x6Xd$CnaL*>C}p`g;63O?ao)MFv&$_s)b(e7J_`DHxNG`@ z;R4YvaH}}pg~(BWB3=#|gH@NmpwsRU#brL@w1afom2=yEb|?K!==IUn92gv%_y1C6wPEOv@?*30B9vf>b>vs@(jSE@^QWi08XpMOk>EaG=Fun#VQZAR=YOKXQQW2}B z1=`%*qT7VxxMyazII_qrJz$WwfVImvZUTMX?ZKP7sl)$|q8NY51D+i)vTJ>F&Tn_M z_?3*%hx7BbWZ3e%EZP=ZXj#Ql-IbpMIF3>GivN)pY{1HNW8z1!>X`{s+{oBZ4=tNU z*{8xFu6sZWCAtjI))$fwenBd1kOc~ETK_83(6adZ<;?w#8tRfxH!~^8Q-(=8@}A^M z$RUp5tF1QyJj!p`R)0+S(}yvs1vors@;vC>w{Pm{dz;$cXm@g zW7bwrYR{gfMPrvd)b)AK$V?HgMY#YoHVf=eDucSnT$Z|${CZYwRd+P;Mqv+8kS4nu zgxI{$*k&a_%{S&ITcZrqXX#C(rST zku~3^qGHM>FjgdCS#8{L3T+{JdbMkMUMib1Df6KIwKG{20In zijSo~00vW7y;6M(!FRim*A)jXS&F~4vzB~kCJOVA5Hgi^MF2BW&$!3`DJ z)4+6K2(^wf5K$1S7{ zWMQ~l^B$4yOes`BLYv2zxumyakU(Tqs3V|a#Vh$>lNmRR2zw!5^^@geOn@fBl;GBO zlq1rz57>1xxC>-QzdoPjAqOs28(CpUj@RL#WZ5gNCzwraY?L#rYz;W+lkVs*h8hLz zvdArb1J25*>UPq580%O6V{EdxPkXtXEd~+V3%W8$YpGtMPpi2rbhcq}H}}*qQ&|0^ zFc!^_x5~0xMX9&IEb{OCoqzn7;n#y<9#$u?`HUs6y@(iJ*xKk0n+#W}*4QfIBs@o5 zyBI8pIStae7wsWiKAkQAlf8}a{6R65C=EMde7|=+yI@39I-%ejM2okB6VRdHtx1S% z@LjN)jyJQP8>b?x&+!|Z_6H%;ata-q)%{B?E#!>o0VWO~m=Sky>V&)B?+oQpCBiSG5QiFz@0+?z1)+-|Tvsh3salz5CWD;&0 z6O%tO2*Q7Br@d%B_F<19>vi>bnH0fsJ+ZLU(*<_fyy*PRviz568W_T`&fwNd*OB@O zw7}iaL2^}{zj#PaVX5_5$|A0I$x=q&7v#q)Y(%H}MB8&iC)84M#qvh-)8=n~*9gYP zbS_xb^2f)i#;-VoT}dbWvGbg!jwr`d{!ROBq{l&#DubA`Sow`4BSf6c8vh#s6%|z5 zGA75jG=n?Fb|Rp;0hDw|{F7Sa1iGsIXIus7$@U05bgs)GHgyz@9s}wjHXoA+?+T66 z;^V{fr7OFTrw4G1;H zFp-YV?Yf=K)5}@5mxDG&jLx$R))|@Gs)9MJs2$v^n9XzJql<~YeLE>xPHkW-vq(3A_X1M&VAFJi#9(T9T2S2NiI>Gj8v3M4c)hV8hm2$4&{@K* z^(?fVSDZ7A>@FiCF@Cq!D+*_x=Io-kHK}#d1E0>jKNvCAdQX-*Vo(G~bb>1AGX~A{9r-goWG+12~zy>l%Gd>?HO1tkd1bxc+`q1ClNaM4v zRkJ1DD$g{*DqLiUmLmFI$DjD^e@f7RQ@V0%|MST;0!A_!cT5y69BrZ+y!0ynsi~<^ z-qcHdJ@1fD_Kt-`3w|y}Bo_g!UQhd()yM2pW$%)2CMV0=d~7qjsaFJTs4)g75YTm1 zTOB#}HQ7~-UR|$WteX<$u^93*lQ*2;IjXA2X4EKk&Co#n22?LN7*TpF#WSk&wxYXr zZ|!JItvR~!mcUUjFeWe48>^TgqI>DOkj2%R7olUC977V<-FblR8nBw`I+GF45oh+{ zP3II@r>{O(cP^b<9vmZz5s>_6vf$jw=^4@hr~gI*!nP7r7r1seaA%P7mV1!P&<_$x zmj|Xg>)>R!e4?Me+7l7oR)Q|0`TN|E`JY_(9~%a@dbB2II#z&fJc&3eu`5T zoGth?&t%NID_12At_RGSvz7v!R|2qC8Dm}=#FY`0i7)6v>SI-hPdNFIsB%-0TYd%0 zQ$@mj^5-rJ?a=SDgxlvoD5!x{Z^FUb0z1k^;^g@rZUY~e)Y7LPvHM9cx#pREm*~;` zn#-}R>&PJf7;KiQW$;mpyp?Eo(O_6lqoM*@a(1^C9p5`5f8WcIH<{?uUtq(MT$L|_ zOdV=rsSZf9qQ`30o_;SlwVRgrAzwoouE~OL%)6U+t1;lWW2ITO+eF9AY%TJvokB~- zzDk^J??fiBS)H`F03TCVkQCHS(E7)V^v4bRtp3!)ii!O-r{JqLQ|7;$@spi#u>dwUV++%*lU|p0ViGy<=tg!Wl;q6< z7UXTS0_dVuXqtI;s*6gmpC(op^J`N3;5TKpT}dE3k!l9L2Of^&%klcsq>ohOtV{tE z<)_eJicQ5rGSEYqi%=B!A+&w7L8!LILSI-lXyB$=x$%*1hMoV0o;&#cwKRs28EJ^_ zF?Do%s7$r5DE=5MZnKIQ%!YnBv8d^;T#+k&21{+1TaU~zxz;PshuInSk302}{m?k0 zWxB7%O_nB>!>BW1_H&$9Dwyv(-vZ*+RDA0Zoyy_06G`^2pz)Bz)GVU!p=wkhVNeS; z1JYrUm5IVN#!Y#hq`vFvg73gdtWbHaQ#sIL{E<~X3U$e@6dgj zMEq=yiCfJ=UylXzF4=5o&;5TtJR0b!Ok@vPh^f8dvl}w(a=XSqMQ%#=WIGY@a7TG@ z!E^nq^AR+<8?#v!Jh!aEz-ouf*+wVXhr9bHa}@3PM;_y9?!3v{I4-}BUvxJceQhkG z95;QV z|5SO{YOdReWu(%Ee>C%0-{vNNDls$0IoQ^^+?C`a-csinHa+5J5@oXF%cAg*Reh=k zFV9h)uWY!t^j*J{iOsufTEE+w3+JAXI#eeOUBKKZ^yczWNhOp&)T-4SPv>sa%~5{NvgTZZWKyNnhnK~W49!9WJ)GCvh_l5Xot+C`CXITNRfua zIiJ__D)+zLQas(|iA=$ziyZsqpD2re|B**>FKn*|0eDp#q6O9#^MJ_SX^Ht(SDcF$ z^I=L3)no% zZISP#qDXK+f4_bZ0I!Jxb%{5v&>|G0b$G2E>yGS z7Y(dn_Dio`fMJJ7?);C+HP&q%M;?6Sf8I-i>(5zLWbochCEM%_ouPE)OX%x7${DK; z9XczI4@iY7SMWm?TyJk#oajDN+W<&OFE}edKwqQ7FTX+K=gK%zaO5oh*1o}v4Ax;Q z^KQjs@QT^fCmCaTnnbUK#B!FfQ-OJ|W??KlN#<}4sAfZ_Fv~_9Jh#jO9OrdYXw#%zlb_-mYCv_&XQEex+5>9PJ0ET2y>mm zQt|K_MuzKkINuy;a3>267rHJ|?U7oSyH1jXB8b+fS~q2RazL4wO>F2q$#^H7#~f=7`w6(f3TUXM&!#c|~RNWFm>FVgm-5jHH%!XbJJr-H2_HRA; zT8cUZg3Pz69SK!z$?pI7u)@tcSYA=le4{;Zv13*a45SWTGk#)&=g;!pF-Lvk;=kS~ z=?SYa$yU;S^d_qm5r0Ee{H%YSb3a*GtQm2*l_HBLmk0!N3vOKd47wE(#a^u>gT7#p zB8LRzpymZ~Elx}UZ+<54`R4_?8+hagru@e9@|-?-?NWgq_AO4^>>(4&>inhIcgLcq znc~W+Wl*ps@8sw#?8nEC+e|lFl6vwnSgDjDMg@IsZ7T{lEGE_^2f5hXu2!hnU3Lbw ztlQR$uA3MgH%6y@WDA{rj>;{Vb=`?Suy0KK2(ci&gttVlaERv2ey1sms;&FANHo6 z!R+34dewJ>)-v?6$YNEu(R9S*A?{;(ygIN(m3ef4M6c7F?UVtb*e}H#PKS>h2f?1S9wdIYf#*P4+m5u%N1a`&&ad5|B=deH zKr-Rci$|Dkf)7y4#Qi8f%5OdkR$N>QVYg z=`3FU9aVaKY9Yu>HE4?;j$PC3AIxC|h%R)RqeoV2ocYM^3hs`DW{Ah60i^APhh4eW z-})stsiu)_*Vdack>4-ZFim^ql~PwT1C1E;tFK%^AM9F6ZN*=Ps16!yn*Yd$kX+$& z)sp4Y@!(&cDpQt2+at*X{yWOFgIuR6<8XB)2E!VA3H_BuY-bpZke6TeIehtKtAg$> zyEJR7hgF2F%k@oU<){fskdoz4N^TUq$r29Pf4?Oz?nt_-_5rA+_=sY>&qh^x_uG3h zM$Weso)mC_=T@VP9&3xIS*>sIQOhvZZ`g%*xnTWf;cQBy?en-sILWt|Ahu9Wc^^d* za27|-9p!p#HC&bCoHH_BPF%P6aA*%^Qa#b5PW3zD#|59CDal$qI_k zL!ZGwXM##4xYh{L6m^&6?}6(I-Bav?FREJH=$$0;Z3Gl1W0_flhM}*p9w= zi6e?3kfo33m|4zgD{r&PjIk8|G>_>;I{BhN9joR3ODboLbel-gXRw)%Ld^S{%aIpT zRx)s3esPO|O-CLjikUXP^PE}!WlTGGec}YyeI?CCZ%%@1Lg$&_Oh}X0XUe4uFu|_6 z4HMKB**iEQ&nfpAI#Y}{GcE6Rc6J1GF6zifv1rx}i8$HTJSbSS%T~fg&b`t5&{JU8$j zzVv~2Nlx~nwxOgCX4K{Y`a1!~`nH|e6Z`a1>B%c0%fe4Yf3~Z0=Y9Lrt3Z%|;&ZxU+M7xp=qB3>Nz|Ry;+1WYBf|F-hIF z+Ajt6f7pA^fTq^04OB%yMZ_ZlO1FW6fb?Dzkq**=bfve@d&dGQQlysvB27v_N)kdx zM0)QD5D`KkAs{sn1ny>zp83wqoSA#?@AHoslkENO_g(8*&wAEcR^kJn95Q?ZY(=*{ zXEyZ2J7rx%TruZIC}BhB1jJ^XBbNqK*T8Ex@k-2+5~9h zaft;#v^bP=I9Ky4AtiyL7wTTK_d_q+x?MTxOpckdoj(pl;ih$}FKuCUtO4ShpKrE6 zo>}XZ1PSFG?`_LLv5R$@-Y?plYL`A3TO2x1$Fms zeL&xGF`o2=C6!c_pJZEP74`dIQ0-}=Dm}2RJ-Rt{z$#VdGm%7(MgRw zd&+nGnF`xv$C5fWt^dme-CDE|2l@8poX3Z6@(I?+-FJ^QURf5zyF{t5l?6jxc5A(i z>bxVJF`2hSdE32c8y6U#&YmPwBK=9|7Z0rO}(b zF)+Z?e~!J&5t(;ah%`WSdZ?j1#^SVs;eL5x6$;5e*`br3|QGHDzEd-=8$aB5rOJ74; z)+EqEUH&Ze; zB>0MSVrUbuSYG#atAaU*uu~up&n`TFe_XlA|C2k}bp^oBCrl}RtW zx%%)XPaFM(JnQ`c-2yPnE5eNC>$XVJj8YA*pgh}YE!<6cw=!QzzBC1$vue25?*=U` zo7RQoa8Sv6?R>b%3;JC0@Tsu8fGa6Y>m=HTScNl;laonH;c{mAhd3cz<@8x*k(+s- zV&rr-71ryaCVx%d+?*e!h17Rbv(PR4sD1*CM&g|0$@!-Puu==NP2Re<6@g9MoW8*% z&``(8;VDHE`d*`oK`lJ0wlOey92g{?0|j~iaQ*DH8>=0tZ1)8ESQP9IYF438H2$sS za$rxWSk@lU!!5CKV!J8Se5prj31lKDnOmowR8ipxLK!g+(OmQ!W}2DVpY^SSfU*Ng z2fQcv3CrymDE#n;vpz^c3ym^&FuvDTd$6%knwwM3q1kQ7W;{!*U+C<+9Vl%*C8Hg- zRJ&pF91svjj}(FKE|hiEf>33*A91Q5<}RIV@S3I))z(iKZZC9_=%<|yC2@`(dUyoA zy~A%~oGBG9LR&#e)3HQzrm4@=h0ef&^ShzwodLj^YyvbPRXQ>4U~Z%>Yi{r>nsx#6 zaW%EU@)`H3;+9E64GDf-0qeb$sP=!u9&UKbkSw@}wr??qZl_WDfW9mDp4nTV^T4$c=gZX5dnV5vj&{qf-&8m@ z-&&t#k7szfF`aw5lTB3{VX;@BnF3v{=VsV5=Y6&Bx?v_{8S5Gp@)7gc-A6ig=L_a~ zqejs(W4BL8cDvjK+PvwJT$qd>*sgzFAVgGa)BAhv!hYUr))Fo)glA$`P?&Q{yapq5%==nA7Xr0E7#hjaPtZ> zoPs)_M^9IGIU=Y$Tu<|y>tUZ{rkVnOp~sU_@sJfBlRz614Vd~mswd8=0nz0gir7OA;j59Bqcf{atX9(FP zO*hJo4P?1~aD}9~;$UZ37c(9kf5fjX)|5HX6q)7MH*l#Zn#co(gofz&l50fOSPvn5E zjtss7y*CWwyYR&>4P@UppshvV&e(^Y9@9oONLfE!?v=4;TJ;89TQkhpwn+3g?!rG! z@pg^}JDJ)Y=FB+KT(p}CHQ@f_evazjfb9M7Fdri~x%xE2LSY-7blOS>r=h-r*8A7L z0C5DG|Ki(;OzMKu86P& z$dJ-Oc`Ft6y^NF2PaT1PDPRT5)g%4(dRBI=D!W+rBUO;zn^%ID|Auof1#?BC!p`g zW5lbqiY%f-SVit>jDw0Zz^Qo*HOQh4_<)h9IT@G6m<7?gPf_@Ng4}Q%R&ZEo5Ufd9QC|aY5_6;oN!dId|phLF%9uocD!B6~B z{rT~RALfoYk+<51FKXqJ|4l6){`Ev1i6c%l!*^obZI?jI>NMSQ4e z){gODOCNdLqZkR!mk8ZR`;~*GG*M90Z@Fin0z>F|%H2yh`EF1U?8dy>ZksH+rg$@QX_ zlXeu>E4A10$Cfi?ZD!vHe)2FfBIzmY(kRn~%vl%0k_L?r8mUwXlu11EL!oqA15s)Q z=q7wh^7L4H-vARXYjNDn(QvyAlmf?ouE<+OaX0mvE|kU-!B91<>~Tr6N3Fh2Vximw z1o1*}%Vv?bG8(+txb;GwG(hlh64+2R&h{x^vC+Z?`*x2naE&l^{-!!t=z?q}J5tKg zes*}}%a(8X8vVGC5TC&mt={d4*y_>Qn^A#;78J#Qc%sS{u;1$MvLtm_zaT>&Hyrqf z8iLdHq@(`p6m~H4L^L6o>Su=VB-7%?qVoGE9~D~br|1WB7!J96ddYVz5uDS^_okP& zW%s~!Qo;N8E%f%Rb^`{-f7|jdo;thV3=K)uY3Gwg2fUb@LXVCGTcq~UkkhAuQZt6B z4NngX`H_L+m;r|3=^P*h`cE(5fW=F0v2(LuSOMMsuPWnH57_aO)RX? zW$6ip^TD|X^59METrd`(oagI0X^6Ez3r>Jifzq+p7gSZd#?Nc4PdNq}vb7YqFa7W~ z@megm@dA#nNZvp<-Xzup_*i0LbthI0%sO+G8N^tG`nWi>zE$|)E7<{yP(Bc z$0dqh%lNeJURdHZcImT1eG}=&_Y#!EIGI$fg0q?qo0Eiqh}r=y*xmTDgu3jBBuQdi zMm}3~Rs#Gau=a}-ed0eG{_h&S3!b|^DDdmi&1;9JsgI-So;Zf_CDIL0Nz(*Jf4AV+ z=ek@+LeqVg8!V4BCGT*zfKL0*_$Dw-+H6sj82Y-fyUEg4>~{x+8OY}qBb!3J77PcxdiFqXRB|KEhk@F+uEk57+l)bQJ?_N^%km&+b+Ye)ZrQC@@)3; zL!Ybr&U)LU2lJf}s_8}B1=;-2x0eKfee&2;%e>}{cN5Y`i`OSwn5YiBH@y-}z09r5 zGNN%2tP@xqYh=<};DT~7cCqe=*qmN?(Jr*DBxPdOFOh|x>x^~^G4pLg&X66fpbrtF zGPo^CV}$Y3BIi_2_X?z|WV}Ux#@xTfr7HEk>K=LmZPuu!9ax(+YtrnS)KXN&^WHvXeD4@nuYajwN{$0AUxrIc@+z#@$;oq zoDW}~j9EeP@s`&Z%XhLPtHg4q$e43UmTT_6O)j)i$idBmH(L+no7|jY5Jlx_hmY@d zH>Dk`AbMHNa2H+T;3c!`lvgpUW&`+4DBns8br7mC`25*|;-X!)PB(8Hv;_}{a^Ta? z8v_e4s)VJJM7hlbBil|Cw9-SdcBCks)424m{O1`UsnSG{pihCKxln2LA$TqpKNp*s z_95@u>QZj2gGW!EO_R;LAapCfpjpO$ge1pLemeghdXv%F0IIOSV!Sa9AD)beC<}UK zSoq#Jv+D4Z2ca>7g8JOqrE2Q4m%hRvO-@+YF}g|ypcxwcexYkP&|$o5)a*p4v2fxw zb+N-&gXK>}s!wDcPz%VvDL#$8-?S+o{-*x7m!ji!W^<@*Uf1nr(7#DAj)l{ofR!Z5 zuYKKVsN{N+#H7gEnBQY$Bc5r7h*;h(KmJ@iLK_}6J<;HOpSPpW2sv1_$GBA-xI$oq zuE4v3{HlwKSX1<2Poe7zFoje)pR{-FK-%@=Y|Xc}*XiTa_|!Yfnni}!bVNRgkF$2i z>M?aTQbf+bJ&aC#?Ox%Ld^+&Xd4+dwG(b!!Ryiwy6?q~(?ecr9BnVxTy9a73{8m*$-I><;{nwdluwzqT713>mySJfrY*Ew8d%!^?*JQ+p3U56 zd6Lr;4Tb@TGA*klq_r5Z@mzPjdM`)XJY9^GNxnf6R`1Z3G&MZyM zGlNMev_%5r1_5*%2n9u)Q=0_sm}Kju*2gV~jraci{CvVT0pRx4n@?XUHvFJC?k-SH z$|OForA^*oQlV{p$MJ1XBP3qR}DIx&-`Y7Wv5rq zz}i<>X1?oqvU!QcU{R45*g$(Fkf1ERzn@)5AGdMg+wl`G^d4hM<=5vwd)MvW;`GIs z$WOSLcBX#wAm!swj&8;}p5eQ}Lgn$&r*2jGHh(76~ zP@Zuwhbzq2wWn*$xO&uKP1JG+-pNpFQgP8oJi9U5N)GA4L~*Hc+a?f^s#y&mSFO9e zFJ_h2^QcxUIm1ny;^(f{iVmY1ol>MQSP4rC%-U?kUfv0* znH9r?L0r<}Odn$&E}V~}QF>+buLQ-_%~6lJSCDc&-I+KNt0aB0PAihf+~K^(F~tV>7lczLP=ea3LkD4r@h z^@(BA$LX~7WiXQ;e0)fsezbW#$|5?U<(8*S_32h1*{NzgQevATZ>yGvm&Aj&K1=u? zhV$n8VCfl*y{A)pSIb(ga0{E?AJP5JaNH9(@7TVck~2R+Jg%`O!t`?6io!* zqL!EB&kYH0~b@zjw{edT(1sa=ddn*`j-3%b+_I#sL^+|b%n9? zk)8t}Y*;N@Uc>16Uhl!?*y)bwG}yf%`0~f78BZhXayN+92!@4}0WWRpedNO1g+z1) z|2(H1EXOh54Q`IkUG=`+c)U&poI>=Yv6nV|&8Z!QgdT>Z8GgTK@_Cyu`G7r$WS3Uy z7R@RdpmAi8cDK_)bVr^`-ea>9Exy&1J{Bld?J-zPdl{|<%y}pH0cu52gZRy;qq573 zBFCY45Y!UsOjoD7TWQ{1?eehoKw~R?G2q=5QLq#KjlAX-eCiE`sT@{9SY@JB+GA;p zVn~7)pm3jei-cVIc>Ld6_|{GA_!}|oi26Y<9b0+nceUtSA%qKvPJwjibdy0tw)-!4%kJc4Ouk;o9^x!~}axMUKbvZ^e9 z!Au$5SOA{Bg1RR*;{M8kTO!1zSi?AOtCQsJY4|F{VQ<3LyF?AhALLsNTTABpU}dB+ z4`Y+Cz{vK)Qx~;W;;t<%{U*;j?UJXw_1b-Xg9fqSSj95r+qsNou_lgXRtj1noHa0f zMHxcQqcx`Bot-Xb_;7NW)aG`mytcd?Za#w|@*MgVnzWqqtl%5uAnOsrJ0%lT;t@0u z=M}BC#_bw+>n8U~ z?6<;58?SxvjH=Dzc~HcHh-8S1x@E3$5KL-=2TXmf@B|-wNXmg4ZUt=-psNMxcy)IV zD-sCqXfDBk4~k6zxV!UgCvFhNyAuFgD=r`HUn17IVeux(h5*m>dX%rJf~;@=H%NfH zRX09m#=#{^WQ)tht(K(r7`nuSGQ+0erDuu^=)XNJ1LZ&UO{#xKBTWC(#@C+|VP()_ zkbp|y&go|shh;_(f+&25X zjY8H>i&Cqnhld0p!5?p*ICVcoAq@_;##A>O^mzopYo~t*iLm;1t1He=RLFxVHECNj zJ#E3NWyz19bRtKUCp_IlddLll~?ZuFut{4I4hfNWp!Q ziYT$J%-rcqK#t&D^O?`yt6U}+!7E?ygurbAE0v;NyNEZv2?w+XZlY5LStjT`wq!wISgl30k{6(d?2;ZCuQXsvL57qY~ z%(U7}r;qwSZy~LcuwiqUdQ`x-vLX7uyWURI3V40Z4xc1oZXpwtz0hFNWqA-)6(j*B zPF*<*ok*U3R3};j%i=d|dSK}j6}Ye}@ArtYywj2P5!6z$=Cjnx@5%Z4Jijo7S^Ard9RHxFFI$|8ndl^Jd)4heVU_aGPcH9wEJ5KQ z4?fCogF*wHpQcp(+TD$9dt5*p#3X>^aTCp9x1H>lOr%;+a?l%R{s^rpL(R@$PHWY_FmS+WUwUiwHQ6tgUegejvN*-~qWT zSg5T!FJ?pnQw9)!eO5TJft-zW@dRs<{KO|B|-F;giDV%rfRDVD`a>g$@N+!tuIg(aa2WAlEgWaVEe5O*K}mKf|AUSH@2I z0A&2Q_={w2MYh zvb0hOZ2J3;$AfVY;d5+q_^IAO;&e(DFGE)n91P;{!*Lr``A3fXh=}+eX-VB6pq+Zu zj~?F#0F|DFap(9UV-}I-GqIABgk1^UQzl(sx%PWgbOrvC)y5fcby^$y4$Y=dY_p|+ zzP+4mTC;ciW%nM<<%Q4Eb)KYgJp5z2ogLtAcsgG2w0Znnw&>@ViJh>*l~$_*CPP^* zxr0NX$&sZI*C??@rRo8Dp1||jVGF4W@LHf|mi_iKliNcNk%z@GLmzx>JlWec9$D1| z2?oG_Jm#TV8hAW4os#Xe8o5F2>g$~ccrE8+t79n<9e~Uznwlu&b)KFT+$LEce2y_*M3t&IQLqIXZZV(slrsz5WCjknoeMbrh zLz%TS5zR733TGgLn<%?Sm!4ghKfh!m5XUXgZbP>}a~L9kirE9QShz)f5!U^k=;>uS zQC8nky=-*xJ5kLzf8rQhrDbrfZ1PcnoINU=??JiR^*(k})?&raJC&9wyEl2spA?D7 zch_YY_VCWWEy`zP)w3E?Cm=n(u_2>O-Kq9-8NdGKcF*G(745nPjh8Zo2`X9iA&UVi z0LWB$KaZuWSr=$;fj-@sG=sl7M``HSc2mk5{7jq_y-B!@*8BuW|34 zCe=J*2abG9SOhwLCRBNdI{5nKXOSz+{o!?rNOlyj7RZl0v%uugbm^WFf(Lv0^PtRpJK)*&1?y^Fazayi~q zhu0`M!C!_f4P>`8^t)KM4rpy@lYH>$AGgL2Yt0XKSNerqN4fTdgTAdXPLVzLnnIgK zoO4edmlS6v{eIXx@)abmNEV(*D@%YtoJplu__ zYKtIOFUJp`&s+6A4SV`nWM^Si@<>}HLb-kUua3d&MZbZ1WVykxSN%33>OKX9#5&n1%X`P}p3T4I=-U}iiGrU&!>fAHB$Zs_ zq&%Z(M_rzU`wcYvNF*RFhweRJY{ujZ51U}=QD2ODI@S@f!{#akD5!UT^uzBg`sc@%*C zQ>D!L)v(zjwQKdMBt&Jj=BwKQPlKev!PD}k(6S~%S_W|!qdp7dgUh~~2lgFx=Q^S+ z){DYIF6@NLYo^@2X6J{xWHwV&B;)NF8x-*Q1>s|v-#6jO)Cv=qRnO!p_gP7u;C1F9 z2$0GXOVfs~PG#IOpzl(xbZF2m@sP5RV z^Qm7}?d6;1MI&ArmfBJ)`X&3Pk3{L`WQW($nb{#0R{^fTnvU=Wm6R*RnIaUJFWZlQ z<^CR5oXeScXoAtMfR+F=bJ_23rucvVICaqV5Utgn^)A~rGL|(dHYDv9pd?BbUqRk? zoS(xLX1Cg1_|wk#-Ld`LEjrxq?n<%+5T1X8a3;(7M9_~6wRd)QZgUW(G_*7}cq${7(>1nRnnuoA^7Qg_jMbPa(X30Y?90y~H6id8h2g{|Qx3ymd*h{OX zB{0MhP{kqkyce7Ev-X2ZxmgXT^wWp88=-i^ln7DYPPp0LKkVY@gyegJ1yJhifZ88{ zhc)kyW!;K=^XL5>mV`)C{nZQLpKmF6ow4tDJ%BE%gEQOHjPZz$Tyrlz9#JdP{Q?-K z%kRaT{6|OvfW@3vWn##MIm^@SnHSaud@2ElYXmp}GYMk~k0V$HSfmNh+s1h>&n{!s z1F}XtC`JGi0YP6^4X6flA{sZNX*(SryOb7{jzhgSBdBDLP5sx2P(Myd%!-AM&i}Z* zBHC#*?sS#zDi3f~?;*~AM3pZg3a>7-eL_uShrV70M4U|eE0B-1W^YDa|HCd?adA_y#Ds^He5=CwY?({=t1u9+Qa_qfQCC$GD0V>W*;Oo zh)HeZ1nYvntn9CM96mtp*=6de17zl;DtfX$I5tQw0DfDH;N&e#Ynt@t7C)3Qeg`U; zaq_GLQoI__ms}QdY5V~&bIx58*OX&zh)o(xmmD5m8-!0R+Z4Y{5<+{^$->zJg=|K@ zob8`yYE*k$nXj$}v|PaEH*Ho7Z`GLZ*}iWmA8i-$W3UgBw2je7O>wl757^(;1#(Ar zg8;Vfio9lrYWFo8GdCV9;n&mLstl#eyjdb2u-!Q44^V(YPP+kw z@@_n=$OQVn`h$h$N<-f@&%QL6>~SQvV3g+vUEgO|@@!w~no~N+bAz@+6OzpnoAGtHESS1}OxkbpB@m?ahG-h4a%pc8 z_yJ;W%lM1`9jD2FU36$;k|Ng~thCo5fGw*nm}mBOW=jBB!cbP*Lg@sjiO=$u%$PLu z=CDrwJ)^)948X_UWOfG;DOsasZUtXq&jP;v>U}2~%tF%iNU(%M5S;lYp zk&cx8UZK7h=B#8Bd{=rmr*OZDasQ9!{F8m$RR#1iA+^k`G(TJNJPHM4WWu>0dH8X1!j zcqJao{`QUsT-;@aN1MhF3Mse-*%*&|jInE4*MCz266}LtA3ftw=A5mr^!l4yO#Qv0Wl1jI_bV3pxZD)w=g$y-3U ztpA|VFQZ`rtDz*1LvBsazj%MQ;k{DS1Y=R{>=)G}*}bK);>K!m2CQ0J;zy{3tniO1 zquFBSalp1_-$?xz(d?g=9{>)`OH9DXYI6B;DDZHp3eq#r+3j-6v13nn zOk3Xz=?(f6)VF=rUphz^SRK;%>Qgb@NrMV468)`fxKzCugyHBzV~sUS9}fxKA%Iw9 zW@~6rVu^(=E3>0i2I4zgHU8_LQf`TT+?nUj%}ba}sWT`Btx0=`lCE^Vb3~xU zBz)XyIJV5(FqnNBC>J!@>i2g65}*zg9yeYyZ0t?d;yhMyFFg+$5vcbDCVNu3s%)#r z3WYOG{({H-ost1q6GYgdxk=&PhY9&VfPsQSI8ewqN;T>gPObT&kC)Xqh!0v&aHTk2 z&?q}{U@Q{_8kU9ld}w>km_+DvUCP2D%h5|i@5_RNmM5|+rwl}UssNx+n%nD$KY6j@Z93RG|E8MpXqtsVVDXf6B=AfQq=lV0Jajlof7#PzA~Dl9nDSlM&vZ8IA??Z$~^r9*5@4nNBox2 zCh!-~R$xB^M7Ay_C3yaO4mJTU3D^4vZ>vl%Bg=h{vi>RQVbi+{W0(opYS@u?W$ClXZAiX)~RCkt(rfLKhA#u43y~L)PRn5RW(w)BO=9A>Yvl zbvIx;B(szWoDRQOZ}G27{wJpU(_iyN3ZQu zLVbMzbFMK{>sgL#-0K7Kbv9$`TkGxXw3R;H=Z?Y_ASg`+FcOlf+mPgBz|ZmB@2Z2> z_wT=@)w@Mc8zMkk6f43LZ$zx{0AHLh;Y%?i#it9yPXYAedp-^CBONHqOLSbL`nmLG z)KSNR@*Sak=lo{R3@+97f=*poLH@6BPa&(%)%ok>@2ZvF?XPgL@U7rwa+z+GZjhE( zr_}$rQHT)m3=7|+v;7e@A(`AFp_`3+?mi~t50e7zj}fYLLOb^4HR++}7hLU+sqwzx zGePuXmS1X1`z-gz!Hr5kED>x5&^FncgpxZdY!)S(AMDA4nV@A)TkXywZP0t zqBXd;_(o!aHaqgc!QS-6%aXxGh2RnpnMK?;X@3apWYZ$eFQY7l_`uRvrezE=8I?Pj zbu}lNI{jXcr(Fx{GkWwrFZ0gvUm)W@BFAIlGJx(NrM=l1AW?olr7!css9=!6zUm*& z5dAj)R3aE~*Y(N%+f{<=`-w_f4%qJGV2PVW~xQ`LK~rROGAGaHwI= z*kC8o0bM|CX~#vqNf-Plku;=pgS~;IojrOK*tK`Fni>$M6Dw!!JRTvM1k@6aKMP4B z23CFwwoz;Eun=(J4z7bIUTBMY0pnwQ@P}RbkGK5Q>&*E$=}hwS@8W*owomE31A1xp zGXtgmt6ec!?Xy$6!S3lmC{$~G+JCoCZm7bjQi3Qujg|^nPThNwHG_eX6v_}Bx2{2L z#Y1Lz0%fL+#XAPwi=YvxYT2cnYs&Ll^g_H0348J_-O2p7fLcQ9rp;y%PH~48=3Sp} zCs=HM3|rG=A9z)7+M^XLKb@`a)$VniE@7bZu6Bi7*PaK90i-b^v)O#rWJ{ z7$jn>8e8IeL*7mj=d)5A?J?gW`0AF9MmkXP!|f_aC`YGzv$2e+9T}LuZ`&Y~Y;)fb z8f2xO-qK;$ok1|GOwfH$sdfsN_q}qV4@6^*5ZC90!33aug_r!}@&B-+4=ZzgBxG%mloGyd9p>A1KkfWIaQjup&qEzY+0yX==CNj};@`A)JU!(8R0)7MG6 z8e{ZG6;B3V>A!^W5rrXhN02zaMld+n%5~z&Mh6B3Cw0gV4SIMxf zS9ezc{hGEI7-N+((9AYl!}+M^-(+yVj@>`@>do_j67$Swn{S+d+}`bQz}Nl*%u-X+ zvAy*T{UOWQ`@yIi{8f!r*KPzK5xrO%WOvrxY!M=bO(|s_vU=1@Q0u;c&T<6LU*QHTVS7J;B z`jV~jJ3Nxi5+Hjh>-FAltc}>eIpu2@eng=k;d91Px!>$Z+_D2N3Z!r0n&8^gzF*@4 zlN;ncP`ZIEPR6Y>fl84H3&Q`)`aI=Qh#GzB(hU}QBwI{}{ zfSFZ*NE009wEdcPy=`%_(s^3!)@40Yk@|eaRx>cmXf-L*wO4~>z?GY?nvOaeas_CW z99JWhpJ%@H+Q;}P#qy<8*mFrr(w6+@01JDv{@vT`{vJeyt^Q{jb!<;+!~CWNoYk;{D+Xw(5QetR9jhwmA7UHlGs{eeupWT89Qis4#h z3~SQv&vf~SrV-e4%NS5+ElaimVt%!DTW{<2r=pc!M9}UY(Dng97^LbR14HnOlJUDK zgM&atz$@|b7TF_Bm6K-4SZ;evC!v+A+lDPeg_6FuH0zRGVY%E4TzrgmTsS-0yPSD5 z#4@O~q2Ml)CD$Kd@=p%@k0V!j_nnHZ?Lv0plcwcADi{=iT2n$({SyieW6|Z3_Ht5P zBK%v>gubsQ;?d|wgIC{_Y;ZI522-!oKTjQ|xlI}1M5P_1Nex@MZ^XfxnK~o-PlrDy z24*m&@z?_TS$^>*iO)tFBHy=(!~1!ar@>1Tsf{K9^5h)5#+gC?Tnl8YFu0BEMgN9{ zA5A*xa=N6Yj-QV($(dHRvl~XpL!KU#w0d6TA_k~Iwr7FTb8WKOz?U>ENlg5KYlyUx zoXC?Vpr~}d9p}1M7i?#F6IUKy9U3g6_CUkrTd8g9n*BzUQUnPFI*gcipD_tp+=AV}2=pR4hZ7_0V!&F6F9EY&-6$Fp6N zmu~P83`wY1P=IIXr+X!_l3TtFIoR>^ODghy=K}yMLk!_baewfZA12|GJJ9VXN|x}(xDRiRAZXY~ z{t^TIvBiFQs-GKhkV}CQXy3=ZW_w(!?^{Ie?EPG3(|ao=tzz{>8M=WwVFsucj-9#B1gHU}4Y`rV z2>}Uih*#g6zTjD(A>^ap+qE|I0d(W2oXK_YrDiu&=O*<9{4U2GqGL)Knn!)inL)Pf zW*pf!Q^WIq24IZ z>lvY65A-iKz{>{!f*kZSkmUX!0pOp%C#Q`^`^5j3PlSKC$jQl+l#-P2-~G+MY)wwi zcF+F~p8n-sP98wzri8V@=KcAC|HrkS>R4m_m!JOcFJGzw>!#yxBzfz9eDj|#nruV&z&64+TGD?F_ShdH%_EyHAXb0(tPao%0 zr09V5cTvt?o5RgxX@)3Hcu+1mx|javpZFs$&iRn@q^`Ja$F^+RB)b#rH8$^oWe~i( z;@AmF9R)=bEjRVp>^RdIQzgj87tsqQvVPy+<>lwAK6nr@@hO_dRCxF9 z^iBjE@{aWivctU7-iuw(@_AliVRx@M24YpJnIYEstu5+V8K%bFst5!%9w#n4ABkHA1%`U@H#cFU3@9f+*Wu#aK|$GS7QodOlw-;jw=V_w_l@o@(z7 z)Bj{DPN_f6EMhNgi#?JJAL#%Ap~!Psh&f*npo9w4@Q3ZY!Asm_c=7Ek>qJ_Z>0_3K zzoHTUxyPT-*ehr$L%Xoo*kf3LF3UaU6?d6Oi*JjQoUa{;PJ!M(ou5Wc=EuyzSjG)3 zJ4Vy^CjCNw*AUFaW+O(nAl(ciQkr%XXfniOW-{t2;8-#PG@H6E4OQyP?-hbvJc;j`qo;c}ydO6)fp-X(Z-U4bV);zTFb6avHDVA+duQ9t)B?MCYXv}5u z3eZ3%F^>nEZ@zUOS+k!uRODZ27UN23$eDi6WOtY6e#SW>T|4dxAY1+B4}BhAM(ioyuLkgAm^F>hleemX9(lvOtcjai`tQJwb75JnNr^O zDKuIlK(B@eOO1qqs?{nj;E>+n=hwP$;Q~aJav}NqSP@cRV$YY06NhHU?f zx~*m>6`u#R7ZgAXMAM}*yx68*_Sp_kPD|LtreZp(?uKxoi#5C zz84)jb@Oc-%bA4TY(-uv&pzzw-V1d(#0AU63ia(|Vpi2L zWL5S@>V*YkWo;96hYCNIKDDiV*ArliIG7TF3fY**h>qn<=U_{_PU3+y#9jx zP756m8l0BrlXuHc97vDCO=p%xZ*BVY%aT45%A2w{t-a}Y|X{bEb>7Q8+|Gk`7kx&poSlWppB{&ttbq{!xl7H#-D}$$QN?3 zslHalZSk^=*Zd8sveNC)v!!r-L#vNR%UZvjtpsk4eZpRd;c|m34RzP^AKHSx#0TdO%8>2G|;7~osPpOX+JAv&XvRT zvYmBKErCDF7+EIFU6gM{_WE42Ii!9qSgtsiQPG6si?2~h-!1!Oo(hJ!5j}0b0`LJp zs$^_@97j~M2w2LWsP%R-*WssJx9x*menw5_vPIq_t;W8fVR}H$60%V{SlxSf_t|=w z>6vy}@?x$#CYXdBo!7nTiXSQRe@Q&pTaEQvRp&=uFF!SoaK$jLrris^<(2Z~=;arM67oNFU#`0P}NLEyyI|MHv^ z!W8OGn(w}QI<@{!2m7bJjEUy;1i3kazkT< zzZjZTSz}RZ5-Z)~W*5gT#2P$;=D!{nbX}Mn6mSYA)2W9tEKTWau6!z@1s^VGv1d@v z&jjo}mPvuxWJ=iDV^LQ*$FI@U=Gz%(Q7*`N4$dl=6w4rdHe!DKKpJrhL|<$UzFrUL6>liG#RJMX0nuzgVHF z9RwdYhkdC7BXr(@THV3(5_lUW1()7*(F&kOt{eC5{l!NnaAzY^pGljys3bTr8l_f* zu05JXoWHDL8+8-aRB&vD!O--#B1yM0v{wOK-#`eT#aXZ%Nr)g@X|$Hkr_Y8P&}%Pj}3&lX+&tCRBc z;Zz&G`@o3^n09hsoc7%SeK0h;Bgmg6#*g14b*6*{ZAI+#7#{Mw`l816raeZv)1S`` z8DoAFwr||%?yW37i*5sPmRpm2fhxQ%2AB8++Lm(3_bW!LxiKhePMBZbDEy(bKNAS zn@(=$G0HP}i~M>1F+*|BF-TMTDeyy*I5K-<4CLccGql+xGc9A8TU!F9o@5buT|(-|7Vu4q1~XfoZ5+Bt|X+(<4#1mnVY zRze#KE~q&XW7VMA<;V|LK7bl+aaqA@_%ZQyv+OKsWY7o4EL2eesJw`0iagG2OwOmr zleb^rvWmnqEb2N<^!H}GwLrLZmrZOfG?uQL_U}wF2!C7U2$33U7&;J+%uLSS=*EdH zV5+#@^eB2b%xw;nu}Lf2HvRjCB);zPCd-BAi%BmQU%Q(#7N}>>38IWuwIsB#HDx%m-Q<=@QJsdaB4Dy-VSkeUwnRYtM8CL^i| zT%s%iye@I5tb&Ke#mp%@9irm8=&_L#TMeX{ZuEONOw;+dIQ5ps5zDQG4A+>Er()3~ zwchLVo$k0y-vvIyQ1Wp0LJM*sr2kcQ`6<_6oHVA0JgMZ}|7~@#_?cLYQJClF*+aa9 ztsK*T^#*{Iu?k1KlJ%FTL+_Nl6yu^A-GWL@NjpWQqq1C3jnb}Q@+PWxO@CW*ENtRC zxpr}~Vd-#%uXsE^L+g@c4SptCyzjEC2wg}1*oVOF2Dbewc!@(#nh+OVhinq%yslEs zZKexKu$qlN_TO472hbD4+TG8*c`L;#l@wMw=}vff7P6L|^i^YIMy~1M+Qkpo)>N(_ z<;`j&4wkd>fi&%dh5n$HJi#Oa%VA>~ivPqVCC)i}(*B3YxtN7HiSRx~`?3I3b2!ES z)83heC6)GJe8!rZbjm3;%>*;2anjVLa!E6^My)KJR9pfz^-V-`!JR;8wcJZHbIo$s zgvO7%WHH54Oq+^QPn5 zBo3%%5ekS=W|uF>H;@;acTMm_F zQ>j$zS*=OkarB?F7qTydi`I7W}|xg;dw#UgV9PJz(o6+z+n%`KXF(BVQ;b~}z= zb^lRDjeSz!nR;Mz6x&=$z0G`lM~;UA3Hy^VRv$-2y_TNQ~P)YCdF8&6>6B@+;T)IFKvIo31@+C6PGmi8ih92l6sMg(%+@0j{ES6 zsGh`(;ujUB!o4&H!?2gQIaOY5FCA*R6=B$gWl8{TYJu4BFq9tKY8cWaUY@OcDQ*Ft zmz$@dT7fqLGdxueUx}R}?WRCEZyjOjX|DlVmQA)v^K(K9h}2~-YH+V3LI>umnPIb@ zZfRKZ&~*OJ_S3H9L)I15ve&(}ZY8UeD?(~jX=)rRSCZ{kEog+sK#A^A2*^Sen&|DV z(bwn=Ci*-qA>3gNjbH=%{A;AXU`VnO!m^O;1_ire;{8e?#ui{6F_eo$)oL0JzloP- z_Zcqp4dCH>nO)YH{zG;iNet(A%a?MVz>6gGaAC(aUdZ0HFaau4egj#vW-Pf~XT9}n z4wU!ZDSQquKW^uC5_}=jA#55kR_dp9Yfv7m-lj`X8+!MkY zkvy)7tN(NHPsvAP&5M4rx9#@AzTuZj`TN#7O5Uf1FVaf=M_-)!oiN+eepGmoT8wDV zM3n=%>fypZDY! zhxXEKuI#{6s(iiRN!jHgSE++vm@yV3_x!Y?CiQTt1PZ4{lTdbPb##|Qbt*hszG7@- zLS>x>q6F(2c!3@^=WKVQz;iaWh^hk)JnET9o@;2mGf+Y7@Qq(P`EI;gB1f# z@Y{#SxgSXh@AMpUUSL_(%8FMp(oH08_-=@^DBG%?i$eFt@!KGxpbLwE#EZpm;`?$? z3WQny?6Q+`uMo(7t!bk}1}xiApZBjK>^h?5wSBE4eT00@Y{zkFX0%h-=neFq%IuQ# zHVeibb1-t-%4w4hpi97P(k4$l^3dpIZiES%n8_}g4+Q=0@uo$m?ZJg0c4w{y&#A#r zT^VwA{20uMm#1%U7+Op(H~r@#;16E;$lV7B^Z3R@M1OgB=#h$$z;r`gSYocVK8Gk4 zBnw2gwHyjNHBJ#(i)6Ijf@+HmaPt!fe-*!Wd|PbZCDx<_^^hs*aPka7JA?k7Uk1@t zw`?xj!MPOZvZ4=Di+xn5EgwqEL76oqQ@3qgU2E^QC3FqZVoEd}}*D>X~1(1bKypL0Jb?9b|F)_^3^ zVK+m2p!N+Jq4XU<)f;cftx|1_S5^l0p~lF@S@bZhqkFonAVykMBUkM-^)Y<5Lv_G~ zi-VP#)K!jO)7`x`bCSMD!x9oOCl!n?1)Y9CpP%Wpqh$qkrXVtRB&u1(*_Ln#HQcC3 z8MVgSD#z!}(^GZ4-Nd3*0q=B%K}AqcfVj9U7O^8n@GaB#~^_-^TYa!rO~LWr|4O>n@EO;dJR zT85aB5$K%X2Oq3F*f{4@SUY)v6{oG-#>(e&Q*O}OUa?G}Bu7VB&)ibj_D2@(oIH?V zksTi!=bLXU)}Bal?5XC`ESux;tLE_yFvs(RBU@^DzC*KCb+-Vm`Yer#M>Cm$aeZ)R zm3yN7D7&9Ba7mYy-I8nkZnNIdkIm}PFc=k!&hZMcf~*E99SPfSJ;M2zOSrTe#nF^ovH%v(ZkjW$ts3VMY!Jfk7Vgw>ID+7e*&)^KbXBSO|JMD%h>TrwC zmzrhT8&eS7O^=8;?k)QvQN1|>BW;wVJd;szzzETOTYt42cjtxg&PwiU{9qQDifXD8 z*WL%prLyUL*z=}XMw2)}*`oaekBEObMOk-~9$D?OQhZ_Bdwn9XA-s0@U4A=@uCmB6@94wGQqhhI723gKC{- zUFXPZoy0}hrZq$32Njw7dOS8oeaJ;?*%W+Yuo~gA4+gx$*Ph=j;Z4Hv$2{u)lax4c zSYXxXtdQ8433gefCxm&6pHpbw=;rR_1#MsQ0qgUe6YkvirAe3J41UpMY9_6wp&L~{ z*38oL=!w}qej41xwsu*{;PG^cg(Vlg8kTwaF2HV7f*;Z0LrocjY>@}$kWg-tIYmy$ zLtC1Wq|~yYe&uwSd5Q#Tvg>R%fuPlyuVE%R7Yj1f6$dq}8cc&hpn<8!!{|rEmTIP6 z!Bu$6(YS4EbxVx1S|v8i4LZkj{MfNuuT8nJcjPw|sH_{in^+9HQz_VBUhOZwa(vdU zS7PBt?BG*=-pw)g)@yFZ>{3+!jupB(ur(Ik-Po zH;4f_{qf5~!kIdk8pX_*fA13?2h-ub2Vei!KRE|@SDp*;rs@|F`^VLNW^Qk6%*_^Z zjShdl0{-@h*Z)6477U{t4&2))1*)Z@3zi0xIYmA@*G?e+WA9ly5;JvTTn}G1Up=;%GU3``wj3pX=?c!;n?}B{{@l)b=m*` literal 0 HcmV?d00001 From e0546aae058f47c6fcbb96edf0ab00410cb2d6c7 Mon Sep 17 00:00:00 2001 From: Abhay-soni-developer Date: Fri, 15 Sep 2023 11:59:45 +0530 Subject: [PATCH 010/227] fixed changeset Signed-off-by: Abhay-soni-developer --- .changeset/perfect-cobras-bake.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/.changeset/perfect-cobras-bake.md b/.changeset/perfect-cobras-bake.md index e0a4cff04d..c6b8f99d18 100644 --- a/.changeset/perfect-cobras-bake.md +++ b/.changeset/perfect-cobras-bake.md @@ -1,9 +1,7 @@ --- '@backstage/plugin-jenkins-backend': minor '@backstage/plugin-jenkins': minor -'example-app': minor --- Added JobRunTable in EntityPage -Added JobRunTable component in Jenkins frontend plugin. Added new Route and extended Api to get buildJobs. From 768d521c794b3969efd69a84587ec8e5762c0d29 Mon Sep 17 00:00:00 2001 From: Ilya Katlinski Date: Fri, 15 Sep 2023 09:22:06 +0200 Subject: [PATCH 011/227] feat: add publish:gitlab project settings support Signed-off-by: Ilya Katlinski --- .../builtin/publish/gitlab.examples.ts | 21 ++++++++++ .../actions/builtin/publish/gitlab.test.ts | 41 +++++++++++++++++++ .../actions/builtin/publish/gitlab.ts | 15 ++++++- 3 files changed, 76 insertions(+), 1 deletion(-) diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.examples.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.examples.ts index ac259866e3..c010042701 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.examples.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.examples.ts @@ -68,4 +68,25 @@ export const examples: TemplateExample[] = [ ], }), }, + { + description: 'Initializes a git repository with additional settings.', + example: yaml.stringify({ + steps: [ + { + id: 'publish', + action: 'publish:gitlab', + name: 'Publish to GitLab', + input: { + repoUrl: 'gitlab.com?repo=project_name&owner=group_name', + settings: { + ci_config_path: '.gitlab-ci.yml', + visibility: 'public', + initialize_with_readme: true, + default_branch: 'main', + }, + }, + }, + ], + }), + }, ]; diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.test.ts index 994d1c580a..53b525a6bf 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.test.ts @@ -77,6 +77,26 @@ describe('publish:gitlab', () => { input: { repoUrl: 'gitlab.com?repo=repo&owner=owner', repoVisibility: 'private' as const, + settings: { + ci_config_path: '.gitlab-ci.yml', + }, + }, + workspacePath: 'lol', + logger: getVoidLogger(), + logStream: new PassThrough(), + output: jest.fn(), + createTemporaryDirectory: jest.fn(), + }; + const mockContextWithOptions = { + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + repoVisibility: 'private' as const, + topics: ['topic'], + settings: { + ci_config_path: '.gitlab-ci.yml', + visibility: 'internal', + topics: ['topic1', 'topic2'], + }, }, workspacePath: 'lol', logger: getVoidLogger(), @@ -162,6 +182,7 @@ describe('publish:gitlab', () => { namespace_id: 1234, name: 'repo', visibility: 'private', + ci_config_path: '.gitlab-ci.yml', }); }); @@ -179,6 +200,26 @@ describe('publish:gitlab', () => { namespace_id: 12345, name: 'repo', visibility: 'private', + ci_config_path: '.gitlab-ci.yml', + }); + }); + + it('should call the correct Gitlab APIs when using project options with override of visibility and topics', async () => { + mockGitlabClient.Users.current.mockResolvedValue({ id: 12345 }); + mockGitlabClient.Namespaces.show.mockResolvedValue({ id: 1234 }); + mockGitlabClient.Projects.create.mockResolvedValue({ + http_url_to_repo: 'http://mockurl.git', + }); + + await action.handler(mockContextWithOptions); + + expect(mockGitlabClient.Namespaces.show).toHaveBeenCalledWith('owner'); + expect(mockGitlabClient.Projects.create).toHaveBeenCalledWith({ + namespace_id: 1234, + name: 'repo', + visibility: 'internal', + topics: ['topic1', 'topic2'], + ci_config_path: '.gitlab-ci.yml', }); }); diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.ts index dbab7b11b8..302d006e05 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.ts @@ -38,6 +38,7 @@ export function createPublishGitlabAction(options: { return createTemplateAction<{ repoUrl: string; defaultBranch?: string; + /** @deprecated in favour of settings field */ repoVisibility?: 'private' | 'internal' | 'public'; sourcePath?: string; token?: string; @@ -45,7 +46,9 @@ export function createPublishGitlabAction(options: { gitAuthorName?: string; gitAuthorEmail?: string; setUserAsOwner?: boolean; + /** @deprecated in favour of settings field */ topics?: string[]; + settings?: Record; }>({ id: 'publish:gitlab', description: @@ -63,6 +66,7 @@ export function createPublishGitlabAction(options: { }, repoVisibility: { title: 'Repository Visibility', + description: `Sets the visibility of the repository. The default value is 'private'. (deprecated, use settings instead)`, type: 'string', enum: ['private', 'public', 'internal'], }, @@ -105,12 +109,19 @@ export function createPublishGitlabAction(options: { }, topics: { title: 'Topic labels', - description: 'Topic labels to apply on the repository.', + description: + 'Topic labels to apply on the repository. (deprecated, use settings instead)', type: 'array', items: { type: 'string', }, }, + settings: { + title: 'Project settings', + description: + 'Additional project settings, based on https://docs.gitlab.com/ee/api/projects.html#create-project attributes', + type: 'object', + }, }, }, output: { @@ -145,6 +156,7 @@ export function createPublishGitlabAction(options: { gitAuthorEmail, setUserAsOwner = false, topics = [], + settings = {}, } = ctx.input; const { owner, repo, host } = parseRepoUrl(repoUrl, integrations); @@ -191,6 +203,7 @@ export function createPublishGitlabAction(options: { name: repo, visibility: repoVisibility, ...(topics.length ? { topics } : {}), + ...(Object.keys(settings).length ? { ...settings } : {}), }); // When setUserAsOwner is true the input token is expected to come from an unprivileged user GitLab From ec8c69d9c38665488bc9aafa5e0f5d5efe0a03e1 Mon Sep 17 00:00:00 2001 From: Ilya Katlinski Date: Fri, 15 Sep 2023 10:13:59 +0200 Subject: [PATCH 012/227] feat: add publish:gitlab branches configuration support Signed-off-by: Ilya Katlinski --- .../src/scaffolder/actions/builtin/helpers.ts | 4 + .../builtin/publish/gitlab.examples.ts | 27 ++++++ .../actions/builtin/publish/gitlab.test.ts | 87 ++++++++++++++++++- .../actions/builtin/publish/gitlab.ts | 73 +++++++++++++++- 4 files changed, 187 insertions(+), 4 deletions(-) diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/helpers.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/helpers.ts index 5ac92128ca..1ea3a13687 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/helpers.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/helpers.ts @@ -251,3 +251,7 @@ export function getGitCommitMessage( export function entityRefToName(name: string): string { return name.replace(/^.*[:/]/g, ''); } + +export function printGitlabError(error: any): string { + return JSON.stringify({ code: error.code, message: error.description }); +} diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.examples.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.examples.ts index c010042701..a2f5a20745 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.examples.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.examples.ts @@ -89,4 +89,31 @@ export const examples: TemplateExample[] = [ ], }), }, + { + description: 'Initializes a git repository with branches settings', + example: yaml.stringify({ + steps: [ + { + id: 'publish', + action: 'publish:gitlab', + name: 'Publish to GitLab', + input: { + repoUrl: 'gitlab.com?repo=project_name&owner=group_name', + branches: [ + { + name: 'dev', + create: true, + protected: true, + ref: 'master', + }, + { + name: 'master', + protected: true, + }, + ], + }, + }, + ], + }), + }, ]; diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.test.ts index 53b525a6bf..59d05eb226 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.test.ts @@ -45,6 +45,12 @@ const mockGitlabClient = { ProjectMembers: { add: jest.fn(), }, + Branches: { + create: jest.fn(), + }, + ProtectedBranches: { + protect: jest.fn(), + }, }; jest.mock('@gitbeaker/node', () => ({ Gitlab: class { @@ -87,7 +93,7 @@ describe('publish:gitlab', () => { output: jest.fn(), createTemporaryDirectory: jest.fn(), }; - const mockContextWithOptions = { + const mockContextWithSettings = { input: { repoUrl: 'gitlab.com?repo=repo&owner=owner', repoVisibility: 'private' as const, @@ -104,6 +110,33 @@ describe('publish:gitlab', () => { output: jest.fn(), createTemporaryDirectory: jest.fn(), }; + const mockContextWithBranches = { + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + repoVisibility: 'private' as const, + branches: [ + { + name: 'dev', + create: true, + ref: 'master', + protect: true, + }, + { + name: 'stage', + create: true, + }, + { + name: 'perf', + protect: true, + }, + ], + }, + workspacePath: 'lol', + logger: getVoidLogger(), + logStream: new PassThrough(), + output: jest.fn(), + createTemporaryDirectory: jest.fn(), + }; beforeEach(() => { jest.resetAllMocks(); @@ -166,6 +199,8 @@ describe('publish:gitlab', () => { name: 'bob', visibility: 'private', }); + expect(mockGitlabClient.Branches.create).not.toHaveBeenCalled(); + expect(mockGitlabClient.ProtectedBranches.protect).not.toHaveBeenCalled(); }); it('should call the correct Gitlab APIs when the owner is an organization', async () => { @@ -184,6 +219,8 @@ describe('publish:gitlab', () => { visibility: 'private', ci_config_path: '.gitlab-ci.yml', }); + expect(mockGitlabClient.Branches.create).not.toHaveBeenCalled(); + expect(mockGitlabClient.ProtectedBranches.protect).not.toHaveBeenCalled(); }); it('should call the correct Gitlab APIs when the owner is not an organization', async () => { @@ -202,16 +239,18 @@ describe('publish:gitlab', () => { visibility: 'private', ci_config_path: '.gitlab-ci.yml', }); + expect(mockGitlabClient.Branches.create).not.toHaveBeenCalled(); + expect(mockGitlabClient.ProtectedBranches.protect).not.toHaveBeenCalled(); }); - it('should call the correct Gitlab APIs when using project options with override of visibility and topics', async () => { + it('should call the correct Gitlab APIs when using project settings with override of visibility and topics', async () => { mockGitlabClient.Users.current.mockResolvedValue({ id: 12345 }); mockGitlabClient.Namespaces.show.mockResolvedValue({ id: 1234 }); mockGitlabClient.Projects.create.mockResolvedValue({ http_url_to_repo: 'http://mockurl.git', }); - await action.handler(mockContextWithOptions); + await action.handler(mockContextWithSettings); expect(mockGitlabClient.Namespaces.show).toHaveBeenCalledWith('owner'); expect(mockGitlabClient.Projects.create).toHaveBeenCalledWith({ @@ -221,6 +260,48 @@ describe('publish:gitlab', () => { topics: ['topic1', 'topic2'], ci_config_path: '.gitlab-ci.yml', }); + expect(mockGitlabClient.Branches.create).not.toHaveBeenCalled(); + expect(mockGitlabClient.ProtectedBranches.protect).not.toHaveBeenCalled(); + }); + + it('should call the correct Gitlab APIs for branches and protectd branches when branch settings provided', async () => { + mockGitlabClient.Users.current.mockResolvedValue({ id: 12345 }); + mockGitlabClient.Namespaces.show.mockResolvedValue({ id: 1234 }); + mockGitlabClient.Projects.create.mockResolvedValue({ + id: 123456, + http_url_to_repo: 'http://mockurl.git', + }); + + await action.handler(mockContextWithBranches); + + expect(mockGitlabClient.Namespaces.show).toHaveBeenCalledWith('owner'); + expect(mockGitlabClient.Projects.create).toHaveBeenCalledWith({ + namespace_id: 1234, + name: 'repo', + visibility: 'private', + }); + expect(mockGitlabClient.Branches.create).toHaveBeenCalledTimes(2); + expect(mockGitlabClient.ProtectedBranches.protect).toHaveBeenCalledTimes(2); + + expect(mockGitlabClient.Branches.create).toHaveBeenCalledWith( + 123456, + 'dev', + 'master', + ); + expect(mockGitlabClient.Branches.create).toHaveBeenCalledWith( + 123456, + 'stage', + 'master', + ); + + expect(mockGitlabClient.ProtectedBranches.protect).toHaveBeenCalledWith( + 123456, + 'dev', + ); + expect(mockGitlabClient.ProtectedBranches.protect).toHaveBeenCalledWith( + 123456, + 'perf', + ); }); it('should call initRepoAndPush with the correct values', async () => { diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.ts index 302d006e05..68205d05e9 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.ts @@ -18,7 +18,7 @@ import { InputError } from '@backstage/errors'; import { ScmIntegrationRegistry } from '@backstage/integration'; import { createTemplateAction } from '@backstage/plugin-scaffolder-node'; import { Gitlab } from '@gitbeaker/node'; -import { initRepoAndPush } from '../helpers'; +import { initRepoAndPush, printGitlabError } from '../helpers'; import { getRepoSourceDirectory, parseRepoUrl } from './util'; import { Config } from '@backstage/config'; import { examples } from './gitlab.examples'; @@ -49,6 +49,12 @@ export function createPublishGitlabAction(options: { /** @deprecated in favour of settings field */ topics?: string[]; settings?: Record; + branches?: Array<{ + name: string; + protect?: boolean; + create?: boolean; + ref?: string; + }>; }>({ id: 'publish:gitlab', description: @@ -122,6 +128,35 @@ export function createPublishGitlabAction(options: { 'Additional project settings, based on https://docs.gitlab.com/ee/api/projects.html#create-project attributes', type: 'object', }, + branches: { + title: 'Project branches settings', + type: 'array', + items: { + type: 'object', + required: ['name'], + properties: { + name: { + title: 'Branch name', + type: 'string', + }, + protect: { + title: 'Should branch be protected', + description: `Will mark branch as protected. The default value is 'false'`, + type: 'boolean', + }, + create: { + title: 'Should branch be created', + description: `If branch does not exist, it will be created from provided ref. The default value is 'false'`, + type: 'boolean', + }, + ref: { + title: 'Branch reference', + description: `Branch reference to create branch from. The default value is 'master'`, + type: 'string', + }, + }, + }, + }, }, }, output: { @@ -157,6 +192,7 @@ export function createPublishGitlabAction(options: { setUserAsOwner = false, topics = [], settings = {}, + branches = [], } = ctx.input; const { owner, repo, host } = parseRepoUrl(repoUrl, integrations); @@ -247,6 +283,41 @@ export function createPublishGitlabAction(options: { gitAuthorInfo, }); + if (branches) { + for (const branch of branches) { + const { + name, + protect = false, + create = false, + ref = 'master', + } = branch; + + if (create) { + try { + await client.Branches.create(projectId, name, ref); + } catch (e) { + throw new InputError( + `Branch creation failed for ${name}. ${printGitlabError(e)}`, + ); + } + ctx.logger.info( + `Branch ${name} created for ${projectId} with ref ${ref}`, + ); + } + + if (protect) { + try { + await client.ProtectedBranches.protect(projectId, name); + } catch (e) { + throw new InputError( + `Branch protection failed for ${name}. ${printGitlabError(e)}`, + ); + } + ctx.logger.info(`Branch ${name} protected for ${projectId}`); + } + } + } + ctx.output('commitHash', commitResult?.commitHash); ctx.output('remoteUrl', remoteUrl); ctx.output('repoContentsUrl', repoContentsUrl); From 3e3bf5311e7cef01a5a2609c79c2a410833c3d3b Mon Sep 17 00:00:00 2001 From: Ilya Katlinski Date: Fri, 15 Sep 2023 10:18:10 +0200 Subject: [PATCH 013/227] doc: generate api reports for scaffolder plugin Signed-off-by: Ilya Katlinski --- plugins/scaffolder-backend/api-report.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/plugins/scaffolder-backend/api-report.md b/plugins/scaffolder-backend/api-report.md index 17e13131cf..46960d4358 100644 --- a/plugins/scaffolder-backend/api-report.md +++ b/plugins/scaffolder-backend/api-report.md @@ -679,6 +679,15 @@ export function createPublishGitlabAction(options: { gitAuthorEmail?: string | undefined; setUserAsOwner?: boolean | undefined; topics?: string[] | undefined; + settings?: Record | undefined; + branches?: + | { + name: string; + protect?: boolean | undefined; + create?: boolean | undefined; + ref?: string | undefined; + }[] + | undefined; }, JsonObject >; From dea0aafda7f6aba3fe763bc99054af09744a157b Mon Sep 17 00:00:00 2001 From: Ilya Katlinski Date: Fri, 15 Sep 2023 10:23:26 +0200 Subject: [PATCH 014/227] doc: update changeset and bumped minor version Signed-off-by: Ilya Katlinski --- .changeset/khaki-tools-tease.md | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 .changeset/khaki-tools-tease.md diff --git a/.changeset/khaki-tools-tease.md b/.changeset/khaki-tools-tease.md new file mode 100644 index 0000000000..c066aaf6e0 --- /dev/null +++ b/.changeset/khaki-tools-tease.md @@ -0,0 +1,9 @@ +--- +'@backstage/plugin-scaffolder-backend': minor +--- + +Updated publish:gitlab action properties to support project and branches level configuration. +Project level configuration is based on the Gitlab Project Create API available options. Is is available via `settings` property. +Branch level configuration allow to create additional branches and make them protected. It is available via `branches` property. + +Marked existed properties `repoVisibility` and `topics` as deprecated, as they are covered by `settings` property. From d7b1d040e9ba86b864fc8c2979f585ef629cf3ad Mon Sep 17 00:00:00 2001 From: Abhay-soni-developer Date: Fri, 15 Sep 2023 14:00:37 +0530 Subject: [PATCH 015/227] changeset fix Signed-off-by: Abhay-soni-developer --- .changeset/spicy-poets-sell.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/spicy-poets-sell.md b/.changeset/spicy-poets-sell.md index 28ef965282..2f08c1bcf9 100644 --- a/.changeset/spicy-poets-sell.md +++ b/.changeset/spicy-poets-sell.md @@ -2,4 +2,4 @@ '@backstage/plugin-jenkins': minor --- -Extend EntityJenkinsContent to recieve columns as prop +Extend EntityJenkinsContent to receive columns as prop From 0f76f34081ae20b1711a72ad8d1aa94ca47e9cbb Mon Sep 17 00:00:00 2001 From: Ilya Katlinski Date: Fri, 15 Sep 2023 12:15:56 +0200 Subject: [PATCH 016/227] feat: add publish:gitlab variables configuration support Signed-off-by: Ilya Katlinski --- .changeset/khaki-tools-tease.md | 8 +- plugins/scaffolder-backend/api-report.md | 12 +++ .../builtin/publish/gitlab.examples.ts | 29 +++++++ .../actions/builtin/publish/gitlab.test.ts | 55 ++++++++++++ .../actions/builtin/publish/gitlab.ts | 85 +++++++++++++++++++ 5 files changed, 186 insertions(+), 3 deletions(-) diff --git a/.changeset/khaki-tools-tease.md b/.changeset/khaki-tools-tease.md index c066aaf6e0..a133a881bb 100644 --- a/.changeset/khaki-tools-tease.md +++ b/.changeset/khaki-tools-tease.md @@ -2,8 +2,10 @@ '@backstage/plugin-scaffolder-backend': minor --- -Updated publish:gitlab action properties to support project and branches level configuration. -Project level configuration is based on the Gitlab Project Create API available options. Is is available via `settings` property. -Branch level configuration allow to create additional branches and make them protected. It is available via `branches` property. +Updated publish:gitlab action properties to support additional Gitlab project settings: + +- general project settings provided by gitlab project create API (new `settings` property) +- branch level settings to create additional branches and make them protected (new `branches` property) +- project level environment variables settings (new `variables` property) Marked existed properties `repoVisibility` and `topics` as deprecated, as they are covered by `settings` property. diff --git a/plugins/scaffolder-backend/api-report.md b/plugins/scaffolder-backend/api-report.md index 46960d4358..dae0cd536b 100644 --- a/plugins/scaffolder-backend/api-report.md +++ b/plugins/scaffolder-backend/api-report.md @@ -688,6 +688,18 @@ export function createPublishGitlabAction(options: { ref?: string | undefined; }[] | undefined; + variables?: + | { + key: string; + value: string; + description?: string | undefined; + variable_type?: string | undefined; + protected?: boolean | undefined; + masked?: boolean | undefined; + raw?: boolean | undefined; + environment_scope?: string | undefined; + }[] + | undefined; }, JsonObject >; diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.examples.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.examples.ts index a2f5a20745..52ced84ac8 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.examples.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.examples.ts @@ -116,4 +116,33 @@ export const examples: TemplateExample[] = [ ], }), }, + { + description: 'Initializes a git repository with environment variables', + example: yaml.stringify({ + steps: [ + { + id: 'publish', + action: 'publish:gitlab', + name: 'Publish to GitLab', + input: { + repoUrl: 'gitlab.com?repo=project_name&owner=group_name', + variables: [ + { + key: 'key1', + value: 'value1', + protected: true, + masked: false, + }, + { + key: 'key2', + value: 'value2', + protected: true, + masked: false, + }, + ], + }, + }, + ], + }), + }, ]; diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.test.ts index 59d05eb226..4a6019a48e 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.test.ts @@ -51,6 +51,9 @@ const mockGitlabClient = { ProtectedBranches: { protect: jest.fn(), }, + ProjectVariables: { + create: jest.fn(), + }, }; jest.mock('@gitbeaker/node', () => ({ Gitlab: class { @@ -137,6 +140,26 @@ describe('publish:gitlab', () => { output: jest.fn(), createTemporaryDirectory: jest.fn(), }; + const mockContextWithVariables = { + input: { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + repoVisibility: 'private' as const, + variables: [ + { + key: 'key', + value: 'value', + description: 'description', + protected: true, + masked: true, + }, + ], + }, + workspacePath: 'lol', + logger: getVoidLogger(), + logStream: new PassThrough(), + output: jest.fn(), + createTemporaryDirectory: jest.fn(), + }; beforeEach(() => { jest.resetAllMocks(); @@ -304,6 +327,38 @@ describe('publish:gitlab', () => { ); }); + it('should call the correct Gitlab APIs for variables when their configuration is provided', async () => { + mockGitlabClient.Users.current.mockResolvedValue({ id: 12345 }); + mockGitlabClient.Namespaces.show.mockResolvedValue({ id: 1234 }); + mockGitlabClient.Projects.create.mockResolvedValue({ + id: 123456, + http_url_to_repo: 'http://mockurl.git', + }); + + await action.handler(mockContextWithVariables); + + expect(mockGitlabClient.Namespaces.show).toHaveBeenCalledWith('owner'); + expect(mockGitlabClient.Projects.create).toHaveBeenCalledWith({ + namespace_id: 1234, + name: 'repo', + visibility: 'private', + }); + + expect(mockGitlabClient.ProjectVariables.create).toHaveBeenCalledWith( + 123456, + { + key: 'key', + value: 'value', + description: 'description', + variable_type: 'env_var', + protected: true, + masked: true, + raw: false, + environment_scope: '*', + }, + ); + }); + it('should call initRepoAndPush with the correct values', async () => { mockGitlabClient.Users.current.mockResolvedValue({ id: 12345 }); mockGitlabClient.Namespaces.show.mockResolvedValue({ id: 1234 }); diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.ts index 68205d05e9..c715bffcd6 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.ts @@ -55,6 +55,16 @@ export function createPublishGitlabAction(options: { create?: boolean; ref?: string; }>; + variables?: Array<{ + key: string; + value: string; + description?: string; + variable_type?: string; + protected?: boolean; + masked?: boolean; + raw?: boolean; + environment_scope?: string; + }>; }>({ id: 'publish:gitlab', description: @@ -157,6 +167,55 @@ export function createPublishGitlabAction(options: { }, }, }, + variables: { + title: 'Project variables', + description: + 'Project variables settings based on Gitlab Project Environments API - https://docs.gitlab.com/ee/api/project_level_variables.html#create-a-variable', + type: 'array', + items: { + type: 'object', + required: ['key', 'value'], + properties: { + key: { + title: 'Variable key', + description: + 'The key of a variable; must have no more than 255 characters; only A-Z, a-z, 0-9, and _ are allowed', + type: 'string', + }, + value: { + title: 'Variable value', + description: 'The value of a variable', + type: 'string', + }, + description: { + title: 'Variable description', + description: `The description of the variable. The default value is 'null'`, + type: 'string', + }, + variable_type: { + title: 'Variable type', + description: `The type of a variable. The default value is 'env_var'`, + type: 'string', + enum: ['env_var', 'file'], + }, + protected: { + title: 'Variable protection', + description: `Whether the variable is protected. The default value is 'false'`, + type: 'boolean', + }, + raw: { + title: 'Variable raw', + description: `Whether the variable is in raw format. The default value is 'false'`, + type: 'boolean', + }, + environment_scope: { + title: 'Variable environment scope', + description: `The environment_scope of the variable. The default value is '*'`, + type: 'string', + }, + }, + }, + }, }, }, output: { @@ -193,6 +252,7 @@ export function createPublishGitlabAction(options: { topics = [], settings = {}, branches = [], + variables = [], } = ctx.input; const { owner, repo, host } = parseRepoUrl(repoUrl, integrations); @@ -318,6 +378,31 @@ export function createPublishGitlabAction(options: { } } + if (variables) { + for (const variable of variables) { + const variableWithDefaults = Object.assign(variable, { + variable_type: variable.variable_type ?? 'env_var', + protected: variable.protected ?? false, + masked: variable.masked ?? false, + raw: variable.raw ?? false, + environment_scope: variable.environment_scope ?? '*', + }); + + try { + await client.ProjectVariables.create( + projectId, + variableWithDefaults, + ); + } catch (e) { + throw new InputError( + `Environment variable creation failed for ${ + variableWithDefaults.key + }. ${printGitlabError(e)}`, + ); + } + } + } + ctx.output('commitHash', commitResult?.commitHash); ctx.output('remoteUrl', remoteUrl); ctx.output('repoContentsUrl', repoContentsUrl); From 09cdef6eca2f138d196bfe55dcbd0f16f9268965 Mon Sep 17 00:00:00 2001 From: Ilya Katlinski Date: Fri, 15 Sep 2023 16:42:25 +0200 Subject: [PATCH 017/227] chore: add explicit replacements for deprecated properties Signed-off-by: Ilya Katlinski --- .../src/scaffolder/actions/builtin/publish/gitlab.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.ts index c715bffcd6..ee9be04a3d 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlab.ts @@ -38,7 +38,7 @@ export function createPublishGitlabAction(options: { return createTemplateAction<{ repoUrl: string; defaultBranch?: string; - /** @deprecated in favour of settings field */ + /** @deprecated in favour of settings.visibility field */ repoVisibility?: 'private' | 'internal' | 'public'; sourcePath?: string; token?: string; @@ -46,7 +46,7 @@ export function createPublishGitlabAction(options: { gitAuthorName?: string; gitAuthorEmail?: string; setUserAsOwner?: boolean; - /** @deprecated in favour of settings field */ + /** @deprecated in favour of settings.topics field */ topics?: string[]; settings?: Record; branches?: Array<{ @@ -82,7 +82,7 @@ export function createPublishGitlabAction(options: { }, repoVisibility: { title: 'Repository Visibility', - description: `Sets the visibility of the repository. The default value is 'private'. (deprecated, use settings instead)`, + description: `Sets the visibility of the repository. The default value is 'private'. (deprecated, use settings.visibility instead)`, type: 'string', enum: ['private', 'public', 'internal'], }, @@ -126,7 +126,7 @@ export function createPublishGitlabAction(options: { topics: { title: 'Topic labels', description: - 'Topic labels to apply on the repository. (deprecated, use settings instead)', + 'Topic labels to apply on the repository. (deprecated, use settings.topics instead)', type: 'array', items: { type: 'string', From 9ef04db9f09ff185b5151631eb49a137c8f29489 Mon Sep 17 00:00:00 2001 From: Ilya Katlinski Date: Fri, 15 Sep 2023 17:30:44 +0200 Subject: [PATCH 018/227] test: fix incosistent test failures with time Signed-off-by: Ilya Katlinski --- .../src/scaffolder/actions/builtin/debug/wait.examples.test.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/wait.examples.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/wait.examples.test.ts index 595ae7c3b6..fc68b82d1e 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/wait.examples.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/debug/wait.examples.test.ts @@ -56,6 +56,7 @@ describe('debug:wait examples', () => { const start = new Date().getTime(); await action.handler(context); const end = new Date().getTime(); - expect(end - start).toBeGreaterThanOrEqual(50); + expect(end - start).toBeGreaterThanOrEqual(45); + expect(end - start).toBeLessThanOrEqual(55); }); }); From 58f0cb6812547aa833e90264eaf1736d069a7562 Mon Sep 17 00:00:00 2001 From: Abhay-soni-developer Date: Tue, 19 Sep 2023 13:19:05 +0530 Subject: [PATCH 019/227] api docs Signed-off-by: Abhay-soni-developer --- plugins/jenkins/api-report.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/plugins/jenkins/api-report.md b/plugins/jenkins/api-report.md index 0782f0abd2..34d5ac731e 100644 --- a/plugins/jenkins/api-report.md +++ b/plugins/jenkins/api-report.md @@ -19,6 +19,9 @@ import { RouteRef } from '@backstage/core-plugin-api'; // @public (undocumented) export const EntityJenkinsContent: () => JSX_2.Element; +// @public (undocumented) +export const EntityJobRunsTable: () => JSX_2.Element; + // @public (undocumented) export const EntityLatestJenkinsRunCard: (props: { branch: string; @@ -45,6 +48,13 @@ export interface JenkinsApi { jobFullName: string; buildNumber: string; }): Promise; + // Warning: (ae-forgotten-export) The symbol "Job" needs to be exported by the entry point index.d.ts + // + // (undocumented) + getJobBuilds(options: { + entity: CompoundEntityRef; + jobFullName: string; + }): Promise; // Warning: (ae-forgotten-export) The symbol "Project" needs to be exported by the entry point index.d.ts getProjects(options: { entity: CompoundEntityRef; @@ -80,6 +90,11 @@ export class JenkinsClient implements JenkinsApi { buildNumber: string; }): Promise; // (undocumented) + getJobBuilds(options: { + entity: CompoundEntityRef; + jobFullName: string; + }): Promise; + // (undocumented) getProjects(options: { entity: CompoundEntityRef; filter: { From f9f3f1e6291a99185e8ba929f5c394e752f84732 Mon Sep 17 00:00:00 2001 From: Abhay-soni-developer Date: Tue, 19 Sep 2023 13:23:59 +0530 Subject: [PATCH 020/227] api:docs Signed-off-by: Abhay-soni-developer --- plugins/jenkins/api-report.md | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/plugins/jenkins/api-report.md b/plugins/jenkins/api-report.md index 0782f0abd2..215abf5f48 100644 --- a/plugins/jenkins/api-report.md +++ b/plugins/jenkins/api-report.md @@ -15,9 +15,12 @@ import { InfoCardVariants } from '@backstage/core-components'; import { JSX as JSX_2 } from 'react'; import { default as React_2 } from 'react'; import { RouteRef } from '@backstage/core-plugin-api'; +import { TableColumn } from '@backstage/core-components'; // @public (undocumented) -export const EntityJenkinsContent: () => JSX_2.Element; +export const EntityJenkinsContent: (props: { + columns?: TableColumn<{}>[] | undefined; +}) => JSX_2.Element; // @public (undocumented) export const EntityLatestJenkinsRunCard: (props: { @@ -45,7 +48,6 @@ export interface JenkinsApi { jobFullName: string; buildNumber: string; }): Promise; - // Warning: (ae-forgotten-export) The symbol "Project" needs to be exported by the entry point index.d.ts getProjects(options: { entity: CompoundEntityRef; filter: { @@ -118,8 +120,29 @@ export const LatestRunCard: (props: { // @public (undocumented) export const LEGACY_JENKINS_ANNOTATION = 'jenkins.io/github-folder'; +// Warning: (ae-missing-release-tag) "Project" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface Project { + // (undocumented) + displayName: string; + // (undocumented) + fullDisplayName: string; + // (undocumented) + fullName: string; + // (undocumented) + inQueue: string; + // (undocumented) + lastBuild: Build; + // (undocumented) + onRestartClick: () => Promise; + // (undocumented) + status: string; +} + +// Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts // Warning: (ae-missing-release-tag) "Router" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -export const Router: () => React_2.JSX.Element; +export const Router: (props: Props) => React_2.JSX.Element; ``` From 6ef6b1e7e43bf56117768c6b91ea8f80322c55fb Mon Sep 17 00:00:00 2001 From: Abhay-soni-developer Date: Wed, 20 Sep 2023 13:21:49 +0530 Subject: [PATCH 021/227] removed unneeded member from interface Signed-off-by: Abhay-soni-developer --- plugins/jenkins/src/api/JenkinsApi.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/plugins/jenkins/src/api/JenkinsApi.ts b/plugins/jenkins/src/api/JenkinsApi.ts index dec7890aac..3d4017dec5 100644 --- a/plugins/jenkins/src/api/JenkinsApi.ts +++ b/plugins/jenkins/src/api/JenkinsApi.ts @@ -91,10 +91,6 @@ export interface Project { // added by us status: string; // == inQueue ? 'queued' : lastBuild.building ? 'running' : lastBuild.result, onRestartClick: () => Promise; // TODO rename to handle.* ? also, should this be on lastBuild? - getJobBuilds(options: { - entity: CompoundEntityRef; - jobFullName: string; - }): Promise; } export interface JenkinsApi { From 863cc1c99aebef03ccba43d9cad77507c194a466 Mon Sep 17 00:00:00 2001 From: Abhay-soni-developer Date: Wed, 20 Sep 2023 14:44:07 +0530 Subject: [PATCH 022/227] added icon in EntityJenkinsContent which when clicked will take you to JobRunsTable, with this approach we can support multiple jobs in this plugin in future. Signed-off-by: Abhay-soni-developer --- .../app/src/components/catalog/EntityPage.tsx | 4 ---- .../BuildsPage/lib/CITable/CITable.tsx | 17 +++++++++++++++-- .../components/JobRunsTable/JobRunsTable.tsx | 5 ++++- plugins/jenkins/src/components/Router.tsx | 4 +++- plugins/jenkins/src/components/useJobRuns.ts | 8 +------- plugins/jenkins/src/index.ts | 1 - plugins/jenkins/src/plugin.ts | 17 +++++++---------- 7 files changed, 30 insertions(+), 26 deletions(-) diff --git a/packages/app/src/components/catalog/EntityPage.tsx b/packages/app/src/components/catalog/EntityPage.tsx index 6036f89310..25630253d4 100644 --- a/packages/app/src/components/catalog/EntityPage.tsx +++ b/packages/app/src/components/catalog/EntityPage.tsx @@ -100,7 +100,6 @@ import { EntityJenkinsContent, EntityLatestJenkinsRunCard, isJenkinsAvailable, - EntityJobRunsTable, } from '@backstage/plugin-jenkins'; import { EntityKafkaContent } from '@backstage/plugin-kafka'; import { EntityKubernetesContent } from '@backstage/plugin-kubernetes'; @@ -246,9 +245,6 @@ export const cicdContent = ( -
-
-
diff --git a/plugins/jenkins/src/components/BuildsPage/lib/CITable/CITable.tsx b/plugins/jenkins/src/components/BuildsPage/lib/CITable/CITable.tsx index f82ce2e7ec..7c160ebcc7 100644 --- a/plugins/jenkins/src/components/BuildsPage/lib/CITable/CITable.tsx +++ b/plugins/jenkins/src/components/BuildsPage/lib/CITable/CITable.tsx @@ -19,10 +19,11 @@ import { useEntityPermission } from '@backstage/plugin-catalog-react/alpha'; import { Box, IconButton, Tooltip, Typography } from '@material-ui/core'; import RetryIcon from '@material-ui/icons/Replay'; import VisibilityIcon from '@material-ui/icons/Visibility'; +import HistoryIcon from '@material-ui/icons/History'; import { default as React, useState } from 'react'; import { Project } from '../../../../api/JenkinsApi'; import JenkinsLogo from '../../../../assets/JenkinsLogo.svg'; -import { buildRouteRef } from '../../../../plugin'; +import { buildRouteRef, jobRunsRouteRef } from '../../../../plugin'; import { useBuilds } from '../../../useBuilds'; import { JenkinsRunStatus } from '../Status'; import { jenkinsExecutePermission } from '@backstage/plugin-jenkins-common'; @@ -182,6 +183,7 @@ const generatedColumns: TableColumn[] = [ ); const alertApi = useApi(alertApiRef); + const jobRunsLink = useRouteRef(jobRunsRouteRef); const onRebuild = async () => { if (row.onRestartClick) { @@ -205,7 +207,7 @@ const generatedColumns: TableColumn[] = [ }; return ( -
); }; From 0b38419cf60dbfe101b56d45aa7170929be91785 Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Mon, 2 Oct 2023 22:43:31 +0200 Subject: [PATCH 132/227] catalog-react: temporarily disable some routing checks Signed-off-by: Vincenzo Scamporlino --- .../src/components/EntityRefLink/EntityRefLink.tsx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/plugins/catalog-react/src/components/EntityRefLink/EntityRefLink.tsx b/plugins/catalog-react/src/components/EntityRefLink/EntityRefLink.tsx index d682abdc2b..47031b669c 100644 --- a/plugins/catalog-react/src/components/EntityRefLink/EntityRefLink.tsx +++ b/plugins/catalog-react/src/components/EntityRefLink/EntityRefLink.tsx @@ -47,7 +47,13 @@ export type EntityRefLinkProps = { export const EntityRefLink = forwardRef( (props, ref) => { const { entityRef, defaultKind, title, children, ...linkProps } = props; - const entityRoute = useRouteRef(entityRouteRef); + let entityRoute = () => ''; + try { + // eslint-disable-next-line react-hooks/rules-of-hooks + entityRoute = useRouteRef(entityRouteRef); + } catch (e) { + /* */ + } let kind; let namespace; From 25d849affd79b6b237b1f29f1d03aafe48c85159 Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Thu, 5 Oct 2023 22:24:19 +0200 Subject: [PATCH 133/227] Revert "catalog-react: temporarily disable some routing checks" This reverts commit a5000bf9cf235f35689f50aeaaa5f92fa458fe5f. Signed-off-by: Vincenzo Scamporlino --- .../src/components/EntityRefLink/EntityRefLink.tsx | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/plugins/catalog-react/src/components/EntityRefLink/EntityRefLink.tsx b/plugins/catalog-react/src/components/EntityRefLink/EntityRefLink.tsx index 47031b669c..d682abdc2b 100644 --- a/plugins/catalog-react/src/components/EntityRefLink/EntityRefLink.tsx +++ b/plugins/catalog-react/src/components/EntityRefLink/EntityRefLink.tsx @@ -47,13 +47,7 @@ export type EntityRefLinkProps = { export const EntityRefLink = forwardRef( (props, ref) => { const { entityRef, defaultKind, title, children, ...linkProps } = props; - let entityRoute = () => ''; - try { - // eslint-disable-next-line react-hooks/rules-of-hooks - entityRoute = useRouteRef(entityRouteRef); - } catch (e) { - /* */ - } + const entityRoute = useRouteRef(entityRouteRef); let kind; let namespace; From 8fcdb32dbf8808ae8bb03485f9f1af1d302e914b Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Thu, 5 Oct 2023 22:42:59 +0200 Subject: [PATCH 134/227] app-next: hook up fake entityRoute Signed-off-by: Vincenzo Scamporlino --- packages/app-next/src/App.tsx | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/packages/app-next/src/App.tsx b/packages/app-next/src/App.tsx index 96a4de80eb..65d729bf92 100644 --- a/packages/app-next/src/App.tsx +++ b/packages/app-next/src/App.tsx @@ -14,11 +14,17 @@ * limitations under the License. */ +import React from 'react'; import { createApp } from '@backstage/frontend-app-api'; import { pagesPlugin } from './examples/pagesPlugin'; import graphiqlPlugin from '@backstage/plugin-graphiql/alpha'; import techRadarPlugin from '@backstage/plugin-tech-radar/alpha'; import userSettingsPlugin from '@backstage/plugin-user-settings/alpha'; +import { + createPageExtension, + createPlugin, +} from '@backstage/frontend-plugin-api'; +import { entityRouteRef } from '@backstage/plugin-catalog-react'; /* @@ -49,8 +55,26 @@ TODO: /* app.tsx */ +const fakePlugin = createPlugin({ + id: 'fake', + extensions: [ + createPageExtension({ + id: 'catalog:entity', + defaultPath: '/fakeentity', + routeRef: entityRouteRef, + loader: async () =>
hello 😅
, + }), + ], +}); + const app = createApp({ - features: [graphiqlPlugin, pagesPlugin, techRadarPlugin, userSettingsPlugin], + features: [ + graphiqlPlugin, + pagesPlugin, + techRadarPlugin, + userSettingsPlugin, + fakePlugin, + ], // bindRoutes({ bind }) { // bind(catalogPlugin.externalRoutes, { // createComponent: scaffolderPlugin.routes.root, From b69cf95dfda0cae0abdcb734ad596bd3709835c4 Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Thu, 5 Oct 2023 23:41:42 +0200 Subject: [PATCH 135/227] user-settings: match subroutes Signed-off-by: Vincenzo Scamporlino --- packages/app-next/src/examples/pagesPlugin.tsx | 2 +- plugins/user-settings/src/alpha.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/app-next/src/examples/pagesPlugin.tsx b/packages/app-next/src/examples/pagesPlugin.tsx index 361691a9a8..5ae1029769 100644 --- a/packages/app-next/src/examples/pagesPlugin.tsx +++ b/packages/app-next/src/examples/pagesPlugin.tsx @@ -51,7 +51,7 @@ const IndexPage = createPageExtension({ Search
- Settings + Settings
); diff --git a/plugins/user-settings/src/alpha.tsx b/plugins/user-settings/src/alpha.tsx index ac753a4138..5ae098184a 100644 --- a/plugins/user-settings/src/alpha.tsx +++ b/plugins/user-settings/src/alpha.tsx @@ -29,7 +29,7 @@ export const userSettingsRouteRef = createRouteRef({ export const UserSettingsPage = createPageExtension({ id: 'plugin.user-settings.page', - defaultPath: '/settings', + defaultPath: '/settings/*', routeRef: userSettingsRouteRef, loader: () => import('./components/SettingsPage').then(m => ), From d10a39b4b864bc45ae8ab723a6f11685b5b0d18b Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Fri, 6 Oct 2023 10:10:13 +0200 Subject: [PATCH 136/227] user-settings: add providerSettings extension data Signed-off-by: Vincenzo Scamporlino --- plugins/user-settings/src/alpha.tsx | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/plugins/user-settings/src/alpha.tsx b/plugins/user-settings/src/alpha.tsx index 5ae098184a..7e21ae057f 100644 --- a/plugins/user-settings/src/alpha.tsx +++ b/plugins/user-settings/src/alpha.tsx @@ -1,5 +1,7 @@ import { createRouteRef } from '@backstage/core-plugin-api'; import { + createExtensionDataRef, + createExtensionInput, createPageExtension, createPlugin, } from '@backstage/frontend-plugin-api'; @@ -27,12 +29,27 @@ export const userSettingsRouteRef = createRouteRef({ id: 'plugin.user-settings.page', }); +export const userSettingsProviderSettingsExtensionData = + createExtensionDataRef( + 'plugin.user-settings.page.providerSettings', + ); + export const UserSettingsPage = createPageExtension({ id: 'plugin.user-settings.page', defaultPath: '/settings/*', routeRef: userSettingsRouteRef, - loader: () => - import('./components/SettingsPage').then(m => ), + inputs: { + providerSettings: createExtensionInput( + { + component: userSettingsProviderSettingsExtensionData, + }, + { singleton: true }, + ), + }, + loader: ({ inputs }) => + import('./components/SettingsPage').then(m => ( + + )), }); export default createPlugin({ From fdb8cef4d8ac0dd108a7c0e1e22378a5efb19e37 Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Fri, 6 Oct 2023 12:00:18 +0200 Subject: [PATCH 137/227] user-settings: api reports Signed-off-by: Vincenzo Scamporlino --- plugins/user-settings/alpha-api-report.md | 27 +++++++++++++++++++++++ plugins/user-settings/src/alpha.tsx | 12 ++++++++++ 2 files changed, 39 insertions(+) diff --git a/plugins/user-settings/alpha-api-report.md b/plugins/user-settings/alpha-api-report.md index 203cfac601..8a12861f86 100644 --- a/plugins/user-settings/alpha-api-report.md +++ b/plugins/user-settings/alpha-api-report.md @@ -3,8 +3,35 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts +/// + +import { BackstagePlugin } from '@backstage/frontend-plugin-api'; +import { ConfigurableExtensionDataRef } from '@backstage/frontend-plugin-api'; +import { Extension } from '@backstage/frontend-plugin-api'; +import { RouteRef } from '@backstage/core-plugin-api'; import { TranslationRef } from '@backstage/core-plugin-api/alpha'; +// @alpha (undocumented) +const _default: BackstagePlugin; +export default _default; + +// @alpha (undocumented) +export const UserSettingsPage: Extension<{ + path: string + /** + * @alpha + */; +}>; + +// @alpha (undocumented) +export const userSettingsProviderSettingsExtensionData: ConfigurableExtensionDataRef< + JSX.Element, + {} +>; + +// @alpha (undocumented) +export const userSettingsRouteRef: RouteRef; + // @alpha (undocumented) export const userSettingsTranslationRef: TranslationRef< 'user-settings', diff --git a/plugins/user-settings/src/alpha.tsx b/plugins/user-settings/src/alpha.tsx index 7e21ae057f..3e4c862fa5 100644 --- a/plugins/user-settings/src/alpha.tsx +++ b/plugins/user-settings/src/alpha.tsx @@ -25,15 +25,24 @@ import React from 'react'; export * from './translation'; +/** + * @alpha + */ export const userSettingsRouteRef = createRouteRef({ id: 'plugin.user-settings.page', }); +/** + * @alpha + */ export const userSettingsProviderSettingsExtensionData = createExtensionDataRef( 'plugin.user-settings.page.providerSettings', ); +/** + * @alpha + */ export const UserSettingsPage = createPageExtension({ id: 'plugin.user-settings.page', defaultPath: '/settings/*', @@ -52,6 +61,9 @@ export const UserSettingsPage = createPageExtension({ )), }); +/** + * @alpha + */ export default createPlugin({ id: 'user-settings', extensions: [UserSettingsPage], From 2dd349cbef9c2f6261dfd2c10c6d06e59411ca79 Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Fri, 6 Oct 2023 15:04:10 +0200 Subject: [PATCH 138/227] user-settings: remove extension data Signed-off-by: Vincenzo Scamporlino --- plugins/user-settings/alpha-api-report.md | 14 +------------- plugins/user-settings/src/alpha.tsx | 16 ++++------------ 2 files changed, 5 insertions(+), 25 deletions(-) diff --git a/plugins/user-settings/alpha-api-report.md b/plugins/user-settings/alpha-api-report.md index 8a12861f86..843a6cf7af 100644 --- a/plugins/user-settings/alpha-api-report.md +++ b/plugins/user-settings/alpha-api-report.md @@ -3,10 +3,7 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts -/// - import { BackstagePlugin } from '@backstage/frontend-plugin-api'; -import { ConfigurableExtensionDataRef } from '@backstage/frontend-plugin-api'; import { Extension } from '@backstage/frontend-plugin-api'; import { RouteRef } from '@backstage/core-plugin-api'; import { TranslationRef } from '@backstage/core-plugin-api/alpha'; @@ -17,18 +14,9 @@ export default _default; // @alpha (undocumented) export const UserSettingsPage: Extension<{ - path: string - /** - * @alpha - */; + path: string; }>; -// @alpha (undocumented) -export const userSettingsProviderSettingsExtensionData: ConfigurableExtensionDataRef< - JSX.Element, - {} ->; - // @alpha (undocumented) export const userSettingsRouteRef: RouteRef; diff --git a/plugins/user-settings/src/alpha.tsx b/plugins/user-settings/src/alpha.tsx index 3e4c862fa5..9804fb40ea 100644 --- a/plugins/user-settings/src/alpha.tsx +++ b/plugins/user-settings/src/alpha.tsx @@ -1,6 +1,6 @@ import { createRouteRef } from '@backstage/core-plugin-api'; import { - createExtensionDataRef, + coreExtensionData, createExtensionInput, createPageExtension, createPlugin, @@ -32,14 +32,6 @@ export const userSettingsRouteRef = createRouteRef({ id: 'plugin.user-settings.page', }); -/** - * @alpha - */ -export const userSettingsProviderSettingsExtensionData = - createExtensionDataRef( - 'plugin.user-settings.page.providerSettings', - ); - /** * @alpha */ @@ -50,14 +42,14 @@ export const UserSettingsPage = createPageExtension({ inputs: { providerSettings: createExtensionInput( { - component: userSettingsProviderSettingsExtensionData, + element: coreExtensionData.reactElement, }, - { singleton: true }, + { singleton: true, optional: true }, ), }, loader: ({ inputs }) => import('./components/SettingsPage').then(m => ( - + )), }); From 9e85c9bc9fb6e0c7a126c72f6e6b110b42fbc6d6 Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Mon, 9 Oct 2023 16:10:19 +0200 Subject: [PATCH 139/227] core-app-api: api report Signed-off-by: Vincenzo Scamporlino --- packages/core-app-api/alpha-api-report.md | 94 +++++++++++++++++++++++ packages/core-app-api/src/alpha.ts | 18 ++++- 2 files changed, 109 insertions(+), 3 deletions(-) create mode 100644 packages/core-app-api/alpha-api-report.md diff --git a/packages/core-app-api/alpha-api-report.md b/packages/core-app-api/alpha-api-report.md new file mode 100644 index 0000000000..23d055efee --- /dev/null +++ b/packages/core-app-api/alpha-api-report.md @@ -0,0 +1,94 @@ +## API Report File for "@backstage/core-app-api" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +import { AppLanguageApi } from '@backstage/core-plugin-api/alpha'; +import { AppTheme } from '@backstage/core-plugin-api'; +import { AppThemeApi } from '@backstage/core-plugin-api'; +import { Observable } from '@backstage/types'; +import { TranslationApi } from '@backstage/core-plugin-api/alpha'; +import { TranslationMessages } from '@backstage/core-plugin-api/alpha'; +import { TranslationRef } from '@backstage/core-plugin-api/alpha'; +import { TranslationResource } from '@backstage/core-plugin-api/alpha'; +import { TranslationSnapshot } from '@backstage/core-plugin-api/alpha'; + +// @alpha +export class AppLanguageSelector implements AppLanguageApi { + // (undocumented) + static create(options?: AppLanguageSelectorOptions): AppLanguageSelector; + // (undocumented) + static createWithStorage( + options?: AppLanguageSelectorOptions, + ): AppLanguageSelector; + // (undocumented) + getAvailableLanguages(): { + languages: string[]; + }; + // (undocumented) + getLanguage(): { + language: string; + }; + // (undocumented) + language$(): Observable<{ + language: string; + }>; + // (undocumented) + setLanguage(language?: string | undefined): void; +} + +// @alpha (undocumented) +export interface AppLanguageSelectorOptions { + // (undocumented) + availableLanguages?: string[]; + // (undocumented) + defaultLanguage?: string; +} + +// @public +export class AppThemeSelector implements AppThemeApi { + constructor(themes: AppTheme[]); + // (undocumented) + activeThemeId$(): Observable; + // (undocumented) + static createWithStorage(themes: AppTheme[]): AppThemeSelector; + // (undocumented) + getActiveThemeId(): string | undefined; + // (undocumented) + getInstalledThemes(): AppTheme[]; + // (undocumented) + setActiveThemeId(themeId?: string): void; +} + +// @alpha (undocumented) +export class I18nextTranslationApi implements TranslationApi { + // (undocumented) + static create(options: I18nextTranslationApiOptions): I18nextTranslationApi; + // (undocumented) + getTranslation< + TMessages extends { + [key in string]: string; + }, + >( + translationRef: TranslationRef, + ): TranslationSnapshot; + // (undocumented) + translation$< + TMessages extends { + [key in string]: string; + }, + >( + translationRef: TranslationRef, + ): Observable>; +} + +// @alpha (undocumented) +export interface I18nextTranslationApiOptions { + // (undocumented) + languageApi: AppLanguageApi; + // (undocumented) + resources?: Array; +} + +// (No @packageDocumentation comment for this package) +``` diff --git a/packages/core-app-api/src/alpha.ts b/packages/core-app-api/src/alpha.ts index 286f3aa242..de7f5a3925 100644 --- a/packages/core-app-api/src/alpha.ts +++ b/packages/core-app-api/src/alpha.ts @@ -14,7 +14,19 @@ * limitations under the License. */ import { AppThemeSelector } from './apis'; -import { AppLanguageSelector } from './apis/implementations/AppLanguageApi'; -import { I18nextTranslationApi } from './apis/implementations/TranslationApi'; +import { + AppLanguageSelector, + AppLanguageSelectorOptions, +} from './apis/implementations/AppLanguageApi'; +import { + I18nextTranslationApi, + I18nextTranslationApiOptions, +} from './apis/implementations/TranslationApi'; -export { AppLanguageSelector, AppThemeSelector, I18nextTranslationApi }; +export { + type AppLanguageSelectorOptions, + type I18nextTranslationApiOptions, + AppLanguageSelector, + AppThemeSelector, + I18nextTranslationApi, +}; From 18c8dee6f5b11ac8b1b270ffccabf4e085f7c875 Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Mon, 9 Oct 2023 22:23:29 +0200 Subject: [PATCH 140/227] a bunch of changesets Signed-off-by: Vincenzo Scamporlino --- .changeset/afraid-dingos-listen.md | 5 +++++ .changeset/heavy-plants-doubt.md | 5 +++++ .changeset/lemon-spoons-fail.md | 5 +++++ 3 files changed, 15 insertions(+) create mode 100644 .changeset/afraid-dingos-listen.md create mode 100644 .changeset/heavy-plants-doubt.md create mode 100644 .changeset/lemon-spoons-fail.md diff --git a/.changeset/afraid-dingos-listen.md b/.changeset/afraid-dingos-listen.md new file mode 100644 index 0000000000..254d03a18d --- /dev/null +++ b/.changeset/afraid-dingos-listen.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-app-api': patch +--- + +Exported `I18nextTranslationApi` utility diff --git a/.changeset/heavy-plants-doubt.md b/.changeset/heavy-plants-doubt.md new file mode 100644 index 0000000000..fc2acf74eb --- /dev/null +++ b/.changeset/heavy-plants-doubt.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-user-settings': patch +--- + +Added experimental support for declarative integration diff --git a/.changeset/lemon-spoons-fail.md b/.changeset/lemon-spoons-fail.md new file mode 100644 index 0000000000..4d7d5ca9aa --- /dev/null +++ b/.changeset/lemon-spoons-fail.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-app-api': patch +--- + +Exported `AppLanguageSelector` utility From 73e704f3ed21427339261b57879b1260d2a1973d Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Tue, 10 Oct 2023 19:38:35 +0200 Subject: [PATCH 141/227] core-app-api: rollback alpha exports Signed-off-by: Vincenzo Scamporlino --- .changeset/afraid-dingos-listen.md | 5 - .changeset/lemon-spoons-fail.md | 5 - packages/core-app-api/alpha-api-report.md | 94 ------------------- packages/core-app-api/package.json | 4 - packages/core-app-api/src/alpha.ts | 32 ------- .../frontend-app-api/src/wiring/createApp.tsx | 11 +-- 6 files changed, 5 insertions(+), 146 deletions(-) delete mode 100644 .changeset/afraid-dingos-listen.md delete mode 100644 .changeset/lemon-spoons-fail.md delete mode 100644 packages/core-app-api/alpha-api-report.md delete mode 100644 packages/core-app-api/src/alpha.ts diff --git a/.changeset/afraid-dingos-listen.md b/.changeset/afraid-dingos-listen.md deleted file mode 100644 index 254d03a18d..0000000000 --- a/.changeset/afraid-dingos-listen.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/core-app-api': patch ---- - -Exported `I18nextTranslationApi` utility diff --git a/.changeset/lemon-spoons-fail.md b/.changeset/lemon-spoons-fail.md deleted file mode 100644 index 4d7d5ca9aa..0000000000 --- a/.changeset/lemon-spoons-fail.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/core-app-api': patch ---- - -Exported `AppLanguageSelector` utility diff --git a/packages/core-app-api/alpha-api-report.md b/packages/core-app-api/alpha-api-report.md deleted file mode 100644 index 23d055efee..0000000000 --- a/packages/core-app-api/alpha-api-report.md +++ /dev/null @@ -1,94 +0,0 @@ -## API Report File for "@backstage/core-app-api" - -> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). - -```ts -import { AppLanguageApi } from '@backstage/core-plugin-api/alpha'; -import { AppTheme } from '@backstage/core-plugin-api'; -import { AppThemeApi } from '@backstage/core-plugin-api'; -import { Observable } from '@backstage/types'; -import { TranslationApi } from '@backstage/core-plugin-api/alpha'; -import { TranslationMessages } from '@backstage/core-plugin-api/alpha'; -import { TranslationRef } from '@backstage/core-plugin-api/alpha'; -import { TranslationResource } from '@backstage/core-plugin-api/alpha'; -import { TranslationSnapshot } from '@backstage/core-plugin-api/alpha'; - -// @alpha -export class AppLanguageSelector implements AppLanguageApi { - // (undocumented) - static create(options?: AppLanguageSelectorOptions): AppLanguageSelector; - // (undocumented) - static createWithStorage( - options?: AppLanguageSelectorOptions, - ): AppLanguageSelector; - // (undocumented) - getAvailableLanguages(): { - languages: string[]; - }; - // (undocumented) - getLanguage(): { - language: string; - }; - // (undocumented) - language$(): Observable<{ - language: string; - }>; - // (undocumented) - setLanguage(language?: string | undefined): void; -} - -// @alpha (undocumented) -export interface AppLanguageSelectorOptions { - // (undocumented) - availableLanguages?: string[]; - // (undocumented) - defaultLanguage?: string; -} - -// @public -export class AppThemeSelector implements AppThemeApi { - constructor(themes: AppTheme[]); - // (undocumented) - activeThemeId$(): Observable; - // (undocumented) - static createWithStorage(themes: AppTheme[]): AppThemeSelector; - // (undocumented) - getActiveThemeId(): string | undefined; - // (undocumented) - getInstalledThemes(): AppTheme[]; - // (undocumented) - setActiveThemeId(themeId?: string): void; -} - -// @alpha (undocumented) -export class I18nextTranslationApi implements TranslationApi { - // (undocumented) - static create(options: I18nextTranslationApiOptions): I18nextTranslationApi; - // (undocumented) - getTranslation< - TMessages extends { - [key in string]: string; - }, - >( - translationRef: TranslationRef, - ): TranslationSnapshot; - // (undocumented) - translation$< - TMessages extends { - [key in string]: string; - }, - >( - translationRef: TranslationRef, - ): Observable>; -} - -// @alpha (undocumented) -export interface I18nextTranslationApiOptions { - // (undocumented) - languageApi: AppLanguageApi; - // (undocumented) - resources?: Array; -} - -// (No @packageDocumentation comment for this package) -``` diff --git a/packages/core-app-api/package.json b/packages/core-app-api/package.json index c7b00c9c57..e3332998df 100644 --- a/packages/core-app-api/package.json +++ b/packages/core-app-api/package.json @@ -7,14 +7,10 @@ }, "exports": { ".": "./src/index.ts", - "./alpha": "./src/alpha.ts", "./package.json": "./package.json" }, "typesVersions": { "*": { - "alpha": [ - "src/alpha.ts" - ], "package.json": [ "package.json" ] diff --git a/packages/core-app-api/src/alpha.ts b/packages/core-app-api/src/alpha.ts deleted file mode 100644 index de7f5a3925..0000000000 --- a/packages/core-app-api/src/alpha.ts +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright 2023 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import { AppThemeSelector } from './apis'; -import { - AppLanguageSelector, - AppLanguageSelectorOptions, -} from './apis/implementations/AppLanguageApi'; -import { - I18nextTranslationApi, - I18nextTranslationApiOptions, -} from './apis/implementations/TranslationApi'; - -export { - type AppLanguageSelectorOptions, - type I18nextTranslationApiOptions, - AppLanguageSelector, - AppThemeSelector, - I18nextTranslationApi, -}; diff --git a/packages/frontend-app-api/src/wiring/createApp.tsx b/packages/frontend-app-api/src/wiring/createApp.tsx index f37d05ec6f..640368ff83 100644 --- a/packages/frontend-app-api/src/wiring/createApp.tsx +++ b/packages/frontend-app-api/src/wiring/createApp.tsx @@ -57,13 +57,8 @@ import { ApiFactoryRegistry, ApiProvider, ApiResolver, -} from '@backstage/core-app-api'; - -import { - AppLanguageSelector, AppThemeSelector, - I18nextTranslationApi, -} from '@backstage/core-app-api/alpha'; +} from '@backstage/core-app-api'; // TODO: Get rid of all of these // eslint-disable-next-line @backstage/no-relative-monorepo-imports @@ -81,6 +76,10 @@ import { overrideBaseUrlConfigs } from '../../../core-app-api/src/app/overrideBa // eslint-disable-next-line @backstage/no-relative-monorepo-imports import { RoutingProvider } from '../../../core-app-api/src/routing/RoutingProvider'; // eslint-disable-next-line @backstage/no-relative-monorepo-imports +import { AppLanguageSelector } from '../../../core-app-api/src/apis/implementations/AppLanguageApi/AppLanguageSelector'; +// eslint-disable-next-line @backstage/no-relative-monorepo-imports +import { I18nextTranslationApi } from '../../../core-app-api/src/apis/implementations/TranslationApi/I18nextTranslationApi'; +// eslint-disable-next-line @backstage/no-relative-monorepo-imports import { apis as defaultApis, components as defaultComponents, From 00d9803ce96fb66e302a6fad11aea327c1bca9a1 Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Tue, 10 Oct 2023 23:09:29 +0200 Subject: [PATCH 142/227] user-settings: keep page extension internal Signed-off-by: Vincenzo Scamporlino --- plugins/user-settings/alpha-api-report.md | 6 ------ plugins/user-settings/src/alpha.tsx | 5 +---- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/plugins/user-settings/alpha-api-report.md b/plugins/user-settings/alpha-api-report.md index 843a6cf7af..a4f41a729a 100644 --- a/plugins/user-settings/alpha-api-report.md +++ b/plugins/user-settings/alpha-api-report.md @@ -4,7 +4,6 @@ ```ts import { BackstagePlugin } from '@backstage/frontend-plugin-api'; -import { Extension } from '@backstage/frontend-plugin-api'; import { RouteRef } from '@backstage/core-plugin-api'; import { TranslationRef } from '@backstage/core-plugin-api/alpha'; @@ -12,11 +11,6 @@ import { TranslationRef } from '@backstage/core-plugin-api/alpha'; const _default: BackstagePlugin; export default _default; -// @alpha (undocumented) -export const UserSettingsPage: Extension<{ - path: string; -}>; - // @alpha (undocumented) export const userSettingsRouteRef: RouteRef; diff --git a/plugins/user-settings/src/alpha.tsx b/plugins/user-settings/src/alpha.tsx index 9804fb40ea..8e1be0d00c 100644 --- a/plugins/user-settings/src/alpha.tsx +++ b/plugins/user-settings/src/alpha.tsx @@ -32,10 +32,7 @@ export const userSettingsRouteRef = createRouteRef({ id: 'plugin.user-settings.page', }); -/** - * @alpha - */ -export const UserSettingsPage = createPageExtension({ +const UserSettingsPage = createPageExtension({ id: 'plugin.user-settings.page', defaultPath: '/settings/*', routeRef: userSettingsRouteRef, From 1e60a9c3a5a1123f8bcb277f9e70fa77c0eb15e3 Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Tue, 10 Oct 2023 23:22:38 +0200 Subject: [PATCH 143/227] fronten-app-api: routing system matches subroutes Signed-off-by: Vincenzo Scamporlino --- .changeset/long-owls-complain.md | 5 +++++ packages/frontend-app-api/src/extensions/CoreRoutes.tsx | 2 +- plugins/user-settings/src/alpha.tsx | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 .changeset/long-owls-complain.md diff --git a/.changeset/long-owls-complain.md b/.changeset/long-owls-complain.md new file mode 100644 index 0000000000..f96b0f0987 --- /dev/null +++ b/.changeset/long-owls-complain.md @@ -0,0 +1,5 @@ +--- +'@backstage/frontend-app-api': patch +--- + +Fixed an issue preventing the routing system to match subroutes diff --git a/packages/frontend-app-api/src/extensions/CoreRoutes.tsx b/packages/frontend-app-api/src/extensions/CoreRoutes.tsx index 5006a87cac..8d22b40eec 100644 --- a/packages/frontend-app-api/src/extensions/CoreRoutes.tsx +++ b/packages/frontend-app-api/src/extensions/CoreRoutes.tsx @@ -39,7 +39,7 @@ export const CoreRoutes = createExtension({ const Routes = () => { const element = useRoutes( inputs.routes.map(route => ({ - path: route.path, + path: `${route.path}/*`, element: route.element, })), ); diff --git a/plugins/user-settings/src/alpha.tsx b/plugins/user-settings/src/alpha.tsx index 8e1be0d00c..2eb2febfe6 100644 --- a/plugins/user-settings/src/alpha.tsx +++ b/plugins/user-settings/src/alpha.tsx @@ -34,7 +34,7 @@ export const userSettingsRouteRef = createRouteRef({ const UserSettingsPage = createPageExtension({ id: 'plugin.user-settings.page', - defaultPath: '/settings/*', + defaultPath: '/settings', routeRef: userSettingsRouteRef, inputs: { providerSettings: createExtensionInput( From 96071886ae7c0d3d7f402f34dcbdc09800d1f34a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 11 Oct 2023 00:29:38 +0000 Subject: [PATCH 144/227] chore(deps): update dependency @types/js-yaml to v4.0.7 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 18c7d26521..8ddafed22c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -17969,9 +17969,9 @@ __metadata: linkType: hard "@types/js-yaml@npm:^4.0.0, @types/js-yaml@npm:^4.0.1": - version: 4.0.6 - resolution: "@types/js-yaml@npm:4.0.6" - checksum: d4439ec2cc830d355c2a1d7508f49888931b2cfe59d786d27621edd530bf06314b1dceeaa759e21f9b035a0ff623a0ca306752ebb73df9485c02abe045bd962c + version: 4.0.7 + resolution: "@types/js-yaml@npm:4.0.7" + checksum: e02eca876f3f19dbba62a26a18e59ec5df4e29300b99808fb0b4ca980cbfbb60e4a2c7d75d521728f5b2a3b92a0da5b9343497b2acf621b8ea019d48b40bbd78 languageName: node linkType: hard From 021b361ca5f404cad217b92d2c319fd44bd0de53 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 11 Oct 2023 00:30:07 +0000 Subject: [PATCH 145/227] chore(deps): update dependency @types/react to v17.0.68 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 18c7d26521..35bdc7b289 100644 --- a/yarn.lock +++ b/yarn.lock @@ -18588,13 +18588,13 @@ __metadata: linkType: hard "@types/react@npm:^17": - version: 17.0.67 - resolution: "@types/react@npm:17.0.67" + version: 17.0.68 + resolution: "@types/react@npm:17.0.68" dependencies: "@types/prop-types": "*" "@types/scheduler": "*" csstype: ^3.0.2 - checksum: eb4915fc7d24e19fe6e98dfe98ade377423b1263e7dc001beda41b0298152fb5a410a55dde5def5ec0838156239a48e778d522da03d319ae5ecea80d455da604 + checksum: c6ca4415b53b1abe91162b29af541a1797a56a6f462ef796e8ebda3eaa4d0609205f4f17b3fce8d9a12235d4ffd8a67c47b5e018ed85c2f3bee0fba8f54638c1 languageName: node linkType: hard From 92f904b8bbbad3390fd06baecc1ca443e69d1022 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 11 Oct 2023 01:17:05 +0000 Subject: [PATCH 146/227] chore(deps): update dependency @types/sanitize-html to v2.9.2 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 35bdc7b289..a299fa4aae 100644 --- a/yarn.lock +++ b/yarn.lock @@ -18700,11 +18700,11 @@ __metadata: linkType: hard "@types/sanitize-html@npm:^2.6.2": - version: 2.9.1 - resolution: "@types/sanitize-html@npm:2.9.1" + version: 2.9.2 + resolution: "@types/sanitize-html@npm:2.9.2" dependencies: htmlparser2: ^8.0.0 - checksum: 381db8e3f22876e8f6aa8f0997af73c71220c8398545d809ebd4e25d33480e73642b8c143a87d87bba504a43ab58d70a724c60eb3fd8fde31a813b682730c98f + checksum: bdd0db4a39125b8836573ede5ec5cc2f7b0dff5ecfbeae68aefb40163c916429cfb500d581ad3a18613e8d6a53f707abb279350e0811122e84e21b0223b8d560 languageName: node linkType: hard From 48114bba28bae205952ea72f514dd9cc01b3e582 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 11 Oct 2023 02:03:01 +0000 Subject: [PATCH 147/227] fix(deps): update dependency @mui/material to v5.14.13 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 96 +++++++++++++++++++++++++++---------------------------- 1 file changed, 48 insertions(+), 48 deletions(-) diff --git a/yarn.lock b/yarn.lock index a299fa4aae..9500758933 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13633,14 +13633,14 @@ __metadata: languageName: node linkType: hard -"@mui/base@npm:5.0.0-beta.18": - version: 5.0.0-beta.18 - resolution: "@mui/base@npm:5.0.0-beta.18" +"@mui/base@npm:5.0.0-beta.19": + version: 5.0.0-beta.19 + resolution: "@mui/base@npm:5.0.0-beta.19" dependencies: "@babel/runtime": ^7.23.1 "@floating-ui/react-dom": ^2.0.2 - "@mui/types": ^7.2.5 - "@mui/utils": ^5.14.12 + "@mui/types": ^7.2.6 + "@mui/utils": ^5.14.13 "@popperjs/core": ^2.11.8 clsx: ^2.0.0 prop-types: ^15.8.1 @@ -13651,28 +13651,28 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: 7d4ca1e9d537b7b5850567f1adecd1caa47b8613b43a587cf2f399cfda0a8c17dfda06b030c0bea554b76abe7ac25bb9b1af3c996574def5f860cda0c6ea4a3c + checksum: 7503d5609ba242e270cbcaea69f6c7d4935763a34a8ce8de2695078eae12ffcc1d7a57b5d735200de08f2314b2482aa7279631ffd92af240af24f6c31b633d8f languageName: node linkType: hard -"@mui/core-downloads-tracker@npm:^5.14.12": - version: 5.14.12 - resolution: "@mui/core-downloads-tracker@npm:5.14.12" - checksum: 1c1576ceecf7cade9e0d7a531632f5f9db24853d9ebbd47bb9ed943a3af7de734ad4f3374bab79880e9591db3ea55ea84cc10df72177f9ca5e32cc7662e04405 +"@mui/core-downloads-tracker@npm:^5.14.13": + version: 5.14.13 + resolution: "@mui/core-downloads-tracker@npm:5.14.13" + checksum: 3094f8c289d53eb2189ce3f9e4c71e735f91cfefeadda4cf37b0f3c3de47d9261fdbd49485f74267e2fe93d8c0cb289d38e9c802a404489017e9f1cee9e56488 languageName: node linkType: hard "@mui/material@npm:^5.12.2": - version: 5.14.12 - resolution: "@mui/material@npm:5.14.12" + version: 5.14.13 + resolution: "@mui/material@npm:5.14.13" dependencies: "@babel/runtime": ^7.23.1 - "@mui/base": 5.0.0-beta.18 - "@mui/core-downloads-tracker": ^5.14.12 - "@mui/system": ^5.14.12 - "@mui/types": ^7.2.5 - "@mui/utils": ^5.14.12 - "@types/react-transition-group": ^4.4.6 + "@mui/base": 5.0.0-beta.19 + "@mui/core-downloads-tracker": ^5.14.13 + "@mui/system": ^5.14.13 + "@mui/types": ^7.2.6 + "@mui/utils": ^5.14.13 + "@types/react-transition-group": ^4.4.7 clsx: ^2.0.0 csstype: ^3.1.2 prop-types: ^15.8.1 @@ -13691,16 +13691,16 @@ __metadata: optional: true "@types/react": optional: true - checksum: a0d3b52ce3cc282da04036db0805f95f27b35a9c899f132f962fe96f05d3eb112e99ccbf6bd9d05cae617b24beda95470aedaff129d6e39d1b52e1ddf80a9e12 + checksum: 07d73cb5f770743e080494684fd087770893232415c681a25bff2e791414b702d76d02100996a850e89ced81f986c1dc378cc6fb35fcd0724d19b3b0a4a34bed languageName: node linkType: hard -"@mui/private-theming@npm:^5.14.12": - version: 5.14.12 - resolution: "@mui/private-theming@npm:5.14.12" +"@mui/private-theming@npm:^5.14.13": + version: 5.14.13 + resolution: "@mui/private-theming@npm:5.14.13" dependencies: "@babel/runtime": ^7.23.1 - "@mui/utils": ^5.14.12 + "@mui/utils": ^5.14.13 prop-types: ^15.8.1 peerDependencies: "@types/react": ^17.0.0 || ^18.0.0 @@ -13708,13 +13708,13 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: f8127347dc29126fece3b530cb156f6ababf747b64bb1c712874375e6efae6c738c014304d9553001d67a59b24ca6a665f2d03bb5ae137f03bdba90815f0ecc1 + checksum: fb2f3644c332a454897f83b98b6fda7344ce30f9382715194442b7d954fdff4e0b96ef017a631259b2f0e44706737eecda7c5306d4833bf5bd834d59b059a6f9 languageName: node linkType: hard -"@mui/styled-engine@npm:^5.14.12": - version: 5.14.12 - resolution: "@mui/styled-engine@npm:5.14.12" +"@mui/styled-engine@npm:^5.14.13": + version: 5.14.13 + resolution: "@mui/styled-engine@npm:5.14.13" dependencies: "@babel/runtime": ^7.23.1 "@emotion/cache": ^11.11.0 @@ -13729,19 +13729,19 @@ __metadata: optional: true "@emotion/styled": optional: true - checksum: c689ccad59e7fd54cd8367838612daa4f132c64d8c6b99ccb7c8f9697b5c940a6bf7edcccd686ce437b565dbcf3bfc12bb0dea47cbd5fbd750ea1553017f9c0d + checksum: b927fffbfb3a2c8d09f10b3770da610c94826312c2aa3e17791bd0355ef64056a842ede32f9d22225b952e3055aa2364c06f17620ae5203a0d4bb782ec90388f languageName: node linkType: hard -"@mui/system@npm:^5.14.12": - version: 5.14.12 - resolution: "@mui/system@npm:5.14.12" +"@mui/system@npm:^5.14.13": + version: 5.14.13 + resolution: "@mui/system@npm:5.14.13" dependencies: "@babel/runtime": ^7.23.1 - "@mui/private-theming": ^5.14.12 - "@mui/styled-engine": ^5.14.12 - "@mui/types": ^7.2.5 - "@mui/utils": ^5.14.12 + "@mui/private-theming": ^5.14.13 + "@mui/styled-engine": ^5.14.13 + "@mui/types": ^7.2.6 + "@mui/utils": ^5.14.13 clsx: ^2.0.0 csstype: ^3.1.2 prop-types: ^15.8.1 @@ -13757,25 +13757,25 @@ __metadata: optional: true "@types/react": optional: true - checksum: 70c3920eadc593395a2d258ddea0f3b28689c7f02fdaf97fc205e16efaeebe462b2ab01c69a20a3bcb011e0d07ea47fa66a433e70d0a1ce15d7b694fb3c52135 + checksum: 1dfcd19737792d36e87b83623f1bf836f1e1282faf44646f9788cec9e5fb6502e6082872ab839dcebd0ae3d72c5771aa12bad9d3ee4b7e039582970acda13a8d languageName: node linkType: hard -"@mui/types@npm:^7.2.5": - version: 7.2.5 - resolution: "@mui/types@npm:7.2.5" +"@mui/types@npm:^7.2.6": + version: 7.2.6 + resolution: "@mui/types@npm:7.2.6" peerDependencies: "@types/react": ^17.0.0 || ^18.0.0 peerDependenciesMeta: "@types/react": optional: true - checksum: 2807e9a8eb251294eee6384a4d68b2159f7660466625f1781e9efea282aa7c6ff35b42bc7039c2d43e7a5ac80291dcb85c4110022b0b6de4e12b6406b62f3dc1 + checksum: eb92f9c2fa5df048bcf182a611131bee2799ce1de64acfca12855f349d0b69f5f92c953b7e6c4e341e1df48f0e86f1329ed0251be4835ed194f53342827bd576 languageName: node linkType: hard -"@mui/utils@npm:^5.14.12": - version: 5.14.12 - resolution: "@mui/utils@npm:5.14.12" +"@mui/utils@npm:^5.14.13": + version: 5.14.13 + resolution: "@mui/utils@npm:5.14.13" dependencies: "@babel/runtime": ^7.23.1 "@types/prop-types": ^15.7.7 @@ -13787,7 +13787,7 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: 41470b6292b7a46c71fb0a0acc6a5f05a5e080648106b8805555de920e8f748669c7e8d39cbbcf0f52be9053927bb8439a748e24bd02bc1a220c9bded4435f42 + checksum: 5f04382d7761d35c5f53bcc0ce91c29aba0b3c0afb731f01d2ff078b05afe8098dee412538d846ab3a4b00eec934d46d730f9ef2ef493c3db885e2672480b6f0 languageName: node linkType: hard @@ -18560,12 +18560,12 @@ __metadata: languageName: node linkType: hard -"@types/react-transition-group@npm:^4.2.0, @types/react-transition-group@npm:^4.4.6": - version: 4.4.6 - resolution: "@types/react-transition-group@npm:4.4.6" +"@types/react-transition-group@npm:^4.2.0, @types/react-transition-group@npm:^4.4.7": + version: 4.4.7 + resolution: "@types/react-transition-group@npm:4.4.7" dependencies: "@types/react": "*" - checksum: 0872143821d7ee20a1d81e965f8b1e837837f11cd2206973f1f98655751992d9390304d58bac192c9cd923eca95bff107d8c9e3364a180240d5c2a6fd70fd7c3 + checksum: 3b91486e7aa777a3787e773efce79a0fa9be4ec9e02d51ccda8c7532c5c5d84fbcefe248dacb4007293d85bf0794ac51603bb9cec360db81cf3657d2b7123fb9 languageName: node linkType: hard From 3999e7263c248b512fc11c7d7b1b717ab393fe5a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 11 Oct 2023 02:58:28 +0000 Subject: [PATCH 148/227] fix(deps): update dependency @types/express to v4.17.19 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 9500758933..779a0936a7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -17720,14 +17720,14 @@ __metadata: linkType: hard "@types/express@npm:*, @types/express@npm:^4.17.13, @types/express@npm:^4.17.17, @types/express@npm:^4.17.6": - version: 4.17.18 - resolution: "@types/express@npm:4.17.18" + version: 4.17.19 + resolution: "@types/express@npm:4.17.19" dependencies: "@types/body-parser": "*" "@types/express-serve-static-core": ^4.17.33 "@types/qs": "*" "@types/serve-static": "*" - checksum: 8c178da4f0edff1f006d871fbdc3f849620986ff10bad252f3dfd45b57554e26aaa28c602285df028930d5216e257a06fbaf795070f8bb42f7d87e3b689cba50 + checksum: 3d39d0655eb0825d96fec100985a38737767ddd6da2dbda1e330a3adf36c98a9b7cd8d9539db32876d1fbb47a09343cad7b38c30c8dd7c291271fcb9b85cb21b languageName: node linkType: hard From 63c080587252d2926598f195a0a6a8cf020c22c2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 11 Oct 2023 03:45:00 +0000 Subject: [PATCH 149/227] fix(deps): update opentelemetry-js monorepo Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- packages/backend/package.json | 2 +- yarn.lock | 58 +++++++++++++++++------------------ 2 files changed, 30 insertions(+), 30 deletions(-) diff --git a/packages/backend/package.json b/packages/backend/package.json index 71670273e1..cd0191f7fa 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -81,7 +81,7 @@ "@gitbeaker/node": "^35.1.0", "@octokit/rest": "^19.0.3", "@opentelemetry/api": "^1.4.1", - "@opentelemetry/exporter-prometheus": "^0.43.0", + "@opentelemetry/exporter-prometheus": "^0.44.0", "@opentelemetry/sdk-metrics": "^1.13.0", "azure-devops-node-api": "^11.0.1", "better-sqlite3": "^8.0.0", diff --git a/yarn.lock b/yarn.lock index 779a0936a7..aca5c78191 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14584,59 +14584,59 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/core@npm:1.17.0": - version: 1.17.0 - resolution: "@opentelemetry/core@npm:1.17.0" +"@opentelemetry/core@npm:1.17.1": + version: 1.17.1 + resolution: "@opentelemetry/core@npm:1.17.1" dependencies: - "@opentelemetry/semantic-conventions": 1.17.0 + "@opentelemetry/semantic-conventions": 1.17.1 peerDependencies: "@opentelemetry/api": ">=1.0.0 <1.7.0" - checksum: 8f66bc47f2b9cae429830c91840515d6d70793c27fa139e661a7ae05c503d4a7244b5d52e3526cd32401a5a662775bb04546ca1e3ec20dc7124e6d0bb901f176 + checksum: 06157f4a51dd1b3c98487c0d29a927a5a0fbbc997a81b04ccc4923968424582f517969b91c4f4f19dc1718f27a97f43b0b07af1310a5c240a96c5ff14c4b5cec languageName: node linkType: hard -"@opentelemetry/exporter-prometheus@npm:^0.43.0": - version: 0.43.0 - resolution: "@opentelemetry/exporter-prometheus@npm:0.43.0" +"@opentelemetry/exporter-prometheus@npm:^0.44.0": + version: 0.44.0 + resolution: "@opentelemetry/exporter-prometheus@npm:0.44.0" dependencies: - "@opentelemetry/core": 1.17.0 - "@opentelemetry/resources": 1.17.0 - "@opentelemetry/sdk-metrics": 1.17.0 + "@opentelemetry/core": 1.17.1 + "@opentelemetry/resources": 1.17.1 + "@opentelemetry/sdk-metrics": 1.17.1 peerDependencies: "@opentelemetry/api": ^1.3.0 - checksum: 3d4bb77a542e35a7c81d146265bcdb5fc6a2cb2962e17cd2321386b8ea4004bdfdcd06b682282be8018f23bf0fd84b077d8706f7656e999d03140bb8be6c9b15 + checksum: f0c093ba8b70c23f16fb08e7f2ca59986dff853ae006fd42864b952e4dc9ceac97fcb423586288828f1a35271589a6676eed46f2017369d59e8ed3315e6ac79d languageName: node linkType: hard -"@opentelemetry/resources@npm:1.17.0": - version: 1.17.0 - resolution: "@opentelemetry/resources@npm:1.17.0" +"@opentelemetry/resources@npm:1.17.1": + version: 1.17.1 + resolution: "@opentelemetry/resources@npm:1.17.1" dependencies: - "@opentelemetry/core": 1.17.0 - "@opentelemetry/semantic-conventions": 1.17.0 + "@opentelemetry/core": 1.17.1 + "@opentelemetry/semantic-conventions": 1.17.1 peerDependencies: "@opentelemetry/api": ">=1.0.0 <1.7.0" - checksum: 517dba494be0a55ff489b086b8ba33401993d7231483c5e37ff8bc2d360846064ea71cb37b0e7fed39de4f8291a0cccdbd3724e8d9751c72c09ecc66a312f2f4 + checksum: ea4ec5568f5b67626be6eb2b975614d140dab4f6eb7ca73ee30d0f1957ef9779953956d1d44c35bb124c75e311b34a05e2036b32fcf31cf50ae983154df9ee3d languageName: node linkType: hard -"@opentelemetry/sdk-metrics@npm:1.17.0, @opentelemetry/sdk-metrics@npm:^1.13.0": - version: 1.17.0 - resolution: "@opentelemetry/sdk-metrics@npm:1.17.0" +"@opentelemetry/sdk-metrics@npm:1.17.1, @opentelemetry/sdk-metrics@npm:^1.13.0": + version: 1.17.1 + resolution: "@opentelemetry/sdk-metrics@npm:1.17.1" dependencies: - "@opentelemetry/core": 1.17.0 - "@opentelemetry/resources": 1.17.0 + "@opentelemetry/core": 1.17.1 + "@opentelemetry/resources": 1.17.1 lodash.merge: ^4.6.2 peerDependencies: "@opentelemetry/api": ">=1.3.0 <1.7.0" - checksum: 4f42e7be9c9425f1f2442d1ab333287d42f196b1295ac996aa28e2b414a4a1a034a8857f08ce23a6f32567735682421620f6b63de7c4592d0dc1dd4f487ce8ef + checksum: 6f6a59c5f594ebfc75da7ba203cb35a9271f4536ed4c2499c83f5953b3a2486d306d7aa17f0d7c2fde0efb8cbe9ac4346988adab0e039d082ec95d8d32703509 languageName: node linkType: hard -"@opentelemetry/semantic-conventions@npm:1.17.0": - version: 1.17.0 - resolution: "@opentelemetry/semantic-conventions@npm:1.17.0" - checksum: 3cb99118b3720aed37fa71d9b6c38847a481d5287653275477d30126de9e548f63a302efbd8a2086a747442880598bbde95ef17f8016dce45b85798696f12be4 +"@opentelemetry/semantic-conventions@npm:1.17.1": + version: 1.17.1 + resolution: "@opentelemetry/semantic-conventions@npm:1.17.1" + checksum: 16161f70526d2abcd37a39771229ffe01a25d569f76c86e97200dc20399e7fa87b231c557a9654629b4789e945350e4fc55f88df979a502911f1dde4643ad416 languageName: node linkType: hard @@ -25898,7 +25898,7 @@ __metadata: "@gitbeaker/node": ^35.1.0 "@octokit/rest": ^19.0.3 "@opentelemetry/api": ^1.4.1 - "@opentelemetry/exporter-prometheus": ^0.43.0 + "@opentelemetry/exporter-prometheus": ^0.44.0 "@opentelemetry/sdk-metrics": ^1.13.0 "@types/dockerode": ^3.3.0 "@types/express": ^4.17.6 From 00d7336022f150b23de7b64881ef0c5f7e6d33a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Br=C3=A4uer?= Date: Wed, 11 Oct 2023 08:10:09 +0200 Subject: [PATCH 150/227] Revert of CODEOWNERS change MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Johannes Bräuer --- .github/CODEOWNERS | 1 - plugins/dynatrace/catalog-info.yaml | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 8abca2e2a7..a0ba1163f3 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -38,7 +38,6 @@ yarn.lock @backstage/maintainers @backst /plugins/devtools @backstage/maintainers @backstage/reviewers @awanlin /plugins/devtools-backend @backstage/maintainers @backstage/reviewers @awanlin /plugins/devtools-common @backstage/maintainers @backstage/reviewers @awanlin -/plugins/dynatrace @backstage/maintainers @backstage/reviewers @Dynatrace /plugins/entity-feedback @backstage/maintainers @backstage/reviewers @kuangp /plugins/entity-feedback-* @backstage/maintainers @backstage/reviewers @kuangp /plugins/events-backend @backstage/maintainers @backstage/reviewers @pjungermann diff --git a/plugins/dynatrace/catalog-info.yaml b/plugins/dynatrace/catalog-info.yaml index 02bf532db3..64d6d5f845 100644 --- a/plugins/dynatrace/catalog-info.yaml +++ b/plugins/dynatrace/catalog-info.yaml @@ -6,4 +6,4 @@ metadata: spec: lifecycle: production type: backstage-frontend-plugin - owner: Dynatrace + owner: maintainers From 126990789f972b7d62f81036383514342059ae37 Mon Sep 17 00:00:00 2001 From: Abhay-soni-developer Date: Wed, 11 Oct 2023 13:44:43 +0530 Subject: [PATCH 151/227] modifications Signed-off-by: Abhay-soni-developer --- .../BuildsPage/lib/CITable/columns.tsx | 36 +++++++++++++++++-- .../BuildsPage/lib/CITable/presets.ts | 1 + 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/plugins/jenkins/src/components/BuildsPage/lib/CITable/columns.tsx b/plugins/jenkins/src/components/BuildsPage/lib/CITable/columns.tsx index 733a60c1b2..f18d3e5b21 100644 --- a/plugins/jenkins/src/components/BuildsPage/lib/CITable/columns.tsx +++ b/plugins/jenkins/src/components/BuildsPage/lib/CITable/columns.tsx @@ -19,9 +19,10 @@ import { useEntityPermission } from '@backstage/plugin-catalog-react/alpha'; import { Box, IconButton, Tooltip, Typography } from '@material-ui/core'; import RetryIcon from '@material-ui/icons/Replay'; import VisibilityIcon from '@material-ui/icons/Visibility'; +import HistoryIcon from '@material-ui/icons/History'; import { default as React, useState } from 'react'; import { Project } from '../../../../api/JenkinsApi'; -import { buildRouteRef } from '../../../../plugin'; +import { buildRouteRef, jobRunsRouteRef } from '../../../../plugin'; import { JenkinsRunStatus } from '../Status'; import { jenkinsExecutePermission } from '@backstage/plugin-jenkins-common'; @@ -186,6 +187,25 @@ export const columnFactories = Object.freeze({ }; }, + createLastRunDuration(): TableColumn { + return { + title: 'Last Run Duration', + align: 'left', + render: (row: Partial) => ( + <> + + {row?.lastBuild?.duration + ? (row?.lastBuild?.duration / 1000) + .toFixed(1) + .toString() + .concat(' s') + : ''}{' '} + + + ), + }; + }, + createActionsColumn(): TableColumn { return { title: 'Actions', @@ -198,6 +218,7 @@ export const columnFactories = Object.freeze({ ); const alertApi = useApi(alertApiRef); + const jobRunsLink = useRouteRef(jobRunsRouteRef); const onRebuild = async () => { if (row.onRestartClick) { @@ -221,7 +242,7 @@ export const columnFactories = Object.freeze({ }; return ( -
+
{row.lastBuild?.url && ( @@ -240,6 +261,17 @@ export const columnFactories = Object.freeze({ )} + + + + + + +
); }; diff --git a/plugins/jenkins/src/components/BuildsPage/lib/CITable/presets.ts b/plugins/jenkins/src/components/BuildsPage/lib/CITable/presets.ts index 7c0dda9970..828e035c8e 100644 --- a/plugins/jenkins/src/components/BuildsPage/lib/CITable/presets.ts +++ b/plugins/jenkins/src/components/BuildsPage/lib/CITable/presets.ts @@ -24,5 +24,6 @@ export const defaultCITableColumns: TableColumn[] = [ columnFactories.createBuildColumn(), columnFactories.createTestColumn(), columnFactories.createStatusColumn(), + columnFactories.createLastRunDuration(), columnFactories.createActionsColumn(), ]; From d7c5d80c57ef054c9f302221047ce51d4caee987 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Tue, 10 Oct 2023 13:43:51 +0200 Subject: [PATCH 152/227] frontend-app-api: move root extension to be an input on core instead Signed-off-by: Patrik Oldsberg --- .changeset/slow-cameras-grab.md | 5 + .../frontend-app-api/src/extensions/Core.tsx | 16 ++- .../src/extensions/CoreLayout.tsx | 2 +- .../extractRouteInfoFromInstanceTree.test.ts | 4 +- .../extractRouteInfoFromInstanceTree.ts | 6 +- .../src/wiring/createApp.test.tsx | 104 ++++++------------ .../frontend-app-api/src/wiring/createApp.tsx | 38 ++----- .../frontend-app-api/src/wiring/parameters.ts | 16 +-- .../src/wiring/createPlugin.test.ts | 2 +- 9 files changed, 81 insertions(+), 112 deletions(-) create mode 100644 .changeset/slow-cameras-grab.md diff --git a/.changeset/slow-cameras-grab.md b/.changeset/slow-cameras-grab.md new file mode 100644 index 0000000000..d2ffaac73d --- /dev/null +++ b/.changeset/slow-cameras-grab.md @@ -0,0 +1,5 @@ +--- +'@backstage/frontend-app-api': minor +--- + +The hidden `'root'` extension has been removed and has instead been made an input of the `'core'` extension. The checks for rejecting configuration of the `'root'` extension to rejects configuration of the `'core'` extension instead. diff --git a/packages/frontend-app-api/src/extensions/Core.tsx b/packages/frontend-app-api/src/extensions/Core.tsx index ec00059bf8..6efe3984dc 100644 --- a/packages/frontend-app-api/src/extensions/Core.tsx +++ b/packages/frontend-app-api/src/extensions/Core.tsx @@ -30,7 +30,19 @@ export const Core = createExtension({ themes: createExtensionInput({ theme: coreExtensionData.theme, }), + root: createExtensionInput( + { + element: coreExtensionData.reactElement, + }, + { singleton: true }, + ), + }, + output: { + root: coreExtensionData.reactElement, + }, + factory({ bind, inputs }) { + bind({ + root: inputs.root.element, + }); }, - output: {}, - factory() {}, }); diff --git a/packages/frontend-app-api/src/extensions/CoreLayout.tsx b/packages/frontend-app-api/src/extensions/CoreLayout.tsx index 9b0b8b25d1..bf0f382cfc 100644 --- a/packages/frontend-app-api/src/extensions/CoreLayout.tsx +++ b/packages/frontend-app-api/src/extensions/CoreLayout.tsx @@ -24,7 +24,7 @@ import { SidebarPage } from '@backstage/core-components'; export const CoreLayout = createExtension({ id: 'core.layout', - attachTo: { id: 'root', input: 'default' }, + attachTo: { id: 'core', input: 'root' }, inputs: { nav: createExtensionInput( { diff --git a/packages/frontend-app-api/src/routing/extractRouteInfoFromInstanceTree.test.ts b/packages/frontend-app-api/src/routing/extractRouteInfoFromInstanceTree.test.ts index 17c224ab45..e70f588e0e 100644 --- a/packages/frontend-app-api/src/routing/extractRouteInfoFromInstanceTree.test.ts +++ b/packages/frontend-app-api/src/routing/extractRouteInfoFromInstanceTree.test.ts @@ -74,12 +74,12 @@ function routeInfoFromExtensions(extensions: Extension[]) { id: 'test', extensions, }); - const { rootInstances } = createInstances({ + const { coreInstance } = createInstances({ config: new MockConfigApi({}), features: [plugin], }); - return extractRouteInfoFromInstanceTree(rootInstances); + return extractRouteInfoFromInstanceTree(coreInstance); } function sortedEntries(map: Map): [RouteRef, T][] { diff --git a/packages/frontend-app-api/src/routing/extractRouteInfoFromInstanceTree.ts b/packages/frontend-app-api/src/routing/extractRouteInfoFromInstanceTree.ts index 30305b0d2c..fa9f87dce0 100644 --- a/packages/frontend-app-api/src/routing/extractRouteInfoFromInstanceTree.ts +++ b/packages/frontend-app-api/src/routing/extractRouteInfoFromInstanceTree.ts @@ -42,7 +42,7 @@ export function joinPaths(...paths: string[]): string { return normalized; } -export function extractRouteInfoFromInstanceTree(roots: ExtensionInstance[]): { +export function extractRouteInfoFromInstanceTree(core: ExtensionInstance): { routePaths: Map; routeParents: Map; routeObjects: BackstageRouteObject[]; @@ -151,9 +151,7 @@ export function extractRouteInfoFromInstanceTree(roots: ExtensionInstance[]): { } } - for (const root of roots) { - visit(root); - } + visit(core); return { routePaths, routeParents, routeObjects }; } diff --git a/packages/frontend-app-api/src/wiring/createApp.test.tsx b/packages/frontend-app-api/src/wiring/createApp.test.tsx index 81937405fe..65f278b49b 100644 --- a/packages/frontend-app-api/src/wiring/createApp.test.tsx +++ b/packages/frontend-app-api/src/wiring/createApp.test.tsx @@ -16,7 +16,6 @@ import { createExtension, - createExtensionInput, createExtensionOverrides, createPageExtension, createPlugin, @@ -27,7 +26,6 @@ import { screen } from '@testing-library/react'; import { MockConfigApi, renderWithEffects } from '@backstage/test-utils'; import React from 'react'; import { createRouteRef } from '@backstage/core-plugin-api'; -import { createExtensionInstance } from './createExtensionInstance'; const extBaseConfig = { id: 'test', @@ -37,12 +35,12 @@ const extBaseConfig = { }; describe('createInstances', () => { - it('throws an error when a root extension is parametrized', () => { + it('throws an error when a core extension is parametrized', () => { const config = new MockConfigApi({ app: { extensions: [ { - root: {}, + core: {}, }, ], }, @@ -54,18 +52,18 @@ describe('createInstances', () => { }), ]; expect(() => createInstances({ config, features })).toThrow( - "A 'root' extension configuration was detected, but the root extension is not configurable", + "A 'core' extension configuration was detected, but the core extension is not configurable", ); }); - it('throws an error when a root extension is overridden', () => { + it('throws an error when a core extension is overridden', () => { const config = new MockConfigApi({}); const features = [ createPlugin({ id: 'plugin', extensions: [ createExtension({ - id: 'root', + id: 'core', attachTo: { id: 'core.routes', input: 'route' }, inputs: {}, output: {}, @@ -75,7 +73,7 @@ describe('createInstances', () => { }), ]; expect(() => createInstances({ config, features })).toThrow( - "The following plugin(s) are overriding the 'root' extension which is forbidden: plugin", + "The following plugin(s) are overriding the 'core' extension which is forbidden: plugin", ); }); @@ -164,33 +162,14 @@ describe('createApp', () => { }); it('should log an app', () => { - const { rootInstances } = createInstances({ + const { coreInstance } = createInstances({ config: new MockConfigApi({}), features: [], }); - const root = createExtensionInstance({ - extension: createExtension({ - id: 'root', - attachTo: { id: '', input: '' }, - inputs: { - children: createExtensionInput({}), - }, - output: {}, - factory() {}, - }), - config: undefined, - attachments: new Map([['children', rootInstances]]), - }); - expect(String(root)).toMatchInlineSnapshot(` - " - children [ - - themes [ - - - ] - + expect(String(coreInstance)).toMatchInlineSnapshot(` + " + root [ content [ @@ -200,52 +179,24 @@ describe('createApp', () => { ] ] - " + themes [ + + + ] + " `); }); it('should serialize an app as JSON', () => { - const { rootInstances } = createInstances({ + const { coreInstance } = createInstances({ config: new MockConfigApi({}), features: [], }); - const root = createExtensionInstance({ - extension: createExtension({ - id: 'root', - attachTo: { id: '', input: '' }, - inputs: { - children: createExtensionInput({}), - }, - output: {}, - factory() {}, - }), - config: undefined, - attachments: new Map([['children', rootInstances]]), - }); - expect(JSON.parse(JSON.stringify(root))).toMatchInlineSnapshot(` + expect(JSON.parse(JSON.stringify(coreInstance))).toMatchInlineSnapshot(` { "attachments": { - "children": [ - { - "attachments": { - "themes": [ - { - "id": "themes.light", - "output": [ - "core.theme", - ], - }, - { - "id": "themes.dark", - "output": [ - "core.theme", - ], - }, - ], - }, - "id": "core", - }, + "root": [ { "attachments": { "content": [ @@ -271,8 +222,25 @@ describe('createApp', () => { ], }, ], + "themes": [ + { + "id": "themes.light", + "output": [ + "core.theme", + ], + }, + { + "id": "themes.dark", + "output": [ + "core.theme", + ], + }, + ], }, - "id": "root", + "id": "core", + "output": [ + "core.reactElement", + ], } `); }); diff --git a/packages/frontend-app-api/src/wiring/createApp.tsx b/packages/frontend-app-api/src/wiring/createApp.tsx index 873e774ad8..3999cad738 100644 --- a/packages/frontend-app-api/src/wiring/createApp.tsx +++ b/packages/frontend-app-api/src/wiring/createApp.tsx @@ -250,13 +250,11 @@ export function createInstances(options: { return newInstance; } - const rootConfigs = attachmentMap.get('root')?.get('default') ?? []; - - const rootInstances = rootConfigs.map(instanceParams => - createInstance(instanceParams), + const coreInstance = createInstance( + extensionParams.find(p => p.extension.id === 'core')!, ); - return { instances, rootInstances }; + return { coreInstance, instances }; } /** @public */ @@ -286,41 +284,29 @@ export function createApp(options: { ]), ); - const { rootInstances } = createInstances({ + const { coreInstance } = createInstances({ features: allFeatures, config, }); - const routeInfo = extractRouteInfoFromInstanceTree(rootInstances); - - const coreInstance = rootInstances.find(({ id }) => id === 'core'); - if (!coreInstance) { - throw Error('Unable to find core extension instance'); - } - - const apiHolder = createApiHolder(coreInstance, config); - const appContext = createLegacyAppContext( allFeatures.filter( (f): f is BackstagePlugin => f.$$type === '@backstage/BackstagePlugin', ), ); - const rootElements = rootInstances - .map(e => ( - - {e.getData(coreExtensionData.reactElement)} - - )) - .filter((x): x is JSX.Element => !!x); - const App = () => ( - + - + {/* TODO: set base path using the logic from AppRouter */} - {rootElements} + + {coreInstance.getData(coreExtensionData.reactElement)} + diff --git a/packages/frontend-app-api/src/wiring/parameters.ts b/packages/frontend-app-api/src/wiring/parameters.ts index e81d5f74cb..911f12f416 100644 --- a/packages/frontend-app-api/src/wiring/parameters.ts +++ b/packages/frontend-app-api/src/wiring/parameters.ts @@ -235,13 +235,13 @@ export function mergeExtensionParameters(options: { override => toInternalExtensionOverrides(override).extensions, ); - // Prevent root override - if (pluginExtensions.some(({ id }) => id === 'root')) { - const rootPluginIds = pluginExtensions - .filter(({ id }) => id === 'root') + // Prevent core override + if (pluginExtensions.some(({ id }) => id === 'core')) { + const pluginIds = pluginExtensions + .filter(({ id }) => id === 'core') .map(({ source }) => source.id); throw new Error( - `The following plugin(s) are overriding the 'root' extension which is forbidden: ${rootPluginIds.join( + `The following plugin(s) are overriding the 'core' extension which is forbidden: ${pluginIds.join( ',', )}`, ); @@ -352,10 +352,10 @@ export function mergeExtensionParameters(options: { for (const overrideParam of parameters) { const extensionId = overrideParam.id; - // Prevent root parametrization - if (extensionId === 'root') { + // Prevent core parametrization + if (extensionId === 'core') { throw new Error( - "A 'root' extension configuration was detected, but the root extension is not configurable", + "A 'core' extension configuration was detected, but the core extension is not configurable", ); } diff --git a/packages/frontend-plugin-api/src/wiring/createPlugin.test.ts b/packages/frontend-plugin-api/src/wiring/createPlugin.test.ts index 07841b3a9a..7f73c45544 100644 --- a/packages/frontend-plugin-api/src/wiring/createPlugin.test.ts +++ b/packages/frontend-plugin-api/src/wiring/createPlugin.test.ts @@ -85,7 +85,7 @@ const TechDocsPage = createExtension({ const outputExtension = createExtension({ id: 'test.output', - attachTo: { id: 'root', input: 'default' }, + attachTo: { id: 'core', input: 'root' }, inputs: { names: createExtensionInput({ name: nameExtensionDataRef, From ad7dbe087c4a38bae7ed204694b3c5d1b7b0de63 Mon Sep 17 00:00:00 2001 From: Abhay-soni-developer Date: Wed, 11 Oct 2023 14:32:22 +0530 Subject: [PATCH 153/227] readme fixed Signed-off-by: Abhay-soni-developer --- plugins/jenkins/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/jenkins/README.md b/plugins/jenkins/README.md index d61c057237..b62eaab514 100644 --- a/plugins/jenkins/README.md +++ b/plugins/jenkins/README.md @@ -6,8 +6,8 @@ Website: [https://jenkins.io/](https://jenkins.io/) Folder results Build details Job builds records - Modify Table Columns + ## Setup 1. If you have a standalone app (you didn't clone this repo), then do @@ -106,6 +106,7 @@ spec: - View all builds of a particular job - shows average build time for successful builds + ## Modify Columns of EntityJenkinsContent - now you can pass down column props to show the columns/metadata as per your use case. From f95af4e5408e06fddfb016f335b33b445aa66847 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 11 Oct 2023 09:06:49 +0000 Subject: [PATCH 154/227] chore(deps): update dependency @testing-library/dom to v9 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .changeset/renovate-37d5549.md | 86 ++++++++ packages/app-next/package.json | 2 +- packages/app/package.json | 2 +- packages/core-app-api/package.json | 2 +- packages/core-components/package.json | 2 +- packages/core-plugin-api/package.json | 2 +- packages/dev-utils/package.json | 2 +- packages/integration-react/package.json | 2 +- .../techdocs-cli-embedded-app/package.json | 2 +- plugins/adr/package.json | 2 +- plugins/airbrake/package.json | 2 +- plugins/allure/package.json | 2 +- plugins/analytics-module-ga/package.json | 2 +- plugins/analytics-module-ga4/package.json | 2 +- plugins/apache-airflow/package.json | 2 +- plugins/api-docs/package.json | 2 +- plugins/apollo-explorer/package.json | 2 +- plugins/azure-devops/package.json | 2 +- plugins/azure-sites/package.json | 2 +- plugins/bitrise/package.json | 2 +- plugins/catalog-graph/package.json | 2 +- plugins/catalog-import/package.json | 2 +- plugins/catalog-react/package.json | 2 +- plugins/catalog/package.json | 2 +- plugins/circleci/package.json | 2 +- plugins/cloudbuild/package.json | 2 +- plugins/code-climate/package.json | 2 +- plugins/code-coverage/package.json | 2 +- plugins/codescene/package.json | 2 +- plugins/config-schema/package.json | 2 +- plugins/cost-insights/package.json | 2 +- plugins/dynatrace/package.json | 2 +- plugins/entity-feedback/package.json | 2 +- plugins/entity-validation/package.json | 2 +- plugins/example-todo-list/package.json | 2 +- plugins/explore-react/package.json | 2 +- plugins/explore/package.json | 2 +- plugins/firehydrant/package.json | 2 +- plugins/fossa/package.json | 2 +- plugins/gcalendar/package.json | 2 +- plugins/gcp-projects/package.json | 2 +- plugins/git-release-manager/package.json | 2 +- plugins/github-actions/package.json | 2 +- plugins/github-deployments/package.json | 2 +- plugins/github-issues/package.json | 2 +- .../github-pull-requests-board/package.json | 2 +- plugins/gitops-profiles/package.json | 2 +- plugins/gocd/package.json | 2 +- plugins/graphiql/package.json | 2 +- plugins/graphql-voyager/package.json | 2 +- plugins/home-react/package.json | 2 +- plugins/home/package.json | 2 +- plugins/ilert/package.json | 2 +- plugins/jenkins/package.json | 2 +- plugins/kafka/package.json | 2 +- plugins/kubernetes-cluster/package.json | 2 +- plugins/kubernetes/package.json | 2 +- plugins/lighthouse/package.json | 2 +- plugins/linguist/package.json | 2 +- plugins/microsoft-calendar/package.json | 2 +- plugins/newrelic/package.json | 2 +- plugins/octopus-deploy/package.json | 2 +- plugins/org-react/package.json | 2 +- plugins/org/package.json | 2 +- plugins/pagerduty/package.json | 2 +- plugins/periskop/package.json | 2 +- plugins/playlist/package.json | 2 +- plugins/rollbar/package.json | 2 +- plugins/scaffolder-react/package.json | 2 +- plugins/scaffolder/package.json | 2 +- plugins/search-react/package.json | 2 +- plugins/search/package.json | 2 +- plugins/sentry/package.json | 2 +- plugins/shortcuts/package.json | 2 +- plugins/sonarqube/package.json | 2 +- plugins/splunk-on-call/package.json | 2 +- plugins/stack-overflow/package.json | 2 +- plugins/stackstorm/package.json | 2 +- plugins/tech-insights/package.json | 2 +- plugins/tech-radar/package.json | 2 +- .../techdocs-addons-test-utils/package.json | 2 +- .../package.json | 2 +- plugins/techdocs/package.json | 2 +- plugins/todo/package.json | 2 +- plugins/user-settings/package.json | 2 +- plugins/vault/package.json | 2 +- plugins/xcmetrics/package.json | 2 +- yarn.lock | 188 ++++++++++-------- 88 files changed, 274 insertions(+), 172 deletions(-) create mode 100644 .changeset/renovate-37d5549.md diff --git a/.changeset/renovate-37d5549.md b/.changeset/renovate-37d5549.md new file mode 100644 index 0000000000..4aae56e839 --- /dev/null +++ b/.changeset/renovate-37d5549.md @@ -0,0 +1,86 @@ +--- +'@backstage/core-app-api': patch +'@backstage/core-components': patch +'@backstage/core-plugin-api': patch +'@backstage/dev-utils': patch +'@backstage/integration-react': patch +'@backstage/plugin-adr': patch +'@backstage/plugin-airbrake': patch +'@backstage/plugin-allure': patch +'@backstage/plugin-analytics-module-ga': patch +'@backstage/plugin-analytics-module-ga4': patch +'@backstage/plugin-apache-airflow': patch +'@backstage/plugin-api-docs': patch +'@backstage/plugin-apollo-explorer': patch +'@backstage/plugin-azure-devops': patch +'@backstage/plugin-azure-sites': patch +'@backstage/plugin-bitrise': patch +'@backstage/plugin-catalog-graph': patch +'@backstage/plugin-catalog-import': patch +'@backstage/plugin-catalog-react': patch +'@backstage/plugin-catalog': patch +'@backstage/plugin-circleci': patch +'@backstage/plugin-cloudbuild': patch +'@backstage/plugin-code-climate': patch +'@backstage/plugin-code-coverage': patch +'@backstage/plugin-codescene': patch +'@backstage/plugin-config-schema': patch +'@backstage/plugin-cost-insights': patch +'@backstage/plugin-dynatrace': patch +'@backstage/plugin-entity-feedback': patch +'@backstage/plugin-entity-validation': patch +'@backstage/plugin-explore-react': patch +'@backstage/plugin-explore': patch +'@backstage/plugin-firehydrant': patch +'@backstage/plugin-fossa': patch +'@backstage/plugin-gcalendar': patch +'@backstage/plugin-gcp-projects': patch +'@backstage/plugin-git-release-manager': patch +'@backstage/plugin-github-actions': patch +'@backstage/plugin-github-deployments': patch +'@backstage/plugin-github-issues': patch +'@backstage/plugin-github-pull-requests-board': patch +'@backstage/plugin-gitops-profiles': patch +'@backstage/plugin-gocd': patch +'@backstage/plugin-graphiql': patch +'@backstage/plugin-graphql-voyager': patch +'@backstage/plugin-home-react': patch +'@backstage/plugin-home': patch +'@backstage/plugin-ilert': patch +'@backstage/plugin-jenkins': patch +'@backstage/plugin-kafka': patch +'@backstage/plugin-kubernetes-cluster': patch +'@backstage/plugin-kubernetes': patch +'@backstage/plugin-lighthouse': patch +'@backstage/plugin-linguist': patch +'@backstage/plugin-microsoft-calendar': patch +'@backstage/plugin-newrelic': patch +'@backstage/plugin-octopus-deploy': patch +'@backstage/plugin-org-react': patch +'@backstage/plugin-org': patch +'@backstage/plugin-pagerduty': patch +'@backstage/plugin-periskop': patch +'@backstage/plugin-playlist': patch +'@backstage/plugin-rollbar': patch +'@backstage/plugin-scaffolder-react': patch +'@backstage/plugin-scaffolder': patch +'@backstage/plugin-search-react': patch +'@backstage/plugin-search': patch +'@backstage/plugin-sentry': patch +'@backstage/plugin-shortcuts': patch +'@backstage/plugin-sonarqube': patch +'@backstage/plugin-splunk-on-call': patch +'@backstage/plugin-stack-overflow': patch +'@backstage/plugin-stackstorm': patch +'@backstage/plugin-tech-insights': patch +'@backstage/plugin-tech-radar': patch +'@backstage/plugin-techdocs-addons-test-utils': patch +'@backstage/plugin-techdocs-module-addons-contrib': patch +'@backstage/plugin-techdocs': patch +'@backstage/plugin-todo': patch +'@backstage/plugin-user-settings': patch +'@backstage/plugin-vault': patch +'@backstage/plugin-xcmetrics': patch +--- + +Updated dependency `@testing-library/dom` to `^9.0.0`. diff --git a/packages/app-next/package.json b/packages/app-next/package.json index b7fc704476..d85b40ecb0 100644 --- a/packages/app-next/package.json +++ b/packages/app-next/package.json @@ -98,7 +98,7 @@ }, "devDependencies": { "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/packages/app/package.json b/packages/app/package.json index b8ecc84b9d..a7281b0a2b 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -104,7 +104,7 @@ "devDependencies": { "@backstage/test-utils": "workspace:^", "@playwright/test": "^1.32.3", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/packages/core-app-api/package.json b/packages/core-app-api/package.json index e3332998df..1756cf2c5a 100644 --- a/packages/core-app-api/package.json +++ b/packages/core-app-api/package.json @@ -64,7 +64,7 @@ "devDependencies": { "@backstage/cli": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/packages/core-components/package.json index 1a5067b874..5cd1bdfeef 100644 --- a/packages/core-components/package.json +++ b/packages/core-components/package.json @@ -86,7 +86,7 @@ "@backstage/cli": "workspace:^", "@backstage/core-app-api": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/packages/core-plugin-api/package.json index bc81e292cb..2c76e2cc3e 100644 --- a/packages/core-plugin-api/package.json +++ b/packages/core-plugin-api/package.json @@ -62,7 +62,7 @@ "@backstage/cli": "workspace:^", "@backstage/core-app-api": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", diff --git a/packages/dev-utils/package.json b/packages/dev-utils/package.json index 172b66132e..28e8ace635 100644 --- a/packages/dev-utils/package.json +++ b/packages/dev-utils/package.json @@ -44,7 +44,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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-react/package.json b/packages/integration-react/package.json index 4f25bc3578..d8ab6a835a 100644 --- a/packages/integration-react/package.json +++ b/packages/integration-react/package.json @@ -47,7 +47,7 @@ "@backstage/core-components": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@testing-library/jest-dom": "^5.10.1", "msw": "^1.0.0" }, diff --git a/packages/techdocs-cli-embedded-app/package.json b/packages/techdocs-cli-embedded-app/package.json index 55e78486cf..e419503a0a 100644 --- a/packages/techdocs-cli-embedded-app/package.json +++ b/packages/techdocs-cli-embedded-app/package.json @@ -36,7 +36,7 @@ }, "devDependencies": { "@backstage/cli": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/adr/package.json b/plugins/adr/package.json index 6624bf38d5..218f52cf3c 100644 --- a/plugins/adr/package.json +++ b/plugins/adr/package.json @@ -71,7 +71,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/airbrake/package.json index 65a5706ae8..2c8eb9ea11 100644 --- a/plugins/airbrake/package.json +++ b/plugins/airbrake/package.json @@ -52,7 +52,7 @@ "@backstage/cli": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/allure/package.json index dec5815989..43e7ac148a 100644 --- a/plugins/allure/package.json +++ b/plugins/allure/package.json @@ -51,7 +51,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/analytics-module-ga/package.json index c06717bb68..e81b4fb8bf 100644 --- a/plugins/analytics-module-ga/package.json +++ b/plugins/analytics-module-ga/package.json @@ -49,7 +49,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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-ga4/package.json b/plugins/analytics-module-ga4/package.json index e719aa88d9..e660fe3fdb 100644 --- a/plugins/analytics-module-ga4/package.json +++ b/plugins/analytics-module-ga4/package.json @@ -46,7 +46,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/apache-airflow/package.json index 7a0c7cbcc2..d5af85baba 100644 --- a/plugins/apache-airflow/package.json +++ b/plugins/apache-airflow/package.json @@ -49,7 +49,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/api-docs/package.json index c115ac4444..a50800fe26 100644 --- a/plugins/api-docs/package.json +++ b/plugins/api-docs/package.json @@ -61,7 +61,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/apollo-explorer/package.json index 95f743f130..cd5ee053ea 100644 --- a/plugins/apollo-explorer/package.json +++ b/plugins/apollo-explorer/package.json @@ -49,7 +49,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/azure-devops/package.json b/plugins/azure-devops/package.json index 90615005ee..68167d20fe 100644 --- a/plugins/azure-devops/package.json +++ b/plugins/azure-devops/package.json @@ -54,7 +54,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/azure-sites/package.json b/plugins/azure-sites/package.json index 99dd46a36a..1820317ce6 100644 --- a/plugins/azure-sites/package.json +++ b/plugins/azure-sites/package.json @@ -56,7 +56,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/bitrise/package.json b/plugins/bitrise/package.json index b0bca55062..e75a31b59a 100644 --- a/plugins/bitrise/package.json +++ b/plugins/bitrise/package.json @@ -55,7 +55,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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-graph/package.json b/plugins/catalog-graph/package.json index 3c58eebd3f..5da8f630fa 100644 --- a/plugins/catalog-graph/package.json +++ b/plugins/catalog-graph/package.json @@ -57,7 +57,7 @@ "@backstage/dev-utils": "workspace:^", "@backstage/plugin-catalog": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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-import/package.json b/plugins/catalog-import/package.json index 3650482d77..3a3f960d34 100644 --- a/plugins/catalog-import/package.json +++ b/plugins/catalog-import/package.json @@ -65,7 +65,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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-react/package.json b/plugins/catalog-react/package.json index 356159d2e6..ed2875c1bc 100644 --- a/plugins/catalog-react/package.json +++ b/plugins/catalog-react/package.json @@ -82,7 +82,7 @@ "@backstage/plugin-catalog-common": "workspace:^", "@backstage/plugin-scaffolder-common": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/catalog/package.json index 6b26ffa9f3..bf3c94ce6f 100644 --- a/plugins/catalog/package.json +++ b/plugins/catalog/package.json @@ -81,7 +81,7 @@ "@backstage/dev-utils": "workspace:^", "@backstage/plugin-permission-react": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0" diff --git a/plugins/circleci/package.json b/plugins/circleci/package.json index ae5d0d2665..e63a252b47 100644 --- a/plugins/circleci/package.json +++ b/plugins/circleci/package.json @@ -59,7 +59,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/cloudbuild/package.json index ba7c42fe23..13254463b6 100644 --- a/plugins/cloudbuild/package.json +++ b/plugins/cloudbuild/package.json @@ -57,7 +57,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/code-climate/package.json index d186a6a321..0b2fbbd74c 100644 --- a/plugins/code-climate/package.json +++ b/plugins/code-climate/package.json @@ -51,7 +51,7 @@ "@backstage/cli": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/code-coverage/package.json index 779fd21aef..2c90ee4e0e 100644 --- a/plugins/code-coverage/package.json +++ b/plugins/code-coverage/package.json @@ -56,7 +56,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/codescene/package.json index 0ced12ecac..0465bf8fa2 100644 --- a/plugins/codescene/package.json +++ b/plugins/codescene/package.json @@ -51,7 +51,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/config-schema/package.json index e6230122e2..060d94dcd0 100644 --- a/plugins/config-schema/package.json +++ b/plugins/config-schema/package.json @@ -54,7 +54,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/cost-insights/package.json index bd985a9d74..a6d2aeec4d 100644 --- a/plugins/cost-insights/package.json +++ b/plugins/cost-insights/package.json @@ -66,7 +66,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/dynatrace/package.json index 2cde98bff9..eacccae74b 100644 --- a/plugins/dynatrace/package.json +++ b/plugins/dynatrace/package.json @@ -50,7 +50,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/entity-feedback/package.json b/plugins/entity-feedback/package.json index cc5f0231af..c6b2b7d478 100644 --- a/plugins/entity-feedback/package.json +++ b/plugins/entity-feedback/package.json @@ -52,7 +52,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.1", diff --git a/plugins/entity-validation/package.json b/plugins/entity-validation/package.json index 910198c057..9981f36a59 100644 --- a/plugins/entity-validation/package.json +++ b/plugins/entity-validation/package.json @@ -60,7 +60,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/example-todo-list/package.json index 93e16f2fd0..9687c60876 100644 --- a/plugins/example-todo-list/package.json +++ b/plugins/example-todo-list/package.json @@ -48,7 +48,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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-react/package.json b/plugins/explore-react/package.json index 629f1453c4..5a7ba48317 100644 --- a/plugins/explore-react/package.json +++ b/plugins/explore-react/package.json @@ -45,7 +45,7 @@ "@backstage/cli": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/explore/package.json index 8653182e69..61c11b45c8 100644 --- a/plugins/explore/package.json +++ b/plugins/explore/package.json @@ -76,7 +76,7 @@ "@backstage/dev-utils": "workspace:^", "@backstage/plugin-catalog": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/firehydrant/package.json index 2115b5500c..6c6d6af325 100644 --- a/plugins/firehydrant/package.json +++ b/plugins/firehydrant/package.json @@ -52,7 +52,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/fossa/package.json index d90743fab7..c26100a83f 100644 --- a/plugins/fossa/package.json +++ b/plugins/fossa/package.json @@ -59,7 +59,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/gcalendar/package.json index 5ebf5eadd0..84770ba474 100644 --- a/plugins/gcalendar/package.json +++ b/plugins/gcalendar/package.json @@ -57,7 +57,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/gcp-projects/package.json index c0272400e3..ba6de93a90 100644 --- a/plugins/gcp-projects/package.json +++ b/plugins/gcp-projects/package.json @@ -53,7 +53,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/git-release-manager/package.json index f7d82005cd..8b0f3472f7 100644 --- a/plugins/git-release-manager/package.json +++ b/plugins/git-release-manager/package.json @@ -54,7 +54,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/github-actions/package.json index 6ed67be839..f15586c758 100644 --- a/plugins/github-actions/package.json +++ b/plugins/github-actions/package.json @@ -61,7 +61,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/github-deployments/package.json index 3e6f9f111f..27ffddc324 100644 --- a/plugins/github-deployments/package.json +++ b/plugins/github-deployments/package.json @@ -56,7 +56,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/github-issues/package.json index 7afbeb9d65..5db8c0d36e 100644 --- a/plugins/github-issues/package.json +++ b/plugins/github-issues/package.json @@ -54,7 +54,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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-pull-requests-board/package.json b/plugins/github-pull-requests-board/package.json index b06b02d418..05d3487f58 100644 --- a/plugins/github-pull-requests-board/package.json +++ b/plugins/github-pull-requests-board/package.json @@ -59,7 +59,7 @@ "@backstage/cli": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/gitops-profiles/package.json index 420d23e5b4..141c7e25a1 100644 --- a/plugins/gitops-profiles/package.json +++ b/plugins/gitops-profiles/package.json @@ -54,7 +54,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/gocd/package.json index 0830d098d7..58e563aad9 100644 --- a/plugins/gocd/package.json +++ b/plugins/gocd/package.json @@ -54,7 +54,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/graphiql/package.json index 5ac45c0f42..a123ca2d70 100644 --- a/plugins/graphiql/package.json +++ b/plugins/graphiql/package.json @@ -69,7 +69,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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-voyager/package.json b/plugins/graphql-voyager/package.json index 2a41a7ebfc..ccc1bd55b1 100644 --- a/plugins/graphql-voyager/package.json +++ b/plugins/graphql-voyager/package.json @@ -50,7 +50,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/home-react/package.json b/plugins/home-react/package.json index 3083d45682..98c47c0a36 100644 --- a/plugins/home-react/package.json +++ b/plugins/home-react/package.json @@ -51,7 +51,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/home/package.json b/plugins/home/package.json index dee7336e9a..f89532a4dc 100644 --- a/plugins/home/package.json +++ b/plugins/home/package.json @@ -67,7 +67,7 @@ "@backstage/cli": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.1", diff --git a/plugins/ilert/package.json b/plugins/ilert/package.json index 75bd7eeed0..99f0fec29f 100644 --- a/plugins/ilert/package.json +++ b/plugins/ilert/package.json @@ -56,7 +56,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/jenkins/package.json index 3db1402ffd..936588161f 100644 --- a/plugins/jenkins/package.json +++ b/plugins/jenkins/package.json @@ -58,7 +58,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/kafka/package.json index 3c3e5b34bf..4f29b14d6c 100644 --- a/plugins/kafka/package.json +++ b/plugins/kafka/package.json @@ -53,7 +53,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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-cluster/package.json b/plugins/kubernetes-cluster/package.json index bd528c5b5c..8fca99e94d 100644 --- a/plugins/kubernetes-cluster/package.json +++ b/plugins/kubernetes-cluster/package.json @@ -66,7 +66,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/kubernetes/package.json index 972200ebca..93ab56e05f 100644 --- a/plugins/kubernetes/package.json +++ b/plugins/kubernetes/package.json @@ -71,7 +71,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/lighthouse/package.json index 1f43ab2d03..c6157ec728 100644 --- a/plugins/lighthouse/package.json +++ b/plugins/lighthouse/package.json @@ -57,7 +57,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", diff --git a/plugins/linguist/package.json b/plugins/linguist/package.json index 88b5cf6d05..df8eb4a8fc 100644 --- a/plugins/linguist/package.json +++ b/plugins/linguist/package.json @@ -54,7 +54,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/microsoft-calendar/package.json b/plugins/microsoft-calendar/package.json index 3cbd22c06d..b95950b703 100644 --- a/plugins/microsoft-calendar/package.json +++ b/plugins/microsoft-calendar/package.json @@ -74,7 +74,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/newrelic/package.json b/plugins/newrelic/package.json index 0826cf6637..a093609669 100644 --- a/plugins/newrelic/package.json +++ b/plugins/newrelic/package.json @@ -55,7 +55,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/octopus-deploy/package.json b/plugins/octopus-deploy/package.json index 08f086f46f..3df546ffd4 100644 --- a/plugins/octopus-deploy/package.json +++ b/plugins/octopus-deploy/package.json @@ -50,7 +50,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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-react/package.json b/plugins/org-react/package.json index a07ad079be..2ae05f4741 100644 --- a/plugins/org-react/package.json +++ b/plugins/org-react/package.json @@ -54,7 +54,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/org/package.json index a3e31e1ebd..50417956e1 100644 --- a/plugins/org/package.json +++ b/plugins/org/package.json @@ -59,7 +59,7 @@ "@backstage/plugin-permission-react": "workspace:^", "@backstage/test-utils": "workspace:^", "@backstage/types": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.1", diff --git a/plugins/pagerduty/package.json b/plugins/pagerduty/package.json index e4ed8f1e7d..8558fd6967 100644 --- a/plugins/pagerduty/package.json +++ b/plugins/pagerduty/package.json @@ -59,7 +59,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/periskop/package.json index 1344b2ec37..f434bbab6a 100644 --- a/plugins/periskop/package.json +++ b/plugins/periskop/package.json @@ -52,7 +52,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/plugins/playlist/package.json b/plugins/playlist/package.json index f29ab8d9aa..9e3943e1d7 100644 --- a/plugins/playlist/package.json +++ b/plugins/playlist/package.json @@ -60,7 +60,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/react-hooks": "^8.0.0", diff --git a/plugins/rollbar/package.json b/plugins/rollbar/package.json index 6f31b48dc8..678bb38351 100644 --- a/plugins/rollbar/package.json +++ b/plugins/rollbar/package.json @@ -57,7 +57,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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-react/package.json b/plugins/scaffolder-react/package.json index 8483ce0842..f714c05517 100644 --- a/plugins/scaffolder-react/package.json +++ b/plugins/scaffolder-react/package.json @@ -93,7 +93,7 @@ "@backstage/plugin-catalog": "workspace:^", "@backstage/plugin-catalog-common": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/scaffolder/package.json index 03389f3fa0..bfc5195fb1 100644 --- a/plugins/scaffolder/package.json +++ b/plugins/scaffolder/package.json @@ -102,7 +102,7 @@ "@backstage/dev-utils": "workspace:^", "@backstage/plugin-catalog": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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-react/package.json b/plugins/search-react/package.json index 1c4cbfb8b6..dcd467dbb7 100644 --- a/plugins/search-react/package.json +++ b/plugins/search-react/package.json @@ -70,7 +70,7 @@ "@backstage/cli": "workspace:^", "@backstage/core-app-api": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/search/package.json index 06dfd01592..1dfb80ec9d 100644 --- a/plugins/search/package.json +++ b/plugins/search/package.json @@ -75,7 +75,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/sentry/package.json index 87065a87d7..f3dec38d40 100644 --- a/plugins/sentry/package.json +++ b/plugins/sentry/package.json @@ -59,7 +59,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/shortcuts/package.json index 8f23d047d4..d0ef4a918f 100644 --- a/plugins/shortcuts/package.json +++ b/plugins/shortcuts/package.json @@ -53,7 +53,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/sonarqube/package.json index 67cc917a8e..2507189f86 100644 --- a/plugins/sonarqube/package.json +++ b/plugins/sonarqube/package.json @@ -62,7 +62,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/splunk-on-call/package.json index 65fb953c52..6ed2b0c383 100644 --- a/plugins/splunk-on-call/package.json +++ b/plugins/splunk-on-call/package.json @@ -57,7 +57,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/stack-overflow/package.json index f6e8e86a70..cccb69a445 100644 --- a/plugins/stack-overflow/package.json +++ b/plugins/stack-overflow/package.json @@ -55,7 +55,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", "msw": "^1.0.0" diff --git a/plugins/stackstorm/package.json b/plugins/stackstorm/package.json index 1c6380da34..428fbc0b2c 100644 --- a/plugins/stackstorm/package.json +++ b/plugins/stackstorm/package.json @@ -54,7 +54,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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-insights/package.json b/plugins/tech-insights/package.json index a61e10878c..3cbc130d77 100644 --- a/plugins/tech-insights/package.json +++ b/plugins/tech-insights/package.json @@ -54,7 +54,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/tech-radar/package.json index 9f8e609784..684b407647 100644 --- a/plugins/tech-radar/package.json +++ b/plugins/tech-radar/package.json @@ -68,7 +68,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/techdocs-addons-test-utils/package.json index e2effefaef..ede6c2b9a4 100644 --- a/plugins/techdocs-addons-test-utils/package.json +++ b/plugins/techdocs-addons-test-utils/package.json @@ -59,7 +59,7 @@ "devDependencies": { "@backstage/cli": "workspace:^", "@backstage/dev-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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-module-addons-contrib/package.json b/plugins/techdocs-module-addons-contrib/package.json index ec8d9f3299..f8b1d0c354 100644 --- a/plugins/techdocs-module-addons-contrib/package.json +++ b/plugins/techdocs-module-addons-contrib/package.json @@ -59,7 +59,7 @@ "@backstage/dev-utils": "workspace:^", "@backstage/plugin-techdocs-addons-test-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/techdocs/package.json index 45a51cbb5a..b55e544683 100644 --- a/plugins/techdocs/package.json +++ b/plugins/techdocs/package.json @@ -84,7 +84,7 @@ "@backstage/dev-utils": "workspace:^", "@backstage/plugin-techdocs-module-addons-contrib": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/todo/package.json index e381077060..42e98a1c16 100644 --- a/plugins/todo/package.json +++ b/plugins/todo/package.json @@ -53,7 +53,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/user-settings/package.json index 7afe5b8fc0..6542137c0b 100644 --- a/plugins/user-settings/package.json +++ b/plugins/user-settings/package.json @@ -70,7 +70,7 @@ "@backstage/dev-utils": "workspace:^", "@backstage/plugin-catalog": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/vault/package.json index 14cab619b9..03901df92b 100644 --- a/plugins/vault/package.json +++ b/plugins/vault/package.json @@ -56,7 +56,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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/package.json b/plugins/xcmetrics/package.json index 22b998983b..4c3c61541e 100644 --- a/plugins/xcmetrics/package.json +++ b/plugins/xcmetrics/package.json @@ -53,7 +53,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "@testing-library/dom": "^8.0.0", + "@testing-library/dom": "^9.0.0", "@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 a1835daa93..60aa352e47 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3964,7 +3964,7 @@ __metadata: "@backstage/test-utils": "workspace:^" "@backstage/types": "workspace:^" "@backstage/version-bridge": "workspace:^" - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/react-hooks": ^8.0.0 @@ -4115,7 +4115,7 @@ __metadata: "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 "@react-hookz/web": ^20.0.0 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/react-hooks": ^8.0.0 @@ -4201,7 +4201,7 @@ __metadata: "@backstage/test-utils": "workspace:^" "@backstage/types": "workspace:^" "@backstage/version-bridge": "workspace:^" - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/react-hooks": ^8.0.0 @@ -4259,7 +4259,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -4424,7 +4424,7 @@ __metadata: "@backstage/test-utils": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@types/react": ^16.13.1 || ^17.0.0 msw: ^1.0.0 @@ -4534,7 +4534,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -4590,7 +4590,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -4620,7 +4620,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -4646,7 +4646,7 @@ __metadata: "@backstage/dev-utils": "workspace:^" "@backstage/test-utils": "workspace:^" "@backstage/theme": "workspace:^" - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -4677,7 +4677,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -4727,7 +4727,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -4776,7 +4776,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -4811,7 +4811,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -5126,7 +5126,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -5189,7 +5189,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -5340,7 +5340,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -5850,7 +5850,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/react-hooks": ^8.0.0 @@ -5921,7 +5921,7 @@ __metadata: "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 "@octokit/rest": ^19.0.3 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/react-hooks": ^8.0.0 @@ -6018,7 +6018,7 @@ __metadata: "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 "@react-hookz/web": ^23.0.0 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/react-hooks": ^8.0.0 @@ -6095,7 +6095,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -6176,7 +6176,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -6212,7 +6212,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -6244,7 +6244,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -6310,7 +6310,7 @@ __metadata: "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 "@material-ui/styles": ^4.11.0 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -6345,7 +6345,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -6377,7 +6377,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -6420,7 +6420,7 @@ __metadata: "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 "@material-ui/styles": ^4.9.6 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -6544,7 +6544,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -6612,7 +6612,7 @@ __metadata: "@material-ui/core": ^4.9.13 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/react-hooks": ^8.0.1 @@ -6650,7 +6650,7 @@ __metadata: "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 "@react-hookz/web": ^20.0.0 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -6839,7 +6839,7 @@ __metadata: "@backstage/dev-utils": "workspace:^" "@backstage/plugin-explore-common": "workspace:^" "@backstage/test-utils": "workspace:^" - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -6876,7 +6876,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -6909,7 +6909,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -6941,7 +6941,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -6975,7 +6975,7 @@ __metadata: "@material-ui/lab": 4.0.0-alpha.61 "@maxim_mazurok/gapi.client.calendar": ^3.0.20220408 "@tanstack/react-query": ^4.1.3 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -7012,7 +7012,7 @@ __metadata: "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 "@react-hookz/web": ^20.0.0 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -7042,7 +7042,7 @@ __metadata: "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 "@octokit/rest": ^19.0.3 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/react-hooks": ^8.0.0 @@ -7080,7 +7080,7 @@ __metadata: "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 "@octokit/rest": ^19.0.3 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -7117,7 +7117,7 @@ __metadata: "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 "@octokit/graphql": ^5.0.0 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -7150,7 +7150,7 @@ __metadata: "@material-ui/core": ^4.12.4 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -7183,7 +7183,7 @@ __metadata: "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 "@octokit/rest": ^19.0.3 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -7214,7 +7214,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -7246,7 +7246,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -7280,7 +7280,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -7338,7 +7338,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -7384,7 +7384,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@rjsf/utils": 5.13.0 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -7422,7 +7422,7 @@ __metadata: "@rjsf/material-ui-v5": "npm:@rjsf/material-ui@5.13.0" "@rjsf/utils": 5.13.0 "@rjsf/validator-ajv8": 5.13.0 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/react-hooks": ^8.0.1 @@ -7462,7 +7462,7 @@ __metadata: "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 "@material-ui/pickers": ^3.3.10 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -7536,7 +7536,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -7593,7 +7593,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/react-hooks": ^8.0.0 @@ -7683,7 +7683,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/react-hooks": ^8.0.0 @@ -7798,7 +7798,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/react-hooks": ^8.0.0 @@ -7867,7 +7867,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/react-hooks": ^8.0.0 @@ -7943,7 +7943,7 @@ __metadata: "@material-ui/core": ^4.9.13 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -7975,7 +7975,7 @@ __metadata: "@material-ui/icons": ^4.9.1 "@microsoft/microsoft-graph-types": ^2.25.0 "@tanstack/react-query": ^4.1.3 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -8033,7 +8033,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -8119,7 +8119,7 @@ __metadata: "@material-ui/core": ^4.9.13 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -8184,7 +8184,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -8218,7 +8218,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/react-hooks": ^8.0.1 @@ -8255,7 +8255,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -8308,7 +8308,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -8521,7 +8521,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/react-hooks": ^8.0.0 @@ -8641,7 +8641,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/react-hooks": ^8.0.0 @@ -8902,7 +8902,7 @@ __metadata: "@rjsf/material-ui-v5": "npm:@rjsf/material-ui@5.13.0" "@rjsf/utils": 5.13.0 "@rjsf/validator-ajv8": 5.13.0 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/react-hooks": ^8.0.0 @@ -8966,7 +8966,7 @@ __metadata: "@rjsf/material-ui": ^3.2.1 "@rjsf/utils": 5.13.0 "@rjsf/validator-ajv8": 5.13.0 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/react-hooks": ^8.0.0 @@ -9198,7 +9198,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/react-hooks": ^8.0.0 @@ -9237,7 +9237,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/react-hooks": ^8.0.0 @@ -9272,7 +9272,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -9305,7 +9305,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -9378,7 +9378,7 @@ __metadata: "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 "@material-ui/styles": ^4.10.0 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -9411,7 +9411,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -9462,7 +9462,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -9493,7 +9493,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -9604,7 +9604,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -9634,7 +9634,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -9672,7 +9672,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -9741,7 +9741,7 @@ __metadata: "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 "@react-hookz/web": ^20.0.0 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -9856,7 +9856,7 @@ __metadata: "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 "@material-ui/styles": ^4.10.0 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/react-hooks": ^8.0.0 @@ -9924,7 +9924,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -9979,7 +9979,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -10039,7 +10039,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -10068,7 +10068,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -12561,7 +12561,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -17021,6 +17021,22 @@ __metadata: languageName: node linkType: hard +"@testing-library/dom@npm:^9.0.0": + version: 9.3.3 + resolution: "@testing-library/dom@npm:9.3.3" + dependencies: + "@babel/code-frame": ^7.10.4 + "@babel/runtime": ^7.12.5 + "@types/aria-query": ^5.0.1 + aria-query: 5.1.3 + chalk: ^4.1.0 + dom-accessibility-api: ^0.5.9 + lz-string: ^1.5.0 + pretty-format: ^27.0.2 + checksum: 34e0a564da7beb92aa9cc44a9080221e2412b1a132eb37be3d513fe6c58027674868deb9f86195756d98d15ba969a30fe00632a4e26e25df2a5a4f6ac0686e37 + languageName: node + linkType: hard + "@testing-library/jest-dom@npm:^5.10.1, @testing-library/jest-dom@npm:^5.16.4, @testing-library/jest-dom@npm:^5.16.5": version: 5.17.0 resolution: "@testing-library/jest-dom@npm:5.17.0" @@ -25620,7 +25636,7 @@ __metadata: "@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/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -25733,7 +25749,7 @@ __metadata: "@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/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 @@ -40535,7 +40551,7 @@ __metadata: "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@testing-library/dom": ^8.0.0 + "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 From 9def1e95ab1511fa12ea538f073d34513a1e8392 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 11 Oct 2023 11:19:08 +0200 Subject: [PATCH 155/227] deprecate the GraphQL packages Signed-off-by: Patrik Oldsberg --- .changeset/light-squids-deny.md | 6 ++++++ plugins/catalog-graphql/README.md | 10 +--------- plugins/catalog-graphql/package.json | 2 +- plugins/graphql-backend/README.md | 27 +-------------------------- plugins/graphql-backend/package.json | 2 +- 5 files changed, 10 insertions(+), 37 deletions(-) create mode 100644 .changeset/light-squids-deny.md diff --git a/.changeset/light-squids-deny.md b/.changeset/light-squids-deny.md new file mode 100644 index 0000000000..07a124bed3 --- /dev/null +++ b/.changeset/light-squids-deny.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-catalog-graphql': minor +'@backstage/plugin-graphql-backend': minor +--- + +This package has been deprecated, consider using [@frontside/backstage-plugin-graphql-backend](https://www.npmjs.com/package/@frontside/backstage-plugin-graphql-backend) instead. diff --git a/plugins/catalog-graphql/README.md b/plugins/catalog-graphql/README.md index e05672e3a5..021d0d1b20 100644 --- a/plugins/catalog-graphql/README.md +++ b/plugins/catalog-graphql/README.md @@ -1,11 +1,3 @@ # Catalog GraphQL Plugin -## Getting Started - -This is the Catalog GraphQL plugin. - -It provides the `catalog` part of the GraphQL schema. - -To register it with the GraphQL backend, be sure to follow the [Getting Started](../graphql-backend/README.md#getting-started) guide of the GraphQL plugin. - -
+
{row.lastBuild?.url && ( @@ -221,6 +223,17 @@ const generatedColumns: TableColumn[] = [ )} + + + + + + +
); }; diff --git a/plugins/jenkins/src/components/JobRunsTable/JobRunsTable.tsx b/plugins/jenkins/src/components/JobRunsTable/JobRunsTable.tsx index 352417c29d..6861a5854d 100644 --- a/plugins/jenkins/src/components/JobRunsTable/JobRunsTable.tsx +++ b/plugins/jenkins/src/components/JobRunsTable/JobRunsTable.tsx @@ -21,6 +21,8 @@ import { useJobRuns } from './../useJobRuns'; import { Job, JobBuild } from './../../api/JenkinsApi'; import { JenkinsRunStatus } from './../BuildsPage/lib/Status'; import VisibilityIcon from '@material-ui/icons/Visibility'; +import { jobRunsRouteRef } from '../../plugin'; +import { useRouteRefParams } from '@backstage/core-plugin-api'; const generatedColumns: TableColumn[] = [ { @@ -174,7 +176,8 @@ export const JobRunsTableView = ({ }; export const JobRunsTable = () => { - const [tableProps, { setPage, setPageSize }] = useJobRuns(); + const { jobFullName } = useRouteRefParams(jobRunsRouteRef); + const [tableProps, { setPage, setPageSize }] = useJobRuns(jobFullName); return ( @@ -39,6 +40,7 @@ export const Router = () => { return ( } /> + } /> } /> ); diff --git a/plugins/jenkins/src/components/useJobRuns.ts b/plugins/jenkins/src/components/useJobRuns.ts index 0724fd7495..183524c8a8 100644 --- a/plugins/jenkins/src/components/useJobRuns.ts +++ b/plugins/jenkins/src/components/useJobRuns.ts @@ -19,14 +19,13 @@ import { jenkinsApiRef } from '../api'; import { errorApiRef, useApi } from '@backstage/core-plugin-api'; import { useEntity } from '@backstage/plugin-catalog-react'; import { getCompoundEntityRef } from '@backstage/catalog-model'; -import { JENKINS_ANNOTATION, LEGACY_JENKINS_ANNOTATION } from '../constants'; export enum ErrorType { CONNECTION_ERROR, NOT_FOUND, } -export function useJobRuns() { +export function useJobRuns(jobFullName: string) { const { entity } = useEntity(); const api = useApi(jenkinsApiRef); const errorApi = useApi(errorApiRef); @@ -40,11 +39,6 @@ export function useJobRuns() { errorType: ErrorType; }>(); - const jobFullName = - entity.metadata.annotations?.[JENKINS_ANNOTATION] || - entity.metadata.annotations?.[LEGACY_JENKINS_ANNOTATION] || - ''; - const { loading, value: jobRuns } = useAsyncRetry(async () => { try { const jobBuilds = await api.getJobBuilds({ diff --git a/plugins/jenkins/src/index.ts b/plugins/jenkins/src/index.ts index 7063485511..7562026bdc 100644 --- a/plugins/jenkins/src/index.ts +++ b/plugins/jenkins/src/index.ts @@ -23,7 +23,6 @@ export { jenkinsPlugin, jenkinsPlugin as plugin, - EntityJobRunsTable, EntityJenkinsContent, EntityLatestJenkinsRunCard, } from './plugin'; diff --git a/plugins/jenkins/src/plugin.ts b/plugins/jenkins/src/plugin.ts index 6e0bd77f91..046d3f7eb6 100644 --- a/plugins/jenkins/src/plugin.ts +++ b/plugins/jenkins/src/plugin.ts @@ -38,6 +38,13 @@ export const buildRouteRef = createSubRouteRef({ parent: rootRouteRef, }); +/** @public */ +export const jobRunsRouteRef = createSubRouteRef({ + id: 'jenkins/job/runs', + path: '/builds/:jobFullName/runs', + parent: rootRouteRef, +}); + /** @public */ export const jenkinsPlugin = createPlugin({ id: 'jenkins', @@ -72,13 +79,3 @@ export const EntityLatestJenkinsRunCard = jenkinsPlugin.provide( }, }), ); - -/** @public */ -export const EntityJobRunsTable = jenkinsPlugin.provide( - createComponentExtension({ - name: 'EntityLatestJenkinsRunCard', - component: { - lazy: () => import('./components/JobRunsTable').then(m => m.JobRunsTable), - }, - }), -); From 693ef6e5f0196bbfc0a98ac05a16555bc2e345a0 Mon Sep 17 00:00:00 2001 From: Abhay-soni-developer Date: Wed, 20 Sep 2023 14:55:58 +0530 Subject: [PATCH 023/227] readme and changeset modified according to the new changes Signed-off-by: Abhay-soni-developer --- .changeset/perfect-cobras-bake.md | 4 +++- plugins/jenkins/README.md | 4 +--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.changeset/perfect-cobras-bake.md b/.changeset/perfect-cobras-bake.md index c6b8f99d18..bf66c12e83 100644 --- a/.changeset/perfect-cobras-bake.md +++ b/.changeset/perfect-cobras-bake.md @@ -3,5 +3,7 @@ '@backstage/plugin-jenkins': minor --- -Added JobRunTable in EntityPage +Added JobRunTable Component. Added new Route and extended Api to get buildJobs. +Actions column has a new icon button, clicking on which takes us to page where we +can see all the job runs. diff --git a/plugins/jenkins/README.md b/plugins/jenkins/README.md index b3e328da65..73602e3464 100644 --- a/plugins/jenkins/README.md +++ b/plugins/jenkins/README.md @@ -28,7 +28,6 @@ import { EntityJenkinsContent, EntityLatestJenkinsRunCard, isJenkinsAvailable, - EntityJobRunsTable, } from '@backstage/plugin-jenkins'; // You can add the tab to any number of pages, the service page is shown as an @@ -54,7 +53,6 @@ const serviceEntityPage = ( - {/* ... */} @@ -106,4 +104,4 @@ spec: ## EntityJobRunsTable - View all builds of a particular job -- shows average build for successful builds +- shows average build time for successful builds From 2ce1dceac940d34eeb31048aa5d0e1f708700232 Mon Sep 17 00:00:00 2001 From: Abhay-soni-developer Date: Wed, 20 Sep 2023 15:14:05 +0530 Subject: [PATCH 024/227] api-report modified Signed-off-by: Abhay-soni-developer --- plugins/jenkins/api-report.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/plugins/jenkins/api-report.md b/plugins/jenkins/api-report.md index 34d5ac731e..0ef3ec6fcb 100644 --- a/plugins/jenkins/api-report.md +++ b/plugins/jenkins/api-report.md @@ -19,9 +19,6 @@ import { RouteRef } from '@backstage/core-plugin-api'; // @public (undocumented) export const EntityJenkinsContent: () => JSX_2.Element; -// @public (undocumented) -export const EntityJobRunsTable: () => JSX_2.Element; - // @public (undocumented) export const EntityLatestJenkinsRunCard: (props: { branch: string; From 26abd48a5d992df4b49f6e01480763a4b6d13076 Mon Sep 17 00:00:00 2001 From: Abhay-soni-developer Date: Wed, 20 Sep 2023 17:09:30 +0530 Subject: [PATCH 025/227] api-report modified, scoped column type, exported ciTableColumns so we can easily reuse the columns Signed-off-by: Abhay-soni-developer --- plugins/jenkins/api-report.md | 7 ++++++- .../src/components/BuildsPage/lib/CITable/CITable.tsx | 10 +++++----- .../src/components/BuildsPage/lib/CITable/index.ts | 2 +- plugins/jenkins/src/components/Router.tsx | 3 ++- plugins/jenkins/src/index.ts | 1 + 5 files changed, 15 insertions(+), 8 deletions(-) diff --git a/plugins/jenkins/api-report.md b/plugins/jenkins/api-report.md index 215abf5f48..ca6feac780 100644 --- a/plugins/jenkins/api-report.md +++ b/plugins/jenkins/api-report.md @@ -17,9 +17,14 @@ import { default as React_2 } from 'react'; import { RouteRef } from '@backstage/core-plugin-api'; import { TableColumn } from '@backstage/core-components'; +// Warning: (ae-missing-release-tag) "ciTableColumns" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const ciTableColumns: TableColumn[]; + // @public (undocumented) export const EntityJenkinsContent: (props: { - columns?: TableColumn<{}>[] | undefined; + columns?: TableColumn[] | undefined; }) => JSX_2.Element; // @public (undocumented) diff --git a/plugins/jenkins/src/components/BuildsPage/lib/CITable/CITable.tsx b/plugins/jenkins/src/components/BuildsPage/lib/CITable/CITable.tsx index b0474b73da..2c3660c239 100644 --- a/plugins/jenkins/src/components/BuildsPage/lib/CITable/CITable.tsx +++ b/plugins/jenkins/src/components/BuildsPage/lib/CITable/CITable.tsx @@ -82,7 +82,7 @@ const FailSkippedWidget = ({ return null; }; -const generatedColumns: TableColumn[] = [ +export const ciTableColumns: TableColumn[] = [ { title: 'Timestamp', defaultSort: 'desc', @@ -239,7 +239,7 @@ type Props = { total: number; pageSize: number; onChangePageSize: (pageSize: number) => void; - columns: TableColumn[]; + columns: TableColumn[]; }; export const CITableView = ({ @@ -281,13 +281,13 @@ export const CITableView = ({ Projects } - columns={columns && columns.length !== 0 ? columns : generatedColumns} + columns={columns && columns.length !== 0 ? columns : ciTableColumns} /> ); }; type CITableProps = { - columns?: TableColumn[]; + columns?: TableColumn[]; }; export const CITable = ({ columns }: CITableProps) => { @@ -296,7 +296,7 @@ export const CITable = ({ columns }: CITableProps) => { return ( [])} retry={retry} onChangePageSize={setPageSize} onChangePage={setPage} diff --git a/plugins/jenkins/src/components/BuildsPage/lib/CITable/index.ts b/plugins/jenkins/src/components/BuildsPage/lib/CITable/index.ts index 3be4dae9ce..b5a7ac6337 100644 --- a/plugins/jenkins/src/components/BuildsPage/lib/CITable/index.ts +++ b/plugins/jenkins/src/components/BuildsPage/lib/CITable/index.ts @@ -13,4 +13,4 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -export { CITable } from './CITable'; +export { CITable, ciTableColumns } from './CITable'; diff --git a/plugins/jenkins/src/components/Router.tsx b/plugins/jenkins/src/components/Router.tsx index d4325b2542..58dd93b550 100644 --- a/plugins/jenkins/src/components/Router.tsx +++ b/plugins/jenkins/src/components/Router.tsx @@ -26,6 +26,7 @@ import { JENKINS_ANNOTATION, LEGACY_JENKINS_ANNOTATION } from '../constants'; import { buildRouteRef } from '../plugin'; import { CITable } from './BuildsPage/lib/CITable'; import { DetailedViewPage } from './BuildWithStepsPage/'; +import { Project } from '../api'; /** @public */ export const isJenkinsAvailable = (entity: Entity) => @@ -33,7 +34,7 @@ export const isJenkinsAvailable = (entity: Entity) => Boolean(entity.metadata.annotations?.[LEGACY_JENKINS_ANNOTATION]); type Props = { - columns?: TableColumn[]; + columns?: TableColumn[]; }; export const Router = (props: Props) => { diff --git a/plugins/jenkins/src/index.ts b/plugins/jenkins/src/index.ts index 7562026bdc..3a17a879be 100644 --- a/plugins/jenkins/src/index.ts +++ b/plugins/jenkins/src/index.ts @@ -34,3 +34,4 @@ export { } from './components/Router'; export { JENKINS_ANNOTATION, LEGACY_JENKINS_ANNOTATION } from './constants'; export * from './api'; +export { ciTableColumns } from './components/BuildsPage/lib/CITable'; From 198d93e66c9f12d158a4565874657660fffedb4b Mon Sep 17 00:00:00 2001 From: Abhay-soni-developer Date: Thu, 21 Sep 2023 12:05:39 +0530 Subject: [PATCH 026/227] following the backstage agreed standard for exporting table columns Signed-off-by: Abhay-soni-developer --- .../BuildsPage/lib/CITable/CITable.tsx | 225 +--------------- .../BuildsPage/lib/CITable/columns.tsx | 251 ++++++++++++++++++ .../BuildsPage/lib/CITable/index.ts | 2 +- .../BuildsPage/lib/CITable/presets.ts | 28 ++ plugins/jenkins/src/index.ts | 1 - 5 files changed, 292 insertions(+), 215 deletions(-) create mode 100644 plugins/jenkins/src/components/BuildsPage/lib/CITable/columns.tsx create mode 100644 plugins/jenkins/src/components/BuildsPage/lib/CITable/presets.ts diff --git a/plugins/jenkins/src/components/BuildsPage/lib/CITable/CITable.tsx b/plugins/jenkins/src/components/BuildsPage/lib/CITable/CITable.tsx index 2c3660c239..1f5d272c61 100644 --- a/plugins/jenkins/src/components/BuildsPage/lib/CITable/CITable.tsx +++ b/plugins/jenkins/src/components/BuildsPage/lib/CITable/CITable.tsx @@ -13,222 +13,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { Link, Progress, Table, TableColumn } from '@backstage/core-components'; -import { alertApiRef, useApi, useRouteRef } from '@backstage/core-plugin-api'; -import { useEntityPermission } from '@backstage/plugin-catalog-react/alpha'; -import { Box, IconButton, Tooltip, Typography } from '@material-ui/core'; +import { Table, TableColumn } from '@backstage/core-components'; +import { Box, Typography } from '@material-ui/core'; import RetryIcon from '@material-ui/icons/Replay'; -import VisibilityIcon from '@material-ui/icons/Visibility'; -import { default as React, useState } from 'react'; +import { default as React } from 'react'; import { Project } from '../../../../api/JenkinsApi'; import JenkinsLogo from '../../../../assets/JenkinsLogo.svg'; -import { buildRouteRef } from '../../../../plugin'; import { useBuilds } from '../../../useBuilds'; -import { JenkinsRunStatus } from '../Status'; -import { jenkinsExecutePermission } from '@backstage/plugin-jenkins-common'; - -const FailCount = ({ count }: { count: number }): JSX.Element | null => { - if (count !== 0) { - return <>{count} failed; - } - return null; -}; - -const SkippedCount = ({ count }: { count: number }): JSX.Element | null => { - if (count !== 0) { - return <>{count} skipped; - } - return null; -}; - -const FailSkippedWidget = ({ - skipped, - failed, -}: { - skipped: number; - failed: number; -}): JSX.Element | null => { - if (skipped === 0 && failed === 0) { - return null; - } - - if (skipped !== 0 && failed !== 0) { - return ( - <> - {' '} - (, ) - - ); - } - - if (failed !== 0) { - return ( - <> - {' '} - () - - ); - } - - if (skipped !== 0) { - return ( - <> - {' '} - () - - ); - } - - return null; -}; - -export const ciTableColumns: TableColumn[] = [ - { - title: 'Timestamp', - defaultSort: 'desc', - hidden: true, - field: 'lastBuild.timestamp', - }, - { - title: 'Build', - field: 'fullName', - highlight: true, - render: (row: Partial) => { - const LinkWrapper = () => { - const routeLink = useRouteRef(buildRouteRef); - if (!row.fullName || !row.lastBuild?.number) { - return ( - <> - {row.fullName || - row.fullDisplayName || - row.displayName || - 'Unknown'} - - ); - } - - return ( - - {row.fullDisplayName} - - ); - }; - - return ; - }, - }, - { - title: 'Source', - field: 'lastBuild.source.branchName', - render: (row: Partial) => ( - <> - - - {row.lastBuild?.source?.branchName} - - - {row.lastBuild?.source?.commit?.hash} - - ), - }, - { - title: 'Status', - field: 'status', - render: (row: Partial) => { - return ( - - - - ); - }, - }, - { - title: 'Tests', - sorting: false, - render: (row: Partial) => { - return ( - <> - - {row.lastBuild?.tests && ( - - {row.lastBuild?.tests.passed} / {row.lastBuild?.tests.total}{' '} - passed - - - )} - - {!row.lastBuild?.tests && 'n/a'} - - - ); - }, - }, - { - title: 'Actions', - sorting: false, - render: (row: Partial) => { - const ActionWrapper = () => { - const [isLoadingRebuild, setIsLoadingRebuild] = useState(false); - const { allowed, loading } = useEntityPermission( - jenkinsExecutePermission, - ); - - const alertApi = useApi(alertApiRef); - - const onRebuild = async () => { - if (row.onRestartClick) { - setIsLoadingRebuild(true); - try { - await row.onRestartClick(); - alertApi.post({ - message: 'Jenkins re-build has successfully executed', - severity: 'success', - display: 'transient', - }); - } catch (e) { - alertApi.post({ - message: `Jenkins re-build has failed. Error: ${e.message}`, - severity: 'error', - }); - } finally { - setIsLoadingRebuild(false); - } - } - }; - - return ( -
- {row.lastBuild?.url && ( - - - - - - )} - {isLoadingRebuild && } - {!isLoadingRebuild && ( - - - - - - )} -
- ); - }; - return ; - }, - width: '10%', - }, -]; +import { columnFactories } from './columns'; +import { defaultCITableColumns } from './presets'; type Props = { loading: boolean; @@ -281,7 +74,9 @@ export const CITableView = ({ Projects } - columns={columns && columns.length !== 0 ? columns : ciTableColumns} + columns={ + columns && columns.length !== 0 ? columns : defaultCITableColumns + } /> ); }; @@ -303,3 +98,7 @@ export const CITable = ({ columns }: CITableProps) => { /> ); }; + +CITable.columns = columnFactories; + +CITable.defaultCITableColumns = defaultCITableColumns; diff --git a/plugins/jenkins/src/components/BuildsPage/lib/CITable/columns.tsx b/plugins/jenkins/src/components/BuildsPage/lib/CITable/columns.tsx new file mode 100644 index 0000000000..6944f7cd92 --- /dev/null +++ b/plugins/jenkins/src/components/BuildsPage/lib/CITable/columns.tsx @@ -0,0 +1,251 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { Link, Progress, Table, TableColumn } from '@backstage/core-components'; +import { alertApiRef, useApi, useRouteRef } from '@backstage/core-plugin-api'; +import { useEntityPermission } from '@backstage/plugin-catalog-react/alpha'; +import { Box, IconButton, Tooltip, Typography } from '@material-ui/core'; +import RetryIcon from '@material-ui/icons/Replay'; +import VisibilityIcon from '@material-ui/icons/Visibility'; +import { default as React, useState } from 'react'; +import { Project } from '../../../../api/JenkinsApi'; +import { buildRouteRef } from '../../../../plugin'; +import { JenkinsRunStatus } from '../Status'; +import { jenkinsExecutePermission } from '@backstage/plugin-jenkins-common'; + +const FailCount = ({ count }: { count: number }): JSX.Element | null => { + if (count !== 0) { + return <>{count} failed; + } + return null; +}; + +const SkippedCount = ({ count }: { count: number }): JSX.Element | null => { + if (count !== 0) { + return <>{count} skipped; + } + return null; +}; + +const FailSkippedWidget = ({ + skipped, + failed, +}: { + skipped: number; + failed: number; +}): JSX.Element | null => { + if (skipped === 0 && failed === 0) { + return null; + } + + if (skipped !== 0 && failed !== 0) { + return ( + <> + {' '} + (, ) + + ); + } + + if (failed !== 0) { + return ( + <> + {' '} + () + + ); + } + + if (skipped !== 0) { + return ( + <> + {' '} + () + + ); + } + + return null; +}; + +export const columnFactories = Object.freeze({ + createTimestampColumn(): TableColumn { + return { + title: 'Timestamp', + defaultSort: 'desc', + hidden: true, + field: 'lastBuild.timestamp', + }; + }, + + createBuildColumn(): TableColumn { + return { + title: 'Build', + field: 'fullName', + highlight: true, + render: (row: Partial) => { + const LinkWrapper = () => { + const routeLink = useRouteRef(buildRouteRef); + if (!row.fullName || !row.lastBuild?.number) { + return ( + <> + {row.fullName || + row.fullDisplayName || + row.displayName || + 'Unknown'} + + ); + } + + return ( + + {row.fullDisplayName} + + ); + }; + + return ; + }, + }; + }, + + createSourceColumn(): TableColumn { + return { + title: 'Source', + field: 'lastBuild.source.branchName', + render: (row: Partial) => ( + <> + + + {row.lastBuild?.source?.branchName} + + + + {row.lastBuild?.source?.commit?.hash} + + + ), + }; + }, + + createStatusColumn(): TableColumn { + return { + title: 'Status', + field: 'status', + render: (row: Partial) => { + return ( + + + + ); + }, + }; + }, + + createTestColumn(): TableColumn { + return { + title: 'Tests', + sorting: false, + render: (row: Partial) => { + return ( + <> + + {row.lastBuild?.tests && ( + + {row.lastBuild?.tests.passed} / {row.lastBuild?.tests.total}{' '} + passed + + + )} + + {!row.lastBuild?.tests && 'n/a'} + + + ); + }, + }; + }, + + createActionsColumn(): TableColumn { + return { + title: 'Actions', + sorting: false, + render: (row: Partial) => { + const ActionWrapper = () => { + const [isLoadingRebuild, setIsLoadingRebuild] = useState(false); + const { allowed, loading } = useEntityPermission( + jenkinsExecutePermission, + ); + + const alertApi = useApi(alertApiRef); + + const onRebuild = async () => { + if (row.onRestartClick) { + setIsLoadingRebuild(true); + try { + await row.onRestartClick(); + alertApi.post({ + message: 'Jenkins re-build has successfully executed', + severity: 'success', + display: 'transient', + }); + } catch (e) { + alertApi.post({ + message: `Jenkins re-build has failed. Error: ${e.message}`, + severity: 'error', + }); + } finally { + setIsLoadingRebuild(false); + } + } + }; + + return ( +
+ {row.lastBuild?.url && ( + + + + + + )} + {isLoadingRebuild && } + {!isLoadingRebuild && ( + + + + + + )} +
+ ); + }; + return ; + }, + width: '10%', + }; + }, +}); diff --git a/plugins/jenkins/src/components/BuildsPage/lib/CITable/index.ts b/plugins/jenkins/src/components/BuildsPage/lib/CITable/index.ts index b5a7ac6337..3be4dae9ce 100644 --- a/plugins/jenkins/src/components/BuildsPage/lib/CITable/index.ts +++ b/plugins/jenkins/src/components/BuildsPage/lib/CITable/index.ts @@ -13,4 +13,4 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -export { CITable, ciTableColumns } from './CITable'; +export { CITable } from './CITable'; diff --git a/plugins/jenkins/src/components/BuildsPage/lib/CITable/presets.ts b/plugins/jenkins/src/components/BuildsPage/lib/CITable/presets.ts new file mode 100644 index 0000000000..7c0dda9970 --- /dev/null +++ b/plugins/jenkins/src/components/BuildsPage/lib/CITable/presets.ts @@ -0,0 +1,28 @@ +/* + * Copyright 2021 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Project } from '../../../../api'; +import { columnFactories } from './columns'; +import { TableColumn } from '@backstage/core-components'; + +export const defaultCITableColumns: TableColumn[] = [ + columnFactories.createTimestampColumn(), + columnFactories.createSourceColumn(), + columnFactories.createBuildColumn(), + columnFactories.createTestColumn(), + columnFactories.createStatusColumn(), + columnFactories.createActionsColumn(), +]; diff --git a/plugins/jenkins/src/index.ts b/plugins/jenkins/src/index.ts index 3a17a879be..7562026bdc 100644 --- a/plugins/jenkins/src/index.ts +++ b/plugins/jenkins/src/index.ts @@ -34,4 +34,3 @@ export { } from './components/Router'; export { JENKINS_ANNOTATION, LEGACY_JENKINS_ANNOTATION } from './constants'; export * from './api'; -export { ciTableColumns } from './components/BuildsPage/lib/CITable'; From 18eaecffbffeefd4d8702e9c9c26eead99bf5a8f Mon Sep 17 00:00:00 2001 From: Abhay-soni-developer Date: Thu, 21 Sep 2023 12:13:05 +0530 Subject: [PATCH 027/227] removed ununsed import Signed-off-by: Abhay-soni-developer --- .../jenkins/src/components/BuildsPage/lib/CITable/columns.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/jenkins/src/components/BuildsPage/lib/CITable/columns.tsx b/plugins/jenkins/src/components/BuildsPage/lib/CITable/columns.tsx index 6944f7cd92..733a60c1b2 100644 --- a/plugins/jenkins/src/components/BuildsPage/lib/CITable/columns.tsx +++ b/plugins/jenkins/src/components/BuildsPage/lib/CITable/columns.tsx @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { Link, Progress, Table, TableColumn } from '@backstage/core-components'; +import { Link, Progress, TableColumn } from '@backstage/core-components'; import { alertApiRef, useApi, useRouteRef } from '@backstage/core-plugin-api'; import { useEntityPermission } from '@backstage/plugin-catalog-react/alpha'; import { Box, IconButton, Tooltip, Typography } from '@material-ui/core'; From 66681d08f369e969b269e008475721fd83670e17 Mon Sep 17 00:00:00 2001 From: Abhay-soni-developer Date: Thu, 21 Sep 2023 12:27:57 +0530 Subject: [PATCH 028/227] modified api report Signed-off-by: Abhay-soni-developer --- plugins/jenkins/api-report.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/plugins/jenkins/api-report.md b/plugins/jenkins/api-report.md index ca6feac780..c8df2edc1b 100644 --- a/plugins/jenkins/api-report.md +++ b/plugins/jenkins/api-report.md @@ -17,11 +17,6 @@ import { default as React_2 } from 'react'; import { RouteRef } from '@backstage/core-plugin-api'; import { TableColumn } from '@backstage/core-components'; -// Warning: (ae-missing-release-tag) "ciTableColumns" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) -export const ciTableColumns: TableColumn[]; - // @public (undocumented) export const EntityJenkinsContent: (props: { columns?: TableColumn[] | undefined; From f0ee0bba59e6595de35fd5fbda8405c5927305f3 Mon Sep 17 00:00:00 2001 From: Abhay-soni-developer Date: Thu, 21 Sep 2023 13:48:36 +0530 Subject: [PATCH 029/227] exported columns directly Signed-off-by: Abhay-soni-developer --- .../jenkins/src/components/BuildsPage/lib/CITable/index.ts | 2 ++ plugins/jenkins/src/index.ts | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/plugins/jenkins/src/components/BuildsPage/lib/CITable/index.ts b/plugins/jenkins/src/components/BuildsPage/lib/CITable/index.ts index 3be4dae9ce..cb00501bb9 100644 --- a/plugins/jenkins/src/components/BuildsPage/lib/CITable/index.ts +++ b/plugins/jenkins/src/components/BuildsPage/lib/CITable/index.ts @@ -14,3 +14,5 @@ * limitations under the License. */ export { CITable } from './CITable'; +export { columnFactories as ciTableColumnFactories } from './columns'; +export { defaultCITableColumns } from './presets'; diff --git a/plugins/jenkins/src/index.ts b/plugins/jenkins/src/index.ts index 7562026bdc..d1f2b6d8c9 100644 --- a/plugins/jenkins/src/index.ts +++ b/plugins/jenkins/src/index.ts @@ -34,3 +34,7 @@ export { } from './components/Router'; export { JENKINS_ANNOTATION, LEGACY_JENKINS_ANNOTATION } from './constants'; export * from './api'; +export { + ciTableColumnFactories, + defaultCITableColumns, +} from './components/BuildsPage/lib/CITable'; From 32644250b4829fbf344dbe0b2fa79d2ffe5ad36e Mon Sep 17 00:00:00 2001 From: Abhay-soni-developer Date: Thu, 21 Sep 2023 14:47:01 +0530 Subject: [PATCH 030/227] api report modified Signed-off-by: Abhay-soni-developer --- plugins/jenkins/api-report.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/plugins/jenkins/api-report.md b/plugins/jenkins/api-report.md index c8df2edc1b..9ff6987fe0 100644 --- a/plugins/jenkins/api-report.md +++ b/plugins/jenkins/api-report.md @@ -17,6 +17,23 @@ import { default as React_2 } from 'react'; import { RouteRef } from '@backstage/core-plugin-api'; import { TableColumn } from '@backstage/core-components'; +// Warning: (ae-missing-release-tag) "columnFactories" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const ciTableColumnFactories: Readonly<{ + createTimestampColumn(): TableColumn; + createBuildColumn(): TableColumn; + createSourceColumn(): TableColumn; + createStatusColumn(): TableColumn; + createTestColumn(): TableColumn; + createActionsColumn(): TableColumn; +}>; + +// Warning: (ae-missing-release-tag) "defaultCITableColumns" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const defaultCITableColumns: TableColumn[]; + // @public (undocumented) export const EntityJenkinsContent: (props: { columns?: TableColumn[] | undefined; From 2d8f7e82c1c2680c6e8608ca7dc277a7ffe1c766 Mon Sep 17 00:00:00 2001 From: Chris Date: Sat, 23 Sep 2023 15:17:47 +1000 Subject: [PATCH 031/227] auth-backend: migrate microsoft provider to separate module Signed-off-by: Chris Gemmell --- .changeset/swift-steaks-fetch.md | 6 + .../.eslintrc.js | 1 + .../README.md | 8 + .../api-report.md | 30 ++ .../catalog-info.yaml | 10 + .../config.d.ts | 34 ++ .../dev/index.ts | 26 + .../package.json | 45 ++ .../src/authenticator.ts | 74 +++ .../src/index.ts | 25 + .../src/module.test.ts | 81 ++++ .../src/module.ts | 48 ++ .../src/resolvers.ts | 77 +++ .../src/types.d.ts | 25 + plugins/auth-backend/config.d.ts | 12 - plugins/auth-backend/package.json | 1 + .../microsoft/__testUtils__/fake.test.ts | 90 ---- .../providers/microsoft/__testUtils__/fake.ts | 126 ----- .../src/providers/microsoft/provider.test.ts | 450 ------------------ .../src/providers/microsoft/provider.ts | 288 +---------- yarn.lock | 19 + 21 files changed, 523 insertions(+), 953 deletions(-) create mode 100644 .changeset/swift-steaks-fetch.md create mode 100644 plugins/auth-backend-module-microsoft-provider/.eslintrc.js create mode 100644 plugins/auth-backend-module-microsoft-provider/README.md create mode 100644 plugins/auth-backend-module-microsoft-provider/api-report.md create mode 100644 plugins/auth-backend-module-microsoft-provider/catalog-info.yaml create mode 100644 plugins/auth-backend-module-microsoft-provider/config.d.ts create mode 100644 plugins/auth-backend-module-microsoft-provider/dev/index.ts create mode 100644 plugins/auth-backend-module-microsoft-provider/package.json create mode 100644 plugins/auth-backend-module-microsoft-provider/src/authenticator.ts create mode 100644 plugins/auth-backend-module-microsoft-provider/src/index.ts create mode 100644 plugins/auth-backend-module-microsoft-provider/src/module.test.ts create mode 100644 plugins/auth-backend-module-microsoft-provider/src/module.ts create mode 100644 plugins/auth-backend-module-microsoft-provider/src/resolvers.ts create mode 100644 plugins/auth-backend-module-microsoft-provider/src/types.d.ts delete mode 100644 plugins/auth-backend/src/providers/microsoft/__testUtils__/fake.test.ts delete mode 100644 plugins/auth-backend/src/providers/microsoft/__testUtils__/fake.ts delete mode 100644 plugins/auth-backend/src/providers/microsoft/provider.test.ts diff --git a/.changeset/swift-steaks-fetch.md b/.changeset/swift-steaks-fetch.md new file mode 100644 index 0000000000..55a703ad59 --- /dev/null +++ b/.changeset/swift-steaks-fetch.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-auth-backend-module-microsoft-provider': minor +'@backstage/plugin-auth-backend': patch +--- + +Migrated the Microsoft auth provider to be implemented using the new `@backstage/plugin-auth-backend-module-microsoft-provider` module. diff --git a/plugins/auth-backend-module-microsoft-provider/.eslintrc.js b/plugins/auth-backend-module-microsoft-provider/.eslintrc.js new file mode 100644 index 0000000000..e2a53a6ad2 --- /dev/null +++ b/plugins/auth-backend-module-microsoft-provider/.eslintrc.js @@ -0,0 +1 @@ +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/auth-backend-module-microsoft-provider/README.md b/plugins/auth-backend-module-microsoft-provider/README.md new file mode 100644 index 0000000000..5154f1644b --- /dev/null +++ b/plugins/auth-backend-module-microsoft-provider/README.md @@ -0,0 +1,8 @@ +# Auth Module: Microsoft Provider + +This module provides an Microsoft auth provider implementation for `@backstage/plugin-auth-backend`. + +## Links + +- [Repository](https://gitlab.com/backstage/backstage/tree/master/plugins/auth-backend-module-microsoft-provider) +- [Backstage Project Homepage](https://backstage.io) diff --git a/plugins/auth-backend-module-microsoft-provider/api-report.md b/plugins/auth-backend-module-microsoft-provider/api-report.md new file mode 100644 index 0000000000..010c680612 --- /dev/null +++ b/plugins/auth-backend-module-microsoft-provider/api-report.md @@ -0,0 +1,30 @@ +## API Report File for "@backstage/plugin-auth-backend-module-microsoft-provider" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +import { BackendFeature } from '@backstage/backend-plugin-api'; +import { OAuthAuthenticator } from '@backstage/plugin-auth-node'; +import { OAuthAuthenticatorResult } from '@backstage/plugin-auth-node'; +import { PassportOAuthAuthenticatorHelper } from '@backstage/plugin-auth-node'; +import { PassportProfile } from '@backstage/plugin-auth-node'; +import { SignInResolverFactory } from '@backstage/plugin-auth-node'; + +// @public (undocumented) +const authModuleMicrosoftProvider: () => BackendFeature; +export default authModuleMicrosoftProvider; + +// @public (undocumented) +export const microsoftAuthenticator: OAuthAuthenticator< + PassportOAuthAuthenticatorHelper, + PassportProfile +>; + +// @public +export namespace microsoftSignInResolvers { + const usernameMatchingUserEntityName: SignInResolverFactory< + OAuthAuthenticatorResult, + unknown + >; +} +``` diff --git a/plugins/auth-backend-module-microsoft-provider/catalog-info.yaml b/plugins/auth-backend-module-microsoft-provider/catalog-info.yaml new file mode 100644 index 0000000000..1742fc9ed6 --- /dev/null +++ b/plugins/auth-backend-module-microsoft-provider/catalog-info.yaml @@ -0,0 +1,10 @@ +apiVersion: backstage.io/v1alpha1 +kind: Component +metadata: + name: backstage-plugin-auth-backend-module-microsoft-provider + title: '@backstage/plugin-auth-backend-module-microsoft-provider' + description: The microsoft-provider backend module for the auth plugin. +spec: + lifecycle: experimental + type: backstage-backend-plugin-module + owner: maintainers diff --git a/plugins/auth-backend-module-microsoft-provider/config.d.ts b/plugins/auth-backend-module-microsoft-provider/config.d.ts new file mode 100644 index 0000000000..5f1fa958e5 --- /dev/null +++ b/plugins/auth-backend-module-microsoft-provider/config.d.ts @@ -0,0 +1,34 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export interface Config { + auth?: { + providers?: { + /** @visibility frontend */ + microsoft?: { + [authEnv: string]: { + clientId: string; + /** + * @visibility secret + */ + tenantId: string; + clientSecret: string; + callbackUrl?: string; + }; + }; + }; + }; +} diff --git a/plugins/auth-backend-module-microsoft-provider/dev/index.ts b/plugins/auth-backend-module-microsoft-provider/dev/index.ts new file mode 100644 index 0000000000..e701470af8 --- /dev/null +++ b/plugins/auth-backend-module-microsoft-provider/dev/index.ts @@ -0,0 +1,26 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { createBackend } from '@backstage/backend-defaults'; +import authPlugin from '@backstage/plugin-auth-backend'; +import { authModuleMicrosoftProvider } from '../src'; + +const backend = createBackend(); + +backend.add(authPlugin); +backend.add(authModuleMicrosoftProvider); + +backend.start(); diff --git a/plugins/auth-backend-module-microsoft-provider/package.json b/plugins/auth-backend-module-microsoft-provider/package.json new file mode 100644 index 0000000000..8ba7630972 --- /dev/null +++ b/plugins/auth-backend-module-microsoft-provider/package.json @@ -0,0 +1,45 @@ +{ + "name": "@backstage/plugin-auth-backend-module-microsoft-provider", + "description": "The microsoft-provider backend module for the auth plugin.", + "version": "0.0.0", + "main": "src/index.ts", + "types": "src/index.ts", + "license": "Apache-2.0", + "publishConfig": { + "access": "public", + "main": "dist/index.cjs.js", + "types": "dist/index.d.ts" + }, + "backstage": { + "role": "backend-plugin-module" + }, + "scripts": { + "start": "backstage-cli package start", + "build": "backstage-cli package build", + "lint": "backstage-cli package lint", + "test": "backstage-cli package test", + "clean": "backstage-cli package clean", + "prepack": "backstage-cli package prepack", + "postpack": "backstage-cli package postpack" + }, + "dependencies": { + "@backstage/backend-common": "workspace:^", + "@backstage/backend-plugin-api": "workspace:^", + "@backstage/plugin-auth-node": "workspace:^", + "express": "^4.18.2", + "passport": "^0.6.0", + "passport-microsoft": "^1.0.0" + }, + "devDependencies": { + "@backstage/backend-defaults": "workspace:^", + "@backstage/backend-test-utils": "workspace:^", + "@backstage/cli": "workspace:^", + "@backstage/plugin-auth-backend": "workspace:^", + "supertest": "^6.3.3" + }, + "configSchema": "config.d.ts", + "files": [ + "dist", + "config.d.ts" + ] +} diff --git a/plugins/auth-backend-module-microsoft-provider/src/authenticator.ts b/plugins/auth-backend-module-microsoft-provider/src/authenticator.ts new file mode 100644 index 0000000000..bf2d7fcaba --- /dev/null +++ b/plugins/auth-backend-module-microsoft-provider/src/authenticator.ts @@ -0,0 +1,74 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Strategy as MicrosoftStrategy } from 'passport-microsoft'; +import { + createOAuthAuthenticator, + PassportOAuthAuthenticatorHelper, + PassportOAuthDoneCallback, + PassportProfile, +} from '@backstage/plugin-auth-node'; + +/** @public */ +export const microsoftAuthenticator = createOAuthAuthenticator({ + defaultProfileTransform: + PassportOAuthAuthenticatorHelper.defaultProfileTransform, + initialize({ callbackUrl, config }) { + const clientId = config.getString('clientId'); + const clientSecret = config.getString('clientSecret'); + const tenantId = config.getString('tenantId'); + + return PassportOAuthAuthenticatorHelper.from( + new MicrosoftStrategy( + { + clientID: clientId, + clientSecret: clientSecret, + callbackURL: callbackUrl, + tenant: tenantId, + scope: ['user.read'], + }, + ( + accessToken: string, + refreshToken: string, + params: any, + fullProfile: PassportProfile, + done: PassportOAuthDoneCallback, + ) => { + done( + undefined, + { fullProfile, params, accessToken }, + { refreshToken }, + ); + }, + ), + ); + }, + + async start(input, helper) { + return helper.start(input, { + accessType: 'offline', + prompt: 'consent', + }); + }, + + async authenticate(input, helper) { + return helper.authenticate(input); + }, + + async refresh(input, helper) { + return helper.refresh(input); + }, +}); diff --git a/plugins/auth-backend-module-microsoft-provider/src/index.ts b/plugins/auth-backend-module-microsoft-provider/src/index.ts new file mode 100644 index 0000000000..ae4fbf5926 --- /dev/null +++ b/plugins/auth-backend-module-microsoft-provider/src/index.ts @@ -0,0 +1,25 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * The gitlab-provider backend module for the auth plugin. + * + * @packageDocumentation + */ + +export { microsoftAuthenticator } from './authenticator'; +export { authModuleMicrosoftProvider } from './module'; +export { microsoftSignInResolvers } from './resolvers'; diff --git a/plugins/auth-backend-module-microsoft-provider/src/module.test.ts b/plugins/auth-backend-module-microsoft-provider/src/module.test.ts new file mode 100644 index 0000000000..ee7ed8f7f3 --- /dev/null +++ b/plugins/auth-backend-module-microsoft-provider/src/module.test.ts @@ -0,0 +1,81 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { mockServices, startTestBackend } from '@backstage/backend-test-utils'; +import authPlugin from '@backstage/plugin-auth-backend'; +import { decodeOAuthState } from '@backstage/plugin-auth-node'; +import request from 'supertest'; +import { authModuleMicrosoftProvider } from './module'; + +describe('authModuleMicrosoftProvider', () => { + it('should start', async () => { + const { server } = await startTestBackend({ + features: [ + authPlugin, + authModuleMicrosoftProvider, + mockServices.rootConfig.factory({ + data: { + app: { + baseUrl: 'http://localhost:3000', + }, + auth: { + providers: { + microsoft: { + development: { + clientId: 'my-client-id', + clientSecret: 'my-client-secret', + tenantId: 'my-tenant-id', + }, + }, + }, + }, + }, + }), + ], + }); + + const agent = request.agent(server); + + const res = await agent.get('/api/auth/microsoft/start?env=development'); + + expect(res.status).toEqual(302); + + const nonceCookie = agent.jar.getCookie('microsoft-nonce', { + domain: 'localhost', + path: '/api/auth/microsoft/handler', + script: false, + secure: false, + }); + expect(nonceCookie).toBeDefined(); + + const startUrl = new URL(res.get('location')); + expect(startUrl.origin).toBe('https://login.microsoftonline.com'); + expect(startUrl.pathname).toBe('/my-tenant-id/oauth2/v2.0/authorize'); + expect(Object.fromEntries(startUrl.searchParams)).toEqual({ + prompt: 'consent', + response_type: 'code', + scope: 'user.read', + client_id: 'my-client-id', + redirect_uri: `http://localhost:${server.port()}/api/auth/microsoft/handler/frame`, + state: expect.any(String), + }); + + expect(decodeOAuthState(startUrl.searchParams.get('state')!)).toEqual({ + env: 'development', + nonce: decodeURIComponent(nonceCookie.value), + }); + }); +}); diff --git a/plugins/auth-backend-module-microsoft-provider/src/module.ts b/plugins/auth-backend-module-microsoft-provider/src/module.ts new file mode 100644 index 0000000000..4d5c5968a2 --- /dev/null +++ b/plugins/auth-backend-module-microsoft-provider/src/module.ts @@ -0,0 +1,48 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { createBackendModule } from '@backstage/backend-plugin-api'; +import { + authProvidersExtensionPoint, + commonSignInResolvers, + createOAuthProviderFactory, +} from '@backstage/plugin-auth-node'; +import { microsoftAuthenticator } from './authenticator'; +import { microsoftSignInResolvers } from './resolvers'; + +/** @public */ +export const authModuleMicrosoftProvider = createBackendModule({ + pluginId: 'auth', + moduleId: 'microsoft-provider', + register(reg) { + reg.registerInit({ + deps: { + providers: authProvidersExtensionPoint, + }, + async init({ providers }) { + providers.registerProvider({ + providerId: 'microsoft', + factory: createOAuthProviderFactory({ + authenticator: microsoftAuthenticator, + signInResolverFactories: { + ...microsoftSignInResolvers, + ...commonSignInResolvers, + }, + }), + }); + }, + }); + }, +}); diff --git a/plugins/auth-backend-module-microsoft-provider/src/resolvers.ts b/plugins/auth-backend-module-microsoft-provider/src/resolvers.ts new file mode 100644 index 0000000000..e50340ca4e --- /dev/null +++ b/plugins/auth-backend-module-microsoft-provider/src/resolvers.ts @@ -0,0 +1,77 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { + createSignInResolverFactory, + OAuthAuthenticatorResult, + PassportProfile, + SignInInfo, +} from '@backstage/plugin-auth-node'; + +/** + * Available sign-in resolvers for the Microsoft auth provider. + * + * @public + */ +export namespace microsoftSignInResolvers { + /** + * Looks up the user by matching their Microsoft username to the entity name. + */ + export const commonByEmailLocalPartResolver = createSignInResolverFactory({ + create() { + return async ( + info: SignInInfo>, + ctx, + ) => { + const { profile } = info; + + if (!profile.email) { + throw new Error( + 'Login failed, user profile does not contain an email', + ); + } + const [localPart] = profile.email.split('@'); + + return ctx.signInWithCatalogUser({ + entityRef: { name: localPart }, + }); + }; + }, + }); + + export const commonByEmailResolver = createSignInResolverFactory({ + create() { + return async ( + info: SignInInfo>, + ctx, + ) => { + const { profile } = info; + + if (!profile.email) { + throw new Error( + 'Login failed, user profile does not contain an email', + ); + } + + return ctx.signInWithCatalogUser({ + filter: { + 'spec.profile.email': profile.email, + }, + }); + }; + }, + }); +} diff --git a/plugins/auth-backend-module-microsoft-provider/src/types.d.ts b/plugins/auth-backend-module-microsoft-provider/src/types.d.ts new file mode 100644 index 0000000000..ca6ae9ac40 --- /dev/null +++ b/plugins/auth-backend-module-microsoft-provider/src/types.d.ts @@ -0,0 +1,25 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +declare module 'passport-microsoft' { + import { Request } from 'express'; + import { StrategyCreated } from 'passport'; + + export class Strategy { + constructor(options: any, verify: any); + authenticate(this: StrategyCreated, req: Request, options?: any): any; + } +} diff --git a/plugins/auth-backend/config.d.ts b/plugins/auth-backend/config.d.ts index e719468ac1..f8953e1588 100644 --- a/plugins/auth-backend/config.d.ts +++ b/plugins/auth-backend/config.d.ts @@ -179,18 +179,6 @@ export interface Config { }; }; /** @visibility frontend */ - microsoft?: { - [authEnv: string]: { - clientId: string; - /** - * @visibility secret - */ - clientSecret: string; - tenantId: string; - callbackUrl?: string; - }; - }; - /** @visibility frontend */ onelogin?: { [authEnv: string]: { clientId: string; diff --git a/plugins/auth-backend/package.json b/plugins/auth-backend/package.json index 98c5e0bd8a..c6d4a2b59c 100644 --- a/plugins/auth-backend/package.json +++ b/plugins/auth-backend/package.json @@ -42,6 +42,7 @@ "@backstage/plugin-auth-backend-module-github-provider": "workspace:^", "@backstage/plugin-auth-backend-module-gitlab-provider": "workspace:^", "@backstage/plugin-auth-backend-module-google-provider": "workspace:^", + "@backstage/plugin-auth-backend-module-microsoft-provider": "workspace:^", "@backstage/plugin-auth-backend-module-oauth2-provider": "workspace:^", "@backstage/plugin-auth-node": "workspace:^", "@backstage/plugin-catalog-node": "workspace:^", diff --git a/plugins/auth-backend/src/providers/microsoft/__testUtils__/fake.test.ts b/plugins/auth-backend/src/providers/microsoft/__testUtils__/fake.test.ts deleted file mode 100644 index dee37f0f6b..0000000000 --- a/plugins/auth-backend/src/providers/microsoft/__testUtils__/fake.test.ts +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright 2023 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import { FakeMicrosoftAPI } from './fake'; - -describe('FakeMicrosoftAPI', () => { - const api = new FakeMicrosoftAPI(); - - describe('#token', () => { - it('exchanges auth codes', () => { - const { access_token } = api.token( - new URLSearchParams({ - grant_type: 'authorization_code', - code: api.generateAuthCode('User.Read'), - }), - ); - - expect(api.tokenHasScope(access_token, 'User.Read')).toBe(true); - }); - - it('supports scopes for the first requested audience only', () => { - const { access_token } = api.token( - new URLSearchParams({ - grant_type: 'authorization_code', - code: api.generateAuthCode('someaudience/somescope User.Read'), - }), - ); - - expect(api.tokenHasScope(access_token, 'User.Read')).toBe(false); - }); - - it('special openid scopes do not count towards the 1-audience limit', () => { - const { access_token } = api.token( - new URLSearchParams({ - grant_type: 'authorization_code', - code: api.generateAuthCode('openid offline_access User.Read'), - }), - ); - - expect(api.tokenHasScope(access_token, 'User.Read')).toBe(true); - }); - - it('refreshes tokens', () => { - const { access_token } = api.token( - new URLSearchParams({ - grant_type: 'refresh_token', - refresh_token: api.generateRefreshToken( - 'email openid profile User.Read', - ), - }), - ); - - expect( - api.tokenHasScope(access_token, 'email openid profile User.Read'), - ).toBe(true); - }); - it('requires `openid` scope for ID token', () => { - const { id_token } = api.token( - new URLSearchParams({ - grant_type: 'authorization_code', - code: api.generateAuthCode('User.Read'), - }), - ); - - expect(id_token).toBeUndefined(); - }); - it('requires `offline_access` scope for refresh token', () => { - const { refresh_token } = api.token( - new URLSearchParams({ - grant_type: 'authorization_code', - code: api.generateAuthCode('User.Read'), - }), - ); - - expect(refresh_token).toBeUndefined(); - }); - }); -}); diff --git a/plugins/auth-backend/src/providers/microsoft/__testUtils__/fake.ts b/plugins/auth-backend/src/providers/microsoft/__testUtils__/fake.ts deleted file mode 100644 index 9b3ca09c57..0000000000 --- a/plugins/auth-backend/src/providers/microsoft/__testUtils__/fake.ts +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Copyright 2023 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import { decodeJwt } from 'jose'; - -type Claims = { aud: string; scp: string }; - -export class FakeMicrosoftAPI { - generateAccessToken(scope: string): string { - return this.tokenWithClaims(this.allClaimsForScope(scope)).access_token; - } - generateAuthCode(scope: string): string { - return this.encodeClaims(this.allClaimsForScope(scope)); - } - generateRefreshToken(scope: string): string { - return this.encodeClaims(this.allClaimsForScope(scope)); - } - token(formData: URLSearchParams): { - access_token: string; - scope: string; - refresh_token?: string; - id_token?: string; - } { - const scopeParameter = formData.get('scope'); - const claims = - (scopeParameter && this.allClaimsForScope(scopeParameter)) ?? - formData.get('grant_type') === 'refresh_token' - ? this.decodeClaims(formData.get('refresh_token')!) - : this.decodeClaims(formData.get('code')!); - return { - ...this.tokenWithClaims(claims), - ...(this.hasScope(claims, 'offline_access') && { - refresh_token: this.encodeClaims(claims), - }), - ...(this.hasScope(claims, 'openid') && { - id_token: 'header.e30K.microsoft', - }), - }; - } - tokenHasScope(token: string, scope: string): boolean { - const { aud, scp } = decodeJwt(token); - return this.hasScope({ aud: aud as string, scp: scp as string }, scope); - } - private tokenWithClaims(claims: Claims): { - access_token: string; - scope: string; - } { - const filteredClaims = { - ...claims, - scp: claims.scp - .split(' ') - .filter(s => s !== 'offline_access') - .join(' '), - }; - return { - access_token: `header.${Buffer.from( - JSON.stringify(filteredClaims), - ).toString('base64')}.signature`, - scope: this.scopeFromClaims(filteredClaims), - }; - } - private allClaimsForScope(scope: string): Claims { - const scopes = scope.split(' ').map(this.parseScope); - const firstAudience = scopes - .map(({ aud }) => aud) - .find(aud => aud !== 'openid'); - return { - aud: firstAudience ?? '00000003-0000-0000-c000-000000000000', - scp: scopes - .filter(({ aud }) => aud === 'openid' || aud === firstAudience) - .map(({ scp }) => scp) - .join(' '), - }; - } - // auth codes and refresh tokens in this fake system are base64-encoded JSON - // strings of claims - private encodeClaims(claims: Claims): string { - return Buffer.from(JSON.stringify(claims)).toString('base64'); - } - private decodeClaims(encoded: string): Claims { - return JSON.parse(Buffer.from(encoded, 'base64').toString()); - } - private hasScope(claims: Claims, scope: string): boolean { - return this.scopeFromClaims(claims).includes(scope); - } - private parseScope(s: string): Claims { - if (s.includes('/')) { - const [aud, scp] = s.split('/'); - return { aud, scp }; - } - switch (s) { - case 'email': - case 'openid': - case 'offline_access': - case 'profile': { - return { aud: 'openid', scp: s }; - } - default: - return { aud: '00000003-0000-0000-c000-000000000000', scp: s }; - } - } - private scopeFromClaims(claims: Claims): string { - return claims.scp - .split(' ') - .map(this.parseScope) - .map(({ aud, scp }) => - aud === 'openid' || - claims.aud === '00000003-0000-0000-c000-000000000000' - ? scp - : `${claims.aud}/${scp}`, - ) - .join(' '); - } -} diff --git a/plugins/auth-backend/src/providers/microsoft/provider.test.ts b/plugins/auth-backend/src/providers/microsoft/provider.test.ts deleted file mode 100644 index 7bbfd085d6..0000000000 --- a/plugins/auth-backend/src/providers/microsoft/provider.test.ts +++ /dev/null @@ -1,450 +0,0 @@ -/* - * Copyright 2020 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { microsoft } from './provider'; -import { getVoidLogger } from '@backstage/backend-common'; -import { setupRequestMockHandlers } from '@backstage/backend-test-utils'; -import { ConfigReader } from '@backstage/config'; -import { rest } from 'msw'; -import { setupServer } from 'msw/node'; -import { AuthProviderRouteHandlers, AuthResolverContext } from '../types'; -import express from 'express'; -import crypto from 'crypto'; -import { FakeMicrosoftAPI } from './__testUtils__/fake'; - -describe('MicrosoftAuthProvider', () => { - const nonce = 'AAAAAAAAAAAAAAAAAAAAAA=='; // 16 bytes of zeros in base64 - const state = Buffer.from( - `nonce=${encodeURIComponent(nonce)}&env=development`, - ).toString('hex'); - const mockBackstageToken = `header.${Buffer.from( - JSON.stringify({ sub: 'user:default/mock' }), - 'utf8', - ).toString('base64')}.backstage`; - - const server = setupServer(); - const microsoftApi = new FakeMicrosoftAPI(); - let provider: AuthProviderRouteHandlers; - let response: jest.Mocked; - - setupRequestMockHandlers(server); - - beforeEach(() => { - provider = microsoft.create({ - signIn: { - resolver: microsoft.resolvers.emailMatchingUserEntityAnnotation(), - }, - })({ - providerId: 'microsoft', - baseUrl: 'http://backstage.test/api/auth', - appUrl: 'http://backstage.test', - isOriginAllowed: _ => true, - globalConfig: { - baseUrl: 'http://backstage.test/api/auth', - appUrl: 'http://backstage.test', - isOriginAllowed: _ => true, - }, - config: new ConfigReader({ - development: { - tenantId: 'tenantId', - clientId: 'clientId', - clientSecret: 'clientSecret', - }, - }), - logger: getVoidLogger(), - resolverContext: { - issueToken: jest.fn(), - findCatalogUser: jest.fn(), - signInWithCatalogUser: async _ => ({ - token: mockBackstageToken, - }), - } as AuthResolverContext, - }) as AuthProviderRouteHandlers; - - server.use( - rest.post( - 'https://login.microsoftonline.com/tenantId/oauth2/v2.0/token', - async (req, res, ctx) => { - return res( - ctx.json({ - ...microsoftApi.token(new URLSearchParams(await req.text())), - token_type: 'Bearer', - expires_in: 123, - ext_expires_in: 123, - }), - ); - }, - ), - rest.get('https://graph.microsoft.com/v1.0/me/', (req, res, ctx) => { - if ( - !microsoftApi.tokenHasScope( - req.headers.get('authorization')!.replace(/^Bearer /, ''), - 'User.Read', - ) - ) { - return res(ctx.status(403)); - } - return res( - ctx.json({ - id: 'conrad', - displayName: 'Conrad', - surname: 'Ribas', - givenName: 'Francisco', - mail: 'conrad@example.com', - }), - ); - }), - rest.get( - 'https://graph.microsoft.com/v1.0/me/photos/*', - async (req, res, ctx) => { - if ( - !microsoftApi.tokenHasScope( - req.headers.get('authorization')!.replace(/^Bearer /, ''), - 'User.Read', - ) - ) { - return res(ctx.status(403)); - } - const imageBuffer = new Uint8Array([104, 111, 119, 100, 121]).buffer; - return res( - ctx.set('Content-Length', imageBuffer.byteLength.toString()), - ctx.set('Content-Type', 'image/jpeg'), - ctx.body(imageBuffer), - ); - }, - ), - ); - response = { - cookie: jest.fn(), - end: jest.fn(), - json: jest.fn(), - setHeader: jest.fn(), - status: jest.fn(), - } as unknown as jest.Mocked; - response.status.mockReturnValue(response); - }); - - describe('#start', () => { - const randomBytes = jest.spyOn( - crypto, - 'randomBytes', - ) as unknown as jest.MockedFunction<(size: number) => Buffer>; - - afterEach(() => { - randomBytes.mockRestore(); - }); - - it('redirects to authorize URL', async () => { - randomBytes.mockReturnValue(Buffer.from(nonce, 'base64')); - - await provider.start( - { - query: { - env: 'development', - scope: 'email openid profile User.Read', - }, - } as unknown as express.Request, - response, - ); - - expect(response.setHeader).toHaveBeenCalledWith( - 'Location', - 'https://login.microsoftonline.com/tenantId/oauth2/v2.0/authorize' + - '?response_type=code' + - `&redirect_uri=${encodeURIComponent( - 'http://backstage.test/api/auth/microsoft/handler/frame', - )}` + - `&scope=${encodeURIComponent('email openid profile User.Read')}` + - `&state=${state}` + - '&client_id=clientId', - ); - }); - }); - - describe('#handle', () => { - it('returns provider info and profile with photo data', async () => { - await provider.frameHandler( - { - query: { - env: 'development', - code: microsoftApi.generateAuthCode( - 'email openid profile User.Read', - ), - state, - }, - cookies: { - 'microsoft-nonce': nonce, - }, - } as unknown as express.Request, - response, - ); - - expect(response.end).toHaveBeenCalledWith( - expect.stringContaining( - encodeURIComponent( - JSON.stringify({ - type: 'authorization_response', - response: { - providerInfo: { - accessToken: microsoftApi.generateAccessToken( - 'email openid profile User.Read', - ), - scope: 'email openid profile User.Read', - expiresInSeconds: 123, - idToken: 'header.e30K.microsoft', - }, - profile: { - email: 'conrad@example.com', - picture: 'data:image/jpeg;base64,aG93ZHk=', - displayName: 'Conrad', - }, - backstageIdentity: { - token: mockBackstageToken, - identity: { - type: 'user', - userEntityRef: 'user:default/mock', - ownershipEntityRefs: [], - }, - }, - }, - }), - ), - ), - ); - }); - - it('returns access token for non-microsoft graph scope', async () => { - await provider.frameHandler( - { - query: { - env: 'development', - code: microsoftApi.generateAuthCode('aks-audience/user.read'), - state, - }, - cookies: { - 'microsoft-nonce': nonce, - }, - } as unknown as express.Request, - response, - ); - - expect(response.end).toHaveBeenCalledWith( - expect.stringContaining( - encodeURIComponent( - JSON.stringify({ - type: 'authorization_response', - response: { - providerInfo: { - accessToken: microsoftApi.generateAccessToken( - 'aks-audience/user.read', - ), - scope: 'aks-audience/user.read', - expiresInSeconds: 123, - }, - profile: {}, - }, - }), - ), - ), - ); - }); - - it('sets refresh token', async () => { - await provider.frameHandler( - { - query: { - env: 'development', - code: microsoftApi.generateAuthCode( - 'email offline_access openid profile User.Read', - ), - state, - }, - cookies: { - 'microsoft-nonce': nonce, - }, - } as unknown as express.Request, - response, - ); - - expect(response.cookie).toHaveBeenCalledWith( - 'microsoft-refresh-token', - microsoftApi.generateRefreshToken( - 'email offline_access openid profile User.Read', - ), - { - domain: 'backstage.test', - httpOnly: true, - maxAge: 86400000000, - path: '/api/auth/microsoft', - sameSite: 'lax', - secure: false, - }, - ); - }); - - it('omits photo data when fetching it fails', async () => { - server.use( - rest.get('https://graph.microsoft.com/v1.0/me/photos/*', (_, res) => - res.networkError('remote hung up'), - ), - ); - - await provider.frameHandler( - { - query: { - env: 'development', - code: microsoftApi.generateAuthCode( - 'email openid profile User.Read', - ), - state, - }, - cookies: { - 'microsoft-nonce': nonce, - }, - } as unknown as express.Request, - response, - ); - - expect(response.end).toHaveBeenCalledWith( - expect.stringContaining( - encodeURIComponent( - JSON.stringify({ - type: 'authorization_response', - response: { - providerInfo: { - accessToken: microsoftApi.generateAccessToken( - 'email openid profile User.Read', - ), - scope: 'email openid profile User.Read', - expiresInSeconds: 123, - idToken: 'header.e30K.microsoft', - }, - profile: { - email: 'conrad@example.com', - displayName: 'Conrad', - }, - backstageIdentity: { - token: mockBackstageToken, - identity: { - type: 'user', - userEntityRef: 'user:default/mock', - ownershipEntityRefs: [], - }, - }, - }, - }), - ), - ), - ); - }); - }); - - describe('#refresh', () => { - it('returns provider info and profile with photo data', async () => { - await provider.refresh!( - { - query: { - env: 'development', - scope: 'email openid profile User.Read', - }, - header: jest.fn(_ => 'XMLHttpRequest'), - cookies: { - 'microsoft-refresh-token': microsoftApi.generateRefreshToken( - 'email openid profile User.Read', - ), - }, - get: jest.fn(), - } as unknown as express.Request, - response, - ); - - expect(response.json).toHaveBeenCalledWith( - expect.objectContaining({ - providerInfo: { - accessToken: microsoftApi.generateAccessToken( - 'email openid profile User.Read', - ), - scope: 'email openid profile User.Read', - expiresInSeconds: 123, - idToken: 'header.e30K.microsoft', - }, - profile: { - email: 'conrad@example.com', - picture: 'data:image/jpeg;base64,aG93ZHk=', - displayName: 'Conrad', - }, - }), - ); - }); - - it('returns access token for non-microsoft graph scope', async () => { - await provider.refresh!( - { - query: { - env: 'development', - scope: 'aks-audience/user.read', - }, - header: jest.fn(_ => 'XMLHttpRequest'), - cookies: { - 'microsoft-refresh-token': microsoftApi.generateRefreshToken( - 'aks-audience/user.read', - ), - }, - get: jest.fn(), - } as unknown as express.Request, - response, - ); - - expect(response.json).toHaveBeenCalledWith({ - providerInfo: { - accessToken: microsoftApi.generateAccessToken( - 'aks-audience/user.read', - ), - expiresInSeconds: 123, - scope: 'aks-audience/user.read', - }, - profile: {}, - }); - }); - - it('returns backstage identity', async () => { - await provider.refresh!( - { - query: { - env: 'development', - scope: 'email openid profile User.Read', - }, - header: jest.fn(_ => 'XMLHttpRequest'), - cookies: { - 'microsoft-refresh-token': microsoftApi.generateRefreshToken( - 'email openid profile User.Read', - ), - }, - get: jest.fn(), - } as unknown as express.Request, - response, - ); - - expect(response.json).toHaveBeenCalledWith( - expect.objectContaining({ - backstageIdentity: expect.objectContaining({ - token: mockBackstageToken, - }), - }), - ); - }); - }); -}); diff --git a/plugins/auth-backend/src/providers/microsoft/provider.ts b/plugins/auth-backend/src/providers/microsoft/provider.ts index 8fc8459f10..439db03311 100644 --- a/plugins/auth-backend/src/providers/microsoft/provider.ts +++ b/plugins/auth-backend/src/providers/microsoft/provider.ts @@ -14,218 +14,18 @@ * limitations under the License. */ -import express from 'express'; -import passport from 'passport'; -import { Strategy as MicrosoftStrategy } from 'passport-microsoft'; -import { - encodeState, - OAuthAdapter, - OAuthEnvironmentHandler, - OAuthHandlers, - OAuthProviderOptions, - OAuthRefreshRequest, - OAuthResponse, - OAuthResult, - OAuthStartRequest, -} from '../../lib/oauth'; -import { - executeFetchUserProfileStrategy, - executeFrameHandlerStrategy, - executeRedirectStrategy, - executeRefreshTokenStrategy, - makeProfileInfo, - PassportDoneCallback, -} from '../../lib/passport'; -import { - AuthHandler, - OAuthStartResponse, - SignInResolver, - AuthResolverContext, -} from '../types'; +import { SignInResolver, AuthHandler } from '../types'; +import { OAuthResult } from '../../lib/oauth'; import { createAuthProviderIntegration } from '../createAuthProviderIntegration'; +import { createOAuthProviderFactory } from '@backstage/plugin-auth-node'; import { - commonByEmailLocalPartResolver, - commonByEmailResolver, -} from '../resolvers'; -import { LoggerService } from '@backstage/backend-plugin-api'; -import fetch from 'node-fetch'; -import { decodeJwt } from 'jose'; -import { Profile as PassportProfile } from 'passport'; -import { BACKSTAGE_SESSION_EXPIRATION } from '../../lib/session'; - -type PrivateInfo = { - refreshToken: string; -}; - -type Options = OAuthProviderOptions & { - signInResolver?: SignInResolver; - authHandler: AuthHandler; - logger: LoggerService; - resolverContext: AuthResolverContext; - authorizationUrl?: string; - tokenUrl?: string; -}; - -export class MicrosoftAuthProvider implements OAuthHandlers { - private readonly _strategy: MicrosoftStrategy; - private readonly signInResolver?: SignInResolver; - private readonly authHandler: AuthHandler; - private readonly logger: LoggerService; - private readonly resolverContext: AuthResolverContext; - - constructor(options: Options) { - this.signInResolver = options.signInResolver; - this.authHandler = options.authHandler; - this.logger = options.logger; - this.resolverContext = options.resolverContext; - - this._strategy = new MicrosoftStrategy( - { - clientID: options.clientId, - clientSecret: options.clientSecret, - callbackURL: options.callbackUrl, - authorizationURL: options.authorizationUrl, - tokenURL: options.tokenUrl, - passReqToCallback: false, - skipUserProfile: ( - accessToken: string, - done: (err: unknown, skip: boolean) => void, - ) => { - done(null, this.skipUserProfile(accessToken)); - }, - }, - ( - accessToken: any, - refreshToken: any, - params: any, - fullProfile: passport.Profile, - done: PassportDoneCallback, - ) => { - done(undefined, { fullProfile, accessToken, params }, { refreshToken }); - }, - ); - } - - private skipUserProfile = (accessToken: string): boolean => { - const { aud, scp } = decodeJwt(accessToken); - const hasGraphReadScope = - aud === '00000003-0000-0000-c000-000000000000' && - (scp as string) - .split(' ') - .map(s => s.toLowerCase()) - .includes('user.read'); - return !hasGraphReadScope; - }; - - async start(req: OAuthStartRequest): Promise { - return await executeRedirectStrategy(req, this._strategy, { - scope: req.scope, - state: encodeState(req.state), - }); - } - - async handler(req: express.Request) { - const { result, privateInfo } = await executeFrameHandlerStrategy< - OAuthResult, - PrivateInfo - >(req, this._strategy); - - return { - response: await this.handleResult(result), - refreshToken: privateInfo.refreshToken, - }; - } - - async refresh(req: OAuthRefreshRequest) { - const { accessToken, refreshToken, params } = - await executeRefreshTokenStrategy( - this._strategy, - req.refreshToken, - req.scope, - ); - - return { - response: await this.handleResult({ - params, - accessToken, - ...(!this.skipUserProfile(accessToken) && { - fullProfile: await executeFetchUserProfileStrategy( - this._strategy, - accessToken, - ), - }), - }), - refreshToken, - }; - } - - private async handleResult(result: { - fullProfile?: PassportProfile; - params: { - id_token?: string; - scope: string; - expires_in: number; - }; - accessToken: string; - refreshToken?: string; - }): Promise { - let profile = {}; - if (result.fullProfile) { - const photo = await this.getUserPhoto(result.accessToken); - result.fullProfile.photos = photo ? [{ value: photo }] : undefined; - ({ profile } = await this.authHandler( - result as OAuthResult, - this.resolverContext, - )); - } - - const expiresInSeconds = - result.params.expires_in === undefined - ? BACKSTAGE_SESSION_EXPIRATION - : Math.min(result.params.expires_in, BACKSTAGE_SESSION_EXPIRATION); - - return { - providerInfo: { - accessToken: result.accessToken, - scope: result.params.scope, - expiresInSeconds, - ...{ idToken: result.params.id_token }, - }, - profile, - ...(result.fullProfile && - this.signInResolver && { - backstageIdentity: await this.signInResolver( - { result: result as OAuthResult, profile }, - this.resolverContext, - ), - }), - }; - } - - private async getUserPhoto(accessToken: string): Promise { - try { - const res = await fetch( - 'https://graph.microsoft.com/v1.0/me/photos/48x48/$value', - { - headers: { - Authorization: `Bearer ${accessToken}`, - }, - }, - ); - const data = await res.buffer(); - - return `data:image/jpeg;base64,${data.toString('base64')}`; - } catch (error) { - this.logger.warn( - `Could not retrieve user profile photo from Microsoft Graph API: ${error}`, - ); - return undefined; - } - } -} + adaptLegacyOAuthHandler, + adaptLegacyOAuthSignInResolver, +} from '../../lib/legacy'; +import { microsoftAuthenticator } from '@backstage/plugin-auth-backend-module-microsoft-provider'; /** - * Auth provider integration for Microsoft auth + * Auth provider integration for GitLab auth * * @public */ @@ -241,75 +41,13 @@ export const microsoft = createAuthProviderIntegration({ * Configure sign-in for this provider, without it the provider can not be used to sign users in. */ signIn?: { - /** - * Maps an auth result to a Backstage identity for the user. - */ resolver: SignInResolver; }; }) { - return ({ providerId, globalConfig, config, logger, resolverContext }) => - OAuthEnvironmentHandler.mapConfig(config, envConfig => { - const clientId = envConfig.getString('clientId'); - const clientSecret = envConfig.getString('clientSecret'); - const tenantId = envConfig.getString('tenantId'); - - const customCallbackUrl = envConfig.getOptionalString('callbackUrl'); - const callbackUrl = - customCallbackUrl || - `${globalConfig.baseUrl}/${providerId}/handler/frame`; - const authorizationUrl = `https://login.microsoftonline.com/${tenantId}/oauth2/v2.0/authorize`; - const tokenUrl = `https://login.microsoftonline.com/${tenantId}/oauth2/v2.0/token`; - - const authHandler: AuthHandler = options?.authHandler - ? options.authHandler - : async ({ fullProfile, params }) => ({ - profile: makeProfileInfo(fullProfile ?? {}, params.id_token), - }); - - const provider = new MicrosoftAuthProvider({ - clientId, - clientSecret, - callbackUrl, - authorizationUrl, - tokenUrl, - authHandler, - signInResolver: options?.signIn?.resolver, - logger, - resolverContext, - }); - - return OAuthAdapter.fromConfig(globalConfig, provider, { - providerId, - callbackUrl, - }); - }); - }, - resolvers: { - /** - * Looks up the user by matching their email local part to the entity name. - */ - emailLocalPartMatchingUserEntityName: () => commonByEmailLocalPartResolver, - /** - * Looks up the user by matching their email to the entity email. - */ - emailMatchingUserEntityProfileEmail: () => commonByEmailResolver, - /** - * Looks up the user by matching their email to the `microsoft.com/email` annotation. - */ - emailMatchingUserEntityAnnotation(): SignInResolver { - return async (info, ctx) => { - const { profile } = info; - - if (!profile.email) { - throw new Error('Microsoft profile contained no email'); - } - - return ctx.signInWithCatalogUser({ - annotations: { - 'microsoft.com/email': profile.email, - }, - }); - }; - }, + return createOAuthProviderFactory({ + authenticator: microsoftAuthenticator, + profileTransform: adaptLegacyOAuthHandler(options?.authHandler), + signInResolver: adaptLegacyOAuthSignInResolver(options?.signIn?.resolver), + }); }, }); diff --git a/yarn.lock b/yarn.lock index 9217e59ffb..39c9fffc96 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4780,6 +4780,24 @@ __metadata: languageName: unknown linkType: soft +"@backstage/plugin-auth-backend-module-microsoft-provider@workspace:^, @backstage/plugin-auth-backend-module-microsoft-provider@workspace:plugins/auth-backend-module-microsoft-provider": + version: 0.0.0-use.local + resolution: "@backstage/plugin-auth-backend-module-microsoft-provider@workspace:plugins/auth-backend-module-microsoft-provider" + dependencies: + "@backstage/backend-common": "workspace:^" + "@backstage/backend-defaults": "workspace:^" + "@backstage/backend-plugin-api": "workspace:^" + "@backstage/backend-test-utils": "workspace:^" + "@backstage/cli": "workspace:^" + "@backstage/plugin-auth-backend": "workspace:^" + "@backstage/plugin-auth-node": "workspace:^" + express: ^4.18.2 + passport: ^0.6.0 + passport-microsoft: ^1.0.0 + supertest: ^6.3.3 + languageName: unknown + linkType: soft + "@backstage/plugin-auth-backend-module-oauth2-provider@workspace:^, @backstage/plugin-auth-backend-module-oauth2-provider@workspace:plugins/auth-backend-module-oauth2-provider": version: 0.0.0-use.local resolution: "@backstage/plugin-auth-backend-module-oauth2-provider@workspace:plugins/auth-backend-module-oauth2-provider" @@ -4815,6 +4833,7 @@ __metadata: "@backstage/plugin-auth-backend-module-github-provider": "workspace:^" "@backstage/plugin-auth-backend-module-gitlab-provider": "workspace:^" "@backstage/plugin-auth-backend-module-google-provider": "workspace:^" + "@backstage/plugin-auth-backend-module-microsoft-provider": "workspace:^" "@backstage/plugin-auth-backend-module-oauth2-provider": "workspace:^" "@backstage/plugin-auth-node": "workspace:^" "@backstage/plugin-catalog-node": "workspace:^" From 2dfeb4b61265a831df403dbef9e8955a68233d17 Mon Sep 17 00:00:00 2001 From: Chris Gemmell Date: Sat, 23 Sep 2023 16:34:56 +1000 Subject: [PATCH 032/227] fixed Signed-off-by: Chris Gemmell --- .changeset/spotty-donkeys-give.md | 6 ++++ .../src/resolvers.ts | 34 +++---------------- .../src/providers/microsoft/provider.ts | 19 +++++++++-- 3 files changed, 28 insertions(+), 31 deletions(-) create mode 100644 .changeset/spotty-donkeys-give.md diff --git a/.changeset/spotty-donkeys-give.md b/.changeset/spotty-donkeys-give.md new file mode 100644 index 0000000000..92fa44fa37 --- /dev/null +++ b/.changeset/spotty-donkeys-give.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-auth-backend-module-microsoft-provider': minor +'@backstage/plugin-auth-backend': patch +--- + +Moved existing emailMatchingUserEntityAnnotation into `@backstage/plugin-auth-backend-module-microsoft-provider` and adapted SignInResolvers correctly" diff --git a/plugins/auth-backend-module-microsoft-provider/src/resolvers.ts b/plugins/auth-backend-module-microsoft-provider/src/resolvers.ts index e50340ca4e..7ef4a57175 100644 --- a/plugins/auth-backend-module-microsoft-provider/src/resolvers.ts +++ b/plugins/auth-backend-module-microsoft-provider/src/resolvers.ts @@ -15,8 +15,8 @@ */ import { - createSignInResolverFactory, OAuthAuthenticatorResult, + createSignInResolverFactory, PassportProfile, SignInInfo, } from '@backstage/plugin-auth-node'; @@ -30,7 +30,7 @@ export namespace microsoftSignInResolvers { /** * Looks up the user by matching their Microsoft username to the entity name. */ - export const commonByEmailLocalPartResolver = createSignInResolverFactory({ + export const emailMatchingUserEntityAnnotation = createSignInResolverFactory({ create() { return async ( info: SignInInfo>, @@ -39,36 +39,12 @@ export namespace microsoftSignInResolvers { const { profile } = info; if (!profile.email) { - throw new Error( - 'Login failed, user profile does not contain an email', - ); - } - const [localPart] = profile.email.split('@'); - - return ctx.signInWithCatalogUser({ - entityRef: { name: localPart }, - }); - }; - }, - }); - - export const commonByEmailResolver = createSignInResolverFactory({ - create() { - return async ( - info: SignInInfo>, - ctx, - ) => { - const { profile } = info; - - if (!profile.email) { - throw new Error( - 'Login failed, user profile does not contain an email', - ); + throw new Error('Microsoft profile contained no email'); } return ctx.signInWithCatalogUser({ - filter: { - 'spec.profile.email': profile.email, + annotations: { + 'microsoft.com/email': profile.email, }, }); }; diff --git a/plugins/auth-backend/src/providers/microsoft/provider.ts b/plugins/auth-backend/src/providers/microsoft/provider.ts index 439db03311..8947c7432b 100644 --- a/plugins/auth-backend/src/providers/microsoft/provider.ts +++ b/plugins/auth-backend/src/providers/microsoft/provider.ts @@ -17,12 +17,19 @@ import { SignInResolver, AuthHandler } from '../types'; import { OAuthResult } from '../../lib/oauth'; import { createAuthProviderIntegration } from '../createAuthProviderIntegration'; -import { createOAuthProviderFactory } from '@backstage/plugin-auth-node'; +import { + commonSignInResolvers, + createOAuthProviderFactory, +} from '@backstage/plugin-auth-node'; import { adaptLegacyOAuthHandler, adaptLegacyOAuthSignInResolver, + adaptOAuthSignInResolverToLegacy, } from '../../lib/legacy'; -import { microsoftAuthenticator } from '@backstage/plugin-auth-backend-module-microsoft-provider'; +import { + microsoftAuthenticator, + microsoftSignInResolvers, +} from '@backstage/plugin-auth-backend-module-microsoft-provider'; /** * Auth provider integration for GitLab auth @@ -50,4 +57,12 @@ export const microsoft = createAuthProviderIntegration({ signInResolver: adaptLegacyOAuthSignInResolver(options?.signIn?.resolver), }); }, + resolvers: adaptOAuthSignInResolverToLegacy({ + emailLocalPartMatchingUserEntityName: + commonSignInResolvers.emailLocalPartMatchingUserEntityName(), + emailMatchingUserEntityProfileEmail: + commonSignInResolvers.emailMatchingUserEntityProfileEmail(), + emailMatchingUserEntityAnnotation: + microsoftSignInResolvers.emailMatchingUserEntityAnnotation(), + }), }); From 630ba351c1a0490fa1766ccd2cd6635171b89798 Mon Sep 17 00:00:00 2001 From: Chris Gemmell Date: Tue, 26 Sep 2023 08:47:24 +1000 Subject: [PATCH 033/227] Update .changeset/spotty-donkeys-give.md Co-authored-by: Johan Haals Signed-off-by: Chris Gemmell --- .changeset/spotty-donkeys-give.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/spotty-donkeys-give.md b/.changeset/spotty-donkeys-give.md index 92fa44fa37..fd035869ce 100644 --- a/.changeset/spotty-donkeys-give.md +++ b/.changeset/spotty-donkeys-give.md @@ -3,4 +3,4 @@ '@backstage/plugin-auth-backend': patch --- -Moved existing emailMatchingUserEntityAnnotation into `@backstage/plugin-auth-backend-module-microsoft-provider` and adapted SignInResolvers correctly" +Moved existing `emailMatchingUserEntityAnnotation` into `@backstage/plugin-auth-backend-module-microsoft-provider` and adapted SignInResolvers correctly From d26dc8ee43f7fe944cfc78d7bb33b8f3e6b834cf Mon Sep 17 00:00:00 2001 From: Chris Gemmell Date: Tue, 26 Sep 2023 08:47:41 +1000 Subject: [PATCH 034/227] Update .changeset/swift-steaks-fetch.md Co-authored-by: Johan Haals Signed-off-by: Chris Gemmell --- .changeset/swift-steaks-fetch.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/swift-steaks-fetch.md b/.changeset/swift-steaks-fetch.md index 55a703ad59..80b23e7658 100644 --- a/.changeset/swift-steaks-fetch.md +++ b/.changeset/swift-steaks-fetch.md @@ -3,4 +3,4 @@ '@backstage/plugin-auth-backend': patch --- -Migrated the Microsoft auth provider to be implemented using the new `@backstage/plugin-auth-backend-module-microsoft-provider` module. +Migrated the Microsoft auth provider to new `@backstage/plugin-auth-backend-module-microsoft-provider` module package. From 930ac236d80f0221be5f0029aa18ec8c94726310 Mon Sep 17 00:00:00 2001 From: enaysaa Date: Thu, 14 Sep 2023 15:13:18 +0100 Subject: [PATCH 035/227] Migrate jenkins-backend plugin to new backend system Signed-off-by: enaysaa --- .changeset/olive-geese-rest.md | 5 ++ packages/backend-next/package.json | 1 + packages/backend-next/src/index.ts | 1 + plugins/jenkins-backend/README.md | 14 +++++ plugins/jenkins-backend/api-report.md | 5 ++ plugins/jenkins-backend/package.json | 2 + plugins/jenkins-backend/src/index.ts | 1 + plugins/jenkins-backend/src/plugin.test.tsx | 22 +++++++ plugins/jenkins-backend/src/plugin.ts | 64 +++++++++++++++++++++ yarn.lock | 3 + 10 files changed, 118 insertions(+) create mode 100644 .changeset/olive-geese-rest.md create mode 100644 plugins/jenkins-backend/src/plugin.test.tsx create mode 100644 plugins/jenkins-backend/src/plugin.ts diff --git a/.changeset/olive-geese-rest.md b/.changeset/olive-geese-rest.md new file mode 100644 index 0000000000..547fb828d8 --- /dev/null +++ b/.changeset/olive-geese-rest.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-jenkins-backend': patch +--- + +Added support for the [new backend system](https://backstage.io/docs/backend-system/) diff --git a/packages/backend-next/package.json b/packages/backend-next/package.json index 9e2dc78bfd..bb5c20a32a 100644 --- a/packages/backend-next/package.json +++ b/packages/backend-next/package.json @@ -38,6 +38,7 @@ "@backstage/plugin-catalog-backend-module-unprocessed": "workspace:^", "@backstage/plugin-devtools-backend": "workspace:^", "@backstage/plugin-entity-feedback-backend": "workspace:^", + "@backstage/plugin-jenkins-backend": "workspace:^", "@backstage/plugin-kubernetes-backend": "workspace:^", "@backstage/plugin-lighthouse-backend": "workspace:^", "@backstage/plugin-linguist-backend": "workspace:^", diff --git a/packages/backend-next/src/index.ts b/packages/backend-next/src/index.ts index 9fda69635b..bc95dccc05 100644 --- a/packages/backend-next/src/index.ts +++ b/packages/backend-next/src/index.ts @@ -29,6 +29,7 @@ backend.add( backend.add(import('@backstage/plugin-catalog-backend/alpha')); backend.add(import('@backstage/plugin-devtools-backend')); backend.add(import('@backstage/plugin-entity-feedback-backend')); +backend.add(import('@backstage/plugin-jenkins-backend')); backend.add(import('@backstage/plugin-kubernetes-backend/alpha')); backend.add(import('@backstage/plugin-lighthouse-backend')); backend.add(import('@backstage/plugin-linguist-backend')); diff --git a/plugins/jenkins-backend/README.md b/plugins/jenkins-backend/README.md index 133b9f42e2..d6f8fa5472 100644 --- a/plugins/jenkins-backend/README.md +++ b/plugins/jenkins-backend/README.md @@ -8,6 +8,20 @@ This is the backend half of the 2 Jenkins plugins and is responsible for: - finding the appropriate job(s) on that instance for an entity - connecting to Jenkins and gathering data to present to the frontend +## New Backend System + +The jenkins backend plugin has support for the [new backend system](https://backstage.io/docs/backend-system/), here's how you can set that up: + +In your `packages/backend/src/index.ts` make the following changes: + +```diff + import { createBackend } from '@backstage/backend-defaults'; + const backend = createBackend(); + // ... other feature additions + backend.add(import('@backstage/plugin-jenkins-backend')); + backend.start(); +``` + ## Integrating into a backstage instance This plugin needs to be added to an existing backstage instance. diff --git a/plugins/jenkins-backend/api-report.md b/plugins/jenkins-backend/api-report.md index fd1365547d..28dafa70bf 100644 --- a/plugins/jenkins-backend/api-report.md +++ b/plugins/jenkins-backend/api-report.md @@ -3,6 +3,7 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts +import { BackendFeature } from '@backstage/backend-plugin-api'; import { CatalogApi } from '@backstage/catalog-client'; import { CompoundEntityRef } from '@backstage/catalog-model'; import { Config } from '@backstage/config'; @@ -79,6 +80,10 @@ export interface JenkinsInstanceConfig { username: string; } +// @public +const jenkinsPlugin: () => BackendFeature; +export default jenkinsPlugin; + // @public (undocumented) export interface RouterOptions { // (undocumented) diff --git a/plugins/jenkins-backend/package.json b/plugins/jenkins-backend/package.json index 717d94733d..5cfad5de19 100644 --- a/plugins/jenkins-backend/package.json +++ b/plugins/jenkins-backend/package.json @@ -31,11 +31,13 @@ }, "dependencies": { "@backstage/backend-common": "workspace:^", + "@backstage/backend-plugin-api": "workspace:^", "@backstage/catalog-client": "workspace:^", "@backstage/catalog-model": "workspace:^", "@backstage/config": "workspace:^", "@backstage/errors": "workspace:^", "@backstage/plugin-auth-node": "workspace:^", + "@backstage/plugin-catalog-node": "workspace:^", "@backstage/plugin-jenkins-common": "workspace:^", "@backstage/plugin-permission-common": "workspace:^", "@backstage/plugin-permission-node": "workspace:^", diff --git a/plugins/jenkins-backend/src/index.ts b/plugins/jenkins-backend/src/index.ts index c55335c52d..4d01566a60 100644 --- a/plugins/jenkins-backend/src/index.ts +++ b/plugins/jenkins-backend/src/index.ts @@ -21,3 +21,4 @@ */ export * from './service'; +export { jenkinsPlugin as default } from './plugin'; diff --git a/plugins/jenkins-backend/src/plugin.test.tsx b/plugins/jenkins-backend/src/plugin.test.tsx new file mode 100644 index 0000000000..22ef6de078 --- /dev/null +++ b/plugins/jenkins-backend/src/plugin.test.tsx @@ -0,0 +1,22 @@ +/* + * Copyright 2021 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { jenkinsPlugin } from './plugin'; + +describe('jenkins', () => { + it('should export the jenkins plugin', () => { + expect(jenkinsPlugin).toBeDefined(); + }); +}); diff --git a/plugins/jenkins-backend/src/plugin.ts b/plugins/jenkins-backend/src/plugin.ts new file mode 100644 index 0000000000..8da26d62aa --- /dev/null +++ b/plugins/jenkins-backend/src/plugin.ts @@ -0,0 +1,64 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { loggerToWinstonLogger } from '@backstage/backend-common'; +import { + createBackendPlugin, + coreServices, +} from '@backstage/backend-plugin-api'; +import { DefaultJenkinsInfoProvider } from './service/jenkinsInfoProvider'; +import { createRouter } from './service/router'; +import { catalogServiceRef } from '@backstage/plugin-catalog-node/alpha'; + +/** + * Jenkins backend plugin + * + * @public + */ +export const jenkinsPlugin = createBackendPlugin({ + pluginId: 'jenkins', + register(env) { + env.registerInit({ + deps: { + logger: coreServices.logger, + permissions: coreServices.permissions, + httpRouter: coreServices.httpRouter, + config: coreServices.rootConfig, + catalogClient: catalogServiceRef, + }, + async init({ logger, permissions, httpRouter, config, catalogClient }) { + const winstonLogger = loggerToWinstonLogger(logger); + const jenkinsInfoProvider = DefaultJenkinsInfoProvider.fromConfig({ + config, + catalog: catalogClient, + }); + httpRouter.use( + await createRouter({ + permissions, + /** + * Logger for logging purposes + */ + logger: winstonLogger, + /** + * Info provider to be able to get all necessary information for the APIs + */ + jenkinsInfoProvider, + }), + ); + }, + }); + }, +}); diff --git a/yarn.lock b/yarn.lock index c1887a4ea0..e988afffbc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7455,12 +7455,14 @@ __metadata: resolution: "@backstage/plugin-jenkins-backend@workspace:plugins/jenkins-backend" dependencies: "@backstage/backend-common": "workspace:^" + "@backstage/backend-plugin-api": "workspace:^" "@backstage/catalog-client": "workspace:^" "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" "@backstage/errors": "workspace:^" "@backstage/plugin-auth-node": "workspace:^" + "@backstage/plugin-catalog-node": "workspace:^" "@backstage/plugin-jenkins-common": "workspace:^" "@backstage/plugin-permission-common": "workspace:^" "@backstage/plugin-permission-node": "workspace:^" @@ -25515,6 +25517,7 @@ __metadata: "@backstage/plugin-catalog-backend-module-unprocessed": "workspace:^" "@backstage/plugin-devtools-backend": "workspace:^" "@backstage/plugin-entity-feedback-backend": "workspace:^" + "@backstage/plugin-jenkins-backend": "workspace:^" "@backstage/plugin-kubernetes-backend": "workspace:^" "@backstage/plugin-lighthouse-backend": "workspace:^" "@backstage/plugin-linguist-backend": "workspace:^" From 8a511ecf9b04551f7fe27c2972a7d04068e089e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Br=C3=A4uer?= Date: Thu, 28 Sep 2023 14:29:26 +0200 Subject: [PATCH 036/227] Request ownership change MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Johannes Bräuer --- microsite/data/plugins/dynatrace.yaml | 8 +++++--- plugins/dynatrace/README.md | 4 ++++ plugins/dynatrace/catalog-info.yaml | 4 ++-- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/microsite/data/plugins/dynatrace.yaml b/microsite/data/plugins/dynatrace.yaml index 9ec1fee7b3..94a2e423a6 100644 --- a/microsite/data/plugins/dynatrace.yaml +++ b/microsite/data/plugins/dynatrace.yaml @@ -1,13 +1,15 @@ --- title: Dynatrace -author: TELUS -authorUrl: https://github.com/telus +author: Dynatrace +authorUrl: https://github.com/dynatrace category: Monitoring description: View monitoring info from Dynatrace for services in your software catalog. documentation: https://github.com/backstage/backstage/tree/master/plugins/dynatrace iconUrl: /img/dynatrace.svg npmPackageName: '@backstage/plugin-dynatrace' tags: - - dynatrace - monitoring + - observability + - alerting + - problems addedDate: '2022-06-23' diff --git a/plugins/dynatrace/README.md b/plugins/dynatrace/README.md index b03e65473f..9143b0ff9c 100644 --- a/plugins/dynatrace/README.md +++ b/plugins/dynatrace/README.md @@ -109,6 +109,10 @@ The annotation can also contain a comma or space separated list of Synthetic Ids The `SYNTHETIC_ID` can be found in Dynatrace by browsing to the Synthetic monitor. It will be located in the browser address bar in the resource path - `https://example.dynatrace.com/ui/http-monitor/HTTP_CHECK-1234` for an Http check, or `https://example.dynatrace.com/ui/browser-monitor/SYNTHETIC_TEST-1234` for a browser clickpath. +## Contribution + +This plugin was originally built by [TELUS](https://github.com/telus). + ## Disclaimer This plugin is not officially supported by Dynatrace. diff --git a/plugins/dynatrace/catalog-info.yaml b/plugins/dynatrace/catalog-info.yaml index 3dc14c96ff..02bf532db3 100644 --- a/plugins/dynatrace/catalog-info.yaml +++ b/plugins/dynatrace/catalog-info.yaml @@ -4,6 +4,6 @@ metadata: name: backstage-plugin-dynatrace title: '@backstage/plugin-dynatrace' spec: - lifecycle: experimental + lifecycle: production type: backstage-frontend-plugin - owner: maintainers + owner: Dynatrace From 7b31da1573b43d33e4b80c8768d22f2e056f92aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Br=C3=A4uer?= Date: Thu, 28 Sep 2023 14:49:09 +0200 Subject: [PATCH 037/227] Adding dynatrace to codeowners for plugin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Johannes Bräuer --- .github/CODEOWNERS | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index a0ba1163f3..0510153d42 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -38,6 +38,7 @@ yarn.lock @backstage/maintainers @backst /plugins/devtools @backstage/maintainers @backstage/reviewers @awanlin /plugins/devtools-backend @backstage/maintainers @backstage/reviewers @awanlin /plugins/devtools-common @backstage/maintainers @backstage/reviewers @awanlin +/plugins/dynatrace @backstage/maintainers @backstage/reviewers @dynatrace /plugins/entity-feedback @backstage/maintainers @backstage/reviewers @kuangp /plugins/entity-feedback-* @backstage/maintainers @backstage/reviewers @kuangp /plugins/events-backend @backstage/maintainers @backstage/reviewers @pjungermann From ae3c475265c74857736521aadd018c3cca39300d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Br=C3=A4uer?= Date: Thu, 28 Sep 2023 15:58:34 +0200 Subject: [PATCH 038/227] Changed Dynatrace GitHub handle MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Johannes Bräuer --- .github/CODEOWNERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 0510153d42..8abca2e2a7 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -38,7 +38,7 @@ yarn.lock @backstage/maintainers @backst /plugins/devtools @backstage/maintainers @backstage/reviewers @awanlin /plugins/devtools-backend @backstage/maintainers @backstage/reviewers @awanlin /plugins/devtools-common @backstage/maintainers @backstage/reviewers @awanlin -/plugins/dynatrace @backstage/maintainers @backstage/reviewers @dynatrace +/plugins/dynatrace @backstage/maintainers @backstage/reviewers @Dynatrace /plugins/entity-feedback @backstage/maintainers @backstage/reviewers @kuangp /plugins/entity-feedback-* @backstage/maintainers @backstage/reviewers @kuangp /plugins/events-backend @backstage/maintainers @backstage/reviewers @pjungermann From 17bf9fce0b1dddcf5a1e81647497b65db6aa4581 Mon Sep 17 00:00:00 2001 From: Andre Wanlin <67169551+awanlin@users.noreply.github.com> Date: Fri, 15 Sep 2023 14:03:22 -0500 Subject: [PATCH 039/227] docs: updated aroung other plugin types Signed-off-by: Andre Wanlin <67169551+awanlin@users.noreply.github.com> --- docs/assets/plugins/create-plugin_types.png | Bin 0 -> 143712 bytes .../{ => plugins}/my-plugin_screenshot.png | Bin .../software-catalog/extending-the-model.md | 3 +++ docs/plugins/create-a-plugin.md | 14 +++++++++++--- docs/plugins/index.md | 2 +- 5 files changed, 15 insertions(+), 4 deletions(-) create mode 100644 docs/assets/plugins/create-plugin_types.png rename docs/assets/{ => plugins}/my-plugin_screenshot.png (100%) diff --git a/docs/assets/plugins/create-plugin_types.png b/docs/assets/plugins/create-plugin_types.png new file mode 100644 index 0000000000000000000000000000000000000000..d10ae04442f6d0421578e977d83dc31cdb8a0476 GIT binary patch literal 143712 zcmZ^J1C%DqvTkGA?rGb$ZQHhO>u+OP)8@1>)10<#+qSL0{buj8?>*<;cVE@2m5~wg zWhA01sG2&e-z(s3?(= zi=&0LojC}IR8)#4l$PoUMvkruaXko_iil&d6ao=>D29*^id`s~5EU`S7j)j%pWCYg zU>t7hVm06{IdWiuU~-^`7KTTc{Ozt;^<&EI?J6;s68G8|yxgaejL$&8GQBCQ1tP(v0?|31 zij)V^1V2&``We39^LSn8+ur?li2lpjf-ehNd@aZfQpEx})C@85YJ*XjM^2~|s7j+TENR=dZbme>!bL_P|U`VMtv{!O_+*l}c=*(~()dNM2pYHuP$ee?6` z8T662FIX=5TLOZYnH8cIs%T_Szmo~o3;}2FyR#u5tO2;O`#?tXQ#W7d+SeT9RTw0g zC72(fx?e-d6LSmjAb9cve$rrK3m$?s1!WR=Azwl*lMzg@Gbd7xp!%3zDY6fM8=sq_i=nJS6roDtp?#;}_*ZJqbz{s2zZ0pK_ETwZ2NU;3SIb`TM1}2mI9l+#Q9p3B!Nf(a7B$A>0h#y zvQ1-{=7#x3wQu+c%MiQNsKy!|#32w}&|r{~{jLOqPVUa`;6fk%%AK8?{nVYfkpX9( z4wHl+K>Vw#E5WxP(Oih#28_+`Nd8CX>DP1lklih!d>KVjBRjWnpq=DwI|{5{O1e>( zd!C!Y6u05PgrOrrn2At|f^V2!?3yRZjZo7eEkab35K{wFjOdp^I6^LrFqfflx>1}^ zvq3R?%$@MpgUUU{rri_WIsllQ{80#lnhOdAx?=Gw1 zselnUD%YZ14Ds)e;=;GwR&aud*puc$%8i`r#@w~Nx$xrO3^p7f-0lE!g2fuiIgtU8 zxk6_`>3YdTsPlt=r#O9g!nrJF=;b9z_^DV=?$gteE;CN7K+Zr`MS4k*L)7?{5am^h zERlF5VPEnav9okok;*L2tir7GEV>Hj3AlEworDK@MB>~qi3?0iaC?Yfj9=JW@>@oM zcufgV$%M*p6m8UG6hr3g0cvsdZAO`VL-C99*I(T8EAtEUJg3&D`lq<;?CfytjtyMw z`Kxpd3pT#<&kJAsypF(!F$1YvGz%0 zP+rnVE6gg?t!k5Pl5f&fl$_FM)OM^jDBe`=Q1F-AlE^L0E$z|*TCLSl&h>4t`|!yh8{xre0a6^H24hM1#vlXB17(R7k$uu?GaJo>PTl!DxN0X=-dlD z{7#FWaV`wb4o(5w>o#7i*TsEPh@XeMJBdfN0|%4PKTuFeWhB^Qy)I6-M_nu3Iu0dV z;oP%M7LOlCH)iy=J2&4;pf*gChxpVSW{cRdrxL< z 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≪VaVX<__hEDB`v{R3((zsB7ZP;Yy5Ey> zvjsYAl9bkPQ&A{|hq?8U)|;$;uzeLWG0guBs1$IfW8Htsw0bLer$^i6?aKS4Q{#`t zZ1laILflu9zs8t(S)kg-Nvj(QDUsZyb4MGv#H;_DF8~lP@mK?h*Kr0JcMy3tath`$ zWXkmx$}+gDUEA@vD{GY(h{bd3R4PuVlvvIlrG+{o?{Mm?k1Qw?PFRe&;JdChc`1D( zvz7tPni<0okc&o?hBJsgREMX2TnkyA*W~`J(s(c3M)obga!yhLHRzCuTW#N)auur8 z>1a@){v%yA+JP7@3Mqp*MXOdT1#`w_ zgiX~jzcQ>;$Angy(lZ;DegW445HC6TM+!l&HUVEV5{pBD-+7^|=0g@JFPTR1iD63KF3WqkA`Vn0H!DgF-qRob0)D&NiP+Y8itGn6 z>wRZQM=`!Hmb_o01BgF23bM1T*q1An?#!#W?|N`5C2#%Oh4ntIHe}G!pQV4uHRF3| ze5pU>;uSB~_pxlvJ^Ob=eJ>RE?W}8DpZ(=K`}MP2ce6Xw#puYptVm4P@3VfFCIs0C zEkHqZUz*pjh3lzfd7%`#S{#rHEDP4<07>Sok?Md!0%AImrM>vF`7&U7fM{7G>ETqI zSj*P;8^Rv9Ow_~0OoKmd&Ca}n=D%s#Toe9=g0c%Q#`|oJyAdM{Ul=go17h6j&(1+b z4^@g?D7czeiiYLSHoy^>Kb<;Iqe|wnGZ?W%g5gclN+Gq)P&AIjLF-}aQehetjy0Qo zIu`Ns=s!)~*@1K^B$~R<4{31k&SmUo>zQ81WhZl{l7gSxkEtpax>LJ|SuCD|I3k*M zN$A;k2v*|t^a@BQZtuz0e*ADqYtxw84g)GJ&_1U~{rQ8LxIk~m?Xsi|@m#S;5R|hX zg4jH*$C|5yRUL9nBi%4C510>pL_mwF;^_)gAKb{xx;Q%J+w*79g8(imcxGy(R1DDg1uhh)VL=Kk7zpI>x9(BC8^Jm|i z_BkW1Q27Cqq01IpUj#g}nZ9*d7n53Ieil{}n183k3hQWbO5@B!e$Ju*RUGTm$0qQh zw!E#G6mlV8HpPQh8K4yAq;MuxIB*?A1>p^+=RhT5zrnAqQYa^C-0 z`UPxrrXplF`QV&?fqoRmMbP{FN5W-=OBt5+Iu7`H-|IEh;l;fk;g}T#aeu7nO@^9; zF8lZJM-R?t_fyZSpa1?&xxYck3wz#_j^07cVFSQUVp9Yd63>=!`Vo#+1I~r5&D04v zbW3^J+@IzAP41~Pg*JoqcVQZ8gju&o?C~95(HEkx;CKE8=iwB|o1GMNhgUEx0tx;U z#`qu-2zk}3fy>Wwr=OqW{EV?*Ug1y&$$~br8Dx)}OXy%sLQa-DDQfg!>emECM-1gz3o;t5MY&U? zR28Dk!&ObD%;q0%sqH4n6(oML$9VaShSUUE2bO&={V)a->nJgpH06dIUh13q-}n!_ zlyxh8r+R+SU4Kq^Qd`>u;tx0d12~-qIHBgoY5l?ipE_^`5GkvqUQq|?gWoGz@e>U? z5J4GuKk0SokjK?hxlf1{?Uo$Z#>`S}e%+43wd3b^m9BKH-+J)9I?~Z-{Zgf&HAqc- zl=-@~;PyP43R(6Cr>197!fuY|E}w9sz8d6>Z1DYt30(9L9lA*p47H`>m$0s=n?Jnf zDG1U+LAWt(+X#);Vf{D|;4=JBqO==l?ju~982D!wus;%$0VO7P1dg89KC1~VDe6?e z!4mfRIiSHg=3%v4LSA!w!wx`eZCHOa32uVE6v40V+taD~`LyP|VRrraVZrTT;o6Q? z1)DI&a>`3!1lzVYFi}`GD*O=#3GYEcf;cP~91$iA_YJ>nQbj|L z*Da`0`=Wb6RDP2CakelWLg?}Q3#db4AY|)@?t6-_XcZfPn`IyQ^6=K10mz3z%df{L2(AXkBEDVteky6 zy&|>vAL1%!*1KMJnU!4_v``YMb`!=A5qZ_bBNLna?s6M+!u6iPDtP+go6K=i6TGQ& z=z3&VgCHy8EChCdg+&&>A5?AFN^CQqbF8f5%;HnZx)FXEriX99C*kn>NuiBktcu@} zU;*GT4XC2+`~ecq^NuRpm>kc$IuDS?K3SsY#O^SF88is4`0&scHy$kmCR&4vUv-|L zKtH}^%Y;W#L7F&*CHs}dbGeP@x?%`~5@N{w&>1-oxq zWjIKHeAZX%F3n6Jq=DP)Js*o4Omq5F!<63Vg@A$HcMOo8cd0{d=HS31bpAIvB=61PxhD$x#$4be#K$}TM7iDB^+>I~n zSB|lvO8e4rvDjrfSq>0Aw%fgyf3MS>KqN4d-PQsp=q-7@*2FKNxlXks32Gm4!X)0FH`ToS1MXTQ1gju7R zf@lf9h)5-Q8tD6M!u$!}q%w(#>;#OjNL+btMv5 zH(xY!9Cb7Q=qcHJ?M}l!%QAa_aQ z)~OmPE*toO{^Tw0(S1*G)T~v~w=sLI+WxcxGe&G5(xS;<^JvMx{PAJC)Ey1s{&ip( zij?JB0KE=&53GM42#X2KF<FngOx70sq;rYfGVkC%pH0uZ6OIFMCWm7z8*;WgB(piK~8XjVNf3bAy zirLI|-7E)k(QhVLLX3&m%C%m_xbY3| zCa~O!dn4;uo8Drkb+Atg*!n6ELSZPhf>gKnJS32Lm7866!s7$G;cA>CiUHSh^g=RN zJuaP4qveGhfSn$X9^r6qAVNy_o>%H-n#E=roOLKOj%# zUH{10F3i~vwB5J)4|0%%kBj!^{)*tLFZv8ep~g=CLN6s17O=}@44S!3#u-tM$yUvQk!UL~w0mW7ewW!R$78MX-yZ%Hf@ zeKdpG$3)XK+6;Q{>awEjg&OQO#<*aY=PbTnVe}g9vV^C%Pz5Jk$^iBC7DSy> zyQGv`hIz~pL8)o^8N_`D+pgo0ZYmpezSoQ<^ zE3parM5@d94||Hbl}Lo=27gZU$uAk7SnKa0sfp&k?8s3{$0Z=w`(_uLkYG7sxS+x$ z9*+v1$@_;*ohtS!z2mg-`@ru^Kg6Mu0s}b*gQ}^ouW-&i_gU5TgP$KpTVeI1oBOb@ z-LZig)9b^i@~pflM+AS)K|m~6q+c5O$6jeX%BV4RmRkstg@hD_e9NaZCEO~E<@r9aAYFQmwvcabSS@qm)vK=)PSgEk z-o4-OkCiZC&Y@+E#stnrpb7TR#~veEhTVD$A2pAeW7U>_v+&QMYnRY4hQEUOt+LiS zJQ|eLO$~4wZ*BrHlF~Q6(w!$#?fNc#P1Y%7xJ9Atkd*bOI-!uM@|@l7|A@8`|7}Ti z?hy{cOb!)NUd`N!bSnUDZ-|3CuJu$%c1IFBpbo@-RV!7w=#l{REEY@~Sd!_BZjB!y zmb%^6Dz+&4_LqEFymL0Z4}+1wrl>EG zNWtY@AqD6`|9my(qd-kjeV~7*D`uq?QlVlL(7>+&x}hCoU4JYVo`4xIkEHS!0{pKF zoaBTYP2Gmt+wMS^f&SeoOUVH$`E#!Su@m@r$+HIGT6Ngxz$MP9T@shyTIFbD)#DK_ zG6$_cVL+T@^c7aFN-LSK%9m@z*ml+8*x^B*kP_ft&m$}bMQK9X{*I;JCPpVU-__DU zTJ_EB{l_rz0=_-b*9fdi@h3caXm0gmYiMj6NbD=Lra`S2qd22;_4Y9D-+u3I7s@>Z zavts`@OmXam3yNZqMfBP%6yi#%H6I~uPX-%xeYpWIzOgs9mj-*MTLpMWOzkJHy{aeV1W<(2BCozVqp8?A!RhPp2 z64%WgyjG3N(PD)eZ@6lrpC$luI?7r2aR$fRheTzm+uURY-9cL>gW7l?AniP5%!g|X zxf5f_nbdOQs-8G6HMET~NLR(&EB7=}=c>h{^mQw}9JbN?Q~sv!@Q!56stswChAZI! zJ3*K(x<|!AbCK1nls8q<@j!Xmc|;{PQH0}r*Z0Ku2YhBYaRHb8>)3N{ARu+znv+2X zO3fINf>=30qpa4913t9GYEQK#FCTVVJ zHB2czr35v)ZILuriO!$=;I;Yum;@>@3E4}vY`dCIX_1;y#fJ(*#olze0=4ytpE`d;KOP#qz4z!nX>n&k0F4`aqVN+D(WtfLZ5P6m zVr+7C>(nyV!{>^gqdJo5Mf=!C8r?KAr~@*ujv)5ido9!qDjdO# zFIA@a>7%ojVy~vGOw3|WbQz57(VTKc@J20;h1ZS;hkavG^3Y?yuql*p*qOyUbi${m zS*OHx!EwvsH6*>yLS@(>O(b(-pb#w}q%M?abQH@IAcU zkwt|Z3BJUl64d?b?R*3SYS%O%?PjxAZ@h^if+L=jI&KgP!N@%8JkkZHsR21cQQG%M zoGFO2&nIBhK@i^k0>76^CdG4uQnSRiMtne6`H0W9X|cqVHN#5-f9$>Ne{Mky#0cn^ zFvQw6Q#E_vFy;I%YB7FBC8HA`jQ)|SXFff>VDa-=R#lyWYXEvsA3`{jn(6!XM}j0K zoQQr5LQ8VCY?tWldP7&@0oiNA`<}e}3&aKz*yf$%`kqeQqlj+e?&EJ-?r@rHLKYDX z?qRD?dsw6^XYSEqhdIq>-13d@>XJ15h!}8s@b~%h0^Udm&=?Uk+$+=vuowlAk2Z~J zhmII__!j&Qf0VBb&Zy9o1rrU`cCTbkG+gJ&VL_h+FA>Eq*BkvA*lN$OM)?ufmp_&W zPz56&)hT{NG=G}0VtGt^JL)$ghAV->S(HCERo&Mq>n&~<30-U(p}n06QmQzbi~I=e!NQBdw+E#eT)tNpo+e1HolPPADZ#5c%-^((JRgWCfO;=(YT(@^;S1w4I*qEMM%c(5`fB<8CcjD znq`Sut^jj6P)RuZ(|Lt+k^Wy}OMGT^Z;CS|m|WpL=u-)y7IK#{?b<~V8+Lc#i=SV; zoZg>l4B*U!UZ*-wbMLgxHHlNkEl{BrFQq%Z)7I~Dvmj)AQXN}ifhCfm7VChsj%sr} zWk8Fs;0Un#o!8t3AiE%NT-)H`nDaqw6c)iiLfwg={WgYng`YJ}CD`*kYqQ@==o9h;D_o-t_LQ zo{XnL#=XUD88wH_(Za&5i{e)xgDLe4vOunw^b12%I;+&K`$DI~f!8%F|`*!!+uLJmK$ZIr>z)2`7B?&G6+SJ==z zdKaxXXoSK##;V+waNke}1?m(3K{l%po30}-yNLWu7|wSLO;8xssdYBsx=U$IYOuZ{ zYOfJOVE_CI$N1g>(yOO>V!?QYDLxKX$~#@t^6D}#b9NoPsVbYAjGAT~C|u;3>yY8o zzndKUW^yuXVSMnQ(bFIV>gkYiv-6h9FRoHjL7R`hyQ>li9gzs0s-s4nd+^K8M>#(5 zDtddyRXeH}3p2!oULyWX*nc1uW-5uuGW*kJm+ENpjAQK4OuPp4#_%&6YdHPZdlbH= zWfXzXtc6lPiAPf2(d?MUomPb*ruT--w)~67)$|n3=-4NS+~K>^y7oD?mwjofp=TsQ z{P-b*%-KDYf+)kRD-b=ZO~#Alz7;m55MTic1d|ZM7)OLoz@ZbOhqW;)b9q^KoyBfQ zqiXmwisRJZ7Z^6slK9{RQ11|HvD-*te=&Hk0hky@b&}Mm;H8~d#76GU{r0Fj^KxP_h}h|{%m?YFFNXifSzR5?)m%%bxjNhO z9-OF37&1N#wZIkB7NF8P&xbCc3MU~*RQ7h(PnEJ*D#~a`TceG*8+zi_OE`nD5Fk7s z4>ZAo=_r(fuKW?84njxybl)EtdqKK1>`Pj;(u1wKIw9l=;M&3xB|8dE3_~$s_kfT? z|0)+8UL)-RIj$Y*gnvCsek1Ib1(jA?jalWui-=ok)mr%{2 zVTI)cjFG9`X^WP$!kPpuhbJXAuWx*EDAF~3r1-L%)blq0pzFYm2d5D8dN?qcn&ryl zz4nANyp?Z#_%WNM(6j5NH~g+`k8iuH#r4TNPTvtK=1+U|)xC56*3#sq&XVB$FdIr}#Pb8>%|a*Cv<}JS6e2tJ{yh6u z^ySx5^q?73bWGq^TGY+v8oSyx@GlQFRD~36iesojKtErXEZ$n|eo%+^@Ut^WmIJtl z+-7!7VsJTlF6Cn)N?M(i#o}d_3<``VdpFjiPBiiGQoVnF(B^rA0EErfk@42(J<(Xs zYaOP%{uG$u?I{j80;MN~LF4?#7V4;4lyCN(xWL#(uL@JsOlUU3cFmJvxV(>Xe+GWtL%V%JTP4N`@T@krcOoKre|n3=d6V}XK4 z_w$qeDMd!$Xv|!5O&?UAy$YkXefm0L?WYRnYA1S`{Ik>pL}F@^aI*8wetfXJF6=Uz z?eSEvN$sZtrTK$FojTFDXKDWRN++m5r`zQIMv1dreYw>LXO|eL4AJFNJB2)2JSPs?k?>rj4ZvNyHQ)AXO9^4za2_AjIaA;?z)Q`rK}xpu^pvj2s4=Qw zQf)3>ZE$wtx<49P#m!%4gwp^a4nP%s1x0;!Sn3jK8GS4Y2XmIbH{8(q&c%!U&eZ6R zx>$7X>>8_%{t|QGlf{d!!Aa#yE}`eI|Kfc74KKsF7_}Q}fZZ}2%BX;ljkS%9>k`dS{X1SlyzQhGM{ti@j4Ql4XIG)-;82Hy4cjh1g)PtYoGRpL@ayw1muVh zjo;jun$=e)5bjJk1}sjkAhzt0qE>7Yg!>dt`pT;)w#Uw;i*~&m%w6P%a;gR5DEYmk zM0xnjF=}8ScEOY(yauG;4|o9lWTo=xAo2OU5oex)hnmfGCCa0 zVzq^;9PV$&IaDP<5v)ZiPXD`G+nbiJiy()JTJ1d*L?N5Fjgd5L3x2X=zaMIm4ef!^D5H}B2;P2L>>V9X2X>h_|!# zYQdkK*GQ2P$X;UjJKz!ACbUl(r@!2Pm*4~wSwpDxy#O?9`W8}S%*nCpGsTAIs;c$+ z8B<~ig#m9+p2JX6^O=G^3XEQAL5ORxHLiYMaLRoelm3sjEPn${@uI6<9}|_oOBQBI zFB2Hy<|$&tSo@7_FW9ddE@6|z#i!NY@Q!?!66LF!Z>*q*h!1xllXS6-ZKMLbLqU6y^_-F*i33oV zD9S60X>axU-&ovV?jMVTkg`R5p5xKaa5*Islwu=E|HD7=4up=@_1sqGcknlqt5cCv z`Tf2ckKl>|TD?`t9Q!v915TL44RvI?rw(D+tYOba;O7jG5kZ?9ygTbKGQpoQAu&9*v#=!O|PRu{G|1$*!(IK@u&(&3*nTP)~O#dO- z{fpxm_kred^>We{Njdl*V%tA>`C9N@;9t+-|pHW@gsx@UHyAY@(<*2o(vuuRB=>ZnV|_3)7CLy5m>) zw)mNinj4|FkNGi-0+(0_LI^K+MaHvtB)hd3^saJ879-AgUanUlcUxTL$iq_UA*!f- zKJNYfc4X%8k1vG}+K$MX{f<^aGOm>37dA$%Qq{Yd%q~-a|0QIm!v}}d{Z20mg{!}NX|k^SP9Ult=+;6XcDwNziLj55EG z63dw+4p)*gumR*8-%n(2h^z|xAgv4CweE``V-lt;^!RuJM3Iqjdx2CyDDy?G0;xRV zpm^1fiN<@?pgy03Ae*mbf9F#OW)3_*xIsQlAS3QHx6#Q+=%L7Kbh`vem!aBgq7JL7sLQnyxzZl!Xz z`0NFx9tJ<>zi{>~G)s|QK*rleSw-be33nHa06vc#dda4dNhTnr&L~`PNAlvF_=c?v zdVjlo9{H?1B#MMV%)$1%`fU;@+9w5TbpRfZl1;D^Bv{h^^4pS$+Xf0_?ndTmZ4cDy;Dkc)Z3Nx?3I;wHVJwC?WDV0 zb$V@-Dt1T`$&Sv76fQ5Abe7>1uhDT)`7V5WHB==dG?Dy%w#O z8OMA+lXl~O;#c|Cc9^69A4HvJ-g2YTVv3lsBE>XC%_`kW$CXwM-D>@`B&(Z3+>lDW zS{AF(FX__J*uz6cUUsBnPnkxwpXa*j%Ew42g*ww#<5QHUD z=joiRbup<^!b_Sl&Qx6iVnA9QEZT25Z;t0)J~^iBvg$Iz z!#T^<$d+4}w)0GCd7=##gA=a0^?=U=%xnwwK<(OStw~iW0kfgZ=MYAC zJsXZDO$Wtr6t6k%Yq;zUM<PqS;?BG_MS5$z3rbO9a(a&1TF7q2TY$y>zz@VjbIU6uIpz?uwU0>Yq* zRgZ4@e(T*qp&cm}MYhRwDYorB$TV~i)syR-2_OE@^Edo1N$0;`jf^@3cZU zDf*Zacypr-SCas^Z~6^05D$HOA5`M{UP(|*Iw&cZ&A3%Q&wr2MZ%!UvYJZT8XN!8p zM`XXPOVo(iad?V09l=Vc)F{#TPL=~_>Vwzu$D#KJX7B@bOZ1m zHz}8UW4l`Ct^E%2o(gT6AkPmq#vs~lxJI=@V6@c!&4MWhykZ8@{4Ij8tXo^aZ)wx< zp$i{Q(Z>ijLvYKA*Il?f_*=01S(}ag9E;A+ClK=W)rkiu{3a~7zCC&IIf6ToN>FQx ziuaykfi4OMB-`#4dUL4N)kURUW2_Oi=AO$NK3x`uj47pFe~?HGuQHdiio4=t{<_6= z`lI8Tj7#2PW!O2zx>P8_&nwyOHa|A1CE``Tc&wGrQmNAJc+s(5KbJ zrxF{#ULjbQsSRE) zXLPy6DWfcPOC+ZlA7{j;Cj&JX%DK=_f7Yqf?#-}%dFwBk@d;kN;X@X`Q&@Nm!hv%v z?9X$D_t^mB#Q$OIEd!$ZqIY3IKtKtlyOi#b7#aZyL8Tj{q?;j!F6ov=YNSDONa^l| zp=SgnhHi#;{Qd9!@ZNhrolj@ZK6~#udp*y3*0X5gQqRe_PvC%gL-XRMn~6i<8qs$| zjgd;NBL%H~lcC$3Wy?~Iuv6rdCkq3~%p=z)6L(bxhCzJ)>sWfLK)-^6B>qyP{5j|m z>J~m2N+6Y(2f8JR&Xt`eiiRJpij9m3o1jpg+vE40Wg%!+NrHgOmh~_47v3ZDl_Ei< z+zy)>9Vnv*RExup5=K`m(xzy{p^B>#s>?lB2POerX{8$Aq0iV7@Zr?dTM@Iv^``h3 zs=NG{z=k74N8Y9(OZ||8P7Wo8y6K5lhoQFvV$o%yrQh-o)Qs+IV>O9@5SMO^ zE-vvPPo+Uag5#>#kpC5wZDG|pYlmA*{na-z9&Yz?x4u-eZRE+7^Umdu3gdPK%C}`a zD02+L=rNFwGIF@wNvw(O{Jimpa6U9nWGzCc#tx3sE zug+K7IS&_aZ|$^xcB%p9Xc5SV)PsAuuE=hWG0M5^%zj9VSM8TuKaxNBgOFd$U$eJ) z5>F^~0ufIM1(7=nXONv>glf&T8mhM6V{Lb;y$<>+0f7ol6_`PSY`wt7AMJBRLf7My zD@Ui5^7a_EAeXb$$0VG>nv>xGN3+#iRHg)y-qIfDJ3e-(!rjV!qNR~$zoqUj! z&oo|{K_`;Kz79F2h8*A5!Jis6-4|pDv7GcCdN91g?!x`sRegme#4rsGc8vCbX|$H=sjPR z!Eazy{mr=Vy!gCGFA$61pgIBo$w0iuD2=j51<^28j9)n$>XN-g(*Zdi;fBBm2mZ(E zuuXiF`iRJ-OdMS@Jp!-w6L-rsyH0~cuJo~q#rLS0W8hj&KKL(BJFl9T^38?tx_oJ? zVt-Soi3j}6G@9(AFT%fw#xjMw&};B_t#t)ak}x{0@d zrjt(C`T*$1w~PJiPO6J*?AsCvGECGkNL?T^@i_*Dr@)_^UWlp4tX47T-!Q(Pe6a4 zOd!QFZ>;YwX@1czH2h>7-)B!eV-?bC@!ZRgh}to6hLriO=+6EeiVYUjd&Re~gy8?1 zd?s)+zGR)pywQjPPOvUM^Pc)5zh_kX3x@us*%GjG&R%x;Okukh9UAIYeI1!3v{{L8j>_T4~Y%Ht%do#2QE^WztF~_3uq5l3!7aNFCsj@F4PI0_CMPR8LXoF5KaH zn3-#1lb97PlS>#M@Hgxjor(WtHC@}?+B-Tc{I^s+o!;GiAZSQg1}|+{tjw&gQ_G2M zDefGgKc4vZ@KzPMMRhR*8r}%IAoqJ;d*%hHeV*dn-CvnJMa1Lk1hLmIc7L5(I zRgVRf%A4g59#uOb_T>yV!!ww@z9U{ZDyN; z-1ne-y16mM1H@5HGO?6cN`GF0@!v)ar*cJW^iC9nA_s?27AT6JiCJ1Cd_AN5sCQd0 zV-;`WGM-o`oxLZx)oZbbq_AsDr-G=@#$*TppU3FRYBf5uNaxBBsFKoypIs>)Xf!b{ ze6QGlC1&|~-cTb{(#_h;Ra;|${SwPJ5pdWu5=jC+_@U)Rj zCCAtN{4B%coo494X*U>UG&^ZqU$4{L?}Cd+M*PmjY}k8+w+DY_Eop(67x(PE6UTB; zr7iLrGmn~|`(L$tOPK%g^Vy;cndbNQqY?Gn1CA|fhpqqZ1&|&5Z8mt=_m|n&--h>@ z%yZ>h7o!D624&LVA(du>GVo zCEX2aRTs27G%D|Jxmbf8M1BhMtxN918TEn)z*$yNONsK>1y^%|Gf)E+PT!LDV*>&5 zQ`W7(Ll^(_6CPK1%yLG8l$M=>I3J59< zLv%*ZV-zq?cRhVpt2-{Xk33k)X>Gq7;g{Z9Goj#n{MZ^;pG?Vj=@rrJUYf-3aI3By z(#HPfS+1CCobfOBy-#DEo*?5qR4nb0Bm6yX*~mg%u?N^TER5j9Xhb|&M@wuTqk;jT zAGfVu#J+3^GisiP0j^r!s2z*$Y3>d5t)btHr*8o4b!7bp;(^U`L^C%p@dc{`7mV*1 z9aic!krQ^Yj$IvTGgvx$uka<|fIrW&fwz?go=1~Kj_2FotN)i238gV!`Zz~dF%@A_ z`Cv`c!XmG3@@fz4cXRr;-LvG!vf%RqK0x*46ZUQ5R{=vpTVmh2e zUc7>*Zi?{X*?z2~(8Spz@MBOLYwI3PwX4q-^U!cv4T|2o{(bw?rQ}*?lf^bQkHm8? z0cBYFNiDPRkBkTrNQM@a#a!KSFUT1FL>8Uqs%q4HOJHkaAbfVN41@t7s6K`EO&5-$RdJzh=XsJ4* zr$hAObod{pg5499DYqE2WjtOjzTUTvZ2JsDVUXm;80O)8DZ!3Kh=zd{e8(R?D6LK@ zHHOq`*??8QtOqex3&{763?jZ^5}x4B=j^)Qf7!O`y|2Rt=f19^^qE-af4xMErK=RM zuAaqEsV_X!y5_l*%C7ZME=?tkvyRSknkA~2if&FsI;D)E&_RYnwi=_2(JX#Df6vuU zoRSrOkLdO+O0(T7##nFzg z&~mZ-CUcsj!0UvDQX*X5#BAjifoH2B`$hu8Nwm1MOJp$K-l|?dFnd^d;y*6wcP)z2 z!9ik-M3{tWNtSDu9z=0zp`%>FI3#@BgRBExKjU@^1z1j+ib>vwXQ5yGo$W70=PdEf z=Je8LJWt|`3x10t=>2BqWEZrBSNW;?J3x3zhTAD2t>XL=lwD%m=Uv0l3g%-T<&PWm zNk6D@mpyEYZNsQ0;%Lt8S zj69Ff4}>ilt^$`z<^e`7b4CA%E5_^n>*raLK*tw{1R_tZ`zBDj5WM>!HI(@XX%&VM zmFvbCh&wiK%3KFd-R2}P~5v@V|L+e(MRo&bi!)Wvz*)w0DK6T zKPG+OdO^LBI@=usQBat5T}F8A_?qOoTt|gyhQ5`LfJKt5K`= z#=@{zAq4|DQy6GVcE8E7OYto}OC71&csW4}ZBY%xZJ^58Z-)ojdcI@g1#z3k$aBTp z{uPI_^KRSAUTQ8n1dGu$Clh7WHel|MeNty$({H>?Mpa`9yC9w3S7OP{*Ws9+*~0i` zOCtK%R%g+3`{A@_G>_2)^R~(z!)G%I zHGHnS$7awoM8W(64U^@D+;r8t0$n8Go0cm*g;6O~`Hgu4SMS{R7u@sE1IW1Z{zZk#tzd6u~@KvGTL3^f0+sc%N?1dBQocoAUj3 z&Um;`sGi5;ikw2{X8gu_vp%43R5ch;V^QuGKOV=KuuejFB_{CgPZ}~J9#z2okCBF; zin>ugWjM-jl+zN#zu)Op_u#~YV2mX1wr+wDzk?oJ`?Q36+M&bE_+W%7iMzNLww61= zkraJue&)bTfbjaROGc}>sTSl(+uk3*TvEWqk&)%B5u5A6&u33@P}ZaspR3;5Os5Cg zqaU2;+hdu<{H%V%DI)L(uV!*g7(SftVdJvPN11y*6b2l3aq^fMgtTlnzu8>>Zkw<_ zkEx>$D;Q^4aYiPZ2*y5*Rp@7E_vQLco=!`|>J>u{ihi-XuBaXbIj%(Ou|8+*0-|8I z@8`e0?8F85_dL$@4%g^ku6)sNu&REaP$e!ziggu}-<_wD<@K5vo)dhEkEM9Inff0GRBWG9)un0s8tr?ZJy(6c7Q2~l~=#b+&zFgM8Z6X_2(xxoQrf9GBw z)(rBK(~gdsCjN43J#Z}r$X;;g`lYvaIZwLdXim`Sf5`ksS$YFp ziteZ8*YB1XV5Ggq#YN88 zLU!=mS4~8JR>TNVd~6!+YU`j8lT-4iD{&ady~c;M=i}cR- zKMiXBHj(=Lr%|ARuLW^^x6IZJ?$U9SVM+aE4~pXrf&Fx;$W>{>%N$qi%f!6a%93S7 zv2-!sw#)jl*Ttn&jeG?0Gk|UP^fbfYzqA(KMYvLK#&ZBa*etv_}=qJSg&K?gq%#mLr0B zniIS@=yeg`897Gi6T><<4OMl0l&JV0TD@c4ej=U=Ml5a7<&YrJ9S#XP1OWa8Mz? zxNIG(r}Kc8$+(9`&Ho4W9KIY(3+~L5mJ#+cEZ~kIO^ZMW& z&>@SMrjF-xLB>I*R9jGRr{_QULL5a@N_Y9pPA7{@I^; zawxaYc-8yDbA;TKwo#wf&uWv-s`&&@+{k1zgV$41Pi5qZ59XLk|Zty}TLorJaF? zE1blUWfa~x{wMEn#YGpf9WxHn@CdrU5%;gj^<1X!4K99wjE9dN0HAo3y3hGoFowIO z{1c2eA*>-M+`nmTTk3`frOR(L?@V6wX#L}|P=+YVYi-^V(fM6DUyc{n?m}sEPwtKN zIj8dYTxGUNNqK5H-Dl{$y|cqbQL0u{eP%)KO!=sHcq$1VON$=k_|q%`!_gudQFQY! zU9;r`bm8W&C!b(8ynBieAmcE8w+~B6%Y1!qaMUC$dlmme=1@i?6^?w-9^-hqg8fYm zAy4t+J3SBZZ`3#!_`cw;&ki?@#dx-qco?WL9sNjM>H*!{B(;EZ$(oiF*=|-k)iQum z=llyeHa;`V3fn-RjD5g~m$wysz@uW-eDjB-eEMUx2|8EcD89XmBwdG_*foArEA&Oi z)a47~XtMR815a4WJr}NfiJW7F>1|qW`){D(?1Mu`q3CrT}wO}3r*S`pYdN|xXeAk#=FxT1w5BP>EH`&u1w)iYv~kz5#n>mi9%eyYF!iSmdKc& z_kyQE|9gRO(3jMXce0JiI}QgVPx1>NuLDeuc}jJv8!10*6)drh=5N1wYOTb++dpVhjdoG-D5=4Hs*I(wPeixo~ zG}-4+P1G_p__E2Th1~DUfxs`<3tPxpTvjN1Uu{sCcL>%+2uJN@ZFK>tP7+j*<$-%R z{?*&{q(2MsJQlR-ysh===ImLefz;*h*Prw0XtQh2W14%FBu&}EqKVU7)Wu(0${JH2 zR5V|=oTBW888N;!ts#G3z{ca80=P|T(NmI`A8s!j=`fK++GwlKJ)L*U^-F~;@0%k` z4{+9)bzKM|?bDr@BG%b~s~%bRcinC<*%(aZwgQ&W=li#@Q1;6DJq?h(elbn7^cNHP zM|^AA2N5vx?_`J2TdwHA6hsN8?N$ogj0hYj_TJL!cwu6LQ2v8^-+@{r3M^LWoy8x7 ztMp_N9%cP5c>FVFpp`u2C}nizLJPp5y5B{7li>o|Ai$>4cOVFub^SSf?!2zMF0{#KSCnExR_BWLCp%#U%ek4H* z8z<&;?l6Fkky3|-%$kp#EV^F=Wh~otb%3j1gsowmA2_WKIGnF`!~V5mhg z0kNUH74RF#-Mn$|ViRyceJ8bm+uN2u_O!DYPYEEjf?uq*$@QOHwEYFQKcjQLONT2>iE1>A}pCvC+&}>B?$5)(^P!5M! z9Y#Q6}mO+@T zG;eVOuXFtMDaYe8)s^>6+&QpEV_)qK`Mbyd?)JBSTzNR@A?G?BU#Gt8xusCzI{Fjc zWsgZb0e%$sHuJZ76jxN={TkKku#z@iphraV+Supj@k??G(zwMv>|PR>TmN-RleRga z=sptlN#d>0Z}^1^Eu`}r6*>eU)Dl1sY6&PWUdEY{2~7?}o4^t#xSK0+{hur$0-q*L zKn<`YM9}g5dg^sbDmx3o0gu1W1>qjaUmcQ;DV5#P8~_k^pMN`o&giV{Mf9R|_FIuJ z$!OuTUZ)}FPjB;z9A?u8K})|Ltr22RidcVL8tA$vW!J&7>)v6K5DKt->BYt(L`$@w z{~l@e;wLb7?SaMWB}o+ew{K`~-m85>PdYn#^q*T9Ij{#WyF<(ZpRta;eKkq8o(`GZA0GEqckb3T<7I&guhBp$ZedqOl_Z2rs}d7~2|o>U^< z@$%sl`#>O_dL-5(gL;9>gg;XJ$Z<%AO}(Jz3r?gvVy*8u@50)&FVBtEmlrJ&;6$5& z390iMay_1-i-Fo;LS|YTxPZC9zC72RS4=?L!NHeu7UNK!Q0wW12&hd+ROekpyobNG zQ_;KM@eOU~r&Qe_(dv*lK#`z+97e3m_WM)g(~DClhNlcb!t3*x*Mxoti#V#mWC;t& zF#LFJ_z>S%5)5BL&lqb}h6p}BOb6m0Fi;DGZpuE3=Y`pb%}tHtB$qUkUR(xPjfAbX zc11h?L(NX}b5hx}nNlPjUsPcv_DAY@jtkY~PdPsiqu<<#$3^?!Ob?c2655MR{;5 zSF@vk3uH{dd^zYIE+z8z^0z~(S+R)CQ`U>*y&VLC1G#{_V0>;tvJXqOP+I zt>pdzte3JgH3&3#tzx_*Cn@fw3(>p3^D79UyVeZEQLCds|0RlThwHBmC9_!0?w;t* zbt-U&CWt-Wt66mlg>7sWMp!QWBH=$PUa%C{y;Lje7Cn?Jg8D{?n`&pbc#2M7526~z zcTZjKyzWc*QE2gd?4cM_n>=d+YNxN;8zJLWGU0``(;g7Besn>Bb_7}>RC3F!+cDnj z#d)69delNq$^t7J2AR}6TV?UY8FeL&oZls|DCZy`N-zpO#1t$EcuZvSB`5c(he4#o5$JEX%{Y$J zs{8s3dD9+D9wON@nLvt%tRuaS!380HdY{!Qno`R?80!}m#xkG0=fOwD2A z*ak=Ld5Dkx_0fYzb_xNlJq9>5R=8T8Z zhC;Ab84pj!SFz&(-vDZ$jz^g!DC9Vls*O>zV5_ z7e$ebW0;1(3zNrzxdedZaYFb&UN$$+Xtw1Ljh9eDc=qw&59q%DL(pORJ+sV_YB)6G zkO5fLQAY6f$wT-=O~fZrq!YoKb*J_HhYBbhfAgFnlbj+uNd*rV@<#)M7)_pjhKW$8 z)$utUcSh~X`}B$7RCeW{;F~e!PMsP~aGJBpTO(zne3Ik$tn4p-ls>WAwSn?48YlGn z`x!p$D3eS;R%?51-gnVk$}_2(QGXa1Tom2j-jr>=smLW8+phYWLL2U?8nR%w#X#u* zWZxbO7*FYz$5omz_8)Vg?AI#O?3Nr7|K)HOcP>w_5G9UV!#F@h%$RF3O7fjPYP-BQUn6=W;{c~3^AxzE5;0P87Eu|KM^juZEI?oRc)v!qdWFHqRz8i&&M{Drz zxxPnL!xG&*nP)-GiuB7!M)VA)KBwtcr{_<7)h0?;5_+%cSA;9 zfi+Vp0KW+k@+KX28Uj*EhXxJEcHAcb=x#@H@<7*^G9R>#Fb>Jaz}T$l-=r%D2mQJp zzJ!IQWpNSKTs~TIk#&}c0K9kof!?|9UE{Iw6Kogz^FbqfI2E{u!=w+Dv6}z3!iGJQ zY2$RLsz{!LPr;{vnG!rWk|6|rFvqLZfX?-q!GY${yQkh*UqpA zFrZtl=daWLR-Na@N*YZRh=?JV)Ws!X-+eF9Bp`k}7-E&x(;XJg^v!HTH{bZbCrQ7= zj(k#qa{VwPmv6wd3sQbEOTle2$ z4tilv4sdew*;Uq!=BYzwFkHdWqB22z=&V4DE}Li)4(?)Q(&Sf>9>iqna%mgAnFF*s zkmM7ElFvn`8C}9d6S}W6h_^nwq?HK-OZZ+|u@T47N-)Q7ghr68`^9Tuie(mN+is}3 z&@w=LCulLqpEur<<;m%-Ygiq5$`C{O$ZG%pk|gAT$2DUnN+0}bu}=dl0#wI$qtQ>+EF zGbj1K2mTS`7Zv(RMrBun-CV*iOO=uIGcxP9(-M1?AAe-eR=8Ag8X#j)GutcRq}__@ zV9pdJSE!9Vu0!Qk*vo}@Ru35@Ri%0f^O~DQN>RZgQ)R$IgTW<2YQsyNhaG(h4Nc`J zB?zjQQk-cwl=C+M!11dXYG&P^RBiRAtH6~-;3{{z>c1HiK+hOIrUO`gCuY|a8KFQ5 zug{vacuJ^OwcM82g9DAc``%1f8F4_0)TNeMubg%gGh?fbQ$y7e}mM@>sjPp$d)T$1|=Oy3}fxokFy&`(^lJ*JS--X0A3EvHU z`~5h}R(_SGrd6Mi*)l!3IBE&TLWOw6fUKqTQCUzLc&05x?^MXN@Rvo;{Xmh8&s&F9 zDKVuU#zw#0>yvGMvuR=h^utWb*>a|KACvF?1C|LLQ{w-vdC|)tRqJav5`I2DyKv^f z%3`IL@57`SnOn9hEE6=Z3Os@gIRA{^h|9Y~;owZSl9BKlyisv62zZARgvzrGYw4UP zLcLv+Ta{2<6yQ5~0kNO=^i>53H}29&SXe4=-qmwa(pwJmr!+x4seVM&e%@jS`nYxL z-Ssy(ornLo%WU4!&*)7m;P)+JD>J3-`M${1X*7Zt&S#L^3HmcJ-q>6>6Vl@+!0fCK zqDzx5?7oqpJFGMYPvxm}d~cd0PtO5(L~3d2J7&HNT=<|Z`0f}a&@rI5!D(|8^;MGG zPQC2wv`_yCkvcE-Sy^kDj2 zHfhV-{4B5G6$`f|15Ot$ue zTc5&JvEn`CXI-N4qbqaofm7$1wWv4!`i-d9v`|Owfbz~axSw%DUE#y;8_KjS7V-jy zP;eQxSi2qMTPGca{<-#xH=A+A&unq;&y5c244sc19Ai`PGx&)0Fo#xI=)qE*&Rd7& zSG>A(y%q83X#k+(Pz1fbrVc)>7;$93G6~0f?`(4C(_WmVHp{GoeFo! zhfdqSZ2u*lh^aWoqB!oryg4t?g~RBN@DmcLJ<4>%#LQoE$7_*(qEv zV|t`%5~2i7a%^WxAQgr;b(>_UEMzh*nR{}Jhuuh-mi74R`h$OU*p&p|2Lzz?%`0Rw zhYt5<LIrv4pW6T^vxBAX$~N}%n@-RR1^iT99UrE zbU|J%M5}DDamPWL!7h4m54lbNU6)+$pvy3P9i^pyR=}48B5;Vm6DfjG*ZiaGV*IFj@98Nqv5*#e67H0V;MEUAGjxGIs#CK2$Aeqm5&h8q}2 za322=qDrwDq5ct)%ps}s>i{pfrWp5z^&J|n^1jH6kM*dt6LlKUYcMA4y$G;1Z5)C3 zkr~kouXW*;Ek zn*Mc!Jzd&4lNiBn*UOg%nOPunC0eQ83>8fCf7gC&!GgD=!;#=g#m|1$YCH@EC8}&0 zV%`NQJSN(bIRJHLM*27%TWE983rer(*$QuN+~;*pNTfxPd3%Eib0%*yT? zL4`520%$U8e~0sBn!azCi@N=J-z}vkd4Eh)@wo%r^6ons8#Cpl1aO^swZ$Wi+OQ$K zKuM=#&Tf84jzG$a7=Hr2z`1VQ`_SUx`=;wyL(`yT`ell-1dpI^S?R&(z)K@@y3E%L zm#xZGtyR^qv7RB4#HKZnVy^e)n}y{ln@795;W?elL|J)UeInuJw7~Y0=VYKa8el0z zw7_#7!{!928`;U;YZu5Fhn12r*ifn>DW|SIrAR=R z&UB%#@ZNOk1BKANbq6mV;tp%ye;{~VO`u?t z3X**8`1z=f_~X&}J}_*y+(5@QF#Xh@7Xd)tM@88UM@=xL0)%Cc&Re8U;Xy8HlJWB= zi0aO&Wa~U%ih-h*5t`(s`Ywtj{$d7TiE4@~d}PqtZHI|)#bPH$N#_t$tyL%Xtx<%+ zJdAU|B`6-#Ykg?oZN>WQ!u}Xx*B$P`oJ=9x_iA&79O<+bBvjF*_$ptB2V6Lxe$C1blve8 zr0KslefoHow{&_gAYf$2>k59HOM`adC|=Sl_x5&o%O?P4(1&RTqgxr$C%}f|T`$dJ zvxUl&Vf>qa-o&48oz2j9;`$8dd_ox>(=2bh2TFFSKYNdm4V1v2DSPx1)N^9{k2olO z898A;t06Mw)wUN7nyy|?J?#WaCRBGKwNJkkNBWvi*sW_HQHc?9JQ~0U^0XmuLW`rpq8?bFhkod9QX+G6sb35C zK8RPRjF?+B{5Zcu{uCgrJ(DSDgW;z?Qb-`h3S1R{dWjTO?49#WYhZsv3yE6=-F-NP zr$2`~u)a2^-TK_5_F-@4?hE;ZM1I9lqK@^${&@)gdU$-Z&bZwICGIZ!&3*LEvG^i; zgKaj4!*XLnx^Xt?lyaclNf3|A*7ln3Q39hp?nqC(xMR%t%N|6k8t<=uX8h!m50t}# ztRKp?E7JgoX1%J8TYkOMIoAc8td3?WQ|W;73kC1(u_nt0C#tY-t{fE`zf`OKtokFc z*GYbD_8bL$nNWs6 z*p@mXJ~s8*5HcomPl9WC1cij|$N|4DU~N0U?%%|oa3S}u%-F{{tq6T*R}h&Ja5e_C zDsE)zpP2dXe(Ez(xb*pSPBsj8SnGRl%R^(91?}2ZQ_|X%nAbW_JM7Dzw+qlbyF+aM z!$jH4aKL;p!Pz^Us_8Irf&4_GEar2RUXGUdn+kkb8>D8~%dMw9`9b(nfT$l4I+(+~ z+jB{?Jcy#2ZiaI(>Z^69zMzntp6fGXv(!z@K48J8o)&)3*@xr5!O)Y8W-9<2us@cD zq0-=Ox`}pm7X~v7zb)lkIx90O9Ofl@FHoZ1&GwSWqO1E&)ub+#$=?+)TusT$7i`8T zKzwz~GI}TJk_{V8B|_X8-jEQb`>ki?JHQ^}H~c%FA?|Rz<{@t=Gcl(obiPopx!jGN z!rL%Q`^~D2C1BN^_weyZvn%BY`~-kh6}m|d0fIZax>04T{2b|;)Z|!Sd?Oa~x9bYZ z9fnJm7Lf!Sf69cVl0JSI$O2bm%HTf~z3CgwLGyaXliGKD?_$834~4)>_AMU5@lN|Y zkgZ*#j?_(d<>BUHMJ5i(QwG zwWGQN>EsP3L6C5Dy!(+? z1jcE@vh6ZAg@q7|@K-D@MiIRc+%nD;{cvmOnh4$uP(nnHTJ&VA?+g_UlrVEJY1*zK z5%$}u&KFwgC1bP=IJmbsZ^FWFXr4xNzX5f6e_JDJ+GK5bTd6;6bcIjW63pLzGykY$ zch0to%pvAA?))dYr|2L3?n0!|OdfDN1@0!vM*BGKNa5Tr{@Be?q6(Hu-&ia-6RS@Z z%>yOAqN|vG*y%)2`hAVLLF+}HYW)5QS7`a&XZ|pqlr*r}RmgAO%RAt5z41P-XN3{k*|F4hk}_r(X`_UOg@MtszC=c9ww zO40|pVr3H1dW{&qJL7uEp^WI?&aJm)BQQr{NXXFE%LIV1&tQ&ag6KV2CTqm5(L2c5 z^eBbb4g=6MGR(0Kcg!gO4E-_nxc*q22A~VL*Gq!#*=q+KT4zg&1`#6DR$RfX%skdI zp!Th8C9|u$uAT_X<}7H}-8hLA4@3?$Q?K;26s3Q%hRKz}#`j!yS%BPv$)#?80;?ry z8G-g4K08lT4~#RF*TgoHJM4awYTKh=9b9cN$6v`cg5@XFlM1G`Pil245C*kb9aTJn zn!2YuL*(MAeJWO6&pcfBxfVv;j%i&~(l_c!)!qVza++eHXp%a{RzuOpT`%=niAkHH z3McK)-$lLFTk2_Gczku>GRVc2cuMy;Efnz|;>n;3QYC}NC*+BHD~C()a)(Vh0Wnw4 zbo}nxmli-adAXPHNJ-$qwGk1pK(K&mt%v-f|J2N0agh;rg*1C;?Tn zU0B-9`_N+QMPZ&Loyee8?7N$TXrAO)kg=54al)ssB15ngg?LKbru%HG;(i;GlYOT) zt`*=xiXGAgqN%iOLTMZqHsPSq1@RHgSBE z!0>dF)=;}d>MVF)#IX5mhGB3NQ?<*kiN>F?DM}7^@0u2X)X>qQK$F1u>GaqdWLZOz4c+{dJOng?8c-f0Uv=Hqa+5zf<`qmv_$!M zR?Pi6@&J0HxQnWv-9cq!U9Fqbp*KgqrMew$MT$q9Xino1x~~P>+Fv!5O)=RVI)PlR z8^O@pzwd2YP%QBUpXjrDUo3RBTZ#ux^TCav&!j78xgejC{kslw1b`(@d>uGQ{X(t| z-s?-9yUhhWYSF@HlEiB=5IxoMn(@18A0Wl%Ic92!=zl##v$DIh9Wx~d4EW2@IOSBO zakSBr1*O1@PiStYP5?}le7A2@@(DpP&);ru2Xk5@5K=NNs=Mt=YHPT zJi+fCn7G*5?^(D!{tEmD?Jbxw_=`6Kuw`d#NanF}%W2#xiuTR)XBrPz7|yq9ZZ*g2 zBGbmQC__$Db&w>|U8kJ56M1iuRBtO-W@^BBwNLxi{f51Wyrj53lAlp5^wX>WyM+Q0 z?Jk!Ppsz9d6H0iCKB(gEG$(C8g#I|FV$wyZkXO4q`}2o`m*dg?(e4QAJV>$JN6$r* z+7FtJrJ5xbk;CGtNykbV8qSKAj{+OIUS9|$eenI-?+wVQIwRKKcIvG~(2emur|Iot zqwpgX*{_@EIPc%#J!VLxjY_7h_0F(4_g$b-OQVQzhFj;WPPmBNJ)J@1Zu7PsbDp;f z;Q7WRhw+}v5$OcR=ZP>wv3}1j3M5VTWn-NAt=H-gx$ItcD26;b|4RB$a@U$OoW>P9 zG{I=qopj;0ACwcRUW`jJI$w4STpTBgRlk%agggzLW&?U=Uh14D1Grd$uf{B#eU=>* zbO!fVf13GcytNF5@qAZjR?DW=J#vm-^~7L>k-ls?A3q=%tNc4x-fYR|AO#b^w~^K` zZjP1f(Wz}8R6nBbFLNG+S7;c7)@@Wi5+eH1P!$T$~;XV}q zBgLfW<>(vShcFz@XTpG{D4|dheAt)jaPvd4Z>hx0IBTos7CGB0hYNv}J@A?2Lps`iZp(sIH2}7NssWHeW2bWJFq_lshcf-jUlag4xkhsl zt6q7jhha)lNA(Cp;8*p*)tc(w)O60G9>*4>{bYXJCr&w?U)lTuvcl^*s9E=plLK2b zwZGk;v!24u@4c+)Jh8!?sbB8zd@G3RVYnv(Vyv9u2%yDCun*BPXgPhnSvVrri>DU- z){b1KTDTNDzP-V8k^7SKB+6;)&arDJTa@xX!aUqxlj7(ux^K%DRqM>RK>DRzGr0sW z?E7MrjJn&-7|j`y@x$eH%|8BP(Eu7=_36uDn%sIBGE3&8C~G6;V-qh-hRzQ)s_yze zaQqbuU!qS(F<>Z~l-0+D_b|08=n1ox40cp$$LVYG;IAHcQwyjqoD76cziQcUi-+2xzqY_lUG&16vWN_cMX66VW?H7R<6d0~(I)XA;)qhxfU8 zsQz;pWcIJG@F+q9zn)-!78%C4JN4s+S>aS*f5ayXedT>)*?t_`sq4JU!XglhCR7`_k8-gKlc@4M9DQ#=nN&OUGOnJX*ddZ7tVH_UXu<=b+(O+OQk z?{M{gl0fO4?bK?>^{Gu{Ih7UjxkzkJQG|50=q6e-Dh2w!f+*fkE;gLIad3kI>pR5p zNYvdY1;>81ECXjtp$P=8e63h$H;0k%HGDaB$v@}VK6u~x4R-w6j? zlBq*X{Sp=MsJ@%CdEc|MV2hjvJm>YcN>5KypLcq}5FY^~hcNwtk;K~{8^31*jqI_^G9C^rGKPI7)SV^ISP>8i_-K-&Ctg zn1$67f9AM0=mo81tq!H{q@{JrDkJWrkCWCW{}D} zPQhQ+1ziEuN>kDQbD}W( zoqp*C=t?if!j?;raVc@Z!A{5sG|ec$$1-|%Ewf=i=9K~16K^l}iTJwzRme82JXjXO z6&T$7M%(c^zFgh&E*X!;uNI2GO=!8OZ|TZD(!HcpK!rK7=WWbkce&R;g!ZoZN)iL_RAnjl~nh*;*V8rT5)ueMN2O> zXNz9z(P&;-11W(AG6*B`8OFNdZl_?v)Bh8#|&q*~z0o z_4S61Pe;5h5?3|>H^p2)&#Yu>UC;tI4Q%WA16++3BmCZcq3U>x2{|TqL;GsvLWCs9 zHR97*XY9Kp*o4zq&$_mM|0P>{2qgcbCS6E{K%z3w2n2OPK1ij-yP*fuY7=JCf=v0 z2qYr_erAvgi6mk?B$1MTrp|x3ZZz^Au45~G2z?oESJ>5h1{}HIZ!>THayQxh()FO% z1@aJg=R7)*cFg(t>D|V?rbNpwtrSRh*pz@>$IJ`ltDnq81*rxNPCm07hMkCHg1O@C zDC6otbk8mB&&Wk6o9IA-!jo&NzDYe%Rw@U}nxb%NDRRiD)cDQMUJXz>s~!{*I9bkJ zPWMA^`f631k@~BU$I6wQoy%bKiu<0WW1K*B@16bQWe$L*?r`}cJ!qVOP7ag9osqB9 z!dkhfOeg~#t_qs`WcHzB|2}LxA&N!+xafIjZ+qhsn+w&;kh)qHWA8niv++|)e%-SI z@7iWr%80KU#j3mjS|ZAk6dz?y4+pD@2|0#%(#IdqT~}MQpGbX?uP&n_e?sh0EwJ)^ zYc%Sapf<&GdbCFeSYzgQ76fo$kY=)G`)VDpaufFPNc?^hn@Pa2(=D;H6x^__U_Y1$o5HxLC;9Y)SDnv zxbyhcK;Ha2KP5Vdxz9|iio@W{mCf4DY`vJ)n4RN;)7H?Fe0tXi48-qu85+x&5LH_* zXpPA!{1IkQnw9oTw`b*^zu2#reFo=8%8hJ*eDq^zTIu?K$-hBcYzwiTJoGMgYVsf~ zG>FT#)c|tq#72|VdhEWb@U$;t6c+q)F;4z_G%93BWu|TI6NndPp%6b(_gb%&XJQ&g z*#PCM=7`IP$>2}{6ktCh9%2Jpx{^+(iTK9P-W0Su4^puEOW*9V@GNLyP zN67E0WsD%<3+0|2^`KvVlsarSa2_3?XF77d#wD3=m%@ICgM`O;wtjt#b?KLP7R0IY zqjw6%^eR;L5FF!MK^OY9;#0+81iGJovONeB%sCh%r>RNFp(d_lsG*GErE1aP=WW*O z_`3`y8J(B0X#*sbJPD9#R&$dAggohAK5o)p{5(y8j5eQC8A7eFnW&+}pS!-fq3dkX zm@KJ1vty}gX+x`RVDUE+i`$7be z5SB4rXZEfZE7-VGR*~8&wKkN7$RUYhuU6@)16RFH zYAYkn

l&Cy8oNOlKiFQaQ_Xnjhaz*d@P7!2KGv2|gjnOtM1Gh~>^i9PT0oa@gV zW%If~FfQb{^KNN!8`RB3(I+dz9+<2gM7jQ&lAF1U7_ zSVBBNY)*Z;rD!K2^8pF}wave#z@orF;zoF8bG=CoE8;Vx+*+c8wo^fkJNEc;O)bqT zw487qhUe;oZ5s~%f_S%a|M~dD(_z*CR1UsQs)I;VA+IE+HHgvT!aNTW_MF131yuCg zx-p|@i&tem(SXxvE@vx%@j@r9)^XZa=3di!;)g%w?U4rhmNDA$f*& z$R)Mkr?SxgP$%IiGW?CmwCZ@;gyn>D*9dm~(6MW$Rq#@BNp0E>*%o!G5ccKh?Ru><^j7%V6(tPzr*V z-yiDc?qaklb}qy=4yw5Hu8~%VJ$=-AjQ6zCUBQIIWdL_}ppT8KU@UD20ZEXz!Ht*} zZ7FVH{2t25{eJ)Pc}XwP5V5g#hx#UxxOnf}jqfrNK)|)m|G1KlLHoa!D*zW zKvZtpYltgIudT+k;Agh~=&S<7Vu5zau?itEi7QGvX#k-OX4ubUUw-i-72AGP+F6Tk z)28Wx{`Om!eMnsUJAetwbLkje+QsPFiUHGw4*2S?JoJ~6|@?!?k?*X{_~Fs)-}UpqlH=b zRwmmHbIEC6EKHgCU<+B_#IV}IbELG|}CcYNDlw)ZJ_(nc0MVSMFF>^;@> zx}ZIBjK|PQp1MIbR$En4XGOQ~10eJD&=tAT@fJ1_XQ>$mN`Jb&=-V=Ez>?D;%Ge%X zKHLMADZ7saNRjS;iz_0O#M_R)BbUtYxkh@W*l~j2z7cO;F{)~LwtceDrXNPEs!Q?s zA-&v>HJmc?-aAQ~H#}tqb@`6Myf)n?TwjV|zwEcv7~~lIm!=BZZmftiqUR;ERvA+0 zELQ*6RFP8{Jvvvf#uPHLB}kugV8nt)ROX*ES8u;*jr7aE(3C;37$X-kFiFbI%lhEU zN0LBe+6lNw!TOAJLZE|(`FFuhDa;&PYXFI}jC^`S-032i$0lGntu_%W z*jPcdc%*GJ7R3YfLh1dk!tzH4F>aYeI{8UkGY9(Lj20Pw(dJ%NeA)f3+v98$7%{w7S{-9X4RMV5<4rUh1 z2H&jILGnIL^eB|Q^UKZRP$Gaenlq2R^-HGjL8Y( zGOv8MQr6x8NN%{ga2y{2ih#QOsz^o#L$a#as@?5ZCw&KlV8fEaJl&MEDgiPJw}(*v zG>FK3xX5)4BWD&ScdX;ok2j5$Qq(czQF3o^=J2qytl<_-{DcFDC!lFS`Mfr_SJK#$ zd#*pZ+JEpruPyM&hP=$z&H=VpL>q2P_i$2d9X!Fopuivy%mO2idXS({l| z!~JoEVd7zlifATX?5>azQCm)z%i?dZzN5X;Mu`v8#Ex1yq%@zy)Ye@>8AXh*4+54c zu^pUB?`w5fYybG%ZhQEdhk3@xA6;11SF_3mFfBig&d(XCt&KRhWQ(rd$lg}Be)ueti*Iw|@M2ZC-QJCjz$Vr} zp-2(Cde~BvjINKV^xngp?k+Nq&^N+4dujgZ)m!#@u4XN|4invk<2oiVT}PfhqK}3- zc||Kbb%jXQdKavz_t8S#tC7`aGPuXWF1={kOC)Ox$iI@4EYZy~bvbZzp3&yXkpV=* zv=R8>$^p6hpGV;-Eso=n5brBhlU=MMWQiSRlS!naYipn5Nlwf9YSd8h^{HXJ+WDl+ z=eeMg`=4y& zUF0`6NEk6p_NFC}2PWn`_dAt2L84>74@ng}@jztX zP?-@EBfwO+=b*+tSEe6GmfZ?O)HAgSsFoa_EkB|uTacy-E8FGwD98ORn9EW0#LD3z zF7@FFyTn2H`PRUQn6*9@7~DV`6}T-(C#&Fr?2}xM@vyYc5H!0b|DwLS`wyJWJ zTPHiO&sV1gL12ubf3XLS7bHa3@g>%qAol*c-%NSeLD_}UI=%0!3DY&kO~Wk{_@xx_ zEzFES%QNMcN|@uXy%ogTtY!M`MxzJX*&@uK*ZpLB)fPR2pOJi9v23YrT5FyCouUoz zCQ|U;W8^yn*-9;aS!gH#h3&yl=tSPKbG^nUw{4*lJQL_pBHip`7F1gj5V6;Pn)70z zY((NF7#dDCVLm$G4kz;(8>_q1Gm=0H-@i+*lMc8z`;kU9lW@lY3@*;=t$SL%)9fz9 z8lZH39OmnH6!G4V4&@cv3RIFRVDF&4y*MnZ*YxgMc`()W$(dD|T}yDSAzGaJBl4lm zw~1g|XNj!_r!h08Dq_&hnJ0t@Rr{%3Jp1bD7tBXAi?n^MsM8D^II2F#?<*?#jU<6; zW#^*(a%F^U*GHUU22$87HnppP{8M$v%D*BiVGhc+!efN=gyCANe+*WYu2=wnVXZ}J zYY@zfuA3BA#SD;`Yb40Czvs3k9nHAqph1y~z_xmc;f;D0L~UuU;#@$mWz|dF9JcCQ z-}E^s2ywhBqrqsBL1NQqPTMoK9+ajUjZMF&K2e@XQ^dP*BE_%P^}x2~XNx%*gy9;H zJ8GOHX=OAo)NmeoVJo#@Y_rCs&^w$7Z9zlu_nDB-`UI+RvpwO@wfKLEA^7kRfG|nY zGnQ7^bl%^1)e}NhcuhztOx8B$`IwtyKp+ zxexd(q%vCGv%hU|Nt0WcU(2;wg$Z(R4x_GP3XS3z82qp5N5VHGo3)nYv2vwfddUkB zk%$qVo3r-__V^ms+K43R;Z}^Gf;3}2+oM?`6Gi2it^Pi$LXLBwU2`V&G%^`QG^cOVgA$G z2h~0eR|_C914~)&TKIwpSmA{>UYzf?9qh6Wp1;94fqrVNI>PRrO{s`&TJ&l6tvXk1 zp1`^#HFR%(3`4=OOk?|nNfP@>1vs`^P-ok%AODNGjOofo3r-$1{fdVNV1NeIH&mxi z_dw?_`>-?&5D^-LNJKiYUA^#d9AyB9B2A>u-4vInUJX>qM(qF`H3u)=buh-4h2Y&- z*TBUMqZbKf+1>v(raQ7|_qEWF@zJFSF|4~bnm#B&T5L&6hzeT8`lq8J-Wo^>zLk~M z3gx?L%9^DZF+pfqwklhBFLmoa8OnT2@fL{}UIf^P&G$KGm_)fFlv)P+P7!?MjH8+IXSO zFr@lI`#Uk(ZqRn04C;_!#BWdxHQ9MIJDpgxe=ul*AF;_SVYlm2Vhgk^KqQ|o3e)wE zIdyXz>=yr{_ru4>eU2W@s6eM#NaMe*hydM<`Gpt_#5{TyJ}bYszwUM}<#8&>*F_57 zgT2$QajxG9*YBoCd4#U6I?5Wcj5HrGxYVfW9=J$7}ruT$?{-z zQQzZ_miP6HX7j9{+tkZ^?cs0Oq^$)Fl(VS}AzqlP{JgrOp%Vdbz!q<&YoAoknM5r{ z40&>Kl^IsdX;v7GeL_A#mxPQsTE+fp{5xC5f6h2#SeBT4gOzi6JnWN|i&>SZW0F@m zi9t|vX*%*0cqceB)%WKNOY*PCpa&M*E5-5FEWo~BrwxsRu;o=LW18%63PIb|^PEAu zvoF`=l3os}&%4Z{*buU7DUnX{k2P%u$z6q2JK{(!cOrMPQysU`PYvEjG;Hai?Q}s# z`6nOzrSoN7WLeFk5d$~KnK;|!1N!LgZ{g;C;i?>MN^|OseBH=Uo>#6 z&(>gL^?t^R3>Y8eq8JMreJISEM|f_t!6OT9idED zfOVpd7OhIr%)Tc=vSv~TSB?R=8=yxK)z5cEdDx~n!gmfniR0lvOj&#JrCV#B;#PE zz@&%?+67@BgQ8Q`iv#@dtqUh&+|}ktSnp z`L5l#Y8)LaU2wc2BI$gAY4MY&(!=v$8vK(S_6EL`{DqHiEr61Dndk=hY_dzOv-EL- zN)a)O+4~Q5M!hlM07HA9ytmPqbw2%in?)@y4GEbbyy>bjt`|8PTrZOSe`FpXv>GBz z{TrtPXBlSBNcGJvYPdTI zOPLFErrmYpV>IUUe7Qdw1E`?nL-@kMjb~K7g260=-Hl5>0*M!WsHz zEV>-2A6_^Lb^KyXxhorTI4|xtop5L;=hrb~ZT@1zmu>PfOr=z`9S!(h5j&w-zqvlR3LSt)#6;;$t5hA1EK@g?if+8X2G5=sUI12y#GG8jrN#dYFrI*c%17I!l6LS2DiFT^K(V;dBNi0c>=$D2mzyV&g=9$ z`7RS`j{lidAy*owDtcB+)wreXc%SJ$HkjXny5(Cr7*Uv%JMLrg0?azP#-BudQ{{gL z`kxj5CdS8R!K4Vg+5esXKQa6ph%&*K!7B+-d3=)pF71D=5f1(vTmzIo9q9io`ri>Y zaUASFtRfzS;{QE~0vo5o03fVa?Z46fci5IXcZ>CH^h4JFci{iu1Xn}`InrS?G6!?_ Pu$zX8_RDG|>o5Nc{4@l~ literal 0 HcmV?d00001 diff --git a/docs/assets/my-plugin_screenshot.png b/docs/assets/plugins/my-plugin_screenshot.png similarity index 100% rename from docs/assets/my-plugin_screenshot.png rename to docs/assets/plugins/my-plugin_screenshot.png diff --git a/docs/features/software-catalog/extending-the-model.md b/docs/features/software-catalog/extending-the-model.md index 52ef565837..06140bdf75 100644 --- a/docs/features/software-catalog/extending-the-model.md +++ b/docs/features/software-catalog/extending-the-model.md @@ -447,6 +447,9 @@ want to have an isomorphic package that houses these types. Within the Backstage main repo the package naming pattern of `-common` is used for isomorphic packages, and you may choose to adopt this pattern as well. +You can generate an isomorphic plugin by running:`yarn new --select plugin-common` +or you can run `yarn new` and then select "plugin-common" from the list of options + There's at this point no existing templates for generating isomorphic plugins using the `@backstage/cli`. Perhaps the simplest wat to get started right now is to copy the contents of one of the existing packages in the main repository, diff --git a/docs/plugins/create-a-plugin.md b/docs/plugins/create-a-plugin.md index cbd789c757..cc8c2f1296 100644 --- a/docs/plugins/create-a-plugin.md +++ b/docs/plugins/create-a-plugin.md @@ -8,7 +8,7 @@ A Backstage Plugin adds functionality to Backstage. ## Create a Plugin -To create a new plugin, make sure you've run `yarn install` and installed +To create a new frontend plugin, make sure you've run `yarn install` and installed dependencies, then run the following on your command line (a shortcut to invoking the [`backstage-cli new --select plugin`](../local-dev/cli-commands.md#new)) @@ -18,7 +18,7 @@ from the root of your project. yarn new --select plugin ``` -![](../assets/getting-started/create-plugin_output.png) +![Example of output when creating a new plugin](../assets/getting-started/create-plugin_output.png) This will create a new Backstage Plugin based on the ID that was provided. It will be built and added to the Backstage App automatically. @@ -27,7 +27,7 @@ will be built and added to the Backstage App automatically. > should be able to see the default page for your new plugin directly by > navigating to `http://localhost:3000/my-plugin`. -![](../assets/my-plugin_screenshot.png) +![Example of new plugin running in browser](../assets/plugins/my-plugin_screenshot.png) You can also serve the plugin in isolation by running `yarn start` in the plugin directory. Or by using the yarn workspace command, for example: @@ -39,3 +39,11 @@ yarn workspace @backstage/plugin-my-plugin start # Also supports --check This method of serving the plugin provides quicker iteration speed and a faster startup and hot reloads. It is only meant for local development, and the setup for it can be found inside the plugin's `dev/` directory. + +### Other Plugin Types + +There are other plugin types that you can chose from. To be able to select the type +when you create a new plugin just run: `yarn new`. You'll then be asked what type of +plugin you wish to create like this: + +![List of available plugin types to pick from](../assets/plugins/create-plugin_types.png) diff --git a/docs/plugins/index.md b/docs/plugins/index.md index a582556311..755c1b8a7d 100644 --- a/docs/plugins/index.md +++ b/docs/plugins/index.md @@ -12,7 +12,7 @@ development tool as a plugin in Backstage. By following strong [design guidelines](../dls/design.md) we ensure the overall user experience stays consistent between plugins. -![plugin](../assets/my-plugin_screenshot.png) +![plugin](../assets/plugins/my-plugin_screenshot.png) ## Creating a plugin From 9aa26f8c61542fa133e3da99158afb91a204bbb6 Mon Sep 17 00:00:00 2001 From: Andre Wanlin <67169551+awanlin@users.noreply.github.com> Date: Mon, 18 Sep 2023 13:34:03 -0500 Subject: [PATCH 040/227] Corrected image Signed-off-by: Andre Wanlin <67169551+awanlin@users.noreply.github.com> --- docs/assets/plugins/create-plugin_types.png | Bin 143712 -> 145056 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/plugins/create-plugin_types.png b/docs/assets/plugins/create-plugin_types.png index d10ae04442f6d0421578e977d83dc31cdb8a0476..ea45d1cdd130fa704d42517ec9e5fce0a4701bd3 100644 GIT binary patch delta 140862 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 {SLer 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

Zzn76}CRc17PB^4NO+cy@!qsGBtzPYTu-_Wn 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રLgHPm&F@@)?C;%W5#6{S=*rnGmN?4UU1 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 Jr1U)e{{W~vGIRg{ delta 139551 zcmYJab8sL{_x>H*8{4*R+qP|NIB|A2+St~{wry{0+xENn^Zix5e|1%NRZmajOwaYX zPVNQF_AU&`Ph~|ZL^xbH5D*YV8EJ7<5D@TB5D-vD7^r_W+!p;MwIqWG)Zm}F;2;qH zYC!*M`&WX9sENtQ{43SWTrDgd-K?G5#lz5o>yZ!%z(troD3}h4(q89$4M*iZ?>Bv; z(y@K749bW#)x||1LciV)U0rl8H#dr?)6>K~pEg_7y4cvf6bW*sXg=t~siFfDrckiq z6lEd&l*SBC6m1e_RnZZm10{vYa#3cYx(Q(tP*5>}TvYC#sMd*5Kp-$9gYYuC#Gz3A zEwVV>kP5TY-3|{bsJ2sYOdx@eLw=|2uVhe<4*2f=BP;=~gq}MYI~XqL|2lN;K(%&{ z0wSI_Z)Y%aq~D&ihw<2_z)uTz_Padu@a!dmrY|$@fqi107ks(G< z06}jHEgD7|A;N_--dI$yK?Z{Eq*l@iV^Fkg@BrslDB`lBZ*shxOThhbWOgWwI$$oo72QPr?& z4`&Hg^P}azX-1ua$;^deryUaFsmf>wk#wCptv(Q*-Ta0=C!|y_QytTo3utY{n3>=H z;3J0t1HUOnA$lLK)Lx0}zg@Xv8mpU}#}oKbg4`kNQF0C(Y zwPYHlMEfg?hL9=p4t?DRX~|XpYk;Og>cssZ=LW_5eljB7>SikCy|XrXdn0eRvjn@$ zuwjk|aac8-u(qj9Q@yzi$OVIc><2w9j-gJzuMrnJ+5F#R_l*7$E--x`e&|$>!KX<| zqZ8!Qxe+XV<-lCTvB+JzGMqV!3R)UV4M>rdyp&z}-Kjn2szoE8E;7E}IB6`iW%=%S zE}Zp)muxQb?(7L8r!6#PvF7(+rhDnG`Ngt~RB8B`a!M#nD**nv+0D3>m-ZPR(yEf& zLGO^$acfZa>!gOXv(b-JPY<0_R`f*j|BXsGgmlIl`zth6agN6(mtOm+V4rAxBR6X? zY>5C=qB<0`&bjmG{`Ltz(L`W6r1e46`)>HHoWpc{3bBs=;mLLh_apY(4-v}FHu8s* zm$QJn9KgsuQ~);1#D9BCVY8d1c(ng2a8NGHkK-(9Xt^VySiwu_l$`H2@*pS2f#2p; zJ%@njBBs3vEdAQZ$iGW4(t+K=U(l*NGk#9qkzYWkm~oBd4PFjUVa;9a|34k{DAw$~ zABmiG9rBj+U;EnkdP^!&5ZIA<9lOAf_e01|UdsC*Z{SD8w66N_D&Fv3bW&V{=y0mh zf#ZorUMLRLZ}I-JddwwS;)y@Xwm@XY@XK5vV~L#Wc-3$#29?)C$wPD!;i$^(v=Y}? z?`~Z}dwt`%LG1k0@8_xwyO;Z)H_HV?4#H92gkH|lE)=7n&NOZRZ)FGJ1z<#5Z~srS+6Je#qM1ckU$H6FSj3kW~I2{u$9GflFrZz-%HN%!y@;|Fa4 zIJ)DNRBFGiPco6M_QB53RF@)}NRmC6Ff%{3i47lsLLJyIl~MT>^~cD4G?ubM1Z*@b zSTphET^P04C^`IkcH;-YdzXK*W7>%&`a{c^Kdx@LZfC+~ zc1g&s?ZG%ET|A^fN>a)gVhH(zTxW4u!C(NyDWdF_3)U%*^amFD;b=^! zUSY$z^MZg<*LCJY^6XDE0#q`IL1=TW0HomBi@W_%A5A_^fb{huh8~$+~h>p|r zA>lP8LfdfYd)JD{HQ707b!wquzD@t?J}UfY{70mm^t~gHq1e0~%QaJ$fONC>P_y^* zzGs>0C=pkkIzW>T>NROK_6L-VS0ftr2>%qm=5bd=y*UAb>F z*`UHa-TXWnLHE1Q^>T$;AjgCHh%(i}6HYNEY^Z>vQH703Z=5YRPgDHf8h(ytK)KTH zgv&S7RdntY&?AS&p|ri56hzZ6hn90R;z0OFy z^;m%-M60$-`B#+vTcnwxUa9s<_rSXX;nTZF=?#Jp|uVe_M{Oq?UvNW zI6ph0n!Tyi@D6)>9No-hQ1zSn;3Yyqr~ed@8YaPFBTB?T!_g?ft^eY1Y-yQcCs9ey zSCEpGvru}(q*?Yyr^AZ*He*l--OiM?YqZfrT<= z7KnHjrF=MSuozG)$tYT6exsXXjl>)*{>tk4AzVsb{(DYLYJ=%r?7c{$8M~BQmE^7d zX*{pP%*#jd`*-Z!oy74xF{vky-rn9hjv}^AgM;|2dX2~P8$l2cQ!qtvTLLPJB8xf- z-}3X-gVjn7Vq#%Y(cq%OLiJyf0z$yW$kvvUXsu<^ZmXCf|B-Ff@!7xg)-xK`Gs|`E za;k-Zy`Jq5Fn@gP1#~vRn+w9ue zcg)u6lJBx%J|mp*;P^+W-vd;GwA-#Vyk=E?Y;PXhX4SLpe(U|$9>dQ&lvpkNAEO$- z(lqw0o-feg!=-FGonxQdafQNHTFwH*r5X~u6~BX;ktilRq?6#h2tOFCpjy!rldw7=?nV?A<@T%lqgQ?$v z!Z2#eNJm0?=^1TAi|17rjZ%nzQn z>99GU{l%fs)PHzPex5n+6p7B}YP`3FEk` zI;39}Q^`B0Gl>I4f^4ZBG6mGSyx&Q94tB>6{*G6neF?K#3f4VGD(yFaby@0Yyor>I za4mw z-rK>i^Lmj|cMoJR75*JO{Q5gyExE>|W><&nVJ+vzya>EOxwZFcjj1H&3k~huS;ZvR z^e}5aWhvq9-+g>~NAzV@k_+AIV+1aS-@Q)@%FX+Jcgub$?(JVj zZpLpB^B4Kzg{%^uvG10u%#|5s`uUzT*D+0IpJZOowxYp^^jehw^is06a0zJPVwaBlz_}o@BLI@GlL1=TNZ2`mqYAC$CcN^dEgqftoza7ayRysiD36hMs(eCk%X!z zg1*P*`xRY$avTk^zH-ebMChKb|5nJ`6_8b0jLIy{6%hR!K|wGytHk+SR0s;YWQ zR|)LFTAz)ZFOE%Hyk*n3THg!U&YLa?*|JpgozcJshTHYN=1^E2N!~mmCnDW+7V515 zB(4i5u_N7Go!{b(mIU+6!%4-`;ijdC*1lK=a~;MEX+?|`eH!s-HrBF9v0^&pT<_-0 z^|C)A-Nmoq_wR$2Mm+a3y3W7dlM(2CB^#?l)9k=BdfUfl9i}cqH7mWQgocTacIzutMxoTy2mC;=bMvNcg_fUqxT~!g7`iTIalB!Ep?7Wj-ho z7jC-C68AQ5tdy*SKz-JY-MSzLW3tNLEe1I0lz7KIXG;17!gCp~(cZ|E4n+97M@;+u zt%WUtooO@sfh(lI67cI_l`Ut$vI=7F2!5rDON|lNBUY#Kfy!&Z&rOfqw(tuMpk(Ex zmn6t~ddOUgo9AWXSn`thQ4kf&7p~4p3i~BeZ7Ey7k>|n0<2Lg!M_KH7k1OZ1(~Tpy zF+W~QxA$fQ8-8mF^RuhhPp^y~i(2|L$lIm&M>ma$-r-|oOsx8wVa!H=xO4-(_MHHP znax-*2_-M6TX}OszqkHl{zm6)hI!Z$AUL~(n*$-t=9t)3q%ie zwKJ!N^j4(1O`@m^(u#8W$VK!EmgM$E9*nb7^ojZQzp&pHDgIt9bX}x_Ou~(>>Zq3o zkG913BH5r(Y<=FL(yS){R92h*-R?okx$i+zMG9AftQU<~6kh$jI3E3ztj4#4@omOc z=GA4T(ZxOF{JgrF@7I;*@@p0J5a|@;GOAZy@iUzznQmX`uz{8?2TG52CgzdYt+x+f zGS1?O6`u!ED|N1|=osf(m=FqjRI;i$U97vScu9df;}KW&=U%5k$I8sW6?>{LLVGRO z1_`uDZO!)HQ~3cC9nU%H{1$0zW#-pF{Vov-HC@1qh^PHJh>3JA`Qs@WK?Fj=9ig|X zVB4Lh#g1|%SOgJWz_TPPCR3udw%C0Jw@hE4hRh8K&)1C=Mt$dVxsr)WT;BB)iHU98 zSgy!sx|g(S?ujB`k4n4JZV(G!HApo5T{qb=vnnQ+KxmuxWZospkLS!nW}~eGvvKJ& zE~@lot_+~F;p?iTuQz$mC~5e8{R|`X7En(yKaFX;@_XB|w{E9Ay3R{28-LYTIzK+2 z9Od_gr_fK&93%hvk^<^0ZxoQg_Iwaq>8=eMcE`e|II_PfUszN=Ne zvL*$^c&i*BJGj##@cnsSeWis(0}LFz(CaFj)&1Dmd$;!Opo#A?K~)=+yZEpAB^Dhy z3rp`!-76u%hB#>-qE=F7WvlFWdrR414bZS}Cnsr#6d$GkBnNAVG8FErD4>2sa}Mj% zt(@)1l6K$d;TiY2b`q7?XQzG|4Hfao_krMH@N9eJK8VEzD~3`~FrTk6+&+1r$nwSzn2l7=>PM@#}Abrkcw zeMR}-OheW~Lmsc=$=d@Wri^CXb2fGu%WGrm+q@lyhZ(<>Ru*)AiNT?Iizz>2g(cm zs=F)x)E>4$F8ErD_sJtpCj-i9e^&;G#gzW|6VaD5p6NaG^sW7N?=Q_hPBtU40LzbT zijYejdWYf01dA`jv856VS;CBp&GHjY+_%a*x6m*A`9*J@y34&rGypWOcjc!6i&%>VTY3mD{{jR5-HI8HpFo)NS}SnzrqcLj8(QQfuI%k;-9IDK=aiUYrsMt=kAm-wn&Df5?p|9iBOH?Z-2X(| z1=Q=x&-n)?Tb6>ntcq#&;;TVsuls}(xeJP7O%K<4*`GoH&d$hh%iGTesRg%$e7KNUY|)!@m>V?(^(}(wTD?_6JJ#hRyE-sM1cK&%zwVTN6?V*2y{O z^Ac?&J?Z7{E2#kW~MU0$;2|Oc@1dRbQ~@nI$cNZF)y_X>S-Gurv&y+#TuA%k`%G z_QKHcewi8|IM3q(BD6ji*>%2I%uKwyPbqw|-R(-Dgb4sbn>t%B6^M zBq3**6K$RH9nktfO8LrHGa8?sRQ>L9NYe3-o>pi~HELWiT>P`X1Ljg(LrKjn{&L2* zUiJuZRC(+DgmWl{K#q~`Hlv(c`JJn*&4TFFp})rmS;atFTNSLSd3K7{ST!|VYkSmU zq-B?Q`4L9_Oq?LL+P-Cc-@z25q&^a?BvfI_>wUoNcT7XB2Mx7h{_5TNY)n%1CT(p_ z4)`S9HajIu)}X_{z-n}zdm=aE1u6)gP8$N9a~4e#6p`xmU@176jxz@XqMV0`k-?_Bse1{MFrN%=vz-YFo&V&i*_iy?pO}ifUUmj- zR{9~sttD@dn^YT0ls)MiA4|NJrodaBkJ36Nu&IdKIy?D7buguihRkyC-h_!UDC-F` zbq4Rt`A3vB?e_?K!Gy2VzMeaA=be(34uyowszW&uH7;1Ixz?!;!B+3C6HERZzkdc- ziHxOWGJBYWthMzI@7AFs1C-!KTL6Qqx}SGA?u3g?@#BFjjm;`Zp8LrC=T93G!>ZSH z2$B#X#XRc;+NM+7Zg;tpU~bTXc_|%Y?oD}F`NaHu(UmU$l0AzLga5$>YKV2#PqDTf zI<=~I{mbrqfA8lprTw6BAvD7A!_0r2V83jhP^GJQ>Zu}t&6%K4=qwM|IV|2>E0lM+ ziH}5bf@RnS5_QVVaLVTnN7^b*(=qM@Lo_^`e9QJpl&8lUgeJy01dpm-ke2+^bIWnL z2pG{*2;E0vt`B;TpY9Lb2WzBE=Qq$PKk#~(&l#3?ly7IN&zU&BtdZU=`S3e;?xQUi z*wxNJyDwkme;G2D8s-27d_J`d=BZH^s9U$$RAI>Pu{1T#7)hHwM^xMAbnJSM)IppI zEJ)osRxAN?RwPp)56>nmhtF(hHt^-h=}*v*VIp|%4a)5&GOOvswO8Oih!5oL!`{?| zXHq^p$Kut8STO2-Ei(t-Ex|Dz-X$J#R&Q5}H()YHq6x#CJWByJQD8kB;H0NQKlDty zxXd%caM!JpFU0bH4I%b>er~qv$i-q`&NOm3OE9!wnr%vRsEAdvkO?`ljBp!X^w+pp z+ZNoRJvhL_VJg1*k@Vj2|6KBvT_mM!j13DZ7Tud5NhFWZbLLr|~N z;(b1ESY*j{f9Q5Xo1sYcBn;r7F0dlqpc$t0hb@F)IA(sd7cyiX$*?4QKbrCf%A

z~EACsj-)9@?whhQ7t{2SK8lTQgP)uy8}1TdIg?L+Kp_r-bG12y`cK_)z_1}W7mtO z|In!(&VQLPw7*OQw%eSx-=Sr2`)C>*zkGME+O~sto<` zZV> zbSsgB__*s*Yez~DMMrART$Ik2O4?B$y(RjxM-!n2x4yI!FNp`MIP(bAx~h1)%&tcu zI>W9y+r{soBaTZ2uB&YUl06ZU?P+KShL-i$@i@3qE;*8+3rD$=t0xghItVp3iaV<^-cMI+mcL`1@#i6(rcPqu+i+chgIrH}Y&bQY2P# zu90*XMRy4-n-PwUGX~L3ki&y`YSkYC2zkXT)=-27l@jpPnjWu??KX~xFE!aEQ3v@u zmntOAMJyF@2Y*XsTw_dr%9hI=`>|+S@`bWBjHk$}8BIQl6{!gM_$=7Z?RZ*nTCvX6-C7F+l zOmaG`ndp3sYMqM0hd)Sj*yXR&9?^8l;=y+~Gm`j%8!S{GhFoa%sM>HbaV`adBZ*C* zJ#po#=W`13CqH58LCn3MXW$jm!CR=bu5ahVV}YjTFvULE(Xd zGb6e^_W~Dd=>?A}I7zHIZAEG<7xEl9xTWA#7}Pw2Rif`J~WWnJjwqhUhF?-#HnjCMT<%m zxL}03JwM@h1M~fLo$>3d2?6f(gHDn2z4bJ^@uhuBK4ig!*q!^xMwvB0j5=?Bm5HUM z*eqDXvcH-zj{1gkCO3)K(eDXRPR&X@9KyZkdeuUZSwblLONz=l<3Z z$qu{RNds!scA!-F(Ejf$TMo=L&rYSV?eOWl&=&I#p6yqPGe~=yUD-HECY;j8me2B%X=Zh90Ix?2H zCMjbm7;?XDig%ZmO4%1gF4?zlcxC$w-(bxB_I5q}4|Y zX8kCc>PP@|=d+p?jV5|O0*jt1kL+IoO`_S2g`9_qtzO#E@KdP2{@g!Lq!5h!wAMk| zeL|QO@c`gk2`fG~*ju4M!8poEJbxqT^2JsXy(sOmVa+|dh*ynNPvVPE%~{!ItvUtK z!61GkmQCcv2+diuoa*LuFt?kK^WLz^=(aMaYJ@i{i-$A}f9j#!oO@n?l!#dpv@;$n z<~{O6tm9R)u%!T7j^NNV4(28m71G4nhHHEL_vfYU?gZK5l&s~A`xADLm+@=j+XB~_ z*rLAIYslc`p~F#KCJ#1{1ikO)k>dxZ=^1Qv*KrbJDol)#bvVMCF@1D~yevHcUh1ZquBvpv?q2BE-H9Fiu3)Jf5Rl0) zLQVaKnW{1wF(X5^-BdWDVv%*Z^V`( z6pbjuNt|TstQ4X%a?1@CASvV4t$aF`CDxBPx`<%=;uIm=K2yirmlA>RStwipn;Ef~ zDyTx$xSgHealU{m)$QFi@0sFUsV)j_JaGi1*wMlY1w&i8|16m--al!}&fI#3-Tx8x z;b3k^y3x)4rDs}uO9MyNw15iLpfGT&ZS?yz=n{aI)Tslf=3LVO!*2E-5zhd;-10$0iI6eHs zmIL$qgx3sZPbOd3ldf9mHV3;mpMwz^}B5ub-|{l3HDGhA(_ z$$$iCTTN@rt@krsu5A>=|d9^bI>a3O>Qoc|GUS zj)cJE7ilP$d6CYpJHwD-jV;Xh7Z#(a#9m4ZV0ShbDPuZ7SBNR0vo9zLUTtTuzT3VM zVo)ryY)J;BI%ajIAVDULla9k@R7+2`8|K!Wc~7^8w1hrfc{U&Pf7~vhU)hG+=Ztavh3=|y4x76E?zkv zMAO80J#3I{$UZ#r=M*j#F!`1>GGDAX6QDlQ#=unD0@SRVr#i8yZ(rM zs9u2|506qX!@ug~x4~oABbL2MFGB=dy)K^(<~YT_K-)o8tu>y$H}3&N!u&m{G1S5) zS7|SL05D#EzR-uVu3+dUN8Aa&n|3aAFbDl|d`kPlO}*Jglb%irWz}+SFqATfe{ZY3 z^HFWM6}^=A=wMEoiMR1S!FFo;TqJS<7P|~A44P*!6oljoBrm=~mJb|s9spr`dapF8 z({v!K$Le*$3%YO<=gE?2SD#{1_AcGPG2`GtUBh7lvG^+7FR4=LqqwGBP8Q&4#z2RbUX<~FnZ`&LbWAdL&7Tel>@gOdZLrsH2D4Ajekye_ZZIp>E(iL$qIVa+RXI@=IDIL`;$c9Y z9Z-ZbPxtPmC>+@oUy}Ck>h}t}ceZlrrwor(uKUzOypN1m7`Ltw{AMhyG3GvvS}v;l z$FrZW3rH9;am|o41mu;r=t|AbeOa@}M90RZP>WFaBS+~)&e!@=gIZ0FOr-5%($cHg zTe9?uobrXzRYIQlBxrn3`it<%!@k!Jk33W@I~aYl#CZ?LzL8*0V1CmZj*|AZ>+@pv zGhe9mS({B|vi-|n;W-$pVHB zgz`!!@!)p_{$ZcpxID7&)&JGz5aXa`te(Xc)%;uk`R`aTz%yI6totui1lRx1P;t~t z?|+bHsr`ex{}DQldWoqBK+E{6GRnDs*Q5XKRq^!bzs}T&yzjpMFWb9GfE@&T#3%kG z@Ba&s4ZNoa3*ee(f^((+N8}oSH64K+OsqdC+WuP`|L<7$fedhjS9zrqf9c-;zMYy5 z*nzMo7N^&LJNUmZ{{L|b2K5UpVNTT9{rGQ8jtxYMWP-hG?PgNzlx>WRvfq{K$VX8~ zvCnpDm8uQZSPaa_o0jX0Ssv|gXtsF@>ce`}14o8Apy+IR!oX*InJU9rc*ekw$adsH zfy4A#1RQ3+HOD*=R)x8=y!{nEL4o>@>8$k_%}Av&csP=jeS(78;9n$NpFXf@(arFw zHB6_!I?w@e$jWK-HSg+ZMJ%iV3d|s;(y*%}B&rK5vBd6|)8Oqpt%quPB^+$Mpf}t31yENBR4yf^RMXpb*u&hrY5qm0{U(XiOObCR)zQKIo;!a)il2k;+yIXkdWxhgyYRK+I1mh<-c;KP zc$i||oQQPFlUt}`X!8c`V)wph=GjfL#rU@}@AJ=hVvqQ>szHO2jo^WQ_6Z#F54J54 zi4*yj#|~O*S}>l~_!i1PE$8`5Jeo{&>@?(2yFq13LEQFm5?o|KxCqu(OpECaZpYL_MA9|#f z#P8C^ym?6n$;aabFY2|ypB77st@+WPyM5p_1@sp23J7vYTgy8yscrQW6ai~%!E#wVoxgl; zCblK6F4Cyk8E3^;-HhQrp->U65hN{Lx;+6gZR))EI^mMSr4xTaK0K@>m%IXC*O7d* zUzxFr%Z!?ZG#frx!7e9OYP~K~T@`;3$%Px1h_p;-6PKZ0&sB``de+3=mivC=RI* z(n)gQ;NWz?>I}l#ye^fqba*X+XGg1v-1b__1EGV}_N-s!cpk`q0PIe)Zd7Mnjd>X1 zd}O`Tk_>A9I7LkRO6%=>BPv+oCz!`SU5wZikCjncnjS7-+B*@Nx^b0rwT%Uq#zY(q z*vLW}p)M$sTS%i~<@Jf3k-*dJcwUn8ys=UYEOq ze$Ho;OlR*s^mA6vNe%c1G_L<>=hwYUg;VWqyV249I{z^HTz6ceG(t5~M4QT{ho4&7 zl-`@o^-IK+YG=@O$KQJw3dtZ@7#J{+w;I-p8x9IJWy+g_2D~9Xn6GJ%k*%NCuX->v z@!x@bnQ;2yKAD47q%-D{FD^4m+s>-dVQ>>GiRg6&vr1cvK5Rzw#b?>K=qRV~$b6jS zu<}8!{wFksJhI zd})5zmazSiqa8udgsRkfGh%MdK6yG!T=~3%32jU+i2TXmx9_q8(R4$Ft)89!x-_!9 zHgr!+zCRPZgn*9|_Hx1c()Yg7VDAzq3x$AOYbCGE?Zra}l@c3{{d`TcD7E3K{H?yS zVV~`MtRlOle&?PsG^>ZZ*s_ywll1FhVTGwvKRb{GN9gJZ;o8y9YITeOSk+sXG zcb0P1l*g^}umsWQLH1FWWOmR^ zrU_o7>l0zLdOR}IJz%=m(Zj6aUQ;i34B!i?c1i@QG+-76-+A=+ z1e)<)LP}vIkSwN7WljGC*`6owPuIXBqm1wjc(o`jUw))vj`h4JObOnsY!$s{h^mtf zWjgr0L;;5}D8VJL@IA4fN5r_fD#1G;I93tXZ{VHQQ!E8wVM*H@dCt^6~Ox}Z{$fj3ZX0Jw{irAj6K3pv0 zRSmLBD|`*TB-iXTF&;|j`6FzIgyG>)OkgGl>+~^aLpSCRa5696GynPx_C(Ij9&Rt# znBL^XsB2~%F>Cpz0vQb@Y8eqjokAA}%lxva)TM)|&hTw~C)+;9FLE7qziO>U2CMTu zl%&u%08J%U7BYTZHho)i( zmIjz-dmuqyMt?XLN0lwAVtjqu9khF=GrGJ~UfI^A&CJDr=)aWyN5Uk}>1Mvj$(r@L zCr(-vl}qe~Sj=wv^>bHS-Z*J^-m>4Rw3rt>g=XI}haWcy{H@56OtB4ypr zocGDua~&1keAWvs|L#xtQnIlPnTx|HLoFP=4 zKk7%XRXk1FROeeq+OLcnq|Mj6%|JRp+zx);vx3a9F;zZa9msrFS#RQI#n8NUlV!P@ zhBq}=7ptqd^1NX?QH3w)V(E$UuDzFAYMtQ6nKT_hpbd`~PEO(WIg@R>xbnr>2~Qya zk-^4785UjT@07f4vzsq$=scp95~D!D{sL*zdO*uNxsdXo8`ZIss1V4}lZ zw0a;*0iZZ^F#X05q_7W6hZFNtz9(1K1{*C^2?0li3hxkEv1pN=*|-!zu7xK}Z?bxK zMBuQ@kCn+Di95O`2SFZ{viAXS*h3sX==SHAf#FCkCAcFCbfdc4 z`ly9uz$07eVdYjD6})QJ<|977uxIp$O6m>~0jge~y1Q6oSBfhJRwtZHB83s}8y6u1~YRJ2)1%tL$ACNnKIUl>f@`zyBOeJNmP$ zQ@&;xw6xx4@=0Qz%(*&0A-LPo8sisOJb%8$4G*?6Cn^L+n47igE0ghCv&s7yd3KDZ zBdFLgDu$HV3&g)jI6*{`wJh`Z29itJsQ6L;=q~>uAD(+9450@pUHDC`ttXL(9DfLL zkEJG8?U?(j@y0Vm&I4K2b z3WqD)tT<7-X<~0{LoamiT`6hr5{qtcjlVr15yp5rs^1+<%HJY^wo$YN-$)|p;JbKP$e`kMvV@n07Rnk0JL=9c9$I!44|b=fucDV zkPDH}dfH-~n+bQFpD6`9r)KXl-X8m80CxSr6*+2+rsPk#Y;{W%6kubZa^lw^#KdsU zs)xi4voAW-pJ3w^PT%x*uBySvqN0AC#mPR%2e_@32Tn*44f1z>SK~`ELF=^<38@L4 zcsci(1dxJ>O=#$uxZCk_>VFGab{@H|{V+@8|$?9e>ZzAVufF>O#pI7udmow%*j;QhmnBhDusx{CLg_ zY=RSQrY)}Dd5)+te7Qt1zIv&=rU^z*QjSgY89O9hTCTd$1JX7i^axr1rjK)w{_B-U zh93@dG$O3HFs2oy<9D2Po31%%p!&rlmsEQN7?qk570mgF@F&nIkV-?Yn7 z3&E0XiQ@_Sb?aqUe?VH&ls6+@aNitBe-nR_EiC$6ldW)4>bN)FubV<6SLuI@zSquX zgl&XF#^n0(Ce#y_PN`7oeKJc!6M~NuF|1IpMrBRB*`V`M9xH6>YW{3+r-zEa&9h%5 z*yo{9-U}MMj$?~!PuXuKok~PSoZ?Q0NK4Ju2B^^(uS{4+ujnOw-?^W_S*~hf(w1j0 zx1K%QI-t~|dT{Umrw$!W$t#R2d0XCGEY5+3!%k`mjd0?O@qYnY>DT?PXQ%Ux|2Sze zXL6jfRb8baMgf*QHjhv8Uc+gA!d*FxgaK$~p!f$qIv% z+7?ok^$UpRQQ`U@h7VUu*Hsvhf>Ny8QD;!Qp)x;`3A9b`#qMu=eEKEnc{(x98>90* zgaf-jRVF|0+FXS(k-UT`xYD$W(7Y~NK>l}ymazPkQDkB3cT%a_K#(qnu3GNR`b0DZ znAOkQ)K&*oi!6In(G{j1RZw`=Gyg(^BV0bc#twnW9}gEo;l2n1Su{M8OaOuJkBO`` z_ok&0@CAQFD$1P7`DWivemK4Qv%6!Tgx8>o+=bPy3TubOs# zNU4D7nsvLwtlPGl@es(F7HDil`bWYO8gJpqc%Kmm%J@izUw69H;Ta~K&%#LU#`GXM z?ehpj!5pqNuNCNwn`=pWH8p@8g|;OjF72fGLzT0x#SvS^|J6(oEPA`VIMw6j{&n73 zFQ!(4>hL&=N@t#g}}VsOLN$GL)C^A{8&c{Z6^wJ>4b_@03pErhEnnqano2~a-!BA z%#K&auA@gzPKWNB+56mB2k&3OZgF)sXJ!y*8Y9P;Gi>St-B^OP-r=b zwt<3MIl0Sv&0mxIu!o}{u?G9zznQYi{g`IxxO6iC>s}@&s6^EE?Z6SaacjS(P7(v| z{ZH%_5oZaswqNoRdDX(JSMMjn5F*?Lc~TPC>ic6wr}(Q1GN=bQ)BzKdz0c1eBwxOM zk~A8UZDb3vCP3PgTjk<+lAk-sqAAsL;M_=F+;bMbh*1pdOzg&8c+5o;Lp3^k0q7$` zN`Lah5Y{5rr0l3WLe2u*LnJg*gN5kRJ&3hfZGxo-kjT9!gLf(meQyWaeUZz6yEQ;q zM&an*OR!15khMoty{Eg21zBL^jcu_@QhU;cnLi%7mGp8}p*?xhm-?l%+Cf@GuomHb zbba~=V7K+&Aa>Gzai`|P3eR&a;`~lh2v5RmdORq+ax_JtL{fNAdY#_wk{sKRY6l8l zBd#$TG1W1m%kA#fwOIF?ul~+`kS0e6(!AzJcRYv`?P9N_h~2WUQzXc3XDkH^?j_6h ze1A9_>vUtWXei_zbt2!Vg&-ACnX(& zt*%OfUKNtGQBG}7P?)kY!6|vDKl!3l!Gzm0xsv%A^4`A2*^ioU)7ZGe7yBqY zrRMA%DqjTI2aFnI)ICWOIjb_gvbM6&YrRV4sp_iTngUBQF+=lE-Q+8uf$_CiR3pNH z)@D}BYIFT}PZ!h*SM)%mx>^`^7D6corVj{%;XKpIyxRwMiEL$a;kIeDbyWKnYjkmXiE! zv)U#q zA2&*5c-(ksT))rld0PKWJO`&|ZIj6TcpNhDg+X|0fu^kNQZ5*o{s`pyb zFOK$+xUL8X#>Cb@H5vntmtEvu*ZrUzY$|wVrW&F)O5^>OyU^REKqwoOL~nyI8f^nh zI$t`YkBh+5i{?+C!WjP4rg-o-8egVA(1FE^7~$+TeD`0UlLh=4gNm6Z;;Odvb1uGy z*3EKA)8+IcKm^I)3<{A|1(Eaj3<3o$U{oUcRWH2-bxLqYQ>!Z~xTH}l!3DPmTlL#Q zDSyv_@WMH}6dZNpN=CxncL-{eT5J5&iS@;iR9TB9M_tHf#p< zzKyAd+ZE6-y3@56$L!};V>%Ek@lyW2g#4NE?rVQ50$+M6|B1pUfi9QUZ?@ZSK}y=v z{2~H|mz&!I3@hxCgL`FQ@-C8UKG zsvDiRC&A_5VoU6=dKYll7EO)7PgCE^GDMBrt#cf~AdGDX!hs?uwltqh!yfj1=~9MQrOc-r@h-pA*DjI2D?f9~O+De1m?DB$ zWDR6XKrC3jh{kE8Khf{v-uF@FoSMFUO?U&2uZxnUS2|BQDM~Y$)*3%u9+D-<+`CzkVHlGu)LPK^W!KKv=X+r*9Qcto^ zLQ4c1w-GMRCGsn$(PZVh^H~?lQRu22YUYoS5w1o~)=OF9lU|~nvX~>TgZJ^BWTYhN z>BYBb2k#$&Xw-~mnWbXHx^UFky+@U4&Flk7<(lqn&e8F-E*LKCAI1D$Cwk28Xq+Ty zX>^)ND+47$W9?_oh*VfZA^&dO!EUlOUPHESapu})XIunVeogFR(hLGWGv1=6nl0oy zQfY(=#}4!F@+PZGV}MuN2bvn|8e19TSNkF!Gl-m169)Du#-aN?)$W-1gjgnkOZ1+J z!Kr2N*IXpH#Ido^cYkGI5<-lExI>Wk9f z_M#g<`;O#?P3;3^_8NvE`)={zC}YW-iBAgre1K0^{jIbalnRrzyr+FU6u* znHAVy87?$AX>koc+pv|oc!-nEJZ$xdkzAypDZ~AVvD%0bUumc$&zHf&R8IqU>bu@* zPP+`e&B#R^t$SA=+Z9tJzI#nv%hM!q7U<6Z!ri<$NV(lcXqr@lndv82Ja;frEbaR* zy{!-9_m(pyyk#E>4hu4tBl0}A@)Iz zv}Q)7$1Zg&N+*@-4VO|yz`+q@_IHcPf8gQlbxmv?1JW3B{a~Yy$}HbRXvLuvq$mkz{Hu#PXOX5xW+8iNaO^?ov@tQuV)GzUdB$H63C}PgI(`Ck zDe(2jgt-tSw9sqh2LYSwFxf(aaSO#k!CuAY9yA-!sHf!tPIl!_UJQ|XQt=nbl_8!= zo@rP_es4=u>51avZZ0P0#i{Qni(dA3O8LVV`zU)IJk`8EeZx5tyX($(-Uv00HQE>= z%dS2O!^vyc3)$2t@M*H$Nc0R5)_Mm`S9#*C|F;fat>k?FmZe=Ns~p6ax#atEdU9-d@onl?kLu~ zi)?-uCt)IhX&-WzB${<>495AMSv{WzEpkgalFZH+**~i@xo<4g98xe$-mDTE`T{N5 zW4=8z1^b!WEtRDBMt;VBS436+WsliGF~067-JtOUAAUTra&q`?pCw~X=IKg^r8<2Z z6pCvG^5NY&VffesiWtCS|JWq-=UGHS9~d7LGM6|;p#TaFNx6z$Ng_vdLWIhld`_HO#*~ncdi$EdS?*Z4Xa^6VL1{Z zZFN+rJv#q{!SU_5I${)O;f>5r8s~VcYAIWGc)*wJqpZ-awQM%43Y*Eo-F6SIZWzsu zj`xCuuAf5_f`Jp}GH}z+Xh}RQoDy`#kjwE3VR8IK{SEbwnf>=)6W&g#+~ahq{sJzn zxq``GU9`XJnS7EJbBpb+bd1KHkwI5~A{o+;M6Y||u$;cJD}vdX0{#LBwVl0&JuY?` zx56*dG;TZ)i12glZNU_$bokx%oZAJIbY_eK-CNv?)gHWA{#r`7-FLK{zWrb4zo*!i zTs;t!igfWq1JXTP;fj8QMhUNYRi=V}PSGQ`Y z%cZbZ841r;YNOp&w~)Vca^~eE5c9Q-{@y#7BBA1Q=3n{j{;{k5V!AiRYGg;f>dWfv zOwsZ}8qaXE#6eySk{iQ=*VmuO1fE6hxFKI&?SJV%+tWW^E{FEhI+T9nYc<*riHy^V z#1XRG=NLKju=4~g$ai{f*Ams<_CowltkR68T1Llj4ju11E}H=91E6$!8`?)SWYI;G zBuS4Cl60n%tSo6B=S5lbYn=9tn`IykM}5OC)i8KzCIQ@7Ne?94k6t@>b#u)}T?0X) z&lAlz>Xs(ydmEN(i0=z(OtSC0#~*VdYar46r47d2^!x|hQ^`L;)*e=fJxEp+?NDPjcj-Ll#FFHO6(TWUG*)je++Qp>FH>~%$463T-Hpc?}5yQ4ja=T zWl!p2z{7!pLaOxr8qFsCp!Vy*%sDS~jN(e0{EicDGok{q#fUEMnPTGK` z(KFvqbEZ=p7M#kz8UD7wi=LpIewDW47h_YOo`pOoNSVKzpTJd0Xxmf|>v;dbR;E{$ zDB+QI5_u^0$+6gC=N81Yuk3%YSX}rqH&4uY>*`UJa4Ua%J*86Lj}UE{=osY=Eu2z( z1uruyd2abUEd%X>jhLdtSao#^<%%op9jO%2baymD0bq_mkk z5~-9HD9|kK!SJrAmqWh~!p8hX?xWwV9ePhzXCY*dm_KcG-igaq0M%?XuaBfv3GkIl z-b<83h7}z+#2Li*IS2u4<^b-QqQ4%FVIHvz19Bnk+2LA~Q*fl)PnSVzP_U1UMaHPI zR5cTLmjaz@{)ZyPfqtjIFdGIBVl*JLQ$p^l@xY>!5-90Q-fJ#OTl@r1D=0&?M9jsL zo7A7v41Kq*eFsM!c^@$} zfgmP8DNEaVZxhv&6}+owkHP;m3#8SN>x95Z$a;OaiF@&Of|t6zI{bmma-d3S_1VUP zsw$q@eyEF+H$ez!|7;1pQ5JH2>OtOCH(hBX{w6@spEMSnyZ;L#sl`Hph*V+ULnZn2 zH`FQZ^hyC&$eo6%gAni$o?2H>+`m5U9>68zvEBCCcYFBjJlM7HicyOi;p!zF#P}(t z8dT3mwjw275H3@EbVaM<%n9Wa?-Wjd#(d|)(V|r%#V%R*0N~jne0>{{l_pXo=RbIF zsC-JrSk|oXL^#L@m{0tPui^Y=2ueYofrSX^*coh>h14R zKGh%AF!-uud{^qSr(~af^0KfKh)b?TrRO&B!PZKPcdPs-%i7a&8qQCN^?^)xL!9F| z3zZp95;YQ~B?~^lE&ng-F2fp^`T7p9#THUD3cKiO5O0YiHQo*vN&W3bwP;e0*{2UDekdY{&&@nSoj>0ewJtxe#!BmYwN?END;df}X`5Jk+l&@E@)6 zw#(~JU{R%QkUL54jbu%n*|5Xh{E*<+1ggnGuMLP1pV%0D`~AfUZceq82AtgcajUfc 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