Automatically Creating Archives from Git Tags
At work, we've been moving all of our development processes to git. As part of that, I've encouraged that alphas, betas, and releases be tagged in git -- it's important to know which versions are in use where. Additionally, my director wanted archives (zips/tars) of each of these versions to make it easier to install the releases, particularly for the members of our department who are not git-friendly. I realized that with git hooks and our use of gitolite, we could produce automated archives when tags with the words alpha/beta/release are pushed to the gitolite server. The script below is placed in the $GL_PACKAGE_HOOKS/common directory. It uses the name of the repository to decide if it should be archived (matches $ALLOW_ARCHIVE) and where the archive should be put (within $ARCHIVE_DIR).
#!/bin/bash # post-receive gitolite hook to produce archives # Debug mode DEBUG=1 # Where to put archives ARCHIVE_DIR=/srv/archives/ # When to allow archiving (regex) ALLOW_ARCHIVE="^(drupal|moodle)" #### NO CONFIG BELOW #### # Check if this repo can be archived if [[ ! "$GL_REPO" =~ $ALLOW_ARCHIVE ]] ; then [[ $DEBUG ]] && echo "Archiving for this repository is disabled." exit 0 fi # Get repo name ARCHIVE_DIR="${ARCHIVE_DIR}/${GL_REPO}" while read rev1 rev2 ref ; do if [[ ! "$ref" =~ ^refs/tags ]] ; then [[ $DEBUG ]] && echo "Not a tag reference..." continue fi # Get tag name tag=${ref##*/} # Check if tag contains alpha, beta, or release: if [[ ! $tag =~ (alpha|beta|release) ]] ; then [[ $DEBUG ]] && echo "Not alpha/beta/release" continue fi # Ensure directory exists mkdir -p ${ARCHIVE_DIR} # Repo base name REPO_BASE=${GL_REPO##*/} # Make archive [[ $DEBUG ]] && echo git archive --format=zip --prefix=${REPO_BASE}/ -o "${ARCHIVE_DIR}/$tag.zip" $ref git archive --format=zip --prefix=${REPO_BASE}/ -o "${ARCHIVE_DIR}/$tag.zip" $ref done