Skip to content
Snippets Groups Projects
Commit ca936d27 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets
Browse files

Improve CI integration for merge requests

parent c92726e6
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -26,6 +26,12 @@ var MergeRequest = {
self.showState(data.state);
}, "json");
}
if(self.opts.ci_enable){
$.get(self.opts.url_to_ci_check, function(data){
self.showCiState(data.status);
}, "json");
}
},
 
initTabs:
Loading
Loading
@@ -79,6 +85,11 @@ var MergeRequest = {
$(".automerge_widget." + state).show();
},
 
showCiState:
function(state){
$(".ci_widget").hide();
$(".ci_widget.ci-" + state).show();
},
 
loadDiff:
function() {
Loading
Loading
Loading
Loading
@@ -136,9 +136,3 @@ li.merge_request {
}
}
}
.status-badge {
height: 32px;
width: 100%;
@include border-radius(5px);
}
class MergeRequestsController < ProjectResourceController
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 :define_show_vars, only: [:show, :diffs]
 
Loading
Loading
@@ -103,6 +103,13 @@ class MergeRequestsController < ProjectResourceController
@commit = CommitDecorator.decorate(@commit)
end
 
def ci_status
status = project.gitlab_ci_service.commit_status(merge_request.last_commit.sha)
response = { status: status }
render json: response
end
protected
 
def merge_request
Loading
Loading
Loading
Loading
@@ -39,7 +39,7 @@ module MergeRequestsHelper
classes
end
 
def ci_status_path
@project.gitlab_ci_service.commit_badge_path(@merge_request.last_commit.sha)
def ci_build_details_path merge_request
merge_request.project.gitlab_ci_service.build_page(merge_request.last_commit.sha)
end
end
Loading
Loading
@@ -36,4 +36,22 @@ class GitlabCiService < Service
def commit_badge_path sha
project_url + "/status?sha=#{sha}"
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
Loading
Loading
@@ -220,4 +220,8 @@ class MergeRequest < ActiveRecord::Base
def to_patch
project.repo.git.format_patch({timeout: 30, raise: true, stdout: true}, "#{target_branch}..#{source_branch}")
end
def last_commit_short_sha
@last_commit_short_sha ||= last_commit.sha[0..10]
end
end
Loading
Loading
@@ -2,6 +2,8 @@
= render "merge_requests/show/how_to_merge"
= render "merge_requests/show/mr_box"
= render "merge_requests/show/mr_accept"
- if @project.gitlab_ci?
= render "merge_requests/show/mr_ci"
= render "merge_requests/show/commits"
 
- if @commits.present?
Loading
Loading
@@ -28,6 +30,8 @@
MergeRequest.init({
url_to_automerge_check: "#{automerge_check_project_merge_request_path(@project, @merge_request)}",
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}",
action: "#{controller.action_name}"
});
Loading
Loading
Loading
Loading
@@ -6,9 +6,6 @@
- else
.alert-message.success.status_info Open
= gfm escape_once(@merge_request.title)
- if @project.gitlab_ci?
.right
= image_tag ci_status_path, class: 'status-badge'
 
.middle_box_content
%div
Loading
Loading
- 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
Loading
Loading
@@ -169,6 +169,7 @@ Gitlab::Application.routes.draw do
get :diffs
get :automerge
get :automerge_check
get :ci_status
end
 
collection do
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment