gantree 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e6dd186b31072e4741042bc7d9c5a4388a7c391d
4
- data.tar.gz: 4c56ecf06781010d285322daaf5d65c77a09b061
3
+ metadata.gz: 5c9066e820c79531b4b14df1d934894fcd6cdf9e
4
+ data.tar.gz: 5bc51c84e948f50f16491ad538982184eca0d5de
5
5
  SHA512:
6
- metadata.gz: 6d082baaffe38b7741065e1839a11e120f3ed1813fec06be5dd62bb5498c978ec9035414077276fb2d103f88cfdbd0c1c0882282c6b3323f2b7bdf0c6c5a2852
7
- data.tar.gz: 8a8c83091488b7799f148bcb5388e8b56fead36d20f4136a97154723d6e38e731fd0d2b03775c4e297701ebb1b1b7ae882e90fc38ef1c819107937c777db69f3
6
+ metadata.gz: 80ac061c5af38cb83f8bcaa18be4839dc63b84ba9ea1bf7de7b332b83980c664cc0451b7bf02b70c1a0c2f1b4c23b875561111d708c07395ff5b0a3c797d7025
7
+ data.tar.gz: b1fbed05adec9846cbc4d3653cc23d3239733db7b5cca379874ea458ba98959bbbaa49ce09d9cf38d8fe67b3c5b1e3b4b3448e1f7797f498e1931fbefeb12890
data/Gemfile CHANGED
@@ -9,3 +9,4 @@ gem "rake"
9
9
  gem "guard-rspec", require: false
10
10
  gem "webmock"
11
11
  gem "cloudformation-ruby-dsl"
12
+ gem "archive-zip"
@@ -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
@@ -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
@@ -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
@@ -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
- create_version
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
- filename = @version_label
29
- FileUtils.cp("Dockerrun.aws.json", filename)
30
- set_tag_to_deploy if @tag
31
- key = File.basename(filename)
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 create_version
38
+ def create_eb_version
48
39
  begin
49
40
  @eb.create_application_version({
50
41
  :application_name => @app,
51
- :version_label => @version_label,
42
+ :version_label => @packeged_version,
52
43
  :source_bundle => {
53
44
  :s3_bucket => "#{@app}-versions",
54
- :s3_key => @version_label
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 => @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 => @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 set_version_label
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
- "#{@env}-#{hash}-Dockerrun.aws.json"
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("Dockerrun.aws.json"))
95
+ def set_tag_to_deploy file
96
+ docker = JSON.parse(IO.read(file))
91
97
  docker["Image"]["Name"].gsub!(/:(.*)$/, ":#{@tag}")
92
- IO.write(@version_label,JSON.pretty_generate(docker))
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
@@ -1,3 +1,3 @@
1
1
  module Gantree
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
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.0
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