require 'github_api' require 'tempfile'

namespace :tddium do

desc "tddium environment pre-run setup task"
task :pre_hook do
  if token && !token.empty?
    begin
      github.repos.statuses.create(remote[0], remote[1], sha,
        :state => "pending",
        :description => "Running build ##{session}.",
        :target_url => url)
    rescue Github::Error::GithubError => e
      STDERR.puts("Caught Github error when updating status: #{e.message}")
    end
  end
end

desc "tddium environment post-build setup task"
task :post_build_hook do
  if token && !token.empty?
    case ENV['TDDIUM_BUILD_STATUS']
    when "passed"
      status = "success"
      description = "Build ##{session} succeeded!"
    when "error"
      status = "error"
      description = "Build ##{session} encountered an error."
    else
      status = "failure"
      description = "Build ##{session} failed."
    end

    begin
      github.repos.statuses.create(remote[0], remote[1], sha,
        :state => status,
        :description => description,
        :target_url => url)
    rescue Github::Error::GithubError => e
      STDERR.puts("Caught Github error when updating status: #{e.message}")
    end
  end
end

def url
  "https://api.tddium.com/1/reports/#{session}"
end

def sha
  `git rev-parse HEAD`.strip
end

def session
  ENV['TDDIUM_SESSION_ID']
end

def token
  ENV['GITHUB_TOKEN']
end

def github
  @github ||= Github.new(:oauth_token => token)
end

def remote
  url = `git config --get remote.ci-origin.url`.strip
  url =~ /.*[:\/](.*\/[^\.]*)/ && $1.split("/")
end

end