Skip to content

Commit 449ef4d

Browse files
authored
feat(cdsctl): manage workflow label (#5028)
* feat(cdsctl): manage workflow label close #5023 Signed-off-by: Yvonnick Esnault <[email protected]>
1 parent 1de9f1f commit 449ef4d

12 files changed

+225
-32
lines changed

cli/cdsctl/admin_services.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@ import (
1111
)
1212

1313
var adminServicesCmd = cli.Command{
14-
Name: "services",
15-
Short: "Manage CDS services",
14+
Name: "services",
15+
Aliases: []string{"service"},
16+
Short: "Manage CDS services",
1617
}
1718

1819
func adminServices() *cobra.Command {

cli/cdsctl/workflow.go

+1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ func workflow() *cobra.Command {
3131
cli.NewCommand(workflowPushCmd, workflowPushRun, nil, withAllCommandModifiers()...),
3232
cli.NewCommand(workflowFavoriteCmd, workflowFavoriteRun, nil, withAllCommandModifiers()...),
3333
cli.NewGetCommand(workflowTransformAsCodeCmd, workflowTransformAsCodeRun, nil, withAllCommandModifiers()...),
34+
workflowLabel(),
3435
workflowArtifact(),
3536
workflowLog(),
3637
workflowAdvanced(),

cli/cdsctl/workflow_label.go

+84
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
package main
2+
3+
import (
4+
"github.com/spf13/cobra"
5+
6+
"github.com/ovh/cds/cli"
7+
"github.com/ovh/cds/sdk/cdsclient"
8+
)
9+
10+
var workflowLabelCmd = cli.Command{
11+
Name: "label",
12+
Aliases: []string{"labels"},
13+
Short: "Manage Workflow Label",
14+
}
15+
16+
func workflowLabel() *cobra.Command {
17+
return cli.NewCommand(workflowLabelCmd, nil, []*cobra.Command{
18+
cli.NewListCommand(workflowLabelListCmd, workflowLabelListRun, nil, withAllCommandModifiers()...),
19+
cli.NewCommand(workflowLabelAddCmd, workflowLabelAddRun, nil, withAllCommandModifiers()...),
20+
cli.NewCommand(workflowLabelDeleteCmd, workflowLabelDeleteRun, nil, withAllCommandModifiers()...),
21+
})
22+
}
23+
24+
var workflowLabelListCmd = cli.Command{
25+
Name: "list",
26+
Short: "List labels of one workflow",
27+
Ctx: []cli.Arg{
28+
{Name: _ProjectKey},
29+
{Name: _WorkflowName},
30+
},
31+
}
32+
33+
func workflowLabelListRun(v cli.Values) (cli.ListResult, error) {
34+
wf, err := client.WorkflowGet(v.GetString(_ProjectKey), v.GetString(_WorkflowName), cdsclient.WithLabels())
35+
if err != nil {
36+
return nil, err
37+
}
38+
return cli.AsListResult(wf.Labels), nil
39+
}
40+
41+
var workflowLabelAddCmd = cli.Command{
42+
Name: "add",
43+
Short: "Add label on one workflow",
44+
Ctx: []cli.Arg{
45+
{Name: _ProjectKey},
46+
{Name: _WorkflowName},
47+
{Name: "label"},
48+
},
49+
}
50+
51+
func workflowLabelAddRun(v cli.Values) error {
52+
labelName := v.GetString("label")
53+
err := client.WorkflowLabelAdd(v.GetString(_ProjectKey), v.GetString(_WorkflowName), labelName)
54+
return err
55+
}
56+
57+
var workflowLabelDeleteCmd = cli.Command{
58+
Name: "delete",
59+
Aliases: []string{"rm"},
60+
Short: "Delete label from one workflow",
61+
Ctx: []cli.Arg{
62+
{Name: _ProjectKey},
63+
{Name: _WorkflowName},
64+
{Name: "label"},
65+
},
66+
}
67+
68+
func workflowLabelDeleteRun(v cli.Values) error {
69+
labelName := v.GetString("label")
70+
wf, err := client.WorkflowGet(v.GetString(_ProjectKey), v.GetString(_WorkflowName), cdsclient.WithLabels())
71+
if err != nil {
72+
return err
73+
}
74+
75+
var labelID int64
76+
for _, v := range wf.Labels {
77+
if v.Name == labelName {
78+
labelID = v.ID
79+
break
80+
}
81+
}
82+
83+
return client.WorkflowLabelDelete(v.GetString(_ProjectKey), v.GetString(_WorkflowName), labelID)
84+
}

engine/api/project.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,7 @@ func (api *API) putProjectLabelsHandler() service.Handler {
371371
return err
372372
}
373373

374-
// Check is project exist
374+
// Check if project exist
375375
proj, err := project.Load(db, api.Cache, key, project.LoadOptions.WithLabels)
376376
if err != nil {
377377
return err

engine/api/workflow.go

-1
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,6 @@ func (api *API) postWorkflowLabelHandler() service.Handler {
249249
key := vars["key"]
250250
workflowName := vars["permWorkflowName"]
251251
db := api.mustDB()
252-
//u := getAPIConsumer(ctx)
253252

254253
var label sdk.Label
255254
if err := service.UnmarshalBody(r, &label); err != nil {

go.mod

+1-15
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ require (
3434
github.com/circonus-labs/circonus-gometrics v2.2.4+incompatible // indirect
3535
github.com/circonus-labs/circonusllhist v0.0.0-20180430145027-5eb751da55c6 // indirect
3636
github.com/dancannon/gorethink v4.0.0+incompatible // indirect
37-
3837
github.com/dgrijalva/jwt-go v3.2.0+incompatible
3938
github.com/dnaeon/go-vcr v0.0.0-20180920040454-5637cf3d8a31 // indirect
4039
github.com/docker/distribution v2.7.0-rc.0+incompatible // indirect
@@ -62,7 +61,7 @@ require (
6261
github.com/go-sql-driver/mysql v1.4.1 // indirect
6362
github.com/go-stomp/stomp v1.0.1 // indirect
6463
github.com/gocql/gocql v0.0.0-20181018123354-22229812a83e // indirect
65-
github.com/golang/mock v1.4.0
64+
github.com/golang/mock v1.4.1
6665
github.com/golang/protobuf v1.3.2
6766
github.com/google/go-cmp v0.4.0 // indirect
6867
github.com/googleapis/gnostic v0.1.0 // indirect
@@ -71,7 +70,6 @@ require (
7170
github.com/gorhill/cronexpr v0.0.0-20161205141322-d520615e531a
7271
github.com/gorilla/handlers v0.0.0-20160816184729-a5775781a543
7372
github.com/gorilla/mux v1.6.2
74-
7573
github.com/gregjones/httpcache v0.0.0-20190212212710-3befbb6ad0cc // indirect
7674
github.com/grpc-ecosystem/grpc-gateway v1.9.6 // indirect
7775
github.com/hashicorp/consul v1.3.0 // indirect
@@ -95,22 +93,19 @@ require (
9593
github.com/inconshreveable/mousetrap v1.0.0 // indirect
9694
github.com/itsjamie/gin-cors v0.0.0-20160420130702-97b4a9da7933
9795
github.com/jefferai/jsonx v0.0.0-20160721235117-9cc31c3135ee // indirect
98-
9996
github.com/jtolds/gls v4.2.1+incompatible // indirect
10097
github.com/juju/errors v0.0.0-20190207033735-e65537c515d7 // indirect
10198
github.com/juju/loggo v0.0.0-20190526231331-6e530bcce5d8 // indirect
10299
github.com/juju/testing v0.0.0-20190429233213-dfc56b8c09fc // indirect
103100
github.com/kardianos/osext v0.0.0-20170510131534-ae77be60afb1
104101
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect
105-
106102
github.com/keybase/go-crypto v0.0.0-20181127160227-255a5089e85a
107103
github.com/keybase/go-keychain v0.0.0-20190828020956-aa639f275ae1
108104
github.com/keybase/go.dbus v0.0.0-20190710215703-a33a09c8a604
109105
github.com/konsorten/go-windows-terminal-sequences v1.0.2 // indirect
110106
github.com/kr/pty v1.1.8 // indirect
111107
github.com/kylelemons/godebug v1.1.0 // indirect
112108
github.com/lib/pq v1.0.0
113-
114109
github.com/lytics/logrus v0.0.0-20170528191427-4389a17ed024
115110
github.com/magiconair/properties v1.8.1 // indirect
116111
github.com/mailru/easyjson v0.0.0-20171120080333-32fa128f234d
@@ -134,31 +129,25 @@ require (
134129
github.com/mndrix/tap-go v0.0.0-20170113192335-56cca451570b // indirect
135130
github.com/mum4k/termdash v0.10.0
136131
github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d
137-
138132
github.com/ncw/swift v0.0.0-20171019114456-c95c6e5c2d1a
139133
github.com/nsf/termbox-go v0.0.0-20190817171036-93860e161317 // indirect
140134
github.com/nwaples/rardecode v1.0.0 // indirect
141135
github.com/olekukonko/tablewriter v0.0.0-20160621093029-daf2955e742c
142136
github.com/olivere/elastic v6.2.17+incompatible // indirect
143-
144137
github.com/opencontainers/go-digest v1.0.0-rc1 // indirect
145-
146138
github.com/opencontainers/image-spec v1.0.1 // indirect
147139
github.com/ory-am/common v0.4.0 // indirect
148140
github.com/ovh/cds/sdk/interpolate v0.0.0-20190319104452-71125b036b25
149-
150141
github.com/ovh/cds/sdk/izanami v0.0.0-20190703081656-683453b50b2a
151142
github.com/ovh/configstore v0.3.2
152143
github.com/ovh/symmecrypt v0.4.0
153-
154144
github.com/ovh/venom v0.25.0
155145
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c // indirect
156146
github.com/patrickmn/go-cache v2.1.0+incompatible
157147
github.com/pborman/uuid v0.0.0-20170612153648-e790cca94e6c
158148
github.com/pelletier/go-toml v1.4.0
159149
github.com/peterbourgon/diskv v2.0.1+incompatible // indirect
160150
github.com/pierrec/lz4 v2.3.0+incompatible // indirect
161-
162151
github.com/pkg/browser v0.0.0-20170505125900-c90ca0c84f15
163152
github.com/pkg/errors v0.8.1
164153
github.com/poy/onpar v0.0.0-20190519213022-ee068f8ea4d1 // indirect
@@ -194,7 +183,6 @@ require (
194183
github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 // indirect
195184
github.com/yesnault/go-toml v0.0.0-20191205182532-f5ef6cee7945
196185
github.com/yesnault/gorp v2.0.0+incompatible // indirect
197-
198186
github.com/yuin/gluare v0.0.0-20170607022532-d7c94f1a80ed
199187
github.com/yuin/gopher-lua v0.0.0-20170901023928-8c2befcd3908
200188
github.com/ziutek/mymysql v1.5.4 // indirect
@@ -214,11 +202,9 @@ require (
214202
gopkg.in/go-playground/assert.v1 v1.2.1 // indirect
215203
gopkg.in/go-playground/validator.v8 v8.18.2 // indirect
216204
gopkg.in/gorethink/gorethink.v4 v4.1.0 // indirect
217-
218205
gopkg.in/gorp.v1 v1.7.1 // indirect
219206
gopkg.in/h2non/gock.v1 v1.0.14
220207
gopkg.in/ldap.v2 v2.5.1
221-
222208
gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce // indirect
223209
gopkg.in/olivere/elastic.v6 v6.2.17
224210
gopkg.in/ory-am/dockertest.v2 v2.2.3 // indirect

go.sum

+2
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,8 @@ github.com/golang/mock v1.3.1 h1:qGJ6qTW+x6xX/my+8YUVl4WNpX9B7+/l2tRsHGZ7f2s=
189189
github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
190190
github.com/golang/mock v1.4.0 h1:Rd1kQnQu0Hq3qvJppYSG0HtP+f5LPPUiDswTLiEegLg=
191191
github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
192+
github.com/golang/mock v1.4.1 h1:ocYkMQY5RrXTYgXl7ICpV0IXwlEQGwKIsery4gyXa1U=
193+
github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
192194
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
193195
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
194196
github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=

sdk/cdsclient/client_workflow.go

+19
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,25 @@ func (c *client) WorkflowUpdate(projectKey, name string, wf *sdk.Workflow) error
4141
return nil
4242
}
4343

44+
func (c *client) WorkflowLabelAdd(projectKey, name, labelName string) error {
45+
lbl := sdk.Label{
46+
Name: labelName,
47+
}
48+
url := fmt.Sprintf("/project/%s/workflows/%s/label", projectKey, name)
49+
if _, err := c.PostJSON(context.Background(), url, lbl, nil); err != nil {
50+
return err
51+
}
52+
return nil
53+
}
54+
55+
func (c *client) WorkflowLabelDelete(projectKey, name string, labelID int64) error {
56+
url := fmt.Sprintf("/project/%s/workflows/%s/label/%d", projectKey, name, labelID)
57+
if _, err := c.DeleteJSON(context.Background(), url, nil); err != nil {
58+
return err
59+
}
60+
return nil
61+
}
62+
4463
func (c *client) WorkflowGroupAdd(projectKey, name, groupName string, permission int) error {
4564
gp := sdk.GroupPermission{
4665
Group: sdk.Group{Name: groupName},

sdk/cdsclient/interface.go

+11
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,8 @@ type WorkflowClient interface {
294294
WorkflowGet(projectKey, name string, opts ...RequestModifier) (*sdk.Workflow, error)
295295
WorkflowUpdate(projectKey, name string, wf *sdk.Workflow) error
296296
WorkflowDelete(projectKey string, workflowName string) error
297+
WorkflowLabelAdd(projectKey, name, labelName string) error
298+
WorkflowLabelDelete(projectKey, name string, labelID int64) error
297299
WorkflowGroupAdd(projectKey, name, groupName string, permission int) error
298300
WorkflowGroupDelete(projectKey, name, groupName string) error
299301
WorkflowRunGet(projectKey string, workflowName string, number int64) (*sdk.WorkflowRun, error)
@@ -467,6 +469,15 @@ func WithWorkflows() RequestModifier {
467469
}
468470
}
469471

472+
// WithLabels allow a provider to retrieve a workflow with its labels
473+
func WithLabels() RequestModifier {
474+
return func(r *http.Request) {
475+
q := r.URL.Query()
476+
q.Set("withLabels", "true")
477+
r.URL.RawQuery = q.Encode()
478+
}
479+
}
480+
470481
// AuthClient is the interface for authentication management.
471482
type AuthClient interface {
472483
AuthDriverList() (sdk.AuthDriverResponse, error)

0 commit comments

Comments
 (0)