From 1a4a11f2c044c63eaec74b8f6624e829e31aa88a Mon Sep 17 00:00:00 2001 From: sadarunnisa-sf Date: Mon, 16 Dec 2024 06:41:40 +0530 Subject: [PATCH 1/9] feat(plugins): jenkins plugin implemented ARC-101 --- app-config.yaml | 91 +- packages/app/package.json | 2 + .../app/src/components/catalog/EntityPage.tsx | 46 +- packages/backend/package.json | 15 +- packages/backend/src/index.ts | 5 + packages/backend/src/types.ts | 27 + plugins/access-validate-backend/README.md | 2 + plugins/access-validate-backend/src/plugin.ts | 10 +- .../src/service/router.ts | 10 +- plugins/access-validate-backend/tsconfig.json | 14 + .../.eslintrc.js | 1 + .../README.md | 16 + .../dev/index.ts | 9 + .../package.json | 52 + .../src/index.ts | 2 + .../src/plugin.ts | 78 ++ .../src/service/JenkinsReportsApi.ts | 109 ++ .../src/service/JenkinsReportsService.ts | 11 + .../src/service/jenkinsApi.ts | 375 +++++++ .../src/service/router.test.ts | 30 + .../src/service/router.ts | 123 +++ .../src/setupTests.ts | 1 + .../src/types.ts | 98 ++ plugins/jenkins-with-reporting/.eslintrc.js | 6 + plugins/jenkins-with-reporting/README.md | 15 + plugins/jenkins-with-reporting/dev/index.tsx | 15 + plugins/jenkins-with-reporting/package.json | 62 ++ .../src/api/JenkinsApi.ts | 320 ++++++ .../jenkins-with-reporting/src/api/index.ts | 19 + .../src/assets/JenkinsLogo.svg | 1 + .../src/assets/build-details.png | Bin 0 -> 25148 bytes .../src/assets/dynamic-columns.png | Bin 0 -> 218507 bytes .../src/assets/folder-results.png | Bin 0 -> 58657 bytes .../src/assets/jobrun-table.png | Bin 0 -> 184331 bytes .../src/assets/last-master-build.png | Bin 0 -> 18933 bytes .../BuildWithStepsPage/BuildReports.tsx | 51 + .../BuildWithStepsPage/BuildWithStepsPage.tsx | 202 ++++ .../components/BuildWithStepsPage/index.ts | 19 + .../lib/ActionOutput/ActionOutput.tsx | 65 ++ .../lib/ActionOutput/index.ts | 16 + .../BuildsPage/lib/CITable/CITable.tsx | 105 ++ .../BuildsPage/lib/CITable/columns.tsx | 286 ++++++ .../BuildsPage/lib/CITable/index.ts | 16 + .../BuildsPage/lib/CITable/presets.ts | 29 + .../lib/Status/JenkinsRunStatus.tsx | 78 ++ .../components/BuildsPage/lib/Status/index.ts | 16 + .../src/components/Cards/Cards.test.tsx | 91 ++ .../src/components/Cards/Cards.tsx | 121 +++ .../src/components/Cards/index.ts | 16 + .../components/JobRunsTable/JobRunsTable.tsx | 213 ++++ .../src/components/JobRunsTable/index.ts | 16 + .../src/components/Router.tsx | 67 ++ .../src/components/useAsyncPolling.ts | 37 + .../src/components/useBuildWithSteps.ts | 70 ++ .../src/components/useBuilds.ts | 95 ++ .../src/components/useJobRuns.ts | 70 ++ .../jenkins-with-reporting/src/constants.ts | 19 + plugins/jenkins-with-reporting/src/index.ts | 37 + .../jenkins-with-reporting/src/plugin.test.ts | 23 + plugins/jenkins-with-reporting/src/plugin.ts | 91 ++ .../jenkins-with-reporting/src/setupTests.ts | 17 + terraform/README.md | 90 +- terraform/data.tf | 14 + terraform/locals.tf | 17 + tsconfig.json | 10 +- yarn.lock | 971 +++++++++++++++++- 66 files changed, 4411 insertions(+), 122 deletions(-) create mode 100644 packages/backend/src/types.ts create mode 100644 plugins/access-validate-backend/tsconfig.json create mode 100644 plugins/jenkins-with-reporting-backend-backend/.eslintrc.js create mode 100644 plugins/jenkins-with-reporting-backend-backend/README.md create mode 100644 plugins/jenkins-with-reporting-backend-backend/dev/index.ts create mode 100644 plugins/jenkins-with-reporting-backend-backend/package.json create mode 100644 plugins/jenkins-with-reporting-backend-backend/src/index.ts create mode 100644 plugins/jenkins-with-reporting-backend-backend/src/plugin.ts create mode 100644 plugins/jenkins-with-reporting-backend-backend/src/service/JenkinsReportsApi.ts create mode 100644 plugins/jenkins-with-reporting-backend-backend/src/service/JenkinsReportsService.ts create mode 100644 plugins/jenkins-with-reporting-backend-backend/src/service/jenkinsApi.ts create mode 100644 plugins/jenkins-with-reporting-backend-backend/src/service/router.test.ts create mode 100644 plugins/jenkins-with-reporting-backend-backend/src/service/router.ts create mode 100644 plugins/jenkins-with-reporting-backend-backend/src/setupTests.ts create mode 100644 plugins/jenkins-with-reporting-backend-backend/src/types.ts create mode 100644 plugins/jenkins-with-reporting/.eslintrc.js create mode 100644 plugins/jenkins-with-reporting/README.md create mode 100644 plugins/jenkins-with-reporting/dev/index.tsx create mode 100644 plugins/jenkins-with-reporting/package.json create mode 100644 plugins/jenkins-with-reporting/src/api/JenkinsApi.ts create mode 100644 plugins/jenkins-with-reporting/src/api/index.ts create mode 100644 plugins/jenkins-with-reporting/src/assets/JenkinsLogo.svg create mode 100644 plugins/jenkins-with-reporting/src/assets/build-details.png create mode 100644 plugins/jenkins-with-reporting/src/assets/dynamic-columns.png create mode 100644 plugins/jenkins-with-reporting/src/assets/folder-results.png create mode 100644 plugins/jenkins-with-reporting/src/assets/jobrun-table.png create mode 100644 plugins/jenkins-with-reporting/src/assets/last-master-build.png create mode 100644 plugins/jenkins-with-reporting/src/components/BuildWithStepsPage/BuildReports.tsx create mode 100644 plugins/jenkins-with-reporting/src/components/BuildWithStepsPage/BuildWithStepsPage.tsx create mode 100644 plugins/jenkins-with-reporting/src/components/BuildWithStepsPage/index.ts create mode 100644 plugins/jenkins-with-reporting/src/components/BuildWithStepsPage/lib/ActionOutput/ActionOutput.tsx create mode 100644 plugins/jenkins-with-reporting/src/components/BuildWithStepsPage/lib/ActionOutput/index.ts create mode 100644 plugins/jenkins-with-reporting/src/components/BuildsPage/lib/CITable/CITable.tsx create mode 100644 plugins/jenkins-with-reporting/src/components/BuildsPage/lib/CITable/columns.tsx create mode 100644 plugins/jenkins-with-reporting/src/components/BuildsPage/lib/CITable/index.ts create mode 100644 plugins/jenkins-with-reporting/src/components/BuildsPage/lib/CITable/presets.ts create mode 100644 plugins/jenkins-with-reporting/src/components/BuildsPage/lib/Status/JenkinsRunStatus.tsx create mode 100644 plugins/jenkins-with-reporting/src/components/BuildsPage/lib/Status/index.ts create mode 100644 plugins/jenkins-with-reporting/src/components/Cards/Cards.test.tsx create mode 100644 plugins/jenkins-with-reporting/src/components/Cards/Cards.tsx create mode 100644 plugins/jenkins-with-reporting/src/components/Cards/index.ts create mode 100644 plugins/jenkins-with-reporting/src/components/JobRunsTable/JobRunsTable.tsx create mode 100644 plugins/jenkins-with-reporting/src/components/JobRunsTable/index.ts create mode 100644 plugins/jenkins-with-reporting/src/components/Router.tsx create mode 100644 plugins/jenkins-with-reporting/src/components/useAsyncPolling.ts create mode 100644 plugins/jenkins-with-reporting/src/components/useBuildWithSteps.ts create mode 100644 plugins/jenkins-with-reporting/src/components/useBuilds.ts create mode 100644 plugins/jenkins-with-reporting/src/components/useJobRuns.ts create mode 100644 plugins/jenkins-with-reporting/src/constants.ts create mode 100644 plugins/jenkins-with-reporting/src/index.ts create mode 100644 plugins/jenkins-with-reporting/src/plugin.test.ts create mode 100644 plugins/jenkins-with-reporting/src/plugin.ts create mode 100644 plugins/jenkins-with-reporting/src/setupTests.ts diff --git a/app-config.yaml b/app-config.yaml index c9e0825..56efeeb 100644 --- a/app-config.yaml +++ b/app-config.yaml @@ -16,13 +16,13 @@ backend: listen: port: 7007 csp: - connect-src: [ "'self'", 'http:', 'https:' ] - img-src: [ '*' ] + connect-src: ["'self'", 'http:', 'https:'] + img-src: ['*'] # Content-Security-Policy directives follow the Helmet format: https://helmetjs.github.io/#reference # Default Helmet Content-Security-Policy values can be removed by setting the key to false cors: origin: ${FRONTEND_BASE_URL} - methods: [ GET, POST, PUT, DELETE ] + methods: [GET, POST, PUT, DELETE] credentials: true database: # config options: https://node-postgres.com/api/client @@ -31,7 +31,8 @@ backend: host: ${POSTGRES_HOST} port: ${POSTGRES_PORT} user: ${POSTGRES_USER} - password: ${POSTGRES_PASSWORD} + password: + ${POSTGRES_PASSWORD} # https://node-postgres.com/features/ssl #ssl: require # see https://www.postgresql.org/docs/current/libpq-ssl.html Table 33.1. SSL Mode Descriptions (e.g. require) #ca: # if you have a CA file and want to verify it you can uncomment this section @@ -44,7 +45,7 @@ integrations: github: - host: github.com token: ${GITHUB_TOKEN} - orgs: [ sourcefuse ] + orgs: [sourcefuse] apps: - appId: ${INTEGRATION_GITHUB_APP_ID} webhookUrl: ${INTEGRATION_GITHUB_WEBHOOK_URL} @@ -114,9 +115,17 @@ proxy: '/sonarqube': target: https://sonarcloud.io/api allowedMethods: ['GET'] - auth: "${SONARCLOUD_TOKEN}:" + auth: '${SONARCLOUD_TOKEN}:' credentials: require +jenkins: + instances: + - name: default + baseUrl: ${JENKINS_BASEURL1} + username: ${JENKINS_USERNAME1} + projectCountLimit: ${JENKINS_PROJECTCOUNTLIMIT1} + apiKey: ${JENKINS_API_TOKEN1} + catalog: providers: githubOrg: @@ -145,164 +154,164 @@ catalog: # validateLocationsExist: true # optional boolean rules: - - allow: [ Component, System, API, Group, User, Resource, Location ] + - allow: [Component, System, API, Group, User, Resource, Location] locations: # Backstage example templates - type: url target: https://github.com/backstage/software-templates/blob/main/scaffolder-templates/react-ssr-template/template.yaml rules: - - allow: [ Template ] + - allow: [Template] - type: url target: https://github.com/backstage/software-templates/blob/main/scaffolder-templates/docs-template/template.yaml rules: - - allow: [ Template ] + - allow: [Template] - type: url target: https://github.com/backstage/software-templates/blob/main/scaffolder-templates/create-react-app/template.yaml rules: - - allow: [ Template ] + - allow: [Template] - type: url target: https://github.com/sourcefuse/sf-software-templates/blob/main/scaffolder-templates/microservice-repo-bootstrap/template.yaml rules: - - allow: [ Template ] + - allow: [Template] - type: url target: https://github.com/sourcefuse/typescript-lambda-boilerplate/blob/main/templates/api-gw-lambda.yaml rules: - - allow: [ Template ] + - allow: [Template] - type: url target: https://github.com/sourcefuse/arc-mono-repo-infra-template/blob/main/templates/template.yaml rules: - - allow: [ Template ] + - allow: [Template] - type: url target: https://github.com/sourcefuse/terraform-aws-arc-cloudfront/blob/main/catalog-info.yaml rules: - - allow: [ Component ] - tags: [ Backend ] + - allow: [Component] + tags: [Backend] - type: url target: https://github.com/sourcefuse/terraform-k8s-app/blob/main/catalog-info.yaml rules: - - allow: [ Component ] - tags: [ Backend ] + - allow: [Component] + tags: [Backend] - type: url target: https://github.com/sourcefuse/terraform-aws-arc-db/blob/main/catalog-info.yaml rules: - - allow: [ Component ] + - allow: [Component] - type: url target: https://github.com/sourcefuse/terraform-aws-arc-tags/blob/main/catalog-info.yaml rules: - - allow: [ Component ] + - allow: [Component] - type: url target: https://github.com/sourcefuse/terraform-sourceloop-apps/blob/main/catalog-info.yml rules: - - allow: [ Component ] + - allow: [Component] - type: url target: https://github.com/sourcefuse/terraform-aws-arc-cloudfront/blob/main/catalog-info.yaml rules: - - allow: [ Component ] + - allow: [Component] - type: url target: https://github.com/sourcefuse/terraform-aws-arc-ecs/blob/main/catalog-info.yaml rules: - - allow: [ Component ] + - allow: [Component] - type: url target: https://github.com/sourcefuse/terraform-aws-arc-network/blob/main/catalog-info.yml rules: - - allow: [ Component ] + - allow: [Component] - type: url target: https://github.com/sourcefuse/terraform-aws-arc-eks/blob/main/catalog-info.yml rules: - - allow: [ Component ] + - allow: [Component] - type: url target: https://github.com/sourcefuse/terraform-aws-arc-bootstrap/blob/main/catalog-info.yml rules: - - allow: [ Component ] + - allow: [Component] - type: url target: https://github.com/sourcefuse/terraform-aws-arc-cloud-custodian/blob/main/catalog-info.yml rules: - - allow: [ Component ] + - allow: [Component] - type: url target: https://github.com/sourcefuse/terraform-aws-arc-opensearch/blob/main/catalog-info.yml rules: - - allow: [ Component ] + - allow: [Component] - type: url target: https://github.com/sourcefuse/loopback4-vault/blob/master/catalog-info.yaml rules: - - allow: [ Component ] + - allow: [Component] - type: url target: https://github.com/sourcefuse/loopback4-s3/blob/master/catalog-info.yaml rules: - - allow: [ Component ] + - allow: [Component] - type: url target: https://github.com/sourcefuse/loopback4-audit-log/blob/master/catalog-info.yaml rules: - - allow: [ Component ] + - allow: [Component] - type: url target: https://github.com/sourcefuse/loopback4-notifications/blob/master/catalog-info.yaml rules: - - allow: [ Component ] + - allow: [Component] - type: url target: https://github.com/sourcefuse/loopback4-helmet/blob/master/catalog-info.yaml rules: - - allow: [ Component ] + - allow: [Component] - type: url target: https://github.com/sourcefuse/loopback4-soft-delete/blob/master/catalog-info.yaml rules: - - allow: [ Component ] + - allow: [Component] - type: url target: https://github.com/sourcefuse/loopback4-kafka-client/blob/master/catalog-info.yaml rules: - - allow: [ Component ] + - allow: [Component] - type: url target: https://github.com/sourcefuse/loopback4-ratelimiter/blob/master/catalog-info.yaml rules: - - allow: [ Component ] + - allow: [Component] - type: url target: https://github.com/sourcefuse/loopback4-authorization/blob/master/catalog-info.yaml rules: - - allow: [ Component ] + - allow: [Component] - type: url target: https://github.com/sourcefuse/loopback4-authentication/blob/master/catalog-info.yaml rules: - - allow: [ Component ] + - allow: [Component] - type: url target: https://github.com/sourcefuse/telemed-app-ui/blob/main/template.yaml rules: - - allow: [ Template ] + - allow: [Template] - type: url target: https://github.com/sourcefuse/telemed-app-api/blob/main/template.yaml rules: - - allow: [ Template ] + - allow: [Template] # kubernetes: - # see https://backstage.io/docs/features/kubernetes/configuration for kubernetes configuration options +# see https://backstage.io/docs/features/kubernetes/configuration for kubernetes configuration options # see https://backstage.io/docs/permissions/getting-started for more on the permission framework ## setting this to `false` will disable permissions permission: - enabled: true + enabled: false diff --git a/packages/app/package.json b/packages/app/package.json index 1cd7539..a765365 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -21,6 +21,7 @@ "dependencies": { "@backstage-community/plugin-github-actions": "^0.6.16", "@backstage-community/plugin-github-pull-requests-board": "^0.2.1", + "@backstage-community/plugin-jenkins": "^0.12.1", "@backstage-community/plugin-sonarqube": "^0.8.0", "@backstage-community/plugin-tech-radar": "^0.7.4", "@backstage/app-defaults": "^1.5.11", @@ -47,6 +48,7 @@ "@backstage/plugin-techdocs-react": "^1.2.8", "@backstage/plugin-user-settings": "^0.8.12", "@backstage/theme": "^0.5.7", + "@internal/backstage-plugin-jenkins-with-reporting": "^0.1.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@roadiehq/backstage-plugin-github-pull-requests": "^2.5.14", diff --git a/packages/app/src/components/catalog/EntityPage.tsx b/packages/app/src/components/catalog/EntityPage.tsx index 7075373..e023e4e 100644 --- a/packages/app/src/components/catalog/EntityPage.tsx +++ b/packages/app/src/components/catalog/EntityPage.tsx @@ -59,7 +59,11 @@ import { EntityGithubPullRequestsContent, EntityGithubPullRequestsOverviewCard, } from '@roadiehq/backstage-plugin-github-pull-requests'; -import { SnykOverview, EntitySnykContent, isSnykAvailable } from 'backstage-plugin-snyk'; +import { + SnykOverview, + EntitySnykContent, + isSnykAvailable, +} from 'backstage-plugin-snyk'; import { EntitySonarQubeCard } from '@backstage-community/plugin-sonarqube'; import { @@ -67,6 +71,12 @@ import { isKubernetesAvailable, } from '@backstage/plugin-kubernetes'; +import { + EntityJenkinsContent, + EntityLatestJenkinsRunCard, + isJenkinsAvailable, +} from '@internal/backstage-plugin-jenkins-with-reporting'; + const techdocsContent = ( @@ -79,7 +89,6 @@ const cicdContent = ( // This is an example of how you can implement your company's logic in entity page. // You can for example enforce that all components of type 'service' should use GitHubActions - - - + + @@ -130,6 +139,14 @@ const entityWarningContent = ( + + + + + ); @@ -173,6 +190,14 @@ const serviceEntityPage = ( {cicdContent} + + + + + + + + @@ -184,7 +209,6 @@ const serviceEntityPage = ( - - - + + ); @@ -234,6 +258,14 @@ const websiteEntityPage = ( {cicdContent} + + + + + + + + diff --git a/packages/backend/package.json b/packages/backend/package.json index c511531..c8a1704 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -7,6 +7,9 @@ "backstage": { "role": "backend" }, + "engines": { + "node": "18 || 20" + }, "scripts": { "start": "backstage-cli package start", "build": "backstage-cli package build", @@ -18,6 +21,7 @@ "test:ci": "backstage-cli package test --coverage" }, "dependencies": { + "@backstage-community/plugin-jenkins-backend": "^0.6.2", "@backstage/backend-common": "^0.25.0", "@backstage/backend-defaults": "^0.5.0", "@backstage/backend-plugin-api": "^1.0.0", @@ -50,6 +54,7 @@ "@backstage/plugin-techdocs-backend": "^1.10.13", "@gitbeaker/node": "^34.6.0", "@internal/backstage-plugin-access-validate-backend": "^0.1.0", + "@internal/backstage-plugin-jenkins-with-reporting-backend-backend": "^0.1.0", "@internal/plugin-validate-access-backend": "^0.1.0", "@octokit/rest": "^18.5.3", "@sourceloop/cli": "^7.1.4", @@ -60,22 +65,22 @@ "express-promise-router": "^4.1.0", "inversify": "^6.0.1", "knex": "^0.21.6", + "lodash": "4.17.21", "node-gyp": "^10.0.0", + "octokit": "^3.0.0", "pg": "^8.11.3", "winston": "^3.2.1", "workerpool": "^6.2.1", - "yeoman-environment": "^3.9.1", - "octokit": "^3.0.0", - "lodash": "4.17.21" + "yeoman-environment": "^3.9.1" }, "devDependencies": { "@backstage/cli": "^0.27.1", "@types/dockerode": "^3.3.0", "@types/express": "^4.17.6", "@types/express-serve-static-core": "^4.17.5", + "@types/lodash": "4.17.12", "@types/luxon": "^2.0.4", - "@types/workerpool": "^6.1.0", - "@types/lodash": "4.17.12" + "@types/workerpool": "^6.1.0" }, "files": [ "dist" diff --git a/packages/backend/src/index.ts b/packages/backend/src/index.ts index 4e1158f..f9cce33 100644 --- a/packages/backend/src/index.ts +++ b/packages/backend/src/index.ts @@ -60,4 +60,9 @@ backend.add(import('@backstage/plugin-scaffolder-backend-module-github')); backend.add(import('@backstage/plugin-scaffolder-backend/alpha')); backend.add(scaffolderModuleCustomExtensions); +backend.add(import('@backstage-community/plugin-jenkins-backend')); + +backend.add( + import('@internal/backstage-plugin-jenkins-with-reporting-backend-backend'), +); backend.start(); diff --git a/packages/backend/src/types.ts b/packages/backend/src/types.ts new file mode 100644 index 0000000..9e85a30 --- /dev/null +++ b/packages/backend/src/types.ts @@ -0,0 +1,27 @@ +import { Logger } from 'winston'; +import { Config } from '@backstage/config'; +import { + PluginCacheManager, + PluginDatabaseManager, + PluginEndpointDiscovery, + TokenManager, + // UrlReader, +} from '@backstage/backend-common'; +import { PluginTaskScheduler } from '@backstage/backend-tasks'; +import { PermissionEvaluator } from '@backstage/plugin-permission-common'; +import { IdentityApi } from '@backstage/plugin-auth-node'; +import { UrlReaderService } from '@backstage/backend-plugin-api'; + +export type PluginEnvironment = { + reader: UrlReaderService; + logger: Logger; + database: PluginDatabaseManager; + cache: PluginCacheManager; + config: Config; + // reader: UrlReader; + discovery: PluginEndpointDiscovery; + tokenManager: TokenManager; + scheduler: PluginTaskScheduler; + permissions: PermissionEvaluator; + identity: IdentityApi; +}; diff --git a/plugins/access-validate-backend/README.md b/plugins/access-validate-backend/README.md index 70f7951..7d1b3fa 100644 --- a/plugins/access-validate-backend/README.md +++ b/plugins/access-validate-backend/README.md @@ -4,6 +4,8 @@ Welcome to the access-validate backend plugin! _This plugin was created through the Backstage CLI_ +This plugin is created to check permission of the logged in user for scaffoldin. Created route '/validateuser' for the same. + ## Getting started Your plugin has been added to the example app in this repository, meaning you'll be able to access it by running `yarn diff --git a/plugins/access-validate-backend/src/plugin.ts b/plugins/access-validate-backend/src/plugin.ts index 0e3117e..3b63e40 100644 --- a/plugins/access-validate-backend/src/plugin.ts +++ b/plugins/access-validate-backend/src/plugin.ts @@ -18,11 +18,7 @@ export const accessValidatePlugin = createBackendPlugin({ logger: coreServices.logger, config: coreServices.rootConfig, }, - async init({ - httpRouter, - logger, - config, - }) { + async init({ httpRouter, logger, config }) { httpRouter.use( await createRouter({ logger, @@ -34,8 +30,8 @@ export const accessValidatePlugin = createBackendPlugin({ allow: 'unauthenticated', }); httpRouter.addAuthPolicy({ - path: "/validateuser", - allow: "unauthenticated" + path: '/validateuser', + allow: 'unauthenticated', }); }, }); diff --git a/plugins/access-validate-backend/src/service/router.ts b/plugins/access-validate-backend/src/service/router.ts index ff9a414..0a22ccb 100644 --- a/plugins/access-validate-backend/src/service/router.ts +++ b/plugins/access-validate-backend/src/service/router.ts @@ -1,11 +1,13 @@ import { MiddlewareFactory } from '@backstage/backend-defaults/rootHttpRouter'; -import { LoggerService, RootConfigService } from '@backstage/backend-plugin-api'; +import { + LoggerService, + RootConfigService, +} from '@backstage/backend-plugin-api'; import express from 'express'; import Router from 'express-promise-router'; import { isUserAllowed } from './validateRepositoryManager'; import * as jose from 'jose'; - export interface RouterOptions { logger: LoggerService; config: RootConfigService; @@ -26,10 +28,10 @@ export async function createRouter( router.get('/validateuser', async (_, res) => { const token = _.headers?.authorization as string; - console.log("token***************",token); //NOSONAR + console.log('token***************', token); //NOSONAR if (token !== '') { const userIdentityDetails = jose.decodeJwt(token); - console.log("userIdentityDetails***************",userIdentityDetails) //NOSONAR + console.log('userIdentityDetails***************', userIdentityDetails); //NOSONAR const userAllowed = await isUserAllowed( userIdentityDetails?.sub?.split('/')[1] as string, ); diff --git a/plugins/access-validate-backend/tsconfig.json b/plugins/access-validate-backend/tsconfig.json new file mode 100644 index 0000000..ba3f901 --- /dev/null +++ b/plugins/access-validate-backend/tsconfig.json @@ -0,0 +1,14 @@ +{ + "extends": "@backstage/cli/config/tsconfig.json", + "include": [ + "packages/*/src", + "plugins/*/src", + "plugins/*/dev", + "plugins/*/migrations" + ], + "exclude": ["node_modules"], + "compilerOptions": { + "outDir": "dist-types", + "rootDir": "." + } +} diff --git a/plugins/jenkins-with-reporting-backend-backend/.eslintrc.js b/plugins/jenkins-with-reporting-backend-backend/.eslintrc.js new file mode 100644 index 0000000..e2a53a6 --- /dev/null +++ b/plugins/jenkins-with-reporting-backend-backend/.eslintrc.js @@ -0,0 +1 @@ +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/jenkins-with-reporting-backend-backend/README.md b/plugins/jenkins-with-reporting-backend-backend/README.md new file mode 100644 index 0000000..dddc06e --- /dev/null +++ b/plugins/jenkins-with-reporting-backend-backend/README.md @@ -0,0 +1,16 @@ +# jenkins-with-reporting-backend + +Welcome to the jenkins-with-reporting-backend backend plugin! + +_This plugin was created through the Backstage CLI_ + +This backend plugin is created to to fetch the jenkins builds, details, reports generated. + +## Getting started + +Your plugin has been added to the example app in this repository, meaning you'll be able to access it by running `yarn +start` in the root directory, and then navigating to [/jenkins-with-reporting-backend/health](http://localhost:7007/api/jenkins-with-reporting-backend/health). + +You can also serve the plugin in isolation by running `yarn start` in the plugin directory. +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 [/dev](./dev) directory. diff --git a/plugins/jenkins-with-reporting-backend-backend/dev/index.ts b/plugins/jenkins-with-reporting-backend-backend/dev/index.ts new file mode 100644 index 0000000..9d74c82 --- /dev/null +++ b/plugins/jenkins-with-reporting-backend-backend/dev/index.ts @@ -0,0 +1,9 @@ +import { createBackend } from '@backstage/backend-defaults'; + +const backend = createBackend(); + +backend.add(import('@backstage/plugin-auth-backend')); +backend.add(import('@backstage/plugin-auth-backend-module-guest-provider')); +backend.add(import('../src')); + +backend.start(); diff --git a/plugins/jenkins-with-reporting-backend-backend/package.json b/plugins/jenkins-with-reporting-backend-backend/package.json new file mode 100644 index 0000000..5f78dd3 --- /dev/null +++ b/plugins/jenkins-with-reporting-backend-backend/package.json @@ -0,0 +1,52 @@ +{ + "name": "@internal/backstage-plugin-jenkins-with-reporting-backend-backend", + "version": "0.1.0", + "main": "src/index.ts", + "types": "src/index.ts", + "license": "Apache-2.0", + "private": true, + "publishConfig": { + "access": "public", + "main": "dist/index.cjs.js", + "types": "dist/index.d.ts" + }, + "backstage": { + "role": "backend-plugin" + }, + "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-defaults": "^0.5.0", + "@backstage/backend-plugin-api": "^1.0.0", + "express": "^4.17.1", + "express-promise-router": "^4.1.0", + "node-fetch": "^2.6.7", + "@backstage-community/plugin-jenkins-backend": "^0.6.2", + "jenkins": "^1.0.0", + "lodash": "^4.17.21", + "@aws-sdk/s3-request-presigner": "^3.705.0" + }, + "devDependencies": { + "@backstage/backend-test-utils": "^1.0.0", + "@backstage/cli": "^0.27.1", + "@backstage/plugin-auth-backend": "^0.23.0", + "@backstage/plugin-auth-backend-module-guest-provider": "^0.2.0", + "@types/express": "*", + "@types/supertest": "^2.0.12", + "supertest": "^6.2.4", + "msw": "^2.3.1", + "@types/jenkins": "^1.0.0", + "@types/node-fetch": "^2.5.12", + "@types/lodash": "^4.14.151" + }, + "files": [ + "dist" + ] +} diff --git a/plugins/jenkins-with-reporting-backend-backend/src/index.ts b/plugins/jenkins-with-reporting-backend-backend/src/index.ts new file mode 100644 index 0000000..0c98ea9 --- /dev/null +++ b/plugins/jenkins-with-reporting-backend-backend/src/index.ts @@ -0,0 +1,2 @@ +export * from './service/router'; +export { jenkinsWithReportingBackendPlugin as default } from './plugin'; diff --git a/plugins/jenkins-with-reporting-backend-backend/src/plugin.ts b/plugins/jenkins-with-reporting-backend-backend/src/plugin.ts new file mode 100644 index 0000000..248b3d3 --- /dev/null +++ b/plugins/jenkins-with-reporting-backend-backend/src/plugin.ts @@ -0,0 +1,78 @@ +import { + coreServices, + createBackendPlugin, +} from '@backstage/backend-plugin-api'; +import { createRouter } from './service/router'; +import { DefaultJenkinsInfoProvider } from '@backstage-community/plugin-jenkins-backend'; + +import { catalogServiceRef } from '@backstage/plugin-catalog-node/alpha'; +import { CatalogClient } from '@backstage/catalog-client'; + +/** + * jenkinsWithReportingBackendPlugin backend plugin + * + * @public + */ +export const jenkinsWithReportingBackendPlugin = createBackendPlugin({ + pluginId: 'jenkins-with-reporting-backend', + register(env) { + env.registerInit({ + deps: { + logger: coreServices.logger, + permissions: coreServices.permissions, + httpRouter: coreServices.httpRouter, + config: coreServices.rootConfig, + catalogClient: catalogServiceRef, + discovery: coreServices.discovery, + auth: coreServices.auth, + httpAuth: coreServices.httpAuth, + }, + async init({ + logger, + permissions, + httpRouter, + config, + catalogClient, + discovery, + auth, + httpAuth, + }) { + const jenkinsInfoProvider = DefaultJenkinsInfoProvider.fromConfig({ + auth, + httpAuth, + config, + catalog: catalogClient, + discovery, + logger, + }); + + httpRouter.use( + await createRouter({ + permissions, + /** + * Logger for logging purposes + */ + logger, + /** + * Info provider to be able to get all necessary information for the APIs + */ + jenkinsInfoProvider, + discovery, + auth, + httpAuth, + config, + catalogClient: new CatalogClient({ discoveryApi: discovery }), + }), + ); + httpRouter.addAuthPolicy({ + path: '/health', + allow: 'unauthenticated', + }); + httpRouter.addAuthPolicy({ + path: '/reports/:namespace/:kind/:name/:jobFullName/:buildNumber', + allow: 'unauthenticated', + }); + }, + }); + }, +}); diff --git a/plugins/jenkins-with-reporting-backend-backend/src/service/JenkinsReportsApi.ts b/plugins/jenkins-with-reporting-backend-backend/src/service/JenkinsReportsApi.ts new file mode 100644 index 0000000..f17ca1e --- /dev/null +++ b/plugins/jenkins-with-reporting-backend-backend/src/service/JenkinsReportsApi.ts @@ -0,0 +1,109 @@ +import { JenkinsInfo } from '@backstage-community/plugin-jenkins-backend'; +import { JenkinsApiImpl } from './jenkinsApi'; +import { STSClient, AssumeRoleCommand } from '@aws-sdk/client-sts'; +import { + S3Client, + ListObjectsV2Command, + GetObjectCommand, +} from '@aws-sdk/client-s3'; + +import { getSignedUrl } from '@aws-sdk/s3-request-presigner'; + +export class JenkinsReportsApi { + private readonly jenkinsService: JenkinsApiImpl; + + constructor(jenkinsService: JenkinsApiImpl) { + this.jenkinsService = jenkinsService; + } + + async fetchBuildReports( + name: string, + jobFullName: string, + buildNumber: number, + s3bucketName: string, + s3BucketRoleArn: string, + s3BucketRegion: string, + ) { + const prefix = `${name}/${decodeURI(jobFullName)}/${buildNumber}/`; + + // Step 1: Assume the specified IAM role using default credentials + const stsClient = new STSClient({ region: s3BucketRegion }); + const assumeRoleCommand = new AssumeRoleCommand({ + // The Amazon Resource Name (ARN) of the role to assume. + // RoleArn: "arn:aws:iam::804295906245:role/sf-test-assumrole-s3", + RoleArn: s3BucketRoleArn, + // An identifier for the assumed role session. + RoleSessionName: 'session1', + // The duration, in seconds, of the role session. The value specified + // can range from 900 seconds (15 minutes) up to the maximum session + // duration set for the role. + DurationSeconds: 900, + }); + try { + const assumedRole = await stsClient.send(assumeRoleCommand); + + const { Credentials } = assumedRole; + + // Step 2: Configure S3 client with temporary credentials from AssumeRole + const s3Client = new S3Client({ + region: s3BucketRegion, + credentials: { + accessKeyId: Credentials!.AccessKeyId!, + secretAccessKey: Credentials!.SecretAccessKey!, + sessionToken: Credentials!.SessionToken!, + }, + }); + + const allObjects: string[] = []; + let continuationToken: string | undefined; + + // Step 3: Fetch all objects using pagination + do { + const listCommand = new ListObjectsV2Command({ + Bucket: s3bucketName, + Prefix: prefix, + ContinuationToken: continuationToken, + }); + + const listResponse = await s3Client.send(listCommand); + continuationToken = listResponse.NextContinuationToken; + + if (listResponse.Contents) { + allObjects.push(...listResponse.Contents.map(obj => obj.Key!)); + } + } while (continuationToken); + + // Step 4: Filter and process files to fetch specific index.html files + const indexFiles = allObjects.filter( + key => + key.endsWith('/Overall/coverage/index.html') || // Matches coverage index.html + (key.includes('/Overall/coverage/') && + key.endsWith('/Overall/coverage/index.html')) || + (key.includes('/load-tests-reports/') && + key.endsWith('/index.html')) || // Matches load-tests-reports + (key.includes('/report-') && key.endsWith('/index.html')), // Matches report folders with index.html + ); + + const files = await Promise.all( + indexFiles.map(async key => { + const getCommand = new GetObjectCommand({ + Bucket: s3bucketName, + Key: key, + }); + const url = await getSignedUrl(s3Client, getCommand, { + expiresIn: 3600, + }); + + // Extract meaningful parts of the path to categorize reports + const fileName = key.replace(prefix, ''); + return { fileName, url }; + }), + ); + + return files; + } catch (error) { + console.error('Error fetching files:', error); + return { error: 'error' }; + } + } +} diff --git a/plugins/jenkins-with-reporting-backend-backend/src/service/JenkinsReportsService.ts b/plugins/jenkins-with-reporting-backend-backend/src/service/JenkinsReportsService.ts new file mode 100644 index 0000000..5cf9f1e --- /dev/null +++ b/plugins/jenkins-with-reporting-backend-backend/src/service/JenkinsReportsService.ts @@ -0,0 +1,11 @@ +import { S3Client, GetObjectCommand } from '@aws-sdk/client-s3'; + +export class JenkinsReportsService { + private readonly s3Client: S3Client; + private readonly bucketName: string; + + constructor(region: string, bucketName: string) { + this.s3Client = new S3Client({ region }); + this.bucketName = bucketName; + } +} diff --git a/plugins/jenkins-with-reporting-backend-backend/src/service/jenkinsApi.ts b/plugins/jenkins-with-reporting-backend-backend/src/service/jenkinsApi.ts new file mode 100644 index 0000000..26ba188 --- /dev/null +++ b/plugins/jenkins-with-reporting-backend-backend/src/service/jenkinsApi.ts @@ -0,0 +1,375 @@ +/* + * 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 type { JenkinsInfo } from '@backstage-community/plugin-jenkins-backend'; +import Jenkins from 'jenkins'; +import type { + BackstageBuild, + BackstageProject, + JenkinsBuild, + JenkinsProject, + ScmDetails, +} from '../types'; +import { AuthorizeResult } from '@backstage/plugin-permission-common'; +import { jenkinsExecutePermission } from '@backstage-community/plugin-jenkins-common'; +import fetch, { HeaderInit } from 'node-fetch'; +import { + BackstageCredentials, + PermissionsService, +} from '@backstage/backend-plugin-api'; + +export class JenkinsApiImpl { + private static readonly lastBuildTreeSpec = `lastBuild[ + number, + url, + fullDisplayName, + displayName, + building, + result, + timestamp, + duration, + actions[ + *[ + *[ + *[ + * + ] + ] + ] + ] + ],`; + + private static readonly jobTreeSpec = `actions[*], + ${JenkinsApiImpl.lastBuildTreeSpec} + jobs{0,1}, + url, + name, + fullName, + displayName, + fullDisplayName, + inQueue`; + + private static readonly jobsTreeSpec = `jobs[ + ${JenkinsApiImpl.jobTreeSpec} + ]`; + + private static readonly jobBuildsTreeSpec = ` + name, + description, + url, + fullName, + displayName, + fullDisplayName, + inQueue, + builds[*]`; + + constructor(private readonly permissionApi?: PermissionsService) {} + + /** + * Get a list of projects for the given JenkinsInfo. + * @see ../../../jenkins/src/api/JenkinsApi.ts#getProjects + */ + async getProjects(jenkinsInfo: JenkinsInfo, branches?: string[]) { + const client = await JenkinsApiImpl.getClient(jenkinsInfo); + const projects: BackstageProject[] = []; + + if (branches) { + // Assume jenkinsInfo.jobFullName is a MultiBranch Pipeline project which contains one job per branch. + // TODO: extract a strategy interface for this + const job = await Promise.any( + branches.map(branch => + client.job.get({ + name: `${jenkinsInfo.jobFullName}/${encodeURIComponent(branch)}`, + tree: JenkinsApiImpl.jobTreeSpec.replace(/\s/g, ''), + }), + ), + ); + projects.push(this.augmentProject(job)); + } else { + // We aren't filtering + // Assume jenkinsInfo.jobFullName is either + // a MultiBranch Pipeline (folder with one job per branch) project + // a Pipeline (standalone) project + + // Add count limit to projects + // If limit is set in the config, use it, otherwise use the default limit of 50 + const limitedJobsTreeSpec: string = `${JenkinsApiImpl.jobsTreeSpec}{0,${jenkinsInfo.projectCountLimit}}`; + + const project = await client.job.get({ + name: jenkinsInfo.jobFullName, + // Filter only be the information we need, instead of loading all fields. + // Whitespaces are only included for readability here and stripped out + // before sending to Jenkins + tree: limitedJobsTreeSpec.replace(/\s/g, ''), + }); + + const isStandaloneProject = !project.jobs; + if (isStandaloneProject) { + const limitedStandaloneJobTreeSpec = `${JenkinsApiImpl.jobTreeSpec}{0,${jenkinsInfo.projectCountLimit}}`; + const standaloneProject = await client.job.get({ + name: jenkinsInfo.jobFullName, + tree: limitedStandaloneJobTreeSpec.replace(/\s/g, ''), + }); + projects.push(this.augmentProject(standaloneProject)); + return projects; + } + for (const jobDetails of project.jobs) { + // for each branch (we assume) + projects.push(this.augmentProject(jobDetails)); + } + } + return projects; + } + + /** + * Get a single build. + * @see ../../../jenkins/src/api/JenkinsApi.ts#getBuild + */ + async getBuild( + jenkinsInfo: JenkinsInfo, + jobFullName: string, + buildNumber: number, + ) { + const client = await JenkinsApiImpl.getClient(jenkinsInfo); + + const project = await client.job.get({ + name: jobFullName, + depth: 1, + }); + + const build = await client.build.get(jobFullName, buildNumber); + const jobScmInfo = JenkinsApiImpl.extractScmDetailsFromJob(project); + + return this.augmentBuild(build, jobScmInfo); + } + + /** + * Trigger a build of a project + * @see ../../../jenkins/src/api/JenkinsApi.ts#retry + */ + async rebuildProject( + jenkinsInfo: JenkinsInfo, + jobFullName: string, + buildNumber: number, + resourceRef: string, + options: { credentials: BackstageCredentials }, + ): Promise { + if (this.permissionApi) { + const response = await this.permissionApi.authorize( + [{ permission: jenkinsExecutePermission, resourceRef }], + { credentials: options.credentials }, + ); + // permission api returns always at least one item, we need to check only one result since we do not expect any additional results + const { result } = response[0]; + if (result === AuthorizeResult.DENY) { + return 401; + } + } + + const buildUrl = this.getBuildUrl(jenkinsInfo, jobFullName, buildNumber); + + // the current SDK only supports triggering a new build + // replay the job by triggering request directly from Jenkins api + const response = await fetch(`${buildUrl}/replay/rebuild`, { + method: 'post', + headers: jenkinsInfo.headers as HeaderInit, + }); + return response.status; + } + + // private helper methods + + private static async getClient(jenkinsInfo: JenkinsInfo) { + // The typings for the jenkins library are out of date so just cast to any + return new (Jenkins as any)({ + baseUrl: jenkinsInfo.baseUrl, + headers: jenkinsInfo.headers, + promisify: true, + crumbIssuer: jenkinsInfo.crumbIssuer, + }); + } + + private augmentProject(project: JenkinsProject): BackstageProject { + let status: string; + + if (project.inQueue) { + status = 'queued'; + } else if (!project.lastBuild) { + status = 'build not found'; + } else if (project.lastBuild.building) { + status = 'running'; + } else if (!project.lastBuild.result) { + status = 'unknown'; + } else { + status = project.lastBuild.result; + } + + const jobScmInfo = JenkinsApiImpl.extractScmDetailsFromJob(project); + + return { + ...project, + lastBuild: project.lastBuild + ? this.augmentBuild(project.lastBuild, jobScmInfo) + : null, + status, + // actions: undefined, + }; + } + + private augmentBuild( + build: JenkinsBuild, + jobScmInfo: ScmDetails | undefined, + ): BackstageBuild { + const source = + build.actions + .filter( + (action: any) => + action?._class === 'hudson.plugins.git.util.BuildData', + ) + .map((action: any) => { + const [first]: any = Object.values(action.buildsByBranchName); + const branch = first.revision.branch[0]; + return { + branchName: branch.name, + commit: { + hash: branch.SHA1.substring(0, 8), + }, + }; + }) + .pop() || {}; + + if (jobScmInfo) { + source.url = jobScmInfo.url; + source.displayName = jobScmInfo.displayName; + source.author = jobScmInfo.author; + } + + let status: string; + if (build.building) { + status = 'running'; + } else if (!build.result) { + status = 'unknown'; + } else { + status = build.result; + } + return { + ...build, + status, + source: source, + tests: this.getTestReport(build), + }; + } + + private static extractScmDetailsFromJob( + project: JenkinsProject, + ): ScmDetails | undefined { + const scmInfo: ScmDetails | undefined = project.actions + .filter( + (action: any) => + action?._class === 'jenkins.scm.api.metadata.ObjectMetadataAction', + ) + .map((action: any) => { + return { + url: action?.objectUrl, + // https://javadoc.jenkins.io/plugin/scm-api/jenkins/scm/api/metadata/ObjectMetadataAction.html + // branch name for regular builds, pull request title on pull requests + displayName: action?.objectDisplayName, + }; + }) + .pop(); + + if (!scmInfo) { + return undefined; + } + + const author = project.actions + .filter( + (action: any) => + action?._class === + 'jenkins.scm.api.metadata.ContributorMetadataAction', + ) + .map((action: any) => { + return action.contributorDisplayName; + }) + .pop(); + + if (author) { + scmInfo.author = author; + } + + return scmInfo; + } + + private getTestReport(build: JenkinsBuild): { + total: number; + passed: number; + skipped: number; + failed: number; + testUrl: string; + } { + return build.actions + .filter( + (action: any) => + action?._class === 'hudson.tasks.junit.TestResultAction', + ) + .map((action: any) => { + return { + total: action.totalCount, + passed: action.totalCount - action.failCount - action.skipCount, + skipped: action.skipCount, + failed: action.failCount, + testUrl: `${build.url}${action.urlName}/`, + }; + }) + .pop(); + } + + private getBuildUrl( + jenkinsInfo: JenkinsInfo, + jobFullName: string, + buildId: number, + ): string { + const jobs = jobFullName.split('/'); + return `${jenkinsInfo.baseUrl}/job/${jobs.join('/job/')}/${buildId}`; + } + + async getJobBuilds(jenkinsInfo: JenkinsInfo, jobFullName: string) { + let jobName = jobFullName; + if (jobFullName.includes('/')) { + jobName = jobFullName + .split('/') + .map((s: string) => `${encodeURIComponent(s)}`) + .join('/job/'); + } + + const response = await fetch( + `${ + jenkinsInfo.baseUrl + }/job/${jobName}/api/json?tree=${JenkinsApiImpl.jobBuildsTreeSpec.replace( + /\s/g, + '', + )}`, + { + method: 'get', + headers: jenkinsInfo.headers as HeaderInit, + }, + ); + + const jobBuilds = await response.json(); + + return jobBuilds; + } +} diff --git a/plugins/jenkins-with-reporting-backend-backend/src/service/router.test.ts b/plugins/jenkins-with-reporting-backend-backend/src/service/router.test.ts new file mode 100644 index 0000000..ed19d50 --- /dev/null +++ b/plugins/jenkins-with-reporting-backend-backend/src/service/router.test.ts @@ -0,0 +1,30 @@ +import { mockServices } from '@backstage/backend-test-utils'; +import express from 'express'; +import request from 'supertest'; + +import { createRouter } from './router'; + +describe('createRouter', () => { + let app: express.Express; + + beforeAll(async () => { + const router = await createRouter({ + logger: mockServices.logger.mock(), + config: mockServices.rootConfig(), + }); + app = express().use(router); + }); + + beforeEach(() => { + jest.resetAllMocks(); + }); + + describe('GET /health', () => { + it('returns ok', async () => { + const response = await request(app).get('/health'); + + expect(response.status).toEqual(200); + expect(response.body).toEqual({ status: 'ok' }); + }); + }); +}); diff --git a/plugins/jenkins-with-reporting-backend-backend/src/service/router.ts b/plugins/jenkins-with-reporting-backend-backend/src/service/router.ts new file mode 100644 index 0000000..4879009 --- /dev/null +++ b/plugins/jenkins-with-reporting-backend-backend/src/service/router.ts @@ -0,0 +1,123 @@ +import { MiddlewareFactory } from '@backstage/backend-defaults/rootHttpRouter'; +import express from 'express'; +import Router from 'express-promise-router'; +import { JenkinsReportsApi } from './JenkinsReportsApi'; +import { JenkinsApiImpl } from './jenkinsApi'; +import { JenkinsInfoProvider } from '@backstage-community/plugin-jenkins-backend'; + +import { createLegacyAuthAdapters } from '@backstage/backend-common'; + +import { + AuthService, + DiscoveryService, + HttpAuthService, + LoggerService, + RootConfigService, +} from '@backstage/backend-plugin-api'; +import { + PermissionAuthorizer, + PermissionEvaluator, +} from '@backstage/plugin-permission-common'; + +import { CatalogClient } from '@backstage/catalog-client'; + +/** @public */ +export interface RouterOptions { + logger: LoggerService; + jenkinsInfoProvider: JenkinsInfoProvider; + permissions?: PermissionEvaluator | PermissionAuthorizer; + discovery: DiscoveryService; + auth?: AuthService; + httpAuth?: HttpAuthService; + config: RootConfigService; + catalogClient: CatalogClient; +} + +export async function createRouter( + options: RouterOptions, +): Promise { + const { jenkinsInfoProvider, logger, config, catalogClient } = options; + + const jenkinsService = new JenkinsApiImpl(); + + const api = new JenkinsReportsApi(jenkinsService); + const { httpAuth } = createLegacyAuthAdapters(options); + const router = Router(); + router.use(express.json()); + + router.get('/health', (_, response) => { + logger.info('PING!'); + response.json({ status: 'ok' }); + }); + + router.get( + '/reports/:namespace/:kind/:name/:jobFullName/:buildNumber', + async (req, res) => { + const { name, jobFullName, buildNumber } = req.params; + try { + const creds = (await httpAuth.credentials(req)) as any; + + const entity = await catalogClient.getEntityByRef( + `${req.params.kind}:${req.params.namespace}/${req.params.name}`, + { + token: creds.token, + }, + ); + + if (!entity) { + throw new Error('Entity not found'); + } + + // Get S3 bucket name from entity annotations + const s3bucketName = + entity.metadata.annotations?.['jenkins.io/s3-bucket-name'] ?? ''; + + // Get S3 bucket annotation + const s3BucketRoleArn = + entity.metadata.annotations?.['jenkins.io/s3-bucket-role-arn'] ?? ''; + + const s3BucketRegion = + entity.metadata.annotations?.['jenkins.io/s3-bucket-region'] ?? ''; + const reports = await api.fetchBuildReports( + name, + jobFullName, + parseInt(buildNumber), + s3bucketName, + s3BucketRoleArn, + s3BucketRegion, + ); + + res.json(reports); + } catch (error) { + res.status(500).json({ error: error.message }); + } + }, + ); + + router.get( + '/v1/entity/:namespace/:kind/:name/job/:jobFullName', + async (request, response) => { + const { namespace, kind, name, jobFullName } = request.params; + const jenkinsInfo = await jenkinsInfoProvider.getInstance({ + entityRef: { + kind, + namespace, + name, + }, + jobFullName, + credentials: await httpAuth.credentials(request), + }); + + const build = await jenkinsService.getJobBuilds(jenkinsInfo, jobFullName); + + response.json({ + build, + }); + }, + ); + + const middleware = MiddlewareFactory.create({ logger, config }); + + router.use(middleware.error()); + return router; +} diff --git a/plugins/jenkins-with-reporting-backend-backend/src/setupTests.ts b/plugins/jenkins-with-reporting-backend-backend/src/setupTests.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/plugins/jenkins-with-reporting-backend-backend/src/setupTests.ts @@ -0,0 +1 @@ +export {}; diff --git a/plugins/jenkins-with-reporting-backend-backend/src/types.ts b/plugins/jenkins-with-reporting-backend-backend/src/types.ts new file mode 100644 index 0000000..4a975ef --- /dev/null +++ b/plugins/jenkins-with-reporting-backend-backend/src/types.ts @@ -0,0 +1,98 @@ +/* + * 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. + */ + +export interface ScmDetails { + url?: string; + displayName?: string; + author?: string; +} + +interface CommonBuild { + // standard Jenkins + timestamp: number; + building: boolean; + duration: number; + result?: string; + fullDisplayName: string; + displayName: string; + url: string; + number: number; +} + +export interface JenkinsBuild extends CommonBuild { + // read by us from jenkins but not passed to frontend + actions: any; +} + +/** + * A build as presented by this plugin to the backstage jenkins plugin + */ +export interface BackstageBuild extends CommonBuild { + // added by us + source?: { + branchName: string; + displayName: string; + url: string; + commit: { + hash: string; + }; + author: string; + }; + tests: { + passed: number; + skipped: number; + failed: number; + total: number; + testUrl: string; + }; + status: string; // == building ? 'running' : result, +} + +export interface CommonProject { + // standard Jenkins + lastBuild: CommonBuild | null; + displayName: string; + fullDisplayName: string; + fullName: string; + inQueue: boolean; +} + +export interface JenkinsProject extends CommonProject { + // standard Jenkins + lastBuild: JenkinsBuild | null; + + // read by us from jenkins but not passed to frontend + actions: object[]; +} + +export interface BackstageProject extends CommonProject { + // standard Jenkins + lastBuild: BackstageBuild | null; + + // added by us + status: string; // == inQueue ? 'queued' : lastBuild.building ? 'running' : lastBuild.result, +} + +export interface JenkinsInfo { + baseUrl: string; + headers?: Record; + jobFullName: string; + projectCountLimit: number; + crumbIssuer?: boolean; + awsRoleArn?: string; + awsRegion?: string; + awsBucketName?: string; +} diff --git a/plugins/jenkins-with-reporting/.eslintrc.js b/plugins/jenkins-with-reporting/.eslintrc.js new file mode 100644 index 0000000..bfaa4b6 --- /dev/null +++ b/plugins/jenkins-with-reporting/.eslintrc.js @@ -0,0 +1,6 @@ +// module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { + rules: { + '@backstage/no-top-level-material-ui-4-imports': 'error', + }, +}); diff --git a/plugins/jenkins-with-reporting/README.md b/plugins/jenkins-with-reporting/README.md new file mode 100644 index 0000000..f044b77 --- /dev/null +++ b/plugins/jenkins-with-reporting/README.md @@ -0,0 +1,15 @@ +# jenkins-with-reporting + +Welcome to the jenkins-with-reporting plugin! + +_This plugin was created through the Backstage CLI_ + +This frontend plugin is created to to fetch and display the jenkins builds, details, reports generated. + +## Getting started + +Your plugin has been added to the example app in this repository, meaning you'll be able to access it by running `yarn start` in the root directory, and then navigating to [/jenkins-with-reporting](http://localhost:3000/jenkins-with-reporting). + +You can also serve the plugin in isolation by running `yarn start` in the plugin directory. +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 [/dev](./dev) directory. diff --git a/plugins/jenkins-with-reporting/dev/index.tsx b/plugins/jenkins-with-reporting/dev/index.tsx new file mode 100644 index 0000000..5800360 --- /dev/null +++ b/plugins/jenkins-with-reporting/dev/index.tsx @@ -0,0 +1,15 @@ +import React from 'react'; +import { createDevApp } from '@backstage/dev-utils'; +import { + jenkinsWithReportingPlugin, + JenkinsWithReportingPage, +} from '../src/plugin'; + +createDevApp() + .registerPlugin(jenkinsWithReportingPlugin) + .addPage({ + element: , + title: 'Root Page', + path: '/jenkins-with-reporting', + }) + .render(); diff --git a/plugins/jenkins-with-reporting/package.json b/plugins/jenkins-with-reporting/package.json new file mode 100644 index 0000000..48e1bc0 --- /dev/null +++ b/plugins/jenkins-with-reporting/package.json @@ -0,0 +1,62 @@ +{ + "name": "@internal/backstage-plugin-jenkins-with-reporting", + "version": "0.1.0", + "main": "src/index.ts", + "types": "src/index.ts", + "license": "Apache-2.0", + "private": true, + "publishConfig": { + "access": "public", + "main": "dist/index.esm.js", + "types": "dist/index.d.ts" + }, + "backstage": { + "role": "frontend-plugin" + }, + "sideEffects": false, + "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/core-components": "^0.15.0", + "@backstage/core-plugin-api": "^1.9.3", + "@backstage/theme": "^0.5.7", + "@material-ui/core": "^4.9.13", + "@material-ui/icons": "^4.9.1", + "@material-ui/lab": "^4.0.0-alpha.61", + "react-use": "^17.2.4", + "@backstage-community/plugin-jenkins-common": "^0.1.29", + "@backstage/catalog-model": "^1.5.0", + "@backstage/errors": "^1.2.4", + "@backstage/plugin-catalog-react": "^1.12.2", + "@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0", + "luxon": "^3.0.0" + }, + "peerDependencies": { + "react": "^16.13.1 || ^17.0.0 || ^18.0.0" + }, + "devDependencies": { + "@backstage/cli": "^0.27.1", + "@backstage/core-app-api": "^1.15.0", + "@backstage/dev-utils": "^1.1.0", + "@backstage/test-utils": "^1.6.0", + "@testing-library/jest-dom": "^6.0.0", + "@testing-library/react": "^14.0.0", + "@testing-library/user-event": "^14.0.0", + "msw": "^1.0.0", + "@testing-library/dom": "^10.0.0", + "@types/react-dom": "^18.2.19", + "@types/testing-library__jest-dom": "^6.0.0", + "canvas": "^2.11.2", + "react": "^16.13.1 || ^17.0.0 || ^18.0.0" + }, + "files": [ + "dist" + ] +} diff --git a/plugins/jenkins-with-reporting/src/api/JenkinsApi.ts b/plugins/jenkins-with-reporting/src/api/JenkinsApi.ts new file mode 100644 index 0000000..53757c1 --- /dev/null +++ b/plugins/jenkins-with-reporting/src/api/JenkinsApi.ts @@ -0,0 +1,320 @@ +/* + * 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 { + createApiRef, + DiscoveryApi, + FetchApi, +} from '@backstage/core-plugin-api'; +import type { CompoundEntityRef } from '@backstage/catalog-model'; +import { ResponseError } from '@backstage/errors'; + +export const jenkinsApiRef = createApiRef({ + id: 'plugin.jenkins.service2', +}); + +export interface Build { + // standard Jenkins + timestamp: number; + building: boolean; + duration: number; + result?: string; + fullDisplayName: string; + displayName: string; + url: string; + number: number; + + // added by us + source?: { + branchName: string; + displayName: string; + url: string; + commit: { + hash: string; + }; + author: string; + }; + tests: { + passed: number; + skipped: number; + failed: number; + total: number; + testUrl: string; + }; + status: string; // == building ? 'running' : result, + reports?: [{ fileName: string; url: string }]; +} +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[]; +} + +/** @public */ +export interface Project { + // standard Jenkins + lastBuild: Build; + displayName: string; + fullDisplayName: string; + fullName: string; + inQueue: string; + // added by us + status: string; // == inQueue ? 'queued' : lastBuild.building ? 'running' : lastBuild.result, + onRestartClick: () => Promise; // TODO rename to handle.* ? also, should this be on lastBuild? +} + +export interface BuildReport { + fileName: string; + url: string; +} + +// export interface JenkinsApi { +// // ... existing methods +// getBuildReports( +// jobFullName: string, +// buildNumber: string +// ): Promise>; +// } + +export interface JenkinsApi { + /** + * Get the projects (jobs which have builds, not folders) including info about their lastBuild. + * + * Deciding what jobs are for an entity can be configured by the backstage _Integrator_ in the plugin-jenkins-backend setup + * and by the _Software Engineer_ using annotations agreed with the _Integrator_. + * + * Typically, a folder job will be identified and the backend plugin will recursively look for projects (jobs with builds) within that folder. + */ + getProjects(options: { + /** the entity whose jobs should be retrieved. */ + entity: CompoundEntityRef; + /** a filter on jobs. Currently this just takes a branch (and assumes certain structures in jenkins) */ + filter: { branch?: string }; + }): Promise; + + /** + * Get a single build. + * + * This takes an entity to support selecting between multiple jenkins instances. + * + * TODO: abstract jobFullName (so we could support differentiating between the same named job on multiple instances). + */ + getBuild(options: { + entity: CompoundEntityRef; + jobFullName: string; + buildNumber: string; + }): Promise; + + getBuildReports(options: { + entity: CompoundEntityRef; + jobFullName: string; + buildNumber: string; + }): Promise; + + getJobBuilds(options: { + entity: CompoundEntityRef; + jobFullName: string; + }): Promise; + + retry(options: { + entity: CompoundEntityRef; + jobFullName: string; + buildNumber: string; + }): Promise; +} + +export class JenkinsClient implements JenkinsApi { + private readonly discoveryApi: DiscoveryApi; + private readonly fetchApi: FetchApi; + + constructor(options: { discoveryApi: DiscoveryApi; fetchApi: FetchApi }) { + this.discoveryApi = options.discoveryApi; + this.fetchApi = options.fetchApi; + } + + async getProjects(options: { + entity: CompoundEntityRef; + filter: { branch?: string }; + }): Promise { + const { entity, filter } = options; + const url = new URL( + `${await this.discoveryApi.getBaseUrl( + 'jenkins', + )}/v1/entity/${encodeURIComponent(entity.namespace)}/${encodeURIComponent( + entity.kind, + )}/${encodeURIComponent(entity.name)}/projects`, + ); + console.log('getproject url================', url); + if (filter.branch) { + url.searchParams.append('branch', filter.branch); + } + + const response = await this.fetchApi.fetch(url); + + return ( + (await response.json()).projects?.map((p: Project) => ({ + ...p, + onRestartClick: () => { + return this.retry({ + entity, + jobFullName: p.fullName, + buildNumber: String(p.lastBuild.number), + }); + }, + })) || [] + ); + } + + // async getBuild(options: { + // entity: CompoundEntityRef; + // jobFullName: string; + // buildNumber: string; + // }): Promise { + // const { entity, jobFullName, buildNumber } = options; + // const url = `${await this.discoveryApi.getBaseUrl( + // 'jenkins', + // )}/v1/entity/${encodeURIComponent(entity.namespace)}/${encodeURIComponent( + // entity.kind, + // )}/${encodeURIComponent(entity.name)}/${encodeURIComponent( + // jobFullName, + // )}/${encodeURIComponent(buildNumber)}`; + + // const response = await this.fetchApi.fetch(url); + + // return (await response.json()) + + // } + + async getBuild(options: { + entity: CompoundEntityRef; + jobFullName: string; + buildNumber: string; + }): Promise { + const { entity, jobFullName, buildNumber } = options; + const url = `${await this.discoveryApi.getBaseUrl( + 'jenkins', + )}/v1/entity/${encodeURIComponent(entity.namespace)}/${encodeURIComponent( + entity.kind, + )}/${encodeURIComponent(entity.name)}/job/${encodeURIComponent( + jobFullName, + )}/${encodeURIComponent(buildNumber)}`; + + const response = await this.fetchApi.fetch(url); + + return (await response.json()).build; + } + + async getBuildReports(options: { + entity: CompoundEntityRef; + jobFullName: string; + buildNumber: string; + }): Promise { + console.log('getBuildReports*******************', options); + const { entity, jobFullName, buildNumber } = options; + const url = `${await this.discoveryApi.getBaseUrl( + 'jenkins-with-reporting-backend', + )}/reports/${encodeURIComponent(entity.namespace)}/${encodeURIComponent( + entity.kind, + )}/${encodeURIComponent(entity.name)}/${encodeURIComponent( + jobFullName, + )}/${encodeURIComponent(buildNumber)}`; + + const response = await this.fetchApi.fetch(url); + + return await response.json(); + } + + async retry(options: { + entity: CompoundEntityRef; + jobFullName: string; + buildNumber: string; + }): Promise { + const { entity, jobFullName, buildNumber } = options; + const url = `${await this.discoveryApi.getBaseUrl( + 'jenkins', + )}/v1/entity/${encodeURIComponent(entity.namespace)}/${encodeURIComponent( + entity.kind, + )}/${encodeURIComponent(entity.name)}/job/${encodeURIComponent( + jobFullName, + )}/${encodeURIComponent(buildNumber)}`; + + const response = await this.fetchApi.fetch(url, { method: 'POST' }); + + if (!response.ok) { + throw await ResponseError.fromResponse(response); + } + } + + 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 url = `${await this.discoveryApi.getBaseUrl( + 'jenkins-with-reporting-backend', + )}/v1/entity/${encodeURIComponent(entity.namespace)}/${encodeURIComponent( + entity.kind, + )}/${encodeURIComponent(entity.name)}/job/${encodeURIComponent( + jobFullName, + )}`; + + // const response = await this.fetchApi.fetch(url); + console.log('*****************job urls*************************', url); + const response = await this.fetchApi.fetch(url); + console.log('************************jobBuildse response-----', response); + + return (await response.json()).build; + // return ( + // (await response.json()).build?.builds?.map((p: Build) => ({ + // ...p, + // onRestartClick: () => { + // return this.retry({ + // entity, + // jobFullName: p.fullDisplayName, + // buildNumber: String(p.number), + // }); + // }, + // })) || [] + // ); + } +} diff --git a/plugins/jenkins-with-reporting/src/api/index.ts b/plugins/jenkins-with-reporting/src/api/index.ts new file mode 100644 index 0000000..79a812e --- /dev/null +++ b/plugins/jenkins-with-reporting/src/api/index.ts @@ -0,0 +1,19 @@ +/* + * 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 { JenkinsClient, jenkinsApiRef } from './JenkinsApi'; + +export type { JenkinsApi, Project, BuildReport } from './JenkinsApi'; diff --git a/plugins/jenkins-with-reporting/src/assets/JenkinsLogo.svg b/plugins/jenkins-with-reporting/src/assets/JenkinsLogo.svg new file mode 100644 index 0000000..bd714dc --- /dev/null +++ b/plugins/jenkins-with-reporting/src/assets/JenkinsLogo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/plugins/jenkins-with-reporting/src/assets/build-details.png b/plugins/jenkins-with-reporting/src/assets/build-details.png new file mode 100644 index 0000000000000000000000000000000000000000..a333fb661153d296358e390fb6ceb544ffcf5576 GIT binary patch literal 25148 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 literal 0 HcmV?d00001 diff --git a/plugins/jenkins-with-reporting/src/assets/dynamic-columns.png b/plugins/jenkins-with-reporting/src/assets/dynamic-columns.png new file mode 100644 index 0000000000000000000000000000000000000000..1a8525740354a40436511a11b18e545442070fba GIT binary patch literal 218507 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êV#$ZsOQOi}K^hXR6C55O_eSzkBKLLl%Llqicxe63qK+;8Jv_gK*}$ z211ZxxYfn*{{n%3xBxIiKq30^^*HfVp)Sjs%KMyw!KSe^%;y}-mw_*&iD6fAu~Ni1 zm5WQV&m}l%q46YyP|P$FQnW5)bNow=cf4;y^MKBl1T7{7odMnxO5VC;f(N%Ucfov$ zL^flAEHA-iOPXM7Ww&e+2w(b&fPKJd4%pgw*BfH2_d4+Qc8Wpe8PgNF8$MWV$2sf# z%N#TZN{>B$v@PV<#)sAf*0`Dyem##k>0Nt%(+|9f;S!wa4ww8>d~AMxM5T57!POSN>s5(74+euy zs}==CL`*&->tUpxw8Hy$5=LV{q&6*(r<1h~;-j4VUS+pXuR0q}$_6?#Kzb2Qadp^r zcHxQP;atd^)$>7^{DUwo{DW0`iDsj2c#|4{rc+k9PIY$Kk)y0X@51$U*-f|m|CHM7 zVyFx@6^T{zz7=TAS8W z67k|p@~OyC=l`Z81;nvsRw&4AW6R)CQVj}yvbr?Aj}KhdsHxjPA7t-Y-w2fDCvX9x z7sgs8f42Nlb2*nwbnNnkT0wGazkyj2k0$H3wGGG1;Viz=-oJLNqKff)R9Cf7FH1gH zMS1QbhJTs1bT<`xIjA|lXA9I^sC_{>*x0`_q-~gCjM_~F-VpNYPjJDJ;!r>J}UEVNpX*&5TB zqsUbnWUDN}g7p)-XVkmF#J)64LPBN`9S#{*jHis|%U~_=F=4KN^fLh&#r1nBsE%Y) z;CKyaSsE@ssNf$FJt2sTMMFtBKJr}a`HpiXgx0rwg>UXhljGLDoW z`odaJLai@b1w0R}LiUb;lJB<)`|F&-DRm$@x^YJ23-k(gl=#OQ!gP%$`ct{lZj+GH z@gQCrXO$9f(u@+{jpch32-V6ian1Vo+_M<5(6hk{zi_L`6BTPt|HL4Mpy;mDi@j)C z5nAm>GRW7#u9exK>WEuF2^(nN zKP=3wNFXauAOoWcr+vz->7N_?K#zZ@n*{XV}0qPNH_gtcK28ldHb(Q>oz~W4y2`(9}JHOYa<7Gf~`) zu0GVEqWNn7y?!>)<9nnFWAO0pz19D`;fgFg%G5@=Z5i(qa3~-R(6_%BFy5Tc@g{Lm zTs2u(XyOZ&F#ie1vzp7L=u}oy!VIg~Km1p!O5wX-v)0o8N)Ki@GCR-0$1`wna5h5u zjusk#e4Q%v$qNMp>bym7=uap7D#H{*^sQd9`R@JryuV7)F#|$@9%Mo?^-gL9W?$g z{j@dvI~#t9!<8cZq<|Q+Xu3@gfJazT0>tzzU)Z0kGW|gI)81d^Z}3J-5T4TB3Uy<@ zJzejQfr_Dc^gJDSJXqb&BH>0dDj6uGn$=$KjI?1{uq$;vyb38ayrklx*NIr44{>AS zEps`9XgcVwwU$u&Yzj*My=(v7Z3prPNK8IL;zpKG1%_A`!J0hZIFbQ|kJ~p0Od7s! zC$2%>E}7??7L&NN&hy&mta$#EthzjHK)fHYYrDZiQjovTPSo z>eG?Wev|=WO$kNT2aQ4P%dkhvYDu5Y+GblmS_F)9T1W??HcW%?XCuLuO}C$2KJ&Vo zt%1;*WHW|KH7D%udiwiSnsWWRSTuM79IutfV*PpTli2jzy6ic=>7i`THpUFsbKCU4 z%rG2JLiVNr5#T?}@%G&juL)DF=8ZJD(JW9(I$J#UJ&T47o2GmMb!bA3Hp5rw4erN?JL$d_CKVfp~0GrZKI(fr7)NgAYK8&W};X!qej7!ldnI0zdym zZAEvq`oVOcX0`vE*tO%h$f~dPoZtEo-)AJUM(~wu<`Q>T1%eT;t!k0t(}n_RG|1dD zfBeuwJV#Fea=btz(mefQ{apSHG;m-(u{+b!Crv0%5Ge)_kgrn7U2Z>4hkl5HPcPi= z5S^scjCtS4P=~~Bar@8T9Ri2FB87%M9IX6hdYZZG4~5sjDnCvxqKkhR0kL{Jk-WJE z&DHxjV){P5rNQd2c9*MzOj6GA@~*17m#F z_RV{qvZp#oX(8vPi3ISIx>m8s$gVr`AK@Z8U*q@<7CJaVudxV&=sYIQXteNtp36e}EbbOJD(`uwx zl_5wNv=##NLp4#z!U=y(dF^VG>~U}iXF>PYS{VCd-a|SzU$1Ltdekc_?`F0WqXNVM=pn#+}?W~(=ONQ$kAaECk)i;gB!Ak>q{ z(MRDSk~~Dw(+N#&MygONKcd3Wcx7m<6>d8-;+in#GTR8r&%@h1#a&a!v}lMHzK?s= zMAZMyl4qq1U_70H``p%~`8Pi{ z@K~#Y8)?L)j}4Fa9@p;`q(y4yde0XS!u@y;h_T$FPzqu-0fyf;5yB4b#K$;yRX0X+ zBhn(*vkMM+Q?VqUD2^|SlrcEYh&Dq{MaoR-3zJ&<4^aQDq>jr+S0WqQCEc*h{0m(F z$u)qK_SUXm^tLIw{_U=U%zxl=0`G3(k*&@)*eVN3o z%y<`FkuYD_hO%<`QJi<|QU5aZ8wjnuWuNM=-^mk#{l1M2yR>e7^xk_va}zcn75 z8IaKJgKarSAuXvIXaso5LlZi@f57onGUSmc1UWw;6DGCW!RJ)7y}} zjkdiBCiaIzY7A>$%V>e*5pr2WzKDX4T<>mNI*8t5hs(X$DLS2HO_d`-<%9k#XO;`_ zt%_1Szv`{c%V*apTe13{lOOBZ=;~^#@x9b|ErY&=l|IFXYSL*D3`j`92(is`lQ`5= zA@M$gZH6lqY+*~)Z#LF~NWaf81z3(e1>I?DzHNW;E8kGI32AJI$Tr!U)c8=;G~W=T z17`h6B-)hXM#=YrdFW|@03o4=f^ig+k0!~VsNn}2@jG9O9@W*HSV=Kl&PV#@PEn*9 zk>>jR`~l7qJa^Ez&wT(xi>kANjXj#U$ZC;;NMH1W7v|rA{t?cPV2OksD-4eRdrRUy zYMQ(EXi3hyhLwZ1vQWnt)sJ0u9XW~2S3H72G}+*KG3O4U!#Tp}V$3HkUpP!8SiZ14 zFX21nW7de@|K=Wg6i_3D8NRRh^aW5OnA<=5eZdSnFizU+S(yYOQU1Nt71dK=r@B2Y zXDWZJA80L}uj@6orA{iX)3MJGHrcJtf`2G5#-r|v8V043XP+?B*M2VsXHa6W_JHZI z;U0HqH--W|di2C;hFT+&HRpnVv`>Ft{HP?1Z$O6W7EjUb9Hm&&I!Q=hI}J=1Iba|1 z+fSSIPg_Cqw@5HtAX}bEhONs&eczG{smGxM!A|jZ!NgZn$E&^PWU3w>TZN0}M-O8;er1QnJ!l~MChuSD_hk9bo>QFH!+ z$TJ?iT%L#@(aAbABR(;?O*t*uj4IntJRuF82qh99ed-~)PH}i2;@TXCYZ;yY@MfIW zm%Dh^Sn4=v2VGAB_&Nm7gpC1dWV>;F6Dz2ZNH5A9BN*ect`SPGt9L1=gCGj;S)Vn9 zagp_>jh#WOFVbvfEo4*n|KYeHi9MY5_sZPoAl1oK;1Z;amgk0G|Z z%gyF%;m-l`f{1Fla&EjU&XS7I(<$hKquR3*8^WoO@$+DB?uer3; zsm~Adi?iiQoS~Iv*OsQwBq{x&U+?>*KTFe2M?X(0U7~w9xCL=6)8 zYgti=_)5)+p7}*$&1gzvW|@B%Yf?VhAQV3bSMK|9y5;){x+O9Hv7Y)>=bRzC#z46q z3bjqLy1|sL!_-;tkGQGvbpMCF_l|06P2WHT0TraEAP1>}(wmgfn@Ult(jgS7QWARa zA_5{!I-w|4dQa$81gS!R0HH|<(xnR_a5rak&YAhmoSA#q{d3lGxpopD-~PV0zt8*Z zOB24lkJwqK4N$`7%x&<67U+*YDptWKHuMd$c?@AWEsVnIiO=C#=4@)pqX6(sE@9Z& z1AELG91-A`Oh_l{44xDzw!KPxPMg;2LUSJxmChBW6JEF$GQx6C-LIY zY!}IAH(fBZXR?f*smU|4AnDDKZR$7rHKUX>j_jQWpH|^j1%jNV<{(Vj3}&HfBjuBSn1(% zsq9zZx<$;*nx~^d1gca)s1Qm=pmAKW{9vw^+&HODbR(S{=d$*|3&$L(E6IE=fZ>c! zzP<@VgbJt*u^2HQgQ=m)YFek!Im!yf0CA=lROOoPRd5*<>FPNC3RXgY>HEePF zImO4Jfs$yj0{)$t)5}2K&6+naO3`lp+hkKNq+jR~NL}7IZsfNMPr!thKYXh=S}N=T z{5pnk`HMqllh~rQ^y+wWo#Ydyx4{><12)%p=0&obCc-s7!KLJoW-W)ZU6h#@%===|T=h>TUY^1UfNv9>j)xq9NJy zCW1S%)&w1$_Zlj^7gjA7gD*)uDqYv#u-)40XJqXL@?Wo6bE~zCU`&YLgV)=LEr`SM zGB+he%9=Lqe3BLT7bHuN)?O%Ux$b;<;RHy$$=eLywR($wlGC&9fZr(2;E6Z}5=IWV z9m-|(wyAvB92N9kRFxzKBJma8=G+X>_UtaTdHj)O{yC}n{dy(-0@3_6`Q2sErl3re z;hf-)Xg5c@V3Gk~EX9p}PBF#NyrBM2R`ykxP!p#B?Ksfq2~8&z4PkHp1c3V2?e#P> zAxocWDx)UG+|}>db6pRb0#I#{G59qA??9cajdqu{kBHE|D23F)ibmB57nQ9B({gZ_ zgVJ2q9e$tB7@-M=YFhH3w2c!w)dt-1y7pT!7loklBJYVT)*@m8Q;OGZ&q$etL=p10 z01p*=wkG)a_3DGOjZwcF`d&=mQ{fibZ-!jQlsa&={%|tieRo}I;jmVw4a-N~1rkzevV?6I$T^;+WT(j>rJNbFjpWI^vXqknqRg48#(2u`6>|#Z; zPbg7d-{wWdet%MpZFKPxY!OH~K3uM-x^`o7BT^$Mg9-?FJeA$rF9sWVlU_>lU%epe zqMy|`6wuhXHI8_`HnHLS`-Bc~QWbYDyiXNm`ru4loVJ#>OVR#yi4yg`#F4=Hd1!%7 zy3oZzMNa50b@zKp z*Ye9=b ztgC!iHD&c`j#15gt+fN>+0(ko{qAb#guF-nB`Bh>K8>4Mm6)1d7_;LlRzow3nW_Br zsFN2zHjVUh?m4b_`au#K&oD`aa+;){LLy{}9;z^HZ}ZUdYzsBPjY`)=Zi#V))=BV_~pXUcI9TFC*@U&eVb}Bbz?2 zMnJ6q_td{CFZ}IIpy5?c=KPIoxagVVNt|L?!qC=141jZEjs^$Ri8OIOv>Nmme#%S* z6B9FKq8~aQem&6nte?^O^5WFf(Ib(0%I*yr->Cq%FNd+v-ib^l1YuBcq|CA>!Igt1 zm*d@l`p=6q)fy>&(`smIk$X?YBc{ja{jqUiRaQz?L7JbceNi_S6tr(=H_+e5KIdund3*cBsl+^;dfO zGvfTy%OH}MtwAhZOW!Nv@(_SMeA_%Y%N#x9Soi3ft_pH!v_Rv&x2rw-gPB^*$5aD$ zJ#uu1J%{GmlO1lHMB~-SxZxV@>25;jd~K#@7o%j~w~J+D-gU7Ef1s8rwg!<-gM^!# z>kFxx-Wigeeq+B!bFV803#)caPjlYGTN@%5-P22AFbw@2w_O`^WloT^Kz%yvZQfq> zSJ#8;-u4vZ*gKWGd?a|rO+9z}=Yfp#R=)6=fRe63iT$;+&KFvf2j1=vkf|JFXhMqd z+Z!Ba9Z`Pn72L)x9evaQN~iS0$~8Q1UDp1^fmm&Td1|pmv=eKH8+JzHE2Y0~-EV@k zY!n(fTsOfRCzsq)p>BBplOa{WoPyGr?D*nqB|$9Q8WoJs5QO=@?WRh)qohrxUt9O%VI@x@ken#V5D;VfZ#Nt= zMjny9pY|k@cDN{Cdgo9WXfu9Mx|o^Wxx*HLI9bzGx*qg?10a?1>70Xu?{DL~k6GIy zp&b#zKLAU49q;)%5bh^Z-fm?$y z_APBJhq=O$_YZqR$xc@wLYT2cA2Ph%d4%-^n!S0mj$$~gMY^Di#_6v+mxg3Fa0-?)=ly6zP;ay^MO1px$5avLc<7>YsmDf6A;FaNFE__DpY!5h!1=_8k0c z=8@lFrvnoB6oyN>_o$8EXQ_2wf13APx-GE5cF|%VGyN3tw#$o6%c#M>9Y0#O)N-2G z{mDbk{O1eZ+h6eOSlA>tJ;#+qvESBJn;RxKSEs{)&<>SrLj9@>jB1W_?_~;RN_bM<hNtWom zL$#tntPTG&C;g_x52lf`_Nq}dM&l~9sR76Up-lR6$D_PYGbGgax4A+4BPT2pp5f7v_H*7jhzTf$wR3@=P|_`@y(sj&vd&bxOFd3F zQ9|OcJ(wZocko`f%vgHs2y=2*HfZX|$9`P!PiE(z3{jBF!*^z%?<+8c_B&|22j9UL zs~tY)lkuJre+?j&E)S(f;!;nn|r2X@idbzJ1HcJY2IaZR~X&ZEdX_TJh#&hp;y=UHKS-Zgj?^bfD-Trf?N$fu2) zaw+E?jxUve`|#?A28#}|AQrWEvNFYCw=?scd7iMVzstIv^gt*mzR>eF8H3bq!KAxA zVftLEwuaoaLYCpK8Wj(4oI_3zX@S%#h$K_Cp_lW~7Gpkauw8G1R9bTg>K(q1KDdQK z$^x-e0w`_j`w=~~^~vZb5EWk%PwH&5>OJ{Y9fFTYu`0`ZyLU$?$jq$sYbT4pV*&Oj zMZHagXffg&@@bR5+#S#8`o>(=@)iW5z}i?zvB7b}eMQ1ML&dn-cuq^iap(HVP{p&? zst*nM?6bg*^c}SPVixJ+jPdKU&mer&@?L2!c`IbD{lJt@9!KgSI=}gM#~!DPY`YcRU98>oIxq71nX7$T z8tW#|CB6u%@|%5@0`Ldwo4kK0$Dz;e&{_%Q;%&)EL#aMreM>4QPaL3Ph=DLay*-ms zWqm%?k%C&oy^vrMDoWtqk+}Zq-4L2%0H{&r7~+$=L+@zcAnvj_`$9IU?6BQY+XD8u za(`ihOA-|>PNiI%c%_;G>Ih7Qte$|pD$>5J6&R`*)EXbqN!seT*`#w@0sXFp$FGHQ zFOE`;@Bqv^t0il2>5)pEM=O1?WNzgP;!DMsL`1{ph*qVGC+Za|tq$%?^t>;1(R)RG z(8j|=gy66zSv<&*jfQ6!V$Z7uzYF~P%S@xTqIicQA_!5gw`-$CNxHu+v(`TV#?#ea zqVpXm>tlLrx7CVpw|7Tk`(x@?i~o{Wb6Fj5oL&9ZQbxTvVsjlIa~qbubJ zxe?xaNA(g4btTP_-w~=A>P;KrnAendv&Kf7?W9J>epSa>(DADGHtdNrW_{LbyCwXNa!%#`A%*h@Vz?M%Bf9KjG(<^U!C(X%R{kQLu5=}DOq?UMy54!GQ!ob&wONU@$3dzjDo;o;lIaSe;U_Wu=S*+7F+BriaDnWBT(^Kuhe*11s`- z-2oj`Ne`h8in(}Uk6iu7hA#Odx zJC0Oh*O9G+h@sB_kQjl3TQ=#3{#e6pvKZt<9)1yUDcIMlRnr-}U&RhBY^U(fT zhjl#<0o}=}#K%ah+h>5{fvX9wKgJ}fXS5g?A2~M`Pf>C#Sz-nlq`T#n2&Ov>3|gjc?(ad7}+z;g~#OKh5kWPeVIR zY8y=l|J;_560N6e%SlF@?3qAlMO-hH59a50~qY!})NFy`h3c#lS;d)ewu)>C%t zU;itzO2CeZRawUZ%zXow7x=$4xedyB0poI30kNQsTJZ|8?8htZJDWKACNk)NTM*{n z4`~UGQ5#!i(IiAR?A3@TMO&NG#@g4aeiAZK3dwO<;zpnq$&?~!SslTg%FMG?yF0BSeFSg%ZE{&gSY3#Wy3DK|ENX< z8gG?u9%?FS^@{qvX_t86BgD_7xi1Qy}e+)eZdZ-EVb8eb!RaySK}OHE>6zJcKKT*Xs6CDOBS}*ScGEp}O~uL}^3< zBJIa31{>`S&vT_N2Yb%_qB{~jlWqX#Y2pmI3Cou3oidwV>(za7K3YeE5L4XyHQ(vO ztP*SV5#gQwQk zw=b{d@rp%HJ9>RI6TEsXQv?(`Mp*q^TgY~--9YsFC!dklixB#1MghM%yH(Aw>&A6O zk+O7iHy!k z)+a}y%kMx|0EWj173v#I8tFXR!Kh`Lq0f*bc}jQ&1zNXRC_08-*-fTVrS=$TM(Aju zz8I{sCK>2z`rMS$X!h=9pc3DDstZRx)kly#5t~|QC%xSK6-xXhGtwg<#Ujo4wgvXR zHFbk%AxD}iFheX*TH)nvB}`UCQ5Ev~M*cu|7BE`{TRCV7jnpfvevO?=ycGNFT^QW> z-NE14Dcf&fkV`~%a;J$8C04XIK3~i4@`j$=PE#(40~^%97^3BJun&X4IUn`@1jL$u zcp+HN@Q^|1qGl(_VyuAtZl_J})IU;%=LFz42t#hsxnK8Sh+*Lu`zZ5^3!qD#csL3G zczqE~vFvyDXPuGFWa9xlJk7`uchPxF*~j9>nfU$DlUorimxgYog(h+_ik>X?CKxeM zJl99u*D5%|-{){z_Ky>|X`_9+JNQDG*4IXbZyp8WC$h!ee=Ct*R%=ydqHa|1MYY$s zCFOa`YmKaNe~f@SEu$~09FIjs7CiQBgI7%XSJ$3ZIU8JRqCkl>Jv6SX>i3%2 zjmY*9X&f26s^q@)MRs#z{M-Dv&F06ly>b8*H5rhP?7XQosQ&e)+m zG68cp=8|yl!BzBWYuyXJ9t*Wsx;?d_;bwY@<%Rxq3LN;7t|*NLcr=;o&ee|5?2hfy1X zEFSni7{%Kz9=ydNKY#J^B1sU!`|3Rhe~CNh1D3ToHcW8{*VHy#raFkjq|oydoloJV z!t2b)Wj>c8dN)U-!{kTHXSkS0R=7|7d8Tdn7;akEM-P6j{EvHZ&y^)H{%?mrIbEtO=2NB+JlS^pc~+w6&} zpYBE%WLOsl85KZfWDZ&|sdjG!K8K*+&vrOJqz|c&C~3c zG1-J-c#JGdeUDu3MI$ z$VY~E>)qDs%f3s_Mt6P0ch*cqJYUjjstZtQtSM%gWNmZ$Yo5+ltQHIxA1r6%4Yl34+6MoK@cYs;O*5B!^@0$YuX7`A z&>;*z#-Tq?-7V@{6jKIU<1fAy%%=X^F8;B$%j*U~hJ#SMy_$Rx%lUwv$+$j~0GcY_ ze(x%Oq!sOm?$~pLkP{@WZbh4flHZ5HCv^k!mH6Y&QLAUsyZs2blUQSE6 zw-rHr@Zdd_%Jy`vuKV8=ZCx7Agh4x38@sSx+;BOSrdR3%@TkgQoG7*{VGsjoo|)EvGKg3Qcrd57trjy z0l^5JV$uw|`$7J;+C2%b(Z_Hr9BcL*sHX7Bixw+hFvH&HX$Pc$baMw?SMKMs`)q5r z-$ep{s~y*lT;U%+pe+8;wMPg=cGWzeV~CRqKu!1~k0f{G7?D07DP_1k!R7WfBrzvr zM1#033=;g^q?})9+w1Herl1rT%%srrJi7^V!-~(@B=}Rmz~HoFp-r{PU4-XCVo4Be ztIXbKrqV3sx<4rTk6rnfSBnyO_=`K!cb8uN+SeO|2Sr+A;Ngl8iM?oSln^Ij;nNH@ zgm`Peok5u`9JzXoWZ&(}#~I1+h{C=6U{b~P9A>?hQRx+5uEK=65*}|zKW|JyxF&dQ zGp4Jo%ugtnoz{8g)@{@{1kZ^=vLVR&JgZIt-W${Lb;^CHmM9lFM?w3Afg37)7HNMOx?e8mpZ5IdN#KRL6Hje1 zwx5whw`dTNFlTbZfXpQQA)8Dj2yLG-3iw>Y-FCK|w<&xcw2Lnm9#ip|Wz-*7&~j^A zTPGcS;x?(80h?be(K^+V(_}ngusL;7fTjDbYcaw;s{|R^ilmM8OnDmEiEOlR1g@Q! z!|Gaj6F6|wiF;G!HW3_FRTBkAr{qm2iOVq!BSc5^bl3Wp5lI7GW&ZudQOHwXiBk(rNI$7cL*>unc zUPH&Js5l*vFyRv_j*j49Pq5J-OkN>1I^r{-54t{%1!e+Nxe}; z*nAXeWEy;pYCS*iZ9xIe_ex$Zc8?D|56T5{9)Am-X%TC)p5 zO*(*RG#w1P%>R^`m~eb$-4emsQ_u{(_jKV>KaCch=A*>A!zvB5|AGKi$x|tT$~Jx(xifp$dG#o7^6`+HUxt;{_nd9Cyc3b8GIa zdBRRAyT=$;T2qf=zc*t#CFtkp-pZ9RUP^<@V0Kz+t6Tv~W7!-rHf)o#f!!%o6e_iR zOvytBNpf0Ng&_pjjFH}>^9NG3P;Jdhy=y4zsp61{%F`NqEkV7*G2Is7=zx*IZ>b7* zh=g(@sNF2Jaqce?lK&pL{}Q8rydP6O%I?Ct8tM$u{5QYCIE$>-^$@NX9SnkgL3Kw< z4lkC6SanLLDf)~Xogw`68G2RzaWwZVOOO0|BzKpysH{#aN3BkWN3Etm^?!x>jO_U* z^nQ}eaJ>bYtQ@^cC(^qC6i`XcHU(#1OpJ{n*y;~<#YP%?3DL_;$o z-6ftR3%7&p)kUKGB*GGavcH$TN@DF zv|ahXsZ`LLo0l&c+K8V>4ux}k;GCii9L+u4!jv#P==&6A*=*AP*b+Qe{n;h)hknDJ z6ZW9x?WBJjKKA1}HRyBEP|THpR8kl`8Q(pir#8vf5b>-^AMWi}K3N6_+i~*v_7^7b zSj3J$Gxa5>DfEn{kF2HjMlMgvr`vqr<*P|=4{B~`%h-`DIiL|UixAj zzszPCKJmy-NdnK&M6Em3nb24BY#gWM+OA$wGX|z{G*WptB4x}SMrx-cgw^J>yER&9 zVXMt+oq_cYoG`+3wgcG{M{V=Pfy=?=?NQ;bw~lrSLxny-dlEQr))l=R?C5%GF?$~~ zPZoLy%r^DjbI7klU3JO%Zoj#1y6I-!_umA&t>9S5l)a$u4mi8mxw&9{wWQ2lB-+I9 ztyu0T-hXzx>j~#)k&u)gr||PERH!~^*7!PpBaUj=Ux&BtYOw;b2|Ym<6<1}M7v?xl z6&<{G%Vb8du>^ufgl29I0~BB)7%%LKz*A7esd-+*g3WB!v(hMKII*o^qglyBqgzp3 zvnH2jwd0IKoAOPr^8hmzI~>FzyNRl(QbCw}syF@AVsHO7K>C}xINbg@F*Rp$k-7EV zKP9#QN;P(ZWrI!}ucux7b!g>?%Oj;vc|}L{Ns=xhD_9eY!FCGcSIv(N>TQj_Kz`)Z zwe7j(Gd!CVE}<3{RZC|*OF`@uV%Mt#*QQ_f8@|9PsIfCaPKxDYt2F&Hc(Z5o`-HhX z2-fL6lvbCtaY5LHCtnO|Pl`+!jzqnWeLb2^lPj3?s=JBCkJf6v{RWuYZ&CFolSDzR zq?^y~BOCqQ5Hoo^hW#UT%E1u+pkK=SFOn-jLt1Cpfk1x7b5zXwmu%?;9gp_H?h{r) zzY;}eLJ~`i84tmme%MRrF+gpZWtp zg_!oQ+wl!L*9K*AxFcJo&92VwCq%G$hSt_KP4L(~x933OSU}4;c#G^usyLtbmq~A0 zIuDfLEUW}QpQOj5XKMYbR(s9aN~8!3w}?qsqZzT{nW9NsCimZbtBv`3=!4Do@>WS2 z8qBWjDPr(Y3a;&n`*u<$T9M1~q_`aYDG5$cI3R3*-1q$&Ve&#g-GK2om9^uevE{=8 ze}UD7@e~QcL5^C!DPpSbdK^mF2;t=7c@6o`mg}F6Zc+I>W?iye%K0guOfn?k*@A=u zaA}T2C*SeevrSw}#(7era946vOJ_d;$U%H&R#!5(ipDP{!99?th7mZsACGpu58D*b z`ao?1mVcqt0g_k6m2up6a@?h&ndA8WokR6pY4DmhNn#7qC7DLpEh9xbK%c)%YnvJK zML~FacjJJm%;!`Yi6ZhUu>T;C?FL_)`e7!LZEsEWn3{a7xA&oOq$`*tsmv+#OSAmR zg}R5!CKW1ITo!Cfrs46iTk~BFss1eagm|_v1k@$y4YlNflZF|*<2`Br6V){$0`2vE zfS`l^(04d9qMxVCbx=n@xAcZJAL!hlU8R%g-Iv&TC!VJgo<4yU+MV;(o~{IJ1MJLC z?8}A&;C7%4v;Rtg|MXsWG(OgTy!=_0hONJ()WDTrF0flN=q9Skg0eNI_?Z!7E&J+~ z50uN(pa#R*kGA1iA^puE#K{SE9#&3V<%7}~e?Vr`8iHNym(QIo4x+C)OFXXPxMcsT z{yRv$M!#=Bs=lCZim3M}FAxDetK+^rtQk1^=+ONjVmcfD$FZajgx_IxDi_4R$puso zj!lghA1c#6^f-?S>IR8wnc+y?;Qms#|7Se}eTr zj}~NlrEF!arKURBy9Y!FXSItodiucS%!XbDmP6Q8nWS4hl*wMx*(+zBcykmO_7C_sAwrr*TIxX z3`E_c%THivIVNyXK(i_Y8Q7u`XH*1T3B1N5Q$9l#@WJprui({*gKQOtuj+bQWqRW5 z*wmWbv{~A*;^#9>%V5o-#}jlUB&1(Hk$i#~U@yT@;KpyxN9n*9)>c%_B#`)|loBvj7`Zp=hWu|iK%Q13LzS{0I z=ASNO(ILo7SvTbhyfN>wLtz1(b)2}i5mCLxfbV3ZrPWkl2xhR8OVx(9Q5!`xRs(&C zW_RotAsmc^)qLRw!#`=&(DafO8ji9{7}au!ZUH|Fp3{ZUUe4#X8cG!yDWLoI!m>!U zzsFJqhze46a)&hygeOmh_{tP2;ItW;>qib#jiV~5RpTmYHRJTUUWPjGSET-$k4Byc zIeqo}v2qVdoecOg+Jr{!m^6W*4c&q_6SD?Af=@KP3{xm;mR#1fi{=<^lyo@%2N@7J z4}n!0ZRrGm`O1I0Nq_o4_CDU@V%9rZe|NBd`t092Gg($*pq>}58)^PCp!lWA|4u&t zCY4Hn_XFQ&7XK#;``0fmvM%5`r+AKvTK$Ln|C6PWy%6*g2zl=Q@3ziG;eV&~XUX}W z5dNWW|I@8Mm3#hYGXAjl|1%l?KbQ>J_fvGPLs{}JRkzmu(7FHSDuyj6l2(MZNt$Ny zZC)13|0{padIfOJk8~r~Q&#g=pO3o$<(9MjpAH>u)-;G+>X8?lPeGSRj)uaP#JiLu$HSnTYIO*5n9ZP7Px zJ6|XJ^UYWgZyE9@Cp|Yi0cs5MXa4ae=o_dEGc~B2DcoztbLZQoCRK#VsUvLlcrG{3 zDV>u8a$r*CCIXbG-PU~f#}o4W_let%Jpk&0^52dzkUaa(W^Dqj*GYV*tY3PabTpSP zXreOfl>-zg-*|kh8Dx`YM`!EB`l+TDE~!fSl&IT`j#rC)P#f8=KcKhCILgU1JlKkm zNZyUMW2l+U;1`@3lxsx&$Z%Yz`>X7KQRch=IxD>N=9i# zVFB_9Ce&-o#}*P^mMy#Jy_D~jZsWljAF*O{!p)bA*vSb0tX%(C5@>pO-XmPR?~?k{ z7?oR-#IqZW3pr@8VB~ng&6C{V=1)Aj7=FvN*P}g2ybN|jP*{uY2GMS}k4!y|eze-S z^x|R`z2o5R8=Ay1*fyf>4UUaYzDvno$~rU&N|8625cza$U9rYNEVodg5R#=n?^*zy zBnX)i$j+pm^(M`<*D0H|m}xk?Uq!BMDn;^_fC<@BAb9B&rsw*5ptN%1xmHo-(RysJ z8T9)o^kP5Pw7*+#v}7&tutvuGu639RHT&A64vc<_&G3b5c7L@_wd1_ugiPL`2cC_< z_S)8G=`-=O-(2=N6l)(8>(}*V_B*s7XitM{gZS42Crv_8va0y246YW@aDLT_q z8fTMJSNzA4>bDl8u&r|(=Yp|N@)Arxj_J@K0c@=YnAFfCxct$67 z@$bGc$d~C|Yb#!MK5QTUa3$~_(ukwyVg7!{mq&6*W2&pkCTGcCGtMjz`gU^ni*zqX zC51OBzI!_H78BGfp4xASNF6+mbZ0x=a9F4!?AGSh9sb6Jq%GT4X?Z~>^Y5eN6gCZ} zU9uFGKZ;dK+H-ugG-ni~sWINus8 zrYx?C{%lgig_?NRW?6)~w48(vA6)|h3xanV`JJ1UEGj$jJF}^%N4!(jmPHel!l%*; z5ZgAOA&Yroc_mt61{9y-xc$0Dp)94PibFZg0g2(+kMr^#spEKHWIU)^MrwowJ`e@* zEx&i$J(m9Aks*WqW4Zq)%nh2l5+ld!0sRA|xxS50Oy|87`pgQjHdgcN@(OZVoXXzc zPO&L2Q8rd;&>F$t*v38sg?wb=X}>JMb;QI}sPfs&>MWH?75m^&L^sXTlcG8ga$+Xf z(1dnLe)1*G0ce=>>q;Jl`*@Fj4u!e*uVUpnq;xoRdjOT`I5&h>e-oazAFuAD;36S0q)ID`e6_lp3Ko8B_9ngkoWs?ko{L)`44RrB;FP}5IEY>D&f zAWWO_%QpS1LVcQDm&6Z01oAr!W8R5l>eWi7Pdt3cgm<1cEN30$*&aQGiccbHXhA7S z%_pN*VWMc2l&X*Rh#{GthhsTv+Ahcx#Z;^PB1OagCf4|H^^M4Ybo1BasE0|6p$%(! ztq41b8Uc@t0DHKb8<`RI6xvKH*_Mt4(Yog90G0WwGyjAaD9ws?v9hkr2%Y568Qjpm zOoNdoa;2M9q0J<7kKRT>9p=D_tLvr&a5!S`bf}Qk#=<`95Y>?3PNOru*;neR<};_z zavJLrUsKZ{zk_>NZ4T>F$rVSJfg#oD{qUOR%(KzJdzfHjmc9{s|J>KqPL?Wes-;pj zZg3Rb#9CJxRG@ixyb*s`r+C5?=nrEsE7ogkCSCO_RngGI4dG*Stv)8=R6k|8w0ybD z?yRXv=U6{Y)aN~kJ(p3|2eI+Q=Ta@W+m9?wv}nwm0)P`jHHEUv!r$?@G`5fmN%b2) zNC=2@ZwkHTp%2?ysFd6R$?XuB~2dtB*9!Wu;A?L$X&4P&z@?y(U znUYA3=Oz-{2I4c979g3H|3}mR$m7bF0iY*h*@PvE;+Gv((w|#?g6xxW@JnJbeEY%} zz`w0DYeDxaiqr){?7t{iyD!turZNP7TGq?CszR(WoP_U^(Nqz~VHb=Up;Qv~JmChQ zMJ3fZT%)F;$N|u`oiYoqq#Vh=P)7M$$mc ziMlzytu{K}Q)G zDf{_M%&N6?Wa@iWId7KyJ~xvsf0+^Az1F*OvPmWZO{5lkScxnr$nMc#c7HbG-av-% z0Ba1^{Mh$Ucw}>{1Iss1K@U-V_-f3GgPDou>U$MKhVFhfBaMf=1{d>$DyH8VwsJr zB<#l3dCHfsf9xQ4Y;$59f7j)x*_wVfq3eil;e#^n3KzfeMKqq&kThO(cn}mz3?D@u z2D7D#Y>9ReTE4>GNsT(ZWm4o*-mQ`i)|Mtw%m=Be91+m)oq&8! zKr@o#N0*X5=bkBxG$^*HMBloQW`3zb=tAKeHf?*N*jFIK2m!a8Vb_dXm(vA2!fEdm zKdE@rd-CooMFCuM%MaaWRM}%`SG&Cj64TKgyJlJ7M8j$i3auaIO!kK7q%aB%R@{F> zb89NS#xaEJQtnmeNwpS`);7~#JEJer+Rhqyh&{D!WgN4L>-Bc~yv;NH zl}-y`+Y_3*?$UGl12$&?c!Drq4JS;#7gcLlbm2asK+}(-3z|JMBF0nOUy{+fnU0QW zn~3(q)T)h|)2;{;!Zs&w9{TCxpoubPeGi7XWo~yo6_Sl+s$!2dE)y8fbI0RbNCFC$y8k_N^T;Ty*pZo6qp%xGJG{^KycVg6GTQ}sB zcd5_(^OSY7{^%Nd%wKdrTT8Evb6s2%@?2InX!7k%!4OD%NJi&zbKj!O5ceoRzkH0l zL(7D+8^5D_tJp10T8__4-aTK4=Pg@6o2#drlxjWi-|Vbff^!S1}EmHbkf&V=IE;G6!X_LOJXdFrI2 zJCY{h>Wi*xVjEzan(vj}HtA~sX_xE8!`=t_qP{Yud8>`Ubm5Ag>Qas?H>XP;-Zw{N z;KBsl6-AoQXj7=mPH!BaxME?FO?)CT|LSbXI}?%aQyqTuTk`YZ6@H!1%|#n?c9k1# zz0o2`A8F>)-6dji3~R$(L|hhxj#D0wLSN!J-wN~FSd&vo(PoAj=XWs-e<1}e3x5YW zqa_sqEqhC)L4=@|-rDkKOo9jL51uVl)7@3oe!H{7ChgvWqFT=qczsMy3w7|57?&z} z7Tn(Ab;7CH`26d4v+OzEY4w%E+(A~4aXf6@ERr)=JYc184yWB_;~m{^r)e6!89)Zn zLT+f{$q<7`F1a50u@|M_ACCHR=v$IvB~l+-9PjG7i_*IQX-}|Mofzvhj1HCc-fMnR zv(nN4>E>H+Cqq5=VWZi0D||q7)l`#t{`knx|6rG$dN1HCmwrRaiX|JRQp?fpxPKf8 z9qYHQ5k8aT@?jd@2Gy=-k%gvKG5QWBRMFpC8LZ89U>hf=`zF1bCm1Cp@)%97b=BJ*uKh#8tl+yJX^FX$XVGWjzRjBm!>;Z_NyZOavqbfEyLADciLE8w~A1i z_za`2XW1>6w3tyMxG>4FTn`Gm{1&lN>HRQ!nn_o`csGr^VD08T8OA*UBgV!N2WCh# z@I|xQXLUOdZ`f@2vEfv#VHFx1Xt@PvU~*^8kAEVrZgXO=4+;8BaOYHgVhe7MhAVGA zi<1H!|9zcUFpY}Rju%rZKBXsIS!`6SPe%A$4X@*}tQvCHy2)K>)4=)FecPNdrOX}<(^H*j z<^7>f&C>C_&B?%_cMMW0gwl6s($#m#5+*!0+TXLb3hP(9Mnji>Du64VeeQBX?@-?w z_#EBc+X%RrU1z$XG1a7sN^;z^YVM)0BUqqoryJYUmtGb?3xM9%*4$Qma1%jZgcpW^ z6ga5m!CWUFQSF7h8`v4;$>qyYNMB3(HRst*xxnTZft0=&*b6k}%My2u^ulwaU?PW2 zqH7TpobZIH+IrMz+Sh3bThd}z4vXzgVzC3p#`~?^oiu0Qpci~63w!o$PNzAWb>Bp@ z$sr$B{JX8eyS*LJ*zvT$o*(X;_xha)x(YHYUlwr0Y?#qrrY>38&oPw}CRA6gWGoCr zLE&=lXQEXQ_?+lI3Y02Re66^U-1H@SH*?=Ze^5w$O_8X}rda?TqP$oLwyVy&(9l&T zCI%ovjyW%84LnlC+vZ$JLFGNoJa$xBOxn!W7C87s-RydJNSvXiX*xHWU){40J@a!4 z1(xamfSzo67VLgs2Xo(uE9DhhIKC69T zzmomfs)T-y7NV@^2De0N`9E%Z-gEsuUi-t6!LZMz5kzCYnsexj={`hvdnrZphpj`$ z+xo9}5;t7+?AheE9Jns>?&xG$rlFXR=b&sw$G0EcAup zM^h#r#PBGiyRGU)KR|2j(O=@uvn5MkWOZfS^KxCRIFK7vja$XiSOl-v@7>yjXPbME zA8h#!60R~-55c+Dga>_Z5>NxRsi=P9u~s5N9XC7;PBfw?n z8yO4hQ?JOI80&Lc>dBW{feLL7 zUCu6ed`f?rW_9;wLy6X-C(|wLt%{a99e7W~l?bu8=fSZfTAu{d z_szm_O#=5>CCserryf@R4lDmJbIAhlII0Y)-`Ex~Wb_hLqE85r*F+H10L{ zR8U!%@CFylj8DxUx-LCION(Mf!uB(=-fH3zz8dt_e#fz9W{ftpt0Q?Y8@8kpa(fI} za7+sT7v1^s3 zDa8uT_7a;@CKnXa+cwvppWV`>4L!(|AhU4=~R*is@sUAItyEM zmwBE1$8mtB?dnyWJKmQ1!$@&;@MJyg(ysAQ80+9kX=TXEsZ9!*IyB$gF44xCUt~CL zp+2OT^sD+c6m7}47oY$Pwd9hGcIH`?o?V39v$G3eFWqpgeOjnlXaxCg?ISuhj&RZ+ zC@5(lrS!xYOBAyC=s{|g!s{aR+8>i~@L1~O+pECVp~dDEs!<+UUsy&d$aMRS)HsA* z`V7z9+%=XZ7^ggz;JpNlxv~6^e>nNss9Z~Uj3%QIYZHjXeLG;DGFtAmRcLd$1e!L*j^d&>$+5{ z$M1=YpjDA4axa}-VQhhG5{^ad90FxUd$!%P*?E3tuP*7sQ)1P%{#o9>x{QKP>q{O;ulT^^d6$VR(1nx9i_>XkDUd0%ns*& zmhcHOW1*Y4svP$HutcBgWKCO);&i<2=RW-M9o2oYborD%s*ZLrFcWMTe!e7+C{n> zcao9QIX}3r&a^y2AG0%SgASVy3?lY&b8dw%H@j8EH3FLLvNiy$*q{kXz6MT^Vg=~d zs54XvKF5$?{#wN9I8U{B4%Zu*)*Cqxv>Li~NZ7SuQGg3h5m?(HCf~XzA#tXsxVy$SH!bAjU`hPz;wP&moE<3KQwFNIPq+X$INoDW zf8dcTf?A(N&ONHn{xtuZzK&3>T*=K+dPr3KQ<1>cp`Rtru_sfkrSHN{aRAz0Ex_GZ z{QC0uUx*zFsb7aGV00C3nR{&D<5mvCoq}HXRr|vt1J&AOa`B#2(uI+;YLd7*XxXm07HhEAjmW%_ zzj^@RlQ`FEO5FB)I@1Sp`%xg5DkB5&^T0xwh{0G700AqbsjB|Zy~@9un?D;KO9RRU z!X=a$$@p=7mXeK-p79ErMO}nr;%i!Abyf{FzB1e)MmROHw2TdVsD>ubrhemys(iz> zKK6_yF88`^_rz?~d;4^9h0*HB&b?wImC7a#SCJNn9gQ%P?h;0)S>48Xh=!Wcv(w-? zYm@Ae#5HG3HJqF7;qW{1r!14#U7D^BTeJMWe0c#{nX5y*gc$^vbLqEVr)GCN=QvGT zEN#hM*Kpd5Qkl^`89`nkim_T8@kVVFooeY-k}D#Rv!PkTNetwNQ{ zFxii(y}fY(x)^f1jPs7wtwWa0q_}q)_gzN;5%@6cRN(R@^T(eNW@g(`U`sRpRPOe^ z7rU@f@j4t))^NRDB+ARiB#h}M9e@prl?BDdQ*VuVPA1=aevN{}u20zL|%S&4miO?s5Kn>3HCTBKI-E zR8eax;dE|V+AR5bfV}&DGRQ1%Z0Drj|Kuov08^eO4B9jf$%Y6%EWX5H6QQRgg>w^v z)J1hs+{|?fD0ImO+z8yO%8xhWdG)ZwEd$%RNRyg7Q!3AELdmizz8yomdGZ4C#+%vc zvG`+~Gp+U$$XXRO;dqdJehQ|vzP(IDajiEg4zP^ADs5<(Q95$>v6FMQ3QCWQclW6t z5`Su%tCqQ;-ER(m4RWL4e8u5|I2~Vf;Q7_t3$LG)?PIHV{1y%&Lh(diF1;Yw zsk8jmTtc&(4wIElCUgq=BJ4li75<*^%6+H~R);&hHYVJ+WsYTMOZFkb*u-da_A4@e z+vng_x;VQ1{jU&KX{(UqnZ(Pcc;MO3R~F_nb1qj^IQ-OKj2sdDS@c=okqRz_iy?P; zJSGv(pd*wzsc|p=3W)~~_X3PoVSnHrhuC|aQCn%vn6y^~0I-Ut{tcE8Sz}~B(nt2&FEK^$?Kw(T=%+Xx^4lT1_;GM4Yt ziD?0ZFXYekh9p=y6KSkAt+M*sYXBDowUlS~`%UvDXXxMJl<+g5>;@S_Jhs89NfYsu%SIQcFu z+vg)*oNC-~t8H%c(O;$`|BW9IbcLQ(IT$+=APWRuYPYpg%`H@~Qsymfo|i?c%-y7! z&fJCKHt~DOzgk;ty9;W-Z4Z!AWY_QWRE#tz9$JoHOW3+TO-Ty|v=^c)bWXp?1b_RQ zJ4m_!J(1;Yg9(RKyJ$b0h>Oz7eKi^-Q)@0HKlTSb%)K9}Bo0e;ZPq|Dapr$-_AO0j zE5P?9HXID-!S&Hn9~rpm5zmUZ^EOyy|+@J?Y4klk3o~5=QjH zw6eiY&^ijfesPQZN%TErY)~!7TgCArljWeZW?TJh{wV6C21 zn><4DVCCRvy?kx3rVXGLY#$DFeov_{LNQ)^yJ3uutaH_SH7McJhDj$m^&hm=s@1Lu z7pP_7)wf|$46HuO#~pc<{=H2+9KKo+x3^UA!gRL$)g&i6eRf18l%;6=OyEJ7xj>S@ zk`lNjG}eS|g>)f~ThC~|UmlJ+ZXx$4fcI`voOD&ouKA4dz$lNlovBnuWGx!_?CUJd zY98}yx;1yB2xg+40wR8CSLBTc_OO}&XWMrE17 z?|?WhP_BIW?ZDJT7d_vd=HK&=Ul0Hq2^et(ijcwTH>n_j)pOdnPD4SB+_^?nej)WIIJ^ z>ppQr+sp4~6sv!RAxdM2QU@Ky-qn5fYL`#Dqw;Z`@ekYkvKdiLTdXIbP;H3e#ETS}9y3W|G*Rb~m?!m;}CP)yKjmR~KzT(4^ z$J-N2dBcs{cgQ*;VW^*EGRoJ|U-@#PHhwn!INO?jX7n(>_U-GZMDB-WuW!3)6(V~O#@ zuYk)AOZH~mf^$e1r9=&jG?z(MWpjbU4Oy*lxx;|96P?4D^@Pv68PdX?4zq`YwEi8~ zalj#^mkHnOB$C8x1(#giDIhYVE5BbhZ<1OQmiMe-TYxxsK;!Q2jEqGRv#aHxXZtIe z*2U(L3&nCuw@Bk?3(U|Ut61s;t=Y&*yDfO0!d6bom`FFcc&KOw!zpF) z*bKd>?J!56j8BUmZ8{TMhYF4DO^KaWfaY+_vg$wVmw#j#w$h44$z-x?d1+j~bvX1`-zL6K&YQ8D{Gc8#z@WvU&RwCUc z%IpF#?+Bmo)#RKz%tweL(>=XzxUJOlYU1Nf21F@F)i$3>K_Tq_6Oj?t37)N$U9Zbc zCj|{WKAZ9o<%tByP>tB8$E&fOO6c}9;dK&fp_!vzQM|Nx zs2VWqU~{(3rFPrrml4`rejdQ5^TtjAyQk@9S=}_}C$c2y*)h~-drN0nVa&=PBThGX z%GczTdW-SgtYoQ0g)?Q9i?RcDrwJFgDzSN~A|>=b&_vamK@Gc@3C_TD%+R^YlG%QdU+r*D;V$8}7;Nou#PW(nh_gx0Ev<${& zEeEpbu)<{5o=^KI0mQ0a=B(?1I&ZE}!;$znWaD0+z(7&{Y^{?zXfa9~UosFhCXbyIg`Ba@7qMkEkW%80j-bZgHqwP=7l zW4p0tMQ^wS>-LZhn0G+GQn!`ghCs$^qnQtI{4zJTm!HcyT5g{=u{lrI7zv!7iFTfR z=8t6&waR^bNFf=r_NroMO`Nk_c0) zq`9cDb|FEje&2X6H`)JS-tW@LF&!H<8E~+>9NmM$a}j9>wFBGjiEs5+_mx3X>u%Cx zXVW@MQt|HRfVo=^;S*rrwaz}O5#ru`2baPxwH4MOjc~a&{kBjW9!D5*=YnnI6P1|a zWlN2lsA1ZpQR{Tb&`z}f5VR3%SxD-A-S^L?z zTSnR!%eO8y1S)#6`s+bzi$wA!K~9ZDSAs_jPAIdJC!*uujmjEEzAB6l8{N)ac8*Dc zYXLqLs7m~`&BiItfK(00X{;972*Cncn%-%Qm5;J!*IUC<%&ksWBsD6_&Xp^{1HWxW z9L$B_HzV#Y%$J4KNZajFc^-uzzM`MMg1}{t-G&j{FMQ;2Z9hMVE4b97`k^~d@YGcA z#~TN%%>3&EL_tUX0mN1go|g`GOw-4N7CLNW{Z{_Lez`YBT%_05D6n8ZT1h_EaWM4w zFyzh@$NE$8y6EQFF9KWJ8JC?5+&OABZ!c#ksXvPLS!KEMWf~;^_R9u^8JN)tU{~o# zjTv(MJ`@pV|DQLQe~%vliI-a31C|aSCz?v7Nl9E1+%jBecwEz}JLr#Tl z>r6_mdNxQPUod+EVzYUccjLbusx4Y>m){p2kjKTaUan?%mAEtYwLd$1evf}Ii5Pf3 zVfE8j;%I|{RIJ&o>SQUaCz@6`?zm}}oujtIs@(AMP;+F)YGsOA&E-~RF5M-18+l-e zO&_ACFUV8eRoPg7ZGgbu@qw&pSJ_TIVB}-s4OVQ4)|l8sSUGFHBc=1E7Q0baS<@vR zpSX$je7_DS@uEJ+FJ7%>-yZ5<%b3Zl6qNP&LHRPi@^F3U?@Vmd8y~-qGiY{i(V0Oj zFhRH_O`G#u?~gLboMuv&xN7^@wM()^hkg({A2VnID|Wkb|7_^Ek@!I;M2JUmEv$dk zf=Q%IPRy=rPh5PZH}Q9fuQJLTGQlZ`_C)}YgeK;Z_*Dz0-M~-R8*uycvPG=9!adXb zwzP@KszwtB3}{^?tz2aW&J5UC-b=QenKZ|Y2}?mp;VIq|_w-6vjrNa^li!izTjtM< z8V+)unEJ^}X3o3q;}a`?)#V?wXm|f{0&tBdX%!AC@ohiCzPqtiZ9No}+`8d8m%~w~ zqp3fdFSlja6mY`K_<$ah?9u_u}dVPc!Ai z`&}HXF1^Qz_fhtpP8Ui8s3@{?GLq!~V)Fi9)Q=NM3T#Q25V7rbvw*UsESnHdj2Nx} zPVROGiy4GPnI(0gkHDffqYzhPKIN3~**85~%Q`@f^FnjUsttGfx<#iSu!c zl?_lg$HgXk$M3df5MEP^2qTK)dU}?!;V?!kGP^ZiEuAq&8*=Tjy9mmv+xOWx^DFc5 z4aaFLdv+PH?lv=a-2%?-Fa{Dvx_<(`N$yM>xiA<_vFsRMIbu|k;OF@cf^iQ z>aTx;L2U4!9Aq_+Dt~VBY}8oGj9)lg>2z^ZeM;@*8EEy=jH&^EdrB{*m0Nf zeEM+zTi=WE&BRAr`1H^cFWSsJT177Dx%+Ii-UIRchPf7_3yd^|o+86L{KeLbdg4_Z z$Srea!c__?IR5OW2g7bx15O{%RLP&8xc$K|=;Ikg@mAh6n`2mHl6^z2 zA$#1vI*(Q`@T_xDeEvXCKuEugpD7}2-pf_c4#H)p0b2Ft!0HS{&OiBYckRH>vMIR$ zrjH;ZbV7rIaErUo48*6#@(&ue$JPPqr_(FRMc?IE z#GT9AUKJv;pVLv)e5?5}g&`y)Hq%r>8v@sj;JUii_g03SYA+NRKxgDfb-Pz;r}!P! z#NK7kIVjKiw_qkQ>gyZ*7YCGAZbQ3rqABU{l2UyghTCPUC>{B%( zX;ELMQdEnx38_;z_P&c|@$0@<7fKLC)QAel`NZ|A%i~m`EPL%Bm&{?;<)(AObl_nR zhXAi?!@QOPwr%@R7!X}78+eCp;?0IyL@V!?-9kKt`%ROL7Gl?v`hD7|g^U|ra-=p+ z7^fb@e<(XwIq$4E4iPWkc9FJUQ^|w4YpmVYw!pWH%Q!gMX z-m$x2t5jJwXo%5o=iuPV91l0Yx9VI!e00x*T(gDAvCw)#t3CFD95bc^z8eqyG^YDi zBZSOx4obxr_@hbwE$mg>w5^En>aw1i;+Xh`UY_L5qAEm|SRif+W!K^pRq^ge zkX0=X_)oEvHzLeD#by`Uny?fGPY}~II8SZ8?TVbre2{aOwatMJ8V$@f$xQo+r~o#z zs<3qfPxY?!nZ42V&47+4>kXYY86$)UXm~uO7Je&vXzxTWiF>)r{l5z+zE5+)T%puLH;4u&YJ_ za^z7N8zP^6R>K1>?~KN&n&@s zz8`becG}D>1Mlz>B~lOP?S4#W))y$fQkGW|s4-F5v&x5Ip60l)a#E;ggn+>Mvd1)97r{XF>W!gjb7a8PqPqqy2;6?{8G_s z+}n{YUwP~|8`~sdyAJ^#HT>Mhua(h1Z&N#6S;sMbVJQFR@nw*7Mz^N;^uX z6HMrSk$t=L_l+pEBs}yE^OX+n*w2;odS!;~g6eBpi?#He`Qjek*jf^gHc*Z9OcWwv zF7Hwv#^U$^F#C21#zSA_GSuYe1v1qdT{D;nnf>T)U{Ud)=S7-sk&A{sQCWkwyCiM0 z&VBL>UF4|}u}hG@E)v!;0M?aAot|t`a%#7Mi3_gVsiZNFybqFXWzkkbT0^0SRmB;v z5o6*k9|sEPjS_I?Fs(s~j>3hVYZ4hv2DSy1EF%Ao*egJ9CW*TiqJDL0U{@Oe=oWPr z{8A>`yzK#sc4zgRwnBKS!$f{k*ydB?97?bkFpB#urx1g=gaWAK9b8UsF2=C1wIuvj zqmV@LKVwvBv3_!V<4Ka((}-kho&4m|o`mG)8dnJdJ(newUO5wnMO-L1N)j6E?>z24^U2VyQe>ai8m%%z7M*Yrn8fhsB44it;rvad7;8py4M zt*Ge35z9yoC5W$wK}tF3uP_<9zcXgyN@k-yjOeq+Xl14{qZhJQH&T}&4deay3)LKm zOd_^1Y64<4-~8z~86ygRoQXv?-9qFRj{!JWVw!K#HPvfnIYZByHPY8@z3ov!zFIY_ z!_hKaTvJEw5@Ef?$h0&NDkz&XZ3f_OXfS-w{d~2laAf4(HgP3=Ed#WDE{&7Vmm~O9 zTl77%{jkrpP5+INcUJA(7a+kXAgPI3qsLqORyb-fz0EIC*x|xd`qQbe0`fEx%a{$% zAD{&RA4<)P-ry1HZGsnK^>!m zlYvxDAg#N*PMYfX+++A3tz&j0*k&IN?wI~%E*^`R|e*E0B1$J(i5O`E^ z?foa2hh$wKqsl)ZrDve>A~YX;?V%&-$Ok%Q+gha?Bv8BJpY)BMrQPIdUwZERBiAGF(3`~>TV ze~pL>J|VhQ?S)=;jsAz&MCSu6g**2R6^zQrh=m0YNztLhAlX;SuK`QRcBK1&|7;!g zbMwm?YBbv`{irk(E+lWI`5q~ce9^1`8RWUG<2Bbsdf4XrDqJ3=ac4C;e7f!7@>NqE zFe+erHUJdIknnLf)J_~i#qX9Fp&3AM>MjAyYYt2H+L9cM%Mqq3MD<4*~$KvAMd_dOk!nvjt{!y5;p~RL98UtJr0upgM7Hp6B17%WbQEW zjg~W-O)n2T5ycn4^C3|+*ls}}h)HCs*Q9Q;PcBnG*O|n5Rmf%3*Y3k>h{p-QkAB8a zSE4Z~d%UZmq?qBDU+u^$rjkLb8Gz1UnCX|Qb7&o^ZE~%Qp4s#T6`rRtvZ}b5R=OSh z`w9cj%U5)>4*(t~c=Zbnt8^P#Wntx8;oQT2(26+;0^VlN?TLDzO)fupmHQk$u?sY zMl-cUXw8=;6LKNpc91)WMG}N6TGX0y=uyy))k)}ydA+Rv{ZICG4ZY;;X@2MRE?WEK zVjJh99?+j+lm5LI!8vp{bGDWVdDdeS-qVMp*Udj%Z#-xfxb~ITRUR9ZNX+!EEH(U+ z%HaLgOafa5IHTjv*Gzjh;$=kZevTUN3l)nl@|l~z zGpaoz$hc-~9PW*C8lz3O(;&1mJ&_6<_N7?oNNJP&5;^Sfvr>Gch=9*_17d( z-Bpoo8rZ3+cUKkPyj3Vyh*5A){1tcmRaW2&l}{$u`04rSDYvdf0?V|1-QC)9`JLr_ znlP1$u8K`Yqo>fXtB#vb#XXmfP_~uQ3s`~-o!KSzyS0b##)T^QXi?LMxi-ISSk`%q z|F3qDH{>B_Uek}@HVdpKD^IMb#L~bWK@bMi<53>;!8=~akt%_Ej;D{fPTP!L4oc8P zspk|HU(N4!*=;|yak}?ONj04#S>5&tz|16(Lip-Asl3DMg0|ThpA01$7q0mU(QDS7 z7scX_OUHIl1&g4c2_h2$gI4p8M}H%cD$Os)%HX5FebR?Z5W`ld1R<*u;}v?Nd@=`h zrVwL1WU?`Q{N=J&?PBp+h;aP9_;y+|ND)7{spxyYek0E=TniX?`X(ywVFDVBb3JgK z-ua7#5LX^}Q1P`5Zoa~-ae0Yte$ajpBb%$9Xv@F!z*H|XwKj{u+T%6Q?G)R;U2GKI zgv`78^^3c7y>I?{*7ES(Q-<>}3sJS_0eWO3BXIR|>%1Tx9SIVm^qWU`3q@KY<~{VK z{<(g3=8TR+MsmKz&(CriMC~$MVNmmkV23b}f~Zk1!S8Wwce zb704o)=1F6#_QD1&ICz{ybG{0_^U2)Y9?KwkJ8cPN&W(JGxZHZQF@bQm1dF}`^u}@ zQ7yEK2!{jp(wR>?ltNKCA#~*E|%6~8~nvx-Cw;HkRLCY+J?}%%oHI9g)GRta5!=A0$ zBj0s&g^>{N-W}bB^{HHMYx5GyciY-h^s2+ujX^;|eA;CEtWnoOohw*%`~*CR2U*1% zEzq!goBG~qgLAdGzO_l�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 literal 0 HcmV?d00001 diff --git a/plugins/jenkins-with-reporting/src/assets/folder-results.png b/plugins/jenkins-with-reporting/src/assets/folder-results.png new file mode 100644 index 0000000000000000000000000000000000000000..340b03549df68a4b6618b6ebe11a895c45e458b5 GIT binary patch literal 58657 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

