mirror of
https://github.com/shivammathur/setup-php.git
synced 2025-07-06 23:23:17 +07:00
Compare commits
90 Commits
Author | SHA1 | Date | |
---|---|---|---|
8e2ac35f63 | |||
a1e6789a94 | |||
9114b007ae | |||
cb0c293f02 | |||
387ec95b46 | |||
3514d30f93 | |||
e186e47261 | |||
e51e662ef0 | |||
5afd8a1842 | |||
1a42045d48 | |||
b3a12ce01e | |||
04b2ed5b3e | |||
189e8e6ec0 | |||
3407e6019c | |||
f20012026f | |||
7743b7976f | |||
b7b50ce742 | |||
aa9b80f158 | |||
53adb47562 | |||
f7d3c00320 | |||
b359d922e7 | |||
01aa440f0b | |||
51f83e019c | |||
173ca15c9b | |||
4704ad638a | |||
1a18b2267f | |||
e9704839e9 | |||
5178fac634 | |||
388883d4bf | |||
cae6d06e69 | |||
89f4f7e8be | |||
d2efbcd126 | |||
98e3af0bff | |||
e8836c6d46 | |||
9068f2e46f | |||
5bbbd3fdf6 | |||
7622357ff1 | |||
6652a09da6 | |||
48fb8e1194 | |||
bbc6e9069b | |||
37dcd1cf8c | |||
12b1efad4b | |||
0575a32108 | |||
71b0e09dbc | |||
edff21f0a6 | |||
22035eb75b | |||
b556cf7292 | |||
f99a9d4624 | |||
a49dfe8457 | |||
7ff9ac44b4 | |||
7aff4d7a22 | |||
633321754d | |||
40a4cb064f | |||
45410ae8f0 | |||
56ad5977ba | |||
6353d20df2 | |||
e04e1d97f0 | |||
52685a348b | |||
44d81f9830 | |||
401bdecb71 | |||
aa82ffc68f | |||
7e03c76ef2 | |||
16011a795d | |||
66f24470dc | |||
e57ea715eb | |||
e8ba27f3d2 | |||
945c34c175 | |||
c8c64c6cf9 | |||
0d3f92f127 | |||
4979d5b484 | |||
0d9a1ba5ae | |||
3ede7656cb | |||
f3cdc074ce | |||
109db648f1 | |||
3ccc00eece | |||
0f688a10cb | |||
3312ea6101 | |||
ce49f82dd8 | |||
cf5cd90b4c | |||
cdb037c2a4 | |||
261f13a7c5 | |||
9eaa66d89b | |||
da9dfe4a71 | |||
a863ab6d3d | |||
050cb8061b | |||
3fda17f3fa | |||
1a2cb4f872 | |||
4969814b69 | |||
07f2ea7d02 | |||
a1c17b4b18 |
5
.github/workflows/php.yml
vendored
5
.github/workflows/php.yml
vendored
@ -28,9 +28,9 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
operating-system: [ubuntu-22.04, ubuntu-20.04, ubuntu-18.04, windows-2019, macos-latest]
|
||||
php-versions: ['5.3', '5.4', '5.5', '5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1', '8.2']
|
||||
php-versions: ['5.3', '5.4', '5.5', '5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3']
|
||||
env:
|
||||
extensions: xml, opcache, xdebug, pcov
|
||||
extensions: xml, opcache, xdebug, pcov, gd
|
||||
key: cache-v5
|
||||
steps:
|
||||
- name: Checkout
|
||||
@ -70,6 +70,7 @@ jobs:
|
||||
- name: Testing Extensions
|
||||
run: |
|
||||
php -m
|
||||
php -r "if(! extension_loaded('gd')) {throw new Exception('gd not found');}"
|
||||
php -r "if(! extension_loaded('xml')) {throw new Exception('xml not found');}"
|
||||
php -r "if(! extension_loaded('Xdebug')) {throw new Exception('Xdebug not found');}"
|
||||
php -r "if(phpversion()>=7.1 && ! extension_loaded('pcov')) {throw new Exception('PCOV not found');}"
|
||||
|
206
README.md
206
README.md
@ -10,7 +10,7 @@
|
||||
<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://img.shields.io/codecov/c/github/shivammathur/setup-php?logo=codecov"></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?logo=open%20source%20initiative&logoColor=white&labelColor=555555"></a>
|
||||
<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.2-777bb3.svg?logo=php&logoColor=white&labelColor=555555"></a>
|
||||
<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.3-777bb3.svg?logo=php&logoColor=white&labelColor=555555"></a>
|
||||
</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>
|
||||
@ -42,6 +42,7 @@ Setup PHP with required extensions, php.ini configuration, code-coverage support
|
||||
- [Basic Setup](#basic-setup)
|
||||
- [Matrix Setup](#matrix-setup)
|
||||
- [Nightly Build Setup](#nightly-build-setup)
|
||||
- [Debug Build Setup](#debug-build-setup)
|
||||
- [Thread Safe Setup](#thread-safe-setup)
|
||||
- [Force Update Setup](#force-update-setup)
|
||||
- [Verbose Setup](#verbose-setup)
|
||||
@ -51,7 +52,9 @@ Setup PHP with required extensions, php.ini configuration, code-coverage support
|
||||
- [JIT Configuration](#jit-configuration)
|
||||
- [Cache Extensions](#cache-extensions)
|
||||
- [Cache Composer Dependencies](#cache-composer-dependencies)
|
||||
- [Composer GitHub OAuth](#composer-github-oauth)
|
||||
- [GitHub Composer Authentication](#github-composer-authentication)
|
||||
- [Private Packagist Authentication](#private-packagist-authentication)
|
||||
- [Manual Composer Authentication](#manual-composer-authentication)
|
||||
- [Inline PHP Scripts](#inline-php-scripts)
|
||||
- [Problem Matchers](#problem-matchers)
|
||||
- [Examples](#examples)
|
||||
@ -69,15 +72,14 @@ Both `GitHub-hosted` and `self-hosted` runners are supported by `setup-php` on t
|
||||
### GitHub-Hosted Runners
|
||||
|
||||
| Virtual environment | YAML workflow label | Pre-installed PHP |
|
||||
|----------------------|------------------------------------|------------------------|
|
||||
| Ubuntu 22.04 | `ubuntu-22.04` | `PHP 8.1` |
|
||||
| Ubuntu 20.04 | `ubuntu-latest` or `ubuntu-20.04` | `PHP 7.4` to `PHP 8.1` |
|
||||
| Ubuntu 18.04 | `ubuntu-18.04` | `PHP 7.2` to `PHP 8.1` |
|
||||
| Windows Server 2022 | `windows-latest` or `windows-2022` | `PHP 8.1` |
|
||||
| Windows Server 2019 | `windows-2019` | `PHP 8.1` |
|
||||
| macOS Monterey 12.x | `macos-12` | `PHP 8.1` |
|
||||
| macOS Big Sur 11.x | `macos-latest` or `macos-11` | `PHP 8.1` |
|
||||
| macOS Catalina 10.15 | `macos-10.15` | `PHP 8.1` |
|
||||
|---------------------|------------------------------------|------------------------|
|
||||
| Ubuntu 22.04 | `ubuntu-latest` or `ubuntu-22.04` | `PHP 8.1` |
|
||||
| Ubuntu 20.04 | `ubuntu-20.04` | `PHP 7.4` to `PHP 8.2` |
|
||||
| Ubuntu 18.04 | `ubuntu-18.04` | `PHP 7.2` to `PHP 8.2` |
|
||||
| Windows Server 2022 | `windows-latest` or `windows-2022` | `PHP 8.2` |
|
||||
| Windows Server 2019 | `windows-2019` | `PHP 8.2` |
|
||||
| macOS Monterey 12.x | `macos-12` | `PHP 8.2` |
|
||||
| macOS Big Sur 11.x | `macos-latest` or `macos-11` | `PHP 8.2` |
|
||||
|
||||
### Self-Hosted Runners
|
||||
|
||||
@ -90,9 +92,9 @@ Both `GitHub-hosted` and `self-hosted` runners are supported by `setup-php` on t
|
||||
| Debian 10 | `self-hosted` or `Linux` |
|
||||
| Windows 7 and newer | `self-hosted` or `Windows` |
|
||||
| Windows Server 2012 R2 and newer | `self-hosted` or `Windows` |
|
||||
| macOS Ventura 13.x x86_64/arm64 | `self-hosted` or `macOS` |
|
||||
| macOS Monterey 12.x x86_64/arm64 | `self-hosted` or `macOS` |
|
||||
| macOS Big Sur 11.x x86_64/arm64 | `self-hosted` or `macOS` |
|
||||
| macOS Catalina 10.15 | `self-hosted` or `macOS` |
|
||||
|
||||
- Refer to the [self-hosted setup](#self-hosted-setup) to use the action on self-hosted runners.
|
||||
- Operating systems based on the above Ubuntu and Debian versions are also supported on best effort basis.
|
||||
@ -100,10 +102,10 @@ Both `GitHub-hosted` and `self-hosted` runners are supported by `setup-php` on t
|
||||
|
||||
## :tada: PHP Support
|
||||
|
||||
On all supported OS/Platforms the following PHP versions are supported as per the runner.
|
||||
On all supported OS/Platforms the following PHP versions can be set up as per the runner.
|
||||
|
||||
- PHP 5.3 to PHP 8.2 on GitHub-hosted runners.
|
||||
- PHP 5.6 to PHP 8.2 on self-hosted runners.
|
||||
- PHP 5.3 to PHP 8.3 on GitHub-hosted runners.
|
||||
- PHP 5.6 to PHP 8.3 on self-hosted runners.
|
||||
|
||||
| PHP Version | Stability | Release Support | Runner Support |
|
||||
|-------------|-----------|-----------------------|--------------------------------|
|
||||
@ -115,13 +117,14 @@ On all supported OS/Platforms the following PHP versions are supported as per th
|
||||
| `7.1` | `Stable` | `End of life` | `GitHub-hosted`, `self-hosted` |
|
||||
| `7.2` | `Stable` | `End of life` | `GitHub-hosted`, `self-hosted` |
|
||||
| `7.3` | `Stable` | `End of life` | `GitHub-hosted`, `self-hosted` |
|
||||
| `7.4` | `Stable` | `Security fixes only` | `GitHub-hosted`, `self-hosted` |
|
||||
| `8.0` | `Stable` | `Active` | `GitHub-hosted`, `self-hosted` |
|
||||
| `7.4` | `Stable` | `End of life` | `GitHub-hosted`, `self-hosted` |
|
||||
| `8.0` | `Stable` | `Security fixes only` | `GitHub-hosted`, `self-hosted` |
|
||||
| `8.1` | `Stable` | `Active` | `GitHub-hosted`, `self-hosted` |
|
||||
| `8.2` | `Nightly` | `In development` | `GitHub-hosted`, `self-hosted` |
|
||||
| `8.2` | `Stable` | `Active` | `GitHub-hosted`, `self-hosted` |
|
||||
| `8.3` | `Nightly` | `In development` | `GitHub-hosted`, `self-hosted` |
|
||||
|
||||
**Notes:**
|
||||
- Specifying `8.2` in `php-version` input installs a nightly build of `PHP 8.2.0-dev`. See [nightly build setup](#nightly-build-setup) for more information.
|
||||
- Specifying `8.3` in `php-version` input installs a nightly build of `PHP 8.3.0-dev`. See [nightly build setup](#nightly-build-setup) for more information.
|
||||
- To use JIT on `PHP 8.0` and above, refer to the [JIT configuration](#jit-configuration) section.
|
||||
|
||||
## :heavy_plus_sign: PHP Extension Support
|
||||
@ -134,7 +137,7 @@ PHP extensions can be set up using the `extensions` input. It accepts a `string`
|
||||
- name: Setup PHP with PECL extension
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '8.1'
|
||||
php-version: '8.2'
|
||||
extensions: imagick, swoole
|
||||
```
|
||||
|
||||
@ -162,7 +165,7 @@ PHP extensions can be set up using the `extensions` input. It accepts a `string`
|
||||
- name: Setup PHP with pre-release PECL extension
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '8.1'
|
||||
php-version: '8.2'
|
||||
extensions: xdebug-beta
|
||||
```
|
||||
|
||||
@ -174,7 +177,7 @@ PHP extensions can be set up using the `extensions` input. It accepts a `string`
|
||||
- name: Setup PHP and disable opcache
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '8.1'
|
||||
php-version: '8.2'
|
||||
extensions: :opcache
|
||||
```
|
||||
|
||||
@ -186,7 +189,7 @@ PHP extensions can be set up using the `extensions` input. It accepts a `string`
|
||||
- name: Setup PHP without any shared extensions except mbstring
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '8.1'
|
||||
php-version: '8.2'
|
||||
extensions: none, mbstring
|
||||
```
|
||||
|
||||
@ -196,16 +199,16 @@ PHP extensions can be set up using the `extensions` input. It accepts a `string`
|
||||
- name: Setup PHP with intl
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '8.1'
|
||||
php-version: '8.2'
|
||||
extensions: intl-70.1
|
||||
```
|
||||
|
||||
- Extensions loaded by default after `setup-php` runs can be found on the [wiki](https://github.com/shivammathur/setup-php/wiki).
|
||||
|
||||
- These extensions have custom support:
|
||||
- `cubrid`, `pdo_cubrid` and `gearman` on `Ubuntu`.
|
||||
- `geos` on `Ubuntu` and `macOS`.
|
||||
- `blackfire`, `couchbase`, `ioncube`, `oci8`, `pdo_firebird`, `pdo_oci`, `pecl_http`, `phalcon3` and `phalcon4` on all supported OS.
|
||||
- `cubrid` and `pdo_cubrid` on `Ubuntu`.
|
||||
- `gearman`, `geos` and `event` on `Ubuntu` and `macOS`.
|
||||
- `blackfire`, `couchbase`, `ioncube`, `oci8`, `pdo_firebird`, `pdo_oci`, `pecl_http`, `phalcon3`, `phalcon4` and `phalcon5` on all supported OS.
|
||||
|
||||
- By default, extensions which cannot be added or disabled gracefully leave an error message in the logs, the execution is not interrupted. To change this behaviour you can set `fail-fast` flag to `true`.
|
||||
|
||||
@ -213,7 +216,7 @@ PHP extensions can be set up using the `extensions` input. It accepts a `string`
|
||||
- name: Setup PHP with fail-fast
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '8.1'
|
||||
php-version: '8.2'
|
||||
extensions: oci8
|
||||
env:
|
||||
fail-fast: true
|
||||
@ -223,13 +226,13 @@ PHP extensions can be set up using the `extensions` input. It accepts a `string`
|
||||
|
||||
These tools can be set up globally using the `tools` input. It accepts a string in csv-format.
|
||||
|
||||
[`behat`], [`blackfire`], [`blackfire-player`], [`churn`], [`codeception`], [`composer`], [`composer-normalize`], [`composer-prefetcher`], [`composer-require-checker`], [`composer-unused`], [`cs2pr`], [`deployer`], [`flex`], [`grpc_php_plugin`], [`infection`], [`parallel-lint`], [`pecl`], [`phan`], [`phing`], [`phinx`], [`phive`], [`php-config`], [`php-cs-fixer`], [`phpcbf`], [`phpcpd`], [`phpcs`], [`phpdoc`] or [`phpDocumentor`], [`phpize`], [`phplint`], [`phpmd`], [`phpspec`], [`phpstan`], [`phpunit`], [`phpunit-bridge`], [`phpunit-polyfills`], [`prestissimo`], [`protoc`], [`psalm`], [`symfony`] or [`symfony-cli`], [`vapor`] or [`vapor-cli`], [`wp`] or [`wp-cli`]
|
||||
[`behat`], [`blackfire`], [`blackfire-player`], [`churn`], [`codeception`], [`composer`], [`composer-normalize`], [`composer-prefetcher`], [`composer-require-checker`], [`composer-unused`], [`cs2pr`], [`deployer`], [`flex`], [`grpc_php_plugin`], [`infection`], [`parallel-lint`], [`pecl`], [`phan`], [`phing`], [`phinx`], [`phive`], [`php-config`], [`php-cs-fixer`], [`phpcbf`], [`phpcpd`], [`phpcs`], [`phpdoc`] or [`phpDocumentor`], [`phpize`], [`phplint`], [`phpmd`], [`phpspec`], [`phpstan`], [`phpunit`], [`phpunit-bridge`], [`phpunit-polyfills`], [`pint`], [`prestissimo`], [`protoc`], [`psalm`], [`rector`], [`symfony`] or [`symfony-cli`], [`vapor`] or [`vapor-cli`], [`wp`] or [`wp-cli`]
|
||||
|
||||
```yaml
|
||||
- name: Setup PHP with tools
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '8.1'
|
||||
php-version: '8.2'
|
||||
tools: php-cs-fixer, phpunit
|
||||
```
|
||||
|
||||
@ -239,7 +242,7 @@ These tools can be set up globally using the `tools` input. It accepts a string
|
||||
- name: Setup PHP with tools
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '8.1'
|
||||
php-version: '8.2'
|
||||
tools: vimeo/psalm
|
||||
```
|
||||
|
||||
@ -252,25 +255,26 @@ These tools can be set up globally using the `tools` input. It accepts a string
|
||||
|
||||
When you specify just the major version or the version in `major.minor` format, the latest patch version matching the input will be setup.
|
||||
|
||||
Except for major versions of `composer`, For other tools when you specify only the `major` version or the version in `major.minor` format for any tool you can get rate limited by GitHub's API. To avoid this, it is recommended to provide a [`GitHub` OAuth token](https://github.com/shivammathur/setup-php#composer-github-oauth "Composer GitHub OAuth"). You can do that by setting `COMPOSER_TOKEN` environment variable.
|
||||
Except for major versions of `composer`, For other tools when you specify only the `major` version or the version in `major.minor` format for any tool you can get rate limited by GitHub's API. To avoid this, it is recommended to provide a [`GitHub` OAuth token](https://github.com/shivammathur/setup-php#composer-github-oauth "Composer GitHub OAuth").
|
||||
You can do that by setting `GITHUB_TOKEN` environment variable. The `COMPOSER_TOKEN` environment variable has been deprecated in favor of `GITHUB_TOKEN` and will be removed in the next major version.
|
||||
|
||||
```yaml
|
||||
- name: Setup PHP with tools
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '8.1'
|
||||
php-version: '8.2'
|
||||
tools: php-cs-fixer:3.5, phpunit:9.5
|
||||
env:
|
||||
COMPOSER_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
```
|
||||
|
||||
- The latest stable version of `composer` is set up by default. You can set up the required `composer` version by specifying the major version `v1` or `v2`, or the version in `major.minor` or `semver` format, Additionally for composer `snapshot` and `preview` can also be specified to set up the respective releases.
|
||||
- The latest stable version of `composer` is set up by default. You can set up the required `composer` version by specifying the major version `v1` or `v2`, or the version in `major.minor` or `semver` format. Additionally, for composer `snapshot` and `preview` can also be specified to set up the respective releases.
|
||||
|
||||
```yaml
|
||||
- name: Setup PHP with composer v2
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '8.1'
|
||||
php-version: '8.2'
|
||||
tools: composer:v2
|
||||
```
|
||||
|
||||
@ -280,7 +284,7 @@ These tools can be set up globally using the `tools` input. It accepts a string
|
||||
- name: Setup PHP without composer
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '8.1'
|
||||
php-version: '8.2'
|
||||
tools: none
|
||||
```
|
||||
|
||||
@ -296,7 +300,7 @@ These tools can be set up globally using the `tools` input. It accepts a string
|
||||
- name: Setup PHP with fail-fast
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '8.1'
|
||||
php-version: '8.2'
|
||||
tools: deployer
|
||||
env:
|
||||
fail-fast: true
|
||||
@ -306,6 +310,7 @@ These tools can be set up globally using the `tools` input. It accepts a string
|
||||
- Input `tools` is useful to set up tools which are only used in CI workflows, thus keeping your `composer.json` tidy.
|
||||
- If you do not want to use all your dev-dependencies in workflow, you can run composer with `--no-dev` and install required tools using `tools` input to speed up your workflow.
|
||||
- By default, `COMPOSER_NO_INTERACTION` is set to `1` and `COMPOSER_PROCESS_TIMEOUT` is set to `0`. In effect, this means that Composer commands in your scripts do not need to specify `--no-interaction`.
|
||||
- Also, `COMPOSER_NO_AUDIT` is set to `1`. So if you want to audit your dependencies for security vulnerabilities, it is recommended to add a `composer audit` step before you install them.
|
||||
|
||||
## :signal_strength: Coverage Support
|
||||
|
||||
@ -318,7 +323,7 @@ Runs on all [PHP versions supported](#tada-php-support "List of PHP versions sup
|
||||
- name: Setup PHP with Xdebug
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '8.1'
|
||||
php-version: '8.2'
|
||||
coverage: xdebug
|
||||
```
|
||||
|
||||
@ -346,7 +351,7 @@ Runs on PHP 7.1 and newer PHP versions.
|
||||
- name: Setup PHP with PCOV
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '8.1'
|
||||
php-version: '8.2'
|
||||
ini-values: pcov.directory=api #optional, see above for usage.
|
||||
coverage: pcov
|
||||
```
|
||||
@ -376,7 +381,7 @@ Disable coverage for these reasons:
|
||||
- name: Setup PHP with no coverage driver
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '8.1'
|
||||
php-version: '8.2'
|
||||
coverage: none
|
||||
```
|
||||
|
||||
@ -425,7 +430,7 @@ Disable coverage for these reasons:
|
||||
|
||||
- Specify the tools you want to set up.
|
||||
- Accepts a `string` in csv-format. For example: `phpunit, phpcs`
|
||||
- See [tools Support](#wrench-tools-support) for tools supported.
|
||||
- See [tools support](#wrench-tools-support) for tools supported.
|
||||
|
||||
### Outputs
|
||||
|
||||
@ -440,7 +445,7 @@ On GitHub Actions you can assign the `setup-php` step an `id`, you can use the s
|
||||
id: setup-php
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '8.1'
|
||||
php-version: '8.2'
|
||||
|
||||
- name: Print PHP version
|
||||
run: echo ${{ steps.setup-php.outputs.php-version }}
|
||||
@ -459,7 +464,7 @@ On GitHub Actions you can assign the `setup-php` step an `id`, you can use the s
|
||||
|
||||
#### `phpts` (optional)
|
||||
|
||||
- Specify to set up thread-safe version of PHP on Windows.
|
||||
- Specify to set up a thread-safe build of PHP on Linux and Windows.
|
||||
- Accepts `ts` and `nts`.
|
||||
- By default, it is set to `nts`.
|
||||
- See [thread safe setup](#thread-safe-setup) for more info.
|
||||
@ -482,7 +487,7 @@ steps:
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '8.1'
|
||||
php-version: '8.2'
|
||||
extensions: mbstring, intl
|
||||
ini-values: post_max_size=256M, max_execution_time=180
|
||||
coverage: xdebug
|
||||
@ -500,7 +505,7 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
operating-system: ['ubuntu-latest', 'windows-latest', 'macos-latest']
|
||||
php-versions: ['7.4', '8.0', '8.1']
|
||||
php-versions: ['8.0', '8.1', '8.2']
|
||||
phpunit-versions: ['latest']
|
||||
include:
|
||||
- operating-system: 'ubuntu-latest'
|
||||
@ -519,7 +524,7 @@ jobs:
|
||||
|
||||
### Nightly Build Setup
|
||||
|
||||
> Set up a nightly build of `PHP 8.2`.
|
||||
> Set up a nightly build of `PHP 8.3`.
|
||||
|
||||
- This PHP version is currently in active development and might contain bugs and breaking changes.
|
||||
- Some user space extensions might not support this version currently.
|
||||
@ -529,31 +534,48 @@ steps:
|
||||
- name: Setup nightly PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '8.2'
|
||||
php-version: '8.3'
|
||||
extensions: mbstring
|
||||
ini-values: post_max_size=256M, max_execution_time=180
|
||||
coverage: xdebug
|
||||
tools: php-cs-fixer, phpunit
|
||||
```
|
||||
|
||||
### Debug Build Setup
|
||||
|
||||
> Set up a PHP build with debugging symbols.
|
||||
|
||||
- Production release builds of PHP without debugging symbols are set up by default.
|
||||
- You can use the `debug` environment variable to set up a build with debugging symbols for PHP 5.6 and above.
|
||||
|
||||
```yaml
|
||||
steps:
|
||||
- name: Setup PHP with debugging symbols
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '8.2'
|
||||
env:
|
||||
debug: true # specify true or false
|
||||
```
|
||||
|
||||
### Thread Safe Setup
|
||||
|
||||
> Set up `TS` or `NTS` PHP on `Windows`.
|
||||
> Set up `TS` or `NTS` PHP on `Linux` and `Windows`.
|
||||
|
||||
- `NTS` versions are set up by default.
|
||||
- On `Ubuntu` and `macOS` only `NTS` versions are supported.
|
||||
- On `Windows` both `TS` and `NTS` versions are supported.
|
||||
- On `macOS` only `NTS` versions are supported currently.
|
||||
- On `Linux` and `Windows` both `TS` and `NTS` versions are supported.
|
||||
|
||||
```yaml
|
||||
jobs:
|
||||
run:
|
||||
runs-on: windows-latest
|
||||
name: Setup PHP TS on Windows
|
||||
runs-on: [ubuntu-latest, windows-latest]
|
||||
name: Setup PHP TS
|
||||
steps:
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '8.1'
|
||||
php-version: '8.2'
|
||||
env:
|
||||
phpts: ts # specify ts or nts
|
||||
```
|
||||
@ -563,13 +585,14 @@ jobs:
|
||||
> Update to the latest patch of PHP versions.
|
||||
|
||||
- Pre-installed PHP versions are not updated to their latest patch release by default.
|
||||
- If `ppa:ondrej/php` is missing on the Ubuntu GitHub environment, the PHP version is updated to the latest patch release.
|
||||
- You can specify the `update` environment variable to `true` for updating to the latest release.
|
||||
|
||||
```yaml
|
||||
- name: Setup PHP with latest versions
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '8.1'
|
||||
php-version: '8.2'
|
||||
env:
|
||||
update: true # specify true or false
|
||||
```
|
||||
@ -584,14 +607,14 @@ To debug any issues, you can use the `verbose` tag instead of `v2`.
|
||||
- name: Setup PHP with logs
|
||||
uses: shivammathur/setup-php@verbose
|
||||
with:
|
||||
php-version: '8.1'
|
||||
php-version: '8.2'
|
||||
```
|
||||
|
||||
### Multi-Arch Setup
|
||||
|
||||
> Set up PHP on multiple architecture on Ubuntu GitHub Runners.
|
||||
|
||||
- `PHP 5.6` to `PHP 8.1` are supported by `setup-php` on multiple architecture on `Ubuntu`.
|
||||
- `PHP 5.6` to `PHP 8.2` are supported by `setup-php` on multiple architecture on `Ubuntu`.
|
||||
- For this, you can use `shivammathur/node` images as containers. These have compatible `Nodejs` installed for `setup-php`.
|
||||
- Currently, for `ARM` based setup, you will need [self-hosted runners](#self-hosted-setup).
|
||||
|
||||
@ -607,7 +630,7 @@ jobs:
|
||||
- name: Install PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '8.1'
|
||||
php-version: '8.2'
|
||||
```
|
||||
|
||||
### Self Hosted Setup
|
||||
@ -629,7 +652,7 @@ jobs:
|
||||
runs-on: self-hosted
|
||||
strategy:
|
||||
matrix:
|
||||
php-versions: ['5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0']
|
||||
php-versions: ['5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1', '8.2']
|
||||
name: PHP ${{ matrix.php-versions }}
|
||||
steps:
|
||||
- name: Setup PHP
|
||||
@ -657,7 +680,7 @@ jobs:
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '8.1'
|
||||
php-version: '8.2'
|
||||
```
|
||||
|
||||
Run the workflow locally with `act` using [`shivammathur/node`](https://github.com/shivammathur/node-docker "Docker image to run setup-php") docker images.
|
||||
@ -693,7 +716,7 @@ For example to enable JIT in `tracing` mode with buffer size of `64 MB`.
|
||||
- name: Setup PHP with JIT in tracing mode
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '8.1'
|
||||
php-version: '8.2'
|
||||
coverage: none
|
||||
ini-values: opcache.enable_cli=1, opcache.jit=tracing, opcache.jit_buffer_size=64M
|
||||
```
|
||||
@ -710,7 +733,7 @@ If your project uses composer, you can persist the composer's internal cache dir
|
||||
```yaml
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache dependencies
|
||||
uses: actions/cache@v2
|
||||
@ -736,17 +759,54 @@ key: ${{ runner.os }}-composer-${{ matrix.prefer }}-${{ hashFiles('**/composer.l
|
||||
restore-keys: ${{ runner.os }}-composer-${{ matrix.prefer }}-
|
||||
```
|
||||
|
||||
### Composer GitHub OAuth
|
||||
### GitHub Composer Authentication
|
||||
|
||||
If you have a number of workflows which set up multiple tools or have many composer dependencies, you might hit the GitHub's rate limit for composer. Also, if you specify only the major version or the version in `major.minor` format, you can hit the rate limit. To avoid this you can specify an `OAuth` token 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.
|
||||
If you have a number of workflows which set up multiple tools or have many composer dependencies, you might hit the GitHub's rate limit for composer. Also, if you specify only the major version or the version in `major.minor` format, you can hit the rate limit. To avoid this you can specify an `OAuth` token by setting `GITHUB_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.
|
||||
|
||||
The `COMPOSER_TOKEN` environment variable has been deprecated in favor of `GITHUB_TOKEN` and will be removed in the next major version.
|
||||
|
||||
```yaml
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '8.1'
|
||||
php-version: '8.2'
|
||||
env:
|
||||
COMPOSER_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
```
|
||||
|
||||
### Private Packagist Authentication
|
||||
|
||||
If you use Private Packagist for your private composer dependencies, you can set the `PACKAGIST_TOKEN` environment variable to authenticate.
|
||||
|
||||
```yaml
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '8.2'
|
||||
env:
|
||||
PACKAGIST_TOKEN: ${{ secrets.PACKAGIST_TOKEN }}
|
||||
```
|
||||
|
||||
### Manual Composer Authentication
|
||||
|
||||
In addition to GitHub or Private Packagist, if you want to authenticate private repositories hosted elsewhere, you can set the `COMPOSER_AUTH_JSON` environment variable with the authentication methods and the credentials in json format.
|
||||
Please refer to the authentication section in [`composer documentation`](https://getcomposer.org/doc/articles/authentication-for-private-packages.md "composer documentation") for more details.
|
||||
|
||||
```yaml
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '8.2'
|
||||
env:
|
||||
COMPOSER_AUTH_JSON: |
|
||||
{
|
||||
"http-basic": {
|
||||
"example.org": {
|
||||
"username": "${{ secrets.EXAMPLE_ORG_USERNAME }}",
|
||||
"password": "${{ secrets.EXAMPLE_ORG_PASSWORD }}"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Inline PHP Scripts
|
||||
@ -759,7 +819,7 @@ Put the code in the run property of a step and specify the shell as `php {0}`.
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '8.1'
|
||||
php-version: '8.2'
|
||||
|
||||
- name: Run PHP code
|
||||
shell: php {0}
|
||||
@ -799,7 +859,7 @@ PHPStan supports error reporting in GitHub Actions, so it does not require probl
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '8.1'
|
||||
php-version: '8.2'
|
||||
tools: phpstan
|
||||
|
||||
- name: Run PHPStan
|
||||
@ -814,7 +874,7 @@ Psalm supports error reporting in GitHub Actions with an output format `github`.
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '8.1'
|
||||
php-version: '8.2'
|
||||
tools: psalm
|
||||
|
||||
- name: Run Psalm
|
||||
@ -824,7 +884,7 @@ Psalm supports error reporting in GitHub Actions with an 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).
|
||||
For examples refer to the [cs2pr documentation](https://github.com/staabm/annotate-pull-request-from-checkstyle).
|
||||
|
||||
> Here is an example with `phpcs`.
|
||||
|
||||
@ -832,7 +892,7 @@ For examples refer to [cs2pr documentation](https://github.com/staabm/annotate-p
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '8.1'
|
||||
php-version: '8.2'
|
||||
tools: cs2pr, phpcs
|
||||
|
||||
- name: Run phpcs
|
||||
@ -841,7 +901,7 @@ For examples refer to [cs2pr documentation](https://github.com/staabm/annotate-p
|
||||
|
||||
### Examples
|
||||
|
||||
Examples of using `setup-php` with various PHP Frameworks and Packages.
|
||||
Examples of using `setup-php` with various PHP frameworks and packages.
|
||||
|
||||
| Framework/Package | Runs on | Workflow |
|
||||
|----------------------------------------|---------------------------------|---------------------------------------------------------------------------------------------------------------|
|
||||
@ -995,9 +1055,11 @@ These companies generously provide setup-php their products and services to aid
|
||||
[`phpunit`]: https://phpunit.de/
|
||||
[`phpunit-bridge`]: https://symfony.com/doc/current/components/phpunit_bridge.html
|
||||
[`phpunit-polyfills`]: https://github.com/Yoast/PHPUnit-Polyfills
|
||||
[`pint`]: https://github.com/laravel/pint
|
||||
[`prestissimo`]: https://github.com/hirak/prestissimo
|
||||
[`protoc`]: https://developers.google.com/protocol-buffers/
|
||||
[`psalm`]: https://psalm.dev/
|
||||
[`rector`]: https://getrector.org/
|
||||
[`symfony`]: https://symfony.com/download
|
||||
[`symfony-cli`]: https://symfony.com/download
|
||||
[`vapor`]: https://docs.vapor.build/
|
||||
|
@ -4,6 +4,8 @@ describe('Config tests', () => {
|
||||
it.each`
|
||||
driver | php | os | output
|
||||
${'PCOV'} | ${'7.4'} | ${'win32'} | ${'Add-Extension pcov,Disable-Extension xdebug false'}
|
||||
${'pcov'} | ${'7.4'} | ${'win32'} | ${'$pcov_version = php -r "echo phpversion(\'pcov\');"'}
|
||||
${'pcov'} | ${'7.4'} | ${'win32'} | ${'PCOV $pcov_version enabled as coverage driver'}
|
||||
${'pcov'} | ${'7.0'} | ${'win32'} | ${'PHP 7.1 or newer is required'}
|
||||
${'pcov'} | ${'5.6'} | ${'win32'} | ${'PHP 7.1 or newer is required'}
|
||||
${'pcov'} | ${'7.4'} | ${'win32'} | ${'Add-Extension pcov,Disable-Extension xdebug false'}
|
||||
@ -15,6 +17,8 @@ describe('Config tests', () => {
|
||||
${'xdebug'} | ${'8.0'} | ${'linux'} | ${'add_extension xdebug'}
|
||||
${'xdebug3'} | ${'8.0'} | ${'linux'} | ${'add_extension xdebug'}
|
||||
${'xdebug2'} | ${'7.4'} | ${'linux'} | ${'add_pecl_extension xdebug 2.9.8 zend_extension'}
|
||||
${'xdebug'} | ${'7.4'} | ${'linux'} | ${'xdebug_version="$(php -r "echo phpversion(\'xdebug\');")"'}
|
||||
${'xdebug'} | ${'7.4'} | ${'linux'} | ${'Xdebug $xdebug_version enabled as coverage driver'}
|
||||
${'xdebug'} | ${'7.4'} | ${'darwin'} | ${'add_brew_extension xdebug'}
|
||||
${'xdebug3'} | ${'7.1'} | ${'darwin'} | ${'xdebug3 is not supported on PHP 7.1'}
|
||||
${'xdebug2'} | ${'7.4'} | ${'darwin'} | ${'add_brew_extension xdebug2'}
|
||||
|
@ -93,7 +93,6 @@ describe('Extension tests', () => {
|
||||
${'pdo_oci'} | ${'7.3'} | ${'add_oci pdo_oci'}
|
||||
${'pecl_http'} | ${'7.3'} | ${'add_http'}
|
||||
${'sqlite'} | ${'7.2'} | ${'add_extension sqlite3'}
|
||||
${'sqlsrv'} | ${'7.3'} | ${'add_sqlsrv sqlsrv'}
|
||||
`(
|
||||
'checking addExtensionOnDarwin for extension $extension on version $version',
|
||||
async ({extension, version, output}) => {
|
||||
@ -112,12 +111,13 @@ describe('Extension tests', () => {
|
||||
const [formula, extension]: string[] = line.split('=');
|
||||
const prefix: string =
|
||||
extension == 'xdebug' ? 'zend_extension' : 'extension';
|
||||
const ext_name = extension.replace(/\d+|(pdo|pecl)[_-]/, '');
|
||||
const output: string = fs.existsSync(
|
||||
`src/scripts/extensions/${extension}.sh`
|
||||
`src/scripts/extensions/${ext_name}.sh`
|
||||
)
|
||||
? `add_${extension}`
|
||||
? `add_${ext_name}`
|
||||
: `add_brew_extension ${formula} ${prefix}`;
|
||||
return [formula, '7.3', output];
|
||||
return [formula, formula === 'phalcon3' ? '7.3' : '7.4', output];
|
||||
});
|
||||
|
||||
it.each(data)(
|
||||
|
@ -372,7 +372,7 @@ describe('Tools tests', () => {
|
||||
|
||||
it.each([
|
||||
[
|
||||
'blackfire, blackfire-player, churn, cs2pr, flex, grpc_php_plugin, parallel-lint, php-cs-fixer, phpDocumentor, phplint, phpstan, phpunit, pecl, phing, phinx, phinx:1.2.3, phive, phpunit-bridge, phpunit-polyfills, php-config, phpize, protoc, symfony, vapor, wp',
|
||||
'blackfire, blackfire-player, churn, cs2pr, flex, grpc_php_plugin, parallel-lint, php-cs-fixer, phpDocumentor, phplint, phpstan, phpunit, pecl, phing, phinx, phinx:1.2.3, phive, phpunit-bridge, phpunit-polyfills, pint, php-config, phpize, protoc, symfony, vapor, wp',
|
||||
[
|
||||
'add_tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-stable.phar,https://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-stable.phar,https://getcomposer.org/composer-stable.phar composer',
|
||||
'add_blackfire',
|
||||
@ -394,6 +394,7 @@ describe('Tools tests', () => {
|
||||
'add_tool https://github.com/phar-io/phive/releases/download/3.2.1/phive-3.2.1.phar phive "status"',
|
||||
'add_composertool phpunit-bridge phpunit-bridge symfony/ global',
|
||||
'add_composertool phpunit-polyfills phpunit-polyfills yoast/ global',
|
||||
'add_tool https://github.com/laravel/pint/releases/latest/download/pint.phar pint "-V"',
|
||||
'add_devtools php-config',
|
||||
'add_devtools phpize',
|
||||
'add_protoc latest',
|
||||
@ -411,7 +412,7 @@ describe('Tools tests', () => {
|
||||
|
||||
it.each([
|
||||
[
|
||||
'behat, blackfire, blackfire-player, churn, composer-normalize, composer-require-checker, composer-unused, cs2pr:1.2.3, flex, grpc_php_plugin:1.2.3, infection, phan, phan:1.2.3, phing:1.2.3, phinx, phive:1.2.3, php-config, phpcbf, phpcpd, phpcs, phpdoc, phpize, phpmd, phpspec, phpunit-bridge:5.6, phpunit-polyfills:1.0.1, protoc:v1.2.3, psalm, symfony-cli, vapor-cli, wp-cli',
|
||||
'behat, blackfire, blackfire-player, churn, composer-normalize, composer-require-checker, composer-unused, cs2pr:1.2.3, flex, grpc_php_plugin:1.2.3, infection, phan, phan:1.2.3, phing:1.2.3, phinx, phive:1.2.3, php-config, phpcbf, phpcpd, phpcs, phpdoc, phpize, phpmd, phpspec, phpunit-bridge:5.6, phpunit-polyfills:1.0.1, protoc:v1.2.3, psalm, rector, symfony-cli, vapor-cli, wp-cli',
|
||||
[
|
||||
'add_tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-stable.phar,https://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-stable.phar,https://getcomposer.org/composer-stable.phar composer',
|
||||
'add_composertool behat behat behat/ scoped',
|
||||
@ -420,7 +421,7 @@ describe('Tools tests', () => {
|
||||
'add_tool https://github.com/bmitch/churn-php/releases/latest/download/churn.phar churn "-V"',
|
||||
'add_tool https://github.com/ergebnis/composer-normalize/releases/latest/download/composer-normalize.phar composer-normalize "-V"',
|
||||
'add_composertool composer-require-checker composer-require-checker maglnet/ scoped',
|
||||
'add_composertool composer-unused composer-unused icanhazstring/ scoped',
|
||||
'add_tool https://github.com/composer-unused/composer-unused/releases/latest/download/composer-unused.phar composer-unused "-V"',
|
||||
'add_tool https://github.com/staabm/annotate-pull-request-from-checkstyle/releases/download/1.2.3/cs2pr cs2pr "-V"',
|
||||
'add_composertool flex flex symfony/ global',
|
||||
'add_grpc_php_plugin 1.2.3',
|
||||
@ -442,6 +443,7 @@ describe('Tools tests', () => {
|
||||
'add_composertool phpunit-polyfills phpunit-polyfills:1.0.1 yoast/ global',
|
||||
'add_protoc 1.2.3',
|
||||
'add_tool https://github.com/vimeo/psalm/releases/latest/download/psalm.phar psalm "-v"',
|
||||
'add_composertool rector rector rector/ scoped',
|
||||
'add_symfony latest',
|
||||
'add_composertool vapor-cli vapor-cli laravel/ scoped',
|
||||
'add_tool https://github.com/wp-cli/builds/blob/gh-pages/phar/wp-cli.phar?raw=true wp-cli "--version"'
|
||||
@ -527,4 +529,14 @@ describe('Tools tests', () => {
|
||||
process.env['COMPOSER_TOKEN'] = token;
|
||||
expect(await tools.addTools(tools_csv, '7.4', 'linux')).toContain(script);
|
||||
});
|
||||
|
||||
it.each`
|
||||
tools_csv | token | script
|
||||
${'cs2pr:1.2'} | ${'invalid_token'} | ${'add_log "$cross" "cs2pr" "Invalid token"'}
|
||||
${'phpunit:1.2'} | ${'invalid_token'} | ${'add_log "$cross" "phpunit" "Invalid token"'}
|
||||
${'phpunit:0.1'} | ${'no_data'} | ${'add_log "$cross" "phpunit" "No version found with prefix 0.1."'}
|
||||
`('checking error: $tools_csv', async ({tools_csv, token, script}) => {
|
||||
process.env['GITHUB_TOKEN'] = token;
|
||||
expect(await tools.addTools(tools_csv, '7.4', 'linux')).toContain(script);
|
||||
});
|
||||
});
|
||||
|
@ -109,6 +109,9 @@ describe('Utils tests', () => {
|
||||
expect(
|
||||
await utils.CSVArray('a=E_ALL, b=E_ALL & ~ E_ALL, c="E_ALL", d=\'E_ALL\'')
|
||||
).toEqual(['a=E_ALL', 'b=E_ALL & ~ E_ALL', 'c=E_ALL', 'd=E_ALL']);
|
||||
expect(
|
||||
await utils.CSVArray('a="b=c;d=e", b=\'c=d,e\', c="g=h,i=j", d=g=h, a===')
|
||||
).toEqual(["a='b=c;d=e'", "b='c=d,e'", "c='g=h,i=j'", "d='g=h'", "a='=='"]);
|
||||
expect(await utils.CSVArray('')).toEqual([]);
|
||||
expect(await utils.CSVArray(' ')).toEqual([]);
|
||||
});
|
||||
@ -256,4 +259,13 @@ describe('Utils tests', () => {
|
||||
'\nadd_extension_from_source ext https://sub.domain.XN--tld org repo release extension'
|
||||
);
|
||||
});
|
||||
|
||||
it('checking setVariable', async () => {
|
||||
let script: string = await utils.setVariable('var', 'command', 'linux');
|
||||
expect(script).toEqual('\nvar="$(command)"\n');
|
||||
script = await utils.setVariable('var', 'command', 'darwin');
|
||||
expect(script).toEqual('\nvar="$(command)"\n');
|
||||
script = await utils.setVariable('var', 'command', 'win32');
|
||||
expect(script).toEqual('\n$var = command\n');
|
||||
});
|
||||
});
|
||||
|
@ -7,7 +7,7 @@ branding:
|
||||
inputs:
|
||||
php-version:
|
||||
description: 'Setup PHP version.'
|
||||
default: '8.1'
|
||||
default: '8.2'
|
||||
required: true
|
||||
extensions:
|
||||
description: 'Setup PHP extensions.'
|
||||
|
1014
dist/index.js
vendored
1014
dist/index.js
vendored
File diff suppressed because it is too large
Load Diff
@ -21,7 +21,7 @@ jobs:
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- uses: actions/cache@v3
|
||||
with:
|
||||
|
@ -47,7 +47,7 @@ jobs:
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v3
|
||||
@ -86,7 +86,7 @@ jobs:
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v3
|
||||
@ -120,7 +120,7 @@ jobs:
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v3
|
||||
|
@ -47,7 +47,7 @@ jobs:
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v3
|
||||
@ -86,7 +86,7 @@ jobs:
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v3
|
||||
@ -120,7 +120,7 @@ jobs:
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v3
|
||||
|
@ -23,7 +23,7 @@ jobs:
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v3
|
||||
@ -57,7 +57,7 @@ jobs:
|
||||
extensions: mbstring, intl
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v3
|
||||
@ -91,7 +91,7 @@ jobs:
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v3
|
||||
|
@ -22,7 +22,7 @@ jobs:
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v3
|
||||
|
@ -21,7 +21,7 @@ jobs:
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v3
|
||||
|
@ -54,7 +54,7 @@ jobs:
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v3
|
||||
|
@ -56,7 +56,7 @@ jobs:
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v3
|
||||
|
@ -24,7 +24,7 @@ jobs:
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v3
|
||||
|
@ -54,7 +54,7 @@ jobs:
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v3
|
||||
|
@ -56,7 +56,7 @@ jobs:
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v3
|
||||
|
@ -24,7 +24,7 @@ jobs:
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v3
|
||||
|
@ -54,7 +54,7 @@ jobs:
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v3
|
||||
|
@ -55,7 +55,7 @@ jobs:
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
|
@ -31,7 +31,7 @@ jobs:
|
||||
|
||||
- name: Get yarn cache
|
||||
id: yarn-cache
|
||||
run: echo "::set-output name=dir::$(yarn cache dir)"
|
||||
run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- uses: actions/cache@v3
|
||||
with:
|
||||
@ -41,7 +41,7 @@ jobs:
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v3
|
||||
|
@ -22,7 +22,7 @@ jobs:
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v3
|
||||
|
@ -41,7 +41,7 @@ jobs:
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v3
|
||||
|
@ -41,7 +41,7 @@ jobs:
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v3
|
||||
|
@ -25,7 +25,7 @@ jobs:
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v3
|
||||
|
@ -51,7 +51,7 @@ jobs:
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v3
|
||||
|
@ -51,7 +51,7 @@ jobs:
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v3
|
||||
|
4046
package-lock.json
generated
4046
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
36
package.json
36
package.json
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "setup-php",
|
||||
"version": "2.19.1",
|
||||
"version": "2.23.0",
|
||||
"private": false,
|
||||
"description": "Setup PHP for use with GitHub Actions",
|
||||
"main": "lib/install.js",
|
||||
@ -17,7 +17,7 @@
|
||||
"scripts": {
|
||||
"build": "tsc",
|
||||
"lint": "eslint **/src/*.ts **/__tests__/*.ts --cache --fix",
|
||||
"format": "prettier --write **/src/*.ts **/__tests__/*.ts && git add -f src/",
|
||||
"format": "prettier --write **/src/*.ts **/__tests__/*.ts && git add -f __tests__/ ",
|
||||
"format-check": "prettier --check **/src/*.ts **/__tests__/*.ts",
|
||||
"release": "ncc build -o dist && git add -f dist/",
|
||||
"test": "jest"
|
||||
@ -34,28 +34,28 @@
|
||||
"author": "shivammathur",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@actions/core": "^1.8.2",
|
||||
"@actions/core": "^1.10.0",
|
||||
"@actions/exec": "^1.1.1",
|
||||
"@actions/io": "^1.1.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/jest": "^28.1.1",
|
||||
"@types/node": "^17.0.40",
|
||||
"@typescript-eslint/eslint-plugin": "^5.27.0",
|
||||
"@typescript-eslint/parser": "^5.27.0",
|
||||
"@vercel/ncc": "^0.34.0",
|
||||
"eslint": "^8.17.0",
|
||||
"@types/jest": "^29.2.4",
|
||||
"@types/node": "^18.11.17",
|
||||
"@typescript-eslint/eslint-plugin": "^5.47.0",
|
||||
"@typescript-eslint/parser": "^5.47.0",
|
||||
"@vercel/ncc": "^0.36.0",
|
||||
"eslint": "^8.30.0",
|
||||
"eslint-config-prettier": "^8.5.0",
|
||||
"eslint-plugin-import": "^2.26.0",
|
||||
"eslint-plugin-jest": "^26.5.3",
|
||||
"eslint-plugin-prettier": "^4.0.0",
|
||||
"jest": "^28.1.0",
|
||||
"jest-circus": "^28.1.0",
|
||||
"nock": "^13.2.6",
|
||||
"prettier": "^2.6.2",
|
||||
"simple-git-hooks": "^2.8.0",
|
||||
"ts-jest": "^28.0.4",
|
||||
"typescript": "^4.7.3"
|
||||
"eslint-plugin-jest": "^27.1.7",
|
||||
"eslint-plugin-prettier": "^4.2.1",
|
||||
"jest": "^29.3.1",
|
||||
"jest-circus": "^29.3.1",
|
||||
"nock": "^13.2.9",
|
||||
"prettier": "^2.8.1",
|
||||
"simple-git-hooks": "^2.8.1",
|
||||
"ts-jest": "^29.0.3",
|
||||
"typescript": "^4.9.4"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/shivammathur/setup-php/issues"
|
||||
|
@ -1,12 +1,17 @@
|
||||
amqp=amqp
|
||||
apcu=apcu
|
||||
ast=ast
|
||||
couchbase=couchbase
|
||||
ds=ds
|
||||
event=event
|
||||
expect=expect
|
||||
gearman=gearman
|
||||
gnupg=gnupg
|
||||
grpc=grpc
|
||||
igbinary=igbinary
|
||||
imagick=imagick
|
||||
imap=imap
|
||||
lua=lua
|
||||
mailparse=mailparse
|
||||
mcrypt=mcrypt
|
||||
memcache=memcache
|
||||
@ -14,17 +19,21 @@ memcached=memcached
|
||||
mongodb=mongodb
|
||||
msgpack=msgpack
|
||||
pcov=pcov
|
||||
pdo_sqlsrv=pdo_sqlsrv
|
||||
pecl_http=http
|
||||
phalcon3=phalcon
|
||||
phalcon4=phalcon
|
||||
phalcon5=phalcon
|
||||
propro=propro
|
||||
protobuf=protobuf
|
||||
psr=psr
|
||||
raphf=raphf
|
||||
rdkafka=rdkafka
|
||||
redis=redis
|
||||
sqlsrv=sqlsrv
|
||||
ssh2=ssh2
|
||||
swoole=swoole
|
||||
v8js=v8js
|
||||
vips=vips
|
||||
xdebug=xdebug
|
||||
xdebug2=xdebug
|
||||
|
@ -1,2 +1,3 @@
|
||||
COMPOSER_PROCESS_TIMEOUT=0
|
||||
COMPOSER_NO_INTERACTION=1
|
||||
COMPOSER_NO_AUDIT=1
|
||||
|
@ -1,7 +1,7 @@
|
||||
{
|
||||
"latest": "8.1",
|
||||
"nightly": "8.2",
|
||||
"latest": "8.2",
|
||||
"nightly": "8.3",
|
||||
"5.x": "5.6",
|
||||
"7.x": "7.4",
|
||||
"8.x": "8.1"
|
||||
"8.x": "8.2"
|
||||
}
|
11
src/configs/php_debug_packages
Normal file
11
src/configs/php_debug_packages
Normal file
@ -0,0 +1,11 @@
|
||||
cgi
|
||||
cli
|
||||
curl
|
||||
fpm
|
||||
intl
|
||||
mbstring
|
||||
mysql
|
||||
opcache
|
||||
pgsql
|
||||
xml
|
||||
zip
|
@ -7,6 +7,14 @@
|
||||
"version_prefix": "",
|
||||
"version_parameter": "-V"
|
||||
},
|
||||
"composer-unused": {
|
||||
"type": "phar",
|
||||
"repository": "composer-unused/composer-unused",
|
||||
"extension": ".phar",
|
||||
"domain": "https://github.com",
|
||||
"version_prefix": "",
|
||||
"version_parameter": "-V"
|
||||
},
|
||||
"composer-normalize": {
|
||||
"type": "phar",
|
||||
"repository": "ergebnis/composer-normalize",
|
||||
@ -105,6 +113,14 @@
|
||||
"version_prefix": "",
|
||||
"version_parameter": "-V"
|
||||
},
|
||||
"pint": {
|
||||
"type": "phar",
|
||||
"repository": "laravel/pint",
|
||||
"extension": ".phar",
|
||||
"domain": "https://github.com",
|
||||
"version_prefix": "v",
|
||||
"version_parameter": "-V"
|
||||
},
|
||||
"psalm": {
|
||||
"type": "phar",
|
||||
"repository": "vimeo/psalm",
|
||||
@ -134,11 +150,6 @@
|
||||
"repository": "maglnet/composer-require-checker",
|
||||
"scope": "scoped"
|
||||
},
|
||||
"composer-unused": {
|
||||
"type": "composer",
|
||||
"repository": "icanhazstring/composer-unused",
|
||||
"scope": "scoped"
|
||||
},
|
||||
"flex": {
|
||||
"type": "composer",
|
||||
"repository": "symfony/flex",
|
||||
@ -176,6 +187,11 @@
|
||||
"repository": "laravel/vapor-cli",
|
||||
"scope": "scoped"
|
||||
},
|
||||
"rector": {
|
||||
"type": "composer",
|
||||
"repository": "rector/rector",
|
||||
"scope": "scoped"
|
||||
},
|
||||
"blackfire": {
|
||||
"type": "custom-package",
|
||||
"alias": "blackfire-agent"
|
||||
|
2
src/configs/windows_extensions
Normal file
2
src/configs/windows_extensions
Normal file
@ -0,0 +1,2 @@
|
||||
xdebug
|
||||
pcov
|
@ -38,7 +38,12 @@ export async function addCoverageXdebug(
|
||||
extension = extension == 'xdebug3' ? 'xdebug' : extension;
|
||||
script +=
|
||||
(await extensions.addExtension(extension, version, os, true)) + pipe;
|
||||
message = 'Xdebug enabled as coverage driver';
|
||||
script += await utils.setVariable(
|
||||
'xdebug_version',
|
||||
'php -r "echo phpversion(\'xdebug\');"',
|
||||
os
|
||||
);
|
||||
message = 'Xdebug $xdebug_version enabled as coverage driver';
|
||||
status = '$tick';
|
||||
}
|
||||
script += await utils.addLog(status, extension, message, os);
|
||||
@ -66,12 +71,16 @@ export async function addCoveragePCOV(
|
||||
script +=
|
||||
(await extensions.addExtension('pcov', version, os, true)) + pipe;
|
||||
script += (await config.addINIValues('pcov.enabled=1', os, true)) + '\n';
|
||||
|
||||
script += await utils.setVariable(
|
||||
'pcov_version',
|
||||
'php -r "echo phpversion(\'pcov\');"',
|
||||
os
|
||||
);
|
||||
// success
|
||||
script += await utils.addLog(
|
||||
'$tick',
|
||||
'coverage: pcov',
|
||||
'PCOV enabled as coverage driver',
|
||||
'PCOV $pcov_version enabled as coverage driver',
|
||||
os
|
||||
);
|
||||
// version is not supported
|
||||
|
@ -31,19 +31,21 @@ export async function addExtensionDarwin(
|
||||
case /.+-.+\/.+@.+/.test(extension):
|
||||
add_script += await utils.parseExtensionSource(extension, ext_prefix);
|
||||
return;
|
||||
// match 5.3blackfire...8.1blackfire
|
||||
// match 5.3blackfire...8.2blackfire
|
||||
// match 5.3blackfire-(semver)...8.1blackfire-(semver)
|
||||
// match couchbase, geos, pdo_oci, oci8, http, pecl_http
|
||||
// match couchbase, event, geos, pdo_oci, oci8, http, pecl_http
|
||||
// match 5.3ioncube...7.4ioncube
|
||||
// match 7.0phalcon3...7.3phalcon3 and 7.2phalcon4...7.4phalcon4
|
||||
case /^(5\.[3-6]|7\.[0-4]|8\.[0-1])blackfire(-\d+\.\d+\.\d+)?$/.test(
|
||||
// match 7.0phalcon3...7.3phalcon3, 7.2phalcon4...7.4phalcon4, and 7.4phalcon5...8.2phalcon5
|
||||
case /^(5\.[3-6]|7\.[0-4]|8\.[0-2])blackfire(-\d+\.\d+\.\d+)?$/.test(
|
||||
version_extension
|
||||
):
|
||||
case /^couchbase|^geos$|^pdo_oci$|^oci8$|^(pecl_)?http|^pdo_firebird$/.test(
|
||||
case /^couchbase|^event|^gearman$|^geos$|^pdo_oci$|^oci8$|^(pecl_)?http|^pdo_firebird$/.test(
|
||||
extension
|
||||
):
|
||||
case /^(5\.[3-6]|7\.[0-4])ioncube$/.test(version_extension):
|
||||
case /(5\.6|7\.[0-3])phalcon3|7\.[2-4]phalcon4/.test(version_extension):
|
||||
case /(5\.6|7\.[0-3])phalcon3|7\.[2-4]phalcon4|(7\.4|8\.[0-2])phalcon5/.test(
|
||||
version_extension
|
||||
):
|
||||
case /(?<!5\.[3-6])(pdo_)?sqlsrv$/.test(version_extension):
|
||||
add_script += await utils.customPackage(
|
||||
ext_name,
|
||||
@ -74,16 +76,14 @@ export async function addExtensionDarwin(
|
||||
case /(5\.[3-6]|7\.0)pcov/.test(version_extension):
|
||||
add_script += await utils.getUnsupportedLog('pcov', version, 'darwin');
|
||||
return;
|
||||
// match 5.6 and newer - amqp, apcu, expect, gnupg, grpc, igbinary, imagick, imap, memcache, memcached, mongodb, msgpack, protobuf, raphf, rdkafka, redis, ssh2, swoole, xdebug, xdebug2, yaml, zmq
|
||||
// match 7.1 and newer - pcov
|
||||
// match 5.6 to 7.4 - propro
|
||||
// match 7.0 and newer - vips, xlswriter
|
||||
// match brew extensions
|
||||
case /(?<!5\.[3-5])(amqp|apcu|expect|gnupg|grpc|igbinary|imagick|imap|mailparse|mcrypt|memcache|memcached|mongodb|msgpack|protobuf|psr|raphf|rdkafka|redis|ssh2|swoole|xdebug|xdebug2|yaml|zmq)/.test(
|
||||
version_extension
|
||||
):
|
||||
case /(5\.6|7\.[0-4])propro/.test(version_extension):
|
||||
case /(?<!5\.[3-6])(ds|v8js)/.test(version_extension):
|
||||
case /(5\.6|7\.[0-4])(propro|lua)/.test(version_extension):
|
||||
case /(?<!5\.[3-6]|7\.0)pcov/.test(version_extension):
|
||||
case /(?<!5\.[3-6])(vips|xlswriter)/.test(version_extension):
|
||||
case /(?<!5\.[3-6])(ast|vips|xlswriter)/.test(version_extension):
|
||||
add_script += await utils.joins(
|
||||
'\nadd_brew_extension',
|
||||
ext_name,
|
||||
@ -128,18 +128,20 @@ export async function addExtensionWindows(
|
||||
case /^none$/.test(ext_name):
|
||||
add_script += '\nDisable-AllShared';
|
||||
break;
|
||||
// match 5.3blackfire...8.1blackfire
|
||||
// match 5.3blackfire...8.2blackfire
|
||||
// match 5.3blackfire-(semver)...8.1blackfire-(semver)
|
||||
// match pdo_oci and oci8
|
||||
// match 5.3ioncube...7.4ioncube
|
||||
// match 7.0phalcon3...7.3phalcon3 and 7.2phalcon4...7.4phalcon4
|
||||
// match 7.0phalcon3...7.3phalcon3, 7.2phalcon4...7.4phalcon4, and 7.4phalcon5...8.2phalcon5
|
||||
// match 7.1pecl_http...8.1pecl_http and 7.1http...8.1http
|
||||
case /^(5\.[3-6]|7\.[0-4]|8\.1)blackfire(-\d+\.\d+\.\d+)?$/.test(
|
||||
case /^(5\.[3-6]|7\.[0-4]|8\.[0-2])blackfire(-\d+\.\d+\.\d+)?$/.test(
|
||||
version_extension
|
||||
):
|
||||
case /^pdo_oci$|^oci8$|^pdo_firebird$/.test(extension):
|
||||
case /^(5\.[3-6]|7\.[0-4])ioncube$/.test(version_extension):
|
||||
case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$/.test(version_extension):
|
||||
case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$|^(7\.4|8\.[0-2])phalcon5$/.test(
|
||||
version_extension
|
||||
):
|
||||
case /^(7\.[1-4]|8\.1)(pecl_)?http/.test(version_extension):
|
||||
add_script += await utils.customPackage(
|
||||
ext_name,
|
||||
@ -250,24 +252,26 @@ export async function addExtensionLinux(
|
||||
case /.+-.+\/.+@.+/.test(extension):
|
||||
add_script += await utils.parseExtensionSource(extension, ext_prefix);
|
||||
return;
|
||||
// match 5.3blackfire...8.1blackfire
|
||||
// match 5.3blackfire...8.2blackfire
|
||||
// match 5.3blackfire-(semver)...8.1blackfire-(semver)
|
||||
// match 5.3pdo_cubrid...7.2php_cubrid, 5.3cubrid...7.4cubrid
|
||||
// match couchbase, geos, pdo_oci, oci8, http, pecl_http
|
||||
// match 5.3ioncube...7.4ioncube
|
||||
// match 7.0phalcon3...7.3phalcon3 and 7.2phalcon4...7.4phalcon4
|
||||
case /^(5\.[3-6]|7\.[0-4]|8\.[0-1])blackfire(-\d+\.\d+\.\d+)?$/.test(
|
||||
// match 7.0phalcon3...7.3phalcon3, 7.2phalcon4...7.4phalcon4, 7.4phalcon5...8.2phalcon5
|
||||
case /^(5\.[3-6]|7\.[0-4]|8\.[0-2])blackfire(-\d+\.\d+\.\d+)?$/.test(
|
||||
version_extension
|
||||
):
|
||||
case /^((5\.[3-6])|(7\.[0-2]))pdo_cubrid$|^((5\.[3-6])|(7\.[0-4]))cubrid$/.test(
|
||||
version_extension
|
||||
):
|
||||
case /^couchbase|^gearman$|^geos$|^pdo_oci$|^oci8$|^(pecl_)?http|^pdo_firebird$/.test(
|
||||
case /^couchbase|^event|^gearman$|^geos$|^pdo_oci$|^oci8$|^(pecl_)?http|^pdo_firebird$/.test(
|
||||
extension
|
||||
):
|
||||
case /(?<!5\.[3-5])intl-[\d]+\.[\d]+$/.test(version_extension):
|
||||
case /(?<!5\.[3-5])intl-\d+\.\d+$/.test(version_extension):
|
||||
case /^(5\.[3-6]|7\.[0-4])ioncube$/.test(version_extension):
|
||||
case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$/.test(version_extension):
|
||||
case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$|^(7\.4|8\.[0-2])phalcon5$/.test(
|
||||
version_extension
|
||||
):
|
||||
case /(?<!5\.[3-6])(pdo_)?sqlsrv$/.test(version_extension):
|
||||
add_script += await utils.customPackage(
|
||||
ext_name,
|
||||
|
@ -1,16 +1,7 @@
|
||||
# Function to setup environment for self-hosted runners.
|
||||
self_hosted_helper() {
|
||||
if ! command -v brew >/dev/null; then
|
||||
step_log "Setup Brew"
|
||||
get -q -e "/tmp/install.sh" "https://raw.githubusercontent.com/Homebrew/install/master/install.sh" && /tmp/install.sh >/dev/null 2>&1
|
||||
add_log "${tick:?}" "Brew" "Installed Homebrew"
|
||||
fi
|
||||
}
|
||||
|
||||
# Disable dependency extensions
|
||||
disable_dependency_extensions() {
|
||||
local extension=$1
|
||||
formula_file="$tap_dir/$ext_tap/Formula/$extension@${version:?}.rb"
|
||||
formula_file="${tap_dir:?}/$ext_tap/Formula/$extension@${version:?}.rb"
|
||||
if [ -e "$formula_file" ]; then
|
||||
IFS=" " read -r -a dependency_extensions <<< "$(grep -Eo "shivammathur.*@" "$formula_file" | xargs -I {} -n 1 basename '{}' | cut -d '@' -f 1 | tr '\n' ' ')"
|
||||
for dependency_extension in "${dependency_extensions[@]}"; do
|
||||
@ -33,38 +24,11 @@ disable_extension_helper() {
|
||||
echo '' | sudo tee /tmp/extdisabled/"$version"/"$extension" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
# Function to fetch a brew tap.
|
||||
fetch_brew_tap() {
|
||||
tap=$1
|
||||
tap_user=$(dirname "$tap")
|
||||
tap_name=$(basename "$tap")
|
||||
mkdir -p "$tap_dir/$tap_user"
|
||||
get -s -n "" "https://github.com/$tap/archive/master.tar.gz" | sudo tar -xzf - -C "$tap_dir/$tap_user"
|
||||
if [ -d "$tap_dir/$tap_user/$tap_name-master" ]; then
|
||||
sudo mv "$tap_dir/$tap_user/$tap_name-master" "$tap_dir/$tap_user/$tap_name"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to add a brew tap.
|
||||
add_brew_tap() {
|
||||
tap=$1
|
||||
if ! [ -d "$tap_dir/$tap" ]; then
|
||||
if [ "${runner:?}" = "self-hosted" ]; then
|
||||
brew tap "$tap" >/dev/null 2>&1
|
||||
else
|
||||
fetch_brew_tap "$tap" >/dev/null 2>&1
|
||||
if ! [ -d "$tap_dir/$tap" ]; then
|
||||
brew tap "$tap" >/dev/null 2>&1
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to get extension name from brew formula.
|
||||
get_extension_from_formula() {
|
||||
local formula=$1
|
||||
local extension
|
||||
extension=$(grep "$formula=" "$src"/configs/brew_extensions | cut -d '=' -f 2)
|
||||
extension=$(grep -E "^$formula=" "$src"/configs/brew_extensions | cut -d '=' -f 2)
|
||||
[[ -z "$extension" ]] && extension="$(echo "$formula" | sed -E "s/pecl_|[0-9]//g")"
|
||||
echo "$extension"
|
||||
}
|
||||
@ -76,7 +40,7 @@ copy_brew_extensions() {
|
||||
deps="$(grep -Eo 'depends_on "shivammathur[^"]+' "$formula_file" | cut -d '/' -f 3 | tr '\n' ' ')"
|
||||
IFS=' ' read -r -a deps <<< "$formula@$version $deps"
|
||||
for dependency in "${deps[@]}"; do
|
||||
extension_file="$brew_prefix/opt/$dependency/$(get_extension_from_formula "${dependency%@*}").so"
|
||||
extension_file="${brew_prefix:?}/opt/$dependency/$(get_extension_from_formula "${dependency%@*}").so"
|
||||
[ -e "$extension_file" ] && sudo cp "$extension_file" "$ext_dir"
|
||||
done
|
||||
sudo find -- "$brew_prefix"/Cellar/"$formula"@"$version" -name "*.dylib" -exec cp {} "$ext_dir" \;
|
||||
@ -93,7 +57,7 @@ add_brew_extension() {
|
||||
else
|
||||
add_brew_tap "$php_tap"
|
||||
add_brew_tap "$ext_tap"
|
||||
sudo mv "$tap_dir"/"$ext_tap"/.github/deps/"$formula"/* "$core_repo/Formula/" 2>/dev/null || true
|
||||
sudo mv "$tap_dir"/"$ext_tap"/.github/deps/"$formula"/* "${core_repo:?}/Formula/" 2>/dev/null || true
|
||||
update_dependencies >/dev/null 2>&1
|
||||
disable_dependency_extensions "$extension" >/dev/null 2>&1
|
||||
brew install -f "$ext_tap/$formula@$version" >/dev/null 2>&1
|
||||
@ -142,7 +106,7 @@ link_libraries() {
|
||||
|
||||
# Patch brew to overwrite packages.
|
||||
patch_brew() {
|
||||
formula_installer="$brew_repo"/Library/Homebrew/formula_installer.rb
|
||||
formula_installer="${brew_repo:?}"/Library/Homebrew/formula_installer.rb
|
||||
code=" keg.link\(verbose: verbose\?"
|
||||
sudo sed -Ei '' "s/$code.*/$code, overwrite: true\)/" "$formula_installer"
|
||||
# shellcheck disable=SC2064
|
||||
@ -161,10 +125,13 @@ update_dependencies() {
|
||||
patch_brew
|
||||
if ! [ -e /tmp/update_dependencies ]; then
|
||||
if [ "${runner:?}" != "self-hosted" ] && [ "${ImageOS:-}" != "" ] && [ "${ImageVersion:-}" != "" ]; then
|
||||
deps_file="$tap_dir/$php_tap/.github/deps/${ImageOS:?}_${ImageVersion:?}"
|
||||
if [ -e "$deps_file" ]; then
|
||||
while read -r dependency; do
|
||||
update_dependencies_helper "$dependency" &
|
||||
to_wait+=($!)
|
||||
done <"$tap_dir/$php_tap/.github/deps/${ImageOS:?}_${ImageVersion:?}"
|
||||
done <"$deps_file"
|
||||
fi
|
||||
wait "${to_wait[@]}"
|
||||
else
|
||||
git -C "$core_repo" fetch origin master && git -C "$core_repo" reset --hard origin/master
|
||||
@ -200,6 +167,7 @@ add_php() {
|
||||
existing_version=$2
|
||||
add_brew_tap "$php_tap"
|
||||
update_dependencies
|
||||
[ "${debug:?}" = "debug" ] && php_formula="$php_formula-debug"
|
||||
if [ "$existing_version" != "false" ]; then
|
||||
([ "$action" = "upgrade" ] && brew upgrade -f "$php_formula") || brew unlink "$php_formula"
|
||||
else
|
||||
@ -276,16 +244,10 @@ setup_php() {
|
||||
}
|
||||
|
||||
# Variables
|
||||
version=${1:-'8.1'}
|
||||
version=${1:-'8.2'}
|
||||
ini=${2:-'production'}
|
||||
src=${0%/*}/..
|
||||
php_formula=shivammathur/php/php@"$version"
|
||||
brew_path="$(command -v brew)"
|
||||
brew_path_dir="$(dirname "$brew_path")"
|
||||
brew_prefix="$brew_path_dir"/..
|
||||
brew_repo="$brew_path_dir/$(dirname "$(readlink "$brew_path")")"/..
|
||||
tap_dir="$brew_repo"/Library/Taps
|
||||
core_repo="$tap_dir"/homebrew/homebrew-core
|
||||
scripts="$src"/scripts
|
||||
ext_tap=shivammathur/homebrew-extensions
|
||||
php_tap=shivammathur/homebrew-php
|
||||
@ -298,9 +260,11 @@ export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1
|
||||
|
||||
# shellcheck source=.
|
||||
. "${scripts:?}"/unix.sh
|
||||
. "${scripts:?}"/tools/brew.sh
|
||||
. "${scripts:?}"/tools/add_tools.sh
|
||||
. "${scripts:?}"/extensions/source.sh
|
||||
. "${scripts:?}"/extensions/add_extensions.sh
|
||||
configure_brew
|
||||
read_env
|
||||
self_hosted_setup
|
||||
setup_php
|
||||
|
@ -6,8 +6,9 @@ Function Set-ExtensionPrerequisites
|
||||
[ValidateNotNull()]
|
||||
[ValidateLength(1, [int]::MaxValue)]
|
||||
[string]
|
||||
$deps_dir
|
||||
$extension
|
||||
)
|
||||
$deps_dir = "$ext_dir\$extension-vc$($installed.VCVersion)-$arch"
|
||||
$deps = Get-ChildItem -Recurse -Path $deps_dir
|
||||
if ($deps.Count -ne 0) {
|
||||
# Symlink dependencies instead of adding the directory to PATH ...
|
||||
@ -20,6 +21,41 @@ Function Set-ExtensionPrerequisites
|
||||
}
|
||||
}
|
||||
|
||||
# Function to enable extension.
|
||||
Function Enable-Extension() {
|
||||
Param (
|
||||
[Parameter(Position = 0, Mandatory = $true)]
|
||||
[ValidateNotNull()]
|
||||
[ValidateLength(1, [int]::MaxValue)]
|
||||
[string]
|
||||
$extension
|
||||
)
|
||||
Enable-ExtensionDependencies $extension
|
||||
Enable-PhpExtension -Extension $extension -Path $php_dir
|
||||
Set-ExtensionPrerequisites $extension
|
||||
Add-Log $tick $extension "Enabled"
|
||||
}
|
||||
|
||||
# Function to add custom built PHP extension for nightly builds.
|
||||
Function Add-NightlyExtension {
|
||||
Param (
|
||||
[Parameter(Position = 0, Mandatory = $true)]
|
||||
[ValidateNotNull()]
|
||||
[ValidateLength(1, [int]::MaxValue)]
|
||||
[string]
|
||||
$extension
|
||||
)
|
||||
if($ts) { $ts_part = 'ts' } else { $ts_part = 'nts' }
|
||||
$repo = "$github/shivammathur/php-extensions-windows"
|
||||
$url = "$repo/releases/download/builds/php$version`_$ts_part`_$arch`_$extension.dll"
|
||||
Invoke-WebRequest -UseBasicParsing -Uri $url -OutFile "$ext_dir\php_$extension.dll"
|
||||
if(Test-Path "$ext_dir\php_$extension.dll") {
|
||||
Enable-Extension $extension > $null
|
||||
} else {
|
||||
throw "Failed to download the $extension"
|
||||
}
|
||||
}
|
||||
|
||||
# Function to add PHP extensions.
|
||||
Function Add-Extension {
|
||||
Param (
|
||||
@ -52,30 +88,31 @@ Function Add-Extension {
|
||||
Add-Log $tick $extension "Enabled"
|
||||
}
|
||||
default {
|
||||
Enable-ExtensionDependencies $extension
|
||||
Enable-PhpExtension -Extension $extension_info.Handle -Path $php_dir
|
||||
Set-ExtensionPrerequisites $deps_dir
|
||||
Add-Log $tick $extension "Enabled"
|
||||
Enable-Extension $extension_info.Handle
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
# Patch till PHP 8.1 DLLs are released as stable.
|
||||
if(($version -match $nightly_versions) -and (Select-String -Path $src\configs\windows_extensions -Pattern $extension -SimpleMatch -Quiet)) {
|
||||
Add-NightlyExtension $extension
|
||||
} else {
|
||||
# Patch till DLLs for PHP 8.1 and 8.2 are released as stable.
|
||||
$minimumStability = $stability
|
||||
if($version -eq '8.1' -and $stability -eq 'stable') {
|
||||
if ($version -match '8.[1-2]' -and $stability -eq 'stable') {
|
||||
$minimumStability = 'snapshot'
|
||||
}
|
||||
|
||||
$params = @{ Extension = $extension; MinimumStability = $minimumStability; MaximumStability = $stability; Path = $php_dir; AdditionalFilesPath = $deps_dir; NoDependencies = $true }
|
||||
if($extension_version -ne '') {
|
||||
if ($extension_version -ne '')
|
||||
{
|
||||
$params["Version"] = $extension_version
|
||||
}
|
||||
Install-PhpExtension @params
|
||||
Set-ExtensionPrerequisites $deps_dir
|
||||
Set-ExtensionPrerequisites $extension
|
||||
}
|
||||
Add-Log $tick $extension "Installed and enabled"
|
||||
}
|
||||
}
|
||||
catch {
|
||||
} catch {
|
||||
Add-Log $cross $extension "Could not install $extension on PHP $( $installed.FullVersion )"
|
||||
}
|
||||
}
|
||||
|
@ -120,6 +120,7 @@ disable_all_shared() {
|
||||
|
||||
# Function to configure PECL.
|
||||
configure_pecl() {
|
||||
[ -z "${pecl_file:-${ini_file[@]}}" ] && return
|
||||
if ! [ -e /tmp/pecl_config ]; then
|
||||
for script in pear pecl; do
|
||||
sudo "$script" config-set php_ini "${pecl_file:-${ini_file[@]}}"
|
||||
@ -144,13 +145,18 @@ add_extension() {
|
||||
# Function to get the PECL version of an extension.
|
||||
get_pecl_version() {
|
||||
local extension=$1
|
||||
stability="$(echo "$2" | grep -m 1 -Eio "(stable|alpha|beta|rc|snapshot|preview)")"
|
||||
states=("stable" "rc" "preview" "beta" "alpha" "snapshot")
|
||||
stability="$(echo "$2" | grep -m 1 -Eio "($(IFS='|' ; echo "${states[*]}"))")"
|
||||
IFS=' ' read -r -a states <<< "$(echo "${states[@]}" | grep -Eo "$stability.*")"
|
||||
major_version=${3:-'[0-9]+'}
|
||||
pecl_rest='https://pecl.php.net/rest/r/'
|
||||
response=$(get -s -n "" "$pecl_rest$extension"/allreleases.xml)
|
||||
pecl_version=$(echo "$response" | grep -m 1 -Eio "([0-9]+\.[0-9]+\.[0-9]+${stability}[0-9]+)")
|
||||
if [ ! "$pecl_version" ]; then
|
||||
pecl_version=$(echo "$response" | grep -m 1 -Eo "([0-9]+\.[0-9]+\.[0-9]+)")
|
||||
fi
|
||||
for state in "${states[@]}"; do
|
||||
pecl_version=$(echo "$response" | grep -m 1 -Eio "($major_version\.[0-9]+\.[0-9]+${state}[0-9]+<)" | cut -d '<' -f 1)
|
||||
[ -z "$pecl_version" ] && pecl_version=$(echo "$response" | grep -m 1 -Eio "v>(.*)<\/v>.*$state<" | grep -m 1 -Eo "($major_version\.[0-9]+\.[0-9]+.*)<" | cut -d '<' -f 1)
|
||||
[ -n "$pecl_version" ] && break;
|
||||
done
|
||||
[ -z "$pecl_version" ] && pecl_version=$(echo "$response" | grep -m 1 -Eo "($major_version\.[0-9]+\.[0-9]+)<" | cut -d '<' -f 1)
|
||||
echo "$pecl_version"
|
||||
}
|
||||
|
||||
@ -184,8 +190,11 @@ add_pecl_extension() {
|
||||
add_log "${tick:?}" "$extension" "Enabled"
|
||||
else
|
||||
disable_extension_helper "$extension" >/dev/null 2>&1
|
||||
pecl_install "$extension-$pecl_version"
|
||||
add_extension_log "$extension-$pecl_version" "Installed and enabled"
|
||||
[ -n "$pecl_version" ] && pecl_version="-$pecl_version"
|
||||
pecl_install "$extension$pecl_version" || add_extension "$extension" "$(get_extension_prefix "$extension")" >/dev/null 2>&1
|
||||
extension_version="$(php -r "echo phpversion('$extension');")"
|
||||
[ -n "$extension_version" ] && extension_version="-$extension_version"
|
||||
add_extension_log "$extension$extension_version" "Installed and enabled"
|
||||
fi
|
||||
}
|
||||
|
||||
@ -197,3 +206,8 @@ add_unstable_extension() {
|
||||
pecl_version=$(get_pecl_version "$extension" "$stability")
|
||||
add_pecl_extension "$extension" "$pecl_version" "$prefix"
|
||||
}
|
||||
|
||||
# Function to get extension prefix
|
||||
get_extension_prefix() {
|
||||
echo "$1" | grep -Eq "xdebug([2-3])?$|opcache|ioncube|eaccelerator" && echo zend_extension || echo extension
|
||||
}
|
||||
|
@ -5,7 +5,7 @@ add_couchbase_clibs() {
|
||||
if [[ "$ext" =~ couchbase-2.+ ]]; then
|
||||
release="2.10.9"
|
||||
else
|
||||
release="$(curl -sL $trunk/latest | grep -Eo "libcouchbase-[0-9]+\.[0-9]+\.[0-9]+" | head -n 1 | cut -d'-' -f 2)"
|
||||
release=$(get -s -n "" "$trunk"/latest | grep -Eo -m 1 "[0-9]+\.[0-9]+\.[0-9]+" | head -n 1)
|
||||
fi
|
||||
[ "$VERSION_ID" = "22.04" ] && vid=20.04 || vid="$VERSION_ID"
|
||||
[ "$VERSION_CODENAME" = "jammy" ] && vcn=focal || vcn="$VERSION_CODENAME"
|
||||
@ -69,7 +69,7 @@ add_couchbase() {
|
||||
fi
|
||||
else
|
||||
if [ -e "${ext_dir:?}"/libcouchbase_php_core.dylib ]; then
|
||||
sudo cp "${ext_dir:?}"/libcouchbase_php_core.dylib ${brew_prefix:?}/lib
|
||||
sudo cp "${ext_dir:?}"/libcouchbase_php_core.dylib "${brew_prefix:?}"/lib
|
||||
fi
|
||||
add_brew_extension couchbase extension
|
||||
fi
|
||||
|
50
src/scripts/extensions/event.sh
Normal file
50
src/scripts/extensions/event.sh
Normal file
@ -0,0 +1,50 @@
|
||||
# Function to get event configure options
|
||||
get_event_configure_opts() {
|
||||
event_opts=(
|
||||
--with-event-core
|
||||
--with-event-extra
|
||||
--with-event-openssl
|
||||
--enable-event-sockets
|
||||
)
|
||||
if [ "$os" = 'Linux' ]; then
|
||||
event_opts+=(
|
||||
--with-openssl-dir=yes
|
||||
--with-event-libevent-dir=/usr
|
||||
)
|
||||
else
|
||||
event_opts+=(
|
||||
--with-openssl-dir="$(brew --prefix openssl@1.1)"
|
||||
--with-event-libevent-dir="$(brew --prefix libevent)"
|
||||
)
|
||||
fi
|
||||
}
|
||||
|
||||
# Helper function to compile and install event
|
||||
add_event_helper() {
|
||||
local ext=$1
|
||||
[[ "$ext" =~ ^event$ ]] && ext="event-$(get_pecl_version "event" "stable")"
|
||||
event_opts=() && get_event_configure_opts
|
||||
export EVENT_LINUX_LIBS='libevent-dev'
|
||||
export EVENT_DARWIN_LIBS='libevent'
|
||||
event_configure_opts="--with-php-config=$(command -v php-config) ${event_opts[*]}"
|
||||
export EVENT_CONFIGURE_OPTS="$event_configure_opts"
|
||||
add_extension_from_source event https://pecl.php.net event event "${ext##*-}" extension pecl
|
||||
}
|
||||
|
||||
# Function to add event
|
||||
add_event() {
|
||||
local ext=$1
|
||||
enable_extension "event" "extension"
|
||||
if check_extension "event"; then
|
||||
add_log "${tick:?}" "event" "Enabled"
|
||||
else
|
||||
if ! [[ "${version:?}" =~ ${old_versions:?} ]] && [ "$os" = "Darwin" ]; then
|
||||
add_brew_extension event extension >/dev/null 2>&1
|
||||
else
|
||||
add_event_helper "$ext" >/dev/null 2>&1
|
||||
fi
|
||||
add_extension_log "event" "Installed and enabled"
|
||||
fi
|
||||
}
|
||||
|
||||
os="$(uname -s)"
|
@ -1,6 +1,7 @@
|
||||
add_firebird_client_darwin() {
|
||||
firebird_tag='R3_0_7'
|
||||
pkg_name=$(get -s -n "" https://github.com/FirebirdSQL/firebird/releases/tag/"$firebird_tag" | grep -Eo "Firebird-.*.pkg" | head -n 1)
|
||||
pkg_name=$(get -s -n "" https://api.github.com/repos/FirebirdSQL/firebird/releases/tags/"$firebird_tag" | grep -Eo "Firebird-.*.pkg" | head -n 1)
|
||||
[ -z "$pkg_name" ] && pkg_name=$(get -s -n "" https://github.com/FirebirdSQL/firebird/releases/expanded_assets/"$firebird_tag" | grep -Eo "Firebird-.*.pkg" | head -n 1)
|
||||
get -q -e "/tmp/firebird.pkg" https://github.com/FirebirdSQL/firebird/releases/download/"$firebird_tag"/"$pkg_name"
|
||||
sudo installer -pkg /tmp/firebird.pkg -target /
|
||||
sudo mkdir -p /opt/firebird/include /opt/firebird/lib
|
||||
|
@ -17,6 +17,10 @@ add_gearman_helper() {
|
||||
# Function to add gearman extension.
|
||||
add_gearman() {
|
||||
status="Enabled"
|
||||
if [ "$(uname -s)" = 'Linux' ]; then
|
||||
add_gearman_helper >/dev/null 2>&1
|
||||
add_extension_log "gearman" "$status"
|
||||
else
|
||||
add_brew_extension gearman extension
|
||||
fi
|
||||
}
|
||||
|
@ -1,24 +1,79 @@
|
||||
# Function to install phalcon
|
||||
Function Add-PhalconHelper() {
|
||||
if ($extension_version -eq '4') {
|
||||
Install-Phpextension -Extension phalcon -MinimumStability stable -Path $php_dir
|
||||
} else {
|
||||
$domain = 'https://github.com'
|
||||
# Function to get the url of the phalcon release asset.
|
||||
Function Get-PhalconReleaseAssetUrl() {
|
||||
Param (
|
||||
[Parameter(Position = 0, Mandatory = $true)]
|
||||
[ValidateNotNull()]
|
||||
[string]
|
||||
$Semver
|
||||
)
|
||||
$domain = 'https://api.github.com/repos'
|
||||
$releases = 'phalcon/cphalcon/releases'
|
||||
if($extension_version -match '[3-4]') {
|
||||
$nts = if (!$installed.ThreadSafe) { "_nts" } else { "" }
|
||||
$match = Invoke-WebRequest -Uri "$domain/phalcon/cphalcon/releases/v3.4.5" | Select-String -Pattern "href=`"(.*phalcon_x64_.*_php${version}_${extension_version}.*[0-9]${nts}.zip)`""
|
||||
$zip_file = $match.Matches[0].Groups[1].Value
|
||||
Invoke-WebRequest -Uri $domain/$zip_file -OutFile $ENV:RUNNER_TOOL_CACHE\phalcon.zip > $null 2>&1
|
||||
try {
|
||||
$match = (Invoke-RestMethod -Uri "$domain/$releases/tags/v$Semver").assets | Select-String -Pattern "browser_download_url=.*(phalcon_${arch}_.*_php${version}_${extension_version}.*[0-9]${nts}.zip)"
|
||||
} catch {
|
||||
$match = (Invoke-WebRequest -Uri "$github/$releases/expanded_assets/v$Semver").Links.href | Select-String -Pattern "(phalcon_${arch}_.*_php${version}_${extension_version}.*[0-9]${nts}.zip)"
|
||||
}
|
||||
} else {
|
||||
$nts = if (!$installed.ThreadSafe) { "-nts" } else { "-ts" }
|
||||
try {
|
||||
$match = (Invoke-RestMethod -Uri "$domain/$releases/tags/v$Semver").assets | Select-String -Pattern "browser_download_url=.*(phalcon-php${version}${nts}-windows.*-x64.zip)"
|
||||
} catch {
|
||||
$match = (Invoke-WebRequest -Uri "$github/$releases/expanded_assets/v$Semver").Links.href | Select-String -Pattern "(phalcon-php${version}${nts}-windows.*-x64.zip)"
|
||||
}
|
||||
}
|
||||
if($NULL -ne $match) {
|
||||
return "$github/$releases/download/v$Semver/$($match.Matches[0].Groups[1].Value)"
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
# Function to add phalcon using GitHub releases.
|
||||
Function Add-PhalconFromGitHub() {
|
||||
Param (
|
||||
[Parameter(Position = 0, Mandatory = $true)]
|
||||
[ValidateNotNull()]
|
||||
[string]
|
||||
$Semver
|
||||
)
|
||||
$zip_url = Get-PhalconReleaseAssetUrl $Semver
|
||||
if($zip_url) {
|
||||
Invoke-WebRequest -Uri $zip_url -OutFile $ENV:RUNNER_TOOL_CACHE\phalcon.zip > $null 2>&1
|
||||
Expand-Archive -Path $ENV:RUNNER_TOOL_CACHE\phalcon.zip -DestinationPath $ENV:RUNNER_TOOL_CACHE\phalcon -Force > $null 2>&1
|
||||
Copy-Item -Path "$ENV:RUNNER_TOOL_CACHE\phalcon\php_phalcon.dll" -Destination "$ext_dir\php_phalcon.dll"
|
||||
Enable-PhpExtension -Extension phalcon -Path $php_dir
|
||||
} else {
|
||||
throw "Unable to get Phalcon release from the GitHub release"
|
||||
}
|
||||
}
|
||||
|
||||
# Function to get phalcon semver.
|
||||
Function Get-PhalconSemver() {
|
||||
if($extension_version -eq '3') {
|
||||
return '3.4.5'
|
||||
} elseif (($extension_version -eq '4') -and ($version -eq '7.2')) {
|
||||
return '4.1.0'
|
||||
}
|
||||
return Get-PeclPackageVersion phalcon $extension_version stable stable | Select-Object -First 1
|
||||
}
|
||||
|
||||
# Function to install phalcon
|
||||
Function Add-PhalconHelper() {
|
||||
$semver = Get-PhalconSemver
|
||||
if (($extension_version -eq '3') -or ($extension_version -eq '5')) {
|
||||
Add-PhalconFromGitHub $semver
|
||||
} elseif ($extension_version -eq '4') {
|
||||
Add-Extension -Extension phalcon -Stability stable -Extension_version $semver
|
||||
}
|
||||
}
|
||||
|
||||
# Function to add phalcon
|
||||
Function Add-Phalcon() {
|
||||
Param (
|
||||
[Parameter(Position = 0, Mandatory = $true)]
|
||||
[ValidateNotNull()]
|
||||
[ValidateSet('phalcon3', 'phalcon4')]
|
||||
[ValidateSet('phalcon3', 'phalcon4', 'phalcon5')]
|
||||
[string]
|
||||
$extension
|
||||
)
|
||||
|
@ -1,13 +1,38 @@
|
||||
# Helper function to get phalcon version
|
||||
get_phalcon_version() {
|
||||
if [ "$extension" = "phalcon5" ]; then
|
||||
get_pecl_version phalcon stable 5
|
||||
elif [ "$extension" = "phalcon4" ]; then
|
||||
echo '4.1.2'
|
||||
elif [ "$extension" = "phalcon3" ]; then
|
||||
echo '3.4.5'
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to add phalcon from repo.
|
||||
add_phalcon_from_repo(){
|
||||
version=${version:?}
|
||||
if [ "$extension" = "phalcon5" ]; then
|
||||
PHALCON_PATH=build/phalcon
|
||||
else
|
||||
PHALCON_PATH=build/php"${version%.*}"/64bits
|
||||
fi
|
||||
PHALCON_CONFIGURE_OPTS="--enable-phalcon --with-php-config=$(command -v php-config)"
|
||||
export PHALCON_PATH
|
||||
export PHALCON_CONFIGURE_OPTS
|
||||
add_extension_from_source phalcon https://github.com phalcon cphalcon v"$(get_phalcon_version)" extension
|
||||
}
|
||||
|
||||
# Helper function to add phalcon.
|
||||
add_phalcon_helper() {
|
||||
status='Installed and enabled'
|
||||
if [ "$(uname -s)" = "Darwin" ]; then
|
||||
add_brew_extension "$extension" extension
|
||||
else
|
||||
packages=("php${version:?}-$extension")
|
||||
[ "$extension" = "phalcon4" ] && packages+=("php${version:?}-psr")
|
||||
package="php${version:?}-$extension"
|
||||
add_ppa ondrej/php >/dev/null 2>&1 || update_ppa ondrej/php
|
||||
check_package "${packages[0]}" && install_packages "${packages[@]}"
|
||||
[ "$extension" = "phalcon4" ] && (install_packages "php${version:?}-psr" || pecl_install psr || pecl_install psr-1.1.0)
|
||||
(check_package "$package" && install_packages "$package") || pecl_install phalcon-"$(get_phalcon_version)" || add_phalcon_from_repo
|
||||
fi
|
||||
}
|
||||
|
||||
@ -44,15 +69,27 @@ add_phalcon4() {
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to add phalcon3.
|
||||
add_phalcon5() {
|
||||
if shared_extension phalcon; then
|
||||
phalcon_version=$(php -d="extension=phalcon.so" -r "echo phpversion('phalcon');" | cut -d'.' -f 1)
|
||||
if [ "$phalcon_version" != "$extension_major_version" ]; then
|
||||
add_phalcon_helper
|
||||
else
|
||||
enable_extension phalcon extension
|
||||
fi
|
||||
else
|
||||
add_phalcon_helper
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to add phalcon.
|
||||
add_phalcon() {
|
||||
extension=$1
|
||||
local extension=$1
|
||||
status='Enabled'
|
||||
extension_major_version=${extension: -1}
|
||||
if [ "$extension_major_version" = "4" ]; then
|
||||
add_phalcon4 >/dev/null 2>&1
|
||||
elif [ "$extension_major_version" = "3" ]; then
|
||||
add_phalcon3 >/dev/null 2>&1
|
||||
if [[ "$extension_major_version" =~ [3-5] ]]; then
|
||||
add_phalcon"$extension_major_version" >/dev/null 2>&1
|
||||
fi
|
||||
add_extension_log "phalcon" "$status"
|
||||
}
|
||||
|
@ -146,6 +146,7 @@ add_extension_from_source() {
|
||||
add_log "${cross:?}" "$source" "$source does not have a PHP extension"
|
||||
else
|
||||
[[ -n "${libraries// }" ]] && run_group "add_libs $libraries" "add libraries"
|
||||
[ "${debug:?}" = "debug" ] && suffix_opts="$suffix_opts --enable-debug"
|
||||
patch_extension "$extension" >/dev/null 2>&1
|
||||
run_group "phpize" "phpize"
|
||||
run_group "sudo $prefix_opts ./configure $suffix_opts $opts" "configure"
|
||||
|
@ -3,15 +3,7 @@ get_sqlsrv_version() {
|
||||
if [[ "${version:?}" =~ 7.[0-3] ]]; then
|
||||
echo '5.9.0'
|
||||
else
|
||||
echo '5.10.0'
|
||||
fi
|
||||
}
|
||||
|
||||
add_unixodbc() {
|
||||
if [ "$(uname -s)" = 'Linux' ]; then
|
||||
install_packages unixodbc-dev
|
||||
else
|
||||
brew install unixodbc
|
||||
echo '5.10.1'
|
||||
fi
|
||||
}
|
||||
|
||||
@ -19,6 +11,10 @@ add_unixodbc() {
|
||||
add_sqlsrv() {
|
||||
ext=$1
|
||||
ext_version=$(get_sqlsrv_version)
|
||||
add_unixodbc >/dev/null 2>&1
|
||||
if [ "$(uname -s)" = 'Linux' ]; then
|
||||
install_packages unixodbc-dev
|
||||
add_pecl_extension "$ext" "$ext_version" extension
|
||||
else
|
||||
add_brew_extension "$ext" extension
|
||||
fi
|
||||
}
|
||||
|
@ -75,9 +75,10 @@ check_package() {
|
||||
# Helper function to add an extension.
|
||||
add_extension_helper() {
|
||||
local extension=$1
|
||||
package=php"$version"-"$extension"
|
||||
packages=(php"$version"-"$extension")
|
||||
add_ppa ondrej/php >/dev/null 2>&1 || update_ppa ondrej/php
|
||||
(check_package "$package" && install_packages "$package") || pecl_install "$extension"
|
||||
[ "${debug:?}" = "debug" ] && check_package php"$version"-"$extension"-dbgsym && packages+=(php"$version"-"$extension"-dbgsym)
|
||||
(check_package "${packages[0]}" && install_packages "${packages[@]}") || pecl_install "$extension"
|
||||
add_extension_log "$extension" "Installed and enabled"
|
||||
sudo chmod 777 "${ini_file[@]}"
|
||||
}
|
||||
@ -88,14 +89,14 @@ add_devtools() {
|
||||
if ! command -v "$tool$version" >/dev/null; then
|
||||
install_packages "php$version-dev"
|
||||
fi
|
||||
add_extension xml extension >/dev/null 2>&1
|
||||
switch_version "phpize" "php-config"
|
||||
add_extension xml extension >/dev/null 2>&1
|
||||
add_log "${tick:?}" "$tool" "Added $tool $semver"
|
||||
}
|
||||
|
||||
# Function to setup the nightly build from shivammathur/php-builder
|
||||
setup_nightly() {
|
||||
run_script "php-builder" "${runner:?}" "$version"
|
||||
run_script "php-builder" "${runner:?}" "$version" "${debug:?}" ${ts:?}
|
||||
}
|
||||
|
||||
# Function to setup PHP 5.3, PHP 5.4 and PHP 5.5.
|
||||
@ -133,15 +134,22 @@ switch_version() {
|
||||
wait "${to_wait[@]}"
|
||||
}
|
||||
|
||||
# Function to get packages to install
|
||||
get_php_packages() {
|
||||
sed "s/[^ ]*/php$version-&/g" "$src"/configs/php_packages | tr '\n' ' '
|
||||
if [ "${debug:?}" = "debug" ]; then
|
||||
sed "s/[^ ]*/php$version-&-dbgsym/g" "$src"/configs/php_debug_packages | tr '\n' ' '
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to install packaged PHP
|
||||
add_packaged_php() {
|
||||
if [ "$runner" = "self-hosted" ] || [ "${use_package_cache:-true}" = "false" ]; then
|
||||
add_ppa ondrej/php >/dev/null 2>&1 || update_ppa ondrej/php
|
||||
IFS=' ' read -r -a packages <<<"$(sed "s/[^ ]*/php$version-&/g" "$src"/configs/php_packages | tr '\n' ' ')"
|
||||
IFS=' ' read -r -a packages <<<"$(get_php_packages)"
|
||||
install_packages "${packages[@]}"
|
||||
add_pecl
|
||||
else
|
||||
run_script "php-ubuntu" "$version"
|
||||
run_script "php-ubuntu" "$version" "${debug:?}"
|
||||
fi
|
||||
}
|
||||
|
||||
@ -159,13 +167,14 @@ update_php() {
|
||||
|
||||
# Function to install PHP.
|
||||
add_php() {
|
||||
if [[ "$version" =~ ${nightly_versions:?} ]]; then
|
||||
if [[ "$version" =~ ${nightly_versions:?} ]] || [[ "${ts:?}" = "zts" ]]; then
|
||||
setup_nightly
|
||||
elif [[ "$version" =~ ${old_versions:?} ]]; then
|
||||
setup_old_versions
|
||||
else
|
||||
add_packaged_php
|
||||
switch_version >/dev/null 2>&1
|
||||
add_pecl
|
||||
fi
|
||||
status="Installed"
|
||||
}
|
||||
@ -258,7 +267,7 @@ setup_php() {
|
||||
}
|
||||
|
||||
# Variables
|
||||
version=${1:-'8.1'}
|
||||
version=${1:-'8.2'}
|
||||
ini=${2:-'production'}
|
||||
src=${0%/*}/..
|
||||
debconf_fix="DEBIAN_FRONTEND=noninteractive"
|
||||
|
@ -1,7 +1,8 @@
|
||||
# Variables
|
||||
$composer_bin = "$env:APPDATA\Composer\vendor\bin"
|
||||
$composer_json = "$env:APPDATA\Composer\composer.json"
|
||||
$composer_lock = "$env:APPDATA\Composer\composer.lock"
|
||||
$composer_home = "$env:APPDATA\Composer"
|
||||
$composer_bin = "$composer_home\vendor\bin"
|
||||
$composer_json = "$composer_home\composer.json"
|
||||
$composer_lock = "$composer_home\composer.lock"
|
||||
|
||||
# Function to configure composer.
|
||||
Function Edit-ComposerConfig() {
|
||||
@ -24,8 +25,30 @@ Function Edit-ComposerConfig() {
|
||||
}
|
||||
Add-EnvPATH $src\configs\composer.env
|
||||
Add-Path $composer_bin
|
||||
if (Test-Path env:COMPOSER_TOKEN) {
|
||||
Add-Env COMPOSER_AUTH ('{"github-oauth": {"github.com": "' + $env:COMPOSER_TOKEN + '"}}')
|
||||
Set-ComposerAuth
|
||||
}
|
||||
|
||||
# Function to setup authentication in composer.
|
||||
Function Set-ComposerAuth() {
|
||||
if(Test-Path env:COMPOSER_AUTH_JSON) {
|
||||
if(Test-Json -JSON $env:COMPOSER_AUTH_JSON) {
|
||||
Set-Content -Path $composer_home\auth.json -Value $env:COMPOSER_AUTH_JSON
|
||||
} else {
|
||||
Add-Log "$cross" "composer" "Could not parse COMPOSER_AUTH_JSON as valid JSON"
|
||||
}
|
||||
}
|
||||
$composer_auth = @()
|
||||
if(Test-Path env:PACKAGIST_TOKEN) {
|
||||
$composer_auth += '"http-basic": {"repo.packagist.com": { "username": "token", "password": "' + $env:PACKAGIST_TOKEN + '"}}'
|
||||
}
|
||||
if(-not(Test-Path env:GITHUB_TOKEN) -and (Test-Path env:COMPOSER_TOKEN)) {
|
||||
$env:GITHUB_TOKEN = $env:COMPOSER_TOKEN
|
||||
}
|
||||
if (Test-Path env:GITHUB_TOKEN) {
|
||||
$composer_auth += '"github-oauth": {"github.com": "' + $env:GITHUB_TOKEN + '"}'
|
||||
}
|
||||
if($composer_auth.length) {
|
||||
Add-Env COMPOSER_AUTH ('{' + ($composer_auth -join ',') + '}')
|
||||
}
|
||||
}
|
||||
|
||||
@ -178,10 +201,17 @@ Function Add-ComposertoolHelper() {
|
||||
[string]
|
||||
$composer_args
|
||||
)
|
||||
$tool_version = $release.split(':')[1]
|
||||
if($NULL -eq $tool_version) {
|
||||
$tool_version = '*'
|
||||
}
|
||||
if($scope -eq 'global') {
|
||||
if(Test-Path $composer_lock) {
|
||||
Remove-Item -Path $composer_lock -Force
|
||||
}
|
||||
if((composer global show $prefix$tool $tool_version -a 2>&1 | findstr '^type *: *composer-plugin') -and ($composer_args -ne '')) {
|
||||
composer global config --no-plugins allow-plugins."$prefix$tool" true >$null 2>&1
|
||||
}
|
||||
composer global require $prefix$release $composer_args >$null 2>&1
|
||||
return composer global show $prefix$tool 2>&1 | findstr '^versions'
|
||||
} else {
|
||||
@ -191,6 +221,10 @@ Function Add-ComposertoolHelper() {
|
||||
$unix_scoped_dir = $scoped_dir.replace('\', '/')
|
||||
if(-not(Test-Path $scoped_dir)) {
|
||||
New-Item -ItemType Directory -Force -Path $scoped_dir > $null 2>&1
|
||||
Set-Content -Path $scoped_dir\composer.json -Value "{}"
|
||||
if((composer show $prefix$tool $tool_version -d $unix_scoped_dir -a 2>&1 | findstr '^type *: *composer-plugin') -and ($composer_args -ne '')) {
|
||||
composer config -d $unix_scoped_dir --no-plugins allow-plugins."$prefix$tool" true >$null 2>&1
|
||||
}
|
||||
composer require $prefix$release -d $unix_scoped_dir $composer_args >$null 2>&1
|
||||
}
|
||||
[System.Environment]::SetEnvironmentVariable(($tool.replace('-', '_') + '_bin'), "$scoped_dir\vendor\bin")
|
||||
@ -223,6 +257,7 @@ Function Add-Composertool() {
|
||||
[string]
|
||||
$scope
|
||||
)
|
||||
$composer_args = ""
|
||||
if($composer_version.split('.')[0] -ne "1") {
|
||||
$composer_args = "--ignore-platform-req=ext-*"
|
||||
if($tool -match "prestissimo|composer-prefetcher") {
|
||||
|
@ -44,8 +44,27 @@ configure_composer() {
|
||||
fi
|
||||
add_env_path "${src:?}"/configs/composer.env
|
||||
add_path "$composer_bin"
|
||||
if [ -n "$COMPOSER_TOKEN" ]; then
|
||||
add_env COMPOSER_AUTH '{"github-oauth": {"github.com": "'"$COMPOSER_TOKEN"'"}}'
|
||||
set_composer_auth
|
||||
}
|
||||
|
||||
# Function to setup authentication in composer.
|
||||
set_composer_auth() {
|
||||
if [ -n "$COMPOSER_AUTH_JSON" ]; then
|
||||
if php -r "json_decode('$COMPOSER_AUTH_JSON'); if(json_last_error() !== JSON_ERROR_NONE) { throw new Exception('invalid json'); }"; then
|
||||
echo "$COMPOSER_AUTH_JSON" | tee "$composer_home/auth.json" >/dev/null
|
||||
else
|
||||
add_log "${cross:?}" "composer" "Could not parse COMPOSER_AUTH_JSON as valid JSON"
|
||||
fi
|
||||
fi
|
||||
composer_auth=()
|
||||
if [ -n "$PACKAGIST_TOKEN" ]; then
|
||||
composer_auth+=( '"http-basic": {"repo.packagist.com": { "username": "token", "password": "'"$PACKAGIST_TOKEN"'"}}' )
|
||||
fi
|
||||
if [ -n "${GITHUB_TOKEN:-$COMPOSER_TOKEN}" ]; then
|
||||
composer_auth+=( '"github-oauth": {"github.com": "'"${GITHUB_TOKEN:-$COMPOSER_TOKEN}"'"}' )
|
||||
fi
|
||||
if ((${#composer_auth[@]})); then
|
||||
add_env COMPOSER_AUTH "{$(IFS=$','; echo "${composer_auth[*]}")}"
|
||||
fi
|
||||
}
|
||||
|
||||
@ -141,8 +160,12 @@ add_composertool_helper() {
|
||||
scope=$4
|
||||
composer_args=$5
|
||||
enable_extensions curl mbstring openssl
|
||||
tool_version=${release##*:}; [ "$tool_version" = "$tool" ] && tool_version="*"
|
||||
if [ "$scope" = "global" ]; then
|
||||
sudo rm -f "$composer_lock" >/dev/null 2>&1 || true
|
||||
if composer global show "$prefix$tool" "$tool_version" -a 2>&1 | grep -qE '^type *: *composer-plugin' && [ -n "$composer_args" ]; then
|
||||
composer global config --no-plugins allow-plugins."$prefix$tool" true >/dev/null 2>&1
|
||||
fi
|
||||
composer global require "$prefix$release" "$composer_args" >/dev/null 2>&1
|
||||
composer global show "$prefix$tool" 2>&1 | grep -E ^versions | sudo tee /tmp/composer.log >/dev/null 2>&1
|
||||
else
|
||||
@ -150,6 +173,9 @@ add_composertool_helper() {
|
||||
if ! [ -d "$scoped_dir" ]; then
|
||||
mkdir -p "$scoped_dir"
|
||||
echo '{}' | tee "$scoped_dir/composer.json" >/dev/null
|
||||
if composer show "$prefix$tool" "$tool_version" -d "$scoped_dir" -a 2>&1 | grep -qE '^type *: *composer-plugin' && [ -n "$composer_args" ]; then
|
||||
composer config -d "$scoped_dir" --no-plugins allow-plugins."$prefix$tool" true >/dev/null 2>&1
|
||||
fi
|
||||
composer require "$prefix$release" -d "$scoped_dir" "$composer_args" >/dev/null 2>&1
|
||||
composer show "$prefix$tool" -d "$scoped_dir" 2>&1 | grep -E ^versions | sudo tee /tmp/composer.log >/dev/null 2>&1
|
||||
fi
|
||||
@ -163,6 +189,7 @@ add_composertool() {
|
||||
release=$2
|
||||
prefix=$3
|
||||
scope=$4
|
||||
composer_args=
|
||||
composer_major_version=$(cut -d'.' -f 1 /tmp/composer_version)
|
||||
if [ "$composer_major_version" != "1" ]; then
|
||||
composer_args="--ignore-platform-req=ext-*"
|
||||
|
83
src/scripts/tools/brew.sh
Normal file
83
src/scripts/tools/brew.sh
Normal file
@ -0,0 +1,83 @@
|
||||
# Function to fetch a brew tap.
|
||||
fetch_brew_tap() {
|
||||
tap=$1
|
||||
tap_user=$(dirname "$tap")
|
||||
tap_name=$(basename "$tap")
|
||||
mkdir -p "$tap_dir/$tap_user"
|
||||
branch="$(git ls-remote --symref "https://github.com/$tap" HEAD | grep -Eo 'refs/heads/.*' | tr '\t' '\n' | head -1 | cut -d '/' -f 3)"
|
||||
get -s -n "" "https://github.com/$tap/archive/$branch.tar.gz" | sudo tar -xzf - -C "$tap_dir/$tap_user"
|
||||
sudo mv "$tap_dir/$tap_user/$tap_name-$branch" "$tap_dir/$tap_user/$tap_name"
|
||||
}
|
||||
|
||||
# Function to add a brew tap.
|
||||
add_brew_tap() {
|
||||
tap=$1
|
||||
if ! [ -d "$tap_dir/$tap" ]; then
|
||||
if [ "${runner:?}" = "self-hosted" ]; then
|
||||
brew tap "$tap" >/dev/null 2>&1
|
||||
else
|
||||
fetch_brew_tap "$tap" >/dev/null 2>&1
|
||||
if ! [ -d "$tap_dir/$tap" ]; then
|
||||
brew tap "$tap" >/dev/null 2>&1
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to get brew prefix.
|
||||
get_brew_prefix() {
|
||||
if [ "$(uname -s)" = "Linux" ]; then
|
||||
echo /home/linuxbrew/.linuxbrew
|
||||
else
|
||||
if [ "$(uname -m)" = "arm64" ]; then
|
||||
echo /opt/homebrew
|
||||
else
|
||||
echo /usr/local
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to add brew's bin directories to the PATH.
|
||||
add_brew_bins_to_path() {
|
||||
local brew_prefix=${1:-$(get_brew_prefix)}
|
||||
add_path "$brew_prefix"/bin
|
||||
add_path "$brew_prefix"/sbin
|
||||
}
|
||||
|
||||
# Function to add brew.
|
||||
add_brew() {
|
||||
brew_prefix="$(get_brew_prefix)"
|
||||
if ! [ -d "$brew_prefix"/bin ]; then
|
||||
step_log "Setup Brew"
|
||||
get -s "" "/tmp/install.sh" "https://raw.githubusercontent.com/Homebrew/install/master/install.sh" | bash -s >/dev/null 2>&1
|
||||
add_log "${tick:?}" "Brew" "Installed Homebrew"
|
||||
fi
|
||||
add_brew_bins_to_path "$brew_prefix"
|
||||
}
|
||||
|
||||
# Function to configure brew constants.
|
||||
configure_brew() {
|
||||
brew_path="$(command -v brew)"
|
||||
if [ -z "$brew_path" ]; then
|
||||
add_brew
|
||||
brew_path="$(command -v brew)"
|
||||
fi
|
||||
brew_path_dir="$(dirname "$brew_path")"
|
||||
brew_prefix="$brew_path_dir"/..
|
||||
brew_repo="$brew_path_dir/$(dirname "$(readlink "$brew_path")")"/..
|
||||
tap_dir="$brew_repo"/Library/Taps
|
||||
core_repo="$tap_dir"/homebrew/homebrew-core
|
||||
|
||||
export HOMEBREW_CHANGE_ARCH_TO_ARM=1
|
||||
export HOMEBREW_DEVELOPER=1
|
||||
export HOMEBREW_NO_AUTO_UPDATE=1
|
||||
export HOMEBREW_NO_ENV_HINTS=1
|
||||
export HOMEBREW_NO_INSTALL_CLEANUP=1
|
||||
export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1
|
||||
export brew_path
|
||||
export brew_path_dir
|
||||
export brew_prefix
|
||||
export brew_repo
|
||||
export tap_dir
|
||||
export core_repo
|
||||
}
|
@ -22,6 +22,8 @@ get_grpc_tag() {
|
||||
}
|
||||
|
||||
add_grpc_php_plugin_brew() {
|
||||
. "${0%/*}"/tools/brew.sh
|
||||
configure_brew
|
||||
brew install grpc
|
||||
brew link --force --overwrite grpc >/dev/null 2>&1
|
||||
grpc_tag="v$(brew info grpc | grep "grpc:" | grep -Eo "[0-9]+\.[0-9]+\.[0-9]+")"
|
||||
|
@ -140,6 +140,20 @@ add_list() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
# Function to check if a PPA exists
|
||||
check_ppa() {
|
||||
ppa=$1
|
||||
ppa_url=${2:-"$lp_ppa/$ppa/ubuntu"}
|
||||
package_dist=${3:-"$VERSION_CODENAME"}
|
||||
branches=${4:-main}
|
||||
ppa_search="deb .*$ppa_url $package_dist .*$branches"
|
||||
if check_lists "$ppa" "$ppa_search"; then
|
||||
return 0;
|
||||
else
|
||||
return 1;
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to remove a PPA.
|
||||
remove_list() {
|
||||
ppa=${1-ondrej/php}
|
||||
@ -153,8 +167,10 @@ add_ppa() {
|
||||
set_base_version
|
||||
ppa=${1:-ondrej/php}
|
||||
if [[ "$ID" = "ubuntu" || "$ID_LIKE" =~ ubuntu ]] && [[ "$ppa" =~ "ondrej/" ]]; then
|
||||
[ "${debug:?}" = "debug" ] && add_list "$ppa" "$lp_ppa/$ppa/ubuntu" "$lp_ppa/$ppa/ubuntu" "$VERSION_CODENAME" "main/debug"
|
||||
add_list "$ppa"
|
||||
elif [[ "$ID" = "debian" || "$ID_LIKE" =~ debian ]] && [[ "$ppa" =~ "ondrej/" ]]; then
|
||||
[ "${debug:?}" = "debug" ] && add_list "$ppa" "$sury"/"${ppa##*/}"/ "$sury"/"${ppa##*/}"/apt.gpg "$VERSION_CODENAME" "main/debug"
|
||||
add_list "$ppa" "$sury"/"${ppa##*/}"/ "$sury"/"${ppa##*/}"/apt.gpg
|
||||
else
|
||||
add_list "$ppa"
|
||||
|
@ -1,15 +1,17 @@
|
||||
Function Get-ProtobufTag() {
|
||||
$releases = 'https://github.com/protocolbuffers/protobuf/releases'
|
||||
if("$protobuf_tag" -eq "latest") {
|
||||
$protobuf_tag = (Invoke-RestMethod https://api.github.com/repos/protocolbuffers/protobuf/releases).tag_name | Where-Object { $_ -match "v\d+.\d+.\d+$" } | Select-Object -First 1
|
||||
$protobuf_tag = (Invoke-WebRequest -UseBasicParsing -Uri $releases/latest).BaseResponse.RequestMessage.RequestUri.Segments[-1]
|
||||
} else {
|
||||
try {
|
||||
[net.httpWebRequest] $request = [net.webRequest]::create("https://github.com/protocolbuffers/protobuf/releases/tag/v$protobuf_tag")
|
||||
$req.Method = "HEAD"
|
||||
$protobuf_tag = $protobuf_tag -replace '^v', ''
|
||||
[net.httpWebRequest] $request = [net.webRequest]::create("$releases/tag/v$protobuf_tag")
|
||||
$request.Method = "HEAD"
|
||||
[net.httpWebResponse] $response = $request.getResponse()
|
||||
$response.Close()
|
||||
$protobuf_tag = "v$protobuf_tag"
|
||||
} catch {
|
||||
$protobuf_tag = (Invoke-RestMethod https://api.github.com/repos/protocolbuffers/protobuf/releases).tag_name | Where-Object { $_ -match "v\d+.\d+.\d+$" } | Select-Object -First 1
|
||||
$protobuf_tag = (Invoke-WebRequest -UseBasicParsing -Uri $releases/latest).BaseResponse.RequestMessage.RequestUri.Segments[-1]
|
||||
}
|
||||
}
|
||||
return $protobuf_tag
|
||||
@ -18,7 +20,7 @@ Function Get-ProtobufTag() {
|
||||
Function Add-Protoc() {
|
||||
param(
|
||||
[Parameter(Mandatory = $true, Position = 0, HelpMessage = 'The PHP version to be installed')]
|
||||
[ValidatePattern('^latest$|^(v?)\d+\.\d+\.\d+$')]
|
||||
[ValidatePattern('^latest$|^(v?)\d+\.\d+(\.\d+)?$')]
|
||||
[string] $protobuf_tag
|
||||
)
|
||||
$protobuf_tag = Get-ProtobufTag
|
||||
|
@ -1,12 +1,35 @@
|
||||
add_symfony() {
|
||||
if [ "$(uname -s)" = "Linux" ]; then
|
||||
echo 'deb [trusted=yes] https://repo.symfony.com/apt/ /' | sudo tee /etc/apt/sources.list.d/symfony-cli.list >/dev/null 2>&1
|
||||
update_lists symfony repo.symfony.com
|
||||
install_packages symfony-cli
|
||||
elif [ "$(uname -s)" = "Darwin" ]; then
|
||||
add_symfony_with_brew() {
|
||||
add_brew_tap symfony-cli/homebrew-tap
|
||||
brew install symfony-cli/tap/symfony-cli >/dev/null 2>&1
|
||||
brew install symfony-cli/tap/symfony-cli
|
||||
}
|
||||
|
||||
get_symfony_artifact_url() {
|
||||
arch=$(dpkg --print-architecture)
|
||||
url=$(get -s -n "" https://raw.githubusercontent.com/symfony-cli/homebrew-tap/main/Formula/symfony-cli.rb 2<&1 | grep -m 1 "url.*linux.*${arch}" | cut -d\" -f 2)
|
||||
if [ -z "$url" ]; then
|
||||
url=$(get -s -n "" https://api.github.com/repos/symfony-cli/symfony-cli/releases 2<&1 | grep -m 1 "url.*linux.*${arch}.*gz\"" | cut -d\" -f 4)
|
||||
fi
|
||||
echo "$url"
|
||||
}
|
||||
|
||||
add_symfony_helper() {
|
||||
if [ "$(uname -s)" = "Linux" ]; then
|
||||
url="$(get_symfony_artifact_url)"
|
||||
if [ -z "$url" ]; then
|
||||
. "${0%/*}"/tools/brew.sh
|
||||
configure_brew
|
||||
add_symfony_with_brew
|
||||
else
|
||||
get -s -n "" "$url" | sudo tar -xz -C "${tool_path_dir:?}" 2>/dev/null
|
||||
sudo chmod a+x /usr/local/bin/symfony
|
||||
fi
|
||||
elif [ "$(uname -s)" = "Darwin" ]; then
|
||||
add_symfony_with_brew
|
||||
fi
|
||||
}
|
||||
|
||||
add_symfony() {
|
||||
add_symfony_helper >/dev/null 2>&1
|
||||
symfony_path="$(command -v symfony)"
|
||||
if [[ -n "$symfony_path" ]]; then
|
||||
sudo ln -s "$symfony_path" "${tool_path_dir:?}"/symfony-cli
|
||||
|
@ -4,7 +4,7 @@ export cross="✗"
|
||||
export curl_opts=(-sL)
|
||||
export old_versions="5.[3-5]"
|
||||
export jit_versions="8.[0-9]"
|
||||
export nightly_versions="8.[2-9]"
|
||||
export nightly_versions="8.[3-9]"
|
||||
export xdebug3_versions="7.[2-4]|8.[0-9]"
|
||||
export latest="releases/latest/download"
|
||||
export github="https://github.com/shivammathur"
|
||||
@ -43,13 +43,15 @@ set_output() {
|
||||
name=$1
|
||||
value=$2
|
||||
if [ "${GITHUB_ACTIONS}" = "true" ]; then
|
||||
echo "::set-output name=${name}::${value}"
|
||||
echo "${name}=${value}" | tee -a "$GITHUB_OUTPUT" >/dev/null 2>&1
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to read env inputs.
|
||||
read_env() {
|
||||
update="${update:-${UPDATE:-false}}"
|
||||
[ "${debug:-${DEBUG:-false}}" = "true" ] && debug=debug && update=true || debug=release
|
||||
[ "${phpts:-${PHPTS:-nts}}" = "ts" ] && ts=zts && update=true || ts=nts
|
||||
fail_fast="${fail_fast:-${FAIL_FAST:-false}}"
|
||||
[[ -z "${ImageOS}" && -z "${ImageVersion}" ]] && _runner=self-hosted || _runner=github
|
||||
runner="${runner:-${RUNNER:-$_runner}}"
|
||||
@ -58,6 +60,16 @@ read_env() {
|
||||
fail_fast=true
|
||||
add_log "$cross" "Runner" "Runner set as github in self-hosted environment"
|
||||
fi
|
||||
|
||||
# Set Update to true if the ubuntu github image does not have PHP PPA.
|
||||
if [[ "$runner" = "github" && "${ImageOS}" =~ ubuntu.* ]]; then
|
||||
check_ppa ondrej/php || update=true
|
||||
fi
|
||||
|
||||
export fail_fast
|
||||
export runner
|
||||
export update
|
||||
export ts
|
||||
}
|
||||
|
||||
# Function to download a file using cURL.
|
||||
@ -151,6 +163,7 @@ self_hosted_setup() {
|
||||
exit 1
|
||||
else
|
||||
self_hosted_helper >/dev/null 2>&1
|
||||
add_env RUNNER_TOOL_CACHE /tmp
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
@ -3,7 +3,7 @@ param (
|
||||
[ValidateNotNull()]
|
||||
[ValidateLength(1, [int]::MaxValue)]
|
||||
[string]
|
||||
$version = '8.1',
|
||||
$version = '8.2',
|
||||
[Parameter(Position = 1, Mandatory = $true)]
|
||||
[ValidateNotNull()]
|
||||
[ValidateLength(1, [int]::MaxValue)]
|
||||
@ -43,7 +43,7 @@ Function Set-Output() {
|
||||
$value
|
||||
)
|
||||
if ($env:GITHUB_ACTIONS -eq 'true') {
|
||||
Write-Output "::set-output name=$output::$value"
|
||||
Add-Content "$output=$value" -Path $env:GITHUB_OUTPUT -Encoding utf8
|
||||
}
|
||||
}
|
||||
|
||||
@ -88,6 +88,7 @@ Function Add-Path {
|
||||
}
|
||||
if ($env:GITHUB_PATH) {
|
||||
Add-Content $PathItem -Path $env:GITHUB_PATH -Encoding utf8
|
||||
$env:PATH += "$PathItem;"
|
||||
} else {
|
||||
$newPath = (Get-ItemProperty -Path 'hkcu:\Environment' -Name PATH).Path.replace("$PathItem;", '')
|
||||
$newPath = $PathItem + ';' + $newPath
|
||||
@ -216,6 +217,7 @@ Function Add-PhpConfig {
|
||||
|
||||
# Function to get PHP from GitHub releases cache
|
||||
Function Set-PhpCache {
|
||||
try {
|
||||
try {
|
||||
$release = Invoke-RestMethod https://api.github.com/repos/shivammathur/php-builder-windows/releases/tags/php$version
|
||||
$asset = $release.assets | ForEach-Object {
|
||||
@ -223,11 +225,36 @@ Function Set-PhpCache {
|
||||
return $_.name
|
||||
}
|
||||
}
|
||||
if($null -eq $asset) {
|
||||
throw "Asset not found"
|
||||
}
|
||||
} catch {
|
||||
$release = Invoke-WebRequest $php_builder/releases/expanded_assets/php$version
|
||||
$asset = $release.links.href | ForEach-Object {
|
||||
if($_ -match "php-$version.[0-9]+$env:PHPTS-Win32-.*-$arch.zip") {
|
||||
return $_.split('/')[-1]
|
||||
}
|
||||
}
|
||||
}
|
||||
Invoke-WebRequest -UseBasicParsing -Uri $php_builder/releases/download/php$version/$asset -OutFile $php_dir\$asset
|
||||
Set-PhpDownloadCache -Path $php_dir CurrentUser
|
||||
} catch { }
|
||||
}
|
||||
|
||||
# Function to add debug symbols to PHP.
|
||||
Function Add-DebugSymbols {
|
||||
$release = Invoke-RestMethod https://api.github.com/repos/shivammathur/php-builder-windows/releases/tags/php$version
|
||||
$dev = if ($version -match $nightly_versions) { '-dev' } else { '' }
|
||||
$asset = $release.assets | ForEach-Object {
|
||||
if($_.name -match "php-debug-pack-$version.[0-9]+$dev$env:PHPTS-Win32-.*-$arch.zip") {
|
||||
return $_.name
|
||||
}
|
||||
}
|
||||
Invoke-WebRequest -UseBasicParsing -Uri $php_builder/releases/download/php$version/$asset -OutFile $php_dir\$asset
|
||||
Expand-Archive -Path $php_dir\$asset -DestinationPath $php_dir -Force
|
||||
Get-ChildItem -Path $php_dir -Filter php_*.pdb | Move-Item -Destination $ext_dir
|
||||
}
|
||||
|
||||
# Function to install nightly version of PHP
|
||||
Function Install-PhpNightly {
|
||||
Invoke-WebRequest -UseBasicParsing -Uri $php_builder/releases/latest/download/Get-PhpNightly.ps1 -OutFile $php_dir\Get-PhpNightly.ps1 > $null 2>&1
|
||||
@ -295,6 +322,7 @@ if(-not($env:ImageOS) -and -not($env:ImageVersion)) {
|
||||
New-Item $php_dir -Type Directory -Force > $null 2>&1
|
||||
Add-Path -PathItem $php_dir
|
||||
setx PHPROOT $php_dir >$null 2>&1
|
||||
Add-Env -EnvName RUNNER_TOOL_CACHE -EnvValue $env:TEMP
|
||||
} else {
|
||||
$current_profile = "$PSHOME\Profile.ps1"
|
||||
if(-not(Test-Path -LiteralPath $current_profile)) {
|
||||
@ -349,6 +377,10 @@ if ($null -eq $installed -or -not("$($installed.Version).".StartsWith(($version
|
||||
Add-PhpConfig
|
||||
}
|
||||
|
||||
if($env:DEBUG -eq 'true') {
|
||||
Add-DebugSymbols
|
||||
}
|
||||
|
||||
$installed = Get-Php -Path $php_dir
|
||||
if($installed.MajorMinorVersion -ne $version) {
|
||||
Add-Log $cross "PHP" "Could not setup PHP $version"
|
||||
|
@ -21,8 +21,12 @@ interface IRef {
|
||||
export async function getSemverVersion(data: RS): Promise<string> {
|
||||
const search: string = data['version_prefix'] + data['version'];
|
||||
const url = `https://api.github.com/repos/${data['repository']}/git/matching-refs/tags%2F${search}.`;
|
||||
const token: string = await utils.readEnv('COMPOSER_TOKEN');
|
||||
const response: RS = await fetch.fetch(url, token);
|
||||
let github_token: string = await utils.readEnv('GITHUB_TOKEN');
|
||||
const composer_token: string = await utils.readEnv('COMPOSER_TOKEN');
|
||||
if (composer_token && !github_token) {
|
||||
github_token = composer_token;
|
||||
}
|
||||
const response: RS = await fetch.fetch(url, github_token);
|
||||
if (response.error || response.data === '[]') {
|
||||
data['error'] = response.error ?? `No version found with prefix ${search}.`;
|
||||
return data['version'];
|
||||
|
26
src/utils.ts
26
src/utils.ts
@ -246,7 +246,8 @@ export async function CSVArray(values_csv: string): Promise<Array<string>> {
|
||||
return value
|
||||
.trim()
|
||||
.replace(/^["']|["']$|(?<==)["']/g, '')
|
||||
.replace(/=(((?!E_).)*[?{}|&~![()^]+((?!E_).)+)/, "='$1'");
|
||||
.replace(/=(((?!E_).)*[?{}|&~![()^]+((?!E_).)+)/, "='$1'")
|
||||
.replace(/=(.*?)(=.*)/, "='$1$2'");
|
||||
})
|
||||
.filter(Boolean);
|
||||
}
|
||||
@ -413,3 +414,26 @@ export async function parseExtensionSource(
|
||||
prefix
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Log to console
|
||||
*
|
||||
* @param variable
|
||||
* @param command
|
||||
* @param os
|
||||
*/
|
||||
export async function setVariable(
|
||||
variable: string,
|
||||
command: string,
|
||||
os: string
|
||||
): Promise<string> {
|
||||
switch (os) {
|
||||
case 'win32':
|
||||
return '\n$' + variable + ' = ' + command + '\n';
|
||||
|
||||
case 'linux':
|
||||
case 'darwin':
|
||||
default:
|
||||
return '\n' + variable + '="$(' + command + ')"\n';
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user