diff --git a/cli/clitest/clitest.go b/cli/clitest/clitest.go index f696ca0d98..5e0e38b771 100644 --- a/cli/clitest/clitest.go +++ b/cli/clitest/clitest.go @@ -36,9 +36,9 @@ func SetupConfig(t *testing.T, client *codersdk.Client, root config.Root) { require.NoError(t, err) } -// CreateProjectVersionSource writes the echo provisioner responses into a +// CreateTemplateVersionSource writes the echo provisioner responses into a // new temporary testing directory. -func CreateProjectVersionSource(t *testing.T, responses *echo.Responses) string { +func CreateTemplateVersionSource(t *testing.T, responses *echo.Responses) string { directory := t.TempDir() data, err := echo.Tar(responses) require.NoError(t, err) diff --git a/cli/clitest/clitest_test.go b/cli/clitest/clitest_test.go index 57c1173ea3..a71c220783 100644 --- a/cli/clitest/clitest_test.go +++ b/cli/clitest/clitest_test.go @@ -17,7 +17,7 @@ func TestMain(m *testing.M) { func TestCli(t *testing.T) { t.Parallel() - clitest.CreateProjectVersionSource(t, nil) + clitest.CreateTemplateVersionSource(t, nil) client := coderdtest.New(t, nil) cmd, config := clitest.New(t) clitest.SetupConfig(t, client, config) diff --git a/cli/cliui/parameter.go b/cli/cliui/parameter.go index 99e98664c9..2859d2b24d 100644 --- a/cli/cliui/parameter.go +++ b/cli/cliui/parameter.go @@ -10,7 +10,7 @@ import ( "github.com/coder/coder/codersdk" ) -func ParameterSchema(cmd *cobra.Command, parameterSchema codersdk.ProjectVersionParameterSchema) (string, error) { +func ParameterSchema(cmd *cobra.Command, parameterSchema codersdk.TemplateVersionParameterSchema) (string, error) { _, _ = fmt.Fprintln(cmd.OutOrStdout(), Styles.Bold.Render("var."+parameterSchema.Name)) if parameterSchema.Description != "" { _, _ = fmt.Fprintln(cmd.OutOrStdout(), " "+strings.TrimSpace(strings.Join(strings.Split(parameterSchema.Description, "\n"), "\n "))+"\n") diff --git a/cli/configssh_test.go b/cli/configssh_test.go index ae9e95f7e5..662275f297 100644 --- a/cli/configssh_test.go +++ b/cli/configssh_test.go @@ -19,10 +19,10 @@ func TestConfigSSH(t *testing.T) { client := coderdtest.New(t, nil) user := coderdtest.CreateFirstUser(t, client) coderdtest.NewProvisionerDaemon(t, client) - version := coderdtest.CreateProjectVersion(t, client, user.OrganizationID, nil) - coderdtest.AwaitProjectVersionJob(t, client, version.ID) - project := coderdtest.CreateProject(t, client, user.OrganizationID, version.ID) - workspace := coderdtest.CreateWorkspace(t, client, codersdk.Me, project.ID) + version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil) + coderdtest.AwaitTemplateVersionJob(t, client, version.ID) + template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID) + workspace := coderdtest.CreateWorkspace(t, client, codersdk.Me, template.ID) coderdtest.AwaitWorkspaceBuildJob(t, client, workspace.LatestBuild.ID) tempFile, err := os.CreateTemp(t.TempDir(), "") require.NoError(t, err) diff --git a/cli/login.go b/cli/login.go index eddf14284b..49729a605c 100644 --- a/cli/login.go +++ b/cli/login.go @@ -150,7 +150,7 @@ func login() *cobra.Command { cliui.Styles.Paragraph.Render(fmt.Sprintf("Welcome to Coder, %s! You're authenticated.", cliui.Styles.Keyword.Render(username)))+"\n") _, _ = fmt.Fprintf(cmd.OutOrStdout(), - cliui.Styles.Paragraph.Render("Get started by creating a project: "+cliui.Styles.Code.Render("coder projects create"))+"\n") + cliui.Styles.Paragraph.Render("Get started by creating a template: "+cliui.Styles.Code.Render("coder templates create"))+"\n") return nil } diff --git a/cli/parameters.go b/cli/parameters.go index 67434813bb..4843552d50 100644 --- a/cli/parameters.go +++ b/cli/parameters.go @@ -39,12 +39,12 @@ func parseScopeAndID(ctx context.Context, client *codersdk.Client, organization } scopeID = org.ID } - case codersdk.ParameterProject: - project, err := client.ProjectByName(ctx, organization.ID, name) + case codersdk.ParameterTemplate: + template, err := client.TemplateByName(ctx, organization.ID, name) if err != nil { return scope, uuid.Nil, err } - scopeID = project.ID + scopeID = template.ID case codersdk.ParameterUser: uid, _ := uuid.Parse(name) user, err := client.User(ctx, uid) @@ -67,8 +67,8 @@ func parseParameterScope(scope string) (codersdk.ParameterScope, error) { switch scope { case string(codersdk.ParameterOrganization): return codersdk.ParameterOrganization, nil - case string(codersdk.ParameterProject): - return codersdk.ParameterProject, nil + case string(codersdk.ParameterTemplate): + return codersdk.ParameterTemplate, nil case string(codersdk.ParameterUser): return codersdk.ParameterUser, nil case string(codersdk.ParameterWorkspace): diff --git a/cli/root.go b/cli/root.go index 65003b56fb..9f44fefbb5 100644 --- a/cli/root.go +++ b/cli/root.go @@ -43,9 +43,9 @@ func Root() *cobra.Command { Example: cliui.Styles.Paragraph.Render(`Start Coder in "dev" mode. This dev-mode requires no further setup, and your local `+cliui.Styles.Code.Render("coder")+` CLI will be authenticated to talk to it. This makes it easy to experiment with Coder.`) + ` ` + cliui.Styles.Code.Render("$ coder start --dev") + ` - ` + cliui.Styles.Paragraph.Render("Get started by creating a project from an example.") + ` + ` + cliui.Styles.Paragraph.Render("Get started by creating a template from an example.") + ` - ` + cliui.Styles.Code.Render("$ coder projects init"), + ` + cliui.Styles.Code.Render("$ coder templates init"), } // Customizes the color of headings to make subcommands // more visually appealing. @@ -65,7 +65,7 @@ func Root() *cobra.Command { start(), login(), parameters(), - projects(), + templates(), users(), workspaces(), ssh(), diff --git a/cli/ssh_test.go b/cli/ssh_test.go index 4b2a725e91..cc192150fd 100644 --- a/cli/ssh_test.go +++ b/cli/ssh_test.go @@ -31,7 +31,7 @@ func TestSSH(t *testing.T) { user := coderdtest.CreateFirstUser(t, client) coderdtest.NewProvisionerDaemon(t, client) agentToken := uuid.NewString() - version := coderdtest.CreateProjectVersion(t, client, user.OrganizationID, &echo.Responses{ + version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{ Parse: echo.ParseComplete, ProvisionDryRun: echo.ProvisionComplete, Provision: []*proto.Provision_Response{{ @@ -51,9 +51,9 @@ func TestSSH(t *testing.T) { }, }}, }) - coderdtest.AwaitProjectVersionJob(t, client, version.ID) - project := coderdtest.CreateProject(t, client, user.OrganizationID, version.ID) - workspace := coderdtest.CreateWorkspace(t, client, codersdk.Me, project.ID) + coderdtest.AwaitTemplateVersionJob(t, client, version.ID) + template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID) + workspace := coderdtest.CreateWorkspace(t, client, codersdk.Me, template.ID) go func() { // Run this async so the SSH command has to wait for // the build and agent to connect! @@ -89,7 +89,7 @@ func TestSSH(t *testing.T) { user := coderdtest.CreateFirstUser(t, client) coderdtest.NewProvisionerDaemon(t, client) agentToken := uuid.NewString() - version := coderdtest.CreateProjectVersion(t, client, user.OrganizationID, &echo.Responses{ + version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{ Parse: echo.ParseComplete, ProvisionDryRun: echo.ProvisionComplete, Provision: []*proto.Provision_Response{{ @@ -109,9 +109,9 @@ func TestSSH(t *testing.T) { }, }}, }) - coderdtest.AwaitProjectVersionJob(t, client, version.ID) - project := coderdtest.CreateProject(t, client, user.OrganizationID, version.ID) - workspace := coderdtest.CreateWorkspace(t, client, codersdk.Me, project.ID) + coderdtest.AwaitTemplateVersionJob(t, client, version.ID) + template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID) + workspace := coderdtest.CreateWorkspace(t, client, codersdk.Me, template.ID) go func() { // Run this async so the SSH command has to wait for // the build and agent to connect! diff --git a/cli/start.go b/cli/start.go index 43876f0a6d..5b438db4a3 100644 --- a/cli/start.go +++ b/cli/start.go @@ -217,7 +217,7 @@ func start() *cobra.Command { cliui.Styles.Field.Render("dev")+` mode. All data is in-memory! Do not use in production. Press `+cliui.Styles.Field.Render("ctrl+c")+` to clean up provisioned infrastructure.`))+ ` `+ - cliui.Styles.Paragraph.Render(cliui.Styles.Wrap.Render(cliui.Styles.Prompt.String()+`Run `+cliui.Styles.Code.Render("coder projects init")+" in a new terminal to get started.\n"))+` + cliui.Styles.Paragraph.Render(cliui.Styles.Wrap.Render(cliui.Styles.Prompt.String()+`Run `+cliui.Styles.Code.Render("coder templates init")+" in a new terminal to get started.\n"))+` `) } else { // This is helpful for tests, but can be silently ignored. diff --git a/cli/start_test.go b/cli/start_test.go index 285457a2a3..78ac0c86b5 100644 --- a/cli/start_test.go +++ b/cli/start_test.go @@ -187,10 +187,10 @@ func TestStart(t *testing.T) { coderdtest.NewProvisionerDaemon(t, client) // Create a workspace so the cleanup occurs! - version := coderdtest.CreateProjectVersion(t, client, orgs[0].ID, nil) - coderdtest.AwaitProjectVersionJob(t, client, version.ID) - project := coderdtest.CreateProject(t, client, orgs[0].ID, version.ID) - workspace := coderdtest.CreateWorkspace(t, client, codersdk.Me, project.ID) + version := coderdtest.CreateTemplateVersion(t, client, orgs[0].ID, nil) + coderdtest.AwaitTemplateVersionJob(t, client, version.ID) + template := coderdtest.CreateTemplate(t, client, orgs[0].ID, version.ID) + workspace := coderdtest.CreateWorkspace(t, client, codersdk.Me, template.ID) coderdtest.AwaitWorkspaceBuildJob(t, client, workspace.LatestBuild.ID) require.NoError(t, err) diff --git a/cli/projectcreate.go b/cli/templatecreate.go similarity index 66% rename from cli/projectcreate.go rename to cli/templatecreate.go index 065c325388..5d9ece4c3e 100644 --- a/cli/projectcreate.go +++ b/cli/templatecreate.go @@ -20,7 +20,7 @@ import ( "github.com/coder/coder/provisionersdk" ) -func projectCreate() *cobra.Command { +func templateCreate() *cobra.Command { var ( yes bool directory string @@ -28,7 +28,7 @@ func projectCreate() *cobra.Command { ) cmd := &cobra.Command{ Use: "create [name]", - Short: "Create a project from the current directory", + Short: "Create a template from the current directory", RunE: func(cmd *cobra.Command, args []string) error { client, err := createClient(cmd) if err != nil { @@ -39,15 +39,15 @@ func projectCreate() *cobra.Command { return err } - var projectName string + var templateName string if len(args) == 0 { - projectName = filepath.Base(directory) + templateName = filepath.Base(directory) } else { - projectName = args[0] + templateName = args[0] } - _, err = client.ProjectByName(cmd.Context(), organization.ID, projectName) + _, err = client.TemplateByName(cmd.Context(), organization.ID, templateName) if err == nil { - return xerrors.Errorf("A project already exists named %q!", projectName) + return xerrors.Errorf("A template already exists named %q!", templateName) } spin := spinner.New(spinner.CharSets[5], 100*time.Millisecond) @@ -69,14 +69,14 @@ func projectCreate() *cobra.Command { spin = spinner.New(spinner.CharSets[5], 100*time.Millisecond) spin.Writer = cmd.OutOrStdout() spin.Suffix = cliui.Styles.Keyword.Render("Something") - job, parameters, err := createValidProjectVersion(cmd, client, organization, database.ProvisionerType(provisioner), resp.Hash) + job, parameters, err := createValidTemplateVersion(cmd, client, organization, database.ProvisionerType(provisioner), resp.Hash) if err != nil { return err } if !yes { _, err = cliui.Prompt(cmd, cliui.PromptOptions{ - Text: "Create project?", + Text: "Create template?", IsConfirm: true, Default: "yes", }) @@ -88,8 +88,8 @@ func projectCreate() *cobra.Command { } } - _, err = client.CreateProject(cmd.Context(), organization.ID, codersdk.CreateProjectRequest{ - Name: projectName, + _, err = client.CreateTemplate(cmd.Context(), organization.ID, codersdk.CreateTemplateRequest{ + Name: templateName, VersionID: job.ID, ParameterValues: parameters, }) @@ -97,7 +97,7 @@ func projectCreate() *cobra.Command { return err } - _, _ = fmt.Fprintf(cmd.OutOrStdout(), "The %s project has been created!\n", projectName) + _, _ = fmt.Fprintf(cmd.OutOrStdout(), "The %s template has been created!\n", templateName) return nil }, } @@ -113,9 +113,9 @@ func projectCreate() *cobra.Command { return cmd } -func createValidProjectVersion(cmd *cobra.Command, client *codersdk.Client, organization codersdk.Organization, provisioner database.ProvisionerType, hash string, parameters ...codersdk.CreateParameterRequest) (*codersdk.ProjectVersion, []codersdk.CreateParameterRequest, error) { +func createValidTemplateVersion(cmd *cobra.Command, client *codersdk.Client, organization codersdk.Organization, provisioner database.ProvisionerType, hash string, parameters ...codersdk.CreateParameterRequest) (*codersdk.TemplateVersion, []codersdk.CreateParameterRequest, error) { before := time.Now() - version, err := client.CreateProjectVersion(cmd.Context(), organization.ID, codersdk.CreateProjectVersionRequest{ + version, err := client.CreateTemplateVersion(cmd.Context(), organization.ID, codersdk.CreateTemplateVersionRequest{ StorageMethod: database.ProvisionerStorageMethodFile, StorageSource: hash, Provisioner: provisioner, @@ -127,14 +127,14 @@ func createValidProjectVersion(cmd *cobra.Command, client *codersdk.Client, orga err = cliui.ProvisionerJob(cmd.Context(), cmd.OutOrStdout(), cliui.ProvisionerJobOptions{ Fetch: func() (codersdk.ProvisionerJob, error) { - version, err := client.ProjectVersion(cmd.Context(), version.ID) + version, err := client.TemplateVersion(cmd.Context(), version.ID) return version.Job, err }, Cancel: func() error { - return client.CancelProjectVersion(cmd.Context(), version.ID) + return client.CancelTemplateVersion(cmd.Context(), version.ID) }, Logs: func() (<-chan codersdk.ProvisionerJobLog, error) { - return client.ProjectVersionLogsAfter(cmd.Context(), version.ID, before) + return client.TemplateVersionLogsAfter(cmd.Context(), version.ID, before) }, }) if err != nil { @@ -142,28 +142,28 @@ func createValidProjectVersion(cmd *cobra.Command, client *codersdk.Client, orga return nil, nil, err } } - version, err = client.ProjectVersion(cmd.Context(), version.ID) + version, err = client.TemplateVersion(cmd.Context(), version.ID) if err != nil { return nil, nil, err } - parameterSchemas, err := client.ProjectVersionSchema(cmd.Context(), version.ID) + parameterSchemas, err := client.TemplateVersionSchema(cmd.Context(), version.ID) if err != nil { return nil, nil, err } - parameterValues, err := client.ProjectVersionParameters(cmd.Context(), version.ID) + parameterValues, err := client.TemplateVersionParameters(cmd.Context(), version.ID) if err != nil { return nil, nil, err } if provisionerd.IsMissingParameterError(version.Job.Error) { - valuesBySchemaID := map[string]codersdk.ProjectVersionParameter{} + valuesBySchemaID := map[string]codersdk.TemplateVersionParameter{} for _, parameterValue := range parameterValues { valuesBySchemaID[parameterValue.SchemaID.String()] = parameterValue } sort.Slice(parameterSchemas, func(i, j int) bool { return parameterSchemas[i].Name < parameterSchemas[j].Name }) - missingSchemas := make([]codersdk.ProjectVersionParameterSchema, 0) + missingSchemas := make([]codersdk.TemplateVersionParameterSchema, 0) for _, parameterSchema := range parameterSchemas { _, ok := valuesBySchemaID[parameterSchema.ID.String()] if ok { @@ -171,7 +171,7 @@ func createValidProjectVersion(cmd *cobra.Command, client *codersdk.Client, orga } missingSchemas = append(missingSchemas, parameterSchema) } - _, _ = fmt.Fprintln(cmd.OutOrStdout(), cliui.Styles.Paragraph.Render("This project has required variables! They are scoped to the project, and not viewable after being set.")+"\r\n") + _, _ = fmt.Fprintln(cmd.OutOrStdout(), cliui.Styles.Paragraph.Render("This template has required variables! They are scoped to the template, and not viewable after being set.")+"\r\n") for _, parameterSchema := range missingSchemas { value, err := cliui.ParameterSchema(cmd, parameterSchema) if err != nil { @@ -185,18 +185,18 @@ func createValidProjectVersion(cmd *cobra.Command, client *codersdk.Client, orga }) _, _ = fmt.Fprintln(cmd.OutOrStdout()) } - return createValidProjectVersion(cmd, client, organization, provisioner, hash, parameters...) + return createValidTemplateVersion(cmd, client, organization, provisioner, hash, parameters...) } if version.Job.Status != codersdk.ProvisionerJobSucceeded { return nil, nil, xerrors.New(version.Job.Error) } - _, _ = fmt.Fprintf(cmd.OutOrStdout(), cliui.Styles.Checkmark.String()+" Successfully imported project source!\n") + _, _ = fmt.Fprintf(cmd.OutOrStdout(), cliui.Styles.Checkmark.String()+" Successfully imported template source!\n") - resources, err := client.ProjectVersionResources(cmd.Context(), version.ID) + resources, err := client.TemplateVersionResources(cmd.Context(), version.ID) if err != nil { return nil, nil, err } - return &version, parameters, displayProjectVersionInfo(cmd, resources) + return &version, parameters, displayTemplateVersionInfo(cmd, resources) } diff --git a/cli/projectcreate_test.go b/cli/templatecreate_test.go similarity index 77% rename from cli/projectcreate_test.go rename to cli/templatecreate_test.go index e0639de638..7fce2d80d5 100644 --- a/cli/projectcreate_test.go +++ b/cli/templatecreate_test.go @@ -12,17 +12,17 @@ import ( "github.com/coder/coder/pty/ptytest" ) -func TestProjectCreate(t *testing.T) { +func TestTemplateCreate(t *testing.T) { t.Parallel() t.Run("Create", func(t *testing.T) { t.Parallel() client := coderdtest.New(t, nil) coderdtest.CreateFirstUser(t, client) - source := clitest.CreateProjectVersionSource(t, &echo.Responses{ + source := clitest.CreateTemplateVersionSource(t, &echo.Responses{ Parse: echo.ParseComplete, Provision: echo.ProvisionComplete, }) - cmd, root := clitest.New(t, "projects", "create", "my-project", "--directory", source, "--provisioner", string(database.ProvisionerTypeEcho)) + cmd, root := clitest.New(t, "templates", "create", "my-template", "--directory", source, "--provisioner", string(database.ProvisionerTypeEcho)) clitest.SetupConfig(t, client, root) _ = coderdtest.NewProvisionerDaemon(t, client) doneChan := make(chan struct{}) @@ -35,7 +35,7 @@ func TestProjectCreate(t *testing.T) { require.NoError(t, err) }() matches := []string{ - "Create project?", "yes", + "Create template?", "yes", } for i := 0; i < len(matches); i += 2 { match := matches[i] diff --git a/cli/projectedit.go b/cli/templateedit.go similarity index 81% rename from cli/projectedit.go rename to cli/templateedit.go index 21d0094f0d..12e4ccabb7 100644 --- a/cli/projectedit.go +++ b/cli/templateedit.go @@ -2,7 +2,7 @@ package cli import "github.com/spf13/cobra" -func projectEdit() *cobra.Command { +func templateEdit() *cobra.Command { return &cobra.Command{ Use: "edit", RunE: func(cmd *cobra.Command, args []string) error { diff --git a/cli/projectinit.go b/cli/templateinit.go similarity index 86% rename from cli/projectinit.go rename to cli/templateinit.go index a3f776f31a..603bcd87ac 100644 --- a/cli/projectinit.go +++ b/cli/templateinit.go @@ -12,10 +12,10 @@ import ( "github.com/coder/coder/provisionersdk" ) -func projectInit() *cobra.Command { +func templateInit() *cobra.Command { return &cobra.Command{ Use: "init [directory]", - Short: "Get started with a templated project.", + Short: "Get started with a templated template.", RunE: func(cmd *cobra.Command, args []string) error { exampleList, err := examples.List() if err != nil { @@ -28,7 +28,7 @@ func projectInit() *cobra.Command { exampleByName[example.Name] = example } - _, _ = fmt.Fprintln(cmd.OutOrStdout(), cliui.Styles.Wrap.Render("Projects contain Infrastructure as Code that works with Coder to provision development workspaces. Get started by selecting an example:\n")) + _, _ = fmt.Fprintln(cmd.OutOrStdout(), cliui.Styles.Wrap.Render("Templates contain Infrastructure as Code that works with Coder to provision development workspaces. Get started by selecting an example:\n")) option, err := cliui.Select(cmd, cliui.SelectOptions{ Options: exampleNames, }) @@ -66,7 +66,7 @@ func projectInit() *cobra.Command { return err } _, _ = fmt.Fprintln(cmd.OutOrStdout(), cliui.Styles.Prompt.String()+"Inside that directory, get started by running:") - _, _ = fmt.Fprintln(cmd.OutOrStdout(), cliui.Styles.Paragraph.Render(cliui.Styles.Code.Render("coder projects create"))+"\n") + _, _ = fmt.Fprintln(cmd.OutOrStdout(), cliui.Styles.Paragraph.Render(cliui.Styles.Code.Render("coder templates create"))+"\n") return nil }, } diff --git a/cli/projectinit_test.go b/cli/templateinit_test.go similarity index 85% rename from cli/projectinit_test.go rename to cli/templateinit_test.go index c550311b8a..a5fada4310 100644 --- a/cli/projectinit_test.go +++ b/cli/templateinit_test.go @@ -10,12 +10,12 @@ import ( "github.com/coder/coder/pty/ptytest" ) -func TestProjectInit(t *testing.T) { +func TestTemplateInit(t *testing.T) { t.Parallel() t.Run("Extract", func(t *testing.T) { t.Parallel() tempDir := t.TempDir() - cmd, _ := clitest.New(t, "projects", "init", tempDir) + cmd, _ := clitest.New(t, "templates", "init", tempDir) doneChan := make(chan struct{}) pty := ptytest.New(t) cmd.SetIn(pty.Input()) diff --git a/cli/projectlist.go b/cli/templatelist.go similarity index 59% rename from cli/projectlist.go rename to cli/templatelist.go index 741cea2433..410e489f15 100644 --- a/cli/projectlist.go +++ b/cli/templatelist.go @@ -9,7 +9,7 @@ import ( "github.com/spf13/cobra" ) -func projectList() *cobra.Command { +func templateList() *cobra.Command { return &cobra.Command{ Use: "list", Aliases: []string{"ls"}, @@ -23,18 +23,18 @@ func projectList() *cobra.Command { if err != nil { return err } - projects, err := client.ProjectsByOrganization(cmd.Context(), organization.ID) + templates, err := client.TemplatesByOrganization(cmd.Context(), organization.ID) if err != nil { return err } - if len(projects) == 0 { - _, _ = fmt.Fprintf(cmd.OutOrStdout(), "%s No projects found in %s! Create one:\n\n", caret, color.HiWhiteString(organization.Name)) - _, _ = fmt.Fprintln(cmd.OutOrStdout(), color.HiMagentaString(" $ coder projects create \n")) + if len(templates) == 0 { + _, _ = fmt.Fprintf(cmd.OutOrStdout(), "%s No templates found in %s! Create one:\n\n", caret, color.HiWhiteString(organization.Name)) + _, _ = fmt.Fprintln(cmd.OutOrStdout(), color.HiMagentaString(" $ coder templates create \n")) return nil } - _, _ = fmt.Fprintf(cmd.OutOrStdout(), "%s Projects found in %s %s\n\n", + _, _ = fmt.Fprintf(cmd.OutOrStdout(), "%s Templates found in %s %s\n\n", caret, color.HiWhiteString(organization.Name), color.HiBlackString("[%dms]", @@ -42,20 +42,20 @@ func projectList() *cobra.Command { writer := tabwriter.NewWriter(cmd.OutOrStdout(), 0, 0, 4, ' ', 0) _, _ = fmt.Fprintf(writer, "%s\t%s\t%s\t%s\n", - color.HiBlackString("Project"), + color.HiBlackString("Template"), color.HiBlackString("Source"), color.HiBlackString("Last Updated"), color.HiBlackString("Used By")) - for _, project := range projects { + for _, template := range templates { suffix := "" - if project.WorkspaceOwnerCount != 1 { + if template.WorkspaceOwnerCount != 1 { suffix = "s" } _, _ = fmt.Fprintf(writer, "%s\t%s\t%s\t%s\n", - color.New(color.FgHiCyan).Sprint(project.Name), + color.New(color.FgHiCyan).Sprint(template.Name), color.WhiteString("Archive"), - color.WhiteString(project.UpdatedAt.Format("January 2, 2006")), - color.New(color.FgHiWhite).Sprintf("%d developer%s", project.WorkspaceOwnerCount, suffix)) + color.WhiteString(template.UpdatedAt.Format("January 2, 2006")), + color.New(color.FgHiWhite).Sprintf("%d developer%s", template.WorkspaceOwnerCount, suffix)) } return writer.Flush() }, diff --git a/cli/projectplan.go b/cli/templateplan.go similarity index 68% rename from cli/projectplan.go rename to cli/templateplan.go index 963c02d975..f6ee868394 100644 --- a/cli/projectplan.go +++ b/cli/templateplan.go @@ -4,11 +4,11 @@ import ( "github.com/spf13/cobra" ) -func projectPlan() *cobra.Command { +func templatePlan() *cobra.Command { return &cobra.Command{ Use: "plan ", Args: cobra.MinimumNArgs(1), - Short: "Plan a project update from the current directory", + Short: "Plan a template update from the current directory", RunE: func(cmd *cobra.Command, args []string) error { return nil }, diff --git a/cli/projects.go b/cli/templates.go similarity index 68% rename from cli/projects.go rename to cli/templates.go index 5da3262768..340d000d03 100644 --- a/cli/projects.go +++ b/cli/templates.go @@ -12,37 +12,37 @@ import ( "github.com/coder/coder/codersdk" ) -func projects() *cobra.Command { +func templates() *cobra.Command { cmd := &cobra.Command{ - Use: "projects", - Aliases: []string{"project"}, + Use: "templates", + Aliases: []string{"template"}, Example: ` - - Create a project for developers to create workspaces + - Create a template for developers to create workspaces - ` + color.New(color.FgHiMagenta).Sprint("$ coder projects create") + ` + ` + color.New(color.FgHiMagenta).Sprint("$ coder templates create") + ` - - Make changes to your project, and plan the changes + - Make changes to your template, and plan the changes - ` + color.New(color.FgHiMagenta).Sprint("$ coder projects plan ") + ` + ` + color.New(color.FgHiMagenta).Sprint("$ coder templates plan ") + ` - - Update the project. Your developers can update their workspaces + - Update the template. Your developers can update their workspaces - ` + color.New(color.FgHiMagenta).Sprint("$ coder projects update "), + ` + color.New(color.FgHiMagenta).Sprint("$ coder templates update "), } cmd.AddCommand( - projectCreate(), - projectEdit(), - projectInit(), - projectList(), - projectPlan(), - projectUpdate(), - projectVersions(), + templateCreate(), + templateEdit(), + templateInit(), + templateList(), + templatePlan(), + templateUpdate(), + templateVersions(), ) return cmd } -func displayProjectVersionInfo(cmd *cobra.Command, resources []codersdk.WorkspaceResource) error { +func displayTemplateVersionInfo(cmd *cobra.Command, resources []codersdk.WorkspaceResource) error { sort.Slice(resources, func(i, j int) bool { return fmt.Sprintf("%s.%s", resources[i].Type, resources[i].Name) < fmt.Sprintf("%s.%s", resources[j].Type, resources[j].Name) }) diff --git a/cli/projectupdate.go b/cli/templateupdate.go similarity index 66% rename from cli/projectupdate.go rename to cli/templateupdate.go index 26bccd9877..cd88561bbd 100644 --- a/cli/projectupdate.go +++ b/cli/templateupdate.go @@ -14,11 +14,11 @@ import ( "github.com/coder/coder/provisionersdk" ) -func projectUpdate() *cobra.Command { +func templateUpdate() *cobra.Command { return &cobra.Command{ - Use: "update [directory]", + Use: "update