diff --git a/cli/templatepush.go b/cli/templatepush.go index 3657394cb2a7a..684eac23e3e66 100644 --- a/cli/templatepush.go +++ b/cli/templatepush.go @@ -115,6 +115,7 @@ func (r *RootCmd) templatePush() *clibase.Cmd { alwaysPrompt bool provisionerTags []string uploadFlags templateUploadFlags + activate bool ) client := new(codersdk.Client) cmd := &clibase.Cmd{ @@ -172,11 +173,13 @@ func (r *RootCmd) templatePush() *clibase.Cmd { return xerrors.Errorf("job failed: %s", job.Job.Status) } - err = client.UpdateActiveTemplateVersion(inv.Context(), template.ID, codersdk.UpdateActiveTemplateVersion{ - ID: job.ID, - }) - if err != nil { - return err + if activate { + err = client.UpdateActiveTemplateVersion(inv.Context(), template.ID, codersdk.UpdateActiveTemplateVersion{ + ID: job.ID, + }) + if err != nil { + return err + } } _, _ = fmt.Fprintf(inv.Stdout, "Updated version at %s!\n", cliui.Styles.DateTimeStamp.Render(time.Now().Format(time.Stamp))) @@ -226,6 +229,12 @@ func (r *RootCmd) templatePush() *clibase.Cmd { Description: "Always prompt all parameters. Does not pull parameter values from active template version.", Value: clibase.BoolOf(&alwaysPrompt), }, + { + Flag: "activate", + Description: "Whether the new template will be marked active.", + Default: "true", + Value: clibase.BoolOf(&activate), + }, cliui.SkipPromptOption(), uploadFlags.option(), } diff --git a/cli/templatepush_test.go b/cli/templatepush_test.go index 8a206de160445..82b0fd51980d1 100644 --- a/cli/templatepush_test.go +++ b/cli/templatepush_test.go @@ -69,6 +69,48 @@ func TestTemplatePush(t *testing.T) { require.Equal(t, "example", templateVersions[1].Name) }) + t.Run("PushInactiveTemplateVersion", func(t *testing.T) { + t.Parallel() + client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true}) + user := coderdtest.CreateFirstUser(t, client) + version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil) + _ = coderdtest.AwaitTemplateVersionJob(t, client, version.ID) + + template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID) + + // Test the cli command. + source := clitest.CreateTemplateVersionSource(t, &echo.Responses{ + Parse: echo.ParseComplete, + ProvisionApply: echo.ProvisionComplete, + }) + inv, root := clitest.New(t, "templates", "push", template.Name, "--activate=false", "--directory", source, "--test.provisioner", string(database.ProvisionerTypeEcho), "--name", "example") + clitest.SetupConfig(t, client, root) + pty := ptytest.New(t).Attach(inv) + w := clitest.StartWithWaiter(t, inv) + + matches := []struct { + match string + write string + }{ + {match: "Upload", write: "yes"}, + } + for _, m := range matches { + pty.ExpectMatch(m.match) + pty.WriteLine(m.write) + } + + w.RequireSuccess() + + // Assert that the template version didn't change. + templateVersions, err := client.TemplateVersionsByTemplate(context.Background(), codersdk.TemplateVersionsByTemplateRequest{ + TemplateID: template.ID, + }) + require.NoError(t, err) + assert.Len(t, templateVersions, 2) + assert.Equal(t, template.ActiveVersionID, templateVersions[0].ID) + require.NotEqual(t, "example", templateVersions[0].Name) + }) + t.Run("UseWorkingDir", func(t *testing.T) { t.Parallel() diff --git a/cli/testdata/coder_templates_push_--help.golden b/cli/testdata/coder_templates_push_--help.golden index 6f5e82d9f208c..c544ecc341f60 100644 --- a/cli/testdata/coder_templates_push_--help.golden +++ b/cli/testdata/coder_templates_push_--help.golden @@ -3,6 +3,9 @@ Usage: coder templates push [flags] [template] Push a new template version from the current directory or as specified by flag Options + --activate bool (default: true) + Whether the new template will be marked active. + --always-prompt bool Always prompt all parameters. Does not pull parameter values from active template version. diff --git a/docs/cli/templates_push.md b/docs/cli/templates_push.md index ddbd1250823c1..b3762a641eb56 100644 --- a/docs/cli/templates_push.md +++ b/docs/cli/templates_push.md @@ -12,6 +12,15 @@ coder templates push [flags] [template] ## Options +### --activate + +| | | +| ------- | ----------------- | +| Type | bool | +| Default | true | + +Whether the new template will be marked active. + ### --always-prompt | | |