jets 1.2.1 → 1.3.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 +8 -0
 - data/Gemfile.lock +4 -4
 - data/README.md +2 -2
 - data/lib/jets.rb +3 -4
 - data/lib/jets/application.rb +13 -2
 - data/lib/jets/builders.rb +3 -0
 - data/lib/jets/builders/code_builder.rb +22 -89
 - data/lib/jets/builders/code_size.rb +55 -0
 - data/lib/jets/builders/gem_replacer.rb +22 -1
 - data/lib/jets/builders/handler_generator.rb +31 -5
 - data/lib/jets/builders/lambda_layer.rb +50 -0
 - data/lib/jets/builders/md5.rb +10 -5
 - data/lib/jets/builders/md5_zip.rb +1 -0
 - data/lib/jets/builders/purger.rb +35 -0
 - data/lib/jets/builders/rack_packager.rb +25 -5
 - data/lib/jets/builders/rackup_wrappers/rackup +1 -5
 - data/lib/jets/builders/ruby_packager.rb +25 -27
 - data/lib/jets/builders/shim_vars/app.rb +3 -3
 - data/lib/jets/builders/shim_vars/base.rb +9 -4
 - data/lib/jets/builders/shim_vars/shared.rb +2 -2
 - data/lib/jets/builders/templates/handler.rb +7 -0
 - data/lib/jets/builders/tidy.rb +4 -3
 - data/lib/jets/builders/util.rb +11 -3
 - data/lib/jets/cfn/builders/base_child_builder.rb +6 -3
 - data/lib/jets/cfn/builders/interface.rb +1 -1
 - data/lib/jets/cfn/builders/parent_builder.rb +5 -0
 - data/lib/jets/commands/build.rb +4 -2
 - data/lib/jets/commands/help/gems/check.md +1 -1
 - data/lib/jets/commands/main.rb +1 -1
 - data/lib/jets/commands/new.rb +4 -2
 - data/lib/jets/commands/sequence.rb +1 -1
 - data/lib/jets/commands/templates/skeleton/Gemfile.tt +2 -2
 - data/lib/jets/commands/templates/skeleton/config/application.rb.tt +0 -5
 - data/lib/jets/commands/templates/skeleton/config/database.yml.tt +2 -2
 - data/lib/jets/commands/templates/skeleton/config/environments/development.rb +2 -1
 - data/lib/jets/commands/templates/skeleton/config/environments/production.rb +2 -3
 - data/lib/jets/commands/upgrade/v1.rb +21 -0
 - data/lib/jets/controller/renderers/template_renderer.rb +1 -1
 - data/lib/jets/controller/rendering.rb +1 -4
 - data/lib/jets/core.rb +45 -6
 - data/lib/jets/internal/app/jobs/jets/preheat_job.rb +32 -34
 - data/lib/jets/mega/request.rb +11 -0
 - data/lib/jets/overrides/lambda.rb +1 -0
 - data/lib/jets/overrides/lambda/marshaller.rb +31 -0
 - data/lib/jets/overrides/rails.rb +4 -0
 - data/lib/jets/{rails_overrides → overrides/rails}/asset_tag_helper.rb +0 -0
 - data/lib/jets/{rails_overrides → overrides/rails}/common_methods.rb +0 -0
 - data/lib/jets/{rails_overrides → overrides/rails}/rendering_helper.rb +0 -0
 - data/lib/jets/{rails_overrides → overrides/rails}/url_helper.rb +0 -0
 - data/lib/jets/poly_fun/base_executor.rb +1 -1
 - data/lib/jets/preheat.rb +1 -0
 - data/lib/jets/processors/main_processor.rb +3 -10
 - data/lib/jets/{server.rb → rack_server.rb} +31 -2
 - data/lib/jets/resource.rb +1 -1
 - data/lib/jets/resource/api_gateway/base_path/function.rb +1 -1
 - data/lib/jets/resource/child_stack/app_class.rb +10 -4
 - data/lib/jets/resource/lambda.rb +5 -0
 - data/lib/jets/resource/{function.rb → lambda/function.rb} +8 -6
 - data/lib/jets/resource/{function → lambda/function}/environment.rb +1 -1
 - data/lib/jets/resource/lambda/gem_layer.rb +17 -0
 - data/lib/jets/resource/lambda/layer_version.rb +46 -0
 - data/lib/jets/tmp_loader.rb +52 -0
 - data/lib/jets/version.rb +1 -1
 - data/{README → readme}/prerelease.md +0 -0
 - data/{README → readme}/testing.md +5 -0
 - data/vendor/jets-gems/lib/jets/gems.rb +1 -1
 - data/vendor/jets-gems/lib/jets/gems/check.rb +7 -7
 - data/vendor/jets-gems/lib/jets/gems/exist.rb +5 -5
 - data/vendor/jets-gems/lib/jets/gems/extract/base.rb +4 -11
 - data/vendor/jets-gems/lib/jets/gems/extract/gem.rb +15 -8
 - data/vendor/jets-gems/lib/jets/gems/extract/ruby.rb +19 -10
 - metadata +22 -15
 - data/lib/jets/builders/templates/handler.js +0 -9
 - data/lib/jets/builders/templates/shim.js +0 -275
 - data/lib/jets/rails_overrides.rb +0 -4
 - data/lib/jets/ruby_server.rb +0 -148
 
| 
         @@ -1,10 +1,10 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module Jets
         
     | 
| 
       2 
     | 
    
         
            -
              class  
     | 
| 
      
 2 
     | 
    
         
            +
              class RackServer
         
     | 
