Cleanup CI code after refactoring and fix several 500 errors
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
This commit is contained in:
parent
f6223ffb31
commit
04c7dc2a9e
|
@ -1,41 +1,11 @@
|
||||||
module Ci
|
module Ci
|
||||||
class BuildsController < Ci::ApplicationController
|
class BuildsController < Ci::ApplicationController
|
||||||
before_action :authenticate_user!, except: [:status, :show]
|
before_action :authenticate_user!, except: [:status]
|
||||||
before_action :authenticate_public_page!, only: :show
|
|
||||||
before_action :project
|
before_action :project
|
||||||
before_action :authorize_access_project!, except: [:status, :show]
|
before_action :authorize_access_project!, except: [:status]
|
||||||
before_action :authorize_manage_project!, except: [:status, :show, :retry, :cancel]
|
before_action :authorize_manage_project!, except: [:status, :retry, :cancel]
|
||||||
before_action :authorize_manage_builds!, only: [:retry, :cancel]
|
before_action :authorize_manage_builds!, only: [:retry, :cancel]
|
||||||
before_action :build, except: [:show]
|
before_action :build
|
||||||
layout 'ci/build'
|
|
||||||
|
|
||||||
def show
|
|
||||||
if params[:id] =~ /\A\d+\Z/
|
|
||||||
@build = build
|
|
||||||
else
|
|
||||||
# try to find commit by sha
|
|
||||||
commit = commit_by_sha
|
|
||||||
|
|
||||||
if commit
|
|
||||||
# Redirect to commit page
|
|
||||||
redirect_to ci_project_commit_path(@project, @build.commit)
|
|
||||||
return
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
raise ActiveRecord::RecordNotFound unless @build
|
|
||||||
|
|
||||||
@builds = @project.commits.find_by_sha(@build.sha).builds.order('id DESC')
|
|
||||||
@builds = @builds.where("id not in (?)", @build.id).page(params[:page]).per(20)
|
|
||||||
@commit = @build.commit
|
|
||||||
|
|
||||||
respond_to do |format|
|
|
||||||
format.html
|
|
||||||
format.json do
|
|
||||||
render json: @build.to_json(methods: :trace_html)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def retry
|
def retry
|
||||||
if @build.commands.blank?
|
if @build.commands.blank?
|
||||||
|
@ -68,7 +38,7 @@ module Ci
|
||||||
end
|
end
|
||||||
|
|
||||||
def build
|
def build
|
||||||
@build ||= project.builds.unscoped.find_by(id: params[:id])
|
@build ||= project.builds.unscoped.find_by!(id: params[:id])
|
||||||
end
|
end
|
||||||
|
|
||||||
def commit_by_sha
|
def commit_by_sha
|
||||||
|
|
|
@ -5,12 +5,6 @@ module Ci
|
||||||
before_action :project
|
before_action :project
|
||||||
before_action :authorize_access_project!, except: [:status, :show, :cancel]
|
before_action :authorize_access_project!, except: [:status, :show, :cancel]
|
||||||
before_action :authorize_manage_builds!, only: [:cancel]
|
before_action :authorize_manage_builds!, only: [:cancel]
|
||||||
before_action :commit, only: :show
|
|
||||||
layout 'ci/commit'
|
|
||||||
|
|
||||||
def show
|
|
||||||
@builds = @commit.builds
|
|
||||||
end
|
|
||||||
|
|
||||||
def status
|
def status
|
||||||
commit = Ci::Project.find(params[:project_id]).commits.find_by_sha!(params[:id])
|
commit = Ci::Project.find(params[:project_id]).commits.find_by_sha!(params[:id])
|
||||||
|
|
|
@ -20,6 +20,6 @@ class Projects::BuildsController < Projects::ApplicationController
|
||||||
private
|
private
|
||||||
|
|
||||||
def build
|
def build
|
||||||
@build ||= ci_project.builds.unscoped.find_by(id: params[:id])
|
@build ||= ci_project.builds.unscoped.find_by!(id: params[:id])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -314,4 +314,8 @@ module ApplicationHelper
|
||||||
|
|
||||||
html.html_safe
|
html.html_safe
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def truncate_first_line(message, length = 50)
|
||||||
|
truncate(message.each_line.first.chomp, length: length) if message
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,24 +0,0 @@
|
||||||
module Ci
|
|
||||||
module CommitsHelper
|
|
||||||
def ci_commit_path(commit)
|
|
||||||
ci_project_commits_path(commit.project, commit)
|
|
||||||
end
|
|
||||||
|
|
||||||
def commit_link(commit)
|
|
||||||
link_to(commit.short_sha, ci_commit_path(commit))
|
|
||||||
end
|
|
||||||
|
|
||||||
def truncate_first_line(message, length = 50)
|
|
||||||
truncate(message.each_line.first.chomp, length: length) if message
|
|
||||||
end
|
|
||||||
|
|
||||||
def ci_commit_title(commit)
|
|
||||||
content_tag :span do
|
|
||||||
link_to(
|
|
||||||
simple_sanitize(commit.project.name), ci_project_path(commit.project)
|
|
||||||
) + ' @ ' +
|
|
||||||
gitlab_commit_link(@project, @commit.sha)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,14 +1,16 @@
|
||||||
|
- gl_project = build.project.gl_project
|
||||||
- if build.commit && build.project
|
- if build.commit && build.project
|
||||||
%tr.build
|
%tr.build
|
||||||
%td.build-link
|
%td.build-link
|
||||||
= link_to ci_project_build_url(build.project, build) do
|
= link_to namespace_project_build_path(gl_project.namespace, gl_project, build) do
|
||||||
%strong #{build.id}
|
%strong #{build.id}
|
||||||
|
|
||||||
%td.status
|
%td.status
|
||||||
= ci_status_with_icon(build.status)
|
= ci_status_with_icon(build.status)
|
||||||
|
|
||||||
%td.commit-link
|
%td.commit-link
|
||||||
= commit_link(build.commit)
|
= link_to ci_status_path(build.commit) do
|
||||||
|
%strong #{build.commit.short_sha}
|
||||||
|
|
||||||
%td.runner
|
%td.runner
|
||||||
- if build.runner
|
- if build.runner
|
||||||
|
|
|
@ -96,6 +96,7 @@
|
||||||
%table.builds.runner-builds
|
%table.builds.runner-builds
|
||||||
%thead
|
%thead
|
||||||
%tr
|
%tr
|
||||||
|
%th Build ID
|
||||||
%th Status
|
%th Status
|
||||||
%th Project
|
%th Project
|
||||||
%th Commit
|
%th Commit
|
||||||
|
@ -103,6 +104,11 @@
|
||||||
|
|
||||||
- @builds.each do |build|
|
- @builds.each do |build|
|
||||||
%tr.build
|
%tr.build
|
||||||
|
%td.id
|
||||||
|
- gl_project = build.project.gl_project
|
||||||
|
= link_to namespace_project_build_path(gl_project.namespace, gl_project, build) do
|
||||||
|
= build.id
|
||||||
|
|
||||||
%td.status
|
%td.status
|
||||||
= ci_status_with_icon(build.status)
|
= ci_status_with_icon(build.status)
|
||||||
|
|
||||||
|
@ -110,8 +116,8 @@
|
||||||
= build.project.name
|
= build.project.name
|
||||||
|
|
||||||
%td.build-link
|
%td.build-link
|
||||||
= link_to ci_project_build_path(build.project, build) do
|
= link_to ci_status_path(build.commit) do
|
||||||
%strong #{build.short_sha}
|
%strong #{build.commit.short_sha}
|
||||||
|
|
||||||
%td.timestamp
|
%td.timestamp
|
||||||
- if build.finished_at
|
- if build.finished_at
|
||||||
|
|
|
@ -1,49 +0,0 @@
|
||||||
%tr.build
|
|
||||||
%td.status
|
|
||||||
= ci_status_with_icon(build.status)
|
|
||||||
|
|
||||||
%td.build-link
|
|
||||||
= link_to ci_project_build_path(build.project, build) do
|
|
||||||
%strong Build ##{build.id}
|
|
||||||
|
|
||||||
- if defined?(ref)
|
|
||||||
%td
|
|
||||||
= build.ref
|
|
||||||
|
|
||||||
%td
|
|
||||||
= build.stage
|
|
||||||
|
|
||||||
%td
|
|
||||||
= build.name
|
|
||||||
.pull-right
|
|
||||||
- if build.tags.any?
|
|
||||||
- build.tag_list.each do |tag|
|
|
||||||
%span.label.label-primary
|
|
||||||
= tag
|
|
||||||
- if build.trigger_request
|
|
||||||
%span.label.label-info triggered
|
|
||||||
- if build.allow_failure
|
|
||||||
%span.label.label-danger allowed to fail
|
|
||||||
|
|
||||||
%td.duration
|
|
||||||
- if build.duration
|
|
||||||
#{duration_in_words(build.finished_at, build.started_at)}
|
|
||||||
|
|
||||||
%td.timestamp
|
|
||||||
- if build.finished_at
|
|
||||||
%span #{time_ago_in_words build.finished_at} ago
|
|
||||||
|
|
||||||
- if build.project.coverage_enabled?
|
|
||||||
%td.coverage
|
|
||||||
- if build.coverage
|
|
||||||
#{build.coverage}%
|
|
||||||
|
|
||||||
%td
|
|
||||||
- if defined?(controls) && current_user && can?(current_user, :manage_builds, gl_project)
|
|
||||||
.pull-right
|
|
||||||
- if build.active?
|
|
||||||
= link_to cancel_ci_project_build_path(build.project, build, return_to: request.original_url), title: 'Cancel build' do
|
|
||||||
%i.fa.fa-remove.cred
|
|
||||||
- elsif build.commands.present?
|
|
||||||
= link_to retry_ci_project_build_path(build.project, build, return_to: request.original_url), method: :post, title: 'Retry build' do
|
|
||||||
%i.fa.fa-repeat
|
|
|
@ -1,165 +0,0 @@
|
||||||
#up-build-trace
|
|
||||||
- if @commit.matrix_for_ref?(@build.ref)
|
|
||||||
%ul.center-top-menu
|
|
||||||
- @commit.builds_without_retry_for_ref(@build.ref).each do |build|
|
|
||||||
%li{class: ('active' if build == @build) }
|
|
||||||
= link_to ci_project_build_url(@project, build) do
|
|
||||||
= ci_icon_for_status(build.status)
|
|
||||||
%span
|
|
||||||
- if build.name
|
|
||||||
= build.name
|
|
||||||
- else
|
|
||||||
= build.id
|
|
||||||
|
|
||||||
|
|
||||||
- unless @commit.builds_without_retry_for_ref(@build.ref).include?(@build)
|
|
||||||
%li.active
|
|
||||||
%a
|
|
||||||
Build ##{@build.id}
|
|
||||||
·
|
|
||||||
%i.fa.fa-warning-sign
|
|
||||||
This build was retried.
|
|
||||||
|
|
||||||
.gray-content-block
|
|
||||||
.build-head
|
|
||||||
%h4
|
|
||||||
- if @build.commit.tag?
|
|
||||||
Build for tag
|
|
||||||
%code #{@build.ref}
|
|
||||||
- else
|
|
||||||
Build for commit
|
|
||||||
%strong.monospace= commit_link(@build.commit)
|
|
||||||
from
|
|
||||||
|
|
||||||
= link_to ci_project_path(@build.project, ref: @build.ref) do
|
|
||||||
%strong.monospace= "#{@build.ref}"
|
|
||||||
|
|
||||||
- if @build.duration
|
|
||||||
.pull-right
|
|
||||||
%span
|
|
||||||
%i.fa.fa-time
|
|
||||||
#{duration_in_words(@build.finished_at, @build.started_at)}
|
|
||||||
|
|
||||||
.clearfix
|
|
||||||
= ci_status_with_icon(@build.status)
|
|
||||||
.pull-right
|
|
||||||
= @build.updated_at.stamp('19:00 Aug 27')
|
|
||||||
|
|
||||||
.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
|
|
||||||
.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
|
|
||||||
|
|
||||||
%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}%
|
|
||||||
|
|
||||||
|
|
||||||
.build-widget
|
|
||||||
%h4.title
|
|
||||||
Build
|
|
||||||
- if current_user && can?(current_user, :manage_builds, gl_project)
|
|
||||||
.pull-right
|
|
||||||
- if @build.active?
|
|
||||||
= link_to "Cancel", cancel_ci_project_build_path(@project, @build), class: 'btn btn-sm btn-danger'
|
|
||||||
- elsif @build.commands.present?
|
|
||||||
= link_to "Retry", retry_ci_project_build_path(@project, @build), class: 'btn btn-sm btn-primary', method: :post
|
|
||||||
|
|
||||||
- if @build.duration
|
|
||||||
%p
|
|
||||||
%span.attr-name Duration:
|
|
||||||
#{duration_in_words(@build.finished_at, @build.started_at)}
|
|
||||||
%p
|
|
||||||
%span.attr-name Created:
|
|
||||||
#{time_ago_in_words(@build.created_at)} ago
|
|
||||||
- if @build.finished_at
|
|
||||||
%p
|
|
||||||
%span.attr-name Finished:
|
|
||||||
#{time_ago_in_words(@build.finished_at)} ago
|
|
||||||
%p
|
|
||||||
%span.attr-name Runner:
|
|
||||||
- if @build.runner && current_user && current_user.admin
|
|
||||||
\#{link_to "##{@build.runner.id}", ci_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 #{build_commit_link @build}
|
|
||||||
%p
|
|
||||||
%span.attr-name Branch:
|
|
||||||
#{build_ref_link @build}
|
|
||||||
%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, "other build")} for #{@build.short_sha}:
|
|
||||||
%table.builds
|
|
||||||
- @builds.each_with_index do |build, i|
|
|
||||||
%tr.build
|
|
||||||
%td
|
|
||||||
= ci_icon_for_status(build.status)
|
|
||||||
%td
|
|
||||||
= link_to ci_project_build_url(@project, build) do
|
|
||||||
- if build.name
|
|
||||||
= build.name
|
|
||||||
- else
|
|
||||||
%span ##{build.id}
|
|
||||||
|
|
||||||
%td.status= build.status
|
|
||||||
|
|
||||||
|
|
||||||
= paginate @builds
|
|
||||||
|
|
||||||
|
|
||||||
:javascript
|
|
||||||
new CiBuild("#{ci_project_build_url(@project, @build)}", "#{@build.status}")
|
|
|
@ -7,7 +7,7 @@
|
||||||
|
|
||||||
|
|
||||||
%td.build-link
|
%td.build-link
|
||||||
= link_to ci_project_commits_path(commit.project, commit.sha) do
|
= link_to ci_status_path(commit) do
|
||||||
%strong #{commit.short_sha}
|
%strong #{commit.short_sha}
|
||||||
|
|
||||||
%td.build-message
|
%td.build-message
|
||||||
|
|
|
@ -1,89 +0,0 @@
|
||||||
.commit-info
|
|
||||||
.append-bottom-20
|
|
||||||
= ci_status_with_icon(@commit.status)
|
|
||||||
|
|
||||||
.gray-content-block.middle-block
|
|
||||||
%pre.commit-message
|
|
||||||
- if @commit.git_commit_message
|
|
||||||
#{@commit.git_commit_message}
|
|
||||||
- else
|
|
||||||
No commit message
|
|
||||||
|
|
||||||
.gray-content-block.second-block
|
|
||||||
.row
|
|
||||||
.col-sm-6
|
|
||||||
%p
|
|
||||||
%span.attr-name Commit:
|
|
||||||
#{gitlab_commit_link(@project, @commit.sha)}
|
|
||||||
%p
|
|
||||||
- if @commit.refs.present?
|
|
||||||
%span.attr-name Refs:
|
|
||||||
- @commit.refs.each do |ref|
|
|
||||||
#{gitlab_ref_link(@project, ref)}
|
|
||||||
.col-sm-6
|
|
||||||
- if @commit.git_author_name || @commit.git_author_email
|
|
||||||
%p
|
|
||||||
%span.attr-name Author:
|
|
||||||
#{@commit.git_author_name} (#{@commit.git_author_email})
|
|
||||||
- if @commit.created_at
|
|
||||||
%p
|
|
||||||
%span.attr-name Created at:
|
|
||||||
#{@commit.created_at.to_s(:short)}
|
|
||||||
|
|
||||||
- if current_user && can?(current_user, :manage_builds, gl_project)
|
|
||||||
- if @commit.builds.running_or_pending.any?
|
|
||||||
.pull-right
|
|
||||||
= link_to "Cancel", cancel_ci_project_commits_path(@project, @commit), class: 'btn btn-sm btn-danger'
|
|
||||||
|
|
||||||
|
|
||||||
- if @commit.yaml_errors.present?
|
|
||||||
.bs-callout.bs-callout-danger
|
|
||||||
%h4 Found errors in your .gitlab-ci.yml:
|
|
||||||
%ul
|
|
||||||
- @commit.yaml_errors.split(",").each do |error|
|
|
||||||
%li= error
|
|
||||||
|
|
||||||
- unless @commit.ci_yaml_file
|
|
||||||
.bs-callout.bs-callout-warning
|
|
||||||
\.gitlab-ci.yml not found in this commit
|
|
||||||
|
|
||||||
- @commit.refs.each do |ref|
|
|
||||||
%h3
|
|
||||||
Builds for #{gitlab_ref_link(@project, ref)}
|
|
||||||
- if @commit.duration_for_ref(ref) > 0
|
|
||||||
%small.pull-right
|
|
||||||
%i.fa.fa-time
|
|
||||||
#{time_interval_in_words @commit.duration_for_ref(ref)}
|
|
||||||
|
|
||||||
%table.table.builds
|
|
||||||
%thead
|
|
||||||
%tr
|
|
||||||
%th Status
|
|
||||||
%th Build ID
|
|
||||||
%th Stage
|
|
||||||
%th Name
|
|
||||||
%th Duration
|
|
||||||
%th Finished at
|
|
||||||
- if @project.coverage_enabled?
|
|
||||||
%th Coverage
|
|
||||||
%th
|
|
||||||
= render @commit.builds_without_retry.for_ref(ref), controls: true
|
|
||||||
|
|
||||||
- if @commit.retried_builds.any?
|
|
||||||
%h3
|
|
||||||
Retried builds
|
|
||||||
|
|
||||||
%table.table.builds
|
|
||||||
%thead
|
|
||||||
%tr
|
|
||||||
%th Status
|
|
||||||
%th Build ID
|
|
||||||
%th Ref
|
|
||||||
%th Stage
|
|
||||||
%th Name
|
|
||||||
%th Duration
|
|
||||||
%th Finished at
|
|
||||||
- if @project.coverage_enabled?
|
|
||||||
%th Coverage
|
|
||||||
%th
|
|
||||||
= render @commit.retried_builds, ref: true
|
|
|
@ -1,11 +0,0 @@
|
||||||
!!! 5
|
|
||||||
%html{ lang: "en"}
|
|
||||||
= render 'layouts/head'
|
|
||||||
%body{class: "ci-body #{user_application_theme}", 'data-page' => body_data_page}
|
|
||||||
- header_title ci_commit_title(@commit)
|
|
||||||
- if current_user
|
|
||||||
= render "layouts/header/default", title: header_title
|
|
||||||
- else
|
|
||||||
= render "layouts/header/public", title: header_title
|
|
||||||
|
|
||||||
= render 'layouts/ci/page', sidebar: 'nav_project'
|
|
|
@ -1,11 +0,0 @@
|
||||||
!!! 5
|
|
||||||
%html{ lang: "en"}
|
|
||||||
= render 'layouts/head'
|
|
||||||
%body{class: "ci-body #{user_application_theme}", 'data-page' => body_data_page}
|
|
||||||
- header_title ci_commit_title(@commit)
|
|
||||||
- if current_user
|
|
||||||
= render "layouts/header/default", title: header_title
|
|
||||||
- else
|
|
||||||
= render "layouts/header/public", title: header_title
|
|
||||||
|
|
||||||
= render 'layouts/ci/page', sidebar: 'nav_project'
|
|
|
@ -28,16 +28,14 @@ Gitlab::Application.routes.draw do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
resource :charts, only: [:show]
|
resources :commits, only: [] do
|
||||||
|
|
||||||
resources :commits, only: [:show] do
|
|
||||||
member do
|
member do
|
||||||
get :status
|
get :status
|
||||||
get :cancel
|
get :cancel
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
resources :builds, only: [:show] do
|
resources :builds, only: [] do
|
||||||
member do
|
member do
|
||||||
get :cancel
|
get :cancel
|
||||||
get :status
|
get :status
|
||||||
|
|
Loading…
Reference in New Issue