142 lines
5.1 KiB
Bash
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 |