mirror of
https://github.com/shivammathur/setup-php.git
synced 2025-07-01 12:43:17 +07:00
Compare commits
41 Commits
Author | SHA1 | Date | |
---|---|---|---|
ffc5b0249d | |||
a6aaa1db78 | |||
62beed29e3 | |||
fce9311522 | |||
b2e7a49dd5 | |||
99bbaa2a58 | |||
f7f5b1a7e1 | |||
e755fb7a69 | |||
3087ceb811 | |||
05e2b0d1e9 | |||
dd5c977988 | |||
c1c0acc338 | |||
409e055931 | |||
46a875ad7e | |||
7e81c058fb | |||
754ab9515b | |||
f866c880c2 | |||
eb21cb8fb3 | |||
aee6b953c3 | |||
21c3c8db47 | |||
c0e0d9d98e | |||
5ab8ec4a99 | |||
ec3c220bb2 | |||
17d90ace86 | |||
ba5306eea9 | |||
06929bdf4c | |||
e97e822eff | |||
0f97f445fb | |||
507cc5e95d | |||
2a30f9d208 | |||
eaf140ca8b | |||
dcd432d918 | |||
91a03a2865 | |||
ca33947c62 | |||
932b66f3fc | |||
651d2619bb | |||
16f13a69eb | |||
9134867822 | |||
36104f0983 | |||
a0b0e58cb3 | |||
c6f956927a |
21
.github/workflows/workflow.yml
vendored
21
.github/workflows/workflow.yml
vendored
@ -1,28 +1,27 @@
|
||||
name: Main workflow
|
||||
on:
|
||||
push:
|
||||
paths:
|
||||
- '*'
|
||||
- '!*.md'
|
||||
on: [push, pull_request]
|
||||
jobs:
|
||||
run:
|
||||
name: Run
|
||||
runs-on: ${{ matrix.operating-system }}
|
||||
strategy:
|
||||
max-parallel: 8
|
||||
fail-fast: false
|
||||
max-parallel: 15
|
||||
matrix:
|
||||
operating-system: [ubuntu-latest, windows-latest, macOS-latest]
|
||||
php-versions: ['5.6', '7.0', '7.1', '7.2', '7.3']
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@master
|
||||
with:
|
||||
fetch-depth: 1
|
||||
|
||||
- name: Set Node.js 10.x
|
||||
- name: Setup Node.js 10.x
|
||||
uses: actions/setup-node@master
|
||||
with:
|
||||
version: 10.x
|
||||
node-version: 10.x
|
||||
|
||||
- name: Installing NPM
|
||||
- name: Installing NPM packages
|
||||
run: npm install
|
||||
|
||||
- name: Run tests and send coverage
|
||||
@ -34,8 +33,8 @@ jobs:
|
||||
run: node lib/install.js
|
||||
env:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
extension-csv: "mbstring, xdebug, pcov" #optional
|
||||
ini-values-csv: "post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata" #optional
|
||||
extension-csv: mbstring, xdebug, pcov #optional
|
||||
ini-values-csv: post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata #optional
|
||||
|
||||
- name: Testing PHP version
|
||||
run: php -v
|
||||
|
131
README.md
131
README.md
@ -4,17 +4,18 @@
|
||||
</a>
|
||||
</p>
|
||||
|
||||
# Setup PHP in GitHub Actions
|
||||
<h1 align="center">Setup PHP in GitHub Actions</h1>
|
||||
|
||||
<p align="left">
|
||||
<a href="https://github.com/shivammathur/setup-php"><img alt="GitHub Actions status" src="https://github.com/shivammathur/setup-php/workflows/Main%20workflow/badge.svg"></a>
|
||||
<a href="https://github.com/shivammathur/setup-php/blob/master/LICENSE"><img alt="LICENSE" src="https://img.shields.io/badge/license-MIT-428f7e.svg"></a>
|
||||
<a href="#tada-php-support"><img alt="PHP Versions Supported" src="https://img.shields.io/badge/php-%3E%3D%205.6-8892BF.svg"></a>
|
||||
<a href="https://www.patreon.com/shivammathur"><img alt="Support me on Patreon" src="https://shivammathur.com/badges/patreon.svg"></a> <a href="https://www.paypal.me/shivammathur"><img alt="Support me on Paypal" src="https://shivammathur.com/badges/paypal.svg"></a>
|
||||
<a href="https://www.codementor.io/shivammathur?utm_source=github&utm_medium=button&utm_term=shivammathur&utm_campaign=github"><img alt="Get Help on codementor" src="https://cdn.codementor.io/badges/get_help_github.svg"></a>
|
||||
<p align="center">
|
||||
<a href="https://github.com/shivammathur/setup-php" title="GitHub action to setup PHP"><img alt="GitHub Actions status" src="https://github.com/shivammathur/setup-php/workflows/Main%20workflow/badge.svg"></a>
|
||||
<a href="https://codecov.io/gh/shivammathur/setup-php" title="Code coverage"><img alt="Codecov Code Coverage" src="https://codecov.io/gh/shivammathur/setup-php/branch/master/graph/badge.svg"></a>
|
||||
<a href="https://github.com/shivammathur/setup-php/blob/master/LICENSE" title="license"><img alt="LICENSE" src="https://img.shields.io/badge/license-MIT-428f7e.svg"></a>
|
||||
<a href="#tada-php-support" title="PHP Versions Supported"><img alt="PHP Versions Supported" src="https://img.shields.io/badge/php-%3E%3D%205.6-8892BF.svg"></a>
|
||||
<a href="https://www.patreon.com/shivammathur" title="Support Shivam Mathur on Patreon"><img alt="Support me on Patreon" src="https://shivammathur.com/badges/patreon.svg"></a> <a href="https://www.paypal.me/shivammathur"><img alt="Support me on PayPal" src="https://shivammathur.com/badges/paypal.svg"></a>
|
||||
<a href="https://www.codementor.io/shivammathur?utm_source=github&utm_medium=button&utm_term=shivammathur&utm_campaign=github" title="Contact Shivam Mathur on Codementor"><img alt="Contact me on Codementor" src="https://cdn.codementor.io/badges/contact_me_github.svg"></a>
|
||||
</p>
|
||||
|
||||
Setup PHP with required extensions, php.ini configuration and composer in [GitHub Actions](https://github.com/features/actions). This action can be added as a step in your action workflow and it will setup the PHP environment you need to test your application. Refer to [Usage](#memo-usage) section to see how to use this.
|
||||
Setup PHP with required extensions, php.ini configuration and composer in [GitHub Actions](https://github.com/features/actions "GitHub Actions"). This action can be added as a step in your action workflow and it will setup the PHP environment you need to test your application. Refer to [Usage](#memo-usage "How to use this") section and [examples](#examples "Examples of use") to see how to use this.
|
||||
|
||||
## :tada: PHP Support
|
||||
|
||||
@ -25,7 +26,7 @@ Setup PHP with required extensions, php.ini configuration and composer in [GitHu
|
||||
|7.1|`Stable`|`Security fixes only`|
|
||||
|7.2|`Stable`|`Active`|
|
||||
|7.3|`Stable`|`Active`|
|
||||
|7.4|`Beta`/`RC`|`Active`|
|
||||
|7.4|`RC3`|`Active`|
|
||||
|
||||
**Note:** PHP 7.4 is currently in development, do not use in production/release branches.
|
||||
|
||||
@ -39,22 +40,67 @@ Setup PHP with required extensions, php.ini configuration and composer in [GitHu
|
||||
|Ubuntu 16.04|`ubuntu-16.04`|
|
||||
|macOS X Mojave 10.14|`macOS-latest` or `macOS-10.14`|
|
||||
|
||||
|
||||
## :wrench: PHP Extension Support
|
||||
- On `ubuntu` extensions which have the package in apt are installed.
|
||||
- On `windows` and `macOS` PECL extensions are installed.
|
||||
- Extensions which are installed along with PHP if specified are enabled.
|
||||
- Extensions which cannot be installed gracefully leave an error message in the logs, the action is not interruped.
|
||||
- Extensions which cannot be installed gracefully leave an error message in the logs, the action is not interrupted.
|
||||
|
||||
## :signal_strength: Coverage support
|
||||
|
||||
### Xdebug
|
||||
|
||||
Specify `coverage: xdebug` to use `Xdebug`.
|
||||
Runs on all [PHP versions supported](#tada-php-support "List of PHP versions supported on this GitHub Action")
|
||||
|
||||
```yaml
|
||||
uses: shivammathur/setup-php@master
|
||||
with:
|
||||
php-version: '7.3'
|
||||
coverage: xdebug
|
||||
```
|
||||
|
||||
### PCOV
|
||||
|
||||
Specify `coverage: pcov` to use `PCOV`.
|
||||
It is much faster than `Xdebug`.
|
||||
`PCOV` needs `PHP >= 7.1`
|
||||
If your source code directory is other than `src`, `lib` or, `app`, specify `pcov.directory` using the `ini-values-csv` input.
|
||||
|
||||
|
||||
```yaml
|
||||
uses: shivammathur/setup-php@master
|
||||
with:
|
||||
php-version: '7.3'
|
||||
ini-values-csv: pcov.directory=api #optional, see above for usage.
|
||||
coverage: pcov
|
||||
```
|
||||
|
||||
### Disable coverage
|
||||
|
||||
Specify `coverage: none` to disable both `Xdebug` and `PCOV`.
|
||||
Consider disabling the coverage using this PHP action for these reasons.
|
||||
- You are not generating coverage reports while testing.
|
||||
- It will disable `Xdebug`, which will have a positive impact on PHP performance.
|
||||
- You are using `phpdbg`.
|
||||
|
||||
```yaml
|
||||
uses: shivammathur/setup-php@master
|
||||
with:
|
||||
php-version: '7.3'
|
||||
coverage: none
|
||||
```
|
||||
|
||||
## :memo: Usage
|
||||
|
||||
Inputs supported by this GitHub Action.
|
||||
|
||||
- php-version
|
||||
- extension-csv (optional)
|
||||
- ini-values-csv (optional)
|
||||
- php-version `required`
|
||||
- extension-csv `optional`
|
||||
- ini-values-csv `optional`
|
||||
- coverage `optional`
|
||||
|
||||
See [action.yml](action.yml) for more info
|
||||
See [action.yml](action.yml "Metadata for this GitHub Action") and usage below for more info.
|
||||
|
||||
### Basic Usage
|
||||
|
||||
@ -65,9 +111,10 @@ steps:
|
||||
- name: Installing PHP
|
||||
uses: shivammathur/setup-php@master
|
||||
with:
|
||||
php-version: 7.3
|
||||
php-version: '7.3'
|
||||
extension-csv: mbstring, xdebug #optional
|
||||
ini-values-csv: "post_max_size=256M, short_open_tag=On" #optional
|
||||
ini-values-csv: post_max_size=256M, short_open_tag=On #optional
|
||||
coverage: xdebug #optional
|
||||
- name: Check PHP Version
|
||||
run: php -v
|
||||
- name: Check Composer Version
|
||||
@ -96,39 +143,61 @@ jobs:
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
extension-csv: mbstring, xdebug #optional
|
||||
ini-values-csv: "post_max_size=256M, short_open_tag=On" #optional
|
||||
ini-values-csv: post_max_size=256M, short_open_tag=On #optional
|
||||
coverage: xdebug #optional
|
||||
- name: Check PHP Version
|
||||
run: php -v
|
||||
- name: Check Composer Version
|
||||
run: composer -V
|
||||
- name: Check PHP Extensions
|
||||
run: php -m
|
||||
|
||||
run: php -m
|
||||
```
|
||||
|
||||
### Examples
|
||||
|
||||
Examples for setting up this GitHub Action with different PHP Frameworks/Packages.
|
||||
|
||||
|Framework/Package|Runs on|Workflow|
|
||||
|--- |--- |--- |
|
||||
|CodeIgniter|`macOS`, `ubuntu` and `windows`|[codeigniter.yml](./examples/codeigniter.yml "GitHub Action for CodeIgniter")|
|
||||
|Laravel with `MySQL` and `Redis`|`ubuntu`|[laravel-mysql.yml](./examples/laravel-mysql.yml "GitHub Action for Laravel with MySQL and Redis")|
|
||||
|Laravel with `PostgreSQL` and `Redis`|`ubuntu`|[laravel-postgres.yml](./examples/laravel-postgres.yml "GitHub Action for Laravel with PostgreSQL and Redis")|
|
||||
|Laravel without services|`macOS`, `ubuntu` and `windows`|[laravel.yml](./examples/laravel.yml "GitHub Action for Laravel without services")|
|
||||
|Lumen with `MySQL` and `Redis`|`ubuntu`|[lumen-mysql.yml](./examples/lumen-mysql.yml "GitHub Action for Lumen with MySQL and Redis")|
|
||||
|Lumen with `PostgreSQL` and `Redis`|`ubuntu`|[lumen-postgres.yml](./examples/lumen-postgres.yml "GitHub Action for Lumen with PostgreSQL and Redis")|
|
||||
|Lumen without services|`macOS`, `ubuntu` and `windows`|[lumen.yml](./examples/lumen.yml "GitHub Action for Lumen without services")|
|
||||
|Phalcon with `MySQL`|`ubuntu`|[phalcon-mysql.yml](./examples/phalcon-mysql.yml "GitHub Action for Phalcon with MySQL")|
|
||||
|Phalcon with `PostgreSQL`|`ubuntu`|[phalcon-postgres.yml](./examples/phalcon-postgres.yml "GitHub Action for Phalcon with PostgreSQL")|
|
||||
|Slim Framework|`macOS`, `ubuntu` and `windows`|[slim-framework.yml](./examples/slim-framework.yml "GitHub Action for Slim Framework")|
|
||||
|Symfony with `MySQL`|`ubuntu`|[symfony-mysql.yml](./examples/symfony-mysql.yml "GitHub Action for Symfony with MySQL")|
|
||||
|Symfony with `PostgreSQL`|`ubuntu`|[symfony-postgres.yml](./examples/symfony-postgres.yml "GitHub Action for Symfony with PostgreSQL")|
|
||||
|Yii2 Starter Kit with `MySQL`|`ubuntu`|[yii2-mysql.yml](./examples/yii2-mysql.yml "GitHub Action for Yii2 Starter Kit with MySQL")|
|
||||
|Yii2 Starter Kit with `PostgreSQL`|`ubuntu`|[yii2-postgres.yml](./examples/yii2-postgres.yml "GitHub Action for Yii2 Starter Kit with PostgreSQL")|
|
||||
|Zend Framework|`macOS`, `ubuntu` and `windows`|[zend-framework.yml](./examples/zend-framework.yml "GitHub Action for Zend Framework")|
|
||||
|
||||
## :scroll: License
|
||||
|
||||
The scripts and documentation in this project are released under the [MIT License](LICENSE). This project has multiple [dependencies](https://github.com/shivammathur/setup-php/network/dependencies) and their licenses can be found in their respective repositories.
|
||||
The scripts and documentation in this project are released under the [MIT License](LICENSE "License for shivammathur/setup-php"). This project has multiple [dependencies](https://github.com/shivammathur/setup-php/network/dependencies "Dependencies for this PHP Action") and their licenses can be found in their respective repositories.
|
||||
|
||||
## :+1: Contributions
|
||||
|
||||
Contributions are welcome! See [Contributor's Guide](.github/CONTRIBUTING.md).
|
||||
Contributions are welcome! See [Contributor's Guide](.github/CONTRIBUTING.md "shivammathur/setup-php contribution guide").
|
||||
|
||||
## :sparkling_heart: Support this project
|
||||
|
||||
- Please star the project and share it among your developer friends.
|
||||
- Please star the project and share it.
|
||||
- Consider supporting on <a href="https://www.patreon.com/shivammathur"><img alt="Support me on Patreon" src="https://shivammathur.com/badges/patreon.svg"></a> and <a href="https://www.paypal.me/shivammathur"><img alt="Support me on Paypal" src="https://shivammathur.com/badges/paypal.svg"></a>.
|
||||
|
||||
## :bookmark: This action uses the following works
|
||||
|
||||
- [powershell-phpmanager](https://github.com/mlocati/powershell-phpmanager)
|
||||
- [Homebrew](https://brew.sh/)
|
||||
- [ppa:ondrej/php](https://launchpad.net/~ondrej/+archive/ubuntu/php)
|
||||
- [exolnet/homebrew-deprecated](https://github.com/eXolnet/homebrew-deprecated)
|
||||
- [phpbrew](https://github.com/phpbrew/phpbrew)
|
||||
- [powershell-phpmanager](https://github.com/mlocati/powershell-phpmanager "Package to handle PHP on windows")
|
||||
- [Homebrew](https://brew.sh/ "MacOS package manager")
|
||||
- [ppa:ondrej/php](https://launchpad.net/~ondrej/+archive/ubuntu/php "Pre-compiled ubuntu packages")
|
||||
- [exolnet/homebrew-deprecated](https://github.com/eXolnet/homebrew-deprecated "Pre-compiled deprecated PHP for macOS")
|
||||
- [phpbrew](https://github.com/phpbrew/phpbrew "PHP packages manager")
|
||||
|
||||
## :bookmark_tabs: Further Reading
|
||||
|
||||
- [About GitHub Actions](https://github.com/features/actions)
|
||||
- [GitHub Actions Syntax](https://help.github.com/en/articles/workflow-syntax-for-github-actions)
|
||||
- [Other Awesome Actions](https://github.com/sdras/awesome-actions)
|
||||
- [About GitHub Actions](https://github.com/features/actions "GitHub Actions")
|
||||
- [GitHub Actions Syntax](https://help.github.com/en/articles/workflow-syntax-for-github-actions "GitHub Actions Syntax")
|
||||
- [Other Awesome Actions](https://github.com/sdras/awesome-actions "List of Awesome GitHub Actions")
|
||||
|
52
__tests__/config.test.ts
Normal file
52
__tests__/config.test.ts
Normal file
@ -0,0 +1,52 @@
|
||||
import * as config from '../src/config';
|
||||
|
||||
describe('Config tests', () => {
|
||||
it('checking addINIValuesOnWindows', async () => {
|
||||
let win32: string = await config.addINIValues(
|
||||
'post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata',
|
||||
'win32'
|
||||
);
|
||||
expect(win32).toContain(
|
||||
'Add-Content C:\\tools\\php\\php.ini "post_max_size=256M\nshort_open_tag=On\ndate.timezone=Asia/Kolkata"'
|
||||
);
|
||||
|
||||
win32 = await config.addINIValues(
|
||||
'post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata',
|
||||
'fedora'
|
||||
);
|
||||
expect(win32).toContain('Platform fedora is not supported');
|
||||
});
|
||||
|
||||
it('checking addINIValuesOnLinux', async () => {
|
||||
let linux: string = await config.addINIValues(
|
||||
'post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata',
|
||||
'linux',
|
||||
true
|
||||
);
|
||||
expect(linux).toContain(
|
||||
'echo "post_max_size=256M\nshort_open_tag=On\ndate.timezone=Asia/Kolkata" >> $ini_file'
|
||||
);
|
||||
|
||||
linux = await config.addINIValues(
|
||||
'post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata',
|
||||
'fedora'
|
||||
);
|
||||
expect(linux).toContain('Platform fedora is not supported');
|
||||
});
|
||||
|
||||
it('checking addINIValuesOnDarwin', async () => {
|
||||
let darwin: string = await config.addINIValues(
|
||||
'post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata',
|
||||
'darwin'
|
||||
);
|
||||
expect(darwin).toContain(
|
||||
'echo "post_max_size=256M\nshort_open_tag=On\ndate.timezone=Asia/Kolkata" >> $ini_file'
|
||||
);
|
||||
|
||||
darwin = await config.addINIValues(
|
||||
'post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata',
|
||||
'fedora'
|
||||
);
|
||||
expect(darwin).toContain('Platform fedora is not supported');
|
||||
});
|
||||
});
|
80
__tests__/coverage.test.ts
Normal file
80
__tests__/coverage.test.ts
Normal file
@ -0,0 +1,80 @@
|
||||
import * as config from '../src/config';
|
||||
import * as coverage from '../src/coverage';
|
||||
import * as extensions from '../src/coverage';
|
||||
|
||||
jest.mock('../src/extensions', () => ({
|
||||
addExtension: jest.fn().mockImplementation(extension => {
|
||||
return 'addExtension ' + extension + '\n';
|
||||
})
|
||||
}));
|
||||
|
||||
describe('Config tests', () => {
|
||||
it('checking addCoverage with PCOV on windows', async () => {
|
||||
let win32: string = await coverage.addCoverage('pcov', '7.4', 'win32');
|
||||
expect(win32).toContain('addExtension pcov');
|
||||
expect(win32).toContain(
|
||||
'if(php -m | findstr -i xdebug) { Disable-PhpExtension xdebug C:\\tools\\php'
|
||||
);
|
||||
|
||||
win32 = await coverage.addCoverage('pcov', '7.0', 'win32');
|
||||
expect(win32).toContain('PHP 7.1 or newer is required');
|
||||
|
||||
win32 = await coverage.addCoverage('pcov', '5.6', 'win32');
|
||||
expect(win32).toContain('PHP 7.1 or newer is required');
|
||||
});
|
||||
|
||||
it('checking addCoverage with PCOV on linux', async () => {
|
||||
let linux: string = await coverage.addCoverage('pcov', '7.4', 'linux');
|
||||
expect(linux).toContain('addExtension pcov');
|
||||
expect(linux).toContain('sudo sed -i "/xdebug/d" $ini_file');
|
||||
expect(linux).toContain('sudo phpdismod -v 7.4 xdebug');
|
||||
});
|
||||
|
||||
it('checking addCoverage with PCOV on darwin', async () => {
|
||||
let darwin: string = await coverage.addCoverage('pcov', '7.4', 'darwin');
|
||||
expect(darwin).toContain('addExtension pcov');
|
||||
});
|
||||
|
||||
it('checking addCoverage with Xdebug on windows', async () => {
|
||||
let win32: string = await coverage.addCoverage('xdebug', '7.3', 'win32');
|
||||
expect(win32).toContain('addExtension xdebug');
|
||||
});
|
||||
|
||||
it('checking addCoverage with Xdebug on linux', async () => {
|
||||
let linux: string = await coverage.addCoverage('xdebug', '7.4', 'linux');
|
||||
expect(linux).toContain('addExtension xdebug');
|
||||
});
|
||||
|
||||
it('checking addCoverage with Xdebug on darwin', async () => {
|
||||
let darwin: string = await coverage.addCoverage('xdebug', '7.4', 'darwin');
|
||||
expect(darwin).toContain('addExtension xdebug');
|
||||
});
|
||||
|
||||
it('checking disableCoverage windows', async () => {
|
||||
let win32 = await coverage.addCoverage('none', '7.4', 'win32');
|
||||
expect(win32).toContain('Disable-PhpExtension xdebug');
|
||||
expect(win32).toContain('Disable-PhpExtension pcov');
|
||||
});
|
||||
|
||||
it('checking disableCoverage on linux', async () => {
|
||||
let linux: string = await coverage.addCoverage('none', '7.4', 'linux');
|
||||
expect(linux).toContain('sudo phpdismod -v 7.4 xdebug');
|
||||
expect(linux).toContain('sudo phpdismod -v 7.4 pcov');
|
||||
expect(linux).toContain('sudo sed -i "/xdebug/d" $ini_file');
|
||||
expect(linux).toContain('sudo sed -i "/pcov/d" $ini_file');
|
||||
});
|
||||
|
||||
it('checking disableCoverage on darwin', async () => {
|
||||
let darwin: string = await coverage.addCoverage('none', '7.4', 'darwin');
|
||||
expect(darwin).toContain('sudo sed -i \'\' "/xdebug/d" $ini_file');
|
||||
expect(darwin).toContain('sudo sed -i \'\' "/pcov/d" $ini_file');
|
||||
});
|
||||
|
||||
it('checking no or invalid coverage driver', async () => {
|
||||
let nocov: string = await coverage.addCoverage('nocov', '7.x', 'any');
|
||||
expect(nocov).toEqual('');
|
||||
|
||||
nocov = await coverage.addCoverage('', '7.x', 'any');
|
||||
expect(nocov).toEqual('');
|
||||
});
|
||||
});
|
103
__tests__/extensions.test.ts
Normal file
103
__tests__/extensions.test.ts
Normal file
@ -0,0 +1,103 @@
|
||||
import * as extensions from '../src/extensions';
|
||||
|
||||
describe('Extension tests', () => {
|
||||
it('checking addExtensionOnWindows', async () => {
|
||||
let win32: string = await extensions.addExtension(
|
||||
'xdebug, pcov',
|
||||
'7.2',
|
||||
'win32'
|
||||
);
|
||||
expect(win32).toContain('Install-PhpExtension xdebug');
|
||||
expect(win32).toContain('Install-PhpExtension pcov');
|
||||
win32 = await extensions.addExtension('xdebug, pcov', '7.4', 'win32');
|
||||
const extension_url: string =
|
||||
'https://xdebug.org/files/php_xdebug-2.8.0beta2-7.4-vc15.dll';
|
||||
expect(win32).toContain(
|
||||
'Invoke-WebRequest -Uri ' +
|
||||
extension_url +
|
||||
' -OutFile C:\\tools\\php\\ext\\php_xdebug.dll'
|
||||
);
|
||||
expect(win32).toContain('Install-PhpExtension pcov');
|
||||
|
||||
win32 = await extensions.addExtension(
|
||||
'does_not_exist',
|
||||
'7.2',
|
||||
'win32',
|
||||
true
|
||||
);
|
||||
expect(win32).toContain(
|
||||
'Add-Extension does_not_exist "Install-PhpExtension does_not_exist" extension'
|
||||
);
|
||||
|
||||
win32 = await extensions.addExtension('xdebug', '7.2', 'fedora');
|
||||
expect(win32).toContain('Platform fedora is not supported');
|
||||
});
|
||||
|
||||
it('checking addExtensionOnLinux', async () => {
|
||||
let linux: string = await extensions.addExtension(
|
||||
'xdebug, pcov',
|
||||
'7.2',
|
||||
'linux'
|
||||
);
|
||||
expect(linux).toContain(
|
||||
'sudo DEBIAN_FRONTEND=noninteractive apt install -y php7.2-xdebug'
|
||||
);
|
||||
expect(linux).toContain(
|
||||
'sudo DEBIAN_FRONTEND=noninteractive apt install -y php7.2-pcov'
|
||||
);
|
||||
|
||||
linux = await extensions.addExtension('xdebug, pcov', '7.4', 'linux');
|
||||
expect(linux).toContain('./xdebug.sh');
|
||||
expect(linux).toContain('./pcov.sh');
|
||||
|
||||
linux = await extensions.addExtension('phalcon3, phalcon4', '7.2', 'linux');
|
||||
expect(linux).toContain('./phalcon.sh master 7.2');
|
||||
expect(linux).toContain('./phalcon.sh 4.0.x 7.2');
|
||||
|
||||
linux = await extensions.addExtension('phalcon3, phalcon4', '7.3', 'linux');
|
||||
expect(linux).toContain('./phalcon.sh master 7.3');
|
||||
expect(linux).toContain('./phalcon.sh 4.0.x 7.3');
|
||||
|
||||
linux = await extensions.addExtension('xdebug', '7.2', 'fedora');
|
||||
expect(linux).toContain('Platform fedora is not supported');
|
||||
});
|
||||
|
||||
it('checking addExtensionOnDarwin', async () => {
|
||||
let darwin: string = await extensions.addExtension(
|
||||
'xdebug, pcov',
|
||||
'7.2',
|
||||
'darwin'
|
||||
);
|
||||
expect(darwin).toContain('sudo pecl install xdebug');
|
||||
expect(darwin).toContain('sudo pecl install pcov');
|
||||
|
||||
darwin = await extensions.addExtension('pcov', '5.6', 'darwin');
|
||||
expect(darwin).toContain('sudo pecl install pcov');
|
||||
|
||||
darwin = await extensions.addExtension('pcov', '7.2', 'darwin');
|
||||
expect(darwin).toContain('sudo pecl install pcov');
|
||||
|
||||
darwin = await extensions.addExtension('xdebug', '5.6', 'darwin');
|
||||
expect(darwin).toContain('sudo pecl install xdebug-2.5.5');
|
||||
|
||||
darwin = await extensions.addExtension('xdebug', '7.4', 'darwin');
|
||||
expect(darwin).toContain('sh ./xdebug_darwin.sh');
|
||||
|
||||
darwin = await extensions.addExtension('pcov', '7.4', 'darwin');
|
||||
expect(darwin).toContain('sh ./pcov.sh');
|
||||
|
||||
darwin = await extensions.addExtension('xdebug', '7.2', 'darwin');
|
||||
expect(darwin).toContain('sudo pecl install xdebug');
|
||||
|
||||
darwin = await extensions.addExtension(
|
||||
'does_not_exist',
|
||||
'7.2',
|
||||
'darwin',
|
||||
false
|
||||
);
|
||||
expect(darwin).toContain('add_extension does_not_exist');
|
||||
|
||||
darwin = await extensions.addExtension('xdebug', '7.2', 'fedora');
|
||||
expect(darwin).toContain('Platform fedora is not supported');
|
||||
});
|
||||
});
|
@ -1,97 +0,0 @@
|
||||
import * as features from '../src/features';
|
||||
|
||||
let valid_extensions = ['xdebug', 'pcov'];
|
||||
jest.mock('../src/pecl', () => ({
|
||||
checkPECLExtension: jest.fn().mockImplementation(extension => {
|
||||
return valid_extensions.indexOf(extension) !== -1;
|
||||
})
|
||||
}));
|
||||
|
||||
describe('Features tests', () => {
|
||||
it('checking addExtensionOnWindows', async () => {
|
||||
let win32: string = await features.addExtension(
|
||||
'xdebug, pcov',
|
||||
'7.2',
|
||||
'win32'
|
||||
);
|
||||
expect(win32).toContain(
|
||||
'Install-PhpExtension xdebug -MinimumStability stable'
|
||||
);
|
||||
expect(win32).toContain(
|
||||
'Install-PhpExtension pcov -MinimumStability stable'
|
||||
);
|
||||
win32 = await features.addExtension('xdebug, pcov', '7.4', 'win32');
|
||||
expect(win32).toContain(
|
||||
'Install-PhpExtension xdebug -MinimumStability alpha'
|
||||
);
|
||||
expect(win32).toContain(
|
||||
'Install-PhpExtension pcov -MinimumStability alpha'
|
||||
);
|
||||
|
||||
win32 = await features.addExtension('DoesNotExist', '7.2', 'win32');
|
||||
expect(win32).not.toContain(
|
||||
'Install-PhpExtension DoesNotExist -MinimumStability stable'
|
||||
);
|
||||
});
|
||||
it('checking addExtensionOnLinux', async () => {
|
||||
let linux: string = await features.addExtension(
|
||||
'xdebug, pcov',
|
||||
'7.2',
|
||||
'linux'
|
||||
);
|
||||
expect(linux).toContain(
|
||||
'sudo DEBIAN_FRONTEND=noninteractive apt install -y php7.2-xdebug'
|
||||
);
|
||||
expect(linux).toContain(
|
||||
'sudo DEBIAN_FRONTEND=noninteractive apt install -y php7.2-pcov'
|
||||
);
|
||||
});
|
||||
it('checking addExtensionOnDarwin', async () => {
|
||||
let darwin: string = await features.addExtension(
|
||||
'xdebug, pcov',
|
||||
'7.2',
|
||||
'darwin'
|
||||
);
|
||||
expect(darwin).toContain('sudo pecl install xdebug');
|
||||
expect(darwin).toContain('sudo pecl install pcov');
|
||||
|
||||
darwin = await features.addExtension('DoesNotExist', '7.2', 'darwin');
|
||||
expect(darwin).not.toContain('sudo pecl install DoesNotExist');
|
||||
});
|
||||
|
||||
it('checking addINIValuesOnWindows', async () => {
|
||||
let win32: string = await features.addINIValues(
|
||||
'post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata',
|
||||
'win32'
|
||||
);
|
||||
expect(win32).toContain(
|
||||
'Add-Content C:\\tools\\php\\php.ini "post_max_size=256M"'
|
||||
);
|
||||
expect(win32).toContain(
|
||||
'Add-Content C:\\tools\\php\\php.ini "short_open_tag=On"'
|
||||
);
|
||||
expect(win32).toContain(
|
||||
'Add-Content C:\\tools\\php\\php.ini "date.timezone=Asia/Kolkata"'
|
||||
);
|
||||
});
|
||||
|
||||
it('checking addINIValuesOnLinux', async () => {
|
||||
let linux: string = await features.addINIValues(
|
||||
'post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata',
|
||||
'linux'
|
||||
);
|
||||
expect(linux).toContain('echo "post_max_size=256M" >> $ini_file');
|
||||
expect(linux).toContain('echo "short_open_tag=On" >> $ini_file');
|
||||
expect(linux).toContain('echo "date.timezone=Asia/Kolkata" >> $ini_file');
|
||||
});
|
||||
|
||||
it('checking addINIValuesOnDarwin', async () => {
|
||||
let darwin: string = await features.addINIValues(
|
||||
'post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata',
|
||||
'darwin'
|
||||
);
|
||||
expect(darwin).toContain('echo "post_max_size=256M" >> $ini_file');
|
||||
expect(darwin).toContain('echo "short_open_tag=On" >> $ini_file');
|
||||
expect(darwin).toContain('echo "date.timezone=Asia/Kolkata" >> $ini_file');
|
||||
});
|
||||
});
|
@ -1,12 +1,10 @@
|
||||
import * as fs from 'fs';
|
||||
import * as path from 'path';
|
||||
import * as utils from '../src/utils';
|
||||
import * as pecl from '../src/pecl';
|
||||
|
||||
let valid_extensions = ['xdebug', 'pcov'];
|
||||
jest.mock('../src/pecl', () => ({
|
||||
checkPECLExtension: jest.fn().mockImplementation(extension => {
|
||||
return valid_extensions.indexOf(extension) !== -1;
|
||||
jest.mock('@actions/core', () => ({
|
||||
getInput: jest.fn().mockImplementation(key => {
|
||||
return ['setup-php'].indexOf(key) !== -1 ? key : '';
|
||||
})
|
||||
}));
|
||||
|
||||
@ -21,7 +19,10 @@ async function cleanup(path: string): Promise<void> {
|
||||
describe('Utils tests', () => {
|
||||
it('checking getInput', async () => {
|
||||
process.env['test'] = 'setup-php';
|
||||
process.env['undefined'] = '';
|
||||
expect(await utils.getInput('test', false)).toBe('setup-php');
|
||||
expect(await utils.getInput('undefined', false)).toBe('');
|
||||
expect(await utils.getInput('setup-php', false)).toBe('setup-php');
|
||||
expect(await utils.getInput('DoesNotExist', false)).toBe('');
|
||||
});
|
||||
|
||||
@ -36,25 +37,35 @@ describe('Utils tests', () => {
|
||||
|
||||
it('checking readScripts', async () => {
|
||||
let rc: string = fs.readFileSync(
|
||||
path.join(__dirname, '../src/7.4.sh'),
|
||||
path.join(__dirname, '../src/scripts/7.4.sh'),
|
||||
'utf8'
|
||||
);
|
||||
let darwin: string = fs.readFileSync(
|
||||
path.join(__dirname, '../src/darwin.sh'),
|
||||
path.join(__dirname, '../src/scripts/darwin.sh'),
|
||||
'utf8'
|
||||
);
|
||||
let linux: string = fs.readFileSync(
|
||||
path.join(__dirname, '../src/linux.sh'),
|
||||
path.join(__dirname, '../src/scripts/linux.sh'),
|
||||
'utf8'
|
||||
);
|
||||
let win32: string = fs.readFileSync(
|
||||
path.join(__dirname, '../src/win32.ps1'),
|
||||
path.join(__dirname, '../src/scripts/win32.ps1'),
|
||||
'utf8'
|
||||
);
|
||||
expect(rc).toBe(await utils.readScript('darwin.sh', '7.4', 'darwin'));
|
||||
expect(darwin).toBe(await utils.readScript('darwin.sh', '7.3', 'darwin'));
|
||||
expect(linux).toBe(await utils.readScript('linux.sh', '7.3', 'linux'));
|
||||
expect(win32).toBe(await utils.readScript('win32.ps1', '7.3', 'win32'));
|
||||
expect(await utils.readScript('darwin.sh', '7.4', 'darwin')).toBe(rc);
|
||||
expect(await utils.readScript('darwin.sh', '7.3', 'darwin')).toBe(darwin);
|
||||
expect(await utils.readScript('linux.sh', '7.4', 'linux')).toBe(linux);
|
||||
expect(await utils.readScript('linux.sh', '7.3', 'linux')).toBe(linux);
|
||||
expect(await utils.readScript('win32.ps1', '7.4', 'win32')).toBe(win32);
|
||||
expect(await utils.readScript('win32.ps1', '7.3', 'win32')).toBe(win32);
|
||||
expect(await utils.readScript('fedora.sh', '7.3', 'fedora')).toContain(
|
||||
'Platform fedora is not supported'
|
||||
);
|
||||
await cleanup('./config.yaml');
|
||||
await cleanup('./pcov.sh');
|
||||
await cleanup('./phalcon.sh');
|
||||
await cleanup('./php_pcov.dll');
|
||||
await cleanup('./xdebug_darwin.sh');
|
||||
});
|
||||
|
||||
it('checking writeScripts', async () => {
|
||||
@ -76,6 +87,9 @@ describe('Utils tests', () => {
|
||||
'c',
|
||||
'd'
|
||||
]);
|
||||
|
||||
expect(await utils.extensionArray('')).toEqual([]);
|
||||
expect(await utils.extensionArray(' ')).toEqual([]);
|
||||
});
|
||||
|
||||
it('checking INIArray', async () => {
|
||||
@ -84,10 +98,73 @@ describe('Utils tests', () => {
|
||||
'b=2',
|
||||
'c=3'
|
||||
]);
|
||||
expect(await utils.INIArray('')).toEqual([]);
|
||||
expect(await utils.INIArray(' ')).toEqual([]);
|
||||
});
|
||||
|
||||
it('checking checkPECLExtension', async () => {
|
||||
expect(await pecl.checkPECLExtension('extensionDoesNotExist')).toBe(false);
|
||||
expect(await pecl.checkPECLExtension('xdebug')).toBe(true);
|
||||
it('checking log', async () => {
|
||||
let message: string = 'Test message';
|
||||
|
||||
let warning_log: string = await utils.log(message, 'win32', 'warning');
|
||||
expect(warning_log).toEqual('printf "\\033[33;1m' + message + ' \\033[0m"');
|
||||
warning_log = await utils.log(message, 'linux', 'warning');
|
||||
expect(warning_log).toEqual('echo "\\033[33;1m' + message + '\\033[0m"');
|
||||
warning_log = await utils.log(message, 'darwin', 'warning');
|
||||
expect(warning_log).toEqual('echo "\\033[33;1m' + message + '\\033[0m"');
|
||||
|
||||
let error_log: string = await utils.log(message, 'win32', 'error');
|
||||
expect(error_log).toEqual('printf "\\033[31;1m' + message + ' \\033[0m"');
|
||||
error_log = await utils.log(message, 'linux', 'error');
|
||||
expect(error_log).toEqual('echo "\\033[31;1m' + message + '\\033[0m"');
|
||||
error_log = await utils.log(message, 'darwin', 'error');
|
||||
expect(error_log).toEqual('echo "\\033[31;1m' + message + '\\033[0m"');
|
||||
|
||||
let success_log: string = await utils.log(message, 'win32', 'success');
|
||||
expect(success_log).toEqual('printf "\\033[32;1m' + message + ' \\033[0m"');
|
||||
success_log = await utils.log(message, 'linux', 'success');
|
||||
expect(success_log).toEqual('echo "\\033[32;1m' + message + '\\033[0m"');
|
||||
success_log = await utils.log(message, 'darwin', 'success');
|
||||
expect(success_log).toEqual('echo "\\033[32;1m' + message + '\\033[0m"');
|
||||
|
||||
let step_log: string = await utils.stepLog(message, 'win32');
|
||||
expect(step_log).toEqual('Step-Log "Test message"');
|
||||
step_log = await utils.stepLog(message, 'linux');
|
||||
expect(step_log).toEqual('step_log "Test message"');
|
||||
step_log = await utils.stepLog(message, 'darwin');
|
||||
expect(step_log).toEqual('step_log "Test message"');
|
||||
step_log = await utils.stepLog(message, 'fedora');
|
||||
expect(step_log).toContain('Platform fedora is not supported');
|
||||
|
||||
let add_log: string = await utils.addLog(
|
||||
'tick',
|
||||
'xdebug',
|
||||
'enabled',
|
||||
'win32'
|
||||
);
|
||||
expect(add_log).toEqual('Add-Log "tick" "xdebug" "enabled"');
|
||||
add_log = await utils.addLog('tick', 'xdebug', 'enabled', 'linux');
|
||||
expect(add_log).toEqual('add_log "tick" "xdebug" "enabled"');
|
||||
add_log = await utils.addLog('tick', 'xdebug', 'enabled', 'darwin');
|
||||
expect(add_log).toEqual('add_log "tick" "xdebug" "enabled"');
|
||||
add_log = await utils.addLog('tick', 'xdebug', 'enabled', 'fedora');
|
||||
expect(add_log).toContain('Platform fedora is not supported');
|
||||
});
|
||||
|
||||
it('checking getExtensionPrefix', async () => {
|
||||
expect(await utils.getExtensionPrefix('extensionDoesNotExist')).toEqual(
|
||||
'extension'
|
||||
);
|
||||
expect(await utils.getExtensionPrefix('xsl')).toEqual('extension');
|
||||
expect(await utils.getExtensionPrefix('xdebug')).toEqual('zend_extension');
|
||||
expect(await utils.getExtensionPrefix('opcache')).toEqual('zend_extension');
|
||||
});
|
||||
|
||||
it('checking suppressOutput', async () => {
|
||||
expect(await utils.suppressOutput('win32')).toEqual(' >$null 2>&1');
|
||||
expect(await utils.suppressOutput('linux')).toEqual(' >/dev/null 2>&1');
|
||||
expect(await utils.suppressOutput('darwin')).toEqual(' >/dev/null 2>&1');
|
||||
expect(await utils.suppressOutput('fedora')).toContain(
|
||||
'Platform fedora is not supported'
|
||||
);
|
||||
});
|
||||
});
|
||||
|
11
action.yml
11
action.yml
@ -1,18 +1,21 @@
|
||||
name: 'Setup PHP Action'
|
||||
author: shivammathur
|
||||
description: 'Setup a PHP environment with composer and add it to the PATH'
|
||||
description: 'GitHub action to setup PHP with required extensions, php.ini configuration, code-coverage support and composer'
|
||||
branding:
|
||||
icon: 'activity'
|
||||
color: 'purple'
|
||||
inputs:
|
||||
php-version:
|
||||
description: 'PHP version to be installed.'
|
||||
description: 'PHP version you want to install.'
|
||||
required: true
|
||||
extension-csv:
|
||||
description: '(Optional) Comma seperated list of PHP extensions to be installed.'
|
||||
description: '(Optional) PHP extensions you want to install.'
|
||||
required: false
|
||||
ini-values-csv:
|
||||
description: '(Optional) Custom values you want to set in php.ini'
|
||||
description: '(Optional) Custom values you want to set in php.ini.'
|
||||
required: false
|
||||
coverage:
|
||||
description: '(Optional) Code coverage driver you want to install. (Accepts: xdebug, pcov and none)'
|
||||
required: false
|
||||
runs:
|
||||
using: 'node12'
|
||||
|
25
examples/codeigniter.yml
Normal file
25
examples/codeigniter.yml
Normal file
@ -0,0 +1,25 @@
|
||||
# GitHub Action for CodeIgniter
|
||||
name: Testing CodeIgniter
|
||||
on: [push, pull_request]
|
||||
jobs:
|
||||
build:
|
||||
strategy:
|
||||
max-parallel: 6
|
||||
matrix:
|
||||
operating-system: [ubuntu-latest, windows-latest, macOS-latest]
|
||||
php-versions: ['7.2', '7.3']
|
||||
runs-on: ${{ matrix.operating-system }}
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@master
|
||||
- name: Setup PHP, with composer and extensions
|
||||
uses: shivammathur/setup-php@master #https://github.com/shivammathur/setup-php
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
extension-csv: mbstring, intl, curl, dom
|
||||
coverage: xdebug #optional
|
||||
- name: Install dependencies
|
||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
||||
- name: Test with phpunit
|
||||
run: vendor/bin/phpunit --coverage-text
|
||||
shell: pwsh
|
60
examples/laravel-mysql.yml
Normal file
60
examples/laravel-mysql.yml
Normal file
@ -0,0 +1,60 @@
|
||||
# GitHub Action for Laravel with MySQL and Redis
|
||||
name: Testing Laravel with MySQL
|
||||
on: [push, pull_request]
|
||||
jobs:
|
||||
laravel:
|
||||
name: Laravel (PHP ${{ matrix.php-versions }})
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
DB_DATABASE: laravel
|
||||
DB_USERNAME: root
|
||||
DB_PASSWORD: password
|
||||
BROADCAST_DRIVER: log
|
||||
CACHE_DRIVER: redis
|
||||
QUEUE_CONNECTION: redis
|
||||
SESSION_DRIVER: redis
|
||||
services:
|
||||
mysql:
|
||||
image: mysql:5.7
|
||||
env:
|
||||
MYSQL_ALLOW_EMPTY_PASSWORD: false
|
||||
MYSQL_ROOT_PASSWORD: password
|
||||
MYSQL_DATABASE: laravel
|
||||
ports:
|
||||
- 3306
|
||||
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
||||
redis:
|
||||
image: redis
|
||||
ports:
|
||||
- 6379/tcp
|
||||
options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
||||
strategy:
|
||||
fail-fast: false
|
||||
max-parallel: 3
|
||||
matrix:
|
||||
php-versions: ['7.2', '7.3', '7.4']
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v1
|
||||
- name: Setup PHP, with composer and extensions
|
||||
uses: shivammathur/setup-php@master #https://github.com/shivammathur/setup-php
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
extension-csv: mbstring, dom, fileinfo, mysql
|
||||
coverage: xdebug #optional
|
||||
- name: Install Composer dependencies
|
||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
||||
- name: Prepare the application
|
||||
run: |
|
||||
php -r "file_exists('.env') || copy('.env.example', '.env');"
|
||||
php artisan key:generate
|
||||
- name: Clear Config
|
||||
run: php artisan config:clear
|
||||
- name: Run Migration
|
||||
run: php artisan migrate -v
|
||||
env:
|
||||
DB_PORT: ${{ job.services.mysql.ports['3306'] }}
|
||||
- name: Test with phpunit
|
||||
run: vendor/bin/phpunit --coverage-text
|
||||
env:
|
||||
DB_PORT: ${{ job.services.mysql.ports['3306'] }}
|
62
examples/laravel-postgres.yml
Normal file
62
examples/laravel-postgres.yml
Normal file
@ -0,0 +1,62 @@
|
||||
# GitHub Action for Laravel with PostgreSQL and Redis
|
||||
name: Testing Laravel with PostgreSQL
|
||||
on: [push, pull_request]
|
||||
jobs:
|
||||
laravel:
|
||||
name: Laravel (PHP ${{ matrix.php-versions }})
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
BROADCAST_DRIVER: log
|
||||
CACHE_DRIVER: redis
|
||||
QUEUE_CONNECTION: redis
|
||||
SESSION_DRIVER: redis
|
||||
DB_CONNECTION: pgsql
|
||||
DB_HOST: localhost
|
||||
DB_PASSWORD: postgres
|
||||
DB_USERNAME: postgres
|
||||
DB_DATABASE: postgres
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:10.8
|
||||
env:
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_PASSWORD: postgres
|
||||
POSTGRES_DB: postgres
|
||||
ports:
|
||||
- 5432/tcp
|
||||
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 3
|
||||
redis:
|
||||
image: redis
|
||||
ports:
|
||||
- 6379/tcp
|
||||
options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
||||
strategy:
|
||||
fail-fast: false
|
||||
max-parallel: 3
|
||||
matrix:
|
||||
php-versions: ['7.2', '7.3', '7.4']
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v1
|
||||
- name: Setup PHP, with composer and extensions
|
||||
uses: shivammathur/setup-php@master #https://github.com/shivammathur/setup-php
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
extension-csv: mbstring, dom, fileinfo, pgsql
|
||||
coverage: xdebug #optional
|
||||
- name: Install Composer dependencies
|
||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
||||
- name: Prepare the application
|
||||
run: |
|
||||
php -r "file_exists('.env') || copy('.env.example', '.env');"
|
||||
php artisan key:generate
|
||||
- name: Clear Config
|
||||
run: php artisan config:clear
|
||||
- name: Run Migration
|
||||
run: php artisan migrate -v
|
||||
env:
|
||||
DB_PORT: ${{ job.services.postgres.ports[5432] }}
|
||||
- name: Test with phpunit
|
||||
run: vendor/bin/phpunit --coverage-text
|
||||
env:
|
||||
DB_PORT: ${{ job.services.postgres.ports[5432] }}
|
33
examples/laravel.yml
Normal file
33
examples/laravel.yml
Normal file
@ -0,0 +1,33 @@
|
||||
# GitHub Action for Laravel
|
||||
name: Testing Laravel
|
||||
on: [push, pull_request]
|
||||
jobs:
|
||||
laravel:
|
||||
name: Laravel (PHP ${{ matrix.php-versions }} on ${{ matrix.operating-system }})
|
||||
runs-on: ${{ matrix.operating-system }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
max-parallel: 6
|
||||
matrix:
|
||||
operating-system: [ubuntu-latest, windows-latest, macOS-latest]
|
||||
php-versions: ['7.2', '7.3']
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v1
|
||||
- name: Setup PHP, with composer and extensions
|
||||
uses: shivammathur/setup-php@master #https://github.com/shivammathur/setup-php
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
extension-csv: mbstring, dom, fileinfo
|
||||
coverage: xdebug #optional
|
||||
- name: Install Composer dependencies
|
||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
||||
- name: Prepare the application
|
||||
run: |
|
||||
php -r "file_exists('.env') || copy('.env.example', '.env');"
|
||||
php artisan key:generate
|
||||
- name: Clear Config
|
||||
run: php artisan config:clear
|
||||
- name: Test with phpunit
|
||||
run: vendor/bin/phpunit --coverage-text
|
||||
shell: pwsh
|
60
examples/lumen-mysql.yml
Normal file
60
examples/lumen-mysql.yml
Normal file
@ -0,0 +1,60 @@
|
||||
# GitHub Action for Lumen with MySQL and Redis
|
||||
name: Testing Lumen with MySQL
|
||||
on: [push, pull_request]
|
||||
jobs:
|
||||
lumen:
|
||||
name: Lumen (PHP ${{ matrix.php-versions }})
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
DB_DATABASE: lumen
|
||||
DB_USERNAME: root
|
||||
DB_PASSWORD: password
|
||||
BROADCAST_DRIVER: log
|
||||
CACHE_DRIVER: redis
|
||||
QUEUE_CONNECTION: redis
|
||||
SESSION_DRIVER: redis
|
||||
services:
|
||||
mysql:
|
||||
image: mysql:5.7
|
||||
env:
|
||||
MYSQL_ALLOW_EMPTY_PASSWORD: false
|
||||
MYSQL_ROOT_PASSWORD: password
|
||||
MYSQL_DATABASE: lumen
|
||||
ports:
|
||||
- 3306
|
||||
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
||||
redis:
|
||||
image: redis
|
||||
ports:
|
||||
- 6379/tcp
|
||||
options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
||||
strategy:
|
||||
fail-fast: false
|
||||
max-parallel: 3
|
||||
matrix:
|
||||
php-versions: ['7.2', '7.3']
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v1
|
||||
- name: Setup PHP, with composer and extensions
|
||||
uses: shivammathur/setup-php@master #https://github.com/shivammathur/setup-php
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
extension-csv: mbstring, dom, fileinfo, mysql
|
||||
coverage: xdebug #optional
|
||||
- name: Install Composer dependencies
|
||||
run: |
|
||||
composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
||||
composer require predis/predis illuminate/redis
|
||||
- name: Prepare the application
|
||||
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
|
||||
- name: Register Redis as service provider
|
||||
run: sed -i '$i\$app->register(Illuminate\\Redis\\RedisServiceProvider::class);' bootstrap/app.php
|
||||
- name: Run Migration
|
||||
run: php artisan migrate -v
|
||||
env:
|
||||
DB_PORT: ${{ job.services.mysql.ports['3306'] }}
|
||||
- name: Test with phpunit
|
||||
run: vendor/bin/phpunit --coverage-text
|
||||
env:
|
||||
DB_PORT: ${{ job.services.mysql.ports['3306'] }}
|
62
examples/lumen-postgres.yml
Normal file
62
examples/lumen-postgres.yml
Normal file
@ -0,0 +1,62 @@
|
||||
# GitHub Action for Lumen with PostgreSQL and Redis
|
||||
name: Testing Lumen with PostgreSQL
|
||||
on: [push, pull_request]
|
||||
jobs:
|
||||
laravel:
|
||||
name: Lumen (PHP ${{ matrix.php-versions }})
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
BROADCAST_DRIVER: log
|
||||
CACHE_DRIVER: redis
|
||||
QUEUE_CONNECTION: redis
|
||||
SESSION_DRIVER: redis
|
||||
DB_CONNECTION: pgsql
|
||||
DB_HOST: localhost
|
||||
DB_PASSWORD: postgres
|
||||
DB_USERNAME: postgres
|
||||
DB_DATABASE: postgres
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:10.8
|
||||
env:
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_PASSWORD: postgres
|
||||
POSTGRES_DB: postgres
|
||||
ports:
|
||||
- 5432/tcp
|
||||
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 3
|
||||
redis:
|
||||
image: redis
|
||||
ports:
|
||||
- 6379/tcp
|
||||
options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
||||
strategy:
|
||||
fail-fast: false
|
||||
max-parallel: 3
|
||||
matrix:
|
||||
php-versions: ['7.2', '7.3']
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v1
|
||||
- name: Setup PHP, with composer and extensions
|
||||
uses: shivammathur/setup-php@master #https://github.com/shivammathur/setup-php
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
extension-csv: mbstring, dom, fileinfo, pgsql
|
||||
coverage: xdebug #optional
|
||||
- name: Install Composer dependencies
|
||||
run: |
|
||||
composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
||||
composer require predis/predis illuminate/redis
|
||||
- name: Prepare the application
|
||||
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
|
||||
- name: Register Redis as service provider
|
||||
run: sed -i '$i\$app->register(Illuminate\\Redis\\RedisServiceProvider::class);' bootstrap/app.php
|
||||
- name: Run Migration
|
||||
run: php artisan migrate -v
|
||||
env:
|
||||
DB_PORT: ${{ job.services.postgres.ports[5432] }}
|
||||
- name: Test with phpunit
|
||||
run: vendor/bin/phpunit --coverage-text
|
||||
env:
|
||||
DB_PORT: ${{ job.services.postgres.ports[5432] }}
|
29
examples/lumen.yml
Normal file
29
examples/lumen.yml
Normal file
@ -0,0 +1,29 @@
|
||||
# GitHub Action for Lumen
|
||||
name: Unit Testing Lumen
|
||||
on: [push, pull_request]
|
||||
jobs:
|
||||
lumen:
|
||||
name: Lumen (PHP ${{ matrix.php-versions }} on ${{ matrix.operating-system }})
|
||||
runs-on: ${{ matrix.operating-system }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
max-parallel: 9
|
||||
matrix:
|
||||
operating-system: [ubuntu-latest, windows-latest, macOS-latest]
|
||||
php-versions: ['7.2', '7.3']
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v1
|
||||
- name: Setup PHP, with composer and extensions
|
||||
uses: shivammathur/setup-php@master #https://github.com/shivammathur/setup-php
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
extension-csv: mbstring, dom, fileinfo, mysql
|
||||
coverage: xdebug #optional
|
||||
- name: Install Composer dependencies
|
||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
||||
- name: Prepare the application
|
||||
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
|
||||
- name: Test with phpunit
|
||||
run: vendor/bin/phpunit --coverage-text
|
||||
shell: pwsh
|
60
examples/phalcon-mysql.yml
Normal file
60
examples/phalcon-mysql.yml
Normal file
@ -0,0 +1,60 @@
|
||||
# GitHub Action for Phalcon with MySQL
|
||||
## Notes
|
||||
## Make sure you have .env.example or .env file in your project
|
||||
## and you have loaded Dotenv (https://github.com/vlucas/phpdotenv)
|
||||
name: Testing Phalcon with MySQL
|
||||
on: [push, pull_request]
|
||||
jobs:
|
||||
phalcon:
|
||||
name: Phalcon (PHP ${{ matrix.php-versions }})
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
DB_ADAPTER: mysql
|
||||
DB_HOST: 127.0.0.1
|
||||
DB_NAME: phalcon
|
||||
DB_USERNAME: root
|
||||
DB_PASSWORD: password
|
||||
CODECEPTION_URL: 127.0.0.1
|
||||
CODECEPTION_PORT: 8888
|
||||
services:
|
||||
mysql:
|
||||
image: mysql:5.7
|
||||
env:
|
||||
MYSQL_ALLOW_EMPTY_PASSWORD: false
|
||||
MYSQL_ROOT_PASSWORD: password
|
||||
MYSQL_DATABASE: phalcon
|
||||
ports:
|
||||
- 3306
|
||||
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
||||
strategy:
|
||||
fail-fast: false
|
||||
max-parallel: 3
|
||||
matrix:
|
||||
php-versions: ['7.2', '7.3']
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v1
|
||||
- name: Setup PHP, with composer and extensions
|
||||
uses: shivammathur/setup-php@master #https://github.com/shivammathur/setup-php
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
extension-csv: mbstring, phalcon4, mysql #use phalcon3 for the phalcon 3.x.
|
||||
coverage: xdebug #optional
|
||||
- name: Install Composer dependencies
|
||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
||||
- name: Prepare the application
|
||||
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
|
||||
- name: Run Migration
|
||||
run: |
|
||||
if [ ! -e phinx.yml ]; then vendor/bin/phinx init; fi
|
||||
vendor/bin/phinx migrate
|
||||
vendor/bin/phinx seed:run
|
||||
env:
|
||||
DB_PORT: ${{ job.services.mysql.ports['3306'] }}
|
||||
- name: Run Tests
|
||||
run: |
|
||||
(cd public && nohup php -S $CODECEPTION_URL:$CODECEPTION_PORT > phalcon.log 2>&1 &)
|
||||
vendor/bin/codecept build
|
||||
vendor/bin/codecept run
|
||||
env:
|
||||
DB_PORT: ${{ job.services.mysql.ports['3306'] }}
|
61
examples/phalcon-postgres.yml
Normal file
61
examples/phalcon-postgres.yml
Normal file
@ -0,0 +1,61 @@
|
||||
# GitHub Action for Phalcon with PostgreSQL
|
||||
## Notes
|
||||
## Make sure you have .env.example or .env file in your project
|
||||
## and you have loaded Dotenv (https://github.com/vlucas/phpdotenv)
|
||||
name: Testing Phalcon with PostgreSQL
|
||||
on: [push, pull_request]
|
||||
jobs:
|
||||
phalcon:
|
||||
name: Phalcon (PHP ${{ matrix.php-versions }})
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
DB_ADAPTER: pgsql
|
||||
DB_HOST: 127.0.0.1
|
||||
DB_NAME: postgres
|
||||
DB_USERNAME: postgres
|
||||
DB_PASSWORD: postgres
|
||||
CODECEPTION_URL: 127.0.0.1
|
||||
CODECEPTION_PORT: 8888
|
||||
DB_CONNECTION: pgsql
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:10.8
|
||||
env:
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_PASSWORD: postgres
|
||||
POSTGRES_DB: postgres
|
||||
ports:
|
||||
- 5432/tcp
|
||||
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 3
|
||||
strategy:
|
||||
fail-fast: false
|
||||
max-parallel: 3
|
||||
matrix:
|
||||
php-versions: ['7.2', '7.3']
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v1
|
||||
- name: Setup PHP, with composer and extensions
|
||||
uses: shivammathur/setup-php@master #https://github.com/shivammathur/setup-php
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
extension-csv: mbstring, phalcon4, pgsql #use phalcon3 for the phalcon 3.x
|
||||
coverage: xdebug #optional
|
||||
- name: Install Composer dependencies
|
||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
||||
- name: Prepare the application
|
||||
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
|
||||
- name: Run Migration
|
||||
run: |
|
||||
if [ ! -e phinx.yml ]; then vendor/bin/phinx init; fi
|
||||
vendor/bin/phinx migrate
|
||||
vendor/bin/phinx seed:run
|
||||
env:
|
||||
DB_PORT: ${{ job.services.postgres.ports['5432'] }}
|
||||
- name: Run Tests
|
||||
run: |
|
||||
(cd public && nohup php -S $CODECEPTION_URL:$CODECEPTION_PORT > phalcon.log 2>&1 &)
|
||||
vendor/bin/codecept build
|
||||
vendor/bin/codecept run
|
||||
env:
|
||||
DB_PORT: ${{ job.services.postgres.ports['5432'] }}
|
25
examples/slim-framework.yml
Normal file
25
examples/slim-framework.yml
Normal file
@ -0,0 +1,25 @@
|
||||
# GitHub Action for Slim Framework
|
||||
name: Testing Slim Framework
|
||||
on: [push, pull_request]
|
||||
jobs:
|
||||
build:
|
||||
strategy:
|
||||
max-parallel: 6
|
||||
matrix:
|
||||
operating-system: [ubuntu-latest, windows-latest, macOS-latest]
|
||||
php-versions: ['7.2', '7.3']
|
||||
runs-on: ${{ matrix.operating-system }}
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@master
|
||||
- name: Setup PHP, with composer and extensions
|
||||
uses: shivammathur/setup-php@master #https://github.com/shivammathur/setup-php
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
extension-csv: mbstring, simplexml, dom
|
||||
coverage: xdebug #optional
|
||||
- name: Install dependencies
|
||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
||||
- name: Test with phpunit
|
||||
run: vendor/bin/phpunit --coverage-text
|
||||
shell: pwsh
|
45
examples/symfony-mysql.yml
Normal file
45
examples/symfony-mysql.yml
Normal file
@ -0,0 +1,45 @@
|
||||
# GitHub Action for Symfony with MySQL
|
||||
name: Testing Symfony with MySQL
|
||||
on: [push, pull_request]
|
||||
jobs:
|
||||
symfony:
|
||||
name: Symfony (PHP ${{ matrix.php-versions }})
|
||||
runs-on: ubuntu-latest
|
||||
services:
|
||||
mysql:
|
||||
image: mysql:5.7
|
||||
env:
|
||||
MYSQL_ALLOW_EMPTY_PASSWORD: false
|
||||
MYSQL_ROOT_PASSWORD: symfony
|
||||
MYSQL_DATABASE: symfony
|
||||
ports:
|
||||
- 3306
|
||||
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
||||
strategy:
|
||||
fail-fast: false
|
||||
max-parallel: 3
|
||||
matrix:
|
||||
php-versions: ['7.3']
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v1
|
||||
- name: Setup PHP, with composer and extensions
|
||||
uses: shivammathur/setup-php@master #https://github.com/shivammathur/setup-php
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
extension-csv: mbstring, xml, ctype, iconv, mysql
|
||||
coverage: xdebug #optional
|
||||
- name: Install Composer dependencies
|
||||
run: |
|
||||
composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
||||
- name: Run Migration
|
||||
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:migrations:migrate || echo "No migrations found or migration failed"
|
||||
env:
|
||||
DATABASE_URL: mysql://root:symfony@127.0.0.1:${{ job.services.mysql.ports['3306'] }}/symfony
|
||||
- name: Run Tests
|
||||
run: |
|
||||
composer require phpunit
|
||||
php bin/phpunit --coverage-text
|
45
examples/symfony-postgres.yml
Normal file
45
examples/symfony-postgres.yml
Normal file
@ -0,0 +1,45 @@
|
||||
# GitHub Action for Symfony with PostgreSQL
|
||||
name: Testing Symfony with PostgreSQL
|
||||
on: [push, pull_request]
|
||||
jobs:
|
||||
symfony:
|
||||
name: Symfony (PHP ${{ matrix.php-versions }})
|
||||
runs-on: ubuntu-latest
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:10.8
|
||||
env:
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_PASSWORD: postgres
|
||||
POSTGRES_DB: postgres
|
||||
ports:
|
||||
- 5432/tcp
|
||||
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 3
|
||||
strategy:
|
||||
fail-fast: false
|
||||
max-parallel: 3
|
||||
matrix:
|
||||
php-versions: ['7.3']
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v1
|
||||
- name: Setup PHP, with composer and extensions
|
||||
uses: shivammathur/setup-php@master #https://github.com/shivammathur/setup-php
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
extension-csv: mbstring, xml, ctype, iconv, pgsql
|
||||
coverage: xdebug #optional
|
||||
- name: Install Composer dependencies
|
||||
run: |
|
||||
composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
||||
- name: Run Migration
|
||||
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:migrations:migrate || echo "No migrations found or migration failed"
|
||||
env:
|
||||
DATABASE_URL: postgres://postgres:postgres@127.0.0.1:${{ job.services.postgres.ports[5432] }}/postgres?charset=UTF-8
|
||||
- name: Run Tests
|
||||
run: |
|
||||
composer require phpunit
|
||||
php bin/phpunit --coverage-text
|
30
examples/symfony.yml
Normal file
30
examples/symfony.yml
Normal file
@ -0,0 +1,30 @@
|
||||
# GitHub Action for Symfony
|
||||
name: Testing Symfony
|
||||
on: [push, pull_request]
|
||||
jobs:
|
||||
symfony:
|
||||
name: Symfony (PHP ${{ matrix.php-versions }} on ${{ matrix.operating-system }})
|
||||
runs-on: ${{ matrix.operating-system }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
max-parallel: 3
|
||||
matrix:
|
||||
operating-system: [ubuntu-latest, windows-latest, macOS-latest]
|
||||
php-versions: ['7.3']
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v1
|
||||
- name: Setup PHP, with composer and extensions
|
||||
uses: shivammathur/setup-php@master #https://github.com/shivammathur/setup-php
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
extension-csv: mbstring, xml, ctype, iconv
|
||||
coverage: xdebug #optional
|
||||
- name: Install Composer dependencies
|
||||
run: |
|
||||
composer require symfony/orm-pack
|
||||
composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
||||
- name: Run Tests
|
||||
run: |
|
||||
composer require phpunit
|
||||
php bin/phpunit --coverage-text
|
61
examples/yii2-mysql.yml
Normal file
61
examples/yii2-mysql.yml
Normal file
@ -0,0 +1,61 @@
|
||||
# GitHub Action for Yii Framework with MySQL
|
||||
name: Testing Yii2 with MySQL
|
||||
on: [push, pull_request]
|
||||
jobs:
|
||||
yii:
|
||||
name: Yii2 (PHP ${{ matrix.php-versions }})
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
DB_USERNAME: root
|
||||
DB_PASSWORD: yii
|
||||
TEST_DB_USERNAME: root
|
||||
TEST_DB_PASSWORD: yii
|
||||
DB_CHARSET: utf8
|
||||
services:
|
||||
mysql:
|
||||
image: mysql:5.7
|
||||
env:
|
||||
MYSQL_ALLOW_EMPTY_PASSWORD: false
|
||||
MYSQL_ROOT_PASSWORD: yii
|
||||
MYSQL_DATABASE: yii
|
||||
ports:
|
||||
- 3306
|
||||
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
||||
strategy:
|
||||
fail-fast: false
|
||||
max-parallel: 3
|
||||
matrix:
|
||||
php-versions: ['7.2', '7.3', '7.4']
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v1
|
||||
- name: Set Node.js 10.x
|
||||
uses: actions/setup-node@master
|
||||
with:
|
||||
node-version: 10.x
|
||||
- name: Setup PHP, with composer and extensions
|
||||
uses: shivammathur/setup-php@master #https://github.com/shivammathur/setup-php
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
extension-csv: mbstring, intl, gd, imagick, zip, dom, mysql
|
||||
coverage: xdebug #optional
|
||||
- name: Install Composer dependencies
|
||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
||||
- name: Prepare the application
|
||||
run: |
|
||||
php -r "file_exists('.env') || copy('.env.dist', '.env');"
|
||||
php console/yii app/setup
|
||||
npm install --development
|
||||
npm run build
|
||||
env:
|
||||
DB_DSN: mysql:host=127.0.0.1;port=${{ job.services.mysql.ports['3306'] }};dbname=yii
|
||||
TEST_DB_DSN: mysql:host=127.0.0.1;port=${{ job.services.mysql.ports['3306'] }};dbname=yii
|
||||
- name: Run Tests
|
||||
run: |
|
||||
vendor/bin/codecept build
|
||||
php tests/bin/yii app/setup --interactive=0
|
||||
nohup php -S localhost:8080 > yii.log 2>&1 &
|
||||
vendor/bin/codecept run
|
||||
env:
|
||||
DB_DSN: mysql:host=127.0.0.1;port=${{ job.services.mysql.ports['3306'] }};dbname=yii
|
||||
TEST_DB_DSN: mysql:host=127.0.0.1;port=${{ job.services.mysql.ports['3306'] }};dbname=yii
|
61
examples/yii2-postgres.yml
Normal file
61
examples/yii2-postgres.yml
Normal file
@ -0,0 +1,61 @@
|
||||
# GitHub Action for Yii Framework with PostgreSQL
|
||||
name: Testing Yii2 with PostgreSQL
|
||||
on: [push, pull_request]
|
||||
jobs:
|
||||
yii:
|
||||
name: Yii2 (PHP ${{ matrix.php-versions }})
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
DB_USERNAME: postgres
|
||||
DB_PASSWORD: postgres
|
||||
TEST_DB_USERNAME: postgres
|
||||
TEST_DB_PASSWORD: postgres
|
||||
DB_CHARSET: utf8
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:10.8
|
||||
env:
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_PASSWORD: postgres
|
||||
POSTGRES_DB: postgres
|
||||
ports:
|
||||
- 5432/tcp
|
||||
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 3
|
||||
strategy:
|
||||
fail-fast: false
|
||||
max-parallel: 3
|
||||
matrix:
|
||||
php-versions: ['7.2', '7.3', '7.4']
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v1
|
||||
- name: Set Node.js 10.x
|
||||
uses: actions/setup-node@master
|
||||
with:
|
||||
node-version: 10.x
|
||||
- name: Setup PHP, with composer and extensions
|
||||
uses: shivammathur/setup-php@master #https://github.com/shivammathur/setup-php
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
extension-csv: mbstring, intl, gd, imagick, zip, dom, pgsql
|
||||
coverage: xdebug #optional
|
||||
- name: Install Composer dependencies
|
||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
||||
- name: Prepare the application
|
||||
run: |
|
||||
php -r "file_exists('.env') || copy('.env.dist', '.env');"
|
||||
php console/yii app/setup
|
||||
npm install --development
|
||||
npm run build
|
||||
env:
|
||||
DB_DSN: pgsql:host=127.0.0.1;port=${{ job.services.postgres.ports['5432'] }};dbname=postgres
|
||||
TEST_DB_DSN: pgsql:host=127.0.0.1;port=${{ job.services.postgres.ports['5432'] }};dbname=postgres
|
||||
- name: Run Tests
|
||||
run: |
|
||||
vendor/bin/codecept build
|
||||
php tests/bin/yii app/setup --interactive=0
|
||||
nohup php -S localhost:8080 > yii.log 2>&1 &
|
||||
vendor/bin/codecept run
|
||||
env:
|
||||
DB_DSN: pgsql:host=127.0.0.1;port=${{ job.services.postgres.ports['5432'] }};dbname=postgres
|
||||
TEST_DB_DSN: pgsql:host=127.0.0.1;port=${{ job.services.postgres.ports['5432'] }};dbname=postgres
|
27
examples/zend-framework.yml
Normal file
27
examples/zend-framework.yml
Normal file
@ -0,0 +1,27 @@
|
||||
# GitHub Action for Zend Framework
|
||||
name: Testing Zend Framework
|
||||
on: [push, pull_request]
|
||||
jobs:
|
||||
build:
|
||||
strategy:
|
||||
max-parallel: 6
|
||||
matrix:
|
||||
operating-system: [ubuntu-latest, windows-latest, macOS-latest]
|
||||
php-versions: ['7.2', '7.3']
|
||||
runs-on: ${{ matrix.operating-system }}
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@master
|
||||
- name: Setup PHP, with composer and extensions
|
||||
uses: shivammathur/setup-php@master #https://github.com/shivammathur/setup-php
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
extension-csv: mbstring, bcmath, curl, intl
|
||||
coverage: xdebug #optional
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
||||
composer require --dev phpunit/phpunit squizlabs/php_codesniffer zendframework/zend-test
|
||||
- name: Test with phpunit
|
||||
run: vendor/bin/phpunit --coverage-text
|
||||
shell: pwsh
|
93
lib/config.js
Normal file
93
lib/config.js
Normal file
@ -0,0 +1,93 @@
|
||||
"use strict";
|
||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
||||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||
});
|
||||
};
|
||||
var __importStar = (this && this.__importStar) || function (mod) {
|
||||
if (mod && mod.__esModule) return mod;
|
||||
var result = {};
|
||||
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
||||
result["default"] = mod;
|
||||
return result;
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const utils = __importStar(require("./utils"));
|
||||
/**
|
||||
* Function to add custom ini values
|
||||
*
|
||||
* @param ini_values_csv
|
||||
* @param os_version
|
||||
*/
|
||||
function addINIValues(ini_values_csv, os_version, no_step = false) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
let script = '\n';
|
||||
switch (no_step) {
|
||||
case true:
|
||||
script +=
|
||||
(yield utils.stepLog('Add php.ini values', os_version)) +
|
||||
(yield utils.suppressOutput(os_version)) +
|
||||
'\n';
|
||||
break;
|
||||
case false:
|
||||
default:
|
||||
script += (yield utils.stepLog('Add php.ini values', os_version)) + '\n';
|
||||
break;
|
||||
}
|
||||
switch (os_version) {
|
||||
case 'win32':
|
||||
return script + (yield addINIValuesWindows(ini_values_csv));
|
||||
case 'darwin':
|
||||
case 'linux':
|
||||
return script + (yield addINIValuesUnix(ini_values_csv));
|
||||
default:
|
||||
return yield utils.log('Platform ' + os_version + ' is not supported', os_version, 'error');
|
||||
}
|
||||
});
|
||||
}
|
||||
exports.addINIValues = addINIValues;
|
||||
/**
|
||||
* Add script to set custom ini values for unix
|
||||
*
|
||||
* @param ini_values_csv
|
||||
*/
|
||||
function addINIValuesUnix(ini_values_csv) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
let ini_values = yield utils.INIArray(ini_values_csv);
|
||||
let script = '\n';
|
||||
yield utils.asyncForEach(ini_values, function (line) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
script +=
|
||||
(yield utils.addLog('$tick', line, 'Added to php.ini', 'linux')) + '\n';
|
||||
});
|
||||
});
|
||||
return 'echo "' + ini_values.join('\n') + '" >> $ini_file' + script;
|
||||
});
|
||||
}
|
||||
exports.addINIValuesUnix = addINIValuesUnix;
|
||||
/**
|
||||
* Add script to set custom ini values for windows
|
||||
*
|
||||
* @param ini_values_csv
|
||||
*/
|
||||
function addINIValuesWindows(ini_values_csv) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
let ini_values = yield utils.INIArray(ini_values_csv);
|
||||
let script = '\n';
|
||||
yield utils.asyncForEach(ini_values, function (line) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
script +=
|
||||
(yield utils.addLog('$tick', line, 'Added to php.ini', 'win32')) + '\n';
|
||||
});
|
||||
});
|
||||
return ('Add-Content C:\\tools\\php\\php.ini "' +
|
||||
ini_values.join('\n') +
|
||||
'"' +
|
||||
script);
|
||||
});
|
||||
}
|
||||
exports.addINIValuesWindows = addINIValuesWindows;
|
151
lib/coverage.js
Normal file
151
lib/coverage.js
Normal file
@ -0,0 +1,151 @@
|
||||
"use strict";
|
||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
||||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||
});
|
||||
};
|
||||
var __importStar = (this && this.__importStar) || function (mod) {
|
||||
if (mod && mod.__esModule) return mod;
|
||||
var result = {};
|
||||
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
||||
result["default"] = mod;
|
||||
return result;
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const utils = __importStar(require("./utils"));
|
||||
const extensions = __importStar(require("./extensions"));
|
||||
const config = __importStar(require("./config"));
|
||||
/**
|
||||
* Function to set coverage driver
|
||||
*
|
||||
* @param coverage_driver
|
||||
* @param version
|
||||
* @param os_version
|
||||
*/
|
||||
function addCoverage(coverage_driver, version, os_version) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
coverage_driver.toLowerCase();
|
||||
let script = '\n' + (yield utils.stepLog('Setup Coverage', os_version));
|
||||
switch (coverage_driver) {
|
||||
case 'pcov':
|
||||
return script + (yield addCoveragePCOV(version, os_version));
|
||||
case 'xdebug':
|
||||
return script + (yield addCoverageXdebug(version, os_version));
|
||||
case 'none':
|
||||
return script + (yield disableCoverage(version, os_version));
|
||||
default:
|
||||
return '';
|
||||
}
|
||||
});
|
||||
}
|
||||
exports.addCoverage = addCoverage;
|
||||
/**
|
||||
* Function to setup Xdebug
|
||||
*
|
||||
* @param version
|
||||
* @param os_version
|
||||
*/
|
||||
function addCoverageXdebug(version, os_version) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
return ((yield extensions.addExtension('xdebug', version, os_version, true)) +
|
||||
(yield utils.suppressOutput(os_version)) +
|
||||
'\n' +
|
||||
(yield utils.addLog('$tick', 'xdebug', 'Xdebug enabled as coverage driver', os_version)));
|
||||
});
|
||||
}
|
||||
exports.addCoverageXdebug = addCoverageXdebug;
|
||||
/**
|
||||
* Function to setup PCOV
|
||||
*
|
||||
* @param version
|
||||
* @param os_version
|
||||
*/
|
||||
function addCoveragePCOV(version, os_version) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
let script = '\n';
|
||||
switch (version) {
|
||||
default:
|
||||
script +=
|
||||
(yield extensions.addExtension('pcov', version, os_version, true)) +
|
||||
(yield utils.suppressOutput(os_version)) +
|
||||
'\n';
|
||||
script +=
|
||||
(yield config.addINIValues('pcov.enabled=1', os_version, true)) + '\n';
|
||||
// add command to disable xdebug and enable pcov
|
||||
switch (os_version) {
|
||||
case 'linux':
|
||||
script +=
|
||||
'if [ -e /etc/php/' +
|
||||
version +
|
||||
'/mods-available/xdebug.ini ]; then sudo phpdismod -v ' +
|
||||
version +
|
||||
' xdebug; fi\n';
|
||||
script += 'sudo sed -i "/xdebug/d" $ini_file\n';
|
||||
break;
|
||||
case 'darwin':
|
||||
script += 'sudo sed -i \'\' "/xdebug/d" $ini_file\n';
|
||||
break;
|
||||
case 'win32':
|
||||
script +=
|
||||
'if(php -m | findstr -i xdebug) { Disable-PhpExtension xdebug C:\\tools\\php }\n';
|
||||
break;
|
||||
}
|
||||
// success
|
||||
script += yield utils.addLog('$tick', 'coverage: pcov', 'PCOV enabled as coverage driver', os_version);
|
||||
// version is not supported
|
||||
break;
|
||||
case '5.6':
|
||||
case '7.0':
|
||||
script += yield utils.addLog('$cross', 'pcov', 'PHP 7.1 or newer is required', os_version);
|
||||
break;
|
||||
}
|
||||
return script;
|
||||
});
|
||||
}
|
||||
exports.addCoveragePCOV = addCoveragePCOV;
|
||||
/**
|
||||
* Function to disable Xdebug and PCOV
|
||||
*
|
||||
* @param version
|
||||
* @param os_version
|
||||
*/
|
||||
function disableCoverage(version, os_version) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
let script = '\n';
|
||||
switch (os_version) {
|
||||
case 'linux':
|
||||
script +=
|
||||
'if [ -e /etc/php/' +
|
||||
version +
|
||||
'/mods-available/xdebug.ini ]; then sudo phpdismod -v ' +
|
||||
version +
|
||||
' xdebug; fi\n';
|
||||
script +=
|
||||
'if [ -e /etc/php/' +
|
||||
version +
|
||||
'/mods-available/pcov.ini ]; then sudo phpdismod -v ' +
|
||||
version +
|
||||
' pcov; fi\n';
|
||||
script += 'sudo sed -i "/xdebug/d" $ini_file\n';
|
||||
script += 'sudo sed -i "/pcov/d" $ini_file\n';
|
||||
break;
|
||||
case 'darwin':
|
||||
script += 'sudo sed -i \'\' "/xdebug/d" $ini_file\n';
|
||||
script += 'sudo sed -i \'\' "/pcov/d" $ini_file\n';
|
||||
break;
|
||||
case 'win32':
|
||||
script +=
|
||||
'if(php -m | findstr -i xdebug) { Disable-PhpExtension xdebug C:\\tools\\php }\n';
|
||||
script +=
|
||||
'if(php -m | findstr -i pcov) { Disable-PhpExtension pcov C:\\tools\\php }\n';
|
||||
break;
|
||||
}
|
||||
script += yield utils.addLog('$tick', 'none', 'Disabled Xdebug and PCOV', os_version);
|
||||
return script;
|
||||
});
|
||||
}
|
||||
exports.disableCoverage = disableCoverage;
|
194
lib/extensions.js
Normal file
194
lib/extensions.js
Normal file
@ -0,0 +1,194 @@
|
||||
"use strict";
|
||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
||||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||
});
|
||||
};
|
||||
var __importStar = (this && this.__importStar) || function (mod) {
|
||||
if (mod && mod.__esModule) return mod;
|
||||
var result = {};
|
||||
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
||||
result["default"] = mod;
|
||||
return result;
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const utils = __importStar(require("./utils"));
|
||||
/**
|
||||
* Install and enable extensions
|
||||
*
|
||||
* @param extension_csv
|
||||
* @param version
|
||||
* @param os_version
|
||||
* @param log_prefix
|
||||
*/
|
||||
function addExtension(extension_csv, version, os_version, no_step = false) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
let script = '\n';
|
||||
switch (no_step) {
|
||||
case true:
|
||||
script +=
|
||||
(yield utils.stepLog('Setup Extensions', os_version)) +
|
||||
(yield utils.suppressOutput(os_version));
|
||||
break;
|
||||
case false:
|
||||
default:
|
||||
script += yield utils.stepLog('Setup Extensions', os_version);
|
||||
break;
|
||||
}
|
||||
switch (os_version) {
|
||||
case 'win32':
|
||||
return script + (yield addExtensionWindows(extension_csv, version));
|
||||
case 'darwin':
|
||||
return script + (yield addExtensionDarwin(extension_csv, version));
|
||||
case 'linux':
|
||||
return script + (yield addExtensionLinux(extension_csv, version));
|
||||
default:
|
||||
return yield utils.log('Platform ' + os_version + ' is not supported', os_version, 'error');
|
||||
}
|
||||
});
|
||||
}
|
||||
exports.addExtension = addExtension;
|
||||
/**
|
||||
* Install and enable extensions for darwin
|
||||
*
|
||||
* @param extension_csv
|
||||
* @param version
|
||||
*/
|
||||
function addExtensionDarwin(extension_csv, version) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
let extensions = yield utils.extensionArray(extension_csv);
|
||||
let script = '\n';
|
||||
yield utils.asyncForEach(extensions, function (extension) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
extension = extension.toLowerCase();
|
||||
// add script to enable extension is already installed along with php
|
||||
let install_command = '';
|
||||
switch (version + extension) {
|
||||
case '7.4xdebug':
|
||||
install_command =
|
||||
'sh ./xdebug_darwin.sh >/dev/null 2>&1 && echo "zend_extension=xdebug.so" >> $ini_file';
|
||||
break;
|
||||
case '7.4pcov':
|
||||
install_command =
|
||||
'sh ./pcov.sh >/dev/null 2>&1 && echo "extension=pcov.so" >> $ini_file';
|
||||
break;
|
||||
case '5.6xdebug':
|
||||
install_command = 'sudo pecl install xdebug-2.5.5 >/dev/null 2>&1';
|
||||
break;
|
||||
default:
|
||||
install_command = 'sudo pecl install ' + extension + ' >/dev/null 2>&1';
|
||||
break;
|
||||
}
|
||||
script +=
|
||||
'\nadd_extension ' +
|
||||
extension +
|
||||
' "' +
|
||||
install_command +
|
||||
'" ' +
|
||||
(yield utils.getExtensionPrefix(extension));
|
||||
});
|
||||
});
|
||||
return script;
|
||||
});
|
||||
}
|
||||
exports.addExtensionDarwin = addExtensionDarwin;
|
||||
/**
|
||||
* Install and enable extensions for windows
|
||||
*
|
||||
* @param extension_csv
|
||||
* @param version
|
||||
*/
|
||||
function addExtensionWindows(extension_csv, version) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
let extensions = yield utils.extensionArray(extension_csv);
|
||||
let script = '\n';
|
||||
yield utils.asyncForEach(extensions, function (extension) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
extension = extension.toLowerCase();
|
||||
// add script to enable extension is already installed along with php
|
||||
let install_command = '';
|
||||
switch (version + extension) {
|
||||
case '7.4xdebug':
|
||||
const extension_url = 'https://xdebug.org/files/php_xdebug-2.8.0beta2-7.4-vc15.dll';
|
||||
install_command =
|
||||
'Invoke-WebRequest -Uri ' +
|
||||
extension_url +
|
||||
' -OutFile C:\\tools\\php\\ext\\php_xdebug.dll\n';
|
||||
install_command += 'Enable-PhpExtension xdebug';
|
||||
break;
|
||||
case '7.2xdebug':
|
||||
default:
|
||||
install_command = 'Install-PhpExtension ' + extension;
|
||||
break;
|
||||
}
|
||||
script +=
|
||||
'\nAdd-Extension ' +
|
||||
extension +
|
||||
' "' +
|
||||
install_command +
|
||||
'" ' +
|
||||
(yield utils.getExtensionPrefix(extension));
|
||||
});
|
||||
});
|
||||
return script;
|
||||
});
|
||||
}
|
||||
exports.addExtensionWindows = addExtensionWindows;
|
||||
/**
|
||||
* Install and enable extensions for linux
|
||||
*
|
||||
* @param extension_csv
|
||||
* @param version
|
||||
*/
|
||||
function addExtensionLinux(extension_csv, version) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
let extensions = yield utils.extensionArray(extension_csv);
|
||||
let script = '\n';
|
||||
yield utils.asyncForEach(extensions, function (extension) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
extension = extension.toLowerCase();
|
||||
// add script to enable extension is already installed along with php
|
||||
let install_command = '';
|
||||
switch (version + extension) {
|
||||
case '7.4xdebug':
|
||||
install_command =
|
||||
'./xdebug.sh >/dev/null 2>&1 && echo "zend_extension=xdebug.so" >> $ini_file';
|
||||
break;
|
||||
case '7.4pcov':
|
||||
install_command =
|
||||
'./pcov.sh >/dev/null 2>&1 && echo "extension=pcov.so" >> $ini_file';
|
||||
break;
|
||||
case '7.2phalcon3':
|
||||
case '7.3phalcon3':
|
||||
install_command = './phalcon.sh master ' + version + ' >/dev/null 2>&1';
|
||||
break;
|
||||
case '7.2phalcon4':
|
||||
case '7.3phalcon4':
|
||||
install_command = './phalcon.sh 4.0.x ' + version + ' >/dev/null 2>&1';
|
||||
break;
|
||||
default:
|
||||
install_command =
|
||||
'sudo DEBIAN_FRONTEND=noninteractive apt install -y php' +
|
||||
version +
|
||||
'-' +
|
||||
extension +
|
||||
' >/dev/null 2>&1';
|
||||
break;
|
||||
}
|
||||
script +=
|
||||
'\nadd_extension ' +
|
||||
extension +
|
||||
' "' +
|
||||
install_command +
|
||||
'" ' +
|
||||
(yield utils.getExtensionPrefix(extension));
|
||||
});
|
||||
});
|
||||
return script;
|
||||
});
|
||||
}
|
||||
exports.addExtensionLinux = addExtensionLinux;
|
209
lib/features.js
209
lib/features.js
@ -1,209 +0,0 @@
|
||||
"use strict";
|
||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
||||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||
});
|
||||
};
|
||||
var __importStar = (this && this.__importStar) || function (mod) {
|
||||
if (mod && mod.__esModule) return mod;
|
||||
var result = {};
|
||||
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
||||
result["default"] = mod;
|
||||
return result;
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const utils = __importStar(require("./utils"));
|
||||
const pecl = __importStar(require("./pecl"));
|
||||
function addExtension(extensions, version, os_version) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
if (os_version === 'win32') {
|
||||
return yield addExtensionWindows(extensions, version);
|
||||
}
|
||||
else if (os_version === 'linux') {
|
||||
return yield addExtensionLinux(extensions, version);
|
||||
}
|
||||
return yield addExtensionDarwin(extensions);
|
||||
});
|
||||
}
|
||||
exports.addExtension = addExtension;
|
||||
function addINIValues(ini_values_csv, os_version) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
if (os_version === 'win32') {
|
||||
return yield addINIValuesWindows(ini_values_csv);
|
||||
}
|
||||
return yield addINIValuesUnix(ini_values_csv);
|
||||
});
|
||||
}
|
||||
exports.addINIValues = addINIValues;
|
||||
/**
|
||||
* Enable extensions which are installed but not enabled on windows
|
||||
*
|
||||
* @param extension
|
||||
*/
|
||||
function enableExtensionWindows(extension) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
return `try {
|
||||
$exist = Test-Path -Path $ext_dir\\php_${extension}.dll
|
||||
if(!(php -m | findstr -i ${extension}) -and $exist) {
|
||||
Enable-PhpExtension ${extension} C:\\tools\\php
|
||||
}
|
||||
} catch [Exception] {
|
||||
echo $_
|
||||
}\n`;
|
||||
});
|
||||
}
|
||||
exports.enableExtensionWindows = enableExtensionWindows;
|
||||
/**
|
||||
* Enable extensions which are installed but not enabled on unix
|
||||
*
|
||||
* @param extension
|
||||
*/
|
||||
function enableExtensionUnix(extension) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
return `if [ ! "$(php -m | grep ${extension})" ] && [ -e "$ext_dir/${extension}.so" ]; then
|
||||
echo "extension=${extension}.so" >> 'php -i | grep "Loaded Configuration" | sed -e "s|.*=>\s*||"'
|
||||
echo "${extension} enabled"
|
||||
fi\n`;
|
||||
});
|
||||
}
|
||||
exports.enableExtensionUnix = enableExtensionUnix;
|
||||
/**
|
||||
* Install and enable extensions for darwin
|
||||
*
|
||||
* @param extension_csv
|
||||
*/
|
||||
function addExtensionDarwin(extension_csv) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
let extensions = yield utils.extensionArray(extension_csv);
|
||||
let script = '\n';
|
||||
yield utils.asyncForEach(extensions, function (extension) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
// add script to enable extension is already installed along with php
|
||||
script += yield enableExtensionUnix(extension);
|
||||
if (yield pecl.checkPECLExtension(extension)) {
|
||||
script +=
|
||||
'if [ ! "$(php -m | grep ' +
|
||||
extension +
|
||||
')" ]; then sudo pecl install ' +
|
||||
extension +
|
||||
' || echo "Couldn\'t find extension: ' +
|
||||
extension +
|
||||
'"; fi\n';
|
||||
}
|
||||
});
|
||||
});
|
||||
return script;
|
||||
});
|
||||
}
|
||||
exports.addExtensionDarwin = addExtensionDarwin;
|
||||
/**
|
||||
* Install and enable extensions for windows
|
||||
*
|
||||
* @param extension_csv
|
||||
* @param version
|
||||
*/
|
||||
function addExtensionWindows(extension_csv, version) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
let extensions = yield utils.extensionArray(extension_csv);
|
||||
let script = '\n';
|
||||
yield utils.asyncForEach(extensions, function (extension) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
// add script to enable extension is already installed along with php
|
||||
script += yield enableExtensionWindows(extension);
|
||||
let extension_version = 'stable';
|
||||
if (version == '7.4') {
|
||||
extension_version = 'alpha';
|
||||
}
|
||||
if (yield pecl.checkPECLExtension(extension)) {
|
||||
script +=
|
||||
'if(!(php -m | findstr -i ' +
|
||||
extension +
|
||||
')) { ' +
|
||||
'try { Install-PhpExtension ' +
|
||||
extension +
|
||||
' -MinimumStability ' +
|
||||
extension_version +
|
||||
' } catch [Exception] { echo $_; echo "Could not install extension: "' +
|
||||
extension +
|
||||
' } }\n';
|
||||
}
|
||||
});
|
||||
});
|
||||
return script;
|
||||
});
|
||||
}
|
||||
exports.addExtensionWindows = addExtensionWindows;
|
||||
/**
|
||||
* Install and enable extensions for linux
|
||||
*
|
||||
* @param extension_csv
|
||||
* @param version
|
||||
*/
|
||||
function addExtensionLinux(extension_csv, version) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
let extensions = yield utils.extensionArray(extension_csv);
|
||||
let script = '\n';
|
||||
yield utils.asyncForEach(extensions, function (extension) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
// add script to enable extension is already installed along with php
|
||||
script += yield enableExtensionUnix(extension);
|
||||
script +=
|
||||
'if [ ! "$(php -m | grep ' +
|
||||
extension +
|
||||
')" ]; then sudo DEBIAN_FRONTEND=noninteractive apt install -y php' +
|
||||
version +
|
||||
'-' +
|
||||
extension +
|
||||
' || echo "Couldn\'t find extension php' +
|
||||
version +
|
||||
'-' +
|
||||
extension +
|
||||
'"; fi\n';
|
||||
});
|
||||
});
|
||||
return script;
|
||||
});
|
||||
}
|
||||
exports.addExtensionLinux = addExtensionLinux;
|
||||
/**
|
||||
* Add script to set custom ini values for unix
|
||||
*
|
||||
* @param ini_values_csv
|
||||
*/
|
||||
function addINIValuesUnix(ini_values_csv) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
let script = '\n';
|
||||
let ini_values = yield utils.INIArray(ini_values_csv);
|
||||
yield utils.asyncForEach(ini_values, function (ini_value) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
// add script to set ini value
|
||||
script += 'echo "' + ini_value + '" >> $ini_file\n';
|
||||
});
|
||||
});
|
||||
return script;
|
||||
});
|
||||
}
|
||||
exports.addINIValuesUnix = addINIValuesUnix;
|
||||
/**
|
||||
* Add script to set custom ini values for windows
|
||||
*
|
||||
* @param ini_values_csv
|
||||
*/
|
||||
function addINIValuesWindows(ini_values_csv) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
let script = '\n';
|
||||
let ini_values = yield utils.INIArray(ini_values_csv);
|
||||
yield utils.asyncForEach(ini_values, function (ini_value) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
// add script to set ini value
|
||||
script += 'Add-Content C:\\tools\\php\\php.ini "' + ini_value + '"\n';
|
||||
});
|
||||
});
|
||||
return script;
|
||||
});
|
||||
}
|
||||
exports.addINIValuesWindows = addINIValuesWindows;
|
@ -19,47 +19,61 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const exec_1 = require("@actions/exec/lib/exec");
|
||||
const core = __importStar(require("@actions/core"));
|
||||
const utils = __importStar(require("./utils"));
|
||||
const features = __importStar(require("./features"));
|
||||
const extensions = __importStar(require("./extensions"));
|
||||
const config = __importStar(require("./config"));
|
||||
const coverage = __importStar(require("./coverage"));
|
||||
/**
|
||||
* Build the script
|
||||
*
|
||||
* @param filename
|
||||
* @param version
|
||||
* @param os_version
|
||||
*/
|
||||
function build(filename, version, os_version) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
// taking inputs
|
||||
let extension_csv = yield utils.getInput('extension-csv', false);
|
||||
let ini_values_csv = yield utils.getInput('ini-values-csv', false);
|
||||
let coverage_driver = yield utils.getInput('coverage', false);
|
||||
let script = yield utils.readScript(filename, version, os_version);
|
||||
if (extension_csv) {
|
||||
script += yield extensions.addExtension(extension_csv, version, os_version);
|
||||
}
|
||||
if (ini_values_csv) {
|
||||
script += yield config.addINIValues(ini_values_csv, os_version);
|
||||
}
|
||||
if (coverage_driver) {
|
||||
script += yield coverage.addCoverage(coverage_driver, version, os_version);
|
||||
}
|
||||
yield utils.writeScript(filename, version, script);
|
||||
});
|
||||
}
|
||||
/**
|
||||
* Run the script
|
||||
*/
|
||||
function run() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
try {
|
||||
// taking inputs
|
||||
let version = yield utils.getInput('php-version', true);
|
||||
let extension_csv = yield utils.getInput('extension-csv', false);
|
||||
let ini_values_csv = yield utils.getInput('ini-values-csv', false);
|
||||
let os_version = process.platform;
|
||||
let version = yield utils.getInput('php-version', true);
|
||||
// check the os version and run the respective script
|
||||
if (os_version == 'darwin') {
|
||||
let darwin = yield utils.readScript('darwin.sh', version, os_version);
|
||||
darwin += yield features.addExtension(extension_csv, version, os_version);
|
||||
darwin += yield features.addINIValues(ini_values_csv, os_version);
|
||||
yield utils.writeScript('darwin.sh', version, darwin);
|
||||
yield exec_1.exec('sh -x ./' + version + 'darwin.sh ' + version);
|
||||
yield build('darwin.sh', version, os_version);
|
||||
yield exec_1.exec('sh ./' + version + 'darwin.sh ' + version);
|
||||
}
|
||||
else if (os_version == 'win32') {
|
||||
let windows = yield utils.readScript('win32.ps1', version, os_version);
|
||||
windows += yield features.addExtension(extension_csv, version, os_version);
|
||||
windows += yield features.addINIValues(ini_values_csv, os_version);
|
||||
yield utils.writeScript('win32.ps1', version, windows);
|
||||
yield build('win32.ps1', version, os_version);
|
||||
yield exec_1.exec('powershell .\\' + version + 'win32.ps1 -version ' + version);
|
||||
}
|
||||
else if (os_version == 'linux') {
|
||||
let linux = yield utils.readScript('linux.sh', version, os_version);
|
||||
linux += yield features.addExtension(extension_csv, version, os_version);
|
||||
linux += yield features.addINIValues(ini_values_csv, os_version);
|
||||
yield utils.writeScript('linux.sh', version, linux);
|
||||
yield build('linux.sh', version, os_version);
|
||||
yield exec_1.exec('./' + version + 'linux.sh ' + version);
|
||||
}
|
||||
}
|
||||
catch (err) {
|
||||
core.setFailed(err.message);
|
||||
catch (error) {
|
||||
core.setFailed(error.message);
|
||||
}
|
||||
});
|
||||
}
|
||||
// call the run function
|
||||
run().then(function () {
|
||||
console.log('done');
|
||||
});
|
||||
run();
|
||||
|
@ -28,7 +28,7 @@ function checkPECLExtension(extension) {
|
||||
allowRetries: true,
|
||||
maxRetries: 2
|
||||
});
|
||||
const response = yield http.get('https://pecl.php.net/package/' + extension);
|
||||
const response = yield http.get('https://pecl.php.net/json.php?package=' + extension);
|
||||
return response.message.statusCode === 200;
|
||||
});
|
||||
}
|
||||
|
197
lib/utils.js
197
lib/utils.js
@ -19,13 +19,22 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const fs = __importStar(require("fs"));
|
||||
const path = __importStar(require("path"));
|
||||
const core = __importStar(require("@actions/core"));
|
||||
/**
|
||||
* Function to get inputs from both with and env annotations.
|
||||
*
|
||||
* @param name
|
||||
* @param mandatory
|
||||
*/
|
||||
function getInput(name, mandatory) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
let input = process.env[name];
|
||||
if (!input) {
|
||||
input = core.getInput(name, { required: mandatory });
|
||||
switch (input) {
|
||||
case '':
|
||||
case undefined:
|
||||
return core.getInput(name, { required: mandatory });
|
||||
default:
|
||||
return input;
|
||||
}
|
||||
return input;
|
||||
});
|
||||
}
|
||||
exports.getInput = getInput;
|
||||
@ -44,6 +53,19 @@ function asyncForEach(array, callback) {
|
||||
});
|
||||
}
|
||||
exports.asyncForEach = asyncForEach;
|
||||
/**
|
||||
* Copy config
|
||||
*
|
||||
* @param files
|
||||
*/
|
||||
function moveFiles(files) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
yield asyncForEach(files, function (filename) {
|
||||
fs.createReadStream(path.join(__dirname, '../src/' + filename)).pipe(fs.createWriteStream(filename.split('/')[1], { mode: 0o755 }));
|
||||
});
|
||||
});
|
||||
}
|
||||
exports.moveFiles = moveFiles;
|
||||
/**
|
||||
* Read the scripts
|
||||
*
|
||||
@ -53,10 +75,38 @@ exports.asyncForEach = asyncForEach;
|
||||
*/
|
||||
function readScript(filename, version, os_version) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
if (version === '7.4' && os_version === 'darwin') {
|
||||
return fs.readFileSync(path.join(__dirname, '../src/7.4.sh'), 'utf8');
|
||||
switch (os_version) {
|
||||
case 'darwin':
|
||||
switch (version) {
|
||||
case '7.4':
|
||||
yield moveFiles([
|
||||
'configs/config.yaml',
|
||||
'scripts/xdebug_darwin.sh',
|
||||
'scripts/pcov.sh'
|
||||
]);
|
||||
return fs.readFileSync(path.join(__dirname, '../src/scripts/7.4.sh'), 'utf8');
|
||||
}
|
||||
break;
|
||||
case 'linux':
|
||||
let files = ['scripts/phalcon.sh'];
|
||||
switch (version) {
|
||||
case '7.4':
|
||||
files = files.concat(['scripts/xdebug.sh', 'scripts/pcov.sh']);
|
||||
break;
|
||||
}
|
||||
yield moveFiles(files);
|
||||
break;
|
||||
case 'win32':
|
||||
switch (version) {
|
||||
case '7.4':
|
||||
yield moveFiles(['ext/php_pcov.dll']);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return yield log('Platform ' + os_version + ' is not supported', os_version, 'error');
|
||||
}
|
||||
return fs.readFileSync(path.join(__dirname, '../src/' + filename), 'utf8');
|
||||
return fs.readFileSync(path.join(__dirname, '../src/scripts/' + filename), 'utf8');
|
||||
});
|
||||
}
|
||||
exports.readScript = readScript;
|
||||
@ -75,16 +125,23 @@ function writeScript(filename, version, script) {
|
||||
exports.writeScript = writeScript;
|
||||
/**
|
||||
* Function to break extension csv into an array
|
||||
*
|
||||
* @param extension_csv
|
||||
*/
|
||||
function extensionArray(extension_csv) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
return extension_csv.split(',').map(function (extension) {
|
||||
return extension
|
||||
.trim()
|
||||
.replace('php-', '')
|
||||
.replace('php_', '');
|
||||
});
|
||||
switch (extension_csv) {
|
||||
case '':
|
||||
case ' ':
|
||||
return [];
|
||||
default:
|
||||
return extension_csv.split(',').map(function (extension) {
|
||||
return extension
|
||||
.trim()
|
||||
.replace('php-', '')
|
||||
.replace('php_', '');
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
exports.extensionArray = extensionArray;
|
||||
@ -96,9 +153,119 @@ exports.extensionArray = extensionArray;
|
||||
*/
|
||||
function INIArray(ini_values_csv) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
return ini_values_csv.split(',').map(function (ini_value) {
|
||||
return ini_value.trim();
|
||||
});
|
||||
switch (ini_values_csv) {
|
||||
case '':
|
||||
case ' ':
|
||||
return [];
|
||||
default:
|
||||
return ini_values_csv.split(',').map(function (ini_value) {
|
||||
return ini_value.trim();
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
exports.INIArray = INIArray;
|
||||
/**
|
||||
* Function to log a step
|
||||
*
|
||||
* @param message
|
||||
* @param os_version
|
||||
*/
|
||||
function stepLog(message, os_version) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
switch (os_version) {
|
||||
case 'win32':
|
||||
return 'Step-Log "' + message + '"';
|
||||
case 'linux':
|
||||
case 'darwin':
|
||||
return 'step_log "' + message + '"';
|
||||
default:
|
||||
return yield log('Platform ' + os_version + ' is not supported', os_version, 'error');
|
||||
}
|
||||
});
|
||||
}
|
||||
exports.stepLog = stepLog;
|
||||
/**
|
||||
* Function to log a result
|
||||
* @param mark
|
||||
* @param subject
|
||||
* @param message
|
||||
*/
|
||||
function addLog(mark, subject, message, os_version) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
switch (os_version) {
|
||||
case 'win32':
|
||||
return 'Add-Log "' + mark + '" "' + subject + '" "' + message + '"';
|
||||
case 'linux':
|
||||
case 'darwin':
|
||||
return 'add_log "' + mark + '" "' + subject + '" "' + message + '"';
|
||||
default:
|
||||
return yield log('Platform ' + os_version + ' is not supported', os_version, 'error');
|
||||
}
|
||||
});
|
||||
}
|
||||
exports.addLog = addLog;
|
||||
/**
|
||||
* Log to console
|
||||
*
|
||||
* @param message
|
||||
* @param os_version
|
||||
* @param log_type
|
||||
* @param prefix
|
||||
*/
|
||||
function log(message, os_version, log_type) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
const color = {
|
||||
error: '31',
|
||||
success: '32',
|
||||
warning: '33'
|
||||
};
|
||||
switch (os_version) {
|
||||
case 'win32':
|
||||
return ('printf "\\033[' + color[log_type] + ';1m' + message + ' \\033[0m"');
|
||||
case 'linux':
|
||||
case 'darwin':
|
||||
default:
|
||||
return 'echo "\\033[' + color[log_type] + ';1m' + message + '\\033[0m"';
|
||||
}
|
||||
});
|
||||
}
|
||||
exports.log = log;
|
||||
/**
|
||||
* Function to get prefix required to load an extension.
|
||||
*
|
||||
* @param extension
|
||||
*/
|
||||
function getExtensionPrefix(extension) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
let zend = ['xdebug', 'opcache', 'ioncube', 'eaccelerator'];
|
||||
switch (zend.indexOf(extension)) {
|
||||
case 0:
|
||||
case 1:
|
||||
return 'zend_extension';
|
||||
case -1:
|
||||
default:
|
||||
return 'extension';
|
||||
}
|
||||
});
|
||||
}
|
||||
exports.getExtensionPrefix = getExtensionPrefix;
|
||||
/**
|
||||
* Function to get the suffix to suppress console output
|
||||
*
|
||||
* @param os_version
|
||||
*/
|
||||
function suppressOutput(os_version) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
switch (os_version) {
|
||||
case 'win32':
|
||||
return ' >$null 2>&1';
|
||||
case 'linux':
|
||||
case 'darwin':
|
||||
return ' >/dev/null 2>&1';
|
||||
default:
|
||||
return yield log('Platform ' + os_version + ' is not supported', os_version, 'error');
|
||||
}
|
||||
});
|
||||
}
|
||||
exports.suppressOutput = suppressOutput;
|
||||
|
7
node_modules/@actions/core/LICENSE.md
generated
vendored
7
node_modules/@actions/core/LICENSE.md
generated
vendored
@ -1,7 +0,0 @@
|
||||
Copyright 2019 GitHub
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
40
node_modules/@actions/core/README.md
generated
vendored
40
node_modules/@actions/core/README.md
generated
vendored
@ -4,45 +4,53 @@
|
||||
|
||||
## Usage
|
||||
|
||||
#### Inputs/Outputs
|
||||
|
||||
You can use this library to get inputs or set outputs:
|
||||
### Import the package
|
||||
|
||||
```js
|
||||
// javascript
|
||||
const core = require('@actions/core');
|
||||
|
||||
const myInput = core.getInput('inputName', { required: true });
|
||||
// typescript
|
||||
import * as core from '@actions/core';
|
||||
```
|
||||
|
||||
// Do stuff
|
||||
#### Inputs/Outputs
|
||||
|
||||
Action inputs can be read with `getInput`. Outputs can be set with `setOutput` which makes them available to be mapped into inputs of other actions to ensure they are decoupled.
|
||||
|
||||
```js
|
||||
const myInput = core.getInput('inputName', { required: true });
|
||||
|
||||
core.setOutput('outputKey', 'outputVal');
|
||||
```
|
||||
|
||||
#### Exporting variables
|
||||
|
||||
You can also export variables for future steps. Variables get set in the environment.
|
||||
Since each step runs in a separate process, you can use `exportVariable` to add it to this step and future steps environment blocks.
|
||||
|
||||
```js
|
||||
const core = require('@actions/core');
|
||||
|
||||
// Do stuff
|
||||
|
||||
core.exportVariable('envVar', 'Val');
|
||||
```
|
||||
|
||||
#### Setting a secret
|
||||
|
||||
Setting a secret registers the secret with the runner to ensure it is masked in logs.
|
||||
|
||||
```js
|
||||
core.setSecret('myPassword');
|
||||
```
|
||||
|
||||
#### PATH Manipulation
|
||||
|
||||
You can explicitly add items to the path for all remaining steps in a workflow:
|
||||
To make a tool's path available in the path for the remainder of the job (without altering the machine or containers state), use `addPath`. The runner will prepend the path given to the jobs PATH.
|
||||
|
||||
```js
|
||||
const core = require('@actions/core');
|
||||
|
||||
core.addPath('pathToTool');
|
||||
core.addPath('/path/to/mytool');
|
||||
```
|
||||
|
||||
#### Exit codes
|
||||
|
||||
You should use this library to set the failing exit code for your action:
|
||||
You should use this library to set the failing exit code for your action. If status is not set and the script runs to completion, that will lead to a success.
|
||||
|
||||
```js
|
||||
const core = require('@actions/core');
|
||||
@ -55,6 +63,8 @@ catch (err) {
|
||||
core.setFailed(`Action failed with error ${err}`);
|
||||
}
|
||||
|
||||
Note that `setNeutral` is not yet implemented in actions V2 but equivalent functionality is being planned.
|
||||
|
||||
```
|
||||
|
||||
#### Logging
|
||||
|
8
node_modules/@actions/core/lib/command.js
generated
vendored
8
node_modules/@actions/core/lib/command.js
generated
vendored
@ -20,7 +20,7 @@ function issue(name, message = '') {
|
||||
issueCommand(name, {}, message);
|
||||
}
|
||||
exports.issue = issue;
|
||||
const CMD_PREFIX = '##[';
|
||||
const CMD_STRING = '::';
|
||||
class Command {
|
||||
constructor(command, properties, message) {
|
||||
if (!command) {
|
||||
@ -31,7 +31,7 @@ class Command {
|
||||
this.message = message;
|
||||
}
|
||||
toString() {
|
||||
let cmdStr = CMD_PREFIX + this.command;
|
||||
let cmdStr = CMD_STRING + this.command;
|
||||
if (this.properties && Object.keys(this.properties).length > 0) {
|
||||
cmdStr += ' ';
|
||||
for (const key in this.properties) {
|
||||
@ -40,12 +40,12 @@ class Command {
|
||||
if (val) {
|
||||
// safely append the val - avoid blowing up when attempting to
|
||||
// call .replace() if message is not a string for some reason
|
||||
cmdStr += `${key}=${escape(`${val || ''}`)};`;
|
||||
cmdStr += `${key}=${escape(`${val || ''}`)},`;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
cmdStr += ']';
|
||||
cmdStr += CMD_STRING;
|
||||
// safely append the message - avoid blowing up when attempting to
|
||||
// call .replace() if message is not a string for some reason
|
||||
const message = `${this.message || ''}`;
|
||||
|
2
node_modules/@actions/core/lib/command.js.map
generated
vendored
2
node_modules/@actions/core/lib/command.js.map
generated
vendored
@ -1 +1 @@
|
||||
{"version":3,"file":"command.js","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":";;AAAA,yBAAwB;AAQxB;;;;;;;;;GASG;AACH,SAAgB,YAAY,CAC1B,OAAe,EACf,UAA6B,EAC7B,OAAe;IAEf,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;IACrD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;AAC/C,CAAC;AAPD,oCAOC;AAED,SAAgB,KAAK,CAAC,IAAY,EAAE,UAAkB,EAAE;IACtD,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;AACjC,CAAC;AAFD,sBAEC;AAED,MAAM,UAAU,GAAG,KAAK,CAAA;AAExB,MAAM,OAAO;IAKX,YAAY,OAAe,EAAE,UAA6B,EAAE,OAAe;QACzE,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,GAAG,iBAAiB,CAAA;SAC5B;QAED,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAED,QAAQ;QACN,IAAI,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC,OAAO,CAAA;QAEtC,IAAI,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9D,MAAM,IAAI,GAAG,CAAA;YACb,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE;gBACjC,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;oBACvC,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;oBAChC,IAAI,GAAG,EAAE;wBACP,8DAA8D;wBAC9D,6DAA6D;wBAC7D,MAAM,IAAI,GAAG,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,IAAI,EAAE,EAAE,CAAC,GAAG,CAAA;qBAC9C;iBACF;aACF;SACF;QAED,MAAM,IAAI,GAAG,CAAA;QAEb,kEAAkE;QAClE,6DAA6D;QAC7D,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,CAAA;QACvC,MAAM,IAAI,UAAU,CAAC,OAAO,CAAC,CAAA;QAE7B,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AAED,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;AACtD,CAAC;AAED,SAAS,MAAM,CAAC,CAAS;IACvB,OAAO,CAAC;SACL,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;SACrB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;SACpB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;AACzB,CAAC"}
|
||||
{"version":3,"file":"command.js","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":";;AAAA,yBAAwB;AAQxB;;;;;;;;;GASG;AACH,SAAgB,YAAY,CAC1B,OAAe,EACf,UAA6B,EAC7B,OAAe;IAEf,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;IACrD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;AAC/C,CAAC;AAPD,oCAOC;AAED,SAAgB,KAAK,CAAC,IAAY,EAAE,UAAkB,EAAE;IACtD,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;AACjC,CAAC;AAFD,sBAEC;AAED,MAAM,UAAU,GAAG,IAAI,CAAA;AAEvB,MAAM,OAAO;IAKX,YAAY,OAAe,EAAE,UAA6B,EAAE,OAAe;QACzE,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,GAAG,iBAAiB,CAAA;SAC5B;QAED,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAED,QAAQ;QACN,IAAI,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC,OAAO,CAAA;QAEtC,IAAI,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9D,MAAM,IAAI,GAAG,CAAA;YACb,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE;gBACjC,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;oBACvC,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;oBAChC,IAAI,GAAG,EAAE;wBACP,8DAA8D;wBAC9D,6DAA6D;wBAC7D,MAAM,IAAI,GAAG,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,IAAI,EAAE,EAAE,CAAC,GAAG,CAAA;qBAC9C;iBACF;aACF;SACF;QAED,MAAM,IAAI,UAAU,CAAA;QAEpB,kEAAkE;QAClE,6DAA6D;QAC7D,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,CAAA;QACvC,MAAM,IAAI,UAAU,CAAC,OAAO,CAAC,CAAA;QAE7B,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AAED,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;AACtD,CAAC;AAED,SAAS,MAAM,CAAC,CAAS;IACvB,OAAO,CAAC;SACL,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;SACrB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;SACpB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;AACzB,CAAC"}
|
14
node_modules/@actions/core/lib/core.d.ts
generated
vendored
14
node_modules/@actions/core/lib/core.d.ts
generated
vendored
@ -19,17 +19,16 @@ export declare enum ExitCode {
|
||||
Failure = 1
|
||||
}
|
||||
/**
|
||||
* sets env variable for this action and future actions in the job
|
||||
* Sets env variable for this action and future actions in the job
|
||||
* @param name the name of the variable to set
|
||||
* @param val the value of the variable
|
||||
*/
|
||||
export declare function exportVariable(name: string, val: string): void;
|
||||
/**
|
||||
* exports the variable and registers a secret which will get masked from logs
|
||||
* @param name the name of the variable to set
|
||||
* @param val value of the secret
|
||||
* Registers a secret which will get masked from logs
|
||||
* @param secret value of the secret
|
||||
*/
|
||||
export declare function exportSecret(name: string, val: string): void;
|
||||
export declare function setSecret(secret: string): void;
|
||||
/**
|
||||
* Prepends inputPath to the PATH (for this action and future actions)
|
||||
* @param inputPath
|
||||
@ -71,6 +70,11 @@ export declare function error(message: string): void;
|
||||
* @param message warning issue message
|
||||
*/
|
||||
export declare function warning(message: string): void;
|
||||
/**
|
||||
* Writes info to log with console.log.
|
||||
* @param message info message
|
||||
*/
|
||||
export declare function info(message: string): void;
|
||||
/**
|
||||
* Begin an output group.
|
||||
*
|
||||
|
28
node_modules/@actions/core/lib/core.js
generated
vendored
28
node_modules/@actions/core/lib/core.js
generated
vendored
@ -10,6 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const command_1 = require("./command");
|
||||
const os = require("os");
|
||||
const path = require("path");
|
||||
/**
|
||||
* The code to exit an action
|
||||
@ -29,7 +30,7 @@ var ExitCode;
|
||||
// Variables
|
||||
//-----------------------------------------------------------------------
|
||||
/**
|
||||
* sets env variable for this action and future actions in the job
|
||||
* Sets env variable for this action and future actions in the job
|
||||
* @param name the name of the variable to set
|
||||
* @param val the value of the variable
|
||||
*/
|
||||
@ -39,18 +40,13 @@ function exportVariable(name, val) {
|
||||
}
|
||||
exports.exportVariable = exportVariable;
|
||||
/**
|
||||
* exports the variable and registers a secret which will get masked from logs
|
||||
* @param name the name of the variable to set
|
||||
* @param val value of the secret
|
||||
* Registers a secret which will get masked from logs
|
||||
* @param secret value of the secret
|
||||
*/
|
||||
function exportSecret(name, val) {
|
||||
exportVariable(name, val);
|
||||
// the runner will error with not implemented
|
||||
// leaving the function but raising the error earlier
|
||||
command_1.issueCommand('set-secret', {}, val);
|
||||
throw new Error('Not implemented.');
|
||||
function setSecret(secret) {
|
||||
command_1.issueCommand('add-mask', {}, secret);
|
||||
}
|
||||
exports.exportSecret = exportSecret;
|
||||
exports.setSecret = setSecret;
|
||||
/**
|
||||
* Prepends inputPath to the PATH (for this action and future actions)
|
||||
* @param inputPath
|
||||
@ -68,7 +64,7 @@ exports.addPath = addPath;
|
||||
* @returns string
|
||||
*/
|
||||
function getInput(name, options) {
|
||||
const val = process.env[`INPUT_${name.replace(' ', '_').toUpperCase()}`] || '';
|
||||
const val = process.env[`INPUT_${name.replace(/ /g, '_').toUpperCase()}`] || '';
|
||||
if (options && options.required && !val) {
|
||||
throw new Error(`Input required and not supplied: ${name}`);
|
||||
}
|
||||
@ -125,6 +121,14 @@ function warning(message) {
|
||||
command_1.issue('warning', message);
|
||||
}
|
||||
exports.warning = warning;
|
||||
/**
|
||||
* Writes info to log with console.log.
|
||||
* @param message info message
|
||||
*/
|
||||
function info(message) {
|
||||
process.stdout.write(message + os.EOL);
|
||||
}
|
||||
exports.info = info;
|
||||
/**
|
||||
* Begin an output group.
|
||||
*
|
||||
|
2
node_modules/@actions/core/lib/core.js.map
generated
vendored
2
node_modules/@actions/core/lib/core.js.map
generated
vendored
@ -1 +1 @@
|
||||
{"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,uCAA6C;AAE7C,6BAA4B;AAU5B;;GAEG;AACH,IAAY,QAUX;AAVD,WAAY,QAAQ;IAClB;;OAEG;IACH,6CAAW,CAAA;IAEX;;OAEG;IACH,6CAAW,CAAA;AACb,CAAC,EAVW,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QAUnB;AAED,yEAAyE;AACzE,YAAY;AACZ,yEAAyE;AAEzE;;;;GAIG;AACH,SAAgB,cAAc,CAAC,IAAY,EAAE,GAAW;IACtD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAA;IACvB,sBAAY,CAAC,SAAS,EAAE,EAAC,IAAI,EAAC,EAAE,GAAG,CAAC,CAAA;AACtC,CAAC;AAHD,wCAGC;AAED;;;;GAIG;AACH,SAAgB,YAAY,CAAC,IAAY,EAAE,GAAW;IACpD,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAEzB,6CAA6C;IAC7C,qDAAqD;IACrD,sBAAY,CAAC,YAAY,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;IACnC,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAA;AACrC,CAAC;AAPD,oCAOC;AAED;;;GAGG;AACH,SAAgB,OAAO,CAAC,SAAiB;IACvC,sBAAY,CAAC,UAAU,EAAE,EAAE,EAAE,SAAS,CAAC,CAAA;IACvC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,SAAS,GAAG,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAA;AAC7E,CAAC;AAHD,0BAGC;AAED;;;;;;GAMG;AACH,SAAgB,QAAQ,CAAC,IAAY,EAAE,OAAsB;IAC3D,MAAM,GAAG,GACP,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,EAAE,CAAA;IACpE,IAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,GAAG,EAAE;QACvC,MAAM,IAAI,KAAK,CAAC,oCAAoC,IAAI,EAAE,CAAC,CAAA;KAC5D;IAED,OAAO,GAAG,CAAC,IAAI,EAAE,CAAA;AACnB,CAAC;AARD,4BAQC;AAED;;;;;GAKG;AACH,SAAgB,SAAS,CAAC,IAAY,EAAE,KAAa;IACnD,sBAAY,CAAC,YAAY,EAAE,EAAC,IAAI,EAAC,EAAE,KAAK,CAAC,CAAA;AAC3C,CAAC;AAFD,8BAEC;AAED,yEAAyE;AACzE,UAAU;AACV,yEAAyE;AAEzE;;;;GAIG;AACH,SAAgB,SAAS,CAAC,OAAe;IACvC,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAA;IACnC,KAAK,CAAC,OAAO,CAAC,CAAA;AAChB,CAAC;AAHD,8BAGC;AAED,yEAAyE;AACzE,mBAAmB;AACnB,yEAAyE;AAEzE;;;GAGG;AACH,SAAgB,KAAK,CAAC,OAAe;IACnC,sBAAY,CAAC,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;AACpC,CAAC;AAFD,sBAEC;AAED;;;GAGG;AACH,SAAgB,KAAK,CAAC,OAAe;IACnC,eAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;AACzB,CAAC;AAFD,sBAEC;AAED;;;GAGG;AACH,SAAgB,OAAO,CAAC,OAAe;IACrC,eAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;AAC3B,CAAC;AAFD,0BAEC;AAED;;;;;;GAMG;AACH,SAAgB,UAAU,CAAC,IAAY;IACrC,eAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;AACtB,CAAC;AAFD,gCAEC;AAED;;GAEG;AACH,SAAgB,QAAQ;IACtB,eAAK,CAAC,UAAU,CAAC,CAAA;AACnB,CAAC;AAFD,4BAEC;AAED;;;;;;;GAOG;AACH,SAAsB,KAAK,CAAI,IAAY,EAAE,EAAoB;;QAC/D,UAAU,CAAC,IAAI,CAAC,CAAA;QAEhB,IAAI,MAAS,CAAA;QAEb,IAAI;YACF,MAAM,GAAG,MAAM,EAAE,EAAE,CAAA;SACpB;gBAAS;YACR,QAAQ,EAAE,CAAA;SACX;QAED,OAAO,MAAM,CAAA;IACf,CAAC;CAAA;AAZD,sBAYC"}
|
||||
{"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,uCAA6C;AAE7C,yBAAwB;AACxB,6BAA4B;AAU5B;;GAEG;AACH,IAAY,QAUX;AAVD,WAAY,QAAQ;IAClB;;OAEG;IACH,6CAAW,CAAA;IAEX;;OAEG;IACH,6CAAW,CAAA;AACb,CAAC,EAVW,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QAUnB;AAED,yEAAyE;AACzE,YAAY;AACZ,yEAAyE;AAEzE;;;;GAIG;AACH,SAAgB,cAAc,CAAC,IAAY,EAAE,GAAW;IACtD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAA;IACvB,sBAAY,CAAC,SAAS,EAAE,EAAC,IAAI,EAAC,EAAE,GAAG,CAAC,CAAA;AACtC,CAAC;AAHD,wCAGC;AAED;;;GAGG;AACH,SAAgB,SAAS,CAAC,MAAc;IACtC,sBAAY,CAAC,UAAU,EAAE,EAAE,EAAE,MAAM,CAAC,CAAA;AACtC,CAAC;AAFD,8BAEC;AAED;;;GAGG;AACH,SAAgB,OAAO,CAAC,SAAiB;IACvC,sBAAY,CAAC,UAAU,EAAE,EAAE,EAAE,SAAS,CAAC,CAAA;IACvC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,SAAS,GAAG,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAA;AAC7E,CAAC;AAHD,0BAGC;AAED;;;;;;GAMG;AACH,SAAgB,QAAQ,CAAC,IAAY,EAAE,OAAsB;IAC3D,MAAM,GAAG,GACP,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,EAAE,CAAA;IACrE,IAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,GAAG,EAAE;QACvC,MAAM,IAAI,KAAK,CAAC,oCAAoC,IAAI,EAAE,CAAC,CAAA;KAC5D;IAED,OAAO,GAAG,CAAC,IAAI,EAAE,CAAA;AACnB,CAAC;AARD,4BAQC;AAED;;;;;GAKG;AACH,SAAgB,SAAS,CAAC,IAAY,EAAE,KAAa;IACnD,sBAAY,CAAC,YAAY,EAAE,EAAC,IAAI,EAAC,EAAE,KAAK,CAAC,CAAA;AAC3C,CAAC;AAFD,8BAEC;AAED,yEAAyE;AACzE,UAAU;AACV,yEAAyE;AAEzE;;;;GAIG;AACH,SAAgB,SAAS,CAAC,OAAe;IACvC,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAA;IACnC,KAAK,CAAC,OAAO,CAAC,CAAA;AAChB,CAAC;AAHD,8BAGC;AAED,yEAAyE;AACzE,mBAAmB;AACnB,yEAAyE;AAEzE;;;GAGG;AACH,SAAgB,KAAK,CAAC,OAAe;IACnC,sBAAY,CAAC,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;AACpC,CAAC;AAFD,sBAEC;AAED;;;GAGG;AACH,SAAgB,KAAK,CAAC,OAAe;IACnC,eAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;AACzB,CAAC;AAFD,sBAEC;AAED;;;GAGG;AACH,SAAgB,OAAO,CAAC,OAAe;IACrC,eAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;AAC3B,CAAC;AAFD,0BAEC;AAED;;;GAGG;AACH,SAAgB,IAAI,CAAC,OAAe;IAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;AACxC,CAAC;AAFD,oBAEC;AAED;;;;;;GAMG;AACH,SAAgB,UAAU,CAAC,IAAY;IACrC,eAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;AACtB,CAAC;AAFD,gCAEC;AAED;;GAEG;AACH,SAAgB,QAAQ;IACtB,eAAK,CAAC,UAAU,CAAC,CAAA;AACnB,CAAC;AAFD,4BAEC;AAED;;;;;;;GAOG;AACH,SAAsB,KAAK,CAAI,IAAY,EAAE,EAAoB;;QAC/D,UAAU,CAAC,IAAI,CAAC,CAAA;QAEhB,IAAI,MAAS,CAAA;QAEb,IAAI;YACF,MAAM,GAAG,MAAM,EAAE,EAAE,CAAA;SACpB;gBAAS;YACR,QAAQ,EAAE,CAAA;SACX;QAED,OAAO,MAAM,CAAA;IACf,CAAC;CAAA;AAZD,sBAYC"}
|
24
node_modules/@actions/core/package.json
generated
vendored
24
node_modules/@actions/core/package.json
generated
vendored
@ -1,33 +1,33 @@
|
||||
{
|
||||
"_args": [
|
||||
[
|
||||
"@actions/core@1.1.0",
|
||||
"@actions/core@1.1.3",
|
||||
"E:\\python\\setup-php"
|
||||
]
|
||||
],
|
||||
"_from": "@actions/core@1.1.0",
|
||||
"_id": "@actions/core@1.1.0",
|
||||
"_from": "@actions/core@1.1.3",
|
||||
"_id": "@actions/core@1.1.3",
|
||||
"_inBundle": false,
|
||||
"_integrity": "sha512-KKpo3xzo0Zsikni9tbOsEQkxZBGDsYSJZNkTvmo0gPSXrc98TBOcdTvKwwjitjkjHkreTggWdB1ACiAFVgsuzA==",
|
||||
"_integrity": "sha512-2BIib53Jh4Cfm+1XNuZYYGTeRo8yiWEAUMoliMh1qQGMaqTF4VUlhhcsBylTu4qWmUx45DrY0y0XskimAHSqhw==",
|
||||
"_location": "/@actions/core",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"type": "version",
|
||||
"registry": true,
|
||||
"raw": "@actions/core@1.1.0",
|
||||
"raw": "@actions/core@1.1.3",
|
||||
"name": "@actions/core",
|
||||
"escapedName": "@actions%2fcore",
|
||||
"scope": "@actions",
|
||||
"rawSpec": "1.1.0",
|
||||
"rawSpec": "1.1.3",
|
||||
"saveSpec": null,
|
||||
"fetchSpec": "1.1.0"
|
||||
"fetchSpec": "1.1.3"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/",
|
||||
"/@actions/tool-cache"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/@actions/core/-/core-1.1.0.tgz",
|
||||
"_spec": "1.1.0",
|
||||
"_resolved": "https://registry.npmjs.org/@actions/core/-/core-1.1.3.tgz",
|
||||
"_spec": "1.1.3",
|
||||
"_where": "E:\\python\\setup-php",
|
||||
"bugs": {
|
||||
"url": "https://github.com/actions/toolkit/issues"
|
||||
@ -43,7 +43,6 @@
|
||||
"files": [
|
||||
"lib"
|
||||
],
|
||||
"gitHead": "a2ab4bcf78e4f7080f0d45856e6eeba16f0bbc52",
|
||||
"homepage": "https://github.com/actions/toolkit/tree/master/packages/core",
|
||||
"keywords": [
|
||||
"github",
|
||||
@ -58,11 +57,12 @@
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/actions/toolkit.git"
|
||||
"url": "git+https://github.com/actions/toolkit.git",
|
||||
"directory": "packages/core"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "echo \"Error: run tests from root\" && exit 1",
|
||||
"tsc": "tsc"
|
||||
},
|
||||
"version": "1.1.0"
|
||||
"version": "1.1.3"
|
||||
}
|
||||
|
7
node_modules/@actions/tool-cache/LICENSE.md
generated
vendored
7
node_modules/@actions/tool-cache/LICENSE.md
generated
vendored
@ -1,7 +0,0 @@
|
||||
Copyright 2019 GitHub
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
10
node_modules/@actions/tool-cache/README.md
generated
vendored
10
node_modules/@actions/tool-cache/README.md
generated
vendored
@ -11,7 +11,7 @@ You can use this to download tools (or other files) from a download URL:
|
||||
```js
|
||||
const tc = require('@actions/tool-cache');
|
||||
|
||||
const node12Path = await tc.downloadTool('http://nodejs.org/dist/v12.7.0/node-v12.7.0-linux-x64.tar.gz');
|
||||
const node12Path = await tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0-linux-x64.tar.gz');
|
||||
```
|
||||
|
||||
#### Extract
|
||||
@ -22,15 +22,15 @@ These can then be extracted in platform specific ways:
|
||||
const tc = require('@actions/tool-cache');
|
||||
|
||||
if (process.platform === 'win32') {
|
||||
const node12Path = tc.downloadTool('http://nodejs.org/dist/v12.7.0/node-v12.7.0-win-x64.zip');
|
||||
const node12Path = tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0-win-x64.zip');
|
||||
const node12ExtractedFolder = await tc.extractZip(node12Path, 'path/to/extract/to');
|
||||
|
||||
// Or alternately
|
||||
const node12Path = tc.downloadTool('http://nodejs.org/dist/v12.7.0/node-v12.7.0-win-x64.7z');
|
||||
const node12Path = tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0-win-x64.7z');
|
||||
const node12ExtractedFolder = await tc.extract7z(node12Path, 'path/to/extract/to');
|
||||
}
|
||||
else {
|
||||
const node12Path = await tc.downloadTool('http://nodejs.org/dist/v12.7.0/node-v12.7.0-linux-x64.tar.gz');
|
||||
const node12Path = await tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0-linux-x64.tar.gz');
|
||||
const node12ExtractedFolder = await tc.extractTar(node12Path, 'path/to/extract/to');
|
||||
}
|
||||
```
|
||||
@ -45,7 +45,7 @@ You'll often want to add it to the path as part of this step:
|
||||
const tc = require('@actions/tool-cache');
|
||||
const core = require('@actions/core');
|
||||
|
||||
const node12Path = await tc.downloadTool('http://nodejs.org/dist/v12.7.0/node-v12.7.0-linux-x64.tar.gz');
|
||||
const node12Path = await tc.downloadTool('https://nodejs.org/dist/v12.7.0/node-v12.7.0-linux-x64.tar.gz');
|
||||
const node12ExtractedFolder = await tc.extractTar(node12Path, 'path/to/extract/to');
|
||||
|
||||
const cachedPath = await tc.cacheDir(node12ExtractedFolder, 'node', '12.7.0');
|
||||
|
15
node_modules/@actions/tool-cache/lib/tool-cache.js
generated
vendored
15
node_modules/@actions/tool-cache/lib/tool-cache.js
generated
vendored
@ -218,12 +218,7 @@ function extractZip(file, dest) {
|
||||
yield extractZipWin(file, dest);
|
||||
}
|
||||
else {
|
||||
if (process.platform === 'darwin') {
|
||||
yield extractZipDarwin(file, dest);
|
||||
}
|
||||
else {
|
||||
yield extractZipNix(file, dest);
|
||||
}
|
||||
yield extractZipNix(file, dest);
|
||||
}
|
||||
return dest;
|
||||
});
|
||||
@ -252,13 +247,7 @@ function extractZipWin(file, dest) {
|
||||
}
|
||||
function extractZipNix(file, dest) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
const unzipPath = path.join(__dirname, '..', 'scripts', 'externals', 'unzip');
|
||||
yield exec_1.exec(`"${unzipPath}"`, [file], { cwd: dest });
|
||||
});
|
||||
}
|
||||
function extractZipDarwin(file, dest) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
const unzipPath = path.join(__dirname, '..', 'scripts', 'externals', 'unzip-darwin');
|
||||
const unzipPath = yield io.which('unzip');
|
||||
yield exec_1.exec(`"${unzipPath}"`, [file], { cwd: dest });
|
||||
});
|
||||
}
|
||||
|
2
node_modules/@actions/tool-cache/lib/tool-cache.js.map
generated
vendored
2
node_modules/@actions/tool-cache/lib/tool-cache.js.map
generated
vendored
File diff suppressed because one or more lines are too long
21
node_modules/@actions/tool-cache/package.json
generated
vendored
21
node_modules/@actions/tool-cache/package.json
generated
vendored
@ -1,32 +1,32 @@
|
||||
{
|
||||
"_args": [
|
||||
[
|
||||
"@actions/tool-cache@1.1.1",
|
||||
"@actions/tool-cache@1.1.2",
|
||||
"E:\\python\\setup-php"
|
||||
]
|
||||
],
|
||||
"_from": "@actions/tool-cache@1.1.1",
|
||||
"_id": "@actions/tool-cache@1.1.1",
|
||||
"_from": "@actions/tool-cache@1.1.2",
|
||||
"_id": "@actions/tool-cache@1.1.2",
|
||||
"_inBundle": false,
|
||||
"_integrity": "sha512-AILekrrj/L4N/5z5TGtUKVie4nKjxDioCgOEymyYxzPhGfjIxfE71tN2VTTpiICEWJ883rPRj2+WinTr1b6yVA==",
|
||||
"_integrity": "sha512-IJczPaZr02ECa3Lgws/TJEVco9tjOujiQSZbO3dHuXXjhd5vrUtfOgGwhmz3/f97L910OraPZ8SknofUk6RvOQ==",
|
||||
"_location": "/@actions/tool-cache",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"type": "version",
|
||||
"registry": true,
|
||||
"raw": "@actions/tool-cache@1.1.1",
|
||||
"raw": "@actions/tool-cache@1.1.2",
|
||||
"name": "@actions/tool-cache",
|
||||
"escapedName": "@actions%2ftool-cache",
|
||||
"scope": "@actions",
|
||||
"rawSpec": "1.1.1",
|
||||
"rawSpec": "1.1.2",
|
||||
"saveSpec": null,
|
||||
"fetchSpec": "1.1.1"
|
||||
"fetchSpec": "1.1.2"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/@actions/tool-cache/-/tool-cache-1.1.1.tgz",
|
||||
"_spec": "1.1.1",
|
||||
"_resolved": "https://registry.npmjs.org/@actions/tool-cache/-/tool-cache-1.1.2.tgz",
|
||||
"_spec": "1.1.2",
|
||||
"_where": "E:\\python\\setup-php",
|
||||
"bugs": {
|
||||
"url": "https://github.com/actions/toolkit/issues"
|
||||
@ -54,7 +54,6 @@
|
||||
"lib",
|
||||
"scripts"
|
||||
],
|
||||
"gitHead": "a2ab4bcf78e4f7080f0d45856e6eeba16f0bbc52",
|
||||
"homepage": "https://github.com/actions/toolkit/tree/master/packages/exec",
|
||||
"keywords": [
|
||||
"github",
|
||||
@ -75,5 +74,5 @@
|
||||
"test": "echo \"Error: run tests from root\" && exit 1",
|
||||
"tsc": "tsc"
|
||||
},
|
||||
"version": "1.1.1"
|
||||
"version": "1.1.2"
|
||||
}
|
||||
|
BIN
node_modules/@actions/tool-cache/scripts/externals/unzip
generated
vendored
BIN
node_modules/@actions/tool-cache/scripts/externals/unzip
generated
vendored
Binary file not shown.
BIN
node_modules/@actions/tool-cache/scripts/externals/unzip-darwin
generated
vendored
BIN
node_modules/@actions/tool-cache/scripts/externals/unzip-darwin
generated
vendored
Binary file not shown.
1
node_modules/typed-rest-client/package.json
generated
vendored
1
node_modules/typed-rest-client/package.json
generated
vendored
@ -22,7 +22,6 @@
|
||||
"fetchSpec": "1.5.0"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/",
|
||||
"/@actions/tool-cache"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.5.0.tgz",
|
||||
|
230
package-lock.json
generated
230
package-lock.json
generated
@ -1,13 +1,13 @@
|
||||
{
|
||||
"name": "setup-php",
|
||||
"version": "1.3.4",
|
||||
"version": "1.4.3",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
"@actions/core": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@actions/core/-/core-1.1.0.tgz",
|
||||
"integrity": "sha512-KKpo3xzo0Zsikni9tbOsEQkxZBGDsYSJZNkTvmo0gPSXrc98TBOcdTvKwwjitjkjHkreTggWdB1ACiAFVgsuzA=="
|
||||
"version": "1.1.3",
|
||||
"resolved": "https://registry.npmjs.org/@actions/core/-/core-1.1.3.tgz",
|
||||
"integrity": "sha512-2BIib53Jh4Cfm+1XNuZYYGTeRo8yiWEAUMoliMh1qQGMaqTF4VUlhhcsBylTu4qWmUx45DrY0y0XskimAHSqhw=="
|
||||
},
|
||||
"@actions/exec": {
|
||||
"version": "1.0.1",
|
||||
@ -20,9 +20,9 @@
|
||||
"integrity": "sha512-rhq+tfZukbtaus7xyUtwKfuiCRXd1hWSfmJNEpFgBQJ4woqPEpsBw04awicjwz9tyG2/MVhAEMfVn664Cri5zA=="
|
||||
},
|
||||
"@actions/tool-cache": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/@actions/tool-cache/-/tool-cache-1.1.1.tgz",
|
||||
"integrity": "sha512-AILekrrj/L4N/5z5TGtUKVie4nKjxDioCgOEymyYxzPhGfjIxfE71tN2VTTpiICEWJ883rPRj2+WinTr1b6yVA==",
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@actions/tool-cache/-/tool-cache-1.1.2.tgz",
|
||||
"integrity": "sha512-IJczPaZr02ECa3Lgws/TJEVco9tjOujiQSZbO3dHuXXjhd5vrUtfOgGwhmz3/f97L910OraPZ8SknofUk6RvOQ==",
|
||||
"requires": {
|
||||
"@actions/core": "^1.1.0",
|
||||
"@actions/exec": "^1.0.1",
|
||||
@ -42,18 +42,18 @@
|
||||
}
|
||||
},
|
||||
"@babel/core": {
|
||||
"version": "7.5.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.5.5.tgz",
|
||||
"integrity": "sha512-i4qoSr2KTtce0DmkuuQBV4AuQgGPUcPXMr9L5MyYAtk06z068lQ10a4O009fe5OB/DfNV+h+qqT7ddNV8UnRjg==",
|
||||
"version": "7.6.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.6.4.tgz",
|
||||
"integrity": "sha512-Rm0HGw101GY8FTzpWSyRbki/jzq+/PkNQJ+nSulrdY6gFGOsNseCqD6KHRYe2E+EdzuBdr2pxCp6s4Uk6eJ+XQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@babel/code-frame": "^7.5.5",
|
||||
"@babel/generator": "^7.5.5",
|
||||
"@babel/helpers": "^7.5.5",
|
||||
"@babel/parser": "^7.5.5",
|
||||
"@babel/template": "^7.4.4",
|
||||
"@babel/traverse": "^7.5.5",
|
||||
"@babel/types": "^7.5.5",
|
||||
"@babel/generator": "^7.6.4",
|
||||
"@babel/helpers": "^7.6.2",
|
||||
"@babel/parser": "^7.6.4",
|
||||
"@babel/template": "^7.6.0",
|
||||
"@babel/traverse": "^7.6.3",
|
||||
"@babel/types": "^7.6.3",
|
||||
"convert-source-map": "^1.1.0",
|
||||
"debug": "^4.1.0",
|
||||
"json5": "^2.1.0",
|
||||
@ -93,16 +93,15 @@
|
||||
}
|
||||
},
|
||||
"@babel/generator": {
|
||||
"version": "7.5.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.5.5.tgz",
|
||||
"integrity": "sha512-ETI/4vyTSxTzGnU2c49XHv2zhExkv9JHLTwDAFz85kmcwuShvYG2H08FwgIguQf4JC75CBnXAUM5PqeF4fj0nQ==",
|
||||
"version": "7.6.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.6.4.tgz",
|
||||
"integrity": "sha512-jsBuXkFoZxk0yWLyGI9llT9oiQ2FeTASmRFE32U+aaDTfoE92t78eroO7PTpU/OrYq38hlcDM6vbfLDaOLy+7w==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@babel/types": "^7.5.5",
|
||||
"@babel/types": "^7.6.3",
|
||||
"jsesc": "^2.5.1",
|
||||
"lodash": "^4.17.13",
|
||||
"source-map": "^0.5.0",
|
||||
"trim-right": "^1.0.1"
|
||||
"source-map": "^0.5.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"source-map": {
|
||||
@ -149,14 +148,14 @@
|
||||
}
|
||||
},
|
||||
"@babel/helpers": {
|
||||
"version": "7.5.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.5.5.tgz",
|
||||
"integrity": "sha512-nRq2BUhxZFnfEn/ciJuhklHvFOqjJUD5wpx+1bxUF2axL9C+v4DE/dmp5sT2dKnpOs4orZWzpAZqlCy8QqE/7g==",
|
||||
"version": "7.6.2",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.6.2.tgz",
|
||||
"integrity": "sha512-3/bAUL8zZxYs1cdX2ilEE0WobqbCmKWr/889lf2SS0PpDcpEIY8pb1CCyz0pEcX3pEb+MCbks1jIokz2xLtGTA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@babel/template": "^7.4.4",
|
||||
"@babel/traverse": "^7.5.5",
|
||||
"@babel/types": "^7.5.5"
|
||||
"@babel/template": "^7.6.0",
|
||||
"@babel/traverse": "^7.6.2",
|
||||
"@babel/types": "^7.6.0"
|
||||
}
|
||||
},
|
||||
"@babel/highlight": {
|
||||
@ -171,9 +170,9 @@
|
||||
}
|
||||
},
|
||||
"@babel/parser": {
|
||||
"version": "7.5.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.5.5.tgz",
|
||||
"integrity": "sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g==",
|
||||
"version": "7.6.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.6.4.tgz",
|
||||
"integrity": "sha512-D8RHPW5qd0Vbyo3qb+YjO5nvUVRTXFLQ/FsDxJU2Nqz4uB5EnUN0ZQSEYpvTIbRuttig1XbHWU5oMeQwQSAA+A==",
|
||||
"dev": true
|
||||
},
|
||||
"@babel/plugin-syntax-object-rest-spread": {
|
||||
@ -186,28 +185,28 @@
|
||||
}
|
||||
},
|
||||
"@babel/template": {
|
||||
"version": "7.4.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz",
|
||||
"integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==",
|
||||
"version": "7.6.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.6.0.tgz",
|
||||
"integrity": "sha512-5AEH2EXD8euCk446b7edmgFdub/qfH1SN6Nii3+fyXP807QRx9Q73A2N5hNwRRslC2H9sNzaFhsPubkS4L8oNQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@babel/code-frame": "^7.0.0",
|
||||
"@babel/parser": "^7.4.4",
|
||||
"@babel/types": "^7.4.4"
|
||||
"@babel/parser": "^7.6.0",
|
||||
"@babel/types": "^7.6.0"
|
||||
}
|
||||
},
|
||||
"@babel/traverse": {
|
||||
"version": "7.5.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.5.5.tgz",
|
||||
"integrity": "sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ==",
|
||||
"version": "7.6.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.6.3.tgz",
|
||||
"integrity": "sha512-unn7P4LGsijIxaAJo/wpoU11zN+2IaClkQAxcJWBNCMS6cmVh802IyLHNkAjQ0iYnRS3nnxk5O3fuXW28IMxTw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@babel/code-frame": "^7.5.5",
|
||||
"@babel/generator": "^7.5.5",
|
||||
"@babel/generator": "^7.6.3",
|
||||
"@babel/helper-function-name": "^7.1.0",
|
||||
"@babel/helper-split-export-declaration": "^7.4.4",
|
||||
"@babel/parser": "^7.5.5",
|
||||
"@babel/types": "^7.5.5",
|
||||
"@babel/parser": "^7.6.3",
|
||||
"@babel/types": "^7.6.3",
|
||||
"debug": "^4.1.0",
|
||||
"globals": "^11.1.0",
|
||||
"lodash": "^4.17.13"
|
||||
@ -231,9 +230,9 @@
|
||||
}
|
||||
},
|
||||
"@babel/types": {
|
||||
"version": "7.5.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.5.tgz",
|
||||
"integrity": "sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==",
|
||||
"version": "7.6.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.6.3.tgz",
|
||||
"integrity": "sha512-CqbcpTxMcpuQTMhjI37ZHVgjBkysg5icREQIEZ0eG1yCNwg3oy+5AaLiOKmjsCj6nqOsa6Hf0ObjRVwokb7srA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"esutils": "^2.0.2",
|
||||
@ -473,9 +472,9 @@
|
||||
}
|
||||
},
|
||||
"@types/babel__generator": {
|
||||
"version": "7.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.0.2.tgz",
|
||||
"integrity": "sha512-NHcOfab3Zw4q5sEE2COkpfXjoE7o+PmqD9DQW4koUT3roNxwziUdXGnRndMat/LJNUtePwn1TlP4do3uoe3KZQ==",
|
||||
"version": "7.6.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.0.tgz",
|
||||
"integrity": "sha512-c1mZUu4up5cp9KROs/QAw0gTeHrw/x7m52LcnvMxxOZ03DmLwPV0MlGmlgzV3cnSdjhJOZsj7E7FHeioai+egw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@babel/types": "^7.0.0"
|
||||
@ -526,9 +525,9 @@
|
||||
}
|
||||
},
|
||||
"@types/jest": {
|
||||
"version": "24.0.18",
|
||||
"resolved": "https://registry.npmjs.org/@types/jest/-/jest-24.0.18.tgz",
|
||||
"integrity": "sha512-jcDDXdjTcrQzdN06+TSVsPPqxvsZA/5QkYfIZlq1JMw7FdP5AZylbOc+6B/cuDurctRe+MziUMtQ3xQdrbjqyQ==",
|
||||
"version": "24.0.19",
|
||||
"resolved": "https://registry.npmjs.org/@types/jest/-/jest-24.0.19.tgz",
|
||||
"integrity": "sha512-YYiqfSjocv7lk5H/T+v5MjATYjaTMsUkbDnjGqSMoO88jWdtJXJV4ST/7DKZcoMHMBvB2SeSfyOzZfkxXHR5xg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/jest-diff": "*"
|
||||
@ -541,9 +540,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"@types/node": {
|
||||
"version": "12.7.4",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.4.tgz",
|
||||
"integrity": "sha512-W0+n1Y+gK/8G2P/piTkBBN38Qc5Q1ZSO6B5H3QmPCUewaiXOo2GCAWZ4ElZCcNhjJuBSUSLGFUJnmlCn5+nxOQ==",
|
||||
"version": "12.11.1",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-12.11.1.tgz",
|
||||
"integrity": "sha512-TJtwsqZ39pqcljJpajeoofYRfeZ7/I/OMUQ5pR4q5wOKf2ocrUvBAZUMhWsOvKx3dVc/aaV5GluBivt0sWqA5A==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/normalize-package-data": {
|
||||
@ -559,24 +558,24 @@
|
||||
"dev": true
|
||||
},
|
||||
"@types/yargs": {
|
||||
"version": "13.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.2.tgz",
|
||||
"integrity": "sha512-lwwgizwk/bIIU+3ELORkyuOgDjCh7zuWDFqRtPPhhVgq9N1F7CvLNKg1TX4f2duwtKQ0p044Au9r1PLIXHrIzQ==",
|
||||
"version": "13.0.3",
|
||||
"resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.3.tgz",
|
||||
"integrity": "sha512-K8/LfZq2duW33XW/tFwEAfnZlqIfVsoyRB3kfXdPXYhl0nfM8mmh7GS0jg7WrX2Dgq/0Ha/pR1PaR+BvmWwjiQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/yargs-parser": "*"
|
||||
}
|
||||
},
|
||||
"@types/yargs-parser": {
|
||||
"version": "13.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-13.0.0.tgz",
|
||||
"integrity": "sha512-wBlsw+8n21e6eTd4yVv8YD/E3xq0O6nNnJIquutAsFGE7EyMKz7W6RNT6BRu1SmdgmlCZ9tb0X+j+D6HGr8pZw==",
|
||||
"version": "13.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-13.1.0.tgz",
|
||||
"integrity": "sha512-gCubfBUZ6KxzoibJ+SCUc/57Ms1jz5NjHe4+dI2krNmU5zCPAphyLJYyTOg06ueIyfj+SaCUqmzun7ImlxDcKg==",
|
||||
"dev": true
|
||||
},
|
||||
"abab": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/abab/-/abab-2.0.1.tgz",
|
||||
"integrity": "sha512-1zSbbCuoIjafKZ3mblY5ikvAb0ODUbqBnFuUb7f6uLeQhhGJ0vEV4ntmtxKLT2WgXCO94E07BjunsIw1jOMPZw==",
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/abab/-/abab-2.0.2.tgz",
|
||||
"integrity": "sha512-2scffjvioEmNz0OyDSLGWDfKCVwaKc6l9Pm9kOIREU13ClXZvHpg/nRL5xyjSSSLhOnXqft2HpsAzNEEA8cFFg==",
|
||||
"dev": true
|
||||
},
|
||||
"acorn": {
|
||||
@ -586,9 +585,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"acorn-globals": {
|
||||
"version": "4.3.3",
|
||||
"resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.3.tgz",
|
||||
"integrity": "sha512-vkR40VwS2SYO98AIeFvzWWh+xyc2qi9s7OoXSFEGIP/rOJKzjnhykaZJNnHdoq4BL2gGxI5EZOU16z896EYnOQ==",
|
||||
"version": "4.3.4",
|
||||
"resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz",
|
||||
"integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"acorn": "^6.0.1",
|
||||
@ -1353,9 +1352,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"end-of-stream": {
|
||||
"version": "1.4.1",
|
||||
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
|
||||
"integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
|
||||
"version": "1.4.4",
|
||||
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
|
||||
"integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"once": "^1.4.0"
|
||||
@ -1371,9 +1370,9 @@
|
||||
}
|
||||
},
|
||||
"es-abstract": {
|
||||
"version": "1.14.1",
|
||||
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.14.1.tgz",
|
||||
"integrity": "sha512-cp/Tb1oA/rh2X7vqeSOvM+TSo3UkJLX70eNihgVEvnzwAgikjkTFr/QVgRCaxjm0knCNQzNoxxxcw2zO2LJdZA==",
|
||||
"version": "1.15.0",
|
||||
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.15.0.tgz",
|
||||
"integrity": "sha512-bhkEqWJ2t2lMeaJDuk7okMkJWI/yqgH/EoGwpcvv0XW9RWQsRspI4wt6xuyuvMvvQE3gg/D9HXppgk21w78GyQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"es-to-primitive": "^1.2.0",
|
||||
@ -1384,8 +1383,8 @@
|
||||
"is-regex": "^1.0.4",
|
||||
"object-inspect": "^1.6.0",
|
||||
"object-keys": "^1.1.1",
|
||||
"string.prototype.trimleft": "^2.0.0",
|
||||
"string.prototype.trimright": "^2.0.0"
|
||||
"string.prototype.trimleft": "^2.1.0",
|
||||
"string.prototype.trimright": "^2.1.0"
|
||||
}
|
||||
},
|
||||
"es-to-primitive": {
|
||||
@ -2343,9 +2342,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"handlebars": {
|
||||
"version": "4.2.0",
|
||||
"resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.2.0.tgz",
|
||||
"integrity": "sha512-Kb4xn5Qh1cxAKvQnzNWZ512DhABzyFNmsaJf3OAkWNa4NkaqWcNI8Tao8Tasi0/F4JD9oyG0YxuFyvyR57d+Gw==",
|
||||
"version": "4.4.3",
|
||||
"resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.4.3.tgz",
|
||||
"integrity": "sha512-B0W4A2U1ww3q7VVthTKfh+epHx+q4mCt6iK+zEAzbMBpWQAwxCeKxEGpj/1oQTpzPXDNSOG7hmG14TsISH50yw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"neo-async": "^2.6.0",
|
||||
@ -2424,9 +2423,9 @@
|
||||
}
|
||||
},
|
||||
"hosted-git-info": {
|
||||
"version": "2.8.4",
|
||||
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.4.tgz",
|
||||
"integrity": "sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ==",
|
||||
"version": "2.8.5",
|
||||
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz",
|
||||
"integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==",
|
||||
"dev": true
|
||||
},
|
||||
"html-encoding-sniffer": {
|
||||
@ -3390,9 +3389,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"json5": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz",
|
||||
"integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==",
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz",
|
||||
"integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"minimist": "^1.2.0"
|
||||
@ -3478,6 +3477,12 @@
|
||||
"integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
|
||||
"dev": true
|
||||
},
|
||||
"lodash.memoize": {
|
||||
"version": "4.1.2",
|
||||
"resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
|
||||
"integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
|
||||
"dev": true
|
||||
},
|
||||
"lodash.sortby": {
|
||||
"version": "4.7.0",
|
||||
"resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
|
||||
@ -4117,9 +4122,9 @@
|
||||
}
|
||||
},
|
||||
"psl": {
|
||||
"version": "1.3.1",
|
||||
"resolved": "https://registry.npmjs.org/psl/-/psl-1.3.1.tgz",
|
||||
"integrity": "sha512-2KLd5fKOdAfShtY2d/8XDWVRnmp3zp40Qt6ge2zBPFARLXOGUf2fHD5eg+TV/5oxBtQKVhjUaKFsAaE4HnwfSA==",
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/psl/-/psl-1.4.0.tgz",
|
||||
"integrity": "sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw==",
|
||||
"dev": true
|
||||
},
|
||||
"pump": {
|
||||
@ -4145,9 +4150,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"react-is": {
|
||||
"version": "16.9.0",
|
||||
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.9.0.tgz",
|
||||
"integrity": "sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw==",
|
||||
"version": "16.10.2",
|
||||
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.10.2.tgz",
|
||||
"integrity": "sha512-INBT1QEgtcCCgvccr5/86CfD71fw9EPmDxgiJX4I2Ddr6ZsV6iFXsuby+qWJPtmNuMY0zByTsG4468P7nHuNWA==",
|
||||
"dev": true
|
||||
},
|
||||
"read-pkg": {
|
||||
@ -4778,23 +4783,23 @@
|
||||
}
|
||||
},
|
||||
"string.prototype.trimleft": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.0.0.tgz",
|
||||
"integrity": "sha1-aLaqjhYsaoDnbjqKDC50cYbicf8=",
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz",
|
||||
"integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"define-properties": "^1.1.2",
|
||||
"function-bind": "^1.0.2"
|
||||
"define-properties": "^1.1.3",
|
||||
"function-bind": "^1.1.1"
|
||||
}
|
||||
},
|
||||
"string.prototype.trimright": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.0.0.tgz",
|
||||
"integrity": "sha1-q0pW2AKgH75yk+EehPJNyBZGYd0=",
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz",
|
||||
"integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"define-properties": "^1.1.2",
|
||||
"function-bind": "^1.0.2"
|
||||
"define-properties": "^1.1.3",
|
||||
"function-bind": "^1.1.1"
|
||||
}
|
||||
},
|
||||
"strip-ansi": {
|
||||
@ -4924,22 +4929,17 @@
|
||||
"punycode": "^2.1.0"
|
||||
}
|
||||
},
|
||||
"trim-right": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
|
||||
"integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
|
||||
"dev": true
|
||||
},
|
||||
"ts-jest": {
|
||||
"version": "24.0.2",
|
||||
"resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-24.0.2.tgz",
|
||||
"integrity": "sha512-h6ZCZiA1EQgjczxq+uGLXQlNgeg02WWJBbeT8j6nyIBRQdglqbvzDoHahTEIiS6Eor6x8mK6PfZ7brQ9Q6tzHw==",
|
||||
"version": "24.1.0",
|
||||
"resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-24.1.0.tgz",
|
||||
"integrity": "sha512-HEGfrIEAZKfu1pkaxB9au17b1d9b56YZSqz5eCVE8mX68+5reOvlM93xGOzzCREIov9mdH7JBG+s0UyNAqr0tQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"bs-logger": "0.x",
|
||||
"buffer-from": "1.x",
|
||||
"fast-json-stable-stringify": "2.x",
|
||||
"json5": "2.x",
|
||||
"lodash.memoize": "4.x",
|
||||
"make-error": "1.x",
|
||||
"mkdirp": "0.x",
|
||||
"resolve": "1.x",
|
||||
@ -5015,19 +5015,19 @@
|
||||
}
|
||||
},
|
||||
"typescript": {
|
||||
"version": "3.6.2",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.6.2.tgz",
|
||||
"integrity": "sha512-lmQ4L+J6mnu3xweP8+rOrUwzmN+MRAj7TgtJtDaXE5PMyX2kCrklhg3rvOsOIfNeAWMQWO2F1GPc1kMD2vLAfw==",
|
||||
"version": "3.6.4",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.6.4.tgz",
|
||||
"integrity": "sha512-unoCll1+l+YK4i4F8f22TaNVPRHcD9PA3yCuZ8g5e0qGqlVlJ/8FSateOLLSagn+Yg5+ZwuPkL8LFUc0Jcvksg==",
|
||||
"dev": true
|
||||
},
|
||||
"uglify-js": {
|
||||
"version": "3.6.0",
|
||||
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz",
|
||||
"integrity": "sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==",
|
||||
"version": "3.6.2",
|
||||
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.2.tgz",
|
||||
"integrity": "sha512-+gh/xFte41GPrgSMJ/oJVq15zYmqr74pY9VoM69UzMzq9NFk4YDylclb1/bhEzZSaUQjbW5RvniHeq1cdtRYjw==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"commander": "~2.20.0",
|
||||
"commander": "2.20.0",
|
||||
"source-map": "~0.6.1"
|
||||
}
|
||||
},
|
||||
|
13
package.json
13
package.json
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "setup-php",
|
||||
"version": "1.3.4",
|
||||
"version": "1.4.3",
|
||||
"private": false,
|
||||
"description": "Setup php action",
|
||||
"main": "lib/setup-php.js",
|
||||
@ -24,17 +24,16 @@
|
||||
"dependencies": {
|
||||
"@actions/core": "^1.0.0",
|
||||
"@actions/tool-cache": "^1.0.0",
|
||||
"fs": "0.0.1-security",
|
||||
"typed-rest-client": "^1.5.0"
|
||||
"fs": "0.0.1-security"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/jest": "^24.0.13",
|
||||
"@types/jest": "^24.0.18",
|
||||
"@types/node": "^12.0.4",
|
||||
"husky": "^2.3.0",
|
||||
"jest": "^24.8.0",
|
||||
"jest-circus": "^24.7.1",
|
||||
"jest": "^24.9.0",
|
||||
"jest-circus": "^24.9.0",
|
||||
"prettier": "^1.17.1",
|
||||
"ts-jest": "^24.0.2",
|
||||
"ts-jest": "^24.1.0",
|
||||
"typescript": "^3.5.1"
|
||||
},
|
||||
"husky": {
|
||||
|
50
src/7.4.sh
50
src/7.4.sh
@ -1,50 +0,0 @@
|
||||
brew fetch autoconf& brew fetch automake& brew fetch pcre& brew fetch libtool& brew fetch libpng& brew fetch webp& brew fetch jpeg& brew fetch freetype& brew fetch libxml2& brew fetch pkg-config& brew fetch krb5& brew fetch icu4c& brew fetch re2c& brew fetch bison& brew fetch libzip& brew fetch mcrypt& brew fetch zlib& brew fetch bzip2& brew fetch enchant
|
||||
brew install autoconf automake pcre libtool libpng webp jpeg freetype libxml2 pkg-config krb5 icu4c re2c bison libzip mcrypt zlib bzip2 enchant > /dev/null 2>&1
|
||||
brew link --force gettext
|
||||
brew link --force bison
|
||||
brew link --force openssl
|
||||
brew link --force libxml2
|
||||
brew link --force bzip2
|
||||
echo 'export PATH="/usr/local/opt/bzip2/bin:$PATH"' >> ~/.bash_profile
|
||||
echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile
|
||||
echo 'export PATH="/usr/local/opt/krb5/bin:$PATH"' >> ~/.bash_profile
|
||||
echo 'export PATH="/usr/local/opt/krb5/sbin:$PATH"' >> ~/.bash_profile
|
||||
echo 'export PATH="/usr/local/opt/icu4c/bin:$PATH"' >> ~/.bash_profile
|
||||
echo 'export PATH="/usr/local/opt/icu4c/sbin:$PATH"' >> ~/.bash_profile
|
||||
echo 'export PATH="/usr/local/opt/bison/bin:$PATH"' >> ~/.bash_profile
|
||||
echo 'export PATH="/usr/local/opt/libxml2/bin:$PATH"' >> ~/.bash_profile
|
||||
echo 'export PATH="/Users/runner/.phpbrew/php/php-7.4.0RC1/bin:$PATH"' >> ~/.bash_profile
|
||||
source ~/.bash_profile > /dev/null 2>&1
|
||||
export LIBXML_LIBS="-L/usr/local/opt/libxml2/lib"
|
||||
export LIBXML_CFLAGS="-I/usr/local/opt/libxml2/include"
|
||||
export ENCHANT_LIBS="-L/usr/local/opt/enchant/lib"
|
||||
export ENCHANT_CFLAGS="-I/usr/local/opt/enchant/include"
|
||||
export FFI_LIBS="-L/usr/local/opt/libffi/lib"
|
||||
export FFI_CFLAGS="-I/usr/local/opt/libffi/include"
|
||||
export ICU_LIBS="-L/usr/local/opt/icu4c/lib"
|
||||
export ICU_CFLAGS="-I/usr/local/opt/icu4c/include"
|
||||
export KERBEROS_LIBS="-L/usr/local/opt/krb5/lib"
|
||||
export KERBEROS_CFLAGS="-I/usr/local/opt/krb5/include"
|
||||
export OPENSSL_LIBS="-L/usr/local/opt/openssl/lib"
|
||||
export OPENSSL_CFLAGS="-I/usr/local/opt/openssl/include"
|
||||
export READLINE_LIBS="-L/usr/local/opt/readline/lib"
|
||||
export READLINE_CFLAGS="-I/usr/local/opt/readline/include"
|
||||
export BZIP2_LIBS="-L/usr/local/opt/bzip2/lib"
|
||||
export BZIP2_CFLAGS="-I/usr/local/opt/bzip2/include"
|
||||
export PKG_CONFIG_PATH="/usr/local/opt/krb5/lib/pkgconfig:/usr/local/opt/icu4c/lib/pkgconfig:/usr/local/obzip2pt/libffi/lib/pkgconfig:/usr/local/opt/openssl@1.1/lib/pkgconfig:/usr/local/opt/readline/lib/pkgconfig:/usr/local/opt/libxml2/lib/pkgconfig:/usr/local/opt/krb5/lib/pkgconfig:/usr/local/opt/icu4c/lib/pkgconfig:/usr/local/opt/libffi/lib/pkgconfig:/usr/local/opt/libxml2/lib/pkgconfig"
|
||||
cd ~ || echo "could not move to ~"
|
||||
curl -L -O https://github.com/phpbrew/phpbrew/raw/master/phpbrew
|
||||
chmod +x ./phpbrew
|
||||
sudo mv phpbrew /usr/local/bin/phpbrew
|
||||
sudo mkdir -p /opt/phpbrew
|
||||
phpbrew init --root=/opt/phpbrew
|
||||
echo "[[ -e ~/.phpbrew/bashrc ]] && source ~/.phpbrew/bashrc" >> ~/.bashrc
|
||||
source ~/.bashrc
|
||||
phpbrew install -j 10 7.4.0RC2 +default +bz2="$(brew --prefix bzip2)" +zlib="$(brew --prefix zlib)" -openssl -- --with-libxml
|
||||
phpbrew switch php-7.4.0RC2 > /dev/null 2>&1
|
||||
sudo mkdir -p /usr/local/bin
|
||||
sudo ln -sf /Users/runner/.phpbrew/php/php-7.4.0RC2/bin/php /usr/local/bin/php
|
||||
ini_file=$(php --ini | grep "Loaded Configuration" | sed -e "s|.*:s*||" | sed "s/ //g")
|
||||
ext_dir=$(/usr/bin/php -i | grep "extension_dir => /usr" | sed -e "s|.*=> s*||")
|
||||
sudo chmod 777 "$ini_file"
|
||||
brew install composer
|
79
src/config.ts
Normal file
79
src/config.ts
Normal file
@ -0,0 +1,79 @@
|
||||
import * as utils from './utils';
|
||||
|
||||
/**
|
||||
* Function to add custom ini values
|
||||
*
|
||||
* @param ini_values_csv
|
||||
* @param os_version
|
||||
*/
|
||||
export async function addINIValues(
|
||||
ini_values_csv: string,
|
||||
os_version: string,
|
||||
no_step = false
|
||||
): Promise<string> {
|
||||
let script: string = '\n';
|
||||
switch (no_step) {
|
||||
case true:
|
||||
script +=
|
||||
(await utils.stepLog('Add php.ini values', os_version)) +
|
||||
(await utils.suppressOutput(os_version)) +
|
||||
'\n';
|
||||
break;
|
||||
case false:
|
||||
default:
|
||||
script += (await utils.stepLog('Add php.ini values', os_version)) + '\n';
|
||||
break;
|
||||
}
|
||||
switch (os_version) {
|
||||
case 'win32':
|
||||
return script + (await addINIValuesWindows(ini_values_csv));
|
||||
case 'darwin':
|
||||
case 'linux':
|
||||
return script + (await addINIValuesUnix(ini_values_csv));
|
||||
default:
|
||||
return await utils.log(
|
||||
'Platform ' + os_version + ' is not supported',
|
||||
os_version,
|
||||
'error'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add script to set custom ini values for unix
|
||||
*
|
||||
* @param ini_values_csv
|
||||
*/
|
||||
export async function addINIValuesUnix(
|
||||
ini_values_csv: string
|
||||
): Promise<string> {
|
||||
let ini_values: Array<string> = await utils.INIArray(ini_values_csv);
|
||||
let script: string = '\n';
|
||||
await utils.asyncForEach(ini_values, async function(line: string) {
|
||||
script +=
|
||||
(await utils.addLog('$tick', line, 'Added to php.ini', 'linux')) + '\n';
|
||||
});
|
||||
return 'echo "' + ini_values.join('\n') + '" >> $ini_file' + script;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add script to set custom ini values for windows
|
||||
*
|
||||
* @param ini_values_csv
|
||||
*/
|
||||
export async function addINIValuesWindows(
|
||||
ini_values_csv: string
|
||||
): Promise<string> {
|
||||
let ini_values: Array<string> = await utils.INIArray(ini_values_csv);
|
||||
let script: string = '\n';
|
||||
await utils.asyncForEach(ini_values, async function(line: string) {
|
||||
script +=
|
||||
(await utils.addLog('$tick', line, 'Added to php.ini', 'win32')) + '\n';
|
||||
});
|
||||
return (
|
||||
'Add-Content C:\\tools\\php\\php.ini "' +
|
||||
ini_values.join('\n') +
|
||||
'"' +
|
||||
script
|
||||
);
|
||||
}
|
58
src/configs/config.yaml
Normal file
58
src/configs/config.yaml
Normal file
@ -0,0 +1,58 @@
|
||||
variants:
|
||||
dev:
|
||||
bcmath:
|
||||
calendar:
|
||||
cli:
|
||||
ctype:
|
||||
dom:
|
||||
fileinfo:
|
||||
filter:
|
||||
ipc:
|
||||
iconv:
|
||||
json:
|
||||
mbregex:
|
||||
mbstring:
|
||||
mhash:
|
||||
mcrypt:
|
||||
pcntl:
|
||||
pcre:
|
||||
pdo:
|
||||
phar:
|
||||
posix:
|
||||
sockets:
|
||||
tokenizer:
|
||||
xml:
|
||||
curl:
|
||||
openssl:
|
||||
zip:
|
||||
gd:
|
||||
- --with-freetype
|
||||
- --with-pdo-mysql=mysqlnd
|
||||
- --with-mysqli=mysqlnd
|
||||
- --with-pgsql
|
||||
- --with-pdo-pgsql
|
||||
- --with-gmp=/usr/local/opt/gmp
|
||||
- --with-openssl
|
||||
- --with-pear
|
||||
- --with-zip
|
||||
- --with-libxml
|
||||
- --with-kerberos
|
||||
- --with-gd
|
||||
- --with-ffi
|
||||
- --with-curl
|
||||
- --with-mhash
|
||||
- --with-readline=/usr/local/opt/readline
|
||||
- --with-iconv=/usr/local/opt/libiconv
|
||||
- --with-icu-dir=/usr/local/opt/icu4c
|
||||
- --with-config-file-path=/etc
|
||||
- --enable-intl
|
||||
- --enable-xml
|
||||
- --enable-sysvsem
|
||||
- --enable-sysvshm
|
||||
- --enable-sysvmsg
|
||||
- --enable-phpdbg
|
||||
- --enable-exif
|
||||
- --enable-gd
|
||||
- --enable-soap
|
||||
- --enable-xmlreader
|
||||
- --enable-zend-test=shared
|
156
src/coverage.ts
Normal file
156
src/coverage.ts
Normal file
@ -0,0 +1,156 @@
|
||||
import * as utils from './utils';
|
||||
import * as extensions from './extensions';
|
||||
import * as config from './config';
|
||||
|
||||
/**
|
||||
* Function to set coverage driver
|
||||
*
|
||||
* @param coverage_driver
|
||||
* @param version
|
||||
* @param os_version
|
||||
*/
|
||||
export async function addCoverage(
|
||||
coverage_driver: string,
|
||||
version: string,
|
||||
os_version: string
|
||||
): Promise<string> {
|
||||
coverage_driver.toLowerCase();
|
||||
let script: string =
|
||||
'\n' + (await utils.stepLog('Setup Coverage', os_version));
|
||||
switch (coverage_driver) {
|
||||
case 'pcov':
|
||||
return script + (await addCoveragePCOV(version, os_version));
|
||||
case 'xdebug':
|
||||
return script + (await addCoverageXdebug(version, os_version));
|
||||
case 'none':
|
||||
return script + (await disableCoverage(version, os_version));
|
||||
default:
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to setup Xdebug
|
||||
*
|
||||
* @param version
|
||||
* @param os_version
|
||||
*/
|
||||
export async function addCoverageXdebug(version: string, os_version: string) {
|
||||
return (
|
||||
(await extensions.addExtension('xdebug', version, os_version, true)) +
|
||||
(await utils.suppressOutput(os_version)) +
|
||||
'\n' +
|
||||
(await utils.addLog(
|
||||
'$tick',
|
||||
'xdebug',
|
||||
'Xdebug enabled as coverage driver',
|
||||
os_version
|
||||
))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to setup PCOV
|
||||
*
|
||||
* @param version
|
||||
* @param os_version
|
||||
*/
|
||||
export async function addCoveragePCOV(version: string, os_version: string) {
|
||||
let script: string = '\n';
|
||||
switch (version) {
|
||||
default:
|
||||
script +=
|
||||
(await extensions.addExtension('pcov', version, os_version, true)) +
|
||||
(await utils.suppressOutput(os_version)) +
|
||||
'\n';
|
||||
script +=
|
||||
(await config.addINIValues('pcov.enabled=1', os_version, true)) + '\n';
|
||||
|
||||
// add command to disable xdebug and enable pcov
|
||||
switch (os_version) {
|
||||
case 'linux':
|
||||
script +=
|
||||
'if [ -e /etc/php/' +
|
||||
version +
|
||||
'/mods-available/xdebug.ini ]; then sudo phpdismod -v ' +
|
||||
version +
|
||||
' xdebug; fi\n';
|
||||
script += 'sudo sed -i "/xdebug/d" $ini_file\n';
|
||||
break;
|
||||
case 'darwin':
|
||||
script += 'sudo sed -i \'\' "/xdebug/d" $ini_file\n';
|
||||
break;
|
||||
case 'win32':
|
||||
script +=
|
||||
'if(php -m | findstr -i xdebug) { Disable-PhpExtension xdebug C:\\tools\\php }\n';
|
||||
break;
|
||||
}
|
||||
|
||||
// success
|
||||
script += await utils.addLog(
|
||||
'$tick',
|
||||
'coverage: pcov',
|
||||
'PCOV enabled as coverage driver',
|
||||
os_version
|
||||
);
|
||||
// version is not supported
|
||||
break;
|
||||
case '5.6':
|
||||
case '7.0':
|
||||
script += await utils.addLog(
|
||||
'$cross',
|
||||
'pcov',
|
||||
'PHP 7.1 or newer is required',
|
||||
os_version
|
||||
);
|
||||
break;
|
||||
}
|
||||
|
||||
return script;
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to disable Xdebug and PCOV
|
||||
*
|
||||
* @param version
|
||||
* @param os_version
|
||||
*/
|
||||
export async function disableCoverage(version: string, os_version: string) {
|
||||
let script: string = '\n';
|
||||
switch (os_version) {
|
||||
case 'linux':
|
||||
script +=
|
||||
'if [ -e /etc/php/' +
|
||||
version +
|
||||
'/mods-available/xdebug.ini ]; then sudo phpdismod -v ' +
|
||||
version +
|
||||
' xdebug; fi\n';
|
||||
script +=
|
||||
'if [ -e /etc/php/' +
|
||||
version +
|
||||
'/mods-available/pcov.ini ]; then sudo phpdismod -v ' +
|
||||
version +
|
||||
' pcov; fi\n';
|
||||
script += 'sudo sed -i "/xdebug/d" $ini_file\n';
|
||||
script += 'sudo sed -i "/pcov/d" $ini_file\n';
|
||||
break;
|
||||
case 'darwin':
|
||||
script += 'sudo sed -i \'\' "/xdebug/d" $ini_file\n';
|
||||
script += 'sudo sed -i \'\' "/pcov/d" $ini_file\n';
|
||||
break;
|
||||
case 'win32':
|
||||
script +=
|
||||
'if(php -m | findstr -i xdebug) { Disable-PhpExtension xdebug C:\\tools\\php }\n';
|
||||
script +=
|
||||
'if(php -m | findstr -i pcov) { Disable-PhpExtension pcov C:\\tools\\php }\n';
|
||||
break;
|
||||
}
|
||||
script += await utils.addLog(
|
||||
'$tick',
|
||||
'none',
|
||||
'Disabled Xdebug and PCOV',
|
||||
os_version
|
||||
);
|
||||
|
||||
return script;
|
||||
}
|
@ -1,14 +0,0 @@
|
||||
export HOMEBREW_NO_INSTALL_CLEANUP=TRUE
|
||||
brew tap exolnet/homebrew-deprecated > /dev/null 2>&1;
|
||||
brew install php@"$1";
|
||||
brew link --force --overwrite php@"$1";
|
||||
ini_file=$(php --ini | grep "Loaded Configuration" | sed -e "s|.*:s*||" | sed "s/ //g")
|
||||
ext_dir=$(/usr/bin/php -i | grep "extension_dir => /usr" | sed -e "s|.*=> s*||")
|
||||
sudo chmod 777 "$ini_file"
|
||||
mkdir -p "$(pecl config-get ext_dir)"
|
||||
curl -sS https://getcomposer.org/installer | php
|
||||
chmod +x composer.phar
|
||||
mv composer.phar /usr/local/bin/composer
|
||||
composer global require hirak/prestissimo
|
||||
php -v
|
||||
composer -V
|
BIN
src/ext/php_pcov.dll
Normal file
BIN
src/ext/php_pcov.dll
Normal file
Binary file not shown.
184
src/extensions.ts
Normal file
184
src/extensions.ts
Normal file
@ -0,0 +1,184 @@
|
||||
import * as utils from './utils';
|
||||
|
||||
/**
|
||||
* Install and enable extensions
|
||||
*
|
||||
* @param extension_csv
|
||||
* @param version
|
||||
* @param os_version
|
||||
* @param log_prefix
|
||||
*/
|
||||
export async function addExtension(
|
||||
extension_csv: string,
|
||||
version: string,
|
||||
os_version: string,
|
||||
no_step = false
|
||||
): Promise<string> {
|
||||
let script: string = '\n';
|
||||
switch (no_step) {
|
||||
case true:
|
||||
script +=
|
||||
(await utils.stepLog('Setup Extensions', os_version)) +
|
||||
(await utils.suppressOutput(os_version));
|
||||
break;
|
||||
case false:
|
||||
default:
|
||||
script += await utils.stepLog('Setup Extensions', os_version);
|
||||
break;
|
||||
}
|
||||
|
||||
switch (os_version) {
|
||||
case 'win32':
|
||||
return script + (await addExtensionWindows(extension_csv, version));
|
||||
case 'darwin':
|
||||
return script + (await addExtensionDarwin(extension_csv, version));
|
||||
case 'linux':
|
||||
return script + (await addExtensionLinux(extension_csv, version));
|
||||
default:
|
||||
return await utils.log(
|
||||
'Platform ' + os_version + ' is not supported',
|
||||
os_version,
|
||||
'error'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Install and enable extensions for darwin
|
||||
*
|
||||
* @param extension_csv
|
||||
* @param version
|
||||
*/
|
||||
export async function addExtensionDarwin(
|
||||
extension_csv: string,
|
||||
version: string
|
||||
): Promise<string> {
|
||||
let extensions: Array<string> = await utils.extensionArray(extension_csv);
|
||||
let script: string = '\n';
|
||||
await utils.asyncForEach(extensions, async function(extension: string) {
|
||||
extension = extension.toLowerCase();
|
||||
// add script to enable extension is already installed along with php
|
||||
let install_command: string = '';
|
||||
switch (version + extension) {
|
||||
case '7.4xdebug':
|
||||
install_command =
|
||||
'sh ./xdebug_darwin.sh >/dev/null 2>&1 && echo "zend_extension=xdebug.so" >> $ini_file';
|
||||
break;
|
||||
case '7.4pcov':
|
||||
install_command =
|
||||
'sh ./pcov.sh >/dev/null 2>&1 && echo "extension=pcov.so" >> $ini_file';
|
||||
break;
|
||||
case '5.6xdebug':
|
||||
install_command = 'sudo pecl install xdebug-2.5.5 >/dev/null 2>&1';
|
||||
break;
|
||||
default:
|
||||
install_command = 'sudo pecl install ' + extension + ' >/dev/null 2>&1';
|
||||
break;
|
||||
}
|
||||
script +=
|
||||
'\nadd_extension ' +
|
||||
extension +
|
||||
' "' +
|
||||
install_command +
|
||||
'" ' +
|
||||
(await utils.getExtensionPrefix(extension));
|
||||
});
|
||||
return script;
|
||||
}
|
||||
|
||||
/**
|
||||
* Install and enable extensions for windows
|
||||
*
|
||||
* @param extension_csv
|
||||
* @param version
|
||||
*/
|
||||
export async function addExtensionWindows(
|
||||
extension_csv: string,
|
||||
version: string
|
||||
): Promise<string> {
|
||||
let extensions: Array<string> = await utils.extensionArray(extension_csv);
|
||||
let script: string = '\n';
|
||||
await utils.asyncForEach(extensions, async function(extension: string) {
|
||||
extension = extension.toLowerCase();
|
||||
// add script to enable extension is already installed along with php
|
||||
|
||||
let install_command: string = '';
|
||||
switch (version + extension) {
|
||||
case '7.4xdebug':
|
||||
const extension_url: string =
|
||||
'https://xdebug.org/files/php_xdebug-2.8.0beta2-7.4-vc15.dll';
|
||||
install_command =
|
||||
'Invoke-WebRequest -Uri ' +
|
||||
extension_url +
|
||||
' -OutFile C:\\tools\\php\\ext\\php_xdebug.dll\n';
|
||||
install_command += 'Enable-PhpExtension xdebug';
|
||||
break;
|
||||
case '7.2xdebug':
|
||||
default:
|
||||
install_command = 'Install-PhpExtension ' + extension;
|
||||
break;
|
||||
}
|
||||
script +=
|
||||
'\nAdd-Extension ' +
|
||||
extension +
|
||||
' "' +
|
||||
install_command +
|
||||
'" ' +
|
||||
(await utils.getExtensionPrefix(extension));
|
||||
});
|
||||
return script;
|
||||
}
|
||||
|
||||
/**
|
||||
* Install and enable extensions for linux
|
||||
*
|
||||
* @param extension_csv
|
||||
* @param version
|
||||
*/
|
||||
export async function addExtensionLinux(
|
||||
extension_csv: string,
|
||||
version: string
|
||||
): Promise<string> {
|
||||
let extensions: Array<string> = await utils.extensionArray(extension_csv);
|
||||
let script: string = '\n';
|
||||
await utils.asyncForEach(extensions, async function(extension: string) {
|
||||
extension = extension.toLowerCase();
|
||||
// add script to enable extension is already installed along with php
|
||||
|
||||
let install_command: string = '';
|
||||
switch (version + extension) {
|
||||
case '7.4xdebug':
|
||||
install_command =
|
||||
'./xdebug.sh >/dev/null 2>&1 && echo "zend_extension=xdebug.so" >> $ini_file';
|
||||
break;
|
||||
case '7.4pcov':
|
||||
install_command =
|
||||
'./pcov.sh >/dev/null 2>&1 && echo "extension=pcov.so" >> $ini_file';
|
||||
break;
|
||||
case '7.2phalcon3':
|
||||
case '7.3phalcon3':
|
||||
install_command = './phalcon.sh master ' + version + ' >/dev/null 2>&1';
|
||||
break;
|
||||
case '7.2phalcon4':
|
||||
case '7.3phalcon4':
|
||||
install_command = './phalcon.sh 4.0.x ' + version + ' >/dev/null 2>&1';
|
||||
break;
|
||||
default:
|
||||
install_command =
|
||||
'sudo DEBIAN_FRONTEND=noninteractive apt install -y php' +
|
||||
version +
|
||||
'-' +
|
||||
extension +
|
||||
' >/dev/null 2>&1';
|
||||
break;
|
||||
}
|
||||
script +=
|
||||
'\nadd_extension ' +
|
||||
extension +
|
||||
' "' +
|
||||
install_command +
|
||||
'" ' +
|
||||
(await utils.getExtensionPrefix(extension));
|
||||
});
|
||||
return script;
|
||||
}
|
179
src/features.ts
179
src/features.ts
@ -1,179 +0,0 @@
|
||||
import * as utils from './utils';
|
||||
import * as pecl from './pecl';
|
||||
|
||||
export async function addExtension(
|
||||
extensions: string,
|
||||
version: string,
|
||||
os_version: string
|
||||
): Promise<string> {
|
||||
if (os_version === 'win32') {
|
||||
return await addExtensionWindows(extensions, version);
|
||||
} else if (os_version === 'linux') {
|
||||
return await addExtensionLinux(extensions, version);
|
||||
}
|
||||
|
||||
return await addExtensionDarwin(extensions);
|
||||
}
|
||||
|
||||
export async function addINIValues(ini_values_csv: string, os_version: string) {
|
||||
if (os_version === 'win32') {
|
||||
return await addINIValuesWindows(ini_values_csv);
|
||||
}
|
||||
return await addINIValuesUnix(ini_values_csv);
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable extensions which are installed but not enabled on windows
|
||||
*
|
||||
* @param extension
|
||||
*/
|
||||
export async function enableExtensionWindows(extension: string) {
|
||||
return `try {
|
||||
$exist = Test-Path -Path $ext_dir\\php_${extension}.dll
|
||||
if(!(php -m | findstr -i ${extension}) -and $exist) {
|
||||
Enable-PhpExtension ${extension} C:\\tools\\php
|
||||
}
|
||||
} catch [Exception] {
|
||||
echo $_
|
||||
}\n`;
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable extensions which are installed but not enabled on unix
|
||||
*
|
||||
* @param extension
|
||||
*/
|
||||
export async function enableExtensionUnix(extension: string) {
|
||||
return `if [ ! "$(php -m | grep ${extension})" ] && [ -e "$ext_dir/${extension}.so" ]; then
|
||||
echo "extension=${extension}.so" >> 'php -i | grep "Loaded Configuration" | sed -e "s|.*=>\s*||"'
|
||||
echo "${extension} enabled"
|
||||
fi\n`;
|
||||
}
|
||||
|
||||
/**
|
||||
* Install and enable extensions for darwin
|
||||
*
|
||||
* @param extension_csv
|
||||
*/
|
||||
export async function addExtensionDarwin(
|
||||
extension_csv: string
|
||||
): Promise<string> {
|
||||
let extensions: Array<string> = await utils.extensionArray(extension_csv);
|
||||
let script: string = '\n';
|
||||
await utils.asyncForEach(extensions, async function(extension: string) {
|
||||
// add script to enable extension is already installed along with php
|
||||
script += await enableExtensionUnix(extension);
|
||||
if (await pecl.checkPECLExtension(extension)) {
|
||||
script +=
|
||||
'if [ ! "$(php -m | grep ' +
|
||||
extension +
|
||||
')" ]; then sudo pecl install ' +
|
||||
extension +
|
||||
' || echo "Couldn\'t find extension: ' +
|
||||
extension +
|
||||
'"; fi\n';
|
||||
}
|
||||
});
|
||||
return script;
|
||||
}
|
||||
|
||||
/**
|
||||
* Install and enable extensions for windows
|
||||
*
|
||||
* @param extension_csv
|
||||
* @param version
|
||||
*/
|
||||
export async function addExtensionWindows(
|
||||
extension_csv: string,
|
||||
version: string
|
||||
): Promise<string> {
|
||||
let extensions: Array<string> = await utils.extensionArray(extension_csv);
|
||||
let script: string = '\n';
|
||||
await utils.asyncForEach(extensions, async function(extension: string) {
|
||||
// add script to enable extension is already installed along with php
|
||||
script += await enableExtensionWindows(extension);
|
||||
let extension_version = 'stable';
|
||||
if (version == '7.4') {
|
||||
extension_version = 'alpha';
|
||||
}
|
||||
if (await pecl.checkPECLExtension(extension)) {
|
||||
script +=
|
||||
'if(!(php -m | findstr -i ' +
|
||||
extension +
|
||||
')) { ' +
|
||||
'try { Install-PhpExtension ' +
|
||||
extension +
|
||||
' -MinimumStability ' +
|
||||
extension_version +
|
||||
' } catch [Exception] { echo $_; echo "Could not install extension: "' +
|
||||
extension +
|
||||
' } }\n';
|
||||
}
|
||||
});
|
||||
return script;
|
||||
}
|
||||
|
||||
/**
|
||||
* Install and enable extensions for linux
|
||||
*
|
||||
* @param extension_csv
|
||||
* @param version
|
||||
*/
|
||||
export async function addExtensionLinux(
|
||||
extension_csv: string,
|
||||
version: string
|
||||
): Promise<string> {
|
||||
let extensions: Array<string> = await utils.extensionArray(extension_csv);
|
||||
let script: string = '\n';
|
||||
await utils.asyncForEach(extensions, async function(extension: string) {
|
||||
// add script to enable extension is already installed along with php
|
||||
script += await enableExtensionUnix(extension);
|
||||
script +=
|
||||
'if [ ! "$(php -m | grep ' +
|
||||
extension +
|
||||
')" ]; then sudo DEBIAN_FRONTEND=noninteractive apt install -y php' +
|
||||
version +
|
||||
'-' +
|
||||
extension +
|
||||
' || echo "Couldn\'t find extension php' +
|
||||
version +
|
||||
'-' +
|
||||
extension +
|
||||
'"; fi\n';
|
||||
});
|
||||
return script;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add script to set custom ini values for unix
|
||||
*
|
||||
* @param ini_values_csv
|
||||
*/
|
||||
export async function addINIValuesUnix(
|
||||
ini_values_csv: string
|
||||
): Promise<string> {
|
||||
let script: string = '\n';
|
||||
let ini_values: Array<string> = await utils.INIArray(ini_values_csv);
|
||||
await utils.asyncForEach(ini_values, async function(ini_value: string) {
|
||||
// add script to set ini value
|
||||
script += 'echo "' + ini_value + '" >> $ini_file\n';
|
||||
});
|
||||
return script;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add script to set custom ini values for windows
|
||||
*
|
||||
* @param ini_values_csv
|
||||
*/
|
||||
export async function addINIValuesWindows(
|
||||
ini_values_csv: string
|
||||
): Promise<string> {
|
||||
let script: string = '\n';
|
||||
let ini_values: Array<string> = await utils.INIArray(ini_values_csv);
|
||||
await utils.asyncForEach(ini_values, async function(ini_value: string) {
|
||||
// add script to set ini value
|
||||
script += 'Add-Content C:\\tools\\php\\php.ini "' + ini_value + '"\n';
|
||||
});
|
||||
return script;
|
||||
}
|
@ -1,61 +1,58 @@
|
||||
import {exec} from '@actions/exec/lib/exec';
|
||||
import * as core from '@actions/core';
|
||||
import * as utils from './utils';
|
||||
import * as features from './features';
|
||||
import * as extensions from './extensions';
|
||||
import * as config from './config';
|
||||
import * as coverage from './coverage';
|
||||
|
||||
/**
|
||||
* Build the script
|
||||
*
|
||||
* @param filename
|
||||
* @param version
|
||||
* @param os_version
|
||||
*/
|
||||
async function build(filename: string, version: string, os_version: string) {
|
||||
// taking inputs
|
||||
let extension_csv: string = await utils.getInput('extension-csv', false);
|
||||
let ini_values_csv: string = await utils.getInput('ini-values-csv', false);
|
||||
let coverage_driver: string = await utils.getInput('coverage', false);
|
||||
|
||||
let script: string = await utils.readScript(filename, version, os_version);
|
||||
if (extension_csv) {
|
||||
script += await extensions.addExtension(extension_csv, version, os_version);
|
||||
}
|
||||
if (ini_values_csv) {
|
||||
script += await config.addINIValues(ini_values_csv, os_version);
|
||||
}
|
||||
if (coverage_driver) {
|
||||
script += await coverage.addCoverage(coverage_driver, version, os_version);
|
||||
}
|
||||
await utils.writeScript(filename, version, script);
|
||||
}
|
||||
|
||||
/**
|
||||
* Run the script
|
||||
*/
|
||||
async function run() {
|
||||
try {
|
||||
// taking inputs
|
||||
let version: string = await utils.getInput('php-version', true);
|
||||
let extension_csv: string = await utils.getInput('extension-csv', false);
|
||||
let ini_values_csv: string = await utils.getInput('ini-values-csv', false);
|
||||
|
||||
let os_version: string = process.platform;
|
||||
let version: string = await utils.getInput('php-version', true);
|
||||
// check the os version and run the respective script
|
||||
if (os_version == 'darwin') {
|
||||
let darwin: string = await utils.readScript(
|
||||
'darwin.sh',
|
||||
version,
|
||||
os_version
|
||||
);
|
||||
darwin += await features.addExtension(extension_csv, version, os_version);
|
||||
darwin += await features.addINIValues(ini_values_csv, os_version);
|
||||
await utils.writeScript('darwin.sh', version, darwin);
|
||||
await exec('sh -x ./' + version + 'darwin.sh ' + version);
|
||||
await build('darwin.sh', version, os_version);
|
||||
await exec('sh ./' + version + 'darwin.sh ' + version);
|
||||
} else if (os_version == 'win32') {
|
||||
let windows: string = await utils.readScript(
|
||||
'win32.ps1',
|
||||
version,
|
||||
os_version
|
||||
);
|
||||
windows += await features.addExtension(
|
||||
extension_csv,
|
||||
version,
|
||||
os_version
|
||||
);
|
||||
windows += await features.addINIValues(ini_values_csv, os_version);
|
||||
await utils.writeScript('win32.ps1', version, windows);
|
||||
await build('win32.ps1', version, os_version);
|
||||
await exec('powershell .\\' + version + 'win32.ps1 -version ' + version);
|
||||
} else if (os_version == 'linux') {
|
||||
let linux: string = await utils.readScript(
|
||||
'linux.sh',
|
||||
version,
|
||||
os_version
|
||||
);
|
||||
linux += await features.addExtension(extension_csv, version, os_version);
|
||||
linux += await features.addINIValues(ini_values_csv, os_version);
|
||||
await utils.writeScript('linux.sh', version, linux);
|
||||
await build('linux.sh', version, os_version);
|
||||
await exec('./' + version + 'linux.sh ' + version);
|
||||
}
|
||||
} catch (err) {
|
||||
core.setFailed(err.message);
|
||||
} catch (error) {
|
||||
core.setFailed(error.message);
|
||||
}
|
||||
}
|
||||
|
||||
// call the run function
|
||||
run().then(function() {
|
||||
console.log('done');
|
||||
});
|
||||
run();
|
||||
|
25
src/linux.sh
25
src/linux.sh
@ -1,25 +0,0 @@
|
||||
version=$(php-config --version | cut -c 1-3)
|
||||
if [ "$version" != "$1" ]; then
|
||||
if [ ! -e "/usr/bin/php$1" ]; then
|
||||
sudo DEBIAN_FRONTEND=noninteractive add-apt-repository ppa:ondrej/php -y > /dev/null 2>&1
|
||||
sudo DEBIAN_FRONTEND=noninteractive apt update -y > /dev/null 2>&1
|
||||
sudo DEBIAN_FRONTEND=noninteractive apt install -y php"$1" curl php"$1"-curl;
|
||||
fi
|
||||
for tool in php phar phar.phar php-cgi php-config phpize; do
|
||||
if [ -e "/usr/bin/$tool$1" ]; then
|
||||
sudo update-alternatives --set $tool /usr/bin/"$tool$1";
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
if [ ! -e "/usr/bin/composer" ]; then
|
||||
sudo curl -s https://getcomposer.org/installer | php;
|
||||
sudo mv composer.phar /usr/local/bin/composer;
|
||||
fi
|
||||
composer global require hirak/prestissimo > /dev/null 2>&1
|
||||
ini_file=$(php --ini | grep "Loaded Configuration" | sed -e "s|.*:s*||" | sed "s/ //g")
|
||||
ext_dir=$(/usr/bin/php -i | grep "extension_dir => /usr" | sed -e "s|.*=> s*||")
|
||||
sudo chmod 777 "$ini_file"
|
||||
sudo mkdir -p /run/php
|
||||
php -v
|
||||
composer -V
|
17
src/pecl.ts
17
src/pecl.ts
@ -1,17 +0,0 @@
|
||||
import * as hc from 'typed-rest-client/HttpClient';
|
||||
|
||||
/**
|
||||
* Function to check if PECL extension exists
|
||||
*
|
||||
* @param extension
|
||||
*/
|
||||
export async function checkPECLExtension(extension: string): Promise<boolean> {
|
||||
const http: hc.HttpClient = new hc.HttpClient('shivammathur/php-setup', [], {
|
||||
allowRetries: true,
|
||||
maxRetries: 2
|
||||
});
|
||||
const response: hc.HttpClientResponse = await http.get(
|
||||
'https://pecl.php.net/package/' + extension
|
||||
);
|
||||
return response.message.statusCode === 200;
|
||||
}
|
115
src/scripts/7.4.sh
Normal file
115
src/scripts/7.4.sh
Normal file
@ -0,0 +1,115 @@
|
||||
tick="✓"
|
||||
cross="✗"
|
||||
|
||||
step_log() {
|
||||
message=$1
|
||||
printf "\n\033[90;1m==> \033[0m\033[37;1m%s\033[0m\n" "$message"
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
version='7.4.0RC3'
|
||||
step_log "Setup dependencies"
|
||||
for package in pkg-config autoconf bison re2c openssl@1.1 krb5 enchant libffi freetype intltool icu4c libiconv t1lib gd libzip gmp tidyp libxml2 libxslt postgresql curl;
|
||||
do
|
||||
brew install "$package" >/dev/null 2>&1
|
||||
add_log "$tick" "$package" "Installed"
|
||||
done
|
||||
brew link icu4c gettext --force >/dev/null 2>&1
|
||||
|
||||
for package in gettext gmp krb5 icu4c bison openssl@1.1 libxml2 libffi libxslt libiconv pkgconfig enchant krb5 readline libedit freetype;
|
||||
do
|
||||
caps_package=$(echo "$package" | tr '[:lower:]' '[:upper:]')
|
||||
{
|
||||
echo 'export PATH="/usr/local/opt/'"$package"'/bin:$PATH"'
|
||||
echo 'export PKG_CONFIG_PATH="/usr/local/opt/'$package'/lib/pkgconfig:$PKG_CONFIG_PATH"'
|
||||
echo 'export '"$caps_package"'_LIBS="-L/usr/local/opt/'$package'/lib"'
|
||||
echo 'export '"$caps_package"'_CFLAGS="-I/usr/local/opt/'$package'/include"'
|
||||
} >> ~/.bash_profile;
|
||||
done
|
||||
{
|
||||
echo 'export ICONV_LIBS="-L/usr/local/opt/libiconv/lib"'
|
||||
echo 'export ICONV_CFLAGS="-I/usr/local/opt/libiconv/include"'
|
||||
echo 'export LIBXML_LIBS="-L/usr/local/opt/libxml2/lib"'
|
||||
echo 'export LIBXML_CFLAGS="-I/usr/local/opt/libxml2/include"'
|
||||
echo 'export ICU_LIBS="-L/usr/local/opt/icu4c/lib"'
|
||||
echo 'export ICU_CFLAGS="-I/usr/local/opt/icu4c/include"'
|
||||
echo 'export OPENSSL_LIBS="-L/usr/local/opt/openssl@1.1/lib -lcrypto"'
|
||||
echo 'export OPENSSL_CFLAGS="-I/usr/local/opt/openssl@1.1/include"'
|
||||
echo 'export OPENSSL_ROOT_DIR="/usr/local/opt/openssl@1.1/"'
|
||||
echo 'export OPENSSL_LIB_DIR="/usr/local/opt/openssl@1.1/lib"'
|
||||
echo 'export OPENSSL_INCLUDE_DIR="/usr/local/opt/openssl@1.1/include"'
|
||||
echo 'export PKG_CONFIG="/usr/local/opt/pkgconfig/bin/pkg-config"'
|
||||
echo 'export EXTRA_LIBS="/usr/local/opt/readline/lib/libhistory.dylib
|
||||
/usr/local/opt/readline/lib/libreadline.dylib
|
||||
/usr/local/opt/openssl@1.1/lib/libssl.dylib
|
||||
/usr/local/opt/openssl@1.1/lib/libcrypto.dylib
|
||||
/usr/local/opt/icu4c/lib/libicudata.dylib
|
||||
/usr/local/opt/icu4c/lib/libicui18n.dylib
|
||||
/usr/local/opt/icu4c/lib/libicuio.dylib
|
||||
/usr/local/opt/icu4c/lib/libicutu.dylib
|
||||
/usr/local/opt/icu4c/lib/libicuuc.dylib"'
|
||||
} >> ~/.bash_profile
|
||||
config_file=$(pwd)/config.yaml
|
||||
|
||||
step_log "Setup PHPBrew"
|
||||
curl -L -O https://github.com/phpbrew/phpbrew/raw/master/phpbrew >/dev/null 2>&1
|
||||
chmod +x ./phpbrew
|
||||
sudo mv phpbrew /usr/local/bin/phpbrew
|
||||
sudo mkdir -p /opt/phpbrew
|
||||
sudo mkdir -p /usr/local/lib
|
||||
sudo mkdir -p /usr/local/bin
|
||||
sudo phpbrew init --root=/opt/phpbrew --config="$config_file" >/dev/null 2>&1
|
||||
sudo chmod -R 777 /opt/phpbrew
|
||||
export PHPBREW_ROOT=/opt/phpbrew
|
||||
export PHPBREW_HOME=/opt/phpbrew
|
||||
echo "[[ -e ~/.phpbrew/bashrc ]] && source ~/.phpbrew/bashrc" >> ~/.bashrc
|
||||
add_log "$tick" "PHPBrew" "Installed"
|
||||
|
||||
source ~/.bash_profile >/dev/null 2>&1
|
||||
source ~/.bashrc >/dev/null 2>&1
|
||||
|
||||
step_log "Setup PHP and Composer"
|
||||
phpbrew install -j 6 $version +dev >/dev/null 2>&1
|
||||
phpbrew switch $version
|
||||
sudo ln -sf /opt/phpbrew/php/php-$version/bin/* /usr/local/bin/
|
||||
sudo ln -sf /opt/phpbrew/php/php-$version/etc/php.ini /etc/php.ini
|
||||
ini_file=$(php --ini | grep "Loaded Configuration" | sed -e "s|.*:s*||" | sed "s/ //g")
|
||||
ext_dir=$(php -i | grep "extension_dir => /opt" | sed -e "s|.*=> s*||")
|
||||
pecl config-set php_ini "$ini_file" >/dev/null 2>&1
|
||||
sudo chmod 777 "$ini_file"
|
||||
brew install composer >/dev/null 2>&1
|
||||
|
||||
add_log "$tick" "PHP" "Installed PHP$version"
|
||||
add_log "$tick" "Composer" "Installed"
|
||||
|
||||
add_extension() {
|
||||
extension=$1
|
||||
install_command=$2
|
||||
prefix=$3
|
||||
if ! php -m | grep -i -q "$extension" && [ -e "$ext_dir/$extension.so" ]; then
|
||||
echo "$prefix=$extension" >>"$ini_file" && add_log "$tick" "$extension" "Enabled"
|
||||
elif php -m | grep -i -q "$extension"; then
|
||||
add_log "$tick" "$extension" "Enabled"
|
||||
elif ! php -m | grep -i -q "$extension"; then
|
||||
exists=$(curl -sL https://pecl.php.net/json.php?package="$extension" -w "%{http_code}" -o /dev/null)
|
||||
if [ "$exists" = "200" ]; then
|
||||
(
|
||||
eval "$install_command" && \
|
||||
add_log "$tick" "$extension" "Installed and enabled"
|
||||
) || add_log "$cross" "$extension" "Could not install $extension on PHP$version"
|
||||
else
|
||||
if ! php -m | grep -i -q "$extension"; then
|
||||
add_log "$cross" "$extension" "Could not find $extension for PHP$version on PECL"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
}
|
58
src/scripts/darwin.sh
Normal file
58
src/scripts/darwin.sh
Normal file
@ -0,0 +1,58 @@
|
||||
tick="✓"
|
||||
cross="✗"
|
||||
|
||||
step_log() {
|
||||
message=$1
|
||||
printf "\n\033[90;1m==> \033[0m\033[37;1m%s\033[0m\n" "$message"
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
version=$1
|
||||
export HOMEBREW_NO_INSTALL_CLEANUP=TRUE
|
||||
if [ "$1" = "5.6" ] || [ "$1" = "7.0" ]; then
|
||||
brew tap exolnet/homebrew-deprecated >/dev/null 2>&1
|
||||
fi
|
||||
step_log "Setup PHP and Composer"
|
||||
brew install php@"$1" composer >/dev/null 2>&1
|
||||
brew link --force --overwrite php@"$1" >/dev/null 2>&1
|
||||
ini_file=$(php -d "date.timezone=UTC" --ini | grep "Loaded Configuration" | sed -e "s|.*:s*||" | sed "s/ //g")
|
||||
echo "date.timezone=UTC" >> "$ini_file"
|
||||
ext_dir=$(php -i | grep "extension_dir => /usr" | sed -e "s|.*=> s*||")
|
||||
sudo chmod 777 "$ini_file"
|
||||
mkdir -p "$(pecl config-get ext_dir)"
|
||||
composer global require hirak/prestissimo >/dev/null 2>&1
|
||||
add_log "$tick" "PHP" "Installed PHP$version"
|
||||
add_log "$tick" "Composer" "Installed"
|
||||
|
||||
add_extension() {
|
||||
extension=$1
|
||||
install_command=$2
|
||||
prefix=$3
|
||||
if ! php -m | grep -i -q "$extension" && [ -e "$ext_dir/$extension.so" ]; then
|
||||
echo "$prefix=$extension" >>"$ini_file" && add_log $tick "$extension" "Enabled"
|
||||
elif php -m | grep -i -q "$extension"; then
|
||||
add_log "$tick" "$extension" "Enabled"
|
||||
elif ! php -m | grep -i -q "$extension"; then
|
||||
exists=$(curl -sL https://pecl.php.net/json.php?package="$extension" -w "%{http_code}" -o /dev/null)
|
||||
if [ "$exists" = "200" ]; then
|
||||
(
|
||||
eval "$install_command" && \
|
||||
add_log "$tick" "$extension" "Installed and enabled"
|
||||
) || add_log "$cross" "$extension" "Could not install $extension on PHP$version"
|
||||
else
|
||||
if ! php -m | grep -i -q "$extension"; then
|
||||
add_log "$cross" "$extension" "Could not find $extension for PHP$version on PECL"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
}
|
77
src/scripts/linux.sh
Normal file
77
src/scripts/linux.sh
Normal file
@ -0,0 +1,77 @@
|
||||
tick="✓"
|
||||
cross="✗"
|
||||
|
||||
step_log() {
|
||||
message=$1
|
||||
printf "\n\033[90;1m==> \033[0m\033[37;1m%s\033[0m\n" "$message"
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
existing_version=$(php-config --version | cut -c 1-3)
|
||||
version=$1
|
||||
status="Switched to PHP$version"
|
||||
step_log "Setup PHP and Composer"
|
||||
if [ "$existing_version" != "$1" ]; then
|
||||
if [ ! -e "/usr/bin/php$1" ]; then
|
||||
sudo DEBIAN_FRONTEND=noninteractive add-apt-repository ppa:ondrej/php -y >/dev/null 2>&1
|
||||
sudo DEBIAN_FRONTEND=noninteractive apt update -y >/dev/null 2>&1
|
||||
if [ "$1" != "7.4" ]; then
|
||||
sudo DEBIAN_FRONTEND=noninteractive apt install -y php"$1" curl php"$1"-curl >/dev/null 2>&1
|
||||
else
|
||||
sudo DEBIAN_FRONTEND=noninteractive apt install -y php"$1" php"$1"-dev curl php"$1"-curl >/dev/null 2>&1
|
||||
fi
|
||||
status="Installed PHP$version"
|
||||
fi
|
||||
|
||||
|
||||
for tool in php phar phar.phar php-cgi php-config phpize; do
|
||||
if [ -e "/usr/bin/$tool$1" ]; then
|
||||
sudo update-alternatives --set $tool /usr/bin/"$tool$1" >/dev/null 2>&1 &
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
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*||")
|
||||
sudo chmod 777 "$ini_file"
|
||||
sudo mkdir -p /run/php
|
||||
add_log "$tick" "PHP" "$status"
|
||||
|
||||
if [ ! -e "/usr/bin/composer" ]; then
|
||||
curl -s -L https://getcomposer.org/installer > composer-setup.php
|
||||
if [ "$(curl -s https://composer.github.io/installer.sig)" != "$(php -r "echo hash_file('sha384', 'composer-setup.php');")" ]; then
|
||||
>&2 echo 'ERROR: Invalid installer signature'
|
||||
else
|
||||
export COMPOSER_ALLOW_SUPERUSER=1
|
||||
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
|
||||
fi
|
||||
rm composer-setup.php
|
||||
fi
|
||||
composer global require hirak/prestissimo >/dev/null 2>&1
|
||||
add_log "$tick" "Composer" "Installed"
|
||||
|
||||
add_extension()
|
||||
{
|
||||
extension=$1
|
||||
install_command=$2
|
||||
prefix=$3
|
||||
if ! php -m | grep -i -q "$extension" && [ -e "$ext_dir/$extension.so" ]; then
|
||||
echo "$prefix=$extension" >> "$ini_file" && add_log "$tick" "$extension" "Enabled"
|
||||
elif php -m | grep -i -q "$extension"; then
|
||||
add_log "$tick" "$extension" "Enabled"
|
||||
elif ! php -m | grep -i -q "$extension"; then
|
||||
(
|
||||
eval "$install_command" && \
|
||||
add_log "$tick" "$extension" "Installed and enabled"
|
||||
) || add_log "$cross" "$extension" "Could not find php$version-$extension"
|
||||
fi
|
||||
}
|
7
src/scripts/pcov.sh
Normal file
7
src/scripts/pcov.sh
Normal file
@ -0,0 +1,7 @@
|
||||
git clone --depth=1 https://github.com/krakjoe/pcov.git
|
||||
(
|
||||
cd pcov && phpize
|
||||
./configure --enable-pcov
|
||||
make
|
||||
sudo make install
|
||||
)
|
19
src/scripts/phalcon.sh
Normal file
19
src/scripts/phalcon.sh
Normal file
@ -0,0 +1,19 @@
|
||||
ini_file=$(php --ini | grep "Loaded Configuration" | sed -e "s|.*:s*||" | sed "s/ //g")
|
||||
sudo DEBIAN_FRONTEND=noninteractive apt install php"$2"-dev php-pear -y
|
||||
for tool in php-config phpize; do
|
||||
if [ -e "/usr/bin/$tool$2" ]; then
|
||||
sudo update-alternatives --set $tool /usr/bin/"$tool$2" &
|
||||
fi
|
||||
done
|
||||
sudo pecl config-set php_ini "$ini_file"
|
||||
sudo pear config-set php_ini "$ini_file"
|
||||
sudo pecl install psr
|
||||
if [ "$1" = "master" ]; then
|
||||
sudo DEBIAN_FRONTEND=noninteractive apt install php"$2"-phalcon -y
|
||||
else
|
||||
git clone --depth=1 -v https://github.com/phalcon/cphalcon.git -b "$1"
|
||||
(
|
||||
cd cphalcon/build && sudo ./install --phpize /usr/bin/phpize"$2" --php-config /usr/bin/php-config"$2"
|
||||
echo "extension=phalcon.so" >> "$ini_file"
|
||||
)
|
||||
fi
|
91
src/scripts/win32.ps1
Normal file
91
src/scripts/win32.ps1
Normal file
@ -0,0 +1,91 @@
|
||||
param (
|
||||
[Parameter(Mandatory=$true)][string]$version = "7.3"
|
||||
)
|
||||
|
||||
$tick = ([char]8730)
|
||||
$cross = ([char]10007)
|
||||
|
||||
Function Step-Log($message) {
|
||||
printf "\n\033[90;1m==> \033[0m\033[37;1m%s \033[0m" $message
|
||||
}
|
||||
|
||||
Function Add-Log($mark, $subject, $message) {
|
||||
$code = if($mark -eq $cross) {"31"} else {"32"}
|
||||
printf "\033[%s;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s \033[0m" $code $mark $subject $message
|
||||
}
|
||||
|
||||
if($version -eq '7.4') {
|
||||
$version = '7.4RC'
|
||||
}
|
||||
|
||||
Step-Log "Setup PhpManager"
|
||||
Install-Module -Name PhpManager -Force -Scope CurrentUser
|
||||
printf "\n"
|
||||
Add-Log $tick "PhpManager" "Installed"
|
||||
|
||||
$installed = $($(php -v)[0] -join '')[4..6] -join ''
|
||||
Step-Log "Setup PHP and Composer"
|
||||
$status = "Switched to PHP$version"
|
||||
if($installed -ne $version) {
|
||||
if($version -lt '7.0') {
|
||||
Install-Module -Name VcRedist -Force
|
||||
}
|
||||
Uninstall-Php C:\tools\php
|
||||
Install-Php -Version $version -Architecture x86 -ThreadSafe $true -InstallVC -Path C:\tools\php$version -TimeZone UTC -InitialPhpIni Production -Force >$null 2>&1
|
||||
(Get-PhpSwitcher).targets
|
||||
Initialize-PhpSwitcher -Alias C:\tools\php -Scope CurrentUser -Force
|
||||
Add-PhpToSwitcher -Name $version -Path C:\tools\php$version -Force
|
||||
Switch-Php $version -Force
|
||||
$status = "Installed PHP$version"
|
||||
}
|
||||
|
||||
$ext_dir = "C:\tools\php\ext"
|
||||
Add-Content C:\tools\php\php.ini "date.timezone = 'UTC'"
|
||||
Set-PhpIniKey extension_dir $ext_dir
|
||||
if($version -lt '7.4') {
|
||||
Enable-PhpExtension openssl
|
||||
} else {
|
||||
Add-Content C:\tools\php\php.ini "extension=php_openssl.dll"
|
||||
Copy-Item "php_pcov.dll" -Destination $ext_dir"\php_pcov.dll"
|
||||
}
|
||||
Add-Log $tick "PHP" $status
|
||||
|
||||
Install-Composer -Scope System -Path C:\tools\php
|
||||
Add-Log $tick "Composer" "Installed"
|
||||
|
||||
Function Add-Extension($extension, $install_command, $prefix)
|
||||
{
|
||||
try {
|
||||
$exist = Test-Path -Path C:\tools\php\ext\php_$extension.dll
|
||||
if(!(php -m | findstr -i ${extension}) -and $exist) {
|
||||
Add-Content C:\tools\php\php.ini "$prefix=php_$extension.dll"
|
||||
Add-Log $tick $extension "Enabled"
|
||||
} elseif(php -m | findstr -i $extension) {
|
||||
Add-Log $tick $extension "Enabled"
|
||||
}
|
||||
} catch [Exception] {
|
||||
Add-Log $cross $extension "Could not enable"
|
||||
}
|
||||
|
||||
$status = 404
|
||||
try {
|
||||
$status = (Invoke-WebRequest -Uri "https://pecl.php.net/json.php?package=$extension" -UseBasicParsing -DisableKeepAlive).StatusCode
|
||||
} catch [Exception] {
|
||||
$status = 500
|
||||
}
|
||||
|
||||
if($status -eq 200) {
|
||||
if(!(php -m | findstr -i $extension)) {
|
||||
try {
|
||||
Invoke-Expression $install_command
|
||||
Add-Log $tick $extension "Installed and enabled"
|
||||
} catch [Exception] {
|
||||
Add-Log $cross $extension "Could not install on PHP$version"
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if(!(php -m | findstr -i $extension)) {
|
||||
Add-Log $cross $extension "Could not find $extension for PHP$version on PECL"
|
||||
}
|
||||
}
|
||||
}
|
5
src/scripts/xdebug.sh
Normal file
5
src/scripts/xdebug.sh
Normal file
@ -0,0 +1,5 @@
|
||||
git clone --depth=1 https://github.com/xdebug/xdebug.git
|
||||
(
|
||||
cd xdebug || echo "cd failed"
|
||||
sudo ./rebuild.sh
|
||||
)
|
8
src/scripts/xdebug_darwin.sh
Normal file
8
src/scripts/xdebug_darwin.sh
Normal file
@ -0,0 +1,8 @@
|
||||
git clone --depth=1 https://github.com/xdebug/xdebug.git
|
||||
(
|
||||
cd xdebug || echo "cd failed"
|
||||
sudo phpize
|
||||
sudo ./configure
|
||||
sudo make
|
||||
sudo cp modules/xdebug.so "$(php -i | grep "extension_dir => /opt" | sed -e "s|.*=> s*||")"
|
||||
)
|
227
src/utils.ts
227
src/utils.ts
@ -2,16 +2,24 @@ import * as fs from 'fs';
|
||||
import * as path from 'path';
|
||||
import * as core from '@actions/core';
|
||||
|
||||
/**
|
||||
* Function to get inputs from both with and env annotations.
|
||||
*
|
||||
* @param name
|
||||
* @param mandatory
|
||||
*/
|
||||
export async function getInput(
|
||||
name: string,
|
||||
mandatory: boolean
|
||||
): Promise<string> {
|
||||
let input = process.env[name];
|
||||
if (!input) {
|
||||
input = core.getInput(name, {required: mandatory});
|
||||
switch (input) {
|
||||
case '':
|
||||
case undefined:
|
||||
return core.getInput(name, {required: mandatory});
|
||||
default:
|
||||
return input;
|
||||
}
|
||||
|
||||
return input;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -30,6 +38,19 @@ export async function asyncForEach(
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Copy config
|
||||
*
|
||||
* @param files
|
||||
*/
|
||||
export async function moveFiles(files: Array<string>) {
|
||||
await asyncForEach(files, function(filename: string) {
|
||||
fs.createReadStream(path.join(__dirname, '../src/' + filename)).pipe(
|
||||
fs.createWriteStream(filename.split('/')[1], {mode: 0o755})
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Read the scripts
|
||||
*
|
||||
@ -42,10 +63,49 @@ export async function readScript(
|
||||
version: string,
|
||||
os_version: string
|
||||
): Promise<string> {
|
||||
if (version === '7.4' && os_version === 'darwin') {
|
||||
return fs.readFileSync(path.join(__dirname, '../src/7.4.sh'), 'utf8');
|
||||
switch (os_version) {
|
||||
case 'darwin':
|
||||
switch (version) {
|
||||
case '7.4':
|
||||
await moveFiles([
|
||||
'configs/config.yaml',
|
||||
'scripts/xdebug_darwin.sh',
|
||||
'scripts/pcov.sh'
|
||||
]);
|
||||
return fs.readFileSync(
|
||||
path.join(__dirname, '../src/scripts/7.4.sh'),
|
||||
'utf8'
|
||||
);
|
||||
}
|
||||
break;
|
||||
case 'linux':
|
||||
let files: Array<string> = ['scripts/phalcon.sh'];
|
||||
switch (version) {
|
||||
case '7.4':
|
||||
files = files.concat(['scripts/xdebug.sh', 'scripts/pcov.sh']);
|
||||
break;
|
||||
}
|
||||
await moveFiles(files);
|
||||
break;
|
||||
case 'win32':
|
||||
switch (version) {
|
||||
case '7.4':
|
||||
await moveFiles(['ext/php_pcov.dll']);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return await log(
|
||||
'Platform ' + os_version + ' is not supported',
|
||||
os_version,
|
||||
'error'
|
||||
);
|
||||
}
|
||||
return fs.readFileSync(path.join(__dirname, '../src/' + filename), 'utf8');
|
||||
|
||||
return fs.readFileSync(
|
||||
path.join(__dirname, '../src/scripts/' + filename),
|
||||
'utf8'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -65,17 +125,24 @@ export async function writeScript(
|
||||
|
||||
/**
|
||||
* Function to break extension csv into an array
|
||||
*
|
||||
* @param extension_csv
|
||||
*/
|
||||
export async function extensionArray(
|
||||
extension_csv: string
|
||||
): Promise<Array<string>> {
|
||||
return extension_csv.split(',').map(function(extension: string) {
|
||||
return extension
|
||||
.trim()
|
||||
.replace('php-', '')
|
||||
.replace('php_', '');
|
||||
});
|
||||
switch (extension_csv) {
|
||||
case '':
|
||||
case ' ':
|
||||
return [];
|
||||
default:
|
||||
return extension_csv.split(',').map(function(extension: string) {
|
||||
return extension
|
||||
.trim()
|
||||
.replace('php-', '')
|
||||
.replace('php_', '');
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -85,7 +152,135 @@ export async function extensionArray(
|
||||
* @constructor
|
||||
*/
|
||||
export async function INIArray(ini_values_csv: string): Promise<Array<string>> {
|
||||
return ini_values_csv.split(',').map(function(ini_value: string) {
|
||||
return ini_value.trim();
|
||||
});
|
||||
switch (ini_values_csv) {
|
||||
case '':
|
||||
case ' ':
|
||||
return [];
|
||||
default:
|
||||
return ini_values_csv.split(',').map(function(ini_value: string) {
|
||||
return ini_value.trim();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to log a step
|
||||
*
|
||||
* @param message
|
||||
* @param os_version
|
||||
*/
|
||||
export async function stepLog(
|
||||
message: string,
|
||||
os_version: string
|
||||
): Promise<string> {
|
||||
switch (os_version) {
|
||||
case 'win32':
|
||||
return 'Step-Log "' + message + '"';
|
||||
case 'linux':
|
||||
case 'darwin':
|
||||
return 'step_log "' + message + '"';
|
||||
default:
|
||||
return await log(
|
||||
'Platform ' + os_version + ' is not supported',
|
||||
os_version,
|
||||
'error'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to log a result
|
||||
* @param mark
|
||||
* @param subject
|
||||
* @param message
|
||||
*/
|
||||
export async function addLog(
|
||||
mark: string,
|
||||
subject: string,
|
||||
message: string,
|
||||
os_version: string
|
||||
): Promise<string> {
|
||||
switch (os_version) {
|
||||
case 'win32':
|
||||
return 'Add-Log "' + mark + '" "' + subject + '" "' + message + '"';
|
||||
case 'linux':
|
||||
case 'darwin':
|
||||
return 'add_log "' + mark + '" "' + subject + '" "' + message + '"';
|
||||
default:
|
||||
return await log(
|
||||
'Platform ' + os_version + ' is not supported',
|
||||
os_version,
|
||||
'error'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Log to console
|
||||
*
|
||||
* @param message
|
||||
* @param os_version
|
||||
* @param log_type
|
||||
* @param prefix
|
||||
*/
|
||||
export async function log(
|
||||
message: string,
|
||||
os_version: string,
|
||||
log_type: string
|
||||
): Promise<string> {
|
||||
const color: any = {
|
||||
error: '31',
|
||||
success: '32',
|
||||
warning: '33'
|
||||
};
|
||||
|
||||
switch (os_version) {
|
||||
case 'win32':
|
||||
return (
|
||||
'printf "\\033[' + color[log_type] + ';1m' + message + ' \\033[0m"'
|
||||
);
|
||||
|
||||
case 'linux':
|
||||
case 'darwin':
|
||||
default:
|
||||
return 'echo "\\033[' + color[log_type] + ';1m' + message + '\\033[0m"';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to get prefix required to load an extension.
|
||||
*
|
||||
* @param extension
|
||||
*/
|
||||
export async function getExtensionPrefix(extension: string): Promise<string> {
|
||||
let zend: Array<string> = ['xdebug', 'opcache', 'ioncube', 'eaccelerator'];
|
||||
switch (zend.indexOf(extension)) {
|
||||
case 0:
|
||||
case 1:
|
||||
return 'zend_extension';
|
||||
case -1:
|
||||
default:
|
||||
return 'extension';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to get the suffix to suppress console output
|
||||
*
|
||||
* @param os_version
|
||||
*/
|
||||
export async function suppressOutput(os_version: string): Promise<string> {
|
||||
switch (os_version) {
|
||||
case 'win32':
|
||||
return ' >$null 2>&1';
|
||||
case 'linux':
|
||||
case 'darwin':
|
||||
return ' >/dev/null 2>&1';
|
||||
default:
|
||||
return await log(
|
||||
'Platform ' + os_version + ' is not supported',
|
||||
os_version,
|
||||
'error'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -1,41 +0,0 @@
|
||||
param (
|
||||
[Parameter(Mandatory=$true)][string]$version = "7.3"
|
||||
)
|
||||
|
||||
if($version -eq '7.4') {
|
||||
$version = '7.4RC'
|
||||
}
|
||||
|
||||
echo "Installing PhpManager"
|
||||
Install-Module -Name PhpManager -Force -Scope CurrentUser
|
||||
|
||||
$installed = $($(php -v)[0] -join '')[4..6] -join ''
|
||||
if($installed -ne $version) {
|
||||
if($version -lt '7.0') {
|
||||
echo "Installing VcRedist"
|
||||
Install-Module -Name VcRedist -Force
|
||||
}
|
||||
echo "Installing PHP"
|
||||
Uninstall-Php C:\tools\php
|
||||
Install-Php -Version $version -Architecture x86 -ThreadSafe $true -InstallVC -Path C:\tools\php$version -TimeZone UTC -InitialPhpIni Production -Force
|
||||
echo "Switch PHP"
|
||||
(Get-PhpSwitcher).targets
|
||||
Initialize-PhpSwitcher -Alias C:\tools\php -Scope CurrentUser -Force
|
||||
Add-PhpToSwitcher -Name $version -Path C:\tools\php$version -Force
|
||||
Switch-Php $version -Force
|
||||
}
|
||||
|
||||
echo "Housekeeping in PHP.ini, enabling openssl"
|
||||
Add-Content C:\tools\php\php.ini "date.timezone = 'UTC'"
|
||||
Set-PhpIniKey extension_dir C:\tools\php\ext
|
||||
if($version -lt '7.4') {
|
||||
Enable-PhpExtension openssl
|
||||
} else {
|
||||
Add-Content C:\tools\php\php.ini "extension=php_openssl.dll"
|
||||
}
|
||||
|
||||
echo "Installing Composer"
|
||||
Install-Composer -Scope System -Path C:\tools\php
|
||||
$ext_dir = Get-PhpIniKey extension_dir
|
||||
php -v
|
||||
composer -V
|
Reference in New Issue
Block a user