aboutsummaryrefslogtreecommitdiffstats
path: root/lua/mason-core/managers/github
diff options
context:
space:
mode:
Diffstat (limited to 'lua/mason-core/managers/github')
-rw-r--r--lua/mason-core/managers/github/client.lua26
1 files changed, 25 insertions, 1 deletions
diff --git a/lua/mason-core/managers/github/client.lua b/lua/mason-core/managers/github/client.lua
index 8f4545e8..788b402b 100644
--- a/lua/mason-core/managers/github/client.lua
+++ b/lua/mason-core/managers/github/client.lua
@@ -8,10 +8,16 @@ local M = {}
---@alias GitHubReleaseAsset {url: string, id: integer, name: string, browser_download_url: string, created_at: string, updated_at: string, size: integer, download_count: integer}
---@alias GitHubRelease {tag_name: string, prerelease: boolean, draft: boolean, assets:GitHubReleaseAsset[]}
---@alias GitHubTag {name: string}
+---@alias GitHubCommit {sha: string}
---@param path string
+---@param opts { params: table<string, any>? }?
---@return Result # JSON decoded response.
-local function api_call(path)
+local function api_call(path, opts)
+ if opts and opts.params then
+ local params = _.join("&", _.map(_.join "=", _.sort_by(_.head, _.to_pairs(opts.params))))
+ path = ("%s?%s"):format(path, params)
+ end
return spawn
.gh({ "api", path, env = { CLICOLOR_FORCE = 0 } })
:map(_.prop "stdout")
@@ -21,6 +27,8 @@ local function api_call(path)
:map_catching(vim.json.decode)
end
+M.api_call = api_call
+
---@async
---@param repo string The GitHub repo ("username/repo").
---@return Result # Result<GitHubRelease[]>
@@ -105,6 +113,22 @@ function M.fetch_latest_tag(repo)
:map(_.prop "tag")
end
+---@async
+---@param repo string The GitHub repo ("username/repo").
+---@param opts { page: integer?, per_page: integer? }?
+---@return Result # Result<GitHubCommit[]>
+function M.fetch_commits(repo, opts)
+ local path = ("repos/%s/commits"):format(repo)
+ return api_call(path, {
+ params = {
+ page = opts and opts.page or 1,
+ per_page = opts and opts.per_page or 30,
+ },
+ }):map_err(function()
+ return ("Failed to fetch commits for GitHub repository %s."):format(repo)
+ end)
+end
+
---@alias GitHubRateLimit {limit: integer, remaining: integer, reset: integer, used: integer}
---@alias GitHubRateLimitResponse {resources: { core: GitHubRateLimit }}