- page_title "#{@build.name} (##{@build.id})", "Builds" = render "header_title" .build-page .gray-content-block.top-block Build ##{@build.id} for commit %strong.monospace= link_to @build.commit.short_sha, ci_status_path(@build.commit) from = link_to @build.ref, namespace_project_commits_path(@project.namespace, @project, @build.ref) - merge_request = @build.merge_request - if merge_request via = link_to "merge request #{merge_request.to_reference}", merge_request_path(merge_request) #up-build-trace - builds = @build.commit.builds.latest.to_a - if builds.size > 1 %ul.nav-links.no-top.no-bottom - builds.each do |build| %li{class: ('active' if build == @build) } = link_to namespace_project_build_path(@project.namespace, @project, build) do = ci_icon_for_status(build.status) %span - if build.name = build.name - else = build.id - if @build.retried? %li.active %a Build ##{@build.id} · %i.fa.fa-warning This build was retried. .gray-content-block.middle-block .build-head .clearfix = ci_status_with_icon(@build.status) - if @build.duration %span %i.fa.fa-time #{duration_in_words(@build.finished_at, @build.started_at)} .pull-right #{time_ago_with_tooltip(@build.finished_at) if @build.finished_at} - if @build.stuck? - unless @build.any_runners_online? .bs-callout.bs-callout-warning %p - if no_runners_for_project?(@build.project) This build is stuck, because the project doesn't have any runners online assigned to it. - elsif @build.tags.any? This build is stuck, because you don't have any active runners online with any of these tags assigned to them: - @build.tags.each do |tag| %span.label.label-primary = tag - else This build is stuck, because you don't have any active runners that can run this build. %br Go to = link_to namespace_project_runners_path(@build.project.namespace, @build.project) do Runners page .row.prepend-top-default .col-md-9 .clearfix - if @build.active? .autoscroll-container %button.btn.btn-success.btn-sm#autoscroll-button{:type => "button", :data => {:state => 'disabled'}} enable autoscroll .clearfix #js-build-scroll.scroll-controls = link_to '#up-build-trace', class: 'btn' do %i.fa.fa-angle-up = link_to '#down-build-trace', class: 'btn' do %i.fa.fa-angle-down - if @build.erased? .erased.alert.alert-warning - erased_by = "by #{link_to @build.erased_by.name, user_path(@build.erased_by)}" if @build.erased_by Build has been erased #{erased_by.html_safe} #{time_ago_with_tooltip(@build.erased_at)} - else %pre.trace#build-trace %code.bash = preserve do = raw @build.trace_html %div#down-build-trace .col-md-3 - if @build.coverage .build-widget %h4.title Test coverage %h1 #{@build.coverage}% - if can?(current_user, :read_build, @project) && @build.artifacts? .build-widget.artifacts %h4.title Build artifacts .center .btn-group{ role: :group } = link_to download_namespace_project_build_artifacts_path(@project.namespace, @project, @build), class: 'btn btn-sm btn-primary' do = icon('download') Download - if @build.artifacts_metadata? = link_to browse_namespace_project_build_artifacts_path(@project.namespace, @project, @build), class: 'btn btn-sm btn-primary' do = icon('folder-open') Browse .build-widget.build-controls %h4.title Build ##{@build.id} - if can?(current_user, :update_build, @project) .center .btn-group{ role: :group } - if @build.active? = link_to "Cancel", cancel_namespace_project_build_path(@project.namespace, @project, @build), class: 'btn btn-sm btn-danger', method: :post - elsif @build.retryable? = link_to "Retry", retry_namespace_project_build_path(@project.namespace, @project, @build), class: 'btn btn-sm btn-primary', method: :post - if @build.erasable? = link_to erase_namespace_project_build_path(@project.namespace, @project, @build), class: 'btn btn-sm btn-warning', method: :post, data: { confirm: 'Are you sure you want to erase this build?' } do = icon('eraser') Erase - if @build.has_trace? = link_to 'Raw', raw_namespace_project_build_path(@project.namespace, @project, @build), class: 'btn btn-sm btn-success', target: '_blank' .clearfix - if @build.duration %p %span.attr-name Duration: #{duration_in_words(@build.finished_at, @build.started_at)} %p %span.attr-name Created: #{time_ago_with_tooltip(@build.created_at)} - if @build.finished_at %p %span.attr-name Finished: #{time_ago_with_tooltip(@build.finished_at)} - if @build.erased_at %p %span.attr-name Erased: #{time_ago_with_tooltip(@build.erased_at)} %p %span.attr-name Runner: - if @build.runner && current_user && current_user.admin = link_to "##{@build.runner.id}", admin_runner_path(@build.runner.id) - elsif @build.runner \##{@build.runner.id} - if @build.trigger_request .build-widget %h4.title Trigger %p %span.attr-name Token: #{@build.trigger_request.trigger.short_token} - if @build.trigger_request.variables %p %span.attr-name Variables: %code - @build.trigger_request.variables.each do |key, value| #{key}=#{value} .build-widget %h4.title Commit .pull-right %small = link_to @build.commit.short_sha, ci_status_path(@build.commit), class: "monospace" %p %span.attr-name Branch: = link_to @build.ref, namespace_project_commits_path(@project.namespace, @project, @build.ref) %p %span.attr-name Author: #{@build.commit.git_author_name} %p %span.attr-name Message: #{@build.commit.git_commit_message} - if @build.tags.any? .build-widget %h4.title Tags - @build.tag_list.each do |tag| %span.label.label-primary = tag - if @builds.present? .build-widget %h4.title #{pluralize(@builds.count(:id), "other build")} for = succeed ":" do = link_to @build.commit.short_sha, ci_status_path(@build.commit), class: "monospace" %table.table.builds - @builds.each_with_index do |build, i| %tr.build %td = ci_icon_for_status(build.status) %td = link_to namespace_project_build_path(@project.namespace, @project, build) do - if build.name = build.name - else %span ##{build.id} %td.status= build.status :javascript new CiBuild("#{namespace_project_build_url(@project.namespace, @project, @build)}", "#{@build.status}")