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 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