Skip to content
Snippets Groups Projects
Unverified Commit 04c7dc2a authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets
Browse files

Cleanup CI code after refactoring and fix several 500 errors

parent f6223ffb
No related branches found
No related tags found
No related merge requests found
Showing with 25 additions and 400 deletions
module Ci
class BuildsController < Ci::ApplicationController
before_action :authenticate_user!, except: [:status, :show]
before_action :authenticate_public_page!, only: :show
before_action :authenticate_user!, except: [:status]
before_action :project
before_action :authorize_access_project!, except: [:status, :show]
before_action :authorize_manage_project!, except: [:status, :show, :retry, :cancel]
before_action :authorize_access_project!, except: [:status]
before_action :authorize_manage_project!, except: [:status, :retry, :cancel]
before_action :authorize_manage_builds!, only: [:retry, :cancel]
before_action :build, except: [:show]
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
before_action :build
 
def retry
if @build.commands.blank?
Loading
Loading
@@ -68,7 +38,7 @@ module Ci
end
 
def build
@build ||= project.builds.unscoped.find_by(id: params[:id])
@build ||= project.builds.unscoped.find_by!(id: params[:id])
end
 
def commit_by_sha
Loading
Loading
Loading
Loading
@@ -5,12 +5,6 @@ module Ci
before_action :project
before_action :authorize_access_project!, except: [:status, :show, :cancel]
before_action :authorize_manage_builds!, only: [:cancel]
before_action :commit, only: :show
layout 'ci/commit'
def show
@builds = @commit.builds
end
 
def status
commit = Ci::Project.find(params[:project_id]).commits.find_by_sha!(params[:id])
Loading
Loading
Loading
Loading
@@ -20,6 +20,6 @@ class Projects::BuildsController < Projects::ApplicationController
private
 
def build
@build ||= ci_project.builds.unscoped.find_by(id: params[:id])
@build ||= ci_project.builds.unscoped.find_by!(id: params[:id])
end
end
Loading
Loading
@@ -314,4 +314,8 @@ module ApplicationHelper
 
html.html_safe
end
def truncate_first_line(message, length = 50)
truncate(message.each_line.first.chomp, length: length) if message
end
end
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
- gl_project = build.project.gl_project
- if build.commit && build.project
%tr.build
%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}
 
%td.status
= ci_status_with_icon(build.status)
 
%td.commit-link
= commit_link(build.commit)
= link_to ci_status_path(build.commit) do
%strong #{build.commit.short_sha}
 
%td.runner
- if build.runner
Loading
Loading
Loading
Loading
@@ -96,6 +96,7 @@
%table.builds.runner-builds
%thead
%tr
%th Build ID
%th Status
%th Project
%th Commit
Loading
Loading
@@ -103,6 +104,11 @@
 
- @builds.each do |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
= ci_status_with_icon(build.status)
 
Loading
Loading
@@ -110,8 +116,8 @@
= build.project.name
 
%td.build-link
= link_to ci_project_build_path(build.project, build) do
%strong #{build.short_sha}
= link_to ci_status_path(build.commit) do
%strong #{build.commit.short_sha}
 
%td.timestamp
- if build.finished_at
Loading
Loading
%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
#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}
&middot;
%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}")
Loading
Loading
@@ -7,7 +7,7 @@
 
 
%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}
 
%td.build-message
Loading
Loading
.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
!!! 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'
!!! 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'
Loading
Loading
@@ -28,16 +28,14 @@ Gitlab::Application.routes.draw do
end
end
 
resource :charts, only: [:show]
resources :commits, only: [:show] do
resources :commits, only: [] do
member do
get :status
get :cancel
end
end
 
resources :builds, only: [:show] do
resources :builds, only: [] do
member do
get :cancel
get :status
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment