jets 1.2.1 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
|