mirror of
https://github.com/folke/lazy.nvim.git
synced 2025-06-27 19:24:13 +00:00
ci: auto-get rockspec mappings for rock name => github short url or url
This commit is contained in:
parent
2ca68f9979
commit
b6eba0d026
7 changed files with 117405 additions and 1 deletions
90
lua/lazy/build.lua
Normal file
90
lua/lazy/build.lua
Normal file
|
@ -0,0 +1,90 @@
|
|||
vim.opt.rtp:append(".")
|
||||
local Rocks = require("lazy.pkg.rockspec")
|
||||
local Semver = require("lazy.manage.semver")
|
||||
local Util = require("lazy.util")
|
||||
|
||||
local M = {}
|
||||
|
||||
function M.fetch(url, file, prefix)
|
||||
if not vim.uv.fs_stat(file) then
|
||||
print((prefix or "") .. "Fetching " .. url .. " to " .. file .. "\n")
|
||||
vim.cmd.redraw()
|
||||
local out = vim.fn.system("wget " .. url .. " -O " .. file)
|
||||
if vim.v.shell_error ~= 0 then
|
||||
pcall(vim.uv.fs_unlink, file)
|
||||
error("Failed to fetch " .. url .. ":\n" .. out)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
---@return RockManifest?
|
||||
function M.fetch_manifest()
|
||||
local manifest_file = "build/manifest.lua"
|
||||
M.fetch("https://luarocks.org/manifest", manifest_file)
|
||||
return Rocks.parse(manifest_file)
|
||||
end
|
||||
|
||||
function M.fetch_rockspec(name, version, prefix)
|
||||
version = version or "scm-1"
|
||||
local url = "https://luarocks.org/" .. name .. "-" .. version .. ".rockspec"
|
||||
M.fetch(url, "build/" .. name .. ".rockspec", prefix)
|
||||
end
|
||||
|
||||
function M.build()
|
||||
vim.fn.mkdir("build", "p")
|
||||
local manifest = M.fetch_manifest() or {}
|
||||
---@type {name:string, version:string, url:string}[]
|
||||
local nvim_rocks = {}
|
||||
for rock, vv in pairs(manifest.repository or {}) do
|
||||
if rock:find("nvim", 1, true) then
|
||||
local versions = vim.tbl_map(Semver.version, vim.tbl_keys(vv))
|
||||
versions = vim.tbl_filter(function(v)
|
||||
return not not v
|
||||
end, versions)
|
||||
local last = Semver.last(versions) or next(vv)
|
||||
last = type(last) == "table" and last.input or last
|
||||
table.insert(nvim_rocks, { name = rock, version = last })
|
||||
end
|
||||
end
|
||||
table.sort(nvim_rocks, function(a, b)
|
||||
return a.name < b.name
|
||||
end)
|
||||
|
||||
for r, rock in ipairs(nvim_rocks) do
|
||||
local progress = string.format("[%d/%d] ", r, #nvim_rocks)
|
||||
local ok, err = pcall(M.fetch_rockspec, rock.name, rock.version, progress)
|
||||
if not ok then
|
||||
err = vim.trim("Error: " .. err)
|
||||
local lines = vim.split(err, "\n")
|
||||
lines = vim.tbl_map(function(line)
|
||||
return " " .. line
|
||||
end, lines)
|
||||
print(table.concat(lines, "\n") .. "\n")
|
||||
end
|
||||
end
|
||||
|
||||
for _, rock in ipairs(nvim_rocks) do
|
||||
local rockspec = Rocks.rockspec("build/" .. rock.name .. ".rockspec")
|
||||
if rockspec then
|
||||
local url = rockspec.source and rockspec.source.url
|
||||
-- parse github short url
|
||||
if url and url:find("^%a+://github.com/") then
|
||||
url = url:gsub("^%a+://github.com/", "")
|
||||
local parts = vim.split(url, "/")
|
||||
url = parts[1] .. "/" .. parts[2]
|
||||
end
|
||||
if url then
|
||||
rock.url = url
|
||||
print(rock.name .. " " .. url)
|
||||
else
|
||||
print("Error: " .. rock.name .. " missing source url\n\n")
|
||||
print(vim.inspect(rockspec) .. "\n")
|
||||
end
|
||||
end
|
||||
end
|
||||
Util.write_file("lua/lazy/community/rocks.lua", "return \n" .. vim.inspect(nvim_rocks))
|
||||
end
|
||||
|
||||
M.build()
|
||||
|
||||
return M
|
Loading…
Add table
Add a link
Reference in a new issue