Skip to content

Commit aaf7232

Browse files
authored
Add draft flag to release bundle create command (jfrog#352)
1 parent c654c15 commit aaf7232

File tree

11 files changed

+63
-16
lines changed

11 files changed

+63
-16
lines changed

cliutils/flagkit/flags.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -490,6 +490,7 @@ const (
490490
lcDeleteProperties = lifecyclePrefix + DeleteProperty
491491
SourceTypeReleaseBundles = "source-type-release-bundles"
492492
SourceTypeBuilds = "source-type-builds"
493+
Draft = "draft"
493494
)
494495

495496
var commandFlags = map[string][]string{
@@ -515,7 +516,7 @@ var commandFlags = map[string][]string{
515516
},
516517
cmddefs.ReleaseBundleCreate: {
517518
platformUrl, user, password, accessToken, serverId, lcSigningKey, lcSync, lcProject, lcBuilds, lcReleaseBundles,
518-
specFlag, specVars, BuildName, BuildNumber, SourceTypeReleaseBundles, SourceTypeBuilds,
519+
specFlag, specVars, BuildName, BuildNumber, SourceTypeReleaseBundles, SourceTypeBuilds, Draft,
519520
},
520521
cmddefs.ReleaseBundlePromote: {
521522
platformUrl, user, password, accessToken, serverId, lcSigningKey, lcSync, lcProject, lcIncludeRepos,
@@ -1103,6 +1104,7 @@ var flagsMap = map[string]components.Flag{
11031104
lcDeleteProperties: components.NewStringFlag(DeleteProperty, "Properties to be deleted on the of Manifest Release Bundle version.", components.SetMandatoryFalse()),
11041105
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()),
11051106
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()),
1107+
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()),
11061108
}
11071109

11081110
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.20260121110006-56e09db08899
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.20260121110006-56e09db08899 h1:b6DzkI3qCVUHiErnFDajICW6k1RAuXVe69AsGq2AunE=
172+
github.com/jfrog/jfrog-client-go v1.55.1-0.20260121110006-56e09db08899/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: 4 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"
@@ -230,7 +231,7 @@ func create(c *components.Context) (err error) {
230231
}
231232
createCmd := lifecycle.NewReleaseBundleCreateCommand().SetServerDetails(lcDetails).SetReleaseBundleName(c.GetArgumentAt(0)).
232233
SetReleaseBundleVersion(c.GetArgumentAt(1)).SetSigningKeyName(c.GetStringFlagValue(flagkit.SigningKey)).
233-
SetSync(c.GetBoolFlagValue(flagkit.Sync)).
234+
SetSync(c.GetBoolFlagValue(flagkit.Sync)).SetDraft(c.GetBoolFlagValue(flagkit.Draft)).
234235
SetReleaseBundleProject(pluginsCommon.GetProject(c)).SetSpec(creationSpec).
235236
SetBuildsSpecPath(c.GetStringFlagValue(flagkit.Builds)).SetReleaseBundlesSpecPath(c.GetStringFlagValue(flagkit.ReleaseBundles))
236237

lifecycle/cli_test.go

Lines changed: 41 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,16 @@ package lifecycle
22

33
import (
44
"bytes"
5+
"path/filepath"
6+
"strings"
7+
"testing"
8+
59
"github.com/jfrog/jfrog-cli-artifactory/cliutils/flagkit"
610
pluginsCommon "github.com/jfrog/jfrog-cli-core/v2/plugins/common"
711
"github.com/jfrog/jfrog-cli-core/v2/plugins/components"
812
"github.com/jfrog/jfrog-cli-core/v2/utils/coreutils"
913
clientTestUtils "github.com/jfrog/jfrog-client-go/utils/tests"
1014
"github.com/stretchr/testify/assert"
11-
"path/filepath"
12-
"strings"
13-
"testing"
1415
)
1516

