Bump github.com/xanzy/go-gitlab from 0.109.0 to 0.112.0 (#468)

Bumps [github.com/xanzy/go-gitlab](https://github.com/xanzy/go-gitlab) from 0.109.0 to 0.112.0.
- [Release notes](https://github.com/xanzy/go-gitlab/releases)
- [Changelog](https://github.com/xanzy/go-gitlab/blob/main/releases_test.go)
- [Commits](https://github.com/xanzy/go-gitlab/compare/v0.109.0...v0.112.0)

---
updated-dependencies:
- dependency-name: github.com/xanzy/go-gitlab
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: gabrie30 <gabrie30@users.noreply.github.com>
This commit is contained in:
dependabot[bot]
2024-11-01 08:33:23 -07:00
committed by GitHub
parent 59398e1413
commit a3afe34985
16 changed files with 879 additions and 530 deletions

2
go.mod
View File

@@ -15,7 +15,7 @@ require (
github.com/mitchellh/go-homedir v1.1.0
github.com/spf13/cobra v1.8.1
github.com/spf13/viper v1.19.0
github.com/xanzy/go-gitlab v0.109.0
github.com/xanzy/go-gitlab v0.112.0
golang.org/x/oauth2 v0.23.0
gopkg.in/yaml.v2 v2.4.0
)

4
go.sum
View File

@@ -152,8 +152,8 @@ github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsT
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
github.com/xanzy/go-gitlab v0.109.0 h1:RcRme5w8VpLXTSTTMZdVoQWY37qTJWg+gwdQl4aAttE=
github.com/xanzy/go-gitlab v0.109.0/go.mod h1:wKNKh3GkYDMOsGmnfuX+ITCmDuSDWFO0G+C4AygL9RY=
github.com/xanzy/go-gitlab v0.112.0 h1:6Z0cqEooCvBMfBIHw+CgO4AKGRV8na/9781xOb0+DKw=
github.com/xanzy/go-gitlab v0.112.0/go.mod h1:wKNKh3GkYDMOsGmnfuX+ITCmDuSDWFO0G+C4AygL9RY=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE=
go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=

View File

@@ -14,6 +14,7 @@ type AuditEvent struct {
AuthorID int `json:"author_id"`
EntityID int `json:"entity_id"`
EntityType string `json:"entity_type"`
EventName string `json:"event_name"`
Details AuditEventDetails `json:"details"`
CreatedAt *time.Time `json:"created_at"`
EventType string `json:"event_type"`
@@ -42,6 +43,7 @@ type AuditEventDetails struct {
IPAddress string `json:"ip_address"`
EntityPath string `json:"entity_path"`
FailedLogin string `json:"failed_login"`
EventName string `json:"event_name"`
}
// AuditEventsService handles communication with the project/group/instance

View File

@@ -34,16 +34,20 @@ type EnvironmentsService struct {
//
// GitLab API docs: https://docs.gitlab.com/ee/api/environments.html
type Environment struct {
ID int `json:"id"`
Name string `json:"name"`
Slug string `json:"slug"`
State string `json:"state"`
Tier string `json:"tier"`
ExternalURL string `json:"external_url"`
Project *Project `json:"project"`
CreatedAt *time.Time `json:"created_at"`
UpdatedAt *time.Time `json:"updated_at"`
LastDeployment *Deployment `json:"last_deployment"`
ID int `json:"id"`
Name string `json:"name"`
Slug string `json:"slug"`
Description string `json:"description"`
State string `json:"state"`
Tier string `json:"tier"`
ExternalURL string `json:"external_url"`
Project *Project `json:"project"`
CreatedAt *time.Time `json:"created_at"`
UpdatedAt *time.Time `json:"updated_at"`
LastDeployment *Deployment `json:"last_deployment"`
ClusterAgent *Agent `json:"cluster_agent"`
KubernetesNamespace string `json:"kubernetes_namespace"`
FluxResourcePath string `json:"flux_resource_path"`
}
func (env Environment) String() string {
@@ -117,9 +121,13 @@ func (s *EnvironmentsService) GetEnvironment(pid interface{}, environment int, o
// GitLab API docs:
// https://docs.gitlab.com/ee/api/environments.html#create-a-new-environment
type CreateEnvironmentOptions struct {
Name *string `url:"name,omitempty" json:"name,omitempty"`
ExternalURL *string `url:"external_url,omitempty" json:"external_url,omitempty"`
Tier *string `url:"tier,omitempty" json:"tier,omitempty"`
Name *string `url:"name,omitempty" json:"name,omitempty"`
Description *string `url:"description,omitempty" json:"description,omitempty"`
ExternalURL *string `url:"external_url,omitempty" json:"external_url,omitempty"`
Tier *string `url:"tier,omitempty" json:"tier,omitempty"`
ClusterAgentID *int `url:"cluster_agent_id,omitempty" json:"cluster_agent_id,omitempty"`
KubernetesNamespace *string `url:"kubernetes_namespace,omitempty" json:"kubernetes_namespace,omitempty"`
FluxResourcePath *string `url:"flux_resource_path,omitempty" json:"flux_resource_path,omitempty"`
}
// CreateEnvironment adds an environment to a project. This is an idempotent
@@ -155,9 +163,13 @@ func (s *EnvironmentsService) CreateEnvironment(pid interface{}, opt *CreateEnvi
// GitLab API docs:
// https://docs.gitlab.com/ee/api/environments.html#update-an-existing-environment
type EditEnvironmentOptions struct {
Name *string `url:"name,omitempty" json:"name,omitempty"`
ExternalURL *string `url:"external_url,omitempty" json:"external_url,omitempty"`
Tier *string `url:"tier,omitempty" json:"tier,omitempty"`
Name *string `url:"name,omitempty" json:"name,omitempty"`
Description *string `url:"description,omitempty" json:"description,omitempty"`
ExternalURL *string `url:"external_url,omitempty" json:"external_url,omitempty"`
Tier *string `url:"tier,omitempty" json:"tier,omitempty"`
ClusterAgentID *int `url:"cluster_agent_id,omitempty" json:"cluster_agent_id,omitempty"`
KubernetesNamespace *string `url:"kubernetes_namespace,omitempty" json:"kubernetes_namespace,omitempty"`
FluxResourcePath *string `url:"flux_resource_path,omitempty" json:"flux_resource_path,omitempty"`
}
// EditEnvironment updates a project team environment to a specified access level..

View File

@@ -721,6 +721,10 @@ type MergeEvent struct {
Previous int `json:"previous"`
Current int `json:"current"`
} `json:"last_edited_by_id"`
MergeStatus struct {
Previous string `json:"previous"`
Current string `json:"current"`
} `json:"merge_status"`
MilestoneID struct {
Previous int `json:"previous"`
Current int `json:"current"`

View File

@@ -30,17 +30,6 @@ type GroupMembersService struct {
client *Client
}
// GroupMemberSAMLIdentity represents the SAML Identity link for the group member.
//
// GitLab API docs: https://docs.gitlab.com/ee/api/members.html#list-all-members-of-a-group-or-project
// Gitlab MR for API change: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/20357
// Gitlab MR for API Doc change: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/25652
type GroupMemberSAMLIdentity struct {
ExternUID string `json:"extern_uid"`
Provider string `json:"provider"`
SAMLProviderID int `json:"saml_provider_id"`
}
// GroupMember represents a GitLab group member.
//
// GitLab API docs: https://docs.gitlab.com/ee/api/members.html
@@ -59,6 +48,50 @@ type GroupMember struct {
MemberRole *MemberRole `json:"member_role"`
}
// GroupMemberSAMLIdentity represents the SAML Identity link for the group member.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/members.html#list-all-members-of-a-group-or-project
type GroupMemberSAMLIdentity struct {
ExternUID string `json:"extern_uid"`
Provider string `json:"provider"`
SAMLProviderID int `json:"saml_provider_id"`
}
// BillableGroupMember represents a GitLab billable group member.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/members.html#list-all-billable-members-of-a-group
type BillableGroupMember struct {
ID int `json:"id"`
Username string `json:"username"`
Name string `json:"name"`
State string `json:"state"`
AvatarURL string `json:"avatar_url"`
WebURL string `json:"web_url"`
Email string `json:"email"`
LastActivityOn *ISOTime `json:"last_activity_on"`
MembershipType string `json:"membership_type"`
Removable bool `json:"removable"`
CreatedAt *time.Time `json:"created_at"`
IsLastOwner bool `json:"is_last_owner"`
LastLoginAt *time.Time `json:"last_login_at"`
}
// BillableUserMembership represents a Membership of a billable user of a group
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/members.html#list-memberships-for-a-billable-member-of-a-group
type BillableUserMembership struct {
ID int `json:"id"`
SourceID int `json:"source_id"`
SourceFullName string `json:"source_full_name"`
SourceMembersURL string `json:"source_members_url"`
CreatedAt *time.Time `json:"created_at"`
ExpiresAt *time.Time `json:"expires_at"`
AccessLevel *AccessLevelDetails `json:"access_level"`
}
// ListGroupMembersOptions represents the available ListGroupMembers() and
// ListAllGroupMembers() options.
//
@@ -184,25 +217,6 @@ func (s *GroupMembersService) GetInheritedGroupMember(gid interface{}, user int,
return gm, resp, err
}
// BillableGroupMember represents a GitLab billable group member.
//
// GitLab API docs: https://docs.gitlab.com/ee/api/members.html#list-all-billable-members-of-a-group
type BillableGroupMember struct {
ID int `json:"id"`
Username string `json:"username"`
Name string `json:"name"`
State string `json:"state"`
AvatarURL string `json:"avatar_url"`
WebURL string `json:"web_url"`
Email string `json:"email"`
LastActivityOn *ISOTime `json:"last_activity_on"`
MembershipType string `json:"membership_type"`
Removable bool `json:"removable"`
CreatedAt *time.Time `json:"created_at"`
IsLastOwner bool `json:"is_last_owner"`
LastLoginAt *time.Time `json:"last_login_at"`
}
// ListBillableGroupMembersOptions represents the available ListBillableGroupMembers() options.
//
// GitLab API docs:
@@ -239,6 +253,32 @@ func (s *GroupsService) ListBillableGroupMembers(gid interface{}, opt *ListBilla
return bgm, resp, nil
}
// ListMembershipsForBillableGroupMember Gets a list of memberships for a billable member of a group.
// Lists all projects and groups a user is a member of. Only projects and groups within the group hierarchy are included.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/members.html#list-memberships-for-a-billable-member-of-a-group
func (s *GroupsService) ListMembershipsForBillableGroupMember(gid interface{}, user int, options ...RequestOptionFunc) ([]*BillableUserMembership, *Response, error) {
group, err := parseID(gid)
if err != nil {
return nil, nil, err
}
u := fmt.Sprintf("groups/%s/billable_members/%d/memberships", PathEscape(group), user)
req, err := s.client.NewRequest(http.MethodGet, u, nil, options)
if err != nil {
return nil, nil, err
}
var bum []*BillableUserMembership
resp, err := s.client.Do(req, &bum)
if err != nil {
return nil, resp, err
}
return bum, resp, nil
}
// RemoveBillableGroupMember removes a given group members that count as billable.
//
// GitLab API docs:

View File

@@ -39,42 +39,38 @@ type GroupsService struct {
//
// GitLab API docs: https://docs.gitlab.com/ee/api/groups.html
type Group struct {
ID int `json:"id"`
Name string `json:"name"`
Path string `json:"path"`
Description string `json:"description"`
MembershipLock bool `json:"membership_lock"`
Visibility VisibilityValue `json:"visibility"`
LFSEnabled bool `json:"lfs_enabled"`
DefaultBranchProtectionDefaults struct {
AllowedToPush []*GroupAccessLevel `json:"allowed_to_push"`
AllowForcePush bool `json:"allow_force_push"`
AllowedToMerge []*GroupAccessLevel `json:"allowed_to_merge"`
DeveloperCanInitialPush bool `json:"developer_can_initial_push"`
} `json:"default_branch_protection_defaults"`
AvatarURL string `json:"avatar_url"`
WebURL string `json:"web_url"`
RequestAccessEnabled bool `json:"request_access_enabled"`
RepositoryStorage string `json:"repository_storage"`
FullName string `json:"full_name"`
FullPath string `json:"full_path"`
FileTemplateProjectID int `json:"file_template_project_id"`
ParentID int `json:"parent_id"`
Projects []*Project `json:"projects"`
Statistics *Statistics `json:"statistics"`
CustomAttributes []*CustomAttribute `json:"custom_attributes"`
ShareWithGroupLock bool `json:"share_with_group_lock"`
RequireTwoFactorAuth bool `json:"require_two_factor_authentication"`
TwoFactorGracePeriod int `json:"two_factor_grace_period"`
ProjectCreationLevel ProjectCreationLevelValue `json:"project_creation_level"`
AutoDevopsEnabled bool `json:"auto_devops_enabled"`
SubGroupCreationLevel SubGroupCreationLevelValue `json:"subgroup_creation_level"`
EmailsEnabled bool `json:"emails_enabled"`
MentionsDisabled bool `json:"mentions_disabled"`
RunnersToken string `json:"runners_token"`
SharedProjects []*Project `json:"shared_projects"`
SharedRunnersSetting SharedRunnersSettingValue `json:"shared_runners_setting"`
SharedWithGroups []struct {
ID int `json:"id"`
Name string `json:"name"`
Path string `json:"path"`
Description string `json:"description"`
MembershipLock bool `json:"membership_lock"`
Visibility VisibilityValue `json:"visibility"`
LFSEnabled bool `json:"lfs_enabled"`
DefaultBranch string `json:"default_branch"`
DefaultBranchProtectionDefaults *BranchProtectionDefaults `json:"default_branch_protection_defaults"`
AvatarURL string `json:"avatar_url"`
WebURL string `json:"web_url"`
RequestAccessEnabled bool `json:"request_access_enabled"`
RepositoryStorage string `json:"repository_storage"`
FullName string `json:"full_name"`
FullPath string `json:"full_path"`
FileTemplateProjectID int `json:"file_template_project_id"`
ParentID int `json:"parent_id"`
Projects []*Project `json:"projects"`
Statistics *Statistics `json:"statistics"`
CustomAttributes []*CustomAttribute `json:"custom_attributes"`
ShareWithGroupLock bool `json:"share_with_group_lock"`
RequireTwoFactorAuth bool `json:"require_two_factor_authentication"`
TwoFactorGracePeriod int `json:"two_factor_grace_period"`
ProjectCreationLevel ProjectCreationLevelValue `json:"project_creation_level"`
AutoDevopsEnabled bool `json:"auto_devops_enabled"`
SubGroupCreationLevel SubGroupCreationLevelValue `json:"subgroup_creation_level"`
EmailsEnabled bool `json:"emails_enabled"`
MentionsDisabled bool `json:"mentions_disabled"`
RunnersToken string `json:"runners_token"`
SharedProjects []*Project `json:"shared_projects"`
SharedRunnersSetting SharedRunnersSettingValue `json:"shared_runners_setting"`
SharedWithGroups []struct {
GroupID int `json:"group_id"`
GroupName string `json:"group_name"`
GroupFullPath string `json:"group_full_path"`
@@ -100,6 +96,17 @@ type Group struct {
DefaultBranchProtection int `json:"default_branch_protection"`
}
// BranchProtectionDefaults represents default Git protected branch permissions.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/groups.html#options-for-default_branch_protection_defaults
type BranchProtectionDefaults struct {
AllowedToPush []*GroupAccessLevel `json:"allowed_to_push,omitempty"`
AllowForcePush bool `json:"allow_force_push,omitempty"`
AllowedToMerge []*GroupAccessLevel `json:"allowed_to_merge,omitempty"`
DeveloperCanInitialPush bool `json:"developer_can_initial_push,omitempty"`
}
// GroupAccessLevel represents default branch protection defaults access levels.
//
// GitLab API docs:
@@ -358,6 +365,7 @@ type CreateGroupOptions struct {
Name *string `url:"name,omitempty" json:"name,omitempty"`
Path *string `url:"path,omitempty" json:"path,omitempty"`
Avatar *GroupAvatar `url:"-" json:"-"`
DefaultBranch *string `url:"default_branch,omitempty" json:"default_branch,omitempty"`
Description *string `url:"description,omitempty" json:"description,omitempty"`
MembershipLock *bool `url:"membership_lock,omitempty" json:"membership_lock,omitempty"`
Visibility *VisibilityValue `url:"visibility,omitempty" json:"visibility,omitempty"`
@@ -502,6 +510,7 @@ type UpdateGroupOptions struct {
Name *string `url:"name,omitempty" json:"name,omitempty"`
Path *string `url:"path,omitempty" json:"path,omitempty"`
Avatar *GroupAvatar `url:"-" json:"avatar,omitempty"`
DefaultBranch *string `url:"default_branch,omitempty" json:"default_branch,omitempty"`
Description *string `url:"description,omitempty" json:"description,omitempty"`
MembershipLock *bool `url:"membership_lock,omitempty" json:"membership_lock,omitempty"`
Visibility *VisibilityValue `url:"visibility,omitempty" json:"visibility,omitempty"`

View File

@@ -19,12 +19,33 @@ package gitlab
import (
"fmt"
"net/http"
"time"
)
type PagesService struct {
client *Client
}
// Pages represents the Pages of a project.
//
// GitLab API docs: https://docs.gitlab.com/ee/api/pages.html
type Pages struct {
URL string `json:"url"`
IsUniqueDomainEnabled bool `json:"is_unique_domain_enabled"`
ForceHTTPS bool `json:"force_https"`
Deployments []*PagesDeployment `json:"deployments"`
}
// PagesDeployment represents a Pages deployment.
//
// GitLab API docs: https://docs.gitlab.com/ee/api/pages.html
type PagesDeployment struct {
CreatedAt time.Time `json:"created_at"`
URL string `json:"url"`
PathPrefix string `json:"path_prefix"`
RootDirectory string `json:"root_directory"`
}
// UnpublishPages unpublished pages. The user must have admin privileges.
//
// GitLab API docs:
@@ -43,3 +64,29 @@ func (s *PagesService) UnpublishPages(gid interface{}, options ...RequestOptionF
return s.client.Do(req, nil)
}
// GetPages lists Pages settings for a project. The user must have at least
// maintainer privileges.
//
// GitLab API Docs:
// https://docs.gitlab.com/ee/api/pages.html#get-pages-settings-for-a-project
func (s *PagesService) GetPages(gid interface{}, options ...RequestOptionFunc) (*Pages, *Response, error) {
project, err := parseID(gid)
if err != nil {
return nil, nil, err
}
u := fmt.Sprintf("projects/%s/pages", PathEscape(project))
req, err := s.client.NewRequest(http.MethodGet, u, nil, options)
if err != nil {
return nil, nil, err
}
p := new(Pages)
resp, err := s.client.Do(req, p)
if err != nil {
return nil, resp, err
}
return p, resp, nil
}

View File

@@ -66,6 +66,7 @@ type Project struct {
ContainerRegistryAccessLevel AccessControlValue `json:"container_registry_access_level"`
ContainerRegistryImagePrefix string `json:"container_registry_image_prefix,omitempty"`
CreatedAt *time.Time `json:"created_at,omitempty"`
UpdatedAt *time.Time `json:"updated_at,omitempty"`
LastActivityAt *time.Time `json:"last_activity_at,omitempty"`
CreatorID int `json:"creator_id"`
Namespace *ProjectNamespace `json:"namespace"`
@@ -83,6 +84,7 @@ type Project struct {
StarCount int `json:"star_count"`
RunnersToken string `json:"runners_token"`
AllowMergeOnSkippedPipeline bool `json:"allow_merge_on_skipped_pipeline"`
AllowPipelineTriggerApproveDeployment bool `json:"allow_pipeline_trigger_approve_deployment"`
OnlyAllowMergeIfPipelineSucceeds bool `json:"only_allow_merge_if_pipeline_succeeds"`
OnlyAllowMergeIfAllDiscussionsAreResolved bool `json:"only_allow_merge_if_all_discussions_are_resolved"`
RemoveSourceBranchAfterMerge bool `json:"remove_source_branch_after_merge"`
@@ -1159,18 +1161,28 @@ func (s *ProjectsService) UnarchiveProject(pid interface{}, options ...RequestOp
return p, resp, nil
}
// DeleteProjectOptions represents the available DeleteProject() options.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/projects.html#delete-project
type DeleteProjectOptions struct {
FullPath *string `url:"full_path" json:"full_path"`
PermanentlyRemove *bool `url:"permanently_remove" json:"permanently_remove"`
}
// DeleteProject removes a project including all associated resources
// (issues, merge requests etc.)
//
// GitLab API docs: https://docs.gitlab.com/ee/api/projects.html#delete-project
func (s *ProjectsService) DeleteProject(pid interface{}, options ...RequestOptionFunc) (*Response, error) {
// GitLab API docs:
// https://docs.gitlab.com/ee/api/projects.html#delete-project
func (s *ProjectsService) DeleteProject(pid interface{}, opt *DeleteProjectOptions, options ...RequestOptionFunc) (*Response, error) {
project, err := parseID(pid)
if err != nil {
return nil, err
}
u := fmt.Sprintf("projects/%s", PathEscape(project))
req, err := s.client.NewRequest(http.MethodDelete, u, nil, options)
req, err := s.client.NewRequest(http.MethodDelete, u, opt, options)
if err != nil {
return nil, err
}
@@ -1178,7 +1190,7 @@ func (s *ProjectsService) DeleteProject(pid interface{}, options ...RequestOptio
return s.client.Do(req, nil)
}
// ShareWithGroupOptions represents options to share project with groups
// ShareWithGroupOptions represents the available SharedWithGroup() options.
//
// GitLab API docs: https://docs.gitlab.com/ee/api/projects.html#share-project-with-group
type ShareWithGroupOptions struct {
@@ -1271,6 +1283,7 @@ type ProjectHook struct {
DeploymentEvents bool `json:"deployment_events"`
ReleasesEvents bool `json:"releases_events"`
EnableSSLVerification bool `json:"enable_ssl_verification"`
AlertStatus string `json:"alert_status"`
CreatedAt *time.Time `json:"created_at"`
ResourceAccessTokenEvents bool `json:"resource_access_token_events"`
CustomWebhookTemplate string `json:"custom_webhook_template"`
@@ -1481,8 +1494,8 @@ func (s *ProjectsService) TriggerTestProjectHook(pid interface{}, hook int, even
return s.client.Do(req, nil)
}
// SetHookCustomHeaderOptions represents a project or group hook custom header.
// If the header isn't present, it will be created.
// SetHookCustomHeaderOptions represents the available SetProjectCustomHeader()
// options.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/projects.html#set-a-custom-header
@@ -1927,9 +1940,11 @@ func (s *ProjectsService) ChangeApprovalConfiguration(pid interface{}, opt *Chan
return pa, resp, nil
}
// GetProjectApprovalRulesListsOptions represents the available GetProjectApprovalRules() options.
// GetProjectApprovalRulesListsOptions represents the available
// GetProjectApprovalRules() options.
//
// GitLab API docs: https://docs.gitlab.com/ee/api/merge_request_approvals.html#get-project-level-rules
// GitLab API docs:
// https://docs.gitlab.com/ee/api/merge_request_approvals.html#get-project-level-rules
type GetProjectApprovalRulesListsOptions ListOptions
// GetProjectApprovalRules looks up the list of project level approver rules.
@@ -2182,7 +2197,8 @@ func (s *ProjectsService) StartMirroringProject(pid interface{}, options ...Requ
// TransferProjectOptions represents the available TransferProject() options.
//
// GitLab API docs: https://docs.gitlab.com/ee/api/projects.html#transfer-a-project-to-a-new-namespace
// GitLab API docs:
// https://docs.gitlab.com/ee/api/projects.html#transfer-a-project-to-a-new-namespace
type TransferProjectOptions struct {
Namespace interface{} `url:"namespace,omitempty" json:"namespace,omitempty"`
}

View File

@@ -54,6 +54,7 @@ type BranchAccessDescription struct {
ID int `json:"id"`
AccessLevel AccessLevelValue `json:"access_level"`
AccessLevelDescription string `json:"access_level_description"`
DeployKeyID int `json:"deploy_key_id"`
UserID int `json:"user_id"`
GroupID int `json:"group_id"`
}

View File

@@ -52,19 +52,20 @@ type Runner struct {
//
// GitLab API docs: https://docs.gitlab.com/ee/api/runners.html
type RunnerDetails struct {
Paused bool `json:"paused"`
Architecture string `json:"architecture"`
Description string `json:"description"`
ID int `json:"id"`
IPAddress string `json:"ip_address"`
IsShared bool `json:"is_shared"`
RunnerType string `json:"runner_type"`
ContactedAt *time.Time `json:"contacted_at"`
Name string `json:"name"`
Online bool `json:"online"`
Status string `json:"status"`
Platform string `json:"platform"`
Projects []struct {
Paused bool `json:"paused"`
Architecture string `json:"architecture"`
Description string `json:"description"`
ID int `json:"id"`
IPAddress string `json:"ip_address"`
IsShared bool `json:"is_shared"`
RunnerType string `json:"runner_type"`
ContactedAt *time.Time `json:"contacted_at"`
MaintenanceNote string `json:"maintenance_note"`
Name string `json:"name"`
Online bool `json:"online"`
Status string `json:"status"`
Platform string `json:"platform"`
Projects []struct {
ID int `json:"id"`
Name string `json:"name"`
NameWithNamespace string `json:"name_with_namespace"`
@@ -173,13 +174,14 @@ func (s *RunnersService) GetRunnerDetails(rid interface{}, options ...RequestOpt
// GitLab API docs:
// https://docs.gitlab.com/ee/api/runners.html#update-runners-details
type UpdateRunnerDetailsOptions struct {
Description *string `url:"description,omitempty" json:"description,omitempty"`
Paused *bool `url:"paused,omitempty" json:"paused,omitempty"`
TagList *[]string `url:"tag_list[],omitempty" json:"tag_list,omitempty"`
RunUntagged *bool `url:"run_untagged,omitempty" json:"run_untagged,omitempty"`
Locked *bool `url:"locked,omitempty" json:"locked,omitempty"`
AccessLevel *string `url:"access_level,omitempty" json:"access_level,omitempty"`
MaximumTimeout *int `url:"maximum_timeout,omitempty" json:"maximum_timeout,omitempty"`
Description *string `url:"description,omitempty" json:"description,omitempty"`
Paused *bool `url:"paused,omitempty" json:"paused,omitempty"`
TagList *[]string `url:"tag_list[],omitempty" json:"tag_list,omitempty"`
RunUntagged *bool `url:"run_untagged,omitempty" json:"run_untagged,omitempty"`
Locked *bool `url:"locked,omitempty" json:"locked,omitempty"`
AccessLevel *string `url:"access_level,omitempty" json:"access_level,omitempty"`
MaximumTimeout *int `url:"maximum_timeout,omitempty" json:"maximum_timeout,omitempty"`
MaintenanceNote *string `url:"maintenance_note,omitempty" json:"maintenance_note,omitempty"`
// Deprecated: Use Paused instead. (Deprecated in GitLab 14.8)
Active *bool `url:"active,omitempty" json:"active,omitempty"`

View File

@@ -767,6 +767,103 @@ func (s *ServicesService) DeleteGithubService(pid interface{}, options ...Reques
return s.client.Do(req, nil)
}
// HarborService represents the Harbor service settings.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/integrations.html#harbor
type HarborService struct {
Service
Properties *HarborServiceProperties `json:"properties"`
}
// HarborServiceProperties represents Harbor specific properties.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/integrations.html#harbor
type HarborServiceProperties struct {
URL string `json:"url"`
ProjectName string `json:"project_name"`
Username string `json:"username"`
Password string `json:"password"`
UseInheritedSettings bool `json:"use_inherited_settings"`
}
// GetHarborService gets Harbor service settings for a project.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/integrations.html#get-harbor-settings
func (s *ServicesService) GetHarborService(pid interface{}, options ...RequestOptionFunc) (*HarborService, *Response, error) {
project, err := parseID(pid)
if err != nil {
return nil, nil, err
}
u := fmt.Sprintf("projects/%s/integrations/harbor", PathEscape(project))
req, err := s.client.NewRequest(http.MethodGet, u, nil, options)
if err != nil {
return nil, nil, err
}
svc := new(HarborService)
resp, err := s.client.Do(req, svc)
if err != nil {
return nil, resp, err
}
return svc, resp, nil
}
// SetHarborServiceOptions represents the available SetHarborService()
// options.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/integrations.html#set-up-harbor
type SetHarborServiceOptions struct {
URL *string `url:"url,omitempty" json:"url,omitempty"`
ProjectName *string `url:"project_name,omitempty" json:"project_name,omitempty"`
Username *string `url:"username,omitempty" json:"username,omitempty"`
Password *string `url:"password,omitempty" json:"password,omitempty"`
UseInheritedSettings *bool `url:"use_inherited_settings,omitempty" json:"use_inherited_settings,omitempty"`
}
// SetHarborService sets Harbor service for a project.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/integrations.html#set-up-harbor
func (s *ServicesService) SetHarborService(pid interface{}, opt *SetHarborServiceOptions, options ...RequestOptionFunc) (*Response, error) {
project, err := parseID(pid)
if err != nil {
return nil, err
}
u := fmt.Sprintf("projects/%s/integrations/harbor", PathEscape(project))
req, err := s.client.NewRequest(http.MethodPut, u, opt, options)
if err != nil {
return nil, err
}
return s.client.Do(req, nil)
}
// DeleteHarborService deletes Harbor service for a project.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/integrations.html#disable-harbor
func (s *ServicesService) DeleteHarborService(pid interface{}, options ...RequestOptionFunc) (*Response, error) {
project, err := parseID(pid)
if err != nil {
return nil, err
}
u := fmt.Sprintf("projects/%s/integrations/harbor", PathEscape(project))
req, err := s.client.NewRequest(http.MethodDelete, u, nil, options)
if err != nil {
return nil, err
}
return s.client.Do(req, nil)
}
// SlackApplication represents GitLab for slack application settings.
//
// GitLab API docs:
@@ -1758,6 +1855,101 @@ func (s *ServicesService) DeletePrometheusService(pid interface{}, options ...Re
return s.client.Do(req, nil)
}
// RedmineService represents the Redmine service settings.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/integrations.html#redmine
type RedmineService struct {
Service
Properties *RedmineServiceProperties `json:"properties"`
}
// RedmineServiceProperties represents Redmine specific properties.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/integrations.html#redmine
type RedmineServiceProperties struct {
NewIssueURL string `json:"new_issue_url"`
ProjectURL string `json:"project_url"`
IssuesURL string `json:"issues_url"`
UseInheritedSettings BoolValue `json:"use_inherited_settings"`
}
// GetRedmineService gets Redmine service settings for a project.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/integrations.html#get-redmine-settings
func (s *ServicesService) GetRedmineService(pid interface{}, options ...RequestOptionFunc) (*RedmineService, *Response, error) {
project, err := parseID(pid)
if err != nil {
return nil, nil, err
}
u := fmt.Sprintf("projects/%s/integrations/redmine", PathEscape(project))
req, err := s.client.NewRequest(http.MethodGet, u, nil, options)
if err != nil {
return nil, nil, err
}
svc := new(RedmineService)
resp, err := s.client.Do(req, svc)
if err != nil {
return nil, resp, err
}
return svc, resp, nil
}
// SetRedmineServiceOptions represents the available SetRedmineService().
// options.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/integrations.html#set-up-redmine
type SetRedmineServiceOptions struct {
NewIssueURL *string `url:"new_issue_url,omitempty" json:"new_issue_url,omitempty"`
ProjectURL *string `url:"project_url,omitempty" json:"project_url,omitempty"`
IssuesURL *string `url:"issues_url,omitempty" json:"issues_url,omitempty"`
UseInheritedSettings *bool `url:"use_inherited_settings,omitempty" json:"use_inherited_settings,omitempty"`
}
// SetRedmineService sets Redmine service for a project.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/integrations.html#set-up-redmine
func (s *ServicesService) SetRedmineService(pid interface{}, opt *SetRedmineServiceOptions, options ...RequestOptionFunc) (*Response, error) {
project, err := parseID(pid)
if err != nil {
return nil, err
}
u := fmt.Sprintf("projects/%s/integrations/redmine", PathEscape(project))
req, err := s.client.NewRequest(http.MethodPut, u, opt, options)
if err != nil {
return nil, err
}
return s.client.Do(req, nil)
}
// DeleteRedmineService deletes Redmine service for project.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/integrations.html#disable-redmine
func (s *ServicesService) DeleteRedmineService(pid interface{}, options ...RequestOptionFunc) (*Response, error) {
project, err := parseID(pid)
if err != nil {
return nil, err
}
u := fmt.Sprintf("projects/%s/integrations/redmine", PathEscape(project))
req, err := s.client.NewRequest(http.MethodDelete, u, nil, options)
if err != nil {
return nil, err
}
return s.client.Do(req, nil)
}
// SlackService represents Slack service settings.
//
// GitLab API docs:

View File

@@ -43,408 +43,408 @@ type SettingsService struct {
// https://gitlab.com/gitlab-org/gitlab/-/blob/v14.9.3-ee/ee/lib/ee/api/helpers/settings_helpers.rb#L10
// https://gitlab.com/gitlab-org/gitlab/-/blob/v14.9.3-ee/ee/app/helpers/ee/application_settings_helper.rb#L20
type Settings struct {
ID int `json:"id"`
AbuseNotificationEmail string `json:"abuse_notification_email"`
AdminMode bool `json:"admin_mode"`
AfterSignOutPath string `json:"after_sign_out_path"`
AfterSignUpText string `json:"after_sign_up_text"`
AkismetAPIKey string `json:"akismet_api_key"`
AkismetEnabled bool `json:"akismet_enabled"`
AllowAccountDeletion bool `json:"allow_account_deletion"`
AllowGroupOwnersToManageLDAP bool `json:"allow_group_owners_to_manage_ldap"`
AllowLocalRequestsFromSystemHooks bool `json:"allow_local_requests_from_system_hooks"`
AllowLocalRequestsFromWebHooksAndServices bool `json:"allow_local_requests_from_web_hooks_and_services"`
AllowProjectCreationForGuestAndBelow bool `json:"allow_project_creation_for_guest_and_below"`
AllowRunnerRegistrationToken bool `json:"allow_runner_registration_token"`
ArchiveBuildsInHumanReadable string `json:"archive_builds_in_human_readable"`
ASCIIDocMaxIncludes int `json:"asciidoc_max_includes"`
AssetProxyAllowlist []string `json:"asset_proxy_allowlist"`
AssetProxyEnabled bool `json:"asset_proxy_enabled"`
AssetProxyURL string `json:"asset_proxy_url"`
AssetProxySecretKey string `json:"asset_proxy_secret_key"`
AuthorizedKeysEnabled bool `json:"authorized_keys_enabled"`
AutoBanUserOnExcessiveProjectsDownload bool `json:"auto_ban_user_on_excessive_projects_download"`
AutoDevOpsDomain string `json:"auto_devops_domain"`
AutoDevOpsEnabled bool `json:"auto_devops_enabled"`
AutomaticPurchasedStorageAllocation bool `json:"automatic_purchased_storage_allocation"`
BulkImportConcurrentPipelineBatchLimit int `json:"bulk_import_concurrent_pipeline_batch_limit"`
BulkImportEnabled bool `json:"bulk_import_enabled"`
BulkImportMaxDownloadFileSize int `json:"bulk_import_max_download_file_size"`
CanCreateGroup bool `json:"can_create_group"`
CheckNamespacePlan bool `json:"check_namespace_plan"`
CIMaxIncludes int `json:"ci_max_includes"`
CIMaxTotalYAMLSizeBytes int `json:"ci_max_total_yaml_size_bytes"`
CommitEmailHostname string `json:"commit_email_hostname"`
ConcurrentBitbucketImportJobsLimit int `json:"concurrent_bitbucket_import_jobs_limit"`
ConcurrentBitbucketServerImportJobsLimit int `json:"concurrent_bitbucket_server_import_jobs_limit"`
ConcurrentGitHubImportJobsLimit int `json:"concurrent_github_import_jobs_limit"`
ContainerExpirationPoliciesEnableHistoricEntries bool `json:"container_expiration_policies_enable_historic_entries"`
ContainerRegistryCleanupTagsServiceMaxListSize int `json:"container_registry_cleanup_tags_service_max_list_size"`
ContainerRegistryDeleteTagsServiceTimeout int `json:"container_registry_delete_tags_service_timeout"`
ContainerRegistryExpirationPoliciesCaching bool `json:"container_registry_expiration_policies_caching"`
ContainerRegistryExpirationPoliciesWorkerCapacity int `json:"container_registry_expiration_policies_worker_capacity"`
ContainerRegistryImportCreatedBefore *time.Time `json:"container_registry_import_created_before"`
ContainerRegistryImportMaxRetries int `json:"container_registry_import_max_retries"`
ContainerRegistryImportMaxStepDuration int `json:"container_registry_import_max_step_duration"`
ContainerRegistryImportMaxTagsCount int `json:"container_registry_import_max_tags_count"`
ContainerRegistryImportStartMaxRetries int `json:"container_registry_import_start_max_retries"`
ContainerRegistryImportTargetPlan string `json:"container_registry_import_target_plan"`
ContainerRegistryTokenExpireDelay int `json:"container_registry_token_expire_delay"`
CreatedAt *time.Time `json:"created_at"`
CustomHTTPCloneURLRoot string `json:"custom_http_clone_url_root"`
DNSRebindingProtectionEnabled bool `json:"dns_rebinding_protection_enabled"`
DSAKeyRestriction int `json:"dsa_key_restriction"`
DeactivateDormantUsers bool `json:"deactivate_dormant_users"`
DeactivateDormantUsersPeriod int `json:"deactivate_dormant_users_period"`
DecompressArchiveFileTimeout int `json:"decompress_archive_file_timeout"`
DefaultArtifactsExpireIn string `json:"default_artifacts_expire_in"`
DefaultBranchName string `json:"default_branch_name"`
DefaultBranchProtection int `json:"default_branch_protection"`
DefaultBranchProtectionDefaults BranchProtectionDefaults `json:"default_branch_protection_defaults,omitempty"`
DefaultCiConfigPath string `json:"default_ci_config_path"`
DefaultGroupVisibility VisibilityValue `json:"default_group_visibility"`
DefaultPreferredLanguage string `json:"default_preferred_language"`
DefaultProjectCreation int `json:"default_project_creation"`
DefaultProjectDeletionProtection bool `json:"default_project_deletion_protection"`
DefaultProjectVisibility VisibilityValue `json:"default_project_visibility"`
DefaultProjectsLimit int `json:"default_projects_limit"`
DefaultSnippetVisibility VisibilityValue `json:"default_snippet_visibility"`
DefaultSyntaxHighlightingTheme int `json:"default_syntax_highlighting_theme"`
DelayedGroupDeletion bool `json:"delayed_group_deletion"`
DelayedProjectDeletion bool `json:"delayed_project_deletion"`
DeleteInactiveProjects bool `json:"delete_inactive_projects"`
DeleteUnconfirmedUsers bool `json:"delete_unconfirmed_users"`
DeletionAdjournedPeriod int `json:"deletion_adjourned_period"`
DiagramsnetEnabled bool `json:"diagramsnet_enabled"`
DiagramsnetURL string `json:"diagramsnet_url"`
DiffMaxFiles int `json:"diff_max_files"`
DiffMaxLines int `json:"diff_max_lines"`
DiffMaxPatchBytes int `json:"diff_max_patch_bytes"`
DisableAdminOAuthScopes bool `json:"disable_admin_oauth_scopes"`
DisableFeedToken bool `json:"disable_feed_token"`
DisableOverridingApproversPerMergeRequest bool `json:"disable_overriding_approvers_per_merge_request"`
DisablePersonalAccessTokens bool `json:"disable_personal_access_tokens"`
DisabledOauthSignInSources []string `json:"disabled_oauth_sign_in_sources"`
DomainAllowlist []string `json:"domain_allowlist"`
DomainDenylist []string `json:"domain_denylist"`
DomainDenylistEnabled bool `json:"domain_denylist_enabled"`
DownstreamPipelineTriggerLimitPerProjectUserSHA int `json:"downstream_pipeline_trigger_limit_per_project_user_sha"`
DuoFeaturesEnabled bool `json:"duo_features_enabled"`
ECDSAKeyRestriction int `json:"ecdsa_key_restriction"`
ECDSASKKeyRestriction int `json:"ecdsa_sk_key_restriction"`
EKSAccessKeyID string `json:"eks_access_key_id"`
EKSAccountID string `json:"eks_account_id"`
EKSIntegrationEnabled bool `json:"eks_integration_enabled"`
EKSSecretAccessKey string `json:"eks_secret_access_key"`
Ed25519KeyRestriction int `json:"ed25519_key_restriction"`
Ed25519SKKeyRestriction int `json:"ed25519_sk_key_restriction"`
ElasticsearchAWS bool `json:"elasticsearch_aws"`
ElasticsearchAWSAccessKey string `json:"elasticsearch_aws_access_key"`
ElasticsearchAWSRegion string `json:"elasticsearch_aws_region"`
ElasticsearchAWSSecretAccessKey string `json:"elasticsearch_aws_secret_access_key"`
ElasticsearchAnalyzersKuromojiEnabled bool `json:"elasticsearch_analyzers_kuromoji_enabled"`
ElasticsearchAnalyzersKuromojiSearch bool `json:"elasticsearch_analyzers_kuromoji_search"`
ElasticsearchAnalyzersSmartCNEnabled bool `json:"elasticsearch_analyzers_smartcn_enabled"`
ElasticsearchAnalyzersSmartCNSearch bool `json:"elasticsearch_analyzers_smartcn_search"`
ElasticsearchClientRequestTimeout int `json:"elasticsearch_client_request_timeout"`
ElasticsearchIndexedFieldLengthLimit int `json:"elasticsearch_indexed_field_length_limit"`
ElasticsearchIndexedFileSizeLimitKB int `json:"elasticsearch_indexed_file_size_limit_kb"`
ElasticsearchIndexing bool `json:"elasticsearch_indexing"`
ElasticsearchLimitIndexing bool `json:"elasticsearch_limit_indexing"`
ElasticsearchMaxBulkConcurrency int `json:"elasticsearch_max_bulk_concurrency"`
ElasticsearchMaxBulkSizeMB int `json:"elasticsearch_max_bulk_size_mb"`
ElasticsearchMaxCodeIndexingConcurrency int `json:"elasticsearch_max_code_indexing_concurrency"`
ElasticsearchNamespaceIDs []int `json:"elasticsearch_namespace_ids"`
ElasticsearchPassword string `json:"elasticsearch_password"`
ElasticsearchPauseIndexing bool `json:"elasticsearch_pause_indexing"`
ElasticsearchProjectIDs []int `json:"elasticsearch_project_ids"`
ElasticsearchReplicas int `json:"elasticsearch_replicas"`
ElasticsearchRequeueWorkers bool `json:"elasticsearch_requeue_workers"`
ElasticsearchSearch bool `json:"elasticsearch_search"`
ElasticsearchShards int `json:"elasticsearch_shards"`
ElasticsearchURL []string `json:"elasticsearch_url"`
ElasticsearchUsername string `json:"elasticsearch_username"`
ElasticsearchWorkerNumberOfShards int `json:"elasticsearch_worker_number_of_shards"`
EmailAdditionalText string `json:"email_additional_text"`
EmailAuthorInBody bool `json:"email_author_in_body"`
EmailConfirmationSetting string `json:"email_confirmation_setting"`
EmailRestrictions string `json:"email_restrictions"`
EmailRestrictionsEnabled bool `json:"email_restrictions_enabled"`
EnableArtifactExternalRedirectWarningPage bool `json:"enable_artifact_external_redirect_warning_page"`
EnabledGitAccessProtocol string `json:"enabled_git_access_protocol"`
EnforceNamespaceStorageLimit bool `json:"enforce_namespace_storage_limit"`
EnforcePATExpiration bool `json:"enforce_pat_expiration"`
EnforceSSHKeyExpiration bool `json:"enforce_ssh_key_expiration"`
EnforceTerms bool `json:"enforce_terms"`
ExternalAuthClientCert string `json:"external_auth_client_cert"`
ExternalAuthClientKey string `json:"external_auth_client_key"`
ExternalAuthClientKeyPass string `json:"external_auth_client_key_pass"`
ExternalAuthorizationServiceDefaultLabel string `json:"external_authorization_service_default_label"`
ExternalAuthorizationServiceEnabled bool `json:"external_authorization_service_enabled"`
ExternalAuthorizationServiceTimeout float64 `json:"external_authorization_service_timeout"`
ExternalAuthorizationServiceURL string `json:"external_authorization_service_url"`
ExternalPipelineValidationServiceTimeout int `json:"external_pipeline_validation_service_timeout"`
ExternalPipelineValidationServiceToken string `json:"external_pipeline_validation_service_token"`
ExternalPipelineValidationServiceURL string `json:"external_pipeline_validation_service_url"`
FailedLoginAttemptsUnlockPeriodInMinutes int `json:"failed_login_attempts_unlock_period_in_minutes"`
FileTemplateProjectID int `json:"file_template_project_id"`
FirstDayOfWeek int `json:"first_day_of_week"`
FlocEnabled bool `json:"floc_enabled"`
GeoNodeAllowedIPs string `json:"geo_node_allowed_ips"`
GeoStatusTimeout int `json:"geo_status_timeout"`
GitRateLimitUsersAlertlist []string `json:"git_rate_limit_users_alertlist"`
GitTwoFactorSessionExpiry int `json:"git_two_factor_session_expiry"`
GitalyTimeoutDefault int `json:"gitaly_timeout_default"`
GitalyTimeoutFast int `json:"gitaly_timeout_fast"`
GitalyTimeoutMedium int `json:"gitaly_timeout_medium"`
GitlabDedicatedInstance bool `json:"gitlab_dedicated_instance"`
GitlabEnvironmentToolkitInstance bool `json:"gitlab_environment_toolkit_instance"`
GitlabShellOperationLimit int `json:"gitlab_shell_operation_limit"`
GitpodEnabled bool `json:"gitpod_enabled"`
GitpodURL string `json:"gitpod_url"`
GitRateLimitUsersAllowlist []string `json:"git_rate_limit_users_allowlist"`
GloballyAllowedIPs string `json:"globally_allowed_ips"`
GrafanaEnabled bool `json:"grafana_enabled"`
GrafanaURL string `json:"grafana_url"`
GravatarEnabled bool `json:"gravatar_enabled"`
GroupDownloadExportLimit int `json:"group_download_export_limit"`
GroupExportLimit int `json:"group_export_limit"`
GroupImportLimit int `json:"group_import_limit"`
GroupOwnersCanManageDefaultBranchProtection bool `json:"group_owners_can_manage_default_branch_protection"`
GroupRunnerTokenExpirationInterval int `json:"group_runner_token_expiration_interval"`
HTMLEmailsEnabled bool `json:"html_emails_enabled"`
HashedStorageEnabled bool `json:"hashed_storage_enabled"`
HelpPageDocumentationBaseURL string `json:"help_page_documentation_base_url"`
HelpPageHideCommercialContent bool `json:"help_page_hide_commercial_content"`
HelpPageSupportURL string `json:"help_page_support_url"`
HelpPageText string `json:"help_page_text"`
HelpText string `json:"help_text"`
HideThirdPartyOffers bool `json:"hide_third_party_offers"`
HomePageURL string `json:"home_page_url"`
HousekeepingBitmapsEnabled bool `json:"housekeeping_bitmaps_enabled"`
HousekeepingEnabled bool `json:"housekeeping_enabled"`
HousekeepingFullRepackPeriod int `json:"housekeeping_full_repack_period"`
HousekeepingGcPeriod int `json:"housekeeping_gc_period"`
HousekeepingIncrementalRepackPeriod int `json:"housekeeping_incremental_repack_period"`
HousekeepingOptimizeRepositoryPeriod int `json:"housekeeping_optimize_repository_period"`
ImportSources []string `json:"import_sources"`
InactiveProjectsDeleteAfterMonths int `json:"inactive_projects_delete_after_months"`
InactiveProjectsMinSizeMB int `json:"inactive_projects_min_size_mb"`
InactiveProjectsSendWarningEmailAfterMonths int `json:"inactive_projects_send_warning_email_after_months"`
IncludeOptionalMetricsInServicePing bool `json:"include_optional_metrics_in_service_ping"`
InProductMarketingEmailsEnabled bool `json:"in_product_marketing_emails_enabled"`
InvisibleCaptchaEnabled bool `json:"invisible_captcha_enabled"`
IssuesCreateLimit int `json:"issues_create_limit"`
JiraConnectApplicationKey string `json:"jira_connect_application_key"`
JiraConnectPublicKeyStorageEnabled bool `json:"jira_connect_public_key_storage_enabled"`
JiraConnectProxyURL string `json:"jira_connect_proxy_url"`
KeepLatestArtifact bool `json:"keep_latest_artifact"`
KrokiEnabled bool `json:"kroki_enabled"`
KrokiFormats map[string]bool `json:"kroki_formats"`
KrokiURL string `json:"kroki_url"`
LocalMarkdownVersion int `json:"local_markdown_version"`
LockDuoFeaturesEnabled bool `json:"lock_duo_features_enabled"`
LockMembershipsToLDAP bool `json:"lock_memberships_to_ldap"`
LoginRecaptchaProtectionEnabled bool `json:"login_recaptcha_protection_enabled"`
MailgunEventsEnabled bool `json:"mailgun_events_enabled"`
MailgunSigningKey string `json:"mailgun_signing_key"`
MaintenanceMode bool `json:"maintenance_mode"`
MaintenanceModeMessage string `json:"maintenance_mode_message"`
MavenPackageRequestsForwarding bool `json:"maven_package_requests_forwarding"`
MaxArtifactsSize int `json:"max_artifacts_size"`
MaxAttachmentSize int `json:"max_attachment_size"`
MaxDecompressedArchiveSize int `json:"max_decompressed_archive_size"`
MaxExportSize int `json:"max_export_size"`
MaxImportRemoteFileSize int `json:"max_import_remote_file_size"`
MaxImportSize int `json:"max_import_size"`
MaxLoginAttempts int `json:"max_login_attempts"`
MaxNumberOfRepositoryDownloads int `json:"max_number_of_repository_downloads"`
MaxNumberOfRepositoryDownloadsWithinTimePeriod int `json:"max_number_of_repository_downloads_within_time_period"`
MaxPagesSize int `json:"max_pages_size"`
MaxPersonalAccessTokenLifetime int `json:"max_personal_access_token_lifetime"`
MaxSSHKeyLifetime int `json:"max_ssh_key_lifetime"`
MaxTerraformStateSizeBytes int `json:"max_terraform_state_size_bytes"`
MaxYAMLDepth int `json:"max_yaml_depth"`
MaxYAMLSizeBytes int `json:"max_yaml_size_bytes"`
MetricsMethodCallThreshold int `json:"metrics_method_call_threshold"`
MinimumPasswordLength int `json:"minimum_password_length"`
MirrorAvailable bool `json:"mirror_available"`
MirrorCapacityThreshold int `json:"mirror_capacity_threshold"`
MirrorMaxCapacity int `json:"mirror_max_capacity"`
MirrorMaxDelay int `json:"mirror_max_delay"`
NPMPackageRequestsForwarding bool `json:"npm_package_requests_forwarding"`
NotesCreateLimit int `json:"notes_create_limit"`
NotifyOnUnknownSignIn bool `json:"notify_on_unknown_sign_in"`
NugetSkipMetadataURLValidation bool `json:"nuget_skip_metadata_url_validation"`
OutboundLocalRequestsAllowlistRaw string `json:"outbound_local_requests_allowlist_raw"`
OutboundLocalRequestsWhitelist []string `json:"outbound_local_requests_whitelist"`
PackageMetadataPURLTypes []int `json:"package_metadata_purl_types"`
PackageRegistryAllowAnyoneToPullOption bool `json:"package_registry_allow_anyone_to_pull_option"`
PackageRegistryCleanupPoliciesWorkerCapacity int `json:"package_registry_cleanup_policies_worker_capacity"`
PagesDomainVerificationEnabled bool `json:"pages_domain_verification_enabled"`
PasswordAuthenticationEnabledForGit bool `json:"password_authentication_enabled_for_git"`
PasswordAuthenticationEnabledForWeb bool `json:"password_authentication_enabled_for_web"`
PasswordNumberRequired bool `json:"password_number_required"`
PasswordSymbolRequired bool `json:"password_symbol_required"`
PasswordUppercaseRequired bool `json:"password_uppercase_required"`
PasswordLowercaseRequired bool `json:"password_lowercase_required"`
PerformanceBarAllowedGroupID int `json:"performance_bar_allowed_group_id"`
PerformanceBarAllowedGroupPath string `json:"performance_bar_allowed_group_path"`
PerformanceBarEnabled bool `json:"performance_bar_enabled"`
PersonalAccessTokenPrefix string `json:"personal_access_token_prefix"`
PipelineLimitPerProjectUserSha int `json:"pipeline_limit_per_project_user_sha"`
PlantumlEnabled bool `json:"plantuml_enabled"`
PlantumlURL string `json:"plantuml_url"`
PollingIntervalMultiplier float64 `json:"polling_interval_multiplier,string"`
PreventMergeRequestsAuthorApproval bool `json:"prevent_merge_request_author_approval"`
PreventMergeRequestsCommittersApproval bool `json:"prevent_merge_request_committers_approval"`
ProjectDownloadExportLimit int `json:"project_download_export_limit"`
ProjectExportEnabled bool `json:"project_export_enabled"`
ProjectExportLimit int `json:"project_export_limit"`
ProjectImportLimit int `json:"project_import_limit"`
ProjectJobsAPIRateLimit int `json:"project_jobs_api_rate_limit"`
ProjectRunnerTokenExpirationInterval int `json:"project_runner_token_expiration_interval"`
ProjectsAPIRateLimitUnauthenticated int `json:"projects_api_rate_limit_unauthenticated"`
PrometheusMetricsEnabled bool `json:"prometheus_metrics_enabled"`
ProtectedCIVariables bool `json:"protected_ci_variables"`
PseudonymizerEnabled bool `json:"pseudonymizer_enabled"`
PushEventActivitiesLimit int `json:"push_event_activities_limit"`
PushEventHooksLimit int `json:"push_event_hooks_limit"`
PyPIPackageRequestsForwarding bool `json:"pypi_package_requests_forwarding"`
RSAKeyRestriction int `json:"rsa_key_restriction"`
RateLimitingResponseText string `json:"rate_limiting_response_text"`
RawBlobRequestLimit int `json:"raw_blob_request_limit"`
RecaptchaEnabled bool `json:"recaptcha_enabled"`
RecaptchaPrivateKey string `json:"recaptcha_private_key"`
RecaptchaSiteKey string `json:"recaptcha_site_key"`
ReceiveMaxInputSize int `json:"receive_max_input_size"`
ReceptiveClusterAgentsEnabled bool `json:"receptive_cluster_agents_enabled"`
RememberMeEnabled bool `json:"remember_me_enabled"`
RepositoryChecksEnabled bool `json:"repository_checks_enabled"`
RepositorySizeLimit int `json:"repository_size_limit"`
RepositoryStorages []string `json:"repository_storages"`
RepositoryStoragesWeighted map[string]int `json:"repository_storages_weighted"`
RequireAdminApprovalAfterUserSignup bool `json:"require_admin_approval_after_user_signup"`
RequireAdminTwoFactorAuthentication bool `json:"require_admin_two_factor_authentication"`
RequirePersonalAccessTokenExpiry bool `json:"require_personal_access_token_expiry"`
RequireTwoFactorAuthentication bool `json:"require_two_factor_authentication"`
RestrictedVisibilityLevels []VisibilityValue `json:"restricted_visibility_levels"`
RunnerTokenExpirationInterval int `json:"runner_token_expiration_interval"`
SearchRateLimit int `json:"search_rate_limit"`
SearchRateLimitUnauthenticated int `json:"search_rate_limit_unauthenticated"`
SecretDetectionRevocationTokenTypesURL string `json:"secret_detection_revocation_token_types_url"`
SecretDetectionTokenRevocationEnabled bool `json:"secret_detection_token_revocation_enabled"`
SecretDetectionTokenRevocationToken string `json:"secret_detection_token_revocation_token"`
SecretDetectionTokenRevocationURL string `json:"secret_detection_token_revocation_url"`
SecurityApprovalPoliciesLimit int `json:"security_approval_policies_limit"`
SecurityPolicyGlobalGroupApproversEnabled bool `json:"security_policy_global_group_approvers_enabled"`
SecurityTXTContent string `json:"security_txt_content"`
SendUserConfirmationEmail bool `json:"send_user_confirmation_email"`
SentryClientsideDSN string `json:"sentry_clientside_dsn"`
SentryDSN string `json:"sentry_dsn"`
SentryEnabled bool `json:"sentry_enabled"`
SentryEnvironment string `json:"sentry_environment"`
ServiceAccessTokensExpirationEnforced bool `json:"service_access_tokens_expiration_enforced"`
SessionExpireDelay int `json:"session_expire_delay"`
SharedRunnersEnabled bool `json:"shared_runners_enabled"`
SharedRunnersMinutes int `json:"shared_runners_minutes"`
SharedRunnersText string `json:"shared_runners_text"`
SidekiqJobLimiterCompressionThresholdBytes int `json:"sidekiq_job_limiter_compression_threshold_bytes"`
SidekiqJobLimiterLimitBytes int `json:"sidekiq_job_limiter_limit_bytes"`
SidekiqJobLimiterMode string `json:"sidekiq_job_limiter_mode"`
SignInText string `json:"sign_in_text"`
SignupEnabled bool `json:"signup_enabled"`
SilentAdminExportsEnabled bool `json:"silent_admin_exports_enabled"`
SilentModeEnabled bool `json:"silent_mode_enabled"`
SlackAppEnabled bool `json:"slack_app_enabled"`
SlackAppID string `json:"slack_app_id"`
SlackAppSecret string `json:"slack_app_secret"`
SlackAppSigningSecret string `json:"slack_app_signing_secret"`
SlackAppVerificationToken string `json:"slack_app_verification_token"`
SnippetSizeLimit int `json:"snippet_size_limit"`
SnowplowAppID string `json:"snowplow_app_id"`
SnowplowCollectorHostname string `json:"snowplow_collector_hostname"`
SnowplowCookieDomain string `json:"snowplow_cookie_domain"`
SnowplowDatabaseCollectorHostname string `json:"snowplow_database_collector_hostname"`
SnowplowEnabled bool `json:"snowplow_enabled"`
SourcegraphEnabled bool `json:"sourcegraph_enabled"`
SourcegraphPublicOnly bool `json:"sourcegraph_public_only"`
SourcegraphURL string `json:"sourcegraph_url"`
SpamCheckAPIKey string `json:"spam_check_api_key"`
SpamCheckEndpointEnabled bool `json:"spam_check_endpoint_enabled"`
SpamCheckEndpointURL string `json:"spam_check_endpoint_url"`
StaticObjectsExternalStorageAuthToken string `json:"static_objects_external_storage_auth_token"`
StaticObjectsExternalStorageURL string `json:"static_objects_external_storage_url"`
SuggestPipelineEnabled bool `json:"suggest_pipeline_enabled"`
TerminalMaxSessionTime int `json:"terminal_max_session_time"`
Terms string `json:"terms"`
ThrottleAuthenticatedAPIEnabled bool `json:"throttle_authenticated_api_enabled"`
ThrottleAuthenticatedAPIPeriodInSeconds int `json:"throttle_authenticated_api_period_in_seconds"`
ThrottleAuthenticatedAPIRequestsPerPeriod int `json:"throttle_authenticated_api_requests_per_period"`
ThrottleAuthenticatedDeprecatedAPIEnabled bool `json:"throttle_authenticated_deprecated_api_enabled"`
ThrottleAuthenticatedDeprecatedAPIPeriodInSeconds int `json:"throttle_authenticated_deprecated_api_period_in_seconds"`
ThrottleAuthenticatedDeprecatedAPIRequestsPerPeriod int `json:"throttle_authenticated_deprecated_api_requests_per_period"`
ThrottleAuthenticatedFilesAPIEnabled bool `json:"throttle_authenticated_files_api_enabled"`
ThrottleAuthenticatedFilesAPIPeriodInSeconds int `json:"throttle_authenticated_files_api_period_in_seconds"`
ThrottleAuthenticatedFilesAPIRequestsPerPeriod int `json:"throttle_authenticated_files_api_requests_per_period"`
ThrottleAuthenticatedGitLFSEnabled bool `json:"throttle_authenticated_git_lfs_enabled"`
ThrottleAuthenticatedGitLFSPeriodInSeconds int `json:"throttle_authenticated_git_lfs_period_in_seconds"`
ThrottleAuthenticatedGitLFSRequestsPerPeriod int `json:"throttle_authenticated_git_lfs_requests_per_period"`
ThrottleAuthenticatedPackagesAPIEnabled bool `json:"throttle_authenticated_packages_api_enabled"`
ThrottleAuthenticatedPackagesAPIPeriodInSeconds int `json:"throttle_authenticated_packages_api_period_in_seconds"`
ThrottleAuthenticatedPackagesAPIRequestsPerPeriod int `json:"throttle_authenticated_packages_api_requests_per_period"`
ThrottleAuthenticatedWebEnabled bool `json:"throttle_authenticated_web_enabled"`
ThrottleAuthenticatedWebPeriodInSeconds int `json:"throttle_authenticated_web_period_in_seconds"`
ThrottleAuthenticatedWebRequestsPerPeriod int `json:"throttle_authenticated_web_requests_per_period"`
ThrottleIncidentManagementNotificationEnabled bool `json:"throttle_incident_management_notification_enabled"`
ThrottleIncidentManagementNotificationPerPeriod int `json:"throttle_incident_management_notification_per_period"`
ThrottleIncidentManagementNotificationPeriodInSeconds int `json:"throttle_incident_management_notification_period_in_seconds"`
ThrottleProtectedPathsEnabled bool `json:"throttle_protected_paths_enabled"`
ThrottleProtectedPathsPeriodInSeconds int `json:"throttle_protected_paths_period_in_seconds"`
ThrottleProtectedPathsRequestsPerPeriod int `json:"throttle_protected_paths_requests_per_period"`
ThrottleUnauthenticatedAPIEnabled bool `json:"throttle_unauthenticated_api_enabled"`
ThrottleUnauthenticatedAPIPeriodInSeconds int `json:"throttle_unauthenticated_api_period_in_seconds"`
ThrottleUnauthenticatedAPIRequestsPerPeriod int `json:"throttle_unauthenticated_api_requests_per_period"`
ThrottleUnauthenticatedDeprecatedAPIEnabled bool `json:"throttle_unauthenticated_deprecated_api_enabled"`
ThrottleUnauthenticatedDeprecatedAPIPeriodInSeconds int `json:"throttle_unauthenticated_deprecated_api_period_in_seconds"`
ThrottleUnauthenticatedDeprecatedAPIRequestsPerPeriod int `json:"throttle_unauthenticated_deprecated_api_requests_per_period"`
ThrottleUnauthenticatedFilesAPIEnabled bool `json:"throttle_unauthenticated_files_api_enabled"`
ThrottleUnauthenticatedFilesAPIPeriodInSeconds int `json:"throttle_unauthenticated_files_api_period_in_seconds"`
ThrottleUnauthenticatedFilesAPIRequestsPerPeriod int `json:"throttle_unauthenticated_files_api_requests_per_period"`
ThrottleUnauthenticatedGitLFSEnabled bool `json:"throttle_unauthenticated_git_lfs_enabled"`
ThrottleUnauthenticatedGitLFSPeriodInSeconds int `json:"throttle_unauthenticated_git_lfs_period_in_seconds"`
ThrottleUnauthenticatedGitLFSRequestsPerPeriod int `json:"throttle_unauthenticated_git_lfs_requests_per_period"`
ThrottleUnauthenticatedPackagesAPIEnabled bool `json:"throttle_unauthenticated_packages_api_enabled"`
ThrottleUnauthenticatedPackagesAPIPeriodInSeconds int `json:"throttle_unauthenticated_packages_api_period_in_seconds"`
ThrottleUnauthenticatedPackagesAPIRequestsPerPeriod int `json:"throttle_unauthenticated_packages_api_requests_per_period"`
ThrottleUnauthenticatedWebEnabled bool `json:"throttle_unauthenticated_web_enabled"`
ThrottleUnauthenticatedWebPeriodInSeconds int `json:"throttle_unauthenticated_web_period_in_seconds"`
ThrottleUnauthenticatedWebRequestsPerPeriod int `json:"throttle_unauthenticated_web_requests_per_period"`
TimeTrackingLimitToHours bool `json:"time_tracking_limit_to_hours"`
TwoFactorGracePeriod int `json:"two_factor_grace_period"`
UnconfirmedUsersDeleteAfterDays int `json:"unconfirmed_users_delete_after_days"`
UniqueIPsLimitEnabled bool `json:"unique_ips_limit_enabled"`
UniqueIPsLimitPerUser int `json:"unique_ips_limit_per_user"`
UniqueIPsLimitTimeWindow int `json:"unique_ips_limit_time_window"`
UpdateRunnerVersionsEnabled bool `json:"update_runner_versions_enabled"`
UpdatedAt *time.Time `json:"updated_at"`
UpdatingNameDisabledForUsers bool `json:"updating_name_disabled_for_users"`
UsagePingEnabled bool `json:"usage_ping_enabled"`
UsagePingFeaturesEnabled bool `json:"usage_ping_features_enabled"`
UseClickhouseForAnalytics bool `json:"use_clickhouse_for_analytics"`
UserDeactivationEmailsEnabled bool `json:"user_deactivation_emails_enabled"`
UserDefaultExternal bool `json:"user_default_external"`
UserDefaultInternalRegex string `json:"user_default_internal_regex"`
UserDefaultsToPrivateProfile bool `json:"user_defaults_to_private_profile"`
UserOauthApplications bool `json:"user_oauth_applications"`
UserShowAddSSHKeyMessage bool `json:"user_show_add_ssh_key_message"`
UsersGetByIDLimit int `json:"users_get_by_id_limit"`
UsersGetByIDLimitAllowlistRaw string `json:"users_get_by_id_limit_allowlist_raw"`
ValidRunnerRegistrars []string `json:"valid_runner_registrars"`
VersionCheckEnabled bool `json:"version_check_enabled"`
WebIDEClientsidePreviewEnabled bool `json:"web_ide_clientside_preview_enabled"`
WhatsNewVariant string `json:"whats_new_variant"`
WikiPageMaxContentBytes int `json:"wiki_page_max_content_bytes"`
ID int `json:"id"`
AbuseNotificationEmail string `json:"abuse_notification_email"`
AdminMode bool `json:"admin_mode"`
AfterSignOutPath string `json:"after_sign_out_path"`
AfterSignUpText string `json:"after_sign_up_text"`
AkismetAPIKey string `json:"akismet_api_key"`
AkismetEnabled bool `json:"akismet_enabled"`
AllowAccountDeletion bool `json:"allow_account_deletion"`
AllowGroupOwnersToManageLDAP bool `json:"allow_group_owners_to_manage_ldap"`
AllowLocalRequestsFromSystemHooks bool `json:"allow_local_requests_from_system_hooks"`
AllowLocalRequestsFromWebHooksAndServices bool `json:"allow_local_requests_from_web_hooks_and_services"`
AllowProjectCreationForGuestAndBelow bool `json:"allow_project_creation_for_guest_and_below"`
AllowRunnerRegistrationToken bool `json:"allow_runner_registration_token"`
ArchiveBuildsInHumanReadable string `json:"archive_builds_in_human_readable"`
ASCIIDocMaxIncludes int `json:"asciidoc_max_includes"`
AssetProxyAllowlist []string `json:"asset_proxy_allowlist"`
AssetProxyEnabled bool `json:"asset_proxy_enabled"`
AssetProxyURL string `json:"asset_proxy_url"`
AssetProxySecretKey string `json:"asset_proxy_secret_key"`
AuthorizedKeysEnabled bool `json:"authorized_keys_enabled"`
AutoBanUserOnExcessiveProjectsDownload bool `json:"auto_ban_user_on_excessive_projects_download"`
AutoDevOpsDomain string `json:"auto_devops_domain"`
AutoDevOpsEnabled bool `json:"auto_devops_enabled"`
AutomaticPurchasedStorageAllocation bool `json:"automatic_purchased_storage_allocation"`
BulkImportConcurrentPipelineBatchLimit int `json:"bulk_import_concurrent_pipeline_batch_limit"`
BulkImportEnabled bool `json:"bulk_import_enabled"`
BulkImportMaxDownloadFileSize int `json:"bulk_import_max_download_file_size"`
CanCreateGroup bool `json:"can_create_group"`
CheckNamespacePlan bool `json:"check_namespace_plan"`
CIMaxIncludes int `json:"ci_max_includes"`
CIMaxTotalYAMLSizeBytes int `json:"ci_max_total_yaml_size_bytes"`
CommitEmailHostname string `json:"commit_email_hostname"`
ConcurrentBitbucketImportJobsLimit int `json:"concurrent_bitbucket_import_jobs_limit"`
ConcurrentBitbucketServerImportJobsLimit int `json:"concurrent_bitbucket_server_import_jobs_limit"`
ConcurrentGitHubImportJobsLimit int `json:"concurrent_github_import_jobs_limit"`
ContainerExpirationPoliciesEnableHistoricEntries bool `json:"container_expiration_policies_enable_historic_entries"`
ContainerRegistryCleanupTagsServiceMaxListSize int `json:"container_registry_cleanup_tags_service_max_list_size"`
ContainerRegistryDeleteTagsServiceTimeout int `json:"container_registry_delete_tags_service_timeout"`
ContainerRegistryExpirationPoliciesCaching bool `json:"container_registry_expiration_policies_caching"`
ContainerRegistryExpirationPoliciesWorkerCapacity int `json:"container_registry_expiration_policies_worker_capacity"`
ContainerRegistryImportCreatedBefore *time.Time `json:"container_registry_import_created_before"`
ContainerRegistryImportMaxRetries int `json:"container_registry_import_max_retries"`
ContainerRegistryImportMaxStepDuration int `json:"container_registry_import_max_step_duration"`
ContainerRegistryImportMaxTagsCount int `json:"container_registry_import_max_tags_count"`
ContainerRegistryImportStartMaxRetries int `json:"container_registry_import_start_max_retries"`
ContainerRegistryImportTargetPlan string `json:"container_registry_import_target_plan"`
ContainerRegistryTokenExpireDelay int `json:"container_registry_token_expire_delay"`
CreatedAt *time.Time `json:"created_at"`
CustomHTTPCloneURLRoot string `json:"custom_http_clone_url_root"`
DNSRebindingProtectionEnabled bool `json:"dns_rebinding_protection_enabled"`
DSAKeyRestriction int `json:"dsa_key_restriction"`
DeactivateDormantUsers bool `json:"deactivate_dormant_users"`
DeactivateDormantUsersPeriod int `json:"deactivate_dormant_users_period"`
DecompressArchiveFileTimeout int `json:"decompress_archive_file_timeout"`
DefaultArtifactsExpireIn string `json:"default_artifacts_expire_in"`
DefaultBranchName string `json:"default_branch_name"`
DefaultBranchProtection int `json:"default_branch_protection"`
DefaultBranchProtectionDefaults *BranchProtectionDefaults `json:"default_branch_protection_defaults,omitempty"`
DefaultCiConfigPath string `json:"default_ci_config_path"`
DefaultGroupVisibility VisibilityValue `json:"default_group_visibility"`
DefaultPreferredLanguage string `json:"default_preferred_language"`
DefaultProjectCreation int `json:"default_project_creation"`
DefaultProjectDeletionProtection bool `json:"default_project_deletion_protection"`
DefaultProjectVisibility VisibilityValue `json:"default_project_visibility"`
DefaultProjectsLimit int `json:"default_projects_limit"`
DefaultSnippetVisibility VisibilityValue `json:"default_snippet_visibility"`
DefaultSyntaxHighlightingTheme int `json:"default_syntax_highlighting_theme"`
DelayedGroupDeletion bool `json:"delayed_group_deletion"`
DelayedProjectDeletion bool `json:"delayed_project_deletion"`
DeleteInactiveProjects bool `json:"delete_inactive_projects"`
DeleteUnconfirmedUsers bool `json:"delete_unconfirmed_users"`
DeletionAdjournedPeriod int `json:"deletion_adjourned_period"`
DiagramsnetEnabled bool `json:"diagramsnet_enabled"`
DiagramsnetURL string `json:"diagramsnet_url"`
DiffMaxFiles int `json:"diff_max_files"`
DiffMaxLines int `json:"diff_max_lines"`
DiffMaxPatchBytes int `json:"diff_max_patch_bytes"`
DisableAdminOAuthScopes bool `json:"disable_admin_oauth_scopes"`
DisableFeedToken bool `json:"disable_feed_token"`
DisableOverridingApproversPerMergeRequest bool `json:"disable_overriding_approvers_per_merge_request"`
DisablePersonalAccessTokens bool `json:"disable_personal_access_tokens"`
DisabledOauthSignInSources []string `json:"disabled_oauth_sign_in_sources"`
DomainAllowlist []string `json:"domain_allowlist"`
DomainDenylist []string `json:"domain_denylist"`
DomainDenylistEnabled bool `json:"domain_denylist_enabled"`
DownstreamPipelineTriggerLimitPerProjectUserSHA int `json:"downstream_pipeline_trigger_limit_per_project_user_sha"`
DuoFeaturesEnabled bool `json:"duo_features_enabled"`
ECDSAKeyRestriction int `json:"ecdsa_key_restriction"`
ECDSASKKeyRestriction int `json:"ecdsa_sk_key_restriction"`
EKSAccessKeyID string `json:"eks_access_key_id"`
EKSAccountID string `json:"eks_account_id"`
EKSIntegrationEnabled bool `json:"eks_integration_enabled"`
EKSSecretAccessKey string `json:"eks_secret_access_key"`
Ed25519KeyRestriction int `json:"ed25519_key_restriction"`
Ed25519SKKeyRestriction int `json:"ed25519_sk_key_restriction"`
ElasticsearchAWS bool `json:"elasticsearch_aws"`
ElasticsearchAWSAccessKey string `json:"elasticsearch_aws_access_key"`
ElasticsearchAWSRegion string `json:"elasticsearch_aws_region"`
ElasticsearchAWSSecretAccessKey string `json:"elasticsearch_aws_secret_access_key"`
ElasticsearchAnalyzersKuromojiEnabled bool `json:"elasticsearch_analyzers_kuromoji_enabled"`
ElasticsearchAnalyzersKuromojiSearch bool `json:"elasticsearch_analyzers_kuromoji_search"`
ElasticsearchAnalyzersSmartCNEnabled bool `json:"elasticsearch_analyzers_smartcn_enabled"`
ElasticsearchAnalyzersSmartCNSearch bool `json:"elasticsearch_analyzers_smartcn_search"`
ElasticsearchClientRequestTimeout int `json:"elasticsearch_client_request_timeout"`
ElasticsearchIndexedFieldLengthLimit int `json:"elasticsearch_indexed_field_length_limit"`
ElasticsearchIndexedFileSizeLimitKB int `json:"elasticsearch_indexed_file_size_limit_kb"`
ElasticsearchIndexing bool `json:"elasticsearch_indexing"`
ElasticsearchLimitIndexing bool `json:"elasticsearch_limit_indexing"`
ElasticsearchMaxBulkConcurrency int `json:"elasticsearch_max_bulk_concurrency"`
ElasticsearchMaxBulkSizeMB int `json:"elasticsearch_max_bulk_size_mb"`
ElasticsearchMaxCodeIndexingConcurrency int `json:"elasticsearch_max_code_indexing_concurrency"`
ElasticsearchNamespaceIDs []int `json:"elasticsearch_namespace_ids"`
ElasticsearchPassword string `json:"elasticsearch_password"`
ElasticsearchPauseIndexing bool `json:"elasticsearch_pause_indexing"`
ElasticsearchProjectIDs []int `json:"elasticsearch_project_ids"`
ElasticsearchReplicas int `json:"elasticsearch_replicas"`
ElasticsearchRequeueWorkers bool `json:"elasticsearch_requeue_workers"`
ElasticsearchSearch bool `json:"elasticsearch_search"`
ElasticsearchShards int `json:"elasticsearch_shards"`
ElasticsearchURL []string `json:"elasticsearch_url"`
ElasticsearchUsername string `json:"elasticsearch_username"`
ElasticsearchWorkerNumberOfShards int `json:"elasticsearch_worker_number_of_shards"`
EmailAdditionalText string `json:"email_additional_text"`
EmailAuthorInBody bool `json:"email_author_in_body"`
EmailConfirmationSetting string `json:"email_confirmation_setting"`
EmailRestrictions string `json:"email_restrictions"`
EmailRestrictionsEnabled bool `json:"email_restrictions_enabled"`
EnableArtifactExternalRedirectWarningPage bool `json:"enable_artifact_external_redirect_warning_page"`
EnabledGitAccessProtocol string `json:"enabled_git_access_protocol"`
EnforceNamespaceStorageLimit bool `json:"enforce_namespace_storage_limit"`
EnforcePATExpiration bool `json:"enforce_pat_expiration"`
EnforceSSHKeyExpiration bool `json:"enforce_ssh_key_expiration"`
EnforceTerms bool `json:"enforce_terms"`
ExternalAuthClientCert string `json:"external_auth_client_cert"`
ExternalAuthClientKey string `json:"external_auth_client_key"`
ExternalAuthClientKeyPass string `json:"external_auth_client_key_pass"`
ExternalAuthorizationServiceDefaultLabel string `json:"external_authorization_service_default_label"`
ExternalAuthorizationServiceEnabled bool `json:"external_authorization_service_enabled"`
ExternalAuthorizationServiceTimeout float64 `json:"external_authorization_service_timeout"`
ExternalAuthorizationServiceURL string `json:"external_authorization_service_url"`
ExternalPipelineValidationServiceTimeout int `json:"external_pipeline_validation_service_timeout"`
ExternalPipelineValidationServiceToken string `json:"external_pipeline_validation_service_token"`
ExternalPipelineValidationServiceURL string `json:"external_pipeline_validation_service_url"`
FailedLoginAttemptsUnlockPeriodInMinutes int `json:"failed_login_attempts_unlock_period_in_minutes"`
FileTemplateProjectID int `json:"file_template_project_id"`
FirstDayOfWeek int `json:"first_day_of_week"`
FlocEnabled bool `json:"floc_enabled"`
GeoNodeAllowedIPs string `json:"geo_node_allowed_ips"`
GeoStatusTimeout int `json:"geo_status_timeout"`
GitRateLimitUsersAlertlist []string `json:"git_rate_limit_users_alertlist"`
GitTwoFactorSessionExpiry int `json:"git_two_factor_session_expiry"`
GitalyTimeoutDefault int `json:"gitaly_timeout_default"`
GitalyTimeoutFast int `json:"gitaly_timeout_fast"`
GitalyTimeoutMedium int `json:"gitaly_timeout_medium"`
GitlabDedicatedInstance bool `json:"gitlab_dedicated_instance"`
GitlabEnvironmentToolkitInstance bool `json:"gitlab_environment_toolkit_instance"`
GitlabShellOperationLimit int `json:"gitlab_shell_operation_limit"`
GitpodEnabled bool `json:"gitpod_enabled"`
GitpodURL string `json:"gitpod_url"`
GitRateLimitUsersAllowlist []string `json:"git_rate_limit_users_allowlist"`
GloballyAllowedIPs string `json:"globally_allowed_ips"`
GrafanaEnabled bool `json:"grafana_enabled"`
GrafanaURL string `json:"grafana_url"`
GravatarEnabled bool `json:"gravatar_enabled"`
GroupDownloadExportLimit int `json:"group_download_export_limit"`
GroupExportLimit int `json:"group_export_limit"`
GroupImportLimit int `json:"group_import_limit"`
GroupOwnersCanManageDefaultBranchProtection bool `json:"group_owners_can_manage_default_branch_protection"`
GroupRunnerTokenExpirationInterval int `json:"group_runner_token_expiration_interval"`
HTMLEmailsEnabled bool `json:"html_emails_enabled"`
HashedStorageEnabled bool `json:"hashed_storage_enabled"`
HelpPageDocumentationBaseURL string `json:"help_page_documentation_base_url"`
HelpPageHideCommercialContent bool `json:"help_page_hide_commercial_content"`
HelpPageSupportURL string `json:"help_page_support_url"`
HelpPageText string `json:"help_page_text"`
HelpText string `json:"help_text"`
HideThirdPartyOffers bool `json:"hide_third_party_offers"`
HomePageURL string `json:"home_page_url"`
HousekeepingBitmapsEnabled bool `json:"housekeeping_bitmaps_enabled"`
HousekeepingEnabled bool `json:"housekeeping_enabled"`
HousekeepingFullRepackPeriod int `json:"housekeeping_full_repack_period"`
HousekeepingGcPeriod int `json:"housekeeping_gc_period"`
HousekeepingIncrementalRepackPeriod int `json:"housekeeping_incremental_repack_period"`
HousekeepingOptimizeRepositoryPeriod int `json:"housekeeping_optimize_repository_period"`
ImportSources []string `json:"import_sources"`
InactiveProjectsDeleteAfterMonths int `json:"inactive_projects_delete_after_months"`
InactiveProjectsMinSizeMB int `json:"inactive_projects_min_size_mb"`
InactiveProjectsSendWarningEmailAfterMonths int `json:"inactive_projects_send_warning_email_after_months"`
IncludeOptionalMetricsInServicePing bool `json:"include_optional_metrics_in_service_ping"`
InProductMarketingEmailsEnabled bool `json:"in_product_marketing_emails_enabled"`
InvisibleCaptchaEnabled bool `json:"invisible_captcha_enabled"`
IssuesCreateLimit int `json:"issues_create_limit"`
JiraConnectApplicationKey string `json:"jira_connect_application_key"`
JiraConnectPublicKeyStorageEnabled bool `json:"jira_connect_public_key_storage_enabled"`
JiraConnectProxyURL string `json:"jira_connect_proxy_url"`
KeepLatestArtifact bool `json:"keep_latest_artifact"`
KrokiEnabled bool `json:"kroki_enabled"`
KrokiFormats map[string]bool `json:"kroki_formats"`
KrokiURL string `json:"kroki_url"`
LocalMarkdownVersion int `json:"local_markdown_version"`
LockDuoFeaturesEnabled bool `json:"lock_duo_features_enabled"`
LockMembershipsToLDAP bool `json:"lock_memberships_to_ldap"`
LoginRecaptchaProtectionEnabled bool `json:"login_recaptcha_protection_enabled"`
MailgunEventsEnabled bool `json:"mailgun_events_enabled"`
MailgunSigningKey string `json:"mailgun_signing_key"`
MaintenanceMode bool `json:"maintenance_mode"`
MaintenanceModeMessage string `json:"maintenance_mode_message"`
MavenPackageRequestsForwarding bool `json:"maven_package_requests_forwarding"`
MaxArtifactsSize int `json:"max_artifacts_size"`
MaxAttachmentSize int `json:"max_attachment_size"`
MaxDecompressedArchiveSize int `json:"max_decompressed_archive_size"`
MaxExportSize int `json:"max_export_size"`
MaxImportRemoteFileSize int `json:"max_import_remote_file_size"`
MaxImportSize int `json:"max_import_size"`
MaxLoginAttempts int `json:"max_login_attempts"`
MaxNumberOfRepositoryDownloads int `json:"max_number_of_repository_downloads"`
MaxNumberOfRepositoryDownloadsWithinTimePeriod int `json:"max_number_of_repository_downloads_within_time_period"`
MaxPagesSize int `json:"max_pages_size"`
MaxPersonalAccessTokenLifetime int `json:"max_personal_access_token_lifetime"`
MaxSSHKeyLifetime int `json:"max_ssh_key_lifetime"`
MaxTerraformStateSizeBytes int `json:"max_terraform_state_size_bytes"`
MaxYAMLDepth int `json:"max_yaml_depth"`
MaxYAMLSizeBytes int `json:"max_yaml_size_bytes"`
MetricsMethodCallThreshold int `json:"metrics_method_call_threshold"`
MinimumPasswordLength int `json:"minimum_password_length"`
MirrorAvailable bool `json:"mirror_available"`
MirrorCapacityThreshold int `json:"mirror_capacity_threshold"`
MirrorMaxCapacity int `json:"mirror_max_capacity"`
MirrorMaxDelay int `json:"mirror_max_delay"`
NPMPackageRequestsForwarding bool `json:"npm_package_requests_forwarding"`
NotesCreateLimit int `json:"notes_create_limit"`
NotifyOnUnknownSignIn bool `json:"notify_on_unknown_sign_in"`
NugetSkipMetadataURLValidation bool `json:"nuget_skip_metadata_url_validation"`
OutboundLocalRequestsAllowlistRaw string `json:"outbound_local_requests_allowlist_raw"`
OutboundLocalRequestsWhitelist []string `json:"outbound_local_requests_whitelist"`
PackageMetadataPURLTypes []int `json:"package_metadata_purl_types"`
PackageRegistryAllowAnyoneToPullOption bool `json:"package_registry_allow_anyone_to_pull_option"`
PackageRegistryCleanupPoliciesWorkerCapacity int `json:"package_registry_cleanup_policies_worker_capacity"`
PagesDomainVerificationEnabled bool `json:"pages_domain_verification_enabled"`
PasswordAuthenticationEnabledForGit bool `json:"password_authentication_enabled_for_git"`
PasswordAuthenticationEnabledForWeb bool `json:"password_authentication_enabled_for_web"`
PasswordNumberRequired bool `json:"password_number_required"`
PasswordSymbolRequired bool `json:"password_symbol_required"`
PasswordUppercaseRequired bool `json:"password_uppercase_required"`
PasswordLowercaseRequired bool `json:"password_lowercase_required"`
PerformanceBarAllowedGroupID int `json:"performance_bar_allowed_group_id"`
PerformanceBarAllowedGroupPath string `json:"performance_bar_allowed_group_path"`
PerformanceBarEnabled bool `json:"performance_bar_enabled"`
PersonalAccessTokenPrefix string `json:"personal_access_token_prefix"`
PipelineLimitPerProjectUserSha int `json:"pipeline_limit_per_project_user_sha"`
PlantumlEnabled bool `json:"plantuml_enabled"`
PlantumlURL string `json:"plantuml_url"`
PollingIntervalMultiplier float64 `json:"polling_interval_multiplier,string"`
PreventMergeRequestsAuthorApproval bool `json:"prevent_merge_request_author_approval"`
PreventMergeRequestsCommittersApproval bool `json:"prevent_merge_request_committers_approval"`
ProjectDownloadExportLimit int `json:"project_download_export_limit"`
ProjectExportEnabled bool `json:"project_export_enabled"`
ProjectExportLimit int `json:"project_export_limit"`
ProjectImportLimit int `json:"project_import_limit"`
ProjectJobsAPIRateLimit int `json:"project_jobs_api_rate_limit"`
ProjectRunnerTokenExpirationInterval int `json:"project_runner_token_expiration_interval"`
ProjectsAPIRateLimitUnauthenticated int `json:"projects_api_rate_limit_unauthenticated"`
PrometheusMetricsEnabled bool `json:"prometheus_metrics_enabled"`
ProtectedCIVariables bool `json:"protected_ci_variables"`
PseudonymizerEnabled bool `json:"pseudonymizer_enabled"`
PushEventActivitiesLimit int `json:"push_event_activities_limit"`
PushEventHooksLimit int `json:"push_event_hooks_limit"`
PyPIPackageRequestsForwarding bool `json:"pypi_package_requests_forwarding"`
RSAKeyRestriction int `json:"rsa_key_restriction"`
RateLimitingResponseText string `json:"rate_limiting_response_text"`
RawBlobRequestLimit int `json:"raw_blob_request_limit"`
RecaptchaEnabled bool `json:"recaptcha_enabled"`
RecaptchaPrivateKey string `json:"recaptcha_private_key"`
RecaptchaSiteKey string `json:"recaptcha_site_key"`
ReceiveMaxInputSize int `json:"receive_max_input_size"`
ReceptiveClusterAgentsEnabled bool `json:"receptive_cluster_agents_enabled"`
RememberMeEnabled bool `json:"remember_me_enabled"`
RepositoryChecksEnabled bool `json:"repository_checks_enabled"`
RepositorySizeLimit int `json:"repository_size_limit"`
RepositoryStorages []string `json:"repository_storages"`
RepositoryStoragesWeighted map[string]int `json:"repository_storages_weighted"`
RequireAdminApprovalAfterUserSignup bool `json:"require_admin_approval_after_user_signup"`
RequireAdminTwoFactorAuthentication bool `json:"require_admin_two_factor_authentication"`
RequirePersonalAccessTokenExpiry bool `json:"require_personal_access_token_expiry"`
RequireTwoFactorAuthentication bool `json:"require_two_factor_authentication"`
RestrictedVisibilityLevels []VisibilityValue `json:"restricted_visibility_levels"`
RunnerTokenExpirationInterval int `json:"runner_token_expiration_interval"`
SearchRateLimit int `json:"search_rate_limit"`
SearchRateLimitUnauthenticated int `json:"search_rate_limit_unauthenticated"`
SecretDetectionRevocationTokenTypesURL string `json:"secret_detection_revocation_token_types_url"`
SecretDetectionTokenRevocationEnabled bool `json:"secret_detection_token_revocation_enabled"`
SecretDetectionTokenRevocationToken string `json:"secret_detection_token_revocation_token"`
SecretDetectionTokenRevocationURL string `json:"secret_detection_token_revocation_url"`
SecurityApprovalPoliciesLimit int `json:"security_approval_policies_limit"`
SecurityPolicyGlobalGroupApproversEnabled bool `json:"security_policy_global_group_approvers_enabled"`
SecurityTXTContent string `json:"security_txt_content"`
SendUserConfirmationEmail bool `json:"send_user_confirmation_email"`
SentryClientsideDSN string `json:"sentry_clientside_dsn"`
SentryDSN string `json:"sentry_dsn"`
SentryEnabled bool `json:"sentry_enabled"`
SentryEnvironment string `json:"sentry_environment"`
ServiceAccessTokensExpirationEnforced bool `json:"service_access_tokens_expiration_enforced"`
SessionExpireDelay int `json:"session_expire_delay"`
SharedRunnersEnabled bool `json:"shared_runners_enabled"`
SharedRunnersMinutes int `json:"shared_runners_minutes"`
SharedRunnersText string `json:"shared_runners_text"`
SidekiqJobLimiterCompressionThresholdBytes int `json:"sidekiq_job_limiter_compression_threshold_bytes"`
SidekiqJobLimiterLimitBytes int `json:"sidekiq_job_limiter_limit_bytes"`
SidekiqJobLimiterMode string `json:"sidekiq_job_limiter_mode"`
SignInText string `json:"sign_in_text"`
SignupEnabled bool `json:"signup_enabled"`
SilentAdminExportsEnabled bool `json:"silent_admin_exports_enabled"`
SilentModeEnabled bool `json:"silent_mode_enabled"`
SlackAppEnabled bool `json:"slack_app_enabled"`
SlackAppID string `json:"slack_app_id"`
SlackAppSecret string `json:"slack_app_secret"`
SlackAppSigningSecret string `json:"slack_app_signing_secret"`
SlackAppVerificationToken string `json:"slack_app_verification_token"`
SnippetSizeLimit int `json:"snippet_size_limit"`
SnowplowAppID string `json:"snowplow_app_id"`
SnowplowCollectorHostname string `json:"snowplow_collector_hostname"`
SnowplowCookieDomain string `json:"snowplow_cookie_domain"`
SnowplowDatabaseCollectorHostname string `json:"snowplow_database_collector_hostname"`
SnowplowEnabled bool `json:"snowplow_enabled"`
SourcegraphEnabled bool `json:"sourcegraph_enabled"`
SourcegraphPublicOnly bool `json:"sourcegraph_public_only"`
SourcegraphURL string `json:"sourcegraph_url"`
SpamCheckAPIKey string `json:"spam_check_api_key"`
SpamCheckEndpointEnabled bool `json:"spam_check_endpoint_enabled"`
SpamCheckEndpointURL string `json:"spam_check_endpoint_url"`
StaticObjectsExternalStorageAuthToken string `json:"static_objects_external_storage_auth_token"`
StaticObjectsExternalStorageURL string `json:"static_objects_external_storage_url"`
SuggestPipelineEnabled bool `json:"suggest_pipeline_enabled"`
TerminalMaxSessionTime int `json:"terminal_max_session_time"`
Terms string `json:"terms"`
ThrottleAuthenticatedAPIEnabled bool `json:"throttle_authenticated_api_enabled"`
ThrottleAuthenticatedAPIPeriodInSeconds int `json:"throttle_authenticated_api_period_in_seconds"`
ThrottleAuthenticatedAPIRequestsPerPeriod int `json:"throttle_authenticated_api_requests_per_period"`
ThrottleAuthenticatedDeprecatedAPIEnabled bool `json:"throttle_authenticated_deprecated_api_enabled"`
ThrottleAuthenticatedDeprecatedAPIPeriodInSeconds int `json:"throttle_authenticated_deprecated_api_period_in_seconds"`
ThrottleAuthenticatedDeprecatedAPIRequestsPerPeriod int `json:"throttle_authenticated_deprecated_api_requests_per_period"`
ThrottleAuthenticatedFilesAPIEnabled bool `json:"throttle_authenticated_files_api_enabled"`
ThrottleAuthenticatedFilesAPIPeriodInSeconds int `json:"throttle_authenticated_files_api_period_in_seconds"`
ThrottleAuthenticatedFilesAPIRequestsPerPeriod int `json:"throttle_authenticated_files_api_requests_per_period"`
ThrottleAuthenticatedGitLFSEnabled bool `json:"throttle_authenticated_git_lfs_enabled"`
ThrottleAuthenticatedGitLFSPeriodInSeconds int `json:"throttle_authenticated_git_lfs_period_in_seconds"`
ThrottleAuthenticatedGitLFSRequestsPerPeriod int `json:"throttle_authenticated_git_lfs_requests_per_period"`
ThrottleAuthenticatedPackagesAPIEnabled bool `json:"throttle_authenticated_packages_api_enabled"`
ThrottleAuthenticatedPackagesAPIPeriodInSeconds int `json:"throttle_authenticated_packages_api_period_in_seconds"`
ThrottleAuthenticatedPackagesAPIRequestsPerPeriod int `json:"throttle_authenticated_packages_api_requests_per_period"`
ThrottleAuthenticatedWebEnabled bool `json:"throttle_authenticated_web_enabled"`
ThrottleAuthenticatedWebPeriodInSeconds int `json:"throttle_authenticated_web_period_in_seconds"`
ThrottleAuthenticatedWebRequestsPerPeriod int `json:"throttle_authenticated_web_requests_per_period"`
ThrottleIncidentManagementNotificationEnabled bool `json:"throttle_incident_management_notification_enabled"`
ThrottleIncidentManagementNotificationPerPeriod int `json:"throttle_incident_management_notification_per_period"`
ThrottleIncidentManagementNotificationPeriodInSeconds int `json:"throttle_incident_management_notification_period_in_seconds"`
ThrottleProtectedPathsEnabled bool `json:"throttle_protected_paths_enabled"`
ThrottleProtectedPathsPeriodInSeconds int `json:"throttle_protected_paths_period_in_seconds"`
ThrottleProtectedPathsRequestsPerPeriod int `json:"throttle_protected_paths_requests_per_period"`
ThrottleUnauthenticatedAPIEnabled bool `json:"throttle_unauthenticated_api_enabled"`
ThrottleUnauthenticatedAPIPeriodInSeconds int `json:"throttle_unauthenticated_api_period_in_seconds"`
ThrottleUnauthenticatedAPIRequestsPerPeriod int `json:"throttle_unauthenticated_api_requests_per_period"`
ThrottleUnauthenticatedDeprecatedAPIEnabled bool `json:"throttle_unauthenticated_deprecated_api_enabled"`
ThrottleUnauthenticatedDeprecatedAPIPeriodInSeconds int `json:"throttle_unauthenticated_deprecated_api_period_in_seconds"`
ThrottleUnauthenticatedDeprecatedAPIRequestsPerPeriod int `json:"throttle_unauthenticated_deprecated_api_requests_per_period"`
ThrottleUnauthenticatedFilesAPIEnabled bool `json:"throttle_unauthenticated_files_api_enabled"`
ThrottleUnauthenticatedFilesAPIPeriodInSeconds int `json:"throttle_unauthenticated_files_api_period_in_seconds"`
ThrottleUnauthenticatedFilesAPIRequestsPerPeriod int `json:"throttle_unauthenticated_files_api_requests_per_period"`
ThrottleUnauthenticatedGitLFSEnabled bool `json:"throttle_unauthenticated_git_lfs_enabled"`
ThrottleUnauthenticatedGitLFSPeriodInSeconds int `json:"throttle_unauthenticated_git_lfs_period_in_seconds"`
ThrottleUnauthenticatedGitLFSRequestsPerPeriod int `json:"throttle_unauthenticated_git_lfs_requests_per_period"`
ThrottleUnauthenticatedPackagesAPIEnabled bool `json:"throttle_unauthenticated_packages_api_enabled"`
ThrottleUnauthenticatedPackagesAPIPeriodInSeconds int `json:"throttle_unauthenticated_packages_api_period_in_seconds"`
ThrottleUnauthenticatedPackagesAPIRequestsPerPeriod int `json:"throttle_unauthenticated_packages_api_requests_per_period"`
ThrottleUnauthenticatedWebEnabled bool `json:"throttle_unauthenticated_web_enabled"`
ThrottleUnauthenticatedWebPeriodInSeconds int `json:"throttle_unauthenticated_web_period_in_seconds"`
ThrottleUnauthenticatedWebRequestsPerPeriod int `json:"throttle_unauthenticated_web_requests_per_period"`
TimeTrackingLimitToHours bool `json:"time_tracking_limit_to_hours"`
TwoFactorGracePeriod int `json:"two_factor_grace_period"`
UnconfirmedUsersDeleteAfterDays int `json:"unconfirmed_users_delete_after_days"`
UniqueIPsLimitEnabled bool `json:"unique_ips_limit_enabled"`
UniqueIPsLimitPerUser int `json:"unique_ips_limit_per_user"`
UniqueIPsLimitTimeWindow int `json:"unique_ips_limit_time_window"`
UpdateRunnerVersionsEnabled bool `json:"update_runner_versions_enabled"`
UpdatedAt *time.Time `json:"updated_at"`
UpdatingNameDisabledForUsers bool `json:"updating_name_disabled_for_users"`
UsagePingEnabled bool `json:"usage_ping_enabled"`
UsagePingFeaturesEnabled bool `json:"usage_ping_features_enabled"`
UseClickhouseForAnalytics bool `json:"use_clickhouse_for_analytics"`
UserDeactivationEmailsEnabled bool `json:"user_deactivation_emails_enabled"`
UserDefaultExternal bool `json:"user_default_external"`
UserDefaultInternalRegex string `json:"user_default_internal_regex"`
UserDefaultsToPrivateProfile bool `json:"user_defaults_to_private_profile"`
UserOauthApplications bool `json:"user_oauth_applications"`
UserShowAddSSHKeyMessage bool `json:"user_show_add_ssh_key_message"`
UsersGetByIDLimit int `json:"users_get_by_id_limit"`
UsersGetByIDLimitAllowlistRaw string `json:"users_get_by_id_limit_allowlist_raw"`
ValidRunnerRegistrars []string `json:"valid_runner_registrars"`
VersionCheckEnabled bool `json:"version_check_enabled"`
WebIDEClientsidePreviewEnabled bool `json:"web_ide_clientside_preview_enabled"`
WhatsNewVariant string `json:"whats_new_variant"`
WikiPageMaxContentBytes int `json:"wiki_page_max_content_bytes"`
// Deprecated: Use AbuseNotificationEmail instead.
AdminNotificationEmail string `json:"admin_notification_email"`
@@ -462,17 +462,6 @@ type Settings struct {
UserEmailLookupLimit int `json:"user_email_lookup_limit"`
}
// BranchProtectionDefaults represents default Git protected branch permissions.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/groups.html#options-for-default_branch_protection_defaults
type BranchProtectionDefaults struct {
AllowedToPush []int `json:"allowed_to_push,omitempty"`
AllowForcePush bool `json:"allow_force_push,omitempty"`
AllowedToMerge []int `json:"allowed_to_merge,omitempty"`
DeveloperCanInitialPush bool `json:"developer_can_initial_push,omitempty"`
}
// Settings requires a custom unmarshaller in order to properly unmarshal
// `container_registry_import_created_before` which is either a time.Time or
// an empty string if no value is set.

View File

@@ -89,6 +89,11 @@ func AccessLevel(v AccessLevelValue) *AccessLevelValue {
return Ptr(v)
}
type AccessLevelDetails struct {
IntegerValue AccessLevelValue `json:"integer_value"`
StringValue string `json:"string_value"`
}
// UserIDValue represents a user ID value within GitLab.
type UserIDValue string

View File

@@ -61,6 +61,16 @@ type BasicUser struct {
WebURL string `json:"web_url"`
}
// ServiceAccount represents a GitLab service account.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/user_service_accounts.html
type ServiceAccount struct {
ID int `json:"id"`
Username string `json:"username"`
Name string `json:"name"`
}
// User represents a GitLab user.
//
// GitLab API docs: https://docs.gitlab.com/ee/api/users.html
@@ -1543,9 +1553,10 @@ func (s *UsersService) CreateUserRunner(opts *CreateUserRunnerOptions, options .
return r, resp, nil
}
// CreateServiceAccountUser creates a new service account user. Note only administrators can create new service account users.
// CreateServiceAccountUser creates a new service account user.
//
// GitLab API docs: https://docs.gitlab.com/ee/api/users.html#create-service-account-user
// GitLab API docs:
// https://docs.gitlab.com/ee/api/users.html#create-service-account-user
func (s *UsersService) CreateServiceAccountUser(options ...RequestOptionFunc) (*User, *Response, error) {
req, err := s.client.NewRequest(http.MethodPost, "service_accounts", nil, options)
if err != nil {
@@ -1561,6 +1572,25 @@ func (s *UsersService) CreateServiceAccountUser(options ...RequestOptionFunc) (*
return usr, resp, nil
}
// ListServiceAccounts lists all service accounts.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/users.html#create-service-account-user
func (s *UsersService) ListServiceAccounts(opt *ListServiceAccountsOptions, options ...RequestOptionFunc) ([]*ServiceAccount, *Response, error) {
req, err := s.client.NewRequest(http.MethodGet, "service_accounts", opt, options)
if err != nil {
return nil, nil, err
}
var sas []*ServiceAccount
resp, err := s.client.Do(req, &sas)
if err != nil {
return nil, resp, err
}
return sas, resp, nil
}
// UploadAvatar uploads an avatar to the current user.
//
// GitLab API docs:

2
vendor/modules.txt vendored
View File

@@ -196,7 +196,7 @@ github.com/spf13/viper/internal/features
# github.com/subosito/gotenv v1.6.0
## explicit; go 1.18
github.com/subosito/gotenv
# github.com/xanzy/go-gitlab v0.109.0
# github.com/xanzy/go-gitlab v0.112.0
## explicit; go 1.19
github.com/xanzy/go-gitlab
# go.uber.org/atomic v1.9.0