diff --git a/.eslintrc.json b/.eslintrc.json
deleted file mode 100644
index e70aaae22..000000000
--- a/.eslintrc.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "env": { "node": true, "jest": true },
- "parser": "@typescript-eslint/parser",
- "parserOptions": { "ecmaVersion": 2021, "sourceType": "module" },
- "extends": [
- "eslint:recommended",
- "plugin:@typescript-eslint/eslint-recommended",
- "plugin:@typescript-eslint/recommended",
- "plugin:import/errors",
- "plugin:import/warnings",
- "plugin:import/typescript",
- "plugin:prettier/recommended",
- "prettier"
- ],
- "plugins": ["@typescript-eslint", "jest"]
-}
\ No newline at end of file
diff --git a/.github/ISSUE_TEMPLATE/bug.md b/.github/ISSUE_TEMPLATE/bug.md
deleted file mode 100644
index 09e78faa7..000000000
--- a/.github/ISSUE_TEMPLATE/bug.md
+++ /dev/null
@@ -1,42 +0,0 @@
----
-name: Bug report
-about: Nice, you found a bug!
-title: ''
-labels: 'bug'
-assignees: 'shivammathur'
-
----
-
-**Describe the bug**
-
-
-**Version**
-- [ ] I have checked releases, and the bug exists in the latest patch version of `v1` or `v2`.
-- [ ] `v2`
-- [ ] `v1`
-
-**Runners**
-
-- [ ] GitHub Hosted
-- [ ] Self Hosted
-
-**Operating systems**
-
-
-**PHP versions**
-
-
-**To Reproduce**
-
-
-**Expected behavior**
-
-
-**Screenshots/Logs**
-
-
-**Additional context**
-
-
-**Are you willing to submit a PR?**
-
diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml
new file mode 100644
index 000000000..c640818eb
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug.yml
@@ -0,0 +1,94 @@
+name: Bug report
+description: Nice, you found a bug!
+title: "Bug: "
+labels: ["bug"]
+assignees: ["shivammathur"]
+body:
+ - type: markdown
+ attributes:
+ value: "Please fill out the sections below to help us address your issue."
+
+ - type: textarea
+ id: bug-description
+ attributes:
+ label: "Describe the bug"
+ placeholder: "Please describe the bug concisely."
+ validations:
+ required: true
+
+ - type: checkboxes
+ id: version
+ attributes:
+ label: "Version"
+ description: "I have checked releases, and the bug exists in the latest patch version of `v1` or `v2`."
+ options:
+ - label: "v2"
+ - label: "v1"
+ validations:
+ required: true
+
+ - type: dropdown
+ id: runners
+ attributes:
+ label: "Runners"
+ description: "Please choose the GitHub Action runner your workflow uses."
+ options:
+ - "GitHub Hosted"
+ - "Self Hosted"
+ validations:
+ required: true
+
+ - type: textarea
+ id: operating-systems
+ attributes:
+ label: "Operating systems"
+ placeholder: "e.g., Ubuntu 20.04, Windows Server 2019, etc."
+ validations:
+ required: true
+
+ - type: textarea
+ id: php-versions
+ attributes:
+ label: "PHP versions"
+ placeholder: "e.g., PHP 7.4, PHP 8.0, etc."
+ validations:
+ required: true
+
+ - type: textarea
+ id: steps-to-reproduce
+ attributes:
+ label: "To Reproduce"
+ placeholder: "Please provide the relevant steps of your workflow `.yml` file."
+ validations:
+ required: true
+
+ - type: textarea
+ id: expected-behavior
+ attributes:
+ label: "Expected behavior"
+ placeholder: "A clear and concise description of what you expected to happen."
+ validations:
+ required: true
+
+ - type: textarea
+ id: screenshots-logs
+ attributes:
+ label: "Screenshots/Logs"
+ placeholder: "Drag and drop images or paste logs here..."
+
+ - type: textarea
+ id: additional-context
+ attributes:
+ label: "Additional context"
+ placeholder: "Add any other context about the problem here."
+
+ - type: dropdown
+ id: willing-to-submit-pr
+ attributes:
+ label: "Are you willing to submit a PR?"
+ description: "We accept pull requests targeting the develop branch."
+ options:
+ - "Yes"
+ - "No"
+ validations:
+ required: true
diff --git a/.github/ISSUE_TEMPLATE/feature.md b/.github/ISSUE_TEMPLATE/feature.md
deleted file mode 100644
index c88e80706..000000000
--- a/.github/ISSUE_TEMPLATE/feature.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-name: Feature request
-about: Suggest a new feature
-title: ''
-labels: 'enhancement'
-assignees: 'shivammathur'
-
----
-
-**Describe the feature**
-
-
-**Version**
-- [ ] I have checked releases, and the feature is missing in the latest patch version of `v2`.
-
-**Underlying issue**
-
-
-**Describe alternatives**
-
-
-**Additional context**
-
-
-**Are you willing to submit a PR?**
-
diff --git a/.github/ISSUE_TEMPLATE/feature.yml b/.github/ISSUE_TEMPLATE/feature.yml
new file mode 100644
index 000000000..82230800c
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature.yml
@@ -0,0 +1,58 @@
+name: Feature request
+description: Suggest a new feature
+title: "Feature: "
+labels: ["enhancement"]
+assignees: ["shivammathur"]
+body:
+ - type: markdown
+ attributes:
+ value: "Please fill out the sections below to help us understand your new feature proposal."
+
+ - type: textarea
+ id: feature-description
+ attributes:
+ label: "Describe the feature"
+ placeholder: "A clear and concise description of what you want and why."
+ validations:
+ required: true
+
+ - type: checkboxes
+ id: version-check
+ attributes:
+ label: "Please check the latest release"
+ options:
+ - label: "I have checked releases, and the feature is missing in the latest patch version of `v2`."
+ required: true
+
+ - type: textarea
+ id: underlying-issue
+ attributes:
+ label: "Underlying issue"
+ placeholder: "Please describe the issue this would solve."
+ validations:
+ required: true
+
+ - type: textarea
+ id: alternatives
+ attributes:
+ label: "Describe alternatives"
+ placeholder: "Please mention any alternative solutions you've considered."
+ validations:
+ required: false
+
+ - type: textarea
+ id: additional-context
+ attributes:
+ label: "Additional context"
+ placeholder: "Drag and drop images or paste any additional information here..."
+
+ - type: dropdown
+ id: willing-to-submit-pr
+ attributes:
+ label: "Are you willing to submit a PR?"
+ description: "We accept pull requests targeting the develop branch."
+ options:
+ - "Yes"
+ - "No"
+ validations:
+ required: true
diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
index e13998410..c458d39e8 100644
--- a/.github/workflows/docs.yml
+++ b/.github/workflows/docs.yml
@@ -15,14 +15,35 @@ jobs:
strategy:
fail-fast: false
matrix:
- operating-system: [ubuntu-24.04, ubuntu-22.04, ubuntu-20.04, windows-2022, macos-12]
- 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', '8.4']
+ operating-system: [ubuntu-24.04, ubuntu-22.04, ubuntu-20.04, windows-2022, macos-13]
+ 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', '8.4', '8.5']
steps:
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-versions }}
- - name: Create for Linux and macOS
+ tools: none
+ - name: Create file with all extensions for Linux and macOS
+ env:
+ file: php${{ matrix.php-versions }}-${{ matrix.operating-system }}.md
+ version: ${{ matrix.php-versions }}
+ if: matrix.operating-system != 'windows-2022'
+ run: |
+ php -m >> "$file.all"
+ - name: Create file with all extensions for Windows
+ env:
+ file: php${{ matrix.php-versions }}-${{ matrix.operating-system }}.md
+ version: ${{ matrix.php-versions }}
+ if: matrix.operating-system == 'windows-2022'
+ run: |
+ php -m | Out-File -FilePath "$env:file.all" -Append
+ - name: Setup PHP
+ uses: shivammathur/setup-php@v2
+ with:
+ php-version: ${{ matrix.php-versions }}
+ extensions: none
+ tools: none
+ - name: Create final file for Linux and macOS
env:
file: php${{ matrix.php-versions }}-${{ matrix.operating-system }}.md
version: ${{ matrix.php-versions }}
@@ -31,10 +52,20 @@ jobs:
echo "## PHP $version" >> "$file"
printf "\n" >> "$file"
echo "\`\`\`" >> "$file"
- php -m >> "$file"
+ php -m >> "$file.builtin"
+ while IFS= read -r line; do
+ if [[ $line == [* || -z "${line// }" ]]; then
+ echo "$line" >> "$file"
+ elif grep -q "^$line" "$file.builtin"; then
+ echo "$line (builtin)" >> "$file"
+ else
+ echo "$line (shared)" >> "$file"
+ fi
+ done < "$file.all"
echo "\`\`\`" >> "$file"
printf "\n" >> "$file"
- - name: Create for Windows
+ rm "$file.all" "$file.builtin"
+ - name: Create final file for Windows
env:
file: php${{ matrix.php-versions }}-${{ matrix.operating-system }}.md
version: ${{ matrix.php-versions }}
@@ -42,8 +73,19 @@ jobs:
run: |
Write-Output "## PHP ${{ matrix.php-versions }}`n" | Out-File -FilePath "$env:file"
Write-Output "``````" | Out-File -FilePath "$env:file" -Append
- php -m | Out-File -FilePath "$env:file" -Append
+ php -m | Out-File -FilePath "$env:file.builtin" -Append
+ Get-Content "$env:file.all" | ForEach-Object {
+ if ($_.startsWith('[') -or -not $_.trim()) {
+ Write-Output "$_" | Out-File -FilePath "$env:file" -Append
+ } elseif ($_ -in (Get-Content "$env:file.builtin")) {
+ Write-Output "$_ (builtin)" | Out-File -FilePath "$env:file" -Append
+ } else {
+ Write-Output "$_ (shared)" | Out-File -FilePath "$env:file" -Append
+ }
+ }
Write-Output "```````n" | Out-File -FilePath "$env:file" -Append
+ Remove-Item "$env:file.all" -Force
+ Remove-Item "$env:file.builtin" -Force
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
@@ -72,12 +114,12 @@ jobs:
git config --local user.name "${{ github.repository_owner }}"
- name: Combine
run: |
- for os in ubuntu-24.04 ubuntu-22.04 ubuntu-20.04 windows-2022 windows-2019 macos-11 macos-12 macos-13; do
+ for os in ubuntu-24.04 ubuntu-22.04 ubuntu-20.04 windows-2022 windows-2019 macos-13 macos-14 macos-15; do
echo "These are extensions which are loaded by default on the following PHP versions. More extensions which are available as packages and available on pecl are supported by setup-php. Refer to [php extension support](https://github.com/shivammathur/setup-php#heavy_plus_sign-php-extension-support) for more details." > Php-extensions-loaded-on-"$os".md
- for version in 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 8.4; do
- if [[ "$os" = "macos-11" || "$os" = "macos-13" ]]; then
- cat lists/php"$version"-macos-12.md >> Php-extensions-loaded-on-"$os".md
- elif [ "$os" = "windows-2019" ]; then
+ for version in 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 8.4 8.5; do
+ if [[ "${os%-*}" = "macos" ]]; then
+ cat lists/php"$version"-macos-13.md >> Php-extensions-loaded-on-"$os".md
+ elif [ "${os%-*}" = "windows" ]; then
cat lists/php"$version"-windows-2022.md >> Php-extensions-loaded-on-"$os".md
else
cat lists/php"$version"-"$os".md >> Php-extensions-loaded-on-"$os".md
diff --git a/.github/workflows/node.yml b/.github/workflows/node.yml
index f851d810b..0e4a4a529 100644
--- a/.github/workflows/node.yml
+++ b/.github/workflows/node.yml
@@ -33,10 +33,10 @@ jobs:
with:
fetch-depth: 2
- - name: Setup Node.js 16.x
+ - name: Setup Node.js 20.x
uses: actions/setup-node@v4
with:
- node-version: 16.x
+ node-version: 20.x
- name: Install dependencies
run: npm install
@@ -54,7 +54,7 @@ jobs:
run: npm audit
- name: Send Coverage
- uses: codecov/codecov-action@v4
+ uses: codecov/codecov-action@v5
with:
token: ${{ secrets.CODECOV_TOKEN }}
files: coverage/lcov.info
diff --git a/.github/workflows/php.yml b/.github/workflows/php.yml
index 83c6e7eb9..312b599c1 100644
--- a/.github/workflows/php.yml
+++ b/.github/workflows/php.yml
@@ -28,8 +28,8 @@ jobs:
strategy:
fail-fast: false
matrix:
- operating-system: [ubuntu-24.04, ubuntu-22.04, ubuntu-20.04, windows-2019, macos-13]
- 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', '8.4']
+ operating-system: [ubuntu-24.04, ubuntu-22.04, ubuntu-20.04, windows-2022, macos-13]
+ 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', '8.4', '8.5']
include:
- operating-system: ubuntu-24.04
php-versions: ''
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index f90599f5a..8a580ca3e 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -30,7 +30,7 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@v4
with:
- node-version: '16.x'
+ node-version: '20.x'
registry-url: https://registry.npmjs.org
- name: Install dependencies and add lib
diff --git a/README.md b/README.md
index 2ce8b1e77..b48c4d1ad 100644
--- a/README.md
+++ b/README.md
@@ -10,7 +10,7 @@
-
+
@@ -73,11 +73,12 @@ Both `GitHub-hosted` and `self-hosted` runners are supported by `setup-php` on t
| Ubuntu 24.04 | `ubuntu-24.04` | `PHP 8.3` |
| Ubuntu 22.04 | `ubuntu-latest` or `ubuntu-22.04` | `PHP 8.1` |
| Ubuntu 20.04 | `ubuntu-20.04` | `PHP 7.4` to `PHP 8.3` |
+| Windows Server 2025 | `windows-2025` | `PHP 8.3` |
| Windows Server 2022 | `windows-latest` or `windows-2022` | `PHP 8.3` |
| Windows Server 2019 | `windows-2019` | `PHP 8.3` |
-| macOS Sonoma 14.x | `macos-14` | - |
+| macOS Sequoia 15.x | `macos-15` | - |
+| macOS Sonoma 14.x | `macos-latest` or `macos-14` | - |
| macOS Ventura 13.x | `macos-13` | `PHP 8.3` |
-| macOS Monterey 12.x | `macos-latest` or `macos-12` | `PHP 8.3` |
### Self-Hosted Runners
@@ -86,13 +87,13 @@ Both `GitHub-hosted` and `self-hosted` runners are supported by `setup-php` on t
| Ubuntu 24.04 | `self-hosted` or `Linux` |
| Ubuntu 22.04 | `self-hosted` or `Linux` |
| Ubuntu 20.04 | `self-hosted` or `Linux` |
+| Debian 12 | `self-hosted` or `Linux` |
| Debian 11 | `self-hosted` or `Linux` |
-| 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 Sequoia 15.x x86_64/arm64 | `self-hosted` or `macOS` |
| macOS Sonoma 14.x x86_64/arm64 | `self-hosted` or `macOS` |
| macOS Ventura 13.x x86_64/arm64 | `self-hosted` or `macOS` |
-| macOS Monterey 12.x x86_64/arm64 | `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.
@@ -102,9 +103,9 @@ Both `GitHub-hosted` and `self-hosted` runners are supported by `setup-php` on t
On all supported OS/Platforms the following PHP versions can be set up as per the runner.
-- PHP 5.3 to PHP 8.4 on GitHub-hosted runners, except for macOS ARM64 runners (macos-14).
-- PHP 5.6 to PHP 8.4 on GitHub-hosted macOS ARM64 runners (macos-14).
-- PHP 5.6 to PHP 8.4 on self-hosted runners.
+- PHP 5.3 to PHP 8.5 on GitHub-hosted runners, except for macOS ARM64 runners (macos-14).
+- PHP 5.6 to PHP 8.5 on GitHub-hosted macOS ARM64 runners (macos-14).
+- PHP 5.6 to PHP 8.5 on self-hosted runners.
| PHP Version | Stability | Release Support | Runner Support |
|-------------|-----------|-----------------------|--------------------------------|
@@ -121,10 +122,11 @@ On all supported OS/Platforms the following PHP versions can be set up as per th
| `8.1` | `Stable` | `Security fixes only` | `GitHub-hosted`, `self-hosted` |
| `8.2` | `Stable` | `Active` | `GitHub-hosted`, `self-hosted` |
| `8.3` | `Stable` | `Active` | `GitHub-hosted`, `self-hosted` |
-| `8.4` | `Nightly` | `In development` | `GitHub-hosted`, `self-hosted` |
+| `8.4` | `Stable` | `Active` | `GitHub-hosted`, `self-hosted` |
+| `8.5` | `Nightly` | `In development` | `GitHub-hosted`, `self-hosted` |
**Notes:**
-- Specifying `8.4` in `php-version` input installs a nightly build of `PHP 8.4.0-dev`. See [nightly build setup](#nightly-build-setup) for more information.
+- Specifying `8.5` in `php-version` input installs a nightly build of `PHP 8.5.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
@@ -137,7 +139,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.3'
+ php-version: '8.4'
extensions: imagick, swoole
```
@@ -165,7 +167,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.3'
+ php-version: '8.4'
extensions: xdebug-beta
```
@@ -177,7 +179,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.3'
+ php-version: '8.4'
extensions: :opcache
```
@@ -189,7 +191,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.3'
+ php-version: '8.4'
extensions: none, mbstring
```
@@ -199,7 +201,7 @@ 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.3'
+ php-version: '8.4'
extensions: intl-70.1
```
@@ -216,7 +218,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.3'
+ php-version: '8.4'
extensions: oci8
env:
fail-fast: true
@@ -226,13 +228,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`], [`box`], [`castor`], [`churn`], [`codeception`], [`composer`], [`composer-normalize`], [`composer-prefetcher`], [`composer-require-checker`], [`composer-unused`], [`cs2pr`], [`deployer`], [`ecs`], [`flex`], [`grpc_php_plugin`], [`infection`], [`parallel-lint`], [`pecl`], [`phan`], [`phing`], [`phinx`], [`phive`], [`php-config`], [`php-cs-fixer`], [`php-scoper`], [`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`]
+[`behat`], [`blackfire`], [`blackfire-player`], [`box`], [`castor`], [`churn`], [`codeception`], [`composer`], [`composer-dependency-analyser`], [`composer-normalize`], [`composer-prefetcher`], [`composer-require-checker`], [`composer-unused`], [`cs2pr`], [`deployer`], [`ecs`], [`flex`], [`grpc_php_plugin`], [`infection`], [`parallel-lint`], [`pecl`], [`phan`], [`phing`], [`phinx`], [`phive`], [`php-config`], [`php-cs-fixer`], [`php-scoper`], [`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.3'
+ php-version: '8.4'
tools: php-cs-fixer, phpunit
```
@@ -242,7 +244,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.3'
+ php-version: '8.4'
tools: vimeo/psalm
```
@@ -262,8 +264,8 @@ 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.3'
- tools: php-cs-fixer:3.39, phpunit:10.4
+ php-version: '8.4'
+ tools: php-cs-fixer:3.64, phpunit:11.4
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
```
@@ -274,7 +276,7 @@ These tools can be set up globally using the `tools` input. It accepts a string
- name: Setup PHP with composer v2
uses: shivammathur/setup-php@v2
with:
- php-version: '8.3'
+ php-version: '8.4'
tools: composer:v2
```
@@ -284,7 +286,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.3'
+ php-version: '8.4'
tools: none
```
@@ -300,7 +302,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.3'
+ php-version: '8.4'
tools: deployer
env:
fail-fast: true
@@ -317,7 +319,7 @@ These tools can be set up globally using the `tools` input. It accepts a string
- name: Setup PHP with composer and custom process timeout
uses: shivammathur/setup-php@v2
with:
- php-version: '8.3'
+ php-version: '8.4'
env:
COMPOSER_PROCESS_TIMEOUT: 300
```
@@ -333,7 +335,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.3'
+ php-version: '8.4'
coverage: xdebug
```
@@ -361,7 +363,7 @@ Runs on PHP 7.1 and newer PHP versions.
- name: Setup PHP with PCOV
uses: shivammathur/setup-php@v2
with:
- php-version: '8.3'
+ php-version: '8.4'
ini-values: pcov.directory=api #optional, see above for usage.
coverage: pcov
```
@@ -391,7 +393,7 @@ Disable coverage for these reasons:
- name: Setup PHP with no coverage driver
uses: shivammathur/setup-php@v2
with:
- php-version: '8.3'
+ php-version: '8.4'
coverage: none
```
@@ -404,16 +406,18 @@ Disable coverage for these reasons:
#### `php-version` (optional)
- Specify the PHP version you want to set up.
-- Accepts a `string`. For example `'8.3'`.
+- Accepts a `string`. For example `'8.4'`.
- Accepts `lowest` to set up the lowest supported PHP version.
- Accepts `highest` or `latest` to set up the latest stable PHP version.
- Accepts `nightly` to set up a nightly build from the master branch of PHP.
+- Accepts `pre-installed` to set up the highest pre-installed PHP version. You can combine this with `update: true` to update the pre-installed PHP version.
- Accepts the format `d.x`, where `d` is the major version. For example `5.x`, `7.x` and `8.x`.
- See [PHP support](#tada-php-support) for the supported PHP versions.
- If not specified, it looks for the following in order:
- The `php-version-file` input if it exists
- A `composer.lock` file and the `platform-overrides.php` value
- A `composer.json` file and the `config.platform.php` value
+ - If the `composer.lock` or `composer.json` file is in a sub-directory in your repository, please specify the subdirectory path in `COMPOSER_PROJECT_DIR` env.
#### `php-version-file` (optional)
@@ -421,6 +425,7 @@ Disable coverage for these reasons:
- Accepts a `string`. For example `'.phpenv-version'`.
- See [PHP support](#tada-php-support) for the supported PHP versions.
- By default, `.php-version` file is used.
+- The file either have the PHP version as its content, or follow the asdf `.tool-versions` format.
- If not specified and the default `.php-version` file is not found, the latest stable PHP version is set up.
#### `extensions` (optional)
@@ -468,7 +473,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.3'
+ php-version: '8.4'
- name: Print PHP version
run: echo ${{ steps.setup-php.outputs.php-version }}
@@ -510,7 +515,7 @@ steps:
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
- php-version: '8.3'
+ php-version: '8.4'
extensions: mbstring, intl
ini-values: post_max_size=256M, max_execution_time=180
coverage: xdebug
@@ -528,12 +533,12 @@ jobs:
strategy:
matrix:
operating-system: ['ubuntu-latest', 'windows-latest', 'macos-latest']
- php-versions: ['8.1', '8.2', '8.3']
+ php-versions: ['8.2', '8.3', '8.4']
phpunit-versions: ['latest']
include:
- operating-system: 'ubuntu-latest'
- php-versions: '8.0'
- phpunit-versions: 9
+ php-versions: '8.1'
+ phpunit-versions: 10
steps:
- name: Setup PHP
uses: shivammathur/setup-php@v2
@@ -549,7 +554,7 @@ jobs:
### Nightly Build Setup
-> Set up a nightly build of `PHP 8.4`.
+> Set up a nightly build of `PHP 8.5`.
- These PHP versions are currently in active development and might contain bugs and breaking changes.
- Some user space extensions might not support this version currently.
@@ -559,7 +564,7 @@ steps:
- name: Setup nightly PHP
uses: shivammathur/setup-php@v2
with:
- php-version: '8.4'
+ php-version: '8.5'
extensions: mbstring
ini-values: post_max_size=256M, max_execution_time=180
coverage: xdebug
@@ -583,7 +588,7 @@ steps:
- name: Setup PHP with debugging symbols
uses: shivammathur/setup-php@v2
with:
- php-version: '8.3'
+ php-version: '8.4'
env:
debug: true # specify true or false
```
@@ -603,7 +608,7 @@ jobs:
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
- php-version: '8.3'
+ php-version: '8.4'
env:
phpts: ts # specify ts or nts
```
@@ -620,7 +625,7 @@ jobs:
- name: Setup PHP with latest versions
uses: shivammathur/setup-php@v2
with:
- php-version: '8.3'
+ php-version: '8.4'
env:
update: true # specify true or false
```
@@ -635,14 +640,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.3'
+ php-version: '8.4'
```
### Multi-Arch Setup
> Set up PHP on multiple architecture on Ubuntu GitHub Runners.
-- `PHP 5.6` to `PHP 8.3` are supported by `setup-php` on multiple architecture on `Ubuntu`.
+- `PHP 5.6` to `PHP 8.4` 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).
@@ -658,7 +663,7 @@ jobs:
- name: Install PHP
uses: shivammathur/setup-php@v2
with:
- php-version: '8.3'
+ php-version: '8.4'
```
### Self Hosted Setup
@@ -680,7 +685,7 @@ jobs:
runs-on: self-hosted
strategy:
matrix:
- php-versions: ['5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3']
+ php-versions: ['5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3', '8.4']
name: PHP ${{ matrix.php-versions }}
steps:
- name: Setup PHP
@@ -708,7 +713,7 @@ jobs:
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
- php-version: '8.3'
+ php-version: '8.4'
```
Run the workflow locally with `act` using [`shivammathur/node`](https://github.com/shivammathur/node-docker "Docker image to run setup-php") docker images.
@@ -744,7 +749,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.3'
+ php-version: '8.4'
coverage: none
ini-values: opcache.enable_cli=1, opcache.jit=tracing, opcache.jit_buffer_size=64M
```
@@ -797,7 +802,7 @@ The `COMPOSER_TOKEN` environment variable has been deprecated in favor of `GITHU
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
- php-version: '8.3'
+ php-version: '8.4'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
```
@@ -810,7 +815,7 @@ If you use Private Packagist for your private composer dependencies, you can set
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
- php-version: '8.3'
+ php-version: '8.4'
env:
PACKAGIST_TOKEN: ${{ secrets.PACKAGIST_TOKEN }}
```
@@ -824,7 +829,7 @@ Please refer to the authentication section in [`composer documentation`](https:/
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
- php-version: '8.3'
+ php-version: '8.4'
env:
COMPOSER_AUTH_JSON: |
{
@@ -847,7 +852,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.3'
+ php-version: '8.4'
- name: Run PHP code
shell: php {0}
@@ -887,7 +892,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.3'
+ php-version: '8.4'
tools: phpstan
- name: Run PHPStan
@@ -902,7 +907,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.3'
+ php-version: '8.4'
tools: psalm
- name: Run Psalm
@@ -920,7 +925,7 @@ For examples refer to the [cs2pr documentation](https://github.com/staabm/annota
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
- php-version: '8.3'
+ php-version: '8.4'
tools: cs2pr, phpcs
- name: Run phpcs
@@ -1049,6 +1054,7 @@ These companies generously provide setup-php their products and services to aid
[`churn`]: https://github.com/bmitch/churn-php
[`codeception`]: https://codeception.com/
[`composer`]: https://getcomposer.org/
+[`composer-dependency-analyser`]: https://github.com/shipmonk-rnd/composer-dependency-analyser
[`composer-normalize`]: https://github.com/ergebnis/composer-normalize
[`composer-prefetcher`]: https://github.com/narrowspark/automatic-composer-prefetcher
[`composer-require-checker`]: https://github.com/maglnet/ComposerRequireChecker
diff --git a/__tests__/fetch.test.ts b/__tests__/fetch.test.ts
index 0e1881f40..a052a6309 100644
--- a/__tests__/fetch.test.ts
+++ b/__tests__/fetch.test.ts
@@ -1,5 +1,5 @@
import * as fetch from '../src/fetch';
-import nock = require('nock');
+import nock from 'nock';
it('checking fetch', async () => {
const host_url = 'https://example.com';
diff --git a/__tests__/packagist.test.ts b/__tests__/packagist.test.ts
index f3af7da4f..fac6b0a26 100644
--- a/__tests__/packagist.test.ts
+++ b/__tests__/packagist.test.ts
@@ -1,5 +1,5 @@
import * as packagist from '../src/packagist';
-import nock = require('nock');
+import nock from 'nock';
describe('search function', () => {
const mockResponse = {
diff --git a/__tests__/tools.test.ts b/__tests__/tools.test.ts
index cde459d59..761cf76f3 100644
--- a/__tests__/tools.test.ts
+++ b/__tests__/tools.test.ts
@@ -1,4 +1,4 @@
-import fs = require('fs');
+import * as fs from 'fs';
import * as tools from '../src/tools';
interface IData {
@@ -434,7 +434,7 @@ describe('Tools tests', () => {
it.each([
[
- 'behat, blackfire, blackfire-player, churn, composer-normalize, composer-require-checker, composer-unused, cs2pr:1.2.3, ecs, 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',
+ 'behat, blackfire, blackfire-player, churn, composer-dependency-analyser, composer-normalize, composer-require-checker, composer-unused, cs2pr:1.2.3, ecs, 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_composer_tool behat behat behat/ scoped',
@@ -442,6 +442,7 @@ describe('Tools tests', () => {
'add_tool https://get.blackfire.io/blackfire-player-v1.22.0.phar blackfire-player "-V"',
'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_composer_tool composer-dependency-analyser composer-dependency-analyser shipmonk/ scoped',
'add_composer_tool composer-require-checker composer-require-checker maglnet/ 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"',
diff --git a/__tests__/utils.test.ts b/__tests__/utils.test.ts
index f64be9bf2..b340ed848 100644
--- a/__tests__/utils.test.ts
+++ b/__tests__/utils.test.ts
@@ -1,4 +1,4 @@
-import fs = require('fs');
+import fs from 'fs';
import * as path from 'path';
import * as utils from '../src/utils';
@@ -285,6 +285,14 @@ describe('Utils tests', () => {
delete process.env['php-version-file'];
delete process.env['php-version'];
+ existsSync.mockReturnValue(true);
+ readFileSync.mockReturnValue('ruby 1.2.3\nphp 8.4.2\nnode 20.1.2');
+ expect(await utils.readPHPVersion()).toBe('8.4.2');
+
+ existsSync.mockReturnValue(true);
+ readFileSync.mockReturnValue('setup-php');
+ expect(await utils.readPHPVersion()).toBe('setup-php');
+
existsSync.mockReturnValueOnce(false).mockReturnValueOnce(true);
readFileSync.mockReturnValue(
'{ "platform-overrides": { "php": "7.3.25" } }'
diff --git a/dist/index.js b/dist/index.js
index fffc3d186..45f3c0791 100644
--- a/dist/index.js
+++ b/dist/index.js
@@ -1 +1,3 @@
-(()=>{var e={88:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;var i=Object.getOwnPropertyDescriptor(t,r);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[r]}}}Object.defineProperty(e,n,i)}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var s=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r in e)if(r!=="default"&&Object.prototype.hasOwnProperty.call(e,r))n(t,e,r);i(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.addINIValuesUnix=addINIValuesUnix;t.addINIValuesWindows=addINIValuesWindows;t.addINIValues=addINIValues;const o=s(r(918));async function addINIValuesUnix(e){const t=await o.CSVArray(e);let r="";await o.asyncForEach(t,(async function(e){r+="\n"+await o.addLog("$tick",e,"Added to php.ini","linux")}));return'echo "'+t.join("\n")+'" | sudo tee -a "${pecl_file:-${ini_file[@]}}" >/dev/null 2>&1'+r}async function addINIValuesWindows(e){const t=await o.CSVArray(e);let r="\n";await o.asyncForEach(t,(async function(e){r+=await o.addLog("$tick",e,"Added to php.ini","win32")+"\n"}));return'Add-Content "$php_dir\\php.ini" "'+t.join("\n")+'"'+r}async function addINIValues(e,t,r=false){let n="\n";switch(r){case true:n+=await o.stepLog("Add php.ini values",t)+await o.suppressOutput(t)+"\n";break;case false:default:n+=await o.stepLog("Add php.ini values",t)+"\n";break}switch(t){case"win32":return n+await addINIValuesWindows(e);case"darwin":case"linux":return n+await addINIValuesUnix(e);default:return await o.log("Platform "+t+" is not supported",t,"error")}}},5730:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;var i=Object.getOwnPropertyDescriptor(t,r);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[r]}}}Object.defineProperty(e,n,i)}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var s=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r in e)if(r!=="default"&&Object.prototype.hasOwnProperty.call(e,r))n(t,e,r);i(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.checkXdebugError=checkXdebugError;t.addCoverageXdebug=addCoverageXdebug;t.addCoveragePCOV=addCoveragePCOV;t.disableCoverage=disableCoverage;t.addCoverage=addCoverage;const o=s(r(918));const a=s(r(3390));const u=s(r(88));async function checkXdebugError(e,t){if(/^5\.[3-6]$|^7\.[0-1]$/.test(t)&&e=="xdebug3"||/^8\.[0-9]$/.test(t)&&e=="xdebug2"){return e+" is not supported on PHP "+t}return""}async function addCoverageXdebug(e,t,r,n){let i="\n";const s=await checkXdebugError(e,t);if(!s){i+=await a.addExtension(":pcov:false",t,r,true)+n;e=e=="xdebug3"?"xdebug":e;i+=await a.addExtension(e,t,r,true)+n;i+=await o.setVariable("xdebug_version","php -r \"echo phpversion('xdebug');\"",r);i+=await o.getCommand(r,"extension_log")+'xdebug "Xdebug $xdebug_version enabled as coverage driver"'}else{i+=await o.addLog("$cross",e,s,r)}return i}async function addCoveragePCOV(e,t,r){let n="\n";switch(true){default:n+=await a.addExtension(":xdebug:false",e,t,true)+r;n+=await a.addExtension("pcov",e,t,true)+r;n+=await u.addINIValues("pcov.enabled=1",t,true)+"\n";n+=await o.setVariable("pcov_version","php -r \"echo phpversion('pcov');\"",t);n+=await o.getCommand(t,"extension_log")+'pcov "PCOV $pcov_version enabled as coverage driver"';break;case/5\.[3-6]|7\.0/.test(e):n+=await o.addLog("$cross","pcov","PHP 7.1 or newer is required",t);break}return n}async function disableCoverage(e,t,r){let n="\n";n+=await a.addExtension(":pcov:false",e,t,true)+r;n+=await a.addExtension(":xdebug:false",e,t,true)+r;n+=await o.addLog("$tick","none","Disabled Xdebug and PCOV",t);return n}async function addCoverage(e,t,r){e=e.toLowerCase();const n="\n"+await o.stepLog("Setup Coverage",r);const i=await o.suppressOutput(r)+"\n";switch(e){case"pcov":return n+await addCoveragePCOV(t,r,i);case"xdebug":case"xdebug2":case"xdebug3":return n+await addCoverageXdebug(e,t,r,i);case"none":return n+await disableCoverage(t,r,i);default:return""}}},3390:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;var i=Object.getOwnPropertyDescriptor(t,r);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[r]}}}Object.defineProperty(e,n,i)}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var s=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r in e)if(r!=="default"&&Object.prototype.hasOwnProperty.call(e,r))n(t,e,r);i(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.addExtensionDarwin=addExtensionDarwin;t.addExtensionWindows=addExtensionWindows;t.addExtensionLinux=addExtensionLinux;t.addExtension=addExtension;const o=s(r(918));async function addExtensionDarwin(e,t){const r=await o.extensionArray(e);let n="\n";let i="";await o.asyncForEach(r,(async function(e){const r=t+e;const[s,a]=e.split("-");const u=await o.getExtensionPrefix(s);switch(true){case/^:/.test(s):i+="\ndisable_extension"+s.replace(/:/g," ");return;case/^none$/.test(s):n+="\ndisable_all_shared";return;case/.+-.+\/.+@.+/.test(e):n+=await o.parseExtensionSource(e,u);return;case/^(7\.4|8\.[0-3])relay(-v?\d+\.\d+\.\d+)?$/.test(r):case/^(5\.[3-6]|7\.[0-4]|8\.[0-3])blackfire(-\d+\.\d+\.\d+)?$/.test(r):case/^couchbase|^event|^gearman$|^geos$|^pdo_oci$|^oci8$|^(pecl_)?http|^pdo_firebird$/.test(e):case/^(5\.[3-6]|7\.[0-4]|8\.[0-2])ioncube$/.test(r):case/(5\.6|7\.[0-3])phalcon3|7\.[2-4]phalcon4|(7\.4|8\.[0-3])phalcon5?/.test(r):case/(?{const i=new a.URL(e);const s={"User-Agent":`Mozilla/5.0 (${process.platform} ${process.arch}) setup-php`};if(t){s.authorization="Bearer "+t}const u={hostname:i.hostname,path:i.pathname,headers:s,agent:new o.Agent({keepAlive:false})};const c=o.get(u,(e=>{if(e.statusCode===200){let t="";e.setEncoding("utf8");e.on("data",(e=>t+=e));e.on("end",(()=>n({data:`${t}`})))}else if([301,302,303,307,308].includes(e.statusCode)){if(r>0&&e.headers.location){fetch(e.headers.location,t,r--).then(n)}else{n({error:`${e.statusCode}: Redirect error`})}}else{n({error:`${e.statusCode}: ${e.statusMessage}`})}}));c.end()}));return await n}},9039:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;var i=Object.getOwnPropertyDescriptor(t,r);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[r]}}}Object.defineProperty(e,n,i)}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var s=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r in e)if(r!=="default"&&Object.prototype.hasOwnProperty.call(e,r))n(t,e,r);i(t,e);return t};var o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:true});t.getScript=getScript;t.run=run;const a=o(r(1017));const u=o(r(7147));const c=r(1514);const d=s(r(2186));const l=s(r(88));const f=s(r(5730));const p=s(r(3390));const h=s(r(7740));const v=s(r(918));async function getScript(e){const t="https://setup-php.com/sponsor";const r=e+await v.scriptExtension(e);const n=a.default.join(__dirname,"../src/scripts",r);const i=n.replace(e,"run");process.env["fail_fast"]=await v.getInput("fail-fast",false);const s=await v.getInput("extensions",false);const o=await v.getInput("ini-values",false);const c=await v.getInput("coverage",false);const d=await v.getInput("tools",false);const m=await v.parseVersion(await v.readPHPVersion());const g=await v.parseIniFile(await v.getInput("ini-file",false));let w=await v.joins(".",n,m,g);if(s){w+=await p.addExtension(s,m,e)}w+=await h.addTools(d,m,e);if(c){w+=await f.addCoverage(c,m,e)}if(o){w+=await l.addINIValues(o,e)}w+="\n"+await v.stepLog(`Sponsor setup-php`,e);w+="\n"+await v.addLog("$tick","setup-php",t,e);u.default.writeFileSync(i,w,{mode:493});return i}async function run(){const e=process.platform;const t=await v.scriptTool(e);const r=await getScript(e);await(0,c.exec)(t+r)}(async()=>{await run()})().catch((e=>{d.setFailed(e.message)}))},5151:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;var i=Object.getOwnPropertyDescriptor(t,r);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[r]}}}Object.defineProperty(e,n,i)}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var s=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r in e)if(r!=="default"&&Object.prototype.hasOwnProperty.call(e,r))n(t,e,r);i(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.search=search;const o=s(r(4773));const a=s(r(2387));async function search(e,t){const r=await a.fetch(`https://repo.packagist.org/p2/${e}.json`);if(r.error||r.data==="[]"){return null}const n=JSON.parse(r["data"]);if(n&&n.packages){const r=n.packages[e];r.sort(((e,t)=>o.compareVersions(t.version,e.version)));const i=r.find((e=>{if(e?.require?.php){return e?.require?.php.split("|").some((e=>e&&o.satisfies(t+".0",e)))}return false}));return i?i.version:null}return null}},7740:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;var i=Object.getOwnPropertyDescriptor(t,r);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[r]}}}Object.defineProperty(e,n,i)}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var s=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r in e)if(r!=="default"&&Object.prototype.hasOwnProperty.call(e,r))n(t,e,r);i(t,e);return t};var o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:true});t.functionRecord=void 0;t.getSemverVersion=getSemverVersion;t.getLatestVersion=getLatestVersion;t.getVersion=getVersion;t.getRelease=getRelease;t.filterList=filterList;t.getUrl=getUrl;t.getPharUrl=getPharUrl;t.addArchive=addArchive;t.addPackage=addPackage;t.addBlackfirePlayer=addBlackfirePlayer;t.addCastor=addCastor;t.addComposer=addComposer;t.addDeployer=addDeployer;t.addDevTools=addDevTools;t.addPECL=addPECL;t.addPhing=addPhing;t.addPhive=addPhive;t.addPHPUnitTools=addPHPUnitTools;t.addWPCLI=addWPCLI;t.getData=getData;t.addTools=addTools;const a=o(r(1017));const u=o(r(7147));const c=s(r(2387));const d=s(r(5151));const l=s(r(918));async function getSemverVersion(e){const t=e["version_prefix"]+e["version"];const r=`https://api.github.com/repos/${e["repository"]}/git/matching-refs/tags%2F${t}.`;const n=await l.readEnv("GITHUB_TOKEN")||await l.readEnv("COMPOSER_TOKEN");const i=await c.fetch(r,n);if(i.error||i.data==="[]"){e["error"]=i.error??`No version found with prefix ${t}.`;return e["version"]}else{const e=JSON.parse(i["data"]).reverse();const t=e.find((e=>/.*\d+.\d+.\d+$/.test(e["ref"])));const r=(t||e[0])["ref"].split("/").pop();return r.replace(/^v(\d)/,"$1")}}async function getLatestVersion(e){if(!e["version"]&&e["fetch_latest"]==="false"){return"latest"}const t=await c.fetch(`${e["github"]}/${e["repository"]}/releases.atom`);if(t["data"]){const e=[...t["data"].matchAll(/releases\/tag\/([a-zA-Z]*)?(\d+.\d+.\d+)"/g)].map((e=>e[2]));return e.sort(((e,t)=>e.localeCompare(t,undefined,{numeric:true}))).pop()||"latest"}return"latest"}async function getVersion(e,t){const r=/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/;const n=/^composer:(stable|preview|snapshot|[1|2])$/;const i=/[><=^~]+.*/;const s=/^\d+(\.\d+)?$/;t["version"]=e.replace(/v?(\d)/,"$1").replace(/\.x/,"");switch(true){case n.test(t["release"]):case r.test(t["version"]):case i.test(t["version"])&&t["type"]==="composer":return t["version"];case s.test(t["version"])&&t["type"]==="composer":t["release"]=`${t["tool"]}:${t["version"]}.*`;return`${t["version"]}.*`;case t["repository"]&&s.test(t["version"]):return await getSemverVersion(t);default:return t["version"].replace(/[><=^~]*/,"")}}async function getRelease(e,t){e=e.includes("/")?e.split("/")[1]:e;return e.includes(":")?[t["tool"],e.split(":")[1]].join(":"):t["tool"]}async function filterList(e){const t=/^composer($|:.*)/;const r=/^composer:?($|preview$|snapshot$|v?\d+(\.\d+)?$|v?\d+\.\d+\.\d+[\w-]*$)/;const n=e.filter((e=>r.test(e)));let i="composer";e=e.filter((e=>!t.test(e)));switch(true){case n[0]==undefined:break;default:i=n[n.length-1].replace(/v(\d\S*)/,"$1");break}e.unshift(i);return e}async function getUrl(e){if(e["version"]==="latest"){return[e["domain"],e["repository"],e["prefix"],e["version"],e["verb"],e["tool"]+e["extension"]].filter(Boolean).join("/")}else{return[e["domain"],e["repository"],e["prefix"],e["verb"],e["version_prefix"]+e["version"],e["tool"]+e["extension"]].filter(Boolean).join("/")}}async function getPharUrl(e){if(e["version"]==="latest"){return e["domain"]+"/"+e["tool"]+".phar"}else{return e["domain"]+"/"+e["tool"]+"-"+e["version_prefix"]+e["version"]+".phar"}}async function addArchive(e){return await l.getCommand(e["os"],"tool")+await l.joins(e["url"],e["tool"],e["version_parameter"])}async function addPackage(e){const t=await l.getCommand(e["os"],"composer_tool");const r=e["repository"].split("/");const n=await l.joins(r[1],e["release"],r[0]+"/",e["scope"]);return t+n}async function addBlackfirePlayer(e){switch(e["os"]){case"win32":return await l.addLog("$cross",e["tool"],e["tool"]+" is not a windows tool","win32");default:if(e["version"]=="latest"){if(/5\.[5-6]|7\.0/.test(e["php_version"])){e["version"]="1.9.3"}else if(/7\.[1-4]|8\.0/.test(e["php_version"])){e["version"]="1.22.0"}}e["url"]=await getPharUrl(e);return addArchive(e)}}async function addCastor(e){e["tool"]="castor."+e["os"].replace("win32","windows")+"-amd64";e["url"]=await getUrl(e);e["tool"]="castor";e["version_parameter"]=u.default.existsSync("castor.php")?e["version_parameter"]:"";return await addArchive(e)}async function addComposer(e){const t=e["version"].replace("latest","stable");const r=e["github"];const n=e["domain"];const i="https://dl.cloudsmith.io";const s=`composer-${e["php_version"]}-${t}.phar`;const o=`${r}/shivammathur/composer-cache/releases/latest/download/${s}`;const a=`${i}/public/shivammathur/composer-cache/raw/files/${s}`;const u=`${n}/download/latest-2.2.x/composer.phar`;const c=/^5\.[3-6]$|^7\.[0-1]$/.test(e["php_version"]);const d=`${n}/composer-${t}.phar`;let f=`${o},${a}`;let p=`${n}/composer.phar`;switch(true){case/^snapshot$/.test(t):p=c?u:p;break;case/^preview$|^2$/.test(t):p=c?u:d;break;case/^1$/.test(t):p=d;break;case/^\d+\.\d+\.\d+[\w-]*$/.test(e["version"]):f=`${r}/${e["repository"]}/releases/download/${e["version"]}/composer.phar`;p=d;break;default:p=c?u:d}const h=await l.readEnv("NO_TOOLS_CACHE")!=="true";e["url"]=h?`${f},${p}`:p;e["version_parameter"]=e["version"];return await addArchive(e)}async function addDeployer(e){if(e["version"]==="latest"){e["url"]=e["domain"]+"/deployer.phar"}else{const t=await c.fetch("https://deployer.org/manifest.json");const r=JSON.parse(t.data);const n=Object.keys(r).find((t=>r[t]["version"]===e["version"]));if(n){e["url"]=r[n]["url"]}else{return await l.addLog("$cross","deployer","Version missing in deployer manifest",e["os"])}}return await addArchive(e)}async function addDevTools(e){switch(e["os"]){case"linux":case"darwin":return"add_devtools "+e["tool"];case"win32":return await l.addLog("$tick",e["tool"],e["tool"]+" is not a windows tool","win32");default:return await l.log("Platform "+e["os"]+" is not supported",e["os"],"error")}}async function addPECL(e){return await l.getCommand(e["os"],"pecl")}async function addPhing(e){e["url"]=e["domain"]+"/get/phing-"+e["version"]+e["extension"];if(e["version"]!="latest"){[e["prefix"],e["verb"]]=["releases","download"];e["domain"]=e["github"];e["extension"]="-"+e["version"]+e["extension"];e["url"]+=","+await getUrl(e)}return await addArchive(e)}async function addPhive(e){switch(true){case/5\.[3-5]/.test(e["php_version"]):return await l.addLog("$cross","phive","Phive is not supported on PHP "+e["php_version"],e["os"]);case/5\.6|7\.0/.test(e["php_version"]):e["version"]="0.12.1";break;case/7\.1/.test(e["php_version"]):e["version"]="0.13.5";break;case/7\.2/.test(e["php_version"]):e["version"]="0.14.5";break;case/^latest$/.test(e["version"]):e["version"]=await getLatestVersion(e);break}e["extension"]="-"+e["version"]+e["extension"];e["url"]=await getUrl(e);return await addArchive(e)}async function addPHPUnitTools(e){if(e["version"]==="latest"){e["version"]=await d.search(e["packagist"],e["php_version"])??"latest"}e["url"]=await getPharUrl(e);return await addArchive(e)}async function addWPCLI(e){if(e["version"]==="latest"){e["uri"]="wp-cli/builds/blob/gh-pages/phar/wp-cli.phar?raw=true";e["url"]=[e["domain"],e["uri"]].join("/")}else{e["extension"]="-"+e["version"]+e["extension"];e["url"]=await getUrl(e)}return await addArchive(e)}async function getData(e,t,r){const n=a.default.join(__dirname,"../src/configs/tools.json");const i=u.default.readFileSync(n,"utf8");const s=JSON.parse(i);e=e.replace(/\s+/g,"");const o=e.split(":");const c=o[0];const d=o[1];let l;if(Object.keys(s).includes(c)){l=s[c];l["tool"]=c}else{const e=Object.keys(s).find((e=>s[e]["alias"]==c));if(e){l=s[e];l["tool"]=e}else{l={tool:c.split("/")[1],repository:c,type:"composer"};l=!c.includes("/")?{tool:c}:l}}l["github"]="https://github.com";l["domain"]??=l["github"];l["extension"]??=".phar";l["os"]=r;l["php_version"]=t;l["packagist"]??=l["repository"];l["prefix"]=l["github"]===l["domain"]?"releases":"";l["verb"]=l["github"]===l["domain"]?"download":"";l["fetch_latest"]??="false";l["scope"]??="global";l["version_parameter"]=JSON.stringify(l["version_parameter"])||"";l["version_prefix"]??="";l["release"]=await getRelease(e,l);l["version"]=d?await getVersion(d,l):await getLatestVersion(l);return l}t.functionRecord={castor:addCastor,composer:addComposer,deployer:addDeployer,dev_tools:addDevTools,phive:addPhive,blackfire_player:addBlackfirePlayer,pecl:addPECL,phing:addPhing,phpunit:addPHPUnitTools,phpcpd:addPHPUnitTools,wp_cli:addWPCLI};async function addTools(e,r,n){let i="\n";if(e==="none"){return""}else{i+=await l.stepLog("Setup Tools",n)}const s=await filterList(await l.CSVArray(e));await l.asyncForEach(s,(async function(e){const s=await getData(e,r,n);i+="\n";switch(true){case s["error"]!==undefined:i+=await l.addLog("$cross",s["tool"],s["error"],s["os"]);break;case"phar"===s["type"]:s["url"]=await getUrl(s);i+=await addArchive(s);break;case"composer"===s["type"]:i+=await addPackage(s);break;case"custom-package"===s["type"]:i+=await l.customPackage(s["tool"].split("-")[0],"tools",s["version"],s["os"]);break;case"custom-function"===s["type"]:i+=await t.functionRecord[s["function"]](s);break;case/^none$/.test(s["tool"]):break;default:i+=await l.addLog("$cross",s["tool"],"Tool "+s["tool"]+" is not supported",s["os"]);break}}));return i}},918:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;var i=Object.getOwnPropertyDescriptor(t,r);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[r]}}}Object.defineProperty(e,n,i)}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var s=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r in e)if(r!=="default"&&Object.prototype.hasOwnProperty.call(e,r))n(t,e,r);i(t,e);return t};var o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:true});t.readEnv=readEnv;t.getInput=getInput;t.getManifestURL=getManifestURL;t.parseVersion=parseVersion;t.parseIniFile=parseIniFile;t.asyncForEach=asyncForEach;t.color=color;t.log=log;t.stepLog=stepLog;t.addLog=addLog;t.extensionArray=extensionArray;t.CSVArray=CSVArray;t.getExtensionPrefix=getExtensionPrefix;t.suppressOutput=suppressOutput;t.getUnsupportedLog=getUnsupportedLog;t.getCommand=getCommand;t.joins=joins;t.scriptExtension=scriptExtension;t.scriptTool=scriptTool;t.customPackage=customPackage;t.parseExtensionSource=parseExtensionSource;t.readPHPVersion=readPHPVersion;t.setVariable=setVariable;const a=o(r(7147));const u=s(r(1017));const c=s(r(2186));const d=s(r(2387));async function readEnv(e){const t=e.toLowerCase();const r=e.toUpperCase();return process.env[e]||process.env[t]||process.env[r]||process.env[t.replace("_","-")]||process.env[r.replace("_","-")]||""}async function getInput(e,t){const r=c.getInput(e);const n=await readEnv(e);switch(true){case r!="":return r;case r==""&&n!="":return n;case r==""&&n==""&&t:throw new Error(`Input required and not supplied: ${e}`);default:return""}}async function getManifestURL(){return"https://raw.githubusercontent.com/shivammathur/setup-php/develop/src/configs/php-versions.json"}async function parseVersion(e){switch(true){case/^(latest|lowest|highest|nightly|\d+\.x)$/.test(e):return JSON.parse((await d.fetch(await getManifestURL()))["data"])[e];default:switch(true){case e.length>1:return e.slice(0,3);default:return e+".0"}}}async function parseIniFile(e){switch(true){case/^(production|development|none)$/.test(e):return e;case/php\.ini-(production|development)$/.test(e):return e.split("-")[1];default:return"production"}}async function asyncForEach(e,t){for(let r=0;r