gitlab 4.2.0 → 4.3.0

Sign up to get free protection for your applications and to get access to all the features.
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