Sha256: fac8d56c6a94fb6b5fb8282ef0b35e2409cae278bcabda0d18c70e6202beda91

Contents?: true

Size: 1.82 KB

Versions: 18

Compression:

Stored size: 1.82 KB

Contents

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

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

  def sync_asset_volumes(old_version: nil)
    new_extracted_path, new_volume_path = role.asset_extracted_directory(config.version), role.asset_volume.host_path
    if old_version.present?
      old_extracted_path, old_volume_path = role.asset_extracted_directory(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_directory),
      find_and_remove_older_siblings(role.asset_volume_directory)
  end

  private
    def find_and_remove_older_siblings(path)
      [
        :find,
        Pathname.new(path).dirname.to_s,
        "-maxdepth 1",
        "-name", "'#{role.name}-*'",
        "!", "-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

18 entries across 18 versions & 2 rubygems

Version Path
kamal-2.4.0 lib/kamal/commands/app/assets.rb
nocoffee-kamal-2.3.0.3 lib/kamal/commands/app/assets.rb
nocoffee-kamal-2.3.0.2 lib/kamal/commands/app/assets.rb
nocoffee-kamal-2.3.0.1 lib/kamal/commands/app/assets.rb
kamal-2.3.0 lib/kamal/commands/app/assets.rb
kamal-2.2.2 lib/kamal/commands/app/assets.rb
kamal-2.2.1 lib/kamal/commands/app/assets.rb
kamal-2.2.0 lib/kamal/commands/app/assets.rb
kamal-2.1.2 lib/kamal/commands/app/assets.rb
kamal-2.1.1 lib/kamal/commands/app/assets.rb
kamal-2.1.0 lib/kamal/commands/app/assets.rb
kamal-2.0.0 lib/kamal/commands/app/assets.rb
kamal-2.0.0.rc4 lib/kamal/commands/app/assets.rb
kamal-2.0.0.rc3 lib/kamal/commands/app/assets.rb
kamal-2.0.0.rc2 lib/kamal/commands/app/assets.rb
kamal-2.0.0.rc1 lib/kamal/commands/app/assets.rb
kamal-2.0.0.beta2 lib/kamal/commands/app/assets.rb
kamal-2.0.0.beta1 lib/kamal/commands/app/assets.rb