Merge branch 'fix-ci-regressions' into 'master'
Fix CI regressions This MR fixes a couple of small CI regressions - Allow developer to manage builds - On CI Admin page show only projects that are present in GitLab - On Runner CI Admin page show only projects that are present in GitLab - Refresh build log only when status changes - Show the oldest builds on top when viewing Builds - it most cases it shows running builds on top - Fix Lint rendering - Fix number of other builds in build widget Fixes #3164 Fixes #3161 Fixes gitlab-org/gitlab-ci#343 See merge request !1679
This commit is contained in:
commit
17c60173f6
13 changed files with 58 additions and 31 deletions
|
@ -24,6 +24,8 @@ v 8.1.0
|
|||
- Fix error preventing displaying of commit data for a directory with a leading dot (Stan Hu)
|
||||
- Speed up load times of issue detail pages by roughly 1.5x
|
||||
- Require CI jobs to be named
|
||||
- Fix CI rendering regressions
|
||||
- Allow developer to manage builds
|
||||
- If a merge request is to close an issue, show this on the issue page (Zeger-Jan van de Weg)
|
||||
- Add a system note and update relevant merge requests when a branch is deleted or re-added (Stan Hu)
|
||||
- Make diff file view easier to use on mobile screens (Stan Hu)
|
||||
|
|
|
@ -31,7 +31,7 @@ class CiBuild
|
|||
$('#build-trace code').html build.trace_html
|
||||
$('#build-trace code').append '<i class="fa fa-refresh fa-spin"/>'
|
||||
@checkAutoscroll()
|
||||
else
|
||||
else if build.status != build_status
|
||||
Turbolinks.visit build_url
|
||||
, 4000
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@ module Ci
|
|||
@projects = @projects.where(gitlab_id: @gl_projects.select(:id))
|
||||
end
|
||||
@projects = @projects.where("ci_projects.id NOT IN (?)", @runner.projects.pluck(:id)) if @runner.projects.any?
|
||||
@projects = @projects.joins(:gl_project)
|
||||
@projects = @projects.page(params[:page]).per(30)
|
||||
end
|
||||
|
||||
|
|
|
@ -8,14 +8,6 @@ module Ci
|
|||
|
||||
private
|
||||
|
||||
def authenticate_public_page!
|
||||
unless project.public
|
||||
authenticate_user!
|
||||
|
||||
return access_denied! unless can?(current_user, :read_project, gl_project)
|
||||
end
|
||||
end
|
||||
|
||||
def authenticate_token!
|
||||
unless project.valid_token?(params[:token])
|
||||
return head(403)
|
||||
|
|
|
@ -2,23 +2,24 @@ class Projects::BuildsController < Projects::ApplicationController
|
|||
before_action :ci_project
|
||||
before_action :build, except: [:index, :cancel_all]
|
||||
|
||||
before_action :authorize_admin_project!, except: [:index, :show, :status]
|
||||
before_action :authorize_manage_builds!, except: [:index, :show, :status]
|
||||
|
||||
layout "project"
|
||||
|
||||
def index
|
||||
@scope = params[:scope]
|
||||
@all_builds = project.ci_builds
|
||||
@builds = @all_builds.order('created_at DESC')
|
||||
@builds =
|
||||
case @scope
|
||||
when 'all'
|
||||
@all_builds
|
||||
@builds
|
||||
when 'finished'
|
||||
@all_builds.finished
|
||||
@builds.finished
|
||||
else
|
||||
@all_builds.running_or_pending
|
||||
@builds.running_or_pending.reverse_order
|
||||
end
|
||||
@builds = @builds.order('created_at DESC').page(params[:page]).per(30)
|
||||
@builds = @builds.page(params[:page]).per(30)
|
||||
end
|
||||
|
||||
def cancel_all
|
||||
|
@ -73,4 +74,10 @@ class Projects::BuildsController < Projects::ApplicationController
|
|||
def build_path(build)
|
||||
namespace_project_build_path(build.gl_project.namespace, build.gl_project, build)
|
||||
end
|
||||
|
||||
def authorize_manage_builds!
|
||||
unless can?(current_user, :manage_builds, project)
|
||||
return page_404
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -4,7 +4,8 @@
|
|||
class Projects::CommitController < Projects::ApplicationController
|
||||
# Authorize
|
||||
before_action :require_non_empty_project
|
||||
before_action :authorize_download_code!
|
||||
before_action :authorize_download_code!, except: [:cancel_builds]
|
||||
before_action :authorize_manage_builds!, only: [:cancel_builds]
|
||||
before_action :commit
|
||||
|
||||
def show
|
||||
|
@ -55,4 +56,12 @@ class Projects::CommitController < Projects::ApplicationController
|
|||
def commit
|
||||
@commit ||= @project.commit(params[:id])
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def authorize_manage_builds!
|
||||
unless can?(current_user, :manage_builds, project)
|
||||
return page_404
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -99,6 +99,7 @@ module Ci
|
|||
def ordered_by_last_commit_date
|
||||
last_commit_subquery = "(SELECT gl_project_id, MAX(committed_at) committed_at FROM #{Ci::Commit.table_name} GROUP BY gl_project_id)"
|
||||
joins("LEFT JOIN #{last_commit_subquery} AS last_commit ON #{Ci::Project.table_name}.gitlab_id = last_commit.gl_project_id").
|
||||
joins(:gl_project).
|
||||
order("CASE WHEN last_commit.committed_at IS NULL THEN 1 ELSE 0 END, last_commit.committed_at DESC")
|
||||
end
|
||||
end
|
||||
|
|
|
@ -20,7 +20,6 @@ class CommitStatus < ActiveRecord::Base
|
|||
scope :latest, -> { where(id: unscope(:select).select('max(id)').group(:name, :ref)) }
|
||||
scope :ordered, -> { order(:ref, :stage_idx, :name) }
|
||||
scope :for_ref, ->(ref) { where(ref: ref) }
|
||||
scope :running_or_pending, -> { where(status: [:running, :pending]) }
|
||||
|
||||
state_machine :status, initial: :pending do
|
||||
event :run do
|
||||
|
|
|
@ -53,13 +53,14 @@
|
|||
%th
|
||||
- @runner.runner_projects.each do |runner_project|
|
||||
- project = runner_project.project
|
||||
%tr.alert-info
|
||||
%td
|
||||
%strong
|
||||
= project.name
|
||||
%td
|
||||
.pull-right
|
||||
= link_to 'Disable', [:ci, :admin, project, runner_project], method: :delete, class: 'btn btn-danger btn-xs'
|
||||
- if project.gl_project
|
||||
%tr.alert-info
|
||||
%td
|
||||
%strong
|
||||
= project.name
|
||||
%td
|
||||
.pull-right
|
||||
= link_to 'Disable', [:ci, :admin, project, runner_project], method: :delete, class: 'btn btn-danger btn-xs'
|
||||
|
||||
%table.table
|
||||
%thead
|
||||
|
@ -103,21 +104,26 @@
|
|||
%th Finished at
|
||||
|
||||
- @builds.each do |build|
|
||||
- gl_project = build.gl_project
|
||||
%tr.build
|
||||
%td.id
|
||||
- gl_project = build.project.gl_project
|
||||
= link_to namespace_project_build_path(gl_project.namespace, gl_project, build) do
|
||||
- if gl_project
|
||||
= link_to namespace_project_build_path(gl_project.namespace, gl_project, build) do
|
||||
= build.id
|
||||
- else
|
||||
= build.id
|
||||
|
||||
%td.status
|
||||
= ci_status_with_icon(build.status)
|
||||
|
||||
%td.status
|
||||
= build.project.name
|
||||
- if gl_project
|
||||
= gl_project.name_with_namespace
|
||||
|
||||
%td.build-link
|
||||
= link_to ci_status_path(build.commit) do
|
||||
%strong #{build.commit.short_sha}
|
||||
- if gl_project
|
||||
= link_to ci_status_path(build.commit) do
|
||||
%strong #{build.commit.short_sha}
|
||||
|
||||
%td.timestamp
|
||||
- if build.finished_at
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
%td #{stage.capitalize} Job - #{build[:name]}
|
||||
%td
|
||||
%pre
|
||||
= simple_format build[:script]
|
||||
= simple_format build[:commands]
|
||||
|
||||
%br
|
||||
%b Tag list:
|
||||
|
@ -28,6 +28,11 @@
|
|||
%br
|
||||
%b Refs except:
|
||||
= build[:except] && build[:except].join(", ")
|
||||
%br
|
||||
%b When:
|
||||
= build[:when]
|
||||
- if build[:allow_failure]
|
||||
%b Allowed to fail
|
||||
|
||||
-else
|
||||
%p
|
||||
|
|
|
@ -155,7 +155,7 @@
|
|||
|
||||
- if @builds.present?
|
||||
.build-widget
|
||||
%h4.title #{pluralize(@builds.count, "other build")} for #{@build.short_sha}:
|
||||
%h4.title #{pluralize(@builds.count(:id), "other build")} for #{@build.short_sha}:
|
||||
%table.table.builds
|
||||
- @builds.each_with_index do |build, i|
|
||||
%tr.build
|
||||
|
|
5
db/migrate/20151023112551_fail_build_with_empty_name.rb
Normal file
5
db/migrate/20151023112551_fail_build_with_empty_name.rb
Normal file
|
@ -0,0 +1,5 @@
|
|||
class FailBuildWithEmptyName < ActiveRecord::Migration
|
||||
def change
|
||||
execute("UPDATE ci_builds SET status='failed' WHERE (name IS NULL OR name='') AND status='pending'")
|
||||
end
|
||||
end
|
|
@ -11,7 +11,7 @@
|
|||
#
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(version: 20151020173906) do
|
||||
ActiveRecord::Schema.define(version: 20151023112551) do
|
||||
|
||||
# These are extensions that must be enabled in order to support this database
|
||||
enable_extension "plpgsql"
|
||||
|
|
Loading…
Reference in a new issue