1078eddf11
This patch permits symlinks in the docker build. Normally docker does not permit symlinked files in the build context sent to the docker server. To work around this problem, a secure directory is created in /tmp and the container contents are copied to that directory. Any symlinks are turned into their non-symlinked equivalents. Change-Id: I38cd5aeed4c73b90449354a0979fc6ddf7891ccb Implements-blueprint: linked-build
110 lines
2.0 KiB
Bash
Executable File
110 lines
2.0 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
TOPDIR=$(git rev-parse --show-toplevel)
|
|
IMGDIR="$(cd "$(dirname "$0")" && pwd)"
|
|
|
|
RELEASE_NAMESPACE=kollaglue
|
|
NAMESPACE=kollaglue
|
|
PREFIX=fedora-rdo-
|
|
TAG=$(git rev-parse --short HEAD)
|
|
|
|
usage () {
|
|
cat <<EOF
|
|
Usage: $0 [options]
|
|
|
|
Options:
|
|
|
|
--namespace, -n <namespace>
|
|
--tag, -t <tag>
|
|
--push, -p
|
|
--no-cache, -N
|
|
--release
|
|
EOF
|
|
}
|
|
|
|
[ -f $TOPDIR/.buildconf ] && . $TOPDIR/.buildconf
|
|
[ -f $IMGDIR/.buildconf ] && . $IMGDIR/.buildconf
|
|
|
|
ARGS=$(getopt -o hn:t:pN -l help,namespace:,push,release,tag:,no-cache -- "$@") || { usage >&2; exit 2; }
|
|
|
|
eval set -- "$ARGS"
|
|
|
|
while :; do
|
|
case "$1" in
|
|
|
|
(--help|-h) usage
|
|
exit 0
|
|
;;
|
|
|
|
(--release) MODE=release
|
|
NAMESPACE=$RELEASE_NAMESPACE
|
|
TAG=latest
|
|
;;
|
|
|
|
(--tag|-t) shift
|
|
TAG="$1"
|
|
;;
|
|
|
|
(--push|-p) PUSH=1
|
|
;;
|
|
|
|
(--no-cache|-N)
|
|
BUILDFLAGS="${BUILDFLAGS} --no-cache"
|
|
;;
|
|
|
|
(--namespace|-n)
|
|
shift
|
|
NAMESPACE="$1"
|
|
;;
|
|
|
|
(--) break
|
|
;;
|
|
|
|
esac
|
|
|
|
shift
|
|
done
|
|
|
|
if [ "$NAMESPACE" = "$RELEASE_NAMESPACE" ] \
|
|
&& [ "$TAG" = "latest" ] \
|
|
&& ! [ "$MODE" = "release" ]; then
|
|
|
|
echo "ERROR: use --release to build a release image" >&2
|
|
exit 1
|
|
fi
|
|
|
|
IMAGE="${PREFIX}${IMGDIR##*/}"
|
|
FULLIMAGE="${NAMESPACE}/${IMAGE}${TAG:+:${TAG}}"
|
|
|
|
cat <<EOF
|
|
======================================================================
|
|
$FULLIMAGE
|
|
======================================================================
|
|
|
|
EOF
|
|
|
|
if [ "$MODE" = "release" ]; then
|
|
echo "*** YOU ARE BUILDING A RELEASE IMAGE ***"
|
|
echo
|
|
fi
|
|
|
|
TMPDIR=$(mktemp -d /tmp/output.XXXXXXXXXX)
|
|
cp -aL $IMGDIR/* $TMPDIR
|
|
|
|
if ! docker build ${BUILDFLAGS} -t "$FULLIMAGE" $TMPDIR; then
|
|
echo "ERROR: failed to build $FULLIMAGE"
|
|
exit 1
|
|
fi
|
|
rm -rf $TMPDIR
|
|
|
|
echo "Built: $FULLIMAGE"
|
|
|
|
if [ "$PUSH" = 1 ]; then
|
|
if ! docker push "$FULLIMAGE"; then
|
|
echo "ERROR: failed to push $FULLIMAGE"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Pushed: $FULLIMAGE"
|
|
fi
|