diff --git a/.github/workflows/lint-and-analyse-php.yml b/.github/workflows/lint-and-analyse-php.yml new file mode 100644 index 000000000..9b5c510e4 --- /dev/null +++ b/.github/workflows/lint-and-analyse-php.yml @@ -0,0 +1,87 @@ +name: Lint and analyse php files + +# If a pull-request is pushed then cancel all previously running jobs related +# to that pull-request +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }} + cancel-in-progress: true + +on: + # push: + pull_request: + types: [opened, synchronize, reopened] + branches: + - develop + +permissions: + contents: read + +jobs: + lint-php-files: + runs-on: ubuntu-latest + strategy: + matrix: + php-version: ["8.1"] + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up PHP ${{ matrix.php-version }} + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php-version }} + + - name: Validate composer.json and composer.lock + run: composer validate --strict + + - name: Install Composer dependencies + # Allow the previous check to fail but not abort + if: always() + uses: ramsey/composer-install@v2 + with: + # Ignore zip for php-webdriver/webdriver + composer-options: "--ignore-platform-req=ext-zip" + + # - name: Cache coding-standard + # # Allow the previous check to fail but not abort + # if: always() + # uses: actions/cache@v4 + # with: + # path: .phpcs-cache + # key: phpcs-cache + + - name: Lint PHP files + # Allow the previous check to fail but not abort + if: always() + run: ./tests/ci-phplint + + - name: Check coding-standard + # Allow the previous check to fail but not abort + if: always() + run: composer phpcs + + analyse-php: + runs-on: ubuntu-latest + strategy: + matrix: + php-version: ["8.1"] + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up PHP ${{ matrix.php-version }} + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php-version }} + extensions: mbstring, iconv, mysqli, zip, gd, bz2 + + - name: Install Composer dependencies + uses: ramsey/composer-install@v2 + + - name: Analyse files with PHPStan + run: composer phpstan -- --memory-limit 2G + + - name: Analyse files with Psalm + # Allow the previous check to fail but not abort + if: always() + run: composer psalm -- --shepherd diff --git a/ci/ci-phplint b/ci/ci-phplint new file mode 100755 index 000000000..5f8a47cf4 --- /dev/null +++ b/ci/ci-phplint @@ -0,0 +1,16 @@ +#!/bin/sh + +FILES=$(find . -name '*.php' -not -path './vendor/*' -not -path './tmp/*' -not -path './node_modules/*') + +result=0 +for FILE in $FILES ; do + if [ -f "$FILE" ] ; then + php -l "$FILE" + ret=$? + if [ $ret != 0 ] ; then + result=$ret + fi + fi +done + +exit $result