187 lines
4 KiB
Go
187 lines
4 KiB
Go
package gogitlab
|
|
|
|
import (
|
|
"encoding/json"
|
|
"net/url"
|
|
)
|
|
|
|
const (
|
|
project_url_hooks = "/projects/:id/hooks" // Get list of project hooks
|
|
project_url_hook = "/projects/:id/hooks/:hook_id" // Get single project hook
|
|
)
|
|
|
|
type Hook struct {
|
|
Id int `json:"id,omitempty"`
|
|
Url string `json:"url,omitempty"`
|
|
CreatedAtRaw string `json:"created_at,omitempty"`
|
|
}
|
|
|
|
/*
|
|
Get list of project hooks.
|
|
|
|
GET /projects/:id/hooks
|
|
|
|
Parameters:
|
|
|
|
id The ID of a project
|
|
|
|
*/
|
|
func (g *Gitlab) ProjectHooks(id string) ([]*Hook, error) {
|
|
|
|
url, opaque := g.ResourceUrlRaw(project_url_hooks, map[string]string{":id": id})
|
|
|
|
var err error
|
|
var hooks []*Hook
|
|
|
|
contents, err := g.buildAndExecRequestRaw("GET", url, opaque, nil)
|
|
if err != nil {
|
|
return hooks, err
|
|
}
|
|
|
|
err = json.Unmarshal(contents, &hooks)
|
|
|
|
return hooks, err
|
|
}
|
|
|
|
/*
|
|
Get single project hook.
|
|
|
|
GET /projects/:id/hooks/:hook_id
|
|
|
|
Parameters:
|
|
|
|
id The ID of a project
|
|
hook_id The ID of a hook
|
|
|
|
*/
|
|
func (g *Gitlab) ProjectHook(id, hook_id string) (*Hook, error) {
|
|
|
|
url, opaque := g.ResourceUrlRaw(project_url_hook, map[string]string{
|
|
":id": id,
|
|
":hook_id": hook_id,
|
|
})
|
|
|
|
var err error
|
|
hook := new(Hook)
|
|
|
|
contents, err := g.buildAndExecRequestRaw("GET", url, opaque, nil)
|
|
if err != nil {
|
|
return hook, err
|
|
}
|
|
|
|
err = json.Unmarshal(contents, &hook)
|
|
|
|
return hook, err
|
|
}
|
|
|
|
/*
|
|
Add new project hook.
|
|
|
|
POST /projects/:id/hooks
|
|
|
|
Parameters:
|
|
|
|
id The ID or NAMESPACE/PROJECT_NAME of a project
|
|
hook_url The hook URL
|
|
push_events Trigger hook on push events
|
|
issues_events Trigger hook on issues events
|
|
merge_requests_events Trigger hook on merge_requests events
|
|
|
|
*/
|
|
func (g *Gitlab) AddProjectHook(id, hook_url string, push_events, issues_events, merge_requests_events, tag_events bool) error {
|
|
|
|
url, opaque := g.ResourceUrlRaw(project_url_hooks, map[string]string{":id": id})
|
|
|
|
var err error
|
|
|
|
body := buildHookQuery(hook_url, push_events, issues_events, merge_requests_events, tag_events)
|
|
_, err = g.buildAndExecRequestRaw("POST", url, opaque, []byte(body))
|
|
|
|
return err
|
|
}
|
|
|
|
/*
|
|
Edit existing project hook.
|
|
|
|
PUT /projects/:id/hooks/:hook_id
|
|
|
|
Parameters:
|
|
|
|
id The ID or NAMESPACE/PROJECT_NAME of a project
|
|
hook_id The ID of a project hook
|
|
hook_url The hook URL
|
|
push_events Trigger hook on push events
|
|
issues_events Trigger hook on issues events
|
|
merge_requests_events Trigger hook on merge_requests events
|
|
|
|
*/
|
|
func (g *Gitlab) EditProjectHook(id, hook_id, hook_url string, push_events, issues_events, merge_requests_events, tag_events bool) error {
|
|
|
|
url, opaque := g.ResourceUrlRaw(project_url_hook, map[string]string{
|
|
":id": id,
|
|
":hook_id": hook_id,
|
|
})
|
|
|
|
var err error
|
|
|
|
body := buildHookQuery(hook_url, push_events, issues_events, merge_requests_events, tag_events)
|
|
_, err = g.buildAndExecRequestRaw("PUT", url, opaque, []byte(body))
|
|
|
|
return err
|
|
}
|
|
|
|
/*
|
|
Remove hook from project.
|
|
|
|
DELETE /projects/:id/hooks/:hook_id
|
|
|
|
Parameters:
|
|
|
|
id The ID or NAMESPACE/PROJECT_NAME of a project
|
|
hook_id The ID of hook to delete
|
|
|
|
*/
|
|
func (g *Gitlab) RemoveProjectHook(id, hook_id string) error {
|
|
|
|
url, opaque := g.ResourceUrlRaw(project_url_hook, map[string]string{
|
|
":id": id,
|
|
":hook_id": hook_id,
|
|
})
|
|
|
|
var err error
|
|
|
|
_, err = g.buildAndExecRequestRaw("DELETE", url, opaque, nil)
|
|
|
|
return err
|
|
}
|
|
|
|
/*
|
|
Build HTTP query to add or edit hook
|
|
*/
|
|
func buildHookQuery(hook_url string, push_events, issues_events, merge_requests_events, tag_events bool) string {
|
|
|
|
v := url.Values{}
|
|
v.Set("url", hook_url)
|
|
|
|
if push_events {
|
|
v.Set("push_events", "true")
|
|
} else {
|
|
v.Set("push_events", "false")
|
|
}
|
|
if issues_events {
|
|
v.Set("issues_events", "true")
|
|
} else {
|
|
v.Set("issues_events", "false")
|
|
}
|
|
if merge_requests_events {
|
|
v.Set("merge_requests_events", "true")
|
|
} else {
|
|
v.Set("merge_requests_events", "false")
|
|
}
|
|
if tag_events {
|
|
v.Set("tag_push_events", "true")
|
|
} else {
|
|
v.Set("tag_push_events", "false")
|
|
}
|
|
return v.Encode()
|
|
}
|