Improve CI integration for merge requests
This commit is contained in:
parent
c92726e6c8
commit
ca936d2784
|
@ -26,6 +26,12 @@ var MergeRequest = {
|
||||||
self.showState(data.state);
|
self.showState(data.state);
|
||||||
}, "json");
|
}, "json");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(self.opts.ci_enable){
|
||||||
|
$.get(self.opts.url_to_ci_check, function(data){
|
||||||
|
self.showCiState(data.status);
|
||||||
|
}, "json");
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
initTabs:
|
initTabs:
|
||||||
|
@ -79,6 +85,11 @@ var MergeRequest = {
|
||||||
$(".automerge_widget." + state).show();
|
$(".automerge_widget." + state).show();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
showCiState:
|
||||||
|
function(state){
|
||||||
|
$(".ci_widget").hide();
|
||||||
|
$(".ci_widget.ci-" + state).show();
|
||||||
|
},
|
||||||
|
|
||||||
loadDiff:
|
loadDiff:
|
||||||
function() {
|
function() {
|
||||||
|
|
|
@ -136,9 +136,3 @@ li.merge_request {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.status-badge {
|
|
||||||
height: 32px;
|
|
||||||
width: 100%;
|
|
||||||
@include border-radius(5px);
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
class MergeRequestsController < ProjectResourceController
|
class MergeRequestsController < ProjectResourceController
|
||||||
before_filter :module_enabled
|
before_filter :module_enabled
|
||||||
before_filter :merge_request, only: [:edit, :update, :destroy, :show, :commits, :diffs, :automerge, :automerge_check]
|
before_filter :merge_request, only: [:edit, :update, :destroy, :show, :commits, :diffs, :automerge, :automerge_check, :ci_status]
|
||||||
before_filter :validates_merge_request, only: [:show, :diffs]
|
before_filter :validates_merge_request, only: [:show, :diffs]
|
||||||
before_filter :define_show_vars, only: [:show, :diffs]
|
before_filter :define_show_vars, only: [:show, :diffs]
|
||||||
|
|
||||||
|
@ -103,6 +103,13 @@ class MergeRequestsController < ProjectResourceController
|
||||||
@commit = CommitDecorator.decorate(@commit)
|
@commit = CommitDecorator.decorate(@commit)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def ci_status
|
||||||
|
status = project.gitlab_ci_service.commit_status(merge_request.last_commit.sha)
|
||||||
|
response = { status: status }
|
||||||
|
|
||||||
|
render json: response
|
||||||
|
end
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
def merge_request
|
def merge_request
|
||||||
|
|
|
@ -39,7 +39,7 @@ module MergeRequestsHelper
|
||||||
classes
|
classes
|
||||||
end
|
end
|
||||||
|
|
||||||
def ci_status_path
|
def ci_build_details_path merge_request
|
||||||
@project.gitlab_ci_service.commit_badge_path(@merge_request.last_commit.sha)
|
merge_request.project.gitlab_ci_service.build_page(merge_request.last_commit.sha)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -36,4 +36,22 @@ class GitlabCiService < Service
|
||||||
def commit_badge_path sha
|
def commit_badge_path sha
|
||||||
project_url + "/status?sha=#{sha}"
|
project_url + "/status?sha=#{sha}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def commit_status_path sha
|
||||||
|
project_url + "/builds/#{sha}/status.json?token=#{token}"
|
||||||
|
end
|
||||||
|
|
||||||
|
def commit_status sha
|
||||||
|
response = HTTParty.get(commit_status_path(sha))
|
||||||
|
|
||||||
|
if response.code == 200 and response["status"]
|
||||||
|
response["status"]
|
||||||
|
else
|
||||||
|
:error
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def build_page sha
|
||||||
|
project_url + "/builds/#{sha}"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -220,4 +220,8 @@ class MergeRequest < ActiveRecord::Base
|
||||||
def to_patch
|
def to_patch
|
||||||
project.repo.git.format_patch({timeout: 30, raise: true, stdout: true}, "#{target_branch}..#{source_branch}")
|
project.repo.git.format_patch({timeout: 30, raise: true, stdout: true}, "#{target_branch}..#{source_branch}")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def last_commit_short_sha
|
||||||
|
@last_commit_short_sha ||= last_commit.sha[0..10]
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
= render "merge_requests/show/how_to_merge"
|
= render "merge_requests/show/how_to_merge"
|
||||||
= render "merge_requests/show/mr_box"
|
= render "merge_requests/show/mr_box"
|
||||||
= render "merge_requests/show/mr_accept"
|
= render "merge_requests/show/mr_accept"
|
||||||
|
- if @project.gitlab_ci?
|
||||||
|
= render "merge_requests/show/mr_ci"
|
||||||
= render "merge_requests/show/commits"
|
= render "merge_requests/show/commits"
|
||||||
|
|
||||||
- if @commits.present?
|
- if @commits.present?
|
||||||
|
@ -28,6 +30,8 @@
|
||||||
MergeRequest.init({
|
MergeRequest.init({
|
||||||
url_to_automerge_check: "#{automerge_check_project_merge_request_path(@project, @merge_request)}",
|
url_to_automerge_check: "#{automerge_check_project_merge_request_path(@project, @merge_request)}",
|
||||||
check_enable: #{@merge_request.state == MergeRequest::UNCHECKED ? "true" : "false"},
|
check_enable: #{@merge_request.state == MergeRequest::UNCHECKED ? "true" : "false"},
|
||||||
|
url_to_ci_check: "#{ci_status_project_merge_request_path(@project, @merge_request)}",
|
||||||
|
ci_enable: #{@project.gitlab_ci? ? "true" : "false"},
|
||||||
current_state: "#{@merge_request.human_state}",
|
current_state: "#{@merge_request.human_state}",
|
||||||
action: "#{controller.action_name}"
|
action: "#{controller.action_name}"
|
||||||
});
|
});
|
||||||
|
|
|
@ -6,9 +6,6 @@
|
||||||
- else
|
- else
|
||||||
.alert-message.success.status_info Open
|
.alert-message.success.status_info Open
|
||||||
= gfm escape_once(@merge_request.title)
|
= gfm escape_once(@merge_request.title)
|
||||||
- if @project.gitlab_ci?
|
|
||||||
.right
|
|
||||||
= image_tag ci_status_path, class: 'status-badge'
|
|
||||||
|
|
||||||
.middle_box_content
|
.middle_box_content
|
||||||
%div
|
%div
|
||||||
|
|
35
app/views/merge_requests/show/_mr_ci.html.haml
Normal file
35
app/views/merge_requests/show/_mr_ci.html.haml
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
- if @merge_request.open? && @commits.any?
|
||||||
|
.ci_widget.ci-success{style: "display:none"}
|
||||||
|
.alert.alert-success
|
||||||
|
%i.icon-ok
|
||||||
|
%strong CI build passed
|
||||||
|
for #{@merge_request.last_commit_short_sha}.
|
||||||
|
= link_to "Build page", ci_build_details_path(@merge_request)
|
||||||
|
|
||||||
|
|
||||||
|
.ci_widget.ci-failed{style: "display:none"}
|
||||||
|
.alert.alert-error
|
||||||
|
%i.icon-remove
|
||||||
|
%strong CI build failed
|
||||||
|
for #{@merge_request.last_commit_short_sha}.
|
||||||
|
= link_to "Build page", ci_build_details_path(@merge_request)
|
||||||
|
|
||||||
|
- [:running, :pending].each do |status|
|
||||||
|
.ci_widget{class: "ci-#{status}", style: "display:none"}
|
||||||
|
.alert
|
||||||
|
%i.icon-time
|
||||||
|
%strong CI build #{status}
|
||||||
|
for #{@merge_request.last_commit_short_sha}.
|
||||||
|
= link_to "Build page", ci_build_details_path(@merge_request)
|
||||||
|
|
||||||
|
.ci_widget
|
||||||
|
.alert-message
|
||||||
|
%strong
|
||||||
|
%i.icon-refresh
|
||||||
|
Checking for CI status for #{@merge_request.last_commit_short_sha}
|
||||||
|
|
||||||
|
.ci_widget.ci-error{style: "display:none"}
|
||||||
|
.alert.alert-error
|
||||||
|
%i.icon-remove
|
||||||
|
%strong Cannot connect to CI server. Please check your setting
|
||||||
|
|
|
@ -169,6 +169,7 @@ Gitlab::Application.routes.draw do
|
||||||
get :diffs
|
get :diffs
|
||||||
get :automerge
|
get :automerge
|
||||||
get :automerge_check
|
get :automerge_check
|
||||||
|
get :ci_status
|
||||||
end
|
end
|
||||||
|
|
||||||
collection do
|
collection do
|
||||||
|
|
Loading…
Reference in a new issue