#!/bin/sh # # Copyright (c) 2008 Stephen Haberman # # This hook creates new jobs for each branch in the Hudson continuous # integration tool. Besides creating the job if needed, the user who pushed is # added to the job's email list if they were not already there. # # Config # ------ # hooks.post-receive-hudson.url # The url to hudson, e.g. http://internalbox/hudson # hooks.post-receive-hudson.ignored # Whitespace separated list of branches to not make jobs for. # USER_EMAIL # Environment variable that should be set by your repository-specific # post-receive hook. E.g. export USER_EMAIL=${USER}@example.com # . $(dirname $0)/functions while read oldrev newrev refname ; do case "$refname" in refs/tags/*) exit 0 ;; refs/heads/*) short_refname=${refname##refs/heads/} ;; *) echo >&2 "*** Unknown type of update to $refname" exit 1 ;; esac ignored=" $(git config hooks.post-receive-hudson.ignored) " hudson_url=$(git config hooks.post-receive-hudson.url) if [[ $ignored =~ " $short_refname " ]] ; then exit 0 fi branch_config=$(wget -O - $hudson_url/job/${short_refname}/config.xml 2>/dev/null) if [ $? -ne 0 ] ; then # Create the job stable_config=$(wget -O - $hudson_url/job/stable/config.xml 2>/dev/null) if [ $? -ne 0 ] ; then display_error_message "Could not get existing Hudson config for ${short_refname}" exit 0 fi # Replace stable with our branch branch_config="${stable_config/stable$short_refname<}" # Add email to recipients list if [ "${branch_config/$USER_EMAIL/}" == "$branch_config" ] ; then branch_config="${branch_config//$USER_EMAIL }" fi # Make the new job wget --header "Content-Type: text/xml" --post-data="$branch_config" -O - "$hudson_url/createItem?name=${short_refname}" >/dev/null 2>/dev/null if [ $? -ne 0 ] ; then display_error_message "Could not create new Hudson job for ${short_refname}" exit 0 fi else # Add email to recipients list if [ "${branch_config/$USER_EMAIL/}" == "$branch_config" ] ; then branch_config="${branch_config//$USER_EMAIL }" # Update the config wget --header "Content-Type: text/xml" --post-data="$branch_config" -O - "$hudson_url/job/${short_refname}/config.xml" >/dev/null 2>/dev/null if [ $? -ne 0 ] ; then display_error_message "Could not add $USER_EMAIL to Hudson job ${short_refname}" exit 0 fi fi fi done exit 0