From ef2f151045538bad555e70a263940b3259212c50 Mon Sep 17 00:00:00 2001 From: Kashish Mittal <113269381+04kash@users.noreply.github.com> Date: Thu, 14 Nov 2024 11:44:17 -0500 Subject: [PATCH] chore: deprecate quay (#2524) * chore: deprecate quay Signed-off-by: Kashish Mittal * regen yarn Signed-off-by: Kashish Mittal * remove quay references Signed-off-by: Kashish Mittal --------- Signed-off-by: Kashish Mittal --- .github/renovate.json | 2 - catalog-info.yaml | 2 - plugins/quay-common/.eslintignore | 2 - plugins/quay-common/.eslintrc.js | 1 - plugins/quay-common/.lintstagedrc.json | 4 - plugins/quay-common/.prettierignore | 12 - plugins/quay-common/.prettierrc.js | 20 - plugins/quay-common/.versionhistory.md | 1 - plugins/quay-common/CHANGELOG.md | 26 - plugins/quay-common/README.md | 12 +- plugins/quay-common/catalog-info.yaml | 27 - plugins/quay-common/package.json | 64 -- plugins/quay-common/src/index.ts | 7 - plugins/quay-common/src/permissions.ts | 13 - plugins/quay-common/tsconfig.json | 9 - plugins/quay-common/turbo.json | 8 - plugins/quay/.eslintignore | 2 - plugins/quay/.eslintrc.js | 1 - plugins/quay/.lintstagedrc.json | 4 - plugins/quay/.prettierignore | 12 - plugins/quay/.prettierrc.js | 20 - plugins/quay/.versionhistory.md | 2 - plugins/quay/CHANGELOG.md | 662 -------------- plugins/quay/CONTRIBUTING.md | 13 - plugins/quay/README.md | 103 +-- plugins/quay/app-config.janus-idp.yaml | 12 - plugins/quay/catalog-info.yaml | 55 -- plugins/quay/config.d.ts | 15 - plugins/quay/dev/__data__/labels.ts | 39 - plugins/quay/dev/__data__/manifest_digest.ts | 806 ------------------ .../dev/__data__/security_vulnerabilities.ts | 375 -------- plugins/quay/dev/__data__/tags.ts | 56 -- plugins/quay/dev/index.tsx | 106 --- .../quay/images/quay-plugin-backstage1.png | Bin 147309 -> 0 bytes .../quay/images/quay-plugin-backstage2.png | Bin 90047 -> 0 bytes .../quay/images/quay-plugin-backstage3.png | Bin 96148 -> 0 bytes plugins/quay/package.json | 98 --- plugins/quay/playwright.config.ts | 34 - plugins/quay/src/api/fixtures/labels/foo.json | 18 - .../quay/src/api/fixtures/manifests/bar.json | 7 - .../quay/src/api/fixtures/manifests/foo.json | 7 - .../src/api/fixtures/securityDetail/foo.json | 51 -- .../quay/src/api/fixtures/tags/foo_limit.json | 15 - .../quay/src/api/fixtures/tags/foo_page1.json | 24 - .../quay/src/api/fixtures/tags/foo_page2.json | 5 - .../quay/src/api/fixtures/tags/not_found.json | 8 - plugins/quay/src/api/index.test.ts | 206 ----- plugins/quay/src/api/index.ts | 141 --- .../PermissionAlert/PermissionAlert.tsx | 14 - .../QuayRepository/QuayRepository.test.tsx | 174 ---- .../QuayRepository/QuayRepository.tsx | 60 -- .../src/components/QuayRepository/index.ts | 1 - .../QuayRepository/tableHeading.tsx | 95 --- .../QuayTagDetails/QuayTagDetails.test.tsx | 25 - .../components/QuayTagDetails/component.tsx | 161 ---- .../src/components/QuayTagDetails/index.ts | 1 - .../QuayTagPage/QuayTagPage.test.tsx | 108 --- .../src/components/QuayTagPage/component.tsx | 47 - .../quay/src/components/QuayTagPage/index.ts | 1 - .../src/components/QuayWidget/QuayWidget.tsx | 38 - .../quay/src/components/QuayWidget/index.ts | 1 - plugins/quay/src/components/Router.test.tsx | 37 - plugins/quay/src/components/Router.tsx | 25 - .../src/components/useQuayAppData.test.ts | 34 - plugins/quay/src/hooks/index.ts | 1 - plugins/quay/src/hooks/quay.tsx | 139 --- .../quay/src/hooks/useQuayViewPermission.ts | 11 - plugins/quay/src/hooks/useRepository.test.ts | 26 - plugins/quay/src/hooks/useTagDetails.test.ts | 21 - plugins/quay/src/hooks/useTags.test.ts | 61 -- plugins/quay/src/index.ts | 2 - plugins/quay/src/lib/utils.data.ts | 176 ---- plugins/quay/src/lib/utils.test.ts | 176 ---- plugins/quay/src/lib/utils.ts | 129 --- plugins/quay/src/plugin.test.ts | 7 - plugins/quay/src/plugin.ts | 44 - plugins/quay/src/routes.ts | 11 - plugins/quay/src/setupTests.ts | 2 - plugins/quay/src/types.ts | 159 ---- plugins/quay/tests/quay.spec.ts | 82 -- plugins/quay/tests/quayHelper.ts | 49 -- plugins/quay/tsconfig.json | 9 - plugins/quay/turbo.json | 8 - yarn.lock | 51 -- 84 files changed, 4 insertions(+), 5089 deletions(-) delete mode 100644 plugins/quay-common/.eslintignore delete mode 100644 plugins/quay-common/.eslintrc.js delete mode 100644 plugins/quay-common/.lintstagedrc.json delete mode 100644 plugins/quay-common/.prettierignore delete mode 100644 plugins/quay-common/.prettierrc.js delete mode 100644 plugins/quay-common/.versionhistory.md delete mode 100644 plugins/quay-common/CHANGELOG.md delete mode 100644 plugins/quay-common/catalog-info.yaml delete mode 100644 plugins/quay-common/package.json delete mode 100644 plugins/quay-common/src/index.ts delete mode 100644 plugins/quay-common/src/permissions.ts delete mode 100644 plugins/quay-common/tsconfig.json delete mode 100644 plugins/quay-common/turbo.json delete mode 100644 plugins/quay/.eslintignore delete mode 100644 plugins/quay/.eslintrc.js delete mode 100644 plugins/quay/.lintstagedrc.json delete mode 100644 plugins/quay/.prettierignore delete mode 100644 plugins/quay/.prettierrc.js delete mode 100644 plugins/quay/.versionhistory.md delete mode 100644 plugins/quay/CHANGELOG.md delete mode 100644 plugins/quay/CONTRIBUTING.md delete mode 100644 plugins/quay/app-config.janus-idp.yaml delete mode 100644 plugins/quay/catalog-info.yaml delete mode 100644 plugins/quay/config.d.ts delete mode 100644 plugins/quay/dev/__data__/labels.ts delete mode 100644 plugins/quay/dev/__data__/manifest_digest.ts delete mode 100644 plugins/quay/dev/__data__/security_vulnerabilities.ts delete mode 100644 plugins/quay/dev/__data__/tags.ts delete mode 100644 plugins/quay/dev/index.tsx delete mode 100644 plugins/quay/images/quay-plugin-backstage1.png delete mode 100644 plugins/quay/images/quay-plugin-backstage2.png delete mode 100644 plugins/quay/images/quay-plugin-backstage3.png delete mode 100644 plugins/quay/package.json delete mode 100644 plugins/quay/playwright.config.ts delete mode 100644 plugins/quay/src/api/fixtures/labels/foo.json delete mode 100644 plugins/quay/src/api/fixtures/manifests/bar.json delete mode 100644 plugins/quay/src/api/fixtures/manifests/foo.json delete mode 100644 plugins/quay/src/api/fixtures/securityDetail/foo.json delete mode 100644 plugins/quay/src/api/fixtures/tags/foo_limit.json delete mode 100644 plugins/quay/src/api/fixtures/tags/foo_page1.json delete mode 100644 plugins/quay/src/api/fixtures/tags/foo_page2.json delete mode 100644 plugins/quay/src/api/fixtures/tags/not_found.json delete mode 100644 plugins/quay/src/api/index.test.ts delete mode 100644 plugins/quay/src/api/index.ts delete mode 100644 plugins/quay/src/components/PermissionAlert/PermissionAlert.tsx delete mode 100644 plugins/quay/src/components/QuayRepository/QuayRepository.test.tsx delete mode 100644 plugins/quay/src/components/QuayRepository/QuayRepository.tsx delete mode 100644 plugins/quay/src/components/QuayRepository/index.ts delete mode 100644 plugins/quay/src/components/QuayRepository/tableHeading.tsx delete mode 100644 plugins/quay/src/components/QuayTagDetails/QuayTagDetails.test.tsx delete mode 100644 plugins/quay/src/components/QuayTagDetails/component.tsx delete mode 100644 plugins/quay/src/components/QuayTagDetails/index.ts delete mode 100644 plugins/quay/src/components/QuayTagPage/QuayTagPage.test.tsx delete mode 100644 plugins/quay/src/components/QuayTagPage/component.tsx delete mode 100644 plugins/quay/src/components/QuayTagPage/index.ts delete mode 100644 plugins/quay/src/components/QuayWidget/QuayWidget.tsx delete mode 100644 plugins/quay/src/components/QuayWidget/index.ts delete mode 100644 plugins/quay/src/components/Router.test.tsx delete mode 100644 plugins/quay/src/components/Router.tsx delete mode 100644 plugins/quay/src/components/useQuayAppData.test.ts delete mode 100644 plugins/quay/src/hooks/index.ts delete mode 100644 plugins/quay/src/hooks/quay.tsx delete mode 100644 plugins/quay/src/hooks/useQuayViewPermission.ts delete mode 100644 plugins/quay/src/hooks/useRepository.test.ts delete mode 100644 plugins/quay/src/hooks/useTagDetails.test.ts delete mode 100644 plugins/quay/src/hooks/useTags.test.ts delete mode 100644 plugins/quay/src/index.ts delete mode 100644 plugins/quay/src/lib/utils.data.ts delete mode 100644 plugins/quay/src/lib/utils.test.ts delete mode 100644 plugins/quay/src/lib/utils.ts delete mode 100644 plugins/quay/src/plugin.test.ts delete mode 100644 plugins/quay/src/plugin.ts delete mode 100644 plugins/quay/src/routes.ts delete mode 100644 plugins/quay/src/setupTests.ts delete mode 100644 plugins/quay/src/types.ts delete mode 100644 plugins/quay/tests/quay.spec.ts delete mode 100644 plugins/quay/tests/quayHelper.ts delete mode 100644 plugins/quay/tsconfig.json delete mode 100644 plugins/quay/turbo.json diff --git a/.github/renovate.json b/.github/renovate.json index 80332147c7..83ec8dc6fb 100644 --- a/.github/renovate.json +++ b/.github/renovate.json @@ -219,7 +219,6 @@ }, { "matchFileNames": [ - "plugins/quay*/**", "plugins/tekton*/**" ], "additionalBranchPrefix": "rhtap ", @@ -230,7 +229,6 @@ }, { "matchFileNames": [ - "plugins/quay*/**", "plugins/tekton*/**" ], "additionalBranchPrefix": "rhtap ", diff --git a/catalog-info.yaml b/catalog-info.yaml index de7c366c86..a562e50cff 100644 --- a/catalog-info.yaml +++ b/catalog-info.yaml @@ -50,8 +50,6 @@ spec: - ./plugins/orchestrator/catalog-info.yaml - ./plugins/orchestrator-backend/catalog-info.yaml - ./plugins/orchestrator-common/catalog-info.yaml - - ./plugins/quay/catalog-info.yaml - - ./plugins/quay-common/catalog-info.yaml - ./plugins/quay-actions/catalog-info.yaml - ./plugins/scaffolder-annotator-action/catalog-info.yaml - ./plugins/shared-react/catalog-info.yaml diff --git a/plugins/quay-common/.eslintignore b/plugins/quay-common/.eslintignore deleted file mode 100644 index 55289f4a23..0000000000 --- a/plugins/quay-common/.eslintignore +++ /dev/null @@ -1,2 +0,0 @@ -dist-dynamic -dist-scalprum diff --git a/plugins/quay-common/.eslintrc.js b/plugins/quay-common/.eslintrc.js deleted file mode 100644 index e2a53a6ad2..0000000000 --- a/plugins/quay-common/.eslintrc.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/quay-common/.lintstagedrc.json b/plugins/quay-common/.lintstagedrc.json deleted file mode 100644 index 14b2263def..0000000000 --- a/plugins/quay-common/.lintstagedrc.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "*": "prettier --ignore-unknown --write", - "*.{js,jsx,ts,tsx,mjs,cjs}": "backstage-cli package lint --fix" -} diff --git a/plugins/quay-common/.prettierignore b/plugins/quay-common/.prettierignore deleted file mode 100644 index fc8357d99e..0000000000 --- a/plugins/quay-common/.prettierignore +++ /dev/null @@ -1,12 +0,0 @@ -dist -dist-types -coverage -.vscode -CHANGELOG.md -generated -templates -*.hbs -renovate.json -dist-dynamic -dist-scalprum -playwright-report diff --git a/plugins/quay-common/.prettierrc.js b/plugins/quay-common/.prettierrc.js deleted file mode 100644 index 84cbac65b5..0000000000 --- a/plugins/quay-common/.prettierrc.js +++ /dev/null @@ -1,20 +0,0 @@ -// @ts-check - -/** @type {import("@ianvs/prettier-plugin-sort-imports").PrettierConfig} */ -module.exports = { - ...require('@spotify/prettier-config'), - plugins: ['@ianvs/prettier-plugin-sort-imports'], - importOrder: [ - '^react(.*)$', - '', - '^@backstage/(.*)$', - '', - '', - '', - '^@janus-idp/(.*)$', - '', - '', - '', - '^[.]', - ], -}; diff --git a/plugins/quay-common/.versionhistory.md b/plugins/quay-common/.versionhistory.md deleted file mode 100644 index b17e69831a..0000000000 --- a/plugins/quay-common/.versionhistory.md +++ /dev/null @@ -1 +0,0 @@ -- Bumped to 1.1.0 in main branch for next release 1.3.0 diff --git a/plugins/quay-common/CHANGELOG.md b/plugins/quay-common/CHANGELOG.md deleted file mode 100644 index 422190ddd6..0000000000 --- a/plugins/quay-common/CHANGELOG.md +++ /dev/null @@ -1,26 +0,0 @@ -# @janus-idp/backstage-plugin-quay-common - -## 1.3.1 - -### Patch Changes - -- 0e6bfd3: feat: update Backstage to the latest version - - Update to Backstage 1.32.5 - -## 1.3.0 - -### Minor Changes - -- 8244f28: chore(deps): update to backstage 1.32 - -## 1.2.0 - -### Minor Changes - -- d9551ae: feat(deps): update to backstage 1.31 - -### Patch Changes - -- d9551ae: change deps to peer deps in common packages -- d9551ae: upgrade to yarn v3 diff --git a/plugins/quay-common/README.md b/plugins/quay-common/README.md index 0d03ee5439..e8b16731ea 100644 --- a/plugins/quay-common/README.md +++ b/plugins/quay-common/README.md @@ -1,11 +1,3 @@ -# Quay Common plugin +# Deprecated -Welcome to the quay-common plugin! - -This plugin contains common utilities for the quay plugin. - -# Quay plugin for Backstage - -The Quay plugin displays the information about your container images within the Quay registry in your Backstage application. - -For more information about Quay plugin, see the [Quay plugin documentation](https://github.com/janus-idp/backstage-plugins/tree/main/plugins/quay) on GitHub. +This package has been moved to the [backstage-community/plugins](https://github.com/backstage/community-plugins) repository. Migrate to using `@backstage-community/plugin-quay-common` instead. diff --git a/plugins/quay-common/catalog-info.yaml b/plugins/quay-common/catalog-info.yaml deleted file mode 100644 index beade7128b..0000000000 --- a/plugins/quay-common/catalog-info.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# https://backstage.io/docs/features/software-catalog/descriptor-format#kind-component -apiVersion: backstage.io/v1alpha1 -kind: Component -metadata: - name: janus-idp-quay-common - title: '@janus-idp/backstage-plugin-quay-common' - description: Quay Common plugin - annotations: - backstage.io/source-location: url:https://github.com/janus-idp/backstage-plugins/tree/main/plugins/quay-common - backstage.io/view-url: https://github.com/janus-idp/backstage-plugins/blob/main/plugins/quay-common/catalog-info.yaml - backstage.io/edit-url: https://github.com/janus-idp/backstage-plugins/edit/main/plugins/quay-common/catalog-info.yaml - github.com/project-slug: janus-idp/backstage-plugins - github.com/team-slug: janus-idp/rhtap - sonarqube.org/project-key: janus-idp_backstage-plugins - tags: - - quay - links: - - url: https://github.com/janus-idp/backstage-plugins/tree/main/plugins/quay-common - title: GitHub Source - icon: source - type: source -spec: - type: backstage-common-library - lifecycle: production - owner: rhtap-team - system: rhdh - subcomponentOf: janus-idp-quay diff --git a/plugins/quay-common/package.json b/plugins/quay-common/package.json deleted file mode 100644 index bcda2ea5e7..0000000000 --- a/plugins/quay-common/package.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "name": "@janus-idp/backstage-plugin-quay-common", - "version": "1.3.1", - "main": "src/index.ts", - "types": "src/index.ts", - "license": "Apache-2.0", - "publishConfig": { - "access": "public", - "main": "dist/index.cjs.js", - "module": "dist/index.esm.js", - "types": "dist/index.d.ts" - }, - "backstage": { - "role": "common-library", - "supported-versions": "1.32.5", - "pluginId": "quay", - "pluginPackage": "@janus-idp/backstage-plugin-quay-common", - "pluginPackages": [ - "@janus-idp/backstage-plugin-quay", - "@janus-idp/backstage-plugin-quay-common" - ] - }, - "author": "Red Hat", - "homepage": "https://red.ht/rhdh", - "bugs": "https://github.com/janus-idp/backstage-plugins/issues", - "maintainers": [ - "janus-idp/rhtap" - ], - "keywords": [ - "support:production", - "lifecycle:active", - "backstage", - "plugin" - ], - "sideEffects": false, - "scripts": { - "build": "backstage-cli package build", - "clean": "backstage-cli package clean", - "lint:check": "backstage-cli package lint", - "lint:fix": "backstage-cli package lint --fix", - "postpack": "backstage-cli package postpack", - "prepack": "backstage-cli package prepack", - "test": "backstage-cli package test --passWithNoTests --coverage", - "tsc": "tsc", - "prettier:check": "prettier --ignore-unknown --check .", - "prettier:fix": "prettier --ignore-unknown --write ." - }, - "repository": { - "type": "git", - "url": "git+https://github.com/janus-idp/backstage-plugins.git", - "directory": "plugins/quay-common" - }, - "files": [ - "dist" - ], - "peerDependencies": { - "@backstage/plugin-permission-common": "^0.8.1", - "react": "16.13.1 || ^17.0.0 || ^18.0.0" - }, - "devDependencies": { - "@backstage/cli": "0.28.2", - "prettier": "3.3.3" - } -} diff --git a/plugins/quay-common/src/index.ts b/plugins/quay-common/src/index.ts deleted file mode 100644 index 43db7ad34d..0000000000 --- a/plugins/quay-common/src/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Common functionalities for the quay plugin. - * - * @packageDocumentation - */ - -export * from './permissions'; diff --git a/plugins/quay-common/src/permissions.ts b/plugins/quay-common/src/permissions.ts deleted file mode 100644 index 15ba9e8a44..0000000000 --- a/plugins/quay-common/src/permissions.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { createPermission } from '@backstage/plugin-permission-common'; - -export const quayViewPermission = createPermission({ - name: 'quay.view.read', - attributes: { - action: 'read', - }, -}); - -/** - * List of all permissions on permission polices. - */ -export const quayPermissions = [quayViewPermission]; diff --git a/plugins/quay-common/tsconfig.json b/plugins/quay-common/tsconfig.json deleted file mode 100644 index 0ec5f10d97..0000000000 --- a/plugins/quay-common/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "@backstage/cli/config/tsconfig.json", - "include": ["src", "dev"], - "exclude": ["node_modules"], - "compilerOptions": { - "outDir": "../../dist-types/plugins/quay-common", - "rootDir": "." - } -} diff --git a/plugins/quay-common/turbo.json b/plugins/quay-common/turbo.json deleted file mode 100644 index 19c6018b57..0000000000 --- a/plugins/quay-common/turbo.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": ["//"], - "tasks": { - "tsc": { - "outputs": ["../../dist-types/plugins/quay-common/**"] - } - } -} diff --git a/plugins/quay/.eslintignore b/plugins/quay/.eslintignore deleted file mode 100644 index 55289f4a23..0000000000 --- a/plugins/quay/.eslintignore +++ /dev/null @@ -1,2 +0,0 @@ -dist-dynamic -dist-scalprum diff --git a/plugins/quay/.eslintrc.js b/plugins/quay/.eslintrc.js deleted file mode 100644 index e2a53a6ad2..0000000000 --- a/plugins/quay/.eslintrc.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/quay/.lintstagedrc.json b/plugins/quay/.lintstagedrc.json deleted file mode 100644 index 14b2263def..0000000000 --- a/plugins/quay/.lintstagedrc.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "*": "prettier --ignore-unknown --write", - "*.{js,jsx,ts,tsx,mjs,cjs}": "backstage-cli package lint --fix" -} diff --git a/plugins/quay/.prettierignore b/plugins/quay/.prettierignore deleted file mode 100644 index fc8357d99e..0000000000 --- a/plugins/quay/.prettierignore +++ /dev/null @@ -1,12 +0,0 @@ -dist -dist-types -coverage -.vscode -CHANGELOG.md -generated -templates -*.hbs -renovate.json -dist-dynamic -dist-scalprum -playwright-report diff --git a/plugins/quay/.prettierrc.js b/plugins/quay/.prettierrc.js deleted file mode 100644 index 84cbac65b5..0000000000 --- a/plugins/quay/.prettierrc.js +++ /dev/null @@ -1,20 +0,0 @@ -// @ts-check - -/** @type {import("@ianvs/prettier-plugin-sort-imports").PrettierConfig} */ -module.exports = { - ...require('@spotify/prettier-config'), - plugins: ['@ianvs/prettier-plugin-sort-imports'], - importOrder: [ - '^react(.*)$', - '', - '^@backstage/(.*)$', - '', - '', - '', - '^@janus-idp/(.*)$', - '', - '', - '', - '^[.]', - ], -}; diff --git a/plugins/quay/.versionhistory.md b/plugins/quay/.versionhistory.md deleted file mode 100644 index 338187c3f2..0000000000 --- a/plugins/quay/.versionhistory.md +++ /dev/null @@ -1,2 +0,0 @@ -- Bumped to 1.6.0 in main branch for next release 1.2.0 -- Bumped to 1.12.0 in main branch for next release 1.3.0 diff --git a/plugins/quay/CHANGELOG.md b/plugins/quay/CHANGELOG.md deleted file mode 100644 index d6838ce657..0000000000 --- a/plugins/quay/CHANGELOG.md +++ /dev/null @@ -1,662 +0,0 @@ -### Dependencies - -## 1.14.1 - -### Patch Changes - -- 0e6bfd3: feat: update Backstage to the latest version - - Update to Backstage 1.32.5 - -- Updated dependencies [0e6bfd3] - - @janus-idp/shared-react@2.13.1 - - @janus-idp/backstage-plugin-quay-common@1.3.1 - -## 1.14.0 - -### Minor Changes - -- 8244f28: chore(deps): update to backstage 1.32 - -### Patch Changes - -- Updated dependencies [8244f28] - - @janus-idp/shared-react@2.13.0 - - @janus-idp/backstage-plugin-quay-common@1.3.0 - -## 1.13.1 - -### Patch Changes - -- 7342e9b: chore: remove @janus-idp/cli dep and relink local packages - - This update removes `@janus-idp/cli` from all plugins, as it’s no longer necessary. Additionally, packages are now correctly linked with a specified version. - -## 1.13.0 - -### Minor Changes - -- d9551ae: feat(deps): update to backstage 1.31 - -### Patch Changes - -- d9551ae: Change local package references to a `*` -- d9551ae: pin the @janus-idp/cli package -- d9551ae: upgrade to yarn v3 -- Updated dependencies [d9551ae] -- Updated dependencies [d9551ae] -- Updated dependencies [d9551ae] -- Updated dependencies [d9551ae] - - @janus-idp/shared-react@2.12.0 - - @janus-idp/backstage-plugin-quay-common@1.2.0 - -* **@janus-idp/cli:** upgraded to 1.15.2 - -### Dependencies - -- **@janus-idp/cli:** upgraded to 1.15.1 - -### Dependencies - -- **@janus-idp/shared-react:** upgraded to 2.11.1 -- **@janus-idp/cli:** upgraded to 1.15.0 - -### Dependencies - -- **@janus-idp/backstage-plugin-quay-common:** upgraded to 1.1.0 -- **@janus-idp/shared-react:** upgraded to 2.11.0 -- **@janus-idp/cli:** upgraded to 1.14.0 - -### Dependencies - -- **@janus-idp/cli:** upgraded to 1.13.2 - -### Dependencies - -- **@janus-idp/shared-react:** upgraded to 2.10.3 - -### Dependencies - -- **@janus-idp/shared-react:** upgraded to 2.10.2 - -### Dependencies - -- **@janus-idp/shared-react:** upgraded to 2.10.1 - -### Dependencies - -- **@janus-idp/cli:** upgraded to 1.13.1 - -### Dependencies - -- **@janus-idp/backstage-plugin-quay-common:** upgraded to 1.0.2 - -### Dependencies - -- **@janus-idp/backstage-plugin-quay-common:** upgraded to 1.0.0 - -## @janus-idp/backstage-plugin-quay [1.10.2](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.10.1...@janus-idp/backstage-plugin-quay@1.10.2) (2024-08-02) - -### Dependencies - -- **@janus-idp/shared-react:** upgraded to 2.10.0 - -## @janus-idp/backstage-plugin-quay [1.10.1](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.10.0...@janus-idp/backstage-plugin-quay@1.10.1) (2024-07-26) - -### Documentation - -- **quay:** add documentation for the new credential settings in proxy backend ([#1902](https://github.com/janus-idp/backstage-plugins/issues/1902)) ([e04d231](https://github.com/janus-idp/backstage-plugins/commit/e04d2310efe40da60a7b5c314ca6051ccdae99ba)) - -## @janus-idp/backstage-plugin-quay [1.10.0](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.9.0...@janus-idp/backstage-plugin-quay@1.10.0) (2024-07-26) - -### Features - -- **deps:** update to backstage 1.29 ([#1900](https://github.com/janus-idp/backstage-plugins/issues/1900)) ([f53677f](https://github.com/janus-idp/backstage-plugins/commit/f53677fb02d6df43a9de98c43a9f101a6db76802)) - -### Dependencies - -- **@janus-idp/shared-react:** upgraded to 2.9.0 - -## @janus-idp/backstage-plugin-quay [1.9.0](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.8.2...@janus-idp/backstage-plugin-quay@1.9.0) (2024-07-24) - -### Features - -- **deps:** update to backstage 1.28 ([#1891](https://github.com/janus-idp/backstage-plugins/issues/1891)) ([1ba1108](https://github.com/janus-idp/backstage-plugins/commit/1ba11088e0de60e90d138944267b83600dc446e5)) - -### Dependencies - -- **@janus-idp/shared-react:** upgraded to 2.8.0 - -## @janus-idp/backstage-plugin-quay [1.8.2](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.8.1...@janus-idp/backstage-plugin-quay@1.8.2) (2024-07-17) - -### Bug Fixes - -- **quay:** add mock data to quay dev mode tests ([#1860](https://github.com/janus-idp/backstage-plugins/issues/1860)) ([cbfcc49](https://github.com/janus-idp/backstage-plugins/commit/cbfcc4995f57d276abab4896efe8729761eff22f)) - -## @janus-idp/backstage-plugin-quay [1.8.1](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.8.0...@janus-idp/backstage-plugin-quay@1.8.1) (2024-06-19) - -### Dependencies - -- **@janus-idp/shared-react:** upgraded to 2.7.1 -- **@janus-idp/cli:** upgraded to 1.11.1 - -## @janus-idp/backstage-plugin-quay [1.8.0](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.7.10...@janus-idp/backstage-plugin-quay@1.8.0) (2024-06-13) - -### Features - -- **deps:** update to backstage 1.27 ([#1683](https://github.com/janus-idp/backstage-plugins/issues/1683)) ([a14869c](https://github.com/janus-idp/backstage-plugins/commit/a14869c3f4177049cb8d6552b36c3ffd17e7997d)) - -### Dependencies - -- **@janus-idp/shared-react:** upgraded to 2.7.0 -- **@janus-idp/cli:** upgraded to 1.11.0 - -## @janus-idp/backstage-plugin-quay [1.7.10](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.7.9...@janus-idp/backstage-plugin-quay@1.7.10) (2024-06-13) - -### Dependencies - -- **@janus-idp/cli:** upgraded to 1.10.1 - -## @janus-idp/backstage-plugin-quay [1.7.9](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.7.8...@janus-idp/backstage-plugin-quay@1.7.9) (2024-06-10) - -## @janus-idp/backstage-plugin-quay [1.7.8](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.7.7...@janus-idp/backstage-plugin-quay@1.7.8) (2024-06-05) - -### Dependencies - -- **@janus-idp/cli:** upgraded to 1.10.0 - -## @janus-idp/backstage-plugin-quay [1.7.7](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.7.6...@janus-idp/backstage-plugin-quay@1.7.7) (2024-06-04) - -### Dependencies - -- **@janus-idp/shared-react:** upgraded to 2.6.4 - -## @janus-idp/backstage-plugin-quay [1.7.6](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.7.5...@janus-idp/backstage-plugin-quay@1.7.6) (2024-06-03) - -### Dependencies - -- **@janus-idp/cli:** upgraded to 1.9.0 - -## @janus-idp/backstage-plugin-quay [1.7.5](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.7.4...@janus-idp/backstage-plugin-quay@1.7.5) (2024-05-31) - -## @janus-idp/backstage-plugin-quay [1.7.4](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.7.3...@janus-idp/backstage-plugin-quay@1.7.4) (2024-05-29) - -### Dependencies - -- **@janus-idp/cli:** upgraded to 1.8.10 - -## @janus-idp/backstage-plugin-quay [1.7.3](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.7.2...@janus-idp/backstage-plugin-quay@1.7.3) (2024-05-29) - -### Dependencies - -- **@janus-idp/shared-react:** upgraded to 2.6.3 -- **@janus-idp/cli:** upgraded to 1.8.9 - -## @janus-idp/backstage-plugin-quay [1.7.2](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.7.1...@janus-idp/backstage-plugin-quay@1.7.2) (2024-05-17) - -### Bug Fixes - -- **quay:** remove unuseful link ([#1692](https://github.com/janus-idp/backstage-plugins/issues/1692)) ([ae27d91](https://github.com/janus-idp/backstage-plugins/commit/ae27d919a312f66d592bc5a48837f78e82302903)) - -## @janus-idp/backstage-plugin-quay [1.7.1](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.7.0...@janus-idp/backstage-plugin-quay@1.7.1) (2024-05-16) - -### Dependencies - -- **@janus-idp/shared-react:** upgraded to 2.6.2 -- **@janus-idp/cli:** upgraded to 1.8.7 - -## @janus-idp/backstage-plugin-quay [1.7.0](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.6.7...@janus-idp/backstage-plugin-quay@1.7.0) (2024-05-14) - -### Features - -- **deps:** use RHDH themes in the backstage app and dev pages ([#1480](https://github.com/janus-idp/backstage-plugins/issues/1480)) ([8263bf0](https://github.com/janus-idp/backstage-plugins/commit/8263bf099736cbb0d0f2316082d338ba81fa6927)) - -## @janus-idp/backstage-plugin-quay [1.6.7](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.6.6...@janus-idp/backstage-plugin-quay@1.6.7) (2024-05-09) - -### Dependencies - -- **@janus-idp/shared-react:** upgraded to 2.6.1 -- **@janus-idp/cli:** upgraded to 1.8.6 - -## @janus-idp/backstage-plugin-quay [1.6.6](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.6.5...@janus-idp/backstage-plugin-quay@1.6.6) (2024-05-02) - -### Dependencies - -- **@janus-idp/cli:** upgraded to 1.8.5 - -## @janus-idp/backstage-plugin-quay [1.6.5](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.6.4...@janus-idp/backstage-plugin-quay@1.6.5) (2024-05-02) - -### Dependencies - -- **@janus-idp/cli:** upgraded to 1.8.4 - -## @janus-idp/backstage-plugin-quay [1.6.4](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.6.3...@janus-idp/backstage-plugin-quay@1.6.4) (2024-04-30) - -### Dependencies - -- **@janus-idp/cli:** upgraded to 1.8.3 - -## @janus-idp/backstage-plugin-quay [1.6.3](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.6.2...@janus-idp/backstage-plugin-quay@1.6.3) (2024-04-30) - -### Dependencies - -- **@janus-idp/cli:** upgraded to 1.8.2 - -## @janus-idp/backstage-plugin-quay [1.6.2](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.6.1...@janus-idp/backstage-plugin-quay@1.6.2) (2024-04-30) - -### Bug Fixes - -- **ui:** remove extra inline style ([#1548](https://github.com/janus-idp/backstage-plugins/issues/1548)) ([4f38030](https://github.com/janus-idp/backstage-plugins/commit/4f3803068f9b5e3007d85feaf7fb12e837ce09d5)) - -## @janus-idp/backstage-plugin-quay [1.6.1](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.6.0...@janus-idp/backstage-plugin-quay@1.6.1) (2024-04-25) - -### Dependencies - -- **@janus-idp/cli:** upgraded to 1.8.1 - -## @janus-idp/backstage-plugin-quay [1.6.0](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.5.17...@janus-idp/backstage-plugin-quay@1.6.0) (2024-04-15) - -### Features - -- checkPluginVersion.sh bump plugins for 1.2.0 release ([#1511](https://github.com/janus-idp/backstage-plugins/issues/1511)) ([73c6588](https://github.com/janus-idp/backstage-plugins/commit/73c6588adb7e8c20907b06f2a8ef248cfd4332e4)) - -### Dependencies - -- **@janus-idp/shared-react:** upgraded to 2.6.0 -- **@janus-idp/cli:** upgraded to 1.8.0 - -## @janus-idp/backstage-plugin-quay [1.5.17](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.5.16...@janus-idp/backstage-plugin-quay@1.5.17) (2024-04-09) - -### Dependencies - -- **@janus-idp/cli:** upgraded to 1.7.10 - -## @janus-idp/backstage-plugin-quay [1.5.16](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.5.15...@janus-idp/backstage-plugin-quay@1.5.16) (2024-04-09) - -### Dependencies - -- **@janus-idp/shared-react:** upgraded to 2.5.5 - -## @janus-idp/backstage-plugin-quay [1.5.15](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.5.14...@janus-idp/backstage-plugin-quay@1.5.15) (2024-04-09) - -### Dependencies - -- **@janus-idp/cli:** upgraded to 1.7.9 - -## @janus-idp/backstage-plugin-quay [1.5.14](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.5.13...@janus-idp/backstage-plugin-quay@1.5.14) (2024-04-08) - -### Dependencies - -- **@janus-idp/shared-react:** upgraded to 2.5.4 - -## @janus-idp/backstage-plugin-quay [1.5.13](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.5.12...@janus-idp/backstage-plugin-quay@1.5.13) (2024-04-05) - -### Dependencies - -- **@janus-idp/shared-react:** upgraded to 2.5.4 -- **@janus-idp/cli:** upgraded to 1.7.8 - -## @janus-idp/backstage-plugin-quay [1.5.12](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.5.11...@janus-idp/backstage-plugin-quay@1.5.12) (2024-04-02) - -### Dependencies - -- **@janus-idp/cli:** upgraded to 1.7.7 - -## @janus-idp/backstage-plugin-quay [1.5.11](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.5.10...@janus-idp/backstage-plugin-quay@1.5.11) (2024-03-29) - -### Dependencies - -- **@janus-idp/shared-react:** upgraded to 2.5.3 -- **@janus-idp/cli:** upgraded to 1.7.6 - -## @janus-idp/backstage-plugin-quay [1.5.10](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.5.9...@janus-idp/backstage-plugin-quay@1.5.10) (2024-03-26) - -### Bug Fixes - -- **quay:** add queued status for tags waiting for scan ([#1400](https://github.com/janus-idp/backstage-plugins/issues/1400)) ([ef37ae1](https://github.com/janus-idp/backstage-plugins/commit/ef37ae10727a3d0ba3dd5e02f2048fad79f63157)) - -## @janus-idp/backstage-plugin-quay [1.5.9](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.5.8...@janus-idp/backstage-plugin-quay@1.5.9) (2024-03-04) - -### Dependencies - -- **@janus-idp/cli:** upgraded to 1.7.5 - -## @janus-idp/backstage-plugin-quay [1.5.8](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.5.7...@janus-idp/backstage-plugin-quay@1.5.8) (2024-02-27) - -### Dependencies - -- **@janus-idp/cli:** upgraded to 1.7.4 - -## @janus-idp/backstage-plugin-quay [1.5.7](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.5.6...@janus-idp/backstage-plugin-quay@1.5.7) (2024-02-26) - -### Dependencies - -- **@janus-idp/cli:** upgraded to 1.7.3 - -## @janus-idp/backstage-plugin-quay [1.5.6](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.5.5...@janus-idp/backstage-plugin-quay@1.5.6) (2024-02-21) - -### Other changes - -- **quay:** add first playwright tests ([#1201](https://github.com/janus-idp/backstage-plugins/issues/1201)) ([a7e936d](https://github.com/janus-idp/backstage-plugins/commit/a7e936d88e0c21f2948cb4f46da491ec878f4c9b)) -- **tekton:** add playwright tests for the plugin ([#1228](https://github.com/janus-idp/backstage-plugins/issues/1228)) ([705afc2](https://github.com/janus-idp/backstage-plugins/commit/705afc2892839f39a8cbad39f51c959aa3ac4c8a)) - -### Dependencies - -- **@janus-idp/shared-react:** upgraded to 2.5.2 -- **@janus-idp/cli:** upgraded to 1.7.2 - -## @janus-idp/backstage-plugin-quay [1.5.5](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.5.4...@janus-idp/backstage-plugin-quay@1.5.5) (2024-02-05) - -### Dependencies - -- **@janus-idp/cli:** upgraded to 1.7.1 - -## @janus-idp/backstage-plugin-quay [1.5.4](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.5.3...@janus-idp/backstage-plugin-quay@1.5.4) (2024-02-02) - -### Dependencies - -- **@janus-idp/shared-react:** upgraded to 2.5.1 - -## @janus-idp/backstage-plugin-quay [1.5.3](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.5.2...@janus-idp/backstage-plugin-quay@1.5.3) (2024-01-30) - -### Dependencies - -- **@janus-idp/cli:** upgraded to 1.7.0 - -## @janus-idp/backstage-plugin-quay [1.5.2](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.5.1...@janus-idp/backstage-plugin-quay@1.5.2) (2024-01-30) - -### Dependencies - -- **@janus-idp/shared-react:** upgraded to 2.5.0 - -## @janus-idp/backstage-plugin-quay [1.5.1](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.5.0...@janus-idp/backstage-plugin-quay@1.5.1) (2024-01-25) - -### Dependencies - -- **@janus-idp/cli:** upgraded to 1.6.0 - -## @janus-idp/backstage-plugin-quay [1.5.0](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.4.21...@janus-idp/backstage-plugin-quay@1.5.0) (2024-01-17) - -### Features - -- **quay:** fix sorting in quay table and tag details ([#1044](https://github.com/janus-idp/backstage-plugins/issues/1044)) ([ceb16a9](https://github.com/janus-idp/backstage-plugins/commit/ceb16a97870f939e88b1424b3ce208ca24eb868a)) - -### Dependencies - -- **@janus-idp/shared-react:** upgraded to 2.4.0 - -## @janus-idp/backstage-plugin-quay [1.4.21](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.4.20...@janus-idp/backstage-plugin-quay@1.4.21) (2023-12-22) - -### Dependencies - -- **@janus-idp/shared-react:** upgraded to 2.3.0 - -## @janus-idp/backstage-plugin-quay [1.4.20](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.4.19...@janus-idp/backstage-plugin-quay@1.4.20) (2023-12-21) - -### Bug Fixes - -- **quay:** fix sorting and ordering of vulneribilities based on severity ([#1033](https://github.com/janus-idp/backstage-plugins/issues/1033)) ([d3fdcdf](https://github.com/janus-idp/backstage-plugins/commit/d3fdcdfb51d782e8f22a9eecdb5091def8ff4176)) - -## @janus-idp/backstage-plugin-quay [1.4.19](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.4.18...@janus-idp/backstage-plugin-quay@1.4.19) (2023-12-21) - -### Bug Fixes - -- **quay:** fix infinite progress bar when scan is unsupported ([#1031](https://github.com/janus-idp/backstage-plugins/issues/1031)) ([2c050db](https://github.com/janus-idp/backstage-plugins/commit/2c050dbcfe4fae55ce89f9a8b54c8c4550b804f8)) - -## @janus-idp/backstage-plugin-quay [1.4.18](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.4.17...@janus-idp/backstage-plugin-quay@1.4.18) (2023-12-20) - -### Dependencies - -- **@janus-idp/shared-react:** upgraded to 2.2.0 - -## @janus-idp/backstage-plugin-quay [1.4.17](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.4.16...@janus-idp/backstage-plugin-quay@1.4.17) (2023-12-14) - -### Dependencies - -- **@janus-idp/shared-react:** upgraded to 2.1.0 - -## @janus-idp/backstage-plugin-quay [1.4.16](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.4.15...@janus-idp/backstage-plugin-quay@1.4.16) (2023-12-07) - -### Dependencies - -- **@janus-idp/cli:** upgraded to 1.4.7 - -## @janus-idp/backstage-plugin-quay [1.4.15](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.4.14...@janus-idp/backstage-plugin-quay@1.4.15) (2023-11-30) - -### Dependencies - -- **@janus-idp/cli:** upgraded to 1.4.6 - -## @janus-idp/backstage-plugin-quay [1.4.14](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.4.13...@janus-idp/backstage-plugin-quay@1.4.14) (2023-11-23) - -### Bug Fixes - -- add config partials for dynamic frontend plugins ([#965](https://github.com/janus-idp/backstage-plugins/issues/965)) ([b01e55e](https://github.com/janus-idp/backstage-plugins/commit/b01e55e877278afc5de8d28a4c687a6989566bdc)) - -## @janus-idp/backstage-plugin-quay [1.4.13](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.4.12...@janus-idp/backstage-plugin-quay@1.4.13) (2023-11-23) - -### Dependencies - -- **@janus-idp/shared-react:** upgraded to 2.0.1 - -## @janus-idp/backstage-plugin-quay [1.4.12](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.4.11...@janus-idp/backstage-plugin-quay@1.4.12) (2023-11-22) - -### Dependencies - -- **@janus-idp/cli:** upgraded to 1.4.5 - -## @janus-idp/backstage-plugin-quay [1.4.11](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.4.10...@janus-idp/backstage-plugin-quay@1.4.11) (2023-11-21) - -### Bug Fixes - -- sync versions in dynamic assets and publish derived packages as additional packages ([#963](https://github.com/janus-idp/backstage-plugins/issues/963)) ([7d0a386](https://github.com/janus-idp/backstage-plugins/commit/7d0a38609b4a18b54c75378a150e8b5c3ba8ff43)) - -## @janus-idp/backstage-plugin-quay [1.4.10](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.4.9...@janus-idp/backstage-plugin-quay@1.4.10) (2023-11-20) - -### Dependencies - -- **@janus-idp/cli:** upgraded to 1.4.4 - -## @janus-idp/backstage-plugin-quay [1.4.9](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.4.8...@janus-idp/backstage-plugin-quay@1.4.9) (2023-11-16) - -### Dependencies - -- **@janus-idp/cli:** upgraded to 1.4.3 - -## @janus-idp/backstage-plugin-quay [1.4.8](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.4.7...@janus-idp/backstage-plugin-quay@1.4.8) (2023-11-13) - -### Dependencies - -- **@janus-idp/cli:** upgraded to 1.4.2 - -## @janus-idp/backstage-plugin-quay [1.4.7](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.4.6...@janus-idp/backstage-plugin-quay@1.4.7) (2023-11-13) - -### Dependencies - -- **@janus-idp/cli:** upgraded to 1.4.1 - -## @janus-idp/backstage-plugin-quay [1.4.6](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.4.5...@janus-idp/backstage-plugin-quay@1.4.6) (2023-11-07) - -### Dependencies - -- **@janus-idp/cli:** upgraded to 1.4.0 - -## @janus-idp/backstage-plugin-quay [1.4.5](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.4.4...@janus-idp/backstage-plugin-quay@1.4.5) (2023-11-06) - -### Bug Fixes - -- **cli:** add default scalprum config ([#909](https://github.com/janus-idp/backstage-plugins/issues/909)) ([d74fc72](https://github.com/janus-idp/backstage-plugins/commit/d74fc72ab7e0a843da047c7b6570d8a6fbc068e1)) - -### Dependencies - -- **@janus-idp/cli:** upgraded to 1.3.3 - -## @janus-idp/backstage-plugin-quay [1.4.4](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.4.3...@janus-idp/backstage-plugin-quay@1.4.4) (2023-11-06) - -### Documentation - -- update frontend plugin docs to use EntityLayout instead of EntityPageLayout ([#907](https://github.com/janus-idp/backstage-plugins/issues/907)) ([aa91bba](https://github.com/janus-idp/backstage-plugins/commit/aa91bba4c7a43de416258eb019724e21c7cf4bb8)) - -## @janus-idp/backstage-plugin-quay [1.4.3](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.4.2...@janus-idp/backstage-plugin-quay@1.4.3) (2023-11-02) - -### Dependencies - -- **@janus-idp/cli:** upgraded to 1.3.2 - -## @janus-idp/backstage-plugin-quay [1.4.2](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.4.1...@janus-idp/backstage-plugin-quay@1.4.2) (2023-10-26) - -### Dependencies - -- **@janus-idp/cli:** upgraded to 1.3.1 - -## @janus-idp/backstage-plugin-quay [1.4.1](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.4.0...@janus-idp/backstage-plugin-quay@1.4.1) (2023-10-23) - -### Dependencies - -- **@janus-idp/shared-react:** upgraded to 2.0.0 - -## @janus-idp/backstage-plugin-quay [1.4.0](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.3.4...@janus-idp/backstage-plugin-quay@1.4.0) (2023-10-23) - -### Features - -- **cli:** add frontend dynamic plugins base build config ([#747](https://github.com/janus-idp/backstage-plugins/issues/747)) ([91e06da](https://github.com/janus-idp/backstage-plugins/commit/91e06da8ab108c17fd2a6531f25e01c7a7350276)), closes [#831](https://github.com/janus-idp/backstage-plugins/issues/831) - -## @janus-idp/backstage-plugin-quay [1.3.4](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.3.3...@janus-idp/backstage-plugin-quay@1.3.4) (2023-10-20) - -### Bug Fixes - -- **quay:** add visual indicator to security scan when it is still loading ([#848](https://github.com/janus-idp/backstage-plugins/issues/848)) ([71ff2a8](https://github.com/janus-idp/backstage-plugins/commit/71ff2a87ede8094df5f03efaf55b2ca70bcc33e5)) - -## @janus-idp/backstage-plugin-quay [1.3.3](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.3.2...@janus-idp/backstage-plugin-quay@1.3.3) (2023-10-19) - -### Dependencies - -- **@janus-idp/shared-react:** upgraded to 1.3.3 - -## @janus-idp/backstage-plugin-quay [1.3.2](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.3.1...@janus-idp/backstage-plugin-quay@1.3.2) (2023-10-16) - -### Dependencies - -- **@janus-idp/shared-react:** upgraded to 1.3.2 - -## @janus-idp/backstage-plugin-quay [1.3.1](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.3.0...@janus-idp/backstage-plugin-quay@1.3.1) (2023-09-22) - -### Dependencies - -- **@janus-idp/shared-react:** upgraded to 1.3.1 - -## @janus-idp/backstage-plugin-quay [1.3.0](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.2.15...@janus-idp/backstage-plugin-quay@1.3.0) (2023-08-14) - -### Features - -- **ts:** transpile each plugin separately ([#634](https://github.com/janus-idp/backstage-plugins/issues/634)) ([b94c4dc](https://github.com/janus-idp/backstage-plugins/commit/b94c4dc50ada328e5ce1bed5fb7c76f64607e1ee)) - -## @janus-idp/backstage-plugin-quay [1.2.15](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.2.14...@janus-idp/backstage-plugin-quay@1.2.15) (2023-07-25) - -### Bug Fixes - -- **plugins:** add bearer token to request headers when sending requests, authmiddleware issue ([#498](https://github.com/janus-idp/backstage-plugins/issues/498)) ([86881c3](https://github.com/janus-idp/backstage-plugins/commit/86881c37321d1b446f15ff59b2fcb8ebc8500786)) - -## @janus-idp/backstage-plugin-quay [1.2.14](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.2.13...@janus-idp/backstage-plugin-quay@1.2.14) (2023-07-25) - -## @janus-idp/backstage-plugin-quay [1.2.13](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.2.12...@janus-idp/backstage-plugin-quay@1.2.13) (2023-06-14) - -### Other changes - -- **quay:** add unit tests for quay plugin ([#441](https://github.com/janus-idp/backstage-plugins/issues/441)) ([e9d7ed5](https://github.com/janus-idp/backstage-plugins/commit/e9d7ed54b7da5e8246993e586ea1b5379f757322)) -- reorder imports via prettier ([#419](https://github.com/janus-idp/backstage-plugins/issues/419)) ([17f1e6a](https://github.com/janus-idp/backstage-plugins/commit/17f1e6a689bd793a619ec5e42e5cdda0998f78a5)) - -### Documentation - -- update plugin README formatting ([#396](https://github.com/janus-idp/backstage-plugins/issues/396)) ([9b39056](https://github.com/janus-idp/backstage-plugins/commit/9b39056f6c66e9a6a0a5d0c4059420dff66db263)), closes [#295](https://github.com/janus-idp/backstage-plugins/issues/295) [#369](https://github.com/janus-idp/backstage-plugins/issues/369) [#295](https://github.com/janus-idp/backstage-plugins/issues/295) [#369](https://github.com/janus-idp/backstage-plugins/issues/369) - -## @janus-idp/backstage-plugin-quay [1.2.12](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.2.11...@janus-idp/backstage-plugin-quay@1.2.12) (2023-05-30) - -## @janus-idp/backstage-plugin-quay [1.2.11](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.2.10...@janus-idp/backstage-plugin-quay@1.2.11) (2023-05-30) - -## @janus-idp/backstage-plugin-quay [1.2.10](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.2.9...@janus-idp/backstage-plugin-quay@1.2.10) (2023-05-22) - -### Documentation - -- **Quay:** update user doc ([#353](https://github.com/janus-idp/backstage-plugins/issues/353)) ([f8d143f](https://github.com/janus-idp/backstage-plugins/commit/f8d143f243db069e8877f6b8a053790fabe078cf)) - -## @janus-idp/backstage-plugin-quay [1.2.9](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.2.8...@janus-idp/backstage-plugin-quay@1.2.9) (2023-05-18) - -### Documentation - -- update plugin READMEs ([#373](https://github.com/janus-idp/backstage-plugins/issues/373)) ([478560e](https://github.com/janus-idp/backstage-plugins/commit/478560e38cceaa40d976bccf4785956ed58b5221)) - -## @janus-idp/backstage-plugin-quay [1.2.8](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.2.7...@janus-idp/backstage-plugin-quay@1.2.8) (2023-05-17) - -### Bug Fixes - -- **deps:** update all non-major dependencies ([#358](https://github.com/janus-idp/backstage-plugins/issues/358)) ([086a9ed](https://github.com/janus-idp/backstage-plugins/commit/086a9ed839f3a6dd1460f0f87b71453a7ed62ea3)) - -## @janus-idp/backstage-plugin-quay [1.2.7](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.2.6...@janus-idp/backstage-plugin-quay@1.2.7) (2023-05-15) - -## @janus-idp/backstage-plugin-quay [1.2.6](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.2.5...@janus-idp/backstage-plugin-quay@1.2.6) (2023-05-15) - -## @janus-idp/backstage-plugin-quay [1.2.5](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.2.4...@janus-idp/backstage-plugin-quay@1.2.5) (2023-05-11) - -### Bug Fixes - -- **deps:** update all non-major dependencies ([#339](https://github.com/janus-idp/backstage-plugins/issues/339)) ([d19d96d](https://github.com/janus-idp/backstage-plugins/commit/d19d96de7b55c205e0f77528e476104c0685aad2)) - -## @janus-idp/backstage-plugin-quay [1.2.4](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.2.3...@janus-idp/backstage-plugin-quay@1.2.4) (2023-05-09) - -### Bug Fixes - -- **plugins:** remove React.FC types ([#335](https://github.com/janus-idp/backstage-plugins/issues/335)) ([f3d40af](https://github.com/janus-idp/backstage-plugins/commit/f3d40af9c6e55e5699ed78d07ae6617e25b33c18)) - -## @janus-idp/backstage-plugin-quay [1.2.3](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.2.2...@janus-idp/backstage-plugin-quay@1.2.3) (2023-05-09) - -### Other changes - -- **deps:** update all non-major dependencies ([#333](https://github.com/janus-idp/backstage-plugins/issues/333)) ([dce0ea4](https://github.com/janus-idp/backstage-plugins/commit/dce0ea4a9b9f517bd864d39f0b364c68e6a2e143)) - -## @janus-idp/backstage-plugin-quay [1.2.2](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.2.1...@janus-idp/backstage-plugin-quay@1.2.2) (2023-05-04) - -### Documentation - -- review for Quay plugin ([#281](https://github.com/janus-idp/backstage-plugins/issues/281)) ([b3717ce](https://github.com/janus-idp/backstage-plugins/commit/b3717ce5cddedb1d0250ee1df4b425d8fd7567d6)) - -### Other changes - -- **deps:** update all non-major dependencies ([#127](https://github.com/janus-idp/backstage-plugins/issues/127)) ([a9d359f](https://github.com/janus-idp/backstage-plugins/commit/a9d359f01448d1b9b4b4d3d9b087052fb6ff16b3)) - -## @janus-idp/backstage-plugin-quay [1.2.1](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.2.0...@janus-idp/backstage-plugin-quay@1.2.1) (2023-04-27) - -### Bug Fixes - -- **quay:** indicate when a layer has no security vulnerabilities detected ([#298](https://github.com/janus-idp/backstage-plugins/issues/298)) ([1285e10](https://github.com/janus-idp/backstage-plugins/commit/1285e102d875696781a2d45f60c61408405896ba)) - -## @janus-idp/backstage-plugin-quay [1.2.0](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.1.2...@janus-idp/backstage-plugin-quay@1.2.0) (2023-04-25) - -### Features - -- **quay:** add quay link to repository ([#207](https://github.com/janus-idp/backstage-plugins/issues/207)) ([eb44446](https://github.com/janus-idp/backstage-plugins/commit/eb44446edff67a9a5877846fd1a797acde8d24c9)) -- **quay:** add quay security details ([#240](https://github.com/janus-idp/backstage-plugins/issues/240)) ([c163943](https://github.com/janus-idp/backstage-plugins/commit/c16394371436e78ba7e41dba2c502864cc235ec7)) - -## @janus-idp/backstage-plugin-quay [1.1.2](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.1.1...@janus-idp/backstage-plugin-quay@1.1.2) (2023-03-31) - -### Bug Fixes - -- **quay:** change http link to https ([#217](https://github.com/janus-idp/backstage-plugins/issues/217)) ([dca6a5a](https://github.com/janus-idp/backstage-plugins/commit/dca6a5a174b86ce63d5aa93465526537e4be6bfa)) - -## @janus-idp/backstage-plugin-quay [1.1.1](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.1.0...@janus-idp/backstage-plugin-quay@1.1.1) (2023-03-06) - -### Bug Fixes - -- **metadata:** adding default metadata to current plugins ([06776da](https://github.com/janus-idp/backstage-plugins/commit/06776dafdbab6d4fa85b92d5b676f65d97bbdb44)), closes [#155](https://github.com/janus-idp/backstage-plugins/issues/155) [#155](https://github.com/janus-idp/backstage-plugins/issues/155) - -# @janus-idp/backstage-plugin-quay [1.1.0](https://github.com/janus-idp/backstage-plugins/compare/@janus-idp/backstage-plugin-quay@1.0.0...@janus-idp/backstage-plugin-quay@1.1.0) (2023-02-16) - -### Features - -- **quay:** Add expiration and style hash ([8f48279](https://github.com/janus-idp/backstage-plugins/commit/8f48279e80dba50a2699af5af64dec8e5f82a784)) - -# @janus-idp/backstage-plugin-quay 1.0.0 (2023-02-07) - -### Features - -- Remove backend plugins and use proxy instead ([e57d31f](https://github.com/janus-idp/backstage-plugins/commit/e57d31fd3a7f7cbb62b365b0be04bcbc864acd19)) diff --git a/plugins/quay/CONTRIBUTING.md b/plugins/quay/CONTRIBUTING.md deleted file mode 100644 index fb15f1cd4d..0000000000 --- a/plugins/quay/CONTRIBUTING.md +++ /dev/null @@ -1,13 +0,0 @@ -# Setting up the development environment for Quay plugin - -In [Backstage plugin terminology](https://backstage.io/docs/local-dev/cli-build-system#package-roles), the Quay plugin is a front-end plugin. However, it requires a backend proxy to be available at all times. Therefore, you need to run a backend instance in the development environment as well. - -You can run the following commands concurrently from the root repository to start a live development session: - -```console -yarn start-backend -``` - -```console -yarn workspace @janus-idp/backstage-plugin-quay run start -``` diff --git a/plugins/quay/README.md b/plugins/quay/README.md index ae89f52f2b..55adff97ee 100644 --- a/plugins/quay/README.md +++ b/plugins/quay/README.md @@ -1,102 +1,3 @@ -# Quay plugin for Backstage +# Deprecated -The Quay plugin displays the information about your container images within the Quay registry in your Backstage application. - -## For administrators - -### Installation - -1. Install the Quay plugin using the following command: - - ```console - yarn workspace app add @janus-idp/backstage-plugin-quay - ``` - -### Configuration - -1. Set the proxy to the desired Quay server in the `app-config.yaml` file as follows: - - ```yaml title="app-config.yaml" - proxy: - endpoints: - '/quay/api': - target: 'https://quay.io' - credentials: require - headers: - X-Requested-With: 'XMLHttpRequest' - # Uncomment and use the Authorization header below to access a private Quay - # Repository using a token. Refer to the "Applications and Tokens" section - # at https://docs.quay.io/api/ to find the instructions to generate a token - # Authorization: 'Bearer ' - changeOrigin: true - # Change to "false" in case of using self hosted quay instance with a self-signed certificate - secure: true - - quay: - # The UI url for Quay, used to generate the link to Quay - uiUrl: 'https://quay.io' - ``` - -> [!NOTE] -> The value inside each route is either a simple URL string, or an object on the format accepted by [http-proxy-middleware](https://www.npmjs.com/package/http-proxy-middleware). Additionally, it has an optional `credentials` key which can have the following values: -> -> - `require`: Callers must provide Backstage user or service credentials with each request. The credentials are not forwarded to the proxy target. This is the **default**. -> - `forward`: Callers must provide Backstage user or service credentials with each request, and those credentials are forwarded to the proxy target. -> - `dangerously-allow-unauthenticated`: No Backstage credentials are required to access this proxy target. The target can still apply its own credentials checks, but the proxy will not help block non-Backstage-blessed callers. If you also add allowedHeaders: ['Authorization'] to an endpoint configuration, then the Backstage token (if provided) WILL be forwarded. -> -> Note that if you have `backend.auth.dangerouslyDisableDefaultAuthPolicy` set to true, the credentials value does not apply; the proxy will behave as if all endpoints were set to dangerously-allow-unauthenticated. - -2. Enable an additional tab on the entity view page in `packages/app/src/components/catalog/EntityPage.tsx`: - - ```tsx title="packages/app/src/components/catalog/EntityPage.tsx" - /* highlight-add-next-line */ - import { isQuayAvailable, QuayPage } from '@janus-idp/backstage-plugin-quay'; - - const serviceEntityPage = ( - - {/* ... */} - {/* highlight-add-next-line */} - - - - - ); - ``` - -3. Annotate your entity with the following annotations: - - ```yaml title="catalog-info.yaml" - metadata: - annotations: - 'quay.io/repository-slug': `/', - ``` - -## For users - -### Using the Quay plugin in Backstage - -Quay is a front-end plugin that enables you to view the information about the container images. - -#### Prerequisites - -- Your Backstage application is installed and running. -- You have installed the Quay plugin. For installation process, see [Installation](#installation). - -#### Procedure - -1. Open your Backstage application and select a component from the **Catalog** page. -1. Go to the **Image Registry** tab. - - The **Image Registry** tab in the Backstage UI contains a list of container images and related information, such as **TAG**, **LAST MODIFIED**, **SECURITY SCAN**, **SIZE**, **EXPIRES**, and **MANIFEST**. - - ![quay-tab](./images/quay-plugin-backstage1.png) - -1. If a container image does not pass the security scan, select the security scan value of the image to check the vulnerabilities. - - ![quay-tab](./images/quay-plugin-backstage2.png) - - The vulnerabilities page displays the associated advisory with a link, severity, package name, and current and fixed versions. - - ![quay-tab-vulnerabilities](./images/quay-plugin-backstage3.png) - - The advisory link redirects to the Red Hat Security Advisory page that contains detailed information about the advisory, including the solution. +This package has been moved to the [backstage-community/plugins](https://github.com/backstage/community-plugins) repository. Migrate to using `@backstage-community/plugin-quay` instead. diff --git a/plugins/quay/app-config.janus-idp.yaml b/plugins/quay/app-config.janus-idp.yaml deleted file mode 100644 index dd8495870d..0000000000 --- a/plugins/quay/app-config.janus-idp.yaml +++ /dev/null @@ -1,12 +0,0 @@ -dynamicPlugins: - frontend: - janus-idp.backstage-plugin-quay: - mountPoints: - - mountPoint: entity.page.image-registry/cards - importName: QuayPage - config: - layout: - gridColumn: 1 / -1 - if: - anyOf: - - isQuayAvailable diff --git a/plugins/quay/catalog-info.yaml b/plugins/quay/catalog-info.yaml deleted file mode 100644 index cb2f664703..0000000000 --- a/plugins/quay/catalog-info.yaml +++ /dev/null @@ -1,55 +0,0 @@ -# https://backstage.io/docs/features/software-catalog/descriptor-format#kind-component -apiVersion: backstage.io/v1alpha1 -kind: Component -metadata: - name: janus-idp-quay - title: Quay plugin - description: Quay plugin for Backstage - annotations: - backstage.io/source-location: url:https://github.com/janus-idp/backstage-plugins/tree/main/plugins/quay - backstage.io/view-url: https://github.com/janus-idp/backstage-plugins/blob/main/plugins/quay/catalog-info.yaml - backstage.io/edit-url: https://github.com/janus-idp/backstage-plugins/edit/main/plugins/quay/catalog-info.yaml - github.com/project-slug: janus-idp/backstage-plugins - github.com/team-slug: janus-idp/rhtap - sonarqube.org/project-key: janus-idp_backstage-plugins - tags: - - quay - links: - - url: https://github.com/janus-idp/backstage-plugins/tree/main/plugins/quay - title: GitHub Source - icon: source - type: source -spec: - type: backstage-plugin - lifecycle: production - owner: rhtap-team - system: rhdh - subcomponentOf: janus-idp-backstage-plugins ---- -# https://backstage.io/docs/features/software-catalog/descriptor-format#kind-component -apiVersion: backstage.io/v1alpha1 -kind: Component -metadata: - name: janus-idp-quay-frontend - title: '@janus-idp/backstage-plugin-quay' - description: Quay plugin for Backstage - annotations: - backstage.io/source-location: url:https://github.com/janus-idp/backstage-plugins/tree/main/plugins/quay - backstage.io/view-url: https://github.com/janus-idp/backstage-plugins/blob/main/plugins/quay/catalog-info.yaml - backstage.io/edit-url: https://github.com/janus-idp/backstage-plugins/edit/main/plugins/quay/catalog-info.yaml - github.com/project-slug: janus-idp/backstage-plugins - github.com/team-slug: janus-idp/rhtap - sonarqube.org/project-key: janus-idp_backstage-plugins - tags: - - quay - links: - - url: https://github.com/janus-idp/backstage-plugins/tree/main/plugins/quay - title: GitHub Source - icon: source - type: source -spec: - type: backstage-frontend-plugin - lifecycle: production - owner: rhtap-team - system: rhdh - subcomponentOf: janus-idp-quay diff --git a/plugins/quay/config.d.ts b/plugins/quay/config.d.ts deleted file mode 100644 index dc86e8299f..0000000000 --- a/plugins/quay/config.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -export interface Config { - /** Configurations for the Quay plugin */ - quay?: { - /** - * The proxy path for the Quay instance. - * @visibility frontend - */ - proxyPath?: string; - /** - * The UI url of the Quay instance. - * @visibility frontend - */ - uiUrl?: string; - }; -} diff --git a/plugins/quay/dev/__data__/labels.ts b/plugins/quay/dev/__data__/labels.ts deleted file mode 100644 index db1ffacff8..0000000000 --- a/plugins/quay/dev/__data__/labels.ts +++ /dev/null @@ -1,39 +0,0 @@ -export const labels = { - labels: [ - { - id: '8b141923-8292-4e56-8fd6-4558f8d21826', - key: 'architecture', - value: 'aarch64', - source_type: 'manifest', - media_type: 'text/plain', - }, - { - id: '3f1d9050-7316-4c6c-b35f-9263e8c9c450', - key: 'build-date', - value: '2023-05-18T06:26:22', - source_type: 'manifest', - media_type: 'text/plain', - }, - { - id: '1b48fb66-0360-460c-90a6-c33de01230fc', - key: 'com.redhat.component', - value: 'nodejs-18-minimal-container', - source_type: 'manifest', - media_type: 'text/plain', - }, - { - id: '09e1d988-3b66-49d5-ae1c-558c6365472c', - key: 'com.redhat.deployments-dir', - value: '/opt/app-root/src', - source_type: 'manifest', - media_type: 'text/plain', - }, - { - id: 'c2ee7634-4c50-4a99-89c1-d277d51316c6', - key: 'com.redhat.dev-mode', - value: 'DEV_MODE:false', - source_type: 'manifest', - media_type: 'text/plain', - }, - ], -}; diff --git a/plugins/quay/dev/__data__/manifest_digest.ts b/plugins/quay/dev/__data__/manifest_digest.ts deleted file mode 100644 index cf28533115..0000000000 --- a/plugins/quay/dev/__data__/manifest_digest.ts +++ /dev/null @@ -1,806 +0,0 @@ -import { ManifestByDigestResponse } from '../../src/types'; - -export const manifestDigest: ManifestByDigestResponse = { - digest: - 'sha256:69c96c750aa532d92d9cb56cad59159b7cc26b10e39ff4a895c28345d2cd775c', - is_manifest_list: false, - manifest_data: - '{"schemaVersion":2,"mediaType":"application/vnd.docker.distribution.manifest.v2+json","config":{"mediaType":"application/vnd.docker.container.image.v1+json","size":17365,"digest":"sha256:310424866fd16a57c0482e074e3427c2b43e9609c7c374f93e9892d08fe0eb97"},"layers":[{"mediaType":"application/vnd.docker.image.rootfs.diff.tar.gzip","size":35229925,"digest":"sha256:27844678c499cd28d128544604c99a91d5d692bc905f931297048c44c1764c63"},{"mediaType":"application/vnd.docker.image.rootfs.diff.tar.gzip","size":35814161,"digest":"sha256:1a251b642c47a50df3cba23758292a935dbfaaedd06c46d6ec3c7b183366e4e1"},{"mediaType":"application/vnd.docker.image.rootfs.diff.tar.gzip","size":7890431,"digest":"sha256:764fa784abb1b2acbbf021b07b22456b6325d795aa44221d9f424ffabdd053a3"},{"mediaType":"application/vnd.docker.image.rootfs.diff.tar.gzip","size":2430760,"digest":"sha256:0e0603c707af046d0e20d0a759ace11ade1810dd01aa01ca093e5641668c1df2"},{"mediaType":"application/vnd.docker.image.rootfs.diff.tar.gzip","size":375979,"digest":"sha256:e40868e9969dd12619439517eb1e8b3ebc12f20612e935623cc9b333c2fc070a"},{"mediaType":"application/vnd.docker.image.rootfs.diff.tar.gzip","size":1093,"digest":"sha256:524c37f6b31165295c535f14f2f751b0fb81be16a564d6979c7bc9874a46906d"},{"mediaType":"application/vnd.docker.image.rootfs.diff.tar.gzip","size":82665917,"digest":"sha256:7a656e9add13433636b14ebc9c091047a18722f348bd69a340d41dff5378199a"},{"mediaType":"application/vnd.docker.image.rootfs.diff.tar.gzip","size":9917349,"digest":"sha256:3b60bbc3a23cb66e457b35ac37b9736a9f180863721a0bb34f7674c9c546e6d0"},{"mediaType":"application/vnd.docker.image.rootfs.diff.tar.gzip","size":9920898,"digest":"sha256:33387facf2f525cea440b76a09d3fb59c023d11851e05fa708e5755427a2a4db"},{"mediaType":"application/vnd.docker.image.rootfs.diff.tar.gzip","size":1821,"digest":"sha256:5cbdfdcc10a05b236a41b432bda61d94376d08b07da82c47ee5b4a84af16a6b1"},{"mediaType":"application/vnd.docker.image.rootfs.diff.tar.gzip","size":91614274,"digest":"sha256:cde684b256843997b1ee8cf3c0a4f38f94325f8ce2a069f22b53c676ec0ebf5b"}]}', - config_media_type: 'application/vnd.docker.container.image.v1+json', - layers_compressed_size: 275862608, - layers: [ - { - index: 0, - compressed_size: 32, - is_remote: false, - urls: null, - command: [ - '/bin/sh -c #(nop) ADD file:4be34f167a8d152eb1c269f3acbcc7ef9acca742971e5487e418a12b7dc2ac99 in / ', - ], - comment: null, - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Wed, 03 May 2023 09:08:14 -0000', - }, - { - index: 1, - compressed_size: 32, - is_remote: false, - urls: null, - command: ['/bin/sh -c mv -f /etc/yum.repos.d/ubi.repo /tmp || :'], - comment: null, - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Wed, 03 May 2023 09:08:15 -0000', - }, - { - index: 2, - compressed_size: 32, - is_remote: false, - urls: null, - command: [ - '/bin/sh -c #(nop) ADD file:214c1de395c24e4a86ef9a706069ef30a9e804c63f851c37c35655e16fea3ced in /tmp/tls-ca-bundle.pem ', - ], - comment: null, - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Wed, 03 May 2023 09:08:15 -0000', - }, - { - index: 3, - compressed_size: 32, - is_remote: false, - urls: null, - command: [ - '/bin/sh -c #(nop) ADD multi:b9f1efa6d4eb264a2ccbb760b4589e8b42e4ef0554a87cf7fab6ba883b0df687 in /etc/yum.repos.d/ ', - ], - comment: null, - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Wed, 03 May 2023 09:08:15 -0000', - }, - { - index: 4, - compressed_size: 32, - is_remote: false, - urls: null, - command: ['/bin/sh -c #(nop) LABEL maintainer="Red Hat, Inc."'], - comment: null, - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Wed, 03 May 2023 09:08:15 -0000', - }, - { - index: 5, - compressed_size: 32, - is_remote: false, - urls: null, - command: [ - '/bin/sh -c #(nop) LABEL com.redhat.component="ubi9-minimal-container" name="ubi9-minimal" version="9.2"', - ], - comment: null, - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Wed, 03 May 2023 09:08:15 -0000', - }, - { - index: 6, - compressed_size: 32, - is_remote: false, - urls: null, - command: [ - '/bin/sh -c #(nop) LABEL com.redhat.license_terms="https://www.redhat.com/en/about/red-hat-end-user-license-agreements#UBI"', - ], - comment: null, - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Wed, 03 May 2023 09:08:15 -0000', - }, - { - index: 7, - compressed_size: 32, - is_remote: false, - urls: null, - command: [ - '/bin/sh -c #(nop) LABEL summary="Provides the latest release of the minimal Red Hat Universal Base Image 9."', - ], - comment: null, - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Wed, 03 May 2023 09:08:15 -0000', - }, - { - index: 8, - compressed_size: 32, - is_remote: false, - urls: null, - command: [ - '/bin/sh -c #(nop) LABEL description="The Universal Base Image Minimal is a stripped down image that uses microdnf as a package manager. This base image is freely redistributable, but Red Hat only supports Red Hat technologies through subscriptions for Red Hat products. This image is maintained by Red Hat and updated regularly."', - ], - comment: null, - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Wed, 03 May 2023 09:08:15 -0000', - }, - { - index: 9, - compressed_size: 32, - is_remote: false, - urls: null, - command: [ - '/bin/sh -c #(nop) LABEL io.k8s.display-name="Red Hat Universal Base Image 9 Minimal"', - ], - comment: null, - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Wed, 03 May 2023 09:08:15 -0000', - }, - { - index: 10, - compressed_size: 32, - is_remote: false, - urls: null, - command: ['/bin/sh -c #(nop) LABEL io.openshift.expose-services=""'], - comment: null, - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Wed, 03 May 2023 09:08:15 -0000', - }, - { - index: 11, - compressed_size: 32, - is_remote: false, - urls: null, - command: ['/bin/sh -c #(nop) LABEL io.openshift.tags="minimal rhel9"'], - comment: null, - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Wed, 03 May 2023 09:08:15 -0000', - }, - { - index: 12, - compressed_size: 32, - is_remote: false, - urls: null, - command: ['/bin/sh -c #(nop) ENV container oci'], - comment: null, - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Wed, 03 May 2023 09:08:15 -0000', - }, - { - index: 13, - compressed_size: 32, - is_remote: false, - urls: null, - command: [ - '/bin/sh -c #(nop) ENV PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', - ], - comment: null, - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Wed, 03 May 2023 09:08:15 -0000', - }, - { - index: 14, - compressed_size: 32, - is_remote: false, - urls: null, - command: ['/bin/sh -c #(nop) CMD ["/bin/bash"]'], - comment: null, - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Wed, 03 May 2023 09:08:15 -0000', - }, - { - index: 15, - compressed_size: 32, - is_remote: false, - urls: null, - command: ['/bin/sh -c rm -rf /var/log/*'], - comment: null, - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Wed, 03 May 2023 09:08:16 -0000', - }, - { - index: 16, - compressed_size: 32, - is_remote: false, - urls: null, - command: ['/bin/sh -c #(nop) LABEL release=484'], - comment: null, - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Wed, 03 May 2023 09:08:16 -0000', - }, - { - index: 17, - compressed_size: 32, - is_remote: false, - urls: null, - command: [ - '/bin/sh -c #(nop) ADD file:961390d2717d39a95a230aede6672e618a2f4a42d6008ca0eb6e020beaef23a9 in /root/buildinfo/content_manifests/ubi9-minimal-container-9.2-484.json ', - ], - comment: null, - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Wed, 03 May 2023 09:08:17 -0000', - }, - { - index: 18, - compressed_size: 32, - is_remote: false, - urls: null, - command: [ - '/bin/sh -c #(nop) ADD file:31cc2312708cc9d767aec9d39192f74d4cd3eacd247b92131f2465f3cc568578 in /root/buildinfo/Dockerfile-ubi9-minimal-9.2-484 ', - ], - comment: null, - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Wed, 03 May 2023 09:08:17 -0000', - }, - { - index: 19, - compressed_size: 32, - is_remote: false, - urls: null, - command: [ - '/bin/sh -c #(nop) LABEL "distribution-scope"="public" "vendor"="Red Hat, Inc." "build-date"="2023-05-03T08:55:50" "architecture"="aarch64" "vcs-type"="git" "vcs-ref"="7ef59505f75bf0c11c8d3addefebee5ceaaf4c41" "io.k8s.description"="The Universal Base Image Minimal is a stripped down image that uses microdnf as a package manager. This base image is freely redistributable, but Red Hat only supports Red Hat technologies through subscriptions for Red Hat products. This image is maintained by Red Hat and updated regularly." "url"="https://access.redhat.com/containers/#/registry.access.redhat.com/ubi9-minimal/images/9.2-484"', - ], - comment: null, - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Wed, 03 May 2023 09:08:17 -0000', - }, - { - index: 20, - compressed_size: 32, - is_remote: false, - urls: null, - command: [ - "/bin/sh -c rm -f '/etc/yum.repos.d/repo-5b631.repo' '/etc/yum.repos.d/repo-f1088.repo'", - ], - comment: null, - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Wed, 03 May 2023 09:08:18 -0000', - }, - { - index: 21, - compressed_size: 32, - is_remote: false, - urls: null, - command: ['/bin/sh -c rm -f /tmp/tls-ca-bundle.pem'], - comment: null, - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Wed, 03 May 2023 09:08:19 -0000', - }, - { - index: 22, - compressed_size: 35229925, - is_remote: false, - urls: null, - command: [ - '/bin/sh -c mv -fZ /tmp/ubi.repo /etc/yum.repos.d/ubi.repo || :', - ], - comment: null, - author: null, - blob_digest: - 'sha256:27844678c499cd28d128544604c99a91d5d692bc905f931297048c44c1764c63', - created_datetime: 'Wed, 03 May 2023 09:08:20 -0000', - }, - { - index: 23, - compressed_size: 32, - is_remote: false, - urls: null, - command: ['/bin/sh -c mv -f /etc/yum.repos.d/ubi.repo /tmp || :'], - comment: null, - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Thu, 18 May 2023 06:27:22 -0000', - }, - { - index: 24, - compressed_size: 32, - is_remote: false, - urls: null, - command: [ - '/bin/sh -c #(nop) ADD file:214c1de395c24e4a86ef9a706069ef30a9e804c63f851c37c35655e16fea3ced in /tmp/tls-ca-bundle.pem ', - ], - comment: null, - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Thu, 18 May 2023 06:27:22 -0000', - }, - { - index: 25, - compressed_size: 32, - is_remote: false, - urls: null, - command: [ - '/bin/sh -c #(nop) ADD multi:965475b2b6a17f9fc5e6f478c21e5819dc47165ea953c7d1d690fbf83b7b5033 in /etc/yum.repos.d/ ', - ], - comment: null, - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Thu, 18 May 2023 06:27:22 -0000', - }, - { - index: 26, - compressed_size: 32, - is_remote: false, - urls: null, - command: ['/bin/sh -c #(nop) EXPOSE 8080'], - comment: null, - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Thu, 18 May 2023 06:27:22 -0000', - }, - { - index: 27, - compressed_size: 32, - is_remote: false, - urls: null, - command: [ - '/bin/sh -c #(nop) ENV APP_ROOT=/opt/app-root HOME=/opt/app-root/src NPM_RUN=start PLATFORM="el9" NODEJS_VERSION=18 NPM_RUN=start NAME=nodejs', - ], - comment: null, - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Thu, 18 May 2023 06:27:22 -0000', - }, - { - index: 28, - compressed_size: 32, - is_remote: false, - urls: null, - command: [ - '/bin/sh -c #(nop) ENV SUMMARY="Minimal image for running Node.js $NODEJS_VERSION applications" DESCRIPTION="Node.js $NODEJS_VERSION available as container is a base platform for running various Node.js $NODEJS_VERSION applications and frameworks. Node.js is a platform built on Chrome\'s JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices." NPM_CONFIG_PREFIX=$HOME/.npm-global PATH=$HOME/node_modules/.bin/:$HOME/.npm-global/bin/:$PATH', - ], - comment: null, - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Thu, 18 May 2023 06:27:22 -0000', - }, - { - index: 29, - compressed_size: 32, - is_remote: false, - urls: null, - command: [ - '/bin/sh -c #(nop) LABEL summary="$SUMMARY" description="$DESCRIPTION" io.k8s.description="$DESCRIPTION" io.k8s.display-name="Node.js $NODEJS_VERSION Micro" io.openshift.expose-services="8080:http" io.openshift.tags="builder,$NAME,${NAME}${NODEJS_VERSION}" io.openshift.s2i.scripts-url="image:///usr/libexec/s2i" io.s2i.scripts-url="image:///usr/libexec/s2i" com.redhat.dev-mode="DEV_MODE:false" com.redhat.deployments-dir="${APP_ROOT}/src" com.redhat.dev-mode.port="DEBUG_PORT:5858" com.redhat.component="${NAME}-${NODEJS_VERSION}-minimal-container" name="ubi9/$NAME-$NODEJS_VERSION-minimal" version="1" com.redhat.license_terms="https://www.redhat.com/en/about/red-hat-end-user-license-agreements#UBI" maintainer="SoftwareCollections.org " help="For more information visit https://github.com/sclorg/s2i-nodejs-container"', - ], - comment: null, - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Thu, 18 May 2023 06:27:22 -0000', - }, - { - index: 30, - compressed_size: 32, - is_remote: false, - urls: null, - command: [ - '/bin/sh -c INSTALL_PKGS="nodejs nodejs-nodemon nodejs-full-i18n npm findutils tar" && microdnf -y module disable nodejs && microdnf -y module enable nodejs:$NODEJS_VERSION && microdnf -y --nodocs --setopt=install_weak_deps=0 install $INSTALL_PKGS && node -v | grep -qe "^v$NODEJS_VERSION\\." && echo "Found VERSION $NODEJS_VERSION" && microdnf clean all && rm -rf /mnt/rootfs/var/cache/* /mnt/rootfs/var/log/dnf* /mnt/rootfs/var/log/yum.*', - ], - comment: null, - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Thu, 18 May 2023 06:27:34 -0000', - }, - { - index: 31, - compressed_size: 32, - is_remote: false, - urls: null, - command: [ - '/bin/sh -c #(nop) COPY dir:b5a1f1317e0040e7a730c0b1d8cf8a9fa419afa1662d666632dac699455512f1 in /usr/libexec/s2i ', - ], - comment: null, - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Thu, 18 May 2023 06:27:35 -0000', - }, - { - index: 32, - compressed_size: 32, - is_remote: false, - urls: null, - command: [ - '/bin/sh -c #(nop) COPY dir:fe4e9034259501521ced258ae36b98bc6cc475e0e34364c8a17e53447c145be1 in / ', - ], - comment: null, - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Thu, 18 May 2023 06:27:35 -0000', - }, - { - index: 33, - compressed_size: 32, - is_remote: false, - urls: null, - command: [ - '/bin/sh -c mkdir -p "$HOME" && chown -R 1001:0 "$APP_ROOT" && chmod -R ug+rwx "$APP_ROOT"', - ], - comment: null, - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Thu, 18 May 2023 06:27:36 -0000', - }, - { - index: 34, - compressed_size: 32, - is_remote: false, - urls: null, - command: ['/bin/sh -c #(nop) WORKDIR "$HOME"'], - comment: null, - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Thu, 18 May 2023 06:27:36 -0000', - }, - { - index: 35, - compressed_size: 32, - is_remote: false, - urls: null, - command: ['/bin/sh -c #(nop) USER 1001'], - comment: null, - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Thu, 18 May 2023 06:27:36 -0000', - }, - { - index: 36, - compressed_size: 32, - is_remote: false, - urls: null, - command: ['/bin/sh -c #(nop) LABEL release=51'], - comment: null, - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Thu, 18 May 2023 06:27:36 -0000', - }, - { - index: 37, - compressed_size: 32, - is_remote: false, - urls: null, - command: [ - '/bin/sh -c #(nop) ADD file:9befe0967d3835f159e544c07f8b96df103c2dcad2d4155d8593b0aa26179415 in /help.1 ', - ], - comment: null, - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Thu, 18 May 2023 06:27:36 -0000', - }, - { - index: 38, - compressed_size: 32, - is_remote: false, - urls: null, - command: [ - '/bin/sh -c #(nop) ADD file:d268896e452ea694b5bc53c82e4b005f8810f73138a0ab84fcb8b4fe251b875b in /root/buildinfo/content_manifests/nodejs-18-minimal-container-1-51.json ', - ], - comment: null, - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Thu, 18 May 2023 06:27:37 -0000', - }, - { - index: 39, - compressed_size: 32, - is_remote: false, - urls: null, - command: [ - '/bin/sh -c #(nop) ADD file:988016ad8c81a24f569e9d6a9e008d711ad0da77deb3eaab60d0a131b636529a in /root/buildinfo/Dockerfile-ubi9-nodejs-18-minimal-1-51 ', - ], - comment: null, - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Thu, 18 May 2023 06:27:37 -0000', - }, - { - index: 40, - compressed_size: 32, - is_remote: false, - urls: null, - command: [ - '/bin/sh -c #(nop) LABEL "distribution-scope"="public" "vendor"="Red Hat, Inc." "build-date"="2023-05-18T06:26:22" "architecture"="aarch64" "vcs-type"="git" "vcs-ref"="7eb8c3f7b6a1d2c86919c1597e070eef6d16947e" "url"="https://access.redhat.com/containers/#/registry.access.redhat.com/ubi9/nodejs-18-minimal/images/1-51"', - ], - comment: null, - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Thu, 18 May 2023 06:27:37 -0000', - }, - { - index: 41, - compressed_size: 32, - is_remote: false, - urls: null, - command: ['/bin/sh -c #(nop) USER root'], - comment: null, - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Thu, 18 May 2023 06:27:37 -0000', - }, - { - index: 42, - compressed_size: 32, - is_remote: false, - urls: null, - command: [ - "/bin/sh -c rm -f '/etc/yum.repos.d/odcs-2027322-e750b.repo' '/etc/yum.repos.d/repo-5b631.repo' '/etc/yum.repos.d/repo-f1088.repo'", - ], - comment: null, - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Thu, 18 May 2023 06:27:39 -0000', - }, - { - index: 43, - compressed_size: 32, - is_remote: false, - urls: null, - command: ['/bin/sh -c rm -f /tmp/tls-ca-bundle.pem'], - comment: null, - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Thu, 18 May 2023 06:27:40 -0000', - }, - { - index: 44, - compressed_size: 32, - is_remote: false, - urls: null, - command: ['/bin/sh -c #(nop) USER 1001'], - comment: null, - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Thu, 18 May 2023 06:27:40 -0000', - }, - { - index: 45, - compressed_size: 32, - is_remote: false, - urls: null, - command: ['/bin/sh -c #(nop) USER root'], - comment: null, - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Thu, 18 May 2023 06:27:40 -0000', - }, - { - index: 46, - compressed_size: 32, - is_remote: false, - urls: null, - command: [ - '/bin/sh -c mv -fZ /tmp/ubi.repo /etc/yum.repos.d/ubi.repo || :', - ], - comment: null, - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Thu, 18 May 2023 06:27:42 -0000', - }, - { - index: 47, - compressed_size: 35814161, - is_remote: false, - urls: null, - command: ['/bin/sh -c #(nop) USER 1001'], - comment: - 'FROM registry.stage.redhat.io/ubi9/ubi-minimal@sha256:b00f7556d64a698aad6cb63bb75b2692f1538926c6f619d6123cbc20a74239ec', - author: null, - blob_digest: - 'sha256:1a251b642c47a50df3cba23758292a935dbfaaedd06c46d6ec3c7b183366e4e1', - created_datetime: 'Thu, 18 May 2023 06:27:42 -0000', - }, - { - index: 48, - compressed_size: 32, - is_remote: false, - urls: null, - command: ['USER 0'], - comment: 'buildkit.dockerfile.v0', - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Mon, 12 Jun 2023 13:41:27 -0000', - }, - { - index: 49, - compressed_size: 7890431, - is_remote: false, - urls: null, - command: [ - 'RUN /bin/sh -c curl --silent --location https://dl.yarnpkg.com/rpm/yarn.repo | tee /etc/yum.repos.d/yarn.repo && microdnf install -y yarn # buildkit', - ], - comment: 'buildkit.dockerfile.v0', - author: null, - blob_digest: - 'sha256:764fa784abb1b2acbbf021b07b22456b6325d795aa44221d9f424ffabdd053a3', - created_datetime: 'Mon, 12 Jun 2023 13:41:27 -0000', - }, - { - index: 50, - compressed_size: 2430760, - is_remote: false, - urls: null, - command: [ - 'RUN /bin/sh -c microdnf install -y gzip && microdnf clean all # buildkit', - ], - comment: 'buildkit.dockerfile.v0', - author: null, - blob_digest: - 'sha256:0e0603c707af046d0e20d0a759ace11ade1810dd01aa01ca093e5641668c1df2', - created_datetime: 'Mon, 12 Jun 2023 13:41:31 -0000', - }, - { - index: 51, - compressed_size: 32, - is_remote: false, - urls: null, - command: ['USER 1001'], - comment: 'buildkit.dockerfile.v0', - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Mon, 12 Jun 2023 13:41:31 -0000', - }, - { - index: 52, - compressed_size: 375979, - is_remote: false, - urls: null, - command: [ - 'COPY /opt/app-root/src/yarn.lock /opt/app-root/src/package.json /opt/app-root/src/packages/backend/dist/skeleton.tar.gz ./ # buildkit', - ], - comment: 'buildkit.dockerfile.v0', - author: null, - blob_digest: - 'sha256:e40868e9969dd12619439517eb1e8b3ebc12f20612e935623cc9b333c2fc070a', - created_datetime: 'Mon, 12 Jun 2023 14:13:05 -0000', - }, - { - index: 53, - compressed_size: 1093, - is_remote: false, - urls: null, - command: [ - 'RUN /bin/sh -c tar xzf skeleton.tar.gz && rm skeleton.tar.gz # buildkit', - ], - comment: 'buildkit.dockerfile.v0', - author: null, - blob_digest: - 'sha256:524c37f6b31165295c535f14f2f751b0fb81be16a564d6979c7bc9874a46906d', - created_datetime: 'Mon, 12 Jun 2023 14:13:05 -0000', - }, - { - index: 54, - compressed_size: 82665917, - is_remote: false, - urls: null, - command: [ - 'RUN /bin/sh -c yarn install --frozen-lockfile --production --network-timeout 600000 && yarn cache clean # buildkit', - ], - comment: 'buildkit.dockerfile.v0', - author: null, - blob_digest: - 'sha256:7a656e9add13433636b14ebc9c091047a18722f348bd69a340d41dff5378199a', - created_datetime: 'Mon, 12 Jun 2023 14:23:02 -0000', - }, - { - index: 55, - compressed_size: 9917349, - is_remote: false, - urls: null, - command: [ - 'COPY /opt/app-root/src/packages/backend/dist/bundle.tar.gz . # buildkit', - ], - comment: 'buildkit.dockerfile.v0', - author: null, - blob_digest: - 'sha256:3b60bbc3a23cb66e457b35ac37b9736a9f180863721a0bb34f7674c9c546e6d0', - created_datetime: 'Mon, 12 Jun 2023 14:23:02 -0000', - }, - { - index: 56, - compressed_size: 9920898, - is_remote: false, - urls: null, - command: [ - 'RUN /bin/sh -c tar xzf bundle.tar.gz && rm bundle.tar.gz # buildkit', - ], - comment: 'buildkit.dockerfile.v0', - author: null, - blob_digest: - 'sha256:33387facf2f525cea440b76a09d3fb59c023d11851e05fa708e5755427a2a4db', - created_datetime: 'Mon, 12 Jun 2023 14:23:04 -0000', - }, - { - index: 57, - compressed_size: 1821, - is_remote: false, - urls: null, - command: ['COPY ./app-config.yaml . # buildkit'], - comment: 'buildkit.dockerfile.v0', - author: null, - blob_digest: - 'sha256:5cbdfdcc10a05b236a41b432bda61d94376d08b07da82c47ee5b4a84af16a6b1', - created_datetime: 'Mon, 12 Jun 2023 14:23:04 -0000', - }, - { - index: 58, - compressed_size: 91614274, - is_remote: false, - urls: null, - command: ['RUN /bin/sh -c fix-permissions ./ # buildkit'], - comment: 'buildkit.dockerfile.v0', - author: null, - blob_digest: - 'sha256:cde684b256843997b1ee8cf3c0a4f38f94325f8ce2a069f22b53c676ec0ebf5b', - created_datetime: 'Mon, 12 Jun 2023 14:23:43 -0000', - }, - { - index: 59, - compressed_size: 32, - is_remote: false, - urls: null, - command: ['CMD ["node" "packages/backend" "--config" "app-config.yaml"]'], - comment: 'buildkit.dockerfile.v0', - author: null, - blob_digest: - 'sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4', - created_datetime: 'Mon, 12 Jun 2023 14:23:43 -0000', - }, - ], -}; diff --git a/plugins/quay/dev/__data__/security_vulnerabilities.ts b/plugins/quay/dev/__data__/security_vulnerabilities.ts deleted file mode 100644 index 4503b8a73a..0000000000 --- a/plugins/quay/dev/__data__/security_vulnerabilities.ts +++ /dev/null @@ -1,375 +0,0 @@ -import { - Layer, - SecurityDetailsResponse, - VulnerabilitySeverity, -} from '../../src/types'; - -export const securityDetails: SecurityDetailsResponse = { - status: 'scanned', - data: { - Layer: { - Name: 'sha256:69c96c750aa532d92d9cb56cad59159b7cc26b10e39ff4a895c28345d2cd775c', - ParentName: '', - NamespaceName: '', - IndexedByVersion: 4, - Features: [ - { - Name: 'libmodulemd', - VersionFormat: '', - NamespaceName: '', - AddedBy: - 'sha256:27844678c499cd28d128544604c99a91d5d692bc905f931297048c44c1764c63', - Version: '2.13.0-2.el9', - BaseScores: [], - CVEIds: [], - Vulnerabilities: [], - }, - { - Name: 'libunistring', - VersionFormat: '', - NamespaceName: '', - AddedBy: - 'sha256:27844678c499cd28d128544604c99a91d5d692bc905f931297048c44c1764c63', - Version: '0.9.10-15.el9', - BaseScores: [], - CVEIds: [], - Vulnerabilities: [], - }, - { - Name: 'gdbm-libs', - VersionFormat: '', - NamespaceName: '', - AddedBy: - 'sha256:27844678c499cd28d128544604c99a91d5d692bc905f931297048c44c1764c63', - Version: '1:1.19-4.el9', - BaseScores: [], - CVEIds: [], - Vulnerabilities: [], - }, - { - Name: 'librepo', - VersionFormat: '', - NamespaceName: '', - AddedBy: - 'sha256:27844678c499cd28d128544604c99a91d5d692bc905f931297048c44c1764c63', - Version: '1.14.5-1.el9', - BaseScores: [], - CVEIds: [], - Vulnerabilities: [], - }, - { - Name: 'rpm', - VersionFormat: '', - NamespaceName: '', - AddedBy: - 'sha256:27844678c499cd28d128544604c99a91d5d692bc905f931297048c44c1764c63', - Version: '4.16.1.3-22.el9', - BaseScores: [6.7], - CVEIds: ['CVE-2021-35937', 'CVE-2021-35938', 'CVE-2021-35939'], - Vulnerabilities: [ - { - Severity: VulnerabilitySeverity.Medium, - NamespaceName: 'RHEL9-rhel-9', - Link: 'https://access.redhat.com/errata/RHSA-2024:0463 https://access.redhat.com/security/cve/CVE-2021-35937 https://access.redhat.com/security/cve/CVE-2021-35938 https://access.redhat.com/security/cve/CVE-2021-35939', - FixedBy: '0:4.16.1.3-27.el9_3', - Description: - 'The RPM Package Manager (RPM) is a command-line driven package management system capable of installing, uninstalling, verifying, querying, and updating software packages.\n\nSecurity Fix(es):\n\n* rpm: TOCTOU race in checks for unsafe symlinks (CVE-2021-35937)\n\n* rpm: races with chown/chmod/capabilities calls during installation (CVE-2021-35938)\n\n* rpm: checks for unsafe symlinks are not performed for intermediary directories (CVE-2021-35939)\n\nFor more details about the security issue(s), including the impact, a CVSS score, acknowledgments, and other related information, refer to the CVE page(s) listed in the References section.', - Name: 'RHSA-2024:0463: rpm security update (Moderate)', - Metadata: { - UpdatedBy: 'RHEL9-rhel-9', - RepoName: 'cpe:/o:redhat:enterprise_linux:9::baseos', - RepoLink: null, - DistroName: 'Red Hat Enterprise Linux Server', - DistroVersion: '9', - NVD: { - CVSSv3: { - Vectors: 'CVSS:3.1/AV:L/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H', - Score: 6.7, - }, - }, - }, - }, - ], - }, - { - Name: 'libnghttp2', - VersionFormat: '', - NamespaceName: '', - AddedBy: - 'sha256:27844678c499cd28d128544604c99a91d5d692bc905f931297048c44c1764c63', - Version: '1.43.0-5.el9', - BaseScores: [7.5, 7.5], - CVEIds: ['CVE-2023-44487', 'CVE-2024-28182'], - Vulnerabilities: [ - { - Severity: VulnerabilitySeverity.Medium, - NamespaceName: 'RHEL9-rhel-9', - Link: 'https://access.redhat.com/errata/RHSA-2024:3501 https://access.redhat.com/security/cve/CVE-2024-28182', - FixedBy: '0:1.43.0-5.el9_4.3', - Description: - 'libnghttp2 is a library implementing the Hypertext Transfer Protocol version 2 (HTTP/2) protocol in C.\n\nSecurity Fix(es):\n\n* nghttp2: CONTINUATION frames DoS (CVE-2024-28182)\n\nFor more details about the security issue(s), including the impact, a CVSS score, acknowledgments, and other related information, refer to the CVE page(s) listed in the References section.', - Name: 'RHSA-2024:3501: nghttp2 security update (Moderate)', - Metadata: { - UpdatedBy: 'RHEL9-rhel-9', - RepoName: 'cpe:/o:redhat:enterprise_linux:9::baseos', - RepoLink: null, - DistroName: 'Red Hat Enterprise Linux Server', - DistroVersion: '9', - NVD: { - CVSSv3: { - Vectors: '', - Score: '', - }, - }, - }, - }, - { - Severity: VulnerabilitySeverity.High, - NamespaceName: 'RHEL9-rhel-9', - Link: 'https://access.redhat.com/errata/RHSA-2023:5838 https://access.redhat.com/security/cve/CVE-2023-44487', - FixedBy: '0:1.43.0-5.el9_2.1', - Description: - 'libnghttp2 is a library implementing the Hypertext Transfer Protocol version 2 (HTTP/2) protocol in C.\n\nSecurity Fix(es):\n\n* HTTP/2: Multiple HTTP/2 enabled web servers are vulnerable to a DDoS attack (Rapid Reset Attack) (CVE-2023-44487)\n\nFor more details about the security issue(s), including the impact, a CVSS score, acknowledgments, and other related information, refer to the CVE page(s) listed in the References section.', - Name: 'RHSA-2023:5838: nghttp2 security update (Important)', - Metadata: { - UpdatedBy: 'RHEL9-rhel-9', - RepoName: 'cpe:/o:redhat:enterprise_linux:9::baseos', - RepoLink: null, - DistroName: 'Red Hat Enterprise Linux Server', - DistroVersion: '9', - NVD: { - CVSSv3: { - Vectors: 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H', - Score: 7.5, - }, - }, - }, - }, - { - Severity: VulnerabilitySeverity.High, - NamespaceName: 'RHEL9-rhel-9', - Link: 'https://access.redhat.com/errata/RHSA-2023:6746 https://access.redhat.com/security/cve/CVE-2023-44487', - FixedBy: '0:1.43.0-5.el9_3.1', - Description: - 'libnghttp2 is a library implementing the Hypertext Transfer Protocol version 2 (HTTP/2) protocol in C.\n\nSecurity Fix(es):\n\n* HTTP/2: Multiple HTTP/2 enabled web servers are vulnerable to a DDoS attack (Rapid Reset Attack) (CVE-2023-44487)\n\nFor more details about the security issue(s), including the impact, a CVSS score, acknowledgments, and other related information, refer to the CVE page(s) listed in the References section.', - Name: 'RHSA-2023:6746: nghttp2 security update (Important)', - Metadata: { - UpdatedBy: 'RHEL9-rhel-9', - RepoName: 'cpe:/o:redhat:enterprise_linux:9::baseos', - RepoLink: null, - DistroName: 'Red Hat Enterprise Linux Server', - DistroVersion: '9', - NVD: { - CVSSv3: { - Vectors: 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H', - Score: 7.5, - }, - }, - }, - }, - ], - }, - { - Name: 'libselinux', - VersionFormat: '', - NamespaceName: '', - AddedBy: - 'sha256:27844678c499cd28d128544604c99a91d5d692bc905f931297048c44c1764c63', - Version: '3.5-1.el9', - BaseScores: [], - CVEIds: [], - Vulnerabilities: [], - }, - { - Name: 'glib2', - VersionFormat: '', - NamespaceName: '', - AddedBy: - 'sha256:27844678c499cd28d128544604c99a91d5d692bc905f931297048c44c1764c63', - Version: '2.68.4-6.el9', - BaseScores: [7.5], - CVEIds: ['CVE-2023-29499', 'CVE-2023-32611', 'CVE-2023-32665'], - Vulnerabilities: [ - { - Severity: VulnerabilitySeverity.Low, - NamespaceName: 'RHEL9-rhel-9', - Link: 'https://access.redhat.com/errata/RHSA-2023:6631 https://access.redhat.com/security/cve/CVE-2023-29499 https://access.redhat.com/security/cve/CVE-2023-32611 https://access.redhat.com/security/cve/CVE-2023-32665', - FixedBy: '0:2.68.4-11.el9', - Description: - 'GLib provides the core application building blocks for libraries and applications written in C. It provides the core object system used in GNOME, the main loop implementation, and a large set of utility functions for strings and common data structures.\n\nSecurity Fix(es):\n\n* glib: GVariant offset table entry size is not checked in is_normal() (CVE-2023-29499)\n\n* glib: g_variant_byteswap() can take a long time with some non-normal inputs (CVE-2023-32611)\n\n* glib: GVariant deserialisation does not match spec for non-normal data (CVE-2023-32665)\n\nFor more details about the security issue(s), including the impact, a CVSS score, acknowledgments, and other related information, refer to the CVE page(s) listed in the References section.\n\nAdditional Changes:\n\nFor detailed information on changes in this release, see the Red Hat Enterprise Linux 9.3 Release Notes linked from the References section.', - Name: 'RHSA-2023:6631: glib2 security and bug fix update (Low)', - Metadata: { - UpdatedBy: 'RHEL9-rhel-9', - RepoName: 'cpe:/o:redhat:enterprise_linux:9::baseos', - RepoLink: null, - DistroName: 'Red Hat Enterprise Linux Server', - DistroVersion: '9', - NVD: { - CVSSv3: { - Vectors: 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H', - Score: 7.5, - }, - }, - }, - }, - ], - }, - { - Name: 'p11-kit-trust', - VersionFormat: '', - NamespaceName: '', - AddedBy: - 'sha256:27844678c499cd28d128544604c99a91d5d692bc905f931297048c44c1764c63', - Version: '0.24.1-2.el9', - BaseScores: [], - CVEIds: [], - Vulnerabilities: [], - }, - { - Name: 'setup', - VersionFormat: '', - NamespaceName: '', - AddedBy: - 'sha256:27844678c499cd28d128544604c99a91d5d692bc905f931297048c44c1764c63', - Version: '2.13.7-9.el9', - BaseScores: [], - CVEIds: [], - Vulnerabilities: [], - }, - { - Name: 'nettle', - VersionFormat: '', - NamespaceName: '', - AddedBy: - 'sha256:27844678c499cd28d128544604c99a91d5d692bc905f931297048c44c1764c63', - Version: '3.8-3.el9_0', - BaseScores: [], - CVEIds: [], - Vulnerabilities: [], - }, - { - Name: 'pcre2', - VersionFormat: '', - NamespaceName: '', - AddedBy: - 'sha256:27844678c499cd28d128544604c99a91d5d692bc905f931297048c44c1764c63', - Version: '10.40-2.el9', - BaseScores: [], - CVEIds: [], - Vulnerabilities: [], - }, - { - Name: 'ubi9/', - VersionFormat: '', - NamespaceName: '', - AddedBy: - 'sha256:1a251b642c47a50df3cba23758292a935dbfaaedd06c46d6ec3c7b183366e4e1', - Version: '1-51', - BaseScores: [], - CVEIds: [], - Vulnerabilities: [], - }, - { - Name: 'fonts-filesystem', - VersionFormat: '', - NamespaceName: '', - AddedBy: - 'sha256:27844678c499cd28d128544604c99a91d5d692bc905f931297048c44c1764c63', - Version: '1:2.0.5-7.el9.1', - BaseScores: [], - CVEIds: [], - Vulnerabilities: [], - }, - { - Name: 'readline', - VersionFormat: '', - NamespaceName: '', - AddedBy: - 'sha256:27844678c499cd28d128544604c99a91d5d692bc905f931297048c44c1764c63', - Version: '8.1-4.el9', - BaseScores: [], - CVEIds: [], - Vulnerabilities: [], - }, - { - Name: 'lua-libs', - VersionFormat: '', - NamespaceName: '', - AddedBy: - 'sha256:27844678c499cd28d128544604c99a91d5d692bc905f931297048c44c1764c63', - Version: '5.4.4-3.el9', - BaseScores: [], - CVEIds: [], - Vulnerabilities: [], - }, - { - Name: 'popt', - VersionFormat: '', - NamespaceName: '', - AddedBy: - 'sha256:27844678c499cd28d128544604c99a91d5d692bc905f931297048c44c1764c63', - Version: '1.18-8.el9', - BaseScores: [], - CVEIds: [], - Vulnerabilities: [], - }, - { - Name: 'gzip', - VersionFormat: '', - NamespaceName: '', - AddedBy: - 'sha256:0e0603c707af046d0e20d0a759ace11ade1810dd01aa01ca093e5641668c1df2', - Version: '1.12-1.el9', - BaseScores: [], - CVEIds: [], - Vulnerabilities: [], - }, - ], - }, - }, -}; - -export const v1securityDetails: SecurityDetailsResponse = { - ...securityDetails, - status: 'unsupported', - data: { - ...securityDetails.data, - Layer: { - ...(securityDetails?.data?.Layer ?? {}), - Features: [], - } as Layer, - }, -}; - -export const v2securityDetails: SecurityDetailsResponse = { - ...securityDetails, - status: 'queued', - data: { - ...securityDetails.data, - Layer: { - ...(securityDetails?.data?.Layer ?? {}), - Features: securityDetails.data?.Layer?.Features?.slice(0, 5) ?? [], - } as Layer, - }, -}; - -export const v3securityDetails: SecurityDetailsResponse = { - ...securityDetails, - data: { - ...securityDetails.data, - Layer: { - ...(securityDetails?.data?.Layer ?? {}), - Features: [], - } as Layer, - }, -}; -export const v4securityDetails: SecurityDetailsResponse = { - ...securityDetails, - data: { - ...securityDetails.data, - Layer: { - ...(securityDetails?.data?.Layer ?? {}), - Features: securityDetails.data?.Layer?.Features?.slice(0, 5) ?? [], - } as Layer, - }, -}; diff --git a/plugins/quay/dev/__data__/tags.ts b/plugins/quay/dev/__data__/tags.ts deleted file mode 100644 index 53120c8a57..0000000000 --- a/plugins/quay/dev/__data__/tags.ts +++ /dev/null @@ -1,56 +0,0 @@ -export const tags = { - tags: [ - { - name: 'latest-linux-arm64', - reversion: false, - start_ts: 1707212364, - manifest_digest: - 'sha256:69c96c750aa532d92d9cb56cad59159b7cc26b10e39ff4a895c28345d2cd775c', - is_manifest_list: false, - size: 275862608, - last_modified: 'Tue, 06 Feb 2024 09:39:24 -0000', - }, - { - name: 'v4', - reversion: false, - start_ts: 1707212364, - manifest_digest: - 'sha256:29c96c750aa532d92d9cb56cad59159b7cc26b10e39ff4a895c28345d2cd775d', - is_manifest_list: false, - size: 265862608, - last_modified: 'Tue, 06 Feb 2024 09:39:24 -0000', - }, - { - name: 'v3', - reversion: false, - start_ts: 1707212364, - manifest_digest: - 'sha256:79c96c750aa532d92d9cb56cad59159b7cc26b10e39ff4a895c28345d2cd775d', - is_manifest_list: false, - size: 265862608, - last_modified: 'Tue, 06 Feb 2024 09:39:24 -0000', - }, - { - name: 'v2', - reversion: false, - start_ts: 1707212364, - manifest_digest: - 'sha256:89c96c750aa532d92d9cb56cad59159b7cc26b10e39ff4a895c28345d2cd775e', - is_manifest_list: false, - size: 235862608, - last_modified: 'Tue, 06 Feb 2024 09:39:24 -0000', - }, - { - name: 'v1', - reversion: false, - start_ts: 1707212364, - manifest_digest: - 'sha256:99c96c750aa532d92d9cb56cad59159b7cc26b10e39ff4a895c28345d2cd775f', - is_manifest_list: false, - size: 225862608, - last_modified: 'Tue, 06 Feb 2024 09:39:24 -0000', - }, - ], - page: 1, - has_additional: false, -}; diff --git a/plugins/quay/dev/index.tsx b/plugins/quay/dev/index.tsx deleted file mode 100644 index 5e0c3e24f7..0000000000 --- a/plugins/quay/dev/index.tsx +++ /dev/null @@ -1,106 +0,0 @@ -import React from 'react'; - -import { Entity } from '@backstage/catalog-model'; -import { createDevApp } from '@backstage/dev-utils'; -import { EntityProvider } from '@backstage/plugin-catalog-react'; -import { permissionApiRef } from '@backstage/plugin-permission-react'; -import { MockPermissionApi, TestApiProvider } from '@backstage/test-utils'; - -import { getAllThemes } from '@redhat-developer/red-hat-developer-hub-theme'; - -import { quayApiRef, QuayApiV1 } from '../src/api'; -import { QuayPage, quayPlugin } from '../src/plugin'; -import { labels } from './__data__/labels'; -import { manifestDigest } from './__data__/manifest_digest'; -import { - securityDetails, - v1securityDetails, - v2securityDetails, - v3securityDetails, - v4securityDetails, -} from './__data__/security_vulnerabilities'; -import { tags } from './__data__/tags'; - -const mockEntity: Entity = { - apiVersion: 'backstage.io/v1alpha1', - kind: 'Component', - metadata: { - name: 'backstage', - description: 'backstage.io', - annotations: { - 'quay.io/repository-slug': 'backstage-test/test-images', - }, - }, - spec: { - lifecycle: 'production', - type: 'service', - owner: 'user:guest', - }, -}; - -export class MockQuayApiClient implements QuayApiV1 { - async getTags() { - return tags; - } - - async getLabels() { - return labels; - } - - async getManifestByDigest() { - return manifestDigest; - } - - async getSecurityDetails(_: string, __: string, digest: string) { - if ( - digest === - 'sha256:79c96c750aa532d92d9cb56cad59159b7cc26b10e39ff4a895c28345d2cd775d' - ) { - return v3securityDetails; - } - - if ( - digest === - 'sha256:89c96c750aa532d92d9cb56cad59159b7cc26b10e39ff4a895c28345d2cd775e' - ) { - return v2securityDetails; - } - if ( - digest === - 'sha256:99c96c750aa532d92d9cb56cad59159b7cc26b10e39ff4a895c28345d2cd775f' - ) { - return v1securityDetails; - } - - if ( - digest === - 'sha256:29c96c750aa532d92d9cb56cad59159b7cc26b10e39ff4a895c28345d2cd775d' - ) { - return v4securityDetails; - } - - return securityDetails; - } -} -const mockPermissionApi = new MockPermissionApi(); - -createDevApp() - .registerPlugin(quayPlugin) - .addThemes(getAllThemes()) - .addPage({ - element: ( - - - - - - ), - title: 'Root Page', - path: '/quay', - }) - .render(); diff --git a/plugins/quay/images/quay-plugin-backstage1.png b/plugins/quay/images/quay-plugin-backstage1.png deleted file mode 100644 index 0b732eab34e7bb7ace0ba6118cb9e4478bc2dc49..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 147309 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�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 Ky$63?4Eqm!rQf0e diff --git a/plugins/quay/images/quay-plugin-backstage2.png b/plugins/quay/images/quay-plugin-backstage2.png deleted file mode 100644 index 9ea03e373b851949fb40a7acbd97f437dd459fd7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90047 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 H-IxCdJZ_Mc diff --git a/plugins/quay/images/quay-plugin-backstage3.png b/plugins/quay/images/quay-plugin-backstage3.png deleted file mode 100644 index 02aa179e57adcf00d2df9f54fa8af1ee21c05291..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 96148 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 { - if (req.url.searchParams.get('limit') === '1') { - return res( - ctx.status(200), - ctx.json(require(`${__dirname}/fixtures/tags/foo_limit.json`)), - ); - } else if (req.url.searchParams.get('page') === '2') { - return res( - ctx.status(200), - ctx.json(require(`${__dirname}/fixtures/tags/foo_page2.json`)), - ); - } - - return res( - ctx.status(200), - ctx.json(require(`${__dirname}/fixtures/tags/foo_page1.json`)), - ); - }), - - rest.get(`${LOCAL_ADDR}api/v1/repository/not/found/tag/`, (_, res, ctx) => { - return res( - ctx.status(404), - ctx.json(require(`${__dirname}/fixtures/tags/not_found.json`)), - ); - }), - - rest.get( - `${LOCAL_ADDR}api/v1/repository/foo/bar/manifest/sha256:e766248d812bcdadc1ee293b564af1f2517dd6c0327eefab2411e4f11e980d54`, - (_, res, ctx) => { - return res( - ctx.status(200), - ctx.json(require(`${__dirname}/fixtures/manifests/foo.json`)), - ); - }, - ), - - rest.get( - `${LOCAL_ADDR}api/v1/repository/foo/bar/manifest/sha256:e461dc54b4e2469bb7f5bf85a4b7445c175548ba9d56c3f617dd25bc3adf3752`, - (_, res, ctx) => { - return res( - ctx.status(200), - ctx.json(require(`${__dirname}/fixtures/manifests/bar.json`)), - ); - }, - ), - - rest.get( - `${LOCAL_ADDR}api/v1/repository/foo/bar/manifest/sha256:e766248d812bcdadc1ee293b564af1f2517dd6c0327eefab2411e4f11e980d54/labels`, - (_, res, ctx) => { - return res( - ctx.status(200), - ctx.json(require(`${__dirname}/fixtures/labels/foo.json`)), - ); - }, - ), - - rest.get( - `${LOCAL_ADDR}api/v1/repository/foo/bar/manifest/sha256:e766248d812bcdadc1ee293b564af1f2517dd6c0327eefab2411e4f11e980d54/security`, - (_, res, ctx) => { - return res( - ctx.status(200), - ctx.json(require(`${__dirname}/fixtures/securityDetail/foo.json`)), - ); - }, - ), -]; - -const server = setupServer(...handlers); - -beforeAll(() => server.listen()); -afterEach(() => server.restoreHandlers()); -afterAll(() => server.close()); - -describe('QuayApiClient', () => { - let quayApi: QuayApiV1; - - const getConfigApi = (getOptionalStringFn: any) => ({ - has: jest.fn(), - keys: jest.fn(), - get: jest.fn(), - getBoolean: jest.fn(), - getConfig: jest.fn(), - getConfigArray: jest.fn(), - getNumber: jest.fn(), - getString: jest.fn(), - getStringArray: jest.fn(), - getOptional: jest.fn(), - getOptionalStringArray: jest.fn(), - getOptionalBoolean: jest.fn(), - getOptionalConfig: jest.fn(), - getOptionalConfigArray: jest.fn(), - getOptionalNumber: jest.fn(), - getOptionalString: getOptionalStringFn, - }); - - const bearerToken = 'Bearer token'; - - const identityApi = { - async getCredentials() { - return { token: bearerToken }; - }, - } as IdentityApi; - - beforeEach(() => { - quayApi = new QuayApiClient({ - configApi: getConfigApi(() => { - return '/quay/api'; - }), - discoveryApi: UrlPatternDiscovery.compile('https://localhost:5050'), - identityApi: identityApi, - }); - }); - - it('should use a correct default proxy path', async () => { - quayApi = new QuayApiClient({ - configApi: getConfigApi(jest.fn()), - discoveryApi: UrlPatternDiscovery.compile('https://localhost:5050'), - identityApi: identityApi, - }); - - const result = await quayApi.getTags('foo', 'bar'); - - expect(result).toEqual( - require(`${__dirname}/fixtures/tags/foo_page1.json`), - ); - }); - - it('should throw an error when the response is not ok', async () => { - await expect(quayApi.getTags('not', 'found')).rejects.toEqual( - new Error('failed to fetch data, status 404: Not Found'), - ); - }); - - describe('getTags', () => { - it('should correctly get tags without optional arguments', async () => { - const result = await quayApi.getTags('foo', 'bar'); - - expect(result).toEqual( - require(`${__dirname}/fixtures/tags/foo_page1.json`), - ); - }); - - it('should correctly get tags with a limit', async () => { - const result = await quayApi.getTags('foo', 'bar', undefined, 1); - - expect(result).toEqual( - require(`${__dirname}/fixtures/tags/foo_limit.json`), - ); - }); - it('should correctly get tags with a page number', async () => { - const result = await quayApi.getTags('foo', 'bar', 2); - - expect(result).toEqual( - require(`${__dirname}/fixtures/tags/foo_page2.json`), - ); - }); - }); - - describe('getManifestByDigest', () => { - it('should correctly get the manifest using its digest', async () => { - const manifest = require(`${__dirname}/fixtures/manifests/foo.json`); - const result = await quayApi.getManifestByDigest( - 'foo', - 'bar', - manifest.digest, - ); - - expect(result).toEqual(manifest); - }); - }); - - describe('getLabels', () => { - it('should correctly get the labels using the manifest digest', async () => { - const manifest = require(`${__dirname}/fixtures/manifests/bar.json`); - const result = await quayApi.getLabels('foo', 'bar', manifest.digest); - - expect(result).toEqual(require(`${__dirname}/fixtures/labels/foo.json`)); - }); - }); - - describe('getSecurityDetails', () => { - it('should correctly get secuity details using the manifest digest', async () => { - const manifest = require(`${__dirname}/fixtures/manifests/bar.json`); - const result = await quayApi.getSecurityDetails( - 'foo', - 'bar', - manifest.digest, - ); - expect(result).toEqual( - require(`${__dirname}/fixtures/securityDetail/foo.json`), - ); - }); - }); -}); diff --git a/plugins/quay/src/api/index.ts b/plugins/quay/src/api/index.ts deleted file mode 100644 index 3d01761d09..0000000000 --- a/plugins/quay/src/api/index.ts +++ /dev/null @@ -1,141 +0,0 @@ -import { - ConfigApi, - createApiRef, - DiscoveryApi, - IdentityApi, -} from '@backstage/core-plugin-api'; - -import { - LabelsResponse, - ManifestByDigestResponse, - SecurityDetailsResponse, - TagsResponse, -} from '../types'; - -const DEFAULT_PROXY_PATH = '/quay/api'; - -export interface QuayApiV1 { - getTags( - org: string, - repo: string, - page?: number, - limit?: number, - ): Promise; - getLabels(org: string, repo: string, digest: string): Promise; - getManifestByDigest( - org: string, - repo: string, - digest: string, - ): Promise; - getSecurityDetails( - org: string, - repo: string, - digest: string, - ): Promise; -} - -export const quayApiRef = createApiRef({ - id: 'plugin.quay.service', -}); - -export type Options = { - discoveryApi: DiscoveryApi; - configApi: ConfigApi; - identityApi: IdentityApi; -}; - -export class QuayApiClient implements QuayApiV1 { - // @ts-ignore - private readonly discoveryApi: DiscoveryApi; - - private readonly configApi: ConfigApi; - - private readonly identityApi: IdentityApi; - - constructor(options: Options) { - this.discoveryApi = options.discoveryApi; - this.configApi = options.configApi; - this.identityApi = options.identityApi; - } - - private async getBaseUrl() { - const proxyPath = - this.configApi.getOptionalString('quay.proxyPath') || DEFAULT_PROXY_PATH; - return `${await this.discoveryApi.getBaseUrl('proxy')}${proxyPath}`; - } - - private async fetcher(url: string) { - const { token: idToken } = await this.identityApi.getCredentials(); - const response = await fetch(url, { - headers: { - 'Content-Type': 'application/json', - ...(idToken && { Authorization: `Bearer ${idToken}` }), - }, - }); - if (!response.ok) { - throw new Error( - `failed to fetch data, status ${response.status}: ${response.statusText}`, - ); - } - return await response.json(); - } - - private encodeGetParams(params: Record) { - return Object.keys(params) - .filter(key => typeof params[key] !== 'undefined') - .map( - k => - `${encodeURIComponent(k)}=${encodeURIComponent(params[k] as string)}`, - ) - .join('&'); - } - - async getTags( - org: string, - repo: string, - page?: number, - limit?: number, - specifcTag?: string, - ) { - const proxyUrl = await this.getBaseUrl(); - - const params = this.encodeGetParams({ - limit, - page, - onlyActiveTags: true, - specifcTag, - }); - - return (await this.fetcher( - `${proxyUrl}/api/v1/repository/${org}/${repo}/tag/?${params}`, - )) as TagsResponse; - } - - async getLabels(org: string, repo: string, digest: string) { - const proxyUrl = await this.getBaseUrl(); - - return (await this.fetcher( - `${proxyUrl}/api/v1/repository/${org}/${repo}/manifest/${digest}/labels`, - )) as LabelsResponse; - } - - async getManifestByDigest(org: string, repo: string, digest: string) { - const proxyUrl = await this.getBaseUrl(); - - return (await this.fetcher( - `${proxyUrl}/api/v1/repository/${org}/${repo}/manifest/${digest}`, - )) as ManifestByDigestResponse; - } - - async getSecurityDetails(org: string, repo: string, digest: string) { - const proxyUrl = await this.getBaseUrl(); - - const params = this.encodeGetParams({ - vulnerabilities: true, - }); - - return (await this.fetcher( - `${proxyUrl}/api/v1/repository/${org}/${repo}/manifest/${digest}/security?${params}`, - )) as SecurityDetailsResponse; - } -} diff --git a/plugins/quay/src/components/PermissionAlert/PermissionAlert.tsx b/plugins/quay/src/components/PermissionAlert/PermissionAlert.tsx deleted file mode 100644 index 1fe0e4ee8b..0000000000 --- a/plugins/quay/src/components/PermissionAlert/PermissionAlert.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import React from 'react'; - -import { Alert, AlertTitle } from '@material-ui/lab'; - -const PermissionAlert = () => { - return ( - - Permission required - To view quay image registry, contact your administrator to give you the - quay.view.read permission. - - ); -}; -export default PermissionAlert; diff --git a/plugins/quay/src/components/QuayRepository/QuayRepository.test.tsx b/plugins/quay/src/components/QuayRepository/QuayRepository.test.tsx deleted file mode 100644 index 89f99aa4b7..0000000000 --- a/plugins/quay/src/components/QuayRepository/QuayRepository.test.tsx +++ /dev/null @@ -1,174 +0,0 @@ -import React from 'react'; -import { BrowserRouter } from 'react-router-dom'; - -import { usePermission } from '@backstage/plugin-permission-react'; - -import { render } from '@testing-library/react'; - -import { useTags } from '../../hooks'; -import { QuayRepository } from './QuayRepository'; - -jest.mock('react-use', () => ({ - ...jest.requireActual('react-use'), - useAsync: jest.fn().mockReturnValue({ loading: true }), -})); - -jest.mock('@backstage/core-plugin-api', () => ({ - ...jest.requireActual('@backstage/core-plugin-api'), - useApi: jest - .fn() - .mockReturnValue({ getOptionalString: (param: any) => param }), -})); - -jest.mock('../../hooks/', () => ({ - useRepository: () => ({ - repository: 'redhat-backstage-build', - organization: 'janus-idp', - }), - useTags: jest.fn().mockReturnValue({}), -})); - -jest.mock('@backstage/plugin-permission-react', () => ({ - usePermission: jest.fn(), -})); - -const mockUsePermission = usePermission as jest.MockedFunction< - typeof usePermission ->; - -describe('QuayRepository', () => { - beforeEach(() => { - mockUsePermission.mockReturnValue({ loading: false, allowed: true }); - }); - - afterAll(() => { - jest.resetAllMocks(); - }); - - it('should render permission alert when user does not have view permission', () => { - mockUsePermission.mockReturnValue({ loading: false, allowed: false }); - const { queryByTestId } = render(); - - expect(queryByTestId('no-permission-alert')).toBeInTheDocument(); - - expect(queryByTestId('quay-repo-progress')).toBeNull(); - expect(queryByTestId('quay-repo-table')).toBeNull(); - }); - - it('should show loading if loading is true', () => { - (useTags as jest.Mock).mockReturnValue({ loading: true, data: [] }); - const { getByTestId } = render(); - expect(getByTestId('quay-repo-progress')).not.toBeNull(); - }); - - it('should show empty table if loaded and data is not present', () => { - (useTags as jest.Mock).mockReturnValue({ loading: false, data: [] }); - const { getByTestId, queryByText } = render( - - - , - ); - expect(getByTestId('quay-repo-table')).not.toBeNull(); - expect(getByTestId('quay-repo-table-empty')).not.toBeNull(); - expect(queryByText(/Quay repository/i)).toBeInTheDocument(); - expect(queryByText('There are no images available.')).toBeInTheDocument(); - }); - - it('should show table if loaded and data is present', () => { - (useTags as jest.Mock).mockReturnValue({ - loading: false, - data: [ - { - name: 'latest', - manifest_digest: - 'sha256:e766248d812bcdadc1ee293b564af1f2517dd6c0327eefab2411e4f11e980d54', - size: null, - last_modified: 'Wed, 15 Mar 2023 18:22:18 -0000', - }, - ], - }); - const { queryByTestId, queryByText } = render( - - - , - ); - expect(queryByTestId('quay-repo-table')).not.toBeNull(); - expect(queryByTestId('quay-repo-table-empty')).toBeNull(); - expect(queryByText(/Quay repository/i)).toBeInTheDocument(); - expect( - queryByText('There are no images available.'), - ).not.toBeInTheDocument(); - }); - - it('should show table if loaded and data is present but shows progress if security scan is not loaded', () => { - (useTags as jest.Mock).mockReturnValue({ - loading: false, - data: [ - { - name: 'latest', - manifest_digest: undefined, - size: null, - last_modified: 'Wed, 15 Mar 2023 18:22:18 -0000', - }, - ], - }); - const { queryByTestId, queryByText } = render( - - - , - ); - expect(queryByTestId('quay-repo-table')).not.toBeNull(); - expect(queryByTestId('quay-repo-table-empty')).toBeNull(); - expect(queryByText(/Quay repository/i)).toBeInTheDocument(); - expect(queryByTestId('quay-repo-security-scan-progress')).not.toBeNull(); - }); - - it('should show queued status for the tag that are waiting in the queue to be scanned', () => { - (useTags as jest.Mock).mockReturnValue({ - loading: false, - data: [ - { - name: 'latest', - manifest_digest: undefined, - securityStatus: 'queued', - size: null, - last_modified: 'Wed, 15 Mar 2023 18:22:18 -0000', - }, - ], - }); - const { queryByTestId, queryByText } = render( - - - , - ); - - expect(queryByTestId('quay-repo-table')).not.toBeNull(); - expect(queryByTestId('quay-repo-table-empty')).toBeNull(); - expect(queryByText(/Quay repository/i)).toBeInTheDocument(); - expect(queryByTestId('quay-repo-queued-for-scan')).not.toBeNull(); - }); - - it('should show table if loaded and data is present but shows unsupported if security scan is not supported', () => { - (useTags as jest.Mock).mockReturnValue({ - loading: false, - data: [ - { - name: 'latest', - manifest_digest: undefined, - securityStatus: 'unsupported', - size: null, - last_modified: 'Wed, 15 Mar 2023 18:22:18 -0000', - }, - ], - }); - const { queryByTestId, queryByText } = render( - - - , - ); - expect(queryByTestId('quay-repo-table')).not.toBeNull(); - expect(queryByTestId('quay-repo-table-empty')).toBeNull(); - expect(queryByText(/Quay repository/i)).toBeInTheDocument(); - expect(queryByTestId('quay-repo-security-scan-unsupported')).not.toBeNull(); - }); -}); diff --git a/plugins/quay/src/components/QuayRepository/QuayRepository.tsx b/plugins/quay/src/components/QuayRepository/QuayRepository.tsx deleted file mode 100644 index b25dd54733..0000000000 --- a/plugins/quay/src/components/QuayRepository/QuayRepository.tsx +++ /dev/null @@ -1,60 +0,0 @@ -import React from 'react'; - -import { Link, Progress, Table } from '@backstage/core-components'; -import { configApiRef, useApi } from '@backstage/core-plugin-api'; - -import { useRepository, useTags } from '../../hooks'; -import { useQuayViewPermission } from '../../hooks/useQuayViewPermission'; -import PermissionAlert from '../PermissionAlert/PermissionAlert'; -import { columns, useStyles } from './tableHeading'; - -type QuayRepositoryProps = Record; - -export function QuayRepository(_props: QuayRepositoryProps) { - const { repository, organization } = useRepository(); - const classes = useStyles(); - const configApi = useApi(configApiRef); - const quayUiUrl = configApi.getOptionalString('quay.uiUrl'); - - const hasViewPermission = useQuayViewPermission(); - - const title = quayUiUrl ? ( - <> - {`Quay repository: `} - {`${organization}/${repository}`} - - ) : ( - `Quay repository: ${organization}/${repository}` - ); - const { loading, data } = useTags(organization, repository); - - if (!hasViewPermission) { - return ; - } - - if (loading) { - return ( -
- -
- ); - } - - return ( -
- - There are no images available. - - } - /> - - ); -} diff --git a/plugins/quay/src/components/QuayRepository/index.ts b/plugins/quay/src/components/QuayRepository/index.ts deleted file mode 100644 index c53d756d24..0000000000 --- a/plugins/quay/src/components/QuayRepository/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { QuayRepository } from './QuayRepository'; diff --git a/plugins/quay/src/components/QuayRepository/tableHeading.tsx b/plugins/quay/src/components/QuayRepository/tableHeading.tsx deleted file mode 100644 index c86d90ce4c..0000000000 --- a/plugins/quay/src/components/QuayRepository/tableHeading.tsx +++ /dev/null @@ -1,95 +0,0 @@ -import React from 'react'; - -import { Link, Progress, TableColumn } from '@backstage/core-components'; - -import { Tooltip } from '@material-ui/core'; -import makeStyles from '@material-ui/core/styles/makeStyles'; - -import { securityScanComparator, vulnerabilitySummary } from '../../lib/utils'; -import type { QuayTagData } from '../../types'; - -export const columns: TableColumn[] = [ - { - title: 'Tag', - field: 'name', - type: 'string', - highlight: true, - }, - { - title: 'Last Modified', - field: 'last_modified', - type: 'date', - }, - { - title: 'Security Scan', - field: 'securityScan', - render: (rowData: QuayTagData): React.ReactNode => { - if (!rowData.securityStatus && !rowData.securityDetails) { - return ( - - - - ); - } - - if (rowData.securityStatus === 'queued') { - return ( - - Queued - - ); - } - - if (rowData.securityStatus === 'unsupported') { - return ( - - - Unsupported - - - ); - } - - const tagManifest = rowData.manifest_digest_raw; - const retStr = vulnerabilitySummary(rowData.securityDetails); - return ( - - {retStr} - - ); - }, - id: 'securityScan', - customSort: (a: QuayTagData, b: QuayTagData) => - securityScanComparator(a, b), - }, - { - title: 'Size', - field: 'size', - type: 'numeric', - customSort: (a: QuayTagData, b: QuayTagData) => a.rawSize - b.rawSize, - }, - { - title: 'Expires', - field: 'expiration', - type: 'date', - emptyValue: Never, - }, - { - title: 'Manifest', - field: 'manifest_digest', - type: 'string', - customSort: (a: QuayTagData, b: QuayTagData) => - a.manifest_digest_raw.localeCompare(b.manifest_digest_raw), - }, -]; - -export const useStyles = makeStyles(theme => ({ - empty: { - padding: theme.spacing(2), - display: 'flex', - justifyContent: 'center', - }, -})); diff --git a/plugins/quay/src/components/QuayTagDetails/QuayTagDetails.test.tsx b/plugins/quay/src/components/QuayTagDetails/QuayTagDetails.test.tsx deleted file mode 100644 index 6db5d4b5c0..0000000000 --- a/plugins/quay/src/components/QuayTagDetails/QuayTagDetails.test.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import React from 'react'; -import { BrowserRouter } from 'react-router-dom'; - -import { render } from '@testing-library/react'; - -import data from '../../api/fixtures/securityDetail/foo.json'; -import { Layer } from '../../types'; -import QuayTagDetails from './component'; - -describe('QuayTagDetails', () => { - it('should render tag details if vulnerabilities exists', () => { - const { queryByText } = render( - - - , - , - ); - expect(queryByText(/Back to repository/i)).toBeInTheDocument(); - expect(queryByText(/Vulnerabilities for data-digest/i)).toBeInTheDocument(); - }); -}); diff --git a/plugins/quay/src/components/QuayTagDetails/component.tsx b/plugins/quay/src/components/QuayTagDetails/component.tsx deleted file mode 100644 index b51ce0fb39..0000000000 --- a/plugins/quay/src/components/QuayTagDetails/component.tsx +++ /dev/null @@ -1,161 +0,0 @@ -import React from 'react'; - -import { Link, Table, TableColumn } from '@backstage/core-components'; -import type { RouteFunc } from '@backstage/core-plugin-api'; - -import { makeStyles, TableContainer, TableHead } from '@material-ui/core'; -import KeyboardBackspaceIcon from '@material-ui/icons/KeyboardBackspace'; -import LinkIcon from '@material-ui/icons/Link'; -import WarningIcon from '@material-ui/icons/Warning'; - -import { SEVERITY_COLORS } from '../../lib/utils'; -import { - Layer, - Vulnerability, - VulnerabilityListItem, - VulnerabilityOrder, -} from '../../types'; - -type QuayTagDetailsProps = { - layer: Layer; - digest: string; - rootLink: RouteFunc; -}; - -// from: https://github.com/quay/quay/blob/f1d85588157eababc3cbf789002c5db521dbd616/web/src/routes/TagDetails/SecurityReport/SecurityReportTable.tsx#L43 -const getVulnerabilityLink = (link: string) => link.split(' ')[0]; - -const columns: TableColumn[] = [ - { - title: 'Advisory', - field: 'name', - render: (rowData: VulnerabilityListItem): React.ReactNode => { - return ( -
- {rowData.Name} - {rowData.Link.trim().length > 0 ? ( - - - - ) : null} -
- ); - }, - customSort: (a: VulnerabilityListItem, b: VulnerabilityListItem) => - a.Name.localeCompare(b.Name, 'en'), - }, - { - title: 'Severity', - field: 'Severity', - customSort: (a: VulnerabilityListItem, b: VulnerabilityListItem) => { - const severityA = VulnerabilityOrder[a.Severity]; - const severityB = VulnerabilityOrder[b.Severity]; - - return severityA - severityB; - }, - render: (rowData: VulnerabilityListItem): React.ReactNode => { - return ( -
- - {rowData.Severity} -
- ); - }, - }, - { - title: 'Package Name', - field: 'PackageName', - type: 'string', - }, - { - title: 'Current Version', - field: 'CurrentVersion', - type: 'string', - }, - { - title: 'Fixed By', - field: 'FixedBy', - render: (rowData: VulnerabilityListItem): React.ReactNode => { - return ( - <> - {rowData.FixedBy.length > 0 ? ( - {rowData.FixedBy} - ) : ( - '(None)' - )} - - ); - }, - }, -]; - -const useStyles = makeStyles({ - link: { - display: 'flex', - alignItems: 'center', - }, - linkText: { - marginLeft: '0.5rem', - fontSize: '1.1rem', - }, - tableHead: { - display: 'flex', - alignItems: 'center', - marginBottom: '1rem', - }, -}); - -export const QuayTagDetails = ({ - layer, - rootLink, - digest, -}: QuayTagDetailsProps) => { - const classes = useStyles(); - const vulnerabilities = layer.Features.filter( - feat => typeof feat.Vulnerabilities !== 'undefined', - ) - .map(feature => { - // TS doesn't seem to register this list as never being undefined from the above filter - // so we cast it into the list - // NOSONAR - irrelevant as per above comment - return (feature.Vulnerabilities as Vulnerability[]).map( - (v: Vulnerability): VulnerabilityListItem => { - return { - ...v, - PackageName: feature.Name, - CurrentVersion: feature.Version, - }; - }, - ); - }) - .flat() - .sort((a, b) => { - const severityA = VulnerabilityOrder[a.Severity]; - const severityB = VulnerabilityOrder[b.Severity]; - - return severityA - severityB; - }); - - return ( - - - - - Back to repository - - -
- - ); -}; - -export default QuayTagDetails; diff --git a/plugins/quay/src/components/QuayTagDetails/index.ts b/plugins/quay/src/components/QuayTagDetails/index.ts deleted file mode 100644 index 594b462a8d..0000000000 --- a/plugins/quay/src/components/QuayTagDetails/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { QuayTagDetails } from './component'; diff --git a/plugins/quay/src/components/QuayTagPage/QuayTagPage.test.tsx b/plugins/quay/src/components/QuayTagPage/QuayTagPage.test.tsx deleted file mode 100644 index 70c8582921..0000000000 --- a/plugins/quay/src/components/QuayTagPage/QuayTagPage.test.tsx +++ /dev/null @@ -1,108 +0,0 @@ -import React from 'react'; -import { useParams } from 'react-router-dom'; - -import { errorApiRef } from '@backstage/core-plugin-api'; -import { translationApiRef } from '@backstage/core-plugin-api/alpha'; -import { usePermission } from '@backstage/plugin-permission-react'; -import { MockErrorApi, TestApiProvider } from '@backstage/test-utils'; -import { MockTranslationApi } from '@backstage/test-utils/alpha'; - -import { render } from '@testing-library/react'; - -import { useTagDetails } from '../../hooks'; -import QuayTagPage from './component'; - -jest.mock('react-router-dom', () => ({ - ...jest.requireActual('react-router-dom'), - useParams: jest.fn().mockReturnValue({}), -})); - -jest.mock('@backstage/core-plugin-api', () => ({ - ...jest.requireActual('@backstage/core-plugin-api'), - useApi: jest - .fn() - .mockReturnValue({ getOptionalString: (param: any) => param }), - useRouteRef: jest.fn(), -})); - -jest.mock('../../hooks/', () => ({ - useRepository: () => ({ - repository: 'redhat-backstage-build', - organization: 'janus-idp', - }), - useTags: jest.fn().mockReturnValue({}), - useTagDetails: jest.fn().mockReturnValue({}), -})); - -jest.mock('../QuayTagDetails', () => ({ - QuayTagDetails: () =>
QuayTagDetails
, -})); - -jest.mock('@backstage/plugin-permission-react', () => ({ - usePermission: jest.fn(), -})); - -const mockUsePermission = usePermission as jest.MockedFunction< - typeof usePermission ->; - -describe('QuayTagPage', () => { - beforeEach(() => { - mockUsePermission.mockReturnValue({ loading: false, allowed: true }); - }); - - afterAll(() => { - jest.resetAllMocks(); - }); - - it('should render permission alert when user does not have view permission', () => { - mockUsePermission.mockReturnValue({ loading: false, allowed: false }); - (useParams as jest.Mock).mockReturnValue({ digest: 'digest_data' }); - - const { queryByText, queryByTestId } = render(); - - expect(queryByTestId('no-permission-alert')).toBeInTheDocument(); - expect(queryByTestId('quay-tag-page-progress')).toBeNull(); - expect(queryByText(/QuayTagDetails/i)).not.toBeInTheDocument(); - }); - - it('should throw error if digest is not defined', () => { - (useParams as jest.Mock).mockReturnValue({}); - - expect(() => render()).toThrow('digest is not defined'); - }); - - it('should show loading if loading is in progress', () => { - (useParams as jest.Mock).mockReturnValue({ digest: 'digest_data' }); - (useTagDetails as jest.Mock).mockReturnValue({ loading: true }); - const { queryByTestId } = render(); - expect(queryByTestId('quay-tag-page-progress')).not.toBeNull(); - }); - - it('should show error: no digest if value is not there', () => { - (useParams as jest.Mock).mockReturnValue({ digest: 'digest_data' }); - (useTagDetails as jest.Mock).mockReturnValue({ loading: false }); - const { queryByTestId, queryAllByText } = render( - - - , - ); - expect(queryAllByText(/no digest/i)[0]).toBeInTheDocument(); - expect(queryByTestId('quay-tag-page-progress')).toBeNull(); - }); - - it('should show QuayTagDetails if value is there', () => { - (useParams as jest.Mock).mockReturnValue({ digest: 'digest_data' }); - (useTagDetails as jest.Mock).mockReturnValue({ - loading: false, - value: { data: [{ Features: [] }] }, - }); - const { queryByText } = render(); - expect(queryByText(/QuayTagDetails/i)).toBeInTheDocument(); - }); -}); diff --git a/plugins/quay/src/components/QuayTagPage/component.tsx b/plugins/quay/src/components/QuayTagPage/component.tsx deleted file mode 100644 index 3372f6f19c..0000000000 --- a/plugins/quay/src/components/QuayTagPage/component.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import React from 'react'; -import { useParams } from 'react-router-dom'; - -import { ErrorPanel, Progress } from '@backstage/core-components'; -import { useRouteRef } from '@backstage/core-plugin-api'; - -import { useRepository, useTagDetails } from '../../hooks'; -import { useQuayViewPermission } from '../../hooks/useQuayViewPermission'; -import { rootRouteRef } from '../../routes'; -import PermissionAlert from '../PermissionAlert/PermissionAlert'; -import { QuayTagDetails } from '../QuayTagDetails'; - -export const QuayTagPage = () => { - const rootLink = useRouteRef(rootRouteRef); - const { repository, organization } = useRepository(); - const { digest } = useParams(); - const hasViewPermission = useQuayViewPermission(); - if (!digest) { - throw new Error('digest is not defined'); - } - const { loading, value } = useTagDetails(organization, repository, digest); - - if (!hasViewPermission) { - return ; - } - - if (loading) { - return ( -
- -
- ); - } - if (!value?.data) { - return ; - } - - return ( - - ); -}; - -export default QuayTagPage; diff --git a/plugins/quay/src/components/QuayTagPage/index.ts b/plugins/quay/src/components/QuayTagPage/index.ts deleted file mode 100644 index 7015bb49eb..0000000000 --- a/plugins/quay/src/components/QuayTagPage/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { QuayTagPage } from './component'; diff --git a/plugins/quay/src/components/QuayWidget/QuayWidget.tsx b/plugins/quay/src/components/QuayWidget/QuayWidget.tsx deleted file mode 100644 index d33cfcf244..0000000000 --- a/plugins/quay/src/components/QuayWidget/QuayWidget.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import React from 'react'; - -import { Entity } from '@backstage/catalog-model'; -import { MissingAnnotationEmptyState } from '@backstage/core-components'; -import { useEntity } from '@backstage/plugin-catalog-react'; - -import { Card, CardHeader } from '@material-ui/core'; - -import { QUAY_ANNOTATION_REPOSITORY } from '../../hooks'; -import { isQuayAvailable } from '../../plugin'; -import { QuayRepository } from '../QuayRepository'; - -const Widget = () => { - return ( - - - - - ); -}; - -export const QuayWidget = () => { - const { entity } = useEntity(); - - return !isQuayAvailable(entity) ? ( - - ) : ( - - ); -}; - -export const QuayWidgetEntity = ({ entity }: { entity: Entity }) => { - return !isQuayAvailable(entity) ? ( - - ) : ( - - ); -}; diff --git a/plugins/quay/src/components/QuayWidget/index.ts b/plugins/quay/src/components/QuayWidget/index.ts deleted file mode 100644 index 19a079dcae..0000000000 --- a/plugins/quay/src/components/QuayWidget/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { QuayWidget } from './QuayWidget'; diff --git a/plugins/quay/src/components/Router.test.tsx b/plugins/quay/src/components/Router.test.tsx deleted file mode 100644 index 2242712ef4..0000000000 --- a/plugins/quay/src/components/Router.test.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import React from 'react'; - -import { renderInTestApp } from '@backstage/test-utils'; - -import { QuayRepository } from './QuayRepository'; -import { QuayTagPage } from './QuayTagPage'; -import { Router } from './Router'; - -jest.mock('./QuayRepository', () => ({ - QuayRepository: jest.fn(() => null), -})); - -jest.mock('./QuayTagPage', () => ({ - QuayTagPage: jest.fn(() => null), -})); - -describe('Router', () => { - beforeEach(() => { - (QuayRepository as jest.Mock).mockClear(); - (QuayTagPage as jest.Mock).mockClear(); - }); - describe('/', () => { - it('should render the QuayRepository', async () => { - await renderInTestApp(); - expect(QuayRepository).toHaveBeenCalled(); - }); - }); - - describe('/tag/:digestId', () => { - it('should render the QuayTagPage page', async () => { - await renderInTestApp(, { - routeEntries: ['/tag/my-digest'], - }); - expect(QuayTagPage).toHaveBeenCalled(); - }); - }); -}); diff --git a/plugins/quay/src/components/Router.tsx b/plugins/quay/src/components/Router.tsx deleted file mode 100644 index 1f177929ac..0000000000 --- a/plugins/quay/src/components/Router.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import React from 'react'; -import { Route, Routes } from 'react-router-dom'; - -import { Entity } from '@backstage/catalog-model'; - -import { QUAY_ANNOTATION_REPOSITORY } from '../hooks'; -import { tagRouteRef } from '../routes'; -import { QuayRepository } from './QuayRepository'; -import { QuayTagPage } from './QuayTagPage'; - -/** * - * @public - */ -export const isQuayAvailable = (entity: Entity) => - Boolean(entity?.metadata.annotations?.[QUAY_ANNOTATION_REPOSITORY]); -/** - * - * @public - */ -export const Router = () => ( - - } /> - } /> - -); diff --git a/plugins/quay/src/components/useQuayAppData.test.ts b/plugins/quay/src/components/useQuayAppData.test.ts deleted file mode 100644 index ece8c62a68..0000000000 --- a/plugins/quay/src/components/useQuayAppData.test.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { Entity } from '@backstage/catalog-model'; - -import { useQuayAppData } from '../hooks'; - -describe('useQuayAppData', () => { - it('should correctly get the repository flag from the entity', () => { - const entity: Entity = { - apiVersion: 'backstage.io/v1alpha1', - kind: 'Component', - metadata: { - name: 'foo', - annotations: { 'quay.io/repository-slug': 'foo/bar' }, - }, - }; - - const result = useQuayAppData({ entity }); - - expect(result).toEqual({ repositorySlug: 'foo/bar' }); - }); - - it('should throw an error when the annotation is not present', () => { - const entity: Entity = { - apiVersion: 'backstage.io/v1alpha1', - kind: 'Component', - metadata: { - name: 'foo', - }, - }; - - const useResult = () => useQuayAppData({ entity }); - - expect(useResult).toThrow("'Quay' annotations are missing"); - }); -}); diff --git a/plugins/quay/src/hooks/index.ts b/plugins/quay/src/hooks/index.ts deleted file mode 100644 index b93c5bb5fa..0000000000 --- a/plugins/quay/src/hooks/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './quay'; diff --git a/plugins/quay/src/hooks/quay.tsx b/plugins/quay/src/hooks/quay.tsx deleted file mode 100644 index 733fb217d0..0000000000 --- a/plugins/quay/src/hooks/quay.tsx +++ /dev/null @@ -1,139 +0,0 @@ -import React, { useMemo } from 'react'; -import { useAsync } from 'react-use'; - -import { Entity } from '@backstage/catalog-model'; -import { useApi } from '@backstage/core-plugin-api'; -import { useEntity } from '@backstage/plugin-catalog-react'; - -import { Box, Chip, makeStyles } from '@material-ui/core'; - -import { formatByteSize, formatDate } from '@janus-idp/shared-react'; - -import { quayApiRef } from '../api'; -import { Layer, QuayTagData, Tag } from '../types'; - -const useLocalStyles = makeStyles({ - chip: { - margin: 0, - marginRight: '.2em', - height: '1.5em', - '& > span': { - padding: '.3em', - }, - }, -}); - -export const useTags = (organization: string, repository: string) => { - const quayClient = useApi(quayApiRef); - const [tags, setTags] = React.useState([]); - const [tagManifestLayers, setTagManifestLayers] = React.useState< - Record - >({}); - const [tagManifestStatuses, setTagManifestStatuses] = React.useState< - Record - >({}); - const localClasses = useLocalStyles(); - - const fetchSecurityDetails = async (tag: Tag) => { - const securityDetails = await quayClient.getSecurityDetails( - organization, - repository, - tag.manifest_digest, - ); - return securityDetails; - }; - - const { loading } = useAsync(async () => { - const tagsResponse = await quayClient.getTags(organization, repository); - Promise.all( - tagsResponse.tags.map(async tag => { - const securityDetails = await fetchSecurityDetails(tag); - const securityData = securityDetails.data; - const securityStatus = securityDetails.status; - - setTagManifestStatuses(prevState => ({ - ...prevState, - [tag.manifest_digest]: securityStatus, - })); - - if (securityData) { - setTagManifestLayers(prevState => ({ - ...prevState, - [tag.manifest_digest]: securityData.Layer, - })); - } - }), - ); - setTags(prevTags => [...prevTags, ...tagsResponse.tags]); - return tagsResponse; - }); - - const data: QuayTagData[] = useMemo(() => { - return Object.values(tags)?.map(tag => { - const hashFunc = tag.manifest_digest.substring(0, 6); - const shortHash = tag.manifest_digest.substring(7, 19); - return { - id: `${tag.manifest_digest}-${tag.name}`, - name: tag.name, - last_modified: formatDate(tag.last_modified), - size: formatByteSize(tag.size), - rawSize: tag.size, - manifest_digest: ( - - - {shortHash} - - ), - expiration: tag.expiration, - securityDetails: tagManifestLayers[tag.manifest_digest], - securityStatus: tagManifestStatuses[tag.manifest_digest], - manifest_digest_raw: tag.manifest_digest, - // is_manifest_list: tag.is_manifest_list, - // reversion: tag.reversion, - // start_ts: tag.start_ts, - // end_ts: tag.end_ts, - // manifest_list: tag.manifest_list, - }; - }); - }, [tags, localClasses.chip, tagManifestLayers, tagManifestStatuses]); - - return { loading, data }; -}; - -export const QUAY_ANNOTATION_REPOSITORY = 'quay.io/repository-slug'; - -export const useQuayAppData = ({ entity }: { entity: Entity }) => { - const repositorySlug = - entity?.metadata.annotations?.[QUAY_ANNOTATION_REPOSITORY] ?? ''; - - if (!repositorySlug) { - throw new Error("'Quay' annotations are missing"); - } - return { repositorySlug }; -}; - -export const useRepository = () => { - const { entity } = useEntity(); - const { repositorySlug } = useQuayAppData({ entity }); - const info = repositorySlug.split('/'); - - const organization = info.shift() as 'string'; - const repository = info.join('/'); - return { - organization, - repository, - }; -}; - -export const useTagDetails = (org: string, repo: string, digest: string) => { - const quayClient = useApi(quayApiRef); - const result = useAsync(async () => { - const manifestLayer = await quayClient.getSecurityDetails( - org, - repo, - digest, - ); - return manifestLayer; - }); - return result; -}; diff --git a/plugins/quay/src/hooks/useQuayViewPermission.ts b/plugins/quay/src/hooks/useQuayViewPermission.ts deleted file mode 100644 index a8afee0815..0000000000 --- a/plugins/quay/src/hooks/useQuayViewPermission.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { usePermission } from '@backstage/plugin-permission-react'; - -import { quayViewPermission } from '@janus-idp/backstage-plugin-quay-common'; - -export const useQuayViewPermission = () => { - const quayViewPermissionResult = usePermission({ - permission: quayViewPermission, - }); - - return quayViewPermissionResult.allowed; -}; diff --git a/plugins/quay/src/hooks/useRepository.test.ts b/plugins/quay/src/hooks/useRepository.test.ts deleted file mode 100644 index 4201504362..0000000000 --- a/plugins/quay/src/hooks/useRepository.test.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { renderHook } from '@testing-library/react'; - -import { useRepository } from './quay'; - -jest.mock('@backstage/plugin-catalog-react', () => ({ - useEntity: () => ({ - entity: { - apiVersion: 'backstage.io/v1alpha1', - kind: 'Component', - metadata: { - name: 'foo', - annotations: { 'quay.io/repository-slug': 'foo/bar' }, - }, - }, - }), -})); - -describe('useRepository', () => { - it('should return organization and repository', () => { - const { result } = renderHook(() => useRepository()); - expect(result.current).toEqual({ - organization: 'foo', - repository: 'bar', - }); - }); -}); diff --git a/plugins/quay/src/hooks/useTagDetails.test.ts b/plugins/quay/src/hooks/useTagDetails.test.ts deleted file mode 100644 index 3f17fe4c74..0000000000 --- a/plugins/quay/src/hooks/useTagDetails.test.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { renderHook, waitFor } from '@testing-library/react'; - -import { useTagDetails } from './quay'; - -jest.mock('@backstage/core-plugin-api', () => ({ - ...jest.requireActual('@backstage/core-plugin-api'), - useApi: jest - .fn() - .mockReturnValue({ getSecurityDetails: (param: any) => param }), -})); - -describe('useTagDetails', () => { - it('should return tag details for provided org, repo and digest', async () => { - const { result } = renderHook(() => - useTagDetails('foo', 'bar', 'mock-digest'), - ); - await waitFor(() => { - expect(result.current).toEqual({ loading: false, value: 'foo' }); - }); - }); -}); diff --git a/plugins/quay/src/hooks/useTags.test.ts b/plugins/quay/src/hooks/useTags.test.ts deleted file mode 100644 index 076da25a0a..0000000000 --- a/plugins/quay/src/hooks/useTags.test.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { useApi } from '@backstage/core-plugin-api'; - -import { renderHook, waitFor } from '@testing-library/react'; - -import { useTags } from './quay'; - -jest.mock('@backstage/core-plugin-api', () => ({ - ...jest.requireActual('@backstage/core-plugin-api'), - useApi: jest.fn().mockReturnValue({ - getSecurityDetails: (param: any) => param, - getTags: jest.fn().mockReturnValue({ - tags: [{ name: 'tag1', manifest_digest: 'manifestDigest' }], - }), - }), -})); - -describe('useTags', () => { - it('should return tags for provided org and repo', async () => { - const { result } = renderHook(() => useTags('foo', 'bar')); - await waitFor(() => { - expect(result.current.loading).toBeFalsy(); - expect(result.current.data).toHaveLength(1); - }); - }); - - it('should return security status for tags', async () => { - (useApi as jest.Mock).mockReturnValue({ - getSecurityDetails: jest - .fn() - .mockReturnValue({ data: null, status: 'unsupported' }), - getTags: jest.fn().mockReturnValue({ - tags: [{ name: 'tag1', manifest_digest: 'manifestDigest' }], - }), - }); - const { result } = renderHook(() => useTags('foo', 'bar')); - await waitFor(() => { - expect(result.current.loading).toBeFalsy(); - expect(result.current.data).toHaveLength(1); - expect(result.current.data[0].securityStatus).toBe('unsupported'); - expect(result.current.data[0].securityDetails).toBeUndefined(); - }); - }); - - it('should return tag layers as security details for tags', async () => { - (useApi as jest.Mock).mockReturnValue({ - getSecurityDetails: jest - .fn() - .mockReturnValue({ data: { Layer: {} }, status: 'scanned' }), - getTags: jest.fn().mockReturnValue({ - tags: [{ name: 'tag1', manifest_digest: 'manifestDigest' }], - }), - }); - const { result } = renderHook(() => useTags('foo', 'bar')); - await waitFor(() => { - expect(result.current.loading).toBeFalsy(); - expect(result.current.data).toHaveLength(1); - expect(result.current.data[0].securityStatus).toBe('scanned'); - expect(result.current.data[0].securityDetails).toEqual({}); - }); - }); -}); diff --git a/plugins/quay/src/index.ts b/plugins/quay/src/index.ts deleted file mode 100644 index 2222c859c0..0000000000 --- a/plugins/quay/src/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { quayPlugin, QuayPage } from './plugin'; -export { isQuayAvailable } from './components/Router'; diff --git a/plugins/quay/src/lib/utils.data.ts b/plugins/quay/src/lib/utils.data.ts deleted file mode 100644 index c6d52128d3..0000000000 --- a/plugins/quay/src/lib/utils.data.ts +++ /dev/null @@ -1,176 +0,0 @@ -export const mockLayer = { - Name: 'TestLayer', - ParentName: 'ParentLayer', - NamespaceName: 'Namespace', - IndexedByVersion: 1, - Features: [ - { - Name: 'openssl-libs', - VersionFormat: '', - NamespaceName: '', - AddedBy: - 'sha256:2fe2b9e85b7c384f07f3665132f448c43aa7a5a600f89b5adde70258bc22e5f2', - Version: '1:1.1.1k-6.el8_5', - Vulnerabilities: [ - { - Severity: 'Medium', - NamespaceName: 'RHEL8-rhel-8', - Link: 'https://access.redhat.com/errata/RHSA-2022:5818 https://access.redhat.com/security/cve/CVE-2022-1292 https://access.redhat.com/security/cve/CVE-2022-2068 https://access.redhat.com/security/cve/CVE-2022-2097', - FixedBy: '1:1.1.1k-7.el8_6', - Description: - 'OpenSSL is a toolkit that implements the Secure Sockets Layer (SSL) and Transport Layer Security (TLS) protocols, as well as a full-strength general-purpose cryptography library.\n\nSecurity Fix(es):\n\n* openssl: c_rehash script allows command injection (CVE-2022-1292)\n\n* openssl: the c_rehash script allows command injection (CVE-2022-2068)\n\n* openssl: AES OCB fails to encrypt some bytes (CVE-2022-2097)\n\nFor more details about the security issue(s), including the impact, a CVSS score, acknowledgments, and other related information, refer to the CVE page(s) listed in the References section.', - Name: 'RHSA-2022:5818: openssl security update (Moderate)', - Metadata: { - UpdatedBy: 'RHEL8-rhel-8', - RepoName: 'cpe:/o:redhat:enterprise_linux:8::baseos', - RepoLink: null, - DistroName: 'Red Hat Enterprise Linux Server', - DistroVersion: '8', - NVD: { - CVSSv3: { - Vectors: 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H', - Score: 9.8, - }, - }, - }, - }, - { - Severity: 'High', - NamespaceName: 'RHEL8-rhel-8', - Link: 'https://access.redhat.com/errata/RHSA-2023:1405 https://access.redhat.com/security/cve/CVE-2022-4304 https://access.redhat.com/security/cve/CVE-2022-4450 https://access.redhat.com/security/cve/CVE-2023-0215 https://access.redhat.com/security/cve/CVE-2023-0286', - FixedBy: '1:1.1.1k-9.el8_7', - Description: - 'OpenSSL is a toolkit that implements the Secure Sockets Layer (SSL) and Transport Layer Security (TLS) protocols, as well as a full-strength general-purpose cryptography library.\n\nSecurity Fix(es):\n\n* openssl: X.400 address type confusion in X.509 GeneralName (CVE-2023-0286)\n\n* openssl: timing attack in RSA Decryption implementation (CVE-2022-4304)\n\n* openssl: double free after calling PEM_read_bio_ex (CVE-2022-4450)\n\n* openssl: use-after-free following BIO_new_NDEF (CVE-2023-0215)\n\nFor more details about the security issue(s), including the impact, a CVSS score, acknowledgments, and other related information, refer to the CVE page(s) listed in the References section.', - Name: 'RHSA-2023:1405: openssl security update (Important)', - Metadata: { - UpdatedBy: 'RHEL8-rhel-8', - RepoName: 'cpe:/o:redhat:enterprise_linux:8::baseos', - RepoLink: null, - DistroName: 'Red Hat Enterprise Linux Server', - DistroVersion: '8', - NVD: { - CVSSv3: { - Vectors: 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H', - Score: 7.5, - }, - }, - }, - }, - { - Severity: 'Low', - NamespaceName: 'RHEL8-rhel-8-including-unpatched', - Link: 'https://access.redhat.com/errata/RHSA-2023:7877 https://access.redhat.com/security/cve/CVE-2023-3446 https://access.redhat.com/security/cve/CVE-2023-3817 https://access.redhat.com/security/cve/CVE-2023-5678', - FixedBy: '1:1.1.1k-12.el8_9', - Description: - 'OpenSSL is a toolkit that implements the Secure Sockets Layer (SSL) and Transport Layer Security (TLS) protocols, as well as a full-strength general-purpose cryptography library.\n\nSecurity Fix(es):\n\n* openssl: Excessive time spent checking DH keys and parameters (CVE-2023-3446)\n\n* OpenSSL: Excessive time spent checking DH q parameter value (CVE-2023-3817)\n\n* openssl: Generating excessively long X9.42 DH keys or checking excessively long X9.42 DH keys or parameters may be very slow (CVE-2023-5678)\n\nFor more details about the security issue(s), including the impact, a CVSS score, acknowledgments, and other related information, refer to the CVE page(s) listed in the References section.', - Name: 'RHSA-2023:7877: openssl security update (Low)', - Metadata: { - UpdatedBy: 'RHEL8-rhel-8-including-unpatched', - RepoName: 'cpe:/o:redhat:enterprise_linux:8::baseos', - RepoLink: null, - DistroName: 'Red Hat Enterprise Linux Server', - DistroVersion: '8', - NVD: { - CVSSv3: { - Vectors: 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L', - Score: 5.3, - }, - }, - }, - }, - ], - }, - { - Name: 'ncurses-base', - VersionFormat: '', - NamespaceName: '', - AddedBy: - 'sha256:2fe2b9e85b7c384f07f3665132f448c43aa7a5a600f89b5adde70258bc22e5f2', - Version: '6.1-9.20180224.el8', - Vulnerabilities: [ - { - Severity: 'Medium', - NamespaceName: 'RHEL8-rhel-8', - Link: 'https://access.redhat.com/errata/RHSA-2023:5249 https://access.redhat.com/security/cve/CVE-2023-29491', - FixedBy: '0:6.1-9.20180224.el8_8.1', - Description: - 'The ncurses (new curses) library routines are a terminal-independent method of updating character screens with reasonable optimization. The ncurses packages contain support utilities including a terminfo compiler tic, a decompiler infocmp, clear, tput, tset, and a termcap conversion tool captoinfo.\n\nSecurity Fix(es):\n\n* ncurses: Local users can trigger security-relevant memory corruption via malformed data (CVE-2023-29491)\n\nFor more details about the security issue(s), including the impact, a CVSS score, acknowledgments, and other related information, refer to the CVE page(s) listed in the References section.', - Name: 'RHSA-2023:5249: ncurses security update (Moderate)', - Metadata: { - UpdatedBy: 'RHEL8-rhel-8', - RepoName: 'cpe:/o:redhat:enterprise_linux:8::baseos', - RepoLink: null, - DistroName: 'Red Hat Enterprise Linux Server', - DistroVersion: '8', - NVD: { - CVSSv3: { - Vectors: 'CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H', - Score: 7.8, - }, - }, - }, - }, - ], - }, - { - Name: 'Feature1', - VersionFormat: '1.0.0', - NamespaceName: 'Namespace', - AddedBy: 'Tester', - Version: '1.0.0', - Vulnerabilities: [ - { - Severity: 'High', - NamespaceName: 'Namespace', - Link: 'https://example.com', - FixedBy: 'Fixer', - Description: 'Sample vulnerability', - Name: 'Vuln1', - Metadata: { - UpdatedBy: 'Updater', - RepoName: 'Repo', - RepoLink: 'https://repo.example.com', - DistroName: 'Ubuntu', - DistroVersion: '18.04', - NVD: { - CVSSv3: { - Vectors: 'CVSSv3 Vectors', - Score: 7.5, - }, - }, - }, - }, - ], - }, - { - Name: 'Feature2', - VersionFormat: '2.0.0', - NamespaceName: 'Namespace', - AddedBy: 'Tester', - Version: '2.0.0', - Vulnerabilities: [ - { - Severity: 'High', - NamespaceName: 'Namespace', - Link: 'https://example.com', - FixedBy: 'Fixer', - Description: 'Another vulnerability', - Name: 'Vuln2', - Metadata: { - UpdatedBy: 'Updater', - RepoName: 'Repo', - RepoLink: 'https://repo.example.com', - DistroName: 'Ubuntu', - DistroVersion: '20.04', - NVD: { - CVSSv3: { - Vectors: 'CVSSv3 Vectors', - Score: 5.0, - }, - }, - }, - }, - ], - }, - ], -}; diff --git a/plugins/quay/src/lib/utils.test.ts b/plugins/quay/src/lib/utils.test.ts deleted file mode 100644 index d0660bd7dd..0000000000 --- a/plugins/quay/src/lib/utils.test.ts +++ /dev/null @@ -1,176 +0,0 @@ -import { - securityDetails, - v1securityDetails, - v2securityDetails, - v3securityDetails, -} from '../../dev/__data__/security_vulnerabilities'; -import { tags } from '../../dev/__data__/tags'; -import { Layer, VulnerabilitySeverity } from '../types'; -import { - securityScanComparator, - SEVERITY_COLORS, - vulnerabilitySummary, -} from './utils'; -import { mockLayer } from './utils.data'; - -describe('SEVERITY_COLORS', () => { - it('should return the correct hex color code', () => { - const severity = VulnerabilitySeverity.Critical; - - const result = SEVERITY_COLORS[severity]; - - expect(result).toBe('#7D1007'); - }); - - it('should return the default color code if the severity is unknown', () => { - const result = SEVERITY_COLORS[VulnerabilitySeverity.Unknown]; - - expect(result).toBe('#8A8D90'); - }); -}); - -describe('vulnerabilitySummary', () => { - test('returns "Passed" when no vulnerabilities are present', () => { - const layer: Layer = { - Name: 'TestLayer', - ParentName: 'ParentLayer', - NamespaceName: 'Namespace', - IndexedByVersion: 1, - Features: [ - { - Name: 'Feature1', - VersionFormat: '1.0.0', - NamespaceName: 'Namespace', - AddedBy: 'Tester', - Version: '1.0.0', - Vulnerabilities: [], - }, - ], - }; - - expect(vulnerabilitySummary(layer)).toBe('Passed'); - }); - - test('returns a string with vulnerability counts in the correct order', () => { - const result = vulnerabilitySummary(mockLayer as Layer); - expect(result).toMatch('High: 3, Medium: 2, Low: 1'); - }); -}); - -describe('compareSecurityScans', () => { - const { tags: tagArray } = tags; - - const data = [ - { - ...tagArray[0], - securityStatus: 'scanned', - securityDetails: mockLayer, - }, - { - ...tagArray[0], - name: 'stable', - securityStatus: 'scanned', - securityDetails: securityDetails?.data?.Layer, - }, - { - ...tagArray[1], - securityStatus: 'scanned', - securityDetails: v3securityDetails?.data?.Layer, - }, - { - ...tagArray[2], - securityStatus: 'scanned', - securityDetails: { - ...securityDetails?.data?.Layer, - Features: [], - }, - }, - { - ...tagArray[3], - securityStatus: 'queued', - securityDetails: v2securityDetails?.data?.Layer, - }, - { - ...tagArray[4], - securityStatus: 'unsupported', - securityDetails: v1securityDetails?.data?.Layer, - }, - ] as any[]; - - it('should sort security scan values in the ascending order', () => { - const expected = [ - 'latest-linux-arm64', // High: 3, Medium: 2, Low: 1 ; High value - 'stable', // High: 2, Medium: 2, Low: 1 ; High value - 'v4', // Medium: 1; No High, but has Medium and Low - 'v3', // Passed - 'v2', // Queued; - 'v1', // Unsupported - ]; - - const names = data - .sort((a, b) => securityScanComparator(a, b, 'asc')) - .map(tag => tag.name); - expect(names).toEqual(expected); - }); - it('should sort security scan values in the descending order', () => { - const expected = [ - 'v1', // Unsupported - 'v2', // Queued; - 'v4', // Passed - 'v3', // Medium: 1; No High, but has Medium and Low - 'stable', // High: 2, Medium: 2, Low: 1 ; High value - 'latest-linux-arm64', // High: 3, Medium: 2, Low: 1 ; High value - ]; - - const names = data - .sort((a, b) => securityScanComparator(a, b, 'desc')) - .map(tag => tag.name); - expect(names).toEqual(expected); - }); - - it('should not perform sort on the scanning row', () => { - const mockData = [ - { - ...tagArray[0], - name: 'v1beta', - securityStatus: 'scanning', - }, - ...data, - ]; - const expected = [ - 'v1beta', // Scanning; Show loading indicator in UI. - 'v1', // Unsupported - 'v2', // Queued; - 'v4', // Passed - 'v3', // Medium: 1; No High, but has Medium and Low - 'stable', // High: 2, Medium: 2, Low: 1 ; High value - 'latest-linux-arm64', // High: 3, Medium: 2, Low: 1 ; High value - ]; - - // Scanning row should not change the order - const names = mockData - .sort((a, b) => securityScanComparator(a, b, 'desc')) - .map(tag => tag.name); - expect(names).toEqual(expected); - - const mockData1 = [ - data[0], // v1 - { - ...tagArray[0], - name: 'v1beta', - securityStatus: 'scanning', - }, - data[1], // v2 - ]; - const expectedNames = [ - 'v1', // Unsupported - 'v1beta', // Scanning; Show loading indicator in UI. - 'v2', // Queued; - ]; - - const tagNames = mockData1 - .sort((a, b) => securityScanComparator(a, b, 'desc')) - .map(tag => tag.name); - expect(tagNames).toEqual(expectedNames); - }); -}); diff --git a/plugins/quay/src/lib/utils.ts b/plugins/quay/src/lib/utils.ts deleted file mode 100644 index fd80e37256..0000000000 --- a/plugins/quay/src/lib/utils.ts +++ /dev/null @@ -1,129 +0,0 @@ -import { - Layer, - QuayTagData, - VulnerabilityOrder, - VulnerabilitySeverity, -} from '../types'; - -export const SEVERITY_COLORS = new Proxy( - new Map([ - [VulnerabilitySeverity.Critical, '#7D1007'], - [VulnerabilitySeverity.High, '#C9190B'], - [VulnerabilitySeverity.Medium, '#EC7A08'], - [VulnerabilitySeverity.Low, '#F0AB00'], - [VulnerabilitySeverity.None, '#3E8635'], - ]) as any, - { - get: (o: Map, k: VulnerabilitySeverity) => - o.has(k) ? o.get(k) : '#8A8D90', - }, -); - -export const vulnerabilitySummary = (layer: Layer): string => { - const summary: Record = {}; - - layer?.Features.forEach(feature => { - feature.Vulnerabilities?.forEach(vulnerability => { - const { Severity } = vulnerability; - if (!summary[Severity]) { - summary[Severity] = 0; - } - summary[Severity]++; - }); - }); - - const scanResults = Object.entries(summary) - .sort((a, b) => { - const severityA = VulnerabilityOrder[a[0] as VulnerabilitySeverity]; - const severityB = VulnerabilityOrder[b[0] as VulnerabilitySeverity]; - - return severityA - severityB; - }) - .map(([severity, count]) => `${severity}: ${count}`) - .join(', '); - return scanResults.trim() !== '' ? scanResults : 'Passed'; -}; - -const securityScanOrder = [ - 'High', - 'Medium', - 'Low', - 'Passed', - 'Scanning', - 'Queued', - 'Unscanned', - 'Unsupported', -]; - -export const capitalizeFirstLetter = (s: string): string => { - return s.charAt(0).toUpperCase() + s.slice(1); -}; - -export const securityScanComparator = ( - ar: QuayTagData, - br: QuayTagData, - order: 'asc' | 'desc' = 'desc', -) => { - const a = vulnerabilitySummary(ar.securityDetails); - const b = vulnerabilitySummary(br.securityDetails); - - const parseScan = (scan: string) => { - const values: { [key: string]: number } = { - High: 0, - Medium: 0, - Low: 0, - }; - scan.split(', ').forEach((part: string) => { - const [key, value] = part.split(': '); - if (values[key] !== undefined) { - values[key] = parseInt(value, 10); - } - }); - return values; - }; - - const aParts = a.split(', '); - const bParts = b.split(', '); - - const multiplier = order === 'asc' ? 1 : -1; - - if ( - aParts.length >= 1 && - bParts.length >= 1 && - aParts[0] !== 'Passed' && - bParts[0] !== 'Passed' - ) { - const aParsed = parseScan(a); - const bParsed = parseScan(b); - - if (aParsed.High !== bParsed.High) { - return (bParsed.High - aParsed.High) * multiplier; - } - if (aParsed.Medium !== bParsed.Medium) { - return (bParsed.Medium - aParsed.Medium) * multiplier; - } - if (aParsed.Low !== bParsed.Low) { - return (bParsed.Low - aParsed.Low) * multiplier; - } - } - - const finalAValue = capitalizeFirstLetter( - ar.securityStatus === 'scanned' - ? aParts[0].split(':')[0] - : (ar.securityStatus ?? 'scanning'), - ); - - const finalBValue = capitalizeFirstLetter( - br.securityStatus === 'scanned' - ? bParts[0].split(':')[0] - : (br.securityStatus ?? 'scanning'), - ); - - if (finalAValue === 'Scanning' || finalBValue === 'Scanning') return 1; - - return ( - (securityScanOrder.indexOf(finalAValue) - - securityScanOrder.indexOf(finalBValue)) * - multiplier - ); -}; diff --git a/plugins/quay/src/plugin.test.ts b/plugins/quay/src/plugin.test.ts deleted file mode 100644 index 01bd9d7d64..0000000000 --- a/plugins/quay/src/plugin.test.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { quayPlugin } from './plugin'; - -describe('quay', () => { - it('should export plugin', () => { - expect(quayPlugin).toBeDefined(); - }); -}); diff --git a/plugins/quay/src/plugin.ts b/plugins/quay/src/plugin.ts deleted file mode 100644 index 7abb3a1fb3..0000000000 --- a/plugins/quay/src/plugin.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { Entity } from '@backstage/catalog-model'; -import { - configApiRef, - createApiFactory, - createPlugin, - createRoutableExtension, - discoveryApiRef, - identityApiRef, -} from '@backstage/core-plugin-api'; - -import { QuayApiClient, quayApiRef } from './api'; -import { QUAY_ANNOTATION_REPOSITORY } from './hooks'; -import { rootRouteRef, tagRouteRef } from './routes'; - -export const quayPlugin = createPlugin({ - id: 'quay', - routes: { - root: rootRouteRef, - tag: tagRouteRef, - }, - apis: [ - createApiFactory({ - api: quayApiRef, - deps: { - discoveryApi: discoveryApiRef, - configApi: configApiRef, - identityApi: identityApiRef, - }, - factory: ({ discoveryApi, configApi, identityApi }) => - new QuayApiClient({ discoveryApi, configApi, identityApi }), - }), - ], -}); - -export const QuayPage = quayPlugin.provide( - createRoutableExtension({ - name: 'QuayPage', - component: () => import('./components/Router').then(m => m.Router), - mountPoint: rootRouteRef, - }), -); - -export const isQuayAvailable = (entity: Entity) => - Boolean(entity?.metadata.annotations?.[QUAY_ANNOTATION_REPOSITORY]); diff --git a/plugins/quay/src/routes.ts b/plugins/quay/src/routes.ts deleted file mode 100644 index f176fe907f..0000000000 --- a/plugins/quay/src/routes.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { createRouteRef, createSubRouteRef } from '@backstage/core-plugin-api'; - -export const rootRouteRef = createRouteRef({ - id: 'quay', -}); - -export const tagRouteRef = createSubRouteRef({ - id: 'quay-tag', - parent: rootRouteRef, - path: '/tag/:digest', -}); diff --git a/plugins/quay/src/setupTests.ts b/plugins/quay/src/setupTests.ts deleted file mode 100644 index 48c09b5346..0000000000 --- a/plugins/quay/src/setupTests.ts +++ /dev/null @@ -1,2 +0,0 @@ -import '@testing-library/jest-dom'; -import 'cross-fetch/polyfill'; diff --git a/plugins/quay/src/types.ts b/plugins/quay/src/types.ts deleted file mode 100644 index d9f3b56eb4..0000000000 --- a/plugins/quay/src/types.ts +++ /dev/null @@ -1,159 +0,0 @@ -export interface TagsResponse { - page: number; - has_additional: boolean; - tags: Tag[]; -} - -export interface Tag { - name: string; - is_manifest_list: boolean; - last_modified: string; - manifest_digest: string; - reversion: boolean; - size: number; - start_ts?: number; - end_ts?: number; - manifest_list?: ManifestList; - expiration?: string; -} - -export interface LabelsResponse { - labels: Label[]; -} -export interface QuayTagData { - id: string; - name: string; - last_modified: string; - size: string; - rawSize: number; - manifest_digest: React.JSX.Element; - expiration?: string; - securityDetails: Layer; - securityStatus: string; - manifest_digest_raw: string; -} -export interface Label { - id: string; - key: string; - value: string; - source_type: string; - media_type: string; -} - -export interface ManifestList { - schemaVersion: number; - mediaType: string; - manifests: Manifest[]; -} - -export interface Manifest { - mediaType: string; - size: number; - digest: string; - platform: Platform; - security: SecurityDetailsResponse; - layers: Layer[]; -} - -export interface Platform { - architecture: string; - os: string; - features?: string[]; - variant?: string; - 'os.version'?: string; -} - -export interface SecurityDetailsResponse { - status: 'unsupported' | 'unscanned' | 'scanning' | 'scanned' | 'queued'; - data: Data | null; -} -export interface Data { - Layer: Layer; -} -export interface Layer { - Name: string; - ParentName: string; - NamespaceName: string; - IndexedByVersion: number; - Features: Feature[]; -} -export interface Feature { - Name: string; - VersionFormat: string; - NamespaceName: string; - AddedBy: string; - Version: string; - Vulnerabilities?: Vulnerability[]; - BaseScores?: number[]; - CVEIds?: string[]; -} - -export interface Vulnerability { - Severity: VulnerabilitySeverity; - NamespaceName: string; - Link: string; - FixedBy: string; - Description: string; - Name: string; - Metadata: VulnerabilityMetadata; -} - -export interface VulnerabilityMetadata { - UpdatedBy: string; - RepoName: string | null; - RepoLink: string | null; - DistroName: string; - DistroVersion: string; - NVD: { - CVSSv3: { - Vectors: string; - Score: number | string; - }; - }; -} - -export enum VulnerabilitySeverity { - Critical = 'Critical', - High = 'High', - Medium = 'Medium', - Low = 'Low', - Negligible = 'Negligible', - None = 'None', - Unknown = 'Unknown', -} - -export const VulnerabilityOrder = { - [VulnerabilitySeverity.Critical]: 0, - [VulnerabilitySeverity.High]: 1, - [VulnerabilitySeverity.Medium]: 2, - [VulnerabilitySeverity.Low]: 3, - [VulnerabilitySeverity.Negligible]: 4, - [VulnerabilitySeverity.None]: 5, - [VulnerabilitySeverity.Unknown]: 6, -}; - -export interface ManifestByDigestResponse { - digest: string; - is_manifest_list: boolean; - manifest_data: string; - config_media_type: string; - layers: LayerByDigest[]; - layers_compressed_size: number; -} - -export interface LayerByDigest { - index: number; - compressed_size: number; - is_remote: boolean; - urls: string[] | null; - command: string[] | null; - comment: string | null; - author: string | null; - blob_digest: string; - created_datetime: string; -} - -export interface VulnerabilityListItem extends Vulnerability { - PackageName: string; - CurrentVersion: string; -} diff --git a/plugins/quay/tests/quay.spec.ts b/plugins/quay/tests/quay.spec.ts deleted file mode 100644 index c33f2dd2c8..0000000000 --- a/plugins/quay/tests/quay.spec.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { expect, Page, test } from '@playwright/test'; - -import { Common } from './quayHelper'; - -test.describe('Quay plugin', () => { - let page: Page; - let common: Common; - - test.beforeAll(async ({ browser }) => { - const context = await browser.newContext(); - page = await context.newPage(); - common = new Common(page); - - await common.loginAsGuest(); - await expect( - page.getByRole('link', { name: 'backstage-test/test-images' }), - ).toBeEnabled({ timeout: 20000 }); - }); - - test.afterAll(async ({ browser }) => { - await browser.close(); - }); - - test('All columns are shown in the table', async () => { - const columns = [ - 'Tag', - 'Last Modified', - 'Security Scan', - 'Size', - 'Expires', - 'Manifest', - ]; - const thead = page.locator('thead'); - - for (const col of columns) { - await expect(thead.getByText(col)).toBeVisible(); - } - }); - - test('Vulnerabilities are listed', async () => { - const severity = ['High:', 'Medium:', 'Low:']; - for (const lvl of severity) { - const tagWithAllVulnerabilities = await page.getByTestId( - 'latest-linux-arm64-security-scan', - ); - await expect(tagWithAllVulnerabilities).toContainText(lvl); - } - }); - - test('Vulnerability details are accessible', async () => { - await page.getByRole('link', { name: 'High' }).first().click(); - await expect(page.getByText('Vulnerabilities for')).toBeVisible({ - timeout: 15000, - }); - }); - - test('Vulnerability columns are shown', async () => { - const columns = [ - 'Advisory', - 'Severity', - 'Package Name', - 'Current Version', - 'Fixed By', - ]; - - for (const col of columns) { - await expect(page.getByText(col)).toBeVisible(); - } - }); - - test('Vulnerability rows are shown', async () => { - const tbody = page.locator('tbody'); - await expect(tbody.locator('tr')).toHaveCount(5); - }); - - test('Link back to repository works', async () => { - await page.getByRole('link', { name: 'Back to repository' }).click(); - await expect( - page.getByRole('link', { name: 'backstage-test/test-images' }), - ).toBeEnabled(); - }); -}); diff --git a/plugins/quay/tests/quayHelper.ts b/plugins/quay/tests/quayHelper.ts deleted file mode 100644 index 888eecc39f..0000000000 --- a/plugins/quay/tests/quayHelper.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { expect, type Locator, type Page } from '@playwright/test'; - -export class Common { - page: Page; - - constructor(page: Page) { - this.page = page; - } - - async verifyHeading(heading: string) { - const headingLocator = this.page - .locator('h1, h2, h3, h4, h5, h6') - .filter({ hasText: heading }) - .first(); - await headingLocator.waitFor({ state: 'visible', timeout: 30000 }); - await expect(headingLocator).toBeVisible(); - } - - async clickButton( - label: string, - clickOpts?: Parameters[0], - getByTextOpts: Parameters[1] = { exact: true }, - ) { - const muiButtonLabel = 'span[class^="MuiButton-label"]'; - const selector = `${muiButtonLabel}:has-text("${label}")`; - const button = this.page - .locator(selector) - .getByText(label, getByTextOpts) - .first(); - await button.waitFor({ state: 'visible' }); - await button.click(clickOpts); - } - - async waitForSideBarVisible() { - await this.page.waitForSelector('nav a', { timeout: 120000 }); - } - - async loginAsGuest() { - await this.page.goto('/'); - // TODO - Remove it after https://issues.redhat.com/browse/RHIDP-2043. A Dynamic plugin for Guest Authentication Provider needs to be created - this.page.on('dialog', async dialog => { - await dialog.accept(); - }); - - await this.verifyHeading('Select a sign-in method'); - await this.clickButton('Enter'); - await this.waitForSideBarVisible(); - } -} diff --git a/plugins/quay/tsconfig.json b/plugins/quay/tsconfig.json deleted file mode 100644 index 68db64e6db..0000000000 --- a/plugins/quay/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "@backstage/cli/config/tsconfig.json", - "include": ["src", "dev", "migrations"], - "exclude": ["node_modules"], - "compilerOptions": { - "outDir": "../../dist-types/plugins/quay", - "rootDir": "." - } -} diff --git a/plugins/quay/turbo.json b/plugins/quay/turbo.json deleted file mode 100644 index e2f4b4c494..0000000000 --- a/plugins/quay/turbo.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": ["//"], - "tasks": { - "tsc": { - "outputs": ["../../dist-types/plugins/quay/**"] - } - } -} diff --git a/yarn.lock b/yarn.lock index da6e7a73e4..10e3ee1364 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8376,57 +8376,6 @@ __metadata: languageName: unknown linkType: soft -"@janus-idp/backstage-plugin-quay-common@^1.3.1, @janus-idp/backstage-plugin-quay-common@workspace:plugins/quay-common": - version: 0.0.0-use.local - resolution: "@janus-idp/backstage-plugin-quay-common@workspace:plugins/quay-common" - dependencies: - "@backstage/cli": 0.28.2 - prettier: 3.3.3 - peerDependencies: - "@backstage/plugin-permission-common": ^0.8.1 - react: 16.13.1 || ^17.0.0 || ^18.0.0 - languageName: unknown - linkType: soft - -"@janus-idp/backstage-plugin-quay@workspace:plugins/quay": - version: 0.0.0-use.local - resolution: "@janus-idp/backstage-plugin-quay@workspace:plugins/quay" - dependencies: - "@backstage/catalog-model": ^1.7.0 - "@backstage/cli": 0.28.2 - "@backstage/core-app-api": 1.15.1 - "@backstage/core-components": ^0.15.1 - "@backstage/core-plugin-api": ^1.10.0 - "@backstage/dev-utils": 1.1.2 - "@backstage/plugin-catalog-common": ^1.1.0 - "@backstage/plugin-catalog-react": ^1.14.0 - "@backstage/plugin-permission-react": ^0.4.27 - "@backstage/test-utils": 1.7.0 - "@backstage/theme": ^0.6.0 - "@janus-idp/backstage-plugin-quay-common": ^1.3.1 - "@janus-idp/shared-react": ^2.13.1 - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.11.3 - "@material-ui/lab": 4.0.0-alpha.61 - "@playwright/test": 1.45.3 - "@redhat-developer/red-hat-developer-hub-theme": 0.4.0 - "@testing-library/jest-dom": 6.4.8 - "@testing-library/react": 14.3.1 - "@testing-library/react-hooks": 8.0.1 - "@testing-library/user-event": 14.5.2 - "@types/node": 18.19.34 - cross-fetch: 4.0.0 - msw: 1.3.3 - prettier: 3.3.3 - react-use: ^17.4.0 - start-server-and-test: 2.0.8 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: ^6.0.0 - languageName: unknown - linkType: soft - "@janus-idp/backstage-plugin-rbac-backend-module-test@workspace:plugins/rbac-backend-module-test": version: 0.0.0-use.local resolution: "@janus-idp/backstage-plugin-rbac-backend-module-test@workspace:plugins/rbac-backend-module-test"