gitlab 5.0.0 → 5.1.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 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