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