446bccb14d
Downloading such assets is preferable since: - they contain updated metadata (useful for debugging) - they contain only the production files - they are pre-built: GitHub doesn't have to create a ZIP from a tag |
||
---|---|---|
__tests__ | ||
.github | ||
dist | ||
examples | ||
src | ||
.eslintrc.json | ||
.gitignore | ||
.prettierrc.json | ||
action.yml | ||
jest.config.js | ||
LICENSE | ||
package-lock.json | ||
package.json | ||
README.md | ||
tsconfig.json |
Setup PHP in GitHub Actions
Setup PHP with required extensions, php.ini configuration, code-coverage support and various tools like composer in GitHub Actions. This action gives you a cross platform interface to setup the PHP environment you need to test your application. Refer to Usage section and examples to see how to use this.
Contents
- PHP Support
- GitHub-Hosted Runner Support
- PHP Extension Support
- Tools Support
- Coverage Support
- Usage
- License
- Contributions
- Support This project
- Dependencies
- Further Reading
🎉 PHP Support
PHP Version | Stability | Release Support |
---|---|---|
5.6 | Stable |
End of life |
7.0 | Stable |
End of life |
7.1 | Stable |
End of life |
7.2 | Stable |
Security fixes only |
7.3 | Stable |
Active |
7.4 | Stable |
Active |
8.0 | Nightly |
In development |
Note: Specifying 8.0
in php-version
input installs a nightly build of PHP 8.0.0-dev
with PHP JIT
, Union Types v2
and other new features. See nightly build setup for more information.
☁️ GitHub-Hosted Runner Support
Virtual environment | YAML workflow label | Pre-installed PHP |
---|---|---|
Ubuntu 16.04 | ubuntu-16.04 |
PHP 5.6 to PHP 7.4 |
Ubuntu 18.04 | ubuntu-latest or ubuntu-18.04 |
PHP 7.1 to PHP 7.4 |
Ubuntu 20.04 | ubuntu-20.04 |
PHP 7.4 |
Windows Server 2019 | windows-latest or windows-2019 |
PHP 7.4 |
macOS 10.15 Catalina | macos-latest or macos-10.15 |
PHP 7.4 |
➕ PHP Extension Support
- On
ubuntu
by default extensions which are available as a package can be installed. If the extension is not available as a package but it is onPECL
, it can be installed by specifyingpecl
in the tools input. - On
windows
extensions which havewindows
binary onPECL
can be installed. - On
macOS
extensions which are onPECL
can be installed. - Extensions which are installed along with PHP if specified are enabled.
- Extensions on
PECL
which do not have a latest stable version, their pre-release versions can be installed by suffixing the extension with its state i.ealpha
,beta
,devel
orsnapshot
separated by a-
likemsgpack-beta
. - Extensions which cannot be installed gracefully leave an error message in the logs, the action is not interrupted.
🔧 Tools Support
These tools can be setup globally using the tools
input.
codeception
, composer
, composer-prefetcher
, cs2pr
, deployer
, pecl
, phinx
, phive
, phpcbf
, phpcpd
, php-config
, php-cs-fixer
, phpcs
, phpize
, phpmd
, phpstan
, phpunit
, prestissimo
, psalm
, symfony
uses: shivammathur/setup-php@v1
with:
php-version: '7.4'
tools: php-cs-fixer, phpunit
To setup a particular version of a tool, specify it in the form tool:version
.
Latest stable version of composer
is setup by default and accepts v1
, v2
, snapshot
and preview
as versions.
uses: shivammathur/setup-php@v1
with:
php-version: '7.4'
tools: composer:v2
Version for other tools should be in semver
format and a valid release of the tool.
uses: shivammathur/setup-php@v1
with:
php-version: '7.4'
tools: php-cs-fixer:2.16.2, phpunit:8.5.1
Tools 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@v1
with:
php-version: '7.4'
coverage: xdebug
PCOV
Specify coverage: pcov
to use PCOV
and disable Xdebug
.
It is much faster than Xdebug
.
PCOV
needs PHP >= 7.1
.
If your source code directory is other than src
, lib
or, app
, specify pcov.directory
using the ini-values
input.
uses: shivammathur/setup-php@v1
with:
php-version: '7.4'
ini-values: pcov.directory=api #optional, see above for usage.
coverage: pcov
Disable Coverage
Specify coverage: none
to disable both Xdebug
and PCOV
.
Consider disabling the coverage using this PHP action for these reasons.
- You are not generating coverage reports while testing.
- It will remove
Xdebug
, which will have a positive impact on PHP performance. - You are using
phpdbg
for running your tests.
uses: shivammathur/setup-php@v1
with:
php-version: '7.4'
coverage: none
📝 Usage
Inputs supported by this GitHub Action.
- php-version
required
- extensions
optional
- ini-values
optional
- coverage
optional
- tools
optional
See action.yml and usage below for more info.
Basic Setup
Setup a particular PHP version.
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Setup PHP
uses: shivammathur/setup-php@v1
with:
php-version: '7.4'
extensions: mbstring, intl #optional, setup extensions
ini-values: post_max_size=256M, short_open_tag=On #optional, setup php.ini configuration
coverage: xdebug #optional, setup coverage driver
tools: php-cs-fixer, phpunit #optional, setup tools globally
Matrix Setup
Setup multiple PHP versions on multiple operating systems.
jobs:
run:
runs-on: ${{ matrix.operating-system }}
strategy:
matrix:
operating-system: [ubuntu-latest, windows-latest, macos-latest]
php-versions: ['5.6', '7.0', '7.1', '7.2', '7.3', '7.4']
name: PHP ${{ matrix.php-versions }} Test on ${{ matrix.operating-system }}
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Setup PHP
uses: shivammathur/setup-php@v1
with:
php-version: ${{ matrix.php-versions }}
extensions: mbstring, intl #optional, setup extensions
ini-values: post_max_size=256M, short_open_tag=On #optional, setup php.ini configuration
coverage: xdebug #optional, setup coverage driver
tools: php-cs-fixer, phpunit #optional, setup tools globally
Nightly Build Setup
Setup a nightly build of
PHP 8.0.0-dev
from the master branch of PHP.
PECL
is installed by default with this version onUbuntu
andmacOS
.- Some extensions might not support this version currently.
- Refer to this RFC for configuring
PHP JIT
on this version. - Refer to this list of RFCs implemented in this version.
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Setup PHP
uses: shivammathur/setup-php@v1
with:
php-version: '8.0'
extensions: mbstring #optional, setup extensions
ini-values: opcache.jit_buffer_size=256M, opcache.jit=1235, pcre.jit=1 #optional, setup php.ini configuration
coverage: pcov #optional, setup PCOV, Xdebug does not support this version yet.
tools: php-cs-fixer, phpunit #optional, setup tools globally
Thread Safe Setup
NTS
versions are setup by default.- On
ubuntu
andmacOS
only NTS versions are supported. - On
windows
bothTS
andNTS
versions are supported.
jobs:
run:
runs-on: windows-latest
name: Setup PHP TS on Windows
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Setup PHP
uses: shivammathur/setup-php@v1
with:
php-version: '7.4'
env:
phpts: ts # specify ts or nts
Cache Dependencies
You can persist composer's internal cache directory using the action/cache
GitHub Action. Dependencies cached are loaded directly instead of downloading them while installation. The files cached are available across check-runs and will reduce the workflow execution time.
Note: Please do not cache vendor
directory using action/cache
as that will have side-effects.
- name: Get composer cache directory
id: composercache
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
- name: Cache dependencies
uses: actions/cache@v2
with:
path: ${{ steps.composercache.outputs.dir }}
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
restore-keys: ${{ runner.os }}-composer-
- name: Install Dependencies
run: composer install --prefer-dist
In the above example, if you support a range of composer
dependencies and do not commit composer.lock
, you can use the hash of composer.json
as the key for your cache.
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
Composer GitHub OAuth
If you have a number of workflows which setup multiple tools or have many composer dependencies, you might hit the GitHub's rate limit for composer. To avoid that you can add a OAuth
token to the composer's config by setting COMPOSER_TOKEN
environment variable. You can use GITHUB_TOKEN
secret for this purpose.
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '7.4'
env:
COMPOSER_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Problem Matchers
PHPUnit
You can setup problem matchers for your PHPUnit
output by adding this step after the setup-php
step. This will scan the logs for failing tests and surface that information prominently in the GitHub Actions UI by creating annotations and log file decorations.
- name: Setup Problem Matchers for PHPUnit
run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json"
Other Tools
For tools that support checkstyle
reporting like phpstan
, psalm
, php-cs-fixer
and phpcs
you can use cs2pr
to annotate your code.
For examples refer to cs2pr documentation.
Here is an example with
phpstan
.
- name: Setup PHP
uses: shivammathur/setup-php@v1
with:
php-version: '7.4'
tools: cs2pr, phpstan
- name: PHPStan
run: phpstan analyse src --error-format=checkstyle | cs2pr
Examples
Examples for setting up this GitHub Action with different PHP Frameworks/Packages.
Framework/Package | Runs on | Workflow |
---|---|---|
CakePHP with MySQL and Redis |
ubuntu |
cakephp-mysql.yml |
CakePHP with PostgreSQL and Redis |
ubuntu |
cakephp-postgres.yml |
CakePHP without services | macOS , ubuntu and windows |
cakephp.yml |
CodeIgniter | macOS , ubuntu and windows |
codeigniter.yml |
Laravel with MySQL and Redis |
ubuntu |
laravel-mysql.yml |
Laravel with PostgreSQL and Redis |
ubuntu |
laravel-postgres.yml |
Laravel without services | macOS , ubuntu and windows |
laravel.yml |
Lumen with MySQL and Redis |
ubuntu |
lumen-mysql.yml |
Lumen with PostgreSQL and Redis |
ubuntu |
lumen-postgres.yml |
Lumen without services | macOS , ubuntu and windows |
lumen.yml |
Phalcon with MySQL |
ubuntu |
phalcon-mysql.yml |
Phalcon with PostgreSQL |
ubuntu |
phalcon-postgres.yml |
Roots/bedrock | ubuntu |
bedrock.yml |
Roots/sage | ubuntu |
sage.yml |
Slim Framework | macOS , ubuntu and windows |
slim-framework.yml |
Symfony with MySQL |
ubuntu |
symfony-mysql.yml |
Symfony with PostgreSQL |
ubuntu |
symfony-postgres.yml |
Symfony without services | macOS , ubuntu and windows |
symfony.yml |
Yii2 Starter Kit with MySQL |
ubuntu |
yii2-mysql.yml |
Yii2 Starter Kit with PostgreSQL |
ubuntu |
yii2-postgres.yml |
Zend Framework | macOS , ubuntu and windows |
zend-framework.yml |
📜 License
- The scripts and documentation in this project are released under the MIT License.
- This project has multiple dependencies. Their licenses can be found in their respective repositories.
- The logo for
setup-php
is a derivative work of php.net logo and is licensed under the CC BY-SA 4.0 License.
👍 Contributions
Contributions are welcome! See Contributor's Guide. If you face any issues while using this or want to suggest a feature/improvement, create an issue here.
💖 Support This Project
If this action helped you.
- Sponsor the project by subscribing on Patreon or by contributing using Paypal. This project is also available as part of the Tidelift Subscription to support delivering enterprise-level maintenance.
- Please star the project and dependencies. If you blog, please share your experience of using this action with the community.
🔖 Dependencies
- Node.js dependencies
- mlocati/powershell-phpmanager
- ppa:ondrej/php
- shivammathur/homebrew-php
- shivammathur/homebrew-extensions
- shivammathur/php-builder