Lint all script / make it easy to use with commands (#5)

Add an optional extended description…
This commit is contained in:
Pascal Vizeli 2017-05-05 11:37:04 +02:00 committed by GitHub
parent 245bfb97e7
commit 15de7ee7a1
9 changed files with 363 additions and 152 deletions

View file

@ -1,15 +1,7 @@
#!/bin/bash #!/bin/bash
set -e set -e
# Sanity checks
if [ "$#" -ne 1 ]; then
echo "Usage: create_addon_all.sh <ADDON_SLUG>"
echo "Optional environment: BUILD_DIR BRANCH"
exit 1
fi
for arch in "armhf" "aarch64" "i386" "amd64" for arch in "armhf" "aarch64" "i386" "amd64"
do do
./create_hassio_addon.sh $arch $1 ./create_hassio_addon.sh -a $arch "@$"
done done

View file

@ -1,9 +1,11 @@
#!/bin/bash #!/bin/bash
set -e set -e
BUILD_CONTAINER_NAME=hassio-addons-$$ BUILD_CONTAINER_NAME=hassio-addons-$$
DOCKER_REPO=homeassistant DOCKER_PUSH="false"
DOCKER_HUB=homeassistant
BRANCH=build
REPOSITORY=https://github.com/home-assistant/hassio-addons
cleanup() { cleanup() {
echo "[INFO] Cleanup." echo "[INFO] Cleanup."
@ -19,66 +21,149 @@ cleanup() {
} }
trap 'cleanup fail' SIGINT SIGTERM trap 'cleanup fail' SIGINT SIGTERM
help () {
cat << EOF
Script for hassio addon docker build
create_hassio_addon [options]
Options:
-h, --help
Display this help and exit.
-r, --repository https://.../addons
Set git repository to load addon from.
-b, --branch branch_name
Set git branch to load addon from.
-l, --local /path/to/repository
Load addon from a local folder
-s, --slug addon_slug
Name of folder/slug
-h, --hub hubname
Set user of dockerhub build.
-a, --arch armhf|aarch64|i386|amd64
Arch for addon build.
-p, --push
Upload the build to docker hub.
EOF
}
# Parse arguments
while [[ $# -gt 0 ]]; do
key=$1
case $key in
-h|--help)
help
exit 0
;;
-h|--hub)
DOCKER_HUB=$2
shift
;;
-r|--repository)
REPOSITORY=$2
shift
;;
-b|--branch)
BRANCH=$2
shift
;;
-l|--local)
LOCAL_REPOSITORY=$2
shift
;;
-s|--slug)
SLUG=$2
shift
;;
-a|--arch)
ARCH=$2
shift
;;
-p|--push)
DOCKER_PUSH="true"
;;
*)
echo "[WARNING] $0 : Argument '$1' unknown. Ignoring."
;;
esac
shift
done
# Sanity checks # Sanity checks
if [ "$#" -ne 2 ]; then if [ "$ARCH" != 'armhf' ] && [ "$ARCH" != 'aarch64' ] && [ "$ARCH" != 'i386' ] && [ "$ARCH" != 'amd64' ]; then
echo "Usage: create_hassio_addon.sh <ARCH> <ADDON_SLUG>" echo "Error: $ARCH is not a supported platform for hassio-supervisor!"
echo "Optional environment: BUILD_DIR BRANCH" help
exit 1 exit 1
fi fi
if [ $1 != 'armhf' ] && [ $1 != 'aarch64' ] && [ $1 != 'i386' ] && [ $1 != 'amd64' ]; then if [ -z "$SLUG" ]; then
echo "Error: $1 is not a supported platform for hassio addons!" echo "[ERROR] please set a slug!"
help
exit 1 exit 1
fi fi
# Get the absolute script location # Get the absolute script location
pushd `dirname $0` > /dev/null 2>&1 pushd "$(dirname "$0")" > /dev/null 2>&1
SCRIPTPATH=`pwd` SCRIPTPATH=$(pwd)
popd > /dev/null 2>&1 popd > /dev/null 2>&1
ARCH=$1 BASE_IMAGE="resin\/$ARCH-alpine:3.5"
BASE_IMAGE="resin\/${ARCH}-alpine:3.5" DOCKER_IMAGE=$DOCKER_HUB/$ARCH-addon-$SLUG
ADDON=$2
DOCKER_IMAGE=${ARCH}-addon-${ADDON}
BUILD_DIR=${BUILD_DIR:=$SCRIPTPATH} BUILD_DIR=${BUILD_DIR:=$SCRIPTPATH}
WORKSPACE=${BUILD_DIR:=$SCRIPTPATH}/hassio-addon WORKSPACE=${BUILD_DIR:=$SCRIPTPATH}/hassio-supervisor-$ARCH
ADDON_WORKSPACE=${WORKSPACE}/${ADDON} ADDON_WORKSPACE=$WORKSPACE/$SLUG
BRANCH=${BRANCH:=build}
# setup docker # setup docker
echo "[INFO] Setup docker for addon" echo "[INFO] Setup docker for addon"
mkdir -p $BUILD_DIR mkdir -p "$BUILD_DIR"
mkdir -p "$WORKSPACE"
git clone https://github.com/home-assistant/hassio-addons $WORKSPACE if [ -z "$LOCAL_REPOSITORY" ]; then
cd $WORKSPACE; git checkout $BRANCH git clone "$REPOSITORY" "$WORKSPACE"
cd "$WORKSPACE"; git checkout "$BRANCH"
if [ ! -d $ADDON_WORKSPACE ]; then if [ ! -d "$ADDON_WORKSPACE" ]; then
echo "Error: $ADDON not found inside Repo!" echo "Error: $ADDON not found inside Repo!"
exit 1 exit 1
fi
else
cp -r "$LOCAL_REPOSITORY/$SLUG" "$ADDON_WORKSPACE"
fi fi
VERSION=$(jq --raw-output ".version" $ADDON_WORKSPACE/config.json) # Init docker
echo "[INFO] Setup dockerfile"
sed -i "s/%%BASE_IMAGE%%/${BASE_IMAGE}/g" $ADDON_WORKSPACE/Dockerfile sed -i "s/{arch}/${ARCH}/g" "$ADDON_WORKSPACE/config.json"
sed -i "s/%%VERSION%%/${VERSION}/g" $ADDON_WORKSPACE/Dockerfile DOCKER_TAG=$(jq --raw-output ".version" "$ADDON_WORKSPACE/config.json")
# if set custom image in file
CUSTOM_IMAGE=$(jq --raw-output ".image // empty" "$ADDON_WORKSPACE/config.json")
if [ ! -z "$CUSTOM_IMAGE" ]; then
DOCKER_IMAGE=$CUSTOM_IMAGE
fi
sed -i "s/%%BASE_IMAGE%%/${BASE_IMAGE}/g" "$ADDON_WORKSPACE/Dockerfile"
sed -i "s/%%VERSION%%/${DOCKER_TAG}/g" "$ADDON_WORKSPACE/Dockerfile"
# Run build # Run build
echo "[INFO] start docker build" echo "[INFO] start docker build"
docker stop $BUILD_CONTAINER_NAME 2> /dev/null || true docker stop $BUILD_CONTAINER_NAME 2> /dev/null || true
docker rm --volumes $BUILD_CONTAINER_NAME 2> /dev/null || true docker rm --volumes $BUILD_CONTAINER_NAME 2> /dev/null || true
docker run --rm \ docker run --rm \
-v $ADDON_WORKSPACE:/docker \ -v "$ADDON_WORKSPACE":/docker \
-v ~/.docker:/root/.docker \ -v ~/.docker:/root/.docker \
-e DOCKER_REPO=$DOCKER_REPO \ -e DOCKER_PUSH=$DOCKER_PUSH \
-e DOCKER_IMAGE=$DOCKER_IMAGE \ -e DOCKER_IMAGE="$DOCKER_IMAGE" \
-e DOCKER_TAG=$VERSION \ -e DOCKER_TAG="$VERSION" \
--name $BUILD_CONTAINER_NAME \ --name $BUILD_CONTAINER_NAME \
--privileged \ --privileged \
homeassistant/docker-build-env \ homeassistant/docker-build-env \
/run-docker.sh /run-docker.sh
echo "[INFO] cleanup WORKSPACE" echo "[INFO] cleanup WORKSPACE"
cd $BUILD_DIR cd "$BUILD_DIR"
rm -rf $WORKSPACE rm -rf "$WORKSPACE"
cleanup cleanup "okay"
exit 0 exit 0

