From 6c6d91a74e3dce78d39120a5b49698d35a553348 Mon Sep 17 00:00:00 2001 From: Rush Kapoor Date: Mon, 18 Aug 2025 10:59:04 -0700 Subject: [PATCH 1/4] fix: Fix Scan History table column sorting and `Progress` column cell formatter --- .../config/table-headers.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pkg/sbombastic-image-vulnerability-scanner/config/table-headers.ts b/pkg/sbombastic-image-vulnerability-scanner/config/table-headers.ts index 88720e4..2e944e7 100644 --- a/pkg/sbombastic-image-vulnerability-scanner/config/table-headers.ts +++ b/pkg/sbombastic-image-vulnerability-scanner/config/table-headers.ts @@ -65,7 +65,7 @@ export const REGISTRY_SCAN_HISTORY_TABLE = [ labelKey: "imageScanner.registries.configuration.scanTable.header.status", value: "status.statusResult.type", formatter: "RegistryStatusCellBadge", - sort: "status", + sort: "status.statusResult.type", width: 100, }, { @@ -73,13 +73,13 @@ export const REGISTRY_SCAN_HISTORY_TABLE = [ labelKey: "imageScanner.registries.configuration.scanTable.header.since", value: "status.statusResult.lastTransitionTime", formatter: "Date", - sort: "timestamp", + sort: "status.statusResult.lastTransitionTime:desc", }, { name: "progress", labelKey: "imageScanner.registries.configuration.scanTable.header.progress", getValue: (row: any) => row, - formatter: "ProgressCell", + formatter: "Progress", sort: "progress", }, { @@ -87,14 +87,14 @@ export const REGISTRY_SCAN_HISTORY_TABLE = [ labelKey: "imageScanner.registries.configuration.scanTable.header.imagesScanned", value: "status.scannedImagesCount", - sort: "imagesScanned", + sort: "status.scannedImagesCount", }, { name: "imagesFound", labelKey: "imageScanner.registries.configuration.scanTable.header.imagesFound", value: "status.imagesCount", - sort: "imagesFound", + sort: "status.imagesCount", }, { name: "errors", @@ -133,7 +133,7 @@ export const VEX_MANAGEMENT_TABLE = [ labelKey: "imageScanner.vexManagement.table.headers.createdBy", value: (row: any) => { const gen = Number(row?.metadata?.generation); - return (gen === 1) ? 'Rancher' : 'Manual entry'; + return gen === 1 ? "Rancher" : "Manual entry"; }, sort: "metadata.generation", }, From af33925136df0dcd277fa706fcd960af8db09801 Mon Sep 17 00:00:00 2001 From: Rush Kapoor Date: Mon, 18 Aug 2025 14:06:12 -0700 Subject: [PATCH 2/4] Add Registry Details action menu --- .../components/RegistryDetails.vue | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/pkg/sbombastic-image-vulnerability-scanner/components/RegistryDetails.vue b/pkg/sbombastic-image-vulnerability-scanner/components/RegistryDetails.vue index 6d2ccf6..d87922a 100644 --- a/pkg/sbombastic-image-vulnerability-scanner/components/RegistryDetails.vue +++ b/pkg/sbombastic-image-vulnerability-scanner/components/RegistryDetails.vue @@ -24,6 +24,13 @@ {{ t('imageScanner.general.refresh') }} + @@ -36,6 +43,7 @@ import { BadgeState } from '@rancher/components'; import { PRODUCT_NAME, RESOURCE, PAGE } from '@sbombastic-image-vulnerability-scanner/types'; import ResourceTable from "@shell/components/ResourceTable"; + import ActionMenu from '@shell/components/ActionMenuShell.vue'; import RancherMeta from './common/RancherMeta.vue'; import RegisterStatusBadge from './common/RegisterStatusBadge.vue'; import RegistryDetailScanTable from './RegistryDetailScanTable.vue'; @@ -49,13 +57,15 @@ RancherMeta, RegisterStatusBadge, RegistryDetailScanTable, - ScanButton + ScanButton, + ActionMenu }, data() { return { PRODUCT_NAME, RESOURCE, PAGE, + registry: null, registryStatus: null, registryMetadata: [], scanHistory: [], @@ -122,6 +132,7 @@ } }) }); + this.registry = registry; }, getRegistryStatus(registry) { if (!registry || !registry.status || !registry.status.conditions || !registry.status.conditions.length) { @@ -217,6 +228,17 @@ display: flex; align-items: center; gap: 16px; + + &:deep() button[data-testid="masthead-action-menu"] { + border-radius: 4px; + width: 35px; + height: 40px; + + display: inline-flex; + flex-direction: row; + justify-content: center; + align-items: center; + } } } } From 8755cab72757854673dca7a00df673e7e7a045d2 Mon Sep 17 00:00:00 2001 From: Rush Kapoor Date: Mon, 18 Aug 2025 14:27:54 -0700 Subject: [PATCH 3/4] fix: Remove Scan option in action menu on details page --- .../models/sbombastic.rancher.io.registry.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pkg/sbombastic-image-vulnerability-scanner/models/sbombastic.rancher.io.registry.js b/pkg/sbombastic-image-vulnerability-scanner/models/sbombastic.rancher.io.registry.js index fae1199..ae0b95a 100644 --- a/pkg/sbombastic-image-vulnerability-scanner/models/sbombastic.rancher.io.registry.js +++ b/pkg/sbombastic-image-vulnerability-scanner/models/sbombastic.rancher.io.registry.js @@ -7,6 +7,11 @@ export default class Registry extends SteveModel { console.log("Registry _availableActions"); const out = super._availableActions.filter(action => !['download','downloadYaml'].includes(action.action)); + // In details page, we don't want to show the scan action + if (this.$rootState.targetRoute && 'id' in this.$rootState.targetRoute.params) { + return out; + } + const scanAction = { action: 'scanRegistry', label: this.t('imageScanner.registries.button.startScan'), From 29275b794df11572b0f8f2356ba4c5c18e5c80a1 Mon Sep 17 00:00:00 2001 From: Rush Kapoor Date: Mon, 18 Aug 2025 14:56:14 -0700 Subject: [PATCH 4/4] fix: Add Schedule field to Registry detail metadata --- .../components/RegistryDetails.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/sbombastic-image-vulnerability-scanner/components/RegistryDetails.vue b/pkg/sbombastic-image-vulnerability-scanner/components/RegistryDetails.vue index d87922a..ac10cad 100644 --- a/pkg/sbombastic-image-vulnerability-scanner/components/RegistryDetails.vue +++ b/pkg/sbombastic-image-vulnerability-scanner/components/RegistryDetails.vue @@ -113,7 +113,7 @@ }, { type: 'text', - value: registry.metadata.schedule || '', + value: registry.spec.scanInterval || '', } ];