gitlab 4.10.0 → 4.19.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +1 -1
  3. data/README.md +26 -18
  4. data/lib/gitlab/api.rb +2 -0
  5. data/lib/gitlab/cli.rb +6 -8
  6. data/lib/gitlab/cli_helpers.rb +20 -25
  7. data/lib/gitlab/client/application_settings.rb +172 -0
  8. data/lib/gitlab/client/build_variables.rb +17 -12
  9. data/lib/gitlab/client/commits.rb +42 -5
  10. data/lib/gitlab/client/container_registry.rb +85 -0
  11. data/lib/gitlab/client/epic_issues.rb +23 -0
  12. data/lib/gitlab/client/epics.rb +73 -0
  13. data/lib/gitlab/client/group_badges.rb +88 -0
  14. data/lib/gitlab/client/group_labels.rb +1 -1
  15. data/lib/gitlab/client/groups.rb +153 -2
  16. data/lib/gitlab/client/issue_links.rb +48 -0
  17. data/lib/gitlab/client/issues.rb +1 -1
  18. data/lib/gitlab/client/jobs.rb +91 -8
  19. data/lib/gitlab/client/keys.rb +11 -0
  20. data/lib/gitlab/client/labels.rb +1 -1
  21. data/lib/gitlab/client/lint.rb +19 -0
  22. data/lib/gitlab/client/markdown.rb +23 -0
  23. data/lib/gitlab/client/merge_request_approvals.rb +160 -7
  24. data/lib/gitlab/client/merge_requests.rb +64 -4
  25. data/lib/gitlab/client/notes.rb +28 -1
  26. data/lib/gitlab/client/packages.rb +95 -0
  27. data/lib/gitlab/client/pipeline_schedules.rb +16 -4
  28. data/lib/gitlab/client/pipelines.rb +12 -0
  29. data/lib/gitlab/client/projects.rb +142 -8
  30. data/lib/gitlab/client/remote_mirrors.rb +51 -0
  31. data/lib/gitlab/client/repositories.rb +59 -3
  32. data/lib/gitlab/client/repository_files.rb +16 -0
  33. data/lib/gitlab/client/resource_state_events.rb +57 -0
  34. data/lib/gitlab/client/runners.rb +99 -14
  35. data/lib/gitlab/client/search.rb +5 -1
  36. data/lib/gitlab/client/user_snippets.rb +114 -0
  37. data/lib/gitlab/client/users.rb +142 -11
  38. data/lib/gitlab/client.rb +18 -2
  39. data/lib/gitlab/configuration.rb +1 -1
  40. data/lib/gitlab/error.rb +54 -0
  41. data/lib/gitlab/help.rb +8 -8
  42. data/lib/gitlab/objectified_hash.rb +23 -7
  43. data/lib/gitlab/page_links.rb +1 -1
  44. data/lib/gitlab/paginated_response.rb +23 -20
  45. data/lib/gitlab/request.rb +34 -33
  46. data/lib/gitlab/shell_history.rb +6 -10
  47. data/lib/gitlab/version.rb +1 -1
  48. data/lib/gitlab.rb +14 -6
  49. metadata +24 -47
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1ffd49c727596fb28465bceabb3674b310772840169be0b80cacfbd2a415e266
4
- data.tar.gz: 0f1ca4531f96bf17b640880089db77284336b69832fa5bbab31d35d60c128e4f
3
+ metadata.gz: 020a259d1d6822f810e1dc2c112d59bf46d453b7cf1840299c0f4d7208f4ac97
4
+ data.tar.gz: 791cce56832e0089a9dc1c25efedf2d5fe1569e43b40f820ab4c935dede9222b
5
5
  SHA512:
