Skip to content

Commit e916117

Browse files
committed
RBC command - Turn spec flag optional, adding support in buildName and buildNumber
1 parent 3bf322b commit e916117

File tree

7 files changed

+269
-68
lines changed

7 files changed

+269
-68
lines changed

go.mod

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@ require (
1616
github.com/docker/docker v27.3.1+incompatible
1717
github.com/gocarina/gocsv v0.0.0-20240520201108-78e41c74b4b1
1818
github.com/jfrog/archiver/v3 v3.6.1
19-
github.com/jfrog/build-info-go v1.10.5
19+
github.com/jfrog/build-info-go v1.10.6
2020
github.com/jfrog/gofrog v1.7.6
2121
github.com/jfrog/jfrog-cli-artifactory v0.1.7
22-
github.com/jfrog/jfrog-cli-core/v2 v2.56.8
22+
github.com/jfrog/jfrog-cli-core/v2 v2.57.1
2323
github.com/jfrog/jfrog-cli-platform-services v1.4.0
24-
github.com/jfrog/jfrog-cli-security v1.12.5
25-
github.com/jfrog/jfrog-client-go v1.48.0
24+
github.com/jfrog/jfrog-cli-security v1.13.4
25+
github.com/jfrog/jfrog-client-go v1.48.3
2626
github.com/jszwec/csvutil v1.10.0
2727
github.com/manifoldco/promptui v0.9.0
2828
github.com/stretchr/testify v1.9.0
@@ -167,12 +167,9 @@ require (
167167
gopkg.in/yaml.v3 v3.0.1 // indirect
168168
)
169169

170-
replace github.com/jfrog/jfrog-cli-core/v2 => github.com/jfrog/jfrog-cli-core/v2 v2.31.1-0.20241121163158-04daeb8132c3
171-
172-
replace github.com/jfrog/jfrog-cli-security => github.com/EyalDelarea/jfrog-cli-security v0.0.0-20241121103043-02719f295f02
173-
170+
//replace github.com/jfrog/jfrog-cli-security => github.com/attiasas/jfrog-cli-security v0.0.0-20241127094042-0a28e03bc754
171+
//replace github.com/jfrog/jfrog-cli-core/v2 => github.com/jfrog/jfrog-cli-core/v2 v2.31.1-0.20241121163158-04daeb8132c3
172+
//replace github.com/jfrog/jfrog-cli-security => github.com/EyalDelarea/jfrog-cli-security v0.0.0-20241121103043-02719f295f02
174173
// replace github.com/jfrog/jfrog-client-go => github.com/jfrog/jfrog-client-go v1.28.1-0.20240918081224-1c584cc334c7
175-
176-
replace github.com/jfrog/build-info-go => github.com/jfrog/build-info-go v1.8.9-0.20241121100855-e7a75ceee2bd
177-
174+
//replace github.com/jfrog/build-info-go => github.com/jfrog/build-info-go v1.8.9-0.20241121100855-e7a75ceee2bd
178175
// replace github.com/jfrog/gofrog => github.com/jfrog/gofrog dev

go.sum

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0
1010
github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
1111
github.com/CycloneDX/cyclonedx-go v0.9.0 h1:inaif7qD8bivyxp7XLgxUYtOXWtDez7+j72qKTMQTb8=
1212
github.com/CycloneDX/cyclonedx-go v0.9.0/go.mod h1:NE/EWvzELOFlG6+ljX/QeMlVt9VKcTwu8u0ccsACEsw=
13-
github.com/EyalDelarea/jfrog-cli-security v0.0.0-20241121103043-02719f295f02 h1:oyTvu0FWw+qlEcinSd/8/U+JWR00uQSSa9y0fO+ZVAo=
14-
github.com/EyalDelarea/jfrog-cli-security v0.0.0-20241121103043-02719f295f02/go.mod h1:5LBGwth7TXkEH8MO0JJXvpoRktMAV2BK7Q5nQePNrv4=
1513
github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY=
1614
github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
1715
github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
@@ -163,8 +161,8 @@ github.com/jedib0t/go-pretty/v6 v6.6.1 h1:iJ65Xjb680rHcikRj6DSIbzCex2huitmc7bDtx
163161
github.com/jedib0t/go-pretty/v6 v6.6.1/go.mod h1:zbn98qrYlh95FIhwwsbIip0LYpwSG8SUOScs+v9/t0E=
164162
github.com/jfrog/archiver/v3 v3.6.1 h1:LOxnkw9pOn45DzCbZNFV6K0+6dCsQ0L8mR3ZcujO5eI=
165163
github.com/jfrog/archiver/v3 v3.6.1/go.mod h1:VgR+3WZS4N+i9FaDwLZbq+jeU4B4zctXL+gL4EMzfLw=
166-
github.com/jfrog/build-info-go v1.8.9-0.20241121100855-e7a75ceee2bd h1:PzxnJ1mjHIL4bAC4RPm87WnJ1TZXFBicyOhtIHRQH6g=
167-
github.com/jfrog/build-info-go v1.8.9-0.20241121100855-e7a75ceee2bd/go.mod h1:JcISnovFXKx3wWf3p1fcMmlPdt6adxScXvoJN4WXqIE=
164+
github.com/jfrog/build-info-go v1.10.6 h1:zH1ZhXlVfi5DlFyunygHjrdOcnv5qxfeLqmsfD4+lc4=
165+
github.com/jfrog/build-info-go v1.10.6/go.mod h1:JcISnovFXKx3wWf3p1fcMmlPdt6adxScXvoJN4WXqIE=
168166
github.com/jfrog/froggit-go v1.16.2 h1:F//S83iXH14qsCwYzv0zB2JtjS2pJVEsUoEmYA+37dQ=
169167
github.com/jfrog/froggit-go v1.16.2/go.mod h1:5VpdQfAcbuyFl9x/x8HGm7kVk719kEtW/8YJFvKcHPA=
170168
github.com/jfrog/gofrog v1.7.6 h1:QmfAiRzVyaI7JYGsB7cxfAJePAZTzFz0gRWZSE27c6s=
@@ -173,12 +171,14 @@ github.com/jfrog/jfrog-apps-config v1.0.1 h1:mtv6k7g8A8BVhlHGlSveapqf4mJfonwvXYL
173171
github.com/jfrog/jfrog-apps-config v1.0.1/go.mod h1:8AIIr1oY9JuH5dylz2S6f8Ym2MaadPLR6noCBO4C22w=
174172
github.com/jfrog/jfrog-cli-artifactory v0.1.7 h1:/PBDO6nS6cf3PK+GRkd6BJtZnvYasi1PrQhRiayirso=
175173
github.com/jfrog/jfrog-cli-artifactory v0.1.7/go.mod h1:M5pZTHnsYNDmml/FAnoxxt4QiHOIUHPx91th30AtwfM=
176-
github.com/jfrog/jfrog-cli-core/v2 v2.31.1-0.20241121163158-04daeb8132c3 h1:cJSPTMflqE+ucC/h2/BB6BkVxz3BG8PnivCb00Dxt/Y=
177-
github.com/jfrog/jfrog-cli-core/v2 v2.31.1-0.20241121163158-04daeb8132c3/go.mod h1:zVyWxMkBpZwy/AvTohefIlaZzYKBMFje+gKKKlkunNo=
174+
github.com/jfrog/jfrog-cli-core/v2 v2.57.1 h1:YVuiSoavDisE8Dc9TOhYo5fE3d2C4/BrXuLDO/SZpJo=
175+
github.com/jfrog/jfrog-cli-core/v2 v2.57.1/go.mod h1:e95/VWV6LL+UUxSNTJZ+sLmqJhCO5lDRhhLUQMV8WK4=
178176
github.com/jfrog/jfrog-cli-platform-services v1.4.0 h1:g6A30+tOfXd1h6VASeNwH+5mhs5bPQJ0MFzZs/4nlvs=
179177
github.com/jfrog/jfrog-cli-platform-services v1.4.0/go.mod h1:Ky4SDXuMeaiNP/5zMT1YSzIuXG+cNYYOl8BaEA7Awbc=
180-
github.com/jfrog/jfrog-client-go v1.48.0 h1:hx5B7+Wnobmzq4aFVZtALtbEVDFcjpn0Wb4q2m6H4KU=
181-
github.com/jfrog/jfrog-client-go v1.48.0/go.mod h1:1a7bmQHkRmPEza9wva2+WVrYzrGbosrMymq57kyG5gU=
178+
github.com/jfrog/jfrog-cli-security v1.13.4 h1:GF6KfBZLi2ztwKJgOvHdXYVUFIvLjZRMWTy152cbJ7Y=
179+
github.com/jfrog/jfrog-cli-security v1.13.4/go.mod h1:GNf/qXZuSsYXfGBH9qobE6Vz5glaGqNpRgU3LWnBrAQ=
180+
github.com/jfrog/jfrog-client-go v1.48.3 h1:HJpKGul0f/S2i7Uf7K/GwS1EUGiirt1LWXL1lanKNhU=
181+
github.com/jfrog/jfrog-client-go v1.48.3/go.mod h1:1a7bmQHkRmPEza9wva2+WVrYzrGbosrMymq57kyG5gU=
182182
github.com/jszwec/csvutil v1.10.0 h1:upMDUxhQKqZ5ZDCs/wy+8Kib8rZR8I8lOR34yJkdqhI=
183183
github.com/jszwec/csvutil v1.10.0/go.mod h1:/E4ONrmGkwmWsk9ae9jpXnv9QT8pLHEPcCirMFhxG9I=
184184
github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k=

lifecycle/cli.go

Lines changed: 69 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@ package lifecycle
22

33
import (
44
"errors"
5+
"fmt"
56
commonCliUtils "github.com/jfrog/jfrog-cli-core/v2/common/cliutils"
67
"github.com/jfrog/jfrog-cli-core/v2/common/commands"
78
"github.com/jfrog/jfrog-cli-core/v2/common/spec"
9+
speccore "github.com/jfrog/jfrog-cli-core/v2/common/spec"
810
coreCommon "github.com/jfrog/jfrog-cli-core/v2/docs/common"
911
"github.com/jfrog/jfrog-cli-core/v2/lifecycle"
1012
coreConfig "github.com/jfrog/jfrog-cli-core/v2/utils/config"
@@ -24,6 +26,7 @@ import (
2426
"github.com/jfrog/jfrog-client-go/utils"
2527
"github.com/jfrog/jfrog-client-go/utils/errorutils"
2628
"github.com/urfave/cli"
29+
"os"
2730
"strings"
2831
)
2932

@@ -131,21 +134,56 @@ func validateCreateReleaseBundleContext(c *cli.Context) error {
131134
}
132135

133136
func assertValidCreationMethod(c *cli.Context) error {
137+
// Determine the methods provided
134138
methods := []bool{
135-
c.IsSet("spec"), c.IsSet(cliutils.Builds), c.IsSet(cliutils.ReleaseBundles)}
136-
if coreutils.SumTrueValues(methods) > 1 {
137-
return errorutils.CheckErrorf("exactly one creation source must be supplied: --%s, --%s or --%s.\n"+
138-
"Opt to use the --%s option as the --%s and --%s are deprecated",
139+
c.IsSet("spec"),
140+
c.IsSet(cliutils.Builds),
141+
c.IsSet(cliutils.ReleaseBundles),
142+
}
143+
methodCount := coreutils.SumTrueValues(methods)
144+
145+
// Validate that only one creation method is provided
146+
if err := validateSingleCreationMethod(methodCount); err != nil {
147+
return err
148+
}
149+
150+
if err := validateCreationValuesPresence(c, methodCount); err != nil {
151+
return err
152+
}
153+
return nil
154+
}
155+
156+
func validateSingleCreationMethod(methodCount int) error {
157+
if methodCount > 1 {
158+
return errorutils.CheckErrorf(
159+
"exactly one creation source must be supplied: --%s, --%s, or --%s.\n"+
160+
"Opt to use the --%s option as the --%s and --%s are deprecated",
161+
"spec", cliutils.Builds, cliutils.ReleaseBundles,
139162
"spec", cliutils.Builds, cliutils.ReleaseBundles,
140-
"spec", cliutils.Builds, cliutils.ReleaseBundles)
163+
)
141164
}
142-
// If the user did not provide a source, we suggest only the recommended spec approach.
143-
if coreutils.SumTrueValues(methods) == 0 {
144-
return errorutils.CheckErrorf("the --spec option is mandatory")
165+
return nil
166+
}
167+
168+
func validateCreationValuesPresence(c *cli.Context, methodCount int) error {
169+
if methodCount == 0 {
170+
if !areBuildFlagsSet(c) && !areBuildEnvVarsSet() {
171+
return errorutils.CheckErrorf("Either --build-name or JFROG_CLI_BUILD_NAME, and --build-number or JFROG_CLI_BUILD_NUMBER must be defined")
172+
}
145173
}
146174
return nil
147175
}
148176

177+
// areBuildFlagsSet checks if build-name or build-number flags are set.
178+
func areBuildFlagsSet(c *cli.Context) bool {
179+
return c.IsSet(cliutils.BuildName) || c.IsSet(cliutils.BuildNumber)
180+
}
181+
182+
// areBuildEnvVarsSet checks if build environment variables are set.
183+
func areBuildEnvVarsSet() bool {
184+
return os.Getenv("JFROG_CLI_BUILD_NUMBER") != "" && os.Getenv("JFROG_CLI_BUILD_NAME") != ""
185+
}
186+
149187
func create(c *cli.Context) (err error) {
150188
if err = validateCreateReleaseBundleContext(c); err != nil {
151189
return err
@@ -169,10 +207,32 @@ func create(c *cli.Context) (err error) {
169207
}
170208

171209
func getReleaseBundleCreationSpec(c *cli.Context) (*spec.SpecFiles, error) {
210+
if c.IsSet(cliutils.Builds) || c.IsSet(cliutils.ReleaseBundles) {
211+
return nil, nil
212+
}
213+
214+
// Check if the "spec" flag is set
172215
if c.IsSet("spec") {
173216
return cliutils.GetSpec(c, true, false)
174217
}
175-
return nil, nil
218+
219+
buildName := getStringFlagOrEnv(c, cliutils.BuildName, coreutils.BuildName)
220+
buildNumber := getStringFlagOrEnv(c, cliutils.BuildNumber, coreutils.BuildNumber)
221+
222+
if buildName != "" && buildNumber != "" {
223+
return speccore.CreateSpecFromBuildNameAndNumber(buildNumber, buildName)
224+
}
225+
226+
return nil, fmt.Errorf("either the --spec flag must be provided, " +
227+
"or both --build-name and --build-number flags (or their corresponding environment variables " +
228+
"JFROG_CLI_BUILD_NAME and JFROG_CLI_BUILD_NUMBER) must be set")
229+
}
230+
231+
func getStringFlagOrEnv(c *cli.Context, flag string, envVar string) string {
232+
if c.IsSet(flag) {
233+
return c.String(flag)
234+
}
235+
return os.Getenv(envVar)
176236
}
177237

178238
func promote(c *cli.Context) error {

lifecycle/cli_test.go

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,3 +56,70 @@ func TestCreateReleaseBundleSpecWithProject(t *testing.T) {
5656
creationSpec.Get(0).Project = ""
5757
assert.Equal(t, projectKey, cliutils.GetProject(context))
5858
}
59+
60+
func TestGetReleaseBundleCreationSpec(t *testing.T) {
61+
62+
t.Run("Spec Flag Set", func(t *testing.T) {
63+
specFile := filepath.Join("testdata", "specfile.json")
64+
ctx, _ := tests.CreateContext(t, []string{"spec=" + specFile}, []string{})
65+
66+
spec, err := getReleaseBundleCreationSpec(ctx)
67+
68+
assert.NoError(t, err)
69+
assert.NotNil(t, spec)
70+
})
71+
72+
t.Run("Build Name and Number Set via Flags", func(t *testing.T) {
73+
ctx, _ := tests.CreateContext(t, []string{"build-name=Common-builds", "build-number=1.0.0"}, []string{})
74+
75+
spec, err := getReleaseBundleCreationSpec(ctx)
76+
77+
assert.NoError(t, err)
78+
assert.NotNil(t, spec)
79+
assert.Equal(t, "Common-builds/1.0.0", spec.Files[0].Build)
80+
})
81+
82+
t.Run("Build Name and Number Set via Env Variables", func(t *testing.T) {
83+
t.Setenv("JFROG_CLI_BUILD_NAME", "Common-builds")
84+
t.Setenv("JFROG_CLI_BUILD_NUMBER", "2.0.0")
85+
86+
ctx, _ := tests.CreateContext(t, []string{}, []string{})
87+
88+
spec, err := getReleaseBundleCreationSpec(ctx)
89+
90+
assert.NoError(t, err)
91+
assert.NotNil(t, spec)
92+
assert.Equal(t, "Common-builds/2.0.0", spec.Files[0].Build)
93+
})
94+
95+
t.Run("Missing Build Name and Number", func(t *testing.T) {
96+
ctx, _ := tests.CreateContext(t, []string{}, []string{})
97+
98+
spec, err := getReleaseBundleCreationSpec(ctx)
99+
100+
assert.Error(t, err)
101+
assert.Nil(t, spec)
102+
assert.EqualError(t, err, "either the 'spec' flag must be set, or both '--build-name' and '--build-number' or the corresponding environment variables 'JFROG_CLI_BUILD_NAME' and 'JFROG_CLI_BUILD_NUMBER' must be defined")
103+
})
104+
105+
t.Run("Only One Build Variable Set", func(t *testing.T) {
106+
ctx, _ := tests.CreateContext(t, []string{"build-name=Common-builds"}, []string{})
107+
108+
spec, err := getReleaseBundleCreationSpec(ctx)
109+
110+
assert.Error(t, err)
111+
assert.Nil(t, spec)
112+
assert.EqualError(t, err, "either the 'spec' flag must be set, or both '--build-name' and '--build-number' or the corresponding environment variables 'JFROG_CLI_BUILD_NAME' and 'JFROG_CLI_BUILD_NUMBER' must be defined")
113+
})
114+
115+
t.Run("One Env Variable One Flag", func(t *testing.T) {
116+
ctx, _ := tests.CreateContext(t, []string{"build-name=Common-builds"}, []string{})
117+
t.Setenv("JFROG_CLI_BUILD_NUMBER", "2.0.0")
118+
119+
spec, err := getReleaseBundleCreationSpec(ctx)
120+
121+
assert.NoError(t, err)
122+
assert.NotNil(t, spec)
123+
assert.Equal(t, "Common-builds/2.0.0", spec.Files[0].Build)
124+
})
125+
}

lifecycle_test.go

Lines changed: 75 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"fmt"
66
"github.com/jfrog/gofrog/io"
77
"github.com/jfrog/jfrog-cli-core/v2/artifactory/utils"
8+
"github.com/jfrog/jfrog-cli-core/v2/common/spec"
89
configUtils "github.com/jfrog/jfrog-cli-core/v2/utils/config"
910
"github.com/jfrog/jfrog-cli-core/v2/utils/coreutils"
1011
coreTests "github.com/jfrog/jfrog-cli-core/v2/utils/tests"
@@ -24,6 +25,7 @@ import (
2425
"os"
2526
"path"
2627
"path/filepath"
28+
"strconv"
2729
"testing"
2830
"time"
2931
)
@@ -167,7 +169,6 @@ func TestLifecycleFullFlow(t *testing.T) {
167169
// Verify the artifacts were distributed correctly by the provided path mappings.
168170
assertExpectedArtifacts(t, tests.SearchAllDevRepo, tests.GetExpectedLifecycleDistributedArtifacts())
169171
*/
170-
171172
}
172173

173174
// Import bundles only work on onPerm platforms
@@ -215,21 +216,85 @@ func createRbFromSpec(t *testing.T, specName, rbName, rbVersion string, sync boo
215216
createRb(t, specFile, "spec", rbName, rbVersion, sync, withoutSigningKey)
216217
}
217218

218-
func createRb(t *testing.T, specFilePath, sourceOption, rbName, rbVersion string, sync bool, withoutSigningKey bool) {
219-
argsAndOptions := []string{
220-
"rbc",
221-
rbName,
222-
rbVersion,
219+
func TestCreateBundleWithoutSpec(t *testing.T) {
220+
cleanCallback := initLifecycleTest(t, artifactoryLifecycleMinVersion)
221+
defer cleanCallback()
222+
223+
lcManager := getLcServiceManager(t)
224+
225+
deleteBuilds := uploadBuilds(t)
226+
defer deleteBuilds()
227+
228+
createRbFromBuildNameAndNumber(t, tests.LifecycleBuilds12, tests.LcRbName1, number1, true, false)
229+
assertStatusCompleted(t, lcManager, tests.LcRbName1, number1, "")
230+
defer deleteReleaseBundle(t, lcManager, tests.LcRbName1, number1)
231+
232+
createRbFromBuildNameAndNumber(t, tests.LifecycleBuilds12, tests.LcRbName1, number2, true, true)
233+
defer deleteReleaseBundle(t, lcManager, tests.LcRbName1, number2)
234+
assertStatusCompleted(t, lcManager, tests.LcRbName1, number2, "")
235+
}
236+
237+
func createRbFromBuildNameAndNumber(t *testing.T, specName, rbName, rbVersion string, sync bool, withoutKey bool) {
238+
filePath, err := tests.CreateSpec(specName)
239+
assert.NoError(t, err)
240+
241+
specFile, err := os.Open(filePath)
242+
if err != nil {
243+
fmt.Println("Error opening file:", err)
244+
return
245+
}
246+
defer specFile.Close()
247+
var specData spec.SpecFiles
248+
decoder := json.NewDecoder(specFile)
249+
if err := decoder.Decode(&specData); err != nil {
250+
fmt.Println("Error decoding JSON:", err)
251+
return
252+
}
253+
254+
buildInfo := specData.Files[0].Build
255+
buildName, buildNumber, err := tests.ExtractBuildInfo(buildInfo)
256+
assert.NoError(t, err)
257+
258+
options := []string{
259+
getOption(cliutils.BuildName, buildName),
260+
getOption(cliutils.BuildNumber, buildNumber),
261+
}
262+
263+
if !withoutKey {
264+
options = append(options, getOption(cliutils.SigningKey, gpgKeyPairName))
265+
}
266+
267+
if sync {
268+
options = append(options, getOption(cliutils.Sync, strconv.FormatBool(sync)))
269+
}
270+
271+
createRbWithOptions(t, rbName, rbVersion, options...)
272+
}
273+
274+
func createRb(t *testing.T, specFilePath, sourceOption, rbName, rbVersion string, sync bool, withoutKey bool) {
275+
options := []string{
223276
getOption(sourceOption, specFilePath),
224277
}
225278

226-
if !withoutSigningKey {
227-
argsAndOptions = append(argsAndOptions, getOption(cliutils.SigningKey, gpgKeyPairName))
279+
if !withoutKey {
280+
options = append(options, getOption(cliutils.SigningKey, gpgKeyPairName))
228281
}
229-
// Add the --sync option only if requested, to test the default value.
282+
230283
if sync {
231-
argsAndOptions = append(argsAndOptions, getOption(cliutils.Sync, "true"))
284+
options = append(options, getOption(cliutils.Sync, "true"))
232285
}
286+
287+
createRbWithOptions(t, rbName, rbVersion, options...)
288+
}
289+
290+
func createRbWithOptions(t *testing.T, rbName, rbVersion string, options ...string) {
291+
argsAndOptions := []string{
292+
"rbc",
293+
rbName,
294+
rbVersion,
295+
}
296+
297+
argsAndOptions = append(argsAndOptions, options...)
233298
assert.NoError(t, lcCli.Exec(argsAndOptions...))
234299
}
235300

0 commit comments

Comments
 (0)