DockerLamp/dev_build_container.sh

142 lines
5.1 KiB
Bash

#!/bin/bash
# This script is for building
# all stack variations and check for errors
# during the mysqli and pdo connect.
# This Script is build for Linux
# Info:
# This Script works on WSL2 _but_ you cant use
# WSL2 Windows Host mounted paths for the data.
dc=$(which docker-compose)
osversion=$(uname)
dbarr=(mariadb103 mariadb104 mariadb105 mariadb106 mysql57 mysql8)
checkdep() {
echo "### checking dependencies"
which docker || { echo 'Executable not found: docker' ; exit 1; }
which docker-compose || { echo 'Executable not found: docker-compose' ; exit 1; }
which curl || { echo 'Executable not found: curl' ; exit 1; }
which sed || { echo 'Executable not found: sed' ; exit 1; }
}
usage() {
echo "Usage:"
echo " -b = build all container variations of specified version"
echo " valid values are: php54, php56, php71, php72, php73, php74, php8, php81, php82"
echo -e " \nAttention: !!! SCRIPT REMOVES ALL DATA IN 'data/mysql/*' !!!"
}
# build stack variations
build () {
echo "### building $buildtarget-$version"
# removing old mysql data, old data prevents mysql
# from starting correct
echo -e "### cleaning old mysql data"
rm -rf ./data/mysql/*
echo -e "### building ./buildtarget/$buildtarget-$version.env \n"
$dc --env-file ./buildtest/$buildtarget-$version.env up -d --build
# wait for mysql to initialize
sleep 30
# check definitions
curlmysqli=$(curl -s --max-time 15 --connect-timeout 15 http://localhost/test_db.php |grep proper |wc -l |tr -d '[:space:]')
curlpdo=$(curl -s --max-time 15 --connect-timeout 15 http://localhost/test_db_pdo.php |grep proper |wc -l |tr -d '[:space:]')
# check if we can create a successfull connection to the database
# 1=OK everything else is not ok
if [ "$curlmysqli" -ne "1" ]; then
echo -e "### ERROR: myqli database check failed expected string 'proper' not found \n"
echo "### ...stopping container"
$dc --env-file ./buildtest/$buildtarget-$version.env down
exit
else
echo -e "\n OK - mysqli database check successfull \n"
sleep 3
fi
if [ "$curlpdo" -ne "1" ]; then
echo -e "### ERROR: pdo database check failed expected string 'proper' not found \n"
echo "### ...stopping container"
$dc --env-file ./buildtest/$buildtarget-$version.env down
exit
else
echo -e "\n OK - pdo database check successfull \n"
sleep 3
fi
echo "### ... stopping container"
$dc --env-file ./buildtest/$buildtarget-$version.env down
}
buildenvfile () {
cat sample.env > ./buildtest/"$buildtarget"-"$version".env
sed -i "s/COMPOSE_PROJECT_NAME=lamp/COMPOSE_PROJECT_NAME=$buildtarget-buildtest/" ./buildtest/"$buildtarget"-"$version".env
sed -i "s/PHPVERSION=php8/PHPVERSION=$buildtarget/" ./buildtest/"$buildtarget"-"$version".env
sed -i "s/DATABASE=mysql8/DATABASE=$version/" ./buildtest/"$buildtarget"-"$version".env
}
prepare () {
# generate all .env files for building
echo "### building env file"
mkdir -p ./buildtest
rm -rf ./buildtest/"$buildtarget"*
}
cleanup () {
echo "### cleaning old env file"
rm -rf ./buildtest/"$buildtarget"*
}
while getopts ":b:" opt;
do
case "${opt}" in
b) buildtarget=${OPTARG};;
esac
no_args="false"
done
# check user input
[[ "$no_args" == "true" ]] && { usage; exit 1; }
# check if we are running on Linux
if [[ $osversion != 'Linux' ]]; then
echo "This Script only supports Linux sorry :("
exit
fi
# we don't want to test against mysql8 for the old
# php versions due to pdo, therefore we only
# take the first 5 elements of the database versions arrays
if [ "$buildtarget" == 'php54' ]||[ "$buildtarget" == 'php56' ]||[ "$buildtarget" == 'php71' ]||\
[ "$buildtarget" == 'php72' ]||[ "$buildtarget" == 'php73' ] ; then
for version in "${dbarr[@]:0:5}"
do
checkdep
prepare
buildenvfile "$buildtarget" "$version"
build "$buildtarget" "$version"
cleanup
done
elif [ "$buildtarget" == 'php74' ]||[ "$buildtarget" == 'php8' ]||[ "$buildtarget" == 'php81' ] || [ "$buildtarget" == 'php82' ] || [ "$buildtarget" == 'php83' ] ; then
for version in "${dbarr[@]}"
do
checkdep
prepare
buildenvfile "$buildtarget" "$version"
build "$buildtarget" "$version"
cleanup
done
else
echo "Input not valid"
usage
fi
exit