...

Source file src/github.com/xanzy/go-gitlab/merge_trains.go

Documentation: github.com/xanzy/go-gitlab

     1  package gitlab
     2  
     3  import (
     4  	"fmt"
     5  	"net/http"
     6  	"time"
     7  )
     8  
     9  // MergeTrainsService handles communication with the merge trains related
    10  // methods of the GitLab API.
    11  //
    12  // GitLab API docs: https://docs.gitlab.com/ee/api/merge_trains.html
    13  type MergeTrainsService struct {
    14  	client *Client
    15  }
    16  
    17  // MergeTrain represents a Gitlab merge train.
    18  //
    19  // GitLab API docs: https://docs.gitlab.com/ee/api/merge_trains.html
    20  type MergeTrain struct {
    21  	ID           int                     `json:"id"`
    22  	MergeRequest *MergeTrainMergeRequest `json:"merge_request"`
    23  	User         *BasicUser              `json:"user"`
    24  	Pipeline     *Pipeline               `json:"pipeline"`
    25  	CreatedAt    *time.Time              `json:"created_at"`
    26  	UpdatedAt    *time.Time              `json:"updated_at"`
    27  	TargetBranch string                  `json:"target_branch"`
    28  	Status       string                  `json:"status"`
    29  	MergedAt     *time.Time              `json:"merged_at"`
    30  	Duration     int                     `json:"duration"`
    31  }
    32  
    33  // MergeTrainMergeRequest represents a Gitlab merge request inside merge train.
    34  //
    35  // GitLab API docs: https://docs.gitlab.com/ee/api/merge_trains.html
    36  type MergeTrainMergeRequest struct {
    37  	ID          int        `json:"id"`
    38  	IID         int        `json:"iid"`
    39  	ProjectID   int        `json:"project_id"`
    40  	Title       string     `json:"title"`
    41  	Description string     `json:"description"`
    42  	State       string     `json:"state"`
    43  	CreatedAt   *time.Time `json:"created_at"`
    44  	UpdatedAt   *time.Time `json:"updated_at"`
    45  	WebURL      string     `json:"web_url"`
    46  }
    47  
    48  // ListMergeTrainsOptions represents the available ListMergeTrain() options.
    49  //
    50  // Gitab API docs:
    51  // https://docs.gitlab.com/ee/api/merge_trains.html#list-merge-trains-for-a-project
    52  type ListMergeTrainsOptions struct {
    53  	ListOptions
    54  	Scope *string `url:"scope,omitempty" json:"scope,omitempty"`
    55  	Sort  *string `url:"sort,omitempty" json:"sort,omitempty"`
    56  }
    57  
    58  // ListProjectMergeTrains get a list of merge trains in a project.
    59  //
    60  // GitLab API docs:
    61  // https://docs.gitlab.com/ee/api/merge_trains.html#list-merge-trains-for-a-project
    62  func (s *MergeTrainsService) ListProjectMergeTrains(pid interface{}, opt *ListMergeTrainsOptions, options ...RequestOptionFunc) ([]*MergeTrain, *Response, error) {
    63  	project, err := parseID(pid)
    64  	if err != nil {
    65  		return nil, nil, err
    66  	}
    67  	u := fmt.Sprintf("projects/%s/merge_trains", PathEscape(project))
    68  
    69  	req, err := s.client.NewRequest(http.MethodGet, u, opt, options)
    70  	if err != nil {
    71  		return nil, nil, err
    72  	}
    73  
    74  	var mts []*MergeTrain
    75  	resp, err := s.client.Do(req, &mts)
    76  	if err != nil {
    77  		return nil, resp, err
    78  	}
    79  
    80  	return mts, resp, nil
    81  }
    82  
    83  // ListMergeRequestInMergeTrain gets a list of merge requests added to a merge
    84  // train for the requested target branch.
    85  //
    86  // GitLab API docs:
    87  // https://docs.gitlab.com/ee/api/merge_trains.html#list-merge-requests-in-a-merge-train
    88  func (s *MergeTrainsService) ListMergeRequestInMergeTrain(pid interface{}, targetBranch string, opts *ListMergeTrainsOptions, options ...RequestOptionFunc) ([]*MergeTrain, *Response, error) {
    89  	project, err := parseID(pid)
    90  	if err != nil {
    91  		return nil, nil, err
    92  	}
    93  	u := fmt.Sprintf("projects/%s/merge_trains/%s", PathEscape(project), targetBranch)
    94  
    95  	req, err := s.client.NewRequest(http.MethodGet, u, opts, options)
    96  	if err != nil {
    97  		return nil, nil, err
    98  	}
    99  
   100  	var mts []*MergeTrain
   101  	resp, err := s.client.Do(req, &mts)
   102  	if err != nil {
   103  		return nil, resp, err
   104  	}
   105  
   106  	return mts, resp, nil
   107  }
   108  
   109  // GetMergeRequestOnAMergeTrain Get merge train information for the requested
   110  // merge request.
   111  //
   112  // GitLab API docs:
   113  // https://docs.gitlab.com/ee/api/merge_trains.html#get-the-status-of-a-merge-request-on-a-merge-train
   114  func (s *MergeTrainsService) GetMergeRequestOnAMergeTrain(pid interface{}, mergeRequest int, options ...RequestOptionFunc) (*MergeTrain, *Response, error) {
   115  	project, err := parseID(pid)
   116  	if err != nil {
   117  		return nil, nil, err
   118  	}
   119  	u := fmt.Sprintf("projects/%s/merge_trains/merge_requests/%d", PathEscape(project), mergeRequest)
   120  
   121  	req, err := s.client.NewRequest(http.MethodGet, u, nil, options)
   122  	if err != nil {
   123  		return nil, nil, err
   124  	}
   125  
   126  	mt := new(MergeTrain)
   127  	resp, err := s.client.Do(req, mt)
   128  	if err != nil {
   129  		return nil, resp, err
   130  	}
   131  
   132  	return mt, resp, nil
   133  }
   134  
   135  // AddMergeRequestToMergeTrainOptions represents the available
   136  // AddMergeRequestToMergeTrain() options.
   137  //
   138  // GitLab API docs:
   139  // https://docs.gitlab.com/ee/api/merge_trains.html#add-a-merge-request-to-a-merge-train
   140  type AddMergeRequestToMergeTrainOptions struct {
   141  	WhenPipelineSucceeds *bool   `url:"when_pipeline_succeeds,omitempty" json:"when_pipeline_succeeds,omitempty"`
   142  	SHA                  *string `url:"sha,omitempty" json:"sha,omitempty"`
   143  	Squash               *bool   `url:"squash,omitempty" json:"squash,omitempty"`
   144  }
   145  
   146  // AddMergeRequestToMergeTrain Add a merge request to the merge train targeting
   147  // the merge request’s target branch.
   148  //
   149  // GitLab API docs:
   150  // https://docs.gitlab.com/ee/api/merge_trains.html#add-a-merge-request-to-a-merge-train
   151  func (s *MergeTrainsService) AddMergeRequestToMergeTrain(pid interface{}, mergeRequest int, opts *AddMergeRequestToMergeTrainOptions, options ...RequestOptionFunc) ([]*MergeTrain, *Response, error) {
   152  	project, err := parseID(pid)
   153  	if err != nil {
   154  		return nil, nil, err
   155  	}
   156  	u := fmt.Sprintf("projects/%s/merge_trains/merge_requests/%d", PathEscape(project), mergeRequest)
   157  
   158  	req, err := s.client.NewRequest(http.MethodPost, u, opts, options)
   159  	if err != nil {
   160  		return nil, nil, err
   161  	}
   162  
   163  	var mts []*MergeTrain
   164  	resp, err := s.client.Do(req, &mts)
   165  	if err != nil {
   166  		return nil, resp, err
   167  	}
   168  
   169  	return mts, resp, nil
   170  }
   171  

View as plain text