Sha256: feff7500a9fee6aaa7cd7da0b4bd5a2607d6b46ffe6ea3c424a9010f583cc60c

Contents?: true

Size: 1.66 KB

Versions: 5

Compression:

Stored size: 1.66 KB

Contents

class Jets::Builders
  class LambdaLayer
    include Util

    # At this point we gems have all been moved to stage/code/vendor/bundle, this includes
    # binary gems, a good state. This method moves them:
    #
    #   from stage/code/vendor/bundle/ruby/2.5.0
    #   to stage/opt/ruby/gems/2.5.0
    #
    # So we can move gems into the Lambda Layer. Important folders later:
    #
    #   stage/code/opt/lib
    #   stage/code/opt/ruby
    #
    def build
      move_opt_to_stage
      move_vendor_to_opt
      symlink_vendor_gems
    end

    def move_opt_to_stage
      opt_original = "#{code_area}/opt"
      opt = "#{stage_area}/opt"
      FileUtils.mkdir_p(File.dirname(opt))
      FileUtils.mv(opt_original, opt)
    end

    def move_vendor_to_opt
      ruby_folder = Jets::Gems.ruby_folder
      gems_original = "#{code_area}/vendor/bundle/ruby/#{ruby_folder}"
      gems = "#{stage_area}/opt/ruby/gems/#{ruby_folder}"
      FileUtils.mkdir_p(File.dirname(gems))
      FileUtils.mv(gems_original, gems)
      # Deleting in this way to make sure folders are empty before we delete them
      FileUtils.rmdir("#{code_area}/vendor/bundle/ruby")
      FileUtils.rmdir("#{code_area}/vendor/bundle")
      FileUtils.rmdir("#{code_area}/vendor") if Dir.empty?("#{code_area}/vendor")
    end

    # Simple logic: vendor/bundle/ruby/2.5.0 -> /opt/ruby/gems/2.5.0
    def symlink_vendor_gems
      ruby_folder = Jets::Gems.ruby_folder
      dest = "#{code_area}/vendor/bundle/ruby/#{ruby_folder}"
      FileUtils.mkdir_p(File.dirname(dest))
      puts "ln -sf /opt/ruby/gems/#{ruby_folder} #{dest}" # uncommen to debug
      FileUtils.ln_sf("/opt/ruby/gems/#{ruby_folder}", dest)
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
jets-1.3.4 lib/jets/builders/lambda_layer.rb
jets-1.3.3 lib/jets/builders/lambda_layer.rb
jets-1.3.2 lib/jets/builders/lambda_layer.rb
jets-1.3.1 lib/jets/builders/lambda_layer.rb
jets-1.3.0 lib/jets/builders/lambda_layer.rb