summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--RELEASE_PROCESS.markdown18
-rw-r--r--lib/puppet/parser/functions/get_module_path.rb17
-rw-r--r--spec/unit/puppet/parser/functions/get_module_path_spec.rb42
3 files changed, 74 insertions, 3 deletions
diff --git a/RELEASE_PROCESS.markdown b/RELEASE_PROCESS.markdown
index ea40d5d..3982c84 100644
--- a/RELEASE_PROCESS.markdown
+++ b/RELEASE_PROCESS.markdown
@@ -1,13 +1,25 @@
-# Releasing this module #
+# Contributing to this module #
* Work in a topic branch
* Submit a github pull request
* Address any comments / feeback
* Merge into master using --no-ff
+
+# Releasing this module #
+
+ * This module adheres to http://semver.org/
+ * Look for API breaking changes using git diff vX.Y.Z..master
+ * If no API breaking changes, the minor version may be bumped.
+ * If there are API breaking changes, the major version must be bumped.
+ * If there are only small minor changes, the patch version may be bumped.
* Update the CHANGELOG
* Update the Modulefile
- * Create an annotated tag with git tag -a X.Y.Z -m 'version X.Y.Z'
+ * Commit these changes with a message along the lines of "Update CHANGELOG and
+ Modulefile for release"
+ * Create an annotated tag with git tag -a vX.Y.Z -m 'version X.Y.Z' (NOTE the
+ leading v as per semver.org)
* Push the tag with git push origin --tags
- * Build a new package with puppet-module
+ * Build a new package with puppet-module or the rake build task if it exists
* Publish the new package to the forge
+ * Bonus points for an announcement to puppet-users.
diff --git a/lib/puppet/parser/functions/get_module_path.rb b/lib/puppet/parser/functions/get_module_path.rb
new file mode 100644
index 0000000..4d2b50b
--- /dev/null
+++ b/lib/puppet/parser/functions/get_module_path.rb
@@ -0,0 +1,17 @@
+module Puppet::Parser::Functions
+ newfunction(:get_module_path, :type =>:rvalue, :doc => <<-EOT
+ Returns the absolute path of the specified module for the current
+ environment.
+
+ Example:
+ $module_path = get_module_path('stdlib')
+ EOT
+ ) do |args|
+ raise(Puppet::ParseError, "get_module_name(): Wrong number of arguments, expects one") unless args.size == 1
+ if module_path = Puppet::Module.find(args[0], compiler.environment.to_s)
+ module_path.path
+ else
+ raise(Puppet::ParseError, "Could not find module #{args[0]} in environment #{compiler.environment}")
+ end
+ end
+end
diff --git a/spec/unit/puppet/parser/functions/get_module_path_spec.rb b/spec/unit/puppet/parser/functions/get_module_path_spec.rb
new file mode 100644
index 0000000..d8340f4
--- /dev/null
+++ b/spec/unit/puppet/parser/functions/get_module_path_spec.rb
@@ -0,0 +1,42 @@
+#!/usr/bin/env rspec
+require 'puppet'
+require 'fileutils'
+require 'spec_helper'
+describe Puppet::Parser::Functions.function(:get_module_path) do
+ include PuppetSpec::Files
+
+ def get_scope(environment = 'production')
+ scope = Puppet::Parser::Scope.new
+ scope.compiler = Puppet::Parser::Compiler.new(Puppet::Node.new("floppy", :environment => environment))
+ scope
+ end
+ it 'should only allow one argument' do
+ expect { get_scope.function_get_module_path([]) }.should raise_error(Puppet::ParseError, /Wrong number of arguments, expects one/)
+ expect { get_scope.function_get_module_path(['1','2','3']) }.should raise_error(Puppet::ParseError, /Wrong number of arguments, expects one/)
+ end
+ it 'should raise an exception when the module cannot be found' do
+ expect { get_scope.function_get_module_path(['foo']) }.should raise_error(Puppet::ParseError, /Could not find module/)
+ end
+ describe 'when locating a module' do
+ let(:modulepath) { tmpdir('modulepath') }
+ let(:foo_path) { File.join(modulepath, 'foo') }
+ before(:each) { FileUtils.mkdir(foo_path) }
+ it 'should be able to find module paths from the modulepath setting' do
+ Puppet[:modulepath] = modulepath
+ get_scope.function_get_module_path(['foo']).should == foo_path
+ end
+ it 'should be able to find module paths when the modulepath is a list' do
+ Puppet[:modulepath] = modulepath + ":/tmp"
+ get_scope.function_get_module_path(['foo']).should == foo_path
+ end
+ it 'should be able to find module paths from the environment' do
+ conf_file = tmpfile('conffile')
+ File.open(conf_file, 'w') do |fh|
+ fh.write("[dansenvironment]\nmodulepath = #{modulepath}")
+ end
+ Puppet[:config] = conf_file
+ Puppet.parse_config
+ get_scope('dansenvironment').function_get_module_path(['foo']).should ==foo_path
+ end
+ end
+end