git.lirion.de

Of git, get, and gud

summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-x[-rw-r--r--]scripts/config_version-r10k.rb (renamed from scripts/code_manager_config_version.rb)1
-rwxr-xr-xscripts/config_version-rugged.rb25
-rwxr-xr-xscripts/config_version.sh31
3 files changed, 52 insertions, 5 deletions
diff --git a/scripts/code_manager_config_version.rb b/scripts/config_version-r10k.rb
index 521bcfb..beacabc 100644..100755
--- a/scripts/code_manager_config_version.rb
+++ b/scripts/config_version-r10k.rb
@@ -1,3 +1,4 @@
+#!/opt/puppetlabs/puppet/bin/ruby
require 'json'
require 'socket'
diff --git a/scripts/config_version-rugged.rb b/scripts/config_version-rugged.rb
new file mode 100755
index 0000000..abb3390
--- /dev/null
+++ b/scripts/config_version-rugged.rb
@@ -0,0 +1,25 @@
+#!/opt/puppetlabs/puppet/bin/ruby
+begin
+ require 'rugged'
+ require 'socket'
+rescue LoadError
+ t = Time.new
+ puts t.to_i
+else
+ environmentpath = ARGV[0]
+ environment = ARGV[1]
+
+ # Get the hostname of the Puppet master compiling the catalog.
+ # Sometimes the hostname is the fqdn, so we'll take the first segment.
+ compiling_master = Socket.gethostname.split('.').first
+
+ # Get the path to the environment being compiled.
+ repo = Rugged::Repository.discover(File.join(environmentpath, environment))
+ head = repo.head
+
+ # First 12 characters of the sha1 hash of the newest commit.
+ commit_id = head.target_id[0...11]
+
+ # Show the compiling master, environment name, and commit ID.
+ puts "#{compiling_master}-#{environment}-#{commit_id}"
+end
diff --git a/scripts/config_version.sh b/scripts/config_version.sh
index 1dc54f7..d6981a1 100755
--- a/scripts/config_version.sh
+++ b/scripts/config_version.sh
@@ -1,14 +1,35 @@
#!/bin/sh
+# Usage
if [ $# -ne 2 -o ! -d "$1" -o ! -d "$1/$2" ]; then
echo "usage: $0 <environmentpath> <environment>" >&2
exit 1
fi
-ruby=ruby
+# For portability, identify a preferred ruby executable to use
+ruby() {
+ [ -x /opt/puppetlabs/puppet/bin/ruby ] \
+ && /opt/puppetlabs/puppet/bin/ruby "$@" \
+ || /usr/bin/env ruby "$@"
+}
-if [ -x /opt/puppetlabs/puppet/bin/ruby ]; then
- ruby=/opt/puppetlabs/puppet/bin/ruby
-fi
+# Determine how best to calculate a config_version
+if [ -e $1/$2/.r10k-deploy.json ]; then
+ # The environment was deployed using r10k. We will calculate the config
+ # version using the r10k data.
+ ruby $1/$2/scripts/config_version-r10k.rb $1 $2
+
+elif [ -e /opt/puppetlabs/server/pe_version ]; then
+ # This is a Puppet Enterprise system and we can rely on the rugged ruby gem
+ # being available.
+ ruby $1/$2/scripts/config_version-rugged.rb $1 $2
+
+elif [ -x /usr/bin/git ]; then
+ # The git command is available.
+ /usr/bin/git --git-dir $1/$2/.git rev-parse HEAD
-"${ruby}" "$1/$2/scripts/code_manager_config_version.rb" "$1" "$2"
+else
+ # Nothing else available; just use the date.
+ date +%s
+
+fi