jets 1.0.4 → 1.0.5
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 +6 -0
- data/Gemfile.lock +1 -1
- data/lib/jets/application.rb +2 -2
- data/lib/jets/builders/gem_replacer.rb +1 -9
- data/lib/jets/commands/gems.rb +7 -11
- data/lib/jets/commands/help/gems/check.md +2 -1
- data/lib/jets/commands/import/rail.rb +24 -8
- data/lib/jets/commands/import/sequence.rb +1 -1
- data/lib/jets/commands/new.rb +15 -0
- data/lib/jets/commands/sequence.rb +5 -1
- data/lib/jets/version.rb +1 -1
- data/vendor/jets-gems/lib/jets/gems/check.rb +14 -4
- data/vendor/jets-gems/lib/jets/gems/exist.rb +3 -1
- data/vendor/jets-gems/lib/jets/gems/report.rb +21 -5
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2caf68ff06e809fb88b76bdfb381aca29ce7f8540989dd775da2b288351b7f28
|
4
|
+
data.tar.gz: 566b69b388a24b2d110cd522c410b4be939a4a8e38f2771a69618228ffd8009c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c76ed8e21738349e7052c01d27bce581afd66a8c32980532e1a2c63fcf597336bb6deabcdea64db75a880b4e055516d33271e543dcae9196b74a22e95685be9c
|
7
|
+
data.tar.gz: c753ef10f2c180de87e82305b68195ff591a53f1b3b497144df7ddf43aeb7bce3d779183172984d068458a070512b072920b85986ad3354a5384ee5dead40c09
|
data/CHANGELOG.md
CHANGED
@@ -3,6 +3,12 @@
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
4
4
|
This project *loosely tries* to adhere to [Semantic Versioning](http://semver.org/), even before v1.0.
|
5
5
|
|
6
|
+
## [1.0.5]
|
7
|
+
- change config.lambdagems to config.gems
|
8
|
+
- friendly info message when yarn is not installed
|
9
|
+
- improve rails:import rack/config/database.yml generation
|
10
|
+
- update gems check
|
11
|
+
|
6
12
|
## [1.0.4]
|
7
13
|
- import:rails reconfigure database.yml pull request #56 from tongueroo/database-yml
|
8
14
|
|
data/Gemfile.lock
CHANGED
data/lib/jets/application.rb
CHANGED
@@ -32,8 +32,8 @@ class Jets::Application
|
|
32
32
|
config.prewarm.public_ratio = 3
|
33
33
|
config.prewarm.rack_ratio = 5
|
34
34
|
|
35
|
-
config.
|
36
|
-
config.
|
35
|
+
config.gems = ActiveSupport::OrderedOptions.new
|
36
|
+
config.gems.sources = [
|
37
37
|
'https://gems.lambdagems.com'
|
38
38
|
]
|
39
39
|
|
@@ -8,15 +8,7 @@ class Jets::Builders
|
|
8
8
|
|
9
9
|
def run
|
10
10
|
check = Jets::Gems::Check.new
|
11
|
-
found_gems = check.run
|
12
|
-
if check.missing?
|
13
|
-
# Exits early if not all the linux gems are available.
|
14
|
-
# Better to error now than deploy a broken package to AWS Lambda.
|
15
|
-
# Provide users with message about using their own lambdagems source.
|
16
|
-
puts check.missing_message
|
17
|
-
Jets::Gems::Report.missing(check.missing_gems)
|
18
|
-
exit 1
|
19
|
-
end
|
11
|
+
found_gems = check.run! # exits early if missing gems found
|
20
12
|
|
21
13
|
# Reaching here means its safe to download and extract the gems
|
22
14
|
found_gems.each do |gem_name, source|
|
data/lib/jets/commands/gems.rb
CHANGED
@@ -4,20 +4,16 @@ module Jets::Commands
|
|
4
4
|
long_desc Help.text("gems:check")
|
5
5
|
def check
|
6
6
|
check = Jets::Gems::Check.new(cli: true)
|
7
|
-
check.run
|
8
|
-
|
9
|
-
|
10
|
-
Jets::Gems::Report.missing(check.missing_gems)
|
11
|
-
else
|
12
|
-
puts "Congrats! All gems are available in as pre-built Lambda gems 👍"
|
13
|
-
end
|
7
|
+
check.run! # exits early if missing gems found
|
8
|
+
# If reach here, means all gems are ok.
|
9
|
+
puts "Congrats! All gems are available in as pre-built Lambda gems 👍"
|
14
10
|
end
|
15
|
-
|
16
|
-
desc "sources", "List
|
11
|
+
|
12
|
+
desc "sources", "List pre-built Lambda gem sources"
|
17
13
|
long_desc Help.text("gems:sources")
|
18
14
|
def sources
|
19
|
-
puts "Your pre-built
|
20
|
-
Jets.config.
|
15
|
+
puts "Your pre-built Lambda gem sources are:"
|
16
|
+
Jets.config.gems.sources.each do |source|
|
21
17
|
puts " #{source}"
|
22
18
|
end
|
23
19
|
end
|
@@ -1,7 +1,8 @@
|
|
1
1
|
You can configure additional gem sources in config/application.rb:
|
2
2
|
|
3
|
+
# Sources for check for pre-compiled Lambda gems. Checks the list in order.
|
3
4
|
Jets.application.configure do
|
4
|
-
config.
|
5
|
+
config.gems.sources = [
|
5
6
|
"https://gems.lambdagems.com"
|
6
7
|
]
|
7
8
|
end
|
@@ -33,12 +33,10 @@ CODE
|
|
33
33
|
return unless File.exist?(current_yaml)
|
34
34
|
|
35
35
|
vars = {}
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
end
|
41
|
-
vars['adapter'] = data['development']['adapter']
|
36
|
+
current_database = YAML.load_file(current_yaml)
|
37
|
+
database_names = infer_database_name(current_database)
|
38
|
+
vars.merge!(database_names)
|
39
|
+
vars['adapter'] = current_database['development']['adapter']
|
42
40
|
|
43
41
|
path = File.expand_path("templates/config/database.yml", File.dirname(__FILE__))
|
44
42
|
content = Jets::Erb.result(path, vars)
|
@@ -82,10 +80,28 @@ CODE
|
|
82
80
|
|
83
81
|
# Deploy
|
84
82
|
|
85
|
-
When you
|
83
|
+
When you are ready deploy to AWS Lambda with:
|
86
84
|
|
87
85
|
jets deploy
|
88
|
-
|
86
|
+
EOL
|
87
|
+
end
|
88
|
+
|
89
|
+
private
|
90
|
+
def infer_database_name(current_database)
|
91
|
+
vars = {}
|
92
|
+
%w[development test production].each do |env|
|
93
|
+
if !current_database[env]['database'].include?('<%') # already has ERB
|
94
|
+
vars["database_#{env}"] = current_database[env]['database']
|
95
|
+
else
|
96
|
+
lines = IO.readlines("#{Jets.root}rack/config/application.rb")
|
97
|
+
module_line = lines.find { |l| l =~ /^module / }
|
98
|
+
app_module = module_line.gsub(/^module /,'').strip
|
99
|
+
app_name = app_module.underscore
|
100
|
+
vars["database_#{env}"] = "#{app_name}_#{env}"
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
vars
|
89
105
|
end
|
90
106
|
end
|
91
107
|
end
|
@@ -40,7 +40,7 @@ class Jets::Commands::Import
|
|
40
40
|
puts "Creating rack folder"
|
41
41
|
template_path = File.expand_path(@source)
|
42
42
|
set_source_paths(template_path)
|
43
|
-
directory ".", rack_folder
|
43
|
+
directory ".", rack_folder, exclude_pattern: %r{.git}
|
44
44
|
end
|
45
45
|
|
46
46
|
def set_source_paths(*paths)
|
data/lib/jets/commands/new.rb
CHANGED
@@ -60,6 +60,21 @@ module Jets::Commands
|
|
60
60
|
|
61
61
|
def webpacker_install
|
62
62
|
return unless @webpacker
|
63
|
+
unless yarn_installed?
|
64
|
+
puts "Yarn is not installed or has not been detected. Please double check that yarn has been installed.".colorize(:red)
|
65
|
+
puts <<~EOL
|
66
|
+
To check:
|
67
|
+
|
68
|
+
which yarn
|
69
|
+
|
70
|
+
If it is not installed, you can usually install it with:
|
71
|
+
|
72
|
+
npm install -g yarn
|
73
|
+
|
74
|
+
Refer to the install docs for more info: http://rubyonjets.com/docs/install/
|
75
|
+
EOL
|
76
|
+
exit 1
|
77
|
+
end
|
63
78
|
|
64
79
|
command = "jets webpacker:install"
|
65
80
|
command += " FORCE=1" if options[:force]
|
data/lib/jets/version.rb
CHANGED
@@ -20,13 +20,13 @@ module Jets::Gems
|
|
20
20
|
# "pg-0.21.0" => "https://anothersource.com",
|
21
21
|
# }
|
22
22
|
#
|
23
|
-
def run
|
23
|
+
def run!
|
24
24
|
puts "Checking projects gems for pre-built Lambda gems..."
|
25
25
|
found_gems = {}
|
26
26
|
compiled_gems.each do |gem_name|
|
27
27
|
puts "Checking #{gem_name}..." if @options[:cli]
|
28
28
|
gem_exists = false
|
29
|
-
Jets.config.
|
29
|
+
Jets.config.gems.sources.each do |source|
|
30
30
|
exist = Jets::Gems::Exist.new(source_url: source)
|
31
31
|
found = exist.check(gem_name)
|
32
32
|
# gem exists on at least of the lambdagem sources
|
@@ -40,6 +40,16 @@ module Jets::Gems
|
|
40
40
|
@missing_gems << gem_name
|
41
41
|
end
|
42
42
|
end
|
43
|
+
|
44
|
+
unless @missing_gems.empty?
|
45
|
+
# Exits early if not all the linux gems are available.
|
46
|
+
# Better to error now than deploy a broken package to AWS Lambda.
|
47
|
+
# Provide users with message about using their own lambdagems source.
|
48
|
+
puts missing_message
|
49
|
+
Report.missing(@missing_gems)
|
50
|
+
exit 1
|
51
|
+
end
|
52
|
+
|
43
53
|
found_gems
|
44
54
|
end
|
45
55
|
|
@@ -55,7 +65,7 @@ Your project requires compiled gems were not available in any of your lambdagems
|
|
55
65
|
<% end %>
|
56
66
|
|
57
67
|
Your current lambdagems sources:
|
58
|
-
<% Jets.config.
|
68
|
+
<% Jets.config.gems.sources.map do |source| %>
|
59
69
|
* <%= source -%>
|
60
70
|
<% end %>
|
61
71
|
|
@@ -65,7 +75,7 @@ Jets is unable to build a deployment package that will work on AWS Lambda withou
|
|
65
75
|
* Wait until it added to lambdagems.com. No need to report this to us, as we've already been notified.
|
66
76
|
* Use another gem that does not require compilation.
|
67
77
|
|
68
|
-
Compiled gems usually take some time to figure out how to build as they each depend on different libraries and packages.
|
78
|
+
Compiled gems usually take some time to figure out how to build as they each depend on different libraries and packages.
|
69
79
|
EOL
|
70
80
|
erb = ERB.new(template, nil, '-') # trim mode https://stackoverflow.com/questions/4632879/erb-template-removing-the-trailing-line
|
71
81
|
erb.result(binding)
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'open-uri'
|
2
|
+
|
1
3
|
module Jets::Gems
|
2
4
|
class Exist
|
3
5
|
def initialize(options)
|
@@ -31,7 +33,7 @@ module Jets::Gems
|
|
31
33
|
end
|
32
34
|
res = req.request_head(url.path)
|
33
35
|
res.code == "200"
|
34
|
-
rescue SocketError, OpenURI::HTTPError
|
36
|
+
rescue SocketError, OpenURI::HTTPError, OpenSSL::SSL::SSLError
|
35
37
|
false
|
36
38
|
end
|
37
39
|
|
@@ -2,6 +2,8 @@ require "net/http"
|
|
2
2
|
|
3
3
|
module Jets::Gems
|
4
4
|
class Report
|
5
|
+
# For local testing, example:
|
6
|
+
# LAMBDAGEM_API_URL=localhost:8888/api/v1 jets gems:check
|
5
7
|
LAMBDAGEM_API_URL = ENV["LAMBDAGEM_API_URL"] || "https://api.lambdagems.com/api/v1"
|
6
8
|
|
7
9
|
def self.missing(gems)
|
@@ -19,7 +21,7 @@ module Jets::Gems
|
|
19
21
|
if md = gem_name.match(version_pattern)
|
20
22
|
name, version = md[1], md[2]
|
21
23
|
threads << Thread.new do
|
22
|
-
call_api("report/missing?name=#{name}&version=#{version}")
|
24
|
+
call_api("report/missing?name=#{name}&version=#{version}", async: true)
|
23
25
|
end
|
24
26
|
else
|
25
27
|
puts "WARN: Unable to extract the version from the gem name."
|
@@ -31,16 +33,30 @@ module Jets::Gems
|
|
31
33
|
end
|
32
34
|
|
33
35
|
def api_url(path)
|
34
|
-
"#{LAMBDAGEM_API_URL}/#{path}"
|
36
|
+
url = "#{LAMBDAGEM_API_URL}/#{path}"
|
37
|
+
url.include?("http") ? url : "http://#{url}" # ensure http or https has been provided
|
35
38
|
end
|
36
39
|
|
37
|
-
def call_api(path)
|
38
|
-
# raise "HI"
|
40
|
+
def call_api(path, async: false)
|
39
41
|
uri = URI(api_url(path))
|
40
42
|
http = Net::HTTP.new(uri.host, uri.port)
|
41
43
|
http.use_ssl = uri.scheme == "https"
|
44
|
+
# Abusing read_timeout to mimic async fire and forget behavior.
|
45
|
+
# This makes the code continue and return very quickly and we ignore the response
|
46
|
+
# Thanks: https://www.mikeperham.com/2015/05/08/timeout-rubys-most-dangerous-api/
|
47
|
+
# https://github.com/ankane/the-ultimate-guide-to-ruby-timeouts/issues/8
|
48
|
+
http.max_retries = 0 # Fix http retries, read_timeout will cause retries immediately, we want to disable this behavior
|
49
|
+
http.read_timeout = 0.01 if async
|
42
50
|
request = Net::HTTP::Get.new(uri)
|
43
|
-
|
51
|
+
begin
|
52
|
+
response = http.request(request)
|
53
|
+
rescue Net::ReadTimeout
|
54
|
+
# Abusing read_timeout to mimic async fire and forget behavior
|
55
|
+
end
|
56
|
+
return nil if async # always return nil if async behavior requested.
|
57
|
+
# In theory we can sometimes get back a response if it returns before
|
58
|
+
# the read timeout but that's a confusing interface.
|
59
|
+
|
44
60
|
resp = {
|
45
61
|
status: response.code.to_i,
|
46
62
|
headers: response.each_header.to_h,
|