-
Notifications
You must be signed in to change notification settings - Fork 10
/
build_log.rb
59 lines (46 loc) · 2.13 KB
/
build_log.rb
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
require 'open-uri'
module NixPkgsMonitor module BuildLog
def BuildLog.lint(log)
package_names = [ "gobject-introspection",
# documentation
"gtkdoc-check", "gtkdoc-rebase", "gtkdoc-mkpdf",
"gtk-doc documentation", "bison", "byacc", "flex", "lex", "pkg-config",
"doxygen", "msgfmt", "gmsgfmt", "xgettext", "msgmerge", "gnome-doc-utils",
"documentation", "manpages", "txt2html", "rst2html", "xmlto", "asciidoc",
# archives
"lzma", "zlib", "bzlib",
# TODO: something for gif, jpeg etc
]
lint = log.lines.select do |line|
linedc = line.downcase
package_names.find{ |pn| linedc =~ /checking .*#{pn}.*\.\.\..*(no|:)/ or linedc =~ /could not find .*#{pn}/ } or
linedc.include? 'not installed' or # perl prequisites
linedc =~ /skipped.* require/ or # perl test dependencies
linedc =~ /skipped.* no.* available/ or # perl test dependencies
linedc.=~ /subroutine .* redefined at/ or# perl warning
linedc =~ /prerequisite .* not found/ or # perl warning
linedc.include? "module not found" or # perl warning
linedc =~ /failed.*test/ or # perl test failure
linedc =~ /skipped:.*only with/ # perl warning
end
return lint
end
def BuildLog.sanitize(log, outpath, substitutes = {})
sanitized = log.dup
sanitized.gsub!(outpath, 'OUTPATH') unless outpath.to_s.empty?
pkgname = outpath && outpath.partition('-')[2]
sanitized.gsub!(%r{/tmp/nix-build-#{pkgname}.drv-\d*/#{pkgname}},'BUILDPATH') unless pkgname.to_s.empty?
substitutes.each{ |orig, value| sanitized.gsub!(orig, value) }
sanitized.gsub(%r{/nix/store/(\S{32})}, '/nix/store/...')
end
def BuildLog.get_hydra_log(outpath)
open("https://hydra.nixos.org/log/#{outpath.sub(%r{^/nix/store/},"")}").read rescue nil
end
def BuildLog.get_db_log(outpath)
build = DB[:builds][:outpath => outpath]
build && build[:log]
end
def BuildLog.get_log(outpath)
get_db_log(outpath) || get_hydra_log(outpath)
end
end end