Merge pull request #23 from AAU-P5-Moodle/22-project-improve-gitignor… #19
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 Tests for Moodle Homework Plugin | |
on: | |
push: | |
branches: [ "main" ] | |
jobs: | |
homework-plugin-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 | |
# uses: getong/[email protected] | |
- 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 php.ini | |
run: > | |
REPO_ROOT="`pwd`" | |
sed -i | |
-e 's/;extension=gd/extension=gd/' | |
-e 's/;extension=intl/extension=intl/' | |
-e 's/;extension=sodium/extension=sodium/' | |
-e 's/;extension=zip/extension=zip/' | |
-e "s|curl\.cainfo.*|curl.cainfo=\"$REPO_ROOT/cacert.pem\"|" | |
-e "s|openssl\.cafile.*|openssl.cafile=\"$REPO_ROOT\"/server/apache/bin/curl-ca-bundle.crt|" | |
-e '$a\\max_input_vars=5000' | |
-e '$a\\memory_limit_256M' | |
-e '$a\\post_max_size=50M' | |
-e '$a\\upload_max_filesize=50M' | |
-e '$a\\extension=phar.so' | |
server/php/php.ini | |
# - name: Install composer | |
# run: | | |
# cd server/moodle | |
# php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" | |
# php composer-setup.php | |
- name: Check enabled PHP extensions | |
run: | | |
php -m | grep -E 'gd|intl|zip' | |
php -r "echo phpversion('phar');" | |
php -r "echo ini_get('max_input_vars');" | |
more php.ini | |
realpath php.ini | |
# - name: Copy php.ini to PHP-CLI directory | |
# run: | | |
# sudo cp server/php/php.ini /etc/php/8.2/cli/php.ini | |
# - uses: "ramsey/composer-install@v3" | |
# with: | |
# working-directory: "/etc/php/8.2/cli/php.ini" | |
- name: install composer | |
run: | | |
cd server/moodle | |
sudo apt-get update | |
sudo apt-get install curl | |
sudo apt-get install php php-curl | |
curl -sS https://getcomposer.org/installer -o composer-setup.php | |
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer | |
sudo composer self-update | |
composer -v | |
- name: Check enabled PHP extensions | |
run: | | |
php -m | |
php --ini | |
- name: Install the curl certificate | |
run: curl https://curl.se/ca/cacert.pem >cacert.pem | |
- 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=$! | |
sleep 15 # Increased wait time to ensure MariaDB is ready | |
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=$! | |
sleep 10 # Increased wait time to ensure MariaDB is ready | |
# Check if MariaDB socket file is created | |
if [ ! -S ${mariadb_socket} ]; then | |
echo "Error: MariaDB socket file not found at ${mariadb_socket}. Exiting..." | |
exit 1 | |
fi | |
} | |
# I do not install adminer because I'm lazy | |
# 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 ./server/php/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` | |
REPO_ROOT="`pwd`" | |
cd "$REPO_ROOT"/server/moodle | |
composer require --dev phpunit/phpunit ^9 | |
if [ ! -d "$REPO_ROOT/server/moodledata/phpunit" ]; then | |
mkdir "$REPO_ROOT/server/moodledata/phpunit" | |
fi | |
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="Tests for Moodle Homework Plugin" \ | |
--shortname="mhp" \ | |
--adminpass="Admin.123" | |
echo "This is the path: $(realpath config.php)" | |
if [ -f "$REPO_ROOT/server/moodle/config.php" ]; then | |
echo "File $("$REPO_ROOT/server/moodle/config.php") exist." | |
else | |
echo "Can not find $("$REPO_ROOT/server/moodle/config.php") file" | |
fi | |
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: | | |
pwd | |
cd server/moodle | |
vendor/bin/phpunit --testsuite mod_homework_testsuite | |