mirror of
https://github.com/shivammathur/setup-php.git
synced 2025-07-03 13:43:16 +07:00
Compare commits
87 Commits
Author | SHA1 | Date | |
---|---|---|---|
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 |
@ -10,7 +10,7 @@
|
|||||||
"plugin:import/warnings",
|
"plugin:import/warnings",
|
||||||
"plugin:import/typescript",
|
"plugin:import/typescript",
|
||||||
"plugin:prettier/recommended",
|
"plugin:prettier/recommended",
|
||||||
"prettier/@typescript-eslint"
|
"prettier"
|
||||||
],
|
],
|
||||||
"plugins": ["@typescript-eslint", "jest"]
|
"plugins": ["@typescript-eslint", "jest"]
|
||||||
}
|
}
|
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:
|
||||||
|
6
.github/FUNDING.yml
vendored
6
.github/FUNDING.yml
vendored
@ -1,7 +1,3 @@
|
|||||||
# These are supported funding model platforms
|
# These are supported funding model platforms
|
||||||
|
|
||||||
open_collective: setup-php
|
github:shivammathur
|
||||||
tidelift: "npm/setup-php"
|
|
||||||
community_bridge: setup-php
|
|
||||||
patreon: 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.
|
||||||
|
6
.github/SECURITY.md
vendored
6
.github/SECURITY.md
vendored
@ -6,8 +6,8 @@ The following versions of this project are supported for security updates.
|
|||||||
|
|
||||||
| Version | Supported |
|
| Version | Supported |
|
||||||
| ------- | ------------------ |
|
| ------- | ------------------ |
|
||||||
| 1.9.x | :white_check_mark: |
|
| 1.11.x | :white_check_mark: |
|
||||||
| 2.6.x | :white_check_mark: |
|
| 2.14.x | :white_check_mark: |
|
||||||
|
|
||||||
## Supported PHP Versions
|
## Supported PHP Versions
|
||||||
|
|
||||||
@ -15,10 +15,10 @@ This security policy only applies to the latest patches of the following PHP ver
|
|||||||
|
|
||||||
| Version | Supported |
|
| Version | Supported |
|
||||||
| ------- | ------------------ |
|
| ------- | ------------------ |
|
||||||
| 7.2 | :white_check_mark: |
|
|
||||||
| 7.3 | :white_check_mark: |
|
| 7.3 | :white_check_mark: |
|
||||||
| 7.4 | :white_check_mark: |
|
| 7.4 | :white_check_mark: |
|
||||||
| 8.0 | :white_check_mark: |
|
| 8.0 | :white_check_mark: |
|
||||||
|
| 8.1 | :white_check_mark: |
|
||||||
|
|
||||||
## Reporting a Vulnerability
|
## Reporting a Vulnerability
|
||||||
|
|
||||||
|
2
.github/workflows/main-workflow.yml
vendored
2
.github/workflows/main-workflow.yml
vendored
@ -20,7 +20,7 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
operating-system: [ubuntu-20.04, ubuntu-18.04, ubuntu-16.04, windows-latest, macos-latest]
|
operating-system: [ubuntu-20.04, ubuntu-18.04, windows-latest, macos-latest]
|
||||||
php-versions: ['5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0']
|
php-versions: ['5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
|
6
.github/workflows/node-workflow.yml
vendored
6
.github/workflows/node-workflow.yml
vendored
@ -24,10 +24,10 @@ jobs:
|
|||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
- name: Setup Node.js 12.x
|
- name: Setup Node.js 15.x
|
||||||
uses: actions/setup-node@v1
|
uses: actions/setup-node@v1
|
||||||
with:
|
with:
|
||||||
node-version: 12.x
|
node-version: 15.x
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: npm install
|
run: npm install
|
||||||
@ -44,4 +44,4 @@ jobs:
|
|||||||
- name: Send Coverage
|
- name: Send Coverage
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
timeout-minutes: 1
|
timeout-minutes: 1
|
||||||
run: curl -s https://codecov.io/bash | bash -s -- -t ${{secrets.CODECOV_TOKEN}} -f coverage/clover.xml -n github-actions-codecov-${{ matrix.operating-system }}
|
run: curl -s https://codecov.io/bash | bash -s -- -t ${{secrets.CODECOV_TOKEN}} -f coverage/lcov.info -n github-actions-codecov-${{ matrix.operating-system }}
|
||||||
|
68
README.md
68
README.md
@ -58,11 +58,12 @@ Setup PHP with required extensions, php.ini configuration, code-coverage support
|
|||||||
|
|
||||||
|Virtual environment|YAML workflow label|Pre-installed PHP|
|
|Virtual environment|YAML workflow label|Pre-installed PHP|
|
||||||
|--- |--- |--- |
|
|--- |--- |--- |
|
||||||
|Ubuntu 16.04|`ubuntu-16.04`|`PHP 5.6` to `PHP 7.4`|
|
|Ubuntu 18.04|`ubuntu-18.04`|`PHP 7.1` to `PHP 8.0`|
|
||||||
|Ubuntu 18.04|`ubuntu-latest` or `ubuntu-18.04`|`PHP 7.1` to `PHP 7.4`|
|
|Ubuntu 20.04|`ubuntu-latest` or `ubuntu-20.04`|`PHP 7.4` to `PHP 8.0`|
|
||||||
|Ubuntu 20.04|`ubuntu-20.04`|`PHP 7.4`|
|
|Windows Server 2019|`windows-latest` or `windows-2019`|`PHP 8.0`|
|
||||||
|Windows Server 2019|`windows-latest` or `windows-2019`|`PHP 7.4`|
|
|Windows Server 2022|`windows-2022`|`PHP 8.0`|
|
||||||
|macOS 10.15 Catalina|`macos-latest` or `macos-10.15`|`PHP 7.4`|
|
|macOS 10.15 Catalina|`macos-latest` or `macos-10.15`|`PHP 8.0`|
|
||||||
|
|macOS 11.x Big Sur|`macos-11`|`PHP 8.0`|
|
||||||
|
|
||||||
## :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.
|
||||||
@ -85,8 +86,9 @@ 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`.
|
||||||
Latest stable version of `composer` is setup by default and accepts `v1`, `v2`, `snapshot` and `preview` as versions.
|
|
||||||
|
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
|
||||||
@ -95,6 +97,8 @@ with:
|
|||||||
tools: composer:v2
|
tools: composer:v2
|
||||||
```
|
```
|
||||||
|
|
||||||
|
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`.
|
||||||
|
|
||||||
Version for other tools should be in `semver` format and a valid release of the tool.
|
Version for other tools should be in `semver` format and a valid release of the tool.
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
@ -214,7 +218,6 @@ jobs:
|
|||||||
|
|
||||||
> 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.
|
> 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.
|
||||||
|
|
||||||
- `PECL` is installed by default with this version on `Ubuntu` and `macOS`.
|
|
||||||
- Some extensions might not support this version currently.
|
- 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 [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.
|
- Refer to this [list of RFCs](https://wiki.php.net/rfc#php_80 "List of RFCs implemented in PHP8") implemented in this version.
|
||||||
@ -264,14 +267,14 @@ You can persist composer's internal cache directory using the [`action/cache`](h
|
|||||||
**Note:** Please do not cache `vendor` directory using `action/cache` as that will have side-effects.
|
**Note:** Please do not cache `vendor` directory using `action/cache` as that will have side-effects.
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- name: Get composer cache directory
|
- name: Get Composer Cache Directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
|
|
||||||
- name: Cache dependencies
|
- name: Cache dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
@ -279,10 +282,15 @@ 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') }}
|
||||||
|
```
|
||||||
|
|
||||||
|
- 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 }}-
|
||||||
```
|
```
|
||||||
|
|
||||||
### Composer GitHub OAuth
|
### Composer GitHub OAuth
|
||||||
@ -408,14 +416,40 @@ Contributions are welcome! See [Contributor's Guide](.github/CONTRIBUTING.md "sh
|
|||||||
|
|
||||||
## :sparkling_heart: Support This Project
|
## :sparkling_heart: Support This Project
|
||||||
|
|
||||||
If this action helped you.
|
- This project is provided as Free and Open-Source software. We need funds to maintain and do future improvements. Please sponsor setup-php using [GitHub sponsors](https://github.com/sponsors/shivammathur).
|
||||||
|
|
||||||
- Sponsor the project by subscribing on [Patreon](https://www.patreon.com/shivammathur "Shivam Mathur Patreon") or by contributing using [Paypal](https://www.paypal.me/shivammathur "Shivam Mathur PayPal"). This project is also available as part of the [Tidelift Subscription](https://tidelift.com/subscription/pkg/npm-setup-php?utm_source=npm-setup-php&utm_medium=referral&utm_campaign=enterprise&utm_term=repo "Tidelift Subscription for setup-php") to support delivering enterprise-level maintenance.
|
### Corporate Sponsors
|
||||||
- Please star the project and dependencies. If you blog, please share your experience of using this action with the community.
|
|
||||||
|
<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://blackfire.io/?utm_source=setup-php">
|
||||||
|
<img src="https://setup-php.com/sponsors//blackfire.svg" alt="Blackfire" width="212" height="60">
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="https://www.macstadium.com/?source=setup-php">
|
||||||
|
<img src="https://setup-php.com/sponsors//macstadium.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>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
### Individual Sponsors
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<a href="https://github.com/sponsors/shivammathur">
|
||||||
|
<img src="https://setup-php.com/sponsors/?" alt="Sponsors of setup-php and related projects" width="100%">
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
## :bookmark: Dependencies
|
## :bookmark: Dependencies
|
||||||
|
|
||||||
- [Node.js dependencies](https://github.com/shivammathur/setup-php/network/dependencies "Node.js 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")
|
- [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")
|
||||||
|
@ -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,24 +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 linux', async () => {
|
it('checking addCoverage with Xdebug3 on windows', async () => {
|
||||||
const linux: string = await coverage.addCoverage('xdebug', '7.4', 'linux');
|
const win32: string = await coverage.addCoverage('xdebug3', '7.4', 'win32');
|
||||||
expect(linux).toContain('add_extension xdebug');
|
expect(win32).toContain('Add-Extension xdebug');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking addCoverage with Xdebug2 on windows', async () => {
|
||||||
|
const win32: string = await coverage.addCoverage('xdebug2', '7.4', 'win32');
|
||||||
|
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('add_extension xdebug');
|
expect(linux).toContain('add_extension xdebug');
|
||||||
expect(linux).toContain('echo "xdebug.mode=coverage"');
|
});
|
||||||
|
|
||||||
|
it('checking addCoverage with Xdebug3 on linux', async () => {
|
||||||
|
const linux: string = await coverage.addCoverage('xdebug3', '8.0', 'linux');
|
||||||
|
expect(linux).toContain('add_extension xdebug');
|
||||||
|
});
|
||||||
|
|
||||||
|
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 () => {
|
||||||
@ -53,7 +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 Xdebug3 on darwin', async () => {
|
||||||
|
const darwin: string = await coverage.addCoverage(
|
||||||
|
'xdebug3',
|
||||||
|
'7.4',
|
||||||
|
'darwin'
|
||||||
|
);
|
||||||
|
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 () => {
|
||||||
|
@ -13,6 +13,9 @@ describe('Extension tests', () => {
|
|||||||
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');
|
win32 = await extensions.addExtension('mysql', '7.4', 'win32');
|
||||||
expect(win32).toContain('Add-Extension mysqli');
|
expect(win32).toContain('Add-Extension mysqli');
|
||||||
expect(win32).toContain('Add-Extension mysqlnd');
|
expect(win32).toContain('Add-Extension mysqlnd');
|
||||||
@ -55,18 +58,10 @@ 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');
|
|
||||||
expect(linux).toContain('gearman.sh 7.3');
|
|
||||||
|
|
||||||
linux = await extensions.addExtension('gearman', '7.4', 'linux');
|
|
||||||
expect(linux).toContain('gearman.sh 7.4');
|
|
||||||
|
|
||||||
linux = await extensions.addExtension('xdebug', '7.2', 'openbsd');
|
linux = await extensions.addExtension('xdebug', '7.2', 'openbsd');
|
||||||
expect(linux).toContain('Platform openbsd is not supported');
|
expect(linux).toContain('Platform openbsd is not supported');
|
||||||
@ -78,7 +73,7 @@ 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, grpc, igbinary, imagick, protobuf, swoole, sqlite, ast-beta',
|
'Xdebug, pcov, grpc, igbinary, imagick, phalcon3, phalcon4, protobuf, psr, rdkafka, swoole, vips, sqlite, ast-beta',
|
||||||
'7.2',
|
'7.2',
|
||||||
'darwin'
|
'darwin'
|
||||||
);
|
);
|
||||||
@ -87,17 +82,16 @@ describe('Extension tests', () => {
|
|||||||
expect(darwin).toContain('add_brew_extension grpc');
|
expect(darwin).toContain('add_brew_extension grpc');
|
||||||
expect(darwin).toContain('add_brew_extension igbinary');
|
expect(darwin).toContain('add_brew_extension igbinary');
|
||||||
expect(darwin).toContain('add_brew_extension imagick');
|
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 protobuf');
|
||||||
|
expect(darwin).toContain('add_brew_extension psr');
|
||||||
|
expect(darwin).toContain('add_brew_extension rdkafka');
|
||||||
expect(darwin).toContain('add_brew_extension swoole');
|
expect(darwin).toContain('add_brew_extension swoole');
|
||||||
|
expect(darwin).toContain('add_brew_extension vips');
|
||||||
expect(darwin).toContain('pecl_install sqlite3');
|
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('pecl_install pcov');
|
expect(darwin).toContain('pecl_install pcov');
|
||||||
|
|
||||||
@ -110,14 +104,8 @@ describe('Extension tests', () => {
|
|||||||
darwin = await extensions.addExtension('xdebug', '7.0', 'darwin');
|
darwin = await extensions.addExtension('xdebug', '7.0', 'darwin');
|
||||||
expect(darwin).toContain('add_brew_extension xdebug');
|
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('add_brew_extension xdebug');
|
expect(darwin).toContain('add_brew_extension xdebug2');
|
||||||
|
|
||||||
darwin = await extensions.addExtension('redis', '5.6', 'darwin');
|
|
||||||
expect(darwin).toContain('pecl_install redis-2.2.8');
|
|
||||||
|
|
||||||
darwin = await extensions.addExtension('redis', '7.2', 'darwin');
|
|
||||||
expect(darwin).toContain('pecl_install redis');
|
|
||||||
|
|
||||||
darwin = await extensions.addExtension(
|
darwin = await extensions.addExtension(
|
||||||
'does_not_exist',
|
'does_not_exist',
|
||||||
|
@ -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 (coverage_driver) {
|
if (coverage_driver) {
|
||||||
script += 'set coverage driver';
|
script += 'set coverage driver';
|
||||||
}
|
}
|
||||||
if (ini_values_csv) {
|
if (ini_values_csv) {
|
||||||
script += 'edit php.ini';
|
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 += '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';
|
|
||||||
}
|
|
||||||
|
|
||||||
return script;
|
return script;
|
||||||
}
|
})
|
||||||
)
|
|
||||||
}));
|
}));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -112,102 +112,25 @@ 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', 'php56')).toBe(
|
|
||||||
'releases/3.2.1/php56/codecept.phar'
|
|
||||||
);
|
|
||||||
expect(await tools.getCodeceptionUriBuilder('3.2.1', 'php54')).toBe(
|
|
||||||
'releases/3.2.1/php54/codecept.phar'
|
|
||||||
);
|
|
||||||
expect(await tools.getCodeceptionUriBuilder('3.2.1', '')).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('4.0.0', '7.4')).toBe(
|
|
||||||
'releases/4.0.0/codecept.phar'
|
|
||||||
);
|
|
||||||
expect(await tools.getCodeceptionUri('4.0.0', '5.6')).toBe(
|
|
||||||
'releases/4.0.0/php56/codecept.phar'
|
|
||||||
);
|
|
||||||
expect(await tools.getCodeceptionUri('4.0.0', '7.1')).toBe(
|
|
||||||
'releases/4.0.0/php56/codecept.phar'
|
|
||||||
);
|
|
||||||
expect(await tools.getCodeceptionUri('3.1.0', '7.4')).toBe(
|
|
||||||
'releases/3.1.0/codecept.phar'
|
|
||||||
);
|
|
||||||
expect(await tools.getCodeceptionUri('3.1.0', '5.6')).toBe(
|
|
||||||
'releases/3.1.0/php54/codecept.phar'
|
|
||||||
);
|
|
||||||
expect(await tools.getCodeceptionUri('2.5.4', '7.4')).toBe(
|
|
||||||
'releases/2.5.4/codecept.phar'
|
|
||||||
);
|
|
||||||
expect(await tools.getCodeceptionUri('2.5.4', '5.6')).toBe(
|
|
||||||
'releases/2.5.4/php54/codecept.phar'
|
|
||||||
);
|
|
||||||
expect(await tools.getCodeceptionUri('2.3.4', '7.4')).toBe(
|
|
||||||
'releases/2.3.4/codecept.phar'
|
|
||||||
);
|
|
||||||
expect(await tools.getCodeceptionUri('2.3.4', '5.4')).toBe(
|
|
||||||
'releases/2.3.4/php54/codecept.phar'
|
|
||||||
);
|
|
||||||
expect(await tools.getCodeceptionUri('2.2.4', '5.6')).toBe(
|
|
||||||
'releases/2.2.4/codecept.phar'
|
|
||||||
);
|
|
||||||
expect(await tools.getCodeceptionUri('2.2.4', '7.4')).toBe(
|
|
||||||
'releases/2.2.4/codecept.phar'
|
|
||||||
);
|
|
||||||
expect(await tools.getCodeceptionUri('2.2.4', '5.4')).toBe(
|
|
||||||
'releases/2.2.4/php54/codecept.phar'
|
|
||||||
);
|
|
||||||
expect(await tools.getCodeceptionUri('2.1.7', '5.6')).toBe(
|
|
||||||
'releases/2.1.7/codecept.phar'
|
|
||||||
);
|
|
||||||
expect(await tools.getCodeceptionUri('2.1.7', '5.4')).toBe(
|
|
||||||
'releases/2.1.7/php54/codecept.phar'
|
|
||||||
);
|
|
||||||
expect(await tools.getCodeceptionUri('2.1.5', '5.4')).toBe(
|
|
||||||
'releases/2.1.5/codecept.phar'
|
|
||||||
);
|
|
||||||
expect(await tools.getCodeceptionUri('2.1.5', '7.4')).toBe(
|
|
||||||
'releases/2.1.5/codecept.phar'
|
|
||||||
);
|
|
||||||
expect(await tools.getCodeceptionUri('1.6.9', '7.4')).toBe(
|
|
||||||
'releases/1.6.9/codecept.phar'
|
|
||||||
);
|
|
||||||
expect(await tools.getCodeceptionUri('1.5.0', '7.4')).toBe(
|
|
||||||
'releases/1.5.0/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'
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -240,9 +163,17 @@ 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(
|
expect(
|
||||||
await tools.addComposer(['a', 'b', 'composer:snapshot'])
|
await tools.addComposer(['a', 'b', 'composer:snapshot'])
|
||||||
).toStrictEqual(['composer:snapshot', 'a', 'b']);
|
).toStrictEqual(['composer:snapshot', 'a', 'b']);
|
||||||
@ -261,6 +192,9 @@ describe('Tools tests', () => {
|
|||||||
expect(
|
expect(
|
||||||
await tools.addComposer(['a', 'b', 'c', 'composer:v2'])
|
await tools.addComposer(['a', 'b', 'c', 'composer:v2'])
|
||||||
).toStrictEqual(['composer:2', 'a', 'b', 'c']);
|
).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 () => {
|
it('checking getComposerUrl', async () => {
|
||||||
@ -282,6 +216,21 @@ describe('Tools tests', () => {
|
|||||||
expect(await tools.getComposerUrl('2')).toContain(
|
expect(await tools.getComposerUrl('2')).toContain(
|
||||||
'https://getcomposer.org/composer-2.phar'
|
'https://getcomposer.org/composer-2.phar'
|
||||||
);
|
);
|
||||||
|
expect(await tools.getComposerUrl('1.7.2')).toContain(
|
||||||
|
'https://github.com/composer/composer/releases/download/1.7.2/composer.phar'
|
||||||
|
);
|
||||||
|
expect(await tools.getComposerUrl('1.7.2')).toContain(
|
||||||
|
'https://getcomposer.org/composer-1.7.2.phar'
|
||||||
|
);
|
||||||
|
expect(await tools.getComposerUrl('2.0.0-RC2')).toContain(
|
||||||
|
'https://github.com/composer/composer/releases/download/2.0.0-RC2/composer.phar'
|
||||||
|
);
|
||||||
|
expect(await tools.getComposerUrl('2.0.0-RC2')).toContain(
|
||||||
|
'https://getcomposer.org/composer-2.0.0-RC2.phar'
|
||||||
|
);
|
||||||
|
expect(await tools.getComposerUrl('wrong')).toContain(
|
||||||
|
'https://getcomposer.org/composer-stable.phar'
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('checking getSymfonyUri', async () => {
|
it('checking getSymfonyUri', async () => {
|
||||||
@ -310,15 +259,9 @@ describe('Tools tests', () => {
|
|||||||
|
|
||||||
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 () => {
|
||||||
@ -433,7 +376,7 @@ describe('Tools tests', () => {
|
|||||||
});
|
});
|
||||||
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'
|
||||||
);
|
);
|
||||||
@ -462,12 +405,6 @@ describe('Tools tests', () => {
|
|||||||
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_composertool 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'
|
||||||
);
|
);
|
||||||
@ -476,7 +413,7 @@ 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_exist',
|
'cs2pr, deployer, phpmd, phinx, phive:0.13.2, php-config, phpize, symfony, does_not_exist, composer',
|
||||||
'7.4',
|
'7.4',
|
||||||
'win32'
|
'win32'
|
||||||
);
|
);
|
||||||
@ -489,7 +426,6 @@ 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-Composertool 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'
|
||||||
);
|
);
|
||||||
@ -506,12 +442,12 @@ describe('Tools tests', () => {
|
|||||||
});
|
});
|
||||||
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/shivammathur/composer-cache/releases/latest/download/composer-stable.phar,https://getcomposer.org/composer-stable.phar composer'
|
'Add-Tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-1.phar,https://getcomposer.org/composer-1.phar composer'
|
||||||
);
|
);
|
||||||
expect(script).toContain('Add-Composertool prestissimo prestissimo hirak/');
|
expect(script).toContain('Add-Composertool prestissimo prestissimo hirak/');
|
||||||
expect(script).toContain('Add-Composertool phinx phinx robmorgan/');
|
expect(script).toContain('Add-Composertool phinx phinx robmorgan/');
|
||||||
|
@ -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) {
|
||||||
@ -19,7 +23,11 @@ async function cleanup(path: string): Promise<void> {
|
|||||||
describe('Utils tests', () => {
|
describe('Utils tests', () => {
|
||||||
it('checking readEnv', async () => {
|
it('checking readEnv', async () => {
|
||||||
process.env['test'] = 'setup-php';
|
process.env['test'] = 'setup-php';
|
||||||
|
process.env['test-hyphen'] = 'setup-php';
|
||||||
expect(await utils.readEnv('test')).toBe('setup-php');
|
expect(await utils.readEnv('test')).toBe('setup-php');
|
||||||
|
expect(await utils.readEnv('TEST')).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('');
|
expect(await utils.readEnv('undefined')).toBe('');
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -32,14 +40,29 @@ describe('Utils tests', () => {
|
|||||||
}).rejects.toThrow('Input required and not supplied: DoesNotExist');
|
}).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 (
|
await utils.asyncForEach(
|
||||||
str: string
|
array,
|
||||||
): Promise<void> {
|
async function (str: string): Promise<void> {
|
||||||
concat += str;
|
concat += str;
|
||||||
});
|
}
|
||||||
|
);
|
||||||
expect(concat).toBe('abc');
|
expect(concat).toBe('abc');
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -76,10 +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 (
|
fs.readFile(script_path, function (error: Error | null, data: Buffer) {
|
||||||
error: Error | null,
|
|
||||||
data: Buffer
|
|
||||||
) {
|
|
||||||
expect(testString).toBe(data.toString());
|
expect(testString).toBe(data.toString());
|
||||||
});
|
});
|
||||||
await cleanup(script_path);
|
await cleanup(script_path);
|
||||||
@ -103,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([]);
|
||||||
});
|
});
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
name: 'Setup PHP Action'
|
name: 'Setup PHP Action'
|
||||||
author: shivammathur
|
author: shivammathur
|
||||||
description: 'Setup PHP with required extensions, php.ini configuration, code-coverage support and various tools like composer'
|
description: 'GitHub Action for PHP'
|
||||||
branding:
|
branding:
|
||||||
color: 'purple'
|
color: 'purple'
|
||||||
icon: 'play-circle'
|
icon: 'play-circle'
|
||||||
|
4287
dist/index.js
vendored
4287
dist/index.js
vendored
File diff suppressed because it is too large
Load Diff
@ -17,11 +17,11 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- uses: actions/cache@v2
|
- uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
@ -37,12 +37,12 @@ jobs:
|
|||||||
- name: Start mysql service
|
- name: Start mysql service
|
||||||
run: sudo /etc/init.d/mysql start
|
run: sudo /etc/init.d/mysql start
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
@ -70,12 +70,12 @@ jobs:
|
|||||||
php-version: '7.3'
|
php-version: '7.3'
|
||||||
extensions: mbstring, intl
|
extensions: mbstring, intl
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
@ -98,12 +98,12 @@ jobs:
|
|||||||
extensions: mbstring, intl
|
extensions: mbstring, intl
|
||||||
tools: phpstan
|
tools: phpstan
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
@ -35,12 +35,12 @@ jobs:
|
|||||||
extensions: mbstring, intl, redis, pdo_pgsql
|
extensions: mbstring, intl, redis, pdo_pgsql
|
||||||
coverage: pcov
|
coverage: pcov
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
@ -68,12 +68,12 @@ jobs:
|
|||||||
php-version: '7.3'
|
php-version: '7.3'
|
||||||
extensions: mbstring, intl
|
extensions: mbstring, intl
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
@ -96,12 +96,12 @@ jobs:
|
|||||||
extensions: mbstring, intl
|
extensions: mbstring, intl
|
||||||
tools: phpstan
|
tools: phpstan
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
@ -19,12 +19,12 @@ jobs:
|
|||||||
extensions: mbstring, intl, pdo_sqlite, pdo_mysql
|
extensions: mbstring, intl, pdo_sqlite, pdo_mysql
|
||||||
coverage: pcov #optional
|
coverage: pcov #optional
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
@ -48,12 +48,12 @@ jobs:
|
|||||||
php-version: '7.3'
|
php-version: '7.3'
|
||||||
extensions: mbstring, intl
|
extensions: mbstring, intl
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
@ -76,12 +76,12 @@ jobs:
|
|||||||
extensions: mbstring, intl
|
extensions: mbstring, intl
|
||||||
tools: phpstan
|
tools: phpstan
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
@ -18,12 +18,12 @@ jobs:
|
|||||||
extensions: mbstring, intl, curl, dom
|
extensions: mbstring, intl, curl, dom
|
||||||
coverage: xdebug #optional
|
coverage: xdebug #optional
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
@ -44,12 +44,12 @@ jobs:
|
|||||||
- name: Start mysql service
|
- name: Start mysql service
|
||||||
run: sudo /etc/init.d/mysql start
|
run: sudo /etc/init.d/mysql start
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
@ -44,12 +44,12 @@ jobs:
|
|||||||
extensions: mbstring, dom, fileinfo, pgsql
|
extensions: mbstring, dom, fileinfo, pgsql
|
||||||
coverage: xdebug #optional
|
coverage: xdebug #optional
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
@ -20,12 +20,12 @@ jobs:
|
|||||||
extensions: mbstring, dom, fileinfo
|
extensions: mbstring, dom, fileinfo
|
||||||
coverage: xdebug #optional
|
coverage: xdebug #optional
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
@ -44,12 +44,12 @@ jobs:
|
|||||||
- name: Start mysql service
|
- name: Start mysql service
|
||||||
run: sudo /etc/init.d/mysql start
|
run: sudo /etc/init.d/mysql start
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
@ -44,12 +44,12 @@ jobs:
|
|||||||
extensions: mbstring, dom, fileinfo, pgsql
|
extensions: mbstring, dom, fileinfo, pgsql
|
||||||
coverage: xdebug #optional
|
coverage: xdebug #optional
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
@ -20,12 +20,12 @@ jobs:
|
|||||||
extensions: mbstring, dom, fileinfo, mysql
|
extensions: mbstring, dom, fileinfo, mysql
|
||||||
coverage: xdebug #optional
|
coverage: xdebug #optional
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
@ -44,12 +44,12 @@ jobs:
|
|||||||
- name: Start mysql service
|
- name: Start mysql service
|
||||||
run: sudo /etc/init.d/mysql start
|
run: sudo /etc/init.d/mysql start
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
@ -43,12 +43,12 @@ jobs:
|
|||||||
extensions: mbstring, dom, zip, phalcon4, pgsql #use phalcon3 for the phalcon 3.x
|
extensions: mbstring, dom, zip, phalcon4, pgsql #use phalcon3 for the phalcon 3.x
|
||||||
coverage: xdebug #optional
|
coverage: xdebug #optional
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
@ -33,12 +33,12 @@ jobs:
|
|||||||
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-yarn-
|
restore-keys: ${{ runner.os }}-yarn-
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
@ -18,12 +18,12 @@ jobs:
|
|||||||
extensions: mbstring, simplexml, dom
|
extensions: mbstring, simplexml, dom
|
||||||
coverage: xdebug #optional
|
coverage: xdebug #optional
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
@ -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, mysql
|
extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite, mysql
|
||||||
@ -31,22 +31,23 @@ jobs:
|
|||||||
- name: Start mysql service
|
- name: Start mysql service
|
||||||
run: sudo /etc/init.d/mysql start
|
run: sudo /etc/init.d/mysql start
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
- name: Install Composer dependencies
|
- name: Install Composer dependencies
|
||||||
run: |
|
run: |
|
||||||
|
composer require --dev symfony/orm-pack symfony/phpunit-bridge
|
||||||
composer install --no-progress --prefer-dist --optimize-autoloader
|
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,28 +23,29 @@ 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
|
||||||
coverage: xdebug #optional
|
coverage: xdebug #optional
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
- name: Install Composer dependencies
|
- name: Install Composer dependencies
|
||||||
run: |
|
run: |
|
||||||
|
composer require --dev symfony/orm-pack symfony/phpunit-bridge
|
||||||
composer install --no-progress --prefer-dist --optimize-autoloader
|
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,25 +14,26 @@ 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
|
||||||
coverage: xdebug #optional
|
coverage: xdebug #optional
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
- name: Install Composer dependencies
|
- name: Install Composer dependencies
|
||||||
run: |
|
run: |
|
||||||
composer require symfony/orm-pack
|
composer require --dev symfony/phpunit-bridge
|
||||||
composer install --no-progress --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
|
@ -41,12 +41,12 @@ jobs:
|
|||||||
- name: Start mysql service
|
- name: Start mysql service
|
||||||
run: sudo /etc/init.d/mysql start
|
run: sudo /etc/init.d/mysql start
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
@ -39,12 +39,12 @@ jobs:
|
|||||||
extensions: mbstring, intl, gd, imagick, zip, dom, pgsql
|
extensions: mbstring, intl, gd, imagick, zip, dom, pgsql
|
||||||
coverage: xdebug #optional
|
coverage: xdebug #optional
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
@ -18,12 +18,12 @@ jobs:
|
|||||||
extensions: mbstring, bcmath, curl, intl
|
extensions: mbstring, bcmath, curl, intl
|
||||||
coverage: xdebug #optional
|
coverage: xdebug #optional
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composercache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
12526
package-lock.json
generated
12526
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
65
package.json
65
package.json
@ -1,15 +1,25 @@
|
|||||||
{
|
{
|
||||||
"name": "setup-php",
|
"name": "setup-php",
|
||||||
"version": "1.9.8",
|
"version": "1.11.4",
|
||||||
"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,36 @@
|
|||||||
"author": "shivammathur",
|
"author": "shivammathur",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/core": "^1.2.6",
|
"@actions/core": "^1.5.0",
|
||||||
"@actions/exec": "^1.0.4",
|
"@actions/exec": "^1.1.0",
|
||||||
"@actions/io": "^1.0.2",
|
"@actions/io": "^1.1.1",
|
||||||
"fs": "0.0.1-security"
|
"fs": "0.0.1-security"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/jest": "^26.0.14",
|
"@types/jest": "^27.0.1",
|
||||||
"@types/node": "^14.11.10",
|
"@types/node": "^16.9.1",
|
||||||
"@typescript-eslint/eslint-plugin": "^4.4.1",
|
"@typescript-eslint/eslint-plugin": "^4.31.0",
|
||||||
"@typescript-eslint/parser": "^4.4.1",
|
"@typescript-eslint/parser": "^4.31.0",
|
||||||
"@zeit/ncc": "^0.22.3",
|
"@vercel/ncc": "^0.31.0",
|
||||||
"eslint": "^7.11.0",
|
"eslint": "^7.32.0",
|
||||||
"eslint-config-prettier": "^6.13.0",
|
"eslint-config-prettier": "^8.3.0",
|
||||||
"eslint-plugin-import": "^2.22.1",
|
"eslint-plugin-import": "^2.24.2",
|
||||||
"eslint-plugin-jest": "^24.1.0",
|
"eslint-plugin-jest": "^24.4.0",
|
||||||
"eslint-plugin-prettier": "^3.1.4",
|
"eslint-plugin-prettier": "^4.0.0",
|
||||||
"husky": "^4.3.0",
|
"husky": "^4.3.8",
|
||||||
"jest": "^26.5.3",
|
"jest": "^27.1.1",
|
||||||
"jest-circus": "^26.5.3",
|
"jest-circus": "^27.1.1",
|
||||||
"prettier": "^2.1.2",
|
"prettier": "^2.4.0",
|
||||||
"ts-jest": "^26.4.1",
|
"ts-jest": "^27.0.5",
|
||||||
"typescript": "^4.0.3"
|
"typescript": "^4.4.3"
|
||||||
|
},
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/shivammathur/setup-php/issues"
|
||||||
},
|
},
|
||||||
"husky": {
|
"husky": {
|
||||||
"skipCI": true,
|
"skipCI": true,
|
||||||
"hooks": {
|
"hooks": {
|
||||||
"pre-commit": "npm run format && npm run lint && npm run build && npm run release"
|
"pre-commit": "npm run format && npm run lint && npm run test && npm run build && npm run release"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,9 @@ export async function addINIValuesUnix(
|
|||||||
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
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
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,38 +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> {
|
||||||
const xdebug =
|
const xdebug =
|
||||||
(await extensions.addExtension('xdebug', version, os_version, true)) + pipe;
|
(await extensions.addExtension(extension, version, os_version, true)) +
|
||||||
const ini = await config.addINIValues(
|
pipe;
|
||||||
'xdebug.mode=coverage',
|
|
||||||
os_version,
|
|
||||||
true
|
|
||||||
);
|
|
||||||
const log = await utils.addLog(
|
const log = await utils.addLog(
|
||||||
'$tick',
|
'$tick',
|
||||||
'xdebug',
|
extension,
|
||||||
'Xdebug enabled as coverage driver',
|
'Xdebug enabled as coverage driver',
|
||||||
os_version
|
os_version
|
||||||
);
|
);
|
||||||
switch (true) {
|
return xdebug + '\n' + log;
|
||||||
case /8.[0-9]/.test(version):
|
|
||||||
return xdebug + '\n' + ini + '\n' + log;
|
|
||||||
case /5\.[3-6]|7.[0-4]/.test(version):
|
|
||||||
default:
|
|
||||||
return xdebug + '\n' + log;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -146,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:
|
||||||
|
@ -21,7 +21,7 @@ export async function addExtensionDarwin(
|
|||||||
let command = '';
|
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 +
|
||||||
@ -30,35 +30,24 @@ export async function addExtensionDarwin(
|
|||||||
' ' +
|
' ' +
|
||||||
ext_prefix;
|
ext_prefix;
|
||||||
return;
|
return;
|
||||||
// match 5.6xdebug to 8.0xdebug, 5.6igbinary to 8.0igbinary
|
// match 5.6 to 8.0 amqp, grpc, igbinary, imagick, imap, mongodb, msgpack, pecl_http, propro, protobuf, raphf, rdkafka, redis, swoole, xdebug, xdebug2, yaml, zmq
|
||||||
// match 5.6grpc to 7.4grpc, 5.6imagick to 7.4imagick, 5.6protobuf to 7.4protobuf, 5.6swoole to 7.4swoole
|
|
||||||
// match 7.1pcov to 8.0pcov
|
// match 7.1pcov to 8.0pcov
|
||||||
case /(5\.6|7\.[0-4]|8\.0)(xdebug|igbinary)/.test(version_extension):
|
// match 7.0vips to 8.0vips
|
||||||
case /(5\.6|7\.[0-4])(grpc|imagick|protobuf|swoole)/.test(
|
case /(5\.6|7\.[0-4]|8.0)(amqp|grpc|igbinary|imagick|imap|mongodb|msgpack|^(pecl_)?http$|propro|protobuf|psr|raphf|rdkafka|redis|swoole|xdebug|xdebug2|yaml|zmq)/.test(
|
||||||
version_extension
|
version_extension
|
||||||
):
|
):
|
||||||
case /(7\.[1-4]|8\.0])pcov/.test(version_extension):
|
case /(7\.[1-4]|8\.0])pcov/.test(version_extension):
|
||||||
command = 'add_brew_extension ' + extension_name;
|
case /^(5\.6|7\.[0-3])phalcon3$|^7\.[2-4]phalcon4$/.test(
|
||||||
break;
|
version_extension
|
||||||
// match 5.6redis
|
):
|
||||||
case /5\.6redis/.test(version_extension):
|
case /(7\.[0-4]|8\.0])vips/.test(version_extension):
|
||||||
command = command_prefix + 'redis-2.2.8';
|
command = 'add_brew_extension ' + extension_name.replace('pecl_', '');
|
||||||
break;
|
break;
|
||||||
// match sqlite
|
// match sqlite
|
||||||
case /^sqlite$/.test(extension):
|
case /^sqlite$/.test(extension):
|
||||||
extension = 'sqlite3';
|
extension = 'sqlite3';
|
||||||
command = command_prefix + extension;
|
command = command_prefix + extension;
|
||||||
break;
|
break;
|
||||||
// match 7.0phalcon3...7.3phalcon3 and 7.2phalcon4...7.4phalcon4
|
|
||||||
case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$/.test(version_extension):
|
|
||||||
script +=
|
|
||||||
'\nbash ' +
|
|
||||||
path.join(__dirname, '../src/scripts/ext/phalcon_darwin.sh') +
|
|
||||||
' ' +
|
|
||||||
extension +
|
|
||||||
' ' +
|
|
||||||
version;
|
|
||||||
return;
|
|
||||||
default:
|
default:
|
||||||
command = command_prefix + extension;
|
command = command_prefix + extension;
|
||||||
break;
|
break;
|
||||||
@ -91,7 +80,7 @@ export async function addExtensionWindows(
|
|||||||
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
|
// match 5.6mysql, 5.6mysqli, 5.6mysqlnd
|
||||||
@ -99,6 +88,10 @@ export async function addExtensionWindows(
|
|||||||
script +=
|
script +=
|
||||||
'\nAdd-Extension mysql\nAdd-Extension mysqli\nAdd-Extension mysqlnd';
|
'\nAdd-Extension mysql\nAdd-Extension mysqli\nAdd-Extension mysqlnd';
|
||||||
break;
|
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.0mysql..8.0mysql
|
||||||
// match 7.0mysqli..8.0mysqli
|
// match 7.0mysqli..8.0mysqli
|
||||||
// match 7.0mysqlnd..8.0mysqlnd
|
// match 7.0mysqlnd..8.0mysqlnd
|
||||||
@ -151,7 +144,7 @@ export async function addExtensionLinux(
|
|||||||
let command = '';
|
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 +
|
||||||
@ -162,13 +155,9 @@ export async function addExtensionLinux(
|
|||||||
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):
|
||||||
command =
|
script +=
|
||||||
'\nbash ' +
|
'\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 +=
|
||||||
@ -179,6 +168,10 @@ export async function addExtensionLinux(
|
|||||||
' ' +
|
' ' +
|
||||||
version;
|
version;
|
||||||
return;
|
return;
|
||||||
|
// match 7.2xdebug2 to 7.4xdebug2
|
||||||
|
case /^7\.[2-4]xdebug2$/.test(version_extension):
|
||||||
|
script += '\nadd_pecl_extension xdebug 2.9.8 ' + ext_prefix;
|
||||||
|
return;
|
||||||
// match sqlite
|
// match sqlite
|
||||||
case /^sqlite$/.test(extension):
|
case /^sqlite$/.test(extension):
|
||||||
extension = 'sqlite3';
|
extension = 'sqlite3';
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
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';
|
||||||
@ -29,14 +29,7 @@ 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);
|
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);
|
||||||
@ -62,35 +55,50 @@ export async function build(
|
|||||||
*/
|
*/
|
||||||
export async function run(): Promise<void> {
|
export async function run(): Promise<void> {
|
||||||
try {
|
try {
|
||||||
core.warning(
|
if ((await utils.readEnv('ImageOS')) == 'ubuntu16') {
|
||||||
'setup-php v1 is deprecated.\nPlease upgrade to v2 - https://github.com/shivammathur/setup-php/wiki/Switch-to-v2'
|
|
||||||
);
|
|
||||||
const os_version: string = process.platform;
|
|
||||||
let version: string = await utils.getInput('php-version', true);
|
|
||||||
version = version.length > 1 ? version.slice(0, 3) : version + '.0';
|
|
||||||
if (version == '8.1') {
|
|
||||||
core.setFailed(
|
core.setFailed(
|
||||||
'PHP 8.1 is not supported on setup-php v1.\nPlease upgrade to v2 - https://github.com/shivammathur/setup-php/wiki/Switch-to-v2'
|
'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'
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// check the os version and run the respective script
|
core.warning(
|
||||||
let script_path = '';
|
'setup-php v1 is deprecated.\nPlease upgrade to v2 - https://setup-php.com/w/Switch-to-v2'
|
||||||
switch (os_version) {
|
);
|
||||||
case 'darwin':
|
const version: string = await utils.parseVersion(
|
||||||
case 'linux':
|
await utils.getInput('php-version', true)
|
||||||
script_path = await build(os_version + '.sh', version, os_version);
|
);
|
||||||
await exec('bash ' + script_path + ' ' + version + ' ' + __dirname);
|
if (parseFloat(version) < 5.6 || parseFloat(version) > 8.0) {
|
||||||
break;
|
core.setFailed(
|
||||||
case 'win32':
|
`setup-php v1 supports only PHP 5.6 to 8.0.\nPlease upgrade to v2 - https://setup-php.com/w/Switch-to-v2`
|
||||||
script_path = await build('win32.ps1', version, os_version);
|
);
|
||||||
await exec('pwsh ' + script_path + ' ' + version + ' ' + __dirname);
|
return;
|
||||||
break;
|
}
|
||||||
|
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');
|
||||||
}
|
}
|
||||||
} 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);
|
||||||
|
});
|
||||||
|
@ -19,7 +19,7 @@ add_log() {
|
|||||||
# Function to remove extensions
|
# Function to remove extensions
|
||||||
remove_extension() {
|
remove_extension() {
|
||||||
extension=$1
|
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 "$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
|
||||||
}
|
}
|
||||||
@ -43,12 +43,12 @@ pecl_install() {
|
|||||||
# Function to get the PECL version
|
# Function to get the PECL version
|
||||||
get_pecl_version() {
|
get_pecl_version() {
|
||||||
extension=$1
|
extension=$1
|
||||||
stability="$(echo "$2" | grep -m 1 -Eio "(alpha|beta|rc|snapshot)")"
|
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 "${curl_opts[@]}" "$pecl_rest$extension"/allreleases.xml)
|
response=$(curl "${curl_opts[@]}" "$pecl_rest$extension"/allreleases.xml)
|
||||||
pecl_version=$(echo "$response" | grep -m 1 -Eio "(\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"
|
||||||
}
|
}
|
||||||
@ -58,7 +58,7 @@ add_pecl_extension() {
|
|||||||
extension=$1
|
extension=$1
|
||||||
pecl_version=$2
|
pecl_version=$2
|
||||||
prefix=$3
|
prefix=$3
|
||||||
if [[ $pecl_version =~ .*(alpha|beta|rc|snapshot).* ]]; then
|
if [[ $pecl_version =~ .*(alpha|beta|rc|snapshot|preview).* ]]; then
|
||||||
pecl_version=$(get_pecl_version "$extension" "$pecl_version")
|
pecl_version=$(get_pecl_version "$extension" "$pecl_version")
|
||||||
fi
|
fi
|
||||||
if ! check_extension "$extension" && [ -e "$ext_dir/$extension.so" ]; then
|
if ! check_extension "$extension" && [ -e "$ext_dir/$extension.so" ]; then
|
||||||
@ -77,14 +77,38 @@ add_pecl_extension() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 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.
|
# Function to install a php extension from shivammathur/extensions tap.
|
||||||
add_brew_extension() {
|
add_brew_extension() {
|
||||||
extension=$1
|
formula=$1
|
||||||
if ! brew tap | grep shivammathur/extensions; then
|
extension=${formula//[0-9]/}
|
||||||
brew tap --shallow shivammathur/extensions
|
add_brew_tap shivammathur/homebrew-php
|
||||||
fi
|
add_brew_tap shivammathur/homebrew-extensions
|
||||||
brew install "$extension@$version"
|
sudo mv "$tap_dir"/shivammathur/homebrew-extensions/.github/deps/"$formula"/* "$tap_dir/homebrew/homebrew-core/Formula/" 2>/dev/null || true
|
||||||
sudo cp "$(brew --prefix)/opt/$extension@$version/$extension.so" "$ext_dir"
|
brew install "$formula@$version"
|
||||||
|
sudo cp "$brew_prefix/opt/$formula@$version/$extension.so" "$ext_dir"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to setup extensions
|
# Function to setup extensions
|
||||||
@ -123,10 +147,19 @@ configure_composer() {
|
|||||||
add_log "$cross" "composer" "Could not download composer"
|
add_log "$cross" "composer" "Could not download composer"
|
||||||
exit 1;
|
exit 1;
|
||||||
fi
|
fi
|
||||||
composer -q global config process-timeout 0
|
if ! [ -d "$composer_home" ]; then
|
||||||
echo "/Users/$USER/.composer/vendor/bin" >> "$GITHUB_PATH"
|
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
|
if [ -n "$COMPOSER_TOKEN" ]; then
|
||||||
composer -q global config github-oauth.github.com "$COMPOSER_TOKEN"
|
composer -q config -g github-oauth.github.com "$COMPOSER_TOKEN"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -145,6 +178,10 @@ add_tool() {
|
|||||||
else
|
else
|
||||||
status_code=$(sudo curl -w "%{http_code}" -o "$tool_path" "${curl_opts[@]}" "$url")
|
status_code=$(sudo curl -w "%{http_code}" -o "$tool_path" "${curl_opts[@]}" "$url")
|
||||||
fi
|
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
|
||||||
@ -173,16 +210,22 @@ add_composertool() {
|
|||||||
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 &&
|
||||||
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
|
||||||
}
|
}
|
||||||
@ -192,26 +235,66 @@ 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
|
||||||
|
[ -f "$lib" ] || break
|
||||||
|
lib_name=$(basename "$lib")
|
||||||
|
sudo cp -a "$lib" "$brew_prefix/lib/$lib_name" 2>/dev/null || true
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
patch_brew() {
|
||||||
|
sudo sed -i '' "s/ keg.link(verbose: verbose?)/ keg.link(verbose: verbose?, overwrite: true)/" "$brew_repo"/Library/Homebrew/formula_installer.rb
|
||||||
|
# shellcheck disable=SC2064
|
||||||
|
trap "git -C $brew_repo stash >/dev/null 2>&1" exit
|
||||||
|
}
|
||||||
|
|
||||||
# Function to update dependencies
|
# Function to update dependencies
|
||||||
update_dependencies() {
|
update_dependencies() {
|
||||||
if [ "$version" = '8.0' ]; then
|
if [ "${ImageOS:-}" != "" ] && [ "${ImageVersion:-}" != "" ]; then
|
||||||
|
patch_brew
|
||||||
while read -r formula; do
|
while read -r formula; do
|
||||||
curl -o "$(brew --prefix)/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/$formula.rb" "${curl_opts[@]}" "https://raw.githubusercontent.com/Homebrew/homebrew-core/master/Formula/$formula.rb" &
|
(
|
||||||
|
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 "$formula"
|
||||||
|
) &
|
||||||
to_wait+=( $! )
|
to_wait+=( $! )
|
||||||
done < "$(brew --prefix)/Homebrew/Library/Taps/shivammathur/homebrew-php/.github/deps/${ImageOS:?}_${ImageVersion:?}"
|
done < "$tap_dir/shivammathur/homebrew-php/.github/deps/${ImageOS:?}_${ImageVersion:?}"
|
||||||
wait "${to_wait[@]}"
|
wait "${to_wait[@]}"
|
||||||
fi
|
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() {
|
setup_php() {
|
||||||
|
add_brew_tap shivammathur/homebrew-php
|
||||||
update_dependencies
|
update_dependencies
|
||||||
export HOMEBREW_NO_INSTALL_CLEANUP=TRUE
|
brew upgrade shivammathur/php/php@"$version" 2>/dev/null || brew install shivammathur/php/php@"$version"
|
||||||
brew tap --shallow shivammathur/homebrew-php
|
|
||||||
brew install shivammathur/php/php@"$version"
|
|
||||||
brew link --force --overwrite php@"$version"
|
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="✗"
|
||||||
@ -219,7 +302,19 @@ version=$1
|
|||||||
dist=$2
|
dist=$2
|
||||||
tool_path_dir="/usr/local/bin"
|
tool_path_dir="/usr/local/bin"
|
||||||
curl_opts=(-sL)
|
curl_opts=(-sL)
|
||||||
existing_version=$(php-config --version 2>/dev/null | cut -c 1-3)
|
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
|
# Setup PHP
|
||||||
step_log "Setup PHP"
|
step_log "Setup PHP"
|
||||||
@ -231,11 +326,15 @@ else
|
|||||||
fi
|
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")
|
||||||
sudo chmod 777 "$ini_file" "$tool_path_dir"
|
sudo chmod 777 "$ini_file" "$tool_path_dir"
|
||||||
echo -e "date.timezone=UTC\nmemory_limit=-1" >>"$ini_file"
|
configure_php
|
||||||
ext_dir=$(php -i | grep -Ei "extension_dir => /" | sed -e "s|.*=> s*||")
|
ext_dir=$(php -i | grep -Ei "extension_dir => /" | sed -e "s|.*=> s*||")
|
||||||
scan_dir=$(php --ini | grep additional | sed -e "s|.*: s*||")
|
scan_dir=$(php --ini | grep additional | sed -e "s|.*: s*||")
|
||||||
sudo mkdir -p "$ext_dir"
|
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 ' ')
|
||||||
|
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/"
|
sudo cp "$dist"/../src/configs/*.json "$RUNNER_TOOL_CACHE/"
|
||||||
add_log "$tick" "PHP" "$status PHP $semver"
|
add_log "$tick" "PHP" "$status PHP $semver"
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -1,47 +0,0 @@
|
|||||||
# Function to log result of a operation
|
|
||||||
add_log() {
|
|
||||||
mark=$1
|
|
||||||
subject=$2
|
|
||||||
message=$3
|
|
||||||
if [ "$mark" = "$tick" ]; then
|
|
||||||
printf "\033[32;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s\033[0m\n" "$mark" "$subject" "$message"
|
|
||||||
else
|
|
||||||
printf "\033[31;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s\033[0m\n" "$mark" "$subject" "$message"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to install phalcon
|
|
||||||
install_phalcon() {
|
|
||||||
(
|
|
||||||
sed -i '' '/extension.*psr/d' "$ini_file"
|
|
||||||
brew tap shivammathur/homebrew-phalcon >/dev/null 2>&1
|
|
||||||
brew install phalcon@"$php_version"_"$extension_major" >/dev/null 2>&1
|
|
||||||
sudo cp /usr/local/opt/psr@"$php_version"/psr.so "$ext_dir" >/dev/null 2>&1
|
|
||||||
sudo cp /usr/local/opt/phalcon@"$php_version"_"$extension_major"/phalcon.so "$ext_dir" >/dev/null 2>&1
|
|
||||||
add_log "$tick" "$extension" "Installed and enabled"
|
|
||||||
) || add_log "$cross" "$extension" "Could not install $extension on PHP $semver"
|
|
||||||
}
|
|
||||||
|
|
||||||
tick="✓"
|
|
||||||
cross="✗"
|
|
||||||
extension=$1
|
|
||||||
extension_major=${extension: -1}
|
|
||||||
php_version=$2
|
|
||||||
semver=$(php -v | head -n 1 | cut -f 2 -d ' ')
|
|
||||||
ini_file=$(php --ini | grep "Loaded Configuration" | sed -e "s|.*:s*||" | sed "s/ //g")
|
|
||||||
ext_dir=$(php -i | grep "extension_dir => /usr" | sed -e "s|.*=> s*||")
|
|
||||||
if [ -e "$ext_dir/psr.so" ] && [ -e "$ext_dir/phalcon.so" ]; then
|
|
||||||
phalcon_version=$(php -d="extension=psr.so" -d="extension=phalcon.so" -r "echo phpversion('phalcon');" 2>/dev/null | cut -d'.' -f 1)
|
|
||||||
if php -m | grep -i -q -w psr; then
|
|
||||||
phalcon_version=$(php -d="extension=phalcon.so" -r "echo phpversion('phalcon');" 2>/dev/null | cut -d'.' -f 1)
|
|
||||||
fi
|
|
||||||
if [ "$phalcon_version" != "$extension_major" ]; then
|
|
||||||
install_phalcon
|
|
||||||
else
|
|
||||||
if ! php -m | grep -i -q -w psr; then echo "extension=psr.so" >>"$ini_file"; fi
|
|
||||||
echo "extension=phalcon.so" >>"$ini_file"
|
|
||||||
add_log "$tick" "$extension" "Enabled"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
install_phalcon
|
|
||||||
fi
|
|
@ -16,45 +16,59 @@ add_log() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to backup and cleanup package lists
|
# Function to backup and cleanup package lists.
|
||||||
cleanup_lists() {
|
cleanup_lists() {
|
||||||
|
ppa_prefix=${1-ondrej}
|
||||||
if [ ! -e /etc/apt/sources.list.d.save ]; then
|
if [ ! -e /etc/apt/sources.list.d.save ]; then
|
||||||
sudo mv /etc/apt/sources.list.d /etc/apt/sources.list.d.save || true
|
sudo mv /etc/apt/sources.list.d /etc/apt/sources.list.d.save
|
||||||
sudo mkdir /etc/apt/sources.list.d
|
sudo mkdir /etc/apt/sources.list.d
|
||||||
sudo mv /etc/apt/sources.list.d.save/*ondrej*.list /etc/apt/sources.list.d/ || true
|
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
|
trap "sudo mv /etc/apt/sources.list.d.save/*.list /etc/apt/sources.list.d/ 2>/dev/null" exit
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to update php ppa
|
# 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() {
|
update_lists() {
|
||||||
if [ "$lists_updated" = "false" ]; then
|
if [ ! -e /tmp/setup_php ]; then
|
||||||
cleanup_lists >/dev/null 2>&1
|
add_ppa ondrej/php >/dev/null 2>&1
|
||||||
|
cleanup_lists
|
||||||
sudo "$debconf_fix" apt-get update >/dev/null 2>&1
|
sudo "$debconf_fix" apt-get update >/dev/null 2>&1
|
||||||
|
echo '' | sudo tee /tmp/setup_php >/dev/null 2>&1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to configure PECL
|
# 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 "$pecl_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
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to get the PECL version
|
# Function to get the PECL version
|
||||||
get_pecl_version() {
|
get_pecl_version() {
|
||||||
extension=$1
|
extension=$1
|
||||||
stability="$(echo "$2" | grep -m 1 -Eio "(alpha|beta|rc|snapshot)")"
|
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 "${curl_opts[@]}" "$pecl_rest$extension"/allreleases.xml)
|
response=$(curl "${curl_opts[@]}" "$pecl_rest$extension"/allreleases.xml)
|
||||||
pecl_version=$(echo "$response" | grep -m 1 -Pio "(\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"
|
||||||
}
|
}
|
||||||
@ -65,6 +79,14 @@ pecl_install() {
|
|||||||
yes '' | sudo pecl install -f "$extension" >/dev/null 2>&1
|
yes '' | sudo pecl install -f "$extension" >/dev/null 2>&1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Function to enable existing extensions.
|
||||||
|
enable_extension() {
|
||||||
|
sudo find /var/lib/php/modules/"$version" -path "*disabled*$1" -delete
|
||||||
|
if ! check_extension "$1" && [ -e "$ext_dir/$1.so" ]; then
|
||||||
|
echo "$2=$ext_dir/$1.so" | sudo tee -a "$pecl_file" >/dev/null
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
# Function to test if extension is loaded
|
# Function to test if extension is loaded
|
||||||
check_extension() {
|
check_extension() {
|
||||||
extension=$1
|
extension=$1
|
||||||
@ -78,10 +100,11 @@ check_extension() {
|
|||||||
# Function to delete extensions
|
# Function to delete extensions
|
||||||
delete_extension() {
|
delete_extension() {
|
||||||
extension=$1
|
extension=$1
|
||||||
sudo sed -i "/$extension/d" "$ini_file"
|
sudo sed -Ei "/=(.*\/)?\"?$extension/d" "$ini_file"
|
||||||
sudo sed -i "/$extension/d" "$pecl_file"
|
sudo sed -Ei "/=(.*\/)?\"?$extension/d" "$pecl_file"
|
||||||
sudo rm -rf "$scan_dir"/*"$extension"* >/dev/null 2>&1
|
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
|
||||||
@ -98,14 +121,12 @@ add_extension() {
|
|||||||
extension=$1
|
extension=$1
|
||||||
install_command=$2
|
install_command=$2
|
||||||
prefix=$3
|
prefix=$3
|
||||||
if ! check_extension "$extension" && [ -e "$ext_dir/$extension.so" ]; then
|
enable_extension "$extension" "$prefix"
|
||||||
echo "$prefix=$extension.so" >>"$ini_file" && add_log "$tick" "$extension" "Enabled"
|
if check_extension "$extension"; then
|
||||||
elif check_extension "$extension"; then
|
|
||||||
add_log "$tick" "$extension" "Enabled"
|
add_log "$tick" "$extension" "Enabled"
|
||||||
elif ! check_extension "$extension"; then
|
elif ! check_extension "$extension"; then
|
||||||
eval "$install_command" >/dev/null 2>&1 ||
|
eval "$install_command" >/dev/null 2>&1 ||
|
||||||
(update_lists && eval "$install_command" >/dev/null 2>&1) ||
|
(update_lists && eval "$install_command" >/dev/null 2>&1) || pecl_install "$extension"
|
||||||
sudo pecl install -f "$extension" >/dev/null 2>&1
|
|
||||||
(check_extension "$extension" && add_log "$tick" "$extension" "Installed and enabled") ||
|
(check_extension "$extension" && 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"
|
||||||
fi
|
fi
|
||||||
@ -117,12 +138,11 @@ add_pecl_extension() {
|
|||||||
extension=$1
|
extension=$1
|
||||||
pecl_version=$2
|
pecl_version=$2
|
||||||
prefix=$3
|
prefix=$3
|
||||||
if [[ $pecl_version =~ .*(alpha|beta|rc|snapshot).* ]]; then
|
configure_pecl
|
||||||
|
if [[ $pecl_version =~ .*(alpha|beta|rc|snapshot|preview).* ]]; then
|
||||||
pecl_version=$(get_pecl_version "$extension" "$pecl_version")
|
pecl_version=$(get_pecl_version "$extension" "$pecl_version")
|
||||||
fi
|
fi
|
||||||
if ! check_extension "$extension" && [ -e "$ext_dir/$extension.so" ]; then
|
enable_extension "$extension" "$prefix"
|
||||||
echo "$prefix=$ext_dir/$extension.so" >>"$pecl_file"
|
|
||||||
fi
|
|
||||||
ext_version=$(php -r "echo phpversion('$extension');")
|
ext_version=$(php -r "echo phpversion('$extension');")
|
||||||
if [ "$ext_version" = "$pecl_version" ]; then
|
if [ "$ext_version" = "$pecl_version" ]; then
|
||||||
add_log "$tick" "$extension" "Enabled"
|
add_log "$tick" "$extension" "Enabled"
|
||||||
@ -154,10 +174,19 @@ configure_composer() {
|
|||||||
add_log "$cross" "composer" "Could not download composer"
|
add_log "$cross" "composer" "Could not download composer"
|
||||||
exit 1;
|
exit 1;
|
||||||
fi
|
fi
|
||||||
composer -q global config process-timeout 0
|
if ! [ -d "$composer_home" ]; then
|
||||||
echo "/home/$USER/.composer/vendor/bin" >> "$GITHUB_PATH"
|
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
|
if [ -n "$COMPOSER_TOKEN" ]; then
|
||||||
composer -q global config github-oauth.github.com "$COMPOSER_TOKEN"
|
composer -q config -g github-oauth.github.com "$COMPOSER_TOKEN"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -176,6 +205,10 @@ add_tool() {
|
|||||||
else
|
else
|
||||||
status_code=$(sudo curl -w "%{http_code}" -o "$tool_path" "${curl_opts[@]}" "$url")
|
status_code=$(sudo curl -w "%{http_code}" -o "$tool_path" "${curl_opts[@]}" "$url")
|
||||||
fi
|
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
|
||||||
@ -200,9 +233,16 @@ add_composertool() {
|
|||||||
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 &&
|
||||||
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
|
||||||
@ -220,6 +260,16 @@ setup_master() {
|
|||||||
curl "${curl_opts[@]}" https://github.com/shivammathur/php-builder/releases/latest/download/install.sh | bash -s "github"
|
curl "${curl_opts[@]}" https://github.com/shivammathur/php-builder/releases/latest/download/install.sh | bash -s "github"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
add_packaged_php() {
|
||||||
|
if [ "${use_package_cache:-true}" = "false" ]; then
|
||||||
|
update_lists
|
||||||
|
IFS=' ' read -r -a packages <<<"$(echo "cli curl mbstring xml intl" | sed "s/[^ ]*/php$version-&/g")"
|
||||||
|
$apt_install "${packages[@]}"
|
||||||
|
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
|
||||||
add_pecl() {
|
add_pecl() {
|
||||||
add_devtools
|
add_devtools
|
||||||
@ -248,38 +298,41 @@ php_semver() {
|
|||||||
fi
|
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="✗"
|
||||||
lists_updated="false"
|
|
||||||
pecl_config="false"
|
|
||||||
version=$1
|
version=$1
|
||||||
dist=$2
|
dist=$2
|
||||||
debconf_fix="DEBIAN_FRONTEND=noninteractive"
|
debconf_fix="DEBIAN_FRONTEND=noninteractive"
|
||||||
apt_install="sudo $debconf_fix apt-get install -y"
|
apt_install="sudo $debconf_fix apt-fast install -y --no-install-recommends"
|
||||||
tool_path_dir="/usr/local/bin"
|
tool_path_dir="/usr/local/bin"
|
||||||
curl_opts=(-sL)
|
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)
|
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 /run/php
|
sudo mkdir -m 777 -p "$HOME/.composer" /var/run /run/php
|
||||||
. /etc/lsb-release
|
. /etc/lsb-release
|
||||||
if [ "$DISTRIB_RELEASE" = "20.04" ]; then
|
|
||||||
if ! apt-cache policy | grep -q ondrej/php; then
|
|
||||||
cleanup_lists >/dev/null 2>&1
|
|
||||||
LC_ALL=C.UTF-8 sudo apt-add-repository ppa:ondrej/php -y >/dev/null 2>&1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$existing_version" != "$version" ]; then
|
if [ "$existing_version" != "$version" ]; then
|
||||||
if [ ! -e "/usr/bin/php$version" ]; then
|
if [ ! -e "/usr/bin/php$version" ]; then
|
||||||
if [ "$version" = "8.0" ]; then
|
if [ "$version" = "8.0" ]; then
|
||||||
setup_master >/dev/null 2>&1
|
setup_master >/dev/null 2>&1
|
||||||
else
|
else
|
||||||
update_lists
|
add_packaged_php >/dev/null 2>&1
|
||||||
IFS=' ' read -r -a packages <<< "$(echo "cli curl mbstring xml intl" | sed "s/[^ ]*/php$version-&/g")"
|
|
||||||
$apt_install "${packages[@]}" >/dev/null 2>&1
|
|
||||||
fi
|
fi
|
||||||
status="Installed"
|
status="Installed"
|
||||||
else
|
else
|
||||||
@ -291,12 +344,17 @@ else
|
|||||||
status="Found"
|
status="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)
|
semver=$(php_semver)
|
||||||
scan_dir=$(php --ini | grep additional | sed -e "s|.*: s*||")
|
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 => /" | sed -e "s|.*=> s*||")
|
ext_dir=$(php -i | grep "extension_dir => /" | sed -e "s|.*=> s*||")
|
||||||
pecl_file="$scan_dir"/99-pecl.ini
|
pecl_file="$scan_dir"/99-pecl.ini
|
||||||
echo '' | sudo tee "$pecl_file" >/dev/null 2>&1
|
echo '' | sudo tee "$pecl_file" >/dev/null 2>&1
|
||||||
|
configure_php
|
||||||
sudo rm -rf /usr/local/bin/phpunit >/dev/null 2>&1
|
sudo rm -rf /usr/local/bin/phpunit >/dev/null 2>&1
|
||||||
sudo chmod 777 "$ini_file" "$pecl_file" "$tool_path_dir"
|
sudo chmod 777 "$ini_file" "$pecl_file" "$tool_path_dir"
|
||||||
sudo cp "$dist"/../src/configs/*.json "$RUNNER_TOOL_CACHE/"
|
sudo cp "$dist"/../src/configs/*.json "$RUNNER_TOOL_CACHE/"
|
||||||
|
@ -46,25 +46,39 @@ Function Add-ToProfile {
|
|||||||
Function Add-Printf {
|
Function Add-Printf {
|
||||||
if (-not(Test-Path "C:\Program Files\Git\usr\bin\printf.exe")) {
|
if (-not(Test-Path "C:\Program Files\Git\usr\bin\printf.exe")) {
|
||||||
if(Test-Path "C:\msys64\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
|
New-Item -Path $php_dir\printf.exe -ItemType SymbolicLink -Value C:\msys64\usr\bin\printf.exe -Force > $null 2>&1
|
||||||
} else {
|
} else {
|
||||||
Invoke-WebRequest -UseBasicParsing -Uri "https://github.com/shivammathur/printf/releases/latest/download/printf-x64.zip" -OutFile "$php_dir\printf.zip"
|
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
|
Expand-Archive -Path $php_dir\printf.zip -DestinationPath $php_dir -Force
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
New-Item -Path $php_dir\printf.exe -ItemType SymbolicLink -Value "C:\Program Files\Git\usr\bin\printf.exe"
|
New-Item -Path $php_dir\printf.exe -ItemType SymbolicLink -Value "C:\Program Files\Git\usr\bin\printf.exe" -Force > $null 2>&1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Function Install-PhpManager() {
|
Function Install-PSPackage() {
|
||||||
$module_path = "$php_dir\PhpManager\PhpManager.psm1"
|
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)) {
|
if(-not (Test-Path $module_path -PathType Leaf)) {
|
||||||
$zip_file = "$php_dir\PhpManager.zip"
|
$zip_file = "$php_dir\$package.zip"
|
||||||
Invoke-WebRequest -UseBasicParsing -Uri 'https://github.com/mlocati/powershell-phpmanager/releases/latest/download/PhpManager.zip' -OutFile $zip_file
|
Invoke-WebRequest -UseBasicParsing -Uri $url -OutFile $zip_file
|
||||||
Expand-Archive -Path $zip_file -DestinationPath $php_dir -Force
|
Expand-Archive -Path $zip_file -DestinationPath $php_dir -Force
|
||||||
}
|
}
|
||||||
Import-Module $module_path
|
Import-Module $module_path
|
||||||
Add-ToProfile $current_profile 'powershell-phpmanager' "Import-Module $module_path"
|
Add-ToProfile $current_profile "$package-search" "Import-Module $module_path"
|
||||||
|
|
||||||
|
if($null -eq (Get-Command $cmdlet -ErrorAction SilentlyContinue)) {
|
||||||
|
Install-Module -Name $cmdlet -Force
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Function Add-Extension {
|
Function Add-Extension {
|
||||||
@ -147,10 +161,13 @@ Function Edit-ComposerConfig() {
|
|||||||
Add-Log "$cross" "composer" "Could not download composer"
|
Add-Log "$cross" "composer" "Could not download composer"
|
||||||
exit 1;
|
exit 1;
|
||||||
}
|
}
|
||||||
composer -q global config process-timeout 0
|
if (-not(Test-Path $composer_json)) {
|
||||||
Write-Output "$env:APPDATA\Composer\vendor\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8
|
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) {
|
if (Test-Path env:COMPOSER_TOKEN) {
|
||||||
composer -q global config github-oauth.github.com $env:COMPOSER_TOKEN
|
composer -q config -g github-oauth.github.com $env:COMPOSER_TOKEN
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -171,32 +188,39 @@ Function Add-Tool() {
|
|||||||
if($url.Count -gt 1) { $url = $url[0] }
|
if($url.Count -gt 1) { $url = $url[0] }
|
||||||
if ($tool -eq "symfony") {
|
if ($tool -eq "symfony") {
|
||||||
Invoke-WebRequest -UseBasicParsing -Uri $url -OutFile $php_dir\$tool.exe
|
Invoke-WebRequest -UseBasicParsing -Uri $url -OutFile $php_dir\$tool.exe
|
||||||
Add-ToProfile $current_profile $tool "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-ToProfile $current_profile $tool "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
|
|
||||||
} elseif($tool -eq "cs2pr") {
|
|
||||||
(Get-Content $php_dir/cs2pr).replace('exit(9)', 'exit(0)') | Set-Content $php_dir/cs2pr
|
|
||||||
} elseif($tool -eq "composer") {
|
|
||||||
Edit-ComposerConfig $php_dir\$tool
|
|
||||||
} elseif($tool -eq "wp-cli") {
|
|
||||||
Copy-Item $php_dir\wp-cli.bat -Destination $php_dir\wp.bat
|
|
||||||
}
|
|
||||||
|
|
||||||
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"
|
||||||
@ -221,12 +245,21 @@ Function Add-Composertool() {
|
|||||||
[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($?) {
|
||||||
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() {
|
||||||
@ -240,8 +273,14 @@ $php_dir = 'C:\tools\php'
|
|||||||
$ext_dir = "$php_dir\ext"
|
$ext_dir = "$php_dir\ext"
|
||||||
$current_profile = "$PSHOME\Profile.ps1"
|
$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'
|
||||||
|
if(-not([Environment]::Is64BitOperatingSystem) -or $version -lt '7.0') {
|
||||||
|
$arch = 'x86'
|
||||||
|
}
|
||||||
$ts = $env:PHPTS -eq 'ts'
|
$ts = $env:PHPTS -eq 'ts'
|
||||||
if($env:PHPTS -ne 'ts') {
|
if($env:PHPTS -ne 'ts') {
|
||||||
$env:PHPTS = 'nts'
|
$env:PHPTS = 'nts'
|
||||||
@ -252,7 +291,7 @@ if(-not(Test-Path -LiteralPath $current_profile)) {
|
|||||||
|
|
||||||
Add-Printf >$null 2>&1
|
Add-Printf >$null 2>&1
|
||||||
Step-Log "Setup PhpManager"
|
Step-Log "Setup PhpManager"
|
||||||
Install-PhpManager >$null 2>&1
|
Install-PSPackage PhpManager PhpManager\PhpManager "$github/mlocati/powershell-phpmanager/releases/latest/download/PhpManager.zip" Get-Php >$null 2>&1
|
||||||
Add-Log $tick "PhpManager" "Installed"
|
Add-Log $tick "PhpManager" "Installed"
|
||||||
|
|
||||||
Step-Log "Setup PHP"
|
Step-Log "Setup PHP"
|
||||||
@ -264,25 +303,24 @@ if (Test-Path -LiteralPath $php_dir -PathType Container) {
|
|||||||
}
|
}
|
||||||
$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 (Get-InstalledModule).Name -notcontains 'VcRedist') {
|
||||||
Install-Module -Name VcRedist -Force
|
Install-PSPackage VcRedist VcRedist-main\VcRedist\VcRedist "$github/aaronparker/VcRedist/archive/main.zip" Get-VcList >$null 2>&1
|
||||||
$arch='x86'
|
|
||||||
}
|
}
|
||||||
if ($version -eq $master_version) {
|
try {
|
||||||
$version = 'master'
|
|
||||||
Invoke-WebRequest -UseBasicParsing -Uri https://dl.bintray.com/shivammathur/php/Install-PhpMaster.ps1 -OutFile $php_dir\Install-PhpMaster.ps1 > $null 2>&1
|
|
||||||
& $php_dir\Install-PhpMaster.ps1 -Architecture $arch -ThreadSafe $ts -Path $php_dir
|
|
||||||
} else {
|
|
||||||
Install-Php -Version $version -Architecture $arch -ThreadSafe $ts -InstallVC -Path $php_dir -TimeZone UTC -InitialPhpIni Production -Force > $null 2>&1
|
Install-Php -Version $version -Architecture $arch -ThreadSafe $ts -InstallVC -Path $php_dir -TimeZone UTC -InitialPhpIni Production -Force > $null 2>&1
|
||||||
}
|
} catch { }
|
||||||
} else {
|
} else {
|
||||||
$status = "Found"
|
$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) {
|
||||||
Set-PhpIniKey -Key 'memory_limit' -Value '-1' -Path $php_dir
|
Add-Log $cross "PHP" "Could not setup PHP $version"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
('date.timezone=UTC', 'memory_limit=-1', 'xdebug.mode=coverage') | ForEach-Object { $p=$_.split('='); Set-PhpIniKey -Key $p[0] -Value $p[1] -Path $php_dir }
|
||||||
Enable-PhpExtension -Extension openssl, curl, opcache, mbstring -Path $php_dir
|
Enable-PhpExtension -Extension openssl, curl, opcache, mbstring -Path $php_dir
|
||||||
Update-PhpCAInfo -Path $php_dir -Source CurrentUser
|
Update-PhpCAInfo -Path $php_dir -Source CurrentUser
|
||||||
Copy-Item -Path $dist\..\src\configs\*.json -Destination $env:RUNNER_TOOL_CACHE
|
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)"
|
||||||
|
150
src/tools.ts
150
src/tools.ts
@ -32,9 +32,10 @@ export async function getCommand(
|
|||||||
*/
|
*/
|
||||||
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 =
|
||||||
const composer_regex = /^stable$|^preview$|^snapshot$|^v?[1|2]$/;
|
/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/;
|
||||||
version = version.replace(/[><=^]*/, '');
|
const composer_regex = /^stable$|^preview$|^snapshot$|^[1|2]$/;
|
||||||
|
version = version.replace(/[><=^]*/, '').replace(/^v(\d)/, '$1');
|
||||||
switch (true) {
|
switch (true) {
|
||||||
case composer_regex.test(version):
|
case composer_regex.test(version):
|
||||||
case semver_regex.test(version):
|
case semver_regex.test(version):
|
||||||
@ -99,93 +100,29 @@ export async function getUri(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Helper function to get the codeception url
|
|
||||||
*
|
|
||||||
* @param version
|
|
||||||
* @param suffix
|
|
||||||
*/
|
|
||||||
export async function getCodeceptionUriBuilder(
|
|
||||||
version: string,
|
|
||||||
suffix: string
|
|
||||||
): Promise<string> {
|
|
||||||
return ['releases', version, suffix, 'codecept.phar']
|
|
||||||
.filter(Boolean)
|
|
||||||
.join('/');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Function to get the codeception url
|
|
||||||
*
|
|
||||||
* @param version
|
|
||||||
* @param php_version
|
|
||||||
*/
|
|
||||||
export async function getCodeceptionUri(
|
|
||||||
version: string,
|
|
||||||
php_version: string
|
|
||||||
): Promise<string> {
|
|
||||||
const codecept: string = await getCodeceptionUriBuilder(version, '');
|
|
||||||
const codecept54: string = await getCodeceptionUriBuilder(version, 'php54');
|
|
||||||
const codecept56: string = await getCodeceptionUriBuilder(version, 'php56');
|
|
||||||
// Refer to https://codeception.com/builds
|
|
||||||
switch (true) {
|
|
||||||
case /latest/.test(version):
|
|
||||||
switch (true) {
|
|
||||||
case /5\.6|7\.[0|1]/.test(php_version):
|
|
||||||
return 'php56/codecept.phar';
|
|
||||||
case /7\.[2-4]/.test(php_version):
|
|
||||||
default:
|
|
||||||
return 'codecept.phar';
|
|
||||||
}
|
|
||||||
case /(^[4-9]|\d{2,})\..*/.test(version):
|
|
||||||
switch (true) {
|
|
||||||
case /5\.6|7\.[0|1]/.test(php_version):
|
|
||||||
return codecept56;
|
|
||||||
case /7\.[2-4]/.test(php_version):
|
|
||||||
default:
|
|
||||||
return codecept;
|
|
||||||
}
|
|
||||||
case /(^2\.[4-5]\.\d+|^3\.[0-1]\.\d+).*/.test(version):
|
|
||||||
switch (true) {
|
|
||||||
case /5\.6/.test(php_version):
|
|
||||||
return codecept54;
|
|
||||||
case /7\.[0-4]/.test(php_version):
|
|
||||||
default:
|
|
||||||
return codecept;
|
|
||||||
}
|
|
||||||
case /^2\.3\.\d+.*/.test(version):
|
|
||||||
switch (true) {
|
|
||||||
case /5\.[4-6]/.test(php_version):
|
|
||||||
return codecept54;
|
|
||||||
case /^7\.[0-4]$/.test(php_version):
|
|
||||||
default:
|
|
||||||
return codecept;
|
|
||||||
}
|
|
||||||
case /(^2\.(1\.([6-9]|\d{2,}))|^2\.2\.\d+).*/.test(version):
|
|
||||||
switch (true) {
|
|
||||||
case /5\.[4-5]/.test(php_version):
|
|
||||||
return codecept54;
|
|
||||||
case /5.6|7\.[0-4]/.test(php_version):
|
|
||||||
default:
|
|
||||||
return codecept;
|
|
||||||
}
|
|
||||||
case /(^2\.(1\.[0-5]|0\.\d+)|^1\.[6-8]\.\d+).*/.test(version):
|
|
||||||
return codecept;
|
|
||||||
default:
|
|
||||||
return codecept;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helper function to get script to setup phive
|
* Helper function to get script to setup phive
|
||||||
*
|
*
|
||||||
* @param version
|
* @param version
|
||||||
|
* @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 (
|
||||||
@ -282,15 +219,21 @@ export async function getSymfonyUri(
|
|||||||
*/
|
*/
|
||||||
export async function addComposer(tools_list: string[]): Promise<string[]> {
|
export async function addComposer(tools_list: string[]): Promise<string[]> {
|
||||||
const regex_any = /^composer($|:.*)/;
|
const regex_any = /^composer($|:.*)/;
|
||||||
const regex_valid = /^composer:?($|preview$|snapshot$|v?[1-2]$)/;
|
const regex_valid =
|
||||||
|
/^composer:?($|preview$|snapshot$|v?[1-2]$|v?\d+\.\d+\.\d+[\w-]*$)/;
|
||||||
|
const regex_composer1_tools =
|
||||||
|
/hirak|prestissimo|narrowspark|composer-prefetcher/;
|
||||||
const matches: string[] = tools_list.filter(tool => regex_valid.test(tool));
|
const matches: string[] = tools_list.filter(tool => regex_valid.test(tool));
|
||||||
let composer = 'composer';
|
let composer = 'composer';
|
||||||
tools_list = tools_list.filter(tool => !regex_any.test(tool));
|
tools_list = tools_list.filter(tool => !regex_any.test(tool));
|
||||||
switch (matches[0]) {
|
switch (true) {
|
||||||
case undefined:
|
case regex_composer1_tools.test(tools_list.join(' ')):
|
||||||
|
composer = 'composer:1';
|
||||||
|
break;
|
||||||
|
case matches[0] == undefined:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
composer = matches[matches.length - 1].replace(/v([1-2])/, '$1');
|
composer = matches[matches.length - 1].replace(/v(\d\S*)/, '$1');
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
tools_list.unshift(composer);
|
tools_list.unshift(composer);
|
||||||
@ -303,21 +246,20 @@ export async function addComposer(tools_list: string[]): Promise<string[]> {
|
|||||||
* @param version
|
* @param version
|
||||||
*/
|
*/
|
||||||
export async function getComposerUrl(version: string): Promise<string> {
|
export async function getComposerUrl(version: string): Promise<string> {
|
||||||
const cache_url =
|
let cache_url = `https://github.com/shivammathur/composer-cache/releases/latest/download/composer-${version.replace(
|
||||||
'https://github.com/shivammathur/composer-cache/releases/latest/download/composer-' +
|
'latest',
|
||||||
version.replace('latest', 'stable') +
|
'stable'
|
||||||
'.phar,';
|
)}.phar`;
|
||||||
switch (version) {
|
switch (true) {
|
||||||
case 'snapshot':
|
case /^snapshot$/.test(version):
|
||||||
return cache_url + 'https://getcomposer.org/composer.phar';
|
return `${cache_url},https://getcomposer.org/composer.phar`;
|
||||||
case 'preview':
|
case /^preview$|^[1-2]$/.test(version):
|
||||||
case '1':
|
return `${cache_url},https://getcomposer.org/composer-${version}.phar`;
|
||||||
case '2':
|
case /^\d+\.\d+\.\d+[\w-]*$/.test(version):
|
||||||
return (
|
cache_url = `https://github.com/composer/composer/releases/download/${version}/composer.phar`;
|
||||||
cache_url + 'https://getcomposer.org/composer-' + version + '.phar'
|
return `${cache_url},https://getcomposer.org/composer-${version}.phar`;
|
||||||
);
|
|
||||||
default:
|
default:
|
||||||
return cache_url + 'https://getcomposer.org/composer-stable.phar';
|
return `${cache_url},https://getcomposer.org/composer-stable.phar`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -335,7 +277,10 @@ export async function getCleanedToolsList(
|
|||||||
.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)];
|
||||||
@ -455,7 +400,7 @@ export async function addTools(
|
|||||||
script += await addArchive(tool, 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;
|
||||||
@ -474,10 +419,7 @@ export async function addTools(
|
|||||||
script += await addArchive('composer', url, os_version);
|
script += await addArchive('composer', 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, url, os_version);
|
|
||||||
break;
|
break;
|
||||||
case 'phpcpd':
|
case 'phpcpd':
|
||||||
case 'phpunit':
|
case 'phpunit':
|
||||||
|
79
src/utils.ts
79
src/utils.ts
@ -1,4 +1,6 @@
|
|||||||
|
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';
|
||||||
|
|
||||||
@ -8,13 +10,16 @@ import * as core from '@actions/core';
|
|||||||
* @param property
|
* @param property
|
||||||
*/
|
*/
|
||||||
export async function readEnv(property: string): Promise<string> {
|
export async function readEnv(property: string): Promise<string> {
|
||||||
const value = process.env[property];
|
const property_lc: string = property.toLowerCase();
|
||||||
switch (value) {
|
const property_uc: string = property.toUpperCase();
|
||||||
case undefined:
|
return (
|
||||||
return '';
|
process.env[property] ||
|
||||||
default:
|
process.env[property_lc] ||
|
||||||
return value;
|
process.env[property_uc] ||
|
||||||
}
|
process.env[property_lc.replace('_', '-')] ||
|
||||||
|
process.env[property_uc.replace('_', '-')] ||
|
||||||
|
''
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -41,6 +46,45 @@ export async function getInput(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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/develop/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';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Async foreach loop
|
* Async foreach loop
|
||||||
*
|
*
|
||||||
@ -209,8 +253,7 @@ export async function extensionArray(
|
|||||||
return extension
|
return extension
|
||||||
.trim()
|
.trim()
|
||||||
.toLowerCase()
|
.toLowerCase()
|
||||||
.replace('php-', '')
|
.replace(/^php[-_]/, '');
|
||||||
.replace('php_', '');
|
|
||||||
})
|
})
|
||||||
.filter(Boolean);
|
.filter(Boolean);
|
||||||
}
|
}
|
||||||
@ -229,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);
|
||||||
}
|
}
|
||||||
@ -243,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": "ES2019", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */
|
"lib": [
|
||||||
"module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */
|
"ES2020"
|
||||||
// "allowJs": true, /* Allow javascript files to be compiled. */
|
],
|
||||||
// "checkJs": true, /* Report errors in .js files. */
|
"module": "commonjs",
|
||||||
// "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
|
"moduleResolution": "node",
|
||||||
// "declaration": true, /* Generates corresponding '.d.ts' file. */
|
"noImplicitAny": true,
|
||||||
// "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */
|
"outDir": "./lib",
|
||||||
// "sourceMap": true, /* Generates corresponding '.map' file. */
|
"removeComments": true,
|
||||||
// "outFile": "./", /* Concatenate and emit output to single file. */
|
"rootDir": "./src",
|
||||||
"outDir": "./lib", /* Redirect output structure to the directory. */
|
"sourceMap": true,
|
||||||
"rootDir": "./src", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
|
"strict": true,
|
||||||
// "composite": true, /* Enable project compilation */
|
"target": "ES2019"
|
||||||
// "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */
|
|
||||||
// "removeComments": true, /* Do not emit comments to output. */
|
|
||||||
// "noEmit": true, /* Do not emit outputs. */
|
|
||||||
// "importHelpers": true, /* Import emit helpers from 'tslib'. */
|
|
||||||
// "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
|
|
||||||
// "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */
|
|
||||||
|
|
||||||
/* Strict Type-Checking Options */
|
|
||||||
"strict": true, /* Enable all strict type-checking options. */
|
|
||||||
// "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */
|
|
||||||
// "strictNullChecks": true, /* Enable strict null checks. */
|
|
||||||
// "strictFunctionTypes": true, /* Enable strict checking of function types. */
|
|
||||||
// "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */
|
|
||||||
// "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */
|
|
||||||
// "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */
|
|
||||||
// "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */
|
|
||||||
|
|
||||||
/* Additional Checks */
|
|
||||||
// "noUnusedLocals": true, /* Report errors on unused locals. */
|
|
||||||
// "noUnusedParameters": true, /* Report errors on unused parameters. */
|
|
||||||
// "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
|
|
||||||
// "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
|
|
||||||
|
|
||||||
/* Module Resolution Options */
|
|
||||||
// "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
|
|
||||||
// "baseUrl": "./", /* Base directory to resolve non-absolute module names. */
|
|
||||||
// "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
|
|
||||||
// "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */
|
|
||||||
// "typeRoots": [], /* List of folders to include type definitions from. */
|
|
||||||
// "types": [], /* Type declaration files to be included in compilation. */
|
|
||||||
// "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
|
|
||||||
"esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
|
|
||||||
// "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */
|
|
||||||
// "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
|
|
||||||
|
|
||||||
/* Source Map Options */
|
|
||||||
// "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */
|
|
||||||
// "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
|
|
||||||
// "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */
|
|
||||||
// "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */
|
|
||||||
|
|
||||||
/* Experimental Options */
|
|
||||||
// "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */
|
|
||||||
// "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */
|
|
||||||
},
|
},
|
||||||
"exclude": ["node_modules", "**/*.test.ts"]
|
"exclude": ["__tests__", "lib", "node_modules"]
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user