From 69fa4f67985b9efb9bfea201f3df58c0bbecbbc8 Mon Sep 17 00:00:00 2001 From: Alexander Bias Date: Wed, 10 Jan 2024 20:59:15 +0100 Subject: [PATCH] Add Github actions --- .github/workflows/moodle-plugin-ci.yml | 134 ++++++++++++++++++ ...at_theme_boost_union_child_behat_admin.php | 43 ++++++ ...t_theme_boost_union_child_behat_blocks.php | 42 ++++++ ...t_theme_boost_union_child_behat_course.php | 45 ++++++ ...at_theme_boost_union_child_behat_grade.php | 42 ++++++ ...heme_boost_union_child_behat_mod_forum.php | 42 ++++++ ...theme_boost_union_child_behat_mod_quiz.php | 43 ++++++ ...eme_boost_union_child_behat_navigation.php | 43 ++++++ ...st_union_child_behat_repository_upload.php | 44 ++++++ tests/behat/theme_boost_union_child.feature | 8 ++ 10 files changed, 486 insertions(+) create mode 100644 .github/workflows/moodle-plugin-ci.yml create mode 100644 tests/behat/behat_theme_boost_union_child_behat_admin.php create mode 100644 tests/behat/behat_theme_boost_union_child_behat_blocks.php create mode 100644 tests/behat/behat_theme_boost_union_child_behat_course.php create mode 100644 tests/behat/behat_theme_boost_union_child_behat_grade.php create mode 100644 tests/behat/behat_theme_boost_union_child_behat_mod_forum.php create mode 100644 tests/behat/behat_theme_boost_union_child_behat_mod_quiz.php create mode 100644 tests/behat/behat_theme_boost_union_child_behat_navigation.php create mode 100644 tests/behat/behat_theme_boost_union_child_behat_repository_upload.php create mode 100644 tests/behat/theme_boost_union_child.feature diff --git a/.github/workflows/moodle-plugin-ci.yml b/.github/workflows/moodle-plugin-ci.yml new file mode 100644 index 0000000..4e9e2d6 --- /dev/null +++ b/.github/workflows/moodle-plugin-ci.yml @@ -0,0 +1,134 @@ +name: Moodle Plugin CI + +on: [push, pull_request] + +jobs: + test: + runs-on: ubuntu-22.04 + + services: + postgres: + image: postgres:13 + env: + POSTGRES_USER: 'postgres' + POSTGRES_HOST_AUTH_METHOD: 'trust' + ports: + - 5432:5432 + options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 3 + + mariadb: + image: mariadb:10 + env: + MYSQL_USER: 'root' + MYSQL_ALLOW_EMPTY_PASSWORD: "true" + MYSQL_CHARACTER_SET_SERVER: "utf8mb4" + MYSQL_COLLATION_SERVER: "utf8mb4_unicode_ci" + ports: + - 3306:3306 + options: --health-cmd="mysqladmin ping" --health-interval 10s --health-timeout 5s --health-retries 3 + + strategy: + fail-fast: false + matrix: + php: ['8.0', '8.1', '8.2'] + moodle-branch: ['MOODLE_403_STABLE'] + database: [pgsql, mariadb] + + steps: + - name: Check out repository code + uses: actions/checkout@v3 + with: + path: plugin + + - name: Setup PHP ${{ matrix.php }} + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php }} + extensions: ${{ matrix.extensions }} + ini-values: max_input_vars=5000 + coverage: none + + - name: Initialise moodle-plugin-ci + run: | + composer create-project -n --no-dev --prefer-dist moodlehq/moodle-plugin-ci ci ^4 + echo $(cd ci/bin; pwd) >> $GITHUB_PATH + echo $(cd ci/vendor/bin; pwd) >> $GITHUB_PATH + sudo locale-gen en_AU.UTF-8 + echo "NVM_DIR=$HOME/.nvm" >> $GITHUB_ENV + + - name: Add Boost Union as dependency + run: | + moodle-plugin-ci add-plugin --branch master moodle-an-hochschulen/moodle-theme_boost_union + + - name: Copy and modify Boost Union Behat tests to be used on Boost Union Child + # The Moodle Behat init script ignores Behat features from themes which are not active. + # However, our goal is to run all Boost Union tests on Boost Union Child to verify that Boost Union Child + # does not break any of Boost Union's features. + # To realize this, we copy the Boost Union feature files to the Boost Union child test directory. + # The Behat init script won't ignore them there then. + run: | + # Copy the Boost Union feature files to a temporary folder. + mkdir plugin/tests/behatbu + cp moodle-plugin-ci-plugins/moodle-theme_boost_union/tests/behat/*.feature plugin/tests/behatbu/ + # Add a suffix to the feature title in the Boost Union features. + # This is necessary as the Moodle code checker would otherwise complain about duplicate feature names. + sed -i '/^Feature:/ s/$/ - Running on Boost Union Child/' plugin/tests/behatbu/*.feature + # Add the @theme_boost_union_child tag to the tag list of the Boost Union features. + # This is necessary as the Moodle plugin validator would otherwise complain about the missing tag. + sed -i '1 s/$/ @theme_boost_union_child/' plugin/tests/behatbu/*.feature + # Move the modified Boost Union feature files to the Boost Union Child Behat test directory. + mv plugin/tests/behatbu/*.feature plugin/tests/behat/ + rm -rf plugin/tests/behatbu + + - name: Install moodle-plugin-ci + run: | + moodle-plugin-ci install --plugin ./plugin --db-host=127.0.0.1 + env: + DB: ${{ matrix.database }} + MOODLE_BRANCH: ${{ matrix.moodle-branch }} + + - name: PHP Lint + if: ${{ always() }} + run: moodle-plugin-ci phplint + + - name: PHP Copy/Paste Detector + continue-on-error: true # This step will show errors but will not fail + if: ${{ always() }} + run: moodle-plugin-ci phpcpd + + - name: PHP Mess Detector + continue-on-error: true # This step will show errors but will not fail + if: ${{ always() }} + run: moodle-plugin-ci phpmd + + - name: Moodle Code Checker + if: ${{ always() }} + run: moodle-plugin-ci phpcs --max-warnings 0 + + - name: Moodle PHPDoc Checker + if: ${{ always() }} + run: moodle-plugin-ci phpdoc --max-warnings 0 + + - name: Validating + if: ${{ always() }} + run: moodle-plugin-ci validate + + - name: Check upgrade savepoints + if: ${{ always() }} + run: moodle-plugin-ci savepoints + + - name: Mustache Lint + if: ${{ always() }} + run: moodle-plugin-ci mustache + + - name: Grunt + if: ${{ always() }} + run: moodle-plugin-ci grunt --max-lint-warnings 0 + + - name: PHPUnit tests + if: ${{ always() }} + run: moodle-plugin-ci phpunit --fail-on-warning + + - name: Behat features + if: ${{ always() }} + run: moodle-plugin-ci behat --profile chrome --suite boost_union_child --tags="@theme_boost_union,@theme_boost_union_child" diff --git a/tests/behat/behat_theme_boost_union_child_behat_admin.php b/tests/behat/behat_theme_boost_union_child_behat_admin.php new file mode 100644 index 0000000..c1de52f --- /dev/null +++ b/tests/behat/behat_theme_boost_union_child_behat_admin.php @@ -0,0 +1,43 @@ +. + +/** + * Behat administration-related step definition overrides for the Boost Union Child theme. + * + * @package theme_boost_union_child + * @category test + * @copyright 2022 Luca Bösch, BFH Bern University of Applied Sciences luca.boesch@bfh.ch + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +// NOTE: no MOODLE_INTERNAL test here, this file may be required by behat before including /config.php. +// For that reason, we can't even rely on $CFG->admin being available here. + +require_once(__DIR__ . '/../../../boost_union/tests/behat/behat_theme_boost_union_behat_admin.php'); + +use Behat\Gherkin\Node\TableNode as TableNode, + Behat\Mink\Exception\ElementNotFoundException as ElementNotFoundException; + +/** + * Administration-related step definition overrides for the Boost Union theme. + * + * @package theme_boost_union_child + * @category test + * @copyright 2022 Luca Bösch, BFH Bern University of Applied Sciences luca.boesch@bfh.ch + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class behat_theme_boost_union_child_behat_admin extends behat_theme_boost_union_behat_admin { +} diff --git a/tests/behat/behat_theme_boost_union_child_behat_blocks.php b/tests/behat/behat_theme_boost_union_child_behat_blocks.php new file mode 100644 index 0000000..9de7167 --- /dev/null +++ b/tests/behat/behat_theme_boost_union_child_behat_blocks.php @@ -0,0 +1,42 @@ +. + +/** + * Behat blocks-related step definition overrides for the Boost Union Child theme. + * + * @package theme_boost_union_child + * @category test + * @copyright 2022 Luca Bösch, BFH Bern University of Applied Sciences luca.boesch@bfh.ch + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +// NOTE: no MOODLE_INTERNAL test here, this file may be required by behat before including /config.php. +// For that reason, we can't even rely on $CFG->admin being available here. + +require_once(__DIR__ . '/../../../boost_union/tests/behat/behat_theme_boost_union_behat_blocks.php'); + +use Behat\Mink\Exception\ElementNotFoundException as ElementNotFoundException; + +/** + * Blocks-related step definition overrides for the Boost Union Child theme. + * + * @package theme_boost_union_child + * @category test + * @copyright 2022 Luca Bösch, BFH Bern University of Applied Sciences luca.boesch@bfh.ch + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class behat_theme_boost_union_child_behat_blocks extends behat_theme_boost_union_behat_blocks { +} diff --git a/tests/behat/behat_theme_boost_union_child_behat_course.php b/tests/behat/behat_theme_boost_union_child_behat_course.php new file mode 100644 index 0000000..6d927bd --- /dev/null +++ b/tests/behat/behat_theme_boost_union_child_behat_course.php @@ -0,0 +1,45 @@ +. + +/** + * Behat course-related step definition overrides for the Boost Union Child theme. + * + * @package theme_boost_union_child + * @category test + * @copyright 2022 Luca Bösch, BFH Bern University of Applied Sciences luca.boesch@bfh.ch + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +// NOTE: no MOODLE_INTERNAL test here, this file may be required by behat before including /config.php. +// For that reason, we can't even rely on $CFG->admin being available here. + +require_once(__DIR__ . '/../../../boost_union/tests/behat/behat_theme_boost_union_behat_course.php'); + +use Behat\Gherkin\Node\TableNode as TableNode, + Behat\Mink\Exception\ExpectationException as ExpectationException, + Behat\Mink\Exception\DriverException as DriverException, + Behat\Mink\Exception\ElementNotFoundException as ElementNotFoundException; + +/** + * Course-related step definition overrides for the Boost Union Child theme. + * + * @package theme_boost_union_child + * @category test + * @copyright 2022 Luca Bösch, BFH Bern University of Applied Sciences luca.boesch@bfh.ch + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class behat_theme_boost_union_child_behat_course extends behat_theme_boost_union_behat_course { +} diff --git a/tests/behat/behat_theme_boost_union_child_behat_grade.php b/tests/behat/behat_theme_boost_union_child_behat_grade.php new file mode 100644 index 0000000..cf0942a --- /dev/null +++ b/tests/behat/behat_theme_boost_union_child_behat_grade.php @@ -0,0 +1,42 @@ +. + +/** + * Behat grade-related step definition overrides for the Boost Union Child theme. + * + * @package theme_boost_union_child + * @category test + * @copyright 2022 Luca Bösch, BFH Bern University of Applied Sciences luca.boesch@bfh.ch + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +// NOTE: no MOODLE_INTERNAL test here, this file may be required by behat before including /config.php. +// For that reason, we can't even rely on $CFG->admin being available here. + +require_once(__DIR__ . '/../../../boost_union/tests/behat/behat_theme_boost_union_behat_grade.php'); + +use Behat\Gherkin\Node\TableNode as TableNode; + +/** + * Grade-related step definition overrides for the Boost Union Child theme. + * + * @package theme_boost_union_child + * @category test + * @copyright 2022 Luca Bösch, BFH Bern University of Applied Sciences luca.boesch@bfh.ch + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class behat_theme_boost_union_child_behat_grade extends behat_theme_boost_union_behat_grade { +} diff --git a/tests/behat/behat_theme_boost_union_child_behat_mod_forum.php b/tests/behat/behat_theme_boost_union_child_behat_mod_forum.php new file mode 100644 index 0000000..6caa711 --- /dev/null +++ b/tests/behat/behat_theme_boost_union_child_behat_mod_forum.php @@ -0,0 +1,42 @@ +. + +/** + * Behat mod_forum-related step definition overrides for the Boost Union Child theme. + * + * @package theme_boost_union_child + * @category test + * @copyright 2022 Luca Bösch, BFH Bern University of Applied Sciences luca.boesch@bfh.ch + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +// NOTE: no MOODLE_INTERNAL test here, this file may be required by behat before including /config.php. +// For that reason, we can't even rely on $CFG->admin being available here. + +require_once(__DIR__ . '/../../../boost_union/tests/behat/behat_theme_boost_union_behat_mod_forum.php'); + +use Behat\Gherkin\Node\TableNode as TableNode; + +/** + * Forum-related step definition overrides for the Boost Union Child theme. + * + * @package theme_boost_union_child + * @category test + * @copyright 2022 Luca Bösch, BFH Bern University of Applied Sciences luca.boesch@bfh.ch + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class behat_theme_boost_union_child_behat_mod_forum extends behat_theme_boost_union_behat_mod_forum { +} diff --git a/tests/behat/behat_theme_boost_union_child_behat_mod_quiz.php b/tests/behat/behat_theme_boost_union_child_behat_mod_quiz.php new file mode 100644 index 0000000..17a97a7 --- /dev/null +++ b/tests/behat/behat_theme_boost_union_child_behat_mod_quiz.php @@ -0,0 +1,43 @@ +. + +/** + * Behat mod_quiz-related step definition overrides for the Boost Union Child theme. + * + * @package theme_boost_union_child + * @category test + * @copyright 2022 Luca Bösch, BFH Bern University of Applied Sciences luca.boesch@bfh.ch + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +// NOTE: no MOODLE_INTERNAL test here, this file may be required by behat before including /config.php. +// For that reason, we can't even rely on $CFG->admin being available here. + +require_once(__DIR__ . '/../../../boost_union/tests/behat/behat_theme_boost_union_behat_mod_quiz.php'); + +use Behat\Gherkin\Node\TableNode as TableNode; +use Behat\Mink\Exception\ExpectationException as ExpectationException; + +/** + * Quiz-related step definition overrides for the Boost Union Child theme. + * + * @package theme_boost_union_child + * @category test + * @copyright 2022 Luca Bösch, BFH Bern University of Applied Sciences luca.boesch@bfh.ch + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class behat_theme_boost_union_child_behat_mod_quiz extends behat_theme_boost_union_behat_mod_quiz { +} diff --git a/tests/behat/behat_theme_boost_union_child_behat_navigation.php b/tests/behat/behat_theme_boost_union_child_behat_navigation.php new file mode 100644 index 0000000..9cd927d --- /dev/null +++ b/tests/behat/behat_theme_boost_union_child_behat_navigation.php @@ -0,0 +1,43 @@ +. + +/** + * Behat navigation-related step definition overrides for the Boost Union Child theme. + * + * @package theme_boost_union_child + * @category test + * @copyright 2022 Luca Bösch, BFH Bern University of Applied Sciences luca.boesch@bfh.ch + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +// NOTE: no MOODLE_INTERNAL test here, this file may be required by behat before including /config.php. +// For that reason, we can't even rely on $CFG->admin being available here. + +require_once(__DIR__ . '/../../../boost_union/tests/behat/behat_theme_boost_union_behat_navigation.php'); + +use Behat\Mink\Exception\ElementNotFoundException as ElementNotFoundException; +use Behat\Mink\Exception\ExpectationException as ExpectationException; + +/** + * Navigation-related step definition overrides for the Boost Union Child theme. + * + * @package theme_boost_union_child + * @category test + * @copyright 2022 Luca Bösch, BFH Bern University of Applied Sciences luca.boesch@bfh.ch + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class behat_theme_boost_union_child_behat_navigation extends behat_theme_boost_union_behat_navigation { +} diff --git a/tests/behat/behat_theme_boost_union_child_behat_repository_upload.php b/tests/behat/behat_theme_boost_union_child_behat_repository_upload.php new file mode 100644 index 0000000..d1909f3 --- /dev/null +++ b/tests/behat/behat_theme_boost_union_child_behat_repository_upload.php @@ -0,0 +1,44 @@ +. + +/** + * Behat upload repository-related step definition overrides for the Boost Union Child theme. + * + * @package theme_boost_union_child + * @category test + * @copyright 2022 Luca Bösch, BFH Bern University of Applied Sciences luca.boesch@bfh.ch + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +// NOTE: no MOODLE_INTERNAL test here, this file may be required by behat before including /config.php. +// For that reason, we can't even rely on $CFG->admin being available here. + +require_once(__DIR__ . '/../../../boost_union/tests/behat/behat_theme_boost_union_behat_repository_upload.php'); + +use Behat\Mink\Exception\DriverException as DriverException, + Behat\Mink\Exception\ExpectationException as ExpectationException, + Behat\Gherkin\Node\TableNode as TableNode; + +/** + * Repository upload-related step definition overrides for the Boost Union Child theme. + * + * @package theme_boost_union_child + * @category test + * @copyright 2022 Luca Bösch, BFH Bern University of Applied Sciences luca.boesch@bfh.ch + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class behat_theme_boost_union_child_behat_repository_upload extends behat_theme_boost_union_behat_repository_upload { +} diff --git a/tests/behat/theme_boost_union_child.feature b/tests/behat/theme_boost_union_child.feature new file mode 100644 index 0000000..1dc5235 --- /dev/null +++ b/tests/behat/theme_boost_union_child.feature @@ -0,0 +1,8 @@ +@theme_boost_union_child +Feature: Extending the theme_boost_union plugin with a child theme + In order to build a child theme for Boost Union + As developer + I need to be able to build several kinds of extensions to Boost Union + + Scenario: Placeholder scenario + When I log in as "admin"