#!/bin/bash # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Name: build.sh # Author(s): Thomas Belway # Source: https://gitea.belway.me/Public/foundryvtt_container.git # Example: ./build.sh -U $FOUNDRY_URL -I -v $VERSION # Description: Builds custom foundryvtt container and pushes to registry. # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #################################################################### # Variables #################################################################### # General Variables REGISTRY="registry.belway.me" REGISTRY_NAMESPACE="public/foundryvtt_container" ############################################################################################################################### # Functions ############################################################################################################################### # Informational Functions usage() { cat << EOF usage: ${SCRIPT_NAME} [options] This script exports data from one database to be compared with data from another database OPTIONS: -D Enable DEBUG mode -f Custom Containerfile with absolute or relative directory -F Format of containerfile -h Show this message -I Initialize the registry -n Node version -R For rebuild the image. -S Scheduled build, should only be used by automation (gitea actions). -U Foundry URL for downloading the version -v Version to build, defaults to 'latest' EOF exit 1 } get_parameters() { while getopts "Df:F:hIRSU:v:" option_name; do case "$option_name" in "D") DEBUG="YES" ;; "f") OPT_CONTAINERFILE="$OPTARG" ;; "F") OPT_FORMAT_TYPE="$OPTARG" ;; "h") usage ;; "I") INITIALIZE="TRUE" ;; "n") NODEJS_VERSION="$OPTARG" ;; "R") OPT_REBUILD="TRUE" ;; "S") OPT_SCHEDULED="TRUE" ;; "U") FOUNDRY_URL="$OPTARG" if [[ "$FOUNDRY_URL" != *"verify"* ]]; then echo "Not a valid foundry URL, please use the TIMED URL option when at the Purchased LIcenses page on foundry website in your account." exit 1 fi ;; "v") OPT_VERSION="$OPTARG" ;; "?") echo "Error: Unknown option $OPTARG" usage ;; ":") echo "Error: No argument value for option $OPTARG" usage ;; *) echo "Error: Unknown error while processing options" usage ;; esac done if [[ -z $FOUNDRY_URL ]]; then echo "Need the foundry URL, please try again..." exit 1 fi if [[ -z $OPT_CONTAINERFILE ]]; then OPT_CONTAINERFILE="Containerfile" fi if [[ -z $OPT_FORMAT_TYPE ]]; then OPT_FORMAT="--format docker" elif [[ $OPT_FORMAT_TYPE == "podman" ]]; then OPT_FORMAT="" else OPT_FORMAT="--format ${OPT_FORMAT_TYPE}" fi if [[ $DEBUG == "YES" ]]; then SILENCE_OUTPUT="" SILENCE_STOUT=" " echo "Debug mode enabled." fi if [[ -z $OPT_REBUILD ]]; then OPT_REBUILD="FALSE" fi if [[ -z $OPT_SCHEDULED ]]; then OPT_SCHEDULED="FALSE" fi if [[ -z $OPT_VERSION ]]; then OPT_VERSION="12.331" fi if [[ "${OPT_SCHEDULED}" == "TRUE" ]]; then OPT_REBUILD="FALSE" fi if [[ -z $NODEJS_VERSION ]]; then NODEJS_VERSION=$(curl https://foundryvtt.com/article/installation/ | grep nodesource | grep rpm | tr -d -c 0-9) fi TAG="$OPT_VERSION" } # Build Functions container_initialize() { echo "Initializing container build..." podman login ${REGISTRY} podman build -f ${OPT_CONTAINERFILE} -t ${REGISTRY}/${REGISTRY_NAMESPACE}:${TAG} -t ${REGISTRY}/${REGISTRY_NAMESPACE}:latest --build-arg foundry_url=${FOUNDRY_URL} --build-arg nodejs_version=${NODEJS_VERSION} podman push ${REGISTRY}/${REGISTRY_NAMESPACE}:${TAG} podman push ${REGISTRY}/${REGISTRY_NAMESPACE}:latest podman logout ${REGISTRY} echo "Container build initialized!" } container_scheduled_build() { echo "Scheduled build starting..." if [[ "${CADDY_IMAGE_VERSION}" != "${CUSTOM_CADDY_IMAGE_VERSION}" ]]; then podman login ${REGISTRY} podman build -f ${OPT_CONTAINERFILE} -t ${REGISTRY}/${REGISTRY_NAMESPACE}:${TAG} -t ${REGISTRY}/${REGISTRY_NAMESPACE}:latest --build-arg foundry_url=${FOUNDRY_URL} podman push ${REGISTRY}/${REGISTRY_NAMESPACE}:${TAG} podman push ${REGISTRY}/${REGISTRY_NAMESPACE}:latest podman logout ${REGISTRY} else echo "No new version, exiting..." exit 1 fi echo "Scheduled build complete!" } container_rebuild() { echo "Rebuilding container..." podman login ${REGISTRY} podman build -f ${OPT_CONTAINERFILE} -t ${REGISTRY}/${REGISTRY_NAMESPACE}:${TAG} -t ${REGISTRY}/${REGISTRY_NAMESPACE}:latest --build-arg foundry_url=${FOUNDRY_URL} podman push ${REGISTRY}/${REGISTRY_NAMESPACE}:${TAG} podman push ${REGISTRY}/${REGISTRY_NAMESPACE}:latest podman logout ${REGISTRY} echo "Rebuild complete!" } ############################################################################################################################### # Main Script ############################################################################################################################### get_parameters "$@" if [[ "$OPT_SCHEDULED" == "TRUE" ]]; then container_scheduled_build fi if [[ "$OPT_REBUILD" == "TRUE" ]]; then container_rebuild fi if [[ "$INITIALIZE" == "TRUE" ]]; then container_initialize fi