fs-gitlab 4.18.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +270 -0
- data/LICENSE.txt +24 -0
- data/README.md +260 -0
- data/exe/gitlab +11 -0
- data/lib/gitlab/api.rb +24 -0
- data/lib/gitlab/cli.rb +89 -0
- data/lib/gitlab/cli_helpers.rb +243 -0
- data/lib/gitlab/client/access_requests.rb +103 -0
- data/lib/gitlab/client/application_settings.rb +172 -0
- data/lib/gitlab/client/avatar.rb +21 -0
- data/lib/gitlab/client/award_emojis.rb +137 -0
- data/lib/gitlab/client/boards.rb +146 -0
- data/lib/gitlab/client/branches.rb +135 -0
- data/lib/gitlab/client/broadcast_messages.rb +75 -0
- data/lib/gitlab/client/build_variables.rb +135 -0
- data/lib/gitlab/client/builds.rb +108 -0
- data/lib/gitlab/client/commits.rb +216 -0
- data/lib/gitlab/client/container_registry.rb +85 -0
- data/lib/gitlab/client/deployments.rb +34 -0
- data/lib/gitlab/client/environments.rb +89 -0
- data/lib/gitlab/client/epic_issues.rb +23 -0
- data/lib/gitlab/client/epics.rb +73 -0
- data/lib/gitlab/client/events.rb +60 -0
- data/lib/gitlab/client/features.rb +48 -0
- data/lib/gitlab/client/group_badges.rb +88 -0
- data/lib/gitlab/client/group_boards.rb +141 -0
- data/lib/gitlab/client/group_labels.rb +88 -0
- data/lib/gitlab/client/group_milestones.rb +94 -0
- data/lib/gitlab/client/groups.rb +358 -0
- data/lib/gitlab/client/issue_links.rb +48 -0
- data/lib/gitlab/client/issues.rb +231 -0
- data/lib/gitlab/client/jobs.rb +250 -0
- data/lib/gitlab/client/keys.rb +29 -0
- data/lib/gitlab/client/labels.rb +88 -0
- data/lib/gitlab/client/lint.rb +19 -0
- data/lib/gitlab/client/markdown.rb +23 -0
- data/lib/gitlab/client/merge_request_approvals.rb +265 -0
- data/lib/gitlab/client/merge_requests.rb +386 -0
- data/lib/gitlab/client/milestones.rb +106 -0
- data/lib/gitlab/client/namespaces.rb +22 -0
- data/lib/gitlab/client/notes.rb +313 -0
- data/lib/gitlab/client/packages.rb +95 -0
- data/lib/gitlab/client/pipeline_schedules.rb +147 -0
- data/lib/gitlab/client/pipeline_triggers.rb +103 -0
- data/lib/gitlab/client/pipelines.rb +105 -0
- data/lib/gitlab/client/project_badges.rb +85 -0
- data/lib/gitlab/client/project_clusters.rb +83 -0
- data/lib/gitlab/client/project_release_links.rb +76 -0
- data/lib/gitlab/client/project_releases.rb +79 -0
- data/lib/gitlab/client/projects.rb +708 -0
- data/lib/gitlab/client/protected_tags.rb +59 -0
- data/lib/gitlab/client/remote_mirrors.rb +51 -0
- data/lib/gitlab/client/repositories.rb +113 -0
- data/lib/gitlab/client/repository_files.rb +131 -0
- data/lib/gitlab/client/repository_submodules.rb +27 -0
- data/lib/gitlab/client/resource_label_events.rb +82 -0
- data/lib/gitlab/client/resource_state_events.rb +57 -0
- data/lib/gitlab/client/runners.rb +211 -0
- data/lib/gitlab/client/search.rb +66 -0
- data/lib/gitlab/client/services.rb +53 -0
- data/lib/gitlab/client/sidekiq.rb +39 -0
- data/lib/gitlab/client/snippets.rb +95 -0
- data/lib/gitlab/client/system_hooks.rb +64 -0
- data/lib/gitlab/client/tags.rb +97 -0
- data/lib/gitlab/client/templates.rb +100 -0
- data/lib/gitlab/client/todos.rb +46 -0
- data/lib/gitlab/client/user_snippets.rb +114 -0
- data/lib/gitlab/client/users.rb +397 -0
- data/lib/gitlab/client/versions.rb +18 -0
- data/lib/gitlab/client/wikis.rb +79 -0
- data/lib/gitlab/client.rb +95 -0
- data/lib/gitlab/configuration.rb +57 -0
- data/lib/gitlab/error.rb +170 -0
- data/lib/gitlab/file_response.rb +48 -0
- data/lib/gitlab/help.rb +94 -0
- data/lib/gitlab/objectified_hash.rb +51 -0
- data/lib/gitlab/page_links.rb +35 -0
- data/lib/gitlab/paginated_response.rb +110 -0
- data/lib/gitlab/request.rb +109 -0
- data/lib/gitlab/shell.rb +83 -0
- data/lib/gitlab/shell_history.rb +57 -0
- data/lib/gitlab/version.rb +5 -0
- data/lib/gitlab.rb +56 -0
- metadata +204 -0
data/lib/gitlab/cli.rb
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'gitlab'
|
4
|
+
require 'terminal-table/import'
|
5
|
+
require_relative 'cli_helpers'
|
6
|
+
require_relative 'shell'
|
7
|
+
|
8
|
+
class Gitlab::CLI
|
9
|
+
extend Helpers
|
10
|
+
|
11
|
+
# Starts a new CLI session.
|
12
|
+
#
|
13
|
+
# @example
|
14
|
+
# Gitlab::CLI.start(['help'])
|
15
|
+
# Gitlab::CLI.start(['help', 'issues'])
|
16
|
+
#
|
17
|
+
# @param [Array] args The command and it's optional arguments.
|
18
|
+
def self.start(args)
|
19
|
+
command = begin
|
20
|
+
args.shift.strip
|
21
|
+
rescue StandardError
|
22
|
+
'help'
|
23
|
+
end
|
24
|
+
run(command, args)
|
25
|
+
end
|
26
|
+
|
27
|
+
# Processes a CLI command and outputs a result to the stream (stdout).
|
28
|
+
#
|
29
|
+
# @example
|
30
|
+
# Gitlab::CLI.run('help')
|
31
|
+
# Gitlab::CLI.run('help', ['issues'])
|
32
|
+
#
|
33
|
+
# @param [String] cmd The name of a command.
|
34
|
+
# @param [Array] args The optional arguments for a command.
|
35
|
+
# @return [nil]
|
36
|
+
def self.run(cmd, args = [])
|
37
|
+
case cmd
|
38
|
+
when 'help'
|
39
|
+
puts help(args.shift) { |out| out.gsub!(/Gitlab\./, 'gitlab ') }
|
40
|
+
when 'info'
|
41
|
+
endpoint = Gitlab.endpoint || 'not set'
|
42
|
+
private_token = Gitlab.private_token || 'not set'
|
43
|
+
puts "Gitlab endpoint is #{endpoint}"
|
44
|
+
puts "Gitlab private token is #{private_token}"
|
45
|
+
puts "Ruby Version is #{RUBY_VERSION}"
|
46
|
+
puts "Gitlab Ruby Gem #{Gitlab::VERSION}"
|
47
|
+
when '-v', '--version'
|
48
|
+
puts "Gitlab Ruby Gem #{Gitlab::VERSION}"
|
49
|
+
when 'shell'
|
50
|
+
Gitlab::Shell.start
|
51
|
+
else
|
52
|
+
if args.include? '--json'
|
53
|
+
@json_output = true
|
54
|
+
args.delete '--json'
|
55
|
+
end
|
56
|
+
|
57
|
+
unless valid_command?(cmd)
|
58
|
+
puts 'Unknown command. Run `gitlab help` for a list of available commands.'
|
59
|
+
exit(0) if ENV['CI'] # FIXME: workaround to exit with 0 on passed specs
|
60
|
+
exit(1)
|
61
|
+
end
|
62
|
+
|
63
|
+
command_args = args.any? && args.last.start_with?('--only=', '--except=') ? args[0..-2] : args
|
64
|
+
|
65
|
+
begin
|
66
|
+
command_args.map! { |arg| symbolize_keys(yaml_load(arg)) }
|
67
|
+
rescue StandardError => e
|
68
|
+
puts e.message
|
69
|
+
exit 1
|
70
|
+
end
|
71
|
+
|
72
|
+
confirm_command(cmd)
|
73
|
+
|
74
|
+
data = gitlab_helper(cmd, command_args) { exit(1) }
|
75
|
+
|
76
|
+
render_output(cmd, args, data)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
# Helper method that checks whether we want to get the output as json
|
81
|
+
# @return [nil]
|
82
|
+
def self.render_output(cmd, args, data)
|
83
|
+
if defined?(@json_output) && @json_output
|
84
|
+
output_json(cmd, args, data)
|
85
|
+
else
|
86
|
+
output_table(cmd, args, data)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,243 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'yaml'
|
4
|
+
require 'json'
|
5
|
+
require 'base64'
|
6
|
+
|
7
|
+
class Gitlab::CLI
|
8
|
+
# Defines methods related to CLI output and formatting.
|
9
|
+
module Helpers
|
10
|
+
module_function
|
11
|
+
|
12
|
+
# Returns actions available to CLI & Shell
|
13
|
+
#
|
14
|
+
# @return [Array]
|
15
|
+
def actions
|
16
|
+
@actions ||= Gitlab.actions
|
17
|
+
end
|
18
|
+
|
19
|
+
# Returns Gitlab::Client instance
|
20
|
+
#
|
21
|
+
# @return [Gitlab::Client]
|
22
|
+
def client
|
23
|
+
@client ||= Gitlab::Client.new(endpoint: (Gitlab.endpoint || ''))
|
24
|
+
end
|
25
|
+
|
26
|
+
# Returns method names and their owners
|
27
|
+
#
|
28
|
+
# @return [Array<Hash>]
|
29
|
+
def method_owners
|
30
|
+
@method_owners ||= actions.map do |action|
|
31
|
+
{
|
32
|
+
name: action.to_s,
|
33
|
+
owner: client.method(action).owner.to_s
|
34
|
+
}
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# Returns filtered required fields.
|
39
|
+
#
|
40
|
+
# @return [Array]
|
41
|
+
def required_fields(args)
|
42
|
+
filtered_fields(args, '--only=')
|
43
|
+
end
|
44
|
+
|
45
|
+
# Returns filtered excluded fields.
|
46
|
+
#
|
47
|
+
# @return [Array]
|
48
|
+
def excluded_fields(args)
|
49
|
+
filtered_fields(args, '--except=')
|
50
|
+
end
|
51
|
+
|
52
|
+
# Returns fields filtered by a keyword.
|
53
|
+
#
|
54
|
+
# @return [Array]
|
55
|
+
def filtered_fields(args, key)
|
56
|
+
return [] unless args.any? && args.last.is_a?(String) && args.last.start_with?(key)
|
57
|
+
|
58
|
+
args.last.gsub(key, '').split(',')
|
59
|
+
end
|
60
|
+
|
61
|
+
# Confirms command is valid.
|
62
|
+
#
|
63
|
+
# @return [Boolean]
|
64
|
+
def valid_command?(cmd)
|
65
|
+
command = cmd.is_a?(Symbol) ? cmd : cmd.to_sym
|
66
|
+
Gitlab.actions.include?(command)
|
67
|
+
end
|
68
|
+
|
69
|
+
# Confirms command with a desctructive action.
|
70
|
+
#
|
71
|
+
# @return [String]
|
72
|
+
def confirm_command(cmd)
|
73
|
+
return unless cmd.start_with?('remove_', 'delete_')
|
74
|
+
|
75
|
+
puts 'Are you sure? (y/n)'
|
76
|
+
|
77
|
+
if %w[y yes].include?($stdin.gets.to_s.strip.downcase)
|
78
|
+
puts 'Proceeding..'
|
79
|
+
else
|
80
|
+
puts 'Command aborted.'
|
81
|
+
exit(1)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
# Gets defined help for a specific command/action.
|
86
|
+
#
|
87
|
+
# @return [String]
|
88
|
+
def help(cmd = nil, &block)
|
89
|
+
if cmd.nil? || Gitlab::Help.help_map.key?(cmd)
|
90
|
+
Gitlab::Help.actions_table(cmd)
|
91
|
+
else
|
92
|
+
Gitlab::Help.get_help(cmd, &block)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
# Outputs a nicely formatted table or error message.
|
97
|
+
def output_table(cmd, args, data)
|
98
|
+
case data
|
99
|
+
when Gitlab::ObjectifiedHash, Gitlab::FileResponse
|
100
|
+
puts record_table([data], cmd, args)
|
101
|
+
when Gitlab::PaginatedResponse
|
102
|
+
puts record_table(data, cmd, args)
|
103
|
+
else # probably just an error message
|
104
|
+
puts data
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def output_json(cmd, args, data)
|
109
|
+
if data.respond_to?(:empty?) && data.empty?
|
110
|
+
puts '{}'
|
111
|
+
else
|
112
|
+
hash_result = case data
|
113
|
+
when Gitlab::ObjectifiedHash, Gitlab::FileResponse
|
114
|
+
record_hash([data], cmd, args, single_value: true)
|
115
|
+
when Gitlab::PaginatedResponse
|
116
|
+
record_hash(data, cmd, args)
|
117
|
+
else
|
118
|
+
{ cmd: cmd, data: data, args: args }
|
119
|
+
end
|
120
|
+
puts JSON.pretty_generate(hash_result)
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
# Table to display records.
|
125
|
+
#
|
126
|
+
# @return [Terminal::Table]
|
127
|
+
def record_table(data, cmd, args)
|
128
|
+
return 'No data' if data.empty?
|
129
|
+
|
130
|
+
arr, keys = get_keys(args, data)
|
131
|
+
|
132
|
+
table do |t|
|
133
|
+
t.title = "Gitlab.#{cmd} #{args.join(', ')}"
|
134
|
+
t.headings = keys
|
135
|
+
|
136
|
+
arr.each_with_index do |hash, index|
|
137
|
+
values = []
|
138
|
+
|
139
|
+
keys.each do |key|
|
140
|
+
case value = hash[key]
|
141
|
+
when Hash
|
142
|
+
value = value.key?('id') ? value['id'] : 'Hash'
|
143
|
+
when StringIO
|
144
|
+
value = 'File'
|
145
|
+
when nil
|
146
|
+
value = 'null'
|
147
|
+
end
|
148
|
+
|
149
|
+
values << value
|
150
|
+
end
|
151
|
+
|
152
|
+
t.add_row values
|
153
|
+
t.add_separator unless arr.size - 1 == index
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
# Renders the result of given commands and arguments into a Hash
|
159
|
+
#
|
160
|
+
# @param [Array] data Resultset from the API call
|
161
|
+
# @param [String] cmd The command passed to the API
|
162
|
+
# @param [Array] args Options passed to the API call
|
163
|
+
# @param [bool] single_value If set to true, a single result should be returned
|
164
|
+
# @return [Hash] Result hash
|
165
|
+
def record_hash(data, cmd, args, single_value: false)
|
166
|
+
if data.empty?
|
167
|
+
result = nil
|
168
|
+
else
|
169
|
+
arr, keys = get_keys(args, data)
|
170
|
+
result = []
|
171
|
+
arr.each do |hash|
|
172
|
+
row = {}
|
173
|
+
|
174
|
+
keys.each do |key|
|
175
|
+
row[key] = case hash[key]
|
176
|
+
when Hash
|
177
|
+
'Hash'
|
178
|
+
when StringIO
|
179
|
+
Base64.encode64(hash[key].read)
|
180
|
+
when nil
|
181
|
+
nil
|
182
|
+
else
|
183
|
+
hash[key]
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
result.push row
|
188
|
+
end
|
189
|
+
result = result[0] if single_value && result.count.positive?
|
190
|
+
end
|
191
|
+
|
192
|
+
{
|
193
|
+
cmd: "Gitlab.#{cmd} #{args.join(', ')}".strip,
|
194
|
+
result: result
|
195
|
+
}
|
196
|
+
end
|
197
|
+
|
198
|
+
# Helper function to get rows and keys from data returned from API call
|
199
|
+
def get_keys(args, data)
|
200
|
+
arr = data.map(&:to_h)
|
201
|
+
keys = arr.first.keys.sort_by(&:to_s)
|
202
|
+
keys &= required_fields(args) if required_fields(args).any?
|
203
|
+
keys -= excluded_fields(args)
|
204
|
+
[arr, keys]
|
205
|
+
end
|
206
|
+
|
207
|
+
# Helper function to call Gitlab commands with args.
|
208
|
+
def gitlab_helper(cmd, args = [])
|
209
|
+
args.any? ? Gitlab.send(cmd, *args) : Gitlab.send(cmd)
|
210
|
+
rescue StandardError => e
|
211
|
+
puts e.message
|
212
|
+
yield if block_given?
|
213
|
+
end
|
214
|
+
|
215
|
+
# Convert a hash (recursively) to use symbol hash keys
|
216
|
+
# @return [Hash]
|
217
|
+
def symbolize_keys(hash)
|
218
|
+
if hash.is_a?(Hash)
|
219
|
+
hash = hash.each_with_object({}) do |(key, value), new_hash|
|
220
|
+
new_hash[key.to_sym] = symbolize_keys(value)
|
221
|
+
rescue NoMethodError
|
222
|
+
raise "Error: cannot convert hash key to symbol: #{key}"
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
226
|
+
hash
|
227
|
+
end
|
228
|
+
|
229
|
+
# Check if arg is a color in 6-digit hex notation with leading '#' sign
|
230
|
+
def hex_color?(arg)
|
231
|
+
pattern = /\A#\h{6}\Z/
|
232
|
+
|
233
|
+
pattern.match(arg)
|
234
|
+
end
|
235
|
+
|
236
|
+
# YAML::load on a single argument
|
237
|
+
def yaml_load(arg)
|
238
|
+
hex_color?(arg) ? arg : YAML.safe_load(arg)
|
239
|
+
rescue Psych::SyntaxError
|
240
|
+
raise "Error: Argument is not valid YAML syntax: #{arg}"
|
241
|
+
end
|
242
|
+
end
|
243
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class Gitlab::Client
|
4
|
+
# Defines methods related to Award Emojis.
|
5
|
+
# @see https://docs.gitlab.com/ce/api/access_requests.html
|
6
|
+
module AccessRequests
|
7
|
+
# Gets a list of access requests for a project viewable by the authenticated user.
|
8
|
+
#
|
9
|
+
# @example
|
10
|
+
# Gitlab.project_access_requests(1)
|
11
|
+
#
|
12
|
+
# @param [Integer, String] :project(required) The ID or name of a project.
|
13
|
+
# @return [Array<Gitlab::ObjectifiedHash>] List of project access requests
|
14
|
+
def project_access_requests(project)
|
15
|
+
get("/projects/#{url_encode project}/access_requests")
|
16
|
+
end
|
17
|
+
|
18
|
+
# Gets a list of access requests for a group viewable by the authenticated user.
|
19
|
+
#
|
20
|
+
# @example
|
21
|
+
# Gitlab.group_access_requests(1)
|
22
|
+
#
|
23
|
+
# @param [Integer, String] :group(required) The ID or name of a group.
|
24
|
+
# @return [Array<Gitlab::ObjectifiedHash>] List of group access requests
|
25
|
+
def group_access_requests(group)
|
26
|
+
get("/groups/#{url_encode group}/access_requests")
|
27
|
+
end
|
28
|
+
|
29
|
+
# Requests access for the authenticated user to a project.
|
30
|
+
#
|
31
|
+
# @example
|
32
|
+
# Gitlab.request_project_access(1)
|
33
|
+
#
|
34
|
+
# @param [Integer, String] :project(required) The ID or name of a project.
|
35
|
+
# @return <Gitlab::ObjectifiedHash] Information about the requested project access
|
36
|
+
def request_project_access(project)
|
37
|
+
post("/projects/#{url_encode project}/access_requests")
|
38
|
+
end
|
39
|
+
|
40
|
+
# Requests access for the authenticated user to a group.
|
41
|
+
#
|
42
|
+
# @example
|
43
|
+
# Gitlab.request_group_access(1)
|
44
|
+
#
|
45
|
+
# @param [Integer, String] :group(required) The ID or name of a group.
|
46
|
+
# @return <Gitlab::ObjectifiedHash] Information about the requested group access
|
47
|
+
def request_group_access(group)
|
48
|
+
post("/groups/#{url_encode group}/access_requests")
|
49
|
+
end
|
50
|
+
|
51
|
+
# Approves a project access request for the given user.
|
52
|
+
#
|
53
|
+
# @example
|
54
|
+
# Gitlab.approve_project_access_request(1, 1)
|
55
|
+
# Gitlab.approve_project_access_request(1, 1, {access_level: '30'})
|
56
|
+
#
|
57
|
+
# @param [Integer, String] :project(required) The ID or name of a project.
|
58
|
+
# @param [Integer] :user_id(required) The user ID of the access requester
|
59
|
+
# @option options [Integer] :access_level(optional) A valid access level (defaults: 30, developer access level)
|
60
|
+
# @return <Gitlab::ObjectifiedHash] Information about the approved project access request
|
61
|
+
def approve_project_access_request(project, user_id, options = {})
|
62
|
+
put("/projects/#{url_encode project}/access_requests/#{user_id}/approve", body: options)
|
63
|
+
end
|
64
|
+
|
65
|
+
# Approves a group access request for the given user.
|
66
|
+
#
|
67
|
+
# @example
|
68
|
+
# Gitlab.approve_group_access_request(1, 1)
|
69
|
+
# Gitlab.approve_group_access_request(1, 1, {access_level: '30'})
|
70
|
+
#
|
71
|
+
# @param [Integer, String] :group(required) The ID or name of a group.
|
72
|
+
# @param [Integer] :user_id(required) The user ID of the access requester
|
73
|
+
# @option options [Integer] :access_level(optional) A valid access level (defaults: 30, developer access level)
|
74
|
+
# @return <Gitlab::ObjectifiedHash] Information about the approved group access request
|
75
|
+
def approve_group_access_request(group, user_id, options = {})
|
76
|
+
put("/groups/#{url_encode group}/access_requests/#{user_id}/approve", body: options)
|
77
|
+
end
|
78
|
+
|
79
|
+
# Denies a project access request for the given user.
|
80
|
+
#
|
81
|
+
# @example
|
82
|
+
# Gitlab.deny_project_access_request(1, 1)
|
83
|
+
#
|
84
|
+
# @param [Integer, String] :project(required) The ID or name of a project.
|
85
|
+
# @param [Integer] :user_id(required) The user ID of the access requester
|
86
|
+
# @return [void] This API call returns an empty response body.
|
87
|
+
def deny_project_access_request(project, user_id)
|
88
|
+
delete("/projects/#{url_encode project}/access_requests/#{user_id}")
|
89
|
+
end
|
90
|
+
|
91
|
+
# Denies a group access request for the given user.
|
92
|
+
#
|
93
|
+
# @example
|
94
|
+
# Gitlab.deny_group_access_request(1, 1)
|
95
|
+
#
|
96
|
+
# @param [Integer, String] :group(required) The ID or name of a group.
|
97
|
+
# @param [Integer] :user_id(required) The user ID of the access requester
|
98
|
+
# @return [void] This API call returns an empty response body.
|
99
|
+
def deny_group_access_request(group, user_id)
|
100
|
+
delete("/groups/#{url_encode group}/access_requests/#{user_id}")
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
@@ -0,0 +1,172 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class Gitlab::Client
|
4
|
+
# Defines methods related to application settings.
|
5
|
+
# @see https://docs.gitlab.com/ee/api/settings.html
|
6
|
+
module ApplicationSettings
|
7
|
+
# Retrives the application settings of Gitlab.
|
8
|
+
#
|
9
|
+
# @example
|
10
|
+
# Gitlab.application_settings
|
11
|
+
#
|
12
|
+
# @return [Array<Gitlab::ObjectifiedHash>]
|
13
|
+
def application_settings
|
14
|
+
get('/application/settings')
|
15
|
+
end
|
16
|
+
|
17
|
+
# Edit the applications settings of Gitlab.
|
18
|
+
#
|
19
|
+
# @example
|
20
|
+
# Gitlab.edit_application_settings({ signup_enabled: false })
|
21
|
+
#
|
22
|
+
# @param [Hash] options A customizable set of options.
|
23
|
+
# @option options [String] :admin_notification_email
|
24
|
+
# @option options [String] :after_sign_out_path
|
25
|
+
# @option options [String] :after_sign_up_text
|
26
|
+
# @option options [String] :akismet_api_key
|
27
|
+
# @option options [Boolean] :akismet_enabled
|
28
|
+
# @option options [Boolean] :allow_group_owners_to_manage_ldap
|
29
|
+
# @option options [Boolean] :allow_local_requests_from_hooks_and_services
|
30
|
+
# @option options [Boolean] :authorized_keys_enabled
|
31
|
+
# @option options [String] :auto_devops_domain
|
32
|
+
# @option options [Boolean] :auto_devops_enabled
|
33
|
+
# @option options [Boolean] :check_namespace_plan
|
34
|
+
# @option options [String] :clientside_sentry_dsn
|
35
|
+
# @option options [Boolean] :clientside_sentry_enabled
|
36
|
+
# @option options [Integer] :container_registry_token_expire_delay
|
37
|
+
# @option options [String] :default_artifacts_expire_in
|
38
|
+
# @option options [Integer] :default_branch_protection
|
39
|
+
# @option options [String] :default_group_visibility
|
40
|
+
# @option options [String] :default_project_visibility
|
41
|
+
# @option options [Integer] :default_projects_limit
|
42
|
+
# @option options [String] :default_snippet_visibility
|
43
|
+
# @option options [Array<String>] :disabled_oauth_sign_in_sources
|
44
|
+
# @option options [Array<String>] :domain_blacklist
|
45
|
+
# @option options [Boolean] :domain_blacklist_enabled
|
46
|
+
# @option options [Array<String>] :domain_whitelist
|
47
|
+
# @option options [Integer] :dsa_key_restriction
|
48
|
+
# @option options [Integer] :ecdsa_key_restriction
|
49
|
+
# @option options [Integer] :ed25519_key_restriction
|
50
|
+
# @option options [Boolean] :elasticsearch_aws
|
51
|
+
# @option options [String] :elasticsearch_aws_access_key
|
52
|
+
# @option options [String] :elasticsearch_aws_region
|
53
|
+
# @option options [String] :elasticsearch_aws_secret_access_key
|
54
|
+
# @option options [Boolean] :elasticsearch_experimental_indexer
|
55
|
+
# @option options [Boolean] :elasticsearch_indexing
|
56
|
+
# @option options [Boolean] :elasticsearch_search
|
57
|
+
# @option options [String] :elasticsearch_url
|
58
|
+
# @option options [Boolean] :elasticsearch_limit_indexing
|
59
|
+
# @option options [Array<Integer>] :elasticsearch_project_ids
|
60
|
+
# @option options [Array<Integer>] :elasticsearch_namespace_ids
|
61
|
+
# @option options [String] :email_additional_text
|
62
|
+
# @option options [Boolean] :email_author_in_body
|
63
|
+
# @option options [String] :enabled_git_access_protocol
|
64
|
+
# @option options [Boolean] :enforce_terms
|
65
|
+
# @option options [String] :external_auth_client_cert
|
66
|
+
# @option options [String] :external_auth_client_key
|
67
|
+
# @option options [String] :external_auth_client_key_pass
|
68
|
+
# @option options [Boolean] :external_authorization_service_enabled
|
69
|
+
# @option options [String] :external_authorization_service_default_label
|
70
|
+
# @option options [Float] :external_authorization_service_timeout float
|
71
|
+
# @option options [String] :external_authorization_service_url
|
72
|
+
# @option options [Integer] :file_template_project_id
|
73
|
+
# @option options [Integer] :first_day_of_week
|
74
|
+
# @option options [Integer] :geo_status_timeout
|
75
|
+
# @option options [Integer] :gitaly_timeout_default
|
76
|
+
# @option options [Integer] :gitaly_timeout_fast
|
77
|
+
# @option options [Integer] :gitaly_timeout_medium
|
78
|
+
# @option options [Boolean] :gravatar_enabled
|
79
|
+
# @option options [Boolean] :hashed_storage_enabled
|
80
|
+
# @option options [Boolean] :help_page_hide_commercial_content
|
81
|
+
# @option options [String] :help_page_support_url
|
82
|
+
# @option options [String] :help_page_text
|
83
|
+
# @option options [String] :help_text
|
84
|
+
# @option options [Boolean] :hide_third_party_offers
|
85
|
+
# @option options [String] :home_page_url
|
86
|
+
# @option options [Boolean] :housekeeping_bitmaps_enabled
|
87
|
+
# @option options [Boolean] :housekeeping_enabled
|
88
|
+
# @option options [Integer] :housekeeping_full_repack_period
|
89
|
+
# @option options [Integer] :housekeeping_gc_period
|
90
|
+
# @option options [Integer] :housekeeping_incremental_repack_period
|
91
|
+
# @option options [Boolean] :html_emails_enabled
|
92
|
+
# @option options [Boolean] :instance_statistics_visibility_private
|
93
|
+
# @option options [Array<String>] :import_sources
|
94
|
+
# @option options [Integer] :max_artifacts_size
|
95
|
+
# @option options [Integer] :max_attachment_size
|
96
|
+
# @option options [Integer] :max_pages_size
|
97
|
+
# @option options [Boolean] :metrics_enabled
|
98
|
+
# @option options [String] :metrics_host
|
99
|
+
# @option options [Integer] :metrics_method_call_threshold
|
100
|
+
# @option options [Integer] :metrics_packet_size
|
101
|
+
# @option options [Integer] :metrics_pool_size
|
102
|
+
# @option options [Integer] :metrics_port
|
103
|
+
# @option options [Integer] :metrics_sample_interval
|
104
|
+
# @option options [Integer] :metrics_timeout
|
105
|
+
# @option options [Boolean] :mirror_available
|
106
|
+
# @option options [Integer] :mirror_capacity_threshold
|
107
|
+
# @option options [Integer] :mirror_max_capacity
|
108
|
+
# @option options [Integer] :mirror_max_delay
|
109
|
+
# @option options [Boolean] :pages_domain_verification_enabled
|
110
|
+
# @option options [Boolean] :password_authentication_enabled_for_git
|
111
|
+
# @option options [Boolean] :password_authentication_enabled_for_web
|
112
|
+
# @option options [String] :performance_bar_allowed_group_id
|
113
|
+
# @option options [String] :performance_bar_allowed_group_path
|
114
|
+
# @option options [Boolean] :performance_bar_enabled
|
115
|
+
# @option options [Boolean] :plantuml_enabled
|
116
|
+
# @option options [String] :plantuml_url
|
117
|
+
# @option options [Float] :polling_interval_multiplier
|
118
|
+
# @option options [Boolean] :project_export_enabled
|
119
|
+
# @option options [Boolean] :prometheus_metrics_enabled
|
120
|
+
# @option options [Boolean] :pseudonymizer_enabled
|
121
|
+
# @option options [Boolean] :recaptcha_enabled
|
122
|
+
# @option options [String] :recaptcha_private_key
|
123
|
+
# @option options [String] :recaptcha_site_key
|
124
|
+
# @option options [Boolean] :repository_checks_enabled
|
125
|
+
# @option options [Integer] :repository_size_limit
|
126
|
+
# @option options [Array<String>] :repository_storages
|
127
|
+
# @option options [Boolean] :require_two_factor_authentication
|
128
|
+
# @option options [Array<String>] :restricted_visibility_levels
|
129
|
+
# @option options [Integer] :rsa_key_restriction
|
130
|
+
# @option options [Boolean] :send_user_confirmation_email
|
131
|
+
# @option options [String] :sentry_dsn
|
132
|
+
# @option options [Boolean] :sentry_enabled
|
133
|
+
# @option options [Integer] :session_expire_delay
|
134
|
+
# @option options [Boolean] :shared_runners_enabled
|
135
|
+
# @option options [Integer] :shared_runners_minutes
|
136
|
+
# @option options [String] :shared_runners_text
|
137
|
+
# @option options [String] :sign_in_text
|
138
|
+
# @option options [String] :signin_enabled
|
139
|
+
# @option options [Boolean] :signup_enabled
|
140
|
+
# @option options [Boolean] :slack_app_enabled
|
141
|
+
# @option options [String] :slack_app_id
|
142
|
+
# @option options [String] :slack_app_secret
|
143
|
+
# @option options [String] :slack_app_verification_token
|
144
|
+
# @option options [Integer] :terminal_max_session_time
|
145
|
+
# @option options [String] :terms
|
146
|
+
# @option options [Boolean] :throttle_authenticated_api_enabled
|
147
|
+
# @option options [Integer] :throttle_authenticated_api_period_in_seconds
|
148
|
+
# @option options [Integer] :throttle_authenticated_api_requests_per_period
|
149
|
+
# @option options [Boolean] :throttle_authenticated_web_enabled
|
150
|
+
# @option options [Integer] :throttle_authenticated_web_period_in_seconds
|
151
|
+
# @option options [Integer] :throttle_authenticated_web_requests_per_period
|
152
|
+
# @option options [Boolean] :throttle_unauthenticated_enabled
|
153
|
+
# @option options [Integer] :throttle_unauthenticated_period_in_seconds
|
154
|
+
# @option options [Integer] :throttle_unauthenticated_requests_per_period
|
155
|
+
# @option options [Integer] :two_factor_grace_period
|
156
|
+
# @option options [Boolean] :unique_ips_limit_enabled
|
157
|
+
# @option options [Integer] :unique_ips_limit_per_user
|
158
|
+
# @option options [Integer] :unique_ips_limit_time_window
|
159
|
+
# @option options [Boolean] :usage_ping_enabled
|
160
|
+
# @option options [Boolean] :user_default_external
|
161
|
+
# @option options [Boolean] :user_oauth_applications
|
162
|
+
# @option options [Boolean] :user_show_add_ssh_key_message
|
163
|
+
# @option options [Boolean] :version_check_enabled
|
164
|
+
# @option options [Integer] :local_markdown_version
|
165
|
+
# @option options [String] :geo_node_allowed_ips
|
166
|
+
#
|
167
|
+
# @return [Array<Gitlab::ObjectifiedHash>]
|
168
|
+
def edit_application_settings(options = {})
|
169
|
+
put('/application/settings', body: options)
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class Gitlab::Client
|
4
|
+
# Defines methods related to avatar.
|
5
|
+
# @see https://docs.gitlab.com/ce/api/avatar.html
|
6
|
+
module Avatar
|
7
|
+
# Get a single avatar URL for a user with the given email address.
|
8
|
+
#
|
9
|
+
# @example
|
10
|
+
# Gitlab.avatar(email: 'admin@example.com')
|
11
|
+
# Gitlab.avatar(email: 'admin@example.com', size: 32)
|
12
|
+
#
|
13
|
+
# @param [Hash] options A customizable set of options.
|
14
|
+
# @option options [String] :email(required) Public email address of the user.
|
15
|
+
# @option options [Integer] :size(optional) Single pixel dimension (since images are squares). Only used for avatar lookups at Gravatar or at the configured Libravatar server.
|
16
|
+
# @return <Gitlab::ObjectifiedHash>
|
17
|
+
def avatar(options = {})
|
18
|
+
get('/avatar', query: options)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|