+ ); +}; + +export default BuildReports; diff --git a/plugins/jenkins-with-reporting/src/components/BuildWithStepsPage/BuildWithStepsPage.tsx b/plugins/jenkins-with-reporting/src/components/BuildWithStepsPage/BuildWithStepsPage.tsx new file mode 100644 index 0000000..a9dd95a --- /dev/null +++ b/plugins/jenkins-with-reporting/src/components/BuildWithStepsPage/BuildWithStepsPage.tsx @@ -0,0 +1,202 @@ +/* + * 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 Box from '@material-ui/core/Box'; +import Paper from '@material-ui/core/Paper'; +import Table from '@material-ui/core/Table'; +import TableBody from '@material-ui/core/TableBody'; +import TableCell from '@material-ui/core/TableCell'; +import TableContainer from '@material-ui/core/TableContainer'; +import TableRow from '@material-ui/core/TableRow'; +import Typography from '@material-ui/core/Typography'; +import { makeStyles } from '@material-ui/core/styles'; +import ExternalLinkIcon from '@material-ui/icons/Launch'; +import React, { Suspense } from 'react'; +import { buildRouteRef } from '../../plugin'; +import { JenkinsRunStatus } from '../BuildsPage/lib/Status'; +import { useBuildWithSteps } from '../useBuildWithSteps'; + +import { Breadcrumbs, Content, Link } from '@backstage/core-components'; +import { useRouteRefParams, useApi } from '@backstage/core-plugin-api'; + +import { jenkinsApiRef, BuildReport } from '../../api'; +import { CircularProgress } from '@material-ui/core'; +import { useEntity } from '@backstage/plugin-catalog-react'; +import { getCompoundEntityRef } from '@backstage/catalog-model'; + +const BuildReports = React.lazy(() => import('./BuildReports')); +// import BuildReports from "./BuildReports" + +interface ReportsTableCellProps { + jobFullName: string; + buildNumber: string; +} + +const ReportsTableCell: React.FC = ({ + jobFullName, + buildNumber, +}) => { + const jenkinsApi = useApi(jenkinsApiRef); + const { entity } = useEntity(); + const [reports, setReports] = React.useState< + Array<{ fileName: string; url: string }> + >([]); + const [loading, setLoading] = React.useState(true); + + React.useEffect(() => { + const fetchReports = async () => { + setLoading(true); + try { + const entityName = await getCompoundEntityRef(entity); + const buildReports = await jenkinsApi.getBuildReports({ + entity: entityName, + jobFullName, + buildNumber, + }); + + setReports(buildReports); + } finally { + setLoading(false); + } + }; + fetchReports(); + }, [jenkinsApi, jobFullName, buildNumber]); + + if (loading) { + return ; + } + + return ( + }> + + + ); +}; + +const useStyles = makeStyles(theme => ({ + root: { + maxWidth: 720, + }, + table: { + padding: theme.spacing(1), + }, + externalLinkIcon: { + fontSize: 'inherit', + verticalAlign: 'bottom', + }, +})); + +const BuildWithStepsView = () => { + // TODO: Add a test that react-router decodes this (even though `generatePath` doesn't encode it for you!) + const { jobFullName, buildNumber } = useRouteRefParams(buildRouteRef); + const classes = useStyles(); + + const [{ value }] = useBuildWithSteps({ jobFullName, buildNumber }); + + return ( +
+ + {/* TODO: don't hardcode this link */} + Projects + Run + + + + + + + + Branch + + {value?.source?.branchName} + + + + Message + + {value?.source?.displayName} + + + + Commit ID + + {value?.source?.commit?.hash} + + + + Status + + + + + + + + Author + + {value?.source?.author} + + + + Jenkins + + + {value?.url && ( + + View on Jenkins{' '} + + + )} + + + + + {/* TODO: be SCM agnostic */} + GitHub + + + {value?.source?.url && ( + + View on GitHub{' '} + + + )} + + + + + Reports + + + + + + +
+
+
+ ); +}; +const Page = () => ( + + + +); + +export default Page; +export { BuildWithStepsView as BuildWithSteps }; diff --git a/plugins/jenkins-with-reporting/src/components/BuildWithStepsPage/index.ts b/plugins/jenkins-with-reporting/src/components/BuildWithStepsPage/index.ts new file mode 100644 index 0000000..6e4f1cc --- /dev/null +++ b/plugins/jenkins-with-reporting/src/components/BuildWithStepsPage/index.ts @@ -0,0 +1,19 @@ +/* + * 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 { + default as DetailedViewPage, + BuildWithSteps, +} from './BuildWithStepsPage'; diff --git a/plugins/jenkins-with-reporting/src/components/BuildWithStepsPage/lib/ActionOutput/ActionOutput.tsx b/plugins/jenkins-with-reporting/src/components/BuildWithStepsPage/lib/ActionOutput/ActionOutput.tsx new file mode 100644 index 0000000..750c79f --- /dev/null +++ b/plugins/jenkins-with-reporting/src/components/BuildWithStepsPage/lib/ActionOutput/ActionOutput.tsx @@ -0,0 +1,65 @@ +/* + * 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 Accordion from '@material-ui/core/Accordion'; +import AccordionDetails from '@material-ui/core/AccordionDetails'; +import AccordionSummary from '@material-ui/core/AccordionSummary'; +import Typography from '@material-ui/core/Typography'; +import { makeStyles } from '@material-ui/core/styles'; +import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; +import React, { useEffect } from 'react'; + +const useStyles = makeStyles({ + accordionDetails: { + padding: 0, + }, + button: { + order: -1, + marginRight: 0, + marginLeft: '-20px', + }, +}); + +type ActionOutputProps = { + url: string; + name: string; + className?: string; + action: any; +}; + +export const ActionOutput = ({ url, name, className }: ActionOutputProps) => { + const classes = useStyles(); + + useEffect(() => {}, [url]); + + return ( + + } + aria-controls={`panel-${name}-content`} + id={`panel-${name}-header`} + IconButtonProps={{ + className: classes.button, + }} + > + {name} + + + Nothing here... + + + ); +}; diff --git a/plugins/jenkins-with-reporting/src/components/BuildWithStepsPage/lib/ActionOutput/index.ts b/plugins/jenkins-with-reporting/src/components/BuildWithStepsPage/lib/ActionOutput/index.ts new file mode 100644 index 0000000..04f7ece --- /dev/null +++ b/plugins/jenkins-with-reporting/src/components/BuildWithStepsPage/lib/ActionOutput/index.ts @@ -0,0 +1,16 @@ +/* + * 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 { ActionOutput } from './ActionOutput'; diff --git a/plugins/jenkins-with-reporting/src/components/BuildsPage/lib/CITable/CITable.tsx b/plugins/jenkins-with-reporting/src/components/BuildsPage/lib/CITable/CITable.tsx new file mode 100644 index 0000000..5318c4f --- /dev/null +++ b/plugins/jenkins-with-reporting/src/components/BuildsPage/lib/CITable/CITable.tsx @@ -0,0 +1,105 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { Table, TableColumn } from '@backstage/core-components'; +import Box from '@material-ui/core/Box'; +import Typography from '@material-ui/core/Typography'; +import RetryIcon from '@material-ui/icons/Replay'; +import { default as React } from 'react'; +import { Project } from '../../../../api/JenkinsApi'; +import JenkinsLogo from '../../../../assets/JenkinsLogo.svg'; +import { useBuilds } from '../../../useBuilds'; +import { columnFactories } from './columns'; +import { defaultCITableColumns } from './presets'; + +type Props = { + loading: boolean; + retry: () => void; + projects?: Project[]; + page: number; + onChangePage: (page: number) => void; + total: number; + pageSize: number; + onChangePageSize: (pageSize: number) => void; + columns: TableColumn[]; +}; + +export const CITableView = ({ + loading, + pageSize, + page, + retry, + projects, + onChangePage, + onChangePageSize, + columns, + total, +}: Props) => { + const projectsInPage = projects?.slice( + page * pageSize, + Math.min(projects.length, (page + 1) * pageSize), + ); + return ( + , + tooltip: 'Refresh Data', + isFreeAction: true, + onClick: () => retry(), + }, + ]} + data={projectsInPage ?? []} + onPageChange={onChangePage} + onRowsPerPageChange={onChangePageSize} + title={ + + Jenkins logo + + Projects + + } + columns={ + columns && columns.length !== 0 ? columns : defaultCITableColumns + } + /> + ); +}; + +type CITableProps = { + columns?: TableColumn[]; +}; + +export const CITable = ({ columns }: CITableProps) => { + const [tableProps, { setPage, retry, setPageSize }] = useBuilds(); + + return ( + [])} + retry={retry} + onChangePageSize={setPageSize} + onChangePage={setPage} + /> + ); +}; + +CITable.columns = columnFactories; + +CITable.defaultCITableColumns = defaultCITableColumns; diff --git a/plugins/jenkins-with-reporting/src/components/BuildsPage/lib/CITable/columns.tsx b/plugins/jenkins-with-reporting/src/components/BuildsPage/lib/CITable/columns.tsx new file mode 100644 index 0000000..d585a2c --- /dev/null +++ b/plugins/jenkins-with-reporting/src/components/BuildsPage/lib/CITable/columns.tsx @@ -0,0 +1,286 @@ +/* + * 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, TableColumn } from '@backstage/core-components'; +import { alertApiRef, useApi, useRouteRef } from '@backstage/core-plugin-api'; +import { useEntityPermission } from '@backstage/plugin-catalog-react/alpha'; +import Box from '@material-ui/core/Box'; +import IconButton from '@material-ui/core/IconButton'; +import Tooltip from '@material-ui/core/Tooltip'; +import Typography from '@material-ui/core/Typography'; +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, jobRunsRouteRef } from '../../../../plugin'; +import { JenkinsRunStatus } from '../Status'; +import { jenkinsExecutePermission } from '@backstage-community/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'} + + + ); + }, + }; + }, + + 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', + sorting: false, + render: (row: Partial) => { + const ActionWrapper = () => { + const [isLoadingRebuild, setIsLoadingRebuild] = useState(false); + const { allowed, loading } = useEntityPermission( + jenkinsExecutePermission, + ); + + const alertApi = useApi(alertApiRef); + const jobRunsLink = useRouteRef(jobRunsRouteRef); + + 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-with-reporting/src/components/BuildsPage/lib/CITable/index.ts b/plugins/jenkins-with-reporting/src/components/BuildsPage/lib/CITable/index.ts new file mode 100644 index 0000000..3be4dae --- /dev/null +++ b/plugins/jenkins-with-reporting/src/components/BuildsPage/lib/CITable/index.ts @@ -0,0 +1,16 @@ +/* + * 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 { CITable } from './CITable'; diff --git a/plugins/jenkins-with-reporting/src/components/BuildsPage/lib/CITable/presets.ts b/plugins/jenkins-with-reporting/src/components/BuildsPage/lib/CITable/presets.ts new file mode 100644 index 0000000..828e035 --- /dev/null +++ b/plugins/jenkins-with-reporting/src/components/BuildsPage/lib/CITable/presets.ts @@ -0,0 +1,29 @@ +/* + * 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.createLastRunDuration(), + columnFactories.createActionsColumn(), +]; diff --git a/plugins/jenkins-with-reporting/src/components/BuildsPage/lib/Status/JenkinsRunStatus.tsx b/plugins/jenkins-with-reporting/src/components/BuildsPage/lib/Status/JenkinsRunStatus.tsx new file mode 100644 index 0000000..b3c8a95 --- /dev/null +++ b/plugins/jenkins-with-reporting/src/components/BuildsPage/lib/Status/JenkinsRunStatus.tsx @@ -0,0 +1,78 @@ +/* + * 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 React from 'react'; +import { + StatusPending, + StatusRunning, + StatusOK, + StatusWarning, + StatusAborted, + StatusError, +} from '@backstage/core-components'; + +export const JenkinsRunStatus = ({ + status, +}: { + status: string | undefined; +}) => { + if (status === undefined) return null; + switch (status.toLocaleLowerCase('en-US')) { + case 'queued': + case 'scheduled': + return ( + <> + Queued + + ); + case 'running': + return ( + <> + In progress + + ); + case 'unstable': + return ( + <> + Unstable + + ); + case 'failure': + return ( + <> + Failed + + ); + case 'success': + return ( + <> + Completed + + ); + case 'aborted': + return ( + <> + Aborted + + ); + default: + return ( + <> + {status} + + ); + } +}; diff --git a/plugins/jenkins-with-reporting/src/components/BuildsPage/lib/Status/index.ts b/plugins/jenkins-with-reporting/src/components/BuildsPage/lib/Status/index.ts new file mode 100644 index 0000000..fbfb88e --- /dev/null +++ b/plugins/jenkins-with-reporting/src/components/BuildsPage/lib/Status/index.ts @@ -0,0 +1,16 @@ +/* + * 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 { JenkinsRunStatus } from './JenkinsRunStatus'; diff --git a/plugins/jenkins-with-reporting/src/components/Cards/Cards.test.tsx b/plugins/jenkins-with-reporting/src/components/Cards/Cards.test.tsx new file mode 100644 index 0000000..97b920e --- /dev/null +++ b/plugins/jenkins-with-reporting/src/components/Cards/Cards.test.tsx @@ -0,0 +1,91 @@ +/* + * 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 React from 'react'; +import { renderInTestApp, TestApiProvider } from '@backstage/test-utils'; +import { LatestRunCard } from './Cards'; +import { EntityProvider } from '@backstage/plugin-catalog-react'; +import { JenkinsApi, jenkinsApiRef } from '../../api'; +import { Project } from '../../api/JenkinsApi'; + +describe('', () => { + const entity = { + apiVersion: 'v1', + kind: 'Component', + metadata: { + name: 'software', + description: 'This is the description', + annotations: { JENKINS_ANNOTATION: 'jenkins' }, + }, + }; + + const jenkinsApi: Partial = { + getProjects: () => + Promise.resolve([ + { lastBuild: { timestamp: 0, status: 'success', url: 'foo' } }, + ] as Project[]), + }; + + it('should show success status of latest build', async () => { + const { getByText } = await renderInTestApp( + + + + + , + ); + + expect(getByText('Completed')).toBeInTheDocument(); + }); + + it('should show the appropriate error in case of a connection error', async () => { + const jenkinsApiWithError: Partial = { + getProjects: () => Promise.reject(new Error('Unauthorized')), + }; + + const { getByText } = await renderInTestApp( + + + + + , + ); + + expect(getByText("Error: Can't connect to Jenkins")).toBeInTheDocument(); + expect(getByText('Unauthorized')).toBeInTheDocument(); + }); + + it('should show the appropriate error in case Jenkins project is not found', async () => { + const jenkinsApiWithError: Partial = { + getProjects: () => + Promise.reject({ + notFound: true, + message: 'jenkins-project not found', + }), + }; + + const { getByText } = await renderInTestApp( + + + + + , + ); + + expect(getByText("Error: Can't find Jenkins project")).toBeInTheDocument(); + expect(getByText('jenkins-project not found')).toBeInTheDocument(); + }); +}); diff --git a/plugins/jenkins-with-reporting/src/components/Cards/Cards.tsx b/plugins/jenkins-with-reporting/src/components/Cards/Cards.tsx new file mode 100644 index 0000000..0ae46a3 --- /dev/null +++ b/plugins/jenkins-with-reporting/src/components/Cards/Cards.tsx @@ -0,0 +1,121 @@ +/* + * 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 LinearProgress from '@material-ui/core/LinearProgress'; +import { makeStyles } from '@material-ui/core/styles'; +import ExternalLinkIcon from '@material-ui/icons/Launch'; +import { DateTime, Duration } from 'luxon'; +import React from 'react'; +import { JenkinsRunStatus } from '../BuildsPage/lib/Status'; +import { ErrorType, useBuilds } from '../useBuilds'; +import { + InfoCard, + InfoCardVariants, + Link, + StructuredMetadataTable, + WarningPanel, +} from '@backstage/core-components'; +import { Project } from '../../api/JenkinsApi'; + +const useStyles = makeStyles({ + externalLinkIcon: { + fontSize: 'inherit', + verticalAlign: 'bottom', + }, +}); + +const WidgetContent = ({ + loading, + latestRun, +}: { + loading?: boolean; + latestRun?: Project; + branch: string; +}) => { + const classes = useStyles(); + if (loading || !latestRun) return ; + const displayDate = DateTime.fromMillis( + latestRun.lastBuild.timestamp, + ).toRelative(); + const displayDuration = + (latestRun.lastBuild.building ? 'Running for ' : '') + + DateTime.local() + .minus(Duration.fromMillis(latestRun.lastBuild.duration)) + .toRelative({ locale: 'en' }) + ?.replace(' ago', ''); + + return ( + + + + ), + build: latestRun.fullDisplayName, + 'latest run': displayDate, + duration: displayDuration, + link: ( + + See more on Jenkins{' '} + + + ), + }} + /> + ); +}; + +const JenkinsApiErrorPanel = (props: { + message: string; + errorType: ErrorType; +}) => { + const { message, errorType } = props; + + let title = undefined; + if (errorType === ErrorType.CONNECTION_ERROR) { + title = "Can't connect to Jenkins"; + } else if (errorType === ErrorType.NOT_FOUND) { + title = "Can't find Jenkins project"; + } + + return ; +}; + +export const LatestRunCard = (props: { + branch: string; + variant?: InfoCardVariants; +}) => { + const { branch = 'master', variant } = props; + const [{ projects, loading, error }] = useBuilds({ branch }); + const latestRun = projects?.[0]; + return ( + + {!error ? ( + + ) : ( + + )} + + ); +}; diff --git a/plugins/jenkins-with-reporting/src/components/Cards/index.ts b/plugins/jenkins-with-reporting/src/components/Cards/index.ts new file mode 100644 index 0000000..dfbd9c5 --- /dev/null +++ b/plugins/jenkins-with-reporting/src/components/Cards/index.ts @@ -0,0 +1,16 @@ +/* + * 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 { LatestRunCard } from './Cards'; diff --git a/plugins/jenkins-with-reporting/src/components/JobRunsTable/JobRunsTable.tsx b/plugins/jenkins-with-reporting/src/components/JobRunsTable/JobRunsTable.tsx new file mode 100644 index 0000000..2272a8d --- /dev/null +++ b/plugins/jenkins-with-reporting/src/components/JobRunsTable/JobRunsTable.tsx @@ -0,0 +1,213 @@ +/* + * 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 from '@material-ui/core/Box'; +import IconButton from '@material-ui/core/IconButton'; +import Tooltip from '@material-ui/core/Tooltip'; +import Typography from '@material-ui/core/Typography'; +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'; +import { buildRouteRef, jobRunsRouteRef } from '../../plugin'; +import { useRouteRefParams, useRouteRef } from '@backstage/core-plugin-api'; +// import { buildRouteRef, jobRunsRouteRef } from '../../../../plugin'; + +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 = () => { + const routeLink = useRouteRef(buildRouteRef); + const jobFullName = + row.fullDisplayName && + row.fullDisplayName.split(' #')[0].split(' » ').join('/'); + return ( +
+ {row?.url && ( + + + + + + )} +
+ ); + + // return ( + //
+ // {row?.url && ( + // + // + // + // + + // + // )} + //
+ // ); + }; + return ; + }, + width: '10%', + }, +]; + +type Props = { + loading: boolean; + jobRuns?: Job; + page: number; + onChangePage: (page: number) => void; + pageSize: number; + onChangePageSize: (pageSize: number) => void; +}; + +export const JobRunsTableView = ({ + loading, + pageSize, + page, + jobRuns, + onChangePage, + onChangePageSize, +}: Props) => { + const builds = jobRuns?.builds.slice( + page * pageSize, + page * pageSize + pageSize, + ); + let sumOfAllSuccessfulJobDuration = 0; + + const successfulJobCount = + builds?.reduce((count, build) => { + if (!build.inProgress && build.result === 'SUCCESS') { + sumOfAllSuccessfulJobDuration += build.duration; + return count + 1; + } + return count; + }, 0) || 0; + + let avgTime; + + if (successfulJobCount > 0) { + avgTime = (sumOfAllSuccessfulJobDuration / successfulJobCount / 1000) + .toFixed(1) + .toString(); + } + + return ( +
+ + Jenkins logo + + {`${jobRuns?.displayName} Runs`} + + + + Average Build Time For Last {successfulJobCount} Successful jobs :{' '} + {avgTime || 0} + + + + } + columns={generatedColumns} + /> + ); +}; + +export const JobRunsTable = () => { + const { jobFullName } = useRouteRefParams(jobRunsRouteRef); + const [tableProps, { setPage, setPageSize }] = useJobRuns(jobFullName); + + return ( + + ); +}; diff --git a/plugins/jenkins-with-reporting/src/components/JobRunsTable/index.ts b/plugins/jenkins-with-reporting/src/components/JobRunsTable/index.ts new file mode 100644 index 0000000..b74beeb --- /dev/null +++ b/plugins/jenkins-with-reporting/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-with-reporting/src/components/Router.tsx b/plugins/jenkins-with-reporting/src/components/Router.tsx new file mode 100644 index 0000000..7c93f74 --- /dev/null +++ b/plugins/jenkins-with-reporting/src/components/Router.tsx @@ -0,0 +1,67 @@ +/* + * 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 { Entity } from '@backstage/catalog-model'; +import { TableColumn } from '@backstage/core-components'; +import { + useEntity, + MissingAnnotationEmptyState, +} from '@backstage/plugin-catalog-react'; +import React from 'react'; +import { Route, Routes } from 'react-router-dom'; +import { JENKINS_ANNOTATION, LEGACY_JENKINS_ANNOTATION } from '../constants'; +import { buildRouteRef, jobRunsRouteRef } from '../plugin'; +import { CITable } from './BuildsPage/lib/CITable'; +import { DetailedViewPage } from './BuildWithStepsPage/'; +import { JobRunsTable } from './JobRunsTable'; +import { Project } from '../api'; + +/** @public */ + +export const isJenkinsAvailable = (entity: Entity) => { + console.log('entity**************', entity); + console.log( + 'entity.metadata.annotations....', + entity.metadata.annotations, + JENKINS_ANNOTATION, + entity.metadata.annotations?.[JENKINS_ANNOTATION], + entity.metadata.annotations?.[LEGACY_JENKINS_ANNOTATION], + Boolean(entity.metadata.annotations?.[JENKINS_ANNOTATION]) || + Boolean(entity.metadata.annotations?.[LEGACY_JENKINS_ANNOTATION]), + ); + return ( + Boolean(entity.metadata.annotations?.[JENKINS_ANNOTATION]) || + Boolean(entity.metadata.annotations?.[LEGACY_JENKINS_ANNOTATION]) + ); +}; + +export const Router = (props: { columns?: TableColumn[] }) => { + const { entity } = useEntity(); + + if (!isJenkinsAvailable(entity)) { + return ; + } + + const columns = props.columns; + + return ( + + } /> + } /> + } /> + + ); +}; diff --git a/plugins/jenkins-with-reporting/src/components/useAsyncPolling.ts b/plugins/jenkins-with-reporting/src/components/useAsyncPolling.ts new file mode 100644 index 0000000..4c504c2 --- /dev/null +++ b/plugins/jenkins-with-reporting/src/components/useAsyncPolling.ts @@ -0,0 +1,37 @@ +/* + * 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 { useRef } from 'react'; + +export const useAsyncPolling = ( + pollingFn: () => Promise, + interval: number, +) => { + const isPolling = useRef(false); + const startPolling = async () => { + if (isPolling.current === true) return; + isPolling.current = true; + + while (isPolling.current === true) { + await pollingFn(); + await new Promise(resolve => setTimeout(resolve, interval)); + } + }; + + const stopPolling = () => { + isPolling.current = false; + }; + return { startPolling, stopPolling }; +}; diff --git a/plugins/jenkins-with-reporting/src/components/useBuildWithSteps.ts b/plugins/jenkins-with-reporting/src/components/useBuildWithSteps.ts new file mode 100644 index 0000000..b64ac61 --- /dev/null +++ b/plugins/jenkins-with-reporting/src/components/useBuildWithSteps.ts @@ -0,0 +1,70 @@ +/* + * 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 { useCallback } from 'react'; +import useAsyncRetry from 'react-use/esm/useAsyncRetry'; +import { jenkinsApiRef } from '../api'; +import { useAsyncPolling } from './useAsyncPolling'; +import { errorApiRef, useApi } from '@backstage/core-plugin-api'; +import { useEntity } from '@backstage/plugin-catalog-react'; +import { getCompoundEntityRef } from '@backstage/catalog-model'; + +const INTERVAL_AMOUNT = 1500; + +/** + * Hook to expose a specific build. + * @param jobFullName - the full name of the project (job with builds, not a folder). e.g. "department-A/team-1/project-foo/master" + * @param buildNumber - the number of the build. e.g. "13" + */ +export function useBuildWithSteps({ + jobFullName, + buildNumber, +}: { + jobFullName: string; + buildNumber: string; +}) { + const api = useApi(jenkinsApiRef); + const errorApi = useApi(errorApiRef); + const { entity } = useEntity(); + + const getBuildWithSteps = useCallback(async () => { + try { + const entityName = await getCompoundEntityRef(entity); + return api.getBuild({ entity: entityName, jobFullName, buildNumber }); + } catch (e) { + errorApi.post(e); + return Promise.reject(e); + } + }, [buildNumber, jobFullName, entity, api, errorApi]); + + const { loading, value, retry } = useAsyncRetry( + () => getBuildWithSteps(), + [getBuildWithSteps], + ); + + const { startPolling, stopPolling } = useAsyncPolling( + getBuildWithSteps, + INTERVAL_AMOUNT, + ); + + return [ + { loading, value, retry }, + { + getBuildWithSteps, + startPolling, + stopPolling, + }, + ] as const; +} diff --git a/plugins/jenkins-with-reporting/src/components/useBuilds.ts b/plugins/jenkins-with-reporting/src/components/useBuilds.ts new file mode 100644 index 0000000..89bbd31 --- /dev/null +++ b/plugins/jenkins-with-reporting/src/components/useBuilds.ts @@ -0,0 +1,95 @@ +/* + * 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/esm/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'; + +export enum ErrorType { + CONNECTION_ERROR, + NOT_FOUND, +} + +/** + * Hook to expose the latest build for all the pipelines/projects for an entity. + * If `branch` is provided, the latest build for only that branch will be given (but still as a list) + * + * TODO: deprecate branch and add a generic filter concept. + */ +export function useBuilds({ branch }: { branch?: string } = {}) { + const { entity } = useEntity(); + const entityName = getCompoundEntityRef(entity); + 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 restartBuild = async (jobFullName: string, buildNumber: string) => { + try { + await api.retry({ entity: entityName, jobFullName, buildNumber }); + } catch (e) { + errorApi.post(e); + } + }; + + const { + loading, + value: projects, + retry, + } = useAsyncRetry(async () => { + try { + const build = await api.getProjects({ + entity: getCompoundEntityRef(entity), + filter: { branch }, + }); + + setTotal(build.length); + + return build; + } catch (e) { + const errorType = e.notFound + ? ErrorType.NOT_FOUND + : ErrorType.CONNECTION_ERROR; + setError({ message: e.message, errorType }); + throw e; + } + }, [api, errorApi, entity, branch]); + + return [ + { + page, + pageSize, + loading, + projects, + total, + error, + }, + { + setPage, + setPageSize, + restartBuild, + retry, // fetch data again + }, + ] as const; +} diff --git a/plugins/jenkins-with-reporting/src/components/useJobRuns.ts b/plugins/jenkins-with-reporting/src/components/useJobRuns.ts new file mode 100644 index 0000000..c74c5f0 --- /dev/null +++ b/plugins/jenkins-with-reporting/src/components/useJobRuns.ts @@ -0,0 +1,70 @@ +/* + * 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/esm/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'; + +export enum ErrorType { + CONNECTION_ERROR, + NOT_FOUND, +} + +export function useJobRuns(jobFullName: string) { + const { entity } = useEntity(); + const api = useApi(jenkinsApiRef); + const errorApi = useApi(errorApiRef); + + const [page, setPage] = useState(0); + const [pageSize, setPageSize] = useState(5); + + const [error, setError] = useState<{ + message: string; + errorType: ErrorType; + }>(); + + const { loading, value: jobRuns } = useAsyncRetry(async () => { + try { + const jobBuilds = await api.getJobBuilds({ + entity: getCompoundEntityRef(entity), + jobFullName, + }); + 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, + error, + }, + { + setPage, + setPageSize, + }, + ] as const; +} diff --git a/plugins/jenkins-with-reporting/src/constants.ts b/plugins/jenkins-with-reporting/src/constants.ts new file mode 100644 index 0000000..53978bc --- /dev/null +++ b/plugins/jenkins-with-reporting/src/constants.ts @@ -0,0 +1,19 @@ +/* + * 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 const JENKINS_ANNOTATION = 'jenkins.io/job-full-name'; +// @deprecated The legacy annotation used for identifying Jenkins jobs, use +// JENKINS_ANNOTATION instead. +export const LEGACY_JENKINS_ANNOTATION = 'jenkins.io/github-folder'; diff --git a/plugins/jenkins-with-reporting/src/index.ts b/plugins/jenkins-with-reporting/src/index.ts new file mode 100644 index 0000000..9d09201 --- /dev/null +++ b/plugins/jenkins-with-reporting/src/index.ts @@ -0,0 +1,37 @@ +/* + * 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. + */ + +/** + * A Backstage plugin that integrates towards Jenkins + * + * @packageDocumentation + */ + +export { + jenkinsPlugin, + jenkinsPlugin as plugin, + EntityJenkinsContent, + EntityLatestJenkinsRunCard, + EntityJobRunsTable, +} from './plugin'; +export { LatestRunCard } from './components/Cards'; +export { + Router, + isJenkinsAvailable, + isJenkinsAvailable as isPluginApplicableToEntity, +} from './components/Router'; +export { JENKINS_ANNOTATION, LEGACY_JENKINS_ANNOTATION } from './constants'; +export * from './api'; diff --git a/plugins/jenkins-with-reporting/src/plugin.test.ts b/plugins/jenkins-with-reporting/src/plugin.test.ts new file mode 100644 index 0000000..7769cda --- /dev/null +++ b/plugins/jenkins-with-reporting/src/plugin.test.ts @@ -0,0 +1,23 @@ +/* + * 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 { jenkinsPlugin } from './plugin'; + +describe('jenkins', () => { + it('should export plugin', () => { + expect(jenkinsPlugin).toBeDefined(); + }); +}); diff --git a/plugins/jenkins-with-reporting/src/plugin.ts b/plugins/jenkins-with-reporting/src/plugin.ts new file mode 100644 index 0000000..7d40f0e --- /dev/null +++ b/plugins/jenkins-with-reporting/src/plugin.ts @@ -0,0 +1,91 @@ +/* + * 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 { + createApiFactory, + createComponentExtension, + createPlugin, + createRoutableExtension, + createRouteRef, + createSubRouteRef, + discoveryApiRef, + fetchApiRef, +} from '@backstage/core-plugin-api'; +import { JenkinsClient, jenkinsApiRef } from './api'; + +/** @public */ +export const rootRouteRef = createRouteRef({ + id: 'jenkins', +}); + +/** @public */ +export const buildRouteRef = createSubRouteRef({ + id: 'jenkins/builds', + path: '/builds/:jobFullName/:buildNumber', + parent: rootRouteRef, +}); + +/** @public */ +export const jobRunsRouteRef = createSubRouteRef({ + id: 'jenkins/job/runs', + path: '/builds/:jobFullName/runs', + parent: rootRouteRef, +}); + +/** @public */ +export const jenkinsPlugin = createPlugin({ + id: 'jenkins', + apis: [ + createApiFactory({ + api: jenkinsApiRef, + deps: { discoveryApi: discoveryApiRef, fetchApi: fetchApiRef }, + factory: ({ discoveryApi, fetchApi }) => + new JenkinsClient({ discoveryApi, fetchApi }), + }), + ], + routes: { + entityContent: rootRouteRef, + }, +}); + +/** @public */ +export const EntityJenkinsContent = jenkinsPlugin.provide( + createRoutableExtension({ + name: 'EntityJenkinsContent', + component: () => import('./components/Router').then(m => m.Router), + mountPoint: rootRouteRef, + }), +); + +/** @public */ +export const EntityLatestJenkinsRunCard = jenkinsPlugin.provide( + createComponentExtension({ + name: 'EntityLatestJenkinsRunCard', + component: { + lazy: () => import('./components/Cards').then(m => m.LatestRunCard), + }, + }), +); + +/** @public */ +export const EntityJobRunsTable = jenkinsPlugin.provide( + createComponentExtension({ + name: 'EntityJobRunsTable', + component: { + lazy: () => import('./components/JobRunsTable').then(m => m.JobRunsTable), + }, + }), +); diff --git a/plugins/jenkins-with-reporting/src/setupTests.ts b/plugins/jenkins-with-reporting/src/setupTests.ts new file mode 100644 index 0000000..963c0f1 --- /dev/null +++ b/plugins/jenkins-with-reporting/src/setupTests.ts @@ -0,0 +1,17 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import '@testing-library/jest-dom'; diff --git a/terraform/README.md b/terraform/README.md index 2107fb1..f2b3270 100644 --- a/terraform/README.md +++ b/terraform/README.md @@ -5,64 +5,70 @@ Deployment of Backstage to an ECS Cluster + ## Requirements -| Name | Version | -|------|---------| -| [terraform](#requirement\_terraform) | ~> 1.4 | -| [aws](#requirement\_aws) | ~> 4.0 | +| Name | Version | +| ------------------------------------------------------------------------ | ------- | +| [terraform](#requirement_terraform) | ~> 1.4 | +| [aws](#requirement_aws) | ~> 4.0 | ## Providers -| Name | Version | -|------|---------| -| [aws](#provider\_aws) | 4.67.0 | +| Name | Version | +| ------------------------------------------------ | ------- | +| [aws](#provider_aws) | 4.67.0 | ## Modules -| Name | Source | Version | -|------|--------|---------| -| [backstage](#module\_backstage) | git::https://github.com/sourcefuse/arc-backstage-ecs-app | n/a | -| [ecs\_common\_data](#module\_ecs\_common\_data) | ./ecs-common-data | n/a | -| [tags](#module\_tags) | sourcefuse/arc-tags/aws | 1.2.3 | +| Name | Source | Version | +| -------------------------------------------------------------------------------- | -------------------------------------------------------- | ------- | +| [backstage](#module_backstage) | git::https://github.com/sourcefuse/arc-backstage-ecs-app | n/a | +| [ecs_common_data](#module_ecs_common_data) | ./ecs-common-data | n/a | +| [tags](#module_tags) | sourcefuse/arc-tags/aws | 1.2.3 | ## Resources -| Name | Type | -|------|------| -| [aws_route53_zone.default](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/route53_zone) | data source | -| [aws_ssm_parameter.container_image](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/ssm_parameter) | -data source | -| [aws_ssm_parameter.sonarcloud_token](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/ssm_parameter) data source | -| [aws_ssm_parameter.repo_name](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/ssm_parameter) | data source | -| [aws_subnets.private](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/subnets) | data source | -| [aws_subnets.public](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/subnets) | data source | -| [aws_vpc.vpc](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/vpc) | data source | +| Name | Type | +| -------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- | +| [aws_route53_zone.default](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/route53_zone) | data source | +| [aws_ssm_parameter.container_image](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/ssm_parameter) | +| data source | +| [aws_ssm_parameter.sonarcloud_token](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/ssm_parameter) data source | +| [aws_ssm_parameter.repo_name](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/ssm_parameter) | data source | +| [aws_subnets.private](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/subnets) | data source | +| [aws_subnets.public](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/subnets) | data source | +| [aws_vpc.vpc](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/vpc) | data source | +| [aws_ssm_parameter.jenkins_baseurl1](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/ssm_parameter) data source | +| [aws_ssm_parameter.jenkins_username1](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/ssm_parameter) data source | +| [aws_ssm_parameter.jenkins_projectcountlimit1](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/ssm_parameter) data source | +| [aws_ssm_parameter.jenkins_apitoken1](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/ssm_parameter) data source | ## Inputs -| Name | Description | Type | Default | Required | -|------|-------------|------|---------|:--------:| -| [acm\_domain\_name](#input\_acm\_domain\_name) | Domain name the ACM Certificate belongs to | `string` | `"*.arc-poc.link"` | no | -| [acm\_process\_domain\_validation\_options](#input\_acm\_process\_domain\_validation\_options) | Flag to enable/disable processing of the record to add to the DNS zone to complete certificate validation | `bool` | `false` | no | -| [alb\_certificate\_arn](#input\_alb\_certificate\_arn) | ALB Certificate ARN. If `var.create_acm_certificate` is `true`, this will be ignored. | `string` | `null` | no | -| [alb\_internal](#input\_alb\_internal) | Determines if this load balancer is internally or externally facing. | `bool` | `false` | no | -| [app\_host\_name](#input\_app\_host\_name) | Host name to expose via Route53 | `string` | `"dx.arc-poc.link"` | no | -| [container\_image\_override](#input\_container\_image\_override) | Container image URL where the image is located | `string` | `null` | no | -| [create\_acm\_certificate](#input\_create\_acm\_certificate) | Create an ACM Certificate to use with the ALB | `bool` | `true` | no | -| [deploy\_backstage](#input\_deploy\_backstage) | Deploy the Backstage image to the cluster. | `bool` | `true` | no | -| [desired\_count](#input\_desired\_count) | Number of ECS tasks to run for the health check. | `number` | `1` | no | -| [environment](#input\_environment) | ID element. Usually used for region e.g. 'uw2', 'us-west-2', OR role 'prod', 'staging', 'dev', 'UAT' | `string` | `"poc"` | no | -| [ephemeral\_storage](#input\_ephemeral\_storage) | (optional) Ephemeral storage for task | `string` | `20` | no | -| [execution\_policy\_attachment\_arns](#input\_execution\_policy\_attachment\_arns) | The ARNs of the policies you want to apply | `list(string)` |
[
"arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy"
]
| no | -| [namespace](#input\_namespace) | Namespace for the resources. | `string` | n/a | yes | -| [private\_key\_secret\_name](#input\_private\_key\_secret\_name) | Name of the secret in AWS Secrets Manager that contains Backstage private key for GitHub authentication. The secret should be stored as plain text in ASM. | `string` | `"arc/poc/sf-arc-poc2-backstage-private-key"` | no | -| [region](#input\_region) | AWS region | `string` | `"us-east-1"` | no | -| [route\_53\_private\_zone](#input\_route\_53\_private\_zone) | Used with `name` field to get a private Hosted Zone | `bool` | `false` | no | -| [route\_53\_zone\_name](#input\_route\_53\_zone\_name) | Route53 zone name used for looking up and creating an `A` record for the health check service | `string` | `"arc-poc.link"` | no | -| [secret\_name](#input\_secret\_name) | Name of the secret in AWS Secrets Manager that contains Backstage secrets, such as POSTGRES\_USER and POSTGRES\_PASSWORD | `string` | `"arc/poc/sf-arc-poc2-backstage"` | no | +| Name | Description | Type | Default | Required | +| ------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------- | --------------------------------------------------------------------------------------------- | :------: | +| [acm_domain_name](#input_acm_domain_name) | Domain name the ACM Certificate belongs to | `string` | `"*.arc-poc.link"` | no | +| [acm_process_domain_validation_options](#input_acm_process_domain_validation_options) | Flag to enable/disable processing of the record to add to the DNS zone to complete certificate validation | `bool` | `false` | no | +| [alb_certificate_arn](#input_alb_certificate_arn) | ALB Certificate ARN. If `var.create_acm_certificate` is `true`, this will be ignored. | `string` | `null` | no | +| [alb_internal](#input_alb_internal) | Determines if this load balancer is internally or externally facing. | `bool` | `false` | no | +| [app_host_name](#input_app_host_name) | Host name to expose via Route53 | `string` | `"dx.arc-poc.link"` | no | +| [container_image_override](#input_container_image_override) | Container image URL where the image is located | `string` | `null` | no | +| [create_acm_certificate](#input_create_acm_certificate) | Create an ACM Certificate to use with the ALB | `bool` | `true` | no | +| [deploy_backstage](#input_deploy_backstage) | Deploy the Backstage image to the cluster. | `bool` | `true` | no | +| [desired_count](#input_desired_count) | Number of ECS tasks to run for the health check. | `number` | `1` | no | +| [environment](#input_environment) | ID element. Usually used for region e.g. 'uw2', 'us-west-2', OR role 'prod', 'staging', 'dev', 'UAT' | `string` | `"poc"` | no | +| [ephemeral_storage](#input_ephemeral_storage) | (optional) Ephemeral storage for task | `string` | `20` | no | +| [execution_policy_attachment_arns](#input_execution_policy_attachment_arns) | The ARNs of the policies you want to apply | `list(string)` |
[
"arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy"
]
| no | +| [namespace](#input_namespace) | Namespace for the resources. | `string` | n/a | yes | +| [private_key_secret_name](#input_private_key_secret_name) | Name of the secret in AWS Secrets Manager that contains Backstage private key for GitHub authentication. The secret should be stored as plain text in ASM. | `string` | `"arc/poc/sf-arc-poc2-backstage-private-key"` | no | +| [region](#input_region) | AWS region | `string` | `"us-east-1"` | no | +| [route_53_private_zone](#input_route_53_private_zone) | Used with `name` field to get a private Hosted Zone | `bool` | `false` | no | +| [route_53_zone_name](#input_route_53_zone_name) | Route53 zone name used for looking up and creating an `A` record for the health check service | `string` | `"arc-poc.link"` | no | +| [secret_name](#input_secret_name) | Name of the secret in AWS Secrets Manager that contains Backstage secrets, such as POSTGRES_USER and POSTGRES_PASSWORD | `string` | `"arc/poc/sf-arc-poc2-backstage"` | no | ## Outputs No outputs. + diff --git a/terraform/data.tf b/terraform/data.tf index 51f01e1..667d609 100644 --- a/terraform/data.tf +++ b/terraform/data.tf @@ -43,3 +43,17 @@ data "aws_ssm_parameter" "repo_name" { data "aws_ssm_parameter" "sonarcloud_token" { name = "/backstage/${var.environment}/sonarcloud/token" } +data "aws_ssm_parameter" "jenkins_baseurl1" { + name = "/backstage/${var.environment}/jenkins/baseurl1" +} +data "aws_ssm_parameter" "jenkins_username1" { + name = "/backstage/${var.environment}/jenkins/username1" +} + +data "aws_ssm_parameter" "jenkins_projectcountlimit1" { + name = "/backstage/${var.environment}/jenkins/projectcountlimit1" +} + +data "aws_ssm_parameter" "jenkins_apitoken1" { + name = "/backstage/${var.environment}/jenkins/apitoken1" +} diff --git a/terraform/locals.tf b/terraform/locals.tf index 860e338..c121d4f 100644 --- a/terraform/locals.tf +++ b/terraform/locals.tf @@ -18,5 +18,22 @@ locals { name = "SONARCLOUD_TOKEN" value = data.aws_ssm_parameter.sonarcloud_token.value }, + { + name = "JENKINS_BASEURL1" + value = data.aws_ssm_parameter.jenkins_baseurl1.value + }, + { + name = "JENKINS_USERNAME1" + value = data.aws_ssm_parameter.jenkins_username1.value + }, + { + name = "JENKINS_PROJECTCOUNTLIMIT1" + value = data.aws_ssm_parameter.jenkins_projectcountlimit1.value + }, + { + name = "JENKINS_API_TOKEN1" + value = data.aws_ssm_parameter.jenkins_apitoken1.value + }, + ] } diff --git a/tsconfig.json b/tsconfig.json index d7fbded..8d72a33 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,17 +2,15 @@ "extends": "@backstage/cli/config/tsconfig.json", "include": [ "packages/*/src", + "packages/*/config.d.ts", "plugins/*/src", + "plugins/*/config.d.ts", "plugins/*/dev", "plugins/*/migrations" ], - "paths": { - "react": [ "./node_modules/@types/react" ], - }, - "exclude": ["node_modules"], "compilerOptions": { - "jsx": "react", "outDir": "dist-types", - "rootDir": "." + "rootDir": ".", + "useUnknownInCatchVariables": false } } diff --git a/yarn.lock b/yarn.lock index 4e19303..23327b3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -684,6 +684,23 @@ fast-xml-parser "4.4.1" tslib "^2.6.2" +"@aws-sdk/core@3.696.0": + version "3.696.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.696.0.tgz#bdf306bdc019f485738d91d8838eec877861dd26" + integrity sha512-3c9III1k03DgvRZWg8vhVmfIXPG6hAciN9MzQTzqGngzWAELZF/WONRTRQuDFixVtarQatmLHYVw/atGeA2Byw== + dependencies: + "@aws-sdk/types" "3.696.0" + "@smithy/core" "^2.5.3" + "@smithy/node-config-provider" "^3.1.11" + "@smithy/property-provider" "^3.1.9" + "@smithy/protocol-http" "^4.1.7" + "@smithy/signature-v4" "^4.2.2" + "@smithy/smithy-client" "^3.4.4" + "@smithy/types" "^3.7.1" + "@smithy/util-middleware" "^3.0.10" + fast-xml-parser "4.4.1" + tslib "^2.6.2" + "@aws-sdk/credential-provider-cognito-identity@3.379.1": version "3.379.1" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.379.1.tgz#ddcdc02a8bd46e5dfe5a8d4fe7bebc012c6f5cc7" @@ -1014,6 +1031,26 @@ "@smithy/types" "^2.0.2" tslib "^2.5.0" +"@aws-sdk/middleware-sdk-s3@3.696.0": + version "3.696.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.696.0.tgz#63199a2df26e097122c07edf2e178f6d407b0ba7" + integrity sha512-M7fEiAiN7DBMHflzOFzh1I2MNSlLpbiH2ubs87bdRc2wZsDPSbs4l3v6h3WLhxoQK0bq6vcfroudrLBgvCuX3Q== + dependencies: + "@aws-sdk/core" "3.696.0" + "@aws-sdk/types" "3.696.0" + "@aws-sdk/util-arn-parser" "3.693.0" + "@smithy/core" "^2.5.3" + "@smithy/node-config-provider" "^3.1.11" + "@smithy/protocol-http" "^4.1.7" + "@smithy/signature-v4" "^4.2.2" + "@smithy/smithy-client" "^3.4.4" + "@smithy/types" "^3.7.1" + "@smithy/util-config-provider" "^3.0.0" + "@smithy/util-middleware" "^3.0.10" + "@smithy/util-stream" "^3.3.1" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + "@aws-sdk/middleware-sdk-sts@3.379.1": version "3.379.1" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.379.1.tgz#4238aa2fa4ad4b0f7e0f6bb08d7c131b7d6a2baa" @@ -1080,6 +1117,20 @@ "@smithy/util-middleware" "^3.0.3" tslib "^2.6.2" +"@aws-sdk/s3-request-presigner@^3.705.0": + version "3.705.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.705.0.tgz#b13771c12e2dec40933f93294e59aad87d507544" + integrity sha512-dAQiXv/TqjEUCoEeiKqQGI8LJ3g8Xv+XJL4W9CwsB6ZHHDq0Q05ulpDSkhhCf52ySXf5dJ33e1o/VeUDY3q0pw== + dependencies: + "@aws-sdk/signature-v4-multi-region" "3.696.0" + "@aws-sdk/types" "3.696.0" + "@aws-sdk/util-format-url" "3.696.0" + "@smithy/middleware-endpoint" "^3.2.3" + "@smithy/protocol-http" "^4.1.7" + "@smithy/smithy-client" "^3.4.4" + "@smithy/types" "^3.7.1" + tslib "^2.6.2" + "@aws-sdk/signature-v4-multi-region@3.378.0": version "3.378.0" resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.378.0.tgz#bb6e46eab9009e36c22155b33dbaa2322f8ce4cc" @@ -1091,6 +1142,18 @@ "@smithy/types" "^2.0.2" tslib "^2.5.0" +"@aws-sdk/signature-v4-multi-region@3.696.0": + version "3.696.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.696.0.tgz#3a110c24a659818df665857e4e894e40eb59762b" + integrity sha512-ijPkoLjXuPtgxAYlDoYls8UaG/VKigROn9ebbvPL/orEY5umedd3iZTcS9T+uAf4Ur3GELLxMQiERZpfDKaz3g== + dependencies: + "@aws-sdk/middleware-sdk-s3" "3.696.0" + "@aws-sdk/types" "3.696.0" + "@smithy/protocol-http" "^4.1.7" + "@smithy/signature-v4" "^4.2.2" + "@smithy/types" "^3.7.1" + tslib "^2.6.2" + "@aws-sdk/signature-v4@^3.347.0": version "3.374.0" resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4/-/signature-v4-3.374.0.tgz#bd727f4c392acb81bc667aa4cfceeba608250771" @@ -1138,6 +1201,14 @@ "@smithy/types" "^3.3.0" tslib "^2.6.2" +"@aws-sdk/types@3.696.0": + version "3.696.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.696.0.tgz#559c3df74dc389b6f40ba6ec6daffeab155330cd" + integrity sha512-9rTvUJIAj5d3//U5FDPWGJ1nFJLuWb30vugGOrWk7aNZ6y9tuA3PI7Cc9dP8WEXKVyK1vuuk8rSFP2iqXnlgrw== + dependencies: + "@smithy/types" "^3.7.1" + tslib "^2.6.2" + "@aws-sdk/types@^3.222.0": version "3.347.0" resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.347.0.tgz#4affe91de36ef227f6375d64a6efda8d4ececd5d" @@ -1152,6 +1223,13 @@ dependencies: tslib "^2.5.0" +"@aws-sdk/util-arn-parser@3.693.0": + version "3.693.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.693.0.tgz#8dae27eb822ab4f88be28bb3c0fc11f1f13d3948" + integrity sha512-WC8x6ca+NRrtpAH64rWu+ryDZI3HuLwlEr8EU6/dbC/pt+r/zC0PBoC15VEygUaBA+isppCikQpGyEDu0Yj7gQ== + dependencies: + tslib "^2.6.2" + "@aws-sdk/util-endpoints@3.378.0": version "3.378.0" resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.378.0.tgz#93eeac35656ee949ab42cbc1181dfcbdb1e3e95c" @@ -1170,6 +1248,16 @@ "@smithy/util-endpoints" "^2.0.5" tslib "^2.6.2" +"@aws-sdk/util-format-url@3.696.0": + version "3.696.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-format-url/-/util-format-url-3.696.0.tgz#9d38fc9c49009631b181b7547604ba8dc222053c" + integrity sha512-R6yK1LozUD1GdAZRPhNsIow6VNFJUTyyoIar1OCWaknlucBMcq7musF3DN3TlORBwfFMj5buHc2ET9OtMtzvuA== + dependencies: + "@aws-sdk/types" "3.696.0" + "@smithy/querystring-builder" "^3.0.10" + "@smithy/types" "^3.7.1" + tslib "^2.6.2" + "@aws-sdk/util-locate-window@^3.0.0": version "3.310.0" resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz#b071baf050301adee89051032bd4139bba32cc40" @@ -2772,6 +2860,55 @@ luxon "^3.0.0" p-limit "^3.1.0" +"@backstage-community/plugin-jenkins-backend@^0.6.2": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@backstage-community/plugin-jenkins-backend/-/plugin-jenkins-backend-0.6.2.tgz#99b2b498451e2353ef0d1ef1c3dba4c9c65e7cb6" + integrity sha512-PFHcI1CORZvQHyr2IGo64O1sSfI9x4vuqXf3kIMhGsbYLjnDUI8Ulec50v76NASZFV2nDtWG2ml0fE8NChPj1g== + dependencies: + "@backstage-community/plugin-jenkins-common" "^0.1.30" + "@backstage/backend-common" "^0.25.0" + "@backstage/backend-plugin-api" "^1.0.1" + "@backstage/catalog-client" "^1.7.1" + "@backstage/catalog-model" "^1.7.0" + "@backstage/config" "^1.2.0" + "@backstage/errors" "^1.2.4" + "@backstage/plugin-catalog-node" "^1.13.1" + "@backstage/plugin-permission-common" "^0.8.1" + "@backstage/plugin-permission-node" "^0.8.4" + "@types/express" "^4.17.6" + express "^4.17.1" + express-promise-router "^4.1.0" + jenkins "^1.0.0" + node-fetch "^2.6.7" + yn "^4.0.0" + +"@backstage-community/plugin-jenkins-common@^0.1.29", "@backstage-community/plugin-jenkins-common@^0.1.30": + version "0.1.30" + resolved "https://registry.yarnpkg.com/@backstage-community/plugin-jenkins-common/-/plugin-jenkins-common-0.1.30.tgz#79759531b03fd3918b8dfa679e27e4862a07b500" + integrity sha512-C7TIx6fTDdfyqe4ZmO6ygT+PGivsns6J9rjlHbPdckjWGzhsFWamb2Y/cteE4IzPs2b6MEIYkPujOmeX09LzDQ== + dependencies: + "@backstage/plugin-catalog-common" "^1.1.0" + "@backstage/plugin-permission-common" "^0.8.1" + +"@backstage-community/plugin-jenkins@^0.12.1": + version "0.12.1" + resolved "https://registry.yarnpkg.com/@backstage-community/plugin-jenkins/-/plugin-jenkins-0.12.1.tgz#0c916b4a832d0dd7b2a241cb2aabd46bb2ba9990" + integrity sha512-D16BU/mXVAbn5L52J/9C5TR80DfdmLejK3ByLUhZ+WTFHqDuPgO9AqL0tJWBmJpDXe0sYbmVHlmezhV6I89/dw== + dependencies: + "@backstage-community/plugin-jenkins-common" "^0.1.30" + "@backstage/catalog-model" "^1.7.0" + "@backstage/core-compat-api" "^0.3.1" + "@backstage/core-components" "^0.15.1" + "@backstage/core-plugin-api" "^1.10.0" + "@backstage/errors" "^1.2.4" + "@backstage/frontend-plugin-api" "^0.9.0" + "@backstage/plugin-catalog-react" "^1.14.0" + "@material-ui/core" "^4.12.2" + "@material-ui/icons" "^4.9.1" + "@types/react" "^16.13.1 || ^17.0.0 || ^18.0.0" + luxon "^3.0.0" + react-use "^17.2.4" + "@backstage-community/plugin-sonarqube-react@^0.2.1": version "0.2.1" resolved "https://registry.yarnpkg.com/@backstage-community/plugin-sonarqube-react/-/plugin-sonarqube-react-0.2.1.tgz#aeacd6c0a7d3c6e8b826bff5561836c6f4d3f025" @@ -2831,6 +2968,19 @@ "@material-ui/core" "^4.12.2" "@material-ui/icons" "^4.9.1" +"@backstage/app-defaults@^1.5.14": + version "1.5.14" + resolved "https://registry.yarnpkg.com/@backstage/app-defaults/-/app-defaults-1.5.14.tgz#43bad9d89a638db9705974a5a58174e1f7ad1089" + integrity sha512-WhSjWIQv4pgiBzZOZc8y/cTB11z2h+9v29sYA88tP+6d2Co2z1FGcGyMpYZMzYS0bxrblOEvavhyzsMWl/zgeQ== + dependencies: + "@backstage/core-app-api" "^1.15.2" + "@backstage/core-components" "^0.16.1" + "@backstage/core-plugin-api" "^1.10.1" + "@backstage/plugin-permission-react" "^0.4.28" + "@backstage/theme" "^0.6.2" + "@material-ui/core" "^4.12.2" + "@material-ui/icons" "^4.9.1" + "@backstage/backend-app-api@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@backstage/backend-app-api/-/backend-app-api-1.0.0.tgz#d4a8565f911d0d5b366897a4dd0372e2cae14216" @@ -3142,6 +3292,23 @@ knex "^3.0.0" luxon "^3.0.0" +"@backstage/backend-plugin-api@^1.0.1", "@backstage/backend-plugin-api@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@backstage/backend-plugin-api/-/backend-plugin-api-1.0.2.tgz#d0a17dbf66e32d7d56756bc7fd6ecd0fb854f40f" + integrity sha512-XcTOx4ARR3JmV1y28jsi0SevQXxDF5KvOTn5D50G9XRIUnnlDMHiJjBg22kxDOZrckTlC7WWGuVe5LHnSTkcrA== + dependencies: + "@backstage/cli-common" "^0.1.15" + "@backstage/config" "^1.3.0" + "@backstage/errors" "^1.2.5" + "@backstage/plugin-auth-node" "^0.5.4" + "@backstage/plugin-permission-common" "^0.8.2" + "@backstage/types" "^1.2.0" + "@types/express" "^4.17.6" + "@types/luxon" "^3.0.0" + express "^4.17.1" + knex "^3.0.0" + luxon "^3.0.0" + "@backstage/backend-tasks@^0.6.1": version "0.6.1" resolved "https://registry.yarnpkg.com/@backstage/backend-tasks/-/backend-tasks-0.6.1.tgz#5e85f1a2f192c30b771f2e487bb116f7b72e1fcd" @@ -3224,6 +3391,16 @@ cross-fetch "^4.0.0" uri-template "^2.0.0" +"@backstage/catalog-client@^1.7.1", "@backstage/catalog-client@^1.8.0": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@backstage/catalog-client/-/catalog-client-1.8.0.tgz#a618569abc552cadade18e29ce24e57ed0502fdc" + integrity sha512-+0DPzVwkJCTxY28VvUH7yg2087/JSyGZ7iHHShI40HAbsCitd5woJnmYa+2O1B8PuJxFbAYoZesh4uARp58NKg== + dependencies: + "@backstage/catalog-model" "^1.7.1" + "@backstage/errors" "^1.2.5" + cross-fetch "^4.0.0" + uri-template "^2.0.0" + "@backstage/catalog-model@^1.4.1": version "1.4.1" resolved "https://registry.yarnpkg.com/@backstage/catalog-model/-/catalog-model-1.4.1.tgz#8d57217647a3eef68ad7c7c268af573be9974201" @@ -3247,6 +3424,16 @@ ajv "^8.10.0" lodash "^4.17.21" +"@backstage/catalog-model@^1.5.0", "@backstage/catalog-model@^1.7.1": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@backstage/catalog-model/-/catalog-model-1.7.1.tgz#ac158f9e66f559614ea5546f01a66bb03090663b" + integrity sha512-TdtcpMzMMcSXlmJylEG2KbEHwxhd9XkxnvUFPKaF35Q6PjV9MhERw4qBSrINCzaIU5zn8baiyQBbg6j93r+kyA== + dependencies: + "@backstage/errors" "^1.2.5" + "@backstage/types" "^1.2.0" + ajv "^8.10.0" + lodash "^4.17.21" + "@backstage/catalog-model@^1.6.0": version "1.6.0" resolved "https://registry.yarnpkg.com/@backstage/catalog-model/-/catalog-model-1.6.0.tgz#4b50ec399597d7e91a1d9703f59614bf826922f8" @@ -3262,6 +3449,11 @@ resolved "https://registry.yarnpkg.com/@backstage/cli-common/-/cli-common-0.1.14.tgz#2291520acfbac860a05dd48fc3b876d5cd789b76" integrity sha512-4kGWGrFuxoaCne2aHCOVW+vi8y2MLEMEj785SEApMG2J8jXJXUuIOzWw0MrN0pM1FqBXDb6aeQd+bmQMK/Ci+w== +"@backstage/cli-common@^0.1.15": + version "0.1.15" + resolved "https://registry.yarnpkg.com/@backstage/cli-common/-/cli-common-0.1.15.tgz#20ea69cdee5025bdbdba38492ec174b1d8d470e3" + integrity sha512-z+jMq5h+J1ruZ0IC610QFfSQxLk3IGSL1pZ/xnEIbyohaak+eeOZCyNzKBLwQrBDnIFCdmMoq69/Vrejo2hPeA== + "@backstage/cli-node@^0.2.8": version "0.2.8" resolved "https://registry.yarnpkg.com/@backstage/cli-node/-/cli-node-0.2.8.tgz#66a1484e9747edb1f2600dcf1e6789525b07bc5a" @@ -3455,6 +3647,15 @@ "@backstage/errors" "^1.2.4" "@backstage/types" "^1.1.1" +"@backstage/config@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@backstage/config/-/config-1.3.0.tgz#ca5771175451410bb7977e80e2b192a4dc2efd9d" + integrity sha512-DXrcPIwgZAHrKj3MRHt6yC63E1/LXXgM0hdAFJYkRYb7r+VX3KGBfxo1NtWdB6A4gTXhxfEWc7FWvdloIDDoGg== + dependencies: + "@backstage/errors" "^1.2.5" + "@backstage/types" "^1.2.0" + ms "^2.1.3" + "@backstage/core-app-api@^1.14.2", "@backstage/core-app-api@^1.15.0": version "1.15.0" resolved "https://registry.yarnpkg.com/@backstage/core-app-api/-/core-app-api-1.15.0.tgz#d121fcb8b93e9043302f23646fb8ec2dcdb8171b" @@ -3474,6 +3675,24 @@ zen-observable "^0.10.0" zod "^3.22.4" +"@backstage/core-app-api@^1.15.2": + version "1.15.2" + resolved "https://registry.yarnpkg.com/@backstage/core-app-api/-/core-app-api-1.15.2.tgz#a31aae0e7a1cfcb2eab163b75b4141a31cff1982" + integrity sha512-YjweUnlPAF0Z9gRa1BzdKbp/Gd7JAHujc2EQKD9c96W3KOWQn80CVzS2krl7G7Vd1mvyNBB/78vu2SOn+rRGMw== + dependencies: + "@backstage/config" "^1.3.0" + "@backstage/core-plugin-api" "^1.10.1" + "@backstage/types" "^1.2.0" + "@backstage/version-bridge" "^1.0.10" + "@types/prop-types" "^15.7.3" + history "^5.0.0" + i18next "^22.4.15" + lodash "^4.17.21" + prop-types "^15.7.2" + react-use "^17.2.4" + zen-observable "^0.10.0" + zod "^3.22.4" + "@backstage/core-compat-api@^0.2.8": version "0.2.8" resolved "https://registry.yarnpkg.com/@backstage/core-compat-api/-/core-compat-api-0.2.8.tgz#438ffaf8a615247d2c3b90e7bcae08f7c65d3849" @@ -3496,6 +3715,16 @@ "@types/react" "^16.13.1 || ^17.0.0" lodash "^4.17.21" +"@backstage/core-compat-api@^0.3.1", "@backstage/core-compat-api@^0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@backstage/core-compat-api/-/core-compat-api-0.3.3.tgz#2acb6bd37e154a6c3925aa74028a817bd3b6dbec" + integrity sha512-vaQ2wrYr8SS+5pGElps2BFRU//hrGJ7BfGpMpP7nqsMYzdNmOWd5WWAZu4imDVUJvB98zJ88MmbKyvd0yKNMPQ== + dependencies: + "@backstage/core-plugin-api" "^1.10.1" + "@backstage/frontend-plugin-api" "^0.9.2" + "@backstage/version-bridge" "^1.0.10" + lodash "^4.17.21" + "@backstage/core-components@^0.13.3": version "0.13.3" resolved "https://registry.yarnpkg.com/@backstage/core-components/-/core-components-0.13.3.tgz#902250e78a8e4deac6d3d364a378d7ce0c7fb098" @@ -3629,6 +3858,102 @@ zen-observable "^0.10.0" zod "^3.22.4" +"@backstage/core-components@^0.15.1": + version "0.15.1" + resolved "https://registry.yarnpkg.com/@backstage/core-components/-/core-components-0.15.1.tgz#263a2d519e6e286e9a403d33d631f8affe9dbd65" + integrity sha512-Vqll9vyExGln1K+M6FriWKlU1jkpwEg0X6WtxrwxcykdKQNAfiyJwU7K/NuPCUEP80TsbHycOPFHdU+SWygI8A== + dependencies: + "@backstage/config" "^1.2.0" + "@backstage/core-plugin-api" "^1.10.0" + "@backstage/errors" "^1.2.4" + "@backstage/theme" "^0.6.0" + "@backstage/version-bridge" "^1.0.10" + "@date-io/core" "^1.3.13" + "@material-table/core" "^3.1.0" + "@material-ui/core" "^4.12.2" + "@material-ui/icons" "^4.9.1" + "@material-ui/lab" "4.0.0-alpha.61" + "@react-hookz/web" "^24.0.0" + "@types/react-sparklines" "^1.7.0" + ansi-regex "^6.0.1" + classnames "^2.2.6" + d3-selection "^3.0.0" + d3-shape "^3.0.0" + d3-zoom "^3.0.0" + dagre "^0.8.5" + linkify-react "4.1.3" + linkifyjs "4.1.3" + lodash "^4.17.21" + pluralize "^8.0.0" + qs "^6.9.4" + rc-progress "3.5.1" + react-helmet "6.1.0" + react-hook-form "^7.12.2" + react-idle-timer "5.7.2" + react-markdown "^8.0.0" + react-sparklines "^1.7.0" + react-syntax-highlighter "^15.4.5" + react-use "^17.3.2" + react-virtualized-auto-sizer "^1.0.11" + react-window "^1.8.6" + remark-gfm "^3.0.1" + zen-observable "^0.10.0" + zod "^3.22.4" + +"@backstage/core-components@^0.16.1": + version "0.16.1" + resolved "https://registry.yarnpkg.com/@backstage/core-components/-/core-components-0.16.1.tgz#f7aa1cbfd6735b4cd7cca283f9f6a74cbb333d44" + integrity sha512-NJXhcdYVeFo08PnJBjOS0jV2rlDic8aIaqM6P+VepS6dG5toDOl3L5MryciVDyEgT/q/Alq3wXEctL4BmkKjAw== + dependencies: + "@backstage/config" "^1.3.0" + "@backstage/core-plugin-api" "^1.10.1" + "@backstage/errors" "^1.2.5" + "@backstage/theme" "^0.6.2" + "@backstage/version-bridge" "^1.0.10" + "@date-io/core" "^1.3.13" + "@material-table/core" "^3.1.0" + "@material-ui/core" "^4.12.2" + "@material-ui/icons" "^4.9.1" + "@material-ui/lab" "4.0.0-alpha.61" + "@react-hookz/web" "^24.0.0" + "@testing-library/react" "^16.0.0" + "@types/react-sparklines" "^1.7.0" + ansi-regex "^6.0.1" + classnames "^2.2.6" + d3-selection "^3.0.0" + d3-shape "^3.0.0" + d3-zoom "^3.0.0" + dagre "^0.8.5" + linkify-react "4.1.3" + linkifyjs "4.1.3" + lodash "^4.17.21" + pluralize "^8.0.0" + qs "^6.9.4" + rc-progress "3.5.1" + react-helmet "6.1.0" + react-hook-form "^7.12.2" + react-idle-timer "5.7.2" + react-markdown "^8.0.0" + react-sparklines "^1.7.0" + react-syntax-highlighter "^15.4.5" + react-use "^17.3.2" + react-virtualized-auto-sizer "^1.0.11" + react-window "^1.8.6" + remark-gfm "^3.0.1" + zen-observable "^0.10.0" + zod "^3.22.4" + +"@backstage/core-plugin-api@^1.10.0", "@backstage/core-plugin-api@^1.10.1": + version "1.10.1" + resolved "https://registry.yarnpkg.com/@backstage/core-plugin-api/-/core-plugin-api-1.10.1.tgz#04cd87fc5262e1f1d7a574761a2cd9161ba1a50a" + integrity sha512-/hXKYZBzW9Kf5MgfdU4Dtfj2UyVVZ3F+ghm2WYIW7KgoI6EiZ4Ovwmpo9VYEj6kwQCAruKrqrPVhqtHVR/1Sog== + dependencies: + "@backstage/config" "^1.3.0" + "@backstage/errors" "^1.2.5" + "@backstage/types" "^1.2.0" + "@backstage/version-bridge" "^1.0.10" + history "^5.0.0" + "@backstage/core-plugin-api@^1.5.3": version "1.5.3" resolved "https://registry.yarnpkg.com/@backstage/core-plugin-api/-/core-plugin-api-1.5.3.tgz#2b28aa74c97d012873f676479c477e26849e44d3" @@ -3666,6 +3991,23 @@ "@types/react" "^16.13.1 || ^17.0.0 || ^18.0.0" history "^5.0.0" +"@backstage/dev-utils@^1.1.0": + version "1.1.4" + resolved "https://registry.yarnpkg.com/@backstage/dev-utils/-/dev-utils-1.1.4.tgz#04706872bdc15df84320938fc8bc8ffb31f9f0fb" + integrity sha512-FcSoaZ9MgUEztuHWPNcWfw3KEiHO0EOR4Ng7ntez43blDeElyj8c7ib/cUYYaovu9Rxyz4v3gR8adua/l5/0bg== + dependencies: + "@backstage/app-defaults" "^1.5.14" + "@backstage/catalog-model" "^1.7.1" + "@backstage/core-app-api" "^1.15.2" + "@backstage/core-components" "^0.16.1" + "@backstage/core-plugin-api" "^1.10.1" + "@backstage/integration-react" "^1.2.1" + "@backstage/plugin-catalog-react" "^1.14.2" + "@backstage/theme" "^0.6.2" + "@material-ui/core" "^4.12.2" + "@material-ui/icons" "^4.9.1" + react-use "^17.2.4" + "@backstage/e2e-test-utils@^0.1.1": version "0.1.1" resolved "https://registry.yarnpkg.com/@backstage/e2e-test-utils/-/e2e-test-utils-0.1.1.tgz#309164a5006593da711f55f430dc4d11a3036514" @@ -3691,6 +4033,14 @@ "@backstage/types" "^1.1.1" serialize-error "^8.0.1" +"@backstage/errors@^1.2.5": + version "1.2.5" + resolved "https://registry.yarnpkg.com/@backstage/errors/-/errors-1.2.5.tgz#447177ac5a5e904b5d54019f6f14eda3c1073177" + integrity sha512-JoLzSdCt5uHPYvC/aR/UE10+d1WlTEsR0L7xWBgcTluC9VUpFmV5W15bNL+ckZHi14nQV3V1DOk9uhsR1ER45w== + dependencies: + "@backstage/types" "^1.2.0" + serialize-error "^8.0.1" + "@backstage/eslint-plugin@^0.1.9": version "0.1.9" resolved "https://registry.yarnpkg.com/@backstage/eslint-plugin/-/eslint-plugin-0.1.9.tgz#f8c93f8157945c5ca1be728c9fadfe4ab26ec082" @@ -3699,6 +4049,22 @@ "@manypkg/get-packages" "^1.1.3" minimatch "^9.0.0" +"@backstage/frontend-app-api@^0.10.2": + version "0.10.2" + resolved "https://registry.yarnpkg.com/@backstage/frontend-app-api/-/frontend-app-api-0.10.2.tgz#4d79c8716ac1084210cb70a7742b86156384383f" + integrity sha512-PZi/dqnCWWZRSF/ILhBtqXl/HXFFoM85CkfF9OU5Npdd/KnzC33croDSTHqAxQ9TRfNabxKRUJqwFnN24RqaTA== + dependencies: + "@backstage/config" "^1.3.0" + "@backstage/core-app-api" "^1.15.2" + "@backstage/core-plugin-api" "^1.10.1" + "@backstage/errors" "^1.2.5" + "@backstage/frontend-defaults" "^0.1.3" + "@backstage/frontend-plugin-api" "^0.9.2" + "@backstage/types" "^1.2.0" + "@backstage/version-bridge" "^1.0.10" + lodash "^4.17.21" + zod "^3.22.4" + "@backstage/frontend-app-api@^0.8.0": version "0.8.0" resolved "https://registry.yarnpkg.com/@backstage/frontend-app-api/-/frontend-app-api-0.8.0.tgz#61f8fb62404a2a301e98f513036a6a10b7cc8778" @@ -3718,6 +4084,18 @@ "@types/react" "^16.13.1 || ^17.0.0 || ^18.0.0" lodash "^4.17.21" +"@backstage/frontend-defaults@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@backstage/frontend-defaults/-/frontend-defaults-0.1.3.tgz#4cd2a0e45c92c01740c8a63760c685b3bbf4b04c" + integrity sha512-IaWr601G057ZWk7X9zpndJ/FtlryK5OvErLuIHVJHPk8v95lksWHzcF+u2KvlW8HivDf072NJbm1a5HGyc21Gw== + dependencies: + "@backstage/config" "^1.3.0" + "@backstage/errors" "^1.2.5" + "@backstage/frontend-app-api" "^0.10.2" + "@backstage/frontend-plugin-api" "^0.9.2" + "@backstage/plugin-app" "^0.1.3" + "@react-hookz/web" "^24.0.0" + "@backstage/frontend-plugin-api@^0.7.0": version "0.7.0" resolved "https://registry.yarnpkg.com/@backstage/frontend-plugin-api/-/frontend-plugin-api-0.7.0.tgz#b4ff5180cb09e014d10607014d019588ba884dac" @@ -3748,6 +4126,34 @@ zod "^3.22.4" zod-to-json-schema "^3.21.4" +"@backstage/frontend-plugin-api@^0.9.0", "@backstage/frontend-plugin-api@^0.9.2": + version "0.9.2" + resolved "https://registry.yarnpkg.com/@backstage/frontend-plugin-api/-/frontend-plugin-api-0.9.2.tgz#573d259ec59105dcb44f6cb8384d0639f6b2d9a7" + integrity sha512-yeiHuccylah8f8zCR18HM/saK2AkHuNF5Y6tB8MShJnZjANfn6OCOTB8jGZ5L663YGEr3+1EIAVAMi8tGv/FHw== + dependencies: + "@backstage/core-components" "^0.16.1" + "@backstage/core-plugin-api" "^1.10.1" + "@backstage/types" "^1.2.0" + "@backstage/version-bridge" "^1.0.10" + "@material-ui/core" "^4.12.4" + lodash "^4.17.21" + zod "^3.22.4" + zod-to-json-schema "^3.21.4" + +"@backstage/frontend-test-utils@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@backstage/frontend-test-utils/-/frontend-test-utils-0.2.3.tgz#65b1b1b8f6565845b2706ba74eb298abbae8b6e6" + integrity sha512-kJnP8cBjQz1XGHvekuOu7eLY2K9a52OUkvB96nApoCBo/hroaJVBpXfAydFUglLWk+Hecc6hzWfRXdEozhfdWw== + dependencies: + "@backstage/config" "^1.3.0" + "@backstage/frontend-app-api" "^0.10.2" + "@backstage/frontend-plugin-api" "^0.9.2" + "@backstage/plugin-app" "^0.1.3" + "@backstage/test-utils" "^1.7.2" + "@backstage/types" "^1.2.0" + "@backstage/version-bridge" "^1.0.10" + zod "^3.22.4" + "@backstage/integration-aws-node@^0.1.12": version "0.1.12" resolved "https://registry.yarnpkg.com/@backstage/integration-aws-node/-/integration-aws-node-0.1.12.tgz#d2c5ac7c81cd6c2733dcfd24544ad21931ea815d" @@ -3785,6 +4191,17 @@ "@material-ui/icons" "^4.9.1" "@types/react" "^16.13.1 || ^17.0.0" +"@backstage/integration-react@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@backstage/integration-react/-/integration-react-1.2.1.tgz#0a510997c9fbe26c903184191a577f20af521328" + integrity sha512-crjtcGLmTal6oqKx/06bwYzs1S/4miWY4kkO5iQPO6JQO4M5t7vlUYFv5B280b3tcWXh9dhmejtOvYEw+PTNuw== + dependencies: + "@backstage/config" "^1.3.0" + "@backstage/core-plugin-api" "^1.10.1" + "@backstage/integration" "^1.15.2" + "@material-ui/core" "^4.12.2" + "@material-ui/icons" "^4.9.1" + "@backstage/integration@^1.14.0": version "1.14.0" resolved "https://registry.yarnpkg.com/@backstage/integration/-/integration-1.14.0.tgz#a7b3542f3c0cbb1bf902dab864512f6a28718985" @@ -3815,6 +4232,21 @@ lodash "^4.17.21" luxon "^3.0.0" +"@backstage/integration@^1.15.2": + version "1.15.2" + resolved "https://registry.yarnpkg.com/@backstage/integration/-/integration-1.15.2.tgz#2f534ab8f6cc1e686654fee99770c5018acdc491" + integrity sha512-cCigk62u4Ikkr3J/APf0ZFpT5F7HCM/iT+hJh4n9a/ufipu945X5QfgO7odsTL5uG8YgzbU1xl25W/Z/PGuWIw== + dependencies: + "@azure/identity" "^4.0.0" + "@backstage/config" "^1.3.0" + "@backstage/errors" "^1.2.5" + "@octokit/auth-app" "^4.0.0" + "@octokit/rest" "^19.0.3" + cross-fetch "^4.0.0" + git-url-parse "^15.0.0" + lodash "^4.17.21" + luxon "^3.0.0" + "@backstage/integration@^1.5.1": version "1.5.1" resolved "https://registry.yarnpkg.com/@backstage/integration/-/integration-1.5.1.tgz#10a64060ba74251cc6256ab8dcb3394d4beb8201" @@ -3892,6 +4324,22 @@ express "^4.17.1" fs-extra "^11.2.0" +"@backstage/plugin-app@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@backstage/plugin-app/-/plugin-app-0.1.3.tgz#60c3fc1847700a1476741b6c9ee7f8c321e6ab7d" + integrity sha512-0d4oflSUVmYX3mPPyJQ8l8xP/6PJiI/YbqBIbflbExDpvyWpfs2hZ8CsnpaCkDqVMkJkG2rmUyq6VjqOp0I/zw== + dependencies: + "@backstage/core-components" "^0.16.1" + "@backstage/core-plugin-api" "^1.10.1" + "@backstage/frontend-plugin-api" "^0.9.2" + "@backstage/integration-react" "^1.2.1" + "@backstage/plugin-permission-react" "^0.4.28" + "@backstage/theme" "^0.6.2" + "@material-ui/core" "^4.9.13" + "@material-ui/icons" "^4.9.1" + "@material-ui/lab" "^4.0.0-alpha.61" + react-use "^17.2.4" + "@backstage/plugin-auth-backend-module-atlassian-provider@^0.3.0": version "0.3.0" resolved "https://registry.yarnpkg.com/@backstage/plugin-auth-backend-module-atlassian-provider/-/plugin-auth-backend-module-atlassian-provider-0.3.0.tgz#3bd3e8ab8cac5a0b96b2a38d3a45ed2b96586a61" @@ -4207,6 +4655,30 @@ zod "^3.22.4" zod-to-json-schema "^3.21.4" +"@backstage/plugin-auth-node@^0.5.4": + version "0.5.4" + resolved "https://registry.yarnpkg.com/@backstage/plugin-auth-node/-/plugin-auth-node-0.5.4.tgz#77f1bd73a25b901dc6d888fb80b7edd477f35cb8" + integrity sha512-XoKVmF1S9GrqdfSRsFUY9tnXB2bcuQJAVVrZzx7OUpY+O1ED/dFwAwxPtIrC1EkhoYvzM6IUCik8CR6k5fAJLA== + dependencies: + "@backstage/backend-common" "^0.25.0" + "@backstage/backend-plugin-api" "^1.0.2" + "@backstage/catalog-client" "^1.8.0" + "@backstage/catalog-model" "^1.7.1" + "@backstage/config" "^1.3.0" + "@backstage/errors" "^1.2.5" + "@backstage/types" "^1.2.0" + "@types/express" "*" + "@types/passport" "^1.0.3" + express "^4.17.1" + jose "^5.0.0" + lodash "^4.17.21" + node-fetch "^2.7.0" + passport "^0.7.0" + winston "^3.2.1" + zod "^3.22.4" + zod-to-json-schema "^3.21.4" + zod-validation-error "^3.4.0" + "@backstage/plugin-auth-react@^0.1.6": version "0.1.6" resolved "https://registry.yarnpkg.com/@backstage/plugin-auth-react/-/plugin-auth-react-0.1.6.tgz#71746d05568b0e5510ae6e52eac1842dadfb27c2" @@ -4338,6 +4810,15 @@ "@backstage/plugin-permission-common" "^0.8.1" "@backstage/plugin-search-common" "^1.2.14" +"@backstage/plugin-catalog-common@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@backstage/plugin-catalog-common/-/plugin-catalog-common-1.1.1.tgz#367af94a4517e8f7d812b7caee9e727bb4956aee" + integrity sha512-jMOeKKNVTjVn5B/Oc5w3FxiKU/YvUanqw0pDxCOmimwQms+88Gpakh/EmWuCx3UU2J74hFKse/U6iS4MAALMiQ== + dependencies: + "@backstage/catalog-model" "^1.7.1" + "@backstage/plugin-permission-common" "^0.8.2" + "@backstage/plugin-search-common" "^1.2.15" + "@backstage/plugin-catalog-graph@^0.4.9": version "0.4.9" resolved "https://registry.yarnpkg.com/@backstage/plugin-catalog-graph/-/plugin-catalog-graph-0.4.9.tgz#0f8468f8284b53be81befa8d7b2760ac07777cb4" @@ -4404,6 +4885,20 @@ "@backstage/plugin-permission-node" "^0.8.3" "@backstage/types" "^1.1.1" +"@backstage/plugin-catalog-node@^1.13.1": + version "1.14.0" + resolved "https://registry.yarnpkg.com/@backstage/plugin-catalog-node/-/plugin-catalog-node-1.14.0.tgz#f0ae22d75cbfb92d3e6df361e3e46e427ad53185" + integrity sha512-jJK+Hyz/kzp058uQTB9VLyeXeq3nmhsaFsjf0QI8hBk2wjY9POOKrd+fq+5S/CHG0q5ZX1KDRMq23HlYIYHtLA== + dependencies: + "@backstage/backend-plugin-api" "^1.0.2" + "@backstage/catalog-client" "^1.8.0" + "@backstage/catalog-model" "^1.7.1" + "@backstage/errors" "^1.2.5" + "@backstage/plugin-catalog-common" "^1.1.1" + "@backstage/plugin-permission-common" "^0.8.2" + "@backstage/plugin-permission-node" "^0.8.5" + "@backstage/types" "^1.2.0" + "@backstage/plugin-catalog-react@^1.11.2", "@backstage/plugin-catalog-react@^1.13.0": version "1.13.0" resolved "https://registry.yarnpkg.com/@backstage/plugin-catalog-react/-/plugin-catalog-react-1.13.0.tgz#92b9555b5a976783b47540c001028418ae26ae32" @@ -4435,6 +4930,37 @@ yaml "^2.0.0" zen-observable "^0.10.0" +"@backstage/plugin-catalog-react@^1.12.2", "@backstage/plugin-catalog-react@^1.14.0", "@backstage/plugin-catalog-react@^1.14.2": + version "1.14.2" + resolved "https://registry.yarnpkg.com/@backstage/plugin-catalog-react/-/plugin-catalog-react-1.14.2.tgz#46b01f42fc5a98d0f92b08be7d3b4d65782badda" + integrity sha512-16sU8C0RYQOLW8/p1NoLnW3bcFOyOmd0ksQ072SkR8eB+X9VQKenJEJDMAqDq7A6yGp0l6xsg9rL5lnM8WRixg== + dependencies: + "@backstage/catalog-client" "^1.8.0" + "@backstage/catalog-model" "^1.7.1" + "@backstage/core-compat-api" "^0.3.3" + "@backstage/core-components" "^0.16.1" + "@backstage/core-plugin-api" "^1.10.1" + "@backstage/errors" "^1.2.5" + "@backstage/frontend-plugin-api" "^0.9.2" + "@backstage/frontend-test-utils" "^0.2.3" + "@backstage/integration-react" "^1.2.1" + "@backstage/plugin-catalog-common" "^1.1.1" + "@backstage/plugin-permission-common" "^0.8.2" + "@backstage/plugin-permission-react" "^0.4.28" + "@backstage/types" "^1.2.0" + "@backstage/version-bridge" "^1.0.10" + "@material-ui/core" "^4.12.2" + "@material-ui/icons" "^4.9.1" + "@material-ui/lab" "4.0.0-alpha.61" + "@react-hookz/web" "^24.0.0" + classnames "^2.2.6" + lodash "^4.17.21" + material-ui-popup-state "^1.9.3" + qs "^6.9.4" + react-use "^17.2.4" + yaml "^2.0.0" + zen-observable "^0.10.0" + "@backstage/plugin-catalog-react@^1.12.3": version "1.12.3" resolved "https://registry.yarnpkg.com/@backstage/plugin-catalog-react/-/plugin-catalog-react-1.12.3.tgz#f33400aef73799875d17b0b118f8502a87cb4b4f" @@ -4777,6 +5303,19 @@ zod "^3.22.4" zod-to-json-schema "^3.20.4" +"@backstage/plugin-permission-common@^0.8.2": + version "0.8.2" + resolved "https://registry.yarnpkg.com/@backstage/plugin-permission-common/-/plugin-permission-common-0.8.2.tgz#d0e94d39f66ca2ffb5f1ba0e566b61e3bf26010c" + integrity sha512-rq8AMUufiFMOUeXZAJ/y1JzRpUSRFVs7ddhtsmX5nvkZP07ONT8WwnVZPYFywfX8rDt/Ym4wZuPnPk4xqHX04A== + dependencies: + "@backstage/config" "^1.3.0" + "@backstage/errors" "^1.2.5" + "@backstage/types" "^1.2.0" + cross-fetch "^4.0.0" + uuid "^11.0.0" + zod "^3.22.4" + zod-to-json-schema "^3.20.4" + "@backstage/plugin-permission-node@^0.8.3": version "0.8.3" resolved "https://registry.yarnpkg.com/@backstage/plugin-permission-node/-/plugin-permission-node-0.8.3.tgz#3ae1b89dc21fba69541ede123ee025b34c691378" @@ -4794,6 +5333,23 @@ zod "^3.22.4" zod-to-json-schema "^3.20.4" +"@backstage/plugin-permission-node@^0.8.4", "@backstage/plugin-permission-node@^0.8.5": + version "0.8.5" + resolved "https://registry.yarnpkg.com/@backstage/plugin-permission-node/-/plugin-permission-node-0.8.5.tgz#51b73b1d580584476dd51fede729691673136848" + integrity sha512-fj9y5Vb2GR8/u4ejhLUrozRnk8oQBb8I4XyOW2DAYkAyKA40OJMlVHvudY+13likb6TS0ByXSuhQWYSpQbUD3g== + dependencies: + "@backstage/backend-common" "^0.25.0" + "@backstage/backend-plugin-api" "^1.0.2" + "@backstage/config" "^1.3.0" + "@backstage/errors" "^1.2.5" + "@backstage/plugin-auth-node" "^0.5.4" + "@backstage/plugin-permission-common" "^0.8.2" + "@types/express" "^4.17.6" + express "^4.17.1" + express-promise-router "^4.1.0" + zod "^3.22.4" + zod-to-json-schema "^3.20.4" + "@backstage/plugin-permission-react@^0.4.14": version "0.4.14" resolved "https://registry.yarnpkg.com/@backstage/plugin-permission-react/-/plugin-permission-react-0.4.14.tgz#50b1e60230a6385fbd7f5bbb175c64710114f2bd" @@ -4829,6 +5385,16 @@ "@types/react" "^16.13.1 || ^17.0.0 || ^18.0.0" swr "^2.0.0" +"@backstage/plugin-permission-react@^0.4.28": + version "0.4.28" + resolved "https://registry.yarnpkg.com/@backstage/plugin-permission-react/-/plugin-permission-react-0.4.28.tgz#e9148b8dfc60047b72cfd0fff3139ec397a57a38" + integrity sha512-i0y8LnXELXGv0PNKg1Mz/y0+Hi9/tJtybwZHdYLNx+kmLv252djw3rUmdhsgb/ra/t5oFJKWZLrXO1ZuEB9XxQ== + dependencies: + "@backstage/config" "^1.3.0" + "@backstage/core-plugin-api" "^1.10.1" + "@backstage/plugin-permission-common" "^0.8.2" + swr "^2.0.0" + "@backstage/plugin-proxy-backend@^0.5.6": version "0.5.6" resolved "https://registry.yarnpkg.com/@backstage/plugin-proxy-backend/-/plugin-proxy-backend-0.5.6.tgz#91de953d7f3307ec86adee35985c10e375ed80e2" @@ -5251,6 +5817,14 @@ "@backstage/plugin-permission-common" "^0.8.1" "@backstage/types" "^1.1.1" +"@backstage/plugin-search-common@^1.2.15": + version "1.2.15" + resolved "https://registry.yarnpkg.com/@backstage/plugin-search-common/-/plugin-search-common-1.2.15.tgz#ba953491e8e1aa1f4b82437e037cf2c32115e9aa" + integrity sha512-8ImqtY9DxNV8I8YRbknSSdBOUb3vjjTWraYYmV7pq22K7EOe2HA4ZFYTFPOwibI2ND7jAH9DnvXTFiz5LlY87Q== + dependencies: + "@backstage/plugin-permission-common" "^0.8.2" + "@backstage/types" "^1.2.0" + "@backstage/plugin-search-common@^1.2.5": version "1.2.5" resolved "https://registry.yarnpkg.com/@backstage/plugin-search-common/-/plugin-search-common-1.2.5.tgz#a77e00561063924fba64aac8b9d01c8d31cefc6f" @@ -5499,6 +6073,24 @@ i18next "^22.4.15" zen-observable "^0.10.0" +"@backstage/test-utils@^1.7.2": + version "1.7.2" + resolved "https://registry.yarnpkg.com/@backstage/test-utils/-/test-utils-1.7.2.tgz#11ed81ae8af2c41b34b4b3a2ba605ee9c509fa42" + integrity sha512-U9GIctlOq8H7y7l2BuBSVNhoqgPzHHUbpZ6hSa65jbPGPsvhxpOK6q1aZXj5MCxI/WzaFE6oKnzsZodsCXS/Fg== + dependencies: + "@backstage/config" "^1.3.0" + "@backstage/core-app-api" "^1.15.2" + "@backstage/core-plugin-api" "^1.10.1" + "@backstage/plugin-permission-common" "^0.8.2" + "@backstage/plugin-permission-react" "^0.4.28" + "@backstage/theme" "^0.6.2" + "@backstage/types" "^1.2.0" + "@material-ui/core" "^4.12.2" + "@material-ui/icons" "^4.9.1" + cross-fetch "^4.0.0" + i18next "^22.4.15" + zen-observable "^0.10.0" + "@backstage/theme@^0.4.1": version "0.4.1" resolved "https://registry.yarnpkg.com/@backstage/theme/-/theme-0.4.1.tgz#7156a7e781ed8cc42d767cba2f1c7f26e957200d" @@ -5526,6 +6118,15 @@ "@emotion/styled" "^11.10.5" "@mui/material" "^5.12.2" +"@backstage/theme@^0.6.0", "@backstage/theme@^0.6.2": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@backstage/theme/-/theme-0.6.2.tgz#b4c867496f4b622229d455eb5014f49991740437" + integrity sha512-OC4cqE1K7zvY76WdrgvWTXJGQ7vSxe+E3dbxpd1D0nyMaO353A/n+xUBh/JN+EMVbNyLvJoYLkU7EDraCVDEiQ== + dependencies: + "@emotion/react" "^11.10.5" + "@emotion/styled" "^11.10.5" + "@mui/material" "^5.12.2" + "@backstage/types@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@backstage/types/-/types-1.1.0.tgz#cf33e0c20584e329308acca2e5fa0435f04d4ea5" @@ -5536,6 +6137,16 @@ resolved "https://registry.yarnpkg.com/@backstage/types/-/types-1.1.1.tgz#c9ccb30357005e7fb5fa2ac140198059976eb076" integrity sha512-1cUGu+FwiJZCBOuecd0BOhIRkQYllb+7no9hHhxpAsx/DvsPGMVQMGOMvtdTycdT9SQ5MuSyFwI9wpXp2DwVvQ== +"@backstage/types@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@backstage/types/-/types-1.2.0.tgz#14fec6240e7ec0f3189fca0890be1e54debc54ea" + integrity sha512-YoWvCLJNOgvRXSqH8EoWmmQ8G8+emiYpn5dqDZcMrqAA6Xa8yFFVsQTujEusx5ZSwahPMbSDobNJgiSoXL3XyA== + +"@backstage/version-bridge@^1.0.10": + version "1.0.10" + resolved "https://registry.yarnpkg.com/@backstage/version-bridge/-/version-bridge-1.0.10.tgz#f3f383a27e11a60b382ef1ad411d43a476535ac7" + integrity sha512-KjKhUYGdYADtuhBgkWb2FeQY1xYd/q20GtwWlGBCeXqZAswbGV2I25Kc0UJ4sxDaNIIeNOkzBfPXhriMMQFwkQ== + "@backstage/version-bridge@^1.0.4": version "1.0.4" resolved "https://registry.yarnpkg.com/@backstage/version-bridge/-/version-bridge-1.0.4.tgz#04623e5a57a6df9f84237f62b999d2503f874150" @@ -7695,6 +8306,21 @@ globby "^11.0.0" read-yaml-file "^1.1.0" +"@mapbox/node-pre-gyp@^1.0.0": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz#417db42b7f5323d79e93b34a6d7a2a12c0df43fa" + integrity sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ== + dependencies: + detect-libc "^2.0.0" + https-proxy-agent "^5.0.0" + make-dir "^3.1.0" + node-fetch "^2.6.7" + nopt "^5.0.0" + npmlog "^5.0.1" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.11" + "@material-table/core@^3.1.0": version "3.2.5" resolved "https://registry.yarnpkg.com/@material-table/core/-/core-3.2.5.tgz#37b3c665bed3ded6c147ad74adb330bf49efb213" @@ -10225,6 +10851,14 @@ "@smithy/types" "^3.4.2" tslib "^2.6.2" +"@smithy/abort-controller@^3.1.8": + version "3.1.8" + resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-3.1.8.tgz#ce0c10ddb2b39107d70b06bbb8e4f6e368bc551d" + integrity sha512-+3DOBcUn5/rVjlxGvUPKc416SExarAQ+Qe0bqk30YSUjbepwpS7QN0cyKUSifvLJhdMZ0WPzPP5ymut0oonrpQ== + dependencies: + "@smithy/types" "^3.7.1" + tslib "^2.6.2" + "@smithy/chunked-blob-reader-native@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.0.0.tgz#f6d0eeeb5481026b68b054f45540d924c194d558" @@ -10277,6 +10911,20 @@ "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" +"@smithy/core@^2.5.3", "@smithy/core@^2.5.4": + version "2.5.4" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-2.5.4.tgz#b9eb9c3a8f47d550dcdea19cc95434e66e5556cf" + integrity sha512-iFh2Ymn2sCziBRLPuOOxRPkuCx/2gBdXtBGuCUFLUe6bWYjKnhHyIPqGeNkLZ5Aco/5GjebRTBFiWID3sDbrKw== + dependencies: + "@smithy/middleware-serde" "^3.0.10" + "@smithy/protocol-http" "^4.1.7" + "@smithy/types" "^3.7.1" + "@smithy/util-body-length-browser" "^3.0.0" + "@smithy/util-middleware" "^3.0.10" + "@smithy/util-stream" "^3.3.1" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + "@smithy/credential-provider-imds@^2.0.0", "@smithy/credential-provider-imds@^2.0.1": version "2.0.1" resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.1.tgz#e034f3d8ee6ad178becb267886056233870661d0" @@ -10387,6 +11035,17 @@ "@smithy/util-base64" "^3.0.0" tslib "^2.6.2" +"@smithy/fetch-http-handler@^4.1.1": + version "4.1.1" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-4.1.1.tgz#cead80762af4cdea11e7eeb627ea1c4835265dfa" + integrity sha512-bH7QW0+JdX0bPBadXt8GwMof/jz0H28I84hU1Uet9ISpzUqXqRQ3fEZJ+ANPOhzSEczYvANNl3uDQDYArSFDtA== + dependencies: + "@smithy/protocol-http" "^4.1.7" + "@smithy/querystring-builder" "^3.0.10" + "@smithy/types" "^3.7.1" + "@smithy/util-base64" "^3.0.0" + tslib "^2.6.2" + "@smithy/hash-blob-browser@^2.0.1": version "2.0.1" resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-2.0.1.tgz#3755965d74e2438ed337f5e11cd4d332d8945a9e" @@ -10527,6 +11186,20 @@ "@smithy/util-middleware" "^3.0.6" tslib "^2.6.2" +"@smithy/middleware-endpoint@^3.2.3", "@smithy/middleware-endpoint@^3.2.4": + version "3.2.4" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-3.2.4.tgz#aaded88e3848e56edc99797d71069817fe20cb44" + integrity sha512-TybiW2LA3kYVd3e+lWhINVu1o26KJbBwOpADnf0L4x/35vLVica77XVR5hvV9+kWeTGeSJ3IHTcYxbRxlbwhsg== + dependencies: + "@smithy/core" "^2.5.4" + "@smithy/middleware-serde" "^3.0.10" + "@smithy/node-config-provider" "^3.1.11" + "@smithy/shared-ini-file-loader" "^3.1.11" + "@smithy/types" "^3.7.1" + "@smithy/url-parser" "^3.0.10" + "@smithy/util-middleware" "^3.0.10" + tslib "^2.6.2" + "@smithy/middleware-retry@^2.0.1": version "2.0.1" resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-2.0.1.tgz#d6c0aa9d117140a429951c8a1a92e05d9d0c218c" @@ -10563,6 +11236,14 @@ "@smithy/types" "^2.0.2" tslib "^2.5.0" +"@smithy/middleware-serde@^3.0.10": + version "3.0.10" + resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-3.0.10.tgz#5f6c0b57b10089a21d355bd95e9b7d40378454d7" + integrity sha512-MnAuhh+dD14F428ubSJuRnmRsfOpxSzvRhaGVTvd/lrUDE3kxzCCmH8lnVTvoNQnV2BbJ4c15QwZ3UdQBtFNZA== + dependencies: + "@smithy/types" "^3.7.1" + tslib "^2.6.2" + "@smithy/middleware-serde@^3.0.3": version "3.0.3" resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz#74d974460f74d99f38c861e6862984543a880a66" @@ -10586,6 +11267,14 @@ dependencies: tslib "^2.5.0" +"@smithy/middleware-stack@^3.0.10": + version "3.0.10" + resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-3.0.10.tgz#73e2fde5d151440844161773a17ee13375502baf" + integrity sha512-grCHyoiARDBBGPyw2BeicpjgpsDFWZZxptbVKb3CRd/ZA15F/T6rZjCCuBUjJwdck1nwUuIxYtsS4H9DDpbP5w== + dependencies: + "@smithy/types" "^3.7.1" + tslib "^2.6.2" + "@smithy/middleware-stack@^3.0.3": version "3.0.3" resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz#91845c7e61e6f137fa912b623b6def719a4f6ce7" @@ -10612,6 +11301,16 @@ "@smithy/types" "^2.0.2" tslib "^2.5.0" +"@smithy/node-config-provider@^3.1.11": + version "3.1.11" + resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-3.1.11.tgz#95feba85a5cb3de3fe9adfff1060b35fd556d023" + integrity sha512-URq3gT3RpDikh/8MBJUB+QGZzfS7Bm6TQTqoh4CqE8NBuyPkWa5eUXj0XFcFfeZVgg3WMh1u19iaXn8FvvXxZw== + dependencies: + "@smithy/property-provider" "^3.1.10" + "@smithy/shared-ini-file-loader" "^3.1.11" + "@smithy/types" "^3.7.1" + tslib "^2.6.2" + "@smithy/node-config-provider@^3.1.4": version "3.1.4" resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz#05647bed666aa8036a1ad72323c1942e5d421be1" @@ -10676,6 +11375,17 @@ "@smithy/types" "^3.4.2" tslib "^2.6.2" +"@smithy/node-http-handler@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-3.3.1.tgz#788fc1c22c21a0cf982f4025ccf9f64217f3164f" + integrity sha512-fr+UAOMGWh6bn4YSEezBCpJn9Ukp9oR4D32sCjCo7U81evE11YePOQ58ogzyfgmjIO79YeOdfXXqr0jyhPQeMg== + dependencies: + "@smithy/abort-controller" "^3.1.8" + "@smithy/protocol-http" "^4.1.7" + "@smithy/querystring-builder" "^3.0.10" + "@smithy/types" "^3.7.1" + tslib "^2.6.2" + "@smithy/property-provider@^2.0.0", "@smithy/property-provider@^2.0.1": version "2.0.1" resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-2.0.1.tgz#4c359f5063a9c664599f88be00e3f9b3e1021d4d" @@ -10684,6 +11394,14 @@ "@smithy/types" "^2.0.2" tslib "^2.5.0" +"@smithy/property-provider@^3.1.10", "@smithy/property-provider@^3.1.9": + version "3.1.10" + resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-3.1.10.tgz#ae00447c1060c194c3e1b9475f7c8548a70f8486" + integrity sha512-n1MJZGTorTH2DvyTVj+3wXnd4CzjJxyXeOgnTlgNVFxaaMeT4OteEp4QrzF8p9ee2yg42nvyVK6R/awLCakjeQ== + dependencies: + "@smithy/types" "^3.7.1" + tslib "^2.6.2" + "@smithy/property-provider@^3.1.3": version "3.1.3" resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-3.1.3.tgz#afd57ea82a3f6c79fbda95e3cb85c0ee0a79f39a" @@ -10732,6 +11450,14 @@ "@smithy/types" "^3.4.2" tslib "^2.6.2" +"@smithy/protocol-http@^4.1.7": + version "4.1.7" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-4.1.7.tgz#5c67e62beb5deacdb94f2127f9a344bdf1b2ed6e" + integrity sha512-FP2LepWD0eJeOTm0SjssPcgqAlDFzOmRXqXmGhfIM52G7Lrox/pcpQf6RP4F21k0+O12zaqQt5fCDOeBtqY6Cg== + dependencies: + "@smithy/types" "^3.7.1" + tslib "^2.6.2" + "@smithy/querystring-builder@^2.0.1": version "2.0.1" resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-2.0.1.tgz#c8326d27e3796cac8b46f580bb067e83f50b4375" @@ -10750,6 +11476,15 @@ "@smithy/util-uri-escape" "^2.2.0" tslib "^2.6.2" +"@smithy/querystring-builder@^3.0.10": + version "3.0.10" + resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-3.0.10.tgz#db8773af85ee3977c82b8e35a5cdd178c621306d" + integrity sha512-nT9CQF3EIJtIUepXQuBFb8dxJi3WVZS3XfuDksxSCSn+/CzZowRLdhDn+2acbBv8R6eaJqPupoI/aRFIImNVPQ== + dependencies: + "@smithy/types" "^3.7.1" + "@smithy/util-uri-escape" "^3.0.0" + tslib "^2.6.2" + "@smithy/querystring-builder@^3.0.3": version "3.0.3" resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz#6b0e566f885bb84938d077c69e8f8555f686af13" @@ -10776,6 +11511,14 @@ "@smithy/types" "^2.0.2" tslib "^2.5.0" +"@smithy/querystring-parser@^3.0.10": + version "3.0.10" + resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-3.0.10.tgz#62db744a1ed2cf90f4c08d2c73d365e033b4a11c" + integrity sha512-Oa0XDcpo9SmjhiDD9ua2UyM3uU01ZTuIrNdZvzwUTykW1PM8o2yJvMh1Do1rY5sUQg4NDV70dMi0JhDx4GyxuQ== + dependencies: + "@smithy/types" "^3.7.1" + tslib "^2.6.2" + "@smithy/querystring-parser@^3.0.3": version "3.0.3" resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz#272a6b83f88dfcbbec8283d72a6bde850cc00091" @@ -10812,6 +11555,14 @@ "@smithy/types" "^2.0.2" tslib "^2.5.0" +"@smithy/shared-ini-file-loader@^3.1.11": + version "3.1.11" + resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.11.tgz#0b4f98c4a66480956fbbefc4627c5dc09d891aea" + integrity sha512-AUdrIZHFtUgmfSN4Gq9nHu3IkHMa1YDcN+s061Nfm+6pQ0mJy85YQDB0tZBCmls0Vuj22pLwDPmL92+Hvfwwlg== + dependencies: + "@smithy/types" "^3.7.1" + tslib "^2.6.2" + "@smithy/shared-ini-file-loader@^3.1.4": version "3.1.4" resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz#7dceaf5a5307a2ee347ace8aba17312a1a3ede15" @@ -10870,6 +11621,20 @@ "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" +"@smithy/signature-v4@^4.2.2": + version "4.2.3" + resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-4.2.3.tgz#abbca5e5fe9158422b3125b2956791a325a27f22" + integrity sha512-pPSQQ2v2vu9vc8iew7sszLd0O09I5TRc5zhY71KA+Ao0xYazIG+uLeHbTJfIWGO3BGVLiXjUr3EEeCcEQLjpWQ== + dependencies: + "@smithy/is-array-buffer" "^3.0.0" + "@smithy/protocol-http" "^4.1.7" + "@smithy/types" "^3.7.1" + "@smithy/util-hex-encoding" "^3.0.0" + "@smithy/util-middleware" "^3.0.10" + "@smithy/util-uri-escape" "^3.0.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + "@smithy/smithy-client@^2.0.1": version "2.0.1" resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-2.0.1.tgz#34572ada6eccb62e6f0b38b6a9dc261e2cdf4d24" @@ -10904,6 +11669,19 @@ "@smithy/util-stream" "^3.1.6" tslib "^2.6.2" +"@smithy/smithy-client@^3.4.4": + version "3.4.5" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-3.4.5.tgz#b90fe15d80e2dca5aa9cf3bd24bd73359ad1ef61" + integrity sha512-k0sybYT9zlP79sIKd1XGm4TmK0AS1nA2bzDHXx7m0nGi3RQ8dxxQUs4CPkSmQTKAo+KF9aINU3KzpGIpV7UoMw== + dependencies: + "@smithy/core" "^2.5.4" + "@smithy/middleware-endpoint" "^3.2.4" + "@smithy/middleware-stack" "^3.0.10" + "@smithy/protocol-http" "^4.1.7" + "@smithy/types" "^3.7.1" + "@smithy/util-stream" "^3.3.1" + tslib "^2.6.2" + "@smithy/types@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@smithy/types/-/types-1.2.0.tgz#9dc65767b0ee3d6681704fcc67665d6fc9b6a34e" @@ -10939,6 +11717,13 @@ dependencies: tslib "^2.6.2" +"@smithy/types@^3.7.1": + version "3.7.1" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-3.7.1.tgz#4af54c4e28351e9101996785a33f2fdbf93debe7" + integrity sha512-XKLcLXZY7sUQgvvWyeaL/qwNPp6V3dWcUjqrQKjSb+tzYiCy340R/c64LV5j+Tnb2GhmunEX0eou+L+m2hJNYA== + dependencies: + tslib "^2.6.2" + "@smithy/url-parser@^2.0.1": version "2.0.1" resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-2.0.1.tgz#c0712fd7bde198644ffd57b202aa5d54bd437520" @@ -10948,6 +11733,15 @@ "@smithy/types" "^2.0.2" tslib "^2.5.0" +"@smithy/url-parser@^3.0.10": + version "3.0.10" + resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-3.0.10.tgz#f389985a79766cff4a99af14979f01a17ce318da" + integrity sha512-j90NUalTSBR2NaZTuruEgavSdh8MLirf58LoGSk4AtQfyIymogIhgnGUU2Mga2bkMkpSoC9gxb74xBXL5afKAQ== + dependencies: + "@smithy/querystring-parser" "^3.0.10" + "@smithy/types" "^3.7.1" + tslib "^2.6.2" + "@smithy/url-parser@^3.0.3": version "3.0.3" resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-3.0.3.tgz#e8a060d9810b24b1870385fc2b02485b8a6c5955" @@ -11139,6 +11933,14 @@ dependencies: tslib "^2.5.0" +"@smithy/util-middleware@^3.0.10": + version "3.0.10" + resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-3.0.10.tgz#ab8be99f1aaafe5a5490c344f27a264b72b7592f" + integrity sha512-eJO+/+RsrG2RpmY68jZdwQtnfsxjmPxzMlQpnHKjFPwrYqvlcT+fHdT+ZVwcjlWSrByOhGr9Ff2GG17efc192A== + dependencies: + "@smithy/types" "^3.7.1" + tslib "^2.6.2" + "@smithy/util-middleware@^3.0.3": version "3.0.3" resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-3.0.3.tgz#07bf9602682f5a6c55bc2f0384303f85fc68c87e" @@ -11214,6 +12016,20 @@ "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" +"@smithy/util-stream@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-3.3.1.tgz#a2636f435637ef90d64df2bb8e71cd63236be112" + integrity sha512-Ff68R5lJh2zj+AUTvbAU/4yx+6QPRzg7+pI7M1FbtQHcRIp7xvguxVsQBKyB3fwiOwhAKu0lnNyYBaQfSW6TNw== + dependencies: + "@smithy/fetch-http-handler" "^4.1.1" + "@smithy/node-http-handler" "^3.3.1" + "@smithy/types" "^3.7.1" + "@smithy/util-base64" "^3.0.0" + "@smithy/util-buffer-from" "^3.0.0" + "@smithy/util-hex-encoding" "^3.0.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + "@smithy/util-uri-escape@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-1.1.0.tgz#a8c5edaf19c0efdb9b51661e840549cf600a1808" @@ -12183,6 +12999,20 @@ resolved "https://registry.yarnpkg.com/@tanstack/virtual-core/-/virtual-core-3.10.8.tgz#975446a667755222f62884c19e5c3c66d959b8b4" integrity sha512-PBu00mtt95jbKFi6Llk9aik8bnR3tR/oQP1o3TSi+iG//+Q2RTIzCEgKkHG8BB86kxMNW6O8wku+Lmi+QFR6jA== +"@testing-library/dom@^10.0.0": + version "10.4.0" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-10.4.0.tgz#82a9d9462f11d240ecadbf406607c6ceeeff43a8" + integrity sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/runtime" "^7.12.5" + "@types/aria-query" "^5.0.1" + aria-query "5.3.0" + chalk "^4.1.0" + dom-accessibility-api "^0.5.9" + lz-string "^1.5.0" + pretty-format "^27.0.2" + "@testing-library/dom@^9.0.0": version "9.3.4" resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-9.3.4.tgz#50696ec28376926fec0a1bf87d9dbac5e27f60ce" @@ -12197,6 +13027,19 @@ lz-string "^1.5.0" pretty-format "^27.0.2" +"@testing-library/jest-dom@*": + version "6.6.3" + resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-6.6.3.tgz#26ba906cf928c0f8172e182c6fe214eb4f9f2bd2" + integrity sha512-IteBhl4XqYNkM54f4ejhLRJiZNqcSCoXUOG2CPK7qbD322KjQozM4kHQOfkG2oln9b9HTYqs+Sae8vBATubxxA== + dependencies: + "@adobe/css-tools" "^4.4.0" + aria-query "^5.0.0" + chalk "^3.0.0" + css.escape "^1.5.1" + dom-accessibility-api "^0.6.3" + lodash "^4.17.21" + redent "^3.0.0" + "@testing-library/jest-dom@^6.0.0": version "6.5.0" resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-6.5.0.tgz#50484da3f80fb222a853479f618a9ce5c47bfe54" @@ -12219,6 +13062,13 @@ "@testing-library/dom" "^9.0.0" "@types/react-dom" "^18.0.0" +"@testing-library/react@^16.0.0": + version "16.0.1" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-16.0.1.tgz#29c0ee878d672703f5e7579f239005e4e0faa875" + integrity sha512-dSmwJVtJXmku+iocRhWOUFbrERC76TX2Mnf0ATODz8brzAZrMBbzLwQixlBSanZxR6LddK3eiwpSFZgDET1URg== + dependencies: + "@babel/runtime" "^7.12.5" + "@testing-library/user-event@^14.0.0": version "14.4.3" resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.4.3.tgz#af975e367743fa91989cd666666aec31a8f50591" @@ -12653,6 +13503,14 @@ dependencies: "@types/istanbul-lib-report" "*" +"@types/jenkins@^1.0.0": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@types/jenkins/-/jenkins-1.0.2.tgz#ad5b1787fa307f9e5a804ffb23fadf0732754cbf" + integrity sha512-kEJ5a57CVkPffCHr42THTnHNzmu3um1q0idJ7P2mX9jWWJywieD8CvuFpG9gRySR4UOMSmQiS96mQtfSXNV5tA== + dependencies: + "@types/node" "*" + form-data "^4.0.0" + "@types/jest@^26.0.7": version "26.0.24" resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.24.tgz#943d11976b16739185913a1936e0de0c4a7d595a" @@ -12737,6 +13595,16 @@ dependencies: keyv "*" +"@types/lodash@4.17.12": + version "4.17.12" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.12.tgz#25d71312bf66512105d71e55d42e22c36bcfc689" + integrity sha512-sviUmCE8AYdaF/KIHLDJBQgeYzPBI0vf/17NaYehBJfYD1j6/L95Slh07NlyK2iNyBNaEkb3En2jRt+a8y3xZQ== + +"@types/lodash@^4.14.151": + version "4.17.13" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.13.tgz#786e2d67cfd95e32862143abe7463a7f90c300eb" + integrity sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg== + "@types/long@^4.0.0": version "4.0.2" resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a" @@ -12821,6 +13689,14 @@ "@types/node" "*" form-data "^3.0.0" +"@types/node-fetch@^2.5.12": + version "2.6.12" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.12.tgz#8ab5c3ef8330f13100a7479e2cd56d3386830a03" + integrity sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA== + dependencies: + "@types/node" "*" + form-data "^4.0.0" + "@types/node-forge@^1.3.0": version "1.3.11" resolved "https://registry.yarnpkg.com/@types/node-forge/-/node-forge-1.3.11.tgz#0972ea538ddb0f4d9c2fa0ec5db5724773a604da" @@ -12978,10 +13854,10 @@ resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== -"@types/react-dom@*", "@types/react-dom@^18", "@types/react-dom@^18.0.0", "@types/react-dom@^18.2.18": - version "18.3.0" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.3.0.tgz#0cbc818755d87066ab6ca74fbedb2547d74a82b0" - integrity sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg== +"@types/react-dom@*", "@types/react-dom@^18", "@types/react-dom@^18.0.0", "@types/react-dom@^18.2.18", "@types/react-dom@^18.2.19": + version "18.3.1" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.3.1.tgz#1e4654c08a9cdcfb6594c780ac59b55aad42fe07" + integrity sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ== dependencies: "@types/react" "*" @@ -13031,9 +13907,9 @@ "@types/react" "*" "@types/react@*", "@types/react@^16.13.1 || ^17.0.0", "@types/react@^16.13.1 || ^17.0.0 || ^18.0.0", "@types/react@^18": - version "18.3.9" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.9.tgz#2cdf5f425ec8a133d67e9e3673909738b783db20" - integrity sha512-+BpAVyTpJkNWWSSnaLBk6ePpHLOGJKnEQNbINNovPWzvEUyAe3e+/d494QdEh71RekM/qV7lw6jzf1HGrJyAtQ== + version "18.3.12" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.12.tgz#99419f182ccd69151813b7ee24b792fe08774f60" + integrity sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw== dependencies: "@types/prop-types" "*" csstype "^3.0.2" @@ -13204,6 +14080,13 @@ dependencies: "@types/estree" "*" +"@types/testing-library__jest-dom@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-6.0.0.tgz#b558b64b80a72130714be1f505c6df482d453690" + integrity sha512-bnreXCgus6IIadyHNlN/oI5FfX4dWgvGhOPvpr7zzCYDGAPIfvyIoAozMBINmhmsVuqV0cncejF2y5KC7ScqOg== + dependencies: + "@testing-library/jest-dom" "*" + "@types/through@*": version "0.0.30" resolved "https://registry.yarnpkg.com/@types/through/-/through-0.0.30.tgz#e0e42ce77e897bd6aead6f6ea62aeb135b8a3895" @@ -14029,6 +14912,7 @@ apg-lite@^1.0.3: dependencies: "@backstage-community/plugin-github-actions" "^0.6.16" "@backstage-community/plugin-github-pull-requests-board" "^0.2.1" + "@backstage-community/plugin-jenkins" "^0.12.1" "@backstage-community/plugin-sonarqube" "^0.8.0" "@backstage-community/plugin-tech-radar" "^0.7.4" "@backstage/app-defaults" "^1.5.11" @@ -14055,6 +14939,7 @@ apg-lite@^1.0.3: "@backstage/plugin-techdocs-react" "^1.2.8" "@backstage/plugin-user-settings" "^0.8.12" "@backstage/theme" "^0.5.7" + "@internal/backstage-plugin-jenkins-with-reporting" "^0.1.0" "@material-ui/core" "^4.12.2" "@material-ui/icons" "^4.9.1" "@roadiehq/backstage-plugin-github-pull-requests" "^2.5.14" @@ -14195,6 +15080,13 @@ aria-query@5.1.3, aria-query@^5.0.0, aria-query@^5.1.3: dependencies: deep-equal "^2.0.5" +aria-query@5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" + integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== + dependencies: + dequal "^2.0.3" + arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" @@ -15466,6 +16358,15 @@ caniuse-lite@^1.0.30001646: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001660.tgz#31218de3463fabb44d0b7607b652e56edf2e2355" integrity sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg== +canvas@^2.11.2: + version "2.11.2" + resolved "https://registry.yarnpkg.com/canvas/-/canvas-2.11.2.tgz#553d87b1e0228c7ac0fc72887c3adbac4abbd860" + integrity sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw== + dependencies: + "@mapbox/node-pre-gyp" "^1.0.0" + nan "^2.17.0" + simple-get "^3.0.3" + capital-case@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/capital-case/-/capital-case-1.0.4.tgz#9d130292353c9249f6b00fa5852bee38a717e669" @@ -17345,6 +18246,13 @@ decompress-response@^3.3.0: dependencies: mimic-response "^1.0.0" +decompress-response@^4.2.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986" + integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw== + dependencies: + mimic-response "^2.0.0" + decompress-response@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" @@ -17534,7 +18442,7 @@ deprecation@^2.0.0, deprecation@^2.3.1: resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== -dequal@^2.0.0: +dequal@^2.0.0, dequal@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== @@ -20033,6 +20941,13 @@ git-url-parse@^14.0.0: dependencies: git-up "^7.0.0" +git-url-parse@^15.0.0: + version "15.0.0" + resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-15.0.0.tgz#207b74d8eb888955b1aaf5dfc5f5778084fa9fa9" + integrity sha512-5reeBufLi+i4QD3ZFftcJs9jC26aULFLBU23FeKM/b1rI0K6ofIeAblmDVO7Ht22zTDE9+CkJ3ZVb0CgJmz3UQ== + dependencies: + git-up "^7.0.0" + gitconfiglocal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" @@ -22230,6 +23145,13 @@ jake@^10.8.5: filelist "^1.0.4" minimatch "^3.1.2" +jenkins@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/jenkins/-/jenkins-1.1.0.tgz#be61a07223d076956f357cc324fd18c5b281fcb7" + integrity sha512-oLiVMCt5pKp3N3br7P4Fknm5Qyu0katGc4WAhokFtPSE/waePCphK/XST9Fs/srrRY4VtN5wvI79r81fIjZkpg== + dependencies: + papi "^1.1.0" + jest-changed-files@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" @@ -24278,7 +25200,7 @@ make-dir@^2.1.0: pify "^4.0.1" semver "^5.6.0" -make-dir@^3.0.0: +make-dir@^3.0.0, make-dir@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== @@ -25140,6 +26062,11 @@ mimic-response@^1.0.0, mimic-response@^1.0.1: resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== +mimic-response@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43" + integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== + mimic-response@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" @@ -27058,6 +27985,11 @@ pako@^1.0.10, pako@~1.0.2, pako@~1.0.5: resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== +papi@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/papi/-/papi-1.1.2.tgz#5b1d7686834bec489f1f823103c5e8554f2b984f" + integrity sha512-cwM6pPpfAYgPe3EQi23SmB5J5s4XFS9lou9z63I5BbnMGmFaR8LAKvKboW7n1IUAKj76OtnyK0YU16JjnZrqVg== + param-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" @@ -28980,7 +29912,7 @@ react-window@^1.8.6: "@babel/runtime" "^7.0.0" memoize-one ">=3.1.1 <6" -react@^18, react@^18.0.2: +"react@^16.13.1 || ^17.0.0 || ^18.0.0", react@^18, react@^18.0.2: version "18.3.1" resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891" integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ== @@ -30404,6 +31336,15 @@ simple-eval@1.0.0: dependencies: jsep "^1.1.2" +simple-get@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.1.tgz#cc7ba77cfbe761036fbfce3d021af25fc5584d55" + integrity sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA== + dependencies: + decompress-response "^4.2.0" + once "^1.3.1" + simple-concat "^1.0.0" + simple-get@^4.0.0, simple-get@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" @@ -33079,6 +34020,11 @@ utils-merge@1.0.1, utils-merge@1.x.x, utils-merge@^1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== +uuid@^11.0.0: + version "11.0.3" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-11.0.3.tgz#248451cac9d1a4a4128033e765d137e2b2c49a3d" + integrity sha512-d0z310fCWv5dJwnX1Y/MncBAqGMKEzlBb1AOf7z9K8ALnd0utBX/msg/fA0+sbyN1ihbMsLhrBlnl1ak7Wa0rg== + uuid@^3.3.2, uuid@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" @@ -34202,6 +35148,11 @@ zod-to-json-schema@^3.21.4: resolved "https://registry.yarnpkg.com/zod-to-json-schema/-/zod-to-json-schema-3.23.2.tgz#bc7e379c8050462538383e382964c03d8fe008f9" integrity sha512-uSt90Gzc/tUfyNqxnjlfBs8W6WSGpNBv0rVsNxP/BVSMHMKGdthPYff4xtCHYloJGM0CFxFsb3NbC0eqPhfImw== +zod-validation-error@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/zod-validation-error/-/zod-validation-error-3.4.0.tgz#3a8a1f55c65579822d7faa190b51336c61bee2a6" + integrity sha512-ZOPR9SVY6Pb2qqO5XHt+MkkTRxGXb4EVtnjc9JpXUOtUB1T9Ru7mZOT361AN3MsetVe7R0a1KZshJDZdgp9miQ== + zod@^3.21.4, zod@~3.21.4: version "3.21.4" resolved "https://registry.yarnpkg.com/zod/-/zod-3.21.4.tgz#10882231d992519f0a10b5dd58a38c9dabbb64db" From b137ab6a36965267d5a96b96ac66e263e6d50063 Mon Sep 17 00:00:00 2001 From: sadarunnisa-sf Date: Mon, 16 Dec 2024 07:34:49 +0530 Subject: [PATCH 2/9] feat(plugins): jenkins plugin implemented ARC-101 --- .sonarcloud.properties | 2 +- .../src/service/JenkinsReportsApi.ts | 2 - .../src/service/JenkinsReportsService.ts | 2 +- .../src/service/jenkinsApi.ts | 30 ++++----- .../src/service/router.test.ts | 2 +- .../src/service/router.ts | 4 +- .../src/types.ts | 2 +- .../src/api/JenkinsApi.ts | 61 +++---------------- .../BuildWithStepsPage/BuildReports.tsx | 4 +- .../BuildWithStepsPage/BuildWithStepsPage.tsx | 5 +- .../lib/ActionOutput/ActionOutput.tsx | 2 +- .../BuildsPage/lib/CITable/columns.tsx | 2 + .../src/components/Router.tsx | 10 --- .../src/components/useAsyncPolling.ts | 2 +- .../src/components/useBuilds.ts | 3 +- .../src/components/useJobRuns.ts | 2 +- .../src/service/standaloneServer.ts | 2 +- 17 files changed, 38 insertions(+), 99 deletions(-) diff --git a/.sonarcloud.properties b/.sonarcloud.properties index b414938..44eb65c 100644 --- a/.sonarcloud.properties +++ b/.sonarcloud.properties @@ -1,3 +1,3 @@ # Path to sources -sonar.exclusions=**/Dockerfile,**/**/components/AutoLogout/**,**/packages/app/src/*.test.tsx,**/packages/backend/src/plugins/sourceloop-ms.ts,**/packages/backend/src/utility.ts,**/packages/app/src/assets/icons/CustomIcons.tsx,**/packages/app/src/components/Root/LogoFull.tsx,**/packages/app/src/components/catalog/EntityPage.tsx, packages/app/src/components/search/SearchPage.tsx,**/packages/backend/src/plugins/catalog.ts +sonar.exclusions=**/Dockerfile,**/**/components/AutoLogout/**,**/packages/app/src/*.test.tsx,**/packages/backend/src/plugins/sourceloop-ms.ts,**/packages/backend/src/utility.ts,**/packages/app/src/assets/icons/CustomIcons.tsx,**/packages/app/src/components/Root/LogoFull.tsx,**/packages/app/src/components/catalog/EntityPage.tsx, packages/app/src/components/search/SearchPage.tsx,**/packages/backend/src/plugins/catalog.ts,**/plugins/jenkins-with-reporting/src/components/BuildsPage/**,**/plugins/jenkins-with-reporting/src/components/Cards/**,**/plugins/jenkins-with-reporting/src/components/JobRunsTable/**, diff --git a/plugins/jenkins-with-reporting-backend-backend/src/service/JenkinsReportsApi.ts b/plugins/jenkins-with-reporting-backend-backend/src/service/JenkinsReportsApi.ts index f17ca1e..ea87d63 100644 --- a/plugins/jenkins-with-reporting-backend-backend/src/service/JenkinsReportsApi.ts +++ b/plugins/jenkins-with-reporting-backend-backend/src/service/JenkinsReportsApi.ts @@ -1,4 +1,3 @@ -import { JenkinsInfo } from '@backstage-community/plugin-jenkins-backend'; import { JenkinsApiImpl } from './jenkinsApi'; import { STSClient, AssumeRoleCommand } from '@aws-sdk/client-sts'; import { @@ -76,7 +75,6 @@ export class JenkinsReportsApi { // Step 4: Filter and process files to fetch specific index.html files const indexFiles = allObjects.filter( key => - key.endsWith('/Overall/coverage/index.html') || // Matches coverage index.html (key.includes('/Overall/coverage/') && key.endsWith('/Overall/coverage/index.html')) || (key.includes('/load-tests-reports/') && diff --git a/plugins/jenkins-with-reporting-backend-backend/src/service/JenkinsReportsService.ts b/plugins/jenkins-with-reporting-backend-backend/src/service/JenkinsReportsService.ts index 5cf9f1e..121ded0 100644 --- a/plugins/jenkins-with-reporting-backend-backend/src/service/JenkinsReportsService.ts +++ b/plugins/jenkins-with-reporting-backend-backend/src/service/JenkinsReportsService.ts @@ -1,4 +1,4 @@ -import { S3Client, GetObjectCommand } from '@aws-sdk/client-s3'; +import { S3Client } from '@aws-sdk/client-s3'; export class JenkinsReportsService { private readonly s3Client: S3Client; diff --git a/plugins/jenkins-with-reporting-backend-backend/src/service/jenkinsApi.ts b/plugins/jenkins-with-reporting-backend-backend/src/service/jenkinsApi.ts index 26ba188..c53b369 100644 --- a/plugins/jenkins-with-reporting-backend-backend/src/service/jenkinsApi.ts +++ b/plugins/jenkins-with-reporting-backend-backend/src/service/jenkinsApi.ts @@ -88,7 +88,7 @@ export class JenkinsApiImpl { if (branches) { // Assume jenkinsInfo.jobFullName is a MultiBranch Pipeline project which contains one job per branch. - // TODO: extract a strategy interface for this + // TODO: extract a strategy interface for this //NOSONAR const job = await Promise.any( branches.map(branch => client.job.get({ @@ -106,7 +106,7 @@ export class JenkinsApiImpl { // Add count limit to projects // If limit is set in the config, use it, otherwise use the default limit of 50 - const limitedJobsTreeSpec: string = `${JenkinsApiImpl.jobsTreeSpec}{0,${jenkinsInfo.projectCountLimit}}`; + const limitedJobsTreeSpec: string = `${JenkinsApiImpl.jobsTreeSpec}{0,${jenkinsInfo.projectCountLimit}}`; //NOSONAR const project = await client.job.get({ name: jenkinsInfo.jobFullName, @@ -175,7 +175,7 @@ export class JenkinsApiImpl { // permission api returns always at least one item, we need to check only one result since we do not expect any additional results const { result } = response[0]; if (result === AuthorizeResult.DENY) { - return 401; + return 401; //NOSONAR } } @@ -194,7 +194,7 @@ export class JenkinsApiImpl { private static async getClient(jenkinsInfo: JenkinsInfo) { // The typings for the jenkins library are out of date so just cast to any - return new (Jenkins as any)({ + return new (Jenkins as any)({ //NOSONAR baseUrl: jenkinsInfo.baseUrl, headers: jenkinsInfo.headers, promisify: true, @@ -236,11 +236,11 @@ export class JenkinsApiImpl { const source = build.actions .filter( - (action: any) => + (action: any) => //NOSONAR action?._class === 'hudson.plugins.git.util.BuildData', ) - .map((action: any) => { - const [first]: any = Object.values(action.buildsByBranchName); + .map((action: any) => { //NOSONAR + const [first]: any = Object.values(action.buildsByBranchName); //NOSONAR const branch = first.revision.branch[0]; return { branchName: branch.name, @@ -278,10 +278,10 @@ export class JenkinsApiImpl { ): ScmDetails | undefined { const scmInfo: ScmDetails | undefined = project.actions .filter( - (action: any) => + (action: any) => //NOSONAR action?._class === 'jenkins.scm.api.metadata.ObjectMetadataAction', ) - .map((action: any) => { + .map((action: any) => { //NOSONAR return { url: action?.objectUrl, // https://javadoc.jenkins.io/plugin/scm-api/jenkins/scm/api/metadata/ObjectMetadataAction.html @@ -297,13 +297,13 @@ export class JenkinsApiImpl { const author = project.actions .filter( - (action: any) => + (action: any) => //NOSONAR action?._class === 'jenkins.scm.api.metadata.ContributorMetadataAction', ) - .map((action: any) => { - return action.contributorDisplayName; - }) + .map((action: any) => { //NOSONAR + return action.contributorDisplayName; //NOSONAR + }) //NOSONAR .pop(); if (author) { @@ -322,10 +322,10 @@ export class JenkinsApiImpl { } { return build.actions .filter( - (action: any) => + (action: any) => //NOSONAR action?._class === 'hudson.tasks.junit.TestResultAction', ) - .map((action: any) => { + .map((action: any) => { //NOSONAR return { total: action.totalCount, passed: action.totalCount - action.failCount - action.skipCount, diff --git a/plugins/jenkins-with-reporting-backend-backend/src/service/router.test.ts b/plugins/jenkins-with-reporting-backend-backend/src/service/router.test.ts index ed19d50..97bbc2a 100644 --- a/plugins/jenkins-with-reporting-backend-backend/src/service/router.test.ts +++ b/plugins/jenkins-with-reporting-backend-backend/src/service/router.test.ts @@ -23,7 +23,7 @@ describe('createRouter', () => { it('returns ok', async () => { const response = await request(app).get('/health'); - expect(response.status).toEqual(200); + expect(response.status).toEqual(200); //NOSONAR expect(response.body).toEqual({ status: 'ok' }); }); }); diff --git a/plugins/jenkins-with-reporting-backend-backend/src/service/router.ts b/plugins/jenkins-with-reporting-backend-backend/src/service/router.ts index 4879009..f174790 100644 --- a/plugins/jenkins-with-reporting-backend-backend/src/service/router.ts +++ b/plugins/jenkins-with-reporting-backend-backend/src/service/router.ts @@ -55,7 +55,7 @@ export async function createRouter( async (req, res) => { const { name, jobFullName, buildNumber } = req.params; try { - const creds = (await httpAuth.credentials(req)) as any; + const creds = (await httpAuth.credentials(req)) as any; //NOSONAR const entity = await catalogClient.getEntityByRef( `${req.params.kind}:${req.params.namespace}/${req.params.name}`, @@ -89,7 +89,7 @@ export async function createRouter( res.json(reports); } catch (error) { - res.status(500).json({ error: error.message }); + res.status(500).json({ error: error.message }); //NOSONAR } }, ); diff --git a/plugins/jenkins-with-reporting-backend-backend/src/types.ts b/plugins/jenkins-with-reporting-backend-backend/src/types.ts index 4a975ef..89f93d8 100644 --- a/plugins/jenkins-with-reporting-backend-backend/src/types.ts +++ b/plugins/jenkins-with-reporting-backend-backend/src/types.ts @@ -34,7 +34,7 @@ interface CommonBuild { export interface JenkinsBuild extends CommonBuild { // read by us from jenkins but not passed to frontend - actions: any; + actions: any; //NOSONAR } /** diff --git a/plugins/jenkins-with-reporting/src/api/JenkinsApi.ts b/plugins/jenkins-with-reporting/src/api/JenkinsApi.ts index 53757c1..655b4f6 100644 --- a/plugins/jenkins-with-reporting/src/api/JenkinsApi.ts +++ b/plugins/jenkins-with-reporting/src/api/JenkinsApi.ts @@ -92,7 +92,7 @@ export interface Project { inQueue: string; // added by us status: string; // == inQueue ? 'queued' : lastBuild.building ? 'running' : lastBuild.result, - onRestartClick: () => Promise; // TODO rename to handle.* ? also, should this be on lastBuild? + onRestartClick: () => Promise; } export interface BuildReport { @@ -100,14 +100,6 @@ export interface BuildReport { url: string; } -// export interface JenkinsApi { -// // ... existing methods -// getBuildReports( -// jobFullName: string, -// buildNumber: string -// ): Promise>; -// } - export interface JenkinsApi { /** * Get the projects (jobs which have builds, not folders) including info about their lastBuild. @@ -129,7 +121,6 @@ export interface JenkinsApi { * * This takes an entity to support selecting between multiple jenkins instances. * - * TODO: abstract jobFullName (so we could support differentiating between the same named job on multiple instances). */ getBuild(options: { entity: CompoundEntityRef; @@ -176,7 +167,7 @@ export class JenkinsClient implements JenkinsApi { entity.kind, )}/${encodeURIComponent(entity.name)}/projects`, ); - console.log('getproject url================', url); + if (filter.branch) { url.searchParams.append('branch', filter.branch); } @@ -197,26 +188,6 @@ export class JenkinsClient implements JenkinsApi { ); } - // async getBuild(options: { - // entity: CompoundEntityRef; - // jobFullName: string; - // buildNumber: string; - // }): Promise { - // const { entity, jobFullName, buildNumber } = options; - // const url = `${await this.discoveryApi.getBaseUrl( - // 'jenkins', - // )}/v1/entity/${encodeURIComponent(entity.namespace)}/${encodeURIComponent( - // entity.kind, - // )}/${encodeURIComponent(entity.name)}/${encodeURIComponent( - // jobFullName, - // )}/${encodeURIComponent(buildNumber)}`; - - // const response = await this.fetchApi.fetch(url); - - // return (await response.json()) - - // } - async getBuild(options: { entity: CompoundEntityRef; jobFullName: string; @@ -241,7 +212,7 @@ export class JenkinsClient implements JenkinsApi { jobFullName: string; buildNumber: string; }): Promise { - console.log('getBuildReports*******************', options); + const { entity, jobFullName, buildNumber } = options; const url = `${await this.discoveryApi.getBaseUrl( 'jenkins-with-reporting-backend', @@ -282,13 +253,7 @@ export class JenkinsClient implements JenkinsApi { 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 url = `${await this.discoveryApi.getBaseUrl( 'jenkins-with-reporting-backend', @@ -298,23 +263,11 @@ export class JenkinsClient implements JenkinsApi { jobFullName, )}`; - // const response = await this.fetchApi.fetch(url); - console.log('*****************job urls*************************', url); + const response = await this.fetchApi.fetch(url); - console.log('************************jobBuildse response-----', response); + return (await response.json()).build; - // return ( - // (await response.json()).build?.builds?.map((p: Build) => ({ - // ...p, - // onRestartClick: () => { - // return this.retry({ - // entity, - // jobFullName: p.fullDisplayName, - // buildNumber: String(p.number), - // }); - // }, - // })) || [] - // ); + } } diff --git a/plugins/jenkins-with-reporting/src/components/BuildWithStepsPage/BuildReports.tsx b/plugins/jenkins-with-reporting/src/components/BuildWithStepsPage/BuildReports.tsx index 92aae7a..52b3a68 100644 --- a/plugins/jenkins-with-reporting/src/components/BuildWithStepsPage/BuildReports.tsx +++ b/plugins/jenkins-with-reporting/src/components/BuildWithStepsPage/BuildReports.tsx @@ -36,8 +36,8 @@ const BuildReports: React.FC = ({ reports = [] }) => { return (

G%Gf7bS0P$yaBcGYKD$3fm^*iFx?)WFG@#@{`o4 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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 diff --git a/plugins/jenkins-with-reporting/src/assets/last-master-build.png b/plugins/jenkins-with-reporting/src/assets/last-master-build.png new file mode 100644 index 0000000000000000000000000000000000000000..4174f089979d9af7e734b4ca9b40d5bd2cb3a834 GIT binary patch literal 18933 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 ({ + reportsList: { + listStyle: 'none', + padding: 0, + margin: 0, + }, + reportItem: { + marginBottom: theme.spacing(1), + }, + externalLinkIcon: { + fontSize: 'inherit', + verticalAlign: 'bottom', + marginLeft: theme.spacing(0.5), + }, +})); + +interface BuildReport { + fileName: string; + url: string; +} + +interface BuildReportsProps { + reports: BuildReport[]; +} + +const BuildReports: React.FC = ({ reports = [] }) => { + const classes = useStyles(); + + if (!Array.isArray(reports)) { + return null; + } + + return ( +