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 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
@@ -0,0 +1,12 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+
10
+ # rspec failure tracking
11
+ .rspec_status
12
+ Gemfile.lock
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
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
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gemspec
6
+
7
+ gem 'bundler', '>= 2'
8
+ gem 'rake'
9
+ gem 'rspec'
10
+ gem 'rubocop'
11
+ gem 'rubocop-rspec'
12
+ gem 'webmock'
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
@@ -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,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Gitlab
6
+ VERSION = '0.1.1'
7
+ end
8
+ end
9
+ 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: []