2019-09-24 16:08:22 +07:00
< 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 06:57:58 +07:00
< h1 align = "center" > Setup PHP in GitHub Actions< / h1 >
2019-09-06 07:18:51 +07:00
2019-10-13 06:57:58 +07:00
< p align = "center" >
2019-10-10 19:17:17 +07:00
< 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 >
2020-10-05 15:25:56 +07:00
< a href = "https://codecov.io/gh/shivammathur/setup-php" title = "Code coverage" > < img alt = "Codecov Code Coverage" src = "https://img.shields.io/codecov/c/github/shivammathur/setup-php?logo=codecov" > < / a >
2020-08-19 08:19:39 +07:00
< 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?logo=open%20source%20initiative&logoColor=white&labelColor=555555" > < / a >
2020-10-22 04:08:40 +07:00
< a href = "#tada-php-support" title = "PHP Versions Supported" > < img alt = "PHP Versions Supported" src = "https://img.shields.io/badge/php-5.3%20to%208.1-777bb3.svg?logo=php&logoColor=white&labelColor=555555" > < / a >
2020-08-19 08:19:39 +07:00
< / p >
< p align = "center" >
< a href = "https://reddit.com/r/setup_php" title = "setup-php reddit" > < img alt = "setup-php reddit" src = "https://img.shields.io/badge/reddit-join-FF5700?logo=reddit&logoColor=FF5700&labelColor=555555" > < / a >
< a href = "https://twitter.com/setup_php" title = "setup-php twitter" > < img alt = "setup-php twitter" src = "https://img.shields.io/badge/twitter-follow-1DA1F2?logo=twitter&logoColor=1DA1F2&labelColor=555555" > < / a >
< a href = "https://setup-php.statuspage.io/" title = "setup-php status" > < img alt = "setup-php status" src = "https://img.shields.io/badge/status-subscribe-28A745?logo=statuspage&logoColor=28A745&labelColor=555555" > < / a >
2019-09-06 07:18:51 +07:00
< / p >
2020-10-19 18:36:48 +07:00
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 set up 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 16:08:22 +07:00
2019-11-03 11:41:44 +07:00
## Contents
- [PHP Support ](#tada-php-support )
- [OS/Platform Support ](#cloud-osplatform-support )
2020-06-09 08:34:47 +07:00
- [GitHub-Hosted Runners ](#github-hosted-runners )
- [Self-Hosted Runners ](#self-hosted-runners )
2019-12-27 08:26:49 +07:00
- [PHP Extension Support ](#heavy_plus_sign-php-extension-support )
- [Tools Support ](#wrench-tools-support )
2020-06-09 08:34:47 +07:00
- [Coverage Support ](#signal_strength-coverage-support )
2019-11-03 11:41:44 +07:00
- [Xdebug ](#xdebug )
- [PCOV ](#pcov )
2020-02-14 14:15:46 +07:00
- [Disable Coverage ](#disable-coverage )
2019-11-03 11:41:44 +07:00
- [Usage ](#memo-usage )
2020-02-14 14:15:46 +07:00
- [Inputs ](#inputs )
2020-10-19 18:36:48 +07:00
- [Flags ](#flags )
2019-12-18 23:14:02 +07:00
- [Basic Setup ](#basic-setup )
- [Matrix Setup ](#matrix-setup )
2020-06-09 08:34:47 +07:00
- [Nightly Build Setup ](#nightly-build-setup )
2020-05-08 07:03:25 +07:00
- [Self Hosted Setup ](#self-hosted-setup )
- [Local Testing Setup ](#local-testing-setup )
2020-02-14 14:15:46 +07:00
- [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 15:09:04 +07:00
- [Cache Node.js Dependencies ](#cache-nodejs-dependencies )
2020-04-10 00:48:37 +07:00
- [Composer GitHub OAuth ](#composer-github-oauth )
2019-12-19 04:08:12 +07:00
- [Problem Matchers ](#problem-matchers )
2019-11-03 11:41:44 +07:00
- [Examples ](#examples )
2020-07-04 01:45:28 +07:00
- [Versioning ](#bookmark-versioning )
2019-11-03 11:41:44 +07:00
- [License ](#scroll-license )
- [Contributions ](#1-contributions )
2020-02-14 14:15:46 +07:00
- [Support This Project ](#sparkling_heart-support-this-project )
2020-07-04 01:45:28 +07:00
- [Dependencies ](#package-dependencies )
2019-11-03 11:41:44 +07:00
- [Further Reading ](#bookmark_tabs-further-reading )
2019-09-24 17:08:21 +07:00
## :tada: PHP Support
2019-09-06 07:18:51 +07:00
2020-05-08 07:03:25 +07:00
|PHP Version|Stability|Release Support|Runner Support|
|--- |--- |--- |--- |
2020-06-09 08:34:47 +07:00
|`5.3`|`Stable`|`End of life`|`GitHub-hosted`|
|`5.4`|`Stable`|`End of life`|`GitHub-hosted`|
|`5.5`|`Stable`|`End of life`|`GitHub-hosted`|
|`5.6`|`Stable`|`End of life`|`GitHub-hosted`, `self-hosted` |
|`7.0`|`Stable`|`End of life`|`GitHub-hosted`, `self-hosted` |
|`7.1`|`Stable`|`End of life`|`GitHub-hosted`, `self-hosted` |
|`7.2`|`Stable`|`Security fixes only`|`GitHub-hosted`, `self-hosted` |
|`7.3`|`Stable`|`Active`|`GitHub-hosted`, `self-hosted` |
|`7.4`|`Stable`|`Active`|`GitHub-hosted`, `self-hosted` |
|`8.0`|`Nightly`|`In development`|`GitHub-hosted`, `self-hosted` |
2020-10-19 18:36:48 +07:00
|`8.1`|`Nightly`|`In development`|`GitHub-hosted`, `self-hosted` |
**Note:** Specifying `8.0` and `8.1` in `php-version` input installs a nightly build of `PHP 8.0.0-dev` and `PHP 8.1.0-dev` respectively. See [nightly build setup ](#nightly-build-setup ) for more information.
2020-06-09 08:34:47 +07:00
2019-09-06 07:40:52 +07:00
2019-09-24 16:08:22 +07:00
## :cloud: OS/Platform Support
2019-09-09 02:28:00 +07:00
2020-10-19 18:36:48 +07:00
The action supports both `GitHub-hosted` runners and `self-hosted` runners on the following operating systems.
2020-06-09 08:34:47 +07:00
### GitHub-Hosted Runners
|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 Catalina 10.15|`macos-latest` or `macos-10.15` |`PHP 7.4`|
2020-10-19 18:36:48 +07:00
|macOS Big Sur 11.0|`macos-11.0`|`PHP 7.4`|
2020-06-09 08:34:47 +07:00
### Self-Hosted Runners
|Host OS/Virtual environment|YAML workflow label|
2019-09-09 02:28:00 +07:00
|--- |--- |
2020-06-09 08:34:47 +07:00
|Ubuntu 16.04|`self-hosted` or `Linux` |
|Ubuntu 18.04|`self-hosted` or `Linux` |
|Ubuntu 20.04|`self-hosted` or `Linux` |
|Windows 7 and newer|`self-hosted` or `Windows` |
|Windows Server 2012 R2 and newer|`self-hosted` or `Windows` |
|macOS Catalina 10.15|`self-hosted` or `macOS` |
2020-10-19 18:36:48 +07:00
|macOS Big Sur 11.0|`self-hosted` or `macOS` |
2020-05-08 07:03:25 +07:00
2020-06-09 08:34:47 +07:00
- Refer to the [self-hosted setup ](#self-hosted-setup ) to use the action on self-hosted runners.
2019-09-09 02:28:00 +07:00
2019-12-27 08:26:49 +07:00
## :heavy_plus_sign: PHP Extension Support
2020-05-08 07:03:25 +07:00
2020-02-29 22:38:26 +07:00
- 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 14:15:46 +07:00
```yaml
2020-08-19 08:19:39 +07:00
- name: Setup PHP with pecl extension
uses: shivammathur/setup-php@v2
with:
php-version: '7.4'
tools: pecl
extensions: swoole
2020-02-14 14:15:46 +07:00
```
2020-02-29 22:38:26 +07:00
- On `windows` PECL extensions which have the `DLL` binary can be installed.
2020-02-14 14:15:46 +07:00
2020-02-29 22:38:26 +07:00
- On `macOS` PECL extensions can be installed.
2020-02-14 14:15:46 +07:00
2020-02-29 22:38:26 +07:00
- Extensions installed along with PHP if specified are enabled.
2020-02-14 14:15:46 +07:00
2020-02-29 22:38:26 +07:00
- 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 14:15:46 +07:00
```yaml
2020-08-19 08:19:39 +07:00
- name: Setup PHP with specific version of PECL extension
uses: shivammathur/setup-php@v2
with:
php-version: '5.4'
tools: pecl
extensions: swoole-1.9.3
2020-02-14 14:15:46 +07:00
```
2020-02-29 22:38:26 +07:00
- 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 14:15:46 +07:00
```yaml
2020-08-19 08:19:39 +07:00
- name: Setup PHP with pre-release PECL extension
uses: shivammathur/setup-php@v2
with:
php-version: '7.4'
tools: pecl
extensions: xdebug-beta
2020-02-14 14:15:46 +07:00
```
2020-07-20 13:20:58 +07:00
- Shared extensions can be removed by prefixing them with a `:` .
2020-05-08 07:03:25 +07:00
```yaml
2020-08-19 08:19:39 +07:00
- name: Setup PHP and remove shared extension
uses: shivammathur/setup-php@v2
with:
php-version: '7.4'
extensions: :opcache
```
- Extension `intl` can be setup with specific `ICU` version for `PHP 5.6` to `PHP 7.4` in `Ubuntu` workflows by suffixing `intl` with the `ICU` version. `ICU 50.2` and newer versions are supported. Refer to [`ICU builds` ](https://github.com/shivammathur/icu-intl#icu4c-builds ) for the specific versions supported.
```yaml
- name: Setup PHP with intl
uses: shivammathur/setup-php@v2
with:
php-version: '7.4'
extensions: intl-67.1
2020-05-08 07:03:25 +07:00
```
2020-08-10 15:13:18 +07:00
- These extensions have custom support - `cubrid` , `pdo_cubrid` and `gearman` on `Ubuntu` , and `blackfire` , `ioncube` , `oci8` , `pdo_oci` , `phalcon3` and `phalcon4` on all supported OS.
2019-09-07 19:31:50 +07:00
2020-10-19 18:36:48 +07:00
- By default, extensions which cannot be added or removed gracefully leave an error message in the logs, the action is not interrupted. To change this behaviour you can set `fail-fast` flag to `true` .
```yaml
- name: Setup PHP with fail-fast
uses: shivammathur/setup-php@v2
with:
php-version: '7.4'
extensions: oci8
env:
fail-fast: true
```
2019-12-27 08:26:49 +07:00
## :wrench: Tools Support
2020-01-07 09:36:14 +07:00
These tools can be setup globally using the `tools` input.
2019-12-27 08:26:49 +07:00
2020-10-05 10:41:15 +07:00
`behat` , `blackfire` , `blackfire-player` , `codeception` , `composer` , `composer-normalize` , `composer-prefetcher` , `composer-require-checker` , `composer-unused` , `cs2pr` , `deployer` , `flex` , `grpc_php_plugin` , `infection` , `pecl` , `phan` , `phing` , `phinx` , `phive` , `phpcbf` , `phpcpd` , `php-config` , `php-cs-fixer` , `phpcs` , `phpize` , `phpmd` , `phpspec` , `phpstan` , `phpunit` , `prestissimo` , `protoc` , `psalm` , `symfony` , `vapor-cli`
2019-12-27 08:26:49 +07:00
2019-12-31 14:55:59 +07:00
```yaml
2020-08-19 08:19:39 +07:00
- name: Setup PHP with tools
uses: shivammathur/setup-php@v2
with:
php-version: '7.4'
tools: php-cs-fixer, phpunit
2019-12-27 08:26:49 +07:00
```
2020-10-19 18:36:48 +07:00
- To set up a particular version of a tool, specify it in the form `tool:version` . The latest stable version of `composer` is set up by default. You can set up the required version by specifying `v1` , `v2` , `snapshot` or `preview` as version.
2020-06-09 08:34:47 +07:00
```yaml
2020-08-19 08:19:39 +07:00
- name: Setup PHP with composer v2
uses: shivammathur/setup-php@v2
with:
php-version: '7.4'
tools: composer:v2
2020-06-09 08:34:47 +07:00
```
2020-10-19 18:36:48 +07:00
- The latest versions of both agent `blackfire-agent` and client `blackfire` are setup when `blackfire` is specified in tools input. Please refer to the [official documentation ](https://blackfire.io/docs/integrations/ci/github-actions "Blackfire.io documentation for GitHub Actions" ) for using `blackfire` with GitHub Actions.
2020-08-19 08:19:39 +07:00
2020-10-19 18:36:48 +07:00
- Version for other tools should be in `semver` format and a valid release of the tool. This is useful for installing tools for older versions of PHP. For example to set up `PHPUnit` on `PHP 7.2` .
2020-01-07 09:36:14 +07:00
```yaml
2020-08-19 08:19:39 +07:00
- name: Setup PHP with tools
uses: shivammathur/setup-php@v2
with:
php-version: '7.2'
tools: phpunit:8.5.8
2020-06-09 08:34:47 +07:00
```
2020-01-07 09:36:14 +07:00
2020-10-19 18:36:48 +07:00
- By default, tools which cannot be set up gracefully leave an error message in the logs, the action is not interrupted. To change this behaviour you can set `fail-fast` flag to `true` .
```yaml
- name: Setup PHP with fail-fast
uses: shivammathur/setup-php@v2
with:
php-version: '7.4'
tools: deployer
env:
fail-fast: true
```
2020-02-29 22:38:26 +07:00
**Notes**
2020-10-19 18:36:48 +07:00
- Input `tools` is useful to set up tools which you only use in GitHub Actions, thus keeping your `composer.json` tidy.
- If you do not want to use all your dev-dependencies in GitHub Actions workflow, you can run composer with `--no-dev` and install required tools using `tools` input to speed up your workflow.
- If you have a tool in your `composer.json` , do not setup it with `tools` input as the two instances of the tool might conflict.
2019-12-28 01:53:51 +07:00
2020-06-09 08:34:47 +07:00
## :signal_strength: Coverage Support
2019-10-05 16:30:00 +07:00
### Xdebug
2019-10-10 19:17:17 +07:00
Specify `coverage: xdebug` to use `Xdebug` .
2020-06-19 05:39:13 +07:00
Runs on all [PHP versions supported ](#tada-php-support "List of PHP versions supported on this GitHub Action" ).
2019-10-08 19:42:54 +07:00
```yaml
2020-08-19 08:19:39 +07:00
- name: Setup PHP with Xdebug
uses: shivammathur/setup-php@v2
with:
php-version: '7.4'
coverage: xdebug
2019-09-26 04:03:39 +07:00
```
2019-10-05 16:30:00 +07:00
### PCOV
2020-02-03 04:56:06 +07:00
Specify `coverage: pcov` to use `PCOV` and disable `Xdebug` .
2020-06-09 08:34:47 +07:00
`PCOV` supports `PHP 7.1` and newer PHP versions.
Tests with `PCOV` run much faster than with `Xdebug` .
2019-12-09 12:22:43 +07:00
If your source code directory is other than `src` , `lib` or, `app` , specify `pcov.directory` using the `ini-values` input.
2019-10-13 11:18:29 +07:00
2019-10-08 19:42:54 +07:00
```yaml
2020-08-19 08:19:39 +07:00
- name: Setup PHP with PCOV
uses: shivammathur/setup-php@v2
with:
php-version: '7.4'
ini-values: pcov.directory=api #optional , see above for usage.
coverage: pcov
```
`PHPUnit` 8 and above supports `PCOV` out of the box.
If you are using `PHPUnit` 5, 6 or 7, you will need `krakjoe/pcov-clobber` .
Before executing your tests add the following step.
```yaml
- name: Setup PCOV
run: |
composer require pcov/clobber
vendor/bin/pcov clobber
2019-09-26 04:03:39 +07:00
```
2020-02-14 14:15:46 +07:00
### Disable Coverage
2019-10-10 19:17:17 +07:00
2020-02-14 14:15:46 +07:00
Specify `coverage: none` to remove both `Xdebug` and `PCOV` .
2019-10-10 19:17:17 +07:00
Consider disabling the coverage using this PHP action for these reasons.
2019-11-03 11:41:44 +07:00
2019-10-10 19:17:17 +07:00
- You are not generating coverage reports while testing.
2019-12-28 01:53:51 +07:00
- It will remove `Xdebug` , which will have a positive impact on PHP performance.
2019-11-03 11:41:44 +07:00
- You are using `phpdbg` for running your tests.
2020-02-29 22:38:26 +07:00
- You are profiling your code using `blackfire` .
2019-10-08 19:42:54 +07:00
```yaml
2020-08-19 08:19:39 +07:00
- name: Setup PHP with no coverage driver
uses: shivammathur/setup-php@v2
with:
php-version: '7.4'
coverage: none
2019-10-05 16:30:00 +07:00
```
2019-09-24 16:08:22 +07:00
## :memo: Usage
2019-09-06 07:18:51 +07:00
2020-02-14 14:15:46 +07:00
### Inputs
2020-10-19 18:36:48 +07:00
> Specify using `with` keyword
2020-02-14 14:15:46 +07:00
#### `php-version` (required)
2020-10-19 18:36:48 +07:00
- Specify the PHP version you want to set up.
2020-02-14 14:15:46 +07:00
- Accepts a `string` . For example `'7.4'` .
2020-10-05 15:25:56 +07:00
- Accepts `latest` to set up the latest stable PHP version.
2020-02-14 14:15:46 +07:00
- See [PHP support ](#tada-php-support ) for supported PHP versions.
#### `extensions` (optional)
2020-05-08 07:03:25 +07:00
- 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 14:15:46 +07:00
- See [PHP extension support ](#heavy_plus_sign-php-extension-support ) for more info.
2019-09-06 07:18:51 +07:00
2020-02-14 14:15:46 +07:00
#### `ini-values` (optional)
2019-09-18 09:10:09 +07:00
2020-02-14 14:15:46 +07:00
- 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)
2020-10-19 18:36:48 +07:00
- Specify the code coverage driver you want to set up.
2020-02-14 14:15:46 +07:00
- Accepts `xdebug` , `pcov` or `none` .
- See [coverage support ](#signal_strength-coverage-support ) for more info.
#### `tools` (optional)
2020-10-19 18:36:48 +07:00
- Specify the tools you want to set up.
- Accepts a `string` in csv-format. For example: `phpunit, phpcs`
2020-02-14 14:15:46 +07:00
- See [tools Support ](#wrench-tools-support ) for tools supported.
2020-10-19 18:36:48 +07:00
### Flags
> Specify using `env` keyword
#### `fail-fast` (optional)
- Specify to mark the workflow as failed if an extension or tool fails to set up.
- This changes the default mode from graceful warnings to fail-fast.
- By default, it is set to `false` .
- Accepts `true` and `false` .
#### `phpts` (optional)
- Specify to set up thread-safe version of PHP on windows.
- Accepts `ts` and `nts` .
- By default, it is set to `nts` .
- See [thread safe setup ](#thread-safe-setup ) for more info.
#### `update` (optional)
- Specify to update PHP on the runner to the latest patch version.
- Accepts `true` and `false` .
- By default, it is set to `false` .
- See [force update ](#force-update ) for more info.
2020-02-14 14:15:46 +07:00
See below for more info.
2019-09-18 09:10:09 +07:00
2019-12-31 14:55:59 +07:00
### Basic Setup
2019-12-09 14:10:12 +07:00
2019-12-18 23:14:02 +07:00
> Setup a particular PHP version.
2019-09-08 14:23:33 +07:00
2019-09-06 07:18:51 +07:00
```yaml
steps:
- name: Checkout
2020-01-02 00:06:25 +07:00
uses: actions/checkout@v2
2019-11-22 02:36:58 +07:00
2019-10-19 21:29:48 +07:00
- name: Setup PHP
2020-02-14 14:15:46 +07:00
uses: shivammathur/setup-php@v2
2019-09-06 07:18:51 +07:00
with:
2019-11-30 06:53:14 +07:00
php-version: '7.4'
2020-02-14 14:15:46 +07:00
extensions: mbstring, intl
ini-values: post_max_size=256M, short_open_tag=On
coverage: xdebug
tools: php-cs-fixer, phpunit
2019-09-06 07:18:51 +07:00
```
2019-12-18 23:14:02 +07:00
### Matrix Setup
2019-12-09 14:10:12 +07:00
2019-12-18 23:14:02 +07:00
> Setup multiple PHP versions on multiple operating systems.
2019-09-08 14:23:33 +07:00
2019-09-06 07:18:51 +07:00
```yaml
jobs:
2019-12-31 14:55:59 +07:00
run:
2019-09-06 07:18:51 +07:00
runs-on: ${{ matrix.operating-system }}
2019-12-31 14:55:59 +07:00
strategy:
2019-09-06 07:18:51 +07:00
matrix:
2020-01-21 09:55:14 +07:00
operating-system: [ubuntu-latest, windows-latest, macos-latest]
2019-11-30 06:53:14 +07:00
php-versions: ['5.6', '7.0', '7.1', '7.2', '7.3', '7.4']
2019-09-06 08:52:50 +07:00
name: PHP ${{ matrix.php-versions }} Test on ${{ matrix.operating-system }}
2019-09-06 07:18:51 +07:00
steps:
- name: Checkout
2020-01-02 00:06:25 +07:00
uses: actions/checkout@v2
2019-11-22 02:36:58 +07:00
2019-10-19 21:29:48 +07:00
- name: Setup PHP
2020-02-14 14:15:46 +07:00
uses: shivammathur/setup-php@v2
2019-09-06 07:18:51 +07:00
with:
2019-11-07 16:32:05 +07:00
php-version: ${{ matrix.php-versions }}
2020-02-14 14:15:46 +07:00
extensions: mbstring, intl
ini-values: post_max_size=256M, short_open_tag=On
coverage: xdebug
tools: php-cs-fixer, phpunit
2019-09-06 07:18:51 +07:00
```
2020-06-09 08:34:47 +07:00
### Nightly Build Setup
2019-12-18 23:14:02 +07:00
2020-10-19 18:36:48 +07:00
> Setup a nightly build of `PHP 8.0` or `PHP 8.1`.
2019-12-18 23:14:02 +07:00
2020-10-19 18:36:48 +07:00
- These versions are currently in development.
- `PECL` is installed by default with these versions on `ubuntu` and `macOS` .
- Some user space extensions might not support these versions currently.
- Refer to this [RFC ](https://wiki.php.net/rfc/jit "PHP JIT RFC configuration" ) for configuring `PHP JIT` on these versions.
- Refer to this [list of RFCs ](https://wiki.php.net/rfc#php_80 "List of RFCs implemented in PHP8" ) for features implemented in `PHP 8.0` .
2019-12-18 23:14:02 +07:00
```yaml
steps:
- name: Checkout
2020-01-02 00:06:25 +07:00
uses: actions/checkout@v2
2019-12-18 23:14:02 +07:00
2020-08-19 08:19:39 +07:00
- name: Setup nightly PHP
2020-02-14 14:15:46 +07:00
uses: shivammathur/setup-php@v2
2019-12-18 23:14:02 +07:00
with:
2020-10-19 18:36:48 +07:00
php-version: '8.1'
2020-02-14 14:15:46 +07:00
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 23:14:02 +07:00
```
2020-05-08 07:03:25 +07:00
### Self Hosted Setup
> Setup PHP on a self-hosted runner.
2020-10-19 18:36:48 +07:00
- To set up a dockerized self-hosted runner, refer to this [guide ](https://github.com/shivammathur/setup-php/wiki/Dockerized-self-hosted-runner-on-Ubuntu ) to set up in an `Ubuntu` container and refer to this [guide ](https://github.com/shivammathur/setup-php/wiki/Dockerized-self-hosted-runner-on-Windows ) to set up in a `Windows` container.
- To set up the runner directly on the host OS or in a virtual machine, 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.
2020-06-19 16:32:23 +07:00
- If your workflow uses [services ](https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idservices "GitHub Actions Services" ), then setup the runner on a Linux host or in a Linux virtual machine. GitHub Actions does not support nested virtualization on Linux, so services will not work in a dockerized container.
2020-05-08 07:03:25 +07:00
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.
```
2020-08-13 01:21:33 +07:00
**Notes**
2020-10-19 18:36:48 +07:00
- Do not setup multiple self-hosted runners on a single server instance as parallel workflow will conflict with each other.
2020-08-13 01:21:33 +07:00
- Do not setup self-hosted runners on the side on your development environment or your production server.
2020-05-08 07:03:25 +07:00
### 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
2020-06-09 08:34:47 +07:00
# For runs-on: ubuntu-20.04
act -P ubuntu-20.04=shivammathur/node:focal
2020-05-08 07:03:25 +07:00
# For runs-on: ubuntu-18.04
2020-05-21 22:11:55 +07:00
act -P ubuntu-18.04=shivammathur/node:bionic
2020-05-08 07:03:25 +07:00
# For runs-on: ubuntu-16.04
act -P ubuntu-16.04=shivammathur/node:xenial
```
2020-01-21 09:31:10 +07:00
### Thread Safe Setup
2020-10-19 18:36:48 +07:00
> Setup `TS` or `NTS` PHP on `Windows`.
2020-05-08 07:03:25 +07:00
2020-01-21 09:31:10 +07:00
- `NTS` versions are setup by default.
2020-05-08 07:03:25 +07:00
- On `Ubuntu` and `macOS` only `NTS` versions are supported.
- On `Windows` both `TS` and `NTS` versions are supported.
2020-01-21 09:31:10 +07:00
```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 14:15:46 +07:00
uses: shivammathur/setup-php@v2
2020-01-21 09:31:10 +07:00
with:
php-version: '7.4'
env:
2020-05-08 07:03:25 +07:00
phpts: ts # specify ts or nts
2020-01-21 09:31:10 +07:00
```
2020-02-14 14:15:46 +07:00
### Force Update
2020-10-19 18:36:48 +07:00
> Update to the latest patch of PHP versions.
2020-05-08 07:03:25 +07:00
2020-02-29 22:38:26 +07:00
- Pre-installed PHP versions on the GitHub Actions runner are not updated to their latest patch release by default.
2020-02-14 14:15:46 +07:00
- You can specify the `update` environment variable to `true` to force update to the latest release.
```yaml
2020-08-19 08:19:39 +07:00
- name: Setup PHP with latest versions
2020-02-14 14:15:46 +07:00
uses: shivammathur/setup-php@v2
with:
php-version: '7.4'
env:
update: true # specify true or false
```
### Verbose Setup
2020-05-08 07:03:25 +07:00
> Debug your workflow
2020-02-29 22:38:26 +07:00
To debug any issues, you can use the `verbose` tag instead of `v2` .
2020-02-14 14:15:46 +07:00
```yaml
2020-08-19 08:19:39 +07:00
- name: Setup PHP with logs
2020-02-14 14:15:46 +07:00
uses: shivammathur/setup-php@verbose
with:
php-version: '7.4'
```
### Cache Extensions
2020-10-19 18:36:48 +07:00
You can cache PHP extensions using `shivammathur/cache-extensions` and `action/cache` GitHub Actions. Extensions which take very long to set up when cached are available in the next workflow run and are enabled directly. This reduces the workflow execution time.
2020-08-10 15:13:18 +07:00
Refer to [`shivammathur/cache-extensions` ](https://github.com/shivammathur/cache-extensions "GitHub Action to cache php extensions" ) for details.
2020-02-29 22:38:26 +07:00
2020-02-14 14:15:46 +07:00
### Cache Composer Dependencies
2019-11-03 11:41:44 +07:00
2020-10-19 18:36:48 +07:00
If your project uses composer, you can persist the 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 06:28:15 +07:00
2019-11-03 11:41:44 +07:00
```yaml
2020-02-21 15:09:04 +07:00
- name: Get composer cache directory
2020-06-19 05:56:37 +07:00
id: composercache
2019-11-05 06:28:15 +07:00
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
2019-11-08 17:26:57 +07:00
2019-12-31 14:55:59 +07:00
- name: Cache dependencies
2020-05-30 12:57:44 +07:00
uses: actions/cache@v2
2019-11-05 06:28:15 +07:00
with:
2020-06-19 05:56:37 +07:00
path: ${{ steps.composercache.outputs.dir }}
2019-11-05 06:28:15 +07:00
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
restore-keys: ${{ runner.os }}-composer-
2019-11-08 17:26:57 +07:00
2020-02-21 15:09:04 +07:00
- name: Install dependencies
2019-11-05 06:28:15 +07:00
run: composer install --prefer-dist
2019-11-03 11:41:44 +07:00
```
2020-02-29 22:38:26 +07:00
**Notes**
2020-10-19 18:36:48 +07:00
- Please do not cache `vendor` directory using `action/cache` as that will have side effects.
2020-02-29 22:38:26 +07:00
- 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 01:53:51 +07:00
2019-12-31 14:55:59 +07:00
```yaml
2020-02-21 15:09:04 +07:00
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
```
### Cache Node.js Dependencies
2020-10-19 18:36:48 +07:00
If your project has node.js dependencies, you can persist NPM or yarn cache directory. The cached files are available across check-runs and will reduce the workflow execution time.
2020-02-21 15:09:04 +07:00
```yaml
- name: Get node.js cache directory
2020-06-19 05:56:37 +07:00
id: nodecache
2020-02-21 15:09:04 +07:00
run: echo "::set-output name=dir::$(npm config get cache)" # Use $(yarn cache dir) for yarn
- name: Cache dependencies
2020-05-30 12:57:44 +07:00
uses: actions/cache@v2
2020-02-21 15:09:04 +07:00
with:
2020-06-19 05:56:37 +07:00
path: ${{ steps.nodecache.outputs.dir }}
2020-02-21 15:09:04 +07:00
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} # Use '**/yarn.lock' for yarn
restore-keys: ${{ runner.os }}-node-
```
2019-12-28 01:53:51 +07:00
2020-10-19 18:36:48 +07:00
**Note:** Please do not cache `node_modules` directory as that will have side effects.
2020-02-29 22:38:26 +07:00
2020-04-10 00:48:37 +07:00
### Composer GitHub OAuth
2020-08-02 20:35:44 +07:00
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 an `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.
2020-04-10 00:48:37 +07:00
```yaml
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '7.4'
env:
COMPOSER_TOKEN: ${{ secrets.GITHUB_TOKEN }}
```
2019-12-19 04:08:12 +07:00
### Problem Matchers
2020-10-19 18:36:48 +07:00
Problem matchers are `json` configurations which identify errors and warnings in your logs and surface them prominently in the GitHub Actions UI by highlighting them and creating code annotations.
2020-09-27 06:29:03 +07:00
2020-02-14 14:15:46 +07:00
#### PHP
2020-09-27 06:29:03 +07:00
Setup problem matchers for your `PHP` output by adding this step after the `setup-php` step.
2020-02-14 14:15:46 +07:00
```yaml
2020-02-21 15:09:04 +07:00
- name: Setup problem matchers for PHP
2020-02-14 14:15:46 +07:00
run: echo "::add-matcher::${{ runner.tool_cache }}/php.json"
```
2020-02-03 04:56:06 +07:00
#### PHPUnit
2020-09-27 06:29:03 +07:00
Setup problem matchers for your `PHPUnit` output by adding this step after the `setup-php` step.
2019-12-19 04:08:12 +07:00
```yaml
2020-02-21 15:09:04 +07:00
- name: Setup problem matchers for PHPUnit
2019-12-19 04:08:12 +07:00
run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json"
```
2020-09-27 06:29:03 +07:00
#### PHPStan
2020-02-03 04:56:06 +07:00
2020-10-19 18:36:48 +07:00
PHPStan supports error reporting in GitHub Actions, so it does not require problem matchers.
2020-02-03 04:56:06 +07:00
```yaml
- name: Setup PHP
2020-02-14 14:15:46 +07:00
uses: shivammathur/setup-php@v2
2020-02-03 04:56:06 +07:00
with:
php-version: '7.4'
2020-09-17 01:09:53 +07:00
tools: phpstan
2020-02-03 04:56:06 +07:00
2020-09-27 06:29:03 +07:00
- name: Run PHPStan
2020-09-17 01:09:53 +07:00
run: phpstan analyse src
2020-02-03 04:56:06 +07:00
```
2020-09-27 06:29:03 +07:00
#### Psalm
Psalm supports error reporting in GitHub Actions with an output format `github` .
```yaml
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '7.4'
tools: psalm
- name: Run Psalm
run: psalm --output-format=github
```
#### Tools with checkstyle support
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 `phpcs`.
```yaml
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '7.4'
tools: cs2pr, phpcs
- name: Run phpcs
run: phpcs -q --report=checkstyle src | cs2pr
```
2019-10-03 17:43:34 +07:00
### Examples
2020-07-04 01:45:28 +07:00
Examples of using `setup-php` with various PHP Frameworks and Packages.
2019-10-03 17:43:34 +07:00
2019-10-10 19:17:17 +07:00
|Framework/Package|Runs on|Workflow|
|--- |--- |--- |
2020-02-28 17:12:17 +07:00
|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 14:24:37 +07:00
|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 19:17:17 +07:00
|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 06:57:58 +07:00
|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 11:18:29 +07:00
|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 07:30:34 +07:00
|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 19:17:17 +07:00
|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 07:30:34 +07:00
|Symfony without services|`macOS`, `ubuntu` and `windows` |[symfony.yml](./examples/symfony.yml "GitHub Action for Symfony without services")|
2019-10-10 19:17:17 +07:00
|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 17:43:34 +07:00
2020-07-04 01:45:28 +07:00
## :bookmark: Versioning
2020-10-19 18:36:48 +07:00
- Use the `v2` tag as `setup-php` version. It is a rolling tag and is synced with the latest minor and patch releases. With `v2` you automatically get the bug fixes, new features and support for latest PHP releases. For debugging any issues `verbose` tag can be used temporarily. It outputs all the logs and is also synced with the latest releases.
2020-07-04 01:45:28 +07:00
- Semantic release versions can also be used. It is recommended to [use dependabot ](https://docs.github.com/en/github/administering-a-repository/keeping-your-actions-up-to-date-with-github-dependabot "Setup Dependabot with GitHub Actions" ) with semantic versioning to keep the actions in your workflows up to date.
- Commit SHA can also be used, but are not recommended. They have to be updated with every release manually, without which you will not get any bug fixes or new features.
2020-10-19 18:36:48 +07:00
- It is highly discouraged to use the `master` branch as version, it might break your workflow after major releases as they have breaking changes.
- If you are using the `v1` tag or a `1.x.y` version, you should [switch to v2 ](https://github.com/shivammathur/setup-php/wiki/Switch-to-v2 "Guide for switching from setup-php v1 to v2" ) as `v1` only gets critical bug fixes. Maintenance support for `v1` will be dropped with the last `PHP 8.0` release.
2020-07-04 01:45:28 +07:00
2019-09-24 16:08:22 +07:00
## :scroll: License
2020-10-19 18:36:48 +07:00
- The scripts and documentation in this project are under the [MIT License ](LICENSE "License for shivammathur/setup-php" ).
2020-08-02 20:35:44 +07:00
- This project has multiple [dependencies ](#package-dependencies "Dependencies for this PHP Action" ). Their licenses can be found in their respective repositories.
2020-07-20 13:20:58 +07:00
- The logo for `setup-php` is a derivative work of [php.net logo ](https://www.php.net/download-logos.php ) and is licensed under the [CC BY-SA 4.0 License ](https://creativecommons.org/licenses/by-sa/4.0/ "Creative Commons License" ).
2019-09-24 16:08:22 +07:00
## :+1: Contributions
2019-09-06 07:18:51 +07:00
2020-07-04 01:45:28 +07:00
> Contributions are welcome!
- See [Contributor's Guide ](.github/CONTRIBUTING.md "shivammathur/setup-php contribution guide" ) before you start.
- 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 07:18:51 +07:00
2020-08-19 08:19:39 +07:00
*Join the list of setup-php contributors*
< p align = "center" >
< a href = "https://github.com/shivammathur/setup-php/graphs/contributors" >
2020-10-19 18:36:48 +07:00
< img src = "https://opencollective.com/setup-php/contributors.svg?width=1024&button=false" alt = "setup-php contributors" width = "100%" >
2020-08-19 08:19:39 +07:00
< / a >
< / p >
2020-02-14 14:15:46 +07:00
## :sparkling_heart: Support This Project
2019-09-08 14:23:33 +07:00
2020-08-13 01:21:33 +07:00
- Please star the project and share it. If you blog, please share your experience of using this action.
2020-08-19 08:19:39 +07:00
- Please consider supporting our work by sponsoring using [Open Collective ](https://opencollective.com/setup-php ), [Paypal ](https://www.paypal.me/shivammathur "Shivam Mathur PayPal" ) or [Patreon ](https://www.patreon.com/shivammathur "Shivam Mathur Patreon" ).
2020-08-13 01:21:33 +07:00
- If you use `setup-php` at your company, please [reach out ](mailto:contact@setup-php.com ) to sponsor the project.
*Huge thanks to the following companies for supporting `setup-php` *
2019-11-03 11:41:44 +07:00
2020-08-19 08:19:39 +07:00
< p >
2020-08-10 15:13:18 +07:00
< a href = "https://www.jetbrains.com/?from=setup-php" >
2020-08-19 08:19:39 +07:00
< img src = "https://shivammathur.com/jetbrains.svg" alt = "JetBrains" width = "106" height = "60" >
< / a >
< a href = "https://blackfire.io/?utm_source=setup-php" >
< img src = "https://shivammathur.com/blackfire.svg" alt = "Blackfire" width = "212" height = "60" >
< / a >
< a href = "https://tidelift.com/subscription/pkg/npm-setup-php" >
< img src = "https://shivammathur.com/tidelift.png" alt = "Tidelift" width = "70" height = "60" >
2020-08-10 15:13:18 +07:00
< / a >
< / p >
2020-07-04 01:45:28 +07:00
## :package: Dependencies
2019-09-08 14:23:33 +07:00
2020-02-14 14:15:46 +07:00
- [Node.js dependencies ](https://github.com/shivammathur/setup-php/network/dependencies "Node.js dependencies" )
2020-10-30 12:58:54 +07:00
- [aaronparker/VcRedist ](https://github.com/aaronparker/VcRedist "VcRedist PowerShell package" )
2020-02-14 14:15:46 +07:00
- [gplessis/dotdeb-php ](https://github.com/gplessis/dotdeb-php "Packaging for end of life PHP versions" )
2019-12-09 09:39:03 +07:00
- [mlocati/powershell-phpmanager ](https://github.com/mlocati/powershell-phpmanager "Package to handle PHP on windows" )
2020-02-14 14:15:46 +07:00
- [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" )
2020-08-10 15:13:18 +07:00
- [shivammathur/composer-cache ](https://github.com/shivammathur/composer-cache "Cache composer releases" )
2020-07-04 01:45:28 +07:00
- [shivammathur/homebrew-extensions ](https://github.com/shivammathur/homebrew-extensions "Tap for PHP extensions on MacOS" )
2020-08-10 15:13:18 +07:00
- [shivammathur/homebrew-php ](https://github.com/shivammathur/homebrew-php "Tap for PHP builds on MacOS" )
2020-08-19 08:19:39 +07:00
- [shivammathur/icu-intl ](https://github.com/shivammathur/icu-intl "icu4c and php-intl builds" )
2020-08-10 15:13:18 +07:00
- [shivammathur/php-builder ](https://github.com/shivammathur/php-builder "Nightly PHP package for Ubuntu" )
- [shivammathur/php-builder-windows ](https://github.com/shivammathur/php-builder-windows "Nightly PHP package for Windows" )
- [shivammathur/php-ubuntu ](https://github.com/shivammathur/php-ubuntu "Cache stable PHP Packages for Ubuntu" )
2020-02-29 22:38:26 +07:00
- [shivammathur/php5-darwin ](https://github.com/shivammathur/php5-darwin "Scripts to setup PHP5 versions on darwin" )
2020-02-29 02:40:18 +07:00
- [shivammathur/php5-ubuntu ](https://github.com/shivammathur/php5-ubuntu "Scripts to setup PHP5 versions on ubuntu" )
2019-09-08 14:23:33 +07:00
2019-09-24 16:08:22 +07:00
## :bookmark_tabs: Further Reading
2019-09-06 07:18:51 +07:00
2019-10-10 19:17:17 +07:00
- [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" )
2020-08-13 01:21:33 +07:00
- [Other Awesome Actions ](https://github.com/sdras/awesome-actions "List of Awesome GitHub Actions" )