jets 1.2.1 → 1.3.0
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/CHANGELOG.md +8 -0
- data/Gemfile.lock +4 -4
- data/README.md +2 -2
- data/lib/jets.rb +3 -4
- data/lib/jets/application.rb +13 -2
- data/lib/jets/builders.rb +3 -0
- data/lib/jets/builders/code_builder.rb +22 -89
- data/lib/jets/builders/code_size.rb +55 -0
- data/lib/jets/builders/gem_replacer.rb +22 -1
- data/lib/jets/builders/handler_generator.rb +31 -5
- data/lib/jets/builders/lambda_layer.rb +50 -0
- data/lib/jets/builders/md5.rb +10 -5
- data/lib/jets/builders/md5_zip.rb +1 -0
- data/lib/jets/builders/purger.rb +35 -0
- data/lib/jets/builders/rack_packager.rb +25 -5
- data/lib/jets/builders/rackup_wrappers/rackup +1 -5
- data/lib/jets/builders/ruby_packager.rb +25 -27
- data/lib/jets/builders/shim_vars/app.rb +3 -3
- data/lib/jets/builders/shim_vars/base.rb +9 -4
- data/lib/jets/builders/shim_vars/shared.rb +2 -2
- data/lib/jets/builders/templates/handler.rb +7 -0
- data/lib/jets/builders/tidy.rb +4 -3
- data/lib/jets/builders/util.rb +11 -3
- data/lib/jets/cfn/builders/base_child_builder.rb +6 -3
- data/lib/jets/cfn/builders/interface.rb +1 -1
- data/lib/jets/cfn/builders/parent_builder.rb +5 -0
- data/lib/jets/commands/build.rb +4 -2
- data/lib/jets/commands/help/gems/check.md +1 -1
- data/lib/jets/commands/main.rb +1 -1
- data/lib/jets/commands/new.rb +4 -2
- data/lib/jets/commands/sequence.rb +1 -1
- data/lib/jets/commands/templates/skeleton/Gemfile.tt +2 -2
- data/lib/jets/commands/templates/skeleton/config/application.rb.tt +0 -5
- data/lib/jets/commands/templates/skeleton/config/database.yml.tt +2 -2
- data/lib/jets/commands/templates/skeleton/config/environments/development.rb +2 -1
- data/lib/jets/commands/templates/skeleton/config/environments/production.rb +2 -3
- data/lib/jets/commands/upgrade/v1.rb +21 -0
- data/lib/jets/controller/renderers/template_renderer.rb +1 -1
- data/lib/jets/controller/rendering.rb +1 -4
- data/lib/jets/core.rb +45 -6
- data/lib/jets/internal/app/jobs/jets/preheat_job.rb +32 -34
- data/lib/jets/mega/request.rb +11 -0
- data/lib/jets/overrides/lambda.rb +1 -0
- data/lib/jets/overrides/lambda/marshaller.rb +31 -0
- data/lib/jets/overrides/rails.rb +4 -0
- data/lib/jets/{rails_overrides → overrides/rails}/asset_tag_helper.rb +0 -0
- data/lib/jets/{rails_overrides → overrides/rails}/common_methods.rb +0 -0
- data/lib/jets/{rails_overrides → overrides/rails}/rendering_helper.rb +0 -0
- data/lib/jets/{rails_overrides → overrides/rails}/url_helper.rb +0 -0
- data/lib/jets/poly_fun/base_executor.rb +1 -1
- data/lib/jets/preheat.rb +1 -0
- data/lib/jets/processors/main_processor.rb +3 -10
- data/lib/jets/{server.rb → rack_server.rb} +31 -2
- data/lib/jets/resource.rb +1 -1
- data/lib/jets/resource/api_gateway/base_path/function.rb +1 -1
- data/lib/jets/resource/child_stack/app_class.rb +10 -4
- data/lib/jets/resource/lambda.rb +5 -0
- data/lib/jets/resource/{function.rb → lambda/function.rb} +8 -6
- data/lib/jets/resource/{function → lambda/function}/environment.rb +1 -1
- data/lib/jets/resource/lambda/gem_layer.rb +17 -0
- data/lib/jets/resource/lambda/layer_version.rb +46 -0
- data/lib/jets/tmp_loader.rb +52 -0
- data/lib/jets/version.rb +1 -1
- data/{README → readme}/prerelease.md +0 -0
- data/{README → readme}/testing.md +5 -0
- data/vendor/jets-gems/lib/jets/gems.rb +1 -1
- data/vendor/jets-gems/lib/jets/gems/check.rb +7 -7
- data/vendor/jets-gems/lib/jets/gems/exist.rb +5 -5
- data/vendor/jets-gems/lib/jets/gems/extract/base.rb +4 -11
- data/vendor/jets-gems/lib/jets/gems/extract/gem.rb +15 -8
- data/vendor/jets-gems/lib/jets/gems/extract/ruby.rb +19 -10
- metadata +22 -15
- data/lib/jets/builders/templates/handler.js +0 -9
- data/lib/jets/builders/templates/shim.js +0 -275
- data/lib/jets/rails_overrides.rb +0 -4
- data/lib/jets/ruby_server.rb +0 -148
@@ -1,10 +1,10 @@
|
|
1
1
|
module Jets
|
2
|
-
class
|
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
|
data/lib/jets/resource.rb
CHANGED
@@ -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'
|
@@ -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
|
|
@@ -1,6 +1,6 @@
|
|
1
|
-
|
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
|
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
|
-
|
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: "
|
144
|
+
ruby: "ruby2.5",
|
143
145
|
}
|
144
146
|
map[@task.lang]
|
145
147
|
end
|
@@ -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
|
data/lib/jets/version.rb
CHANGED
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
|
@@ -126,20 +126,20 @@ EOL
|
|
126
126
|
#
|
127
127
|
# Example paths:
|
128
128
|
# Macosx:
|
129
|
-
#
|
130
|
-
#
|
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
|
-
#
|
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
|
-
#
|
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/
|
136
|
+
Dir.glob("#{Jets.build_root}/cache/vendor/bundle/ruby/*/extensions/**/**/*.{so,bundle}")
|
137
137
|
end
|
138
138
|
|
139
|
-
# Input:
|
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 = /
|
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://
|
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://
|
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.
|
49
|
+
"#{source_url}/gems/#{Jets::Gems.ruby_folder}/#{folder}/#{gem_name}.zip"
|
50
50
|
end
|
51
51
|
|
52
|
-
def
|
53
|
-
Jets::Gems.
|
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] ||
|
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
|
23
|
-
|
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
|
-
|
17
|
+
zipfile_path = download_gem
|
18
18
|
remove_current_gem
|
19
|
-
|
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
|
-
#
|
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 "
|
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{
|
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/#{
|
98
|
+
"#{source_url}/gems/#{ruby_folder}/#{gem_name}/#{full_gem_name}.zip"
|
92
99
|
end
|
93
100
|
|
94
|
-
def
|
95
|
-
Jets::Gems.
|
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.
|
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
|
-
|
16
|
-
|
17
|
-
|
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 "
|
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.
|
46
|
-
# ruby-2.5.
|
47
|
-
# test-ruby-2.5.
|
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}
|
61
|
+
"ruby-#{ruby_version}.zip"
|
53
62
|
else
|
54
|
-
"#{@name}
|
63
|
+
"#{@name}.zip"
|
55
64
|
end
|
56
65
|
end
|
57
66
|
|