From c983df3970493da6c990582a0bfc22c000e6deba Mon Sep 17 00:00:00 2001 From: sowmya-sl Date: Fri, 14 Aug 2026 17:04:41 +0530 Subject: [PATCH 1/4] OCPBUGS-105603: Fix OCI chart URL double-version append on install Make getFullChartURL idempotent by stripping any existing version tag before appending, so URLs like oci://registry/chart:1.0.0 don't become chart:1.0.0:1.0.0. Move version stripping out of the useEffect in HelmURLChartForm to avoid mutating the URL field while the user types. --- .../components/forms/url-chart/HelmURLChartInstallPage.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/frontend/packages/helm-plugin/src/components/forms/url-chart/HelmURLChartInstallPage.tsx b/frontend/packages/helm-plugin/src/components/forms/url-chart/HelmURLChartInstallPage.tsx index f1367bd4847..f55c5af64cc 100644 --- a/frontend/packages/helm-plugin/src/components/forms/url-chart/HelmURLChartInstallPage.tsx +++ b/frontend/packages/helm-plugin/src/components/forms/url-chart/HelmURLChartInstallPage.tsx @@ -34,8 +34,10 @@ import { WizardStep } from './types'; // Only OCI refs use tag (chart:version); HTTP/HTTPS chart URLs (.tgz) must not have :version appended const getFullChartURL = (chartURL: string, chartVersion: string): string => { if (!chartVersion) return chartURL; - const isOCI = chartURL.startsWith('oci://'); - return isOCI ? `${chartURL}:${chartVersion}` : chartURL; + if (!chartURL.startsWith('oci://')) return chartURL; + const tag = `:${chartVersion}`; + const base = chartURL.endsWith(tag) ? chartURL.slice(0, -tag.length) : chartURL; + return `${base}:${chartVersion}`; }; const HelmURLChartInstallPage: FunctionComponent = () => { From a15818817faf22de61f3f418f4560934b33c08c0 Mon Sep 17 00:00:00 2001 From: sowmya-sl Date: Tue, 18 Aug 2026 12:59:29 +0530 Subject: [PATCH 2/4] OCPBUGS-105603: Handle OCI scheme case-insensitively in getFullChartURL Use a case-insensitive regex for the OCI scheme check so uppercase or mixed-case OCI URLs (e.g. OCI://registry/chart) are handled correctly when appending the version tag. Co-authored-by: Cursor --- .../src/components/forms/url-chart/HelmURLChartInstallPage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/packages/helm-plugin/src/components/forms/url-chart/HelmURLChartInstallPage.tsx b/frontend/packages/helm-plugin/src/components/forms/url-chart/HelmURLChartInstallPage.tsx index f55c5af64cc..67e0121e7c0 100644 --- a/frontend/packages/helm-plugin/src/components/forms/url-chart/HelmURLChartInstallPage.tsx +++ b/frontend/packages/helm-plugin/src/components/forms/url-chart/HelmURLChartInstallPage.tsx @@ -34,7 +34,7 @@ import { WizardStep } from './types'; // Only OCI refs use tag (chart:version); HTTP/HTTPS chart URLs (.tgz) must not have :version appended const getFullChartURL = (chartURL: string, chartVersion: string): string => { if (!chartVersion) return chartURL; - if (!chartURL.startsWith('oci://')) return chartURL; + if (!/^oci:\/\//i.test(chartURL)) return chartURL; const tag = `:${chartVersion}`; const base = chartURL.endsWith(tag) ? chartURL.slice(0, -tag.length) : chartURL; return `${base}:${chartVersion}`; From 7e988c4f57f481d80214d8a68b0a1fc5cce21a68 Mon Sep 17 00:00:00 2001 From: sowmya-sl Date: Wed, 19 Aug 2026 17:18:31 +0530 Subject: [PATCH 3/4] OCPBUGS-105603: Simplify getFullChartURL to avoid redundant strip-and-reappend Only append the version tag when it's not already present, rather than stripping and re-adding it. Combines all conditions into a single ternary expression per review feedback. Co-authored-by: Cursor --- .../forms/url-chart/HelmURLChartInstallPage.tsx | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/frontend/packages/helm-plugin/src/components/forms/url-chart/HelmURLChartInstallPage.tsx b/frontend/packages/helm-plugin/src/components/forms/url-chart/HelmURLChartInstallPage.tsx index 67e0121e7c0..19d183f8840 100644 --- a/frontend/packages/helm-plugin/src/components/forms/url-chart/HelmURLChartInstallPage.tsx +++ b/frontend/packages/helm-plugin/src/components/forms/url-chart/HelmURLChartInstallPage.tsx @@ -32,13 +32,10 @@ import type { HelmURLChartFormData, HelmURLInstallFormData } from './types'; import { WizardStep } from './types'; // Only OCI refs use tag (chart:version); HTTP/HTTPS chart URLs (.tgz) must not have :version appended -const getFullChartURL = (chartURL: string, chartVersion: string): string => { - if (!chartVersion) return chartURL; - if (!/^oci:\/\//i.test(chartURL)) return chartURL; - const tag = `:${chartVersion}`; - const base = chartURL.endsWith(tag) ? chartURL.slice(0, -tag.length) : chartURL; - return `${base}:${chartVersion}`; -}; +const getFullChartURL = (chartURL: string, chartVersion: string): string => + chartVersion && /^oci:\/\//i.test(chartURL) && !chartURL.endsWith(`:${chartVersion}`) + ? `${chartURL}:${chartVersion}` + : chartURL; const HelmURLChartInstallPage: FunctionComponent = () => { const params = useParams(); From 78e910fad5ed6787e2e4f6f598fc0b0d1bc81ab4 Mon Sep 17 00:00:00 2001 From: sowmya-sl Date: Fri, 21 Aug 2026 15:39:41 +0530 Subject: [PATCH 4/4] OCPBUGS-105603: Strip existing OCI tag before appending new version Replace any existing tag in the OCI URL before appending chartVersion, so changing the version from 1.0.0 to 2.0.0 produces chart:2.0.0 instead of chart:1.0.0:2.0.0. Registry ports are preserved since the regex only matches the last colon with no trailing slashes. Co-authored-by: Cursor --- .../forms/url-chart/HelmURLChartInstallPage.tsx | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/frontend/packages/helm-plugin/src/components/forms/url-chart/HelmURLChartInstallPage.tsx b/frontend/packages/helm-plugin/src/components/forms/url-chart/HelmURLChartInstallPage.tsx index 19d183f8840..3d19b7e6f63 100644 --- a/frontend/packages/helm-plugin/src/components/forms/url-chart/HelmURLChartInstallPage.tsx +++ b/frontend/packages/helm-plugin/src/components/forms/url-chart/HelmURLChartInstallPage.tsx @@ -32,10 +32,11 @@ import type { HelmURLChartFormData, HelmURLInstallFormData } from './types'; import { WizardStep } from './types'; // Only OCI refs use tag (chart:version); HTTP/HTTPS chart URLs (.tgz) must not have :version appended -const getFullChartURL = (chartURL: string, chartVersion: string): string => - chartVersion && /^oci:\/\//i.test(chartURL) && !chartURL.endsWith(`:${chartVersion}`) - ? `${chartURL}:${chartVersion}` - : chartURL; +const getFullChartURL = (chartURL: string, chartVersion: string): string => { + if (!chartVersion || !/^oci:\/\//i.test(chartURL)) return chartURL; + const base = chartURL.replace(/:[^/]+$/, ''); + return `${base}:${chartVersion}`; +}; const HelmURLChartInstallPage: FunctionComponent = () => { const params = useParams();