-
Notifications
You must be signed in to change notification settings - Fork 4
/
plugin.go
152 lines (116 loc) · 2.61 KB
/
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"github.com/jmccann/drone-artifactory/artifactory"
"github.com/sirupsen/logrus"
)
type (
// Action to perform
Action struct {
Name string `json:"action"`
RawArguments json.RawMessage
Arguments interface{}
ArgumentsFile string `json:"args_file"`
}
// Plugin struct
Plugin struct {
Actions []Action
Config artifactory.Config
}
)
// Exec run the plugin
func (p Plugin) Exec() error {
err := p.Config.Validate()
if err != nil {
return err
}
logrus.Info("Creating Client")
arti, err := artifactory.New(p.Config)
if err != nil {
return err
}
logrus.Info("Pinging Artifactory")
err = arti.Ping()
if err != nil {
return err
}
logrus.Info("Validating Actions")
for idx := range p.Actions {
err = parseArgs(&p.Actions[idx])
if err != nil {
return err
}
}
logrus.Info("Running Actions")
for _, action := range p.Actions {
err = do(arti, action)
if err != nil {
return err
}
}
return nil
}
func do(arti *artifactory.Artifactory, action Action) error {
if action.Name == "copy" {
return arti.Copy(action.Arguments.(artifactory.CopyArgs))
}
if action.Name == "delete" {
return arti.Delete(action.Arguments.(artifactory.DeleteArgs))
}
if action.Name == "set-props" {
return arti.SetProps(action.Arguments.(artifactory.PropsArgs))
}
if action.Name == "upload" {
return arti.Upload(action.Arguments.(artifactory.UploadArgs))
}
return fmt.Errorf("action '%s' not supported", action)
}
func parseArgs(action *Action) error {
var err error
args := action.RawArguments
if action.ArgumentsFile != "" {
args, err = ioutil.ReadFile(action.ArgumentsFile)
if err != nil {
return err
}
}
if action.Name == "copy" {
var copyArgs artifactory.CopyArgs
err = json.Unmarshal(args, ©Args)
if err != nil {
return err
}
action.Arguments = copyArgs
return copyArgs.Validate()
}
if action.Name == "delete" {
var deleteArgs artifactory.DeleteArgs
err = json.Unmarshal(args, &deleteArgs)
if err != nil {
return err
}
action.Arguments = deleteArgs
return deleteArgs.Validate()
}
if action.Name == "set-props" {
var propsArgs artifactory.PropsArgs
err = json.Unmarshal(args, &propsArgs)
if err != nil {
return err
}
action.Arguments = propsArgs
return propsArgs.Validate()
}
if action.Name == "upload" {
var uploadArgs artifactory.UploadArgs
err := json.Unmarshal(args, &uploadArgs)
if err != nil {
return err
}
action.Arguments = uploadArgs
return uploadArgs.Validate()
}
return fmt.Errorf("action '%s' not supported", action.Name)
}