lex-github 0.2.5 → 0.3.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.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +50 -0
  3. data/CLAUDE.md +45 -19
  4. data/README.md +155 -83
  5. data/lex-github.gemspec +2 -0
  6. data/lib/legion/extensions/github/app/actor/token_refresh.rb +68 -0
  7. data/lib/legion/extensions/github/app/actor/webhook_poller.rb +65 -0
  8. data/lib/legion/extensions/github/app/hooks/setup.rb +19 -0
  9. data/lib/legion/extensions/github/app/hooks/webhook.rb +19 -0
  10. data/lib/legion/extensions/github/app/runners/auth.rb +48 -0
  11. data/lib/legion/extensions/github/app/runners/credential_store.rb +46 -0
  12. data/lib/legion/extensions/github/app/runners/installations.rb +56 -0
  13. data/lib/legion/extensions/github/app/runners/manifest.rb +65 -0
  14. data/lib/legion/extensions/github/app/runners/webhooks.rb +118 -0
  15. data/lib/legion/extensions/github/app/transport/exchanges/app.rb +17 -0
  16. data/lib/legion/extensions/github/app/transport/messages/event.rb +18 -0
  17. data/lib/legion/extensions/github/app/transport/queues/auth.rb +18 -0
  18. data/lib/legion/extensions/github/app/transport/queues/webhooks.rb +18 -0
  19. data/lib/legion/extensions/github/cli/app.rb +57 -0
  20. data/lib/legion/extensions/github/cli/auth.rb +99 -0
  21. data/lib/legion/extensions/github/client.rb +24 -0
  22. data/lib/legion/extensions/github/errors.rb +44 -0
  23. data/lib/legion/extensions/github/helpers/browser_auth.rb +106 -0
  24. data/lib/legion/extensions/github/helpers/cache.rb +99 -0
  25. data/lib/legion/extensions/github/helpers/callback_server.rb +89 -0
  26. data/lib/legion/extensions/github/helpers/client.rb +292 -2
  27. data/lib/legion/extensions/github/helpers/scope_registry.rb +91 -0
  28. data/lib/legion/extensions/github/helpers/token_cache.rb +86 -0
  29. data/lib/legion/extensions/github/middleware/credential_fallback.rb +76 -0
  30. data/lib/legion/extensions/github/middleware/rate_limit.rb +40 -0
  31. data/lib/legion/extensions/github/middleware/scope_probe.rb +37 -0
  32. data/lib/legion/extensions/github/oauth/actor/token_refresh.rb +76 -0
  33. data/lib/legion/extensions/github/oauth/hooks/callback.rb +19 -0
  34. data/lib/legion/extensions/github/oauth/runners/auth.rb +111 -0
  35. data/lib/legion/extensions/github/oauth/transport/exchanges/oauth.rb +17 -0
  36. data/lib/legion/extensions/github/oauth/transport/queues/auth.rb +18 -0
  37. data/lib/legion/extensions/github/runners/actions.rb +100 -0
  38. data/lib/legion/extensions/github/runners/branches.rb +5 -3
  39. data/lib/legion/extensions/github/runners/checks.rb +84 -0
  40. data/lib/legion/extensions/github/runners/comments.rb +13 -7
  41. data/lib/legion/extensions/github/runners/commits.rb +11 -6
  42. data/lib/legion/extensions/github/runners/contents.rb +3 -1
  43. data/lib/legion/extensions/github/runners/deployments.rb +76 -0
  44. data/lib/legion/extensions/github/runners/gists.rb +9 -4
  45. data/lib/legion/extensions/github/runners/issues.rb +16 -9
  46. data/lib/legion/extensions/github/runners/labels.rb +16 -9
  47. data/lib/legion/extensions/github/runners/organizations.rb +10 -8
  48. data/lib/legion/extensions/github/runners/pull_requests.rb +24 -14
  49. data/lib/legion/extensions/github/runners/releases.rb +89 -0
  50. data/lib/legion/extensions/github/runners/repositories.rb +17 -10
  51. data/lib/legion/extensions/github/runners/repository_webhooks.rb +76 -0
  52. data/lib/legion/extensions/github/runners/search.rb +11 -8
  53. data/lib/legion/extensions/github/runners/users.rb +12 -8
  54. data/lib/legion/extensions/github/version.rb +1 -1
  55. data/lib/legion/extensions/github.rb +22 -0
  56. metadata +63 -1
