-
Notifications
You must be signed in to change notification settings - Fork 784
/
create_git_server.go
130 lines (113 loc) · 3.03 KB
/
create_git_server.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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package cmd
import (
"fmt"
"io"
"github.com/jenkins-x/jx/pkg/jx/cmd/templates"
"github.com/jenkins-x/jx/pkg/log"
"github.com/jenkins-x/jx/pkg/util"
"github.com/spf13/cobra"
"gopkg.in/AlecAivazis/survey.v1/terminal"
)
var (
create_git_server_long = templates.LongDesc(`
Adds a new Git Server URL
`)
create_git_server_example = templates.Examples(`
# Add a new Git server
jx create git server -kind bitbucket --url http://bitbucket.org
# Add a new Git server with a name
jx create git server -k bitbucket -u http://bitbucket.org -n MyBitBucket
For more documentation see: [https://jenkins-x.io/developing/git/](https://jenkins-x.io/developing/git/)
`)
gitKindToServiceName = map[string]string{
"gitea": "gitea-gitea",
}
)
// CreateGitServerOptions the options for the create spring command
type CreateGitServerOptions struct {
CreateOptions
Name string
Kind string
URL string
}
// NewCmdCreateGitServer creates a command object for the "create" command
func NewCmdCreateGitServer(f Factory, in terminal.FileReader, out terminal.FileWriter, errOut io.Writer) *cobra.Command {
options := &CreateGitServerOptions{
CreateOptions: CreateOptions{
CommonOptions: CommonOptions{
Factory: f,
In: in,
Out: out,
Err: errOut,
},
},
}
cmd := &cobra.Command{
Use: "server kind [url]",
Short: "Creates a new Git server URL",
Aliases: []string{"provider"},
Long: create_git_server_long,
Example: create_git_server_example,
Run: func(cmd *cobra.Command, args []string) {
options.Cmd = cmd
options.Args = args
err := options.Run()
CheckErr(err)
},
}
cmd.Flags().StringVarP(&options.Name, "name", "n", "", "The name for the Git server being created")
cmd.Flags().StringVarP(&options.Kind, "kind", "k", "", "The kind of Git server being created")
cmd.Flags().StringVarP(&options.URL, "url", "u", "", "The git server URL")
return cmd
}
// Run implements the command
func (o *CreateGitServerOptions) Run() error {
args := o.Args
kind := o.Kind
if kind == "" {
if len(args) < 1 {
return util.MissingOption("kind")
}
kind = args[0]
}
name := o.Name
if name == "" {
name = kind
}
gitUrl := o.URL
if gitUrl == "" {
if len(args) > 1 {
gitUrl = args[1]
} else {
// lets try find the git URL based on the provider
serviceName := gitKindToServiceName[kind]
if serviceName != "" {
url, err := o.findService(serviceName)
if err != nil {
return fmt.Errorf("Failed to find %s Git service %s: %s", kind, serviceName, err)
}
gitUrl = url
}
}
}
if gitUrl == "" {
return util.MissingOption("url")
}
authConfigSvc, err := o.CreateGitAuthConfigService()
if err != nil {
return err
}
config := authConfigSvc.Config()
server := config.GetOrCreateServerName(gitUrl, name, kind)
config.CurrentServer = gitUrl
err = authConfigSvc.SaveConfig()
if err != nil {
return err
}
log.Infof("Added Git server %s for URL %s\n", util.ColorInfo(name), util.ColorInfo(gitUrl))
err = o.ensureGitServiceCRD(server)
if err != nil {
return err
}
return nil
}