6
- metadata.gz: f758f2a0b714d8ef390cb65ebe39d7fbc48f4e3230b252e79ee82ec4e5f0e352e4499fdf6df0f913f4799ccb3db4caaecfd5ed9a37463a330b4593d147de0494
7
- data.tar.gz: 879cc8c1b0432435c3868dde4ad0f943875c8b719021f7c8b5965a775db8b3172ab0b239daa643b1e7f8575519ba5cf60963f7c2c2c858ec93e592e687bb89c3
6
+ metadata.gz: cebd397716351c091a448af4305e81f9ca188df3c966291d1d55e5b9cc01a0ba534c65716acd5f121017e09a87209bffcf688976e36deffe1385b81360d29dd0
7
+ data.tar.gz: b972182f6edb9d0418f850172652585397d1601713e8c5e171342f382f73a1169c0c79fd068b48cecf21deddc5be933daeb20b75d1b31329e9eb82e94c3c1965
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2012-2019 Nihad Abbasov <nihad@42na.in>
1
+ Copyright (c) 2012-2022 Nihad Abbasov <nihad@42na.in>
2
2
  All rights reserved.
3
3
 
4
4
  Redistribution and use in source and binary forms, with or without
data/README.md CHANGED
@@ -1,17 +1,14 @@
1
1
  # Gitlab
2
2
 
