gitlab 5.0.0 → 5.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e2ac5f300e0abf6ff5039f696b6558be356564e50a0f4f9b3705c21ebceddaf9
4
- data.tar.gz: 18338d4e23c87679ba75e68155dc5f015bf5a70b88b836723a43398b80f0eda3
3
+ metadata.gz: e1453623fe0d87a006492342f5726338aba971afcc6b693295f537a037d7e2e9
4
+ data.tar.gz: ab5e4e4d81bdeeef8802dc03bc8b7c912c6b41f1d4ac25ab5ca752b4af53121b
5
5
  SHA512:
6
- metadata.gz: 3037f0c16308dd121a312c67d9011775d4bc0bb053fe5a4b38787554e925fbfe62197186550aefef42fb329769cb625676de16f84bc65a1fe318f2442c065d55
7
- data.tar.gz: f20e8a0e6c7235723d13c7beb9294cf04d81b59558b301acd9abeb0832c4e18b2211032299e2fafa67ed07ce190b31ca9a45996d9482e015d9d7b6d4a4dcb25b
6
+ metadata.gz: 54dae253ce896dcbf3e612fdd4bb3e092373557e5959292e5a949108679d4ead1ac69e34e45f9d15c795e826d19b55175ad234598aa68f2e51c8384289af7267
7
+ data.tar.gz: 14ab36332c58d98f43216df49bfa6e1cbe8aa6a540ef83cb4b1d2090cad66c9eb8351172f1d13feb369f7f32b8d65503094be358d855b1d5636f01418b129f4f
@@ -59,6 +59,18 @@ class Gitlab::Client
59
59
  get("/projects/#{url_encode project}/merge_requests/#{id}/pipelines")
60
60
  end
61
61
 
62
+ # Shows information about the merge request dependencies that must be resolved before merging.
63
+ #
64
+ # @example
65
+ # Gitlab.merge_request_dependencies(5, 36)
66
+ #
67
+ # @param [Integer, String] project The ID or name of a project.
68
+ # @param [Integer] id The ID of a merge request.
69
+ # @return [Array<Gitlab::ObjectifiedHash>]
70
+ def merge_request_dependencies(project, id)
71
+ get("/projects/#{url_encode project}/merge_requests/#{id}/blocks")
72
+ end
73
+
62
74
  # Create a new pipeline for a merge request.
63
75
  # A pipeline created via this endpoint doesnt run a regular branch/tag pipeline.
64
76
  # It requires .gitlab-ci.yml to be configured with only: [merge_requests] to create jobs.
@@ -223,9 +235,11 @@ class Gitlab::Client
223
235
  # Gitlab.merge_request_discussions('gitlab', 1)
224
236
  # @param [Integer, String] project The ID or name of a project.
225
237
  # @param [Integer] id The ID of a merge request.
238
+ # @option options [Integer] :page The page number.
239
+ # @option options [Integer] :per_page The number of results per page.
226
240
  # @return [Gitlab::ObjectifiedHash] List of the merge request discussions.
227
- def merge_request_discussions(project, merge_request_id)
228
- get("/projects/#{url_encode project}/merge_requests/#{merge_request_id}/discussions")
241
+ def merge_request_discussions(project, merge_request_id, options = {})
242
+ get("/projects/#{url_encode project}/merge_requests/#{merge_request_id}/discussions", query: options)
229
243
  end
230
244
 
231
245
  # Get single merge request discussion
@@ -30,6 +30,18 @@ class Gitlab::Client
30
30
  get("/projects/#{url_encode project}/pipeline_schedules/#{id}")
31
31
  end
32
32
 
33
+ # Get all pipelines triggered by a pipeline schedule
34
+ #
35
+ # @example
36
+ # Gitlab.pipelines_by_pipeline_schedule(5, 3)
37
+ #
38
+ # @param [Integer, String] project The ID or name of a project.
39
+ # @param [Integer] id The ID of the pipeline schedule.
40
+ # @return [Array<Gitlab::ObjectifiedHash>]
41
+ def pipelines_by_pipeline_schedule(project, id)
42
+ get("/projects/#{url_encode project}/pipeline_schedules/#{id}/pipelines")
43
+ end
44
+
33
45
  # Create a pipeline schedule.
34
46
  #
35
47
  # @example
@@ -3,7 +3,7 @@
3
3
  class Gitlab::Client
4
4
  # Defines methods related to projects.
5
5
  # @see https://docs.gitlab.com/ce/api/projects.html
