Set supported events per project service.

This commit is contained in:
Douwe Maan 2015-02-28 17:33:18 +01:00
parent 85fa334eb6
commit d57e809cbd
19 changed files with 156 additions and 57 deletions

View file

@ -65,9 +65,12 @@ automatically inspected. Leave blank to include all branches.'
]
end
def supported_events
%w(push)
end
def execute(data)
object_kind = data[:object_kind]
return unless object_kind == "push"
return unless supported_events.include?(data[:object_kind])
Asana.configure do |client|
client.api_key = api_key

View file

@ -42,9 +42,12 @@ class AssemblaService < Service
]
end
def supported_events
%w(push)
end
def execute(data)
object_kind = data[:object_kind]
return unless object_kind == "push"
return unless supported_events.include?(data[:object_kind])
url = "https://atlas.assembla.com/spaces/#{subdomain}/github_tool?secret_key=#{token}"
AssemblaService.post(url, body: { payload: data }.to_json, headers: { 'Content-Type' => 'application/json' })

View file

@ -73,6 +73,10 @@ class BambooService < CiService
]
end
def supported_events
%w(push)
end
def build_info(sha)
url = URI.parse("#{bamboo_url}/rest/api/latest/result?label=#{sha}")
@ -123,8 +127,7 @@ class BambooService < CiService
end
def execute(data)
object_kind = data[:object_kind]
return unless object_kind == "push"
return unless supported_events.include?(data[:object_kind])
# Bamboo requires a GET and does not take any data.
self.class.get("#{bamboo_url}/updateAndBuild.action?buildKey=#{build_key}",

View file

@ -36,9 +36,12 @@ class BuildboxService < CiService
hook.save
end
def supported_events
%w(push)
end
def execute(data)
object_kind = data[:object_kind]
return unless object_kind == "push"
return unless supported_events.include?(data[:object_kind])
service_hook.execute(data)
end

View file

@ -41,9 +41,12 @@ class CampfireService < Service
]
end
def supported_events
%w(push)
end
def execute(data)
object_kind = data[:object_kind]
return unless object_kind == "push"
return unless supported_events.include?(data[:object_kind])
room = gate.find_room_by_name(self.room)
return true unless room

View file

@ -25,6 +25,10 @@ class CiService < Service
:ci
end
def supported_events
%w(push)
end
# Return complete url to build page
#
# Ex.

View file

@ -33,9 +33,12 @@ class EmailsOnPushService < Service
'emails_on_push'
end
def supported_events
%w(push)
end
def execute(data)
object_kind = data[:object_kind]
return unless object_kind == "push"
return unless supported_events.include?(data[:object_kind])
EmailsOnPushWorker.perform_async(project_id, recipients, data)
end

View file

@ -41,9 +41,12 @@ class FlowdockService < Service
]
end
def supported_events
%w(push)
end
def execute(data)
object_kind = data[:object_kind]
return unless object_kind == "push"
return unless supported_events.include?(data[:object_kind])
Flowdock::Git.post(
data[:ref],

View file

@ -42,9 +42,12 @@ class GemnasiumService < Service
]
end
def supported_events
%w(push)
end
def execute(data)
object_kind = data[:object_kind]
return unless object_kind == "push"
return unless supported_events.include?(data[:object_kind])
Gemnasium::GitlabService.execute(
ref: data[:ref],

View file

@ -30,9 +30,12 @@ class GitlabCiService < CiService
hook.save
end
def supported_events
%w(push tag_push)
end
def execute(data)
object_kind = data[:object_kind]
return unless %w(push tag_push).include?(object_kind)
return unless supported_events.include?(data[:object_kind])
service_hook.execute(data)
end

View file

@ -44,9 +44,12 @@ class HipchatService < Service
]
end
def supported_events
%w(push)
end
def execute(data)
object_kind = data[:object_kind]
return unless object_kind == "push"
return unless supported_events.include?(data[:object_kind])
gate[room].send('GitLab', create_message(data))
end

View file

@ -69,9 +69,12 @@ class IssueTrackerService < Service
end
end
def supported_events
%w(push)
end
def execute(data)
object_kind = data[:object_kind]
return unless object_kind == "push"
return unless supported_events.include?(data[:object_kind])
message = "#{self.type} was unable to reach #{self.project_url}. Check the url and try again."
result = false

View file

@ -41,9 +41,12 @@ class PivotaltrackerService < Service
]
end
def supported_events
%w(push)
end
def execute(data)
object_kind = data[:object_kind]
return unless object_kind == "push"
return unless supported_events.include?(data[:object_kind])
url = 'https://www.pivotaltracker.com/services/v5/source_commits'
data[:commits].each do |commit|

View file

