Files

129 lines
3.7 KiB
Bash
Executable File

#!/usr/bin/env bash
# ./scripts/build-docker-image.sh --debug --build
# Charge le fichier .env
rootDir=$(dirname "$BASH_SOURCE")
source $rootDir/../.env
isApache=false
isFrankenphp=false
phpVersion=""
serverVersion=""
serverName=""
withDebug=false
withBuild=false
withPushImage=false
withApacheOption=false
withFrankenphpOption=false
for arg in "$@"; do
case "$arg" in
--debug)
withDebug=true
;;
--build)
withBuild=true
;;
--push-image)
withPushImage=true
;;
--apache)
withApacheOption=true
;;
--frankenphp)
withFrankenphpOption=true
;;
esac
done
# Traitement des options --apache et --frankenphp
if [[ "$withApacheOption" == "true" ]]; then
if [[ "$APACHE_PHP_IMAGE" == "" ]]; then
echo "La variable d'environnement APACHE_PHP_IMAGE n'est pas définie."
exit 1
else
SERVER_PHP_IMAGE=$APACHE_PHP_IMAGE
fi
elif [[ "$withFrankenphpOption" == "true" ]]; then
if [[ "$FRANKENPHP_IMAGE" == "" ]]; then
echo "La variable d'environnement FRANKENPHP_IMAGE n'est pas définie."
exit 1
else
SERVER_PHP_IMAGE=$FRANKENPHP_IMAGE
fi
fi
# Vérifie que le repository de l'image est définie
if [[ "$SERVER_IMAGE_REPOSITORY" == "" ]]; then
echo "Le repository de l'image est inconnu. Veuillez définir la variable d'environnement SERVER_IMAGE_REPOSITORY."
exit 1
fi
# Détermine si l'image du serveur est Apache ou FrankenPHP
if [[ "$SERVER_PHP_IMAGE" == *"apache"* ]]; then
isApache=true
phpVersion="${SERVER_PHP_IMAGE#*:}"
phpVersion="${phpVersion%%-*}"
serverVersion="2.4"
serverName="Apache"
fi
if [[ "$SERVER_PHP_IMAGE" == *"frankenphp"* ]]; then
isFrankenphp=true
phpVersion="${SERVER_PHP_IMAGE##*-php}"
serverVersion="${SERVER_PHP_IMAGE#*:}"
serverVersion="${serverVersion%%-*}"
serverName="FrankenPHP"
fi
# Vérifie le numéro de la version PHP
if [[ ! "$phpVersion" =~ ^[0-9]+(\.[0-9]+)*$ ]]; then
echo "Version de PHP incorrecte : $phpVersion"
exit 1
fi
# Vérifie le numéro de la version du serveur
if [[ ! "$serverVersion" =~ ^[0-9]+(\.[0-9]+)*$ ]]; then
echo "Version du serveur incorrecte : $serverVersion"
exit 1
fi
# Détermine le titre de l'image
serverImageTitleLabel="Image PHP :phpVersion avec :serverName :serverVersion"
serverImageTitleLabel=${serverImageTitleLabel/:phpVersion/${phpVersion}}
serverImageTitleLabel=${serverImageTitleLabel/:serverName/${serverName}}
serverImageTitleLabel=${serverImageTitleLabel/:serverVersion/${serverVersion}}
# Détermine la description de l'image
serverImageDescriptionLabel="Installation d'un serveur :serverName avec la version :phpVersion de PHP. Inclus dans l'image : Composer, Node, NPM, MariaDB, Memchached, Redis et PIE (PHP Installer for Extensions)."
serverImageDescriptionLabel=${serverImageDescriptionLabel/:phpVersion/${phpVersion}}
serverImageDescriptionLabel=${serverImageDescriptionLabel/:serverName/${serverName}}
# Détermine le tag de l'image
dockerImageTag="${SERVER_IMAGE_REPOSITORY}:${phpVersion}-${serverName,,}-${serverVersion}"
buildCommand="docker build \
-f Dockerfile \
-t ${dockerImageTag} \
--build-arg SERVER_PHP_IMAGE=${SERVER_PHP_IMAGE} \
--build-arg SERVER_IMAGE_TITLE_LABEL=\"${serverImageTitleLabel}\" \
--build-arg SERVER_IMAGE_DESCRIPTION_LABEL=\"${serverImageDescriptionLabel}\" \
--build-arg WITH_MEMCACHED=true \
--build-arg WITH_REDIS=true \
.
"
if [[ "$withDebug" == "true" ]]; then
echo $buildCommand
fi
if [[ "$withBuild" == "true" ]]; then
eval "$buildCommand"
echo "Build de l'image ${phpVersion}-${serverName,,}-${serverVersion} terminé."
fi
if [[ "$withPushImage" == "true" ]]; then
docker push $dockerImageTag
echo "Push du tag $dockerImageTag."
fi