Skip to content

Commit 0310fe5

Browse files
authored
Merge branch 'main' into add-workflow-to-trigger-integration-tests
2 parents d211882 + af3845a commit 0310fe5

File tree

18 files changed

+862
-137
lines changed

18 files changed

+862
-137
lines changed

artifactory/commands/generic/upload.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ func (uc *UploadCommand) upload() (err error) {
122122
file.Props += syncDeletesProp
123123
// Add CI VCS properties if in CI environment (respects user precedence)
124124
file.TargetProps = civcs.MergeWithUserProps(file.TargetProps)
125-
uploadParams, err := getUploadParams(file, uc.uploadConfiguration, buildProps, addVcsProps)
125+
uploadParams, err := getUploadParams(file, uc.uploadConfiguration, buildProps, addVcsProps, uc.DryRun())
126126
if err != nil {
127127
errorOccurred = true
128128
log.Error(err)
@@ -202,7 +202,7 @@ func (uc *UploadCommand) upload() (err error) {
202202
return
203203
}
204204

205-
func getUploadParams(f *spec.File, configuration *utils.UploadConfiguration, buildProps string, addVcsProps bool) (uploadParams services.UploadParams, err error) {
205+
func getUploadParams(f *spec.File, configuration *utils.UploadConfiguration, buildProps string, addVcsProps bool, dryRun bool) (uploadParams services.UploadParams, err error) {
206206
uploadParams = services.NewUploadParams()
207207
uploadParams.CommonParams, err = f.ToCommonParams()
208208
if err != nil {
@@ -233,11 +233,15 @@ func getUploadParams(f *spec.File, configuration *utils.UploadConfiguration, bui
233233
return
234234
}
235235

236-
uploadParams.IncludeDirs, err = f.IsIncludeDirs(false)
236+
includeDirs, err := f.IsIncludeDirs(false)
237237
if err != nil {
238238
return
239239
}
240240

241+
// Disable IncludeDirs in dry-run mode to prevent directory structure creation
242+
uploadParams.IncludeDirs = includeDirs && !dryRun
243+
log.Debug("In Dry-run mode, include-dir flag will be ignored.")
244+
241245
uploadParams.Flat, err = f.IsFlat(true)
242246
if err != nil {
243247
return

cliutils/cmddefs/commands.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ const (
1010

1111
// Lifecycle Commands
1212
ReleaseBundleCreate = "release-bundle-create"
13+
ReleaseBundleUpdate = "release-bundle-update"
1314
ReleaseBundlePromote = "release-bundle-promote"
1415
ReleaseBundleDistribute = "release-bundle-distribute"
1516
ReleaseBundleDeleteLocal = "release-bundle-delete-local"

cliutils/flagkit/flags.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -490,6 +490,8 @@ const (
490490
lcDeleteProperties = lifecyclePrefix + DeleteProperty
491491
SourceTypeReleaseBundles = "source-type-release-bundles"
492492
SourceTypeBuilds = "source-type-builds"
493+
Draft = "draft"
494+
AddSources = "add"
493495
)
494496

495497
var commandFlags = map[string][]string{
@@ -515,7 +517,11 @@ var commandFlags = map[string][]string{
515517
},
516518
cmddefs.ReleaseBundleCreate: {
517519
platformUrl, user, password, accessToken, serverId, lcSigningKey, lcSync, lcProject, lcBuilds, lcReleaseBundles,
518-
specFlag, specVars, BuildName, BuildNumber, SourceTypeReleaseBundles, SourceTypeBuilds,
520+
specFlag, specVars, BuildName, BuildNumber, SourceTypeReleaseBundles, SourceTypeBuilds, Draft,
521+
},
522+
cmddefs.ReleaseBundleUpdate: {
523+
platformUrl, user, password, accessToken, serverId, lcSync, lcProject,
524+
specFlag, specVars, SourceTypeReleaseBundles, SourceTypeBuilds, AddSources,
519525
},
520526
cmddefs.ReleaseBundlePromote: {
521527
platformUrl, user, password, accessToken, serverId, lcSigningKey, lcSync, lcProject, lcIncludeRepos,
@@ -1103,6 +1109,8 @@ var flagsMap = map[string]components.Flag{
11031109
lcDeleteProperties: components.NewStringFlag(DeleteProperty, "Properties to be deleted on the of Manifest Release Bundle version.", components.SetMandatoryFalse()),
11041110
SourceTypeReleaseBundles: components.NewStringFlag(SourceTypeReleaseBundles, "List of semicolon-seperated(;) release bundles in the form of 'name=releaseBundleName1, version=version1; name=releaseBundleName2, version=version2' to be included in the new bundle.", components.SetMandatoryFalse()),
11051111
SourceTypeBuilds: components.NewStringFlag(SourceTypeBuilds, "List of semicolon-separated(;) builds in the form of 'name=buildName1, id=runID1, include-deps=true; name=buildName2, id=runID2' to be included in the new bundle.", components.SetMandatoryFalse()),
1112+
Draft: components.NewBoolFlag(Draft, "Set to true to create the release bundle as a draft. A draft release bundle can be updated and finalized later.", components.WithBoolDefaultValueFalse()),
1113+
AddSources: components.NewBoolFlag(AddSources, "Add sources to an existing draft release bundle.", components.WithBoolDefaultValueFalse()),
11061114
}
11071115

11081116
func GetCommandFlags(cmdKey string) []components.Flag {

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ require (
1010
github.com/jfrog/build-info-go v1.13.1-0.20260119231731-3cc4a0771bbd
1111
github.com/jfrog/gofrog v1.7.6
1212
github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20260106204841-744f3f71817b
13-
github.com/jfrog/jfrog-client-go v1.55.1-0.20251230061734-d954605bdb23
13+
github.com/jfrog/jfrog-client-go v1.55.1-0.20260128141727-bd34d78a3e48
1414
github.com/pkg/errors v0.9.1
1515
github.com/spf13/viper v1.21.0
1616
github.com/stretchr/testify v1.11.1

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -168,8 +168,8 @@ github.com/jfrog/gofrog v1.7.6 h1:QmfAiRzVyaI7JYGsB7cxfAJePAZTzFz0gRWZSE27c6s=
168168
github.com/jfrog/gofrog v1.7.6/go.mod h1:ntr1txqNOZtHplmaNd7rS4f8jpA5Apx8em70oYEe7+4=
169169
github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20260106204841-744f3f71817b h1:gGGmYXuYvcNns1BnLQI13lC+pgMxrmenx+ramtolQuA=
170170
github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20260106204841-744f3f71817b/go.mod h1:+Hnaikp/xCSPD/q7txxRy4Zc0wzjW/usrCSf+6uONSQ=
171-
github.com/jfrog/jfrog-client-go v1.55.1-0.20251230061734-d954605bdb23 h1:tL4NUrnSiFN6MeK27z96ehiKXhYZDY2DyH95ogNRHrY=
172-
github.com/jfrog/jfrog-client-go v1.55.1-0.20251230061734-d954605bdb23/go.mod h1:sCE06+GngPoyrGO0c+vmhgMoVSP83UMNiZnIuNPzU8U=
171+
github.com/jfrog/jfrog-client-go v1.55.1-0.20260128141727-bd34d78a3e48 h1:HY4b9DsUe0Lox1rScYHKmfIZY9PQvy0kfkOefqc/QdQ=
172+
github.com/jfrog/jfrog-client-go v1.55.1-0.20260128141727-bd34d78a3e48/go.mod h1:sCE06+GngPoyrGO0c+vmhgMoVSP83UMNiZnIuNPzU8U=
173173
github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4=
174174
github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM=
175175
github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=

lifecycle/cli.go

Lines changed: 71 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@ package lifecycle
33
import (
44
"errors"
55
"fmt"
6-
"github.com/jfrog/jfrog-cli-artifactory/artifactory/cli"
7-
rbsearch "github.com/jfrog/jfrog-cli-artifactory/lifecycle/docs/rbsearch"
86
"os"
97
"strconv"
108
"strings"
119

10+
"github.com/jfrog/jfrog-cli-artifactory/artifactory/cli"
11+
rbsearch "github.com/jfrog/jfrog-cli-artifactory/lifecycle/docs/rbsearch"
12+
1213
"github.com/jfrog/jfrog-cli-artifactory/cliutils/cmddefs"
1314
"github.com/jfrog/jfrog-cli-artifactory/cliutils/distribution"
1415
"github.com/jfrog/jfrog-cli-artifactory/cliutils/flagkit"
@@ -21,6 +22,7 @@ import (
2122
rbExport "github.com/jfrog/jfrog-cli-artifactory/lifecycle/docs/export"
2223
rbImport "github.com/jfrog/jfrog-cli-artifactory/lifecycle/docs/importbundle"
2324
rbPromote "github.com/jfrog/jfrog-cli-artifactory/lifecycle/docs/promote"
25+
rbUpdate "github.com/jfrog/jfrog-cli-artifactory/lifecycle/docs/update"
2426
artifactoryUtils "github.com/jfrog/jfrog-cli-core/v2/artifactory/utils"
2527
commonCliUtils "github.com/jfrog/jfrog-cli-core/v2/common/cliutils"
2628
"github.com/jfrog/jfrog-cli-core/v2/common/commands"
@@ -51,6 +53,15 @@ func GetCommands() []components.Command {
5153
Category: lcCategory,
5254
Action: create,
5355
},
56+
{
57+
Name: cmddefs.ReleaseBundleUpdate,
58+
Aliases: []string{"rbu"},
59+
Flags: flagkit.GetCommandFlags(cmddefs.ReleaseBundleUpdate),
60+
Description: rbUpdate.GetDescription(),
61+
Arguments: rbUpdate.GetArguments(),
62+
Category: lcCategory,
63+
Action: update,
64+
},
5465
{
5566
Name: "release-bundle-promote",
5667
Aliases: []string{"rbp"},
@@ -230,7 +241,7 @@ func create(c *components.Context) (err error) {
230241
}
231242
createCmd := lifecycle.NewReleaseBundleCreateCommand().SetServerDetails(lcDetails).SetReleaseBundleName(c.GetArgumentAt(0)).
232243
SetReleaseBundleVersion(c.GetArgumentAt(1)).SetSigningKeyName(c.GetStringFlagValue(flagkit.SigningKey)).
233-
SetSync(c.GetBoolFlagValue(flagkit.Sync)).
244+
SetSync(c.GetBoolFlagValue(flagkit.Sync)).SetDraft(c.GetBoolFlagValue(flagkit.Draft)).
234245
SetReleaseBundleProject(pluginsCommon.GetProject(c)).SetSpec(creationSpec).
235246
SetBuildsSpecPath(c.GetStringFlagValue(flagkit.Builds)).SetReleaseBundlesSpecPath(c.GetStringFlagValue(flagkit.ReleaseBundles))
236247

@@ -244,6 +255,63 @@ func create(c *components.Context) (err error) {
244255
return commands.Exec(createCmd)
245256
}
246257

258+
func validateUpdateReleaseBundleContext(c *components.Context) error {
259+
if show, err := pluginsCommon.ShowCmdHelpIfNeeded(c, c.Arguments); show || err != nil {
260+
return err
261+
}
262+
263+
if len(c.Arguments) != 2 {
264+
return pluginsCommon.WrongNumberOfArgumentsHandler(c)
265+
}
266+
267+
// Check that an operation flag is provided (--add is mandatory)
268+
if !c.GetBoolFlagValue(flagkit.AddSources) {
269+
return errorutils.CheckErrorf("at least one operation flag must be provided: --%s", flagkit.AddSources)
270+
}
271+
272+
// Check that at least one source method is provided
273+
hasSpec := c.IsFlagSet("spec")
274+
hasSourceTypeFlags := c.IsFlagSet(flagkit.SourceTypeReleaseBundles) || c.IsFlagSet(flagkit.SourceTypeBuilds)
275+
276+
if !hasSpec && !hasSourceTypeFlags {
277+
return errorutils.CheckErrorf("either --spec or source type flags (--%s, --%s) must be provided",
278+
flagkit.SourceTypeReleaseBundles, flagkit.SourceTypeBuilds)
279+
}
280+
281+
return nil
282+
}
283+
284+
func update(c *components.Context) (err error) {
285+
if err = validateUpdateReleaseBundleContext(c); err != nil {
286+
return err
287+
}
288+
289+
lcDetails, err := createLifecycleDetailsByFlags(c)
290+
if err != nil {
291+
return
292+
}
293+
294+
var updateSpec *speccore.SpecFiles
295+
if c.IsFlagSet("spec") {
296+
updateSpec, err = commonCliUtils.GetSpec(c, true, false)
297+
if err != nil {
298+
return
299+
}
300+
}
301+
302+
updateCmd := lifecycle.NewReleaseBundleUpdateCommand().
303+
SetServerDetails(lcDetails).
304+
SetReleaseBundleName(c.GetArgumentAt(0)).
305+
SetReleaseBundleVersion(c.GetArgumentAt(1)).
306+
SetReleaseBundleProject(pluginsCommon.GetProject(c)).
307+
SetSpec(updateSpec).
308+
SetSync(c.GetBoolFlagValue(flagkit.Sync)).
309+
SetReleaseBundlesSources(c.GetStringFlagValue(flagkit.SourceTypeReleaseBundles)).
310+
SetBuildsSources(c.GetStringFlagValue(flagkit.SourceTypeBuilds))
311+
312+
return commands.Exec(updateCmd)
313+
}
314+
247315
// the function validates that the current artifactory version supports multiple source feature
248316
func multipleSourcesSupported(c *components.Context) error {
249317
lcDetails, err := createLifecycleDetailsByFlags(c)

0 commit comments

Comments
 (0)