diff --git a/.github/workflows/codesniffer.yml b/.github/workflows/codesniffer.yml new file mode 100644 index 000000000..69d438f1b --- /dev/null +++ b/.github/workflows/codesniffer.yml @@ -0,0 +1,38 @@ +name: Codesniffer for Moodle Homework Plugin + +on: + push: + branches: [ "10-homework-teacher-feature-be-able-to-add-links-for-other-sources" ] + pull_request: + branches: [ "10-homework-teacher-feature-be-able-to-add-links-for-other-sources" ] + +jobs: + homework-plugin-codesniffer: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + # Set up Composer + - name: Set up Composer + run: | + composer global config minimum-stability dev + composer global config --no-plugins allow-plugins.dealerdirect/phpcodesniffer-composer-installer true + composer global require moodlehq/moodle-cs + # Add Composer global bin to PATH + - name: Add Composer global bin to PATH + run: echo "PATH=$HOME/.composer/vendor/bin:$PATH" >> $GITHUB_ENV + + # Create .phpcs.xml file with required content + - name: Create .phpcs.xml file + run: | + cat <> ./.phpcs.xml + + + + + EOT + + # Run PHP_CodeSniffer + - name: Run Code Sniffer + run: phpcs server/moodle/mod/homework/ diff --git a/.github/workflows/phpunit.yml b/.github/workflows/phpunit.yml new file mode 100644 index 000000000..f4b12e65c --- /dev/null +++ b/.github/workflows/phpunit.yml @@ -0,0 +1,282 @@ +name: PHPUnit Tests for Moodle Homework Plugin + +on: + push: + branches: [ "10-homework-teacher-feature-be-able-to-add-links-for-other-sources" ] + pull_request: + branches: [ "10-homework-teacher-feature-be-able-to-add-links-for-other-sources" ] + +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/mariadb-action@v1.11 + + - 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} </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 + + 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 + + +