ianheggie/cruisecontrol.rb

View on GitHub
app/views/builds/show.html.erb

Summary

Maintainability
Test Coverage
<% @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>