Commit 17c60173 authored by Robert Speicher's avatar Robert Speicher

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
parents 2b518230 5921a1ed
...@@ -24,6 +24,8 @@ v 8.1.0 ...@@ -24,6 +24,8 @@ v 8.1.0
- Fix error preventing displaying of commit data for a directory with a leading dot (Stan Hu) - 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 - Speed up load times of issue detail pages by roughly 1.5x
- Require CI jobs to be named - 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) - 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) - 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) - Make diff file view easier to use on mobile screens (Stan Hu)
......
...@@ -31,7 +31,7 @@ class CiBuild ...@@ -31,7 +31,7 @@ class CiBuild
$('#build-trace code').html build.trace_html $('#build-trace code').html build.trace_html
$('#build-trace code').append '<i class="fa fa-refresh fa-spin"/>' $('#build-trace code').append '<i class="fa fa-refresh fa-spin"/>'
@checkAutoscroll() @checkAutoscroll()
else else if build.status != build_status
Turbolinks.visit build_url Turbolinks.visit build_url
, 4000 , 4000
......
...@@ -17,6 +17,7 @@ module Ci ...@@ -17,6 +17,7 @@ module Ci
@projects = @projects.where(gitlab_id: @gl_projects.select(:id)) @projects = @projects.where(gitlab_id: @gl_projects.select(:id))
end end
@projects = @projects.where("ci_projects.id NOT IN (?)", @runner.projects.pluck(:id)) if @runner.projects.any? @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) @projects = @projects.page(params[:page]).per(30)
end end
......
...@@ -8,14 +8,6 @@ module Ci ...@@ -8,14 +8,6 @@ module Ci
private 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! def authenticate_token!
unless project.valid_token?(params[:token]) unless project.valid_token?(params[:token])
return head(403) return head(403)
......
...@@ -2,23 +2,24 @@ class Projects::BuildsController < Projects::ApplicationController ...@@ -2,23 +2,24 @@ class Projects::BuildsController < Projects::ApplicationController
before_action :ci_project before_action :ci_project
before_action :build, except: [:index, :cancel_all] 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" layout "project"
def index def index
@scope = params[:scope] @scope = params[:scope]
@all_builds = project.ci_builds @all_builds = project.ci_builds
@builds = @all_builds.order('created_at DESC')
@builds = @builds =
case @scope case @scope
when 'all' when 'all'
@all_builds @builds
when 'finished' when 'finished'
@all_builds.finished @builds.finished
else else
@all_builds.running_or_pending @builds.running_or_pending.reverse_order
end end
@builds = @builds.order('created_at DESC').page(params[:page]).per(30) @builds = @builds.page(params[:page]).per(30)
end end
def cancel_all def cancel_all
...@@ -73,4 +74,10 @@ class Projects::BuildsController < Projects::ApplicationController ...@@ -73,4 +74,10 @@ class Projects::BuildsController < Projects::ApplicationController
def build_path(build) def build_path(build)
namespace_project_build_path(build.gl_project.namespace, build.gl_project, build) namespace_project_build_path(build.gl_project.namespace, build.gl_project, build)
end end
def authorize_manage_builds!
unless can?(current_user, :manage_builds, project)
return page_404
end
end
end end
...@@ -4,7 +4,8 @@ ...@@ -4,7 +4,8 @@
class Projects::CommitController < Projects::ApplicationController class Projects::CommitController < Projects::ApplicationController
# Authorize # Authorize
before_action :require_non_empty_project 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 before_action :commit
def show def show
...@@ -55,4 +56,12 @@ class Projects::CommitController < Projects::ApplicationController ...@@ -55,4 +56,12 @@ class Projects::CommitController < Projects::ApplicationController
def commit def commit
@commit ||= @project.commit(params[:id]) @commit ||= @project.commit(params[:id])
end end
private
def authorize_manage_builds!
unless can?(current_user, :manage_builds, project)
return page_404
end
end
end end
...@@ -99,6 +99,7 @@ module Ci ...@@ -99,6 +99,7 @@ module Ci
def ordered_by_last_commit_date 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)" 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("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") order("CASE WHEN last_commit.committed_at IS NULL THEN 1 ELSE 0 END, last_commit.committed_at DESC")
end end
end end
......
...@@ -20,7 +20,6 @@ class CommitStatus < ActiveRecord::Base ...@@ -20,7 +20,6 @@ class CommitStatus < ActiveRecord::Base
scope :latest, -> { where(id: unscope(:select).select('max(id)').group(:name, :ref)) } scope :latest, -> { where(id: unscope(:select).select('max(id)').group(:name, :ref)) }
scope :ordered, -> { order(:ref, :stage_idx, :name) } scope :ordered, -> { order(:ref, :stage_idx, :name) }
scope :for_ref, ->(ref) { where(ref: ref) } scope :for_ref, ->(ref) { where(ref: ref) }
scope :running_or_pending, -> { where(status: [:running, :pending]) }
state_machine :status, initial: :pending do state_machine :status, initial: :pending do
event :run do event :run do
......
...@@ -53,13 +53,14 @@ ...@@ -53,13 +53,14 @@
%th %th
- @runner.runner_projects.each do |runner_project| - @runner.runner_projects.each do |runner_project|
- project = runner_project.project - project = runner_project.project
%tr.alert-info - if project.gl_project
%td %tr.alert-info
%strong %td
= project.name %strong
%td = project.name
.pull-right %td
= link_to 'Disable', [:ci, :admin, project, runner_project], method: :delete, class: 'btn btn-danger btn-xs' .pull-right
= link_to 'Disable', [:ci, :admin, project, runner_project], method: :delete, class: 'btn btn-danger btn-xs'
%table.table %table.table
%thead %thead
...@@ -103,21 +104,26 @@ ...@@ -103,21 +104,26 @@
%th Finished at %th Finished at
- @builds.each do |build| - @builds.each do |build|
- gl_project = build.gl_project
%tr.build %tr.build
%td.id %td.id
- gl_project = build.project.gl_project - if gl_project
= link_to namespace_project_build_path(gl_project.namespace, gl_project, build) do = link_to namespace_project_build_path(gl_project.namespace, gl_project, build) do
= build.id
- else
= build.id = build.id
%td.status %td.status
= ci_status_with_icon(build.status) = ci_status_with_icon(build.status)
%td.status %td.status
= build.project.name - if gl_project
= gl_project.name_with_namespace
%td.build-link %td.build-link
= link_to ci_status_path(build.commit) do - if gl_project
%strong #{build.commit.short_sha} = link_to ci_status_path(build.commit) do
%strong #{build.commit.short_sha}
%td.timestamp %td.timestamp
- if build.finished_at - if build.finished_at
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
%td #{stage.capitalize} Job - #{build[:name]} %td #{stage.capitalize} Job - #{build[:name]}
%td %td
%pre %pre
= simple_format build[:script] = simple_format build[:commands]
%br %br
%b Tag list: %b Tag list:
...@@ -28,6 +28,11 @@ ...@@ -28,6 +28,11 @@
%br %br
%b Refs except: %b Refs except:
= build[:except] && build[:except].join(", ") = build[:except] && build[:except].join(", ")
%br
%b When:
= build[:when]
- if build[:allow_failure]
%b Allowed to fail
-else -else
%p %p
......
...@@ -155,7 +155,7 @@ ...@@ -155,7 +155,7 @@
- if @builds.present? - if @builds.present?
.build-widget .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 %table.table.builds
- @builds.each_with_index do |build, i| - @builds.each_with_index do |build, i|
%tr.build %tr.build
......
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 @@ ...@@ -11,7 +11,7 @@
# #
# It's strongly recommended that you check this file into your version control system. # 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 # These are extensions that must be enabled in order to support this database
enable_extension "plpgsql" enable_extension "plpgsql"
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment