feat: Add custom version names (#4186)

Fixes #4137.
This commit is contained in:
Kyle Carberry
2022-09-23 20:17:36 -05:00
committed by GitHub
parent 3c215a83b6
commit 28428d1294
7 changed files with 17 additions and 3 deletions

View File

@ -144,6 +144,7 @@ func templateCreate() *cobra.Command {
} }
type createValidTemplateVersionArgs struct { type createValidTemplateVersionArgs struct {
Name string
Client *codersdk.Client Client *codersdk.Client
Organization codersdk.Organization Organization codersdk.Organization
Provisioner database.ProvisionerType Provisioner database.ProvisionerType
@ -162,6 +163,7 @@ func createValidTemplateVersion(cmd *cobra.Command, args createValidTemplateVers
client := args.Client client := args.Client
req := codersdk.CreateTemplateVersionRequest{ req := codersdk.CreateTemplateVersionRequest{
Name: args.Name,
StorageMethod: codersdk.ProvisionerStorageMethodFile, StorageMethod: codersdk.ProvisionerStorageMethodFile,
StorageSource: args.FileHash, StorageSource: args.FileHash,
Provisioner: codersdk.ProvisionerType(args.Provisioner), Provisioner: codersdk.ProvisionerType(args.Provisioner),

View File

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

View File

@ -122,7 +122,7 @@ func TestTemplatePush(t *testing.T) {
Parse: echo.ParseComplete, Parse: echo.ParseComplete,
Provision: echo.ProvisionComplete, Provision: echo.ProvisionComplete,
}) })
cmd, root := clitest.New(t, "templates", "push", template.Name, "--directory", source, "--test.provisioner", string(database.ProvisionerTypeEcho)) cmd, root := clitest.New(t, "templates", "push", template.Name, "--directory", source, "--test.provisioner", string(database.ProvisionerTypeEcho), "--name", "example")
clitest.SetupConfig(t, client, root) clitest.SetupConfig(t, client, root)
pty := ptytest.New(t) pty := ptytest.New(t)
cmd.SetIn(pty.Input()) cmd.SetIn(pty.Input())
@ -153,6 +153,7 @@ func TestTemplatePush(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
assert.Len(t, templateVersions, 2) assert.Len(t, templateVersions, 2)
assert.NotEqual(t, template.ActiveVersionID, templateVersions[1].ID) assert.NotEqual(t, template.ActiveVersionID, templateVersions[1].ID)
require.Equal(t, "example", templateVersions[1].Name)
}) })
t.Run("UseWorkingDir", func(t *testing.T) { t.Run("UseWorkingDir", func(t *testing.T) {

View File

@ -791,13 +791,17 @@ func (api *API) postTemplateVersionsByOrganization(rw http.ResponseWriter, r *ht
} }
} }
if req.Name == "" {
req.Name = namesgenerator.GetRandomName(1)
}
templateVersion, err = db.InsertTemplateVersion(ctx, database.InsertTemplateVersionParams{ templateVersion, err = db.InsertTemplateVersion(ctx, database.InsertTemplateVersionParams{
ID: uuid.New(), ID: uuid.New(),
TemplateID: templateID, TemplateID: templateID,
OrganizationID: organization.ID, OrganizationID: organization.ID,
CreatedAt: database.Now(), CreatedAt: database.Now(),
UpdatedAt: database.Now(), UpdatedAt: database.Now(),
Name: namesgenerator.GetRandomName(1), Name: req.Name,
Readme: "", Readme: "",
JobID: provisionerJob.ID, JobID: provisionerJob.ID,
CreatedBy: uuid.NullUUID{ CreatedBy: uuid.NullUUID{

View File

@ -93,7 +93,8 @@ func TestPostTemplateVersionsByOrganization(t *testing.T) {
file, err := client.Upload(ctx, codersdk.ContentTypeTar, data) file, err := client.Upload(ctx, codersdk.ContentTypeTar, data)
require.NoError(t, err) require.NoError(t, err)
_, err = client.CreateTemplateVersion(ctx, user.OrganizationID, codersdk.CreateTemplateVersionRequest{ version, err := client.CreateTemplateVersion(ctx, user.OrganizationID, codersdk.CreateTemplateVersionRequest{
Name: "bananas",
StorageMethod: codersdk.ProvisionerStorageMethodFile, StorageMethod: codersdk.ProvisionerStorageMethodFile,
StorageSource: file.Hash, StorageSource: file.Hash,
Provisioner: codersdk.ProvisionerTypeEcho, Provisioner: codersdk.ProvisionerTypeEcho,
@ -105,6 +106,7 @@ func TestPostTemplateVersionsByOrganization(t *testing.T) {
}}, }},
}) })
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, "bananas", version.Name)
require.Len(t, auditor.AuditLogs, 1) require.Len(t, auditor.AuditLogs, 1)
assert.Equal(t, database.AuditActionCreate, auditor.AuditLogs[0].Action) assert.Equal(t, database.AuditActionCreate, auditor.AuditLogs[0].Action)

View File

@ -34,6 +34,7 @@ type Organization struct {
// CreateTemplateVersionRequest enables callers to create a new Template Version. // CreateTemplateVersionRequest enables callers to create a new Template Version.
type CreateTemplateVersionRequest struct { type CreateTemplateVersionRequest struct {
Name string `json:"name,omitempty" validate:"omitempty,template_name"`
// TemplateID optionally associates a version with a template. // TemplateID optionally associates a version with a template.
TemplateID uuid.UUID `json:"template_id,omitempty"` TemplateID uuid.UUID `json:"template_id,omitempty"`

View File

@ -185,6 +185,7 @@ export interface CreateTemplateVersionDryRunRequest {
// From codersdk/organizations.go // From codersdk/organizations.go
export interface CreateTemplateVersionRequest { export interface CreateTemplateVersionRequest {
readonly name?: string
readonly template_id?: string readonly template_id?: string
readonly storage_method: ProvisionerStorageMethod readonly storage_method: ProvisionerStorageMethod
readonly storage_source: string readonly storage_source: string