jets 1.2.1 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (77) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +8 -0
  3. data/Gemfile.lock +4 -4
  4. data/README.md +2 -2
  5. data/lib/jets.rb +3 -4
  6. data/lib/jets/application.rb +13 -2
  7. data/lib/jets/builders.rb +3 -0
  8. data/lib/jets/builders/code_builder.rb +22 -89
  9. data/lib/jets/builders/code_size.rb +55 -0
  10. data/lib/jets/builders/gem_replacer.rb +22 -1
  11. data/lib/jets/builders/handler_generator.rb +31 -5
  12. data/lib/jets/builders/lambda_layer.rb +50 -0
  13. data/lib/jets/builders/md5.rb +10 -5
  14. data/lib/jets/builders/md5_zip.rb +1 -0
  15. data/lib/jets/builders/purger.rb +35 -0
  16. data/lib/jets/builders/rack_packager.rb +25 -5
  17. data/lib/jets/builders/rackup_wrappers/rackup +1 -5
  18. data/lib/jets/builders/ruby_packager.rb +25 -27
  19. data/lib/jets/builders/shim_vars/app.rb +3 -3
  20. data/lib/jets/builders/shim_vars/base.rb +9 -4
  21. data/lib/jets/builders/shim_vars/shared.rb +2 -2
  22. data/lib/jets/builders/templates/handler.rb +7 -0
  23. data/lib/jets/builders/tidy.rb +4 -3
  24. data/lib/jets/builders/util.rb +11 -3
  25. data/lib/jets/cfn/builders/base_child_builder.rb +6 -3
  26. data/lib/jets/cfn/builders/interface.rb +1 -1
  27. data/lib/jets/cfn/builders/parent_builder.rb +5 -0
  28. data/lib/jets/commands/build.rb +4 -2
  29. data/lib/jets/commands/help/gems/check.md +1 -1
  30. data/lib/jets/commands/main.rb +1 -1
  31. data/lib/jets/commands/new.rb +4 -2
  32. data/lib/jets/commands/sequence.rb +1 -1
  33. data/lib/jets/commands/templates/skeleton/Gemfile.tt +2 -2
  34. data/lib/jets/commands/templates/skeleton/config/application.rb.tt +0 -5
  35. data/lib/jets/commands/templates/skeleton/config/database.yml.tt +2 -2
  36. data/lib/jets/commands/templates/skeleton/config/environments/development.rb +2 -1
  37. data/lib/jets/commands/templates/skeleton/config/environments/production.rb +2 -3
  38. data/lib/jets/commands/upgrade/v1.rb +21 -0
  39. data/lib/jets/controller/renderers/template_renderer.rb +1 -1
  40. data/lib/jets/controller/rendering.rb +1 -4
  41. data/lib/jets/core.rb +45 -6
  42. data/lib/jets/internal/app/jobs/jets/preheat_job.rb +32 -34
  43. data/lib/jets/mega/request.rb +11 -0
  44. data/lib/jets/overrides/lambda.rb +1 -0
  45. data/lib/jets/overrides/lambda/marshaller.rb +31 -0
  46. data/lib/jets/overrides/rails.rb +4 -0
  47. data/lib/jets/{rails_overrides → overrides/rails}/asset_tag_helper.rb +0 -0
  48. data/lib/jets/{rails_overrides → overrides/rails}/common_methods.rb +0 -0
  49. data/lib/jets/{rails_overrides → overrides/rails}/rendering_helper.rb +0 -0
  50. data/lib/jets/{rails_overrides → overrides/rails}/url_helper.rb +0 -0
  51. data/lib/jets/poly_fun/base_executor.rb +1 -1
  52. data/lib/jets/preheat.rb +1 -0
  53. data/lib/jets/processors/main_processor.rb +3 -10
  54. data/lib/jets/{server.rb → rack_server.rb} +31 -2
  55. data/lib/jets/resource.rb +1 -1
  56. data/lib/jets/resource/api_gateway/base_path/function.rb +1 -1
  57. data/lib/jets/resource/child_stack/app_class.rb +10 -4
  58. data/lib/jets/resource/lambda.rb +5 -0
  59. data/lib/jets/resource/{function.rb → lambda/function.rb} +8 -6
  60. data/lib/jets/resource/{function → lambda/function}/environment.rb +1 -1
  61. data/lib/jets/resource/lambda/gem_layer.rb +17 -0
  62. data/lib/jets/resource/lambda/layer_version.rb +46 -0
  63. data/lib/jets/tmp_loader.rb +52 -0
  64. data/lib/jets/version.rb +1 -1
  65. data/{README → readme}/prerelease.md +0 -0
  66. data/{README → readme}/testing.md +5 -0
  67. data/vendor/jets-gems/lib/jets/gems.rb +1 -1
  68. data/vendor/jets-gems/lib/jets/gems/check.rb +7 -7
  69. data/vendor/jets-gems/lib/jets/gems/exist.rb +5 -5
  70. data/vendor/jets-gems/lib/jets/gems/extract/base.rb +4 -11
  71. data/vendor/jets-gems/lib/jets/gems/extract/gem.rb +15 -8
  72. data/vendor/jets-gems/lib/jets/gems/extract/ruby.rb +19 -10
  73. metadata +22 -15
  74. data/lib/jets/builders/templates/handler.js +0 -9
  75. data/lib/jets/builders/templates/shim.js +0 -275
  76. data/lib/jets/rails_overrides.rb +0 -4
  77. data/lib/jets/ruby_server.rb +0 -148
