class Dpl::Providers::Releases

Constants

OCTOKIT_OPTS
TIMEOUTS
URL

Public Instance Methods

api() click to toggle source
# File lib/dpl/providers/releases.rb, line 206
def api
  @api ||= Octokit::Client.new(**creds, auto_paginate: true, connection_options: { request: TIMEOUTS })
end
asset(name) click to toggle source
# File lib/dpl/providers/releases.rb, line 186
def asset(name)
  api.release_assets(url).detect { |asset| asset.name == name }
end
content_type(file) click to toggle source
# File lib/dpl/providers/releases.rb, line 138
def content_type(file)
  type = MIME::Types.type_for(file).first
  type ||= 'application/octet-stream'
  type.to_s
end
create_release() click to toggle source
# File lib/dpl/providers/releases.rb, line 159
def create_release
  api.create_release(slug, local_tag, octokit_opts.merge(draft: true))
rescue Octokit::NotFound
  error :insufficient_perm
end
creds() click to toggle source
# File lib/dpl/providers/releases.rb, line 210
def creds
  username && password ? { login: username, password: } : { access_token: token }
end
delete(asset, file) click to toggle source
# File lib/dpl/providers/releases.rb, line 111
def delete(asset, file)
  info :overwrite_existing, file
  api.delete_release_asset(asset.url)
end
deploy() click to toggle source
# File lib/dpl/providers/releases.rb, line 92
def deploy
  upload_files
  api.update_release(url, octokit_opts)
end
env_tag() click to toggle source
# File lib/dpl/providers/releases.rb, line 169
def env_tag
  tag = ENV['TRAVIS_TAG']
  tag unless tag.to_s.empty?
end
exists?(file) click to toggle source
# File lib/dpl/providers/releases.rb, line 220
def exists?(file)
  return true if File.exist?(file)

  error :missing_file, file
  false
end
file?(file) click to toggle source
# File lib/dpl/providers/releases.rb, line 227
def file?(file)
  return true if File.file?(file)

  warn :not_a_file, file
  false
end
files() click to toggle source
# File lib/dpl/providers/releases.rb, line 214
def files
  files = file_glob? ? Dir.glob("{#{file.join(',')}}").uniq : file
  files = files.select { |file| exists?(file) }
  files.select { |file| file?(file) }
end
local_tag() click to toggle source
# File lib/dpl/providers/releases.rb, line 165
def local_tag
  env_tag || git_tag
end
login() click to toggle source
# File lib/dpl/providers/releases.rb, line 86
def login
  user.login
  info :login, user.login
  error :insufficient_scopes unless sufficient_scopes?
end
octokit_opts() click to toggle source
# File lib/dpl/providers/releases.rb, line 116
def octokit_opts
  opts = with_tag(self.opts.dup)
  opts = with_target_commitish(opts)
  opts = opts.select { |key, _| OCTOKIT_OPTS.include?(key) }
  compact(opts.merge(body: release_notes, draft: draft?))
end
release() click to toggle source
# File lib/dpl/providers/releases.rb, line 155
def release
  releases.detect { |release| release.tag_name == local_tag }
end
release_notes() click to toggle source
Calls superclass method
# File lib/dpl/providers/releases.rb, line 190
def release_notes
  super || release_notes_file || nil
end
release_notes_file() click to toggle source
Calls superclass method
# File lib/dpl/providers/releases.rb, line 194
def release_notes_file
  release_notes_file? && exists?(super) && read(super)
end
releases() click to toggle source
# File lib/dpl/providers/releases.rb, line 202
def releases
  @releases ||= api.releases(slug)
end
same_repo?() click to toggle source
# File lib/dpl/providers/releases.rb, line 182
def same_repo?
  slug == repo_slug
end
slug() click to toggle source
# File lib/dpl/providers/releases.rb, line 178
def slug
  repo || repo_slug
end
sufficient_scopes?() click to toggle source
# File lib/dpl/providers/releases.rb, line 174
def sufficient_scopes?
  api.scopes.include?('public_repo') || api.scopes.include?('repo')
end
upload_file(path) click to toggle source
# File lib/dpl/providers/releases.rb, line 101
def upload_file(path)
  file = normalize_filename(path)
  asset = asset(file)
  return info :skip_existing, file if asset && !overwrite?

  delete(asset, file) if asset
  info :upload_file, file
  api.upload_asset(url, path, name: file, content_type: content_type(path))
end
upload_files() click to toggle source
# File lib/dpl/providers/releases.rb, line 97
def upload_files
  files.each { |file| upload_file(file) }
end
url() click to toggle source
# File lib/dpl/providers/releases.rb, line 144
def url
  if release_number?
    format(URL, slug, release_number)
  elsif release
    release.rels[:self].href
  else
    create_release.rels[:self].href
  end
end
user() click to toggle source
# File lib/dpl/providers/releases.rb, line 198
def user
  @user ||= api.user
end
validate() click to toggle source
# File lib/dpl/providers/releases.rb, line 80
def validate
  info :deploy
  shell :git_fetch_tags if env_tag.nil?
  info :local_tag
end
with_tag(opts) click to toggle source
# File lib/dpl/providers/releases.rb, line 124
def with_tag(opts)
  return opts if tag_name? || draft?

  info :set_tag_name, local_tag
  opts.merge(tag_name: local_tag)
end
with_target_commitish(opts) click to toggle source
# File lib/dpl/providers/releases.rb, line 131
def with_target_commitish(opts)
  return opts if target_commitish? || !same_repo?

  info :set_target_commitish, git_sha
  opts.merge(target_commitish: git_sha)
end