@@ -0,0 +1,89 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'legion/extensions/github/helpers/client'
4
+
5
+ module Legion
6
+ module Extensions
7
+ module Github
8
+ module Runners
9
+ module Releases
10
+ include Legion::Extensions::Github::Helpers::Client
11
+
12
+ def list_releases(owner:, repo:, per_page: 30, page: 1, **)
13
+ response = connection(owner: owner, repo: repo, **).get(
14
+ "/repos/#{owner}/#{repo}/releases", per_page: per_page, page: page
15
+ )
16
+ { result: response.body }
17
+ end
18
+
19
+ def get_release(owner:, repo:, release_id:, **)
20
+ response = connection(owner: owner, repo: repo, **).get(
21
+ "/repos/#{owner}/#{repo}/releases/#{release_id}"
22
+ )
23
+ { result: response.body }
24
+ end
25
+
26
+ def get_latest_release(owner:, repo:, **)
27
+ response = connection(owner: owner, repo: repo, **).get(
28
+ "/repos/#{owner}/#{repo}/releases/latest"
29
+ )
30
+ { result: response.body }
31
+ end
32
+
33
+ def get_release_by_tag(owner:, repo:, tag:, **)
34
+ response = connection(owner: owner, repo: repo, **).get(
35
+ "/repos/#{owner}/#{repo}/releases/tags/#{tag}"
36
+ )
37
+ { result: response.body }
38
+ end
39
+
40
+ def create_release(owner:, repo:, tag_name:, name: nil, body: nil, # rubocop:disable Metrics/ParameterLists
41
+ target_commitish: nil, draft: false, prerelease: false,
42
+ generate_release_notes: false, **)
43
+ payload = { tag_name: tag_name, name: name, body: body,
44
+ target_commitish: target_commitish, draft: draft,
45
+ prerelease: prerelease,
46
+ generate_release_notes: generate_release_notes }.compact
47
+ response = connection(owner: owner, repo: repo, **).post(
48
+ "/repos/#{owner}/#{repo}/releases", payload
49
+ )
50
+ { result: response.body }
51
+ end
52
+
53
+ def update_release(owner:, repo:, release_id:, **opts)
54
+ payload = opts.slice(:tag_name, :name, :body, :draft, :prerelease, :target_commitish)
55
+ response = connection(owner: owner, repo: repo, **opts).patch(
56
+ "/repos/#{owner}/#{repo}/releases/#{release_id}", payload
57
+ )
58
+ { result: response.body }
59
+ end
60
+
61
+ def delete_release(owner:, repo:, release_id:, **)
62
+ response = connection(owner: owner, repo: repo, **).delete(
63
+ "/repos/#{owner}/#{repo}/releases/#{release_id}"
64
+ )
65
+ { result: response.status == 204 }
66
+ end
67
+
68
+ def list_release_assets(owner:, repo:, release_id:, per_page: 30, page: 1, **)
69
+ response = connection(owner: owner, repo: repo, **).get(
70
+ "/repos/#{owner}/#{repo}/releases/#{release_id}/assets",
71
+ per_page: per_page, page: page
72
+ )
73
+ { result: response.body }
74
+ end
75
+
76
+ def delete_release_asset(owner:, repo:, asset_id:, **)
77
+ response = connection(owner: owner, repo: repo, **).delete(
78
+ "/repos/#{owner}/#{repo}/releases/assets/#{asset_id}"
79
+ )
80
+ { result: response.status == 204 }
81
+ end
82
+
83
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
84
+ Legion::Extensions::Helpers.const_defined?(:Lex, false)
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'legion/extensions/github/helpers/client'
4
+ require 'legion/extensions/github/helpers/cache'
4
5
 
5
6
  module Legion
6
7
  module Extensions
@@ -8,42 +9,48 @@ module Legion
8
9
  module Runners
9
10
  module Repositories
10
11
  include Legion::Extensions::Github::Helpers::Client
12
+ include Legion::Extensions::Github::Helpers::Cache
11
13
 
12
14
  def list_repos(username:, per_page: 30, page: 1, **)
