labclient 0.4.0 → 0.6.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: '038bb19b37338ea79eae25d376f49c470e3a3901e84d9f578e51da0ef78f9041'
4
- data.tar.gz: 8b7893bbcefc7fa4cbecdf1e3f1b3a21d0298678bb9ae8ed30cc2df13eee2e3f
3
+ metadata.gz: 866bed156a753e7148f538c380d453899259cae098cca155fba3ed81517d71c7
4
+ data.tar.gz: 2f52c954789f226ead00127e029428f2bc32f85757112211082d0a204ecd1c53
5
5
  SHA512:
6
- metadata.gz: 17c52ea58baf3bda4bf70c9111000a823e9f0eac9fdc2cbece3be95c89162ed19b31e3ec39ce86ee504be590f600d9710afe1e0ce5efe11ef339f4fa9dec963e
7
- data.tar.gz: f4b66628ef3916cc5d431d36196d9abb278435fc98fba7b90ff6720cc159d3599ff6f0d87c5152b1ba0cf0d252fe4a3052a5344b28bdf8d26d8e59845f0f9d19
6
+ metadata.gz: 13c0c5f1201b8a4a4d77ad09b7496a6ea1c14af360e7d19cce1877467a6b6a70acb018025a36c2746532ffed98e258e6960b03436ebb24bc717d6c895f35af25
7
+ data.tar.gz: b1b10db7e1ab7a4ed4a428330d5fac26fead66f09c220b4147e236aa380066d40a439cb6beb60ab0afd321f4620ffe654250af6121114481d935756cc671a901
@@ -94,7 +94,15 @@ module LabClient
94
94
 
95
95
  # Helper for Accessing the Retry Headers
96
96
  def retry_after
97
- resp.headers['retry-after'].to_i || 0
97
+ retry_header || delay_factor || 1
98
+ end
99
+
100
+ def retry_header
101
+ resp.headers['retry-after']&.to_i
102
+ end
103
+
104
+ def retry_debug_headers
105
+ resp.headers.select { |k, _v| k.include? 'ratelimit' }
98
106
  end
99
107
 
100
108
  # Handle Retry Logic
@@ -54,6 +54,7 @@ module LabClient
54
54
  pipelines: Pipelines,
55
55
  project_runners: ProjectRunners,
56
56
  projects: Projects,
57
+ terraform: Terraform,
57
58
  protected_branches: ProtectedBranches,
58
59
  protected_environments: ProtectedEnvironments,
59
60
  protected_tags: ProtectedTags,
@@ -17,14 +17,15 @@ module LabClient
17
17
  # If nothing entered Prompt for Input
18
18
  def prompt_for_url
19
19
  print 'Enter GitLab URL (e.g. https://gitlab.com): '
20
- @settings[:url] = $stdin.gets.chomp
20
+ @settings[:url] = ENV['LABCLIENT_TESTING'] ? 'testu' : $stdin.gets&.chomp
21
21
  raise 'LabClient Error - Missing URL!' if @settings[:url].blank?
22
22
  end
23
23
 
24
24
  # Check for Token
25
25
  def prompt_for_token
26
26
  print 'Enter Personal Access Token: '
27
- @settings[:token] = $stdin.gets.chomp
27
+
28
+ @settings[:token] = ENV['LABCLIENT_TESTING'] ? 'testt' : $stdin.gets&.chomp
28
29
  end
29
30
 
30
31
  # Fill Defaults
@@ -35,7 +36,7 @@ module LabClient
35
36
  @settings[:debug] = false if @settings[:quiet].nil?
36
37
  @settings[:debug] = false if @settings[:debug].nil?
37
38
  @settings[:token_type] = 'Private-Token' if @settings[:token_type].nil?
38
- @settings[:retry] = { max: 5, delay_factor: 1, count: 0 } if @settings[:retry].nil?
39
+ @settings[:retry] = { max: 5, delay_factor: 10, count: 0 } if @settings[:retry].nil?
39
40
  end
40
41
 
41
42
  # Support for Named Profiles
@@ -37,7 +37,6 @@ module LabClient
37
37
  debug_handler if debug?
38
38
 
39
39
  post_request_handlers
40
-
41
40
  process resp
42
41
  rescue LabClient::Error => e
43
42
  logger.fatal('Request Failed', e.error_details) unless quiet?
@@ -46,7 +45,7 @@ module LabClient
46
45
  self.retries += 1
47
46
 
48
47
  # Assume Retry After by Default
49
- logger.debug('Retry After', value: retry_after) if debug?
48
+ logger.debug('Retry After', value: retry_after, retry_debug_headers: retry_debug_headers) if debug?
50
49
  self.delay = retry_after if resp.headers.key? 'retry-after'
51
50
 
52
51
  self.delay += delay_factor
@@ -67,6 +66,9 @@ module LabClient
67
66
  # Save Client
68
67
  save_client
69
68
 
69
+ # Reset Delay/Retry Factor
70
+ retry_update if resp.success?
71
+
70
72
  # Exit on Max Retries
71
73
  raise LabClient::Error.new(resp), resp.friendly_error if retry_max?
72
74
 
@@ -74,9 +76,6 @@ module LabClient
74
76
 
75
77
  # Drop in raw path
76
78
  save_path
77
-
78
- # Reset Delay/Retry Factor
79
- retry_update
80
79
  end
81
80
 
82
81
  # Assume we want LabStruct if @klass is ever nil
@@ -85,13 +84,17 @@ module LabClient
85
84
  when LabStruct
86
85
  klass ? klass.new(resp.data, resp, self) : resp.data
87
86
  when Array
88
- if @klass.nil?
87
+ if klass.nil?
89
88
  resp.data
90
89
  else
91
- PaginatedResponse.new(@klass, resp, self)
90
+ PaginatedResponse.new(klass, resp, self)
92
91
  end
92
+ # Return Response/Status Object if there is no output otherwise
93
+ when NilClass
94
+ resp
95
+ # Default handler / if klass defined store plain response in data
93
96
  else
94
- resp.data
97
+ klass ? klass.new({ data: resp.data, response: resp }, resp, self) : resp
95
98
  end
96
99
  end
97
100
  end
@@ -20,7 +20,7 @@ module LabClient
20
20
  :name => "create_eks_clusters",
21
21
  :state => "on",
22
22
  :gates => [
23
- [0] OpenStruct {
23
+ [0] LabStruct {
24
24
  :key => "boolean",
25
25
  :value => true
26
26
  }
@@ -0,0 +1,11 @@
1
+ # Top namespace
2
+ module LabClient
3
+ # General File Wrapper
4
+ class LabFile < Klass
5
+ include ClassHelpers
6
+
7
+ def inspect
8
+ "#<LabFile size: #{data&.size}>"
9
+ end
10
+ end
11
+ end
@@ -3,11 +3,11 @@ module LabClient
3
3
  # Specifics
4
4
  class Files < Common
5
5
  doc 'Show' do
6
- desc 'Allows you to receive information about file in repository like name, size, content [Project ID, File Path, Ref (master default), kind]'
6
+ desc 'Allows you to receive information about file in repository like name, size, content [Project ID, File Path, Ref (main default), kind]'
7
7
  example 'client.files.show(264, "README.md")'
8
8
 
9
9
  markdown <<~DOC
10
- Ref will default to `master`
10
+ Ref will default to `main`
11
11
 
12
12
  Kind can be left empty or set to either :raw or :blame
13
13
  DOC
@@ -15,12 +15,12 @@ module LabClient
15
15
 
16
16
  doc 'Show' do
17
17
  desc 'Raw Content'
18
- example 'client.files.show(264, "README.md", :master, :raw)'
18
+ example 'client.files.show(264, "README.md", :main, :raw)'
19
19
  end
20
20
 
21
21
  doc 'Show' do
22
22
  desc 'Blame'
23
- example 'client.files.show(264, "README.md", :master, :blame)'
23
+ example 'client.files.show(264, "README.md", :main, :blame)'
24
24
  end
25
25
 
26
26
  doc 'Show' do
@@ -31,7 +31,7 @@ module LabClient
31
31
  DOC
32
32
  end
33
33
 
34
- def show(project_id, file_path, ref = :master, kind = nil)
34
+ def show(project_id, file_path, ref = :main, kind = nil)
35
35
  kind = case kind
36
36
  when :raw
37
37
  '/raw'
@@ -45,7 +45,7 @@ module LabClient
45
45
  # Path Name Encoding
46
46
  file_path = CGI.escape(file_path)
47
47
 
48
- client.request(:get, "projects/#{project_id}/repository/files/#{file_path}#{kind}", nil, ref: ref)
48
+ client.request(:get, "projects/#{project_id}/repository/files/#{file_path}#{kind}", LabFile, ref: ref)
49
49
  end
50
50
  end
51
51
  end
@@ -18,7 +18,6 @@ module LabClient
18
18
  end
19
19
 
20
20
  def sync(group_id)
21
- # POST /groups/:id/ldap_sync
22
21
  group_id = format_id(group_id)
23
22
 
24
23
  client.request(:post, "groups/#{group_id}/ldap_sync")
@@ -82,15 +82,25 @@ module Typhoeus
82
82
  self
83
83
  end
84
84
 
85
+ # Check if response body can be parsed
86
+ def json_body?
87
+ content_type = headers['content-type']
88
+
89
+ return false unless content_type
90
+ return true if content_type.include? 'application/json'
91
+
92
+ false
93
+ end
94
+
85
95
  def process_body
86
- if body.empty?
87
- nil
88
- elsif headers['content-type']&.include? 'text/plain'
89
- body
90
- else
91
- result = Oj.load(body, mode: :compat, object_class: LabClient::LabStruct)
96
+ return nil if body.empty?
97
+
98
+ if json_body?
99
+ result = Oj.load(body, mode: :compat, symbol_keys: true, object_class: LabClient::LabStruct)
92
100
  result.instance_variable_set(:@response, self) if result.instance_of?(LabClient::LabStruct)
93
101
  result
102
+ else
103
+ body
94
104
  end
95
105
  end
96
106
 
@@ -3,10 +3,10 @@ module LabClient
3
3
  # Specifics
4
4
  class Issues < Common
5
5
  doc 'Delete' do
6
- desc 'Updates an existing project issue. This call is also used to mark an issue as closed. [Project ID, Issue IID]'
6
+ desc 'Only for administrators and project owners. Deletes an issue. [Project ID, Issue IID]'
7
7
  example 'client.issues.delete(5, 1)'
8
8
  result <<~DOC
9
- => #<Issue id: 1, title: Moar Fancy!, state: opened>
9
+ => #<TyphoeusResponse code: 204>
10
10
  DOC
11
11
  end
12
12
 
@@ -3,11 +3,15 @@ module LabClient
3
3
  # Specifics
4
4
  class Jobs < Common
5
5
  doc 'Artifacts' do
6
- desc 'Get the job’s artifacts zipped archive of a project. [Project ID, Job ID, File Path, Job Token]'
6
+ desc 'Get the job’s artifacts zipped archive of a project. [Project ID, Job ID, Job Token, File Path]'
7
7
  example 'client.jobs.artifacts(264, 1)'
8
8
 
9
9
  markdown <<~DOC
10
- File Output will default to the current directory + job id + file extension. 14.zip
10
+ ---
11
+
12
+ Two methods are available. `download_artifacts` will download and write to the local directory (or file path) and `artifacts`/`show_artifacts` which will return a `LabFile` with the key of `data` for the response result.
13
+
14
+ File Output will default to the current directory + job id + file extension. 14.zip (Still returning `LabFile`)
11
15
 
12
16
  Job Token: To be used with triggers for multi-project pipelines. It should be invoked only inside `.gitlab-ci.yml`. Its value is always `$CI_JOB_TOKEN`.
13
17
  DOC
@@ -16,7 +20,7 @@ module LabClient
16
20
  doc 'Artifacts' do
17
21
  desc 'Specific output location'
18
22
  example <<~DOC
19
- client.jobs.artifacts(264, 1, '/tmp/output.zip')
23
+ client.jobs.download_artifacts(264, 1, '/tmp/output.zip')
20
24
  DOC
21
25
  end
22
26
 
@@ -24,6 +28,7 @@ module LabClient
24
28
  desc 'via Project'
25
29
  example <<~DOC
26
30
  project = client.projects.show(264)
31
+ project.job_download_artifacts(7)
27
32
  project.job_artifacts(7)
28
33
  DOC
29
34
  end
@@ -32,18 +37,29 @@ module LabClient
32
37
  desc 'via Job'
33
38
  example <<~DOC
34
39
  job = client.jobs.show(264, 7)
35
- job.artifacts
40
+ job.download_artifacts
41
+ job.show_artifacts
36
42
  DOC
37
43
  end
38
44
 
39
- def artifacts(project_id, job_id, file_path = nil, job_token = nil)
45
+ def artifacts(project_id, job_id, job_token = nil)
40
46
  job_id = format_id(job_id)
41
47
  project_id = format_id(project_id)
42
- file_path ||= "#{Dir.pwd}/#{job_id}.zip"
43
48
  query = { job_token: job_token } if job_token
44
- output = client.request(:get, "projects/#{project_id}/jobs/#{job_id}/artifacts", nil, query)
45
49
 
46
- File.write(file_path, output)
50
+ # Don't try to process output
51
+ client.request(:get, "projects/#{project_id}/jobs/#{job_id}/artifacts", LabFile, query)
52
+ end
53
+
54
+ # Helper to write immediately to a file
55
+ def download_artifacts(project_id, job_id, file_path = nil, job_token = nil)
56
+ file_path ||= "#{Dir.pwd}/#{job_id}.zip"
57
+ output = artifacts(project_id, job_id, job_token)
58
+
59
+ File.write(file_path, output.data) if output.success?
60
+
61
+ # Return LabFile
62
+ output
47
63
  end
48
64
  end
49
65
  end
@@ -17,9 +17,16 @@ module LabClient
17
17
  Pipeline.new(@table[:pipeline], response, client)
18
18
  end
19
19
 
20
- def artifacts(file_path = nil, job_token = nil)
20
+ # File Write Response
21
+ def download_artifacts(file_path = nil, job_token = nil)
21
22
  project_id = collect_project_id
22
- client.jobs.artifacts(project_id, id, file_path, job_token)
23
+ client.jobs.download_artifacts(project_id, id, job_token, file_path)
24
+ end
25
+
26
+ # LabFile Response
27
+ def show_artifacts(job_token = nil)
28
+ project_id = collect_project_id
29
+ client.jobs.artifacts(project_id, id, job_token)
23
30
  end
24
31
 
25
32
  def artifacts_path(artifacts_path, file_path = nil)
@@ -65,7 +72,7 @@ module LabClient
65
72
  help do
66
73
  @group_name = 'Jobs'
67
74
  subtitle 'Job'
68
- option 'artifacts', 'Download Job artifacts. [File Path, Job Token]'
75
+ option 'download_artifacts', 'Download Job artifacts. [File Path, Job Token]'
69
76
  option 'artifacts_path', 'Download Job artifacts path. [File Path, Output Path]'
70
77
  option 'trace', 'Get Job Output'
71
78
  option 'cancel', 'Cancel Job'
@@ -5,7 +5,7 @@ module LabClient
5
5
  include LabClient::Logger
6
6
  include CurlHelper
7
7
 
8
- attr_reader :client, :response
8
+ attr_reader :client
9
9
 
10
10
  extend Docs
11
11
 
@@ -105,18 +105,13 @@ module LabClient
105
105
  client.quiet?
106
106
  end
107
107
 
108
- # rubocop:disable Lint/MissingSuper
109
- def initialize(hash = nil, response = nil, client = nil)
108
+ def initialize(table = nil, response = nil, client = nil)
109
+ # @table = table unless table.nil?
110
110
  @client = client
111
111
  @response = response
112
112
 
113
- @table = {}
114
- hash&.each_pair do |k, v|
115
- k = k.to_sym
116
- @table[k] = v
117
- end
113
+ super(table)
118
114
  end
119
- # rubocop:enable Lint/MissingSuper
120
115
 
121
116
  # Forward response success
122
117
  def success?
@@ -1,16 +1,28 @@
1
- # Extensions for OpenStruct specific to LabClient
1
+ # Extensions for LabStruct specific to LabClient
2
2
  module LabClient
3
- # Unique inherited class to not override top level openstruct
4
- class LabStruct < OpenStruct
3
+ # Unique inherited class to not override top level LabStruct
4
+ class LabStruct
5
5
  include CurlHelper
6
- attr_reader :response
6
+ attr_reader :response, :table
7
+
8
+ def initialize(hash = {})
9
+ @table = if hash.instance_of?(LabClient::LabStruct)
10
+ hash.to_h
11
+ else
12
+ hash
13
+ end
14
+ end
15
+
16
+ def to_h
17
+ @table
18
+ end
7
19
 
8
20
  def keys
9
- to_h.keys.sort
21
+ @table.keys.sort
10
22
  end
11
23
 
12
24
  def inspect
13
- to_h.inspect
25
+ @table.inspect
14
26
  end
15
27
 
16
28
  def as_json(*args)
@@ -18,7 +30,7 @@ module LabClient
18
30
  end
19
31
 
20
32
  def slice(*opts)
21
- to_h.slice(*opts)
33
+ @table.slice(*opts)
22
34
  end
23
35
 
24
36
  def client
@@ -29,5 +41,25 @@ module LabClient
29
41
  def success?
30
42
  @response.success?
31
43
  end
44
+
45
+ def method_missing(method, *_args)
46
+ @table[method] if @table.keys.include?(method)
47
+ end
48
+
49
+ def respond_to_missing?(method_name, include_private = false)
50
+ @table.keys.include?(method_name) || super
51
+ end
52
+
53
+ def key?(idx)
54
+ @table.key? idx
55
+ end
56
+
57
+ def []=(name, value)
58
+ @table[name] = value
59
+ end
60
+
61
+ def [](name)
62
+ @table[name.to_sym]
63
+ end
32
64
  end
33
65
  end
@@ -13,13 +13,21 @@ module LabClient
13
13
  end
14
14
 
15
15
  doc 'Delete' do
16
- desc 'Delete through MergeRequest'
16
+ desc 'Delete via MergeRequest'
17
17
  example <<~DOC
18
- mr = client.merge_requests.show(343,2)
18
+ mr = client.merge_requests.delete(343,2)
19
19
  mr.delete
20
20
  DOC
21
21
  end
22
22
 
23
+ doc 'Delete' do
24
+ desc 'Via Project'
25
+ example <<~DOC
26
+ project = client.projects.show(1)
27
+ project.merge_requests_delete(12)
28
+ DOC
29
+ end
30
+
23
31
  # Delete
24
32
  def delete(project_id, merge_request_id)
25
33
  project_id = format_id(project_id)
@@ -31,7 +31,7 @@ module LabClient
31
31
  example 'client.notifications.update_project(16, level: :custom)'
32
32
 
33
33
  result <<~DOC
34
- OpenStruct {
34
+ LabStruct {
35
35
  :level => "custom",
36
36
  :events => LabStruct {
37
37
  :new_release => nil,
@@ -226,8 +226,12 @@ module LabClient
226
226
  client.jobs.show(id, job_id)
227
227
  end
228
228
 
229
- def job_artifacts(job_id, file_path = nil, job_token = nil)
230
- client.jobs.artifacts(id, job_id, file_path, job_token)
229
+ def job_download_artifacts(job_id, file_path = nil, job_token = nil)
230
+ client.jobs.download_artifacts(id, job_id, file_path, job_token)
231
+ end
232
+
233
+ def job_artifacts(job_id, job_token = nil)
234
+ client.jobs.artifacts(id, job_id, job_token)
231
235
  end
232
236
 
233
237
  def job_artifacts_latest(branch_name, job_name, file_path = nil, job_token = nil)
@@ -321,7 +325,7 @@ module LabClient
321
325
  end
322
326
 
323
327
  # Files
324
- def file(file_path, ref = :master, kind = nil)
328
+ def file(file_path, ref = :main, kind = nil)
325
329
  client.files.show(id, file_path, ref, kind)
326
330
  end
327
331
 
@@ -647,6 +651,10 @@ module LabClient
647
651
  client.merge_requests.create(id, query)
648
652
  end
649
653
 
654
+ def merge_request_delete(merge_request_iid)
655
+ client.merge_requests.delete(id, merge_request_iid)
656
+ end
657
+
650
658
  # Access Requests
651
659
  def request_access
652
660
  client.projects.access_requests.create(id)
@@ -17,6 +17,11 @@ module LabClient
17
17
  client.registry.tags(project_id, id)
18
18
  end
19
19
 
20
+ def delete
21
+ project_id = collect_project_id
22
+ client.registry.delete(project_id, id)
23
+ end
24
+
20
25
  help do
21
26
  @group_name = 'Registry'
22
27
  subtitle 'Registry Repository'
@@ -0,0 +1,7 @@
1
+ # Top namespace
2
+ module LabClient
3
+ # Inspect Helper
4
+ class RepositoryTree < Klass
5
+ include ClassHelpers
6
+ end
7
+ end
@@ -29,7 +29,7 @@ module LabClient
29
29
  def tree(project_id, query = {})
30
30
  project_id = format_id(project_id)
31
31
 
32
- client.request(:get, "projects/#{project_id}/repository/tree", nil, query)
32
+ client.request(:get, "projects/#{project_id}/repository/tree", RepositoryTree, query)
33
33
  end
34
34
  end
35
35
  end
@@ -0,0 +1,23 @@
1
+ # Top namespace
2
+ module LabClient
3
+ # Specifics
4
+ class Terraform < Common
5
+ doc 'Create' do
6
+ desc 'Creates a new State. [Project ID, StateName, LockID, Hash]'
7
+ example 'client.terraform.create(5, {})'
8
+ result '#<TerraformState serial: 4>'
9
+
10
+ markdown <<~DOC
11
+ Attributes for Hash
12
+
13
+ ID,Operation,Info,Who,Version,Created,Path
14
+ DOC
15
+ end
16
+
17
+ def create(project_id, name, xid, body)
18
+ project_id = format_id(project_id)
19
+
20
+ client.request(:post, "projects/#{project_id}/terraform/state/#{name}?ID=#{xid}", nil, body)
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,16 @@
1
+ # Top namespace
2
+ module LabClient
3
+ # Specifics
4
+ class Terraform < Common
5
+ doc 'Delete' do
6
+ desc 'Delete Terraform State. [Project ID, StateName]'
7
+ example 'client.terraform.delete(5, :state_name)'
8
+ end
9
+
10
+ def delete(project_id, name)
11
+ project_id = format_id(project_id)
12
+
13
+ client.request(:delete, "projects/#{project_id}/terraform/state/#{name}")
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,17 @@
1
+ # Top namespace
2
+ module LabClient
3
+ # Specifics
4
+ class Terraform < Common
5
+ doc 'Lock' do
6
+ desc 'Locks a new State. [Project ID, Hash]'
7
+ example 'client.wikis.Lock(5, content: "Lots of Stuff", title: "Title!")'
8
+ result '#<TerraformState slug: Title!>'
9
+ end
10
+
11
+ def lock(project_id, name, query)
12
+ project_id = format_id(project_id)
13
+
14
+ client.request(:post, "projects/#{project_id}/terraform/state/#{name}/lock", nil, query)
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,22 @@
1
+ # Top namespace
2
+ module LabClient
3
+ # Specifics
4
+ class Terraform < Common
5
+ doc 'Show' do
6
+ desc 'Collect Terraform State Information'
7
+ example 'client.terraform.show(264, "README.md")'
8
+
9
+ markdown <<~DOC
10
+ Ref will default to `main`
11
+
12
+ Kind can be left empty or set to either :raw or :blame
13
+ DOC
14
+ end
15
+
16
+ def show(project_id, name)
17
+ project_id = format_id(project_id)
18
+
19
+ client.request(:get, "projects/#{project_id}/terraform/state/#{name}", TerraformState)
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,11 @@
1
+ # Top namespace
2
+ module LabClient
3
+ # Inspect Helper
4
+ class TerraformState < Klass
5
+ include ClassHelpers
6
+
7
+ def inspect
8
+ "#<TerraformState serial: #{serial}>"
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,16 @@
1
+ # Top namespace
2
+ module LabClient
3
+ # Specifics
4
+ class Terraform < Common
5
+ doc 'Lock' do
6
+ desc 'Unlock State [Project ID, StateName Lock ID]'
7
+ example 'client.terraform.lock(5, :state_name, 123)'
8
+ end
9
+
10
+ def unlock(project_id, name, xid)
11
+ project_id = format_id(project_id)
12
+
13
+ client.request(:delete, "projects/#{project_id}/terraform/state/#{name}/lock?ID=#{xid}")
14
+ end
15
+ end
16
+ end
@@ -1,3 +1,9 @@
1
+ # Overall version
1
2
  module LabClient
2
- VERSION = '0.4.0'.freeze
3
+ VERSION = '0.6.0'.freeze
4
+
5
+ # Make it easy to print version
6
+ def self.version
7
+ VERSION
8
+ end
3
9
  end
data/lib/labclient.rb CHANGED
@@ -771,18 +771,13 @@ require 'labclient/pipelines/pipeline'
771
771
  # Repository
772
772
  require 'labclient/repository/alias'
773
773
  require 'labclient/repository/tree'
774
+ require 'labclient/repository/repository_tree'
774
775
  require 'labclient/repository/blob'
775
776
  require 'labclient/repository/archive'
776
777
  require 'labclient/repository/compare'
777
778
  require 'labclient/repository/contributors'
778
779
  require 'labclient/repository/merge_base'
779
780
 
780
- # Files
781
- require 'labclient/files/show'
782
- require 'labclient/files/create'
783
- require 'labclient/files/update'
784
- require 'labclient/files/delete'
785
-
786
781
  # Branches
787
782
  require 'labclient/branches/list'
788
783
  require 'labclient/branches/show'
@@ -865,6 +860,21 @@ require 'labclient/feature_flags/delete'
865
860
  require 'labclient/feature_flags/list'
866
861
  require 'labclient/feature_flags/feature_flag'
867
862
 
863
+ # Files
864
+ require 'labclient/files/file'
865
+ require 'labclient/files/show'
866
+ require 'labclient/files/create'
867
+ require 'labclient/files/update'
868
+ require 'labclient/files/delete'
869
+
870
+ # Terraform
871
+ require 'labclient/terraform/create'
872
+ require 'labclient/terraform/lock'
873
+ require 'labclient/terraform/unlock'
874
+ require 'labclient/terraform/delete'
875
+ require 'labclient/terraform/show'
876
+ require 'labclient/terraform/terraform_state'
877
+
868
878
  require 'labclient/resource_labels/resource_label'
869
879
 
870
880
  # Generators
@@ -876,7 +886,7 @@ require 'labclient/generator/generator'
876
886
  require 'labclient/generator/wizard'
877
887
 
878
888
  # Dynamically Require Templates (Simplify new template creation)
879
- Dir["#{File.dirname(__FILE__)}/labclient/generator/templates/*.rb"].sort.each { |file| require file }
889
+ Dir["#{File.dirname(__FILE__)}/labclient/generator/templates/*.rb"].each { |file| require file }
880
890
 
881
891
  # Load Client Files - I am Very Last!
882
892
  require 'labclient/client/setup'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: labclient
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Davin Walker
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-27 00:00:00.000000000 Z
11
+ date: 2022-02-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -224,16 +224,16 @@ dependencies:
224
224
  name: rubocop
225
225
  requirement: !ruby/object:Gem::Requirement
226
226
  requirements:
227
- - - "~>"
227
+ - - ">="
228
228
  - !ruby/object:Gem::Version
229
- version: '1.10'
229
+ version: '0'
230
230
  type: :development
231
231
  prerelease: false
232
232
  version_requirements: !ruby/object:Gem::Requirement
233
233
  requirements:
234
- - - "~>"
234
+ - - ">="
235
235
  - !ruby/object:Gem::Version
236
- version: '1.10'
236
+ version: '0'
237
237
  - !ruby/object:Gem::Dependency
238
238
  name: rubocop-minitest
239
239
  requirement: !ruby/object:Gem::Requirement
@@ -449,6 +449,7 @@ files:
449
449
  - lib/labclient/feature_flags/list.rb
450
450
  - lib/labclient/files/create.rb
451
451
  - lib/labclient/files/delete.rb
452
+ - lib/labclient/files/file.rb
452
453
  - lib/labclient/files/show.rb
453
454
  - lib/labclient/files/update.rb
454
455
  - lib/labclient/generator/generator.rb
@@ -848,6 +849,7 @@ files:
848
849
  - lib/labclient/repository/contributors.rb
849
850
  - lib/labclient/repository/merge_base.rb
850
851
  - lib/labclient/repository/raw_blob.rb
852
+ - lib/labclient/repository/repository_tree.rb
851
853
  - lib/labclient/repository/tree.rb
852
854
  - lib/labclient/resource_labels/epics/client.rb
853
855
  - lib/labclient/resource_labels/epics/list.rb
@@ -891,6 +893,12 @@ files:
891
893
  - lib/labclient/tags/show.rb
892
894
  - lib/labclient/tags/tag.rb
893
895
  - lib/labclient/tags/update.rb
896
+ - lib/labclient/terraform/create.rb
897
+ - lib/labclient/terraform/delete.rb
898
+ - lib/labclient/terraform/lock.rb
899
+ - lib/labclient/terraform/show.rb
900
+ - lib/labclient/terraform/terraform_state.rb
901
+ - lib/labclient/terraform/unlock.rb
894
902
  - lib/labclient/todos/list.rb
895
903
  - lib/labclient/todos/mark_all_done.rb
896
904
  - lib/labclient/todos/mark_done.rb
@@ -943,7 +951,8 @@ files:
943
951
  homepage: https://gitlab.com/labclient/labclient
944
952
  licenses:
945
953
  - MIT
946
- metadata: {}
954
+ metadata:
955
+ rubygems_mfa_required: 'true'
947
956
  post_install_message:
948
957
  rdoc_options: []
949
958
  require_paths:
@@ -959,7 +968,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
959
968
  - !ruby/object:Gem::Version
960
969
  version: '0'
961
970
  requirements: []
962
- rubygems_version: 3.0.3
971
+ rubygems_version: 3.2.32
963
972
  signing_key:
964
973
  specification_version: 4
965
974
  summary: Gitlab API Client