Loading internal/commands/create.go +25 −15 Original line number Diff line number Diff line Loading @@ -63,6 +63,7 @@ func createRelease(ctx *cli.Context, log logrus.FieldLogger, httpClient gitlab.H flags.TagName: ctx.String(flags.TagName), flags.TagMessage: ctx.String(flags.TagMessage), flags.Ref: ctx.String(flags.Ref), flags.CatalogPublish: ctx.Bool(flags.CatalogPublish), }) l.Info("Creating Release...") Loading Loading @@ -123,6 +124,7 @@ func newCreateReleaseReq(ctx *cli.Context, log logrus.FieldLogger) (*gitlab.Crea assetsLink := ctx.StringSlice(flags.AssetsLink) description := ctx.String(flags.Description) releasedAt := ctx.String(flags.ReleasedAt) legacyCatalogPublish := new(bool) assets, err := gitlab.ParseAssets(assetsLink) if err != nil { Loading @@ -134,6 +136,13 @@ func newCreateReleaseReq(ctx *cli.Context, log logrus.FieldLogger) (*gitlab.Crea return nil, err } // We define `legacyCatalogPublish` as a pointer to assign `nil` to it along with boolean values. // That's because we don't want to send this parameter via API if it's not `true`. *legacyCatalogPublish = ctx.Bool(flags.CatalogPublish) if !*legacyCatalogPublish { legacyCatalogPublish = nil } crr := &gitlab.CreateReleaseRequest{ ID: ctx.String(flags.ProjectID), Name: ctx.String(flags.Name), Loading @@ -143,6 +152,7 @@ func newCreateReleaseReq(ctx *cli.Context, log logrus.FieldLogger) (*gitlab.Crea Ref: ctx.String(flags.Ref), Assets: assets, Milestones: ctx.StringSlice(flags.Milestone), LegacyCatalogPublish: legacyCatalogPublish, } if releasedAt != "" { Loading internal/commands/create_test.go +44 −2 Original line number Diff line number Diff line Loading @@ -28,7 +28,7 @@ func TestCreate(t *testing.T) { create, ctx := newTestCreate(t, logrus.NewEntry(logger), mhc) require.Equal(t, "create", create.Name) require.Len(t, create.Flags, 8) require.Len(t, create.Flags, 9) err := create.Run(ctx) require.NoError(t, err) Loading @@ -48,7 +48,7 @@ func TestCreateFromFile(t *testing.T) { createFromFile, ctx := newTestCreateFromFile(t, logrus.NewEntry(logger), mhc) require.Equal(t, "create-from-file", createFromFile.Name) require.Len(t, createFromFile.Flags, 9) require.Len(t, createFromFile.Flags, 10) err := createFromFile.Run(ctx) require.NoError(t, err) Loading Loading @@ -151,6 +151,32 @@ func TestCreateMilestonesAndReleasedAt(t *testing.T) { } } func TestCreateCatalogPublish(t *testing.T) { logger, _ := testlog.NewNullLogger() tests := []struct { name string extraArgs []string }{ { name: "catalog_publish_true", extraArgs: []string{"--catalog-publish"}, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { mhc := gitlab.MockHTTPClient{} mhc.On("Do", mock.Anything).Return(testdata.Responses[testdata.ResponseCreateReleaseSuccess](), nil).Once() defer mhc.AssertExpectations(t) create, ctx := newTestCreate(t, logrus.NewEntry(logger), &mhc, tt.extraArgs...) err := create.Run(ctx) require.NoError(t, err) }) } } func TestGetDescription(t *testing.T) { chdirSet := false chdir := testhelpers.ChdirInPath(t, "../", &chdirSet) Loading Loading @@ -211,6 +237,8 @@ func Test_newCreateReleaseReq(t *testing.T) { rat, err := gitlab.ParseDateTime("2019-01-03T01:55:18.203Z") require.NoError(t, err) trueVal := true baseCRR := gitlab.CreateReleaseRequest{ ID: "", Name: "name", Loading Loading @@ -284,6 +312,19 @@ func Test_newCreateReleaseReq(t *testing.T) { crr.TagMessage = "" }), }, { name: "with_catalog_publish", args: []string{ "--catalog-publish", }, expected: newTestCreateReleaseRequest(baseCRR, func(crr *gitlab.CreateReleaseRequest) { crr.LegacyCatalogPublish = &trueVal crr.Assets = nil crr.Milestones = make([]string, 0) crr.ReleasedAt = nil crr.TagMessage = "" }), }, } for _, tt := range tests { Loading Loading @@ -321,6 +362,7 @@ func getFlagSet(t *testing.T, args ...string) *flag.FlagSet { set.String(flags.TagMessage, "", "") set.String(flags.Ref, "", "") set.String(flags.ReleasedAt, "", "") set.Bool(flags.CatalogPublish, false, "") err := set.Parse(args) require.NoError(t, err) Loading internal/flags/const.go +2 −0 Original line number Diff line number Diff line Loading @@ -37,4 +37,6 @@ const ( InsecureHTTPS = "insecure-https" // IncludeHTMLDescription flag IncludeHTMLDescription = "include-html-description" // CatalogPublish available in the CLI context CatalogPublish = "catalog-publish" ) internal/flags/create_flags.go +11 −0 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ func (ParameterFlag) ListFlags() *[]cli.Flag { assetsLinkFlag(false), milestoneFlag(false), releasedAtFlag(false), catalogPublishFlag(false), } } Loading @@ -51,6 +52,7 @@ func (FileFlag) ListFlags() *[]cli.Flag { altsrc.NewStringSliceFlag(assetsLinkFlag(true)), altsrc.NewStringSliceFlag(milestoneFlag(true)), altsrc.NewStringFlag(releasedAtFlag(true)), altsrc.NewBoolFlag(catalogPublishFlag(true)), &cli.StringFlag{ Name: File, Usage: `YML file which content holds data to create a release. Does not need use of any other parameters.`, Loading Loading @@ -132,3 +134,12 @@ func releasedAtFlag(hidden bool) *cli.StringFlag { Hidden: hidden, } } func catalogPublishFlag(hidden bool) *cli.BoolFlag { return &cli.BoolFlag{ Name: CatalogPublish, Usage: `Set to true if you want to publish the catalog resource release to the CI/CD catalog`, Required: false, Hidden: hidden, } } internal/gitlab/release.go +10 −9 Original line number Diff line number Diff line Loading @@ -87,6 +87,7 @@ type CreateReleaseRequest struct { Assets *Assets `json:"assets,omitempty"` Milestones []string `json:"milestones,omitempty"` ReleasedAt *time.Time `json:"released_at,omitempty"` LegacyCatalogPublish *bool `json:"legacy_catalog_publish,omitempty"` } // UpdateReleaseRequest body. Loading Loading
internal/commands/create.go +25 −15 Original line number Diff line number Diff line Loading @@ -63,6 +63,7 @@ func createRelease(ctx *cli.Context, log logrus.FieldLogger, httpClient gitlab.H flags.TagName: ctx.String(flags.TagName), flags.TagMessage: ctx.String(flags.TagMessage), flags.Ref: ctx.String(flags.Ref), flags.CatalogPublish: ctx.Bool(flags.CatalogPublish), }) l.Info("Creating Release...") Loading Loading @@ -123,6 +124,7 @@ func newCreateReleaseReq(ctx *cli.Context, log logrus.FieldLogger) (*gitlab.Crea assetsLink := ctx.StringSlice(flags.AssetsLink) description := ctx.String(flags.Description) releasedAt := ctx.String(flags.ReleasedAt) legacyCatalogPublish := new(bool) assets, err := gitlab.ParseAssets(assetsLink) if err != nil { Loading @@ -134,6 +136,13 @@ func newCreateReleaseReq(ctx *cli.Context, log logrus.FieldLogger) (*gitlab.Crea return nil, err } // We define `legacyCatalogPublish` as a pointer to assign `nil` to it along with boolean values. // That's because we don't want to send this parameter via API if it's not `true`. *legacyCatalogPublish = ctx.Bool(flags.CatalogPublish) if !*legacyCatalogPublish { legacyCatalogPublish = nil } crr := &gitlab.CreateReleaseRequest{ ID: ctx.String(flags.ProjectID), Name: ctx.String(flags.Name), Loading @@ -143,6 +152,7 @@ func newCreateReleaseReq(ctx *cli.Context, log logrus.FieldLogger) (*gitlab.Crea Ref: ctx.String(flags.Ref), Assets: assets, Milestones: ctx.StringSlice(flags.Milestone), LegacyCatalogPublish: legacyCatalogPublish, } if releasedAt != "" { Loading
internal/commands/create_test.go +44 −2 Original line number Diff line number Diff line Loading @@ -28,7 +28,7 @@ func TestCreate(t *testing.T) { create, ctx := newTestCreate(t, logrus.NewEntry(logger), mhc) require.Equal(t, "create", create.Name) require.Len(t, create.Flags, 8) require.Len(t, create.Flags, 9) err := create.Run(ctx) require.NoError(t, err) Loading @@ -48,7 +48,7 @@ func TestCreateFromFile(t *testing.T) { createFromFile, ctx := newTestCreateFromFile(t, logrus.NewEntry(logger), mhc) require.Equal(t, "create-from-file", createFromFile.Name) require.Len(t, createFromFile.Flags, 9) require.Len(t, createFromFile.Flags, 10) err := createFromFile.Run(ctx) require.NoError(t, err) Loading Loading @@ -151,6 +151,32 @@ func TestCreateMilestonesAndReleasedAt(t *testing.T) { } } func TestCreateCatalogPublish(t *testing.T) { logger, _ := testlog.NewNullLogger() tests := []struct { name string extraArgs []string }{ { name: "catalog_publish_true", extraArgs: []string{"--catalog-publish"}, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { mhc := gitlab.MockHTTPClient{} mhc.On("Do", mock.Anything).Return(testdata.Responses[testdata.ResponseCreateReleaseSuccess](), nil).Once() defer mhc.AssertExpectations(t) create, ctx := newTestCreate(t, logrus.NewEntry(logger), &mhc, tt.extraArgs...) err := create.Run(ctx) require.NoError(t, err) }) } } func TestGetDescription(t *testing.T) { chdirSet := false chdir := testhelpers.ChdirInPath(t, "../", &chdirSet) Loading Loading @@ -211,6 +237,8 @@ func Test_newCreateReleaseReq(t *testing.T) { rat, err := gitlab.ParseDateTime("2019-01-03T01:55:18.203Z") require.NoError(t, err) trueVal := true baseCRR := gitlab.CreateReleaseRequest{ ID: "", Name: "name", Loading Loading @@ -284,6 +312,19 @@ func Test_newCreateReleaseReq(t *testing.T) { crr.TagMessage = "" }), }, { name: "with_catalog_publish", args: []string{ "--catalog-publish", }, expected: newTestCreateReleaseRequest(baseCRR, func(crr *gitlab.CreateReleaseRequest) { crr.LegacyCatalogPublish = &trueVal crr.Assets = nil crr.Milestones = make([]string, 0) crr.ReleasedAt = nil crr.TagMessage = "" }), }, } for _, tt := range tests { Loading Loading @@ -321,6 +362,7 @@ func getFlagSet(t *testing.T, args ...string) *flag.FlagSet { set.String(flags.TagMessage, "", "") set.String(flags.Ref, "", "") set.String(flags.ReleasedAt, "", "") set.Bool(flags.CatalogPublish, false, "") err := set.Parse(args) require.NoError(t, err) Loading
internal/flags/const.go +2 −0 Original line number Diff line number Diff line Loading @@ -37,4 +37,6 @@ const ( InsecureHTTPS = "insecure-https" // IncludeHTMLDescription flag IncludeHTMLDescription = "include-html-description" // CatalogPublish available in the CLI context CatalogPublish = "catalog-publish" )
internal/flags/create_flags.go +11 −0 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ func (ParameterFlag) ListFlags() *[]cli.Flag { assetsLinkFlag(false), milestoneFlag(false), releasedAtFlag(false), catalogPublishFlag(false), } } Loading @@ -51,6 +52,7 @@ func (FileFlag) ListFlags() *[]cli.Flag { altsrc.NewStringSliceFlag(assetsLinkFlag(true)), altsrc.NewStringSliceFlag(milestoneFlag(true)), altsrc.NewStringFlag(releasedAtFlag(true)), altsrc.NewBoolFlag(catalogPublishFlag(true)), &cli.StringFlag{ Name: File, Usage: `YML file which content holds data to create a release. Does not need use of any other parameters.`, Loading Loading @@ -132,3 +134,12 @@ func releasedAtFlag(hidden bool) *cli.StringFlag { Hidden: hidden, } } func catalogPublishFlag(hidden bool) *cli.BoolFlag { return &cli.BoolFlag{ Name: CatalogPublish, Usage: `Set to true if you want to publish the catalog resource release to the CI/CD catalog`, Required: false, Hidden: hidden, } }
internal/gitlab/release.go +10 −9 Original line number Diff line number Diff line Loading @@ -87,6 +87,7 @@ type CreateReleaseRequest struct { Assets *Assets `json:"assets,omitempty"` Milestones []string `json:"milestones,omitempty"` ReleasedAt *time.Time `json:"released_at,omitempty"` LegacyCatalogPublish *bool `json:"legacy_catalog_publish,omitempty"` } // UpdateReleaseRequest body. Loading