13
- response = connection(**).get("/users/#{username}/repos", per_page: per_page, page: page)
14
- { result: response.body }
15
+ { result: cached_get("github:user:#{username}:repos:#{page}:#{per_page}") do
16
+ connection(**).get("/users/#{username}/repos", per_page: per_page, page: page).body
17
+ end }
15
18
  end
16
19
 
17
20
  def get_repo(owner:, repo:, **)
18
- response = connection(**).get("/repos/#{owner}/#{repo}")
19
- { result: response.body }
21
+ { result: cached_get("github:repo:#{owner}/#{repo}") { connection(owner: owner, repo: repo, **).get("/repos/#{owner}/#{repo}").body } }
20
22
  end
21
23
 
22
24
  def create_repo(name:, description: nil, private: false, **)
23
25
  body = { name: name, description: description, private: private }
24
26
  response = connection(**).post('/user/repos', body)
27
+ cache_write("github:repo:#{response.body['full_name']}", response.body) if response.body['id']
25
28
  { result: response.body }
26
29
  end
27
30
 
28
31
  def update_repo(owner:, repo:, **opts)
29
32
  body = opts.slice(:name, :description, :homepage, :private, :default_branch)
30
- response = connection(**opts).patch("/repos/#{owner}/#{repo}", body)
33
+ response = connection(owner: owner, repo: repo, **opts).patch("/repos/#{owner}/#{repo}", body)
34
+ cache_write("github:repo:#{owner}/#{repo}", response.body) if response.body['id']
31
35
  { result: response.body }
32
36
  end
33
37
 
34
38
  def delete_repo(owner:, repo:, **)
35
- response = connection(**).delete("/repos/#{owner}/#{repo}")
39
+ response = connection(owner: owner, repo: repo, **).delete("/repos/#{owner}/#{repo}")
40
+ cache_invalidate("github:repo:#{owner}/#{repo}") if response.status == 204
36
41
  { result: response.status == 204 }
37
42
  end
38
43
 
39
44
  def list_branches(owner:, repo:, per_page: 30, page: 1, **)
40
- response = connection(**).get("/repos/#{owner}/#{repo}/branches", per_page: per_page, page: page)
41
- { result: response.body }
45
+ { result: cached_get("github:repo:#{owner}/#{repo}:branches:#{page}:#{per_page}") do
46
+ connection(owner: owner, repo: repo, **).get("/repos/#{owner}/#{repo}/branches", per_page: per_page, page: page).body
47
+ end }
42
48
  end
43
49
 
44
50
  def list_tags(owner:, repo:, per_page: 30, page: 1, **)
45
- response = connection(**).get("/repos/#{owner}/#{repo}/tags", per_page: per_page, page: page)
46
- { result: response.body }
51
+ { result: cached_get("github:repo:#{owner}/#{repo}:tags:#{page}:#{per_page}") do
52
+ connection(owner: owner, repo: repo, **).get("/repos/#{owner}/#{repo}/tags", per_page: per_page, page: page).body
53
+ end }
47
54
  end
48
55
 
49
56
  include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
