Sha256: e02c6e96f966d92b1f8a199683215283beec2057f01184d141563bbda4865b72

Contents?: true

Size: 1.98 KB

Versions: 1

Compression:

Stored size: 1.98 KB

Contents

require "thor"

module Lono::AppFile
  class Build < Base
    include Lono::Utils::Item::Zip

    def initialize_variables
      @output_files_path = "#{Lono.root}/output/#{@blueprint.name}/files"
    end

    def run
      return unless detect_files?
      logger.info "Building app/files"
      build_all
    end

    def build_all
      clean_output
      validate_files!
      copy_to_output
      build_layers
      compress_output
    end

    def validate_files!
      items = Registry.items + Registry.layers
      missing = items.select do |item|
        !File.exist?(item.src_path)
      end
      missing_paths = missing.map { |item| item.src_path }.uniq
      unless missing_paths.empty?
        logger.info "ERROR: These app/files are missing were used by the s3_key method but are missing".color(:red)
        missing_paths.each do |path|
          logger.info "    #{path}"
        end
        logger.info "Please double check that they exist."
        exit 1
      end
    end

    def build_layers
      layer_items = Registry.layers
      layer_items.each do |item|
        LambdaLayer.new(@blueprint, item).build
      end
    end

    def compress_output
      Registry.items.each do |item|
        # type can be lambda_layer or file
        if item.type == "lambda_layer" || item.exist?
          zip(item)
        else
          logger.info "WARN: #{item.src_path} does not exist. Double check that the path is correct in the s3_key call.".color(:yellow)
        end
      end
    end

    def copy_to_output
      override_source_paths("#{@blueprint.root}/app/files")
      self.destination_root = @output_files_path
      directory(".", verbose: false, context: template_context.get_binding) # Thor::Action
    end

    def clean_output
      FileUtils.rm_rf(@output_files_path)
    end

    def detect_files?
      app_files = Dir["#{@blueprint.root}/app/files/*"]
      if app_files.empty?
        false
      else
        logger.info "Detected app/files"
        true
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
lono-8.0.0.pre.rc2 lib/lono/app_file/build.rb