mirror of
https://github.com/shivammathur/setup-php.git
synced 2025-07-01 12:43:17 +07:00
Compare commits
188 Commits
Author | SHA1 | Date | |
---|---|---|---|
28c92ba4ee | |||
ffd019edc6 | |||
0e506b34ac | |||
aa0ecfbc6f | |||
f29cd24dbf | |||
2a41b9d1ba | |||
2a0c477416 | |||
61aa0dc2f9 | |||
f4e1b8d33e | |||
e3a498a6a5 | |||
fbdd58c5bc | |||
2c5cb7a75e | |||
ab12e42197 | |||
5588437714 | |||
d7eb9ade23 | |||
938988b211 | |||
e030852d0e | |||
3aa870b0fe | |||
1229133602 | |||
b1b8d8367c | |||
60ff55130a | |||
e5690a9659 | |||
7958a5ccff | |||
113a31fceb | |||
c9aea8708f | |||
7435bb8e4a | |||
5227e2cd5c | |||
906893d397 | |||
f1b6b2bbe0 | |||
e59c938e82 | |||
506357cdb9 | |||
b57416e44d | |||
9d1fe69816 | |||
fec64d1788 | |||
32c1436247 | |||
baab28a534 | |||
d58b967b58 | |||
17f3c38947 | |||
988f48930d | |||
ea50e73b1f | |||
bc906f7414 | |||
8bed24ebe1 | |||
698464efea | |||
45082e25a9 | |||
f0338c8922 | |||
49311db00a | |||
7d9584bd3f | |||
45df3b1713 | |||
70cd53866f | |||
12d6e834b7 | |||
9fdc82bced | |||
c485e8b283 | |||
7a90166ec2 | |||
8f96f50dcd | |||
c470f034d0 | |||
e2ad91ce1c | |||
cb746892c2 | |||
8f542eae1a | |||
0769672a24 | |||
c20693a6ca | |||
0c0ae39775 | |||
d27996462b | |||
0a5e543af7 | |||
0cc14f65a2 | |||
1ecc5fdca3 | |||
5520fdb61a | |||
d0f1a91dfd | |||
276480411d | |||
827b051fea | |||
fdaf1f0003 | |||
030f4839d4 | |||
1bb08cc017 | |||
678ad243bf | |||
20b87bc786 | |||
288f9953ef | |||
77ac7d57f1 | |||
8983fb3ae2 | |||
87a933f720 | |||
847ea65468 | |||
c52ce057af | |||
46b357b6c2 | |||
2fc508f43d | |||
d8de30560b | |||
02db83ef5f | |||
6728eaf2ad | |||
ca291eadaf | |||
8185c8186b | |||
44cf056ba8 | |||
9bfde13f48 | |||
e38eccad04 | |||
fa211a9d07 | |||
5865982519 | |||
e201830bdd | |||
5c4074b01a | |||
48f537d6d0 | |||
bc40a61480 | |||
3d5fae7917 | |||
d0591e6d7c | |||
b108a66489 | |||
f0a05b4f6e | |||
5070ebd871 | |||
bea4065e11 | |||
c3875408ad | |||
1d1c0f2595 | |||
1ac189066e | |||
74cdfb97c1 | |||
ee05ca54f6 | |||
12b1061a6b | |||
1c6058bc18 | |||
2f8045c593 | |||
6597a6a15b | |||
1cc85eb670 | |||
6cba0a914f | |||
c43f842cf3 | |||
11e062bf23 | |||
dee3cfee50 | |||
26b0fcc6cd | |||
ab62fff526 | |||
446bccb14d | |||
29d99c6866 | |||
1444e002ab | |||
03b97e24e9 | |||
f7fb800623 | |||
5593bd4bd3 | |||
3160874a27 | |||
db0bbd209b | |||
d920044a54 | |||
818ca89f55 | |||
8876ac788f | |||
0390a48770 | |||
274e348895 | |||
37d7b37f43 | |||
d058d52012 | |||
17983e66e5 | |||
33a005dd90 | |||
1870ffc08c | |||
70fd71ab48 | |||
2f1900f7bc | |||
19497a0597 | |||
5b2e081bc0 | |||
66fa82fbca | |||
4aa42214b1 | |||
1e2c96a4b4 | |||
3e8d887b0d | |||
a3d5500a6a | |||
e763fddf01 | |||
3cd5c7fd3a | |||
988cef62da | |||
be3ee05178 | |||
a74c3369c5 | |||
b9ef39c812 | |||
782615d572 | |||
31411b0d4d | |||
6b93e48d83 | |||
fe504c5e23 | |||
61d755bd59 | |||
3455b4ca37 | |||
35c24a7d2f | |||
da7361cc8f | |||
3f4c1842a0 | |||
062567eeb1 | |||
00b0d694d0 | |||
54afb29ef6 | |||
41329810ef | |||
90a6d88c24 | |||
8e6968c49e | |||
4ce413f558 | |||
533e0949a8 | |||
0ffe535b8e | |||
55fe8db60d | |||
5af5f992ec | |||
e9e024e600 | |||
a7ea0636d7 | |||
c471c0a458 | |||
277239149a | |||
9385896f2a | |||
9cabd8564d | |||
fdfa901941 | |||
527cd148c8 | |||
59b6e2b54a | |||
5ad0888329 | |||
3cfc409e14 | |||
ebc671081f | |||
efae663c0f | |||
fa8a671e6f | |||
6a4159ba98 | |||
0da52b1327 | |||
3579c7ef28 |
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"env": { "node": true, "jest": true },
|
"env": { "node": true, "jest": true },
|
||||||
"parser": "@typescript-eslint/parser",
|
"parser": "@typescript-eslint/parser",
|
||||||
"parserOptions": { "ecmaVersion": 2020, "sourceType": "module" },
|
"parserOptions": { "ecmaVersion": 2019, "sourceType": "module" },
|
||||||
"extends": [
|
"extends": [
|
||||||
"eslint:recommended",
|
"eslint:recommended",
|
||||||
"plugin:@typescript-eslint/eslint-recommended",
|
"plugin:@typescript-eslint/eslint-recommended",
|
||||||
@ -10,14 +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"]
|
||||||
"rules": {
|
|
||||||
"camelcase": "off",
|
|
||||||
"require-atomic-updates": "off",
|
|
||||||
"@typescript-eslint/ban-ts-ignore": "off",
|
|
||||||
"@typescript-eslint/camelcase": "off",
|
|
||||||
"@typescript-eslint/no-unused-vars": "off"
|
|
||||||
}
|
|
||||||
}
|
}
|
20
.github/CONTRIBUTING.md
vendored
20
.github/CONTRIBUTING.md
vendored
@ -17,13 +17,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:
|
||||||
@ -40,6 +33,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:
|
||||||
|
7
.github/FUNDING.yml
vendored
7
.github/FUNDING.yml
vendored
@ -1,8 +1,3 @@
|
|||||||
# These are supported funding model platforms
|
# These are supported funding model platforms
|
||||||
|
|
||||||
github: shivammathur
|
github:shivammathur
|
||||||
community_bridge: setup-php
|
|
||||||
issuehunt: shivammathur
|
|
||||||
patreon: shivammathur
|
|
||||||
liberapay: shivammathur
|
|
||||||
custom: https://www.paypal.me/shivammathur
|
|
7
.github/PULL_REQUEST_TEMPLATE.md
vendored
7
.github/PULL_REQUEST_TEMPLATE.md
vendored
@ -26,7 +26,12 @@ This PR [briefly explain what it does]
|
|||||||
- [ ] I have run `npm run format` before the commit.
|
- [ ] I have run `npm run format` before the commit.
|
||||||
- [ ] I have run `npm run lint` before the commit.
|
- [ ] I have run `npm run lint` before the commit.
|
||||||
- [ ] I have run `npm run release` before the commit.
|
- [ ] I have run `npm run release` before the commit.
|
||||||
- [ ] `npm test` returns with no unit test errors.
|
- [ ] `npm test` returns with no unit test errors and all code covered.
|
||||||
|
|
||||||
|
> In case this PR edits any scripts:
|
||||||
|
|
||||||
|
- [ ] I have checked the edited scripts for syntax.
|
||||||
|
- [ ] 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.
|
||||||
|
33
.github/PULL_REQUEST_TEMPLATE/FIX.md
vendored
33
.github/PULL_REQUEST_TEMPLATE/FIX.md
vendored
@ -1,33 +0,0 @@
|
|||||||
---
|
|
||||||
name: 🐞 Bug Fix
|
|
||||||
about: You have a fix for a bug?
|
|
||||||
labels: bug
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## A Pull Request should be associated with an Issue.
|
|
||||||
|
|
||||||
> We wish to have discussions in Issues. A single issue may be targeted by multiple PRs.
|
|
||||||
> If you're offering a new feature or fixing anything, we'd like to know beforehand in Issues,
|
|
||||||
> and potentially we'll be able to point development in a particular direction.
|
|
||||||
|
|
||||||
Related issue:
|
|
||||||
|
|
||||||
> Further notes in [Contribution Guidelines](.github/CONTRIBUTING.md)
|
|
||||||
> Thank you! We are open to PRs, but please understand if for technical reasons we are unable to accept each and any PR
|
|
||||||
|
|
||||||
### Description
|
|
||||||
|
|
||||||
This PR [briefly explain what it does]
|
|
||||||
|
|
||||||
> In case this PR introduced TypeScript/JavaScript code changes:
|
|
||||||
|
|
||||||
- [ ] I have written test cases for the changes in this pull request.
|
|
||||||
- [ ] I have run `npm run format` before the commit.
|
|
||||||
- [ ] I have run `npm run lint` before the commit.
|
|
||||||
- [ ] I have run `npm run release` before the commit.
|
|
||||||
- [ ] `npm test` returns with no unit test errors.
|
|
||||||
|
|
||||||
<!--
|
|
||||||
- Please target the develop branch when submitting the pull request.
|
|
||||||
-->
|
|
33
.github/PULL_REQUEST_TEMPLATE/IMPROVEMENT.md
vendored
33
.github/PULL_REQUEST_TEMPLATE/IMPROVEMENT.md
vendored
@ -1,33 +0,0 @@
|
|||||||
---
|
|
||||||
name: ⚙ Improvement
|
|
||||||
about: You have some improvement to make setup-php better?
|
|
||||||
labels: enhancement
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## A Pull Request should be associated with an Issue.
|
|
||||||
|
|
||||||
> We wish to have discussions in Issues. A single issue may be targeted by multiple PRs.
|
|
||||||
> If you're offering a new feature or fixing anything, we'd like to know beforehand in Issues,
|
|
||||||
> and potentially we'll be able to point development in a particular direction.
|
|
||||||
|
|
||||||
Related issue:
|
|
||||||
|
|
||||||
> Further notes in [Contribution Guidelines](.github/CONTRIBUTING.md)
|
|
||||||
> Thank you! We are open to PRs, but please understand if for technical reasons we are unable to accept each and any PR
|
|
||||||
|
|
||||||
### Description
|
|
||||||
|
|
||||||
This PR [briefly explain what it does]
|
|
||||||
|
|
||||||
> In case this PR introduced TypeScript/JavaScript code changes:
|
|
||||||
|
|
||||||
- [ ] I have written test cases for the changes in this pull request.
|
|
||||||
- [ ] I have run `npm run format` before the commit.
|
|
||||||
- [ ] I have run `npm run lint` before the commit.
|
|
||||||
- [ ] I have run `npm run release` before the commit.
|
|
||||||
- [ ] `npm test` returns with no unit test errors.
|
|
||||||
|
|
||||||
<!--
|
|
||||||
- Please target the develop branch when submitting the pull request.
|
|
||||||
-->
|
|
33
.github/PULL_REQUEST_TEMPLATE/NEW_FEATURE.md
vendored
33
.github/PULL_REQUEST_TEMPLATE/NEW_FEATURE.md
vendored
@ -1,33 +0,0 @@
|
|||||||
---
|
|
||||||
name: 🎉 New Feature
|
|
||||||
about: You have implemented some neat idea that you want to make part of setup-php?
|
|
||||||
labels: enhancement
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## A Pull Request should be associated with an Issue.
|
|
||||||
|
|
||||||
> We wish to have discussions in Issues. A single issue may be targeted by multiple PRs.
|
|
||||||
> If you're offering a new feature or fixing anything, we'd like to know beforehand in Issues,
|
|
||||||
> and potentially we'll be able to point development in a particular direction.
|
|
||||||
|
|
||||||
Related issue:
|
|
||||||
|
|
||||||
> Further notes in [Contribution Guidelines](.github/CONTRIBUTING.md)
|
|
||||||
> Thank you! We are open to PRs, but please understand if for technical reasons we are unable to accept each and any PR
|
|
||||||
|
|
||||||
### Description
|
|
||||||
|
|
||||||
This PR [briefly explain what it does]
|
|
||||||
|
|
||||||
> In case this PR introduced TypeScript/JavaScript code changes:
|
|
||||||
|
|
||||||
- [ ] I have written test cases for the changes in this pull request.
|
|
||||||
- [ ] I have run `npm run format` before the commit.
|
|
||||||
- [ ] I have run `npm run lint` before the commit.
|
|
||||||
- [ ] I have run `npm run release` before the commit.
|
|
||||||
- [ ] `npm test` returns with no unit test errors.
|
|
||||||
|
|
||||||
<!--
|
|
||||||
- Please target the develop branch when submitting the pull request.
|
|
||||||
-->
|
|
30
.github/SECURITY.md
vendored
Normal file
30
.github/SECURITY.md
vendored
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
# Security Policy
|
||||||
|
|
||||||
|
## Supported Versions
|
||||||
|
|
||||||
|
The following versions of this project are supported for security updates.
|
||||||
|
|
||||||
|
| Version | Supported |
|
||||||
|
| ------- | ------------------ |
|
||||||
|
| 1.11.x | :white_check_mark: |
|
||||||
|
| 2.14.x | :white_check_mark: |
|
||||||
|
|
||||||
|
## Supported PHP Versions
|
||||||
|
|
||||||
|
This security policy only applies to the latest patches of the following PHP versions.
|
||||||
|
|
||||||
|
| Version | Supported |
|
||||||
|
| ------- | ------------------ |
|
||||||
|
| 7.3 | :white_check_mark: |
|
||||||
|
| 7.4 | :white_check_mark: |
|
||||||
|
| 8.0 | :white_check_mark: |
|
||||||
|
| 8.1 | :white_check_mark: |
|
||||||
|
|
||||||
|
## Reporting a Vulnerability
|
||||||
|
|
||||||
|
If you have found any issues that might have security implications in the versions supported, please send a report privately to [contact@shivammathur.com](mailto:contact@shivammathur.com).
|
||||||
|
Do not report security reports publicly.
|
||||||
|
|
||||||
|
## Tidelift
|
||||||
|
|
||||||
|
If you use this GitHub Action through a Tidelift subscription, please refer to [https://tidelift.com/security](https://tidelift.com/security).
|
4
.github/codeql/codeql-configuration.yml
vendored
Normal file
4
.github/codeql/codeql-configuration.yml
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
name : CodeQL Configuration
|
||||||
|
|
||||||
|
paths:
|
||||||
|
- './src'
|
25
.github/workflows/codeql-workflow.yml
vendored
Normal file
25
.github/workflows/codeql-workflow.yml
vendored
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
name: CodeQL Workflow
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
schedule:
|
||||||
|
- cron: '0 15 * * 6'
|
||||||
|
jobs:
|
||||||
|
codeql:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 2
|
||||||
|
|
||||||
|
- name: Initialize CodeQL
|
||||||
|
uses: github/codeql-action/init@v1
|
||||||
|
with:
|
||||||
|
config-file: ./.github/codeql/codeql-configuration.yml
|
||||||
|
languages: javascript
|
||||||
|
|
||||||
|
- name: Autobuild
|
||||||
|
uses: github/codeql-action/autobuild@v1
|
||||||
|
|
||||||
|
- name: Perform CodeQL Analysis
|
||||||
|
uses: github/codeql-action/analyze@v1
|
92
.github/workflows/experimental-workflow.yml
vendored
92
.github/workflows/experimental-workflow.yml
vendored
@ -1,92 +0,0 @@
|
|||||||
name: Experimental workflow
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- nightly
|
|
||||||
- master
|
|
||||||
- develop
|
|
||||||
- verbose
|
|
||||||
paths-ignore:
|
|
||||||
- '**.md'
|
|
||||||
- 'examples/**'
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- nightly
|
|
||||||
- master
|
|
||||||
- develop
|
|
||||||
- verbose
|
|
||||||
paths-ignore:
|
|
||||||
- '**.md'
|
|
||||||
- 'examples/**'
|
|
||||||
jobs:
|
|
||||||
run:
|
|
||||||
name: Run
|
|
||||||
runs-on: ${{ matrix.operating-system }}
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
|
||||||
php-versions: ['8.0']
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v2
|
|
||||||
|
|
||||||
- name: Setup Node.js 12.x
|
|
||||||
uses: actions/setup-node@v1
|
|
||||||
with:
|
|
||||||
node-version: 12.x
|
|
||||||
|
|
||||||
- name: Install dependencies
|
|
||||||
run: npm install
|
|
||||||
|
|
||||||
- name: Prettier Format Check
|
|
||||||
run: npm run format-check
|
|
||||||
|
|
||||||
- name: ESLint Check
|
|
||||||
run: npm run lint
|
|
||||||
|
|
||||||
- name: Run tests
|
|
||||||
run: npm test
|
|
||||||
|
|
||||||
- name: Send Coverage
|
|
||||||
continue-on-error: true
|
|
||||||
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 }}
|
|
||||||
|
|
||||||
- name: Setup PHP with extensions and custom config
|
|
||||||
run: node dist/index.js
|
|
||||||
env:
|
|
||||||
php-version: ${{ matrix.php-versions }}
|
|
||||||
extensions: xml, opcache, xdebug, pcov #optional
|
|
||||||
ini-values: post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata #optional
|
|
||||||
coverage: pcov
|
|
||||||
|
|
||||||
- name: Testing PHP version
|
|
||||||
run: |
|
|
||||||
php -v
|
|
||||||
php -r "if(strpos(phpversion(), '${{ matrix.php-versions }}') === false) {throw new Exception('Wrong PHP version Installed');}"
|
|
||||||
|
|
||||||
- name: Testing Composer version
|
|
||||||
run: |
|
|
||||||
composer -V
|
|
||||||
php -r "if(strpos(@exec('composer -V'), 'Composer version') === false) {throw new Exception('Composer not found');}"
|
|
||||||
- name: Testing Extensions
|
|
||||||
run: |
|
|
||||||
php -m
|
|
||||||
php -r "if(! extension_loaded('mbstring')) {throw new Exception('mbstring not found');}"
|
|
||||||
php -r "if(! extension_loaded('pcov')) {throw new Exception('PCOV not found');}"
|
|
||||||
- name: Testing ini values
|
|
||||||
run: |
|
|
||||||
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('date.timezone')!='Asia/Kolkata') {throw new Exception('date.timezone not added');}"
|
|
||||||
- name: Test JIT
|
|
||||||
run: |
|
|
||||||
php -r "if(! extension_loaded('Zend OPcache')) {throw new Exception('Zend OPcache not found');}"
|
|
||||||
php -r "if(ini_get('opcache.jit_buffer_size')!='256M') {throw new Exception('opcache.jit_buffer_size not set');}"
|
|
||||||
php -r "if(ini_get('opcache.jit')!=1235) {throw new Exception('opcache.jit not set');}"
|
|
||||||
php -r "if(ini_get('pcre.jit')!=1) {throw new Exception('pcre.jit not set');}"
|
|
||||||
- name: Benchmark JIT
|
|
||||||
run: |
|
|
||||||
curl -o bench.php https://raw.githubusercontent.com/php/php-src/master/Zend/bench.php
|
|
||||||
php bench.php
|
|
@ -1,18 +1,15 @@
|
|||||||
name: Main workflow
|
name: Main workflow
|
||||||
on:
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
branches:
|
||||||
- master
|
- releases/v1
|
||||||
- develop
|
|
||||||
- verbose
|
|
||||||
paths-ignore:
|
paths-ignore:
|
||||||
- '**.md'
|
- '**.md'
|
||||||
- 'examples/**'
|
- 'examples/**'
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- master
|
- releases/v1
|
||||||
- develop
|
|
||||||
- verbose
|
|
||||||
paths-ignore:
|
paths-ignore:
|
||||||
- '**.md'
|
- '**.md'
|
||||||
- 'examples/**'
|
- 'examples/**'
|
||||||
@ -23,34 +20,12 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
operating-system: [ubuntu-20.04, ubuntu-18.04, windows-latest, macos-latest]
|
||||||
php-versions: ['5.6', '7.0', '7.1', '7.2', '7.3', '7.4']
|
php-versions: ['5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
- name: Setup Node.js 12.x
|
|
||||||
uses: actions/setup-node@v1
|
|
||||||
with:
|
|
||||||
node-version: 12.x
|
|
||||||
|
|
||||||
- name: Install dependencies
|
|
||||||
run: npm install
|
|
||||||
|
|
||||||
- name: Prettier Format Check
|
|
||||||
run: npm run format-check
|
|
||||||
|
|
||||||
- name: ESLint Check
|
|
||||||
run: npm run lint
|
|
||||||
|
|
||||||
- name: Run tests
|
|
||||||
run: npm test
|
|
||||||
|
|
||||||
- name: Send Coverage
|
|
||||||
continue-on-error: true
|
|
||||||
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 }}
|
|
||||||
|
|
||||||
- name: Setup PHP with extensions and custom config
|
- name: Setup PHP with extensions and custom config
|
||||||
run: node dist/index.js
|
run: node dist/index.js
|
||||||
env:
|
env:
|
||||||
@ -75,6 +50,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');}"
|
54
.github/workflows/node-workflow.yml
vendored
Normal file
54
.github/workflows/node-workflow.yml
vendored
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
name: Node workflow
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- releases/v1
|
||||||
|
paths-ignore:
|
||||||
|
- '**.md'
|
||||||
|
- 'examples/**'
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- releases/v1
|
||||||
|
paths-ignore:
|
||||||
|
- '**.md'
|
||||||
|
- 'examples/**'
|
||||||
|
jobs:
|
||||||
|
run:
|
||||||
|
name: Run
|
||||||
|
runs-on: ${{ matrix.operating-system }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Setup Node.js 16.x
|
||||||
|
uses: actions/setup-node@v1
|
||||||
|
with:
|
||||||
|
node-version: 16.x
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: npm install
|
||||||
|
|
||||||
|
- name: Prettier Format Check
|
||||||
|
run: npm run format-check
|
||||||
|
|
||||||
|
- name: ESLint Check
|
||||||
|
run: npm run lint
|
||||||
|
|
||||||
|
- name: Run tests
|
||||||
|
run: npm test
|
||||||
|
|
||||||
|
- name: Run npm audit
|
||||||
|
run: npm audit
|
||||||
|
|
||||||
|
- name: Send Coverage
|
||||||
|
uses: codecov/codecov-action@v2
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.CODECOV_TOKEN }}
|
||||||
|
files: coverage/lcov.info
|
||||||
|
name: github-actions-codecov-${{ matrix.operating-system }}
|
||||||
|
fail_ci_if_error: false
|
||||||
|
verbose: true
|
@ -1,11 +1,12 @@
|
|||||||
{
|
{
|
||||||
|
"arrowParens": "avoid",
|
||||||
|
"bracketSpacing": false,
|
||||||
|
"endOfLine": "auto",
|
||||||
|
"parser": "typescript",
|
||||||
"printWidth": 80,
|
"printWidth": 80,
|
||||||
"tabWidth": 2,
|
|
||||||
"useTabs": false,
|
|
||||||
"semi": true,
|
"semi": true,
|
||||||
"singleQuote": true,
|
"singleQuote": true,
|
||||||
|
"tabWidth": 2,
|
||||||
"trailingComma": "none",
|
"trailingComma": "none",
|
||||||
"bracketSpacing": false,
|
"useTabs": false
|
||||||
"arrowParens": "avoid",
|
}
|
||||||
"parser": "typescript"
|
|
||||||
}
|
|
317
README.md
317
README.md
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://github.com/shivammathur/setup-php" title="GitHub action to setup PHP"><img alt="GitHub Actions status" src="https://github.com/shivammathur/setup-php/workflows/Main%20workflow/badge.svg"></a>
|
<a href="https://github.com/shivammathur/setup-php" title="GitHub action to setup PHP"><img alt="GitHub Actions status" src="https://github.com/shivammathur/setup-php/workflows/Main%20workflow/badge.svg"></a>
|
||||||
<a href="https://codecov.io/gh/shivammathur/setup-php" title="Code coverage"><img alt="Codecov Code Coverage" src="https://codecov.io/gh/shivammathur/setup-php/branch/master/graph/badge.svg"></a>
|
<a href="https://codecov.io/gh/shivammathur/setup-php" title="Code coverage"><img alt="Codecov Code Coverage" src="https://img.shields.io/codecov/c/github/shivammathur/setup-php?logo=codecov"></a>
|
||||||
<a href="https://github.com/shivammathur/setup-php/blob/master/LICENSE" title="license"><img alt="LICENSE" src="https://img.shields.io/badge/license-MIT-428f7e.svg"></a>
|
<a href="https://github.com/shivammathur/setup-php/blob/master/LICENSE" title="license"><img alt="LICENSE" src="https://img.shields.io/badge/license-MIT-428f7e.svg"></a>
|
||||||
<a href="#tada-php-support" title="PHP Versions Supported"><img alt="PHP Versions Supported" src="https://img.shields.io/badge/php-%3E%3D%205.6-8892BF.svg"></a>
|
<a href="#tada-php-support" title="PHP Versions Supported"><img alt="PHP Versions Supported" src="https://img.shields.io/badge/php-%3E%3D%205.6-8892BF.svg"></a>
|
||||||
</p>
|
</p>
|
||||||
@ -18,49 +18,50 @@ Setup PHP with required extensions, php.ini configuration, code-coverage support
|
|||||||
## Contents
|
## Contents
|
||||||
|
|
||||||
- [PHP Support](#tada-php-support)
|
- [PHP Support](#tada-php-support)
|
||||||
- [OS/Platform Support](#cloud-osplatform-support)
|
- [GitHub-Hosted Runner Support](#cloud-github-hosted-runner-support)
|
||||||
- [PHP Extension Support](#heavy_plus_sign-php-extension-support)
|
- [PHP Extension Support](#heavy_plus_sign-php-extension-support)
|
||||||
- [Tools Support](#wrench-tools-support)
|
- [Tools Support](#wrench-tools-support)
|
||||||
- [Coverage support](#signal_strength-coverage-support)
|
- [Coverage Support](#signal_strength-coverage-support)
|
||||||
- [Xdebug](#xdebug)
|
- [Xdebug](#xdebug)
|
||||||
- [PCOV](#pcov)
|
- [PCOV](#pcov)
|
||||||
- [Disable coverage](#disable-coverage)
|
- [Disable coverage](#disable-coverage)
|
||||||
- [Usage](#memo-usage)
|
- [Usage](#memo-usage)
|
||||||
- [Basic Setup](#basic-setup)
|
- [Basic Setup](#basic-setup)
|
||||||
- [Matrix Setup](#matrix-setup)
|
- [Matrix Setup](#matrix-setup)
|
||||||
- [Experimental Setup](#experimental-setup)
|
|
||||||
- [Thread Safe Setup](#thread-safe-setup)
|
- [Thread Safe Setup](#thread-safe-setup)
|
||||||
- [Cache dependencies](#cache-dependencies)
|
- [Cache Dependencies](#cache-dependencies)
|
||||||
|
- [Composer GitHub OAuth](#composer-github-oauth)
|
||||||
- [Problem Matchers](#problem-matchers)
|
- [Problem Matchers](#problem-matchers)
|
||||||
- [Examples](#examples)
|
- [Examples](#examples)
|
||||||
- [License](#scroll-license)
|
- [License](#scroll-license)
|
||||||
- [Contributions](#1-contributions)
|
- [Contributions](#1-contributions)
|
||||||
- [Support this project](#sparkling_heart-support-this-project)
|
- [Support This project](#sparkling_heart-support-this-project)
|
||||||
- [This action uses the following works](#bookmark-this-action-uses-the-following-works)
|
- [Dependencies](#bookmark-dependencies)
|
||||||
- [Further Reading](#bookmark_tabs-further-reading)
|
- [Further Reading](#bookmark_tabs-further-reading)
|
||||||
|
|
||||||
## :tada: PHP Support
|
## :tada: PHP Support
|
||||||
|
|
||||||
|PHP Version|Stability|Release Support|
|
| PHP Version | Stability | Release Support |
|
||||||
|--- |--- |--- |
|
|-------------|-----------|-----------------------|
|
||||||
|5.6|`Stable`|`End of life`|
|
| 5.6 | `Stable` | `End of life` |
|
||||||
|7.0|`Stable`|`End of life`|
|
| 7.0 | `Stable` | `End of life` |
|
||||||
|7.1|`Stable`|`End of life`|
|
| 7.1 | `Stable` | `End of life` |
|
||||||
|7.2|`Stable`|`Security fixes only`|
|
| 7.2 | `Stable` | `End of life` |
|
||||||
|7.3|`Stable`|`Active`|
|
| 7.3 | `Stable` | `End of life` |
|
||||||
|7.4|`Stable`|`Active`|
|
| 7.4 | `Stable` | `Security fixes only` |
|
||||||
|8.0|`Experimental`|`In development`|
|
| 8.0 | `Stable` | `Active` |
|
||||||
|
|
||||||
**Note:** Specifying `8.0` in `php-version` input installs a nightly build of `PHP 8.0.0-dev` with `PHP JIT`, `Union Types v2` and other [new features](https://wiki.php.net/rfc#php_80 "New features implemented in PHP 8"). See [experimental setup](#experimental-setup) for more information.
|
## :cloud: GitHub-Hosted Runner Support
|
||||||
|
|
||||||
## :cloud: OS/Platform Support
|
| Virtual environment | YAML workflow label | Pre-installed PHP |
|
||||||
|
|----------------------|------------------------------------|------------------------|
|
||||||
|Virtual environment|matrix.operating-system|
|
| Ubuntu 20.04 | `ubuntu-latest` or `ubuntu-20.04` | `PHP 7.4` to `PHP 8.1` |
|
||||||
|--- |--- |
|
| Ubuntu 18.04 | `ubuntu-18.04` | `PHP 7.2` to `PHP 8.1` |
|
||||||
|Windows Server 2019|`windows-latest` or `windows-2019`|
|
| Windows Server 2022 | `windows-latest` or `windows-2022` | `PHP 8.1` |
|
||||||
|Ubuntu 18.04|`ubuntu-latest` or `ubuntu-18.04`|
|
| Windows Server 2019 | `windows-2019` | `PHP 8.1` |
|
||||||
|Ubuntu 16.04|`ubuntu-16.04`|
|
| macOS Monterey 12.x | `macos-12` | `PHP 8.1` |
|
||||||
|macOS X Catalina 10.15|`macos-latest` or `macOS-10.15`|
|
| macOS Big Sur 11.x | `macos-latest` or `macos-11` | `PHP 8.1` |
|
||||||
|
| macOS Catalina 10.15 | `macos-10.15` | `PHP 8.1` |
|
||||||
|
|
||||||
## :heavy_plus_sign: PHP Extension Support
|
## :heavy_plus_sign: PHP Extension Support
|
||||||
- On `ubuntu` by default extensions which are available as a package can be installed. If the extension is not available as a package but it is on `PECL`, it can be installed by specifying `pecl` in the tools input.
|
- On `ubuntu` by default extensions which are available as a package can be installed. If the extension is not available as a package but it is on `PECL`, it can be installed by specifying `pecl` in the tools input.
|
||||||
@ -83,28 +84,36 @@ with:
|
|||||||
tools: php-cs-fixer, phpunit
|
tools: php-cs-fixer, phpunit
|
||||||
```
|
```
|
||||||
|
|
||||||
To setup a particular version of a tool, specify it in the form `tool:version`.
|
To set up a particular version of a tool, specify it in the form `tool:version`.
|
||||||
Version should be in semver format and a valid release of the tool.
|
|
||||||
|
The latest stable version of `composer` is set up by default. You can set up the required `composer` version by specifying `v1`, `v2`, `snapshot` or `preview` as versions or the exact version in semver format.
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
uses: shivammathur/setup-php@v1
|
uses: shivammathur/setup-php@v1
|
||||||
with:
|
with:
|
||||||
php-version: '7.4'
|
php-version: '7.4'
|
||||||
tools: php-cs-fixer:2.15.5, phpunit:8.5.1
|
tools: composer:v2
|
||||||
```
|
```
|
||||||
|
|
||||||
**Note**
|
If you have specified composer plugins `prestissimo` or `composer-prefetcher` in tools, the latest stable version of `composer v1` will be setup. Unless some of your packages require `composer v1`, it is recommended to drop `prestissimo` and use `composer v2`.
|
||||||
- `composer` is setup by default.
|
|
||||||
- Specifying version for `composer` and `pecl` has no effect, latest version of both tools will be setup.
|
|
||||||
- If the version specified for the tool is not in semver format, latest version of the tool will be setup.
|
|
||||||
- Tools which cannot be installed gracefully leave an error message in the logs, the action is not interrupted.
|
|
||||||
|
|
||||||
## :signal_strength: Coverage support
|
Version for other tools should be in `semver` format and a valid release of the tool.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
uses: shivammathur/setup-php@v1
|
||||||
|
with:
|
||||||
|
php-version: '7.4'
|
||||||
|
tools: php-cs-fixer:2.16.2, phpunit:8.5.1
|
||||||
|
```
|
||||||
|
|
||||||
|
Tools which cannot be installed gracefully leave an error message in the logs, the action is not interrupted.
|
||||||
|
|
||||||
|
## :signal_strength: Coverage Support
|
||||||
|
|
||||||
### Xdebug
|
### Xdebug
|
||||||
|
|
||||||
Specify `coverage: xdebug` to use `Xdebug`.
|
Specify `coverage: xdebug` to use `Xdebug`.
|
||||||
Runs on all [PHP versions supported](#tada-php-support "List of PHP versions supported on this GitHub Action") except `8.0`.
|
Runs on all [PHP versions supported](#tada-php-support "List of PHP versions supported on this GitHub Action").
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
uses: shivammathur/setup-php@v1
|
uses: shivammathur/setup-php@v1
|
||||||
@ -129,7 +138,7 @@ with:
|
|||||||
coverage: pcov
|
coverage: pcov
|
||||||
```
|
```
|
||||||
|
|
||||||
### Disable coverage
|
### Disable Coverage
|
||||||
|
|
||||||
Specify `coverage: none` to disable both `Xdebug` and `PCOV`.
|
Specify `coverage: none` to disable both `Xdebug` and `PCOV`.
|
||||||
Consider disabling the coverage using this PHP action for these reasons.
|
Consider disabling the coverage using this PHP action for these reasons.
|
||||||
@ -203,31 +212,6 @@ jobs:
|
|||||||
tools: php-cs-fixer, phpunit #optional, setup tools globally
|
tools: php-cs-fixer, phpunit #optional, setup tools globally
|
||||||
```
|
```
|
||||||
|
|
||||||
### Experimental Setup
|
|
||||||
|
|
||||||
> Setup a nightly build of `PHP 8.0.0-dev` from the [master branch](https://github.com/php/php-src/tree/master "Master branch on PHP source repository") of PHP.
|
|
||||||
|
|
||||||
- This version is currently in development and is an experimental feature on this action.
|
|
||||||
- `PECL` is installed by default with this version on `ubuntu`.
|
|
||||||
- Some extensions might not support this version currently.
|
|
||||||
- Refer to this [RFC](https://wiki.php.net/rfc/jit "PHP JIT RFC configuration") for configuring `PHP JIT` on this version.
|
|
||||||
- Refer to this [list of RFCs](https://wiki.php.net/rfc#php_80 "List of RFCs implemented in PHP8") implemented in this version.
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v2
|
|
||||||
|
|
||||||
- name: Setup PHP
|
|
||||||
uses: shivammathur/setup-php@v1
|
|
||||||
with:
|
|
||||||
php-version: '8.0'
|
|
||||||
extensions: mbstring #optional, setup extensions
|
|
||||||
ini-values: opcache.jit_buffer_size=256M, opcache.jit=1235, pcre.jit=1 #optional, setup php.ini configuration
|
|
||||||
coverage: pcov #optional, setup PCOV, Xdebug does not support this version yet.
|
|
||||||
tools: php-cs-fixer, phpunit #optional, setup tools globally
|
|
||||||
```
|
|
||||||
|
|
||||||
### Thread Safe Setup
|
### Thread Safe Setup
|
||||||
|
|
||||||
- `NTS` versions are setup by default.
|
- `NTS` versions are setup by default.
|
||||||
@ -248,10 +232,10 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
php-version: '7.4'
|
php-version: '7.4'
|
||||||
env:
|
env:
|
||||||
PHPTS: ts # specify ts or nts
|
phpts: ts # specify ts or nts
|
||||||
```
|
```
|
||||||
|
|
||||||
### Cache dependencies
|
### Cache Dependencies
|
||||||
|
|
||||||
You can persist composer's internal cache directory using the [`action/cache`](https://github.com/actions/cache "GitHub Action to cache files") GitHub Action. Dependencies cached are loaded directly instead of downloading them while installation. The files cached are available across check-runs and will reduce the workflow execution time.
|
You can persist composer's internal cache directory using the [`action/cache`](https://github.com/actions/cache "GitHub Action to cache files") GitHub Action. Dependencies cached are loaded directly instead of downloading them while installation. The files cached are available across check-runs and will reduce the workflow execution time.
|
||||||
|
|
||||||
@ -263,7 +247,7 @@ You can persist composer's internal cache directory using the [`action/cache`](h
|
|||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
|
|
||||||
- name: Cache dependencies
|
- name: Cache dependencies
|
||||||
uses: actions/cache@v1
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
@ -273,95 +257,186 @@ You can persist composer's internal cache directory using the [`action/cache`](h
|
|||||||
run: composer install --prefer-dist
|
run: composer install --prefer-dist
|
||||||
```
|
```
|
||||||
|
|
||||||
In the above example, if you support a range of `composer` dependencies and do not commit `composer.lock`, you can use the hash of `composer.json` as the key for your cache.
|
- If you do not commit `composer.lock`, you can use the hash of `composer.json` as the key for your cache.
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
```
|
|
||||||
|
|
||||||
### Problem Matchers
|
|
||||||
|
|
||||||
#### PHPUnit
|
|
||||||
|
|
||||||
You can setup problem matchers for your `PHPUnit` output by adding this step after the `setup-php` step. This will scan the logs for failing tests and surface that information prominently in the GitHub Actions UI by creating annotations and log file decorations.
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
- name: Setup Problem Matchers for PHPUnit
|
|
||||||
run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json"
|
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Other tools
|
- If you support a range of `composer` dependencies and use `prefer-lowest` and `prefer-stable` options, you can store them in your matrix add them to the keys.
|
||||||
|
```yaml
|
||||||
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}-${{ matrix.prefer }}-
|
||||||
|
restore-keys: ${{ runner.os }}-composer-${{ matrix.prefer }}-
|
||||||
|
```
|
||||||
|
|
||||||
For tools that support `checkstyle` reporting like `phpstan`, `psalm`, `php-cs-fixer` and `phpcs` you can use `cs2pr` to annotate your code.
|
### Composer GitHub OAuth
|
||||||
For examples refer to [cs2pr documentation](https://github.com/staabm/annotate-pull-request-from-checkstyle).
|
|
||||||
|
|
||||||
> Here is an example with `phpstan`.
|
If you have a number of workflows which setup multiple tools or have many composer dependencies, you might hit the GitHub's rate limit for composer. To avoid that you can add a `OAuth` token to the composer's config by setting `COMPOSER_TOKEN` environment variable. You can use [`GITHUB_TOKEN`](https://help.github.com/en/actions/configuring-and-managing-workflows/authenticating-with-the-github_token "GITHUB_TOKEN documentation") secret for this purpose.
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- name: Setup PHP
|
- name: Setup PHP
|
||||||
uses: shivammathur/setup-php@v1
|
uses: shivammathur/setup-php@v2
|
||||||
with:
|
with:
|
||||||
php-version: '7.4'
|
php-version: '7.4'
|
||||||
tools: cs2pr, phpstan
|
env:
|
||||||
|
COMPOSER_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
```
|
||||||
|
|
||||||
- name: PHPStan
|
### Problem Matchers
|
||||||
run: phpstan analyse src --error-format=checkstyle | cs2pr
|
|
||||||
|
Problem matchers are `json` configurations which identify errors and warnings in your logs and surface that information prominently in the GitHub Actions UI by highlighting them and creating code annotations.
|
||||||
|
|
||||||
|
#### PHP
|
||||||
|
|
||||||
|
Setup problem matchers for your `PHP` output by adding this step after the `setup-php` step.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
- name: Setup problem matchers for PHP
|
||||||
|
run: echo "::add-matcher::${{ runner.tool_cache }}/php.json"
|
||||||
|
```
|
||||||
|
|
||||||
|
#### PHPUnit
|
||||||
|
|
||||||
|
Setup problem matchers for your `PHPUnit` output by adding this step after the `setup-php` step.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
- name: Setup problem matchers for PHPUnit
|
||||||
|
run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json"
|
||||||
|
```
|
||||||
|
|
||||||
|
#### PHPStan
|
||||||
|
|
||||||
|
PHPStan supports error reporting in GitHub Actions, so no problem matchers are required.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
|
with:
|
||||||
|
php-version: '7.4'
|
||||||
|
tools: phpstan
|
||||||
|
|
||||||
|
- name: Run PHPStan
|
||||||
|
run: phpstan analyse src
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Psalm
|
||||||
|
|
||||||
|
Psalm supports error reporting in GitHub Actions with an output format `github`.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
|
with:
|
||||||
|
php-version: '7.4'
|
||||||
|
tools: psalm
|
||||||
|
|
||||||
|
- name: Run Psalm
|
||||||
|
run: psalm --output-format=github
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Tools with checkstyle support
|
||||||
|
|
||||||
|
For tools that support `checkstyle` reporting like `phpstan`, `psalm`, `php-cs-fixer` and `phpcs` you can use `cs2pr` to annotate your code.
|
||||||
|
For examples refer to [cs2pr documentation](https://github.com/staabm/annotate-pull-request-from-checkstyle).
|
||||||
|
|
||||||
|
> Here is an example with `phpcs`.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
|
with:
|
||||||
|
php-version: '7.4'
|
||||||
|
tools: cs2pr, phpcs
|
||||||
|
|
||||||
|
- name: Run phpcs
|
||||||
|
run: phpcs -q --report=checkstyle src | cs2pr
|
||||||
```
|
```
|
||||||
|
|
||||||
### Examples
|
### Examples
|
||||||
|
|
||||||
Examples for setting up this GitHub Action with different PHP Frameworks/Packages.
|
Examples for setting up this GitHub Action with different PHP Frameworks/Packages.
|
||||||
|
|
||||||
|Framework/Package|Runs on|Workflow|
|
| Framework/Package | Runs on | Workflow |
|
||||||
|--- |--- |--- |
|
|---------------------------------------|---------------------------------|---------------------------------------------------------------------------------------------------------------|
|
||||||
|CakePHP with `MySQL` and `Redis`|`ubuntu`|[cakephp-mysql.yml](./examples/cakephp-mysql.yml "GitHub Action for CakePHP with MySQL and Redis")|
|
| CakePHP with `MySQL` and `Redis` | `ubuntu` | [cakephp-mysql.yml](./examples/cakephp-mysql.yml "GitHub Action for CakePHP with MySQL and Redis") |
|
||||||
|CakePHP with `PostgreSQL` and `Redis`|`ubuntu`|[cakephp-postgres.yml](./examples/cakephp-postgres.yml "GitHub Action for CakePHP with Postgres and Redis")|
|
| CakePHP with `PostgreSQL` and `Redis` | `ubuntu` | [cakephp-postgres.yml](./examples/cakephp-postgres.yml "GitHub Action for CakePHP with Postgres and Redis") |
|
||||||
|CakePHP without services|`macOS`, `ubuntu` and `windows`|[cakephp.yml](./examples/cakephp.yml "GitHub Action for CakePHP without services")|
|
| CakePHP without services | `macOS`, `ubuntu` and `windows` | [cakephp.yml](./examples/cakephp.yml "GitHub Action for CakePHP without services") |
|
||||||
|CodeIgniter|`macOS`, `ubuntu` and `windows`|[codeigniter.yml](./examples/codeigniter.yml "GitHub Action for CodeIgniter")|
|
| CodeIgniter | `macOS`, `ubuntu` and `windows` | [codeigniter.yml](./examples/codeigniter.yml "GitHub Action for CodeIgniter") |
|
||||||
|Laravel with `MySQL` and `Redis`|`ubuntu`|[laravel-mysql.yml](./examples/laravel-mysql.yml "GitHub Action for Laravel with MySQL and Redis")|
|
| Laravel with `MySQL` and `Redis` | `ubuntu` | [laravel-mysql.yml](./examples/laravel-mysql.yml "GitHub Action for Laravel with MySQL and Redis") |
|
||||||
|Laravel with `PostgreSQL` and `Redis`|`ubuntu`|[laravel-postgres.yml](./examples/laravel-postgres.yml "GitHub Action for Laravel with PostgreSQL and Redis")|
|
| Laravel with `PostgreSQL` and `Redis` | `ubuntu` | [laravel-postgres.yml](./examples/laravel-postgres.yml "GitHub Action for Laravel with PostgreSQL and Redis") |
|
||||||
|Laravel without services|`macOS`, `ubuntu` and `windows`|[laravel.yml](./examples/laravel.yml "GitHub Action for Laravel without services")|
|
| Laravel without services | `macOS`, `ubuntu` and `windows` | [laravel.yml](./examples/laravel.yml "GitHub Action for Laravel without services") |
|
||||||
|Lumen with `MySQL` and `Redis`|`ubuntu`|[lumen-mysql.yml](./examples/lumen-mysql.yml "GitHub Action for Lumen with MySQL and Redis")|
|
| Lumen with `MySQL` and `Redis` | `ubuntu` | [lumen-mysql.yml](./examples/lumen-mysql.yml "GitHub Action for Lumen with MySQL and Redis") |
|
||||||
|Lumen with `PostgreSQL` and `Redis`|`ubuntu`|[lumen-postgres.yml](./examples/lumen-postgres.yml "GitHub Action for Lumen with PostgreSQL and Redis")|
|
| Lumen with `PostgreSQL` and `Redis` | `ubuntu` | [lumen-postgres.yml](./examples/lumen-postgres.yml "GitHub Action for Lumen with PostgreSQL and Redis") |
|
||||||
|Lumen without services|`macOS`, `ubuntu` and `windows`|[lumen.yml](./examples/lumen.yml "GitHub Action for Lumen without services")|
|
| Lumen without services | `macOS`, `ubuntu` and `windows` | [lumen.yml](./examples/lumen.yml "GitHub Action for Lumen without services") |
|
||||||
|Phalcon with `MySQL`|`ubuntu`|[phalcon-mysql.yml](./examples/phalcon-mysql.yml "GitHub Action for Phalcon with MySQL")|
|
| Phalcon with `MySQL` | `ubuntu` | [phalcon-mysql.yml](./examples/phalcon-mysql.yml "GitHub Action for Phalcon with MySQL") |
|
||||||
|Phalcon with `PostgreSQL`|`ubuntu`|[phalcon-postgres.yml](./examples/phalcon-postgres.yml "GitHub Action for Phalcon with PostgreSQL")|
|
| Phalcon with `PostgreSQL` | `ubuntu` | [phalcon-postgres.yml](./examples/phalcon-postgres.yml "GitHub Action for Phalcon with PostgreSQL") |
|
||||||
|Roots/bedrock|`ubuntu`|[bedrock.yml](./examples/bedrock.yml "GitHub Action for Wordpress Development using @roots/bedrock")|
|
| Roots/bedrock | `ubuntu` | [bedrock.yml](./examples/bedrock.yml "GitHub Action for Wordpress Development using @roots/bedrock") |
|
||||||
|Roots/sage|`ubuntu`|[sage.yml](./examples/sage.yml "GitHub Action for Wordpress Development using @roots/sage")|
|
| Roots/sage | `ubuntu` | [sage.yml](./examples/sage.yml "GitHub Action for Wordpress Development using @roots/sage") |
|
||||||
|Slim Framework|`macOS`, `ubuntu` and `windows`|[slim-framework.yml](./examples/slim-framework.yml "GitHub Action for Slim Framework")|
|
| Slim Framework | `macOS`, `ubuntu` and `windows` | [slim-framework.yml](./examples/slim-framework.yml "GitHub Action for Slim Framework") |
|
||||||
|Symfony with `MySQL`|`ubuntu`|[symfony-mysql.yml](./examples/symfony-mysql.yml "GitHub Action for Symfony with MySQL")|
|
| Symfony with `MySQL` | `ubuntu` | [symfony-mysql.yml](./examples/symfony-mysql.yml "GitHub Action for Symfony with MySQL") |
|
||||||
|Symfony with `PostgreSQL`|`ubuntu`|[symfony-postgres.yml](./examples/symfony-postgres.yml "GitHub Action for Symfony with PostgreSQL")|
|
| Symfony with `PostgreSQL` | `ubuntu` | [symfony-postgres.yml](./examples/symfony-postgres.yml "GitHub Action for Symfony with PostgreSQL") |
|
||||||
|Symfony without services|`macOS`, `ubuntu` and `windows`|[symfony.yml](./examples/symfony.yml "GitHub Action for Symfony without services")|
|
| Symfony without services | `macOS`, `ubuntu` and `windows` | [symfony.yml](./examples/symfony.yml "GitHub Action for Symfony without services") |
|
||||||
|Yii2 Starter Kit with `MySQL`|`ubuntu`|[yii2-mysql.yml](./examples/yii2-mysql.yml "GitHub Action for Yii2 Starter Kit with MySQL")|
|
| Yii2 Starter Kit with `MySQL` | `ubuntu` | [yii2-mysql.yml](./examples/yii2-mysql.yml "GitHub Action for Yii2 Starter Kit with MySQL") |
|
||||||
|Yii2 Starter Kit with `PostgreSQL`|`ubuntu`|[yii2-postgres.yml](./examples/yii2-postgres.yml "GitHub Action for Yii2 Starter Kit with PostgreSQL")|
|
| Yii2 Starter Kit with `PostgreSQL` | `ubuntu` | [yii2-postgres.yml](./examples/yii2-postgres.yml "GitHub Action for Yii2 Starter Kit with PostgreSQL") |
|
||||||
|Zend Framework|`macOS`, `ubuntu` and `windows`|[zend-framework.yml](./examples/zend-framework.yml "GitHub Action for Zend Framework")|
|
| Zend Framework | `macOS`, `ubuntu` and `windows` | [zend-framework.yml](./examples/zend-framework.yml "GitHub Action for Zend Framework") |
|
||||||
|
|
||||||
## :scroll: License
|
## :scroll: License
|
||||||
|
|
||||||
The scripts and documentation in this project are released under the [MIT License](LICENSE "License for shivammathur/setup-php"). This project has multiple [dependencies](https://github.com/shivammathur/setup-php/network/dependencies "Dependencies for this PHP Action") and uses [various works](#bookmark-this-action-uses-the-following-works "Tools used by this action"). Their licenses can be found in their respective repositories.
|
- The scripts and documentation in this project are released under the [MIT License](LICENSE "License for shivammathur/setup-php").
|
||||||
|
- This project has multiple [dependencies](#bookmark-dependencies "Dependencies for this PHP Action"). Their licenses can be found in their respective repositories.
|
||||||
|
- The logo for `setup-php` is a derivative work of [php.net logo](https://www.php.net/download-logos.php) and is licensed under the [CC BY-SA 4.0 License](https://creativecommons.org/licenses/by-sa/4.0/ "Creative Commons License").
|
||||||
|
|
||||||
## :+1: Contributions
|
## :+1: Contributions
|
||||||
|
|
||||||
Contributions are welcome! See [Contributor's Guide](.github/CONTRIBUTING.md "shivammathur/setup-php contribution guide"). If you face any issues while using this or want to suggest a feature/improvement, create an issue [here](https://github.com/shivammathur/setup-php/issues "Issues reported").
|
Contributions are welcome! See [Contributor's Guide](.github/CONTRIBUTING.md "shivammathur/setup-php contribution guide"). If you face any issues while using this or want to suggest a feature/improvement, create an issue [here](https://github.com/shivammathur/setup-php/issues "Issues reported").
|
||||||
|
|
||||||
## :sparkling_heart: Support this project
|
|
||||||
|
|
||||||
If this action helped you.
|
## :sparkling_heart: Support This Project
|
||||||
|
|
||||||
- Please star the project and share it with the community.
|
- Please star the project and share it. If you blog, please share your experience of using `setup-php`.
|
||||||
- If you blog, write about your experience while using this action.
|
- Please [reach out](mailto:contact@setup-php.com) if you have any questions about sponsoring setup-php.
|
||||||
- I maintain this in my free time, please support me with a [Patreon](https://www.patreon.com/shivammathur "Shivam Mathur Patreon") subscription or a one time contribution using [Paypal](https://www.paypal.me/shivammathur "Shivam Mathur PayPal").
|
|
||||||
- If you need any help using this, please contact me using [Codementor](https://www.codementor.io/shivammathur "Shivam Mathur Codementor")
|
|
||||||
|
|
||||||
## :bookmark: This action uses the following works
|
Many users and organisations support setup-php via [GitHub Sponsors](https://github.com/sponsors/shivammathur).
|
||||||
|
|
||||||
- [ppa:ondrej/php](https://launchpad.net/~ondrej/+archive/ubuntu/php "Pre-compiled ubuntu packages")
|
<a href="https://github.com/sponsors/shivammathur"><img src="https://setup-php.com/sponsors.svg?" alt="Sponsor shivammathur"></a>
|
||||||
- [shivammathur/php-builder](https://github.com/shivammathur/php-builder "Pre-compiled nightly PHP builds")
|
|
||||||
|
These companies generously provide setup-php their products and services to aid in the development of this project.
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<a href="https://www.jetbrains.com/?from=setup-php">
|
||||||
|
<img src="https://setup-php.com/sponsors/jetbrains.svg" alt="JetBrains" width="106" height="60">
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="https://www.macstadium.com/opensource/members#gh-light-mode-only">
|
||||||
|
<img src="https://setup-php.com/sponsors/macstadium.png" alt="Mac Stadium" width="148" height="60">
|
||||||
|
</a>
|
||||||
|
<a href="https://www.macstadium.com/opensource/members#gh-dark-mode-only">
|
||||||
|
<img src="https://setup-php.com/sponsors/macstadium-white.png" alt="Mac Stadium" width="148" height="60">
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="https://tidelift.com/subscription/pkg/npm-setup-php">
|
||||||
|
<img src="https://setup-php.com/sponsors/tidelift.png" alt="Tidelift" width="70" height="60">
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="https://www.scaleway.com/en/about-us/open-source-program#gh-light-mode-only">
|
||||||
|
<img src="https://setup-php.com/sponsors/scaleway.png" alt="Scaleway" width="174" height="60">
|
||||||
|
</a>
|
||||||
|
<a href="https://www.scaleway.com/en/about-us/open-source-program#gh-dark-mode-only">
|
||||||
|
<img src="https://setup-php.com/sponsors/scaleway-white.png" alt="Scaleway" width="174" height="60">
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
## :bookmark: Dependencies
|
||||||
|
|
||||||
|
- [Node.js dependencies](https://github.com/shivammathur/setup-php/network/dependencies "Node.js dependencies")
|
||||||
|
- [aaronparker/VcRedist](https://github.com/aaronparker/VcRedist "VcRedist PowerShell package")
|
||||||
- [mlocati/powershell-phpmanager](https://github.com/mlocati/powershell-phpmanager "Package to handle PHP on windows")
|
- [mlocati/powershell-phpmanager](https://github.com/mlocati/powershell-phpmanager "Package to handle PHP on windows")
|
||||||
|
- [ppa:ondrej/php](https://launchpad.net/~ondrej/+archive/ubuntu/php "Packaging active PHP packages")
|
||||||
- [shivammathur/homebrew-php](https://github.com/shivammathur/homebrew-php "Tap for PHP builds for MacOS")
|
- [shivammathur/homebrew-php](https://github.com/shivammathur/homebrew-php "Tap for PHP builds for MacOS")
|
||||||
|
- [shivammathur/homebrew-extensions](https://github.com/shivammathur/homebrew-extensions "Tap for PHP extensions for MacOS")
|
||||||
|
- [shivammathur/php-builder](https://github.com/shivammathur/php-builder "Nightly PHP package")
|
||||||
|
|
||||||
## :bookmark_tabs: Further Reading
|
## :bookmark_tabs: Further Reading
|
||||||
|
|
||||||
- [About GitHub Actions](https://github.com/features/actions "GitHub Actions")
|
- [About GitHub Actions](https://github.com/features/actions "GitHub Actions")
|
||||||
- [GitHub Actions Syntax](https://help.github.com/en/articles/workflow-syntax-for-github-actions "GitHub Actions Syntax")
|
- [GitHub Actions Syntax](https://help.github.com/en/articles/workflow-syntax-for-github-actions "GitHub Actions Syntax")
|
||||||
- [Other Awesome Actions](https://github.com/sdras/awesome-actions "List of Awesome GitHub Actions")
|
- [Other Awesome Actions](https://github.com/sdras/awesome-actions "List of Awesome GitHub Actions")
|
@ -12,9 +12,9 @@ describe('Config tests', () => {
|
|||||||
|
|
||||||
win32 = await config.addINIValues(
|
win32 = await config.addINIValues(
|
||||||
'post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata',
|
'post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata',
|
||||||
'fedora'
|
'openbsd'
|
||||||
);
|
);
|
||||||
expect(win32).toContain('Platform fedora is not supported');
|
expect(win32).toContain('Platform openbsd is not supported');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('checking addINIValuesOnLinux', async () => {
|
it('checking addINIValuesOnLinux', async () => {
|
||||||
@ -29,9 +29,9 @@ describe('Config tests', () => {
|
|||||||
|
|
||||||
linux = await config.addINIValues(
|
linux = await config.addINIValues(
|
||||||
'post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata',
|
'post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata',
|
||||||
'fedora'
|
'openbsd'
|
||||||
);
|
);
|
||||||
expect(linux).toContain('Platform fedora is not supported');
|
expect(linux).toContain('Platform openbsd is not supported');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('checking addINIValuesOnDarwin', async () => {
|
it('checking addINIValuesOnDarwin', async () => {
|
||||||
@ -45,8 +45,8 @@ describe('Config tests', () => {
|
|||||||
|
|
||||||
darwin = await config.addINIValues(
|
darwin = await config.addINIValues(
|
||||||
'post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata',
|
'post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata',
|
||||||
'fedora'
|
'openbsd'
|
||||||
);
|
);
|
||||||
expect(darwin).toContain('Platform fedora is not supported');
|
expect(darwin).toContain('Platform openbsd is not supported');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -1,15 +1,9 @@
|
|||||||
import * as coverage from '../src/coverage';
|
import * as coverage from '../src/coverage';
|
||||||
|
|
||||||
jest.mock('../src/extensions', () => ({
|
|
||||||
addExtension: jest.fn().mockImplementation(extension => {
|
|
||||||
return 'add_extension ' + extension + '\n';
|
|
||||||
})
|
|
||||||
}));
|
|
||||||
|
|
||||||
describe('Config tests', () => {
|
describe('Config tests', () => {
|
||||||
it('checking addCoverage with PCOV on windows', async () => {
|
it('checking addCoverage with PCOV on windows', async () => {
|
||||||
let win32: string = await coverage.addCoverage('PCOV', '7.4', 'win32');
|
let win32: string = await coverage.addCoverage('PCOV', '7.4', 'win32');
|
||||||
expect(win32).toContain('add_extension pcov');
|
expect(win32).toContain('Add-Extension pcov');
|
||||||
expect(win32).toContain('Remove-Extension xdebug');
|
expect(win32).toContain('Remove-Extension xdebug');
|
||||||
|
|
||||||
win32 = await coverage.addCoverage('pcov', '7.0', 'win32');
|
win32 = await coverage.addCoverage('pcov', '7.0', 'win32');
|
||||||
@ -27,28 +21,38 @@ describe('Config tests', () => {
|
|||||||
|
|
||||||
it('checking addCoverage with PCOV on darwin', async () => {
|
it('checking addCoverage with PCOV on darwin', async () => {
|
||||||
const darwin: string = await coverage.addCoverage('pcov', '7.4', 'darwin');
|
const darwin: string = await coverage.addCoverage('pcov', '7.4', 'darwin');
|
||||||
expect(darwin).toContain('add_extension pcov');
|
expect(darwin).toContain('add_brew_extension pcov');
|
||||||
expect(darwin).toContain('remove_extension xdebug');
|
expect(darwin).toContain('remove_extension xdebug');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('checking addCoverage with Xdebug on windows', async () => {
|
it('checking addCoverage with Xdebug on windows', async () => {
|
||||||
const win32: string = await coverage.addCoverage('xdebug', '7.4', 'win32');
|
const win32: string = await coverage.addCoverage('xdebug', '7.4', 'win32');
|
||||||
expect(win32).toContain('add_extension xdebug');
|
expect(win32).toContain('Add-Extension xdebug');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('checking addCoverage with Xdebug on windows', async () => {
|
it('checking addCoverage with Xdebug3 on windows', async () => {
|
||||||
const win32: string = await coverage.addCoverage('xdebug', '8.0', 'win32');
|
const win32: string = await coverage.addCoverage('xdebug3', '7.4', 'win32');
|
||||||
expect(win32).toContain('Xdebug currently only supports PHP 7.4 or lower');
|
expect(win32).toContain('Add-Extension xdebug');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('checking addCoverage with Xdebug on linux', async () => {
|
it('checking addCoverage with Xdebug2 on windows', async () => {
|
||||||
const linux: string = await coverage.addCoverage('xdebug', '7.4', 'linux');
|
const win32: string = await coverage.addCoverage('xdebug2', '7.4', 'win32');
|
||||||
expect(linux).toContain('add_extension xdebug');
|
expect(win32).toContain('Add-Extension xdebug stable 2.9.8');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('checking addCoverage with Xdebug on linux', async () => {
|
it('checking addCoverage with Xdebug on linux', async () => {
|
||||||
const linux: string = await coverage.addCoverage('xdebug', '8.0', 'linux');
|
const linux: string = await coverage.addCoverage('xdebug', '8.0', 'linux');
|
||||||
expect(linux).toContain('Xdebug currently only supports PHP 7.4 or lower');
|
expect(linux).toContain('add_extension xdebug');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking addCoverage with Xdebug3 on linux', async () => {
|
||||||
|
const linux: string = await coverage.addCoverage('xdebug3', '8.0', 'linux');
|
||||||
|
expect(linux).toContain('add_extension xdebug');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking addCoverage with Xdebug2 on linux', async () => {
|
||||||
|
const linux: string = await coverage.addCoverage('xdebug2', '7.4', 'linux');
|
||||||
|
expect(linux).toContain('add_pecl_extension xdebug 2.9.8 zend_extension');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('checking addCoverage with Xdebug on darwin', async () => {
|
it('checking addCoverage with Xdebug on darwin', async () => {
|
||||||
@ -57,16 +61,25 @@ describe('Config tests', () => {
|
|||||||
'7.4',
|
'7.4',
|
||||||
'darwin'
|
'darwin'
|
||||||
);
|
);
|
||||||
expect(darwin).toContain('add_extension xdebug');
|
expect(darwin).toContain('add_brew_extension xdebug');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('checking addCoverage with Xdebug on darwin', async () => {
|
it('checking addCoverage with Xdebug3 on darwin', async () => {
|
||||||
const darwin: string = await coverage.addCoverage(
|
const darwin: string = await coverage.addCoverage(
|
||||||
'xdebug',
|
'xdebug3',
|
||||||
'8.0',
|
'7.4',
|
||||||
'darwin'
|
'darwin'
|
||||||
);
|
);
|
||||||
expect(darwin).toContain('Xdebug currently only supports PHP 7.4 or lower');
|
expect(darwin).toContain('add_brew_extension xdebug');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking addCoverage with Xdebug2 on darwin', async () => {
|
||||||
|
const darwin: string = await coverage.addCoverage(
|
||||||
|
'xdebug2',
|
||||||
|
'7.4',
|
||||||
|
'darwin'
|
||||||
|
);
|
||||||
|
expect(darwin).toContain('add_brew_extension xdebug2');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('checking disableCoverage windows', async () => {
|
it('checking disableCoverage windows', async () => {
|
||||||
|
@ -3,15 +3,32 @@ import * as extensions from '../src/extensions';
|
|||||||
describe('Extension tests', () => {
|
describe('Extension tests', () => {
|
||||||
it('checking addExtensionOnWindows', async () => {
|
it('checking addExtensionOnWindows', async () => {
|
||||||
let win32: string = await extensions.addExtension(
|
let win32: string = await extensions.addExtension(
|
||||||
'xdebug, pcov, phalcon4, ast-beta',
|
'Xdebug, pcov, sqlite, phalcon4, ast-beta',
|
||||||
'7.4',
|
'7.4',
|
||||||
'win32'
|
'win32'
|
||||||
);
|
);
|
||||||
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('phalcon.ps1 phalcon4');
|
expect(win32).toContain('phalcon.ps1 phalcon4');
|
||||||
expect(win32).toContain('Add-Extension ast beta');
|
expect(win32).toContain('Add-Extension ast beta');
|
||||||
|
|
||||||
|
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');
|
||||||
|
expect(win32).toContain('Add-Extension mysqli');
|
||||||
|
expect(win32).toContain('Add-Extension mysqlnd');
|
||||||
|
|
||||||
|
win32 = await extensions.addExtension('mysql', '8.0', 'win32');
|
||||||
|
expect(win32).toContain('Add-Extension mysqli');
|
||||||
|
expect(win32).toContain('Add-Extension mysqlnd');
|
||||||
|
|
||||||
|
win32 = await extensions.addExtension('mysql', '5.6', 'win32');
|
||||||
|
expect(win32).toContain('Add-Extension mysql');
|
||||||
|
expect(win32).toContain('Add-Extension mysqli');
|
||||||
|
expect(win32).toContain('Add-Extension mysqlnd');
|
||||||
|
|
||||||
win32 = await extensions.addExtension(
|
win32 = await extensions.addExtension(
|
||||||
'phalcon3, does_not_exist',
|
'phalcon3, does_not_exist',
|
||||||
'7.2',
|
'7.2',
|
||||||
@ -21,19 +38,19 @@ describe('Extension tests', () => {
|
|||||||
expect(win32).toContain('phalcon.ps1 phalcon3');
|
expect(win32).toContain('phalcon.ps1 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');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('checking addExtensionOnLinux', async () => {
|
it('checking addExtensionOnLinux', async () => {
|
||||||
let linux: string = await extensions.addExtension(
|
let linux: string = await extensions.addExtension(
|
||||||
'xdebug, pcov, ast-beta, xdebug-alpha',
|
'Xdebug, pcov, sqlite, ast-beta, xdebug-alpha',
|
||||||
'7.4',
|
'7.4',
|
||||||
'linux'
|
'linux'
|
||||||
);
|
);
|
||||||
expect(linux).toContain('update_extension xdebug 2.9.0');
|
expect(linux).toContain('sudo $debconf_fix apt-get install -y php7.4-pcov');
|
||||||
expect(linux).toContain(
|
expect(linux).toContain(
|
||||||
'sudo DEBIAN_FRONTEND=noninteractive apt-get install -y php7.4-pcov'
|
'sudo $debconf_fix apt-get install -y php7.4-sqlite3'
|
||||||
);
|
);
|
||||||
expect(linux).toContain('add_unstable_extension ast beta extension');
|
expect(linux).toContain('add_unstable_extension ast beta extension');
|
||||||
expect(linux).toContain(
|
expect(linux).toContain(
|
||||||
@ -41,21 +58,13 @@ describe('Extension tests', () => {
|
|||||||
);
|
);
|
||||||
|
|
||||||
linux = await extensions.addExtension('gearman', '7.0', 'linux');
|
linux = await extensions.addExtension('gearman', '7.0', 'linux');
|
||||||
expect(linux).toContain('gearman.sh 7.0');
|
expect(linux).toContain('gearman.sh');
|
||||||
linux = await extensions.addExtension('gearman', '7.1', 'linux');
|
|
||||||
expect(linux).toContain('gearman.sh 7.1');
|
|
||||||
|
|
||||||
linux = await extensions.addExtension('gearman', '7.2', 'linux');
|
linux = await extensions.addExtension('xdebug2', '7.2', 'linux');
|
||||||
expect(linux).toContain('gearman.sh 7.2');
|
expect(linux).toContain('add_pecl_extension xdebug 2.9.8 zend_extension');
|
||||||
|
|
||||||
linux = await extensions.addExtension('gearman', '7.3', 'linux');
|
linux = await extensions.addExtension('xdebug', '7.2', 'openbsd');
|
||||||
expect(linux).toContain('gearman.sh 7.3');
|
expect(linux).toContain('Platform openbsd is not supported');
|
||||||
|
|
||||||
linux = await extensions.addExtension('gearman', '7.4', 'linux');
|
|
||||||
expect(linux).toContain('gearman.sh 7.4');
|
|
||||||
|
|
||||||
linux = await extensions.addExtension('xdebug', '7.2', 'fedora');
|
|
||||||
expect(linux).toContain('Platform fedora 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('phalcon.sh phalcon3 7.3');
|
||||||
@ -64,48 +73,41 @@ describe('Extension tests', () => {
|
|||||||
|
|
||||||
it('checking addExtensionOnDarwin', async () => {
|
it('checking addExtensionOnDarwin', async () => {
|
||||||
let darwin: string = await extensions.addExtension(
|
let darwin: string = await extensions.addExtension(
|
||||||
'xdebug, pcov, ast-beta',
|
'Xdebug, pcov, expect, grpc, igbinary, imagick, phalcon3, phalcon4, protobuf, psr, rdkafka, ssh2, swoole, vips, sqlite, ast-beta',
|
||||||
'7.2',
|
'7.2',
|
||||||
'darwin'
|
'darwin'
|
||||||
);
|
);
|
||||||
expect(darwin).toContain('sudo pecl install -f xdebug');
|
expect(darwin).toContain('add_brew_extension xdebug');
|
||||||
expect(darwin).toContain('sudo pecl install -f pcov');
|
expect(darwin).toContain('add_brew_extension pcov');
|
||||||
|
expect(darwin).toContain('add_brew_extension expect');
|
||||||
|
expect(darwin).toContain('add_brew_extension grpc');
|
||||||
|
expect(darwin).toContain('add_brew_extension igbinary');
|
||||||
|
expect(darwin).toContain('add_brew_extension imagick');
|
||||||
|
expect(darwin).toContain('add_brew_extension phalcon3');
|
||||||
|
expect(darwin).toContain('add_brew_extension phalcon4');
|
||||||
|
expect(darwin).toContain('add_brew_extension protobuf');
|
||||||
|
expect(darwin).toContain('add_brew_extension psr');
|
||||||
|
expect(darwin).toContain('add_brew_extension rdkafka');
|
||||||
|
expect(darwin).toContain('add_brew_extension ssh2');
|
||||||
|
expect(darwin).toContain('add_brew_extension swoole');
|
||||||
|
expect(darwin).toContain('add_brew_extension vips');
|
||||||
|
expect(darwin).toContain('pecl_install sqlite3');
|
||||||
expect(darwin).toContain('add_unstable_extension ast beta extension');
|
expect(darwin).toContain('add_unstable_extension ast beta extension');
|
||||||
|
|
||||||
darwin = await extensions.addExtension('phalcon3', '7.0', 'darwin');
|
|
||||||
expect(darwin).toContain('phalcon_darwin.sh phalcon3 7.0');
|
|
||||||
|
|
||||||
darwin = await extensions.addExtension('phalcon4', '7.3', 'darwin');
|
|
||||||
expect(darwin).toContain('phalcon_darwin.sh phalcon4 7.3');
|
|
||||||
|
|
||||||
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('pecl_install pcov');
|
||||||
|
|
||||||
darwin = await extensions.addExtension('pcov', '7.2', 'darwin');
|
darwin = await extensions.addExtension('pcov', '7.2', 'darwin');
|
||||||
expect(darwin).toContain('sudo pecl install -f pcov');
|
expect(darwin).toContain('add_brew_extension pcov');
|
||||||
|
|
||||||
darwin = await extensions.addExtension('xdebug', '5.6', 'darwin');
|
darwin = await extensions.addExtension('xdebug', '5.6', 'darwin');
|
||||||
expect(darwin).toContain('sudo pecl install -f xdebug-2.5.5');
|
expect(darwin).toContain('add_brew_extension xdebug');
|
||||||
|
|
||||||
darwin = await extensions.addExtension('xdebug', '7.0', 'darwin');
|
darwin = await extensions.addExtension('xdebug', '7.0', 'darwin');
|
||||||
expect(darwin).toContain('sudo pecl install -f xdebug-2.9.0');
|
expect(darwin).toContain('add_brew_extension xdebug');
|
||||||
|
|
||||||
darwin = await extensions.addExtension('xdebug', '7.2', 'darwin');
|
darwin = await extensions.addExtension('xdebug2', '7.2', 'darwin');
|
||||||
expect(darwin).toContain('sudo pecl install -f xdebug');
|
expect(darwin).toContain('add_brew_extension xdebug2');
|
||||||
|
|
||||||
darwin = await extensions.addExtension('redis', '5.6', 'darwin');
|
|
||||||
expect(darwin).toContain('sudo pecl install -f redis-2.2.8');
|
|
||||||
|
|
||||||
darwin = await extensions.addExtension('redis', '7.2', 'darwin');
|
|
||||||
expect(darwin).toContain('sudo pecl install -f redis');
|
|
||||||
|
|
||||||
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(
|
darwin = await extensions.addExtension(
|
||||||
'does_not_exist',
|
'does_not_exist',
|
||||||
@ -115,7 +117,7 @@ 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');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -4,61 +4,61 @@ import * as install from '../src/install';
|
|||||||
* Mock install.ts
|
* Mock install.ts
|
||||||
*/
|
*/
|
||||||
jest.mock('../src/install', () => ({
|
jest.mock('../src/install', () => ({
|
||||||
build: jest.fn().mockImplementation(
|
build: jest
|
||||||
async (
|
.fn()
|
||||||
filename: string,
|
.mockImplementation(
|
||||||
version: string,
|
async (
|
||||||
os_version: string
|
filename: string,
|
||||||
): Promise<string> => {
|
version: string,
|
||||||
const extension_csv: string = process.env['extensions'] || '';
|
os_version: string
|
||||||
const ini_values_csv: string = process.env['ini-values'] || '';
|
): Promise<string> => {
|
||||||
const coverage_driver: string = process.env['coverage'] || '';
|
const extension_csv: string = process.env['extensions'] || '';
|
||||||
let tools_csv: string = process.env['tools'] || '';
|
const ini_values_csv: string = process.env['ini-values'] || '';
|
||||||
const pecl: string = process.env['pecl'] || '';
|
const coverage_driver: string = process.env['coverage'] || '';
|
||||||
if (pecl == 'true') {
|
let tools_csv: string = process.env['tools'] || '';
|
||||||
tools_csv = 'pecl, ' + tools_csv;
|
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) {
|
if (tools_csv) {
|
||||||
script += 'add_tool';
|
script += 'add_tool';
|
||||||
}
|
}
|
||||||
if (extension_csv) {
|
if (extension_csv) {
|
||||||
script += 'install extensions';
|
script += 'install extensions';
|
||||||
}
|
}
|
||||||
if (ini_values_csv) {
|
if (coverage_driver) {
|
||||||
script += 'edit php.ini';
|
script += 'set coverage driver';
|
||||||
}
|
}
|
||||||
if (coverage_driver) {
|
if (ini_values_csv) {
|
||||||
script += 'set coverage driver';
|
script += 'edit php.ini';
|
||||||
}
|
}
|
||||||
|
|
||||||
return script;
|
return script;
|
||||||
|
}
|
||||||
|
),
|
||||||
|
run: jest.fn().mockImplementation(async (): Promise<string> => {
|
||||||
|
const os_version: string = process.env['RUNNER_OS'] || '';
|
||||||
|
let version: string = process.env['php-version'] || '';
|
||||||
|
version = version.length > 1 ? version.slice(0, 3) : version + '.0';
|
||||||
|
let script = '';
|
||||||
|
switch (os_version) {
|
||||||
|
case 'darwin':
|
||||||
|
case 'linux':
|
||||||
|
script = await install.build(os_version + '.sh', version, os_version);
|
||||||
|
script += 'bash script.sh ' + version + ' ' + __dirname;
|
||||||
|
break;
|
||||||
|
case 'win32':
|
||||||
|
script = await install.build(os_version + '.sh', version, os_version);
|
||||||
|
script += 'pwsh script.ps1 ' + version + ' ' + __dirname;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
script += os_version + ' is not supported';
|
||||||
}
|
}
|
||||||
),
|
|
||||||
run: jest.fn().mockImplementation(
|
|
||||||
async (): Promise<string> => {
|
|
||||||
const os_version: string = process.env['RUNNER_OS'] || '';
|
|
||||||
let version: string = process.env['php-version'] || '';
|
|
||||||
version = version.length > 1 ? version.slice(0, 3) : version + '.0';
|
|
||||||
let script = '';
|
|
||||||
switch (os_version) {
|
|
||||||
case 'darwin':
|
|
||||||
case 'linux':
|
|
||||||
script = await install.build(os_version + '.sh', version, os_version);
|
|
||||||
script += 'sh script.sh ' + version + ' ' + __dirname;
|
|
||||||
break;
|
|
||||||
case 'win32':
|
|
||||||
script = await install.build(os_version + '.sh', version, os_version);
|
|
||||||
script += 'pwsh script.ps1 ' + version + ' ' + __dirname;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
script += os_version + ' is not supported';
|
|
||||||
}
|
|
||||||
|
|
||||||
return script;
|
return script;
|
||||||
}
|
})
|
||||||
)
|
|
||||||
}));
|
}));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -69,6 +69,8 @@ jest.mock('../src/install', () => ({
|
|||||||
* @param extension_csv
|
* @param extension_csv
|
||||||
* @param ini_values_csv
|
* @param ini_values_csv
|
||||||
* @param coverage_driver
|
* @param coverage_driver
|
||||||
|
* @param tools
|
||||||
|
* @param pecl
|
||||||
*/
|
*/
|
||||||
function setEnv(
|
function setEnv(
|
||||||
version: string | number,
|
version: string | number,
|
||||||
@ -91,20 +93,20 @@ function setEnv(
|
|||||||
describe('Install', () => {
|
describe('Install', () => {
|
||||||
it('Test install on windows', async () => {
|
it('Test install on windows', async () => {
|
||||||
setEnv('7.0', 'win32', '', '', '', '', '');
|
setEnv('7.0', 'win32', '', '', '', '', '');
|
||||||
// @ts-ignore
|
|
||||||
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 script.ps1 7.0 ' + __dirname);
|
||||||
|
|
||||||
setEnv('7.3', 'win32', '', '', '', '', '');
|
setEnv('7.3', 'win32', '', '', '', '', '');
|
||||||
// @ts-ignore
|
|
||||||
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 script.ps1 7.3 ' + __dirname);
|
||||||
|
|
||||||
setEnv('7.3', 'win32', 'a, b', 'a=b', 'x', '', '');
|
setEnv('7.3', 'win32', 'a, b', 'a=b', 'x', '', '');
|
||||||
// @ts-ignore
|
|
||||||
script = await install.run();
|
script = '' + (await install.run());
|
||||||
expect(script).toContain('initial script');
|
expect(script).toContain('initial script');
|
||||||
expect(script).toContain('install extensions');
|
expect(script).toContain('install extensions');
|
||||||
expect(script).toContain('edit php.ini');
|
expect(script).toContain('edit php.ini');
|
||||||
@ -114,66 +116,66 @@ describe('Install', () => {
|
|||||||
|
|
||||||
it('Test install on linux', async () => {
|
it('Test install on linux', async () => {
|
||||||
setEnv('7.3', 'linux', '', '', '', '', '');
|
setEnv('7.3', 'linux', '', '', '', '', '');
|
||||||
// @ts-ignore
|
|
||||||
let script: string = await install.run();
|
|
||||||
expect(script).toContain('initial script');
|
|
||||||
expect(script).toContain('sh script.sh 7.3 ');
|
|
||||||
|
|
||||||
setEnv('7.3', 'linux', 'a, b', 'a=b', 'x', 'phpunit', 'true');
|
let script: string = '' + (await install.run());
|
||||||
// @ts-ignore
|
expect(script).toContain('initial script');
|
||||||
script = await install.run();
|
expect(script).toContain('bash script.sh 7.3 ');
|
||||||
|
|
||||||
|
setEnv('7.4', 'linux', 'a, b', 'a=b', 'x', 'phpunit', 'true');
|
||||||
|
|
||||||
|
script = '' + (await install.run());
|
||||||
expect(script).toContain('initial script');
|
expect(script).toContain('initial script');
|
||||||
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('sh script.sh 7.3');
|
expect(script).toContain('bash script.sh 7.4');
|
||||||
expect(script).toContain('add_tool');
|
expect(script).toContain('add_tool');
|
||||||
|
|
||||||
setEnv('7.3', 'linux', 'a, b', 'a=b', 'x', 'phpunit', '');
|
setEnv('7.3', 'linux', 'a, b', 'a=b', 'x', 'phpunit', '');
|
||||||
// @ts-ignore
|
|
||||||
script = await install.run();
|
script = '' + (await install.run());
|
||||||
expect(script).toContain('initial script');
|
expect(script).toContain('initial script');
|
||||||
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('sh script.sh 7.3');
|
expect(script).toContain('bash script.sh 7.3');
|
||||||
expect(script).toContain('add_tool');
|
expect(script).toContain('add_tool');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Test install on darwin', async () => {
|
it('Test install on darwin', async () => {
|
||||||
setEnv('7.3', 'darwin', '', '', '', '', '');
|
setEnv('7.3', 'darwin', '', '', '', '', '');
|
||||||
// @ts-ignore
|
|
||||||
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('sh script.sh 7.3 ' + __dirname);
|
expect(script).toContain('bash script.sh 7.3 ' + __dirname);
|
||||||
|
|
||||||
setEnv('7.3', 'darwin', 'a, b', 'a=b', 'x', '', '');
|
setEnv('7.3', 'darwin', 'a, b', 'a=b', 'x', '', '');
|
||||||
// @ts-ignore
|
|
||||||
script = await install.run();
|
script = '' + (await install.run());
|
||||||
expect(script).toContain('initial script');
|
expect(script).toContain('initial script');
|
||||||
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('sh script.sh 7.3 ' + __dirname);
|
expect(script).toContain('bash script.sh 7.3 ' + __dirname);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Test malformed version inputs', async () => {
|
it('Test malformed version inputs', async () => {
|
||||||
setEnv('7.4.1', 'darwin', '', '', '', '', '');
|
setEnv('7.4.1', 'darwin', '', '', '', '', '');
|
||||||
// @ts-ignore
|
|
||||||
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('sh script.sh 7.4 ' + __dirname);
|
expect(script).toContain('bash script.sh 7.4 ' + __dirname);
|
||||||
|
|
||||||
setEnv(8.0, 'darwin', '', '', '', '', '');
|
setEnv(8.0, 'darwin', '', '', '', '', '');
|
||||||
// @ts-ignore
|
|
||||||
script = await install.run();
|
script = '' + (await install.run());
|
||||||
expect(script).toContain('initial script');
|
expect(script).toContain('initial script');
|
||||||
expect(script).toContain('sh script.sh 8.0 ' + __dirname);
|
expect(script).toContain('bash script.sh 8.0 ' + __dirname);
|
||||||
|
|
||||||
setEnv(8, 'darwin', '', '', '', '', '');
|
setEnv(8, 'darwin', '', '', '', '', '');
|
||||||
// @ts-ignore
|
|
||||||
script = await install.run();
|
script = '' + (await install.run());
|
||||||
expect(script).toContain('initial script');
|
expect(script).toContain('initial script');
|
||||||
expect(script).toContain('sh script.sh 8.0 ' + __dirname);
|
expect(script).toContain('bash script.sh 8.0 ' + __dirname);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -1,34 +0,0 @@
|
|||||||
import * as io from '@actions/io';
|
|
||||||
import * as path from 'path';
|
|
||||||
import * as fs from 'fs';
|
|
||||||
import * as matchers from '../src/matchers';
|
|
||||||
|
|
||||||
async function cleanup(path: string): Promise<void> {
|
|
||||||
fs.unlink(path, error => {
|
|
||||||
if (error) {
|
|
||||||
console.log(error);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
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(1);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('Test 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);
|
|
||||||
});
|
|
||||||
});
|
|
@ -2,29 +2,35 @@ import * as tools from '../src/tools';
|
|||||||
|
|
||||||
describe('Tools tests', () => {
|
describe('Tools tests', () => {
|
||||||
it('checking getCommand', async () => {
|
it('checking getCommand', async () => {
|
||||||
expect(await tools.getArchiveCommand('linux')).toBe('add_tool ');
|
expect(await tools.getCommand('linux', 'tool')).toBe('add_tool ');
|
||||||
expect(await tools.getArchiveCommand('darwin')).toBe('add_tool ');
|
expect(await tools.getCommand('darwin', 'tool')).toBe('add_tool ');
|
||||||
expect(await tools.getArchiveCommand('win32')).toBe('Add-Tool ');
|
expect(await tools.getCommand('win32', 'tool')).toBe('Add-Tool ');
|
||||||
expect(await tools.getArchiveCommand('fedora')).toContain(
|
expect(await tools.getCommand('openbsd', 'tool')).toContain(
|
||||||
'Platform fedora is not supported'
|
'Platform openbsd is not supported'
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('checking getCommand', async () => {
|
it('checking getCommand', async () => {
|
||||||
expect(await tools.getPackageCommand('linux')).toBe('add_composer_tool ');
|
expect(await tools.getCommand('linux', 'composertool')).toBe(
|
||||||
expect(await tools.getPackageCommand('darwin')).toBe('add_composer_tool ');
|
'add_composertool '
|
||||||
expect(await tools.getPackageCommand('win32')).toBe('Add-Composer-Tool ');
|
);
|
||||||
expect(await tools.getPackageCommand('fedora')).toContain(
|
expect(await tools.getCommand('darwin', 'composertool')).toBe(
|
||||||
'Platform fedora is not supported'
|
'add_composertool '
|
||||||
|
);
|
||||||
|
expect(await tools.getCommand('win32', 'composertool')).toBe(
|
||||||
|
'Add-Composertool '
|
||||||
|
);
|
||||||
|
expect(await tools.getCommand('openbsd', 'composertool')).toContain(
|
||||||
|
'Platform openbsd is not supported'
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('checking getPECLCommand', async () => {
|
it('checking getCommand', async () => {
|
||||||
expect(await tools.getPECLCommand('linux')).toBe('add_pecl ');
|
expect(await tools.getCommand('linux', 'pecl')).toBe('add_pecl ');
|
||||||
expect(await tools.getPECLCommand('darwin')).toBe('add_pecl ');
|
expect(await tools.getCommand('darwin', 'pecl')).toBe('add_pecl ');
|
||||||
expect(await tools.getPECLCommand('win32')).toBe('Add-PECL ');
|
expect(await tools.getCommand('win32', 'pecl')).toBe('Add-Pecl ');
|
||||||
expect(await tools.getPECLCommand('fedora')).toContain(
|
expect(await tools.getCommand('openbsd', 'pecl')).toContain(
|
||||||
'Platform fedora is not supported'
|
'Platform openbsd is not supported'
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -106,78 +112,34 @@ describe('Tools tests', () => {
|
|||||||
).toBe('releases/download/v1.2.3/tool.phar');
|
).toBe('releases/download/v1.2.3/tool.phar');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('checking getCodeceptionUriBuilder', async () => {
|
|
||||||
expect(await tools.getCodeceptionUriBuilder('3.2.1', '5.6', 'php56')).toBe(
|
|
||||||
'releases/3.2.1/php56/codecept.phar'
|
|
||||||
);
|
|
||||||
expect(await tools.getCodeceptionUriBuilder('3.2.1', '7.0', 'php54')).toBe(
|
|
||||||
'releases/3.2.1/php54/codecept.phar'
|
|
||||||
);
|
|
||||||
expect(await tools.getCodeceptionUriBuilder('3.2.1', '7.1', 'php56')).toBe(
|
|
||||||
'releases/3.2.1/php56/codecept.phar'
|
|
||||||
);
|
|
||||||
expect(await tools.getCodeceptionUriBuilder('3.2.1', '7.2', 'php56')).toBe(
|
|
||||||
'releases/3.2.1/codecept.phar'
|
|
||||||
);
|
|
||||||
expect(await tools.getCodeceptionUriBuilder('3.2.1', '7.3', 'php56')).toBe(
|
|
||||||
'releases/3.2.1/codecept.phar'
|
|
||||||
);
|
|
||||||
expect(await tools.getCodeceptionUriBuilder('3.2.1', '7.4', 'php56')).toBe(
|
|
||||||
'releases/3.2.1/codecept.phar'
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking getCodeceptionUri', async () => {
|
|
||||||
expect(await tools.getCodeceptionUri('latest', '5.6')).toBe(
|
|
||||||
'php56/codecept.phar'
|
|
||||||
);
|
|
||||||
expect(await tools.getCodeceptionUri('latest', '7.0')).toBe(
|
|
||||||
'php56/codecept.phar'
|
|
||||||
);
|
|
||||||
expect(await tools.getCodeceptionUri('latest', '7.1')).toBe(
|
|
||||||
'php56/codecept.phar'
|
|
||||||
);
|
|
||||||
expect(await tools.getCodeceptionUri('latest', '7.2')).toBe(
|
|
||||||
'codecept.phar'
|
|
||||||
);
|
|
||||||
expect(await tools.getCodeceptionUri('latest', '7.3')).toBe(
|
|
||||||
'codecept.phar'
|
|
||||||
);
|
|
||||||
expect(await tools.getCodeceptionUri('latest', '7.4')).toBe(
|
|
||||||
'codecept.phar'
|
|
||||||
);
|
|
||||||
expect(await tools.getCodeceptionUri('3.2.1', '5.6')).toBe(
|
|
||||||
'releases/3.2.1/php54/codecept.phar'
|
|
||||||
);
|
|
||||||
expect(await tools.getCodeceptionUri('4.3.2', '5.6')).toBe(
|
|
||||||
'releases/4.3.2/php56/codecept.phar'
|
|
||||||
);
|
|
||||||
expect(await tools.getCodeceptionUri('3.2.1', '7.4')).toBe(
|
|
||||||
'releases/3.2.1/codecept.phar'
|
|
||||||
);
|
|
||||||
expect(await tools.getCodeceptionUri('4.3.2', '7.4')).toBe(
|
|
||||||
'releases/4.3.2/codecept.phar'
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking addPhive', async () => {
|
it('checking addPhive', async () => {
|
||||||
let script: string = await tools.addPhive('1.2.3', 'linux');
|
let script: string = await tools.addPhive('1.2.3', '7.4', 'linux');
|
||||||
expect(script).toContain(
|
expect(script).toContain(
|
||||||
'add_tool https://github.com/phar-io/phive/releases/download/1.2.3/phive-1.2.3.phar phive'
|
'add_tool https://github.com/phar-io/phive/releases/download/1.2.3/phive-1.2.3.phar phive'
|
||||||
);
|
);
|
||||||
|
|
||||||
script = await tools.addPhive('latest', 'win32');
|
script = await tools.addPhive('latest', '5.6', 'win32');
|
||||||
expect(script).toContain(
|
expect(script).toContain(
|
||||||
'Add-Tool https://phar.io/releases/phive.phar phive'
|
'Add-Tool https://github.com/phar-io/phive/releases/download/0.12.1/phive-0.12.1.phar phive'
|
||||||
|
);
|
||||||
|
|
||||||
|
script = await tools.addPhive('latest', '7.1', 'win32');
|
||||||
|
expect(script).toContain(
|
||||||
|
'Add-Tool https://github.com/phar-io/phive/releases/download/0.13.5/phive-0.13.5.phar phive'
|
||||||
|
);
|
||||||
|
|
||||||
|
script = await tools.addPhive('latest', '7.2', 'win32');
|
||||||
|
expect(script).toContain(
|
||||||
|
'Add-Tool https://github.com/phar-io/phive/releases/download/0.14.5/phive-0.14.5.phar phive'
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('checking getPhpunitUri', async () => {
|
it('checking getPhpunitUri', async () => {
|
||||||
expect(await tools.getPhpunitUrl('tool', 'latest')).toBe(
|
expect(await tools.getPharUrl('domain', 'tool', '', 'latest')).toBe(
|
||||||
'https://phar.phpunit.de/tool.phar'
|
'domain/tool.phar'
|
||||||
);
|
);
|
||||||
expect(await tools.getPhpunitUrl('tool', '1.2.3')).toBe(
|
expect(await tools.getPharUrl('domain', 'tool', 'v', '1.2.3')).toBe(
|
||||||
'https://phar.phpunit.de/tool-1.2.3.phar'
|
'domain/tool-v1.2.3.phar'
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -190,7 +152,7 @@ describe('Tools tests', () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('checking getDeployerUri', async () => {
|
it('checking addComposer', async () => {
|
||||||
expect(await tools.addComposer(['a', 'b'])).toStrictEqual([
|
expect(await tools.addComposer(['a', 'b'])).toStrictEqual([
|
||||||
'composer',
|
'composer',
|
||||||
'a',
|
'a',
|
||||||
@ -201,9 +163,74 @@ describe('Tools tests', () => {
|
|||||||
'a',
|
'a',
|
||||||
'b'
|
'b'
|
||||||
]);
|
]);
|
||||||
|
expect(await tools.addComposer(['a', 'b', 'composer:1.2'])).toStrictEqual([
|
||||||
|
'composer',
|
||||||
|
'a',
|
||||||
|
'b'
|
||||||
|
]);
|
||||||
|
expect(await tools.addComposer(['a', 'b', 'composer:1.2.3'])).toStrictEqual(
|
||||||
|
['composer:1.2.3', 'a', 'b']
|
||||||
|
);
|
||||||
expect(
|
expect(
|
||||||
await tools.addComposer(['a', 'b', 'composer:1.2.3'])
|
await tools.addComposer(['a', 'b', 'composer:v1.2.3'])
|
||||||
).toStrictEqual(['composer', 'a', 'b']);
|
).toStrictEqual(['composer:1.2.3', 'a', 'b']);
|
||||||
|
expect(
|
||||||
|
await tools.addComposer(['a', 'b', 'composer:snapshot'])
|
||||||
|
).toStrictEqual(['composer:snapshot', 'a', 'b']);
|
||||||
|
expect(
|
||||||
|
await tools.addComposer(['a', 'b', 'composer:preview'])
|
||||||
|
).toStrictEqual(['composer:preview', 'a', 'b']);
|
||||||
|
expect(
|
||||||
|
await tools.addComposer(['a', 'b', 'c', 'composer:1'])
|
||||||
|
).toStrictEqual(['composer:1', 'a', 'b', 'c']);
|
||||||
|
expect(
|
||||||
|
await tools.addComposer(['a', 'b', 'c', 'composer:2'])
|
||||||
|
).toStrictEqual(['composer:2', 'a', 'b', 'c']);
|
||||||
|
expect(
|
||||||
|
await tools.addComposer(['a', 'b', 'c', 'composer:v1'])
|
||||||
|
).toStrictEqual(['composer:1', 'a', 'b', 'c']);
|
||||||
|
expect(
|
||||||
|
await tools.addComposer(['a', 'b', 'c', 'composer:v2'])
|
||||||
|
).toStrictEqual(['composer:2', 'a', 'b', 'c']);
|
||||||
|
expect(
|
||||||
|
await tools.addComposer(['hirak', 'b', 'c', 'composer:v2'])
|
||||||
|
).toStrictEqual(['composer:1', 'hirak', 'b', 'c']);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking getComposerUrl', async () => {
|
||||||
|
expect(await tools.getComposerUrl('latest', '7.4')).toContain(
|
||||||
|
'https://getcomposer.org/composer-stable.phar'
|
||||||
|
);
|
||||||
|
expect(await tools.getComposerUrl('stable', '7.4')).toContain(
|
||||||
|
'https://getcomposer.org/composer-stable.phar'
|
||||||
|
);
|
||||||
|
expect(await tools.getComposerUrl('snapshot', '7.4')).toContain(
|
||||||
|
'https://getcomposer.org/composer.phar'
|
||||||
|
);
|
||||||
|
expect(await tools.getComposerUrl('preview', '7.4')).toContain(
|
||||||
|
'https://getcomposer.org/composer-preview.phar'
|
||||||
|
);
|
||||||
|
expect(await tools.getComposerUrl('1', '7.4')).toContain(
|
||||||
|
'https://getcomposer.org/composer-1.phar'
|
||||||
|
);
|
||||||
|
expect(await tools.getComposerUrl('2', '7.4')).toContain(
|
||||||
|
'https://getcomposer.org/composer-2.phar'
|
||||||
|
);
|
||||||
|
expect(await tools.getComposerUrl('1.7.2', '7.4')).toContain(
|
||||||
|
'https://github.com/composer/composer/releases/download/1.7.2/composer.phar'
|
||||||
|
);
|
||||||
|
expect(await tools.getComposerUrl('1.7.2', '7.4')).toContain(
|
||||||
|
'https://getcomposer.org/composer-1.7.2.phar'
|
||||||
|
);
|
||||||
|
expect(await tools.getComposerUrl('2.0.0-RC2', '7.4')).toContain(
|
||||||
|
'https://github.com/composer/composer/releases/download/2.0.0-RC2/composer.phar'
|
||||||
|
);
|
||||||
|
expect(await tools.getComposerUrl('2.0.0-RC2', '7.4')).toContain(
|
||||||
|
'https://getcomposer.org/composer-2.0.0-RC2.phar'
|
||||||
|
);
|
||||||
|
expect(await tools.getComposerUrl('wrong', '7.4')).toContain(
|
||||||
|
'https://getcomposer.org/composer-stable.phar'
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('checking getSymfonyUri', async () => {
|
it('checking getSymfonyUri', async () => {
|
||||||
@ -225,42 +252,33 @@ describe('Tools tests', () => {
|
|||||||
expect(await tools.getSymfonyUri('1.2.3', 'win32')).toContain(
|
expect(await tools.getSymfonyUri('1.2.3', 'win32')).toContain(
|
||||||
'releases/download/v1.2.3/symfony_windows_amd64'
|
'releases/download/v1.2.3/symfony_windows_amd64'
|
||||||
);
|
);
|
||||||
expect(await tools.getSymfonyUri('1.2.3', 'fedora')).toContain(
|
expect(await tools.getSymfonyUri('1.2.3', 'openbsd')).toContain(
|
||||||
'Platform fedora is not supported'
|
'Platform openbsd is not supported'
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('checking getCleanedToolsList', async () => {
|
it('checking getCleanedToolsList', async () => {
|
||||||
const tools_list: string[] = await tools.getCleanedToolsList(
|
const tools_list: string[] = await tools.getCleanedToolsList(
|
||||||
'tool, composer:1.2.3, robmorgan/phinx, hirak/prestissimo, narrowspark/automatic-composer-prefetcher'
|
'tool, composer:1.2.3, robmorgan/phinx'
|
||||||
);
|
);
|
||||||
expect(tools_list).toStrictEqual([
|
expect(tools_list).toStrictEqual(['composer:1.2.3', 'tool', 'phinx']);
|
||||||
'composer',
|
|
||||||
'tool',
|
|
||||||
'phinx',
|
|
||||||
'prestissimo',
|
|
||||||
'composer-prefetcher'
|
|
||||||
]);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('checking addArchive', async () => {
|
it('checking addArchive', async () => {
|
||||||
let script: string = await tools.addArchive(
|
let script: string = await tools.addArchive(
|
||||||
'tool',
|
'tool',
|
||||||
'1.2.3',
|
|
||||||
'https://tool.com/tool.phar',
|
'https://tool.com/tool.phar',
|
||||||
'linux'
|
'linux'
|
||||||
);
|
);
|
||||||
expect(script).toContain('add_tool https://tool.com/tool.phar tool');
|
expect(script).toContain('add_tool https://tool.com/tool.phar tool');
|
||||||
script = await tools.addArchive(
|
script = await tools.addArchive(
|
||||||
'tool',
|
'tool',
|
||||||
'1.2.3',
|
|
||||||
'https://tool.com/tool.phar',
|
'https://tool.com/tool.phar',
|
||||||
'darwin'
|
'darwin'
|
||||||
);
|
);
|
||||||
expect(script).toContain('add_tool https://tool.com/tool.phar tool');
|
expect(script).toContain('add_tool https://tool.com/tool.phar tool');
|
||||||
script = await tools.addArchive(
|
script = await tools.addArchive(
|
||||||
'tool',
|
'tool',
|
||||||
'1.2.3',
|
|
||||||
'https://tool.com/tool.phar',
|
'https://tool.com/tool.phar',
|
||||||
'win32'
|
'win32'
|
||||||
);
|
);
|
||||||
@ -268,11 +286,10 @@ describe('Tools tests', () => {
|
|||||||
|
|
||||||
script = await tools.addArchive(
|
script = await tools.addArchive(
|
||||||
'tool',
|
'tool',
|
||||||
'1.2.3',
|
|
||||||
'https://tool.com/tool.phar',
|
'https://tool.com/tool.phar',
|
||||||
'fedora'
|
'openbsd'
|
||||||
);
|
);
|
||||||
expect(script).toContain('Platform fedora is not supported');
|
expect(script).toContain('Platform openbsd is not supported');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('checking addDevTools', async () => {
|
it('checking addDevTools', async () => {
|
||||||
@ -300,8 +317,8 @@ describe('Tools tests', () => {
|
|||||||
'Add-Log "$cross" "php-config" "php-config is not a windows tool"'
|
'Add-Log "$cross" "php-config" "php-config is not a windows tool"'
|
||||||
);
|
);
|
||||||
|
|
||||||
script = await tools.addDevTools('tool', 'fedora');
|
script = await tools.addDevTools('tool', 'openbsd');
|
||||||
expect(script).toContain('Platform fedora is not supported');
|
expect(script).toContain('Platform openbsd is not supported');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('checking addPackage', async () => {
|
it('checking addPackage', async () => {
|
||||||
@ -311,16 +328,16 @@ describe('Tools tests', () => {
|
|||||||
'user/',
|
'user/',
|
||||||
'linux'
|
'linux'
|
||||||
);
|
);
|
||||||
expect(script).toContain('add_composer_tool tool tool:1.2.3 user/');
|
expect(script).toContain('add_composertool tool tool:1.2.3 user/');
|
||||||
|
|
||||||
script = await tools.addPackage('tool', 'tool:1.2.3', 'user/', 'darwin');
|
script = await tools.addPackage('tool', 'tool:1.2.3', 'user/', 'darwin');
|
||||||
expect(script).toContain('add_composer_tool tool tool:1.2.3 user/');
|
expect(script).toContain('add_composertool tool tool:1.2.3 user/');
|
||||||
|
|
||||||
script = await tools.addPackage('tool', 'tool:1.2.3', 'user/', 'win32');
|
script = await tools.addPackage('tool', 'tool:1.2.3', 'user/', 'win32');
|
||||||
expect(script).toContain('Add-Composer-Tool tool tool:1.2.3 user/');
|
expect(script).toContain('Add-Composertool tool tool:1.2.3 user/');
|
||||||
|
|
||||||
script = await tools.addPackage('tool', 'tool:1.2.3', 'user/', 'fedora');
|
script = await tools.addPackage('tool', 'tool:1.2.3', 'user/', 'openbsd');
|
||||||
expect(script).toContain('Platform fedora is not supported');
|
expect(script).toContain('Platform openbsd is not supported');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('checking addTools on linux', async () => {
|
it('checking addTools on linux', async () => {
|
||||||
@ -330,7 +347,7 @@ describe('Tools tests', () => {
|
|||||||
'linux'
|
'linux'
|
||||||
);
|
);
|
||||||
expect(script).toContain(
|
expect(script).toContain(
|
||||||
'add_tool https://github.com/composer/composer/releases/latest/download/composer.phar composer'
|
'add_tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-stable.phar,https://getcomposer.org/composer-stable.phar composer'
|
||||||
);
|
);
|
||||||
expect(script).toContain(
|
expect(script).toContain(
|
||||||
'add_tool https://github.com/staabm/annotate-pull-request-from-checkstyle/releases/latest/download/cs2pr cs2pr'
|
'add_tool https://github.com/staabm/annotate-pull-request-from-checkstyle/releases/latest/download/cs2pr cs2pr'
|
||||||
@ -351,20 +368,20 @@ describe('Tools tests', () => {
|
|||||||
'add_tool https://github.com/symfony/cli/releases/latest/download/symfony_linux_amd64 symfony'
|
'add_tool https://github.com/symfony/cli/releases/latest/download/symfony_linux_amd64 symfony'
|
||||||
);
|
);
|
||||||
expect(script).toContain('add_pecl');
|
expect(script).toContain('add_pecl');
|
||||||
expect(script).toContain('add_composer_tool phinx phinx robmorgan/');
|
expect(script).toContain('add_composertool phinx phinx robmorgan/');
|
||||||
expect(script).toContain('add_composer_tool phinx phinx:1.2.3 robmorgan/');
|
expect(script).toContain('add_composertool phinx phinx:1.2.3 robmorgan/');
|
||||||
expect(script).toContain('add_devtools');
|
expect(script).toContain('add_devtools');
|
||||||
expect(script).toContain('add_log "$tick" "php-config" "Added"');
|
expect(script).toContain('add_log "$tick" "php-config" "Added"');
|
||||||
expect(script).toContain('add_log "$tick" "phpize" "Added"');
|
expect(script).toContain('add_log "$tick" "phpize" "Added"');
|
||||||
});
|
});
|
||||||
it('checking addTools on darwin', async () => {
|
it('checking addTools on darwin', async () => {
|
||||||
const script: string = await tools.addTools(
|
const script: string = await tools.addTools(
|
||||||
'phpcs, phpcbf, phpcpd, phpmd, psalm, phinx, phive:1.2.3, cs2pr:1.2.3, composer-prefetcher:1.2.3, phpize, php-config, symfony, symfony:1.2.3',
|
'phpcs, phpcbf, phpcpd, phpmd, psalm, phinx, phive:1.2.3, cs2pr:1.2.3, phpize, php-config, symfony:1.2.3',
|
||||||
'7.4',
|
'7.4',
|
||||||
'darwin'
|
'darwin'
|
||||||
);
|
);
|
||||||
expect(script).toContain(
|
expect(script).toContain(
|
||||||
'add_tool https://github.com/composer/composer/releases/latest/download/composer.phar composer'
|
'add_tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-stable.phar,https://getcomposer.org/composer-stable.phar composer'
|
||||||
);
|
);
|
||||||
expect(script).toContain(
|
expect(script).toContain(
|
||||||
'add_tool https://github.com/staabm/annotate-pull-request-from-checkstyle/releases/download/1.2.3/cs2pr cs2pr'
|
'add_tool https://github.com/staabm/annotate-pull-request-from-checkstyle/releases/download/1.2.3/cs2pr cs2pr'
|
||||||
@ -384,16 +401,10 @@ describe('Tools tests', () => {
|
|||||||
expect(script).toContain(
|
expect(script).toContain(
|
||||||
'https://github.com/vimeo/psalm/releases/latest/download/psalm.phar psalm'
|
'https://github.com/vimeo/psalm/releases/latest/download/psalm.phar psalm'
|
||||||
);
|
);
|
||||||
expect(script).toContain('add_composer_tool phinx phinx robmorgan/');
|
expect(script).toContain('add_composertool phinx phinx robmorgan/');
|
||||||
expect(script).toContain(
|
expect(script).toContain(
|
||||||
'add_tool https://github.com/phar-io/phive/releases/download/1.2.3/phive-1.2.3.phar phive'
|
'add_tool https://github.com/phar-io/phive/releases/download/1.2.3/phive-1.2.3.phar phive'
|
||||||
);
|
);
|
||||||
expect(script).toContain(
|
|
||||||
'add_composer_tool composer-prefetcher composer-prefetcher:1.2.3 narrowspark/automatic-'
|
|
||||||
);
|
|
||||||
expect(script).toContain(
|
|
||||||
'add_tool https://github.com/symfony/cli/releases/latest/download/symfony_darwin_amd64 symfony'
|
|
||||||
);
|
|
||||||
expect(script).toContain(
|
expect(script).toContain(
|
||||||
'add_tool https://github.com/symfony/cli/releases/download/v1.2.3/symfony_darwin_amd64 symfony'
|
'add_tool https://github.com/symfony/cli/releases/download/v1.2.3/symfony_darwin_amd64 symfony'
|
||||||
);
|
);
|
||||||
@ -402,12 +413,12 @@ describe('Tools tests', () => {
|
|||||||
});
|
});
|
||||||
it('checking addTools on windows', async () => {
|
it('checking addTools on windows', async () => {
|
||||||
const script: string = await tools.addTools(
|
const script: string = await tools.addTools(
|
||||||
'codeception, cs2pr, deployer, prestissimo, phpmd, phinx, phive:0.13.2, php-config, phpize, symfony, does_not_exit',
|
'cs2pr, deployer, phpmd, phinx, phive:0.13.2, php-config, phpize, symfony, does_not_exist, composer',
|
||||||
'7.4',
|
'7.4',
|
||||||
'win32'
|
'win32'
|
||||||
);
|
);
|
||||||
expect(script).toContain(
|
expect(script).toContain(
|
||||||
'Add-Tool https://github.com/composer/composer/releases/latest/download/composer.phar composer'
|
'Add-Tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-stable.phar,https://getcomposer.org/composer-stable.phar composer'
|
||||||
);
|
);
|
||||||
expect(script).toContain(
|
expect(script).toContain(
|
||||||
'Add-Tool https://github.com/staabm/annotate-pull-request-from-checkstyle/releases/latest/download/cs2pr cs2pr'
|
'Add-Tool https://github.com/staabm/annotate-pull-request-from-checkstyle/releases/latest/download/cs2pr cs2pr'
|
||||||
@ -415,13 +426,10 @@ describe('Tools tests', () => {
|
|||||||
expect(script).toContain(
|
expect(script).toContain(
|
||||||
'Add-Tool https://deployer.org/deployer.phar deployer'
|
'Add-Tool https://deployer.org/deployer.phar deployer'
|
||||||
);
|
);
|
||||||
expect(script).toContain(
|
|
||||||
'Add-Composer-Tool prestissimo prestissimo hirak/'
|
|
||||||
);
|
|
||||||
expect(script).toContain(
|
expect(script).toContain(
|
||||||
'Add-Tool https://github.com/phpmd/phpmd/releases/latest/download/phpmd.phar phpmd'
|
'Add-Tool https://github.com/phpmd/phpmd/releases/latest/download/phpmd.phar phpmd'
|
||||||
);
|
);
|
||||||
expect(script).toContain('Add-Composer-Tool phinx phinx robmorgan/');
|
expect(script).toContain('Add-Composertool phinx phinx robmorgan/');
|
||||||
expect(script).toContain(
|
expect(script).toContain(
|
||||||
'Add-Tool https://github.com/phar-io/phive/releases/download/0.13.2/phive-0.13.2.phar phive'
|
'Add-Tool https://github.com/phar-io/phive/releases/download/0.13.2/phive-0.13.2.phar phive'
|
||||||
);
|
);
|
||||||
@ -430,24 +438,44 @@ describe('Tools tests', () => {
|
|||||||
);
|
);
|
||||||
expect(script).toContain('phpize is not a windows tool');
|
expect(script).toContain('phpize is not a windows tool');
|
||||||
expect(script).toContain('php-config is not a windows tool');
|
expect(script).toContain('php-config is not a windows tool');
|
||||||
expect(script).toContain('Tool does_not_exit is not supported');
|
expect(script).toContain('Tool does_not_exist is not supported');
|
||||||
expect(script).toContain('Tool does_not_exit is not supported');
|
|
||||||
});
|
});
|
||||||
it('checking addTools with composer tool using user/tool as input', async () => {
|
it('checking addTools with composer tool using user/tool as input', async () => {
|
||||||
const script: string = await tools.addTools(
|
const script: string = await tools.addTools(
|
||||||
'hirak/prestissimo, narrowspark/automatic-composer-prefetcher, robmorgan/phinx',
|
'codeception/codeception, hirak/prestissimo, narrowspark/automatic-composer-prefetcher, robmorgan/phinx',
|
||||||
'7.4',
|
'7.4',
|
||||||
'win32'
|
'win32'
|
||||||
);
|
);
|
||||||
expect(script).toContain(
|
expect(script).toContain(
|
||||||
'Add-Tool https://github.com/composer/composer/releases/latest/download/composer.phar composer'
|
'Add-Tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-1.phar,https://getcomposer.org/composer-1.phar composer'
|
||||||
|
);
|
||||||
|
expect(script).toContain('Add-Composertool prestissimo prestissimo hirak/');
|
||||||
|
expect(script).toContain('Add-Composertool phinx phinx robmorgan/');
|
||||||
|
expect(script).toContain(
|
||||||
|
'Add-Composertool composer-prefetcher composer-prefetcher narrowspark/automatic-'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
it('checking composer setup', async () => {
|
||||||
|
let script: string = await tools.addTools(
|
||||||
|
'composer, composer:v1',
|
||||||
|
'7.4',
|
||||||
|
'linux'
|
||||||
);
|
);
|
||||||
expect(script).toContain(
|
expect(script).toContain(
|
||||||
'Add-Composer-Tool prestissimo prestissimo hirak/'
|
'add_tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-1.phar,https://getcomposer.org/composer-1.phar composer'
|
||||||
);
|
);
|
||||||
expect(script).toContain('Add-Composer-Tool phinx phinx robmorgan/');
|
|
||||||
|
script = await tools.addTools('composer:preview', '7.4', 'linux');
|
||||||
expect(script).toContain(
|
expect(script).toContain(
|
||||||
'Add-Composer-Tool composer-prefetcher composer-prefetcher narrowspark/automatic-'
|
'add_tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-preview.phar,https://getcomposer.org/composer-preview.phar composer'
|
||||||
|
);
|
||||||
|
script = await tools.addTools(
|
||||||
|
'composer:v1, composer:preview, composer:snapshot',
|
||||||
|
'7.4',
|
||||||
|
'linux'
|
||||||
|
);
|
||||||
|
expect(script).toContain(
|
||||||
|
'add_tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-snapshot.phar,https://getcomposer.org/composer.phar composer'
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -8,6 +8,10 @@ jest.mock('@actions/core', () => ({
|
|||||||
})
|
})
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
jest.spyOn(utils, 'fetch').mockImplementation(async (url): Promise<string> => {
|
||||||
|
return `{ "latest": "8.0", "5.x": "5.6", "url": "${url}" }`;
|
||||||
|
});
|
||||||
|
|
||||||
async function cleanup(path: string): Promise<void> {
|
async function cleanup(path: string): Promise<void> {
|
||||||
fs.unlink(path, error => {
|
fs.unlink(path, error => {
|
||||||
if (error) {
|
if (error) {
|
||||||
@ -17,21 +21,48 @@ async function cleanup(path: string): Promise<void> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
describe('Utils tests', () => {
|
describe('Utils tests', () => {
|
||||||
it('checking getInput', async () => {
|
it('checking readEnv', async () => {
|
||||||
process.env['test'] = 'setup-php';
|
process.env['test'] = 'setup-php';
|
||||||
process.env['undefined'] = '';
|
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 () => {
|
||||||
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('');
|
||||||
|
expect(async () => {
|
||||||
|
await utils.getInput('DoesNotExist', true);
|
||||||
|
}).rejects.toThrow('Input required and not supplied: DoesNotExist');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking fetch', async () => {
|
||||||
|
expect(await utils.fetch('test_url')).toBe(
|
||||||
|
'{ "latest": "8.0", "5.x": "5.6", "url": "test_url" }'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking parseVersion', async () => {
|
||||||
|
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(str: string): Promise<void> {
|
await utils.asyncForEach(
|
||||||
concat += str;
|
array,
|
||||||
});
|
async function (str: string): Promise<void> {
|
||||||
|
concat += str;
|
||||||
|
}
|
||||||
|
);
|
||||||
expect(concat).toBe('abc');
|
expect(concat).toBe('abc');
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -55,12 +86,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', '7.4', 'darwin')).toBe(darwin);
|
expect(await utils.readScript('darwin.sh')).toBe(darwin);
|
||||||
expect(await utils.readScript('darwin.sh', '7.3', 'darwin')).toBe(darwin);
|
expect(await utils.readScript('darwin.sh')).toBe(darwin);
|
||||||
expect(await utils.readScript('linux.sh', '7.4', 'linux')).toBe(linux);
|
expect(await utils.readScript('linux.sh')).toBe(linux);
|
||||||
expect(await utils.readScript('linux.sh', '7.3', 'linux')).toBe(linux);
|
expect(await utils.readScript('linux.sh')).toBe(linux);
|
||||||
expect(await utils.readScript('win32.ps1', '7.4', 'win32')).toBe(win32);
|
expect(await utils.readScript('win32.ps1')).toBe(win32);
|
||||||
expect(await utils.readScript('win32.ps1', '7.3', 'win32')).toBe(win32);
|
expect(await utils.readScript('win32.ps1')).toBe(win32);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('checking writeScripts', async () => {
|
it('checking writeScripts', async () => {
|
||||||
@ -68,7 +99,7 @@ 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(error: Error | null, data: Buffer) {
|
fs.readFile(script_path, function (error: Error | null, data: Buffer) {
|
||||||
expect(testString).toBe(data.toString());
|
expect(testString).toBe(data.toString());
|
||||||
});
|
});
|
||||||
await cleanup(script_path);
|
await cleanup(script_path);
|
||||||
@ -92,6 +123,28 @@ 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=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('')).toEqual([]);
|
expect(await utils.CSVArray('')).toEqual([]);
|
||||||
expect(await utils.CSVArray(' ')).toEqual([]);
|
expect(await utils.CSVArray(' ')).toEqual([]);
|
||||||
});
|
});
|
||||||
@ -126,8 +179,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',
|
||||||
@ -140,8 +193,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 () => {
|
||||||
@ -157,8 +210,8 @@ 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'
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
10
action.yml
10
action.yml
@ -1,8 +1,9 @@
|
|||||||
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'
|
||||||
inputs:
|
inputs:
|
||||||
php-version:
|
php-version:
|
||||||
description: 'Setup PHP version.'
|
description: 'Setup PHP version.'
|
||||||
@ -20,18 +21,17 @@ inputs:
|
|||||||
tools:
|
tools:
|
||||||
description: 'Setup popular tools globally.'
|
description: 'Setup popular tools globally.'
|
||||||
required: false
|
required: false
|
||||||
# Deprecated options, do not use. Will not be supported in v2 which will be released around February 1, 2020.
|
|
||||||
extension-csv:
|
extension-csv:
|
||||||
description: 'Deprecated! Use extensions instead.'
|
description: 'Deprecated! Use extensions instead.'
|
||||||
deprecationMessage: 'The extension-csv property will not be supported in v2. Use extensions instead.'
|
deprecationMessage: 'The extension-csv property is deprecated. Use extensions instead.'
|
||||||
required: false
|
required: false
|
||||||
ini-values-csv:
|
ini-values-csv:
|
||||||
description: 'Deprecated! Use ini-values instead.'
|
description: 'Deprecated! Use ini-values instead.'
|
||||||
deprecationMessage: 'The ini-values-csv property will not be supported in v2. Use ini-values instead.'
|
deprecationMessage: 'The ini-values-csv property is deprecated. Use ini-values instead.'
|
||||||
required: false
|
required: false
|
||||||
pecl:
|
pecl:
|
||||||
description: 'Deprecated! Use tools instead to setup PECL.'
|
description: 'Deprecated! Use tools instead to setup PECL.'
|
||||||
deprecationMessage: 'The pecl property will not be supported in v2. Specify pecl in tools instead.'
|
deprecationMessage: 'The pecl property is deprecated. Specify pecl in tools instead.'
|
||||||
required: false
|
required: false
|
||||||
runs:
|
runs:
|
||||||
using: 'node12'
|
using: 'node12'
|
||||||
|
5326
dist/index.js
vendored
5326
dist/index.js
vendored
File diff suppressed because it is too large
Load Diff
@ -19,7 +19,7 @@ jobs:
|
|||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- uses: actions/cache@v1
|
- uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.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.
|
||||||
@ -27,6 +27,6 @@ jobs:
|
|||||||
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: composer install -n --prefer-dist
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
- name: PHP test
|
- name: PHP test
|
||||||
run: composer test
|
run: composer test
|
@ -34,11 +34,13 @@ jobs:
|
|||||||
# Install memcached if using ext-memcached
|
# Install memcached if using ext-memcached
|
||||||
extensions: mbstring, intl, redis, pdo_mysql
|
extensions: mbstring, intl, redis, pdo_mysql
|
||||||
coverage: pcov
|
coverage: pcov
|
||||||
|
- name: Start mysql service
|
||||||
|
run: sudo /etc/init.d/mysql start
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v1
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.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.
|
||||||
@ -47,7 +49,7 @@ jobs:
|
|||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: |
|
run: |
|
||||||
composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
composer run-script post-install-cmd --no-interaction
|
composer run-script post-install-cmd --no-interaction
|
||||||
# Add a step to run migrations if required
|
# Add a step to run migrations if required
|
||||||
- name: Test with phpunit
|
- name: Test with phpunit
|
||||||
@ -71,7 +73,7 @@ jobs:
|
|||||||
id: composer-cache
|
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@v1
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.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.
|
||||||
@ -79,7 +81,7 @@ jobs:
|
|||||||
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 dependencies
|
- name: Install dependencies
|
||||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
- name: PHP CodeSniffer
|
- name: PHP CodeSniffer
|
||||||
run: composer cs-check
|
run: composer cs-check
|
||||||
|
|
||||||
@ -99,7 +101,7 @@ jobs:
|
|||||||
id: composer-cache
|
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@v1
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.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.
|
||||||
@ -107,6 +109,6 @@ jobs:
|
|||||||
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 dependencies
|
- name: Install dependencies
|
||||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
- name: Static Analysis using PHPStan
|
- name: Static Analysis using PHPStan
|
||||||
run: phpstan analyse --no-progress src/
|
run: phpstan analyse --no-progress src/
|
@ -38,7 +38,7 @@ jobs:
|
|||||||
id: composer-cache
|
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@v1
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.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.
|
||||||
@ -47,7 +47,7 @@ jobs:
|
|||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: |
|
run: |
|
||||||
composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
composer run-script post-install-cmd --no-interaction
|
composer run-script post-install-cmd --no-interaction
|
||||||
# Add a step to run migrations if required
|
# Add a step to run migrations if required
|
||||||
- name: Test with phpunit
|
- name: Test with phpunit
|
||||||
@ -71,7 +71,7 @@ jobs:
|
|||||||
id: composer-cache
|
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@v1
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.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.
|
||||||
@ -79,7 +79,7 @@ jobs:
|
|||||||
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 dependencies
|
- name: Install dependencies
|
||||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
- name: PHP CodeSniffer
|
- name: PHP CodeSniffer
|
||||||
run: composer cs-check
|
run: composer cs-check
|
||||||
|
|
||||||
@ -99,7 +99,7 @@ jobs:
|
|||||||
id: composer-cache
|
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@v1
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.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.
|
||||||
@ -107,6 +107,6 @@ jobs:
|
|||||||
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 dependencies
|
- name: Install dependencies
|
||||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
- name: Static Analysis using PHPStan
|
- name: Static Analysis using PHPStan
|
||||||
run: phpstan analyse --no-progress src/
|
run: phpstan analyse --no-progress src/
|
@ -22,7 +22,7 @@ jobs:
|
|||||||
id: composer-cache
|
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@v1
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.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.
|
||||||
@ -31,7 +31,7 @@ jobs:
|
|||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: |
|
run: |
|
||||||
composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
composer run-script post-install-cmd --no-interaction
|
composer run-script post-install-cmd --no-interaction
|
||||||
- name: Test with phpunit
|
- name: Test with phpunit
|
||||||
run: vendor/bin/phpunit --coverage-text
|
run: vendor/bin/phpunit --coverage-text
|
||||||
@ -51,7 +51,7 @@ jobs:
|
|||||||
id: composer-cache
|
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@v1
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.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.
|
||||||
@ -59,7 +59,7 @@ jobs:
|
|||||||
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 dependencies
|
- name: Install dependencies
|
||||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
- name: PHP CodeSniffer
|
- name: PHP CodeSniffer
|
||||||
run: composer cs-check
|
run: composer cs-check
|
||||||
|
|
||||||
@ -79,7 +79,7 @@ jobs:
|
|||||||
id: composer-cache
|
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@v1
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.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.
|
||||||
@ -87,6 +87,6 @@ jobs:
|
|||||||
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 dependencies
|
- name: Install dependencies
|
||||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
- name: Static Analysis using PHPStan
|
- name: Static Analysis using PHPStan
|
||||||
run: phpstan analyse --no-progress src/
|
run: phpstan analyse --no-progress src/
|
||||||
|
@ -21,7 +21,7 @@ jobs:
|
|||||||
id: composer-cache
|
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@v1
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.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.
|
||||||
@ -29,6 +29,6 @@ jobs:
|
|||||||
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 dependencies
|
- name: Install dependencies
|
||||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
- name: Test with phpunit
|
- name: Test with phpunit
|
||||||
run: vendor/bin/phpunit --coverage-text
|
run: vendor/bin/phpunit --coverage-text
|
@ -41,11 +41,13 @@ jobs:
|
|||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
extensions: mbstring, dom, fileinfo, mysql
|
extensions: mbstring, dom, fileinfo, mysql
|
||||||
coverage: xdebug #optional
|
coverage: xdebug #optional
|
||||||
|
- name: Start mysql service
|
||||||
|
run: sudo /etc/init.d/mysql start
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v1
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.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.
|
||||||
@ -53,7 +55,7 @@ jobs:
|
|||||||
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: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
- name: Prepare the application
|
- name: Prepare the application
|
||||||
run: |
|
run: |
|
||||||
php -r "file_exists('.env') || copy('.env.example', '.env');"
|
php -r "file_exists('.env') || copy('.env.example', '.env');"
|
||||||
|
@ -47,7 +47,7 @@ jobs:
|
|||||||
id: composer-cache
|
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@v1
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.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.
|
||||||
@ -55,7 +55,7 @@ jobs:
|
|||||||
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: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
- name: Prepare the application
|
- name: Prepare the application
|
||||||
run: |
|
run: |
|
||||||
php -r "file_exists('.env') || copy('.env.example', '.env');"
|
php -r "file_exists('.env') || copy('.env.example', '.env');"
|
||||||
|
@ -23,7 +23,7 @@ jobs:
|
|||||||
id: composer-cache
|
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@v1
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.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.
|
||||||
@ -31,7 +31,7 @@ jobs:
|
|||||||
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: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
- name: Prepare the application
|
- name: Prepare the application
|
||||||
run: |
|
run: |
|
||||||
php -r "file_exists('.env') || copy('.env.example', '.env');"
|
php -r "file_exists('.env') || copy('.env.example', '.env');"
|
||||||
|
@ -41,11 +41,13 @@ jobs:
|
|||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
extensions: mbstring, dom, fileinfo, mysql
|
extensions: mbstring, dom, fileinfo, mysql
|
||||||
coverage: xdebug #optional
|
coverage: xdebug #optional
|
||||||
|
- name: Start mysql service
|
||||||
|
run: sudo /etc/init.d/mysql start
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v1
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.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.
|
||||||
@ -54,7 +56,7 @@ jobs:
|
|||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
- name: Install Composer dependencies
|
- name: Install Composer dependencies
|
||||||
run: |
|
run: |
|
||||||
composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
composer require predis/predis illuminate/redis
|
composer require predis/predis illuminate/redis
|
||||||
- name: Prepare the application
|
- name: Prepare the application
|
||||||
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
|
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
|
||||||
|
@ -47,7 +47,7 @@ jobs:
|
|||||||
id: composer-cache
|
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@v1
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.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.
|
||||||
@ -56,7 +56,7 @@ jobs:
|
|||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
- name: Install Composer dependencies
|
- name: Install Composer dependencies
|
||||||
run: |
|
run: |
|
||||||
composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
composer require predis/predis illuminate/redis
|
composer require predis/predis illuminate/redis
|
||||||
- name: Prepare the application
|
- name: Prepare the application
|
||||||
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
|
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
|
||||||
|
@ -23,7 +23,7 @@ jobs:
|
|||||||
id: composer-cache
|
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@v1
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.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.
|
||||||
@ -31,7 +31,7 @@ jobs:
|
|||||||
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: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
- name: Prepare the application
|
- name: Prepare the application
|
||||||
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
|
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
|
||||||
- name: Test with phpunit
|
- name: Test with phpunit
|
||||||
|
@ -41,11 +41,13 @@ jobs:
|
|||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
extensions: mbstring, dom, zip, phalcon4, mysql #use phalcon3 for the phalcon 3.x.
|
extensions: mbstring, dom, zip, phalcon4, mysql #use phalcon3 for the phalcon 3.x.
|
||||||
coverage: xdebug #optional
|
coverage: xdebug #optional
|
||||||
|
- name: Start mysql service
|
||||||
|
run: sudo /etc/init.d/mysql start
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v1
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.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.
|
||||||
@ -53,7 +55,7 @@ jobs:
|
|||||||
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: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
- name: Prepare the application
|
- name: Prepare the application
|
||||||
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
|
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
|
||||||
- name: Run Migration
|
- name: Run Migration
|
||||||
|
@ -46,7 +46,7 @@ jobs:
|
|||||||
id: composer-cache
|
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@v1
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.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.
|
||||||
@ -54,7 +54,7 @@ jobs:
|
|||||||
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: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
- name: Prepare the application
|
- name: Prepare the application
|
||||||
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
|
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
|
||||||
- name: Run Migration
|
- name: Run Migration
|
||||||
|
@ -27,7 +27,7 @@ jobs:
|
|||||||
- name: Get yarn cache
|
- name: Get yarn cache
|
||||||
id: yarn-cache
|
id: yarn-cache
|
||||||
run: echo "::set-output name=dir::$(yarn cache dir)"
|
run: echo "::set-output name=dir::$(yarn cache dir)"
|
||||||
- uses: actions/cache@v1
|
- uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.yarn-cache.outputs.dir }}
|
path: ${{ steps.yarn-cache.outputs.dir }}
|
||||||
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
||||||
@ -36,7 +36,7 @@ jobs:
|
|||||||
id: composer-cache
|
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@v1
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.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.
|
||||||
@ -46,7 +46,7 @@ jobs:
|
|||||||
- name: Install yarn dependencies
|
- name: Install yarn dependencies
|
||||||
run: yarn -V
|
run: yarn -V
|
||||||
- name: Install Composer dependencies
|
- name: Install Composer dependencies
|
||||||
run: composer install -o --prefer-dist --no-interaction
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
- name: Yarn test and build
|
- name: Yarn test and build
|
||||||
run: |
|
run: |
|
||||||
yarn run test
|
yarn run test
|
||||||
|
@ -21,7 +21,7 @@ jobs:
|
|||||||
id: composer-cache
|
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@v1
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.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.
|
||||||
@ -29,6 +29,6 @@ jobs:
|
|||||||
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 dependencies
|
- name: Install dependencies
|
||||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
- name: Test with phpunit
|
- name: Test with phpunit
|
||||||
run: vendor/bin/phpunit --coverage-text
|
run: vendor/bin/phpunit --coverage-text
|
@ -23,16 +23,18 @@ jobs:
|
|||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
- name: Setup PHP, with composer and extensions
|
- name: Setup PHP, with composer and extensions
|
||||||
uses: shivammathur/setup-php@v1 #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 }}
|
||||||
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
|
||||||
|
run: sudo /etc/init.d/mysql start
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v1
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.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.
|
||||||
@ -41,10 +43,11 @@ jobs:
|
|||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
- name: Install Composer dependencies
|
- name: Install Composer dependencies
|
||||||
run: |
|
run: |
|
||||||
composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
composer require --dev symfony/orm-pack symfony/phpunit-bridge
|
||||||
|
composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
php bin/phpunit install
|
||||||
- name: Run Migration
|
- name: Run Migration
|
||||||
run: |
|
run: |
|
||||||
composer require 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:
|
||||||
|
@ -23,7 +23,7 @@ jobs:
|
|||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
- name: Setup PHP, with composer and extensions
|
- name: Setup PHP, with composer and extensions
|
||||||
uses: shivammathur/setup-php@v1 #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 }}
|
||||||
extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite, pgsql
|
extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite, pgsql
|
||||||
@ -32,7 +32,7 @@ jobs:
|
|||||||
id: composer-cache
|
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@v1
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.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.
|
||||||
@ -41,10 +41,11 @@ jobs:
|
|||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
- name: Install Composer dependencies
|
- name: Install Composer dependencies
|
||||||
run: |
|
run: |
|
||||||
composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
composer require --dev symfony/orm-pack symfony/phpunit-bridge
|
||||||
|
composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
php bin/phpunit install
|
||||||
- name: Run Migration
|
- name: Run Migration
|
||||||
run: |
|
run: |
|
||||||
composer require 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:
|
||||||
|
@ -14,7 +14,7 @@ jobs:
|
|||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
- name: Setup PHP, with composer and extensions
|
- name: Setup PHP, with composer and extensions
|
||||||
uses: shivammathur/setup-php@v1 #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 }}
|
||||||
extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite
|
extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite
|
||||||
@ -23,7 +23,7 @@ jobs:
|
|||||||
id: composer-cache
|
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@v1
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.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.
|
||||||
@ -32,7 +32,8 @@ jobs:
|
|||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
- name: Install Composer dependencies
|
- name: Install Composer dependencies
|
||||||
run: |
|
run: |
|
||||||
composer require symfony/orm-pack
|
composer require --dev symfony/phpunit-bridge
|
||||||
composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
php bin/phpunit install
|
||||||
- name: Run Tests
|
- name: Run Tests
|
||||||
run: php bin/phpunit --coverage-text
|
run: php bin/phpunit --coverage-text
|
@ -38,11 +38,13 @@ jobs:
|
|||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
extensions: mbstring, intl, gd, imagick, zip, dom, mysql
|
extensions: mbstring, intl, gd, imagick, zip, dom, mysql
|
||||||
coverage: xdebug #optional
|
coverage: xdebug #optional
|
||||||
|
- name: Start mysql service
|
||||||
|
run: sudo /etc/init.d/mysql start
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v1
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.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.
|
||||||
@ -50,7 +52,7 @@ jobs:
|
|||||||
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: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
- name: Prepare the application
|
- name: Prepare the application
|
||||||
run: |
|
run: |
|
||||||
php -r "file_exists('.env') || copy('.env.dist', '.env');"
|
php -r "file_exists('.env') || copy('.env.dist', '.env');"
|
||||||
|
@ -42,7 +42,7 @@ jobs:
|
|||||||
id: composer-cache
|
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@v1
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.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.
|
||||||
@ -50,7 +50,7 @@ jobs:
|
|||||||
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: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
- name: Prepare the application
|
- name: Prepare the application
|
||||||
run: |
|
run: |
|
||||||
php -r "file_exists('.env') || copy('.env.dist', '.env');"
|
php -r "file_exists('.env') || copy('.env.dist', '.env');"
|
||||||
|
@ -21,7 +21,7 @@ jobs:
|
|||||||
id: composer-cache
|
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@v1
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.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.
|
||||||
@ -30,7 +30,7 @@ jobs:
|
|||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: |
|
run: |
|
||||||
composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
composer require --dev phpunit/phpunit squizlabs/php_codesniffer zendframework/zend-test
|
composer require --dev phpunit/phpunit squizlabs/php_codesniffer zendframework/zend-test
|
||||||
- name: Test with phpunit
|
- name: Test with phpunit
|
||||||
run: vendor/bin/phpunit --coverage-text
|
run: vendor/bin/phpunit --coverage-text
|
@ -9,4 +9,4 @@ module.exports = {
|
|||||||
},
|
},
|
||||||
verbose: true,
|
verbose: true,
|
||||||
collectCoverage: true
|
collectCoverage: true
|
||||||
};
|
};
|
||||||
|
12166
package-lock.json
generated
12166
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
70
package.json
70
package.json
@ -1,15 +1,25 @@
|
|||||||
{
|
{
|
||||||
"name": "setup-php",
|
"name": "setup-php",
|
||||||
"version": "1.8.2",
|
"version": "1.11.7",
|
||||||
"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,33 +34,33 @@
|
|||||||
"author": "shivammathur",
|
"author": "shivammathur",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/core": "^1.2.2",
|
"@actions/core": "^1.6.0",
|
||||||
"@actions/exec": "^1.0.3",
|
"@actions/exec": "^1.1.1",
|
||||||
"@actions/io": "^1.0.2",
|
"@actions/io": "^1.1.2",
|
||||||
"fs": "0.0.1-security"
|
"fs": "0.0.1-security"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/jest": "^25.1.1",
|
"@types/jest": "^27.4.1",
|
||||||
"@types/node": "^13.7.0",
|
"@types/node": "^17.0.23",
|
||||||
"@typescript-eslint/eslint-plugin": "^2.18.0",
|
"@typescript-eslint/eslint-plugin": "^5.18.0",
|
||||||
"@typescript-eslint/parser": "^2.18.0",
|
"@typescript-eslint/parser": "^5.18.0",
|
||||||
"@zeit/ncc": "^0.21.0",
|
"@vercel/ncc": "^0.33.3",
|
||||||
"eslint": "^6.8.0",
|
"eslint": "^8.13.0",
|
||||||
"eslint-config-prettier": "^6.10.0",
|
"eslint-config-prettier": "^8.5.0",
|
||||||
"eslint-plugin-import": "^2.20.1",
|
"eslint-plugin-import": "^2.26.0",
|
||||||
"eslint-plugin-jest": "^23.6.0",
|
"eslint-plugin-jest": "^26.1.4",
|
||||||
"eslint-plugin-prettier": "^3.1.2",
|
"eslint-plugin-prettier": "^4.0.0",
|
||||||
"husky": "^4.2.1",
|
"jest": "^27.5.1",
|
||||||
"jest": "^25.1.0",
|
"jest-circus": "^27.5.1",
|
||||||
"jest-circus": "^25.1.0",
|
"prettier": "^2.6.2",
|
||||||
"prettier": "^1.19.1",
|
"simple-git-hooks": "^2.7.0",
|
||||||
"ts-jest": "^25.1.0",
|
"ts-jest": "^27.1.4",
|
||||||
"typescript": "^3.7.5"
|
"typescript": "^4.6.3"
|
||||||
},
|
},
|
||||||
"husky": {
|
"bugs": {
|
||||||
"skipCI": true,
|
"url": "https://github.com/shivammathur/setup-php/issues"
|
||||||
"hooks": {
|
},
|
||||||
"pre-commit": "npm run format && npm run lint && npm run build && npm run release"
|
"simple-git-hooks": {
|
||||||
}
|
"pre-commit": "npm run format && npm run lint && npm run test && npm run build && npm run release"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Binary file not shown.
Binary file not shown.
@ -10,11 +10,13 @@ export async function addINIValuesUnix(
|
|||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
const ini_values: Array<string> = await utils.CSVArray(ini_values_csv);
|
const ini_values: Array<string> = await utils.CSVArray(ini_values_csv);
|
||||||
let script = '\n';
|
let script = '\n';
|
||||||
await utils.asyncForEach(ini_values, async function(line: string) {
|
await utils.asyncForEach(ini_values, async function (line: string) {
|
||||||
script +=
|
script +=
|
||||||
(await utils.addLog('$tick', line, 'Added to php.ini', 'linux')) + '\n';
|
(await utils.addLog('$tick', line, 'Added to php.ini', 'linux')) + '\n';
|
||||||
});
|
});
|
||||||
return 'echo "' + ini_values.join('\n') + '" >> $ini_file' + script;
|
return (
|
||||||
|
'echo "' + ini_values.join('\n') + '" >> ${pecl_file:-$ini_file}' + script
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -27,7 +29,7 @@ export async function addINIValuesWindows(
|
|||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
const ini_values: Array<string> = await utils.CSVArray(ini_values_csv);
|
const ini_values: Array<string> = await utils.CSVArray(ini_values_csv);
|
||||||
let script = '\n';
|
let script = '\n';
|
||||||
await utils.asyncForEach(ini_values, async function(line: string) {
|
await utils.asyncForEach(ini_values, async function (line: string) {
|
||||||
script +=
|
script +=
|
||||||
(await utils.addLog('$tick', line, 'Added to php.ini', 'win32')) + '\n';
|
(await utils.addLog('$tick', line, 'Added to php.ini', 'win32')) + '\n';
|
||||||
});
|
});
|
||||||
@ -44,6 +46,7 @@ export async function addINIValuesWindows(
|
|||||||
*
|
*
|
||||||
* @param ini_values_csv
|
* @param ini_values_csv
|
||||||
* @param os_version
|
* @param os_version
|
||||||
|
* @param no_step
|
||||||
*/
|
*/
|
||||||
export async function addINIValues(
|
export async function addINIValues(
|
||||||
ini_values_csv: string,
|
ini_values_csv: string,
|
||||||
|
28
src/configs/brew_extensions
Normal file
28
src/configs/brew_extensions
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
amqp=amqp
|
||||||
|
apcu=apcu
|
||||||
|
expect=expect
|
||||||
|
grpc=grpc
|
||||||
|
igbinary=igbinary
|
||||||
|
imagick=imagick
|
||||||
|
imap=imap
|
||||||
|
memcache=memcache
|
||||||
|
memcached=memcached
|
||||||
|
mongodb=mongodb
|
||||||
|
msgpack=msgpack
|
||||||
|
pcov=pcov
|
||||||
|
pecl_http=http
|
||||||
|
phalcon3=phalcon
|
||||||
|
phalcon4=phalcon
|
||||||
|
propro=propro
|
||||||
|
protobuf=protobuf
|
||||||
|
psr=psr
|
||||||
|
raphf=raphf
|
||||||
|
rdkafka=rdkafka
|
||||||
|
redis=redis
|
||||||
|
ssh2=ssh2
|
||||||
|
swoole=swoole
|
||||||
|
vips=vips
|
||||||
|
xdebug=xdebug
|
||||||
|
xdebug2=xdebug
|
||||||
|
yaml=yaml
|
||||||
|
zmq=zmq
|
@ -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
|
|
6
src/configs/php-versions.json
Normal file
6
src/configs/php-versions.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"latest": "8.0",
|
||||||
|
"5.x": "5.6",
|
||||||
|
"7.x": "7.4",
|
||||||
|
"8.x": "8.0"
|
||||||
|
}
|
@ -2,43 +2,22 @@ import * as utils from './utils';
|
|||||||
import * as extensions from './extensions';
|
import * as extensions from './extensions';
|
||||||
import * as config from './config';
|
import * as config from './config';
|
||||||
|
|
||||||
/**
|
|
||||||
* Function to setup Xdebug
|
|
||||||
*
|
|
||||||
* @param version
|
|
||||||
* @param os_version
|
|
||||||
* @param pipe
|
|
||||||
*/
|
|
||||||
export async function addCoverageXdebug(
|
export async function addCoverageXdebug(
|
||||||
|
extension: string,
|
||||||
version: string,
|
version: string,
|
||||||
os_version: string,
|
os_version: string,
|
||||||
pipe: string
|
pipe: string
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
switch (version) {
|
const xdebug =
|
||||||
case '8.0':
|
(await extensions.addExtension(extension, version, os_version, true)) +
|
||||||
return (
|
pipe;
|
||||||
'\n' +
|
const log = await utils.addLog(
|
||||||
(await utils.addLog(
|
'$tick',
|
||||||
'$cross',
|
extension,
|
||||||
'xdebug',
|
'Xdebug enabled as coverage driver',
|
||||||
'Xdebug currently only supports PHP 7.4 or lower',
|
os_version
|
||||||
os_version
|
);
|
||||||
))
|
return xdebug + '\n' + log;
|
||||||
);
|
|
||||||
case '7.4':
|
|
||||||
default:
|
|
||||||
return (
|
|
||||||
(await extensions.addExtension('xdebug', version, os_version, true)) +
|
|
||||||
pipe +
|
|
||||||
'\n' +
|
|
||||||
(await utils.addLog(
|
|
||||||
'$tick',
|
|
||||||
'xdebug',
|
|
||||||
'Xdebug enabled as coverage driver',
|
|
||||||
os_version
|
|
||||||
))
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -151,7 +130,14 @@ export async function addCoverage(
|
|||||||
case 'pcov':
|
case 'pcov':
|
||||||
return script + (await addCoveragePCOV(version, os_version, pipe));
|
return script + (await addCoveragePCOV(version, os_version, pipe));
|
||||||
case 'xdebug':
|
case 'xdebug':
|
||||||
return script + (await addCoverageXdebug(version, os_version, pipe));
|
case 'xdebug3':
|
||||||
|
return (
|
||||||
|
script + (await addCoverageXdebug('xdebug', 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));
|
||||||
default:
|
default:
|
||||||
|
@ -6,67 +6,57 @@ import * as utils from './utils';
|
|||||||
*
|
*
|
||||||
* @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 script = '\n';
|
let script = '\n';
|
||||||
await utils.asyncForEach(extensions, async function(extension: string) {
|
await utils.asyncForEach(extensions, async function (extension: string) {
|
||||||
extension = extension.toLowerCase();
|
|
||||||
const version_extension: string = version + extension;
|
const version_extension: string = version + extension;
|
||||||
const [extension_name, stability]: string[] = extension.split('-');
|
const [extension_name, stability]: string[] = extension.split('-');
|
||||||
const prefix = await utils.getExtensionPrefix(extension_name);
|
const ext_prefix = await utils.getExtensionPrefix(extension_name);
|
||||||
let install_command = '';
|
const command_prefix = 'pecl_install ';
|
||||||
|
let command = '';
|
||||||
switch (true) {
|
switch (true) {
|
||||||
// match pre-release versions
|
// match pre-release versions
|
||||||
case /.*-(beta|alpha|devel|snapshot)/.test(version_extension):
|
case /.+-(beta|alpha|devel|snapshot)/.test(extension):
|
||||||
script +=
|
script +=
|
||||||
'\nadd_unstable_extension ' +
|
'\nadd_unstable_extension ' +
|
||||||
extension_name +
|
extension_name +
|
||||||
' ' +
|
' ' +
|
||||||
stability +
|
stability +
|
||||||
' ' +
|
' ' +
|
||||||
prefix;
|
ext_prefix;
|
||||||
return;
|
return;
|
||||||
case /5\.6xdebug/.test(version_extension):
|
// match 5.6 to 8.0 amqp, expect, grpc, igbinary, imagick, imap, mongodb, msgpack, pecl_http, propro, protobuf, raphf, rdkafka, redis, ssh2, swoole, xdebug, xdebug2, yaml, zmq
|
||||||
install_command = 'sudo pecl install -f xdebug-2.5.5' + pipe;
|
// match 7.1pcov to 8.0pcov
|
||||||
|
// match 7.0vips to 8.0vips
|
||||||
|
case /(5\.6|7\.[0-4]|8.0)(amqp|expect|grpc|igbinary|imagick|imap|mcrypt|mongodb|msgpack|^(pecl_)?http$|propro|protobuf|psr|raphf|rdkafka|redis|ssh2|swoole|xdebug|xdebug2|yaml|zmq)/.test(
|
||||||
|
version_extension
|
||||||
|
):
|
||||||
|
case /(7\.[1-4]|8\.0])pcov/.test(version_extension):
|
||||||
|
case /^(5\.6|7\.[0-3])phalcon3$|^7\.[2-4]phalcon4$/.test(
|
||||||
|
version_extension
|
||||||
|
):
|
||||||
|
case /(7\.[0-4]|8\.0])vips/.test(version_extension):
|
||||||
|
command = 'add_brew_extension ' + extension_name.replace('pecl_', '');
|
||||||
break;
|
break;
|
||||||
case /7\.0xdebug/.test(version_extension):
|
// match sqlite
|
||||||
install_command = 'sudo pecl install -f xdebug-2.9.0' + pipe;
|
case /^sqlite$/.test(extension):
|
||||||
break;
|
extension = 'sqlite3';
|
||||||
case /5\.6redis/.test(version_extension):
|
command = command_prefix + extension;
|
||||||
install_command = 'sudo pecl install -f redis-2.2.8' + pipe;
|
|
||||||
break;
|
|
||||||
case /[5-9]\.\dimagick/.test(version_extension):
|
|
||||||
install_command =
|
|
||||||
'brew install pkg-config imagemagick' +
|
|
||||||
pipe +
|
|
||||||
' && sudo pecl install -f imagick' +
|
|
||||||
pipe;
|
|
||||||
break;
|
|
||||||
case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$/.test(version_extension):
|
|
||||||
install_command =
|
|
||||||
'sh ' +
|
|
||||||
path.join(__dirname, '../src/scripts/ext/phalcon_darwin.sh') +
|
|
||||||
' ' +
|
|
||||||
extension +
|
|
||||||
' ' +
|
|
||||||
version +
|
|
||||||
pipe;
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
install_command = 'sudo pecl install -f ' + extension + pipe;
|
command = command_prefix + extension;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
script +=
|
script +=
|
||||||
'\nadd_extension ' +
|
'\nadd_extension ' +
|
||||||
extension +
|
extension +
|
||||||
' "' +
|
' "' +
|
||||||
install_command +
|
command +
|
||||||
'" ' +
|
'" ' +
|
||||||
(await utils.getExtensionPrefix(extension));
|
(await utils.getExtensionPrefix(extension));
|
||||||
});
|
});
|
||||||
@ -78,24 +68,41 @@ export async function addExtensionDarwin(
|
|||||||
*
|
*
|
||||||
* @param extension_csv
|
* @param extension_csv
|
||||||
* @param version
|
* @param version
|
||||||
* @param pipe
|
|
||||||
*/
|
*/
|
||||||
export async function addExtensionWindows(
|
export async function addExtensionWindows(
|
||||||
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 script = '\n';
|
let script = '\n';
|
||||||
await utils.asyncForEach(extensions, async function(extension: string) {
|
await utils.asyncForEach(extensions, async function (extension: string) {
|
||||||
extension = extension.toLowerCase();
|
|
||||||
const [extension_name, stability]: string[] = extension.split('-');
|
const [extension_name, stability]: string[] = extension.split('-');
|
||||||
const version_extension: string = version + extension;
|
const version_extension: string = version + extension;
|
||||||
switch (true) {
|
switch (true) {
|
||||||
// match pre-release versions
|
// match pre-release versions
|
||||||
case /.*-(beta|alpha|devel|snapshot)/.test(version_extension):
|
case /.+-(beta|alpha|devel|snapshot)/.test(extension):
|
||||||
script += '\nAdd-Extension ' + extension_name + ' ' + stability;
|
script += '\nAdd-Extension ' + extension_name + ' ' + stability;
|
||||||
break;
|
break;
|
||||||
|
// match 5.6mysql, 5.6mysqli, 5.6mysqlnd
|
||||||
|
case /^5\.6(mysql|mysqli|mysqlnd)$/.test(version_extension):
|
||||||
|
script +=
|
||||||
|
'\nAdd-Extension mysql\nAdd-Extension mysqli\nAdd-Extension mysqlnd';
|
||||||
|
break;
|
||||||
|
// match 7.2xdebug2 to 7.4xdebug2
|
||||||
|
case /7\.[2-4]xdebug2/.test(version_extension):
|
||||||
|
script += '\nAdd-Extension xdebug stable 2.9.8';
|
||||||
|
break;
|
||||||
|
// match 7.0mysql..8.0mysql
|
||||||
|
// match 7.0mysqli..8.0mysqli
|
||||||
|
// match 7.0mysqlnd..8.0mysqlnd
|
||||||
|
case /[7-8]\.\d(mysql|mysqli|mysqlnd)$/.test(version_extension):
|
||||||
|
script += '\nAdd-Extension mysqli\nAdd-Extension mysqlnd';
|
||||||
|
break;
|
||||||
|
// match sqlite
|
||||||
|
case /^sqlite$/.test(extension):
|
||||||
|
extension = 'sqlite3';
|
||||||
|
script += '\nAdd-Extension ' + extension;
|
||||||
|
break;
|
||||||
// match 7.0phalcon3...7.3phalcon3 and 7.2phalcon4...7.4phalcon4
|
// match 7.0phalcon3...7.3phalcon3 and 7.2phalcon4...7.4phalcon4
|
||||||
case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$/.test(version_extension):
|
case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$/.test(version_extension):
|
||||||
script +=
|
script +=
|
||||||
@ -129,53 +136,50 @@ export async function addExtensionLinux(
|
|||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
const extensions: Array<string> = await utils.extensionArray(extension_csv);
|
const extensions: Array<string> = await utils.extensionArray(extension_csv);
|
||||||
let script = '\n';
|
let script = '\n';
|
||||||
await utils.asyncForEach(extensions, async function(extension: string) {
|
await utils.asyncForEach(extensions, async function (extension: string) {
|
||||||
extension = extension.toLowerCase();
|
|
||||||
const version_extension: string = version + extension;
|
const version_extension: string = version + extension;
|
||||||
const [extension_name, stability]: string[] = extension.split('-');
|
const [extension_name, stability]: string[] = extension.split('-');
|
||||||
const prefix = await utils.getExtensionPrefix(extension_name);
|
const ext_prefix = await utils.getExtensionPrefix(extension_name);
|
||||||
let install_command = '';
|
const command_prefix = 'sudo $debconf_fix apt-get install -y php';
|
||||||
|
let command = '';
|
||||||
switch (true) {
|
switch (true) {
|
||||||
// match pre-release versions
|
// match pre-release versions
|
||||||
case /.*-(beta|alpha|devel|snapshot)/.test(version_extension):
|
case /.+-(beta|alpha|devel|snapshot)/.test(extension):
|
||||||
script +=
|
script +=
|
||||||
'\nadd_unstable_extension ' +
|
'\nadd_unstable_extension ' +
|
||||||
extension_name +
|
extension_name +
|
||||||
' ' +
|
' ' +
|
||||||
stability +
|
stability +
|
||||||
' ' +
|
' ' +
|
||||||
prefix;
|
ext_prefix;
|
||||||
return;
|
return;
|
||||||
// match 5.6gearman..7.4gearman
|
// match 5.6gearman..7.4gearman
|
||||||
case /^((5\.6)|(7\.[0-4]))gearman$/.test(version_extension):
|
case /^((5\.6)|(7\.[0-4]))gearman$/.test(version_extension):
|
||||||
install_command =
|
script +=
|
||||||
'sh ' +
|
'\n. ' + path.join(__dirname, '../src/scripts/ext/gearman.sh');
|
||||||
path.join(__dirname, '../src/scripts/ext/gearman.sh') +
|
return;
|
||||||
' ' +
|
|
||||||
version +
|
|
||||||
pipe;
|
|
||||||
break;
|
|
||||||
// match 7.0phalcon3...7.3phalcon3 or 7.2phalcon4...7.4phalcon4
|
// match 7.0phalcon3...7.3phalcon3 or 7.2phalcon4...7.4phalcon4
|
||||||
case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$/.test(version_extension):
|
case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$/.test(version_extension):
|
||||||
script +=
|
script +=
|
||||||
'\nsh ' +
|
'\nbash ' +
|
||||||
path.join(__dirname, '../src/scripts/ext/phalcon.sh') +
|
path.join(__dirname, '../src/scripts/ext/phalcon.sh') +
|
||||||
' ' +
|
' ' +
|
||||||
extension +
|
extension +
|
||||||
' ' +
|
' ' +
|
||||||
version;
|
version;
|
||||||
return;
|
return;
|
||||||
// match 7.0xdebug..7.4xdebug
|
// match 7.2xdebug2 to 7.4xdebug2
|
||||||
case /^7\.[0-4]xdebug$/.test(version_extension):
|
case /^7\.[2-4]xdebug2$/.test(version_extension):
|
||||||
script +=
|
script += '\nadd_pecl_extension xdebug 2.9.8 ' + ext_prefix;
|
||||||
'\nupdate_extension xdebug 2.9.0' +
|
|
||||||
pipe +
|
|
||||||
'\n' +
|
|
||||||
(await utils.addLog('$tick', 'xdebug', 'Enabled', 'linux'));
|
|
||||||
return;
|
return;
|
||||||
|
// match sqlite
|
||||||
|
case /^sqlite$/.test(extension):
|
||||||
|
extension = 'sqlite3';
|
||||||
|
command = command_prefix + version + '-' + extension + pipe;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
install_command =
|
command =
|
||||||
'sudo DEBIAN_FRONTEND=noninteractive apt-get install -y php' +
|
command_prefix +
|
||||||
version +
|
version +
|
||||||
'-' +
|
'-' +
|
||||||
extension.replace('pdo_', '').replace('pdo-', '') +
|
extension.replace('pdo_', '').replace('pdo-', '') +
|
||||||
@ -183,7 +187,7 @@ export async function addExtensionLinux(
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
script +=
|
script +=
|
||||||
'\nadd_extension ' + extension + ' "' + install_command + '" ' + prefix;
|
'\nadd_extension ' + extension + ' "' + command + '" ' + ext_prefix;
|
||||||
});
|
});
|
||||||
return script;
|
return script;
|
||||||
}
|
}
|
||||||
@ -194,7 +198,7 @@ export async function addExtensionLinux(
|
|||||||
* @param extension_csv
|
* @param extension_csv
|
||||||
* @param version
|
* @param version
|
||||||
* @param os_version
|
* @param os_version
|
||||||
* @param log_prefix
|
* @param no_step
|
||||||
*/
|
*/
|
||||||
export async function addExtension(
|
export async function addExtension(
|
||||||
extension_csv: string,
|
extension_csv: string,
|
||||||
@ -216,9 +220,9 @@ export async function addExtension(
|
|||||||
|
|
||||||
switch (os_version) {
|
switch (os_version) {
|
||||||
case 'win32':
|
case 'win32':
|
||||||
return script + (await addExtensionWindows(extension_csv, version, pipe));
|
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, pipe));
|
||||||
default:
|
default:
|
||||||
|
@ -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
|
||||||
@ -20,6 +19,8 @@ export async function build(
|
|||||||
os_version: string
|
os_version: string
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
// taking inputs
|
// taking inputs
|
||||||
|
const name = 'setup-php';
|
||||||
|
const url = 'https://setup-php.com/support';
|
||||||
const extension_csv: string =
|
const extension_csv: string =
|
||||||
(await utils.getInput('extensions', false)) ||
|
(await utils.getInput('extensions', false)) ||
|
||||||
(await utils.getInput('extension', false)) ||
|
(await utils.getInput('extension', false)) ||
|
||||||
@ -28,27 +29,23 @@ export async function build(
|
|||||||
(await utils.getInput('ini-values', false)) ||
|
(await utils.getInput('ini-values', false)) ||
|
||||||
(await utils.getInput('ini-values-csv', false));
|
(await utils.getInput('ini-values-csv', 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)
|
|
||||||
) {
|
|
||||||
tools_csv = 'pecl, ' + tools_csv;
|
|
||||||
}
|
|
||||||
|
|
||||||
let script: string = await utils.readScript(filename, version, os_version);
|
let script: string = await utils.readScript(filename);
|
||||||
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('Support this project', os_version));
|
||||||
|
script += '\n' + (await utils.addLog('$tick', name, url, os_version));
|
||||||
|
|
||||||
return await utils.writeScript(filename, script);
|
return await utils.writeScript(filename, script);
|
||||||
}
|
}
|
||||||
@ -58,27 +55,50 @@ export async function build(
|
|||||||
*/
|
*/
|
||||||
export async function run(): Promise<void> {
|
export async function run(): Promise<void> {
|
||||||
try {
|
try {
|
||||||
const os_version: string = process.platform;
|
if ((await utils.readEnv('ImageOS')) == 'ubuntu16') {
|
||||||
let version: string = await utils.getInput('php-version', true);
|
core.setFailed(
|
||||||
version = version.length > 1 ? version.slice(0, 3) : version + '.0';
|
'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
|
);
|
||||||
let script_path = '';
|
return;
|
||||||
switch (os_version) {
|
}
|
||||||
case 'darwin':
|
core.warning(
|
||||||
case 'linux':
|
'setup-php v1 is deprecated.\nPlease upgrade to v2 - https://setup-php.com/w/Switch-to-v2'
|
||||||
script_path = await build(os_version + '.sh', version, os_version);
|
);
|
||||||
await exec('sh ' + script_path + ' ' + version + ' ' + __dirname);
|
const version: string = await utils.parseVersion(
|
||||||
break;
|
await utils.getInput('php-version', true)
|
||||||
case 'win32':
|
);
|
||||||
script_path = await build('win32.ps1', version, os_version);
|
if (parseFloat(version) < 5.6 || parseFloat(version) > 8.0) {
|
||||||
await exec('pwsh ' + script_path + ' ' + version + ' ' + __dirname);
|
core.setFailed(
|
||||||
break;
|
`setup-php v1 supports only PHP 5.6 to 8.0.\nPlease upgrade to v2 - https://setup-php.com/w/Switch-to-v2`
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (version) {
|
||||||
|
const os_version: string = process.platform;
|
||||||
|
// check the os version and run the respective script
|
||||||
|
let script_path = '';
|
||||||
|
switch (os_version) {
|
||||||
|
case 'darwin':
|
||||||
|
case 'linux':
|
||||||
|
script_path = await build(os_version + '.sh', version, os_version);
|
||||||
|
await exec('bash ' + script_path + ' ' + version + ' ' + __dirname);
|
||||||
|
break;
|
||||||
|
case 'win32':
|
||||||
|
script_path = await build('win32.ps1', version, os_version);
|
||||||
|
await exec('pwsh ' + script_path + ' ' + 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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// call the run function
|
// call the run function
|
||||||
run();
|
(async () => {
|
||||||
|
await run();
|
||||||
|
})().catch(error => {
|
||||||
|
core.setFailed(error.message);
|
||||||
|
});
|
||||||
|
@ -1,18 +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',
|
|
||||||
'phpunit.json'
|
|
||||||
);
|
|
||||||
const runner_dir: string = await utils.getInput('RUNNER_TOOL_CACHE', false);
|
|
||||||
await io.cp(config_path, runner_dir);
|
|
||||||
}
|
|
@ -18,115 +18,215 @@ add_log() {
|
|||||||
|
|
||||||
# Function to remove extensions
|
# Function to remove extensions
|
||||||
remove_extension() {
|
remove_extension() {
|
||||||
extension=$1
|
local extension=$1
|
||||||
sudo sed -i '' "/$extension/d" "$ini_file"
|
sudo sed -Ei '' "/=(.*\/)?\"?$extension/d" "$ini_file"
|
||||||
|
sudo rm -rf "$scan_dir"/*"$extension"* >/dev/null 2>&1
|
||||||
sudo rm -rf "$ext_dir"/"$extension".so >/dev/null 2>&1
|
sudo rm -rf "$ext_dir"/"$extension".so >/dev/null 2>&1
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to setup extensions
|
# Function to test if extension is loaded
|
||||||
add_extension() {
|
check_extension() {
|
||||||
extension=$1
|
local extension=$1
|
||||||
install_command=$2
|
if [ "$extension" != "mysql" ]; then
|
||||||
prefix=$3
|
php -m | grep -i -q -w "$extension"
|
||||||
if ! php -m | grep -i -q -w "$extension" && [ -e "$ext_dir/$extension.so" ]; then
|
else
|
||||||
echo "$prefix=$extension" >>"$ini_file" && add_log "$tick" "$extension" "Enabled"
|
php -m | grep -i -q "$extension"
|
||||||
elif php -m | grep -i -q -w "$extension"; then
|
|
||||||
add_log "$tick" "$extension" "Enabled"
|
|
||||||
elif ! php -m | grep -i -q -w "$extension"; then
|
|
||||||
(eval "$install_command" >/dev/null 2>&1 && add_log "$tick" "$extension" "Installed and enabled") ||
|
|
||||||
add_log "$cross" "$extension" "Could not install $extension on PHP $semver"
|
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Fuction to get the PECL version
|
# Function to install PECL extensions and accept default options
|
||||||
|
pecl_install() {
|
||||||
|
local extension=$1
|
||||||
|
yes '' | sudo pecl install -f "$extension" >/dev/null 2>&1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to get the PECL version
|
||||||
get_pecl_version() {
|
get_pecl_version() {
|
||||||
extension=$1
|
local extension=$1
|
||||||
stability=$2
|
stability="$(echo "$2" | grep -m 1 -Eio "(alpha|beta|rc|snapshot|preview)")"
|
||||||
pecl_rest='https://pecl.php.net/rest/r/'
|
pecl_rest='https://pecl.php.net/rest/r/'
|
||||||
response=$(curl -q -sSL "$pecl_rest$extension"/allreleases.xml)
|
response=$(curl "${curl_opts[@]}" "$pecl_rest$extension"/allreleases.xml)
|
||||||
pecl_version=$(echo "$response" | grep -m 1 -Eo "(\d*\.\d*\.\d*$stability\d*)")
|
pecl_version=$(echo "$response" | grep -m 1 -Eio "([0-9]+\.[0-9]+\.[0-9]+${stability}[0-9]+)")
|
||||||
if [ ! "$pecl_version" ]; then
|
if [ ! "$pecl_version" ]; then
|
||||||
pecl_version=$(echo "$response" | grep -m 1 -Eo "(\d*\.\d*\.\d*)")
|
pecl_version=$(echo "$response" | grep -m 1 -Eo "([0-9]+\.[0-9]+\.[0-9]+)")
|
||||||
fi
|
fi
|
||||||
echo "$pecl_version"
|
echo "$pecl_version"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to pre-release extensions using PECL
|
# Function to install a PECL version
|
||||||
add_unstable_extension() {
|
add_pecl_extension() {
|
||||||
extension=$1
|
local extension=$1
|
||||||
stability=$2
|
pecl_version=$2
|
||||||
prefix=$3
|
prefix=$3
|
||||||
pecl_version=$(get_pecl_version "$extension" "$stability")
|
if [[ $pecl_version =~ .*(alpha|beta|rc|snapshot|preview).* ]]; then
|
||||||
if ! php -m | grep -i -q -w "$extension" && [ -e "$ext_dir/$extension.so" ]; then
|
pecl_version=$(get_pecl_version "$extension" "$pecl_version")
|
||||||
extension_version=$(php -d="$prefix=$extension" -r "echo phpversion('$extension');")
|
fi
|
||||||
if [ "$extension_version" = "$pecl_version" ]; then
|
if ! check_extension "$extension" && [ -e "$ext_dir/$extension.so" ]; then
|
||||||
echo "$prefix=$extension" >>"$ini_file" && add_log "$tick" "$extension" "Enabled"
|
echo "$prefix=$ext_dir/$extension.so" >>"$ini_file"
|
||||||
else
|
fi
|
||||||
remove_extension "$extension"
|
ext_version=$(php -r "echo phpversion('$extension');")
|
||||||
add_extension "$extension" "sudo pecl install -f $extension-$pecl_version" "$prefix"
|
if [ "$ext_version" = "$pecl_version" ]; then
|
||||||
fi
|
add_log "$tick" "$extension" "Enabled"
|
||||||
elif php -m | grep -i -q -w "$extension"; then
|
|
||||||
extension_version=$(php -r "echo phpversion('$extension');")
|
|
||||||
if [ "$extension_version" = "$pecl_version" ]; then
|
|
||||||
add_log "$tick" "$extension" "Enabled"
|
|
||||||
else
|
|
||||||
remove_extension "$extension"
|
|
||||||
add_extension "$extension" "sudo pecl install -f $extension-$pecl_version" "$prefix"
|
|
||||||
fi
|
|
||||||
else
|
else
|
||||||
add_extension "$extension" "sudo pecl install -f $extension-$pecl_version" "$prefix"
|
remove_extension "$extension"
|
||||||
|
(
|
||||||
|
pecl_install "$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 setup a remote tool
|
# 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"
|
||||||
|
sudo curl "${curl_opts[@]}" "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
|
||||||
|
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 install a php extension from shivammathur/extensions tap.
|
||||||
|
add_brew_extension() {
|
||||||
|
formula=$1
|
||||||
|
extension=$(grep "$formula=" "$dist"/../src/configs/brew_extensions | cut -d '=' -f 2)
|
||||||
|
[[ -z "$extension" ]] && extension="$(echo "$formula" | sed -E "s/pecl_|[0-9]//g")"
|
||||||
|
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
|
||||||
|
brew install "$formula@$version"
|
||||||
|
sudo cp "$brew_prefix/opt/$formula@$version/$extension.so" "$ext_dir"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to setup extensions
|
||||||
|
add_extension() {
|
||||||
|
local extension=$1
|
||||||
|
install_command=$2
|
||||||
|
prefix=$3
|
||||||
|
if ! check_extension "$extension" && [ -e "$ext_dir/$extension.so" ]; then
|
||||||
|
echo "$prefix=$ext_dir/$extension.so" >>"$ini_file" && 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 &&
|
||||||
|
check_extension "$extension" &&
|
||||||
|
add_log "$tick" "$extension" "Installed and enabled"
|
||||||
|
) || add_log "$cross" "$extension" "Could not install $extension on PHP $semver"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to pre-release extensions using PECL
|
||||||
|
add_unstable_extension() {
|
||||||
|
local extension=$1
|
||||||
|
stability=$2
|
||||||
|
prefix=$3
|
||||||
|
pecl_version=$(get_pecl_version "$extension" "$stability")
|
||||||
|
add_pecl_extension "$extension" "$pecl_version" "$prefix"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 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() {
|
add_tool() {
|
||||||
url=$1
|
url=$1
|
||||||
tool=$2
|
tool=$2
|
||||||
|
tool_path="$tool_path_dir/$tool"
|
||||||
|
if [ ! -e "$tool_path" ]; then
|
||||||
|
rm -rf "$tool_path"
|
||||||
|
fi
|
||||||
if [ "$tool" = "composer" ]; then
|
if [ "$tool" = "composer" ]; then
|
||||||
brew install composer >/dev/null 2>&1
|
IFS="," read -r -a urls <<< "$url"
|
||||||
composer -q global config process-timeout 0
|
status_code=$(sudo curl -f -w "%{http_code}" -o "$tool_path" "${curl_opts[@]}" "${urls[0]}") ||
|
||||||
|
status_code=$(sudo curl -w "%{http_code}" -o "$tool_path" "${curl_opts[@]}" "${urls[1]}")
|
||||||
|
else
|
||||||
|
status_code=$(sudo curl -w "%{http_code}" -o "$tool_path" "${curl_opts[@]}" "$url")
|
||||||
|
fi
|
||||||
|
if [ "$status_code" != "200" ] && [[ "$url" =~ .*github.com.*releases.*latest.* ]]; then
|
||||||
|
url="${url//releases\/latest\/download/releases/download/$(curl "${curl_opts[@]}" "$(echo "$url" | cut -d '/' -f '1-5')/releases" | grep -Eo -m 1 "([0-9]+\.[0-9]+\.[0-9]+)/$(echo "$url" | sed -e "s/.*\///")" | cut -d '/' -f 1)}"
|
||||||
|
status_code=$(sudo curl -w "%{http_code}" -o "$tool_path" "${curl_opts[@]}" "$url")
|
||||||
|
fi
|
||||||
|
if [ "$status_code" = "200" ]; then
|
||||||
|
sudo chmod a+x "$tool_path"
|
||||||
|
if [ "$tool" = "composer" ]; then
|
||||||
|
configure_composer "$tool_path"
|
||||||
|
elif [ "$tool" = "phan" ]; then
|
||||||
|
add_extension fileinfo "pecl_install fileinfo" extension >/dev/null 2>&1
|
||||||
|
add_extension ast "pecl_install ast" extension >/dev/null 2>&1
|
||||||
|
elif [ "$tool" = "phive" ]; then
|
||||||
|
add_extension curl "pecl_install curl" extension >/dev/null 2>&1
|
||||||
|
add_extension mbstring "pecl_install mbstring" extension >/dev/null 2>&1
|
||||||
|
add_extension xml "pecl_install 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"
|
||||||
|
fi
|
||||||
add_log "$tick" "$tool" "Added"
|
add_log "$tick" "$tool" "Added"
|
||||||
else
|
else
|
||||||
tool_path=/usr/local/bin/"$tool"
|
add_log "$cross" "$tool" "Could not setup $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" = "phive" ]; then
|
|
||||||
add_extension curl >/dev/null 2>&1
|
|
||||||
add_extension mbstring >/dev/null 2>&1
|
|
||||||
add_extension xml >/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" >/dev/null 2>&1
|
|
||||||
fi
|
|
||||||
add_log "$tick" "$tool" "Added"
|
|
||||||
else
|
|
||||||
add_log "$cross" "$tool" "Could not setup $tool"
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to add a tool using composer
|
# Function to add a tool using composer
|
||||||
add_composer_tool() {
|
add_composertool() {
|
||||||
tool=$1
|
tool=$1
|
||||||
release=$2
|
release=$2
|
||||||
prefix=$3
|
prefix=$3
|
||||||
(
|
(
|
||||||
|
sudo rm -f "$composer_lock" >/dev/null 2>&1 || true
|
||||||
composer global require "$prefix$release" >/dev/null 2>&1 &&
|
composer global require "$prefix$release" >/dev/null 2>&1 &&
|
||||||
sudo ln -sf "$(composer -q global config home)"/vendor/bin/"$tool" /usr/local/bin/"$tool" &&
|
|
||||||
add_log "$tick" "$tool" "Added"
|
add_log "$tick" "$tool" "Added"
|
||||||
) || add_log "$cross" "$tool" "Could not setup $tool"
|
) || add_log "$cross" "$tool" "Could not setup $tool"
|
||||||
|
if [ -e "$composer_bin/composer" ]; then
|
||||||
|
sudo cp -p "$tool_path_dir/composer" "$composer_bin"
|
||||||
|
fi
|
||||||
|
if [ "$tool" = "codeception" ]; then
|
||||||
|
sudo ln -s "$composer_bin"/codecept "$composer_bin"/codeception
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to configure PECL
|
# Function to configure PECL
|
||||||
configure_pecl() {
|
configure_pecl() {
|
||||||
for tool in pear pecl; do
|
for tool in pear pecl; do
|
||||||
sudo "$tool" config-set php_ini "$ini_file" >/dev/null 2>&1
|
sudo "$tool" config-set php_ini "$ini_file" >/dev/null 2>&1
|
||||||
sudo "$tool" config-set auto_discover 1 >/dev/null 2>&1
|
|
||||||
sudo "$tool" channel-update "$tool".php.net >/dev/null 2>&1
|
sudo "$tool" channel-update "$tool".php.net >/dev/null 2>&1
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
@ -136,27 +236,114 @@ add_pecl() {
|
|||||||
add_log "$tick" "PECL" "Added"
|
add_log "$tick" "PECL" "Added"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Function to backup all libraries of a formula
|
||||||
|
link_libraries() {
|
||||||
|
formula=$1
|
||||||
|
formula_prefix="$(brew --prefix "$formula")"
|
||||||
|
sudo mkdir -p "$formula_prefix"/lib
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
patch_brew() {
|
||||||
|
formula_installer="$brew_repo"/Library/Homebrew/formula_installer.rb
|
||||||
|
code=" keg.link\(verbose: verbose\?"
|
||||||
|
sudo sed -Ei '' "s/$code.*/$code, overwrite: true\)/" "$formula_installer"
|
||||||
|
# shellcheck disable=SC2064
|
||||||
|
trap "sudo sed -Ei '' 's/$code.*/$code, overwrite: overwrite?\)/' $formula_installer" exit
|
||||||
|
}
|
||||||
|
|
||||||
|
# Helper function to update the dependencies.
|
||||||
|
update_dependencies_helper() {
|
||||||
|
dependency=$1
|
||||||
|
curl -o "$tap_dir/homebrew/homebrew-core/Formula/$formula.rb" "${curl_opts[@]}" "https://raw.githubusercontent.com/Homebrew/homebrew-core/master/Formula/$formula.rb"
|
||||||
|
link_libraries "$dependency"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to update dependencies
|
||||||
|
update_dependencies() {
|
||||||
|
if ! [ -e /tmp/update_dependencies ]; then
|
||||||
|
if [ "${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[@]}"
|
||||||
|
fi
|
||||||
|
echo '' | sudo tee /tmp/update_dependencies >/dev/null 2>&1
|
||||||
|
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 and composer
|
# Function to setup PHP and composer
|
||||||
setup_php_and_composer() {
|
setup_php() {
|
||||||
export HOMEBREW_NO_INSTALL_CLEANUP=TRUE
|
add_brew_tap shivammathur/homebrew-php
|
||||||
brew tap shivammathur/homebrew-php >/dev/null 2>&1
|
update_dependencies
|
||||||
brew install shivammathur/php/php@"$version" >/dev/null 2>&1
|
brew upgrade shivammathur/php/php@"$version" 2>/dev/null || brew install shivammathur/php/php@"$version"
|
||||||
brew link --force --overwrite php@"$version" >/dev/null 2>&1
|
brew link --force --overwrite php@"$version"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to configure PHP
|
||||||
|
configure_php() {
|
||||||
|
(
|
||||||
|
echo -e "date.timezone=UTC\nmemory_limit=-1"
|
||||||
|
[[ "$version" =~ 8.0 ]] && echo -e "opcache.enable=1\nopcache.jit_buffer_size=256M\nopcache.jit=1235"
|
||||||
|
[[ "$version" =~ 7.[2-4]|8.0 ]] && echo -e "xdebug.mode=coverage"
|
||||||
|
) | sudo tee -a "$ini_file" >/dev/null
|
||||||
}
|
}
|
||||||
|
|
||||||
# Variables
|
# Variables
|
||||||
tick="✓"
|
tick="✓"
|
||||||
cross="✗"
|
cross="✗"
|
||||||
version=$1
|
version=$1
|
||||||
|
dist=$2
|
||||||
|
tool_path_dir="/usr/local/bin"
|
||||||
|
curl_opts=(-sL)
|
||||||
|
composer_home="$HOME/.composer"
|
||||||
|
composer_bin="$composer_home/vendor/bin"
|
||||||
|
composer_json="$composer_home/composer.json"
|
||||||
|
composer_lock="$composer_home/composer.lock"
|
||||||
|
brew_prefix="$(brew --prefix)"
|
||||||
|
brew_repo="$(brew --repository)"
|
||||||
|
tap_dir="$brew_repo"/Library/Taps
|
||||||
|
existing_version=$(get_brewed_php)
|
||||||
|
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
|
||||||
|
|
||||||
# Setup PHP and composer
|
# Setup PHP
|
||||||
step_log "Setup PHP"
|
step_log "Setup PHP"
|
||||||
setup_php_and_composer
|
if [ "$existing_version" != "$version" ]; then
|
||||||
|
setup_php >/dev/null 2>&1
|
||||||
|
status="Installed"
|
||||||
|
else
|
||||||
|
status="Found"
|
||||||
|
fi
|
||||||
ini_file=$(php -d "date.timezone=UTC" --ini | grep "Loaded Configuration" | sed -e "s|.*:s*||" | sed "s/ //g")
|
ini_file=$(php -d "date.timezone=UTC" --ini | grep "Loaded Configuration" | sed -e "s|.*:s*||" | sed "s/ //g")
|
||||||
echo "date.timezone=UTC" >>"$ini_file"
|
sudo chmod 777 "$ini_file" "$tool_path_dir"
|
||||||
ext_dir=$(php -i | grep "extension_dir => /usr" | sed -e "s|.*=> s*||")
|
configure_php
|
||||||
sudo chmod 777 "$ini_file"
|
ext_dir=$(php -i | grep -Ei "extension_dir => /" | sed -e "s|.*=> s*||")
|
||||||
mkdir -p "$(pecl config-get ext_dir)"
|
scan_dir=$(php --ini | grep additional | sed -e "s|.*: s*||")
|
||||||
|
sudo mkdir -m 777 -p "$ext_dir" "$HOME/.composer"
|
||||||
semver=$(php -v | head -n 1 | cut -f 2 -d ' ')
|
semver=$(php -v | head -n 1 | cut -f 2 -d ' ')
|
||||||
add_log "$tick" "PHP" "Installed PHP $semver"
|
if [ "${semver%.*}" != "$version" ]; then
|
||||||
|
add_log "$cross" "PHP" "Could not setup PHP $version"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
configure_pecl
|
configure_pecl
|
||||||
|
sudo cp "$dist"/../src/configs/*.json "$RUNNER_TOOL_CACHE/"
|
||||||
|
add_log "$tick" "PHP" "$status PHP $semver"
|
||||||
|
@ -1,15 +0,0 @@
|
|||||||
php_h="https://raw.githubusercontent.com/php/php-src/PHP-$2/main/php.h"
|
|
||||||
os=$(uname -s)
|
|
||||||
if [ "$os" = "Linux" ]; then
|
|
||||||
apiv=$(curl -sSL --retry 5 "$php_h" | grep "PHP_API_VERSION" | cut -d' ' -f 3)
|
|
||||||
dir="/usr/lib/php/$apiv"
|
|
||||||
sudo mkdir -p "$dir" && sudo chown -R "$USER":"$(id -g -n)" /usr/lib/php
|
|
||||||
elif [ "$os" = "Darwin" ]; then
|
|
||||||
apiv=$(curl -sSL --retry 5 "$php_h" | grep "PHP_API_VERSION" | cut -d' ' -f 3)
|
|
||||||
dir="/usr/local/lib/php/pecl/$apiv"
|
|
||||||
else
|
|
||||||
dir='C:\\tools\\php\\ext'
|
|
||||||
fi
|
|
||||||
hash=$(echo -n "$1" | openssl dgst -sha256 | cut -d ' ' -f 2)
|
|
||||||
echo "::set-output name=ext_dir::$dir"
|
|
||||||
echo "::set-output name=ext_hash::$hash"
|
|
@ -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
|
||||||
|
sudo DEBIAN_FRONTEND=noninteractive apt-fast install -y libgearman-dev
|
||||||
|
enable_extension gearman extension
|
||||||
|
if ! check_extension gearman; then
|
||||||
|
status="Installed and enabled"
|
||||||
|
sudo DEBIAN_FRONTEND=noninteractive apt-fast install -y php"${version:?}"-gearman || pecl_install gearman
|
||||||
|
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
|
if check_extension gearman; then
|
||||||
|
add_log "${tick:?}" "gearman" "$status"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
add_gearman
|
||||||
|
@ -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
|
|
@ -18,7 +18,7 @@ Function Install-Phalcon() {
|
|||||||
} else {
|
} else {
|
||||||
$installed = Get-Php -Path $php_dir
|
$installed = Get-Php -Path $php_dir
|
||||||
$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 -UseBasicParsing -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 -UseBasicParsing -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
|
||||||
|
@ -20,10 +20,9 @@ update_ppa() {
|
|||||||
|
|
||||||
# Function to install phalcon
|
# Function to install phalcon
|
||||||
install_phalcon() {
|
install_phalcon() {
|
||||||
extension=$1
|
local extension=$1
|
||||||
version=$2
|
version=$2
|
||||||
(sudo DEBIAN_FRONTEND=noninteractive apt-get install -y "php$version-$extension" >/dev/null 2>&1 && add_log "$tick" "$extension" "Installed and enabled") ||
|
(update_ppa && sudo DEBIAN_FRONTEND=noninteractive apt-get install -y "php$version-psr" "php$version-$extension" >/dev/null 2>&1 && add_log "$tick" "$extension" "Installed and enabled") ||
|
||||||
(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"
|
add_log "$cross" "$extension" "Could not install $extension on PHP $semver"
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -36,7 +35,7 @@ tick="✓"
|
|||||||
cross="✗"
|
cross="✗"
|
||||||
|
|
||||||
if [ "$extension_major_version" = "4" ]; then
|
if [ "$extension_major_version" = "4" ]; then
|
||||||
if [ -e "$ext_dir/psr.so" ]; 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
|
echo "extension=psr.so" | sudo tee -a "$ini_file" >/dev/null 2>&1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -69,4 +68,4 @@ if [ "$extension_major_version" = "3" ]; then
|
|||||||
else
|
else
|
||||||
install_phalcon "$1" "$2"
|
install_phalcon "$1" "$2"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
@ -1,17 +0,0 @@
|
|||||||
extension=$1
|
|
||||||
extension_major=${extension: -1}
|
|
||||||
php_version=$2
|
|
||||||
ini_file=$(php -d "date.timezone=UTC" --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
|
|
||||||
echo "extension=psr" >>"$ini_file"
|
|
||||||
echo "extension=phalcon" >>"$ini_file"
|
|
||||||
phalcon_version=$(php -d="extension=phalcon" -r "echo phpversion('phalcon');" | cut -d'.' -f 1)
|
|
||||||
if [ "$phalcon_version" != "$extension_major" ]; then
|
|
||||||
brew tap shivammathur/homebrew-phalcon
|
|
||||||
brew install phalcon@"$php_version"_"$extension_major"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
brew tap shivammathur/homebrew-phalcon
|
|
||||||
brew install phalcon@"$php_version"_"$extension_major"
|
|
||||||
fi
|
|
@ -1,3 +0,0 @@
|
|||||||
cd ~ && git clone --depth=1 https://github.com/xdebug/xdebug.git
|
|
||||||
cd xdebug || echo "Failed to clone Xdebug"
|
|
||||||
sudo ./rebuild.sh
|
|
@ -1,6 +0,0 @@
|
|||||||
cd ~ && git clone --depth=1 https://github.com/xdebug/xdebug.git
|
|
||||||
cd xdebug || echo "Failed to clone Xdebug"
|
|
||||||
sudo phpize
|
|
||||||
sudo ./configure
|
|
||||||
sudo make
|
|
||||||
sudo cp modules/xdebug.so "$(php -i | grep "extension_dir => /opt" | sed -e "s|.*=> s*||")"
|
|
@ -16,168 +16,239 @@ add_log() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to update php ppa
|
# Function to backup and cleanup package lists.
|
||||||
update_ppa() {
|
cleanup_lists() {
|
||||||
if [ "$ppa_updated" = "false" ]; then
|
ppa_prefix=${1-ondrej}
|
||||||
find /etc/apt/sources.list.d -type f -name 'ondrej-ubuntu-php*.list' -exec sudo DEBIAN_FRONTEND=noninteractive apt-fast update -o Dir::Etc::sourcelist="{}" ';' >/dev/null 2>&1
|
if [ ! -e /etc/apt/sources.list.d.save ]; then
|
||||||
ppa_updated="true"
|
sudo mv /etc/apt/sources.list.d /etc/apt/sources.list.d.save
|
||||||
|
sudo mkdir /etc/apt/sources.list.d
|
||||||
|
sudo mv /etc/apt/sources.list.d.save/*"${ppa_prefix}"*.list /etc/apt/sources.list.d/
|
||||||
|
trap "sudo mv /etc/apt/sources.list.d.save/*.list /etc/apt/sources.list.d/ 2>/dev/null" exit
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Function to add ppa:ondrej/php.
|
||||||
|
add_ppa() {
|
||||||
|
ppa=${1:-ondrej/php}
|
||||||
|
if ! apt-cache policy | grep -q "$ppa"; then
|
||||||
|
cleanup_lists "$(dirname "$ppa")"
|
||||||
|
LC_ALL=C.UTF-8 sudo apt-add-repository ppa:"$ppa" -y
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to update the package lists.
|
||||||
|
update_lists() {
|
||||||
|
if [ ! -e /tmp/setup_php ]; then
|
||||||
|
add_ppa ondrej/php >/dev/null 2>&1
|
||||||
|
cleanup_lists
|
||||||
|
sudo "$debconf_fix" apt-get update >/dev/null 2>&1
|
||||||
|
echo '' | sudo tee /tmp/setup_php >/dev/null 2>&1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to configure PECL
|
||||||
configure_pecl() {
|
configure_pecl() {
|
||||||
if [ "$pecl_config" = "false" ] && [ -e /usr/bin/pecl ]; then
|
if ! [ -e /tmp/pecl_config ]; then
|
||||||
for tool in pear pecl; do
|
if ! command -v pecl >/dev/null || ! command -v pear >/dev/null; then
|
||||||
sudo "$tool" config-set php_ini "$ini_file" >/dev/null 2>&1
|
add_pecl >/dev/null 2>&1
|
||||||
sudo "$tool" config-set auto_discover 1 >/dev/null 2>&1
|
fi
|
||||||
sudo "$tool" channel-update "$tool".php.net >/dev/null 2>&1
|
for script in pear pecl; do
|
||||||
|
sudo "$script" config-set php_ini "${pecl_file:-$ini_file}" >/dev/null 2>&1
|
||||||
|
sudo "$script" channel-update "$script".php.net >/dev/null 2>&1
|
||||||
done
|
done
|
||||||
pecl_config="true"
|
echo '' | sudo tee /tmp/pecl_config >/dev/null 2>&1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Fuction to get the PECL version
|
# Function to get the PECL version
|
||||||
get_pecl_version() {
|
get_pecl_version() {
|
||||||
extension=$1
|
local extension=$1
|
||||||
stability=$2
|
stability="$(echo "$2" | grep -m 1 -Eio "(alpha|beta|rc|snapshot|preview)")"
|
||||||
pecl_rest='https://pecl.php.net/rest/r/'
|
pecl_rest='https://pecl.php.net/rest/r/'
|
||||||
response=$(curl -q -sSL "$pecl_rest$extension"/allreleases.xml)
|
response=$(curl "${curl_opts[@]}" "$pecl_rest$extension"/allreleases.xml)
|
||||||
pecl_version=$(echo "$response" | grep -m 1 -Po "(\d*\.\d*\.\d*$stability\d*)")
|
pecl_version=$(echo "$response" | grep -m 1 -Eio "([0-9]+\.[0-9]+\.[0-9]+${stability}[0-9]+)")
|
||||||
if [ ! "$pecl_version" ]; then
|
if [ ! "$pecl_version" ]; then
|
||||||
pecl_version=$(echo "$response" | grep -m 1 -Po "(\d*\.\d*\.\d*)")
|
pecl_version=$(echo "$response" | grep -m 1 -Eo "([0-9]+\.[0-9]+\.[0-9]+)")
|
||||||
fi
|
fi
|
||||||
echo "$pecl_version"
|
echo "$pecl_version"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to setup extensions
|
# Function to install PECL extensions and accept default options
|
||||||
add_extension() {
|
pecl_install() {
|
||||||
extension=$1
|
local extension=$1
|
||||||
install_command=$2
|
yes '' | sudo pecl install -f "$extension" >/dev/null 2>&1
|
||||||
prefix=$3
|
}
|
||||||
if ! php -m | grep -i -q -w "$extension" && [ -e "$ext_dir/$extension.so" ]; then
|
|
||||||
# shellcheck disable=SC2046
|
# Function to enable existing extensions.
|
||||||
$apt_install $(apt-cache depends php"$version"-"$extension" | awk '/Depends:/{print$2}') >/dev/null 2>&1
|
enable_extension() {
|
||||||
echo "$prefix=$extension" >>"$ini_file" && add_log "$tick" "$extension" "Enabled"
|
sudo find /var/lib/php/modules/"$version" -path "*disabled*$1" -delete
|
||||||
elif php -m | grep -i -q -w "$extension"; then
|
if ! check_extension "$1" && [ -e "$ext_dir/$1.so" ]; then
|
||||||
add_log "$tick" "$extension" "Enabled"
|
echo "$2=$ext_dir/$1.so" | sudo tee -a "$pecl_file" >/dev/null
|
||||||
elif ! php -m | grep -i -q -w "$extension"; then
|
fi
|
||||||
(eval "$install_command" && add_log "$tick" "$extension" "Installed and enabled") ||
|
}
|
||||||
(update_ppa && eval "$install_command" && add_log "$tick" "$extension" "Installed and enabled") ||
|
|
||||||
(sudo pecl install -f "$extension" >/dev/null 2>&1 && add_log "$tick" "$extension" "Installed and enabled") ||
|
# Function to test if extension is loaded
|
||||||
add_log "$cross" "$extension" "Could not install $extension on PHP $semver"
|
check_extension() {
|
||||||
|
local extension=$1
|
||||||
|
if [ "$extension" != "mysql" ]; then
|
||||||
|
php -m | grep -i -q -w "$extension"
|
||||||
|
else
|
||||||
|
php -m | grep -i -q "$extension"
|
||||||
fi
|
fi
|
||||||
sudo chmod 777 "$ini_file"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to delete extensions
|
# Function to delete extensions
|
||||||
delete_extension() {
|
delete_extension() {
|
||||||
extension=$1
|
local extension=$1
|
||||||
sudo sed -i "/$extension/d" "$ini_file"
|
sudo sed -Ei "/=(.*\/)?\"?$extension/d" "$ini_file"
|
||||||
sudo rm -rf /etc/php/"$version"/cli/conf.d/*"$extension"* >/dev/null 2>&1
|
sudo sed -Ei "/=(.*\/)?\"?$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
|
sudo rm -rf "$ext_dir"/"$extension".so >/dev/null 2>&1
|
||||||
|
sudo sed -i "/Package: php$version-$extension/,/^$/d" /var/lib/dpkg/status
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to disable and delete extensions
|
# Function to disable and delete extensions
|
||||||
remove_extension() {
|
remove_extension() {
|
||||||
extension=$1
|
local extension=$1
|
||||||
if [ -e /etc/php/"$version"/mods-available/"$extension".ini ]; then
|
if [ -e /etc/php/"$version"/mods-available/"$extension".ini ]; then
|
||||||
sudo phpdismod -v "$version" "$extension"
|
sudo phpdismod -v "$version" "$extension"
|
||||||
fi
|
fi
|
||||||
delete_extension "$extension"
|
delete_extension "$extension"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Function to setup extensions
|
||||||
|
add_extension() {
|
||||||
|
local extension=$1
|
||||||
|
install_command=$2
|
||||||
|
prefix=$3
|
||||||
|
enable_extension "$extension" "$prefix"
|
||||||
|
if check_extension "$extension"; then
|
||||||
|
add_log "$tick" "$extension" "Enabled"
|
||||||
|
elif ! check_extension "$extension"; then
|
||||||
|
eval "$install_command" >/dev/null 2>&1 ||
|
||||||
|
(update_lists && eval "$install_command" >/dev/null 2>&1) || pecl_install "$extension"
|
||||||
|
(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
|
# Function to install a PECL version
|
||||||
add_pecl_extension() {
|
add_pecl_extension() {
|
||||||
extension=$1
|
local extension=$1
|
||||||
pecl_version=$2
|
pecl_version=$2
|
||||||
(sudo pecl install -f "$extension-$pecl_version" >/dev/null 2>&1 &&
|
prefix=$3
|
||||||
add_log "$tick" "$extension" "Installed and enabled") ||
|
configure_pecl
|
||||||
add_log "$cross" "$extension" "Could not install $extension-$pecl_version on PHP $semver"
|
if [[ $pecl_version =~ .*(alpha|beta|rc|snapshot|preview).* ]]; then
|
||||||
|
pecl_version=$(get_pecl_version "$extension" "$pecl_version")
|
||||||
|
fi
|
||||||
|
enable_extension "$extension" "$prefix"
|
||||||
|
ext_version=$(php -r "echo phpversion('$extension');")
|
||||||
|
if [ "$ext_version" = "$pecl_version" ]; then
|
||||||
|
add_log "$tick" "$extension" "Enabled"
|
||||||
|
else
|
||||||
|
delete_extension "$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
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to pre-release extensions using PECL
|
# Function to pre-release extensions using PECL
|
||||||
add_unstable_extension() {
|
add_unstable_extension() {
|
||||||
extension=$1
|
local extension=$1
|
||||||
stability=$2
|
stability=$2
|
||||||
prefix=$3
|
prefix=$3
|
||||||
pecl_version=$(get_pecl_version "$extension" "$stability")
|
pecl_version=$(get_pecl_version "$extension" "$stability")
|
||||||
if ! php -m | grep -i -q -w "$extension" && [ -e "$ext_dir/$extension.so" ]; then
|
add_pecl_extension "$extension" "$pecl_version" "$prefix"
|
||||||
extension_version=$(php -d="$prefix=$extension" -r "echo phpversion('$extension');")
|
}
|
||||||
if [ "$extension_version" = "$pecl_version" ]; then
|
|
||||||
echo "$prefix=$extension" >>"$ini_file" && add_log "$tick" "$extension" "Enabled"
|
# Function to configure composer
|
||||||
else
|
configure_composer() {
|
||||||
delete_extension "$extension"
|
tool_path=$1
|
||||||
add_pecl_extension "$extension" "$pecl_version"
|
sudo ln -sf "$tool_path" "$tool_path.phar"
|
||||||
fi
|
php -r "try {\$p=new Phar('$tool_path.phar', 0);exit(0);} catch(Exception \$e) {exit(1);}"
|
||||||
elif php -m | grep -i -q -w "$extension"; then
|
if [ $? -eq 1 ]; then
|
||||||
extension_version=$(php -r "echo phpversion('$extension');")
|
add_log "$cross" "composer" "Could not download composer"
|
||||||
if [ "$extension_version" = "$pecl_version" ]; then
|
exit 1;
|
||||||
add_log "$tick" "$extension" "Enabled"
|
fi
|
||||||
else
|
if ! [ -d "$composer_home" ]; then
|
||||||
delete_extension "$extension"
|
sudo -u "$(id -un)" -g "$(id -gn)" mkdir -p -m=00755 "$composer_home"
|
||||||
add_pecl_extension "$extension" "$pecl_version"
|
|
||||||
fi
|
|
||||||
else
|
else
|
||||||
add_pecl_extension "$extension" "$pecl_version"
|
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
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to update extension
|
# Function to setup a remote tool.
|
||||||
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_ppa
|
|
||||||
fi
|
|
||||||
$apt_install php"$version"-"$extension"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to setup a remote tool
|
|
||||||
add_tool() {
|
add_tool() {
|
||||||
url=$1
|
url=$1
|
||||||
tool=$2
|
tool=$2
|
||||||
tool_path=/usr/local/bin/"$tool"
|
tool_path="$tool_path_dir/$tool"
|
||||||
if [ ! -e "$tool_path" ]; then
|
if [ ! -e "$tool_path" ]; then
|
||||||
rm -rf "$tool_path"
|
rm -rf "$tool_path"
|
||||||
fi
|
fi
|
||||||
status_code=$(sudo curl -s -w "%{http_code}" -o "$tool_path" -L "$url")
|
if [ "$tool" = "composer" ]; then
|
||||||
|
IFS="," read -r -a urls <<< "$url"
|
||||||
|
status_code=$(sudo curl -f -w "%{http_code}" -o "$tool_path" "${curl_opts[@]}" "${urls[0]}") ||
|
||||||
|
status_code=$(sudo curl -w "%{http_code}" -o "$tool_path" "${curl_opts[@]}" "${urls[1]}")
|
||||||
|
else
|
||||||
|
status_code=$(sudo curl -w "%{http_code}" -o "$tool_path" "${curl_opts[@]}" "$url")
|
||||||
|
fi
|
||||||
|
if [ "$status_code" != "200" ] && [[ "$url" =~ .*github.com.*releases.*latest.* ]]; then
|
||||||
|
url="${url//releases\/latest\/download/releases/download/$(curl "${curl_opts[@]}" "$(echo "$url" | cut -d '/' -f '1-5')/releases" | grep -Eo -m 1 "([0-9]+\.[0-9]+\.[0-9]+)/$(echo "$url" | sed -e "s/.*\///")" | cut -d '/' -f 1)}"
|
||||||
|
status_code=$(sudo curl -w "%{http_code}" -o "$tool_path" "${curl_opts[@]}" "$url")
|
||||||
|
fi
|
||||||
if [ "$status_code" = "200" ]; then
|
if [ "$status_code" = "200" ]; then
|
||||||
sudo chmod a+x "$tool_path"
|
sudo chmod a+x "$tool_path"
|
||||||
if [ "$tool" = "composer" ]; then
|
if [ "$tool" = "composer" ]; then
|
||||||
composer -q global config process-timeout 0
|
configure_composer "$tool_path"
|
||||||
elif [ "$tool" = "cs2pr" ]; then
|
elif [ "$tool" = "cs2pr" ]; then
|
||||||
sudo sed -i 's/\r$//; s/exit(9)/exit(0)/' "$tool_path"
|
sudo sed -i 's/\r$//; s/exit(9)/exit(0)/' "$tool_path"
|
||||||
elif [ "$tool" = "phive" ]; then
|
elif [ "$tool" = "phive" ]; then
|
||||||
add_extension curl >/dev/null 2>&1
|
add_extension curl "$apt_install php$version-curl" extension >/dev/null 2>&1
|
||||||
add_extension mbstring >/dev/null 2>&1
|
add_extension mbstring "$apt_install php$version-mbstring" extension >/dev/null 2>&1
|
||||||
add_extension xml >/dev/null 2>&1
|
add_extension xml "$apt_install php$version-xml" extension >/dev/null 2>&1
|
||||||
fi
|
fi
|
||||||
add_log "$tick" "$tool" "Added"
|
add_log "$tick" "$tool" "Added"
|
||||||
else
|
else
|
||||||
add_log "$cross" "$tool" "Could not setup $tool"
|
add_log "$cross" "$tool" "Could not setup $tool"
|
||||||
|
[ "$tool" = "composer" ] && exit 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to setup a tool using composer
|
# Function to setup a tool using composer
|
||||||
add_composer_tool() {
|
add_composertool() {
|
||||||
tool=$1
|
tool=$1
|
||||||
release=$2
|
release=$2
|
||||||
prefix=$3
|
prefix=$3
|
||||||
(
|
(
|
||||||
|
sudo rm -f "$composer_lock" >/dev/null 2>&1 || true
|
||||||
composer global require "$prefix$release" >/dev/null 2>&1 &&
|
composer global require "$prefix$release" >/dev/null 2>&1 &&
|
||||||
sudo ln -sf "$(composer -q global config home)"/vendor/bin/"$tool" /usr/local/bin/"$tool" &&
|
|
||||||
add_log "$tick" "$tool" "Added"
|
add_log "$tick" "$tool" "Added"
|
||||||
) || add_log "$cross" "$tool" "Could not setup $tool"
|
) || add_log "$cross" "$tool" "Could not setup $tool"
|
||||||
|
if [ -e "$composer_bin/composer" ]; then
|
||||||
|
sudo cp -p "$tool_path_dir/composer" "$composer_bin"
|
||||||
|
fi
|
||||||
|
if [ "$tool" = "codeception" ]; then
|
||||||
|
sudo ln -s "$composer_bin"/codecept "$composer_bin"/codeception
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# 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
|
if ! [ -e "/usr/bin/phpize$version" ] || ! [ -e "/usr/bin/php-config$version" ]; then
|
||||||
$apt_install php"$version"-dev php"$version"-xml >/dev/null 2>&1
|
update_lists && $apt_install php"$version"-dev php"$version"-xml >/dev/null 2>&1
|
||||||
fi
|
fi
|
||||||
sudo update-alternatives --set php-config /usr/bin/php-config"$version" >/dev/null 2>&1
|
sudo update-alternatives --set php-config /usr/bin/php-config"$version" >/dev/null 2>&1
|
||||||
sudo update-alternatives --set phpize /usr/bin/phpize"$version" >/dev/null 2>&1
|
sudo update-alternatives --set phpize /usr/bin/phpize"$version" >/dev/null 2>&1
|
||||||
@ -186,15 +257,17 @@ add_devtools() {
|
|||||||
|
|
||||||
# Function to setup the nightly build from master branch
|
# Function to setup the nightly build from master branch
|
||||||
setup_master() {
|
setup_master() {
|
||||||
tar_file=php_"$version"%2Bubuntu"$(lsb_release -r -s)".tar.xz
|
curl "${curl_opts[@]}" https://github.com/shivammathur/php-builder/releases/latest/download/install.sh | bash -s "github"
|
||||||
install_dir=~/php/"$version"
|
}
|
||||||
sudo mkdir -m 777 -p ~/php
|
|
||||||
$apt_install libicu-dev >/dev/null 2>&1
|
add_packaged_php() {
|
||||||
curl -o "$tar_file" -L https://bintray.com/shivammathur/php/download_file?file_path="$tar_file" >/dev/null 2>&1
|
if [ "${use_package_cache:-true}" = "false" ]; then
|
||||||
sudo tar xf "$tar_file" -C ~/php >/dev/null 2>&1
|
update_lists
|
||||||
rm -rf "$tar_file"
|
IFS=' ' read -r -a packages <<<"$(echo "cli curl mbstring xml intl" | sed "s/[^ ]*/php$version-&/g")"
|
||||||
sudo ln -sf -S "$version" "$install_dir"/bin/* /usr/bin/
|
$apt_install "${packages[@]}"
|
||||||
sudo ln -sf "$install_dir"/etc/php.ini /etc/php.ini
|
else
|
||||||
|
curl "${curl_opts[@]}" https://github.com/shivammathur/php-ubuntu/releases/latest/download/install.sh | bash -s "$version"
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to setup PECL
|
# Function to setup PECL
|
||||||
@ -211,57 +284,78 @@ add_pecl() {
|
|||||||
switch_version() {
|
switch_version() {
|
||||||
for tool in pear pecl php phar phar.phar php-cgi php-config phpize phpdbg; do
|
for tool in pear pecl php phar phar.phar php-cgi php-config phpize phpdbg; do
|
||||||
if [ -e "/usr/bin/$tool$version" ]; then
|
if [ -e "/usr/bin/$tool$version" ]; then
|
||||||
sudo update-alternatives --set $tool /usr/bin/"$tool$version" >/dev/null 2>&1
|
sudo update-alternatives --set $tool /usr/bin/"$tool$version"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Function to get PHP version in semver format
|
||||||
|
php_semver() {
|
||||||
|
if [ ! "$version" = "8.0" ]; 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 configure PHP
|
||||||
|
configure_php() {
|
||||||
|
(
|
||||||
|
echo -e "date.timezone=UTC\nmemory_limit=-1"
|
||||||
|
[[ "$version" =~ 8.0 ]] && echo -e "opcache.enable=1\nopcache.jit_buffer_size=256M\nopcache.jit=1235"
|
||||||
|
[[ "$version" =~ 7.[2-4]|8.0 ]] && echo -e "xdebug.mode=coverage"
|
||||||
|
) | sudo tee -a "$pecl_file" >/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
# Variables
|
# Variables
|
||||||
tick="✓"
|
tick="✓"
|
||||||
cross="✗"
|
cross="✗"
|
||||||
ppa_updated="false"
|
|
||||||
pecl_config="false"
|
|
||||||
version=$1
|
version=$1
|
||||||
apt_install="sudo DEBIAN_FRONTEND=noninteractive apt-fast install -y"
|
dist=$2
|
||||||
existing_version=$(php-config --version | cut -c 1-3)
|
debconf_fix="DEBIAN_FRONTEND=noninteractive"
|
||||||
|
apt_install="sudo $debconf_fix apt-fast install -y --no-install-recommends"
|
||||||
|
tool_path_dir="/usr/local/bin"
|
||||||
|
curl_opts=(-sL)
|
||||||
|
composer_home="$HOME/.composer"
|
||||||
|
composer_bin="$composer_home/vendor/bin"
|
||||||
|
composer_json="$composer_home/composer.json"
|
||||||
|
composer_lock="$composer_home/composer.lock"
|
||||||
|
existing_version=$(php-config --version 2>/dev/null | cut -c 1-3)
|
||||||
|
|
||||||
# Setup PHP
|
# Setup PHP
|
||||||
step_log "Setup PHP"
|
step_log "Setup PHP"
|
||||||
sudo mkdir -p /var/run
|
sudo mkdir -m 777 -p "$HOME/.composer" /var/run /run/php
|
||||||
sudo mkdir -p /run/php
|
. /etc/lsb-release
|
||||||
|
|
||||||
if [ "$existing_version" != "$version" ]; then
|
if [ "$existing_version" != "$version" ]; then
|
||||||
if [ ! -e "/usr/bin/php$version" ]; then
|
if [ ! -e "/usr/bin/php$version" ]; then
|
||||||
update_ppa
|
|
||||||
if [ "$version" = "8.0" ]; then
|
if [ "$version" = "8.0" ]; then
|
||||||
setup_master
|
setup_master >/dev/null 2>&1
|
||||||
else
|
else
|
||||||
$apt_install php"$version" php"$version"-curl php"$version"-mbstring php"$version"-xml >/dev/null 2>&1
|
add_packaged_php >/dev/null 2>&1
|
||||||
fi
|
fi
|
||||||
status="installed"
|
status="Installed"
|
||||||
else
|
else
|
||||||
status="switched"
|
status="Switched to"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
switch_version
|
switch_version >/dev/null 2>&1
|
||||||
|
|
||||||
if [ "$version" = "8.0" ]; then
|
|
||||||
semver=$(php -v | head -n 1 | cut -f 2 -d ' ')
|
|
||||||
else
|
|
||||||
semver=$(php -v | head -n 1 | cut -f 2 -d ' ' | cut -f 1 -d '-')
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$status" != "switched" ]; then
|
|
||||||
status="Installed PHP $semver"
|
|
||||||
else
|
|
||||||
status="Switched to PHP $semver"
|
|
||||||
fi
|
|
||||||
else
|
else
|
||||||
semver=$(php -v | head -n 1 | cut -f 2 -d ' ' | cut -f 1 -d '-')
|
status="Found"
|
||||||
status="PHP $semver Found"
|
|
||||||
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)
|
||||||
|
scan_dir=$(php --ini | grep additional | sed -e "s|.*: s*||")
|
||||||
ini_file=$(php --ini | grep "Loaded Configuration" | sed -e "s|.*:s*||" | sed "s/ //g")
|
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*||")
|
ext_dir=$(php -i | grep "extension_dir => /" | sed -e "s|.*=> s*||")
|
||||||
sudo chmod 777 "$ini_file"
|
pecl_file="$scan_dir"/99-pecl.ini
|
||||||
add_log "$tick" "PHP" "$status"
|
echo '' | sudo tee "$pecl_file" >/dev/null 2>&1
|
||||||
|
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/"
|
||||||
|
add_log "$tick" "PHP" "$status PHP $semver"
|
||||||
|
@ -8,7 +8,7 @@ param (
|
|||||||
[ValidateNotNull()]
|
[ValidateNotNull()]
|
||||||
[ValidateLength(1, [int]::MaxValue)]
|
[ValidateLength(1, [int]::MaxValue)]
|
||||||
[string]
|
[string]
|
||||||
$dir
|
$dist
|
||||||
)
|
)
|
||||||
|
|
||||||
Function Step-Log($message) {
|
Function Step-Log($message) {
|
||||||
@ -20,6 +20,67 @@ Function Add-Log($mark, $subject, $message) {
|
|||||||
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[%s;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" $code $mark $subject $message
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Function Add-ToProfile {
|
||||||
|
param(
|
||||||
|
[Parameter(Position = 0, Mandatory = $true)]
|
||||||
|
[ValidateNotNull()]
|
||||||
|
[ValidateLength(1, [int]::MaxValue)]
|
||||||
|
[string]
|
||||||
|
$input_profile,
|
||||||
|
[Parameter(Position = 1, Mandatory = $true)]
|
||||||
|
[ValidateNotNull()]
|
||||||
|
[ValidateLength(1, [int]::MaxValue)]
|
||||||
|
[string]
|
||||||
|
$search,
|
||||||
|
[Parameter(Position = 2, Mandatory = $true)]
|
||||||
|
[ValidateNotNull()]
|
||||||
|
[ValidateLength(1, [int]::MaxValue)]
|
||||||
|
[string]
|
||||||
|
$value
|
||||||
|
)
|
||||||
|
if($null -eq (Get-Content $input_profile | findstr $search)) {
|
||||||
|
Add-Content -Path $input_profile -Value $value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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 $php_dir\printf.exe -ItemType SymbolicLink -Value C:\msys64\usr\bin\printf.exe -Force > $null 2>&1
|
||||||
|
} else {
|
||||||
|
Invoke-WebRequest -UseBasicParsing -Uri "$github/shivammathur/printf/releases/latest/download/printf-x64.zip" -OutFile "$php_dir\printf.zip"
|
||||||
|
Expand-Archive -Path $php_dir\printf.zip -DestinationPath $php_dir -Force
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
New-Item -Path $php_dir\printf.exe -ItemType SymbolicLink -Value "C:\Program Files\Git\usr\bin\printf.exe" -Force > $null 2>&1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Function Install-PSPackage() {
|
||||||
|
param(
|
||||||
|
[Parameter(Position = 0, Mandatory = $true)]
|
||||||
|
$package,
|
||||||
|
[Parameter(Position = 1, Mandatory = $true)]
|
||||||
|
$psm1_path,
|
||||||
|
[Parameter(Position = 2, Mandatory = $true)]
|
||||||
|
$url,
|
||||||
|
[Parameter(Position = 3, Mandatory = $true)]
|
||||||
|
$cmdlet
|
||||||
|
)
|
||||||
|
$module_path = "$php_dir\$psm1_path.psm1"
|
||||||
|
if(-not (Test-Path $module_path -PathType Leaf)) {
|
||||||
|
$zip_file = "$php_dir\$package.zip"
|
||||||
|
Invoke-WebRequest -UseBasicParsing -Uri $url -OutFile $zip_file
|
||||||
|
Expand-Archive -Path $zip_file -DestinationPath $php_dir -Force
|
||||||
|
}
|
||||||
|
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 $package -Force
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Function Add-Extension {
|
Function Add-Extension {
|
||||||
Param (
|
Param (
|
||||||
[Parameter(Position = 0, Mandatory = $true)]
|
[Parameter(Position = 0, Mandatory = $true)]
|
||||||
@ -31,7 +92,12 @@ 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)]
|
||||||
|
[ValidateNotNull()]
|
||||||
|
[ValidatePattern('^\d+(\.\d+){0,2}$')]
|
||||||
|
[string]
|
||||||
|
$extension_version = ''
|
||||||
)
|
)
|
||||||
try {
|
try {
|
||||||
$extension_info = Get-PhpExtension -Path $php_dir | Where-Object { $_.Name -eq $extension -or $_.Handle -eq $extension }
|
$extension_info = Get-PhpExtension -Path $php_dir | Where-Object { $_.Name -eq $extension -or $_.Handle -eq $extension }
|
||||||
@ -50,7 +116,12 @@ Function Add-Extension {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Install-PhpExtension -Extension $extension -MinimumStability $mininum_stability -Path $php_dir
|
if($extension_version -ne '') {
|
||||||
|
Install-PhpExtension -Extension $extension -Version $extension_version -MinimumStability $stability -MaximumStability $stability -Path $php_dir
|
||||||
|
} else {
|
||||||
|
Install-PhpExtension -Extension $extension -MinimumStability $stability -MaximumStability $stability -Path $php_dir
|
||||||
|
}
|
||||||
|
|
||||||
Add-Log $tick $extension "Installed and enabled"
|
Add-Log $tick $extension "Installed and enabled"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -75,12 +146,35 @@ Function Remove-Extension() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Function Add-Tool() {
|
|
||||||
Param (
|
Function Edit-ComposerConfig() {
|
||||||
|
Param(
|
||||||
[Parameter(Position = 0, Mandatory = $true)]
|
[Parameter(Position = 0, Mandatory = $true)]
|
||||||
[ValidateNotNull()]
|
[ValidateNotNull()]
|
||||||
[ValidateLength(1, [int]::MaxValue)]
|
[ValidateLength(1, [int]::MaxValue)]
|
||||||
[string]
|
[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 Add-Tool() {
|
||||||
|
Param (
|
||||||
|
[Parameter(Position = 0, Mandatory = $true)]
|
||||||
|
[ValidateNotNull()]
|
||||||
$url,
|
$url,
|
||||||
[Parameter(Position = 1, Mandatory = $true)]
|
[Parameter(Position = 1, Mandatory = $true)]
|
||||||
[ValidateNotNull()]
|
[ValidateNotNull()]
|
||||||
@ -91,40 +185,49 @@ Function Add-Tool() {
|
|||||||
if (Test-Path $php_dir\$tool) {
|
if (Test-Path $php_dir\$tool) {
|
||||||
Remove-Item $php_dir\$tool
|
Remove-Item $php_dir\$tool
|
||||||
}
|
}
|
||||||
if ($tool -eq "composer") {
|
if($url.Count -gt 1) { $url = $url[0] }
|
||||||
Install-Composer -Scope System -Path $php_dir -PhpPath $php_dir
|
if ($tool -eq "symfony") {
|
||||||
composer -q global config process-timeout 0
|
|
||||||
} elseif ($tool -eq "symfony") {
|
|
||||||
Invoke-WebRequest -UseBasicParsing -Uri $url -OutFile $php_dir\$tool.exe
|
Invoke-WebRequest -UseBasicParsing -Uri $url -OutFile $php_dir\$tool.exe
|
||||||
Add-Content -Path $PsHome\profile.ps1 -Value "New-Alias $tool $php_dir\$tool.exe" > $null 2>&1
|
Add-ToProfile $current_profile $tool "New-Alias $tool $php_dir\$tool.exe" >$null 2>&1
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
Invoke-WebRequest -UseBasicParsing -Uri $url -OutFile $php_dir\$tool
|
Invoke-WebRequest -UseBasicParsing -Uri $url -OutFile $php_dir\$tool
|
||||||
$bat_content = @()
|
} catch {
|
||||||
$bat_content += "@ECHO off"
|
if($url -match '.*github.com.*releases.*latest.*') {
|
||||||
$bat_content += "setlocal DISABLEDELAYEDEXPANSION"
|
try {
|
||||||
$bat_content += "SET BIN_TARGET=%~dp0/" + $tool
|
$url = $url.replace("releases/latest/download", "releases/download/" + ([regex]::match((Invoke-WebRequest -UseBasicParsing -Uri ($url.split('/release')[0] + "/releases")).Content, "([0-9]+\.[0-9]+\.[0-9]+)/" + ($url.Substring($url.LastIndexOf("/") + 1))).Groups[0].Value).split('/')[0])
|
||||||
$bat_content += "php %BIN_TARGET% %*"
|
Invoke-WebRequest -UseBasicParsing -Uri $url -OutFile $php_dir\$tool
|
||||||
Set-Content -Path $php_dir\$tool.bat -Value $bat_content
|
} catch { }
|
||||||
Add-Content -Path $PsHome\profile.ps1 -Value "New-Alias $tool $php_dir\$tool.bat" > $null 2>&1
|
}
|
||||||
} catch { }
|
}
|
||||||
}
|
|
||||||
if($tool -eq "phive") {
|
|
||||||
Add-Extension curl >$null 2>&1
|
|
||||||
Add-Extension mbstring >$null 2>&1
|
|
||||||
Add-Extension xml >$null 2>&1
|
|
||||||
}
|
|
||||||
if($tool -eq "cs2pr") {
|
|
||||||
(Get-Content $php_dir/cs2pr).replace('exit(9)', 'exit(0)') | Set-Content $php_dir/cs2pr
|
|
||||||
}
|
}
|
||||||
if (((Get-ChildItem -Path $php_dir/* | Where-Object Name -Match "^$tool(.exe|.phar)*$").Count -gt 0)) {
|
if (((Get-ChildItem -Path $php_dir/* | Where-Object Name -Match "^$tool(.exe|.phar)*$").Count -gt 0)) {
|
||||||
|
$bat_content = @()
|
||||||
|
$bat_content += "@ECHO off"
|
||||||
|
$bat_content += "setlocal DISABLEDELAYEDEXPANSION"
|
||||||
|
$bat_content += "SET BIN_TARGET=%~dp0/" + $tool
|
||||||
|
$bat_content += "php %BIN_TARGET% %*"
|
||||||
|
Set-Content -Path $php_dir\$tool.bat -Value $bat_content
|
||||||
|
Add-ToProfile $current_profile $tool "New-Alias $tool $php_dir\$tool.bat" >$null 2>&1
|
||||||
|
if($tool -eq "composer") {
|
||||||
|
Edit-ComposerConfig $php_dir\$tool
|
||||||
|
} elseif($tool -eq "cs2pr") {
|
||||||
|
(Get-Content $php_dir/cs2pr).replace('exit(9)', 'exit(0)') | Set-Content $php_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 "wp-cli") {
|
||||||
|
Copy-Item $php_dir\wp-cli.bat -Destination $php_dir\wp.bat
|
||||||
|
}
|
||||||
Add-Log $tick $tool "Added"
|
Add-Log $tick $tool "Added"
|
||||||
} else {
|
} else {
|
||||||
Add-Log $cross $tool "Could not add $tool"
|
Add-Log $cross $tool "Could not add $tool"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Function Add-Composer-Tool() {
|
Function Add-Composertool() {
|
||||||
Param (
|
Param (
|
||||||
[Parameter(Position = 0, Mandatory = $true)]
|
[Parameter(Position = 0, Mandatory = $true)]
|
||||||
[ValidateNotNull()]
|
[ValidateNotNull()]
|
||||||
@ -142,17 +245,24 @@ Function Add-Composer-Tool() {
|
|||||||
[string]
|
[string]
|
||||||
$prefix
|
$prefix
|
||||||
)
|
)
|
||||||
|
if(Test-Path $composer_lock) {
|
||||||
|
Remove-Item -Path $composer_lock -Force
|
||||||
|
}
|
||||||
composer -q global require $prefix$release 2>&1 | out-null
|
composer -q global require $prefix$release 2>&1 | out-null
|
||||||
|
if($tool -eq "codeception") {
|
||||||
|
Copy-Item $composer_bin\codecept.bat -Destination $composer_bin\codeception.bat
|
||||||
|
}
|
||||||
if($?) {
|
if($?) {
|
||||||
$composer_dir = composer -q global config home | ForEach-Object { $_ -replace "/", "\" }
|
|
||||||
Add-Content -Path $PsHome\profile.ps1 -Value "New-Alias $tool $composer_dir\vendor\bin\$tool.bat"
|
|
||||||
Add-Log $tick $tool "Added"
|
Add-Log $tick $tool "Added"
|
||||||
} else {
|
} else {
|
||||||
Add-Log $cross $tool "Could not setup $tool"
|
Add-Log $cross $tool "Could not setup $tool"
|
||||||
}
|
}
|
||||||
|
if(Test-Path $composer_bin\composer) {
|
||||||
|
Copy-Item -Path "$php_dir\composer" -Destination "$composer_bin\composer" -Force
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Function Add-PECL() {
|
Function Add-Pecl() {
|
||||||
Add-Log $tick "PECL" "Use extensions input to setup PECL extensions on windows"
|
Add-Log $tick "PECL" "Use extensions input to setup PECL extensions on windows"
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -160,57 +270,57 @@ Function Add-PECL() {
|
|||||||
$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"
|
||||||
|
$current_profile = "$PSHOME\Profile.ps1"
|
||||||
$ProgressPreference = 'SilentlyContinue'
|
$ProgressPreference = 'SilentlyContinue'
|
||||||
$master_version = '8.0'
|
$github = 'https://github.com'
|
||||||
|
$composer_bin = "$env:APPDATA\Composer\vendor\bin"
|
||||||
|
$composer_json = "$env:APPDATA\Composer\composer.json"
|
||||||
|
$composer_lock = "$env:APPDATA\Composer\composer.lock"
|
||||||
$arch = 'x64'
|
$arch = 'x64'
|
||||||
$ts = $false
|
if(-not([Environment]::Is64BitOperatingSystem) -or $version -lt '7.0') {
|
||||||
if((Test-Path env:PHPTS) -and $env:PHPTS -eq 'ts') {
|
$arch = 'x86'
|
||||||
$ts = $true
|
}
|
||||||
|
$ts = $env:PHPTS -eq 'ts'
|
||||||
|
if($env:PHPTS -ne 'ts') {
|
||||||
|
$env:PHPTS = 'nts'
|
||||||
|
}
|
||||||
|
if(-not(Test-Path -LiteralPath $current_profile)) {
|
||||||
|
New-Item -Path $current_profile -ItemType "file" -Force >$null 2>&1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Add-Printf >$null 2>&1
|
||||||
Step-Log "Setup PhpManager"
|
Step-Log "Setup PhpManager"
|
||||||
Install-Module -Name PhpManager -Force -Scope CurrentUser
|
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"
|
||||||
$installed = $null
|
$installed = $null
|
||||||
if (Test-Path -LiteralPath $php_dir -PathType Container) {
|
if (Test-Path -LiteralPath $php_dir -PathType Container) {
|
||||||
try {
|
try {
|
||||||
$installed = Get-Php -Path $php_dir
|
$installed = Get-Php -Path $php_dir
|
||||||
}
|
} catch { }
|
||||||
catch {
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Step-Log "Setup PHP"
|
|
||||||
$status = "Installed"
|
$status = "Installed"
|
||||||
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') {
|
if ($version -lt '7.0' -and ($null -eq (Get-Module -ListAvailable -Name VcRedist))) {
|
||||||
Install-Module -Name VcRedist -Force
|
Install-PSPackage VcRedist VcRedist-main\VcRedist\VcRedist "$github/aaronparker/VcRedist/archive/main.zip" Get-VcList >$null 2>&1
|
||||||
$arch='x86'
|
|
||||||
}
|
}
|
||||||
if ($version -eq $master_version) {
|
try {
|
||||||
$version = 'master'
|
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 {
|
||||||
$updated = Update-Php $php_dir >$null 2>&1
|
$status = "Found"
|
||||||
if($updated -eq $False) {
|
|
||||||
$status = "Found"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$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) {
|
||||||
Enable-PhpExtension -Extension openssl, curl, opcache -Path $php_dir
|
Add-Log $cross "PHP" "Could not setup PHP $version"
|
||||||
Update-PhpCAInfo -Path $php_dir -Source CurrentUser
|
exit 1
|
||||||
if ($version -eq 'master') {
|
|
||||||
if($installed.ThreadSafe) {
|
|
||||||
Copy-Item $dir"\..\src\bin\php_ts_pcov.dll" -Destination $ext_dir"\php_pcov.dll"
|
|
||||||
} else {
|
|
||||||
Copy-Item $dir"\..\src\bin\php_pcov.dll" -Destination $ext_dir"\php_pcov.dll"
|
|
||||||
}
|
|
||||||
Set-PhpIniKey -Key 'opcache.jit_buffer_size' -Value '256M' -Path $php_dir
|
|
||||||
Set-PhpIniKey -Key 'opcache.jit' -Value '1235' -Path $php_dir
|
|
||||||
}
|
}
|
||||||
|
('date.timezone=UTC', 'memory_limit=-1', 'xdebug.mode=coverage') | ForEach-Object { $p=$_.split('='); Set-PhpIniKey -Key $p[0] -Value $p[1] -Path $php_dir }
|
||||||
|
Enable-PhpExtension -Extension openssl, curl, opcache, mbstring -Path $php_dir
|
||||||
|
Update-PhpCAInfo -Path $php_dir -Source CurrentUser
|
||||||
|
Copy-Item -Path $dist\..\src\configs\*.json -Destination $env:RUNNER_TOOL_CACHE
|
||||||
|
New-Item -ItemType Directory -Path $composer_bin -Force > $null 2>&1
|
||||||
Add-Log $tick "PHP" "$status PHP $($installed.FullVersion)"
|
Add-Log $tick "PHP" "$status PHP $($installed.FullVersion)"
|
||||||
|
247
src/tools.ts
247
src/tools.ts
@ -1,60 +1,21 @@
|
|||||||
import * as utils from './utils';
|
import * as utils from './utils';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function to get command to setup tool
|
* Function to get command to setup tools
|
||||||
*
|
*
|
||||||
* @param os_version
|
* @param os_version
|
||||||
|
* @param suffix
|
||||||
*/
|
*/
|
||||||
export async function getArchiveCommand(os_version: string): Promise<string> {
|
export async function getCommand(
|
||||||
|
os_version: string,
|
||||||
|
suffix: string
|
||||||
|
): Promise<string> {
|
||||||
switch (os_version) {
|
switch (os_version) {
|
||||||
case 'linux':
|
case 'linux':
|
||||||
case 'darwin':
|
case 'darwin':
|
||||||
return 'add_tool ';
|
return 'add_' + suffix + ' ';
|
||||||
case 'win32':
|
case 'win32':
|
||||||
return 'Add-Tool ';
|
return 'Add-' + suffix.charAt(0).toUpperCase() + suffix.slice(1) + ' ';
|
||||||
default:
|
|
||||||
return await utils.log(
|
|
||||||
'Platform ' + os_version + ' is not supported',
|
|
||||||
os_version,
|
|
||||||
'error'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Function to get command to setup tools using composer
|
|
||||||
*
|
|
||||||
* @param os_version
|
|
||||||
*/
|
|
||||||
export async function getPackageCommand(os_version: string): Promise<string> {
|
|
||||||
switch (os_version) {
|
|
||||||
case 'linux':
|
|
||||||
case 'darwin':
|
|
||||||
return 'add_composer_tool ';
|
|
||||||
case 'win32':
|
|
||||||
return 'Add-Composer-Tool ';
|
|
||||||
default:
|
|
||||||
return await utils.log(
|
|
||||||
'Platform ' + os_version + ' is not supported',
|
|
||||||
os_version,
|
|
||||||
'error'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* Function to get command to setup PECL
|
|
||||||
*
|
|
||||||
* @param os_version
|
|
||||||
*/
|
|
||||||
export async function getPECLCommand(os_version: string): Promise<string> {
|
|
||||||
switch (os_version) {
|
|
||||||
case 'linux':
|
|
||||||
case 'darwin':
|
|
||||||
return 'add_pecl ';
|
|
||||||
case 'win32':
|
|
||||||
return 'Add-PECL ';
|
|
||||||
default:
|
default:
|
||||||
return await utils.log(
|
return await utils.log(
|
||||||
'Platform ' + os_version + ' is not supported',
|
'Platform ' + os_version + ' is not supported',
|
||||||
@ -71,9 +32,12 @@ export async function getPECLCommand(os_version: string): Promise<string> {
|
|||||||
*/
|
*/
|
||||||
export async function getToolVersion(version: string): Promise<string> {
|
export async function getToolVersion(version: string): 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 =
|
||||||
version = version.replace(/[><=^]*/, '');
|
/^(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 composer_regex = /^stable$|^preview$|^snapshot$|^[1|2]$/;
|
||||||
|
version = version.replace(/[><=^]*/, '').replace(/^v(\d)/, '$1');
|
||||||
switch (true) {
|
switch (true) {
|
||||||
|
case composer_regex.test(version):
|
||||||
case semver_regex.test(version):
|
case semver_regex.test(version):
|
||||||
return version;
|
return version;
|
||||||
default:
|
default:
|
||||||
@ -109,6 +73,8 @@ export async function parseTool(
|
|||||||
/**
|
/**
|
||||||
* Function to get the url of tool with the given version
|
* Function to get the url of tool with the given version
|
||||||
*
|
*
|
||||||
|
* @param tool
|
||||||
|
* @param extension
|
||||||
* @param version
|
* @param version
|
||||||
* @param prefix
|
* @param prefix
|
||||||
* @param version_prefix
|
* @param version_prefix
|
||||||
@ -134,76 +100,38 @@ export async function getUri(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Helper function to get the codeception url
|
|
||||||
*
|
|
||||||
* @param version
|
|
||||||
* @param php_version
|
|
||||||
* @param suffix
|
|
||||||
*/
|
|
||||||
export async function getCodeceptionUriBuilder(
|
|
||||||
version: string,
|
|
||||||
php_version: string,
|
|
||||||
suffix: string
|
|
||||||
): Promise<string> {
|
|
||||||
switch (true) {
|
|
||||||
case /^5\.6$|^7\.[0|1]$/.test(php_version):
|
|
||||||
return ['releases', version, suffix, 'codecept.phar']
|
|
||||||
.filter(Boolean)
|
|
||||||
.join('/');
|
|
||||||
case /^7\.[2-4]$/.test(php_version):
|
|
||||||
default:
|
|
||||||
return ['releases', version, '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> {
|
|
||||||
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):
|
|
||||||
return await getCodeceptionUriBuilder(version, php_version, 'php56');
|
|
||||||
default:
|
|
||||||
return await getCodeceptionUriBuilder(version, php_version, 'php54');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helper function to get script to setup phive
|
* Helper function to get script to setup phive
|
||||||
*
|
*
|
||||||
* @param tool
|
|
||||||
* @param version
|
* @param version
|
||||||
* @param url
|
* @param php_version
|
||||||
* @param os_version
|
* @param os_version
|
||||||
*/
|
*/
|
||||||
export async function addPhive(
|
export async function addPhive(
|
||||||
version: string,
|
version: string,
|
||||||
|
php_version: string,
|
||||||
os_version: string
|
os_version: string
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
|
switch (true) {
|
||||||
|
case /5\.6|7\.0/.test(php_version):
|
||||||
|
version = version.replace('latest', '0.12.1');
|
||||||
|
break;
|
||||||
|
case /7\.1/.test(php_version):
|
||||||
|
version = version.replace('latest', '0.13.5');
|
||||||
|
break;
|
||||||
|
case /7\.2/.test(php_version):
|
||||||
|
version = version.replace('latest', '0.14.5');
|
||||||
|
break;
|
||||||
|
}
|
||||||
switch (version) {
|
switch (version) {
|
||||||
case 'latest':
|
case 'latest':
|
||||||
return (
|
return (
|
||||||
(await getArchiveCommand(os_version)) +
|
(await getCommand(os_version, 'tool')) +
|
||||||
'https://phar.io/releases/phive.phar phive'
|
'https://phar.io/releases/phive.phar phive'
|
||||||
);
|
);
|
||||||
default:
|
default:
|
||||||
return (
|
return (
|
||||||
(await getArchiveCommand(os_version)) +
|
(await getCommand(os_version, 'tool')) +
|
||||||
'https://github.com/phar-io/phive/releases/download/' +
|
'https://github.com/phar-io/phive/releases/download/' +
|
||||||
version +
|
version +
|
||||||
'/phive-' +
|
'/phive-' +
|
||||||
@ -214,20 +142,24 @@ export async function addPhive(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function to get the PHPUnit url
|
* Function to get the phar url in domain/tool-version.phar format
|
||||||
*
|
*
|
||||||
|
* @param domain
|
||||||
|
* @param tool
|
||||||
|
* @param prefix
|
||||||
* @param version
|
* @param version
|
||||||
*/
|
*/
|
||||||
export async function getPhpunitUrl(
|
export async function getPharUrl(
|
||||||
|
domain: string,
|
||||||
tool: string,
|
tool: string,
|
||||||
|
prefix: string,
|
||||||
version: string
|
version: string
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
const phpunit = 'https://phar.phpunit.de';
|
|
||||||
switch (version) {
|
switch (version) {
|
||||||
case 'latest':
|
case 'latest':
|
||||||
return phpunit + '/' + tool + '.phar';
|
return domain + '/' + tool + '.phar';
|
||||||
default:
|
default:
|
||||||
return phpunit + '/' + tool + '-' + version + '.phar';
|
return domain + '/' + tool + '-' + prefix + version + '.phar';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -283,22 +215,57 @@ export async function getSymfonyUri(
|
|||||||
/**
|
/**
|
||||||
* Function to add/move composer in the tools list
|
* Function to add/move composer in the tools list
|
||||||
*
|
*
|
||||||
* @param tools
|
* @param tools_list
|
||||||
*/
|
*/
|
||||||
export async function addComposer(tools_list: string[]): Promise<string[]> {
|
export async function addComposer(tools_list: string[]): Promise<string[]> {
|
||||||
const regex = /^composer($|:.*)/;
|
const regex_any = /^composer($|:.*)/;
|
||||||
const composer: string = tools_list.filter(tool => regex.test(tool))[0];
|
const regex_valid =
|
||||||
switch (composer) {
|
/^composer:?($|preview$|snapshot$|v?[1-2]$|v?\d+\.\d+\.\d+[\w-]*$)/;
|
||||||
case undefined:
|
const regex_composer1_tools =
|
||||||
|
/hirak|prestissimo|narrowspark|composer-prefetcher/;
|
||||||
|
const matches: string[] = tools_list.filter(tool => regex_valid.test(tool));
|
||||||
|
let composer = 'composer';
|
||||||
|
tools_list = tools_list.filter(tool => !regex_any.test(tool));
|
||||||
|
switch (true) {
|
||||||
|
case regex_composer1_tools.test(tools_list.join(' ')):
|
||||||
|
composer = 'composer:1';
|
||||||
|
break;
|
||||||
|
case matches[0] == undefined:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
tools_list = tools_list.filter(tool => !regex.test(tool));
|
composer = matches[matches.length - 1].replace(/v(\d\S*)/, '$1');
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
tools_list.unshift('composer');
|
tools_list.unshift(composer);
|
||||||
return tools_list;
|
return tools_list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to get composer URL for a given version
|
||||||
|
*
|
||||||
|
* @param version
|
||||||
|
*/
|
||||||
|
export async function getComposerUrl(
|
||||||
|
version: string,
|
||||||
|
php_version: string
|
||||||
|
): Promise<string> {
|
||||||
|
let cache_url = `https://github.com/shivammathur/composer-cache/releases/latest/download/composer-${php_version}-${version.replace(
|
||||||
|
'latest',
|
||||||
|
'stable'
|
||||||
|
)}.phar`;
|
||||||
|
switch (true) {
|
||||||
|
case /^snapshot$/.test(version):
|
||||||
|
return `${cache_url},https://getcomposer.org/composer.phar`;
|
||||||
|
case /^preview$|^[1-2]$/.test(version):
|
||||||
|
return `${cache_url},https://getcomposer.org/composer-${version}.phar`;
|
||||||
|
case /^\d+\.\d+\.\d+[\w-]*$/.test(version):
|
||||||
|
cache_url = `https://github.com/composer/composer/releases/download/${version}/composer.phar`;
|
||||||
|
return `${cache_url},https://getcomposer.org/composer-${version}.phar`;
|
||||||
|
default:
|
||||||
|
return `${cache_url},https://getcomposer.org/composer-stable.phar`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function to get Tools list after cleanup
|
* Function to get Tools list after cleanup
|
||||||
*
|
*
|
||||||
@ -310,10 +277,13 @@ export async function getCleanedToolsList(
|
|||||||
let tools_list: string[] = await utils.CSVArray(tools_csv);
|
let tools_list: string[] = await utils.CSVArray(tools_csv);
|
||||||
tools_list = await addComposer(tools_list);
|
tools_list = await addComposer(tools_list);
|
||||||
tools_list = tools_list
|
tools_list = tools_list
|
||||||
.map(function(extension: string) {
|
.map(function (extension: string) {
|
||||||
return extension
|
return extension
|
||||||
.trim()
|
.trim()
|
||||||
.replace(/robmorgan\/|hirak\/|narrowspark\/automatic-/, '');
|
.replace(
|
||||||
|
/codeception\/|hirak\/|robmorgan\/|narrowspark\/automatic-/,
|
||||||
|
''
|
||||||
|
);
|
||||||
})
|
})
|
||||||
.filter(Boolean);
|
.filter(Boolean);
|
||||||
return [...new Set(tools_list)];
|
return [...new Set(tools_list)];
|
||||||
@ -323,17 +293,15 @@ export async function getCleanedToolsList(
|
|||||||
* 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 tool
|
||||||
* @param version
|
|
||||||
* @param url
|
* @param url
|
||||||
* @param os_version
|
* @param os_version
|
||||||
*/
|
*/
|
||||||
export async function addArchive(
|
export async function addArchive(
|
||||||
tool: string,
|
tool: string,
|
||||||
version: string,
|
|
||||||
url: string,
|
url: string,
|
||||||
os_version: string
|
os_version: string
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
return (await getArchiveCommand(os_version)) + url + ' ' + tool;
|
return (await getCommand(os_version, 'tool')) + url + ' ' + tool;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -385,14 +353,15 @@ export async function addPackage(
|
|||||||
prefix: string,
|
prefix: string,
|
||||||
os_version: string
|
os_version: string
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
const tool_command = await getPackageCommand(os_version);
|
const tool_command = await getCommand(os_version, 'composertool');
|
||||||
return tool_command + tool + ' ' + release + ' ' + prefix;
|
return tool_command + tool + ' ' + release + ' ' + prefix;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Setup tools
|
* Setup tools
|
||||||
*
|
*
|
||||||
* @param tool_csv
|
* @param tools_csv
|
||||||
|
* @param php_version
|
||||||
* @param os_version
|
* @param os_version
|
||||||
*/
|
*/
|
||||||
export async function addTools(
|
export async function addTools(
|
||||||
@ -402,7 +371,7 @@ export async function addTools(
|
|||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
let script = '\n' + (await utils.stepLog('Setup Tools', os_version));
|
let script = '\n' + (await utils.stepLog('Setup Tools', os_version));
|
||||||
const tools_list: Array<string> = await getCleanedToolsList(tools_csv);
|
const tools_list: Array<string> = await getCleanedToolsList(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 tool_data: {name: string; version: string} = await parseTool(release);
|
||||||
const tool: string = tool_data.name;
|
const tool: string = tool_data.name;
|
||||||
const version: string = tool_data.version;
|
const version: string = tool_data.version;
|
||||||
@ -421,52 +390,48 @@ export async function addTools(
|
|||||||
case 'cs2pr':
|
case 'cs2pr':
|
||||||
uri = await getUri(tool, '', version, 'releases', '', 'download');
|
uri = await getUri(tool, '', version, 'releases', '', 'download');
|
||||||
url = github + 'staabm/annotate-pull-request-from-checkstyle/' + uri;
|
url = github + 'staabm/annotate-pull-request-from-checkstyle/' + uri;
|
||||||
script += await addArchive(tool, version, url, os_version);
|
script += await addArchive(tool, url, os_version);
|
||||||
break;
|
break;
|
||||||
case 'php-cs-fixer':
|
case 'php-cs-fixer':
|
||||||
uri = await getUri(tool, '.phar', version, 'releases', 'v', 'download');
|
uri = await getUri(tool, '.phar', version, 'releases', 'v', 'download');
|
||||||
url = github + 'FriendsOfPHP/PHP-CS-Fixer/' + uri;
|
url = github + 'FriendsOfPHP/PHP-CS-Fixer/' + uri;
|
||||||
script += await addArchive(tool, version, url, os_version);
|
script += await addArchive(tool, url, os_version);
|
||||||
break;
|
break;
|
||||||
case 'phpcs':
|
case 'phpcs':
|
||||||
case 'phpcbf':
|
case 'phpcbf':
|
||||||
url = github + 'squizlabs/PHP_CodeSniffer/' + uri;
|
url = github + 'squizlabs/PHP_CodeSniffer/' + uri;
|
||||||
script += await addArchive(tool, version, url, os_version);
|
script += await addArchive(tool, url, os_version);
|
||||||
break;
|
break;
|
||||||
case 'phive':
|
case 'phive':
|
||||||
script += await addPhive(version, os_version);
|
script += await addPhive(version, php_version, os_version);
|
||||||
break;
|
break;
|
||||||
case 'phpstan':
|
case 'phpstan':
|
||||||
url = github + 'phpstan/phpstan/' + uri;
|
url = github + 'phpstan/phpstan/' + uri;
|
||||||
script += await addArchive(tool, version, url, os_version);
|
script += await addArchive(tool, url, os_version);
|
||||||
break;
|
break;
|
||||||
case 'phpmd':
|
case 'phpmd':
|
||||||
url = github + 'phpmd/phpmd/' + uri;
|
url = github + 'phpmd/phpmd/' + uri;
|
||||||
script += await addArchive(tool, version, url, os_version);
|
script += await addArchive(tool, url, os_version);
|
||||||
break;
|
break;
|
||||||
case 'psalm':
|
case 'psalm':
|
||||||
url = github + 'vimeo/psalm/' + uri;
|
url = github + 'vimeo/psalm/' + uri;
|
||||||
script += await addArchive(tool, version, url, os_version);
|
script += await addArchive(tool, url, os_version);
|
||||||
break;
|
break;
|
||||||
case 'composer':
|
case 'composer':
|
||||||
url =
|
url = await getComposerUrl(version, php_version);
|
||||||
github + 'composer/composer/releases/latest/download/composer.phar';
|
script += await addArchive('composer', url, os_version);
|
||||||
script += await addArchive(tool, version, url, os_version);
|
|
||||||
break;
|
break;
|
||||||
case 'codeception':
|
case 'codeception':
|
||||||
url =
|
script += await addPackage(tool, release, 'codeception/', os_version);
|
||||||
'https://codeception.com/' +
|
|
||||||
(await getCodeceptionUri(version, php_version));
|
|
||||||
script += await addArchive(tool, version, url, os_version);
|
|
||||||
break;
|
break;
|
||||||
case 'phpcpd':
|
case 'phpcpd':
|
||||||
case 'phpunit':
|
case 'phpunit':
|
||||||
url = await getPhpunitUrl(tool, version);
|
url = await getPharUrl('https://phar.phpunit.de', tool, '', version);
|
||||||
script += await addArchive(tool, version, url, os_version);
|
script += await addArchive(tool, url, os_version);
|
||||||
break;
|
break;
|
||||||
case 'deployer':
|
case 'deployer':
|
||||||
url = await getDeployerUrl(version);
|
url = await getDeployerUrl(version);
|
||||||
script += await addArchive(tool, version, url, os_version);
|
script += await addArchive(tool, url, os_version);
|
||||||
break;
|
break;
|
||||||
case 'phinx':
|
case 'phinx':
|
||||||
script += await addPackage(tool, release, 'robmorgan/', os_version);
|
script += await addPackage(tool, release, 'robmorgan/', os_version);
|
||||||
@ -483,7 +448,7 @@ export async function addTools(
|
|||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
case 'pecl':
|
case 'pecl':
|
||||||
script += await getPECLCommand(os_version);
|
script += await getCommand(os_version, 'pecl');
|
||||||
break;
|
break;
|
||||||
case 'php-config':
|
case 'php-config':
|
||||||
case 'phpize':
|
case 'phpize':
|
||||||
@ -493,7 +458,7 @@ export async function addTools(
|
|||||||
case 'symfony-cli':
|
case 'symfony-cli':
|
||||||
uri = await getSymfonyUri(version, os_version);
|
uri = await getSymfonyUri(version, os_version);
|
||||||
url = github + 'symfony/cli/' + uri;
|
url = github + 'symfony/cli/' + uri;
|
||||||
script += await addArchive('symfony', version, url, os_version);
|
script += await addArchive('symfony', url, os_version);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
script += await utils.addLog(
|
script += await utils.addLog(
|
||||||
|
110
src/utils.ts
110
src/utils.ts
@ -1,7 +1,27 @@
|
|||||||
|
import {IncomingMessage} 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 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 +32,56 @@ 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 url
|
||||||
|
*/
|
||||||
|
export async function fetch(url: string): Promise<string> {
|
||||||
|
const fetch_promise: Promise<string> = new Promise(resolve => {
|
||||||
|
const req = https.get(url, (res: IncomingMessage) => {
|
||||||
|
res.setEncoding('utf8');
|
||||||
|
let body = '';
|
||||||
|
res.on('data', chunk => (body += chunk));
|
||||||
|
res.on('end', () => resolve(body));
|
||||||
|
});
|
||||||
|
req.end();
|
||||||
|
});
|
||||||
|
return await fetch_promise;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to parse PHP version.
|
||||||
|
*
|
||||||
|
* @param version
|
||||||
|
*/
|
||||||
|
export async function parseVersion(version: string): Promise<string> {
|
||||||
|
const manifest =
|
||||||
|
'https://raw.githubusercontent.com/shivammathur/setup-php/releases/v1/src/configs/php-versions.json';
|
||||||
|
switch (true) {
|
||||||
|
case /^(latest|\d+\.x)$/.test(version):
|
||||||
|
return JSON.parse(await fetch(manifest))[version];
|
||||||
|
default:
|
||||||
|
switch (true) {
|
||||||
|
case version.length > 1:
|
||||||
|
return version.slice(0, 3);
|
||||||
|
default:
|
||||||
|
return version + '.0';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -65,7 +128,6 @@ export async function color(type: string): Promise<string> {
|
|||||||
* @param message
|
* @param message
|
||||||
* @param os_version
|
* @param os_version
|
||||||
* @param log_type
|
* @param log_type
|
||||||
* @param prefix
|
|
||||||
*/
|
*/
|
||||||
export async function log(
|
export async function log(
|
||||||
message: string,
|
message: string,
|
||||||
@ -121,6 +183,7 @@ export async function stepLog(
|
|||||||
* @param mark
|
* @param mark
|
||||||
* @param subject
|
* @param subject
|
||||||
* @param message
|
* @param message
|
||||||
|
* @param os_version
|
||||||
*/
|
*/
|
||||||
export async function addLog(
|
export async function addLog(
|
||||||
mark: string,
|
mark: string,
|
||||||
@ -147,14 +210,8 @@ export async function addLog(
|
|||||||
* Read the scripts
|
* Read the scripts
|
||||||
*
|
*
|
||||||
* @param filename
|
* @param filename
|
||||||
* @param version
|
|
||||||
* @param os_version
|
|
||||||
*/
|
*/
|
||||||
export async function readScript(
|
export async function readScript(filename: string): Promise<string> {
|
||||||
filename: string,
|
|
||||||
version: string,
|
|
||||||
os_version: string
|
|
||||||
): Promise<string> {
|
|
||||||
return fs.readFileSync(
|
return fs.readFileSync(
|
||||||
path.join(__dirname, '../src/scripts/' + filename),
|
path.join(__dirname, '../src/scripts/' + filename),
|
||||||
'utf8'
|
'utf8'
|
||||||
@ -165,7 +222,6 @@ export async function readScript(
|
|||||||
* Write final script which runs
|
* Write final script which runs
|
||||||
*
|
*
|
||||||
* @param filename
|
* @param filename
|
||||||
* @param version
|
|
||||||
* @param script
|
* @param script
|
||||||
*/
|
*/
|
||||||
export async function writeScript(
|
export async function writeScript(
|
||||||
@ -193,11 +249,11 @@ export async function extensionArray(
|
|||||||
default:
|
default:
|
||||||
return extension_csv
|
return extension_csv
|
||||||
.split(',')
|
.split(',')
|
||||||
.map(function(extension: string) {
|
.map(function (extension: string) {
|
||||||
return extension
|
return extension
|
||||||
.trim()
|
.trim()
|
||||||
.replace('php-', '')
|
.toLowerCase()
|
||||||
.replace('php_', '');
|
.replace(/^php[-_]/, '');
|
||||||
})
|
})
|
||||||
.filter(Boolean);
|
.filter(Boolean);
|
||||||
}
|
}
|
||||||
@ -216,9 +272,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);
|
||||||
}
|
}
|
||||||
@ -230,14 +289,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> = ['xdebug', 'opcache', 'ioncube', 'eaccelerator'];
|
switch (true) {
|
||||||
switch (zend.indexOf(extension)) {
|
|
||||||
case 0:
|
|
||||||
case 1:
|
|
||||||
return 'zend_extension';
|
|
||||||
case -1:
|
|
||||||
default:
|
default:
|
||||||
return 'extension';
|
return 'extension';
|
||||||
|
case /xdebug([2-3])?$|opcache|ioncube|eaccelerator/.test(extension):
|
||||||
|
return 'zend_extension';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,63 +1,19 @@
|
|||||||
{
|
{
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
/* Basic Options */
|
"declaration": true,
|
||||||
// "incremental": true, /* Enable incremental compilation */
|
"esModuleInterop": true,
|
||||||
"target": "es6", /* 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"]
|
||||||
}
|
}
|
||||||
|
BIN
update.zip
BIN
update.zip
Binary file not shown.
Reference in New Issue
Block a user