Sha256: bf9b141475d18bedc8daaaf4bc3ae7e8f98e6daa99a1105ffda30c5df6284af1

Contents?: true

Size: 1.57 KB

Versions: 6

Compression:

Stored size: 1.57 KB

Contents

require 'httparty'

module Lois
  class Github
    Status = Struct.new(:state, :context, :description, :artifact_url)

    attr_reader :credentials, :organization, :repository, :commit_sha

    def initialize(credentials, organization, repository, commit_sha)
      @credentials = credentials
      @organization = organization
      @repository = repository
      @commit_sha = commit_sha
    end

    def pending(context, description, artifact_url = nil)
      update_status(Status.new('pending', context, description, artifact_url))
    end

    def success(context, description, artifact_url = nil)
      update_status(Status.new('success', context, description, artifact_url))
    end

    def failure(context, description, artifact_url = nil)
      update_status(Status.new('failure', context, description, artifact_url))
    end

    def commit_status_api_url
      @commit_status_api_url ||= File.join(
        'https://api.github.com/repos',
        organization,
        repository,
        'statuses',
        commit_sha
      )
    end

    private

    def update_status(status)
      username, password = credentials.split(':')
      auth = { username: username, password: password }
      body = {
        state: status.state,
        context: status.context,
        description: status.description
      }
      body[:target_url] = status.artifact_url if status.artifact_url
      response = ::HTTParty.post(commit_status_api_url, basic_auth: auth, body: body.to_json)
      return if  response.success?

      puts "Failed to update github: #{response.code}-#{response.body}"
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
lois-0.1.8 lib/lois/github.rb
lois-0.1.7 lib/lois/github.rb
lois-0.1.6 lib/lois/github.rb
lois-0.1.5 lib/lois/github.rb
lois-0.1.4 lib/lois/github.rb
lois-0.1.3 lib/lois/github.rb