135 lines
3.1 KiB
Bash
Executable file
135 lines
3.1 KiB
Bash
Executable file
#!/bin/bash
|
|
set -e
|
|
|
|
BUILD_CONTAINER_NAME=hassio-cluster-build-$$
|
|
DOCKER_PUSH="true"
|
|
DOCKER_CACHE="true"
|
|
DOCKER_WITH_LATEST="true"
|
|
DOCKER_HUB=homeassistant
|
|
|
|
cleanup() {
|
|
echo "[INFO] Cleanup."
|
|
|
|
# Stop docker container
|
|
echo "[INFO] Cleaning up hassio-cluster-build container."
|
|
docker stop $BUILD_CONTAINER_NAME 2> /dev/null || true
|
|
docker rm --volumes $BUILD_CONTAINER_NAME 2> /dev/null || true
|
|
|
|
if [ "$1" == "fail" ]; then
|
|
exit 1
|
|
fi
|
|
}
|
|
trap 'cleanup fail' SIGINT SIGTERM
|
|
|
|
help () {
|
|
cat << EOF
|
|
Script for hassio docker build
|
|
create_hassio_cluster [options]
|
|
|
|
Options:
|
|
-h, --help
|
|
Display this help and exit.
|
|
|
|
-v, --version xy
|
|
Set version of cluster image from.
|
|
|
|
-d, --dockerhub hubname
|
|
Set user of dockerhub build.
|
|
|
|
-a, --arch armhf|aarch64|i386|amd64
|
|
Arch for Hass.IO build.
|
|
-t, --test
|
|
Don't upload the build to docker hub.
|
|
-n, --no-cache
|
|
Disable build from cache
|
|
EOF
|
|
}
|
|
|
|
# Parse arguments
|
|
while [[ $# -gt 0 ]]; do
|
|
key=$1
|
|
case $key in
|
|
-h|--help)
|
|
help
|
|
exit 0
|
|
;;
|
|
-d|--dockerhub)
|
|
DOCKER_HUB=$2
|
|
shift
|
|
;;
|
|
-v|--version)
|
|
DOCKER_TAG=$2
|
|
shift
|
|
;;
|
|
-a|--arch)
|
|
ARCH=$2
|
|
shift
|
|
;;
|
|
-t|--test)
|
|
DOCKER_PUSH="false"
|
|
;;
|
|
-n|--no-cache)
|
|
DOCKER_CACHE="false"
|
|
;;
|
|
*)
|
|
echo "[WARNING] $0 : Argument '$1' unknown. Ignoring."
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
# Sanity checks
|
|
if [ "$ARCH" != 'armhf' ] && [ "$ARCH" != 'aarch64' ] && [ "$ARCH" != 'i386' ] && [ "$ARCH" != 'amd64' ]; then
|
|
echo "Error: $ARCH is not a supported platform for hassio-cluster!"
|
|
help
|
|
exit 1
|
|
fi
|
|
if [ -z "$DOCKER_TAG" ]; then
|
|
echo "Error: need set a version!"
|
|
help
|
|
exit 1
|
|
fi
|
|
|
|
# Get the absolute script location
|
|
pushd "$(dirname "$0")" > /dev/null 2>&1
|
|
SCRIPTPATH=$(pwd)
|
|
popd > /dev/null 2>&1
|
|
|
|
BASE_IMAGE="homeassistant\/$ARCH-base:latest"
|
|
DOCKER_IMAGE=$DOCKER_HUB/$ARCH-hassio-cluster
|
|
BUILD_DIR=${BUILD_DIR:=$SCRIPTPATH}
|
|
WORKSPACE=${BUILD_DIR:=$SCRIPTPATH}/hassio-cluster-$ARCH
|
|
|
|
# setup docker
|
|
echo "[INFO] Setup docker for cluster"
|
|
mkdir -p "$BUILD_DIR"
|
|
|
|
cp -r ../../cluster "$WORKSPACE"
|
|
sed -i "s/%%BASE_IMAGE%%/${BASE_IMAGE}/g" "$WORKSPACE/Dockerfile"
|
|
|
|
echo "LABEL io.hass.version=\"$DOCKER_TAG\" io.hass.arch=\"$ARCH\" io.hass.type=\"cluster\"" >> "$WORKSPACE/Dockerfile"
|
|
echo "[INFO] prepare $DOCKER_IMAGE:$DOCKER_TAG done"
|
|
|
|
# Run build
|
|
echo "[INFO] start docker build"
|
|
docker stop $BUILD_CONTAINER_NAME 2> /dev/null || true
|
|
docker rm --volumes $BUILD_CONTAINER_NAME 2> /dev/null || true
|
|
docker run --rm \
|
|
-v "$WORKSPACE":/docker \
|
|
-v ~/.docker:/root/.docker \
|
|
-e DOCKER_PUSH=$DOCKER_PUSH \
|
|
-e DOCKER_CACHE=$DOCKER_CACHE \
|
|
-e DOCKER_WITH_LATEST=$DOCKER_WITH_LATEST \
|
|
-e DOCKER_IMAGE="$DOCKER_IMAGE" \
|
|
-e DOCKER_TAG="$DOCKER_TAG" \
|
|
--name $BUILD_CONTAINER_NAME \
|
|
--privileged \
|
|
homeassistant/docker-build-env \
|
|
/run-docker.sh
|
|
|
|
echo "[INFO] cleanup WORKSPACE"
|
|
cd "$BUILD_DIR"
|
|
rm -rf "$WORKSPACE"
|
|
|
|
cleanup "okay"
|
|
exit 0
|