diff --git a/.github/workflows/phpstan.yml b/.github/workflows/analyse-php.yml similarity index 67% rename from .github/workflows/phpstan.yml rename to .github/workflows/analyse-php.yml index cbda75afd..191399d78 100644 --- a/.github/workflows/phpstan.yml +++ b/.github/workflows/analyse-php.yml @@ -1,21 +1,18 @@ -name: phpstan +name: analyse-php on: [push, pull_request] jobs: build: if: ${{ github.ref != 'refs/heads/l10n_development' }} - runs-on: ubuntu-20.04 - strategy: - matrix: - php: ['7.4'] + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v1 - name: Setup PHP uses: shivammathur/setup-php@v2 with: - php-version: ${{ matrix.php }} + php-version: 8.1 extensions: gd, mbstring, json, curl, xml, mysql, ldap - name: Get Composer Cache Directory @@ -24,13 +21,14 @@ jobs: echo "::set-output name=dir::$(composer config cache-files-dir)" - name: Cache composer packages - uses: actions/cache@v1 + uses: actions/cache@v2 with: path: ${{ steps.composer-cache.outputs.dir }} - key: ${{ runner.os }}-composer-${{ matrix.php }} + key: ${{ runner.os }}-composer-8.1 + restore-keys: ${{ runner.os }}-composer- - name: Install composer dependencies run: composer install --prefer-dist --no-interaction --ansi - - name: Run PHPStan - run: php${{ matrix.php }} ./vendor/bin/phpstan analyse --memory-limit=2G + - name: Run static analysis check + run: composer check-static diff --git a/.github/workflows/test-migrations.yml b/.github/workflows/test-migrations.yml index 7fb05dca6..e9b66a0a6 100644 --- a/.github/workflows/test-migrations.yml +++ b/.github/workflows/test-migrations.yml @@ -5,7 +5,7 @@ on: [push, pull_request] jobs: build: if: ${{ github.ref != 'refs/heads/l10n_development' }} - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 strategy: matrix: php: ['7.4', '8.0', '8.1'] @@ -24,10 +24,11 @@ jobs: echo "::set-output name=dir::$(composer config cache-files-dir)" - name: Cache composer packages - uses: actions/cache@v1 + uses: actions/cache@v2 with: path: ${{ steps.composer-cache.outputs.dir }} key: ${{ runner.os }}-composer-${{ matrix.php }} + restore-keys: ${{ runner.os }}-composer- - name: Start MySQL run: | diff --git a/.github/workflows/phpunit.yml b/.github/workflows/test-php.yml similarity index 91% rename from .github/workflows/phpunit.yml rename to .github/workflows/test-php.yml index 53812cb42..917038f59 100644 --- a/.github/workflows/phpunit.yml +++ b/.github/workflows/test-php.yml @@ -1,11 +1,11 @@ -name: phpunit +name: test-php on: [push, pull_request] jobs: build: if: ${{ github.ref != 'refs/heads/l10n_development' }} - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 strategy: matrix: php: ['7.4', '8.0', '8.1'] @@ -24,10 +24,11 @@ jobs: echo "::set-output name=dir::$(composer config cache-files-dir)" - name: Cache composer packages - uses: actions/cache@v1 + uses: actions/cache@v2 with: path: ${{ steps.composer-cache.outputs.dir }} key: ${{ runner.os }}-composer-${{ matrix.php }} + restore-keys: ${{ runner.os }}-composer- - name: Start Database run: | @@ -48,5 +49,5 @@ jobs: php${{ matrix.php }} artisan migrate --force -n --database=mysql_testing php${{ matrix.php }} artisan db:seed --force -n --class=DummyContentSeeder --database=mysql_testing - - name: phpunit + - name: Run PHP tests run: php${{ matrix.php }} ./vendor/bin/phpunit diff --git a/composer.json b/composer.json index cdd9c629e..64630833d 100644 --- a/composer.json +++ b/composer.json @@ -69,6 +69,7 @@ } }, "scripts": { + "check-static": "phpstan --memory-limit=2g", "format": "phpcbf", "lint": "phpcs", "test": "phpunit", diff --git a/readme.md b/readme.md index 83986525e..245b113aa 100644 --- a/readme.md +++ b/readme.md @@ -3,8 +3,8 @@ [![GitHub release](https://img.shields.io/github/release/BookStackApp/BookStack.svg)](https://github.com/BookStackApp/BookStack/releases/latest) [![license](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/BookStackApp/BookStack/blob/development/LICENSE) [![Crowdin](https://badges.crowdin.net/bookstack/localized.svg)](https://crowdin.com/project/bookstack) -[![Build Status](https://github.com/BookStackApp/BookStack/workflows/phpunit/badge.svg)](https://github.com/BookStackApp/BookStack/actions) -[![StyleCI](https://github.styleci.io/repos/41589337/shield?style=flat)](https://github.styleci.io/repos/41589337) +[![Build Status](https://github.com/BookStackApp/BookStack/workflows/test-php/badge.svg)](https://github.com/BookStackApp/BookStack/actions) +[![Lint Status](https://github.com/BookStackApp/BookStack/workflows/lint-php/badge.svg)](https://github.com/BookStackApp/BookStack/actions) [![Maintainability](https://api.codeclimate.com/v1/badges/5551731994dd22fa1f4f/maintainability)](https://codeclimate.com/github/BookStackApp/BookStack/maintainability) [![Repo Stats](https://img.shields.io/static/v1?label=GitHub+project&message=stats&color=f27e3f)](https://gh-stats.bookstackapp.com/) @@ -115,12 +115,29 @@ php artisan migrate --database=mysql_testing php artisan db:seed --class=DummyContentSeeder --database=mysql_testing ``` -Once done you can run `php vendor/bin/phpunit` in the application root directory to run all tests. +Once done you can run `composer test` in the application root directory to run all tests. ### 📜 Code Standards -PHP code style is enforced automatically [using StyleCI](https://github.styleci.io/repos/41589337). -If submitting a PR, any formatting changes to be made will be automatically fixed after merging. +PHP code standards are managed by [using PHP_CodeSniffer](https://github.com/squizlabs/PHP_CodeSniffer). +Static analysis is in place using [PHPStan](https://phpstan.org/) & [Larastan](https://github.com/nunomaduro/larastan). +The below commands can be used to utilise these tools: + +```bash +# Run code linting using PHP_CodeSniffer +composer lint + +# As above, but show rule names in output +composer lint -- -s + +# Auto-fix formatting & lint issues via PHP_CodeSniffer phpcbf +composer format + +# Run static analysis via larastan/phpstan +composer check-static +``` + +If submitting a PR, formatting as per our project standards would help for clarity but don't worry too much about using/understanding these tools as we can always address issues at a later stage when they're picked up by our automated tools. ### 🐋 Development using Docker @@ -234,9 +251,9 @@ Note: This is not an exhaustive list of all libraries and projects that would be * [OneLogin's SAML PHP Toolkit](https://github.com/onelogin/php-saml) - _[MIT](https://github.com/onelogin/php-saml/blob/master/LICENSE)_ * [League/CommonMark](https://commonmark.thephpleague.com/) - _[BSD-3-Clause](https://github.com/thephpleague/commonmark/blob/2.2/LICENSE)_ * [League/Flysystem](https://flysystem.thephpleague.com) - _[MIT](https://github.com/thephpleague/flysystem/blob/3.x/LICENSE)_ -* [StyleCI](https://styleci.io/) - _Hosted Service_ * [pragmarx/google2fa](https://github.com/antonioribeiro/google2fa) - _[MIT](https://github.com/antonioribeiro/google2fa/blob/8.x/LICENSE.md)_ * [Bacon/BaconQrCode](https://github.com/Bacon/BaconQrCode) - _[BSD-2-Clause](https://github.com/Bacon/BaconQrCode/blob/master/LICENSE)_ * [phpseclib](https://github.com/phpseclib/phpseclib) - _[MIT](https://github.com/phpseclib/phpseclib/blob/master/LICENSE)_ * [Clockwork](https://github.com/itsgoingd/clockwork) - _[MIT](https://github.com/itsgoingd/clockwork/blob/master/LICENSE)_ * [PHPStan](https://phpstan.org/) & [Larastan](https://github.com/nunomaduro/larastan) - _[MIT](https://github.com/phpstan/phpstan/blob/master/LICENSE) and [MIT](https://github.com/nunomaduro/larastan/blob/master/LICENSE.md)_ +* [PHP_CodeSniffer](https://github.com/squizlabs/PHP_CodeSniffer) - _[BSD 3-Clause](https://github.com/squizlabs/PHP_CodeSniffer/blob/master/licence.txt)_