| 
       3 
3 
     | 
    
         
             
                def self.start(options={})
         
     | 
| 
       4 
4 
     | 
    
         
             
                  new(options).start
         
     | 
| 
       5 
5 
     | 
    
         
             
                end
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
     | 
    
         
            -
                def initialize(options)
         
     | 
| 
      
 7 
     | 
    
         
            +
                def initialize(options={})
         
     | 
| 
       8 
8 
     | 
    
         
             
                  @options = options
         
     | 
| 
       9 
9 
     | 
    
         
             
                end
         
     | 
| 
       10 
10 
     | 
    
         | 
| 
         @@ -44,6 +44,35 @@ module Jets 
     | 
|
| 
       44 
44 
     | 
    
         
             
                  end
         
     | 
| 
       45 
45 
     | 
    
         
             
                end
         
     | 
| 
       46 
46 
     | 
    
         | 
| 
      
 47 
     | 
    
         
            +
                # blocks until rack server is up
         
     | 
| 
      
 48 
     | 
    
         
            +
                def wait_for_socket
         
     | 
| 
      
 49 
     | 
    
         
            +
                  return unless Jets.rack?
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
                  retries = 0
         
     | 
| 
      
 52 
     | 
    
         
            +
                  max_retries = 30 # 15 seconds at a delay of 0.5s
         
     | 
| 
      
 53 
     | 
    
         
            +
                  delay = 0.5
         
     | 
| 
      
 54 
     | 
    
         
            +
                  if ENV['C9_USER'] # overrides for local testing
         
     | 
| 
      
 55 
     | 
    
         
            +
                    max_retries = 3
         
     | 
| 
      
 56 
     | 
    
         
            +
                    delay = 3
         
     | 
| 
      
 57 
     | 
    
         
            +
                  end
         
     | 
| 
      
 58 
     | 
    
         
            +
                  begin
         
     | 
| 
      
 59 
     | 
    
         
            +
                    server = TCPSocket.new('localhost', 9292)
         
     | 
| 
      
 60 
     | 
    
         
            +
                    server.close
         
     | 
| 
      
 61 
     | 
    
         
            +
                  rescue Errno::ECONNREFUSED
         
     | 
| 
      
 62 
     | 
    
         
            +
                    puts "Unable to connect to localhost:9292. Delay for #{delay} and will try to connect again."  if ENV['JETS_DEBUG']
         
     | 
| 
      
 63 
     | 
    
         
            +
                    sleep(delay)
         
     | 
| 
      
 64 
     | 
    
         
            +
                    retries += 1
         
     | 
| 
      
 65 
     | 
    
         
            +
                    if retries < max_retries
         
     | 
| 
      
 66 
     | 
    
         
            +
                      retry
         
     | 
| 
      
 67 
     | 
    
         
            +
                    else
         
     | 
| 
      
 68 
     | 
    
         
            +
                      puts "Giving up on trying to connect to localhost:9292"
         
     | 
| 
      
 69 
     | 
    
         
            +
                      return false
         
     | 
| 
      
 70 
     | 
    
         
            +
                    end
         
     | 
| 
      
 71 
     | 
    
         
            +
                  end
         
     | 
| 
      
 72 
     | 
    
         
            +
                  puts "Connected to localhost:9292 successfully"
         
     | 
| 
      
 73 
     | 
    
         
            +
                  true
         
     | 
| 
      
 74 
     | 
    
         
            +
                end
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
       47 
76 
     | 
    
         
             
                def rack_project
         
     | 
| 
       48 
77 
     | 
    
         
             
                  "#{Jets.root}rack"
         
     | 
| 
       49 
78 
     | 
    
         
             
                end
         
     | 
    
        data/lib/jets/resource.rb
    CHANGED
    
    | 
         @@ -7,8 +7,8 @@ class Jets::Resource 
     | 
|
| 
       7 
7 
     | 
    
         
             
              autoload :ChildStack, 'jets/resource/child_stack'
         
     | 
| 
       8 
8 
     | 
    
         
             
              autoload :Config, 'jets/resource/config'
         
     | 
| 
       9 
9 
     | 
    
         
             
              autoload :Events, 'jets/resource/events'
         
     | 
| 
       10 
     | 
    
         
            -
              autoload :Function, 'jets/resource/function'
         
     | 
| 
       11 
10 
     | 
    
         
             
              autoload :Iam, 'jets/resource/iam'
         
     | 
| 
      
 11 
     | 
    
         
            +
              autoload :Lambda, 'jets/resource/lambda'
         
     | 
| 
       12 
12 
     | 
    
         
             
              autoload :Permission, 'jets/resource/permission'
         
     | 
| 
       13 
13 
     | 
    
         
             
              autoload :Replacer, 'jets/resource/replacer'
         
     | 
| 
       14 
14 
     | 
    
         
             
              autoload :Route53, 'jets/resource/route53'
         
     | 
| 
         @@ -50,15 +50,21 @@ module Jets::Resource::ChildStack 
     | 
|
| 
       50 
50 
     | 
    
         
             
                end
         
     | 
| 
       51 
51 
     | 
    
         | 
| 
       52 
52 
     | 
    
         
             
                def parameters
         
     | 
| 
       53 
     | 
    
         
            -
                  common =  
     | 
| 
       54 
     | 
    
         
            -
                    IamRole: "!GetAtt IamRole.Arn",
         
     | 
| 
       55 
     | 
    
         
            -
                    S3Bucket: "!Ref S3Bucket",
         
     | 
| 
       56 
     | 
    
         
            -
                  }
         
     | 
