Improve CI integration for merge requests

This commit is contained in:
Dmitriy Zaporozhets 2012-12-11 06:14:05 +03:00
parent c92726e6c8
commit ca936d2784
10 changed files with 83 additions and 12 deletions

View file

@ -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() {

View file

@ -136,9 +136,3 @@ li.merge_request {
} }
} }
} }
.status-badge {
height: 32px;
width: 100%;
@include border-radius(5px);
}

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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}"
}); });

View file

@ -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

View 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

View file

@ -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