frobichaud/docker-github-automerge

View on GitHub
app.rb

Summary

Maintainability
A
0 mins
Test Coverage
require 'sinatra'
require 'sinatra/base'
require 'sinatra/reloader'
require 'bundler/setup'

require 'slack-notifier'

$LOAD_PATH.unshift("#{File.dirname(__FILE__)}/lib")
Dir.glob("#{File.dirname(__FILE__)}/lib/*.rb") { |lib|
  require File.basename(lib, '.*')
}

set :port, ENV['PORT'] || 8080
set :user, ENV['USER']
set :token, ENV['TOKEN']
set :host, ENV['HOST'] || 'https://api.github.com'
set :bind, '0.0.0.0'

raise ArgumentError, 'Missing user and token environment variables' unless settings.user && settings.token && settings.host

post '/webhooks' do
  body = request.body.read
  begin
    event = request.env['HTTP_X_GITHUB_EVENT']
    json = JSON.parse body

    case event
      when 'status'
        auto = AutoMerge.new json, settings.user, settings.token, settings.host
        auto.logger = logger
        auto.perform

      when 'pull_request'
        auto = MergeReport.new json, settings.user, settings.token, settings.host
        auto.logger = logger
        auto.perform
      else
        logger.info "Unsupported action: #{event}"
    end
    'success'

  rescue Exception => e
    if ENV['SLACK_WEBHOOK_URL']
      notifier = Slack::Notifier.new(ENV['SLACK_WEBHOOK_URL'])
      error = {
          fallback: 'AutoMerge server had an error while receiving webhook',
          text: 'AutoMerge server had an error while receiving webhook',
          color: 'danger'
      }
      notifier.ping 'AutoMerge', attachments: [error]
    end
    raise e
  end
end