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: ') do |q|
      q.default = config['key'][/\.(zip|tar|tgz)$/, 1]
    end.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
  return unless 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