Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
branch: master
Fetching contributors…

Octocat-spinner-32-eaf2f5

Cannot retrieve contributors at this time

file 90 lines (74 sloc) 1.873 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
require 'sinatra'
require 'net/http'
require 'net/https'
require 'json'
require 'github'

set :ghuser, ENV['GH_USER']
set :ghpass, ENV['GH_PASSWORD']
set :token, ENV['TOKEN']
set :ref, ENV['REF'] || "refs/heads/master"

helpers do
  def payload
    @payload ||= JSON.parse(params[:payload])
  end

  def repo
    @repo ||= "#{payload["repository"]["owner"]["name"]}/#{payload["repository"]["name"]}"
  end

  def github
    @github ||= GitHub.new(repo, settings.ghuser, settings.ghpass)
  end

  def authorized?
    settings.token == params[:token]
  end

  def respond_to_commits
    return "UNKNOWN APP" unless authorized?
    return "Ignoring commits to #{payload["ref"]}" unless payload["ref"] == settings.ref
    payload["commits"].reverse.each do |commit|
      yield commit
    end
    "OK"
  end
end

get '/' do
  "GitHub Pong"
end

post '/label/refer/:label/:token' do
  respond_to_commits do |commit|
    GitHub.nonclosing_issues(commit["message"]) do |issue|
      github.label_issue issue, params[:label]
    end
  end
end

post '/label/closed/:label/:token' do
  respond_to_commits do |commit|
    GitHub.closed_issues(commit["message"]) do |issue|
      github.label_issue issue, params[:label]
    end
  end
end

post '/label/remove/closed/:label/:token' do
  respond_to_commits do |commit|
    GitHub.closed_issues(commit["message"]) do |issue|
      github.remove_issue_label issue, params[:label]
    end
  end
end

post '/reopen/:token' do
  respond_to_commits do |commit|
    GitHub.closed_issues(commit["message"]) do |issue|
      github.reopen_issue issue
    end
  end
end

post '/comment/:token' do
  respond_to_commits do |commit|
    comment = <<EOM
Referenced by #{commit["id"]}

#{commit["message"]}

_Added by ghpong_
EOM
    GitHub.nonclosing_issues(commit["message"]) do |issue|
      github.comment_issue issue, comment
    end
  end
end

Something went wrong with that request. Please try again.