| 
      
 53 
     | 
    
         
            +
                  common = self.class.common_parameters
         
     | 
| 
       57 
54 
     | 
    
         
             
                  common.merge!(controller_params) if controller?
         
     | 
| 
       58 
55 
     | 
    
         
             
                  common.merge!(depends_on_params) if depends_on
         
     | 
| 
       59 
56 
     | 
    
         
             
                  common
         
     | 
| 
       60 
57 
     | 
    
         
             
                end
         
     | 
| 
       61 
58 
     | 
    
         | 
| 
      
 59 
     | 
    
         
            +
                def self.common_parameters
         
     | 
| 
      
 60 
     | 
    
         
            +
                  parameters = {
         
     | 
| 
      
 61 
     | 
    
         
            +
                    IamRole: "!GetAtt IamRole.Arn",
         
     | 
| 
      
 62 
     | 
    
         
            +
                    S3Bucket: "!Ref S3Bucket",
         
     | 
| 
      
 63 
     | 
    
         
            +
                  }
         
     | 
| 
      
 64 
     | 
    
         
            +
                  parameters[:GemLayer] = "!Ref GemLayer" unless Jets.poly_only?
         
     | 
| 
      
 65 
     | 
    
         
            +
                  parameters
         
     | 
| 
      
 66 
     | 
    
         
            +
                end
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
       62 
68 
     | 
    
         
             
                def controller_params
         
     | 
| 
       63 
69 
     | 
    
         
             
                  return {} if Jets::Router.routes.empty?
         
     | 
| 
       64 
70 
     | 
    
         | 
| 
         @@ -1,6 +1,6 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
             
     | 
| 
      
 1 
     | 
    
         
            +
            module Jets::Resource::Lambda
         
     | 
| 
       2 
2 
     | 
    
         
             
              class Function < Jets::Resource::Base
         
     | 
| 
       3 
     | 
    
         
            -
                autoload :Environment, 'jets/resource/function/environment'
         
     | 
| 
      
 3 
     | 
    
         
            +
                autoload :Environment, 'jets/resource/lambda/function/environment'
         
     | 
| 
       4 
4 
     | 
    
         
             
                include Environment
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
       6 
6 
     | 
    
         
             
                def initialize(task)
         
     | 
| 
         @@ -120,15 +120,17 @@ class Jets::Resource 
     | 
|
| 
       120 
120 
     | 
    
         
             
                  properties
         
     | 
| 
       121 
121 
     | 
    
         
             
                end
         
     | 
| 
       122 
122 
     | 
    
         | 
| 
       123 
     | 
    
         
            -
                # Properties managed by Jets with  
     | 
| 
      
 123 
     | 
    
         
            +
                # Properties managed by Jets with merged with finality.
         
     | 
| 
       124 
124 
     | 
    
         
             
                def finalize_properties!(props)
         
     | 
| 
       125 
125 
     | 
    
         
             
                  handler = full_handler(props)
         
     | 
| 
       126 
126 
     | 
    
         
             
                  runtime = get_runtime(props)
         
     | 
| 
       127 
     | 
    
         
            -
                   
     | 
| 
      
 127 
     | 
    
         
            +
                  managed = {
         
     | 
| 
       128 
128 
     | 
    
         
             
                    function_name: function_name,
         
     | 
| 
       129 
129 
     | 
    
         
             
                    handler: handler,
         
     | 
| 
       130 
130 
     | 
    
         
             
                    runtime: runtime,
         
     | 
| 
       131 
     | 
    
         
            -
                   
     | 
| 
      
 131 
     | 
    
         
            +
                  }
         
     | 
| 
      
 132 
     | 
    
         
            +
                  managed[:layers] = ["!Ref GemLayer"] if runtime =~ /^ruby/
         
     | 
| 
      
 133 
     | 
    
         
            +
                  props.merge!(managed)
         
     | 
| 
       132 
134 
     | 
    
         
             
                end
         
     | 
| 
       133 
135 
     | 
    
         | 
| 
       134 
136 
     | 
    
         
             
                def get_runtime(props)
         
     | 
| 
         @@ -139,7 +141,7 @@ class Jets::Resource 
     | 
|
| 
       139 
141 
     | 
    
         
             
                  map = {
         
     | 
| 
       140 
142 
     | 
    
         
             
                    node: "nodejs8.10",
         
     | 
| 
       141 
143 
     | 
    
         
             
                    python: "python3.6",
         
     | 
| 
       142 
     | 
    
         
            -
                    ruby: " 
     | 
| 
      
 144 
     | 
    
         
            +
                    ruby: "ruby2.5",
         
     | 
| 
       143 
145 
     | 
    
         
             
                  }
         
     | 
| 
       144 
146 
     | 
    
         
             
                  map[@task.lang]
         
     | 
| 
       145 
147 
     | 
    
         
             
                end
         
     | 
| 
         @@ -0,0 +1,17 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Jets::Resource::Lambda
         
     | 
| 
      
 2 
     | 
    
         
            +
              class GemLayer < LayerVersion
         
     | 
| 
      
 3 
     | 
    
         
            +
                def description
         
     | 
| 
      
 4 
     | 
    
         
            +
                  "Jets Ruby Gems"
         
     | 
| 
      
 5 
     | 
    
         
            +
                end
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                def layer_name
         
     | 
| 
      
 8 
     | 
    
         
            +
                  # Do not include the Jets.extra_env to group the layers in same app together
         
     | 
| 
      
 9 
     | 
    
         
            +
                  "#{Jets.config.short_env}-#{Jets.config.project_name}-gems"
         
     | 
