app/views/builds/show.html.erb
<% @rss_feeds = {"#{@project.name} builds" => {:controller => 'projects', :action => 'show', :id => @project, :format => 'rss'}} -%>
<div id="build">
<div class="left_column">
<ul class="builds_list">
<li class="build_link builder_control">
<%= render :partial => 'builds/build_buttons', :locals => { :project => @project } %>
</li>
<% @builds_for_navigation_list.each do |build| %>
<li class="build_link<%= ' selected' if @build.label == build.label %>">
<%= coverage_icon(build) %>
<%= link_to_build(@project, build) %>
</li>
<% end %>
<% unless @builds_for_dropdown.empty? %>
<li class="build_link old_build_selector">
<label for="select_build">Older:</label>
<select id="select_build">
<%= content_tag :option, "Older Builds...", :value => "" %>
<% @builds_for_dropdown.each do |build| %>
<%= content_tag :option, build_label(build), :value => build_path(:project => @project.name, :build => build.label) %>
<% end %>
</select>
</li>
<% end %>
</ul>
</div>
<div class="main_content">
<div class="build_header">
<h1>
<%= h @project.name %> build <%= h @build.abbreviated_label %>
</h1>
<div id="project_build_now" class="builder_control">
<%= render :partial => "builds/build_buttons", :locals => { :project => @project } %>
</div>
<div class="build_time">
<%= display_build_time %>
</div>
</div>
<div class="build_details">
<% test_failures = failures_and_errors_if_any(@build.output) %>
<% plugin_errors = @build.plugin_errors %>
<% build_artifacts = @build.additional_artifacts %>
<ul class="build_nav">
<li class="section_name active"><a href="#build_log">Build Log</a></li>
<li class="section_name"><a href="#build_changeset">Build Changeset</a></li>
<% if test_failures.any? %>
<li class="section_name"><a href="#test_failures">Test Failures/Errors</a></li>
<% end %>
<% if plugin_errors.present? %>
<li class="section_name"><a href="#plugin_errors">Plugin Errors</a></li>
<% end %>
<% if build_artifacts.any? %>
<li class="section_name"><a href="#build_artifacts">Build Artifacts</a></li>
<% end %>
<li class="section_name">
<a href="#project_settings">Project Settings</a>
</li>
<li class="section_name">
<a href="#build_script">Build Script</a>
</li>
<li class="section_name">
<a href="#brakeman_report">Security Report</a>
</li>
<% coverage_report = File.join(@build.artifacts_directory, 'coverage/index.html') -%>
<% if File.exist?(coverage_report) -%>
<li class="section_link">
<%= link_to 'Coverage Report', build_artifact_path(:project => @project.name, :build => @build.label, :path => 'coverage/index.html') %>
</li>
<% end -%>
</ul>
<div class="sections">
<div class="section active" id="build_log">
<a name="build_log"></a>
<% if @build.output_exceeds_max_file_display_length? %>
<p>
The size of the file you're viewing now is <%= number_to_human_size(@build.build_log.size) %>, which is too big to display in the dashboard;
CC.rb is configured to truncate any files longer than <%= number_to_human_size(CruiseControl::Configuration.max_file_display_length) %>.
You can override this value in <code>site_config.rb</code> by setting <code>max_file_display_length</code>
to your desired value in bytes (e.g. <code>50.kilobytes</code>), or <code>nil</code> to allow files of any length.
</p>
<p>File path: <code><%= @build.build_log.expand_path %></code><br/></p>
<% end %>
<p>
<%= button_tag "Download full log", :href => build_artifact_path(:project => @project.name, :build => @build.label, :path => 'build.log', :attachment => 1) %>
or
<%= link_to "View full log", build_artifact_path(:project => @project.name, :build => @build.label, :path => 'build.log') %>
</p>
<div class="section_content terminal_output"><%= format_build_log(@build.output).html_safe %></div>
</div>
<div class="section" id="build_changeset">
<a name="build_changeset"></a>
<%= link_to_changeset %>
<div class="section_content terminal_output"><%= format_changeset_log(@build.changeset) %></div>
</div>
<% if test_failures.any? %>
<div class="section" id="test_failures">
<a name="test_failures"></a>
<div class="section_content">
<ul>
<% test_failures.each do |failure| %>
<li class="test_failure <%= failure.type.underscore %>">
<div class="test_name"><%= failure.test_name %></div>
<div class="stacktrace"><%= link_to_code(failure.stacktrace).html_safe %></div>
<div class="message terminal_output"><%= failure.message %></div>
</li>
<% end %>
</ul>
</div>
</div>
<% end %>
<% if plugin_errors.present? %>
<div class="section" id="plugin_errors">
<a name="plugin_errors"></a>
<div class="section_content terminal_output"><%= h plugin_errors %></div>
</div>
<% end %>
<% unless @build.additional_artifacts.empty? %>
<div class="section" id="build_artifacts">
<a name="build_artifacts"></a>
<div class="section_content">
<% @build.additional_artifacts.each do |artifact| %>
<div class="artifact">
<%= link_to artifact, build_artifact_path(:project => @project.name, :build => @build.label, :path => artifact) %>
</div>
<% end %>
</div>
</div>
<% end %>
<div class="section" id="project_settings">
<a name="project_settings"></a>
<div class="section_content terminal_output"><%= format_project_settings(@build.project_settings) %></div>
</div>
<div class="section" id="build_script">
<a name="build_script"></a>
<div class="section_content terminal_output"><%= format_build_script(@build.build_script) %></div>
</div>
<div class="section" id="brakeman_report">
<a name="brakeman_report"></a>
<div class="section_content">
<% if @brakeman.valid? -%>
<p><%= image_tag @brakeman.warning_chart -%></p>
<p><%= image_tag @brakeman.scanned_chart -%></p>
<% else %>
<div class="section_content terminal_output">Please execute: bundle exec brakeman --quiet --summary --output tmp/brakeman.csv;</div>
<% end %>
</div>
</div>
</div>
</div>
</div>
</div>