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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
require "sinatra"
require_relative "nyacommon"
require_relative "config"
include ERB::Util
Thread.report_on_exception = true
$queue = Queue.new
Thread.new {
while item = $queue.pop
system("ruby", File.expand_path("../nyabuild.rb", __FILE__),
item[0], item[1])
end
}
get "/" do
@projects = NyaConfig.projects.keys
erb :index
end
get "/robots.txt" do
<<~END
User-agent: *
Disallow: /
END
end
get "/:project" do |project|
halt 400 unless NyaUtils.valid_as_id?(project)
@jobs = NyaUtils.find_jobs_for_project(project).take(20).map { |jobid|
pats = NyaUtils.find_logs_for_job(project, jobid).map { |name|
meta = NyaUtils.read_log_meta(project, jobid, name)
[name, meta]
}
[jobid, pats]
}
erb :project
end
get "/:project/:jobid" do |project, jobid|
halt 400 unless NyaUtils.valid_as_id?(project, jobid)
@patterns = NyaUtils.find_logs_for_job(project, jobid).map { |name|
meta = NyaUtils.read_log_meta(project, jobid, name)
[name, meta]
}
erb :job
end
get "/:project/:jobid/:pattern" do |project, jobid, pattern|
halt 400 unless NyaUtils.valid_as_id?(project, jobid, pattern)
@logid = "#{project}/#{jobid}/#{pattern}"
@log = NyaUtils.open_log(project, jobid, pattern, &:read).force_encoding("UTF-8").scrub
erb :log
end
post "/:project" do |project|
halt 401 unless NyaUtils.equal_str?(NyaConfig.secret, params[:secret])
halt 400 unless NyaUtils.valid_as_id?(project) && params[:branch]
halt 404 unless NyaConfig.project(project.intern)
$queue << [project, params[:branch]]
"queued"
end
__END__
@@ layout
<!DOCTYPE html>
<meta charset=UTF-8>
<meta name=viewport content="width=device-width,initial-scale=1">
<title>ci.rhe.jp</title>
<style>
.unknown { color: gray; }
.success { color: green; }
.failure { color: red; }
</style>
<!--
∧,,,∧
( )
-->
<%= yield %>
@@ index
<h1>Projects</h1>
<ul>
<% @projects.each do |proj| %>
<li><a href="/<%=h proj %>"><%=h proj %></a>
<% end %>
</ul>
@@ project
<h1><%=h params[:project] %></h1>
<% @jobs.each do |jobid, pats| %>
<h2><%=h jobid %></h2>
<ul>
<% pats.each do |pat, meta| %>
<li><span class="<%=h meta[:result]&.chomp || "unknown" %>">
<%=h meta[:result]&.chomp || "unknown" %></span>
<span><%=h meta[:time] ? "%.2fs" % meta[:time].to_f : "-" %></span>
<a href="/<%=h params[:project] %>/<%=h jobid %>/<%=h pat %>"><%=h pat %></a>
<% end %>
</ul>
<% end %>
@@ job
<h1><%=h params[:project] %>/<%=h params[:jobid] %></h1>
<ul>
<% @patterns.each do |pat, meta| %>
<li><span class="<%=h meta[:result]&.chomp || "unknown" %>">
<%=h meta[:result]&.chomp || "unknown" %></span>
<span><%=h meta[:time] ? "%.2fs" % meta[:time].to_f : "-" %></span>
<a href="/<%=h params[:project] %>/<%=h params[:jobid] %>/<%=h pat %>"
><%=h pat %></a>
<% end %>
</ul>
@@ log
<h1><%=h @logid %></h1>
<pre><%=h @log %></pre>
|