class Pipely::Tasks::UploadPipelineAsGem

Attributes

bucket_name[RW]
config[RW]
name[RW]

Name of this rake task

s3_gems_path[RW]
s3_steps_path[RW]
templates[RW]

Public Class Methods

new(*args, &task_block) click to toggle source
# File lib/pipely/tasks/upload_pipeline_as_gem.rb, line 21
def initialize(*args, &task_block)
  setup_ivars(args)

  task name, *args do |_, task_args|
    RakeFileUtils.send(:verbose, verbose) do
      if task_block
        task_block.call(*[self, task_args].slice(0, task_block.arity))
      end

      run_task verbose
    end
  end

  Rake::Task["upload_steps"].enhance [name]
end

Public Instance Methods

run_task(verbose) click to toggle source
# File lib/pipely/tasks/upload_pipeline_as_gem.rb, line 43
def run_task(verbose)
  s3_gem_paths = upload_gems
  context = build_bootstrap_context(s3_gem_paths)

  templates.each do |erb_file|
    upload_filename = File.basename(erb_file).sub( /\.erb$/, '' )

    # Exclude the pipeline.json
    if upload_filename == 'pipeline.json'
      next
    end

    template_erb = Erubis::Eruby.new( File.read(erb_file) )
    upload_to_s3( upload_filename, template_erb.result(context) )
  end
end
setup_ivars(args) click to toggle source
# File lib/pipely/tasks/upload_pipeline_as_gem.rb, line 37
def setup_ivars(args)
  @name = args.shift || 'deploy:upload_pipeline_as_gem'
  @verbose = true
  @templates = Dir.glob("templates/*.erb")
end

Private Instance Methods

build_bootstrap_context(s3_gems) click to toggle source
# File lib/pipely/tasks/upload_pipeline_as_gem.rb, line 72
def build_bootstrap_context(s3_gems)
  bootstrap_helper = Pipely::Deploy::Bootstrap.new(s3_gems, s3_steps_path)

  context = bootstrap_helper.context(config['bootstrap_mixins'])

  # erb context
  {
    bootstrap: context,
    config: config
  }
end
s3_bucket() click to toggle source
# File lib/pipely/tasks/upload_pipeline_as_gem.rb, line 61
def s3_bucket
    @s3_bucket ||= Aws::S3::Bucket.new(@bucket_name)
end
upload_gems() click to toggle source
# File lib/pipely/tasks/upload_pipeline_as_gem.rb, line 65
def upload_gems
  pipeline_gems = Pipely::Bundler.gem_files
  s3_uploader = Pipely::Deploy::S3Uploader.new(s3_bucket, s3_gems_path)
  s3_uploader.upload(pipeline_gems.values)
  s3_uploader.s3_urls(pipeline_gems.values)
end
upload_to_s3( upload_filename, body ) click to toggle source
# File lib/pipely/tasks/upload_pipeline_as_gem.rb, line 84
def upload_to_s3( upload_filename, body )
  s3_dest = File.join(@s3_steps_path, upload_filename)
  puts "uploading #{s3_dest}" if verbose
  s3_bucket.objects[s3_dest].write(body)
end