initial commit
This commit is contained in:
142
dev_build_container.sh
Normal file
142
dev_build_container.sh
Normal file
@@ -0,0 +1,142 @@
|
||||
#!/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, php83, php84"
|
||||
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 --force-recreate
|
||||
# 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' ] || [ "$buildtarget" == 'php84' ] ; then
|
||||
for version in "${dbarr[@]}"
|
||||
do
|
||||
checkdep
|
||||
prepare
|
||||
buildenvfile "$buildtarget" "$version"
|
||||
build "$buildtarget" "$version"
|
||||
cleanup
|
||||
done
|
||||
else
|
||||
echo "Input not valid"
|
||||
usage
|
||||
fi
|
||||
|
||||
exit
|
||||
Reference in New Issue
Block a user