/
create_project.go
86 lines (68 loc) · 2.76 KB
/
create_project.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
/*
Copyright © 2022 NAME HERE <EMAIL ADDRESS>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package cmd
import (
"fmt"
"github.com/sirupsen/logrus"
"github.com/spf13/cobra"
)
// createProjectCmd represents the project command
var createProjectCmd = &cobra.Command{
Use: "project",
Short: "Create a new project in the group associated with the current directory",
Long: `EXAMPLE:
Let say you are in 'gitlab-automation' directory, which is associated with the
'gitlab-automation' group. And you want to create a new project named
'promotion-job' in that group.
> gitlab-tool create project -n "promotion-job" -v "internal"
* project created *
EXAMPLE:
Perhaps you want to override the group in which you are creating the new project.
> gitlab-tool create project -n "promotion-job" -v "internal" -g 5309
* project created *
`,
Run: func(cmd *cobra.Command, args []string) {
glGroup, _ := cmd.Flags().GetInt("group")
cloneAfter, _ := cmd.Flags().GetBool("clone")
projName, _ := cmd.Flags().GetString("name")
projVisibility, _ := cmd.Flags().GetString("visibility")
if glGroup > 0 && cwdGroupID > 0 && glGroup != cwdGroupID {
logrus.Warn(fmt.Sprintf("The groupID provided via --group (-g) doesn't match %d", cwdGroupID))
}
// Default to --project-id (-p) passed in
if glGroup == 0 && cwdGroupID > 0 {
glGroup = cwdGroupID
}
createProject(projName, projVisibility, glGroup, cloneAfter)
},
}
func createProject(path string, visibility string, group int, cloneAfter bool) {
newProject, err := gitClient.CreateProject(group, path, visibility)
if err != nil {
logrus.WithError(err).Error("Failed to create project")
} else {
fmt.Printf("New project %s (%d) has been created", newProject.Path, newProject.ID)
if cloneAfter {
cloneProject(path)
}
}
}
func init() {
createCmd.AddCommand(createProjectCmd)
createProjectCmd.Flags().IntP("group", "g", 0, "Specify the group to create the project in")
createProjectCmd.Flags().BoolP("clone", "c", false, "Clone the project directly after creation")
createProjectCmd.Flags().StringP("name", "n", "", "Specify the name/path of the project")
createProjectCmd.Flags().StringP("visibility", "v", "internal", "Specify the visibility of the project")
createProjectCmd.MarkFlagRequired("name")
createProjectCmd.MarkFlagRequired("visibility")
}