| 
      
 10 
     | 
    
         
            +
                end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                def code_s3_key
         
     | 
| 
      
 13 
     | 
    
         
            +
                  checksum = Jets::Builders::Md5.checksums["stage/opt"]
         
     | 
| 
      
 14 
     | 
    
         
            +
                  "jets/code/opt-#{checksum}.zip" # s3_key
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,46 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Type: "AWS::Lambda::LayerVersion"
         
     | 
| 
      
 2 
     | 
    
         
            +
            # Properties:
         
     | 
| 
      
 3 
     | 
    
         
            +
            #   CompatibleRuntimes:
         
     | 
| 
      
 4 
     | 
    
         
            +
            #     - String
         
     | 
| 
      
 5 
     | 
    
         
            +
            #     - ...
         
     | 
| 
      
 6 
     | 
    
         
            +
            #   Content:
         
     | 
| 
      
 7 
     | 
    
         
            +
            #     Content
         
     | 
| 
      
 8 
     | 
    
         
            +
            #   Description: String
         
     | 
| 
      
 9 
     | 
    
         
            +
            #   LayerName: String
         
     | 
| 
      
 10 
     | 
    
         
            +
            #   LicenseInfo: String
         
     | 
| 
      
 11 
     | 
    
         
            +
            module Jets::Resource::Lambda
         
     | 
| 
      
 12 
     | 
    
         
            +
              class LayerVersion < Jets::Resource::Base
         
     | 
| 
      
 13 
     | 
    
         
            +
                def definition
         
     | 
| 
      
 14 
     | 
    
         
            +
                  {
         
     | 
| 
      
 15 
     | 
    
         
            +
                    layer_version_logical_id => {
         
     | 
| 
      
 16 
     | 
    
         
            +
                      type: "AWS::Lambda::LayerVersion",
         
     | 
| 
      
 17 
     | 
    
         
            +
                      properties: {
         
     | 
| 
      
 18 
     | 
    
         
            +
                        # compatible_runtimes: ["ruby2.5"],
         
     | 
| 
      
 19 
     | 
    
         
            +
                        content: {
         
     | 
| 
      
 20 
     | 
    
         
            +
                          s3_bucket: s3_bucket,
         
     | 
| 
      
 21 
     | 
    
         
            +
                          s3_key: code_s3_key,
         
     | 
| 
      
 22 
     | 
    
         
            +
                          # s3_object_version: string,
         
     | 
| 
      
 23 
     | 
    
         
            +
                        },
         
     | 
| 
      
 24 
     | 
    
         
            +
                        description: description,
         
     | 
| 
      
 25 
     | 
    
         
            +
                        layer_name: layer_name,
         
     | 
| 
      
 26 
     | 
    
         
            +
                        license_info: "MIT",
         
     | 
| 
      
 27 
     | 
    
         
            +
                      }
         
     | 
| 
      
 28 
     | 
    
         
            +
                    }
         
     | 
| 
      
 29 
     | 
    
         
            +
                  }
         
     | 
| 
      
 30 
     | 
    
         
            +
                end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                def s3_bucket
         
     | 
| 
      
 33 
     | 
    
         
            +
                  "!Ref S3Bucket"
         
     | 
| 
      
 34 
     | 
    
         
            +
                end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                def layer_version_logical_id
         
     | 
| 
      
 37 
     | 
    
         
            +
                  self.class.name.split('::').last
         
     | 
| 
      
 38 
     | 
    
         
            +
                end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                def outputs
         
     | 
| 
      
 41 
     | 
    
         
            +
                  {
         
     | 
| 
      
 42 
     | 
    
         
            +
                    logical_id => "!Ref #{logical_id}",
         
     | 
| 
      
 43 
     | 
    
         
            +
                  }
         
     | 
| 
      
 44 
     | 
    
         
            +
                end
         
     | 
| 
      
 45 
     | 
    
         
            +
              end
         
     | 
| 
      
 46 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,52 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Jets
         
     | 
| 
      
 2 
     | 
    
         
            +
              class TmpLoader
         
     | 
| 
      
 3 
     | 
    
         
            +
                include AwsServices
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
                def self.load!
         
     | 
| 
      
 6 
     | 
    
         
            +
                  new.load
         
     | 
| 
      
 7 
     | 
    
         
            +
                end
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                def initialize(yaml_path=nil)
         
     | 
| 
      
 10 
     | 
    
         
            +
                  yaml_path ||= "#{Jets.root}handlers/data.yml"
         
     | 
| 
      
 11 
     | 
    
         
            +
                  @data = YAML.load_file(yaml_path)
         
     | 
| 
      
 12 
     | 
    
         
            +
                  @s3_bucket = @data['s3_bucket']
         
     | 
| 
      
 13 
     | 
    
         
            +
                  @rack_zip = @data['rack_zip']
         
     | 
| 
      
 14 
     | 
    
         
            +
                end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                def load
         
     | 
| 
      
 17 
     | 
    
         
            +
                  rack
         
     | 
| 
      
 18 
     | 
    
         
            +
                end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                def rack
         
     | 
| 
      
 21 
     | 
    
         
            +
                  return unless @rack_zip
         
     | 
| 
      
 22 
     | 
    
         
            +
                  download_and_extract(@rack_zip, '/tmp/rack')
         
     | 
| 
      
 23 
     | 
    
         
            +
                end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                def download_and_extract(zip_file, folder_dest)
         
     | 
| 
      
 26 
     | 
    
         
            +
                  s3_key = "jets/code/#{zip_file}" # jets/code/rack-checksum.zip
         
     | 
