Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

implement travis event handling #97

Merged
merged 2 commits into from
Dec 22, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
28 changes: 28 additions & 0 deletions app/lib/travis_event.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# 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)
Raven.capture_message("Unknown Hook Received: #{payload['type']}", extra: payload)
# case payload['type']
# when 'push'
# TravisEvent::Push.new(payload)
# when 'pull_request'
# TravisEvent::Push.new(payload)
# when 'cron'
# TravisEvent::Push.new(payload)
# when 'api'
# TravisEvent::Push.new(payload)
# else
# Raven.capture_message("Unknown Hook Received: #{payload['type']}", extra: payload)
# end
end
end
12 changes: 12 additions & 0 deletions app/lib/travis_event/base.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# frozen_string_literal: true

class TravisEvent
class Base
attr_reader :payload

def initialize(payload)
@payload = payload
process
end
end
end
9 changes: 9 additions & 0 deletions app/lib/travis_event/push.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# 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