@@ -1,10 +1,10 @@
1
1
  module Jets
2
- class Server
2
+ class RackServer
3
3
  def self.start(options={})
4
4
  new(options).start
5
5
  end
6
6
 
7
- def initialize(options)
7
+ def initialize(options={})
8
8
  @options = options
9
9
  end
10
10
 
@@ -44,6 +44,35 @@ module Jets
44
44
  end
45
45
  end
46
46
 
47
+ # blocks until rack server is up
48
+ def wait_for_socket
49
+ return unless Jets.rack?
50
+
51
+ retries = 0
52
+ max_retries = 30 # 15 seconds at a delay of 0.5s
53
+ delay = 0.5
54
+ if ENV['C9_USER'] # overrides for local testing
55
+ max_retries = 3
56
+ delay = 3
57
+ end
58
+ begin
59
+ server = TCPSocket.new('localhost', 9292)
60
+ server.close
61
+ rescue Errno::ECONNREFUSED
62
+ puts "Unable to connect to localhost:9292. Delay for #{delay} and will try to connect again." if ENV['JETS_DEBUG']
63
+ sleep(delay)
64
+ retries += 1
65
+ if retries < max_retries
66
+ retry
67
+ else
68
+ puts "Giving up on trying to connect to localhost:9292"
69
+ return false
70
+ end
71
+ end
72
+ puts "Connected to localhost:9292 successfully"
73
+ true
74
+ end
75
+
47
76
  def rack_project
48
77
  "#{Jets.root}rack"
49
78
  end
@@ -7,8 +7,8 @@ class Jets::Resource
7
7
  autoload :ChildStack, 'jets/resource/child_stack'
8
8
  autoload :Config, 'jets/resource/config'
9
9
  autoload :Events, 'jets/resource/events'
10
- autoload :Function, 'jets/resource/function'
11
10
  autoload :Iam, 'jets/resource/iam'
11
+ autoload :Lambda, 'jets/resource/lambda'
12
12
  autoload :Permission, 'jets/resource/permission'
13
13
  autoload :Replacer, 'jets/resource/replacer'
14
14
  autoload :Route53, 'jets/resource/route53'
@@ -1,6 +1,6 @@
1
1
  module Jets::Resource::ApiGateway::BasePath
2
2
  class Function < Jets::Resource::Base