| 
      
 27 
     | 
    
         
            +
                  download_path = "/tmp/#{zip_file}" # /tmp/rack-checksum.zip
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                  download(s3_key, download_path)
         
     | 
| 
      
 30 
     | 
    
         
            +
                  unzip(download_path, folder_dest)
         
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                def download(key, dest)
         
     | 
| 
      
 34 
     | 
    
         
            +
                  # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/Client.html#get_object-instance_method
         
     | 
| 
      
 35 
     | 
    
         
            +
                  # stream object directly to disk
         
     | 
| 
      
 36 
     | 
    
         
            +
                  s3.get_object(response_target: dest,
         
     | 
| 
      
 37 
     | 
    
         
            +
                                bucket: @s3_bucket,
         
     | 
| 
      
 38 
     | 
    
         
            +
                                key: key)
         
     | 
| 
      
 39 
     | 
    
         
            +
                end
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                def unzip(zipfile, folder_dest)
         
     | 
| 
      
 42 
     | 
    
         
            +
                  sh "unzip -qo #{zipfile} -d #{folder_dest}"
         
     | 
| 
      
 43 
     | 
    
         
            +
                end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                def sh(command)
         
     | 
| 
      
 46 
     | 
    
         
            +
                  puts "=> #{command}"
         
     | 
| 
      
 47 
     | 
    
         
            +
                  success = system(command)
         
     | 
| 
      
 48 
     | 
    
         
            +
                  raise "Command #{command} failed" unless success
         
     | 
| 
      
 49 
     | 
    
         
            +
                  success
         
     | 
| 
      
 50 
     | 
    
         
            +
                end
         
     | 
| 
      
 51 
     | 
    
         
            +
              end
         
     | 
| 
      
 52 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/jets/version.rb
    CHANGED
    
    
| 
         
            File without changes
         
     | 
| 
         @@ -45,6 +45,11 @@ Run the remote integration script: 
     | 
|
| 
       45 
45 
     | 
    
         
             
                eval "export $(cat demo/.env.development.remote)" # for DATABASE_URL for mega mode
         
     | 
| 
       46 
46 
     | 
    
         
             
                BASE_URL=xxx spec/integration/remote.sh
         
     | 
| 
       47 
47 
     | 
    
         | 
| 
      
 48 
     | 
    
         
            +
            Manually seed Rails data. Will add this to the remote.sh in the future.
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                cd demo/rack
         
     | 
| 
      
 51 
     | 
    
         
            +
                rails runner 'Book.create(id: 1) unless Book.find_by(id: 1)'
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
       48 
53 
     | 
    
         
             
            Example:
         
     | 
| 
       49 
54 
     | 
    
         | 
| 
       50 
55 
     | 
    
         
             
                eval "export $(cat demo/.env.development.remote)" # for DATABASE_URL for mega mode
         
     | 
| 
         @@ -126,20 +126,20 @@ EOL 
     | 
|
| 
       126 
126 
     | 
    
         
             
                #
         
     | 
| 
       127 
127 
     | 
    
         
             
                # Example paths:
         
     | 
| 
       128 
128 
     | 
    
         
             
                # Macosx:
         
     | 
| 
       129 
     | 
    
         
            -
                #    
     | 
| 
       130 
     | 
    
         
            -
                #    
     | 
| 
      
 129 
     | 
    
         
            +
                #   vendor/bundle/ruby/2.5.0/extensions/x86_64-darwin-16/2.5.0-static/nokogiri-1.8.1
         
     | 
| 
      
 130 
     | 
    
         
            +
                #   vendor/bundle/ruby/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 
     | 
    
         
            +
                #   vendor/bundle/ruby/2.5.0/extensions/x86_64-linux/2.5.0-static/nokogiri-1.8.1
         
     | 
| 
       133 
133 
     | 
    
         
             
                # Circleci Ubuntu based Linux:
         
     | 
| 
       134 
     | 
    
         
            -
                #    
     | 
| 
      
 134 
     | 
    
         
            +
                #   vendor/bundle/ruby/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/ 
     | 
| 
      
 136 
     | 
    
         
            +
                  Dir.glob("#{Jets.build_root}/cache/vendor/bundle/ruby/*/extensions/**/**/*.{so,bundle}")
         
     | 
| 
       137 
137 
     | 
    
         
             
                end
         
     | 
| 
       138 
138 
     | 
    
         | 
| 
       139 
     | 
    
         
            -
                # Input:  
     | 
| 
      
 139 
     | 
    
         
            +
                # Input: vendor/bundle/ruby/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 = / 
     | 
| 
      
 142 
     | 
    
         
            +
                  regexp = /vendor\/bundle\/ruby\/\d+\.\d+\.\d+\/extensions\/.*?\/.*?\/(.*?)\//
         
     | 
| 
       143 
143 
     | 
    
         
             
                  gem_name = path.match(regexp)[1]
         
     | 
| 
       144 
144 
     | 
    
         
             
                end
         
     | 
| 
       145 
145 
     | 
    
         | 
| 
         @@ -25,7 +25,7 @@ module Jets::Gems 
     | 
|
| 
       25 
25 
     | 
    
         
             
                end
         
     | 
| 
       26 
26 
     | 
    
         | 
| 
       27 
27 
     | 
    
         
             
                # Example url:
         
     | 
| 
       28 
     | 
    
         
            -
                #   https:// 
     | 
| 
      
 28 
     | 
    
         
            +
                #   https://gems2.lambdagems.com/gems/2.5.0/byebug/byebug-9.1.0.zip
         
     | 
