module Kamal::Commands::App::Assets
def clean_up_assets
def clean_up_assets chain \ find_and_remove_older_siblings(role_config.asset_extracted_path), find_and_remove_older_siblings(role_config.asset_volume_path) end
def copy_contents(source, destination, continue_on_error: false)
def copy_contents(source, destination, continue_on_error: false) [ :cp, "-rnT", "#{source}", destination, *("|| true" if continue_on_error)] end
def extract_assets
def extract_assets asset_container = "#{role_config.container_prefix}-assets" combine \ make_directory(role_config.asset_extracted_path), [*docker(:stop, "-t 1", asset_container, "2> /dev/null"), "|| true"], docker(:run, "--name", asset_container, "--detach", "--rm", config.latest_image, "sleep 1000000"), docker(:cp, "-L", "#{asset_container}:#{role_config.asset_path}/.", role_config.asset_extracted_path), docker(:stop, "-t 1", asset_container), by: "&&" end
def find_and_remove_older_siblings(path)
def find_and_remove_older_siblings(path) [ :find, Pathname.new(path).dirname.to_s, "-maxdepth 1", "-name", "'#{role_config.container_prefix}-*'", "!", "-name", Pathname.new(path).basename.to_s, "-exec rm -rf \"{}\" +" ] end
def sync_asset_volumes(old_version: nil)
def sync_asset_volumes(old_version: nil) new_extracted_path, new_volume_path = role_config.asset_extracted_path(config.version), role_config.asset_volume.host_path if old_version.present? old_extracted_path, old_volume_path = role_config.asset_extracted_path(old_version), role_config.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