Sha256: a66fe42fa650fbd9f42bb264b182bac5d421328bc315c7990479fba0e2548920

Contents?: true

Size: 1.42 KB

Versions: 15

Compression:

Stored size: 1.42 KB

Contents

require "active_support/duration"
require "time"
require "base64"

class Kamal::Commands::Lock < Kamal::Commands::Base
  def acquire(message, version)
    combine \
      [ :mkdir, lock_dir ],
      write_lock_details(message, version)
  end

  def release
    combine \
      [ :rm, lock_details_file ],
      [ :rm, "-r", lock_dir ]
  end

  def status
    combine \
      stat_lock_dir,
      read_lock_details
  end

  def ensure_locks_directory
    [ :mkdir, "-p", locks_dir ]
  end

  private
    def write_lock_details(message, version)
      write \
        [ :echo, "\"#{Base64.encode64(lock_details(message, version))}\"" ],
        lock_details_file
    end

    def read_lock_details
      pipe \
        [ :cat, lock_details_file ],
        [ :base64, "-d" ]
    end

    def stat_lock_dir
      write \
        [ :stat, lock_dir ],
        "/dev/null"
    end

    def locks_dir
      File.join(config.run_directory, "locks")
    end

    def lock_dir
      dir_name = [ config.service, config.destination ].compact.join("-")

      File.join(locks_dir, dir_name)
    end

    def lock_details_file
      File.join(lock_dir, "details")
    end

    def lock_details(message, version)
      <<~DETAILS.strip
        Locked by: #{locked_by} at #{Time.now.utc.iso8601}
        Version: #{version}
        Message: #{message}
      DETAILS
    end

    def locked_by
      Kamal::Git.user_name
    rescue Errno::ENOENT
      "Unknown"
    end
end

Version data entries

15 entries across 15 versions & 1 rubygems

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