codex-factory/generator/scripts/bee-docker-build.sh
2022-11-07 15:03:07 +01:00

88 lines
2.8 KiB
Bash
Executable File

#!/bin/bash
set -o errexit
set -o pipefail
dockerfile() {
cat << DOCKERFILE > "$1"
FROM ethersphere/bee:$2
# Sample docker file
COPY --chown=bee:bee . /home/bee/.bee
DOCKERFILE
}
dockerbuild() {
BLOCKCHAIN_VERSION=$("$MY_PATH/utils/env-variable-value.sh" BLOCKCHAIN_VERSION)
PLATFORM_FLAG=""
if [ -n "$BEE_PLATFORM" ]; then
PLATFORM_FLAG="--platform=$BEE_PLATFORM"
fi
if [ -n "$PUSH_IMAGES" ]; then
# Multiplatform build needs to push the images right away as docker buildx does not output images loaded into
# docker itself, or it can do that but only for one platform.
PLATFORM_FLAG+=" --push"
fi
IMAGE_NAME=$(basename "$1")
IMAGE_NAME="$4/$IMAGE_NAME"
docker build "$1" --no-cache -f "$2" -t "$IMAGE_NAME:$3" $PLATFORM_FLAG --label "org.ethswarm.beefactory.blockchain-version=$BLOCKCHAIN_VERSION" $5
}
MY_PATH=$(dirname "$0")
MY_PATH=$( cd "$MY_PATH" && pwd )
BEE_DIRS=$(ls -d "$MY_PATH"/bee-data-dirs/*/)
BEE_VERSION=$("$MY_PATH/utils/env-variable-value.sh" BEE_VERSION)
BEE_IMAGE_PREFIX=$("$MY_PATH/utils/env-variable-value.sh" BEE_IMAGE_PREFIX)
STATE_COMMIT=$("$MY_PATH/utils/env-variable-value.sh" STATE_COMMIT)
OFFICIAL_BEE_IMAGE="ethersphere/bee:$BEE_VERSION"
CONTRACT_ADDRESSES="$1"
# Make sure we the user has permission all the files
echo "Build Bee Docker images..."
echo "Update common dockerfile"
dockerfile "$MY_PATH/bee-data-dirs/Dockerfile" "$BEE_VERSION"
### BEE_VERSION ALTERNATIONS START
# If the user has been set the COMMIT_VERSION_TAG env variable
# The image will be built with the tag that is the bee version string
COMMIT_VERSION_TAG="$("$MY_PATH/utils/env-variable-value.sh" COMMIT_VERSION_TAG)"
if [ "$COMMIT_VERSION_TAG" == "true" ] ; then
echo "Image version tag will be extracted from the bee version command from image $OFFICIAL_BEE_IMAGE"
docker pull $OFFICIAL_BEE_IMAGE
# somehow the version command's output goes to the stderr
BEE_VERSION=$(docker run --rm $OFFICIAL_BEE_IMAGE version 2>&1)
echo "Extracted Bee version: $BEE_VERSION"
"$MY_PATH/utils/build-image-tag.sh" set "$BEE_VERSION"
fi
if [ "$STATE_COMMIT" == 'false' ] ; then
echo "The bee image will be built without their state"
BEE_VERSION+="-stateless"
"$MY_PATH/utils/build-image-tag.sh" set "$BEE_VERSION"
echo "Stateless Bee version: $BEE_VERSION"
fi
### BEE_VERSION ALERNATIONS END
CONTRACT_ADDRESSES_LABELS=""
OLD_IFS=$IFS
IFS=';' array=($CONTRACT_ADDRESSES)
for element in "${array[@]}";
do
CONTRACT_ADDRESSES_LABELS+=" --label org.ethswarm.beefactory.contracts.${element}"
done
IFS=$OLD_IFS
echo "Build Dockerfiles"
for BEE_DIR in $BEE_DIRS
do
echo "Build Bee version $BEE_VERSION on $BEE_DIR"
dockerbuild "$BEE_DIR" "$MY_PATH/bee-data-dirs/Dockerfile" "$BEE_VERSION" "$BEE_IMAGE_PREFIX" "$CONTRACT_ADDRESSES_LABELS"
done
echo "Docker image builds were successful!"