diff options
| author | Lin Jen-Shin <godfat@godfat.org> | 2016-08-24 21:04:38 +0800 |
|---|---|---|
| committer | Lin Jen-Shin <godfat@godfat.org> | 2016-08-24 21:04:38 +0800 |
| commit | 4a83cecd706462127da02e2e492daa9d2396d2d7 (patch) | |
| tree | 02925b2c8e8a9604bde39e1262742065e41ceaf5 /app/models/project_services | |
| parent | 4384e53ec56fa361014fc8e49a84608536596949 (diff) | |
| parent | 02591b043052eb4f8041f8cf51546fab272d7b61 (diff) | |
| download | gitlab-ce-4a83cecd706462127da02e2e492daa9d2396d2d7.tar.gz | |
Merge remote-tracking branch 'upstream/master' into pipeline-hooks
* upstream/master: (1174 commits)
Added CHANGELOG
Added unfold test to parallel and added 'diff discussion' context
Fix Spinach branches spec
Better first match on this MR also
Change merge_error column from string to text type
Fix typo in gitlab_flow.md
entities: make Environment inherit EnvironmentBasic
Updated to optimized specs from !5864
Added 'with an unfolded line should not allow commenting' scenario (line 125)
Added addtional 'renderable' validator to check 'data-note-type' attr exists
Allow passing an index to selectRowAtIndex
Fixed enter key in search input not working
Fix file links on project page Files view
Fix incorrect "stopped impersonation" log message
8.11 is released, long live 8.12
Also check if Akismet is enabled, before showing the `Submit as spam` button.
fix location of markdown help location
Fix for update 8.10-to-8.11.md doc.
Appease the linter.
Add Ruby 2.3 upgrade notes.
...
Diffstat (limited to 'app/models/project_services')
| -rw-r--r-- | app/models/project_services/builds_email_service.rb | 3 | ||||
| -rw-r--r-- | app/models/project_services/campfire_service.rb | 51 | ||||
| -rw-r--r-- | app/models/project_services/pivotaltracker_service.rb | 31 |
3 files changed, 72 insertions, 13 deletions
diff --git a/app/models/project_services/builds_email_service.rb b/app/models/project_services/builds_email_service.rb index 5e166471077..fa66e5864b8 100644 --- a/app/models/project_services/builds_email_service.rb +++ b/app/models/project_services/builds_email_service.rb @@ -51,8 +51,7 @@ class BuildsEmailService < Service end def test_data(project = nil, user = nil) - build = project.builds.last - Gitlab::BuildDataBuilder.build(build) + Gitlab::DataBuilder::Build.build(project.builds.last) end def fields diff --git a/app/models/project_services/campfire_service.rb b/app/models/project_services/campfire_service.rb index 511b2eac792..5af93860d09 100644 --- a/app/models/project_services/campfire_service.rb +++ b/app/models/project_services/campfire_service.rb @@ -1,4 +1,6 @@ class CampfireService < Service + include HTTParty + prop_accessor :token, :subdomain, :room validates :token, presence: true, if: :activated? @@ -29,18 +31,53 @@ class CampfireService < Service def execute(data) return unless supported_events.include?(data[:object_kind]) - room = gate.find_room_by_name(self.room) - return true unless room - + self.class.base_uri base_uri message = build_message(data) - - room.speak(message) + speak(self.room, message, auth) end private - def gate - @gate ||= Tinder::Campfire.new(subdomain, token: token) + def base_uri + @base_uri ||= "https://#{subdomain}.campfirenow.com" + end + + def auth + # use a dummy password, as explained in the Campfire API doc: + # https://github.com/basecamp/campfire-api#authentication + @auth ||= { + basic_auth: { + username: token, + password: 'X' + } + } + end + + # Post a message into a room, returns the message Hash in case of success. + # Returns nil otherwise. + # https://github.com/basecamp/campfire-api/blob/master/sections/messages.md#create-message + def speak(room_name, message, auth) + room = rooms(auth).find { |r| r["name"] == room_name } + return nil unless room + + path = "/room/#{room["id"]}/speak.json" + body = { + body: { + message: { + type: 'TextMessage', + body: message + } + } + } + res = self.class.post(path, auth.merge(body)) + res.code == 201 ? res : nil + end + + # Returns a list of rooms, or []. + # https://github.com/basecamp/campfire-api/blob/master/sections/rooms.md#get-rooms + def rooms(auth) + res = self.class.get("/rooms.json", auth) + res.code == 200 ? res["rooms"] : [] end def build_message(push) diff --git a/app/models/project_services/pivotaltracker_service.rb b/app/models/project_services/pivotaltracker_service.rb index ad19b7795da..5301f9fa0ff 100644 --- a/app/models/project_services/pivotaltracker_service.rb +++ b/app/models/project_services/pivotaltracker_service.rb @@ -1,7 +1,9 @@ class PivotaltrackerService < Service include HTTParty - prop_accessor :token + API_ENDPOINT = 'https://www.pivotaltracker.com/services/v5/source_commits' + + prop_accessor :token, :restrict_to_branch validates :token, presence: true, if: :activated? def title @@ -18,7 +20,17 @@ class PivotaltrackerService < Service def fields [ - { type: 'text', name: 'token', placeholder: '' } + { + type: 'text', + name: 'token', + placeholder: 'Pivotal Tracker API token.' + }, + { + type: 'text', + name: 'restrict_to_branch', + placeholder: 'Comma-separated list of branches which will be ' \ + 'automatically inspected. Leave blank to include all branches.' + } ] end @@ -28,8 +40,8 @@ class PivotaltrackerService < Service def execute(data) return unless supported_events.include?(data[:object_kind]) + return unless allowed_branch?(data[:ref]) - url = 'https://www.pivotaltracker.com/services/v5/source_commits' data[:commits].each do |commit| message = { 'source_commit' => { @@ -40,7 +52,7 @@ class PivotaltrackerService < Service } } PivotaltrackerService.post( - url, + API_ENDPOINT, body: message.to_json, headers: { 'Content-Type' => 'application/json', @@ -49,4 +61,15 @@ class PivotaltrackerService < Service ) end end + + private + + def allowed_branch?(ref) + return true unless ref.present? && restrict_to_branch.present? + + branch = Gitlab::Git.ref_name(ref) + allowed_branches = restrict_to_branch.split(',').map(&:strip) + + branch.present? && allowed_branches.include?(branch) + end end |
