mirror of
https://github.com/wahyd4/gitlabhq.git
synced 2026-08-16 16:16:43 +10:00
This MR simplifies CI permission model: - read_build: allows to read a list of builds, artifacts and trace - update_build: allows to cancel and retry builds - create_build: allows to create builds from gitlab-ci.yml (not yet implemented) - admin_build: allows to manage triggers, runners and variables - read_commit_status: allows to read a list of commit statuses (including the overall of builds) - create_commit_status: allows to create a new commit status using API Remove all extra methods to manage permission. Made all controllers to use explicitly the new permissions.
74 lines
1.6 KiB
Ruby
74 lines
1.6 KiB
Ruby
class Projects::BuildsController < Projects::ApplicationController
|
|
before_action :build, except: [:index, :cancel_all]
|
|
|
|
before_action :authorize_read_build!, except: [:cancel, :cancel_all, :retry]
|
|
before_action :authorize_update_build!, except: [:index, :show, :status]
|
|
|
|
layout "project"
|
|
|
|
def index
|
|
@scope = params[:scope]
|
|
@all_builds = project.builds
|
|
@builds = @all_builds.order('created_at DESC')
|
|
@builds =
|
|
case @scope
|
|
when 'running'
|
|
@builds.running_or_pending.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.ci_commits.find_by_sha(@build.sha).builds.order('id DESC')
|
|
@builds = @builds.where("id not in (?)", @build.id)
|
|
@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
|
|
unless @build.retryable?
|
|
return render_404
|
|
end
|
|
|
|
build = Ci::Build.retry(@build)
|
|
|
|
redirect_to build_path(build)
|
|
end
|
|
|
|
def status
|
|
render json: @build.to_json(only: [:status, :id, :sha, :coverage], methods: :sha)
|
|
end
|
|
|
|
def cancel
|
|
@build.cancel
|
|
|
|
redirect_to build_path(@build)
|
|
end
|
|
|
|
private
|
|
|
|
def build
|
|
@build ||= project.builds.unscoped.find_by!(id: params[:id])
|
|
end
|
|
|
|
def build_path(build)
|
|
namespace_project_build_path(build.project.namespace, build.project, build)
|
|
end
|
|
end
|