summaryrefslogtreecommitdiff
path: root/local/bin/updateriver
diff options
context:
space:
mode:
Diffstat (limited to 'local/bin/updateriver')
-rwxr-xr-xlocal/bin/updateriver79
1 files changed, 79 insertions, 0 deletions
diff --git a/local/bin/updateriver b/local/bin/updateriver
new file mode 100755
index 0000000..3632cea
--- /dev/null
+++ b/local/bin/updateriver
@@ -0,0 +1,79 @@
+#!/usr/bin/env lua
+
+local home = os.getenv("home") or os.getenv("HOME")
+local cache_dir = home .. "/.cache"
+local zig_cache = cache_dir .. "/zig"
+local proxy_cmd = "ssh -o ProxyCommand='nc -X 5 -x 127.0.0.1:65000 %h %p'"
+
+local project_dir = arg[1] or (home .. "/Projects/river/river")
+
+local function run(cmd)
+ local ok = os.execute(cmd)
+ if not ok then
+ io.stderr:write("failed: " .. cmd .. "\n")
+ os.exit(1)
+ end
+end
+
+local function fetch_git_dep(path, commit)
+ local name = path:match("([^/]+)$"):gsub("^zig%-", "")
+ local tmp = cache_dir .. "/" .. name .. "-tmp"
+ local tarball = cache_dir .. "/" .. name .. ".tar.gz"
+
+ run("rm -rf " .. tmp)
+ run('GIT_SSH_COMMAND="' .. proxy_cmd .. '" git clone git@codeberg.org:' .. path .. ".git " .. tmp)
+ run("git -C " .. tmp .. " checkout " .. commit)
+ run("tar -czf " .. tarball .. " -C " .. cache_dir .. " " .. name .. "-tmp")
+ run("zig fetch --global-cache-dir " .. zig_cache .. " file://" .. tarball)
+ run(
+ "sed -i '/\\."
+ .. name
+ .. ' = /,/\\.hash/{s|.url = "[^"]*"|.url = "file://'
+ .. tarball
+ .. "\"|}' "
+ .. project_dir
+ .. "/build.zig.zon"
+ )
+end
+
+local function fetch_https_dep(url)
+ local filename = url:match("([^/]+)$")
+ local name = filename:gsub("^zig%-", ""):gsub("%-v?[0-9].*$", ""):gsub("%.tar%.gz$", "")
+ local tarball = cache_dir .. "/" .. filename
+
+ run('GIT_SSH_COMMAND="' .. proxy_cmd .. '" curl -x socks5h://127.0.0.1:65000 -Lo ' .. tarball .. " " .. url)
+ run("zig fetch --global-cache-dir " .. zig_cache .. " file://" .. tarball)
+ run(
+ "sed -i '/\\."
+ .. name
+ .. ' = /,/\\.hash/{s|.url = "[^"]*"|.url = "file://'
+ .. tarball
+ .. "\"|}' "
+ .. project_dir
+ .. "/build.zig.zon"
+ )
+end
+
+run("git -C " .. project_dir .. " pull")
+
+local zon = io.open(project_dir .. "/build.zig.zon", "r")
+if not zon then
+ io.stderr:write("cant open build.zig.zon\n")
+ os.exit(1)
+end
+
+for line in zon:lines() do
+ local path, commit = line:match("git%+https://codeberg%.org/([^?]+)%?ref=[^#]+#([a-f0-9]+)")
+ if path and commit then
+ fetch_git_dep(path, commit)
+ else
+ local url = line:match('"(https://codeberg%.org/[^"]+%.tar%.gz)"')
+ if url then
+ fetch_https_dep(url)
+ end
+ end
+end
+
+zon:close()
+
+run("cd " .. project_dir .. " && zig build -Doptimize=ReleaseSafe --prefix " .. home .. "/.local install")