-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathgitlab_plugin.go
120 lines (95 loc) · 2.59 KB
/
gitlab_plugin.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
// This file has been created by "go generate" as initial code. go generate will never update it, EXCEPT if you remove it.
// So, update it for your need.
package main
import (
"io/ioutil"
"fmt"
"github.com/forj-oss/goforjj"
"github.com/xanzy/go-gitlab"
"gopkg.in/yaml.v2"
)
//GitlabPlugin main struct
type GitlabPlugin struct{
yaml YamlGitlab
sourcePath string
deployMount string
instance string
deployTo string
token string
group string
app *AppInstanceStruct //forjfile access
Client *gitlab.Client //gitlab client ~ api gitlab
gitlabSource GitlabSourceStruct //urls...
gitlabDeploy GitlabDeployStruct //
gitFile string
deployFile string
sourceFile string
//maintain
workspaceMount string
maintainCtxt bool
force bool
newForge bool
}
//GitlabSourceStruct (Fix inline)
type GitlabSourceStruct struct{
goforjj.PluginService `,inline` //base url
ProdGroup string `yaml:"production-group-name"` //`yaml:"production-group-name, omitempty"`
}
//GitlabDeployStruct (TODO)
type GitlabDeployStruct struct{
goforjj.PluginService `yaml:",inline"` //urls
Projects map[string]ProjectStruct // projects managed in gitlab
NoProjects bool `yaml:",omitempty"`
ProdGroup string
Group string
GroupDisplayName string
GroupId int
//...
}
const gitlabFile = "forjj-gitlab.yaml"
//YamlGitlab (TODO)
type YamlGitlab struct {
}
func newPlugin(src string) (gls *GitlabPlugin) {
gls = new(GitlabPlugin)
gls.sourcePath = src
return
}
func (gls *GitlabPlugin) initializeFrom(r *CreateReq, ret *goforjj.PluginData) (status bool) {
return true
}
func (gls *GitlabPlugin) loadFrom(ret *goforjj.PluginData) (status bool) {
return true
}
func (gls *GitlabPlugin) updateFrom(r *UpdateReq, ret *goforjj.PluginData) (status bool) {
return true
}
func (gls *GitlabPlugin) saveYaml(in interface{}, file string) (Updated bool, _ error) {
d, err := yaml.Marshal(in)
if err != nil {
return false, fmt.Errorf("Unable to encode gitlab data in yaml. %s", err)
}
if dBefore, err := ioutil.ReadFile(file); err != nil{
Updated = true
} else {
Updated = (string(d) != string(dBefore))
}
if !Updated {
return
}
if err = ioutil.WriteFile(file, d, 0644); err != nil {
return false, fmt.Errorf("Unable to save '%s'. %s", file, err)
}
return
}
func (gls *GitlabPlugin) loadYaml(file string) error {
d, err := ioutil.ReadFile(file)
if err != nil {
return fmt.Errorf("Unable to load '%s'. %s", file, err)
}
err = yaml.Unmarshal(d, &gls.gitlabDeploy)
if err != nil {
return fmt.Errorf("Unable to decode gitlab data in yaml. %s", err)
}
return nil
}