mirror of
https://github.com/shivammathur/setup-php.git
synced 2025-07-04 14:13:16 +07:00
Compare commits
385 Commits
Author | SHA1 | Date | |
---|---|---|---|
1fa3ba1b16 | |||
d8d1da5d6d | |||
094bc8ae17 | |||
48aac87d46 | |||
31971c78cd | |||
13760f5b16 | |||
c644f654ce | |||
9adda12e86 | |||
6db8a6c378 | |||
a34eeedd37 | |||
35bc046b26 | |||
64e9bb0e79 | |||
19a01870e7 | |||
c4560dd084 | |||
0313f578ce | |||
d068c17d9e | |||
8eebeae48a | |||
da9dadf09c | |||
e06e40278f | |||
6473b1c04c | |||
7694412cb0 | |||
e990e98a54 | |||
b2d037d560 | |||
4beeea41b4 | |||
8e80635955 | |||
c8837583fc | |||
bb36513e49 | |||
5402397d9f | |||
f6b4601c63 | |||
ed62711289 | |||
2cb9b82943 | |||
4f420be5bd | |||
cf40c1e950 | |||
91936faf85 | |||
ca319bd10e | |||
4d3cfaa653 | |||
c8b716540c | |||
1cecc2cc99 | |||
5137c78ee5 | |||
c37021df01 | |||
c6e99860cd | |||
05b4ac2afb | |||
91bd11146c | |||
8ace7bdc6e | |||
4bb4f1812c | |||
7bd9f10bef | |||
0b38e86c65 | |||
b717b2fcde | |||
216d501175 | |||
c2e811ce23 | |||
dbf50bf9e0 | |||
947009a717 | |||
ca910e5511 | |||
f31d416e6e | |||
36cb9fb0fc | |||
6a8a2abd3c | |||
c88f07696b | |||
0b33ef444f | |||
604ffba8e1 | |||
a3727c20a4 | |||
6a9b0017a4 | |||
3b2ce6cae6 | |||
c61b9256d1 | |||
09e08a3554 | |||
f31bef6a30 | |||
1a216636c5 | |||
7eec3d790d | |||
5afed16e5f | |||
14fa980966 | |||
39491a0fba | |||
c6b6dabbb9 | |||
e1a9afe11c | |||
6449431df2 | |||
60ff774608 | |||
dd591f1661 | |||
fefbd7a497 | |||
10f1a63300 | |||
a06325cfba | |||
e0b7f34ba7 | |||
e02a1810e6 | |||
55ab748aaa | |||
bb0acc6313 | |||
17fd1a694b | |||
454ef11759 | |||
e3396c6572 | |||
3beda962f3 | |||
1f97ce0215 | |||
00f360b99d | |||
9882bed066 | |||
e8855efe7c | |||
4067ce8b81 | |||
d5790807c8 | |||
ed61605069 | |||
d0e7f46ec4 | |||
ef477a1dd7 | |||
9149639a33 | |||
2fdb2200a0 | |||
15c43e89cd | |||
b0559f7f8e | |||
a41bc75590 | |||
6ebd1e5184 | |||
9ad81048ce | |||
8cfcbb030f | |||
254ecd5a66 | |||
0461bf14b2 | |||
7e5351f399 | |||
fe944a16b5 | |||
909090903e | |||
75a1b03f39 | |||
a47644812e | |||
23393c46d7 | |||
3c6827c2c3 | |||
de8537f42a | |||
ada1ce86b7 | |||
7c13389546 | |||
7627a79c01 | |||
39faaac1d3 | |||
b3152daa8d | |||
6db6ddbab2 | |||
c870bc9a3a | |||
f5f14c3aa3 | |||
e831babc61 | |||
c7736a605a | |||
a9a6d1986e | |||
c342ca379e | |||
cc316409b0 | |||
a8dafdc2b5 | |||
f8646352c6 | |||
3cbec713b8 | |||
4186db28f7 | |||
18f02c9c99 | |||
15b99e2a8d | |||
e9a7adef28 | |||
bceb2ef3d8 | |||
86e7315da6 | |||
0741f2b23a | |||
0c4c4d5441 | |||
abfbe6a46b | |||
62aa8428dd | |||
e6a3eb1258 | |||
0ce7328fd7 | |||
6e76d3f012 | |||
ac40fdb561 | |||
890ea4bca9 | |||
113fcc64e3 | |||
afefcaf556 | |||
df4388ca60 | |||
fa18c2b29f | |||
399ab79d14 | |||
9601a19811 | |||
60ff151fc1 | |||
121cb19a65 | |||
739ccacdc4 | |||
cff0bdeaa3 | |||
70d858dd49 | |||
3340d60d91 | |||
57c17e3349 | |||
356e1a5128 | |||
633920d001 | |||
406f3c410a | |||
17349dafc1 | |||
962f570776 | |||
f66ac5d5a6 | |||
3f466981fc | |||
fd62612e9e | |||
26791e8412 | |||
f42065d568 | |||
912f27c42c | |||
86e1ccdd8d | |||
36ec0200a6 | |||
1686147b24 | |||
ecc8611061 | |||
abefdb50ee | |||
2ea6ca5b36 | |||
a83d4379b1 | |||
fbc8407035 | |||
6972aed899 | |||
d2f58713aa | |||
068c794af7 | |||
1e119b6d1a | |||
77721f6637 | |||
d731e56579 | |||
e5b90e33c6 | |||
849315646a | |||
d891a81b7f | |||
5098017251 | |||
2da85f306f | |||
1f94ad201f | |||
862f206cd2 | |||
81964ae791 | |||
b7d1d9c9a9 | |||
c5e4d55c3b | |||
d74064b67a | |||
8862a73fdd | |||
7b44f7e007 | |||
ff5499165a | |||
b3cd6b4dab | |||
ce02569aea | |||
f1c04eb1eb | |||
77aeac1761 | |||
569522d50d | |||
ea8be20255 | |||
d6f700217a | |||
1015b3659d | |||
03359ef1ab | |||
fd9aae59b0 | |||
9af1e7006f | |||
5efdcae81a | |||
f0fb8731a5 | |||
5a15252e66 | |||
c0c6e403b6 | |||
d0677c93b9 | |||
466908db61 | |||
8dbd6b7684 | |||
5a40a5875d | |||
790a41a722 | |||
62c7ba2bee | |||
41797e3af9 | |||
c6150c6a2b | |||
19b09596c6 | |||
4ec398d39a | |||
6bbaac9c49 | |||
012f269570 | |||
09222f42ae | |||
403191b6b6 | |||
02cba443ad | |||
31fa0d7883 | |||
f9caa0457d | |||
248394635c | |||
a094f682be | |||
45213ad923 | |||
385e3b6e96 | |||
5453c1f4f0 | |||
787c534f64 | |||
d812e938ac | |||
7de94e6400 | |||
68fbd80105 | |||
02445f719d | |||
215b040f0d | |||
925ede2589 | |||
d1510a82d5 | |||
808e74aed5 | |||
f51d00d350 | |||
c8111b053c | |||
294f03454a | |||
5d27b8f90e | |||
87e62cbb7f | |||
2c29e8b9a1 | |||
04a9e3b562 | |||
4adaa73d25 | |||
234594684c | |||
3c0527bec1 | |||
c5d41cd3f1 | |||
601cabfd2a | |||
81c750c6d7 | |||
0661130e18 | |||
4244b92ac6 | |||
e9595da9ac | |||
b77ec78d01 | |||
96d8c1e901 | |||
8816b6ff48 | |||
9205a596c9 | |||
6fc20c9b7f | |||
eb07280d5c | |||
eaaab1cec3 | |||
853381d0bb | |||
1394617d60 | |||
093498a0a1 | |||
d2241010ef | |||
a0f02c17c0 | |||
bb5257e07d | |||
f687ff8f21 | |||
537c66b2ea | |||
073c2e666b | |||
465e63b28c | |||
b8f0b066dc | |||
9e663851ce | |||
ad196941ed | |||
f8e867a9ff | |||
8cb01730c7 | |||
ebba1db2c3 | |||
716331904e | |||
2ad63ddbd3 | |||
c4606c9269 | |||
7dcb43c768 | |||
691c5309aa | |||
84b222366a | |||
b98ed88402 | |||
0ca827ae3b | |||
16b0a25bf6 | |||
fa0af5c382 | |||
db36b200b1 | |||
7cfd76cc1b | |||
682b1f5e44 | |||
7b56e4491e | |||
acc1fdb337 | |||
e3286d1234 | |||
83019fade2 | |||
83b3d4a8f9 | |||
56273e234f | |||
48a00b4d3f | |||
f641885a8d | |||
9457ce6e2b | |||
a31f8b1a2b | |||
ffded4a3e8 | |||
9e6b9d7d70 | |||
7d45057bba | |||
c4fd8b0739 | |||
49088ede98 | |||
3543ed1ef8 | |||
9bd0fdbc18 | |||
c5d29cf8e3 | |||
c5e0997b44 | |||
ee084d3176 | |||
c256f0c9cb | |||
d84365cd03 | |||
3c52e818b1 | |||
188598ef9d | |||
f8b8d766d5 | |||
15a6402865 | |||
91bd6b26c2 | |||
9dae796baf | |||
6d9aef83a3 | |||
bd5a0d94b6 | |||
5405f14867 | |||
cb25b9c13a | |||
e63d25d41f | |||
2a7ae24c8e | |||
e68a74a71c | |||
67152eb712 | |||
83bdf158fa | |||
5e240ab99f | |||
0fae072f07 | |||
e0561697dc | |||
3aa0f17b55 | |||
8b218279a3 | |||
90b6355bf0 | |||
84f23853b7 | |||
a4001afbd6 | |||
cfbb105cb6 | |||
c549015370 | |||
9e22b87414 | |||
7961bc11b1 | |||
87f807365d | |||
25d9bbc737 | |||
d2f865c91a | |||
a13373a271 | |||
a764546381 | |||
380b68048b | |||
4dcf9cd2ab | |||
f3641e0c33 | |||
d35633ec7a | |||
7eea3d82f6 | |||
57ecdba082 | |||
db03758c66 | |||
82837572d4 | |||
8efcf46b31 | |||
4391cf8a4c | |||
87a69f94d9 | |||
c12fad850b | |||
47b8d68850 | |||
530929f741 | |||
a965723128 | |||
9845a63f5c | |||
4af7e96d03 | |||
13a3d9d0a9 | |||
9d042b2683 | |||
7a59874419 | |||
8dee767b82 | |||
5fc5a95363 | |||
8ba779d78e | |||
04376074d2 | |||
262202d43f | |||
f64dddeeb4 | |||
1d50c4a8cd | |||
d313593fee | |||
5753a00ef5 | |||
38731c6386 | |||
9f400a0dfd | |||
ba020e3463 | |||
c0d425d939 | |||
4752a51595 | |||
10608f5908 | |||
d01ec214f2 | |||
6158538131 |
@ -10,7 +10,7 @@
|
|||||||
"plugin:import/warnings",
|
"plugin:import/warnings",
|
||||||
"plugin:import/typescript",
|
"plugin:import/typescript",
|
||||||
"plugin:prettier/recommended",
|
"plugin:prettier/recommended",
|
||||||
"prettier/@typescript-eslint"
|
"prettier"
|
||||||
],
|
],
|
||||||
"plugins": ["@typescript-eslint", "jest"]
|
"plugins": ["@typescript-eslint", "jest"]
|
||||||
}
|
}
|
22
.github/CONTRIBUTING.md
vendored
22
.github/CONTRIBUTING.md
vendored
@ -8,7 +8,7 @@ Please note that this project is released with a [Contributor Code of Conduct](C
|
|||||||
|
|
||||||
* Fork the project.
|
* Fork the project.
|
||||||
* Make your bug fix or feature addition.
|
* Make your bug fix or feature addition.
|
||||||
* Add tests for it. This is important so we don't break it in a future version unintentionally.
|
* Add tests for it, so we don't break it in a future version unintentionally.
|
||||||
* If editing the scripts, create a demo integration test.
|
* If editing the scripts, create a demo integration test.
|
||||||
* Send a pull request to the develop branch with all the details.
|
* Send a pull request to the develop branch with all the details.
|
||||||
|
|
||||||
@ -18,13 +18,6 @@ Due to time constraints, you may not always get a quick response. Please do not
|
|||||||
|
|
||||||
## Coding Guidelines
|
## Coding Guidelines
|
||||||
|
|
||||||
This project comes with `.prettierrc.json` and `eslintrc.json` configuration files. Please run the following commands to format the code before committing it.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ npm run format
|
|
||||||
$ npm run lint
|
|
||||||
```
|
|
||||||
|
|
||||||
## Using setup-php from a Git checkout
|
## Using setup-php from a Git checkout
|
||||||
|
|
||||||
The following commands can be used to perform the initial checkout of setup-php:
|
The following commands can be used to perform the initial checkout of setup-php:
|
||||||
@ -41,6 +34,19 @@ Install setup-php dependencies using [npm](https://www.npmjs.com/):
|
|||||||
$ npm install
|
$ npm install
|
||||||
```
|
```
|
||||||
|
|
||||||
|
If you are using `Windows` configure `git` to handle line endings.
|
||||||
|
|
||||||
|
```cmd
|
||||||
|
git config --local core.autocrlf true
|
||||||
|
```
|
||||||
|
|
||||||
|
This project comes with `.prettierrc.json` and `eslintrc.json` configuration files. Please run the following commands to fix and verify the code quality.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm run format
|
||||||
|
$ npm run lint
|
||||||
|
```
|
||||||
|
|
||||||
## Running the test suite
|
## Running the test suite
|
||||||
|
|
||||||
After following the steps shown above, The `setup-php` tests in the `__tests__` directory can be run using this command:
|
After following the steps shown above, The `setup-php` tests in the `__tests__` directory can be run using this command:
|
||||||
|
5
.github/FUNDING.yml
vendored
5
.github/FUNDING.yml
vendored
@ -1,6 +1,3 @@
|
|||||||
# These are supported funding model platforms
|
# These are supported funding model platforms
|
||||||
|
|
||||||
tidelift: "npm/setup-php"
|
github: shivammathur
|
||||||
community_bridge: setup-php
|
|
||||||
patreon: shivammathur
|
|
||||||
custom: https://www.paypal.me/shivammathur
|
|
||||||
|
2
.github/ISSUE_TEMPLATE/bug_report.md
vendored
2
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@ -11,7 +11,7 @@ assignees: 'shivammathur'
|
|||||||
<!-- Please describe the bug concisely. -->
|
<!-- Please describe the bug concisely. -->
|
||||||
|
|
||||||
**Version**
|
**Version**
|
||||||
- [ ] I have checked releases and the bug exists in the latest patch version of `v1` or `v2`.
|
- [ ] I have checked releases, and the bug exists in the latest patch version of `v1` or `v2`.
|
||||||
- [ ] `v2`
|
- [ ] `v2`
|
||||||
- [ ] `v1`
|
- [ ] `v1`
|
||||||
|
|
||||||
|
2
.github/ISSUE_TEMPLATE/feature_request.md
vendored
2
.github/ISSUE_TEMPLATE/feature_request.md
vendored
@ -11,7 +11,7 @@ assignees: 'shivammathur'
|
|||||||
<!-- Please describe concisely the feature you want to add. -->
|
<!-- Please describe concisely the feature you want to add. -->
|
||||||
|
|
||||||
**Version**
|
**Version**
|
||||||
- [ ] I have checked releases and the feature is missing in the latest patch version of `v2`.
|
- [ ] I have checked releases, and the feature is missing in the latest patch version of `v2`.
|
||||||
|
|
||||||
**Underlying issue**
|
**Underlying issue**
|
||||||
<!-- Please describe the issue this would solve. -->
|
<!-- Please describe the issue this would solve. -->
|
||||||
|
8
.github/PULL_REQUEST_TEMPLATE.md
vendored
8
.github/PULL_REQUEST_TEMPLATE.md
vendored
@ -5,12 +5,12 @@ labels: bug or enhancement
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## A Pull Request should be associated with an Issue.
|
## A Pull Request should be associated with a Discussion.
|
||||||
|
|
||||||
> If you're fixing a bug, adding a new feature or improving something please provide the details in Issues,
|
> If you're fixing a bug, adding a new feature or improving something please provide the details in discussions,
|
||||||
> so that the development can be pointed in the intended direction.
|
> so that the development can be pointed in the intended direction.
|
||||||
|
|
||||||
Related issue: <!-- Please link the related issue -->
|
Related discussion: <!-- Please link the related discussion -->
|
||||||
|
|
||||||
> Further notes in [Contribution Guidelines](.github/CONTRIBUTING.md)
|
> Further notes in [Contribution Guidelines](.github/CONTRIBUTING.md)
|
||||||
> Thank you for your contribution.
|
> Thank you for your contribution.
|
||||||
@ -30,7 +30,7 @@ This PR [briefly explain what it does]
|
|||||||
> In case this PR edits any scripts:
|
> In case this PR edits any scripts:
|
||||||
|
|
||||||
- [ ] I have checked the edited scripts for syntax.
|
- [ ] I have checked the edited scripts for syntax.
|
||||||
- [ ] I have tested the changes in an integration test (If yes, provide workflow link).
|
- [ ] I have tested the changes in an integration test (If yes, provide workflow YAML and link).
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
- Please target the develop branch when submitting the pull request.
|
- Please target the develop branch when submitting the pull request.
|
||||||
|
6
.github/SECURITY.md
vendored
6
.github/SECURITY.md
vendored
@ -6,8 +6,8 @@ The following versions of this project are supported for security updates.
|
|||||||
|
|
||||||
| Version | Supported |
|
| Version | Supported |
|
||||||
| ------- | ------------------ |
|
| ------- | ------------------ |
|
||||||
| 1.9.x | :white_check_mark: |
|
| 1.11.x | :white_check_mark: |
|
||||||
| 2.3.x | :white_check_mark: |
|
| 2.14.x | :white_check_mark: |
|
||||||
|
|
||||||
## Supported PHP Versions
|
## Supported PHP Versions
|
||||||
|
|
||||||
@ -15,10 +15,10 @@ This security policy only applies to the latest patches of the following PHP ver
|
|||||||
|
|
||||||
| Version | Supported |
|
| Version | Supported |
|
||||||
| ------- | ------------------ |
|
| ------- | ------------------ |
|
||||||
| 7.2 | :white_check_mark: |
|
|
||||||
| 7.3 | :white_check_mark: |
|
| 7.3 | :white_check_mark: |
|
||||||
| 7.4 | :white_check_mark: |
|
| 7.4 | :white_check_mark: |
|
||||||
| 8.0 | :white_check_mark: |
|
| 8.0 | :white_check_mark: |
|
||||||
|
| 8.1 | :white_check_mark: |
|
||||||
|
|
||||||
## Reporting a Vulnerability
|
## Reporting a Vulnerability
|
||||||
|
|
||||||
|
77
.github/workflows/docs.yml
vendored
Normal file
77
.github/workflows/docs.yml
vendored
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
name: Docs workflow
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
schedule:
|
||||||
|
- cron: '0 15 * * 6'
|
||||||
|
jobs:
|
||||||
|
create:
|
||||||
|
name: Create
|
||||||
|
runs-on: ${{ matrix.operating-system }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
operating-system: [ubuntu-20.04, ubuntu-18.04, windows-2019, macos-10.15]
|
||||||
|
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']
|
||||||
|
steps:
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
|
with:
|
||||||
|
php-version: ${{ matrix.php-versions }}
|
||||||
|
- name: Save unix
|
||||||
|
env:
|
||||||
|
file: php${{ matrix.php-versions }}-${{ matrix.operating-system }}.md
|
||||||
|
version: ${{ matrix.php-versions }}
|
||||||
|
if: matrix.operating-system != 'windows-2019'
|
||||||
|
run: |
|
||||||
|
echo "## PHP $version" >> "$file"
|
||||||
|
printf "\n" >> "$file"
|
||||||
|
echo "\`\`\`" >> "$file"
|
||||||
|
php -m >> "$file"
|
||||||
|
echo "\`\`\`" >> "$file"
|
||||||
|
printf "\n" >> "$file"
|
||||||
|
- name: Save Windows
|
||||||
|
env:
|
||||||
|
file: php${{ matrix.php-versions }}-${{ matrix.operating-system }}.md
|
||||||
|
version: ${{ matrix.php-versions }}
|
||||||
|
if: matrix.operating-system == 'windows-2019'
|
||||||
|
run: |
|
||||||
|
Write-Output "## PHP ${{ matrix.php-versions }}`n" | Out-File -FilePath "$env:file"
|
||||||
|
Write-Output "``````" | Out-File -FilePath "$env:file" -Append
|
||||||
|
php -m | Out-File -FilePath "$env:file" -Append
|
||||||
|
Write-Output "```````n" | Out-File -FilePath "$env:file" -Append
|
||||||
|
- uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: lists
|
||||||
|
path: php${{ matrix.php-versions }}-${{ matrix.operating-system }}.md
|
||||||
|
update:
|
||||||
|
name: Update
|
||||||
|
needs: create
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
repository: ${{ github.repository }}.wiki
|
||||||
|
- uses: actions/download-artifact@v2
|
||||||
|
with:
|
||||||
|
path: ${{ github.workspace }}
|
||||||
|
- name: Combine
|
||||||
|
run: |
|
||||||
|
git config --local user.email "${{ secrets.email }}"
|
||||||
|
git config --local user.name "${{ github.repository_owner }}"
|
||||||
|
for os in ubuntu-20.04 ubuntu-18.04 windows-2019 macos-10.15 macos-11; do
|
||||||
|
echo "These are extensions which are loaded by default on the following PHP versions. More extensions which are available as packages and available on pecl are supported by setup-php. Refer to [php extension support](https://github.com/shivammathur/setup-php#heavy_plus_sign-php-extension-support) for more details." > Php-extensions-loaded-on-"$os".md
|
||||||
|
for version in 5.3 5.4 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 8.1 8.2; do
|
||||||
|
if [ "$os" = "macos-11" ]; then
|
||||||
|
cat lists/php"$version"-macos-10.15.md >> Php-extensions-loaded-on-"$os".md
|
||||||
|
else
|
||||||
|
cat lists/php"$version"-"$os".md >> Php-extensions-loaded-on-"$os".md
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
done
|
||||||
|
rm -rf ./lists
|
||||||
|
if [ "$(git status --porcelain=v1 2>/dev/null | wc -l)" != "0" ]; then
|
||||||
|
git add .
|
||||||
|
git commit -m "Update PHP extensions on wiki - $(date +'%d-%m-%y')"
|
||||||
|
git push -f https://${{ github.repository_owner }}:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}.wiki.git master || true
|
||||||
|
fi
|
6
.github/workflows/node-workflow.yml
vendored
6
.github/workflows/node-workflow.yml
vendored
@ -28,10 +28,10 @@ jobs:
|
|||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
- name: Setup Node.js 12.x
|
- name: Setup Node.js 15.x
|
||||||
uses: actions/setup-node@v1
|
uses: actions/setup-node@v1
|
||||||
with:
|
with:
|
||||||
node-version: 12.x
|
node-version: 15.x
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: npm install
|
run: npm install
|
||||||
@ -48,4 +48,4 @@ jobs:
|
|||||||
- name: Send Coverage
|
- name: Send Coverage
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
timeout-minutes: 1
|
timeout-minutes: 1
|
||||||
run: curl -s https://codecov.io/bash | bash -s -- -t ${{secrets.CODECOV_TOKEN}} -f coverage/clover.xml -n github-actions-codecov-${{ matrix.operating-system }}-php${{ matrix.php-versions }}
|
run: curl -s https://codecov.io/bash | bash -s -- -t ${{secrets.CODECOV_TOKEN}} -f coverage/lcov.info -n github-actions-codecov-${{ matrix.operating-system }}
|
||||||
|
16
.github/workflows/workflow.yml
vendored
16
.github/workflows/workflow.yml
vendored
@ -1,5 +1,6 @@
|
|||||||
name: Main workflow
|
name: Main workflow
|
||||||
on:
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
branches:
|
||||||
- master
|
- master
|
||||||
@ -23,17 +24,17 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
operating-system: [ubuntu-20.04, ubuntu-18.04, ubuntu-16.04, windows-latest, macos-latest]
|
operating-system: [ubuntu-20.04, ubuntu-18.04, windows-latest, macos-latest]
|
||||||
php-versions: ['5.3', '5.4', '5.5', '5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0']
|
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']
|
||||||
env:
|
env:
|
||||||
extensions: xml, opcache, xdebug, pcov
|
extensions: xml, opcache, xdebug, pcov
|
||||||
key: cache-v2
|
key: cache-v3
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
- name: Setup cache environment
|
- name: Setup cache environment
|
||||||
id: extcache
|
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 }}
|
||||||
@ -43,9 +44,9 @@ jobs:
|
|||||||
- name: Cache extensions
|
- name: Cache extensions
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.extcache.outputs.dir }}
|
path: ${{ steps.cache-env.outputs.dir }}
|
||||||
key: ${{ steps.extcache.outputs.key }}
|
key: ${{ steps.cache-env.outputs.key }}
|
||||||
restore-keys: ${{ steps.extcache.outputs.key }}
|
restore-keys: ${{ steps.cache-env.outputs.key }}
|
||||||
|
|
||||||
- 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
|
||||||
@ -71,6 +72,7 @@ jobs:
|
|||||||
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');}"
|
||||||
- name: Testing ini values
|
- name: Testing ini values
|
||||||
run: |
|
run: |
|
||||||
|
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');}"
|
2
LICENSE
2
LICENSE
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
The MIT License (MIT)
|
The MIT License (MIT)
|
||||||
|
|
||||||
Copyright (c) 2019-2020 shivammathur and contributors
|
Copyright (c) 2019-2021 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
|
||||||
|
@ -1,52 +1,21 @@
|
|||||||
import * as config from '../src/config';
|
import * as config from '../src/config';
|
||||||
|
|
||||||
describe('Config tests', () => {
|
describe('Config tests', () => {
|
||||||
it('checking addINIValuesOnWindows', async () => {
|
it.each`
|
||||||
let win32: string = await config.addINIValues(
|
ini_values | os_version | output
|
||||||
'post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata',
|
${'a=b, c=d'} | ${'win32'} | ${'Add-Content "$php_dir\\php.ini" "a=b\nc=d"'}
|
||||||
'win32'
|
${'a=b, c=d'} | ${'linux'} | ${'echo "a=b\nc=d" | sudo tee -a "${pecl_file:-${ini_file[@]}}"'}
|
||||||
|
${'a=b, c=d'} | ${'darwin'} | ${'echo "a=b\nc=d" | sudo tee -a "${pecl_file:-${ini_file[@]}}"'}
|
||||||
|
${'a=b & ~c'} | ${'win32'} | ${'Add-Content "$php_dir\\php.ini" "a=\'b & ~c\'"'}
|
||||||
|
${'a="~(b)"'} | ${'win32'} | ${'Add-Content "$php_dir\\php.ini" "a=\'~(b)\'"'}
|
||||||
|
${'a="b, c"'} | ${'win32'} | ${'Add-Content "$php_dir\\php.ini" "a=b, c"'}
|
||||||
|
${'a=b, c=d'} | ${'openbsd'} | ${'Platform openbsd is not supported'}
|
||||||
|
`(
|
||||||
|
'checking addINIValues on $os_version',
|
||||||
|
async ({ini_values, os_version, output}) => {
|
||||||
|
expect(await config.addINIValues(ini_values, os_version)).toContain(
|
||||||
|
output
|
||||||
);
|
);
|
||||||
expect(win32).toContain(
|
}
|
||||||
'Add-Content "$php_dir\\php.ini" "post_max_size=256M\nshort_open_tag=On\ndate.timezone=Asia/Kolkata"'
|
|
||||||
);
|
);
|
||||||
|
|
||||||
win32 = await config.addINIValues(
|
|
||||||
'post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata',
|
|
||||||
'fedora'
|
|
||||||
);
|
|
||||||
expect(win32).toContain('Platform fedora is not supported');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking addINIValuesOnLinux', async () => {
|
|
||||||
let linux: string = await config.addINIValues(
|
|
||||||
'post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata',
|
|
||||||
'linux',
|
|
||||||
true
|
|
||||||
);
|
|
||||||
expect(linux).toContain(
|
|
||||||
'echo "post_max_size=256M\nshort_open_tag=On\ndate.timezone=Asia/Kolkata"'
|
|
||||||
);
|
|
||||||
|
|
||||||
linux = await config.addINIValues(
|
|
||||||
'post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata',
|
|
||||||
'fedora'
|
|
||||||
);
|
|
||||||
expect(linux).toContain('Platform fedora is not supported');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking addINIValuesOnDarwin', async () => {
|
|
||||||
let darwin: string = await config.addINIValues(
|
|
||||||
'post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata',
|
|
||||||
'darwin'
|
|
||||||
);
|
|
||||||
expect(darwin).toContain(
|
|
||||||
'echo "post_max_size=256M\nshort_open_tag=On\ndate.timezone=Asia/Kolkata"'
|
|
||||||
);
|
|
||||||
|
|
||||||
darwin = await config.addINIValues(
|
|
||||||
'post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata',
|
|
||||||
'fedora'
|
|
||||||
);
|
|
||||||
expect(darwin).toContain('Platform fedora is not supported');
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
@ -1,90 +1,39 @@
|
|||||||
import * as coverage from '../src/coverage';
|
import * as coverage from '../src/coverage';
|
||||||
|
|
||||||
describe('Config tests', () => {
|
describe('Config tests', () => {
|
||||||
it('checking addCoverage with PCOV on windows', async () => {
|
it.each`
|
||||||
let win32: string = await coverage.addCoverage('PCOV', '7.4', 'win32');
|
driver | php | os | output
|
||||||
expect(win32).toContain('Add-Extension pcov');
|
${'PCOV'} | ${'7.4'} | ${'win32'} | ${'Add-Extension pcov,Disable-Extension xdebug false'}
|
||||||
expect(win32).toContain('Remove-Extension xdebug');
|
${'pcov'} | ${'7.0'} | ${'win32'} | ${'PHP 7.1 or newer is required'}
|
||||||
|
${'pcov'} | ${'5.6'} | ${'win32'} | ${'PHP 7.1 or newer is required'}
|
||||||
win32 = await coverage.addCoverage('pcov', '7.0', 'win32');
|
${'pcov'} | ${'7.4'} | ${'win32'} | ${'Add-Extension pcov,Disable-Extension xdebug false'}
|
||||||
expect(win32).toContain('PHP 7.1 or newer is required');
|
${'pcov'} | ${'7.4'} | ${'linux'} | ${'add_extension pcov,disable_extension xdebug false'}
|
||||||
|
${'pcov'} | ${'7.4'} | ${'darwin'} | ${'add_brew_extension pcov,disable_extension xdebug false'}
|
||||||
win32 = await coverage.addCoverage('pcov', '5.6', 'win32');
|
${'xdebug'} | ${'7.4'} | ${'win32'} | ${'Add-Extension xdebug'}
|
||||||
expect(win32).toContain('PHP 7.1 or newer is required');
|
${'xdebug3'} | ${'7.4'} | ${'win32'} | ${'Add-Extension xdebug'}
|
||||||
|
${'xdebug2'} | ${'7.4'} | ${'win32'} | ${'Add-Extension xdebug stable 2.9.8'}
|
||||||
|
${'xdebug'} | ${'8.0'} | ${'linux'} | ${'add_extension xdebug'}
|
||||||
|
${'xdebug3'} | ${'8.0'} | ${'linux'} | ${'add_extension xdebug'}
|
||||||
|
${'xdebug2'} | ${'7.4'} | ${'linux'} | ${'add_pecl_extension xdebug 2.9.8 zend_extension'}
|
||||||
|
${'xdebug'} | ${'7.4'} | ${'darwin'} | ${'add_brew_extension xdebug'}
|
||||||
|
${'xdebug3'} | ${'7.4'} | ${'darwin'} | ${'add_brew_extension xdebug'}
|
||||||
|
${'xdebug2'} | ${'7.4'} | ${'darwin'} | ${'add_brew_extension xdebug2'}
|
||||||
|
${'none'} | ${'7.4'} | ${'win32'} | ${'Disable-Extension xdebug false,Disable-Extension pcov false'}
|
||||||
|
${'none'} | ${'7.4'} | ${'linux'} | ${'disable_extension xdebug false,disable_extension pcov false'}
|
||||||
|
${'none'} | ${'7.4'} | ${'darwin'} | ${'disable_extension xdebug false,disable_extension pcov false'}
|
||||||
|
${'nocov'} | ${'7.x'} | ${'any'} | ${''}
|
||||||
|
${''} | ${'7.x'} | ${'any'} | ${''}
|
||||||
|
`(
|
||||||
|
'checking addCoverage with $driver on $os',
|
||||||
|
async ({driver, php, os, output}) => {
|
||||||
|
const script: string = await coverage.addCoverage(driver, php, os);
|
||||||
|
if (output) {
|
||||||
|
output.split(',').forEach((command: string) => {
|
||||||
|
expect(script).toContain(command);
|
||||||
});
|
});
|
||||||
|
} else {
|
||||||
it('checking addCoverage with PCOV on linux', async () => {
|
expect(script).toEqual(output);
|
||||||
const linux: string = await coverage.addCoverage('pcov', '7.4', 'linux');
|
}
|
||||||
expect(linux).toContain('add_extension pcov');
|
}
|
||||||
expect(linux).toContain('remove_extension xdebug');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking addCoverage with PCOV on darwin', async () => {
|
|
||||||
const darwin: string = await coverage.addCoverage('pcov', '7.4', 'darwin');
|
|
||||||
expect(darwin).toContain('add_extension pcov');
|
|
||||||
expect(darwin).toContain('remove_extension xdebug');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking addCoverage with Xdebug on windows', async () => {
|
|
||||||
const win32: string = await coverage.addCoverage('xdebug', '7.4', 'win32');
|
|
||||||
expect(win32).toContain('Add-Extension xdebug');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking addCoverage with Xdebug on linux', async () => {
|
|
||||||
const linux: string = await coverage.addCoverage('xdebug', '8.0', 'linux');
|
|
||||||
expect(linux).toContain('add_extension xdebug');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking addCoverage with Xdebug3 on linux', async () => {
|
|
||||||
const linux: string = await coverage.addCoverage('xdebug3', '7.4', 'linux');
|
|
||||||
expect(linux).toContain('add_extension_from_source xdebug');
|
|
||||||
expect(linux).toContain('echo "xdebug.mode=coverage"');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking addCoverage with Xdebug3 on linux', async () => {
|
|
||||||
const linux: string = await coverage.addCoverage('xdebug3', '8.0', 'linux');
|
|
||||||
expect(linux).toContain('add_extension xdebug');
|
|
||||||
expect(linux).toContain('echo "xdebug.mode=coverage"');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking addCoverage with Xdebug on linux', async () => {
|
|
||||||
const linux: string = await coverage.addCoverage('xdebug', '8.0', 'linux');
|
|
||||||
expect(linux).toContain('add_extension xdebug');
|
|
||||||
expect(linux).toContain('echo "xdebug.mode=coverage"');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking addCoverage with Xdebug on darwin', async () => {
|
|
||||||
const darwin: string = await coverage.addCoverage(
|
|
||||||
'xdebug',
|
|
||||||
'7.4',
|
|
||||||
'darwin'
|
|
||||||
);
|
);
|
||||||
expect(darwin).toContain('add_extension xdebug');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking disableCoverage windows', async () => {
|
|
||||||
const win32 = await coverage.addCoverage('none', '7.4', 'win32');
|
|
||||||
expect(win32).toContain('Remove-Extension xdebug');
|
|
||||||
expect(win32).toContain('Remove-Extension pcov');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking disableCoverage on linux', async () => {
|
|
||||||
const linux: string = await coverage.addCoverage('none', '7.4', 'linux');
|
|
||||||
expect(linux).toContain('remove_extension xdebug');
|
|
||||||
expect(linux).toContain('remove_extension pcov');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking disableCoverage on darwin', async () => {
|
|
||||||
const darwin: string = await coverage.addCoverage('none', '7.4', 'darwin');
|
|
||||||
expect(darwin).toContain('remove_extension xdebug');
|
|
||||||
expect(darwin).toContain('remove_extension pcov');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking no or invalid coverage driver', async () => {
|
|
||||||
let nocov: string = await coverage.addCoverage('nocov', '7.x', 'any');
|
|
||||||
expect(nocov).toEqual('');
|
|
||||||
|
|
||||||
nocov = await coverage.addCoverage('', '7.x', 'any');
|
|
||||||
expect(nocov).toEqual('');
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
@ -1,26 +1,34 @@
|
|||||||
import * as extensions from '../src/extensions';
|
import * as extensions from '../src/extensions';
|
||||||
|
|
||||||
describe('Extension tests', () => {
|
describe('Extension tests', () => {
|
||||||
it('checking getXdebugVersion', async () => {
|
|
||||||
expect(await extensions.getXdebugVersion('5.3')).toContain('2.2.7');
|
|
||||||
expect(await extensions.getXdebugVersion('5.4')).toContain('2.4.1');
|
|
||||||
expect(await extensions.getXdebugVersion('5.5')).toContain('2.5.5');
|
|
||||||
expect(await extensions.getXdebugVersion('5.6')).toContain('2.9.6');
|
|
||||||
});
|
|
||||||
it('checking addExtensionOnWindows', async () => {
|
it('checking addExtensionOnWindows', async () => {
|
||||||
let win32: string = await extensions.addExtension(
|
let win32: string = await extensions.addExtension(
|
||||||
'Xdebug, pcov, sqlite, :intl, phalcon4, ast-beta, grpc-1.2.3, inotify-1.2.3alpha2',
|
'none, Xdebug, pcov, sqlite, :intl, phalcon4, pecl_http, ioncube, oci8, pdo_oci, ast-beta, grpc-1.2.3, inotify-1.2.3alpha2, sqlsrv-1.2.3preview1',
|
||||||
'7.4',
|
'7.4',
|
||||||
'win32'
|
'win32'
|
||||||
);
|
);
|
||||||
|
expect(win32).toContain('Disable-AllShared');
|
||||||
expect(win32).toContain('Add-Extension xdebug');
|
expect(win32).toContain('Add-Extension xdebug');
|
||||||
expect(win32).toContain('Add-Extension pcov');
|
expect(win32).toContain('Add-Extension pcov');
|
||||||
expect(win32).toContain('Add-Extension sqlite3');
|
expect(win32).toContain('Add-Extension sqlite3');
|
||||||
expect(win32).toContain('Remove-Extension intl');
|
expect(win32).toContain('Disable-Extension intl');
|
||||||
expect(win32).toContain('phalcon.ps1 phalcon4');
|
expect(win32).toContain('Add-Phalcon phalcon4');
|
||||||
|
expect(win32).toContain('Add-Http');
|
||||||
|
expect(win32).toContain('Add-Ioncube');
|
||||||
|
expect(win32).toContain('Add-Oci oci8');
|
||||||
|
expect(win32).toContain('Add-Oci pdo_oci');
|
||||||
expect(win32).toContain('Add-Extension ast beta');
|
expect(win32).toContain('Add-Extension ast beta');
|
||||||
expect(win32).toContain('Add-Extension grpc stable 1.2.3');
|
expect(win32).toContain('Add-Extension grpc stable 1.2.3');
|
||||||
expect(win32).toContain('Add-Extension inotify alpha 1.2.3');
|
expect(win32).toContain('Add-Extension inotify alpha 1.2.3');
|
||||||
|
expect(win32).toContain('Add-Extension sqlsrv devel 1.2.3');
|
||||||
|
|
||||||
|
win32 = await extensions.addExtension('pcov', '5.6', 'win32');
|
||||||
|
expect(win32).toContain(
|
||||||
|
'Add-Log "$cross" "pcov" "pcov is not supported on PHP 5.6"'
|
||||||
|
);
|
||||||
|
|
||||||
|
win32 = await extensions.addExtension('xdebug2', '7.2', 'win32');
|
||||||
|
expect(win32).toContain('Add-Extension xdebug stable 2.9.8');
|
||||||
|
|
||||||
win32 = await extensions.addExtension('mysql', '7.4', 'win32');
|
win32 = await extensions.addExtension('mysql', '7.4', 'win32');
|
||||||
expect(win32).toContain('Add-Extension mysqli');
|
expect(win32).toContain('Add-Extension mysqli');
|
||||||
@ -41,36 +49,38 @@ describe('Extension tests', () => {
|
|||||||
'win32',
|
'win32',
|
||||||
true
|
true
|
||||||
);
|
);
|
||||||
expect(win32).toContain('phalcon.ps1 phalcon3');
|
expect(win32).toContain('Add-Phalcon phalcon3');
|
||||||
expect(win32).toContain('Add-Extension does_not_exist');
|
expect(win32).toContain('Add-Extension does_not_exist');
|
||||||
|
|
||||||
win32 = await extensions.addExtension('xdebug', '7.2', 'fedora');
|
win32 = await extensions.addExtension('xdebug', '7.2', 'openbsd');
|
||||||
expect(win32).toContain('Platform fedora is not supported');
|
expect(win32).toContain('Platform openbsd is not supported');
|
||||||
|
|
||||||
win32 = await extensions.addExtension('blackfire', '7.3', 'win32');
|
win32 = await extensions.addExtension('blackfire', '7.3', 'win32');
|
||||||
expect(win32).toContain('blackfire.ps1 7.3 blackfire');
|
expect(win32).toContain('Add-Blackfire blackfire');
|
||||||
|
|
||||||
win32 = await extensions.addExtension('blackfire-1.31.0', '7.3', 'win32');
|
win32 = await extensions.addExtension('blackfire-1.31.0', '7.3', 'win32');
|
||||||
expect(win32).toContain('blackfire.ps1 7.3 blackfire-1.31.0');
|
expect(win32).toContain('Add-Blackfire blackfire-1.31.0');
|
||||||
|
|
||||||
|
win32 = await extensions.addExtension(
|
||||||
|
'mongodb-mongodb/mongo-php-driver@master',
|
||||||
|
'7.3',
|
||||||
|
'win32'
|
||||||
|
);
|
||||||
|
expect(win32).toContain(
|
||||||
|
'Add-Log "$cross" "mongodb-mongodb/mongo-php-driver@master" "mongodb-mongodb/mongo-php-driver@master is not supported on PHP 7.3"'
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('checking addExtensionOnLinux', async () => {
|
it('checking addExtensionOnLinux', async () => {
|
||||||
let linux: string = await extensions.addExtension(
|
let linux: string = await extensions.addExtension(
|
||||||
'Xdebug, xdebug3, pcov, sqlite, :intl, ast, uopz, ast-beta, pdo_mysql, pdo-odbc, xdebug-alpha, grpc-1.2.3',
|
'none, Xdebug, pcov, sqlite, :intl, ast, ast-beta, pdo_mysql, pdo-odbc, xdebug-alpha, grpc-1.2.3',
|
||||||
'7.4',
|
'7.4',
|
||||||
'linux'
|
'linux'
|
||||||
);
|
);
|
||||||
expect(linux).toContain('update_extension xdebug 2.9.6');
|
expect(linux).toContain('disable_all_shared');
|
||||||
expect(linux).toContain(
|
expect(linux).toContain('add_extension xdebug');
|
||||||
'add_extension_from_source xdebug xdebug/xdebug master --enable-xdebug zend_extension'
|
expect(linux).toContain('add_extension sqlite3');
|
||||||
);
|
expect(linux).toContain('disable_extension intl');
|
||||||
expect(linux).toContain('sudo $debconf_fix apt-get install -y php7.4-pcov');
|
|
||||||
expect(linux).toContain(
|
|
||||||
'sudo $debconf_fix apt-get install -y php7.4-sqlite3'
|
|
||||||
);
|
|
||||||
expect(linux).toContain('remove_extension intl');
|
|
||||||
expect(linux).toContain('sudo $debconf_fix apt-get install -y php-ast');
|
|
||||||
expect(linux).toContain('sudo $debconf_fix apt-get install -y php-uopz');
|
|
||||||
expect(linux).toContain('add_unstable_extension ast beta extension');
|
expect(linux).toContain('add_unstable_extension ast beta extension');
|
||||||
expect(linux).toContain('add_pdo_extension mysql');
|
expect(linux).toContain('add_pdo_extension mysql');
|
||||||
expect(linux).toContain('add_pdo_extension odbc');
|
expect(linux).toContain('add_pdo_extension odbc');
|
||||||
@ -79,73 +89,142 @@ describe('Extension tests', () => {
|
|||||||
'add_unstable_extension xdebug alpha zend_extension'
|
'add_unstable_extension xdebug alpha zend_extension'
|
||||||
);
|
);
|
||||||
|
|
||||||
linux = await extensions.addExtension('xdebug3', '8.0', 'linux');
|
linux = await extensions.addExtension('pcov', '5.6', 'linux');
|
||||||
expect(linux).toContain(
|
expect(linux).toContain(
|
||||||
'sudo $debconf_fix apt-get install -y php8.0-xdebug'
|
'add_log "$cross" "pcov" "pcov is not supported on PHP 5.6"'
|
||||||
);
|
);
|
||||||
|
|
||||||
linux = await extensions.addExtension('gearman', '7.0', 'linux');
|
linux = await extensions.addExtension('gearman', '5.6', 'linux');
|
||||||
expect(linux).toContain('gearman.sh 7.0');
|
expect(linux).toContain('add_gearman');
|
||||||
linux = await extensions.addExtension('gearman', '7.1', 'linux');
|
|
||||||
expect(linux).toContain('gearman.sh 7.1');
|
|
||||||
|
|
||||||
linux = await extensions.addExtension('gearman', '7.2', 'linux');
|
|
||||||
expect(linux).toContain('gearman.sh 7.2');
|
|
||||||
|
|
||||||
linux = await extensions.addExtension('gearman', '7.3', 'linux');
|
|
||||||
expect(linux).toContain('gearman.sh 7.3');
|
|
||||||
|
|
||||||
linux = await extensions.addExtension('gearman', '7.4', 'linux');
|
linux = await extensions.addExtension('gearman', '7.4', 'linux');
|
||||||
expect(linux).toContain('gearman.sh 7.4');
|
expect(linux).toContain('add_gearman');
|
||||||
|
|
||||||
linux = await extensions.addExtension('xdebug', '7.2', 'fedora');
|
linux = await extensions.addExtension('couchbase', '5.6', 'linux');
|
||||||
expect(linux).toContain('Platform fedora is not supported');
|
expect(linux).toContain('add_couchbase');
|
||||||
|
linux = await extensions.addExtension('couchbase', '7.4', 'linux');
|
||||||
|
expect(linux).toContain('add_couchbase');
|
||||||
|
|
||||||
|
linux = await extensions.addExtension('pdo_cubrid', '7.0', 'linux');
|
||||||
|
expect(linux).toContain('add_cubrid pdo_cubrid');
|
||||||
|
linux = await extensions.addExtension('cubrid', '7.4', 'linux');
|
||||||
|
expect(linux).toContain('add_cubrid cubrid');
|
||||||
|
|
||||||
|
linux = await extensions.addExtension('xdebug2', '7.2', 'linux');
|
||||||
|
expect(linux).toContain('add_pecl_extension xdebug 2.9.8 zend_extension');
|
||||||
|
|
||||||
|
linux = await extensions.addExtension('xdebug', '7.2', 'openbsd');
|
||||||
|
expect(linux).toContain('Platform openbsd is not supported');
|
||||||
|
|
||||||
linux = await extensions.addExtension('phalcon3, phalcon4', '7.3', 'linux');
|
linux = await extensions.addExtension('phalcon3, phalcon4', '7.3', 'linux');
|
||||||
expect(linux).toContain('phalcon.sh phalcon3 7.3');
|
expect(linux).toContain('add_phalcon phalcon3');
|
||||||
expect(linux).toContain('phalcon.sh phalcon4 7.3');
|
expect(linux).toContain('add_phalcon phalcon4');
|
||||||
|
|
||||||
|
linux = await extensions.addExtension('ioncube', '7.3', 'linux');
|
||||||
|
expect(linux).toContain('add_ioncube');
|
||||||
|
|
||||||
|
linux = await extensions.addExtension('geos', '7.3', 'linux');
|
||||||
|
expect(linux).toContain('add_geos');
|
||||||
|
|
||||||
|
linux = await extensions.addExtension('pecl_http', '7.3', 'linux');
|
||||||
|
expect(linux).toContain('add_http');
|
||||||
|
|
||||||
|
linux = await extensions.addExtension('http-1.2.3', '7.3', 'linux');
|
||||||
|
expect(linux).toContain('add_http http-1.2.3');
|
||||||
|
|
||||||
|
linux = await extensions.addExtension('oci8, pdo_oci', '7.3', 'linux');
|
||||||
|
expect(linux).toContain('add_oci oci8');
|
||||||
|
expect(linux).toContain('add_oci pdo_oci');
|
||||||
|
|
||||||
linux = await extensions.addExtension('blackfire', '7.3', 'linux');
|
linux = await extensions.addExtension('blackfire', '7.3', 'linux');
|
||||||
expect(linux).toContain('blackfire.sh 7.3 blackfire');
|
expect(linux).toContain('add_blackfire blackfire');
|
||||||
|
|
||||||
linux = await extensions.addExtension('blackfire-1.31.0', '7.3', 'linux');
|
linux = await extensions.addExtension('blackfire-1.31.0', '7.3', 'linux');
|
||||||
expect(linux).toContain('blackfire.sh 7.3 blackfire-1.31.0');
|
expect(linux).toContain('add_blackfire blackfire-1.31.0');
|
||||||
|
|
||||||
|
linux = await extensions.addExtension('intl-65.1', '5.6', 'linux');
|
||||||
|
expect(linux).toContain('add_intl intl-65.1');
|
||||||
|
|
||||||
|
linux = await extensions.addExtension('intl-67.1', '7.3', 'linux');
|
||||||
|
expect(linux).toContain('add_intl intl-67.1');
|
||||||
|
|
||||||
|
linux = await extensions.addExtension('intl-68.2', '8.0', 'linux');
|
||||||
|
expect(linux).toContain('add_intl intl-68.2');
|
||||||
|
|
||||||
|
linux = await extensions.addExtension(
|
||||||
|
'mongodb-mongodb/mongo-php-driver@master',
|
||||||
|
'7.3',
|
||||||
|
'linux'
|
||||||
|
);
|
||||||
|
expect(linux).toContain(
|
||||||
|
'add_extension_from_source mongodb https://github.com mongodb mongo-php-driver master extension'
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('checking addExtensionOnDarwin', async () => {
|
it('checking addExtensionOnDarwin', async () => {
|
||||||
let darwin: string = await extensions.addExtension(
|
let darwin: string = await extensions.addExtension(
|
||||||
'Xdebug, pcov, sqlite, :intl, ast-beta, grpc-1.2.3',
|
'none, amqp, apcu, expect, Xdebug, pcov, grpc, igbinary, imagick, imap, memcache, memcached, mongodb, msgpack, phalcon3, phalcon4, protobuf, psr, rdkafka, redis, ssh2, swoole, vips, yaml, sqlite, oci8, pdo_oci, :intl, ast-beta, grpc-1.2.3',
|
||||||
'7.2',
|
'7.2',
|
||||||
'darwin'
|
'darwin'
|
||||||
);
|
);
|
||||||
expect(darwin).toContain('add_brew_extension xdebug');
|
expect(darwin).toContain('disable_all_shared');
|
||||||
expect(darwin).toContain('add_brew_extension pcov');
|
expect(darwin).toContain('add_brew_extension amqp extension');
|
||||||
expect(darwin).toContain('sudo pecl install -f sqlite3');
|
expect(darwin).toContain('add_brew_extension apcu extension');
|
||||||
expect(darwin).toContain('remove_extension intl');
|
expect(darwin).toContain('add_brew_extension expect extension');
|
||||||
|
expect(darwin).toContain('add_brew_extension xdebug zend_extension');
|
||||||
|
expect(darwin).toContain('add_brew_extension pcov extension');
|
||||||
|
expect(darwin).toContain('add_brew_extension grpc extension');
|
||||||
|
expect(darwin).toContain('add_brew_extension igbinary extension');
|
||||||
|
expect(darwin).toContain('add_brew_extension imagick extension');
|
||||||
|
expect(darwin).toContain('add_brew_extension imap extension');
|
||||||
|
expect(darwin).toContain('add_brew_extension memcache extension');
|
||||||
|
expect(darwin).toContain('add_brew_extension memcached extension');
|
||||||
|
expect(darwin).toContain('add_brew_extension mongodb extension');
|
||||||
|
expect(darwin).toContain('add_brew_extension msgpack extension');
|
||||||
|
expect(darwin).toContain('add_brew_extension phalcon3 extension');
|
||||||
|
expect(darwin).toContain('add_brew_extension phalcon4 extension');
|
||||||
|
expect(darwin).toContain('add_brew_extension protobuf extension');
|
||||||
|
expect(darwin).toContain('add_brew_extension psr extension');
|
||||||
|
expect(darwin).toContain('add_brew_extension rdkafka extension');
|
||||||
|
expect(darwin).toContain('add_brew_extension redis extension');
|
||||||
|
expect(darwin).toContain('add_brew_extension ssh2 extension');
|
||||||
|
expect(darwin).toContain('add_brew_extension swoole extension');
|
||||||
|
expect(darwin).toContain('add_brew_extension vips extension');
|
||||||
|
expect(darwin).toContain('add_brew_extension yaml extension');
|
||||||
|
expect(darwin).toContain('add_extension sqlite3');
|
||||||
|
expect(darwin).toContain('disable_extension intl');
|
||||||
expect(darwin).toContain('add_unstable_extension ast beta extension');
|
expect(darwin).toContain('add_unstable_extension ast beta extension');
|
||||||
expect(darwin).toContain('add_pecl_extension grpc 1.2.3 extension');
|
expect(darwin).toContain('add_pecl_extension grpc 1.2.3 extension');
|
||||||
|
|
||||||
darwin = await extensions.addExtension('phalcon3', '7.0', 'darwin');
|
darwin = await extensions.addExtension('couchbase', '5.6', 'darwin');
|
||||||
expect(darwin).toContain('phalcon_darwin.sh phalcon3 7.0');
|
expect(darwin).toContain('add_couchbase');
|
||||||
|
|
||||||
darwin = await extensions.addExtension('phalcon4', '7.3', 'darwin');
|
darwin = await extensions.addExtension('couchbase', '7.3', 'darwin');
|
||||||
expect(darwin).toContain('phalcon_darwin.sh phalcon4 7.3');
|
expect(darwin).toContain('add_couchbase');
|
||||||
|
|
||||||
|
darwin = await extensions.addExtension('ioncube', '7.3', 'darwin');
|
||||||
|
expect(darwin).toContain('add_ioncube');
|
||||||
|
|
||||||
|
darwin = await extensions.addExtension('geos', '7.3', 'darwin');
|
||||||
|
expect(darwin).toContain('add_geos');
|
||||||
|
|
||||||
|
darwin = await extensions.addExtension('pecl_http', '7.3', 'darwin');
|
||||||
|
expect(darwin).toContain('add_http');
|
||||||
|
|
||||||
|
darwin = await extensions.addExtension('http-1.2.3', '7.3', 'darwin');
|
||||||
|
expect(darwin).toContain('add_http http-1.2.3');
|
||||||
|
|
||||||
|
darwin = await extensions.addExtension('oci8, pdo_oci', '7.3', 'darwin');
|
||||||
|
expect(darwin).toContain('add_oci oci8');
|
||||||
|
expect(darwin).toContain('add_oci pdo_oci');
|
||||||
|
|
||||||
darwin = await extensions.addExtension('pcov', '5.6', 'darwin');
|
darwin = await extensions.addExtension('pcov', '5.6', 'darwin');
|
||||||
expect(darwin).toContain('sudo pecl install -f pcov');
|
expect(darwin).toContain(
|
||||||
|
'add_log "$cross" "pcov" "pcov is not supported on PHP 5.6"'
|
||||||
|
);
|
||||||
|
|
||||||
darwin = await extensions.addExtension('pcov', '7.2', 'darwin');
|
darwin = await extensions.addExtension('pcov', '7.2', 'darwin');
|
||||||
expect(darwin).toContain('add_brew_extension pcov');
|
expect(darwin).toContain('add_brew_extension pcov');
|
||||||
|
|
||||||
darwin = await extensions.addExtension('xdebug', '5.3', 'darwin');
|
|
||||||
expect(darwin).toContain('sudo pecl install -f xdebug-2.2.7');
|
|
||||||
|
|
||||||
darwin = await extensions.addExtension('xdebug', '5.4', 'darwin');
|
|
||||||
expect(darwin).toContain('sudo pecl install -f xdebug-2.4.1');
|
|
||||||
|
|
||||||
darwin = await extensions.addExtension('xdebug', '5.5', 'darwin');
|
|
||||||
expect(darwin).toContain('sudo pecl install -f xdebug-2.5.5');
|
|
||||||
|
|
||||||
darwin = await extensions.addExtension('xdebug', '5.6', 'darwin');
|
darwin = await extensions.addExtension('xdebug', '5.6', 'darwin');
|
||||||
expect(darwin).toContain('add_brew_extension xdebug');
|
expect(darwin).toContain('add_brew_extension xdebug');
|
||||||
|
|
||||||
@ -155,25 +234,17 @@ describe('Extension tests', () => {
|
|||||||
darwin = await extensions.addExtension('xdebug', '7.2', 'darwin');
|
darwin = await extensions.addExtension('xdebug', '7.2', 'darwin');
|
||||||
expect(darwin).toContain('add_brew_extension xdebug');
|
expect(darwin).toContain('add_brew_extension xdebug');
|
||||||
|
|
||||||
darwin = await extensions.addExtension('redis', '5.6', 'darwin');
|
darwin = await extensions.addExtension('xdebug2', '7.2', 'darwin');
|
||||||
expect(darwin).toContain('sudo pecl install -f redis-2.2.8');
|
expect(darwin).toContain('add_brew_extension xdebug2');
|
||||||
|
|
||||||
darwin = await extensions.addExtension('redis', '7.2', 'darwin');
|
darwin = await extensions.addExtension('imagick', '5.5', 'darwin');
|
||||||
expect(darwin).toContain('sudo pecl install -f redis');
|
expect(darwin).toContain('add_extension imagick');
|
||||||
|
|
||||||
darwin = await extensions.addExtension('imagick', '5.6', 'darwin');
|
|
||||||
expect(darwin).toContain('brew install pkg-config imagemagick');
|
|
||||||
expect(darwin).toContain('sudo pecl install -f imagick');
|
|
||||||
|
|
||||||
darwin = await extensions.addExtension('imagick', '7.4', 'darwin');
|
|
||||||
expect(darwin).toContain('brew install pkg-config imagemagick');
|
|
||||||
expect(darwin).toContain('sudo pecl install -f imagick');
|
|
||||||
|
|
||||||
darwin = await extensions.addExtension('blackfire', '7.3', 'darwin');
|
darwin = await extensions.addExtension('blackfire', '7.3', 'darwin');
|
||||||
expect(darwin).toContain('blackfire_darwin.sh 7.3 blackfire');
|
expect(darwin).toContain('add_blackfire blackfire');
|
||||||
|
|
||||||
darwin = await extensions.addExtension('blackfire-1.31.0', '7.3', 'darwin');
|
darwin = await extensions.addExtension('blackfire-1.31.0', '7.3', 'darwin');
|
||||||
expect(darwin).toContain('blackfire_darwin.sh 7.3 blackfire-1.31.0');
|
expect(darwin).toContain('add_blackfire blackfire-1.31.0');
|
||||||
|
|
||||||
darwin = await extensions.addExtension(
|
darwin = await extensions.addExtension(
|
||||||
'does_not_exist',
|
'does_not_exist',
|
||||||
@ -183,7 +254,16 @@ describe('Extension tests', () => {
|
|||||||
);
|
);
|
||||||
expect(darwin).toContain('add_extension does_not_exist');
|
expect(darwin).toContain('add_extension does_not_exist');
|
||||||
|
|
||||||
darwin = await extensions.addExtension('xdebug', '7.2', 'fedora');
|
darwin = await extensions.addExtension('xdebug', '7.2', 'openbsd');
|
||||||
expect(darwin).toContain('Platform fedora is not supported');
|
expect(darwin).toContain('Platform openbsd is not supported');
|
||||||
|
|
||||||
|
darwin = await extensions.addExtension(
|
||||||
|
'mongodb-mongodb/mongo-php-driver@master',
|
||||||
|
'7.3',
|
||||||
|
'darwin'
|
||||||
|
);
|
||||||
|
expect(darwin).toContain(
|
||||||
|
'add_extension_from_source mongodb https://github.com mongodb mongo-php-driver master extension'
|
||||||
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -1,10 +1,13 @@
|
|||||||
import * as install from '../src/install';
|
import * as install from '../src/install';
|
||||||
|
import * as utils from '../src/utils';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mock install.ts
|
* Mock install.ts
|
||||||
*/
|
*/
|
||||||
jest.mock('../src/install', () => ({
|
jest.mock('../src/install', () => ({
|
||||||
build: jest.fn().mockImplementation(
|
getScript: jest
|
||||||
|
.fn()
|
||||||
|
.mockImplementation(
|
||||||
async (
|
async (
|
||||||
filename: string,
|
filename: string,
|
||||||
version: string,
|
version: string,
|
||||||
@ -14,51 +17,29 @@ jest.mock('../src/install', () => ({
|
|||||||
const ini_values_csv: string = process.env['ini-values'] || '';
|
const ini_values_csv: string = process.env['ini-values'] || '';
|
||||||
const coverage_driver: string = process.env['coverage'] || '';
|
const coverage_driver: string = process.env['coverage'] || '';
|
||||||
let tools_csv: string = process.env['tools'] || '';
|
let tools_csv: string = process.env['tools'] || '';
|
||||||
const pecl: string = process.env['pecl'] || '';
|
|
||||||
if (pecl == 'true') {
|
|
||||||
tools_csv = 'pecl, ' + tools_csv;
|
|
||||||
}
|
|
||||||
|
|
||||||
let script = 'initial script ' + filename + version + os_version;
|
let script = 'initial script ' + filename + version + os_version;
|
||||||
if (tools_csv) {
|
script += tools_csv ? 'add_tool' : '';
|
||||||
script += 'add_tool';
|
script += extension_csv ? 'install extensions' : '';
|
||||||
}
|
script += coverage_driver ? 'set coverage driver' : '';
|
||||||
if (extension_csv) {
|
script += ini_values_csv ? 'edit php.ini' : '';
|
||||||
script += 'install extensions';
|
|
||||||
}
|
|
||||||
if (ini_values_csv) {
|
|
||||||
script += 'edit php.ini';
|
|
||||||
}
|
|
||||||
if (coverage_driver) {
|
|
||||||
script += 'set coverage driver';
|
|
||||||
}
|
|
||||||
|
|
||||||
return script;
|
return script;
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
run: jest.fn().mockImplementation(
|
run: jest.fn().mockImplementation(async (): Promise<string> => {
|
||||||
async (): Promise<string> => {
|
|
||||||
const os_version: string = process.env['RUNNER_OS'] || '';
|
const os_version: string = process.env['RUNNER_OS'] || '';
|
||||||
let version: string = process.env['php-version'] || '';
|
const version: string = await utils.parseVersion(
|
||||||
version = version.length > 1 ? version.slice(0, 3) : version + '.0';
|
await utils.getInput('php-version', true)
|
||||||
let script = '';
|
);
|
||||||
switch (os_version) {
|
const tool = await utils.scriptTool(os_version);
|
||||||
case 'darwin':
|
const filename = os_version + (await utils.scriptExtension(os_version));
|
||||||
case 'linux':
|
return [
|
||||||
script = await install.build(os_version + '.sh', version, os_version);
|
await install.getScript(filename, version, os_version),
|
||||||
script += 'bash script.sh ' + version + ' ' + __dirname;
|
tool,
|
||||||
break;
|
filename,
|
||||||
case 'win32':
|
version,
|
||||||
script = await install.build(os_version + '.sh', version, os_version);
|
__dirname
|
||||||
script += 'pwsh script.ps1 ' + version + ' ' + __dirname;
|
].join(' ');
|
||||||
break;
|
})
|
||||||
default:
|
|
||||||
script += os_version + ' is not supported';
|
|
||||||
}
|
|
||||||
|
|
||||||
return script;
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}));
|
}));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -93,13 +74,13 @@ describe('Install', () => {
|
|||||||
|
|
||||||
let script: string = '' + (await install.run());
|
let script: string = '' + (await install.run());
|
||||||
expect(script).toContain('initial script');
|
expect(script).toContain('initial script');
|
||||||
expect(script).toContain('pwsh script.ps1 7.0 ' + __dirname);
|
expect(script).toContain('pwsh win32.ps1 7.0 ' + __dirname);
|
||||||
|
|
||||||
setEnv('7.3', 'win32', '', '', '', '');
|
setEnv('7.3', 'win32', '', '', '', '');
|
||||||
|
|
||||||
script = '' + (await install.run());
|
script = '' + (await install.run());
|
||||||
expect(script).toContain('initial script');
|
expect(script).toContain('initial script');
|
||||||
expect(script).toContain('pwsh script.ps1 7.3 ' + __dirname);
|
expect(script).toContain('pwsh win32.ps1 7.3 ' + __dirname);
|
||||||
|
|
||||||
setEnv('7.3', 'win32', 'a, b', 'a=b', 'x', '');
|
setEnv('7.3', 'win32', 'a, b', 'a=b', 'x', '');
|
||||||
|
|
||||||
@ -108,7 +89,7 @@ describe('Install', () => {
|
|||||||
expect(script).toContain('install extensions');
|
expect(script).toContain('install extensions');
|
||||||
expect(script).toContain('edit php.ini');
|
expect(script).toContain('edit php.ini');
|
||||||
expect(script).toContain('set coverage driver');
|
expect(script).toContain('set coverage driver');
|
||||||
expect(script).toContain('pwsh script.ps1 7.3 ' + __dirname);
|
expect(script).toContain('pwsh win32.ps1 7.3 ' + __dirname);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Test install on linux', async () => {
|
it('Test install on linux', async () => {
|
||||||
@ -116,7 +97,13 @@ describe('Install', () => {
|
|||||||
|
|
||||||
let script: string = '' + (await install.run());
|
let script: string = '' + (await install.run());
|
||||||
expect(script).toContain('initial script');
|
expect(script).toContain('initial script');
|
||||||
expect(script).toContain('bash script.sh 7.3 ');
|
expect(script).toContain('bash linux.sh 7.3 ');
|
||||||
|
|
||||||
|
setEnv('latest', 'linux', '', '', '', '');
|
||||||
|
|
||||||
|
script = '' + (await install.run());
|
||||||
|
expect(script).toContain('initial script');
|
||||||
|
expect(script).toContain('bash linux.sh 8.0 ');
|
||||||
|
|
||||||
setEnv('7.3', 'linux', 'a, b', 'a=b', 'x', 'phpunit');
|
setEnv('7.3', 'linux', 'a, b', 'a=b', 'x', 'phpunit');
|
||||||
|
|
||||||
@ -125,7 +112,7 @@ describe('Install', () => {
|
|||||||
expect(script).toContain('install extensions');
|
expect(script).toContain('install extensions');
|
||||||
expect(script).toContain('edit php.ini');
|
expect(script).toContain('edit php.ini');
|
||||||
expect(script).toContain('set coverage driver');
|
expect(script).toContain('set coverage driver');
|
||||||
expect(script).toContain('bash script.sh 7.3');
|
expect(script).toContain('bash linux.sh 7.3');
|
||||||
expect(script).toContain('add_tool');
|
expect(script).toContain('add_tool');
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -134,7 +121,7 @@ describe('Install', () => {
|
|||||||
|
|
||||||
let script: string = '' + (await install.run());
|
let script: string = '' + (await install.run());
|
||||||
expect(script).toContain('initial script');
|
expect(script).toContain('initial script');
|
||||||
expect(script).toContain('bash script.sh 7.3 ' + __dirname);
|
expect(script).toContain('bash darwin.sh 7.3 ' + __dirname);
|
||||||
|
|
||||||
setEnv('7.3', 'darwin', 'a, b', 'a=b', 'x', '');
|
setEnv('7.3', 'darwin', 'a, b', 'a=b', 'x', '');
|
||||||
|
|
||||||
@ -143,7 +130,7 @@ describe('Install', () => {
|
|||||||
expect(script).toContain('install extensions');
|
expect(script).toContain('install extensions');
|
||||||
expect(script).toContain('edit php.ini');
|
expect(script).toContain('edit php.ini');
|
||||||
expect(script).toContain('set coverage driver');
|
expect(script).toContain('set coverage driver');
|
||||||
expect(script).toContain('bash script.sh 7.3 ' + __dirname);
|
expect(script).toContain('bash darwin.sh 7.3 ' + __dirname);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Test malformed version inputs', async () => {
|
it('Test malformed version inputs', async () => {
|
||||||
@ -151,18 +138,24 @@ describe('Install', () => {
|
|||||||
|
|
||||||
let script: string = '' + '' + (await install.run());
|
let script: string = '' + '' + (await install.run());
|
||||||
expect(script).toContain('initial script');
|
expect(script).toContain('initial script');
|
||||||
expect(script).toContain('bash script.sh 7.4 ' + __dirname);
|
expect(script).toContain('bash darwin.sh 7.4 ' + __dirname);
|
||||||
|
|
||||||
setEnv(8.0, 'darwin', '', '', '', '');
|
setEnv(8.0, 'darwin', '', '', '', '');
|
||||||
|
|
||||||
script = '' + (await install.run());
|
script = '' + (await install.run());
|
||||||
expect(script).toContain('initial script');
|
expect(script).toContain('initial script');
|
||||||
expect(script).toContain('bash script.sh 8.0 ' + __dirname);
|
expect(script).toContain('bash darwin.sh 8.0 ' + __dirname);
|
||||||
|
|
||||||
setEnv(8, 'darwin', '', '', '', '');
|
setEnv(8, 'darwin', '', '', '', '');
|
||||||
|
|
||||||
script = '' + (await install.run());
|
script = '' + (await install.run());
|
||||||
expect(script).toContain('initial script');
|
expect(script).toContain('initial script');
|
||||||
expect(script).toContain('bash script.sh 8.0 ' + __dirname);
|
expect(script).toContain('bash darwin.sh 8.0 ' + __dirname);
|
||||||
|
|
||||||
|
setEnv(8.1, 'darwin', '', '', '', '');
|
||||||
|
|
||||||
|
script = '' + (await install.run());
|
||||||
|
expect(script).toContain('initial script');
|
||||||
|
expect(script).toContain('bash darwin.sh 8.1 ' + __dirname);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -1,41 +0,0 @@
|
|||||||
import * as io from '@actions/io';
|
|
||||||
import * as matchers from '../src/matchers';
|
|
||||||
|
|
||||||
jest.mock('@actions/io');
|
|
||||||
|
|
||||||
describe('Matchers', () => {
|
|
||||||
it('Add matchers', async () => {
|
|
||||||
process.env['RUNNER_TOOL_CACHE'] = __dirname;
|
|
||||||
await matchers.addMatchers();
|
|
||||||
const spy = jest.spyOn(io, 'cp');
|
|
||||||
expect(spy).toHaveBeenCalledTimes(2);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('Test PHPUnit Regex', async () => {
|
|
||||||
const regex1 = /^\d+\)\s.*$/;
|
|
||||||
const regex2 = /^(.*Failed\sasserting\sthat.*)$/;
|
|
||||||
const regex3 = /^\s*$/;
|
|
||||||
const regex4 = /^(.*):(\d+)$/;
|
|
||||||
expect(regex1.test('1) Tests\\Test::it_tests')).toBe(true);
|
|
||||||
expect(regex2.test('Failed asserting that false is true')).toBe(true);
|
|
||||||
expect(regex3.test('\n')).toBe(true);
|
|
||||||
expect(regex4.test('/path/to/file.php:42')).toBe(true);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('Test PHP Regex', async () => {
|
|
||||||
const regex1 = /^(.*error):\s+\s+(.+) in (.+) on line (\d+)$/;
|
|
||||||
const regex2 = /^(.*Warning|.*Deprecated|.*Notice):\s+\s+(.+) in (.+) on line (\d+)$/;
|
|
||||||
expect(
|
|
||||||
regex1.test('PHP Parse error: error_message in file.php on line 10')
|
|
||||||
).toBe(true);
|
|
||||||
expect(
|
|
||||||
regex2.test('PHP Notice: info_message in file.php on line 10')
|
|
||||||
).toBe(true);
|
|
||||||
expect(
|
|
||||||
regex2.test('PHP Warning: warning_message in file.php on line 10')
|
|
||||||
).toBe(true);
|
|
||||||
expect(
|
|
||||||
regex2.test('PHP Deprecated: deprecated_message in file.php on line 10')
|
|
||||||
).toBe(true);
|
|
||||||
});
|
|
||||||
});
|
|
File diff suppressed because it is too large
Load Diff
@ -17,23 +17,69 @@ async function cleanup(path: string): Promise<void> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
describe('Utils tests', () => {
|
describe('Utils tests', () => {
|
||||||
|
it('checking readEnv', async () => {
|
||||||
|
process.env['test'] = 'setup-php';
|
||||||
|
process.env['test-hyphen'] = 'setup-php';
|
||||||
|
expect(await utils.readEnv('test')).toBe('setup-php');
|
||||||
|
expect(await utils.readEnv('TEST')).toBe('setup-php');
|
||||||
|
expect(await utils.readEnv('test_hyphen')).toBe('setup-php');
|
||||||
|
expect(await utils.readEnv('TEST_HYPHEN')).toBe('setup-php');
|
||||||
|
expect(await utils.readEnv('undefined')).toBe('');
|
||||||
|
});
|
||||||
|
|
||||||
it('checking getInput', async () => {
|
it('checking getInput', async () => {
|
||||||
process.env['test'] = 'setup-php';
|
process.env['test'] = 'setup-php';
|
||||||
process.env['undefined'] = '';
|
|
||||||
expect(await utils.getInput('test', false)).toBe('setup-php');
|
expect(await utils.getInput('test', false)).toBe('setup-php');
|
||||||
expect(await utils.getInput('undefined', false)).toBe('');
|
|
||||||
expect(await utils.getInput('setup-php', false)).toBe('setup-php');
|
expect(await utils.getInput('setup-php', false)).toBe('setup-php');
|
||||||
expect(await utils.getInput('DoesNotExist', false)).toBe('');
|
expect(await utils.getInput('DoesNotExist', false)).toBe('');
|
||||||
|
await expect(async () => {
|
||||||
|
await utils.getInput('DoesNotExist', true);
|
||||||
|
}).rejects.toThrow('Input required and not supplied: DoesNotExist');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking fetch', async () => {
|
||||||
|
const manifest = await utils.getManifestURL();
|
||||||
|
let response: Record<string, string> = await utils.fetch(manifest);
|
||||||
|
expect(response.error).toBe(undefined);
|
||||||
|
expect(response.data).toContain('latest');
|
||||||
|
|
||||||
|
response = await utils.fetch(manifest, 'invalid_token');
|
||||||
|
expect(response.error).not.toBe(undefined);
|
||||||
|
expect(response.data).toBe(undefined);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking getManifestURL', async () => {
|
||||||
|
expect(await utils.getManifestURL()).toContain('php-versions.json');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking parseVersion', async () => {
|
||||||
|
jest
|
||||||
|
.spyOn(utils, 'fetch')
|
||||||
|
.mockImplementation(
|
||||||
|
async (url, token?): Promise<Record<string, string>> => {
|
||||||
|
if (!token || token === 'valid_token') {
|
||||||
|
return {data: `{ "latest": "8.0", "5.x": "5.6", "url": "${url}" }`};
|
||||||
|
} else {
|
||||||
|
return {error: 'Invalid token'};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
expect(await utils.parseVersion('latest')).toBe('8.0');
|
||||||
|
expect(await utils.parseVersion('7')).toBe('7.0');
|
||||||
|
expect(await utils.parseVersion('7.4')).toBe('7.4');
|
||||||
|
expect(await utils.parseVersion('5.x')).toBe('5.6');
|
||||||
|
expect(await utils.parseVersion('4.x')).toBe(undefined);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('checking asyncForEach', async () => {
|
it('checking asyncForEach', async () => {
|
||||||
const array: Array<string> = ['a', 'b', 'c'];
|
const array: Array<string> = ['a', 'b', 'c'];
|
||||||
let concat = '';
|
let concat = '';
|
||||||
await utils.asyncForEach(array, async function (
|
await utils.asyncForEach(
|
||||||
str: string
|
array,
|
||||||
): Promise<void> {
|
async function (str: string): Promise<void> {
|
||||||
concat += str;
|
concat += str;
|
||||||
});
|
}
|
||||||
|
);
|
||||||
expect(concat).toBe('abc');
|
expect(concat).toBe('abc');
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -44,7 +90,7 @@ describe('Utils tests', () => {
|
|||||||
expect(await utils.color('warning')).toBe('33');
|
expect(await utils.color('warning')).toBe('33');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('checking readScripts', async () => {
|
it('checking readFile', async () => {
|
||||||
const darwin: string = fs.readFileSync(
|
const darwin: string = fs.readFileSync(
|
||||||
path.join(__dirname, '../src/scripts/darwin.sh'),
|
path.join(__dirname, '../src/scripts/darwin.sh'),
|
||||||
'utf8'
|
'utf8'
|
||||||
@ -57,12 +103,12 @@ describe('Utils tests', () => {
|
|||||||
path.join(__dirname, '../src/scripts/win32.ps1'),
|
path.join(__dirname, '../src/scripts/win32.ps1'),
|
||||||
'utf8'
|
'utf8'
|
||||||
);
|
);
|
||||||
expect(await utils.readScript('darwin.sh')).toBe(darwin);
|
expect(await utils.readFile('darwin.sh', 'src/scripts')).toBe(darwin);
|
||||||
expect(await utils.readScript('darwin.sh')).toBe(darwin);
|
expect(await utils.readFile('darwin.sh', 'src/scripts')).toBe(darwin);
|
||||||
expect(await utils.readScript('linux.sh')).toBe(linux);
|
expect(await utils.readFile('linux.sh', 'src/scripts')).toBe(linux);
|
||||||
expect(await utils.readScript('linux.sh')).toBe(linux);
|
expect(await utils.readFile('linux.sh', 'src/scripts')).toBe(linux);
|
||||||
expect(await utils.readScript('win32.ps1')).toBe(win32);
|
expect(await utils.readFile('win32.ps1', 'src/scripts')).toBe(win32);
|
||||||
expect(await utils.readScript('win32.ps1')).toBe(win32);
|
expect(await utils.readFile('win32.ps1', 'src/scripts')).toBe(win32);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('checking writeScripts', async () => {
|
it('checking writeScripts', async () => {
|
||||||
@ -70,22 +116,19 @@ describe('Utils tests', () => {
|
|||||||
const runner_dir: string = process.env['RUNNER_TOOL_CACHE'] || '';
|
const runner_dir: string = process.env['RUNNER_TOOL_CACHE'] || '';
|
||||||
const script_path: string = path.join(runner_dir, 'test.sh');
|
const script_path: string = path.join(runner_dir, 'test.sh');
|
||||||
await utils.writeScript('test.sh', testString);
|
await utils.writeScript('test.sh', testString);
|
||||||
await fs.readFile(script_path, function (
|
await fs.readFile(
|
||||||
error: Error | null,
|
script_path,
|
||||||
data: Buffer
|
function (error: Error | null, data: Buffer) {
|
||||||
) {
|
|
||||||
expect(testString).toBe(data.toString());
|
expect(testString).toBe(data.toString());
|
||||||
});
|
}
|
||||||
|
);
|
||||||
await cleanup(script_path);
|
await cleanup(script_path);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('checking extensionArray', async () => {
|
it('checking extensionArray', async () => {
|
||||||
expect(await utils.extensionArray('a, b, php_c, php-d')).toEqual([
|
expect(
|
||||||
'a',
|
await utils.extensionArray('a, :b, php_c, none, php-d, Zend e, :Zend f')
|
||||||
'b',
|
).toEqual(['none', 'a', ':b', 'c', 'd', 'e', ':f']);
|
||||||
'c',
|
|
||||||
'd'
|
|
||||||
]);
|
|
||||||
|
|
||||||
expect(await utils.extensionArray('')).toEqual([]);
|
expect(await utils.extensionArray('')).toEqual([]);
|
||||||
expect(await utils.extensionArray(' ')).toEqual([]);
|
expect(await utils.extensionArray(' ')).toEqual([]);
|
||||||
@ -97,6 +140,20 @@ describe('Utils tests', () => {
|
|||||||
'b=2',
|
'b=2',
|
||||||
'c=3'
|
'c=3'
|
||||||
]);
|
]);
|
||||||
|
expect(await utils.CSVArray('\'a=1,2\', "b=3, 4", c=5, d=~e~')).toEqual([
|
||||||
|
'a=1,2',
|
||||||
|
'b=3, 4',
|
||||||
|
'c=5',
|
||||||
|
"d='~e~'"
|
||||||
|
]);
|
||||||
|
expect(await utils.CSVArray('a=\'1,2\', b="3, 4", c=5')).toEqual([
|
||||||
|
'a=1,2',
|
||||||
|
'b=3, 4',
|
||||||
|
'c=5'
|
||||||
|
]);
|
||||||
|
expect(
|
||||||
|
await utils.CSVArray('a=E_ALL, b=E_ALL & ~ E_ALL, c="E_ALL", d=\'E_ALL\'')
|
||||||
|
).toEqual(['a=E_ALL', 'b=E_ALL & ~ E_ALL', 'c=E_ALL', 'd=E_ALL']);
|
||||||
expect(await utils.CSVArray('')).toEqual([]);
|
expect(await utils.CSVArray('')).toEqual([]);
|
||||||
expect(await utils.CSVArray(' ')).toEqual([]);
|
expect(await utils.CSVArray(' ')).toEqual([]);
|
||||||
});
|
});
|
||||||
@ -131,8 +188,8 @@ describe('Utils tests', () => {
|
|||||||
expect(step_log).toEqual('step_log "Test message"');
|
expect(step_log).toEqual('step_log "Test message"');
|
||||||
step_log = await utils.stepLog(message, 'darwin');
|
step_log = await utils.stepLog(message, 'darwin');
|
||||||
expect(step_log).toEqual('step_log "Test message"');
|
expect(step_log).toEqual('step_log "Test message"');
|
||||||
step_log = await utils.stepLog(message, 'fedora');
|
step_log = await utils.stepLog(message, 'openbsd');
|
||||||
expect(step_log).toContain('Platform fedora is not supported');
|
expect(step_log).toContain('Platform openbsd is not supported');
|
||||||
|
|
||||||
let add_log: string = await utils.addLog(
|
let add_log: string = await utils.addLog(
|
||||||
'tick',
|
'tick',
|
||||||
@ -145,8 +202,8 @@ describe('Utils tests', () => {
|
|||||||
expect(add_log).toEqual('add_log "tick" "xdebug" "enabled"');
|
expect(add_log).toEqual('add_log "tick" "xdebug" "enabled"');
|
||||||
add_log = await utils.addLog('tick', 'xdebug', 'enabled', 'darwin');
|
add_log = await utils.addLog('tick', 'xdebug', 'enabled', 'darwin');
|
||||||
expect(add_log).toEqual('add_log "tick" "xdebug" "enabled"');
|
expect(add_log).toEqual('add_log "tick" "xdebug" "enabled"');
|
||||||
add_log = await utils.addLog('tick', 'xdebug', 'enabled', 'fedora');
|
add_log = await utils.addLog('tick', 'xdebug', 'enabled', 'openbsd');
|
||||||
expect(add_log).toContain('Platform fedora is not supported');
|
expect(add_log).toContain('Platform openbsd is not supported');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('checking getExtensionPrefix', async () => {
|
it('checking getExtensionPrefix', async () => {
|
||||||
@ -163,8 +220,85 @@ describe('Utils tests', () => {
|
|||||||
expect(await utils.suppressOutput('win32')).toEqual(' >$null 2>&1');
|
expect(await utils.suppressOutput('win32')).toEqual(' >$null 2>&1');
|
||||||
expect(await utils.suppressOutput('linux')).toEqual(' >/dev/null 2>&1');
|
expect(await utils.suppressOutput('linux')).toEqual(' >/dev/null 2>&1');
|
||||||
expect(await utils.suppressOutput('darwin')).toEqual(' >/dev/null 2>&1');
|
expect(await utils.suppressOutput('darwin')).toEqual(' >/dev/null 2>&1');
|
||||||
expect(await utils.suppressOutput('fedora')).toContain(
|
expect(await utils.suppressOutput('openbsd')).toContain(
|
||||||
'Platform fedora is not supported'
|
'Platform openbsd is not supported'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking getUnsupportedLog', async () => {
|
||||||
|
expect(await utils.getUnsupportedLog('ext', '5.6', 'linux')).toContain(
|
||||||
|
'add_log "$cross" "ext" "ext is not supported on PHP 5.6"'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking getCommand', async () => {
|
||||||
|
expect(await utils.getCommand('linux', '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('openbsd', 'tool')).toContain(
|
||||||
|
'Platform openbsd is not supported'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking joins', async () => {
|
||||||
|
expect(await utils.joins('a', 'b', 'c')).toBe('a b c');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking scriptExtension', async () => {
|
||||||
|
expect(await utils.scriptExtension('linux')).toBe('.sh');
|
||||||
|
expect(await utils.scriptExtension('darwin')).toBe('.sh');
|
||||||
|
expect(await utils.scriptExtension('win32')).toBe('.ps1');
|
||||||
|
expect(await utils.scriptExtension('openbsd')).toContain(
|
||||||
|
'Platform openbsd is not supported'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking scriptTool', async () => {
|
||||||
|
expect(await utils.scriptTool('linux')).toBe('bash');
|
||||||
|
expect(await utils.scriptTool('darwin')).toBe('bash');
|
||||||
|
expect(await utils.scriptTool('win32')).toBe('pwsh');
|
||||||
|
expect(await utils.scriptTool('openbsd')).toContain(
|
||||||
|
'Platform openbsd is not supported'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking customPackage', async () => {
|
||||||
|
const script_path: string = path.join('ext', 'pkg.sh');
|
||||||
|
expect(await utils.customPackage('pkg', 'ext', '1.2.3', 'linux')).toContain(
|
||||||
|
script_path + '\nadd_pkg 1.2.3'
|
||||||
|
);
|
||||||
|
expect(
|
||||||
|
await utils.customPackage('pdo_pkg', 'ext', '1.2.3', 'linux')
|
||||||
|
).toContain(script_path + '\nadd_pkg 1.2.3');
|
||||||
|
expect(
|
||||||
|
await utils.customPackage('pkg8', 'ext', '1.2.3', 'linux')
|
||||||
|
).toContain(script_path + '\nadd_pkg 1.2.3');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking parseExtensionSource', async () => {
|
||||||
|
expect(
|
||||||
|
await utils.parseExtensionSource(
|
||||||
|
'ext-org-name/repo-name@release',
|
||||||
|
'extension'
|
||||||
|
)
|
||||||
|
).toContain(
|
||||||
|
'\nadd_extension_from_source ext https://github.com org-name repo-name release extension'
|
||||||
|
);
|
||||||
|
expect(
|
||||||
|
await utils.parseExtensionSource(
|
||||||
|
'ext-https://sub.domain.tld/org/repo@release',
|
||||||
|
'extension'
|
||||||
|
)
|
||||||
|
).toContain(
|
||||||
|
'\nadd_extension_from_source ext https://sub.domain.tld org repo release extension'
|
||||||
|
);
|
||||||
|
expect(
|
||||||
|
await utils.parseExtensionSource(
|
||||||
|
'ext-https://sub.domain.XN--tld/org/repo@release',
|
||||||
|
'extension'
|
||||||
|
)
|
||||||
|
).toContain(
|
||||||
|
'\nadd_extension_from_source ext https://sub.domain.XN--tld org repo release extension'
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
name: 'Setup PHP Action'
|
name: 'Setup PHP Action'
|
||||||
author: shivammathur
|
author: shivammathur
|
||||||
description: 'Setup PHP with required extensions, php.ini configuration, code-coverage support and various tools like composer'
|
description: 'GitHub Action for PHP'
|
||||||
branding:
|
branding:
|
||||||
color: 'purple'
|
color: 'purple'
|
||||||
icon: 'play-circle'
|
icon: 'play-circle'
|
||||||
inputs:
|
inputs:
|
||||||
php-version:
|
php-version:
|
||||||
description: 'Setup PHP version.'
|
description: 'Setup PHP version.'
|
||||||
default: '7.4'
|
default: '8.0'
|
||||||
required: true
|
required: true
|
||||||
extensions:
|
extensions:
|
||||||
description: 'Setup PHP extensions.'
|
description: 'Setup PHP extensions.'
|
||||||
@ -21,6 +21,9 @@ inputs:
|
|||||||
tools:
|
tools:
|
||||||
description: 'Setup popular tools globally.'
|
description: 'Setup popular tools globally.'
|
||||||
required: false
|
required: false
|
||||||
|
outputs:
|
||||||
|
php-version:
|
||||||
|
description: 'PHP version in semver format'
|
||||||
runs:
|
runs:
|
||||||
using: 'node12'
|
using: 'node12'
|
||||||
main: 'dist/index.js'
|
main: 'dist/index.js'
|
||||||
|
4586
dist/index.js
vendored
4586
dist/index.js
vendored
File diff suppressed because it is too large
Load Diff
@ -17,11 +17,11 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- uses: actions/cache@v2
|
- uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
@ -25,7 +25,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
extensions: blackfire
|
extensions: blackfire
|
||||||
tools: blackfire #Setup Blackfire client and agent
|
tools: blackfire #Setup Blackfire cli
|
||||||
coverage: none
|
coverage: none
|
||||||
- name: Profile
|
- name: Profile
|
||||||
run: blackfire run php my-script.php # Refer to https://blackfire.io/docs/cookbooks/profiling-cli
|
run: blackfire run php my-script.php # Refer to https://blackfire.io/docs/cookbooks/profiling-cli
|
||||||
|
@ -37,12 +37,12 @@ jobs:
|
|||||||
- name: Start mysql service
|
- name: Start mysql service
|
||||||
run: sudo /etc/init.d/mysql start
|
run: sudo /etc/init.d/mysql start
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
@ -70,12 +70,12 @@ jobs:
|
|||||||
php-version: '7.3'
|
php-version: '7.3'
|
||||||
extensions: mbstring, intl
|
extensions: mbstring, intl
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
@ -98,12 +98,12 @@ jobs:
|
|||||||
extensions: mbstring, intl
|
extensions: mbstring, intl
|
||||||
tools: phpstan
|
tools: phpstan
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
@ -35,12 +35,12 @@ jobs:
|
|||||||
extensions: mbstring, intl, redis, pdo_pgsql
|
extensions: mbstring, intl, redis, pdo_pgsql
|
||||||
coverage: pcov
|
coverage: pcov
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
@ -68,12 +68,12 @@ jobs:
|
|||||||
php-version: '7.3'
|
php-version: '7.3'
|
||||||
extensions: mbstring, intl
|
extensions: mbstring, intl
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
@ -96,12 +96,12 @@ jobs:
|
|||||||
extensions: mbstring, intl
|
extensions: mbstring, intl
|
||||||
tools: phpstan
|
tools: phpstan
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
@ -19,12 +19,12 @@ jobs:
|
|||||||
extensions: mbstring, intl, pdo_sqlite, pdo_mysql
|
extensions: mbstring, intl, pdo_sqlite, pdo_mysql
|
||||||
coverage: pcov #optional
|
coverage: pcov #optional
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
@ -48,12 +48,12 @@ jobs:
|
|||||||
php-version: '7.3'
|
php-version: '7.3'
|
||||||
extensions: mbstring, intl
|
extensions: mbstring, intl
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
@ -76,12 +76,12 @@ jobs:
|
|||||||
extensions: mbstring, intl
|
extensions: mbstring, intl
|
||||||
tools: phpstan
|
tools: phpstan
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
@ -18,12 +18,12 @@ jobs:
|
|||||||
extensions: mbstring, intl, curl, dom
|
extensions: mbstring, intl, curl, dom
|
||||||
coverage: xdebug #optional
|
coverage: xdebug #optional
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
@ -44,12 +44,12 @@ jobs:
|
|||||||
- name: Start mysql service
|
- name: Start mysql service
|
||||||
run: sudo /etc/init.d/mysql start
|
run: sudo /etc/init.d/mysql start
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
@ -44,12 +44,12 @@ jobs:
|
|||||||
extensions: mbstring, dom, fileinfo, pgsql
|
extensions: mbstring, dom, fileinfo, pgsql
|
||||||
coverage: xdebug #optional
|
coverage: xdebug #optional
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
@ -20,12 +20,12 @@ jobs:
|
|||||||
extensions: mbstring, dom, fileinfo
|
extensions: mbstring, dom, fileinfo
|
||||||
coverage: xdebug #optional
|
coverage: xdebug #optional
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
@ -44,12 +44,12 @@ jobs:
|
|||||||
- name: Start mysql service
|
- name: Start mysql service
|
||||||
run: sudo /etc/init.d/mysql start
|
run: sudo /etc/init.d/mysql start
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
@ -44,12 +44,12 @@ jobs:
|
|||||||
extensions: mbstring, dom, fileinfo, pgsql
|
extensions: mbstring, dom, fileinfo, pgsql
|
||||||
coverage: xdebug #optional
|
coverage: xdebug #optional
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
@ -20,12 +20,12 @@ jobs:
|
|||||||
extensions: mbstring, dom, fileinfo, mysql
|
extensions: mbstring, dom, fileinfo, mysql
|
||||||
coverage: xdebug #optional
|
coverage: xdebug #optional
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
@ -44,12 +44,12 @@ jobs:
|
|||||||
- name: Start mysql service
|
- name: Start mysql service
|
||||||
run: sudo /etc/init.d/mysql start
|
run: sudo /etc/init.d/mysql start
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
@ -43,12 +43,12 @@ jobs:
|
|||||||
extensions: mbstring, dom, zip, phalcon4, pgsql #use phalcon3 for the phalcon 3.x
|
extensions: mbstring, dom, zip, phalcon4, pgsql #use phalcon3 for the phalcon 3.x
|
||||||
coverage: xdebug #optional
|
coverage: xdebug #optional
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
@ -33,12 +33,12 @@ jobs:
|
|||||||
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-yarn-
|
restore-keys: ${{ runner.os }}-yarn-
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
@ -18,12 +18,12 @@ jobs:
|
|||||||
extensions: mbstring, simplexml, dom
|
extensions: mbstring, simplexml, dom
|
||||||
coverage: xdebug #optional
|
coverage: xdebug #optional
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
@ -26,30 +26,32 @@ jobs:
|
|||||||
uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php
|
uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
|
tools: phpunit-bridge
|
||||||
extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite, mysql
|
extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite, mysql
|
||||||
coverage: xdebug #optional
|
coverage: xdebug #optional
|
||||||
- name: Start mysql service
|
- name: Start mysql service
|
||||||
run: sudo /etc/init.d/mysql start
|
run: sudo /etc/init.d/mysql start
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
- name: Install Composer dependencies
|
- name: Install Composer dependencies
|
||||||
run: |
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
composer install --no-progress --prefer-dist --optimize-autoloader
|
|
||||||
- name: Run Migration
|
- name: Run Migration
|
||||||
run: |
|
run: |
|
||||||
composer require symfony/orm-pack
|
composer require --dev symfony/orm-pack
|
||||||
php bin/console doctrine:schema:update --force || echo "No migrations found or schema update failed"
|
php bin/console doctrine:schema:update --force || echo "No migrations found or schema update failed"
|
||||||
php bin/console doctrine:migrations:migrate || echo "No migrations found or migration failed"
|
php bin/console doctrine:migrations:migrate || echo "No migrations found or migration failed"
|
||||||
env:
|
env:
|
||||||
DATABASE_URL: mysql://root:symfony@127.0.0.1:${{ job.services.mysql.ports['3306'] }}/symfony
|
DATABASE_URL: mysql://root:symfony@127.0.0.1:${{ job.services.mysql.ports['3306'] }}/symfony
|
||||||
- name: Run Tests
|
- name: Install PHPUnit
|
||||||
run: php bin/phpunit --coverage-text
|
run: simple-phpunit install
|
||||||
|
- name: Run tests
|
||||||
|
run: simple-phpunit --coverage-text
|
||||||
|
@ -26,28 +26,30 @@ jobs:
|
|||||||
uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php
|
uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
|
tools: phpunit-bridge
|
||||||
extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite, pgsql
|
extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite, pgsql
|
||||||
coverage: xdebug #optional
|
coverage: xdebug #optional
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
- name: Install Composer dependencies
|
- name: Install Composer dependencies
|
||||||
run: |
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
composer install --no-progress --prefer-dist --optimize-autoloader
|
|
||||||
- name: Run Migration
|
- name: Run Migration
|
||||||
run: |
|
run: |
|
||||||
composer require symfony/orm-pack
|
composer require --dev symfony/orm-pack
|
||||||
php bin/console doctrine:schema:update --force || echo "No migrations found or schema update failed"
|
php bin/console doctrine:schema:update --force || echo "No migrations found or schema update failed"
|
||||||
php bin/console doctrine:migrations:migrate || echo "No migrations found or migration failed"
|
php bin/console doctrine:migrations:migrate || echo "No migrations found or migration failed"
|
||||||
env:
|
env:
|
||||||
DATABASE_URL: postgres://postgres:postgres@127.0.0.1:${{ job.services.postgres.ports[5432] }}/postgres?charset=UTF-8
|
DATABASE_URL: postgres://postgres:postgres@127.0.0.1:${{ job.services.postgres.ports[5432] }}/postgres?charset=UTF-8
|
||||||
- name: Run Tests
|
- name: Install PHPUnit
|
||||||
run: php bin/phpunit --coverage-text
|
run: simple-phpunit install
|
||||||
|
- name: Run tests
|
||||||
|
run: simple-phpunit --coverage-text
|
||||||
|
@ -17,22 +17,23 @@ jobs:
|
|||||||
uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php
|
uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
|
tools: phpunit-bridge
|
||||||
extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite
|
extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite
|
||||||
coverage: xdebug #optional
|
coverage: xdebug #optional
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
- name: Install Composer dependencies
|
- name: Install Composer dependencies
|
||||||
run: |
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
composer require symfony/orm-pack
|
- name: Install PHPUnit
|
||||||
composer install --no-progress --prefer-dist --optimize-autoloader
|
run: simple-phpunit install
|
||||||
- name: Run Tests
|
- name: Run tests
|
||||||
run: php bin/phpunit --coverage-text
|
run: simple-phpunit --coverage-text
|
||||||
|
@ -41,12 +41,12 @@ jobs:
|
|||||||
- name: Start mysql service
|
- name: Start mysql service
|
||||||
run: sudo /etc/init.d/mysql start
|
run: sudo /etc/init.d/mysql start
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
@ -39,12 +39,12 @@ jobs:
|
|||||||
extensions: mbstring, intl, gd, imagick, zip, dom, pgsql
|
extensions: mbstring, intl, gd, imagick, zip, dom, pgsql
|
||||||
coverage: xdebug #optional
|
coverage: xdebug #optional
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
@ -18,12 +18,12 @@ jobs:
|
|||||||
extensions: mbstring, bcmath, curl, intl
|
extensions: mbstring, bcmath, curl, intl
|
||||||
coverage: xdebug #optional
|
coverage: xdebug #optional
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
12454
package-lock.json
generated
12454
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
63
package.json
63
package.json
@ -1,15 +1,25 @@
|
|||||||
{
|
{
|
||||||
"name": "setup-php",
|
"name": "setup-php",
|
||||||
"version": "2.3.1",
|
"version": "2.14.0",
|
||||||
"private": false,
|
"private": false,
|
||||||
"description": "Setup PHP for use with GitHub Actions",
|
"description": "Setup PHP for use with GitHub Actions",
|
||||||
"main": "dist/index.js",
|
"main": "lib/install.js",
|
||||||
|
"types": "lib/install.d.ts",
|
||||||
|
"directories": {
|
||||||
|
"lib": "lib",
|
||||||
|
"test": "__tests__",
|
||||||
|
"src": "src"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"lib",
|
||||||
|
"src"
|
||||||
|
],
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "tsc",
|
"build": "tsc",
|
||||||
"lint": "eslint **/*.ts --cache",
|
"lint": "eslint **/src/*.ts --cache --fix",
|
||||||
"format": "prettier --write **/*.ts && git add .",
|
"format": "prettier --write **/src/*.ts && git add .",
|
||||||
"format-check": "prettier --check **/*.ts",
|
"format-check": "prettier --check **/src/*.ts",
|
||||||
"release": "ncc build src/install.ts -o dist && git add -f dist/",
|
"release": "ncc build -o dist && git add -f dist/",
|
||||||
"test": "jest"
|
"test": "jest"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
@ -24,28 +34,31 @@
|
|||||||
"author": "shivammathur",
|
"author": "shivammathur",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/core": "^1.2.4",
|
"@actions/core": "^1.5.0",
|
||||||
"@actions/exec": "^1.0.4",
|
"@actions/exec": "^1.1.0",
|
||||||
"@actions/io": "^1.0.2",
|
"@actions/io": "^1.1.1",
|
||||||
"fs": "0.0.1-security"
|
"fs": "0.0.1-security"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/jest": "^26.0.0",
|
"@types/jest": "^27.0.1",
|
||||||
"@types/node": "^14.0.13",
|
"@types/node": "^16.9.1",
|
||||||
"@typescript-eslint/eslint-plugin": "^3.3.0",
|
"@typescript-eslint/eslint-plugin": "^4.31.0",
|
||||||
"@typescript-eslint/parser": "^3.3.0",
|
"@typescript-eslint/parser": "^4.31.0",
|
||||||
"@zeit/ncc": "^0.22.3",
|
"@vercel/ncc": "^0.31.0",
|
||||||
"eslint": "^7.2.0",
|
"eslint": "^7.32.0",
|
||||||
"eslint-config-prettier": "^6.11.0",
|
"eslint-config-prettier": "^8.3.0",
|
||||||
"eslint-plugin-import": "^2.21.2",
|
"eslint-plugin-import": "^2.24.2",
|
||||||
"eslint-plugin-jest": "^23.13.2",
|
"eslint-plugin-jest": "^24.4.0",
|
||||||
"eslint-plugin-prettier": "^3.1.4",
|
"eslint-plugin-prettier": "^4.0.0",
|
||||||
"husky": "^4.2.5",
|
"husky": "^4.3.8",
|
||||||
"jest": "^26.0.1",
|
"jest": "^27.1.1",
|
||||||
"jest-circus": "^26.0.1",
|
"jest-circus": "^27.1.1",
|
||||||
"prettier": "^2.0.5",
|
"prettier": "^2.4.0",
|
||||||
"ts-jest": "^26.1.0",
|
"ts-jest": "^27.0.5",
|
||||||
"typescript": "^3.9.5"
|
"typescript": "^4.4.3"
|
||||||
|
},
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/shivammathur/setup-php/issues"
|
||||||
},
|
},
|
||||||
"husky": {
|
"husky": {
|
||||||
"skipCI": true,
|
"skipCI": true,
|
||||||
|
@ -14,7 +14,12 @@ export async function addINIValuesUnix(
|
|||||||
script +=
|
script +=
|
||||||
'\n' + (await utils.addLog('$tick', line, 'Added to php.ini', 'linux'));
|
'\n' + (await utils.addLog('$tick', line, 'Added to php.ini', 'linux'));
|
||||||
});
|
});
|
||||||
return 'echo "' + ini_values.join('\n') + '" >> $ini_file' + script;
|
return (
|
||||||
|
'echo "' +
|
||||||
|
ini_values.join('\n') +
|
||||||
|
'" | sudo tee -a "${pecl_file:-${ini_file[@]}}" >/dev/null 2>&1' +
|
||||||
|
script
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,58 +0,0 @@
|
|||||||
variants:
|
|
||||||
dev:
|
|
||||||
bcmath:
|
|
||||||
calendar:
|
|
||||||
cli:
|
|
||||||
ctype:
|
|
||||||
dom:
|
|
||||||
fileinfo:
|
|
||||||
filter:
|
|
||||||
ipc:
|
|
||||||
iconv:
|
|
||||||
json:
|
|
||||||
mbregex:
|
|
||||||
mbstring:
|
|
||||||
mhash:
|
|
||||||
mcrypt:
|
|
||||||
pcntl:
|
|
||||||
pcre:
|
|
||||||
pdo:
|
|
||||||
phar:
|
|
||||||
posix:
|
|
||||||
sockets:
|
|
||||||
tokenizer:
|
|
||||||
xml:
|
|
||||||
curl:
|
|
||||||
openssl:
|
|
||||||
zip:
|
|
||||||
gd:
|
|
||||||
- --with-freetype
|
|
||||||
- --with-pdo-mysql=mysqlnd
|
|
||||||
- --with-mysqli=mysqlnd
|
|
||||||
- --with-pgsql
|
|
||||||
- --with-pdo-pgsql
|
|
||||||
- --with-gmp=/usr/local/opt/gmp
|
|
||||||
- --with-openssl
|
|
||||||
- --with-pear
|
|
||||||
- --with-zip
|
|
||||||
- --with-libxml
|
|
||||||
- --with-kerberos
|
|
||||||
- --with-gd
|
|
||||||
- --with-ffi
|
|
||||||
- --with-curl
|
|
||||||
- --with-mhash
|
|
||||||
- --with-readline=/usr/local/opt/readline
|
|
||||||
- --with-iconv=/usr/local/opt/libiconv
|
|
||||||
- --with-icu-dir=/usr/local/opt/icu4c
|
|
||||||
- --with-config-file-path=/etc
|
|
||||||
- --enable-intl
|
|
||||||
- --enable-xml
|
|
||||||
- --enable-sysvsem
|
|
||||||
- --enable-sysvshm
|
|
||||||
- --enable-sysvmsg
|
|
||||||
- --enable-phpdbg
|
|
||||||
- --enable-exif
|
|
||||||
- --enable-gd
|
|
||||||
- --enable-soap
|
|
||||||
- --enable-xmlreader
|
|
||||||
- --enable-zend-test=shared
|
|
17
src/configs/os_releases.csv
Normal file
17
src/configs/os_releases.csv
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
8,jessie
|
||||||
|
9,stretch
|
||||||
|
10,buster
|
||||||
|
11,bullseye
|
||||||
|
12,bookworm
|
||||||
|
16.04 LTS,xenial
|
||||||
|
16.10,yakkety
|
||||||
|
17.04,zesty
|
||||||
|
17.10,artful
|
||||||
|
18.04 LTS,bionic
|
||||||
|
18.10,cosmic
|
||||||
|
19.04,disco
|
||||||
|
19.10,eoan
|
||||||
|
20.04 LTS,focal
|
||||||
|
20.10,groovy
|
||||||
|
21.04,hirsute
|
||||||
|
21.10,impish
|
|
7
src/configs/php-versions.json
Normal file
7
src/configs/php-versions.json
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"latest": "8.0",
|
||||||
|
"nightly": "8.2",
|
||||||
|
"5.x": "5.6",
|
||||||
|
"7.x": "7.4",
|
||||||
|
"8.x": "8.0"
|
||||||
|
}
|
236
src/configs/tools.json
Normal file
236
src/configs/tools.json
Normal file
@ -0,0 +1,236 @@
|
|||||||
|
{
|
||||||
|
"composer-normalize": {
|
||||||
|
"type": "phar",
|
||||||
|
"repository": "ergebnis/composer-normalize",
|
||||||
|
"extension": ".phar",
|
||||||
|
"domain": "https://github.com",
|
||||||
|
"version_prefix": "",
|
||||||
|
"version_parameter": "-V"
|
||||||
|
},
|
||||||
|
"cs2pr": {
|
||||||
|
"type": "phar",
|
||||||
|
"repository": "staabm/annotate-pull-request-from-checkstyle",
|
||||||
|
"extension": "",
|
||||||
|
"domain": "https://github.com",
|
||||||
|
"version_prefix": "",
|
||||||
|
"version_parameter": "-V"
|
||||||
|
},
|
||||||
|
"infection": {
|
||||||
|
"type": "phar",
|
||||||
|
"repository": "infection/infection",
|
||||||
|
"extension": ".phar",
|
||||||
|
"domain": "https://github.com",
|
||||||
|
"version_prefix": "",
|
||||||
|
"version_parameter": "-V"
|
||||||
|
},
|
||||||
|
"phan": {
|
||||||
|
"type": "phar",
|
||||||
|
"repository": "phan/phan",
|
||||||
|
"extension": ".phar",
|
||||||
|
"domain": "https://github.com",
|
||||||
|
"version_prefix": "",
|
||||||
|
"version_parameter": "-v"
|
||||||
|
},
|
||||||
|
"php-cs-fixer": {
|
||||||
|
"type": "phar",
|
||||||
|
"repository": "FriendsOfPHP/PHP-CS-Fixer",
|
||||||
|
"extension": ".phar",
|
||||||
|
"domain": "https://github.com",
|
||||||
|
"fetch_latest": "true",
|
||||||
|
"version_prefix": "v",
|
||||||
|
"version_parameter": "-V"
|
||||||
|
},
|
||||||
|
"phpcbf": {
|
||||||
|
"type": "phar",
|
||||||
|
"repository": "squizlabs/PHP_CodeSniffer",
|
||||||
|
"extension": ".phar",
|
||||||
|
"domain": "https://github.com",
|
||||||
|
"version_prefix": "",
|
||||||
|
"version_parameter": "--version"
|
||||||
|
},
|
||||||
|
"phpcs": {
|
||||||
|
"type": "phar",
|
||||||
|
"repository": "squizlabs/PHP_CodeSniffer",
|
||||||
|
"extension": ".phar",
|
||||||
|
"domain": "https://github.com",
|
||||||
|
"version_prefix": "",
|
||||||
|
"version_parameter": "--version"
|
||||||
|
},
|
||||||
|
"phpmd": {
|
||||||
|
"type": "phar",
|
||||||
|
"repository": "phpmd/phpmd",
|
||||||
|
"extension": ".phar",
|
||||||
|
"domain": "https://github.com",
|
||||||
|
"version_prefix": "",
|
||||||
|
"version_parameter": "--version"
|
||||||
|
},
|
||||||
|
"phpstan": {
|
||||||
|
"type": "phar",
|
||||||
|
"repository": "phpstan/phpstan",
|
||||||
|
"extension": ".phar",
|
||||||
|
"domain": "https://github.com",
|
||||||
|
"version_prefix": "",
|
||||||
|
"version_parameter": "-V"
|
||||||
|
},
|
||||||
|
"psalm": {
|
||||||
|
"type": "phar",
|
||||||
|
"repository": "vimeo/psalm",
|
||||||
|
"extension": ".phar",
|
||||||
|
"domain": "https://github.com",
|
||||||
|
"version_prefix": "",
|
||||||
|
"version_parameter": "-v"
|
||||||
|
},
|
||||||
|
"behat": {
|
||||||
|
"type": "composer",
|
||||||
|
"repository": "behat/behat"
|
||||||
|
},
|
||||||
|
"codeception": {
|
||||||
|
"type": "composer",
|
||||||
|
"repository": "codeception/codeception"
|
||||||
|
},
|
||||||
|
"automatic-composer-prefetcher": {
|
||||||
|
"type": "composer",
|
||||||
|
"alias": "composer-prefetcher",
|
||||||
|
"repository": "narrowspark/automatic-composer-prefetcher"
|
||||||
|
},
|
||||||
|
"composer-require-checker": {
|
||||||
|
"type": "composer",
|
||||||
|
"repository": "maglnet/composer-require-checker"
|
||||||
|
},
|
||||||
|
"composer-unused": {
|
||||||
|
"type": "composer",
|
||||||
|
"repository": "icanhazstring/composer-unused"
|
||||||
|
},
|
||||||
|
"flex": {
|
||||||
|
"type": "composer",
|
||||||
|
"repository": "symfony/flex"
|
||||||
|
},
|
||||||
|
"phinx": {
|
||||||
|
"type": "composer",
|
||||||
|
"repository": "robmorgan/phinx"
|
||||||
|
},
|
||||||
|
"phplint": {
|
||||||
|
"type": "composer",
|
||||||
|
"repository": "overtrue/phplint"
|
||||||
|
},
|
||||||
|
"phpspec": {
|
||||||
|
"type": "composer",
|
||||||
|
"repository": "phpspec/phpspec"
|
||||||
|
},
|
||||||
|
"phpunit-bridge": {
|
||||||
|
"alias": "simple-phpunit",
|
||||||
|
"type": "composer",
|
||||||
|
"repository": "symfony/phpunit-bridge"
|
||||||
|
},
|
||||||
|
"prestissimo": {
|
||||||
|
"type": "composer",
|
||||||
|
"repository": "hirak/prestissimo"
|
||||||
|
},
|
||||||
|
"vapor-cli": {
|
||||||
|
"type": "composer",
|
||||||
|
"alias": "vapor",
|
||||||
|
"repository": "laravel/vapor-cli"
|
||||||
|
},
|
||||||
|
"blackfire": {
|
||||||
|
"type": "custom-package",
|
||||||
|
"alias": "blackfire-agent"
|
||||||
|
},
|
||||||
|
"grpc_php_plugin": {
|
||||||
|
"type": "custom-package",
|
||||||
|
"repository": "grpc/grpc",
|
||||||
|
"domain": "https://github.com",
|
||||||
|
"version_prefix": "v"
|
||||||
|
},
|
||||||
|
"protoc": {
|
||||||
|
"type": "custom-package",
|
||||||
|
"repository": "protocolbuffers/protobuf",
|
||||||
|
"domain": "https://github.com",
|
||||||
|
"version_prefix": "v"
|
||||||
|
},
|
||||||
|
"blackfire-player": {
|
||||||
|
"type": "custom-function",
|
||||||
|
"domain": "https://get.blackfire.io",
|
||||||
|
"function": "blackfire_player",
|
||||||
|
"version_prefix": "v",
|
||||||
|
"version_parameter": "-V"
|
||||||
|
},
|
||||||
|
"composer": {
|
||||||
|
"type": "custom-function",
|
||||||
|
"domain": "https://getcomposer.org",
|
||||||
|
"repository": "composer/composer",
|
||||||
|
"function": "composer"
|
||||||
|
},
|
||||||
|
"deployer": {
|
||||||
|
"type": "custom-function",
|
||||||
|
"domain": "https://deployer.org",
|
||||||
|
"repository": "deployphp/deployer",
|
||||||
|
"function": "deployer",
|
||||||
|
"version_prefix": "v",
|
||||||
|
"version_parameter": "-V"
|
||||||
|
},
|
||||||
|
"pecl": {
|
||||||
|
"type": "custom-function",
|
||||||
|
"function": "pecl"
|
||||||
|
},
|
||||||
|
"phing": {
|
||||||
|
"type": "custom-function",
|
||||||
|
"domain": "https://www.phing.info",
|
||||||
|
"repository": "phingofficial/phing",
|
||||||
|
"function": "phing",
|
||||||
|
"extension": ".phar",
|
||||||
|
"version_prefix": "",
|
||||||
|
"version_parameter": "-v"
|
||||||
|
},
|
||||||
|
"phive": {
|
||||||
|
"type": "custom-function",
|
||||||
|
"repository": "phar-io/phive",
|
||||||
|
"domain": "https://phar.io",
|
||||||
|
"function": "phive",
|
||||||
|
"version_prefix": "",
|
||||||
|
"version_parameter": "status"
|
||||||
|
},
|
||||||
|
"phpcpd": {
|
||||||
|
"type": "custom-function",
|
||||||
|
"repository": "sebastianbergmann/phpcpd",
|
||||||
|
"domain": "https://phar.phpunit.de",
|
||||||
|
"function": "phpcpd",
|
||||||
|
"version_prefix": "",
|
||||||
|
"version_parameter": "--version"
|
||||||
|
},
|
||||||
|
"phpunit": {
|
||||||
|
"type": "custom-function",
|
||||||
|
"repository": "sebastianbergmann/phpunit",
|
||||||
|
"domain": "https://phar.phpunit.de",
|
||||||
|
"function": "phpcpd",
|
||||||
|
"version_prefix": "",
|
||||||
|
"version_parameter": "--version"
|
||||||
|
},
|
||||||
|
"phpize": {
|
||||||
|
"type": "custom-function",
|
||||||
|
"function": "dev_tools",
|
||||||
|
"alias": "php-config"
|
||||||
|
},
|
||||||
|
"php-config": {
|
||||||
|
"type": "custom-function",
|
||||||
|
"function": "dev_tools"
|
||||||
|
},
|
||||||
|
"symfony-cli": {
|
||||||
|
"type": "custom-function",
|
||||||
|
"function": "symfony",
|
||||||
|
"alias": "symfony",
|
||||||
|
"domain": "https://github.com",
|
||||||
|
"repository": "symfony/cli",
|
||||||
|
"version_prefix": "v",
|
||||||
|
"version_parameter": "version"
|
||||||
|
},
|
||||||
|
"wp-cli": {
|
||||||
|
"type": "custom-function",
|
||||||
|
"function": "wp_cli",
|
||||||
|
"repository": "wp-cli/wp-cli",
|
||||||
|
"domain": "https://github.com",
|
||||||
|
"alias": "wp",
|
||||||
|
"extension": ".phar",
|
||||||
|
"version_parameter": "--version",
|
||||||
|
"version_prefix": "v"
|
||||||
|
}
|
||||||
|
}
|
115
src/configs/tools_schema.json
Normal file
115
src/configs/tools_schema.json
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"$id": "https://raw.githubusercontent.com/shivammathur/setup-php/develop/src/configs/tools_schema.json",
|
||||||
|
"type": "object",
|
||||||
|
"title": "Tools",
|
||||||
|
"default": {},
|
||||||
|
"examples": [
|
||||||
|
{
|
||||||
|
"tool": {
|
||||||
|
"alias": "tool_alias",
|
||||||
|
"domain": "https://example.com",
|
||||||
|
"extension": ".ext",
|
||||||
|
"fetch_latest": "true",
|
||||||
|
"function": "function_name",
|
||||||
|
"repository": "user/tool",
|
||||||
|
"type": "phar, composer, custom-package or custom-function",
|
||||||
|
"version_parameter": "--version",
|
||||||
|
"version_prefix": "v"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"items": {
|
||||||
|
"properties": {
|
||||||
|
"alias": {
|
||||||
|
"$id": "#/items/properties/alias",
|
||||||
|
"type": "string",
|
||||||
|
"title": "The alias schema",
|
||||||
|
"description": "Alias for a tool.",
|
||||||
|
"examples": [
|
||||||
|
"tool_alias"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"domain": {
|
||||||
|
"$id": "#/items/properties/domain",
|
||||||
|
"type": "string",
|
||||||
|
"title": "The domain schema",
|
||||||
|
"description": "Domain URL of the tool.",
|
||||||
|
"examples": [
|
||||||
|
"https://example.com"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"extension": {
|
||||||
|
"$id": "#/items/properties/extension",
|
||||||
|
"type": "string",
|
||||||
|
"title": "The extension schema",
|
||||||
|
"description": "File extension of the tool.",
|
||||||
|
"examples": [
|
||||||
|
".ext"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"fetch_latest": {
|
||||||
|
"$id": "#/items/properties/fetch_latest",
|
||||||
|
"type": "string",
|
||||||
|
"title": "The fetch_latest schema",
|
||||||
|
"description": "Fetch the latest version from GitHub releases.",
|
||||||
|
"enum": [
|
||||||
|
"true",
|
||||||
|
"false"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"function": {
|
||||||
|
"$id": "#/items/properties/function",
|
||||||
|
"type": "string",
|
||||||
|
"title": "The function schema",
|
||||||
|
"description": "Function name in tools.ts which returns the script to setup the tool.",
|
||||||
|
"examples": [
|
||||||
|
"function_name"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"$id": "#/items/properties/repository",
|
||||||
|
"type": "string",
|
||||||
|
"title": "The repository schema",
|
||||||
|
"description": "GitHub repository of the tool.",
|
||||||
|
"examples": [
|
||||||
|
"user/tool"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"$id": "#/items/properties/type",
|
||||||
|
"type": "string",
|
||||||
|
"title": "The type schema",
|
||||||
|
"description": "Type of tool: phar, composer, custom-package or custom-function.",
|
||||||
|
"enum": [
|
||||||
|
"phar",
|
||||||
|
"composer",
|
||||||
|
"custom-package",
|
||||||
|
"custom-function"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"version_parameter": {
|
||||||
|
"$id": "#/items/properties/version_parameter",
|
||||||
|
"type": "string",
|
||||||
|
"title": "The version_parameter schema",
|
||||||
|
"description": "Parameter to get the tool version.",
|
||||||
|
"examples": [
|
||||||
|
"--version"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"version_prefix": {
|
||||||
|
"$id": "#/items/properties/version_prefix",
|
||||||
|
"type": "string",
|
||||||
|
"title": "The version_prefix schema",
|
||||||
|
"description": "Prefix of the version in the download URL.",
|
||||||
|
"examples": [
|
||||||
|
"v"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"additionalProperties": true
|
||||||
|
}
|
||||||
|
}
|
@ -16,26 +16,20 @@ export async function addCoverageXdebug(
|
|||||||
os_version: string,
|
os_version: string,
|
||||||
pipe: string
|
pipe: string
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
const xdebug =
|
let script = '\n';
|
||||||
|
script +=
|
||||||
|
(await extensions.addExtension(':pcov:false', version, os_version, true)) +
|
||||||
|
pipe;
|
||||||
|
script +=
|
||||||
(await extensions.addExtension(extension, version, os_version, true)) +
|
(await extensions.addExtension(extension, version, os_version, true)) +
|
||||||
pipe;
|
pipe;
|
||||||
const ini =
|
script += await utils.addLog(
|
||||||
(await config.addINIValues('xdebug.mode=coverage', os_version, true)) +
|
|
||||||
pipe;
|
|
||||||
const log = await utils.addLog(
|
|
||||||
'$tick',
|
'$tick',
|
||||||
extension,
|
extension,
|
||||||
'Xdebug enabled as coverage driver',
|
'Xdebug enabled as coverage driver',
|
||||||
os_version
|
os_version
|
||||||
);
|
);
|
||||||
switch (true) {
|
return script;
|
||||||
case /^xdebug3$/.test(extension):
|
|
||||||
case /^8\.0$/.test(version):
|
|
||||||
return '\n' + xdebug + '\n' + ini + '\n' + log;
|
|
||||||
case /^xdebug$/.test(extension):
|
|
||||||
default:
|
|
||||||
return xdebug + '\n' + log;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -53,24 +47,19 @@ export async function addCoveragePCOV(
|
|||||||
let script = '\n';
|
let script = '\n';
|
||||||
switch (true) {
|
switch (true) {
|
||||||
default:
|
default:
|
||||||
|
script +=
|
||||||
|
(await extensions.addExtension(
|
||||||
|
':xdebug:false',
|
||||||
|
version,
|
||||||
|
os_version,
|
||||||
|
true
|
||||||
|
)) + pipe;
|
||||||
script +=
|
script +=
|
||||||
(await extensions.addExtension('pcov', version, os_version, true)) +
|
(await extensions.addExtension('pcov', version, os_version, true)) +
|
||||||
pipe +
|
pipe;
|
||||||
'\n';
|
|
||||||
script +=
|
script +=
|
||||||
(await config.addINIValues('pcov.enabled=1', os_version, true)) + '\n';
|
(await config.addINIValues('pcov.enabled=1', os_version, true)) + '\n';
|
||||||
|
|
||||||
// add command to disable xdebug and enable pcov
|
|
||||||
switch (os_version) {
|
|
||||||
case 'linux':
|
|
||||||
case 'darwin':
|
|
||||||
script += 'remove_extension xdebug' + pipe + '\n';
|
|
||||||
break;
|
|
||||||
case 'win32':
|
|
||||||
script += 'Remove-Extension xdebug' + pipe + '\n';
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// success
|
// success
|
||||||
script += await utils.addLog(
|
script += await utils.addLog(
|
||||||
'$tick',
|
'$tick',
|
||||||
@ -107,17 +96,16 @@ export async function disableCoverage(
|
|||||||
pipe: string
|
pipe: string
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
let script = '\n';
|
let script = '\n';
|
||||||
switch (os_version) {
|
script +=
|
||||||
case 'linux':
|
(await extensions.addExtension(':pcov:false', version, os_version, true)) +
|
||||||
case 'darwin':
|
pipe;
|
||||||
script += 'remove_extension xdebug' + pipe + '\n';
|
script +=
|
||||||
script += 'remove_extension pcov' + pipe + '\n';
|
(await extensions.addExtension(
|
||||||
break;
|
':xdebug:false',
|
||||||
case 'win32':
|
version,
|
||||||
script += 'Remove-Extension xdebug' + pipe + '\n';
|
os_version,
|
||||||
script += 'Remove-Extension pcov' + pipe + '\n';
|
true
|
||||||
break;
|
)) + pipe;
|
||||||
}
|
|
||||||
script += await utils.addLog(
|
script += await utils.addLog(
|
||||||
'$tick',
|
'$tick',
|
||||||
'none',
|
'none',
|
||||||
@ -143,15 +131,18 @@ export async function addCoverage(
|
|||||||
coverage_driver = coverage_driver.toLowerCase();
|
coverage_driver = coverage_driver.toLowerCase();
|
||||||
const script: string =
|
const script: string =
|
||||||
'\n' + (await utils.stepLog('Setup Coverage', os_version));
|
'\n' + (await utils.stepLog('Setup Coverage', os_version));
|
||||||
const pipe: string = await utils.suppressOutput(os_version);
|
const pipe: string = (await utils.suppressOutput(os_version)) + '\n';
|
||||||
switch (coverage_driver) {
|
switch (coverage_driver) {
|
||||||
case 'pcov':
|
case 'pcov':
|
||||||
return script + (await addCoveragePCOV(version, os_version, pipe));
|
return script + (await addCoveragePCOV(version, os_version, pipe));
|
||||||
case 'xdebug':
|
case 'xdebug':
|
||||||
case 'xdebug3':
|
case 'xdebug3':
|
||||||
return (
|
return (
|
||||||
script +
|
script + (await addCoverageXdebug('xdebug', version, os_version, pipe))
|
||||||
(await addCoverageXdebug(coverage_driver, version, os_version, pipe))
|
);
|
||||||
|
case 'xdebug2':
|
||||||
|
return (
|
||||||
|
script + (await addCoverageXdebug('xdebug2', version, os_version, pipe))
|
||||||
);
|
);
|
||||||
case 'none':
|
case 'none':
|
||||||
return script + (await disableCoverage(version, os_version, pipe));
|
return script + (await disableCoverage(version, os_version, pipe));
|
||||||
|
@ -1,35 +1,14 @@
|
|||||||
import * as path from 'path';
|
|
||||||
import * as utils from './utils';
|
import * as utils from './utils';
|
||||||
|
|
||||||
/**
|
|
||||||
* Function to get Xdebug version compatible with php versions
|
|
||||||
*
|
|
||||||
* @param version
|
|
||||||
*/
|
|
||||||
export async function getXdebugVersion(version: string): Promise<string> {
|
|
||||||
switch (version) {
|
|
||||||
case '5.3':
|
|
||||||
return '2.2.7';
|
|
||||||
case '5.4':
|
|
||||||
return '2.4.1';
|
|
||||||
case '5.5':
|
|
||||||
return '2.5.5';
|
|
||||||
default:
|
|
||||||
return '2.9.6';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Install and enable extensions for darwin
|
* Install and enable extensions for darwin
|
||||||
*
|
*
|
||||||
* @param extension_csv
|
* @param extension_csv
|
||||||
* @param version
|
* @param version
|
||||||
* @param pipe
|
|
||||||
*/
|
*/
|
||||||
export async function addExtensionDarwin(
|
export async function addExtensionDarwin(
|
||||||
extension_csv: string,
|
extension_csv: string,
|
||||||
version: string,
|
version: string
|
||||||
pipe: string
|
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
const extensions: Array<string> = await utils.extensionArray(extension_csv);
|
const extensions: Array<string> = await utils.extensionArray(extension_csv);
|
||||||
let add_script = '\n';
|
let add_script = '\n';
|
||||||
@ -38,94 +17,86 @@ export async function addExtensionDarwin(
|
|||||||
const version_extension: string = version + extension;
|
const version_extension: string = version + extension;
|
||||||
const [ext_name, ext_version]: string[] = extension.split('-');
|
const [ext_name, ext_version]: string[] = extension.split('-');
|
||||||
const ext_prefix = await utils.getExtensionPrefix(ext_name);
|
const ext_prefix = await utils.getExtensionPrefix(ext_name);
|
||||||
const command_prefix = 'sudo pecl install -f ';
|
|
||||||
let command = '';
|
|
||||||
switch (true) {
|
switch (true) {
|
||||||
// match :extension
|
// match :extension
|
||||||
case /^:/.test(ext_name):
|
case /^:/.test(ext_name):
|
||||||
remove_script += '\nremove_extension ' + ext_name.slice(1);
|
remove_script += '\ndisable_extension' + ext_name.replace(/:/g, ' ');
|
||||||
return;
|
return;
|
||||||
// match 5.3blackfire...5.6blackfire, 7.0blackfire...7.4blackfire
|
// Match none
|
||||||
// match 5.3blackfire-1.31.0...5.6blackfire-1.31.0, 7.0blackfire-1.31.0...7.4blackfire-1.31.0
|
case /^none$/.test(ext_name):
|
||||||
case /^(5\.[3-6]|7\.[0-4])blackfire(-\d+\.\d+\.\d+)?$/.test(
|
add_script += '\ndisable_all_shared';
|
||||||
|
return;
|
||||||
|
// match extensions for compiling from source
|
||||||
|
case /.+-.+\/.+@.+/.test(extension):
|
||||||
|
add_script += await utils.parseExtensionSource(extension, ext_prefix);
|
||||||
|
return;
|
||||||
|
// match 5.3blackfire...8.0blackfire
|
||||||
|
// match 5.3blackfire-(semver)...8.0blackfire-(semver)
|
||||||
|
// match couchbase, geos, pdo_oci, oci8, http, pecl_http
|
||||||
|
// match 5.3ioncube...7.4ioncube
|
||||||
|
// match 7.0phalcon3...7.3phalcon3 and 7.2phalcon4...7.4phalcon4
|
||||||
|
case /^(5\.[3-6]|7\.[0-4]|8\.0)blackfire(-\d+\.\d+\.\d+)?$/.test(
|
||||||
version_extension
|
version_extension
|
||||||
):
|
):
|
||||||
command =
|
case /^couchbase$|^geos$|^pdo_oci$|^oci8$|^(pecl_)?http|^pdo_firebird$/.test(
|
||||||
'bash ' +
|
extension
|
||||||
path.join(__dirname, '../src/scripts/ext/blackfire_darwin.sh') +
|
):
|
||||||
' ' +
|
case /^(5\.[3-6]|7\.[0-4])ioncube$/.test(version_extension):
|
||||||
version +
|
add_script += await utils.customPackage(
|
||||||
' ' +
|
ext_name,
|
||||||
extension;
|
'ext',
|
||||||
break;
|
extension,
|
||||||
|
'darwin'
|
||||||
|
);
|
||||||
|
return;
|
||||||
// match pre-release versions. For example - xdebug-beta
|
// match pre-release versions. For example - xdebug-beta
|
||||||
case /.*-(beta|alpha|devel|snapshot)/.test(version_extension):
|
case /.+-(stable|beta|alpha|devel|snapshot|rc|preview)/.test(extension):
|
||||||
add_script +=
|
add_script += await utils.joins(
|
||||||
'\nadd_unstable_extension ' +
|
'\nadd_unstable_extension',
|
||||||
ext_name +
|
ext_name,
|
||||||
' ' +
|
ext_version,
|
||||||
ext_version +
|
ext_prefix
|
||||||
' ' +
|
);
|
||||||
ext_prefix;
|
|
||||||
return;
|
return;
|
||||||
// match semver
|
// match semver
|
||||||
case /.*-\d+\.\d+\.\d+.*/.test(version_extension):
|
case /.+-\d+\.\d+\.\d+.*/.test(extension):
|
||||||
add_script +=
|
add_script += await utils.joins(
|
||||||
'\nadd_pecl_extension ' +
|
'\nadd_pecl_extension',
|
||||||
ext_name +
|
ext_name,
|
||||||
' ' +
|
ext_version,
|
||||||
ext_version +
|
ext_prefix
|
||||||
' ' +
|
);
|
||||||
ext_prefix;
|
return;
|
||||||
|
// match 5.3pcov to 7.0pcov
|
||||||
|
case /(5\.[3-6]|7\.0)pcov/.test(version_extension):
|
||||||
|
add_script += await utils.getUnsupportedLog('pcov', version, 'darwin');
|
||||||
|
return;
|
||||||
|
// match 5.6 and newer - amqp, apcu, expect, grpc, igbinary, imagick, imap, memcache, memcached, mongodb, msgpack, protobuf, raphf, rdkafka, redis, ssh2, swoole, xdebug, xdebug2, yaml, zmq
|
||||||
|
// match 7.1 and newer - pcov
|
||||||
|
// match 5.6 to 7.4 - propro
|
||||||
|
// match 7.0 and newer - vips
|
||||||
|
case /(?<!5\.[3-5])(amqp|apcu|expect|grpc|igbinary|imagick|imap|memcache|memcached|mongodb|msgpack|protobuf|psr|raphf|rdkafka|redis|ssh2|swoole|xdebug|xdebug2|yaml|zmq)/.test(
|
||||||
|
version_extension
|
||||||
|
):
|
||||||
|
case /(5\.6|7\.[0-4])propro/.test(version_extension):
|
||||||
|
case /(?<!5\.[3-6]|7\.0)pcov/.test(version_extension):
|
||||||
|
case /(5\.6|7\.[0-3])phalcon3|7\.[2-4]phalcon4/.test(version_extension):
|
||||||
|
case /(?<!5\.[3-6])vips/.test(version_extension):
|
||||||
|
add_script += await utils.joins(
|
||||||
|
'\nadd_brew_extension',
|
||||||
|
ext_name,
|
||||||
|
ext_prefix
|
||||||
|
);
|
||||||
return;
|
return;
|
||||||
// match 5.3xdebug...5.5xdebug
|
|
||||||
case /5\.[3-5]xdebug/.test(version_extension):
|
|
||||||
command =
|
|
||||||
command_prefix + 'xdebug-' + (await getXdebugVersion(version));
|
|
||||||
break;
|
|
||||||
// match 5.6xdebug, 7.0xdebug...7.4xdebug, 8.0xdebug
|
|
||||||
case /(5\.6|7\.[0-4]|8\.[0-9])xdebug/.test(version_extension):
|
|
||||||
command = 'add_brew_extension xdebug';
|
|
||||||
break;
|
|
||||||
// match 7.1pcov...7.4pcov, 8.0pcov
|
|
||||||
case /(7\.[1-4]|8\.[0-9])pcov/.test(version_extension):
|
|
||||||
command = 'add_brew_extension pcov';
|
|
||||||
break;
|
|
||||||
// match 5.6redis
|
|
||||||
case /5\.6redis/.test(version_extension):
|
|
||||||
command = command_prefix + 'redis-2.2.8';
|
|
||||||
break;
|
|
||||||
// match imagick
|
|
||||||
case /^imagick$/.test(extension):
|
|
||||||
command =
|
|
||||||
'brew install pkg-config imagemagick' +
|
|
||||||
pipe +
|
|
||||||
' && ' +
|
|
||||||
command_prefix +
|
|
||||||
'imagick' +
|
|
||||||
pipe;
|
|
||||||
break;
|
|
||||||
// match sqlite
|
// match sqlite
|
||||||
case /^sqlite$/.test(extension):
|
case /^sqlite$/.test(extension):
|
||||||
extension = 'sqlite3';
|
extension = 'sqlite3';
|
||||||
command = command_prefix + extension;
|
|
||||||
break;
|
break;
|
||||||
// match 7.0phalcon3...7.3phalcon3 and 7.2phalcon4...7.4phalcon4
|
|
||||||
case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$/.test(version_extension):
|
|
||||||
add_script +=
|
|
||||||
'\nbash ' +
|
|
||||||
path.join(__dirname, '../src/scripts/ext/phalcon_darwin.sh') +
|
|
||||||
' ' +
|
|
||||||
extension +
|
|
||||||
' ' +
|
|
||||||
version;
|
|
||||||
return;
|
|
||||||
default:
|
default:
|
||||||
command = command_prefix + extension;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
add_script +=
|
add_script += await utils.joins('\nadd_extension', extension, ext_prefix);
|
||||||
'\nadd_extension ' + extension + ' "' + command + '" ' + ext_prefix;
|
|
||||||
});
|
});
|
||||||
return add_script + remove_script;
|
return add_script + remove_script;
|
||||||
}
|
}
|
||||||
@ -150,67 +121,92 @@ export async function addExtensionWindows(
|
|||||||
switch (true) {
|
switch (true) {
|
||||||
// Match :extension
|
// Match :extension
|
||||||
case /^:/.test(ext_name):
|
case /^:/.test(ext_name):
|
||||||
remove_script += '\nRemove-Extension ' + ext_name.slice(1);
|
remove_script += '\nDisable-Extension' + ext_name.replace(/:/g, ' ');
|
||||||
return;
|
break;
|
||||||
// match 5.4blackfire...5.6blackfire, 7.0blackfire...7.4blackfire
|
// Match none
|
||||||
// match 5.4blackfire-1.31.0...5.6blackfire-1.31.0, 7.0blackfire-1.31.0...7.4blackfire-1.31.0
|
case /^none$/.test(ext_name):
|
||||||
case /^(5\.[4-6]|7\.[0-4])blackfire(-\d+\.\d+\.\d+)?$/.test(
|
add_script += '\nDisable-AllShared';
|
||||||
|
break;
|
||||||
|
// match 5.3blackfire...8.0blackfire
|
||||||
|
// match 5.3blackfire-(semver)...8.0blackfire-(semver)
|
||||||
|
// match pdo_oci and oci8
|
||||||
|
// match 5.3ioncube...7.4ioncube
|
||||||
|
// match 7.0phalcon3...7.3phalcon3 and 7.2phalcon4...7.4phalcon4
|
||||||
|
// match 7.1pecl_http...8.0pecl_http and 7.1http...8.0http
|
||||||
|
case /^(5\.[3-6]|7\.[0-4]|8\.0)blackfire(-\d+\.\d+\.\d+)?$/.test(
|
||||||
version_extension
|
version_extension
|
||||||
):
|
):
|
||||||
add_script +=
|
case /^pdo_oci$|^oci8$|^pdo_firebird$/.test(extension):
|
||||||
'\n& ' +
|
case /^(5\.[3-6]|7\.[0-4])ioncube$/.test(version_extension):
|
||||||
path.join(__dirname, '../src/scripts/ext/blackfire.ps1') +
|
case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$/.test(version_extension):
|
||||||
' ' +
|
case /^(7\.[1-4]|8\.0)(pecl_)?http/.test(version_extension):
|
||||||
version +
|
add_script += await utils.customPackage(
|
||||||
' ' +
|
ext_name,
|
||||||
extension;
|
'ext',
|
||||||
|
extension,
|
||||||
|
'win32'
|
||||||
|
);
|
||||||
return;
|
return;
|
||||||
// match pre-release versions. For example - xdebug-beta
|
// match pre-release versions. For example - xdebug-beta
|
||||||
case /.*-(beta|alpha|devel|snapshot)/.test(version_extension):
|
case /.+-(stable|beta|alpha|devel|snapshot)/.test(extension):
|
||||||
add_script += '\nAdd-Extension ' + ext_name + ' ' + ext_version;
|
add_script += await utils.joins(
|
||||||
|
'\nAdd-Extension',
|
||||||
|
ext_name,
|
||||||
|
ext_version.replace('stable', '')
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
// match extensions for compiling from source
|
||||||
|
case /.+-.+\/.+@.+/.test(extension):
|
||||||
|
add_script += await utils.getUnsupportedLog(
|
||||||
|
extension,
|
||||||
|
version,
|
||||||
|
'win32'
|
||||||
|
);
|
||||||
break;
|
break;
|
||||||
// match semver without state
|
// match semver without state
|
||||||
case /.*-\d+\.\d+\.\d+$/.test(version_extension):
|
case /.+-\d+\.\d+\.\d+$/.test(extension):
|
||||||
add_script += '\nAdd-Extension ' + ext_name + ' stable ' + ext_version;
|
add_script += await utils.joins(
|
||||||
return;
|
'\nAdd-Extension',
|
||||||
|
ext_name,
|
||||||
|
'stable',
|
||||||
|
ext_version
|
||||||
|
);
|
||||||
|
break;
|
||||||
// match semver with state
|
// match semver with state
|
||||||
case /.*-(\d+\.\d+\.\d)(beta|alpha|devel|snapshot)\d*/.test(
|
case /.+-\d+\.\d+\.\d+[a-zA-Z]+\d*/.test(extension):
|
||||||
version_extension
|
matches = /.+-(\d+\.\d+\.\d+)([a-zA-Z]+)\d*/.exec(
|
||||||
):
|
|
||||||
matches = /.*-(\d+\.\d+\.\d)(beta|alpha|devel|snapshot)\d*/.exec(
|
|
||||||
version_extension
|
version_extension
|
||||||
) as RegExpExecArray;
|
) as RegExpExecArray;
|
||||||
add_script +=
|
add_script += await utils.joins(
|
||||||
'\nAdd-Extension ' + ext_name + ' ' + matches[2] + ' ' + matches[1];
|
'\nAdd-Extension',
|
||||||
return;
|
ext_name,
|
||||||
// match 5.3mysql..5.6mysql
|
matches[2].replace('preview', 'devel'),
|
||||||
// match 5.3mysqli..5.6mysqli
|
matches[1]
|
||||||
// match 5.3mysqlnd..5.6mysqlnd
|
);
|
||||||
case /^5\.\d(mysql|mysqli|mysqlnd)$/.test(version_extension):
|
break;
|
||||||
|
// match 7.2xdebug2 to 7.4xdebug2
|
||||||
|
case /7\.[2-4]xdebug2/.test(version_extension):
|
||||||
|
add_script += '\nAdd-Extension xdebug stable 2.9.8';
|
||||||
|
break;
|
||||||
|
// match 5.3pcov to 7.0pcov
|
||||||
|
case /(5\.[3-6]|7\.0)pcov/.test(version_extension):
|
||||||
|
add_script += await utils.getUnsupportedLog('pcov', version, 'win32');
|
||||||
|
break;
|
||||||
|
// match 5.3 to 5.6 - mysql, mysqli, mysqlnd
|
||||||
|
case /^5\.[3-6](?<!pdo_)(mysql|mysqli|mysqlnd)$/.test(version_extension):
|
||||||
add_script +=
|
add_script +=
|
||||||
'\nAdd-Extension mysql\nAdd-Extension mysqli\nAdd-Extension mysqlnd';
|
'\nAdd-Extension mysql\nAdd-Extension mysqli\nAdd-Extension mysqlnd';
|
||||||
break;
|
break;
|
||||||
// match 7.0mysql..8.0mysql
|
// match 7.0 and newer mysql, mysqli and mysqlnd
|
||||||
// match 7.0mysqli..8.0mysqli
|
case /(?<!5\.[3-6])(?<!pdo_)(mysql|mysqli|mysqlnd)$/.test(
|
||||||
// match 7.0mysqlnd..8.0mysqlnd
|
version_extension
|
||||||
case /[7-8]\.\d(mysql|mysqli|mysqlnd)$/.test(version_extension):
|
):
|
||||||
add_script += '\nAdd-Extension mysqli\nAdd-Extension mysqlnd';
|
add_script += '\nAdd-Extension mysqli\nAdd-Extension mysqlnd';
|
||||||
break;
|
break;
|
||||||
// match sqlite
|
// match sqlite
|
||||||
case /^sqlite$/.test(extension):
|
case /^sqlite$/.test(extension):
|
||||||
extension = 'sqlite3';
|
extension = 'sqlite3';
|
||||||
add_script += '\nAdd-Extension ' + extension;
|
add_script += await utils.joins('\nAdd-Extension', extension);
|
||||||
break;
|
|
||||||
// match 7.0phalcon3...7.3phalcon3 and 7.2phalcon4...7.4phalcon4
|
|
||||||
case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$/.test(version_extension):
|
|
||||||
add_script +=
|
|
||||||
'\n& ' +
|
|
||||||
path.join(__dirname, '../src/scripts/ext/phalcon.ps1') +
|
|
||||||
' ' +
|
|
||||||
extension +
|
|
||||||
' ' +
|
|
||||||
version +
|
|
||||||
'\n';
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
add_script += '\nAdd-Extension ' + extension;
|
add_script += '\nAdd-Extension ' + extension;
|
||||||
@ -225,12 +221,10 @@ export async function addExtensionWindows(
|
|||||||
*
|
*
|
||||||
* @param extension_csv
|
* @param extension_csv
|
||||||
* @param version
|
* @param version
|
||||||
* @param pipe
|
|
||||||
*/
|
*/
|
||||||
export async function addExtensionLinux(
|
export async function addExtensionLinux(
|
||||||
extension_csv: string,
|
extension_csv: string,
|
||||||
version: string,
|
version: string
|
||||||
pipe: string
|
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
const extensions: Array<string> = await utils.extensionArray(extension_csv);
|
const extensions: Array<string> = await utils.extensionArray(extension_csv);
|
||||||
let add_script = '\n';
|
let add_script = '\n';
|
||||||
@ -239,106 +233,89 @@ export async function addExtensionLinux(
|
|||||||
const version_extension: string = version + extension;
|
const version_extension: string = version + extension;
|
||||||
const [ext_name, ext_version]: string[] = extension.split('-');
|
const [ext_name, ext_version]: string[] = extension.split('-');
|
||||||
const ext_prefix = await utils.getExtensionPrefix(ext_name);
|
const ext_prefix = await utils.getExtensionPrefix(ext_name);
|
||||||
const command_prefix = 'sudo $debconf_fix apt-get install -y php';
|
|
||||||
let command = '';
|
|
||||||
switch (true) {
|
switch (true) {
|
||||||
// Match :extension
|
// Match :extension
|
||||||
case /^:/.test(ext_name):
|
case /^:/.test(ext_name):
|
||||||
remove_script += '\nremove_extension ' + ext_name.slice(1);
|
remove_script += '\ndisable_extension' + ext_name.replace(/:/g, ' ');
|
||||||
return;
|
return;
|
||||||
// match 5.3blackfire...5.6blackfire, 7.0blackfire...7.4blackfire
|
// Match none
|
||||||
// match 5.3blackfire-{semver}...5.6blackfire-{semver}, 7.0blackfire-{semver}...7.4blackfire-{semver}
|
case /^none$/.test(ext_name):
|
||||||
case /^(5\.[3-6]|7\.[0-4])blackfire(-\d+\.\d+\.\d+)?$/.test(
|
add_script += '\ndisable_all_shared';
|
||||||
|
return;
|
||||||
|
// match extensions for compiling from source
|
||||||
|
case /.+-.+\/.+@.+/.test(extension):
|
||||||
|
add_script += await utils.parseExtensionSource(extension, ext_prefix);
|
||||||
|
return;
|
||||||
|
// match 5.3blackfire...8.0blackfire
|
||||||
|
// match 5.3blackfire-(semver)...8.0blackfire-(semver)
|
||||||
|
// match 5.3pdo_cubrid...7.2php_cubrid, 5.3cubrid...7.4cubrid
|
||||||
|
// match couchbase, geos, pdo_oci, oci8, http, pecl_http
|
||||||
|
// match 5.3ioncube...7.4ioncube
|
||||||
|
// match 7.0phalcon3...7.3phalcon3 and 7.2phalcon4...7.4phalcon4
|
||||||
|
case /^(5\.[3-6]|7\.[0-4]|8\.0)blackfire(-\d+\.\d+\.\d+)?$/.test(
|
||||||
version_extension
|
version_extension
|
||||||
):
|
):
|
||||||
command =
|
case /^((5\.[3-6])|(7\.[0-2]))pdo_cubrid$|^((5\.[3-6])|(7\.[0-4]))cubrid$/.test(
|
||||||
'bash ' +
|
version_extension
|
||||||
path.join(__dirname, '../src/scripts/ext/blackfire.sh') +
|
):
|
||||||
' ' +
|
case /^couchbase$|^gearman$|^geos$|^pdo_oci$|^oci8$|^(pecl_)?http|^pdo_firebird$/.test(
|
||||||
version +
|
extension
|
||||||
' ' +
|
):
|
||||||
extension;
|
case /(?<!5\.[3-5])intl-[\d]+\.[\d]+$/.test(version_extension):
|
||||||
break;
|
case /^(5\.[3-6]|7\.[0-4])ioncube$/.test(version_extension):
|
||||||
|
case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$/.test(version_extension):
|
||||||
|
add_script += await utils.customPackage(
|
||||||
|
ext_name,
|
||||||
|
'ext',
|
||||||
|
extension,
|
||||||
|
'linux'
|
||||||
|
);
|
||||||
|
return;
|
||||||
// match pre-release versions. For example - xdebug-beta
|
// match pre-release versions. For example - xdebug-beta
|
||||||
case /.*-(beta|alpha|devel|snapshot)/.test(version_extension):
|
case /.+-(stable|beta|alpha|devel|snapshot|rc|preview)/.test(extension):
|
||||||
add_script +=
|
add_script += await utils.joins(
|
||||||
'\nadd_unstable_extension ' +
|
'\nadd_unstable_extension',
|
||||||
ext_name +
|
ext_name,
|
||||||
' ' +
|
ext_version,
|
||||||
ext_version +
|
ext_prefix
|
||||||
' ' +
|
);
|
||||||
ext_prefix;
|
|
||||||
return;
|
return;
|
||||||
// match semver versions
|
// match semver versions
|
||||||
case /.*-\d+\.\d+\.\d+.*/.test(version_extension):
|
case /.+-\d+\.\d+\.\d+.*/.test(extension):
|
||||||
add_script +=
|
add_script += await utils.joins(
|
||||||
'\nadd_pecl_extension ' +
|
'\nadd_pecl_extension',
|
||||||
ext_name +
|
ext_name,
|
||||||
' ' +
|
ext_version,
|
||||||
ext_version +
|
ext_prefix
|
||||||
' ' +
|
);
|
||||||
ext_prefix;
|
|
||||||
return;
|
return;
|
||||||
// match 5.6gearman..7.4gearman
|
// match 5.3pcov to 7.0pcov
|
||||||
case /^((5\.6)|(7\.[0-4]))gearman$/.test(version_extension):
|
case /(5\.[3-6]|7\.0)pcov/.test(version_extension):
|
||||||
command =
|
add_script += await utils.getUnsupportedLog('pcov', version, 'linux');
|
||||||
'\nbash ' +
|
|
||||||
path.join(__dirname, '../src/scripts/ext/gearman.sh') +
|
|
||||||
' ' +
|
|
||||||
version +
|
|
||||||
pipe;
|
|
||||||
break;
|
|
||||||
// match 7.0phalcon3...7.3phalcon3 or 7.2phalcon4...7.4phalcon4
|
|
||||||
case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$/.test(version_extension):
|
|
||||||
add_script +=
|
|
||||||
'\nbash ' +
|
|
||||||
path.join(__dirname, '../src/scripts/ext/phalcon.sh') +
|
|
||||||
' ' +
|
|
||||||
extension +
|
|
||||||
' ' +
|
|
||||||
version;
|
|
||||||
return;
|
return;
|
||||||
// match 7.2xdebug3..7.4xdebug3
|
// match 7.2xdebug2...7.4xdebug2
|
||||||
case /^7\.[2-4]xdebug3$/.test(version_extension):
|
case /^7\.[2-4]xdebug2$/.test(version_extension):
|
||||||
add_script +=
|
add_script += await utils.joins(
|
||||||
'\nadd_extension_from_source xdebug xdebug/xdebug master --enable-xdebug zend_extension';
|
'\nadd_pecl_extension',
|
||||||
return;
|
'xdebug',
|
||||||
// match 8.0xdebug3
|
'2.9.8',
|
||||||
case /^8\.[0-9]xdebug3$/.test(version_extension):
|
ext_prefix
|
||||||
extension = 'xdebug';
|
);
|
||||||
command = command_prefix + version + '-' + extension + pipe;
|
|
||||||
break;
|
|
||||||
// match 7.1xdebug..7.4xdebug
|
|
||||||
case /^7\.[1-4]xdebug$/.test(version_extension):
|
|
||||||
add_script +=
|
|
||||||
'\nupdate_extension xdebug 2.9.6' +
|
|
||||||
pipe +
|
|
||||||
'\n' +
|
|
||||||
(await utils.addLog('$tick', 'xdebug', 'Enabled', 'linux'));
|
|
||||||
return;
|
return;
|
||||||
// match pdo extensions
|
// match pdo extensions
|
||||||
case /.*pdo[_-].*/.test(version_extension):
|
case /^pdo[_-].+/.test(extension):
|
||||||
extension = extension
|
extension = extension.replace(/pdo[_-]|3/, '');
|
||||||
.replace('pdo_', '')
|
|
||||||
.replace('pdo-', '')
|
|
||||||
.replace('sqlite3', 'sqlite');
|
|
||||||
add_script += '\nadd_pdo_extension ' + extension;
|
add_script += '\nadd_pdo_extension ' + extension;
|
||||||
return;
|
return;
|
||||||
// match ast and uopz
|
|
||||||
case /^(ast|uopz)$/.test(extension):
|
|
||||||
command = command_prefix + '-' + extension + pipe;
|
|
||||||
break;
|
|
||||||
// match sqlite
|
// match sqlite
|
||||||
case /^sqlite$/.test(extension):
|
case /^sqlite$/.test(extension):
|
||||||
extension = 'sqlite3';
|
extension = 'sqlite3';
|
||||||
command = command_prefix + version + '-' + extension + pipe;
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
command = command_prefix + version + '-' + extension + pipe;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
add_script +=
|
add_script += await utils.joins('\nadd_extension', extension, ext_prefix);
|
||||||
'\nadd_extension ' + extension + ' "' + command + '" ' + ext_prefix;
|
|
||||||
});
|
});
|
||||||
return add_script + remove_script;
|
return add_script + remove_script;
|
||||||
}
|
}
|
||||||
@ -357,15 +334,15 @@ export async function addExtension(
|
|||||||
os_version: string,
|
os_version: string,
|
||||||
no_step = false
|
no_step = false
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
const pipe: string = await utils.suppressOutput(os_version);
|
const log: string = await utils.stepLog('Setup Extensions', os_version);
|
||||||
let script = '\n';
|
let script = '\n';
|
||||||
switch (no_step) {
|
switch (no_step) {
|
||||||
case true:
|
case true:
|
||||||
script += (await utils.stepLog('Setup Extensions', os_version)) + pipe;
|
script += log + (await utils.suppressOutput(os_version));
|
||||||
break;
|
break;
|
||||||
case false:
|
case false:
|
||||||
default:
|
default:
|
||||||
script += await utils.stepLog('Setup Extensions', os_version);
|
script += log;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -373,9 +350,9 @@ export async function addExtension(
|
|||||||
case 'win32':
|
case 'win32':
|
||||||
return script + (await addExtensionWindows(extension_csv, version));
|
return script + (await addExtensionWindows(extension_csv, version));
|
||||||
case 'darwin':
|
case 'darwin':
|
||||||
return script + (await addExtensionDarwin(extension_csv, version, pipe));
|
return script + (await addExtensionDarwin(extension_csv, version));
|
||||||
case 'linux':
|
case 'linux':
|
||||||
return script + (await addExtensionLinux(extension_csv, version, pipe));
|
return script + (await addExtensionLinux(extension_csv, version));
|
||||||
default:
|
default:
|
||||||
return await utils.log(
|
return await utils.log(
|
||||||
'Platform ' + os_version + ' is not supported',
|
'Platform ' + os_version + ' is not supported',
|
||||||
|
@ -1,11 +1,10 @@
|
|||||||
import {exec} from '@actions/exec/lib/exec';
|
import {exec} from '@actions/exec';
|
||||||
import * as core from '@actions/core';
|
import * as core from '@actions/core';
|
||||||
import * as config from './config';
|
import * as config from './config';
|
||||||
import * as coverage from './coverage';
|
import * as coverage from './coverage';
|
||||||
import * as extensions from './extensions';
|
import * as extensions from './extensions';
|
||||||
import * as tools from './tools';
|
import * as tools from './tools';
|
||||||
import * as utils from './utils';
|
import * as utils from './utils';
|
||||||
import * as matchers from './matchers';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Build the script
|
* Build the script
|
||||||
@ -14,39 +13,32 @@ import * as matchers from './matchers';
|
|||||||
* @param version
|
* @param version
|
||||||
* @param os_version
|
* @param os_version
|
||||||
*/
|
*/
|
||||||
export async function build(
|
export async function getScript(
|
||||||
filename: string,
|
filename: string,
|
||||||
version: string,
|
version: string,
|
||||||
os_version: string
|
os_version: string
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
|
const url = 'https://setup-php.com/sponsor';
|
||||||
// taking inputs
|
// taking inputs
|
||||||
const extension_csv: string =
|
process.env['fail_fast'] = await utils.getInput('fail-fast', false);
|
||||||
(await utils.getInput('extensions', false)) ||
|
const extension_csv: string = await utils.getInput('extensions', false);
|
||||||
(await utils.getInput('extension', false));
|
|
||||||
const ini_values_csv: string = await utils.getInput('ini-values', false);
|
const ini_values_csv: string = await utils.getInput('ini-values', false);
|
||||||
const coverage_driver: string = await utils.getInput('coverage', false);
|
const coverage_driver: string = await utils.getInput('coverage', false);
|
||||||
const pecl: string = await utils.getInput('pecl', false);
|
const tools_csv: string = await utils.getInput('tools', false);
|
||||||
let tools_csv: string = await utils.getInput('tools', false);
|
|
||||||
if (
|
|
||||||
pecl == 'true' ||
|
|
||||||
/.*-(beta|alpha|devel|snapshot).*/.test(extension_csv) ||
|
|
||||||
/.*-(\d+\.\d+\.\d+).*/.test(extension_csv)
|
|
||||||
) {
|
|
||||||
tools_csv = 'pecl, ' + tools_csv;
|
|
||||||
}
|
|
||||||
|
|
||||||
let script: string = await utils.readScript(filename);
|
let script: string = await utils.readFile(filename, 'src/scripts');
|
||||||
script += await tools.addTools(tools_csv, version, os_version);
|
script += await tools.addTools(tools_csv, version, os_version);
|
||||||
|
|
||||||
if (extension_csv) {
|
if (extension_csv) {
|
||||||
script += await extensions.addExtension(extension_csv, version, os_version);
|
script += await extensions.addExtension(extension_csv, version, os_version);
|
||||||
}
|
}
|
||||||
if (ini_values_csv) {
|
|
||||||
script += await config.addINIValues(ini_values_csv, os_version);
|
|
||||||
}
|
|
||||||
if (coverage_driver) {
|
if (coverage_driver) {
|
||||||
script += await coverage.addCoverage(coverage_driver, version, os_version);
|
script += await coverage.addCoverage(coverage_driver, version, os_version);
|
||||||
}
|
}
|
||||||
|
if (ini_values_csv) {
|
||||||
|
script += await config.addINIValues(ini_values_csv, os_version);
|
||||||
|
}
|
||||||
|
script += '\n' + (await utils.stepLog(`Sponsor setup-php`, os_version));
|
||||||
|
script += '\n' + (await utils.addLog('$tick', 'setup-php', url, os_version));
|
||||||
|
|
||||||
return await utils.writeScript(filename, script);
|
return await utils.writeScript(filename, script);
|
||||||
}
|
}
|
||||||
@ -56,28 +48,32 @@ export async function build(
|
|||||||
*/
|
*/
|
||||||
export async function run(): Promise<void> {
|
export async function run(): Promise<void> {
|
||||||
try {
|
try {
|
||||||
let version: string = await utils.getInput('php-version', true);
|
if ((await utils.readEnv('ImageOS')) == 'ubuntu16') {
|
||||||
version = version.length > 1 ? version.slice(0, 3) : version + '.0';
|
core.setFailed(
|
||||||
const os_version: string = process.platform;
|
'setup-php is not supported on Ubuntu 16.04. Please upgrade to Ubuntu 18.04 or Ubuntu 20.04 - https://setup-php.com/i/452'
|
||||||
|
);
|
||||||
// check the os version and run the respective script
|
return;
|
||||||
let script_path = '';
|
}
|
||||||
switch (os_version) {
|
const version: string = await utils.parseVersion(
|
||||||
case 'darwin':
|
await utils.getInput('php-version', true)
|
||||||
case 'linux':
|
);
|
||||||
script_path = await build(os_version + '.sh', version, os_version);
|
if (version) {
|
||||||
await exec('bash ' + script_path + ' ' + version + ' ' + __dirname);
|
const os_version: string = process.platform;
|
||||||
break;
|
const tool = await utils.scriptTool(os_version);
|
||||||
case 'win32':
|
const script = os_version + (await utils.scriptExtension(os_version));
|
||||||
script_path = await build('win32.ps1', version, os_version);
|
const location = await getScript(script, version, os_version);
|
||||||
await exec('pwsh ' + script_path + ' ' + version + ' ' + __dirname);
|
await exec(await utils.joins(tool, location, version, __dirname));
|
||||||
break;
|
} else {
|
||||||
|
core.setFailed('Unable to get the PHP version');
|
||||||
}
|
}
|
||||||
await matchers.addMatchers();
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
core.setFailed(error.message);
|
core.setFailed((error as Error).message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// call the run function
|
// call the run function
|
||||||
run();
|
(async () => {
|
||||||
|
await run();
|
||||||
|
})().catch(error => {
|
||||||
|
core.setFailed(error.message);
|
||||||
|
});
|
||||||
|
@ -1,13 +0,0 @@
|
|||||||
import * as path from 'path';
|
|
||||||
import * as utils from './utils';
|
|
||||||
import * as io from '@actions/io';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Cache json files for problem matchers
|
|
||||||
*/
|
|
||||||
export async function addMatchers(): Promise<void> {
|
|
||||||
const config_path = path.join(__dirname, '..', 'src', 'configs');
|
|
||||||
const runner_dir: string = await utils.getInput('RUNNER_TOOL_CACHE', false);
|
|
||||||
await io.cp(path.join(config_path, 'phpunit.json'), runner_dir);
|
|
||||||
await io.cp(path.join(config_path, 'php.json'), runner_dir);
|
|
||||||
}
|
|
371
src/scripts/common.sh
Normal file
371
src/scripts/common.sh
Normal file
@ -0,0 +1,371 @@
|
|||||||
|
# Variables
|
||||||
|
export tick="✓"
|
||||||
|
export cross="✗"
|
||||||
|
export curl_opts=(-sL)
|
||||||
|
export old_versions="5.[3-5]"
|
||||||
|
export jit_versions="8.[0-9]"
|
||||||
|
export nightly_versions="8.[1-9]"
|
||||||
|
export xdebug3_versions="7.[2-4]|8.[0-9]"
|
||||||
|
export tool_path_dir="/usr/local/bin"
|
||||||
|
export composer_home="$HOME/.composer"
|
||||||
|
export composer_bin="$composer_home/vendor/bin"
|
||||||
|
export composer_json="$composer_home/composer.json"
|
||||||
|
export composer_lock="$composer_home/composer.lock"
|
||||||
|
export latest="releases/latest/download"
|
||||||
|
export github="https://github.com/shivammathur"
|
||||||
|
export jsdeliver="https://cdn.jsdelivr.net/gh/shivammathur"
|
||||||
|
|
||||||
|
# Function to log start of a operation.
|
||||||
|
step_log() {
|
||||||
|
message=$1
|
||||||
|
printf "\n\033[90;1m==> \033[0m\033[37;1m%s\033[0m\n" "$message"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to log result of a operation.
|
||||||
|
add_log() {
|
||||||
|
mark=$1
|
||||||
|
subject=$2
|
||||||
|
message=$3
|
||||||
|
if [ "$mark" = "$tick" ]; then
|
||||||
|
printf "\033[32;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s\033[0m\n" "$mark" "$subject" "$message"
|
||||||
|
else
|
||||||
|
printf "\033[31;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s\033[0m\n" "$mark" "$subject" "$message"
|
||||||
|
[ "$fail_fast" = "true" ] && exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to log result of installing extension.
|
||||||
|
add_extension_log() {
|
||||||
|
(
|
||||||
|
check_extension "$(echo "$1" | cut -d '-' -f 1)" && add_log "$tick" "$1" "$2"
|
||||||
|
) || add_log "$cross" "$1" "Could not install $1 on PHP ${semver:?}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to read env inputs.
|
||||||
|
read_env() {
|
||||||
|
[[ -z "${update}" ]] && update='false' && UPDATE='false' || update="${update}"
|
||||||
|
[ "$update" = false ] && [[ -n ${UPDATE} ]] && update="${UPDATE}"
|
||||||
|
[[ -z "${runner}" ]] && runner='github' && RUNNER='github' || runner="${runner}"
|
||||||
|
[ "$runner" = false ] && [[ -n ${RUNNER} ]] && runner="${RUNNER}"
|
||||||
|
[[ -z "${fail_fast}" ]] && fail_fast='false' || fail_fast="${fail_fast}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to download a file using cURL.
|
||||||
|
# mode: -s pipe to stdout, -v save file and return status code
|
||||||
|
# execute: -e save file as executable
|
||||||
|
get() {
|
||||||
|
mode=$1
|
||||||
|
execute=$2
|
||||||
|
file_path=$3
|
||||||
|
shift 3
|
||||||
|
links=("$@")
|
||||||
|
if [ "$mode" = "-s" ]; then
|
||||||
|
sudo curl "${curl_opts[@]}" "${links[0]}"
|
||||||
|
else
|
||||||
|
for link in "${links[@]}"; do
|
||||||
|
status_code=$(sudo curl -w "%{http_code}" -o "$file_path" "${curl_opts[@]}" "$link")
|
||||||
|
[ "$status_code" = "200" ] && break
|
||||||
|
done
|
||||||
|
[ "$execute" = "-e" ] && sudo chmod a+x "$file_path"
|
||||||
|
[ "$mode" = "-v" ] && echo "$status_code"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to download and run scripts from GitHub releases with jsdeliver fallback.
|
||||||
|
run_script() {
|
||||||
|
repo=$1
|
||||||
|
shift
|
||||||
|
args=("$@")
|
||||||
|
get -q -e /tmp/install.sh "$github/$repo/$latest/install.sh" "$jsdeliver/$1@main/scripts/install.sh"
|
||||||
|
bash /tmp/install.sh "${args[@]}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to install required packages on self-hosted runners.
|
||||||
|
self_hosted_setup() {
|
||||||
|
if [ "$runner" = "self-hosted" ]; then
|
||||||
|
if [[ "${version:?}" =~ $old_versions ]]; then
|
||||||
|
add_log "$cross" "PHP" "PHP $version is not supported on self-hosted runner"
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
self_hosted_helper >/dev/null 2>&1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to test if extension is loaded.
|
||||||
|
check_extension() {
|
||||||
|
extension=$1
|
||||||
|
if [ "$extension" != "mysql" ]; then
|
||||||
|
php -m | grep -i -q -w "$extension"
|
||||||
|
else
|
||||||
|
php -m | grep -i -q "$extension"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to check if extension is shared
|
||||||
|
shared_extension() {
|
||||||
|
[ -e "${ext_dir:?}/$1.so" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to enable cached extensions.
|
||||||
|
enable_cache_extension() {
|
||||||
|
deps=()
|
||||||
|
for ext in /tmp/extcache/"$1"/*; do
|
||||||
|
deps+=("$(basename "$ext")")
|
||||||
|
done
|
||||||
|
if [ "x${deps[*]}" = "x" ]; then
|
||||||
|
sudo rm -rf /tmp/extcache/"$1"
|
||||||
|
enable_extension "$1" "$2"
|
||||||
|
else
|
||||||
|
deps+=("$1")
|
||||||
|
if php "${deps[@]/#/-d ${2}=}" -m 2>/dev/null | grep -i -q "$1"; then
|
||||||
|
for ext in "${deps[@]}"; do
|
||||||
|
sudo rm -rf /tmp/extcache/"$ext"
|
||||||
|
enable_extension "$ext" "$2"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to enable existing extensions.
|
||||||
|
enable_extension() {
|
||||||
|
modules_dir="/var/lib/php/modules/$version"
|
||||||
|
[ -d "$modules_dir" ] && sudo find "$modules_dir" -path "*disabled*$1" -delete
|
||||||
|
enable_extension_dependencies "$1" "$2"
|
||||||
|
if [ -d /tmp/extcache/"$1" ]; then
|
||||||
|
enable_cache_extension "$1" "$2"
|
||||||
|
elif ! check_extension "$1" && shared_extension "$1"; then
|
||||||
|
echo "$2=${ext_dir:?}/$1.so" | sudo tee -a "${pecl_file:-${ini_file[@]}}" >/dev/null
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to get a map of extensions and their dependent shared extensions.
|
||||||
|
get_extension_map() {
|
||||||
|
php -d'error_reporting=0' "${dist:?}"/../src/scripts/ext/extension_map.php
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to enable extension dependencies which are also extensions.
|
||||||
|
enable_extension_dependencies() {
|
||||||
|
extension=$1
|
||||||
|
prefix=$2
|
||||||
|
if ! [ -e /tmp/map.orig ]; then
|
||||||
|
get_extension_map | sudo tee /tmp/map.orig >/dev/null
|
||||||
|
fi
|
||||||
|
for dependency in $(grep "$extension:" /tmp/map.orig | cut -d ':' -f 2 | tr '\n' ' '); do
|
||||||
|
enable_extension "$dependency" "$prefix"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to disable dependent extensions.
|
||||||
|
disable_extension_dependents() {
|
||||||
|
local extension=$1
|
||||||
|
for dependent in $(get_extension_map | grep -E ".*:.*\s$extension(\s|$)" | cut -d ':' -f 1 | tr '\n' ' '); do
|
||||||
|
disable_extension_helper "$dependent" true
|
||||||
|
add_log "${tick:?}" ":$extension" "Disabled $dependent as it depends on $extension"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to disable an extension.
|
||||||
|
disable_extension() {
|
||||||
|
extension=$1
|
||||||
|
if check_extension "$extension"; then
|
||||||
|
if shared_extension "$extension"; then
|
||||||
|
disable_extension_helper "$extension" true
|
||||||
|
(! check_extension "$extension" && add_log "${tick:?}" ":$extension" "Disabled") ||
|
||||||
|
add_log "${cross:?}" ":$extension" "Could not disable $extension on PHP ${semver:?}"
|
||||||
|
else
|
||||||
|
add_log "${cross:?}" ":$extension" "Could not disable $extension on PHP $semver as it not a shared extension"
|
||||||
|
fi
|
||||||
|
elif shared_extension "$extension"; then
|
||||||
|
add_log "${tick:?}" ":$extension" "Disabled"
|
||||||
|
else
|
||||||
|
add_log "${tick:?}" ":$extension" "Could not find $extension on PHP $semver"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to disable shared extensions.
|
||||||
|
disable_all_shared() {
|
||||||
|
sudo sed -i.orig -E -e "/^(zend_)?extension\s*=/d" "${ini_file[@]}" "$pecl_file" 2>/dev/null || true
|
||||||
|
sudo find "${ini_dir:-$scan_dir}"/.. -name "*.ini" -not -path "*php.ini" -not -path "*mods-available*" -delete >/dev/null 2>&1 || true
|
||||||
|
add_log "${tick:?}" "none" "Disabled all shared extensions"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to configure PHP
|
||||||
|
configure_php() {
|
||||||
|
(
|
||||||
|
echo -e "date.timezone=UTC\nmemory_limit=-1"
|
||||||
|
[[ "$version" =~ $jit_versions ]] && echo -e "opcache.enable=1\nopcache.jit_buffer_size=256M\nopcache.jit=1235"
|
||||||
|
[[ "$version" =~ $xdebug3_versions ]] && echo -e "xdebug.mode=coverage"
|
||||||
|
) | sudo tee -a "${pecl_file:-${ini_file[@]}}" >/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to configure PECL.
|
||||||
|
configure_pecl() {
|
||||||
|
if ! [ -e /tmp/pecl_config ]; then
|
||||||
|
for script in pear pecl; do
|
||||||
|
sudo "$script" config-set php_ini "${pecl_file:-${ini_file[@]}}"
|
||||||
|
sudo "$script" channel-update "$script".php.net
|
||||||
|
done
|
||||||
|
echo '' | sudo tee /tmp/pecl_config >/dev/null 2>&1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to get the PECL version of an extension.
|
||||||
|
get_pecl_version() {
|
||||||
|
extension=$1
|
||||||
|
stability="$(echo "$2" | grep -m 1 -Eio "(stable|alpha|beta|rc|snapshot|preview)")"
|
||||||
|
pecl_rest='https://pecl.php.net/rest/r/'
|
||||||
|
response=$(get -s -n "" "$pecl_rest$extension"/allreleases.xml)
|
||||||
|
pecl_version=$(echo "$response" | grep -m 1 -Eio "([0-9]+\.[0-9]+\.[0-9]+${stability}[0-9]+)")
|
||||||
|
if [ ! "$pecl_version" ]; then
|
||||||
|
pecl_version=$(echo "$response" | grep -m 1 -Eo "([0-9]+\.[0-9]+\.[0-9]+)")
|
||||||
|
fi
|
||||||
|
echo "$pecl_version"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to install PECL extensions and accept default options
|
||||||
|
pecl_install() {
|
||||||
|
local extension=$1
|
||||||
|
add_pecl >/dev/null 2>&1
|
||||||
|
yes '' 2>/dev/null | sudo pecl install -f "$extension" >/dev/null 2>&1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to install a specific version of PECL extension.
|
||||||
|
add_pecl_extension() {
|
||||||
|
extension=$1
|
||||||
|
pecl_version=$2
|
||||||
|
prefix=$3
|
||||||
|
enable_extension "$extension" "$prefix"
|
||||||
|
if [[ $pecl_version =~ .*(alpha|beta|rc|snapshot|preview).* ]]; then
|
||||||
|
pecl_version=$(get_pecl_version "$extension" "$pecl_version")
|
||||||
|
fi
|
||||||
|
ext_version=$(php -r "echo phpversion('$extension');")
|
||||||
|
if [ "$ext_version" = "$pecl_version" ]; then
|
||||||
|
add_log "${tick:?}" "$extension" "Enabled"
|
||||||
|
else
|
||||||
|
disable_extension_helper "$extension" >/dev/null 2>&1
|
||||||
|
pecl_install "$extension-$pecl_version"
|
||||||
|
add_extension_log "$extension-$pecl_version" "Installed and enabled"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to setup pre-release extensions using PECL.
|
||||||
|
add_unstable_extension() {
|
||||||
|
extension=$1
|
||||||
|
stability=$2
|
||||||
|
prefix=$3
|
||||||
|
pecl_version=$(get_pecl_version "$extension" "$stability")
|
||||||
|
add_pecl_extension "$extension" "$pecl_version" "$prefix"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to extract tool version.
|
||||||
|
get_tool_version() {
|
||||||
|
tool=$1
|
||||||
|
param=$2
|
||||||
|
alp="[a-zA-Z0-9]"
|
||||||
|
version_regex="[0-9]+((\.{1}$alp+)+)(\.{0})(-$alp+){0,1}"
|
||||||
|
if [ "$tool" = "composer" ]; then
|
||||||
|
if [ "$param" != "snapshot" ]; then
|
||||||
|
composer_version="$(grep -Ea "const\sVERSION" "$tool_path_dir/composer" | grep -Eo "$version_regex")"
|
||||||
|
else
|
||||||
|
composer_version="$(grep -Ea "const\sBRANCH_ALIAS_VERSION" "$tool_path_dir/composer" | grep -Eo "$version_regex")+$(grep -Ea "const\sVERSION" "$tool_path_dir/composer" | grep -Eo "[a-zA-z0-9]+" | tail -n 1)"
|
||||||
|
fi
|
||||||
|
echo "$composer_version" | sudo tee /tmp/composer_version
|
||||||
|
else
|
||||||
|
$tool "$param" 2>/dev/null | sed -Ee "s/[Cc]omposer(.)?$version_regex//g" | grep -Eo "$version_regex" | head -n 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to configure composer
|
||||||
|
configure_composer() {
|
||||||
|
tool_path=$1
|
||||||
|
sudo ln -sf "$tool_path" "$tool_path.phar"
|
||||||
|
php -r "try {\$p=new Phar('$tool_path.phar', 0);exit(0);} catch(Exception \$e) {exit(1);}"
|
||||||
|
if [ $? -eq 1 ]; then
|
||||||
|
add_log "$cross" "composer" "Could not download composer"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if ! [ -d "$composer_home" ]; then
|
||||||
|
sudo -u "$(id -un)" -g "$(id -gn)" mkdir -p -m=00755 "$composer_home"
|
||||||
|
else
|
||||||
|
sudo chown -R "$(id -un)":"$(id -gn)" "$composer_home"
|
||||||
|
fi
|
||||||
|
if ! [ -e "$composer_json" ]; then
|
||||||
|
echo '{}' | tee "$composer_json" >/dev/null
|
||||||
|
chmod 644 "$composer_json"
|
||||||
|
fi
|
||||||
|
composer -q config -g process-timeout 0
|
||||||
|
echo "$composer_bin" >>"$GITHUB_PATH"
|
||||||
|
if [ -n "$COMPOSER_TOKEN" ]; then
|
||||||
|
composer -q config -g github-oauth.github.com "$COMPOSER_TOKEN"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to setup a remote tool.
|
||||||
|
add_tool() {
|
||||||
|
url=$1
|
||||||
|
tool=$2
|
||||||
|
ver_param=$3
|
||||||
|
tool_path="$tool_path_dir/$tool"
|
||||||
|
if ! [[ "$PATH" =~ $tool_path_dir ]]; then
|
||||||
|
export PATH=$PATH:"$tool_path_dir"
|
||||||
|
echo "export PATH=\$PATH:$tool_path_dir" | sudo tee -a "$GITHUB_ENV" >/dev/null
|
||||||
|
fi
|
||||||
|
if [ ! -e "$tool_path" ]; then
|
||||||
|
rm -rf "$tool_path"
|
||||||
|
fi
|
||||||
|
IFS="," read -r -a url <<<"$url"
|
||||||
|
status_code=$(get -v -e "$tool_path" "${url[@]}")
|
||||||
|
if [ "$status_code" != "200" ] && [[ "${url[0]}" =~ .*github.com.*releases.*latest.* ]]; then
|
||||||
|
url[0]="${url[0]//releases\/latest\/download/releases/download/$(get -s -n "" "$(echo "${url[0]}" | cut -d '/' -f '1-5')/releases" | grep -Eo -m 1 "([0-9]+\.[0-9]+\.[0-9]+)/$(echo "${url[0]}" | sed -e "s/.*\///")" | cut -d '/' -f 1)}"
|
||||||
|
status_code=$(get -v -e "$tool_path" "${url[0]}")
|
||||||
|
fi
|
||||||
|
if [ "$status_code" = "200" ]; then
|
||||||
|
add_tools_helper "$tool"
|
||||||
|
tool_version=$(get_tool_version "$tool" "$ver_param")
|
||||||
|
add_log "$tick" "$tool" "Added $tool $tool_version"
|
||||||
|
else
|
||||||
|
add_log "$cross" "$tool" "Could not setup $tool"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to setup a tool using composer.
|
||||||
|
add_composertool() {
|
||||||
|
tool=$1
|
||||||
|
release=$2
|
||||||
|
prefix=$3
|
||||||
|
if [[ "$tool" =~ prestissimo|composer-prefetcher ]]; then
|
||||||
|
composer_version=$(cat /tmp/composer_version)
|
||||||
|
if [ "$(echo "$composer_version" | cut -d'.' -f 1)" != "1" ]; then
|
||||||
|
echo "::warning:: Skipping $tool, as it does not support Composer $composer_version. Specify composer:v1 in tools to use $tool"
|
||||||
|
add_log "$cross" "$tool" "Skipped"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
(
|
||||||
|
sudo rm -f "$composer_lock" >/dev/null 2>&1 || true
|
||||||
|
composer global require "$prefix$release" 2>&1 | tee /tmp/composer.log >/dev/null 2>&1
|
||||||
|
log=$(grep "$prefix$tool" /tmp/composer.log) &&
|
||||||
|
tool_version=$(get_tool_version 'echo' "$log") &&
|
||||||
|
add_log "$tick" "$tool" "Added $tool $tool_version"
|
||||||
|
) || add_log "$cross" "$tool" "Could not setup $tool"
|
||||||
|
add_tools_helper "$tool"
|
||||||
|
if [ -e "$composer_bin/composer" ]; then
|
||||||
|
sudo cp -p "$tool_path_dir/composer" "$composer_bin"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to get PHP version in semver format.
|
||||||
|
php_semver() {
|
||||||
|
php -v | grep -Eo -m 1 "[0-9]+\.[0-9]+\.[0-9]+((-?[a-zA-Z]+([0-9]+)?)?){2}" | head -n 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to get the tag for a php version.
|
||||||
|
php_src_tag() {
|
||||||
|
commit=$(php_extra_version | grep -Eo "[0-9a-zA-Z]+")
|
||||||
|
if [[ -n "${commit}" ]]; then
|
||||||
|
echo "$commit"
|
||||||
|
else
|
||||||
|
echo "php-$semver"
|
||||||
|
fi
|
||||||
|
}
|
@ -1,277 +1,236 @@
|
|||||||
# Function to log start of a operation.
|
|
||||||
step_log() {
|
|
||||||
message=$1
|
|
||||||
printf "\n\033[90;1m==> \033[0m\033[37;1m%s\033[0m\n" "$message"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to log result of a operation.
|
|
||||||
add_log() {
|
|
||||||
mark=$1
|
|
||||||
subject=$2
|
|
||||||
message=$3
|
|
||||||
if [ "$mark" = "$tick" ]; then
|
|
||||||
printf "\033[32;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s\033[0m\n" "$mark" "$subject" "$message"
|
|
||||||
else
|
|
||||||
printf "\033[31;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s\033[0m\n" "$mark" "$subject" "$message"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to read env inputs.
|
|
||||||
read_env() {
|
|
||||||
[[ -z "${update}" ]] && update='false' && UPDATE='false' || update="${update}"
|
|
||||||
[ "$update" = false ] && [[ -n ${UPDATE} ]] && update="${UPDATE}"
|
|
||||||
[[ -z "${runner}" ]] && runner='github' && RUNNER='github' || runner="${runner}"
|
|
||||||
[ "$runner" = false ] && [[ -n ${RUNNER} ]] && runner="${RUNNER}"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to setup environment for self-hosted runners.
|
# Function to setup environment for self-hosted runners.
|
||||||
self_hosted_setup() {
|
self_hosted_helper() {
|
||||||
if [[ $(command -v brew) == "" ]]; then
|
if ! command -v brew >/dev/null; then
|
||||||
step_log "Setup Brew"
|
step_log "Setup Brew"
|
||||||
curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh | bash -s >/dev/null 2>&1
|
get -q -e "/tmp/install.sh" "https://raw.githubusercontent.com/Homebrew/install/master/install.sh" && /tmp/install.sh >/dev/null 2>&1
|
||||||
add_log "$tick" "Brew" "Installed Homebrew"
|
add_log "${tick:?}" "Brew" "Installed Homebrew"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to remove extensions.
|
# Helper function to disable an extension.
|
||||||
remove_extension() {
|
disable_extension_helper() {
|
||||||
extension=$1
|
local extension=$1
|
||||||
if check_extension "$extension"; then
|
local disable_dependents=${2:-false}
|
||||||
sudo sed -i '' "/$extension/d" "$ini_file"
|
if [ "$disable_dependents" = "true" ]; then
|
||||||
sudo rm -rf "$scan_dir"/*"$extension"* >/dev/null 2>&1
|
disable_extension_dependents "$extension"
|
||||||
sudo rm -rf "$ext_dir"/"$extension".so >/dev/null 2>&1
|
fi
|
||||||
(! check_extension "$extension" && add_log "$tick" ":$extension" "Removed") ||
|
sudo sed -Ei '' "/=(.*\/)?\"?$extension(.so)?$/d" "${ini_file:?}"
|
||||||
add_log "$cross" ":$extension" "Could not remove $extension on PHP $semver"
|
sudo rm -rf "$scan_dir"/*"$extension"*
|
||||||
|
}
|
||||||
|
|
||||||
|
# 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
|
else
|
||||||
add_log "$tick" ":$extension" "Could not find $extension on PHP $semver"
|
fetch_brew_tap "$tap" >/dev/null 2>&1
|
||||||
|
if ! [ -d "$tap_dir/$tap" ]; then
|
||||||
|
brew tap "$tap" >/dev/null 2>&1
|
||||||
fi
|
fi
|
||||||
}
|
|
||||||
|
|
||||||
# Function to test if extension is loaded.
|
|
||||||
check_extension() {
|
|
||||||
extension=$1
|
|
||||||
if [ "$extension" != "mysql" ]; then
|
|
||||||
php -m | grep -i -q -w "$extension"
|
|
||||||
else
|
|
||||||
php -m | grep -i -q "$extension"
|
|
||||||
fi
|
fi
|
||||||
}
|
|
||||||
|
|
||||||
# Fuction to get the PECL version.
|
|
||||||
get_pecl_version() {
|
|
||||||
extension=$1
|
|
||||||
stability=$2
|
|
||||||
pecl_rest='https://pecl.php.net/rest/r/'
|
|
||||||
response=$(curl -q -sSL "$pecl_rest$extension"/allreleases.xml)
|
|
||||||
pecl_version=$(echo "$response" | grep -m 1 -Eo "(\d*\.\d*\.\d*$stability\d*)")
|
|
||||||
if [ ! "$pecl_version" ]; then
|
|
||||||
pecl_version=$(echo "$response" | grep -m 1 -Eo "(\d*\.\d*\.\d*)")
|
|
||||||
fi
|
|
||||||
echo "$pecl_version"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to install a specific version of PECL extension.
|
|
||||||
add_pecl_extension() {
|
|
||||||
extension=$1
|
|
||||||
pecl_version=$2
|
|
||||||
prefix=$3
|
|
||||||
if ! check_extension "$extension" && [ -e "$ext_dir/$extension.so" ]; then
|
|
||||||
echo "$prefix=$ext_dir/$extension.so" >>"$ini_file"
|
|
||||||
fi
|
|
||||||
ext_version=$(php -r "echo phpversion('$extension');")
|
|
||||||
if [ "$ext_version" = "$pecl_version" ]; then
|
|
||||||
add_log "$tick" "$extension" "Enabled"
|
|
||||||
else
|
|
||||||
remove_extension "$extension" >/dev/null 2>&1
|
|
||||||
(
|
|
||||||
sudo pecl install -f "$extension-$pecl_version" >/dev/null 2>&1 &&
|
|
||||||
check_extension "$extension" &&
|
|
||||||
add_log "$tick" "$extension" "Installed and enabled"
|
|
||||||
) || add_log "$cross" "$extension" "Could not install $extension-$pecl_version on PHP $semver"
|
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to install a php extension from shivammathur/extensions tap.
|
# Function to install a php extension from shivammathur/extensions tap.
|
||||||
add_brew_extension() {
|
add_brew_extension() {
|
||||||
extension=$1
|
formula=$1
|
||||||
if ! brew tap | grep shivammathur/extensions; then
|
prefix=$2
|
||||||
brew tap --shallow shivammathur/extensions
|
extension="$(echo "$formula" | sed -E "s/pecl_|[0-9]//g")"
|
||||||
|
enable_extension "$extension" "$prefix"
|
||||||
|
if check_extension "$extension"; then
|
||||||
|
add_log "${tick:?}" "$extension" "Enabled"
|
||||||
|
else
|
||||||
|
add_brew_tap shivammathur/homebrew-php
|
||||||
|
add_brew_tap shivammathur/homebrew-extensions
|
||||||
|
sudo mv "$tap_dir"/shivammathur/homebrew-extensions/.github/deps/"$formula"/* "$tap_dir/homebrew/homebrew-core/Formula/" 2>/dev/null || true
|
||||||
|
update_dependencies >/dev/null 2>&1
|
||||||
|
brew install -f "$formula@$version" >/dev/null 2>&1
|
||||||
|
sudo cp "$brew_prefix/opt/$formula@$version/$extension.so" "$ext_dir"
|
||||||
|
add_extension_log "$extension" "Installed and enabled"
|
||||||
fi
|
fi
|
||||||
brew install "$extension@$version"
|
|
||||||
sudo cp "$(brew --prefix)/opt/$extension@$version/$extension.so" "$ext_dir"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to setup extensions
|
# Function to setup extensions.
|
||||||
add_extension() {
|
add_extension() {
|
||||||
extension=$1
|
extension=$1
|
||||||
install_command=$2
|
prefix=$2
|
||||||
prefix=$3
|
enable_extension "$extension" "$prefix"
|
||||||
if ! check_extension "$extension" && [ -e "$ext_dir/$extension.so" ]; then
|
if check_extension "$extension"; then
|
||||||
echo "$prefix=$ext_dir/$extension.so" >>"$ini_file" && add_log "$tick" "$extension" "Enabled"
|
add_log "${tick:?}" "$extension" "Enabled"
|
||||||
elif check_extension "$extension"; then
|
|
||||||
add_log "$tick" "$extension" "Enabled"
|
|
||||||
elif ! check_extension "$extension"; then
|
|
||||||
eval "$install_command" >/dev/null 2>&1 &&
|
|
||||||
if [[ "$version" =~ $old_versions ]]; then echo "$prefix=$ext_dir/$extension.so" >>"$ini_file"; fi
|
|
||||||
(check_extension "$extension" && add_log "$tick" "$extension" "Installed and enabled") ||
|
|
||||||
add_log "$cross" "$extension" "Could not install $extension on PHP $semver"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to setup pre-release extensions using PECL.
|
|
||||||
add_unstable_extension() {
|
|
||||||
extension=$1
|
|
||||||
stability=$2
|
|
||||||
prefix=$3
|
|
||||||
pecl_version=$(get_pecl_version "$extension" "$stability")
|
|
||||||
add_pecl_extension "$extension" "$pecl_version" "$prefix"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to setup a remote tool.
|
|
||||||
add_tool() {
|
|
||||||
url=$1
|
|
||||||
tool=$2
|
|
||||||
tool_path="$tool_path_dir/$tool"
|
|
||||||
if [ ! -e "$tool_path" ]; then
|
|
||||||
rm -rf "$tool_path"
|
|
||||||
fi
|
|
||||||
|
|
||||||
status_code=$(sudo curl -s -w "%{http_code}" -o "$tool_path" -L "$url")
|
|
||||||
if [ "$status_code" = "200" ]; then
|
|
||||||
sudo chmod a+x "$tool_path"
|
|
||||||
if [ "$tool" = "composer" ]; then
|
|
||||||
composer -q global config process-timeout 0
|
|
||||||
echo "::add-path::/Users/$USER/.composer/vendor/bin"
|
|
||||||
if [ -n "$COMPOSER_TOKEN" ]; then
|
|
||||||
composer -q global config github-oauth.github.com "$COMPOSER_TOKEN"
|
|
||||||
fi
|
|
||||||
# TODO: Remove after composer 2.0 update, fixes peer fingerprint error
|
|
||||||
if [[ "$version" =~ $old_versions ]]; then
|
|
||||||
composer -q global config repos.packagist composer https://repo-ca-bhs-1.packagist.org
|
|
||||||
fi
|
|
||||||
elif [ "$tool" = "phan" ]; then
|
|
||||||
add_extension fileinfo "sudo pecl install -f fileinfo" extension >/dev/null 2>&1
|
|
||||||
add_extension ast "sudo pecl install -f ast" extension >/dev/null 2>&1
|
|
||||||
elif [ "$tool" = "phive" ]; then
|
|
||||||
add_extension curl "sudo pecl install -f curl" extension >/dev/null 2>&1
|
|
||||||
add_extension mbstring "sudo pecl install -f mbstring" extension >/dev/null 2>&1
|
|
||||||
add_extension xml "sudo pecl install -f xml" extension >/dev/null 2>&1
|
|
||||||
elif [ "$tool" = "cs2pr" ]; then
|
|
||||||
sudo sed -i '' 's/exit(9)/exit(0)/' "$tool_path"
|
|
||||||
tr -d '\r' <"$tool_path" | sudo tee "$tool_path.tmp" >/dev/null 2>&1 && sudo mv "$tool_path.tmp" "$tool_path"
|
|
||||||
sudo chmod a+x "$tool_path"
|
|
||||||
elif [ "$tool" = "wp-cli" ]; then
|
|
||||||
sudo cp -p "$tool_path" "$tool_path_dir"/wp
|
|
||||||
fi
|
|
||||||
add_log "$tick" "$tool" "Added"
|
|
||||||
else
|
else
|
||||||
add_log "$cross" "$tool" "Could not setup $tool"
|
if [[ "$version" =~ ${old_versions:?} ]] && [ "$extension" = "imagick" ]; then
|
||||||
|
run_script "php5-darwin" "${version/./}" "$extension" >/dev/null 2>&1
|
||||||
|
else
|
||||||
|
pecl_install "$extension" >/dev/null 2>&1 &&
|
||||||
|
if [[ "$version" =~ ${old_versions:?} ]]; then echo "$prefix=$ext_dir/$extension.so" >>"$ini_file"; fi
|
||||||
|
fi
|
||||||
|
add_extension_log "$extension" "Installed and enabled"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to add a tool using composer.
|
# Function to handle request to add phpize and php-config.
|
||||||
add_composertool() {
|
add_devtools() {
|
||||||
tool=$1
|
tool=$1
|
||||||
release=$2
|
add_log "${tick:?}" "$tool" "Added $tool $semver"
|
||||||
prefix=$3
|
|
||||||
(
|
|
||||||
composer global require "$prefix$release" >/dev/null 2>&1 &&
|
|
||||||
add_log "$tick" "$tool" "Added"
|
|
||||||
) || add_log "$cross" "$tool" "Could not setup $tool"
|
|
||||||
}
|
|
||||||
|
|
||||||
add_blackfire() {
|
|
||||||
sudo mkdir -p usr/local/var/run
|
|
||||||
brew tap --shallow blackfireio/homebrew-blackfire >/dev/null 2>&1
|
|
||||||
brew install blackfire-agent >/dev/null 2>&1
|
|
||||||
if [[ -n $BLACKFIRE_SERVER_ID ]] && [[ -n $BLACKFIRE_SERVER_TOKEN ]]; then
|
|
||||||
sudo blackfire-agent --register --server-id="$BLACKFIRE_SERVER_ID" --server-token="$BLACKFIRE_SERVER_TOKEN" >/dev/null 2>&1
|
|
||||||
brew services start blackfire-agent >/dev/null 2>&1
|
|
||||||
fi
|
|
||||||
if [[ -n $BLACKFIRE_CLIENT_ID ]] && [[ -n $BLACKFIRE_CLIENT_TOKEN ]]; then
|
|
||||||
sudo blackfire config --client-id="$BLACKFIRE_CLIENT_ID" --client-token="$BLACKFIRE_CLIENT_TOKEN" >/dev/null 2>&1
|
|
||||||
fi
|
|
||||||
add_log "$tick" "blackfire" "Added"
|
|
||||||
add_log "$tick" "blackfire-agent" "Added"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to configure PECL
|
|
||||||
configure_pecl() {
|
|
||||||
for tool in pear pecl; do
|
|
||||||
sudo "$tool" config-set php_ini "$ini_file"
|
|
||||||
sudo "$tool" channel-update "$tool".php.net
|
|
||||||
done
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to handle request to add PECL.
|
# Function to handle request to add PECL.
|
||||||
add_pecl() {
|
add_pecl() {
|
||||||
add_log "$tick" "PECL" "Added"
|
configure_pecl >/dev/null 2>&1
|
||||||
|
pear_version=$(get_tool_version "pecl" "version")
|
||||||
|
add_log "${tick:?}" "PECL" "Found PECL $pear_version"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to fetch updated formulae.
|
# Function to link all libraries of a formula.
|
||||||
update_formulae() {
|
link_libraries() {
|
||||||
brew_dir=$(brew --prefix)/Homebrew/Library/Taps/homebrew/homebrew-core/Formula
|
formula=$1
|
||||||
for formula in httpd pkg-config apr apr-util argon2 aspell autoconf bison curl-openssl freetds freetype gettext glib gmp icu4c jpeg krb5 libffi libpng libpq libsodium libzip oniguruma openldap openssl@1.1 re2c sqlite tidyp unixodbc webp; do
|
formula_prefix="$(brew --prefix "$formula")"
|
||||||
sudo curl -o "$brew_dir"/"$formula".rb -sSL https://raw.githubusercontent.com/Homebrew/homebrew-core/master/Formula/"$formula".rb &
|
sudo mkdir -p "$formula_prefix"/lib
|
||||||
to_wait+=( $! )
|
for lib in "$formula_prefix"/lib/*.dylib; do
|
||||||
|
lib_name=$(basename "$lib")
|
||||||
|
sudo cp -a "$lib" "$brew_prefix/lib/$lib_name" 2>/dev/null || true
|
||||||
done
|
done
|
||||||
wait "${to_wait[@]}"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to setup PHP 5.6 and newer.
|
# Patch brew to overwrite packages.
|
||||||
setup_php() {
|
patch_brew() {
|
||||||
action=$1
|
formula_installer="$brew_repo"/Library/Homebrew/formula_installer.rb
|
||||||
export HOMEBREW_NO_INSTALL_CLEANUP=TRUE
|
code=" keg.link(verbose: verbose?"
|
||||||
brew tap --shallow shivammathur/homebrew-php
|
sudo sed -i '' "s/$code)/$code, overwrite: true)/" "$formula_installer"
|
||||||
if brew list php@"$version" 2>/dev/null | grep -q "Error" && [ "$action" != "upgrade" ]; then
|
# shellcheck disable=SC2064
|
||||||
brew unlink php@"$version"
|
trap "sudo sed -i '' 's/$code, overwrite: true)/$code)/' $formula_installer" exit
|
||||||
else
|
}
|
||||||
if [ "$version" = "$master_version" ]; then update_formulae; fi
|
|
||||||
brew "$action" shivammathur/php/php@"$version"
|
# Helper function to update the dependencies.
|
||||||
|
update_dependencies_helper() {
|
||||||
|
dependency=$1
|
||||||
|
get -q -n "$tap_dir/homebrew/homebrew-core/Formula/$dependency.rb" "https://raw.githubusercontent.com/Homebrew/homebrew-core/master/Formula/$dependency.rb"
|
||||||
|
link_libraries "$dependency"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to update dependencies.
|
||||||
|
update_dependencies() {
|
||||||
|
if ! [ -e /tmp/update_dependencies ] && [ "${runner:?}" != "self-hosted" ] && [ "${ImageOS:-}" != "" ] && [ "${ImageVersion:-}" != "" ]; then
|
||||||
|
patch_brew
|
||||||
|
while read -r dependency; do
|
||||||
|
update_dependencies_helper "$dependency" &
|
||||||
|
to_wait+=($!)
|
||||||
|
done <"$tap_dir/shivammathur/homebrew-php/.github/deps/${ImageOS:?}_${ImageVersion:?}"
|
||||||
|
wait "${to_wait[@]}"
|
||||||
|
echo '' | sudo tee /tmp/update_dependencies >/dev/null 2>&1
|
||||||
fi
|
fi
|
||||||
brew link --force --overwrite php@"$version"
|
}
|
||||||
|
|
||||||
|
# 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.
|
||||||
|
get_brewed_php() {
|
||||||
|
php_cellar="$brew_prefix"/Cellar/php
|
||||||
|
if [ -d "$php_cellar" ] && ! [[ "$(find "$php_cellar" -maxdepth 1 -name "$version*" | wc -l 2>/dev/null)" -eq 0 ]]; then
|
||||||
|
php-config --version 2>/dev/null | cut -c 1-3
|
||||||
|
else
|
||||||
|
echo 'false';
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to setup PHP 5.6 and newer using Homebrew.
|
||||||
|
add_php() {
|
||||||
|
action=$1
|
||||||
|
existing_version=$2
|
||||||
|
add_brew_tap shivammathur/homebrew-php
|
||||||
|
update_dependencies
|
||||||
|
if [ "$existing_version" != "false" ]; then
|
||||||
|
([ "$action" = "upgrade" ] && brew upgrade -f "$php_formula") || brew unlink "$php_formula"
|
||||||
|
else
|
||||||
|
brew install -f "$php_formula"
|
||||||
|
fi
|
||||||
|
brew link --force --overwrite "$php_formula"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to get extra version.
|
||||||
|
php_extra_version() {
|
||||||
|
php_formula_file="$tap_dir"/shivammathur/homebrew-php/Formula/php@"$version".rb
|
||||||
|
if [ -e "$php_formula_file" ] && ! grep -q "deprecate!" $php_formula_file && grep -Eq "archive/[0-9a-zA-Z]+" "$php_formula_file"; then
|
||||||
|
echo " ($(grep -Eo "archive/[0-9a-zA-Z]+" "$php_formula_file" | cut -d'/' -f 2))"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to Setup PHP.
|
||||||
|
setup_php() {
|
||||||
|
step_log "Setup PHP"
|
||||||
|
existing_version=$(get_brewed_php)
|
||||||
|
if [[ "$version" =~ ${old_versions:?} ]]; then
|
||||||
|
run_script "php5-darwin" "${version/./}" >/dev/null 2>&1
|
||||||
|
status="Installed"
|
||||||
|
elif [ "$existing_version" != "$version" ]; then
|
||||||
|
add_php "install" "$existing_version" >/dev/null 2>&1
|
||||||
|
status="Installed"
|
||||||
|
elif [ "$existing_version" = "$version" ] && [ "${update:?}" = "true" ]; then
|
||||||
|
add_php "upgrade" "$existing_version" >/dev/null 2>&1
|
||||||
|
status="Updated to"
|
||||||
|
else
|
||||||
|
status="Found"
|
||||||
|
fix_dependencies >/dev/null 2>&1
|
||||||
|
fi
|
||||||
|
ini_file=$(php -d "date.timezone=UTC" --ini | grep "Loaded Configuration" | sed -e "s|.*:s*||" | sed "s/ //g")
|
||||||
|
sudo chmod 777 "$ini_file" "${tool_path_dir:?}"
|
||||||
|
configure_php
|
||||||
|
ext_dir=$(php -i | grep -Ei "extension_dir => /" | sed -e "s|.*=> s*||")
|
||||||
|
scan_dir=$(php --ini | grep additional | sed -e "s|.*: s*||")
|
||||||
|
sudo mkdir -m 777 -p "$ext_dir" "$HOME/.composer"
|
||||||
|
semver=$(php_semver)
|
||||||
|
extra_version=$(php_extra_version)
|
||||||
|
if [ "${semver%.*}" != "$version" ]; then
|
||||||
|
add_log "${cross:?}" "PHP" "Could not setup PHP $version"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
sudo cp "$dist"/../src/configs/*.json "$RUNNER_TOOL_CACHE/"
|
||||||
|
echo "::set-output name=php-version::$semver"
|
||||||
|
add_log "$tick" "PHP" "$status PHP $semver$extra_version"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Variables
|
# Variables
|
||||||
tick="✓"
|
|
||||||
cross="✗"
|
|
||||||
version=$1
|
version=$1
|
||||||
nodot_version=${1/./}
|
dist=$2
|
||||||
master_version="8.0"
|
php_formula=shivammathur/php/php@"$version"
|
||||||
old_versions="5.[3-5]"
|
brew_prefix="$(brew --prefix)"
|
||||||
tool_path_dir="/usr/local/bin"
|
brew_repo="$(brew --repository)"
|
||||||
existing_version=$(php-config --version 2>/dev/null | cut -c 1-3)
|
tap_dir="$brew_repo"/Library/Taps
|
||||||
|
scripts="${dist}"/../src/scripts
|
||||||
|
export HOMEBREW_CHANGE_ARCH_TO_ARM=1
|
||||||
|
export HOMEBREW_DEVELOPER=1
|
||||||
|
export HOMEBREW_NO_INSTALL_CLEANUP=1
|
||||||
|
export HOMEBREW_NO_AUTO_UPDATE=1
|
||||||
|
export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1
|
||||||
|
|
||||||
|
# shellcheck source=.
|
||||||
|
. "${scripts:?}"/ext/source.sh
|
||||||
|
. "${scripts:?}"/tools/add_tools.sh
|
||||||
|
. "${scripts:?}"/common.sh
|
||||||
read_env
|
read_env
|
||||||
if [ "$runner" = "self-hosted" ]; then
|
self_hosted_setup
|
||||||
if [[ "$version" =~ $old_versions ]]; then
|
setup_php
|
||||||
add_log "$cross" "PHP" "PHP $version is not supported on self-hosted runner"
|
|
||||||
exit 1
|
|
||||||
else
|
|
||||||
self_hosted_setup >/dev/null 2>&1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Setup PHP
|
|
||||||
step_log "Setup PHP"
|
|
||||||
if [[ "$version" =~ $old_versions ]]; then
|
|
||||||
curl -sSL https://github.com/shivammathur/php5-darwin/releases/latest/download/install.sh | bash -s "$nodot_version" >/dev/null 2>&1 &&
|
|
||||||
status="Installed"
|
|
||||||
elif [ "$existing_version" != "$version" ]; then
|
|
||||||
setup_php "install" >/dev/null 2>&1
|
|
||||||
status="Installed"
|
|
||||||
elif [ "$existing_version" = "$version" ] && [ "$update" = "true" ]; then
|
|
||||||
setup_php "upgrade" >/dev/null 2>&1
|
|
||||||
status="Updated to"
|
|
||||||
else
|
|
||||||
status="Found"
|
|
||||||
fi
|
|
||||||
ini_file=$(php -d "date.timezone=UTC" --ini | grep "Loaded Configuration" | sed -e "s|.*:s*||" | sed "s/ //g")
|
|
||||||
sudo chmod 777 "$ini_file" "$tool_path_dir"
|
|
||||||
echo "date.timezone=UTC" >>"$ini_file"
|
|
||||||
ext_dir=$(php -i | grep -Ei "extension_dir => /" | sed -e "s|.*=> s*||")
|
|
||||||
scan_dir=$(php --ini | grep additional | sed -e "s|.*: s*||")
|
|
||||||
sudo mkdir -p "$ext_dir"
|
|
||||||
semver=$(php -v | head -n 1 | cut -f 2 -d ' ')
|
|
||||||
if [[ ! "$version" =~ $old_versions ]]; then configure_pecl >/dev/null 2>&1; fi
|
|
||||||
add_log "$tick" "PHP" "$status PHP $semver"
|
|
||||||
|
@ -1,35 +1,32 @@
|
|||||||
Param (
|
# Function to install blackfire extension.
|
||||||
|
Function Add-Blackfire() {
|
||||||
|
Param (
|
||||||
[Parameter(Position = 0, Mandatory = $true)]
|
[Parameter(Position = 0, Mandatory = $true)]
|
||||||
[ValidateNotNull()]
|
[ValidateNotNull()]
|
||||||
[string]
|
[string]
|
||||||
$version,
|
|
||||||
[Parameter(Position = 1, Mandatory = $true)]
|
|
||||||
[ValidateNotNull()]
|
|
||||||
[string]
|
|
||||||
$extension
|
$extension
|
||||||
)
|
)
|
||||||
|
try {
|
||||||
$tick = ([char]8730)
|
$no_dot_version = $version.replace('.', '')
|
||||||
$php_dir = 'C:\tools\php'
|
$extension_version = $extension.split('-')[1]
|
||||||
if($env:RUNNER -eq 'self-hosted') { $php_dir = "$php_dir$version" }
|
if ($extension_version -notmatch "\S") {
|
||||||
$ext_dir = "$php_dir\ext"
|
if($version -lt '7.0') {
|
||||||
$arch='x64'
|
$extension_version = '1.50.0'
|
||||||
if ($version -lt '7.0') { $arch='x86' }
|
} else {
|
||||||
$version = $version.replace('.', '')
|
$extension_version = (Invoke-RestMethod https://blackfire.io/api/v1/releases).probe.php
|
||||||
$extension_version = $extension.split('-')[1]
|
}
|
||||||
if ($extension_version -notmatch "\S") {
|
}
|
||||||
$ext_data = Invoke-WebRequest https://blackfire.io/docs/up-and-running/update | ForEach-Object { $_.tostring() -split "[`r`n]" | Select-String '<td class="version">' | Select-Object -Index 2 }
|
if (Test-Path $ext_dir\blackfire.dll) {
|
||||||
$extension_version = [regex]::Matches($ext_data, '<td.*?>(.+)</td>') | ForEach-Object { $_.Captures[0].Groups[1].value }
|
|
||||||
}
|
|
||||||
if (Test-Path $ext_dir\blackfire.dll) {
|
|
||||||
Enable-PhpExtension -Extension blackfire -Path $php_dir
|
Enable-PhpExtension -Extension blackfire -Path $php_dir
|
||||||
$status="Enabled"
|
$status="Enabled"
|
||||||
} else {
|
} else {
|
||||||
$installed = Get-Php -Path $php_dir
|
|
||||||
$nts = if (!$installed.ThreadSafe) { "_nts" } else { "" }
|
$nts = if (!$installed.ThreadSafe) { "_nts" } else { "" }
|
||||||
Invoke-WebRequest -UseBasicParsing -Uri "https://packages.blackfire.io/binaries/blackfire-php/${extension_version}/blackfire-php-windows_${arch}-php-${version}${nts}.dll" -OutFile $ext_dir\blackfire.dll > $null 2>&1
|
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
|
||||||
Enable-PhpExtension -Extension blackfire -Path $php_dir
|
Enable-PhpExtension -Extension blackfire -Path $php_dir
|
||||||
$status="Installed and enabled"
|
$status="Installed and enabled"
|
||||||
|
}
|
||||||
|
Add-Log $tick $extension $status
|
||||||
|
} catch {
|
||||||
|
Add-Log $cross $extension "Could not install $extension on PHP $($installed.FullVersion)"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
printf "\033[%s;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" "32" $tick "blackfire" "$status"
|
|
||||||
|
|
||||||
|
@ -1,11 +1,21 @@
|
|||||||
version=${1/./}
|
# Function to install blackfire extension.
|
||||||
extension=${2}
|
add_blackfire() {
|
||||||
extension_version=$(echo "$extension" | cut -d '-' -f 2)
|
extension=$1
|
||||||
if [ "$extension_version" = "blackfire" ]; then
|
version=${version:?}
|
||||||
extension_version=$(curl -sSL https://blackfire.io/docs/up-and-running/update | grep 'class="version"' | sed -e 's/<[^>]*>\| //g' | sed -n '3,3p')
|
no_dot_version=${version/./}
|
||||||
fi
|
platform=$(uname -s | tr '[:upper:]' '[:lower:]')
|
||||||
ext_dir=$(php -i | grep "extension_dir => /" | sed -e "s|.*=> s*||")
|
extension_version=$(echo "$extension" | cut -d '-' -f 2)
|
||||||
scan_dir=$(php --ini | grep additional | sed -e "s|.*: s*||")
|
blackfire_ini_file="${pecl_file:-${ini_file[@]}}"
|
||||||
ini_file="$scan_dir/50-blackfire.ini"
|
if ! shared_extension blackfire; then
|
||||||
sudo curl -o $ext_dir/blackfire.so -SL https://packages.blackfire.io/binaries/blackfire-php/$extension_version/blackfire-php-linux_amd64-php-$version.so
|
if [ "$extension_version" = "blackfire" ]; then
|
||||||
echo "extension=blackfire.so" | sudo tee -a "$ini_file"
|
if [[ ${version:?} =~ 5.[3-6] ]]; then
|
||||||
|
extension_version='1.50.0'
|
||||||
|
else
|
||||||
|
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
|
||||||
|
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
|
||||||
|
fi
|
||||||
|
echo "extension=blackfire.so" | sudo tee -a "$blackfire_ini_file" >/dev/null 2>&1
|
||||||
|
add_extension_log "$extension-$extension_version" "Installed and enabled"
|
||||||
|
}
|
||||||
|
@ -1,11 +0,0 @@
|
|||||||
version=${1/./}
|
|
||||||
extension=${2}
|
|
||||||
extension_version=$(echo "$extension" | cut -d '-' -f 2)
|
|
||||||
if [ "$extension_version" = "blackfire" ]; then
|
|
||||||
extension_version=$(curl -sSL https://blackfire.io/docs/up-and-running/update | grep 'class="version"' | sed -e "s/ //g" | sed -n '3,3p' | cut -d '>' -f 2 | cut -d '<' -f 1)
|
|
||||||
fi
|
|
||||||
ext_dir=$(php -i | grep -Ei "extension_dir => /usr" | sed -e "s|.*=> s*||")
|
|
||||||
scan_dir=$(php --ini | grep additional | sed -e "s|.*: s*||")
|
|
||||||
ini_file="$scan_dir/50-blackfire.ini"
|
|
||||||
sudo curl -o $ext_dir/blackfire.so -SL https://packages.blackfire.io/binaries/blackfire-php/$extension_version/blackfire-php-darwin_amd64-php-$version.so
|
|
||||||
echo "extension=blackfire.so" | sudo tee -a "$ini_file"
|
|
43
src/scripts/ext/couchbase.sh
Normal file
43
src/scripts/ext/couchbase.sh
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
# Function to install libraries required by couchbase
|
||||||
|
add_couchbase_libs() {
|
||||||
|
if [ "$(uname -s)" = "Linux" ]; then
|
||||||
|
trunk="https://github.com/couchbase/libcouchbase/releases"
|
||||||
|
if [[ ${version:?} =~ 5.[3-6]|7.[0-1] ]]; then
|
||||||
|
release="2.10.9"
|
||||||
|
else
|
||||||
|
release="$(curl -sL $trunk/latest | grep -Eo "libcouchbase-[0-9]+\.[0-9]+\.[0-9]+" | head -n 1 | cut -d'-' -f 2)"
|
||||||
|
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
|
||||||
|
if [[ ${version:?} =~ 5.[3-6]|7.[0-1] ]]; then
|
||||||
|
brew install libcouchbase@2
|
||||||
|
brew link --overwrite --force libcouchbase@2
|
||||||
|
else
|
||||||
|
brew install libcouchbase
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to add couchbase.
|
||||||
|
add_couchbase() {
|
||||||
|
add_couchbase_libs >/dev/null 2>&1
|
||||||
|
enable_extension "couchbase" "extension"
|
||||||
|
if check_extension "couchbase"; then
|
||||||
|
add_log "${tick:?}" "couchbase" "Enabled"
|
||||||
|
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
|
||||||
|
add_extension_log "couchbase" "Installed and enabled"
|
||||||
|
fi
|
||||||
|
}
|
60
src/scripts/ext/cubrid.sh
Normal file
60
src/scripts/ext/cubrid.sh
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
# Function to log license details.
|
||||||
|
add_license_log() {
|
||||||
|
printf "::group::\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" "$ext" "Click to read the $ext related license information"
|
||||||
|
printf "Cubrid CCI package is required for %s extension.\n" "$ext"
|
||||||
|
printf "The extension %s and Cubrid CCI are provided under the license linked below.\n" "$ext"
|
||||||
|
printf "Refer to: \033[35;1m%s \033[0m\n" "https://github.com/CUBRID/cubrid-cci/blob/develop/COPYING"
|
||||||
|
echo "::endgroup::"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to setup gcc-7 and g++-7
|
||||||
|
setup_compiler() {
|
||||||
|
if ! command -v gcc-7 >/dev/null || ! command -v g++-7 >/dev/null; then
|
||||||
|
add_ppa ubuntu-toolchain-r/test
|
||||||
|
add_packages gcc-7 g++-7 -y
|
||||||
|
fi
|
||||||
|
printf "gcc g++" | xargs -d ' ' -I {} sudo update-alternatives --install /usr/bin/{} {} /usr/bin/{}-7 7
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to set cubrid repo for the extension.
|
||||||
|
set_cubrid_repo() {
|
||||||
|
case "${ext:?}" in
|
||||||
|
"cubrid") cubrid_repo="cubrid-php";;
|
||||||
|
"pdo_cubrid") cubrid_repo="cubrid-pdo";;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to set cubrid branch for a PHP version.
|
||||||
|
set_cubrid_branch() {
|
||||||
|
case "${version:?}" in
|
||||||
|
5.[3-6]) cubrid_branch="RB-9.3.0";;
|
||||||
|
*) cubrid_branch="develop";;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
add_cubrid_helper() {
|
||||||
|
ext=$1
|
||||||
|
enable_extension "$ext" extension
|
||||||
|
if ! check_extension "$ext"; then
|
||||||
|
status='Installed and enabled'
|
||||||
|
set_cubrid_repo
|
||||||
|
set_cubrid_branch
|
||||||
|
patch_phpize
|
||||||
|
read -r "${ext}_PREFIX_CONFIGURE_OPTS" <<< "CFLAGS=-Wno-implicit-function-declaration"
|
||||||
|
read -r "${ext}_CONFIGURE_OPTS" <<< "--with-php-config=$(command -v php-config)"
|
||||||
|
add_extension_from_source "$ext" https://github.com CUBRID "$cubrid_repo" "$cubrid_branch" extension
|
||||||
|
restore_phpize
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to add cubrid and pdo_cubrid.
|
||||||
|
add_cubrid() {
|
||||||
|
ext=$1
|
||||||
|
status='Enabled'
|
||||||
|
add_cubrid_helper "$ext" >/dev/null 2>&1
|
||||||
|
add_extension_log "$ext" "$status"
|
||||||
|
check_extension "$ext" && add_license_log
|
||||||
|
}
|
||||||
|
|
||||||
|
# shellcheck source=.
|
||||||
|
. "${scripts:?}"/ext/patches/phpize.sh
|
109
src/scripts/ext/extension_map.php
Normal file
109
src/scripts/ext/extension_map.php
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class for a map of extensions and their dependent extensions.
|
||||||
|
*
|
||||||
|
* Class ExtensionMap
|
||||||
|
*/
|
||||||
|
class ExtensionMap {
|
||||||
|
/** @var string Directory in which shared extensions are stored. */
|
||||||
|
private $extension_dir;
|
||||||
|
|
||||||
|
/** @var string File extension for PHP extension file. */
|
||||||
|
private $file_extension;
|
||||||
|
|
||||||
|
/** @var string Prefix in PHP extension file. */
|
||||||
|
private $file_prefix;
|
||||||
|
|
||||||
|
/** @var string String to store the map */
|
||||||
|
private $map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ExtensionMap constructor.
|
||||||
|
*/
|
||||||
|
function __construct() {
|
||||||
|
$this->extension_dir = ini_get('extension_dir');
|
||||||
|
$this->file_extension = (PHP_OS == 'WINNT' ? '.dll' : '.so');
|
||||||
|
$this->file_prefix = (PHP_OS == 'WINNT' ? 'php_' : '');
|
||||||
|
$this->map = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to check if a shared extension file exists.
|
||||||
|
*
|
||||||
|
* @param string $extension
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function checkSharedExtension($extension) {
|
||||||
|
$extension_file = $this->extension_dir. DIRECTORY_SEPARATOR . $this->file_prefix . $extension . $this->file_extension;
|
||||||
|
return file_exists($extension_file);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to get all shared extensions.
|
||||||
|
*
|
||||||
|
* @return string[]
|
||||||
|
*/
|
||||||
|
public function getSharedExtensions() {
|
||||||
|
$files = scandir($this->extension_dir);
|
||||||
|
$extensions = array_diff($files, array('.','..'));
|
||||||
|
$filter_pattern = "/$this->file_extension|$this->file_prefix/";
|
||||||
|
return array_map(function ($extension) use($filter_pattern) {
|
||||||
|
return preg_replace($filter_pattern, '', $extension);
|
||||||
|
}, $extensions);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to patch dependencies if there are any bugs in Reflection data.
|
||||||
|
*
|
||||||
|
* @param string $extension
|
||||||
|
* @param array $dependencies
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function patchDependencies($extension, $dependencies) {
|
||||||
|
// memcached 2.2.0 has no dependencies in reflection data.
|
||||||
|
if($extension == 'memcached') {
|
||||||
|
$dependencies = array_unique(array_merge($dependencies, array('igbinary', 'json', 'msgpack')));
|
||||||
|
}
|
||||||
|
return $dependencies;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to add extension to the map.
|
||||||
|
*
|
||||||
|
* @param string $extension
|
||||||
|
* @throws ReflectionException
|
||||||
|
*/
|
||||||
|
public function addExtensionToMap($extension) {
|
||||||
|
// PHP 5.3 does not allow using $this.
|
||||||
|
$self = $this;
|
||||||
|
|
||||||
|
$ref = new ReflectionExtension($extension);
|
||||||
|
$dependencies = array_keys(array_map('strtolower', $ref->getDependencies()));
|
||||||
|
$dependencies = $this->patchDependencies($extension, $dependencies);
|
||||||
|
$dependencies = array_filter($dependencies, function ($dependency) use ($self) {
|
||||||
|
return $self->checkSharedExtension($dependency);
|
||||||
|
});
|
||||||
|
$self->map .= $extension . ': ' . implode(' ', $dependencies) . PHP_EOL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to print the map of shared extensions and their dependent extensions.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function __toString() {
|
||||||
|
$extensions = array_map('strtolower', $this->getSharedExtensions());
|
||||||
|
foreach ($extensions as $extension) {
|
||||||
|
try {
|
||||||
|
$this->addExtensionToMap($extension);
|
||||||
|
} catch (ReflectionException $e) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $this->map;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$extension_map = new ExtensionMap();
|
||||||
|
echo $extension_map;
|
20
src/scripts/ext/firebird.ps1
Normal file
20
src/scripts/ext/firebird.ps1
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
Function Add-Choco() {
|
||||||
|
try {
|
||||||
|
if($null -eq (Get-Command -Name choco.exe -ErrorAction SilentlyContinue)) {
|
||||||
|
# Source: https://docs.chocolatey.org/en-us/choco/setup
|
||||||
|
Set-ExecutionPolicy Bypass -Scope Process -Force
|
||||||
|
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
|
||||||
|
Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
|
||||||
|
}
|
||||||
|
} catch { }
|
||||||
|
}
|
||||||
|
|
||||||
|
Function Add-Firebird() {
|
||||||
|
Add-Choco > $null 2>&1
|
||||||
|
choco install firebird -params '/ClientAndDevTools' -y --force > $null 2>&1
|
||||||
|
if((Get-ChildItem $env:ProgramFiles\**\**\fbclient.dll | Measure-Object).Count -eq 1) {
|
||||||
|
Add-Extension pdo_firebird
|
||||||
|
} else {
|
||||||
|
Add-Log $cross pdo_firebird "Could not install pdo_firebird on PHP $( $installed.FullVersion )"
|
||||||
|
}
|
||||||
|
}
|
35
src/scripts/ext/firebird.sh
Normal file
35
src/scripts/ext/firebird.sh
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
add_firebird_client_darwin() {
|
||||||
|
firebird_tag='R3_0_7'
|
||||||
|
pkg_name=$(get -s -n "" https://github.com/FirebirdSQL/firebird/releases/tag/"$firebird_tag" | grep -Eo "Firebird-.*.pkg" | head -n 1)
|
||||||
|
get -q -e "/tmp/firebird.pkg" https://github.com/FirebirdSQL/firebird/releases/download/"$firebird_tag"/"$pkg_name"
|
||||||
|
sudo installer -pkg /tmp/firebird.pkg -target /
|
||||||
|
sudo mkdir -p /opt/firebird/include /opt/firebird/lib
|
||||||
|
sudo find /Library/Frameworks/Firebird.framework -name '*.h' -exec cp "{}" /opt/firebird/include \;
|
||||||
|
sudo find /Library/Frameworks/Firebird.framework -name '*.dylib' -exec cp "{}" /opt/firebird/lib \;
|
||||||
|
}
|
||||||
|
|
||||||
|
add_firebird_helper() {
|
||||||
|
firebird_dir=$1
|
||||||
|
tag="$(php_src_tag)"
|
||||||
|
export PDO_FIREBIRD_CONFIGURE_OPTS="--with-pdo-firebird=$firebird_dir"
|
||||||
|
export PDO_FIREBIRD_LINUX_LIBS="firebird-dev"
|
||||||
|
export PDO_FIREBIRD_PATH="ext/pdo_firebird"
|
||||||
|
add_extension_from_source pdo_firebird https://github.com php php-src "$tag" extension get
|
||||||
|
}
|
||||||
|
|
||||||
|
add_firebird() {
|
||||||
|
enable_extension pdo_firebird
|
||||||
|
if ! check_extension pdo_firebird; then
|
||||||
|
if [ "$(uname -s)" = "Linux" ]; then
|
||||||
|
if [[ "${version:?}" =~ 5.3|${nightly_versions:?} ]]; then
|
||||||
|
add_firebird_helper /usr >/dev/null 2>&1
|
||||||
|
else
|
||||||
|
add_pdo_extension firebird >/dev/null 2>&1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
add_firebird_client_darwin >/dev/null 2>&1
|
||||||
|
add_firebird_helper /opt/firebird >/dev/null 2>&1
|
||||||
|
fi
|
||||||
|
add_extension_log pdo_firebird "Installed and enabled"
|
||||||
|
fi
|
||||||
|
}
|
@ -1,9 +1,22 @@
|
|||||||
release_version=$(lsb_release -s -r)
|
# Helper function to add gearman extension.
|
||||||
sudo DEBIAN_FRONTEND=noninteractive add-apt-repository ppa:ondrej/pkg-gearman -y
|
add_gearman_helper() {
|
||||||
sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
|
add_ppa ondrej/pkg-gearman
|
||||||
|
install_packages libgearman-dev
|
||||||
|
enable_extension gearman extension
|
||||||
|
if ! check_extension gearman; then
|
||||||
|
status="Installed and enabled"
|
||||||
|
if [[ "${version:?}" =~ 5.[3-5] ]]; then
|
||||||
|
pecl_install gearman-1.1.2
|
||||||
|
else
|
||||||
|
install_packages php"${version:?}"-gearman || pecl_install gearman
|
||||||
|
fi
|
||||||
|
enable_extension gearman extension
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
if [ "$release_version" = "18.04" ]; then
|
# Function to add gearman extension.
|
||||||
sudo DEBIAN_FRONTEND=noninteractive apt-fast install -y libgearman-dev php"$1"-gearman
|
add_gearman() {
|
||||||
elif [ "$release_version" = "16.04" ]; then
|
status="Enabled"
|
||||||
sudo DEBIAN_FRONTEND=noninteractive apt-fast install -y php"$1"-gearman
|
add_gearman_helper >/dev/null 2>&1
|
||||||
fi
|
add_extension_log "gearman" "$status"
|
||||||
|
}
|
||||||
|
17
src/scripts/ext/geos.sh
Normal file
17
src/scripts/ext/geos.sh
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
# Helper function to compile and install geos
|
||||||
|
add_geos_helper() {
|
||||||
|
export GEOS_LINUX_LIBS='libgeos-dev'
|
||||||
|
export GEOS_DARWIN_LIBS='geos'
|
||||||
|
add_extension_from_source geos https://github.com libgeos php-geos 1.0.0 extension get
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to add geos
|
||||||
|
add_geos() {
|
||||||
|
enable_extension "geos" "extension"
|
||||||
|
if check_extension "geos"; then
|
||||||
|
add_log "${tick:?}" "geos" "Enabled"
|
||||||
|
else
|
||||||
|
add_geos_helper >/dev/null 2>&1
|
||||||
|
add_extension_log "geos" "Installed and enabled"
|
||||||
|
fi
|
||||||
|
}
|
55
src/scripts/ext/http.ps1
Normal file
55
src/scripts/ext/http.ps1
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
Function Get-ICUUrl() {
|
||||||
|
Param (
|
||||||
|
[Parameter(Position = 0, Mandatory = $true)]
|
||||||
|
[ValidateNotNull()]
|
||||||
|
$icu_version,
|
||||||
|
[Parameter(Position = 1, Mandatory = $true)]
|
||||||
|
[ValidateNotNull()]
|
||||||
|
$arch,
|
||||||
|
[Parameter(Position = 2, Mandatory = $true)]
|
||||||
|
[ValidateNotNull()]
|
||||||
|
$vs_version
|
||||||
|
)
|
||||||
|
$trunk = "https://windows.php.net"
|
||||||
|
$urls=@("${trunk}/downloads/php-sdk/deps/${vs_version}/${arch}", "${trunk}/downloads/php-sdk/deps/archives/${vs_version}/${arch}")
|
||||||
|
foreach ($url in $urls) {
|
||||||
|
$web_content = Invoke-WebRequest -Uri $url
|
||||||
|
foreach ($link in $web_content.Links) {
|
||||||
|
if ($link -match "/.*ICU-${icu_version}.*/") {
|
||||||
|
return $trunk + $link.HREF
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Function Repair-ICU() {
|
||||||
|
$icu = deplister $ext_dir\php_http.dll | Select-String "icu[a-z]+(\d+).dll,([A-Z]+)" | Foreach-Object { $_.Matches }
|
||||||
|
if($icu -and $icu.Groups[2].Value -ne 'OK') {
|
||||||
|
$vs = "vs" + $installed.VCVersion
|
||||||
|
if ($installed.VCVersion -lt 16) {
|
||||||
|
$vs = "vc" + $installed.VCVersion
|
||||||
|
}
|
||||||
|
$zip_url = Get-ICUUrl $icu.Groups[1].Value $installed.Architecture $vs
|
||||||
|
if ($zip_url -ne '') {
|
||||||
|
New-Item -Path "$php_dir" -Name "icu" -ItemType "directory" -Force > $null 2>&1
|
||||||
|
Invoke-WebRequest -Uri $zip_url -OutFile "$php_dir\icu\icu.zip"
|
||||||
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Function Add-Http() {
|
||||||
|
Add-Extension raphf >$null 2>&1
|
||||||
|
if($version -lt '8.0') {
|
||||||
|
Add-Extension propro >$null 2>&1
|
||||||
|
}
|
||||||
|
Add-Extension pecl_http >$null 2>&1
|
||||||
|
Repair-ICU
|
||||||
|
try {
|
||||||
|
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 )"
|
||||||
|
}
|
||||||
|
}
|
120
src/scripts/ext/http.sh
Normal file
120
src/scripts/ext/http.sh
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
# Function to get http version for a PHP version.
|
||||||
|
get_http_version() {
|
||||||
|
if [[ ${version:?} =~ 5.[3-6] ]]; then
|
||||||
|
echo "pecl_http-2.6.0"
|
||||||
|
elif [[ ${version:?} =~ 7.[0-4] ]]; then
|
||||||
|
echo "pecl_http-3.2.4"
|
||||||
|
else
|
||||||
|
echo "pecl_http-$(get_pecl_version "pecl_http" "stable")"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to enable http extension.
|
||||||
|
enable_http() {
|
||||||
|
enable_extension propro extension
|
||||||
|
enable_extension raphf extension
|
||||||
|
if (! [[ ${version:?} =~ ${jit_versions:?} ]] && check_extension propro && check_extension raphf) ||
|
||||||
|
( [[ ${version:?} =~ ${jit_versions:?} ]] && check_extension raphf); then
|
||||||
|
enable_extension http extension
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to install extensions.
|
||||||
|
add_extension_helper() {
|
||||||
|
if [ "$os" = "Linux" ]; then
|
||||||
|
add_extension "$1" extension
|
||||||
|
else
|
||||||
|
add_brew_extension "$1" extension
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to install http dependencies.
|
||||||
|
add_http_dependencies() {
|
||||||
|
if [[ ${version:?} =~ ${old_versions:?} ]]; then
|
||||||
|
add_pecl_extension raphf 1.1.2 extension
|
||||||
|
add_pecl_extension propro 1.0.2 extension
|
||||||
|
elif [[ ${version:?} =~ 5.6|7.[0-4] ]]; then
|
||||||
|
add_extension_helper propro
|
||||||
|
add_extension_helper raphf
|
||||||
|
else
|
||||||
|
add_extension_helper raphf
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to get configure options for http.
|
||||||
|
get_http_configure_opts() {
|
||||||
|
if [ "$os" = 'Linux' ]; then
|
||||||
|
for lib in zlib libbrotli libcurl libevent libicu libidn2 libidn libidnkit2 libidnkit; do
|
||||||
|
http_opts+=( "--with-http-$lib-dir=/usr" )
|
||||||
|
done
|
||||||
|
else
|
||||||
|
http_opts+=( "--with-http-zlib-dir=$(xcrun --show-sdk-path)/usr" )
|
||||||
|
http_opts+=( "--with-http-libbrotli-dir=$(brew --prefix brotli)" )
|
||||||
|
http_opts+=( "--with-http-libcurl-dir=$(brew --prefix curl)" )
|
||||||
|
http_opts+=( "--with-http-libicu-dir=$(brew --prefix icu4c)" )
|
||||||
|
http_opts+=( "--with-http-libevent-dir=$(brew --prefix libevent)" )
|
||||||
|
http_opts+=( "--with-http-libidn2-dir=$(brew --prefix libidn2)" )
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Compile and install http explicitly.
|
||||||
|
# This is done as pecl compiles raphf and propro as well.
|
||||||
|
add_http_helper() {
|
||||||
|
ext=$1
|
||||||
|
http_opts=() && get_http_configure_opts
|
||||||
|
export HTTP_PREFIX_CONFIGURE_OPTS="CFLAGS=-Wno-implicit-function-declaration"
|
||||||
|
http_configure_opts="--with-http --with-php-config=$(command -v php-config) ${http_opts[*]}"
|
||||||
|
export HTTP_CONFIGURE_OPTS="$http_configure_opts"
|
||||||
|
export HTTP_LINUX_LIBS="zlib1g libbrotli-dev libcurl4-openssl-dev libevent-dev libicu-dev libidn2-dev"
|
||||||
|
export HTTP_DARWIN_LIBS="brotli curl icu4c libevent libidn2"
|
||||||
|
if [[ "${version:?}" =~ ${nightly_versions:?} ]]; then
|
||||||
|
add_extension_from_source http https://github.com m6w6 ext-http master extension
|
||||||
|
else
|
||||||
|
add_extension_from_source pecl_http https://pecl.php.net http http "${ext##*-}" extension pecl
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to setup latest http extension.
|
||||||
|
add_http_latest() {
|
||||||
|
enable_http
|
||||||
|
if ! check_extension http; then
|
||||||
|
add_http_dependencies
|
||||||
|
if [ "$os" = "Linux" ]; then
|
||||||
|
if ! [[ "${version:?}" =~ ${old_versions:?}|${nightly_versions:?} ]]; then
|
||||||
|
install_packages "php$version-http"
|
||||||
|
else
|
||||||
|
add_http_helper "$(get_http_version)" "$os"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
if ! [[ "${version:?}" =~ ${old_versions:?} ]]; then
|
||||||
|
add_brew_extension pecl_http extension
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
status="Installed and enabled"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to setup http extension given a version.
|
||||||
|
add_http_version() {
|
||||||
|
ext=$1
|
||||||
|
enable_http
|
||||||
|
if [ "x$(php -r "echo phpversion('http');")" != "x${ext##*-}" ]; then
|
||||||
|
disable_extension_helper http >/dev/null
|
||||||
|
add_http_helper pecl_http-"${ext##*-}" "$os"
|
||||||
|
status="Installed and enabled"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to setup http extension
|
||||||
|
add_http() {
|
||||||
|
ext=$1
|
||||||
|
status="Enabled"
|
||||||
|
if [[ "$ext" =~ ^(pecl_http|http)$ ]]; then
|
||||||
|
add_http_latest >/dev/null 2>&1
|
||||||
|
else
|
||||||
|
add_http_version "$ext" >/dev/null 2>&1
|
||||||
|
fi
|
||||||
|
add_extension_log "http" "$status"
|
||||||
|
}
|
||||||
|
|
||||||
|
os="$(uname -s)"
|
23
src/scripts/ext/intl.sh
Normal file
23
src/scripts/ext/intl.sh
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
# Function to install ICU
|
||||||
|
install_icu() {
|
||||||
|
icu=$1
|
||||||
|
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"
|
||||||
|
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/
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to add ext-intl with the given version of ICU
|
||||||
|
add_intl() {
|
||||||
|
icu=$(echo "$1" | cut -d'-' -f 2)
|
||||||
|
supported_version=$(get -s -n "" https://api.github.com/repos/shivammathur/icu-intl/releases | grep -Po "${icu//./\\.}" | head -n 1)
|
||||||
|
if [ "$icu" != "$supported_version" ]; then
|
||||||
|
add_log "${cross:?}" "intl" "ICU $icu is not supported"
|
||||||
|
else
|
||||||
|
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"
|
||||||
|
enable_extension intl extension
|
||||||
|
add_extension_log intl "Installed and enabled with ICU $icu"
|
||||||
|
fi
|
||||||
|
}
|
32
src/scripts/ext/ioncube.ps1
Normal file
32
src/scripts/ext/ioncube.ps1
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
# Function to log result of a operation.
|
||||||
|
Function Add-LicenseLog() {
|
||||||
|
printf "::group::\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" "ioncube" "Click to read the ioncube loader license information"
|
||||||
|
Get-Content $ext_dir\ioncube\LICENSE.txt
|
||||||
|
Write-Output "::endgroup::"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to add ioncube extension.
|
||||||
|
Function Add-Ioncube() {
|
||||||
|
try {
|
||||||
|
if (-not(Test-Path $ext_dir\php_ioncube.dll)) {
|
||||||
|
$status = 'Installed and enabled'
|
||||||
|
$arch_part = $arch
|
||||||
|
if ($arch -eq 'x64') {
|
||||||
|
$arch_part = 'x86-64'
|
||||||
|
}
|
||||||
|
$vc = $installed.VCVersion
|
||||||
|
$ts_part = ""
|
||||||
|
if (-not($installed.ThreadSafe)) {
|
||||||
|
$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
|
||||||
|
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
|
||||||
|
}
|
||||||
|
"zend_extension=$ext_dir\php_ioncube.dll`r`n" + (Get-Content $php_dir\php.ini -Raw) | Set-Content $php_dir\php.ini
|
||||||
|
Add-Log $tick "ioncube" $status
|
||||||
|
Add-LicenseLog
|
||||||
|
} catch {
|
||||||
|
Add-Log $cross "ioncube" "Could not install ioncube on PHP $($installed.FullVersion)"
|
||||||
|
}
|
||||||
|
}
|
19
src/scripts/ext/ioncube.sh
Normal file
19
src/scripts/ext/ioncube.sh
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
# Function to log result of a operation.
|
||||||
|
add_license_log() {
|
||||||
|
printf "::group::\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" "ioncube" "Click to read the ioncube loader license information"
|
||||||
|
cat /tmp/ioncube/LICENSE.txt
|
||||||
|
echo "::endgroup::"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to install ioncube.
|
||||||
|
add_ioncube() {
|
||||||
|
if ! shared_extension ioncube; then
|
||||||
|
status='Installed and enabled'
|
||||||
|
os_name='lin' && [ "$(uname -s)" = "Darwin" ] && os_name='mac'
|
||||||
|
get -s -n "" https://downloads.ioncube.com/loader_downloads/ioncube_loaders_"$os_name"_x86-64.tar.gz | tar -xzf - -C /tmp
|
||||||
|
sudo mv /tmp/ioncube/ioncube_loader_"$os_name"_"${version:?}".so "${ext_dir:?}/ioncube.so"
|
||||||
|
fi
|
||||||
|
echo "zend_extension=$ext_dir/ioncube.so" | sudo tee "${scan_dir:?}/00-ioncube.ini" >/dev/null 2>&1
|
||||||
|
add_extension_log "ioncube" "$status"
|
||||||
|
check_extension "ioncube" && add_license_log
|
||||||
|
}
|
60
src/scripts/ext/oci.ps1
Normal file
60
src/scripts/ext/oci.ps1
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
# Function to log license information.
|
||||||
|
Function Add-LicenseLog() {
|
||||||
|
printf "::group::\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" $extension "Click to read the $extension related license information"
|
||||||
|
printf "Oracle Instant Client package is required for %s extension.\n" $extension
|
||||||
|
printf "It is provided under the Oracle Technology Network Development and Distribution License.\n"
|
||||||
|
printf "Refer to: \033[35;1m%s \033[0m\n" "https://www.oracle.com/downloads/licenses/instant-client-lic.html"
|
||||||
|
Write-Output "::endgroup::"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to get instantclinet.
|
||||||
|
Function Add-InstantClient() {
|
||||||
|
if (-not(Test-Path $php_dir\oci.dll)) {
|
||||||
|
$suffix = 'windows'
|
||||||
|
if ($arch -eq 'x86') {
|
||||||
|
$suffix = 'nt'
|
||||||
|
}
|
||||||
|
Invoke-WebRequest -Uri 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
|
||||||
|
Copy-Item $php_dir\instantclient*\* $php_dir
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to install oci8 and pdo_oci.
|
||||||
|
Function Add-Oci() {
|
||||||
|
Param (
|
||||||
|
[Parameter(Position = 0, Mandatory = $true)]
|
||||||
|
[ValidateNotNull()]
|
||||||
|
[ValidateSet('oci8', 'pdo_oci')]
|
||||||
|
[string]
|
||||||
|
$extension
|
||||||
|
)
|
||||||
|
try {
|
||||||
|
$status = 'Enabled'
|
||||||
|
Add-InstantClient
|
||||||
|
if ($extension -eq "pdo_oci") {
|
||||||
|
Enable-PhpExtension pdo_oci -Path $php_dir
|
||||||
|
} else {
|
||||||
|
if(-not(Test-Path $ext_dir\php_oci8.dll)) {
|
||||||
|
$status = 'Installed and enabled'
|
||||||
|
$ociVersion = Get-PeclPackageVersion oci8 -MinimumStability stable -MaximumStability stable | Select-Object -First 1
|
||||||
|
if ($version -eq '7.0') {
|
||||||
|
$ociVersion = '2.1.8'
|
||||||
|
} elseif ($version -lt '7.0') {
|
||||||
|
$ociVersion = '2.0.12'
|
||||||
|
} elseif ($version -lt '8.0') {
|
||||||
|
$ociVersion = '2.2.0'
|
||||||
|
}
|
||||||
|
$ociUrl = Get-PeclArchiveUrl oci8 $ociVersion $installed
|
||||||
|
Invoke-WebRequest -Uri $ociUrl -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
|
||||||
|
}
|
||||||
|
Add-Log $tick $extension $status
|
||||||
|
Add-LicenseLog
|
||||||
|
} catch {
|
||||||
|
Add-Log $cross $extension "Could not install $extension on PHP $( $installed.FullVersion )"
|
||||||
|
}
|
||||||
|
}
|
65
src/scripts/ext/oci.sh
Normal file
65
src/scripts/ext/oci.sh
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
# Function to log result of a operation.
|
||||||
|
add_license_log() {
|
||||||
|
printf "::group::\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" "$ext" "Click to read the $ext related license information"
|
||||||
|
printf "Oracle Instant Client package is required for %s extension.\n" "$ext"
|
||||||
|
printf "It is provided under the Oracle Technology Network Development and Distribution License.\n"
|
||||||
|
printf "Refer to: \033[35;1m%s \033[0m\n" "https://www.oracle.com/downloads/licenses/instant-client-lic.html"
|
||||||
|
echo "::endgroup::"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to install instantclient and SDK.
|
||||||
|
add_client() {
|
||||||
|
if [ ! -e "$oracle_client" ]; then
|
||||||
|
sudo mkdir -p -m 777 "$oracle_home" "$oracle_client"
|
||||||
|
for package in basiclite sdk; do
|
||||||
|
if [ "$os" = 'Linux' ]; then
|
||||||
|
libs='/usr/lib/'
|
||||||
|
os_name='linux'
|
||||||
|
arch='linuxx64'
|
||||||
|
lib_ext='so'
|
||||||
|
elif [ "$os" = 'Darwin' ]; then
|
||||||
|
libs='/usr/local/lib/'
|
||||||
|
os_name='mac'
|
||||||
|
arch='macos'
|
||||||
|
lib_ext='dylib'
|
||||||
|
fi
|
||||||
|
get -q -n "/opt/oracle/$package.zip" "https://download.oracle.com/otn_software/$os_name/instantclient/instantclient-$package-$arch.zip"
|
||||||
|
unzip -o "/opt/oracle/$package.zip" -d "$oracle_home"
|
||||||
|
done
|
||||||
|
for icdir in /opt/oracle/instantclient_*; do
|
||||||
|
sudo mv "$icdir"/* "$oracle_client"/
|
||||||
|
done
|
||||||
|
sudo ln -sf /opt/oracle/instantclient/*.$lib_ext* $libs
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to install oci8 and pdo_oci.
|
||||||
|
add_oci_helper() {
|
||||||
|
if ! shared_extension "$ext"; then
|
||||||
|
status='Installed and enabled'
|
||||||
|
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}_PATH" <<< "ext/$ext"
|
||||||
|
patch_phpize
|
||||||
|
add_extension_from_source "$ext" https://github.com php php-src "$(php_src_tag)" extension get
|
||||||
|
restore_phpize
|
||||||
|
else
|
||||||
|
enable_extension "$ext" extension
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to add oci extension oci8 and pdo_oci.
|
||||||
|
add_oci() {
|
||||||
|
ext=$1
|
||||||
|
status='Enabled'
|
||||||
|
oracle_home='/opt/oracle'
|
||||||
|
oracle_client=$oracle_home/instantclient
|
||||||
|
os=$(uname -s)
|
||||||
|
add_client >/dev/null 2>&1
|
||||||
|
add_oci_helper >/dev/null 2>&1
|
||||||
|
add_extension_log "$ext" "$status"
|
||||||
|
check_extension "$ext" && add_license_log
|
||||||
|
}
|
||||||
|
|
||||||
|
# shellcheck source=.
|
||||||
|
. "${scripts:?}"/ext/patches/phpize.sh
|
11
src/scripts/ext/patches/firebird.sh
Normal file
11
src/scripts/ext/patches/firebird.sh
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
patch_firebird() {
|
||||||
|
if [[ "${version:?}" =~ ${old_versions:?} ]]; then
|
||||||
|
sudo sed -i '' '/PHP_CHECK_PDO_INCLUDES/d' config.m4 2>/dev/null || sudo sed -i '/PHP_CHECK_PDO_INCLUDES/d' config.m4
|
||||||
|
fi
|
||||||
|
lib_arch=$(gcc -dumpmachine)
|
||||||
|
lib_dir=/usr/lib/"$lib_arch"
|
||||||
|
if [ -d "$lib_dir" ]; then
|
||||||
|
sudo ln -sf "$lib_dir"/libfbclient.so.2 /usr/lib/libfbclient.so
|
||||||
|
sudo ln -sf "$lib_dir"/libib_util.so /usr/lib/
|
||||||
|
fi
|
||||||
|
}
|
7
src/scripts/ext/patches/geos.sh
Normal file
7
src/scripts/ext/patches/geos.sh
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
patch_geos() {
|
||||||
|
if [ "$(php -r "echo PHP_VERSION_ID;")" -ge 70000 ]; then
|
||||||
|
sed -i~ -e "s/, ce->name/, ZSTR_VAL(ce->name)/; s/ulong /zend_ulong /" geos.c
|
||||||
|
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
|
||||||
|
patch -p1 < /tmp/php8.patch 2>/dev/null || true
|
||||||
|
}
|
11
src/scripts/ext/patches/http.sh
Normal file
11
src/scripts/ext/patches/http.sh
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
patch_pecl_http() {
|
||||||
|
if [ "$(uname -s)" = 'Darwin' ] && ! [[ ${version:?} =~ ${old_versions:?} ]]; then
|
||||||
|
if [[ ${version:?} =~ 5.6|7.[0-4] ]]; then
|
||||||
|
sed -i '' -e "s|ext/propro|$(brew --prefix propro@"${version:?}")/include/php/ext/propro@${version:?}|" "./src/php_http_api.h"
|
||||||
|
fi
|
||||||
|
sed -i '' -e "s|ext/raphf|$(brew --prefix raphf@"${version:?}")/include/php/ext/raphf@${version:?}|" "./src/php_http_api.h"
|
||||||
|
if [ "${version:?}" = "5.6" ]; then
|
||||||
|
sed -i '' -e "s|\$abs_srcdir|\$abs_srcdir ${brew_prefix:?}/include|" -e "s|/ext/propro|/php/ext/propro@5.6|" -e "s|/ext/raphf|/php/ext/raphf@5.6|" "./config9.m4"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
6
src/scripts/ext/patches/pdo_oci.sh
Normal file
6
src/scripts/ext/patches/pdo_oci.sh
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
patch_pdo_oci() {
|
||||||
|
get -q -n config.m4 https://raw.githubusercontent.com/php/php-src/PHP-8.0/ext/pdo_oci/config.m4
|
||||||
|
if [[ ${version:?} =~ 5.[3-6] ]]; then
|
||||||
|
sudo sed -i '' "/PHP_CHECK_PDO_INCLUDES/d" config.m4 2>/dev/null || sudo sed -i "/PHP_CHECK_PDO_INCLUDES/d" config.m4
|
||||||
|
fi
|
||||||
|
}
|
26
src/scripts/ext/patches/phpize.sh
Normal file
26
src/scripts/ext/patches/phpize.sh
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
# Function to get phpize location on darwin.
|
||||||
|
get_phpize() {
|
||||||
|
if [[ "${version:?}" =~ 5.[3-5] ]]; then
|
||||||
|
echo '/opt/local/bin/phpize'
|
||||||
|
else
|
||||||
|
echo "/usr/local/bin/$(readlink /usr/local/bin/phpize)"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to patch phpize to link to php headers on darwin.
|
||||||
|
patch_phpize() {
|
||||||
|
if [ "$(uname -s)" = "Darwin" ]; then
|
||||||
|
sudo cp "$phpize_orig" "$phpize_orig.bck"
|
||||||
|
sudo sed -i '' 's~includedir=.*~includedir="$(xcrun --show-sdk-path)/usr/include/php"~g' "$phpize_orig"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to restore phpize.
|
||||||
|
restore_phpize() {
|
||||||
|
if [ "$os" = "Darwin" ]; then
|
||||||
|
sudo mv "$phpize_orig.bck" "$phpize_orig" || true
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
os="$(uname -s)"
|
||||||
|
phpize_orig="$(get_phpize)"
|
4
src/scripts/ext/patches/protobuf.sh
Normal file
4
src/scripts/ext/patches/protobuf.sh
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
patch_protobuf() {
|
||||||
|
mkdir -p third_party/wyhash
|
||||||
|
cp ../../../../third_party/wyhash/* third_party/wyhash
|
||||||
|
}
|
@ -1,5 +0,0 @@
|
|||||||
cd ~ && git clone --depth=1 https://github.com/krakjoe/pcov.git
|
|
||||||
cd pcov && phpize
|
|
||||||
./configure --enable-pcov
|
|
||||||
make
|
|
||||||
sudo make install
|
|
@ -1,57 +1,54 @@
|
|||||||
Param (
|
|
||||||
[Parameter(Position = 0, Mandatory = $true)]
|
|
||||||
[ValidateNotNull()]
|
|
||||||
[ValidateSet('phalcon3', 'phalcon4')]
|
|
||||||
[string]
|
|
||||||
$extension,
|
|
||||||
[Parameter(Position = 1, Mandatory = $true)]
|
|
||||||
[ValidateNotNull()]
|
|
||||||
[ValidateLength(1, [int]::MaxValue)]
|
|
||||||
[string]
|
|
||||||
$version
|
|
||||||
)
|
|
||||||
|
|
||||||
# Function to install phalcon
|
# Function to install phalcon
|
||||||
Function Install-Phalcon() {
|
Function Add-PhalconHelper() {
|
||||||
if ($extension_version -eq '4') {
|
if ($extension_version -eq '4') {
|
||||||
Install-Phpextension phalcon -MinimumStability stable -Path $php_dir
|
Install-Phpextension -Extension phalcon -MinimumStability stable -Path $php_dir
|
||||||
} else {
|
} else {
|
||||||
$installed = Get-Php -Path $php_dir
|
$domain = 'https://github.com'
|
||||||
$nts = if (!$installed.ThreadSafe) { "_nts" } else { "" }
|
$nts = if (!$installed.ThreadSafe) { "_nts" } else { "" }
|
||||||
$match = Invoke-WebRequest -UseBasicParsing -Uri $domain/phalcon/cphalcon/releases | Select-String -Pattern "href=`"(.*phalcon_x64_.*_php${version}_${extension_version}.*[0-9]${nts}.zip)`""
|
$match = Invoke-WebRequest -Uri "$domain/phalcon/cphalcon/releases/v3.4.5" | Select-String -Pattern "href=`"(.*phalcon_x64_.*_php${version}_${extension_version}.*[0-9]${nts}.zip)`""
|
||||||
$zip_file = $match.Matches[0].Groups[1].Value
|
$zip_file = $match.Matches[0].Groups[1].Value
|
||||||
Invoke-WebRequest -UseBasicParsing -Uri $domain/$zip_file -OutFile $ENV:RUNNER_TOOL_CACHE\phalcon.zip > $null 2>&1
|
Invoke-WebRequest -Uri $domain/$zip_file -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
|
||||||
}
|
}
|
||||||
printf "\033[%s;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" "32" $tick $extension "Installed and enabled"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$tick = ([char]8730)
|
Function Add-Phalcon() {
|
||||||
$domain = 'https://github.com'
|
Param (
|
||||||
$php_dir = 'C:\tools\php'
|
[Parameter(Position = 0, Mandatory = $true)]
|
||||||
if($env:RUNNER -eq 'self-hosted') { $php_dir = "$php_dir$version" }
|
[ValidateNotNull()]
|
||||||
$ext_dir = "$php_dir\ext"
|
[ValidateSet('phalcon3', 'phalcon4')]
|
||||||
$extension_version = $extension.substring($extension.Length - 1)
|
[string]
|
||||||
|
$extension
|
||||||
|
)
|
||||||
|
try {
|
||||||
|
$status = 'Enabled'
|
||||||
|
$extension_version = $extension.substring($extension.Length - 1)
|
||||||
|
|
||||||
if($extension_version -eq '4') {
|
if($extension_version -eq '4') {
|
||||||
if (Test-Path $ext_dir\php_psr.dll) {
|
if (Test-Path $ext_dir\php_psr.dll) {
|
||||||
Enable-PhpExtension -Extension psr -Path $php_dir
|
Enable-PhpExtension -Extension psr -Path $php_dir
|
||||||
} else {
|
} else {
|
||||||
Install-Phpextension psr -MinimumStability stable -Path $php_dir
|
Install-Phpextension -Extension psr -MinimumStability stable -Path $php_dir
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if(Test-Path $ext_dir\php_phalcon.dll) {
|
if(Test-Path $ext_dir\php_phalcon.dll) {
|
||||||
$phalcon = Get-PhpExtension $ext_dir\php_phalcon.dll
|
$phalcon = Get-PhpExtension $ext_dir\php_phalcon.dll
|
||||||
if($phalcon.Version[0] -eq $extension_version) {
|
if($phalcon.Version[0] -eq $extension_version) {
|
||||||
Enable-PhpExtension -Extension phalcon -Path $php_dir
|
Enable-PhpExtension -Extension phalcon -Path $php_dir
|
||||||
printf "\033[%s;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" "32" $tick $extension "Enabled"
|
|
||||||
} else {
|
} else {
|
||||||
|
$status = 'Installed and enabled'
|
||||||
Remove-Item $ext_dir\php_phalcon.dll
|
Remove-Item $ext_dir\php_phalcon.dll
|
||||||
Install-Phalcon
|
Add-PhalconHelper
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$status = 'Installed and enabled'
|
||||||
|
Add-PhalconHelper
|
||||||
|
}
|
||||||
|
Add-Log $tick $extension $status
|
||||||
|
} catch [Exception] {
|
||||||
|
Add-Log $cross $extension "Could not install $extension on PHP $($installed.FullVersion)"
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
Install-Phalcon
|
|
||||||
}
|
}
|
@ -1,71 +1,58 @@
|
|||||||
# Function to log result of a operation
|
# Helper function to add phalcon.
|
||||||
add_log() {
|
add_phalcon_helper() {
|
||||||
mark=$1
|
status='Installed and enabled'
|
||||||
subject=$2
|
if [ "$extension" = "phalcon4" ]; then
|
||||||
message=$3
|
install_packages "php${version:?}-psr" "php${version:?}-$extension"
|
||||||
if [ "$mark" = "$tick" ]; then
|
|
||||||
printf "\033[32;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s\033[0m\n" "$mark" "$subject" "$message"
|
|
||||||
else
|
else
|
||||||
printf "\033[31;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s\033[0m\n" "$mark" "$subject" "$message"
|
install_packages "php${version:?}-$extension"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to update php ppa
|
# Function to add phalcon3.
|
||||||
update_ppa() {
|
add_phalcon3() {
|
||||||
if [ "$ppa_updated" = "false" ]; then
|
if shared_extension phalcon; then
|
||||||
find /etc/apt/sources.list.d -type f -name 'ondrej-ubuntu-php*.list' -exec sudo DEBIAN_FRONTEND=noninteractive apt-get update -o Dir::Etc::sourcelist="{}" ';' >/dev/null 2>&1
|
phalcon_version=$(php -d="extension=phalcon.so" -r "echo phpversion('phalcon');" | cut -d'.' -f 1)
|
||||||
ppa_updated="true"
|
if [ "$phalcon_version" != "$extension_major_version" ]; then
|
||||||
|
add_phalcon_helper
|
||||||
|
else
|
||||||
|
echo "extension=phalcon.so" | sudo tee -a "$phalcon_ini_file"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
add_phalcon_helper
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to install phalcon
|
# Function to add phalcon4.
|
||||||
install_phalcon() {
|
add_phalcon4() {
|
||||||
extension=$1
|
if shared_extension phalcon && ! php -m | grep -i -q -w psr; then
|
||||||
version=$2
|
echo "extension=psr.so" | sudo tee -a "${ini_file:?}"
|
||||||
(update_ppa && sudo DEBIAN_FRONTEND=noninteractive apt-get install -y "php$version-$extension" >/dev/null 2>&1 && add_log "$tick" "$extension" "Installed and enabled") ||
|
|
||||||
add_log "$cross" "$extension" "Could not install $extension on PHP $semver"
|
|
||||||
}
|
|
||||||
|
|
||||||
ini_file="/etc/php/$2/cli/conf.d/50-phalcon.ini"
|
|
||||||
ext_dir=$(php -i | grep "extension_dir => /usr" | sed -e "s|.*=> s*||")
|
|
||||||
semver=$(php -v | head -n 1 | cut -f 2 -d ' ' | cut -f 1 -d '-')
|
|
||||||
extension_major_version=$(echo "$1" | grep -i -Po '\d')
|
|
||||||
ppa_updated="false"
|
|
||||||
tick="✓"
|
|
||||||
cross="✗"
|
|
||||||
|
|
||||||
if [ "$extension_major_version" = "4" ]; then
|
|
||||||
if [ -e "$ext_dir/psr.so" ] && ! php -m | grep -i -q -w psr; then
|
|
||||||
echo "extension=psr.so" | sudo tee -a "$ini_file" >/dev/null 2>&1
|
|
||||||
fi
|
fi
|
||||||
|
if shared_extension phalcon; then
|
||||||
if [ -e "$ext_dir/phalcon.so" ]; then
|
|
||||||
if php -m | grep -i -q -w psr; then
|
if php -m | grep -i -q -w psr; then
|
||||||
phalcon_version=$(php -d="extension=phalcon" -r "echo phpversion('phalcon');" | cut -d'.' -f 1)
|
phalcon_version=$(php -d="extension=phalcon" -r "echo phpversion('phalcon');" | cut -d'.' -f 1)
|
||||||
if [ "$phalcon_version" != "$extension_major_version" ]; then
|
if [ "$phalcon_version" != "$extension_major_version" ]; then
|
||||||
install_phalcon "$1" "$2"
|
add_phalcon_helper
|
||||||
else
|
else
|
||||||
echo "extension=phalcon.so" | sudo tee -a "$ini_file" >/dev/null 2>&1
|
echo "extension=phalcon.so" | sudo tee -a "$phalcon_ini_file"
|
||||||
add_log "$tick" "$1" "Enabled"
|
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
install_phalcon "$1" "$2"
|
add_phalcon_helper
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
install_phalcon "$1" "$2"
|
add_phalcon_helper
|
||||||
fi
|
fi
|
||||||
fi
|
}
|
||||||
|
|
||||||
if [ "$extension_major_version" = "3" ]; then
|
# Function to add phalcon.
|
||||||
if [ -e "$ext_dir/phalcon.so" ]; then
|
add_phalcon() {
|
||||||
phalcon_version=$(php -d="extension=phalcon.so" -r "echo phpversion('phalcon');" | cut -d'.' -f 1)
|
extension=$1
|
||||||
if [ "$phalcon_version" != "$extension_major_version" ]; then
|
status='Enabled'
|
||||||
install_phalcon "$1" "$2"
|
phalcon_ini_file="${pecl_file:-${ini_file[@]}}"
|
||||||
else
|
extension_major_version=${extension: -1}
|
||||||
echo "extension=phalcon.so" | sudo tee -a "$ini_file" >/dev/null 2>&1
|
if [ "$extension_major_version" = "4" ]; then
|
||||||
add_log "$tick" "$1" "Enabled"
|
add_phalcon4 >/dev/null 2>&1
|
||||||
|
elif [ "$extension_major_version" = "3" ]; then
|
||||||
|
add_phalcon3 >/dev/null 2>&1
|
||||||
fi
|
fi
|
||||||
else
|
add_extension_log "phalcon" "$status"
|
||||||
install_phalcon "$1" "$2"
|
}
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
@ -1,47 +0,0 @@
|
|||||||
# Function to log result of a operation
|
|
||||||
add_log() {
|
|
||||||
mark=$1
|
|
||||||
subject=$2
|
|
||||||
message=$3
|
|
||||||
if [ "$mark" = "$tick" ]; then
|
|
||||||
printf "\033[32;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s\033[0m\n" "$mark" "$subject" "$message"
|
|
||||||
else
|
|
||||||
printf "\033[31;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s\033[0m\n" "$mark" "$subject" "$message"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to install phalcon
|
|
||||||
install_phalcon() {
|
|
||||||
(
|
|
||||||
sed -i '' '/extension.*psr/d' "$ini_file"
|
|
||||||
brew tap shivammathur/homebrew-phalcon >/dev/null 2>&1
|
|
||||||
brew install phalcon@"$php_version"_"$extension_major" >/dev/null 2>&1
|
|
||||||
sudo cp /usr/local/opt/psr@"$php_version"/psr.so "$ext_dir" >/dev/null 2>&1
|
|
||||||
sudo cp /usr/local/opt/phalcon@"$php_version"_"$extension_major"/phalcon.so "$ext_dir" >/dev/null 2>&1
|
|
||||||
add_log "$tick" "$extension" "Installed and enabled"
|
|
||||||
) || add_log "$cross" "$extension" "Could not install $extension on PHP $semver"
|
|
||||||
}
|
|
||||||
|
|
||||||
tick="✓"
|
|
||||||
cross="✗"
|
|
||||||
extension=$1
|
|
||||||
extension_major=${extension: -1}
|
|
||||||
php_version=$2
|
|
||||||
semver=$(php -v | head -n 1 | cut -f 2 -d ' ')
|
|
||||||
ini_file=$(php --ini | grep "Loaded Configuration" | sed -e "s|.*:s*||" | sed "s/ //g")
|
|
||||||
ext_dir=$(php -i | grep "extension_dir => /usr" | sed -e "s|.*=> s*||")
|
|
||||||
if [ -e "$ext_dir/psr.so" ] && [ -e "$ext_dir/phalcon.so" ]; then
|
|
||||||
phalcon_version=$(php -d="extension=psr.so" -d="extension=phalcon.so" -r "echo phpversion('phalcon');" 2>/dev/null | cut -d'.' -f 1)
|
|
||||||
if php -m | grep -i -q -w psr; then
|
|
||||||
phalcon_version=$(php -d="extension=phalcon.so" -r "echo phpversion('phalcon');" 2>/dev/null | cut -d'.' -f 1)
|
|
||||||
fi
|
|
||||||
if [ "$phalcon_version" != "$extension_major" ]; then
|
|
||||||
install_phalcon
|
|
||||||
else
|
|
||||||
if ! php -m | grep -i -q -w psr; then echo "extension=psr.so" >>"$ini_file"; fi
|
|
||||||
echo "extension=phalcon.so" >>"$ini_file"
|
|
||||||
add_log "$tick" "$extension" "Enabled"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
install_phalcon
|
|
||||||
fi
|
|
144
src/scripts/ext/source.sh
Normal file
144
src/scripts/ext/source.sh
Normal file
@ -0,0 +1,144 @@
|
|||||||
|
# Function to parse extension environment variables
|
||||||
|
parse_args() {
|
||||||
|
extension=$1
|
||||||
|
suffix=$(echo "$2" | tr '[:lower:]' '[:upper:]')
|
||||||
|
up_ext_name=$(echo "$extension" | tr '[:lower:]' '[:upper:]')
|
||||||
|
var="${extension}_${suffix}"
|
||||||
|
up_var="${up_ext_name}_${suffix}"
|
||||||
|
! [[ "$suffix" =~ .*PREFIX|LIBS|PATH.* ]] && hyp='-'
|
||||||
|
output=$(echo "${!var} ${!up_var}" | sed "s/, *$hyp/ $hyp/g" | sed -E "s/^,|,$//g")
|
||||||
|
echo "$output" | xargs -n 1 | sort | uniq | xargs
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to log if a library is installed
|
||||||
|
add_lib_log() {
|
||||||
|
lib=$1
|
||||||
|
if check_lib "$lib"; then
|
||||||
|
add_log "${tick:?}" "$lib" "Installed"
|
||||||
|
else
|
||||||
|
add_log "${cross:?}" "$lib" "Could not install $lib"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to check if a library is installed
|
||||||
|
check_lib() {
|
||||||
|
lib=$1
|
||||||
|
if [ "$(uname -s)" = "Linux" ]; then
|
||||||
|
[ "x$(dpkg -s "$lib" 2>/dev/null | grep Status)" != "x" ]
|
||||||
|
else
|
||||||
|
[ "x$(find "${brew_prefix:?}"/Cellar -maxdepth 1 -name "$lib")" != "x" ]
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to add a library on linux
|
||||||
|
add_linux_libs() {
|
||||||
|
lib=$1
|
||||||
|
if ! check_lib "$lib"; then
|
||||||
|
install_packages "$lib" >/dev/null 2>&1 || true
|
||||||
|
fi
|
||||||
|
add_lib_log "$lib"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to add a library on macOS
|
||||||
|
add_darwin_libs() {
|
||||||
|
lib=$1
|
||||||
|
if ! check_lib "$lib"; then
|
||||||
|
brew install "$lib" >/dev/null 2>&1 || true
|
||||||
|
if [[ "$lib" = *@* ]]; then
|
||||||
|
brew link --overwrite --force "$lib" >/dev/null 2>&1 || true
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
add_lib_log "$lib"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to add required libraries
|
||||||
|
add_libs() {
|
||||||
|
all_libs=("$@")
|
||||||
|
for lib in "${all_libs[@]}"; do
|
||||||
|
if [ "$(uname -s)" = "Linux" ]; then
|
||||||
|
add_linux_libs "$lib"
|
||||||
|
else
|
||||||
|
add_darwin_libs "$lib"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to run command in a group
|
||||||
|
run_group() {
|
||||||
|
command=$1
|
||||||
|
log=$2
|
||||||
|
echo "$command" | sudo tee ./run_group.sh >/dev/null 2>&1
|
||||||
|
echo "::group::$log"
|
||||||
|
. ./run_group.sh
|
||||||
|
rm ./run_group.sh
|
||||||
|
echo "::endgroup::"
|
||||||
|
}
|
||||||
|
|
||||||
|
patch_extension() {
|
||||||
|
extension=$1
|
||||||
|
if [ -e "${scripts:?}"/ext/patches/"$extension".sh ]; then
|
||||||
|
# shellcheck source=.
|
||||||
|
. "${scripts:?}"/ext/patches/"$extension".sh
|
||||||
|
patch_"${extension}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
fetch_extension() {
|
||||||
|
fetch=$1
|
||||||
|
if [ "$fetch" = "clone" ]; then
|
||||||
|
run_group "git clone -nv $url/$org/$repo /tmp/$repo-$release" "git clone"
|
||||||
|
cd /tmp/"$repo-$release" || exit 1
|
||||||
|
git checkout -q "$release"
|
||||||
|
cd "$sub_dir" || exit 1
|
||||||
|
if [ -e .gitmodules ]; then
|
||||||
|
jobs="$(grep -c "\[submodule" .gitmodules)"
|
||||||
|
run_group "git submodule update --jobs $jobs --init --recursive" "git submodule"
|
||||||
|
fi
|
||||||
|
elif [ "$fetch" = "get" ]; then
|
||||||
|
get -q -n /tmp/"$extension".tar.gz "$url/$org/$repo/archive/$release.tar.gz"
|
||||||
|
tar -xzf /tmp/"$extension".tar.gz -C /tmp
|
||||||
|
cd /tmp/"$repo"-"$release"/"$sub_dir" || exit
|
||||||
|
elif [ "$fetch" = "pecl" ]; then
|
||||||
|
source="pecl"
|
||||||
|
pecl_name=${extension/http/pecl_http}
|
||||||
|
get -q -n /tmp/"$pecl_name".tgz https://pecl.php.net/get/"$pecl_name"-"$release".tgz
|
||||||
|
tar -xzf /tmp/"$pecl_name".tgz -C /tmp
|
||||||
|
cd /tmp/"$pecl_name"-"$release" || exit
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to install extension from a git repository
|
||||||
|
add_extension_from_source() {
|
||||||
|
extension="${1/pecl_/}"
|
||||||
|
url=$2
|
||||||
|
org=$3
|
||||||
|
repo=$4
|
||||||
|
release=$5
|
||||||
|
prefix=$6
|
||||||
|
fetch=${7:-clone}
|
||||||
|
slug="$extension-$release"
|
||||||
|
source="$url/$org/$repo"
|
||||||
|
libraries="$(parse_args "$extension" LIBS) $(parse_args "$extension" "$(uname -s)"_LIBS)"
|
||||||
|
opts="$(parse_args "$extension" CONFIGURE_OPTS)"
|
||||||
|
prefix_opts="$(parse_args "$extension" CONFIGURE_PREFIX_OPTS)"
|
||||||
|
suffix_opts="$(parse_args "$extension" CONFIGURE_SUFFIX_OPTS)"
|
||||||
|
sub_dir="$(parse_args "$extension" PATH)"
|
||||||
|
step_log "Setup $slug"
|
||||||
|
(
|
||||||
|
add_devtools phpize >/dev/null 2>&1
|
||||||
|
disable_extension_helper "$extension"
|
||||||
|
fetch_extension "$fetch"
|
||||||
|
if ! [ "$(find . -maxdepth 1 -name '*.m4' -exec grep -H 'PHP_NEW_EXTENSION' {} \; | wc -l)" != "0" ]; then
|
||||||
|
add_log "${cross:?}" "$source" "$source does not have a PHP extension"
|
||||||
|
else
|
||||||
|
[[ -n "${libraries// }" ]] && run_group "add_libs $libraries" "add libraries"
|
||||||
|
patch_extension "$extension" >/dev/null 2>&1
|
||||||
|
run_group "phpize" "phpize"
|
||||||
|
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 make install" "make install"
|
||||||
|
enable_extension "$extension" "$prefix"
|
||||||
|
fi
|
||||||
|
)
|
||||||
|
add_extension_log "$slug" "Installed from $source and enabled"
|
||||||
|
}
|
@ -1,350 +1,136 @@
|
|||||||
# Function to log start of a operation.
|
|
||||||
step_log() {
|
|
||||||
message=$1
|
|
||||||
printf "\n\033[90;1m==> \033[0m\033[37;1m%s\033[0m\n" "$message"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to log result of a operation.
|
|
||||||
add_log() {
|
|
||||||
mark=$1
|
|
||||||
subject=$2
|
|
||||||
message=$3
|
|
||||||
if [ "$mark" = "$tick" ]; then
|
|
||||||
printf "\033[32;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s\033[0m\n" "$mark" "$subject" "$message"
|
|
||||||
else
|
|
||||||
printf "\033[31;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s\033[0m\n" "$mark" "$subject" "$message"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to read env inputs.
|
|
||||||
read_env() {
|
|
||||||
[[ -z "${update}" ]] && update='false' && UPDATE='false' || update="${update}"
|
|
||||||
[ "$update" = false ] && [[ -n ${UPDATE} ]] && update="${UPDATE}"
|
|
||||||
[[ -z "${runner}" ]] && runner='github' && RUNNER='github' || runner="${runner}"
|
|
||||||
[ "$runner" = false ] && [[ -n ${RUNNER} ]] && runner="${RUNNER}"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to update the package lists.
|
|
||||||
update_lists() {
|
|
||||||
if [ "$lists_updated" = "false" ]; then
|
|
||||||
sudo "$debconf_fix" apt-get update >/dev/null 2>&1
|
|
||||||
lists_updated="true"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to setup environment for self-hosted runners.
|
# Function to setup environment for self-hosted runners.
|
||||||
self_hosted_setup() {
|
self_hosted_helper() {
|
||||||
echo "Set disable_coredump false" | sudo tee -a /etc/sudo.conf
|
if ! command -v sudo >/dev/null; then
|
||||||
|
apt-get update
|
||||||
|
apt-get install -y sudo || add_log "${cross:?}" "sudo" "Could not install sudo"
|
||||||
|
fi
|
||||||
if ! command -v apt-fast >/dev/null; then
|
if ! command -v apt-fast >/dev/null; then
|
||||||
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
|
||||||
fi
|
fi
|
||||||
update_lists && $apt_install curl make lsb-release software-properties-common unzip
|
install_packages apt-transport-https ca-certificates curl file make jq unzip autoconf automake gcc g++ gnupg
|
||||||
if ! apt-cache policy | grep -q ondrej/php; then
|
|
||||||
LC_ALL=C.UTF-8 sudo apt-add-repository ppa:ondrej/php -y
|
|
||||||
if [ "$(lsb_release -r -s)" = "16.04" ]; then
|
|
||||||
sudo "$debconf_fix" apt-get update
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to configure PECL.
|
# Function to install a package
|
||||||
configure_pecl() {
|
install_packages() {
|
||||||
if [ "$pecl_config" = "false" ] && [ -e /usr/bin/pecl ]; then
|
packages=("$@")
|
||||||
|
[[ "${packages[*]}" =~ php ]] && add_ppa ondrej/php >/dev/null 2>&1
|
||||||
for tool in pear pecl; do
|
$apt_install "${packages[@]}" >/dev/null 2>&1 || (update_lists && $apt_install "${packages[@]}" >/dev/null 2>&1)
|
||||||
sudo "$tool" config-set php_ini "$scan_dir"/99-pecl.ini
|
|
||||||
sudo "$tool" channel-update "$tool".php.net
|
|
||||||
done
|
|
||||||
pecl_config="true"
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Fuction to get the PECL version of an extension.
|
# Function to disable an extension.
|
||||||
get_pecl_version() {
|
disable_extension_helper() {
|
||||||
extension=$1
|
local extension=$1
|
||||||
stability=$2
|
local disable_dependents=${2:-false}
|
||||||
pecl_rest='https://pecl.php.net/rest/r/'
|
if [ "$disable_dependents" = "true" ]; then
|
||||||
response=$(curl -q -sSL "$pecl_rest$extension"/allreleases.xml)
|
disable_extension_dependents "$extension"
|
||||||
pecl_version=$(echo "$response" | grep -m 1 -Po "(\d*\.\d*\.\d*$stability\d*)")
|
|
||||||
if [ ! "$pecl_version" ]; then
|
|
||||||
pecl_version=$(echo "$response" | grep -m 1 -Po "(\d*\.\d*\.\d*)")
|
|
||||||
fi
|
fi
|
||||||
echo "$pecl_version"
|
sudo sed -Ei "/=(.*\/)?\"?$extension(.so)?$/d" "${ini_file[@]}" "$pecl_file"
|
||||||
|
sudo find "$ini_dir"/.. -name "*$extension.ini" -not -path "*mods-available*" -delete >/dev/null 2>&1 || true
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to check if an extension is loaded.
|
# Function to add PDO extension.
|
||||||
check_extension() {
|
|
||||||
extension=$1
|
|
||||||
if [ "$extension" != "mysql" ]; then
|
|
||||||
php -m | grep -i -q -w "$extension"
|
|
||||||
else
|
|
||||||
php -m | grep -i -q "$extension"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to delete extensions.
|
|
||||||
delete_extension() {
|
|
||||||
extension=$1
|
|
||||||
sudo sed -i "/$extension/d" "$ini_file"
|
|
||||||
sudo sed -i "/$extension/d" "$pecl_file"
|
|
||||||
sudo rm -rf "$scan_dir"/*"$extension"* >/dev/null 2>&1
|
|
||||||
sudo rm -rf "$ext_dir"/"$extension".so >/dev/null 2>&1
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to disable and delete extensions.
|
|
||||||
remove_extension() {
|
|
||||||
extension=$1
|
|
||||||
if check_extension "$extension"; then
|
|
||||||
if [[ ! "$version" =~ $old_versions ]] && [ -e /etc/php/"$version"/mods-available/"$extension".ini ]; then
|
|
||||||
sudo phpdismod -v "$version" "$extension" >/dev/null 2>&1
|
|
||||||
fi
|
|
||||||
delete_extension "$extension"
|
|
||||||
(! check_extension "$extension" && add_log "$tick" ":$extension" "Removed") ||
|
|
||||||
add_log "$cross" ":$extension" "Could not remove $extension on PHP $semver"
|
|
||||||
else
|
|
||||||
add_log "$tick" ":$extension" "Could not find $extension on PHP $semver"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to enable existing extensions.
|
|
||||||
enable_extension() {
|
|
||||||
if ! check_extension "$1" && [ -e "$ext_dir/$1.so" ]; then
|
|
||||||
echo "$2=$1.so" >>"$pecl_file"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Funcion to add PDO extension.
|
|
||||||
add_pdo_extension() {
|
add_pdo_extension() {
|
||||||
pdo_ext="pdo_$1"
|
pdo_ext="pdo_$1"
|
||||||
if check_extension "$pdo_ext"; then
|
if check_extension "$pdo_ext"; then
|
||||||
add_log "$tick" "$pdo_ext" "Enabled"
|
add_log "${tick:?}" "$pdo_ext" "Enabled"
|
||||||
else
|
else
|
||||||
read -r ext ext_name <<< "$1 $1"
|
ext=$1
|
||||||
sudo rm -rf "$scan_dir"/*pdo.ini >/dev/null 2>&1
|
ext_name=$1
|
||||||
if ! check_extension "pdo"; then echo "extension=pdo.so" >> "$ini_file"; fi
|
if shared_extension pdo; then
|
||||||
|
disable_extension_helper pdo
|
||||||
|
echo "extension=pdo.so" | sudo tee "${ini_file[@]/php.ini/conf.d/10-pdo.ini}" >/dev/null 2>&1
|
||||||
|
fi
|
||||||
if [ "$ext" = "mysql" ]; then
|
if [ "$ext" = "mysql" ]; then
|
||||||
enable_extension "mysqlnd" "extension"
|
enable_extension "mysqlnd" "extension"
|
||||||
ext_name="mysqli"
|
ext_name='mysqli'
|
||||||
|
elif [ "$ext" = "dblib" ]; then
|
||||||
|
ext_name="sybase"
|
||||||
|
elif [ "$ext" = "firebird" ]; then
|
||||||
|
install_packages libfbclient2 >/dev/null 2>&1
|
||||||
|
enable_extension "pdo_firebird" "extension"
|
||||||
|
ext_name="interbase"
|
||||||
elif [ "$ext" = "sqlite" ]; then
|
elif [ "$ext" = "sqlite" ]; then
|
||||||
read -r ext ext_name <<< "sqlite3 sqlite3"
|
ext="sqlite3"
|
||||||
|
ext_name="sqlite3"
|
||||||
fi
|
fi
|
||||||
add_extension "$ext_name" "$apt_install php$version-$ext" "extension" >/dev/null 2>&1
|
add_extension "$ext_name" "extension" >/dev/null 2>&1
|
||||||
enable_extension "$pdo_ext" "extension"
|
add_extension "$pdo_ext" "extension" >/dev/null 2>&1
|
||||||
(check_extension "$pdo_ext" && add_log "$tick" "$pdo_ext" "Enabled") ||
|
add_extension_log "$pdo_ext" "Enabled"
|
||||||
add_log "$cross" "$pdo_ext" "Could not install $pdo_ext on PHP $semver"
|
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to add extensions.
|
# Function to add extensions.
|
||||||
add_extension() {
|
add_extension() {
|
||||||
extension=$1
|
extension=$1
|
||||||
install_command=$2
|
prefix=$2
|
||||||
prefix=$3
|
|
||||||
enable_extension "$extension" "$prefix"
|
enable_extension "$extension" "$prefix"
|
||||||
if check_extension "$extension"; then
|
if check_extension "$extension"; then
|
||||||
add_log "$tick" "$extension" "Enabled"
|
add_log "${tick:?}" "$extension" "Enabled"
|
||||||
else
|
else
|
||||||
if [[ "$version" =~ 5.[4-5] ]]; then
|
if [[ "$version" =~ ${nightly_versions:?} ]]; then
|
||||||
install_command="update_lists && ${install_command/5\.[4-5]-$extension/5-$extension=$release_version}"
|
pecl_install "$extension"
|
||||||
fi
|
|
||||||
eval "$install_command" >/dev/null 2>&1 ||
|
|
||||||
(update_lists && eval "$install_command" >/dev/null 2>&1) ||
|
|
||||||
sudo pecl install -f "$extension" >/dev/null 2>&1
|
|
||||||
(check_extension "$extension" && add_log "$tick" "$extension" "Installed and enabled") ||
|
|
||||||
add_log "$cross" "$extension" "Could not install $extension on PHP $semver"
|
|
||||||
fi
|
|
||||||
sudo chmod 777 "$ini_file"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to install a PECL version.
|
|
||||||
add_pecl_extension() {
|
|
||||||
extension=$1
|
|
||||||
pecl_version=$2
|
|
||||||
prefix=$3
|
|
||||||
if ! check_extension "$extension" && [ -e "$ext_dir/$extension.so" ]; then
|
|
||||||
echo "$prefix=$ext_dir/$extension.so" >>"$pecl_file"
|
|
||||||
fi
|
|
||||||
ext_version=$(php -r "echo phpversion('$extension');")
|
|
||||||
if [ "$ext_version" = "$pecl_version" ]; then
|
|
||||||
add_log "$tick" "$extension" "Enabled"
|
|
||||||
else
|
else
|
||||||
delete_extension "$extension"
|
install_packages "php$version-$extension" || pecl_install "$extension"
|
||||||
(
|
|
||||||
sudo pecl install -f "$extension-$pecl_version" >/dev/null 2>&1 &&
|
|
||||||
check_extension "$extension" &&
|
|
||||||
add_log "$tick" "$extension" "Installed and enabled"
|
|
||||||
) || add_log "$cross" "$extension" "Could not install $extension-$pecl_version on PHP $semver"
|
|
||||||
fi
|
fi
|
||||||
}
|
add_extension_log "$extension" "Installed and enabled"
|
||||||
|
|
||||||
# Function to pre-release extensions using PECL.
|
|
||||||
add_unstable_extension() {
|
|
||||||
extension=$1
|
|
||||||
stability=$2
|
|
||||||
prefix=$3
|
|
||||||
pecl_version=$(get_pecl_version "$extension" "$stability")
|
|
||||||
add_pecl_extension "$extension" "$pecl_version" "$prefix"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to update extension.
|
|
||||||
update_extension() {
|
|
||||||
extension=$1
|
|
||||||
latest_version=$2
|
|
||||||
current_version=$(php -r "echo phpversion('$extension');")
|
|
||||||
final_version=$(printf "%s\n%s" "$current_version" "$latest_version" | sort | tail -n 1)
|
|
||||||
if [ "$final_version" != "$current_version" ]; then
|
|
||||||
version_exists=$(apt-cache policy -- *"$extension" | grep "$final_version")
|
|
||||||
if [ -z "$version_exists" ]; then
|
|
||||||
update_lists
|
|
||||||
fi
|
fi
|
||||||
$apt_install php"$version"-"$extension"
|
sudo chmod 777 "${ini_file[@]}"
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to install extension from source
|
|
||||||
add_extension_from_source() {
|
|
||||||
extension=$1
|
|
||||||
repo=$2
|
|
||||||
release=$3
|
|
||||||
args=$4
|
|
||||||
prefix=$5
|
|
||||||
(
|
|
||||||
add_devtools
|
|
||||||
delete_extension "$extension"
|
|
||||||
curl -o /tmp/"$extension".tar.gz -sSL https://github.com/"$repo"/archive/"$release".tar.gz
|
|
||||||
tar xf /tmp/"$extension".tar.gz -C /tmp
|
|
||||||
cd /tmp/"$extension-$release" || exit 1
|
|
||||||
phpize && ./configure "$args" && make && sudo make install
|
|
||||||
enable_extension "$extension" "$prefix"
|
|
||||||
) >/dev/null 2>&1
|
|
||||||
(
|
|
||||||
check_extension "$extension" && add_log "$tick" "$extension" "Installed and enabled"
|
|
||||||
) || add_log "$cross" "$extension" "Could not install $extension-$release on PHP $semver"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to setup a remote tool.
|
|
||||||
add_tool() {
|
|
||||||
url=$1
|
|
||||||
tool=$2
|
|
||||||
tool_path="$tool_path_dir/$tool"
|
|
||||||
if [ ! -e "$tool_path" ]; then
|
|
||||||
rm -rf "$tool_path"
|
|
||||||
fi
|
|
||||||
status_code=$(sudo curl -s -w "%{http_code}" -o "$tool_path" -L "$url")
|
|
||||||
if [ "$status_code" = "200" ]; then
|
|
||||||
sudo chmod a+x "$tool_path"
|
|
||||||
if [ "$tool" = "composer" ]; then
|
|
||||||
composer -q global config process-timeout 0
|
|
||||||
echo "::add-path::/home/$USER/.composer/vendor/bin"
|
|
||||||
if [ -n "$COMPOSER_TOKEN" ]; then
|
|
||||||
composer -q global config github-oauth.github.com "$COMPOSER_TOKEN"
|
|
||||||
fi
|
|
||||||
# TODO: Remove after composer 2.0 update, fixes peer fingerprint error
|
|
||||||
if [[ "$version" =~ $old_versions ]]; then
|
|
||||||
composer -q global config repos.packagist composer https://repo-ca-bhs-1.packagist.org
|
|
||||||
fi
|
|
||||||
elif [ "$tool" = "cs2pr" ]; then
|
|
||||||
sudo sed -i 's/\r$//; s/exit(9)/exit(0)/' "$tool_path"
|
|
||||||
elif [ "$tool" = "phan" ]; then
|
|
||||||
add_extension fileinfo "$apt_install php$version-fileinfo" extension >/dev/null 2>&1
|
|
||||||
add_extension ast "$apt_install php-ast" extension >/dev/null 2>&1
|
|
||||||
elif [ "$tool" = "phive" ]; then
|
|
||||||
add_extension curl "$apt_install php$version-curl" extension >/dev/null 2>&1
|
|
||||||
add_extension mbstring "$apt_install php$version-mbstring" extension >/dev/null 2>&1
|
|
||||||
add_extension xml "$apt_install php$version-xml" extension >/dev/null 2>&1
|
|
||||||
elif [ "$tool" = "wp-cli" ]; then
|
|
||||||
sudo cp -p "$tool_path" "$tool_path_dir"/wp
|
|
||||||
fi
|
|
||||||
add_log "$tick" "$tool" "Added"
|
|
||||||
else
|
|
||||||
add_log "$cross" "$tool" "Could not setup $tool"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to setup a tool using composer.
|
|
||||||
add_composertool() {
|
|
||||||
tool=$1
|
|
||||||
release=$2
|
|
||||||
prefix=$3
|
|
||||||
(
|
|
||||||
composer global require "$prefix$release" >/dev/null 2>&1 &&
|
|
||||||
add_log "$tick" "$tool" "Added"
|
|
||||||
) || add_log "$cross" "$tool" "Could not setup $tool"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to setup phpize and php-config.
|
# Function to setup phpize and php-config.
|
||||||
add_devtools() {
|
add_devtools() {
|
||||||
if ! [ -e "/usr/bin/phpize$version" ] || ! [ -e "/usr/bin/php-config$version" ]; then
|
tool=$1
|
||||||
update_lists && $apt_install php"$version"-dev php"$version"-xml >/dev/null 2>&1
|
if ! command -v "$tool$version" >/dev/null; then
|
||||||
|
install_packages "php$version-dev" "php$version-xml"
|
||||||
fi
|
fi
|
||||||
sudo update-alternatives --set php-config /usr/bin/php-config"$version" >/dev/null 2>&1
|
switch_version "phpize" "php-config"
|
||||||
sudo update-alternatives --set phpize /usr/bin/phpize"$version" >/dev/null 2>&1
|
add_log "${tick:?}" "$tool" "Added $tool $semver"
|
||||||
configure_pecl >/dev/null 2>&1
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to add blackfire and blackfire-agent.
|
# Function to setup the nightly build from shivammathur/php-builder
|
||||||
add_blackfire() {
|
setup_nightly() {
|
||||||
sudo mkdir -p /var/run/blackfire
|
run_script "php-builder" "${runner:?}" "$version"
|
||||||
sudo curl -sSL https://packages.blackfire.io/gpg.key | sudo apt-key add - >/dev/null 2>&1
|
|
||||||
echo "deb http://packages.blackfire.io/debian any main" | sudo tee /etc/apt/sources.list.d/blackfire.list >/dev/null 2>&1
|
|
||||||
sudo "$debconf_fix" apt-get update >/dev/null 2>&1
|
|
||||||
$apt_install blackfire-agent >/dev/null 2>&1
|
|
||||||
if [[ -n $BLACKFIRE_SERVER_ID ]] && [[ -n $BLACKFIRE_SERVER_TOKEN ]]; then
|
|
||||||
sudo blackfire-agent --register --server-id="$BLACKFIRE_SERVER_ID" --server-token="$BLACKFIRE_SERVER_TOKEN" >/dev/null 2>&1
|
|
||||||
sudo /etc/init.d/blackfire-agent restart >/dev/null 2>&1
|
|
||||||
fi
|
|
||||||
if [[ -n $BLACKFIRE_CLIENT_ID ]] && [[ -n $BLACKFIRE_CLIENT_TOKEN ]]; then
|
|
||||||
sudo blackfire config --client-id="$BLACKFIRE_CLIENT_ID" --client-token="$BLACKFIRE_CLIENT_TOKEN" >/dev/null 2>&1
|
|
||||||
fi
|
|
||||||
add_log "$tick" "blackfire" "Added"
|
|
||||||
add_log "$tick" "blackfire-agent" "Added"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to setup the nightly build from master branch.
|
|
||||||
setup_master() {
|
|
||||||
curl -sSL "$github"/php-builder/releases/latest/download/install.sh | bash -s "$runner"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# 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.
|
||||||
setup_old_versions() {
|
setup_old_versions() {
|
||||||
curl -sSL "$github"/php5-ubuntu/releases/latest/download/install.sh | bash -s "$version"
|
run_script "php5-ubuntu" "$version"
|
||||||
configure_pecl
|
|
||||||
release_version=$(php -v | head -n 1 | cut -d' ' -f 2)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to add PECL.
|
# Function to add PECL.
|
||||||
add_pecl() {
|
add_pecl() {
|
||||||
add_devtools >/dev/null 2>&1
|
add_devtools phpize >/dev/null 2>&1
|
||||||
if [ ! -e /usr/bin/pecl ]; then
|
if ! command -v pecl >/dev/null; then
|
||||||
$apt_install php-pear >/dev/null 2>&1
|
install_packages php-pear
|
||||||
fi
|
fi
|
||||||
configure_pecl >/dev/null 2>&1
|
configure_pecl >/dev/null 2>&1
|
||||||
add_log "$tick" "PECL" "Added"
|
pear_version=$(get_tool_version "pecl" "version")
|
||||||
|
add_log "${tick:?}" "PECL" "Added PECL $pear_version"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to switch versions of PHP binaries.
|
# Function to switch versions of PHP binaries.
|
||||||
switch_version() {
|
switch_version() {
|
||||||
for tool in pear pecl php phar phar.phar php-cgi php-config phpize phpdbg; do
|
tools=("$@") && ! (( ${#tools[@]} )) && tools+=(pear pecl php phar phar.phar php-cgi php-config phpize phpdbg)
|
||||||
|
to_wait=()
|
||||||
|
for tool in "${tools[@]}"; do
|
||||||
if [ -e "/usr/bin/$tool$version" ]; then
|
if [ -e "/usr/bin/$tool$version" ]; then
|
||||||
sudo update-alternatives --set $tool /usr/bin/"$tool$version"
|
sudo update-alternatives --set "$tool" /usr/bin/"$tool$version" &
|
||||||
|
to_wait+=($!)
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
}
|
wait "${to_wait[@]}"
|
||||||
|
|
||||||
# Function to get PHP version in semver format.
|
|
||||||
php_semver() {
|
|
||||||
if [ ! "$version" = "$master_version" ]; then
|
|
||||||
php"$version" -v | head -n 1 | cut -f 2 -d ' ' | cut -f 1 -d '-'
|
|
||||||
else
|
|
||||||
php -v | head -n 1 | cut -f 2 -d ' '
|
|
||||||
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
|
||||||
update_lists
|
update_lists
|
||||||
IFS=' ' read -r -a packages <<< "$(echo "curl mbstring xml intl" | sed "s/[^ ]*/php$version-&/g")"
|
IFS=' ' read -r -a packages <<<"$(echo "cli curl mbstring xml intl" | sed "s/[^ ]*/php$version-&/g")"
|
||||||
$apt_install php"$version" "${packages[@]}"
|
install_packages "${packages[@]}"
|
||||||
|
else
|
||||||
|
run_script "php-ubuntu" "$version"
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to update PHP.
|
# Function to update PHP.
|
||||||
@ -361,9 +147,9 @@ update_php() {
|
|||||||
|
|
||||||
# Function to install PHP.
|
# Function to install PHP.
|
||||||
add_php() {
|
add_php() {
|
||||||
if [ "$version" = "$master_version" ]; then
|
if [[ "$version" =~ ${nightly_versions:?} ]]; then
|
||||||
setup_master
|
setup_nightly
|
||||||
elif [[ "$version" =~ $old_versions ]]; then
|
elif [[ "$version" =~ ${old_versions:?} ]]; then
|
||||||
setup_old_versions
|
setup_old_versions
|
||||||
else
|
else
|
||||||
add_packaged_php
|
add_packaged_php
|
||||||
@ -371,62 +157,80 @@ add_php() {
|
|||||||
status="Installed"
|
status="Installed"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Variables
|
# Function to ini file for pear and link it to each SAPI.
|
||||||
tick="✓"
|
link_pecl_file() {
|
||||||
cross="✗"
|
echo '' | sudo tee "$pecl_file" >/dev/null 2>&1
|
||||||
lists_updated="false"
|
for file in "${ini_file[@]}"; do
|
||||||
pecl_config="false"
|
sapi_scan_dir="$(realpath -m "$(dirname "$file")")/conf.d"
|
||||||
version=$1
|
[ "$sapi_scan_dir" != "$scan_dir" ] && ! [ -h "$sapi_scan_dir" ] && sudo ln -sf "$pecl_file" "$sapi_scan_dir/99-pecl.ini"
|
||||||
master_version="8.0"
|
done
|
||||||
old_versions="5.[3-5]"
|
}
|
||||||
debconf_fix="DEBIAN_FRONTEND=noninteractive"
|
|
||||||
github="https://github.com/shivammathur"
|
|
||||||
apt_install="sudo $debconf_fix apt-fast install -y"
|
|
||||||
tool_path_dir="/usr/local/bin"
|
|
||||||
existing_version=$(php-config --version 2>/dev/null | cut -c 1-3)
|
|
||||||
|
|
||||||
read_env
|
# Function to get extra version.
|
||||||
if [ "$runner" = "self-hosted" ]; then
|
php_extra_version() {
|
||||||
if [[ "$version" =~ $old_versions ]]; then
|
if [ -e /etc/php/"$version"/COMMIT ]; then
|
||||||
add_log "$cross" "PHP" "PHP $version is not supported on self-hosted runner"
|
echo " ($(cat "/etc/php/$version/COMMIT"))"
|
||||||
exit 1
|
|
||||||
else
|
|
||||||
self_hosted_setup >/dev/null 2>&1
|
|
||||||
fi
|
fi
|
||||||
fi
|
}
|
||||||
|
|
||||||
# Setup PHP
|
# Function to Setup PHP
|
||||||
step_log "Setup PHP"
|
setup_php() {
|
||||||
sudo mkdir -p /var/run /run/php
|
step_log "Setup PHP"
|
||||||
if [ "$existing_version" != "$version" ]; then
|
sudo mkdir -m 777 -p /var/run /run/php
|
||||||
|
if [ "$(php-config --version 2>/dev/null | cut -c 1-3)" != "$version" ]; then
|
||||||
if [ ! -e "/usr/bin/php$version" ]; then
|
if [ ! -e "/usr/bin/php$version" ]; then
|
||||||
add_php >/dev/null 2>&1
|
add_php >/dev/null 2>&1
|
||||||
else
|
else
|
||||||
if [ "$update" = "true" ]; then
|
if [ "${update:?}" = "true" ]; then
|
||||||
update_php >/dev/null 2>&1
|
update_php >/dev/null 2>&1
|
||||||
else
|
else
|
||||||
status="Switched to"
|
status="Switched to"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
if ! [[ "$version" =~ $old_versions ]]; then
|
if ! [[ "$version" =~ ${old_versions:?}|${nightly_versions:?} ]]; then
|
||||||
switch_version >/dev/null 2>&1
|
switch_version >/dev/null 2>&1
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
if [ "$update" = "true" ]; then
|
if [ "$update" = "true" ]; then
|
||||||
update_php >/dev/null 2>&1
|
update_php >/dev/null 2>&1
|
||||||
else
|
else
|
||||||
status="Found"
|
status="Found"
|
||||||
if [ "$version" = "$master_version" ]; then
|
|
||||||
switch_version >/dev/null 2>&1
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
if ! command -v php"$version" >/dev/null; then
|
||||||
|
add_log "$cross" "PHP" "Could not setup PHP $version"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
semver=$(php_semver)
|
||||||
|
extra_version=$(php_extra_version)
|
||||||
|
ext_dir=$(php -i | grep "extension_dir => /" | sed -e "s|.*=> s*||")
|
||||||
|
scan_dir=$(php --ini | grep additional | sed -e "s|.*: s*||")
|
||||||
|
ini_dir=$(php --ini | grep "(php.ini)" | sed -e "s|.*: s*||")
|
||||||
|
pecl_file="$scan_dir"/99-pecl.ini
|
||||||
|
export ext_dir
|
||||||
|
mapfile -t ini_file < <(sudo find "$ini_dir/.." -name "php.ini" -exec readlink -m {} +)
|
||||||
|
link_pecl_file
|
||||||
|
configure_php
|
||||||
|
sudo rm -rf /usr/local/bin/phpunit >/dev/null 2>&1
|
||||||
|
sudo chmod 777 "${ini_file[@]}" "$pecl_file" "${tool_path_dir:?}"
|
||||||
|
sudo cp "$dist"/../src/configs/*.json "$RUNNER_TOOL_CACHE/"
|
||||||
|
echo "::set-output name=php-version::$semver"
|
||||||
|
add_log "${tick:?}" "PHP" "$status PHP $semver$extra_version"
|
||||||
|
}
|
||||||
|
|
||||||
semver=$(php_semver)
|
# Variables
|
||||||
ext_dir=$(php -i | grep "extension_dir => /" | sed -e "s|.*=> s*||")
|
version=$1
|
||||||
scan_dir=$(php --ini | grep additional | sed -e "s|.*: s*||")
|
dist=$2
|
||||||
ini_file=$(php --ini | grep "Loaded Configuration" | sed -e "s|.*:s*||" | sed "s/ //g")
|
debconf_fix="DEBIAN_FRONTEND=noninteractive"
|
||||||
pecl_file="$scan_dir"/99-pecl.ini
|
apt_install="sudo $debconf_fix apt-fast install -y --no-install-recommends"
|
||||||
echo '' | sudo tee "$pecl_file" >/dev/null 2>&1
|
scripts="${dist}"/../src/scripts
|
||||||
sudo chmod 777 "$ini_file" "$pecl_file" "$tool_path_dir"
|
|
||||||
add_log "$tick" "PHP" "$status PHP $semver"
|
. /etc/os-release
|
||||||
|
# shellcheck source=.
|
||||||
|
. "${scripts:?}"/ext/source.sh
|
||||||
|
. "${scripts:?}"/tools/ppa.sh
|
||||||
|
. "${scripts:?}"/tools/add_tools.sh
|
||||||
|
. "${scripts:?}"/common.sh
|
||||||
|
read_env
|
||||||
|
self_hosted_setup
|
||||||
|
setup_php
|
||||||
|
26
src/scripts/tools/add_tools.ps1
Normal file
26
src/scripts/tools/add_tools.ps1
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
Function Add-ToolsHelper() {
|
||||||
|
Param (
|
||||||
|
[Parameter(Position = 0, Mandatory = $true)]
|
||||||
|
[ValidateNotNull()]
|
||||||
|
$tool
|
||||||
|
)
|
||||||
|
if($tool -eq "codeception") {
|
||||||
|
Copy-Item $composer_bin\codecept.bat -Destination $composer_bin\codeception.bat
|
||||||
|
} elseif($tool -eq "composer") {
|
||||||
|
Edit-ComposerConfig $bin_dir\$tool
|
||||||
|
} elseif($tool -eq "cs2pr") {
|
||||||
|
(Get-Content $bin_dir/cs2pr).replace('exit(9)', 'exit(0)') | Set-Content $bin_dir/cs2pr
|
||||||
|
} elseif($tool -eq "phan") {
|
||||||
|
Add-Extension fileinfo >$null 2>&1
|
||||||
|
Add-Extension ast >$null 2>&1
|
||||||
|
} elseif($tool -eq "phive") {
|
||||||
|
Add-Extension xml >$null 2>&1
|
||||||
|
} elseif($tool -eq "symfony-cli") {
|
||||||
|
Add-ToProfile $current_profile "symfony" "New-Alias symfony $bin_dir\symfony-cli.exe"
|
||||||
|
Add-ToProfile $current_profile "symfony_cli" "New-Alias symfony-cli $bin_dir\symfony-cli.exe"
|
||||||
|
} elseif($tool -match "vapor-cli") {
|
||||||
|
Copy-Item $composer_bin\vapor.bat -Destination $composer_bin\vapor-cli.bat
|
||||||
|
} elseif($tool -eq "wp-cli") {
|
||||||
|
Copy-Item $bin_dir\wp-cli.bat -Destination $bin_dir\wp.bat
|
||||||
|
}
|
||||||
|
}
|
20
src/scripts/tools/add_tools.sh
Normal file
20
src/scripts/tools/add_tools.sh
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
add_tools_helper() {
|
||||||
|
tool=$1
|
||||||
|
if [ "$tool" = "codeception" ]; then
|
||||||
|
sudo ln -s "${composer_bin:?}"/codecept "${composer_bin:?}"/codeception
|
||||||
|
elif [ "$tool" = "composer" ]; then
|
||||||
|
configure_composer "${tool_path:?}"
|
||||||
|
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:?}"
|
||||||
|
elif [ "$tool" = "phan" ]; then
|
||||||
|
add_extension fileinfo extension >/dev/null 2>&1
|
||||||
|
add_extension ast extension >/dev/null 2>&1
|
||||||
|
elif [ "$tool" = "phive" ]; then
|
||||||
|
add_extension curl extension >/dev/null 2>&1
|
||||||
|
add_extension mbstring extension >/dev/null 2>&1
|
||||||
|
add_extension xml extension >/dev/null 2>&1
|
||||||
|
elif [[ "$tool" =~ (symfony|vapor|wp)-cli ]]; then
|
||||||
|
sudo ln -s "${tool_path:?}" "${tool_path_dir:?}"/${tool%-*}
|
||||||
|
fi
|
||||||
|
}
|
19
src/scripts/tools/blackfire.ps1
Normal file
19
src/scripts/tools/blackfire.ps1
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
# Function to add blackfire cli.
|
||||||
|
Function Add-Blackfire() {
|
||||||
|
$arch_name ='amd64'
|
||||||
|
if(-not([Environment]::Is64BitOperatingSystem) -or $version -lt '7.0') {
|
||||||
|
$arch_name = '386'
|
||||||
|
}
|
||||||
|
$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"
|
||||||
|
Invoke-WebRequest -Uri $url -OutFile $bin_dir\blackfire.zip >$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"
|
||||||
|
if ((Test-Path env:BLACKFIRE_SERVER_ID) -and (Test-Path env:BLACKFIRE_SERVER_TOKEN)) {
|
||||||
|
blackfire agent:config --server-id=$env:BLACKFIRE_SERVER_ID --server-token=$env:BLACKFIRE_SERVER_TOKEN >$null 2>&1
|
||||||
|
}
|
||||||
|
if ((Test-Path env:BLACKFIRE_CLIENT_ID) -and (Test-Path env:BLACKFIRE_CLIENT_TOKEN)) {
|
||||||
|
blackfire client:config --client-id=$env:BLACKFIRE_CLIENT_ID --client-token=$env:BLACKFIRE_CLIENT_TOKEN --ca-cert=$php_dir\ssl\cacert.pem >$null 2>&1
|
||||||
|
}
|
||||||
|
Add-Log $tick "blackfire" "Added blackfire $cli_version"
|
||||||
|
}
|
39
src/scripts/tools/blackfire.sh
Normal file
39
src/scripts/tools/blackfire.sh
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
add_blackfire_linux() {
|
||||||
|
sudo mkdir -p /var/run/blackfire
|
||||||
|
add_list debian/blackfire http://packages.blackfire.io/debian https://packages.blackfire.io/gpg.key any main
|
||||||
|
install_packages blackfire
|
||||||
|
}
|
||||||
|
|
||||||
|
add_blackfire_darwin() {
|
||||||
|
sudo mkdir -p /usr/local/var/run
|
||||||
|
add_brew_tap blackfireio/homebrew-blackfire
|
||||||
|
brew install blackfire
|
||||||
|
}
|
||||||
|
|
||||||
|
blackfire_config() {
|
||||||
|
if [[ -n $BLACKFIRE_SERVER_ID ]] && [[ -n $BLACKFIRE_SERVER_TOKEN ]]; then
|
||||||
|
blackfire agent:config --server-id="$BLACKFIRE_SERVER_ID" --server-token="$BLACKFIRE_SERVER_TOKEN"
|
||||||
|
if [ "$os" = "Linux" ]; then
|
||||||
|
if [ -d /run/systemd/system ]; then
|
||||||
|
sudo systemctl start blackfire-agent
|
||||||
|
else
|
||||||
|
sudo service blackfire-agent start
|
||||||
|
fi
|
||||||
|
elif [ "$os" = "Darwin" ]; then
|
||||||
|
brew services start blackfire
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [[ -n $BLACKFIRE_CLIENT_ID ]] && [[ -n $BLACKFIRE_CLIENT_TOKEN ]]; then
|
||||||
|
blackfire client:config --client-id="$BLACKFIRE_CLIENT_ID" --client-token="$BLACKFIRE_CLIENT_TOKEN"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to add blackfire cli.
|
||||||
|
add_blackfire() {
|
||||||
|
os="$(uname -s)"
|
||||||
|
[ "$os" = "Linux" ] && add_blackfire_linux >/dev/null 2>&1
|
||||||
|
[ "$os" = "Darwin" ] && add_blackfire_darwin >/dev/null 2>&1
|
||||||
|
blackfire_config >/dev/null 2>&1
|
||||||
|
tool_version=$(get_tool_version "blackfire" "version")
|
||||||
|
add_log "${tick:?}" "blackfire" "Added blackfire $tool_version"
|
||||||
|
}
|
21
src/scripts/tools/grpc_php_plugin.ps1
Normal file
21
src/scripts/tools/grpc_php_plugin.ps1
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
Function Add-Msys2() {
|
||||||
|
$msys_location = 'C:\msys64'
|
||||||
|
if (-not(Test-Path $msys_location)) {
|
||||||
|
choco install msys2 -y >$null 2>&1
|
||||||
|
$msys_location = 'C:\tools\msys64'
|
||||||
|
}
|
||||||
|
return $msys_location
|
||||||
|
}
|
||||||
|
|
||||||
|
Function Add-Grpc_php_plugin() {
|
||||||
|
$msys_location = Add-Msys2
|
||||||
|
$logs = . $msys_location\usr\bin\bash -l -c "pacman -S --noconfirm mingw-w64-x86_64-grpc" >$null 2>&1
|
||||||
|
$grpc_version = Get-ToolVersion 'Write-Output' "$logs"
|
||||||
|
Write-Output "$msys_location\mingw64\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8
|
||||||
|
Write-Output "::set-output name=grpc_php_plugin_path::$msys_location\mingw64\bin\grpc_php_plugin.exe"
|
||||||
|
Add-ToProfile $current_profile 'grpc_php_plugin' "New-Alias grpc_php_plugin $msys_location\mingw64\bin\grpc_php_plugin.exe"
|
||||||
|
Add-Log $tick "grpc_php_plugin" "Added grpc_php_plugin $grpc_version"
|
||||||
|
printf "::group::\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" "grpc_php_plugin" "Click to read the grpc_php_plugin related license information"
|
||||||
|
Write-Output (Invoke-WebRequest https://raw.githubusercontent.com/grpc/grpc/master/LICENSE).Content
|
||||||
|
Write-Output "::endgroup::"
|
||||||
|
}
|
58
src/scripts/tools/grpc_php_plugin.sh
Normal file
58
src/scripts/tools/grpc_php_plugin.sh
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
add_bazel() {
|
||||||
|
if ! command -v bazel; then
|
||||||
|
if [ "$(uname -s)" = "Linux" ]; then
|
||||||
|
add_list bazel/apt https://storage.googleapis.com/bazel-apt https://bazel.build/bazel-release.pub.gpg stable jdk1.8
|
||||||
|
install_packages bazel
|
||||||
|
else
|
||||||
|
brew install bazel
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
get_grpc_tag() {
|
||||||
|
if [ "$grpc_tag" = "latest" ]; then
|
||||||
|
grpc_tag=$(get -s -n "" https://github.com/grpc/grpc/releases/latest | grep -Eo -m 1 "v[0-9]+\.[0-9]+\.[0-9]+" | head -n 1)
|
||||||
|
else
|
||||||
|
if [[ ${grpc_tag:0:1} != "v" ]] ; then grpc_tag="v$grpc_tag"; fi
|
||||||
|
status_code=$(get -v -n /tmp/grpc.tmp "https://github.com/grpc/grpc/releases/tag/$grpc_tag")
|
||||||
|
if [ "$status_code" != "200" ]; then
|
||||||
|
grpc_tag=$(get -s -n "" https://github.com/grpc/grpc/releases/latest | grep -Eo -m 1 "v[0-9]+\.[0-9]+\.[0-9]+" | head -n 1)
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
add_grpc_php_plugin_brew() {
|
||||||
|
brew install grpc
|
||||||
|
brew link --force --overwrite grpc >/dev/null 2>&1
|
||||||
|
grpc_tag="v$(brew info grpc | grep "grpc:" | grep -Eo "[0-9]+\.[0-9]+\.[0-9]+")"
|
||||||
|
license_path="$(brew --prefix grpc)/LICENSE"
|
||||||
|
}
|
||||||
|
|
||||||
|
add_grpc_php_plugin_compile() {
|
||||||
|
get_grpc_tag
|
||||||
|
get -s -n "" "https://github.com/grpc/grpc/archive/$grpc_tag.tar.gz" | tar -xz -C /tmp
|
||||||
|
export DISABLE_BAZEL_WRAPPER=1
|
||||||
|
(
|
||||||
|
cd "/tmp/grpc-${grpc_tag:1}" || exit
|
||||||
|
add_bazel
|
||||||
|
./tools/bazel build src/compiler:grpc_php_plugin
|
||||||
|
sudo mv ./bazel-bin/src/compiler/grpc_php_plugin /usr/local/bin/grpc_php_plugin
|
||||||
|
sudo chmod a+x /usr/local/bin/grpc_php_plugin
|
||||||
|
license_path="/tmp/grpc-${grpc_tag:1}/LICENSE"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
add_grpc_php_plugin() {
|
||||||
|
grpc_tag=$1
|
||||||
|
license_path=""
|
||||||
|
if [ "$grpc_tag" = "latest" ]; then
|
||||||
|
add_grpc_php_plugin_brew >/dev/null 2>&1
|
||||||
|
else
|
||||||
|
add_grpc_php_plugin_compile >/dev/null 2>&1
|
||||||
|
fi
|
||||||
|
echo "::set-output name=grpc_php_plugin_path::$(command -v grpc_php_plugin)"
|
||||||
|
add_log "${tick:?}" "grpc_php_plugin" "Added grpc_php_plugin ${grpc_tag:1}"
|
||||||
|
printf "::group::\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" "grpc_php_plugin" "Click to read the grpc_php_plugin related license information"
|
||||||
|
cat "$license_path"
|
||||||
|
echo "::endgroup::"
|
||||||
|
}
|
169
src/scripts/tools/ppa.sh
Normal file
169
src/scripts/tools/ppa.sh
Normal file
@ -0,0 +1,169 @@
|
|||||||
|
# Function to try to set ubuntu or debian version.
|
||||||
|
set_base_version_id() {
|
||||||
|
[[ "$ID" =~ ubuntu|debian ]] && return;
|
||||||
|
if ! [ -d "$dist_info_dir" ]; then
|
||||||
|
sudo mkdir -p "$dist_info_dir"
|
||||||
|
get -q -n "$dist_info_dir"/os_releases.csv https://raw.githubusercontent.com/shivammathur/setup-php/develop/src/configs/os_releases.csv
|
||||||
|
fi
|
||||||
|
for base in ubuntu debian; do
|
||||||
|
[[ "$ID_LIKE" =~ $base ]] && ID="$base" && VERSION_ID="$(grep -hr -m 1 "$VERSION_CODENAME" /usr/share/distro-info | cut -d ',' -f 1 | cut -d ' ' -f 1)" && break
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to try to set ubuntu or debian codename.
|
||||||
|
set_base_version_codename() {
|
||||||
|
[[ "$ID" =~ ubuntu|debian ]] && return;
|
||||||
|
if [[ "$ID_LIKE" =~ ubuntu ]]; then
|
||||||
|
[[ -n "$UBUNTU_CODENAME" ]] && VERSION_CODENAME="$UBUNTU_CODENAME" && return;
|
||||||
|
[ -e "$upstream_lsb" ] && VERSION_CODENAME=$(grep 'CODENAME' "$upstream_lsb" | cut -d '=' -f 2) && return;
|
||||||
|
VERSION_CODENAME=$(grep -E -m1 'deb .*ubuntu.com' "$list_file" | cut -d ' ' -f 3) && VERSION_CODENAME=${VERSION_CODENAME%-*}
|
||||||
|
elif [[ "$ID_LIKE" =~ debian ]] || command -v dpkg >/dev/null; then
|
||||||
|
ID_LIKE=debian
|
||||||
|
[[ -n "$DEBIAN_CODENAME" ]] && VERSION_CODENAME="$DEBIAN_CODENAME" && return;
|
||||||
|
update_lists && VERSION_CODENAME=$(apt-cache show tzdata | grep -m 1 Provides | cut -d '-' -f 2)
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to set base os details
|
||||||
|
set_base_version() {
|
||||||
|
if [ -e /tmp/os-release ]; then
|
||||||
|
. /tmp/os-release
|
||||||
|
else
|
||||||
|
set_base_version_codename
|
||||||
|
set_base_version_id
|
||||||
|
printf "ID=%s\nVERSION_ID=%s\nVERSION_CODENAME=%s\n" "$ID" "$VERSION_ID" "$VERSION_CODENAME" | tee /tmp/os-release >/dev/null 2>&1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Helper function to update package lists.
|
||||||
|
update_lists_helper() {
|
||||||
|
list=$1
|
||||||
|
command -v sudo >/dev/null && SUDO=sudo
|
||||||
|
if [[ -n "$list" ]]; then
|
||||||
|
${SUDO} apt-get update -o Dir::Etc::sourcelist="$list" -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"
|
||||||
|
else
|
||||||
|
${SUDO} apt-get update
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to update the package lists.
|
||||||
|
update_lists() {
|
||||||
|
local ppa=${1:-}
|
||||||
|
local ppa_search=${2:-}
|
||||||
|
if [ ! -e /tmp/setup_php ] || [[ -n $ppa && -n $ppa_search ]]; then
|
||||||
|
if [[ -n "$ppa" && -n "$ppa_search" ]]; then
|
||||||
|
list="$list_dir"/"$(basename "$(grep -lr "$ppa_search" "$list_dir")")"
|
||||||
|
elif grep -Eq '^deb ' "$list_file"; then
|
||||||
|
list="$list_file"
|
||||||
|
fi
|
||||||
|
update_lists_helper "$list" >/dev/null 2>&1
|
||||||
|
echo '' | tee /tmp/setup_php >/dev/null 2>&1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to get fingerprint from an Ubuntu PPA.
|
||||||
|
ubuntu_fingerprint() {
|
||||||
|
ppa=$1
|
||||||
|
get -s -n "" "$lp_api"/~"${ppa%/*}"/+archive/"${ppa##*/}" | jq -r '.signing_key_fingerprint'
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to get fingerprint from a Debian PPA.
|
||||||
|
debian_fingerprint() {
|
||||||
|
ppa=$1
|
||||||
|
ppa_url=$2
|
||||||
|
package_dist=$3
|
||||||
|
release_pub=/tmp/"${ppa/\//-}".gpg
|
||||||
|
get -q -n "$release_pub" "$ppa_url"/dists/"$package_dist"/Release.gpg
|
||||||
|
gpg --list-packets "$release_pub" | grep -Eo 'fpr\sv4\s.*[a-zA-Z0-9]+' | head -n 1 | cut -d ' ' -f 3
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to add a GPG key.
|
||||||
|
add_key() {
|
||||||
|
ppa=${1:-ondrej/php}
|
||||||
|
ppa_url=$2
|
||||||
|
package_dist=$3
|
||||||
|
key_source=$4
|
||||||
|
key_file=$5
|
||||||
|
key_urls=("$key_source")
|
||||||
|
if [[ "$key_source" =~ launchpad.net|debian.org|setup-php.com ]]; then
|
||||||
|
fingerprint="$("${ID}"_fingerprint "$ppa" "$ppa_url" "$package_dist")"
|
||||||
|
sks_params="op=get&options=mr&exact=on&search=0x$fingerprint"
|
||||||
|
key_urls=("${sks[@]/%/\/pks\/lookup\?"$sks_params"}")
|
||||||
|
fi
|
||||||
|
[ ! -e "$key_source" ] && get -q -n "$key_file" "${key_urls[@]}"
|
||||||
|
if [[ "$(file "$key_file")" =~ .*('Public-Key (old)'|'Secret-Key') ]]; then
|
||||||
|
sudo gpg --batch --yes --dearmor "$key_file" >/dev/null 2>&1 && sudo mv "$key_file".gpg "$key_file"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to check if a PPA and its lists exist
|
||||||
|
check_lists() {
|
||||||
|
ppa=$1
|
||||||
|
ppa_search=$2
|
||||||
|
if grep -Eqr "$ppa_search" "$list_dir"; then
|
||||||
|
list_count="$(find /var/lib/apt/lists -name "*${ppa/\//_}*" | wc -l)"
|
||||||
|
if [ "$list_count" = "0" ]; then
|
||||||
|
update_lists "$ppa" "$ppa_search"
|
||||||
|
fi
|
||||||
|
return 0;
|
||||||
|
else
|
||||||
|
return 1;
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to add a sources list.
|
||||||
|
add_list() {
|
||||||
|
ppa=${1-ondrej/php}
|
||||||
|
ppa_url=${2:-"$lp_ppa/$ppa/ubuntu"}
|
||||||
|
key_source=${3:-"$ppa_url"}
|
||||||
|
package_dist=${4:-"$VERSION_CODENAME"}
|
||||||
|
branches=${5:-main}
|
||||||
|
ppa_search="deb .*$ppa_url $package_dist .*$branches"
|
||||||
|
if check_lists "$ppa" "$ppa_search"; then
|
||||||
|
echo "Repository $ppa already exists";
|
||||||
|
else
|
||||||
|
arch=$(dpkg --print-architecture)
|
||||||
|
[ -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"
|
||||||
|
echo "deb [arch=$arch signed-by=$key_file] $ppa_url $package_dist $branches" | sudo tee -a "$list_dir"/"${ppa/\//-}".list >/dev/null 2>&1
|
||||||
|
update_lists "$ppa" "$ppa_search"
|
||||||
|
. /etc/os-release
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to remove a PPA.
|
||||||
|
remove_list() {
|
||||||
|
ppa=${1-ondrej/php}
|
||||||
|
ppa_url=${2:-"$lp_ppa/$ppa/ubuntu"}
|
||||||
|
grep -lr "$ppa_url" "$list_dir" | xargs -n1 sudo rm -f
|
||||||
|
sudo rm -f "$key_dir"/"${ppa/\//-}"-keyring || true
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to add a PPA.
|
||||||
|
add_ppa() {
|
||||||
|
set_base_version
|
||||||
|
ppa=${1:-ondrej/php}
|
||||||
|
if [[ "$ID" = "ubuntu" || "$ID_LIKE" =~ ubuntu ]] && [[ "$ppa" =~ "ondrej/" ]]; then
|
||||||
|
add_list "$ppa"
|
||||||
|
elif [[ "$ID" = "debian" || "$ID_LIKE" =~ debian ]] && [[ "$ppa" =~ "ondrej/" ]]; then
|
||||||
|
add_list "$ppa" "$sury"/"${ppa##*/}"/ "$sury"/"${ppa##*/}"/apt.gpg
|
||||||
|
else
|
||||||
|
add_list "$ppa"
|
||||||
|
fi
|
||||||
|
. /etc/os-release
|
||||||
|
}
|
||||||
|
|
||||||
|
# Variables
|
||||||
|
list_file='/etc/apt/sources.list'
|
||||||
|
list_dir="$list_file.d"
|
||||||
|
upstream_lsb='/etc/upstream-release/lsb-release'
|
||||||
|
lp_api='https://api.launchpad.net/1.0'
|
||||||
|
lp_ppa='http://ppa.launchpad.net'
|
||||||
|
key_dir='/usr/share/keyrings'
|
||||||
|
dist_info_dir='/usr/share/distro-info'
|
||||||
|
sury='https://packages.sury.org'
|
||||||
|
sks=(
|
||||||
|
'https://keyserver.ubuntu.com'
|
||||||
|
'https://pgp.mit.edu'
|
||||||
|
'https://keys.openpgp.org'
|
||||||
|
)
|
38
src/scripts/tools/protoc.ps1
Normal file
38
src/scripts/tools/protoc.ps1
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
Function Get-ProtobufTag() {
|
||||||
|
if("$protobuf_tag" -eq "latest") {
|
||||||
|
$protobuf_tag = (Invoke-RestMethod https://api.github.com/repos/protocolbuffers/protobuf/tags).Name | Where-Object { $_ -match "v\d+.\d+.\d+$" } | Select-Object -First 1
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
[net.httpWebRequest] $request = [net.webRequest]::create("https://github.com/protocolbuffers/protobuf/releases/tag/v$protobuf_tag")
|
||||||
|
$req.Method = "HEAD"
|
||||||
|
[net.httpWebResponse] $response = $request.getResponse()
|
||||||
|
$response.Close()
|
||||||
|
$protobuf_tag = "v$protobuf_tag"
|
||||||
|
} catch {
|
||||||
|
$protobuf_tag = (Invoke-RestMethod https://api.github.com/repos/protocolbuffers/protobuf/tags).Name | Where-Object { $_ -match "v\d+.\d+.\d+$" } | Select-Object -First 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $protobuf_tag
|
||||||
|
}
|
||||||
|
|
||||||
|
Function Add-Protoc() {
|
||||||
|
param(
|
||||||
|
[Parameter(Mandatory = $true, Position = 0, HelpMessage = 'The PHP version to be installed')]
|
||||||
|
[ValidatePattern('^latest$|^(v?)\d+\.\d+\.\d+$')]
|
||||||
|
[string] $protobuf_tag
|
||||||
|
)
|
||||||
|
$protobuf_tag = Get-ProtobufTag
|
||||||
|
$arch_num = '64'
|
||||||
|
if(-not([Environment]::Is64BitOperatingSystem)) {
|
||||||
|
$arch_num = '32'
|
||||||
|
}
|
||||||
|
$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
|
||||||
|
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
|
||||||
|
Add-ToProfile $current_profile 'protoc' "New-Alias protoc $bin_dir\protoc.exe"
|
||||||
|
Add-Log $tick "protoc" "Added protoc $($protobuf_tag -replace 'v', '')"
|
||||||
|
printf "::group::\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" "protoc" "Click to read the protoc related license information"
|
||||||
|
Write-Output (Invoke-WebRequest https://raw.githubusercontent.com/protocolbuffers/protobuf/master/LICENSE).Content
|
||||||
|
Write-Output "::endgroup::"
|
||||||
|
}
|
28
src/scripts/tools/protoc.sh
Normal file
28
src/scripts/tools/protoc.sh
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
get_protobuf_tag() {
|
||||||
|
if [ "$protobuf_tag" = "latest" ]; then
|
||||||
|
protobuf_tag=$(get -s -n "" https://github.com/protocolbuffers/protobuf/releases/latest 2<&1 | grep -m 1 -Eo "(v[0-9]+\.[0-9]+\.[0-9]+)" | head -n 1)
|
||||||
|
else
|
||||||
|
status_code=$(get -v -n /tmp/protobuf.tmp "https://github.com/protocolbuffers/protobuf/releases/tag/v$protobuf_tag")
|
||||||
|
if [ "$status_code" = "200" ]; then
|
||||||
|
protobuf_tag="v$protobuf_tag"
|
||||||
|
else
|
||||||
|
protobuf_tag=$(get -s -n "" https://github.com/protocolbuffers/protobuf/releases/latest 2<&1 | grep -m 1 -Eo "(v[0-9]+\.[0-9]+\.[0-9]+)" | head -n 1)
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
add_protoc() {
|
||||||
|
protobuf_tag=$1
|
||||||
|
get_protobuf_tag
|
||||||
|
(
|
||||||
|
platform='linux'
|
||||||
|
[ "$(uname -s)" = "Darwin" ] && platform='osx'
|
||||||
|
get -q -n /tmp/protobuf.zip "https://github.com/protocolbuffers/protobuf/releases/download/$protobuf_tag/protoc-${protobuf_tag:1}-$platform-x86_64.zip"
|
||||||
|
sudo unzip /tmp/protobuf.zip -d /usr/local/
|
||||||
|
sudo chmod -R 777 /usr/local/bin/protoc /usr/local/include/google
|
||||||
|
) >/dev/null 2>&1
|
||||||
|
add_log "${tick:?}" "protoc" "Added protoc ${protobuf_tag:1}"
|
||||||
|
printf "::group::\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" "protoc" "Click to read the protoc related license information"
|
||||||
|
curl "${curl_opts[@]:?}" https://raw.githubusercontent.com/protocolbuffers/protobuf/master/LICENSE
|
||||||
|
echo "::endgroup::"
|
||||||
|
}
|
@ -3,12 +3,12 @@ param (
|
|||||||
[ValidateNotNull()]
|
[ValidateNotNull()]
|
||||||
[ValidateLength(1, [int]::MaxValue)]
|
[ValidateLength(1, [int]::MaxValue)]
|
||||||
[string]
|
[string]
|
||||||
$version = '7.4',
|
$version = '8.0',
|
||||||
[Parameter(Position = 1, Mandatory = $true)]
|
[Parameter(Position = 1, Mandatory = $true)]
|
||||||
[ValidateNotNull()]
|
[ValidateNotNull()]
|
||||||
[ValidateLength(1, [int]::MaxValue)]
|
[ValidateLength(1, [int]::MaxValue)]
|
||||||
[string]
|
[string]
|
||||||
$dir
|
$dist
|
||||||
)
|
)
|
||||||
|
|
||||||
# Function to log start of a operation.
|
# Function to log start of a operation.
|
||||||
@ -18,8 +18,14 @@ Function Step-Log($message) {
|
|||||||
|
|
||||||
# Function to log result of a operation.
|
# Function to log result of a operation.
|
||||||
Function Add-Log($mark, $subject, $message) {
|
Function Add-Log($mark, $subject, $message) {
|
||||||
$code = if ($mark -eq $cross) { "31" } else { "32" }
|
if ($mark -eq $tick) {
|
||||||
printf "\033[%s;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" $code $mark $subject $message
|
printf "\033[32;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" $mark $subject $message
|
||||||
|
} else {
|
||||||
|
printf "\033[31;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" $mark $subject $message
|
||||||
|
if($env:fail_fast -eq 'true') {
|
||||||
|
exit 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to add a line to a powershell profile safely.
|
# Function to add a line to a powershell profile safely.
|
||||||
@ -64,27 +70,95 @@ Function Add-Path {
|
|||||||
Get-PathFromRegistry
|
Get-PathFromRegistry
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Function to make sure printf is in PATH.
|
||||||
|
Function Add-Printf {
|
||||||
|
if (-not(Test-Path "C:\Program Files\Git\usr\bin\printf.exe")) {
|
||||||
|
if(Test-Path "C:\msys64\usr\bin\printf.exe") {
|
||||||
|
New-Item -Path $bin_dir\printf.exe -ItemType SymbolicLink -Value C:\msys64\usr\bin\printf.exe -Force > $null 2>&1
|
||||||
|
} else {
|
||||||
|
Invoke-WebRequest -Uri "$github/shivammathur/printf/releases/latest/download/printf-x64.zip" -OutFile "$bin_dir\printf.zip"
|
||||||
|
Expand-Archive -Path $bin_dir\printf.zip -DestinationPath $bin_dir -Force
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
New-Item -Path $bin_dir\printf.exe -ItemType SymbolicLink -Value "C:\Program Files\Git\usr\bin\printf.exe" -Force > $null 2>&1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
# Function to get a clean Powershell profile.
|
# Function to get a clean Powershell profile.
|
||||||
Function Get-CleanPSProfile {
|
Function Get-CleanPSProfile {
|
||||||
if(-not(Test-Path -LiteralPath $profile)) {
|
if(-not(Test-Path -LiteralPath $profile)) {
|
||||||
New-Item -Path $profile -ItemType "file" -Force
|
New-Item -Path $profile -ItemType "file" -Force > $null 2>&1
|
||||||
}
|
}
|
||||||
Set-Content $current_profile -Value ''
|
Set-Content $current_profile -Value ''
|
||||||
Add-ToProfile $profile $current_profile.replace('\', '\\') ". $current_profile"
|
Add-ToProfile $profile $current_profile.replace('\', '\\') ". $current_profile"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to install PhpManager.
|
# Function to install a powershell package from GitHub.
|
||||||
Function Install-PhpManager() {
|
Function Install-PSPackage() {
|
||||||
$repo = "mlocati/powershell-phpmanager"
|
param(
|
||||||
$tag = (Invoke-RestMethod https://api.github.com/repos/$repo/tags)[0].Name
|
[Parameter(Position = 0, Mandatory = $true)]
|
||||||
$module_path = "$bin_dir\PhpManager\powershell-phpmanager-$tag\PhpManager"
|
$package,
|
||||||
if(-not (Test-Path $module_path\PhpManager.psm1 -PathType Leaf)) {
|
[Parameter(Position = 1, Mandatory = $true)]
|
||||||
$zip_file = "$bin_dir\PhpManager.zip"
|
$psm1_path,
|
||||||
Invoke-WebRequest -UseBasicParsing -Uri https://github.com/$repo/archive/$tag.zip -OutFile $zip_file
|
[Parameter(Position = 2, Mandatory = $true)]
|
||||||
Expand-Archive -Path $zip_file -DestinationPath $bin_dir\PhpManager -Force
|
$url,
|
||||||
|
[Parameter(Position = 3, Mandatory = $true)]
|
||||||
|
$cmdlet
|
||||||
|
)
|
||||||
|
$module_path = "$bin_dir\$psm1_path.psm1"
|
||||||
|
if(-not (Test-Path $module_path -PathType Leaf)) {
|
||||||
|
$zip_file = "$bin_dir\$package.zip"
|
||||||
|
Invoke-WebRequest -Uri $url -OutFile $zip_file
|
||||||
|
Expand-Archive -Path $zip_file -DestinationPath $bin_dir -Force
|
||||||
}
|
}
|
||||||
Import-Module $module_path
|
Import-Module $module_path
|
||||||
Add-ToProfile $current_profile 'powershell-phpmanager' "Import-Module $module_path"
|
Add-ToProfile $current_profile "$package-search" "Import-Module $module_path"
|
||||||
|
|
||||||
|
if($null -eq (Get-Command $cmdlet -ErrorAction SilentlyContinue)) {
|
||||||
|
Install-Module -Name $cmdlet -Force
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to link dependencies to PHP directory.
|
||||||
|
Function Set-ExtensionPrerequisites
|
||||||
|
{
|
||||||
|
Param (
|
||||||
|
[Parameter(Position = 0, Mandatory = $true)]
|
||||||
|
[ValidateNotNull()]
|
||||||
|
[ValidateLength(1, [int]::MaxValue)]
|
||||||
|
[string]
|
||||||
|
$deps_dir
|
||||||
|
)
|
||||||
|
$deps = Get-ChildItem -Recurse -Path $deps_dir
|
||||||
|
if ($deps.Count -ne 0) {
|
||||||
|
# Symlink dependencies instead of adding the directory to PATH ...
|
||||||
|
# as other actions change the PATH thus breaking extensions.
|
||||||
|
$deps | ForEach-Object {
|
||||||
|
New-Item -Itemtype SymbolicLink -Path $php_dir -Name $_.Name -Target $_.FullName -Force > $null 2>&1
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Remove-Item $deps_dir -Recurse -Force
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to get extension pre-requisites.
|
||||||
|
# https://windows.php.net/downloads/pecl/deps
|
||||||
|
# Currently only imagick is supported using this Cmdlet.
|
||||||
|
Function Get-ExtensionPrerequisites{
|
||||||
|
Param (
|
||||||
|
[Parameter(Position = 0, Mandatory = $true)]
|
||||||
|
[ValidateNotNull()]
|
||||||
|
[ValidateLength(1, [int]::MaxValue)]
|
||||||
|
[string]
|
||||||
|
$extension
|
||||||
|
)
|
||||||
|
$deps_dir = "$ext_dir\$extension-vc$($installed.VCVersion)-$arch"
|
||||||
|
$extensions_with_dependencies = ('imagick')
|
||||||
|
New-Item $deps_dir -Type Directory -Force > $null 2>&1
|
||||||
|
if($extensions_with_dependencies.Contains($extension)) {
|
||||||
|
Install-PhpExtensionPrerequisite -Extension $extension -InstallPath $deps_dir -PhpPath $php_dir
|
||||||
|
}
|
||||||
|
return $deps_dir
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to add PHP extensions.
|
# Function to add PHP extensions.
|
||||||
@ -99,7 +173,7 @@ Function Add-Extension {
|
|||||||
[ValidateNotNull()]
|
[ValidateNotNull()]
|
||||||
[ValidateSet('stable', 'beta', 'alpha', 'devel', 'snapshot')]
|
[ValidateSet('stable', 'beta', 'alpha', 'devel', 'snapshot')]
|
||||||
[string]
|
[string]
|
||||||
$mininum_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,2}$')]
|
||||||
@ -117,18 +191,22 @@ Function Add-Extension {
|
|||||||
Add-Log $tick $extension "Enabled"
|
Add-Log $tick $extension "Enabled"
|
||||||
}
|
}
|
||||||
default {
|
default {
|
||||||
|
$deps_dir = Get-ExtensionPrerequisites $extension
|
||||||
|
Enable-ExtensionDependencies $extension
|
||||||
Enable-PhpExtension -Extension $extension_info.Handle -Path $php_dir
|
Enable-PhpExtension -Extension $extension_info.Handle -Path $php_dir
|
||||||
|
Set-ExtensionPrerequisites $deps_dir
|
||||||
Add-Log $tick $extension "Enabled"
|
Add-Log $tick $extension "Enabled"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
$deps_dir = Get-ExtensionPrerequisites $extension
|
||||||
|
$params = @{ Extension = $extension; MinimumStability = $stability; MaximumStability = $stability; Path = $php_dir; AdditionalFilesPath = $deps_dir; NoDependencies = $true }
|
||||||
if($extension_version -ne '') {
|
if($extension_version -ne '') {
|
||||||
Install-PhpExtension -Extension $extension -Version $extension_version -MinimumStability $mininum_stability -Path $php_dir
|
$params["Version"] = $extension_version
|
||||||
} else {
|
|
||||||
Install-PhpExtension -Extension $extension -MinimumStability $mininum_stability -Path $php_dir
|
|
||||||
}
|
}
|
||||||
|
Install-PhpExtension @params
|
||||||
|
Set-ExtensionPrerequisites $deps_dir
|
||||||
Add-Log $tick $extension "Installed and enabled"
|
Add-Log $tick $extension "Installed and enabled"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -137,8 +215,13 @@ Function Add-Extension {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to remove PHP extensions.
|
# Function to get a map of extensions and their dependent shared extensions.
|
||||||
Function Remove-Extension() {
|
Function Get-ExtensionMap {
|
||||||
|
php -d'error_reporting=0' $dist\..\src\scripts\ext\extension_map.php
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to enable extension dependencies which are also extensions.
|
||||||
|
Function Enable-ExtensionDependencies {
|
||||||
Param (
|
Param (
|
||||||
[Parameter(Position = 0, Mandatory = $true)]
|
[Parameter(Position = 0, Mandatory = $true)]
|
||||||
[ValidateNotNull()]
|
[ValidateNotNull()]
|
||||||
@ -146,75 +229,181 @@ Function Remove-Extension() {
|
|||||||
[string]
|
[string]
|
||||||
$extension
|
$extension
|
||||||
)
|
)
|
||||||
|
if (-not(Test-Path $env:TEMP\map.orig)) {
|
||||||
|
Get-ExtensionMap | Set-Content -Path $env:TEMP\map.orig
|
||||||
|
}
|
||||||
|
$entry = findstr /r "$extension`:.*" $env:TEMP\map.orig
|
||||||
|
if($entry) {
|
||||||
|
$entry.split(':')[1].trim().split(' ') | ForEach-Object {
|
||||||
|
if (-not(php -m | findstr -i $_)) {
|
||||||
|
Enable-PhpExtension -Extension $_ -Path $php_dir
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to disable dependent extensions.
|
||||||
|
Function Disable-DependentExtensions() {
|
||||||
|
Param (
|
||||||
|
[Parameter(Position = 0, Mandatory = $true)]
|
||||||
|
[ValidateNotNull()]
|
||||||
|
[ValidateLength(1, [int]::MaxValue)]
|
||||||
|
[string]
|
||||||
|
$extension
|
||||||
|
)
|
||||||
|
Get-ExtensionMap | Select-String -Pattern ".*:.*\s$extension(\s|$)" | ForEach-Object {
|
||||||
|
$dependent = $_.Matches[0].Value.split(':')[0];
|
||||||
|
Disable-ExtensionHelper -Extension $dependent -DisableDependents
|
||||||
|
Add-Log $tick ":$extension" "Disabled $dependent as it depends on $extension"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Helper function to disable an extension.
|
||||||
|
Function Disable-ExtensionHelper() {
|
||||||
|
Param (
|
||||||
|
[Parameter(Position = 0, Mandatory = $true)]
|
||||||
|
[ValidateNotNull()]
|
||||||
|
[ValidateLength(1, [int]::MaxValue)]
|
||||||
|
[string]
|
||||||
|
$extension,
|
||||||
|
[switch] $DisableDependents
|
||||||
|
)
|
||||||
|
if($DisableDependents) {
|
||||||
|
Disable-DependentExtensions $extension
|
||||||
|
}
|
||||||
|
Disable-PhpExtension -Extension $extension -Path $php_dir
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to disable an extension.
|
||||||
|
Function Disable-Extension() {
|
||||||
|
Param (
|
||||||
|
[Parameter(Position = 0, Mandatory = $true)]
|
||||||
|
[ValidateNotNull()]
|
||||||
|
[ValidateLength(1, [int]::MaxValue)]
|
||||||
|
[string]
|
||||||
|
$extension,
|
||||||
|
[Parameter(Position = 1, Mandatory = $false)]
|
||||||
|
[ValidateNotNull()]
|
||||||
|
[ValidateLength(1, [int]::MaxValue)]
|
||||||
|
[string]
|
||||||
|
$DisableDependents
|
||||||
|
)
|
||||||
if(php -m | findstr -i $extension) {
|
if(php -m | findstr -i $extension) {
|
||||||
|
if(Test-Path $ext_dir\php_$extension.dll) {
|
||||||
try {
|
try {
|
||||||
Disable-PhpExtension $extension $php_dir
|
$params = @{ Extension = $extension; DisableDependents = ($DisableDependents -ne 'false') }
|
||||||
if (Test-Path $ext_dir\php_$extension.dll) {
|
Disable-ExtensionHelper @params
|
||||||
Remove-Item $ext_dir\php_$extension.dll
|
Add-Log $tick ":$extension" "Disabled"
|
||||||
}
|
|
||||||
Add-Log $tick ":$extension" "Removed"
|
|
||||||
} catch {
|
} catch {
|
||||||
Add-Log $cross ":$extension" "Could not remove $extension on PHP $($installed.FullVersion)"
|
Add-Log $cross ":$extension" "Could not disable $extension on PHP $($installed.FullVersion)"
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
Add-Log $cross ":$extension" "Could not disable $extension on PHP $($installed.FullVersion) as it not a shared extension"
|
||||||
|
}
|
||||||
|
} elseif(Test-Path $ext_dir\php_$extension.dll) {
|
||||||
|
Add-Log $tick ":$extension" "Disabled"
|
||||||
} else {
|
} else {
|
||||||
Add-Log $tick ":$extension" "Could not find $extension on PHP $($installed.FullVersion)"
|
Add-Log $tick ":$extension" "Could not find $extension on PHP $($installed.FullVersion)"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Function to disable shared extensions.
|
||||||
|
Function Disable-AllShared() {
|
||||||
|
(Get-Content $php_dir\php.ini) | Where-Object {$_ -notmatch '^(zend_)?extension\s*='} | Set-Content $php_dir\php.ini
|
||||||
|
Add-Log $tick "none" "Disabled all shared extensions"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to configure composer.
|
||||||
|
Function Edit-ComposerConfig() {
|
||||||
|
Param(
|
||||||
|
[Parameter(Position = 0, Mandatory = $true)]
|
||||||
|
[ValidateNotNull()]
|
||||||
|
[ValidateLength(1, [int]::MaxValue)]
|
||||||
|
[string]
|
||||||
|
$tool_path
|
||||||
|
)
|
||||||
|
Copy-Item $tool_path -Destination "$tool_path.phar"
|
||||||
|
php -r "try {`$p=new Phar('$tool_path.phar', 0);exit(0);} catch(Exception `$e) {exit(1);}"
|
||||||
|
if ($? -eq $False) {
|
||||||
|
Add-Log "$cross" "composer" "Could not download composer"
|
||||||
|
exit 1;
|
||||||
|
}
|
||||||
|
if (-not(Test-Path $composer_json)) {
|
||||||
|
Set-Content -Path $composer_json -Value "{}"
|
||||||
|
}
|
||||||
|
composer -q config -g process-timeout 0
|
||||||
|
Write-Output $composer_bin | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8
|
||||||
|
if (Test-Path env:COMPOSER_TOKEN) {
|
||||||
|
composer -q config -g github-oauth.github.com $env:COMPOSER_TOKEN
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to extract tool version.
|
||||||
|
Function Get-ToolVersion() {
|
||||||
|
Param (
|
||||||
|
[Parameter(Position = 0, Mandatory = $true)]
|
||||||
|
$tool,
|
||||||
|
[Parameter(Position = 1, Mandatory = $true)]
|
||||||
|
$param
|
||||||
|
)
|
||||||
|
$alp = "[a-zA-Z0-9]"
|
||||||
|
$version_regex = "[0-9]+((\.{1}$alp+)+)(\.{0})(-$alp+){0,1}"
|
||||||
|
if($tool -eq 'composer') {
|
||||||
|
if ($param -eq 'snapshot') {
|
||||||
|
$composer_version = (Select-String -Pattern "const\sBRANCH_ALIAS_VERSION" -Path $bin_dir\composer -Raw | Select-String -Pattern $version_regex | ForEach-Object { $_.matches.Value }) + '+' + (Select-String -Pattern "const\sVERSION" -Path $bin_dir\composer -Raw | Select-String -Pattern "[a-zA-Z0-9]+" -AllMatches | ForEach-Object { $_.matches[2].Value })
|
||||||
|
} else {
|
||||||
|
$composer_version = Select-String -Pattern "const\sVERSION" -Path $bin_dir\composer -Raw | Select-String -Pattern $version_regex | ForEach-Object { $_.matches.Value }
|
||||||
|
}
|
||||||
|
Set-Variable -Name 'composer_version' -Value $composer_version -Scope Global
|
||||||
|
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 }
|
||||||
|
}
|
||||||
|
|
||||||
# Function to add tools.
|
# Function to add tools.
|
||||||
Function Add-Tool() {
|
Function Add-Tool() {
|
||||||
Param (
|
Param (
|
||||||
[Parameter(Position = 0, Mandatory = $true)]
|
[Parameter(Position = 0, Mandatory = $true)]
|
||||||
[ValidateNotNull()]
|
[ValidateNotNull()]
|
||||||
[ValidateLength(1, [int]::MaxValue)]
|
|
||||||
[string]
|
|
||||||
$url,
|
$url,
|
||||||
[Parameter(Position = 1, Mandatory = $true)]
|
[Parameter(Position = 1, Mandatory = $true)]
|
||||||
[ValidateNotNull()]
|
[ValidateNotNull()]
|
||||||
[ValidateLength(1, [int]::MaxValue)]
|
$tool,
|
||||||
[string]
|
[Parameter(Position = 2, Mandatory = $true)]
|
||||||
$tool
|
[ValidateNotNull()]
|
||||||
|
$ver_param
|
||||||
)
|
)
|
||||||
if (Test-Path $bin_dir\$tool) {
|
if (Test-Path $bin_dir\$tool) {
|
||||||
Remove-Item $bin_dir\$tool
|
Remove-Item $bin_dir\$tool
|
||||||
}
|
}
|
||||||
if ($tool -eq "symfony") {
|
if($url.Count -gt 1) {
|
||||||
Invoke-WebRequest -UseBasicParsing -Uri $url -OutFile $bin_dir\$tool.exe
|
$url = $url[0]
|
||||||
Add-ToProfile $current_profile $tool "New-Alias $tool $bin_dir\$tool.exe" >$null 2>&1
|
}
|
||||||
} else {
|
$tool_path = "$bin_dir\$tool"
|
||||||
|
if (($url | Split-Path -Extension) -eq ".exe") {
|
||||||
|
$tool_path = "$tool_path.exe"
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
Invoke-WebRequest -UseBasicParsing -Uri $url -OutFile $bin_dir\$tool
|
Invoke-WebRequest -Uri $url -OutFile $tool_path
|
||||||
|
} catch {
|
||||||
|
if($url -match '.*github.com.*releases.*latest.*') {
|
||||||
|
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])
|
||||||
|
Invoke-WebRequest -Uri $url -OutFile $tool_path
|
||||||
|
} catch { }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (((Get-ChildItem -Path $bin_dir/* | Where-Object Name -Match "^$tool(.exe|.phar)*$").Count -gt 0)) {
|
||||||
$bat_content = @()
|
$bat_content = @()
|
||||||
$bat_content += "@ECHO off"
|
$bat_content += "@ECHO off"
|
||||||
$bat_content += "setlocal DISABLEDELAYEDEXPANSION"
|
$bat_content += "setlocal DISABLEDELAYEDEXPANSION"
|
||||||
$bat_content += "SET BIN_TARGET=%~dp0/" + $tool
|
$bat_content += "SET BIN_TARGET=%~dp0/" + $tool
|
||||||
$bat_content += "php %BIN_TARGET% %*"
|
$bat_content += "php %BIN_TARGET% %*"
|
||||||
Set-Content -Path $bin_dir\$tool.bat -Value $bat_content
|
Set-Content -Path $bin_dir\$tool.bat -Value $bat_content
|
||||||
|
Add-ToolsHelper $tool
|
||||||
Add-ToProfile $current_profile $tool "New-Alias $tool $bin_dir\$tool.bat" >$null 2>&1
|
Add-ToProfile $current_profile $tool "New-Alias $tool $bin_dir\$tool.bat" >$null 2>&1
|
||||||
} catch { }
|
$tool_version = Get-ToolVersion $tool $ver_param
|
||||||
}
|
Add-Log $tick $tool "Added $tool $tool_version"
|
||||||
if($tool -eq "phan") {
|
|
||||||
Add-Extension fileinfo >$null 2>&1
|
|
||||||
Add-Extension ast >$null 2>&1
|
|
||||||
} elseif($tool -eq "phive") {
|
|
||||||
Add-Extension xml >$null 2>&1
|
|
||||||
} elseif($tool -eq "cs2pr") {
|
|
||||||
(Get-Content $bin_dir/cs2pr).replace('exit(9)', 'exit(0)') | Set-Content $bin_dir/cs2pr
|
|
||||||
} elseif($tool -eq "composer") {
|
|
||||||
composer -q global config process-timeout 0
|
|
||||||
Write-Output "::add-path::$env:APPDATA\Composer\vendor\bin"
|
|
||||||
if (Test-Path env:COMPOSER_TOKEN) {
|
|
||||||
composer -q global config github-oauth.github.com $env:COMPOSER_TOKEN
|
|
||||||
}
|
|
||||||
# TODO: Remove after composer 2.0 update, fixes peer fingerprint error
|
|
||||||
if ($version -lt 5.6) {
|
|
||||||
composer -q global config repos.packagist composer https://repo-ca-bhs-1.packagist.org
|
|
||||||
}
|
|
||||||
} elseif($tool -eq "wp-cli") {
|
|
||||||
Copy-Item $bin_dir\wp-cli.bat -Destination $bin_dir\wp.bat
|
|
||||||
}
|
|
||||||
if (((Get-ChildItem -Path $bin_dir/* | Where-Object Name -Match "^$tool(.exe|.phar)*$").Count -gt 0)) {
|
|
||||||
Add-Log $tick $tool "Added"
|
|
||||||
} else {
|
} else {
|
||||||
Add-Log $cross $tool "Could not add $tool"
|
Add-Log $cross $tool "Could not add $tool"
|
||||||
}
|
}
|
||||||
@ -239,9 +428,24 @@ Function Add-Composertool() {
|
|||||||
[string]
|
[string]
|
||||||
$prefix
|
$prefix
|
||||||
)
|
)
|
||||||
composer -q global require $prefix$release 2>&1 | out-null
|
if($tool -match "prestissimo|composer-prefetcher" -and $composer_version.split('.')[0] -ne "1") {
|
||||||
if($?) {
|
Write-Output "::warning:: Skipping $tool, as it does not support Composer $composer_version. Specify composer:v1 in tools to use $tool"
|
||||||
Add-Log $tick $tool "Added"
|
Add-Log $cross $tool "Skipped"
|
||||||
|
Return
|
||||||
|
}
|
||||||
|
if(Test-Path $composer_lock) {
|
||||||
|
Remove-Item -Path $composer_lock -Force
|
||||||
|
}
|
||||||
|
(composer global require $prefix$release 2>&1 | Tee-Object -FilePath $env:APPDATA\Composer\composer.log) >$null 2>&1
|
||||||
|
$json = findstr $prefix$tool $env:APPDATA\Composer\composer.json
|
||||||
|
$log = findstr $prefix$tool $env:APPDATA\Composer\composer.log
|
||||||
|
if(Test-Path $composer_bin\composer) {
|
||||||
|
Copy-Item -Path "$bin_dir\composer" -Destination "$composer_bin\composer" -Force
|
||||||
|
}
|
||||||
|
Add-ToolsHelper $tool
|
||||||
|
if($json) {
|
||||||
|
$tool_version = Get-ToolVersion "Write-Output" "$log"
|
||||||
|
Add-Log $tick $tool "Added $tool $tool_version"
|
||||||
} else {
|
} else {
|
||||||
Add-Log $cross $tool "Could not setup $tool"
|
Add-Log $cross $tool "Could not setup $tool"
|
||||||
}
|
}
|
||||||
@ -252,60 +456,41 @@ 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"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to add blackfire and blackfire-agent.
|
|
||||||
Function Add-Blackfire() {
|
|
||||||
$agent_data = Invoke-WebRequest https://blackfire.io/docs/up-and-running/update | ForEach-Object { $_.tostring() -split "[`r`n]" | Select-String '<td class="version">' | Select-Object -Index 0 }
|
|
||||||
$agent_version = [regex]::Matches($agent_data, '<td.*?>(.+)</td>') | ForEach-Object {$_.Captures[0].Groups[1].value }
|
|
||||||
$url = "https://packages.blackfire.io/binaries/blackfire-agent/${agent_version}/blackfire-agent-windows_${arch_name}.zip"
|
|
||||||
Invoke-WebRequest -UseBasicParsing -Uri $url -OutFile $bin_dir\blackfire.zip >$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-agent' "New-Alias blackfire-agent $bin_dir\blackfire-agent.exe"
|
|
||||||
if ((Test-Path env:BLACKFIRE_SERVER_ID) -and (Test-Path env:BLACKFIRE_SERVER_TOKEN)) {
|
|
||||||
blackfire-agent --register --server-id=$env:BLACKFIRE_SERVER_ID --server-token=$env:BLACKFIRE_SERVER_TOKEN >$null 2>&1
|
|
||||||
}
|
|
||||||
if ((Test-Path env:BLACKFIRE_CLIENT_ID) -and (Test-Path env:BLACKFIRE_CLIENT_TOKEN)) {
|
|
||||||
blackfire config --client-id=$env:BLACKFIRE_CLIENT_ID --client-token=$env:BLACKFIRE_CLIENT_TOKEN --ca-cert=$php_dir\ssl\cacert.pem >$null 2>&1
|
|
||||||
}
|
|
||||||
Add-Log $tick "blackfire" "Added"
|
|
||||||
Add-Log $tick "blackfire-agent" "Added"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Variables
|
# Variables
|
||||||
$tick = ([char]8730)
|
$tick = ([char]8730)
|
||||||
$cross = ([char]10007)
|
$cross = ([char]10007)
|
||||||
$php_dir = 'C:\tools\php'
|
$php_dir = 'C:\tools\php'
|
||||||
$ext_dir = "$php_dir\ext"
|
$ext_dir = "$php_dir\ext"
|
||||||
$bin_dir = $php_dir
|
$bin_dir = $php_dir
|
||||||
|
$github = 'https://github.com'
|
||||||
|
$php_builder = "$github/shivammathur/php-builder-windows"
|
||||||
|
$composer_bin = "$env:APPDATA\Composer\vendor\bin"
|
||||||
|
$composer_json = "$env:APPDATA\Composer\composer.json"
|
||||||
|
$composer_lock = "$env:APPDATA\Composer\composer.lock"
|
||||||
$current_profile = "$env:TEMP\setup-php.ps1"
|
$current_profile = "$env:TEMP\setup-php.ps1"
|
||||||
$ProgressPreference = 'SilentlyContinue'
|
$ProgressPreference = 'SilentlyContinue'
|
||||||
$master_version = '8.0'
|
$jit_versions = '8.[0-9]'
|
||||||
|
$nightly_versions = '8.[1-9]'
|
||||||
$cert_source='CurrentUser'
|
$cert_source='CurrentUser'
|
||||||
|
$enable_extensions = ('openssl', 'curl', 'mbstring')
|
||||||
|
|
||||||
$arch = 'x64'
|
$arch = 'x64'
|
||||||
$arch_name ='amd64'
|
|
||||||
if(-not([Environment]::Is64BitOperatingSystem) -or $version -lt '7.0') {
|
if(-not([Environment]::Is64BitOperatingSystem) -or $version -lt '7.0') {
|
||||||
$arch = 'x86'
|
$arch = 'x86'
|
||||||
$arch_name = '386'
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$ts = $env:PHPTS -eq 'ts'
|
$ts = $env:PHPTS -eq 'ts'
|
||||||
if($env:PHPTS -ne 'ts') {
|
if($env:PHPTS -ne 'ts') {
|
||||||
$env:PHPTS = 'nts'
|
$env:PHPTS = 'nts'
|
||||||
}
|
}
|
||||||
|
|
||||||
if($env:RUNNER -eq 'self-hosted') {
|
if($env:RUNNER -eq 'self-hosted') {
|
||||||
$bin_dir = 'C:\tools\bin'
|
$bin_dir = 'C:\tools\bin'
|
||||||
$php_dir = "$php_dir$version"
|
$php_dir = "$php_dir$version"
|
||||||
$ext_dir = "$php_dir\ext"
|
$ext_dir = "$php_dir\ext"
|
||||||
$cert_source='Curl'
|
$cert_source='Curl'
|
||||||
Get-CleanPSProfile >$null 2>&1
|
Get-CleanPSProfile >$null 2>&1
|
||||||
New-Item $bin_dir -Type Directory 2>&1 | Out-Null
|
New-Item $bin_dir -Type Directory -Force > $null 2>&1
|
||||||
Add-Path -PathItem $bin_dir
|
Add-Path -PathItem $bin_dir
|
||||||
if(-not(Test-Path $bin_dir\printf.exe)) {
|
|
||||||
Invoke-WebRequest -UseBasicParsing -Uri "https://github.com/shivammathur/printf/releases/latest/download/printf-$arch.zip" -OutFile "$bin_dir\printf.zip" >$null 2>&1
|
|
||||||
Expand-Archive -Path $bin_dir\printf.zip -DestinationPath $bin_dir -Force >$null 2>&1
|
|
||||||
}
|
|
||||||
if($version -lt 5.6) {
|
if($version -lt 5.6) {
|
||||||
Add-Log $cross "PHP" "PHP $version is not supported on self-hosted runner"
|
Add-Log $cross "PHP" "PHP $version is not supported on self-hosted runner"
|
||||||
Start-Sleep 1
|
Start-Sleep 1
|
||||||
@ -314,7 +499,7 @@ if($env:RUNNER -eq 'self-hosted') {
|
|||||||
if ((Get-InstalledModule).Name -notcontains 'VcRedist') {
|
if ((Get-InstalledModule).Name -notcontains 'VcRedist') {
|
||||||
Install-Module -Name VcRedist -Force
|
Install-Module -Name VcRedist -Force
|
||||||
}
|
}
|
||||||
New-Item $php_dir -Type Directory 2>&1 | Out-Null
|
New-Item $php_dir -Type Directory -Force > $null 2>&1
|
||||||
Add-Path -PathItem $php_dir
|
Add-Path -PathItem $php_dir
|
||||||
setx PHPROOT $php_dir >$null 2>&1
|
setx PHPROOT $php_dir >$null 2>&1
|
||||||
} else {
|
} else {
|
||||||
@ -323,8 +508,12 @@ if($env:RUNNER -eq 'self-hosted') {
|
|||||||
New-Item -Path $current_profile -ItemType "file" -Force >$null 2>&1
|
New-Item -Path $current_profile -ItemType "file" -Force >$null 2>&1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
. $dist\..\src\scripts\tools\add_tools.ps1
|
||||||
|
|
||||||
|
Add-Printf >$null 2>&1
|
||||||
Step-Log "Setup PhpManager"
|
Step-Log "Setup PhpManager"
|
||||||
Install-PhpManager >$null 2>&1
|
Install-PSPackage PhpManager PhpManager\PhpManager "$github/mlocati/powershell-phpmanager/releases/latest/download/PhpManager.zip" Get-Php >$null 2>&1
|
||||||
Add-Log $tick "PhpManager" "Installed"
|
Add-Log $tick "PhpManager" "Installed"
|
||||||
|
|
||||||
Step-Log "Setup PHP"
|
Step-Log "Setup PHP"
|
||||||
@ -335,16 +524,25 @@ if (Test-Path -LiteralPath $php_dir -PathType Container) {
|
|||||||
} catch { }
|
} catch { }
|
||||||
}
|
}
|
||||||
$status = "Installed"
|
$status = "Installed"
|
||||||
|
$extra_version = ""
|
||||||
if ($null -eq $installed -or -not("$($installed.Version).".StartsWith(($version -replace '^(\d+(\.\d+)*).*', '$1.'))) -or $ts -ne $installed.ThreadSafe) {
|
if ($null -eq $installed -or -not("$($installed.Version).".StartsWith(($version -replace '^(\d+(\.\d+)*).*', '$1.'))) -or $ts -ne $installed.ThreadSafe) {
|
||||||
if ($version -lt '7.0' -and (Get-InstalledModule).Name -notcontains 'VcRedist') {
|
if ($version -lt '7.0' -and (Get-InstalledModule).Name -notcontains 'VcRedist') {
|
||||||
Install-Module -Name VcRedist -Force
|
Install-PSPackage VcRedist VcRedist-main\VcRedist\VcRedist "$github/aaronparker/VcRedist/archive/main.zip" Get-VcList >$null 2>&1
|
||||||
}
|
}
|
||||||
if ($version -eq $master_version) {
|
try {
|
||||||
$version = 'master'
|
if ($version -match $nightly_versions) {
|
||||||
|
Invoke-WebRequest -UseBasicParsing -Uri $php_builder/releases/latest/download/Get-PhpNightly.ps1 -OutFile $php_dir\Get-PhpNightly.ps1 > $null 2>&1
|
||||||
|
& $php_dir\Get-PhpNightly.ps1 -Architecture $arch -ThreadSafe $ts -Path $php_dir -Version $version > $null 2>&1
|
||||||
|
$extra_version = " ($(Get-Content $php_dir\COMMIT))"
|
||||||
|
} else {
|
||||||
|
Install-Php -Version $version -Architecture $arch -ThreadSafe $ts -InstallVC -Path $php_dir -TimeZone UTC -InitialPhpIni Production -Force > $null 2>&1
|
||||||
}
|
}
|
||||||
|
} catch { }
|
||||||
Install-Php -Version $version -Architecture $arch -ThreadSafe $ts -InstallVC -Path $php_dir -TimeZone UTC -InitialPhpIni Production -Force >$null 2>&1
|
|
||||||
} else {
|
} else {
|
||||||
|
Set-PhpIniKey -Key 'extension_dir' -Value $ext_dir -Path $php_dir
|
||||||
|
if($version -match $jit_versions) {
|
||||||
|
('opcache.enable=1', 'opcache.jit_buffer_size=256M', 'opcache.jit=1235') | ForEach-Object { $p=$_.split('='); Set-PhpIniKey -Key $p[0] -Value $p[1] -Path $php_dir }
|
||||||
|
}
|
||||||
if($env:update -eq 'true') {
|
if($env:update -eq 'true') {
|
||||||
Update-Php $php_dir >$null 2>&1
|
Update-Php $php_dir >$null 2>&1
|
||||||
$status = "Updated to"
|
$status = "Updated to"
|
||||||
@ -354,17 +552,19 @@ if ($null -eq $installed -or -not("$($installed.Version).".StartsWith(($version
|
|||||||
}
|
}
|
||||||
|
|
||||||
$installed = Get-Php -Path $php_dir
|
$installed = Get-Php -Path $php_dir
|
||||||
Set-PhpIniKey -Key 'date.timezone' -Value 'UTC' -Path $php_dir
|
if($installed.MajorMinorVersion -ne $version) {
|
||||||
|
Add-Log $cross "PHP" "Could not setup PHP $version"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
('date.timezone=UTC', 'memory_limit=-1', 'xdebug.mode=coverage') | ForEach-Object { $p=$_.split('='); Set-PhpIniKey -Key $p[0] -Value $p[1] -Path $php_dir }
|
||||||
if($version -lt "5.5") {
|
if($version -lt "5.5") {
|
||||||
Enable-PhpExtension -Extension openssl, curl, mbstring -Path $php_dir
|
('libeay32.dll', 'ssleay32.dll') | ForEach-Object { Invoke-WebRequest -Uri "$php_builder/releases/download/openssl-1.0.2u/$_" -OutFile $php_dir\$_ >$null 2>&1 }
|
||||||
} else {
|
} else {
|
||||||
Enable-PhpExtension -Extension openssl, curl, opcache, mbstring -Path $php_dir
|
$enable_extensions += ('opcache')
|
||||||
}
|
}
|
||||||
|
Enable-PhpExtension -Extension $enable_extensions -Path $php_dir
|
||||||
Update-PhpCAInfo -Path $php_dir -Source $cert_source
|
Update-PhpCAInfo -Path $php_dir -Source $cert_source
|
||||||
if ($version -eq 'master') {
|
Copy-Item -Path $dist\..\src\configs\*.json -Destination $env:RUNNER_TOOL_CACHE
|
||||||
Invoke-WebRequest -UseBasicParsing -Uri "https://github.com/shivammathur/php-extensions-windows/releases/latest/download/php_$env:phpts`_$arch`_pcov.dll" -OutFile $ext_dir"\php_pcov.dll" >$null 2>&1
|
New-Item -ItemType Directory -Path $composer_bin -Force > $null 2>&1
|
||||||
Invoke-WebRequest -UseBasicParsing -Uri "https://github.com/shivammathur/php-extensions-windows/releases/latest/download/php_$env:phpts`_$arch`_xdebug.dll" -OutFile $ext_dir"\php_xdebug.dll" >$null 2>&1
|
Write-Output "::set-output name=php-version::$($installed.FullVersion)"
|
||||||
Set-PhpIniKey -Key 'opcache.jit_buffer_size' -Value '256M' -Path $php_dir
|
Add-Log $tick "PHP" "$status PHP $($installed.FullVersion)$extra_version"
|
||||||
Set-PhpIniKey -Key 'opcache.jit' -Value '1235' -Path $php_dir
|
|
||||||
}
|
|
||||||
Add-Log $tick "PHP" "$status PHP $($installed.FullVersion)"
|
|
||||||
|
893
src/tools.ts
893
src/tools.ts
@ -1,299 +1,101 @@
|
|||||||
import * as utils from './utils';
|
import * as utils from './utils';
|
||||||
|
|
||||||
|
type RS = Record<string, string>;
|
||||||
|
type RSRS = Record<string, RS>;
|
||||||
|
|
||||||
|
interface IRef {
|
||||||
|
ref: string;
|
||||||
|
node_id: string;
|
||||||
|
url: string;
|
||||||
|
object: RS;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function to get command to setup tools
|
* Function to get version in semver format.
|
||||||
*
|
*
|
||||||
* @param os_version
|
* @param data
|
||||||
* @param suffix
|
|
||||||
*/
|
*/
|
||||||
export async function getCommand(
|
export async function getSemverVersion(data: RS): Promise<string> {
|
||||||
os_version: string,
|
const search: string = data['version_prefix'] + data['version'];
|
||||||
suffix: string
|
const url = `https://api.github.com/repos/${data['repository']}/git/matching-refs/tags%2F${search}.`;
|
||||||
): Promise<string> {
|
const token: string = await utils.readEnv('COMPOSER_TOKEN');
|
||||||
switch (os_version) {
|
const response: RS = await utils.fetch(url, token);
|
||||||
case 'linux':
|
if (response.error || response.data === '[]') {
|
||||||
case 'darwin':
|
data['error'] = response.error ?? `No version found with prefix ${search}.`;
|
||||||
return 'add_' + suffix + ' ';
|
return data['version'];
|
||||||
case 'win32':
|
} else {
|
||||||
return 'Add-' + suffix.charAt(0).toUpperCase() + suffix.slice(1) + ' ';
|
const refs = JSON.parse(response['data']).reverse();
|
||||||
default:
|
const ref = refs.find((i: IRef) => /.*\d+.\d+.\d+$/.test(i['ref']));
|
||||||
return await utils.log(
|
const tag: string = (ref || refs[0])['ref'].split('/').pop();
|
||||||
'Platform ' + os_version + ' is not supported',
|
return tag.replace(/^v(\d)/, '$1');
|
||||||
os_version,
|
|
||||||
'error'
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to get latest version from releases.atom
|
||||||
|
*
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export async function getLatestVersion(data: RS): Promise<string> {
|
||||||
|
if (!data['version'] && data['fetch_latest'] === 'false') {
|
||||||
|
return 'latest';
|
||||||
|
}
|
||||||
|
const resp: Record<string, string> = await utils.fetch(
|
||||||
|
`${data['github']}/${data['repository']}/releases.atom`
|
||||||
|
);
|
||||||
|
const releases: string[] = [
|
||||||
|
...resp['data'].matchAll(/releases\/tag\/([a-zA-Z]*)?(\d+.\d+.\d+)"/g)
|
||||||
|
].map(match => match[2]);
|
||||||
|
|
||||||
|
return (
|
||||||
|
releases
|
||||||
|
.sort((a: string, b: string) =>
|
||||||
|
a.localeCompare(b, undefined, {numeric: true})
|
||||||
|
)
|
||||||
|
.pop() || 'latest'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function to get tool version
|
* Function to get tool version
|
||||||
*
|
*
|
||||||
* @param version
|
* @param version
|
||||||
|
* @param data
|
||||||
*/
|
*/
|
||||||
export async function getToolVersion(version: string): Promise<string> {
|
export async function getVersion(version: string, data: RS): Promise<string> {
|
||||||
// semver_regex - https://semver.org/
|
// semver_regex - https://semver.org/
|
||||||
const semver_regex = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/;
|
const semver_regex =
|
||||||
const composer_regex = /^stable$|^preview$|^snapshot$|^v?[1|2]$/;
|
/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/;
|
||||||
version = version.replace(/[><=^]*/, '');
|
const composer_regex = /^composer:(stable|preview|snapshot|[1|2])$/;
|
||||||
|
const constraint_regex = /[><=^~]+.*/;
|
||||||
|
const major_minor_regex = /^\d+(\.\d+)?$/;
|
||||||
|
data['version'] = version.replace(/v?(\d)/, '$1').replace(/\.x/, '');
|
||||||
switch (true) {
|
switch (true) {
|
||||||
case composer_regex.test(version):
|
case composer_regex.test(data['release']):
|
||||||
case semver_regex.test(version):
|
case semver_regex.test(data['version']):
|
||||||
return version;
|
case constraint_regex.test(data['version']) && data['type'] === 'composer':
|
||||||
|
return data['version'];
|
||||||
|
case major_minor_regex.test(data['version']) && data['type'] === 'composer':
|
||||||
|
data['release'] = `${data['tool']}:${data['version']}.*`;
|
||||||
|
return `${data['version']}.*`;
|
||||||
|
case data['repository'] && major_minor_regex.test(data['version']):
|
||||||
|
return await getSemverVersion(data);
|
||||||
default:
|
default:
|
||||||
return 'latest';
|
return data['version'].replace(/[><=^~]*/, '');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function to parse tool:version
|
* Function to parse the release tool:version
|
||||||
*
|
*
|
||||||
* @param release
|
* @param release
|
||||||
|
* @param data
|
||||||
*/
|
*/
|
||||||
export async function parseTool(
|
export async function getRelease(release: string, data: RS): Promise<string> {
|
||||||
release: string
|
release = release.includes('/') ? release.split('/')[1] : release;
|
||||||
): Promise<{name: string; version: string}> {
|
return release.includes(':')
|
||||||
const parts: string[] = release.split(':');
|
? [data['tool'], release.split(':')[1]].join(':')
|
||||||
const tool: string = parts[0];
|
: data['tool'];
|
||||||
const version: string | undefined = parts[1];
|
|
||||||
switch (version) {
|
|
||||||
case undefined:
|
|
||||||
return {
|
|
||||||
name: tool,
|
|
||||||
version: 'latest'
|
|
||||||
};
|
|
||||||
default:
|
|
||||||
return {
|
|
||||||
name: tool,
|
|
||||||
version: await getToolVersion(parts[1])
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Function to get the url of tool with the given version
|
|
||||||
*
|
|
||||||
* @param tool
|
|
||||||
* @param extension
|
|
||||||
* @param version
|
|
||||||
* @param prefix
|
|
||||||
* @param version_prefix
|
|
||||||
* @param verb
|
|
||||||
*/
|
|
||||||
export async function getUri(
|
|
||||||
tool: string,
|
|
||||||
extension: string,
|
|
||||||
version: string,
|
|
||||||
prefix: string,
|
|
||||||
version_prefix: string,
|
|
||||||
verb: string
|
|
||||||
): Promise<string> {
|
|
||||||
switch (version) {
|
|
||||||
case 'latest':
|
|
||||||
return [prefix, version, verb, tool + extension]
|
|
||||||
.filter(Boolean)
|
|
||||||
.join('/');
|
|
||||||
default:
|
|
||||||
return [prefix, verb, version_prefix + version, tool + extension]
|
|
||||||
.filter(Boolean)
|
|
||||||
.join('/');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Helper function to get the codeception url
|
|
||||||
*
|
|
||||||
* @param version
|
|
||||||
* @param suffix
|
|
||||||
*/
|
|
||||||
export async function getCodeceptionUriBuilder(
|
|
||||||
version: string,
|
|
||||||
suffix: string
|
|
||||||
): Promise<string> {
|
|
||||||
return ['releases', version, suffix, 'codecept.phar']
|
|
||||||
.filter(Boolean)
|
|
||||||
.join('/');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Function to get the codeception url
|
|
||||||
*
|
|
||||||
* @param version
|
|
||||||
* @param php_version
|
|
||||||
*/
|
|
||||||
export async function getCodeceptionUri(
|
|
||||||
version: string,
|
|
||||||
php_version: string
|
|
||||||
): Promise<string> {
|
|
||||||
const codecept: string = await getCodeceptionUriBuilder(version, '');
|
|
||||||
const codecept54: string = await getCodeceptionUriBuilder(version, 'php54');
|
|
||||||
const codecept56: string = await getCodeceptionUriBuilder(version, 'php56');
|
|
||||||
// Refer to https://codeception.com/builds
|
|
||||||
switch (true) {
|
|
||||||
case /latest/.test(version):
|
|
||||||
switch (true) {
|
|
||||||
case /5\.6|7\.[0|1]/.test(php_version):
|
|
||||||
return 'php56/codecept.phar';
|
|
||||||
case /7\.[2-4]/.test(php_version):
|
|
||||||
default:
|
|
||||||
return 'codecept.phar';
|
|
||||||
}
|
|
||||||
case /(^[4-9]|\d{2,})\..*/.test(version):
|
|
||||||
switch (true) {
|
|
||||||
case /5\.6|7\.[0|1]/.test(php_version):
|
|
||||||
return codecept56;
|
|
||||||
case /7\.[2-4]/.test(php_version):
|
|
||||||
default:
|
|
||||||
return codecept;
|
|
||||||
}
|
|
||||||
case /(^2\.[4-5]\.\d+|^3\.[0-1]\.\d+).*/.test(version):
|
|
||||||
switch (true) {
|
|
||||||
case /5\.6/.test(php_version):
|
|
||||||
return codecept54;
|
|
||||||
case /7\.[0-4]/.test(php_version):
|
|
||||||
default:
|
|
||||||
return codecept;
|
|
||||||
}
|
|
||||||
case /^2\.3\.\d+.*/.test(version):
|
|
||||||
switch (true) {
|
|
||||||
case /5\.[4-6]/.test(php_version):
|
|
||||||
return codecept54;
|
|
||||||
case /^7\.[0-4]$/.test(php_version):
|
|
||||||
default:
|
|
||||||
return codecept;
|
|
||||||
}
|
|
||||||
case /(^2\.(1\.([6-9]|\d{2,}))|^2\.2\.\d+).*/.test(version):
|
|
||||||
switch (true) {
|
|
||||||
case /5\.[4-5]/.test(php_version):
|
|
||||||
return codecept54;
|
|
||||||
case /5.6|7\.[0-4]/.test(php_version):
|
|
||||||
default:
|
|
||||||
return codecept;
|
|
||||||
}
|
|
||||||
case /(^2\.(1\.[0-5]|0\.\d+)|^1\.[6-8]\.\d+).*/.test(version):
|
|
||||||
return codecept;
|
|
||||||
default:
|
|
||||||
return codecept;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Helper function to get script to setup phive
|
|
||||||
*
|
|
||||||
* @param version
|
|
||||||
* @param os_version
|
|
||||||
*/
|
|
||||||
export async function addPhive(
|
|
||||||
version: string,
|
|
||||||
os_version: string
|
|
||||||
): Promise<string> {
|
|
||||||
switch (version) {
|
|
||||||
case 'latest':
|
|
||||||
return (
|
|
||||||
(await getCommand(os_version, 'tool')) +
|
|
||||||
'https://phar.io/releases/phive.phar phive'
|
|
||||||
);
|
|
||||||
default:
|
|
||||||
return (
|
|
||||||
(await getCommand(os_version, 'tool')) +
|
|
||||||
'https://github.com/phar-io/phive/releases/download/' +
|
|
||||||
version +
|
|
||||||
'/phive-' +
|
|
||||||
version +
|
|
||||||
'.phar phive'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Function to get the phar url in domain/tool-version.phar format
|
|
||||||
*
|
|
||||||
* @param domain
|
|
||||||
* @param tool
|
|
||||||
* @param prefix
|
|
||||||
* @param version
|
|
||||||
*/
|
|
||||||
export async function getPharUrl(
|
|
||||||
domain: string,
|
|
||||||
tool: string,
|
|
||||||
prefix: string,
|
|
||||||
version: string
|
|
||||||
): Promise<string> {
|
|
||||||
switch (version) {
|
|
||||||
case 'latest':
|
|
||||||
return domain + '/' + tool + '.phar';
|
|
||||||
default:
|
|
||||||
return domain + '/' + tool + '-' + prefix + version + '.phar';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Function to get the Deployer url
|
|
||||||
*
|
|
||||||
* @param version
|
|
||||||
*/
|
|
||||||
export async function getDeployerUrl(version: string): Promise<string> {
|
|
||||||
const deployer = 'https://deployer.org';
|
|
||||||
switch (version) {
|
|
||||||
case 'latest':
|
|
||||||
return deployer + '/deployer.phar';
|
|
||||||
default:
|
|
||||||
return deployer + '/releases/v' + version + '/deployer.phar';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Function to get the Deployer url
|
|
||||||
*
|
|
||||||
* @param version
|
|
||||||
* @param os_version
|
|
||||||
*/
|
|
||||||
export async function getSymfonyUri(
|
|
||||||
version: string,
|
|
||||||
os_version: string
|
|
||||||
): Promise<string> {
|
|
||||||
let filename = '';
|
|
||||||
switch (os_version) {
|
|
||||||
case 'linux':
|
|
||||||
case 'darwin':
|
|
||||||
filename = 'symfony_' + os_version + '_amd64';
|
|
||||||
break;
|
|
||||||
case 'win32':
|
|
||||||
filename = 'symfony_windows_amd64.exe';
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return await utils.log(
|
|
||||||
'Platform ' + os_version + ' is not supported',
|
|
||||||
os_version,
|
|
||||||
'error'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
switch (version) {
|
|
||||||
case 'latest':
|
|
||||||
return 'releases/latest/download/' + filename;
|
|
||||||
default:
|
|
||||||
return 'releases/download/v' + version + '/' + filename;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Function to get the WP-CLI url
|
|
||||||
*
|
|
||||||
* @param version
|
|
||||||
*/
|
|
||||||
export async function getWpCliUrl(version: string): Promise<string> {
|
|
||||||
switch (version) {
|
|
||||||
case 'latest':
|
|
||||||
return 'wp-cli/builds/blob/gh-pages/phar/wp-cli.phar?raw=true';
|
|
||||||
default:
|
|
||||||
return await getUri(
|
|
||||||
'wp-cli',
|
|
||||||
'-' + version + '.phar',
|
|
||||||
version,
|
|
||||||
'wp-cli/wp-cli/releases',
|
|
||||||
'v',
|
|
||||||
'download'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -301,17 +103,18 @@ export async function getWpCliUrl(version: string): Promise<string> {
|
|||||||
*
|
*
|
||||||
* @param tools_list
|
* @param tools_list
|
||||||
*/
|
*/
|
||||||
export async function addComposer(tools_list: string[]): Promise<string[]> {
|
export async function filterList(tools_list: string[]): Promise<string[]> {
|
||||||
const regex_any = /^composer($|:.*)/;
|
const regex_any = /^composer($|:.*)/;
|
||||||
const regex_valid = /^composer:?($|preview$|snapshot$|v?[1-2]$)/;
|
const regex_valid =
|
||||||
|
/^composer:?($|preview$|snapshot$|v?\d+(\.\d+)?$|v?\d+\.\d+\.\d+[\w-]*$)/;
|
||||||
const matches: string[] = tools_list.filter(tool => regex_valid.test(tool));
|
const matches: string[] = tools_list.filter(tool => regex_valid.test(tool));
|
||||||
let composer = 'composer';
|
let composer = 'composer';
|
||||||
tools_list = tools_list.filter(tool => !regex_any.test(tool));
|
tools_list = tools_list.filter(tool => !regex_any.test(tool));
|
||||||
switch (matches[0]) {
|
switch (true) {
|
||||||
case undefined:
|
case matches[0] == undefined:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
composer = matches[matches.length - 1].replace(/v([1-2])/, '$1');
|
composer = matches[matches.length - 1].replace(/v(\d\S*)/, '$1');
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
tools_list.unshift(composer);
|
tools_list.unshift(composer);
|
||||||
@ -319,123 +122,356 @@ export async function addComposer(tools_list: string[]): Promise<string[]> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function to get script to update composer
|
* Function to get the url of tool with the given version
|
||||||
*
|
*
|
||||||
* @param version
|
* @param data
|
||||||
* @param os_version
|
|
||||||
*/
|
*/
|
||||||
export async function updateComposer(
|
export async function getUrl(data: RS): Promise<string> {
|
||||||
version: string,
|
if (data['version'] === 'latest') {
|
||||||
os_version: string
|
return [
|
||||||
): Promise<string> {
|
data['domain'],
|
||||||
switch (version) {
|
data['repository'],
|
||||||
case 'snapshot':
|
data['prefix'],
|
||||||
case 'preview':
|
data['version'],
|
||||||
case '1':
|
data['verb'],
|
||||||
case '2':
|
data['tool'] + data['extension']
|
||||||
return (
|
]
|
||||||
'\ncomposer self-update --' +
|
.filter(Boolean)
|
||||||
version +
|
.join('/');
|
||||||
(await utils.suppressOutput(os_version))
|
} else {
|
||||||
);
|
return [
|
||||||
default:
|
data['domain'],
|
||||||
return '';
|
data['repository'],
|
||||||
|
data['prefix'],
|
||||||
|
data['verb'],
|
||||||
|
data['version_prefix'] + data['version'],
|
||||||
|
data['tool'] + data['extension']
|
||||||
|
]
|
||||||
|
.filter(Boolean)
|
||||||
|
.join('/');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function to get Tools list after cleanup
|
* Function to get the phar url in domain/tool-version.phar format
|
||||||
*
|
*
|
||||||
* @param tools_csv
|
* @param data
|
||||||
*/
|
*/
|
||||||
export async function getCleanedToolsList(
|
export async function getPharUrl(data: RS): Promise<string> {
|
||||||
tools_csv: string
|
if (data['version'] === 'latest') {
|
||||||
): Promise<string[]> {
|
return data['domain'] + '/' + data['tool'] + '.phar';
|
||||||
let tools_list: string[] = await utils.CSVArray(tools_csv);
|
} else {
|
||||||
tools_list = await addComposer(tools_list);
|
return (
|
||||||
tools_list = tools_list
|
data['domain'] +
|
||||||
.map(function (extension: string) {
|
'/' +
|
||||||
return extension
|
data['tool'] +
|
||||||
.trim()
|
'-' +
|
||||||
.replace(
|
data['version_prefix'] +
|
||||||
/symfony\/|laravel\/|robmorgan\/|hirak\/|narrowspark\/automatic-/,
|
data['version'] +
|
||||||
''
|
'.phar'
|
||||||
);
|
);
|
||||||
})
|
}
|
||||||
.filter(Boolean);
|
|
||||||
return [...new Set(tools_list)];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helper function to get script to setup a tool using a phar url
|
* Helper function to get script to setup a tool using a phar url
|
||||||
*
|
*
|
||||||
* @param tool
|
* @param data
|
||||||
* @param version
|
|
||||||
* @param url
|
|
||||||
* @param os_version
|
|
||||||
*/
|
*/
|
||||||
export async function addArchive(
|
export async function addArchive(data: RS): Promise<string> {
|
||||||
tool: string,
|
return (
|
||||||
version: string,
|
(await utils.getCommand(data['os_version'], 'tool')) +
|
||||||
url: string,
|
(await utils.joins(data['url'], data['tool'], data['version_parameter']))
|
||||||
os_version: string
|
);
|
||||||
): Promise<string> {
|
|
||||||
return (await getCommand(os_version, 'tool')) + url + ' ' + tool;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function to get the script to setup php-config and phpize
|
* Helper function to get script to setup a tool using composer
|
||||||
*
|
*
|
||||||
* @param tool
|
* @param data
|
||||||
* @param os_version
|
|
||||||
*/
|
*/
|
||||||
export async function addDevTools(
|
export async function addPackage(data: RS): Promise<string> {
|
||||||
tool: string,
|
const command = await utils.getCommand(data['os_version'], 'composertool');
|
||||||
os_version: string
|
const parts: string[] = data['repository'].split('/');
|
||||||
): Promise<string> {
|
return command + parts[1] + ' ' + data['release'] + ' ' + parts[0] + '/';
|
||||||
switch (os_version) {
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to add blackfire-player
|
||||||
|
*
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export async function addBlackfirePlayer(data: RS): Promise<string> {
|
||||||
|
if (
|
||||||
|
/5\.[5-6]|7\.0/.test(data['php_version']) &&
|
||||||
|
data['version'] == 'latest'
|
||||||
|
) {
|
||||||
|
data['version'] = '1.9.3';
|
||||||
|
}
|
||||||
|
data['url'] = await getPharUrl(data);
|
||||||
|
return addArchive(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to add composer
|
||||||
|
*
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export async function addComposer(data: RS): Promise<string> {
|
||||||
|
const github = data['github'];
|
||||||
|
const getcomposer = data['domain'];
|
||||||
|
let cache_url = `${github}/shivammathur/composer-cache/releases/latest/download/composer-${data[
|
||||||
|
'version'
|
||||||
|
].replace('latest', 'stable')}.phar`;
|
||||||
|
let source_url = `${getcomposer}/composer.phar`;
|
||||||
|
switch (true) {
|
||||||
|
case /^snapshot$/.test(data['version']):
|
||||||
|
break;
|
||||||
|
case /^preview$|^[1-2]$/.test(data['version']):
|
||||||
|
source_url = `${getcomposer}/composer-${data['version']}.phar`;
|
||||||
|
break;
|
||||||
|
case /^\d+\.\d+\.\d+[\w-]*$/.test(data['version']):
|
||||||
|
cache_url = `${github}/${data['repository']}/releases/download/${data['version']}/composer.phar`;
|
||||||
|
source_url = `${getcomposer}/composer-${data['version']}.phar`;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
source_url = `${getcomposer}/composer-stable.phar`;
|
||||||
|
}
|
||||||
|
const use_cache: boolean = (await utils.readEnv('NO_TOOLS_CACHE')) !== 'true';
|
||||||
|
data['url'] = use_cache ? `${cache_url},${source_url}` : source_url;
|
||||||
|
data['version_parameter'] = data['version'];
|
||||||
|
return await addArchive(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to add Deployer
|
||||||
|
*
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export async function addDeployer(data: RS): Promise<string> {
|
||||||
|
if (data['version'] === 'latest') {
|
||||||
|
data['url'] = data['domain'] + '/deployer.phar';
|
||||||
|
} else {
|
||||||
|
data['url'] =
|
||||||
|
data['domain'] + '/releases/v' + data['version'] + '/deployer.phar';
|
||||||
|
}
|
||||||
|
return await addArchive(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to add php-config and phpize
|
||||||
|
*
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export async function addDevTools(data: RS): Promise<string> {
|
||||||
|
switch (data['os_version']) {
|
||||||
case 'linux':
|
case 'linux':
|
||||||
return (
|
|
||||||
'add_devtools' +
|
|
||||||
'\n' +
|
|
||||||
(await utils.addLog('$tick', tool, 'Added', 'linux'))
|
|
||||||
);
|
|
||||||
case 'darwin':
|
case 'darwin':
|
||||||
return await utils.addLog('$tick', tool, 'Added', 'darwin');
|
return 'add_devtools ' + data['tool'];
|
||||||
case 'win32':
|
case 'win32':
|
||||||
return await utils.addLog(
|
return await utils.addLog(
|
||||||
'$cross',
|
'$tick',
|
||||||
tool,
|
data['tool'],
|
||||||
tool + ' is not a windows tool',
|
data['tool'] + ' is not a windows tool',
|
||||||
'win32'
|
'win32'
|
||||||
);
|
);
|
||||||
default:
|
default:
|
||||||
return await utils.log(
|
return await utils.log(
|
||||||
'Platform ' + os_version + ' is not supported',
|
'Platform ' + data['os_version'] + ' is not supported',
|
||||||
os_version,
|
data['os_version'],
|
||||||
'error'
|
'error'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helper function to get script to setup a tool using composer
|
* Function to add PECL
|
||||||
|
*
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export async function addPECL(data: RS): Promise<string> {
|
||||||
|
return await utils.getCommand(data['os_version'], 'pecl');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to add Phing
|
||||||
|
*
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export async function addPhing(data: RS): Promise<string> {
|
||||||
|
data['url'] =
|
||||||
|
data['domain'] + '/get/phing-' + data['version'] + data['extension'];
|
||||||
|
return await addArchive(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper function to add Phive
|
||||||
|
*
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export async function addPhive(data: RS): Promise<string> {
|
||||||
|
switch (true) {
|
||||||
|
case /5\.[3-5]/.test(data['php_version']):
|
||||||
|
return await utils.addLog(
|
||||||
|
'$cross',
|
||||||
|
'phive',
|
||||||
|
'Phive is not supported on PHP ' + data['php_version'],
|
||||||
|
data['os_version']
|
||||||
|
);
|
||||||
|
case /5\.6|7\.0/.test(data['php_version']):
|
||||||
|
data['version'] = data['version'].replace('latest', '0.12.1');
|
||||||
|
break;
|
||||||
|
case /7\.1/.test(data['php_version']):
|
||||||
|
data['version'] = data['version'].replace('latest', '0.13.5');
|
||||||
|
break;
|
||||||
|
case /7\.2/.test(data['php_version']):
|
||||||
|
data['version'] = data['version'].replace('latest', '0.14.5');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (data['version'] === 'latest') {
|
||||||
|
data['domain'] = data['domain'] + '/releases';
|
||||||
|
} else {
|
||||||
|
data['domain'] = [
|
||||||
|
data['github'],
|
||||||
|
data['repository'],
|
||||||
|
'releases/download',
|
||||||
|
data['version']
|
||||||
|
].join('/');
|
||||||
|
}
|
||||||
|
data['url'] = await getPharUrl(data);
|
||||||
|
return await addArchive(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to add PHPUnit and related tools
|
||||||
|
*
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export async function addPHPUnitTools(data: RS): Promise<string> {
|
||||||
|
data['url'] = await getPharUrl(data);
|
||||||
|
return await addArchive(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to add Symfony
|
||||||
|
*
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export async function addSymfony(data: RS): Promise<string> {
|
||||||
|
let filename: string;
|
||||||
|
switch (data['os_version']) {
|
||||||
|
case 'linux':
|
||||||
|
case 'darwin':
|
||||||
|
filename = 'symfony_' + data['os_version'] + '_amd64';
|
||||||
|
break;
|
||||||
|
case 'win32':
|
||||||
|
filename = 'symfony_windows_amd64.exe';
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return await utils.log(
|
||||||
|
'Platform ' + data['os_version'] + ' is not supported',
|
||||||
|
data['os_version'],
|
||||||
|
'error'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (data['version'] === 'latest') {
|
||||||
|
data['uri'] = ['releases/latest/download', filename].join('/');
|
||||||
|
} else {
|
||||||
|
data['uri'] = ['releases/download', 'v' + data['version'], filename].join(
|
||||||
|
'/'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
data['url'] = [data['domain'], data['repository'], data['uri']].join('/');
|
||||||
|
return await addArchive(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to add WP-CLI
|
||||||
|
*
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
export async function addWPCLI(data: RS): Promise<string> {
|
||||||
|
if (data['version'] === 'latest') {
|
||||||
|
data['uri'] = 'wp-cli/builds/blob/gh-pages/phar/wp-cli.phar?raw=true';
|
||||||
|
data['url'] = [data['domain'], data['uri']].join('/');
|
||||||
|
} else {
|
||||||
|
data['extension'] = '-' + data['version'] + data['extension'];
|
||||||
|
data['url'] = await getUrl(data);
|
||||||
|
}
|
||||||
|
return await addArchive(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to get information about a tool
|
||||||
*
|
*
|
||||||
* @param tool
|
|
||||||
* @param release
|
* @param release
|
||||||
* @param prefix
|
* @param php_version
|
||||||
* @param os_version
|
* @param os_version
|
||||||
*/
|
*/
|
||||||
export async function addPackage(
|
export async function getData(
|
||||||
tool: string,
|
|
||||||
release: string,
|
release: string,
|
||||||
prefix: string,
|
php_version: string,
|
||||||
os_version: string
|
os_version: string
|
||||||
): Promise<string> {
|
): Promise<RS> {
|
||||||
const tool_command = await getCommand(os_version, 'composertool');
|
const json_file: string = await utils.readFile('tools.json', 'src/configs');
|
||||||
return tool_command + tool + ' ' + release + ' ' + prefix;
|
const json_objects: RSRS = JSON.parse(json_file);
|
||||||
|
release = release.replace(/\s+/g, '');
|
||||||
|
const parts: string[] = release.split(':');
|
||||||
|
const tool = parts[0];
|
||||||
|
const version = parts[1];
|
||||||
|
let data: RS;
|
||||||
|
if (Object.keys(json_objects).includes(tool)) {
|
||||||
|
data = json_objects[tool];
|
||||||
|
data['tool'] = tool;
|
||||||
|
} else {
|
||||||
|
const key: string | undefined = Object.keys(json_objects).find(
|
||||||
|
(key: string) => {
|
||||||
|
return json_objects[key]['alias'] == tool;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
if (key) {
|
||||||
|
data = json_objects[key];
|
||||||
|
data['tool'] = key;
|
||||||
|
} else {
|
||||||
|
data = {
|
||||||
|
tool: tool.split('/')[1],
|
||||||
|
repository: tool,
|
||||||
|
type: 'composer'
|
||||||
|
};
|
||||||
|
data = !tool.includes('/') ? {tool: tool} : data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
data['github'] = 'https://github.com';
|
||||||
|
data['domain'] ??= data['github'];
|
||||||
|
data['extension'] ??= '.phar';
|
||||||
|
data['os_version'] = os_version;
|
||||||
|
data['php_version'] = php_version;
|
||||||
|
data['prefix'] = data['github'] === data['domain'] ? 'releases' : '';
|
||||||
|
data['verb'] = data['github'] === data['domain'] ? 'download' : '';
|
||||||
|
data['fetch_latest'] ??= 'false';
|
||||||
|
data['version_parameter'] = JSON.stringify(data['version_parameter']) || '';
|
||||||
|
data['version_prefix'] ??= '';
|
||||||
|
data['release'] = await getRelease(release, data);
|
||||||
|
data['version'] = version
|
||||||
|
? await getVersion(version, data)
|
||||||
|
: await getLatestVersion(data);
|
||||||
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const functionRecord: Record<string, (data: RS) => Promise<string>> = {
|
||||||
|
composer: addComposer,
|
||||||
|
deployer: addDeployer,
|
||||||
|
dev_tools: addDevTools,
|
||||||
|
phive: addPhive,
|
||||||
|
blackfire_player: addBlackfirePlayer,
|
||||||
|
pecl: addPECL,
|
||||||
|
phing: addPhing,
|
||||||
|
phpunit: addPHPUnitTools,
|
||||||
|
phpcpd: addPHPUnitTools,
|
||||||
|
symfony: addSymfony,
|
||||||
|
wp_cli: addWPCLI
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Setup tools
|
* Setup tools
|
||||||
*
|
*
|
||||||
@ -448,134 +484,51 @@ export async function addTools(
|
|||||||
php_version: string,
|
php_version: string,
|
||||||
os_version: string
|
os_version: string
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
let script = '\n' + (await utils.stepLog('Setup Tools', os_version));
|
let script = '\n';
|
||||||
const tools_list: Array<string> = await getCleanedToolsList(tools_csv);
|
if (tools_csv === 'none') {
|
||||||
|
return '';
|
||||||
|
} else {
|
||||||
|
script += await utils.stepLog('Setup Tools', os_version);
|
||||||
|
}
|
||||||
|
const tools_list = await filterList(await utils.CSVArray(tools_csv));
|
||||||
await utils.asyncForEach(tools_list, async function (release: string) {
|
await utils.asyncForEach(tools_list, async function (release: string) {
|
||||||
const tool_data: {name: string; version: string} = await parseTool(release);
|
const data: RS = await getData(release, php_version, os_version);
|
||||||
const tool: string = tool_data.name;
|
|
||||||
const version: string = tool_data.version;
|
|
||||||
const github = 'https://github.com/';
|
|
||||||
let uri: string = await getUri(
|
|
||||||
tool,
|
|
||||||
'.phar',
|
|
||||||
version,
|
|
||||||
'releases',
|
|
||||||
'',
|
|
||||||
'download'
|
|
||||||
);
|
|
||||||
script += '\n';
|
script += '\n';
|
||||||
let url = '';
|
switch (true) {
|
||||||
switch (tool) {
|
case data['error'] !== undefined:
|
||||||
case 'blackfire':
|
script += await utils.addLog(
|
||||||
case 'blackfire-agent':
|
'$cross',
|
||||||
script += await getCommand(os_version, 'blackfire');
|
data['tool'],
|
||||||
break;
|
data['error'],
|
||||||
case 'blackfire-player':
|
data['os_version']
|
||||||
url = await getPharUrl('https://get.blackfire.io', tool, 'v', version);
|
|
||||||
script += await addArchive(tool, version, url, os_version);
|
|
||||||
break;
|
|
||||||
case 'cs2pr':
|
|
||||||
uri = await getUri(tool, '', version, 'releases', '', 'download');
|
|
||||||
url = github + 'staabm/annotate-pull-request-from-checkstyle/' + uri;
|
|
||||||
script += await addArchive(tool, version, url, os_version);
|
|
||||||
break;
|
|
||||||
case 'infection':
|
|
||||||
url = github + 'infection/infection/' + uri;
|
|
||||||
script += await addArchive(tool, version, url, os_version);
|
|
||||||
break;
|
|
||||||
case 'php-cs-fixer':
|
|
||||||
uri = await getUri(tool, '.phar', version, 'releases', 'v', 'download');
|
|
||||||
url = github + 'FriendsOfPHP/PHP-CS-Fixer/' + uri;
|
|
||||||
script += await addArchive(tool, version, url, os_version);
|
|
||||||
break;
|
|
||||||
case 'phpcs':
|
|
||||||
case 'phpcbf':
|
|
||||||
url = github + 'squizlabs/PHP_CodeSniffer/' + uri;
|
|
||||||
script += await addArchive(tool, version, url, os_version);
|
|
||||||
break;
|
|
||||||
case 'phan':
|
|
||||||
url = github + 'phan/phan/' + uri;
|
|
||||||
script += await addArchive(tool, version, url, os_version);
|
|
||||||
break;
|
|
||||||
case 'phive':
|
|
||||||
script += await addPhive(version, os_version);
|
|
||||||
break;
|
|
||||||
case 'phpstan':
|
|
||||||
url = github + 'phpstan/phpstan/' + uri;
|
|
||||||
script += await addArchive(tool, version, url, os_version);
|
|
||||||
break;
|
|
||||||
case 'phpmd':
|
|
||||||
url = github + 'phpmd/phpmd/' + uri;
|
|
||||||
script += await addArchive(tool, version, url, os_version);
|
|
||||||
break;
|
|
||||||
case 'psalm':
|
|
||||||
url = github + 'vimeo/psalm/' + uri;
|
|
||||||
script += await addArchive(tool, version, url, os_version);
|
|
||||||
break;
|
|
||||||
case 'composer':
|
|
||||||
url = 'https://getcomposer.org/composer-stable.phar';
|
|
||||||
script +=
|
|
||||||
(await addArchive('composer', version, url, os_version)) +
|
|
||||||
(await updateComposer(version, os_version));
|
|
||||||
break;
|
|
||||||
case 'codeception':
|
|
||||||
url =
|
|
||||||
'https://codeception.com/' +
|
|
||||||
(await getCodeceptionUri(version, php_version));
|
|
||||||
script += await addArchive(tool, version, url, os_version);
|
|
||||||
break;
|
|
||||||
case 'phpcpd':
|
|
||||||
case 'phpunit':
|
|
||||||
url = await getPharUrl('https://phar.phpunit.de', tool, '', version);
|
|
||||||
script += await addArchive(tool, version, url, os_version);
|
|
||||||
break;
|
|
||||||
case 'deployer':
|
|
||||||
url = await getDeployerUrl(version);
|
|
||||||
script += await addArchive(tool, version, url, os_version);
|
|
||||||
break;
|
|
||||||
case 'flex':
|
|
||||||
script += await addPackage(tool, release, 'symfony/', os_version);
|
|
||||||
break;
|
|
||||||
case 'phinx':
|
|
||||||
script += await addPackage(tool, release, 'robmorgan/', os_version);
|
|
||||||
break;
|
|
||||||
case 'prestissimo':
|
|
||||||
script += await addPackage(tool, release, 'hirak/', os_version);
|
|
||||||
break;
|
|
||||||
case 'vapor-cli':
|
|
||||||
script += await addPackage(tool, release, 'laravel/', os_version);
|
|
||||||
break;
|
|
||||||
case 'composer-prefetcher':
|
|
||||||
script += await addPackage(
|
|
||||||
tool,
|
|
||||||
release,
|
|
||||||
'narrowspark/automatic-',
|
|
||||||
os_version
|
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
case 'pecl':
|
case 'phar' === data['type']:
|
||||||
script += await getCommand(os_version, 'pecl');
|
data['url'] = await getUrl(data);
|
||||||
|
script += await addArchive(data);
|
||||||
break;
|
break;
|
||||||
case 'php-config':
|
case 'composer' === data['type']:
|
||||||
case 'phpize':
|
script += await addPackage(data);
|
||||||
script += await addDevTools(tool, os_version);
|
|
||||||
break;
|
break;
|
||||||
case 'symfony':
|
case 'custom-package' === data['type']:
|
||||||
case 'symfony-cli':
|
script += await utils.customPackage(
|
||||||
uri = await getSymfonyUri(version, os_version);
|
data['tool'].split('-')[0],
|
||||||
url = github + 'symfony/cli/' + uri;
|
'tools',
|
||||||
script += await addArchive('symfony', version, url, os_version);
|
data['version'],
|
||||||
|
data['os_version']
|
||||||
|
);
|
||||||
break;
|
break;
|
||||||
case 'wp-cli':
|
case 'custom-function' === data['type']:
|
||||||
url = github + (await getWpCliUrl(version));
|
script += await functionRecord[data['function']](data);
|
||||||
script += await addArchive(tool, version, url, os_version);
|
break;
|
||||||
|
case /^none$/.test(data['tool']):
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
script += await utils.addLog(
|
script += await utils.addLog(
|
||||||
'$cross',
|
'$cross',
|
||||||
tool,
|
data['tool'],
|
||||||
'Tool ' + tool + ' is not supported',
|
'Tool ' + data['tool'] + ' is not supported',
|
||||||
os_version
|
data['os_version']
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
292
src/utils.ts
292
src/utils.ts
@ -1,7 +1,28 @@
|
|||||||
|
import {IncomingMessage, OutgoingHttpHeaders} from 'http';
|
||||||
import * as fs from 'fs';
|
import * as fs from 'fs';
|
||||||
|
import * as https from 'https';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
|
import * as url from 'url';
|
||||||
import * as core from '@actions/core';
|
import * as core from '@actions/core';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to read environment variable and return a string value.
|
||||||
|
*
|
||||||
|
* @param property
|
||||||
|
*/
|
||||||
|
export async function readEnv(property: string): Promise<string> {
|
||||||
|
const property_lc: string = property.toLowerCase();
|
||||||
|
const property_uc: string = property.toUpperCase();
|
||||||
|
return (
|
||||||
|
process.env[property] ||
|
||||||
|
process.env[property_lc] ||
|
||||||
|
process.env[property_uc] ||
|
||||||
|
process.env[property_lc.replace('_', '-')] ||
|
||||||
|
process.env[property_uc.replace('_', '-')] ||
|
||||||
|
''
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function to get inputs from both with and env annotations.
|
* Function to get inputs from both with and env annotations.
|
||||||
*
|
*
|
||||||
@ -12,13 +33,84 @@ export async function getInput(
|
|||||||
name: string,
|
name: string,
|
||||||
mandatory: boolean
|
mandatory: boolean
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
const input = process.env[name];
|
const input = core.getInput(name);
|
||||||
switch (input) {
|
const env_input = await readEnv(name);
|
||||||
case '':
|
switch (true) {
|
||||||
case undefined:
|
case input != '':
|
||||||
return core.getInput(name, {required: mandatory});
|
|
||||||
default:
|
|
||||||
return input;
|
return input;
|
||||||
|
case input == '' && env_input != '':
|
||||||
|
return env_input;
|
||||||
|
case input == '' && env_input == '' && mandatory:
|
||||||
|
throw new Error(`Input required and not supplied: ${name}`);
|
||||||
|
default:
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to fetch an URL
|
||||||
|
*
|
||||||
|
* @param input_url
|
||||||
|
* @param auth_token
|
||||||
|
*/
|
||||||
|
export async function fetch(
|
||||||
|
input_url: string,
|
||||||
|
auth_token?: string
|
||||||
|
): Promise<Record<string, string>> {
|
||||||
|
const fetch_promise: Promise<Record<string, string>> = new Promise(
|
||||||
|
resolve => {
|
||||||
|
const url_object: url.UrlObject = new url.URL(input_url);
|
||||||
|
const headers: OutgoingHttpHeaders = {
|
||||||
|
'User-Agent': `Mozilla/5.0 (${process.platform} ${process.arch}) setup-php`
|
||||||
|
};
|
||||||
|
if (auth_token) {
|
||||||
|
headers.authorization = 'Bearer ' + auth_token;
|
||||||
|
}
|
||||||
|
const options: https.RequestOptions = {
|
||||||
|
hostname: url_object.hostname,
|
||||||
|
path: url_object.pathname,
|
||||||
|
headers: headers
|
||||||
|
};
|
||||||
|
const req = https.get(options, (res: IncomingMessage) => {
|
||||||
|
if (res.statusCode != 200) {
|
||||||
|
resolve({error: `${res.statusCode}: ${res.statusMessage}`});
|
||||||
|
} else {
|
||||||
|
let body = '';
|
||||||
|
res.setEncoding('utf8');
|
||||||
|
res.on('data', chunk => (body += chunk));
|
||||||
|
res.on('end', () => resolve({data: `${body}`}));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
req.end();
|
||||||
|
}
|
||||||
|
);
|
||||||
|
return await fetch_promise;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Function to get manifest URL
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
export async function getManifestURL(): Promise<string> {
|
||||||
|
return 'https://raw.githubusercontent.com/shivammathur/setup-php/develop/src/configs/php-versions.json';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to parse PHP version.
|
||||||
|
*
|
||||||
|
* @param version
|
||||||
|
*/
|
||||||
|
export async function parseVersion(version: string): Promise<string> {
|
||||||
|
const manifest = await getManifestURL();
|
||||||
|
switch (true) {
|
||||||
|
case /^(latest|nightly|\d+\.x)$/.test(version):
|
||||||
|
return JSON.parse((await fetch(manifest))['data'])[version];
|
||||||
|
default:
|
||||||
|
switch (true) {
|
||||||
|
case version.length > 1:
|
||||||
|
return version.slice(0, 3);
|
||||||
|
default:
|
||||||
|
return version + '.0';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -147,10 +239,14 @@ export async function addLog(
|
|||||||
* Read the scripts
|
* Read the scripts
|
||||||
*
|
*
|
||||||
* @param filename
|
* @param filename
|
||||||
|
* @param directory
|
||||||
*/
|
*/
|
||||||
export async function readScript(filename: string): Promise<string> {
|
export async function readFile(
|
||||||
|
filename: string,
|
||||||
|
directory: string
|
||||||
|
): Promise<string> {
|
||||||
return fs.readFileSync(
|
return fs.readFileSync(
|
||||||
path.join(__dirname, '../src/scripts/' + filename),
|
path.join(__dirname, '../' + directory, filename),
|
||||||
'utf8'
|
'utf8'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -184,16 +280,21 @@ export async function extensionArray(
|
|||||||
case ' ':
|
case ' ':
|
||||||
return [];
|
return [];
|
||||||
default:
|
default:
|
||||||
return extension_csv
|
return [
|
||||||
|
extension_csv.match(/(^|,\s?)none(\s?,|$)/) ? 'none' : '',
|
||||||
|
...extension_csv
|
||||||
.split(',')
|
.split(',')
|
||||||
|
|
||||||
.map(function (extension: string) {
|
.map(function (extension: string) {
|
||||||
|
if (/.+-.+\/.+@.+/.test(extension)) {
|
||||||
|
return extension;
|
||||||
|
}
|
||||||
return extension
|
return extension
|
||||||
.trim()
|
.trim()
|
||||||
.toLowerCase()
|
.toLowerCase()
|
||||||
.replace('php-', '')
|
.replace(/^(:)?(php[-_]|none|zend )/, '$1');
|
||||||
.replace('php_', '');
|
|
||||||
})
|
})
|
||||||
.filter(Boolean);
|
].filter(Boolean);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -210,9 +311,12 @@ export async function CSVArray(values_csv: string): Promise<Array<string>> {
|
|||||||
return [];
|
return [];
|
||||||
default:
|
default:
|
||||||
return values_csv
|
return values_csv
|
||||||
.split(',')
|
.split(/,(?=(?:(?:[^"']*["']){2})*[^"']*$)/)
|
||||||
.map(function (value: string) {
|
.map(function (value) {
|
||||||
return value.trim();
|
return value
|
||||||
|
.trim()
|
||||||
|
.replace(/^["']|["']$|(?<==)["']/g, '')
|
||||||
|
.replace(/=(((?!E_).)*[?{}|&~![()^]+((?!E_).)+)/, "='$1'");
|
||||||
})
|
})
|
||||||
.filter(Boolean);
|
.filter(Boolean);
|
||||||
}
|
}
|
||||||
@ -224,18 +328,11 @@ export async function CSVArray(values_csv: string): Promise<Array<string>> {
|
|||||||
* @param extension
|
* @param extension
|
||||||
*/
|
*/
|
||||||
export async function getExtensionPrefix(extension: string): Promise<string> {
|
export async function getExtensionPrefix(extension: string): Promise<string> {
|
||||||
const zend: Array<string> = [
|
switch (true) {
|
||||||
'xdebug',
|
|
||||||
'xdebug3',
|
|
||||||
'opcache',
|
|
||||||
'ioncube',
|
|
||||||
'eaccelerator'
|
|
||||||
];
|
|
||||||
switch (zend.indexOf(extension)) {
|
|
||||||
default:
|
default:
|
||||||
return 'zend_extension';
|
|
||||||
case -1:
|
|
||||||
return 'extension';
|
return 'extension';
|
||||||
|
case /xdebug([2-3])?$|opcache|ioncube|eaccelerator/.test(extension):
|
||||||
|
return 'zend_extension';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -259,3 +356,148 @@ export async function suppressOutput(os_version: string): Promise<string> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to get script to log unsupported extensions.
|
||||||
|
*
|
||||||
|
* @param extension
|
||||||
|
* @param version
|
||||||
|
* @param os_version
|
||||||
|
*/
|
||||||
|
export async function getUnsupportedLog(
|
||||||
|
extension: string,
|
||||||
|
version: string,
|
||||||
|
os_version: string
|
||||||
|
): Promise<string> {
|
||||||
|
return (
|
||||||
|
'\n' +
|
||||||
|
(await addLog(
|
||||||
|
'$cross',
|
||||||
|
extension,
|
||||||
|
[extension, 'is not supported on PHP', version].join(' '),
|
||||||
|
os_version
|
||||||
|
)) +
|
||||||
|
'\n'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to get command to setup tools
|
||||||
|
*
|
||||||
|
* @param os_version
|
||||||
|
* @param suffix
|
||||||
|
*/
|
||||||
|
export async function getCommand(
|
||||||
|
os_version: string,
|
||||||
|
suffix: string
|
||||||
|
): Promise<string> {
|
||||||
|
switch (os_version) {
|
||||||
|
case 'linux':
|
||||||
|
case 'darwin':
|
||||||
|
return 'add_' + suffix + ' ';
|
||||||
|
case 'win32':
|
||||||
|
return 'Add-' + suffix.charAt(0).toUpperCase() + suffix.slice(1) + ' ';
|
||||||
|
default:
|
||||||
|
return await log(
|
||||||
|
'Platform ' + os_version + ' is not supported',
|
||||||
|
os_version,
|
||||||
|
'error'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to join strings with space
|
||||||
|
*
|
||||||
|
* @param str
|
||||||
|
*/
|
||||||
|
export async function joins(...str: string[]): Promise<string> {
|
||||||
|
return [...str].join(' ');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to get script extensions
|
||||||
|
*
|
||||||
|
* @param os_version
|
||||||
|
*/
|
||||||
|
export async function scriptExtension(os_version: string): Promise<string> {
|
||||||
|
switch (os_version) {
|
||||||
|
case 'win32':
|
||||||
|
return '.ps1';
|
||||||
|
case 'linux':
|
||||||
|
case 'darwin':
|
||||||
|
return '.sh';
|
||||||
|
default:
|
||||||
|
return await log(
|
||||||
|
'Platform ' + os_version + ' is not supported',
|
||||||
|
os_version,
|
||||||
|
'error'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to get script tool
|
||||||
|
*
|
||||||
|
* @param os_version
|
||||||
|
*/
|
||||||
|
export async function scriptTool(os_version: string): Promise<string> {
|
||||||
|
switch (os_version) {
|
||||||
|
case 'win32':
|
||||||
|
return 'pwsh';
|
||||||
|
case 'linux':
|
||||||
|
case 'darwin':
|
||||||
|
return 'bash';
|
||||||
|
default:
|
||||||
|
return await log(
|
||||||
|
'Platform ' + os_version + ' is not supported',
|
||||||
|
os_version,
|
||||||
|
'error'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to get script to add tools with custom support.
|
||||||
|
*
|
||||||
|
* @param pkg
|
||||||
|
* @param type
|
||||||
|
* @param version
|
||||||
|
* @param os_version
|
||||||
|
*/
|
||||||
|
export async function customPackage(
|
||||||
|
pkg: string,
|
||||||
|
type: string,
|
||||||
|
version: string,
|
||||||
|
os_version: string
|
||||||
|
): Promise<string> {
|
||||||
|
const pkg_name: string = pkg.replace(/\d+|(pdo|pecl)[_-]/, '');
|
||||||
|
const script_extension: string = await scriptExtension(os_version);
|
||||||
|
const script: string = path.join(
|
||||||
|
__dirname,
|
||||||
|
'../src/scripts/' + type + '/' + pkg_name + script_extension
|
||||||
|
);
|
||||||
|
const command: string = await getCommand(os_version, pkg_name);
|
||||||
|
return '\n. ' + script + '\n' + command + version;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to extension input for installation from source.
|
||||||
|
*
|
||||||
|
* @param extension
|
||||||
|
* @param prefix
|
||||||
|
*/
|
||||||
|
export async function parseExtensionSource(
|
||||||
|
extension: string,
|
||||||
|
prefix: string
|
||||||
|
): Promise<string> {
|
||||||
|
// Groups: extension, domain url, org, repo, release
|
||||||
|
const regex = /(\w+)-(.+:\/\/.+(?:[.:].+)+\/)?([\w.-]+)\/([\w.-]+)@(.+)/;
|
||||||
|
const matches = regex.exec(extension) as RegExpExecArray;
|
||||||
|
matches[2] = matches[2] ? matches[2].slice(0, -1) : 'https://github.com';
|
||||||
|
return await joins(
|
||||||
|
'\nadd_extension_from_source',
|
||||||
|
...matches.splice(1, matches.length),
|
||||||
|
prefix
|
||||||
|
);
|
||||||
|
}
|
||||||
|
@ -1,63 +1,19 @@
|
|||||||
{
|
{
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
/* Basic Options */
|
"declaration": true,
|
||||||
// "incremental": true, /* Enable incremental compilation */
|
"esModuleInterop": true,
|
||||||
"target": "ES2019", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */
|
"lib": [
|
||||||
"module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */
|
"ES2020"
|
||||||
// "allowJs": true, /* Allow javascript files to be compiled. */
|
],
|
||||||
// "checkJs": true, /* Report errors in .js files. */
|
"module": "commonjs",
|
||||||
// "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
|
"moduleResolution": "node",
|
||||||
// "declaration": true, /* Generates corresponding '.d.ts' file. */
|
"noImplicitAny": true,
|
||||||
// "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */
|
"outDir": "./lib",
|
||||||
// "sourceMap": true, /* Generates corresponding '.map' file. */
|
"removeComments": true,
|
||||||
// "outFile": "./", /* Concatenate and emit output to single file. */
|
"rootDir": "./src",
|
||||||
"outDir": "./lib", /* Redirect output structure to the directory. */
|
"sourceMap": true,
|
||||||
"rootDir": "./src", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
|
"strict": true,
|
||||||
// "composite": true, /* Enable project compilation */
|
"target": "ES2019"
|
||||||
// "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */
|
|
||||||
// "removeComments": true, /* Do not emit comments to output. */
|
|
||||||
// "noEmit": true, /* Do not emit outputs. */
|
|
||||||
// "importHelpers": true, /* Import emit helpers from 'tslib'. */
|
|
||||||
// "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
|
|
||||||
// "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */
|
|
||||||
|
|
||||||
/* Strict Type-Checking Options */
|
|
||||||
"strict": true, /* Enable all strict type-checking options. */
|
|
||||||
// "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */
|
|
||||||
// "strictNullChecks": true, /* Enable strict null checks. */
|
|
||||||
// "strictFunctionTypes": true, /* Enable strict checking of function types. */
|
|
||||||
// "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */
|
|
||||||
// "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */
|
|
||||||
// "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */
|
|
||||||
// "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */
|
|
||||||
|
|
||||||
/* Additional Checks */
|
|
||||||
// "noUnusedLocals": true, /* Report errors on unused locals. */
|
|
||||||
// "noUnusedParameters": true, /* Report errors on unused parameters. */
|
|
||||||
// "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
|
|
||||||
// "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
|
|
||||||
|
|
||||||
/* Module Resolution Options */
|
|
||||||
// "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
|
|
||||||
// "baseUrl": "./", /* Base directory to resolve non-absolute module names. */
|
|
||||||
// "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
|
|
||||||
// "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */
|
|
||||||
// "typeRoots": [], /* List of folders to include type definitions from. */
|
|
||||||
// "types": [], /* Type declaration files to be included in compilation. */
|
|
||||||
// "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
|
|
||||||
"esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
|
|
||||||
// "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */
|
|
||||||
// "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
|
|
||||||
|
|
||||||
/* Source Map Options */
|
|
||||||
// "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */
|
|
||||||
// "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
|
|
||||||
// "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */
|
|
||||||
// "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */
|
|
||||||
|
|
||||||
/* Experimental Options */
|
|
||||||
// "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */
|
|
||||||
// "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */
|
|
||||||
},
|
},
|
||||||
"exclude": ["node_modules", "**/*.test.ts"]
|
"exclude": ["__tests__", "lib", "node_modules"]
|
||||||
}
|
}
|
Reference in New Issue
Block a user