lex-gitlab 0.1.1
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 +7 -0
- data/.github/workflows/ci.yml +16 -0
- data/.gitignore +12 -0
- data/.rspec +3 -0
- data/.rubocop.yml +53 -0
- data/CHANGELOG.md +11 -0
- data/Gemfile +12 -0
- data/README.md +57 -0
- data/lex-gitlab.gemspec +30 -0
- data/lib/legion/extensions/gitlab/client.rb +29 -0
- data/lib/legion/extensions/gitlab/helpers/client.rb +22 -0
- data/lib/legion/extensions/gitlab/runners/merge_requests.rb +47 -0
- data/lib/legion/extensions/gitlab/runners/pipelines.rb +39 -0
- data/lib/legion/extensions/gitlab/runners/projects.rb +33 -0
- data/lib/legion/extensions/gitlab/version.rb +9 -0
- data/lib/legion/extensions/gitlab.rb +16 -0
- metadata +75 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: ed70410c061701650a3356ff8ff3058e5ab01e9bb338ce392703631b0948cfdc
|
|
4
|
+
data.tar.gz: e21671d0ad5034394e43a35738af8c56ae6e5b624afb8d7e65b84834f0a4b93d
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: bd1e7c317bd6683d8d4e10e47d86997bff972208b876b384c125d2e947cfb8c4a82ba3352eb825bdab3b03486d465e090a3d3d2dfb302fb64df90c9935511e94
|
|
7
|
+
data.tar.gz: 2e5c745171ead1f65bb1d4fa090a8cc1828f6dc79bbe694cd9ac066d84745673dff007ec6fa8b8f3d8ee3ce9e43394af4430f1ef42ee33cd0049fd74410366a4
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
on:
|
|
3
|
+
push:
|
|
4
|
+
branches: [origin]
|
|
5
|
+
pull_request:
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
ci:
|
|
9
|
+
uses: LegionIO/.github/.github/workflows/ci.yml@main
|
|
10
|
+
|
|
11
|
+
release:
|
|
12
|
+
needs: ci
|
|
13
|
+
if: github.event_name == 'push' && github.ref == 'refs/heads/origin'
|
|
14
|
+
uses: LegionIO/.github/.github/workflows/release.yml@main
|
|
15
|
+
secrets:
|
|
16
|
+
rubygems-api-key: ${{ secrets.RUBYGEMS_API_KEY }}
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.rubocop.yml
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
AllCops:
|
|
2
|
+
TargetRubyVersion: 3.4
|
|
3
|
+
NewCops: enable
|
|
4
|
+
SuggestExtensions: false
|
|
5
|
+
|
|
6
|
+
Layout/LineLength:
|
|
7
|
+
Max: 160
|
|
8
|
+
|
|
9
|
+
Layout/SpaceAroundEqualsInParameterDefault:
|
|
10
|
+
EnforcedStyle: space
|
|
11
|
+
|
|
12
|
+
Layout/HashAlignment:
|
|
13
|
+
EnforcedHashRocketStyle: table
|
|
14
|
+
EnforcedColonStyle: table
|
|
15
|
+
|
|
16
|
+
Metrics/MethodLength:
|
|
17
|
+
Max: 50
|
|
18
|
+
|
|
19
|
+
Metrics/ClassLength:
|
|
20
|
+
Max: 1500
|
|
21
|
+
|
|
22
|
+
Metrics/ModuleLength:
|
|
23
|
+
Max: 1500
|
|
24
|
+
|
|
25
|
+
Metrics/BlockLength:
|
|
26
|
+
Max: 40
|
|
27
|
+
Exclude:
|
|
28
|
+
- 'spec/**/*'
|
|
29
|
+
|
|
30
|
+
Metrics/ParameterLists:
|
|
31
|
+
Max: 8
|
|
32
|
+
|
|
33
|
+
Metrics/AbcSize:
|
|
34
|
+
Max: 60
|
|
35
|
+
|
|
36
|
+
Metrics/CyclomaticComplexity:
|
|
37
|
+
Max: 15
|
|
38
|
+
|
|
39
|
+
Metrics/PerceivedComplexity:
|
|
40
|
+
Max: 17
|
|
41
|
+
|
|
42
|
+
Style/Documentation:
|
|
43
|
+
Enabled: false
|
|
44
|
+
|
|
45
|
+
Style/SymbolArray:
|
|
46
|
+
Enabled: true
|
|
47
|
+
|
|
48
|
+
Style/FrozenStringLiteralComment:
|
|
49
|
+
Enabled: true
|
|
50
|
+
EnforcedStyle: always
|
|
51
|
+
|
|
52
|
+
Naming/FileName:
|
|
53
|
+
Enabled: false
|
data/CHANGELOG.md
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [0.1.0] - 2026-03-21
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
- Initial release
|
|
7
|
+
- `Helpers::Client` Faraday connection builder with `PRIVATE-TOKEN` auth header
|
|
8
|
+
- `Runners::Projects` with `list_projects`, `get_project`, `create_project`
|
|
9
|
+
- `Runners::MergeRequests` with `list_merge_requests`, `get_merge_request`, `create_merge_request`, `merge_merge_request`
|
|
10
|
+
- `Runners::Pipelines` with `list_pipelines`, `get_pipeline`, `create_pipeline`, `retry_pipeline`
|
|
11
|
+
- Standalone `Client` class including all runner modules
|
data/Gemfile
ADDED
data/README.md
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# lex-gitlab
|
|
2
|
+
|
|
3
|
+
LegionIO extension for GitLab. Provides runners for interacting with the GitLab REST API covering projects, merge requests, and pipelines.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
Add to your Gemfile:
|
|
8
|
+
|
|
9
|
+
```ruby
|
|
10
|
+
gem 'lex-gitlab'
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Standalone Client Usage
|
|
14
|
+
|
|
15
|
+
```ruby
|
|
16
|
+
require 'legion/extensions/gitlab'
|
|
17
|
+
|
|
18
|
+
client = Legion::Extensions::Gitlab::Client.new(
|
|
19
|
+
url: 'https://gitlab.com',
|
|
20
|
+
token: 'your-private-token'
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
# Projects
|
|
24
|
+
client.list_projects
|
|
25
|
+
client.get_project(project_id: 42)
|
|
26
|
+
client.create_project(name: 'my-project', visibility: 'private')
|
|
27
|
+
|
|
28
|
+
# Merge Requests
|
|
29
|
+
client.list_merge_requests(project_id: 42)
|
|
30
|
+
client.get_merge_request(project_id: 42, merge_request_iid: 1)
|
|
31
|
+
client.create_merge_request(
|
|
32
|
+
project_id: 42,
|
|
33
|
+
title: 'Add new feature',
|
|
34
|
+
source_branch: 'feature/my-feature',
|
|
35
|
+
target_branch: 'main'
|
|
36
|
+
)
|
|
37
|
+
client.merge_merge_request(project_id: 42, merge_request_iid: 1)
|
|
38
|
+
|
|
39
|
+
# Pipelines
|
|
40
|
+
client.list_pipelines(project_id: 42)
|
|
41
|
+
client.get_pipeline(project_id: 42, pipeline_id: 100)
|
|
42
|
+
client.create_pipeline(project_id: 42, ref: 'main')
|
|
43
|
+
client.retry_pipeline(project_id: 42, pipeline_id: 100)
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Self-hosted GitLab
|
|
47
|
+
|
|
48
|
+
```ruby
|
|
49
|
+
client = Legion::Extensions::Gitlab::Client.new(
|
|
50
|
+
url: 'https://gitlab.example.com',
|
|
51
|
+
token: 'your-private-token'
|
|
52
|
+
)
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## License
|
|
56
|
+
|
|
57
|
+
MIT
|
data/lex-gitlab.gemspec
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'lib/legion/extensions/gitlab/version'
|
|
4
|
+
|
|
5
|
+
Gem::Specification.new do |spec|
|
|
6
|
+
spec.name = 'lex-gitlab'
|
|
7
|
+
spec.version = Legion::Extensions::Gitlab::VERSION
|
|
8
|
+
spec.authors = ['Esity']
|
|
9
|
+
spec.email = ['matthewdiverson@gmail.com']
|
|
10
|
+
|
|
11
|
+
spec.summary = 'LEX::Gitlab'
|
|
12
|
+
spec.description = 'Connects LegionIO to GitLab via the REST API'
|
|
13
|
+
spec.homepage = 'https://github.com/LegionIO/lex-gitlab'
|
|
14
|
+
spec.license = 'MIT'
|
|
15
|
+
spec.required_ruby_version = '>= 3.4'
|
|
16
|
+
|
|
17
|
+
spec.metadata['homepage_uri'] = spec.homepage
|
|
18
|
+
spec.metadata['source_code_uri'] = 'https://github.com/LegionIO/lex-gitlab'
|
|
19
|
+
spec.metadata['documentation_uri'] = 'https://github.com/LegionIO/lex-gitlab'
|
|
20
|
+
spec.metadata['changelog_uri'] = 'https://github.com/LegionIO/lex-gitlab'
|
|
21
|
+
spec.metadata['bug_tracker_uri'] = 'https://github.com/LegionIO/lex-gitlab/issues'
|
|
22
|
+
spec.metadata['rubygems_mfa_required'] = 'true'
|
|
23
|
+
|
|
24
|
+
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
|
25
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
|
26
|
+
end
|
|
27
|
+
spec.require_paths = ['lib']
|
|
28
|
+
|
|
29
|
+
spec.add_dependency 'faraday', '~> 2.0'
|
|
30
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'helpers/client'
|
|
4
|
+
require_relative 'runners/projects'
|
|
5
|
+
require_relative 'runners/merge_requests'
|
|
6
|
+
require_relative 'runners/pipelines'
|
|
7
|
+
|
|
8
|
+
module Legion
|
|
9
|
+
module Extensions
|
|
10
|
+
module Gitlab
|
|
11
|
+
class Client
|
|
12
|
+
include Helpers::Client
|
|
13
|
+
include Runners::Projects
|
|
14
|
+
include Runners::MergeRequests
|
|
15
|
+
include Runners::Pipelines
|
|
16
|
+
|
|
17
|
+
attr_reader :opts
|
|
18
|
+
|
|
19
|
+
def initialize(url: 'https://gitlab.com', token: nil, **extra)
|
|
20
|
+
@opts = { url: url, token: token, **extra }.compact
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def connection(**override)
|
|
24
|
+
super(**@opts, **override)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'faraday'
|
|
4
|
+
|
|
5
|
+
module Legion
|
|
6
|
+
module Extensions
|
|
7
|
+
module Gitlab
|
|
8
|
+
module Helpers
|
|
9
|
+
module Client
|
|
10
|
+
def connection(url: 'https://gitlab.com', token: nil, **)
|
|
11
|
+
Faraday.new(url: url) do |conn|
|
|
12
|
+
conn.request :json
|
|
13
|
+
conn.response :json, content_type: /\bjson$/
|
|
14
|
+
conn.headers['PRIVATE-TOKEN'] = token if token
|
|
15
|
+
conn.adapter Faraday.default_adapter
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'legion/extensions/gitlab/helpers/client'
|
|
4
|
+
|
|
5
|
+
module Legion
|
|
6
|
+
module Extensions
|
|
7
|
+
module Gitlab
|
|
8
|
+
module Runners
|
|
9
|
+
module MergeRequests
|
|
10
|
+
include Legion::Extensions::Gitlab::Helpers::Client
|
|
11
|
+
|
|
12
|
+
def list_merge_requests(project_id:, state: 'opened', per_page: 20, page: 1, **)
|
|
13
|
+
params = { state: state, per_page: per_page, page: page }
|
|
14
|
+
response = connection(**).get("/api/v4/projects/#{project_id}/merge_requests", params)
|
|
15
|
+
{ result: response.body }
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def get_merge_request(project_id:, merge_request_iid:, **)
|
|
19
|
+
response = connection(**).get("/api/v4/projects/#{project_id}/merge_requests/#{merge_request_iid}")
|
|
20
|
+
{ result: response.body }
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def create_merge_request(project_id:, title:, source_branch:, target_branch:, description: nil, **)
|
|
24
|
+
payload = {
|
|
25
|
+
title: title,
|
|
26
|
+
source_branch: source_branch,
|
|
27
|
+
target_branch: target_branch,
|
|
28
|
+
description: description
|
|
29
|
+
}.compact
|
|
30
|
+
response = connection(**).post("/api/v4/projects/#{project_id}/merge_requests", payload)
|
|
31
|
+
{ result: response.body }
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def merge_merge_request(project_id:, merge_request_iid:, merge_commit_message: nil, **)
|
|
35
|
+
payload = merge_commit_message ? { merge_commit_message: merge_commit_message } : {}
|
|
36
|
+
response = connection(**).put(
|
|
37
|
+
"/api/v4/projects/#{project_id}/merge_requests/#{merge_request_iid}/merge", payload
|
|
38
|
+
)
|
|
39
|
+
{ result: response.body }
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
include Legion::Extensions::Helpers::Lex if defined?(Legion::Extensions::Helpers::Lex)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'legion/extensions/gitlab/helpers/client'
|
|
4
|
+
|
|
5
|
+
module Legion
|
|
6
|
+
module Extensions
|
|
7
|
+
module Gitlab
|
|
8
|
+
module Runners
|
|
9
|
+
module Pipelines
|
|
10
|
+
include Legion::Extensions::Gitlab::Helpers::Client
|
|
11
|
+
|
|
12
|
+
def list_pipelines(project_id:, per_page: 20, page: 1, **)
|
|
13
|
+
params = { per_page: per_page, page: page }
|
|
14
|
+
response = connection(**).get("/api/v4/projects/#{project_id}/pipelines", params)
|
|
15
|
+
{ result: response.body }
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def get_pipeline(project_id:, pipeline_id:, **)
|
|
19
|
+
response = connection(**).get("/api/v4/projects/#{project_id}/pipelines/#{pipeline_id}")
|
|
20
|
+
{ result: response.body }
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def create_pipeline(project_id:, ref:, variables: [], **)
|
|
24
|
+
payload = { ref: ref, variables: variables }
|
|
25
|
+
response = connection(**).post("/api/v4/projects/#{project_id}/pipeline", payload)
|
|
26
|
+
{ result: response.body }
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def retry_pipeline(project_id:, pipeline_id:, **)
|
|
30
|
+
response = connection(**).post("/api/v4/projects/#{project_id}/pipelines/#{pipeline_id}/retry", {})
|
|
31
|
+
{ result: response.body }
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
include Legion::Extensions::Helpers::Lex if defined?(Legion::Extensions::Helpers::Lex)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'legion/extensions/gitlab/helpers/client'
|
|
4
|
+
|
|
5
|
+
module Legion
|
|
6
|
+
module Extensions
|
|
7
|
+
module Gitlab
|
|
8
|
+
module Runners
|
|
9
|
+
module Projects
|
|
10
|
+
include Legion::Extensions::Gitlab::Helpers::Client
|
|
11
|
+
|
|
12
|
+
def list_projects(per_page: 20, page: 1, **)
|
|
13
|
+
response = connection(**).get('/api/v4/projects', { per_page: per_page, page: page })
|
|
14
|
+
{ result: response.body }
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def get_project(project_id:, **)
|
|
18
|
+
response = connection(**).get("/api/v4/projects/#{project_id}")
|
|
19
|
+
{ result: response.body }
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def create_project(name:, description: nil, visibility: 'private', **)
|
|
23
|
+
payload = { name: name, description: description, visibility: visibility }.compact
|
|
24
|
+
response = connection(**).post('/api/v4/projects', payload)
|
|
25
|
+
{ result: response.body }
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
include Legion::Extensions::Helpers::Lex if defined?(Legion::Extensions::Helpers::Lex)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'legion/extensions/gitlab/version'
|
|
4
|
+
require 'legion/extensions/gitlab/helpers/client'
|
|
5
|
+
require 'legion/extensions/gitlab/runners/projects'
|
|
6
|
+
require 'legion/extensions/gitlab/runners/merge_requests'
|
|
7
|
+
require 'legion/extensions/gitlab/runners/pipelines'
|
|
8
|
+
require 'legion/extensions/gitlab/client'
|
|
9
|
+
|
|
10
|
+
module Legion
|
|
11
|
+
module Extensions
|
|
12
|
+
module Gitlab
|
|
13
|
+
extend Legion::Extensions::Core if Legion::Extensions.const_defined? :Core
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: lex-gitlab
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.1
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Esity
|
|
8
|
+
bindir: bin
|
|
9
|
+
cert_chain: []
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
+
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: faraday
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - "~>"
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: '2.0'
|
|
19
|
+
type: :runtime
|
|
20
|
+
prerelease: false
|
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
requirements:
|
|
23
|
+
- - "~>"
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: '2.0'
|
|
26
|
+
description: Connects LegionIO to GitLab via the REST API
|
|
27
|
+
email:
|
|
28
|
+
- matthewdiverson@gmail.com
|
|
29
|
+
executables: []
|
|
30
|
+
extensions: []
|
|
31
|
+
extra_rdoc_files: []
|
|
32
|
+
files:
|
|
33
|
+
- ".github/workflows/ci.yml"
|
|
34
|
+
- ".gitignore"
|
|
35
|
+
- ".rspec"
|
|
36
|
+
- ".rubocop.yml"
|
|
37
|
+
- CHANGELOG.md
|
|
38
|
+
- Gemfile
|
|
39
|
+
- README.md
|
|
40
|
+
- lex-gitlab.gemspec
|
|
41
|
+
- lib/legion/extensions/gitlab.rb
|
|
42
|
+
- lib/legion/extensions/gitlab/client.rb
|
|
43
|
+
- lib/legion/extensions/gitlab/helpers/client.rb
|
|
44
|
+
- lib/legion/extensions/gitlab/runners/merge_requests.rb
|
|
45
|
+
- lib/legion/extensions/gitlab/runners/pipelines.rb
|
|
46
|
+
- lib/legion/extensions/gitlab/runners/projects.rb
|
|
47
|
+
- lib/legion/extensions/gitlab/version.rb
|
|
48
|
+
homepage: https://github.com/LegionIO/lex-gitlab
|
|
49
|
+
licenses:
|
|
50
|
+
- MIT
|
|
51
|
+
metadata:
|
|
52
|
+
homepage_uri: https://github.com/LegionIO/lex-gitlab
|
|
53
|
+
source_code_uri: https://github.com/LegionIO/lex-gitlab
|
|
54
|
+
documentation_uri: https://github.com/LegionIO/lex-gitlab
|
|
55
|
+
changelog_uri: https://github.com/LegionIO/lex-gitlab
|
|
56
|
+
bug_tracker_uri: https://github.com/LegionIO/lex-gitlab/issues
|
|
57
|
+
rubygems_mfa_required: 'true'
|
|
58
|
+
rdoc_options: []
|
|
59
|
+
require_paths:
|
|
60
|
+
- lib
|
|
61
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
62
|
+
requirements:
|
|
63
|
+
- - ">="
|
|
64
|
+
- !ruby/object:Gem::Version
|
|
65
|
+
version: '3.4'
|
|
66
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
67
|
+
requirements:
|
|
68
|
+
- - ">="
|
|
69
|
+
- !ruby/object:Gem::Version
|
|
70
|
+
version: '0'
|
|
71
|
+
requirements: []
|
|
72
|
+
rubygems_version: 3.6.9
|
|
73
|
+
specification_version: 4
|
|
74
|
+
summary: LEX::Gitlab
|
|
75
|
+
test_files: []
|