#!/bin/sh set -ex cd "$(dirname "$0")" BASE="${PWD}/../" # BUILD_IMAGE from environment vairables has precedence if [ ! -z "${BUILD_IMAGE}" ] then ENV_BUILD_IMAGE="${BUILD_IMAGE}" fi if [ -f ".env.default" ] then export $(cat .env.default | sed 's/#.*//g' | xargs) fi if [ -f ".env" ] then export $(cat .env | sed 's/#.*//g' | xargs) fi # BUILD_IMAGE from environment vairables has precedence if [ ! -z "${ENV_BUILD_IMAGE}" ] then BUILD_IMAGE="${ENV_BUILD_IMAGE}" unset ENV_BUILD_IMAGE fi if [ -z "${1}" ] && [ ! -z "${SERVER_TAG}" ] then ./build base ./build ${SERVER_TAG} exit 0 fi build_client() { docker build -t neko-dev-client -f base/Dockerfile --target client "${BASE}" docker run --rm \ --user "$(id -u):$(id -g)" \ -v "${BASE}client/dist:/tmp/dist" \ neko-dev-client sh -c "rm -rf /tmp/dist/*; cp -r /src/dist/* /tmp/dist" } build_server() { docker build -t neko-dev-server -f base/Dockerfile --target server "${BASE}" docker run --rm \ --user "$(id -u):$(id -g)" \ -v "${BASE}server/bin:/tmp/bin" \ neko-dev-server sh -c "rm -rf /tmp/bin/neko; cp /src/bin/neko /tmp/bin" } build() { if [ "$1" = "base" ] then # build base docker build -t "${BUILD_IMAGE}:base" -f base/Dockerfile "${BASE}" else # build image docker build -t "${BUILD_IMAGE}:$1" --build-arg="BASE_IMAGE=${BUILD_IMAGE}:base" -f "$1/Dockerfile" "$1/" fi } build_arm() { if [ "$1" = "base" ] then # build ARM base docker build -t "${BUILD_IMAGE}:arm-base" -f base/Dockerfile.arm "${BASE}" elif [ -f "$1/Dockerfile.arm" ] then # build dedicated ARM image docker build -t "${BUILD_IMAGE}:arm-$1" --build-arg="BASE_IMAGE=${BUILD_IMAGE}:arm-base" -f "$1/Dockerfile.arm" "$1/" else # try to build ARM image with common Dockerfile docker build -t "${BUILD_IMAGE}:arm-$1" --build-arg="BASE_IMAGE=${BUILD_IMAGE}:arm-base" -f "$1/Dockerfile" "$1/" fi } build_nvidia() { if [ "$1" = "base" ] then # build nvidia base docker build -t "${BUILD_IMAGE}:nvidia-base" -f base/Dockerfile.nvidia "${BASE}" elif [ -f "$1/Dockerfile.nvidia" ] then # build dedicated nvidia image docker build -t "${BUILD_IMAGE}:nvidia-$1" --build-arg="BASE_IMAGE=${BUILD_IMAGE}:nvidia-base" -f "$1/Dockerfile.nvidia" "$1/" else # try to build nvidia image with common Dockerfile docker build -t "${BUILD_IMAGE}:nvidia-$1" --build-arg="BASE_IMAGE=${BUILD_IMAGE}:nvidia-base" -f "$1/Dockerfile" "$1/" fi } case $1 in client) build_client;; server) build_server;; # build arm- images arm-*) build_arm "${1#arm-}";; # build nvidia- images nvidia-*) build_nvidia "${1#nvidia-}";; # build images *) build "$1";; esac