View file

@ -1,5 +1,6 @@
FROM ubuntu:16.04 FROM ubuntu:16.04
# setup locals
RUN apt-get update && apt-get install -y \ RUN apt-get update && apt-get install -y \
locales \ locales \
&& rm -rf /var/lib/apt/lists/* && rm -rf /var/lib/apt/lists/*

View file

@ -1,31 +1,65 @@
#!/bin/bash #!/bin/bash
set -e set -e
DOCKER_REPO=homeassistant DOCKER_IMAGE=${DOCKER_IMAGE:="homeassistant/docker-build-env"}
DOCKER_IMAGE=docker-build-env DOCKER_PUSH="false"
# Get the absolute script location # Get the absolute script location
pushd `dirname $0` > /dev/null 2>&1 pushd "$(dirname "$0")" > /dev/null 2>&1
SCRIPTPATH=`pwd` SCRIPTPATH=$(pwd)
popd > /dev/null 2>&1 popd > /dev/null 2>&1
# Sanity checks help () {
if [ "$#" -ne 1 ]; then cat << EOF
echo "Usage: create_build_env.sh [<TAG> | NONE]" Script for hassio docker build environment
create_build_env [options]
Options:
-h, --help
Display this help and exit.
-t, --tag TAG
Version/Tag of $DOCKER_IMAGE.
-p, --push
Upload the build to docker hub.
EOF
}
# Parse arguments
while [[ $# -gt 0 ]]; do
key=$1
case $key in
-h|--help)
help
exit 0
;;
-t|--tag)
DOCKER_TAG=$2
shift
;;
-p|--push)
DOCKER_PUSH="true"
;;
*)
echo "[WARNING] $0 : Argument '$1' unknown. Ignoring."
;;
esac
shift
done
if [ -z "$DOCKER_TAG" ]; then
echo "[ERROR] please set a tag!"
help
exit 1 exit 1
fi fi
DOCKER_TAG=$1
# Build # Build
docker build --pull --tag ${DOCKER_REPO}/${DOCKER_IMAGE}:${DOCKER_TAG} -f ${SCRIPTPATH}/Dockerfile ${SCRIPTPATH} docker build --pull --tag "$DOCKER_IMAGE:$DOCKER_TAG" -f "$SCRIPTPATH/Dockerfile" "$SCRIPTPATH"
# Tag # Tag
docker tag ${DOCKER_REPO}/${DOCKER_IMAGE}:${DOCKER_TAG} ${DOCKER_REPO}/${DOCKER_IMAGE}:latest docker tag "$DOCKER_IMAGE:$DOCKER_TAG" "$DOCKER_IMAGE:latest"
if [ ${DOCKER_TAG} != "NONE" ]; then if [ "$DOCKER_PUSH" == "true" ]; then
# push docker push "$DOCKER_IMAGE:$DOCKER_TAG"
docker push ${DOCKER_REPO}/${DOCKER_IMAGE}:${DOCKER_TAG} docker push "$DOCKER_IMAGE:latest"
docker push ${DOCKER_REPO}/${DOCKER_IMAGE}:latest
fi fi

View file

@ -1,5 +1,4 @@
#!/bin/bash #!/bin/bash
set -e set -e
DOCKER_TIMEOUT=20 # Wait 20 seconds for docker to start DOCKER_TIMEOUT=20 # Wait 20 seconds for docker to start
@ -10,23 +9,23 @@ cleanup() {
# Stop docker gracefully # Stop docker gracefully
echo "[INFO] Stopping in container docker..." echo "[INFO] Stopping in container docker..."
DOCKERPIDFILE=/var/run/docker.pid DOCKERPIDFILE=/var/run/docker.pid
if [ -f $DOCKERPIDFILE ] && [ -s $DOCKERPIDFILE ] && ps $(cat $DOCKERPIDFILE) | grep -q docker; then if [ -f $DOCKERPIDFILE ] && [ -s $DOCKERPIDFILE ] && pgrep -F $DOCKERPIDFILE; then
kill $(cat $DOCKERPIDFILE) kill "$(cat $DOCKERPIDFILE)"
# Now wait for it to die # Now wait for it to die
STARTTIME=$(date +%s) STARTTIME=$(date +%s)
ENDTIME=$(date +%s) ENDTIME=$(date +%s)
while [ -f $DOCKERPIDFILE ] && [ -s $DOCKERPIDFILE ] && ps $(cat $DOCKERPIDFILE) | grep -q docker; do while [ -f $DOCKERPIDFILE ] && [ -s $DOCKERPIDFILE ] && pgrep -F $DOCKERPIDFILE; do
if [ $(($ENDTIME - $STARTTIME)) -le $DOCKER_TIMEOUT ]; then if [ $((ENDTIME - STARTTIME)) -le $DOCKER_TIMEOUT ]; then
sleep 1 sleep 1
ENDTIME=$(date +%s) ENDTIME=$(date +%s)
else else
echo "[ERROR] Timeout while waiting for in container docker to die." echo "[ERROR] Timeout while waiting for in container docker to die"
exit 1 exit 1
fi fi
done done
else else
echo "[WARN] Can't stop docker container." echo "[WARN] Can't stop docker container"
echo "[WARN] Your host might have been left with unreleased resources (ex. loop devices)." echo "[WARN] Your host might have been left with unreleased resources (ex. loop devices)"
fi fi
if [ "$1" == "fail" ]; then if [ "$1" == "fail" ]; then
@ -36,7 +35,7 @@ cleanup() {
trap 'cleanup fail' SIGINT SIGTERM trap 'cleanup fail' SIGINT SIGTERM
# Start docker # Start docker
echo "[INFO] Setup qemu-arm." echo "[INFO] Setup crosscompiling feature"
mount binfmt_misc -t binfmt_misc /proc/sys/fs/binfmt_misc mount binfmt_misc -t binfmt_misc /proc/sys/fs/binfmt_misc
update-binfmts --enable qemu-arm update-binfmts --enable qemu-arm
update-binfmts --enable qemu-aarch64 update-binfmts --enable qemu-aarch64
@ -48,29 +47,28 @@ echo "[INFO] Waiting for docker to initialize..."
STARTTIME=$(date +%s) STARTTIME=$(date +%s)
ENDTIME=$(date +%s) ENDTIME=$(date +%s)
until docker info >/dev/null 2>&1; do until docker info >/dev/null 2>&1; do
if [ $(($ENDTIME - $STARTTIME)) -le $DOCKER_TIMEOUT ]; then if [ $((ENDTIME - STARTTIME)) -le $DOCKER_TIMEOUT ]; then
sleep 1 sleep 1
ENDTIME=$(date +%s) ENDTIME=$(date +%s)
else else
echo "[ERROR] Timeout while waiting for docker to come up." echo "[ERROR] Timeout while waiting for docker to come up"
exit 1 exit 1
fi fi
done done
echo "[INFO] Docker was initialized." echo "[INFO] Docker was initialized"
# Start barys with all the arguments requested # Start barys with all the arguments requested
echo "[INFO] Running build..." echo "[INFO] Running build..."
# Build # Build
docker build --pull --tag ${DOCKER_REPO}/${DOCKER_IMAGE}:${DOCKER_TAG} . docker build --pull --tag "$DOCKER_IMAGE:$DOCKER_TAG" .
# Tag docker tag "$DOCKER_IMAGE:$DOCKER_TAG" "$DOCKER_IMAGE:latest"
docker tag ${DOCKER_REPO}/${DOCKER_IMAGE}:${DOCKER_TAG} ${DOCKER_REPO}/${DOCKER_IMAGE}:latest
echo "[INFO] Push image" echo "[INFO] Push image"
if [ ${DOCKER_TAG} != "NONE" ]; then if [ "$DOCKER_PUSH" == "true" ]; then
# push # push
docker push ${DOCKER_REPO}/${DOCKER_IMAGE}:${DOCKER_TAG} docker push "$DOCKER_IMAGE:$DOCKER_TAG"
docker push ${DOCKER_REPO}/${DOCKER_IMAGE}:latest docker push "$DOCKER_IMAGE:latest"
fi fi
cleanup cleanup "okay"
exit 0 exit 0

View file

@ -1,15 +1,7 @@
#!/bin/bash #!/bin/bash
set -e set -e
# Sanity checks
if [ "$#" -ne 1 ]; then
echo "Usage: create_all.sh <TAG>|NONE"
echo "Optional environment: BUILD_DIR"
exit 1
fi
for arch in "armhf" "aarch64" "i386" "amd64" for arch in "armhf" "aarch64" "i386" "amd64"
do do
./create_hassio_supervisor.sh $arch $1 ./create_hassio_supervisor.sh -a $arch "$@"
done done

View file

@ -1,9 +1,11 @@
#!/bin/bash #!/bin/bash
set -e set -e
BUILD_CONTAINER_NAME=hassio-build-$$ BUILD_CONTAINER_NAME=hassio-build-$$
DOCKER_REPO=homeassistant DOCKER_PUSH="false"
DOCKER_HUB=homeassistant
BRANCH=master
REPOSITORY=https://github.com/home-assistant/hassio
cleanup() { cleanup() {
echo "[INFO] Cleanup." echo "[INFO] Cleanup."
@ -19,60 +21,122 @@ cleanup() {
} }
trap 'cleanup fail' SIGINT SIGTERM trap 'cleanup fail' SIGINT SIGTERM
help () {
cat << EOF
Script for hassio docker build
create_hassio_supervisor [options]
Options:
-h, --help
Display this help and exit.
-r, --repository https://.../hassio
Set git repository to load Hass.IO from.
-b, --branch branch_name
Set git repository to load Hass.IO from.
-h, --hub hubname
Set user of dockerhub build.
-a, --arch armhf|aarch64|i386|amd64
Arch for Hass.IO build.
-v, --version X.Y
Version/Tag of Hass.IO build.
-p, --push
Upload the build to docker hub.
EOF
}
# Parse arguments
while [[ $# -gt 0 ]]; do
key=$1
case $key in
-h|--help)
help
exit 0
;;
-h|--hub)
DOCKER_HUB=$2
shift
;;
-r|--repository)
REPOSITORY=$2
shift
;;
-b|--branch)
BRANCH=$2
shift
;;
-a|--arch)
ARCH=$2
shift
;;
-v|--version)
DOCKER_TAG=$2
shift
;;
-p|--push)
DOCKER_PUSH="true"
;;
*)
echo "[WARNING] $0 : Argument '$1' unknown. Ignoring."
;;
esac
shift
done
# Sanity checks # Sanity checks
if [ "$#" -ne 2 ]; then if [ "$ARCH" != 'armhf' ] && [ "$ARCH" != 'aarch64' ] && [ "$ARCH" != 'i386' ] && [ "$ARCH" != 'amd64' ]; then
echo "Usage: create_hassio_supervisor.sh <ARCH> <TAG>|NONE" echo "Error: $ARCH is not a supported platform for hassio-supervisor!"
echo "Optional environment: BUILD_DIR BRANCH" help
exit 1 exit 1
fi fi
if [ $1 != 'armhf' ] && [ $1 != 'aarch64' ] && [ $1 != 'i386' ] && [ $1 != 'amd64' ]; then if [ -z "$DOCKER_TAG" ]; then
echo "Error: $1 is not a supported platform for hassio-supervisor!" echo "[ERROR] please set a version!"
help
exit 1 exit 1
fi fi
# Get the absolute script location # Get the absolute script location
pushd `dirname $0` > /dev/null 2>&1 pushd "$(dirname "$0")" > /dev/null 2>&1
SCRIPTPATH=`pwd` SCRIPTPATH=$(pwd)
popd > /dev/null 2>&1 popd > /dev/null 2>&1
ARCH=$1 BASE_IMAGE="resin\/$ARCH-alpine:3.5"
BASE_IMAGE="resin\/${ARCH}-alpine:3.5" DOCKER_IMAGE=$DOCKER_HUB/$ARCH-hassio-supervisor
DOCKER_TAG=$2
DOCKER_IMAGE=${ARCH}-hassio-supervisor
BUILD_DIR=${BUILD_DIR:=$SCRIPTPATH} BUILD_DIR=${BUILD_DIR:=$SCRIPTPATH}
WORKSPACE=${BUILD_DIR:=$SCRIPTPATH}/hassio-supervisor WORKSPACE=${BUILD_DIR:=$SCRIPTPATH}/hassio-supervisor-$ARCH
BRANCH=${BRANCH:=master}
# setup docker # setup docker
echo "[INFO] Setup docker for supervisor" echo "[INFO] Setup docker for supervisor"
mkdir -p $BUILD_DIR mkdir -p "$BUILD_DIR"
mkdir -p $WORKSPACE mkdir -p "$WORKSPACE"
cp ../../supervisor/Dockerfile $WORKSPACE/Dockerfile cp ../../supervisor/Dockerfile "$WORKSPACE/Dockerfile"
sed -i "s/%%BASE_IMAGE%%/${BASE_IMAGE}/g" $WORKSPACE/Dockerfile sed -i "s/%%BASE_IMAGE%%/${BASE_IMAGE}/g" "$WORKSPACE/Dockerfile"
sed -i "s/%%SUPERVISOR_TAG%%/${DOCKER_TAG}/g" $WORKSPACE/Dockerfile sed -i "s/%%SUPERVISOR_TAG%%/${DOCKER_TAG}/g" "$WORKSPACE/Dockerfile"
git clone https://github.com/home-assistant/hassio $WORKSPACE/hassio_api git clone "$REPOSITORY" "$WORKSPACE/hassio_api"
cd $WORKSPACE/hassio_api && git checkout $BRANCH cd "$WORKSPACE/hassio_api" && git checkout "$BRANCH"
# Run build # Run build
echo "[INFO] start docker build" echo "[INFO] start docker build"
docker stop $BUILD_CONTAINER_NAME 2> /dev/null || true docker stop $BUILD_CONTAINER_NAME 2> /dev/null || true
docker rm --volumes $BUILD_CONTAINER_NAME 2> /dev/null || true docker rm --volumes $BUILD_CONTAINER_NAME 2> /dev/null || true
docker run --rm \ docker run --rm \
-v $WORKSPACE:/docker \ -v "$WORKSPACE":/docker \
-v ~/.docker:/root/.docker \ -v ~/.docker:/root/.docker \
-e DOCKER_REPO=$DOCKER_REPO \ -e DOCKER_PUSH=$DOCKER_PUSH \
-e DOCKER_IMAGE=$DOCKER_IMAGE \ -e DOCKER_IMAGE="$DOCKER_IMAGE" \
-e DOCKER_TAG=$DOCKER_TAG \ -e DOCKER_TAG="$DOCKER_TAG" \
--name $BUILD_CONTAINER_NAME \ --name $BUILD_CONTAINER_NAME \
--privileged \ --privileged \
homeassistant/docker-build-env \ homeassistant/docker-build-env \
/run-docker.sh /run-docker.sh
echo "[INFO] cleanup WORKSPACE" echo "[INFO] cleanup WORKSPACE"
cd $BUILD_DIR cd "$BUILD_DIR"
rm -rf $WORKSPACE rm -rf "$WORKSPACE"
cleanup cleanup "okay"
exit 0 exit 0

View file

@ -1,16 +1,8 @@
#!/bin/bash #!/bin/bash
set -e set -e
# Sanity checks
if [ "$#" -ne 1 ]; then
echo "Usage: create_all.sh <HASS_VERS>"
echo "Optional environment: BUILD_DIR"
exit 1
fi
for machine in "raspberrypi3" "raspberrypi2" "raspberrypi" "qemux86" "qemux86-64" for machine in "raspberrypi3" "raspberrypi2" "raspberrypi" "qemux86" "qemux86-64"
do do
./create_homeassistant.sh $1 $machine & ./create_homeassistant.sh -m $machine "@$" &
done done
wait wait

View file

@ -1,9 +1,9 @@
#!/bin/bash #!/bin/bash
set -e set -e
BUILD_CONTAINER_NAME=homeassistant-build-$$ BUILD_CONTAINER_NAME=homeassistant-build-$$
DOCKER_REPO=homeassistant DOCKER_PUSH="false"
DOCKER_HUB=homeassistant
cleanup() { cleanup() {
echo "[INFO] Cleanup." echo "[INFO] Cleanup."
@ -19,25 +19,78 @@ cleanup() {
} }
trap 'cleanup fail' SIGINT SIGTERM trap 'cleanup fail' SIGINT SIGTERM
help () {
cat << EOF
Script for homeassistant docker build
create_homeassistant [options]
Options:
-h, --help
Display this help and exit.
-h, --hub hubname
Set user of dockerhub build.
-m, --machine name
Machine type for HomeAssistant build.
-v, --version X.Y
Version/Tag of HomeAssistant build.
-p, --push
Upload the build to docker hub.
EOF
}
# Parse arguments
while [[ $# -gt 0 ]]; do
key=$1
case $key in
-h|--help)
help
exit 0
;;
-h|--hub)
DOCKER_HUB=$2
shift
;;
-m|--machine)
MACHINE=$2
shift
;;
-v|--version)
DOCKER_TAG=$2
shift
;;
-p|--push)
DOCKER_PUSH="true"
;;
*)
echo "[WARNING] $0 : Argument '$1' unknown. Ignoring."
;;
esac
shift
done
# Sanity checks # Sanity checks
if [ "$#" -ne 2 ]; then if [ -z "$MACHINE" ]; then
echo "Usage: create_homeassistant.sh <HASS_VERS> <MACHINE>" echo "[ERROR] please set a machine!"
echo "Optional environment: BUILD_DIR" help
exit 1
fi
if [ -z "$DOCKER_TAG" ]; then
echo "[ERROR] please set a version!"
help
exit 1 exit 1
fi fi
# Get the absolute script location # Get the absolute script location
pushd `dirname $0` > /dev/null 2>&1 pushd "$(dirname "$0")" > /dev/null 2>&1
SCRIPTPATH=`pwd` SCRIPTPATH=$(pwd)
popd > /dev/null 2>&1 popd > /dev/null 2>&1
HASS_VERS=$1 DOCKER_IMAGE=$DOCKER_HUB/$MACHINE-homeassistant
MACHINE=$2
DOCKER_TAG=$1
DOCKER_IMAGE=${MACHINE}-homeassistant
BUILD_DIR=${BUILD_DIR:=$SCRIPTPATH} BUILD_DIR=${BUILD_DIR:=$SCRIPTPATH}
WORKSPACE=${BUILD_DIR}/hass WORKSPACE=$BUILD_DIR/hass
HASS_GIT=${BUILD_DIR}/hass_git HASS_GIT=$BUILD_DIR/hass_git
# generate base image # generate base image
case $MACHINE in case $MACHINE in
@ -57,38 +110,38 @@ esac
# setup docker # setup docker
echo "[INFO] Setup docker for homeassistant" echo "[INFO] Setup docker for homeassistant"
mkdir -p $BUILD_DIR mkdir -p "$BUILD_DIR"
mkdir -p $WORKSPACE mkdir -p "$WORKSPACE"
echo "[INFO] load homeassistant" echo "[INFO] load homeassistant"
cp ../../homeassistant/Dockerfile $WORKSPACE/Dockerfile cp ../../homeassistant/Dockerfile "$WORKSPACE/Dockerfile"
sed -i "s/%%BASE_IMAGE%%/${BASE_IMAGE}/g" $WORKSPACE/Dockerfile sed -i "s/%%BASE_IMAGE%%/${BASE_IMAGE}/g" "$WORKSPACE/Dockerfile"
sed -i "s/%%HASS_VERSION%%/${HASS_VERS}/g" $WORKSPACE/Dockerfile sed -i "s/%%HASS_VERSION%%/${HASS_VERS}/g" "$WORKSPACE/Dockerfile"
git clone https://github.com/home-assistant/home-assistant $HASS_GIT git clone https://github.com/home-assistant/home-assistant "$HASS_GIT"
cd $HASS_GIT && git checkout $HASS_VERS cd "$HASS_GIT" && git checkout "$DOCKER_TAG"
cp $HASS_GIT/requirements_all.txt $WORKSPACE/ cp "$HASS_GIT/requirements_all.txt" "$WORKSPACE/"
# Run build # Run build
echo "[INFO] start docker build" echo "[INFO] start docker build"
docker stop $BUILD_CONTAINER_NAME 2> /dev/null || true docker stop $BUILD_CONTAINER_NAME 2> /dev/null || true
docker rm --volumes $BUILD_CONTAINER_NAME 2> /dev/null || true docker rm --volumes $BUILD_CONTAINER_NAME 2> /dev/null || true
docker run --rm \ docker run --rm \
-v $WORKSPACE:/docker \ -v "$WORKSPACE":/docker \
-v ~/.docker:/root/.docker \ -v ~/.docker:/root/.docker \
-e DOCKER_REPO=$DOCKER_REPO \ -e DOCKER_PUSH=$DOCKER_PUSH \
-e DOCKER_IMAGE=$DOCKER_IMAGE \ -e DOCKER_IMAGE="$DOCKER_IMAGE" \
-e DOCKER_TAG=$DOCKER_TAG \ -e DOCKER_TAG="$DOCKER_TAG" \
--name $BUILD_CONTAINER_NAME \ --name $BUILD_CONTAINER_NAME \
--privileged \ --privileged \
homeassistant/docker-build-env \ homeassistant/docker-build-env \
/run-docker.sh /run-docker.sh
echo "[INFO] cleanup WORKSPACE" echo "[INFO] cleanup WORKSPACE"
cd $BUILD_DIR cd "$BUILD_DIR"
rm -rf $WORKSPACE rm -rf "$WORKSPACE"
rm -rf $HASS_GIT rm -rf "$HASS_GIT"
cleanup cleanup "okay"
exit 0 exit 0