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 ci.rhe.jp <%= yield %> @@ index

Projects

@@ project

<%=h params[:project] %>

<% @jobs.each do |jobid, pats| %>

<%=h jobid %>

<% end %> @@ job

<%=h params[:project] %>/<%=h params[:jobid] %>

@@ log

<%=h @logid %>

<%=h @log %>