jets 1.3.9 → 1.4.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 +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
|