6
- module Projects
6
+ module Projects # rubocop:disable Metrics/ModuleLength
7
7
  # Gets a list of projects owned by the authenticated user.
8
8
  #
9
9
  # @example
@@ -704,5 +704,85 @@ class Gitlab::Client
704
704
  def project_deploy_tokens(project, options = {})
705
705
  get("/projects/#{url_encode project}/deploy_tokens", query: options)
706
706
  end
707
+
708
+ # Get languages used with percentage value
709
+ #
710
+ # @example
711
+ # Gitlab.project_languages(42)
712
+ #
713
+ # @param [Integer, String] id The ID or path of a project.
714
+ # @return [Gitlab::ObjectifiedHash]
715
+ def project_languages(project)
716
+ get("/projects/#{url_encode project}/languages")
717
+ end
718
+
719
+ # List all project access tokens.
720
+ #
721
+ # @example
722
+ # Gitlab.project_access_tokens(42)
723
+ #
724
+ # @param [Integer, String] project The ID or path of a project.
725
+ # @option options [String] :state Limit by active/inactive state. Optional.
726
+ #
727
+ # @return [Array<Gitlab::ObjectifiedHash>]
728
+ def project_access_tokens(project, options = {})
729
+ get("/projects/#{url_encode project}/access_tokens", query: options)
730
+ end
731
+
732
+ # Get a specific project access token.
733
+ #
734
+ # @example
735
+ # Gitlab.project_access_token(42, 1234)
736
+ #
737
+ # @param [Integer, String] project The ID or path of a project.
738
+ # @param [Integer] token_id The ID of the project access token.
739
+ #
740
+ # @return [Gitlab::ObjectifiedHash] Information about the specified project access token.
741
+ def project_access_token(project, token_id)
742
+ get("/projects/#{url_encode project}/access_tokens/#{token_id}")
743
+ end
744
+
745
+ # Creates a new project access token.
746
+ #
747
+ # @example
748
+ # Gitlab.create_project_access_token(42, 'My Token', ['api'], '2024-12-12', access_level: 40)
749
+ #
750
+ # @param [Integer, String] project The ID or path of a project.
751
+ # @param [String] name The name of the project access token.
752
+ # @param [Array] scopes List of scopes of the project access token.
753
+ # @param [String] expires_at A date string in the format YYYY-MM-DD.
754
+ # @option options [Integer] :access_level Access level. Optional. Defaults to 40.
755
+ #
756
+ # @return [Gitlab::ObjectifiedHash] Information about the created project access token.
757
+ def create_project_access_token(project, name, scopes, expires_at, options = {})
758
+ post("/projects/#{url_encode project}/access_tokens", body: { name: name, scopes: scopes, expires_at: expires_at }.merge(options))
759
+ end
760
+
761
+ # Rotate a project access token.
762
+ #
763
+ # @example
764
+ # Gitlab.rotate_project_access_token(42, 1234)
765
+ #
766
+ # @param [Integer, String] project The ID or path of a project.
767
+ # @param [Integer] token_id The ID of the project access token.
768
+ # @option options [String] :expires_at A date string in the format YEAR-MONTH-DAY.
769
+ #
770
+ # @return [Gitlab::ObjectifiedHash] Information about the specified project access token.
771
+ def rotate_project_access_token(project, token_id, options = {})
772
+ post("/projects/#{url_encode project}/access_tokens/#{token_id}/rotate", query: options)
773
+ end
774
+
775
+ # Revoke a project access token.
776
+ #
777
+ # @example
778
+ # Gitlab.revoke_project_access_token(42, 1234)
779
+ #
780
+ # @param [Integer, String] project The ID or path of a project.
781
+ # @param [Integer] token_id The ID of the project access token.
782
+ #
783
+ # @return [Gitlab::ObjectifiedHash]
784
+ def revoke_project_access_token(project, token_id)
785
+ delete("/projects/#{url_encode project}/access_tokens/#{token_id}")
786
+ end
707
787
  end
708
788
  end
data/lib/gitlab/client.rb CHANGED
@@ -77,7 +77,7 @@ module Gitlab
77
77
  # @return [String]
78
78
  def inspect
79
79
  inspected = super
80
- inspected.sub! @private_token, only_show_last_four_chars(@private_token) if @private_token
80
+ inspected = redact_private_token(inspected, @private_token) if @private_token
81
81
  inspected
82
82
  end
83
83
 
