class DPL::Provider::Releases

Public Instance Methods

api() click to toggle source
# File lib/dpl/provider/releases.rb, line 31
def api
  if options[:user] and options[:password]
    @api ||= Octokit::Client.new(:login => options[:user], :password => options[:password])
  else
    @api ||= Octokit::Client.new(:access_token => option(:api_key))
  end
end
check_app() click to toggle source
# File lib/dpl/provider/releases.rb, line 65
def check_app
  log "Deploying to repo: #{slug}"

  context.shell 'git fetch --tags' if travis_tag.nil?
  log "Current tag is: #{get_tag}"
end
check_auth() click to toggle source
# File lib/dpl/provider/releases.rb, line 76
def check_auth
  setup_auth

  unless api.scopes.include? 'public_repo' or api.scopes.include? 'repo'
    raise Error, "Dpl does not have permission to upload assets. Make sure your token contains the repo or public_repo scope."
  end

  log "Logged in as #{user.name}"
end
files() click to toggle source
# File lib/dpl/provider/releases.rb, line 51
def files
  if options[:file_glob]
    Array(options[:file]).map do |glob|
      Dir.glob(glob)
    end.flatten
  else
    Array(options[:file])
  end
end
get_tag() click to toggle source
# File lib/dpl/provider/releases.rb, line 23
def get_tag
  if travis_tag.nil?
    @tag ||= `git describe --tags --exact-match 2>/dev/null`.chomp
  else
    @tag ||= travis_tag
  end
end
needs_key?() click to toggle source
# File lib/dpl/provider/releases.rb, line 61
def needs_key?
  false
end
push_app() click to toggle source
# File lib/dpl/provider/releases.rb, line 86
def push_app
  tag_matched = false
  release_url = nil

  if options[:release_number]
    tag_matched = true
    release_url = "https://api.github.com/repos/" + slug + "/releases/" + options[:release_number]
  else
    releases.each do |release|
      if release.tag_name == get_tag
        release_url = release.rels[:self].href
        tag_matched = true
      end
    end
  end

  #If for some reason GitHub hasn't already created a release for the tag, create one
  if tag_matched == false
    release_url = api.create_release(slug, get_tag, options.merge({:draft => true})).rels[:self].href
  end

  files.each do |file|
    existing_url = nil
    filename = Pathname.new(file).basename.to_s
    api.release(release_url).rels[:assets].get.data.each do |existing_file|
      if existing_file.name == filename
        existing_url = existing_file.url
      end
    end
    if !existing_url
      upload_file(file, filename, release_url)
    elsif existing_url && options[:overwrite]
      log "#{filename} already exists, overwriting."
      api.delete_release_asset(existing_url)
      upload_file(file, filename, release_url)
    else
      log "#{filename} already exists, skipping."
    end
  end

  api.update_release(release_url, {:draft => false}.merge(options))
end
releases() click to toggle source
# File lib/dpl/provider/releases.rb, line 43
def releases
  @releases ||= api.releases(slug)
end
setup_auth() click to toggle source
# File lib/dpl/provider/releases.rb, line 72
def setup_auth
  user.login
end
slug() click to toggle source
# File lib/dpl/provider/releases.rb, line 39
def slug
  options.fetch(:repo) { context.env['TRAVIS_REPO_SLUG'] }
end
travis_tag() click to toggle source
# File lib/dpl/provider/releases.rb, line 14
def travis_tag
  # Check if $TRAVIS_TAG is unset or set but empty
  if context.env.fetch('TRAVIS_TAG','') == ''
    nil
  else
    context.env['TRAVIS_TAG']
  end
end
upload_file(file, filename, release_url) click to toggle source
# File lib/dpl/provider/releases.rb, line 129
def upload_file(file, filename, release_url)
  content_type = MIME::Types.type_for(file).first.to_s
  if content_type.empty?
    # Specify the default content type, as it is required by GitHub
    content_type = "application/octet-stream"
  end
  api.upload_asset(release_url, file, {:name => filename, :content_type => content_type})
end
user() click to toggle source
# File lib/dpl/provider/releases.rb, line 47
def user
  @user ||= api.user
end