637a41400c
* upstream/master: (206 commits) Implement fourth round of comments from @DouweM. Fix `CreateDeploymentService` spec. Reload issues in spec to ensure label<->issue mapping properly loaded Fix build. Remove unnecessary #{} in cycle analytics template. Update cycle analytics icon and fix color of the dismiss button. Use triple dashes for the empty value in cycle analytics. Fix typo on cycle analytics copy. Add page title and fix sub menu width in Cycle Analytics page. Update Cycle Analytics Read more link URL. Display the cycle analytics navbar based on the `:read_cycle_analytics` ability. Improve indentation in `Gitlab::Database::Median` Add a spec for merge request metric caching while refreshing a merge request from a forked project. Use the `IssuableBaseService` lifecycle hooks to cache `MergeRequestsClosingIssues` Implement a second round of review comments from @DouweM. Add docs on Cycle Analytics Test if issue authors can access private projects Update .pkgr.yml with Ubuntu 16.04 dependencies fix issues mr counter Move JSON generation (cycle analytics) into a controller method. ...
103 lines
2.5 KiB
Ruby
103 lines
2.5 KiB
Ruby
class Projects::BuildsController < Projects::ApplicationController
|
|
before_action :build, except: [:index, :cancel_all]
|
|
before_action :authorize_read_build!, except: [:cancel, :cancel_all, :retry, :play]
|
|
before_action :authorize_update_build!, except: [:index, :show, :status, :raw]
|
|
layout 'project'
|
|
|
|
def index
|
|
@scope = params[:scope]
|
|
@all_builds = project.builds.relevant
|
|
@builds = @all_builds.order('created_at DESC')
|
|
@builds =
|
|
case @scope
|
|
when 'pending'
|
|
@builds.pending.reverse_order
|
|
when 'running'
|
|
@builds.running.reverse_order
|
|
when 'finished'
|
|
@builds.finished
|
|
else
|
|
@builds
|
|
end
|
|
@builds = @builds.page(params[:page]).per(30)
|
|
end
|
|
|
|
def cancel_all
|
|
@project.builds.running_or_pending.each(&:cancel)
|
|
redirect_to namespace_project_builds_path(project.namespace, project)
|
|
end
|
|
|
|
def show
|
|
@builds = @project.pipelines.find_by_sha(@build.sha).builds.order('id DESC')
|
|
@builds = @builds.where("id not in (?)", @build.id)
|
|
@pipeline = @build.pipeline
|
|
|
|
respond_to do |format|
|
|
format.html
|
|
format.json do
|
|
render json: {
|
|
id: @build.id,
|
|
status: @build.status,
|
|
trace_html: @build.trace_html
|
|
}
|
|
end
|
|
end
|
|
end
|
|
|
|
def trace
|
|
respond_to do |format|
|
|
format.json do
|
|
state = params[:state].presence
|
|
render json: @build.trace_with_state(state: state).
|
|
merge!(id: @build.id, status: @build.status)
|
|
end
|
|
end
|
|
end
|
|
|
|
def retry
|
|
return render_404 unless @build.retryable?
|
|
|
|
build = Ci::Build.retry(@build, current_user)
|
|
redirect_to build_path(build)
|
|
end
|
|
|
|
def play
|
|
return render_404 unless @build.playable?
|
|
|
|
build = @build.play(current_user)
|
|
redirect_to build_path(build)
|
|
end
|
|
|
|
def cancel
|
|
@build.cancel
|
|
redirect_to build_path(@build)
|
|
end
|
|
|
|
def status
|
|
render json: @build.to_json(only: [:status, :id, :sha, :coverage], methods: :sha)
|
|
end
|
|
|
|
def erase
|
|
@build.erase(erased_by: current_user)
|
|
redirect_to namespace_project_build_path(project.namespace, project, @build),
|
|
notice: "Build has been successfully erased!"
|
|
end
|
|
|
|
def raw
|
|
if @build.has_trace_file?
|
|
send_file @build.trace_file_path, type: 'text/plain; charset=utf-8', disposition: 'inline'
|
|
else
|
|
render_404
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def build
|
|
@build ||= project.builds.find_by!(id: params[:id])
|
|
end
|
|
|
|
def build_path(build)
|
|
namespace_project_build_path(build.project.namespace, build.project, build)
|
|
end
|
|
end
|