labclient 0.1.3 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/lib/labclient.rb +19 -3
  3. data/lib/labclient/access_levels.rb +24 -30
  4. data/lib/labclient/client.rb +54 -7
  5. data/lib/labclient/commits/project_helpers.rb +4 -0
  6. data/lib/labclient/commits/show.rb +11 -2
  7. data/lib/labclient/common.rb +15 -6
  8. data/lib/labclient/docs.rb +9 -5
  9. data/lib/labclient/files/update.rb +1 -1
  10. data/lib/labclient/generator/generator.rb +7 -7
  11. data/lib/labclient/generator/template_helper.rb +0 -1
  12. data/lib/labclient/generator/wizard.rb +6 -2
  13. data/lib/labclient/groups/clusters/add.rb +46 -0
  14. data/lib/labclient/groups/clusters/client.rb +17 -0
  15. data/lib/labclient/groups/clusters/delete.rb +36 -0
  16. data/lib/labclient/groups/clusters/group_cluster.rb +37 -0
  17. data/lib/labclient/groups/clusters/list.rb +28 -0
  18. data/lib/labclient/groups/clusters/show.rb +29 -0
  19. data/lib/labclient/groups/clusters/update.rb +44 -0
  20. data/lib/labclient/groups/group.rb +14 -1
  21. data/lib/labclient/http.rb +1 -1
  22. data/lib/labclient/issues/issue.rb +17 -0
  23. data/lib/labclient/issues/update.rb +20 -2
  24. data/lib/labclient/jobs/delete.rb +1 -1
  25. data/lib/labclient/jobs/keep.rb +1 -1
  26. data/lib/labclient/jobs/play.rb +1 -1
  27. data/lib/labclient/jobs/trace.rb +2 -2
  28. data/lib/labclient/klass.rb +6 -6
  29. data/lib/labclient/lab_struct.rb +4 -0
  30. data/lib/labclient/members/member.rb +1 -0
  31. data/lib/labclient/notes/epics/create.rb +8 -0
  32. data/lib/labclient/notes/issues/create.rb +8 -0
  33. data/lib/labclient/notes/merge_requests/create.rb +8 -0
  34. data/lib/labclient/overview.rb +104 -12
  35. data/lib/labclient/paginated_response.rb +2 -0
  36. data/lib/labclient/projects/clusters/add.rb +1 -1
  37. data/lib/labclient/projects/clusters/delete.rb +5 -6
  38. data/lib/labclient/projects/clusters/show.rb +2 -2
  39. data/lib/labclient/projects/clusters/update.rb +13 -5
  40. data/lib/labclient/projects/environments/project_environment.rb +10 -0
  41. data/lib/labclient/projects/forks/fork.rb +0 -2
  42. data/lib/labclient/projects/methods.rb +23 -0
  43. data/lib/labclient/projects/reference.rb +7 -0
  44. data/lib/labclient/projects/stars/starrers.rb +0 -2
  45. data/lib/labclient/protected_branches/protect.rb +6 -5
  46. data/lib/labclient/protected_environments/list.rb +29 -0
  47. data/lib/labclient/protected_environments/protect.rb +53 -0
  48. data/lib/labclient/protected_environments/protected_environment.rb +22 -0
  49. data/lib/labclient/protected_environments/show.rb +24 -0
  50. data/lib/labclient/protected_environments/unprotect.rb +31 -0
  51. data/lib/labclient/users/membership.rb +62 -0
  52. data/lib/labclient/users/memberships.rb +8 -3
  53. data/lib/labclient/users/user.rb +1 -1
  54. data/lib/labclient/version.rb +1 -1
  55. metadata +19 -6
@@ -11,6 +11,14 @@ module LabClient
11
11
  DOC
12
12
  end
13
13
 
14
+ doc 'Merge Request' do
15
+ desc 'Via Merge Request'
16
+ example <<~DOC
17
+ merge_request = client.merge_requests.show(16, 2)
18
+ merge_request.note_create(body: 'There!')
19
+ DOC
20
+ end
21
+
14
22
  doc 'Merge Requests' do
15
23
  markdown <<~DOC
16
24
  | Attribute | Type | Required | Description |
@@ -7,11 +7,15 @@ module LabClient
7
7
 
8
8
  doc 'Overview' do
9
9
  title 'About'
10
- desc <<~DOC
10
+ markdown <<~DOC
11
11
  Labclient is another Gitlab API Gem. A focus on ease of use and helpers and snippets.
12
12
 
