...

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

Documentation: github.com/xanzy/go-gitlab

     1  //
     2  // Copyright 2023, Sander van Harmelen
     3  //
     4  // Licensed under the Apache License, Version 2.0 (the "License");
     5  // you may not use this file except in compliance with the License.
     6  // You may obtain a copy of the License at
     7  //
     8  //     http://www.apache.org/licenses/LICENSE-2.0
     9  //
    10  // Unless required by applicable law or agreed to in writing, software
    11  // distributed under the License is distributed on an "AS IS" BASIS,
    12  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  // See the License for the specific language governing permissions and
    14  // limitations under the License.
    15  //
    16  
    17  package gitlab
    18  
    19  import (
    20  	"fmt"
    21  	"net/http"
    22  )
    23  
    24  // GroupProtectedEnvironmentsService handles communication with the group-level
    25  // protected environment methods of the GitLab API.
    26  //
    27  // GitLab API docs:
    28  // https://docs.gitlab.com/ee/api/group_protected_environments.html
    29  type GroupProtectedEnvironmentsService struct {
    30  	client *Client
    31  }
    32  
    33  // GroupProtectedEnvironment represents a group-level protected environment.
    34  //
    35  // GitLab API docs:
    36  // https://docs.gitlab.com/ee/api/group_protected_environments.html
    37  type GroupProtectedEnvironment struct {
    38  	Name                  string                               `json:"name"`
    39  	DeployAccessLevels    []*GroupEnvironmentAccessDescription `json:"deploy_access_levels"`
    40  	RequiredApprovalCount int                                  `json:"required_approval_count"`
    41  	ApprovalRules         []*GroupEnvironmentApprovalRule      `json:"approval_rules"`
    42  }
    43  
    44  // GroupEnvironmentAccessDescription represents the access decription for a
    45  // group-level protected environment.
    46  //
    47  // GitLab API docs:
    48  // https://docs.gitlab.com/ee/api/group_protected_environments.html
    49  type GroupEnvironmentAccessDescription struct {
    50  	ID                     int              `json:"id"`
    51  	AccessLevel            AccessLevelValue `json:"access_level"`
    52  	AccessLevelDescription string           `json:"access_level_description"`
    53  	UserID                 int              `json:"user_id"`
    54  	GroupID                int              `json:"group_id"`
    55  	GroupInheritanceType   int              `json:"group_inheritance_type"`
    56  }
    57  
    58  // GroupEnvironmentApprovalRule represents the approval rules for a group-level
    59  // protected environment.
    60  //
    61  // GitLab API docs:
    62  // https://docs.gitlab.com/ee/api/group_protected_environments.html#protect-a-single-environment
    63  type GroupEnvironmentApprovalRule struct {
    64  	ID                     int              `json:"id"`
    65  	UserID                 int              `json:"user_id"`
    66  	GroupID                int              `json:"group_id"`
    67  	AccessLevel            AccessLevelValue `json:"access_level"`
    68  	AccessLevelDescription string           `json:"access_level_description"`
    69  	RequiredApprovalCount  int              `json:"required_approvals"`
    70  	GroupInheritanceType   int              `json:"group_inheritance_type"`
    71  }
    72  
    73  // ListGroupProtectedEnvironmentsOptions represents the available
    74  // ListGroupProtectedEnvironments() options.
    75  //
    76  // GitLab API docs:
    77  // https://docs.gitlab.com/ee/api/group_protected_environments.html#list-group-level-protected-environments
    78  type ListGroupProtectedEnvironmentsOptions ListOptions
    79  
    80  // ListGroupProtectedEnvironments returns a list of protected environments from
    81  // a group.
    82  //
    83  // GitLab API docs:
    84  // https://docs.gitlab.com/ee/api/group_protected_environments.html#list-group-level-protected-environments
    85  func (s *GroupProtectedEnvironmentsService) ListGroupProtectedEnvironments(gid interface{}, opt *ListGroupProtectedEnvironmentsOptions, options ...RequestOptionFunc) ([]*GroupProtectedEnvironment, *Response, error) {
    86  	group, err := parseID(gid)
    87  	if err != nil {
    88  		return nil, nil, err
    89  	}
    90  	u := fmt.Sprintf("groups/%s/protected_environments", PathEscape(group))
    91  
    92  	req, err := s.client.NewRequest(http.MethodGet, u, opt, options)
    93  	if err != nil {
    94  		return nil, nil, err
    95  	}
    96  
    97  	var pes []*GroupProtectedEnvironment
    98  	resp, err := s.client.Do(req, &pes)
    99  	if err != nil {
   100  		return nil, resp, err
   101  	}
   102  
   103  	return pes, resp, nil
   104  }
   105  
   106  // GetGroupProtectedEnvironment returns a single group-level protected
   107  // environment.
   108  //
   109  // GitLab API docs:
   110  // https://docs.gitlab.com/ee/api/group_protected_environments.html#get-a-single-protected-environment
   111  func (s *GroupProtectedEnvironmentsService) GetGroupProtectedEnvironment(gid interface{}, environment string, options ...RequestOptionFunc) (*GroupProtectedEnvironment, *Response, error) {
   112  	group, err := parseID(gid)
   113  	if err != nil {
   114  		return nil, nil, err
   115  	}
   116  	u := fmt.Sprintf("groups/%s/protected_environments/%s", PathEscape(group), environment)
   117  
   118  	req, err := s.client.NewRequest(http.MethodGet, u, nil, options)
   119  	if err != nil {
   120  		return nil, nil, err
   121  	}
   122  
   123  	pe := new(GroupProtectedEnvironment)
   124  	resp, err := s.client.Do(req, pe)
   125  	if err != nil {
   126  		return nil, resp, err
   127  	}
   128  
   129  	return pe, resp, nil
   130  }
   131  
   132  // ProtectGroupEnvironmentOptions represents the available
   133  // ProtectGroupEnvironment() options.
   134  //
   135  // GitLab API docs:
   136  // https://docs.gitlab.com/ee/api/group_protected_environments.html#protect-a-single-environment
   137  type ProtectGroupEnvironmentOptions struct {
   138  	Name                  *string                                 `url:"name,omitempty" json:"name,omitempty"`
   139  	DeployAccessLevels    *[]*GroupEnvironmentAccessOptions       `url:"deploy_access_levels,omitempty" json:"deploy_access_levels,omitempty"`
   140  	RequiredApprovalCount *int                                    `url:"required_approval_count,omitempty" json:"required_approval_count,omitempty"`
   141  	ApprovalRules         *[]*GroupEnvironmentApprovalRuleOptions `url:"approval_rules,omitempty" json:"approval_rules,omitempty"`
   142  }
   143  
   144  // GroupEnvironmentAccessOptions represents the options for an access decription
   145  // for a group-level protected environment.
   146  //
   147  // GitLab API docs:
   148  // https://docs.gitlab.com/ee/api/group_protected_environments.html#protect-a-single-environment
   149  type GroupEnvironmentAccessOptions struct {
   150  	AccessLevel          *AccessLevelValue `url:"access_level,omitempty" json:"access_level,omitempty"`
   151  	UserID               *int              `url:"user_id,omitempty" json:"user_id,omitempty"`
   152  	GroupID              *int              `url:"group_id,omitempty" json:"group_id,omitempty"`
   153  	GroupInheritanceType *int              `url:"group_inheritance_type,omitempty" json:"group_inheritance_type,omitempty"`
   154  }
   155  
   156  // GroupEnvironmentApprovalRuleOptions represents the approval rules for a
   157  // group-level protected environment.
   158  //
   159  // GitLab API docs:
   160  // https://docs.gitlab.com/ee/api/group_protected_environments.html#protect-a-single-environment
   161  type GroupEnvironmentApprovalRuleOptions struct {
   162  	UserID                 *int              `url:"user_id,omitempty" json:"user_id,omitempty"`
   163  	GroupID                *int              `url:"group_id,omitempty" json:"group_id,omitempty"`
   164  	AccessLevel            *AccessLevelValue `url:"access_level,omitempty" json:"access_level,omitempty"`
   165  	AccessLevelDescription *string           `url:"access_level_description,omitempty" json:"access_level_description,omitempty"`
   166  	RequiredApprovalCount  *int              `url:"required_approvals,omitempty" json:"required_approvals,omitempty"`
   167  	GroupInheritanceType   *int              `url:"group_inheritance_type,omitempty" json:"group_inheritance_type,omitempty"`
   168  }
   169  
   170  // ProtectGroupEnvironment protects a single group-level environment.
   171  //
   172  // GitLab API docs:
   173  // https://docs.gitlab.com/ee/api/group_protected_environments.html#protect-a-single-environment
   174  func (s *GroupProtectedEnvironmentsService) ProtectGroupEnvironment(gid interface{}, opt *ProtectGroupEnvironmentOptions, options ...RequestOptionFunc) (*GroupProtectedEnvironment, *Response, error) {
   175  	group, err := parseID(gid)
   176  	if err != nil {
   177  		return nil, nil, err
   178  	}
   179  	u := fmt.Sprintf("groups/%s/protected_environments", PathEscape(group))
   180  
   181  	req, err := s.client.NewRequest(http.MethodPost, u, opt, options)
   182  	if err != nil {
   183  		return nil, nil, err
   184  	}
   185  
   186  	pe := new(GroupProtectedEnvironment)
   187  	resp, err := s.client.Do(req, pe)
   188  	if err != nil {
   189  		return nil, resp, err
   190  	}
   191  
   192  	return pe, resp, nil
   193  }
   194  
   195  // UpdateGroupProtectedEnvironmentOptions represents the available
   196  // UpdateGroupProtectedEnvironment() options.
   197  //
   198  // GitLab API docs:
   199  // https://docs.gitlab.com/ee/api/group_protected_environments.html#update-a-protected-environment
   200  type UpdateGroupProtectedEnvironmentOptions struct {
   201  	Name                  *string                                       `url:"name,omitempty" json:"name,omitempty"`
   202  	DeployAccessLevels    *[]*UpdateGroupEnvironmentAccessOptions       `url:"deploy_access_levels,omitempty" json:"deploy_access_levels,omitempty"`
   203  	RequiredApprovalCount *int                                          `url:"required_approval_count,omitempty" json:"required_approval_count,omitempty"`
   204  	ApprovalRules         *[]*UpdateGroupEnvironmentApprovalRuleOptions `url:"approval_rules,omitempty" json:"approval_rules,omitempty"`
   205  }
   206  
   207  // UpdateGroupEnvironmentAccessOptions represents the options for updates to the
   208  // access decription for a group-level protected environment.
   209  //
   210  // GitLab API docs:
   211  // https://docs.gitlab.com/ee/api/group_protected_environments.html#update-a-protected-environment
   212  type UpdateGroupEnvironmentAccessOptions struct {
   213  	AccessLevel          *AccessLevelValue `url:"access_level,omitempty" json:"access_level,omitempty"`
   214  	ID                   *int              `url:"id,omitempty" json:"id,omitempty"`
   215  	UserID               *int              `url:"user_id,omitempty" json:"user_id,omitempty"`
   216  	GroupID              *int              `url:"group_id,omitempty" json:"group_id,omitempty"`
   217  	GroupInheritanceType *int              `url:"group_inheritance_type,omitempty" json:"group_inheritance_type,omitempty"`
   218  	Destroy              *bool             `url:"_destroy,omitempty" json:"_destroy,omitempty"`
   219  }
   220  
   221  // UpdateGroupEnvironmentApprovalRuleOptions represents the updates to the
   222  // approval rules for a group-level protected environment.
   223  //
   224  // GitLab API docs:
   225  // https://docs.gitlab.com/ee/api/group_protected_environments.html#update-a-protected-environment
   226  type UpdateGroupEnvironmentApprovalRuleOptions struct {
   227  	ID                     *int              `url:"id,omitempty" json:"id,omitempty"`
   228  	UserID                 *int              `url:"user_id,omitempty" json:"user_id,omitempty"`
   229  	GroupID                *int              `url:"group_id,omitempty" json:"group_id,omitempty"`
   230  	AccessLevel            *AccessLevelValue `url:"access_level,omitempty" json:"access_level,omitempty"`
   231  	AccessLevelDescription *string           `url:"access_level_description,omitempty" json:"access_level_description,omitempty"`
   232  	RequiredApprovalCount  *int              `url:"required_approvals,omitempty" json:"required_approvals,omitempty"`
   233  	GroupInheritanceType   *int              `url:"group_inheritance_type,omitempty" json:"group_inheritance_type,omitempty"`
   234  	Destroy                *bool             `url:"_destroy,omitempty" json:"_destroy,omitempty"`
   235  }
   236  
   237  // UpdateGroupProtectedEnvironment updates a single group-level protected
   238  // environment.
   239  //
   240  // GitLab API docs:
   241  // https://docs.gitlab.com/ee/api/group_protected_environments.html#update-a-protected-environment
   242  func (s *GroupProtectedEnvironmentsService) UpdateGroupProtectedEnvironment(gid interface{}, environment string, opt *UpdateGroupProtectedEnvironmentOptions, options ...RequestOptionFunc) (*GroupProtectedEnvironment, *Response, error) {
   243  	group, err := parseID(gid)
   244  	if err != nil {
   245  		return nil, nil, err
   246  	}
   247  	u := fmt.Sprintf("groups/%s/protected_environments/%s", PathEscape(group), environment)
   248  
   249  	req, err := s.client.NewRequest(http.MethodPut, u, opt, options)
   250  	if err != nil {
   251  		return nil, nil, err
   252  	}
   253  
   254  	pe := new(GroupProtectedEnvironment)
   255  	resp, err := s.client.Do(req, pe)
   256  	if err != nil {
   257  		return nil, resp, err
   258  	}
   259  
   260  	return pe, resp, nil
   261  }
   262  
   263  // UnprotectGroupEnvironment unprotects the given protected group-level
   264  // environment.
   265  //
   266  // GitLab API docs:
   267  // https://docs.gitlab.com/ee/api/group_protected_environments.html#unprotect-a-single-environment
   268  func (s *GroupProtectedEnvironmentsService) UnprotectGroupEnvironment(gid interface{}, environment string, options ...RequestOptionFunc) (*Response, error) {
   269  	group, err := parseID(gid)
   270  	if err != nil {
   271  		return nil, err
   272  	}
   273  	u := fmt.Sprintf("groups/%s/protected_environments/%s", PathEscape(group), environment)
   274  
   275  	req, err := s.client.NewRequest(http.MethodDelete, u, nil, options)
   276  	if err != nil {
   277  		return nil, err
   278  	}
   279  
   280  	return s.client.Do(req, nil)
   281  }
   282  

View as plain text