snap_deploy 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +21 -0
- data/.init.sh +8 -0
- data/.rbenv-gemsets +1 -0
- data/.rspec +2 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/Gemfile +13 -0
- data/Gemfile.lock +100 -0
- data/LICENSE.txt +22 -0
- data/README.md +34 -0
- data/Rakefile +25 -0
- data/bin/snap-deploy +10 -0
- data/install.sh +18 -0
- data/lib/snap_deploy.rb +4 -0
- data/lib/snap_deploy/cli.rb +24 -0
- data/lib/snap_deploy/helpers.rb +74 -0
- data/lib/snap_deploy/provider.rb +8 -0
- data/lib/snap_deploy/provider/aws.rb +17 -0
- data/lib/snap_deploy/provider/aws/elastic_beanstalk.rb +156 -0
- data/lib/snap_deploy/provider/aws/ops_works.rb +98 -0
- data/lib/snap_deploy/provider/aws/s3.rb +111 -0
- data/lib/snap_deploy/provider/heroku.rb +242 -0
- data/lib/snap_deploy/provider/heroku/api.rb +1532 -0
- data/lib/snap_deploy/provider/update.rb +25 -0
- data/lib/snap_deploy/version.rb +3 -0
- data/snap_deploy.gemspec +28 -0
- data/spec/spec_helper.rb +41 -0
- data/spec/unit/snap_deploy/provider/aws/ops_works_spec.rb +128 -0
- data/spec/unit/snap_deploy/provider/aws/s3_spec.rb +60 -0
- data/spec/unit/snap_deploy/provider/heroku_spec.rb +189 -0
- metadata +177 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d8d9e4179a487d4a6aa85d83a412b745bab0f687
|
4
|
+
data.tar.gz: 2d07e7c5385d0376e52fff147434ca5409240b8c
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 79a97f7af1d18b4ec11908e80fcb2f60afdd3ed299e12c7d4299d2059a19095ea3107b8169dfd2f6e43cc5da44685b821cc91072ba609a9ca6c953fe34895738
|
7
|
+
data.tar.gz: 7fb6da9d40a0fd9b0e7df77698fe0266adcc796fe09d740afccfff3b2051a4e83e9f577566e292ab10ff63d1806bad48afa9ebb71c3b9e1dcfb301d798284b95
|
data/.gitignore
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
*.rbc
|
2
|
+
.bundle
|
3
|
+
.config
|
4
|
+
.yardoc
|
5
|
+
InstalledFiles
|
6
|
+
_yardoc
|
7
|
+
coverage
|
8
|
+
doc/
|
9
|
+
lib/bundler/man
|
10
|
+
pkg
|
11
|
+
rdoc
|
12
|
+
spec/reports
|
13
|
+
test/tmp
|
14
|
+
test/version_tmp
|
15
|
+
tmp
|
16
|
+
vendor/bundle
|
17
|
+
bundle
|
18
|
+
.tags
|
19
|
+
.tags_sorted_by_file
|
20
|
+
.idea/
|
21
|
+
|
data/.init.sh
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
export PATH="/opt/local/ruby/2.0.0-p598/bin:$PATH"
|
3
|
+
|
4
|
+
export NOKOGIRI_USE_SYSTEM_LIBRARIES=1
|
5
|
+
|
6
|
+
while read line; do
|
7
|
+
[[ -n ${SNAP_CI} || -n ${GO_SERVER_URL} ]] || echo -ne "Doing $((C++)) things...\r"
|
8
|
+
done < <(bundle check || bundle install --local --standalone --clean )
|
data/.rbenv-gemsets
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
snap-deploy
|
data/.rspec
ADDED
data/.ruby-gemset
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
snap-deploy
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.0.0
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
snap_deploy (0.1.1)
|
5
|
+
ansi
|
6
|
+
aws-sdk (= 1.53.0)
|
7
|
+
clamp
|
8
|
+
heroics
|
9
|
+
mime-types
|
10
|
+
rendezvous
|
11
|
+
|
12
|
+
GEM
|
13
|
+
remote: https://rubygems.org/
|
14
|
+
specs:
|
15
|
+
addressable (2.3.7)
|
16
|
+
ansi (1.5.0)
|
17
|
+
arr-pm (0.0.9)
|
18
|
+
cabin (> 0)
|
19
|
+
aws-sdk (1.53.0)
|
20
|
+
aws-sdk-v1 (= 1.53.0)
|
21
|
+
aws-sdk-v1 (1.53.0)
|
22
|
+
json (~> 1.4)
|
23
|
+
nokogiri (>= 1.4.4)
|
24
|
+
backports (3.6.0)
|
25
|
+
byebug (3.5.1)
|
26
|
+
columnize (~> 0.8)
|
27
|
+
debugger-linecache (~> 1.2)
|
28
|
+
slop (~> 3.6)
|
29
|
+
cabin (0.6.1)
|
30
|
+
childprocess (0.5.3)
|
31
|
+
ffi (~> 1.0, >= 1.0.11)
|
32
|
+
clamp (0.6.3)
|
33
|
+
columnize (0.9.0)
|
34
|
+
crack (0.4.2)
|
35
|
+
safe_yaml (~> 1.0.0)
|
36
|
+
debugger-linecache (1.2.0)
|
37
|
+
diff-lcs (1.2.5)
|
38
|
+
docile (1.1.5)
|
39
|
+
erubis (2.7.0)
|
40
|
+
excon (0.44.2)
|
41
|
+
ffi (1.9.3)
|
42
|
+
fpm (1.2.0)
|
43
|
+
arr-pm (~> 0.0.9)
|
44
|
+
backports (>= 2.6.2)
|
45
|
+
cabin (>= 0.6.0)
|
46
|
+
childprocess
|
47
|
+
clamp (~> 0.6)
|
48
|
+
ffi
|
49
|
+
json (>= 1.7.7)
|
50
|
+
heroics (0.0.12)
|
51
|
+
erubis (~> 2.7.0)
|
52
|
+
excon
|
53
|
+
moneta
|
54
|
+
multi_json (>= 1.9.2)
|
55
|
+
netrc
|
56
|
+
json (1.8.1)
|
57
|
+
mime-types (2.3)
|
58
|
+
mini_portile (0.6.0)
|
59
|
+
moneta (0.8.0)
|
60
|
+
multi_json (1.10.1)
|
61
|
+
netrc (0.10.2)
|
62
|
+
nokogiri (1.6.3.1)
|
63
|
+
mini_portile (= 0.6.0)
|
64
|
+
rake (10.3.2)
|
65
|
+
rendezvous (0.1.2)
|
66
|
+
rspec (3.1.0)
|
67
|
+
rspec-core (~> 3.1.0)
|
68
|
+
rspec-expectations (~> 3.1.0)
|
69
|
+
rspec-mocks (~> 3.1.0)
|
70
|
+
rspec-core (3.1.3)
|
71
|
+
rspec-support (~> 3.1.0)
|
72
|
+
rspec-expectations (3.1.1)
|
73
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
74
|
+
rspec-support (~> 3.1.0)
|
75
|
+
rspec-mocks (3.1.0)
|
76
|
+
rspec-support (~> 3.1.0)
|
77
|
+
rspec-support (3.1.0)
|
78
|
+
safe_yaml (1.0.4)
|
79
|
+
simplecov (0.9.0)
|
80
|
+
docile (~> 1.1.0)
|
81
|
+
multi_json
|
82
|
+
simplecov-html (~> 0.8.0)
|
83
|
+
simplecov-html (0.8.0)
|
84
|
+
slop (3.6.0)
|
85
|
+
webmock (1.20.4)
|
86
|
+
addressable (>= 2.3.6)
|
87
|
+
crack (>= 0.3.2)
|
88
|
+
|
89
|
+
PLATFORMS
|
90
|
+
ruby
|
91
|
+
|
92
|
+
DEPENDENCIES
|
93
|
+
bundler (~> 1.6)
|
94
|
+
byebug
|
95
|
+
fpm
|
96
|
+
rake
|
97
|
+
rspec
|
98
|
+
simplecov
|
99
|
+
snap_deploy!
|
100
|
+
webmock
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014 ThoughtWorks, Inc.
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
[![Build Status](https://snap-ci.com/snap-ci/snap-deploy/branch/master/build_image)](https://snap-ci.com/snap-ci/snap-deploy/branch/master)
|
2
|
+
|
3
|
+
# SnapDeploy
|
4
|
+
|
5
|
+
A deploy tool for continuous deployment. Used by [Snap CI](https://snap-ci.com)
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
Add this line to your application's Gemfile:
|
10
|
+
|
11
|
+
gem 'snap_deploy'
|
12
|
+
|
13
|
+
And then execute:
|
14
|
+
|
15
|
+
$ bundle
|
16
|
+
|
17
|
+
Or install it yourself as:
|
18
|
+
|
19
|
+
$ gem install snap_deploy
|
20
|
+
|
21
|
+
## Usage
|
22
|
+
|
23
|
+
Currently, it supports aws and heroku deploy. You can use the commands below for more informations:
|
24
|
+
|
25
|
+
$ snap-deploy heroku --help
|
26
|
+
$ snap-deploy aws --help
|
27
|
+
|
28
|
+
## Contributing
|
29
|
+
|
30
|
+
1. Fork it ( https://github.com/[my-github-username]/snap_deploy/fork )
|
31
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
32
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
33
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
34
|
+
5. Create a new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'bundler/setup'
|
2
|
+
require "bundler/gem_tasks"
|
3
|
+
require 'rspec/core/rake_task'
|
4
|
+
require 'tmpdir'
|
5
|
+
|
6
|
+
desc 'build heroku api'
|
7
|
+
task "build-heroku-api" do
|
8
|
+
sh('curl --silent --fail https://api.heroku.com/schema -H "Accept: application/vnd.heroku+json; version=3" > /tmp/heroku-schema.json')
|
9
|
+
sh('bundle exec heroics-generate -H "Accept: application/vnd.heroku+json; version=3" SnapDeploy::Provider::Heroku::API /tmp/heroku-schema.json https://api.heroku.com > lib/snap_deploy/provider/heroku/api.rb')
|
10
|
+
end
|
11
|
+
|
12
|
+
desc "Run units"
|
13
|
+
RSpec::Core::RakeTask.new("spec:unit") do |t|
|
14
|
+
t.pattern = "spec/unit/**/*_spec.rb"
|
15
|
+
t.rspec_opts = "--format documentation"
|
16
|
+
end
|
17
|
+
|
18
|
+
desc "Run integrations"
|
19
|
+
RSpec::Core::RakeTask.new("spec:integration") do |t|
|
20
|
+
t.pattern = "spec/integration/**/*_spec.rb"
|
21
|
+
t.rspec_opts = "--format documentation"
|
22
|
+
end
|
23
|
+
|
24
|
+
task :spec => ['spec:unit', 'spec:integration']
|
25
|
+
task :default => :spec
|
data/bin/snap-deploy
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
$:.unshift(File.join(File.expand_path('../../', __FILE__), 'bundle'))
|
4
|
+
require 'bundler/setup'
|
5
|
+
|
6
|
+
Process.respond_to?(:setproctitle) ? Process.setproctitle('snap-deploy') : $0 = 'snap-deploy'
|
7
|
+
|
8
|
+
require 'snap_deploy'
|
9
|
+
|
10
|
+
SnapDeploy::CLI.run
|
data/install.sh
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
set -e
|
4
|
+
|
5
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}" )" > /dev/null && pwd)"
|
6
|
+
cd $SCRIPT_DIR
|
7
|
+
|
8
|
+
export NOKOGIRI_USE_SYSTEM_LIBRARIES=1
|
9
|
+
export PATH="/opt/local/ruby/2.0.0-p598/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
10
|
+
|
11
|
+
# change ownership to nobody to not screw up things (even accidentally)
|
12
|
+
chown nobody -R $SCRIPT_DIR
|
13
|
+
|
14
|
+
# perform the bundle install
|
15
|
+
su -l nobody -s /bin/bash -c "cd $SCRIPT_DIR && env PATH=$PATH NOKOGIRI_USE_SYSTEM_LIBRARIES=1 $(which bundle) install --local --standalone --clean"
|
16
|
+
|
17
|
+
# change ownership back to root
|
18
|
+
chown root -R $SCRIPT_DIR
|
data/lib/snap_deploy.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'clamp'
|
2
|
+
|
3
|
+
module SnapDeploy
|
4
|
+
|
5
|
+
class CLI < Clamp::Command
|
6
|
+
|
7
|
+
module DefaultOptions
|
8
|
+
def self.included(receiver)
|
9
|
+
receiver.send :option, '--verbose', :flag, 'increase verbosity'
|
10
|
+
receiver.send :option, '--version', :flag, 'display the version' do
|
11
|
+
puts "Snap Deploy v#{SnapDeploy::VERSION}"
|
12
|
+
exit(0)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
include DefaultOptions
|
18
|
+
|
19
|
+
def execute
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
module SnapDeploy
|
2
|
+
module Helpers
|
3
|
+
def log(message)
|
4
|
+
puts message
|
5
|
+
end
|
6
|
+
|
7
|
+
def info(message)
|
8
|
+
puts message
|
9
|
+
end
|
10
|
+
|
11
|
+
def error(message)
|
12
|
+
puts message
|
13
|
+
end
|
14
|
+
|
15
|
+
def snap_commit
|
16
|
+
ENV['SNAP_COMMIT'] or raise
|
17
|
+
end
|
18
|
+
|
19
|
+
def snap_branch
|
20
|
+
ENV['SNAP_BRANCH'] or raise
|
21
|
+
end
|
22
|
+
|
23
|
+
def snap_upstream_branch
|
24
|
+
ENV['SNAP_UPSTREAM_BRANCH']
|
25
|
+
end
|
26
|
+
|
27
|
+
def pull_request_number
|
28
|
+
ENV['SNAP_PULL_REQUEST_NUMBER']
|
29
|
+
end
|
30
|
+
|
31
|
+
def access_key_id
|
32
|
+
ENV['AWS_ACCESS_KEY_ID'] or raise "AWS_ACCESS_KEY_ID is not defined"
|
33
|
+
end
|
34
|
+
|
35
|
+
def pipeline_counter
|
36
|
+
ENV['SNAP_PIPELINE_COUNTER'] or raise
|
37
|
+
end
|
38
|
+
|
39
|
+
def short_commit
|
40
|
+
ENV['SNAP_COMMIT_SHORT'] or raise
|
41
|
+
end
|
42
|
+
|
43
|
+
def manually_triggered_by
|
44
|
+
ENV['SNAP_STAGE_TRIGGERED_BY']
|
45
|
+
end
|
46
|
+
|
47
|
+
def secret_access_key
|
48
|
+
ENV['AWS_SECRET_ACCESS_KEY'] or raise "AWS_SECRET_ACCESS_KEY is not defined"
|
49
|
+
end
|
50
|
+
|
51
|
+
def logger
|
52
|
+
@logger ||= Logger.new($stdout).tap do |logger|
|
53
|
+
$stdout.sync = true
|
54
|
+
logger.level = verbose? ? Logger::DEBUG : Logger::WARN
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def deploy_comment
|
59
|
+
comment = "Deploy build #{pipeline_counter}(rev #{short_commit}) via Snap CI"
|
60
|
+
comment << " by #{manually_triggered_by}" if manually_triggered_by
|
61
|
+
comment
|
62
|
+
end
|
63
|
+
|
64
|
+
def encoding_for(path)
|
65
|
+
file_cmd_output = `file #{path}`
|
66
|
+
case file_cmd_output
|
67
|
+
when /gzip compressed/
|
68
|
+
'gzip'
|
69
|
+
when /compress'd/
|
70
|
+
'compress'
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class SnapDeploy::Provider::AWS < Clamp::Command
|
2
|
+
|
3
|
+
require 'snap_deploy/provider/aws/ops_works'
|
4
|
+
require 'snap_deploy/provider/aws/s3'
|
5
|
+
require 'snap_deploy/provider/aws/elastic_beanstalk'
|
6
|
+
|
7
|
+
SnapDeploy::CLI.subcommand 'aws', 'Perform AWS deployments', self
|
8
|
+
SnapDeploy::Provider::AWS.subcommand 'opsworks', 'manage opsworks deployments', SnapDeploy::Provider::AWS::OpsWorks
|
9
|
+
SnapDeploy::Provider::AWS.subcommand 's3', 'manage s3 deployments', SnapDeploy::Provider::AWS::S3
|
10
|
+
SnapDeploy::Provider::AWS.subcommand 'eb', 'manage elastic beanstalk deployments', SnapDeploy::Provider::AWS::ElasticBeanstalk
|
11
|
+
|
12
|
+
|
13
|
+
def execute
|
14
|
+
help
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
@@ -0,0 +1,156 @@
|
|
1
|
+
require 'timeout'
|
2
|
+
require 'json'
|
3
|
+
require 'rake'
|
4
|
+
require 'rake/file_utils_ext'
|
5
|
+
|
6
|
+
class SnapDeploy::Provider::AWS::ElasticBeanstalk < Clamp::Command
|
7
|
+
|
8
|
+
option '--app-name',
|
9
|
+
'APP_NAME',
|
10
|
+
"Elastic Beanstalk application name",
|
11
|
+
:required => true
|
12
|
+
|
13
|
+
option '--env-name',
|
14
|
+
'ENV_NAME' ,
|
15
|
+
'Elastic Beanstalk environment name which will be updated',
|
16
|
+
:required => true
|
17
|
+
|
18
|
+
option '--bucket',
|
19
|
+
'BUCKET_NAME',
|
20
|
+
'S3 Bucket.',
|
21
|
+
:required => true
|
22
|
+
|
23
|
+
option '--bucket-base-dir',
|
24
|
+
'BUCKET_BASE_DIR',
|
25
|
+
'S3 Bucket base directory'
|
26
|
+
|
27
|
+
option '--application-version',
|
28
|
+
'VERSION',
|
29
|
+
'Specify an Application Version'
|
30
|
+
|
31
|
+
option '--region',
|
32
|
+
'REGION',
|
33
|
+
'EC2 Region.',
|
34
|
+
:default => 'us-east-1'
|
35
|
+
|
36
|
+
option '--archive',
|
37
|
+
'ARCHIVE',
|
38
|
+
'Specify application archive file'
|
39
|
+
|
40
|
+
include SnapDeploy::CLI::DefaultOptions
|
41
|
+
include SnapDeploy::Helpers
|
42
|
+
include Rake::FileUtilsExt
|
43
|
+
|
44
|
+
def execute
|
45
|
+
require 'aws-sdk'
|
46
|
+
setup_aws_auth
|
47
|
+
create_bucket unless bucket_exists?
|
48
|
+
|
49
|
+
info "Deploying application version `#{version_label}' to application `#{app_name}' on environment `#{env_name}'"
|
50
|
+
sleep 5 #s3 eventual consistency
|
51
|
+
create_app_version unless application_exists?
|
52
|
+
update_environment
|
53
|
+
end
|
54
|
+
|
55
|
+
private
|
56
|
+
def upload(key, file)
|
57
|
+
obj = s3.buckets[bucket].objects[key]
|
58
|
+
obj.write(Pathname.new(file))
|
59
|
+
obj
|
60
|
+
end
|
61
|
+
|
62
|
+
def application_exists?
|
63
|
+
application_versions = eb.describe_application_versions({
|
64
|
+
:application_name => app_name,
|
65
|
+
:version_labels => [version_label]
|
66
|
+
})[:application_versions]
|
67
|
+
|
68
|
+
if application_versions.any?
|
69
|
+
info "Application version already exists, will not create an application version or upload it to S3"
|
70
|
+
true
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def create_app_version
|
75
|
+
file_path = bucket_base_dir ? File.join(bucket_base_dir, archive_name) : archive_name
|
76
|
+
s3_object = upload(file_path, archive_file)
|
77
|
+
options = {
|
78
|
+
:application_name => app_name,
|
79
|
+
:version_label => version_label,
|
80
|
+
:description => deploy_comment,
|
81
|
+
:source_bundle => {
|
82
|
+
:s3_bucket => bucket,
|
83
|
+
:s3_key => s3_object.key
|
84
|
+
},
|
85
|
+
:auto_create_application => false
|
86
|
+
}
|
87
|
+
eb.create_application_version(options)
|
88
|
+
end
|
89
|
+
|
90
|
+
def update_environment
|
91
|
+
options = {
|
92
|
+
:environment_name => env_name,
|
93
|
+
:version_label => version_label
|
94
|
+
}
|
95
|
+
info "Updating environment `#{env_name}' with application version `#{version_label}'"
|
96
|
+
eb.update_environment(options)
|
97
|
+
end
|
98
|
+
|
99
|
+
def archive_file
|
100
|
+
archive ? archive : create_zip
|
101
|
+
end
|
102
|
+
|
103
|
+
def create_zip
|
104
|
+
sh("git ls-files | zip -q -@ #{archive_name}", :verbose => !!verbose?)
|
105
|
+
archive_name
|
106
|
+
end
|
107
|
+
|
108
|
+
def files_to_pack
|
109
|
+
`git ls-files -z`.split("\x0")
|
110
|
+
end
|
111
|
+
|
112
|
+
def archive_name
|
113
|
+
archive ? "#{archive_base_name}-#{version_label}#{archive_ext_name}" : "#{version_label}.zip"
|
114
|
+
end
|
115
|
+
|
116
|
+
def archive_base_name
|
117
|
+
File.basename(archive, archive_ext_name)
|
118
|
+
end
|
119
|
+
|
120
|
+
def archive_ext_name
|
121
|
+
File.extname(archive)
|
122
|
+
end
|
123
|
+
|
124
|
+
def version_label
|
125
|
+
application_version ? application_version : "snap-ci-#{pipeline_counter}-#{short_commit}"
|
126
|
+
end
|
127
|
+
|
128
|
+
def create_bucket
|
129
|
+
s3.buckets.create(bucket)
|
130
|
+
end
|
131
|
+
|
132
|
+
def bucket_exists?
|
133
|
+
s3.buckets.map(&:name).include?(bucket)
|
134
|
+
end
|
135
|
+
|
136
|
+
def eb
|
137
|
+
@eb ||= AWS::ElasticBeanstalk.new.client
|
138
|
+
end
|
139
|
+
|
140
|
+
def s3
|
141
|
+
@s3 ||= AWS::S3.new
|
142
|
+
end
|
143
|
+
|
144
|
+
def setup_aws_auth
|
145
|
+
info "Logging in using Access Key ending with : #{access_key_id[-4..-1]}" unless @aws_configured
|
146
|
+
AWS.config(
|
147
|
+
access_key_id: access_key_id,
|
148
|
+
region: region,
|
149
|
+
secret_access_key: secret_access_key,
|
150
|
+
logger: logger,
|
151
|
+
log_formatter: AWS::Core::LogFormatter.colored
|
152
|
+
)
|
153
|
+
@aws_configured = true
|
154
|
+
end
|
155
|
+
|
156
|
+
end
|