13
13
  <a href="https://github.com/NARKOZ/gitlab">Gitlab</a> is an excellent gem, and is nearly complete in its implementation. While this is still a work in progress and you are looking for general use you should use it.
14
+
15
+ Here's a quick whirlwind example of some of the features:
14
16
  DOC
17
+
18
+ demo '350689'
15
19
  end
16
20
 
17
21
  doc 'Overview' do
@@ -44,6 +48,41 @@ module LabClient
44
48
  DOC
45
49
  end
46
50
 
51
+ doc 'Authentication' do
52
+ title 'Named Profiles'
53
+ markdown 'Within the `~/.gitlab-labclient` you can also specify profile names'
54
+ example <<~DOC
55
+ {
56
+ "prod": {
57
+ "url": "https://labclient-prod",
58
+ "token": "super_secure",
59
+ "paginate": false
60
+ },
61
+ "dev": {
62
+ "url": "https://labclient-dev",
63
+ "token": "super_secure",
64
+ "ssl_verify": false,
65
+ "paginate": true
66
+ }
67
+ }
68
+ DOC
69
+ end
70
+
71
+ doc 'Authentication' do
72
+ desc 'Manually select a named profile'
73
+ example <<~DOC
74
+ client = LabClient::Client.new(profile: 'prod')
75
+ DOC
76
+ end
77
+
78
+ doc 'Authentication' do
79
+ desc 'Automatically select via ENV Variables'
80
+ example <<~DOC
81
+ ENV['LABCLIENT_PROFILE'] = 'dev'
82
+ client = LabClient::Client.new
83
+ DOC
84
+ end
85
+
47
86
  doc 'Authentication' do
48
87
  title 'Environment Variables'
49
88
  desc 'If not provided, and credentials file does not exist will attempt to use ENV variables'
@@ -167,16 +206,21 @@ module LabClient
167
206
  doc 'Other' do
168
207
  title 'Common Helpers'
169
208
  markdown <<~DOC
170
- The main api namespaces have a `help` and an `api_methods` methods. These will print out available methods and examples
209
+ The main api namespaces have a `help` and an `api_methods` methods. These will print out available methods and examples.
210
+
211
+ These each accept a filter argument
171
212
  DOC
172
213
 
173
214
  result <<~DOC
215
+ # General Help / Available Methods
174
216
  client.help
175
217
  client.api_methods
176
218
 
219
+ # Show Project specific Methods
177
220
  client.projects.api_methods
178
221
  # => [:show, :list, :create]
179
222
 
223
+ # Show Users specific help
180
224
  client.users.help
181
225
  Users
182
226
  Available Methods
@@ -191,6 +235,26 @@ module LabClient
191
235
  User
192
236
  - client.users.show(5)
193
237
  - client.users.show(5)
238
+
239
+ # General Help Filter
240
+ client.help :protect
241
+ Available Methods
242
+ - protected_branches protected_environments protected_tags
243
+
244
+ # Projects Help Filter
245
+ client.projects.help :cluster
246
+ Projects
247
+ Available Methods
248
+ - clusters
249
+
250
+ # Project Object Help
251
+ project = client.projects.show(16)
252
+ project.help
253
+
254
+ # Project Object Help Filter
255
+ project.help :member
256
+
257
+
194
258
  DOC
195
259
  end
196
260
 
@@ -209,6 +273,9 @@ module LabClient
209
273
  # Awesome Print all details
210
274
  project.valid_group_project_levels
211
275
  # => [:guest, :reporter, :developer, :maintainer, :owner]
276
+
277
+ # Select Data from objects with `slice`
278
+ project.slice(:readme_url, :owner)
212
279
  DOC
213
280
  end
214
281
 
@@ -253,17 +320,18 @@ module LabClient
253
320
  end
254
321
 
255
322
  doc 'Other' do
256
- title 'Docker'
257
- desc 'A docker image is created from master and can be used to execute snippets or load a quick pry session'
323
+ title 'Quiet'
324
+ desc 'Error messages by default are printed to STDOUT. This can be supressed via the :quiet setting'
258
325
 
259
- example 'docker run -it registry.gitlab.com/labclient/labclient'
260
-
261
- result <<~DOC
262
- # Run Container
263
- docker run -it -e LABCLIENT_URL="https://labclient" -e LABCLIENT_TOKEN="token" registry.gitlab.com/labclient/labclient
264
-
265
- client = LabClient::Client.new
266
- client.users.list
326
+ example <<~DOC
327
+ client = LabClient::Client.new(
328
+ url: 'https://gitlab.labclient',
329
+ token: 'gitlab api token',
330
+ quiet: true
331
+ )
332
+
333
+ # Or after the init
334
+ client.settings[:quiet] = true
267
335
  DOC
268
336
  end
269
337
 
@@ -291,6 +359,30 @@ module LabClient
291
359
  - [API Authentication](https://docs.gitlab.com/ee/api/README.html#authentication)
292
360
  DOC
293
361
  end
362
+
363
+ doc 'Docker' do
364
+ desc 'A docker image is created from master and can be used to execute snippets or load a quick pry session'
365
+
366
+ example 'docker run -it registry.gitlab.com/labclient/labclient'
367
+
368
+ result <<~DOC
369
+ # Run Container
370
+ docker run -it registry.gitlab.com/labclient/labclient
371
+ # Without settings configured, initial will prompt for credentials
372
+
373
+ client.users.list
374
+ DOC
375
+ end
376
+
377
+ doc 'Docker' do
378
+ desc 'The docker container configured and execute code snippets'
379
+
380
+ example 'docker run -it registry.gitlab.com/labclient/labclient'
381
+
382
+ result <<~DOC
383
+ docker run -it -e LABCLIENT_URL="https://labclient" -e LABCLIENT_TOKEN="secure_token" labclient 'puts client.users.list.count'
384
+ DOC
385
+ end
294
386
  end
295
387
  end
296
388
  # rubocop:enable Metrics/ClassLength
@@ -40,7 +40,9 @@ module LabClient
40
40
  DOC
41
41
  end
42
42
 
43
+ # rubocop:disable Lint/MissingSuper
43
44
  def respond_to_missing?(method_name, include_private = false); end
45
+ # rubocop:enable Lint/MissingSuper
44
46
 
45
47
  def each_page(&block)
46
48
  yield @array # This will eventually be the whole list
@@ -27,7 +27,7 @@ module LabClient
27
27
  | --------- | ---- | -------- | ----------- |
28
28
  | name | string | yes | The name of the cluster |
29
29
  | domain | string | no | The base domain of the cluster |
30
- | management_project_id | integer | no | The ID of the [management project](../user/clusters/management_project.md) for the cluster |
30
+ | management_project_id | integer | no | The ID of the management project for the cluster |
31
31
  | enabled | boolean | no | Determines if cluster is active or not, defaults to true |
32
32
  | managed | boolean | no | Determines if GitLab will manage namespaces and service accounts for this cluster, defaults to true |
33
33
  | platform_kubernetes_attributes[api_url] | string | yes | The URL to access the Kubernetes API |
@@ -11,11 +11,10 @@ module LabClient
11
11
 
12
12
  doc 'Delete' do
13
13
  markdown <<~DOC
14
- | Attribute | Type | Required | Description |
15
- | ---------- | ----- | --------- | ------------ |
16
- | url | String | yes | The URL of the remote repository to be clustered. |
17
- | enabled | Boolean | no | Determines if the cluster is enabled. |
18
- | only_protected_branches| Boolean | no | Determines if only protected branches are clustered. |
14
+ | Attribute | Type | Required | Description |
15
+ | --------- | ---- | -------- | ----------- |
16
+ | `id` | integer | yes | The ID of the project owned by the authenticated user |
17
+ | `cluster_id` | integer | yes | The ID of the cluster |
19
18
  DOC
20
19
  end
21
20
 
@@ -23,7 +22,7 @@ module LabClient
23
22
  desc 'Via ProjectCluster [Params]'
24
23
  example <<~DOC
25
24
  cluster = client.projects.clusters.list(310).first
26
- cluster.update(enabled: false)
25
+ cluster.delete
27
26
  DOC
28
27
  end
29
28
 
@@ -12,10 +12,10 @@ module LabClient
12
12
  end
13
13
 
14
14
  doc 'Show' do
15
- desc 'Via Project'
15
+ desc 'Via Project [Cluster ID]'
16
16
  example <<~DOC
17
17
  project = client.projects.show(16)
18
- project.clusters
18
+ project.cluster(cluster_id)
19
19
  DOC
20
20
  end
21
21
 
@@ -11,11 +11,19 @@ module LabClient
11
11
 
12
12
  doc 'Update' do
13
13
  markdown <<~DOC
14
- | Attribute | Type | Required | Description |
15
- | ---------- | ----- | --------- | ------------ |
16
- | url | String | yes | The URL of the remote repository to be clustered. |
17
- | enabled | Boolean | no | Determines if the cluster is enabled. |
18
- | only_protected_branches| Boolean | no | Determines if only protected branches are clustered. |
14
+ | Attribute | Type | Required | Description |
15
+ | --------- | ---- | -------- | ----------- |
16
+ | name | string | yes | The name of the cluster |
17
+ | domain | string | no | The base domain of the cluster |
18
+ | management_project_id | integer | no | The ID of the management project for the cluster |
19
+ | platform_kubernetes_attributes[api_url] | string | yes | The URL to access the Kubernetes API |
20
+ | platform_kubernetes_attributes[token] | string | yes | The token to authenticate against Kubernetes |
21
+ | platform_kubernetes_attributes[ca_cert] | string | no | TLS certificate. Required if API is using a self-signed TLS certificate. |
22
+ | platform_kubernetes_attributes[namespace] | string | no | The unique namespace related to the project |
23
+ | environment_scope | string | no | The associated environment to the cluster. Defaults to * **(PREMIUM)** |
24
+
25
+ `name`, `api_url`, `ca_cert` and `token` can only be updated if the cluster was added through the
26
+ “Add existing Kubernetes cluster” option or through the “Add existing cluster to project” endpoint.
19
27
  DOC
20
28
  end
21
29
 
@@ -24,6 +24,14 @@ module LabClient
24
24
  client.projects.environments.delete(project_id, id)
25
25
  end
26
26
 
27
+ def show
28
+ project_id = collect_project_id
29
+
30
+ update_self client.projects.environments.show(project_id, id)
31
+ end
32
+
33
+ alias reload show
34
+
27
35
  def stop
28
36
  project_id = collect_project_id
29
37
 
@@ -35,6 +43,8 @@ module LabClient
35
43
  help do
36
44
  subtitle 'ProjectEnvironment'
37
45
  option 'project', 'Show Project'
46
+ option 'show', 'Collect/reload environment'
47
+ option 'reload', 'Collect/reload environment'
38
48
  option 'update', 'Update this environment [Hash]'
39
49
  option 'delete', 'Delete this environment'
40
50
  option 'stop', 'Stop this environment'
@@ -2,8 +2,6 @@
2
2
  module LabClient
3
3
  # Specifics
4
4
  class Projects < Common
5
- @group_name = 'Project Forks'
6
-
7
5
  doc 'Create' do
8
6
  desc 'Forks a project into the user namespace of the authenticated user or the one provided.'
9
7
  example 'client.projects.fork(299)'
@@ -476,6 +476,8 @@ module LabClient
476
476
  client.projects.environments.show(id, environment_id)
477
477
  end
478
478
 
479
+ alias environment environment_show
480
+
479
481
  def environment_create(query)
480
482
  client.projects.environments.create(id, query)
481
483
  end
@@ -492,6 +494,23 @@ module LabClient
492
494
  client.projects.environments.stop(id, environment_id)
493
495
  end
494
496
 
497
+ # Protected Environments
498
+ def protected_environments
499
+ client.protected_environments.list(id)
500
+ end
501
+
502
+ def protected_environment(environment_id)
503
+ client.protected_environments.show(id, environment_id)
504
+ end
505
+
506
+ def protect_environment(query)
507
+ client.protected_environments.protect(id, query)
508
+ end
509
+
510
+ def unprotect_environment(environment_id)
511
+ client.protected_environments.unprotect(id, environment_id)
512
+ end
513
+
495
514
  # Project Triggers
496
515
  def triggers
497
516
  client.projects.triggers.list(id)
@@ -690,6 +709,10 @@ module LabClient
690
709
  client.projects.clusters.list(id)
691
710
  end
692
711
 
712
+ def cluster(cluster_id)
713
+ client.projects.clusters.show(id, cluster_id)
714
+ end
715
+
693
716
  # Reload
694
717
  def reload
695
718
  update_self client.projects.show(id)
@@ -71,6 +71,12 @@ module LabClient
71
71
  option 'environment_update', 'Update project environment [Environment ID, Hash]'
72
72
  option 'environment_stop', 'Stop project environment [Environment ID]'
73
73
 
74
+ # Protected Environments
75
+ option 'protected_environments', 'List protected environments [String]'
76
+ option 'protected_environment', 'Show single protected environment [String]'
77
+ option 'protect_environment', 'Protect a single environment [Hash]'
78
+ option 'unprotect_environment', 'Unprotect environment [Environment]'
79
+
74
80
  # Deployments
75
81
  option 'deployments', "List this project's deployments"
76
82
  option 'deployment_create', 'Create project deployment [Hash]'
@@ -133,6 +139,7 @@ module LabClient
133
139
 
134
140
  # Commits
135
141
  option 'commits', 'List Commits [Hash]'
142
+ option 'commit', 'Show Commit [String/Commit Sha]'
136
143
  option 'commit_create', 'Create new commit [Hash]'
137
144
  option 'commit_refs', 'Get all references (from branches or tags) a commit is pushed to. [Commit ID, Scope]'
138
145
  option 'commit_cherry_pick', 'Cherry picks a commit to a target branch. [Commit ID, Branch]'
@@ -2,8 +2,6 @@
2
2
  module LabClient
3
3
  # Specifics
4
4
  class Projects < Common
5
- @group_name = 'Project Stars'
6
-
7
5
  doc 'Starrers' do
8
6
  desc 'List the users who starred the specified project. [user id]'
9
7
  example 'client.projects.starrers(5)'
@@ -19,11 +19,12 @@ module LabClient
19
19
  | allowed_to_unprotect | array | no | **(STARTER)** Array of access levels allowed to unprotect, with each described by a hash |
20
20
  | code_owner_approval_required | boolean | no | **(PREMIUM)** Prevent pushes to this branch if it matches an item in the CODEOWNERS file (defaults: false) |
21
21
 
22
- *Valid access levels*
23
- 0 => No access, :none
24
- 30 => Developer access, :developer
25
- 40 => Maintainer access, :maintainer
26
- 60 => Admin access, :admin
22
+ **Valid access levels**
23
+
24
+ - 0, :none => No access
25
+ - 30, :developer => Developer access
26
+ - 40, :maintainer => Maintainer access
27
+ - 60, :admin => Admin access
27
28
 
28
29
  DOC
29
30
  end
@@ -0,0 +1,29 @@
1
+ # Top namespace
2
+ module LabClient
3
+ # Specifics
4
+ class ProtectedEnvironments < Common
5
+ doc 'List' do
6
+ desc 'Gets a list of protected environmentes from a project. [Project ID, String]'
7
+ example 'client.protected_environments.list(36)'
8
+ result '[#<ProtectedEnvironment name: prod>]'
9
+
10
+ markdown <<~DOC
11
+ Search: You can use ^term and term$ to find environmentes that begin and end with term respectively.
12
+ DOC
13
+ end
14
+
15
+ doc 'List' do
16
+ desc 'via Project'
17
+ example <<~DOC
18
+ project = client.projects.show(264)
19
+ project.protected_environments
20
+ DOC
21
+ end
22
+
23
+ def list(project_id)
24
+ project_id = format_id(project_id)
25
+
26
+ client.request(:get, "projects/#{project_id}/protected_environments", ProtectedEnvironment)
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,53 @@
1
+ # Top namespace
2
+ module LabClient
3
+ # Specifics
4
+ class ProtectedEnvironments < Common
5
+ doc 'Protect' do
6
+ desc 'Protects a single environment [Project ID, Hash]'
7
+ example <<~DOC
8
+ client.protected_environments.protect(36,
9
+ name: :prod,
10
+ deploy_access_levels: [
11
+ { access_level: :developer }
12
+ ]
13
+ )
14
+ DOC
15
+ result '#<ProtectedEnvironment name: prod>'
16
+
17
+ markdown <<~DOC
18
+ | Attribute | Type | Required | Description |
19
+ | -------------------- | -------------- | -------- | ---------------------------------------------------------------------------------------------------------------- |
20
+ | name | string | yes | The name of the environment. |
21
+ | deploy_access_levels | array | yes | Array of access levels allowed to deploy, with each described by a hash. |
22
+
23
+ Elements in the deploy_access_levels array should take the form {user_id: integer}, {group_id: integer} or {access_level: integer}. Each user must have access to the project and each group must have this project shared.
24
+
25
+ **Valid access levels**
26
+
27
+ | Access Level | Values |
28
+ | ------------ | --------------- |
29
+ | Developer | 30, :developer |
30
+ | Maintainer | 40, :maintainer |
31
+ | Admin | 60, :admin |
32
+
33
+ DOC
34
+ end
35
+
36
+ doc 'Protect' do
37
+ desc 'via Project'
38
+ example <<~DOC
39
+ project = client.projects.show(264)
40
+ project.protect_environment(name: :other, push_access_level: :admin)
41
+ DOC
42
+ end
43
+
44
+ def protect(project_id, query)
45
+ query[:deploy_access_levels].each do |access_level|
46
+ protected_query_access_level(access_level, :access_level)
47
+ end
48
+
49
+ project_id = format_id(project_id)
50
+ client.request(:post, "projects/#{project_id}/protected_environments", ProtectedEnvironment, query)
51
+ end
52
+ end
53
+ end