class Travis::CLI::Setup::CodeDeploy

def run

def run
  if File.readable? AWS_CONFIG
    content           = File.read(AWS_CONFIG)
    access_key        = content[/aws_access_key_id = (\S+)\n/,     1]
    secret_access_key = content[/aws_secret_access_key = (\S+)\n/, 1]
  end
  deploy 'codedeploy' do |config|
    config['access_key_id']     = ask("Access key ID: ") { |q| q.default = access_key if access_key }.to_s
    secret_access_key           = nil unless access_key == config['access_key_id']
    config['secret_access_key'] = secret_access_key || ask("Secret access key: ") { |q| q.echo = "*" }.to_s
    config['bucket']            = ask("S3 Bucket: ").to_s
    config['key']               = ask("S3 Key: ").to_s
    config['bundle_type']       = ask("Bundle Type: ") { |q| q.default = config['key'][/\.(zip|tar|tgz)$/, 1] }.to_s
    config['application']       = ask("Application Name: ") { |q| q.default = repository.name }.to_s
    config['deployment_group']  = ask("Deployment Group Name: ").to_s
    encrypt(config, 'secret_access_key') if agree("Encrypt secret access key? ") { |q| q.default = 'yes' }
  end
  if agree("Also push bundle to S3? ")
    cd = travis_config['deploy']
    s3 = {
      'provider'          => 's3',
      'access_key_id'     => cd['access_key_id'],
      'secret_access_key' => cd['secret_access_key'],
      'local_dir'         => 'dpl_cd_upload',
      'skip_cleanup'      => true,
      'on'                => cd['on'],
      'bucket'            => cd['bucket']
    }
    s3['upload_dir']               = File.dirname(cd['key']) if cd['key'].include? '/'
    travis_config['deploy']        = [ s3, cd ]
    upload_file_name               = File.basename(cd['key'])
    source_file                    = ask("Source File: ") { |q| q.default = upload_file_name }
    travis_config['before_deploy'] = [
      "mkdir -p dpl_cd_upload",
      "mv #{Shellwords.escape(source_file)} dpl_cd_upload/#{Shellwords.escape(upload_file_name)}"
    ]
  end
end