@ -80,9 +80,12 @@ class PushoverService < Service
]
end
def supported_events
%w(push)
end
def execute(data)
object_kind = data[:object_kind]
return unless object_kind == "push"
return unless supported_events.include?(data[:object_kind])
ref = data[:ref].gsub('refs/heads/', '')
before = data[:before]

View file

@ -42,7 +42,12 @@ class SlackService < Service
]
end
def supported_events
%w(push issue merge_request)
end
def execute(data)
return unless supported_events.include?(data[:object_kind])
return unless webhook.present?
object_kind = data[:object_kind]

View file

@ -61,6 +61,10 @@ class TeamcityService < CiService
'teamcity'
end
def supported_events
%w(push)
end
def fields
[
{ type: 'text', name: 'teamcity_url',
@ -120,8 +124,7 @@ class TeamcityService < CiService
end
def execute(data)
object_kind = data[:object_kind]
return unless object_kind == "push"
return unless supported_events.include?(data[:object_kind])
auth = {
username: username,

View file

@ -80,6 +80,10 @@ class Service < ActiveRecord::Base
[]
end
def supported_events
%w(push tag_push issue merge_request)
end
def execute
# implement inside child
end
@ -105,6 +109,8 @@ class Service < ActiveRecord::Base
end
def async_execute(data)
return unless supported_events.include?(data[:object_kind])
Sidekiq::Client.enqueue(ProjectServiceWorker, id, data)
end

View file

@ -14,6 +14,43 @@
= preserve do
= markdown @service.help
.form-group
= f.label :url, "Trigger", class: 'control-label'
- if @service.supported_events.length > 1
.col-sm-10
- if @service.supported_events.include?("push")
%div
= f.check_box :push_events, class: 'pull-left'
.prepend-left-20
= f.label :push_events, class: 'list-label' do
%strong Push events
%p.light
This url will be triggered by a push to the repository
- if @service.supported_events.include?("tag_push")
%div
= f.check_box :tag_push_events, class: 'pull-left'
.prepend-left-20
= f.label :tag_push_events, class: 'list-label' do
%strong Tag push events
%p.light
This url will be triggered when a new tag is pushed to the repository
- if @service.supported_events.include?("issue")
%div
= f.check_box :issues_events, class: 'pull-left'
.prepend-left-20
= f.label :issues_events, class: 'list-label' do
%strong Issues events
%p.light
This url will be triggered when an issue is created
- if @service.supported_events.include?("merge_request")
%div
= f.check_box :merge_requests_events, class: 'pull-left'
.prepend-left-20
= f.label :merge_requests_events, class: 'list-label' do
%strong Merge Request events
%p.light
This url will be triggered when a merge request is created
- @service.fields.each do |field|
- name = field[:name]
- value = @service.send(name) unless field[:type] == 'password'

View file

@ -29,35 +29,40 @@
.form-group
= f.label :url, "Trigger", class: 'control-label'
.col-sm-10
%div
= f.check_box :push_events, class: 'pull-left'
.prepend-left-20
= f.label :push_events, class: 'list-label' do
%strong Push events
%p.light
This url will be triggered by a push to the repository
%div
= f.check_box :tag_push_events, class: 'pull-left'
.prepend-left-20
= f.label :tag_push_events, class: 'list-label' do
%strong Tag push events
%p.light
This url will be triggered when a new tag is pushed to the repository
%div
= f.check_box :issues_events, class: 'pull-left'
.prepend-left-20
= f.label :issues_events, class: 'list-label' do
%strong Issues events
%p.light
This url will be triggered when an issue is created
%div
= f.check_box :merge_requests_events, class: 'pull-left'
.prepend-left-20
= f.label :merge_requests_events, class: 'list-label' do
%strong Merge Request events
%p.light
This url will be triggered when a merge request is created
- if @service.supported_events.length > 1
.col-sm-10
- if @service.supported_events.include?("push")
%div
= f.check_box :push_events, class: 'pull-left'
.prepend-left-20
= f.label :push_events, class: 'list-label' do
%strong Push events
%p.light
This url will be triggered by a push to the repository
- if @service.supported_events.include?("tag_push")
%div
= f.check_box :tag_push_events, class: 'pull-left'
.prepend-left-20
= f.label :tag_push_events, class: 'list-label' do
%strong Tag push events
%p.light
This url will be triggered when a new tag is pushed to the repository
- if @service.supported_events.include?("issue")
%div
= f.check_box :issues_events, class: 'pull-left'
.prepend-left-20
= f.label :issues_events, class: 'list-label' do
%strong Issues events
%p.light
This url will be triggered when an issue is created
- if @service.supported_events.include?("merge_request")
%div
= f.check_box :merge_requests_events, class: 'pull-left'
.prepend-left-20
= f.label :merge_requests_events, class: 'list-label' do
%strong Merge Request events
%p.light
This url will be triggered when a merge request is created
- @service.fields.each do |field|
- name = field[:name]