Class: LambdaLayerCake::RakeHelper
- Inherits:
-
Object
- Object
- LambdaLayerCake::RakeHelper
- Includes:
- Rake::DSL
- Defined in:
- lib/lambda_layer_cake/rake_helper.rb
Constant Summary collapse
- INPUT_FILES =
Files used to generate the gem layer
Rake::FileList.new( ['Gemfile', 'Gemfile.lock', 'system-packages.txt'].collect { |f| File.join(Rails.root, f) } )
- APP_FILES =
Files used to generate the
Rake::FileList.new(Dir['*'] - ['spec','test','log', 'tmp'])
- OUTPUT_DIR =
File.(File.join(Rails.root,'.layer_cake/'))
Instance Method Summary collapse
- #app_task_definitions! ⇒ Object
- #clean_task_definitions! ⇒ Object
- #layer_build ⇒ Object
- #layer_dependencies ⇒ Object
- #layer_directory ⇒ Object
- #layer_task_definitions! ⇒ Object
- #version_task_definitions! ⇒ Object
Instance Method Details
#app_task_definitions! ⇒ Object
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/lambda_layer_cake/rake_helper.rb', line 61 def app_task_definitions! desc "Zip up Rails directory into an app" file ".layer_cake/app.zip": APP_FILES do FileUtils.mkdir_p(working_dir) cmd = %W{zip -r .layer_cake/app.zip} + APP_FILES system(*cmd) or raise #Insert a symlink into the app.zip FileUtils.rm_r(working_dir("app/")) if(File.exists?(working_dir("app"))) FileUtils.mkdir_p(working_dir("app/vendor")) FileUtils.ln_s("/tmp", working_dir("app/tmp")) FileUtils.ln_s("/opt/bundle", working_dir("app/vendor/bundle"), force: true) Dir.chdir(working_dir("app")) do system(*((%W{zip --symlinks -r} << working_dir("app.zip")) + Dir["*"])) or raise end end end |
#clean_task_definitions! ⇒ Object
93 94 95 96 97 98 |
# File 'lib/lambda_layer_cake/rake_helper.rb', line 93 def clean_task_definitions! desc "Clean out intermediate files" task :clean do FileUtils.rm_r(working_dir) if File.exists?(working_dir) end end |
#layer_build ⇒ Object
21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/lambda_layer_cake/rake_helper.rb', line 21 def layer_build FileUtils.mkdir_p(inputs_dir) FileUtils.cp(INPUT_FILES.existing, inputs_dir) cmd = %W{docker run --rm -v #{inputs_dir}:/tmp/inputs -v #{outputs_dir}:/tmp/outputs -v #{File.(__dir__ + "/../../build_env")}:/var/task lambci/lambda:#{docker_tag} ruby build_ruby.rb} STDERR.puts("Excuting cmd: #{cmd.join(' ')}") system(*cmd) or raise end |
#layer_dependencies ⇒ Object
18 19 20 |
# File 'lib/lambda_layer_cake/rake_helper.rb', line 18 def layer_dependencies INPUT_FILES.existing end |
#layer_directory ⇒ Object
15 16 17 |
# File 'lib/lambda_layer_cake/rake_helper.rb', line 15 def layer_directory ".layer_cake/layer-#{input_hash}" end |
#layer_task_definitions! ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/lambda_layer_cake/rake_helper.rb', line 34 def layer_task_definitions! desc "Builds a layer.zip with gems and libraries" task build_layer: ".layer_cake/layer.zip" desc "Build a layer for version #{input_hash}" directory ".layer_cake/layer-#{input_hash}" file ".layer_cake/layer-#{input_hash}" => layer_dependencies do layer_build end file ".layer_cake/layer-#{input_hash}.zip" => ".layer_cake/layer-#{input_hash}" do pwd = Dir.pwd begin Dir.chdir(outputs_dir) cmd = %W{zip -r #{File.join(working_dir, "layer-#{input_hash}.zip")} lib bundle} system(*cmd) or raise ensure Dir.chdir(pwd) end end desc "Build the current layer version and symlink it to the versioned zip" file ".layer_cake/layer.zip": ".layer_cake/layer-#{input_hash}.zip" do FileUtils.ln_s("layer-#{input_hash}.zip",".layer_cake/layer.zip", force: true) end end |
#version_task_definitions! ⇒ Object
80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/lambda_layer_cake/rake_helper.rb', line 80 def version_task_definitions! desc "Output the version hash for the current input files (Gemfile, Gemfile.lock, system-packages.txt)" task :version do $stdout.write input_hash end desc "Reports the ruby version of the lambda environment" task :ruby_version do $stdout.write ruby_version end end |