@@ -0,0 +1,76 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'legion/extensions/github/helpers/client'
4
+
5
+ module Legion
6
+ module Extensions
7
+ module Github
8
+ module Runners
9
+ module RepositoryWebhooks
10
+ include Legion::Extensions::Github::Helpers::Client
11
+
12
+ def list_webhooks(owner:, repo:, per_page: 30, page: 1, **)
13
+ response = connection(owner: owner, repo: repo, **).get(
14
+ "/repos/#{owner}/#{repo}/hooks", per_page: per_page, page: page
15
+ )
16
+ { result: response.body }
17
+ end
18
+
19
+ def get_webhook(owner:, repo:, hook_id:, **)
20
+ response = connection(owner: owner, repo: repo, **).get(
21
+ "/repos/#{owner}/#{repo}/hooks/#{hook_id}"
22
+ )
23
+ { result: response.body }
24
+ end
25
+
26
+ def create_webhook(owner:, repo:, config:, events: ['push'], active: true, **)
27
+ payload = { config: config, events: events, active: active }
28
+ response = connection(owner: owner, repo: repo, **).post(
29
+ "/repos/#{owner}/#{repo}/hooks", payload
30
+ )
31
+ { result: response.body }
32
+ end
33
+
34
+ def update_webhook(owner:, repo:, hook_id:, **opts)
35
+ payload = opts.slice(:config, :events, :active, :add_events, :remove_events)
36
+ response = connection(owner: owner, repo: repo, **opts).patch(
37
+ "/repos/#{owner}/#{repo}/hooks/#{hook_id}", payload
38
+ )
39
+ { result: response.body }
40
+ end
41
+
42
+ def delete_webhook(owner:, repo:, hook_id:, **)
43
+ response = connection(owner: owner, repo: repo, **).delete(
44
+ "/repos/#{owner}/#{repo}/hooks/#{hook_id}"
45
+ )
46
+ { result: response.status == 204 }
47
+ end
48
+
49
+ def ping_webhook(owner:, repo:, hook_id:, **)
50
+ response = connection(owner: owner, repo: repo, **).post(
51
+ "/repos/#{owner}/#{repo}/hooks/#{hook_id}/pings"
52
+ )
53
+ { result: response.status == 204 }
54
+ end
55
+
56
+ def test_webhook(owner:, repo:, hook_id:, **)
57
+ response = connection(owner: owner, repo: repo, **).post(
58
+ "/repos/#{owner}/#{repo}/hooks/#{hook_id}/tests"
59
+ )
60
+ { result: response.status == 204 }
61
+ end
62
+
63
+ def list_webhook_deliveries(owner:, repo:, hook_id:, per_page: 30, **)
64
+ response = connection(owner: owner, repo: repo, **).get(
65
+ "/repos/#{owner}/#{repo}/hooks/#{hook_id}/deliveries", per_page: per_page
66
+ )
67
+ { result: response.body }
68
+ end
69
+
70
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
71
+ Legion::Extensions::Helpers.const_defined?(:Lex, false)
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
@@ -1,6 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'digest'
3
4
  require 'legion/extensions/github/helpers/client'
5
+ require 'legion/extensions/github/helpers/cache'
4
6
 
5
7
  module Legion
6
8
  module Extensions
@@ -8,29 +10,30 @@ module Legion
8
10
  module Runners
9
11
  module Search
10
12
  include Legion::Extensions::Github::Helpers::Client
13
+ include Legion::Extensions::Github::Helpers::Cache
11
14
 
12
15
  def search_repositories(query:, sort: nil, order: 'desc', per_page: 30, page: 1, **)
13
16
  params = { q: query, sort: sort, order: order, per_page: per_page, page: page }.compact
14
- response = connection(**).get('/search/repositories', params)
15
- { result: response.body }
17
+ cache_key = "github:search:repositories:#{Digest::MD5.hexdigest(params.sort.to_s)}"
18
+ { result: cached_get(cache_key) { connection(**).get('/search/repositories', params).body } }
16
19
  end
17
20
 
18
21
  def search_issues(query:, sort: nil, order: 'desc', per_page: 30, page: 1, **)
19
22
  params = { q: query, sort: sort, order: order, per_page: per_page, page: page }.compact
20
- response = connection(**).get('/search/issues', params)
21
- { result: response.body }
23
+ cache_key = "github:search:issues:#{Digest::MD5.hexdigest(params.sort.to_s)}"
24
+ { result: cached_get(cache_key) { connection(**).get('/search/issues', params).body } }
22
25
  end
23
26
 
24
27
  def search_users(query:, sort: nil, order: 'desc', per_page: 30, page: 1, **)
25
28
  params = { q: query, sort: sort, order: order, per_page: per_page, page: page }.compact
26
- response = connection(**).get('/search/users', params)
27
- { result: response.body }
29
+ cache_key = "github:search:users:#{Digest::MD5.hexdigest(params.sort.to_s)}"
30
+ { result: cached_get(cache_key) { connection(**).get('/search/users', params).body } }
28
31
  end
29
32
 
30
33
  def search_code(query:, sort: nil, order: 'desc', per_page: 30, page: 1, **)
31
34
  params = { q: query, sort: sort, order: order, per_page: per_page, page: page }.compact
32
- response = connection(**).get('/search/code', params)
33
- { result: response.body }
35
+ cache_key = "github:search:code:#{Digest::MD5.hexdigest(params.sort.to_s)}"
36
+ { result: cached_get(cache_key) { connection(**).get('/search/code', params).body } }
34
37
  end
35
38
 
36
39
  include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'legion/extensions/github/helpers/client'
4
+ require 'legion/extensions/github/helpers/cache'
4
5
 
