Skip to content

Commit

Permalink
implement travis event handling
Browse files Browse the repository at this point in the history
  • Loading branch information
bastelfreak committed Oct 9, 2019
1 parent f4d94d1 commit 6ee6b8e
Show file tree
Hide file tree
Showing 6 changed files with 97 additions and 0 deletions.
12 changes: 12 additions & 0 deletions app/controllers/incoming_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ class IncomingController < ApplicationController
##
# Parse the whole payload from Github and hand it over to the GithubEvent handler
def github
# TODO: verify the payload
payload = request.body.read
useable_body = JSON.parse(payload).to_h

Expand All @@ -15,6 +16,17 @@ def github
GithubEvent.new(useable_body, request.headers['X-GitHub-Event'])
end

##
# Parse the whole payload from travis and hand it over to the TravisEvent handler
def travis
# TODO: verify the payload
# https://github.com/travis-ci/webhook-signature-verifier/blob/master/lib/webhook-signature-verifier.rb#L40
# https://docs.travis-ci.com/user/notifications/#verifying-webhook-requests
payload = request.body.read
useable_body = JSON.parse(payload).to_h
TravisEvent.new(useable_body)
end

private

def verify_signature(payload)
Expand Down
24 changes: 24 additions & 0 deletions app/lib/travis_event.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# frozen_string_literal: true

class TravisEvent
attr_reader :processor
delegate :process, to: :processor

##
# The TravisEvent handler checks which type of event we are dealing with.
#
# If it is a known event, create a specific handler and let it take care of
# the next steps. If not kick off a Sentry error.

def initialize(payload)
case payload['type']
when 'push'
TravisEvent::Push.new(payload)
when 'pull_request'
when 'cron'
when 'api'
else
Raven.capture_message("Unknown Hook Received: #{payload['type']}", extra: payload)
end
end
end
13 changes: 13 additions & 0 deletions app/lib/travis_event/base.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# frozen_string_literal: true

class TravisEvent
class Base

attr_reader :payload

def initialize(payload)
@payload = payload
process
end
end
end
10 changes: 10 additions & 0 deletions app/lib/travis_event/push.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# frozen_string_literal: true

class TravisEvent
class Push < TravisEvent::Base

def process
::TravisEvent.new(payload)
end
end
end
36 changes: 36 additions & 0 deletions app/models/travis.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# frozen_string_literal: true

class Travis < ApplicationRecord
belongs_to(:pull_requests)

def sef.update_with_travis_payload(payload)
Travis.where(travis_id: payload['id']).first_or_initialize.tap do |travis|
travis.type = payload['type']
travis.state = payload['state']
travis.status = payload['status']
travis.result = payload['result']
travis.status_message = payload['status_message']
travis.result_message = payload['result_message']
travis.started_at = payload['started_at']
travis.finished_at = payload['finished_at']
travis.duration = payload['duration']
travis.build_url = payload['build_url']
travis.commit_id = payload['commit_id']
travis.commit = payload['commit']
travis.base_commit = payload['base_commit']
travis.head_commit = payload['head_commit']
travis.branch = payload['branch']
travis.message = payload['message']
travis.compare_url = payload['compare_url']
travis.committed_at = payload['committed_at']
travis.author_name = payload['author_name']
travis.author_email = payload['author_email']
travis.committer_name = payload['committer_name']
travis._committer_email = payload['committer_email']
travis.pull_request = payload['pull_request']
travis.pull_request_number = payload['payload_request_number']
travis.request_title = payload['request_title']
travis.tag = payload['tag']
end
end
end
2 changes: 2 additions & 0 deletions config/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@

post 'incoming/github', to: 'incoming#github'

post 'incoming/travis', to: 'incoming#travis'

constraints ->(req) { req.session['user_id'] } do
mount Sidekiq::Web => '/sidekiq'
end
Expand Down

0 comments on commit 6ee6b8e

Please sign in to comment.