3
- include Jets::Resource::Function::Environment
3
+ include Jets::Resource::Lambda::Function::Environment
4
4
 
5
5
  def definition
6
6
  {
@@ -50,15 +50,21 @@ module Jets::Resource::ChildStack
50
50
  end
51
51
 
52
52
  def parameters
53
- common = {
54
- IamRole: "!GetAtt IamRole.Arn",
55
- S3Bucket: "!Ref S3Bucket",
56
- }
53
+ common = self.class.common_parameters
57
54
  common.merge!(controller_params) if controller?
58
55
  common.merge!(depends_on_params) if depends_on
59
56
  common
60
57
  end
61
58
 
59
+ def self.common_parameters
60
+ parameters = {
61
+ IamRole: "!GetAtt IamRole.Arn",
62
+ S3Bucket: "!Ref S3Bucket",
63
+ }
64
+ parameters[:GemLayer] = "!Ref GemLayer" unless Jets.poly_only?
65
+ parameters
66
+ end
67
+
62
68
  def controller_params
63
69
  return {} if Jets::Router.routes.empty?
64
70
 
@@ -0,0 +1,5 @@
1
+ module Jets::Resource::Lambda
2
+ autoload :Function, 'jets/resource/lambda/function'
3
+ autoload :GemLayer, 'jets/resource/lambda/gem_layer'
4
+ autoload :LayerVersion, 'jets/resource/lambda/layer_version'
5
+ end
@@ -1,6 +1,6 @@
1
- class Jets::Resource
1
+ module Jets::Resource::Lambda
2
2
  class Function < Jets::Resource::Base
3
- autoload :Environment, 'jets/resource/function/environment'
3
+ autoload :Environment, 'jets/resource/lambda/function/environment'
4
4
  include Environment
5
5
 
6
6
  def initialize(task)
@@ -120,15 +120,17 @@ class Jets::Resource
120
120
  properties
121
121
  end
122
122
 
123
- # Properties managed by Jets with more finality.
123
+ # Properties managed by Jets with merged with finality.
124
124
  def finalize_properties!(props)
125
125
  handler = full_handler(props)
126
126
  runtime = get_runtime(props)
127
- props.merge!(
127
+ managed = {
128
128
  function_name: function_name,
129
129
  handler: handler,
130
130
  runtime: runtime,
131
- )
131
+ }
132
+ managed[:layers] = ["!Ref GemLayer"] if runtime =~ /^ruby/
133
+ props.merge!(managed)
132
134
  end
133
135
 
134
136
  def get_runtime(props)
@@ -139,7 +141,7 @@ class Jets::Resource
139
141
  map = {
140
142
  node: "nodejs8.10",
141
143
  python: "python3.6",
142
- ruby: "nodejs8.10", # node shim for ruby support
144
+ ruby: "ruby2.5",
143
145
  }
144
146
  map[@task.lang]
145
147
  end
@@ -1,4 +1,4 @@
1
- class Jets::Resource::Function
1
+ class Jets::Resource::Lambda::Function
2
2
  module Environment
3
3
  def env_properties
4
4
  env_vars = Jets::Dotenv.load!(true)
@@ -0,0 +1,17 @@
1
+ module Jets::Resource::Lambda
2
+ class GemLayer < LayerVersion
3
+ def description
4
+ "Jets Ruby Gems"
5
+ end
6
+
7
+ def layer_name
8
+ # Do not include the Jets.extra_env to group the layers in same app together
9
+ "#{Jets.config.short_env}-#{Jets.config.project_name}-gems"
10
+ end
11
+
12
+ def code_s3_key
13
+ checksum = Jets::Builders::Md5.checksums["stage/opt"]
14
+ "jets/code/opt-#{checksum}.zip" # s3_key
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,46 @@
1
+ # Type: "AWS::Lambda::LayerVersion"
2
+ # Properties:
3
+ # CompatibleRuntimes:
4
+ # - String
5
+ # - ...
6
+ # Content:
7
+ # Content
8
+ # Description: String
9
+ # LayerName: String
10
+ # LicenseInfo: String
11
+ module Jets::Resource::Lambda
12
+ class LayerVersion < Jets::Resource::Base
13
+ def definition
14
+ {
15
+ layer_version_logical_id => {
16
+ type: "AWS::Lambda::LayerVersion",
17
+ properties: {
18
+ # compatible_runtimes: ["ruby2.5"],
19
+ content: {
20
+ s3_bucket: s3_bucket,
21
+ s3_key: code_s3_key,
22
+ # s3_object_version: string,
23
+ },
24
+ description: description,
25
+ layer_name: layer_name,
26
+ license_info: "MIT",
27
+ }
28
+ }
29
+ }
30
+ end
31
+
32
+ def s3_bucket
33
+ "!Ref S3Bucket"
34
+ end
35
+
36
+ def layer_version_logical_id
37
+ self.class.name.split('::').last
38
+ end
39
+
40
+ def outputs
41
+ {
42
+ logical_id => "!Ref #{logical_id}",
43
+ }
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,52 @@
1
+ module Jets
2
+ class TmpLoader
3
+ include AwsServices
4
+
5
+ def self.load!
6
+ new.load
7
+ end
8
+
9
+ def initialize(yaml_path=nil)
10
+ yaml_path ||= "#{Jets.root}handlers/data.yml"
11
+ @data = YAML.load_file(yaml_path)
12
+ @s3_bucket = @data['s3_bucket']
13
+ @rack_zip = @data['rack_zip']
14
+ end
15
+
16
+ def load
17
+ rack
18
+ end
19
+
20
+ def rack
21
+ return unless @rack_zip
22
+ download_and_extract(@rack_zip, '/tmp/rack')
23
+ end
24
+
25
+ def download_and_extract(zip_file, folder_dest)
26
+ s3_key = "jets/code/#{zip_file}" # jets/code/rack-checksum.zip
27
+ download_path = "/tmp/#{zip_file}" # /tmp/rack-checksum.zip
28
+
29
+ download(s3_key, download_path)
30
+ unzip(download_path, folder_dest)
31
+ end
32
+
33
+ def download(key, dest)
34
+ # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/Client.html#get_object-instance_method
35
+ # stream object directly to disk
36
+ s3.get_object(response_target: dest,
37
+ bucket: @s3_bucket,
38
+ key: key)
39
+ end
40
+
41
+ def unzip(zipfile, folder_dest)
42
+ sh "unzip -qo #{zipfile} -d #{folder_dest}"
43
+ end
44
+
45
+ def sh(command)
46
+ puts "=> #{command}"
47
+ success = system(command)
48
+ raise "Command #{command} failed" unless success
49
+ success
50
+ end
51
+ end
52
+ end
@@ -1,3 +1,3 @@
1
1
  module Jets
2
- VERSION = "1.2.1"
2
+ VERSION = "1.3.0"
3
3
  end
File without changes
@@ -45,6 +45,11 @@ Run the remote integration script:
45
45
  eval "export $(cat demo/.env.development.remote)" # for DATABASE_URL for mega mode
46
46
  BASE_URL=xxx spec/integration/remote.sh
47
47
 
48
+ Manually seed Rails data. Will add this to the remote.sh in the future.
49
+
50
+ cd demo/rack
51
+ rails runner 'Book.create(id: 1) unless Book.find_by(id: 1)'
52
+
48
53
  Example:
49
54
 
50
55
  eval "export $(cat demo/.env.development.remote)" # for DATABASE_URL for mega mode
@@ -8,7 +8,7 @@ module Jets
8
8
  autoload :Extract, 'jets/gems/extract'
9
9
  autoload :Report, 'jets/gems/report'
10
10
 
11
- def ruby_version_folder
11
+ def ruby_folder
12
12
  major, minor, patch = RUBY_VERSION.split('.')
13
13
  [major, minor, '0'].join('.') # 2.5.1 => 2.5.0
14
14
  end
@@ -126,20 +126,20 @@ EOL
126
126
  #
127
127
  # Example paths:
128
128
  # Macosx:
129
- # bundled/gems/ruby/2.5.0/extensions/x86_64-darwin-16/2.5.0-static/nokogiri-1.8.1
130
- # bundled/gems/ruby/2.5.0/extensions/x86_64-darwin-16/2.5.0-static/byebug-9.1.0
129
+ # vendor/bundle/ruby/2.5.0/extensions/x86_64-darwin-16/2.5.0-static/nokogiri-1.8.1
130
+ # vendor/bundle/ruby/2.5.0/extensions/x86_64-darwin-16/2.5.0-static/byebug-9.1.0
131
131
  # Official AWS Lambda Linux AMI:
132
- # bundled/gems/ruby/2.5.0/extensions/x86_64-linux/2.5.0-static/nokogiri-1.8.1
132
+ # vendor/bundle/ruby/2.5.0/extensions/x86_64-linux/2.5.0-static/nokogiri-1.8.1
133
133
  # Circleci Ubuntu based Linux:
134
- # bundled/gems/ruby/2.5.0/extensions/x86_64-linux/2.5.0/pg-0.21.0
134
+ # vendor/bundle/ruby/2.5.0/extensions/x86_64-linux/2.5.0/pg-0.21.0
135
135
  def compiled_gem_paths
136
- Dir.glob("#{Jets.build_root}/cache/bundled/gems/ruby/*/extensions/**/**/*.{so,bundle}")
136
+ Dir.glob("#{Jets.build_root}/cache/vendor/bundle/ruby/*/extensions/**/**/*.{so,bundle}")
137
137
  end
138
138
 
139
- # Input: bundled/gems/ruby/2.5.0/extensions/x86_64-darwin-16/2.5.0-static/byebug-9.1.0
139
+ # Input: vendor/bundle/ruby/2.5.0/extensions/x86_64-darwin-16/2.5.0-static/byebug-9.1.0
140
140
  # Output: byebug-9.1.0
141
141
  def gem_name_from_path(path)
142
- regexp = /gems\/ruby\/\d+\.\d+\.\d+\/extensions\/.*?\/.*?\/(.*?)\//
142
+ regexp = /vendor\/bundle\/ruby\/\d+\.\d+\.\d+\/extensions\/.*?\/.*?\/(.*?)\//
143
143
  gem_name = path.match(regexp)[1]
144
144
  end
145
145
 
@@ -25,7 +25,7 @@ module Jets::Gems
25
25
  end
26
26
 
27
27
  # Example url:
28
- # https://gems.lambdagems.com/gems/2.5.0/byebug/byebug-9.1.0-x86_64-linux.tgz
28
+ # https://gems2.lambdagems.com/gems/2.5.0/byebug/byebug-9.1.0.zip
29
29
  def url_exists?(url)
30
30
  url = URI.parse(url)
31
31
  req = Net::HTTP.new(url.host, url.port).tap do |http|
@@ -43,14 +43,14 @@ module Jets::Gems
43
43
 
44
44
  # gem_name: byebug-9.1.0
45
45
  # Example url:
46
- # https://gems.lambdagems.com/gems/2.5.0/byebug/byebug-9.1.0-x86_64-linux.tgz
46
+ # https://gems2.lambdagems.com/gems/2.5.0/byebug/byebug-9.1.0.zip
47
47
  def gem_url(gem_name)
48
48
  folder = gem_name.gsub(/-(\d+\.\d+\.\d+.*)/,'') # folder: byebug
49
- "#{source_url}/gems/#{Jets::Gems.ruby_version_folder}/#{folder}/#{gem_name}-x86_64-linux.tgz"
49
+ "#{source_url}/gems/#{Jets::Gems.ruby_folder}/#{folder}/#{gem_name}.zip"
50
50
  end
51
51
 
52
- def ruby_version_folder
53
- Jets::Gems.ruby_version_folder
52
+ def ruby_folder
53
+ Jets::Gems.ruby_folder
54
54
  end
55
55
  end
56
56
  end
@@ -9,8 +9,8 @@ module Jets::Gems::Extract
9
9
  @name = name
10
10
  @options = options
11
11
 
12
- @downloads_root = options[:downloads_root] || "/tmp/jets/lambdagems"
13
- @source_url = options[:source_url] || "https://gems.lambdagems.com"
12
+ @downloads_root = options[:downloads_root] || "/tmp/jets/#{Jets.config.project_name}/lambdagems"
13
+ @source_url = options[:source_url] || Jets.default_gems_source
14
14
  end
15
15
 
16
16
  def clean_downloads(folder)
@@ -19,15 +19,8 @@ module Jets::Gems::Extract
19
19
  FileUtils.rm_rf(path)
20
20
  end
21
21
 
22
- def unpack_tarball(tarball_path)
23
- dest = project_root
24
- say "Unpacking into #{dest}"
25
- FileUtils.mkdir_p(dest)
26
- untar(tarball_path, dest)
27
- end
28
-
29
- def untar(tarball_path, parent_folder_dest)
30
- sh("tar -xzf #{tarball_path} -C #{parent_folder_dest}")
22
+ def unzip(zipfile_path, parent_folder_dest)
23
+ sh("cd #{parent_folder_dest} && unzip -qo #{zipfile_path}")
31
24
  end
32
25
 
33
26
  def sh(command)
@@ -14,12 +14,19 @@ module Jets::Gems::Extract
14
14
  def run
15
15
  say "Looking for #{full_gem_name} gem in: #{@options[:source_url]}"
16
16
  clean_downloads(:gems) if @options[:clean]
17
- tarball_path = download_gem
17
+ zipfile_path = download_gem
18
18
  remove_current_gem
19
- unpack_tarball(tarball_path)
19
+ unzip_file(zipfile_path)
20
20
  say("Gem #{full_gem_name} unpacked at #{project_root}", :debug)
21
21
  end
22
22
 
23
+ def unzip_file(zipfile_path)
24
+ dest = "#{Jets.build_root}/stage/code/opt"
25
+ say "Unpacking into #{dest}"
26
+ FileUtils.mkdir_p(dest)
27
+ unzip(zipfile_path, dest)
28
+ end
29
+
23
30
  # ensure that we always have the full gem name
24
31
  def full_gem_name
25
32
  return @full_gem_name if @full_gem_name
@@ -45,7 +52,7 @@ module Jets::Gems::Extract
45
52
  # The folder contains the re-produced directory structure. Example with
46
53
  # the gem: byebug-9.1.0
47
54
  #
48
- # bundled/gems/ruby/2.5.0/extensions/x86_64-darwin-16/2.5.0-static/byebug-9.1.0
55
+ # vendor/bundle/ruby/2.5.0/extensions/x86_64-darwin-16/2.5.0-static/byebug-9.1.0
49
56
  #
50
57
  def download_gem
51
58
  # download - also move to /tmp/jets/demo/compiled_gems folder
@@ -60,7 +67,7 @@ module Jets::Gems::Extract
60
67
  raise NotFound.new(message)
61
68
  end
62
69
  end
63
- say "Tarball downloaded to: #{tarball_dest}"
70
+ say "Downloaded to: #{tarball_dest}"
64
71
  tarball_dest
65
72
  end
66
73
 
@@ -77,7 +84,7 @@ module Jets::Gems::Extract
77
84
  say "Removing current #{full_gem_name} gem installation:"
78
85
  gem_dirs = Dir.glob("#{project_root}/**/*").select do |path|
79
86
  File.directory?(path) &&
80
- path =~ %r{bundled/gems} &&
87
+ path =~ %r{vendor/bundle} &&
81
88
  File.basename(path) == full_gem_name
82
89
  end
83
90
  gem_dirs.each do |dir|
@@ -88,11 +95,11 @@ module Jets::Gems::Extract
88
95
 
89
96
  # full_gem_name: byebug-9.1.0
90
97
  def gem_url
91
- "#{source_url}/gems/#{ruby_version_folder}/#{gem_name}/#{full_gem_name}-x86_64-linux.tgz"
98
+ "#{source_url}/gems/#{ruby_folder}/#{gem_name}/#{full_gem_name}.zip"
92
99
  end
93
100
 
94
- def ruby_version_folder
95
- Jets::Gems.ruby_version_folder
101
+ def ruby_folder
102
+ Jets::Gems.ruby_folder
96
103
  end
97
104
  end
98
105
  end
@@ -1,6 +1,6 @@
1
1
  # Usage:
2
2
  #
3
- # Jets::Gems::Extract::Ruby.new("2.5.0",
3
+ # Jets::Gems::Extract::Ruby.new("2.5.3",
4
4
  # downloads_root: cache_area, # defaults to /tmp/lambdagem
5
5
  # dest: cache_area, # defaults to . (project_root)
6
6
  # ).run
@@ -12,13 +12,22 @@ module Jets::Gems::Extract
12
12
  def run
13
13
  say "Looking for #{full_ruby_name}"
14
14
  clean_downloads(:rubies) if @options[:clean]
15
- tarball_path = download_ruby
16
- unpack_tarball(tarball_path)
17
- say("Ruby #{full_ruby_name} unpacked at #{project_root}", :debug)
15
+ zip_path = download_ruby
16
+ unzip(zip_path)
17
+ end
18
+
19
+ def unzip(path)
20
+ dest = "#{Jets.build_root}/stage/code/opt"
21
+ say "Unpacking into #{dest}"
22
+ FileUtils.mkdir_p(dest)
23
+ # cd-ing dest unzips the files into that folder
24
+ sh("cd #{dest} && unzip -qo #{path}")
25
+ say("Ruby #{full_ruby_name} unziped at #{dest}", :debug)
18
26
  end
19
27
 
20
28
  def download_ruby
21
29
  url = ruby_url
30
+ puts "download ruby url #{url}"
22
31
  tarball_dest = download_file(url, download_path(File.basename(url)))
23
32
  unless tarball_dest
24
33
  message = "Url: #{url} not found"
@@ -29,7 +38,7 @@ module Jets::Gems::Extract
29
38
  raise NotFound.new(message)
30
39
  end
31
40
  end
32
- say "Tarball downloaded to: #{tarball_dest}"
41
+ say "Downloaded to: #{tarball_dest}"
33
42
  tarball_dest
34
43
  end
35
44
 
@@ -42,16 +51,16 @@ module Jets::Gems::Extract
42
51
  #
43
52
  # Example:
44
53
  #
45
- # 2.5.0 -> ruby-2.5.0-linux-x86_64.tgz
46
- # ruby-2.5.0 -> ruby-2.5.0-linux-x86_64.tgz
47
- # test-ruby-2.5.0 -> test-ruby-2.5.0-linux-x86_64.tgz
54
+ # 2.5.3 -> ruby-2.5.3.zip
55
+ # ruby-2.5.3 -> ruby-2.5.3.zip
56
+ # test-ruby-2.5.3 -> test-ruby-2.5.3.zip
48
57
  def full_ruby_name
49
58
  md = @name.match(/^(\d+\.\d+\.\d+)$/)
50
59
  if md
51
60
  ruby_version = md[1]
52
- "ruby-#{ruby_version}-linux-x86_64.tgz"
61
+ "ruby-#{ruby_version}.zip"
53
62
  else
54
- "#{@name}-linux-x86_64.tgz"
63
+ "#{@name}.zip"
55
64
  end
56
65
  end
57
66