1617
func TestValidateCreateReleaseBundleContext(t *testing.T) {
@@ -35,6 +36,11 @@ func TestValidateCreateReleaseBundleContext(t *testing.T) {
3536
{"spec without signing key", []string{"name", "version", "env"}, []string{"spec=/path/to/file"}, true},
3637
{"spec correct", []string{"name", "version"}, []string{
3738
"spec=/path/to/file", flagkit.SigningKey + "=key"}, false},
39+
// Draft flag tests - draft flag should not affect validation
40+
{"spec with draft flag", []string{"name", "version"}, []string{
41+
"spec=/path/to/file", flagkit.SigningKey + "=key"}, false},
42+
{"builds with draft flag", []string{"name", "version"}, []string{
43+
flagkit.Builds + "=/path/to/file", flagkit.SigningKey + "=key"}, false},
3844
}
3945

4046
for _, test := range testRuns {
@@ -151,3 +157,35 @@ func CreateContext(t *testing.T, testStringFlags, testArgs []string, testBoolFla
151157
}
152158
return ctx, &bytes.Buffer{}
153159
}
160+
161+
func TestDraftFlagReading(t *testing.T) {
162+
testRuns := []struct {
163+
name string
164+
boolFlags map[string]bool
165+
expectedDraft bool
166+
}{
167+
{
168+
name: "draft flag not set",
169+
boolFlags: nil,
170+
expectedDraft: false,
171+
},
172+
{
173+
name: "draft flag set to true",
174+
boolFlags: map[string]bool{flagkit.Draft: true},
175+
expectedDraft: true,
176+
},
177+
{
178+
name: "draft flag set to false",
179+
boolFlags: map[string]bool{flagkit.Draft: false},
180+
expectedDraft: false,
181+
},
182+
}
183+
184+
for _, test := range testRuns {
185+
t.Run(test.name, func(t *testing.T) {
186+
context, _ := CreateContext(t, []string{}, []string{}, test.boolFlags)
187+
draftValue := context.GetBoolFlagValue(flagkit.Draft)
188+
assert.Equal(t, test.expectedDraft, draftValue)
189+
})
190+
}
191+
}

lifecycle/commands/createcommon.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ type ReleaseBundleCreateCommand struct {
3434
releaseBundleCmd
3535
signingKeyName string
3636
spec *spec.SpecFiles
37+
draft bool
3738
// Backward compatibility:
3839
buildsSpecPath string
3940
releaseBundlesSpecPath string
@@ -81,6 +82,11 @@ func (rbc *ReleaseBundleCreateCommand) SetSpec(spec *spec.SpecFiles) *ReleaseBun
8182
return rbc
8283
}
8384

85+
func (rbc *ReleaseBundleCreateCommand) SetDraft(draft bool) *ReleaseBundleCreateCommand {
86+
rbc.draft = draft
87+
return rbc
88+
}
89+
8490
// Deprecated
8591
func (rbc *ReleaseBundleCreateCommand) SetBuildsSpecPath(buildsSpecPath string) *ReleaseBundleCreateCommand {
8692
rbc.buildsSpecPath = buildsSpecPath
@@ -389,7 +395,7 @@ func (rbc *ReleaseBundleCreateCommand) multiSourcesDefinedFromSpec() ([]services
389395
func (rbc *ReleaseBundleCreateCommand) createFromMultipleSources(servicesManager *lifecycle.LifecycleServicesManager,
390396
rbDetails services.ReleaseBundleDetails, queryParams services.CommonOptionalQueryParams,
391397
sources []services.RbSource) (response []byte, err error) {
392-
return servicesManager.CreateReleaseBundlesFromMultipleSources(rbDetails, queryParams, rbc.signingKeyName, sources)
398+
return servicesManager.CreateReleaseBundlesFromMultipleSourcesDraft(rbDetails, queryParams, rbc.signingKeyName, sources, rbc.draft)
393399
}
394400

395401
func (rbc *ReleaseBundleCreateCommand) createAqlQueryFromSpec() (aql string) {

lifecycle/commands/createfromaql.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,5 @@ import (
88
func (rbc *ReleaseBundleCreateCommand) createFromAql(servicesManager *lifecycle.LifecycleServicesManager,
99
rbDetails services.ReleaseBundleDetails, queryParams services.CommonOptionalQueryParams) error {
1010
aqlQuery := rbc.createAqlQueryFromSpec()
11-
return servicesManager.CreateReleaseBundleFromAql(rbDetails, queryParams, rbc.signingKeyName, aqlQuery)
11+
return servicesManager.CreateReleaseBundleFromAqlDraft(rbDetails, queryParams, rbc.signingKeyName, aqlQuery, rbc.draft)
1212
}

lifecycle/commands/createfromartifacts.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ func (rbc *ReleaseBundleCreateCommand) createFromArtifacts(lcServicesManager *li
1919
return err
2020
}
2121

22-
return lcServicesManager.CreateReleaseBundleFromArtifacts(rbDetails, queryParams, rbc.signingKeyName, artifactsSource)
22+
return lcServicesManager.CreateReleaseBundleFromArtifactsDraft(rbDetails, queryParams, rbc.signingKeyName, artifactsSource, rbc.draft)
2323
}
2424

2525
func (rbc *ReleaseBundleCreateCommand) getArtifactFilesFromSpec() []spec.File {

lifecycle/commands/createfrombuilds.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ func (rbc *ReleaseBundleCreateCommand) createFromBuilds(servicesManager *lifecyc
2525
return errorutils.CheckErrorf("at least one build is expected in order to create a release bundle from builds")
2626
}
2727

28-
return servicesManager.CreateReleaseBundleFromBuilds(rbDetails, queryParams, rbc.signingKeyName, buildsSource)
28+
return servicesManager.CreateReleaseBundleFromBuildsDraft(rbDetails, queryParams, rbc.signingKeyName, buildsSource, rbc.draft)
2929
}
3030

3131
func (rbc *ReleaseBundleCreateCommand) createBuildSourceFromSpec() (buildsSource services.CreateFromBuildsSource, err error) {

lifecycle/commands/createfrombundles.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ func (rbc *ReleaseBundleCreateCommand) createFromReleaseBundles(servicesManager
2323
return errorutils.CheckErrorf("at least one release bundle is expected in order to create a release bundle from release bundles")
2424
}
2525

26-
return servicesManager.CreateReleaseBundleFromBundles(rbDetails, queryParams, rbc.signingKeyName, releaseBundlesSource)
26+
return servicesManager.CreateReleaseBundleFromBundlesDraft(rbDetails, queryParams, rbc.signingKeyName, releaseBundlesSource, rbc.draft)
2727
}
2828

2929
func (rbc *ReleaseBundleCreateCommand) createReleaseBundleSourceFromSpec() (services.CreateFromReleaseBundlesSource, error) {

0 commit comments

Comments
 (0)