Setup PHP in GitHub Actions
Setup PHP with required extensions, php.ini configuration and composer in GitHub Actions. This action can be added as a step in your action workflow and it will setup the PHP environment you need to test your application. Refer to Usage section and examples to see how to use this.
🎉 PHP Support
| PHP Version | Stability | Release Support | 
|---|---|---|
| 5.6 | Stable | End of life | 
| 7.0 | Stable | End of life | 
| 7.1 | Stable | Security fixes only | 
| 7.2 | Stable | Active | 
| 7.3 | Stable | Active | 
| 7.4 | RC3 | Active | 
Note: PHP 7.4 is currently in development, do not use in production/release branches.
☁️ OS/Platform Support
| Virtual environment | matrix.operating-system | 
|---|---|
| Windows Server 2019 | windows-latestorwindows-2019 | 
| Windows Server 2016 R2 | windows-2016 | 
| Ubuntu 18.04 | ubuntu-latestorubuntu-18.04 | 
| Ubuntu 16.04 | ubuntu-16.04 | 
| macOS X Mojave 10.14 | macOS-latestormacOS-10.14 | 
🔧 PHP Extension Support
- On ubuntuextensions which have the package in apt are installed.
- On windowsandmacOSPECL extensions are installed.
- Extensions which are installed along with PHP if specified are enabled.
- Extensions which cannot be installed gracefully leave an error message in the logs, the action is not interrupted.
📶 Coverage support
Xdebug
Specify coverage: xdebug to use Xdebug.
Runs on all PHP versions supported
uses: shivammathur/setup-php@master
with:
  php-version: '7.3'  
  coverage: xdebug
PCOV
Specify coverage: pcov to use PCOV. PCOV is way faster than Xdebug.
For pcov.directory to be other than src, lib or, app, specify it using the ini-values-csv input.
PCOV needs PHPUnit >= 8.0 and PHP >= 7.1, PHPUnit needs PHP >= 7.2. So use PHP >= 7.2 with PCOV
uses: shivammathur/setup-php@master
with:
  php-version: '7.3'
  ini-values-csv: pcov.directory=api #optional, see above for usage.
  coverage: pcov
Disable coverage
Specify coverage: none to disable both Xdebug and PCOV.
uses: shivammathur/setup-php@master
with:
  php-version: '7.3'
  coverage: none
📝 Usage
Inputs supported by this GitHub Action.
- php-version required
- extension-csv optional
- ini-values-csv optional
- coverage optional
See action.yml and usage below for more info.
Basic Usage
steps:
- name: Checkout
  uses: actions/checkout@master
- name: Installing PHP
  uses: shivammathur/setup-php@master
  with:
    php-version: '7.3'
    extension-csv: mbstring, xdebug #optional
    ini-values-csv: post_max_size=256M, short_open_tag=On #optional
    coverage: xdebug #optional
- name: Check PHP Version
  run: php -v
- name: Check Composer Version
  run: composer -V
- name: Check PHP Extensions
  run: php -m
Matrix Testing
jobs:
  run:    
    runs-on: ${{ matrix.operating-system }}
    strategy:
      max-parallel: 15
      matrix:
        operating-system: [ubuntu-latest, windows-latest, macOS-latest]
        php-versions: ['5.6', '7.0', '7.1', '7.2', '7.3']
    name: PHP ${{ matrix.php-versions }} Test on ${{ matrix.operating-system }}
    steps:
    - name: Checkout
      uses: actions/checkout@master
    - name: Install PHP
      uses: shivammathur/setup-php@master
      with:
        php-version: ${{ matrix.php-versions }}
        extension-csv: mbstring, xdebug #optional
        ini-values-csv: post_max_size=256M, short_open_tag=On #optional
        coverage: xdebug #optional
    - name: Check PHP Version
      run: php -v
    - name: Check Composer Version
      run: composer -V
    - name: Check PHP Extensions
      run: php -m           
Examples
Examples for setting up this GitHub Action with different PHP Frameworks/Packages.
| Framework/Package | Workflow | 
|---|---|
| CodeIgniter | codeigniter.yml | 
| Laravel MySQLRedis | laravel-mysql.yml | 
| Laravel PostgreSQLRedis | laravel-postgres.yml | 
| Laravel | laravel.yml | 
| Slim Framework | slim-framework.yml | 
| Symfony MySQL | symfony-mysql.yml | 
| Symfony PostgreSQL | symfony-postgres.yml | 
| Yii2 Starter Kit MySQL | yii2-mysql.yml | 
| Yii2 Starter Kit PostgreSQL | yii2-postgres.yml | 
| Zend Framework | zend-framework.yml | 
📜 License
The scripts and documentation in this project are released under the MIT License. This project has multiple dependencies and their licenses can be found in their respective repositories.
👍 Contributions
Contributions are welcome! See Contributor's Guide.