5
6
  module Legion
6
7
  module Extensions
@@ -8,25 +9,28 @@ module Legion
8
9
  module Runners
9
10
  module Users
10
11
  include Legion::Extensions::Github::Helpers::Client
12
+ include Legion::Extensions::Github::Helpers::Cache
11
13
 
12
14
  def get_authenticated_user(**)
13
- response = connection(**).get('/user')
14
- { result: response.body }
15
+ cred = resolve_credential
16
+ fp = cred&.dig(:metadata, :credential_fingerprint) || 'anonymous'
17
+ { result: cached_get("github:user:authenticated:#{fp}") { connection(**).get('/user').body } }
15
18
  end
16
19
 
17
20
  def get_user(username:, **)
18
- response = connection(**).get("/users/#{username}")
19
- { result: response.body }
21
+ { result: cached_get("github:user:#{username}") { connection(**).get("/users/#{username}").body } }
20
22
  end
21
23
 
22
24
  def list_followers(username:, per_page: 30, page: 1, **)
23
- response = connection(**).get("/users/#{username}/followers", per_page: per_page, page: page)
24
- { result: response.body }
25
+ { result: cached_get("github:user:#{username}:followers:#{page}:#{per_page}") do
26
+ connection(**).get("/users/#{username}/followers", per_page: per_page, page: page).body
27
+ end }
25
28
  end
26
29
 
27
30
  def list_following(username:, per_page: 30, page: 1, **)
28
- response = connection(**).get("/users/#{username}/following", per_page: per_page, page: page)
29
- { result: response.body }
31
+ { result: cached_get("github:user:#{username}:following:#{page}:#{per_page}") do
32
+ connection(**).get("/users/#{username}/following", per_page: per_page, page: page).body
33
+ end }
30
34
  end
31
35
 
32
36
  include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
@@ -3,7 +3,7 @@
3
3
  module Legion
4
4
  module Extensions
5
5
  module Github
6
- VERSION = '0.2.5'
6
+ VERSION = '0.3.0'
7
7
  end
8
8
  end
9
9
  end
@@ -1,7 +1,24 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'legion/extensions/github/version'
4
+ require 'legion/extensions/github/errors'
5
+ require 'legion/extensions/github/middleware/rate_limit'
6
+ require 'legion/extensions/github/middleware/scope_probe'
7
+ require 'legion/extensions/github/middleware/credential_fallback'
4
8
  require 'legion/extensions/github/helpers/client'
9
+ require 'legion/extensions/github/helpers/cache'
10
+ require 'legion/extensions/github/helpers/token_cache'
11
+ require 'legion/extensions/github/helpers/scope_registry'
12
+ require 'legion/extensions/github/app/runners/auth'
13
+ require 'legion/extensions/github/app/runners/webhooks'
14
+ require 'legion/extensions/github/app/runners/manifest'
15
+ require 'legion/extensions/github/app/runners/installations'
16
+ require 'legion/extensions/github/app/runners/credential_store'
17
+ require 'legion/extensions/github/oauth/runners/auth'
18
+ require 'legion/extensions/github/helpers/callback_server'
19
+ require 'legion/extensions/github/helpers/browser_auth'
20
+ require 'legion/extensions/github/cli/auth'
21
+ require 'legion/extensions/github/cli/app'
5
22
  require 'legion/extensions/github/runners/repositories'
6
23
  require 'legion/extensions/github/runners/issues'
7
24
  require 'legion/extensions/github/runners/pull_requests'
@@ -14,6 +31,11 @@ require 'legion/extensions/github/runners/labels'
14
31
  require 'legion/extensions/github/runners/comments'
15
32
  require 'legion/extensions/github/runners/branches'
16
33
  require 'legion/extensions/github/runners/contents'
34
+ require 'legion/extensions/github/runners/actions'
35
+ require 'legion/extensions/github/runners/checks'
36
+ require 'legion/extensions/github/runners/releases'
37
+ require 'legion/extensions/github/runners/deployments'
38
+ require 'legion/extensions/github/runners/repository_webhooks'
17
39
  require 'legion/extensions/github/client'
18
40
 
19
41
  module Legion
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lex-github
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Esity
@@ -9,6 +9,20 @@ bindir: bin
9
9
  cert_chain: []
