snap_deploy 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
+
[](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
|