3
- [![Build Status](https://img.shields.io/travis/NARKOZ/gitlab.svg)](https://travis-ci.org/NARKOZ/gitlab)
4
- [![Maintainability](https://api.codeclimate.com/v1/badges/2e310b334b1b5db4a7e1/maintainability)](https://codeclimate.com/github/NARKOZ/gitlab)
5
- [![Inline docs](https://inch-ci.org/github/NARKOZ/gitlab.svg)](https://inch-ci.org/github/NARKOZ/gitlab)
3
+ [![Build Status](https://img.shields.io/github/workflow/status/NARKOZ/gitlab/CI/master)](https://github.com/NARKOZ/gitlab/actions/workflows/ci.yml)
6
4
  [![Gem version](https://img.shields.io/gem/v/gitlab.svg)](https://rubygems.org/gems/gitlab)
7
5
  [![License](https://img.shields.io/badge/license-BSD-red.svg)](https://github.com/NARKOZ/gitlab/blob/master/LICENSE.txt)
8
6
 
9
7
  [website](https://narkoz.github.io/gitlab) |
10
- [documentation](https://rubydoc.info/gems/gitlab/frames) |
8
+ [documentation](https://www.rubydoc.info/gems/gitlab/frames) |
11
9
  [gitlab-live](https://github.com/NARKOZ/gitlab-live)
12
10
 
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 GitLab API v4.
11
+ Gitlab is a Ruby wrapper and CLI for the [GitLab API](https://docs.gitlab.com/ee/api/index.html).
15
12
 
16
13
  ## Installation
17
14
 
@@ -28,7 +25,7 @@ gem 'gitlab'
28
25
  # gem 'gitlab', github: 'NARKOZ/gitlab'
29
26
  ```
30
27
 
31
- Mac OS users can install using Homebrew:
28
+ Mac OS users can install using Homebrew (may not be the latest version):
32
29
 
33
30
  ```sh
34
31
  brew install gitlab-gem
@@ -40,7 +37,7 @@ Configuration example:
40
37
 
41
38
  ```ruby
42
39
  Gitlab.configure do |config|
43
- config.endpoint = 'https://example.net/api/v4' # API endpoint URL, default: ENV['GITLAB_API_ENDPOINT']
40
+ config.endpoint = 'https://example.net/api/v4' # API endpoint URL, default: ENV['GITLAB_API_ENDPOINT'] and falls back to ENV['CI_API_V4_URL']
44
41
  config.private_token = 'qEsq1pt6HJPaNciie3MG' # user's private token or OAuth2 access token, default: ENV['GITLAB_API_PRIVATE_TOKEN']
45
42
  # Optional
46
43
  # config.user_agent = 'Custom User Agent' # user agent, default: 'Gitlab Ruby Gem [version]'
@@ -72,8 +69,14 @@ ENV['GITLAB_API_HTTPARTY_OPTIONS'] = '{read_timeout: 60}'
72
69
  Gitlab.projects(per_page: 5)
73
70
  # => [#<Gitlab::ObjectifiedHash:0x000000023326e0 @data={"id"=>1, "code"=>"brute", "name"=>"Brute", "description"=>nil, "path"=>"brute", "default_branch"=>nil, "owner"=>#<Gitlab::ObjectifiedHash:0x00000002331600 @data={"id"=>1, "email"=>"john@example.com", "name"=>"John Smith", "blocked"=>false, "created_at"=>"2012-09-17T09:41:56Z"}>, "private"=>true, "issues_enabled"=>true, "merge_requests_enabled"=>true, "wall_enabled"=>true, "wiki_enabled"=>true, "created_at"=>"2012-09-17T09:41:56Z"}>, #<Gitlab::ObjectifiedHash:0x000000023450d8 @data={"id"=>2, "code"=>"mozart", "name"=>"Mozart", "description"=>nil, "path"=>"mozart", "default_branch"=>nil, "owner"=>#<Gitlab::ObjectifiedHash:0x00000002344ca0 @data={"id"=>1, "email"=>"john@example.com", "name"=>"John Smith", "blocked"=>false, "created_at"=>"2012-09-17T09:41:56Z"}>, "private"=>true, "issues_enabled"=>true, "merge_requests_enabled"=>true, "wall_enabled"=>true, "wiki_enabled"=>true, "created_at"=>"2012-09-17T09:41:57Z"}>, #<Gitlab::ObjectifiedHash:0x00000002344958 @data={"id"=>3, "code"=>"gitlab", "name"=>"Gitlab", "description"=>nil, "path"=>"gitlab", "default_branch"=>nil, "owner"=>#<Gitlab::ObjectifiedHash:0x000000023447a0 @data={"id"=>1, "email"=>"john@example.com", "name"=>"John Smith", "blocked"=>false, "created_at"=>"2012-09-17T09:41:56Z"}>, "private"=>true, "issues_enabled"=>true, "merge_requests_enabled"=>true, "wall_enabled"=>true, "wiki_enabled"=>true, "created_at"=>"2012-09-17T09:41:58Z"}>]
74
71
 
75
- # initialize a new client
76
- g = Gitlab.client(endpoint: 'https://api.example.com', private_token: 'qEsq1pt6HJPaNciie3MG')
72
+ # initialize a new client with custom headers
73
+ g = Gitlab.client(
74
+ endpoint: 'https://example.com/api/v4',
75
+ private_token: 'qEsq1pt6HJPaNciie3MG',
76
+ httparty: {
77
+ headers: { 'Cookie' => 'gitlab_canary=true' }
78
+ }
79
+ )
77
80
  # => #<Gitlab::Client:0x00000001e62408 @endpoint="https://api.example.com", @private_token="qEsq1pt6HJPaNciie3MG", @user_agent="Gitlab Ruby Gem 2.0.0">
78
81
 
79
82
  # get a user
@@ -92,6 +95,10 @@ Gitlab.sudo = 'other_user'
92
95
  Gitlab.sudo = nil
93
96
  # => nil
94
97
 
98
+ # set the private token to an empty string to make unauthenticated API requests
99
+ Gitlab.private_token = ''
100
+ # => ""
101
+
95
102
  # a paginated response
96
103
  projects = Gitlab.projects(per_page: 5)
97
104
 
@@ -110,14 +117,15 @@ end
110
117
  projects.auto_paginate
111
118
  ```
112
119
 
113
- For more information, refer to [documentation](https://rubydoc.info/gems/gitlab/frames).
120
+ For more information, refer to [documentation](https://www.rubydoc.info/gems/gitlab/frames).
114
121
 
115
122
  ## CLI
116
123
 
117
124
  It is possible to use this gem as a command line interface to GitLab. In order to make that work you need to set a few environment variables:
118
125
  ```sh
119
- export GITLAB_API_ENDPOINT=https://gitlab.yourcompany.com/api/v4
120
- export GITLAB_API_PRIVATE_TOKEN=<your private token from /profile/account or /profile/personal_access_tokens in newer version>
126
+ export GITLAB_API_ENDPOINT=https://gitlab.example.com/api/v4
127
+ export GITLAB_API_PRIVATE_TOKEN=<your private token from /profile/personal_access_tokens>
128
+
121
129
  # This one is optional and can be used to set any HTTParty option you may need
122
130
  # using YAML hash syntax. For example, this is how you would disable SSL
123
131
  # verification (useful if using a self-signed cert).
@@ -126,21 +134,21 @@ export GITLAB_API_HTTPARTY_OPTIONS="{verify: false}"
126
134
 
127
135
  Usage:
128
136
 
129
- When you want to know which CLI commands are supported, take a look at the client [commands implemented in this gem](https://www.rubydoc.info/gems/gitlab/4.5.0/Gitlab/Client). Any of those methods can be called as a command by passing the parameters of the commands as parameters of the CLI.
137
+ When you want to know which CLI commands are supported, take a look at the client [commands implemented in this gem](https://www.rubydoc.info/gems/gitlab/4.18.0/Gitlab/Client). Any of those methods can be called as a command by passing the parameters of the commands as parameters of the CLI.
130
138
 
131
139
  Usage examples:
132
140
 
133
141
  ```sh
134
142
  # list users
135
- # see: https://www.rubydoc.info/gems/gitlab/4.5.0/Gitlab/Client/Users#users-instance_method
143
+ # see: https://www.rubydoc.info/gems/gitlab/Gitlab/Client/Users#users-instance_method
136
144
  gitlab users
137
145
 
138
146
  # get current user
139
- # see: https://www.rubydoc.info/gems/gitlab/4.5.0/Gitlab/Client/Users#user-instance_method
147
+ # see: https://www.rubydoc.info/gems/gitlab/Gitlab/Client/Users#user-instance_method
140
148
  gitlab user
141
149
 
142
150
  # get a user
143
- # see: https://www.rubydoc.info/gems/gitlab/4.5.0/Gitlab/Client/Users#user-instance_method
151
+ # see: https://www.rubydoc.info/gems/gitlab/Gitlab/Client/Users#user-instance_method
144
152
  gitlab user 2
145
153
 
146
154
  # filter output
@@ -152,7 +160,7 @@ gitlab user --except=email,bio
152
160
  gitlab user 2 --json
153
161
 
154
162
  # passing options hash to a command (use YAML)
155
- # see: https://www.rubydoc.info/gems/gitlab/4.5.0/Gitlab/Client/MergeRequests#create_merge_request-instance_method
163
+ # see: https://www.rubydoc.info/gems/gitlab/Gitlab/Client/MergeRequests#create_merge_request-instance_method
156
164
  gitlab create_merge_request 4 "New merge request" "{source_branch: 'new_branch', target_branch: 'master', assignee_id: 42}"
157
165
 
158
166
  ```
data/lib/gitlab/api.rb CHANGED
@@ -10,6 +10,7 @@ module Gitlab
10
10
 
11
11
  # Creates a new API.
12
12
  # @raise [Error:MissingCredentials]
13
+ # rubocop:disable Lint/MissingSuper
13
14
  def initialize(options = {})
14
15
  options = Gitlab.options.merge(options)
15
16
  (Configuration::VALID_OPTIONS_KEYS + [:auth_token]).each do |key|
@@ -18,5 +19,6 @@ module Gitlab
18
19
  request_defaults(sudo)
19
20
  self.class.headers 'User-Agent' => user_agent
20
21
  end
22
+ # rubocop:enable Lint/MissingSuper
21
23
  end
22
24
  end
data/lib/gitlab/cli.rb CHANGED
@@ -8,9 +8,6 @@ require_relative 'shell'
8
8
  class Gitlab::CLI
9
9
  extend Helpers
10
10
 
11
- # If set to true, JSON will be rendered as output
12
- @render_json = false
13
-
14
11
  # Starts a new CLI session.
15
12
  #
16
13
  # @example
@@ -20,10 +17,10 @@ class Gitlab::CLI
20
17
  # @param [Array] args The command and it's optional arguments.
21
18
  def self.start(args)
22
19
  command = begin
23
- args.shift.strip
24
- rescue StandardError
25
- 'help'
26
- end
20
+ args.shift.strip
21
+ rescue StandardError
22
+ 'help'
23
+ end
27
24
  run(command, args)
28
25
  end
29
26
 
@@ -59,6 +56,7 @@ class Gitlab::CLI
59
56
 
60
57
  unless valid_command?(cmd)
61
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
62
60
  exit(1)
63
61
  end
64
62
 
@@ -82,7 +80,7 @@ class Gitlab::CLI
82
80
  # Helper method that checks whether we want to get the output as json
83
81
  # @return [nil]
84
82
  def self.render_output(cmd, args, data)
85
- if @json_output
83
+ if defined?(@json_output) && @json_output
86
84
  output_json(cmd, args, data)
87
85
  else
88
86
  output_table(cmd, args, data)
@@ -39,22 +39,23 @@ class Gitlab::CLI
39
39
  #
40
40
  # @return [Array]
41
41
  def required_fields(args)
42
- if args.any? && args.last.is_a?(String) && args.last.start_with?('--only=')
43
- args.last.gsub('--only=', '').split(',')
44
- else
45
- []
46
- end
42
+ filtered_fields(args, '--only=')
47
43
  end
48
44
 
49
45
  # Returns filtered excluded fields.
50
46
  #
51
47
  # @return [Array]
52
48
  def excluded_fields(args)
53
- if args.any? && args.last.is_a?(String) && args.last.start_with?('--except=')
54
- args.last.gsub('--except=', '').split(',')
55
- else
56
- []
57
- end
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(',')
58
59
  end
59
60
 
60
61
  # Confirms command is valid.
@@ -110,7 +111,7 @@ class Gitlab::CLI
110
111
  else
111
112
  hash_result = case data
112
113
  when Gitlab::ObjectifiedHash, Gitlab::FileResponse
113
- record_hash([data], cmd, args, true)
114
+ record_hash([data], cmd, args, single_value: true)
114
115
  when Gitlab::PaginatedResponse
115
116
  record_hash(data, cmd, args)
116
117
  else
@@ -161,7 +162,7 @@ class Gitlab::CLI
161
162
  # @param [Array] args Options passed to the API call
162
163
  # @param [bool] single_value If set to true, a single result should be returned
163
164
  # @return [Hash] Result hash
164
- def record_hash(data, cmd, args, single_value = false)
165
+ def record_hash(data, cmd, args, single_value: false)
165
166
  if data.empty?
166
167
  result = nil
167
168
  else
@@ -205,14 +206,10 @@ class Gitlab::CLI
205
206
 
206
207
  # Helper function to call Gitlab commands with args.
207
208
  def gitlab_helper(cmd, args = [])
208
- begin
209
- data = 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
- data
209
+ args.any? ? Gitlab.send(cmd, *args) : Gitlab.send(cmd)
210
+ rescue StandardError => e
211
+ puts e.message
212
+ yield if block_given?
216
213
  end
217
214
 
218
215
  # Convert a hash (recursively) to use symbol hash keys
@@ -220,11 +217,9 @@ class Gitlab::CLI
220
217
  def symbolize_keys(hash)
221
218
  if hash.is_a?(Hash)
222
219
  hash = hash.each_with_object({}) do |(key, value), new_hash|
223
- begin
224
- new_hash[key.to_sym] = symbolize_keys(value)
225
- rescue NoMethodError
226
- raise "Error: cannot convert hash key to symbol: #{key}"
227
- end
220
+ new_hash[key.to_sym] = symbolize_keys(value)
221
+ rescue NoMethodError
222
+ raise "Error: cannot convert hash key to symbol: #{key}"
228
223
  end
229
224
  end
230
225
 
@@ -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
@@ -2,8 +2,8 @@
2
2
 
3
3
  class Gitlab::Client
4
4
  # Defines methods related to builds.
5
- # @see https://docs.gitlab.com/ce/api/build_variables.html
6
- # @see https://docs.gitlab.com/ee/api/group_level_variables.html
5
+ # @see https://docs.gitlab.com/ce/api/project_level_variables.html
6
+ # @see https://docs.gitlab.com/ce/api/group_level_variables.html
7
7
  module BuildVariables
8
8
  # Gets a list of the project's build variables
9
9
  #
@@ -36,9 +36,10 @@ class Gitlab::Client
36
36
  # @param [Integer, String] project The ID or name of a project.
37
37
  # @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
38
38
  # @param [String] value The value of a variable
39
+ # @param [Hash] opts optional parameters
39
40
  # @return [Gitlab::ObjectifiedHash] The variable.
40
- def create_variable(project, key, value)
41
- post("/projects/#{url_encode project}/variables", body: { key: key, value: value })
41
+ def create_variable(project, key, value, **opts)
42
+ post("/projects/#{url_encode project}/variables", body: opts.merge(key: key, value: value))
42
43
  end
43
44
 
44
45
  # Update a project's build variable.
@@ -49,9 +50,10 @@ class Gitlab::Client
49
50
  # @param [Integer, String] project The ID or name of a project.
50
51
  # @param [String] key The key of a variable
51
52
  # @param [String] value The value of a variable
53
+ # @param [Hash] opts optional parameters
52
54
  # @return [Gitlab::ObjectifiedHash] The variable.
53
- def update_variable(project, key, value)
54
- put("/projects/#{url_encode project}/variables/#{key}", body: { value: value })
55
+ def update_variable(project, key, value, **opts)
56
+ put("/projects/#{url_encode project}/variables/#{key}", body: opts.merge(value: value))
55
57
  end
56
58
 
57
59
  # Remove a project's build variable.
@@ -61,9 +63,10 @@ class Gitlab::Client
61
63
  #
62
64
  # @param [Integer, String] project The ID or name of a project.
63
65
  # @param [String] key The key of a variable.
66
+ # @param [Hash] opts optional parameters
64
67
  # @return [Gitlab::ObjectifiedHash] The variable.
65
- def remove_variable(project, key)
66
- delete("/projects/#{url_encode project}/variables/#{key}")
68
+ def remove_variable(project, key, **opts)
69
+ delete("/projects/#{url_encode project}/variables/#{key}", query: opts)
67
70
  end
68
71
 
69
72
  # Gets a list of the group's build variables
@@ -97,9 +100,10 @@ class Gitlab::Client
97
100
  # @param [Integer, String] group The ID or name of a group.
98
101
  # @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
99
102
  # @param [String] value The value of a variable
103
+ # @param [Hash] opts optional parameters
100
104
  # @return [Gitlab::ObjectifiedHash] The variable.
101
- def create_group_variable(group, key, value)
102
- post("/groups/#{url_encode group}/variables", body: { key: key, value: value })
105
+ def create_group_variable(group, key, value, **opts)
106
+ post("/groups/#{url_encode group}/variables", body: opts.merge(key: key, value: value))
103
107
  end
104
108
 
105
109
  # Update a group's build variable.
@@ -110,9 +114,10 @@ class Gitlab::Client
110
114
  # @param [Integer, String] group The ID or name of a group.
111
115
  # @param [String] key The key of a variable
112
116
  # @param [String] value The value of a variable
117
+ # @param [Hash] opts optional parameters
113
118
  # @return [Gitlab::ObjectifiedHash] The variable.
114
- def update_group_variable(group, key, value)
115
- put("/groups/#{url_encode group}/variables/#{key}", body: { value: value })
119
+ def update_group_variable(group, key, value, **opts)
120
+ put("/groups/#{url_encode group}/variables/#{key}", body: opts.merge(value: value))
116
121
  end
117
122
 
118
123
  # Remove a group's build variable.
@@ -8,11 +8,11 @@ class Gitlab::Client
8
8
  #
9
9
  # @example
10
10
  # Gitlab.commits('viking')
11
- # Gitlab.repo_commits('gitlab', { ref_name: 'api' })
11
+ # Gitlab.repo_commits('gitlab', { ref: 'api' })
12
12
  #
13
13
  # @param [Integer, String] project The ID or name of a project.
14
14
  # @param [Hash] options A customizable set of options.
15
- # @option options [String] :ref_name The branch or tag name of a project repository.
15
+ # @option options [String] :ref The branch or tag name of a project repository.
16
16
  # @option options [Integer] :page The page number.
17
17
  # @option options [Integer] :per_page The number of results per page.
18
18
  # @return [Array<Gitlab::ObjectifiedHash>]
@@ -35,6 +35,22 @@ class Gitlab::Client
35
35
  end
36
36
  alias repo_commit commit
37
37
 
38
+ # Get all references (from branches or tags) a commit is pushed to.
39
+ #
40
+ # @example
41
+ # Gitlab.commit_refs(42, '6104942438c14ec7bd21c6cd5bd995272b3faff6')
42
+ #
43
+ # @param [Integer, String] project The ID or name of a project.
44
+ # @param [String] sha The commit hash
45
+ # @param [Hash] options A customizable set of options.
46
+ # @option options [String] :type The scope of commits. Possible values `branch`, `tag`, `all`. Default is `all`.
47
+ # @option options [Integer] :page The page number.
48
+ # @option options [Integer] :per_page The number of results per page.
49
+ # @return [Gitlab::ObjectifiedHash]
50
+ def commit_refs(project, sha, options = {})
51
+ get("/projects/#{url_encode project}/repository/commits/#{sha}/refs", query: options)
52
+ end
53
+
38
54
  # Cherry picks a commit to a given branch.
39
55
  #
40
56
  # @example
@@ -43,9 +59,30 @@ class Gitlab::Client
43
59
  # @param [Integer, String] project The ID or name of a project.
44
60
  # @param [String] sha The commit hash or name of a repository branch or tag
45
61
  # @param [String] branch The name of the branch
62
+ # @param [Hash] options A customizable set of options.
63
+ # @option options [Boolean] :dry_run Don't commit any changes
64
+ # @return [Gitlab::ObjectifiedHash]
65
+ def cherry_pick_commit(project, sha, branch, options = {})
66
+ options[:branch] = branch
67
+
68
+ post("/projects/#{url_encode project}/repository/commits/#{sha}/cherry_pick", body: options)
69
+ end
70
+
71
+ # Reverts a commit in a given branch.
72
+ #
73
+ # @example
74
+ # Gitlab.revert_commit(42, '6104942438c14ec7bd21c6cd5bd995272b3faff6', 'master')
75
+ #
76
+ # @param [Integer, String] project The ID or name of a project.
77
+ # @param [String] sha The commit hash or name of a repository branch or tag
78
+ # @param [String] branch The name of the branch
79
+ # @param [Hash] options A customizable set of options.
80
+ # @option options [Boolean] :dry_run Don't commit any changes
46
81
  # @return [Gitlab::ObjectifiedHash]
47
- def cherry_pick_commit(project, sha, branch)
48
- post("/projects/#{url_encode project}/repository/commits/#{sha}/cherry_pick", body: { branch: branch })
82
+ def revert_commit(project, sha, branch, options = {})
83
+ options[:branch] = branch
84
+
85
+ post("/projects/#{url_encode project}/repository/commits/#{sha}/revert", body: options)
49
86
  end
50
87
 
51
88
  # Get the diff of a commit in a project.
@@ -129,7 +166,7 @@ class Gitlab::Client
129
166
  # @option options [String] :name Filter by status name, eg. jenkins
130
167
  # @option options [String] :target_url The target URL to associate with this status
131
168
  def update_commit_status(project, sha, state, options = {})
132
- post("/projects/#{url_encode project}/statuses/#{sha}", query: options.merge(state: state))
169
+ post("/projects/#{url_encode project}/statuses/#{sha}", body: options.merge(state: state))
133
170
  end
134
171
  alias repo_update_commit_status update_commit_status
135
172