Compare commits

...

457 Commits

Author SHA1 Message Date
0f7f1d08e3 Upgrade to Jest 30 2025-06-13 02:06:31 +05:30
433bdeeaf0 Bump version to 2.34.1 2025-06-12 03:52:26 +05:30
1c5378302c Update node.js dependencies 2025-06-11 15:17:10 +05:30
c251c791ff Fix pipe in get_sha256 2025-06-11 15:00:38 +05:30
36fada6981 Fix tool-cache directory on self-hosted runners 2025-06-11 14:57:09 +05:30
27853eb8b4 Cleanup up PPA fallback mirror 2025-06-10 15:33:24 +05:30
18b776ee45 Update ppa filename to match apt-add-repository 2025-06-10 04:51:11 +05:30
2ec652d38d Fix locking permissions in get function 2025-06-10 03:20:10 +05:30
8d8f975af3 Pin hiredis version to 1.1 for relay [skip ci] 2025-06-09 20:03:18 +05:30
12b910a04d Add support for COMPOSER_ALLOW_PLUGINS 2025-06-09 17:30:41 +05:30
962fc445e2 Bump version to 2.34.0
Bump Node.js dependencies
2025-06-09 15:52:38 +05:30
6ba658ae8d Merge pull request #957 from cmb69/cmb/phive-0.15.3
Lock Phive version for PHP 7.3/7.4
2025-06-03 18:18:52 +05:30
c954e9c756 Lock Phive version for PHP 7.3/7.4
Latest Phive (0.16.0) claims to require PHP 8.0 or later[1].  While I
have not found any issues running it under PHP 7.4, it might be better
to stick with Phive 0.15.3 for PHP 7.3/7.4.

[1] <https://github.com/phar-io/phive/releases/tag/0.16.0>
2025-06-03 14:35:02 +02:00
b595b415e2 Add fallback for the manifest URL 2025-05-19 08:09:13 +05:30
9c22be2b20 fail fast in source.sh 2025-05-18 05:58:02 +05:30
ac0e29410e Merge pull request #950 from shivammathur/dependabot/npm_and_yarn/npm_and_yarn-87115a91ec
Bump undici from 5.28.5 to 5.29.0 in the npm_and_yarn group across 1 directory
2025-05-16 07:13:42 +05:30
2cae8ac286 Bump undici in the npm_and_yarn group across 1 directory
Bumps the npm_and_yarn group with 1 update in the / directory: [undici](https://github.com/nodejs/undici).


Updates `undici` from 5.28.5 to 5.29.0
- [Release notes](https://github.com/nodejs/undici/releases)
- [Commits](https://github.com/nodejs/undici/compare/v5.28.5...v5.29.0)

---
updated-dependencies:
- dependency-name: undici
  dependency-version: 5.29.0
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-15 16:31:38 +00:00
df8d123345 Improve self-hosted detection 2025-05-08 14:38:46 +05:30
d371420c90 Remove copying extension dependencies 2025-05-08 14:30:01 +05:30
287979ae16 Merge pull request #948 from alcaeus/add-pie-support
Add tool support for pie
2025-05-08 14:05:07 +05:30
dd942787eb Add support for pie in tools 2025-05-08 09:46:50 +02:00
d000f49d9a Merge pull request #945 from JMoodyFWD/tools_dir_path-rename
Change TOOLS_DIR to SETUP_PHP_TOOLS_DIR to prevent regression
2025-05-06 23:46:51 +05:30
dc7e73e115 Change TOOLS_DIR to SETUP_PHP_TOOLS_DIR to prevent regression 2025-05-06 11:00:13 -06:00
755f6046e1 Add missing self_hosted_helper in darwin.sh 2025-04-30 15:30:13 +05:30
ec0360b904 Make sure tap directories on macOS exist 2025-04-21 22:13:27 +05:30
373563aabe Update os_releases 2025-04-17 08:59:08 +05:30
cf4cade272 Drop support for ubuntu-20.04 [skip ci] 2025-04-14 07:25:31 +05:30
316da6edfb Fix phalcon and zephir_parser support on Windows 2025-04-14 07:11:13 +05:30
34061fa6b4 Fix relay support on macOS 2025-04-14 07:11:08 +05:30
b7bd9e4655 Bump version to 2.33.0 2025-04-13 00:13:54 +05:30
78e1c95060 feat: set this via an environment variable instead 2025-04-07 12:29:02 +05:30
310e481b83 feat: allow tools path directory to be set
also add a .node-version file
2025-04-07 12:28:57 +05:30
42a9487ddd Fix pdo_oci 2025-03-15 04:43:12 +05:30
f5d98d1683 Improve support for phalcon5 and zephir_parser 2025-03-14 21:26:51 +05:30
1a94db50cb Update dependencies 2025-03-14 20:36:54 +05:30
1489f576c9 Merge pull request #928 from jg-development/main
switch to launchpadcontent #927 close
2025-03-14 18:16:42 +05:30
f25b1cfdcc switch to launchpadcontent #927 close 2025-03-14 13:31:13 +01:00
3209251719 Merge pull request #921 from hms5232/update-ubuntu-latest-to-24
Move `ubuntu-latest` to 24.04
2025-02-25 14:47:34 +05:30
8ad85316fe Move ubuntu-latest to 24.04 2025-02-25 12:57:46 +08:00
297b3cde3c Merge pull request #917 from voodooism/feature/priority-for-openswoole-ext
Change openswoole priority
2025-02-18 20:02:29 +05:30
4eb1919d22 Change openswoole priority 2025-02-18 14:09:04 +01:00
d8af2f43ce Merge pull request #915 from DanielEScherzer/patch-1
README: update list of PHP versions
2025-02-15 15:19:01 +05:30
d3fead0baf README: update list of PHP versions
PHP 8.2 is no longer in active support and only receives security fixes, see
announcement at <https://news-web.php.net/php.internals/126138>.
2025-02-14 21:14:48 -08:00
6cd838e903 Add fallback for launchpad API 2025-02-10 16:57:17 +05:30
3bfebc13bc Add fallback url for phpunit tools 2025-02-07 05:40:29 +05:30
89a5bffb0b Improving locking process in get 2025-02-06 02:33:08 +05:30
260b35cca0 Add support for blackfire on PHP 8.4 2025-02-01 21:27:42 +05:30
f902cc7bd9 Update ioncube support till PHP 8.4 2025-02-01 20:59:07 +05:30
ad03a92562 Use Markdown highlighting in README for notes 2025-02-01 08:55:51 +05:30
a99dd2408e Merge pull request #907 from shivammathur/dependabot/npm_and_yarn/npm_and_yarn-2c579f9325
Bump undici from 5.28.4 to 5.28.5 in the npm_and_yarn group
2025-01-22 07:12:09 +05:30
a7d262f1d8 Bump undici from 5.28.4 to 5.28.5 in the npm_and_yarn group
Bumps the npm_and_yarn group with 1 update: [undici](https://github.com/nodejs/undici).


Updates `undici` from 5.28.4 to 5.28.5
- [Release notes](https://github.com/nodejs/undici/releases)
- [Commits](https://github.com/nodejs/undici/compare/v5.28.4...v5.28.5)

---
updated-dependencies:
- dependency-name: undici
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-22 00:45:26 +00:00
c1750d382b Add aarch64 ubuntu runners in OS support [skip ci] 2025-01-22 04:56:05 +05:30
6516e9cb24 Add support for arm64 icu and intl builds 2025-01-22 04:56:05 +05:30
783c77d669 Fix sed for macos in patch script 2025-01-22 04:56:05 +05:30
b0064cd05b Fix arm support for some tools and extensions [skip ci] 2025-01-22 04:56:05 +05:30
fd913ba092 Fix composer normalize version [skip ci] 2025-01-22 04:56:05 +05:30
21e092a3e0 Merge pull request #900 from deguif/update-php-cs-fixer-repository
Update php-cs-fixer repository organisation
2025-01-08 17:53:40 +05:30
64652c947d Update php-cs-fixer repository organisation 2025-01-08 11:13:54 +01:00
9e72090525 Fix composer-dependency-analyser packagist repository 2024-12-30 21:54:47 +05:30
34b79cab10 Improve docs for php-version-file input 2024-12-30 21:47:27 +05:30
e5af5d68b4 Update default version in linux.sh and darwin.sh 2024-12-30 20:17:07 +05:30
ba21a89e0b Pass prefix options to make in source.sh 2024-12-29 09:22:49 +05:30
12b88cf3e2 Fix building pdo_firebird on macOS with clang 15 2024-12-29 09:17:30 +05:30
cffd8ca58a Fix libssl link in couchbase [skip ci] 2024-12-28 18:26:04 +05:30
85ed51cf85 Fix support for zephir_parser 2024-12-28 18:15:07 +05:30
5bb2eed0aa Fix oci extension support on Windows for PHP 8.4 and above 2024-12-28 02:07:42 +05:30
96fb539134 Bump node dependencies 2024-12-26 18:03:23 +05:30
775fa76ea4 Do not upgrade when version is pre-installed on macOS 2024-12-23 16:27:45 +05:30
da729085ef Add support for pre-installed PHP 2024-12-23 16:04:30 +05:30
b6d8115f12 Add support for .tool-versions format in php-version-file 2024-12-23 15:27:22 +05:30
84f76b1fc9 Add support for composer files in sub-directory 2024-12-23 14:36:14 +05:30
cdfde5ebec Fix update on multiple installs in same job 2024-12-23 07:33:26 +05:30
7e98140142 Add windows-2025 to the readme 2024-12-19 22:54:36 +05:30
85a8dfd0c7 Rebuild release file 2024-12-14 03:27:47 +05:30
7ee42db5db Merge pull request #892 from tillkruss/patch-2
Relay: Support PHP 8.4 and 8.5
2024-12-13 21:56:33 +00:00
cdbb89961e support 8.4 and 8.5 for relay 2024-12-13 09:24:59 -08:00
19ba822314 Merge pull request #890 from alexmerlin/fix-github-workflows-docs
Fixed syntax error in `.github/workflows/docs.yml`
2024-12-02 09:20:29 +00:00
fb9c2a9f77 Fixed typo in GitHub workflows docs.yml
Signed-off-by: alexmerlin <alex@dotkernel.com>
2024-12-02 11:04:50 +02:00
e7453ef93f Merge pull request #889 from alexmerlin/fix-readme-typo
Fixed small typo in `README.md`
2024-12-02 08:52:14 +00:00
efd3a13445 Fixed small typo in README.md
Signed-off-by: alexmerlin <alex@dotkernel.com>
2024-12-02 10:18:57 +02:00
981ce2a75a Do not add composer in docs workflow 2024-12-01 07:14:07 +05:30
d97b3754a8 Fix fetching libraries on old PHP on Windows 2024-12-01 06:10:56 +05:30
edf0223f7d Add extension type in docs workflow 2024-12-01 06:00:17 +05:30
516490f3d1 Update versions in manifect and win32.ps1 2024-12-01 04:45:08 +05:30
e77cdb393f Update PHP version in README [skip ci] 2024-11-23 03:49:40 +05:30
944fb41c67 Merge pull request #884 from shivammathur/dependabot/github_actions/develop/codecov/codecov-action-5
Bump codecov/codecov-action from 4 to 5
2024-11-18 15:08:19 +00:00
0830e5d434 Bump codecov/codecov-action from 4 to 5
Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 4 to 5.
- [Release notes](https://github.com/codecov/codecov-action/releases)
- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/codecov/codecov-action/compare/v4...v5)

---
updated-dependencies:
- dependency-name: codecov/codecov-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-18 14:43:15 +00:00
ae95648cfc Bump Node.js dependencies 2024-11-18 19:32:14 +05:30
a75ffb672b Fix status code output in get function 2024-11-12 02:20:20 +05:30
80075aeba5 Wait in get till no processes are using the output filepath 2024-11-11 14:32:06 +05:30
449afbcaec Handle race condition in get on a mutli self-hosted runners setup 2024-11-11 12:53:09 +05:30
ce2f681d22 Add macos-15 to the README 2024-11-04 10:07:31 +05:30
cb0fc744e6 Use windows-2022 in php workflow 2024-11-04 09:56:32 +05:30
58a6e6fb4b Add PHP 8.5 to the workflows 2024-11-04 09:55:55 +05:30
bf9d25532d Improve docs workflow 2024-11-04 09:55:00 +05:30
4662a3d03c Add PHP 8.5 to the README 2024-11-04 09:48:51 +05:30
e4fb5432c7 Refactor issue templates to issue forms 2024-11-04 09:43:52 +05:30
7f1cfc01ec Bump version to 2.32.0
Update Node.js dependencies

Migrate eslint config to a mjs file

Fix imports in tests

Bump to Node.js 20.x in workflows
2024-11-04 08:55:26 +05:30
371ee9d086 Fix zts support on self-hosted envs 2024-11-04 08:20:56 +05:30
51383ecefe Fix adding debug package lists 2024-11-04 07:45:52 +05:30
cf36231a82 Remove macos-12 from docs workflow [skip ci] 2024-10-21 06:20:59 +05:30
9f51892bda Drop support for macos-12 2024-09-16 21:50:26 +05:30
53f82379e8 Merge pull request #859 from janedbal/composer-dependency-analyser
Support composer-dependency-analyser tool
2024-07-17 03:25:37 +00:00
24eff50574 Support composer-dependency-analyser 2024-07-15 15:14:10 +02:00
15b611248c Update debian version support in README 2024-07-14 07:04:11 +05:30
6e5c13cd3c Bump version to 2.31.2 2024-07-14 02:49:56 +05:30
e07eecf7a4 Update Node.js dependencies 2024-07-14 02:48:56 +05:30
57a6e91640 Test without HOMEBREW_DEVELOPER=1 2024-07-14 02:21:00 +05:30
c541c155ee Bump version 2.31.1
Update Node.js dependencies
2024-07-08 16:11:28 +05:30
afff805ea3 Fix cache support for ioncube 2024-07-02 18:02:33 +05:30
594bd591ec Fix version regex in Add-Extension 2024-07-01 22:34:55 +05:30
2e947f1f69 Bump version to 2.31.0
Update Node.js dependencies
2024-06-24 03:19:18 +05:30
2a5212466c Add fallback mirror for php PPA when launchpad is down 2024-06-24 02:56:51 +05:30
9c28f9ba58 Fix support for phalcon on PHP 7.4 2024-06-23 18:30:14 +05:30
b9f1db485f Improve support for firebird 2024-06-23 18:12:47 +05:30
588b5da142 Fix support for couchbase on Ubuntu 24.04 2024-06-23 18:12:42 +05:30
a0edbac27b Fix support for blackfire 2024-06-23 08:15:22 +05:30
606ac25b84 Fix oci extension support on Ubuntu 24.04 2024-06-23 07:54:02 +05:30
ea566b68c0 Fix support for relay 2024-06-23 07:41:47 +05:30
4f124b97f7 Merge pull request #853 from shivammathur/dependabot/npm_and_yarn/braces-3.0.3
Bump braces from 3.0.2 to 3.0.3
2024-06-16 21:46:00 +05:30
8fe6ba1e38 Bump braces from 3.0.2 to 3.0.3
Bumps [braces](https://github.com/micromatch/braces) from 3.0.2 to 3.0.3.
- [Changelog](https://github.com/micromatch/braces/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/braces/compare/3.0.2...3.0.3)

---
updated-dependencies:
- dependency-name: braces
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-16 13:17:43 +00:00
193510cd90 Link apt-fast to apt-get if missing 2024-06-16 08:07:19 +05:30
b5f04d97d9 Bump version to 2.30.6
Update Node.js dependencies
2024-06-16 07:39:23 +05:30
4b56933e00 Add dkpg option to overwrite conf files 2024-06-16 07:39:18 +05:30
fc14643b0a Fix brew link step
We add --overwrite parameter to brew install and upgrade commands, so that in the linking step it does not fail if another php version is linked
2024-06-02 23:04:56 +05:30
fdb0d9d1a7 Add PHP 8.3 support for zephir parser 2024-06-02 07:32:16 +05:30
622cada40f Bump Node.js dependencies 2024-05-28 12:43:43 +05:30
2a620039e8 Fix priority for ev extension 2024-05-28 12:31:00 +05:30
376a964e21 Implement ioncube support on unix correctly
I think I jumped the shark with this one for this project
2024-05-22 06:54:49 +05:30
d6560b1fbb Document and test support for ubuntu-24.04 2024-05-17 19:19:10 +05:30
868f02c3ff Improve support for deb822 system sources file 2024-04-27 21:04:56 +05:30
18975ec414 Fix ecs config 2024-04-26 02:16:03 +05:30
c49792fb59 Merge pull request #838 from em411/feature/ecs-support
Add support for ecs
2024-04-26 02:03:46 +05:30
806c3cc058 Add support for ecs 2024-04-25 21:59:57 +02:00
c665c7a15b Bump version to 2.30.4 2024-04-24 03:54:07 +05:30
b30e4bc764 Document that only PHP 5.6 and above are supported on arm64 macos runners 2024-04-24 03:52:52 +05:30
436881d084 Set macos version in php workflow to macos-13 2024-04-24 03:38:15 +05:30
14d9660823 Fix support for sqlsrv and pdo_sqlsrv 2024-04-24 03:05:05 +05:30
efffd0e4f2 Bump version to 2.30.3 2024-04-21 18:55:19 +05:30
d802457674 Fix reading extension_dir in PHP 8.4 on macOS 2024-04-21 18:16:08 +05:30
8872c784b0 Bump version to 2.30.2
Update Node.js dependencies
2024-03-31 03:53:16 +05:30
b203b24815 Hotfix: update brew along with core tap 2024-03-31 03:51:38 +05:30
116fe4df69 Add vld for macOS 2024-03-26 17:29:27 +05:30
73963f5001 Uprade existing macOS version 2024-03-25 07:30:22 +05:30
f4fb0af4d5 Fix phalcon5 support on Windows 2024-03-25 07:27:19 +05:30
eb73c01f76 Fix oci extensions for PHP 8.4 2024-03-25 03:47:20 +05:30
3d8c10397e Fix support for sqlsrv and pdo_sqlsrv extensions 2024-03-25 03:10:43 +05:30
db8db3c7c7 Fix type error in Get-File in win32.ps1 2024-03-25 02:42:14 +05:30
31bfabaf56 Bump Node.js dependencies 2024-03-25 01:05:36 +05:30
21eeae309a Cleanup dependency code on macOS and add retry to git fetch 2024-03-18 09:02:23 +05:30
48e0de2ea6 Update Pre-installed PHP version in Windows runners in README 2024-03-10 12:07:59 +05:30
88841d1465 Update default PHP versions in README for GH runners 2024-03-03 07:41:03 +05:30
a4e22b60bb Bump version to 2.30.0 2024-03-01 12:06:41 +05:30
4f6ab99328 Sync brew core tap for all runners 2024-03-01 12:06:34 +05:30
a870b0a9be Update README [skip ci] 2024-02-24 11:34:19 +05:30
67271131b1 Update README.md
actions/cache 4 was already released
2024-02-23 02:37:15 +05:30
a6ce3f5633 Add support to use existing COMPOSER_PROCESS_TIMEOUT 2024-02-22 12:06:24 +05:30
1a5ac4aa9a Add more notes about debugging symbols in README [skip ci] 2024-02-22 11:25:40 +05:30
765279d5ef Merge pull request #813 from shivammathur/dependabot/github_actions/develop/codecov/codecov-action-4
Bump codecov/codecov-action from 3 to 4
2024-02-05 20:19:56 -08:00
d71d15b3b3 Bump codecov/codecov-action from 3 to 4
Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 3 to 4.
- [Release notes](https://github.com/codecov/codecov-action/releases)
- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/codecov/codecov-action/compare/v3...v4)

---
updated-dependencies:
- dependency-name: codecov/codecov-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-05 10:57:17 +00:00
ad24e86677 Merge pull request #812 from shivammathur/dependabot/github_actions/develop/actions/cache-4
Bump actions/cache from 3 to 4
2024-01-22 15:41:53 +05:30
73dfd2f824 Bump actions/cache from 3 to 4
Bumps [actions/cache](https://github.com/actions/cache) from 3 to 4.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-22 10:07:33 +00:00
6d7209f44a Add patch for old random headers on PHP 8.4 2024-01-15 11:14:26 +05:30
2ee6851e7b Bump Node.js dependencies 2024-01-15 03:40:39 +05:30
353ba41d44 Add support for phalcon on PHP 8.3 2024-01-07 01:12:10 +05:30
5c424d6c81 Mark v1 as unsupported 2024-01-01 01:55:48 +05:30
e927136b25 Bump Node.js dependencies
Bump version to 2.29.0
2024-01-01 01:34:06 +05:30
35557a3770 Update coverage in install.test.ts 2024-01-01 01:31:20 +05:30
43e870b2d0 Add highest alias as an alternative to latest 2024-01-01 01:26:40 +05:30
dc1a77b457 Fix support for http extension on zts and debug on macOS 2023-12-26 12:46:29 +05:30
812360879e Add support for zts and debug extensions on macOS 2023-12-26 02:19:32 +05:30
201dd6c1db Add zts support on macOS 2023-12-25 03:09:27 +05:30
97e0a9729a Revert bumping PHP version for snapshot minimum stability. 2023-12-24 02:21:23 +05:30
5a2bd88cb3 Try to fix docs workflow 2023-12-24 02:12:22 +05:30
7ba520ae30 Merge pull request #804 from shivammathur/dependabot/github_actions/develop/actions/download-artifact-4
Bump actions/download-artifact from 3 to 4
2023-12-18 16:53:51 +05:30
f47a6e7ca3 Merge pull request #805 from shivammathur/dependabot/github_actions/develop/actions/upload-artifact-4
Bump actions/upload-artifact from 3 to 4
2023-12-18 16:53:40 +05:30
e1c6cff579 Merge pull request #803 from shivammathur/dependabot/github_actions/develop/github/codeql-action-3
Bump github/codeql-action from 2 to 3
2023-12-18 16:53:09 +05:30
6e825ca69e Bump actions/upload-artifact from 3 to 4
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 3 to 4.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-18 10:33:19 +00:00
7b1eaadfbb Bump actions/download-artifact from 3 to 4
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 3 to 4.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-18 10:33:16 +00:00
5b709ff10e Bump github/codeql-action from 2 to 3
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2 to 3.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/v2...v3)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-18 10:33:13 +00:00
ed98159fe9 Fix PHP 8.3 support status in README. Closes #802 2023-12-14 18:50:41 +05:30
58f08c5f7c Add box and php-scoper in tools support in README 2023-12-14 16:38:02 +05:30
9e24ffafe7 Merge pull request #800 from davereid/patch-2
Document php-version can come from platform overrides in composer.lock or composer.json
2023-12-08 08:02:43 +05:30
5eca5d1c47 Update README.md 2023-12-07 16:02:03 -06:00
c085ca391e Merge pull request #794 from davereid/patch-1
Provide a "lowest" php-version parameter
2023-12-08 00:14:49 +05:30
93745da978 Updated files after npm run build. 2023-12-07 12:23:09 -06:00
c088c0cfeb Document php-version can come from platform overrides in composer.lock and composer.json 2023-12-07 10:53:24 -06:00
86b90110cb Update php.yml 2023-12-07 10:46:39 -06:00
1a102bc9f2 Update utils.ts 2023-12-07 09:44:35 -06:00
131ba03b0d Fix phalcon support 2023-12-07 08:15:34 +05:30
e8cd65f444 Switch to PHPCSStandards/PHP_CodeSniffer for phpcs and phpcbf 2023-12-04 08:00:30 +05:30
2810265746 Update php.yml 2023-11-30 09:53:39 -06:00
dab726e922 Provide a "lowest" php-version parameter 2023-11-29 20:26:11 -06:00
e6f75134d3 Update phpts section in README 2023-11-27 18:07:02 +05:30
1874353919 Fix linking grpc on macos but installed along protoc 2023-11-27 17:08:32 +05:30
eea39ea741 Disable xdebug and pcov when blackfire extension is installed 2023-11-27 16:39:18 +05:30
bac56c8d91 Add patch for geos 2023-11-27 15:47:27 +05:30
124d256c78 Add back support for nightly builds on self-hosted 2023-11-27 14:52:14 +05:30
eeddcfe955 Bump version to 2.28.0
Update Node.js dependencies
2023-11-27 13:57:32 +05:30
de2903ad82 Fix installing zts builds 2023-11-26 03:55:45 +05:30
bbe1204148 Use cached builds for zts 2023-11-26 03:34:57 +05:30
99a92d54d5 Test cache for PHP 8.3 and PHP 8.4 2023-11-24 01:06:24 +05:30
7c6c249257 Mark PHP 8.3 as stable 2023-11-23 17:12:56 +05:30
e6d44f159a Add PHP 8.4 to wiki extension pages 2023-11-23 12:12:26 +05:30
dc513528da Update os in docs workflow 2023-11-23 11:57:50 +05:30
bfbd3882c0 Merge pull request #787 from jrfnl/feature/ghactions-update-for-php-8.3
GH Actions/docs workflow: generate extensions page for PHP 8.3
2023-11-22 20:37:08 -08:00
3c525df325 GH Actions/docs workflow: generate extensions page for PHP 8.3 2023-11-23 03:19:38 +01:00
a36e1e52ff Bump version to 2.27.1
Bump Node.js dependencies
2023-11-07 13:55:37 +05:30
04ff9b08a2 Add HOMEBREW_NO_INSTALL_FROM_API=1 to darwin.sh 2023-11-07 13:43:28 +05:30
65fad67e88 Fix updating homebrew dependencies after sharding in core tap 2023-11-07 13:11:56 +05:30
6668249e24 Merge pull request #778 from shivammathur/dependabot/github_actions/develop/actions/setup-node-4
Bump actions/setup-node from 3 to 4
2023-11-06 04:04:01 -08:00
81c255f988 Bump actions/setup-node from 3 to 4
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 3 to 4.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-06 11:00:34 +00:00
81cd5ae092 Bump version to 2.27.0 2023-11-01 19:56:15 +05:30
29a9813921 Add required extensions for box 2023-11-01 10:23:55 +05:30
f60e7de98e Add PHP 8.4 to the php workflow
Enable PHP 8.3 for macOS in the php workflow
2023-11-01 09:35:10 +05:30
b5efb21934 Add tests for box and php-scoper 2023-11-01 09:29:02 +05:30
26e6a92f3b Merge pull request #776 from theofidry/patch-1
feat: Add Box and PHP-Scoper as tools
2023-11-01 08:53:26 +05:30
28b68529b5 feat: Add Box and PHP-Scoper as tools 2023-11-01 08:53:26 +05:30
4e4861ec30 Fix support for couchbase on PHP 7.4 2023-10-30 08:11:09 +05:30
70169700c3 Try to improve couchbase compilation 2023-10-30 06:58:16 +05:30
f4e27c9ead Bump Node.js dependencies
Bump version to 2.26.1
2023-10-30 01:47:34 +05:30
9855c76987 Set keepAlive to false. After Node 19 it is true by default. 2023-10-30 01:38:35 +05:30
546935924a Merge pull request #771 from shivammathur/dependabot/npm_and_yarn/babel/traverse-7.23.2
Bump @babel/traverse from 7.22.5 to 7.23.2
2023-10-19 16:04:25 +05:30
491e9de600 Bump @babel/traverse from 7.22.5 to 7.23.2
Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.22.5 to 7.23.2.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.23.2/packages/babel-traverse)

---
updated-dependencies:
- dependency-name: "@babel/traverse"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-19 09:40:39 +00:00
e3bda5bed8 Add support for macOS Sonoma (14) and drop support for Big Sur (11) 2023-10-01 19:03:17 +05:30
e70f6d9e7c Fallback to pecl in add_brew_extension on macOS 2023-10-01 18:49:44 +05:30
92e992b198 Update versioning section in the README 2023-09-23 04:32:24 +05:30
99680be1df Rename branch in README 2023-09-23 03:29:31 +05:30
e83e329355 Fix find call in darwin.sh in copy_brew_extensions on failure 2023-09-22 14:07:12 +05:30
10c12b9377 Fix checking for existing php formula on macOS 2023-09-22 14:00:55 +05:30
91026460e4 Create tool_path_dir if it does not exist 2023-09-22 08:15:57 +05:30
7fdd3ece87 Fix blackfire-player on Linux and macOS
Drop support for blackfire-player on Windows
2023-09-14 02:51:49 +05:30
0de5aa9140 Bump version to 2.26.0 2023-09-14 02:51:49 +05:30
a6e0b1404f Bump Node.js dependencies 2023-09-14 02:51:48 +05:30
5d259c66b1 Bump node version to 20 in action.yml
Node 16 is EOL on 2023-09-11 so we update it to Node 20 that was added in the actions/runner in v2.308.0
2023-09-14 02:51:48 +05:30
6207829361 Update use of actions/checkout to v4 2023-09-14 02:51:47 +05:30
319feb83c2 Add support to install sqlsrv and pdo_sqlsrv from GitHub releases 2023-09-14 02:51:41 +05:30
661ad4bf75 Fix enabling latest pecl extensions 2023-09-09 08:53:07 +05:30
04c15e2314 Remove hardcoded latest version for sqlsrv and pdo_sqlsrv 2023-09-09 08:05:42 +05:30
5aa416d77b Merge pull request #766 from GrahamCampbell/patch-1
Use sqlsvr 5.11.1 on PHP 8
2023-09-09 07:18:11 +05:30
a9a661ccd4 Use sqlsvr 5.11.1 on PHP 8 2023-09-09 00:45:36 +01:00
321f8d7d9a Add PHP 8.4 in the README 2023-08-30 15:15:56 +05:30
7af6c0fe6f Update Node.js dependencies 2023-08-30 15:15:56 +05:30
36e04fc85c Merge pull request #754 from jasongill/develop
Add automatic detection of required PHP version from Composer's platform setting
2023-07-30 08:50:55 +05:30
95916a72b1 Only use config.platform.php, as it's guaranteed to be the required version of PHP 2023-07-29 19:48:28 -04:00
a5fb328c6a Add support for reading PHP version from composer.lock or composer.json 2023-07-29 19:46:06 -04:00
72ae4ccbe5 Update Node.js dependenices
Remove semver override

Bump version to 2.25.5
2023-07-29 22:03:23 +05:30
5b2015e8fe Link opcache to ext_dir on macOS 2023-07-29 21:45:53 +05:30
9c77701ae5 Remove workaround of Debian 12 in ppa.sh 2023-07-03 07:38:22 +05:30
394503cb8a Override semver version to 7.5.3 GHSA-c2qf-rxjj-qqgw/CVE-2022-25883 2023-07-02 02:34:06 +05:30
f1cc14e3d5 Fix grep call in ppa.sh
When distros use DEB822-STYLE .sources file or a custom default list file the list_file is not present, so we check if it exists before calling grep on it
2023-07-02 02:16:13 +05:30
9d529a72e0 Only check castor version if castor.php is present 2023-06-24 02:25:43 +05:30
c63f07d82e Fix version prefix for castor 2023-06-23 23:28:05 +05:30
e40aa32c04 Update Node.js dependencies 2023-06-23 23:23:33 +05:30
a683e80307 Merge pull request #746 from pyrech/support-castor
Add support for tool jolicode/castor
2023-06-23 22:59:01 +05:30
7ce22e0264 Add support for jolicode/castor 2023-06-23 16:13:17 +02:00
4bd44f22a9 Bump version to 2.25.4
Update Node.js dependencies
2023-06-13 03:25:48 +05:30
d2f333de6f Fix regression in major/minor.major version support for phpunit 2023-06-13 03:16:19 +05:30
948bd8df3c Fix fs import in utlts.test.ts 2023-06-12 17:14:07 +05:30
8cac79fdb1 Bump version to 2.25.3
Update Node.js dependencies
2023-06-12 15:28:42 +05:30
6cc8b47c6f Add support to fetch tool versions from packagist 2023-06-12 15:27:46 +05:30
0be6fa1958 Remove quotes after : in CSVArray 2023-06-12 15:27:21 +05:30
22d9c80367 Cannot get release to run, so forced in changes 2023-06-12 15:27:21 +05:30
4630172078 Added what should be compensation for phpunit versions 2023-06-12 15:27:20 +05:30
1b02c009e7 Add npm run build to CONTRIBUTING.md 2023-06-12 04:45:59 +05:30
12282c9597 Add support for ts intl builds 2023-06-07 09:26:20 +05:30
592bbc7716 Shorten grep call in add_extensions.sh 2023-06-07 09:24:56 +05:30
fb5054b163 Use correct prefix for zend_extensions when installed using PECL 2023-06-06 19:27:14 +05:30
3f2a402846 Mark runner as self-hosted on nektos/act 2023-06-05 16:28:04 +05:30
c5fc0d8281 Fix disabling extensions with common substring 2023-05-24 23:01:34 +05:30
48037d201f Add priority config for couchbase and psr 2023-05-24 19:58:13 +05:30
71b43c4f65 Bump version to 2.25.2
Bump Node.js dependencies
2023-05-24 19:58:13 +05:30
3818224063 Fix to avoid double activation
Fix parsing extension input
2023-05-24 19:58:08 +05:30
5b29e8a454 Merge pull request #726 from yassinehamouten/fix/typo-in-sage-example
docs(example): fix a typo in the strategy of the sage example
2023-05-08 08:25:15 +05:30
2a798336a0 docs(example): fix a typo in the strategy of the sage example 2023-05-08 03:11:22 +02:00
cb8f453143 Update Node.js dependencies 2023-04-19 08:37:25 +05:30
19323ea920 Fix event extension priority 2023-04-18 22:02:29 +05:30
b951cf1d99 Add fallback using expanded assets in Add-DebugSymbols on Windows 2023-04-17 08:37:41 +05:30
1fdc5e773b Update Node.js dependencies 2023-04-17 03:36:15 +05:30
1474d67903 Drop support for ubuntu-18.04 2023-04-03 10:11:53 +05:30
1afae1868c Bump version 2.25.0
Bump Node.js dependencies
2023-04-03 10:04:23 +05:30
36e33e130a Add known non-default extension priorities in a config 2023-04-03 02:48:41 +05:30
3d794ddd93 Use phpenmod only for PHP 5.6 and above 2023-04-03 01:18:19 +05:30
c61bd0e074 Fix Get-File in win32.ps1 2023-04-03 00:03:00 +05:30
1f8252a3ed Fix selecting php-builder builds on Windows 2023-04-02 23:54:13 +05:30
3e2462a699 Add Url and FallbackUrl in exception on Windows 2023-04-02 23:42:19 +05:30
e513384a65 Fix jit configuration 2023-04-02 23:23:48 +05:30
6483a6ea70 Improve install_packages in linux.sh 2023-04-02 22:03:11 +05:30
ca308a6886 Fix minor shellcheck error 2023-04-02 21:51:40 +05:30
035ef490b9 Rename resolveVersion to readPHPversion 2023-04-02 20:30:40 +05:30
6bf279d08a Fix reading php version from file 2023-04-02 20:25:49 +05:30
bb16550379 Add support for relay on PHP 8.3 2023-03-31 01:23:49 +05:30
7d999d501a Switch to relay.so as the only source for relay extension 2023-03-31 00:40:53 +05:30
7f8b1e5773 Exclude php 8.3 on macos 2023-03-31 00:29:23 +05:30
6461006ceb Improve Write-Error messages 2023-03-14 06:07:46 +05:30
5f422817a1 Use Write-Error with ErrorAction as Stop instead of exit 2023-03-14 06:02:04 +05:30
1b08836381 Merge pull request #707 from G-Rath/patch-1
docs: improve sentence structure slightly
2023-03-05 02:40:49 +05:30
ae98bca05f docs: improve sentence structure slightly 2023-03-05 09:15:35 +13:00
fb1ad7fc84 Fix enable_extension 2023-02-09 15:50:52 +05:30
0d60024683 Choose correct ts build for zephir_parser 2023-02-09 15:41:48 +05:30
1224b29111 Add support for snmp on macOS using shivammathur/extensions 2023-02-08 20:44:10 +05:30
2f306f9d25 Use phpenmod to enable extensions on linux 2023-02-05 19:45:47 +05:30
39b4e4a983 Fix warning about using -n and -I together in xargs 2023-02-05 19:19:43 +05:30
7e46297c8d Update README 2023-02-03 15:32:03 +05:30
f9390a5478 Add retry logic to Invoke-Webrequests
Add fallback url to nightly setup
2023-02-03 12:59:37 +05:30
f42145a164 Remove call to getManifestURL unless needed in utils.parseVersion 2023-01-29 21:53:23 +05:30
755bbb1cc0 Minor refactor in php.yml 2023-01-29 21:53:17 +05:30
a36edd3ca4 Test php-version-file in php workflow 2023-01-29 21:41:09 +05:30
f2018b2189 Update php-version and php-version-file input section in README 2023-01-29 21:20:52 +05:30
9c411b6e2b Minor refactor in utils.resolveVersion 2023-01-29 20:17:23 +05:30
e8d8aa3403 Add back the required parameter in action.yml 2023-01-29 19:51:07 +05:30
686e8dfff9 Merge pull request #691 from stevelacey/php-version-file-inputs
Move php version default out of action.yml and update inputs
2023-01-29 19:46:18 +05:30
b46c8e2a8c Move php version default out of action.yml and update inputs #629 #690 2023-01-29 16:23:08 +08:00
2d47531473 Merge pull request #690 from stevelacey/php-version-file
Support .php-version file for version detection
2023-01-29 11:40:49 +05:30
fd03521cb4 Support .php-version file; closes #629 2023-01-29 13:41:50 +08:00
f03add0b41 Add uuid to brew_extensions list 2023-01-29 08:41:56 +05:30
baf9535ba5 Merge pull request #689 from viktorruskai/patch-1
Fix DocBlock in `utils.ts`
2023-01-28 03:41:21 +05:30
cc0e576689 Update utils.ts 2023-01-27 22:12:33 +01:00
d30ad8b184 Fix relay cache setup 2023-01-27 08:38:32 +05:30
0f765070fa Update Node.js dependencies 2023-01-27 07:41:01 +05:30
313d0cfdbf Fix function name in grpc_php_plugin.ps1 2023-01-27 05:26:40 +05:30
cf767706fe Bump version to 2.24.0 2023-01-24 21:23:58 +05:30
1267cf80a1 Change choco install script URL 2023-01-22 02:10:29 +05:30
7abee8e28c Add custom support for zephir parser 2023-01-22 02:04:12 +05:30
dd0115673c Fix sudo setup for containers with broken lists 2023-01-21 08:06:21 +05:30
bbc65d999a Fix extension logs
Refactor utils.addCommand
2023-01-18 09:00:28 +05:30
6db1a06425 Improve support for blackfire-player 2023-01-17 05:11:26 +05:30
52eb86c60c Add support for relay extension 2023-01-12 16:14:06 +05:30
2b77dd6b79 Merge pull request #684 from Rotzbua/patch-1
doc: fix otudated github action version
2023-01-10 19:53:38 +05:30
224f9ddef5 doc: fix otudated github action version 2023-01-10 14:19:28 +01:00
7f5c8b51ba Merge pull request #683 from shivammathur/dependabot/npm_and_yarn/json5-1.0.2
Bump json5 from 1.0.1 to 1.0.2
2023-01-08 17:17:22 +05:30
bd5c747191 Bump json5 from 1.0.1 to 1.0.2
Bumps [json5](https://github.com/json5/json5) from 1.0.1 to 1.0.2.
- [Release notes](https://github.com/json5/json5/releases)
- [Changelog](https://github.com/json5/json5/blob/main/CHANGELOG.md)
- [Commits](https://github.com/json5/json5/compare/v1.0.1...v1.0.2)

---
updated-dependencies:
- dependency-name: json5
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-01-08 05:14:30 +00:00
40846b27d0 Fix sed call in parse_pecl_configure_options 2022-12-27 04:42:24 +05:30
8e2ac35f63 Update README 2022-12-26 03:45:00 +05:30
a1e6789a94 Improve Get-PhalconReleaseAssetUrl 2022-12-25 21:52:32 +05:30
9114b007ae Restore stability workaround for PHP 8.1 on Windows 2022-12-25 21:26:22 +05:30
cb0c293f02 Fix typo in blackfire regex on Windows 2022-12-25 21:14:03 +05:30
387ec95b46 Improve fetching phalcon release url on Windows 2022-12-25 20:48:17 +05:30
3514d30f93 Allow major.minor protoc versions 2022-12-25 20:03:40 +05:30
e186e47261 Bump version to 2.23.0
Update Node.js dependencies
2022-12-25 19:18:47 +05:30
e51e662ef0 Add support to install extensions from shivammathur/php-extensions-windows 2022-12-23 18:40:56 +05:30
5afd8a1842 Fix error in darwin.sh while updating dependencies 2022-12-23 18:11:26 +05:30
1a42045d48 Use ls-remote to get default branch
Calling GitHub API on macOS without the token hits rate limit
2022-12-19 08:19:07 +05:30
b3a12ce01e Add fallback in PHP build cache in Windows 2022-12-19 07:19:21 +05:30
04b2ed5b3e Fix protoc support on Windows 2022-12-19 06:57:44 +05:30
189e8e6ec0 Update pre-installed PHP versions on GitHub runners
Minor fixes in README
2022-12-18 08:20:18 +05:30
3407e6019c Quote ini values with equal sign 2022-12-15 05:32:32 +05:30
f20012026f Bump nightly versions in unix.sh 2022-12-15 05:32:31 +05:30
7743b7976f Update version in actions.yml 2022-12-15 05:32:31 +05:30
b7b50ce742 Fix extension support on php 8.2 on windows
Add PHP 8.2 support for backfire extension
2022-12-15 05:32:30 +05:30
aa9b80f158 Fix extension support on php 8.2 on windows
Add PHP 8.2 support for backfire extension
2022-12-08 19:58:40 +05:30
53adb47562 Mark PHP 8.2 as stable
Update OS support in README
2022-12-08 19:37:49 +05:30
f7d3c00320 Merge pull request #673 from jrfnl/feature/readme-update-php-list
README: update for release of PHP 8.2
2022-12-08 19:35:28 +05:30
b359d922e7 README: update code samples 2022-12-08 14:59:54 +01:00
01aa440f0b README: update for release of PHP 8.2
I also realized that - while not mentioned in the changelog or the readme - PHP 8.3 _is_ already available via the `setup-php` action runner, so I've added it to the README now.

Ref: https://www.php.net/supported-versions.php
2022-12-08 14:49:16 +01:00
51f83e019c Switch composer-unused back to phar 2022-12-01 04:45:59 +05:30
173ca15c9b Fix get_extension_from_formula in darwin.sh 2022-11-16 10:40:40 +05:30
4704ad638a Improve extension support on macOS 2022-11-14 15:17:12 +05:30
1a18b2267f Add note about updating PHP if ppa is missing on Ubuntu 2022-10-28 15:45:12 +05:30
e9704839e9 Update Node.js dependencies 2022-10-28 12:28:34 +05:30
5178fac634 Update PHP if ppa:ondrej/php is missing ref: actions/runner-images#6331 2022-10-28 12:24:37 +05:30
388883d4bf Fix support for firebird and couchbase 2022-10-25 15:29:26 +05:30
cae6d06e69 Improve phalcon support 2022-10-24 19:05:14 +05:30
89f4f7e8be Run configure_pecl only when ini_files are set 2022-10-24 10:30:28 +05:30
d2efbcd126 Fix debug support on Linux 2022-10-24 10:28:08 +05:30
98e3af0bff Configure brew on linux on grpc_php_plugin setup 2022-10-24 09:37:13 +05:30
e8836c6d46 Fix logs on failure in add_pecl_extension 2022-10-24 09:37:13 +05:30
9068f2e46f Update sqlsrv and pdo_sqlsrv to 5.10.1 2022-10-24 09:37:12 +05:30
5bbbd3fdf6 Update Node.js packages 2022-10-24 09:37:12 +05:30
7622357ff1 Improve phalcon5 support 2022-10-24 09:37:07 +05:30
6652a09da6 Add debug builds section in the README 2022-10-24 03:34:36 +05:30
48fb8e1194 Add debug symbols support to Windows 2022-10-17 18:00:08 +05:30
bbc6e9069b Merge branch 'flavioheleno-improv/zts' into develop 2022-10-17 17:04:24 +05:30
37dcd1cf8c Merge branch 'improv/zts' of https://github.com/flavioheleno/setup-php into flavioheleno-improv/zts 2022-10-17 17:03:20 +05:30
12b1efad4b Bump version to 2.22.0
Bump Node.js dependencies
2022-10-12 16:35:02 +05:30
0575a32108 Switch to $GITHUB_OUTPUT 2022-10-12 16:34:58 +05:30
71b0e09dbc Improve brew support on Linux 2022-10-10 16:24:35 +05:30
edff21f0a6 Fetch symfony-cli artifact url and fallback to brew 2022-10-10 15:35:30 +05:30
22035eb75b Fix version_prefix for laravel/pint 2022-10-10 15:35:29 +05:30
b556cf7292 Add support for debug builds 2022-10-10 15:34:36 +05:30
f99a9d4624 Add thread-safe setup support 2022-10-05 19:31:52 -03:00
a49dfe8457 Fix version_prefix for laravel/pint 2022-09-26 15:22:12 +05:30
7ff9ac44b4 Add support for debug builds 2022-09-26 09:42:27 +05:30
7aff4d7a22 Run switch_version before check_extensions on Linux 2022-09-11 09:19:35 +05:30
633321754d Merge pull request #641 from lmichelin/master
🐞 Bug Fix: make symfony-cli installation faster on Linux
2022-09-02 02:30:57 +05:30
40a4cb064f Improve fetching brew taps 2022-09-02 02:21:52 +05:30
45410ae8f0 fix: make symfony-cli installation faster on linux 2022-09-01 18:20:00 +02:00
56ad5977ba Merge pull request #636 from shivammathur/composer-no-audit
Set COMPOSER_NO_AUDIT environment variable by default
2022-08-22 09:54:07 +05:30
6353d20df2 Set COMPOSER_NO_AUDIT environment variable by default 2022-08-22 09:46:12 +05:30
e04e1d97f0 Bump Node.js dependencies 2022-08-17 17:05:01 +05:30
52685a348b Add support to install rector in tools input 2022-08-17 16:48:27 +05:30
44d81f9830 Fix symfony support 2022-08-17 14:41:01 +05:30
401bdecb71 Add support for ast from shivammathur/extensions on macOS 2022-08-10 13:19:47 +05:30
aa82ffc68f Fix logs in add_pecl_extension 2022-07-29 02:57:11 +05:30
7e03c76ef2 Fix extension setup using PECL on Linux and macOS 2022-07-29 02:39:20 +05:30
16011a795d Upgrade Node.js dependencies 2022-07-28 03:39:51 +05:30
66f24470dc Fix reading composer package type for older versions 2022-07-20 19:41:49 +05:30
e57ea715eb Fix scoped tool setup on Windows 2022-07-20 19:41:07 +05:30
e8ba27f3d2 Fail on npm audit again 2022-07-20 04:47:55 +05:30
945c34c175 Update README 2022-07-19 15:44:51 +05:30
c8c64c6cf9 Bump version to 2.21.0
Continue on npm audit failure
2022-07-19 15:24:35 +05:30
0d3f92f127 Add support for phalcon5 on Windows 2022-07-19 14:26:08 +05:30
4979d5b484 Add workaround for missing phalcon packages on Ubuntu 22.04 2022-07-16 02:40:47 +05:30
0d9a1ba5ae Add support for phalcon5 on Linux and macOS
Fix get_pecl_version
2022-07-16 00:46:28 +05:30
3ede7656cb Add check for gd in php.yml 2022-07-15 23:22:56 +05:30
f3cdc074ce Merge pull request #617 from ChristophWurst/demo/php82-gd
Demo PHP8.2+gd failure
2022-07-13 19:17:22 +05:30
109db648f1 Demo PHP8.2+gd failure
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
2022-07-13 15:07:46 +02:00
3ccc00eece Merge pull request #614 from d8vjork/master
Add support for tool Laravel Pint
2022-07-11 15:57:41 +05:30
0f688a10cb Add support for tool Laravel Pint 2022-07-11 12:13:41 +02:00
3312ea6101 Bump version to 2.20.1
Fix format script in package.json
2022-07-08 04:55:53 +05:30
ce49f82dd8 Do not add composer plugins to allow list for composer v1 2022-07-08 04:55:44 +05:30
cf5cd90b4c Improve support for composer authenticating private respositories 2022-07-06 12:19:55 +05:30
cdb037c2a4 Bump version to 2.20.0 2022-07-06 00:43:26 +05:30
261f13a7c5 Add composer plugins to allow list before installing 2022-07-06 00:43:25 +05:30
9eaa66d89b Add support for event extension on unix 2022-07-05 16:22:07 +05:30
da9dfe4a71 Set RUNNER_TOOL_CACHE on self-hosted environments 2022-07-05 12:03:30 +05:30
a863ab6d3d Add support to allow composer plugins 2022-07-05 06:25:04 +05:30
050cb8061b Add coverage driver version in logs 2022-06-30 17:36:40 +05:30
3fda17f3fa Merge pull request #609 from dino182/develop
Fix Add-Path for self-hosted Windows
2022-06-27 17:24:50 +05:30
1a2cb4f872 Fix Add-Path for self-hosted Windows 2022-06-23 10:51:33 +01:00
4969814b69 Merge pull request #607 from markseuffert/patch-1
Updated documentation
2022-06-21 13:38:26 +05:30
07f2ea7d02 Updated documentation, review 2022-06-21 10:04:28 +02:00
a1c17b4b18 Updated documentation 2022-06-21 09:39:42 +02:00
3eda583472 Bump version to 2.19.1
Update Node.js dependencies
2022-06-06 08:22:16 +05:30
74d43be8a3 Fix support for deployer 2022-05-31 10:12:38 +05:30
aa1fe473f9 Bump version to 2.19.0 2022-05-30 07:52:31 +05:30
a92acf13e4 Remove years from LICENSE 2022-05-30 07:52:30 +05:30
0533892eb4 Fix jsdoc in fetch.ts 2022-05-30 07:52:30 +05:30
43fb4ad30e Bump ES version to 2021 2022-05-30 07:27:29 +05:30
b88a8c89d1 Fix protoc support 2022-05-26 10:21:36 +05:30
36d7f6c7c5 Set target-branch to develop in dependabot.yml 2022-05-26 09:47:27 +05:30
a1a52db9f3 Merge pull request #598 from shivammathur/dependabot/github_actions/codecov/codecov-action-3
Bump codecov/codecov-action from 2 to 3
2022-05-26 09:45:58 +05:30
88e54b10ca Merge pull request #599 from shivammathur/dependabot/github_actions/github/codeql-action-2
Bump github/codeql-action from 1 to 2
2022-05-26 09:45:50 +05:30
203099e007 Merge pull request #600 from shivammathur/dependabot/github_actions/actions/setup-node-3
Bump actions/setup-node from 1 to 3
2022-05-26 09:45:41 +05:30
4e9ea33f8d Bump actions/setup-node from 1 to 3
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 1 to 3.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v1...v3)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-26 04:11:48 +00:00
68ba5ba947 Bump github/codeql-action from 1 to 2
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 1 to 2.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/v1...v2)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-26 04:11:43 +00:00
99af32331c Bump codecov/codecov-action from 2 to 3
Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 2 to 3.
- [Release notes](https://github.com/codecov/codecov-action/releases)
- [Changelog](https://github.com/codecov/codecov-action/blob/master/CHANGELOG.md)
- [Commits](https://github.com/codecov/codecov-action/compare/v2...v3)

---
updated-dependencies:
- dependency-name: codecov/codecov-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-26 04:11:36 +00:00
810a92a9b0 Merge pull request #597 from turrisxyz/Dependabot-GitHub-Actions
chore: Included githubactions in the dependabot config
2022-05-26 09:40:26 +05:30
9c760dd6e2 chore: Included githubactions in the dependabot config
This should help with keeping the GitHub actions updated on new releases. This will also help with keeping it secure.

Dependabot helps in keeping the supply chain secure https://docs.github.com/en/code-security/dependabot

GitHub actions up to date https://docs.github.com/en/code-security/dependabot/working-with-dependabot/keeping-your-actions-up-to-date-with-dependabot

https://github.com/ossf/scorecard/blob/main/docs/checks.md#dependency-update-tool
Signed-off-by: naveen <172697+naveensrinivasan@users.noreply.github.com>
2022-05-26 02:48:43 +00:00
dea233d702 Merge pull request #596 from turrisxyz/Pinned-Dependencies-GitHub
chore: Set permissions for GitHub actions
2022-05-26 06:59:24 +05:30
787285e08a chore: Set permissions for GitHub actions
Restrict the GitHub token permissions only to the required ones; this way, even if the attackers will succeed in compromising your workflow, they won’t be able to do much.

- Included permissions for the action. https://github.com/ossf/scorecard/blob/main/docs/checks.md#token-permissions

https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#permissions

https://docs.github.com/en/actions/using-jobs/assigning-permissions-to-jobs

[Keeping your GitHub Actions and workflows secure Part 1: Preventing pwn requests](https://securitylab.github.com/research/github-actions-preventing-pwn-requests/)

Signed-off-by: nathannaveen <42319948+nathannaveen@users.noreply.github.com>
2022-05-26 00:50:23 +00:00
ee065c5938 Append custom ini files to php.ini files 2022-05-25 20:43:46 +05:30
dbc8ba0844 Fix enabling cached dependent extensions on lower PHP versions 2022-05-25 19:44:02 +05:30
fe9e23a16a Add unixodbc if missing in sqlsrv setup 2022-05-25 10:16:23 +05:30
16de39288a Fix couchbase cache on macOS 2022-05-24 18:59:36 +05:30
67ff09364d Fix support for couchbase 4.x 2022-05-24 15:45:18 +05:30
1dfe0dc4a4 Add support to specify couchbase version 2022-05-19 23:56:27 +05:30
6f83b63bf5 Fix couchbase setup
Fix couchbase version to 3.x till 4.x is stable

The couchbase 4.x is based on a C++ client library and it shipped with the extension. So we only add the C client library for earlier versions
2022-05-19 15:09:52 +05:30
f0db57dcab Fix pecl support on PHP 5.3
Remove pecl suffix option support from PHP 5.3 as Console_Getopt version used does not support it
2022-05-19 11:56:00 +05:30
6cba851606 Add support for Ubuntu 22.04 2022-05-06 05:43:20 +05:30
209324abab Prefix extension formula with tap name on macOS 2022-05-05 23:43:11 +05:30
846135c190 Create empty composer.json in scoped directory
When installing composer based tools in a scoped directory with old composer versions it breaks if a composer.json is not present in the scoped directory
2022-05-02 11:22:58 +05:30
32d20248ae Improve support for composer fallback URLs 2022-04-23 11:57:06 +05:30
ba8485d89f Update OS support for self-hosted runners in README 2022-04-21 17:13:31 +05:30
97721a77b9 Fix shivammathur/node image tag in README 2022-04-21 17:06:25 +05:30
7dfee150df Remove fs dependency 2022-04-17 10:53:49 +05:30
251330ef7f Switch to node16 in actions.yml 2022-04-15 06:20:31 +05:30
109 changed files with 10272 additions and 12244 deletions

View File

@ -1,16 +0,0 @@
{
"env": { "node": true, "jest": true },
"parser": "@typescript-eslint/parser",
"parserOptions": { "ecmaVersion": 2019, "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"]
}

View File

@ -71,6 +71,7 @@ npm test
Creating a release means compiling all the TypeScript code to a single file which `setup-php` can run. Run this, before you push your changes. Creating a release means compiling all the TypeScript code to a single file which `setup-php` can run. Run this, before you push your changes.
```bash ```bash
npm run build
npm run release npm run release
``` ```

View File

@ -1,42 +0,0 @@
---
name: Bug report
about: Nice, you found a bug!
title: ''
labels: 'bug'
assignees: 'shivammathur'
---
**Describe the bug**
<!-- Please describe the bug concisely. -->
**Version**
- [ ] I have checked releases, and the bug exists in the latest patch version of `v1` or `v2`.
- [ ] `v2`
- [ ] `v1`
**Runners**
<!-- Please mark the GitHub Action runner your workflow uses. -->
- [ ] GitHub Hosted
- [ ] Self Hosted
**Operating systems**
<!-- Please mention the operating systems your workflow uses. -->
**PHP versions**
<!-- Please mention the PHP versions your workflow uses. -->
**To Reproduce**
<!-- Please provide the relevant steps of your workflow `.yml` file. -->
**Expected behavior**
<!-- A clear and concise description of what you expected to happen. -->
**Screenshots/Logs**
<!-- If applicable, add screenshots or logs to help explain your problem. -->
**Additional context**
<!-- Add any other context about the problem here. -->
**Are you willing to submit a PR?**
<!-- We accept pull requests targeting the develop branch. -->

94
.github/ISSUE_TEMPLATE/bug.yml vendored Normal file
View File

@ -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 22.04, Windows Server 2022, 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

View File

@ -1,26 +0,0 @@
---
name: Feature request
about: Suggest a new feature
title: ''
labels: 'enhancement'
assignees: 'shivammathur'
---
**Describe the feature**
<!-- Please describe concisely the feature you want to add. -->
**Version**
- [ ] I have checked releases, and the feature is missing in the latest patch version of `v2`.
**Underlying issue**
<!-- Please describe the issue this would solve. -->
**Describe alternatives**
<!-- Please mention any alternative solutions you've considered. -->
**Additional context**
<!-- Add any other context or screenshots about the feature request here. -->
**Are you willing to submit a PR?**
<!-- We accept pull requests targeting the develop branch. -->

58
.github/ISSUE_TEMPLATE/feature.yml vendored Normal file
View File

@ -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

3
.github/SECURITY.md vendored
View File

@ -10,10 +10,9 @@ This security policy only applies to the latest patches of the following PHP ver
| Version | Supported | | Version | Supported |
|---------|--------------------| |---------|--------------------|
| 7.4 | :white_check_mark: |
| 8.0 | :white_check_mark: |
| 8.1 | :white_check_mark: | | 8.1 | :white_check_mark: |
| 8.2 | :white_check_mark: | | 8.2 | :white_check_mark: |
| 8.3 | :white_check_mark: |
## Reporting a Vulnerability ## Reporting a Vulnerability

7
.github/dependabot.yml vendored Normal file
View File

@ -0,0 +1,7 @@
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
target-branch: "develop"
schedule:
interval: "weekly"

View File

@ -3,23 +3,30 @@ on:
workflow_dispatch: workflow_dispatch:
schedule: schedule:
- cron: '0 15 * * 6' - cron: '0 15 * * 6'
permissions:
contents: read
jobs: jobs:
codeql: codeql:
permissions:
actions: read # for github/codeql-action/init to get workflow details
contents: read # for actions/checkout to fetch code
security-events: write # for github/codeql-action/autobuild to send a status report
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v4
with: with:
fetch-depth: 2 fetch-depth: 2
- name: Initialize CodeQL - name: Initialize CodeQL
uses: github/codeql-action/init@v1 uses: github/codeql-action/init@v3
with: with:
config-file: ./.github/codeql/codeql-configuration.yml config-file: ./.github/codeql/codeql-configuration.yml
languages: javascript languages: javascript
- name: Autobuild - name: Autobuild
uses: github/codeql-action/autobuild@v1 uses: github/codeql-action/autobuild@v3
- name: Perform CodeQL Analysis - name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1 uses: github/codeql-action/analyze@v3

View File

@ -3,21 +3,47 @@ on:
workflow_dispatch: workflow_dispatch:
schedule: schedule:
- cron: '0 15 * * 6' - cron: '0 15 * * 6'
permissions:
contents: read
jobs: jobs:
create: create:
permissions:
contents: none
name: Create name: Create
runs-on: ${{ matrix.operating-system }} runs-on: ${{ matrix.operating-system }}
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
operating-system: [ubuntu-20.04, ubuntu-18.04, windows-2022, macos-11] operating-system: [ubuntu-24.04, ubuntu-22.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'] 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: steps:
- name: Setup PHP - name: Setup PHP
uses: shivammathur/setup-php@v2 uses: shivammathur/setup-php@v2
with: with:
php-version: ${{ matrix.php-versions }} 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: env:
file: php${{ matrix.php-versions }}-${{ matrix.operating-system }}.md file: php${{ matrix.php-versions }}-${{ matrix.operating-system }}.md
version: ${{ matrix.php-versions }} version: ${{ matrix.php-versions }}
@ -26,10 +52,20 @@ jobs:
echo "## PHP $version" >> "$file" echo "## PHP $version" >> "$file"
printf "\n" >> "$file" printf "\n" >> "$file"
echo "\`\`\`" >> "$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" echo "\`\`\`" >> "$file"
printf "\n" >> "$file" printf "\n" >> "$file"
- name: Create for Windows rm "$file.all" "$file.builtin"
- name: Create final file for Windows
env: env:
file: php${{ matrix.php-versions }}-${{ matrix.operating-system }}.md file: php${{ matrix.php-versions }}-${{ matrix.operating-system }}.md
version: ${{ matrix.php-versions }} version: ${{ matrix.php-versions }}
@ -37,38 +73,53 @@ jobs:
run: | run: |
Write-Output "## PHP ${{ matrix.php-versions }}`n" | Out-File -FilePath "$env:file" Write-Output "## PHP ${{ matrix.php-versions }}`n" | Out-File -FilePath "$env:file"
Write-Output "``````" | Out-File -FilePath "$env:file" -Append 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 Write-Output "```````n" | Out-File -FilePath "$env:file" -Append
Remove-Item "$env:file.all" -Force
Remove-Item "$env:file.builtin" -Force
- name: Upload artifacts - name: Upload artifacts
uses: actions/upload-artifact@v3 uses: actions/upload-artifact@v4
with: with:
name: lists name: lists-php${{ matrix.php-versions }}-${{ matrix.operating-system }}.md
path: php${{ matrix.php-versions }}-${{ matrix.operating-system }}.md path: php${{ matrix.php-versions }}-${{ matrix.operating-system }}.md
update: update:
permissions:
contents: write # for Git to git push
name: Update name: Update
needs: create needs: create
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v4
with: with:
repository: ${{ github.repository }}.wiki repository: ${{ github.repository }}.wiki
- name: Download artifacts - name: Download artifacts
uses: actions/download-artifact@v3 uses: actions/download-artifact@v4
with: with:
path: ${{ github.workspace }} path: ${{ github.workspace }}/lists
pattern: lists-*
merge-multiple: true
- name: Configure Git - name: Configure Git
run : | run : |
git config --local user.email "${{ secrets.email }}" git config --local user.email "${{ secrets.email }}"
git config --local user.name "${{ github.repository_owner }}" git config --local user.name "${{ github.repository_owner }}"
- name: Combine - name: Combine
run: | run: |
for os in ubuntu-20.04 ubuntu-18.04 windows-2022 windows-2019 macos-11 macos-10.15; do for os in ubuntu-24.04 ubuntu-22.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 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; do 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-10.15" ]; then if [[ "${os%-*}" = "macos" ]]; then
cat lists/php"$version"-macos-11.md >> Php-extensions-loaded-on-"$os".md cat lists/php"$version"-macos-13.md >> Php-extensions-loaded-on-"$os".md
elif [ "$os" = "windows-2019" ]; then elif [ "${os%-*}" = "windows" ]; then
cat lists/php"$version"-windows-2022.md >> Php-extensions-loaded-on-"$os".md cat lists/php"$version"-windows-2022.md >> Php-extensions-loaded-on-"$os".md
else else
cat lists/php"$version"-"$os".md >> Php-extensions-loaded-on-"$os".md cat lists/php"$version"-"$os".md >> Php-extensions-loaded-on-"$os".md

View File

@ -16,6 +16,9 @@ on:
paths-ignore: paths-ignore:
- '**.md' - '**.md'
- 'examples/**' - 'examples/**'
permissions:
contents: read
jobs: jobs:
run: run:
name: Run name: Run
@ -26,14 +29,14 @@ jobs:
operating-system: [ubuntu-latest, windows-latest, macos-latest] operating-system: [ubuntu-latest, windows-latest, macos-latest]
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v4
with: with:
fetch-depth: 2 fetch-depth: 2
- name: Setup Node.js 16.x - name: Setup Node.js 20.x
uses: actions/setup-node@v1 uses: actions/setup-node@v4
with: with:
node-version: 16.x node-version: 20.x
- name: Install dependencies - name: Install dependencies
run: npm install run: npm install
@ -51,7 +54,7 @@ jobs:
run: npm audit run: npm audit
- name: Send Coverage - name: Send Coverage
uses: codecov/codecov-action@v2 uses: codecov/codecov-action@v5
with: with:
token: ${{ secrets.CODECOV_TOKEN }} token: ${{ secrets.CODECOV_TOKEN }}
files: coverage/lcov.info files: coverage/lcov.info

View File

@ -17,6 +17,10 @@ on:
paths-ignore: paths-ignore:
- '**.md' - '**.md'
- 'examples/**' - 'examples/**'
permissions:
contents: read
env:
default-php-version: '8.2'
jobs: jobs:
run: run:
name: Run name: Run
@ -24,41 +28,51 @@ jobs:
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
operating-system: [ubuntu-20.04, ubuntu-18.04, windows-2019, macos-latest] operating-system: [ubuntu-24.04, ubuntu-22.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'] 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: ''
php-version-file: 'php-version-file'
env: env:
extensions: xml, opcache, xdebug, pcov extensions: xml, opcache, xdebug, pcov, gd
key: cache-v5 key: cache-v5
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v4
- name: Setup cache environment - name: Setup cache environment
id: cache-env id: cache-env
uses: shivammathur/cache-extensions@develop uses: shivammathur/cache-extensions@develop
with: with:
php-version: ${{ matrix.php-versions }} php-version: ${{ matrix.php-versions || env.default-php-version }}
extensions: ${{ env.extensions }} extensions: ${{ env.extensions }}
key: ${{ env.key }} key: ${{ env.key }}
- name: Cache extensions - name: Cache extensions
uses: actions/cache@v3 uses: actions/cache@v4
with: with:
path: ${{ steps.cache-env.outputs.dir }} path: ${{ steps.cache-env.outputs.dir }}
key: ${{ steps.cache-env.outputs.key }} key: ${{ steps.cache-env.outputs.key }}
restore-keys: ${{ steps.cache-env.outputs.key }} restore-keys: ${{ steps.cache-env.outputs.key }}
- name: Stage php-version-file
if: ${{ matrix.php-version-file == 'php-version-file' }}
run: |
echo ${{ env.default-php-version }} > php-version-file
- name: Setup PHP with extensions and custom config - name: Setup PHP with extensions and custom config
run: node dist/index.js run: node dist/index.js
env: env:
php-version: ${{ matrix.php-versions }} php-version: ${{ matrix.php-versions }}
php-version-file: ${{ matrix.php-version-file }}
extensions: ${{ env.extensions }} extensions: ${{ env.extensions }}
ini-values: post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata ini-values: post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata
- name: Testing PHP version - name: Testing PHP version
run: | run: |
php -v php -v
php -r "if(strpos(phpversion(), '${{ matrix.php-versions }}') === false) {throw new Exception('Wrong PHP version Installed');}" php -r "if(strpos(phpversion(), '${{ matrix.php-versions || env.default-php-version }}') === false) {throw new Exception('Wrong PHP version Installed');}"
- name: Testing Composer version - name: Testing Composer version
run: | run: |
@ -67,6 +81,7 @@ jobs:
- name: Testing Extensions - name: Testing Extensions
run: | run: |
php -m 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('xml')) {throw new Exception('xml not found');}"
php -r "if(! extension_loaded('Xdebug')) {throw new Exception('Xdebug 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');}" php -r "if(phpversion()>=7.1 && ! extension_loaded('pcov')) {throw new Exception('PCOV not found');}"
@ -75,4 +90,4 @@ jobs:
php -r "if(ini_get('memory_limit')!='-1') {throw new Exception('memory_limit not disabled');}" php -r "if(ini_get('memory_limit')!='-1') {throw new Exception('memory_limit not disabled');}"
php -r "if(ini_get('post_max_size')!='256M') {throw new Exception('post_max_size not added');}" php -r "if(ini_get('post_max_size')!='256M') {throw new Exception('post_max_size not added');}"
php -r "if(ini_get('short_open_tag')!=1) {throw new Exception('short_open_tag not added');}" php -r "if(ini_get('short_open_tag')!=1) {throw new Exception('short_open_tag not added');}"
php -r "if(ini_get('date.timezone')!='Asia/Kolkata') {throw new Exception('date.timezone not added');}" php -r "if(ini_get('date.timezone')!='Asia/Kolkata') {throw new Exception('date.timezone not added');}"

View File

@ -19,18 +19,18 @@ jobs:
steps: steps:
- name: Checkout release - name: Checkout release
if: github.event_name != 'workflow_dispatch' if: github.event_name != 'workflow_dispatch'
uses: actions/checkout@v3 uses: actions/checkout@v4
- name: Checkout tag - name: Checkout tag
uses: actions/checkout@v3 uses: actions/checkout@v4
if: github.event_name == 'workflow_dispatch' if: github.event_name == 'workflow_dispatch'
with: with:
ref: ${{ github.event.inputs.tag }} ref: ${{ github.event.inputs.tag }}
- name: Setup Node.js - name: Setup Node.js
uses: actions/setup-node@v2 uses: actions/setup-node@v4
with: with:
node-version: '16.x' node-version: '20.x'
registry-url: https://registry.npmjs.org registry-url: https://registry.npmjs.org
- name: Install dependencies and add lib - name: Install dependencies and add lib
@ -46,7 +46,7 @@ jobs:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Change to GitHub Packages registry - name: Change to GitHub Packages registry
uses: actions/setup-node@v2 uses: actions/setup-node@v4
with: with:
registry-url: https://npm.pkg.github.com registry-url: https://npm.pkg.github.com
scope: '@shivammathur' scope: '@shivammathur'

1
.node-version Normal file
View File

@ -0,0 +1 @@
20

View File

@ -1,7 +1,7 @@
The MIT License (MIT) The MIT License (MIT)
Copyright (c) 2019-2021 shivammathur and contributors Copyright (c) shivammathur and contributors
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

402
README.md
View File

@ -9,17 +9,14 @@
<p align="center"> <p align="center">
<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://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://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="https://github.com/shivammathur/setup-php/blob/main/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.5-777bb3.svg?logo=php&logoColor=white&labelColor=555555"></a>
</p> </p>
<p align="center"> <p align="center">
<a href="https://reddit.com/r/setup_php" title="setup-php reddit"><img alt="setup-php reddit" src="https://img.shields.io/badge/reddit-join-FF5700?logo=reddit&logoColor=FF5700&labelColor=555555"></a> <a href="https://reddit.com/r/setup_php" title="setup-php reddit"><img alt="setup-php reddit" src="https://img.shields.io/badge/reddit-join-FF5700?logo=reddit&logoColor=FF5700&labelColor=555555"></a>
<a href="https://twitter.com/setup_php" title="setup-php twitter"><img alt="setup-php twitter" src="https://img.shields.io/badge/twitter-follow-1DA1F2?logo=twitter&logoColor=1DA1F2&labelColor=555555"></a> <a href="https://twitter.com/setup_php" title="setup-php twitter"><img alt="setup-php twitter" src="https://img.shields.io/badge/twitter-follow-1DA1F2?logo=twitter&logoColor=1DA1F2&labelColor=555555"></a>
<a href="https://status.setup-php.com" title="setup-php status"><img alt="setup-php status" src="https://img.shields.io/badge/status-subscribe-28A745?logo=statuspage&logoColor=28A745&labelColor=555555"></a> <a href="https://status.setup-php.com" title="setup-php status"><img alt="setup-php status" src="https://img.shields.io/badge/status-subscribe-28A745?logo=statuspage&logoColor=28A745&labelColor=555555"></a>
</p> </p>
<p align="center">
<a href="https://setup-php.com/support-ukraine" title="#StandWithUkraine"><img alt="#StandWithUkraine" src="https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/badges/StandWithUkraine.svg"></a>
</p>
Setup PHP with required extensions, php.ini configuration, code-coverage support and various tools like composer in [GitHub Actions](https://github.com/features/actions "GitHub Actions"). This action gives you a cross-platform interface to set up the PHP environment you need to test your application. Refer to [Usage](#memo-usage "How to use this") section and [examples](#examples "Examples of use") to see how to use this. Setup PHP with required extensions, php.ini configuration, code-coverage support and various tools like composer in [GitHub Actions](https://github.com/features/actions "GitHub Actions"). This action gives you a cross-platform interface to set up the PHP environment you need to test your application. Refer to [Usage](#memo-usage "How to use this") section and [examples](#examples "Examples of use") to see how to use this.
@ -42,6 +39,7 @@ Setup PHP with required extensions, php.ini configuration, code-coverage support
- [Basic Setup](#basic-setup) - [Basic Setup](#basic-setup)
- [Matrix Setup](#matrix-setup) - [Matrix Setup](#matrix-setup)
- [Nightly Build Setup](#nightly-build-setup) - [Nightly Build Setup](#nightly-build-setup)
- [Debug Build Setup](#debug-build-setup)
- [Thread Safe Setup](#thread-safe-setup) - [Thread Safe Setup](#thread-safe-setup)
- [Force Update Setup](#force-update-setup) - [Force Update Setup](#force-update-setup)
- [Verbose Setup](#verbose-setup) - [Verbose Setup](#verbose-setup)
@ -51,7 +49,9 @@ Setup PHP with required extensions, php.ini configuration, code-coverage support
- [JIT Configuration](#jit-configuration) - [JIT Configuration](#jit-configuration)
- [Cache Extensions](#cache-extensions) - [Cache Extensions](#cache-extensions)
- [Cache Composer Dependencies](#cache-composer-dependencies) - [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) - [Inline PHP Scripts](#inline-php-scripts)
- [Problem Matchers](#problem-matchers) - [Problem Matchers](#problem-matchers)
- [Examples](#examples) - [Examples](#examples)
@ -68,31 +68,32 @@ Both `GitHub-hosted` and `self-hosted` runners are supported by `setup-php` on t
### GitHub-Hosted Runners ### GitHub-Hosted Runners
| Virtual environment | YAML workflow label | Pre-installed PHP | | Virtual environment | Arch | YAML workflow label | Pre-installed PHP |
|----------------------|------------------------------------|------------------------| |---------------------|---------|------------------------------------|------------------------|
| Ubuntu 20.04 | `ubuntu-latest` or `ubuntu-20.04` | `PHP 7.4` to `PHP 8.1` | | Ubuntu 24.04 | x86_64 | `ubuntu-latest` or `ubuntu-24.04` | `PHP 8.3` |
| Ubuntu 18.04 | `ubuntu-18.04` | `PHP 7.2` to `PHP 8.1` | | Ubuntu 22.04 | x86_64 | `ubuntu-22.04` | `PHP 8.1` |
| Windows Server 2022 | `windows-latest` or `windows-2022` | `PHP 8.1` | | Ubuntu 24.04 | aarch64 | `ubuntu-24.04-arm` | `PHP 8.3` |
| Windows Server 2019 | `windows-2019` | `PHP 8.1` | | Ubuntu 22.04 | aarch64 | `ubuntu-22.04-arm` | `PHP 8.1` |
| macOS Monterey 12.x | `macos-12` | `PHP 8.1` | | Windows Server 2025 | x64 | `windows-2025` | `PHP 8.3` |
| macOS Big Sur 11.x | `macos-latest` or `macos-11` | `PHP 8.1` | | Windows Server 2022 | x64 | `windows-latest` or `windows-2022` | `PHP 8.3` |
| macOS Catalina 10.15 | `macos-10.15` | `PHP 8.1` | | Windows Server 2019 | x64 | `windows-2019` | `PHP 8.3` |
| macOS Sequoia 15.x | arm64 | `macos-15` | - |
| macOS Sonoma 14.x | arm64 | `macos-latest` or `macos-14` | - |
| macOS Ventura 13.x | x86_64 | `macos-13` | `PHP 8.3` |
### Self-Hosted Runners ### Self-Hosted Runners
| Host OS/Virtual environment | YAML workflow label | | Host OS/Virtual environment | YAML workflow label |
|----------------------------------|----------------------------| |----------------------------------|----------------------------|
| Ubuntu 21.04 | `self-hosted` or `Linux` | | Ubuntu 24.04 | `self-hosted` or `Linux` |
| Ubuntu 20.04 | `self-hosted` or `Linux` | | Ubuntu 22.04 | `self-hosted` or `Linux` |
| Ubuntu 18.04 | `self-hosted` or `Linux` | | Debian 12 | `self-hosted` or `Linux` |
| Debian 11 | `self-hosted` or `Linux` | | Debian 11 | `self-hosted` or `Linux` |
| Debian 10 | `self-hosted` or `Linux` |
| Debian 9 | `self-hosted` or `Linux` |
| Windows 7 and newer | `self-hosted` or `Windows` | | Windows 7 and newer | `self-hosted` or `Windows` |
| Windows Server 2012 R2 and newer | `self-hosted` or `Windows` | | Windows Server 2012 R2 and newer | `self-hosted` or `Windows` |
| macOS Monterey 12.x x86_64/arm64 | `self-hosted` or `macOS` | | macOS Sequoia 15.x x86_64/arm64 | `self-hosted` or `macOS` |
| macOS Big Sur 11.x x86_64/arm64 | `self-hosted` or `macOS` | | macOS Sonoma 14.x x86_64/arm64 | `self-hosted` or `macOS` |
| macOS Catalina 10.15 | `self-hosted` or `macOS` | | macOS Ventura 13.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. - 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. - Operating systems based on the above Ubuntu and Debian versions are also supported on best effort basis.
@ -100,10 +101,11 @@ Both `GitHub-hosted` and `self-hosted` runners are supported by `setup-php` on t
## :tada: PHP Support ## :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.3 to PHP 8.5 on GitHub-hosted runners, except for macOS ARM64 runners (macos-14).
- PHP 5.6 to PHP 8.2 on self-hosted runners. - 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 | | PHP Version | Stability | Release Support | Runner Support |
|-------------|-----------|-----------------------|--------------------------------| |-------------|-----------|-----------------------|--------------------------------|
@ -115,14 +117,18 @@ 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.1` | `Stable` | `End of life` | `GitHub-hosted`, `self-hosted` |
| `7.2` | `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.3` | `Stable` | `End of life` | `GitHub-hosted`, `self-hosted` |
| `7.4` | `Stable` | `Security fixes only` | `GitHub-hosted`, `self-hosted` | | `7.4` | `Stable` | `End of life` | `GitHub-hosted`, `self-hosted` |
| `8.0` | `Stable` | `Active` | `GitHub-hosted`, `self-hosted` | | `8.0` | `Stable` | `End of life` | `GitHub-hosted`, `self-hosted` |
| `8.1` | `Stable` | `Active` | `GitHub-hosted`, `self-hosted` | | `8.1` | `Stable` | `Security fixes only` | `GitHub-hosted`, `self-hosted` |
| `8.2` | `Nightly` | `In development` | `GitHub-hosted`, `self-hosted` | | `8.2` | `Stable` | `Security fixes only` | `GitHub-hosted`, `self-hosted` |
| `8.3` | `Stable` | `Active` | `GitHub-hosted`, `self-hosted` |
| `8.4` | `Stable` | `Active` | `GitHub-hosted`, `self-hosted` |
| `8.5` | `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. > [!Note]
- To use JIT on `PHP 8.0` and above, refer to the [JIT configuration](#jit-configuration) section. > - 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 ## :heavy_plus_sign: PHP Extension Support
@ -134,7 +140,7 @@ PHP extensions can be set up using the `extensions` input. It accepts a `string`
- name: Setup PHP with PECL extension - name: Setup PHP with PECL extension
uses: shivammathur/setup-php@v2 uses: shivammathur/setup-php@v2
with: with:
php-version: '8.1' php-version: '8.4'
extensions: imagick, swoole extensions: imagick, swoole
``` ```
@ -162,7 +168,7 @@ PHP extensions can be set up using the `extensions` input. It accepts a `string`
- name: Setup PHP with pre-release PECL extension - name: Setup PHP with pre-release PECL extension
uses: shivammathur/setup-php@v2 uses: shivammathur/setup-php@v2
with: with:
php-version: '8.1' php-version: '8.4'
extensions: xdebug-beta extensions: xdebug-beta
``` ```
@ -174,19 +180,19 @@ PHP extensions can be set up using the `extensions` input. It accepts a `string`
- name: Setup PHP and disable opcache - name: Setup PHP and disable opcache
uses: shivammathur/setup-php@v2 uses: shivammathur/setup-php@v2
with: with:
php-version: '8.1' php-version: '8.4'
extensions: :opcache extensions: :opcache
``` ```
- All shared extensions can be disabled by specifying `none`. When `none` is specified along with other extensions, it is hoisted to the start of the input. So, all the shared extensions will be disabled first, then rest of the extensions in the input will be processed. - All shared extensions can be disabled by specifying `none`. When `none` is specified along with other extensions, it is hoisted to the start of the input. So, all the shared extensions will be disabled first, then rest of the extensions in the input will be processed.
**Note:** This disables all core and third-party shared extensions and thus, can break some tools which need them. Required extensions are enabled again when the tools are set up on a best-effort basis. So it is recommended to add the extensions required for your tools after `none` in the `extensions` input to avoid any issues. This disables all core and third-party shared extensions and thus, can break some tools which need them. Required extensions are enabled again when the tools are set up on a best-effort basis. So it is recommended to add the extensions required for your tools after `none` in the `extensions` input to avoid any issues.
```yaml ```yaml
- name: Setup PHP without any shared extensions except mbstring - name: Setup PHP without any shared extensions except mbstring
uses: shivammathur/setup-php@v2 uses: shivammathur/setup-php@v2
with: with:
php-version: '8.1' php-version: '8.4'
extensions: none, mbstring extensions: none, mbstring
``` ```
@ -196,16 +202,16 @@ PHP extensions can be set up using the `extensions` input. It accepts a `string`
- name: Setup PHP with intl - name: Setup PHP with intl
uses: shivammathur/setup-php@v2 uses: shivammathur/setup-php@v2
with: with:
php-version: '8.1' php-version: '8.4'
extensions: intl-70.1 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). - 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: - These extensions have custom support:
- `cubrid`, `pdo_cubrid` and `gearman` on `Ubuntu`. - `cubrid` and `pdo_cubrid` on `Ubuntu`.
- `geos` on `Ubuntu` and `macOS`. - `event`, `gearman`, `geos` and `relay` on `Ubuntu` and `macOS`.
- `blackfire`, `couchbase`, `ioncube`, `oci8`, `pdo_firebird`, `pdo_oci`, `pecl_http`, `phalcon3` and `phalcon4` on all supported OS. - `blackfire`, `couchbase`, `ioncube`, `oci8`, `pdo_firebird`, `pdo_oci`, `pecl_http`, `phalcon3`, `phalcon4`, `phalcon5`, and `zephir_parser` 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`. - 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 +219,7 @@ PHP extensions can be set up using the `extensions` input. It accepts a `string`
- name: Setup PHP with fail-fast - name: Setup PHP with fail-fast
uses: shivammathur/setup-php@v2 uses: shivammathur/setup-php@v2
with: with:
php-version: '8.1' php-version: '8.4'
extensions: oci8 extensions: oci8
env: env:
fail-fast: true fail-fast: true
@ -223,13 +229,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. 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`], [`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`], [`pie`], [`pint`], [`prestissimo`], [`protoc`], [`psalm`], [`rector`], [`symfony`] or [`symfony-cli`], [`vapor`] or [`vapor-cli`], [`wp`] or [`wp-cli`]
```yaml ```yaml
- name: Setup PHP with tools - name: Setup PHP with tools
uses: shivammathur/setup-php@v2 uses: shivammathur/setup-php@v2
with: with:
php-version: '8.1' php-version: '8.4'
tools: php-cs-fixer, phpunit tools: php-cs-fixer, phpunit
``` ```
@ -239,38 +245,39 @@ These tools can be set up globally using the `tools` input. It accepts a string
- name: Setup PHP with tools - name: Setup PHP with tools
uses: shivammathur/setup-php@v2 uses: shivammathur/setup-php@v2
with: with:
php-version: '8.1' php-version: '8.4'
tools: vimeo/psalm tools: vimeo/psalm
``` ```
- To set up a particular version of a tool, specify it in the form `tool:version`. - To set up a particular version of a tool, specify it in the form `tool:version`.
Version can be in the following format:
- Semver. For example `tool:1.2.3` or `tool:1.2.3-beta1`.
- Major version. For example `tool:1` or `tool:1.x`.
- Major and minor version. For example `tool:1.2` or `tool:1.2.x`.
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. Version can be in the following format:
- Semver. For example `tool:1.2.3` or `tool:1.2.3-beta1`.
- Major version. For example `tool:1` or `tool:1.x`.
- Major and minor version. For example `tool:1.2` or `tool:1.2.x`.
When you specify just the major version or the version in `major.minor` format, the latest patch version matching the input will be setup.
With the exception of major versions of `composer`, if you specify only the `major` version or the version in `major.minor` format for a 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 ```yaml
- name: Setup PHP with tools - name: Setup PHP with tools
uses: shivammathur/setup-php@v2 uses: shivammathur/setup-php@v2
with: with:
php-version: '8.1' php-version: '8.4'
tools: php-cs-fixer:3.5, phpunit:9.5 tools: php-cs-fixer:3.64, phpunit:11.4
env: 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 ```yaml
- name: Setup PHP with composer v2 - name: Setup PHP with composer v2
uses: shivammathur/setup-php@v2 uses: shivammathur/setup-php@v2
with: with:
php-version: '8.1' php-version: '8.4'
tools: composer:v2 tools: composer:v2
``` ```
@ -280,7 +287,7 @@ These tools can be set up globally using the `tools` input. It accepts a string
- name: Setup PHP without composer - name: Setup PHP without composer
uses: shivammathur/setup-php@v2 uses: shivammathur/setup-php@v2
with: with:
php-version: '8.1' php-version: '8.4'
tools: none tools: none
``` ```
@ -290,22 +297,44 @@ These tools can be set up globally using the `tools` input. It accepts a string
- Tools `prestissimo` and `composer-prefetcher` will be skipped unless `composer:v1` is also specified in tools input. It is recommended to drop `prestissimo` and use `composer v2`. - Tools `prestissimo` and `composer-prefetcher` will be skipped unless `composer:v1` is also specified in tools input. It is recommended to drop `prestissimo` and use `composer v2`.
- By default, expect `composer` tools which cannot be set up 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`. - By default, except `composer` tools which cannot be set up 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`.
```yaml ```yaml
- name: Setup PHP with fail-fast - name: Setup PHP with fail-fast
uses: shivammathur/setup-php@v2 uses: shivammathur/setup-php@v2
with: with:
php-version: '8.1' php-version: '8.4'
tools: deployer tools: deployer
env: env:
fail-fast: true fail-fast: true
``` ```
**Notes** - By default, `composer` blocks all its plugins. If you are using the `tools` input to install a composer plugin it will be added to the allow list, alternatively if your dependencies have composer plugins, you can allow them by setting `COMPOSER_ALLOW_PLUGINS` that accepts a csv string of plugin names.
- 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. ```yaml
- 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`. - name: Setup PHP with fail-fast
uses: shivammathur/setup-php@v2
with:
php-version: '8.4'
env:
COMPOSER_ALLOW_PLUGINS: composer/installers, composer/satis
```
> [!NOTE]
> - 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.
> - If you want to set a different `COMPOSER_PROCESS_TIMEOUT`, you can set it in your workflow file using the `env` keyword.
```yaml
- name: Setup PHP with composer and custom process timeout
uses: shivammathur/setup-php@v2
with:
php-version: '8.4'
env:
COMPOSER_PROCESS_TIMEOUT: 300
```
## :signal_strength: Coverage Support ## :signal_strength: Coverage Support
@ -318,7 +347,7 @@ Runs on all [PHP versions supported](#tada-php-support "List of PHP versions sup
- name: Setup PHP with Xdebug - name: Setup PHP with Xdebug
uses: shivammathur/setup-php@v2 uses: shivammathur/setup-php@v2
with: with:
php-version: '8.1' php-version: '8.4'
coverage: xdebug coverage: xdebug
``` ```
@ -333,25 +362,26 @@ Runs on all [PHP versions supported](#tada-php-support "List of PHP versions sup
coverage: xdebug2 coverage: xdebug2
``` ```
**Note**: Xdebug is enabled by default on Ubuntu GitHub Actions images, so if you are not using it in your workflow it is recommended to disable it as that will have a positive impact on your PHP performance. Please refer to the [disable coverage](#disable-coverage) section for details. > [!NOTE]
> Xdebug is enabled by default on Ubuntu GitHub Actions images, so if you are not using it in your workflow it is recommended to disable it as that will have a positive impact on your PHP performance. Please refer to the [disable coverage](#disable-coverage) section for details.
### PCOV ### PCOV
Specify `coverage: pcov` to use `PCOV` and disable `Xdebug`. Specify `coverage: pcov` to use `PCOV` and disable `Xdebug`.
Runs on PHP 7.1 and newer PHP versions. Runs on PHP 7.1 and newer PHP versions.
- If your source code directory is other than `src`, `lib` or, `app`, specify `pcov.directory` using the `ini-values` input. - If your source code directory is other than `src`, `lib` or, `app`, specify `pcov.directory` using the `ini-values` input.
```yaml ```yaml
- name: Setup PHP with PCOV - name: Setup PHP with PCOV
uses: shivammathur/setup-php@v2 uses: shivammathur/setup-php@v2
with: with:
php-version: '8.1' php-version: '8.4'
ini-values: pcov.directory=api #optional, see above for usage. ini-values: pcov.directory=api #optional, see above for usage.
coverage: pcov coverage: pcov
``` ```
- PHPUnit 8.x and above supports PCOV out of the box. - PHPUnit 8.x and above supports PCOV out of the box.
- If you are using PHPUnit 5.x, 6.x or 7.x, you need to set up `pcov/clobber` before executing your tests. - If you are using PHPUnit 5.x, 6.x or 7.x, you need to set up `pcov/clobber` before executing your tests.
```yaml ```yaml
@ -376,7 +406,7 @@ Disable coverage for these reasons:
- name: Setup PHP with no coverage driver - name: Setup PHP with no coverage driver
uses: shivammathur/setup-php@v2 uses: shivammathur/setup-php@v2
with: with:
php-version: '8.1' php-version: '8.4'
coverage: none coverage: none
``` ```
@ -386,14 +416,30 @@ Disable coverage for these reasons:
> Specify using `with` keyword > Specify using `with` keyword
#### `php-version` (required) #### `php-version` (optional)
- Specify the PHP version you want to set up. - Specify the PHP version you want to set up.
- Accepts a `string`. For example `'8.0'`. - Accepts a `string`. For example `'8.4'`.
- Accepts `latest` to set up the latest stable PHP version. - 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 `nightly` to set up a nightly build from the master branch of PHP.
- Accepts the format `d.x`, where `d` is the major version. For example `5.x`, `7.x` and `8.x`. - 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.
- See [PHP support](#tada-php-support) for supported PHP versions. - 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)
- Specify a file with the PHP version you want to set up.
- 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) #### `extensions` (optional)
@ -411,9 +457,9 @@ Disable coverage for these reasons:
#### `ini-values` (optional) #### `ini-values` (optional)
- Specify the values you want to add to `php.ini`. - Specify the values you want to add to `php.ini`.
- Accepts a `string` in csv-format. For example `post_max_size=256M, max_execution_time=180`. - Accepts a `string` in csv-format. For example `post_max_size=256M, max_execution_time=180`.
- Accepts ini values with commas if wrapped in quotes. For example `xdebug.mode="develop,coverage"`. - Accepts ini values with commas if wrapped in quotes. For example `xdebug.mode="develop,coverage"`.
#### `coverage` (optional) #### `coverage` (optional)
@ -425,7 +471,7 @@ Disable coverage for these reasons:
- Specify the tools you want to set up. - Specify the tools you want to set up.
- Accepts a `string` in csv-format. For example: `phpunit, phpcs` - 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 ### Outputs
@ -440,7 +486,7 @@ On GitHub Actions you can assign the `setup-php` step an `id`, you can use the s
id: setup-php id: setup-php
uses: shivammathur/setup-php@v2 uses: shivammathur/setup-php@v2
with: with:
php-version: '8.1' php-version: '8.4'
- name: Print PHP version - name: Print PHP version
run: echo ${{ steps.setup-php.outputs.php-version }} run: echo ${{ steps.setup-php.outputs.php-version }}
@ -459,8 +505,8 @@ On GitHub Actions you can assign the `setup-php` step an `id`, you can use the s
#### `phpts` (optional) #### `phpts` (optional)
- Specify to set up thread-safe version of PHP on Windows. - Specify to set up a thread-safe build of PHP.
- Accepts `ts` and `nts`. - Accepts `nts` for non-thread-safe and `zts` or `ts` for thread-safe.
- By default, it is set to `nts`. - By default, it is set to `nts`.
- See [thread safe setup](#thread-safe-setup) for more info. - See [thread safe setup](#thread-safe-setup) for more info.
@ -482,7 +528,7 @@ steps:
- name: Setup PHP - name: Setup PHP
uses: shivammathur/setup-php@v2 uses: shivammathur/setup-php@v2
with: with:
php-version: '8.1' php-version: '8.4'
extensions: mbstring, intl extensions: mbstring, intl
ini-values: post_max_size=256M, max_execution_time=180 ini-values: post_max_size=256M, max_execution_time=180
coverage: xdebug coverage: xdebug
@ -500,12 +546,12 @@ jobs:
strategy: strategy:
matrix: matrix:
operating-system: ['ubuntu-latest', 'windows-latest', 'macos-latest'] operating-system: ['ubuntu-latest', 'windows-latest', 'macos-latest']
php-versions: ['7.4', '8.0', '8.1'] php-versions: ['8.2', '8.3', '8.4']
phpunit-versions: ['latest'] phpunit-versions: ['latest']
include: include:
- operating-system: 'ubuntu-latest' - operating-system: 'ubuntu-latest'
php-versions: '7.2' php-versions: '8.1'
phpunit-versions: '8.5.21' phpunit-versions: 10
steps: steps:
- name: Setup PHP - name: Setup PHP
uses: shivammathur/setup-php@v2 uses: shivammathur/setup-php@v2
@ -515,13 +561,15 @@ jobs:
ini-values: post_max_size=256M, max_execution_time=180 ini-values: post_max_size=256M, max_execution_time=180
coverage: xdebug coverage: xdebug
tools: php-cs-fixer, phpunit:${{ matrix.phpunit-versions }} tools: php-cs-fixer, phpunit:${{ matrix.phpunit-versions }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
``` ```
### Nightly Build Setup ### Nightly Build Setup
> Set up a nightly build of `PHP 8.2`. > Set up a nightly build of `PHP 8.5`.
- This PHP version is currently in active development and might contain bugs and breaking changes. - 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. - Some user space extensions might not support this version currently.
```yaml ```yaml
@ -529,31 +577,51 @@ steps:
- name: Setup nightly PHP - name: Setup nightly PHP
uses: shivammathur/setup-php@v2 uses: shivammathur/setup-php@v2
with: with:
php-version: '8.2' php-version: '8.5'
extensions: mbstring extensions: mbstring
ini-values: post_max_size=256M, max_execution_time=180 ini-values: post_max_size=256M, max_execution_time=180
coverage: xdebug coverage: xdebug
tools: php-cs-fixer, phpunit 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.
> [!NOTE]
> - On Linux, the debug symbols are added as [debug info files](https://sourceware.org/gdb/current/onlinedocs/gdb.html/Separate-Debug-Files.html) in the `/usr/lib/debug/.build-id` directory. These files match the `build-id` in the ELF section of the PHP binaries and debugging tools like `gdb` are able to resolve the symbols from these files.
> - On Windows, the debug symbols are added as `pdb` files in the PHP installation directory.
> - On macOS, the debug symbols are compiled into the binaries.
```yaml
steps:
- name: Setup PHP with debugging symbols
uses: shivammathur/setup-php@v2
with:
php-version: '8.4'
env:
debug: true # specify true or false
```
### Thread Safe Setup ### Thread Safe Setup
> Set up `TS` or `NTS` PHP on `Windows`. > Set up `TS` or `NTS` PHP.
- `NTS` versions are set up by default. - `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.
```yaml ```yaml
jobs: jobs:
run: run:
runs-on: windows-latest runs-on: [ubuntu-latest, windows-latest, macos-latest]
name: Setup PHP TS on Windows name: Setup PHP TS
steps: steps:
- name: Setup PHP - name: Setup PHP
uses: shivammathur/setup-php@v2 uses: shivammathur/setup-php@v2
with: with:
php-version: '8.1' php-version: '8.4'
env: env:
phpts: ts # specify ts or nts phpts: ts # specify ts or nts
``` ```
@ -563,13 +631,14 @@ jobs:
> Update to the latest patch of PHP versions. > Update to the latest patch of PHP versions.
- Pre-installed PHP versions are not updated to their latest patch release by default. - 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. - You can specify the `update` environment variable to `true` for updating to the latest release.
```yaml ```yaml
- name: Setup PHP with latest versions - name: Setup PHP with latest versions
uses: shivammathur/setup-php@v2 uses: shivammathur/setup-php@v2
with: with:
php-version: '8.1' php-version: '8.4'
env: env:
update: true # specify true or false update: true # specify true or false
``` ```
@ -584,14 +653,14 @@ To debug any issues, you can use the `verbose` tag instead of `v2`.
- name: Setup PHP with logs - name: Setup PHP with logs
uses: shivammathur/setup-php@verbose uses: shivammathur/setup-php@verbose
with: with:
php-version: '8.1' php-version: '8.4'
``` ```
### Multi-Arch Setup ### Multi-Arch Setup
> Set up PHP on multiple architecture on Ubuntu GitHub Runners. > 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.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`. - 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). - Currently, for `ARM` based setup, you will need [self-hosted runners](#self-hosted-setup).
@ -607,7 +676,7 @@ jobs:
- name: Install PHP - name: Install PHP
uses: shivammathur/setup-php@v2 uses: shivammathur/setup-php@v2
with: with:
php-version: '8.1' php-version: '8.4'
``` ```
### Self Hosted Setup ### Self Hosted Setup
@ -629,7 +698,7 @@ jobs:
runs-on: self-hosted runs-on: self-hosted
strategy: strategy:
matrix: 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', '8.3', '8.4']
name: PHP ${{ matrix.php-versions }} name: PHP ${{ matrix.php-versions }}
steps: steps:
- name: Setup PHP - name: Setup PHP
@ -640,10 +709,10 @@ jobs:
runner: self-hosted runner: self-hosted
``` ```
**Notes** > [!NOTE]
- Do not set up multiple self-hosted runners on a single server instance as parallel workflow will conflict with each other. > - Do not set up multiple self-hosted runners on a single server instance as parallel workflow will conflict with each other.
- Do not set up self-hosted runners on the side on your development environment or your production server. > - Do not set up self-hosted runners on the side on your development environment or your production server.
- Avoid using the same labels for your `self-hosted` runners which are used by `GitHub-hosted` runners. > - Avoid using the same labels for your `self-hosted` runners which are used by `GitHub-hosted` runners.
### Local Testing Setup ### Local Testing Setup
@ -657,40 +726,40 @@ jobs:
- name: Setup PHP - name: Setup PHP
uses: shivammathur/setup-php@v2 uses: shivammathur/setup-php@v2
with: with:
php-version: '8.1' 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. Run the workflow locally with `act` using [`shivammathur/node`](https://github.com/shivammathur/node-docker "Docker image to run setup-php") docker images.
Choose the image tag which matches the `runs-on` property in your workflow. For example, if you are using `ubuntu-20.04` in your workflow, run `act -P ubuntu-20.04=shivammathur/node:20.04`. Choose the image tag which matches the `runs-on` property in your workflow. For example, if you are using `ubuntu-22.04` in your workflow, run `act -P ubuntu-22.04=shivammathur/node:2204`.
```bash ```bash
# For runs-on: ubuntu-latest # For runs-on: ubuntu-latest
act -P ubuntu-latest=shivammathur/node:latest act -P ubuntu-latest=shivammathur/node:latest
# For runs-on: ubuntu-20.04 # For runs-on: ubuntu-24.04
act -P ubuntu-20.04=shivammathur/node:2004 act -P ubuntu-24.04=shivammathur/node:2404
# For runs-on: ubuntu-18.04 # For runs-on: ubuntu-22.04
act -P ubuntu-18.04=shivammathur/node:1804 act -P ubuntu-22.04=shivammathur/node:2204
``` ```
### JIT Configuration ### JIT Configuration
> Enable Just-in-time(JIT) on PHP 8.0 and above. > Enable Just-in-time (JIT) on PHP 8.0 and above.
- To enable JIT, enable `opcache` in cli mode by setting `opcache.enable_cli=1`. - To enable JIT, enable `opcache` in cli mode by setting `opcache.enable_cli=1`.
- JIT conflicts with `Xdebug`, `PCOV`, and other extensions which override `zend_execute_ex` function, so set `coverage: none` and disable any such extension if added. - JIT conflicts with `Xdebug`, `PCOV`, and other extensions which override `zend_execute_ex` function, so set `coverage: none` and disable any such extension if added.
- By default, `opcache.jit=1235` and `opcache.jit_buffer_size=256M` are set which can be changed using `ini-values` input. - By default, `opcache.jit=1235` and `opcache.jit_buffer_size=256M` are set which can be changed using `ini-values` input.
- For detailed information about JIT related directives refer to the [`official PHP documentation`](https://www.php.net/manual/en/opcache.configuration.php#ini.opcache.jit "opcache.jit documentation"). - For detailed information about JIT related directives refer to the [`official PHP documentation`](https://www.php.net/manual/en/opcache.configuration.php#ini.opcache.jit "opcache.jit documentation").
For example to enable JIT in `tracing` mode with buffer size of `64 MB`. For example to enable JIT in `tracing` mode with buffer size of `64 MB`.
```yaml ```yaml
- name: Setup PHP with JIT in tracing mode - name: Setup PHP with JIT in tracing mode
uses: shivammathur/setup-php@v2 uses: shivammathur/setup-php@v2
with: with:
php-version: '8.1' php-version: '8.4'
coverage: none coverage: none
ini-values: opcache.enable_cli=1, opcache.jit=tracing, opcache.jit_buffer_size=64M ini-values: opcache.enable_cli=1, opcache.jit=tracing, opcache.jit_buffer_size=64M
``` ```
@ -707,10 +776,10 @@ If your project uses composer, you can persist the composer's internal cache dir
```yaml ```yaml
- name: Get composer cache directory - name: Get composer cache directory
id: composer-cache 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 - name: Cache dependencies
uses: actions/cache@v2 uses: actions/cache@v4
with: with:
path: ${{ steps.composer-cache.outputs.dir }} path: ${{ steps.composer-cache.outputs.dir }}
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
@ -720,9 +789,9 @@ If your project uses composer, you can persist the composer's internal cache dir
run: composer install --prefer-dist run: composer install --prefer-dist
``` ```
**Notes** > [!NOTE]
- Please do not cache `vendor` directory using `action/cache` as that will have side effects. > - Please do not cache `vendor` directory using `action/cache` as that will have side effects.
- If you do not commit `composer.lock`, you can use the hash of `composer.json` as the key for your cache. > - If you do not commit `composer.lock`, you can use the hash of `composer.json` as the key for your cache.
```yaml ```yaml
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
``` ```
@ -733,17 +802,54 @@ key: ${{ runner.os }}-composer-${{ matrix.prefer }}-${{ hashFiles('**/composer.l
restore-keys: ${{ runner.os }}-composer-${{ matrix.prefer }}- 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 ```yaml
- name: Setup PHP - name: Setup PHP
uses: shivammathur/setup-php@v2 uses: shivammathur/setup-php@v2
with: with:
php-version: '8.1' php-version: '8.4'
env: 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.4'
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.4'
env:
COMPOSER_AUTH_JSON: |
{
"http-basic": {
"example.org": {
"username": "${{ secrets.EXAMPLE_ORG_USERNAME }}",
"password": "${{ secrets.EXAMPLE_ORG_PASSWORD }}"
}
}
}
``` ```
### Inline PHP Scripts ### Inline PHP Scripts
@ -756,7 +862,7 @@ Put the code in the run property of a step and specify the shell as `php {0}`.
- name: Setup PHP - name: Setup PHP
uses: shivammathur/setup-php@v2 uses: shivammathur/setup-php@v2
with: with:
php-version: '8.1' php-version: '8.4'
- name: Run PHP code - name: Run PHP code
shell: php {0} shell: php {0}
@ -796,7 +902,7 @@ PHPStan supports error reporting in GitHub Actions, so it does not require probl
- name: Setup PHP - name: Setup PHP
uses: shivammathur/setup-php@v2 uses: shivammathur/setup-php@v2
with: with:
php-version: '8.1' php-version: '8.4'
tools: phpstan tools: phpstan
- name: Run PHPStan - name: Run PHPStan
@ -811,7 +917,7 @@ Psalm supports error reporting in GitHub Actions with an output format `github`.
- name: Setup PHP - name: Setup PHP
uses: shivammathur/setup-php@v2 uses: shivammathur/setup-php@v2
with: with:
php-version: '8.1' php-version: '8.4'
tools: psalm tools: psalm
- name: Run Psalm - name: Run Psalm
@ -821,7 +927,7 @@ Psalm supports error reporting in GitHub Actions with an output format `github`.
#### Tools with checkstyle support #### 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 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`. > Here is an example with `phpcs`.
@ -829,7 +935,7 @@ For examples refer to [cs2pr documentation](https://github.com/staabm/annotate-p
- name: Setup PHP - name: Setup PHP
uses: shivammathur/setup-php@v2 uses: shivammathur/setup-php@v2
with: with:
php-version: '8.1' php-version: '8.4'
tools: cs2pr, phpcs tools: cs2pr, phpcs
- name: Run phpcs - name: Run phpcs
@ -838,7 +944,7 @@ For examples refer to [cs2pr documentation](https://github.com/staabm/annotate-p
### Examples ### 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 | | Framework/Package | Runs on | Workflow |
|----------------------------------------|---------------------------------|---------------------------------------------------------------------------------------------------------------| |----------------------------------------|---------------------------------|---------------------------------------------------------------------------------------------------------------|
@ -870,14 +976,15 @@ Examples of using `setup-php` with various PHP Frameworks and Packages.
- Use the `v2` tag as `setup-php` version. It is a rolling tag and is synced with the latest minor and patch releases. With `v2` you automatically get the bug fixes, security patches, new features and support for latest PHP releases. - Use the `v2` tag as `setup-php` version. It is a rolling tag and is synced with the latest minor and patch releases. With `v2` you automatically get the bug fixes, security patches, new features and support for latest PHP releases.
- Semantic release versions can also be used. It is recommended to [use dependabot](https://docs.github.com/en/github/administering-a-repository/keeping-your-actions-up-to-date-with-github-dependabot "Setup Dependabot with GitHub Actions") with semantic versioning to keep the actions in your workflows up to date. - Semantic release versions can also be used. It is recommended to [use dependabot](https://docs.github.com/en/github/administering-a-repository/keeping-your-actions-up-to-date-with-github-dependabot "Setup Dependabot with GitHub Actions") with semantic versioning to keep the actions in your workflows up to date.
- Commit SHA can also be used, but are not recommended. They have to be updated with every release manually, without which you will not get any bug fixes, security patches or new features. - Commit SHA can also be used, but are not recommended unless you set up tooling to update them with each release of the action.
- A new major version of the action will only be tagged when there are breaking changes in the setup-php API i.e. inputs, outputs, and environment flags.
- For debugging any issues `verbose` tag can be used temporarily. It outputs all the logs and is also synced with the latest releases. - For debugging any issues `verbose` tag can be used temporarily. It outputs all the logs and is also synced with the latest releases.
- It is highly discouraged to use the `master` branch as version, it might break your workflow after major releases as they have breaking changes. - It is highly discouraged to use the `main` branch as version, it might break your workflow after major releases as they have breaking changes.
- If you are using the `v1` tag or a `1.x.y` version, you should [switch to v2](https://github.com/shivammathur/setup-php/wiki/Switch-to-v2 "Guide for switching from setup-php v1 to v2") as `v1` only gets critical bug fixes. Maintenance support for `v1` will be dropped with the last `PHP 8.0` release. - If you are using the `v1` tag or a `1.x.y` version, you should [switch to v2](https://github.com/shivammathur/setup-php/wiki/Switch-to-v2 "Guide for switching from setup-php v1 to v2") as `v1` is not supported anymore.
## :scroll: License ## :scroll: License
- The scripts and documentation in this project are under the [MIT License](LICENSE "License for shivammathur/setup-php"). - The scripts and documentation in this project are under the [MIT License](LICENSE "License for shivammathur/setup-php").
- This project has multiple [dependencies](#package-dependencies "Dependencies for this PHP Action"). Their licenses can be found in their respective repositories. - This project has multiple [dependencies](#package-dependencies "Dependencies for this PHP Action"). Their licenses can be found in their respective repositories.
- The logo for `setup-php` is a derivative work of [php.net logo](https://www.php.net/download-logos.php) and is licensed under the [CC BY-SA 4.0 License](https://creativecommons.org/licenses/by-sa/4.0/ "Creative Commons License"). - The logo for `setup-php` is a derivative work of [php.net logo](https://www.php.net/download-logos.php) and is licensed under the [CC BY-SA 4.0 License](https://creativecommons.org/licenses/by-sa/4.0/ "Creative Commons License").
@ -909,25 +1016,18 @@ These companies generously provide setup-php their products and services to aid
<p> <p>
<a href="https://www.jetbrains.com/?from=setup-php"> <a href="https://www.jetbrains.com/?from=setup-php">
<img src="https://setup-php.com/sponsors/jetbrains.svg" alt="JetBrains" width="106" height="60"> <img src="https://setup-php.com/sponsors/jetbrains.svg" alt="JetBrains" width="212" height="120">
</a> </a>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<a href="https://www.macstadium.com/opensource/members#gh-light-mode-only"> <a href="https://www.macstadium.com/opensource/members#gh-light-mode-only">
<img src="https://setup-php.com/sponsors/macstadium.png" alt="Mac Stadium" width="148" height="60"> <img src="https://setup-php.com/sponsors/macstadium.png" alt="Mac Stadium" width="296" height="120">
</a> </a>
<a href="https://www.macstadium.com/opensource/members#gh-dark-mode-only"> <a href="https://www.macstadium.com/opensource/members#gh-dark-mode-only">
<img src="https://setup-php.com/sponsors/macstadium-white.png" alt="Mac Stadium" width="148" height="60"> <img src="https://setup-php.com/sponsors/macstadium-white.png" alt="Mac Stadium" width="296" height="120">
</a> </a>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<a href="https://tidelift.com/subscription/pkg/npm-setup-php"> <a href="https://tidelift.com/subscription/pkg/npm-setup-php">
<img src="https://setup-php.com/sponsors/tidelift.png" alt="Tidelift" width="70" height="60"> <img src="https://setup-php.com/sponsors/tidelift.png" alt="Tidelift" width="140" height="120">
</a>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<a href="https://www.scaleway.com/en/about-us/open-source-program#gh-light-mode-only">
<img src="https://setup-php.com/sponsors/scaleway.png" alt="Scaleway" width="174" height="60">
</a>
<a href="https://www.scaleway.com/en/about-us/open-source-program#gh-dark-mode-only">
<img src="https://setup-php.com/sponsors/scaleway-white.png" alt="Scaleway" width="174" height="60">
</a> </a>
</p> </p>
@ -959,15 +1059,19 @@ These companies generously provide setup-php their products and services to aid
[`behat`]: https://docs.behat.org/en/latest/ [`behat`]: https://docs.behat.org/en/latest/
[`blackfire`]: https://blackfire.io/docs/php/index [`blackfire`]: https://blackfire.io/docs/php/index
[`blackfire-player`]: https://blackfire.io/docs/builds-cookbooks/player [`blackfire-player`]: https://blackfire.io/docs/builds-cookbooks/player
[`box`]: https://github.com/humbug/box
[`castor`]: https://github.com/jolicode/castor
[`churn`]: https://github.com/bmitch/churn-php [`churn`]: https://github.com/bmitch/churn-php
[`codeception`]: https://codeception.com/ [`codeception`]: https://codeception.com/
[`composer`]: https://getcomposer.org/ [`composer`]: https://getcomposer.org/
[`composer-dependency-analyser`]: https://github.com/shipmonk-rnd/composer-dependency-analyser
[`composer-normalize`]: https://github.com/ergebnis/composer-normalize [`composer-normalize`]: https://github.com/ergebnis/composer-normalize
[`composer-prefetcher`]: https://github.com/narrowspark/automatic-composer-prefetcher [`composer-prefetcher`]: https://github.com/narrowspark/automatic-composer-prefetcher
[`composer-require-checker`]: https://github.com/maglnet/ComposerRequireChecker [`composer-require-checker`]: https://github.com/maglnet/ComposerRequireChecker
[`composer-unused`]: https://github.com/composer-unused/composer-unused [`composer-unused`]: https://github.com/composer-unused/composer-unused
[`cs2pr`]: https://github.com/staabm/annotate-pull-request-from-checkstyle [`cs2pr`]: https://github.com/staabm/annotate-pull-request-from-checkstyle
[`deployer`]: https://deployer.org/ [`deployer`]: https://deployer.org/
[`ecs`]: https://github.com/easy-coding-standard/easy-coding-standard
[`flex`]: https://flex.symfony.com/ [`flex`]: https://flex.symfony.com/
[`grpc_php_plugin`]: https://grpc.io/ [`grpc_php_plugin`]: https://grpc.io/
[`infection`]: https://infection.github.io/ [`infection`]: https://infection.github.io/
@ -979,9 +1083,10 @@ These companies generously provide setup-php their products and services to aid
[`phive`]: https://phar.io/ [`phive`]: https://phar.io/
[`php-config`]: https://www.php.net/manual/en/install.pecl.php-config.php [`php-config`]: https://www.php.net/manual/en/install.pecl.php-config.php
[`php-cs-fixer`]: https://cs.symfony.com/ [`php-cs-fixer`]: https://cs.symfony.com/
[`phpcbf`]: https://github.com/squizlabs/php_codesniffer [`php-scoper`]: https://github.com/humbug/php-scoper
[`phpcbf`]: https://github.com/PHPCSStandards/php_codesniffer
[`phpcpd`]: https://github.com/sebastianbergmann/phpcpd [`phpcpd`]: https://github.com/sebastianbergmann/phpcpd
[`phpcs`]: https://github.com/squizlabs/php_codesniffer [`phpcs`]: https://github.com/PHPCSStandards/php_codesniffer
[`phpdoc`]: https://phpdoc.org/ [`phpdoc`]: https://phpdoc.org/
[`phpDocumentor`]: https://phpdoc.org/ [`phpDocumentor`]: https://phpdoc.org/
[`phpize`]: https://www.php.net/manual/en/install.pecl.phpize.php [`phpize`]: https://www.php.net/manual/en/install.pecl.phpize.php
@ -992,9 +1097,12 @@ These companies generously provide setup-php their products and services to aid
[`phpunit`]: https://phpunit.de/ [`phpunit`]: https://phpunit.de/
[`phpunit-bridge`]: https://symfony.com/doc/current/components/phpunit_bridge.html [`phpunit-bridge`]: https://symfony.com/doc/current/components/phpunit_bridge.html
[`phpunit-polyfills`]: https://github.com/Yoast/PHPUnit-Polyfills [`phpunit-polyfills`]: https://github.com/Yoast/PHPUnit-Polyfills
[`pie`]: https://github.com/php/pie
[`pint`]: https://github.com/laravel/pint
[`prestissimo`]: https://github.com/hirak/prestissimo [`prestissimo`]: https://github.com/hirak/prestissimo
[`protoc`]: https://developers.google.com/protocol-buffers/ [`protoc`]: https://developers.google.com/protocol-buffers/
[`psalm`]: https://psalm.dev/ [`psalm`]: https://psalm.dev/
[`rector`]: https://getrector.org/
[`symfony`]: https://symfony.com/download [`symfony`]: https://symfony.com/download
[`symfony-cli`]: https://symfony.com/download [`symfony-cli`]: https://symfony.com/download
[`vapor`]: https://docs.vapor.build/ [`vapor`]: https://docs.vapor.build/

View File

@ -4,6 +4,8 @@ describe('Config tests', () => {
it.each` it.each`
driver | php | os | output driver | php | os | output
${'PCOV'} | ${'7.4'} | ${'win32'} | ${'Add-Extension pcov,Disable-Extension xdebug false'} ${'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'} | ${'7.0'} | ${'win32'} | ${'PHP 7.1 or newer is required'}
${'pcov'} | ${'5.6'} | ${'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'} ${'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'} ${'xdebug'} | ${'8.0'} | ${'linux'} | ${'add_extension xdebug'}
${'xdebug3'} | ${'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'} ${'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'} ${'xdebug'} | ${'7.4'} | ${'darwin'} | ${'add_brew_extension xdebug'}
${'xdebug3'} | ${'7.1'} | ${'darwin'} | ${'xdebug3 is not supported on PHP 7.1'} ${'xdebug3'} | ${'7.1'} | ${'darwin'} | ${'xdebug3 is not supported on PHP 7.1'}
${'xdebug2'} | ${'7.4'} | ${'darwin'} | ${'add_brew_extension xdebug2'} ${'xdebug2'} | ${'7.4'} | ${'darwin'} | ${'add_brew_extension xdebug2'}

View File

@ -19,12 +19,16 @@ describe('Extension tests', () => {
${'pcov'} | ${'5.6'} | ${'Add-Log "$cross" "pcov" "pcov is not supported on PHP 5.6"'} ${'pcov'} | ${'5.6'} | ${'Add-Log "$cross" "pcov" "pcov is not supported on PHP 5.6"'}
${'pdo_oci'} | ${'7.4'} | ${'Add-Oci pdo_oci'} ${'pdo_oci'} | ${'7.4'} | ${'Add-Oci pdo_oci'}
${'pecl_http'} | ${'7.4'} | ${'Add-Http'} ${'pecl_http'} | ${'7.4'} | ${'Add-Http'}
${'pdo_sqlsrv'} | ${'7.4'} | ${'Add-Sqlsrv pdo_sqlsrv'}
${'phalcon3'} | ${'7.2'} | ${'Add-Phalcon phalcon3'} ${'phalcon3'} | ${'7.2'} | ${'Add-Phalcon phalcon3'}
${'phalcon4'} | ${'7.4'} | ${'Add-Phalcon phalcon4'} ${'phalcon4'} | ${'7.4'} | ${'Add-Phalcon phalcon4'}
${'sqlite'} | ${'7.4'} | ${'Add-Extension sqlite3'} ${'sqlite'} | ${'7.4'} | ${'Add-Extension sqlite3'}
${'sqlsrv'} | ${'5.6'} | ${'Add-Extension sqlsrv'}
${'sqlsrv'} | ${'7.4'} | ${'Add-Sqlsrv sqlsrv'}
${'sqlsrv-1.2.3preview1'} | ${'7.4'} | ${'Add-Extension sqlsrv devel 1.2.3'} ${'sqlsrv-1.2.3preview1'} | ${'7.4'} | ${'Add-Extension sqlsrv devel 1.2.3'}
${'Xdebug'} | ${'7.4'} | ${'Add-Extension xdebug'} ${'Xdebug'} | ${'7.4'} | ${'Add-Extension xdebug'}
${'xdebug2'} | ${'7.2'} | ${'Add-Extension xdebug stable 2.9.8'} ${'xdebug2'} | ${'7.2'} | ${'Add-Extension xdebug stable 2.9.8'}
${'zephir_parser'} | ${'7.2'} | ${'Add-ZephirParser zephir_parser'}
`( `(
'checking addExtensionOnWindows for extension $extension on version $version', 'checking addExtensionOnWindows for extension $extension on version $version',
async ({extension, version, output}) => { async ({extension, version, output}) => {
@ -48,6 +52,7 @@ describe('Extension tests', () => {
${'http-1.2.3'} | ${'7.3'} | ${'add_http http-1.2.3'} ${'http-1.2.3'} | ${'7.3'} | ${'add_http http-1.2.3'}
${'intl-65.1'} | ${'5.6'} | ${'add_intl intl-65.1'} ${'intl-65.1'} | ${'5.6'} | ${'add_intl intl-65.1'}
${'ioncube'} | ${'7.3'} | ${'add_ioncube'} ${'ioncube'} | ${'7.3'} | ${'add_ioncube'}
${'memcache-8.2'} | ${'8.2'} | ${'add_pecl_extension memcache 8.2 extension'}
${'mongodb-mongodb/mongo-php-driver@master'} | ${'7.3'} | ${'add_extension_from_source mongodb https://github.com mongodb mongo-php-driver master extension'} ${'mongodb-mongodb/mongo-php-driver@master'} | ${'7.3'} | ${'add_extension_from_source mongodb https://github.com mongodb mongo-php-driver master extension'}
${'oci8'} | ${'7.3'} | ${'add_oci oci8'} ${'oci8'} | ${'7.3'} | ${'add_oci oci8'}
${'pcov'} | ${'5.6'} | ${'add_log "$cross" "pcov" "pcov is not supported on PHP 5.6'} ${'pcov'} | ${'5.6'} | ${'add_log "$cross" "pcov" "pcov is not supported on PHP 5.6'}
@ -59,11 +64,14 @@ describe('Extension tests', () => {
${'pdo_sqlsrv'} | ${'7.4'} | ${'add_sqlsrv pdo_sqlsrv'} ${'pdo_sqlsrv'} | ${'7.4'} | ${'add_sqlsrv pdo_sqlsrv'}
${'pecl_http'} | ${'7.3'} | ${'add_http'} ${'pecl_http'} | ${'7.3'} | ${'add_http'}
${'phalcon3'} | ${'7.3'} | ${'add_phalcon phalcon3'} ${'phalcon3'} | ${'7.3'} | ${'add_phalcon phalcon3'}
${'relay'} | ${'7.4'} | ${'add_relay relay'}
${'relay-v1.2.3'} | ${'7.4'} | ${'add_relay relay-v1.2.3'}
${'sqlite'} | ${'7.4'} | ${'add_extension sqlite3'} ${'sqlite'} | ${'7.4'} | ${'add_extension sqlite3'}
${'sqlsrv-1.2.3-beta1'} | ${'7.4'} | ${'add_pecl_extension sqlsrv 1.2.3beta1 extension'} ${'sqlsrv-1.2.3-beta1'} | ${'7.4'} | ${'add_pecl_extension sqlsrv 1.2.3beta1 extension'}
${'Xdebug'} | ${'7.4'} | ${'add_extension xdebug'} ${'Xdebug'} | ${'7.4'} | ${'add_extension xdebug'}
${'xdebug-alpha'} | ${'7.4'} | ${'add_unstable_extension xdebug alpha zend_extension'} ${'xdebug-alpha'} | ${'7.4'} | ${'add_unstable_extension xdebug alpha zend_extension'}
${'xdebug2'} | ${'7.2'} | ${'add_pecl_extension xdebug 2.9.8 zend_extension'} ${'xdebug2'} | ${'7.2'} | ${'add_pecl_extension xdebug 2.9.8 zend_extension'}
${'zephir_parser-1.2.3'} | ${'7.2'} | ${'add_zephir_parser zephir_parser-1.2.3'}
`( `(
'checking addExtensionOnLinux for extension $extension on version $version', 'checking addExtensionOnLinux for extension $extension on version $version',
async ({extension, version, output}) => { async ({extension, version, output}) => {
@ -92,8 +100,9 @@ describe('Extension tests', () => {
${'pcov'} | ${'5.6'} | ${'add_log "$cross" "pcov" "pcov is not supported on PHP 5.6"'} ${'pcov'} | ${'5.6'} | ${'add_log "$cross" "pcov" "pcov is not supported on PHP 5.6"'}
${'pdo_oci'} | ${'7.3'} | ${'add_oci pdo_oci'} ${'pdo_oci'} | ${'7.3'} | ${'add_oci pdo_oci'}
${'pecl_http'} | ${'7.3'} | ${'add_http'} ${'pecl_http'} | ${'7.3'} | ${'add_http'}
${'relay-1.2.3'} | ${'7.4'} | ${'add_relay relay-1.2.3'}
${'sqlite'} | ${'7.2'} | ${'add_extension sqlite3'} ${'sqlite'} | ${'7.2'} | ${'add_extension sqlite3'}
${'sqlsrv'} | ${'7.3'} | ${'add_sqlsrv sqlsrv'} ${'zephir_parser-v1.2.3'} | ${'7.2'} | ${'add_zephir_parser zephir_parser-v1.2.3'}
`( `(
'checking addExtensionOnDarwin for extension $extension on version $version', 'checking addExtensionOnDarwin for extension $extension on version $version',
async ({extension, version, output}) => { async ({extension, version, output}) => {
@ -112,12 +121,13 @@ describe('Extension tests', () => {
const [formula, extension]: string[] = line.split('='); const [formula, extension]: string[] = line.split('=');
const prefix: string = const prefix: string =
extension == 'xdebug' ? 'zend_extension' : 'extension'; extension == 'xdebug' ? 'zend_extension' : 'extension';
const ext_name = extension.replace(/\d+|(pdo|pecl)[_-]/, '');
const output: string = fs.existsSync( 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}`; : `add_brew_extension ${formula} ${prefix}`;
return [formula, '7.3', output]; return [formula, formula === 'phalcon3' ? '7.3' : '7.4', output];
}); });
it.each(data)( it.each(data)(

View File

@ -1,5 +1,5 @@
import * as fetch from '../src/fetch'; import * as fetch from '../src/fetch';
import nock = require('nock'); import nock from 'nock';
it('checking fetch', async () => { it('checking fetch', async () => {
const host_url = 'https://example.com'; const host_url = 'https://example.com';

View File

@ -10,7 +10,7 @@ jest.mock('../src/install', () => ({
.mockImplementation(async (os: string): Promise<string> => { .mockImplementation(async (os: string): Promise<string> => {
const filename = os + (await utils.scriptExtension(os)); const filename = os + (await utils.scriptExtension(os));
const version: string = await utils.parseVersion( const version: string = await utils.parseVersion(
await utils.getInput('php-version', true) await utils.readPHPVersion()
); );
const ini_file: string = await utils.parseIniFile( const ini_file: string = await utils.parseIniFile(
await utils.getInput('ini-file', false) await utils.getInput('ini-file', false)
@ -38,25 +38,30 @@ jest.mock('../src/install', () => ({
*/ */
jest.mock('../src/fetch', () => ({ jest.mock('../src/fetch', () => ({
fetch: jest.fn().mockImplementation(() => { fetch: jest.fn().mockImplementation(() => {
return {data: '{ "latest": "8.1", "5.x": "5.6" }'}; return {
data: '{ "latest": "8.3", "lowest": "8.1", "highest": "8.3", "nightly": "8.4", "5.x": "5.6" }'
};
}) })
})); }));
describe('Install', () => { describe('Install', () => {
it.each` it.each`
version | os | extension_csv | ini_file | ini_values_csv | coverage_driver | tools | output version | os | extension_csv | ini_file | ini_values_csv | coverage_driver | tools | output
${'7.3'} | ${'darwin'} | ${''} | ${'production'} | ${''} | ${''} | ${''} | ${'bash darwin.sh 7.3 production'} ${'7.3'} | ${'darwin'} | ${''} | ${'production'} | ${''} | ${''} | ${''} | ${'bash darwin.sh 7.3 production'}
${'7.3'} | ${'darwin'} | ${'a, b'} | ${'development'} | ${'a=b'} | ${'x'} | ${''} | ${'bash darwin.sh 7.3 development install extensions set coverage driver edit php.ini'} ${'7.3'} | ${'darwin'} | ${'a, b'} | ${'development'} | ${'a=b'} | ${'x'} | ${''} | ${'bash darwin.sh 7.3 development install extensions set coverage driver edit php.ini'}
${'7.4.1'} | ${'darwin'} | ${''} | ${'none'} | ${''} | ${''} | ${''} | ${'bash darwin.sh 7.4 none'} ${'7.4.1'} | ${'darwin'} | ${''} | ${'none'} | ${''} | ${''} | ${''} | ${'bash darwin.sh 7.4 none'}
${'8'} | ${'darwin'} | ${''} | ${''} | ${''} | ${''} | ${''} | ${'bash darwin.sh 8.0 production'} ${'8'} | ${'darwin'} | ${''} | ${''} | ${''} | ${''} | ${''} | ${'bash darwin.sh 8.0 production'}
${'8.0'} | ${'darwin'} | ${''} | ${'development'} | ${''} | ${''} | ${''} | ${'bash darwin.sh 8.0 development'} ${'8.0'} | ${'darwin'} | ${''} | ${'development'} | ${''} | ${''} | ${''} | ${'bash darwin.sh 8.0 development'}
${'8.1'} | ${'darwin'} | ${''} | ${'none'} | ${''} | ${''} | ${''} | ${'bash darwin.sh 8.1 none'} ${'8.1'} | ${'darwin'} | ${''} | ${'none'} | ${''} | ${''} | ${''} | ${'bash darwin.sh 8.1 none'}
${'7.3'} | ${'linux'} | ${''} | ${'invalid'} | ${''} | ${''} | ${''} | ${'bash linux.sh 7.3 production'} ${'7.3'} | ${'linux'} | ${''} | ${'invalid'} | ${''} | ${''} | ${''} | ${'bash linux.sh 7.3 production'}
${'7.3'} | ${'linux'} | ${'a, b'} | ${'development'} | ${'a=b'} | ${'x'} | ${'phpunit'} | ${'bash linux.sh 7.3 development install extensions add_tool set coverage driver edit php.ini'} ${'7.3'} | ${'linux'} | ${'a, b'} | ${'development'} | ${'a=b'} | ${'x'} | ${'phpunit'} | ${'bash linux.sh 7.3 development install extensions add_tool set coverage driver edit php.ini'}
${'latest'} | ${'linux'} | ${''} | ${'none'} | ${''} | ${''} | ${''} | ${'bash linux.sh 8.1 none'} ${'latest'} | ${'linux'} | ${''} | ${'none'} | ${''} | ${''} | ${''} | ${'bash linux.sh 8.3 none'}
${'7.0'} | ${'win32'} | ${''} | ${'production'} | ${''} | ${''} | ${''} | ${'pwsh win32.ps1 7.0 production'} ${'lowest'} | ${'linux'} | ${''} | ${'none'} | ${''} | ${''} | ${''} | ${'bash linux.sh 8.1 none'}
${'7.3'} | ${'win32'} | ${''} | ${'development'} | ${''} | ${''} | ${''} | ${'pwsh win32.ps1 7.3 development'} ${'highest'} | ${'linux'} | ${''} | ${'none'} | ${''} | ${''} | ${''} | ${'bash linux.sh 8.3 none'}
${'7.3'} | ${'win32'} | ${'a, b'} | ${'none'} | ${'a=b'} | ${'x'} | ${''} | ${'pwsh win32.ps1 7.3 none install extensions set coverage driver edit php.ini'} ${'nightly'} | ${'linux'} | ${''} | ${'none'} | ${''} | ${''} | ${''} | ${'bash linux.sh 8.4 none'}
${'7.0'} | ${'win32'} | ${''} | ${'production'} | ${''} | ${''} | ${''} | ${'pwsh win32.ps1 7.0 production'}
${'7.3'} | ${'win32'} | ${''} | ${'development'} | ${''} | ${''} | ${''} | ${'pwsh win32.ps1 7.3 development'}
${'7.3'} | ${'win32'} | ${'a, b'} | ${'none'} | ${'a=b'} | ${'x'} | ${''} | ${'pwsh win32.ps1 7.3 none install extensions set coverage driver edit php.ini'}
`( `(
'Test install on $os for $version with extensions=$extension_csv, ini_values=$ini_values_csv, coverage_driver=$coverage_driver, tools=$tools', 'Test install on $os for $version with extensions=$extension_csv, ini_values=$ini_values_csv, coverage_driver=$coverage_driver, tools=$tools',
async ({ async ({

View File

@ -0,0 +1,50 @@
import * as packagist from '../src/packagist';
import nock from 'nock';
describe('search function', () => {
const mockResponse = {
packages: {
'test-package': [
{
require: {
php: '8.0.0'
},
version: '1.0.0'
},
{
version: '2.0.0'
}
]
}
};
test('should return the version if matching php version is found', async () => {
nock('https://repo.packagist.org')
.get('/p2/test-package.json')
.reply(200, mockResponse);
const result = await packagist.search('test-package', '8.0');
expect(result).toBe('1.0.0');
});
test('should return null if no matching php version is found', async () => {
nock('https://repo.packagist.org')
.get('/p2/test-package.json')
.reply(200, mockResponse);
const result = await packagist.search('test-package', '5.6');
expect(result).toBeNull();
});
test('should return null if fetch fails', async () => {
nock('https://repo.packagist.org').get('/p2/test-package.json').reply(404);
const result = await packagist.search('test-package', '8.0');
expect(result).toBeNull();
});
test('should return null if the response is empty', async () => {
nock('https://repo.packagist.org')
.get('/p2/test-package.json')
.reply(200, {error: true, data: '[]'});
const result = await packagist.search('test-package', '8.0');
expect(result).toBeNull();
});
});

View File

@ -1,3 +1,4 @@
import * as fs from 'fs';
import * as tools from '../src/tools'; import * as tools from '../src/tools';
interface IData { interface IData {
@ -45,7 +46,11 @@ jest.mock('../src/fetch', () => ({
.fn() .fn()
.mockImplementation( .mockImplementation(
async (url: string, token?: string): Promise<Record<string, string>> => { async (url: string, token?: string): Promise<Record<string, string>> => {
if (url.includes('atom') && !url.includes('no-')) { if (url.includes('deployer')) {
return {
data: '[{"version": "1.2.3", "url": "https://deployer.org/releases/v1.2.3/deployer.phar"}]'
};
} else if (url.includes('atom') && !url.includes('no-')) {
return { return {
data: '"releases/tag/1.2.3", "releases/tag/3.2.1", "releases/tag/2.3.1"' data: '"releases/tag/1.2.3", "releases/tag/3.2.1", "releases/tag/2.3.1"'
}; };
@ -66,6 +71,22 @@ jest.mock('../src/fetch', () => ({
) )
})); }));
jest.mock('../src/packagist', () => ({
search: jest
.fn()
.mockImplementation(
async (
package_name: string,
php_version: string
): Promise<string | null> => {
if (package_name === 'phpunit/phpunit') {
return php_version + '.0';
}
return null;
}
)
}));
describe('Tools tests', () => { describe('Tools tests', () => {
it.each` it.each`
token | version token | version
@ -74,7 +95,7 @@ describe('Tools tests', () => {
${'beta_token'} | ${'1.2.3-beta1'} ${'beta_token'} | ${'1.2.3-beta1'}
${''} | ${'1.2.3'} ${''} | ${'1.2.3'}
`('checking getSemverVersion: $token', async ({token, version}) => { `('checking getSemverVersion: $token', async ({token, version}) => {
process.env['COMPOSER_TOKEN'] = token; process.env['GITHUB_TOKEN'] = token;
expect( expect(
await tools.getSemverVersion(getData({tool: 'tool', version: '1.2'})) await tools.getSemverVersion(getData({tool: 'tool', version: '1.2'}))
).toBe(version); ).toBe(version);
@ -218,11 +239,11 @@ describe('Tools tests', () => {
}); });
it.each` it.each`
os | script | scope os | script | scope
${'linux'} | ${'add_composertool tool tool:1.2.3 user/ global'} | ${'global'} ${'linux'} | ${'add_composer_tool tool tool:1.2.3 user/ global'} | ${'global'}
${'darwin'} | ${'add_composertool tool tool:1.2.3 user/ scoped'} | ${'scoped'} ${'darwin'} | ${'add_composer_tool tool tool:1.2.3 user/ scoped'} | ${'scoped'}
${'win32'} | ${'Add-Composertool tool tool:1.2.3 user/ scoped'} | ${'scoped'} ${'win32'} | ${'Add-ComposerTool tool tool:1.2.3 user/ scoped'} | ${'scoped'}
${'openbsd'} | ${'Platform openbsd is not supported'} | ${'global'} ${'openbsd'} | ${'Platform openbsd is not supported'} | ${'global'}
`('checking addPackage: $os, $scope', async ({os, script, scope}) => { `('checking addPackage: $os, $scope', async ({os, script, scope}) => {
const data = getData({ const data = getData({
tool: 'tool', tool: 'tool',
@ -237,8 +258,9 @@ describe('Tools tests', () => {
it.each` it.each`
version | php_version | os | script version | php_version | os | script
${'latest'} | ${'7.4'} | ${'linux'} | ${'add_tool https://github.com/phar-io/phive/releases/download/3.2.1/phive-3.2.1.phar phive'} ${'latest'} | ${'8.0'} | ${'linux'} | ${'add_tool https://github.com/phar-io/phive/releases/download/3.2.1/phive-3.2.1.phar phive'}
${'1.2.3'} | ${'7.4'} | ${'darwin'} | ${'add_tool https://github.com/phar-io/phive/releases/download/1.2.3/phive-1.2.3.phar phive'} ${'1.2.3'} | ${'8.0'} | ${'darwin'} | ${'add_tool https://github.com/phar-io/phive/releases/download/1.2.3/phive-1.2.3.phar phive'}
${'1.2.3'} | ${'7.4'} | ${'win32'} | ${'Add-Tool https://github.com/phar-io/phive/releases/download/0.15.3/phive-0.15.3.phar phive'}
${'1.2.3'} | ${'7.2'} | ${'win32'} | ${'Add-Tool https://github.com/phar-io/phive/releases/download/0.14.5/phive-0.14.5.phar phive'} ${'1.2.3'} | ${'7.2'} | ${'win32'} | ${'Add-Tool https://github.com/phar-io/phive/releases/download/0.14.5/phive-0.14.5.phar phive'}
${'1.2.3'} | ${'7.1'} | ${'win32'} | ${'Add-Tool https://github.com/phar-io/phive/releases/download/0.13.5/phive-0.13.5.phar phive'} ${'1.2.3'} | ${'7.1'} | ${'win32'} | ${'Add-Tool https://github.com/phar-io/phive/releases/download/0.13.5/phive-0.13.5.phar phive'}
${'latest'} | ${'5.6'} | ${'win32'} | ${'Add-Tool https://github.com/phar-io/phive/releases/download/0.12.1/phive-0.12.1.phar phive'} ${'latest'} | ${'5.6'} | ${'win32'} | ${'Add-Tool https://github.com/phar-io/phive/releases/download/0.12.1/phive-0.12.1.phar phive'}
@ -260,15 +282,18 @@ describe('Tools tests', () => {
); );
it.each` it.each`
version | php_version | url os | version | php_version | url
${'latest'} | ${'7.4'} | ${'https://get.blackfire.io/blackfire-player.phar'} ${'linux'} | ${'latest'} | ${'8.1'} | ${'https://get.blackfire.io/blackfire-player.phar'}
${'1.2.3'} | ${'7.4'} | ${'https://get.blackfire.io/blackfire-player-v1.2.3.phar'} ${'linux'} | ${'1.2.3'} | ${'7.4'} | ${'https://get.blackfire.io/blackfire-player-v1.2.3.phar'}
${'latest'} | ${'5.5'} | ${'https://get.blackfire.io/blackfire-player-v1.9.3.phar'} ${'linux'} | ${'latest'} | ${'7.4'} | ${'https://get.blackfire.io/blackfire-player-v1.22.0.phar'}
${'latest'} | ${'7.0'} | ${'https://get.blackfire.io/blackfire-player-v1.9.3.phar'} ${'linux'} | ${'latest'} | ${'5.5'} | ${'https://get.blackfire.io/blackfire-player-v1.9.3.phar'}
${'linux'} | ${'latest'} | ${'7.0'} | ${'https://get.blackfire.io/blackfire-player-v1.9.3.phar'}
${'win32'} | ${'latest'} | ${'7.0'} | ${'blackfire-player is not a windows tool'}
`( `(
'checking addBlackfirePlayer: $version, $php_version', 'checking addBlackfirePlayer: $os, $version, $php_version',
async ({version, php_version, url}) => { async ({os, version, php_version, url}) => {
const data = getData({ const data = getData({
os: os,
tool: 'blackfire-player', tool: 'blackfire-player',
domain: 'https://get.blackfire.io', domain: 'https://get.blackfire.io',
version_prefix: 'v', version_prefix: 'v',
@ -283,6 +308,7 @@ describe('Tools tests', () => {
version | url version | url
${'latest'} | ${'https://deployer.org/deployer.phar'} ${'latest'} | ${'https://deployer.org/deployer.phar'}
${'1.2.3'} | ${'https://deployer.org/releases/v1.2.3/deployer.phar'} ${'1.2.3'} | ${'https://deployer.org/releases/v1.2.3/deployer.phar'}
${'3.2.1'} | ${'Version missing in deployer manifest'}
`('checking addDeployer: $version', async ({version, url}) => { `('checking addDeployer: $version', async ({version, url}) => {
const data = getData({ const data = getData({
tool: 'deployer', tool: 'deployer',
@ -293,31 +319,41 @@ describe('Tools tests', () => {
}); });
it.each` it.each`
version | no_tool_cache | cache_url | source_url version | php_version | no_tool_cache | cache_url | source_url
${'latest'} | ${'true'} | ${'https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-stable.phar'} | ${'https://getcomposer.org/composer-stable.phar'} ${'latest'} | ${'7.4'} | ${'true'} | ${'https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-stable.phar'} | ${'https://getcomposer.org/composer-stable.phar'}
${'stable'} | ${'true'} | ${'https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-stable.phar'} | ${'https://getcomposer.org/composer-stable.phar'} ${'stable'} | ${'7.4'} | ${'true'} | ${'https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-stable.phar'} | ${'https://getcomposer.org/composer-stable.phar'}
${'snapshot'} | ${'true'} | ${'https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-snapshot.phar'} | ${'https://getcomposer.org/composer.phar'} ${'snapshot'} | ${'7.4'} | ${'true'} | ${'https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-snapshot.phar'} | ${'https://getcomposer.org/composer.phar'}
${'preview'} | ${'true'} | ${'https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-preview.phar'} | ${'https://getcomposer.org/composer-preview.phar'} ${'preview'} | ${'7.4'} | ${'true'} | ${'https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-preview.phar'} | ${'https://getcomposer.org/composer-preview.phar'}
${'1'} | ${'false'} | ${'https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-1.phar'} | ${'https://getcomposer.org/composer-1.phar'} ${'1'} | ${'7.4'} | ${'false'} | ${'https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-1.phar'} | ${'https://getcomposer.org/composer-1.phar'}
${'2'} | ${'false'} | ${'https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-2.phar'} | ${'https://getcomposer.org/composer-2.phar'} ${'2'} | ${'7.4'} | ${'false'} | ${'https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-2.phar'} | ${'https://getcomposer.org/composer-2.phar'}
${'1.2.3'} | ${'false'} | ${'https://github.com/composer/composer/releases/download/1.2.3/composer.phar'} | ${'https://getcomposer.org/composer-1.2.3.phar'} ${'latest'} | ${'7.4'} | ${'true'} | ${'https://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-stable.phar'} | ${'https://getcomposer.org/composer-stable.phar'}
${'1.2.3-RC1'} | ${'false'} | ${'https://github.com/composer/composer/releases/download/1.2.3-RC1/composer.phar'} | ${'https://getcomposer.org/composer-1.2.3-RC1.phar'} ${'stable'} | ${'7.4'} | ${'true'} | ${'https://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-stable.phar'} | ${'https://getcomposer.org/composer-stable.phar'}
${'snapshot'} | ${'7.4'} | ${'true'} | ${'https://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-snapshot.phar'} | ${'https://getcomposer.org/composer.phar'}
${'preview'} | ${'7.4'} | ${'true'} | ${'https://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-preview.phar'} | ${'https://getcomposer.org/composer-preview.phar'}
${'1'} | ${'7.4'} | ${'false'} | ${'https://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-1.phar'} | ${'https://getcomposer.org/composer-1.phar'}
${'2'} | ${'7.4'} | ${'false'} | ${'https://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-2.phar'} | ${'https://getcomposer.org/composer-2.phar'}
${'latest'} | ${'7.1'} | ${'true'} | ${'https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.1-stable.phar'} | ${'https://getcomposer.org/download/latest-2.2.x/composer.phar'}
${'stable'} | ${'7.1'} | ${'true'} | ${'https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.1-stable.phar'} | ${'https://getcomposer.org/download/latest-2.2.x/composer.phar'}
${'snapshot'} | ${'7.1'} | ${'true'} | ${'https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.1-snapshot.phar'} | ${'https://getcomposer.org/download/latest-2.2.x/composer.phar'}
${'preview'} | ${'7.1'} | ${'true'} | ${'https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.1-preview.phar'} | ${'https://getcomposer.org/download/latest-2.2.x/composer.phar'}
${'1'} | ${'7.1'} | ${'false'} | ${'https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.1-1.phar'} | ${'https://getcomposer.org/composer-1.phar'}
${'2'} | ${'7.1'} | ${'false'} | ${'https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.1-2.phar'} | ${'https://getcomposer.org/download/latest-2.2.x/composer.phar'}
${'1.2.3'} | ${'7.4'} | ${'false'} | ${'https://github.com/composer/composer/releases/download/1.2.3/composer.phar'} | ${'https://getcomposer.org/composer-1.2.3.phar'}
${'1.2.3-RC1'} | ${'7.4'} | ${'false'} | ${'https://github.com/composer/composer/releases/download/1.2.3-RC1/composer.phar'} | ${'https://getcomposer.org/composer-1.2.3-RC1.phar'}
`( `(
'checking addComposer: $version, $no_tool_cache', 'checking addComposer: $version, $php_version, $no_tool_cache',
async ({version, no_tool_cache, cache_url, source_url}) => { async ({version, php_version, no_tool_cache, cache_url, source_url}) => {
const data = getData({ const data = getData({
tool: 'composer', tool: 'composer',
php_version: php_version,
domain: 'https://getcomposer.org', domain: 'https://getcomposer.org',
repository: 'composer/composer', repository: 'composer/composer',
version: version version: version
}); });
process.env['no_tools_cache'] = no_tool_cache; process.env['no_tools_cache'] = no_tool_cache;
expect(await tools.addComposer(data)).toContain(source_url);
if (no_tool_cache !== 'true') { if (no_tool_cache !== 'true') {
expect(await tools.addComposer(data)).toContain( expect(await tools.addComposer(data)).toContain(cache_url);
`${cache_url},${source_url}`
);
} else {
expect(await tools.addComposer(data)).toContain(source_url);
} }
} }
); );
@ -357,34 +393,38 @@ describe('Tools tests', () => {
it.each([ 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, box, churn, cs2pr, flex, grpc_php_plugin, parallel-lint, php-cs-fixer, php-scoper, phpDocumentor, phplint, phpstan, phpunit, pecl, phing, phinx, phinx:1.2.3, phive, phpunit-bridge, phpunit-polyfills, pint, php-config, phpize, protoc, symfony, vapor, wp, pie',
[ [
'add_tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-stable.phar,https://getcomposer.org/composer-stable.phar composer', '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', 'add_blackfire',
'add_tool https://get.blackfire.io/blackfire-player.phar blackfire-player "-V"', 'add_tool https://get.blackfire.io/blackfire-player-v1.22.0.phar blackfire-player "-V"',
'add_tool https://github.com/box-project/box/releases/latest/download/box.phar box "--version"',
'add_tool https://github.com/bmitch/churn-php/releases/latest/download/churn.phar churn "-V"', 'add_tool https://github.com/bmitch/churn-php/releases/latest/download/churn.phar churn "-V"',
'add_tool https://github.com/staabm/annotate-pull-request-from-checkstyle/releases/latest/download/cs2pr cs2pr "-V"', 'add_tool https://github.com/staabm/annotate-pull-request-from-checkstyle/releases/latest/download/cs2pr cs2pr "-V"',
'add_composertool flex flex symfony/ global', 'add_composer_tool flex flex symfony/ global',
'add_grpc_php_plugin latest', 'add_grpc_php_plugin latest',
'add_tool https://github.com/php-parallel-lint/PHP-Parallel-Lint/releases/latest/download/parallel-lint.phar parallel-lint "--version"', 'add_tool https://github.com/php-parallel-lint/PHP-Parallel-Lint/releases/latest/download/parallel-lint.phar parallel-lint "--version"',
'add_tool https://github.com/FriendsOfPHP/PHP-CS-Fixer/releases/download/v3.2.1/php-cs-fixer.phar php-cs-fixer "-V"', 'add_tool https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/releases/download/v3.2.1/php-cs-fixer.phar php-cs-fixer "-V"',
'add_tool https://github.com/humbug/php-scoper/releases/latest/download/php-scoper.phar php-scoper "--version"',
'add_tool https://github.com/phpDocumentor/phpDocumentor/releases/latest/download/phpDocumentor.phar phpDocumentor "--version"', 'add_tool https://github.com/phpDocumentor/phpDocumentor/releases/latest/download/phpDocumentor.phar phpDocumentor "--version"',
'add_composertool phplint phplint overtrue/', 'add_composer_tool phplint phplint overtrue/',
'add_tool https://github.com/phpstan/phpstan/releases/latest/download/phpstan.phar phpstan "-V"', 'add_tool https://github.com/phpstan/phpstan/releases/latest/download/phpstan.phar phpstan "-V"',
'add_tool https://phar.phpunit.de/phpunit.phar phpunit "--version"', 'add_tool https://phar.phpunit.de/phpunit-7.4.0.phar,https://phar.phpunit.de/phpunit-7.phar phpunit "--version"',
'add_pecl', 'add_pecl',
'add_tool https://www.phing.info/get/phing-latest.phar phing "-v"', 'add_tool https://www.phing.info/get/phing-latest.phar phing "-v"',
'add_composertool phinx phinx robmorgan/ scoped', 'add_composer_tool phinx phinx robmorgan/ scoped',
'add_composertool phinx phinx:1.2.3 robmorgan/ scoped', 'add_composer_tool phinx phinx:1.2.3 robmorgan/ scoped',
'add_tool https://github.com/phar-io/phive/releases/download/3.2.1/phive-3.2.1.phar phive "status"', 'add_tool https://github.com/phar-io/phive/releases/download/0.15.3/phive-0.15.3.phar phive "status"',
'add_composertool phpunit-bridge phpunit-bridge symfony/ global', 'add_composer_tool phpunit-bridge phpunit-bridge symfony/ global',
'add_composertool phpunit-polyfills phpunit-polyfills yoast/ global', 'add_composer_tool 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 php-config',
'add_devtools phpize', 'add_devtools phpize',
'add_protoc latest', 'add_protoc latest',
'add_symfony latest', 'add_symfony latest',
'add_composertool vapor-cli vapor-cli laravel/ scoped', 'add_composer_tool 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"' 'add_tool https://github.com/wp-cli/builds/blob/gh-pages/phar/wp-cli.phar?raw=true wp-cli "--version"',
'add_tool https://github.com/php/pie/releases/latest/download/pie.phar pie "-V"'
] ]
] ]
])('checking addTools on linux', async (tools_csv, scripts) => { ])('checking addTools on linux', async (tools_csv, scripts) => {
@ -396,40 +436,44 @@ describe('Tools tests', () => {
it.each([ 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-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, pie',
[ [
'add_tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-stable.phar,https://getcomposer.org/composer-stable.phar composer', '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', 'add_composer_tool behat behat behat/ scoped',
'add_blackfire', 'add_blackfire',
'add_tool https://get.blackfire.io/blackfire-player.phar blackfire-player "-V"', '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/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_tool https://github.com/ergebnis/composer-normalize/releases/latest/download/composer-normalize.phar composer-normalize "diagnose"',
'add_composertool composer-require-checker composer-require-checker maglnet/ scoped', 'add_composer_tool composer-dependency-analyser composer-dependency-analyser shipmonk/ scoped',
'add_composertool composer-unused composer-unused icanhazstring/ 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"', '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_composer_tool flex flex symfony/ global',
'add_grpc_php_plugin 1.2.3', 'add_grpc_php_plugin 1.2.3',
'add_tool https://github.com/infection/infection/releases/latest/download/infection.phar infection "-V"', 'add_tool https://github.com/infection/infection/releases/latest/download/infection.phar infection "-V"',
'add_tool https://github.com/phan/phan/releases/latest/download/phan.phar phan "-v"', 'add_tool https://github.com/phan/phan/releases/latest/download/phan.phar phan "-v"',
'add_tool https://github.com/phan/phan/releases/download/1.2.3/phan.phar phan "-v"', 'add_tool https://github.com/phan/phan/releases/download/1.2.3/phan.phar phan "-v"',
'add_tool https://www.phing.info/get/phing-1.2.3.phar,https://github.com/phingofficial/phing/releases/download/1.2.3/phing-1.2.3.phar phing "-v"', 'add_tool https://www.phing.info/get/phing-1.2.3.phar,https://github.com/phingofficial/phing/releases/download/1.2.3/phing-1.2.3.phar phing "-v"',
'add_composertool phinx phinx robmorgan/ scoped', 'add_composer_tool phinx phinx robmorgan/ scoped',
'add_tool https://github.com/phar-io/phive/releases/download/1.2.3/phive-1.2.3.phar phive', 'add_tool https://github.com/phar-io/phive/releases/download/0.15.3/phive-0.15.3.phar phive',
'add_devtools php-config', 'add_devtools php-config',
'add_tool https://github.com/squizlabs/PHP_CodeSniffer/releases/latest/download/phpcbf.phar phpcbf "--version"', 'add_tool https://github.com/PHPCSStandards/PHP_CodeSniffer/releases/latest/download/phpcbf.phar phpcbf "--version"',
'add_tool https://phar.phpunit.de/phpcpd.phar phpcpd "--version"', 'add_tool https://phar.phpunit.de/phpcpd.phar phpcpd "--version"',
'add_tool https://github.com/squizlabs/PHP_CodeSniffer/releases/latest/download/phpcs.phar phpcs "--version"', 'add_tool https://github.com/PHPCSStandards/PHP_CodeSniffer/releases/latest/download/phpcs.phar phpcs "--version"',
'add_tool https://github.com/phpDocumentor/phpDocumentor/releases/latest/download/phpDocumentor.phar phpDocumentor "--version"', 'add_tool https://github.com/phpDocumentor/phpDocumentor/releases/latest/download/phpDocumentor.phar phpDocumentor "--version"',
'add_devtools phpize', 'add_devtools phpize',
'add_tool https://github.com/phpmd/phpmd/releases/latest/download/phpmd.phar phpmd "--version"', 'add_tool https://github.com/phpmd/phpmd/releases/latest/download/phpmd.phar phpmd "--version"',
'add_tool https://github.com/phpspec/phpspec/releases/latest/download/phpspec.phar phpspec "-V"', 'add_tool https://github.com/phpspec/phpspec/releases/latest/download/phpspec.phar phpspec "-V"',
'add_composertool phpunit-bridge phpunit-bridge:5.6.* symfony/ global', 'add_composer_tool phpunit-bridge phpunit-bridge:5.6.* symfony/ global',
'add_composertool phpunit-polyfills phpunit-polyfills:1.0.1 yoast/ global', 'add_composer_tool phpunit-polyfills phpunit-polyfills:1.0.1 yoast/ global',
'add_protoc 1.2.3', 'add_protoc 1.2.3',
'add_tool https://github.com/vimeo/psalm/releases/latest/download/psalm.phar psalm "-v"', 'add_tool https://github.com/vimeo/psalm/releases/latest/download/psalm.phar psalm "-v"',
'add_composer_tool rector rector rector/ scoped',
'add_symfony latest', 'add_symfony latest',
'add_composertool vapor-cli vapor-cli laravel/ scoped', 'add_composer_tool 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"' 'add_tool https://github.com/wp-cli/builds/blob/gh-pages/phar/wp-cli.phar?raw=true wp-cli "--version"',
'add_composer_tool easy-coding-standard easy-coding-standard symplify/ scoped',
'add_tool https://github.com/php/pie/releases/latest/download/pie.phar pie "-V"'
] ]
] ]
])('checking addTools on darwin', async (tools_csv, scripts) => { ])('checking addTools on darwin', async (tools_csv, scripts) => {
@ -441,24 +485,25 @@ describe('Tools tests', () => {
it.each([ it.each([
[ [
'blackfire, blackfire-player:1.2.3, cs2pr, churn, deployer, does_not_exist, flex, phinx, phive:0.13.2, php-config, phpize, phpmd, simple-phpunit, symfony, wp', 'blackfire, blackfire-player:1.2.3, cs2pr, churn, deployer, does_not_exist, flex, phinx, phive:0.13.2, php-config, phpize, phpmd, simple-phpunit, symfony, wp, pie',
[ [
'Add-Tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-stable.phar,https://getcomposer.org/composer-stable.phar composer', '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', 'Add-Blackfire',
'Add-Tool https://get.blackfire.io/blackfire-player-v1.2.3.phar blackfire-player "-V"', 'blackfire-player is not a windows tool',
'Add-Tool https://github.com/staabm/annotate-pull-request-from-checkstyle/releases/latest/download/cs2pr cs2pr "-V"', 'Add-Tool https://github.com/staabm/annotate-pull-request-from-checkstyle/releases/latest/download/cs2pr cs2pr "-V"',
'Add-Tool https://github.com/bmitch/churn-php/releases/latest/download/churn.phar churn "-V"', 'Add-Tool https://github.com/bmitch/churn-php/releases/latest/download/churn.phar churn "-V"',
'Add-Tool https://deployer.org/deployer.phar deployer "-V"', 'Add-Tool https://deployer.org/deployer.phar deployer "-V"',
'Tool does_not_exist is not supported', 'Tool does_not_exist is not supported',
'Add-Composertool flex flex symfony/ global', 'Add-ComposerTool flex flex symfony/ global',
'Add-Composertool phinx phinx robmorgan/ scoped', 'Add-ComposerTool phinx phinx robmorgan/ scoped',
'Add-Tool https://github.com/phar-io/phive/releases/download/0.13.2/phive-0.13.2.phar phive "status"', 'Add-Tool https://github.com/phar-io/phive/releases/download/0.15.3/phive-0.15.3.phar phive "status"',
'php-config is not a windows tool', 'php-config is not a windows tool',
'phpize is not a windows tool', 'phpize is not a windows tool',
'Add-Tool https://github.com/phpmd/phpmd/releases/latest/download/phpmd.phar phpmd "--version"', 'Add-Tool https://github.com/phpmd/phpmd/releases/latest/download/phpmd.phar phpmd "--version"',
'Add-Composertool phpunit-bridge phpunit-bridge symfony/ global', 'Add-ComposerTool phpunit-bridge phpunit-bridge symfony/ global',
'Add-Symfony', 'Add-Symfony',
'Add-Tool https://github.com/wp-cli/builds/blob/gh-pages/phar/wp-cli.phar?raw=true wp-cli "--version"' 'Add-Tool https://github.com/wp-cli/builds/blob/gh-pages/phar/wp-cli.phar?raw=true wp-cli "--version"',
'Add-Tool https://github.com/php/pie/releases/latest/download/pie.phar pie "-V"'
] ]
] ]
])('checking addTools on Windows', async (tools_csv, scripts) => { ])('checking addTools on Windows', async (tools_csv, scripts) => {
@ -472,14 +517,14 @@ describe('Tools tests', () => {
[ [
'composer:v1, codeception/codeception, prestissimo, hirak/prestissimo, composer-prefetcher, narrowspark/automatic-composer-prefetcher, phinx: 1.2, robmorgan/phinx: ^1.2, user/tool:1.2.3, user/tool:~1.2', 'composer:v1, codeception/codeception, prestissimo, hirak/prestissimo, composer-prefetcher, narrowspark/automatic-composer-prefetcher, phinx: 1.2, robmorgan/phinx: ^1.2, user/tool:1.2.3, user/tool:~1.2',
[ [
'Add-Tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-1.phar,https://getcomposer.org/composer-1.phar composer', 'Add-Tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-1.phar,https://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-1.phar,https://getcomposer.org/composer-1.phar composer',
'Add-Composertool codeception codeception codeception/ global', 'Add-ComposerTool codeception codeception codeception/ global',
'Add-Composertool prestissimo prestissimo hirak/ global', 'Add-ComposerTool prestissimo prestissimo hirak/ global',
'Add-Composertool automatic-composer-prefetcher automatic-composer-prefetcher narrowspark/ global', 'Add-ComposerTool automatic-composer-prefetcher automatic-composer-prefetcher narrowspark/ global',
'Add-Composertool phinx phinx:1.2.* robmorgan/ scoped', 'Add-ComposerTool phinx phinx:1.2.* robmorgan/ scoped',
'Add-Composertool phinx phinx:^1.2 robmorgan/ global', 'Add-ComposerTool phinx phinx:^1.2 robmorgan/ global',
'Add-Composertool tool tool:1.2.3 user/ global', 'Add-ComposerTool tool tool:1.2.3 user/ global',
'Add-Composertool tool tool:~1.2 user/ global' 'Add-ComposerTool tool tool:~1.2 user/ global'
] ]
] ]
])( ])(
@ -492,13 +537,39 @@ describe('Tools tests', () => {
} }
); );
it.each`
version | os | uri
${'latest'} | ${'linux'} | ${'releases/latest/download/castor.linux-amd64.phar'}
${'0.5.1'} | ${'linux'} | ${'releases/download/v0.5.1/castor.linux-amd64.phar'}
${'latest'} | ${'darwin'} | ${'releases/latest/download/castor.darwin-amd64.phar'}
${'0.5.1'} | ${'darwin'} | ${'releases/download/v0.5.1/castor.darwin-amd64.phar'}
${'latest'} | ${'win32'} | ${'releases/latest/download/castor.windows-amd64.phar'}
${'0.5.1'} | ${'win32'} | ${'releases/download/v0.5.1/castor.windows-amd64.phar castor -V'}
${'latest'} | ${'openbsd'} | ${'Platform openbsd is not supported'}
`('checking addCastor: $version, $os', async ({version, os, uri}) => {
const data = getData({
tool: 'castor',
php_version: '8.1',
version_prefix: 'v',
version: version,
os: os
});
if (os === 'win32' && version === '0.5.1') {
fs.writeFileSync('castor.php', '');
expect(await tools.addCastor(data)).toContain(uri);
fs.unlinkSync('castor.php');
} else {
expect(await tools.addCastor(data)).toContain(uri);
}
});
it.each` it.each`
tools_csv | script tools_csv | script
${'none'} | ${''} ${'none'} | ${''}
${'none, phpunit'} | ${'\nstep_log "Setup Tools"\nadd_tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-stable.phar,https://getcomposer.org/composer-stable.phar composer latest\n\nadd_tool https://phar.phpunit.de/phpunit.phar phpunit "--version"'} ${'none, phpunit'} | ${'\nstep_log "Setup Tools"\nadd_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 latest\n\nadd_tool https://phar.phpunit.de/phpunit-7.4.0.phar,https://phar.phpunit.de/phpunit-7.phar phpunit "--version"'}
${'composer:preview'} | ${'add_tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-preview.phar,https://getcomposer.org/composer-preview.phar composer preview'} ${'composer:preview'} | ${'add_tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-preview.phar,https://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-preview.phar,https://getcomposer.org/composer-preview.phar composer preview'}
${'composer, composer:v1'} | ${'add_tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-1.phar,https://getcomposer.org/composer-1.phar composer'} ${'composer, composer:v1'} | ${'add_tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-1.phar,https://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-1.phar,https://getcomposer.org/composer-1.phar composer'}
${'composer:v1, composer:preview, composer:snapshot'} | ${'add_tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-snapshot.phar,https://getcomposer.org/composer.phar composer snapshot'} ${'composer:v1, composer:preview, composer:snapshot'} | ${'add_tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-snapshot.phar,https://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-snapshot.phar,https://getcomposer.org/composer.phar composer snapshot'}
`('checking composer setup: $tools_csv', async ({tools_csv, script}) => { `('checking composer setup: $tools_csv', async ({tools_csv, script}) => {
expect(await tools.addTools(tools_csv, '7.4', 'linux')).toContain(script); expect(await tools.addTools(tools_csv, '7.4', 'linux')).toContain(script);
}); });
@ -509,7 +580,35 @@ describe('Tools tests', () => {
${'phpunit:1.2'} | ${'invalid_token'} | ${'add_log "$cross" "phpunit" "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."'} ${'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}) => { `('checking error: $tools_csv', async ({tools_csv, token, script}) => {
process.env['COMPOSER_TOKEN'] = token; process.env['GITHUB_TOKEN'] = token;
expect(await tools.addTools(tools_csv, '7.4', 'linux')).toContain(script); 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);
});
it.each`
tools_csv | php_version | resolved
${'phpunit'} | ${'8.2'} | ${'/phpunit-8.2.0.phar'}
${'phpunit'} | ${'8.1'} | ${'/phpunit-8.1.0.phar'}
${'phpunit'} | ${'8.0'} | ${'/phpunit-8.0.0.phar'}
${'phpunit'} | ${'7.3'} | ${'/phpunit-7.3.0.phar'}
${'phpunit'} | ${'7.2'} | ${'/phpunit-7.2.0.phar'}
${'phpunit'} | ${'7.1'} | ${'/phpunit-7.1.0.phar'}
${'phpunit'} | ${'7.0'} | ${'/phpunit-7.0.0.phar'}
`(
'checking error: $tools_csv',
async ({tools_csv, php_version, resolved}) => {
expect(await tools.addTools(tools_csv, php_version, 'linux')).toContain(
resolved
);
}
);
}); });

View File

@ -1,5 +1,7 @@
import fs from 'fs';
import * as path from 'path'; import * as path from 'path';
import * as utils from '../src/utils'; import * as utils from '../src/utils';
import * as fetchModule from '../src/fetch';
/** /**
* Mock @actions/core * Mock @actions/core
@ -7,16 +9,8 @@ import * as utils from '../src/utils';
jest.mock('@actions/core', () => ({ jest.mock('@actions/core', () => ({
getInput: jest.fn().mockImplementation(key => { getInput: jest.fn().mockImplementation(key => {
return ['setup-php'].indexOf(key) !== -1 ? key : ''; return ['setup-php'].indexOf(key) !== -1 ? key : '';
}) }),
})); info: jest.fn()
/**
* Mock fetch.ts
*/
jest.mock('../src/fetch', () => ({
fetch: jest.fn().mockImplementation(() => {
return {data: '{ "latest": "8.1", "5.x": "5.6" }'};
})
})); }));
describe('Utils tests', () => { describe('Utils tests', () => {
@ -41,15 +35,27 @@ describe('Utils tests', () => {
}); });
it('checking getManifestURL', async () => { it('checking getManifestURL', async () => {
expect(await utils.getManifestURL()).toContain('php-versions.json'); for (const url of await utils.getManifestURLS()) {
expect(url).toContain('php-versions.json');
}
}); });
it('checking parseVersion', async () => { it('checking parseVersion', async () => {
const fetchSpy = jest
.spyOn(fetchModule, 'fetch')
.mockResolvedValue({data: '{ "latest": "8.1", "5.x": "5.6" }'});
expect(await utils.parseVersion('latest')).toBe('8.1'); expect(await utils.parseVersion('latest')).toBe('8.1');
expect(await utils.parseVersion('7')).toBe('7.0'); expect(await utils.parseVersion('7')).toBe('7.0');
expect(await utils.parseVersion('7.4')).toBe('7.4'); expect(await utils.parseVersion('7.4')).toBe('7.4');
expect(await utils.parseVersion('5.x')).toBe('5.6'); expect(await utils.parseVersion('5.x')).toBe('5.6');
expect(await utils.parseVersion('4.x')).toBe(undefined); expect(await utils.parseVersion('4.x')).toBe(undefined);
fetchSpy.mockReset();
fetchSpy.mockResolvedValueOnce({}).mockResolvedValueOnce({});
await expect(utils.parseVersion('latest')).rejects.toThrow(
'Could not fetch the PHP version manifest.'
);
expect(fetchSpy).toHaveBeenCalledTimes(2);
}); });
it('checking parseIniFile', async () => { it('checking parseIniFile', async () => {
@ -109,6 +115,9 @@ describe('Utils tests', () => {
expect( expect(
await utils.CSVArray('a=E_ALL, b=E_ALL & ~ E_ALL, c="E_ALL", d=\'E_ALL\'') 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']); ).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([]);
expect(await utils.CSVArray(' ')).toEqual([]); expect(await utils.CSVArray(' ')).toEqual([]);
}); });
@ -190,6 +199,7 @@ describe('Utils tests', () => {
expect(await utils.getCommand('linux', 'tool')).toBe('add_tool '); expect(await utils.getCommand('linux', 'tool')).toBe('add_tool ');
expect(await utils.getCommand('darwin', 'tool')).toBe('add_tool '); expect(await utils.getCommand('darwin', 'tool')).toBe('add_tool ');
expect(await utils.getCommand('win32', 'tool')).toBe('Add-Tool '); expect(await utils.getCommand('win32', 'tool')).toBe('Add-Tool ');
expect(await utils.getCommand('win32', 'tool_name')).toBe('Add-ToolName ');
expect(await utils.getCommand('openbsd', 'tool')).toContain( expect(await utils.getCommand('openbsd', 'tool')).toContain(
'Platform openbsd is not supported' 'Platform openbsd is not supported'
); );
@ -256,4 +266,62 @@ describe('Utils tests', () => {
'\nadd_extension_from_source ext https://sub.domain.XN--tld org repo release extension' '\nadd_extension_from_source ext https://sub.domain.XN--tld org repo release extension'
); );
}); });
it('checking readPHPVersion', async () => {
expect(await utils.readPHPVersion()).toBe('latest');
process.env['php-version-file'] = '.phpenv-version';
await expect(utils.readPHPVersion()).rejects.toThrow(
"Could not find '.phpenv-version' file."
);
const existsSync = jest.spyOn(fs, 'existsSync').mockImplementation();
const readFileSync = jest.spyOn(fs, 'readFileSync').mockImplementation();
existsSync.mockReturnValue(true);
readFileSync.mockReturnValue('8.1');
expect(await utils.readPHPVersion()).toBe('8.1');
process.env['php-version'] = '8.2';
expect(await utils.readPHPVersion()).toBe('8.2');
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" } }'
);
expect(await utils.readPHPVersion()).toBe('7.3.25');
existsSync
.mockReturnValueOnce(false)
.mockReturnValueOnce(false)
.mockReturnValueOnce(true);
readFileSync.mockReturnValue(
'{ "config": { "platform": { "php": "7.4.33" } } }'
);
expect(await utils.readPHPVersion()).toBe('7.4.33');
existsSync.mockClear();
readFileSync.mockClear();
});
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');
});
}); });

View File

@ -7,15 +7,17 @@ branding:
inputs: inputs:
php-version: php-version:
description: 'Setup PHP version.' description: 'Setup PHP version.'
default: '8.1' required: false
required: true php-version-file:
description: 'Setup PHP version from a file.'
required: false
extensions: extensions:
description: 'Setup PHP extensions.' description: 'Setup PHP extensions.'
required: false required: false
ini-file: ini-file:
description: 'Set base ini file.' description: 'Set base ini file.'
default: 'production'
required: false required: false
default: 'production'
ini-values: ini-values:
description: 'Add values to php.ini.' description: 'Add values to php.ini.'
required: false required: false
@ -29,5 +31,5 @@ outputs:
php-version: php-version:
description: 'PHP version in semver format' description: 'PHP version in semver format'
runs: runs:
using: 'node12' using: 'node20'
main: 'dist/index.js' main: 'dist/index.js'

4223
dist/index.js vendored

File diff suppressed because one or more lines are too long

51
eslint.config.mjs Normal file
View File

@ -0,0 +1,51 @@
import {fixupConfigRules, fixupPluginRules} from '@eslint/compat';
// eslint-disable-next-line import/no-unresolved
import typescriptEslint from '@typescript-eslint/eslint-plugin';
import jest from 'eslint-plugin-jest';
import globals from 'globals';
// eslint-disable-next-line import/no-unresolved
import tsParser from '@typescript-eslint/parser';
import path from 'node:path';
import {fileURLToPath} from 'node:url';
import js from '@eslint/js';
import {FlatCompat} from '@eslint/eslintrc';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const compat = new FlatCompat({
baseDirectory: __dirname,
recommendedConfig: js.configs.recommended,
allConfig: js.configs.all
});
export default [
...fixupConfigRules(
compat.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': fixupPluginRules(typescriptEslint),
jest
},
languageOptions: {
globals: {
...globals.node,
...globals.jest
},
parser: tsParser,
ecmaVersion: 2021,
sourceType: 'module'
}
}
];

View File

@ -11,7 +11,7 @@ jobs:
php-versions: ['7.4', '8.0', '8.1'] php-versions: ['7.4', '8.0', '8.1']
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v4
# Docs: https://github.com/shivammathur/setup-php # Docs: https://github.com/shivammathur/setup-php
- name: Setup PHP - name: Setup PHP
@ -21,7 +21,7 @@ jobs:
- name: Get composer cache directory - name: Get composer cache directory
id: composer-cache 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 - uses: actions/cache@v3
with: with:

View File

@ -19,7 +19,7 @@ jobs:
# blackfire-player supports PHP >= 5.5 # blackfire-player supports PHP >= 5.5
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v4
# Docs: https://github.com/shivammathur/setup-php # Docs: https://github.com/shivammathur/setup-php
- name: Setup PHP - name: Setup PHP

View File

@ -19,7 +19,7 @@ jobs:
# Blackfire supports PHP >= 5.3 on Ubuntu and macOS, and PHP >= 5.4 on Windows # Blackfire supports PHP >= 5.3 on Ubuntu and macOS, and PHP >= 5.4 on Windows
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v4
# Docs: https://github.com/shivammathur/setup-php # Docs: https://github.com/shivammathur/setup-php
- name: Setup PHP - name: Setup PHP

View File

@ -28,7 +28,7 @@ jobs:
options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3 options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v4
# Docs: https://github.com/shivammathur/setup-php # Docs: https://github.com/shivammathur/setup-php
- name: Setup PHP - name: Setup PHP
@ -47,7 +47,7 @@ jobs:
- name: Get composer cache directory - name: Get composer cache directory
id: composer-cache 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 - name: Cache composer dependencies
uses: actions/cache@v3 uses: actions/cache@v3
@ -75,7 +75,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v4
# Docs: https://github.com/shivammathur/setup-php # Docs: https://github.com/shivammathur/setup-php
- name: Setup PHP - name: Setup PHP
@ -86,7 +86,7 @@ jobs:
- name: Get composer cache directory - name: Get composer cache directory
id: composer-cache 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 - name: Cache composer dependencies
uses: actions/cache@v3 uses: actions/cache@v3
@ -108,7 +108,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v4
# Docs: https://github.com/shivammathur/setup-php # Docs: https://github.com/shivammathur/setup-php
- name: Setup PHP - name: Setup PHP
@ -120,7 +120,7 @@ jobs:
- name: Get composer cache directory - name: Get composer cache directory
id: composer-cache 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 - name: Cache composer dependencies
uses: actions/cache@v3 uses: actions/cache@v3

View File

@ -28,7 +28,7 @@ jobs:
options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3 options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v4
# Docs: https://github.com/shivammathur/setup-php # Docs: https://github.com/shivammathur/setup-php
- name: Setup PHP - name: Setup PHP
@ -47,7 +47,7 @@ jobs:
- name: Get composer cache directory - name: Get composer cache directory
id: composer-cache 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 - name: Cache composer dependencies
uses: actions/cache@v3 uses: actions/cache@v3
@ -75,7 +75,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v4
# Docs: https://github.com/shivammathur/setup-php # Docs: https://github.com/shivammathur/setup-php
- name: Setup PHP - name: Setup PHP
@ -86,7 +86,7 @@ jobs:
- name: Get composer cache directory - name: Get composer cache directory
id: composer-cache 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 - name: Cache composer dependencies
uses: actions/cache@v3 uses: actions/cache@v3
@ -108,7 +108,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v4
# Docs: https://github.com/shivammathur/setup-php # Docs: https://github.com/shivammathur/setup-php
- name: Setup PHP - name: Setup PHP
@ -120,7 +120,7 @@ jobs:
- name: Get composer cache directory - name: Get composer cache directory
id: composer-cache 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 - name: Cache composer dependencies
uses: actions/cache@v3 uses: actions/cache@v3

View File

@ -11,7 +11,7 @@ jobs:
runs-on: ${{ matrix.operating-system }} runs-on: ${{ matrix.operating-system }}
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v4
# Docs: https://github.com/shivammathur/setup-php # Docs: https://github.com/shivammathur/setup-php
- name: Setup PHP - name: Setup PHP
@ -23,7 +23,7 @@ jobs:
- name: Get composer cache directory - name: Get composer cache directory
id: composer-cache 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 - name: Cache composer dependencies
uses: actions/cache@v3 uses: actions/cache@v3
@ -47,7 +47,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v4
# Docs: https://github.com/shivammathur/setup-php # Docs: https://github.com/shivammathur/setup-php
- name: Setup PHP - name: Setup PHP
@ -57,7 +57,7 @@ jobs:
extensions: mbstring, intl extensions: mbstring, intl
- name: Get composer cache directory - name: Get composer cache directory
id: composer-cache 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 - name: Cache composer dependencies
uses: actions/cache@v3 uses: actions/cache@v3
@ -79,7 +79,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v4
# Docs: https://github.com/shivammathur/setup-php # Docs: https://github.com/shivammathur/setup-php
- name: Setup PHP - name: Setup PHP
@ -91,7 +91,7 @@ jobs:
- name: Get composer cache directory - name: Get composer cache directory
id: composer-cache 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 - name: Cache composer dependencies
uses: actions/cache@v3 uses: actions/cache@v3

View File

@ -10,7 +10,7 @@ jobs:
runs-on: ${{ matrix.operating-system }} runs-on: ${{ matrix.operating-system }}
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v4
# Docs: https://github.com/shivammathur/setup-php # Docs: https://github.com/shivammathur/setup-php
- name: Setup PHP - name: Setup PHP
@ -22,7 +22,7 @@ jobs:
- name: Get composer cache directory - name: Get composer cache directory
id: composer-cache 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 - name: Cache composer dependencies
uses: actions/cache@v3 uses: actions/cache@v3

View File

@ -10,7 +10,7 @@ jobs:
runs-on: ${{ matrix.operating-system }} runs-on: ${{ matrix.operating-system }}
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v4
# Docs: https://github.com/shivammathur/setup-php # Docs: https://github.com/shivammathur/setup-php
- name: Setup PHP - name: Setup PHP
@ -21,7 +21,7 @@ jobs:
- name: Get composer cache directory - name: Get composer cache directory
id: composer-cache 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 - name: Cache composer dependencies
uses: actions/cache@v3 uses: actions/cache@v3

View File

@ -37,7 +37,7 @@ jobs:
php-versions: ['7.4', '8.0', '8.1'] php-versions: ['7.4', '8.0', '8.1']
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v4
# Docs: https://github.com/shivammathur/setup-php # Docs: https://github.com/shivammathur/setup-php
- name: Setup PHP - name: Setup PHP
@ -54,7 +54,7 @@ jobs:
- name: Get composer cache directory - name: Get composer cache directory
id: composer-cache 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 - name: Cache composer dependencies
uses: actions/cache@v3 uses: actions/cache@v3

View File

@ -39,7 +39,7 @@ jobs:
php-versions: ['7.4', '8.0', '8.1'] php-versions: ['7.4', '8.0', '8.1']
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v4
# Docs: https://github.com/shivammathur/setup-php # Docs: https://github.com/shivammathur/setup-php
- name: Setup PHP - name: Setup PHP
@ -56,7 +56,7 @@ jobs:
- name: Get composer cache directory - name: Get composer cache directory
id: composer-cache 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 - name: Cache composer dependencies
uses: actions/cache@v3 uses: actions/cache@v3

View File

@ -12,7 +12,7 @@ jobs:
php-versions: ['7.4', '8.0', '8.1'] php-versions: ['7.4', '8.0', '8.1']
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v4
# Docs: https://github.com/shivammathur/setup-php # Docs: https://github.com/shivammathur/setup-php
- name: Setup PHP - name: Setup PHP
@ -24,7 +24,7 @@ jobs:
- name: Get composer cache directory - name: Get composer cache directory
id: composer-cache 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 - name: Cache composer dependencies
uses: actions/cache@v3 uses: actions/cache@v3

View File

@ -37,7 +37,7 @@ jobs:
php-versions: ['7.4', '8.0', '8.1'] php-versions: ['7.4', '8.0', '8.1']
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v4
# Docs: https://github.com/shivammathur/setup-php # Docs: https://github.com/shivammathur/setup-php
- name: Setup PHP - name: Setup PHP
@ -54,7 +54,7 @@ jobs:
- name: Get composer cache directory - name: Get composer cache directory
id: composer-cache 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 - name: Cache composer dependencies
uses: actions/cache@v3 uses: actions/cache@v3

View File

@ -39,7 +39,7 @@ jobs:
php-versions: ['7.4', '8.0', '8.1'] php-versions: ['7.4', '8.0', '8.1']
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v4
# Docs: https://github.com/shivammathur/setup-php # Docs: https://github.com/shivammathur/setup-php
- name: Setup PHP - name: Setup PHP
@ -56,7 +56,7 @@ jobs:
- name: Get composer cache directory - name: Get composer cache directory
id: composer-cache 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 - name: Cache composer dependencies
uses: actions/cache@v3 uses: actions/cache@v3

View File

@ -12,7 +12,7 @@ jobs:
php-versions: ['7.4', '8.0', '8.1'] php-versions: ['7.4', '8.0', '8.1']
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v4
# Docs: https://github.com/shivammathur/setup-php # Docs: https://github.com/shivammathur/setup-php
- name: Setup PHP - name: Setup PHP
@ -24,7 +24,7 @@ jobs:
- name: Get composer cache directory - name: Get composer cache directory
id: composer-cache 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 - name: Cache composer dependencies
uses: actions/cache@v3 uses: actions/cache@v3

View File

@ -36,7 +36,7 @@ jobs:
# php-versions: ['7.0', '7.1', '7.2', '7.3'] # php-versions: ['7.0', '7.1', '7.2', '7.3']
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v4
# Docs: https://github.com/shivammathur/setup-php # Docs: https://github.com/shivammathur/setup-php
- name: Setup PHP - name: Setup PHP
@ -54,7 +54,7 @@ jobs:
- name: Get composer cache directory - name: Get composer cache directory
id: composer-cache 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 - name: Cache composer dependencies
uses: actions/cache@v3 uses: actions/cache@v3

View File

@ -37,7 +37,7 @@ jobs:
# php-versions: ['7.0', '7.1', '7.2', '7.3'] # php-versions: ['7.0', '7.1', '7.2', '7.3']
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v4
# Docs: https://github.com/shivammathur/setup-php # Docs: https://github.com/shivammathur/setup-php
- name: Setup PHP - name: Setup PHP
@ -55,7 +55,7 @@ jobs:
- name: Get composer cache directory - name: Get composer cache directory
id: composer-cache 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 - name: Cache composer dependencies
uses: actions/cache@v3 uses: actions/cache@v3
with: with:

View File

@ -9,10 +9,10 @@ jobs:
fail-fast: false fail-fast: false
matrix: matrix:
php-versions: ['7.4', '8.0', '8.1'] php-versions: ['7.4', '8.0', '8.1']
node-versions: [16'] node-versions: ['16']
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v4
- name: Setup Node.js - name: Setup Node.js
uses: actions/setup-node@v1 uses: actions/setup-node@v1
@ -31,7 +31,7 @@ jobs:
- name: Get yarn cache - name: Get yarn cache
id: 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 - uses: actions/cache@v3
with: with:
@ -41,7 +41,7 @@ jobs:
- name: Get composer cache directory - name: Get composer cache directory
id: composer-cache 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 - name: Cache composer dependencies
uses: actions/cache@v3 uses: actions/cache@v3

View File

@ -10,7 +10,7 @@ jobs:
runs-on: ${{ matrix.operating-system }} runs-on: ${{ matrix.operating-system }}
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v4
# Docs: https://github.com/shivammathur/setup-php # Docs: https://github.com/shivammathur/setup-php
- name: Setup PHP - name: Setup PHP
@ -22,7 +22,7 @@ jobs:
- name: Get composer cache directory - name: Get composer cache directory
id: composer-cache 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 - name: Cache composer dependencies
uses: actions/cache@v3 uses: actions/cache@v3

View File

@ -23,7 +23,7 @@ jobs:
php-versions: ['7.4', '8.0', '8.1'] php-versions: ['7.4', '8.0', '8.1']
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v4
# Docs: https://github.com/shivammathur/setup-php # Docs: https://github.com/shivammathur/setup-php
- name: Setup PHP - name: Setup PHP
@ -41,7 +41,7 @@ jobs:
- name: Get composer cache directory - name: Get composer cache directory
id: composer-cache 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 - name: Cache composer dependencies
uses: actions/cache@v3 uses: actions/cache@v3

View File

@ -23,7 +23,7 @@ jobs:
php-versions: ['7.4', '8.0', '8.1'] php-versions: ['7.4', '8.0', '8.1']
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v4
# Docs: https://github.com/shivammathur/setup-php # Docs: https://github.com/shivammathur/setup-php
- name: Setup PHP - name: Setup PHP
@ -41,7 +41,7 @@ jobs:
- name: Get composer cache directory - name: Get composer cache directory
id: composer-cache 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 - name: Cache composer dependencies
uses: actions/cache@v3 uses: actions/cache@v3

View File

@ -12,7 +12,7 @@ jobs:
php-versions: ['7.4', '8.0', '8.1'] php-versions: ['7.4', '8.0', '8.1']
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v4
# Docs: https://github.com/shivammathur/setup-php # Docs: https://github.com/shivammathur/setup-php
- name: Setup PHP - name: Setup PHP
@ -25,7 +25,7 @@ jobs:
- name: Get composer cache directory - name: Get composer cache directory
id: composer-cache 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 - name: Cache composer dependencies
uses: actions/cache@v3 uses: actions/cache@v3

View File

@ -29,7 +29,7 @@ jobs:
php-versions: ['7.4', '8.0'] php-versions: ['7.4', '8.0']
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v4
- name: Set Node.js 10.x - name: Set Node.js 10.x
uses: actions/setup-node@v1 uses: actions/setup-node@v1
@ -51,7 +51,7 @@ jobs:
- name: Get composer cache directory - name: Get composer cache directory
id: composer-cache 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 - name: Cache composer dependencies
uses: actions/cache@v3 uses: actions/cache@v3

View File

@ -29,7 +29,7 @@ jobs:
php-versions: ['7.4', '8.0'] php-versions: ['7.4', '8.0']
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v4
- name: Set Node.js 10.x - name: Set Node.js 10.x
uses: actions/setup-node@v1 uses: actions/setup-node@v1
@ -51,7 +51,7 @@ jobs:
- name: Get composer cache directory - name: Get composer cache directory
id: composer-cache 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 - name: Cache composer dependencies
uses: actions/cache@v3 uses: actions/cache@v3

14249
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
{ {
"name": "setup-php", "name": "setup-php",
"version": "2.18.1", "version": "2.34.1",
"private": false, "private": false,
"description": "Setup PHP for use with GitHub Actions", "description": "Setup PHP for use with GitHub Actions",
"main": "lib/install.js", "main": "lib/install.js",
@ -17,9 +17,9 @@
"scripts": { "scripts": {
"build": "tsc", "build": "tsc",
"lint": "eslint **/src/*.ts **/__tests__/*.ts --cache --fix", "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", "format-check": "prettier --check **/src/*.ts **/__tests__/*.ts",
"release": "ncc build -o dist && git add -f dist/", "release": "ncc build -m -o dist && git add -f dist/",
"test": "jest" "test": "jest"
}, },
"repository": { "repository": {
@ -34,29 +34,32 @@
"author": "shivammathur", "author": "shivammathur",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@actions/core": "^1.6.0", "@actions/core": "^1.11.1",
"@actions/exec": "^1.1.1", "@actions/exec": "^1.1.1",
"@actions/io": "^1.1.2", "@actions/io": "^1.1.3",
"fs": "0.0.1-security" "compare-versions": "^6.1.1"
}, },
"devDependencies": { "devDependencies": {
"@types/jest": "^27.4.1", "@eslint/compat": "^1.3.0",
"@types/node": "^17.0.23", "@eslint/js": "9.28.0",
"@typescript-eslint/eslint-plugin": "^5.18.0", "@types/jest": "^29.5.14",
"@typescript-eslint/parser": "^5.18.0", "@types/node": "^24.0.1",
"@vercel/ncc": "^0.33.3", "@typescript-eslint/eslint-plugin": "^8.34.0",
"eslint": "^8.13.0", "@typescript-eslint/parser": "^8.34.0",
"eslint-config-prettier": "^8.5.0", "@vercel/ncc": "^0.38.3",
"eslint-plugin-import": "^2.26.0", "eslint": "9.28.0",
"eslint-plugin-jest": "^26.1.4", "eslint-config-prettier": "^10.1.5",
"eslint-plugin-prettier": "^4.0.0", "eslint-plugin-import": "^2.31.0",
"jest": "^27.5.1", "eslint-plugin-jest": "^28.13.3",
"jest-circus": "^27.5.1", "eslint-plugin-prettier": "^5.4.1",
"nock": "^13.2.4", "globals": "^16.2.0",
"prettier": "^2.6.2", "jest": "^30.0.0",
"simple-git-hooks": "^2.7.0", "jest-circus": "^30.0.0",
"ts-jest": "^27.1.4", "nock": "^14.0.5",
"typescript": "^4.6.3" "prettier": "^3.5.3",
"simple-git-hooks": "^2.13.0",
"ts-jest": "^29.4.0",
"typescript": "^5.8.3"
}, },
"bugs": { "bugs": {
"url": "https://github.com/shivammathur/setup-php/issues" "url": "https://github.com/shivammathur/setup-php/issues"

View File

@ -1,11 +1,17 @@
amqp=amqp amqp=amqp
apcu=apcu apcu=apcu
ast=ast
couchbase=couchbase
ds=ds
event=event
expect=expect expect=expect
gearman=gearman
gnupg=gnupg gnupg=gnupg
grpc=grpc grpc=grpc
igbinary=igbinary igbinary=igbinary
imagick=imagick imagick=imagick
imap=imap imap=imap
lua=lua
mailparse=mailparse mailparse=mailparse
mcrypt=mcrypt mcrypt=mcrypt
memcache=memcache memcache=memcache
@ -13,18 +19,25 @@ memcached=memcached
mongodb=mongodb mongodb=mongodb
msgpack=msgpack msgpack=msgpack
pcov=pcov pcov=pcov
pdo_sqlsrv=pdo_sqlsrv
pecl_http=http pecl_http=http
phalcon3=phalcon phalcon3=phalcon
phalcon4=phalcon phalcon4=phalcon
phalcon5=phalcon
propro=propro propro=propro
protobuf=protobuf protobuf=protobuf
psr=psr psr=psr
raphf=raphf raphf=raphf
rdkafka=rdkafka rdkafka=rdkafka
redis=redis redis=redis
snmp=snmp
sqlsrv=sqlsrv
ssh2=ssh2 ssh2=ssh2
swoole=swoole swoole=swoole
uuid=uuid
v8js=v8js
vips=vips vips=vips
vld=vld
xdebug=xdebug xdebug=xdebug
xdebug2=xdebug xdebug2=xdebug
xlswriter=xlswriter xlswriter=xlswriter

View File

@ -1,2 +1,3 @@
COMPOSER_PROCESS_TIMEOUT=0 COMPOSER_PROCESS_TIMEOUT=0
COMPOSER_NO_INTERACTION=1 COMPOSER_NO_INTERACTION=1
COMPOSER_NO_AUDIT=1

31
src/configs/mod_priority Normal file
View File

@ -0,0 +1,31 @@
apc=25
apcu_bc=25
apcu-bc=25
blackfire=30
couchbase=30
decimal=30
ds=30
event=30
ev=30
grpc=30
http=25
pecl_http=25
pecl-http=25
inotify=30
libvirt-php=40
mailparse=25
maxminddb=30
memcached=25
mysqlnd=10
mysqlnd_ms=30
opcache=10
openswoole=25
pdo=10
phalcon=35
protobuf=30
psr=15
rdkafka=30
swoole=25
vips=30
xml=15
zstd=30

View File

@ -17,3 +17,8 @@
21.04,hirsute 21.04,hirsute
21.10,impish 21.10,impish
22.04,jammy 22.04,jammy
23.04,lunar
23.10,mantic
24.04,noble
24.10,oracular
25.10,plucky

1 8 jessie
17 21.04 hirsute
18 21.10 impish
19 22.04 jammy
20 23.04 lunar
21 23.10 mantic
22 24.04 noble
23 24.10 oracular
24 25.10 plucky

View File

@ -1,7 +1,9 @@
{ {
"latest": "8.1", "lowest": "8.1",
"nightly": "8.2", "highest": "8.4",
"latest": "8.4",
"nightly": "8.5",
"5.x": "5.6", "5.x": "5.6",
"7.x": "7.4", "7.x": "7.4",
"8.x": "8.1" "8.x": "8.4"
} }

View File

@ -0,0 +1,11 @@
cgi
cli
curl
fpm
intl
mbstring
mysql
opcache
pgsql
xml
zip

View File

@ -1,4 +1,13 @@
{ {
"box": {
"type": "phar",
"repository": "box-project/box",
"packagist": "humbug/box",
"extension": ".phar",
"domain": "https://github.com",
"version_prefix": "",
"version_parameter": "--version"
},
"churn": { "churn": {
"type": "phar", "type": "phar",
"repository": "bmitch/churn-php", "repository": "bmitch/churn-php",
@ -7,13 +16,26 @@
"version_prefix": "", "version_prefix": "",
"version_parameter": "-V" "version_parameter": "-V"
}, },
"composer-dependency-analyser": {
"type": "composer",
"repository": "shipmonk/composer-dependency-analyser",
"scope": "scoped"
},
"composer-unused": {
"type": "phar",
"repository": "composer-unused/composer-unused",
"extension": ".phar",
"domain": "https://github.com",
"version_prefix": "",
"version_parameter": "-V"
},
"composer-normalize": { "composer-normalize": {
"type": "phar", "type": "phar",
"repository": "ergebnis/composer-normalize", "repository": "ergebnis/composer-normalize",
"extension": ".phar", "extension": ".phar",
"domain": "https://github.com", "domain": "https://github.com",
"version_prefix": "", "version_prefix": "",
"version_parameter": "-V" "version_parameter": "diagnose"
}, },
"cs2pr": { "cs2pr": {
"type": "phar", "type": "phar",
@ -49,16 +71,25 @@
}, },
"php-cs-fixer": { "php-cs-fixer": {
"type": "phar", "type": "phar",
"repository": "FriendsOfPHP/PHP-CS-Fixer", "repository": "PHP-CS-Fixer/PHP-CS-Fixer",
"extension": ".phar", "extension": ".phar",
"domain": "https://github.com", "domain": "https://github.com",
"fetch_latest": "true", "fetch_latest": "true",
"version_prefix": "v", "version_prefix": "v",
"version_parameter": "-V" "version_parameter": "-V"
}, },
"php-scoper": {
"type": "phar",
"repository": "humbug/php-scoper",
"packagist": "humbug/php-scoper",
"extension": ".phar",
"domain": "https://github.com",
"version_prefix": "",
"version_parameter": "--version"
},
"phpcbf": { "phpcbf": {
"type": "phar", "type": "phar",
"repository": "squizlabs/PHP_CodeSniffer", "repository": "PHPCSStandards/PHP_CodeSniffer",
"extension": ".phar", "extension": ".phar",
"domain": "https://github.com", "domain": "https://github.com",
"version_prefix": "", "version_prefix": "",
@ -66,7 +97,7 @@
}, },
"phpcs": { "phpcs": {
"type": "phar", "type": "phar",
"repository": "squizlabs/PHP_CodeSniffer", "repository": "PHPCSStandards/PHP_CodeSniffer",
"extension": ".phar", "extension": ".phar",
"domain": "https://github.com", "domain": "https://github.com",
"version_prefix": "", "version_prefix": "",
@ -105,6 +136,22 @@
"version_prefix": "", "version_prefix": "",
"version_parameter": "-V" "version_parameter": "-V"
}, },
"pie": {
"type": "phar",
"repository": "php/pie",
"extension": ".phar",
"domain": "https://github.com",
"version_prefix": "",
"version_parameter": "-V"
},
"pint": {
"type": "phar",
"repository": "laravel/pint",
"extension": ".phar",
"domain": "https://github.com",
"version_prefix": "v",
"version_parameter": "-V"
},
"psalm": { "psalm": {
"type": "phar", "type": "phar",
"repository": "vimeo/psalm", "repository": "vimeo/psalm",
@ -134,11 +181,6 @@
"repository": "maglnet/composer-require-checker", "repository": "maglnet/composer-require-checker",
"scope": "scoped" "scope": "scoped"
}, },
"composer-unused": {
"type": "composer",
"repository": "icanhazstring/composer-unused",
"scope": "scoped"
},
"flex": { "flex": {
"type": "composer", "type": "composer",
"repository": "symfony/flex", "repository": "symfony/flex",
@ -176,6 +218,11 @@
"repository": "laravel/vapor-cli", "repository": "laravel/vapor-cli",
"scope": "scoped" "scope": "scoped"
}, },
"rector": {
"type": "composer",
"repository": "rector/rector",
"scope": "scoped"
},
"blackfire": { "blackfire": {
"type": "custom-package", "type": "custom-package",
"alias": "blackfire-agent" "alias": "blackfire-agent"
@ -206,6 +253,14 @@
"version_prefix": "v", "version_prefix": "v",
"version_parameter": "-V" "version_parameter": "-V"
}, },
"castor": {
"type": "custom-function",
"domain": "https://github.com",
"repository": "jolicode/castor",
"function": "castor",
"version_prefix": "v",
"version_parameter": "-V"
},
"composer": { "composer": {
"type": "custom-function", "type": "custom-function",
"domain": "https://getcomposer.org", "domain": "https://getcomposer.org",
@ -252,6 +307,7 @@
"phpunit": { "phpunit": {
"type": "custom-function", "type": "custom-function",
"repository": "sebastianbergmann/phpunit", "repository": "sebastianbergmann/phpunit",
"packagist": "phpunit/phpunit",
"domain": "https://phar.phpunit.de", "domain": "https://phar.phpunit.de",
"function": "phpunit", "function": "phpunit",
"version_prefix": "", "version_prefix": "",
@ -275,5 +331,11 @@
"extension": ".phar", "extension": ".phar",
"version_parameter": "--version", "version_parameter": "--version",
"version_prefix": "v" "version_prefix": "v"
},
"easy-coding-standard": {
"type": "composer",
"alias": "ecs",
"repository": "symplify/easy-coding-standard",
"scope": "scoped"
} }
} }

View File

@ -13,6 +13,7 @@
"fetch_latest": "true", "fetch_latest": "true",
"function": "function_name", "function": "function_name",
"repository": "user/tool", "repository": "user/tool",
"packagist": "user/tool",
"scope": "global, scoped", "scope": "global, scoped",
"type": "phar, composer, custom-package or custom-function", "type": "phar, composer, custom-package or custom-function",
"version_parameter": "--version", "version_parameter": "--version",
@ -77,6 +78,15 @@
"user/tool" "user/tool"
] ]
}, },
"packagist": {
"$id": "#/items/properties/packagist",
"type": "string",
"title": "The repository schema",
"description": "Packagist repository of the tool in case different from repository.",
"examples": [
"user/tool"
]
},
"scope": { "scope": {
"$id": "#/items/properties/scope", "$id": "#/items/properties/scope",
"type": "string", "type": "string",

View File

@ -0,0 +1,2 @@
xdebug
pcov

View File

@ -16,7 +16,7 @@ export async function checkXdebugError(
} }
/** /**
* Function to setup Xdebug * Function to set up Xdebug
* *
* @param extension * @param extension
* @param version * @param version
@ -30,23 +30,29 @@ export async function addCoverageXdebug(
pipe: string pipe: string
): Promise<string> { ): Promise<string> {
let script = '\n'; let script = '\n';
let message: string = await checkXdebugError(extension, version); const error: string = await checkXdebugError(extension, version);
let status = '$cross'; if (!error) {
if (!message) {
script += script +=
(await extensions.addExtension(':pcov:false', version, os, true)) + pipe; (await extensions.addExtension(':pcov:false', version, os, true)) + pipe;
extension = extension == 'xdebug3' ? 'xdebug' : extension; extension = extension == 'xdebug3' ? 'xdebug' : extension;
script += script +=
(await extensions.addExtension(extension, version, os, true)) + pipe; (await extensions.addExtension(extension, version, os, true)) + pipe;
message = 'Xdebug enabled as coverage driver'; script += await utils.setVariable(
status = '$tick'; 'xdebug_version',
'php -r "echo phpversion(\'xdebug\');"',
os
);
script +=
(await utils.getCommand(os, 'extension_log')) +
'xdebug "Xdebug $xdebug_version enabled as coverage driver"';
} else {
script += await utils.addLog('$cross', extension, error, os);
} }
script += await utils.addLog(status, extension, message, os);
return script; return script;
} }
/** /**
* Function to setup PCOV * Function to set up PCOV
* *
* @param version * @param version
* @param os * @param os
@ -66,15 +72,14 @@ export async function addCoveragePCOV(
script += script +=
(await extensions.addExtension('pcov', version, os, true)) + pipe; (await extensions.addExtension('pcov', version, os, true)) + pipe;
script += (await config.addINIValues('pcov.enabled=1', os, true)) + '\n'; script += (await config.addINIValues('pcov.enabled=1', os, true)) + '\n';
script += await utils.setVariable(
// success 'pcov_version',
script += await utils.addLog( 'php -r "echo phpversion(\'pcov\');"',
'$tick',
'coverage: pcov',
'PCOV enabled as coverage driver',
os os
); );
// version is not supported script +=
(await utils.getCommand(os, 'extension_log')) +
'pcov "PCOV $pcov_version enabled as coverage driver"';
break; break;
case /5\.[3-6]|7\.0/.test(version): case /5\.[3-6]|7\.0/.test(version):

View File

@ -31,20 +31,28 @@ export async function addExtensionDarwin(
case /.+-.+\/.+@.+/.test(extension): case /.+-.+\/.+@.+/.test(extension):
add_script += await utils.parseExtensionSource(extension, ext_prefix); add_script += await utils.parseExtensionSource(extension, ext_prefix);
return; return;
// match 5.3blackfire...8.1blackfire // match 7.4relay...8.5relay
// match 5.3blackfire-(semver)...8.1blackfire-(semver) // match 5.3blackfire...8.4blackfire
// match couchbase, geos, pdo_oci, oci8, http, pecl_http // match 5.3blackfire-(semver)...8.4blackfire-(semver)
// match 5.3ioncube...7.4ioncube // match couchbase, event, geos, pdo_oci, oci8, http, pecl_http
// match 7.0phalcon3...7.3phalcon3 and 7.2phalcon4...7.4phalcon4 // match 5.3ioncube...8.4ioncube
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.4phalcon5
// match 7.0zephir_parser...8.4zephir_parser
case /^(7\.4|8\.[0-5])relay(-v?\d+\.\d+\.\d+)?$/.test(version_extension):
case /^(5\.[3-6]|7\.[0-4]|8\.[0-4])blackfire(-\d+\.\d+\.\d+)?$/.test(
version_extension 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 extension
): ):
case /^(5\.[3-6]|7\.[0-4])ioncube$/.test(version_extension): case /^(5\.[3-6]|7\.[0-4]|8\.[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-4])phalcon5?/.test(
version_extension
):
case /(?<!5\.[3-6])(pdo_)?sqlsrv$/.test(version_extension): case /(?<!5\.[3-6])(pdo_)?sqlsrv$/.test(version_extension):
case /^(7\.[0-4]|8\.[0-4])zephir_parser(-v?\d+\.\d+\.\d+)?$/.test(
version_extension
):
add_script += await utils.customPackage( add_script += await utils.customPackage(
ext_name, ext_name,
'extensions', 'extensions',
@ -62,7 +70,7 @@ export async function addExtensionDarwin(
); );
return; return;
// match semver // match semver
case /.+-\d+\.\d+\.\d+.*/.test(extension): case /.+-\d+(\.\d+\.\d+.*)?/.test(extension):
add_script += await utils.joins( add_script += await utils.joins(
'\nadd_pecl_extension', '\nadd_pecl_extension',
ext_name, ext_name,
@ -74,16 +82,14 @@ export async function addExtensionDarwin(
case /(5\.[3-6]|7\.0)pcov/.test(version_extension): case /(5\.[3-6]|7\.0)pcov/.test(version_extension):
add_script += await utils.getUnsupportedLog('pcov', version, 'darwin'); add_script += await utils.getUnsupportedLog('pcov', version, 'darwin');
return; 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 brew extensions
// match 7.1 and newer - pcov case /(?<!5\.[3-5])(amqp|apcu|expect|gnupg|grpc|igbinary|imagick|imap|mailparse|mcrypt|memcache|memcached|mongodb|msgpack|protobuf|psr|raphf|rdkafka|redis|snmp|ssh2|swoole|uuid|vld|xdebug|xdebug2|yaml|zmq)/.test(
// match 5.6 to 7.4 - propro
// match 7.0 and newer - vips, xlswriter
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 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]|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( add_script += await utils.joins(
'\nadd_brew_extension', '\nadd_brew_extension',
ext_name, ext_name,
@ -128,19 +134,26 @@ export async function addExtensionWindows(
case /^none$/.test(ext_name): case /^none$/.test(ext_name):
add_script += '\nDisable-AllShared'; add_script += '\nDisable-AllShared';
break; break;
// match 5.3blackfire...8.1blackfire // match 5.3blackfire...8.4blackfire
// match 5.3blackfire-(semver)...8.1blackfire-(semver) // match 5.3blackfire-(semver)...8.4blackfire-(semver)
// match pdo_oci and oci8 // match pdo_oci and oci8
// match 5.3ioncube...7.4ioncube // match 5.3ioncube...8.4ioncube
// match 7.0phalcon3...7.3phalcon3 and 7.2phalcon4...7.4phalcon4 // match 7.0phalcon3...7.3phalcon3, 7.2phalcon4...7.4phalcon4, and 7.4phalcon5...8.4phalcon5
// match 7.1pecl_http...8.1pecl_http and 7.1http...8.1http // 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( // match 7.0zephir_parser...8.4zephir_parser
case /^(5\.[3-6]|7\.[0-4]|8\.[0-4])blackfire(-\d+\.\d+\.\d+)?$/.test(
version_extension version_extension
): ):
case /^pdo_oci$|^oci8$|^pdo_firebird$/.test(extension): case /^pdo_oci$|^oci8$|^pdo_firebird$/.test(extension):
case /^(5\.[3-6]|7\.[0-4])ioncube$/.test(version_extension): case /^(5\.[3-6]|7\.[0-4]|8\.[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-4])phalcon5?$/.test(
version_extension
):
case /^(7\.[1-4]|8\.1)(pecl_)?http/.test(version_extension): case /^(7\.[1-4]|8\.1)(pecl_)?http/.test(version_extension):
case /(?<!5\.[3-6])(pdo_)?sqlsrv$/.test(version_extension):
case /^(7\.[0-4]|8\.[0-4])zephir_parser(-v?\d+\.\d+\.\d+)?$/.test(
version_extension
):
add_script += await utils.customPackage( add_script += await utils.customPackage(
ext_name, ext_name,
'extensions', 'extensions',
@ -164,15 +177,6 @@ export async function addExtensionWindows(
'win32' 'win32'
); );
break; break;
// match semver without state
case /.+-\d+\.\d+\.\d+$/.test(extension):
add_script += await utils.joins(
'\nAdd-Extension',
ext_name,
'stable',
ext_version
);
break;
// match semver with state // match semver with state
case /.+-\d+\.\d+\.\d+[a-zA-Z]+\d*/.test(extension): case /.+-\d+\.\d+\.\d+[a-zA-Z]+\d*/.test(extension):
matches = /.+-(\d+\.\d+\.\d+)([a-zA-Z]+)\d*/.exec( matches = /.+-(\d+\.\d+\.\d+)([a-zA-Z]+)\d*/.exec(
@ -185,6 +189,15 @@ export async function addExtensionWindows(
matches[1] matches[1]
); );
break; break;
// match semver without state
case /.+-\d+(\.\d+\.\d+.*)?/.test(extension):
add_script += await utils.joins(
'\nAdd-Extension',
ext_name,
'stable',
ext_version
);
break;
// match 7.2xdebug2 to 7.4xdebug2 // match 7.2xdebug2 to 7.4xdebug2
case /7\.[2-4]xdebug2/.test(version_extension): case /7\.[2-4]xdebug2/.test(version_extension):
add_script += '\nAdd-Extension xdebug stable 2.9.8'; add_script += '\nAdd-Extension xdebug stable 2.9.8';
@ -250,25 +263,33 @@ export async function addExtensionLinux(
case /.+-.+\/.+@.+/.test(extension): case /.+-.+\/.+@.+/.test(extension):
add_script += await utils.parseExtensionSource(extension, ext_prefix); add_script += await utils.parseExtensionSource(extension, ext_prefix);
return; return;
// match 5.3blackfire...8.1blackfire // match 7.4relay...8.5relay
// match 5.3blackfire-(semver)...8.1blackfire-(semver) // match 5.3blackfire...8.4blackfire
// match 5.3blackfire-(semver)...8.4blackfire-(semver)
// match 5.3pdo_cubrid...7.2php_cubrid, 5.3cubrid...7.4cubrid // match 5.3pdo_cubrid...7.2php_cubrid, 5.3cubrid...7.4cubrid
// match couchbase, geos, pdo_oci, oci8, http, pecl_http // match couchbase, geos, pdo_oci, oci8, http, pecl_http
// match 5.3ioncube...7.4ioncube // match 5.3ioncube...8.4ioncube
// match 7.0phalcon3...7.3phalcon3 and 7.2phalcon4...7.4phalcon4 // match 7.0phalcon3...7.3phalcon3, 7.2phalcon4...7.4phalcon4, 7.4phalcon5...8.4phalcon5
case /^(5\.[3-6]|7\.[0-4]|8\.[0-1])blackfire(-\d+\.\d+\.\d+)?$/.test( // match 7.0zephir_parser...8.4zephir_parser
case /^(7\.4|8\.[0-5])relay(-v?\d+\.\d+\.\d+)?$/.test(version_extension):
case /^(5\.[3-6]|7\.[0-4]|8\.[0-4])blackfire(-\d+\.\d+\.\d+)?$/.test(
version_extension version_extension
): ):
case /^((5\.[3-6])|(7\.[0-2]))pdo_cubrid$|^((5\.[3-6])|(7\.[0-4]))cubrid$/.test( case /^((5\.[3-6])|(7\.[0-2]))pdo_cubrid$|^((5\.[3-6])|(7\.[0-4]))cubrid$/.test(
version_extension 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 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 /^(5\.[3-6]|7\.[0-4]|8\.[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-4])phalcon5?$/.test(
version_extension
):
case /(?<!5\.[3-6])(pdo_)?sqlsrv$/.test(version_extension): case /(?<!5\.[3-6])(pdo_)?sqlsrv$/.test(version_extension):
case /^(7\.[0-4]|8\.[0-4])zephir_parser(-v?\d+\.\d+\.\d+)?$/.test(
version_extension
):
add_script += await utils.customPackage( add_script += await utils.customPackage(
ext_name, ext_name,
'extensions', 'extensions',
@ -286,7 +307,7 @@ export async function addExtensionLinux(
); );
return; return;
// match semver versions // match semver versions
case /.+-\d+\.\d+\.\d+.*/.test(extension): case /.+-\d+(\.\d+\.\d+.*)?/.test(extension):
add_script += await utils.joins( add_script += await utils.joins(
'\nadd_pecl_extension', '\nadd_pecl_extension',
ext_name, ext_name,

View File

@ -3,10 +3,11 @@ import * as https from 'https';
import * as url from 'url'; import * as url from 'url';
/** /**
* Function to fetch an URL * Function to fetch a URL
* *
* @param input_url * @param input_url
* @param auth_token * @param auth_token
* @param redirect_count
*/ */
export async function fetch( export async function fetch(
input_url: string, input_url: string,
@ -25,7 +26,8 @@ export async function fetch(
const options: https.RequestOptions = { const options: https.RequestOptions = {
hostname: url_object.hostname, hostname: url_object.hostname,
path: url_object.pathname, path: url_object.pathname,
headers: headers headers: headers,
agent: new https.Agent({keepAlive: false})
}; };
const req = https.get(options, (res: IncomingMessage) => { const req = https.get(options, (res: IncomingMessage) => {
if (res.statusCode === 200) { if (res.statusCode === 200) {

View File

@ -14,7 +14,7 @@ import * as utils from './utils';
* @param os * @param os
*/ */
export async function getScript(os: string): Promise<string> { export async function getScript(os: string): Promise<string> {
const url = 'https://setup-php.com/support-ukraine'; const url = 'https://setup-php.com/sponsor';
const filename = os + (await utils.scriptExtension(os)); const filename = os + (await utils.scriptExtension(os));
const script_path = path.join(__dirname, '../src/scripts', filename); const script_path = path.join(__dirname, '../src/scripts', filename);
const run_path = script_path.replace(os, 'run'); const run_path = script_path.replace(os, 'run');
@ -24,7 +24,7 @@ export async function getScript(os: string): Promise<string> {
const coverage_driver: string = await utils.getInput('coverage', false); const coverage_driver: string = await utils.getInput('coverage', false);
const tools_csv: string = await utils.getInput('tools', false); const tools_csv: string = await utils.getInput('tools', false);
const version: string = await utils.parseVersion( const version: string = await utils.parseVersion(
await utils.getInput('php-version', true) await utils.readPHPVersion()
); );
const ini_file: string = await utils.parseIniFile( const ini_file: string = await utils.parseIniFile(
await utils.getInput('ini-file', false) await utils.getInput('ini-file', false)
@ -40,8 +40,8 @@ export async function getScript(os: string): Promise<string> {
if (ini_values_csv) { if (ini_values_csv) {
script += await config.addINIValues(ini_values_csv, os); script += await config.addINIValues(ini_values_csv, os);
} }
script += '\n' + (await utils.stepLog(`#StandWithUkraine`, os)); script += '\n' + (await utils.stepLog(`Sponsor setup-php`, os));
script += '\n' + (await utils.addLog('$tick', 'read-more', url, os)); script += '\n' + (await utils.addLog('$tick', 'setup-php', url, os));
fs.writeFileSync(run_path, script, {mode: 0o755}); fs.writeFileSync(run_path, script, {mode: 0o755});

37
src/packagist.ts Normal file
View File

@ -0,0 +1,37 @@
import * as cv from 'compare-versions';
import * as fetch from './fetch';
type RS = Record<string, string>;
type RSRS = Record<string, RS>;
export async function search(
package_name: string,
php_version: string
): Promise<string | null> {
const response = await fetch.fetch(
`https://repo.packagist.org/p2/${package_name}.json`
);
if (response.error || response.data === '[]') {
return null;
}
const data = JSON.parse(response['data']);
if (data && data.packages) {
const versions = data.packages[package_name];
versions.sort((a: RS, b: RS) => cv.compareVersions(b.version, a.version));
const result = versions.find((versionData: RSRS) => {
if (versionData?.require?.php) {
return versionData?.require?.php
.split('|')
.some(
require => require && cv.satisfies(php_version + '.0', require)
);
}
return false;
});
return result ? result.version : null;
}
return null;
}

View File

@ -1,22 +1,23 @@
# Function to setup environment for self-hosted runners. # Handle dependency extensions
self_hosted_helper() { handle_dependency_extensions() {
if ! command -v brew >/dev/null; then local formula=$1
step_log "Setup Brew" local extension=$2
get -q -e "/tmp/install.sh" "https://raw.githubusercontent.com/Homebrew/install/master/install.sh" && /tmp/install.sh >/dev/null 2>&1 formula_file="${tap_dir:?}/$ext_tap/Formula/$extension@${version:?}.rb"
add_log "${tick:?}" "Brew" "Installed Homebrew" [ -e "$formula_file" ] || formula_file="$tap_dir/$ext_tap/Formula/$formula@$version.rb"
fi
}
# Disable dependency extensions
disable_dependency_extensions() {
local extension=$1
formula_file="$tap_dir/$ext_tap/Formula/$extension@${version:?}.rb"
if [ -e "$formula_file" ]; then 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' ' ')" 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 for dependency_extension in "${dependency_extensions[@]}"; do
sudo sed -Ei '' "/=(.*\/)?\"?$dependency_extension(.so)?$/d" "${ini_file:?}" sudo sed -Ei '' "/=(.*\/)?\"?$dependency_extension(.so)?$/d" "${ini_file:?}"
done done
fi fi
suffix="$(get_php_formula_suffix)"
if [[ -n "$suffix" ]]; then
brew_opts=(-sf)
patch_abstract_file >/dev/null 2>&1
for dependency_extension in "${dependency_extensions[@]}"; do
brew install "${brew_opts[@]}" "$ext_tap/$dependency_extension@$version" >/dev/null 2>&1 && copy_brew_extensions "$dependency_extension"
done
fi
} }
# Helper function to disable an extension. # Helper function to disable an extension.
@ -33,38 +34,11 @@ disable_extension_helper() {
echo '' | sudo tee /tmp/extdisabled/"$version"/"$extension" >/dev/null 2>&1 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. # Function to get extension name from brew formula.
get_extension_from_formula() { get_extension_from_formula() {
local formula=$1 local formula=$1
local extension 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")" [[ -z "$extension" ]] && extension="$(echo "$formula" | sed -E "s/pecl_|[0-9]//g")"
echo "$extension" echo "$extension"
} }
@ -76,9 +50,12 @@ copy_brew_extensions() {
deps="$(grep -Eo 'depends_on "shivammathur[^"]+' "$formula_file" | cut -d '/' -f 3 | tr '\n' ' ')" deps="$(grep -Eo 'depends_on "shivammathur[^"]+' "$formula_file" | cut -d '/' -f 3 | tr '\n' ' ')"
IFS=' ' read -r -a deps <<< "$formula@$version $deps" IFS=' ' read -r -a deps <<< "$formula@$version $deps"
for dependency in "${deps[@]}"; do 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" [ -e "$extension_file" ] && sudo cp "$extension_file" "$ext_dir"
done done
if [ -d "$brew_prefix"/Cellar/"$formula"@"$version" ]; then
sudo find -- "$brew_prefix"/Cellar/"$formula"@"$version" -name "*.dylib" -exec cp {} "$ext_dir" \;
fi
} }
# Function to install a php extension from shivammathur/extensions tap. # Function to install a php extension from shivammathur/extensions tap.
@ -92,15 +69,22 @@ add_brew_extension() {
else else
add_brew_tap "$php_tap" add_brew_tap "$php_tap"
add_brew_tap "$ext_tap" add_brew_tap "$ext_tap"
sudo mv "$tap_dir"/"$ext_tap"/.github/deps/"$formula"/* "$core_repo/Formula/" 2>/dev/null || true
update_dependencies >/dev/null 2>&1 update_dependencies >/dev/null 2>&1
disable_dependency_extensions "$extension" >/dev/null 2>&1 handle_dependency_extensions "$formula" "$extension" >/dev/null 2>&1
brew install -f "$formula@$version" >/dev/null 2>&1 (brew install "${brew_opts[@]}" "$ext_tap/$formula@$version" >/dev/null 2>&1 && copy_brew_extensions "$formula") || pecl_install "$extension" >/dev/null 2>&1
copy_brew_extensions "$formula"
add_extension_log "$extension" "Installed and enabled" add_extension_log "$extension" "Installed and enabled"
fi fi
} }
# Function to patch the abstract file in the extensions tap.
patch_abstract_file() {
abstract_path="$tap_dir"/"$ext_tap"/Abstract/abstract-php-extension.rb
if [[ -e "$abstract_path" && ! -e /tmp/abstract_patch ]]; then
echo '' | sudo tee /tmp/abstract_patch >/dev/null 2>&1
sudo sed -i '' -e "s|php@#{\(.*\)}|php@#{\1}$suffix|g" -e "s|php_version /|\"#{php_version}$suffix\" /|g" "$abstract_path"
fi
}
# Helper function to add an extension. # Helper function to add an extension.
add_extension_helper() { add_extension_helper() {
local extension=$1 local extension=$1
@ -128,65 +112,44 @@ add_pecl() {
add_log "${tick:?}" "PECL" "Found PECL $pear_version" add_log "${tick:?}" "PECL" "Found PECL $pear_version"
} }
# Function to link all libraries of a formula. # Link opcache extension to extensions directory.
link_libraries() { link_opcache() {
formula=$1 opcache_ini="$brew_prefix"/etc/php/"$version"/conf.d/ext-opcache.ini
formula_prefix="$(brew --prefix "$formula")" if [ -e "$opcache_ini" ]; then
sudo mkdir -p "$formula_prefix"/lib opcache_ext=$(grep -Eo "zend_extension.*opcache.*\.so" "$opcache_ini" | cut -d '"' -f 2)
for lib in "$formula_prefix"/lib/*.dylib; do sudo ln -sf "$opcache_ext" "$ext_dir"
lib_name=$(basename "$lib") fi
sudo cp -a "$lib" "$brew_prefix/lib/$lib_name" 2>/dev/null || true
done
} }
# Patch brew to overwrite packages. # Patch brew to overwrite packages.
patch_brew() { 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\?" code=" keg.link\(verbose: verbose\?"
sudo sed -Ei '' "s/$code.*/$code, overwrite: true\)/" "$formula_installer" sudo sed -Ei '' "s/$code.*/$code, overwrite: true\)/" "$formula_installer"
# shellcheck disable=SC2064 # shellcheck disable=SC2064
trap "sudo sed -Ei '' 's/$code.*/$code, overwrite: overwrite?\)/' $formula_installer" exit trap "sudo sed -Ei '' 's/$code.*/$code, overwrite: overwrite?\)/' $formula_installer" exit
} }
# Helper function to update the dependencies.
update_dependencies_helper() {
dependency=$1
get -q -n "$core_repo/Formula/$dependency.rb" "https://raw.githubusercontent.com/Homebrew/homebrew-core/master/Formula/$dependency.rb"
link_libraries "$dependency"
}
# Function to update dependencies. # Function to update dependencies.
update_dependencies() { update_dependencies() {
patch_brew patch_brew
if ! [ -e /tmp/update_dependencies ]; then if ! [ -e /tmp/update_dependencies ]; then
if [ "${runner:?}" != "self-hosted" ] && [ "${ImageOS:-}" != "" ] && [ "${ImageVersion:-}" != "" ]; then for repo in "$brew_repo" "$core_repo"; do
while read -r dependency; do if [ -e "$repo" ]; then
update_dependencies_helper "$dependency" & git_retry -C "$repo" fetch origin master && git -C "$repo" reset --hard origin/master
to_wait+=($!) fi
done <"$tap_dir/$php_tap/.github/deps/${ImageOS:?}_${ImageVersion:?}" done
wait "${to_wait[@]}"
else
git -C "$core_repo" fetch origin master && git -C "$core_repo" reset --hard origin/master
fi
echo '' | sudo tee /tmp/update_dependencies >/dev/null 2>&1 echo '' | sudo tee /tmp/update_dependencies >/dev/null 2>&1
fi fi
} }
# Function to fix dependencies on install PHP version.
fix_dependencies() {
broken_deps_paths=$(php -v 2>&1 | grep -Eo '/opt/[a-zA-Z0-9@\.]+')
if [ "x$broken_deps_paths" != "x" ]; then
update_dependencies
IFS=" " read -r -a formulae <<< "$(echo "$broken_deps_paths" | tr '\n' ' ' | sed 's|/opt/||g' 2>&1)$php_formula"
brew reinstall "${formulae[@]}"
brew link --force --overwrite "$php_formula" || true
fi
}
# Function to get PHP version if it is already installed using Homebrew. # Function to get PHP version if it is already installed using Homebrew.
get_brewed_php() { get_brewed_php() {
php_cellar="$brew_prefix"/Cellar/php cellar="$brew_prefix"/Cellar
if [ -d "$php_cellar" ] && ! [[ "$(find "$php_cellar" -maxdepth 1 -name "$version*" | wc -l 2>/dev/null)" -eq 0 ]]; then php_cellar="$cellar"/php
if [ -d "$cellar" ] && ! [[ "$(find "$cellar" -maxdepth 1 -name "php@$version*" | wc -l 2>/dev/null)" -eq 0 ]]; then
php_semver | cut -c 1-3
elif [ -d "$php_cellar" ] && ! [[ "$(find "$php_cellar" -maxdepth 1 -name "$version*" | wc -l 2>/dev/null)" -eq 0 ]]; then
php_semver | cut -c 1-3 php_semver | cut -c 1-3
else else
echo 'false'; echo 'false';
@ -199,14 +162,25 @@ add_php() {
existing_version=$2 existing_version=$2
add_brew_tap "$php_tap" add_brew_tap "$php_tap"
update_dependencies update_dependencies
if [ "$existing_version" != "false" ]; then suffix="$(get_php_formula_suffix)"
([ "$action" = "upgrade" ] && brew upgrade -f "$php_formula") || brew unlink "$php_formula" php_formula="shivammathur/php/php@$version$suffix"
if [[ "$existing_version" != "false" && -z "$suffix" ]]; then
([ "$action" = "upgrade" ] && brew upgrade -f --overwrite "$php_formula") || brew unlink "$php_formula"
else else
brew install -f "$php_formula" brew install -f --overwrite "$php_formula"
fi fi
sudo chown -R "$(id -un)":"$(id -gn)" "$brew_prefix"
brew link --force --overwrite "$php_formula" brew link --force --overwrite "$php_formula"
} }
# Function to get formula suffix
get_php_formula_suffix() {
local suffix
[ "${debug:?}" = "debug" ] && suffix="-debug"
[ "${ts:?}" = "zts" ] && suffix="$suffix-zts"
echo "$suffix"
}
# Function to get extra version. # Function to get extra version.
php_extra_version() { php_extra_version() {
php_formula_file="$tap_dir"/"$php_tap"/Formula/php@"$version".rb php_formula_file="$tap_dir"/"$php_tap"/Formula/php@"$version".rb
@ -236,10 +210,17 @@ get_scan_dir() {
fi fi
} }
# Function to handle self-hosted runner setup.
self_hosted_helper() {
sudo mkdir -p /opt/hostedtoolcache >/dev/null 2>&1 || true
}
# Function to Setup PHP. # Function to Setup PHP.
setup_php() { setup_php() {
step_log "Setup PHP" step_log "Setup PHP"
php_config="$(command -v php-config 2>/dev/null)" php_config="$(command -v php-config 2>/dev/null)"
update=true
check_pre_installed
existing_version=$(get_brewed_php) existing_version=$(get_brewed_php)
if [[ "$version" =~ ${old_versions:?} ]]; then if [[ "$version" =~ ${old_versions:?} ]]; then
run_script "php5-darwin" "${version/./}" >/dev/null 2>&1 run_script "php5-darwin" "${version/./}" >/dev/null 2>&1
@ -247,15 +228,16 @@ setup_php() {
elif [ "$existing_version" != "$version" ]; then elif [ "$existing_version" != "$version" ]; then
add_php "install" "$existing_version" >/dev/null 2>&1 add_php "install" "$existing_version" >/dev/null 2>&1
status="Installed" status="Installed"
elif [ "$existing_version" = "$version" ] && [ "${update:?}" = "true" ]; then elif [ "$existing_version" = "$version" ]; then
add_php "upgrade" "$existing_version" >/dev/null 2>&1 if [ "${update:?}" = "true" ]; then
status="Updated to" add_php "upgrade" "$existing_version" >/dev/null 2>&1
else status="Updated to"
status="Found" else
fix_dependencies >/dev/null 2>&1 status="Found"
fi
fi fi
php_config="$(command -v php-config)" php_config="$(command -v php-config)"
ext_dir="$(grep 'extension_dir=' "$php_config" | cut -d "'" -f 2)" ext_dir="$(sed -n "s/.*extension_dir=['\"]\(.*\)['\"].*/\1/p" "$php_config")"
ini_dir="$(php_ini_path)" ini_dir="$(php_ini_path)"
scan_dir="$(get_scan_dir)" scan_dir="$(get_scan_dir)"
ini_file="$ini_dir"/php.ini ini_file="$ini_dir"/php.ini
@ -264,6 +246,7 @@ setup_php() {
semver="$(php_semver)" semver="$(php_semver)"
extra_version="$(php_extra_version)" extra_version="$(php_extra_version)"
configure_php configure_php
link_opcache
set_output "php-version" "$semver" set_output "php-version" "$semver"
if [ "${semver%.*}" != "$version" ]; then if [ "${semver%.*}" != "$version" ]; then
add_log "${cross:?}" "PHP" "Could not setup PHP $version" add_log "${cross:?}" "PHP" "Could not setup PHP $version"
@ -275,31 +258,28 @@ setup_php() {
} }
# Variables # Variables
version=${1:-'8.1'} version=${1:-'8.4'}
ini=${2:-'production'} ini=${2:-'production'}
src=${0%/*}/.. src=${0%/*}/..
php_formula=shivammathur/php/php@"$version" 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 scripts="$src"/scripts
ext_tap=shivammathur/homebrew-extensions ext_tap=shivammathur/homebrew-extensions
php_tap=shivammathur/homebrew-php php_tap=shivammathur/homebrew-php
export HOMEBREW_CHANGE_ARCH_TO_ARM=1 export HOMEBREW_CHANGE_ARCH_TO_ARM=1
export HOMEBREW_DEVELOPER=1
export HOMEBREW_NO_AUTO_UPDATE=1 export HOMEBREW_NO_AUTO_UPDATE=1
export HOMEBREW_NO_ENV_HINTS=1 export HOMEBREW_NO_ENV_HINTS=1
export HOMEBREW_NO_INSTALL_CLEANUP=1 export HOMEBREW_NO_INSTALL_CLEANUP=1
export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1
export HOMEBREW_NO_INSTALL_FROM_API=1
# shellcheck source=. # shellcheck source=.
. "${scripts:?}"/unix.sh . "${scripts:?}"/unix.sh
. "${scripts:?}"/tools/brew.sh
. "${scripts:?}"/tools/retry.sh
. "${scripts:?}"/tools/add_tools.sh . "${scripts:?}"/tools/add_tools.sh
. "${scripts:?}"/extensions/source.sh . "${scripts:?}"/extensions/source.sh
. "${scripts:?}"/extensions/add_extensions.sh . "${scripts:?}"/extensions/add_extensions.sh
configure_brew
read_env read_env
self_hosted_setup self_hosted_setup
setup_php setup_php

View File

@ -1,3 +1,32 @@
# Function to check if extension is enabled.
Function Test-Extension() {
Param (
[Parameter(Position = 0, Mandatory = $true)]
[ValidateNotNull()]
[string]
$extension
)
$extension_info = Get-PhpExtension -Path $php_dir | Where-Object { $_.Name -eq $extension -or $_.Handle -eq $extension }
return $null -ne $extension_info
}
# Function to add extension log.
Function Add-ExtensionLog() {
Param (
[Parameter(Position = 0, Mandatory = $true)]
[ValidateNotNull()]
$extension,
[Parameter(Position = 1, Mandatory = $true)]
[ValidateNotNull()]
$message
)
if (Test-Extension $extension) {
Add-Log $tick $extension $message
} else {
Add-Log $cross $extension "Could not install $extension on PHP $( $installed.FullVersion )"
}
}
# Function to link dependencies to PHP directory. # Function to link dependencies to PHP directory.
Function Set-ExtensionPrerequisites Function Set-ExtensionPrerequisites
{ {
@ -6,8 +35,9 @@ Function Set-ExtensionPrerequisites
[ValidateNotNull()] [ValidateNotNull()]
[ValidateLength(1, [int]::MaxValue)] [ValidateLength(1, [int]::MaxValue)]
[string] [string]
$deps_dir $extension
) )
$deps_dir = "$ext_dir\$extension-vc$($installed.VCVersion)-$arch"
$deps = Get-ChildItem -Recurse -Path $deps_dir $deps = Get-ChildItem -Recurse -Path $deps_dir
if ($deps.Count -ne 0) { if ($deps.Count -ne 0) {
# Symlink dependencies instead of adding the directory to PATH ... # Symlink dependencies instead of adding the directory to PATH ...
@ -20,6 +50,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-ExtensionFromGithub {
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"
Get-File -Url $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 to add PHP extensions.
Function Add-Extension { Function Add-Extension {
Param ( Param (
@ -35,7 +100,7 @@ Function Add-Extension {
$stability = 'stable', $stability = 'stable',
[Parameter(Position = 2, Mandatory = $false)] [Parameter(Position = 2, Mandatory = $false)]
[ValidateNotNull()] [ValidateNotNull()]
[ValidatePattern('^\d+(\.\d+){0,2}$')] [ValidatePattern('^\d+(\.\d+){0,3}$')]
[string] [string]
$extension_version = '' $extension_version = ''
) )
@ -52,31 +117,36 @@ Function Add-Extension {
Add-Log $tick $extension "Enabled" Add-Log $tick $extension "Enabled"
} }
default { default {
Enable-ExtensionDependencies $extension Enable-Extension $extension_info.Handle
Enable-PhpExtension -Extension $extension_info.Handle -Path $php_dir
Set-ExtensionPrerequisites $deps_dir
Add-Log $tick $extension "Enabled"
} }
} }
} }
else { 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)) {
$minimumStability = $stability Add-ExtensionFromGithub $extension
if($version -eq '8.1' -and $stability -eq 'stable') { } else {
$minimumStability = 'snapshot' # Patch till DLLs for PHP 8.1 and above are released as stable.
} $minimumStability = $stability
if ($version -match '8.[1-4]' -and $stability -eq 'stable') {
$minimumStability = 'snapshot'
}
$params = @{ Extension = $extension; MinimumStability = $minimumStability; MaximumStability = $stability; Path = $php_dir; AdditionalFilesPath = $deps_dir; NoDependencies = $true } $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 {
$params["Version"] = $extension_version
}
# If extension for a different version exists
if(Test-Path $ext_dir\php_$extension.dll) {
Move-Item $ext_dir\php_$extension.dll $ext_dir\php_$extension.bak.dll -Force
}
Install-PhpExtension @params
Set-ExtensionPrerequisites $extension
} }
Install-PhpExtension @params
Set-ExtensionPrerequisites $deps_dir
Add-Log $tick $extension "Installed and enabled" Add-Log $tick $extension "Installed and enabled"
} }
} } catch {
catch { Add-Log $cross $extension "Could not install $extension on PHP $( $installed.FullVersion )"
Add-Log $cross $extension "Could not install $extension on PHP $($installed.FullVersion)"
} }
} }
@ -191,4 +261,4 @@ Function Disable-AllShared() {
# Function to handle request to add PECL. # Function to handle request to add PECL.
Function Add-Pecl() { Function Add-Pecl() {
Add-Log $tick "PECL" "Use extensions input to setup PECL extensions on windows" Add-Log $tick "PECL" "Use extensions input to setup PECL extensions on windows"
} }

View File

@ -30,7 +30,8 @@ enable_cache_extension_dependencies() {
cache_dir=$(find /tmp/extcache -maxdepth 1 -type d -regex ".*$1[0-9]*") cache_dir=$(find /tmp/extcache -maxdepth 1 -type d -regex ".*$1[0-9]*")
if [[ -n "$cache_dir" ]]; then if [[ -n "$cache_dir" ]]; then
IFS=" " read -r -a deps <<<"$(find "$cache_dir" -maxdepth 1 -type f -name "*" -exec basename {} \; | tr '\n' ' ')" IFS=" " read -r -a deps <<<"$(find "$cache_dir" -maxdepth 1 -type f -name "*" -exec basename {} \; | tr '\n' ' ')"
if [[ -n "${deps[*]}" ]] && php "${deps[@]/#/-d ${2}=}" -d "${2}=$1" -m 2>/dev/null | grep -i -q "$1"; then IFS="#" read -r -a deps_enable <<<"$(printf -- "-d ${2}=%s.so#" "${deps[@]}")"
if [[ -n "${deps[*]}" ]] && php "${deps_enable[@]}" -d "${2}=$1.so" -m 2>/dev/null | grep -i -q "$1"; then
for ext in "${deps[@]}"; do for ext in "${deps[@]}"; do
sudo rm -rf /tmp/extcache/"$ext" sudo rm -rf /tmp/extcache/"$ext"
enable_extension "$ext" "$2" enable_extension "$ext" "$2"
@ -47,7 +48,19 @@ enable_extension() {
[ -d "$modules_dir" ] && sudo find "$modules_dir" -path "*disabled*$1" -delete [ -d "$modules_dir" ] && sudo find "$modules_dir" -path "*disabled*$1" -delete
enable_extension_dependencies "$1" "$2" enable_extension_dependencies "$1" "$2"
enable_cache_extension_dependencies "$1" "$2" enable_cache_extension_dependencies "$1" "$2"
echo "$2=${ext_dir:?}/$1.so" | sudo tee -a "${pecl_file:-${ini_file[@]}}" >/dev/null if ! [[ "${version:?}" =~ ${old_versions:?} ]] && command -v phpenmod >/dev/null 2>&1; then
sudo sed -Ei "/=(.*\/)?\"?$extension(.so)?\"?$/d" "$pecl_file"
mod="${ini_dir:?}"/../mods-available/"$1".ini
if ! [ -e "$mod" ]; then
priority="${3:-20}";
mod_priority_line="$(grep -E "^$1=" "${src:?}/configs/mod_priority")";
[ -n "$mod_priority_line" ] && priority=$(echo "$mod_priority_line" | cut -d'=' -f 2)
(echo "; priority=$priority"; echo "$2=${ext_dir:?}/$1.so") | sudo tee "$mod" >/dev/null
fi
sudo phpenmod -v "$version" "$1" >/dev/null 2>&1
else
echo "$2=${ext_dir:?}/$1.so" | sudo tee -a "${pecl_file:-${ini_file[@]}}" >/dev/null
fi
fi fi
} }
@ -113,15 +126,15 @@ disable_all_shared() {
sudo find "${ini_dir:-$scan_dir}"/.. -name "*.ini" -not -path "*php.ini" -not -path "*phar.ini" -not -path "*pecl.ini" -not -path "*mods-available*" -delete >/dev/null 2>&1 || true sudo find "${ini_dir:-$scan_dir}"/.. -name "*.ini" -not -path "*php.ini" -not -path "*phar.ini" -not -path "*pecl.ini" -not -path "*mods-available*" -delete >/dev/null 2>&1 || true
mkdir -p /tmp/extdisabled/"$version" mkdir -p /tmp/extdisabled/"$version"
sudo rm -f /tmp/php"$version"_extensions sudo rm -f /tmp/php"$version"_extensions
sudo find "$ext_dir" -name '*.so' -print0 | xargs -0 -n 1 basename -s .so | xargs -n 1 -I{} touch /tmp/extdisabled/"$version"/{} sudo find "$ext_dir" -name '*.so' -print0 | xargs -0 -n 1 basename -s .so | xargs -I{} touch /tmp/extdisabled/"$version"/{}
add_log "${tick:?}" "none" "Disabled all shared extensions" add_log "${tick:?}" "none" "Disabled all shared extensions"
} }
# Function to configure PECL. # Function to configure PECL.
configure_pecl() { configure_pecl() {
[ -z "${pecl_file:-${ini_file[@]}}" ] && return
if ! [ -e /tmp/pecl_config ]; then if ! [ -e /tmp/pecl_config ]; then
for script in pear pecl; do for script in pear pecl; do
sudo "$script" config-set php_ini "${pecl_file:-${ini_file[@]}}"
sudo "$script" channel-update "$script".php.net sudo "$script" channel-update "$script".php.net
done done
echo '' | sudo tee /tmp/pecl_config >/dev/null 2>&1 echo '' | sudo tee /tmp/pecl_config >/dev/null 2>&1
@ -143,26 +156,50 @@ add_extension() {
# Function to get the PECL version of an extension. # Function to get the PECL version of an extension.
get_pecl_version() { get_pecl_version() {
local extension=$1 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/' pecl_rest='https://pecl.php.net/rest/r/'
response=$(get -s -n "" "$pecl_rest$extension"/allreleases.xml) 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]+)") for state in "${states[@]}"; do
if [ ! "$pecl_version" ]; then pecl_version=$(echo "$response" | grep -m 1 -Eio "($major_version\.[0-9]+\.[0-9]+${state}[0-9]+<)" | cut -d '<' -f 1)
pecl_version=$(echo "$response" | grep -m 1 -Eo "([0-9]+\.[0-9]+\.[0-9]+)") [ -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)
fi [ -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" echo "$pecl_version"
} }
# Function to install PECL extensions and accept default options # Function to install PECL extensions and accept default options
pecl_install() { pecl_install() {
local extension=$1 local extension=$1
local prefix=${2:-extension}
add_pecl >/dev/null 2>&1 add_pecl >/dev/null 2>&1
cpu_count="$(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo '1')" disable_extension_helper "${extension%-*}" >/dev/null 2>&1
prefix_opts="$(parse_args "$extension" CONFIGURE_PREFIX_OPTS) MAKEFLAGS='-j $cpu_count'" # Compare version with 8.3 so it runs only on 8.4 and above
suffix_opts="$(parse_args "$extension" CONFIGURE_OPTS) $(parse_args "$extension" CONFIGURE_SUFFIX_OPTS)" # Install using the source interface as it allows for patching.
IFS=' ' read -r -a libraries <<<"$(parse_args "$extension" LIBS) $(parse_args "$extension" "$(uname -s)"_LIBS)" if [[ $(printf "%s\n%s" "${version:?}" "8.3" | sort -V | head -n1) != "$version" ]]; then
(( ${#libraries[@]} )) && add_libs "${libraries[@]}" >/dev/null 2>&1 extension_version=${extension##*-};
yes '' 2>/dev/null | sudo "$prefix_opts" pecl install -f -D "$(parse_pecl_configure_options "$suffix_opts")" "$extension" >/dev/null 2>&1 [ "$extension_version" = "${extension%-*}" ] && extension_version=$(get_pecl_version "$extension" "stable")
add_extension_from_source "${extension%-*}" https://pecl.php.net "${extension%-*}" "${extension%-*}" "$extension_version" "$prefix" pecl
check_extension "${extension%-*}" && return 0 || return 1;
else
cpu_count="$(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo '1')"
prefix_opts="$(parse_args "$extension" CONFIGURE_PREFIX_OPTS) MAKEFLAGS='-j $cpu_count'"
suffix_opts="$(parse_args "$extension" CONFIGURE_OPTS) $(parse_args "$extension" CONFIGURE_SUFFIX_OPTS)"
IFS=' ' read -r -a libraries <<<"$(parse_args "$extension" LIBS) $(parse_args "$extension" "$(uname -s)"_LIBS)"
(( ${#libraries[@]} )) && add_libs "${libraries[@]}" >/dev/null 2>&1
if [ "$version" = "5.3" ]; then
yes '' 2>/dev/null | sudo "$prefix_opts" pecl install -f "$extension" >/dev/null 2>&1
else
yes '' 2>/dev/null | sudo "$prefix_opts" pecl install -f -D "$(parse_pecl_configure_options "$suffix_opts")" "$extension" >/dev/null 2>&1
fi
local exit_code=$?
sudo pecl info "$extension" | grep -iq 'zend extension' && prefix=zend_extension
enable_extension "${extension%-*}" "$prefix"
return "$exit_code"
fi
} }
# Function to install a specific version of PECL extension. # Function to install a specific version of PECL extension.
@ -175,12 +212,14 @@ add_pecl_extension() {
pecl_version=$(get_pecl_version "$extension" "$pecl_version") pecl_version=$(get_pecl_version "$extension" "$pecl_version")
fi fi
ext_version=$(php -r "echo phpversion('$extension');") ext_version=$(php -r "echo phpversion('$extension');")
if [ "${ext_version/-/}" = "$pecl_version" ]; then if check_extension "$extension" && [[ -z "$pecl_version" || (-n "$pecl_version" && "${ext_version/-/}" == "$pecl_version") ]]; then
add_log "${tick:?}" "$extension" "Enabled" add_log "${tick:?}" "$extension" "Enabled"
else else
disable_extension_helper "$extension" >/dev/null 2>&1 [ -n "$pecl_version" ] && pecl_version="-$pecl_version"
pecl_install "$extension-$pecl_version" pecl_install "$extension$pecl_version" || add_extension "$extension" "$(get_extension_prefix "$extension")" >/dev/null 2>&1
add_extension_log "$extension-$pecl_version" "Installed and enabled" extension_version="$(php -r "echo phpversion('$extension');")"
[ -n "$extension_version" ] && extension_version="-$extension_version"
add_extension_log "$extension$extension_version" "Installed and enabled"
fi fi
} }
@ -192,3 +231,8 @@ add_unstable_extension() {
pecl_version=$(get_pecl_version "$extension" "$stability") pecl_version=$(get_pecl_version "$extension" "$stability")
add_pecl_extension "$extension" "$pecl_version" "$prefix" 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
}

View File

@ -21,7 +21,9 @@ Function Add-Blackfire() {
$status="Enabled" $status="Enabled"
} else { } else {
$nts = if (!$installed.ThreadSafe) { "_nts" } else { "" } $nts = if (!$installed.ThreadSafe) { "_nts" } else { "" }
Invoke-WebRequest -Uri "https://packages.blackfire.io/binaries/blackfire-php/${extension_version}/blackfire-php-windows_${arch}-php-${no_dot_version}${nts}.dll" -OutFile $ext_dir\blackfire.dll > $null 2>&1 Get-File -Url "https://packages.blackfire.io/binaries/blackfire-php/${extension_version}/blackfire-php-windows_${arch}-php-${no_dot_version}${nts}.dll" -OutFile $ext_dir\blackfire.dll > $null 2>&1
Disable-Extension xdebug > $null 2>&1
Disable-Extension pcov > $null 2>&1
Enable-PhpExtension -Extension blackfire -Path $php_dir Enable-PhpExtension -Extension blackfire -Path $php_dir
$status="Installed and enabled" $status="Installed and enabled"
} }

View File

@ -8,6 +8,10 @@ add_blackfire() {
status='Enabled' status='Enabled'
if ! shared_extension blackfire; then if ! shared_extension blackfire; then
status='Installed and enabled' status='Installed and enabled'
arch="$(uname -m)"
arch_name="amd64"
[[ "$arch" = "aarch64" || "$arch" = "arm64" ]] && arch_name="arm64"
[ "${ts:?}" = 'zts' ] && no_dot_version="${no_dot_version}-zts"
if [ "$extension_version" = "blackfire" ]; then if [ "$extension_version" = "blackfire" ]; then
if [[ ${version:?} =~ 5.[3-6] ]]; then if [[ ${version:?} =~ 5.[3-6] ]]; then
extension_version='1.50.0' extension_version='1.50.0'
@ -15,8 +19,14 @@ add_blackfire() {
extension_version=$(get -s -n "" https://blackfire.io/api/v1/releases | grep -Eo 'php":"([0-9]+.[0-9]+.[0-9]+)' | cut -d '"' -f 3) extension_version=$(get -s -n "" https://blackfire.io/api/v1/releases | grep -Eo 'php":"([0-9]+.[0-9]+.[0-9]+)' | cut -d '"' -f 3)
fi fi
fi fi
get -q -n "${ext_dir:?}/blackfire.so" https://packages.blackfire.io/binaries/blackfire-php/"$extension_version"/blackfire-php-"$platform"_amd64-php-"$no_dot_version".so >/dev/null 2>&1 get -q -n "${ext_dir:?}/blackfire.so" https://packages.blackfire.io/binaries/blackfire-php/"$extension_version"/blackfire-php-"$platform"_"$arch_name"-php-"$no_dot_version".so >/dev/null 2>&1
fi
if [ -e "${ext_dir:?}/blackfire.so" ]; then
disable_extension xdebug >/dev/null 2>&1
disable_extension pcov >/dev/null 2>&1
enable_extension blackfire extension
add_extension_log blackfire "$status"
else
add_extension_log blackfire "Could not install blackfire on PHP ${semver:?}"
fi fi
enable_extension blackfire extension
add_extension_log blackfire "$status"
} }

View File

@ -1,43 +1,87 @@
# Function to install libraries required by couchbase # Function to install libraries required by couchbase
add_couchbase_libs() { add_couchbase_clibs() {
if [ "$(uname -s)" = "Linux" ]; then ext=$1
trunk="https://github.com/couchbase/libcouchbase/releases" trunk="https://github.com/couchbase/libcouchbase/releases"
if [[ ${version:?} =~ 5.[3-6]|7.[0-1] ]]; then if [[ "$ext" =~ couchbase-2.+ ]]; then
release="2.10.9" 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)"
fi
deb_url="$trunk/download/$release/libcouchbase-${release}_ubuntu${VERSION_ID/./}_${VERSION_CODENAME}_amd64.tar"
get -q -n /tmp/libcouchbase.tar "$deb_url"
sudo tar -xf /tmp/libcouchbase.tar -C /tmp
install_packages libev4 libevent-dev
sudo dpkg -i /tmp/libcouchbase-*/*.deb
else else
if [[ ${version:?} =~ 5.[3-6]|7.[0-1] ]]; then release=$(get -s -n "" "$trunk"/latest | grep -Eo -m 1 "[0-9]+\.[0-9]+\.[0-9]+" | head -n 1)
brew install libcouchbase@2 fi
brew link --overwrite --force libcouchbase@2 [ "$VERSION_ID" = "24.04" ] && vid=22.04 || vid="$VERSION_ID"
else [ "$VERSION_CODENAME" = "noble" ] && vcn=jammy || vcn="$VERSION_CODENAME"
brew install libcouchbase deb_url="$trunk/download/$release/libcouchbase-${release}_ubuntu${vid/./}_${vcn}_amd64.tar"
fi get -q -n /tmp/libcouchbase.tar "$deb_url"
if ! [ -e /tmp/libcouchbase.tar ] || ! file /tmp/libcouchbase.tar | grep -q 'tar archive'; then
deb_url="$trunk/download/$release/libcouchbase-${release}_ubuntu2004_focal_amd64.tar"
get -q -n /tmp/libcouchbase.tar "$deb_url"
add_old_libssl
fi
sudo tar -xf /tmp/libcouchbase.tar -C /tmp
install_packages libev4 libevent-dev
sudo dpkg -i /tmp/libcouchbase-*/*.deb
}
add_old_libssl() {
if [[ "$VERSION_ID" = "24.04" ]]; then
get -q -n /tmp/libssl.deb http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2_amd64.deb
[ -e /tmp/libssl.deb ] && sudo dpkg -i /tmp/libssl.deb || add_extension_log "couchbase" "Could not install libssl1.1"
fi
}
add_couchbase_cxxlibs() {
if [ "${runner:?}" = "self-hosted" ]; then
add_list cmake https://apt.kitware.com/ubuntu/ https://apt.kitware.com/keys/kitware-archive-latest.asc "$VERSION_CODENAME" main
fi
install_packages cmake ccache
}
get_couchbase_version() {
if [[ "${version:?}" =~ ${old_versions:?} ]]; then
echo couchbase-2.2.3
elif [[ "${version:?}" =~ 5.6|7.[0-1] ]]; then
echo couchbase-2.6.2
elif [ "${version:?}" = '7.2' ]; then
echo couchbase-3.0.4
elif [ "${version:?}" = '7.3' ]; then
echo couchbase-3.2.2
elif [ "${version:?}" = '7.4' ]; then
echo couchbase-4.1.1
else
echo couchbase
fi fi
} }
# Function to add couchbase. # Function to add couchbase.
add_couchbase() { add_couchbase() {
add_couchbase_libs >/dev/null 2>&1 ext=$1
enable_extension "couchbase" "extension" if [ "$(uname -s)" = "Linux" ]; then
if check_extension "couchbase"; then if [ "$ext" = "couchbase" ]; then
add_log "${tick:?}" "couchbase" "Enabled" ext=$(get_couchbase_version)
else
if [[ "${version:?}" =~ ${old_versions:?} ]]; then
pecl_install couchbase-2.2.3 >/dev/null 2>&1
elif [[ "${version:?}" =~ 5.6|7.[0-1] ]]; then
pecl_install couchbase-2.6.2 >/dev/null 2>&1
elif [[ "${version:?}" =~ 7.2 ]]; then
pecl_install couchbase-3.0.4 >/dev/null 2>&1
else
pecl_install couchbase >/dev/null 2>&1
fi fi
add_extension_log "couchbase" "Installed and enabled" if [[ "$ext" =~ couchbase-[2-3].+ ]]; then
add_couchbase_clibs "$ext" >/dev/null 2>&1
else
add_couchbase_cxxlibs >/dev/null 2>&1
fi
enable_extension "couchbase" "extension"
if check_extension "couchbase"; then
add_log "${tick:?}" "couchbase" "Enabled"
else
if [ "$ext" = "couchbase" ]; then
ext="couchbase-$(get_pecl_version "couchbase" "stable")"
n_proc="$(nproc)"
export COUCHBASE_SUFFIX_OPTS="CMAKE_BUILD_TYPE=Release"
export CMAKE_BUILD_PARALLEL_LEVEL="$n_proc"
add_extension_from_source couchbase https://pecl.php.net couchbase couchbase "${ext##*-}" extension pecl >/dev/null 2>&1
else
pecl_install "${ext}" >/dev/null 2>&1
fi
add_extension_log "couchbase" "Installed and enabled"
fi
else
if [ -e "${ext_dir:?}"/libcouchbase_php_core.dylib ]; then
sudo cp "${ext_dir:?}"/libcouchbase_php_core.dylib "${brew_prefix:?}"/lib
fi
add_brew_extension couchbase extension
fi fi
} }

View 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@3)"
--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)"

View File

@ -4,7 +4,7 @@ Function Add-Choco() {
# Source: https://docs.chocolatey.org/en-us/choco/setup # Source: https://docs.chocolatey.org/en-us/choco/setup
Set-ExecutionPolicy Bypass -Scope Process -Force Set-ExecutionPolicy Bypass -Scope Process -Force
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072 [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
} }
} catch { } } catch { }
} }

View File

@ -1,16 +1,21 @@
add_firebird_client_darwin() { add_firebird_client_darwin() {
firebird_tag='R3_0_7' firebird_tag='v5.0.0'
pkg_name=$(get -s -n "" https://github.com/FirebirdSQL/firebird/releases/tag/"$firebird_tag" | grep -Eo "Firebird-.*.pkg" | head -n 1) arch_name='x64'
arch="$(uname -m)"
[[ "$arch" = "arm64" || "$arch" = "aarch64" ]] && arch_name='arm64'
pkg_name=$(get -s -n "" https://api.github.com/repos/FirebirdSQL/firebird/releases/tags/"$firebird_tag" | grep -Eo "Firebird-.*.-$arch_name.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-.*.-$arch_name.pkg" | head -n 1)
get -q -e "/tmp/firebird.pkg" https://github.com/FirebirdSQL/firebird/releases/download/"$firebird_tag"/"$pkg_name" 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 installer -pkg /tmp/firebird.pkg -target /
sudo mkdir -p /opt/firebird/include /opt/firebird/lib sudo mkdir -p /opt/firebird/include /opt/firebird/lib
sudo find /Library/Frameworks/Firebird.framework -name '*.h' -exec cp "{}" /opt/firebird/include \; sudo cp -a /Library/Frameworks/Firebird.framework/Headers/* /opt/firebird/include/
sudo find /Library/Frameworks/Firebird.framework -name '*.dylib' -exec cp "{}" /opt/firebird/lib \; sudo find /Library/Frameworks/Firebird.framework -name '*.dylib' -exec cp "{}" /opt/firebird/lib \;
} }
add_firebird_helper() { add_firebird_helper() {
firebird_dir=$1 firebird_dir=$1
tag="$(php_src_tag)" tag="$(php_src_tag)"
export PDO_FIREBIRD_CONFIGURE_PREFIX_OPTS="CFLAGS=-Wno-incompatible-function-pointer-types EXTRA_CFLAGS=-Wno-int-conversion"
export PDO_FIREBIRD_CONFIGURE_OPTS="--with-pdo-firebird=$firebird_dir" export PDO_FIREBIRD_CONFIGURE_OPTS="--with-pdo-firebird=$firebird_dir"
export PDO_FIREBIRD_LINUX_LIBS="firebird-dev" export PDO_FIREBIRD_LINUX_LIBS="firebird-dev"
export PDO_FIREBIRD_PATH="ext/pdo_firebird" export PDO_FIREBIRD_PATH="ext/pdo_firebird"

View File

@ -17,6 +17,10 @@ add_gearman_helper() {
# Function to add gearman extension. # Function to add gearman extension.
add_gearman() { add_gearman() {
status="Enabled" status="Enabled"
add_gearman_helper >/dev/null 2>&1 if [ "$(uname -s)" = 'Linux' ]; then
add_extension_log "gearman" "$status" add_gearman_helper >/dev/null 2>&1
add_extension_log "gearman" "$status"
else
add_brew_extension gearman extension
fi
} }

View File

@ -13,7 +13,7 @@ Function Get-ICUUrl() {
$trunk = "https://windows.php.net" $trunk = "https://windows.php.net"
$urls=@("${trunk}/downloads/php-sdk/deps/${vs_version}/${arch}", "${trunk}/downloads/php-sdk/deps/archives/${vs_version}/${arch}") $urls=@("${trunk}/downloads/php-sdk/deps/${vs_version}/${arch}", "${trunk}/downloads/php-sdk/deps/archives/${vs_version}/${arch}")
foreach ($url in $urls) { foreach ($url in $urls) {
$web_content = Invoke-WebRequest -Uri $url $web_content = Get-File -Url $url
foreach ($link in $web_content.Links) { foreach ($link in $web_content.Links) {
if ($link -match "/.*ICU-${icu_version}.*/") { if ($link -match "/.*ICU-${icu_version}.*/") {
return $trunk + $link.HREF return $trunk + $link.HREF
@ -32,7 +32,7 @@ Function Repair-ICU() {
$zip_url = Get-ICUUrl $icu.Groups[1].Value $installed.Architecture $vs $zip_url = Get-ICUUrl $icu.Groups[1].Value $installed.Architecture $vs
if ($zip_url -ne '') { if ($zip_url -ne '') {
New-Item -Path "$php_dir" -Name "icu" -ItemType "directory" -Force > $null 2>&1 New-Item -Path "$php_dir" -Name "icu" -ItemType "directory" -Force > $null 2>&1
Invoke-WebRequest -Uri $zip_url -OutFile "$php_dir\icu\icu.zip" Get-File -Url $zip_url -OutFile "$php_dir\icu\icu.zip"
Expand-Archive -Path $php_dir\icu\icu.zip -DestinationPath $php_dir\icu -Force Expand-Archive -Path $php_dir\icu\icu.zip -DestinationPath $php_dir\icu -Force
Get-ChildItem $php_dir\icu\bin -Filter *.dll | Copy-Item -Destination $php_dir -Force Get-ChildItem $php_dir\icu\bin -Filter *.dll | Copy-Item -Destination $php_dir -Force
} }
@ -47,10 +47,5 @@ Function Add-Http() {
} }
Add-Extension pecl_http >$null 2>&1 Add-Extension pecl_http >$null 2>&1
Repair-ICU Repair-ICU
try { Add-ExtensionLog http "Installed and enabled"
php --ri "http" 2> $null | Out-Null
Add-Log $tick "http" "Installed and enabled"
} catch {
Add-Log $cross "http" "Could not install http on PHP $( $installed.FullVersion )"
}
} }

View File

@ -2,9 +2,9 @@
install_icu() { install_icu() {
icu=$1 icu=$1
if [ "$(php -i | grep "ICU version =>" | sed -e "s|.*=> s*||")" != "$icu" ]; then if [ "$(php -i | grep "ICU version =>" | sed -e "s|.*=> s*||")" != "$icu" ]; then
get -q -n /tmp/icu.tar.zst "https://github.com/shivammathur/icu-intl/releases/download/icu4c/icu4c-$icu.tar.zst" get -q -n /tmp/icu.tar.zst "https://github.com/shivammathur/icu-intl/releases/download/icu4c/icu4c-$icu$arch_suffix.tar.zst"
sudo tar -I zstd -xf /tmp/icu.tar.zst -C /usr/local sudo tar -I zstd -xf /tmp/icu.tar.zst -C /usr/local
sudo cp -r /usr/local/icu/lib/* /usr/lib/x86_64-linux-gnu/ sudo cp -r /usr/local/icu/lib/* /usr/lib/"$(uname -m)"-linux-gnu/
fi fi
} }
@ -15,9 +15,13 @@ add_intl() {
if [ "$icu" != "$supported_version" ]; then if [ "$icu" != "$supported_version" ]; then
add_log "${cross:?}" "intl" "ICU $icu is not supported" add_log "${cross:?}" "intl" "ICU $icu is not supported"
else else
[ "${ts:?}" = 'zts' ] && suffix='-zts'
install_icu "$icu" >/dev/null 2>&1 install_icu "$icu" >/dev/null 2>&1
get -q -n "${ext_dir:?}/intl.so" "https://github.com/shivammathur/icu-intl/releases/download/intl/php${version:?}-intl-$icu.so" get -q -n "${ext_dir:?}/intl.so" "https://github.com/shivammathur/icu-intl/releases/download/intl/php${version:?}-intl-$icu$suffix$arch_suffix.so"
enable_extension intl extension enable_extension intl extension
add_extension_log intl "Installed and enabled with ICU $icu" add_extension_log intl "Installed and enabled with ICU $icu"
fi fi
} }
arch="$(uname -m)"
[[ "$arch" = 'arm64' || "$arch" = 'aarch64' ]] && arch_suffix='-arm64' || arch_suffix=''

View File

@ -20,7 +20,7 @@ Function Add-Ioncube() {
if (-not($installed.ThreadSafe)) { if (-not($installed.ThreadSafe)) {
$ts_part = "_nonts" $ts_part = "_nonts"
} }
Invoke-WebRequest -Uri "https://downloads.ioncube.com/loader_downloads/ioncube_loaders_win$ts_part`_vc$vc`_$arch_part.zip" -OutFile $ext_dir\ioncube.zip Get-File -Url "https://downloads.ioncube.com/loader_downloads/ioncube_loaders_win$ts_part`_vc$vc`_$arch_part.zip" -OutFile $ext_dir\ioncube.zip
Expand-Archive -Path $ext_dir\ioncube.zip -DestinationPath $ext_dir -Force Expand-Archive -Path $ext_dir\ioncube.zip -DestinationPath $ext_dir -Force
Copy-Item $ext_dir\ioncube\ioncube_loader_win_$version.dll $ext_dir\php_ioncube.dll Copy-Item $ext_dir\ioncube\ioncube_loader_win_$version.dll $ext_dir\php_ioncube.dll
} }

View File

@ -10,12 +10,25 @@ add_ioncube() {
status='Enabled' status='Enabled'
if ! shared_extension ioncube; then if ! shared_extension ioncube; then
status='Installed and enabled' status='Installed and enabled'
os_name='lin' && [ "$(uname -s)" = "Darwin" ] && os_name='mac' arch="$(uname -m)"
get -s -n "" https://downloads.ioncube.com/loader_downloads/ioncube_loaders_"$os_name"_x86-64.tar.gz | tar -xzf - -C /tmp if [ "$(uname -s)" = "Darwin" ]; then
sudo mv /tmp/ioncube/ioncube_loader_"$os_name"_"${version:?}".so "${ext_dir:?}/ioncube.so" [ "$arch" = "arm64" ] && os_suffix="dar_arm64" || os_suffix="mac_x86-64"
sudo cp /tmp/ioncube/LICENSE.txt "$ext_dir"/IONCUBE_LICENSE.txt else
[[ "$arch" = "i386" || "$arch" = "i686" ]] && arch=x86
[[ "$arch" = "x86_64" ]] && arch=x86-64
os_suffix="lin_$arch"
fi
ts_part="" && [ "${ts:?}" = "zts" ] && ts_part="_ts"
get -s -n "" https://downloads.ioncube.com/loader_downloads/ioncube_loaders_"$os_suffix".tar.gz | tar -xzf - -C /tmp
loader_file=/tmp/ioncube/ioncube_loader_"${os_suffix%%_*}_${version:?}$ts_part".so
if [ -e "$loader_file" ]; then
sudo mv /tmp/ioncube/ioncube_loader_"${os_suffix%%_*}_${version:?}$ts_part".so "${ext_dir:?}/ioncube.so"
sudo cp /tmp/ioncube/LICENSE.txt "$ext_dir"/IONCUBE_LICENSE.txt
echo "zend_extension=$ext_dir/ioncube.so" | sudo tee "${scan_dir:?}/00-ioncube.ini" >/dev/null 2>&1
fi
else
echo "zend_extension=$ext_dir/ioncube.so" | sudo tee "${scan_dir:?}/00-ioncube.ini" >/dev/null 2>&1
fi fi
echo "zend_extension=$ext_dir/ioncube.so" | sudo tee "${scan_dir:?}/00-ioncube.ini" >/dev/null 2>&1
add_extension_log "ioncube" "$status" add_extension_log "ioncube" "$status"
check_extension "ioncube" && add_license_log check_extension "ioncube" && add_license_log
} }

View File

@ -14,7 +14,7 @@ Function Add-InstantClient() {
if ($arch -eq 'x86') { if ($arch -eq 'x86') {
$suffix = 'nt' $suffix = 'nt'
} }
Invoke-WebRequest -Uri https://download.oracle.com/otn_software/nt/instantclient/instantclient-basiclite-$suffix.zip -OutFile $php_dir\instantclient.zip Get-File -Url https://download.oracle.com/otn_software/nt/instantclient/instantclient-basiclite-$suffix.zip -OutFile $php_dir\instantclient.zip
Expand-Archive -Path $php_dir\instantclient.zip -DestinationPath $php_dir -Force Expand-Archive -Path $php_dir\instantclient.zip -DestinationPath $php_dir -Force
Copy-Item $php_dir\instantclient*\* $php_dir Copy-Item $php_dir\instantclient*\* $php_dir
} }
@ -48,6 +48,7 @@ Function Get-Oci8DLL() {
return $_ return $_
} }
} }
return $null
} }
# Function to install oci8 and pdo_oci. # Function to install oci8 and pdo_oci.
@ -62,22 +63,17 @@ Function Add-Oci() {
try { try {
$status = 'Enabled' $status = 'Enabled'
Add-InstantClient Add-InstantClient
if ($extension -eq "pdo_oci") { if($version -lt '8.4') {
Enable-PhpExtension pdo_oci -Path $php_dir if($version -lt '5.6' -and $extension -eq 'oci8') {
} else { Add-Content -Value "`r`nextension=php_oci8.dll" -Path $php_dir\php.ini
if(-not(Test-Path $ext_dir\php_oci8.dll)) { } else {
$oci8DLL = Get-Oci8DLL Enable-PhpExtension $extension -Path $php_dir
if($oci8DLL) {
Copy-Item -Path $oci8DLL -Destination $ext_dir\php_oci8.dll
} else {
$status = 'Installed and enabled'
Invoke-WebRequest -Uri (Get-Oci8Url) -OutFile $php_dir\oci8.zip
Expand-Archive -Path $php_dir\oci8.zip -DestinationPath $ext_dir -Force
}
} }
Add-Content -Value "`r`nextension=php_oci8.dll" -Path $php_dir\php.ini } else {
$status = 'Installed and enabled'
Add-Extension $extension >$null 2>&1
} }
Add-Log $tick $extension $status Add-ExtensionLog $extension $status
Add-LicenseLog Add-LicenseLog
} catch { } catch {
Add-Log $cross $extension "Could not install $extension on PHP $( $installed.FullVersion )" Add-Log $cross $extension "Could not install $extension on PHP $( $installed.FullVersion )"

View File

@ -11,25 +11,37 @@ add_license_log() {
add_client() { add_client() {
if [ ! -e "$oracle_client" ]; then if [ ! -e "$oracle_client" ]; then
sudo mkdir -p -m 777 "$oracle_home" "$oracle_client" sudo mkdir -p -m 777 "$oracle_home" "$oracle_client"
arch="$(uname -m)"
for package in basiclite sdk; do for package in basiclite sdk; do
if [ "$os" = 'Linux' ]; then if [ "$os" = 'Linux' ]; then
libs='/usr/lib/' libs='/usr/lib/'
os_name='linux' os_name='linux'
arch='linuxx64' [[ "$arch" = 'arm64' || "$arch" = 'aarch64' ]] && arch_suffix='linux-arm64' || arch_suffix='linuxx64'
lib_ext='so' lib_ext='so'
elif [ "$os" = 'Darwin' ]; then elif [ "$os" = 'Darwin' ]; then
libs='/usr/local/lib/' libs='/usr/local/lib/'
os_name='mac' os_name='mac'
arch='macos' arch_suffix='macos'
lib_ext='dylib' lib_ext='dylib'
fi fi
get -q -n "/opt/oracle/$package.zip" "https://download.oracle.com/otn_software/$os_name/instantclient/instantclient-$package-$arch.zip" if [[ "$os" = 'Darwin' && ("$arch" = 'arm64' || "$arch" = 'aarch64') ]]; then
unzip -o "/opt/oracle/$package.zip" -d "$oracle_home" get -q -n "/opt/oracle/$package.dmg" "https://download.oracle.com/otn_software/$os_name/instantclient/instantclient-$package-macos-arm64.dmg"
sudo hdiutil attach "/opt/oracle/$package.dmg"
(cd /Volumes/instantclient-"$package"-macos.arm64-* && bash install_ic.sh)
sudo cp -a ~/Downloads/instantclient_* /opt/oracle/
else
get -q -n "/opt/oracle/$package.zip" "https://download.oracle.com/otn_software/$os_name/instantclient/instantclient-$package-$arch_suffix.zip"
unzip -o "/opt/oracle/$package.zip" -d "$oracle_home"
fi
done done
for icdir in /opt/oracle/instantclient_*; do for icdir in /opt/oracle/instantclient_*; do
sudo mv "$icdir"/* "$oracle_client"/ sudo mv "$icdir"/* "$oracle_client"/
done done
sudo mkdir -p "$libs"
sudo ln -sf /opt/oracle/instantclient/*.$lib_ext* $libs sudo ln -sf /opt/oracle/instantclient/*.$lib_ext* $libs
if [ "$os" = "Linux" ]; then
[ -e "$libs/$arch"-linux-gnu/libaio.so.1 ] || sudo ln -sf "$libs/$arch"-linux-gnu/libaio.so.1t64 "$libs/$arch"-linux-gnu/libaio.so.1
fi
fi fi
} }
@ -39,9 +51,13 @@ add_oci_helper() {
status='Installed and enabled' status='Installed and enabled'
read -r "${ext}_LINUX_LIBS" <<< "libaio-dev" read -r "${ext}_LINUX_LIBS" <<< "libaio-dev"
read -r "${ext}_CONFIGURE_OPTS" <<< "--with-php-config=$(command -v php-config) --with-${ext/_/-}=instantclient,$oracle_client" read -r "${ext}_CONFIGURE_OPTS" <<< "--with-php-config=$(command -v php-config) --with-${ext/_/-}=instantclient,$oracle_client"
read -r "${ext}_PATH" <<< "ext/$ext"
patch_phpize patch_phpize
add_extension_from_source "$ext" https://github.com php php-src "$(php_src_tag)" extension get if [[ $(printf "%s\n%s" "${version:?}" "8.3" | sort -V | head -n1) != "$version" ]]; then
add_extension_from_source "$ext" https://github.com php pecl-database-"$ext" main extension get
else
read -r "${ext}_PATH" <<< "ext/$ext"
add_extension_from_source "$ext" https://github.com php php-src "$(php_src_tag)" extension get
fi
restore_phpize restore_phpize
else else
enable_extension "$ext" extension enable_extension "$ext" extension

View File

@ -0,0 +1,12 @@
process_file() {
local file=$1
sed -i'' -e '0,/#include.*\(php_lcg.h\|php_mt_rand.h\|php_rand.h\|standard\/php_random\.h\).*/s//\#include <ext\/random\/php_random.h>/' "$file"
sed -i'' -e '/#include.*\(php_lcg.h\|php_mt_rand.h\|php_rand.h\|standard\/php_random\.h\)/d' "$file"
}
export -f process_file
# Compare with 8.3 so it runs only on 8.4 and above
if [[ $(printf "%s\n%s" "${version:?}" "8.3" | sort -V | head -n1) != "$version" ]]; then
find . -type f \( -name "*.c" -o -name "*.h" \) -exec bash -c 'process_file "$0"' {} \;
fi

View File

@ -3,5 +3,7 @@ patch_geos() {
sed -i~ -e "s/, ce->name/, ZSTR_VAL(ce->name)/; s/ulong /zend_ulong /" geos.c sed -i~ -e "s/, ce->name/, ZSTR_VAL(ce->name)/; s/ulong /zend_ulong /" geos.c
fi fi
get -q -n /tmp/php8.patch https://git.remirepo.net/cgit/rpms/php/php-geos.git/plain/0003-add-all-arginfo-and-fix-build-with-PHP-8.patch get -q -n /tmp/php8.patch https://git.remirepo.net/cgit/rpms/php/php-geos.git/plain/0003-add-all-arginfo-and-fix-build-with-PHP-8.patch
get -q -n /tmp/toString.patch https://git.remirepo.net/cgit/rpms/php/php-geos.git/plain/0006-fix-__toString-with-8.2.patch
patch -p1 < /tmp/php8.patch 2>/dev/null || true patch -p1 < /tmp/php8.patch 2>/dev/null || true
patch -p1 < /tmp/toString.patch 2>/dev/null || true
} }

View File

@ -1,24 +1,98 @@
# Function to install phalcon # Function to get the url of the phalcon release asset.
Function Add-PhalconHelper() { Function Get-PhalconReleaseAssetUrl() {
if ($extension_version -eq '4') { Param (
Install-Phpextension -Extension phalcon -MinimumStability stable -Path $php_dir [Parameter(Position = 0, Mandatory = $true)]
} else { [ValidateNotNull()]
$domain = 'https://github.com' [string]
$Semver
)
$domain = 'https://api.github.com/repos'
$releases = 'phalcon/cphalcon/releases'
$match = $null
if($extension_version -match '[3-4]') {
$nts = if (!$installed.ThreadSafe) { "_nts" } else { "" } $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)`"" try {
$zip_file = $match.Matches[0].Groups[1].Value $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)"
Invoke-WebRequest -Uri $domain/$zip_file -OutFile $ENV:RUNNER_TOOL_CACHE\phalcon.zip > $null 2>&1 } catch { }
if($null -eq $match) {
try {
$match = (Get-File -Url "$github/$releases/expanded_assets/v$Semver").Links.href | Select-String -Pattern "(phalcon_${arch}_.*_php${version}_${extension_version}.*[0-9]${nts}.zip)"
} catch { }
}
} 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=.*(php_phalcon-php${version}${nts}-windows.*-x64.zip)"
} catch { }
if($null -eq $match) {
try {
$match = (Get-File -Url "$github/$releases/expanded_assets/v$Semver").Links.href | Select-String -Pattern "(php_phalcon-php${version}${nts}-windows.*-x64.zip)"
} catch { }
}
if($null -eq $match) {
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 { }
}
if($null -eq $match) {
try {
$match = (Get-File -Url "$github/$releases/expanded_assets/v$Semver").Links.href | Select-String -Pattern "(phalcon-php${version}${nts}-windows.*-x64.zip)"
} catch { }
}
}
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) {
Get-File -Url $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 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" Copy-Item -Path "$ENV:RUNNER_TOOL_CACHE\phalcon\php_phalcon.dll" -Destination "$ext_dir\php_phalcon.dll"
Enable-PhpExtension -Extension phalcon -Path $php_dir 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'
} elseif (($extension_version -eq '5') -and ($version -eq '7.4')) {
return '5.4.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') {
Add-PhalconFromGitHub $semver
} else {
Add-Extension -Extension phalcon -Stability stable -Extension_version $semver
}
}
# Function to add phalcon
Function Add-Phalcon() { Function Add-Phalcon() {
Param ( Param (
[Parameter(Position = 0, Mandatory = $true)] [Parameter(Position = 0, Mandatory = $true)]
[ValidateNotNull()] [ValidateNotNull()]
[ValidateSet('phalcon3', 'phalcon4')] [ValidateSet('phalcon3', 'phalcon4', 'phalcon5')]
[string] [string]
$extension $extension
) )

View File

@ -1,13 +1,42 @@
# Helper function to get phalcon version
get_phalcon_version() {
if [ "$extension" = "phalcon5" ]; then
if [ "${version:?}" = "7.4" ]; then
echo '5.4.0'
else
get_pecl_version phalcon stable 5
fi
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. # Helper function to add phalcon.
add_phalcon_helper() { add_phalcon_helper() {
status='Installed and enabled' status='Installed and enabled'
if [ "$(uname -s)" = "Darwin" ]; then if [ "$(uname -s)" = "Darwin" ]; then
add_brew_extension "$extension" extension add_brew_extension "$extension" extension
else else
packages=("php${version:?}-$extension") package="php${version:?}-$extension"
[ "$extension" = "phalcon4" ] && packages+=("php${version:?}-psr")
add_ppa ondrej/php >/dev/null 2>&1 || update_ppa ondrej/php add_ppa ondrej/php >/dev/null 2>&1 || update_ppa ondrej/php
check_package "${packages[0]}" && install_packages "${packages[@]}" [[ "$extension" =~ phalcon[4|5] ]] && (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 fi
} }
@ -44,15 +73,28 @@ add_phalcon4() {
fi fi
} }
# Function to add phalcon5.
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. # Function to add phalcon.
add_phalcon() { add_phalcon() {
extension=$1 local extension=$1
status='Enabled' status='Enabled'
[ "$extension" = "phalcon" ] && extension=phalcon5
extension_major_version=${extension: -1} extension_major_version=${extension: -1}
if [ "$extension_major_version" = "4" ]; then if [[ "$extension_major_version" =~ [3-5] ]]; then
add_phalcon4 >/dev/null 2>&1 add_phalcon"$extension_major_version" >/dev/null 2>&1
elif [ "$extension_major_version" = "3" ]; then
add_phalcon3 >/dev/null 2>&1
fi fi
add_extension_log "phalcon" "$status" add_extension_log "phalcon" "$status"
} }

View File

@ -0,0 +1,164 @@
# Get relay version
get_relay_version() {
local ext=$1
if [[ "$ext" =~ ^relay$ ]]; then
if [ "${version:?}" = "7.4" ]; then
echo 'v0.7.0'
else
get -s -n "" "${relay_releases:?}"/latest 2<&1 | grep -m 1 -Eo "tag/(v[0-9]+(\.[0-9]+)?(\.[0-9]+)?)" | head -n 1 | cut -d '/' -f 2
fi
else
relay_version="${ext##*-}"
echo "v${relay_version/v//}"
fi
}
# Get OS suffix in relay artifact URL.
get_os_suffix() {
if [ "$os" = "Linux" ]; then
if [[ "$ID" =~ ubuntu|debian ]]; then
echo debian
elif [ "$ID" = "centos" ]; then
echo centos"$VERSION_ID"
else
echo "$ID"
fi
else
echo darwin
fi
}
# Get openssl suffix in relay artifact URL.
get_openssl_suffix() {
openssl_3=$(php -r "echo strpos(OPENSSL_VERSION_TEXT, 'SSL 3') !== false;")
[ "$openssl_3" = "1" ] && echo '+libssl3' || echo ''
}
# Change library paths in relay binary.
change_library_paths() {
if [ "$os" = "Darwin" ]; then
otool -L "${ext_dir:?}"/relay.so | grep -q 'ssl.1' && openssl_version='1.1' || openssl_version='3'
[ -e "${brew_prefix:?}"/opt/openssl@"$openssl_version" ] || brew install openssl@"$openssl_version"
dylibs="$(otool -L "${ext_dir:?}"/relay.so | grep -Eo '.*\.dylib' | cut -f1 -d ' ')"
install_name_tool -change "$(echo "${dylibs}" | grep -E "libzstd.*dylib" | xargs)" "$brew_prefix"/opt/zstd/lib/libzstd.dylib "$ext_dir"/relay.so
install_name_tool -change "$(echo "${dylibs}" | grep -E "liblz4.*dylib" | xargs)" "$brew_prefix"/opt/lz4/lib/liblz4.dylib "$ext_dir"/relay.so
install_name_tool -change "$(echo "${dylibs}" | grep -E "libssl.*dylib" | xargs)" "$brew_prefix"/opt/openssl@"$openssl_version"/lib/libssl.dylib "$ext_dir"/relay.so
install_name_tool -change "$(echo "${dylibs}" | grep -E "libcrypto.*dylib" | xargs)" "$brew_prefix"/opt/openssl@"$openssl_version"/lib/libcrypto.dylib "$ext_dir"/relay.so
install_name_tool -change "$(echo "${dylibs}" | grep -E "libck.*dylib" | xargs)" "$brew_prefix"/opt/concurrencykit/lib/libck.dylib "$ext_dir"/relay.so
fi
}
# Add hiredis library
add_hiredis() {
hiredis_url=https://github.com/redis/hiredis/archive/v1.1.0.tar.gz
hiredis_sha=fe6d21741ec7f3fc9df409d921f47dfc73a4d8ff64f4ac6f1d95f951bf7f53d6
sed -Ei.bak -e "s#^ url.*# url \"$hiredis_url\"#" -e "s#^ sha256.*# sha256 \"$hiredis_sha\"#" ${core_repo:?}/Formula/h/hiredis.rb
brew install -s hiredis
lib_dir="${brew_prefix:?}"/opt/hiredis/lib
if [ -e "$lib_dir"/libhiredis_ssl.1.1.0.dylib ]; then
sudo ln -sf "$lib_dir"/libhiredis_ssl.1.1.0.dylib "$lib_dir"/libhiredis_ssl.dylib.1.1.0
fi
mv ${core_repo:?}/Formula/h/hiredis.rb.bak ${core_repo:?}/Formula/h/hiredis.rb
}
# Add relay dependencies
add_relay_dependencies() {
add_extension json
add_extension msgpack
add_extension igbinary
if [ "$os" = "Darwin" ]; then
. "${0%/*}"/tools/brew.sh
configure_brew
brew install lz4 zstd concurrencykit
add_hiredis
fi
}
# Initialize relay extension ini configuration
init_relay_ini() {
relay_ini=$1
if [ -e "$relay_ini" ]; then
if [[ -n "$RELAY_KEY" ]]; then
sudo sed -i.bak "s/^; relay.key =.*/relay.key = $RELAY_KEY/" "$relay_ini"
fi
if [[ -n "$RELAY_ENVIRONMENT" ]]; then
sudo sed -i.bak "s/^; relay.environment =.*/relay.environment = $RELAY_ENVIRONMENT/" "$relay_ini"
fi
if [[ -n "$RELAY_EVICTION_POLICY" ]]; then
sudo sed -i.bak "s/^; relay.eviction_policy =.*/relay.eviction_policy = $RELAY_EVICTION_POLICY/" "$relay_ini"
fi
if [[ -n "$RELAY_MAX_MEMORY" ]]; then
sudo sed -i.bak "s/^; relay.maxmemory =.*/relay.maxmemory = $RELAY_MAX_MEMORY/" "$relay_ini"
fi
sudo rm -rf "$relay_ini".bak
fi
}
# Enable relay extension
enable_relay() {
relay_ini=$1
if [ -e "$relay_ini" ]; then
init_relay_ini "$relay_ini"
if [ "$os" = "Linux" ]; then
sudo cp "$relay_ini" "${ini_dir:?}"/../mods-available/relay.ini
sudo phpenmod -v "${version:?}" relay
else
sudo cp "${relay_ini}" "${scan_dir:?}"/60-relay.ini
fi
fi
}
# Patch binary id in relay extension
init_relay_binary_id() {
if [ -e "${ext_dir:?}"/relay.so ]; then
sudo LC_ALL=C sed -i.bak "s/00000000-0000-0000-0000-000000000000/$(uuidgen)/" "$ext_dir"/relay.so || true
fi
}
# Configure relay extension
configure_relay() {
change_library_paths
init_relay_binary_id
enable_relay "${ext_dir}"/relay.ini
}
# Helper function to add relay extension
add_relay_helper() {
arch="$(uname -m | sed 's/_/-/')"
os_suffix="$(get_os_suffix)"
openssl_suffix="$(get_openssl_suffix)"
artifact_file_name="relay-$relay_version-php${version:?}-$os_suffix-$arch$openssl_suffix.tar.gz"
url="$relay_trunk"/"$relay_version"/"$artifact_file_name"
get -q -n /tmp/relay.tar.gz "$url"
if (! [ -e /tmp/relay.tar.gz ] || ! file /tmp/relay.tar.gz | grep -q 'gzip'); then
if [ "$openssl_suffix" = '+libssl3' ]; then
get -q -n /tmp/relay.tar.gz "${url/+libssl3/}"
else
get -q -n /tmp/relay.tar.gz "${url/.tar/+libssl3.tar}"
fi
fi
if [ -e /tmp/relay.tar.gz ] && file /tmp/relay.tar.gz | grep -q 'gzip'; then
sudo tar --strip-components=1 -xzf /tmp/relay.tar.gz -C "${ext_dir:?}"
sudo mv "${ext_dir:?}"/relay-pkg.so "${ext_dir:?}"/relay.so
fi
}
# Add relay extension
add_relay() {
local ext=$1
local arch
local url
os=$(uname -s)
relay_releases=https://github.com/cachewerk/relay/releases
relay_trunk=https://builds.r2.relay.so
relay_version=$(get_relay_version "$ext")
add_relay_dependencies >/dev/null 2>&1
if shared_extension relay; then
message="Enabled"
else
add_relay_helper >/dev/null 2>&1
message="Installed and enabled"
fi
configure_relay >/dev/null 2>&1
add_extension_log relay "$message"
}

View File

@ -13,7 +13,7 @@ parse_args() {
# Function to parse configure options for pecl # Function to parse configure options for pecl
# Make sure we have all options in name="value" form i.e XML properties. # Make sure we have all options in name="value" form i.e XML properties.
parse_pecl_configure_options() { parse_pecl_configure_options() {
configure_opts=$(echo "$1" | sed -r -e "s#['\"]|--##g") configure_opts=$(echo "$1" | sed -E -e "s#['\"]|--##g")
IFS=' ' read -r -a opts_array <<< "$configure_opts" IFS=' ' read -r -a opts_array <<< "$configure_opts"
output_opts=() output_opts=()
for opt in "${opts_array[@]}"; do for opt in "${opts_array[@]}"; do
@ -83,12 +83,16 @@ run_group() {
echo "$command" | sudo tee ./run_group.sh >/dev/null 2>&1 echo "$command" | sudo tee ./run_group.sh >/dev/null 2>&1
echo "$GROUP$log" echo "$GROUP$log"
. ./run_group.sh . ./run_group.sh
local status=$?
rm ./run_group.sh rm ./run_group.sh
echo "$END_GROUP" echo "$END_GROUP"
return $status
} }
patch_extension() { patch_extension() {
local extension=$1 local extension=$1
# shellcheck source=.
. "${scripts:?}"/extensions/patches/common.sh
if [ -e "${scripts:?}"/extensions/patches/"$extension".sh ]; then if [ -e "${scripts:?}"/extensions/patches/"$extension".sh ]; then
# shellcheck source=. # shellcheck source=.
. "${scripts:?}"/extensions/patches/"$extension".sh . "${scripts:?}"/extensions/patches/"$extension".sh
@ -146,11 +150,12 @@ add_extension_from_source() {
add_log "${cross:?}" "$source" "$source does not have a PHP extension" add_log "${cross:?}" "$source" "$source does not have a PHP extension"
else else
[[ -n "${libraries// }" ]] && run_group "add_libs $libraries" "add libraries" [[ -n "${libraries// }" ]] && run_group "add_libs $libraries" "add libraries"
[ "${debug:?}" = "debug" ] && suffix_opts="$suffix_opts --enable-debug"
patch_extension "$extension" >/dev/null 2>&1 patch_extension "$extension" >/dev/null 2>&1
run_group "phpize" "phpize" run_group "phpize" "phpize" && \
run_group "sudo $prefix_opts ./configure $suffix_opts $opts" "configure" run_group "sudo $prefix_opts ./configure $suffix_opts $opts" "configure" && \
run_group "sudo make -j$(nproc 2>/dev/null || sysctl -n hw.ncpu)" "make" run_group "sudo $prefix_opts make -j$(nproc 2>/dev/null || sysctl -n hw.ncpu)" "make" && \
run_group "sudo make install" "make install" run_group "sudo make install" "make install" && \
enable_extension "$extension" "$prefix" enable_extension "$extension" "$prefix"
fi fi
) )

View File

@ -0,0 +1,78 @@
# Function to get sqlsrv extension version.
Function Get-SqlsrvReleaseVersion() {
if ($version -le '7.2') {
# Use the releases from PECL for these versions
return null;
} elseif($version -eq '7.3') {
return '5.9.0'
} elseif ($version -eq '7.4') {
return '5.10.1'
} elseif ($version -eq '8.0') {
return '5.11.1'
} else {
return 'latest'
}
}
# Function to get sqlsrv extension release URL.
Function Get-SqlsrvReleaseUrl()
{
$extensionVersion = Get-SqlsrvReleaseVersion
if($extensionVersion) {
$repo = "$github/microsoft/msphpsql"
if($extensionVersion -eq 'latest') {
return "$repo/releases/latest/download/Windows-$version.zip"
} else {
return "$repo/releases/download/v$extensionVersion/Windows-$version.zip"
}
}
}
# Function to add sqlsrv extension from GitHub.
Function Add-SqlsrvFromMSGithub()
{
Param (
[Parameter(Position = 0, Mandatory = $true)]
[ValidateNotNull()]
[string]
$extension
)
try {
$zipUrl = SqlsrvReleaseUrl
if($zipUrl) {
$nts = if (!$installed.ThreadSafe) { "nts" } else { "ts" }
$noDotVersion = $version.replace('.', '')
$extensionFilePath = "Windows-$version\$arch\php_${extension}_${noDotVersion}_${nts}.dll"
Get-File -Url $zipUrl -OutFile $ENV:RUNNER_TOOL_CACHE\sqlsrv.zip > $null 2>&1
Expand-Archive -Path $ENV:RUNNER_TOOL_CACHE\sqlsrv.zip -DestinationPath $ENV:RUNNER_TOOL_CACHE\sqlsrv -Force > $null 2>&1
Copy-Item -Path "$ENV:RUNNER_TOOL_CACHE\sqlsrv\$extensionFilePath" -Destination "$ext_dir\php_$extension.dll"
Enable-PhpExtension -Extension $extension -Path $php_dir
}
} catch { }
}
# Function to add sqlsrv extension.
Function Add-Sqlsrv() {
Param (
[Parameter(Position = 0, Mandatory = $true)]
[ValidateNotNull()]
[string]
$extension
)
$status = 'Enabled'
if (Test-Path $ext_dir\php_$extension.dll) {
Enable-PhpExtension -Extension $extension -Path $php_dir
} else {
try {
Add-ExtensionFromGithub $extension > $null 2>&1
} catch {}
if (-not(Test-Extension $extension)) {
Add-SqlsrvFromMSGithub $extension >$null 2>&1
}
if (-not(Test-Extension $extension)) {
Add-Extension $extension >$null 2>&1
}
$status = 'Installed and enabled'
}
Add-ExtensionLog $extension $status
}

View File

@ -2,8 +2,13 @@
get_sqlsrv_version() { get_sqlsrv_version() {
if [[ "${version:?}" =~ 7.[0-3] ]]; then if [[ "${version:?}" =~ 7.[0-3] ]]; then
echo '5.9.0' echo '5.9.0'
elif [[ "${version:?}" =~ 7.4 ]]; then
echo '5.10.1'
elif [[ "${version:?}" =~ 8.0 ]]; then
echo '5.11.1'
else else
echo '5.10.0' # Return an empty string so that pecl will install the latest version.
echo ''
fi fi
} }
@ -11,5 +16,10 @@ get_sqlsrv_version() {
add_sqlsrv() { add_sqlsrv() {
ext=$1 ext=$1
ext_version=$(get_sqlsrv_version) ext_version=$(get_sqlsrv_version)
add_pecl_extension "$ext" "$ext_version" extension if [ "$(uname -s)" = 'Linux' ]; then
install_packages unixodbc-dev
add_pecl_extension "$ext" "$ext_version" extension
else
add_brew_extension "$ext" extension
fi
} }

View File

@ -0,0 +1,87 @@
# Function to get the url of the phalcon release asset.
Function Get-ZephirParserReleaseAssetUrl() {
Param (
[Parameter(Position = 0, Mandatory = $true)]
[ValidateNotNull()]
[string]
$extension_version
)
$repo = 'zephir-lang/php-zephir-parser'
$zp_releases = "$github/$repo/releases"
$nts = if (!$installed.ThreadSafe) { "nts" } else { "ts" }
try {
$match = (Invoke-RestMethod -Uri "https://api.github.com/repos/$repo/tags/$extension_version").assets | Select-String -Pattern "browser_download_url=.*(zephir_parser-php-${version}-$nts-windows.*.zip)"
} catch {
$match = (Get-File -Url "$zp_releases/expanded_assets/$extension_version").Links.href | Select-String -Pattern "(zephir_parser-php-${version}-$nts-windows.*.zip)"
}
if($NULL -ne $match) {
return "$zp_releases/download/$extension_version/$($match.Matches[0].Groups[1].Value)"
}
return false;
}
# Function to get zephir parser version using GitHub releases.
Function Get-ZephirParserVersion() {
Param (
[Parameter(Position = 0, Mandatory = $true)]
[ValidateNotNull()]
[string]
$extension
)
$repo = 'zephir-lang/php-zephir-parser'
$zp_releases = "$github/$repo/releases"
if($extension -eq 'zephir_parser') {
if($version -lt '7.2') {
return 'v1.6.1'
}
return (Get-File -Url $zp_releases/latest).BaseResponse.RequestMessage.RequestUri.Segments[-1]
} else {
return 'v' + ($extension.split('-')[1] -replace 'v')
}
}
# Function to add zephir parser using GitHub releases.
Function Add-ZephirParserFromGitHub() {
Param (
[Parameter(Position = 0, Mandatory = $true)]
[ValidateNotNull()]
[string]
$extension
)
$extension_version = Get-ZephirParserVersion $extension
$zip_url = Get-ZephirParserReleaseAssetUrl $extension_version
if($zip_url) {
Get-File -Url $zip_url -OutFile $ENV:RUNNER_TOOL_CACHE\zp.zip > $null 2>&1
Expand-Archive -Path $ENV:RUNNER_TOOL_CACHE\zp.zip -DestinationPath $ENV:RUNNER_TOOL_CACHE\zp -Force > $null 2>&1
Copy-Item -Path "$ENV:RUNNER_TOOL_CACHE\zp\php_zephir_parser.dll" -Destination "$ext_dir\php_zephir_parser.dll"
Enable-PhpExtension -Extension zephir_parser -Path $php_dir
} else {
throw "Unable to get zephir_parser release from the GitHub repo"
}
}
# Function to add zephir parser.
Function Add-ZephirParser() {
Param (
[Parameter(Position = 0, Mandatory = $true)]
[ValidateNotNull()]
[string]
$extension
)
try {
$status = 'Enabled'
if (Test-Path $ext_dir\php_zephir_parser.dll) {
Enable-PhpExtension -Extension zephir_parser -Path $php_dir
} else {
$status = 'Installed and enabled'
try {
Add-ZephirParserFromGitHub $extension
} catch {
Add-Extension $extension >$null 2>&1
}
}
Add-ExtensionLog zephir_parser $status
} catch {
Add-Log $cross $extension "Could not install $extension on PHP $($installed.FullVersion)"
}
}

View File

@ -0,0 +1,42 @@
# Get zephir_parser version
get_zephir_parser_version() {
local ext=$1
if [[ "$ext" =~ ^zephir_parser$ ]]; then
get -s -n "" "${zp_releases:?}"/latest 2<&1 | grep -m 1 -Eo "tag/(v?[0-9]+(\.[0-9]+)?(\.[0-9]+)?)" | head -n 1 | cut -d '/' -f 2
else
zp_version="${ext##*-}"
echo "v${zp_version/v//}"
fi
}
# Add zephir_parser helper
add_zephir_parser_helper() {
local ext=$1
nts="${ts:?}" && nts="${nts/z/}"
ext_version=$(get_zephir_parser_version "$ext")
[ "$(uname -s)" = "Linux" ] && os_suffix=ubuntu || os_suffix=macos
build_name=$(get -s -n "" https://api.github.com/repos/"$repo"/releases/tags/"$ext_version" | grep -Eo "zephir_parser-php-${version:?}-$nts-$os_suffix-.*.zip" | head -n 1)
[ -z "$build_name" ] && build_name=$(get -s -n "" "$zp_releases"/expanded_assets/"$ext_version" | grep -Eo "zephir_parser-php-${version:?}-$nts-$os_suffix-.*.zip" | head -n 1)
if [ -n "$build_name" ]; then
get -q -e "/tmp/zp.zip" "$zp_releases"/download/"$ext_version"/"$build_name"
sudo unzip -o "/tmp/zp.zip" -d "${ext_dir:?}"
enable_extension zephir_parser extension
else
pecl_install zephir_parser
fi
}
# Add zephir_parser
add_zephir_parser() {
ext=$1
repo=zephir-lang/php-zephir-parser
zp_releases=https://github.com/"$repo"/releases
if ! shared_extension zephir_parser; then
message='Installed and enabled'
add_zephir_parser_helper "$ext" >/dev/null 2>&1
else
message='Enabled'
enable_extension zephir_parser extension
fi
add_extension_log zephir_parser "$message"
}

View File

@ -2,7 +2,15 @@
add_sudo() { add_sudo() {
if ! command -v sudo >/dev/null; then if ! command -v sudo >/dev/null; then
check_package sudo || apt-get update check_package sudo || apt-get update
apt-get install -y sudo apt-get install -y sudo || (apt-get update && apt-get install -y sudo)
fi
}
# Function to link apt-fast to apt-get
link_apt_fast() {
if ! command -v apt-fast >/dev/null; then
sudo ln -sf /usr/bin/apt-get /usr/bin/apt-fast
trap "sudo rm -f /usr/bin/apt-fast 2>/dev/null" exit
fi fi
} }
@ -12,13 +20,23 @@ self_hosted_helper() {
sudo ln -sf /usr/bin/apt-get /usr/bin/apt-fast sudo ln -sf /usr/bin/apt-get /usr/bin/apt-fast
trap "sudo rm -f /usr/bin/apt-fast 2>/dev/null" exit trap "sudo rm -f /usr/bin/apt-fast 2>/dev/null" exit
fi fi
sudo mkdir -p /opt/hostedtoolcache >/dev/null 2>&1 || true
install_packages apt-transport-https ca-certificates curl file make jq unzip autoconf automake gcc g++ gnupg install_packages apt-transport-https ca-certificates curl file make jq unzip autoconf automake gcc g++ gnupg
} }
# Function to fix broken packages.
fix_broken_packages() {
sudo apt --fix-broken install >/dev/null 2>&1
}
# Function to install a package # Function to install a package
install_packages() { install_packages() {
packages=("$@") packages=("$@")
$apt_install "${packages[@]}" >/dev/null 2>&1 || (update_lists && $apt_install "${packages[@]}" >/dev/null 2>&1) if ! [ -e /etc/dpkg/dpkg.cfg.d/force-confnew ]; then
echo "force-confnew" | sudo tee /etc/dpkg/dpkg.cfg.d/force-confnew >/dev/null 2>&1
trap "sudo rm -f /etc/dpkg/dpkg.cfg.d/force-confnew 2>/dev/null" exit
fi
$apt_install "${packages[@]}" >/dev/null 2>&1 || (update_lists && fix_broken_packages && $apt_install "${packages[@]}" >/dev/null 2>&1)
} }
# Function to disable an extension. # Function to disable an extension.
@ -29,8 +47,8 @@ disable_extension_helper() {
if [ "$disable_dependents" = "true" ]; then if [ "$disable_dependents" = "true" ]; then
disable_extension_dependents "$extension" disable_extension_dependents "$extension"
fi fi
sudo sed -Ei "/=(.*\/)?\"?$extension(.so)?$/d" "${ini_file[@]}" "$pecl_file" sudo sed -Ei "/=(.*\/)?\"?$extension(.so)?\"?$/d" "${ini_file[@]}" "$pecl_file"
sudo find "$ini_dir"/.. -name "*$extension.ini" -not -path "*phar.ini" -not -path "*pecl.ini" -not -path "*mods-available*" -delete >/dev/null 2>&1 || true sudo find "$ini_dir"/.. -name "*-$extension.ini" -not -path "*phar.ini" -not -path "*pecl.ini" -not -path "*mods-available*" -delete >/dev/null 2>&1 || true
sudo rm -f /tmp/php"$version"_extensions sudo rm -f /tmp/php"$version"_extensions
mkdir -p /tmp/extdisabled/"$version" mkdir -p /tmp/extdisabled/"$version"
echo '' | sudo tee /tmp/extdisabled/"$version"/"$extension" >/dev/null 2>&1 echo '' | sudo tee /tmp/extdisabled/"$version"/"$extension" >/dev/null 2>&1
@ -75,9 +93,10 @@ check_package() {
# Helper function to add an extension. # Helper function to add an extension.
add_extension_helper() { add_extension_helper() {
local extension=$1 local extension=$1
package=php"$version"-"$extension" packages=(php"$version"-"$extension")
add_ppa ondrej/php >/dev/null 2>&1 || update_ppa ondrej/php 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" add_extension_log "$extension" "Installed and enabled"
sudo chmod 777 "${ini_file[@]}" sudo chmod 777 "${ini_file[@]}"
} }
@ -88,14 +107,14 @@ add_devtools() {
if ! command -v "$tool$version" >/dev/null; then if ! command -v "$tool$version" >/dev/null; then
install_packages "php$version-dev" install_packages "php$version-dev"
fi fi
add_extension xml extension >/dev/null 2>&1
switch_version "phpize" "php-config" switch_version "phpize" "php-config"
add_extension xml extension >/dev/null 2>&1
add_log "${tick:?}" "$tool" "Added $tool $semver" add_log "${tick:?}" "$tool" "Added $tool $semver"
} }
# Function to setup the nightly build from shivammathur/php-builder # Function to setup PHP from the shivammathur/php-builder builds.
setup_nightly() { setup_php_builder() {
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. # Function to setup PHP 5.3, PHP 5.4 and PHP 5.5.
@ -103,6 +122,11 @@ setup_old_versions() {
run_script "php5-ubuntu" "$version" run_script "php5-ubuntu" "$version"
} }
# Function to setup PHP from the cached builds.
setup_cached_versions() {
run_script "php-ubuntu" "$version" "${debug:?}" "${ts:?}"
}
# Function to add PECL. # Function to add PECL.
add_pecl() { add_pecl() {
add_devtools phpize >/dev/null 2>&1 add_devtools phpize >/dev/null 2>&1
@ -133,16 +157,19 @@ switch_version() {
wait "${to_wait[@]}" 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 # Function to install packaged PHP
add_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
add_ppa ondrej/php >/dev/null 2>&1 || update_ppa ondrej/php IFS=' ' read -r -a packages <<<"$(get_php_packages)"
IFS=' ' read -r -a packages <<<"$(sed "s/[^ ]*/php$version-&/g" "$src"/configs/php_packages | tr '\n' ' ')" install_packages "${packages[@]}"
install_packages "${packages[@]}"
add_pecl
else
run_script "php-ubuntu" "$version"
fi
} }
# Function to update PHP. # Function to update PHP.
@ -159,13 +186,18 @@ update_php() {
# Function to install PHP. # Function to install PHP.
add_php() { add_php() {
if [[ "$version" =~ ${nightly_versions:?} ]]; then if [ "${runner:?}" = "self-hosted" ] || [ "${use_package_cache:-true}" = "false" ]; then
setup_nightly if [[ "$version" =~ ${nightly_versions:?} || "$ts" = "zts" ]]; then
setup_php_builder
else
add_packaged_php
switch_version >/dev/null 2>&1
add_pecl
fi
elif [[ "$version" =~ ${old_versions:?} ]]; then elif [[ "$version" =~ ${old_versions:?} ]]; then
setup_old_versions setup_old_versions
else else
add_packaged_php setup_cached_versions
switch_version >/dev/null 2>&1
fi fi
status="Installed" status="Installed"
} }
@ -215,6 +247,7 @@ setup_php() {
step_log "Setup PHP" step_log "Setup PHP"
sudo mkdir -m 777 -p /var/run /run/php sudo mkdir -m 777 -p /var/run /run/php
php_config="$(command -v php-config)" php_config="$(command -v php-config)"
check_pre_installed
if [[ -z "$php_config" ]] || [ "$(php_semver | cut -c 1-3)" != "$version" ]; then if [[ -z "$php_config" ]] || [ "$(php_semver | cut -c 1-3)" != "$version" ]; then
if [ ! -e "/usr/bin/php$version" ] || [ ! -e "/usr/bin/php-config$version" ]; then if [ ! -e "/usr/bin/php$version" ] || [ ! -e "/usr/bin/php-config$version" ]; then
add_php >/dev/null 2>&1 add_php >/dev/null 2>&1
@ -258,7 +291,7 @@ setup_php() {
} }
# Variables # Variables
version=${1:-'8.1'} version=${1:-'8.4'}
ini=${2:-'production'} ini=${2:-'production'}
src=${0%/*}/.. src=${0%/*}/..
debconf_fix="DEBIAN_FRONTEND=noninteractive" debconf_fix="DEBIAN_FRONTEND=noninteractive"
@ -266,6 +299,7 @@ apt_install="sudo $debconf_fix apt-fast install -y --no-install-recommends"
scripts="$src"/scripts scripts="$src"/scripts
add_sudo >/dev/null 2>&1 add_sudo >/dev/null 2>&1
link_apt_fast >/dev/null 2>&1
. /etc/os-release . /etc/os-release
# shellcheck source=. # shellcheck source=.

View File

@ -1,7 +1,8 @@
# Variables # Variables
$composer_bin = "$env:APPDATA\Composer\vendor\bin" $composer_home = "$env:APPDATA\Composer"
$composer_json = "$env:APPDATA\Composer\composer.json" $composer_bin = "$composer_home\vendor\bin"
$composer_lock = "$env:APPDATA\Composer\composer.lock" $composer_json = "$composer_home\composer.json"
$composer_lock = "$composer_home\composer.lock"
# Function to configure composer. # Function to configure composer.
Function Edit-ComposerConfig() { Function Edit-ComposerConfig() {
@ -16,16 +17,51 @@ Function Edit-ComposerConfig() {
php -r "try {`$p=new Phar('$tool_path.phar', 0);exit(0);} catch(Exception `$e) {exit(1);}" php -r "try {`$p=new Phar('$tool_path.phar', 0);exit(0);} catch(Exception `$e) {exit(1);}"
if ($? -eq $False) { if ($? -eq $False) {
Add-Log "$cross" "composer" "Could not download composer" Add-Log "$cross" "composer" "Could not download composer"
exit 1; Write-Error "Could not download composer" -ErrorAction Stop
} }
New-Item -ItemType Directory -Path $composer_bin -Force > $null 2>&1 New-Item -ItemType Directory -Path $composer_bin -Force > $null 2>&1
if (-not(Test-Path $composer_json)) { if (-not(Test-Path $composer_json)) {
Set-Content -Path $composer_json -Value "{}" Set-Content -Path $composer_json -Value "{}"
} }
Add-EnvPATH $src\configs\composer.env Set-ComposerEnv
Add-Path $composer_bin Add-Path $composer_bin
if (Test-Path env:COMPOSER_TOKEN) { Set-ComposerAuth
Add-Env COMPOSER_AUTH ('{"github-oauth": {"github.com": "' + $env:COMPOSER_TOKEN + '"}}') }
# 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 ',') + '}')
}
}
# Function to set composer environment variables.
Function Set-ComposerEnv() {
if ($env:COMPOSER_PROCESS_TIMEOUT) {
(Get-Content $src\configs\composer.env -Raw) -replace '(?m)^COMPOSER_PROCESS_TIMEOUT=.*$', "COMPOSER_PROCESS_TIMEOUT=$env:COMPOSER_PROCESS_TIMEOUT" | Set-Content $src\configs\composer.env
}
Add-EnvPATH $src\configs\composer.env
if($env:COMPOSER_ALLOW_PLUGINS) {
$env:COMPOSER_ALLOW_PLUGINS -split '\s*,\s*' | Where-Object { $_ } | ForEach-Object {
& composer global config --no-plugins "allow-plugins.$_" true > $null 2>&1
}
} }
} }
@ -34,10 +70,10 @@ Function Get-ToolVersion() {
Param ( Param (
[Parameter(Position = 0, Mandatory = $true)] [Parameter(Position = 0, Mandatory = $true)]
$tool, $tool,
[Parameter(Position = 1, Mandatory = $true)] [Parameter(Position = 1, Mandatory = $false)]
$param $param
) )
$alp = "[a-zA-Z0-9]" $alp = "[a-zA-Z0-9\.]"
$version_regex = "[0-9]+((\.{1}$alp+)+)(\.{0})(-$alp+){0,1}" $version_regex = "[0-9]+((\.{1}$alp+)+)(\.{0})(-$alp+){0,1}"
if($tool -eq 'composer') { if($tool -eq 'composer') {
$composer_branch_alias = Select-String -Pattern "const\sBRANCH_ALIAS_VERSION" -Path $bin_dir\composer -Raw | Select-String -Pattern $version_regex | ForEach-Object { $_.matches.Value } $composer_branch_alias = Select-String -Pattern "const\sBRANCH_ALIAS_VERSION" -Path $bin_dir\composer -Raw | Select-String -Pattern $version_regex | ForEach-Object { $_.matches.Value }
@ -49,7 +85,9 @@ Function Get-ToolVersion() {
Set-Variable -Name 'composer_version' -Value $composer_version -Scope Global Set-Variable -Name 'composer_version' -Value $composer_version -Scope Global
return "$composer_version" return "$composer_version"
} }
return . $tool $param 2> $null | ForEach-Object { $_ -replace "composer $version_regex", '' } | Select-String -Pattern $version_regex | Select-Object -First 1 | ForEach-Object { $_.matches.Value } if($null -ne $param) {
return . $tool $param 2> $null | ForEach-Object { $_ -replace "composer $version_regex", '' } | Select-String -Pattern $version_regex | Select-Object -First 1 | ForEach-Object { $_.matches.Value }
}
} }
# Helper function to configure tools. # Helper function to configure tools.
@ -60,13 +98,22 @@ Function Add-ToolsHelper() {
$tool $tool
) )
$extensions = @(); $extensions = @();
if($tool -eq "codeception") { if($tool -eq "box") {
$extensions += @('iconv', 'mbstring', 'phar', 'sodium')
} elseif($tool -eq "codeception") {
$extensions += @('json', 'mbstring') $extensions += @('json', 'mbstring')
Copy-Item $env:codeception_bin\codecept.bat -Destination $env:codeception_bin\codeception.bat Copy-Item $env:codeception_bin\codecept.bat -Destination $env:codeception_bin\codeception.bat
} elseif($tool -eq "composer") { } elseif($tool -eq "composer") {
Edit-ComposerConfig $bin_dir\$tool Edit-ComposerConfig $bin_dir\$tool
} elseif($tool -eq "cs2pr") { } elseif($tool -eq "cs2pr") {
(Get-Content $bin_dir/cs2pr).replace('exit(9)', 'exit(0)') | Set-Content $bin_dir/cs2pr (Get-Content $bin_dir/cs2pr).replace('exit(9)', 'exit(0)') | Set-Content $bin_dir/cs2pr
} elseif($tool -eq "deployer") {
if(Test-Path $composer_bin\deployer.phar.bat) {
Copy-Item $composer_bin\deployer.phar.bat -Destination $composer_bin\dep.bat
}
if(Test-Path $composer_bin\dep.bat) {
Copy-Item $composer_bin\dep.bat -Destination $composer_bin\deployer.bat
}
} elseif($tool -eq "phan") { } elseif($tool -eq "phan") {
$extensions += @('fileinfo', 'ast') $extensions += @('fileinfo', 'ast')
} elseif($tool -eq "phinx") { } elseif($tool -eq "phinx") {
@ -105,8 +152,7 @@ Function Add-Tool() {
[Parameter(Position = 1, Mandatory = $true)] [Parameter(Position = 1, Mandatory = $true)]
[ValidateNotNull()] [ValidateNotNull()]
$tool, $tool,
[Parameter(Position = 2, Mandatory = $true)] [Parameter(Position = 2, Mandatory = $false)]
[ValidateNotNull()]
$ver_param $ver_param
) )
if (Test-Path $bin_dir\$tool) { if (Test-Path $bin_dir\$tool) {
@ -122,7 +168,7 @@ Function Add-Tool() {
} catch { } catch {
if($url -match '.*github.com.*releases.*latest.*') { if($url -match '.*github.com.*releases.*latest.*') {
try { try {
$url = $url.replace("releases/latest/download", "releases/download/" + ([regex]::match((Invoke-WebRequest -Uri ($url.split('/release')[0] + "/releases")).Content, "([0-9]+\.[0-9]+\.[0-9]+)/" + ($url.Substring($url.LastIndexOf("/") + 1))).Groups[0].Value).split('/')[0]) $url = $url.replace("releases/latest/download", "releases/download/" + ([regex]::match((Get-File -Url ($url.split('/release')[0] + "/releases")).Content, "([0-9]+\.[0-9]+\.[0-9]+)/" + ($url.Substring($url.LastIndexOf("/") + 1))).Groups[0].Value).split('/')[0])
$status_code = (Invoke-WebRequest -Passthru -Uri $url -OutFile $tool_path).StatusCode $status_code = (Invoke-WebRequest -Passthru -Uri $url -OutFile $tool_path).StatusCode
} catch { } } catch { }
} }
@ -153,7 +199,7 @@ Function Add-Tool() {
} }
} }
Function Add-ComposertoolHelper() { Function Add-ComposerToolHelper() {
Param ( Param (
[Parameter(Position = 0, Mandatory = $true)] [Parameter(Position = 0, Mandatory = $true)]
[string] [string]
@ -171,10 +217,17 @@ Function Add-ComposertoolHelper() {
[string] [string]
$composer_args $composer_args
) )
$tool_version = $release.split(':')[1]
if($NULL -eq $tool_version) {
$tool_version = '*'
}
if($scope -eq 'global') { if($scope -eq 'global') {
if(Test-Path $composer_lock) { if(Test-Path $composer_lock) {
Remove-Item -Path $composer_lock -Force 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 composer global require $prefix$release $composer_args >$null 2>&1
return composer global show $prefix$tool 2>&1 | findstr '^versions' return composer global show $prefix$tool 2>&1 | findstr '^versions'
} else { } else {
@ -184,6 +237,10 @@ Function Add-ComposertoolHelper() {
$unix_scoped_dir = $scoped_dir.replace('\', '/') $unix_scoped_dir = $scoped_dir.replace('\', '/')
if(-not(Test-Path $scoped_dir)) { if(-not(Test-Path $scoped_dir)) {
New-Item -ItemType Directory -Force -Path $scoped_dir > $null 2>&1 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 composer require $prefix$release -d $unix_scoped_dir $composer_args >$null 2>&1
} }
[System.Environment]::SetEnvironmentVariable(($tool.replace('-', '_') + '_bin'), "$scoped_dir\vendor\bin") [System.Environment]::SetEnvironmentVariable(($tool.replace('-', '_') + '_bin'), "$scoped_dir\vendor\bin")
@ -193,7 +250,7 @@ Function Add-ComposertoolHelper() {
} }
# Function to setup a tool using composer. # Function to setup a tool using composer.
Function Add-Composertool() { Function Add-ComposerTool() {
Param ( Param (
[Parameter(Position = 0, Mandatory = $true)] [Parameter(Position = 0, Mandatory = $true)]
[ValidateNotNull()] [ValidateNotNull()]
@ -216,6 +273,7 @@ Function Add-Composertool() {
[string] [string]
$scope $scope
) )
$composer_args = ""
if($composer_version.split('.')[0] -ne "1") { if($composer_version.split('.')[0] -ne "1") {
$composer_args = "--ignore-platform-req=ext-*" $composer_args = "--ignore-platform-req=ext-*"
if($tool -match "prestissimo|composer-prefetcher") { if($tool -match "prestissimo|composer-prefetcher") {
@ -225,7 +283,7 @@ Function Add-Composertool() {
} }
} }
Enable-PhpExtension -Extension curl, mbstring, openssl -Path $php_dir Enable-PhpExtension -Extension curl, mbstring, openssl -Path $php_dir
$log = Add-ComposertoolHelper $tool $release $prefix $scope $composer_args $log = Add-ComposerToolHelper $tool $release $prefix $scope $composer_args
if(Test-Path $composer_bin\composer) { if(Test-Path $composer_bin\composer) {
Copy-Item -Path "$bin_dir\composer" -Destination "$composer_bin\composer" -Force Copy-Item -Path "$bin_dir\composer" -Destination "$composer_bin\composer" -Force
} }

View File

@ -1,5 +1,4 @@
# Variables # Variables
export tool_path_dir="/usr/local/bin"
export composer_home="$HOME/.composer" export composer_home="$HOME/.composer"
export composer_bin="$composer_home/vendor/bin" export composer_bin="$composer_home/vendor/bin"
export composer_json="$composer_home/composer.json" export composer_json="$composer_home/composer.json"
@ -9,7 +8,7 @@ export composer_lock="$composer_home/composer.lock"
get_tool_version() { get_tool_version() {
tool=$1 tool=$1
param=$2 param=$2
alp="[a-zA-Z0-9]" alp="[a-zA-Z0-9\.]"
version_regex="[0-9]+((\.{1}$alp+)+)(\.{0})(-$alp+){0,1}" version_regex="[0-9]+((\.{1}$alp+)+)(\.{0})(-$alp+){0,1}"
if [ "$tool" = "composer" ]; then if [ "$tool" = "composer" ]; then
composer_alias_version="$(grep -Ea "const\sBRANCH_ALIAS_VERSION" "$tool_path_dir/composer" | grep -Eo "$version_regex")" composer_alias_version="$(grep -Ea "const\sBRANCH_ALIAS_VERSION" "$tool_path_dir/composer" | grep -Eo "$version_regex")"
@ -19,7 +18,7 @@ get_tool_version() {
composer_version="$(grep -Ea "const\sVERSION" "$tool_path_dir/composer" | grep -Eo "$version_regex")" composer_version="$(grep -Ea "const\sVERSION" "$tool_path_dir/composer" | grep -Eo "$version_regex")"
fi fi
echo "$composer_version" | sudo tee /tmp/composer_version echo "$composer_version" | sudo tee /tmp/composer_version
else elif [ -n "$param" ]; then
$tool "$param" 2>/dev/null | sed -Ee "s/[Cc]omposer(.)?$version_regex//g" | grep -Eo "$version_regex" | head -n 1 $tool "$param" 2>/dev/null | sed -Ee "s/[Cc]omposer(.)?$version_regex//g" | grep -Eo "$version_regex" | head -n 1
fi fi
} }
@ -42,10 +41,44 @@ configure_composer() {
echo '{}' | tee "$composer_json" >/dev/null echo '{}' | tee "$composer_json" >/dev/null
chmod 644 "$composer_json" chmod 644 "$composer_json"
fi fi
add_env_path "${src:?}"/configs/composer.env set_composer_env
add_path "$composer_bin" add_path "$composer_bin"
if [ -n "$COMPOSER_TOKEN" ]; then set_composer_auth
add_env COMPOSER_AUTH '{"github-oauth": {"github.com": "'"$COMPOSER_TOKEN"'"}}' }
# 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
}
# Function to set composer environment variables.
set_composer_env() {
composer_env="${src:?}"/configs/composer.env
if [ -n "$COMPOSER_PROCESS_TIMEOUT" ]; then
sed_arg="s/COMPOSER_PROCESS_TIMEOUT.*/COMPOSER_PROCESS_TIMEOUT=$COMPOSER_PROCESS_TIMEOUT/"
sed -i "$sed_arg" "$composer_env" 2>/dev/null || sed -i '' "$sed_arg" "$composer_env"
fi
add_env_path "$composer_env"
if [ -n "$COMPOSER_ALLOW_PLUGINS" ]; then
echo "$COMPOSER_ALLOW_PLUGINS" | tr ',' '\n' | sed 's/^[[:space:]]*//;s/[[:space:]]*$//' | grep -v '^$' | while IFS= read -r plugin; do
composer global config --no-plugins "allow-plugins.$plugin" true >/dev/null 2>&1
done
fi fi
} }
@ -53,7 +86,11 @@ configure_composer() {
add_tools_helper() { add_tools_helper() {
tool=$1 tool=$1
extensions=() extensions=()
if [ "$tool" = "codeception" ]; then if [ "$tool" = "blackfire-player" ]; then
extensions+=(uuid)
elif [ "$tool" = "box" ]; then
extensions+=(iconv mbstring phar sodium)
elif [ "$tool" = "codeception" ]; then
extensions+=(json mbstring) extensions+=(json mbstring)
sudo ln -s "$scoped_dir"/vendor/bin/codecept "$scoped_dir"/vendor/bin/codeception sudo ln -s "$scoped_dir"/vendor/bin/codecept "$scoped_dir"/vendor/bin/codeception
elif [ "$tool" = "composer" ]; then elif [ "$tool" = "composer" ]; then
@ -61,6 +98,13 @@ add_tools_helper() {
elif [ "$tool" = "cs2pr" ]; then elif [ "$tool" = "cs2pr" ]; then
sudo sed -i 's/\r$//; s/exit(9)/exit(0)/' "$tool_path" 2>/dev/null || sudo sed -i 's/\r$//; s/exit(9)/exit(0)/' "$tool_path" 2>/dev/null ||
sudo sed -i '' 's/\r$//; s/exit(9)/exit(0)/' "$tool_path" sudo sed -i '' 's/\r$//; s/exit(9)/exit(0)/' "$tool_path"
elif [ "$tool" = "deployer" ]; then
if [ -e "$composer_bin"/deployer.phar ]; then
sudo ln -s "$composer_bin"/deployer.phar "$composer_bin"/dep
fi
if [ -e "$composer_bin"/dep ]; then
sudo ln -s "$composer_bin"/dep "$composer_bin"/deployer
fi
elif [ "$tool" = "phan" ]; then elif [ "$tool" = "phan" ]; then
extensions+=(fileinfo ast) extensions+=(fileinfo ast)
elif [ "$tool" = "phinx" ]; then elif [ "$tool" = "phinx" ]; then
@ -102,6 +146,9 @@ add_tool() {
tool=$2 tool=$2
ver_param=$3 ver_param=$3
tool_path="$tool_path_dir/$tool" tool_path="$tool_path_dir/$tool"
if ! [ -d "$tool_path_dir" ]; then
sudo mkdir -p "$tool_path_dir"
fi
add_path "$tool_path_dir" add_path "$tool_path_dir"
if [ -e "$tool_path" ]; then if [ -e "$tool_path" ]; then
sudo cp -aL "$tool_path" /tmp/"$tool" sudo cp -aL "$tool_path" /tmp/"$tool"
@ -127,21 +174,29 @@ add_tool() {
} }
# Function to setup a tool using composer in a different scope. # Function to setup a tool using composer in a different scope.
add_composertool_helper() { add_composer_tool_helper() {
tool=$1 tool=$1
release=$2 release=$2
prefix=$3 prefix=$3
scope=$4 scope=$4
composer_args=$5 composer_args=$5
enable_extensions curl mbstring openssl enable_extensions curl mbstring openssl
tool_version=${release##*:}; [ "$tool_version" = "$tool" ] && tool_version="*"
if [ "$scope" = "global" ]; then if [ "$scope" = "global" ]; then
sudo rm -f "$composer_lock" >/dev/null 2>&1 || true 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 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 composer global show "$prefix$tool" 2>&1 | grep -E ^versions | sudo tee /tmp/composer.log >/dev/null 2>&1
else else
scoped_dir="$composer_bin/_tools/$tool-$(echo -n "$release" | shasum -a 256 | cut -d ' ' -f 1)" scoped_dir="$composer_bin/_tools/$tool-$(echo -n "$release" | shasum -a 256 | cut -d ' ' -f 1)"
if ! [ -d "$scoped_dir" ]; then if ! [ -d "$scoped_dir" ]; then
mkdir -p "$scoped_dir" 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 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 composer show "$prefix$tool" -d "$scoped_dir" 2>&1 | grep -E ^versions | sudo tee /tmp/composer.log >/dev/null 2>&1
fi fi
@ -150,11 +205,12 @@ add_composertool_helper() {
} }
# Function to setup a tool using composer. # Function to setup a tool using composer.
add_composertool() { add_composer_tool() {
tool=$1 tool=$1
release=$2 release=$2
prefix=$3 prefix=$3
scope=$4 scope=$4
composer_args=
composer_major_version=$(cut -d'.' -f 1 /tmp/composer_version) composer_major_version=$(cut -d'.' -f 1 /tmp/composer_version)
if [ "$composer_major_version" != "1" ]; then if [ "$composer_major_version" != "1" ]; then
composer_args="--ignore-platform-req=ext-*" composer_args="--ignore-platform-req=ext-*"
@ -164,7 +220,7 @@ add_composertool() {
return return
fi fi
fi fi
add_composertool_helper "$tool" "$release" "$prefix" "$scope" "$composer_args" add_composer_tool_helper "$tool" "$release" "$prefix" "$scope" "$composer_args"
tool_version=$(get_tool_version cat /tmp/composer.log) tool_version=$(get_tool_version cat /tmp/composer.log)
([ -s /tmp/composer.log ] && add_log "$tick" "$tool" "Added $tool $tool_version" ([ -s /tmp/composer.log ] && add_log "$tick" "$tool" "Added $tool $tool_version"
) || add_log "$cross" "$tool" "Could not setup $tool" ) || add_log "$cross" "$tool" "Could not setup $tool"

View File

@ -6,7 +6,7 @@ Function Add-Blackfire() {
} }
$cli_version = (Invoke-RestMethod https://blackfire.io/api/v1/releases).cli $cli_version = (Invoke-RestMethod https://blackfire.io/api/v1/releases).cli
$url = "https://packages.blackfire.io/binaries/blackfire/${cli_version}/blackfire-windows_${arch_name}.zip" $url = "https://packages.blackfire.io/binaries/blackfire/${cli_version}/blackfire-windows_${arch_name}.zip"
Invoke-WebRequest -Uri $url -OutFile $bin_dir\blackfire.zip >$null 2>&1 Get-File -Url $url -OutFile $bin_dir\blackfire.zip >$null 2>&1
Expand-Archive -Path $bin_dir\blackfire.zip -DestinationPath $bin_dir -Force >$null 2>&1 Expand-Archive -Path $bin_dir\blackfire.zip -DestinationPath $bin_dir -Force >$null 2>&1
Add-ToProfile $current_profile 'blackfire' "New-Alias blackfire $bin_dir\blackfire.exe" Add-ToProfile $current_profile 'blackfire' "New-Alias blackfire $bin_dir\blackfire.exe"
if ((Test-Path env:BLACKFIRE_SERVER_ID) -and (Test-Path env:BLACKFIRE_SERVER_TOKEN)) { if ((Test-Path env:BLACKFIRE_SERVER_ID) -and (Test-Path env:BLACKFIRE_SERVER_TOKEN)) {

84
src/scripts/tools/brew.sh Normal file
View File

@ -0,0 +1,84 @@
# 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_opts=(-f)
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_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_opts
export brew_path
export brew_path_dir
export brew_prefix
export brew_repo
export tap_dir
export core_repo
}

View File

@ -7,9 +7,15 @@ Function Add-Msys2() {
return $msys_location return $msys_location
} }
Function Add-Grpc_php_plugin() { Function Add-GrpcPhpPlugin() {
$msys_location = Add-Msys2 $msys_location = Add-Msys2
$logs = . $msys_location\usr\bin\bash -l -c "pacman -S --noconfirm mingw-w64-x86_64-grpc" >$null 2>&1 $arch = arch
if($arch -eq 'arm64' -or $arch -eq 'aarch64') {
$grpc_package = 'mingw-w64-clang-aarch64-grpc'
} else {
$grpc_package = 'mingw-w64-x86_64-grpc'
}
$logs = . $msys_location\usr\bin\bash -l -c "pacman -S --noconfirm $grpc_package" >$null 2>&1
$grpc_version = Get-ToolVersion 'Write-Output' "$logs" $grpc_version = Get-ToolVersion 'Write-Output' "$logs"
Add-Path $msys_location\mingw64\bin Add-Path $msys_location\mingw64\bin
Set-Output grpc_php_plugin_path "$msys_location\mingw64\bin\grpc_php_plugin.exe" Set-Output grpc_php_plugin_path "$msys_location\mingw64\bin\grpc_php_plugin.exe"

View File

@ -22,8 +22,12 @@ get_grpc_tag() {
} }
add_grpc_php_plugin_brew() { add_grpc_php_plugin_brew() {
. "${0%/*}"/tools/brew.sh
configure_brew
[ -e /usr/local/bin/protoc ] && sudo mv /usr/local/bin/protoc /tmp/protoc && sudo mv /usr/local/include/google /tmp
brew install grpc brew install grpc
brew link --force --overwrite grpc >/dev/null 2>&1 brew link --force --overwrite grpc >/dev/null 2>&1
[ -e /tmp/protoc ] && sudo mv /tmp/protoc /usr/local/bin/protoc && sudo mv /tmp/google /usr/local/include/
grpc_tag="v$(brew info grpc | grep "grpc:" | grep -Eo "[0-9]+\.[0-9]+\.[0-9]+")" grpc_tag="v$(brew info grpc | grep "grpc:" | grep -Eo "[0-9]+\.[0-9]+\.[0-9]+")"
license_path="$(brew --prefix grpc)/LICENSE" license_path="$(brew --prefix grpc)/LICENSE"
} }

View File

@ -31,10 +31,6 @@ set_base_version() {
else else
set_base_version_codename set_base_version_codename
set_base_version_id set_base_version_id
# Remove once PPAs start having bookworm releases
[ "$VERSION_CODENAME" = 'bookworm' ] && VERSION_CODENAME="bullseye"
printf "ID=%s\nVERSION_ID=%s\nVERSION_CODENAME=%s\n" "$ID" "$VERSION_ID" "$VERSION_CODENAME" | tee /tmp/os-release >/dev/null 2>&1 printf "ID=%s\nVERSION_ID=%s\nVERSION_CODENAME=%s\n" "$ID" "$VERSION_ID" "$VERSION_CODENAME" | tee /tmp/os-release >/dev/null 2>&1
fi fi
} }
@ -58,8 +54,8 @@ update_lists() {
status_file=/tmp/os_lists status_file=/tmp/os_lists
if [[ -n "$ppa" && -n "$ppa_search" ]]; then if [[ -n "$ppa" && -n "$ppa_search" ]]; then
list="$list_dir"/"$(basename "$(grep -lr "$ppa_search" "$list_dir")")" list="$list_dir"/"$(basename "$(grep -lr "$ppa_search" "$list_dir")")"
status_file=/tmp/"${ppa/\//_}" status_file=/tmp/"$(echo -n "$ppa_search" | shasum -a 256 | cut -d ' ' -f 1)"
elif grep -Eq '^deb ' "$list_file"; then elif [ -e "$list_file" ] && grep -Eq '^deb |^Types deb' "$list_file"; then
list="$list_file" list="$list_file"
fi fi
if [ ! -e "$status_file" ]; then if [ ! -e "$status_file" ]; then
@ -71,7 +67,7 @@ update_lists() {
# Function to get fingerprint from an Ubuntu PPA. # Function to get fingerprint from an Ubuntu PPA.
ubuntu_fingerprint() { ubuntu_fingerprint() {
ppa=$1 ppa=$1
get -s -n "" "$lp_api"/~"${ppa%/*}"/+archive/"${ppa##*/}" | jq -r '.signing_key_fingerprint' get -s -n "" "${lp_api[@]/%//~${ppa%/*}/+archive/${ppa##*/}}" | jq -r '.signing_key_fingerprint'
} }
# Function to get fingerprint from a Debian PPA. # Function to get fingerprint from a Debian PPA.
@ -92,7 +88,7 @@ add_key() {
key_source=$4 key_source=$4
key_file=$5 key_file=$5
key_urls=("$key_source") key_urls=("$key_source")
if [[ "$key_source" =~ launchpad.net|debian.org|setup-php.com ]]; then if [[ "$key_source" =~ launchpadcontent.net|debian.org ]]; then
fingerprint="$("${ID}"_fingerprint "$ppa" "$ppa_url" "$package_dist")" fingerprint="$("${ID}"_fingerprint "$ppa" "$ppa_url" "$package_dist")"
sks_params="op=get&options=mr&exact=on&search=0x$fingerprint" sks_params="op=get&options=mr&exact=on&search=0x$fingerprint"
key_urls=("${sks[@]/%/\/pks\/lookup\?"$sks_params"}") key_urls=("${sks[@]/%/\/pks\/lookup\?"$sks_params"}")
@ -121,11 +117,11 @@ check_lists() {
# Function to add a sources list. # Function to add a sources list.
add_list() { add_list() {
ppa=${1-ondrej/php} ppa=${1-ondrej/php}
ppa_url=${2:-"$lp_ppa/$ppa/ubuntu"} ppa_url=${2:-"$lpc_ppa/$ppa/ubuntu"}
key_source=${3:-"$ppa_url"} key_source=${3:-"$ppa_url"}
package_dist=${4:-"$VERSION_CODENAME"} package_dist=${4:-"$VERSION_CODENAME"}
branches=${5:-main} branches=${5:-main}
ppa_search="deb .*$ppa_url $package_dist .*$branches" ppa_search="deb .*$ppa_url $package_dist .*$branches$"
if check_lists "$ppa" "$ppa_search"; then if check_lists "$ppa" "$ppa_search"; then
echo "Repository $ppa already exists"; echo "Repository $ppa already exists";
return 1; return 1;
@ -133,28 +129,67 @@ add_list() {
arch=$(dpkg --print-architecture) arch=$(dpkg --print-architecture)
[ -e "$key_source" ] && key_file=$key_source || key_file="$key_dir"/"${ppa/\//-}"-keyring.gpg [ -e "$key_source" ] && key_file=$key_source || key_file="$key_dir"/"${ppa/\//-}"-keyring.gpg
add_key "$ppa" "$ppa_url" "$package_dist" "$key_source" "$key_file" add_key "$ppa" "$ppa_url" "$package_dist" "$key_source" "$key_file"
echo "deb [arch=$arch signed-by=$key_file] $ppa_url $package_dist $branches" | sudo tee -a "$list_dir"/"${ppa/\//-}".list >/dev/null 2>&1 sudo rm -rf "$list_dir"/"${ppa/\//-}".list || true
echo "deb [arch=$arch signed-by=$key_file] $ppa_url $package_dist $branches" | sudo tee -a "$list_dir"/"${ppa%%/*}"-"$ID"-"${ppa#*/}"-"$package_dist".list >/dev/null 2>&1
update_lists "$ppa" "$ppa_search" update_lists "$ppa" "$ppa_search"
. /etc/os-release . /etc/os-release
fi fi
return 0; return 0;
} }
# Function to check if a PPA exists
check_ppa() {
ppa=$1
ppa_url=${2:-"$lpc_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. # Function to remove a PPA.
remove_list() { remove_list() {
ppa=${1-ondrej/php} ppa=${1-ondrej/php}
ppa_url=${2:-"$lp_ppa/$ppa/ubuntu"} [ -n "$2" ] && ppa_urls=("$2") || ppa_urls=("$lp_ppa/$ppa/ubuntu" "$lpc_ppa/$ppa/ubuntu")
grep -lr "$ppa_url" "$list_dir" | xargs -n1 sudo rm -f for ppa_url in "${ppa_urls[@]}"; do
grep -lr "$ppa_url" "$list_dir" | xargs -n1 sudo rm -f
done
sudo rm -f "$key_dir"/"${ppa/\//-}"-keyring || true sudo rm -f "$key_dir"/"${ppa/\//-}"-keyring || true
} }
# Function to check if ubuntu ppa is up
is_ubuntu_ppa_up() {
ppa=${1:-ondrej/php}
curl -s --connect-timeout 5 --max-time 5 --head --fail "$lpc_ppa/$ppa/ubuntu/dists/$VERSION_CODENAME/Release" > /dev/null
}
# Function to add the PPA mirror.
add_ppa_sp_mirror() {
ppa=$1
ppa_name="$(basename "$ppa")"
remove_list "$ppa" || true
[ "${debug:?}" = "debug" ] && add_list sp/"$ppa_name" "$sp/$ppa/ubuntu" "$sp/$ppa/ubuntu/key.gpg" "$VERSION_CODENAME" "main/debug"
add_list sp/"$ppa_name" "$sp/$ppa/ubuntu" "$sp/$ppa/ubuntu/key.gpg"
}
# Function to add a PPA. # Function to add a PPA.
add_ppa() { add_ppa() {
set_base_version set_base_version
ppa=${1:-ondrej/php} ppa=${1:-ondrej/php}
if [[ "$ID" = "ubuntu" || "$ID_LIKE" =~ ubuntu ]] && [[ "$ppa" =~ "ondrej/" ]]; then if [[ "$ID" = "ubuntu" || "$ID_LIKE" =~ ubuntu ]] && [[ "$ppa" =~ "ondrej/" ]]; then
add_list "$ppa" if is_ubuntu_ppa_up "$ppa" ; then
[ "${runner:?}" = "self-hosted" ] && find "$list_dir" -type f -name 'sp*' -exec grep -qF "$sp" {} \; -delete
[ "${debug:?}" = "debug" ] && add_list "$ppa" "$lpc_ppa/$ppa/ubuntu" "$lpc_ppa/$ppa/ubuntu" "$VERSION_CODENAME" "main/debug"
add_list "$ppa"
else
add_ppa_sp_mirror "$ppa"
fi
elif [[ "$ID" = "debian" || "$ID_LIKE" =~ debian ]] && [[ "$ppa" =~ "ondrej/" ]]; then 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 add_list "$ppa" "$sury"/"${ppa##*/}"/ "$sury"/"${ppa##*/}"/apt.gpg
else else
add_list "$ppa" add_list "$ppa"
@ -168,7 +203,7 @@ add_ppa() {
update_ppa() { update_ppa() {
set_base_version set_base_version
ppa=${1:-ondrej/php} ppa=${1:-ondrej/php}
ppa_url=${2:-"$lp_ppa/$ppa/ubuntu"} ppa_url=${2:-"$lpc_ppa/$ppa/ubuntu"}
package_dist=${4:-"$VERSION_CODENAME"} package_dist=${4:-"$VERSION_CODENAME"}
branches=${5:-main} branches=${5:-main}
ppa_search="deb .*$ppa_url $package_dist .*$branches" ppa_search="deb .*$ppa_url $package_dist .*$branches"
@ -177,14 +212,20 @@ update_ppa() {
} }
# Variables # Variables
list_file='/etc/apt/sources.list' list_dir='/etc/apt/sources.list.d'
list_dir="$list_file.d" list_file="/etc/apt/sources.list.d/$ID.sources"
[ -e "$list_file" ] || list_file='/etc/apt/sources.list'
upstream_lsb='/etc/upstream-release/lsb-release' upstream_lsb='/etc/upstream-release/lsb-release'
lp_api='https://api.launchpad.net/1.0' lp_api=(
'https://api.launchpad.net/1.0'
'https://api.launchpad.net/devel'
)
lp_ppa='http://ppa.launchpad.net' lp_ppa='http://ppa.launchpad.net'
lpc_ppa='https://ppa.launchpadcontent.net'
key_dir='/usr/share/keyrings' key_dir='/usr/share/keyrings'
dist_info_dir='/usr/share/distro-info' dist_info_dir='/usr/share/distro-info'
sury='https://packages.sury.org' sury='https://packages.sury.org'
sp='https://setup-php.com'
sks=( sks=(
'https://keyserver.ubuntu.com' 'https://keyserver.ubuntu.com'
'https://pgp.mit.edu' 'https://pgp.mit.edu'

View File

@ -1,15 +1,17 @@
Function Get-ProtobufTag() { Function Get-ProtobufTag() {
$releases = 'https://github.com/protocolbuffers/protobuf/releases'
if("$protobuf_tag" -eq "latest") { 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 = (Get-File -Url $releases/latest).BaseResponse.RequestMessage.RequestUri.Segments[-1]
} else { } else {
try { try {
[net.httpWebRequest] $request = [net.webRequest]::create("https://github.com/protocolbuffers/protobuf/releases/tag/v$protobuf_tag") $protobuf_tag = $protobuf_tag -replace '^v', ''
$req.Method = "HEAD" [net.httpWebRequest] $request = [net.webRequest]::create("$releases/tag/v$protobuf_tag")
$request.Method = "HEAD"
[net.httpWebResponse] $response = $request.getResponse() [net.httpWebResponse] $response = $request.getResponse()
$response.Close() $response.Close()
$protobuf_tag = "v$protobuf_tag" $protobuf_tag = "v$protobuf_tag"
} catch { } 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 = (Get-File -Url $releases/latest).BaseResponse.RequestMessage.RequestUri.Segments[-1]
} }
} }
return $protobuf_tag return $protobuf_tag
@ -18,7 +20,7 @@ Function Get-ProtobufTag() {
Function Add-Protoc() { Function Add-Protoc() {
param( param(
[Parameter(Mandatory = $true, Position = 0, HelpMessage = 'The PHP version to be installed')] [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 [string] $protobuf_tag
) )
$protobuf_tag = Get-ProtobufTag $protobuf_tag = Get-ProtobufTag
@ -27,7 +29,7 @@ Function Add-Protoc() {
$arch_num = '32' $arch_num = '32'
} }
$url = "https://github.com/protocolbuffers/protobuf/releases/download/$protobuf_tag/protoc-$($protobuf_tag -replace 'v', '')-win$arch_num.zip" $url = "https://github.com/protocolbuffers/protobuf/releases/download/$protobuf_tag/protoc-$($protobuf_tag -replace 'v', '')-win$arch_num.zip"
Invoke-WebRequest -Uri $url -OutFile $bin_dir\protoc.zip >$null 2>&1 Get-File -Url $url -OutFile $bin_dir\protoc.zip >$null 2>&1
Expand-Archive -Path $bin_dir\protoc.zip -DestinationPath $bin_dir\protoc -Force >$null 2>&1 Expand-Archive -Path $bin_dir\protoc.zip -DestinationPath $bin_dir\protoc -Force >$null 2>&1
Move-Item -Path $bin_dir\protoc\bin\protoc.exe -Destination $bin_dir\protoc.exe Move-Item -Path $bin_dir\protoc\bin\protoc.exe -Destination $bin_dir\protoc.exe
Add-ToProfile $current_profile 'protoc' "New-Alias protoc $bin_dir\protoc.exe" Add-ToProfile $current_profile 'protoc' "New-Alias protoc $bin_dir\protoc.exe"

Some files were not shown because too many files have changed in this diff Show More