Commit 33acd1e3 authored by Vladimir Shushlin's avatar Vladimir Shushlin 👆
Browse files

Merge branch 'catalog-publish-option' into 'master'

Add --catalog-publish argument

See merge request !170



Merged-by: Vladimir Shushlin's avatarVladimir Shushlin <vshushlin@gitlab.com>
Approved-by: Vladimir Shushlin's avatarVladimir Shushlin <vshushlin@gitlab.com>
Reviewed-by: default avatarFurkan Ayhan <furkanayhn@gmail.com>
Reviewed-by: Fabio Pitino's avatarFabio Pitino <fpitino@gitlab.com>
Reviewed-by: Vladimir Shushlin's avatarVladimir Shushlin <vshushlin@gitlab.com>
Co-authored-by: default avatarFurkan Ayhan <furkanayhn@gmail.com>
parents bdc25aaf 5b71b002
Loading
Loading
Loading
Loading
Loading
+25 −15
Original line number Diff line number Diff line
@@ -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...")
@@ -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 {
@@ -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),
@@ -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 != "" {
+44 −2
Original line number Diff line number Diff line
@@ -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)
@@ -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)
@@ -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)
@@ -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",
@@ -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 {
@@ -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)
+2 −0
Original line number Diff line number Diff line
@@ -37,4 +37,6 @@ const (
	InsecureHTTPS = "insecure-https"
	// IncludeHTMLDescription flag
	IncludeHTMLDescription = "include-html-description"
	// CatalogPublish available in the CLI context
	CatalogPublish = "catalog-publish"
)
+11 −0
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ func (ParameterFlag) ListFlags() *[]cli.Flag {
		assetsLinkFlag(false),
		milestoneFlag(false),
		releasedAtFlag(false),
		catalogPublishFlag(false),
	}
}

@@ -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.`,
@@ -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,
	}
}
+10 −9
Original line number Diff line number Diff line
@@ -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