Sha256: 9ae824b57b86135f48f95ea797f5604fcd2e42096ca5cea81c9771d68e03926c

Contents?: true

Size: 1.62 KB

Versions: 11

Compression:

Stored size: 1.62 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"
      method_found = respond_to?(type_method, true)
      raise("Unknown package type: #{package[:type]}") unless method_found
      send(type_method)
      expose_artifacts!
    end

    private

    Contract None => nil
    def noop_prepare_package
      nil
    end

    Contract None => nil
    def file_prepare_package
      artifacts = package[:artifacts] || [package[:artifact]].compact
      raise('File package type requires artifacts list') if artifacts.empty?
      artifacts.each do |x|
        x[:source] = File.join(tmpdir(:release), x[:source])
        add_artifact(x)
      end
      nil
    end

    Contract None => nil
    def tarball_prepare_package
      add_artifact(
        source: tmpfile(:tarball),
        name: "#{name}.tar.gz",
        long_name: "#{name}-#{git_hash}.tar.gz"
      )
      make_tarball!
    end

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

    Contract None => String
    def git_hash
      `git rev-parse --short HEAD`.rstrip
    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

11 entries across 11 versions & 1 rubygems

Version Path
pkgforge-0.29.1 lib/pkgforge/components/package.rb
pkgforge-0.29.0 lib/pkgforge/components/package.rb
pkgforge-0.28.0 lib/pkgforge/components/package.rb
pkgforge-0.27.0 lib/pkgforge/components/package.rb
pkgforge-0.26.0 lib/pkgforge/components/package.rb
pkgforge-0.25.1 lib/pkgforge/components/package.rb
pkgforge-0.25.0 lib/pkgforge/components/package.rb
pkgforge-0.24.1 lib/pkgforge/components/package.rb
pkgforge-0.24.0 lib/pkgforge/components/package.rb
pkgforge-0.23.2 lib/pkgforge/components/package.rb
pkgforge-0.23.1 lib/pkgforge/components/package.rb