Sha256: fb2aab3d3708fa4a8bd9f0ce41dc6eae5039649bfbc4e8f445bffaf0910e2459

Contents?: true

Size: 1.78 KB

Versions: 15

Compression:

Stored size: 1.78 KB

Contents

module Kamal::Commands::App::Assets
  def extract_assets
    asset_container = "#{role.container_prefix}-assets"

    combine \
      make_directory(role.asset_extracted_path),
      [ *docker(:stop, "-t 1", asset_container, "2> /dev/null"), "|| true" ],
      docker(:run, "--name", asset_container, "--detach", "--rm", config.absolute_image, "sleep 1000000"),
      docker(:cp, "-L", "#{asset_container}:#{role.asset_path}/.", role.asset_extracted_path),
      docker(:stop, "-t 1", asset_container),
      by: "&&"
  end

  def sync_asset_volumes(old_version: nil)
    new_extracted_path, new_volume_path = role.asset_extracted_path(config.version), role.asset_volume.host_path
    if old_version.present?
      old_extracted_path, old_volume_path = role.asset_extracted_path(old_version), role.asset_volume(old_version).host_path
    end

    commands = [ make_directory(new_volume_path), copy_contents(new_extracted_path, new_volume_path) ]

    if old_version.present?
      commands << copy_contents(new_extracted_path, old_volume_path, continue_on_error: true)
      commands << copy_contents(old_extracted_path, new_volume_path, continue_on_error: true)
    end

    chain *commands
  end

  def clean_up_assets
    chain \
      find_and_remove_older_siblings(role.asset_extracted_path),
      find_and_remove_older_siblings(role.asset_volume_path)
  end

  private
    def find_and_remove_older_siblings(path)
      [
        :find,
        Pathname.new(path).dirname.to_s,
        "-maxdepth 1",
        "-name", "'#{role.container_prefix}-*'",
        "!", "-name", Pathname.new(path).basename.to_s,
        "-exec rm -rf \"{}\" +"
      ]
    end

    def copy_contents(source, destination, continue_on_error: false)
      [ :cp, "-rnT", "#{source}", destination, *("|| true" if continue_on_error) ]
    end
end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
kamal-1.9.2 lib/kamal/commands/app/assets.rb
kamal-1.9.1 lib/kamal/commands/app/assets.rb
kamal-1.9.0 lib/kamal/commands/app/assets.rb
kamal-2.0.0.alpha lib/kamal/commands/app/assets.rb
kamal-1.8.3 lib/kamal/commands/app/assets.rb
kamal-1.8.2 lib/kamal/commands/app/assets.rb
kamal-1.8.1 lib/kamal/commands/app/assets.rb
kamal-1.8.0 lib/kamal/commands/app/assets.rb
kamal-1.7.3 lib/kamal/commands/app/assets.rb
kamal-1.7.2 lib/kamal/commands/app/assets.rb
kamal-1.7.1 lib/kamal/commands/app/assets.rb
kamal-1.7.0 lib/kamal/commands/app/assets.rb
kamal-1.6.0 lib/kamal/commands/app/assets.rb
kamal-1.5.1 lib/kamal/commands/app/assets.rb
kamal-1.5.0 lib/kamal/commands/app/assets.rb