104 lines
2.1 KiB
Bash
Executable File
104 lines
2.1 KiB
Bash
Executable File
#!/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
|