#!/usr/bin/env bash # # Scan a branch directory for source tarballs and rebuild the releases.json # file for that branch. md5 and sha256 are added if present. The highest # numbered version is referenced as the latest release. # # Usage: $0 [-b branch] [-o outfile] /path/to/download/branch # USAGE="Usage: ${0##*/} [-b branch] [-o outfile] DIR" OUTPUT= BRANCH= DIR= die() { [ "$#" -eq 0 ] || echo "$*" >&2 exit 1 } err() { echo "$*" >&2 } quit() { [ "$#" -eq 0 -o -n "$QUIET" ] || echo "$*" exit 0 } emit_json() { printf '{\n "branch": "%s",\n' ${BRANCH} latest="" for file in $(find "$DIR/src" -name 'haproxy-[0-9]*.gz' -printf "%P\n" |grep -v '[0-9]-patches*' | sort -rV ); do rel="${file##*haproxy-}" rel="${rel%%.tar.*}" if [ -z "$latest" ]; then latest="$rel"; printf ' "latest_release": "%s",\n' ${latest} printf ' "releases": {\n' else printf ",\n" fi printf ' "%s": {\n' ${rel} printf ' "file": "%s"' ${file} if [ -s "$DIR/src/$file.md5" ]; then printf ',\n "md5": "%s"' $(awk '{print $1}' "$DIR/src/$file.md5") fi if [ -s "$DIR/src/$file.sha256" ]; then printf ',\n "sha256": "%s"' $(awk '{print $1}' "$DIR/src/$file.sha256") fi printf '\n }' done if [ -n "$latest" ]; then printf "\n }" ## "releases" fi printf '\n}\n' } ### main while [ -n "$1" -a -z "${1##-*}" ]; do case "$1" in -b) BRANCH="$2" ; shift 2 ;; -o) OUTPUT="$2" ; shift 2 ;; -h|--help) quit "$USAGE" ;; *) die "$USAGE" ;; esac done if [ $# -ne 1 ]; then die "$USAGE" fi DIR="$1" ; shift if [ -z "$DIR" ]; then die "Missing download directory name." fi if [ ! -d "$DIR/." ]; then die "Download directory doesn't exist : $DIR" fi if [ ! -d "$DIR/src" ]; then die "Download directory must contain 'src' : $DIR" fi if [ -z "$BRANCH" ]; then BRANCH=${DIR##*/} if [ -n "${BRANCH//[0-9.]}" ]; then die "Couldn't determine branch number from dir name: $BRANCH" fi fi # echo "debug: DIR=$DIR BRANCH=$BRANCH" if [ -n "$OUTPUT" ]; then emit_json > "$OUTPUT.tmp" mv -f "$OUTPUT.tmp" "$OUTPUT" rm -f "$OUTPUT.tmp" else emit_json fi