blob: fe609d25adccffe0c289563a654d55e03d6a17b1 [file] [log] [blame]
local m = {}
local last_str = ''
function iop(str)
io.write(('\b \b'):rep(#last_str)) -- erase old line
io.write(str) -- write new line
io.flush()
last_str = str
end
newoption({ trigger = 'no-download-progress', description = 'Hide progress?' })
function m.github(project, tag)
local dependencies = os.getenv('DEPENDENCIES')
if dependencies == nil then
dependencies = path.getabsolute(_WORKING_DIR) .. '/dependencies'
os.mkdir(dependencies)
end
local hash = string.sub(string.sha1(project .. tag), 0, 9)
if not os.isdir(dependencies .. '/' .. hash) then
function progress(total, current)
local ratio = current / total
ratio = math.min(math.max(ratio, 0), 1)
local percent = math.floor(ratio * 100)
if total == current then
iop('')
else
iop('Downloading ' .. project .. ' ' .. percent .. '%')
end
end
local downloadFilename = dependencies .. '/' .. hash .. '.zip'
http.download(
'https://github.com/' .. project .. '/archive/' .. tag .. '.zip',
downloadFilename,
-- Download progress explodes the github logs with megabytes of text.
-- github runners have a "CI" environment variable.
{
progress = not _OPTIONS['no-download-progress']
and os.getenv('CI') ~= 'true'
and progress,
}
)
print('Downloaded ' .. project .. '.')
zip.extract(downloadFilename, dependencies .. '/' .. hash)
os.remove(downloadFilename)
end
local dirs = os.matchdirs(dependencies .. '/' .. hash .. '/*')
local iter = pairs(dirs)
local currentKey, currentValue = iter(dirs)
print('Dependency ' .. project .. ' located at:')
print(' ' .. currentValue)
return currentValue
end
return m