Class: Reap::Release
Overview
Release Task
This task releases files to RubyForge and other GForge instaces or SourceForge clones. In its most simple usage it looks like:
project = MetaProject::Project::XForge::RubyForge.new('xforge')
# Create a new release of the xforge project on Rubyforge.
task :release => [:gem] do
Rake::XForge::Release.new(project) {}
end
The previous example will use defaults where it can. It will prompt you for your xForge user name and password before it uploads all gems under the pkg folder and creates a RubyForge release.
While defaults are nice, you may want a little more control. You can specify additional attributes:
-
#user_name
-
#password
-
#changes_file
-
#version
-
#files
-
#release_name
-
#release_notes
-
#release_changes
-
#package_name
Example:
project = MetaProject::Project::XForge::RubyForge.new('xforge')
task :release => [:gem] do
release_files = FileList[ 'pkg/*.gem', 'CHANGES' ]
Rake::XForge::Release.new(project) do |xf|
# Never hardcode user name and password in the Rakefile!
xf.user_name = ENV['RUBYFORGE_USER']
xf.password = ENV['RUBYFORGE_PASSWORD']
xf.files = release_files.to_a
xf.release_name = "XForge 0.1"
end
This can be invoked from the command line:
rake release RUBYFORGE_USER=myuser \
RUBYFORGE_PASSWORD=mypassword
If you don’t like blocks, you can do like this:
project = MetaProject::Project::XForge::RubyForge.new('xforge')
task :release => [:gem] do
xf = Rake::XForge::Release.new(project)
... # Set additional attributes
xf.execute
end
Constant Summary
Constants inherited from Task
Instance Method Summary collapse
Methods inherited from Task
#ask, #execute, inherited, #initialize, #initiate, master, #master, #provide_setup_rb, #section, section_required, section_required?, #section_required?, #sh, #task, task_attr, #task_desc, task_desc, #task_help, task_help, task_list, #task_name, task_name, #tell, #use_subsection, verify?
Constructor Details
This class inherits a constructor from Reap::Task
Instance Method Details
#run ⇒ Object
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 |
# File 'lib/reap/task/release.rb', line 97 def run # setup rel.host ||= 'rubyforge.org' rel.host.chomp!('/') rel.username ||= master.rubyforge.username #rel.password ||= master.rubyforge.password rel.project ||= master.rubyforge.project || master.name rel.package ||= master.rubyforge.package #rel.packageid ||= master.rubyforge.packageid rel.groupid ||= master.rubyforge.groupid rel.private ||= false rel.processor ||= 'Any' rel.date ||= Time::now.strftime('%Y-%m-%d %H:%M') rel.exclude ||= [] rel.exclude << 'tar.gz' if rel.exclude.include?( 'tgz' ) rel.exclude << 'tgz' if rel.exclude.include?( 'tar.gz' ) rel.exclude << 'tar.bz2' if rel.exclude.include?( 'tbz' ) rel.exclude << 'tbz' if rel.exclude.include?( 'tar.bz2' ) rel. ||= File::join(File::("~"), ".rubyforge.cookie_jar") # do not inherit these rel.dir = section.dir || master.project.dir rel.release = section.release || master.version || rel.date # verify abort "missing field -- package" unless rel.package #abort "missing field -- packageid" unless rel.packageid abort "missing field -- groupid" unless rel.groupid # add more... # case rel.host # when 'rubyforge', 'rubyforge.org' # else # puts %{Unrecognized release host '#{rel.host}'. Skipped.} # skip = true # end # release puts "Reap is preparing release ..." rtypes = [ 'tgz', 'tbz', 'tar.gz', 'tar.bz2', 'deb', 'gem', 'ebuild' ] rtypes -= rel.exclude rtypes = rtypes.collect { |rt| Regexp.escape( rt ) } re_rtypes = Regexp.new( '[.](' << rtypes.join('|') << ')$' ) dir = File.join( rel.dir, "#{rel.name}-#{rel.version}" ) files = Dir.entries(dir).select { |f| f =~ re_rtypes or f == 'PKGBUILD' } files = files.collect { |f| File.join( dir, f ) } if files.empty? puts "No files to release at #{dir}." exit -1 end # ask for password unless $PASSWORD print "Password for #{rel.username}: " until passwd = $stdin.gets.strip ; sleep 1 ; end @password = passwd else @password = $PASSWORD end login { unless package? puts "Package (#{rel.package}) does not exist." puts "Use -f option to force package creation." exit 0 unless $FORCE create_package puts "Created package -- #{rel.package}" end if release? unless $FORCE puts "Release (#{rel.release}) already exists." puts "Use -f option to force re-release." exit 0 end files.each do |f| remove_file( f ) if file?( f ) puts "Removed old file -- #{ f }" add_file( f ) puts "Added new file -- #{ f }" end else add_release( files.first ) unless release? puts "Release creation failed -- #{rel.release}" exit -1 end puts "Added release -- #{ rel.release }" puts "Added file -- #{ files.first }" files[1..-1].each do |f| add_file( f ) puts "Added file -- #{ f }" end end } puts "Release complete!" end |