class Chandler::GitHub

A facade for performing GitHub API operations on a given GitHub repository (specified as a git URL or as `owner/repo` format). Requires either that “~/.netrc” is properly configured with GitHub credentials or an auth token is available in the host environment at “CHANDLER_GITHUB_API_TOKEN”“

Constants

Error

Attributes

config[R]
remote[R]
repository[R]

Public Class Methods

new(repository:, config:) click to toggle source
# File lib/chandler/github.rb, line 14
def initialize(repository:, config:)
  @repository = repository
  @remote = Remote.parse(repository)
  @config = config
end

Public Instance Methods

create_or_update_release(tag:, title:, description:) click to toggle source
# File lib/chandler/github.rb, line 20
def create_or_update_release(tag:, title:, description:)
  return if config.dry_run?

  release = existing_release(tag)
  return update_release(release, title, description) if release

  create_release(tag, title, description)
rescue Octokit::NotFound
  raise InvalidRepository, repository
end

Private Instance Methods

client() click to toggle source
# File lib/chandler/github.rb, line 57
def client
  @client ||= Client.new(:host => remote.host).tap(&:login!)
end
create_release(tag, title, desc) click to toggle source
# File lib/chandler/github.rb, line 51
def create_release(tag, title, desc)
  client.create_release(
    remote.repository, tag, :name => title, :body => desc
  )
end
existing_release(tag) click to toggle source
# File lib/chandler/github.rb, line 35
def existing_release(tag)
  release = client.release_for_tag(remote.repository, tag)
  release.id.nil? ? nil : release
rescue Octokit::NotFound
  nil
end
release_unchanged?(release, title, desc) click to toggle source
# File lib/chandler/github.rb, line 47
def release_unchanged?(release, title, desc)
  release.name == title && release.body.to_s.strip == desc.strip
end
update_release(release, title, desc) click to toggle source
# File lib/chandler/github.rb, line 42
def update_release(release, title, desc)
  return if release_unchanged?(release, title, desc)
  client.update_release(release.url, :name => title, :body => desc)
end