lib/fourchette/github.rb
class Fourchette::GitHub
include Fourchette::Logger
def enable_hook
logger.info 'Enabling the hooks for your app...'
if fourchette_hook
enable(fourchette_hook)
else
create_hook
end
end
def disable_hook
logger.info 'Disabling the hook for your app...'
if fourchette_hook && fourchette_hook.active == true
disable(fourchette_hook)
else
logger.error 'Nothing to disable, move along!'
end
end
def update_hook
logger.info 'Updating the hook for your app...'
toggle_active_state_to fourchette_hook, fourchette_hook.active
end
def delete_hook
logger.info 'Removing the hook for your app...'
octokit.remove_hook(ENV['FOURCHETTE_GITHUB_PROJECT'], fourchette_hook.id)
end
def comment_pr(pr_number, comment)
if Fourchette::DEBUG
comment = <<-TXT
****** FOURCHETTE COMMENT ******\n
\n#{comment}\n\n
****** END OF FOURCHETTE COMMENT ******
TXT
end
octokit.add_comment(ENV['FOURCHETTE_GITHUB_PROJECT'], pr_number, comment)
end
private
def octokit
@octokit_client ||= Octokit::Client.new(
login: ENV['FOURCHETTE_GITHUB_USERNAME'],
password: ENV['FOURCHETTE_GITHUB_PERSONAL_TOKEN']
)
end
def create_hook
logger.info 'Creating a new hook...'
octokit.create_hook(
ENV['FOURCHETTE_GITHUB_PROJECT'],
'web',
hook_options,
events: ['pull_request'],
active: true
)
end
def hook_options
{
url: "#{ENV['FOURCHETTE_APP_URL']}/hooks",
content_type: 'json',
fourchette_env: FOURCHETTE_CONFIG[:env_name]
}
end
def hooks
octokit.hooks(ENV['FOURCHETTE_GITHUB_PROJECT'])
end
def fourchette_hook
existing_hook = nil
hooks.each do |hook|
existing_hook = hook unless hook.config && hook.config.fourchette_env.nil?
end
existing_hook
end
def enable(hook)
if hook.active
logger.error 'The hook is already active!'
else
toggle_active_state_to hook, true
end
end
def disable(hook)
toggle_active_state_to hook, false
end
def toggle_active_state_to(hook, active_value)
octokit.edit_hook(
ENV['FOURCHETTE_GITHUB_PROJECT'],
hook.id,
'web',
hook_options,
events: ['pull_request'],
active: active_value
)
end
end