@@ -91,7 +91,14 @@ module Gitlab
91
91
 
92
92
  private
93
93
 
94
+ def redact_private_token(inspected, private_token)
95
+ redacted = only_show_last_four_chars(private_token)
96
+ inspected.sub %(@private_token="#{private_token}"), %(@private_token="#{redacted}")
97
+ end
98
+
94
99
  def only_show_last_four_chars(token)
100
+ return '****' if token.size <= 4
101
+
95
102
  "#{'*' * (token.size - 4)}#{token[-4..]}"
96
103
  end
97
104
  end
@@ -5,7 +5,7 @@ module Gitlab
5
5
  # Defines constants and methods related to configuration.
6
6
  module Configuration
7
7
  # An array of valid keys in the options hash when configuring a Gitlab::API.
8
- VALID_OPTIONS_KEYS = %i[endpoint private_token user_agent sudo httparty].freeze
8
+ VALID_OPTIONS_KEYS = %i[endpoint private_token user_agent sudo httparty pat_prefix].freeze
9
9
 
10
10
  # The user agent that will be sent to the API endpoint if none is set.
11
11
  DEFAULT_USER_AGENT = "Gitlab Ruby Gem #{Gitlab::VERSION}"
@@ -37,6 +37,7 @@ module Gitlab
37
37
  def reset
38
38
  self.endpoint = ENV['GITLAB_API_ENDPOINT'] || ENV['CI_API_V4_URL']
39
39
  self.private_token = ENV['GITLAB_API_PRIVATE_TOKEN'] || ENV['GITLAB_API_AUTH_TOKEN']
40
+ self.pat_prefix = nil
40
41
  self.httparty = get_httparty_config(ENV['GITLAB_API_HTTPARTY_OPTIONS'])
41
42
  self.sudo = nil
42
43
  self.user_agent = DEFAULT_USER_AGENT
@@ -12,7 +12,7 @@ module Gitlab
12
12
  headers 'Accept' => 'application/json', 'Content-Type' => 'application/x-www-form-urlencoded'
13
13
  parser(proc { |body, _| parse(body) })
14
14
 
15
- attr_accessor :private_token, :endpoint
15
+ attr_accessor :private_token, :endpoint, :pat_prefix
16
16
 
17
17
  # Converts the response body to an ObjectifiedHash.
18
18
  def self.parse(body)
@@ -93,10 +93,19 @@ module Gitlab
93
93
  def authorization_header
94
94
  raise Error::MissingCredentials, 'Please provide a private_token or auth_token for user' unless private_token
95
95
 
96
- if private_token.size < 21
96
+ # The Personal Access Token prefix can be at most 20 characters, and the
97
+ # generated part is of length 20 characters. Personal Access Tokens, thus
98
+ # can have a maximum size of 40 characters. GitLab uses
99
+ # `Doorkeeper::OAuth::Helpers::UniqueToken.generate` for generating
100
+ # OAuth2 tokens, and specified `hex` as token generator method. Thus, the
101
+ # OAuth2 tokens are of length more than 64. If the token length is below
102
+ # that, it is probably a Personal Access Token or CI_JOB_TOKEN.
103
+ if private_token.size >= 64
104
+ { 'Authorization' => "Bearer #{private_token}" }
105
+ elsif private_token.start_with?(pat_prefix.to_s)
97
106
  { 'PRIVATE-TOKEN' => private_token }
98
107
  else
99
- { 'Authorization' => "Bearer #{private_token}" }
108
+ { 'JOB-TOKEN' => private_token }
100
109
  end
101
110
  end
102
111
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Gitlab
4
- VERSION = '5.0.0'
4
+ VERSION = '5.1.0'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gitlab
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.0
4
+ version: 5.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nihad Abbasov
@@ -9,8 +9,22 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2024-06-22 00:00:00.000000000 Z
12
+ date: 2024-10-29 00:00:00.000000000 Z
13
13
  dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: base64
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: 0.2.0
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: 0.2.0
14
28
  - !ruby/object:Gem::Dependency
15
29
  name: httparty
16
30
  requirement: !ruby/object:Gem::Requirement
@@ -200,7 +214,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
200
214
  - !ruby/object:Gem::Version
201
215
  version: '0'
202
216
  requirements: []
203
- rubygems_version: 3.1.6
217
+ rubygems_version: 3.5.16
204
218
  signing_key:
205
219
  specification_version: 4
206
220
  summary: A Ruby wrapper and CLI for the GitLab API