class DPL::Provider::Scalingo

Public Class Methods

new(context, options) click to toggle source
Calls superclass method DPL::Provider::new
# File lib/dpl/provider/scalingo.rb, line 16
def initialize(context, options)
  super
  @options = options
  @remote = options[:remote] || "scalingo"
  @branch = options[:branch] || "master"
end

Public Instance Methods

check_auth() click to toggle source
# File lib/dpl/provider/scalingo.rb, line 27
def check_auth
  if @options[:api_key]
    unless context.shell "mkdir -p ~/.config/scalingo"
      error "Couldn't create authentication file."
    end
    url = URI.parse('http://api.scalingo.com/v1/users/self')
    http = Net::HTTP.new(url.host, url.port)
    request = Net::HTTP::Get.new(url.request_uri)
    request.basic_auth("", @options[:api_key])
    request["Accept"] = "application/json"
    request["Content-type"] = "application/json"
    response = http.request(request)
    data = {}
    if File.exist?("#{Dir.home}/.config/scalingo/auth")
      data = JSON.parse(File.read("#{Dir.home}/.config/scalingo/auth"))
    end
    begin
      user = JSON.parse(response.body)
    rescue
      error "Invalid API token."
    end
    data["auth_config_data"] = {}
    data["auth_config_data"]["api.scalingo.com"] = {}
    data["auth_config_data"]["api.scalingo.com"]["id"] = user["user"]["id"]
    data["auth_config_data"]["api.scalingo.com"]["last_name"] = user["user"]["last_name"]
    data["auth_config_data"]["api.scalingo.com"]["username"] = user["user"]["username"]
    data["auth_config_data"]["api.scalingo.com"]["email"] = user["user"]["email"]
    data["auth_config_data"]["api.scalingo.com"]["first_name"] = user["user"]["first_name"]
    data["auth_config_data"]["api.scalingo.com"]["auth_token"] = @options[:api_key]
    data["last_update"] = DateTime.now
    f = File.open("#{Dir.home}/.config/scalingo/auth", "w+") {
      |f| f.write(data.to_json)
    }
  elsif @options[:username] && @options[:password]
    context.shell "echo -e \"#{@options[:username]}\n#{@options[:password]}\" | timeout 2 ./scalingo login 2> /dev/null > /dev/null"
  end
  if !logged_in
    error "Couldn't connect to Scalingo API."
  end
end
install_deploy_dependencies() click to toggle source
# File lib/dpl/provider/scalingo.rb, line 10
def install_deploy_dependencies
  unless context.shell "curl -OL https://cli-dl.scalingo.io/release/scalingo_latest_linux_amd64.tar.gz && tar -zxvf scalingo_latest_linux_amd64.tar.gz && mv scalingo_*_linux_amd64/scalingo . && rm scalingo_latest_linux_amd64.tar.gz && rm -r scalingo_*_linux_amd64"
    error "Couldn't install Scalingo CLI."
  end
end
logged_in() click to toggle source
# File lib/dpl/provider/scalingo.rb, line 23
def logged_in
  context.shell "DISABLE_INTERACTIVE=true ./scalingo login 2> /dev/null > /dev/null"
end
push_app() click to toggle source
# File lib/dpl/provider/scalingo.rb, line 86
def push_app
  if @options[:app]
    context.shell "git remote add #{@remote} git@scalingo.com:#{@options[:app]}.git 2> /dev/null > /dev/null"
  end
  unless context.shell "git push #{@remote} #{@branch} -f"
    error "Couldn't push your app."
  end
end
remove_key() click to toggle source
# File lib/dpl/provider/scalingo.rb, line 77
def remove_key
  if !logged_in
    error "Couldn't connect to Scalingo API."
  end
  unless context.shell "./scalingo keys-remove dpl_tmp_key"
    error "Couldn't remove ssh key."
  end
end
setup_key(file, type = nil) click to toggle source
# File lib/dpl/provider/scalingo.rb, line 68
def setup_key(file, type = nil)
  if !logged_in
    error "Couldn't connect to Scalingo API."
  end
  unless context.shell "./scalingo keys-add dpl_tmp_key #{file}"
    error "Couldn't add ssh key."
  end
end