From d5a0edecc849a323b1456190648a2927dc5a9912 Mon Sep 17 00:00:00 2001 From: Fernando Crespo Date: Thu, 20 Feb 2025 16:34:17 -0300 Subject: [PATCH] Get data directly from oven-sh/bun github release page --- lib/github.lua | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++ lib/util.lua | 7 +++-- 2 files changed, 82 insertions(+), 2 deletions(-) create mode 100644 lib/github.lua diff --git a/lib/github.lua b/lib/github.lua new file mode 100644 index 0000000..2c8267c --- /dev/null +++ b/lib/github.lua @@ -0,0 +1,77 @@ +local github = {} + +github.__index = github +local githubSingleton = setmetatable({}, github) +githubSingleton.SOURCE_URL = "https://api.github.com/repos/oven-sh/bun/releases" +githubSingleton.RELEASES ={} + +function github:convertFromGH(respInfo) + local result = {} + for _, release in ipairs(respInfo) do + local version = release.tag_name:gsub("bun.v", "") + local assets_filtered = filter_assets(release.assets) + + for _, asset in ipairs(assets_filtered) do + local extracted_item = extract_data(asset) + + if result[extracted_item["Os"]] == nil then + result[extracted_item["Os"]] = {} + end + + if result[extracted_item["Os"]][version] == nil then + result[extracted_item["Os"]][version] = {} + end + + table.insert(result[extracted_item["Os"]][version], extracted_item) + end + end + + return result +end + +function filter_assets(assets) + local result = assets + for i = #result, 1, -1 do + asset = result[i] + if string.find(asset.name, "-profile") then + table.remove(result, i) + elseif string.find(asset.name, "-baseline") then + table.remove(result, i) + elseif string.find(asset.name, "-musl") then + table.remove(result, i) + elseif string.find(asset.name, "SHASUMS256.txt") then + table.remove(result, i) + end + end + return result +end + +function extract_data(item) + local result = {} + result["Url"] = item["browser_download_url"] + + result["Sum"] = "" + result["SumType"] = "" + + if string.find(item["name"], "windows") then + result["Os"] = "windows" + elseif string.find(item["name"], "darwin") then + result["Os"] = "darwin" + elseif string.find(item["name"], "linux") then + result["Os"] = "linux" + else + result["Os"] = "Unknown" + end + + if string.find(item["name"], "x64") then + result["Arch"] = "amd64" + elseif string.find(item["name"], "aarch64") then + result["Arch"] = "arm64" + else + result["Arch"] = "Unknown" + end + + return result +end + +return githubSingleton \ No newline at end of file diff --git a/lib/util.lua b/lib/util.lua index ee68180..aca412c 100644 --- a/lib/util.lua +++ b/lib/util.lua @@ -1,10 +1,11 @@ local http = require("http") local json = require("json") +local github = require("github") local util = {} util.__index = util local utilSingleton = setmetatable({}, util) -utilSingleton.SOURCE_URL = "https://raw.githubusercontent.com/ahai-code/sdk-sources/main/bun.json" +utilSingleton.SOURCE_URL = "https://api.github.com/repos/oven-sh/bun/releases" utilSingleton.RELEASES ={} function util:compare_versions(v1o, v2o) @@ -44,7 +45,9 @@ function util:getInfo() if resp.status_code ~= 200 then error("Failed to get information: status_code =>" .. resp.status_code) end - local respInfo = json.decode(resp.body)[RUNTIME.osType] + local respInfo = json.decode(resp.body) + local fromGH = github:convertFromGH(respInfo) + respInfo = fromGH[RUNTIME.osType] for version, array in pairs(respInfo) do local url = "" for _, obj in ipairs(array) do