jets 1.3.9 → 1.4.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 +5 -0
- data/Gemfile.lock +3 -3
- data/lib/jets.rb +1 -0
- data/lib/jets/booter.rb +12 -1
- data/lib/jets/builders/code_builder.rb +39 -35
- data/lib/jets/builders/code_size.rb +4 -2
- data/lib/jets/builders/gem_replacer.rb +7 -20
- data/lib/jets/builders/lambda_layer.rb +55 -37
- data/lib/jets/builders/rack_packager.rb +6 -4
- data/lib/jets/builders/ruby_packager.rb +8 -27
- data/lib/jets/builders/shim_vars/base.rb +0 -4
- data/lib/jets/builders/util.rb +6 -7
- data/lib/jets/commands/deploy.rb +1 -2
- data/lib/jets/commands/import/rail.rb +1 -34
- data/lib/jets/core.rb +3 -2
- data/lib/jets/turbo.rb +47 -0
- data/lib/jets/turbo/database_yaml.rb +41 -0
- data/lib/jets/turbo/project/.gitignore +12 -0
- data/lib/jets/turbo/project/.jetskeep +1 -0
- data/lib/jets/turbo/project/Gemfile +16 -0
- data/lib/jets/turbo/project/Gemfile.lock +184 -0
- data/lib/jets/turbo/project/Rakefile +2 -0
- data/lib/jets/turbo/project/app/controllers/application_controller.rb +2 -0
- data/lib/jets/turbo/project/app/helpers/application_helper.rb +2 -0
- data/lib/jets/turbo/project/app/jobs/application_job.rb +4 -0
- data/lib/jets/turbo/project/config.ru +5 -0
- data/lib/jets/turbo/project/config/application.rb +4 -0
- data/lib/jets/turbo/project/config/routes.rb +4 -0
- data/lib/jets/turbo/rail.rb +113 -0
- data/lib/jets/turbo/templates/config/database.yml +26 -0
- data/lib/jets/version.rb +1 -1
- data/vendor/jets-gems/lib/jets/gems/check.rb +18 -9
- data/vendor/jets-gems/lib/jets/gems/extract/gem.rb +1 -1
- metadata +17 -2
@@ -0,0 +1,113 @@
|
|
1
|
+
class Jets::Turbo
|
2
|
+
class Rail
|
3
|
+
attr_reader :build_area
|
4
|
+
def initialize
|
5
|
+
@build_area = "/tmp/jets"
|
6
|
+
@project_folder = "turbo-wrapper-project"
|
7
|
+
end
|
8
|
+
|
9
|
+
def setup
|
10
|
+
afterburners_message
|
11
|
+
clean
|
12
|
+
override_env_vars
|
13
|
+
wrapper_jets_project
|
14
|
+
copy_rack_project
|
15
|
+
reconfigure_database_yml
|
16
|
+
apply_dot_jets_app
|
17
|
+
set_project_name
|
18
|
+
end
|
19
|
+
|
20
|
+
def afterburners_message
|
21
|
+
command = ARGV.first
|
22
|
+
if command == "deploy"
|
23
|
+
puts "=> Rails app detected: Enabling Jets Afterburner to deploy to AWS Lambda.".colorize(:green)
|
24
|
+
else
|
25
|
+
puts "=> Rails app detected: Enabling Jets Afterburner.".colorize(:green)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# Hack env vars to support Jets Turbo mode
|
30
|
+
def override_env_vars
|
31
|
+
ENV['BUNDLE_GEMFILE'] = "#{build_area}/#{@project_folder}/Gemfile"
|
32
|
+
ENV['JETS_ROOT'] = "#{build_area}/#{@project_folder}"
|
33
|
+
# Jets.root /home/ec2-user/environment/jet-pack/lib/turbo-wrapper-project
|
34
|
+
end
|
35
|
+
|
36
|
+
def wrapper_jets_project
|
37
|
+
jets_project = File.expand_path("project", File.dirname(__FILE__))
|
38
|
+
project_path = "#{build_area}/#{@project_folder}"
|
39
|
+
|
40
|
+
FileUtils.mkdir_p(build_area)
|
41
|
+
FileUtils.rm_rf(project_path)
|
42
|
+
FileUtils.cp_r(jets_project, project_path)
|
43
|
+
|
44
|
+
IO.write("#{project_path}/date.txt", Time.now) # update date.txt file to ensure Lambda function code changes and updates
|
45
|
+
end
|
46
|
+
|
47
|
+
def set_project_name
|
48
|
+
path = "#{build_area}/#{@project_folder}/config/application.rb"
|
49
|
+
lines = IO.readlines(path)
|
50
|
+
lines.map! do |l|
|
51
|
+
if l.include?('config.project_name = "project"')
|
52
|
+
%Q| config.project_name = "#{project_name}"\n|
|
53
|
+
else
|
54
|
+
l
|
55
|
+
end
|
56
|
+
end
|
57
|
+
IO.write(path, lines.join(''))
|
58
|
+
end
|
59
|
+
|
60
|
+
def project_name
|
61
|
+
path = "#{build_area}/#{@project_folder}/project_name"
|
62
|
+
name = if File.exist?(path)
|
63
|
+
IO.read(path).strip # project_name
|
64
|
+
else
|
65
|
+
File.basename(Dir.pwd)
|
66
|
+
end
|
67
|
+
name.gsub('_','-') # project_name
|
68
|
+
end
|
69
|
+
|
70
|
+
# Anything in rails_project/.jets/app will override the generic wrapper project.
|
71
|
+
#
|
72
|
+
# rails_project/.jets/app/.env => jets_project/.env
|
73
|
+
# rails_project/.jets/app/config/database.yml => jets_project/config/database.yml
|
74
|
+
#
|
75
|
+
# This useful for DATABASE_URL and other env vars.
|
76
|
+
def apply_dot_jets_app
|
77
|
+
# Dir.pwd: /home/ec2-user/environment/demo-rails
|
78
|
+
# Jets.root: /tmp/jets/turbo-wrapper-project/
|
79
|
+
dot_jets_app = "#{Dir.pwd}/.jets/app"
|
80
|
+
|
81
|
+
return unless File.exist?(dot_jets_app)
|
82
|
+
# Trailing slashes are required for both folders. Jets.root already has the trailing slash
|
83
|
+
sh "rsync -a --links #{dot_jets_app}/ #{Jets.root}", quiet: true
|
84
|
+
end
|
85
|
+
|
86
|
+
def reconfigure_database_yml
|
87
|
+
DatabaseYaml.new.reconfigure
|
88
|
+
end
|
89
|
+
|
90
|
+
def copy_rack_project
|
91
|
+
dest = "#{build_area}/#{@project_folder}/rack"
|
92
|
+
# puts "cp -r #{Dir.pwd} #{dest}" # uncomment to see and debug
|
93
|
+
FileUtils.cp_r(Dir.pwd, dest)
|
94
|
+
end
|
95
|
+
|
96
|
+
# TODO: remove duplication, copied from jets/commands/import/base.rb
|
97
|
+
# And modified it slightly
|
98
|
+
def bundle_install
|
99
|
+
Bundler.with_clean_env do
|
100
|
+
sh "cd #{build_area}/#{@project_folder}/rack && bundle install"
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
def sh(command, quiet: false)
|
105
|
+
puts "=> #{command}" unless quiet
|
106
|
+
system command
|
107
|
+
end
|
108
|
+
|
109
|
+
def clean
|
110
|
+
FileUtils.rm_rf("#{build_area}/#{@project_folder}/rack")
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
default: &default
|
2
|
+
adapter: <%= @adapter %>
|
3
|
+
encoding: utf8
|
4
|
+
pool: <%%= ENV["DB_POOL"] || 5 %>
|
5
|
+
database: <%%= ENV['DB_NAME'] || '<%= @database_development %>' %>
|
6
|
+
<% if @adapter == 'postgresql' -%>
|
7
|
+
username: <%%= ENV['DB_USER'] || ENV['USER'] %>
|
8
|
+
<% else -%>
|
9
|
+
username: <%%= ENV['DB_USER'] || 'root' %>
|
10
|
+
<% end -%>
|
11
|
+
password: <%%= ENV['DB_PASS'] %>
|
12
|
+
host: <%%= ENV["DB_HOST"] %>
|
13
|
+
url: <%%= ENV['DATABASE_URL'] %> # takes higher precedence than other settings
|
14
|
+
|
15
|
+
development:
|
16
|
+
<<: *default
|
17
|
+
database: <%%= ENV['DB_NAME'] || '<%= @database_development %>' %>
|
18
|
+
|
19
|
+
test:
|
20
|
+
<<: *default
|
21
|
+
database: <%= @database_test %>
|
22
|
+
|
23
|
+
production:
|
24
|
+
<<: *default
|
25
|
+
database: <%= @database_production %>
|
26
|
+
url: <%%= ENV['DATABASE_URL'] %>
|
data/lib/jets/version.rb
CHANGED
@@ -115,10 +115,10 @@ EOL
|
|
115
115
|
# one is scoped to Bundler and will only included gems used in the project.
|
116
116
|
# This handles the possiblity of stale gems leftover from previous builds
|
117
117
|
# in the cache.
|
118
|
-
|
118
|
+
# TODO: figure out if we need
|
119
|
+
# compiled_gems.select { |g| gemspec_compiled_gems.include?(g) }
|
119
120
|
end
|
120
121
|
end
|
121
|
-
memoize :compiled_gems
|
122
122
|
|
123
123
|
# Use pre-compiled gem because the gem could have development header shared
|
124
124
|
# object file dependencies. The shared dependencies are packaged up as part
|
@@ -126,20 +126,20 @@ EOL
|
|
126
126
|
#
|
127
127
|
# Example paths:
|
128
128
|
# Macosx:
|
129
|
-
#
|
130
|
-
#
|
129
|
+
# opt/ruby/gems/2.5.0/extensions/x86_64-darwin-16/2.5.0-static/nokogiri-1.8.1
|
130
|
+
# opt/ruby/gems/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
|
+
# opt/ruby/gems/2.5.0/extensions/x86_64-linux/2.5.0-static/nokogiri-1.8.1
|
133
133
|
# Circleci Ubuntu based Linux:
|
134
|
-
#
|
134
|
+
# opt/ruby/gems/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}/
|
136
|
+
Dir.glob("#{Jets.build_root}/stage/opt/ruby/gems/*/extensions/**/**/*.{so,bundle}")
|
137
137
|
end
|
138
138
|
|
139
|
-
# Input:
|
139
|
+
# Input: opt/ruby/gems/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 = %r{
|
142
|
+
regexp = %r{opt/ruby/gems/\d+\.\d+\.\d+/extensions/.*?/.*?/(.*?)/}
|
143
143
|
path.match(regexp)[1] # gem_name
|
144
144
|
end
|
145
145
|
|
@@ -156,6 +156,15 @@ EOL
|
|
156
156
|
# Thanks: https://gist.github.com/aelesbao/1414b169a79162b1d795 and
|
157
157
|
# https://stackoverflow.com/questions/5165950/how-do-i-get-a-list-of-gems-that-are-installed-that-have-native-extensions
|
158
158
|
def specs_with_extensions
|
159
|
+
# puts "Jets::Gems::Check#specs_with_extensions".colorize(:red)
|
160
|
+
# puts "BUNDLE_GEMFILE #{ENV['BUNDLE_GEMFILE'].inspect}"
|
161
|
+
# puts "Jets.root #{Jets.root}"
|
162
|
+
# puts "Dir.pwd #{Dir.pwd}"
|
163
|
+
# ENV['BUNDLE_GEMFILE'] = nil
|
164
|
+
# puts "BUNDLE_GEMFILE2 #{ENV['BUNDLE_GEMFILE'].inspect}"
|
165
|
+
# gemfile = IO.readlines("#{Dir.pwd}/Gemfile")
|
166
|
+
# puts gemfile
|
167
|
+
|
159
168
|
specs = Gem::Specification.each.select { |spec| spec.extensions.any? }
|
160
169
|
specs.reject! { |spec| weird_gems.include?(spec.name) }
|
161
170
|
specs
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jets
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tung Nguyen
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-12-
|
11
|
+
date: 2018-12-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: actionpack
|
@@ -772,6 +772,21 @@ files:
|
|
772
772
|
- lib/jets/stack/resource/dsl.rb
|
773
773
|
- lib/jets/tmp_loader.rb
|
774
774
|
- lib/jets/turbine.rb
|
775
|
+
- lib/jets/turbo.rb
|
776
|
+
- lib/jets/turbo/database_yaml.rb
|
777
|
+
- lib/jets/turbo/project/.gitignore
|
778
|
+
- lib/jets/turbo/project/.jetskeep
|
779
|
+
- lib/jets/turbo/project/Gemfile
|
780
|
+
- lib/jets/turbo/project/Gemfile.lock
|
781
|
+
- lib/jets/turbo/project/Rakefile
|
782
|
+
- lib/jets/turbo/project/app/controllers/application_controller.rb
|
783
|
+
- lib/jets/turbo/project/app/helpers/application_helper.rb
|
784
|
+
- lib/jets/turbo/project/app/jobs/application_job.rb
|
785
|
+
- lib/jets/turbo/project/config.ru
|
786
|
+
- lib/jets/turbo/project/config/application.rb
|
787
|
+
- lib/jets/turbo/project/config/routes.rb
|
788
|
+
- lib/jets/turbo/rail.rb
|
789
|
+
- lib/jets/turbo/templates/config/database.yml
|
775
790
|
- lib/jets/util.rb
|
776
791
|
- lib/jets/version.rb
|
777
792
|
- readme/prerelease.md
|