diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 000000000..c912f585e --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,145 @@ +# Title of the workflow +name: Moodle Office 365 Plugin CI + +# Run this workflow every time a new commit pushed to your repository or PR +# created. +on: [push, pull_request] + +jobs: + check: + 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: + folder: [auth/oidc, blocks/microsoft, local/o365, local/office365, local/onenote, repository/office365, theme/boost_o365teams, mod/assign/feedback/onenote, mod/assign/submission/onenote] + moodle-branch: ['MOODLE_401_STABLE'] + php: [7.4, 8.0, 8.1] + database: [pgsql, mariadb] + + include: + - folder: auth/oidc + - folder: blocks/microsoft + - folder: local/o365 + internal-deps: "auth/oidc" + - folder: local/office365 + - folder: local/onenote + - folder: repository/office365 + - folder: theme/boost_o365teams + - folder: mod/assign/feedback/onenote + internal-deps: "local/onenote" + - folder: mod/assign/submission/onenote + internal-deps: "local/onenote" + + steps: + - name: Check out sub repository code + uses: actions/checkout@v4 + with: + sparse-checkout: | + ${{ matrix.folder }} + ${{ matrix.internal-deps }} + path: plugin + + - name: Setup PHP ${{ matrix.php }} + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php }} + ini-values: max_input_vars=5000 + # If you are not using code coverage, keep "none". Otherwise, use "pcov" (Moodle 3.10 and up) or "xdebug". + # If you try to use code coverage with "none", it will fallback to phpdbg (which has known problems). + coverage: none + + # Install this project into a directory called "ci", updating PATH and + # locale, define nvm location. + - 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 + + # Run the default install. + - name: Install moodle-plugin-ci + run: | + mkdir -p ./extra-plugins + for dep in ${{ matrix.internal-deps }}; do + if [ -d "./plugin/$dep" ]; then + mkdir -p ./extra-plugins/${dep/\//_} + mv -v ./plugin/$dep/* ./extra-plugins/${dep/\//_}/ + else + echo "Directory ./plugin/$dep does not exist" + fi + done + moodle-plugin-ci install --plugin ./plugin/${{ matrix.folder }} --db-host=127.0.0.1 --extra-plugins ./extra-plugins + env: + DB: ${{ matrix.database }} + MOODLE_BRANCH: ${{ matrix.moodle-branch }} + SHELLOPTS: errexit:nounset:xtrace + + - name: PHP Lint + if: ${{ !cancelled() }} # prevents CI run stopping if step failed. + run: moodle-plugin-ci phplint + + - name: PHP Mess Detector + continue-on-error: true + if: ${{ !cancelled() }} + run: moodle-plugin-ci phpmd + + - name: Moodle Code Checker + if: ${{ !cancelled() }} + run: moodle-plugin-ci phpcs --max-warnings 0 + + - name: Moodle PHPDoc Checker + if: ${{ !cancelled() }} + run: moodle-plugin-ci phpdoc --max-warnings 0 + + - name: Validating + if: ${{ !cancelled() }} + run: moodle-plugin-ci validate + + - name: Check upgrade savepoints + if: ${{ !cancelled() }} + run: moodle-plugin-ci savepoints + + - name: Mustache Lint + if: ${{ !cancelled() }} + run: moodle-plugin-ci mustache + + - name: Grunt + if: ${{ !cancelled() }} + run: moodle-plugin-ci grunt --max-lint-warnings 0 + + - name: PHPUnit tests + if: ${{ !cancelled() }} + run: moodle-plugin-ci phpunit + + - name: Behat features + id: behat + if: ${{ !cancelled() }} + run: moodle-plugin-ci behat --profile chrome + + - name: Mark cancelled jobs as failed. + if: ${{ cancelled() }} + run: exit 1