Finish combining to one script, make nifty helpers

This commit is contained in:
Joe Ferguson 2014-12-16 10:39:57 -08:00
parent 0c8a366888
commit 9318c9a41f
3 changed files with 12 additions and 132 deletions

View File

@ -254,14 +254,14 @@ while [ "$#" -gt 0 ]; do
continue
fi
echo "Processing $repoTag ..."
thisLog="$logDir/$subcommand-$repoTag.log"
touch "$thisLog"
ln -sf "$thisLog" "$latestLogDir/$(basename "$thisLog")"
case "$subcommand" in
build)
echo "Processing $repoTag ..."
if ! ( cd "$gitRepo" && git rev-parse --verify "${gitRef}^{commit}" &> /dev/null ); then
echo "- failed; invalid ref: $gitRef"
didFail=1
@ -321,8 +321,9 @@ while [ "$#" -gt 0 ]; do
push)
for namespace in $namespaces; do
if [ "$doPush" ]; then
if ! "$docker" push "$namespace/$repoTag"; then
echo >&2 "- $namespace/$repoTag failed to push!"
echo "Pushing $namespace/$repoTag..."
if ! "$docker" push "$namespace/$repoTag" &> "$thisLog"; then
echo >&2 "- $namespace/$repoTag failed to push; see $thisLog"
fi
else
echo "$docker push" "$namespace/$repoTag"

6
build.sh Executable file
View File

@ -0,0 +1,6 @@
#!/bin/bash
set -e
dir="$(dirname "$(readlink -f "$BASH_SOURCE")")"
exec "$dir/bashbrew.sh" build "$@"

129
push.sh
View File

@ -1,133 +1,6 @@
#!/bin/bash
set -e
# so we can have fancy stuff like !(pattern)
shopt -s extglob
dir="$(dirname "$(readlink -f "$BASH_SOURCE")")"
library="$dir/../library"
logs="$dir/logs"
namespaces='library stackbrew'
docker='docker'
library="$(readlink -f "$library")"
logs="$(readlink -f "$logs")"
# TODO actually log stuff
# arg handling: all args are [repo|repo:tag]
usage() {
cat <<EOUSAGE
usage: $0 [options] [repo[:tag] ...]
ie: $0 --all
$0 debian ubuntu:12.04
This script pushes the specified Docker images from library that are built
and tagged in the specified namespaces.
options:
--help, -h, -? Print this help message
--all Pushes all Docker images built for the given namespaces
--no-push Don't actually push the images to the Docker Hub
--library="$library"
Where to find repository manifest files
--namespaces="$namespaces"
Space separated list of namespaces to tag images in after
building
--docker="$docker"
Use a custom Docker binary.
EOUSAGE
}
opts="$(getopt -o 'h?' --long 'help,all,no-push,library:,logs:,namespaces:,docker:' -- "$@" || { usage >&2 && false; })"
eval set -- "$opts"
doPush=1
buildAll=
while true; do
flag=$1
shift
case "$flag" in
--help|-h|'-?')
usage
exit 0
;;
--all) buildAll=1 ;;
--no-push) doPush= ;;
--library) library="$1" && shift ;;
--logs) logs="$1" && shift ;;
--namespaces) namespaces="$1" && shift ;;
--docker) docker="$1" && shift ;;
--)
break
;;
*)
{
echo "error: unknown flag: $flag"
usage
} >&2
exit 1
;;
esac
done
repos=()
if [ "$buildAll" ]; then
repos=( "$library"/!(MAINTAINERS) )
fi
repos+=( "$@" )
repos=( "${repos[@]%/}" )
if [ "${#repos[@]}" -eq 0 ]; then
echo >&2 'error: no repos specified'
usage >&2
exit 1
fi
for repoTag in "${repos[@]}"; do
repo="${repoTag%%:*}"
tag="${repoTag#*:}"
[ "$repo" != "$tag" ] || tag=
if [ -f "$repo" ]; then
repoFile="$repo"
repo="$(basename "$repoFile")"
repoTag="${repo}${tag:+:$tag}"
else
repoFile="$library/$repo"
fi
repoFile="$(readlink -f "$repoFile")"
# parse the repo library file
IFS=$'\n'
tagList=( $(awk -F ': +' '!/^#|^\s*$/ { print $1 }' "$repoFile") )
unset IFS
tags=()
for tag in "${tagList[@]}"; do
tags+=( "$repo:$tag" )
done
pushes=()
if [ "$repo" = "$repoTag" ]; then
pushes=( "${tags[@]}" )
else
pushes+=( "$repoTag" )
fi
for pushTag in "${pushes[@]}"; do
for namespace in $namespaces; do
if [ "$doPush" ]; then
if ! "$docker" push "$namespace/$pushTag"; then
echo >&2 "- $namespace/$pushTag failed to push!"
fi
else
echo "$docker push" "$namespace/$pushTag"
fi
done
done
done
exec "$dir/bashbrew.sh" push "$@"