diff --git a/lua/nuwiki/install.lua b/lua/nuwiki/install.lua index 85b1d5f..350d501 100644 --- a/lua/nuwiki/install.lua +++ b/lua/nuwiki/install.lua @@ -66,28 +66,6 @@ local function build_from_source(dest) return vim.fn.executable(dest) == 1 end --- Gitea API base for this repo. Gitea has no GitHub-style --- `/releases/latest/download/` shortcut, so resolve the asset's real --- download URL (`browser_download_url`) through the API instead. -local REPO_API = 'https://code.gfran.co/api/v1/repos/gffranco/nuwiki' - -local function latest_asset_url(asset_name) - local body = vim.fn.system({ 'curl', '-fsSL', REPO_API .. '/releases/latest' }) - if vim.v.shell_error ~= 0 then - return nil - end - local ok, release = pcall(vim.json.decode, body) - if not ok or type(release) ~= 'table' or type(release.assets) ~= 'table' then - return nil - end - for _, a in ipairs(release.assets) do - if a.name == asset_name then - return a.browser_download_url - end - end - return nil -end - local function download_release(dest) local target = target_triple() if not target then @@ -96,10 +74,13 @@ local function download_release(dest) if vim.fn.executable('curl') ~= 1 or vim.fn.executable('tar') ~= 1 then return false end - local url = latest_asset_url('nuwiki-ls-' .. target .. '.tar.gz') - if not url then - return false - end + -- Gitea serves the most recent release under the `latest` tag segment + -- (`/releases/download/latest/`). Note this is NOT GitHub's + -- `/releases/latest/download/` shape, which Gitea 404s. + local url = string.format( + 'https://code.gfran.co/gffranco/nuwiki/releases/download/latest/nuwiki-ls-%s.tar.gz', + target + ) local archive = vim.fn.tempname() .. '.tar.gz' vim.fn.system({ 'curl', '-fsSL', '-o', archive, url }) if vim.v.shell_error ~= 0 then diff --git a/scripts/download_bin.vim b/scripts/download_bin.vim index da9e4e1..d3b32c1 100644 --- a/scripts/download_bin.vim +++ b/scripts/download_bin.vim @@ -48,30 +48,6 @@ function! s:build_from_source() abort return executable(s:bin) endfunction -" Gitea has no GitHub-style /releases/latest/download/ shortcut, so -" resolve the asset's real download URL (browser_download_url) via the API. -function! s:latest_asset_url(asset) abort - let l:api = 'https://code.gfran.co/api/v1/repos/gffranco/nuwiki/releases/latest' - let l:body = system('curl -fsSL ' . shellescape(l:api)) - if v:shell_error != 0 - return '' - endif - try - let l:release = json_decode(l:body) - catch - return '' - endtry - if type(l:release) != type({}) || !has_key(l:release, 'assets') - return '' - endif - for l:item in l:release.assets - if get(l:item, 'name', '') ==# a:asset - return get(l:item, 'browser_download_url', '') - endif - endfor - return '' -endfunction - function! s:download_release() abort let l:target = s:target() if empty(l:target) @@ -80,10 +56,11 @@ function! s:download_release() abort if !executable('curl') || !executable('tar') return 0 endif - let l:url = s:latest_asset_url('nuwiki-ls-' . l:target . '.tar.gz') - if empty(l:url) - return 0 - endif + " Gitea serves the most recent release under the `latest` tag segment + " (/releases/download/latest/). NOT GitHub's + " /releases/latest/download/ shape, which Gitea 404s. + let l:url = 'https://code.gfran.co/gffranco/nuwiki/releases/download/latest/nuwiki-ls-' + \ . l:target . '.tar.gz' let l:archive = tempname() . '.tar.gz' call system('curl -fsSL -o ' . shellescape(l:archive) . ' ' . shellescape(l:url)) if v:shell_error != 0