gantree 0.1.0 → 0.1.1
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 +4 -4
- data/Gemfile +1 -0
- data/Gemfile.lock +4 -0
- data/gantree.gemspec +2 -1
- data/lib/gantree/cli.rb +1 -0
- data/lib/gantree/deploy.rb +95 -30
- data/lib/gantree/version.rb +1 -1
- metadata +15 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5c9066e820c79531b4b14df1d934894fcd6cdf9e
|
4
|
+
data.tar.gz: 5bc51c84e948f50f16491ad538982184eca0d5de
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 80ac061c5af38cb83f8bcaa18be4839dc63b84ba9ea1bf7de7b332b83980c664cc0451b7bf02b70c1a0c2f1b4c23b875561111d708c07395ff5b0a3c797d7025
|
7
|
+
data.tar.gz: b1fbed05adec9846cbc4d3653cc23d3239733db7b5cca379874ea458ba98959bbbaa49ce09d9cf38d8fe67b3c5b1e3b4b3448e1f7797f498e1931fbefeb12890
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -2,6 +2,8 @@ GEM
|
|
2
2
|
remote: https://rubygems.org/
|
3
3
|
specs:
|
4
4
|
addressable (2.3.6)
|
5
|
+
archive-zip (0.7.0)
|
6
|
+
io-like (~> 0.3.0)
|
5
7
|
aws-sdk (1.52.0)
|
6
8
|
aws-sdk-v1 (= 1.52.0)
|
7
9
|
aws-sdk-v1 (1.52.0)
|
@@ -30,6 +32,7 @@ GEM
|
|
30
32
|
guard-rspec (4.3.1)
|
31
33
|
guard (~> 2.1)
|
32
34
|
rspec (>= 2.14, < 4.0)
|
35
|
+
io-like (0.3.0)
|
33
36
|
json (1.8.1)
|
34
37
|
listen (2.7.9)
|
35
38
|
celluloid (>= 0.15.2)
|
@@ -78,6 +81,7 @@ PLATFORMS
|
|
78
81
|
ruby
|
79
82
|
|
80
83
|
DEPENDENCIES
|
84
|
+
archive-zip
|
81
85
|
aws-sdk
|
82
86
|
cloudformation-ruby-dsl
|
83
87
|
codeclimate-test-reporter
|
data/gantree.gemspec
CHANGED
@@ -24,10 +24,11 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.add_dependency "colorize"
|
25
25
|
spec.add_dependency "rubyzip"
|
26
26
|
spec.add_dependency "cloudformation-ruby-dsl"
|
27
|
+
spec.add_dependency "archive-zip"
|
27
28
|
|
28
29
|
spec.add_development_dependency "bundler", "~> 1.3"
|
29
30
|
spec.add_development_dependency "rake"
|
30
31
|
spec.add_development_dependency "guard"
|
31
32
|
spec.add_development_dependency "guard-bundler"
|
32
33
|
spec.add_development_dependency "guard-rspec"
|
33
|
-
end
|
34
|
+
end
|
data/lib/gantree/cli.rb
CHANGED
@@ -9,6 +9,7 @@ module Gantree
|
|
9
9
|
option :branch, :desc => 'branch to deploy'
|
10
10
|
method_option :tag, :aliases => "-t", :desc => "set docker tag to deploy"
|
11
11
|
method_option :env, :aliases => "-e", :desc => "elastic beanstalk environment"
|
12
|
+
method_option :ext, :aliases => "-x", :desc => "ebextensions folder/repo"
|
12
13
|
def deploy app
|
13
14
|
Gantree::Deploy.new(app, options).run
|
14
15
|
end
|
data/lib/gantree/deploy.rb
CHANGED
@@ -1,14 +1,16 @@
|
|
1
|
+
require 'archive/zip'
|
2
|
+
|
1
3
|
module Gantree
|
2
4
|
class Deploy
|
3
5
|
|
4
6
|
def initialize app,options
|
5
7
|
@options = options
|
8
|
+
@ext = @options[:ext]
|
6
9
|
AWS.config(
|
7
10
|
:access_key_id => ENV['AWS_ACCESS_KEY_ID'],
|
8
11
|
:secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'])
|
9
12
|
@app = @options[:env] || app.match(/^[a-zA-Z]*\-([a-zA-Z]*)\-[a-zA-Z]*\-([a-zA-Z]*\d*)/)[1] + "-" + app.match(/^([a-zA-Z]*)\-([a-zA-Z]*)\-[a-zA-Z]*\-([a-zA-Z]*\d*)/)[1] + '-' + app.match(/^([a-zA-Z]*)\-([a-zA-Z]*)\-[a-zA-Z]*\-([a-zA-Z]*\d*)/)[3]
|
10
13
|
@env = app
|
11
|
-
@version_label = set_version_label
|
12
14
|
@eb = AWS::ElasticBeanstalk::Client.new
|
13
15
|
@s3 = AWS::S3.new
|
14
16
|
@tag = options.tag
|
@@ -16,42 +18,31 @@ module Gantree
|
|
16
18
|
|
17
19
|
def run
|
18
20
|
puts "Deploying #{@app}"
|
21
|
+
@packeged_version = create_version_files
|
19
22
|
upload_to_s3
|
20
|
-
|
23
|
+
clean_up
|
24
|
+
create_eb_version
|
21
25
|
update_application
|
22
26
|
end
|
23
27
|
|
24
28
|
private
|
25
29
|
|
26
30
|
def upload_to_s3
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
begin
|
33
|
-
puts "uploading dockerrun to #{@app}-versions"
|
34
|
-
@s3.buckets["#{@app}-versions"].objects[key].write(:file => filename)
|
35
|
-
rescue AWS::S3::Errors::NoSuchBucket
|
36
|
-
puts "bucket didn't exist...creating"
|
37
|
-
bucket = @s3.buckets.create("#{@app}-versions")
|
38
|
-
retry
|
39
|
-
rescue AWS::S3::Errors::AccessDenied
|
40
|
-
puts "Your key is not configured for s3 access, please let your operations team know"
|
41
|
-
FileUtils.rm(filename)
|
42
|
-
exit
|
43
|
-
end
|
44
|
-
FileUtils.rm(filename)
|
31
|
+
key = File.basename(@packeged_version)
|
32
|
+
check_version_bucket
|
33
|
+
puts "uploading #{@packeged_version} to #{@app}-versions"
|
34
|
+
@s3.buckets["#{@app}-versions"].objects[key].write(:file => @packeged_version)
|
35
|
+
FileUtils.rm(@packeged_version)
|
45
36
|
end
|
46
37
|
|
47
|
-
def
|
38
|
+
def create_eb_version
|
48
39
|
begin
|
49
40
|
@eb.create_application_version({
|
50
41
|
:application_name => @app,
|
51
|
-
:version_label => @
|
42
|
+
:version_label => @packeged_version,
|
52
43
|
:source_bundle => {
|
53
44
|
:s3_bucket => "#{@app}-versions",
|
54
|
-
:s3_key => @
|
45
|
+
:s3_key => @packeged_version
|
55
46
|
}
|
56
47
|
})
|
57
48
|
rescue AWS::ElasticBeanstalk::Errors::InvalidParameterValue
|
@@ -59,7 +50,7 @@ module Gantree
|
|
59
50
|
begin
|
60
51
|
@eb.delete_application_version({
|
61
52
|
:application_name => @app,
|
62
|
-
:version_label => @
|
53
|
+
:version_label => @packeged_version,
|
63
54
|
:delete_source_bundle => false
|
64
55
|
})
|
65
56
|
retry
|
@@ -73,23 +64,97 @@ module Gantree
|
|
73
64
|
begin
|
74
65
|
@eb.update_environment({
|
75
66
|
:environment_name => @env,
|
76
|
-
:version_label => @
|
67
|
+
:version_label => @packeged_version
|
77
68
|
})
|
78
69
|
rescue AWS::ElasticBeanstalk::Errors::InvalidParameterValue
|
79
70
|
puts "#{@env} doesn't exist"
|
80
71
|
end
|
81
72
|
end
|
82
73
|
|
83
|
-
def
|
74
|
+
def create_version_files
|
84
75
|
branch = `git rev-parse --abbrev-ref HEAD`
|
76
|
+
puts "branch: #{branch}"
|
85
77
|
hash = `git rev-parse --verify --short #{branch}`.strip
|
86
|
-
"#{
|
78
|
+
puts "hash #{hash}"
|
79
|
+
version = "#{@env}-#{hash}"
|
80
|
+
puts "version: #{version}"
|
81
|
+
dockerrun = "Dockerrun.aws.json"
|
82
|
+
set_tag_to_deploy(dockerrun) if @tag
|
83
|
+
unless ext?
|
84
|
+
new_dockerrun = "#{version}-Dockerrun.aws.json"
|
85
|
+
FileUtils.cp("Dockerrun.aws.json", new_dockerrun)
|
86
|
+
new_dockerrun
|
87
|
+
else
|
88
|
+
zip = "#{version}.zip"
|
89
|
+
clone_repo if repo?
|
90
|
+
Archive::Zip.archive(zip, ['.ebextensions/', dockerrun])
|
91
|
+
zip
|
92
|
+
end
|
87
93
|
end
|
88
94
|
|
89
|
-
def set_tag_to_deploy
|
90
|
-
docker =JSON.parse(IO.read(
|
95
|
+
def set_tag_to_deploy file
|
96
|
+
docker = JSON.parse(IO.read(file))
|
91
97
|
docker["Image"]["Name"].gsub!(/:(.*)$/, ":#{@tag}")
|
92
|
-
IO.write(
|
98
|
+
IO.write(file,JSON.pretty_generate(docker))
|
99
|
+
end
|
100
|
+
|
101
|
+
def ext?
|
102
|
+
if @ext
|
103
|
+
true
|
104
|
+
else
|
105
|
+
false
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
def repo?
|
110
|
+
if @ext.include? "github"
|
111
|
+
true
|
112
|
+
else
|
113
|
+
false
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
def local?
|
118
|
+
File.directory?(@ext)
|
119
|
+
end
|
120
|
+
|
121
|
+
def get_ext_repo
|
122
|
+
if ext_branch?
|
123
|
+
repo = @ext.sub.(get_ext_branch)
|
124
|
+
else
|
125
|
+
@ext
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
def ext_branch?
|
130
|
+
if @ext.count(":") == 2
|
131
|
+
true
|
132
|
+
else
|
133
|
+
false
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
def get_ext_branch
|
138
|
+
branch = @ext.match(/:.*(:.*)$/)[0]
|
139
|
+
end
|
140
|
+
|
141
|
+
def clone_repo
|
142
|
+
if ext_branch?
|
143
|
+
`git clone -b #{get_ext_branch} #{get_ext_repo}`
|
144
|
+
else
|
145
|
+
`git clone #{get_ext_repo}`
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
def check_version_bucket
|
150
|
+
name = "#{@app}-versions"
|
151
|
+
bucket = @s3.buckets[name] # makes no request
|
152
|
+
@s3.buckets.create(name) unless bucket.exists?
|
153
|
+
end
|
154
|
+
|
155
|
+
def clean_up
|
156
|
+
`git checkout Dockerrun.aws.json` # reverts back to original Dockerrun.aws.json
|
157
|
+
`git checkout .ebextensions/` if ext?
|
93
158
|
end
|
94
159
|
end
|
95
160
|
end
|
data/lib/gantree/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gantree
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Felix
|
@@ -94,6 +94,20 @@ dependencies:
|
|
94
94
|
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: archive-zip
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: bundler
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|