Sha256: 941bf3c4f77c80f8aaa03400065de9372e437067d1ec3cc8fdedf33d8f43ff90

Contents?: true

Size: 1.6 KB

Versions: 1

Compression:

Stored size: 1.6 KB

Contents

require 'fileutils'

module PkgForge
  ##
  # Add upload methods to Forge
  class Forge
    attr_writer :package

    Contract None => HashOf[Symbol => Any]
    def package
      @package ||= { type: 'tarball' }
    end

    Contract None => nil
    def package!
      add_license!
      type_method = "#{package[:type]}_prepare_package"
      return send(type_method) if respond_to?(type_method, true)
      raise("Unknown package type: #{package[:type]}")
    end

    private

    Contract None => nil
    def file_prepare_package
      raise('File package type requires "path" setting') unless package[:path]
      @upload_path = File.join(tmpdir(:release), package[:path])
      @upload_name = package[:name] || name
      nil
    end

    Contract None => nil
    def tarball_prepare_package
      @upload_path = tmpfile(:tarball)
      @upload_name = "#{name}.tar.gz"
      make_tarball!
      copy_tarball!
    end

    Contract None => nil
    def make_tarball!
      Dir.chdir(tmpdir(:release)) do
        run_local "tar -czvf #{tmpfile(:tarball)} *"
      end
      nil
    end

    Contract None => String
    def git_hash
      `git rev-parse --short HEAD`.rstrip
    end

    Contract None => nil
    def copy_tarball!
      FileUtils.mkdir_p 'pkg'
      pkg_file = "pkg/#{name}-#{git_hash}.tar.gz"
      FileUtils.cp tmpfile(:tarball), pkg_file
      FileUtils.chmod 0o0644, pkg_file
      nil
    end
  end

  module DSL
    ##
    # Add package methods to Forge DSL
    class Forge
      Contract HashOf[Symbol => Any] => nil
      def package(params)
        @forge.package = params
        nil
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
pkgforge-0.12.0 lib/pkgforge/components/package.rb