Sha256: c134d58df716c30c36901fea5b785ad8d6f89b0150107005566e6a02a8ddf8d1

Contents?: true

Size: 2 KB

Versions: 15

Compression:

Stored size: 2 KB

Contents

require 'dply/archive'
require 'dply/helper'
require 'tmpdir'

module Dply
  class Release

    include Helper

    attr_accessor :url, :verify_checksum
    attr_writer :name

    def self.find_or_create(**kwargs)
      release = new(**kwargs)
      name = find_installed_name(**kwargs)
      release.name = name if name
      return release
    end

    def self.find_installed_name(**kwargs)
      branch = kwargs.fetch(:branch).to_s.tr('-/', '__')
      app_name = kwargs.fetch(:app_name).to_s.tr('-/', '__')
      revision = kwargs.fetch(:revision)

      name_without_ts = "#{revision}-#{app_name}-#{branch}-"
      latest = Dir["releases/#{name_without_ts}*"].sort_by { |x, y| File.mtime(x) }.first
      latest ? File.basename(latest) : nil
    end

    def initialize(revision:, app_name:, branch:, url:)
      @revision = revision
      @branch = branch.to_s.tr('-/', '__')
      @app_name = app_name.to_s.tr('-/', '__')
      @url = url
    end

    def make_current
      error "cannot make not installed release current" if not installed?
      error "release path #{path} doesn't exist"  if not File.directory? path
      symlink path, "current"
    end

    def name
      @name ||= "#{@revision}-#{@app_name}-#{@branch}-#{timestamp}"
    end

    def install
      if installed?
        logger.debug "release #{name} already installed"
        return
      end
      archive.extract do |path|
        FileUtils.mv path, "releases/#{name}"
      end
    end

    def path
      @path ||= "releases/#{name}"
    end

    def record_deployment
      FileUtils.touch "#{path}/.deployed"
    end

    def already_deployed?
      File.exist? "#{path}/.deployed"
    end

    def current?
      return false if not File.symlink? "current"
      File.basename(File.readlink "current") == name
    end

    private

    def archive
      @archive ||= Archive.new(url, verify_checksum: @verify_checksum)
    end

    def timestamp
      Time.now.strftime "%Y%m%d%H%M%S"
    end

    def installed?
      File.exist? path
    end

  end
end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
dply-0.2.19 lib/dply/release.rb
dply-0.2.18 lib/dply/release.rb
dply-0.2.17 lib/dply/release.rb
dply-0.2.16 lib/dply/release.rb
dply-0.2.15 lib/dply/release.rb
dply-0.2.14 lib/dply/release.rb
dply-0.2.13 lib/dply/release.rb
dply-0.2.11 lib/dply/release.rb
dply-0.2.10 lib/dply/release.rb
dply-0.2.9 lib/dply/release.rb
dply-0.2.8 lib/dply/release.rb
dply-0.2.7 lib/dply/release.rb
dply-0.2.6 lib/dply/release.rb
dply-0.2.5 lib/dply/release.rb
dply-0.2.4 lib/dply/release.rb