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 | 160 | end |
161 | 161 | |
162 | 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 | 164 | response = {status: status} |
165 | 165 | |
166 | 166 | render json: response | ... | ... |
app/helpers/merge_requests_helper.rb
... | ... | @@ -32,7 +32,7 @@ module MergeRequestsHelper |
32 | 32 | end |
33 | 33 | |
34 | 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 | 36 | end |
37 | 37 | |
38 | 38 | def merge_path_description(merge_request, separator) | ... | ... |
app/models/project.rb
... | ... | @@ -54,6 +54,9 @@ class Project < ActiveRecord::Base |
54 | 54 | belongs_to :namespace |
55 | 55 | |
56 | 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 | 60 | has_one :gitlab_ci_service, dependent: :destroy |
58 | 61 | has_one :campfire_service, dependent: :destroy |
59 | 62 | has_one :emails_on_push_service, dependent: :destroy |
... | ... | @@ -322,6 +325,14 @@ class Project < ActiveRecord::Base |
322 | 325 | gitlab_ci_service && gitlab_ci_service.active |
323 | 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 | 336 | # For compatibility with old code |
326 | 337 | def code |
327 | 338 | path | ... | ... |
... | ... | @@ -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
app/models/service.rb
... | ... | @@ -33,6 +33,10 @@ class Service < ActiveRecord::Base |
33 | 33 | active |
34 | 34 | end |
35 | 35 | |
36 | + def category | |
37 | + :common | |
38 | + end | |
39 | + | |
36 | 40 | def title |
37 | 41 | # implement inside child |
38 | 42 | end |
... | ... | @@ -41,6 +45,10 @@ class Service < ActiveRecord::Base |
41 | 45 | # implement inside child |
42 | 46 | end |
43 | 47 | |
48 | + def help | |
49 | + # implement inside child | |
50 | + end | |
51 | + | |
44 | 52 | def to_param |
45 | 53 | # implement inside child |
46 | 54 | end | ... | ... |
app/views/projects/merge_requests/_show.html.haml
... | ... | @@ -40,7 +40,7 @@ |
40 | 40 | url_to_automerge_check: "#{automerge_check_project_merge_request_path(@project, @merge_request)}", |
41 | 41 | check_enable: #{@merge_request.unchecked? ? "true" : "false"}, |
42 | 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 | 44 | current_status: "#{@merge_request.merge_status_name}", |
45 | 45 | action: "#{controller.action_name}" |
46 | 46 | }); | ... | ... |
app/views/projects/merge_requests/show/_state_widget.html.haml
app/views/projects/services/_form.html.haml