Commit 5580dc999b50165de6cc62711e179c9dc7852472
Exists in
spb-stable
and in
2 other branches
Merge branch 'backport-ci-service' into 'master'
Backport CI service refactoring from EE It allows easier contribution of different CI services. Fixes #1280
Showing
9 changed files
with
61 additions
and
5 deletions
Show diff stats
app/controllers/projects/merge_requests_controller.rb
@@ -160,7 +160,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController | @@ -160,7 +160,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController | ||
160 | end | 160 | end |
161 | 161 | ||
162 | def ci_status | 162 | def ci_status |
163 | - status = @merge_request.source_project.gitlab_ci_service.commit_status(merge_request.last_commit.sha) | 163 | + status = @merge_request.source_project.ci_service.commit_status(merge_request.last_commit.sha) |
164 | response = {status: status} | 164 | response = {status: status} |
165 | 165 | ||
166 | render json: response | 166 | render json: response |
app/helpers/merge_requests_helper.rb
@@ -32,7 +32,7 @@ module MergeRequestsHelper | @@ -32,7 +32,7 @@ module MergeRequestsHelper | ||
32 | end | 32 | end |
33 | 33 | ||
34 | def ci_build_details_path merge_request | 34 | def ci_build_details_path merge_request |
35 | - merge_request.source_project.gitlab_ci_service.build_page(merge_request.last_commit.sha) | 35 | + merge_request.source_project.ci_service.build_page(merge_request.last_commit.sha) |
36 | end | 36 | end |
37 | 37 | ||
38 | def merge_path_description(merge_request, separator) | 38 | def merge_path_description(merge_request, separator) |
app/models/project.rb
@@ -54,6 +54,9 @@ class Project < ActiveRecord::Base | @@ -54,6 +54,9 @@ class Project < ActiveRecord::Base | ||
54 | belongs_to :namespace | 54 | belongs_to :namespace |
55 | 55 | ||
56 | has_one :last_event, -> {order 'events.created_at DESC'}, class_name: 'Event', foreign_key: 'project_id' | 56 | has_one :last_event, -> {order 'events.created_at DESC'}, class_name: 'Event', foreign_key: 'project_id' |
57 | + | ||
58 | + # Project services | ||
59 | + has_many :services | ||
57 | has_one :gitlab_ci_service, dependent: :destroy | 60 | has_one :gitlab_ci_service, dependent: :destroy |
58 | has_one :campfire_service, dependent: :destroy | 61 | has_one :campfire_service, dependent: :destroy |
59 | has_one :emails_on_push_service, dependent: :destroy | 62 | has_one :emails_on_push_service, dependent: :destroy |
@@ -322,6 +325,14 @@ class Project < ActiveRecord::Base | @@ -322,6 +325,14 @@ class Project < ActiveRecord::Base | ||
322 | gitlab_ci_service && gitlab_ci_service.active | 325 | gitlab_ci_service && gitlab_ci_service.active |
323 | end | 326 | end |
324 | 327 | ||
328 | + def ci_services | ||
329 | + services.select { |service| service.category == :ci } | ||
330 | + end | ||
331 | + | ||
332 | + def ci_service | ||
333 | + @ci_service ||= services.select(&:activated?).first | ||
334 | + end | ||
335 | + | ||
325 | # For compatibility with old code | 336 | # For compatibility with old code |
326 | def code | 337 | def code |
327 | path | 338 | path |
@@ -0,0 +1,34 @@ | @@ -0,0 +1,34 @@ | ||
1 | +# Base class for CI services | ||
2 | +# List methods you need to implement to get your CI service | ||
3 | +# working with GitLab Merge Requests | ||
4 | +class CiService < Service | ||
5 | + def category | ||
6 | + :ci | ||
7 | + end | ||
8 | + | ||
9 | + # Return complete url to build page | ||
10 | + # | ||
11 | + # Ex. | ||
12 | + # http://jenkins.example.com:8888/job/test1/scm/bySHA1/12d65c | ||
13 | + # | ||
14 | + def build_page(sha) | ||
15 | + # implement inside child | ||
16 | + end | ||
17 | + | ||
18 | + # Return string with build status or :error symbol | ||
19 | + # | ||
20 | + # Allowed states: 'success', 'failed', 'running', 'pending' | ||
21 | + # | ||
22 | + # | ||
23 | + # Ex. | ||
24 | + # @service.commit_status('13be4ac') | ||
25 | + # # => 'success' | ||
26 | + # | ||
27 | + # @service.commit_status('2abe4ac') | ||
28 | + # # => 'running' | ||
29 | + # | ||
30 | + # | ||
31 | + def commit_status(sha) | ||
32 | + # implement inside child | ||
33 | + end | ||
34 | +end |
app/models/project_services/gitlab_ci_service.rb
@@ -17,7 +17,7 @@ | @@ -17,7 +17,7 @@ | ||
17 | # api_key :string(255) | 17 | # api_key :string(255) |
18 | # | 18 | # |
19 | 19 | ||
20 | -class GitlabCiService < Service | 20 | +class GitlabCiService < CiService |
21 | attr_accessible :project_url | 21 | attr_accessible :project_url |
22 | 22 | ||
23 | validates :project_url, presence: true, if: :activated? | 23 | validates :project_url, presence: true, if: :activated? |
app/models/service.rb
@@ -33,6 +33,10 @@ class Service < ActiveRecord::Base | @@ -33,6 +33,10 @@ class Service < ActiveRecord::Base | ||
33 | active | 33 | active |
34 | end | 34 | end |
35 | 35 | ||
36 | + def category | ||
37 | + :common | ||
38 | + end | ||
39 | + | ||
36 | def title | 40 | def title |
37 | # implement inside child | 41 | # implement inside child |
38 | end | 42 | end |
@@ -41,6 +45,10 @@ class Service < ActiveRecord::Base | @@ -41,6 +45,10 @@ class Service < ActiveRecord::Base | ||
41 | # implement inside child | 45 | # implement inside child |
42 | end | 46 | end |
43 | 47 | ||
48 | + def help | ||
49 | + # implement inside child | ||
50 | + end | ||
51 | + | ||
44 | def to_param | 52 | def to_param |
45 | # implement inside child | 53 | # implement inside child |
46 | end | 54 | end |
app/views/projects/merge_requests/_show.html.haml
@@ -40,7 +40,7 @@ | @@ -40,7 +40,7 @@ | ||
40 | url_to_automerge_check: "#{automerge_check_project_merge_request_path(@project, @merge_request)}", | 40 | url_to_automerge_check: "#{automerge_check_project_merge_request_path(@project, @merge_request)}", |
41 | check_enable: #{@merge_request.unchecked? ? "true" : "false"}, | 41 | check_enable: #{@merge_request.unchecked? ? "true" : "false"}, |
42 | url_to_ci_check: "#{ci_status_project_merge_request_path(@project, @merge_request)}", | 42 | url_to_ci_check: "#{ci_status_project_merge_request_path(@project, @merge_request)}", |
43 | - ci_enable: #{@project.gitlab_ci? ? "true" : "false"}, | 43 | + ci_enable: #{@project.ci_service ? "true" : "false"}, |
44 | current_status: "#{@merge_request.merge_status_name}", | 44 | current_status: "#{@merge_request.merge_status_name}", |
45 | action: "#{controller.action_name}" | 45 | action: "#{controller.action_name}" |
46 | }); | 46 | }); |
app/views/projects/merge_requests/show/_state_widget.html.haml
1 | .panel.mr-state-widget.panel-default | 1 | .panel.mr-state-widget.panel-default |
2 | - - if @merge_request.source_project.gitlab_ci? && @commits.any? | 2 | + - if @merge_request.source_project.ci_service && @commits.any? |
3 | .panel-heading | 3 | .panel-heading |
4 | = render "projects/merge_requests/show/mr_ci" | 4 | = render "projects/merge_requests/show/mr_ci" |
5 | .panel-body | 5 | .panel-body |
app/views/projects/services/_form.html.haml
@@ -17,6 +17,9 @@ | @@ -17,6 +17,9 @@ | ||
17 | - @service.errors.full_messages.each do |msg| | 17 | - @service.errors.full_messages.each do |msg| |
18 | %li= msg | 18 | %li= msg |
19 | 19 | ||
20 | + - if @service.help.present? | ||
21 | + .bs-callout | ||
22 | + = @service.help | ||
20 | 23 | ||
21 | .form-group | 24 | .form-group |
22 | = f.label :active, "Active", class: "control-label" | 25 | = f.label :active, "Active", class: "control-label" |