| 
       29 
29 
     | 
    
         
             
                def url_exists?(url)
         
     | 
| 
       30 
30 
     | 
    
         
             
                  url = URI.parse(url)
         
     | 
| 
       31 
31 
     | 
    
         
             
                  req = Net::HTTP.new(url.host, url.port).tap do |http|
         
     | 
| 
         @@ -43,14 +43,14 @@ module Jets::Gems 
     | 
|
| 
       43 
43 
     | 
    
         | 
| 
       44 
44 
     | 
    
         
             
                # gem_name: byebug-9.1.0
         
     | 
| 
       45 
45 
     | 
    
         
             
                # Example url:
         
     | 
| 
       46 
     | 
    
         
            -
                #   https:// 
     | 
| 
      
 46 
     | 
    
         
            +
                #   https://gems2.lambdagems.com/gems/2.5.0/byebug/byebug-9.1.0.zip
         
     | 
| 
       47 
47 
     | 
    
         
             
                def gem_url(gem_name)
         
     | 
| 
       48 
48 
     | 
    
         
             
                  folder = gem_name.gsub(/-(\d+\.\d+\.\d+.*)/,'') # folder: byebug
         
     | 
| 
       49 
     | 
    
         
            -
                  "#{source_url}/gems/#{Jets::Gems. 
     | 
| 
      
 49 
     | 
    
         
            +
                  "#{source_url}/gems/#{Jets::Gems.ruby_folder}/#{folder}/#{gem_name}.zip"
         
     | 
| 
       50 
50 
     | 
    
         
             
                end
         
     | 
| 
       51 
51 
     | 
    
         | 
| 
       52 
     | 
    
         
            -
                def  
     | 
| 
       53 
     | 
    
         
            -
                  Jets::Gems. 
     | 
| 
      
 52 
     | 
    
         
            +
                def ruby_folder
         
     | 
| 
      
 53 
     | 
    
         
            +
                  Jets::Gems.ruby_folder
         
     | 
| 
       54 
54 
     | 
    
         
             
                end
         
     | 
| 
       55 
55 
     | 
    
         
             
              end
         
     | 
| 
       56 
56 
     | 
    
         
             
            end
         
     | 
| 
         @@ -9,8 +9,8 @@ module Jets::Gems::Extract 
     | 
|
| 
       9 
9 
     | 
    
         
             
                  @name = name
         
     | 
| 
       10 
10 
     | 
    
         
             
                  @options = options
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
       12 
     | 
    
         
            -
                  @downloads_root = options[:downloads_root] || "/tmp/jets/lambdagems"
         
     | 
| 
       13 
     | 
    
         
            -
                  @source_url = options[:source_url] ||  
     | 
| 
      
 12 
     | 
    
         
            +
                  @downloads_root = options[:downloads_root] || "/tmp/jets/#{Jets.config.project_name}/lambdagems"
         
     | 
| 
      
 13 
     | 
    
         
            +
                  @source_url = options[:source_url] || Jets.default_gems_source
         
     | 
| 
       14 
14 
     | 
    
         
             
                end
         
     | 
| 
       15 
15 
     | 
    
         | 
| 
       16 
16 
     | 
    
         
             
                def clean_downloads(folder)
         
     | 
| 
         @@ -19,15 +19,8 @@ module Jets::Gems::Extract 
     | 
|
| 
       19 
19 
     | 
    
         
             
                  FileUtils.rm_rf(path)
         
     | 
| 
       20 
20 
     | 
    
         
             
                end
         
     | 
| 
       21 
21 
     | 
    
         | 
| 
       22 
     | 
    
         
            -
                def  
     | 
| 
       23 
     | 
    
         
            -
                   
     | 
| 
       24 
     | 
    
         
            -
                  say "Unpacking into #{dest}"
         
     | 
| 
       25 
     | 
    
         
            -
                  FileUtils.mkdir_p(dest)
         
     | 
| 
       26 
     | 
    
         
            -
                  untar(tarball_path, dest)
         
     | 
| 
       27 
     | 
    
         
            -
                end
         
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
                def untar(tarball_path, parent_folder_dest)
         
     | 
| 
       30 
     | 
    
         
            -
                  sh("tar -xzf #{tarball_path} -C #{parent_folder_dest}")
         
     | 
| 
      
 22 
     | 
    
         
            +
                def unzip(zipfile_path, parent_folder_dest)
         
     | 
| 
      
 23 
     | 
    
         
            +
                  sh("cd #{parent_folder_dest} && unzip -qo #{zipfile_path}")
         
     | 
| 
       31 
24 
     | 
    
         
             
                end
         
     | 
| 
       32 
25 
     | 
    
         | 
| 
       33 
26 
     | 
    
         
             
                def sh(command)
         
     | 
| 
         @@ -14,12 +14,19 @@ module Jets::Gems::Extract 
     | 
|
| 
       14 
14 
     | 
    
         
             
                def run
         
     | 
| 
       15 
15 
     | 
    
         
             
                  say "Looking for #{full_gem_name} gem in: #{@options[:source_url]}"
         
     | 
| 
       16 
16 
     | 
    
         
             
                  clean_downloads(:gems) if @options[:clean]
         
     | 
| 
       17 
     | 
    
         
            -
                   
     | 
| 
      
 17 
     | 
    
         
            +
                  zipfile_path = download_gem
         
     | 
| 
       18 
18 
     | 
    
         
             
                  remove_current_gem
         
     | 
| 
       19 
     | 
    
         
            -
                   
     | 