10
10
  date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: base64
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '0.1'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '0.1'
12
26
  - !ruby/object:Gem::Dependency
13
27
  name: faraday
14
28
  requirement: !ruby/object:Gem::Requirement
@@ -23,6 +37,20 @@ dependencies:
23
37
  - - ">="
24
38
  - !ruby/object:Gem::Version
25
39
  version: '2.0'
40
+ - !ruby/object:Gem::Dependency
41
+ name: jwt
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '2.7'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '2.7'
26
54
  - !ruby/object:Gem::Dependency
27
55
  name: legion-cache
28
56
  requirement: !ruby/object:Gem::Requirement
@@ -142,18 +170,52 @@ files:
142
170
  - README.md
143
171
  - lex-github.gemspec
144
172
  - lib/legion/extensions/github.rb
173
+ - lib/legion/extensions/github/app/actor/token_refresh.rb
174
+ - lib/legion/extensions/github/app/actor/webhook_poller.rb
175
+ - lib/legion/extensions/github/app/hooks/setup.rb
176
+ - lib/legion/extensions/github/app/hooks/webhook.rb
177
+ - lib/legion/extensions/github/app/runners/auth.rb
178
+ - lib/legion/extensions/github/app/runners/credential_store.rb
179
+ - lib/legion/extensions/github/app/runners/installations.rb
180
+ - lib/legion/extensions/github/app/runners/manifest.rb
181
+ - lib/legion/extensions/github/app/runners/webhooks.rb
182
+ - lib/legion/extensions/github/app/transport/exchanges/app.rb
183
+ - lib/legion/extensions/github/app/transport/messages/event.rb
184
+ - lib/legion/extensions/github/app/transport/queues/auth.rb
185
+ - lib/legion/extensions/github/app/transport/queues/webhooks.rb
186
+ - lib/legion/extensions/github/cli/app.rb
187
+ - lib/legion/extensions/github/cli/auth.rb
145
188
  - lib/legion/extensions/github/client.rb
189
+ - lib/legion/extensions/github/errors.rb
190
+ - lib/legion/extensions/github/helpers/browser_auth.rb
191
+ - lib/legion/extensions/github/helpers/cache.rb
192
+ - lib/legion/extensions/github/helpers/callback_server.rb
146
193
  - lib/legion/extensions/github/helpers/client.rb
194
+ - lib/legion/extensions/github/helpers/scope_registry.rb
195
+ - lib/legion/extensions/github/helpers/token_cache.rb
196
+ - lib/legion/extensions/github/middleware/credential_fallback.rb
197
+ - lib/legion/extensions/github/middleware/rate_limit.rb
198
+ - lib/legion/extensions/github/middleware/scope_probe.rb
199
+ - lib/legion/extensions/github/oauth/actor/token_refresh.rb
200
+ - lib/legion/extensions/github/oauth/hooks/callback.rb
201
+ - lib/legion/extensions/github/oauth/runners/auth.rb
202
+ - lib/legion/extensions/github/oauth/transport/exchanges/oauth.rb
203
+ - lib/legion/extensions/github/oauth/transport/queues/auth.rb
204
+ - lib/legion/extensions/github/runners/actions.rb
147
205
  - lib/legion/extensions/github/runners/branches.rb
206
+ - lib/legion/extensions/github/runners/checks.rb
148
207
  - lib/legion/extensions/github/runners/comments.rb
149
208
  - lib/legion/extensions/github/runners/commits.rb
150
209
  - lib/legion/extensions/github/runners/contents.rb
210
+ - lib/legion/extensions/github/runners/deployments.rb
151
211
  - lib/legion/extensions/github/runners/gists.rb
152
212
  - lib/legion/extensions/github/runners/issues.rb
153
213
  - lib/legion/extensions/github/runners/labels.rb
154
214
  - lib/legion/extensions/github/runners/organizations.rb
155
215
  - lib/legion/extensions/github/runners/pull_requests.rb
216
+ - lib/legion/extensions/github/runners/releases.rb
156
217
  - lib/legion/extensions/github/runners/repositories.rb
218
+ - lib/legion/extensions/github/runners/repository_webhooks.rb
157
219
  - lib/legion/extensions/github/runners/search.rb
158
220
  - lib/legion/extensions/github/runners/users.rb
159
221
  - lib/legion/extensions/github/version.rb