summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Koontz <jesselks@yahoo.com>2005-08-11 17:05:55 +0000
committerJesse Koontz <jesselks@yahoo.com>2005-08-11 17:05:55 +0000
commit8d71cd99c2af7f522f58a9fac9a5e2183685e74d (patch)
treef46d84483a0d9080c0fe8aff2d435539f600954f
parentcfaee58f4db99544e531962717c35639085065ef (diff)
downloadpuppet-8d71cd99c2af7f522f58a9fac9a5e2183685e74d.tar.gz
puppet-8d71cd99c2af7f522f58a9fac9a5e2183685e74d.tar.xz
puppet-8d71cd99c2af7f522f58a9fac9a5e2183685e74d.zip
Added rake for Puppet, '--version' to puppet and test case for Puppet.version
git-svn-id: https://reductivelabs.com/svn/puppet/library/trunk@537 980ebf18-57e1-0310-9a29-db15c13687c0
-rw-r--r--Rakefile290
-rw-r--r--lib/puppet.rb6
-rwxr-xr-xtest/puppet/tc_defaults.rb5
3 files changed, 301 insertions, 0 deletions
diff --git a/Rakefile b/Rakefile
new file mode 100644
index 000000000..593243efa
--- /dev/null
+++ b/Rakefile
@@ -0,0 +1,290 @@
+# Rakefile for Puppet
+
+begin
+ require 'rubygems'
+ require 'rake/gempackagetask'
+rescue Exception
+ nil
+end
+
+require 'rake/clean'
+require 'rake/testtask'
+
+#require 'rake/rdoctask'
+#CLEAN.include('**/*.o')
+#CLOBBER.include('doc/*')
+
+def announce(msg='')
+ STDERR.puts msg
+end
+
+
+# Determine the current version
+
+if `ruby -Ilib ./bin/puppet --version` =~ /\S+$/
+ CURRENT_VERSION = $&
+else
+ CURRENT_VERSION = "0.0.0"
+end
+
+if ENV['REL']
+ PKG_VERSION = ENV['REL']
+else
+ PKG_VERSION = CURRENT_VERSION
+end
+
+
+# The default task is run if rake is given no explicit arguments.
+
+desc "Default Task"
+task :default => :alltests
+
+# Test Tasks ---------------------------------------------------------
+
+task :u => :unittests
+task :a => :alltests
+
+Rake::TestTask.new(:alltests) do |t|
+ t.test_files = FileList['test/tc*.rb']
+ t.warning = true
+ t.verbose = false
+end
+
+Rake::TestTask.new(:unittests) do |t|
+ t.test_files = FileList['test/test']
+ t.warning = true
+ t.verbose = false
+end
+
+# SVN Tasks ----------------------------------------------------------
+# ... none.
+
+# Install rake using the standard install.rb script.
+
+desc "Install the application"
+task :install do
+ ruby "install.rb"
+end
+
+# Create a task to build the RDOC documentation tree.
+
+#rd = Rake::RDocTask.new("rdoc") { |rdoc|
+# rdoc.rdoc_dir = 'html'
+# rdoc.template = 'css2'
+# rdoc.title = "Puppet"
+# rdoc.options << '--line-numbers' << '--inline-source' << '--main' << 'README'
+# rdoc.rdoc_files.include('README', 'LICENSE', 'TODO', 'CHANGELOG')
+# rdoc.rdoc_files.include('lib/**/*.rb', 'doc/**/*.rdoc')
+#}
+
+# ====================================================================
+# Create a task that will package the Rake software into distributable
+# tar, zip and gem files.
+
+PKG_FILES = FileList[
+ 'install.rb',
+ '[A-Z]*',
+ 'lib/**/*.rb',
+ 'test/**/*.rb',
+ 'bin/**/*',
+ 'examples/**/*'
+]
+PKG_FILES.delete_if {|item| item.include?(".svn")}
+
+if ! defined?(Gem)
+ puts "Package Target requires RubyGEMs"
+else
+ spec = Gem::Specification.new do |s|
+
+ #### Basic information.
+
+ s.name = 'puppet'
+ s.version = PKG_VERSION
+ s.summary = "Puppet is a server configuration management tool."
+ s.description = <<-EOF
+ Puppet is a declarative language for expressing system configuration,
+ a client and server for distributing it, and a library for realizing
+ the configuration.
+ EOF
+ s.platform = Gem::Platform::RUBY
+
+ #### Dependencies and requirements.
+
+ s.add_dependency('facter', '>= 1.0.0')
+ #s.requirements << ""
+
+ s.files = PKG_FILES.to_a
+
+ #### Load-time details: library and application (you will need one or both).
+
+ s.require_path = 'lib' # Use these for libraries.
+
+ s.bindir = "bin" # Use these for applications.
+ s.executables = ["puppet", "puppetd", "puppetmasterd", "puppetdoc",
+ "filebucketd", "certmgr.rb"]
+ s.default_executable = "puppet"
+ s.autorequire = 'puppet'
+
+ #### Documentation and testing.
+
+ s.has_rdoc = false
+ #s.extra_rdoc_files = rd.rdoc_files.reject { |fn| fn =~ /\.rb$/ }.to_a
+ #s.rdoc_options <<
+ # '--title' << 'Puppet - Configuration Management' <<
+ # '--main' << 'README' <<
+ # '--line-numbers'
+ s.test_file = "test/test"
+
+ #### Signing key and cert chain
+ #s.signing_key = '/..../gem-private_key.pem'
+ #s.cert_chain = ['gem-public_cert.pem']
+
+ #### Author and project details.
+
+ s.author = "Luke Kanies"
+ s.email = "dev@reductivelabs.com"
+ s.homepage = "http://reductivelabs.com/projects/puppet"
+ #s.rubyforge_project = "puppet"
+ end
+
+ Rake::GemPackageTask.new(spec) do |pkg|
+ pkg.need_zip = true
+ pkg.need_tar = true
+ end
+end
+
+# Misc tasks =========================================================
+
+#ARCHIVEDIR = '/tmp'
+
+#task :archive => [:package] do
+# cp FileList["pkg/*.tgz", "pkg/*.zip", "pkg/*.gem"], ARCHIVEDIR
+#end
+
+# Define an optional publish target in an external file. If the
+# publish.rf file is not found, the publish targets won't be defined.
+
+#load "publish.rf" if File.exist? "publish.rf"
+
+# Support Tasks ------------------------------------------------------
+
+def egrep(pattern)
+ Dir['**/*.rb'].each do |fn|
+ count = 0
+ open(fn) do |f|
+ while line = f.gets
+ count += 1
+ if line =~ pattern
+ puts "#{fn}:#{count}:#{line}"
+ end
+ end
+ end
+ end
+end
+
+desc "Look for TODO and FIXME tags in the code"
+task :todo do
+ egrep "/#.*(FIXME|TODO|TBD)/"
+end
+
+#desc "Look for Debugging print lines"
+#task :dbg do
+# egrep /\bDBG|\bbreakpoint\b/
+#end
+
+#desc "List all ruby files"
+#task :rubyfiles do
+# puts Dir['**/*.rb'].reject { |fn| fn =~ /^pkg/ }
+# puts Dir['**/bin/*'].reject { |fn| fn =~ /svn|(~$)|(\.rb$)/ }
+#end
+
+# --------------------------------------------------------------------
+# Creating a release
+
+desc "Make a new release"
+task :release => [
+ :prerelease,
+ :clobber,
+ :alltests,
+ :update_version,
+ :package,
+ :tag] do
+
+ announce
+ announce "**************************************************************"
+ announce "* Release #{PKG_VERSION} Complete."
+ announce "* Packages ready to upload."
+ announce "**************************************************************"
+ announce
+end
+
+# Validate that everything is ready to go for a release.
+task :prerelease do
+ announce
+ announce "**************************************************************"
+ announce "* Making RubyGem Release #{PKG_VERSION}"
+ announce "* (current version #{CURRENT_VERSION})"
+ announce "**************************************************************"
+ announce
+
+ # Is a release number supplied?
+ unless ENV['REL']
+ fail "Usage: rake release REL=x.y.z [REUSE=tag_suffix]"
+ end
+
+ # Is the release different than the current release.
+ # (or is REUSE set?)
+ if PKG_VERSION == CURRENT_VERSION && ! ENV['REUSE']
+ fail "Current version is #{PKG_VERSION}, must specify REUSE=tag_suffix to reuse version"
+ end
+
+ # Are all source files checked in?
+ if ENV['RELTEST']
+ announce "Release Task Testing, skipping checked-in file test"
+ else
+ announce "Checking for unchecked-in files..."
+ data = `svn -q update`
+ unless data =~ /^$/
+ fail "SVN update is not clean ... do you have unchecked-in files?"
+ end
+ announce "No outstanding checkins found ... OK"
+ end
+end
+
+task :update_version => [:prerelease] do
+ if PKG_VERSION == CURRENT_VERSION
+ announce "No version change ... skipping version update"
+ else
+ announce "Updating Puppet version to #{PKG_VERSION}"
+ open("lib/puppet.rb") do |rakein|
+ open("lib/puppet.rb.new", "w") do |rakeout|
+ rakein.each do |line|
+ if line =~ /^PUPPETVERSION\s*=\s*/
+ rakeout.puts "PUPPETVERSION = '#{PKG_VERSION}'"
+ else
+ rakeout.puts line
+ end
+ end
+ end
+ end
+ mv "lib/puppet.rb.new", "lib/puppet.rb"
+ if ENV['RELTEST']
+ announce "Release Task Testing, skipping commiting of new version"
+ else
+ sh %{svn commit -m "Updated to version #{PKG_VERSION}" lib/puppet.rb}
+ end
+ end
+end
+
+desc "Tag all the SVN files with the latest release number (REL=x.y.z)"
+task :tag => [:prerelease] do
+ reltag = "REL_#{PKG_VERSION.gsub(/\./, '_')}"
+ reltag << ENV['REUSE'].gsub(/\./, '_') if ENV['REUSE']
+ announce "Tagging SVN copy with [#{reltag}]"
+ if ENV['RELTEST']
+ announce "Release Task Testing, skipping SVN tagging"
+ else
+ #sh %{svn copy ../trunk/ ../tags/#{reltag}}
+ end
+end
+
diff --git a/lib/puppet.rb b/lib/puppet.rb
index b697c4d5e..93008de62 100644
--- a/lib/puppet.rb
+++ b/lib/puppet.rb
@@ -17,6 +17,12 @@ require 'puppet/log'
#
# it's also a place to find top-level commands like 'debug'
module Puppet
+ PUPPETVERSION="0.0"
+
+ def Puppet.version
+ return PUPPETVERSION
+ end
+
class Error < RuntimeError
attr_accessor :stack, :line, :file
def initialize(message)
diff --git a/test/puppet/tc_defaults.rb b/test/puppet/tc_defaults.rb
index 0f46e6496..1bb7e9afa 100755
--- a/test/puppet/tc_defaults.rb
+++ b/test/puppet/tc_defaults.rb
@@ -15,6 +15,11 @@ class TestPuppetDefaults < Test::Unit::TestCase
manifest masterlog}
@@normals = %w{puppetport masterport server}
@@booleans = %w{rrdgraph noop}
+
+ def testVersion
+ assert( Puppet.version =~ /^[0-9]+(\.[0-9]+)*$/ )
+ end
+
def testStringOrParam
[@@dirs,@@files,@@booleans].flatten.each { |param|
assert_nothing_raised { Puppet[param] }