| 
      
 19 
     | 
    
         
            +
                  unzip_file(zipfile_path)
         
     | 
| 
       20 
20 
     | 
    
         
             
                  say("Gem #{full_gem_name} unpacked at #{project_root}", :debug)
         
     | 
| 
       21 
21 
     | 
    
         
             
                end
         
     | 
| 
       22 
22 
     | 
    
         | 
| 
      
 23 
     | 
    
         
            +
                def unzip_file(zipfile_path)
         
     | 
| 
      
 24 
     | 
    
         
            +
                  dest = "#{Jets.build_root}/stage/code/opt"
         
     | 
| 
      
 25 
     | 
    
         
            +
                  say "Unpacking into #{dest}"
         
     | 
| 
      
 26 
     | 
    
         
            +
                  FileUtils.mkdir_p(dest)
         
     | 
| 
      
 27 
     | 
    
         
            +
                  unzip(zipfile_path, dest)
         
     | 
| 
      
 28 
     | 
    
         
            +
                end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
       23 
30 
     | 
    
         
             
                # ensure that we always have the full gem name
         
     | 
| 
       24 
31 
     | 
    
         
             
                def full_gem_name
         
     | 
| 
       25 
32 
     | 
    
         
             
                  return @full_gem_name if @full_gem_name
         
     | 
| 
         @@ -45,7 +52,7 @@ module Jets::Gems::Extract 
     | 
|
| 
       45 
52 
     | 
    
         
             
                # The folder contains the re-produced directory structure. Example with
         
     | 
| 
       46 
53 
     | 
    
         
             
                # the gem: byebug-9.1.0
         
     | 
| 
       47 
54 
     | 
    
         
             
                #
         
     | 
| 
       48 
     | 
    
         
            -
                #    
     | 
| 
      
 55 
     | 
    
         
            +
                #   vendor/bundle/ruby/2.5.0/extensions/x86_64-darwin-16/2.5.0-static/byebug-9.1.0
         
     | 
| 
       49 
56 
     | 
    
         
             
                #
         
     | 
| 
       50 
57 
     | 
    
         
             
                def download_gem
         
     | 
| 
       51 
58 
     | 
    
         
             
                  # download - also move to /tmp/jets/demo/compiled_gems folder
         
     | 
| 
         @@ -60,7 +67,7 @@ module Jets::Gems::Extract 
     | 
|
| 
       60 
67 
     | 
    
         
             
                      raise NotFound.new(message)
         
     | 
| 
       61 
68 
     | 
    
         
             
                    end
         
     | 
| 
       62 
69 
     | 
    
         
             
                  end
         
     | 
| 
       63 
     | 
    
         
            -
                  say " 
     | 
| 
      
 70 
     | 
    
         
            +
                  say "Downloaded to: #{tarball_dest}"
         
     | 
| 
       64 
71 
     | 
    
         
             
                  tarball_dest
         
     | 
| 
       65 
72 
     | 
    
         
             
                end
         
     | 
| 
       66 
73 
     | 
    
         | 
| 
         @@ -77,7 +84,7 @@ module Jets::Gems::Extract 
     | 
|
| 
       77 
84 
     | 
    
         
             
                  say "Removing current #{full_gem_name} gem installation:"
         
     | 
| 
       78 
85 
     | 
    
         
             
                  gem_dirs = Dir.glob("#{project_root}/**/*").select do |path|
         
     | 
| 
       79 
86 
     | 
    
         
             
                              File.directory?(path) &&
         
     | 
