-
Notifications
You must be signed in to change notification settings - Fork 11
/
create_opts.go
82 lines (67 loc) · 2.91 KB
/
create_opts.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
package create
import (
"fmt"
"github.com/OctopusDeploy/cli/pkg/cmd"
projectConvert "github.com/OctopusDeploy/cli/pkg/cmd/project/convert"
"github.com/OctopusDeploy/cli/pkg/cmd/project/shared"
"github.com/OctopusDeploy/cli/pkg/output"
"github.com/OctopusDeploy/cli/pkg/util/flag"
"github.com/OctopusDeploy/go-octopusdeploy/v2/pkg/projectgroups"
"github.com/OctopusDeploy/go-octopusdeploy/v2/pkg/projects"
)
type ConvertProjectToConfigAsCodeCallback func() (cmd.Dependable, error)
type GetAllGroupsCallback func() ([]*projectgroups.ProjectGroup, error)
type CreateOptions struct {
*CreateFlags
*cmd.Dependencies
*projectConvert.ConvertOptions
GetAllGroupsCallback shared.GetAllGroupsCallback
CreateProjectGroupCallback shared.CreateProjectGroupCallback
ConvertProjectCallback ConvertProjectToConfigAsCodeCallback
}
func NewCreateOptions(createFlags *CreateFlags, dependencies *cmd.Dependencies) *CreateOptions {
convertOptions := projectConvert.NewConvertOptions(createFlags.ProjectConvertFlags, dependencies)
return &CreateOptions{
CreateFlags: createFlags,
Dependencies: dependencies,
ConvertOptions: convertOptions,
GetAllGroupsCallback: func() ([]*projectgroups.ProjectGroup, error) { return shared.GetAllGroups(*dependencies.Client) },
CreateProjectGroupCallback: func() (string, cmd.Dependable, error) { return shared.CreateProjectGroup(dependencies) },
ConvertProjectCallback: func() (cmd.Dependable, error) { return convertProjectCallback(convertOptions) },
}
}
func convertProjectCallback(opts *projectConvert.ConvertOptions) (cmd.Dependable, error) {
flags := opts.ConvertFlags
deps := cmd.NewDependenciesFromExisting(opts.Dependencies, "octopus project convert")
convertOpts := projectConvert.NewConvertOptions(flags, deps)
return projectConvert.PromptForConfigAsCode(convertOpts)
}
func (co *CreateOptions) Commit() error {
lifecycle, err := co.Client.Lifecycles.GetByIDOrName(co.Lifecycle.Value)
if err != nil {
return err
}
projectGroup, err := co.Client.ProjectGroups.GetByIDOrName(co.Group.Value)
if err != nil {
return err
}
project := projects.NewProject(co.Name.Value, lifecycle.GetID(), projectGroup.GetID())
project.Description = co.Description.Value
createdProject, err := co.Client.Projects.Add(project)
if err != nil {
return err
}
_, err = fmt.Fprintf(co.Out, "\nSuccessfully created project '%s' (%s), with lifecycle '%s' in project group '%s'.\n", createdProject.Name, createdProject.Slug, co.Lifecycle.Value, co.Group.Value)
if err != nil {
return err
}
link := output.Bluef("%s/app#/%s/projects/%s", co.Host, co.Space.GetID(), createdProject.GetID())
fmt.Fprintf(co.Out, "View this project on Octopus Deploy: %s\n", link)
return nil
}
func (co *CreateOptions) GenerateAutomationCmd() {
if !co.NoPrompt {
autoCmd := flag.GenerateAutomationCmd(co.CmdPath, co.Name, co.Description, co.Group, co.Lifecycle)
fmt.Fprintf(co.Out, "%s\n", autoCmd)
}
}