From 0f528103e39b046f9eac27b4c8443a8f42bb9c31 Mon Sep 17 00:00:00 2001 From: Naveen Kumar Date: Fri, 23 Jan 2026 21:56:27 +0530 Subject: [PATCH 1/6] Added test case for rbc command from release bundle source with in a project --- go.mod | 3 ++- go.sum | 4 ++-- lifecycle_test.go | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 36 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index e42be5e90..b1cb6175b 100644 --- a/go.mod +++ b/go.mod @@ -284,7 +284,8 @@ replace github.com/gfleury/go-bitbucket-v1 => github.com/gfleury/go-bitbucket-v1 //replace github.com/jfrog/jfrog-cli-core/v2 => ../jfrog-cli-core -// replace github.com/jfrog/jfrog-cli-artifactory => github.com/fluxxBot/jfrog-cli-artifactory v0.0.0-20260105073552-ae4f86048a11 +replace github.com/jfrog/jfrog-cli-artifactory => github.com/naveenku-jfrog/jfrog-cli-artifactory v0.0.0-20260123161704-7266892fd60c + // //replace github.com/jfrog/build-info-go => github.com/fluxxBot/build-info-go v1.10.10-0.20260105070825-d3f36f619ba5 // diff --git a/go.sum b/go.sum index d3b15d43c..9c9cb8ff7 100644 --- a/go.sum +++ b/go.sum @@ -1216,8 +1216,6 @@ github.com/jfrog/jfrog-apps-config v1.0.1 h1:mtv6k7g8A8BVhlHGlSveapqf4mJfonwvXYL github.com/jfrog/jfrog-apps-config v1.0.1/go.mod h1:8AIIr1oY9JuH5dylz2S6f8Ym2MaadPLR6noCBO4C22w= github.com/jfrog/jfrog-cli-application v1.0.2-0.20260107143435-b30ede954432 h1:6eOOs+326IrWLVA+ghDDudJmN3Nt8lxPl11eOu8vtPE= github.com/jfrog/jfrog-cli-application v1.0.2-0.20260107143435-b30ede954432/go.mod h1:xum2HquWO5uExa/A7MQs3TgJJVEeoqTR+6Z4mfBr1Xw= -github.com/jfrog/jfrog-cli-artifactory v0.8.1-0.20260120063955-c654c159290e h1:F/VQ7UJ4jaEr9tLJ8jLfy4BF4Obhhd0pWu007SBSHt8= -github.com/jfrog/jfrog-cli-artifactory v0.8.1-0.20260120063955-c654c159290e/go.mod h1:LbhCULfa/eIPSXNgQ5Xw8BIZRmJ0qfF2I4sPa7AHXkY= github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20260112010739-87fc7275623c h1:K9anqOZ7ASxlsijsl9u4jh92wqqIvJA4kTYfXrcOmJA= github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20260112010739-87fc7275623c/go.mod h1:+Hnaikp/xCSPD/q7txxRy4Zc0wzjW/usrCSf+6uONSQ= github.com/jfrog/jfrog-cli-evidence v0.8.3-0.20251225153025-9d8ac181d615 h1:y5an0bojHL00ipHP1QuBUrVcP+XK+yZHHOJ/r1I0RUM= @@ -1327,6 +1325,8 @@ github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/naveenku-jfrog/jfrog-cli-artifactory v0.0.0-20260123161704-7266892fd60c h1:TLkawLWlTQfx7sgNc03alNjBVWON25YXD+ClDecHPf8= +github.com/naveenku-jfrog/jfrog-cli-artifactory v0.0.0-20260123161704-7266892fd60c/go.mod h1:LbhCULfa/eIPSXNgQ5Xw8BIZRmJ0qfF2I4sPa7AHXkY= github.com/nwaples/rardecode v1.1.3 h1:cWCaZwfM5H7nAD6PyEdcVnczzV8i/JtotnyW/dD9lEc= github.com/nwaples/rardecode v1.1.3/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw= diff --git a/lifecycle_test.go b/lifecycle_test.go index 2708ccc63..e2dbda483 100644 --- a/lifecycle_test.go +++ b/lifecycle_test.go @@ -150,6 +150,38 @@ func TestReleaseBundleCreationFromMultipleBuildsAndBundlesUsingCommandFlags(t *t assertStatusCompleted(t, lcManager, tests.LcRbName3, number3, "") } +func TestReleaseBundleCreationFromMultiBundlesUsingCommandFlagWithProject(t *testing.T) { + cleanCallback := initLifecycleTest(t, minMultiSourcesArtifactoryVersion) + defer cleanCallback() + deleteProject := createTestProject(t) + if deleteProject != nil { + defer func() { + if err := deleteProject(); err != nil { + t.Error(err) + } + }() + } + lcManager := getLcServiceManager(t) + + deleteBuilds := uploadBuildsWithProject(t) + defer deleteBuilds() + + // Create first release bundle from builds with project + createRbWithFlags(t, "", "", tests.LcBuildName1, number1, tests.LcRbName1, number1, tests.ProjectKey, true, true) + defer deleteReleaseBundleWithProject(t, lcManager, tests.LcRbName1, number1, tests.ProjectKey) + assertStatusCompletedWithProject(t, lcManager, tests.LcRbName1, number1, "", tests.ProjectKey) + + // Create second release bundle from builds with project + createRbWithFlags(t, "", "", tests.LcBuildName2, number2, tests.LcRbName2, number2, tests.ProjectKey, true, true) + defer deleteReleaseBundleWithProject(t, lcManager, tests.LcRbName2, number2, tests.ProjectKey) + assertStatusCompletedWithProject(t, lcManager, tests.LcRbName2, number2, "", tests.ProjectKey) + + // Create release bundle from the two previous release bundles with project + createRbFromMultiSourcesUsingCommandFlags(t, lcManager, "", createReleaseBundlesSource(), tests.LcRbName3, number3, tests.ProjectKey, true) + defer deleteReleaseBundleWithProject(t, lcManager, tests.LcRbName3, number3, tests.ProjectKey) + assertStatusCompletedWithProject(t, lcManager, tests.LcRbName3, number3, "", tests.ProjectKey) +} + func TestReleaseBundleCreationFromMultipleSourcesUsingSpec(t *testing.T) { cleanCallback := initLifecycleTest(t, minMultiSourcesArtifactoryVersion) From 3d8d69bed2bc35b2a8f7be63b2aefa7c30f29b7b Mon Sep 17 00:00:00 2001 From: Naveen Kumar Date: Fri, 23 Jan 2026 22:16:28 +0530 Subject: [PATCH 2/6] Added test case for rbc command from release bundle source with in a project --- lifecycle_test.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/lifecycle_test.go b/lifecycle_test.go index e2dbda483..3ee86d7e4 100644 --- a/lifecycle_test.go +++ b/lifecycle_test.go @@ -171,11 +171,24 @@ func TestReleaseBundleCreationFromMultiBundlesUsingCommandFlagWithProject(t *tes defer deleteReleaseBundleWithProject(t, lcManager, tests.LcRbName1, number1, tests.ProjectKey) assertStatusCompletedWithProject(t, lcManager, tests.LcRbName1, number1, "", tests.ProjectKey) + // Verify first release bundle exists with project + isExist, err := lcManager.IsReleaseBundleExist(tests.LcRbName1, number1, tests.ProjectKey) + assert.NoError(t, err) + assert.True(t, isExist, "Release bundle %s/%s should exist in project %s", tests.LcRbName1, number1, tests.ProjectKey) + // Create second release bundle from builds with project createRbWithFlags(t, "", "", tests.LcBuildName2, number2, tests.LcRbName2, number2, tests.ProjectKey, true, true) defer deleteReleaseBundleWithProject(t, lcManager, tests.LcRbName2, number2, tests.ProjectKey) assertStatusCompletedWithProject(t, lcManager, tests.LcRbName2, number2, "", tests.ProjectKey) + // Verify second release bundle exists with project + isExist, err = lcManager.IsReleaseBundleExist(tests.LcRbName2, number2, tests.ProjectKey) + assert.NoError(t, err) + assert.True(t, isExist, "Release bundle %s/%s should exist in project %s", tests.LcRbName2, number2, tests.ProjectKey) + + // Wait a bit to ensure release bundles are fully indexed before using them as sources + time.Sleep(5 * time.Second) + // Create release bundle from the two previous release bundles with project createRbFromMultiSourcesUsingCommandFlags(t, lcManager, "", createReleaseBundlesSource(), tests.LcRbName3, number3, tests.ProjectKey, true) defer deleteReleaseBundleWithProject(t, lcManager, tests.LcRbName3, number3, tests.ProjectKey) @@ -223,6 +236,7 @@ func TestReleaseBundleCreationFromArtifactsWithoutSigningKey(t *testing.T) { testReleaseBundleCreation(t, tests.UploadDevSpec, tests.LifecycleArtifacts, tests.GetExpectedLifecycleCreationByArtifacts(), withoutSigningKey) } +//nolint:unparam // sync parameter is kept for API consistency with existing tests func createRbFromMultiSourcesUsingCommandFlags(t *testing.T, lcManager *lifecycle.LifecycleServicesManager, buildsSourcesOption, bundlesSourcesOption, rbName, rbVersion, project string, sync bool, ) { @@ -612,6 +626,8 @@ func assertStatusCompleted(t *testing.T, lcManager *lifecycle.LifecycleServicesM } // If createdMillis is provided, assert status for promotion. If blank, assert for creation. +// +//nolint:unparam // createdMillis parameter is kept for API consistency with existing tests func assertStatusCompletedWithProject(t *testing.T, lcManager *lifecycle.LifecycleServicesManager, rbName, rbVersion, createdMillis, projectKey string) { resp, err := getStatusWithProject(lcManager, rbName, rbVersion, createdMillis, projectKey) if !assert.NoError(t, err) { From a6949ffeca46b0293d2a1d8be385cc73e594e84b Mon Sep 17 00:00:00 2001 From: Naveen Kumar Date: Fri, 23 Jan 2026 23:41:31 +0530 Subject: [PATCH 3/6] Added test case for rbc command from release bundle source with in a project --- lifecycle_test.go | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/lifecycle_test.go b/lifecycle_test.go index 3ee86d7e4..bfe61211a 100644 --- a/lifecycle_test.go +++ b/lifecycle_test.go @@ -256,6 +256,20 @@ func createRbFromMultiSourcesUsingCommandFlags(t *testing.T, lcManager *lifecycl assert.NoError(t, err) } +func populateRepositoryKeyForReleaseBundleSources(sources []services.RbSource) { + if len(sources) == 0 || sources[0].SourceType != "release_bundles" { + return + } + for i := range sources { + for j := range sources[i].ReleaseBundles { + rb := &sources[i].ReleaseBundles[j] + if rb.ProjectKey != "" { + rb.RepositoryKey = rb.ProjectKey + "-release-bundles-v2" + } + } + } +} + func buildMultiSources(sources []services.RbSource, buildsSourcesStr, bundlesSourcesStr, projectKey string) []services.RbSource { // Process Builds if buildsSourcesStr != "" { @@ -265,6 +279,9 @@ func buildMultiSources(sources []services.RbSource, buildsSourcesStr, bundlesSou // Process Release Bundles if bundlesSourcesStr != "" { sources = buildMultiBundleSources(sources, bundlesSourcesStr, projectKey) + if projectKey != "" { + populateRepositoryKeyForReleaseBundleSources(sources) + } } return sources From af82319e61886048932b76921d65e645fb11593a Mon Sep 17 00:00:00 2001 From: Naveen Kumar Date: Sat, 24 Jan 2026 00:03:45 +0530 Subject: [PATCH 4/6] Fixing the test case --- lifecycle_test.go | 43 +++++++++++++++++++++++++++++++++---------- 1 file changed, 33 insertions(+), 10 deletions(-) diff --git a/lifecycle_test.go b/lifecycle_test.go index bfe61211a..3319736b4 100644 --- a/lifecycle_test.go +++ b/lifecycle_test.go @@ -190,7 +190,7 @@ func TestReleaseBundleCreationFromMultiBundlesUsingCommandFlagWithProject(t *tes time.Sleep(5 * time.Second) // Create release bundle from the two previous release bundles with project - createRbFromMultiSourcesUsingCommandFlags(t, lcManager, "", createReleaseBundlesSource(), tests.LcRbName3, number3, tests.ProjectKey, true) + createRbFromMultiSourcesUsingCommandFlagsWithProject(t, lcManager, "", createReleaseBundlesSource(), tests.LcRbName3, number3, tests.ProjectKey, true) defer deleteReleaseBundleWithProject(t, lcManager, tests.LcRbName3, number3, tests.ProjectKey) assertStatusCompletedWithProject(t, lcManager, tests.LcRbName3, number3, "", tests.ProjectKey) } @@ -256,15 +256,41 @@ func createRbFromMultiSourcesUsingCommandFlags(t *testing.T, lcManager *lifecycl assert.NoError(t, err) } -func populateRepositoryKeyForReleaseBundleSources(sources []services.RbSource) { - if len(sources) == 0 || sources[0].SourceType != "release_bundles" { +//nolint:unparam // sync parameter is kept for API consistency with existing tests +func createRbFromMultiSourcesUsingCommandFlagsWithProject(t *testing.T, lcManager *lifecycle.LifecycleServicesManager, buildsSourcesOption, bundlesSourcesOption, + rbName, rbVersion, project string, sync bool, +) { + var sources []services.RbSource + sources = buildMultiSources(sources, buildsSourcesOption, bundlesSourcesOption, project) + // For projects (non-default), populate repository key for release bundle sources + if project != "" && project != "default" { + populateRepositoryKeyForReleaseBundleSourcesWithProject(sources, project) + } + + rbDetails := services.ReleaseBundleDetails{ + ReleaseBundleName: rbName, + ReleaseBundleVersion: rbVersion, + } + queryParams := services.CommonOptionalQueryParams{ + Async: !sync, + ProjectKey: project, + } + + _, err := lcManager.CreateReleaseBundlesFromMultipleSources(rbDetails, queryParams, gpgKeyPairName, sources) + assert.NoError(t, err) +} + +func populateRepositoryKeyForReleaseBundleSourcesWithProject(sources []services.RbSource, projectKey string) { + if projectKey == "" || projectKey == "default" { return } for i := range sources { - for j := range sources[i].ReleaseBundles { - rb := &sources[i].ReleaseBundles[j] - if rb.ProjectKey != "" { - rb.RepositoryKey = rb.ProjectKey + "-release-bundles-v2" + if sources[i].SourceType == "release_bundles" { + for j := range sources[i].ReleaseBundles { + rb := &sources[i].ReleaseBundles[j] + if rb.ProjectKey != "" && rb.ProjectKey != "default" { + rb.RepositoryKey = rb.ProjectKey + "-release-bundles-v2" + } } } } @@ -279,9 +305,6 @@ func buildMultiSources(sources []services.RbSource, buildsSourcesStr, bundlesSou // Process Release Bundles if bundlesSourcesStr != "" { sources = buildMultiBundleSources(sources, bundlesSourcesStr, projectKey) - if projectKey != "" { - populateRepositoryKeyForReleaseBundleSources(sources) - } } return sources From 5093259dba81a93344efe05cb2d333faeda46b76 Mon Sep 17 00:00:00 2001 From: Naveen Kumar Date: Thu, 29 Jan 2026 10:32:43 +0530 Subject: [PATCH 5/6] Update lifecycle_test.go Co-authored-by: Bhanu Reddy --- lifecycle_test.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lifecycle_test.go b/lifecycle_test.go index 3319736b4..0f7f2ff71 100644 --- a/lifecycle_test.go +++ b/lifecycle_test.go @@ -260,8 +260,7 @@ func createRbFromMultiSourcesUsingCommandFlags(t *testing.T, lcManager *lifecycl func createRbFromMultiSourcesUsingCommandFlagsWithProject(t *testing.T, lcManager *lifecycle.LifecycleServicesManager, buildsSourcesOption, bundlesSourcesOption, rbName, rbVersion, project string, sync bool, ) { - var sources []services.RbSource - sources = buildMultiSources(sources, buildsSourcesOption, bundlesSourcesOption, project) + sources := buildMultiSources(sources, buildsSourcesOption, bundlesSourcesOption, project) // For projects (non-default), populate repository key for release bundle sources if project != "" && project != "default" { populateRepositoryKeyForReleaseBundleSourcesWithProject(sources, project) From 2f7402b89c07fcf75219cca3b6866f03b241c1ff Mon Sep 17 00:00:00 2001 From: Naveen Kumar Date: Thu, 29 Jan 2026 11:27:36 +0530 Subject: [PATCH 6/6] Updating jfrog-cli-artifactory version --- go.mod | 7 ++----- go.sum | 4 ++-- lifecycle_test.go | 3 ++- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/go.mod b/go.mod index b1cb6175b..756aa3ca5 100644 --- a/go.mod +++ b/go.mod @@ -19,7 +19,7 @@ require ( github.com/jfrog/build-info-go v1.13.1-0.20260120103048-d7f367bfa36e github.com/jfrog/gofrog v1.7.6 github.com/jfrog/jfrog-cli-application v1.0.2-0.20260107143435-b30ede954432 - github.com/jfrog/jfrog-cli-artifactory v0.8.1-0.20260120063955-c654c159290e + github.com/jfrog/jfrog-cli-artifactory v0.8.1-0.20260129054930-035e3ed7e30d github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20260112010739-87fc7275623c github.com/jfrog/jfrog-cli-evidence v0.8.3-0.20251225153025-9d8ac181d615 github.com/jfrog/jfrog-cli-platform-services v1.10.1-0.20251205121610-171eb9b0000e @@ -284,11 +284,8 @@ replace github.com/gfleury/go-bitbucket-v1 => github.com/gfleury/go-bitbucket-v1 //replace github.com/jfrog/jfrog-cli-core/v2 => ../jfrog-cli-core -replace github.com/jfrog/jfrog-cli-artifactory => github.com/naveenku-jfrog/jfrog-cli-artifactory v0.0.0-20260123161704-7266892fd60c - -// //replace github.com/jfrog/build-info-go => github.com/fluxxBot/build-info-go v1.10.10-0.20260105070825-d3f36f619ba5 -// + //replace github.com/jfrog/jfrog-cli-core/v2 => github.com/fluxxBot/jfrog-cli-core/v2 v2.58.1-0.20260105065921-c6488910f44c //replace github.com/jfrog/jfrog-client-go => github.com/jfrog/jfrog-client-go v1.54.2-0.20251007084958-5eeaa42c31a6 diff --git a/go.sum b/go.sum index 9c9cb8ff7..dc7d41e82 100644 --- a/go.sum +++ b/go.sum @@ -1216,6 +1216,8 @@ github.com/jfrog/jfrog-apps-config v1.0.1 h1:mtv6k7g8A8BVhlHGlSveapqf4mJfonwvXYL github.com/jfrog/jfrog-apps-config v1.0.1/go.mod h1:8AIIr1oY9JuH5dylz2S6f8Ym2MaadPLR6noCBO4C22w= github.com/jfrog/jfrog-cli-application v1.0.2-0.20260107143435-b30ede954432 h1:6eOOs+326IrWLVA+ghDDudJmN3Nt8lxPl11eOu8vtPE= github.com/jfrog/jfrog-cli-application v1.0.2-0.20260107143435-b30ede954432/go.mod h1:xum2HquWO5uExa/A7MQs3TgJJVEeoqTR+6Z4mfBr1Xw= +github.com/jfrog/jfrog-cli-artifactory v0.8.1-0.20260129054930-035e3ed7e30d h1:jyBD9kqAL8eHerZvGmxiTZECA+sYuH3TpodGnnpnPSs= +github.com/jfrog/jfrog-cli-artifactory v0.8.1-0.20260129054930-035e3ed7e30d/go.mod h1:ANFZOB4AX+Voo24l1BO8bVvN76m3ZViR1QaK5u3QDgE= github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20260112010739-87fc7275623c h1:K9anqOZ7ASxlsijsl9u4jh92wqqIvJA4kTYfXrcOmJA= github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20260112010739-87fc7275623c/go.mod h1:+Hnaikp/xCSPD/q7txxRy4Zc0wzjW/usrCSf+6uONSQ= github.com/jfrog/jfrog-cli-evidence v0.8.3-0.20251225153025-9d8ac181d615 h1:y5an0bojHL00ipHP1QuBUrVcP+XK+yZHHOJ/r1I0RUM= @@ -1325,8 +1327,6 @@ github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/naveenku-jfrog/jfrog-cli-artifactory v0.0.0-20260123161704-7266892fd60c h1:TLkawLWlTQfx7sgNc03alNjBVWON25YXD+ClDecHPf8= -github.com/naveenku-jfrog/jfrog-cli-artifactory v0.0.0-20260123161704-7266892fd60c/go.mod h1:LbhCULfa/eIPSXNgQ5Xw8BIZRmJ0qfF2I4sPa7AHXkY= github.com/nwaples/rardecode v1.1.3 h1:cWCaZwfM5H7nAD6PyEdcVnczzV8i/JtotnyW/dD9lEc= github.com/nwaples/rardecode v1.1.3/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw= diff --git a/lifecycle_test.go b/lifecycle_test.go index 0f7f2ff71..3319736b4 100644 --- a/lifecycle_test.go +++ b/lifecycle_test.go @@ -260,7 +260,8 @@ func createRbFromMultiSourcesUsingCommandFlags(t *testing.T, lcManager *lifecycl func createRbFromMultiSourcesUsingCommandFlagsWithProject(t *testing.T, lcManager *lifecycle.LifecycleServicesManager, buildsSourcesOption, bundlesSourcesOption, rbName, rbVersion, project string, sync bool, ) { - sources := buildMultiSources(sources, buildsSourcesOption, bundlesSourcesOption, project) + var sources []services.RbSource + sources = buildMultiSources(sources, buildsSourcesOption, bundlesSourcesOption, project) // For projects (non-default), populate repository key for release bundle sources if project != "" && project != "default" { populateRepositoryKeyForReleaseBundleSourcesWithProject(sources, project)