| 
       80 
     | 
    
         
            -
                              path =~ %r{ 
     | 
| 
      
 87 
     | 
    
         
            +
                              path =~ %r{vendor/bundle} &&
         
     | 
| 
       81 
88 
     | 
    
         
             
                              File.basename(path) == full_gem_name
         
     | 
| 
       82 
89 
     | 
    
         
             
                            end
         
     | 
| 
       83 
90 
     | 
    
         
             
                  gem_dirs.each do |dir|
         
     | 
| 
         @@ -88,11 +95,11 @@ module Jets::Gems::Extract 
     | 
|
| 
       88 
95 
     | 
    
         | 
| 
       89 
96 
     | 
    
         
             
                # full_gem_name: byebug-9.1.0
         
     | 
| 
       90 
97 
     | 
    
         
             
                def gem_url
         
     | 
| 
       91 
     | 
    
         
            -
                  "#{source_url}/gems/#{ 
     | 
| 
      
 98 
     | 
    
         
            +
                  "#{source_url}/gems/#{ruby_folder}/#{gem_name}/#{full_gem_name}.zip"
         
     | 
| 
       92 
99 
     | 
    
         
             
                end
         
     | 
| 
       93 
100 
     | 
    
         | 
| 
       94 
     | 
    
         
            -
                def  
     | 
| 
       95 
     | 
    
         
            -
                  Jets::Gems. 
     | 
| 
      
 101 
     | 
    
         
            +
                def ruby_folder
         
     | 
| 
      
 102 
     | 
    
         
            +
                  Jets::Gems.ruby_folder
         
     | 
| 
       96 
103 
     | 
    
         
             
                end
         
     | 
| 
       97 
104 
     | 
    
         
             
              end
         
     | 
| 
       98 
105 
     | 
    
         
             
            end
         
     | 
| 
         @@ -1,6 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # Usage:
         
     | 
| 
       2 
2 
     | 
    
         
             
            #
         
     | 
| 
       3 
     | 
    
         
            -
            #   Jets::Gems::Extract::Ruby.new("2.5. 
     | 
| 
      
 3 
     | 
    
         
            +
            #   Jets::Gems::Extract::Ruby.new("2.5.3",
         
     | 
| 
       4 
4 
     | 
    
         
             
            #     downloads_root: cache_area, # defaults to /tmp/lambdagem
         
     | 
| 
       5 
5 
     | 
    
         
             
            #     dest: cache_area, # defaults to . (project_root)
         
     | 
| 
       6 
6 
     | 
    
         
             
            #   ).run
         
     | 
| 
         @@ -12,13 +12,22 @@ module Jets::Gems::Extract 
     | 
|
| 
       12 
12 
     | 
    
         
             
                def run
         
     | 
| 
       13 
13 
     | 
    
         
             
                  say "Looking for #{full_ruby_name}"
         
     | 
| 
       14 
14 
     | 
    
         
             
                  clean_downloads(:rubies) if @options[:clean]
         
     | 
| 
       15 
     | 
    
         
            -
                   
     | 
| 
       16 
     | 
    
         
            -
                   
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
      
 15 
     | 
    
         
            +
                  zip_path = download_ruby
         
     | 
| 
      
 16 
     | 
    
         
            +
                  unzip(zip_path)
         
     | 
| 
      
 17 
     | 
    
         
            +
                end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                def unzip(path)
         
     | 
| 
      
 20 
     | 
    
         
            +
                  dest = "#{Jets.build_root}/stage/code/opt"
         
     | 
| 
      
 21 
     | 
    
         
            +
                  say "Unpacking into #{dest}"
         
     | 
| 
      
 22 
     | 
    
         
            +
                  FileUtils.mkdir_p(dest)
         
     | 
| 
      
 23 
     | 
    
         
            +
                  # cd-ing dest unzips the files into that folder
         
     | 
| 
      
 24 
     | 
    
         
            +
                  sh("cd #{dest} && unzip -qo #{path}")
         
     | 
| 
      
 25 
     | 
    
         
            +
                  say("Ruby #{full_ruby_name} unziped at #{dest}", :debug)
         
     | 
| 
       18 
26 
     | 
    
         
             
                end
         
     | 
| 
       19 
27 
     | 
    
         | 
| 
       20 
28 
     | 
    
         
             
                def download_ruby
         
     | 
| 
       21 
29 
     | 
    
         
             
                  url = ruby_url
         
     | 
| 
      
 30 
     | 
    
         
            +
                  puts "download ruby url #{url}"
         
     | 
| 
       22 
31 
     | 
    
         
             
                  tarball_dest = download_file(url, download_path(File.basename(url)))
         
     | 
| 
       23 
32 
     | 
    
         
             
                  unless tarball_dest
         
     | 
| 
       24 
33 
     | 
    
         
             
                    message = "Url: #{url} not found"
         
     | 
| 
         @@ -29,7 +38,7 @@ module Jets::Gems::Extract 
     | 
|
| 
       29 
38 
     | 
    
         
             
                      raise NotFound.new(message)
         
     | 
| 
       30 
39 
     | 
    
         
             
                    end
         
     | 
| 
       31 
40 
     | 
    
         
             
                  end
         
     | 
| 
       32 
     | 
    
         
            -
                  say " 
     | 
| 
      
 41 
     | 
    
         
            +
                  say "Downloaded to: #{tarball_dest}"
         
     | 
| 
       33 
42 
     | 
    
         
             
                  tarball_dest
         
     | 
| 
       34 
43 
     | 
    
         
             
                end
         
     | 
| 
       35 
44 
     | 
    
         | 
| 
         @@ -42,16 +51,16 @@ module Jets::Gems::Extract 
     | 
|
| 
       42 
51 
     | 
    
         
             
                #
         
     | 
| 
       43 
52 
     | 
    
         
             
                # Example:
         
     | 
| 
       44 
53 
     | 
    
         
             
                #
         
     | 
| 
       45 
     | 
    
         
            -
                #    2.5. 
     | 
| 
       46 
     | 
    
         
            -
                #    ruby-2.5. 
     | 
| 
       47 
     | 
    
         
            -
                #    test-ruby-2.5. 
     | 
| 
      
 54 
     | 
    
         
            +
                #    2.5.3           -> ruby-2.5.3.zip
         
     | 
| 
      
 55 
     | 
    
         
            +
                #    ruby-2.5.3      -> ruby-2.5.3.zip
         
     | 
| 
      
 56 
     | 
    
         
            +
                #    test-ruby-2.5.3 -> test-ruby-2.5.3.zip
         
     | 
| 
       48 
57 
     | 
    
         
             
                def full_ruby_name
         
     | 
| 
       49 
58 
     | 
    
         
             
                  md = @name.match(/^(\d+\.\d+\.\d+)$/)
         
     | 
| 
       50 
59 
     | 
    
         
             
                  if md
         
     | 
| 
       51 
60 
     | 
    
         
             
                    ruby_version = md[1]
         
     | 
| 
       52 
     | 
    
         
            -
                    "ruby-#{ruby_version} 
     | 
| 
      
 61 
     | 
    
         
            +
                    "ruby-#{ruby_version}.zip"
         
     | 
| 
       53 
62 
     | 
    
         
             
                  else
         
     | 
| 
       54 
     | 
    
         
            -
                    "#{@name} 
     | 
| 
      
 63 
     | 
    
         
            +
                    "#{@name}.zip"
         
     | 
| 
       55 
64 
     | 
    
         
             
                  end
         
     | 
| 
       56 
65 
     | 
    
         
             
                end
         
     | 
| 
       57 
66 
     | 
    
         |