jets 1.3.9 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +5 -0
  3. data/Gemfile.lock +3 -3
  4. data/lib/jets.rb +1 -0
  5. data/lib/jets/booter.rb +12 -1
  6. data/lib/jets/builders/code_builder.rb +39 -35
  7. data/lib/jets/builders/code_size.rb +4 -2
  8. data/lib/jets/builders/gem_replacer.rb +7 -20
  9. data/lib/jets/builders/lambda_layer.rb +55 -37
  10. data/lib/jets/builders/rack_packager.rb +6 -4
  11. data/lib/jets/builders/ruby_packager.rb +8 -27
  12. data/lib/jets/builders/shim_vars/base.rb +0 -4
  13. data/lib/jets/builders/util.rb +6 -7
  14. data/lib/jets/commands/deploy.rb +1 -2
  15. data/lib/jets/commands/import/rail.rb +1 -34
  16. data/lib/jets/core.rb +3 -2
  17. data/lib/jets/turbo.rb +47 -0
  18. data/lib/jets/turbo/database_yaml.rb +41 -0
  19. data/lib/jets/turbo/project/.gitignore +12 -0
  20. data/lib/jets/turbo/project/.jetskeep +1 -0
  21. data/lib/jets/turbo/project/Gemfile +16 -0
  22. data/lib/jets/turbo/project/Gemfile.lock +184 -0
  23. data/lib/jets/turbo/project/Rakefile +2 -0
  24. data/lib/jets/turbo/project/app/controllers/application_controller.rb +2 -0
  25. data/lib/jets/turbo/project/app/helpers/application_helper.rb +2 -0
  26. data/lib/jets/turbo/project/app/jobs/application_job.rb +4 -0
  27. data/lib/jets/turbo/project/config.ru +5 -0
  28. data/lib/jets/turbo/project/config/application.rb +4 -0
  29. data/lib/jets/turbo/project/config/routes.rb +4 -0
  30. data/lib/jets/turbo/rail.rb +113 -0
  31. data/lib/jets/turbo/templates/config/database.yml +26 -0
  32. data/lib/jets/version.rb +1 -1
  33. data/vendor/jets-gems/lib/jets/gems/check.rb +18 -9
  34. data/vendor/jets-gems/lib/jets/gems/extract/gem.rb +1 -1
  35. metadata +17 -2
@@ -0,0 +1,2 @@
1
+ require 'jets'
2
+ Jets.load_tasks
@@ -0,0 +1,2 @@
1
+ class ApplicationController < Jets::Controller::Base
2
+ end
@@ -0,0 +1,2 @@
1
+ module ApplicationHelper
2
+ end
@@ -0,0 +1,4 @@
1
+ class ApplicationJob < Jets::Job::Base
2
+ # Adjust to increase the default timeout for all Job classes
3
+ class_timeout 60
4
+ end
@@ -0,0 +1,5 @@
1
+ # This file is used by Rack-based servers to start the application.
2
+
3
+ require "jets"
4
+ Jets.boot
5
+ run Jets.application
@@ -0,0 +1,4 @@
1
+ Jets.application.configure do
2
+ config.project_name = "project"
3
+ config.mode = "api"
4
+ end
@@ -0,0 +1,4 @@
1
+ Jets.application.routes.draw do
2
+ root "jets/rack#process"
3
+ any "*catchall", to: "jets/rack#process"
4
+ end
@@ -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'] %>
@@ -1,3 +1,3 @@
1
1
  module Jets
2
- VERSION = "1.3.9"
2
+ VERSION = "1.4.0"
3
3
  end
@@ -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
- compiled_gems.select { |g| gemspec_compiled_gems.include?(g) }
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
- # vendor/gems/ruby/2.5.0/extensions/x86_64-darwin-16/2.5.0-static/nokogiri-1.8.1
130
- # vendor/gems/ruby/2.5.0/extensions/x86_64-darwin-16/2.5.0-static/byebug-9.1.0
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
- # vendor/gems/ruby/2.5.0/extensions/x86_64-linux/2.5.0-static/nokogiri-1.8.1
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
- # vendor/gems/ruby/2.5.0/extensions/x86_64-linux/2.5.0/pg-0.21.0
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}/cache/vendor/gems/ruby/*/extensions/**/**/*.{so,bundle}")
136
+ Dir.glob("#{Jets.build_root}/stage/opt/ruby/gems/*/extensions/**/**/*.{so,bundle}")
137
137
  end
138
138
 
139
- # Input: vendor/gems/ruby/2.5.0/extensions/x86_64-darwin-16/2.5.0-static/byebug-9.1.0
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{vendor/gems/ruby/\d+\.\d+\.\d+/extensions/.*?/.*?/(.*?)/}
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
@@ -21,7 +21,7 @@ module Jets::Gems::Extract
21
21
  end
22
22
 
23
23
  def unzip_file(zipfile_path)
24
- dest = "#{Jets.build_root}/stage/code/opt"
24
+ dest = "#{Jets.build_root}/stage/opt"
25
25
  say "Unpacking into #{dest}"
26
26
  FileUtils.mkdir_p(dest)
27
27
  unzip(zipfile_path, dest)
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.3.9
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-19 00:00:00.000000000 Z
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