2019-09-24 14:38:22 +05:30
< p align = "center" >
< a href = "https://github.com/marketplace/actions/setup-php-action" target = "_blank" >
< img src = "https://repository-images.githubusercontent.com/206578964/e0a18480-dc65-11e9-8dd3-b9ffbf5575fe" alt = "Setup PHP in GitHub Actions" width = "400" >
< / a >
< / p >
2019-10-13 05:27:58 +05:30
< h1 align = "center" > Setup PHP in GitHub Actions< / h1 >
2019-09-06 05:48:51 +05:30
2019-10-13 05:27:58 +05:30
< p align = "center" >
2019-10-10 17:47:17 +05:30
< a href = "https://github.com/shivammathur/setup-php" title = "GitHub action to setup PHP" > < img alt = "GitHub Actions status" src = "https://github.com/shivammathur/setup-php/workflows/Main%20workflow/badge.svg" > < / a >
< a href = "https://codecov.io/gh/shivammathur/setup-php" title = "Code coverage" > < img alt = "Codecov Code Coverage" src = "https://codecov.io/gh/shivammathur/setup-php/branch/master/graph/badge.svg" > < / a >
< a href = "https://github.com/shivammathur/setup-php/blob/master/LICENSE" title = "license" > < img alt = "LICENSE" src = "https://img.shields.io/badge/license-MIT-428f7e.svg" > < / a >
2020-02-14 12:45:46 +05:30
< a href = " #tada -php-support" title = "PHP Versions Supported" >< img alt = "PHP Versions Supported" src = "https://img.shields.io/badge/php-%3E%3D%205.3-8892BF.svg" ></ a >
2019-09-06 05:48:51 +05:30
< / p >
2020-01-17 12:58:28 +05:30
Setup PHP with required extensions, php.ini configuration, code-coverage support and various tools like composer in [GitHub Actions ](https://github.com/features/actions "GitHub Actions" ). This action gives you a cross platform interface to setup the PHP environment you need to test your application. Refer to [Usage ](#memo-usage "How to use this" ) section and [examples ](#examples "Examples of use" ) to see how to use this.
2019-09-24 14:38:22 +05:30
2019-11-03 10:11:44 +05:30
## Contents
- [PHP Support ](#tada-php-support )
- [OS/Platform Support ](#cloud-osplatform-support )
2019-12-27 06:56:49 +05:30
- [PHP Extension Support ](#heavy_plus_sign-php-extension-support )
- [Tools Support ](#wrench-tools-support )
2019-11-03 10:11:44 +05:30
- [Coverage support ](#signal_strength-coverage-support )
- [Xdebug ](#xdebug )
- [PCOV ](#pcov )
2020-02-14 12:45:46 +05:30
- [Disable Coverage ](#disable-coverage )
2019-11-03 10:11:44 +05:30
- [Usage ](#memo-usage )
2020-02-14 12:45:46 +05:30
- [Inputs ](#inputs )
2019-12-18 21:44:02 +05:30
- [Basic Setup ](#basic-setup )
- [Matrix Setup ](#matrix-setup )
2020-04-09 23:18:37 +05:30
- [Experimental Setup ](#experimental-setup )
2020-05-08 05:33:25 +05:30
- [Self Hosted Setup ](#self-hosted-setup )
- [Local Testing Setup ](#local-testing-setup )
2020-02-14 12:45:46 +05:30
- [Thread Safe Setup ](#thread-safe-setup )
- [Force Update ](#force-update )
- [Verbose Setup ](#verbose-setup )
- [Cache Extensions ](#cache-extensions )
- [Cache Composer Dependencies ](#cache-composer-dependencies )
2020-02-21 13:39:04 +05:30
- [Cache Node.js Dependencies ](#cache-nodejs-dependencies )
2020-04-09 23:18:37 +05:30
- [Composer GitHub OAuth ](#composer-github-oauth )
2019-12-19 02:38:12 +05:30
- [Problem Matchers ](#problem-matchers )
2019-11-03 10:11:44 +05:30
- [Examples ](#examples )
- [License ](#scroll-license )
- [Contributions ](#1-contributions )
2020-02-14 12:45:46 +05:30
- [Support This Project ](#sparkling_heart-support-this-project )
- [Dependencies ](#bookmark-dependencies )
2019-11-03 10:11:44 +05:30
- [Further Reading ](#bookmark_tabs-further-reading )
2019-09-24 15:38:21 +05:30
## :tada: PHP Support
2019-09-06 05:48:51 +05:30
2020-05-08 05:33:25 +05:30
|PHP Version|Stability|Release Support|Runner Support|
|--- |--- |--- |--- |
|`5.3` |`Stable` |`End of life` |`GitHub` |
|`5.4` |`Stable` |`End of life` |`GitHub` |
|`5.5` |`Stable` |`End of life` |`GitHub` |
|`5.6` |`Stable` |`End of life` |`GitHub` , `self-hosted` |
|`7.0` |`Stable` |`End of life` |`GitHub` , `self-hosted` |
|`7.1` |`Stable` |`End of life` |`GitHub` , `self-hosted` |
|`7.2` |`Stable` |`Security fixes only` |`GitHub` , `self-hosted` |
|`7.3` |`Stable` |`Active` |`GitHub` , `self-hosted` |
|`7.4` |`Stable` |`Active` |`GitHub` , `self-hosted` |
|`8.0` |`Experimental` |`In development` |`GitHub` , `self-hosted` |
2019-12-09 08:09:03 +05:30
2019-12-28 00:23:51 +05:30
**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 ](https://wiki.php.net/rfc#php_80 "New features implemented in PHP 8" ). See [experimental setup ](#experimental-setup ) for more information.
2019-09-06 06:10:52 +05:30
2019-09-24 14:38:22 +05:30
## :cloud: OS/Platform Support
2019-09-09 00:58:00 +05:30
|Virtual environment|matrix.operating-system|
|--- |--- |
|Windows Server 2019|`windows-latest` or `windows-2019` |
|Ubuntu 18.04|`ubuntu-latest` or `ubuntu-18.04` |
|Ubuntu 16.04|`ubuntu-16.04` |
2020-05-08 05:33:25 +05:30
|MacOS X Catalina 10.15|`macos-latest` or `macos-10.15` |
|Self Hosted|`self-hosted` |
**Note:** Refer to the [self-hosted setup ](#self-hosted-setup ) to use the action on self-hosted runners.
2019-09-09 00:58:00 +05:30
2019-12-27 06:56:49 +05:30
## :heavy_plus_sign: PHP Extension Support
2020-05-08 05:33:25 +05:30
2020-02-29 21:08:26 +05:30
- On `ubuntu` by default extensions which are available as a package can be installed. PECL extensions if not available as a package can be installed by specifying `pecl` in the tools input.
2020-02-14 12:45:46 +05:30
```yaml
uses: shivammathur/setup-php@v2
with:
php-version: '7.4'
tools: pecl
extensions: swoole
```
2020-02-29 21:08:26 +05:30
- On `windows` PECL extensions which have the `DLL` binary can be installed.
2020-02-14 12:45:46 +05:30
2020-02-29 21:08:26 +05:30
- On `macOS` PECL extensions can be installed.
2020-02-14 12:45:46 +05:30
2020-02-29 21:08:26 +05:30
- Extensions installed along with PHP if specified are enabled.
2020-02-14 12:45:46 +05:30
2020-02-29 21:08:26 +05:30
- Specific versions of PECL extensions can be installed by suffixing the version. This is useful for installing old versions of extensions which support end of life PHP versions.
2020-02-14 12:45:46 +05:30
```yaml
uses: shivammathur/setup-php@v2
with:
2020-02-29 21:08:26 +05:30
php-version: '5.4'
2020-02-14 12:45:46 +05:30
tools: pecl
2020-02-29 21:08:26 +05:30
extensions: swoole-1.9.3
2020-02-14 12:45:46 +05:30
```
2020-02-29 21:08:26 +05:30
- Pre-release versions of PECL extensions can be setup by suffixing the extension with its state i.e `alpha` , `beta` , `devel` or `snapshot` .
2020-02-14 12:45:46 +05:30
```yaml
uses: shivammathur/setup-php@v2
with:
php-version: '7.4'
tools: pecl
extensions: xdebug-beta
```
2020-05-08 05:33:25 +05:30
- Non-default extensions can be removed by prefixing it with a `:` .
```yaml
uses: shivammathur/setup-php@v2
with:
php-version: '7.4'
extensions: :opcache
```
- Extensions which cannot be added or removed gracefully leave an error message in the logs, the action is not interrupted.
2020-02-27 10:57:09 +01:00
2020-02-29 21:08:26 +05:30
- These extensions have custom support - `gearman` on ubuntu, `blackfire` , `phalcon3` and `phalcon4` on all supported OS.
2019-09-07 18:01:50 +05:30
2019-12-27 06:56:49 +05:30
## :wrench: Tools Support
2020-01-07 08:06:14 +05:30
These tools can be setup globally using the `tools` input.
2019-12-27 06:56:49 +05:30
2020-05-08 05:33:25 +05:30
`blackfire` , `blackfire-player` , `codeception` , `composer` , `composer-prefetcher` , `cs2pr` , `deployer` , `flex` , `infection` , `pecl` , `phinx` , `phive` , `phpcbf` , `phpcpd` , `php-config` , `php-cs-fixer` , `phpcs` , `phpize` , `phpmd` , `phpstan` , `phpunit` , `prestissimo` , `psalm` , `symfony` , `vapor-cli`
2019-12-27 06:56:49 +05:30
2019-12-31 13:25:59 +05:30
```yaml
2020-02-14 12:45:46 +05:30
uses: shivammathur/setup-php@v2
2019-12-27 06:56:49 +05:30
with:
php-version: '7.4'
tools: php-cs-fixer, phpunit
```
2020-02-29 21:08:26 +05:30
To setup a particular version of a tool, specify it in this form `tool:version` .
2020-01-07 08:06:14 +05:30
Version should be in semver format and a valid release of the tool.
```yaml
2020-02-14 12:45:46 +05:30
uses: shivammathur/setup-php@v2
2020-01-07 08:06:14 +05:30
with:
php-version: '7.4'
tools: php-cs-fixer:2.15.5, phpunit:8.5.1
```
2020-02-29 21:08:26 +05:30
**Notes**
2020-01-07 08:06:14 +05:30
- `composer` is setup by default.
2020-02-14 12:45:46 +05:30
- Specifying version for `composer` and `pecl` has no effect, latest versions of both tools which are compatible with the PHP version will be setup.
2020-02-29 00:26:00 +05:30
- Both agent and client will be setup when `blackfire` is specified.
2020-01-07 08:06:14 +05:30
- If the version specified for the tool is not in semver format, latest version of the tool will be setup.
2020-05-08 05:33:25 +05:30
- Tools which cannot be setup gracefully leave an error message in the logs, the action is not interrupted.
2019-12-28 00:23:51 +05:30
2019-09-26 02:33:39 +05:30
## :signal_strength: Coverage support
2019-10-05 15:00:00 +05:30
### Xdebug
2019-10-10 17:47:17 +05:30
Specify `coverage: xdebug` to use `Xdebug` .
2019-12-18 21:44:02 +05:30
Runs on all [PHP versions supported ](#tada-php-support "List of PHP versions supported on this GitHub Action" ) except `8.0` .
2019-10-08 18:12:54 +05:30
```yaml
2020-02-14 12:45:46 +05:30
uses: shivammathur/setup-php@v2
2019-09-26 02:33:39 +05:30
with:
2019-12-31 13:25:59 +05:30
php-version: '7.4'
2019-09-26 02:33:39 +05:30
coverage: xdebug
```
2019-10-05 15:00:00 +05:30
### PCOV
2020-02-03 03:26:06 +05:30
Specify `coverage: pcov` to use `PCOV` and disable `Xdebug` .
2019-10-10 17:47:17 +05:30
It is much faster than `Xdebug` .
2019-11-03 10:11:44 +05:30
`PCOV` needs `PHP >= 7.1` .
2019-12-09 10:52:43 +05:30
If your source code directory is other than `src` , `lib` or, `app` , specify `pcov.directory` using the `ini-values` input.
2019-10-13 09:48:29 +05:30
2019-10-08 18:12:54 +05:30
```yaml
2020-02-14 12:45:46 +05:30
uses: shivammathur/setup-php@v2
2019-09-26 02:33:39 +05:30
with:
2019-11-30 05:23:14 +05:30
php-version: '7.4'
2019-12-09 10:52:43 +05:30
ini-values: pcov.directory=api #optional , see above for usage.
2019-09-26 02:33:39 +05:30
coverage: pcov
```
2020-02-14 12:45:46 +05:30
### Disable Coverage
2019-10-10 17:47:17 +05:30
2020-02-14 12:45:46 +05:30
Specify `coverage: none` to remove both `Xdebug` and `PCOV` .
2019-10-10 17:47:17 +05:30
Consider disabling the coverage using this PHP action for these reasons.
2019-11-03 10:11:44 +05:30
2019-10-10 17:47:17 +05:30
- You are not generating coverage reports while testing.
2019-12-28 00:23:51 +05:30
- It will remove `Xdebug` , which will have a positive impact on PHP performance.
2019-11-03 10:11:44 +05:30
- You are using `phpdbg` for running your tests.
2020-02-29 21:08:26 +05:30
- You are profiling your code using `blackfire` .
2019-10-08 18:12:54 +05:30
```yaml
2020-02-14 12:45:46 +05:30
uses: shivammathur/setup-php@v2
2019-10-05 15:00:00 +05:30
with:
2019-11-30 05:23:14 +05:30
php-version: '7.4'
2019-10-05 15:00:00 +05:30
coverage: none
```
2019-09-24 14:38:22 +05:30
## :memo: Usage
2019-09-06 05:48:51 +05:30
2020-02-14 12:45:46 +05:30
### Inputs
#### `php-version` (required)
- Specify the PHP version you want to setup.
- Accepts a `string` . For example `'7.4'` .
- See [PHP support ](#tada-php-support ) for supported PHP versions.
#### `extensions` (optional)
2020-05-08 05:33:25 +05:30
- Specify the extensions you want to add or remove.
- Accepts a `string` in csv-format. For example `mbstring, :opcache` .
- Non-default extensions prefixed with `:` are removed.
2020-02-14 12:45:46 +05:30
- See [PHP extension support ](#heavy_plus_sign-php-extension-support ) for more info.
2019-09-06 05:48:51 +05:30
2020-02-14 12:45:46 +05:30
#### `ini-values` (optional)
2019-09-18 07:40:09 +05:30
2020-02-14 12:45:46 +05:30
- Specify the values you want to add to `php.ini` .
- Accepts a `string` in csv-format. For example `post_max_size=256M, short_open_tag=On` .
#### `coverage` (optional)
- Specify the code coverage driver you want to setup.
- Accepts `xdebug` , `pcov` or `none` .
- See [coverage support ](#signal_strength-coverage-support ) for more info.
#### `tools` (optional)
- Specify the tools you want to setup.
- Accepts a `string` in csv-format. For example `phpunit, phpcs`
- See [tools Support ](#wrench-tools-support ) for tools supported.
See below for more info.
2019-09-18 07:40:09 +05:30
2019-12-31 13:25:59 +05:30
### Basic Setup
2019-12-09 12:40:12 +05:30
2019-12-18 21:44:02 +05:30
> Setup a particular PHP version.
2019-09-08 12:53:33 +05:30
2019-09-06 05:48:51 +05:30
```yaml
steps:
- name: Checkout
2020-01-01 22:36:25 +05:30
uses: actions/checkout@v2
2019-11-22 01:06:58 +05:30
2019-10-19 19:59:48 +05:30
- name: Setup PHP
2020-02-14 12:45:46 +05:30
uses: shivammathur/setup-php@v2
2019-09-06 05:48:51 +05:30
with:
2019-11-30 05:23:14 +05:30
php-version: '7.4'
2020-02-14 12:45:46 +05:30
extensions: mbstring, intl
ini-values: post_max_size=256M, short_open_tag=On
coverage: xdebug
tools: php-cs-fixer, phpunit
2019-09-06 05:48:51 +05:30
```
2019-12-18 21:44:02 +05:30
### Matrix Setup
2019-12-09 12:40:12 +05:30
2019-12-18 21:44:02 +05:30
> Setup multiple PHP versions on multiple operating systems.
2019-09-08 12:53:33 +05:30
2019-09-06 05:48:51 +05:30
```yaml
jobs:
2019-12-31 13:25:59 +05:30
run:
2019-09-06 05:48:51 +05:30
runs-on: ${{ matrix.operating-system }}
2019-12-31 13:25:59 +05:30
strategy:
2019-09-06 05:48:51 +05:30
matrix:
2020-01-21 08:25:14 +05:30
operating-system: [ubuntu-latest, windows-latest, macos-latest]
2019-11-30 05:23:14 +05:30
php-versions: ['5.6', '7.0', '7.1', '7.2', '7.3', '7.4']
2019-09-06 07:22:50 +05:30
name: PHP ${{ matrix.php-versions }} Test on ${{ matrix.operating-system }}
2019-09-06 05:48:51 +05:30
steps:
- name: Checkout
2020-01-01 22:36:25 +05:30
uses: actions/checkout@v2
2019-11-22 01:06:58 +05:30
2019-10-19 19:59:48 +05:30
- name: Setup PHP
2020-02-14 12:45:46 +05:30
uses: shivammathur/setup-php@v2
2019-09-06 05:48:51 +05:30
with:
2019-11-07 15:02:05 +05:30
php-version: ${{ matrix.php-versions }}
2020-02-14 12:45:46 +05:30
extensions: mbstring, intl
ini-values: post_max_size=256M, short_open_tag=On
coverage: xdebug
tools: php-cs-fixer, phpunit
2019-09-06 05:48:51 +05:30
```
2019-12-31 13:25:59 +05:30
### Experimental Setup
2019-12-18 21:44:02 +05:30
> Setup a nightly build of `PHP 8.0.0-dev` from the [master branch](https://github.com/php/php-src/tree/master "Master branch on PHP source repository") of PHP.
- This version is currently in development and is an experimental feature on this action.
- `PECL` is installed by default with this version on `ubuntu` .
- Some extensions might not support this version currently.
- Refer to this [RFC ](https://wiki.php.net/rfc/jit "PHP JIT RFC configuration" ) for configuring `PHP JIT` on this version.
2019-12-28 00:23:51 +05:30
- Refer to this [list of RFCs ](https://wiki.php.net/rfc#php_80 "List of RFCs implemented in PHP8" ) implemented in this version.
2019-12-18 21:44:02 +05:30
```yaml
steps:
- name: Checkout
2020-01-01 22:36:25 +05:30
uses: actions/checkout@v2
2019-12-18 21:44:02 +05:30
- name: Setup PHP
2020-02-14 12:45:46 +05:30
uses: shivammathur/setup-php@v2
2019-12-18 21:44:02 +05:30
with:
php-version: '8.0'
2020-02-14 12:45:46 +05:30
extensions: mbstring
ini-values: opcache.jit_buffer_size=256M, opcache.jit=1235, pcre.jit=1
coverage: pcov
tools: php-cs-fixer, phpunit
2019-12-18 21:44:02 +05:30
```
2020-05-08 05:33:25 +05:30
### Self Hosted Setup
> Setup PHP on a self-hosted runner.
- `PHP 5.6` and newer versions are supported on self-hosted runners.
- `Windows 7` and newer, `Windows Server 2012 R2` and newer, `Ubuntu 18.04` , `Ubuntu 16.04` and `MacOS X Catalina 10.15` are supported.
- To setup a dockerized self-hosted runner, refer to this [guide ](https://github.com/shivammathur/setup-php/wiki/Dockerized-self-hosted-runner-on-Ubuntu ) to setup in an `Ubuntu` container and refer to this [guide ](https://github.com/shivammathur/setup-php/wiki/Dockerized-self-hosted-runner-on-Windows ) to setup in a `Windows` container.
- To setup the runner directly on the host OS or in a VM, follow this [requirements guide ](https://github.com/shivammathur/setup-php/wiki/Requirements-for-self-hosted-runners "Requirements guide for self-hosted runner to run setup-php" ) before setting up the self-hosted runner.
Specify the environment variable `runner` with the value `self-hosted` . Without this your workflow will fail.
```yaml
jobs:
run:
runs-on: self-hosted
strategy:
matrix:
php-versions: ['5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0']
name: PHP ${{ matrix.php-versions }}
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-versions }}
env:
runner: self-hosted # Specify the runner.
```
### Local Testing Setup
> Test your `Ubuntu` workflow locally using [`nektos/act`](https://github.com/nektos/act "Project to test GitHub Actions locally").
```yaml
jobs:
run:
runs-on: ubuntu-latest
name: PHP 7.4 Test
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: 7.4
```
Run the workflow locally with `act` using [`shivammathur/node` ](https://github.com/shivammathur/node-docker "Docker image to run setup-php" ) docker image.
```bash
# For runs-on: ubuntu-latest
act -P ubuntu-latest=shivammathur/node:latest
# For runs-on: ubuntu-18.04
act -P ubuntu-18.04=shivammathur/node:latest
# For runs-on: ubuntu-16.04
act -P ubuntu-16.04=shivammathur/node:xenial
```
2020-01-21 08:01:10 +05:30
### Thread Safe Setup
2020-05-08 05:33:25 +05:30
> Setup both `TS` and `NTS` PHP on `Windows`.
2020-01-21 08:01:10 +05:30
- `NTS` versions are setup by default.
2020-05-08 05:33:25 +05:30
- On `Ubuntu` and `macOS` only `NTS` versions are supported.
- On `Windows` both `TS` and `NTS` versions are supported.
2020-01-21 08:01:10 +05:30
```yaml
jobs:
run:
runs-on: windows-latest
name: Setup PHP TS on Windows
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Setup PHP
2020-02-14 12:45:46 +05:30
uses: shivammathur/setup-php@v2
2020-01-21 08:01:10 +05:30
with:
php-version: '7.4'
env:
2020-05-08 05:33:25 +05:30
phpts: ts # specify ts or nts
2020-01-21 08:01:10 +05:30
```
2020-02-14 12:45:46 +05:30
### Force Update
2020-05-08 05:33:25 +05:30
> Update to latest patch of PHP versions.
2020-02-29 21:08:26 +05:30
- Pre-installed PHP versions on the GitHub Actions runner are not updated to their latest patch release by default.
2020-02-14 12:45:46 +05:30
- You can specify the `update` environment variable to `true` to force update to the latest release.
```yaml
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '7.4'
env:
update: true # specify true or false
```
### Verbose Setup
2020-05-08 05:33:25 +05:30
> Debug your workflow
2020-02-29 21:08:26 +05:30
To debug any issues, you can use the `verbose` tag instead of `v2` .
2020-02-14 12:45:46 +05:30
```yaml
- name: Setup PHP
uses: shivammathur/setup-php@verbose
with:
php-version: '7.4'
```
### Cache Extensions
2020-05-08 05:33:25 +05:30
You can cache PHP extensions using [`shivammathur/cache-extensions` ](https://github.com/shivammathur/cache-extensions "GitHub Action to cache php extensions" ) and [`action/cache` ](https://github.com/actions/cache "GitHub Action to cache files" ) GitHub Actions. Extensions which take very long to setup when cached are available in the next workflow run and are enabled directly. This reduces the workflow execution time.
2020-02-14 12:45:46 +05:30
```yaml
runs-on: ${{ matrix.operating-system }}
strategy:
matrix:
operating-system: [ubuntu-latest, windows-latest, macos-latest]
php-versions: ['7.2', '7.3', '7.4']
name: PHP ${{ matrix.php-versions }} Test on ${{ matrix.operating-system }}
env:
extensions: intl, pcov
key: cache-v1 # can be any string, change to clear the extension cache.
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Setup cache environment
id: cache-env
uses: shivammathur/cache-extensions@v1
with:
php-version: ${{ matrix.php-versions }}
extensions: ${{ env.extensions }}
key: ${{ env.key }}
- name: Cache extensions
uses: actions/cache@v1
with:
path: ${{ steps.cache-env.outputs.dir }}
key: ${{ steps.cache-env.outputs.key }}
restore-keys: ${{ steps.cache-env.outputs.key }}
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-versions }}
extensions: ${{ env.extensions }}
```
2020-05-08 05:33:25 +05:30
**Note:** If you setup both `TS` and `NTS` PHP versions on `windows` , add `${{ env.phpts }}` to `key` and `restore-keys` inputs in `actions/cache` step.
2020-02-29 21:08:26 +05:30
2020-02-14 12:45:46 +05:30
### Cache Composer Dependencies
2019-11-03 10:11:44 +05:30
2020-02-21 13:39:04 +05:30
If your project uses composer, you can persist composer's internal cache directory. 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.
2019-11-05 04:58:15 +05:30
2019-11-03 10:11:44 +05:30
```yaml
2020-02-21 13:39:04 +05:30
- name: Get composer cache directory
2019-11-05 04:58:15 +05:30
id: composer-cache
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
2019-11-08 15:56:57 +05:30
2019-12-31 13:25:59 +05:30
- name: Cache dependencies
2019-11-07 01:31:01 +05:30
uses: actions/cache@v1
2019-11-05 04:58:15 +05:30
with:
2019-12-31 13:25:59 +05:30
path: ${{ steps.composer-cache.outputs.dir }}
2019-11-05 04:58:15 +05:30
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
restore-keys: ${{ runner.os }}-composer-
2019-11-08 15:56:57 +05:30
2020-02-21 13:39:04 +05:30
- name: Install dependencies
2019-11-05 04:58:15 +05:30
run: composer install --prefer-dist
2019-11-03 10:11:44 +05:30
```
2020-02-29 21:08:26 +05:30
**Notes**
- Please do not cache `vendor` directory using `action/cache` as that will have side-effects.
- 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.
2019-12-28 00:23:51 +05:30
2019-12-31 13:25:59 +05:30
```yaml
2020-02-21 13:39:04 +05:30
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
```
### Cache Node.js Dependencies
2020-02-29 21:08:26 +05:30
If your project has node.js dependencies, you can persist npm's or yarn's cache directory. The cached files are available across check-runs and will reduce the workflow execution time.
2020-02-21 13:39:04 +05:30
```yaml
- name: Get node.js cache directory
id: node-cache-dir
run: echo "::set-output name=dir::$(npm config get cache)" # Use $(yarn cache dir) for yarn
- name: Cache dependencies
uses: actions/cache@v1
with:
path: ${{ steps.node-cache-dir.outputs.dir }}
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} # Use '**/yarn.lock' for yarn
restore-keys: ${{ runner.os }}-node-
```
2019-12-28 00:23:51 +05:30
2020-02-29 21:08:26 +05:30
**Note:** Please do not cache `node_modules` directory as that will have side-effects.
2020-04-09 23:18:37 +05:30
### 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` ](https://help.github.com/en/actions/configuring-and-managing-workflows/authenticating-with-the-github_token "GITHUB_TOKEN documentation" ) secret for this purpose.
```yaml
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '7.4'
env:
COMPOSER_TOKEN: ${{ secrets.GITHUB_TOKEN }}
```
2019-12-19 02:38:12 +05:30
### Problem Matchers
2020-02-14 12:45:46 +05:30
#### PHP
Setup problem matchers for your `PHP` output by adding this step after the `setup-php` step. This will scan the logs for PHP errors and warnings, and surface them prominently in the GitHub Actions UI by creating annotations and log file decorations.
```yaml
2020-02-21 13:39:04 +05:30
- name: Setup problem matchers for PHP
2020-02-14 12:45:46 +05:30
run: echo "::add-matcher::${{ runner.tool_cache }}/php.json"
```
2020-02-03 03:26:06 +05:30
#### PHPUnit
2020-02-14 12:45:46 +05:30
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.
2019-12-19 02:38:12 +05:30
```yaml
2020-02-21 13:39:04 +05:30
- name: Setup problem matchers for PHPUnit
2019-12-19 02:38:12 +05:30
run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json"
```
2020-02-14 12:45:46 +05:30
#### Other Tools
2020-02-03 03:26:06 +05:30
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 ](https://github.com/staabm/annotate-pull-request-from-checkstyle ).
> Here is an example with `phpstan`.
```yaml
- name: Setup PHP
2020-02-14 12:45:46 +05:30
uses: shivammathur/setup-php@v2
2020-02-03 03:26:06 +05:30
with:
php-version: '7.4'
tools: cs2pr, phpstan
- name: PHPStan
run: phpstan analyse src --error-format=checkstyle | cs2pr
```
2019-10-03 13:43:34 +03:00
### Examples
2019-10-04 19:34:05 +05:30
Examples for setting up this GitHub Action with different PHP Frameworks/Packages.
2019-10-03 13:43:34 +03:00
2019-10-10 17:47:17 +05:30
|Framework/Package|Runs on|Workflow|
|--- |--- |--- |
2020-02-28 15:42:17 +05:30
|Blackfire|`macOS` , `ubuntu` and `windows` |[blackfire.yml ](./examples/blackfire.yml "GitHub Action using Blackfire" )|
|Blackfire Player|`macOS` , `ubuntu` and `windows` |[blackfire-player.yml ](./examples/blackfire-player.yml "GitHub Action using Blackfire Player" )|
2020-01-08 12:54:37 +05:30
|CakePHP with `MySQL` and `Redis` |`ubuntu` |[cakephp-mysql.yml ](./examples/cakephp-mysql.yml "GitHub Action for CakePHP with MySQL and Redis" )|
|CakePHP with `PostgreSQL` and `Redis` |`ubuntu` |[cakephp-postgres.yml ](./examples/cakephp-postgres.yml "GitHub Action for CakePHP with Postgres and Redis" )|
|CakePHP without services|`macOS` , `ubuntu` and `windows` |[cakephp.yml ](./examples/cakephp.yml "GitHub Action for CakePHP without services" )|
2019-10-10 17:47:17 +05:30
|CodeIgniter|`macOS` , `ubuntu` and `windows` |[codeigniter.yml ](./examples/codeigniter.yml "GitHub Action for CodeIgniter" )|
|Laravel with `MySQL` and `Redis` |`ubuntu` |[laravel-mysql.yml ](./examples/laravel-mysql.yml "GitHub Action for Laravel with MySQL and Redis" )|
|Laravel with `PostgreSQL` and `Redis` |`ubuntu` |[laravel-postgres.yml ](./examples/laravel-postgres.yml "GitHub Action for Laravel with PostgreSQL and Redis" )|
|Laravel without services|`macOS` , `ubuntu` and `windows` |[laravel.yml ](./examples/laravel.yml "GitHub Action for Laravel without services" )|
2019-10-13 05:27:58 +05:30
|Lumen with `MySQL` and `Redis` |`ubuntu` |[lumen-mysql.yml ](./examples/lumen-mysql.yml "GitHub Action for Lumen with MySQL and Redis" )|
|Lumen with `PostgreSQL` and `Redis` |`ubuntu` |[lumen-postgres.yml ](./examples/lumen-postgres.yml "GitHub Action for Lumen with PostgreSQL and Redis" )|
|Lumen without services|`macOS` , `ubuntu` and `windows` |[lumen.yml ](./examples/lumen.yml "GitHub Action for Lumen without services" )|
2019-10-13 09:48:29 +05:30
|Phalcon with `MySQL` |`ubuntu` |[phalcon-mysql.yml ](./examples/phalcon-mysql.yml "GitHub Action for Phalcon with MySQL" )|
|Phalcon with `PostgreSQL` |`ubuntu` |[phalcon-postgres.yml ](./examples/phalcon-postgres.yml "GitHub Action for Phalcon with PostgreSQL" )|
2019-11-27 06:00:34 +05:30
|Roots/bedrock|`ubuntu` |[bedrock.yml ](./examples/bedrock.yml "GitHub Action for Wordpress Development using @roots/bedrock" )|
|Roots/sage|`ubuntu` |[sage.yml ](./examples/sage.yml "GitHub Action for Wordpress Development using @roots/sage" )|
2019-10-10 17:47:17 +05:30
|Slim Framework|`macOS` , `ubuntu` and `windows` |[slim-framework.yml ](./examples/slim-framework.yml "GitHub Action for Slim Framework" )|
|Symfony with `MySQL` |`ubuntu` |[symfony-mysql.yml ](./examples/symfony-mysql.yml "GitHub Action for Symfony with MySQL" )|
|Symfony with `PostgreSQL` |`ubuntu` |[symfony-postgres.yml ](./examples/symfony-postgres.yml "GitHub Action for Symfony with PostgreSQL" )|
2019-11-27 06:00:34 +05:30
|Symfony without services|`macOS` , `ubuntu` and `windows` |[symfony.yml ](./examples/symfony.yml "GitHub Action for Symfony without services" )|
2019-10-10 17:47:17 +05:30
|Yii2 Starter Kit with `MySQL` |`ubuntu` |[yii2-mysql.yml ](./examples/yii2-mysql.yml "GitHub Action for Yii2 Starter Kit with MySQL" )|
|Yii2 Starter Kit with `PostgreSQL` |`ubuntu` |[yii2-postgres.yml ](./examples/yii2-postgres.yml "GitHub Action for Yii2 Starter Kit with PostgreSQL" )|
|Zend Framework|`macOS` , `ubuntu` and `windows` |[zend-framework.yml ](./examples/zend-framework.yml "GitHub Action for Zend Framework" )|
2019-10-03 13:43:34 +03:00
2019-09-24 14:38:22 +05:30
## :scroll: License
2020-02-20 04:15:24 +05:30
The scripts and documentation in this project are released under the [MIT License ](LICENSE "License for shivammathur/setup-php" ). This project has multiple [dependencies ](#bookmark-dependencies "Dependencies for this PHP Action" ). Their licenses can be found in their respective repositories.
2019-09-24 14:38:22 +05:30
## :+1: Contributions
2019-09-06 05:48:51 +05:30
2019-11-03 10:11:44 +05:30
Contributions are welcome! See [Contributor's Guide ](.github/CONTRIBUTING.md "shivammathur/setup-php contribution guide" ). If you face any issues while using this or want to suggest a feature/improvement, create an issue [here ](https://github.com/shivammathur/setup-php/issues "Issues reported" ).
2019-09-06 05:48:51 +05:30
2020-02-14 12:45:46 +05:30
## :sparkling_heart: Support This Project
2019-09-08 12:53:33 +05:30
2019-11-03 10:11:44 +05:30
If this action helped you.
2020-02-29 21:08:26 +05:30
- To support this project subscribe on [Patreon ](https://www.patreon.com/shivammathur "Shivam Mathur Patreon" ) or sponsor using [Paypal ](https://www.paypal.me/shivammathur "Shivam Mathur PayPal" ).
2020-01-26 15:12:52 +05:30
- Please star the project and share it with the community.
2020-02-21 13:39:04 +05:30
- If you blog, write about your experience of using this action.
2020-01-26 15:12:52 +05:30
- If you need any help using this, please contact me using [Codementor ](https://www.codementor.io/shivammathur "Shivam Mathur Codementor" )
2019-09-08 12:53:33 +05:30
2020-02-14 12:45:46 +05:30
## :bookmark: Dependencies
2019-09-08 12:53:33 +05:30
2020-02-14 12:45:46 +05:30
- [Node.js dependencies ](https://github.com/shivammathur/setup-php/network/dependencies "Node.js dependencies" )
- [gplessis/dotdeb-php ](https://github.com/gplessis/dotdeb-php "Packaging for end of life PHP versions" )
2019-12-09 08:09:03 +05:30
- [mlocati/powershell-phpmanager ](https://github.com/mlocati/powershell-phpmanager "Package to handle PHP on windows" )
2020-02-14 12:45:46 +05:30
- [ppa:ondrej/php ](https://launchpad.net/~ondrej/+archive/ubuntu/php "Packaging active PHP packages" )
- [shivammathur/cache-extensions ](https://github.com/shivammathur/cache-extensions "GitHub action to help with caching PHP extensions" )
2019-12-09 08:09:03 +05:30
- [shivammathur/homebrew-php ](https://github.com/shivammathur/homebrew-php "Tap for PHP builds for MacOS" )
2020-02-14 12:45:46 +05:30
- [shivammathur/php-builder ](https://github.com/shivammathur/php-builder "Nightly PHP package" )
2020-02-29 21:08:26 +05:30
- [shivammathur/php5-darwin ](https://github.com/shivammathur/php5-darwin "Scripts to setup PHP5 versions on darwin" )
2020-02-29 01:10:18 +05:30
- [shivammathur/php5-ubuntu ](https://github.com/shivammathur/php5-ubuntu "Scripts to setup PHP5 versions on ubuntu" )
2019-09-08 12:53:33 +05:30
2019-09-24 14:38:22 +05:30
## :bookmark_tabs: Further Reading
2019-09-06 05:48:51 +05:30
2019-10-10 17:47:17 +05:30
- [About GitHub Actions ](https://github.com/features/actions "GitHub Actions" )
- [GitHub Actions Syntax ](https://help.github.com/en/articles/workflow-syntax-for-github-actions "GitHub Actions Syntax" )
- [Other Awesome Actions ](https://github.com/sdras/awesome-actions "List of Awesome GitHub Actions" )