pipeline_triggers.go

  1package gitlab
  2
  3import (
  4	"fmt"
  5	"time"
  6)
  7
  8// PipelineTriggersService handles Project pipeline triggers.
  9//
 10// GitLab API docs:
 11// https://docs.gitlab.com/ce/api/pipeline_triggers.html
 12type PipelineTriggersService struct {
 13	client *Client
 14}
 15
 16// PipelineTrigger represents a project pipeline trigger.
 17//
 18// GitLab API docs:
 19// https://docs.gitlab.com/ce/api/pipeline_triggers.html#pipeline-triggers
 20type PipelineTrigger struct {
 21	ID          int        `json:"id"`
 22	Description string     `json:"description"`
 23	CreatedAt   *time.Time `json:"created_at"`
 24	DeletedAt   *time.Time `json:"deleted_at"`
 25	LastUsed    *time.Time `json:"last_used"`
 26	Token       string     `json:"token"`
 27	UpdatedAt   *time.Time `json:"updated_at"`
 28	Owner       *User      `json:"owner"`
 29}
 30
 31// ListPipelineTriggersOptions represents the available ListPipelineTriggers() options.
 32//
 33// GitLab API docs:
 34// https://docs.gitlab.com/ce/api/pipeline_triggers.html#list-project-triggers
 35type ListPipelineTriggersOptions ListOptions
 36
 37// ListPipelineTriggers gets a list of project triggers.
 38//
 39// GitLab API docs:
 40// https://docs.gitlab.com/ce/api/pipeline_triggers.html#list-project-triggers
 41func (s *PipelineTriggersService) ListPipelineTriggers(pid interface{}, opt *ListPipelineTriggersOptions, options ...OptionFunc) ([]*PipelineTrigger, *Response, error) {
 42	project, err := parseID(pid)
 43	if err != nil {
 44		return nil, nil, err
 45	}
 46	u := fmt.Sprintf("projects/%s/triggers", pathEscape(project))
 47
 48	req, err := s.client.NewRequest("GET", u, opt, options)
 49	if err != nil {
 50		return nil, nil, err
 51	}
 52
 53	var pt []*PipelineTrigger
 54	resp, err := s.client.Do(req, &pt)
 55	if err != nil {
 56		return nil, resp, err
 57	}
 58
 59	return pt, resp, err
 60}
 61
 62// GetPipelineTrigger gets a specific pipeline trigger for a project.
 63//
 64// GitLab API docs:
 65// https://docs.gitlab.com/ce/api/pipeline_triggers.html#get-trigger-details
 66func (s *PipelineTriggersService) GetPipelineTrigger(pid interface{}, trigger int, options ...OptionFunc) (*PipelineTrigger, *Response, error) {
 67	project, err := parseID(pid)
 68	if err != nil {
 69		return nil, nil, err
 70	}
 71	u := fmt.Sprintf("projects/%s/triggers/%d", pathEscape(project), trigger)
 72
 73	req, err := s.client.NewRequest("GET", u, nil, options)
 74	if err != nil {
 75		return nil, nil, err
 76	}
 77
 78	pt := new(PipelineTrigger)
 79	resp, err := s.client.Do(req, pt)
 80	if err != nil {
 81		return nil, resp, err
 82	}
 83
 84	return pt, resp, err
 85}
 86
 87// AddPipelineTriggerOptions represents the available AddPipelineTrigger() options.
 88//
 89// GitLab API docs:
 90// https://docs.gitlab.com/ce/api/pipeline_triggers.html#create-a-project-trigger
 91type AddPipelineTriggerOptions struct {
 92	Description *string `url:"description,omitempty" json:"description,omitempty"`
 93}
 94
 95// AddPipelineTrigger adds a pipeline trigger to a specified project.
 96//
 97// GitLab API docs:
 98// https://docs.gitlab.com/ce/api/pipeline_triggers.html#create-a-project-trigger
 99func (s *PipelineTriggersService) AddPipelineTrigger(pid interface{}, opt *AddPipelineTriggerOptions, options ...OptionFunc) (*PipelineTrigger, *Response, error) {
100	project, err := parseID(pid)
101	if err != nil {
102		return nil, nil, err
103	}
104	u := fmt.Sprintf("projects/%s/triggers", pathEscape(project))
105
106	req, err := s.client.NewRequest("POST", u, opt, options)
107	if err != nil {
108		return nil, nil, err
109	}
110
111	pt := new(PipelineTrigger)
112	resp, err := s.client.Do(req, pt)
113	if err != nil {
114		return nil, resp, err
115	}
116
117	return pt, resp, err
118}
119
120// EditPipelineTriggerOptions represents the available EditPipelineTrigger() options.
121//
122// GitLab API docs:
123// https://docs.gitlab.com/ce/api/pipeline_triggers.html#update-a-project-trigger
124type EditPipelineTriggerOptions struct {
125	Description *string `url:"description,omitempty" json:"description,omitempty"`
126}
127
128// EditPipelineTrigger edits a trigger for a specified project.
129//
130// GitLab API docs:
131// https://docs.gitlab.com/ce/api/pipeline_triggers.html#update-a-project-trigger
132func (s *PipelineTriggersService) EditPipelineTrigger(pid interface{}, trigger int, opt *EditPipelineTriggerOptions, options ...OptionFunc) (*PipelineTrigger, *Response, error) {
133	project, err := parseID(pid)
134	if err != nil {
135		return nil, nil, err
136	}
137	u := fmt.Sprintf("projects/%s/triggers/%d", pathEscape(project), trigger)
138
139	req, err := s.client.NewRequest("PUT", u, opt, options)
140	if err != nil {
141		return nil, nil, err
142	}
143
144	pt := new(PipelineTrigger)
145	resp, err := s.client.Do(req, pt)
146	if err != nil {
147		return nil, resp, err
148	}
149
150	return pt, resp, err
151}
152
153// TakeOwnershipOfPipelineTrigger sets the owner of the specified
154// pipeline trigger to the user issuing the request.
155//
156// GitLab API docs:
157// https://docs.gitlab.com/ce/api/pipeline_triggers.html#take-ownership-of-a-project-trigger
158func (s *PipelineTriggersService) TakeOwnershipOfPipelineTrigger(pid interface{}, trigger int, options ...OptionFunc) (*PipelineTrigger, *Response, error) {
159	project, err := parseID(pid)
160	if err != nil {
161		return nil, nil, err
162	}
163	u := fmt.Sprintf("projects/%s/triggers/%d/take_ownership", pathEscape(project), trigger)
164
165	req, err := s.client.NewRequest("POST", u, nil, options)
166	if err != nil {
167		return nil, nil, err
168	}
169
170	pt := new(PipelineTrigger)
171	resp, err := s.client.Do(req, pt)
172	if err != nil {
173		return nil, resp, err
174	}
175
176	return pt, resp, err
177}
178
179// DeletePipelineTrigger removes a trigger from a project.
180//
181// GitLab API docs:
182// https://docs.gitlab.com/ce/api/pipeline_triggers.html#remove-a-project-trigger
183func (s *PipelineTriggersService) DeletePipelineTrigger(pid interface{}, trigger int, options ...OptionFunc) (*Response, error) {
184	project, err := parseID(pid)
185	if err != nil {
186		return nil, err
187	}
188	u := fmt.Sprintf("projects/%s/triggers/%d", pathEscape(project), trigger)
189
190	req, err := s.client.NewRequest("DELETE", u, nil, options)
191	if err != nil {
192		return nil, err
193	}
194
195	return s.client.Do(req, nil)
196}
197
198// RunPipelineTriggerOptions represents the available RunPipelineTrigger() options.
199//
200// GitLab API docs:
201// https://docs.gitlab.com/ce/ci/triggers/README.html#triggering-a-pipeline
202type RunPipelineTriggerOptions struct {
203	Ref       *string           `url:"ref" json:"ref"`
204	Token     *string           `url:"token" json:"token"`
205	Variables map[string]string `url:"variables,omitempty" json:"variables,omitempty"`
206}
207
208// RunPipelineTrigger starts a trigger from a project.
209//
210// GitLab API docs:
211// https://docs.gitlab.com/ce/ci/triggers/README.html#triggering-a-pipeline
212func (s *PipelineTriggersService) RunPipelineTrigger(pid interface{}, opt *RunPipelineTriggerOptions, options ...OptionFunc) (*Pipeline, *Response, error) {
213	project, err := parseID(pid)
214	if err != nil {
215		return nil, nil, err
216	}
217	u := fmt.Sprintf("projects/%s/trigger/pipeline", pathEscape(project))
218
219	req, err := s.client.NewRequest("POST", u, opt, options)
220	if err != nil {
221		return nil, nil, err
222	}
223
224	pt := new(Pipeline)
225	resp, err := s.client.Do(req, pt)
226	if err != nil {
227		return nil, resp, err
228	}
229
230	return pt, resp, err
231}