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.
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