Module: Legion::Extensions::Github::Runners::Labels

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

Constant Summary

Constants included from Helpers::Cache

Helpers::Cache::DEFAULT_TTL, Helpers::Cache::DEFAULT_TTLS

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::Cache

#cache_connected?, #cache_invalidate, #cache_write, #cached_get, #github_ttl_for, #local_cache_connected?, #local_cache_delete, #local_cache_get, #local_cache_set

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

#add_labels_to_issue(owner:, repo:, issue_number:, labels:) ⇒ Object



47
48
49
50
# File 'lib/legion/extensions/github/runners/labels.rb', line 47

def add_labels_to_issue(owner:, repo:, issue_number:, labels:, **)
  response = connection(owner: owner, repo: repo, **).post("/repos/#{owner}/#{repo}/issues/#{issue_number}/labels", { labels: labels })
  { result: response.body }
end

#create_label(owner:, repo:, name:, color:, description: nil) ⇒ Object



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

def create_label(owner:, repo:, name:, color:, description: nil, **)
  payload = { name: name, color: color, description: description }.compact
  response = connection(owner: owner, repo: repo, **).post("/repos/#{owner}/#{repo}/labels", payload)
  cache_write("github:repo:#{owner}/#{repo}:labels:#{name}", response.body) if response.body['id']
  { result: response.body }
end

#delete_label(owner:, repo:, name:) ⇒ Object



41
42
43
44
45
# File 'lib/legion/extensions/github/runners/labels.rb', line 41

def delete_label(owner:, repo:, name:, **)
  response = connection(owner: owner, repo: repo, **).delete("/repos/#{owner}/#{repo}/labels/#{name}")
  cache_invalidate("github:repo:#{owner}/#{repo}:labels:#{name}") if response.status == 204
  { result: response.status == 204 }
end

#get_label(owner:, repo:, name:) ⇒ Object



21
22
23
24
25
# File 'lib/legion/extensions/github/runners/labels.rb', line 21

def get_label(owner:, repo:, name:, **)
  { result: cached_get("github:repo:#{owner}/#{repo}:labels:#{name}") do
    connection(owner: owner, repo: repo, **).get("/repos/#{owner}/#{repo}/labels/#{name}").body
  end }
end

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



14
15
16
17
18
19
# File 'lib/legion/extensions/github/runners/labels.rb', line 14

def list_labels(owner:, repo:, per_page: 30, page: 1, **)
  params = { per_page: per_page, page: page }
  { result: cached_get("github:repo:#{owner}/#{repo}:labels:#{page}:#{per_page}") do
    connection(owner: owner, repo: repo, **).get("/repos/#{owner}/#{repo}/labels", params).body
  end }
end

#remove_label_from_issue(owner:, repo:, issue_number:, name:) ⇒ Object



52
53
54
55
# File 'lib/legion/extensions/github/runners/labels.rb', line 52

def remove_label_from_issue(owner:, repo:, issue_number:, name:, **)
  response = connection(owner: owner, repo: repo, **).delete("/repos/#{owner}/#{repo}/issues/#{issue_number}/labels/#{name}")
  { result: response.status == 204 }
end

#update_label(owner:, repo:, name:, new_name: nil, color: nil, description: nil) ⇒ Object



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

def update_label(owner:, repo:, name:, new_name: nil, color: nil, description: nil, **)
  payload = { new_name: new_name, color: color, description: description }.compact
  response = connection(owner: owner, repo: repo, **).patch("/repos/#{owner}/#{repo}/labels/#{name}", payload)
  cache_write("github:repo:#{owner}/#{repo}:labels:#{name}", response.body) if response.body['id']
  { result: response.body }
end