Sha256: dc0770783e4408d51f40455ea0e0029bb65f8dd703e983a6648e6548f4219fd2

Contents?: true

Size: 1.37 KB

Versions: 22

Compression:

Stored size: 1.37 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 lock_dir
      dir_name = [ "lock", config.service, config.destination ].compact.join("-")

      File.join(config.run_directory, 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

22 entries across 22 versions & 2 rubygems

Version Path
kamal-2.5.3 lib/kamal/commands/lock.rb
kamal-2.5.2 lib/kamal/commands/lock.rb
kamal-2.5.1 lib/kamal/commands/lock.rb
kamal-2.5.0 lib/kamal/commands/lock.rb
kamal-2.4.0 lib/kamal/commands/lock.rb
nocoffee-kamal-2.3.0.3 lib/kamal/commands/lock.rb
nocoffee-kamal-2.3.0.2 lib/kamal/commands/lock.rb
nocoffee-kamal-2.3.0.1 lib/kamal/commands/lock.rb
kamal-2.3.0 lib/kamal/commands/lock.rb
kamal-2.2.2 lib/kamal/commands/lock.rb
kamal-2.2.1 lib/kamal/commands/lock.rb
kamal-2.2.0 lib/kamal/commands/lock.rb
kamal-2.1.2 lib/kamal/commands/lock.rb
kamal-2.1.1 lib/kamal/commands/lock.rb
kamal-2.1.0 lib/kamal/commands/lock.rb
kamal-2.0.0 lib/kamal/commands/lock.rb
kamal-2.0.0.rc4 lib/kamal/commands/lock.rb
kamal-2.0.0.rc3 lib/kamal/commands/lock.rb
kamal-2.0.0.rc2 lib/kamal/commands/lock.rb
kamal-2.0.0.rc1 lib/kamal/commands/lock.rb