1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
local publish = require("mqtt.publish")
local json = require("cjson")
local hostname
local f = io.open("/proc/sys/kernel/hostname")
hostname = f:read()
f:close()
local urlprefix=("http://build.alpinelinux.org/buildlogs/%s"):format(hostname)
local m = {}
--local logtarget="distfiles.alpinelinux.org:/var/cache/distfiles/buildlogs/"..hostname
function shell_escape(args)
local ret = {}
for _,a in pairs(args) do
s = tostring(a)
if s:match("[^A-Za-z0-9_/:=-]") then
s = "'"..s:gsub("'", "'\\''").."'"
end
table.insert(ret,s)
end
return table.concat(ret, " ")
end
function run(args)
local h = io.popen(shell_escape(args))
local outstr = h:read("*a")
return h:close(), outstr
end
function m.postbuild(aport, success, repodest, arch, logfile)
-- upload log
local loghost,logdirprefix = (logtarget or ""):match("(.*):(.*)")
if logfile and loghost and logdirprefix then
local logdir = logdirprefix.."/"..aport:get_repo_name().."/"..aport.pkgname.."/"
run{"ssh", loghost, "mkdir", "-p", logdir}
run{"scp", logfile, loghost..":"..logdir}
end
if not success then
local topic = ("build/%s/errors"):format(hostname)
local payload = json.encode{
pkgname = aport.pkgname,
hostname = hostname,
reponame = aport:get_repo_name(),
logurl = ("%s/%s/%s-%s-r%s.log"):format(
urlprefix,
(string.match(aport.dir,"[^/]+/[^/]+$")),
aport.pkgname, aport.pkgver, aport.pkgrel),
status = success
}
publish.single(topic, payload, nil, nil, "msg.alpinelinux.org")
end
end
return m
|