Sha256: 9614524d280dbcd9b8dc74b33cf33f7a7e610f6bb92485ef00779c4c14dd632c

Contents?: true

Size: 1.87 KB

Versions: 35

Compression:

Stored size: 1.87 KB

Contents

require "uri"

class Kamal::Cli::Build::Clone
  attr_reader :sshkit
  delegate :info, :error, :execute, :capture_with_info, to: :sshkit

  def initialize(sshkit)
    @sshkit = sshkit
  end

  def prepare
    begin
      clone_repo
    rescue SSHKit::Command::Failed => e
      if e.message =~ /already exists and is not an empty directory/
        reset
      else
        raise Kamal::Cli::Build::BuildError, "Failed to clone repo: #{e.message}"
      end
    end

    validate!
  rescue Kamal::Cli::Build::BuildError => e
    error "Error preparing clone: #{e.message}, deleting and retrying..."

    FileUtils.rm_rf KAMAL.config.builder.clone_directory
    clone_repo
    validate!
  end

  private
    def clone_repo
      info "Cloning repo into build directory `#{KAMAL.config.builder.build_directory}`..."

      FileUtils.mkdir_p KAMAL.config.builder.clone_directory
      execute *KAMAL.builder.clone
    end

    def reset
      info "Resetting local clone as `#{KAMAL.config.builder.build_directory}` already exists..."

      KAMAL.builder.clone_reset_steps.each { |step| execute *step }
    rescue SSHKit::Command::Failed => e
      raise Kamal::Cli::Build::BuildError, "Failed to clone repo: #{e.message}"
    end

    def validate!
      status = capture_with_info(*KAMAL.builder.clone_status).strip

      unless status.empty?
        raise Kamal::Cli::Build::BuildError, "Clone in #{KAMAL.config.builder.build_directory} is dirty, #{status}"
      end

      revision = capture_with_info(*KAMAL.builder.clone_revision).strip
      if revision != Kamal::Git.revision
        raise Kamal::Cli::Build::BuildError, "Clone in #{KAMAL.config.builder.build_directory} is not on the correct revision, expected `#{Kamal::Git.revision}` but got `#{revision}`"
      end
    rescue SSHKit::Command::Failed => e
      raise Kamal::Cli::Build::BuildError, "Failed to validate clone: #{e.message}"
    end
end

Version data entries

35 entries across 35 versions & 2 rubygems

Version Path
kamal-2.5.3 lib/kamal/cli/build/clone.rb
kamal-2.5.2 lib/kamal/cli/build/clone.rb
kamal-2.5.1 lib/kamal/cli/build/clone.rb
kamal-2.5.0 lib/kamal/cli/build/clone.rb
kamal-2.4.0 lib/kamal/cli/build/clone.rb
nocoffee-kamal-2.3.0.3 lib/kamal/cli/build/clone.rb
nocoffee-kamal-2.3.0.2 lib/kamal/cli/build/clone.rb
nocoffee-kamal-2.3.0.1 lib/kamal/cli/build/clone.rb
kamal-2.3.0 lib/kamal/cli/build/clone.rb
kamal-2.2.2 lib/kamal/cli/build/clone.rb
kamal-2.2.1 lib/kamal/cli/build/clone.rb
kamal-2.2.0 lib/kamal/cli/build/clone.rb
kamal-1.9.2 lib/kamal/cli/build/clone.rb
kamal-2.1.2 lib/kamal/cli/build/clone.rb
kamal-2.1.1 lib/kamal/cli/build/clone.rb
kamal-2.1.0 lib/kamal/cli/build/clone.rb
kamal-1.9.1 lib/kamal/cli/build/clone.rb
kamal-2.0.0 lib/kamal/cli/build/clone.rb
kamal-1.9.0 lib/kamal/cli/build/clone.rb
kamal-2.0.0.rc4 lib/kamal/cli/build/clone.rb