Commit ca936d2784773652530e7b02af40b925ca45a4d6
1 parent
c92726e6
Exists in
master
and in
4 other branches
Improve CI integration for merge requests
Showing
10 changed files
with
83 additions
and
12 deletions
Show diff stats
app/assets/javascripts/merge_requests.js
@@ -26,6 +26,12 @@ var MergeRequest = { | @@ -26,6 +26,12 @@ var MergeRequest = { | ||
26 | self.showState(data.state); | 26 | self.showState(data.state); |
27 | }, "json"); | 27 | }, "json"); |
28 | } | 28 | } |
29 | + | ||
30 | + if(self.opts.ci_enable){ | ||
31 | + $.get(self.opts.url_to_ci_check, function(data){ | ||
32 | + self.showCiState(data.status); | ||
33 | + }, "json"); | ||
34 | + } | ||
29 | }, | 35 | }, |
30 | 36 | ||
31 | initTabs: | 37 | initTabs: |
@@ -79,6 +85,11 @@ var MergeRequest = { | @@ -79,6 +85,11 @@ var MergeRequest = { | ||
79 | $(".automerge_widget." + state).show(); | 85 | $(".automerge_widget." + state).show(); |
80 | }, | 86 | }, |
81 | 87 | ||
88 | + showCiState: | ||
89 | + function(state){ | ||
90 | + $(".ci_widget").hide(); | ||
91 | + $(".ci_widget.ci-" + state).show(); | ||
92 | + }, | ||
82 | 93 | ||
83 | loadDiff: | 94 | loadDiff: |
84 | function() { | 95 | function() { |
app/assets/stylesheets/sections/merge_requests.scss
app/controllers/merge_requests_controller.rb
1 | class MergeRequestsController < ProjectResourceController | 1 | class MergeRequestsController < ProjectResourceController |
2 | before_filter :module_enabled | 2 | before_filter :module_enabled |
3 | - before_filter :merge_request, only: [:edit, :update, :destroy, :show, :commits, :diffs, :automerge, :automerge_check] | 3 | + before_filter :merge_request, only: [:edit, :update, :destroy, :show, :commits, :diffs, :automerge, :automerge_check, :ci_status] |
4 | before_filter :validates_merge_request, only: [:show, :diffs] | 4 | before_filter :validates_merge_request, only: [:show, :diffs] |
5 | before_filter :define_show_vars, only: [:show, :diffs] | 5 | before_filter :define_show_vars, only: [:show, :diffs] |
6 | 6 | ||
@@ -103,6 +103,13 @@ class MergeRequestsController < ProjectResourceController | @@ -103,6 +103,13 @@ class MergeRequestsController < ProjectResourceController | ||
103 | @commit = CommitDecorator.decorate(@commit) | 103 | @commit = CommitDecorator.decorate(@commit) |
104 | end | 104 | end |
105 | 105 | ||
106 | + def ci_status | ||
107 | + status = project.gitlab_ci_service.commit_status(merge_request.last_commit.sha) | ||
108 | + response = { status: status } | ||
109 | + | ||
110 | + render json: response | ||
111 | + end | ||
112 | + | ||
106 | protected | 113 | protected |
107 | 114 | ||
108 | def merge_request | 115 | def merge_request |
app/helpers/merge_requests_helper.rb
@@ -39,7 +39,7 @@ module MergeRequestsHelper | @@ -39,7 +39,7 @@ module MergeRequestsHelper | ||
39 | classes | 39 | classes |
40 | end | 40 | end |
41 | 41 | ||
42 | - def ci_status_path | ||
43 | - @project.gitlab_ci_service.commit_badge_path(@merge_request.last_commit.sha) | 42 | + def ci_build_details_path merge_request |
43 | + merge_request.project.gitlab_ci_service.build_page(merge_request.last_commit.sha) | ||
44 | end | 44 | end |
45 | end | 45 | end |
app/models/gitlab_ci_service.rb
@@ -36,4 +36,22 @@ class GitlabCiService < Service | @@ -36,4 +36,22 @@ class GitlabCiService < Service | ||
36 | def commit_badge_path sha | 36 | def commit_badge_path sha |
37 | project_url + "/status?sha=#{sha}" | 37 | project_url + "/status?sha=#{sha}" |
38 | end | 38 | end |
39 | + | ||
40 | + def commit_status_path sha | ||
41 | + project_url + "/builds/#{sha}/status.json?token=#{token}" | ||
42 | + end | ||
43 | + | ||
44 | + def commit_status sha | ||
45 | + response = HTTParty.get(commit_status_path(sha)) | ||
46 | + | ||
47 | + if response.code == 200 and response["status"] | ||
48 | + response["status"] | ||
49 | + else | ||
50 | + :error | ||
51 | + end | ||
52 | + end | ||
53 | + | ||
54 | + def build_page sha | ||
55 | + project_url + "/builds/#{sha}" | ||
56 | + end | ||
39 | end | 57 | end |
app/models/merge_request.rb
@@ -220,4 +220,8 @@ class MergeRequest < ActiveRecord::Base | @@ -220,4 +220,8 @@ class MergeRequest < ActiveRecord::Base | ||
220 | def to_patch | 220 | def to_patch |
221 | project.repo.git.format_patch({timeout: 30, raise: true, stdout: true}, "#{target_branch}..#{source_branch}") | 221 | project.repo.git.format_patch({timeout: 30, raise: true, stdout: true}, "#{target_branch}..#{source_branch}") |
222 | end | 222 | end |
223 | + | ||
224 | + def last_commit_short_sha | ||
225 | + @last_commit_short_sha ||= last_commit.sha[0..10] | ||
226 | + end | ||
223 | end | 227 | end |
app/views/merge_requests/_show.html.haml
@@ -2,6 +2,8 @@ | @@ -2,6 +2,8 @@ | ||
2 | = render "merge_requests/show/how_to_merge" | 2 | = render "merge_requests/show/how_to_merge" |
3 | = render "merge_requests/show/mr_box" | 3 | = render "merge_requests/show/mr_box" |
4 | = render "merge_requests/show/mr_accept" | 4 | = render "merge_requests/show/mr_accept" |
5 | +- if @project.gitlab_ci? | ||
6 | + = render "merge_requests/show/mr_ci" | ||
5 | = render "merge_requests/show/commits" | 7 | = render "merge_requests/show/commits" |
6 | 8 | ||
7 | - if @commits.present? | 9 | - if @commits.present? |
@@ -28,6 +30,8 @@ | @@ -28,6 +30,8 @@ | ||
28 | MergeRequest.init({ | 30 | MergeRequest.init({ |
29 | url_to_automerge_check: "#{automerge_check_project_merge_request_path(@project, @merge_request)}", | 31 | url_to_automerge_check: "#{automerge_check_project_merge_request_path(@project, @merge_request)}", |
30 | check_enable: #{@merge_request.state == MergeRequest::UNCHECKED ? "true" : "false"}, | 32 | check_enable: #{@merge_request.state == MergeRequest::UNCHECKED ? "true" : "false"}, |
33 | + url_to_ci_check: "#{ci_status_project_merge_request_path(@project, @merge_request)}", | ||
34 | + ci_enable: #{@project.gitlab_ci? ? "true" : "false"}, | ||
31 | current_state: "#{@merge_request.human_state}", | 35 | current_state: "#{@merge_request.human_state}", |
32 | action: "#{controller.action_name}" | 36 | action: "#{controller.action_name}" |
33 | }); | 37 | }); |
app/views/merge_requests/show/_mr_box.html.haml
@@ -6,9 +6,6 @@ | @@ -6,9 +6,6 @@ | ||
6 | - else | 6 | - else |
7 | .alert-message.success.status_info Open | 7 | .alert-message.success.status_info Open |
8 | = gfm escape_once(@merge_request.title) | 8 | = gfm escape_once(@merge_request.title) |
9 | - - if @project.gitlab_ci? | ||
10 | - .right | ||
11 | - = image_tag ci_status_path, class: 'status-badge' | ||
12 | 9 | ||
13 | .middle_box_content | 10 | .middle_box_content |
14 | %div | 11 | %div |
@@ -0,0 +1,35 @@ | @@ -0,0 +1,35 @@ | ||
1 | +- if @merge_request.open? && @commits.any? | ||
2 | + .ci_widget.ci-success{style: "display:none"} | ||
3 | + .alert.alert-success | ||
4 | + %i.icon-ok | ||
5 | + %strong CI build passed | ||
6 | + for #{@merge_request.last_commit_short_sha}. | ||
7 | + = link_to "Build page", ci_build_details_path(@merge_request) | ||
8 | + | ||
9 | + | ||
10 | + .ci_widget.ci-failed{style: "display:none"} | ||
11 | + .alert.alert-error | ||
12 | + %i.icon-remove | ||
13 | + %strong CI build failed | ||
14 | + for #{@merge_request.last_commit_short_sha}. | ||
15 | + = link_to "Build page", ci_build_details_path(@merge_request) | ||
16 | + | ||
17 | + - [:running, :pending].each do |status| | ||
18 | + .ci_widget{class: "ci-#{status}", style: "display:none"} | ||
19 | + .alert | ||
20 | + %i.icon-time | ||
21 | + %strong CI build #{status} | ||
22 | + for #{@merge_request.last_commit_short_sha}. | ||
23 | + = link_to "Build page", ci_build_details_path(@merge_request) | ||
24 | + | ||
25 | + .ci_widget | ||
26 | + .alert-message | ||
27 | + %strong | ||
28 | + %i.icon-refresh | ||
29 | + Checking for CI status for #{@merge_request.last_commit_short_sha} | ||
30 | + | ||
31 | + .ci_widget.ci-error{style: "display:none"} | ||
32 | + .alert.alert-error | ||
33 | + %i.icon-remove | ||
34 | + %strong Cannot connect to CI server. Please check your setting | ||
35 | + |
config/routes.rb
@@ -169,6 +169,7 @@ Gitlab::Application.routes.draw do | @@ -169,6 +169,7 @@ Gitlab::Application.routes.draw do | ||
169 | get :diffs | 169 | get :diffs |
170 | get :automerge | 170 | get :automerge |
171 | get :automerge_check | 171 | get :automerge_check |
172 | + get :ci_status | ||
172 | end | 173 | end |
173 | 174 | ||
174 | collection do | 175 | collection do |