From 1f530f13cc7404cfe3635b8de607c89332a9e2fe Mon Sep 17 00:00:00 2001 From: Naveen Kumar Date: Tue, 14 Oct 2025 15:02:11 +0530 Subject: [PATCH 01/28] Added jf rbs command and its unit tesst --- go.mod | 16 +-- go.sum | 28 ++--- lifecycle_test.go | 300 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 322 insertions(+), 22 deletions(-) diff --git a/go.mod b/go.mod index a83c9505f..9404b5dcf 100644 --- a/go.mod +++ b/go.mod @@ -22,7 +22,7 @@ require ( github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20251007110407-2348aea7acd0 github.com/jfrog/jfrog-cli-platform-services v1.10.0 github.com/jfrog/jfrog-cli-security v1.21.8 - github.com/jfrog/jfrog-client-go v1.55.1-0.20251007092348-3a3f6f58ae23 + github.com/jfrog/jfrog-client-go v1.55.1-0.20251008045603-4ca43b3f3d45 github.com/jszwec/csvutil v1.10.0 github.com/manifoldco/promptui v0.9.0 github.com/stretchr/testify v1.11.1 @@ -219,14 +219,14 @@ require ( go.uber.org/zap v1.27.0 // indirect go.yaml.in/yaml/v2 v2.4.2 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect - golang.org/x/crypto v0.42.0 // indirect + golang.org/x/crypto v0.43.0 // indirect golang.org/x/mod v0.28.0 // indirect - golang.org/x/net v0.43.0 // indirect + golang.org/x/net v0.45.0 // indirect golang.org/x/oauth2 v0.31.0 // indirect golang.org/x/sync v0.17.0 // indirect - golang.org/x/sys v0.36.0 // indirect - golang.org/x/term v0.35.0 // indirect - golang.org/x/text v0.29.0 // indirect + golang.org/x/sys v0.37.0 // indirect + golang.org/x/term v0.36.0 // indirect + golang.org/x/text v0.30.0 // indirect golang.org/x/time v0.12.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20250414145226-207652e42e2e // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20250414145226-207652e42e2e // indirect @@ -249,10 +249,10 @@ require ( //replace github.com/jfrog/build-info-go => github.com/jfrog/build-info-go v1.8.9-0.20251006061821-8b1be6a65215 -//replace github.com/jfrog/jfrog-cli-artifactory => github.com/jfrog/jfrog-cli-artifactory v0.0.0-20251007085159-3db123d4398b +replace github.com/jfrog/jfrog-cli-artifactory => github.com/naveenku-jfrog/jfrog-cli-artifactory v0.0.0-20251014092920-3da7c40ab754 //replace github.com/jfrog/jfrog-cli-core/v2 => github.com/jfrog/jfrog-cli-core/v2 v2.0.0-20251007071921-a9564595b084 -//replace github.com/jfrog/jfrog-client-go => github.com/jfrog/jfrog-client-go v1.54.2-0.20251007084958-5eeaa42c31a6 +replace github.com/jfrog/jfrog-client-go => github.com/naveenku-jfrog/jfrog-client-go v1.54.2-0.20251014090501-c86c986ac6da //replace github.com/jfrog/jfrog-cli-security => github.com/jfrog/jfrog-cli-security v1.17.2-0.20250511132918-d9cc4cd50020 diff --git a/go.sum b/go.sum index 0f29961bf..dcb9ce0bb 100644 --- a/go.sum +++ b/go.sum @@ -363,16 +363,12 @@ github.com/jfrog/gofrog v1.7.6 h1:QmfAiRzVyaI7JYGsB7cxfAJePAZTzFz0gRWZSE27c6s= github.com/jfrog/gofrog v1.7.6/go.mod h1:ntr1txqNOZtHplmaNd7rS4f8jpA5Apx8em70oYEe7+4= github.com/jfrog/jfrog-apps-config v1.0.1 h1:mtv6k7g8A8BVhlHGlSveapqf4mJfonwvXYLipdsOFMY= github.com/jfrog/jfrog-apps-config v1.0.1/go.mod h1:8AIIr1oY9JuH5dylz2S6f8Ym2MaadPLR6noCBO4C22w= -github.com/jfrog/jfrog-cli-artifactory v0.7.3-0.20251007111915-ee166dfe921b h1:o02wI0L/jG340ZA7hYPqNmTGWXl17ECs94TKiZiVu64= -github.com/jfrog/jfrog-cli-artifactory v0.7.3-0.20251007111915-ee166dfe921b/go.mod h1:xu6OKXAfWjGZkCL2a5nPpFHCwRXWVPuiYiYFeeubCJw= github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20251007110407-2348aea7acd0 h1:Wg0GHwwC7q/S9UWUtgqV9GZVQpKLRbmPAIcV9Bmp8L8= github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20251007110407-2348aea7acd0/go.mod h1:77yOoF0fwwUWVK05TKwyI26/t2BqRcq4qAKhKVMUh64= github.com/jfrog/jfrog-cli-platform-services v1.10.0 h1:O+N/VAF+QjFvq9xkHpmzKLcdl9aJu3IP204Su0L14rw= github.com/jfrog/jfrog-cli-platform-services v1.10.0/go.mod h1:qbu4iqBST9x8LgD8HhzUm91iOB3vHqtoGmaxOnmw0ok= github.com/jfrog/jfrog-cli-security v1.21.8 h1:yRVOW4FqETd0tVeHxdC7l19aLi5gS3hai9XwkMQuVr8= github.com/jfrog/jfrog-cli-security v1.21.8/go.mod h1:AYckVBA3qNmCku1MrBLpQwbr9eAZ91U/3zMa88gckD8= -github.com/jfrog/jfrog-client-go v1.55.1-0.20251007092348-3a3f6f58ae23 h1:EnI7vC1an94Yij3nh9vyVR9Smj0Be5693aZCqd8AtIQ= -github.com/jfrog/jfrog-client-go v1.55.1-0.20251007092348-3a3f6f58ae23/go.mod h1:E2s23qRRDdyPdzSYG1irPOEpjJ6kXvhV1U4g/0rG93k= github.com/jhump/protoreflect v1.17.0 h1:qOEr613fac2lOuTgWN4tPAtLL7fUSbuJL5X5XumQh94= github.com/jhump/protoreflect v1.17.0/go.mod h1:h9+vUUL38jiBzck8ck+6G/aeMX8Z4QUY/NiJPwPNi+8= github.com/jmespath/go-jmespath v0.4.1-0.20220621161143-b0104c826a24 h1:liMMTbpW34dhU4az1GN0pTPADwNmvoRSeoZ6PItiqnY= @@ -474,6 +470,10 @@ 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-20251014092920-3da7c40ab754 h1:NPLE3eu51iQ2b1eyi+KPf3viOHceXBbWRkoLJgbt0rA= +github.com/naveenku-jfrog/jfrog-cli-artifactory v0.0.0-20251014092920-3da7c40ab754/go.mod h1:fIqy9b1RDfSWq3hBeqU6LmoMGcQNX7D5NYga625s7GU= +github.com/naveenku-jfrog/jfrog-client-go v1.54.2-0.20251014090501-c86c986ac6da h1:h6LIWql2gyT2arPa8dcz4UU9LNgH6aJroQ9KyOQaEq0= +github.com/naveenku-jfrog/jfrog-client-go v1.54.2-0.20251014090501-c86c986ac6da/go.mod h1:jrODQbAbCt97F24d/0bYpqpdc0PFMuBxNJOTfTdW+Fk= 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= @@ -715,8 +715,8 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= -golang.org/x/crypto v0.42.0 h1:chiH31gIWm57EkTXpwnqf8qeuMUi0yekh6mT2AvFlqI= -golang.org/x/crypto v0.42.0/go.mod h1:4+rDnOTJhQCx2q7/j6rAN5XDw8kPjeaXEUR2eL94ix8= +golang.org/x/crypto v0.43.0 h1:dduJYIi3A3KOfdGOHX8AVZ/jGiyPa3IbBozJ5kNuE04= +golang.org/x/crypto v0.43.0/go.mod h1:BFbav4mRNlXJL4wNeejLpWxB7wMbc79PdRGhWKncxR0= golang.org/x/exp v0.0.0-20250911091902-df9299821621 h1:2id6c1/gto0kaHYyrixvknJ8tUK/Qs5IsmBtrc+FtgU= golang.org/x/exp v0.0.0-20250911091902-df9299821621/go.mod h1:TwQYMMnGpvZyc+JpB/UAuTNIsVJifOlSkrZkhcvpVUk= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -739,8 +739,8 @@ golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= -golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= -golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg= +golang.org/x/net v0.45.0 h1:RLBg5JKixCy82FtLJpeNlVM0nrSqpCRYzVU1n8kj0tM= +golang.org/x/net v0.45.0/go.mod h1:ECOoLqd5U3Lhyeyo/QDCEVQ4sNgYsqvCZ722XogGieY= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.20.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/oauth2 v0.31.0 h1:8Fq0yVZLh4j4YA47vHKFTa9Ew5XIrCP8LC6UeNZnLxo= @@ -788,16 +788,16 @@ golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k= -golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ= +golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk= -golang.org/x/term v0.35.0 h1:bZBVKBudEyhRcajGcNc3jIfWPqV4y/Kt2XcoigOWtDQ= -golang.org/x/term v0.35.0/go.mod h1:TPGtkTLesOwf2DE8CgVYiZinHAOuy5AYUYT1lENIZnA= +golang.org/x/term v0.36.0 h1:zMPR+aF8gfksFprF/Nc/rd1wRS1EI6nDBGyWAvDzx2Q= +golang.org/x/term v0.36.0/go.mod h1:Qu394IJq6V6dCBRgwqshf3mPF85AqzYEzofzRdZkWss= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -805,8 +805,8 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk= -golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4= +golang.org/x/text v0.30.0 h1:yznKA/E9zq54KzlzBEAWn1NXSQ8DIp/NYMy88xJjl4k= +golang.org/x/text v0.30.0/go.mod h1:yDdHFIX9t+tORqspjENWgzaCVXgk0yYnYuSZ8UzzBVM= golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE= golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/lifecycle_test.go b/lifecycle_test.go index 5c138860e..fab5feb19 100644 --- a/lifecycle_test.go +++ b/lifecycle_test.go @@ -7,6 +7,7 @@ import ( "os" "path" "path/filepath" + "sort" "strconv" "strings" "testing" @@ -751,6 +752,305 @@ func deleteReleaseBundleProperties(t *testing.T, lcManager *lifecycle.LifecycleS time.Sleep(5 * time.Second) } +func TestReleaseBundlesSearchGroups(t *testing.T) { + cleanCallback := initLifecycleTest(t, artifactoryLifecycleSetTagMinVersion) + defer cleanCallback() + + lcManager := getLcServiceManager(t) + + deleteBuilds := uploadBuilds(t) + defer deleteBuilds() + + const rbPrefix = "my-awesome-app" + const rbNameA = rbPrefix + "-alpha" + const rbNameB = rbPrefix + "-beta" + const rbNameC = rbPrefix + "-core" + const rbNameD = "another-app" + + const version1 = "1.0.0" + + // Create Release Bundle A + createRbFromSpec(t, tests.LifecycleBuilds12, rbNameA, version1, true, true) + defer deleteReleaseBundle(t, lcManager, rbNameA, version1) + assertStatusCompleted(t, lcManager, rbNameA, version1, "") + + // Create Release Bundle B + createRbFromSpec(t, tests.LifecycleBuilds12, rbNameB, version1, true, true) + defer deleteReleaseBundle(t, lcManager, rbNameB, version1) + assertStatusCompleted(t, lcManager, rbNameB, version1, "") + + // Create Release Bundle C + createRbFromSpec(t, tests.LifecycleBuilds12, rbNameC, version1, true, true) + defer deleteReleaseBundle(t, lcManager, rbNameC, version1) + assertStatusCompleted(t, lcManager, rbNameC, version1, "") + + // Create Release Bundle D (for filter/exclusion) + createRbFromSpec(t, tests.LifecycleBuilds12, rbNameD, version1, true, true) + defer deleteReleaseBundle(t, lcManager, rbNameD, version1) + assertStatusCompleted(t, lcManager, rbNameD, version1, "") + + time.Sleep(3 * time.Second) + + testCases := []struct { + name string + queryParams services.GetSearchOptionalQueryParams + expectedRbNames []string + expectedTotal int + expectError bool + errorMessage string + }{ + { + name: "No query params - all groups, default order", + queryParams: services.GetSearchOptionalQueryParams{}, + expectedRbNames: []string{rbNameD, rbNameA, rbNameB, rbNameC}, + expectedTotal: 4, + expectError: false, + }, + { + name: "Filter by prefix 'my-awesome-app'", + queryParams: services.GetSearchOptionalQueryParams{ + FilterBy: "name~" + rbPrefix + "*", + }, + expectedRbNames: []string{rbNameA, rbNameB, rbNameC}, + expectedTotal: 3, + expectError: false, + }, + { + name: "Filter by containing 'beta'", + queryParams: services.GetSearchOptionalQueryParams{ + FilterBy: "name~*beta*", + }, + expectedRbNames: []string{rbNameB}, + expectedTotal: 1, + expectError: false, + }, + { + name: "Limit to 2 results", + queryParams: services.GetSearchOptionalQueryParams{ + Limit: 2, + OrderBy: "name", + OrderAsc: true, + }, + expectedRbNames: []string{rbNameA, rbNameB}, + expectedTotal: 4, + expectError: false, + }, + { + name: "Offset by 1, Limit to 2 results", + queryParams: services.GetSearchOptionalQueryParams{ + Offset: 1, + Limit: 2, + OrderBy: "name", + OrderAsc: true, + }, + expectedRbNames: []string{rbNameB, rbNameC}, + expectedTotal: 4, + expectError: false, + }, + { + name: "Order by name Descending", + queryParams: services.GetSearchOptionalQueryParams{ + OrderBy: "name", + OrderAsc: false, + }, + expectedRbNames: []string{rbNameD, rbNameC, rbNameB, rbNameA}, + expectedTotal: 4, + expectError: false, + }, + { + name: "Order by name Ascending with includes (if supported)", + queryParams: services.GetSearchOptionalQueryParams{ + OrderBy: "name", + OrderAsc: true, + Includes: "properties", + }, + expectedRbNames: []string{rbNameA, rbNameB, rbNameC, rbNameD}, + expectedTotal: 4, + expectError: false, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + resp, err := lcManager.ReleaseBundlesSearchGroup(tc.queryParams) + if tc.expectError { + assert.Error(t, err) + if tc.errorMessage != "" { + assert.Contains(t, err.Error(), tc.errorMessage) + } + return + } + assert.NoError(t, err, fmt.Sprintf("Expected no error for test case: %s", tc.name)) + assert.Equal(t, tc.expectedTotal, resp.Total, "Total count mismatch") + + var actualNames []string + for _, rb := range resp.ReleaseBundleSearchGroup { + actualNames = append(actualNames, rb.ReleaseBundleName) + } + if tc.queryParams.OrderBy != "" { + assert.Equal(t, tc.expectedRbNames, actualNames, "Release bundle names order mismatch") + } else { + assert.ElementsMatch(t, tc.expectedRbNames, actualNames, "Release bundle names mismatch") + } + }) + } +} + +func TestReleaseBundlesSearchVersions(t *testing.T) { + cleanCallback := initLifecycleTest(t, artifactoryLifecycleSetTagMinVersion) + defer cleanCallback() + + lcManager := getLcServiceManager(t) + + deleteBuilds := uploadBuilds(t) + defer deleteBuilds() + + const rbName = "my-versioned-app" + const versionA = "1.0.0" + const versionB = "1.0.1" + const versionC = "1.1.0-rc" + const versionD = "2.0.0" + + createRbFromSpec(t, tests.LifecycleBuilds12, rbName, versionA, true, true) + defer deleteReleaseBundle(t, lcManager, rbName, versionA) + assertStatusCompleted(t, lcManager, rbName, versionA, "") + + time.Sleep(1 * time.Second) + + createRbFromSpec(t, tests.LifecycleBuilds12, rbName, versionC, true, true) + defer deleteReleaseBundle(t, lcManager, rbName, versionC) + assertStatusCompleted(t, lcManager, rbName, versionC, "") + + time.Sleep(1 * time.Second) + + createRbFromSpec(t, tests.LifecycleBuilds12, rbName, versionB, true, true) + defer deleteReleaseBundle(t, lcManager, rbName, versionB) + assertStatusCompleted(t, lcManager, rbName, versionB, "") + + time.Sleep(1 * time.Second) + + createRbFromSpec(t, tests.LifecycleBuilds12, rbName, versionD, true, true) + defer deleteReleaseBundle(t, lcManager, rbName, versionD) + assertStatusCompleted(t, lcManager, rbName, versionD, "") + + log.Info("Created four versions for release bundle '%s' for search testing.", rbName) + time.Sleep(3 * time.Second) + + testCases := []struct { + name string + releaseBundleName string + queryParams services.GetSearchOptionalQueryParams + expectedRbVersions []string + expectedTotal int + expectError bool + errorMessage string + }{ + { + name: "No query params - all versions, default order", + releaseBundleName: rbName, + queryParams: services.GetSearchOptionalQueryParams{}, + expectedRbVersions: []string{versionA, versionB, versionC, versionD}, + expectedTotal: 4, + expectError: false, + }, + { + name: "Filter by prefix '1.0'", + releaseBundleName: rbName, + queryParams: services.GetSearchOptionalQueryParams{ + FilterBy: "version~1.0*", + }, + expectedRbVersions: []string{versionA, versionB}, + expectedTotal: 2, + expectError: false, + }, + { + name: "Filter by containing 'rc'", + releaseBundleName: rbName, + queryParams: services.GetSearchOptionalQueryParams{ + FilterBy: "version~*rc*", + }, + expectedRbVersions: []string{versionC}, + expectedTotal: 1, + expectError: false, + }, + { + name: "Limit to 2 results, ordered by version ascending", + releaseBundleName: rbName, + queryParams: services.GetSearchOptionalQueryParams{ + Limit: 2, + OrderBy: "version", + OrderAsc: true, + }, + expectedRbVersions: []string{versionA, versionB}, + expectedTotal: 4, + expectError: false, + }, + { + name: "Offset by 2, Limit 1, ordered by version descending", + releaseBundleName: rbName, + queryParams: services.GetSearchOptionalQueryParams{ + Offset: 2, + Limit: 1, + OrderBy: "version", + OrderAsc: false, + }, + expectedRbVersions: []string{versionB}, + expectedTotal: 4, + expectError: false, + }, + { + name: "Order by version Descending", + releaseBundleName: rbName, + queryParams: services.GetSearchOptionalQueryParams{ + OrderBy: "version", + OrderAsc: false, + }, + expectedRbVersions: []string{versionD, versionC, versionB, versionA}, + expectedTotal: 4, + expectError: false, + }, + { + name: "Order by created_millis Ascending", + releaseBundleName: rbName, + queryParams: services.GetSearchOptionalQueryParams{ + OrderBy: "created_millis", + OrderAsc: true, + }, + expectedRbVersions: []string{versionA, versionC, versionB, versionD}, + expectedTotal: 4, + expectError: false, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + resp, err := lcManager.ReleaseBundlesSearchVersions(tc.releaseBundleName, tc.queryParams) + if tc.expectError { + assert.Error(t, err) + if tc.errorMessage != "" { + assert.Contains(t, err.Error(), tc.errorMessage) + } + return + } + assert.NoError(t, err, fmt.Sprintf("Expected no error for test case: %s", tc.name)) + assert.Equal(t, tc.expectedTotal, resp.Total, "Total count mismatch") + + var actualVersions []string + for _, rb := range resp.ReleaseBundles { + actualVersions = append(actualVersions, rb.ReleaseBundleVersion) + } + + if tc.queryParams.OrderBy != "" { + assert.Equal(t, tc.expectedRbVersions, actualVersions, "Release bundle versions order mismatch") + } else { + sort.Strings(tc.expectedRbVersions) + sort.Strings(actualVersions) + assert.ElementsMatch(t, tc.expectedRbVersions, actualVersions, "Release bundle versions mismatch") + } + }) + } +} + func setReleaseBundleTag(t *testing.T, lcManager *lifecycle.LifecycleServicesManager, rbName, rbVersion, projectKey, tag string, ) { From 64e0c45640cc9504911b9d6a65e956caa3eb4d2e Mon Sep 17 00:00:00 2001 From: Naveen Kumar Date: Tue, 14 Oct 2025 15:11:21 +0530 Subject: [PATCH 02/28] Added go faillure --- go.sum | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/go.sum b/go.sum index 160ecc950..f2af86f7b 100644 --- a/go.sum +++ b/go.sum @@ -363,8 +363,10 @@ github.com/jfrog/gofrog v1.7.6 h1:QmfAiRzVyaI7JYGsB7cxfAJePAZTzFz0gRWZSE27c6s= github.com/jfrog/gofrog v1.7.6/go.mod h1:ntr1txqNOZtHplmaNd7rS4f8jpA5Apx8em70oYEe7+4= github.com/jfrog/jfrog-apps-config v1.0.1 h1:mtv6k7g8A8BVhlHGlSveapqf4mJfonwvXYLipdsOFMY= github.com/jfrog/jfrog-apps-config v1.0.1/go.mod h1:8AIIr1oY9JuH5dylz2S6f8Ym2MaadPLR6noCBO4C22w= -github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20251007110407-2348aea7acd0 h1:Wg0GHwwC7q/S9UWUtgqV9GZVQpKLRbmPAIcV9Bmp8L8= -github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20251007110407-2348aea7acd0/go.mod h1:77yOoF0fwwUWVK05TKwyI26/t2BqRcq4qAKhKVMUh64= +github.com/jfrog/jfrog-cli-application v1.0.1 h1:PiiSVKFFs8VLAwjCe2JrIKlX7LmARFt+r8BLTupWIDc= +github.com/jfrog/jfrog-cli-application v1.0.1/go.mod h1:gjV6Q2hhoMe3FF77GFiTyIRLSHokpDrkVj0GvYM+1Y4= +github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20251008065215-ebd53b5439fa h1:JfK0lvV1aCLkgbktdHkjRp61jlc1Llxq2QFK7sf52SE= +github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20251008065215-ebd53b5439fa/go.mod h1:XnTbhDuUKPOe215lJ6mxRu/xKL2zdy6a9CU+e85bjME= github.com/jfrog/jfrog-cli-platform-services v1.10.0 h1:O+N/VAF+QjFvq9xkHpmzKLcdl9aJu3IP204Su0L14rw= github.com/jfrog/jfrog-cli-platform-services v1.10.0/go.mod h1:qbu4iqBST9x8LgD8HhzUm91iOB3vHqtoGmaxOnmw0ok= github.com/jfrog/jfrog-cli-security v1.21.8 h1:yRVOW4FqETd0tVeHxdC7l19aLi5gS3hai9XwkMQuVr8= From d7a9d850b4acf4270529a523c9347bc1c529408e Mon Sep 17 00:00:00 2001 From: Naveen Kumar Date: Wed, 15 Oct 2025 10:34:45 +0530 Subject: [PATCH 03/28] Updated test cases data --- go.mod | 8 ++++---- go.sum | 8 ++++---- lifecycle_test.go | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/go.mod b/go.mod index e738af3e8..2626f19cc 100644 --- a/go.mod +++ b/go.mod @@ -19,11 +19,11 @@ require ( github.com/jfrog/build-info-go v1.12.0 github.com/jfrog/gofrog v1.7.6 github.com/jfrog/jfrog-cli-application v1.0.1 - github.com/jfrog/jfrog-cli-artifactory v0.7.3-0.20251008063046-4bfcdeb54f16 + github.com/jfrog/jfrog-cli-artifactory v0.7.3-0.20251015044826-c901bb8e3d47 github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20251008065215-ebd53b5439fa github.com/jfrog/jfrog-cli-platform-services v1.10.0 github.com/jfrog/jfrog-cli-security v1.21.8 - github.com/jfrog/jfrog-client-go v1.55.1-0.20251008045603-4ca43b3f3d45 + github.com/jfrog/jfrog-client-go v1.55.1-0.20251015041910-ef0fe832b111 github.com/jszwec/csvutil v1.10.0 github.com/manifoldco/promptui v0.9.0 github.com/stretchr/testify v1.11.1 @@ -250,10 +250,10 @@ require ( //replace github.com/jfrog/build-info-go => github.com/jfrog/build-info-go v1.8.9-0.20251006061821-8b1be6a65215 -replace github.com/jfrog/jfrog-cli-artifactory => github.com/naveenku-jfrog/jfrog-cli-artifactory v0.0.0-20251014092920-3da7c40ab754 +//replace github.com/jfrog/jfrog-cli-artifactory => github.com/jfrog/jfrog-cli-artifactory v0.0.0-20251014092920-3da7c40ab754 //replace github.com/jfrog/jfrog-cli-core/v2 => github.com/jfrog/jfrog-cli-core/v2 v2.0.0-20251007071921-a9564595b084 -replace github.com/jfrog/jfrog-client-go => github.com/naveenku-jfrog/jfrog-client-go v1.54.2-0.20251014090501-c86c986ac6da +//replace github.com/jfrog/jfrog-client-go => github.com/jfrog/jfrog-client-go v1.54.2-0.20251014090501-c86c986ac6da //replace github.com/jfrog/jfrog-cli-security => github.com/jfrog/jfrog-cli-security v1.17.2-0.20250511132918-d9cc4cd50020 diff --git a/go.sum b/go.sum index f2af86f7b..d71788a31 100644 --- a/go.sum +++ b/go.sum @@ -365,12 +365,16 @@ 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.1 h1:PiiSVKFFs8VLAwjCe2JrIKlX7LmARFt+r8BLTupWIDc= github.com/jfrog/jfrog-cli-application v1.0.1/go.mod h1:gjV6Q2hhoMe3FF77GFiTyIRLSHokpDrkVj0GvYM+1Y4= +github.com/jfrog/jfrog-cli-artifactory v0.7.3-0.20251015044826-c901bb8e3d47 h1:7JWIgSdd24A3zgCoEeR7b7osNL+SdpNcnO/vqEipZkE= +github.com/jfrog/jfrog-cli-artifactory v0.7.3-0.20251015044826-c901bb8e3d47/go.mod h1:+ZEklnCOvcZo1+91XilATG2IQDpO3CSXtOE4/oKUbU0= github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20251008065215-ebd53b5439fa h1:JfK0lvV1aCLkgbktdHkjRp61jlc1Llxq2QFK7sf52SE= github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20251008065215-ebd53b5439fa/go.mod h1:XnTbhDuUKPOe215lJ6mxRu/xKL2zdy6a9CU+e85bjME= github.com/jfrog/jfrog-cli-platform-services v1.10.0 h1:O+N/VAF+QjFvq9xkHpmzKLcdl9aJu3IP204Su0L14rw= github.com/jfrog/jfrog-cli-platform-services v1.10.0/go.mod h1:qbu4iqBST9x8LgD8HhzUm91iOB3vHqtoGmaxOnmw0ok= github.com/jfrog/jfrog-cli-security v1.21.8 h1:yRVOW4FqETd0tVeHxdC7l19aLi5gS3hai9XwkMQuVr8= github.com/jfrog/jfrog-cli-security v1.21.8/go.mod h1:AYckVBA3qNmCku1MrBLpQwbr9eAZ91U/3zMa88gckD8= +github.com/jfrog/jfrog-client-go v1.55.1-0.20251015041910-ef0fe832b111 h1:IBkggQwQi7D4+vafA3f8aHSrgZ89bMdlMffmNQfjuLw= +github.com/jfrog/jfrog-client-go v1.55.1-0.20251015041910-ef0fe832b111/go.mod h1:jrODQbAbCt97F24d/0bYpqpdc0PFMuBxNJOTfTdW+Fk= github.com/jhump/protoreflect v1.17.0 h1:qOEr613fac2lOuTgWN4tPAtLL7fUSbuJL5X5XumQh94= github.com/jhump/protoreflect v1.17.0/go.mod h1:h9+vUUL38jiBzck8ck+6G/aeMX8Z4QUY/NiJPwPNi+8= github.com/jmespath/go-jmespath v0.4.1-0.20220621161143-b0104c826a24 h1:liMMTbpW34dhU4az1GN0pTPADwNmvoRSeoZ6PItiqnY= @@ -471,10 +475,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-20251014092920-3da7c40ab754 h1:NPLE3eu51iQ2b1eyi+KPf3viOHceXBbWRkoLJgbt0rA= -github.com/naveenku-jfrog/jfrog-cli-artifactory v0.0.0-20251014092920-3da7c40ab754/go.mod h1:fIqy9b1RDfSWq3hBeqU6LmoMGcQNX7D5NYga625s7GU= -github.com/naveenku-jfrog/jfrog-client-go v1.54.2-0.20251014090501-c86c986ac6da h1:h6LIWql2gyT2arPa8dcz4UU9LNgH6aJroQ9KyOQaEq0= -github.com/naveenku-jfrog/jfrog-client-go v1.54.2-0.20251014090501-c86c986ac6da/go.mod h1:jrODQbAbCt97F24d/0bYpqpdc0PFMuBxNJOTfTdW+Fk= 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 7aced23d6..2068b2fae 100644 --- a/lifecycle_test.go +++ b/lifecycle_test.go @@ -976,7 +976,7 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { releaseBundleName: rbName, queryParams: services.GetSearchOptionalQueryParams{ Limit: 2, - OrderBy: "version", + OrderBy: "release_bundle_version", OrderAsc: true, }, expectedRbVersions: []string{versionA, versionB}, @@ -989,7 +989,7 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { queryParams: services.GetSearchOptionalQueryParams{ Offset: 2, Limit: 1, - OrderBy: "version", + OrderBy: "release_bundle_version", OrderAsc: false, }, expectedRbVersions: []string{versionB}, @@ -1000,7 +1000,7 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { name: "Order by version Descending", releaseBundleName: rbName, queryParams: services.GetSearchOptionalQueryParams{ - OrderBy: "version", + OrderBy: "release_bundle_version", OrderAsc: false, }, expectedRbVersions: []string{versionD, versionC, versionB, versionA}, @@ -1011,7 +1011,7 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { name: "Order by created_millis Ascending", releaseBundleName: rbName, queryParams: services.GetSearchOptionalQueryParams{ - OrderBy: "created_millis", + OrderBy: "created", OrderAsc: true, }, expectedRbVersions: []string{versionA, versionC, versionB, versionD}, From 2f55395bcf34b50d6562e5bb75de4dc705bc8e1e Mon Sep 17 00:00:00 2001 From: Naveen Kumar Date: Wed, 15 Oct 2025 11:01:12 +0530 Subject: [PATCH 04/28] Updated test cases data --- lifecycle_test.go | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/lifecycle_test.go b/lifecycle_test.go index 2068b2fae..a2af893d0 100644 --- a/lifecycle_test.go +++ b/lifecycle_test.go @@ -3,6 +3,7 @@ package main import ( "encoding/json" "fmt" + "github.com/stretchr/testify/require" "net/http" "os" "path" @@ -897,9 +898,7 @@ func TestReleaseBundlesSearchGroups(t *testing.T) { func TestReleaseBundlesSearchVersions(t *testing.T) { cleanCallback := initLifecycleTest(t, artifactoryLifecycleSetTagMinVersion) defer cleanCallback() - lcManager := getLcServiceManager(t) - deleteBuilds := uploadBuilds(t) defer deleteBuilds() @@ -912,19 +911,16 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { createRbFromSpec(t, tests.LifecycleBuilds12, rbName, versionA, true, true) defer deleteReleaseBundle(t, lcManager, rbName, versionA) assertStatusCompleted(t, lcManager, rbName, versionA, "") - time.Sleep(1 * time.Second) createRbFromSpec(t, tests.LifecycleBuilds12, rbName, versionC, true, true) defer deleteReleaseBundle(t, lcManager, rbName, versionC) assertStatusCompleted(t, lcManager, rbName, versionC, "") - time.Sleep(1 * time.Second) createRbFromSpec(t, tests.LifecycleBuilds12, rbName, versionB, true, true) defer deleteReleaseBundle(t, lcManager, rbName, versionB) assertStatusCompleted(t, lcManager, rbName, versionB, "") - time.Sleep(1 * time.Second) createRbFromSpec(t, tests.LifecycleBuilds12, rbName, versionD, true, true) @@ -932,7 +928,6 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { assertStatusCompleted(t, lcManager, rbName, versionD, "") log.Info("Created four versions for release bundle '%s' for search testing.", rbName) - time.Sleep(3 * time.Second) testCases := []struct { name string @@ -1008,13 +1003,13 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { expectError: false, }, { - name: "Order by created_millis Ascending", + name: "Order by created Ascending", releaseBundleName: rbName, queryParams: services.GetSearchOptionalQueryParams{ OrderBy: "created", OrderAsc: true, }, - expectedRbVersions: []string{versionA, versionC, versionB, versionD}, + expectedRbVersions: []string{versionA, versionC, versionB, versionD}, // Order of creation expectedTotal: 4, expectError: false, }, @@ -1022,7 +1017,25 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { - resp, err := lcManager.ReleaseBundlesSearchVersions(tc.releaseBundleName, tc.queryParams) + var resp services.ReleaseBundleVersionsResponse + var err error + + retries := 10 + delay := 5 * time.Second + + for i := 0; i < retries; i++ { + resp, err = lcManager.ReleaseBundlesSearchVersions(tc.releaseBundleName, tc.queryParams) + if err == nil && resp.Total == tc.expectedTotal { + break + } + if tc.expectError && err != nil { + break + } + log.Warn(fmt.Sprintf("Attempt %d/%d for '%s': Total count actual %d, expected %d. Retrying in %v...", + i+1, retries, tc.name, resp.Total, tc.expectedTotal, delay)) + time.Sleep(delay) + } + if tc.expectError { assert.Error(t, err) if tc.errorMessage != "" { @@ -1030,7 +1043,8 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { } return } - assert.NoError(t, err, fmt.Sprintf("Expected no error for test case: %s", tc.name)) + + require.NoError(t, err, fmt.Sprintf("Expected no error for test case: %s", tc.name)) assert.Equal(t, tc.expectedTotal, resp.Total, "Total count mismatch") var actualVersions []string From 82665e23781b57ce6aae649b371420c10dcd6fff Mon Sep 17 00:00:00 2001 From: Naveen Kumar Date: Wed, 15 Oct 2025 11:53:36 +0530 Subject: [PATCH 05/28] Updated test cases data --- lifecycle_test.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lifecycle_test.go b/lifecycle_test.go index a2af893d0..b0c9cdfbf 100644 --- a/lifecycle_test.go +++ b/lifecycle_test.go @@ -827,7 +827,7 @@ func TestReleaseBundlesSearchGroups(t *testing.T) { name: "Limit to 2 results", queryParams: services.GetSearchOptionalQueryParams{ Limit: 2, - OrderBy: "name", + OrderBy: "release_bundle_name", OrderAsc: true, }, expectedRbNames: []string{rbNameA, rbNameB}, @@ -839,7 +839,7 @@ func TestReleaseBundlesSearchGroups(t *testing.T) { queryParams: services.GetSearchOptionalQueryParams{ Offset: 1, Limit: 2, - OrderBy: "name", + OrderBy: "release_bundle_name", OrderAsc: true, }, expectedRbNames: []string{rbNameB, rbNameC}, @@ -849,7 +849,7 @@ func TestReleaseBundlesSearchGroups(t *testing.T) { { name: "Order by name Descending", queryParams: services.GetSearchOptionalQueryParams{ - OrderBy: "name", + OrderBy: "release_bundle_name", OrderAsc: false, }, expectedRbNames: []string{rbNameD, rbNameC, rbNameB, rbNameA}, @@ -859,7 +859,7 @@ func TestReleaseBundlesSearchGroups(t *testing.T) { { name: "Order by name Ascending with includes (if supported)", queryParams: services.GetSearchOptionalQueryParams{ - OrderBy: "name", + OrderBy: "release_bundle_name", OrderAsc: true, Includes: "properties", }, From 887183a2728ecabfdfe15d859caa668aba8d0687 Mon Sep 17 00:00:00 2001 From: Naveen Kumar Date: Wed, 15 Oct 2025 12:08:02 +0530 Subject: [PATCH 06/28] Updated test cases data --- lifecycle_test.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lifecycle_test.go b/lifecycle_test.go index b0c9cdfbf..ea9b2d7b4 100644 --- a/lifecycle_test.go +++ b/lifecycle_test.go @@ -802,7 +802,6 @@ func TestReleaseBundlesSearchGroups(t *testing.T) { name: "No query params - all groups, default order", queryParams: services.GetSearchOptionalQueryParams{}, expectedRbNames: []string{rbNameD, rbNameA, rbNameB, rbNameC}, - expectedTotal: 4, expectError: false, }, { @@ -880,8 +879,9 @@ func TestReleaseBundlesSearchGroups(t *testing.T) { return } assert.NoError(t, err, fmt.Sprintf("Expected no error for test case: %s", tc.name)) - assert.Equal(t, tc.expectedTotal, resp.Total, "Total count mismatch") - + if tc.expectedTotal != 0 { + assert.Equal(t, tc.expectedTotal, resp.Total, "Total count mismatch") + } var actualNames []string for _, rb := range resp.ReleaseBundleSearchGroup { actualNames = append(actualNames, rb.ReleaseBundleName) From a33fd59d32308c1086802e39ae0eafca7bd1e3c4 Mon Sep 17 00:00:00 2001 From: Naveen Kumar Date: Wed, 15 Oct 2025 12:39:49 +0530 Subject: [PATCH 07/28] Updated test cases data --- lifecycle_test.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/lifecycle_test.go b/lifecycle_test.go index ea9b2d7b4..169d17e78 100644 --- a/lifecycle_test.go +++ b/lifecycle_test.go @@ -802,6 +802,7 @@ func TestReleaseBundlesSearchGroups(t *testing.T) { name: "No query params - all groups, default order", queryParams: services.GetSearchOptionalQueryParams{}, expectedRbNames: []string{rbNameD, rbNameA, rbNameB, rbNameC}, + expectedTotal: 4, expectError: false, }, { @@ -882,14 +883,20 @@ func TestReleaseBundlesSearchGroups(t *testing.T) { if tc.expectedTotal != 0 { assert.Equal(t, tc.expectedTotal, resp.Total, "Total count mismatch") } + if tc.queryParams.FilterBy != "" { + assert.Equal(t, tc.expectedTotal, resp.Total, "Total count mismatch for filtered search") + } else { + assert.GreaterOrEqual(t, resp.Total, tc.expectedTotal, "Total count should be at least expected for unfiltered search") + } + var actualNames []string for _, rb := range resp.ReleaseBundleSearchGroup { actualNames = append(actualNames, rb.ReleaseBundleName) } - if tc.queryParams.OrderBy != "" { + if tc.queryParams.OrderBy != "" || tc.queryParams.FilterBy != "" { assert.Equal(t, tc.expectedRbNames, actualNames, "Release bundle names order mismatch") } else { - assert.ElementsMatch(t, tc.expectedRbNames, actualNames, "Release bundle names mismatch") + assert.Subset(t, actualNames, tc.expectedRbNames, "Actual names should contain all expected names") } }) } From f9a0cb2b377d03f6a42a33545cff0055797ac2ef Mon Sep 17 00:00:00 2001 From: Naveen Kumar Date: Wed, 15 Oct 2025 12:56:40 +0530 Subject: [PATCH 08/28] Updated test cases data --- lifecycle_test.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/lifecycle_test.go b/lifecycle_test.go index 169d17e78..e6b6a7234 100644 --- a/lifecycle_test.go +++ b/lifecycle_test.go @@ -880,9 +880,6 @@ func TestReleaseBundlesSearchGroups(t *testing.T) { return } assert.NoError(t, err, fmt.Sprintf("Expected no error for test case: %s", tc.name)) - if tc.expectedTotal != 0 { - assert.Equal(t, tc.expectedTotal, resp.Total, "Total count mismatch") - } if tc.queryParams.FilterBy != "" { assert.Equal(t, tc.expectedTotal, resp.Total, "Total count mismatch for filtered search") } else { From 1f57691b20432436885064e247d9337abcfc0c75 Mon Sep 17 00:00:00 2001 From: Naveen Kumar Date: Wed, 15 Oct 2025 13:06:06 +0530 Subject: [PATCH 09/28] Updated test cases data --- lifecycle_test.go | 27 ++++++--------------------- 1 file changed, 6 insertions(+), 21 deletions(-) diff --git a/lifecycle_test.go b/lifecycle_test.go index e6b6a7234..6f4527353 100644 --- a/lifecycle_test.go +++ b/lifecycle_test.go @@ -808,7 +808,7 @@ func TestReleaseBundlesSearchGroups(t *testing.T) { { name: "Filter by prefix 'my-awesome-app'", queryParams: services.GetSearchOptionalQueryParams{ - FilterBy: "name~" + rbPrefix + "*", + FilterBy: rbPrefix + "~", }, expectedRbNames: []string{rbNameA, rbNameB, rbNameC}, expectedTotal: 3, @@ -817,7 +817,7 @@ func TestReleaseBundlesSearchGroups(t *testing.T) { { name: "Filter by containing 'beta'", queryParams: services.GetSearchOptionalQueryParams{ - FilterBy: "name~*beta*", + FilterBy: rbPrefix + "-beta", }, expectedRbNames: []string{rbNameB}, expectedTotal: 1, @@ -826,9 +826,7 @@ func TestReleaseBundlesSearchGroups(t *testing.T) { { name: "Limit to 2 results", queryParams: services.GetSearchOptionalQueryParams{ - Limit: 2, - OrderBy: "release_bundle_name", - OrderAsc: true, + Limit: 2, }, expectedRbNames: []string{rbNameA, rbNameB}, expectedTotal: 4, @@ -837,10 +835,8 @@ func TestReleaseBundlesSearchGroups(t *testing.T) { { name: "Offset by 1, Limit to 2 results", queryParams: services.GetSearchOptionalQueryParams{ - Offset: 1, - Limit: 2, - OrderBy: "release_bundle_name", - OrderAsc: true, + Offset: 1, + Limit: 2, }, expectedRbNames: []string{rbNameB, rbNameC}, expectedTotal: 4, @@ -849,24 +845,13 @@ func TestReleaseBundlesSearchGroups(t *testing.T) { { name: "Order by name Descending", queryParams: services.GetSearchOptionalQueryParams{ - OrderBy: "release_bundle_name", + OrderBy: "created", OrderAsc: false, }, expectedRbNames: []string{rbNameD, rbNameC, rbNameB, rbNameA}, expectedTotal: 4, expectError: false, }, - { - name: "Order by name Ascending with includes (if supported)", - queryParams: services.GetSearchOptionalQueryParams{ - OrderBy: "release_bundle_name", - OrderAsc: true, - Includes: "properties", - }, - expectedRbNames: []string{rbNameA, rbNameB, rbNameC, rbNameD}, - expectedTotal: 4, - expectError: false, - }, } for _, tc := range testCases { From 9d97d8534cbef457b05a628b455f1c54d45ade47 Mon Sep 17 00:00:00 2001 From: Naveen Kumar Date: Wed, 15 Oct 2025 13:29:19 +0530 Subject: [PATCH 10/28] Updated test cases data --- lifecycle_test.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/lifecycle_test.go b/lifecycle_test.go index 6f4527353..cb7170432 100644 --- a/lifecycle_test.go +++ b/lifecycle_test.go @@ -801,7 +801,7 @@ func TestReleaseBundlesSearchGroups(t *testing.T) { { name: "No query params - all groups, default order", queryParams: services.GetSearchOptionalQueryParams{}, - expectedRbNames: []string{rbNameD, rbNameA, rbNameB, rbNameC}, + expectedRbNames: []string{rbNameD, rbNameC, rbNameB, rbNameA}, expectedTotal: 4, expectError: false, }, @@ -826,9 +826,11 @@ func TestReleaseBundlesSearchGroups(t *testing.T) { { name: "Limit to 2 results", queryParams: services.GetSearchOptionalQueryParams{ - Limit: 2, + Limit: 2, + OrderBy: "created", + OrderAsc: false, }, - expectedRbNames: []string{rbNameA, rbNameB}, + expectedRbNames: []string{rbNameD, rbNameC}, expectedTotal: 4, expectError: false, }, @@ -875,7 +877,7 @@ func TestReleaseBundlesSearchGroups(t *testing.T) { for _, rb := range resp.ReleaseBundleSearchGroup { actualNames = append(actualNames, rb.ReleaseBundleName) } - if tc.queryParams.OrderBy != "" || tc.queryParams.FilterBy != "" { + if tc.queryParams.FilterBy != "" { assert.Equal(t, tc.expectedRbNames, actualNames, "Release bundle names order mismatch") } else { assert.Subset(t, actualNames, tc.expectedRbNames, "Actual names should contain all expected names") From 2b92f389bab84ab5fc1b99c03e1ed0e9f86f29c0 Mon Sep 17 00:00:00 2001 From: Naveen Kumar Date: Wed, 15 Oct 2025 13:47:35 +0530 Subject: [PATCH 11/28] Updated test cases data --- lifecycle_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lifecycle_test.go b/lifecycle_test.go index cb7170432..b70d5f642 100644 --- a/lifecycle_test.go +++ b/lifecycle_test.go @@ -810,7 +810,7 @@ func TestReleaseBundlesSearchGroups(t *testing.T) { queryParams: services.GetSearchOptionalQueryParams{ FilterBy: rbPrefix + "~", }, - expectedRbNames: []string{rbNameA, rbNameB, rbNameC}, + expectedRbNames: []string{rbNameC, rbNameB, rbNameA}, expectedTotal: 3, expectError: false, }, From 24e3c09d7e6b86e4aeee9df933993169da92567a Mon Sep 17 00:00:00 2001 From: Naveen Kumar Date: Wed, 15 Oct 2025 13:53:41 +0530 Subject: [PATCH 12/28] Updated test cases data for versions api --- lifecycle_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lifecycle_test.go b/lifecycle_test.go index b70d5f642..c7a40c951 100644 --- a/lifecycle_test.go +++ b/lifecycle_test.go @@ -941,7 +941,7 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { name: "Filter by prefix '1.0'", releaseBundleName: rbName, queryParams: services.GetSearchOptionalQueryParams{ - FilterBy: "version~1.0*", + FilterBy: "1.0*", }, expectedRbVersions: []string{versionA, versionB}, expectedTotal: 2, @@ -951,7 +951,7 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { name: "Filter by containing 'rc'", releaseBundleName: rbName, queryParams: services.GetSearchOptionalQueryParams{ - FilterBy: "version~*rc*", + FilterBy: "1.1.0-*", }, expectedRbVersions: []string{versionC}, expectedTotal: 1, From d056e92d0764b1555dad4c3aee4218d97a3288cb Mon Sep 17 00:00:00 2001 From: Kanishk Gupta Date: Wed, 15 Oct 2025 11:21:12 +0530 Subject: [PATCH 13/28] moved docker related code (#3156) --- buildtools/cli.go | 2 +- docker_test.go | 4 +- go.mod | 10 +-- go.sum | 8 +- inttestutils/docker.go | 4 +- npm_test.go | 15 +++- utils/tests/docker.go | 192 +++++++++++++++++++++++++++++++++++++++++ 7 files changed, 219 insertions(+), 16 deletions(-) create mode 100644 utils/tests/docker.go diff --git a/buildtools/cli.go b/buildtools/cli.go index 307e62e05..d75536098 100644 --- a/buildtools/cli.go +++ b/buildtools/cli.go @@ -23,10 +23,10 @@ import ( "github.com/jfrog/jfrog-cli-artifactory/artifactory/commands/gradle" "github.com/jfrog/jfrog-cli-artifactory/artifactory/commands/mvn" "github.com/jfrog/jfrog-cli-artifactory/artifactory/commands/npm" + containerutils "github.com/jfrog/jfrog-cli-artifactory/artifactory/commands/ocicontainer" "github.com/jfrog/jfrog-cli-artifactory/artifactory/commands/terraform" "github.com/jfrog/jfrog-cli-artifactory/artifactory/commands/yarn" commandsUtils "github.com/jfrog/jfrog-cli-core/v2/artifactory/commands/utils" - containerutils "github.com/jfrog/jfrog-cli-core/v2/artifactory/utils/container" "github.com/jfrog/jfrog-cli-core/v2/common/build" commonCliUtils "github.com/jfrog/jfrog-cli-core/v2/common/cliutils" "github.com/jfrog/jfrog-cli-core/v2/common/commands" diff --git a/docker_test.go b/docker_test.go index dcddf2acc..5271b3245 100644 --- a/docker_test.go +++ b/docker_test.go @@ -19,15 +19,15 @@ import ( "github.com/jfrog/gofrog/version" coreContainer "github.com/jfrog/jfrog-cli-artifactory/artifactory/commands/container" "github.com/jfrog/jfrog-cli-artifactory/artifactory/commands/generic" + container "github.com/jfrog/jfrog-cli-artifactory/artifactory/commands/ocicontainer" "github.com/jfrog/jfrog-cli-core/v2/artifactory/utils" - "github.com/jfrog/jfrog-cli-core/v2/artifactory/utils/container" "github.com/jfrog/jfrog-cli-core/v2/common/build" "github.com/jfrog/jfrog-cli-core/v2/common/spec" - commonTests "github.com/jfrog/jfrog-cli-core/v2/common/tests" "github.com/jfrog/jfrog-cli-core/v2/utils/coreutils" coreTests "github.com/jfrog/jfrog-cli-core/v2/utils/tests" "github.com/jfrog/jfrog-cli/inttestutils" "github.com/jfrog/jfrog-cli/utils/tests" + commonTests "github.com/jfrog/jfrog-cli/utils/tests" "github.com/jfrog/jfrog-client-go/auth" clientUtils "github.com/jfrog/jfrog-client-go/utils" "github.com/jfrog/jfrog-client-go/utils/io/fileutils" diff --git a/go.mod b/go.mod index 2626f19cc..6b5bb6ec9 100644 --- a/go.mod +++ b/go.mod @@ -19,8 +19,8 @@ require ( github.com/jfrog/build-info-go v1.12.0 github.com/jfrog/gofrog v1.7.6 github.com/jfrog/jfrog-cli-application v1.0.1 - github.com/jfrog/jfrog-cli-artifactory v0.7.3-0.20251015044826-c901bb8e3d47 - github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20251008065215-ebd53b5439fa + github.com/jfrog/jfrog-cli-artifactory v0.7.3-0.20251015051724-72d111a3d107 + github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20251015045218-1a38c9e47097 github.com/jfrog/jfrog-cli-platform-services v1.10.0 github.com/jfrog/jfrog-cli-security v1.21.8 github.com/jfrog/jfrog-client-go v1.55.1-0.20251015041910-ef0fe832b111 @@ -250,10 +250,10 @@ require ( //replace github.com/jfrog/build-info-go => github.com/jfrog/build-info-go v1.8.9-0.20251006061821-8b1be6a65215 -//replace github.com/jfrog/jfrog-cli-artifactory => github.com/jfrog/jfrog-cli-artifactory v0.0.0-20251014092920-3da7c40ab754 +//replace github.com/jfrog/jfrog-cli-artifactory => github.com/fluxxBot/jfrog-cli-artifactory v0.0.0-20251008152604-32538b00579c -//replace github.com/jfrog/jfrog-cli-core/v2 => github.com/jfrog/jfrog-cli-core/v2 v2.0.0-20251007071921-a9564595b084 +//replace github.com/jfrog/jfrog-cli-core/v2 => github.com/fluxxBot/jfrog-cli-core/v2 v2.58.1-0.20251008152439-da488ef26725 -//replace github.com/jfrog/jfrog-client-go => github.com/jfrog/jfrog-client-go v1.54.2-0.20251014090501-c86c986ac6da +//replace github.com/jfrog/jfrog-client-go => github.com/jfrog/jfrog-client-go v1.54.2-0.20251007084958-5eeaa42c31a6 //replace github.com/jfrog/jfrog-cli-security => github.com/jfrog/jfrog-cli-security v1.17.2-0.20250511132918-d9cc4cd50020 diff --git a/go.sum b/go.sum index d71788a31..c1c1d9ea6 100644 --- a/go.sum +++ b/go.sum @@ -365,10 +365,10 @@ 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.1 h1:PiiSVKFFs8VLAwjCe2JrIKlX7LmARFt+r8BLTupWIDc= github.com/jfrog/jfrog-cli-application v1.0.1/go.mod h1:gjV6Q2hhoMe3FF77GFiTyIRLSHokpDrkVj0GvYM+1Y4= -github.com/jfrog/jfrog-cli-artifactory v0.7.3-0.20251015044826-c901bb8e3d47 h1:7JWIgSdd24A3zgCoEeR7b7osNL+SdpNcnO/vqEipZkE= -github.com/jfrog/jfrog-cli-artifactory v0.7.3-0.20251015044826-c901bb8e3d47/go.mod h1:+ZEklnCOvcZo1+91XilATG2IQDpO3CSXtOE4/oKUbU0= -github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20251008065215-ebd53b5439fa h1:JfK0lvV1aCLkgbktdHkjRp61jlc1Llxq2QFK7sf52SE= -github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20251008065215-ebd53b5439fa/go.mod h1:XnTbhDuUKPOe215lJ6mxRu/xKL2zdy6a9CU+e85bjME= +github.com/jfrog/jfrog-cli-artifactory v0.7.3-0.20251015051724-72d111a3d107 h1:0VVFI1AHzMKyr/Nwxmu/Jhg3U1Rq725AQPKpSTtk7XU= +github.com/jfrog/jfrog-cli-artifactory v0.7.3-0.20251015051724-72d111a3d107/go.mod h1:nT050Wb18tTlfcQHefyMENzFOz9Vdym6WP0Z3Nc2qHc= +github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20251015045218-1a38c9e47097 h1:+W6BPxJ0nPtlQ6l6nmypW1eEANoVPiN8HDR4kQJA8uI= +github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20251015045218-1a38c9e47097/go.mod h1:UOeOwEEmRIi57cRwghN5OBVoqkJieYQQfLpeqw8Yv38= github.com/jfrog/jfrog-cli-platform-services v1.10.0 h1:O+N/VAF+QjFvq9xkHpmzKLcdl9aJu3IP204Su0L14rw= github.com/jfrog/jfrog-cli-platform-services v1.10.0/go.mod h1:qbu4iqBST9x8LgD8HhzUm91iOB3vHqtoGmaxOnmw0ok= github.com/jfrog/jfrog-cli-security v1.21.8 h1:yRVOW4FqETd0tVeHxdC7l19aLi5gS3hai9XwkMQuVr8= diff --git a/inttestutils/docker.go b/inttestutils/docker.go index 279c2c699..61f5be1aa 100644 --- a/inttestutils/docker.go +++ b/inttestutils/docker.go @@ -10,11 +10,11 @@ import ( gofrogcmd "github.com/jfrog/gofrog/io" "github.com/jfrog/jfrog-cli-artifactory/artifactory/commands/generic" + container "github.com/jfrog/jfrog-cli-artifactory/artifactory/commands/ocicontainer" "github.com/jfrog/jfrog-cli-core/v2/artifactory/utils" - "github.com/jfrog/jfrog-cli-core/v2/artifactory/utils/container" - commonTests "github.com/jfrog/jfrog-cli-core/v2/common/tests" "github.com/jfrog/jfrog-cli-core/v2/utils/config" "github.com/jfrog/jfrog-cli/utils/tests" + commonTests "github.com/jfrog/jfrog-cli/utils/tests" "github.com/jfrog/jfrog-client-go/utils/io/httputils" "github.com/jfrog/jfrog-client-go/utils/log" "github.com/stretchr/testify/assert" diff --git a/npm_test.go b/npm_test.go index 0d9ef29aa..7757a183f 100644 --- a/npm_test.go +++ b/npm_test.go @@ -814,7 +814,7 @@ func TestNpmPublishWithWorkspaces(t *testing.T) { assert.NotEmpty(t, artifact.Sha1, "Artifact %d in module %d should have SHA1", j) assert.NotEmpty(t, artifact.Sha256, "Artifact %d in module %d should have SHA256", j) assert.NotEmpty(t, artifact.Md5, "Artifact %d in module %d should have MD5", j) - assert.Contains(t, artifact.Name, "nested"+strconv.Itoa(j+1)) + assert.True(t, containsTarName(artifact.Name, expectedTars)) } // Publish build info to Artifactory @@ -865,6 +865,7 @@ func TestNpmPublishWithWorkspacesRunNative(t *testing.T) { err = commands.Exec(npmpCmd) assert.NoError(t, err) + expectedTars := []string{"nested1", "nested2"} // Validate build info was created buildInfoService := build.CreateBuildInfoService() npmBuild, err := buildInfoService.GetOrCreateBuild(buildName, buildNumber) @@ -893,7 +894,7 @@ func TestNpmPublishWithWorkspacesRunNative(t *testing.T) { assert.NotEmpty(t, artifact.Sha1, "Artifact %d should have SHA1", j) assert.NotEmpty(t, artifact.Sha256, "Artifact %d should have SHA256", j) assert.NotEmpty(t, artifact.Md5, "Artifact %d should have MD5", j) - assert.Contains(t, artifact.Name, "nested"+strconv.Itoa(j+1), "Artifact %d should be named nested%d", j, j+1) + assert.True(t, containsTarName(artifact.Name, expectedTars)) } // Publish build info to Artifactory @@ -1259,3 +1260,13 @@ func TestSetupNpmCommand(t *testing.T) { assert.Equal(t, http.StatusOK, res.StatusCode) } } + +func containsTarName(tarName string, expectedTars []string) bool { + isTarPresent := false + for _, tar := range expectedTars { + strings.Contains(tarName, tar) + isTarPresent = true + break + } + return isTarPresent +} diff --git a/utils/tests/docker.go b/utils/tests/docker.go new file mode 100644 index 000000000..cf3af77f0 --- /dev/null +++ b/utils/tests/docker.go @@ -0,0 +1,192 @@ +package tests + +import ( + "io" + "os/exec" + "path" + "testing" + + gofrogcmd "github.com/jfrog/gofrog/io" + container "github.com/jfrog/jfrog-cli-artifactory/artifactory/commands/ocicontainer" + "github.com/stretchr/testify/assert" +) + +// Image get parent image id command +type BuildDockerImage struct { + // The build command builds images from a Dockerfile and a context. + // A build's context is the set of files located in the specified PATH. + // The build process can refer to any of the files in the context. + // For example, The build can use a COPY instruction to reference a file in the context. + buildContext string + dockerFileName string + imageName string + containerManager container.ContainerManagerType +} + +func NewBuildDockerImage(imageTag, dockerFilePath string, containerManager container.ContainerManagerType) *BuildDockerImage { + return &BuildDockerImage{imageName: imageTag, buildContext: dockerFilePath, containerManager: containerManager} +} + +func (image *BuildDockerImage) SetDockerFileName(name string) *BuildDockerImage { + image.dockerFileName = name + return image +} + +func (image *BuildDockerImage) GetCmd() *exec.Cmd { + var cmd []string + cmd = append(cmd, "build") + cmd = append(cmd, "--tag", image.imageName) + if image.dockerFileName != "" { + cmd = append(cmd, "--file", path.Join(image.buildContext, image.dockerFileName)) + + } + cmd = append(cmd, image.buildContext) + return exec.Command(image.containerManager.String(), cmd...) +} + +func (image *BuildDockerImage) GetEnv() map[string]string { + return map[string]string{} +} + +func (image *BuildDockerImage) GetStdWriter() io.WriteCloser { + return nil +} + +func (image *BuildDockerImage) GetErrWriter() io.WriteCloser { + return nil +} + +// The ExecDockerImage command runs a new command in a running container. +type ExecDockerImage struct { + Args []string + errCloser io.WriteCloser + stdWriter io.WriteCloser + containerManager container.ContainerManagerType +} + +func NewExecDockerImage(containerManager container.ContainerManagerType, args ...string) *ExecDockerImage { + return &ExecDockerImage{Args: args, containerManager: containerManager} +} + +func (e *ExecDockerImage) GetCmd() *exec.Cmd { + var cmd []string + cmd = append(cmd, "exec") + cmd = append(cmd, e.Args...) + return exec.Command(e.containerManager.String(), cmd...) +} + +func (e *ExecDockerImage) GetEnv() map[string]string { + return map[string]string{} +} + +func (e *ExecDockerImage) GetStdWriter() io.WriteCloser { + return e.stdWriter +} + +func (e *ExecDockerImage) SetStdWriter(writer io.WriteCloser) { + e.stdWriter = writer +} + +func (e *ExecDockerImage) GetErrWriter() io.WriteCloser { + return e.errCloser +} + +func (e *ExecDockerImage) SetErrWriter(writer io.WriteCloser) { + e.errCloser = writer +} + +type RunDockerImage struct { + Args []string + containerManager container.ContainerManagerType +} + +func NewRunDockerImage(containerManager container.ContainerManagerType, args ...string) *RunDockerImage { + return &RunDockerImage{Args: args, containerManager: containerManager} +} + +func (run *RunDockerImage) GetCmd() *exec.Cmd { + var cmd []string + cmd = append(cmd, "run") + cmd = append(cmd, run.Args...) + return exec.Command(run.containerManager.String(), cmd...) +} + +func (run *RunDockerImage) GetEnv() map[string]string { + return map[string]string{} +} + +func (run *RunDockerImage) GetStdWriter() io.WriteCloser { + return nil +} + +func (run *RunDockerImage) GetErrWriter() io.WriteCloser { + return nil +} + +type DeleteDockerImage struct { + imageTag string + containerManager container.ContainerManagerType +} + +func NewDeleteDockerImage(imageTag string, containerManager container.ContainerManagerType) *DeleteDockerImage { + return &DeleteDockerImage{imageTag: imageTag, containerManager: containerManager} +} + +func (image *DeleteDockerImage) GetCmd() *exec.Cmd { + var cmd []string + cmd = append(cmd, "image") + cmd = append(cmd, "rm") + cmd = append(cmd, image.imageTag) + return exec.Command(image.containerManager.String(), cmd...) +} + +func (image *DeleteDockerImage) GetEnv() map[string]string { + return map[string]string{} +} + +func (image *DeleteDockerImage) GetStdWriter() io.WriteCloser { + return nil +} + +func (image *DeleteDockerImage) GetErrWriter() io.WriteCloser { + return nil +} + +type DeleteContainer struct { + containerName string + containerManager container.ContainerManagerType +} + +func NewDeleteContainer(containerName string, containerManager container.ContainerManagerType) *DeleteContainer { + return &DeleteContainer{containerName: containerName, containerManager: containerManager} +} + +func (image *DeleteContainer) GetCmd() *exec.Cmd { + var cmd []string + cmd = append(cmd, "rm") + cmd = append(cmd, "--force") + cmd = append(cmd, image.containerName) + return exec.Command(image.containerManager.String(), cmd...) +} + +func (image *DeleteContainer) GetEnv() map[string]string { + return map[string]string{} +} + +func (image *DeleteContainer) GetStdWriter() io.WriteCloser { + return nil +} + +func (image *DeleteContainer) GetErrWriter() io.WriteCloser { + return nil +} + +func DeleteTestImage(t *testing.T, imageTag string, containerManagerType container.ContainerManagerType) { + imageBuilder := NewDeleteDockerImage(imageTag, containerManagerType) + assert.NoError(t, gofrogcmd.RunCmd(imageBuilder)) +} + +func DeleteTestContainer(t *testing.T, containerName string, containerManagerType container.ContainerManagerType) { + containerDelete := NewDeleteContainer(containerName, containerManagerType) + assert.NoError(t, gofrogcmd.RunCmd(containerDelete)) +} From f9b21509e6cb8a60bedb9789a2f45a8aea0438df Mon Sep 17 00:00:00 2001 From: Naveen Kumar Date: Tue, 14 Oct 2025 15:02:11 +0530 Subject: [PATCH 14/28] Added jf rbs command and its unit tesst --- lifecycle_test.go | 89 ++++++++++++++++++++++------------------------- 1 file changed, 42 insertions(+), 47 deletions(-) diff --git a/lifecycle_test.go b/lifecycle_test.go index c7a40c951..7aced23d6 100644 --- a/lifecycle_test.go +++ b/lifecycle_test.go @@ -3,7 +3,6 @@ package main import ( "encoding/json" "fmt" - "github.com/stretchr/testify/require" "net/http" "os" "path" @@ -801,23 +800,23 @@ func TestReleaseBundlesSearchGroups(t *testing.T) { { name: "No query params - all groups, default order", queryParams: services.GetSearchOptionalQueryParams{}, - expectedRbNames: []string{rbNameD, rbNameC, rbNameB, rbNameA}, + expectedRbNames: []string{rbNameD, rbNameA, rbNameB, rbNameC}, expectedTotal: 4, expectError: false, }, { name: "Filter by prefix 'my-awesome-app'", queryParams: services.GetSearchOptionalQueryParams{ - FilterBy: rbPrefix + "~", + FilterBy: "name~" + rbPrefix + "*", }, - expectedRbNames: []string{rbNameC, rbNameB, rbNameA}, + expectedRbNames: []string{rbNameA, rbNameB, rbNameC}, expectedTotal: 3, expectError: false, }, { name: "Filter by containing 'beta'", queryParams: services.GetSearchOptionalQueryParams{ - FilterBy: rbPrefix + "-beta", + FilterBy: "name~*beta*", }, expectedRbNames: []string{rbNameB}, expectedTotal: 1, @@ -827,18 +826,20 @@ func TestReleaseBundlesSearchGroups(t *testing.T) { name: "Limit to 2 results", queryParams: services.GetSearchOptionalQueryParams{ Limit: 2, - OrderBy: "created", - OrderAsc: false, + OrderBy: "name", + OrderAsc: true, }, - expectedRbNames: []string{rbNameD, rbNameC}, + expectedRbNames: []string{rbNameA, rbNameB}, expectedTotal: 4, expectError: false, }, { name: "Offset by 1, Limit to 2 results", queryParams: services.GetSearchOptionalQueryParams{ - Offset: 1, - Limit: 2, + Offset: 1, + Limit: 2, + OrderBy: "name", + OrderAsc: true, }, expectedRbNames: []string{rbNameB, rbNameC}, expectedTotal: 4, @@ -847,13 +848,24 @@ func TestReleaseBundlesSearchGroups(t *testing.T) { { name: "Order by name Descending", queryParams: services.GetSearchOptionalQueryParams{ - OrderBy: "created", + OrderBy: "name", OrderAsc: false, }, expectedRbNames: []string{rbNameD, rbNameC, rbNameB, rbNameA}, expectedTotal: 4, expectError: false, }, + { + name: "Order by name Ascending with includes (if supported)", + queryParams: services.GetSearchOptionalQueryParams{ + OrderBy: "name", + OrderAsc: true, + Includes: "properties", + }, + expectedRbNames: []string{rbNameA, rbNameB, rbNameC, rbNameD}, + expectedTotal: 4, + expectError: false, + }, } for _, tc := range testCases { @@ -867,20 +879,16 @@ func TestReleaseBundlesSearchGroups(t *testing.T) { return } assert.NoError(t, err, fmt.Sprintf("Expected no error for test case: %s", tc.name)) - if tc.queryParams.FilterBy != "" { - assert.Equal(t, tc.expectedTotal, resp.Total, "Total count mismatch for filtered search") - } else { - assert.GreaterOrEqual(t, resp.Total, tc.expectedTotal, "Total count should be at least expected for unfiltered search") - } + assert.Equal(t, tc.expectedTotal, resp.Total, "Total count mismatch") var actualNames []string for _, rb := range resp.ReleaseBundleSearchGroup { actualNames = append(actualNames, rb.ReleaseBundleName) } - if tc.queryParams.FilterBy != "" { + if tc.queryParams.OrderBy != "" { assert.Equal(t, tc.expectedRbNames, actualNames, "Release bundle names order mismatch") } else { - assert.Subset(t, actualNames, tc.expectedRbNames, "Actual names should contain all expected names") + assert.ElementsMatch(t, tc.expectedRbNames, actualNames, "Release bundle names mismatch") } }) } @@ -889,7 +897,9 @@ func TestReleaseBundlesSearchGroups(t *testing.T) { func TestReleaseBundlesSearchVersions(t *testing.T) { cleanCallback := initLifecycleTest(t, artifactoryLifecycleSetTagMinVersion) defer cleanCallback() + lcManager := getLcServiceManager(t) + deleteBuilds := uploadBuilds(t) defer deleteBuilds() @@ -902,16 +912,19 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { createRbFromSpec(t, tests.LifecycleBuilds12, rbName, versionA, true, true) defer deleteReleaseBundle(t, lcManager, rbName, versionA) assertStatusCompleted(t, lcManager, rbName, versionA, "") + time.Sleep(1 * time.Second) createRbFromSpec(t, tests.LifecycleBuilds12, rbName, versionC, true, true) defer deleteReleaseBundle(t, lcManager, rbName, versionC) assertStatusCompleted(t, lcManager, rbName, versionC, "") + time.Sleep(1 * time.Second) createRbFromSpec(t, tests.LifecycleBuilds12, rbName, versionB, true, true) defer deleteReleaseBundle(t, lcManager, rbName, versionB) assertStatusCompleted(t, lcManager, rbName, versionB, "") + time.Sleep(1 * time.Second) createRbFromSpec(t, tests.LifecycleBuilds12, rbName, versionD, true, true) @@ -919,6 +932,7 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { assertStatusCompleted(t, lcManager, rbName, versionD, "") log.Info("Created four versions for release bundle '%s' for search testing.", rbName) + time.Sleep(3 * time.Second) testCases := []struct { name string @@ -941,7 +955,7 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { name: "Filter by prefix '1.0'", releaseBundleName: rbName, queryParams: services.GetSearchOptionalQueryParams{ - FilterBy: "1.0*", + FilterBy: "version~1.0*", }, expectedRbVersions: []string{versionA, versionB}, expectedTotal: 2, @@ -951,7 +965,7 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { name: "Filter by containing 'rc'", releaseBundleName: rbName, queryParams: services.GetSearchOptionalQueryParams{ - FilterBy: "1.1.0-*", + FilterBy: "version~*rc*", }, expectedRbVersions: []string{versionC}, expectedTotal: 1, @@ -962,7 +976,7 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { releaseBundleName: rbName, queryParams: services.GetSearchOptionalQueryParams{ Limit: 2, - OrderBy: "release_bundle_version", + OrderBy: "version", OrderAsc: true, }, expectedRbVersions: []string{versionA, versionB}, @@ -975,7 +989,7 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { queryParams: services.GetSearchOptionalQueryParams{ Offset: 2, Limit: 1, - OrderBy: "release_bundle_version", + OrderBy: "version", OrderAsc: false, }, expectedRbVersions: []string{versionB}, @@ -986,7 +1000,7 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { name: "Order by version Descending", releaseBundleName: rbName, queryParams: services.GetSearchOptionalQueryParams{ - OrderBy: "release_bundle_version", + OrderBy: "version", OrderAsc: false, }, expectedRbVersions: []string{versionD, versionC, versionB, versionA}, @@ -994,13 +1008,13 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { expectError: false, }, { - name: "Order by created Ascending", + name: "Order by created_millis Ascending", releaseBundleName: rbName, queryParams: services.GetSearchOptionalQueryParams{ - OrderBy: "created", + OrderBy: "created_millis", OrderAsc: true, }, - expectedRbVersions: []string{versionA, versionC, versionB, versionD}, // Order of creation + expectedRbVersions: []string{versionA, versionC, versionB, versionD}, expectedTotal: 4, expectError: false, }, @@ -1008,25 +1022,7 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { - var resp services.ReleaseBundleVersionsResponse - var err error - - retries := 10 - delay := 5 * time.Second - - for i := 0; i < retries; i++ { - resp, err = lcManager.ReleaseBundlesSearchVersions(tc.releaseBundleName, tc.queryParams) - if err == nil && resp.Total == tc.expectedTotal { - break - } - if tc.expectError && err != nil { - break - } - log.Warn(fmt.Sprintf("Attempt %d/%d for '%s': Total count actual %d, expected %d. Retrying in %v...", - i+1, retries, tc.name, resp.Total, tc.expectedTotal, delay)) - time.Sleep(delay) - } - + resp, err := lcManager.ReleaseBundlesSearchVersions(tc.releaseBundleName, tc.queryParams) if tc.expectError { assert.Error(t, err) if tc.errorMessage != "" { @@ -1034,8 +1030,7 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { } return } - - require.NoError(t, err, fmt.Sprintf("Expected no error for test case: %s", tc.name)) + assert.NoError(t, err, fmt.Sprintf("Expected no error for test case: %s", tc.name)) assert.Equal(t, tc.expectedTotal, resp.Total, "Total count mismatch") var actualVersions []string From aeef2f8cc2a0945ca366217d1e48180cf27985cb Mon Sep 17 00:00:00 2001 From: Naveen Kumar Date: Wed, 15 Oct 2025 10:34:45 +0530 Subject: [PATCH 15/28] Updated test cases data --- lifecycle_test.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lifecycle_test.go b/lifecycle_test.go index 7aced23d6..2068b2fae 100644 --- a/lifecycle_test.go +++ b/lifecycle_test.go @@ -976,7 +976,7 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { releaseBundleName: rbName, queryParams: services.GetSearchOptionalQueryParams{ Limit: 2, - OrderBy: "version", + OrderBy: "release_bundle_version", OrderAsc: true, }, expectedRbVersions: []string{versionA, versionB}, @@ -989,7 +989,7 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { queryParams: services.GetSearchOptionalQueryParams{ Offset: 2, Limit: 1, - OrderBy: "version", + OrderBy: "release_bundle_version", OrderAsc: false, }, expectedRbVersions: []string{versionB}, @@ -1000,7 +1000,7 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { name: "Order by version Descending", releaseBundleName: rbName, queryParams: services.GetSearchOptionalQueryParams{ - OrderBy: "version", + OrderBy: "release_bundle_version", OrderAsc: false, }, expectedRbVersions: []string{versionD, versionC, versionB, versionA}, @@ -1011,7 +1011,7 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { name: "Order by created_millis Ascending", releaseBundleName: rbName, queryParams: services.GetSearchOptionalQueryParams{ - OrderBy: "created_millis", + OrderBy: "created", OrderAsc: true, }, expectedRbVersions: []string{versionA, versionC, versionB, versionD}, From 864b102cb64d46da03a90232ffea96cbe19aa1e7 Mon Sep 17 00:00:00 2001 From: Naveen Kumar Date: Wed, 15 Oct 2025 13:58:01 +0530 Subject: [PATCH 16/28] Updating go.mod and go.sum temp --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 6b5bb6ec9..f1b449a4f 100644 --- a/go.mod +++ b/go.mod @@ -19,7 +19,7 @@ require ( github.com/jfrog/build-info-go v1.12.0 github.com/jfrog/gofrog v1.7.6 github.com/jfrog/jfrog-cli-application v1.0.1 - github.com/jfrog/jfrog-cli-artifactory v0.7.3-0.20251015051724-72d111a3d107 + github.com/jfrog/jfrog-cli-artifactory v0.7.3-0.20251015052652-84ea3afaf439 github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20251015045218-1a38c9e47097 github.com/jfrog/jfrog-cli-platform-services v1.10.0 github.com/jfrog/jfrog-cli-security v1.21.8 diff --git a/go.sum b/go.sum index c1c1d9ea6..4637bff81 100644 --- a/go.sum +++ b/go.sum @@ -365,8 +365,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.1 h1:PiiSVKFFs8VLAwjCe2JrIKlX7LmARFt+r8BLTupWIDc= github.com/jfrog/jfrog-cli-application v1.0.1/go.mod h1:gjV6Q2hhoMe3FF77GFiTyIRLSHokpDrkVj0GvYM+1Y4= -github.com/jfrog/jfrog-cli-artifactory v0.7.3-0.20251015051724-72d111a3d107 h1:0VVFI1AHzMKyr/Nwxmu/Jhg3U1Rq725AQPKpSTtk7XU= -github.com/jfrog/jfrog-cli-artifactory v0.7.3-0.20251015051724-72d111a3d107/go.mod h1:nT050Wb18tTlfcQHefyMENzFOz9Vdym6WP0Z3Nc2qHc= +github.com/jfrog/jfrog-cli-artifactory v0.7.3-0.20251015052652-84ea3afaf439 h1:3B3JGujNYFpHQ69pjaPpRf0Ugny0UCU35whkcmGqaHc= +github.com/jfrog/jfrog-cli-artifactory v0.7.3-0.20251015052652-84ea3afaf439/go.mod h1:nT050Wb18tTlfcQHefyMENzFOz9Vdym6WP0Z3Nc2qHc= github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20251015045218-1a38c9e47097 h1:+W6BPxJ0nPtlQ6l6nmypW1eEANoVPiN8HDR4kQJA8uI= github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20251015045218-1a38c9e47097/go.mod h1:UOeOwEEmRIi57cRwghN5OBVoqkJieYQQfLpeqw8Yv38= github.com/jfrog/jfrog-cli-platform-services v1.10.0 h1:O+N/VAF+QjFvq9xkHpmzKLcdl9aJu3IP204Su0L14rw= From 1b397d50c3245a4acccfb5da5c4dd8d2e4adb97d Mon Sep 17 00:00:00 2001 From: Naveen Kumar Date: Wed, 15 Oct 2025 14:26:11 +0530 Subject: [PATCH 17/28] Updating test data --- lifecycle_test.go | 82 +++++++++++++++++++++++++---------------------- 1 file changed, 43 insertions(+), 39 deletions(-) diff --git a/lifecycle_test.go b/lifecycle_test.go index 2068b2fae..99b01e741 100644 --- a/lifecycle_test.go +++ b/lifecycle_test.go @@ -7,7 +7,6 @@ import ( "os" "path" "path/filepath" - "sort" "strconv" "strings" "testing" @@ -800,23 +799,23 @@ func TestReleaseBundlesSearchGroups(t *testing.T) { { name: "No query params - all groups, default order", queryParams: services.GetSearchOptionalQueryParams{}, - expectedRbNames: []string{rbNameD, rbNameA, rbNameB, rbNameC}, + expectedRbNames: []string{rbNameD, rbNameC, rbNameB, rbNameA}, expectedTotal: 4, expectError: false, }, { name: "Filter by prefix 'my-awesome-app'", queryParams: services.GetSearchOptionalQueryParams{ - FilterBy: "name~" + rbPrefix + "*", + FilterBy: rbPrefix + "~", }, - expectedRbNames: []string{rbNameA, rbNameB, rbNameC}, + expectedRbNames: []string{rbNameC, rbNameB, rbNameA}, expectedTotal: 3, expectError: false, }, { name: "Filter by containing 'beta'", queryParams: services.GetSearchOptionalQueryParams{ - FilterBy: "name~*beta*", + FilterBy: rbPrefix + "-beta", }, expectedRbNames: []string{rbNameB}, expectedTotal: 1, @@ -826,20 +825,18 @@ func TestReleaseBundlesSearchGroups(t *testing.T) { name: "Limit to 2 results", queryParams: services.GetSearchOptionalQueryParams{ Limit: 2, - OrderBy: "name", - OrderAsc: true, + OrderBy: "created", + OrderAsc: false, }, - expectedRbNames: []string{rbNameA, rbNameB}, + expectedRbNames: []string{rbNameD, rbNameC}, expectedTotal: 4, expectError: false, }, { name: "Offset by 1, Limit to 2 results", queryParams: services.GetSearchOptionalQueryParams{ - Offset: 1, - Limit: 2, - OrderBy: "name", - OrderAsc: true, + Offset: 1, + Limit: 2, }, expectedRbNames: []string{rbNameB, rbNameC}, expectedTotal: 4, @@ -848,24 +845,13 @@ func TestReleaseBundlesSearchGroups(t *testing.T) { { name: "Order by name Descending", queryParams: services.GetSearchOptionalQueryParams{ - OrderBy: "name", + OrderBy: "created", OrderAsc: false, }, expectedRbNames: []string{rbNameD, rbNameC, rbNameB, rbNameA}, expectedTotal: 4, expectError: false, }, - { - name: "Order by name Ascending with includes (if supported)", - queryParams: services.GetSearchOptionalQueryParams{ - OrderBy: "name", - OrderAsc: true, - Includes: "properties", - }, - expectedRbNames: []string{rbNameA, rbNameB, rbNameC, rbNameD}, - expectedTotal: 4, - expectError: false, - }, } for _, tc := range testCases { @@ -879,16 +865,20 @@ func TestReleaseBundlesSearchGroups(t *testing.T) { return } assert.NoError(t, err, fmt.Sprintf("Expected no error for test case: %s", tc.name)) - assert.Equal(t, tc.expectedTotal, resp.Total, "Total count mismatch") + if tc.queryParams.FilterBy != "" { + assert.Equal(t, tc.expectedTotal, resp.Total, "Total count mismatch for filtered search") + } else { + assert.GreaterOrEqual(t, resp.Total, tc.expectedTotal, "Total count should be at least expected for unfiltered search") + } var actualNames []string for _, rb := range resp.ReleaseBundleSearchGroup { actualNames = append(actualNames, rb.ReleaseBundleName) } - if tc.queryParams.OrderBy != "" { + if tc.queryParams.FilterBy != "" { assert.Equal(t, tc.expectedRbNames, actualNames, "Release bundle names order mismatch") } else { - assert.ElementsMatch(t, tc.expectedRbNames, actualNames, "Release bundle names mismatch") + assert.Subset(t, actualNames, tc.expectedRbNames, "Actual names should contain all expected names") } }) } @@ -955,7 +945,7 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { name: "Filter by prefix '1.0'", releaseBundleName: rbName, queryParams: services.GetSearchOptionalQueryParams{ - FilterBy: "version~1.0*", + FilterBy: "1.0*", }, expectedRbVersions: []string{versionA, versionB}, expectedTotal: 2, @@ -965,7 +955,7 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { name: "Filter by containing 'rc'", releaseBundleName: rbName, queryParams: services.GetSearchOptionalQueryParams{ - FilterBy: "version~*rc*", + FilterBy: "1.1.0-rc*", }, expectedRbVersions: []string{versionC}, expectedTotal: 1, @@ -1008,7 +998,7 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { expectError: false, }, { - name: "Order by created_millis Ascending", + name: "Order by created Ascending", releaseBundleName: rbName, queryParams: services.GetSearchOptionalQueryParams{ OrderBy: "created", @@ -1022,7 +1012,22 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { - resp, err := lcManager.ReleaseBundlesSearchVersions(tc.releaseBundleName, tc.queryParams) + var resp services.ReleaseBundleVersionsResponse + var err error + retries := 10 + delay := 5 * time.Second + for i := 0; i < retries; i++ { + resp, err = lcManager.ReleaseBundlesSearchVersions(tc.releaseBundleName, tc.queryParams) + if err == nil && resp.Total == tc.expectedTotal { + break + } + if tc.expectError && err != nil { + break + } + log.Warn(fmt.Sprintf("Attempt %d/%d for '%s': Total count actual %d, expected %d. Retrying in %v...", + i+1, retries, tc.name, resp.Total, tc.expectedTotal, delay)) + time.Sleep(delay) + } if tc.expectError { assert.Error(t, err) if tc.errorMessage != "" { @@ -1030,20 +1035,19 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { } return } - assert.NoError(t, err, fmt.Sprintf("Expected no error for test case: %s", tc.name)) - assert.Equal(t, tc.expectedTotal, resp.Total, "Total count mismatch") - + if tc.queryParams.FilterBy != "" { + assert.Equal(t, tc.expectedTotal, resp.Total, "Total count mismatch for filtered search") + } else { + assert.GreaterOrEqual(t, resp.Total, tc.expectedTotal, "Total count should be at least expected for unfiltered search") + } var actualVersions []string for _, rb := range resp.ReleaseBundles { actualVersions = append(actualVersions, rb.ReleaseBundleVersion) } - - if tc.queryParams.OrderBy != "" { + if tc.queryParams.FilterBy != "" { assert.Equal(t, tc.expectedRbVersions, actualVersions, "Release bundle versions order mismatch") } else { - sort.Strings(tc.expectedRbVersions) - sort.Strings(actualVersions) - assert.ElementsMatch(t, tc.expectedRbVersions, actualVersions, "Release bundle versions mismatch") + assert.Subset(t, actualVersions, tc.expectedRbVersions, "Actual names should contain all expected names") } }) } From b29aca705d71b14a09078b06759f6e70f47db328 Mon Sep 17 00:00:00 2001 From: Naveen Kumar Date: Wed, 15 Oct 2025 14:42:37 +0530 Subject: [PATCH 18/28] Updating test data --- lifecycle_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lifecycle_test.go b/lifecycle_test.go index 99b01e741..5ea5b3a72 100644 --- a/lifecycle_test.go +++ b/lifecycle_test.go @@ -947,7 +947,7 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { queryParams: services.GetSearchOptionalQueryParams{ FilterBy: "1.0*", }, - expectedRbVersions: []string{versionA, versionB}, + expectedRbVersions: []string{versionB, versionA}, expectedTotal: 2, expectError: false, }, From 3ecd37dc9a25c3af1262354ec34126b99f37c39c Mon Sep 17 00:00:00 2001 From: Naveen Kumar Date: Wed, 15 Oct 2025 15:07:18 +0530 Subject: [PATCH 19/28] Updating test data --- lifecycle_test.go | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/lifecycle_test.go b/lifecycle_test.go index 5ea5b3a72..7bd7eecf6 100644 --- a/lifecycle_test.go +++ b/lifecycle_test.go @@ -7,6 +7,7 @@ import ( "os" "path" "path/filepath" + "sort" "strconv" "strings" "testing" @@ -824,13 +825,10 @@ func TestReleaseBundlesSearchGroups(t *testing.T) { { name: "Limit to 2 results", queryParams: services.GetSearchOptionalQueryParams{ - Limit: 2, - OrderBy: "created", - OrderAsc: false, + Limit: 2, }, - expectedRbNames: []string{rbNameD, rbNameC}, - expectedTotal: 4, - expectError: false, + expectedTotal: 2, + expectError: false, }, { name: "Offset by 1, Limit to 2 results", @@ -865,12 +863,15 @@ func TestReleaseBundlesSearchGroups(t *testing.T) { return } assert.NoError(t, err, fmt.Sprintf("Expected no error for test case: %s", tc.name)) + if tc.queryParams.Limit != 0 { + actualTotal := len(resp.ReleaseBundleSearchGroup) + assert.Equal(t, tc.expectedTotal, actualTotal, tc.name) + } if tc.queryParams.FilterBy != "" { assert.Equal(t, tc.expectedTotal, resp.Total, "Total count mismatch for filtered search") } else { assert.GreaterOrEqual(t, resp.Total, tc.expectedTotal, "Total count should be at least expected for unfiltered search") } - var actualNames []string for _, rb := range resp.ReleaseBundleSearchGroup { actualNames = append(actualNames, rb.ReleaseBundleName) @@ -947,7 +948,7 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { queryParams: services.GetSearchOptionalQueryParams{ FilterBy: "1.0*", }, - expectedRbVersions: []string{versionB, versionA}, + expectedRbVersions: []string{versionA, versionB}, expectedTotal: 2, expectError: false, }, @@ -1045,6 +1046,7 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { actualVersions = append(actualVersions, rb.ReleaseBundleVersion) } if tc.queryParams.FilterBy != "" { + sort.Strings(actualVersions) assert.Equal(t, tc.expectedRbVersions, actualVersions, "Release bundle versions order mismatch") } else { assert.Subset(t, actualVersions, tc.expectedRbVersions, "Actual names should contain all expected names") From 0d7695a81bc18e32288aab2d407ef91c9a7a6b11 Mon Sep 17 00:00:00 2001 From: Naveen Kumar Date: Wed, 15 Oct 2025 15:11:20 +0530 Subject: [PATCH 20/28] Updating test data --- lifecycle_test.go | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/lifecycle_test.go b/lifecycle_test.go index 7bd7eecf6..b4cdd54a1 100644 --- a/lifecycle_test.go +++ b/lifecycle_test.go @@ -863,12 +863,8 @@ func TestReleaseBundlesSearchGroups(t *testing.T) { return } assert.NoError(t, err, fmt.Sprintf("Expected no error for test case: %s", tc.name)) - if tc.queryParams.Limit != 0 { - actualTotal := len(resp.ReleaseBundleSearchGroup) - assert.Equal(t, tc.expectedTotal, actualTotal, tc.name) - } if tc.queryParams.FilterBy != "" { - assert.Equal(t, tc.expectedTotal, resp.Total, "Total count mismatch for filtered search") + assert.Equal(t, tc.expectedTotal, len(resp.ReleaseBundleSearchGroup), "Total count mismatch for filtered search") } else { assert.GreaterOrEqual(t, resp.Total, tc.expectedTotal, "Total count should be at least expected for unfiltered search") } @@ -1037,7 +1033,7 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { return } if tc.queryParams.FilterBy != "" { - assert.Equal(t, tc.expectedTotal, resp.Total, "Total count mismatch for filtered search") + assert.Equal(t, tc.expectedTotal, len(resp.ReleaseBundles), "Total count mismatch for filtered search") } else { assert.GreaterOrEqual(t, resp.Total, tc.expectedTotal, "Total count should be at least expected for unfiltered search") } From c8b9ccb9ae80cdc54673cbb61ccbd252a393778b Mon Sep 17 00:00:00 2001 From: Naveen Kumar Date: Wed, 15 Oct 2025 15:27:28 +0530 Subject: [PATCH 21/28] Updating test data --- lifecycle_test.go | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/lifecycle_test.go b/lifecycle_test.go index b4cdd54a1..73359de3e 100644 --- a/lifecycle_test.go +++ b/lifecycle_test.go @@ -836,9 +836,8 @@ func TestReleaseBundlesSearchGroups(t *testing.T) { Offset: 1, Limit: 2, }, - expectedRbNames: []string{rbNameB, rbNameC}, - expectedTotal: 4, - expectError: false, + expectedTotal: 2, + expectError: false, }, { name: "Order by name Descending", @@ -967,7 +966,7 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { OrderAsc: true, }, expectedRbVersions: []string{versionA, versionB}, - expectedTotal: 4, + expectedTotal: 2, expectError: false, }, { @@ -980,7 +979,7 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { OrderAsc: false, }, expectedRbVersions: []string{versionB}, - expectedTotal: 4, + expectedTotal: 1, expectError: false, }, { From 4304b68422384c2c506e19bb0b980ee323425d7e Mon Sep 17 00:00:00 2001 From: Naveen Kumar Date: Wed, 15 Oct 2025 15:39:24 +0530 Subject: [PATCH 22/28] Updating test data in searchversion test --- lifecycle_test.go | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/lifecycle_test.go b/lifecycle_test.go index 73359de3e..65178e35b 100644 --- a/lifecycle_test.go +++ b/lifecycle_test.go @@ -1010,20 +1010,7 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { t.Run(tc.name, func(t *testing.T) { var resp services.ReleaseBundleVersionsResponse var err error - retries := 10 - delay := 5 * time.Second - for i := 0; i < retries; i++ { - resp, err = lcManager.ReleaseBundlesSearchVersions(tc.releaseBundleName, tc.queryParams) - if err == nil && resp.Total == tc.expectedTotal { - break - } - if tc.expectError && err != nil { - break - } - log.Warn(fmt.Sprintf("Attempt %d/%d for '%s': Total count actual %d, expected %d. Retrying in %v...", - i+1, retries, tc.name, resp.Total, tc.expectedTotal, delay)) - time.Sleep(delay) - } + resp, err = lcManager.ReleaseBundlesSearchVersions(tc.releaseBundleName, tc.queryParams) if tc.expectError { assert.Error(t, err) if tc.errorMessage != "" { From 135ae27cd46f8292d95b088dfeef83148fbd7f0d Mon Sep 17 00:00:00 2001 From: Naveen Kumar Date: Wed, 15 Oct 2025 15:55:50 +0530 Subject: [PATCH 23/28] Updating release bundle versions --- lifecycle_test.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lifecycle_test.go b/lifecycle_test.go index 65178e35b..d766d6023 100644 --- a/lifecycle_test.go +++ b/lifecycle_test.go @@ -890,10 +890,10 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { defer deleteBuilds() const rbName = "my-versioned-app" - const versionA = "1.0.0" - const versionB = "1.0.1" - const versionC = "1.1.0-rc" - const versionD = "2.0.0" + const versionA = "1.0.0.0" + const versionB = "1.0.1.0" + const versionC = "1.1.0.0-rc" + const versionD = "2.0.0.0" createRbFromSpec(t, tests.LifecycleBuilds12, rbName, versionA, true, true) defer deleteReleaseBundle(t, lcManager, rbName, versionA) From 5448fe66ffa55fe38ac91eff7fade3fc0ac228d1 Mon Sep 17 00:00:00 2001 From: Naveen Kumar Date: Wed, 15 Oct 2025 16:11:01 +0530 Subject: [PATCH 24/28] Updating test data --- lifecycle_test.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lifecycle_test.go b/lifecycle_test.go index d766d6023..2b0540fbf 100644 --- a/lifecycle_test.go +++ b/lifecycle_test.go @@ -890,10 +890,10 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { defer deleteBuilds() const rbName = "my-versioned-app" - const versionA = "1.0.0.0" - const versionB = "1.0.1.0" - const versionC = "1.1.0.0-rc" - const versionD = "2.0.0.0" + const versionA = "1.0.0.1" + const versionB = "1.0.1.1" + const versionC = "1.1.0.1-rc" + const versionD = "2.0.0.1" createRbFromSpec(t, tests.LifecycleBuilds12, rbName, versionA, true, true) defer deleteReleaseBundle(t, lcManager, rbName, versionA) @@ -951,7 +951,7 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { name: "Filter by containing 'rc'", releaseBundleName: rbName, queryParams: services.GetSearchOptionalQueryParams{ - FilterBy: "1.1.0-rc*", + FilterBy: "1.1.0.1-rc*", }, expectedRbVersions: []string{versionC}, expectedTotal: 1, From f32cc16dcf70bb83f0bcd6dec3ba2289fed8a366 Mon Sep 17 00:00:00 2001 From: Naveen Kumar Date: Wed, 15 Oct 2025 16:49:25 +0530 Subject: [PATCH 25/28] Updating test data --- lifecycle_test.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lifecycle_test.go b/lifecycle_test.go index 2b0540fbf..253d5211e 100644 --- a/lifecycle_test.go +++ b/lifecycle_test.go @@ -890,10 +890,10 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { defer deleteBuilds() const rbName = "my-versioned-app" - const versionA = "1.0.0.1" - const versionB = "1.0.1.1" - const versionC = "1.1.0.1-rc" - const versionD = "2.0.0.1" + const versionA = "3.0.0" + const versionB = "3.0.1" + const versionC = "3.1.0-rc" + const versionD = "4.0.0" createRbFromSpec(t, tests.LifecycleBuilds12, rbName, versionA, true, true) defer deleteReleaseBundle(t, lcManager, rbName, versionA) @@ -941,7 +941,7 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { name: "Filter by prefix '1.0'", releaseBundleName: rbName, queryParams: services.GetSearchOptionalQueryParams{ - FilterBy: "1.0*", + FilterBy: "3.0*", }, expectedRbVersions: []string{versionA, versionB}, expectedTotal: 2, @@ -951,7 +951,7 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { name: "Filter by containing 'rc'", releaseBundleName: rbName, queryParams: services.GetSearchOptionalQueryParams{ - FilterBy: "1.1.0.1-rc*", + FilterBy: "3.1.0-rc*", }, expectedRbVersions: []string{versionC}, expectedTotal: 1, From 6d3999d1b6ce015260c297789b60ffc23c046d65 Mon Sep 17 00:00:00 2001 From: Naveen Kumar Date: Wed, 15 Oct 2025 18:18:56 +0530 Subject: [PATCH 26/28] Updating test data --- lifecycle_test.go | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/lifecycle_test.go b/lifecycle_test.go index 253d5211e..5a4248b3b 100644 --- a/lifecycle_test.go +++ b/lifecycle_test.go @@ -769,22 +769,18 @@ func TestReleaseBundlesSearchGroups(t *testing.T) { // Create Release Bundle A createRbFromSpec(t, tests.LifecycleBuilds12, rbNameA, version1, true, true) - defer deleteReleaseBundle(t, lcManager, rbNameA, version1) assertStatusCompleted(t, lcManager, rbNameA, version1, "") // Create Release Bundle B createRbFromSpec(t, tests.LifecycleBuilds12, rbNameB, version1, true, true) - defer deleteReleaseBundle(t, lcManager, rbNameB, version1) assertStatusCompleted(t, lcManager, rbNameB, version1, "") // Create Release Bundle C createRbFromSpec(t, tests.LifecycleBuilds12, rbNameC, version1, true, true) - defer deleteReleaseBundle(t, lcManager, rbNameC, version1) assertStatusCompleted(t, lcManager, rbNameC, version1, "") // Create Release Bundle D (for filter/exclusion) createRbFromSpec(t, tests.LifecycleBuilds12, rbNameD, version1, true, true) - defer deleteReleaseBundle(t, lcManager, rbNameD, version1) assertStatusCompleted(t, lcManager, rbNameD, version1, "") time.Sleep(3 * time.Second) @@ -807,7 +803,7 @@ func TestReleaseBundlesSearchGroups(t *testing.T) { { name: "Filter by prefix 'my-awesome-app'", queryParams: services.GetSearchOptionalQueryParams{ - FilterBy: rbPrefix + "~", + FilterBy: rbPrefix + "*", }, expectedRbNames: []string{rbNameC, rbNameB, rbNameA}, expectedTotal: 3, @@ -878,6 +874,10 @@ func TestReleaseBundlesSearchGroups(t *testing.T) { } }) } + deleteReleaseBundle(t, lcManager, rbNameA, version1) + deleteReleaseBundle(t, lcManager, rbNameB, version1) + deleteReleaseBundle(t, lcManager, rbNameC, version1) + deleteReleaseBundle(t, lcManager, rbNameD, version1) } func TestReleaseBundlesSearchVersions(t *testing.T) { @@ -890,31 +890,27 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { defer deleteBuilds() const rbName = "my-versioned-app" - const versionA = "3.0.0" - const versionB = "3.0.1" - const versionC = "3.1.0-rc" - const versionD = "4.0.0" + const versionA = "1.0.0" + const versionB = "1.0.1" + const versionC = "1.1.0-rc" + const versionD = "2.0.0" createRbFromSpec(t, tests.LifecycleBuilds12, rbName, versionA, true, true) - defer deleteReleaseBundle(t, lcManager, rbName, versionA) assertStatusCompleted(t, lcManager, rbName, versionA, "") time.Sleep(1 * time.Second) createRbFromSpec(t, tests.LifecycleBuilds12, rbName, versionC, true, true) - defer deleteReleaseBundle(t, lcManager, rbName, versionC) assertStatusCompleted(t, lcManager, rbName, versionC, "") time.Sleep(1 * time.Second) createRbFromSpec(t, tests.LifecycleBuilds12, rbName, versionB, true, true) - defer deleteReleaseBundle(t, lcManager, rbName, versionB) assertStatusCompleted(t, lcManager, rbName, versionB, "") time.Sleep(1 * time.Second) createRbFromSpec(t, tests.LifecycleBuilds12, rbName, versionD, true, true) - defer deleteReleaseBundle(t, lcManager, rbName, versionD) assertStatusCompleted(t, lcManager, rbName, versionD, "") log.Info("Created four versions for release bundle '%s' for search testing.", rbName) @@ -941,7 +937,7 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { name: "Filter by prefix '1.0'", releaseBundleName: rbName, queryParams: services.GetSearchOptionalQueryParams{ - FilterBy: "3.0*", + FilterBy: "1.0*", }, expectedRbVersions: []string{versionA, versionB}, expectedTotal: 2, @@ -951,7 +947,7 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { name: "Filter by containing 'rc'", releaseBundleName: rbName, queryParams: services.GetSearchOptionalQueryParams{ - FilterBy: "3.1.0-rc*", + FilterBy: "1.1.0-rc*", }, expectedRbVersions: []string{versionC}, expectedTotal: 1, @@ -1035,6 +1031,10 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { } }) } + deleteReleaseBundle(t, lcManager, rbName, versionA) + deleteReleaseBundle(t, lcManager, rbName, versionB) + deleteReleaseBundle(t, lcManager, rbName, versionC) + deleteReleaseBundle(t, lcManager, rbName, versionD) } func setReleaseBundleTag(t *testing.T, lcManager *lifecycle.LifecycleServicesManager, rbName, rbVersion, From 21cdffbb278a98fd8053887d26555e57c3763e50 Mon Sep 17 00:00:00 2001 From: Naveen Kumar Date: Wed, 15 Oct 2025 19:17:33 +0530 Subject: [PATCH 27/28] Updating test data final --- go.mod | 100 +++++++++--------- go.sum | 262 ++++++++++++++++++++++------------------------ lifecycle_test.go | 45 ++++---- 3 files changed, 205 insertions(+), 202 deletions(-) diff --git a/go.mod b/go.mod index 6b5bb6ec9..5d81ad5b0 100644 --- a/go.mod +++ b/go.mod @@ -13,7 +13,7 @@ replace ( require ( github.com/agnivade/levenshtein v1.2.1 github.com/buger/jsonparser v1.1.1 - github.com/docker/docker v27.5.1+incompatible + github.com/docker/docker v28.5.1+incompatible github.com/gocarina/gocsv v0.0.0-20240520201108-78e41c74b4b1 github.com/jfrog/archiver/v3 v3.6.1 github.com/jfrog/build-info-go v1.12.0 @@ -27,17 +27,16 @@ require ( github.com/jszwec/csvutil v1.10.0 github.com/manifoldco/promptui v0.9.0 github.com/stretchr/testify v1.11.1 - github.com/testcontainers/testcontainers-go v0.35.0 + github.com/testcontainers/testcontainers-go v0.39.0 github.com/urfave/cli v1.22.17 github.com/xeipuuv/gojsonschema v1.2.0 - golang.org/x/exp v0.0.0-20250911091902-df9299821621 + golang.org/x/exp v0.0.0-20251009144603-d2f985daa21b gopkg.in/yaml.v2 v2.4.0 ) require ( dario.cat/mergo v1.0.2 // indirect - github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6 // indirect - github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect + github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c // indirect github.com/BurntSushi/toml v1.5.0 // indirect github.com/CycloneDX/cyclonedx-go v0.9.3 // indirect github.com/Masterminds/semver/v3 v3.4.0 // indirect @@ -48,42 +47,46 @@ require ( github.com/andybalholm/brotli v1.2.0 // indirect github.com/apache/camel-k/v2 v2.8.0 // indirect github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect - github.com/beevik/etree v1.4.0 // indirect + github.com/beevik/etree v1.6.0 // indirect github.com/blang/semver v3.5.1+incompatible // indirect github.com/c-bata/go-prompt v0.2.6 // indirect github.com/cenkalti/backoff/v4 v4.3.0 // indirect github.com/cenkalti/backoff/v5 v5.0.2 // indirect github.com/chzyer/readline v1.5.1 // indirect + github.com/clipperhouse/uax29/v2 v2.2.0 // indirect github.com/cloudflare/circl v1.6.1 // indirect + github.com/containerd/errdefs v1.0.0 // indirect + github.com/containerd/errdefs/pkg v0.3.0 // indirect github.com/containerd/log v0.1.0 // indirect github.com/containerd/platforms v0.2.1 // indirect github.com/cpuguy83/dockercfg v0.3.2 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.7 // indirect github.com/cyberphone/json-canonicalization v0.0.0-20220623050100-57a0ce2678a7 // indirect - github.com/cyphar/filepath-securejoin v0.4.1 // indirect + github.com/cyphar/filepath-securejoin v0.5.0 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/digitorus/pkcs7 v0.0.0-20230818184609-3a137a874352 // indirect github.com/digitorus/timestamp v0.0.0-20231217203849-220c5c2851b7 // indirect github.com/distribution/reference v0.6.0 // indirect - github.com/docker/go-connections v0.5.0 // indirect + github.com/docker/go-connections v0.6.0 // indirect github.com/docker/go-units v0.5.0 // indirect github.com/dsnet/compress v0.0.2-0.20230904184137-39efe44ab707 // indirect + github.com/ebitengine/purego v0.9.0 // indirect github.com/emirpasic/gods v1.18.1 // indirect github.com/fatih/color v1.18.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/forPelevin/gomoji v1.4.0 // indirect github.com/fsnotify/fsnotify v1.9.0 // indirect github.com/fxamacker/cbor/v2 v2.8.0 // indirect - github.com/gfleury/go-bitbucket-v1 v0.0.0-20230825095122-9bc1711434ab // indirect + github.com/gfleury/go-bitbucket-v1 v0.0.0-20240917142304-df385efaac68 // indirect github.com/go-chi/chi v4.1.2+incompatible // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect github.com/go-git/go-billy/v5 v5.6.2 // indirect github.com/go-git/go-git/v5 v5.16.3 // indirect - github.com/go-jose/go-jose/v4 v4.0.5 // indirect + github.com/go-jose/go-jose/v4 v4.1.2 // indirect github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-logr/zapr v1.3.0 // indirect - github.com/go-ole/go-ole v1.2.6 // indirect + github.com/go-ole/go-ole v1.3.0 // indirect github.com/go-openapi/analysis v0.23.0 // indirect github.com/go-openapi/errors v0.22.1 // indirect github.com/go-openapi/jsonpointer v0.21.1 // indirect @@ -107,12 +110,12 @@ require ( github.com/google/go-querystring v1.1.0 // indirect github.com/google/uuid v1.6.0 // indirect github.com/gookit/color v1.6.0 // indirect - github.com/grokify/mogo v0.64.12 // indirect + github.com/grokify/mogo v0.71.3 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-hclog v1.6.3 // indirect - github.com/hashicorp/go-plugin v1.6.3 // indirect - github.com/hashicorp/go-retryablehttp v0.7.7 // indirect - github.com/hashicorp/yamux v0.1.1 // indirect + github.com/hashicorp/go-plugin v1.7.0 // indirect + github.com/hashicorp/go-retryablehttp v0.7.8 // indirect + github.com/hashicorp/yamux v0.1.2 // indirect github.com/in-toto/attestation v1.1.1 // indirect github.com/in-toto/in-toto-golang v0.9.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect @@ -124,66 +127,65 @@ require ( github.com/jfrog/jfrog-apps-config v1.0.1 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect - github.com/kevinburke/ssh_config v1.2.0 // indirect + github.com/kevinburke/ssh_config v1.4.0 // indirect github.com/klauspost/compress v1.18.0 // indirect github.com/klauspost/cpuid/v2 v2.3.0 // indirect github.com/klauspost/pgzip v1.2.6 // indirect - github.com/ktrysmt/go-bitbucket v0.9.80 // indirect + github.com/ktrysmt/go-bitbucket v0.9.87 // indirect github.com/letsencrypt/boulder v0.0.0-20240620165639-de9c06129bec // indirect - github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect + github.com/lufia/plan9stats v0.0.0-20251013123823-9fd1530e3ec3 // indirect github.com/magiconair/properties v1.8.10 // indirect github.com/mailru/easyjson v0.9.0 // indirect github.com/mattn/go-colorable v0.1.14 // indirect github.com/mattn/go-isatty v0.0.20 // indirect - github.com/mattn/go-runewidth v0.0.16 // indirect + github.com/mattn/go-runewidth v0.0.19 // indirect github.com/mattn/go-tty v0.0.7 // indirect github.com/microsoft/azure-devops-go-api/azuredevops/v7 v7.1.0 // indirect github.com/minio/sha256-simd v1.0.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/moby/docker-image-spec v1.3.1 // indirect + github.com/moby/go-archive v0.1.0 // indirect github.com/moby/patternmatcher v0.6.0 // indirect - github.com/moby/sys/sequential v0.5.0 // indirect - github.com/moby/sys/user v0.1.0 // indirect + github.com/moby/sys/sequential v0.6.0 // indirect + github.com/moby/sys/user v0.4.0 // indirect github.com/moby/sys/userns v0.1.0 // indirect - github.com/moby/term v0.5.0 // indirect + github.com/moby/term v0.5.2 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/morikuni/aec v1.0.0 // indirect github.com/nwaples/rardecode v1.1.3 // indirect - github.com/oklog/run v1.0.0 // indirect + github.com/oklog/run v1.2.0 // indirect github.com/oklog/ulid v1.3.1 // indirect github.com/onsi/ginkgo/v2 v2.25.1 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect - github.com/opencontainers/image-spec v1.1.0 // indirect + github.com/opencontainers/image-spec v1.1.1 // indirect github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/owenrumney/go-sarif/v3 v3.2.3 // indirect github.com/package-url/packageurl-go v0.1.3 // indirect github.com/pelletier/go-toml/v2 v2.2.4 // indirect github.com/pierrec/lz4/v4 v4.1.22 // indirect - github.com/pjbgf/sha1cd v0.3.2 // indirect + github.com/pjbgf/sha1cd v0.5.0 // indirect github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pkg/term v1.2.0-beta.2 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect + github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect github.com/rivo/uniseg v0.4.7 // indirect github.com/robfig/cron/v3 v3.0.1 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect - github.com/sagikazarmark/locafero v0.11.0 // indirect + github.com/sagikazarmark/locafero v0.12.0 // indirect github.com/sassoftware/relic v7.2.1+incompatible // indirect github.com/secure-systems-lab/go-securesystemslib v0.9.0 // indirect - github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect + github.com/sergi/go-diff v1.4.0 // indirect github.com/shibumi/go-pathspec v1.3.0 // indirect - github.com/shirou/gopsutil/v3 v3.23.12 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/shirou/gopsutil/v4 v4.25.9 // indirect github.com/sigstore/protobuf-specs v0.5.0 // indirect github.com/sigstore/rekor v1.3.10 // indirect github.com/sigstore/sigstore v1.9.4 // indirect github.com/sigstore/sigstore-go v1.0.0 // indirect github.com/sigstore/timestamp-authority v1.2.7 // indirect github.com/sirupsen/logrus v1.9.3 // indirect - github.com/skeema/knownhosts v1.3.1 // indirect - github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 // indirect + github.com/skeema/knownhosts v1.3.2 // indirect github.com/spf13/afero v1.15.0 // indirect github.com/spf13/cast v1.10.0 // indirect github.com/spf13/cobra v1.10.1 // indirect @@ -195,44 +197,44 @@ require ( github.com/theupdateframework/go-tuf v0.7.0 // indirect github.com/theupdateframework/go-tuf/v2 v2.1.1 // indirect github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399 // indirect - github.com/tklauser/go-sysconf v0.3.12 // indirect - github.com/tklauser/numcpus v0.6.1 // indirect + github.com/tklauser/go-sysconf v0.3.15 // indirect + github.com/tklauser/numcpus v0.10.0 // indirect github.com/transparency-dev/merkle v0.0.2 // indirect github.com/ulikunitz/xz v0.5.15 // indirect github.com/vbauerster/mpb/v8 v8.10.2 // indirect github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 // indirect github.com/x448/float16 v0.8.4 // indirect - github.com/xanzy/go-gitlab v0.110.0 // indirect + github.com/xanzy/go-gitlab v0.115.0 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 // indirect github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect - github.com/yusufpapurcu/wmi v1.2.3 // indirect + github.com/yusufpapurcu/wmi v1.2.4 // indirect go.mongodb.org/mongo-driver v1.14.0 // indirect - go.opentelemetry.io/auto/sdk v1.1.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0 // indirect - go.opentelemetry.io/otel v1.37.0 // indirect + go.opentelemetry.io/auto/sdk v1.2.1 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0 // indirect + go.opentelemetry.io/otel v1.38.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.34.0 // indirect - go.opentelemetry.io/otel/metric v1.37.0 // indirect - go.opentelemetry.io/otel/trace v1.37.0 // indirect + go.opentelemetry.io/otel/metric v1.38.0 // indirect + go.opentelemetry.io/otel/trace v1.38.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect go.yaml.in/yaml/v2 v2.4.2 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect golang.org/x/crypto v0.43.0 // indirect - golang.org/x/mod v0.28.0 // indirect - golang.org/x/net v0.45.0 // indirect - golang.org/x/oauth2 v0.31.0 // indirect + golang.org/x/mod v0.29.0 // indirect + golang.org/x/net v0.46.0 // indirect + golang.org/x/oauth2 v0.32.0 // indirect golang.org/x/sync v0.17.0 // indirect golang.org/x/sys v0.37.0 // indirect golang.org/x/term v0.36.0 // indirect golang.org/x/text v0.30.0 // indirect - golang.org/x/time v0.12.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20250414145226-207652e42e2e // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250414145226-207652e42e2e // indirect - google.golang.org/grpc v1.72.2 // indirect - google.golang.org/protobuf v1.36.8 // indirect + golang.org/x/time v0.14.0 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20250804133106-a7a43d27e69b // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20251014184007-4626949a642f // indirect + google.golang.org/grpc v1.76.0 // indirect + google.golang.org/protobuf v1.36.10 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect diff --git a/go.sum b/go.sum index c1c1d9ea6..afe374306 100644 --- a/go.sum +++ b/go.sum @@ -5,9 +5,8 @@ cloud.google.com/go/auth v0.16.0 h1:Pd8P1s9WkcrBE2n/PhAwKsdrR35V3Sg2II9B+ndM3CU= cloud.google.com/go/auth v0.16.0/go.mod h1:1howDHJ5IETh/LwYs3ZxvlkXF48aSqqJUM+5o02dNOI= cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= -cloud.google.com/go/compute/metadata v0.3.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= -cloud.google.com/go/compute/metadata v0.6.0 h1:A6hENjEsCDtC1k8byVsgwvVcioamEHvZ4j01OwKxG9I= -cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg= +cloud.google.com/go/compute/metadata v0.7.0 h1:PBWF+iiAerVNe8UCHxdOt6eHLVc3ydFeOCw78U8ytSU= +cloud.google.com/go/compute/metadata v0.7.0/go.mod h1:j5MvL9PprKL39t166CoB1uVHfQMs4tFQZZcKwksXUjo= cloud.google.com/go/iam v1.5.0 h1:QlLcVMhbLGOjRcGe6VTGGTyQib8dRLK2B/kYNV0+2xs= cloud.google.com/go/iam v1.5.0/go.mod h1:U+DOtKQltF/LxPEtcDLoobcsZMilSRwR7mgNL7knOpo= cloud.google.com/go/kms v1.21.2 h1:c/PRUSMNQ8zXrc1sdAUnsenWWaNXN+PzTXfXOcSFdoE= @@ -32,8 +31,8 @@ github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.3.1 h1:Wgf5rZb github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.3.1/go.mod h1:xxCBG/f/4Vbmh2XQJBsOmNdxWUY5j/s27jujKPbQf14= github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.1.1 h1:bFWuoEKg+gImo7pvkiQEFAc8ocibADgXeiLAxWhWmkI= github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.1.1/go.mod h1:Vih/3yc6yac2JzU4hzpaDupBJP0Flaia9rXXrU8xyww= -github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= -github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= +github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c h1:udKWzYgxTojEKWjV8V+WSxDXJ4NFATAsZjh8iIbsQIg= +github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/AzureAD/microsoft-authentication-library-for-go v1.4.2 h1:oygO0locgZJe7PpYPXT5A29ZkwJaPqcva7BVeemZOZs= github.com/AzureAD/microsoft-authentication-library-for-go v1.4.2/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg= @@ -97,8 +96,8 @@ github.com/aws/aws-sdk-go-v2/service/sts v1.33.19 h1:1XuUZ8mYJw9B6lzAkXhqHlJd/Xv github.com/aws/aws-sdk-go-v2/service/sts v1.33.19/go.mod h1:cQnB8CUnxbMU82JvlqjKR2HBOm3fe9pWorWBza6MBJ4= github.com/aws/smithy-go v1.22.2 h1:6D9hW43xKFrRx/tXXfAlIZc4JI+yQe6snnWcQyxSyLQ= github.com/aws/smithy-go v1.22.2/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg= -github.com/beevik/etree v1.4.0 h1:oz1UedHRepuY3p4N5OjE0nK1WLCqtzHf25bxplKOHLs= -github.com/beevik/etree v1.4.0/go.mod h1:cyWiXwGoasx60gHvtnEh5x8+uIjUVnjWqBvEnhnqKDA= +github.com/beevik/etree v1.6.0 h1:u8Kwy8pp9D9XeITj2Z0XtA5qqZEmtJtuXZRQi+j03eE= +github.com/beevik/etree v1.6.0/go.mod h1:bh4zJxiIr62SOf9pRzN7UUYaEDa9HEKafK25+sLc0Gc= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= @@ -126,10 +125,16 @@ github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObk github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/chzyer/test v1.0.0 h1:p3BQDXSxOhOG0P9z6/hGnII4LGiEPOYBhs8asl/fC04= github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8= +github.com/clipperhouse/uax29/v2 v2.2.0 h1:ChwIKnQN3kcZteTXMgb1wztSgaU+ZemkgWdohwgs8tY= +github.com/clipperhouse/uax29/v2 v2.2.0/go.mod h1:EFJ2TJMRUaplDxHKj1qAEhCtQPW2tJSwu5BF98AuoVM= github.com/cloudflare/circl v1.6.1 h1:zqIqSPIndyBh1bjLVVDHMPpVKqp8Su/V+6MeDzzQBQ0= github.com/cloudflare/circl v1.6.1/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs= github.com/codahale/rfc6979 v0.0.0-20141003034818-6a90f24967eb h1:EDmT6Q9Zs+SbUoc7Ik9EfrFqcylYqgPZ9ANSbTAntnE= github.com/codahale/rfc6979 v0.0.0-20141003034818-6a90f24967eb/go.mod h1:ZjrT6AXHbDs86ZSdt/osfBi5qfexBrKUdONk989Wnk4= +github.com/containerd/errdefs v1.0.0 h1:tg5yIfIlQIrxYtu9ajqY42W3lpS19XqdxRQeEwYG8PI= +github.com/containerd/errdefs v1.0.0/go.mod h1:+YBYIdtsnF4Iw6nWZhJcqGSg/dwvV7tyJ/kCkyJ2k+M= +github.com/containerd/errdefs/pkg v0.3.0 h1:9IKJ06FvyNlexW690DXuQNx2KA2cUJXx151Xdx3ZPPE= +github.com/containerd/errdefs/pkg v0.3.0/go.mod h1:NJw6s9HwNuRhnjJhM7pylWwMyAkmCQvQ4GpJHEqRLVk= github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= github.com/containerd/platforms v0.2.1 h1:zvwtM3rz2YHPQsF2CHYM8+KtB5dvhISiXh5ZpSBQv6A= @@ -139,13 +144,12 @@ github.com/cpuguy83/dockercfg v0.3.2/go.mod h1:sugsbF4//dDlL/i+S+rtpIWp+5h0BHJHf github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= github.com/cpuguy83/go-md2man/v2 v2.0.7 h1:zbFlGlXEAKlwXpmvle3d8Oe3YnkKIK4xSRTd3sHPnBo= github.com/cpuguy83/go-md2man/v2 v2.0.7/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= github.com/cyberphone/json-canonicalization v0.0.0-20220623050100-57a0ce2678a7 h1:vU+EP9ZuFUCYE0NYLwTSob+3LNEJATzNfP/DC7SWGWI= github.com/cyberphone/json-canonicalization v0.0.0-20220623050100-57a0ce2678a7/go.mod h1:uzvlm1mxhHkdfqitSA92i7Se+S9ksOn3a3qmv/kyOCw= -github.com/cyphar/filepath-securejoin v0.4.1 h1:JyxxyPEaktOD+GAnqIqTf9A8tHyAG22rowi7HkoSU1s= -github.com/cyphar/filepath-securejoin v0.4.1/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI= +github.com/cyphar/filepath-securejoin v0.5.0 h1:hIAhkRBMQ8nIeuVwcAoymp7MY4oherZdAxD+m0u9zaw= +github.com/cyphar/filepath-securejoin v0.5.0/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI= github.com/danieljoos/wincred v1.2.0 h1:ozqKHaLK0W/ii4KVbbvluM91W2H3Sh0BncbUNPS7jLE= github.com/danieljoos/wincred v1.2.0/go.mod h1:FzQLLMKBFdvu+osBrnFODiv32YGwCfx0SkRa/eYHgec= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -161,15 +165,17 @@ github.com/digitorus/timestamp v0.0.0-20231217203849-220c5c2851b7 h1:lxmTCgmHE1G github.com/digitorus/timestamp v0.0.0-20231217203849-220c5c2851b7/go.mod h1:GvWntX9qiTlOud0WkQ6ewFm0LPy5JUR1Xo0Ngbd1w6Y= github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= -github.com/docker/docker v27.5.1+incompatible h1:4PYU5dnBYqRQi0294d1FBECqT9ECWeQAIfE8q4YnPY8= -github.com/docker/docker v27.5.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= -github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc= +github.com/docker/docker v28.5.1+incompatible h1:Bm8DchhSD2J6PsFzxC35TZo4TLGR2PdW/E69rU45NhM= +github.com/docker/docker v28.5.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/go-connections v0.6.0 h1:LlMG9azAe1TqfR7sO+NJttz1gy6KO7VJBh+pMmjSD94= +github.com/docker/go-connections v0.6.0/go.mod h1:AahvXYshr6JgfUJGdDCs2b5EZG/vmaMAntpSFH5BFKE= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/dsnet/compress v0.0.2-0.20230904184137-39efe44ab707 h1:2tV76y6Q9BB+NEBasnqvs7e49aEBFI8ejC89PSnWH+4= github.com/dsnet/compress v0.0.2-0.20230904184137-39efe44ab707/go.mod h1:qssHWj60/X5sZFNxpG4HBPDHVqxNm4DfnCKgrbZOT+s= github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdfkVLjJ8T6VcRQv3SXugXy999NBtR9aFY= +github.com/ebitengine/purego v0.9.0 h1:mh0zpKBIXDceC63hpvPuGLiJ8ZAa3DfrFTudmfi8A4k= +github.com/ebitengine/purego v0.9.0/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/elazarl/goproxy v1.7.2 h1:Y2o6urb7Eule09PjlhQRGNsqRfPmYI3KKQLFpCAV3+o= github.com/elazarl/goproxy v1.7.2/go.mod h1:82vkLNir0ALaW14Rc399OTTjyNREgmdL2cVoIbS6XaE= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= @@ -187,8 +193,10 @@ github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= github.com/fxamacker/cbor/v2 v2.8.0 h1:fFtUGXUzXPHTIUdne5+zzMPTfffl3RD5qYnkY40vtxU= github.com/fxamacker/cbor/v2 v2.8.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ= -github.com/gfleury/go-bitbucket-v1 v0.0.0-20230825095122-9bc1711434ab h1:+7KwW/yy/ThnRXW9khailFFncxJiiFpxyk5BI9GK9pI= -github.com/gfleury/go-bitbucket-v1 v0.0.0-20230825095122-9bc1711434ab/go.mod h1:IqOZzks2wlWCIai0esXnZPdPwxF2yOz0HcCYw5I4pCg= +github.com/gfleury/go-bitbucket-v1 v0.0.0-20240917142304-df385efaac68 h1:iJXWkoIPk3e8RVHhQE/gXfP2TP3OLQ9vVPNSJ+oL6mM= +github.com/gfleury/go-bitbucket-v1 v0.0.0-20240917142304-df385efaac68/go.mod h1:bB7XwdZF40tLVnu9n5A9TjI2ddNZtLYImtwYwmcmnRo= +github.com/gfleury/go-bitbucket-v1/test/bb-mock-server v0.0.0-20230825095122-9bc1711434ab h1:BeG9dDWckFi/p5Gvqq3wTEDXsUV4G6bdvjEHMOT2B8E= +github.com/gfleury/go-bitbucket-v1/test/bb-mock-server v0.0.0-20230825095122-9bc1711434ab/go.mod h1:VssB0kb1cETNaFFC/0mHVCj+7i5TS2xraYq+tl9JLwE= github.com/gliderlabs/ssh v0.3.8 h1:a4YXD1V7xMF9g5nTkdfnja3Sxy1PVDCj1Zg4Wb8vY6c= github.com/gliderlabs/ssh v0.3.8/go.mod h1:xYoytBv1sV0aL3CavoDuJIQNURXkkfPA/wxQ1pL1fAU= github.com/go-chi/chi v4.1.2+incompatible h1:fGFk2Gmi/YKXk0OmGfBh0WgmN3XB8lVnEyNz34tQRec= @@ -201,8 +209,8 @@ github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMj github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII= github.com/go-git/go-git/v5 v5.16.3 h1:Z8BtvxZ09bYm/yYNgPKCzgWtaRqDTgIKRgIRHBfU6Z8= github.com/go-git/go-git/v5 v5.16.3/go.mod h1:4Ge4alE/5gPs30F2H1esi2gPd69R0C39lolkucHBOp8= -github.com/go-jose/go-jose/v4 v4.0.5 h1:M6T8+mKZl/+fNNuFHvGIzDz7BTLQPIounk/b9dw3AaE= -github.com/go-jose/go-jose/v4 v4.0.5/go.mod h1:s3P1lRrkT8igV8D9OjyL4WRyHvjB6a4JSllnOrmmBOA= +github.com/go-jose/go-jose/v4 v4.1.2 h1:TK/7NqRQZfgAh+Td8AlsrvtPoUyiHh0LqVvokh+1vHI= +github.com/go-jose/go-jose/v4 v4.1.2/go.mod h1:22cg9HWM1pOlnRiY+9cQYJ9XHmya1bYW8OeDM6Ku6Oo= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= @@ -210,8 +218,9 @@ github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ= github.com/go-logr/zapr v1.3.0/go.mod h1:YKepepNBd1u/oyhd/yQmtjVXmm9uML4IXUgMOwR8/Gg= -github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= +github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= github.com/go-openapi/analysis v0.23.0 h1:aGday7OWupfMs+LbmLZG4k0MYXIANxcuBTYUC03zFCU= github.com/go-openapi/analysis v0.23.0/go.mod h1:9mz9ZWaSlV8TvjQHLl2mUW2PbZtemkE8yA5v22ohupo= github.com/go-openapi/errors v0.22.1 h1:kslMRRnK7NCb/CvR1q1VWuEQCEIsBGn5GgKD9e+HYhU= @@ -261,9 +270,7 @@ github.com/google/certificate-transparency-go v1.3.2 h1:9ahSNZF2o7SYMaKaXhAumVEz github.com/google/certificate-transparency-go v1.3.2/go.mod h1:H5FpMUaGa5Ab2+KCYsxg6sELw3Flkl7pGZzWdBoYLXs= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/go-containerregistry v0.20.3 h1:oNx7IdTI936V8CQRveCjaxOiegWwvM7kqkbXTpyiovI= @@ -294,8 +301,11 @@ github.com/gookit/assert v0.1.1 h1:lh3GcawXe/p+cU7ESTZ5Ui3Sm/x8JWpIis4/1aF0mY0= github.com/gookit/assert v0.1.1/go.mod h1:jS5bmIVQZTIwk42uXl4lyj4iaaxx32tqH16CFj0VX2E= github.com/gookit/color v1.6.0 h1:JjJXBTk1ETNyqyilJhkTXJYYigHG24TM9Xa2M1xAhRA= github.com/gookit/color v1.6.0/go.mod h1:9ACFc7/1IpHGBW8RwuDm/0YEnhg3dwwXpoMsmtyHfjs= -github.com/grokify/mogo v0.64.12 h1:BNrZ1qBFuX4qu5722CW6qtqu/mrrsZ3bhKu/w1KowKg= -github.com/grokify/mogo v0.64.12/go.mod h1:lDhfYIiOhJo7C2U3aL00PlUU9gLvmTONi4MdIWoGmGM= +github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= +github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= +github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= +github.com/grokify/mogo v0.71.3 h1:pyKaemxp/cRur8XkAN+X/tvuuS4M4/NjdmPE6peMVLA= +github.com/grokify/mogo v0.71.3/go.mod h1:sjelEb87kMJPyJrJXfI7qwP+pQwd+Icm9Au7NTAB0Fw= github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 h1:5ZPtiqj0JL5oKWmcsq4VMaAW5ukBEgSGXEN89zeH1Jo= github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3/go.mod h1:ndYquD05frm2vACXE1nsccT4oJzjhw2arTS2cpUD1PI= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= @@ -306,10 +316,10 @@ github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB1 github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= -github.com/hashicorp/go-plugin v1.6.3 h1:xgHB+ZUSYeuJi96WtxEjzi23uh7YQpznjGh0U0UUrwg= -github.com/hashicorp/go-plugin v1.6.3/go.mod h1:MRobyh+Wc/nYy1V4KAXUiYfzxoYhs7V1mlH1Z7iY2h0= -github.com/hashicorp/go-retryablehttp v0.7.7 h1:C8hUCYzor8PIfXHa4UrZkU4VvK8o9ISHxT2Q8+VepXU= -github.com/hashicorp/go-retryablehttp v0.7.7/go.mod h1:pkQpWZeYWskR+D1tR2O5OcBFOxfA7DoAO6xtkuQnHTk= +github.com/hashicorp/go-plugin v1.7.0 h1:YghfQH/0QmPNc/AZMTFE3ac8fipZyZECHdDPshfk+mA= +github.com/hashicorp/go-plugin v1.7.0/go.mod h1:BExt6KEaIYx804z8k4gRzRLEvxKVb+kn0NMcihqOqb8= +github.com/hashicorp/go-retryablehttp v0.7.8 h1:ylXZWnqa7Lhqpk0L1P1LzDtGcCR0rPVUrx/c8Unxc48= +github.com/hashicorp/go-retryablehttp v0.7.8/go.mod h1:rjiScheydd+CxvumBsIrFKlx3iS0jrZ7LvzFGFmuKbw= github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= github.com/hashicorp/go-secure-stdlib/parseutil v0.1.7 h1:UpiO20jno/eV1eVZcxqWnUohyKRe1g8FPV/xH1s/2qs= @@ -325,8 +335,8 @@ github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/vault/api v1.16.0 h1:nbEYGJiAPGzT9U4oWgaaB0g+Rj8E59QuHKyA5LhwQN4= github.com/hashicorp/vault/api v1.16.0/go.mod h1:KhuUhzOD8lDSk29AtzNjgAu2kxRA9jL9NAbkFlqvkBA= -github.com/hashicorp/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= -github.com/hashicorp/yamux v0.1.1/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ= +github.com/hashicorp/yamux v0.1.2 h1:XtB8kyFOyHXYVFnwT5C3+Bdo8gArse7j2AQ0DA0Uey8= +github.com/hashicorp/yamux v0.1.2/go.mod h1:C+zze2n6e/7wshOZep2A70/aQU6QBRWJO/G6FT1wIns= github.com/howeyc/gopass v0.0.0-20210920133722-c8aef6fb66ef h1:A9HsByNhogrvm9cWb28sjiS3i7tcKCkflWFEkHfuAgM= github.com/howeyc/gopass v0.0.0-20210920133722-c8aef6fb66ef/go.mod h1:lADxMC39cJJqL93Duh1xhAs4I2Zs8mKS89XWXFGp9cs= github.com/in-toto/attestation v1.1.1 h1:QD3d+oATQ0dFsWoNh5oT0udQ3tUrOsZZ0Fc3tSgWbzI= @@ -387,10 +397,8 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jszwec/csvutil v1.10.0 h1:upMDUxhQKqZ5ZDCs/wy+8Kib8rZR8I8lOR34yJkdqhI= github.com/jszwec/csvutil v1.10.0/go.mod h1:/E4ONrmGkwmWsk9ae9jpXnv9QT8pLHEPcCirMFhxG9I= -github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= -github.com/k0kubun/pp v3.0.1+incompatible/go.mod h1:GWse8YhT0p8pT4ir3ZgBbfZild3tgzSScAn6HmfYukg= -github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= -github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/kevinburke/ssh_config v1.4.0 h1:6xxtP5bZ2E4NF5tuQulISpTO2z8XbtH8cg1PWkxoFkQ= +github.com/kevinburke/ssh_config v1.4.0/go.mod h1:q2RIzfka+BXARoNexmF9gkxEX7DmvbW9P4hIVx2Kg4M= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= @@ -402,29 +410,26 @@ github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU= github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/ktrysmt/go-bitbucket v0.9.80 h1:S+vZTXKx/VG5yCaX4I3Bmwo8lxWr4ifvuHdTboHTMMc= -github.com/ktrysmt/go-bitbucket v0.9.80/go.mod h1:b8ogWEGxQMWoeFnT1ZE4aHIPGindI+9z/zAW/OVFjk0= +github.com/ktrysmt/go-bitbucket v0.9.87 h1:eR7E4ndyKpO2+HdBwUlsC5K/40nEDpjMLEWsPLY97oQ= +github.com/ktrysmt/go-bitbucket v0.9.87/go.mod h1:slSdGm9Vh3L2ZOU1r7Fu2B9rPJvsflYgneRCoPA83eY= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/letsencrypt/boulder v0.0.0-20240620165639-de9c06129bec h1:2tTW6cDth2TSgRbAhD7yjZzTQmcN25sDRPEeinR51yQ= github.com/letsencrypt/boulder v0.0.0-20240620165639-de9c06129bec/go.mod h1:TmwEoGCwIti7BCeJ9hescZgRtatxRE+A72pCoPfmcfk= -github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4= -github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= +github.com/lufia/plan9stats v0.0.0-20251013123823-9fd1530e3ec3 h1:PwQumkgq4/acIiZhtifTV5OUqqiP82UAl0h87xj/l9k= +github.com/lufia/plan9stats v0.0.0-20251013123823-9fd1530e3ec3/go.mod h1:autxFIvghDt3jPTLoqZ9OZ7s9qTGNAWmYCjVFWPX/zg= github.com/magiconair/properties v1.8.10 h1:s31yESBquKXCV9a/ScB3ESkOjUYYv+X0rg8SYxI99mE= github.com/magiconair/properties v1.8.10/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= github.com/mailru/easyjson v0.9.0 h1:PrnmzHw7262yW8sTBwxi1PdJA3Iw/EKBa8psRf7d9a4= github.com/mailru/easyjson v0.9.0/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU= github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= @@ -435,13 +440,12 @@ github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hd github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.6/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= -github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-runewidth v0.0.19 h1:v++JhqYnZuu5jSKrk9RbgF5v4CGUjqRfBm05byFGLdw= +github.com/mattn/go-runewidth v0.0.19/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs= github.com/mattn/go-tty v0.0.3/go.mod h1:ihxohKRERHTVzN+aSVRwACLCeqIoZAWpoICkkvrWyR0= github.com/mattn/go-tty v0.0.7 h1:KJ486B6qI8+wBO7kQxYgmmEFDaFEE96JMBQ7h400N8Q= github.com/mattn/go-tty v0.0.7/go.mod h1:f2i5ZOvXBU/tCABmLmOfzLz9azMo5wdAaElRNnJKr+k= @@ -456,16 +460,20 @@ github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyua github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= +github.com/moby/go-archive v0.1.0 h1:Kk/5rdW/g+H8NHdJW2gsXyZ7UnzvJNOy6VKJqueWdcQ= +github.com/moby/go-archive v0.1.0/go.mod h1:G9B+YoujNohJmrIYFBpSd54GTUB4lt9S+xVQvsJyFuo= github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkVGiPk= github.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc= -github.com/moby/sys/sequential v0.5.0 h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5lXtc= -github.com/moby/sys/sequential v0.5.0/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo= -github.com/moby/sys/user v0.1.0 h1:WmZ93f5Ux6het5iituh9x2zAG7NFY9Aqi49jjE1PaQg= -github.com/moby/sys/user v0.1.0/go.mod h1:fKJhFOnsCN6xZ5gSfbM6zaHGgDJMrqt9/reuj4T7MmU= +github.com/moby/sys/atomicwriter v0.1.0 h1:kw5D/EqkBwsBFi0ss9v1VG3wIkVhzGvLklJ+w3A14Sw= +github.com/moby/sys/atomicwriter v0.1.0/go.mod h1:Ul8oqv2ZMNHOceF643P6FKPXeCmYtlQMvpizfsSoaWs= +github.com/moby/sys/sequential v0.6.0 h1:qrx7XFUd/5DxtqcoH1h438hF5TmOvzC/lspjy7zgvCU= +github.com/moby/sys/sequential v0.6.0/go.mod h1:uyv8EUTrca5PnDsdMGXhZe6CCe8U/UiTWd+lL+7b/Ko= +github.com/moby/sys/user v0.4.0 h1:jhcMKit7SA80hivmFJcbB1vqmw//wU61Zdui2eQXuMs= +github.com/moby/sys/user v0.4.0/go.mod h1:bG+tYYYJgaMtRKgEmuueC0hJEAZWwtIbZTB+85uoHjs= github.com/moby/sys/userns v0.1.0 h1:tVLXkFOxVu9A64/yh59slHVv9ahO9UIev4JZusOLG/g= github.com/moby/sys/userns v0.1.0/go.mod h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28= -github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= -github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= +github.com/moby/term v0.5.2 h1:6qk3FJAFDs6i/q3W/pQ97SX192qKfZgGjCQqfCJkgzQ= +github.com/moby/term v0.5.2/go.mod h1:d3djjFCrjnB+fl8NJux+EJzu0msscUP+f8it8hPkFLc= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -477,8 +485,8 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= 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= -github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= +github.com/oklog/run v1.2.0 h1:O8x3yXwah4A73hJdlrwo/2X6J62gE5qTMusH0dvz60E= +github.com/oklog/run v1.2.0/go.mod h1:mgDbKRSwPhJfesJ4PntqFUbKQRZ50NgmZTSPlFA0YFk= github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/onsi/ginkgo/v2 v2.25.1 h1:Fwp6crTREKM+oA6Cz4MsO8RhKQzs2/gOIVOUscMAfZY= @@ -487,8 +495,8 @@ github.com/onsi/gomega v1.38.2 h1:eZCjf2xjZAqe+LeWvKb5weQ+NcPwX84kqJ0cZNxok2A= github.com/onsi/gomega v1.38.2/go.mod h1:W2MJcYxRGV63b418Ai34Ud0hEdTVXq9NW9+Sx6uXf3k= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug= -github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM= +github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040= +github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M= github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/owenrumney/go-sarif/v3 v3.2.3 h1:n6mdX5ugKwCrZInvBsf6WumXmpAe3mbmQXgkXlIq34U= @@ -499,11 +507,10 @@ github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0 github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= github.com/pierrec/lz4/v4 v4.1.22 h1:cKFw6uJDK+/gfw5BcDL0JL5aBsAFdsIT18eRtLj7VIU= github.com/pierrec/lz4/v4 v4.1.22/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= -github.com/pjbgf/sha1cd v0.3.2 h1:a9wb0bp1oC2TGwStyn0Umc/IGKQnEgF0vVaZ8QF8eo4= -github.com/pjbgf/sha1cd v0.3.2/go.mod h1:zQWigSxVmsHEZow5qaLtPYxpcKMMQpa09ixqBxuCS6A= +github.com/pjbgf/sha1cd v0.5.0 h1:a+UkboSi1znleCDUNT3M5YxjOnN1fz2FhN48FlwCxs0= +github.com/pjbgf/sha1cd v0.5.0/go.mod h1:lhpGlyHLpQZoxMv8HcgXvZEhcGs0PG/vsZnEJ7H0iCM= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/term v1.1.0 h1:xIAAdCMh3QIAy+5FrE8Ad8XoDhEU4ufwbaSozViP9kk= @@ -511,8 +518,8 @@ github.com/pkg/term v1.1.0/go.mod h1:E25nymQcrSllhX42Ok8MRm1+hyBdHY0dCeiKZ9jpNGw github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw= -github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= +github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 h1:o4JXh1EVt9k/+g42oCprj/FisM4qX9L3sZB3upGN2ZU= +github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/prometheus/client_golang v1.23.0 h1:ust4zpdl9r4trLY/gSjlm07PuiBq2ynaXXlptpfy8Uc= github.com/prometheus/client_golang v1.23.0/go.mod h1:i/o0R9ByOnHX0McrTMTyhYvKE4haaf2mW08I+jGAjEE= github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= @@ -521,37 +528,30 @@ github.com/prometheus/common v0.65.0 h1:QDwzd+G1twt//Kwj/Ww6E9FQq1iVMmODnILtW1t2 github.com/prometheus/common v0.65.0/go.mod h1:0gZns+BLRQ3V6NdaerOhMbwwRbNh9hkGINtQAsP5GS8= github.com/prometheus/procfs v0.17.0 h1:FuLQ+05u4ZI+SS/w9+BWEM2TXiHKsUQ9TADiRH7DuK0= github.com/prometheus/procfs v0.17.0/go.mod h1:oPQLaDAMRbA+u8H5Pbfq+dl3VDAvHxMUOVhe0wYB2zw= -github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= -github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkBk= github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= -github.com/sagikazarmark/locafero v0.11.0 h1:1iurJgmM9G3PA/I+wWYIOw/5SyBtxapeHDcg+AAIFXc= -github.com/sagikazarmark/locafero v0.11.0/go.mod h1:nVIGvgyzw595SUSUE6tvCp3YYTeHs15MvlmU87WwIik= +github.com/sagikazarmark/locafero v0.12.0 h1:/NQhBAkUb4+fH1jivKHWusDYFjMOOKU88eegjfxfHb4= +github.com/sagikazarmark/locafero v0.12.0/go.mod h1:sZh36u/YSZ918v0Io+U9ogLYQJ9tLLBmM4eneO6WwsI= github.com/sassoftware/relic v7.2.1+incompatible h1:Pwyh1F3I0r4clFJXkSI8bOyJINGqpgjJU3DYAZeI05A= github.com/sassoftware/relic v7.2.1+incompatible/go.mod h1:CWfAxv73/iLZ17rbyhIEq3K9hs5w6FpNMdUT//qR+zk= github.com/sassoftware/relic/v7 v7.6.2 h1:rS44Lbv9G9eXsukknS4mSjIAuuX+lMq/FnStgmZlUv4= github.com/sassoftware/relic/v7 v7.6.2/go.mod h1:kjmP0IBVkJZ6gXeAu35/KCEfca//+PKM6vTAsyDPY+k= github.com/secure-systems-lab/go-securesystemslib v0.9.0 h1:rf1HIbL64nUpEIZnjLZ3mcNEL9NBPB0iuVjyxvq3LZc= github.com/secure-systems-lab/go-securesystemslib v0.9.0/go.mod h1:DVHKMcZ+V4/woA/peqr+L0joiRXbPpQ042GgJckkFgw= -github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= -github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= +github.com/sergi/go-diff v1.4.0 h1:n/SP9D5ad1fORl+llWyN+D6qoUETXNZARKjyY2/KVCw= +github.com/sergi/go-diff v1.4.0/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= github.com/shibumi/go-pathspec v1.3.0 h1:QUyMZhFo0Md5B8zV8x2tesohbb5kfbpTi9rBnKh5dkI= github.com/shibumi/go-pathspec v1.3.0/go.mod h1:Xutfslp817l2I1cZvgcfeMQJG5QnU2lh5tVaaMCl3jE= -github.com/shirou/gopsutil/v3 v3.23.12 h1:z90NtUkp3bMtmICZKpC4+WaknU1eXtp5vtbQ11DgpE4= -github.com/shirou/gopsutil/v3 v3.23.12/go.mod h1:1FrWgea594Jp7qmjHUUPlJDTPgcsb9mGnXDxavtikzM= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v0.6.4 h1:kVTaSd7WLz5WZ2IaoM0RSzRsUD+m8wRR+5qvntpn4LU= -github.com/shoenig/test v0.6.4/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k= +github.com/shirou/gopsutil/v4 v4.25.9 h1:JImNpf6gCVhKgZhtaAHJ0serfFGtlfIlSC08eaKdTrU= +github.com/shirou/gopsutil/v4 v4.25.9/go.mod h1:gxIxoC+7nQRwUl/xNhutXlD8lq+jxTgpIkEf3rADHL8= github.com/sigstore/protobuf-specs v0.5.0 h1:F8YTI65xOHw70NrvPwJ5PhAzsvTnuJMGLkA4FIkofAY= github.com/sigstore/protobuf-specs v0.5.0/go.mod h1:+gXR+38nIa2oEupqDdzg4qSBT0Os+sP7oYv6alWewWc= github.com/sigstore/rekor v1.3.10 h1:/mSvRo4MZ/59ECIlARhyykAlQlkmeAQpvBPlmJtZOCU= @@ -573,10 +573,8 @@ github.com/sigstore/timestamp-authority v1.2.7/go.mod h1:te4ThQ3Q/CX1bzVsf5mMN0K github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/skeema/knownhosts v1.3.1 h1:X2osQ+RAjK76shCbvhHHHVl3ZlgDm8apHEHFqRjnBY8= -github.com/skeema/knownhosts v1.3.1/go.mod h1:r7KTdC8l4uxWRyK2TpQZ/1o5HaSzh06ePQNxPwTcfiY= -github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 h1:+jumHNA0Wrelhe64i8F6HNlS8pkoyMv5sreGx2Ry5Rw= -github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8/go.mod h1:3n1Cwaq1E1/1lhQhtRK2ts/ZwZEhjcQeJQ1RuC6Q/8U= +github.com/skeema/knownhosts v1.3.2 h1:EDL9mgf4NzwMXCTfaxSD/o/a5fxDw/xL9nkU28JjdBg= +github.com/skeema/knownhosts v1.3.2/go.mod h1:bEg3iQAuw+jyiw+484wwFJoKSLwcfd7fqRy+N0QTiow= github.com/spf13/afero v1.15.0 h1:b/YBCLWAJdFWJTN9cLhiXXcD7mzKn9Dm86dNnfyQw1I= github.com/spf13/afero v1.15.0/go.mod h1:NC2ByUVxtQs4b3sIUphxK0NioZnmxgyCrfzeuq8lxMg= github.com/spf13/cast v1.10.0 h1:h2x0u2shc1QuLHfxi+cTJvs30+ZAHOGRic8uyGTDWxY= @@ -604,7 +602,6 @@ github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1F github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= @@ -612,8 +609,8 @@ github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8 github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= github.com/terminalstatic/go-xsd-validate v0.1.6 h1:TenYeQ3eY631qNi1/cTmLH/s2slHPRKTTHT+XSHkepo= github.com/terminalstatic/go-xsd-validate v0.1.6/go.mod h1:18lsvYFofBflqCrvo1umpABZ99+GneNTw2kEEc8UPJw= -github.com/testcontainers/testcontainers-go v0.35.0 h1:uADsZpTKFAtp8SLK+hMwSaa+X+JiERHtd4sQAFmXeMo= -github.com/testcontainers/testcontainers-go v0.35.0/go.mod h1:oEVBj5zrfJTrgjwONs1SsRbnBtH9OKl+IGl3UMcr2B4= +github.com/testcontainers/testcontainers-go v0.39.0 h1:uCUJ5tA+fcxbFAB0uP3pIK3EJ2IjjDUHFSZ1H1UxAts= +github.com/testcontainers/testcontainers-go v0.39.0/go.mod h1:qmHpkG7H5uPf/EvOORKvS6EuDkBUPE3zpVGaH9NL7f8= github.com/theupdateframework/go-tuf v0.7.0 h1:CqbQFrWo1ae3/I0UCblSbczevCCbS31Qvs5LdxRWqRI= github.com/theupdateframework/go-tuf v0.7.0/go.mod h1:uEB7WSY+7ZIugK6R1hiBMBjQftaFzn7ZCDJcp1tCUug= github.com/theupdateframework/go-tuf/v2 v2.1.1 h1:OWcoHItwsGO+7m0wLa7FDWPR4oB1cj0zOr1kosE4G+I= @@ -628,10 +625,10 @@ github.com/tink-crypto/tink-go/v2 v2.4.0 h1:8VPZeZI4EeZ8P/vB6SIkhlStrJfivTJn+cQ4 github.com/tink-crypto/tink-go/v2 v2.4.0/go.mod h1:l//evrF2Y3MjdbpNDNGnKgCpo5zSmvUvnQ4MU+yE2sw= github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399 h1:e/5i7d4oYZ+C1wj2THlRK+oAhjeS/TRQwMfkIuet3w0= github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399/go.mod h1:LdwHTNJT99C5fTAzDz0ud328OgXz+gierycbcIx2fRs= -github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= -github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= -github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= -github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= +github.com/tklauser/go-sysconf v0.3.15 h1:VE89k0criAymJ/Os65CSn1IXaol+1wrsFHEB8Ol49K4= +github.com/tklauser/go-sysconf v0.3.15/go.mod h1:Dmjwr6tYFIseJw7a3dRLJfsHAMXZ3nEnL/aZY+0IuI4= +github.com/tklauser/numcpus v0.10.0 h1:18njr6LDBk1zuna922MgdjQuJFjrdppsZG60sHGfjso= +github.com/tklauser/numcpus v0.10.0/go.mod h1:BiTKazU708GQTYF4mB+cmlpT2Is1gLk7XVuEeem8LsQ= github.com/transparency-dev/merkle v0.0.2 h1:Q9nBoQcZcgPamMkGn7ghV8XiTZ/kRxn1yCG81+twTK4= github.com/transparency-dev/merkle v0.0.2/go.mod h1:pqSy+OXefQ1EDUVmAJ8MUhHB9TXGuzVAT58PqBoHz1A= github.com/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= @@ -645,8 +642,8 @@ github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 h1:JwtAtb github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74/go.mod h1:RmMWU37GKR2s6pgrIEB4ixgpVCt/cf7dnJv3fuH1J1c= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= -github.com/xanzy/go-gitlab v0.110.0 h1:hsFIFp01v/0D0sdUXoZfRk6CROzZbHQplk6NzKSFKhc= -github.com/xanzy/go-gitlab v0.110.0/go.mod h1:wKNKh3GkYDMOsGmnfuX+ITCmDuSDWFO0G+C4AygL9RY= +github.com/xanzy/go-gitlab v0.115.0 h1:6DmtItNcVe+At/liXSgfE/DZNZrGfalQmBRmOcJjOn8= +github.com/xanzy/go-gitlab v0.115.0/go.mod h1:5XCDtM7AM6WMKmfDdOiEpyRWUqui2iS9ILfvCZ2gJ5M= github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= @@ -665,32 +662,32 @@ github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3i github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw= -github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= +github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= +github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= github.com/zalando/go-keyring v0.2.3 h1:v9CUu9phlABObO4LPWycf+zwMG7nlbb3t/B5wa97yms= github.com/zalando/go-keyring v0.2.3/go.mod h1:HL4k+OXQfJUWaMnqyuSOc0drfGPX2b51Du6K+MRgZMk= go.mongodb.org/mongo-driver v1.14.0 h1:P98w8egYRjYe3XDjxhYJagTokP/H6HzlsnojRgZRd80= go.mongodb.org/mongo-driver v1.14.0/go.mod h1:Vzb0Mk/pa7e6cWw85R4F/endUC3u0U9jGcNU603k65c= -go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= -go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= +go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= +go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0 h1:x7wzEgXfnzJcHDwStJT+mxOz4etr2EcexjqhBvmoakw= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0/go.mod h1:rg+RlpR5dKwaS95IyyZqj5Wd4E13lk/msnTS0Xl9lJM= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0 h1:Hf9xI/XLML9ElpiHVDNwvqI0hIFlzV8dgIr35kV1kRU= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0/go.mod h1:NfchwuyNoMcZ5MLHwPrODwUF1HWCXWrL31s8gSAdIKY= -go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ= -go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0 h1:RbKq8BG0FI8OiXhBfcRtqqHcZcka+gU3cskNuf05R18= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0/go.mod h1:h06DGIukJOevXaj/xrNjhi/2098RZzcLTbc0jDAUbsg= +go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8= +go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0 h1:OeNbIYk/2C15ckl7glBlOBp5+WlYsOElzTNmiPW/x60= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0/go.mod h1:7Bept48yIeqxP2OZ9/AqIpYS94h2or0aB4FypJTc8ZM= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.34.0 h1:BEj3SPM81McUZHYjRS5pEgNgnmzGJ5tRpU5krWnV8Bs= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.34.0/go.mod h1:9cKLGBDzI/F3NoHLQGm4ZrYdIHsvGt6ej6hUowxY0J4= -go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE= -go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E= -go.opentelemetry.io/otel/sdk v1.37.0 h1:ItB0QUqnjesGRvNcmAcU0LyvkVyGJ2xftD29bWdDvKI= -go.opentelemetry.io/otel/sdk v1.37.0/go.mod h1:VredYzxUvuo2q3WRcDnKDjbdvmO0sCzOvVAiY+yUkAg= -go.opentelemetry.io/otel/sdk/metric v1.37.0 h1:90lI228XrB9jCMuSdA0673aubgRobVZFhbjxHHspCPc= -go.opentelemetry.io/otel/sdk/metric v1.37.0/go.mod h1:cNen4ZWfiD37l5NhS+Keb5RXVWZWpRE+9WyVCpbo5ps= -go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4= -go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0= +go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA= +go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI= +go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E= +go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg= +go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM= +go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA= +go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE= +go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs= go.opentelemetry.io/proto/otlp v1.5.0 h1:xJvq7gMzB31/d406fB8U5CBdyQGw4P399D1aQWU/3i4= go.opentelemetry.io/proto/otlp v1.5.0/go.mod h1:keN8WnHxOy8PG0rQZjJJ5A2ebUoafqWp0eVQ4yIXvJ4= go.step.sm/crypto v0.63.0 h1:U1QGELQqJ85oDfeNFE2V52cow1rvy0m3MekG3wFmyXY= @@ -715,17 +712,17 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= -golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= +golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= golang.org/x/crypto v0.43.0 h1:dduJYIi3A3KOfdGOHX8AVZ/jGiyPa3IbBozJ5kNuE04= golang.org/x/crypto v0.43.0/go.mod h1:BFbav4mRNlXJL4wNeejLpWxB7wMbc79PdRGhWKncxR0= -golang.org/x/exp v0.0.0-20250911091902-df9299821621 h1:2id6c1/gto0kaHYyrixvknJ8tUK/Qs5IsmBtrc+FtgU= -golang.org/x/exp v0.0.0-20250911091902-df9299821621/go.mod h1:TwQYMMnGpvZyc+JpB/UAuTNIsVJifOlSkrZkhcvpVUk= +golang.org/x/exp v0.0.0-20251009144603-d2f985daa21b h1:18qgiDvlvH7kk8Ioa8Ov+K6xCi0GMvmGfGW0sgd/SYA= +golang.org/x/exp v0.0.0-20251009144603-d2f985daa21b/go.mod h1:j/pmGrbnkbPtQfxEe5D0VQhZC6qKbfKifgD0oM7sR70= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.28.0 h1:gQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U= -golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI= +golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA= +golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -736,16 +733,14 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= -golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= -golang.org/x/net v0.45.0 h1:RLBg5JKixCy82FtLJpeNlVM0nrSqpCRYzVU1n8kj0tM= -golang.org/x/net v0.45.0/go.mod h1:ECOoLqd5U3Lhyeyo/QDCEVQ4sNgYsqvCZ722XogGieY= +golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= +golang.org/x/net v0.46.0 h1:giFlY12I07fugqwPuWJi68oOnpfqFnJIJzaIIm2JVV4= +golang.org/x/net v0.46.0/go.mod h1:Q9BGdFy1y4nkUwiLvT5qtyhAnEHgnQ/zd8PfU6nc210= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.20.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= -golang.org/x/oauth2 v0.31.0 h1:8Fq0yVZLh4j4YA47vHKFTa9Ew5XIrCP8LC6UeNZnLxo= -golang.org/x/oauth2 v0.31.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= +golang.org/x/oauth2 v0.32.0 h1:jsCblLleRMDrxMN29H3z/k1KliIvpLgCkE6R8FXXNgY= +golang.org/x/oauth2 v0.32.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -780,15 +775,12 @@ golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ= golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= @@ -796,7 +788,7 @@ golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuX golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk= +golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= golang.org/x/term v0.36.0 h1:zMPR+aF8gfksFprF/Nc/rd1wRS1EI6nDBGyWAvDzx2Q= golang.org/x/term v0.36.0/go.mod h1:Qu394IJq6V6dCBRgwqshf3mPF85AqzYEzofzRdZkWss= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -808,39 +800,39 @@ golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.30.0 h1:yznKA/E9zq54KzlzBEAWn1NXSQ8DIp/NYMy88xJjl4k= golang.org/x/text v0.30.0/go.mod h1:yDdHFIX9t+tORqspjENWgzaCVXgk0yYnYuSZ8UzzBVM= -golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE= -golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= +golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI= +golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.37.0 h1:DVSRzp7FwePZW356yEAChSdNcQo6Nsp+fex1SUW09lE= -golang.org/x/tools v0.37.0/go.mod h1:MBN5QPQtLMHVdvsbtarmTNukZDdgwdwlO5qGacAzF0w= +golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ= +golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= +gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= google.golang.org/api v0.230.0 h1:2u1hni3E+UXAXrONrrkfWpi/V6cyKVAbfGVeGtC3OxM= google.golang.org/api v0.230.0/go.mod h1:aqvtoMk7YkiXx+6U12arQFExiRV9D/ekvMCwCd/TksQ= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20250303144028-a0af3efb3deb h1:ITgPrl429bc6+2ZraNSzMDk3I95nmQln2fuPstKwFDE= -google.golang.org/genproto v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:sAo5UzpjUwgFBCzupwhcLcxHVDK7vG5IqI30YnwX2eE= -google.golang.org/genproto/googleapis/api v0.0.0-20250414145226-207652e42e2e h1:UdXH7Kzbj+Vzastr5nVfccbmFsmYNygVLSPk1pEfDoY= -google.golang.org/genproto/googleapis/api v0.0.0-20250414145226-207652e42e2e/go.mod h1:085qFyf2+XaZlRdCgKNCIZ3afY2p4HHZdoIRpId8F4A= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250414145226-207652e42e2e h1:ztQaXfzEXTmCBvbtWYRhJxW+0iJcz2qXfd38/e9l7bA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250414145226-207652e42e2e/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= -google.golang.org/grpc v1.72.2 h1:TdbGzwb82ty4OusHWepvFWGLgIbNo1/SUynEN0ssqv8= -google.golang.org/grpc v1.72.2/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM= -google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc= -google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU= +google.golang.org/genproto v0.0.0-20251007200510-49b9836ed3ff h1:3jGSSqkLOAYU1gI52uHoj51zxEsGMEYatnBFU0m6pB8= +google.golang.org/genproto v0.0.0-20251007200510-49b9836ed3ff/go.mod h1:45Y7O/+fGjlhL8+FRpuLqM9YKvn+AU5dolRkE3DOaX8= +google.golang.org/genproto/googleapis/api v0.0.0-20250804133106-a7a43d27e69b h1:ULiyYQ0FdsJhwwZUwbaXpZF5yUE3h+RA+gxvBu37ucc= +google.golang.org/genproto/googleapis/api v0.0.0-20250804133106-a7a43d27e69b/go.mod h1:oDOGiMSXHL4sDTJvFvIB9nRQCGdLP1o/iVaqQK8zB+M= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251014184007-4626949a642f h1:1FTH6cpXFsENbPR5Bu8NQddPSaUUE6NA2XdZdDSAJK4= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251014184007-4626949a642f/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= +google.golang.org/grpc v1.76.0 h1:UnVkv1+uMLYXoIz6o7chp59WfQUYA2ex/BXQ9rHZu7A= +google.golang.org/grpc v1.76.0/go.mod h1:Ju12QI8M6iQJtbcsV+awF5a4hfJMLi4X0JLo94ULZ6c= +google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= +google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= @@ -853,8 +845,8 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU= -gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= +gotest.tools/v3 v3.5.2 h1:7koQfIKdy+I8UTetycgUqXWSDwpgv193Ka+qRsmBY8Q= +gotest.tools/v3 v3.5.2/go.mod h1:LtdLGcnqToBH83WByAAi/wiwSFCArdFIUV/xxN4pcjA= k8s.io/api v0.33.4 h1:oTzrFVNPXBjMu0IlpA2eDDIU49jsuEorGHB4cvKupkk= k8s.io/api v0.33.4/go.mod h1:VHQZ4cuxQ9sCUMESJV5+Fe8bGnqAARZ08tSTdHWfeAc= k8s.io/apimachinery v0.33.4 h1:SOf/JW33TP0eppJMkIgQ+L6atlDiP/090oaX0y9pd9s= diff --git a/lifecycle_test.go b/lifecycle_test.go index 5a4248b3b..57ee9fc1d 100644 --- a/lifecycle_test.go +++ b/lifecycle_test.go @@ -750,6 +750,15 @@ func deleteReleaseBundleProperties(t *testing.T, lcManager *lifecycle.LifecycleS time.Sleep(5 * time.Second) } +func createRbIfDoesNotExists(t *testing.T, specName, rbName, rbVersion string, lcManager *lifecycle.LifecycleServicesManager) { + isExist, err := lcManager.IsReleaseBundleExist(rbName, rbVersion, "") + assert.NoError(t, err) + if isExist { + return + } + createRbFromSpec(t, specName, rbName, rbVersion, true, true) +} + func TestReleaseBundlesSearchGroups(t *testing.T) { cleanCallback := initLifecycleTest(t, artifactoryLifecycleSetTagMinVersion) defer cleanCallback() @@ -768,19 +777,23 @@ func TestReleaseBundlesSearchGroups(t *testing.T) { const version1 = "1.0.0" // Create Release Bundle A - createRbFromSpec(t, tests.LifecycleBuilds12, rbNameA, version1, true, true) + createRbIfDoesNotExists(t, tests.LifecycleBuilds12, rbNameA, version1, lcManager) + defer deleteReleaseBundle(t, lcManager, rbNameA, version1) assertStatusCompleted(t, lcManager, rbNameA, version1, "") // Create Release Bundle B - createRbFromSpec(t, tests.LifecycleBuilds12, rbNameB, version1, true, true) + createRbIfDoesNotExists(t, tests.LifecycleBuilds12, rbNameB, version1, lcManager) + defer deleteReleaseBundle(t, lcManager, rbNameB, version1) assertStatusCompleted(t, lcManager, rbNameB, version1, "") // Create Release Bundle C - createRbFromSpec(t, tests.LifecycleBuilds12, rbNameC, version1, true, true) + createRbIfDoesNotExists(t, tests.LifecycleBuilds12, rbNameC, version1, lcManager) + defer deleteReleaseBundle(t, lcManager, rbNameC, version1) assertStatusCompleted(t, lcManager, rbNameC, version1, "") // Create Release Bundle D (for filter/exclusion) - createRbFromSpec(t, tests.LifecycleBuilds12, rbNameD, version1, true, true) + createRbIfDoesNotExists(t, tests.LifecycleBuilds12, rbNameD, version1, lcManager) + defer deleteReleaseBundle(t, lcManager, rbNameD, version1) assertStatusCompleted(t, lcManager, rbNameD, version1, "") time.Sleep(3 * time.Second) @@ -874,10 +887,6 @@ func TestReleaseBundlesSearchGroups(t *testing.T) { } }) } - deleteReleaseBundle(t, lcManager, rbNameA, version1) - deleteReleaseBundle(t, lcManager, rbNameB, version1) - deleteReleaseBundle(t, lcManager, rbNameC, version1) - deleteReleaseBundle(t, lcManager, rbNameD, version1) } func TestReleaseBundlesSearchVersions(t *testing.T) { @@ -895,22 +904,26 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { const versionC = "1.1.0-rc" const versionD = "2.0.0" - createRbFromSpec(t, tests.LifecycleBuilds12, rbName, versionA, true, true) + createRbIfDoesNotExists(t, tests.LifecycleBuilds12, rbName, versionA, lcManager) + defer deleteReleaseBundle(t, lcManager, rbName, versionA) assertStatusCompleted(t, lcManager, rbName, versionA, "") time.Sleep(1 * time.Second) - createRbFromSpec(t, tests.LifecycleBuilds12, rbName, versionC, true, true) - assertStatusCompleted(t, lcManager, rbName, versionC, "") + createRbIfDoesNotExists(t, tests.LifecycleBuilds12, rbName, versionB, lcManager) + defer deleteReleaseBundle(t, lcManager, rbName, versionB) + assertStatusCompleted(t, lcManager, rbName, versionB, "") time.Sleep(1 * time.Second) - createRbFromSpec(t, tests.LifecycleBuilds12, rbName, versionB, true, true) - assertStatusCompleted(t, lcManager, rbName, versionB, "") + createRbIfDoesNotExists(t, tests.LifecycleBuilds12, rbName, versionC, lcManager) + defer deleteReleaseBundle(t, lcManager, rbName, versionC) + assertStatusCompleted(t, lcManager, rbName, versionC, "") time.Sleep(1 * time.Second) - createRbFromSpec(t, tests.LifecycleBuilds12, rbName, versionD, true, true) + createRbIfDoesNotExists(t, tests.LifecycleBuilds12, rbName, versionD, lcManager) + defer deleteReleaseBundle(t, lcManager, rbName, versionD) assertStatusCompleted(t, lcManager, rbName, versionD, "") log.Info("Created four versions for release bundle '%s' for search testing.", rbName) @@ -1031,10 +1044,6 @@ func TestReleaseBundlesSearchVersions(t *testing.T) { } }) } - deleteReleaseBundle(t, lcManager, rbName, versionA) - deleteReleaseBundle(t, lcManager, rbName, versionB) - deleteReleaseBundle(t, lcManager, rbName, versionC) - deleteReleaseBundle(t, lcManager, rbName, versionD) } func setReleaseBundleTag(t *testing.T, lcManager *lifecycle.LifecycleServicesManager, rbName, rbVersion, From 526b2db73c8741a9dba57620e266038748878bda Mon Sep 17 00:00:00 2001 From: Naveen Kumar Date: Wed, 15 Oct 2025 19:21:53 +0530 Subject: [PATCH 28/28] Updating test data final --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 5d81ad5b0..dbb4d8ede 100644 --- a/go.mod +++ b/go.mod @@ -19,7 +19,7 @@ require ( github.com/jfrog/build-info-go v1.12.0 github.com/jfrog/gofrog v1.7.6 github.com/jfrog/jfrog-cli-application v1.0.1 - github.com/jfrog/jfrog-cli-artifactory v0.7.3-0.20251015051724-72d111a3d107 + github.com/jfrog/jfrog-cli-artifactory v0.7.3-0.20251015052652-84ea3afaf439 github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20251015045218-1a38c9e47097 github.com/jfrog/jfrog-cli-platform-services v1.10.0 github.com/jfrog/jfrog-cli-security v1.21.8 diff --git a/go.sum b/go.sum index afe374306..dc1160f55 100644 --- a/go.sum +++ b/go.sum @@ -375,8 +375,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.1 h1:PiiSVKFFs8VLAwjCe2JrIKlX7LmARFt+r8BLTupWIDc= github.com/jfrog/jfrog-cli-application v1.0.1/go.mod h1:gjV6Q2hhoMe3FF77GFiTyIRLSHokpDrkVj0GvYM+1Y4= -github.com/jfrog/jfrog-cli-artifactory v0.7.3-0.20251015051724-72d111a3d107 h1:0VVFI1AHzMKyr/Nwxmu/Jhg3U1Rq725AQPKpSTtk7XU= -github.com/jfrog/jfrog-cli-artifactory v0.7.3-0.20251015051724-72d111a3d107/go.mod h1:nT050Wb18tTlfcQHefyMENzFOz9Vdym6WP0Z3Nc2qHc= +github.com/jfrog/jfrog-cli-artifactory v0.7.3-0.20251015052652-84ea3afaf439 h1:3B3JGujNYFpHQ69pjaPpRf0Ugny0UCU35whkcmGqaHc= +github.com/jfrog/jfrog-cli-artifactory v0.7.3-0.20251015052652-84ea3afaf439/go.mod h1:nT050Wb18tTlfcQHefyMENzFOz9Vdym6WP0Z3Nc2qHc= github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20251015045218-1a38c9e47097 h1:+W6BPxJ0nPtlQ6l6nmypW1eEANoVPiN8HDR4kQJA8uI= github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20251015045218-1a38c9e47097/go.mod h1:UOeOwEEmRIi57cRwghN5OBVoqkJieYQQfLpeqw8Yv38= github.com/jfrog/jfrog-cli-platform-services v1.10.0 h1:O+N/VAF+QjFvq9xkHpmzKLcdl9aJu3IP204Su0L14rw=