Commit d21c6f0f authored by Etienne Baqué's avatar Etienne Baqué
Browse files

Introduced create-from-file command

parent 8f10c231
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
@@ -90,6 +90,27 @@ OPTIONS:
   --assets-link value        JSON string representation of an asset link (or an array of asset links); (e.g. --assets-link='{"name": "Asset1", "url":"https://example.com/some/location/1", "link_type": "other", "filepath": "xzy" } or --assets-link='[{"name": "Asset1", "url":"https://example.com/some/location/1"}, {"name": "Asset2", "url":"https://example.com/some/location/2"}]')
   --milestone value          List of the titles of each milestone the release is associated with (e.g. --milestone "v1.0" --milestone "v1.0-rc)"; each milestone needs to exist
   --released-at value        The date when the release will be/was ready; defaults to the current time; expected in ISO 8601 format (2019-03-15T08:00:00Z)
   --help, -h                 Show help (default: false)
```

### Create a new release using a file

This command uses the [Create a Release](https://docs.gitlab.com/ee/api/releases/) API.

```shell
release-cli --server-url https://gitlab.com --job-token=SOME_JOB_TOKEN --project-id 12345 create-from-file help
```

The output is:

```plaintext
NAME:
   help create-from-file - Create a Release uaing GitLab's Releases API https://docs.gitlab.com/ee/api/releases/#create-a-release

USAGE:
   help create-from-file [command options] [arguments...]

OPTIONS:
   --file value               YML file which content holds data to create a release. Does not need use of any other parameters.`
   --help, -h                 Show help (default: false)
```
+1 −0
Original line number Diff line number Diff line
@@ -43,6 +43,7 @@ Get started with release-cli https://gitlab.com/gitlab-org/release-cli.`,
		},
		Commands: []*cli.Command{
			commands.Create(log, newHTTPClient),
			commands.CreateFromFile(log, newHTTPClient),
			commands.Get(log, newHTTPClient),
			commands.Update(log, newHTTPClient),
		},
+5 −5
Original line number Diff line number Diff line
@@ -152,11 +152,11 @@ func TestApp(t *testing.T) {
			args:       []string{"get"},
			wantErrStr: "Required flag \"tag-name\" not set",
		},
		// "success_with_release_file": {
		// 	res:            testdata.ResponseCreateReleaseSuccess,
		// 	args:           []string{"create", "--file", "testdata/release.yml"},
		// 	wantLogEntries: []string{"Creating Release...", "release created successfully!"},
		// },
		"success_with_release_file": {
			res:            testdata.ResponseCreateReleaseSuccess,
			args:           []string{"create-from-file", "--file", "testdata/release.yml"},
			wantLogEntries: []string{"Creating Release...", "release created successfully!"},
		},
	}

	for tn, tt := range tests {
+1 −1
Original line number Diff line number Diff line
@@ -15,7 +15,7 @@ func TestNew(t *testing.T) {

	require.NotNil(t, testApp)
	require.Equal(t, "release-cli", testApp.Name)
	require.Len(t, testApp.Commands, 3)
	require.Len(t, testApp.Commands, 4)
	require.Len(t, testApp.Flags, 8)
}

+12 −14
Original line number Diff line number Diff line
@@ -21,11 +21,19 @@ type httpClientFn func(ctx *cli.Context, log logrus.FieldLogger) (gitlab.HTTPCli

// Create defines the create command to be used by the CLI
func Create(log logrus.FieldLogger, httpClientFn httpClientFn) *cli.Command {
	createFlags := initCreateFlags()
	flagList := *createFlags.ListFlags()
	return createReleaseWithFlags(log, httpClientFn, flags.ParameterFlag{}, "create")
}

// CreateFromFile creates a release when passing in a file with data
func CreateFromFile(log logrus.FieldLogger, httpClientFn httpClientFn) *cli.Command {
	return createReleaseWithFlags(log, httpClientFn, flags.FileFlag{}, "create-from-file")
}

func createReleaseWithFlags(log logrus.FieldLogger, httpClientFn httpClientFn, flags flags.PassedInFlags, name string) *cli.Command {
	flagList := *flags.ListFlags()

	return &cli.Command{
		Name:  "create",
		Name:  name,
		Usage: "Create a Release using GitLab's Releases API https://docs.gitlab.com/ee/api/releases/#create-a-release",
		Action: func(ctx *cli.Context) error {
			client, err := httpClientFn(ctx, log)
@@ -35,7 +43,7 @@ func Create(log logrus.FieldLogger, httpClientFn httpClientFn) *cli.Command {

			return createRelease(ctx, log, client)
		},
		Before:      createFlags.BeforeHook(flagList),
		Before:      flags.BeforeHook(flagList),
		Subcommands: nil,
		Flags:       flagList,
	}
@@ -215,13 +223,3 @@ func printAllAssetsAsJSON(w io.Writer, release *gitlab.ReleaseResponse, logger l

	fmt.Fprintln(w, string(o))
}

func initCreateFlags() flags.PassedInFlags {
	for _, a := range os.Args[1:] {
		if a == "--file" {
			return flags.FileFlag{}
		}
	}

	return flags.ParameterFlag{}
}
Loading