Over a million developers have joined DZone.

Git Pre Recieve Hook For Integrity

· Agile Zone

Reduce testing time & get feedback faster through automation. Read the Benefits of Parallel Testing, brought to you in partnership with Sauce Labs.

I’m getting married rather soon so time has been somewhat short (in a good way) for just hacking on stuff, but I’ve finally found a little bit of time to play with something I’ve been mulling over for a while. Namely a continuous deployment workflow using the integrity continous integration server.

I’m hoping to have an incredibly simple but fully operation example available at some point – mainly to act as a good discussion point. For now here’s my current pre-receive hook.

#!/usr/bin/env ruby

require 'rubygems'
require 'grit'
require 'nokogiri'
require 'open-uri'

# This is a pre-receive git hook designed to be part of a continuous
# deployment workflow using the Integrity continuous integration server

INTEGRITY = 'http://localhost:9292'
PROJECT = 'site'

# 1. Check if the build is currently broken
# 2. If it's broken check if the commit messages starts with
# [BUILD] and if so trigger a build
# 3. If it's broken and all messages don't have the prefix
# then stop the push
# 4. If the build is fine then let everything through

doc = Nokogiri::HTML(open("#{INTEGRITY}/#{PROJECT}"))
doc.css('div#last_build h1').each do |heading|
  content = heading.content.split
  @status = content[-1]
end

if @status == "failed"
  puts "Build currently broken, to force use the [BUILD] commit message prefix"
  old_rev, new_rev, ref_name = STDIN.gets.split

  repo = Grit::Repo.new(".")

  commits = repo.commits_between(old_rev, new_rev)

  commits.reverse.each do |c|
    short, long = c.message.split(/\n+/, 2)
    if short.slice(0..7) != "[BUILD]
puts "Cancelling push"
exit 1
end
end
end

 

The Agile Zone is brought to you in partnership with Sauce Labs. Discover how to optimize your DevOps workflows with our cloud-based automated testing infrastructure.

Topics:

Published at DZone with permission of Gareth Rushgrove, DZone MVB. See the original article here.

Opinions expressed by DZone contributors are their own.

The best of DZone straight to your inbox.

SEE AN EXAMPLE
Please provide a valid email address.

Thanks for subscribing!

Awesome! Check your inbox to verify your email so you can start receiving the latest in tech news and resources.
Subscribe

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}