gitlab-akerl 4.0.0
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/.gitignore +20 -0
- data/.prospectus +11 -0
- data/.travis.yml +8 -0
- data/CHANGELOG.md +229 -0
- data/CONTRIBUTING.md +195 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +24 -0
- data/README.md +192 -0
- data/Rakefile +9 -0
- data/bin/console +10 -0
- data/bin/setup +6 -0
- data/exe/gitlab +7 -0
- data/gitlab-akerl.gemspec +31 -0
- data/lib/gitlab.rb +45 -0
- data/lib/gitlab/api.rb +19 -0
- data/lib/gitlab/cli.rb +89 -0
- data/lib/gitlab/cli_helpers.rb +241 -0
- data/lib/gitlab/client.rb +48 -0
- data/lib/gitlab/client/branches.rb +91 -0
- data/lib/gitlab/client/build_triggers.rb +51 -0
- data/lib/gitlab/client/build_variables.rb +66 -0
- data/lib/gitlab/client/builds.rb +106 -0
- data/lib/gitlab/client/commits.rb +121 -0
- data/lib/gitlab/client/groups.rb +144 -0
- data/lib/gitlab/client/issues.rb +113 -0
- data/lib/gitlab/client/labels.rb +57 -0
- data/lib/gitlab/client/merge_requests.rb +168 -0
- data/lib/gitlab/client/milestones.rb +78 -0
- data/lib/gitlab/client/namespaces.rb +20 -0
- data/lib/gitlab/client/notes.rb +161 -0
- data/lib/gitlab/client/pipelines.rb +68 -0
- data/lib/gitlab/client/projects.rb +471 -0
- data/lib/gitlab/client/repositories.rb +78 -0
- data/lib/gitlab/client/repository_files.rb +88 -0
- data/lib/gitlab/client/runners.rb +115 -0
- data/lib/gitlab/client/services.rb +50 -0
- data/lib/gitlab/client/snippets.rb +91 -0
- data/lib/gitlab/client/system_hooks.rb +59 -0
- data/lib/gitlab/client/tags.rb +96 -0
- data/lib/gitlab/client/users.rb +250 -0
- data/lib/gitlab/configuration.rb +55 -0
- data/lib/gitlab/error.rb +85 -0
- data/lib/gitlab/file_response.rb +46 -0
- data/lib/gitlab/help.rb +95 -0
- data/lib/gitlab/objectified_hash.rb +34 -0
- data/lib/gitlab/page_links.rb +33 -0
- data/lib/gitlab/paginated_response.rb +97 -0
- data/lib/gitlab/request.rb +117 -0
- data/lib/gitlab/shell.rb +84 -0
- data/lib/gitlab/shell_history.rb +59 -0
- data/lib/gitlab/version.rb +3 -0
- data/spec/fixtures/branch.json +1 -0
- data/spec/fixtures/branch_delete.json +3 -0
- data/spec/fixtures/branches.json +1 -0
- data/spec/fixtures/build.json +38 -0
- data/spec/fixtures/build_artifacts.json +0 -0
- data/spec/fixtures/build_cancel.json +24 -0
- data/spec/fixtures/build_erase.json +24 -0
- data/spec/fixtures/build_retry.json +24 -0
- data/spec/fixtures/builds.json +78 -0
- data/spec/fixtures/builds_commits.json +64 -0
- data/spec/fixtures/compare_merge_request_diff.json +31 -0
- data/spec/fixtures/error_already_exists.json +1 -0
- data/spec/fixtures/error_project_not_found.json +1 -0
- data/spec/fixtures/get_repository_file.json +1 -0
- data/spec/fixtures/git_hook.json +1 -0
- data/spec/fixtures/group.json +60 -0
- data/spec/fixtures/group_create.json +1 -0
- data/spec/fixtures/group_create_with_description.json +1 -0
- data/spec/fixtures/group_delete.json +1 -0
- data/spec/fixtures/group_member.json +1 -0
- data/spec/fixtures/group_member_delete.json +1 -0
- data/spec/fixtures/group_member_edit.json +1 -0
- data/spec/fixtures/group_members.json +1 -0
- data/spec/fixtures/group_projects.json +44 -0
- data/spec/fixtures/group_search.json +2 -0
- data/spec/fixtures/groups.json +2 -0
- data/spec/fixtures/issue.json +1 -0
- data/spec/fixtures/issues.json +1 -0
- data/spec/fixtures/key.json +1 -0
- data/spec/fixtures/keys.json +1 -0
- data/spec/fixtures/label.json +1 -0
- data/spec/fixtures/labels.json +1 -0
- data/spec/fixtures/merge_request.json +1 -0
- data/spec/fixtures/merge_request_changes.json +1 -0
- data/spec/fixtures/merge_request_comment.json +1 -0
- data/spec/fixtures/merge_request_comments.json +1 -0
- data/spec/fixtures/merge_request_commits.json +1 -0
- data/spec/fixtures/merge_requests.json +1 -0
- data/spec/fixtures/milestone.json +1 -0
- data/spec/fixtures/milestone_issues.json +1 -0
- data/spec/fixtures/milestones.json +1 -0
- data/spec/fixtures/namespaces.json +1 -0
- data/spec/fixtures/note.json +1 -0
- data/spec/fixtures/notes.json +1 -0
- data/spec/fixtures/pipeline.json +23 -0
- data/spec/fixtures/pipeline_cancel.json +23 -0
- data/spec/fixtures/pipeline_create.json +23 -0
- data/spec/fixtures/pipeline_retry.json +23 -0
- data/spec/fixtures/pipelines.json +48 -0
- data/spec/fixtures/project.json +1 -0
- data/spec/fixtures/project_commit.json +13 -0
- data/spec/fixtures/project_commit_comment.json +1 -0
- data/spec/fixtures/project_commit_comments.json +1 -0
- data/spec/fixtures/project_commit_diff.json +10 -0
- data/spec/fixtures/project_commit_status.json +42 -0
- data/spec/fixtures/project_commits.json +1 -0
- data/spec/fixtures/project_edit.json +21 -0
- data/spec/fixtures/project_events.json +1 -0
- data/spec/fixtures/project_for_user.json +1 -0
- data/spec/fixtures/project_fork.json +50 -0
- data/spec/fixtures/project_fork_link.json +1 -0
- data/spec/fixtures/project_forked_for_user.json +50 -0
- data/spec/fixtures/project_hook.json +1 -0
- data/spec/fixtures/project_hooks.json +1 -0
- data/spec/fixtures/project_issues.json +1 -0
- data/spec/fixtures/project_key.json +6 -0
- data/spec/fixtures/project_keys.json +6 -0
- data/spec/fixtures/project_runner_enable.json +7 -0
- data/spec/fixtures/project_runners.json +16 -0
- data/spec/fixtures/project_search.json +1 -0
- data/spec/fixtures/project_star.json +44 -0
- data/spec/fixtures/project_tag_annotated.json +1 -0
- data/spec/fixtures/project_tag_lightweight.json +1 -0
- data/spec/fixtures/project_tags.json +1 -0
- data/spec/fixtures/project_unstar.json +44 -0
- data/spec/fixtures/project_update_commit_status.json +20 -0
- data/spec/fixtures/projects.json +1 -0
- data/spec/fixtures/raw_file.json +2 -0
- data/spec/fixtures/release_create.json +1 -0
- data/spec/fixtures/release_update.json +1 -0
- data/spec/fixtures/repository_file.json +1 -0
- data/spec/fixtures/runner.json +26 -0
- data/spec/fixtures/runner_delete.json +7 -0
- data/spec/fixtures/runner_edit.json +26 -0
- data/spec/fixtures/runners.json +16 -0
- data/spec/fixtures/runners_all.json +30 -0
- data/spec/fixtures/service.json +1 -0
- data/spec/fixtures/session.json +1 -0
- data/spec/fixtures/shell_history.json +2 -0
- data/spec/fixtures/snippet.json +1 -0
- data/spec/fixtures/snippet_content.json +3 -0
- data/spec/fixtures/snippets.json +1 -0
- data/spec/fixtures/system_hook.json +1 -0
- data/spec/fixtures/system_hooks.json +1 -0
- data/spec/fixtures/tag.json +1 -0
- data/spec/fixtures/tag_create.json +1 -0
- data/spec/fixtures/tag_create_with_description.json +1 -0
- data/spec/fixtures/tag_delete.json +1 -0
- data/spec/fixtures/tags.json +1 -0
- data/spec/fixtures/team_member.json +1 -0
- data/spec/fixtures/team_members.json +1 -0
- data/spec/fixtures/tree.json +1 -0
- data/spec/fixtures/trigger.json +7 -0
- data/spec/fixtures/triggers.json +16 -0
- data/spec/fixtures/user.json +1 -0
- data/spec/fixtures/user_block_unblock.json +1 -0
- data/spec/fixtures/user_email.json +1 -0
- data/spec/fixtures/user_emails.json +1 -0
- data/spec/fixtures/user_search.json +1 -0
- data/spec/fixtures/users.json +1 -0
- data/spec/fixtures/variable.json +4 -0
- data/spec/fixtures/variables.json +10 -0
- data/spec/gitlab/cli_helpers_spec.rb +57 -0
- data/spec/gitlab/cli_spec.rb +110 -0
- data/spec/gitlab/client/branches_spec.rb +99 -0
- data/spec/gitlab/client/build_triggers_spec.rb +67 -0
- data/spec/gitlab/client/build_variables_spec.rb +86 -0
- data/spec/gitlab/client/builds_spec.rb +148 -0
- data/spec/gitlab/client/client_spec.rb +11 -0
- data/spec/gitlab/client/commits_spec.rb +137 -0
- data/spec/gitlab/client/groups_spec.rb +197 -0
- data/spec/gitlab/client/issues_spec.rb +138 -0
- data/spec/gitlab/client/labels_spec.rb +68 -0
- data/spec/gitlab/client/merge_requests_spec.rb +177 -0
- data/spec/gitlab/client/milestones_spec.rb +82 -0
- data/spec/gitlab/client/namespaces_spec.rb +22 -0
- data/spec/gitlab/client/notes_spec.rb +205 -0
- data/spec/gitlab/client/pipelines_spec.rb +95 -0
- data/spec/gitlab/client/projects_spec.rb +603 -0
- data/spec/gitlab/client/repositories_spec.rb +109 -0
- data/spec/gitlab/client/repository_files_spec.rb +62 -0
- data/spec/gitlab/client/runners_spec.rb +185 -0
- data/spec/gitlab/client/services_spec.rb +55 -0
- data/spec/gitlab/client/snippets_spec.rb +100 -0
- data/spec/gitlab/client/system_hooks_spec.rb +69 -0
- data/spec/gitlab/client/tags_spec.rb +109 -0
- data/spec/gitlab/client/users_spec.rb +418 -0
- data/spec/gitlab/error_spec.rb +45 -0
- data/spec/gitlab/file_response_spec.rb +33 -0
- data/spec/gitlab/help_spec.rb +46 -0
- data/spec/gitlab/objectified_hash_spec.rb +48 -0
- data/spec/gitlab/page_links_spec.rb +16 -0
- data/spec/gitlab/paginated_response_spec.rb +60 -0
- data/spec/gitlab/request_spec.rb +73 -0
- data/spec/gitlab/shell_history_spec.rb +53 -0
- data/spec/gitlab/shell_spec.rb +80 -0
- data/spec/gitlab_spec.rb +97 -0
- data/spec/spec_helper.rb +74 -0
- metadata +476 -0
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
require 'yaml'
|
|
2
|
+
require 'json'
|
|
3
|
+
require 'base64'
|
|
4
|
+
|
|
5
|
+
class Gitlab::CLI
|
|
6
|
+
# Defines methods related to CLI output and formatting.
|
|
7
|
+
module Helpers
|
|
8
|
+
extend self
|
|
9
|
+
|
|
10
|
+
# Returns actions available to CLI & Shell
|
|
11
|
+
#
|
|
12
|
+
# @return [Array]
|
|
13
|
+
def actions
|
|
14
|
+
@actions ||= Gitlab.actions
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Returns Gitlab::Client instance
|
|
18
|
+
#
|
|
19
|
+
# @return [Gitlab::Client]
|
|
20
|
+
def client
|
|
21
|
+
@client ||= Gitlab::Client.new(endpoint: (Gitlab.endpoint || ''))
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Returns method names and their owners
|
|
25
|
+
#
|
|
26
|
+
# @return [Array<Hash>]
|
|
27
|
+
def method_owners
|
|
28
|
+
@method_owners ||= actions.map do |action|
|
|
29
|
+
{
|
|
30
|
+
name: action.to_s,
|
|
31
|
+
owner: client.method(action).owner.to_s
|
|
32
|
+
}
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Returns filtered required fields.
|
|
37
|
+
#
|
|
38
|
+
# @return [Array]
|
|
39
|
+
def required_fields(args)
|
|
40
|
+
if args.any? && args.last.is_a?(String) && args.last.start_with?('--only=')
|
|
41
|
+
args.last.gsub('--only=', '').split(',')
|
|
42
|
+
else
|
|
43
|
+
[]
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Returns filtered excluded fields.
|
|
48
|
+
#
|
|
49
|
+
# @return [Array]
|
|
50
|
+
def excluded_fields(args)
|
|
51
|
+
if args.any? && args.last.is_a?(String) && args.last.start_with?('--except=')
|
|
52
|
+
args.last.gsub('--except=', '').split(',')
|
|
53
|
+
else
|
|
54
|
+
[]
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# Confirms command is valid.
|
|
59
|
+
#
|
|
60
|
+
# @return [Boolean]
|
|
61
|
+
def valid_command?(cmd)
|
|
62
|
+
command = cmd.is_a?(Symbol) ? cmd : cmd.to_sym
|
|
63
|
+
Gitlab.actions.include?(command)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# Confirms command with a desctructive action.
|
|
67
|
+
#
|
|
68
|
+
# @return [String]
|
|
69
|
+
def confirm_command(cmd)
|
|
70
|
+
if cmd.start_with?('remove_') || cmd.start_with?('delete_')
|
|
71
|
+
puts "Are you sure? (y/n)"
|
|
72
|
+
if %w(y yes).include?($stdin.gets.to_s.strip.downcase)
|
|
73
|
+
puts 'Proceeding..'
|
|
74
|
+
else
|
|
75
|
+
puts 'Command aborted.'
|
|
76
|
+
exit(1)
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# Gets defined help for a specific command/action.
|
|
82
|
+
#
|
|
83
|
+
# @return [String]
|
|
84
|
+
def help(cmd=nil, &block)
|
|
85
|
+
if cmd.nil? || Gitlab::Help.help_map.key?(cmd)
|
|
86
|
+
Gitlab::Help.actions_table(cmd)
|
|
87
|
+
else
|
|
88
|
+
Gitlab::Help.get_help(cmd, &block)
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# Outputs a nicely formatted table or error msg.
|
|
93
|
+
def output_table(cmd, args, data)
|
|
94
|
+
case data
|
|
95
|
+
when Gitlab::ObjectifiedHash, Gitlab::FileResponse
|
|
96
|
+
puts record_table([data], cmd, args)
|
|
97
|
+
when Gitlab::PaginatedResponse
|
|
98
|
+
puts record_table(data, cmd, args)
|
|
99
|
+
else # probably just an error msg
|
|
100
|
+
puts data
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def output_json(cmd, args, data)
|
|
105
|
+
if data.empty?
|
|
106
|
+
puts '{}'
|
|
107
|
+
else
|
|
108
|
+
hash_result = case data
|
|
109
|
+
when Gitlab::ObjectifiedHash,Gitlab::FileResponse
|
|
110
|
+
record_hash([data], cmd, args, true)
|
|
111
|
+
when Gitlab::PaginatedResponse
|
|
112
|
+
record_hash(data, cmd, args)
|
|
113
|
+
else
|
|
114
|
+
{ cmd: cmd, data: data, args: args }
|
|
115
|
+
end
|
|
116
|
+
puts JSON.pretty_generate(hash_result)
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# Table to display records.
|
|
121
|
+
#
|
|
122
|
+
# @return [Terminal::Table]
|
|
123
|
+
def record_table(data, cmd, args)
|
|
124
|
+
return 'No data' if data.empty?
|
|
125
|
+
|
|
126
|
+
arr, keys = get_keys(args, data)
|
|
127
|
+
|
|
128
|
+
table do |t|
|
|
129
|
+
t.title = "Gitlab.#{cmd} #{args.join(', ')}"
|
|
130
|
+
t.headings = keys
|
|
131
|
+
|
|
132
|
+
arr.each_with_index do |hash, index|
|
|
133
|
+
values = []
|
|
134
|
+
|
|
135
|
+
keys.each do |key|
|
|
136
|
+
case value = hash[key]
|
|
137
|
+
when Hash
|
|
138
|
+
value = value.has_key?('id') ? value['id'] : 'Hash'
|
|
139
|
+
when StringIO
|
|
140
|
+
value = 'File'
|
|
141
|
+
when nil
|
|
142
|
+
value = 'null'
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
values << value
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
t.add_row values
|
|
149
|
+
t.add_separator unless arr.size - 1 == index
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
# Renders the result of given commands and arguments into a Hash
|
|
155
|
+
#
|
|
156
|
+
# @param [Array] data Resultset from the API call
|
|
157
|
+
# @param [String] cmd The command passed to the API
|
|
158
|
+
# @param [Array] args Options passed to the API call
|
|
159
|
+
# @param [bool] single_value If set to true, a single result should be returned
|
|
160
|
+
# @return [Hash] Result hash
|
|
161
|
+
def record_hash(data, cmd, args, single_value=false)
|
|
162
|
+
if data.empty?
|
|
163
|
+
result = nil
|
|
164
|
+
else
|
|
165
|
+
arr, keys = get_keys(args, data)
|
|
166
|
+
result = []
|
|
167
|
+
arr.each do |hash|
|
|
168
|
+
row = {}
|
|
169
|
+
|
|
170
|
+
keys.each do |key|
|
|
171
|
+
case hash[key]
|
|
172
|
+
when Hash
|
|
173
|
+
row[key] = 'Hash'
|
|
174
|
+
when StringIO
|
|
175
|
+
row[key] = Base64.encode64(hash[key].read)
|
|
176
|
+
when nil
|
|
177
|
+
row[key] = nil
|
|
178
|
+
else
|
|
179
|
+
row[key] = hash[key]
|
|
180
|
+
end
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
result.push row
|
|
184
|
+
end
|
|
185
|
+
result = result[0] if single_value && result.count > 0
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
{
|
|
189
|
+
cmd: "Gitlab.#{cmd} #{args.join(', ')}".strip,
|
|
190
|
+
result: result
|
|
191
|
+
}
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
# Helper function to get rows and keys from data returned from API call
|
|
195
|
+
def get_keys(args, data)
|
|
196
|
+
arr = data.map(&:to_h)
|
|
197
|
+
keys = arr.first.keys.sort { |x, y| x.to_s <=> y.to_s }
|
|
198
|
+
keys &= required_fields(args) if required_fields(args).any?
|
|
199
|
+
keys -= excluded_fields(args)
|
|
200
|
+
[arr, keys]
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
# Helper function to call Gitlab commands with args.
|
|
204
|
+
def gitlab_helper(cmd, args=[])
|
|
205
|
+
begin
|
|
206
|
+
data = args.any? ? Gitlab.send(cmd, *args) : Gitlab.send(cmd)
|
|
207
|
+
rescue => e
|
|
208
|
+
puts e.message
|
|
209
|
+
yield if block_given?
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
data
|
|
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), newhash|
|
|
220
|
+
begin
|
|
221
|
+
newhash[key.to_sym] = symbolize_keys(value)
|
|
222
|
+
rescue NoMethodError
|
|
223
|
+
raise "error: cannot convert hash key to symbol: #{key}"
|
|
224
|
+
end
|
|
225
|
+
end
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
hash
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
# YAML::load on a single argument
|
|
232
|
+
def yaml_load(arg)
|
|
233
|
+
begin
|
|
234
|
+
yaml = YAML.load(arg)
|
|
235
|
+
rescue Psych::SyntaxError
|
|
236
|
+
raise "error: Argument is not valid YAML syntax: #{arg}"
|
|
237
|
+
end
|
|
238
|
+
yaml
|
|
239
|
+
end
|
|
240
|
+
end
|
|
241
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
module Gitlab
|
|
2
|
+
# Wrapper for the Gitlab REST API.
|
|
3
|
+
class Client < API
|
|
4
|
+
Dir[File.expand_path('../client/*.rb', __FILE__)].each { |f| require f }
|
|
5
|
+
|
|
6
|
+
include Branches
|
|
7
|
+
include Builds
|
|
8
|
+
include BuildTriggers
|
|
9
|
+
include BuildVariables
|
|
10
|
+
include Commits
|
|
11
|
+
include Groups
|
|
12
|
+
include Issues
|
|
13
|
+
include Labels
|
|
14
|
+
include MergeRequests
|
|
15
|
+
include Milestones
|
|
16
|
+
include Namespaces
|
|
17
|
+
include Notes
|
|
18
|
+
include Pipelines
|
|
19
|
+
include Projects
|
|
20
|
+
include Repositories
|
|
21
|
+
include RepositoryFiles
|
|
22
|
+
include Runners
|
|
23
|
+
include Services
|
|
24
|
+
include Snippets
|
|
25
|
+
include SystemHooks
|
|
26
|
+
include Tags
|
|
27
|
+
include Users
|
|
28
|
+
|
|
29
|
+
# Text representation of the client, masking private token.
|
|
30
|
+
#
|
|
31
|
+
# @return [String]
|
|
32
|
+
def inspect
|
|
33
|
+
inspected = super
|
|
34
|
+
|
|
35
|
+
if @private_token
|
|
36
|
+
inspected = inspected.sub! @private_token, only_show_last_four_chars(@private_token)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
inspected
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
private
|
|
43
|
+
|
|
44
|
+
def only_show_last_four_chars(token)
|
|
45
|
+
"#{'*'*(token.size - 4)}#{token[-4..-1]}"
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
class Gitlab::Client
|
|
2
|
+
# Defines methods related to repositories.
|
|
3
|
+
# @see https://docs.gitlab.com/ce/api/branches.html
|
|
4
|
+
module Branches
|
|
5
|
+
# Gets a list of project repositiory branches.
|
|
6
|
+
#
|
|
7
|
+
# @example
|
|
8
|
+
# Gitlab.branches(42)
|
|
9
|
+
#
|
|
10
|
+
# @param [Integer] project The ID of a project.
|
|
11
|
+
# @param [Hash] options A customizable set of options.
|
|
12
|
+
# @option options [Integer] :page The page number.
|
|
13
|
+
# @option options [Integer] :per_page The number of results per page.
|
|
14
|
+
# @return [Array<Gitlab::ObjectifiedHash>]
|
|
15
|
+
def branches(project, options={})
|
|
16
|
+
get("/projects/#{project}/repository/branches", query: options)
|
|
17
|
+
end
|
|
18
|
+
alias_method :repo_branches, :branches
|
|
19
|
+
|
|
20
|
+
# Gets information about a repository branch.
|
|
21
|
+
#
|
|
22
|
+
# @example
|
|
23
|
+
# Gitlab.branch(3, 'api')
|
|
24
|
+
# Gitlab.repo_branch(5, 'master')
|
|
25
|
+
#
|
|
26
|
+
# @param [Integer] project The ID of a project.
|
|
27
|
+
# @param [String] branch The name of the branch.
|
|
28
|
+
# @return [Gitlab::ObjectifiedHash]
|
|
29
|
+
def branch(project, branch)
|
|
30
|
+
get("/projects/#{project}/repository/branches/#{branch}")
|
|
31
|
+
end
|
|
32
|
+
alias_method :repo_branch, :branch
|
|
33
|
+
|
|
34
|
+
# Protects a repository branch.
|
|
35
|
+
#
|
|
36
|
+
# @example
|
|
37
|
+
# Gitlab.protect_branch(3, 'api')
|
|
38
|
+
# Gitlab.repo_protect_branch(5, 'master')
|
|
39
|
+
#
|
|
40
|
+
# @param [Integer] project The ID of a project.
|
|
41
|
+
# @param [String] branch The name of the branch.
|
|
42
|
+
# @return [Gitlab::ObjectifiedHash]
|
|
43
|
+
def protect_branch(project, branch)
|
|
44
|
+
put("/projects/#{project}/repository/branches/#{branch}/protect")
|
|
45
|
+
end
|
|
46
|
+
alias_method :repo_protect_branch, :protect_branch
|
|
47
|
+
|
|
48
|
+
# Unprotects a repository branch.
|
|
49
|
+
#
|
|
50
|
+
# @example
|
|
51
|
+
# Gitlab.unprotect_branch(3, 'api')
|
|
52
|
+
# Gitlab.repo_unprotect_branch(5, 'master')
|
|
53
|
+
#
|
|
54
|
+
# @param [Integer] project The ID of a project.
|
|
55
|
+
# @param [String] branch The name of the branch.
|
|
56
|
+
# @return [Gitlab::ObjectifiedHash]
|
|
57
|
+
def unprotect_branch(project, branch)
|
|
58
|
+
put("/projects/#{project}/repository/branches/#{branch}/unprotect")
|
|
59
|
+
end
|
|
60
|
+
alias_method :repo_unprotect_branch, :unprotect_branch
|
|
61
|
+
|
|
62
|
+
# Creates a repository branch. Requires Gitlab >= 6.8.x
|
|
63
|
+
#
|
|
64
|
+
# @example
|
|
65
|
+
# Gitlab.create_branch(3, 'api')
|
|
66
|
+
# Gitlab.repo_create_branch(5, 'master')
|
|
67
|
+
#
|
|
68
|
+
# @param [Integer] project The ID of a project.
|
|
69
|
+
# @param [String] branch The name of the new branch.
|
|
70
|
+
# @param [String] ref Create branch from commit sha or existing branch
|
|
71
|
+
# @return [Gitlab::ObjectifiedHash]
|
|
72
|
+
def create_branch(project, branch, ref)
|
|
73
|
+
post("/projects/#{project}/repository/branches", body: { branch_name: branch, ref: ref })
|
|
74
|
+
end
|
|
75
|
+
alias_method :repo_create_branch, :create_branch
|
|
76
|
+
|
|
77
|
+
# Deletes a repository branch. Requires Gitlab >= 6.8.x
|
|
78
|
+
#
|
|
79
|
+
# @example
|
|
80
|
+
# Gitlab.delete_branch(3, 'api')
|
|
81
|
+
# Gitlab.repo_delete_branch(5, 'master')
|
|
82
|
+
#
|
|
83
|
+
# @param [Integer] project The ID of a project.
|
|
84
|
+
# @param [String] branch The name of the branch to delete
|
|
85
|
+
# @return [Gitlab::ObjectifiedHash]
|
|
86
|
+
def delete_branch(project, branch)
|
|
87
|
+
delete("/projects/#{project}/repository/branches/#{branch}")
|
|
88
|
+
end
|
|
89
|
+
alias_method :repo_delete_branch, :delete_branch
|
|
90
|
+
end
|
|
91
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
class Gitlab::Client
|
|
2
|
+
# Defines methods related to builds.
|
|
3
|
+
# @see https://docs.gitlab.com/ce/api/build_triggers.html
|
|
4
|
+
module BuildTriggers
|
|
5
|
+
# Gets a list of the project's build triggers
|
|
6
|
+
#
|
|
7
|
+
# @example
|
|
8
|
+
# Gitlab.triggers(5)
|
|
9
|
+
#
|
|
10
|
+
# @param [Integer] project The ID of a project.
|
|
11
|
+
# @return [Array<Gitlab::ObjectifiedHash>] The list of triggers.
|
|
12
|
+
def triggers(project)
|
|
13
|
+
get("/projects/#{project}/triggers")
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Gets details of project's build trigger.
|
|
17
|
+
#
|
|
18
|
+
# @example
|
|
19
|
+
# Gitlab.trigger(5, '7b9148c158980bbd9bcea92c17522d')
|
|
20
|
+
#
|
|
21
|
+
# @param [Integer] project The ID of a project.
|
|
22
|
+
# @param [String] token The token of a trigger.
|
|
23
|
+
# @return [Gitlab::ObjectifiedHash] The trigger.
|
|
24
|
+
def trigger(project, token)
|
|
25
|
+
get("/projects/#{project}/triggers/#{token}")
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Create a build trigger for a project.
|
|
29
|
+
#
|
|
30
|
+
# @example
|
|
31
|
+
# Gitlab.create_trigger(5)
|
|
32
|
+
#
|
|
33
|
+
# @param [Integer] project The ID of a project.
|
|
34
|
+
# @return [Gitlab::ObjectifiedHash] The trigger.
|
|
35
|
+
def create_trigger(project)
|
|
36
|
+
post("/projects/#{project}/triggers")
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Remove a project's build trigger.
|
|
40
|
+
#
|
|
41
|
+
# @example
|
|
42
|
+
# Gitlab.remove_trigger(5, '7b9148c158980bbd9bcea92c17522d')
|
|
43
|
+
#
|
|
44
|
+
# @param [Integer] project The ID of a project.
|
|
45
|
+
# @param [String] token The token of a trigger.
|
|
46
|
+
# @return [Gitlab::ObjectifiedHash] The trigger.
|
|
47
|
+
def remove_trigger(project, token)
|
|
48
|
+
delete("/projects/#{project}/triggers/#{token}")
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
class Gitlab::Client
|
|
2
|
+
# Defines methods related to builds.
|
|
3
|
+
# @see https://docs.gitlab.com/ce/api/build_variables.html
|
|
4
|
+
module BuildVariables
|
|
5
|
+
# Gets a list of the project's build variables
|
|
6
|
+
#
|
|
7
|
+
# @example
|
|
8
|
+
# Gitlab.variables(5)
|
|
9
|
+
#
|
|
10
|
+
# @param [Integer] project The ID of a project.
|
|
11
|
+
# @return [Array<Gitlab::ObjectifiedHash>] The list of variables.
|
|
12
|
+
def variables(project)
|
|
13
|
+
get("/projects/#{project}/variables")
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Gets details of a project's specific build variable.
|
|
17
|
+
#
|
|
18
|
+
# @example
|
|
19
|
+
# Gitlab.build(5, "TEST_VARIABLE_1")
|
|
20
|
+
#
|
|
21
|
+
# @param [Integer] project The ID of a project.
|
|
22
|
+
# @param [String] key The key of a variable.
|
|
23
|
+
# @return [Gitlab::ObjectifiedHash] The variable.
|
|
24
|
+
def variable(project, key)
|
|
25
|
+
get("/projects/#{project}/variables/#{key}")
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Create a build variable for a project.
|
|
29
|
+
#
|
|
30
|
+
# @example
|
|
31
|
+
# Gitlab.create_variable(5, "NEW_VARIABLE", "new value")
|
|
32
|
+
#
|
|
33
|
+
# @param [Integer] project The ID of a project.
|
|
34
|
+
# @param [String] key The key of a variable; must have no more than 255 characters; only `A-Z`, `a-z`, `0-9` and `_` are allowed
|
|
35
|
+
# @param [String] value The value of a variable
|
|
36
|
+
# @return [Gitlab::ObjectifiedHash] The variable.
|
|
37
|
+
def create_variable(project, key, value)
|
|
38
|
+
post("/projects/#{project}/variables", body: { key: key, value: value })
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Update a project's build variable.
|
|
42
|
+
#
|
|
43
|
+
# @example
|
|
44
|
+
# Gitlab.create_variable(5, "NEW_VARIABLE", "updated value")
|
|
45
|
+
#
|
|
46
|
+
# @param [Integer] project The ID of a project.
|
|
47
|
+
# @param [String] key The key of a variable
|
|
48
|
+
# @param [String] value The value of a variable
|
|
49
|
+
# @return [Gitlab::ObjectifiedHash] The variable.
|
|
50
|
+
def update_variable(project, key, value)
|
|
51
|
+
put("/projects/#{project}/variables/#{key}", body: { value: value })
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Remove a project's build variable.
|
|
55
|
+
#
|
|
56
|
+
# @example
|
|
57
|
+
# Gitlab.remove_variable(5, "VARIABLE_1")
|
|
58
|
+
#
|
|
59
|
+
# @param [Integer] project The ID of a project.
|
|
60
|
+
# @param [String] key The key of a variable.
|
|
61
|
+
# @return [Gitlab::ObjectifiedHash] The variable.
|
|
62
|
+
def remove_variable(project, key)
|
|
63
|
+
delete("/projects/#{project}/variables/#{key}")
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|