Skip to content

Commit 28428d1

Browse files
authored
feat: Add custom version names (coder#4186)
Fixes coder#4137.
1 parent 3c215a8 commit 28428d1

7 files changed

+17
-3
lines changed

cli/templatecreate.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ func templateCreate() *cobra.Command {
144144
}
145145

146146
type createValidTemplateVersionArgs struct {
147+
Name string
147148
Client *codersdk.Client
148149
Organization codersdk.Organization
149150
Provisioner database.ProvisionerType
@@ -162,6 +163,7 @@ func createValidTemplateVersion(cmd *cobra.Command, args createValidTemplateVers
162163
client := args.Client
163164

164165
req := codersdk.CreateTemplateVersionRequest{
166+
Name: args.Name,
165167
StorageMethod: codersdk.ProvisionerStorageMethodFile,
166168
StorageSource: args.FileHash,
167169
Provisioner: codersdk.ProvisionerType(args.Provisioner),

cli/templatepush.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
func templatePush() *cobra.Command {
2020
var (
2121
directory string
22+
versionName string
2223
provisioner string
2324
parameterFile string
2425
alwaysPrompt bool
@@ -75,6 +76,7 @@ func templatePush() *cobra.Command {
7576
spin.Stop()
7677

7778
job, _, err := createValidTemplateVersion(cmd, createValidTemplateVersionArgs{
79+
Name: versionName,
7880
Client: client,
7981
Organization: organization,
8082
Provisioner: database.ProvisionerType(provisioner),
@@ -107,6 +109,7 @@ func templatePush() *cobra.Command {
107109
cmd.Flags().StringVarP(&directory, "directory", "d", currentDirectory, "Specify the directory to create from")
108110
cmd.Flags().StringVarP(&provisioner, "test.provisioner", "", "terraform", "Customize the provisioner backend")
109111
cmd.Flags().StringVarP(&parameterFile, "parameter-file", "", "", "Specify a file path with parameter values.")
112+
cmd.Flags().StringVarP(&versionName, "name", "", "", "Specify a name for the new template version. It will be automatically generated if not provided.")
110113
cmd.Flags().BoolVar(&alwaysPrompt, "always-prompt", false, "Always prompt all parameters. Does not pull parameter values from active template version")
111114
cliui.AllowSkipPrompt(cmd)
112115
// This is for testing!

cli/templatepush_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ func TestTemplatePush(t *testing.T) {
122122
Parse: echo.ParseComplete,
123123
Provision: echo.ProvisionComplete,
124124
})
125-
cmd, root := clitest.New(t, "templates", "push", template.Name, "--directory", source, "--test.provisioner", string(database.ProvisionerTypeEcho))
125+
cmd, root := clitest.New(t, "templates", "push", template.Name, "--directory", source, "--test.provisioner", string(database.ProvisionerTypeEcho), "--name", "example")
126126
clitest.SetupConfig(t, client, root)
127127
pty := ptytest.New(t)
128128
cmd.SetIn(pty.Input())
@@ -153,6 +153,7 @@ func TestTemplatePush(t *testing.T) {
153153
require.NoError(t, err)
154154
assert.Len(t, templateVersions, 2)
155155
assert.NotEqual(t, template.ActiveVersionID, templateVersions[1].ID)
156+
require.Equal(t, "example", templateVersions[1].Name)
156157
})
157158

158159
t.Run("UseWorkingDir", func(t *testing.T) {

coderd/templateversions.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -791,13 +791,17 @@ func (api *API) postTemplateVersionsByOrganization(rw http.ResponseWriter, r *ht
791791
}
792792
}
793793

794+
if req.Name == "" {
795+
req.Name = namesgenerator.GetRandomName(1)
796+
}
797+
794798
templateVersion, err = db.InsertTemplateVersion(ctx, database.InsertTemplateVersionParams{
795799
ID: uuid.New(),
796800
TemplateID: templateID,
797801
OrganizationID: organization.ID,
798802
CreatedAt: database.Now(),
799803
UpdatedAt: database.Now(),
800-
Name: namesgenerator.GetRandomName(1),
804+
Name: req.Name,
801805
Readme: "",
802806
JobID: provisionerJob.ID,
803807
CreatedBy: uuid.NullUUID{

coderd/templateversions_test.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,8 @@ func TestPostTemplateVersionsByOrganization(t *testing.T) {
9393

9494
file, err := client.Upload(ctx, codersdk.ContentTypeTar, data)
9595
require.NoError(t, err)
96-
_, err = client.CreateTemplateVersion(ctx, user.OrganizationID, codersdk.CreateTemplateVersionRequest{
96+
version, err := client.CreateTemplateVersion(ctx, user.OrganizationID, codersdk.CreateTemplateVersionRequest{
97+
Name: "bananas",
9798
StorageMethod: codersdk.ProvisionerStorageMethodFile,
9899
StorageSource: file.Hash,
99100
Provisioner: codersdk.ProvisionerTypeEcho,
@@ -105,6 +106,7 @@ func TestPostTemplateVersionsByOrganization(t *testing.T) {
105106
}},
106107
})
107108
require.NoError(t, err)
109+
require.Equal(t, "bananas", version.Name)
108110

109111
require.Len(t, auditor.AuditLogs, 1)
110112
assert.Equal(t, database.AuditActionCreate, auditor.AuditLogs[0].Action)

codersdk/organizations.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ type Organization struct {
3434

3535
// CreateTemplateVersionRequest enables callers to create a new Template Version.
3636
type CreateTemplateVersionRequest struct {
37+
Name string `json:"name,omitempty" validate:"omitempty,template_name"`
3738
// TemplateID optionally associates a version with a template.
3839
TemplateID uuid.UUID `json:"template_id,omitempty"`
3940

site/src/api/typesGenerated.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,7 @@ export interface CreateTemplateVersionDryRunRequest {
185185

186186
// From codersdk/organizations.go
187187
export interface CreateTemplateVersionRequest {
188+
readonly name?: string
188189
readonly template_id?: string
189190
readonly storage_method: ProvisionerStorageMethod
190191
readonly storage_source: string

0 commit comments

Comments
 (0)