Main release #227
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: PHPUnit | |
on: | |
pull_request: | |
branches: [ "main", "staging" ] | |
push: | |
branches: [ "Refractor-branch" ] | |
jobs: | |
build-test: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
- name: install mariadb | |
run: | | |
sudo apt install mariadb-server | |
sudo systemctl disable mariadb | |
sudo systemctl stop mariadb | |
- name: Setup PHP | |
id: setup-php | |
uses: shivammathur/setup-php@v2 | |
with: | |
extensions: phar, iconv, mbstring, gd, intl, sodium, zip | |
tools: composer | |
- name: Set up the database and start mariadb | |
run: | | |
set -x | |
mariadb_data_dir="./mariadb_data" | |
mariadb_socket="/run/mysqld/mysqld.sock" | |
moodle_db_name="moodle" | |
moodle_sql_file="./MoodleSQL.sql" | |
root_username="root" | |
root_password="root" | |
# Function to check and kill existing processes | |
kill_existing() { | |
local process=$1 | |
if pgrep -x "$process" > /dev/null; then | |
echo "Killing existing $process process..." | |
sudo pkill -x "$process" | |
sleep 2 | |
fi | |
} | |
# Function to kill process using a specific port | |
kill_port_user() { | |
local port=$1 | |
local pid=$(lsof -ti:$port) | |
if [ ! -z "$pid" ]; then | |
echo "Killing process using port $port..." | |
sudo kill -9 $pid | |
sleep 2 | |
fi | |
} | |
# Ensure MariaDB data directory exists | |
mkdir -p ${mariadb_data_dir} | |
ls -l | |
# Ensure MariaDB data directory exists | |
mkdir -p ${mariadb_data_dir} | |
ls -l | |
# Initialize MariaDB if not already done | |
if [ ! -d "${mariadb_data_dir}/mysql" ]; then | |
mysql_install_db --datadir=${mariadb_data_dir} | |
# Start MariaDB temporarily to set up the database | |
# sudo touch ${mariadb_socket} | |
sudo chmod -R 2777 `dirname ${mariadb_socket}` | |
mysqld --datadir=${mariadb_data_dir} --socket=${mariadb_socket} --skip-grant-tables & | |
TEMP_MYSQL_PID=$! | |
while [ ! -S ${mariadb_socket} ]; | |
do | |
echo "no socket file. Waiting 2 secs and trying again"; | |
sleep 2 | |
done | |
echo "MariaDB is up continuing."; | |
mysqld --verbose --help | grep "socket" | |
ps aux | grep mysqld | |
# Set root password and authentication method | |
echo "Setting root password..." | |
mysql -uroot -S${mariadb_socket} <<EOF | |
FLUSH PRIVILEGES; | |
ALTER USER 'root'@'localhost' IDENTIFIED BY '${root_password}'; | |
FLUSH PRIVILEGES; | |
EOF | |
# Verify root password | |
echo "Verifying root password..." | |
mysql -uroot -p${root_password} -S${mariadb_socket} -e "SELECT 1;" || { | |
echo "Error: Root password verification failed." | |
kill $TEMP_MYSQL_PID | |
wait $TEMP_MYSQL_PID | |
exit 1 | |
} | |
mysql -uroot -p${root_password} -S${mariadb_socket} -e "CREATE DATABASE IF NOT EXISTS ${moodle_db_name}" || { | |
echo "Error: Failed to create database ${moodle_db_name}." | |
kill $TEMP_MYSQL_PID | |
wait $TEMP_MYSQL_PID | |
exit 1 | |
} | |
if [ -f "${moodle_sql_file}" ]; then | |
mysql -uroot -p${root_password} -S${mariadb_socket} ${moodle_db_name} < ${moodle_sql_file} && { | |
echo "SQL file imported successfully." | |
} || { | |
echo "Error: Failed to import SQL file." | |
} | |
else | |
echo "Warning: ${moodle_sql_file} not found. Database created but not populated." | |
fi | |
kill $TEMP_MYSQL_PID | |
wait $TEMP_MYSQL_PID | |
fi | |
# Kill existing MariaDB and PHP processes | |
kill_existing "mysqld" | |
kill_existing "php" | |
# Start MariaDB | |
start_mariadb() { | |
echo "Starting MariaDB..." | |
mysqld --datadir=${mariadb_data_dir} --socket=${mariadb_socket} & | |
MARIADB_PID=$! | |
while [ ! -S ${mariadb_socket} ]; | |
do | |
echo "no socket file. Waiting 2 secs and trying again"; | |
sleep 2 | |
done | |
echo "socket is here continuing."; | |
} | |
# Adminer is not required for testing, so we skip the setup | |
# Start PHP built-in server for Moodle | |
start_php_server() { | |
echo "Starting PHP built-in server for Moodle..." | |
php -S 0.0.0.0:8000 -t ./server/moodle -c ./etc/php/8.3/cli/php.ini & | |
PHP_SERVER_PID=$! | |
} | |
# Function to stop services | |
stop_services() { | |
echo "Stopping services..." | |
kill $MARIADB_PID $PHP_SERVER_PID 2>/dev/null | |
rm -f ${mariadb_socket} | |
} | |
# Start services | |
start_mariadb | |
start_php_server | |
echo "MariaDB and PHP server are now running." | |
echo "Moodle is available at http://localhost:8000" | |
echo "To connect to MariaDB, use:" | |
echo " Host: 127.0.0.1 or localhost" | |
echo " Username: root" | |
echo " Password: ${root_password}" | |
echo " Database: ${moodle_db_name}" | |
echo "Press Ctrl+C to stop the services and exit." | |
- name: Install and initialise phpunit | |
run: | | |
echo en_AU.UTF-8 UTF-8 | sudo tee -a /etc/locale.gen | |
sudo locale-gen | |
if [ "$(php -r "echo ini_get('max_input_vars');")" -lt 5000 ]; then | |
echo "max_input_vars = 5000" >> /etc/php/8.3/cli/php.ini | |
fi | |
export LANG="en_AU.UTF-8" | |
export LC_ALL="en_AU.UTF-8" | |
export PHPRC=`realpath /etc/php/8.3/cli/php.ini` | |
# server/php/php.ini` | |
composer require --dev phpunit/phpunit | |
REPO_ROOT="`pwd`" | |
cd "$REPO_ROOT"/server/moodle | |
php admin/cli/install.php \ | |
--lang=en \ | |
--wwwroot="http://localhost:8000/" \ | |
--dataroot="$REPO_ROOT/server/moodledata" \ | |
--dbpass=root \ | |
--dbport=3306 \ | |
--dbsocket=/run/mysqld/mysqld.sock \ | |
--skip-database \ | |
--non-interactive \ | |
--agree-license \ | |
--allow-unstable \ | |
--fullname="Moodle testing thing" \ | |
--shortname="mtt" \ | |
--adminpass="hunter2" | |
echo "\$CFG->phpunit_prefix = 'phpu_';" >>"$REPO_ROOT/server/moodle/config.php" | |
echo "\$CFG->phpunit_dataroot = '$(realpath "$REPO_ROOT/server/moodledata/phpunit")';">>"$REPO_ROOT/server/moodle/config.php" | |
php admin/tool/phpunit/cli/init.php | |
- name: Run tests | |
run: | | |
cd server/moodle | |
for file in `find mod/livequiz/tests/phpunit -type f` | |
do | |
echo Running tests in $file | |
./vendor/bin/phpunit $file | |
done |