gitlab 4.2.0 → 4.3.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.
Files changed (84) hide show
  1. checksums.yaml +5 -5
  2. data/.rubocop.yml +33 -0
  3. data/.travis.yml +8 -3
  4. data/README.md +7 -7
  5. data/Rakefile +11 -3
  6. data/gitlab.gemspec +11 -11
  7. data/lib/gitlab.rb +2 -2
  8. data/lib/gitlab/api.rb +2 -1
  9. data/lib/gitlab/cli.rb +2 -6
  10. data/lib/gitlab/cli_helpers.rb +18 -20
  11. data/lib/gitlab/client.rb +8 -5
  12. data/lib/gitlab/client/branches.rb +4 -4
  13. data/lib/gitlab/client/build_variables.rb +64 -2
  14. data/lib/gitlab/client/deployments.rb +32 -0
  15. data/lib/gitlab/client/groups.rb +49 -0
  16. data/lib/gitlab/client/issues.rb +71 -0
  17. data/lib/gitlab/client/merge_requests.rb +1 -0
  18. data/lib/gitlab/client/pipeline_schedules.rb +133 -0
  19. data/lib/gitlab/client/pipeline_triggers.rb +2 -2
  20. data/lib/gitlab/client/projects.rb +1 -1
  21. data/lib/gitlab/client/repository_files.rb +2 -2
  22. data/lib/gitlab/client/users.rb +5 -5
  23. data/lib/gitlab/configuration.rb +2 -2
  24. data/lib/gitlab/error.rb +10 -2
  25. data/lib/gitlab/file_response.rb +1 -1
  26. data/lib/gitlab/help.rb +5 -6
  27. data/lib/gitlab/page_links.rb +2 -2
  28. data/lib/gitlab/request.rb +34 -50
  29. data/lib/gitlab/shell.rb +5 -8
  30. data/lib/gitlab/version.rb +1 -1
  31. data/spec/fixtures/deployment.json +57 -0
  32. data/spec/fixtures/deployments.json +116 -0
  33. data/spec/fixtures/group_edit.json +14 -0
  34. data/spec/fixtures/group_subgroups.json +16 -0
  35. data/spec/fixtures/pipeline_schedule.json +32 -0
  36. data/spec/fixtures/pipeline_schedule_create.json +21 -0
  37. data/spec/fixtures/pipeline_schedule_update.json +26 -0
  38. data/spec/fixtures/pipeline_schedule_variable.json +5 -0
  39. data/spec/fixtures/pipeline_schedule_variable_update.json +5 -0
  40. data/spec/fixtures/pipeline_schedules.json +22 -0
  41. data/spec/gitlab/api_spec.rb +11 -0
  42. data/spec/gitlab/cli_helpers_spec.rb +14 -15
  43. data/spec/gitlab/cli_spec.rb +11 -11
  44. data/spec/gitlab/client/award_emojis_spec.rb +55 -55
  45. data/spec/gitlab/client/boards_spec.rb +12 -12
  46. data/spec/gitlab/client/branches_spec.rb +22 -22
  47. data/spec/gitlab/client/build_variables_spec.rb +93 -10
  48. data/spec/gitlab/client/builds_spec.rb +36 -36
  49. data/spec/gitlab/client/commits_spec.rb +21 -21
  50. data/spec/gitlab/client/deployments_spec.rb +38 -0
  51. data/spec/gitlab/client/environments_spec.rb +18 -18
  52. data/spec/gitlab/client/groups_spec.rb +73 -22
  53. data/spec/gitlab/client/issues_spec.rb +121 -22
  54. data/spec/gitlab/client/jobs_spec.rb +13 -13
  55. data/spec/gitlab/client/keys_spec.rb +2 -2
  56. data/spec/gitlab/client/labels_spec.rb +12 -12
  57. data/spec/gitlab/client/merge_requests_spec.rb +23 -23
  58. data/spec/gitlab/client/milestones_spec.rb +12 -12
  59. data/spec/gitlab/client/namespaces_spec.rb +3 -3
  60. data/spec/gitlab/client/notes_spec.rb +40 -40
  61. data/spec/gitlab/client/pipeline_schedules_spec.rb +158 -0
  62. data/spec/gitlab/client/pipeline_triggers_spec.rb +17 -17
  63. data/spec/gitlab/client/pipelines_spec.rb +22 -22
  64. data/spec/gitlab/client/projects_spec.rb +75 -75
  65. data/spec/gitlab/client/repositories_spec.rb +16 -16
  66. data/spec/gitlab/client/repository_files_spec.rb +10 -10
  67. data/spec/gitlab/client/runners_spec.rb +20 -22
  68. data/spec/gitlab/client/services_spec.rb +6 -6
  69. data/spec/gitlab/client/snippets_spec.rb +12 -12
  70. data/spec/gitlab/client/system_hooks_spec.rb +12 -12
  71. data/spec/gitlab/client/tags_spec.rb +19 -20
  72. data/spec/gitlab/client/todos_spec.rb +12 -12
  73. data/spec/gitlab/client/users_spec.rb +49 -49
  74. data/spec/gitlab/error_spec.rb +50 -23
  75. data/spec/gitlab/file_response_spec.rb +6 -6
  76. data/spec/gitlab/help_spec.rb +5 -5
  77. data/spec/gitlab/objectified_hash_spec.rb +8 -8
  78. data/spec/gitlab/page_links_spec.rb +1 -1
  79. data/spec/gitlab/paginated_response_spec.rb +4 -4
  80. data/spec/gitlab/request_spec.rb +19 -19
  81. data/spec/gitlab/shell_spec.rb +12 -12
  82. data/spec/gitlab_spec.rb +13 -14
  83. data/spec/spec_helper.rb +10 -45
  84. metadata +46 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 2fd8bd1d12fdceba122d4fd99e3df259c399e629
