Module: Rake::DevEiate::Releases

Defined in:
lib/rake/deveiate/releases.rb

Overview

Release tasks

Instance Method Summary collapse

Instance Method Details

#define_tasksObject

Define release tasks.



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/rake/deveiate/releases.rb', line 13

def define_tasks
	super if defined?( super )

	checksum_dir = Rake::DevEiate::CHECKSUM_DIR
	checksum_path = checksum_dir + "#{self.gem_filename}.sha512"

	directory( checksum_dir )

	file( checksum_path => [self.gem_path, checksum_dir], &method(:do_make_release_checksum) )
	task :add_release_checksum => checksum_path

	task( :release_gem => :add_release_checksum, &method(:do_release_gem) )

	task :debug => :release_debug
	task( :release_debug, &method(:do_release_debug) )
end

#do_gem_push(gemserver) ⇒ Object

Push a new gem via a gemserver.



54
55
56
57
58
59
60
61
# File 'lib/rake/deveiate/releases.rb', line 54

def do_gem_push( gemserver )
	if self.prompt.yes?( "Push a new gem to #{gemserver}?" ) {|q| q.default(false) }
		push_args = [ "push", self.gem_path.to_s ]
		push_args << '-k' << self.gem_push_key if self.gem_push_key

		sh( Gem.ruby, "-S", "gem", *push_args )
	end
end

#do_make_release_checksum(task, args) ⇒ Object

Create a checksum for a release gemfile



32
33
34
35
36
37
# File 'lib/rake/deveiate/releases.rb', line 32

def do_make_release_checksum( task, args )
	if self.prompt.yes?( "Make a checksum for this release?" )
		checksum = Digest::SHA512.new.hexdigest( self.gem_path.read )
		File.open( task.name, 'w', encoding: 'us-ascii' ) {|f| f.write(checksum) }
	end
end

#do_release_debug(task, args) ⇒ Object

Body of the release_debug task.



80
81
82
83
84
85
86
# File 'lib/rake/deveiate/releases.rb', line 80

def do_release_debug( task, args )
	gemserver = self.allowed_push_host || Rake::DevEiate::DEFAULT_GEMSERVER

	self.prompt.say( "Releases will be pushed to:", color: :bright_green )
	self.prompt.say( self.indent(gemserver, 4) )
	self.prompt.say( "\n" )
end

#do_release_gem(task, args) ⇒ Object

Body of the release_gem task.



41
42
43
44
45
46
47
48
49
50
# File 'lib/rake/deveiate/releases.rb', line 41

def do_release_gem( task, args )
	gemserver = self.allowed_push_host || Rake::DevEiate::DEFAULT_GEMSERVER

	case gemserver
	when /\Ascp:/
		self.do_scp_push( gemserver )
	else
		self.do_gem_push( gemserver )
	end
end

#do_scp_push(gemserver) ⇒ Object

Push a new gem via scp.



65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/rake/deveiate/releases.rb', line 65

def do_scp_push( gemserver )
	gemserver_url = URI( gemserver )

	if self.prompt.yes?( "Push a new gem with scp to #{gemserver_url.host}?" ) {|q| q.default(false) }
		require 'net/scp'

		# Strip off one leading '/' if one is present
		remote_path = gemserver_url.path[ %r{/(.*)}, 1 ]

		Net::SCP.upload!( gemserver_url.host, gemserver_url.user, self.gem_path.to_s, remote_path )
	end
end