Sha256: d6c165d0e73fbd5f31fcfb820ed39cafa4e368dc5d419321cab8905bb72b17b4

Contents?: true

Size: 1.5 KB

Versions: 1

Compression:

Stored size: 1.5 KB

Contents

class Bueller
  module Commands
    class GitTagRelease
      def self.run_for(bueller)
        command = new bueller
        command.run
        command
      end

      attr_accessor :repo, :output
      attr_reader :bueller

      def initialize(bueller, attributes = {})
        self.output = $stdout
        @bueller = bueller

        attributes.each_pair do |key, value|
          send("#{key}=", value)
        end
      end

      def base_dir; bueller.base_dir; end
      def version; bueller.version; end
      def repo; bueller.repo; end

      def run
        run = true
        unless clean_staging_area?
          output.puts "There are some modified files that haven't been committed. Proceed anyway?"
          run = $stdin.gets =~ /(y|yes)/i ? true : false
        end

        if run
          repo.checkout('master')
          
          unless release_tagged?
            output.puts "Tagging #{release_tag}"
            repo.add_tag release_tag
          end
          output.puts "Pushing #{release_tag} to origin"
          repo.push 'origin', release_tag
        else
          raise "Release cancelled"
        end
      end 

      def clean_staging_area?
        status.added.empty? && status.deleted.empty? && status.changed.empty?
      end

      def status
        repo.status
      end

      def release_tag
        "v#{version}"
      end

      def release_tagged?
        begin
          repo.tag(release_tag)
          true
        rescue 
          false
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
bueller-0.0.3 lib/bueller/commands/git_tag_release.rb