4
- data.tar.gz: dd195a082fc9a572a22ff4074306891ccc9553a1
2
+ SHA256:
3
+ metadata.gz: 4bfad0b28f61c172f39cceece1d908d7bbd6a339dfd94bde1fd2fd91894947c4
4
+ data.tar.gz: 991192468932b419e0f7512ac0034a942a994fe09ab66372f195332e81fbc639
5
5
  SHA512:
6
- metadata.gz: 0edc2245a554decf8c18723979c256e6e7926d67521fa9ffeef11508b3bad1501e31ea3fe7ba91c1e9a5efe98a66149e6be3f2adcb25199c3118e5e6bde9b847
7
- data.tar.gz: 12aa581f975cd5bbc7cebe3fb75eef20d1fb87eab9119af485c3a2158779a673cd0c1da74ee4a0d91f05adfe582a35f906e7679f2fd4650f65b5c04167926c28
6
+ metadata.gz: 6c769c30e5072d68696fe7cc75747744aa6ff28a232f7084eb96cc78dbe4853a213d456a95d3a635197ef4a9473ddfd5fd7379654a6a1811c6b74b87f6c62a37
7
+ data.tar.gz: 48292a8b7dafad7fbaf577bcff3065b97beeb47610e68d513544f66f48881b0bd291cfa5110835a52d177927a6ee8a4acc8b0d8bb48d0b595951bc1a2b1032d8
@@ -0,0 +1,33 @@
1
+ Layout/SpaceAroundEqualsInParameterDefault:
2
+ Enabled: false
3
+
4
+ Style/Alias:
5
+ Enabled: false
6
+
7
+ Style/PercentLiteralDelimiters:
8
+ Enabled: false
9
+
10
+ Layout/DotPosition:
11
+ Enabled: false
12
+
13
+ Metrics/LineLength:
14
+ Max: 100
15
+ Exclude:
16
+ - 'lib/gitlab/client/*'
17
+ - 'spec/**/*'
18
+
19
+ Style/ClassAndModuleChildren:
20
+ Exclude:
21
+ - 'lib/gitlab/client/*'
22
+
23
+ Layout/SpaceInsideHashLiteralBraces:
24
+ Exclude:
25
+ - 'lib/gitlab/client/*'
26
+
27
+ Style/StringLiterals:
28
+ Exclude:
29
+ - 'spec/**/*'
30
+
31
+ Metrics/BlockLength:
32
+ Exclude:
33
+ - 'spec/**/*'
@@ -1,8 +1,13 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.0
4
- - 2.1
5
3
  - 2.2
