Module: Legion::Extensions::Github::Runners::RepositoryWebhooks

Includes:
Helpers::Client, Helpers::Lex
Included in:
Client
Defined in:
lib/legion/extensions/github/runners/repository_webhooks.rb

Constant Summary

Constants included from Helpers::Client

Helpers::Client::CREDENTIAL_RESOLVERS

Constants included from Helpers::TokenCache

Helpers::TokenCache::TOKEN_BUFFER_SECONDS

Instance Method Summary collapse

Methods included from Helpers::Client

#connection, #gh_cli_token_output, #max_fallback_retries, #on_rate_limit, #on_scope_authorized, #on_scope_denied, #resolve_broker_app, #resolve_credential, #resolve_env, #resolve_gh_cli, #resolve_next_credential, #resolve_settings_app, #resolve_settings_delegated, #resolve_settings_pat, #resolve_vault_app, #resolve_vault_delegated, #resolve_vault_pat

Methods included from Helpers::ScopeRegistry

#credential_fingerprint, #invalidate_scope, #mark_rate_limited, #rate_limited?, #register_scope, #scope_status

Methods included from Helpers::TokenCache

#fetch_token, #mark_rate_limited, #rate_limited?, #store_token

Instance Method Details

#create_webhook(owner:, repo:, config:, events: ['push'], active: true) ⇒ Object



26
27
28
29
30
31
32
# File 'lib/legion/extensions/github/runners/repository_webhooks.rb', line 26

def create_webhook(owner:, repo:, config:, events: ['push'], active: true, **)
  payload = { config: config, events: events, active: active }
  response = connection(owner: owner, repo: repo, **).post(
    "/repos/#{owner}/#{repo}/hooks", payload
  )
  { result: response.body }
end

#delete_webhook(owner:, repo:, hook_id:) ⇒ Object



42
43
44
45
46
47
# File 'lib/legion/extensions/github/runners/repository_webhooks.rb', line 42

def delete_webhook(owner:, repo:, hook_id:, **)
  response = connection(owner: owner, repo: repo, **).delete(
    "/repos/#{owner}/#{repo}/hooks/#{hook_id}"
  )
  { result: response.status == 204 }
end

#get_webhook(owner:, repo:, hook_id:) ⇒ Object



19
20
21
22
23
24
# File 'lib/legion/extensions/github/runners/repository_webhooks.rb', line 19

def get_webhook(owner:, repo:, hook_id:, **)
  response = connection(owner: owner, repo: repo, **).get(
    "/repos/#{owner}/#{repo}/hooks/#{hook_id}"
  )
  { result: response.body }
end

#list_webhook_deliveries(owner:, repo:, hook_id:, per_page: 30) ⇒ Object



63
64
65
66
67
68
# File 'lib/legion/extensions/github/runners/repository_webhooks.rb', line 63

def list_webhook_deliveries(owner:, repo:, hook_id:, per_page: 30, **)
  response = connection(owner: owner, repo: repo, **).get(
    "/repos/#{owner}/#{repo}/hooks/#{hook_id}/deliveries", per_page: per_page
  )
  { result: response.body }
end

#list_webhooks(owner:, repo:, per_page: 30, page: 1) ⇒ Object



12
13
14
15
16
17
# File 'lib/legion/extensions/github/runners/repository_webhooks.rb', line 12

def list_webhooks(owner:, repo:, per_page: 30, page: 1, **)
  response = connection(owner: owner, repo: repo, **).get(
    "/repos/#{owner}/#{repo}/hooks", per_page: per_page, page: page
  )
  { result: response.body }
end

#ping_webhook(owner:, repo:, hook_id:) ⇒ Object



49
50
51
52
53
54
# File 'lib/legion/extensions/github/runners/repository_webhooks.rb', line 49

def ping_webhook(owner:, repo:, hook_id:, **)
  response = connection(owner: owner, repo: repo, **).post(
    "/repos/#{owner}/#{repo}/hooks/#{hook_id}/pings"
  )
  { result: response.status == 204 }
end

#test_webhook(owner:, repo:, hook_id:) ⇒ Object



56
57
58
59
60
61
# File 'lib/legion/extensions/github/runners/repository_webhooks.rb', line 56

def test_webhook(owner:, repo:, hook_id:, **)
  response = connection(owner: owner, repo: repo, **).post(
    "/repos/#{owner}/#{repo}/hooks/#{hook_id}/tests"
  )
  { result: response.status == 204 }
end

#update_webhook(owner:, repo:, hook_id:, **opts) ⇒ Object



34
35
36
37
38
39
40
# File 'lib/legion/extensions/github/runners/repository_webhooks.rb', line 34

def update_webhook(owner:, repo:, hook_id:, **opts)
  payload = opts.slice(:config, :events, :active, :add_events, :remove_events)
  response = connection(owner: owner, repo: repo, **opts).patch(
    "/repos/#{owner}/#{repo}/hooks/#{hook_id}", payload
  )
  { result: response.body }
end