diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 0000000..45124da --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,133 @@ +name: Mautic Plugin tests + +on: +push: + branches: + - main # Main branch + - '[0-9]+\.[0-9]+' +pull_request: + +env: +PLUGIN_DIR: plugins/SparkpostBundle # Same as extra.install-directory-name in composer.json + +jobs: +phpunit: + runs-on: ubuntu-latest + + strategy: + matrix: + php-versions: ['8.0'] # The supported PHP versions + db-types: ['mysql'] # can be: ['mysql', 'mariadb'] but not necessary for this plugin that does not add any DB schema + mautic-versions: ['5.x'] # The supported Mautic versions + + name: Tests on PHP ${{ matrix.php-versions }}, ${{ matrix.db-types }}, Mautic ${{ matrix.mautic-versions }} + + services: + database: + image: ${{ matrix.db-types == 'mysql' && 'mysql:8.0' || 'mariadb:10.3' }} + env: + MYSQL_ALLOW_EMPTY_PASSWORD: yes + MYSQL_DATABASE: mautictest + ports: + - 3306 + options: >- + --shm-size=2gb + --name=${{ matrix.db-types }} + --tmpfs=/var/lib/mysql + --health-cmd="mysqladmin ping" + --health-interval=10s + --health-timeout=5s + --health-retries=3 + + steps: + - name: Checkout Mautic 4 + uses: actions/checkout@v3 + with: + repository: mautic/mautic + ref: ${{ matrix.mautic-versions }} + + - name: Checkout this plugin + uses: actions/checkout@v3 + with: + path: ${{ env.PLUGIN_DIR }} + + - name: Setup PHP, with composer and extensions + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php-versions }} + ini-values: -dpcov.enabled=0, pcov.directory=." + extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite, mysql, pdo_mysql + coverage: pcov + + - name: add MySQL config file + run: | + mysqldump --version + mysqldump --print-defaults + cp .github/ci-files/.my.cnf ~/.my.cnf + mysqldump --print-defaults + + - name: Set SYMFONY_ENV to test + run: | + echo "SYMFONY_ENV=test" >> $GITHUB_ENV + echo "MAUTIC_ENV=test" >> $GITHUB_ENV + + - name: Get composer cache directory + id: composer-cache + run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT + + - name: Cache composer dependencies + uses: actions/cache@v3 + with: + path: ${{ steps.composer-cache.outputs.dir }} + key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} + restore-keys: ${{ runner.os }}-composer- + + - name: Install Composer dependencies + run: composer install + + - name: Install Mautic + env: + DB_PORT: ${{ job.services.database.ports[3306] }} + run: | + cp ./.github/ci-files/local.php ./app/config/local.php + php bin/console mautic:install --force http://localhost + + - name: Install Plugins + env: + DB_PORT: ${{ job.services.database.ports[3306] }} + run: php bin/console mautic:plugins:install --env=dev + + - name: Run Code Style check + run: bin/php-cs-fixer fix ${{ env.PLUGIN_DIR }} --config=.php-cs-fixer.php -v --dry-run --show-progress=dots --diff + + - name: PHPSTAN + run: composer phpstan -- ${{ env.PLUGIN_DIR }} + + - name: Rector + run: composer rector -- --dry-run --no-progress-bar ${{ env.PLUGIN_DIR }} + + - name: Twig Lint + run: bin/console lint:twig ${{ env.PLUGIN_DIR }} + + - name: Run PHPUNIT tests + env: + DB_PORT: ${{ job.services.database.ports[3306] }} + run: XDEBUG_MODE=coverage APP_DEBUG=0 php -dpcov.enabled=1 -dpcov.directory=. -dpcov.exclude="~tests|themes|vendor~" bin/phpunit -d memory_limit=1G --bootstrap vendor/autoload.php --configuration ${{ env.PLUGIN_DIR }}/phpunit.xml --coverage-clover=${{ env.PLUGIN_DIR }}/coverage.xml --coverage-text + + - name: Coverage report + run: cat ${{ env.PLUGIN_DIR }}/coverage.xml + + - name: Upload coverage report + if: ${{ matrix.php-versions == '8.0' && matrix.db-types == 'mysql' && matrix.mautic-versions == '4.4' }} # upload just once, change for your matrix + uses: codecov/codecov-action@v3 + with: + token: ${{ secrets.CODECOV_TOKEN }} + fail_ci_if_error: true + working-directory: ${{ env.PLUGIN_DIR }} + verbose: true + + - name: Upload logs as artifacts + uses: actions/upload-artifact@v3 + with: + name: mautic-logs + path: var/logs/