6
4
  - 2.3
7
- - 2.4.0
5
+ - 2.4
8
6
  before_install: gem update bundler
7
+
8
+ matrix:
9
+ include:
10
+ - rvm: 2.4
11
+ env: "TRAVIS_CI_RUBOCOP=true"
12
+ allow_failures:
13
+ - env: "TRAVIS_CI_RUBOCOP=true"
data/README.md CHANGED
@@ -1,17 +1,17 @@
1
1
  # Gitlab
2
2
 
3
- [![Build Status](https://img.shields.io/travis/NARKOZ/gitlab.svg?style=flat)](https://travis-ci.org/NARKOZ/gitlab)
4
- [![Code Climate](https://img.shields.io/codeclimate/github/NARKOZ/gitlab.svg?style=flat)](https://codeclimate.com/github/NARKOZ/gitlab)
5
- [![Inline docs](http://inch-ci.org/github/NARKOZ/gitlab.svg?style=flat)](https://inch-ci.org/github/NARKOZ/gitlab)
6
- [![Gem version](https://img.shields.io/gem/v/gitlab.svg?style=flat)](https://rubygems.org/gems/gitlab)
7
- [![License](https://img.shields.io/badge/license-BSD-red.svg?style=flat)](https://github.com/NARKOZ/gitlab/blob/master/LICENSE.txt)
3
+ [![Build Status](https://img.shields.io/travis/NARKOZ/gitlab.svg)](https://travis-ci.org/NARKOZ/gitlab)
4
+ [![Code Climate](https://img.shields.io/codeclimate/maintainability/NARKOZ/gitlab.svg)](https://codeclimate.com/github/NARKOZ/gitlab)
5
+ [![Inline docs](http://inch-ci.org/github/NARKOZ/gitlab.svg)](https://inch-ci.org/github/NARKOZ/gitlab)
6
+ [![Gem version](https://img.shields.io/gem/v/gitlab.svg)](https://rubygems.org/gems/gitlab)
7
+ [![License](https://img.shields.io/badge/license-BSD-red.svg)](https://github.com/NARKOZ/gitlab/blob/master/LICENSE.txt)
8
8
 
9
9
  [website](http://narkoz.github.io/gitlab) |
10
10
  [documentation](http://rubydoc.info/gems/gitlab/frames) |
11
11
  [gitlab-live](https://github.com/NARKOZ/gitlab-live)
12
12
 
13
- Gitlab is a Ruby wrapper and CLI for the [GitLab API](https://docs.gitlab.com/ce/api/README.html).
14
- As of version `4.0.0` this gem will only support Ruby 2.0+ and Gitlab API v4.
13
+ Gitlab is a Ruby wrapper and CLI for the [GitLab API](https://docs.gitlab.com/ce/api/README.html).
14
+ As of version `4.0.0` this gem only supports Ruby 2.0+ and Gitlab API v4.
15
15
 
16
16
  ## Installation
17
17
 
data/Rakefile CHANGED
@@ -1,9 +1,17 @@
1
- require "bundler/gem_tasks"
1
+ require 'bundler/gem_tasks'
2
2
 
3
3
  require 'rspec/core/rake_task'
4
4
  RSpec::Core::RakeTask.new(:spec) do |spec|
5
- spec.pattern = FileList['spec/**/*_spec.rb']
6
5
  spec.rspec_opts = ['--color', '--format d']
7
6
  end
8
7
 
9
- task default: :spec
8
+ require 'rubocop/rake_task'
9
+ RuboCop::RakeTask.new(:rubocop) do |task|
10
+ task.options = ['-D', '--parallel']
11
+ end
12
+
13
+ if ENV['TRAVIS_CI_RUBOCOP']
14
+ task default: :rubocop
15
+ else
16
+ task default: :spec
17
+ end
@@ -1,25 +1,24 @@
1
- # -*- encoding: utf-8 -*-
2
1
  lib = File.expand_path('../lib', __FILE__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
3
  require 'gitlab/version'
5
4
 
6
5
  Gem::Specification.new do |gem|
7
- gem.name = "gitlab"
6
+ gem.name = 'gitlab'
8
7
  gem.version = Gitlab::VERSION
9
- gem.authors = ["Nihad Abbasov"]
10
- gem.email = ["mail@narkoz.me"]
11
- gem.description = %q{Ruby client and CLI for GitLab API}
12
- gem.summary = %q{A Ruby wrapper and CLI for the GitLab API}
13
- gem.homepage = "https://github.com/narkoz/gitlab"
8
+ gem.authors = ['Nihad Abbasov']
9
+ gem.email = ['mail@narkoz.me']
10
+ gem.description = 'Ruby client and CLI for GitLab API'
11
+ gem.summary = 'A Ruby wrapper and CLI for the GitLab API'
12
+ gem.homepage = 'https://github.com/narkoz/gitlab'
14
13
 
15
14
  gem.files = `git ls-files`.split($/)
16
- gem.bindir = "exe"
15
+ gem.bindir = 'exe'
17
16
  gem.executables = gem.files.grep(%r{^exe/}) { |f| File.basename(f) }
18
17
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
19
- gem.require_paths = ["lib"]
20
- gem.license = "BSD"
18
+ gem.require_paths = ['lib']
19
+ gem.license = 'BSD'
21
20
 
22
- gem.required_ruby_version = ">= 2.0.0"
21
+ gem.required_ruby_version = '>= 2.0.0'
23
22
 
24
23
  gem.add_runtime_dependency 'httparty'
25
24
  gem.add_runtime_dependency 'terminal-table'
@@ -28,4 +27,5 @@ Gem::Specification.new do |gem|
28
27
  gem.add_development_dependency 'rake'
29
28
  gem.add_development_dependency 'rspec'
30
29
  gem.add_development_dependency 'webmock'
30
+ gem.add_development_dependency 'rubocop'
31
31
  end
@@ -26,7 +26,7 @@ module Gitlab
26
26
  end
27
27
 
28
28
  # Delegate to Gitlab::Client
29
- def respond_to_missing?(method_name, include_private = false)
29
+ def self.respond_to_missing?(method_name, include_private=false)
30
30
  client.respond_to?(method_name) || super
31
31
  end
32
32
 
@@ -39,7 +39,7 @@ module Gitlab
39
39
  #
40
40
  # @return [Array<Symbol>]
41
41
  def self.actions
42
- hidden = /endpoint|private_token|auth_token|user_agent|sudo|get|post|put|\Adelete\z|validate|set_request_defaults|httparty/
42
+ hidden = /endpoint|private_token|auth_token|user_agent|sudo|get|post|put|\Adelete\z|validate|request_defaults|httparty/
43
43
  (Gitlab::Client.instance_methods - Object.methods).reject { |e| e[hidden] }
44
44
  end
45
45
  end
@@ -13,7 +13,8 @@ module Gitlab
13
13
  (Configuration::VALID_OPTIONS_KEYS + [:auth_token]).each do |key|
14
14
  send("#{key}=", options[key]) if options[key]
15
15
  end
16
- set_request_defaults(@sudo)
16
+ request_defaults(@sudo)
17
+ self.class.headers 'User-Agent' => user_agent
17
18
  end
18
19
  end
19
20
  end
@@ -52,15 +52,11 @@ class Gitlab::CLI
52
52
  end
53
53
 
54
54
  unless valid_command?(cmd)
55
- puts "Unknown command. Run `gitlab help` for a list of available commands."
55
+ puts 'Unknown command. Run `gitlab help` for a list of available commands.'
56
56
  exit(1)
57
57
  end
58
58
 
59
- if args.any? && (args.last.start_with?('--only=') || args.last.start_with?('--except='))
60
- command_args = args[0..-2]
61
- else
62
- command_args = args
63
- end
59
+ command_args = args.any? && args.last.start_with?('--only=', '--except=') ? args[0..-2] : args
64
60
 
65
61
  begin
66
62
  command_args.map! { |arg| symbolize_keys(yaml_load(arg)) }
@@ -67,14 +67,15 @@ class Gitlab::CLI
67
67
  #
68
68
  # @return [String]
69
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
70
+ return unless cmd.start_with?('remove_', 'delete_')
71
+
72
+ puts 'Are you sure? (y/n)'
73
+
74
+ if %w(y yes).include?($stdin.gets.to_s.strip.downcase)
75
+ puts 'Proceeding..'
76
+ else
77
+ puts 'Command aborted.'
78
+ exit(1)
78
79
  end
79
80
  end
80
81
 
@@ -102,17 +103,17 @@ class Gitlab::CLI
102
103
  end
103
104
 
104
105
  def output_json(cmd, args, data)
105
- if data.empty?
106
+ if data.respond_to?(:empty?) && data.empty?
106
107
  puts '{}'
107
108
  else
108
109
  hash_result = case data
109
- when Gitlab::ObjectifiedHash,Gitlab::FileResponse
110
+ when Gitlab::ObjectifiedHash, Gitlab::FileResponse
110
111
  record_hash([data], cmd, args, true)
111
112
  when Gitlab::PaginatedResponse
112
113
  record_hash(data, cmd, args)
113
114
  else
114
115
  { cmd: cmd, data: data, args: args }
115
- end
116
+ end
116
117
  puts JSON.pretty_generate(hash_result)
117
118
  end
118
119
  end
@@ -135,7 +136,7 @@ class Gitlab::CLI
135
136
  keys.each do |key|
136
137
  case value = hash[key]
137
138
  when Hash
138
- value = value.has_key?('id') ? value['id'] : 'Hash'
139
+ value = value.key?('id') ? value['id'] : 'Hash'
139
140
  when StringIO
140
141
  value = 'File'
141
142
  when nil
@@ -194,7 +195,7 @@ class Gitlab::CLI
194
195
  # Helper function to get rows and keys from data returned from API call
195
196
  def get_keys(args, data)
196
197
  arr = data.map(&:to_h)
197
- keys = arr.first.keys.sort { |x, y| x.to_s <=> y.to_s }
198
+ keys = arr.first.keys.sort_by(&:to_s)
198
199
  keys &= required_fields(args) if required_fields(args).any?
199
200
  keys -= excluded_fields(args)
200
201
  [arr, keys]
@@ -220,7 +221,7 @@ class Gitlab::CLI
220
221
  begin
221
222
  newhash[key.to_sym] = symbolize_keys(value)
222
223
  rescue NoMethodError
223
- raise "error: cannot convert hash key to symbol: #{key}"
224
+ raise "Error: cannot convert hash key to symbol: #{key}"
224
225
  end
225
226
  end
226
227
  end
@@ -230,12 +231,9 @@ class Gitlab::CLI
230
231
 
231
232
  # YAML::load on a single argument
232
233
  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
234
+ YAML.safe_load(arg)
235
+ rescue Psych::SyntaxError
236
+ raise "Error: Argument is not valid YAML syntax: #{arg}"
239
237
  end
240
238
  end
241
239
  end
@@ -3,23 +3,27 @@ module Gitlab
3
3
  class Client < API
4
4
  Dir[File.expand_path('../client/*.rb', __FILE__)].each { |f| require f }
5
5
 
6
+ # Please keep in alphabetical order
6
7
  include AwardEmojis
7
8
  include Boards
8
9
  include Branches
9
- include Builds
10
10
  include BuildVariables
11
+ include Builds
11
12
  include Commits
13
+ include Deployments
12
14
  include Environments
13
15
  include Groups
14
16
  include Issues
17
+ include Jobs
15
18
  include Keys
16
19
  include Labels
17
20
  include MergeRequests
18
21
  include Milestones
19
22
  include Namespaces
20
23
  include Notes
21
- include Pipelines
24
+ include PipelineSchedules
22
25
  include PipelineTriggers
26
+ include Pipelines
23
27
  include Projects
24
28
  include Repositories
25
29
  include RepositoryFiles
@@ -30,7 +34,6 @@ module Gitlab
30
34
  include Tags
31
35
  include Todos
32
36
  include Users
33
- include Jobs
34
37
 
35
38
  # Text representation of the client, masking private token.
36
39
  #
@@ -46,13 +49,13 @@ module Gitlab
46
49
  end
47
50
 
48
51
  def url_encode(s)
49
- ERB::Util.url_encode(s)
52
+ URI.encode(s.to_s, /\W/)
50
53
  end
51
54
 
52
55
  private
53
56
 
54
57
  def only_show_last_four_chars(token)
55
- "#{'*'*(token.size - 4)}#{token[-4..-1]}"
58
+ "#{'*' * (token.size - 4)}#{token[-4..-1]}"
56
59
  end
57
60
  end
58
61
  end
@@ -27,7 +27,7 @@ class Gitlab::Client
27
27
  # @param [String] branch The name of the branch.
28
28
  # @return [Gitlab::ObjectifiedHash]
29
29
  def branch(project, branch)
30
- get("/projects/#{url_encode project}/repository/branches/#{branch}")
30
+ get("/projects/#{url_encode project}/repository/branches/#{url_encode branch}")
31
31
  end
32
32
  alias_method :repo_branch, :branch
33
33
 
@@ -47,7 +47,7 @@ class Gitlab::Client
47
47
  # @option options [Boolean] :developers_can_merge True to allow developers to merge into the branch (default = false)
48
48
  # @return [Gitlab::ObjectifiedHash] Details about the branch
49
49
  def protect_branch(project, branch, options = {})
50
- put("/projects/#{url_encode project}/repository/branches/#{branch}/protect", body: options)
50
+ post("/projects/#{url_encode project}/protected_branches", body: {name: branch}.merge(options))
51
51
  end
52
52
  alias_method :repo_protect_branch, :protect_branch
53
53
 
@@ -61,7 +61,7 @@ class Gitlab::Client
61
61
  # @param [String] branch The name of the branch.
62
62
  # @return [Gitlab::ObjectifiedHash] Details about the branch
63
63
  def unprotect_branch(project, branch)
64
- put("/projects/#{url_encode project}/repository/branches/#{branch}/unprotect")
64
+ delete("/projects/#{url_encode project}/protected_branches/#{url_encode branch}")
65
65
  end
66
66
  alias_method :repo_unprotect_branch, :unprotect_branch
67
67
 
@@ -89,7 +89,7 @@ class Gitlab::Client
89
89
  # @param [Integer, String] project The ID or name of a project.
90
90
  # @param [String] branch The name of the branch to delete
91
91
  def delete_branch(project, branch)
92
- delete("/projects/#{url_encode project}/repository/branches/#{branch}")
92
+ delete("/projects/#{url_encode project}/repository/branches/#{url_encode branch}")
93
93
  end
94
94
  alias_method :repo_delete_branch, :delete_branch
95
95
  end
@@ -1,6 +1,7 @@
1
1
  class Gitlab::Client
2
2
  # Defines methods related to builds.
3
3
  # @see https://docs.gitlab.com/ce/api/build_variables.html
4
+ # @see https://docs.gitlab.com/ee/api/group_level_variables.html
4
5
  module BuildVariables
5
6
  # Gets a list of the project's build variables
6
7
  #
@@ -16,7 +17,7 @@ class Gitlab::Client
16
17
  # Gets details of a project's specific build variable.
17
18
  #
18
19
  # @example
19
- # Gitlab.build(5, "TEST_VARIABLE_1")
20
+ # Gitlab.variable(5, "TEST_VARIABLE_1")
20
21
  #
21
22
  # @param [Integer, String] project The ID or name of a project.
22
23
  # @param [String] key The key of a variable.
@@ -41,7 +42,7 @@ class Gitlab::Client
41
42
  # Update a project's build variable.
42
43
  #
43
44
  # @example
44
- # Gitlab.create_variable(5, "NEW_VARIABLE", "updated value")
45
+ # Gitlab.update_variable(5, "NEW_VARIABLE", "updated value")
45
46
  #
46
47
  # @param [Integer, String] project The ID or name of a project.
47
48
  # @param [String] key The key of a variable
@@ -62,5 +63,66 @@ class Gitlab::Client
62
63
  def remove_variable(project, key)
63
64
  delete("/projects/#{url_encode project}/variables/#{key}")
64
65
  end
66
+
67
+ # Gets a list of the group's build variables
68
+ #
69
+ # @example
70
+ # Gitlab.group_variables(5)
71
+ #
72
+ # @param [Integer, String] group The ID or name of a group.
73
+ # @return [Array<Gitlab::ObjectifiedHash>] The list of variables.
74
+ def group_variables(group)
75
+ get("/groups/#{url_encode group}/variables")
76
+ end
77
+
78
+ # Gets details of a group's specific build variable.
79
+ #
80
+ # @example
81
+ # Gitlab.group_variable(5, "TEST_VARIABLE_1")
82
+ #
83
+ # @param [Integer, String] group The ID or name of a group.
84
+ # @param [String] key The key of a variable.
85
+ # @return [Gitlab::ObjectifiedHash] The variable.
86
+ def group_variable(group, key)
87
+ get("/groups/#{url_encode group}/variables/#{key}")
88
+ end
89
+
90
+ # Create a build variable for a group.
91
+ #
92
+ # @example
93
+ # Gitlab.create_group_variable(5, "NEW_VARIABLE", "new value")
94
+ #
95
+ # @param [Integer, String] group The ID or name of a group.
96
+ # @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
97
+ # @param [String] value The value of a variable
98
+ # @return [Gitlab::ObjectifiedHash] The variable.
99
+ def create_group_variable(group, key, value)
100
+ post("/groups/#{url_encode group}/variables", body: { key: key, value: value })
101
+ end
102
+
103
+ # Update a group's build variable.
104
+ #
105
+ # @example
106
+ # Gitlab.update_group_variable(5, "NEW_VARIABLE", "updated value")
107
+ #
108
+ # @param [Integer, String] group The ID or name of a group.
109
+ # @param [String] key The key of a variable
110
+ # @param [String] value The value of a variable
111
+ # @return [Gitlab::ObjectifiedHash] The variable.
112
+ def update_group_variable(group, key, value)
113
+ put("/groups/#{url_encode group}/variables/#{key}", body: { value: value })
114
+ end
115
+
116
+ # Remove a group's build variable.
117
+ #
118
+ # @example
119
+ # Gitlab.remove_group_variable(5, "VARIABLE_1")
120
+ #
121
+ # @param [Integer, String] group The ID or name of a group.
122
+ # @param [String] key The key of a variable.
123
+ # @return [Gitlab::ObjectifiedHash] The variable.
124
+ def remove_group_variable(group, key)
125
+ delete("/groups/#{url_encode group}/variables/#{key}")
126
+ end
65
127
  end
66
128
  end