Skip to content

Instantly share code, notes, and snippets.

@silviud
Last active August 29, 2015 14:01
Show Gist options
  • Save silviud/dc8bdb62ded2a2b4a0f4 to your computer and use it in GitHub Desktop.
Save silviud/dc8bdb62ded2a2b4a0f4 to your computer and use it in GitHub Desktop.
Pre-receive git hook for chef versions
#!/opt/gitlab/embedded/bin/ruby
# pre-receive
def header
puts "##########################"
end
def error msg
header
puts "Can't accept your commit !"
puts msg
header
end
# 1. Read STDIN (Format: "from_commit to_commit branch_name")
from, to, branch = ARGF.read.split " "
puts from, to, branch
# 2. Only deploy if master branch was pushed
if (branch =~ /master$/)
puts "Received branch #{branch}, deploying ..."
puts "Check cookbook version"
old_ver = `git show #{from}:metadata.rb |grep version`
new_ver = `git show #{to}:metadata.rb |grep version`
puts "OLD VER #{old_ver} -> "
puts "NEW VER #{new_ver}"
_old_ver = old_ver.split()
ver_orig= _old_ver[1][1...-1].split('.').join().to_i
_new_ver = new_ver.split()
ver_new = _new_ver[1][1...-1].split('.').join().to_i
unless ver_new > ver_orig
puts error "New version #{ver_new} is not bigger than old version #{ver_orig} "
exit 1
end
exit
end
# http://stackoverflow.com/questions/610208/how-to-retrieve-a-single-file-from-specific-revision-in-git
#
require "pp"
require "json"
require "net/http"
# last_log = `git log -1 --oneline`
# last_commit = last_log.split()[0]
# f = `git show #{last_commit}:cookbooks/u_nginx/metadata.rb|grep version`
# ver = f.split()[1]
# puts ver[1...-1].split('.').join().to_i
def _get_url(url)
resp = Net::HTTP.get_response(URI.parse(url))
return resp.body
end
def get_snc_change(chg)
url = "http://test/?format=JSONV2&chg=#{chg}"
return JSON.parse(_get_url(url))
end
# https://developer.yahoo.com/ruby/ruby-json.html
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment