76 lines
1.9 KiB
Bash
Executable File
76 lines
1.9 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -e
|
|
|
|
SCRIPT_NAME=$(basename "$0")
|
|
DIR=$(cd "$(dirname "$0")" && pwd)
|
|
ROOT_FOLDER="$DIR/.."
|
|
PUBLISH_DIR=$ROOT_FOLDER/target/publish
|
|
TARGET_NAME=rust-web-provider
|
|
IMAGE_NAME=rust-web-provider
|
|
IMAGE_VERSION=latest
|
|
BUILD_RELEASE=true
|
|
SOURCE_RELEASE_DIR=$ROOT_FOLDER/target/release
|
|
SOURCE_DEBUG_DIR=$ROOT_FOLDER/target/debug
|
|
SOURCE_DIR=$SOURCE_RELEASE_DIR
|
|
|
|
usage()
|
|
{
|
|
echo "$SCRIPT_NAME [options]"
|
|
echo "Note: You might have to run this as root or sudo."
|
|
echo ""
|
|
echo "options"
|
|
echo " -i, --image-name Image name (default: rust-web-provider)"
|
|
echo " -v, --image-version Docker Image Version (default: latest)"
|
|
echo " -r, --build-release Build release configuration - true|false (default: true)"
|
|
exit 1;
|
|
}
|
|
|
|
process_args()
|
|
{
|
|
save_next_arg=0
|
|
for arg in "$@"
|
|
do
|
|
if [ $save_next_arg -eq 1 ]; then
|
|
IMAGE_NAME="$arg"
|
|
save_next_arg=0
|
|
elif [ $save_next_arg -eq 2 ]; then
|
|
IMAGE_VERSION="$arg"
|
|
save_next_arg=0
|
|
elif [ $save_next_arg -eq 3 ]; then
|
|
BUILD_RELEASE="$arg"
|
|
save_next_arg=0
|
|
else
|
|
case "$arg" in
|
|
"-h" | "--help" ) usage;;
|
|
"-i" | "--image-name" ) save_next_arg=1;;
|
|
"-v" | "--image-version" ) save_next_arg=2;;
|
|
"-r" | "--build-release" ) save_next_arg=3;;
|
|
* ) usage;;
|
|
esac
|
|
fi
|
|
done
|
|
}
|
|
|
|
# process command line args
|
|
process_args "$@"
|
|
|
|
# build bits
|
|
if [ "$BUILD_RELEASE" == "true" ]; then
|
|
cargo build --release
|
|
else
|
|
SOURCE_DIR=$SOURCE_DEBUG_DIR
|
|
cargo build
|
|
fi
|
|
|
|
# copy release binary & Dockerfile to a "publish" folder
|
|
rm -rf "$PUBLISH_DIR"
|
|
mkdir -p "$PUBLISH_DIR"
|
|
cp "$ROOT_FOLDER/Dockerfile" "$PUBLISH_DIR"
|
|
cp "$SOURCE_DIR/$TARGET_NAME" "$PUBLISH_DIR"
|
|
|
|
# build the Docker image
|
|
pushd "$PUBLISH_DIR"
|
|
docker build -t "$IMAGE_NAME":"$IMAGE_VERSION" .
|
|
popd
|