package gitlab import ( "fmt" "net/url" "time" ) // PipelineTriggersService handles Project pipeline triggers. // // GitLab API docs: // https://docs.gitlab.com/ce/api/pipeline_triggers.html type PipelineTriggersService struct { client *Client } // PipelineTrigger represents a project pipeline trigger. // // GitLab API docs: // https://docs.gitlab.com/ce/api/pipeline_triggers.html#pipeline-triggers type PipelineTrigger struct { ID int `json:"id"` Description string `json:"description"` CreatedAt *time.Time `json:"created_at"` DeletedAt *time.Time `json:"deleted_at"` LastUsed *time.Time `json:"last_used"` Token string `json:"token"` UpdatedAt *time.Time `json:"updated_at"` Owner *User `json:"owner"` } // ListPipelineTriggersOptions represents the available ListPipelineTriggers() options. // // GitLab API docs: // https://docs.gitlab.com/ce/api/pipeline_triggers.html#list-project-triggers type ListPipelineTriggersOptions ListOptions // ListPipelineTriggers gets a list of project triggers. // // GitLab API docs: // https://docs.gitlab.com/ce/api/pipeline_triggers.html#list-project-triggers func (s *PipelineTriggersService) ListPipelineTriggers(pid interface{}, opt *ListPipelineTriggersOptions, options ...OptionFunc) ([]*PipelineTrigger, *Response, error) { project, err := parseID(pid) if err != nil { return nil, nil, err } u := fmt.Sprintf("projects/%s/triggers", url.QueryEscape(project)) req, err := s.client.NewRequest("GET", u, opt, options) if err != nil { return nil, nil, err } var pt []*PipelineTrigger resp, err := s.client.Do(req, &pt) if err != nil { return nil, resp, err } return pt, resp, err } // GetPipelineTrigger gets a specific pipeline trigger for a project. // // GitLab API docs: // https://docs.gitlab.com/ce/api/pipeline_triggers.html#get-trigger-details func (s *PipelineTriggersService) GetPipelineTrigger(pid interface{}, trigger int, options ...OptionFunc) (*PipelineTrigger, *Response, error) { project, err := parseID(pid) if err != nil { return nil, nil, err } u := fmt.Sprintf("projects/%s/triggers/%d", url.QueryEscape(project), trigger) req, err := s.client.NewRequest("GET", u, nil, options) if err != nil { return nil, nil, err } pt := new(PipelineTrigger) resp, err := s.client.Do(req, pt) if err != nil { return nil, resp, err } return pt, resp, err } // AddPipelineTriggerOptions represents the available AddPipelineTrigger() options. // // GitLab API docs: // https://docs.gitlab.com/ce/api/pipeline_triggers.html#create-a-project-trigger type AddPipelineTriggerOptions struct { Description *string `url:"description,omitempty" json:"description,omitempty"` } // AddPipelineTrigger adds a pipeline trigger to a specified project. // // GitLab API docs: // https://docs.gitlab.com/ce/api/pipeline_triggers.html#create-a-project-trigger func (s *PipelineTriggersService) AddPipelineTrigger(pid interface{}, opt *AddPipelineTriggerOptions, options ...OptionFunc) (*PipelineTrigger, *Response, error) { project, err := parseID(pid) if err != nil { return nil, nil, err } u := fmt.Sprintf("projects/%s/triggers", url.QueryEscape(project)) req, err := s.client.NewRequest("POST", u, opt, options) if err != nil { return nil, nil, err } pt := new(PipelineTrigger) resp, err := s.client.Do(req, pt) if err != nil { return nil, resp, err } return pt, resp, err } // EditPipelineTriggerOptions represents the available EditPipelineTrigger() options. // // GitLab API docs: // https://docs.gitlab.com/ce/api/pipeline_triggers.html#update-a-project-trigger type EditPipelineTriggerOptions struct { Description *string `url:"description,omitempty" json:"description,omitempty"` } // EditPipelineTrigger edits a trigger for a specified project. // // GitLab API docs: // https://docs.gitlab.com/ce/api/pipeline_triggers.html#update-a-project-trigger func (s *PipelineTriggersService) EditPipelineTrigger(pid interface{}, trigger int, opt *EditPipelineTriggerOptions, options ...OptionFunc) (*PipelineTrigger, *Response, error) { project, err := parseID(pid) if err != nil { return nil, nil, err } u := fmt.Sprintf("projects/%s/triggers/%d", url.QueryEscape(project), trigger) req, err := s.client.NewRequest("PUT", u, opt, options) if err != nil { return nil, nil, err } pt := new(PipelineTrigger) resp, err := s.client.Do(req, pt) if err != nil { return nil, resp, err } return pt, resp, err } // TakeOwnershipOfPipelineTrigger sets the owner of the specified // pipeline trigger to the user issuing the request. // // GitLab API docs: // https://docs.gitlab.com/ce/api/pipeline_triggers.html#take-ownership-of-a-project-trigger func (s *PipelineTriggersService) TakeOwnershipOfPipelineTrigger(pid interface{}, trigger int, options ...OptionFunc) (*PipelineTrigger, *Response, error) { project, err := parseID(pid) if err != nil { return nil, nil, err } u := fmt.Sprintf("projects/%s/triggers/%d/take_ownership", url.QueryEscape(project), trigger) req, err := s.client.NewRequest("POST", u, nil, options) if err != nil { return nil, nil, err } pt := new(PipelineTrigger) resp, err := s.client.Do(req, pt) if err != nil { return nil, resp, err } return pt, resp, err } // DeletePipelineTrigger removes a trigger from a project. // // GitLab API docs: // https://docs.gitlab.com/ce/api/pipeline_triggers.html#remove-a-project-trigger func (s *PipelineTriggersService) DeletePipelineTrigger(pid interface{}, trigger int, options ...OptionFunc) (*Response, error) { project, err := parseID(pid) if err != nil { return nil, err } u := fmt.Sprintf("projects/%s/triggers/%d", url.QueryEscape(project), trigger) req, err := s.client.NewRequest("DELETE", u, nil, options) if err != nil { return nil, err } return s.client.Do(req, nil) } // RunPipelineTriggerOptions represents the available RunPipelineTrigger() options. // // GitLab API docs: // https://docs.gitlab.com/ce/ci/triggers/README.html#triggering-a-pipeline type RunPipelineTriggerOptions struct { Ref *string `url:"ref" json:"ref"` Token *string `url:"token" json:"token"` Variables map[string]string `url:"variables,omitempty" json:"variables,omitempty"` } // RunPipelineTrigger starts a trigger from a project. // // GitLab API docs: // https://docs.gitlab.com/ce/ci/triggers/README.html#triggering-a-pipeline func (s *PipelineTriggersService) RunPipelineTrigger(pid interface{}, opt *RunPipelineTriggerOptions, options ...OptionFunc) (*Pipeline, *Response, error) { project, err := parseID(pid) if err != nil { return nil, nil, err } u := fmt.Sprintf("projects/%s/trigger/pipeline", url.QueryEscape(project)) req, err := s.client.NewRequest("POST", u, opt, options) if err != nil { return nil, nil, err } pt := new(Pipeline) resp, err := s.client.Do(req, pt) if err != nil { return nil, resp, err } return pt, resp, err }