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
<%=h @log %>