Lint all script / make it easy to use with commands (#5)
Add an optional extended description…
This commit is contained in:
parent
245bfb97e7
commit
15de7ee7a1
9 changed files with 363 additions and 152 deletions
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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/*
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue