Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
buildgem / lib / buildgem.rb
Size: Mime:
require "buildgem/configuration"
require "buildgem/version"
require "buildgem/committer"
require "buildgem/tagger"
require "buildgem/pusher"
require "buildgem/builder"
require "buildgem/deployer"
require "buildgem/cleaner"

module Buildgem
  include ForwardGemMethodsToConfig

  VERSION = "1.0.4"

  class << self
    def run!
      prevent_mistakes!

      Version.increment!(version_mode)
      log "Bumped file up to #{gem_version}!"

      Committer.commit!
      log "Committed #{gem_version_file_path}!"

      Tagger.tag!
      log "Tagged #{gem_version}!"

      Pusher.push! if config.git_push_tags

      Builder.build!
      log "Built gem at version #{gem_version}!"

      Deployer.deploy! unless ENV['RACK_ENV'] == 'test'

      Cleaner.clean!
      log "Removed #{gem_top_level_namespace}-#{gem_version}.gem"
    end

    def configure
      yield(configuration)
    end

    def configuration
      @configuration ||= Configuration.new
    end
    alias :config :configuration

    private
    def prevent_mistakes!
      unless ENV['RACK_ENV'] == 'test'
        current_version = gem_version.gsub('"', '')
        new_version     = Version.get_potential_new_version(version_mode)

        log "Are you sure you want to:"

        log "-------------------------"
        log "* Tag    #{gem_top_level_namespace} from #{current_version} to #{new_version}"

        if config.git_push_tags
          log "* Push   #{gem_top_level_namespace} (#{new_version}) to origin"
        end


        log "* Deploy #{gem_top_level_namespace}-#{new_version}.gem to #{gem_source}?"
        log "-------------------------"

        log "Answering ANYTHING besides 'y' will abort:"
        answer = gets
        exit unless answer =~ /y/i
      end
    end

    def version_mode
      @version_mode ||= ARGV.shift
    end

    def log(msg)
      unless ENV['RACK_ENV'] == 'test'
        print "#{msg}\n"
      end
    end
  end
end