Rakefile in sysexits-1.0.1 vs Rakefile in sysexits-1.0.2

- old
+ new

@@ -1,365 +1,87 @@ -#!rake -*- ruby -*- -# -# sysexits rakefile -# -# Based on various other Rakefiles, especially one by Ben Bleything -# -# Copyright (c) 2007-2010 The FaerieMUD Consortium -# -# Authors: -# * Michael Granger <ged@FaerieMUD.org> -# +#!/usr/bin/env rake +#encoding: utf-8 -BEGIN { - require 'rbconfig' - require 'pathname' - basedir = Pathname.new( __FILE__ ).dirname +require 'hoe' - libdir = basedir + "lib" - extdir = libdir + Config::CONFIG['sitearch'] +Hoe.plugin :mercurial +Hoe.plugin :yard +Hoe.plugin :signing - $LOAD_PATH.unshift( basedir.to_s ) unless $LOAD_PATH.include?( basedir.to_s ) - $LOAD_PATH.unshift( libdir.to_s ) unless $LOAD_PATH.include?( libdir.to_s ) - $LOAD_PATH.unshift( extdir.to_s ) unless $LOAD_PATH.include?( extdir.to_s ) -} +Hoe.plugins.delete :rubyforge -begin - require 'readline' - include Readline -rescue LoadError - # Fall back to a plain prompt - def readline( text ) - $stderr.print( text.chomp ) - return $stdin.gets - end -end +hoespec = Hoe.spec 'sysexits' do + self.readme_file = 'README.md' -begin - require 'rubygems' -rescue LoadError - module Gem - class Specification; end - end -end + self.developer 'Michael Granger', 'ged@FaerieMUD.org' -require 'rbconfig' -require 'rake' -require 'rake/testtask' -require 'rake/packagetask' -require 'rake/clean' -# require 'rake/191_compat.rb' + self.extra_dev_deps << + ['rspec', '~> 2.1.0'] -$dryrun = false + self.spec_extras[:licenses] = ["BSD"] + self.spec_extras[:post_install_message] = %{ + Get ready to be amazed. I'll bet you can't wait to Exit Like + a Pro®! + + Well, if you want, you can do it right from the command-line! Check + this out: + + ruby -rubygems -e \\ + 'require "sysexits"; include Sysexits; exit :software_error' \\ + || echo $? -### Config constants -BASEDIR = Pathname.new( __FILE__ ).dirname.relative_path_from( Pathname.getwd ) -BINDIR = BASEDIR + 'bin' -LIBDIR = BASEDIR + 'lib' -EXTDIR = BASEDIR + 'ext' -DOCSDIR = BASEDIR + 'docs' -PKGDIR = BASEDIR + 'pkg' -DATADIR = BASEDIR + 'data' + I know, I know: so awesome right? Okay, I'll let you bask in the + warn glow of superior systems-programming now. -MANUALDIR = DOCSDIR + 'manual' + }.gsub( /^\t+/m, '' ) -PROJECT_NAME = 'sysexits' -PKG_NAME = PROJECT_NAME.downcase -PKG_SUMMARY = 'Exit status codes for system programs.' + self.spec_extras[:signing_key] = '/Volumes/Keys/ged-private_gem_key.pem' -# Cruisecontrol stuff -CC_BUILD_LABEL = ENV['CC_BUILD_LABEL'] -CC_BUILD_ARTIFACTS = ENV['CC_BUILD_ARTIFACTS'] || 'artifacts' + self.require_ruby_version( '>=1.8.7' ) + self.hg_sign_tags = true if self.respond_to?( :hg_sign_tags ) -VERSION_FILE = LIBDIR + 'sysexits.rb' -if VERSION_FILE.exist? && buildrev = ENV['CC_BUILD_LABEL'] - PKG_VERSION = VERSION_FILE.read[ /VERSION\s*=\s*['"](\d+\.\d+\.\d+)['"]/, 1 ] + '.' + buildrev -elsif VERSION_FILE.exist? - PKG_VERSION = VERSION_FILE.read[ /VERSION\s*=\s*['"](\d+\.\d+\.\d+)['"]/, 1 ] + self.yard_opts = [ '--use-cache', '--protected', '--verbose' ] + self.rdoc_locations << "deveiate:/usr/local/www/public/code/#{remote_rdoc_dir}" end -PKG_VERSION = '0.0.0' unless defined?( PKG_VERSION ) && !PKG_VERSION.nil? +ENV['VERSION'] ||= hoespec.spec.version.to_s -PKG_FILE_NAME = "#{PKG_NAME.downcase}-#{PKG_VERSION}" -GEM_FILE_NAME = "#{PKG_FILE_NAME}.gem" +begin + include Hoe::MercurialHelpers -# Universal VCS constants -DEFAULT_EDITOR = 'vi' -COMMIT_MSG_FILE = 'commit-msg.txt' -FILE_INDENT = " " * 12 -LOG_INDENT = " " * 3 + ### Task: prerelease + desc "Append the package build number to package versions" + task :pre do + rev = get_numeric_rev() + trace "Current rev is: %p" % [ rev ] + hoespec.spec.version.version << "pre#{rev}" + Rake::Task[:gem].clear -EXTCONF = EXTDIR + 'extconf.rb' - -ARTIFACTS_DIR = Pathname.new( CC_BUILD_ARTIFACTS ) - -TEXT_FILES = Rake::FileList.new( %w[Rakefile ChangeLog README* LICENSE] ) -BIN_FILES = Rake::FileList.new( "#{BINDIR}/*" ) -LIB_FILES = Rake::FileList.new( "#{LIBDIR}/**/*.rb" ) -EXT_FILES = Rake::FileList.new( "#{EXTDIR}/**/*.{c,h,rb}" ) -DATA_FILES = Rake::FileList.new( "#{DATADIR}/**/*" ) - -SPECDIR = BASEDIR + 'spec' -SPECLIBDIR = SPECDIR + 'lib' -SPEC_FILES = Rake::FileList.new( "#{SPECDIR}/**/*_spec.rb", "#{SPECLIBDIR}/**/*.rb" ) - -TESTDIR = BASEDIR + 'tests' -TEST_FILES = Rake::FileList.new( "#{TESTDIR}/**/*.tests.rb" ) - -RAKE_TASKDIR = BASEDIR + 'rake' -RAKE_TASKLIBS = Rake::FileList.new( "#{RAKE_TASKDIR}/*.rb" ) -PKG_TASKLIBS = Rake::FileList.new( "#{RAKE_TASKDIR}/{191_compat,helpers,packaging,rdoc,testing}.rb" ) -PKG_TASKLIBS.include( "#{RAKE_TASKDIR}/manual.rb" ) if MANUALDIR.exist? - -RAKE_TASKLIBS_URL = 'http://repo.deveiate.org/rake-tasklibs' - -LOCAL_RAKEFILE = BASEDIR + 'Rakefile.local' - -EXTRA_PKGFILES = Rake::FileList.new - -RELEASE_FILES = TEXT_FILES + - SPEC_FILES + - TEST_FILES + - BIN_FILES + - LIB_FILES + - EXT_FILES + - DATA_FILES + - RAKE_TASKLIBS + - EXTRA_PKGFILES - - -RELEASE_FILES << LOCAL_RAKEFILE.to_s if LOCAL_RAKEFILE.exist? - -RELEASE_ANNOUNCE_ADDRESSES = [ - "Ruby-Talk List <ruby-talk@ruby-lang.org>", -] - -COVERAGE_MINIMUM = ENV['COVERAGE_MINIMUM'] ? Float( ENV['COVERAGE_MINIMUM'] ) : 85.0 -RCOV_EXCLUDES = 'spec,tests,/Library/Ruby,/var/lib,/usr/local/lib' -RCOV_OPTS = [ - '--exclude', RCOV_EXCLUDES, - '--xrefs', - '--save', - '--callsites', - #'--aggregate', 'coverage.data' # <- doesn't work as of 0.8.1.2.0 - ] - - -### Load some task libraries that need to be loaded early -if !RAKE_TASKDIR.exist? - $stderr.puts "It seems you don't have the build task directory. Shall I fetch it " - ans = readline( "for you? [y]" ) - ans = 'y' if !ans.nil? && ans.empty? - - if ans =~ /^y/i - $stderr.puts "Okay, fetching #{RAKE_TASKLIBS_URL} into #{RAKE_TASKDIR}..." - system 'hg', 'clone', RAKE_TASKLIBS_URL, "./#{RAKE_TASKDIR}" - if ! $?.success? - fail "Damn. That didn't work. Giving up; maybe try manually fetching?" + Gem::PackageTask.new( hoespec.spec ) do |pkg| + pkg.need_zip = true + pkg.need_tar = true end - else - $stderr.puts "Then I'm afraid I can't continue. Best of luck." - fail "Rake tasklibs not present." end - RAKE_TASKLIBS.include( "#{RAKE_TASKDIR}/*.rb" ) -end - -require RAKE_TASKDIR + 'helpers.rb' -include RakefileHelpers - -# Set the build ID if the mercurial executable is available -if hg = which( 'hg' ) - id = `#{hg} id -n`.chomp - PKG_BUILD = "pre%03d" % [(id.chomp[ /^[[:xdigit:]]+/ ] || '1')] -else - PKG_BUILD = 'pre000' -end -SNAPSHOT_PKG_NAME = "#{PKG_FILE_NAME}.#{PKG_BUILD}" -SNAPSHOT_GEM_NAME = "#{SNAPSHOT_PKG_NAME}.gem" - -# Documentation constants -API_DOCSDIR = DOCSDIR + 'api' -README_FILE = TEXT_FILES.find {|path| path =~ /^README/ } || 'README' -RDOC_OPTIONS = [ - '--tab-width=4', - '--show-hash', - '--include', BASEDIR.to_s, - "--main=#{README_FILE}", - "--title=#{PKG_NAME}", - ] -YARD_OPTIONS = [ - '--use-cache', - '--no-private', - '--protected', - '-r', README_FILE, - '--exclude', 'extconf\\.rb', - '--files', 'ChangeLog,LICENSE', - '--output-dir', API_DOCSDIR.to_s, - '--title', "#{PKG_NAME} #{PKG_VERSION}", - ] - -# Release constants -SMTP_HOST = "mail.faeriemud.org" -SMTP_PORT = 465 # SMTP + SSL - -# Project constants -PROJECT_HOST = 'deveiate.org' -PROJECT_PUBDIR = '/usr/local/www/public/code/' -PROJECT_DOCDIR = "#{PROJECT_PUBDIR}/#{PKG_NAME}" -PROJECT_SCPPUBURL = "#{PROJECT_HOST}:#{PROJECT_PUBDIR}" -PROJECT_SCPDOCURL = "#{PROJECT_HOST}:#{PROJECT_DOCDIR}" - -GEM_PUBHOST = 'rubygems.org' - -# Gem dependencies: gemname => version -DEPENDENCIES = { -} - -# Developer Gem dependencies: gemname => version -DEVELOPMENT_DEPENDENCIES = { - 'rake' => '>= 0.8.7', - 'rcodetools' => '>= 0.7.0.0', - 'rcov' => '>= 0.8.1.2.0', - 'rdoc' => '>= 2.4.3', - 'RedCloth' => '>= 4.0.3', - 'rspec' => '>= 1.2.6', - 'ruby-termios' => '>= 0.9.6', - 'text-format' => '>= 1.0.0', - 'tmail' => '>= 1.2.3.1', - 'diff-lcs' => '>= 1.1.2', -} - -# Non-gem requirements: packagename => version -REQUIREMENTS = { -} - -# RubyGem specification -GEMSPEC = Gem::Specification.new do |gem| - gem.name = PKG_NAME.downcase - gem.version = PKG_VERSION - - gem.summary = PKG_SUMMARY - gem.description = [ - "Have you ever wanted to call exit() with an error condition, but", - "weren't sure what exit status to use? No? Maybe it's just me, then.", - "", - "Anyway, I was reading manpages late one evening before retiring to ", - "bed in my palatial estate in rural Oregon, and I stumbled across ", - "sysexits(3). Much to my chagrin, I couldn't find a 'sysexits' for", - "Ruby! Well, for the other 2 people that actually care about style(9) ", - "as it applies to Ruby code, now there is one!", - ].join( "\n" ) - gem.post_install_message = [ - "Happy exiting!", - ].join( "\n" ) - - gem.authors = "Michael Granger" - gem.email = ["ged@FaerieMUD.org"] - gem.homepage = 'http://rubygems.org/gems/sysexits' - - gem.has_rdoc = true - gem.rdoc_options = RDOC_OPTIONS - gem.extra_rdoc_files = TEXT_FILES - [ 'Rakefile' ] - - gem.bindir = BINDIR.relative_path_from(BASEDIR).to_s - gem.executables = BIN_FILES.select {|pn| File.executable?(pn) }. - collect {|pn| File.basename(pn) } - gem.require_paths << EXTDIR.relative_path_from( BASEDIR ).to_s if EXTDIR.exist? - - if EXTCONF.exist? - gem.extensions << EXTCONF.relative_path_from( BASEDIR ).to_s + ### Make the ChangeLog update if the repo has changed since it was last built + file '.hg/branch' + file 'ChangeLog' => '.hg/branch' do |task| + $stderr.puts "Updating the changelog..." + content = make_changelog() + File.open( task.name, 'w', 0644 ) do |fh| + fh.print( content ) + end end - gem.files = RELEASE_FILES - gem.test_files = SPEC_FILES + # Rebuild the ChangeLog immediately before release + task :prerelease => 'ChangeLog' - # signing key and certificate chain - gem.signing_key = '/Volumes/Keys/ged-private_gem_key.pem' - gem.cert_chain = [File.expand_path('~/.gem/ged-public_gem_cert.pem')] - - DEPENDENCIES.each do |name, version| - version = '>= 0' if version.length.zero? - gem.add_runtime_dependency( name, version ) +rescue NameError => err + task :no_hg_helpers do + fail "Couldn't define the :pre task: %s: %s" % [ err.class.name, err.message ] end - REQUIREMENTS.each do |name, version| - gem.requirements << [ name, version ].compact.join(' ') - end -end + task :pre => :no_hg_helpers + task 'ChangeLog' => :no_hg_helpers -$trace = Rake.application.options.trace ? true : false -$dryrun = Rake.application.options.dryrun ? true : false -$include_dev_dependencies = false - -# Load any remaining task libraries -RAKE_TASKLIBS.each do |tasklib| - next if tasklib.to_s =~ %r{/helpers\.rb$} - begin - trace " loading tasklib %s" % [ tasklib ] - import tasklib - rescue ScriptError => err - fail "Task library '%s' failed to load: %s: %s" % - [ tasklib, err.class.name, err.message ] - trace "Backtrace: \n " + err.backtrace.join( "\n " ) - rescue => err - log "Task library '%s' failed to load: %s: %s. Some tasks may not be available." % - [ tasklib, err.class.name, err.message ] - trace "Backtrace: \n " + err.backtrace.join( "\n " ) - end -end - -# Load any project-specific rules defined in 'Rakefile.local' if it exists -import LOCAL_RAKEFILE if LOCAL_RAKEFILE.exist? - - -##################################################################### -### T A S K S -##################################################################### - -### Default task -task :default => [:clean, :local, :spec, :apidocs, :package] - -### Task the local Rakefile can append to -- no-op by default -task :local - -### Task: clean -CLEAN.include 'coverage', '**/*.orig', '**/*.rej' -CLOBBER.include 'artifacts', 'coverage.info', 'ChangeLog', PKGDIR - -### Task: changelog -file 'ChangeLog' do |task| - log "Updating #{task.name}" - - changelog = make_changelog() - File.open( task.name, 'w' ) do |fh| - fh.print( changelog ) - end -end - - -### Task: cruise (Cruisecontrol task) -desc "Cruisecontrol build" -task :cruise => [:clean, 'spec:quiet', :package] do |task| - raise "Artifacts dir not set." if ARTIFACTS_DIR.to_s.empty? - artifact_dir = ARTIFACTS_DIR.cleanpath + (CC_BUILD_LABEL || Time.now.strftime('%Y%m%d-%T')) - artifact_dir.mkpath - - coverage = BASEDIR + 'coverage' - if coverage.exist? && coverage.directory? - $stderr.puts "Copying coverage stats..." - FileUtils.cp_r( 'coverage', artifact_dir ) - end - - $stderr.puts "Copying packages..." - FileUtils.cp_r( FileList['pkg/*'].to_a, artifact_dir ) -end - - -desc "Update the build system to the latest version" -task :update_build do - log "Updating the build system" - run 'hg', '-R', RAKE_TASKDIR, 'pull', '-u' - log "Updating the Rakefile" - sh 'rake', '-f', RAKE_TASKDIR + 'Metarakefile' end