Module: Legion::Extensions::Github::Runners::Contents

Includes:
Helpers::Cache, Helpers::Client, Helpers::Lex
Included in:
Client
Defined in:
lib/legion/extensions/github/runners/contents.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

#commit_files(owner:, repo:, branch:, files:, message:) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/legion/extensions/github/runners/contents.rb', line 21

def commit_files(owner:, repo:, branch:, files:, message:, **)
  conn = connection(owner: owner, repo: repo, **)

  ref = conn.get("/repos/#{owner}/#{repo}/git/ref/heads/#{branch}")
  commit_sha = ref.body.dig('object', 'sha')

  commit = conn.get("/repos/#{owner}/#{repo}/git/commits/#{commit_sha}")
  base_tree_sha = commit.body.dig('tree', 'sha')

  tree_items = files.map do |f|
    { path: f[:path], mode: '100644', type: 'blob', content: f[:content] }
  end

  new_tree = conn.post("/repos/#{owner}/#{repo}/git/trees",
                       { base_tree: base_tree_sha, tree: tree_items })

  new_commit = conn.post("/repos/#{owner}/#{repo}/git/commits",
                         { message: message, tree: new_tree.body['sha'], parents: [commit_sha] })

  conn.patch("/repos/#{owner}/#{repo}/git/refs/heads/#{branch}",
             { sha: new_commit.body['sha'] })

  { success: true, commit_sha: new_commit.body['sha'], tree_sha: new_tree.body['sha'] }
rescue StandardError => e
  log.warn(e.message)
  { success: false, error: e.message }
end

#get_file_content(owner:, repo:, path:, ref: nil) ⇒ Object



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

def get_file_content(owner:, repo:, path:, ref: nil, **)
  params = ref ? { ref: ref } : {}
  { result: connection(owner: owner, repo: repo, **).get(
    "/repos/#{owner}/#{repo}/contents/#{path}", params
  ).body }
end