Compare commits

...

31 Commits
2.1.0 ... 2.1.4

Author SHA1 Message Date
dccdb5ab67 Fix loading PECL extensions 2020-05-05 14:44:56 +05:30
9a01fd28ca Fix icu4c version for PHP 5.6 and PHP 7.0 on darwin 2020-04-30 17:02:17 +05:30
d5cd6a4bd1 Fix libzip-dev error in PHP 8.0 on ubuntu 2020-04-30 07:31:41 +05:30
006301e81d Fetch formulae before setup 2020-04-23 16:29:33 +05:30
4a38014043 Merge pull request #212 from shivammathur/develop
2.1.4
2020-04-09 23:54:04 +05:30
a0ac655b06 Bump version to 2.1.4 2020-04-09 23:19:56 +05:30
41e56c42c7 Update README 2020-04-09 23:19:55 +05:30
4e8a0cfe8b Update workflow 2020-04-09 21:58:34 +05:30
ee72f2f8ad Recompile PCOV for PHP8.0 2020-04-09 21:48:22 +05:30
ed557fd2c3 Add support for ast and uopz ubuntu packages 2020-03-30 13:50:20 +05:30
d90cd153ee Refactor PHP setup on linux 2020-03-28 12:49:55 +05:30
3376371dd8 Bump minimum Xdebug version 2020-03-28 09:42:02 +05:30
a2b261d79a Add support to configure GitHub OAuth token in composer 2020-03-25 07:44:38 +05:30
6c93dbd391 cleanup 2020-03-25 07:31:36 +05:30
f58dc6eca1 Update all lists 2020-03-20 19:09:27 +05:30
5326f2302f Merge pull request #203 from shivammathur/develop
2.1.3
2020-03-18 16:26:15 +05:30
b9a78a31fb Bump version to 2.1.3 2020-03-18 16:26:11 +05:30
ba69b25cab Install PhpManager from GitHub repo 2020-03-18 16:26:01 +05:30
a6533acdd4 Update FUNDING.yml 2020-03-18 13:09:15 +05:30
d3b37e3d0d Add SECURITY.md 2020-03-18 13:09:07 +05:30
f3a1262ff6 Fix db extensions 2020-03-16 08:13:25 +05:30
933abd531a Merge pull request #201 from shivammathur/develop
2.1.2
2020-03-14 15:29:33 +05:30
67ed7f234b Bump version to 2.1.2 2020-03-14 15:04:10 +05:30
f90accffb3 Change case in README 2020-03-14 14:58:34 +05:30
93441b70bf [Security] Bump acorn from 6.4.0 to 6.4.1
Bumps [acorn](https://github.com/acornjs/acorn) from 6.4.0 to 6.4.1. **This update includes a security fix.**
- [Release notes](https://github.com/acornjs/acorn/releases)
- [Commits](https://github.com/acornjs/acorn/compare/6.4.0...6.4.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-03-14 14:58:18 +05:30
67f23b6380 Improve code quality 2020-03-14 14:57:21 +05:30
2937ad6e7a Improve extension support 2020-03-14 14:55:28 +05:30
a5e5d07fcb Merge pull request #199 from shivammathur/develop
2.1.1
2020-03-14 14:48:42 +05:30
30d8b321f4 Bump version to 2.1.1 2020-03-14 14:48:27 +05:30
405e57e429 Switch to macports based builds for old PHP on darwin 2020-03-08 08:10:10 +05:30
58f376b118 Fix caching PDO extensions on linux 2020-03-07 17:00:39 +05:30
24 changed files with 2001 additions and 1769 deletions

View File

@ -17,7 +17,6 @@
"camelcase": "off", "camelcase": "off",
"require-atomic-updates": "off", "require-atomic-updates": "off",
"@typescript-eslint/ban-ts-ignore": "off", "@typescript-eslint/ban-ts-ignore": "off",
"@typescript-eslint/camelcase": "off", "@typescript-eslint/camelcase": "off"
"@typescript-eslint/no-unused-vars": "off"
} }
} }

2
.github/FUNDING.yml vendored
View File

@ -1,6 +1,6 @@
# These are supported funding model platforms # These are supported funding model platforms
github: shivammathur tidelift: "npm/setup-php"
community_bridge: setup-php community_bridge: setup-php
issuehunt: shivammathur issuehunt: shivammathur
patreon: shivammathur patreon: shivammathur

30
.github/SECURITY.md vendored Normal file
View File

@ -0,0 +1,30 @@
# Security Policy
## Supported Versions
The following versions of this project are supported for security updates.
| Version | Supported |
| ------- | ------------------ |
| 1.8.x | :white_check_mark: |
| 2.1.x | :white_check_mark: |
## Supported PHP Versions
This security policy only applies to the latest patches of the following PHP versions.
| Version | Supported |
| ------- | ------------------ |
| 7.2 | :white_check_mark: |
| 7.3 | :white_check_mark: |
| 7.4 | :white_check_mark: |
| 8.0 | :white_check_mark: |
## Reporting a Vulnerability
If you have found any issues that might have security implications in the versions supported, please send a report privately to [contact@shivammathur.com](mailto:contact@shivammathur.com)
Do not report security reports publicly.
## Tidelift
If you use this GitHub Action through a Tidelift subscription, please refer to [https://tidelift.com/security](https://tidelift.com/security).

View File

@ -28,8 +28,8 @@ jobs:
operating-system: [ubuntu-latest, windows-latest, macos-latest] operating-system: [ubuntu-latest, windows-latest, macos-latest]
php-versions: ['8.0'] php-versions: ['8.0']
env: env:
extensions: xml, opcache, xdebug, pcov extensions: xml, opcache, pcov
key: cache-v1 key: cache-v2
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v2 uses: actions/checkout@v2

View File

@ -27,7 +27,7 @@ jobs:
php-versions: ['5.3', '5.4', '5.5', '5.6', '7.0', '7.1', '7.2', '7.3', '7.4'] php-versions: ['5.3', '5.4', '5.5', '5.6', '7.0', '7.1', '7.2', '7.3', '7.4']
env: env:
extensions: xml, opcache, xdebug, pcov extensions: xml, opcache, xdebug, pcov
key: cache-v1 key: cache-v2
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v2 uses: actions/checkout@v2

View File

@ -36,6 +36,7 @@ Setup PHP with required extensions, php.ini configuration, code-coverage support
- [Cache Extensions](#cache-extensions) - [Cache Extensions](#cache-extensions)
- [Cache Composer Dependencies](#cache-composer-dependencies) - [Cache Composer Dependencies](#cache-composer-dependencies)
- [Cache Node.js Dependencies](#cache-nodejs-dependencies) - [Cache Node.js Dependencies](#cache-nodejs-dependencies)
- [Composer GitHub OAuth](#composer-github-oauth)
- [Problem Matchers](#problem-matchers) - [Problem Matchers](#problem-matchers)
- [Examples](#examples) - [Examples](#examples)
- [License](#scroll-license) - [License](#scroll-license)
@ -68,7 +69,7 @@ Setup PHP with required extensions, php.ini configuration, code-coverage support
|Windows Server 2019|`windows-latest` or `windows-2019`| |Windows Server 2019|`windows-latest` or `windows-2019`|
|Ubuntu 18.04|`ubuntu-latest` or `ubuntu-18.04`| |Ubuntu 18.04|`ubuntu-latest` or `ubuntu-18.04`|
|Ubuntu 16.04|`ubuntu-16.04`| |Ubuntu 16.04|`ubuntu-16.04`|
|macOS X Catalina 10.15|`macos-latest` or `macOS-10.15`| |macOS X Catalina 10.15|`macos-latest` or `macos-10.15`|
## :heavy_plus_sign: PHP Extension Support ## :heavy_plus_sign: PHP Extension Support
- On `ubuntu` by default extensions which are available as a package can be installed. PECL extensions if not available as a package can be installed by specifying `pecl` in the tools input. - On `ubuntu` by default extensions which are available as a package can be installed. PECL extensions if not available as a package can be installed by specifying `pecl` in the tools input.
@ -430,6 +431,19 @@ If your project has node.js dependencies, you can persist npm's or yarn's cache
**Note:** Please do not cache `node_modules` directory as that will have side-effects. **Note:** Please do not cache `node_modules` directory as that will have side-effects.
### Composer GitHub OAuth
If you have a number of workflows which setup multiple tools or have many composer dependencies, you might hit the GitHub's rate limit for composer. To avoid that you can add a `OAuth` token to the composer's config by setting `COMPOSER_TOKEN` environment variable. You can use [`GITHUB_TOKEN`](https://help.github.com/en/actions/configuring-and-managing-workflows/authenticating-with-the-github_token "GITHUB_TOKEN documentation") secret for this purpose.
```yaml
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '7.4'
env:
COMPOSER_TOKEN: ${{ secrets.GITHUB_TOKEN }}
```
### Problem Matchers ### Problem Matchers
#### PHP #### PHP

View File

@ -3,17 +3,31 @@ import * as extensions from '../src/extensions';
describe('Extension tests', () => { describe('Extension tests', () => {
it('checking addExtensionOnWindows', async () => { it('checking addExtensionOnWindows', async () => {
let win32: string = await extensions.addExtension( let win32: string = await extensions.addExtension(
'xdebug, pcov, phalcon4, ast-beta, grpc-1.2.3, inotify-1.2.3alpha2', 'Xdebug, pcov, sqlite, phalcon4, ast-beta, grpc-1.2.3, inotify-1.2.3alpha2',
'7.4', '7.4',
'win32' 'win32'
); );
expect(win32).toContain('Add-Extension xdebug'); expect(win32).toContain('Add-Extension xdebug');
expect(win32).toContain('Add-Extension pcov'); expect(win32).toContain('Add-Extension pcov');
expect(win32).toContain('Add-Extension sqlite3');
expect(win32).toContain('phalcon.ps1 phalcon4'); expect(win32).toContain('phalcon.ps1 phalcon4');
expect(win32).toContain('Add-Extension ast beta'); expect(win32).toContain('Add-Extension ast beta');
expect(win32).toContain('Add-Extension grpc stable 1.2.3'); expect(win32).toContain('Add-Extension grpc stable 1.2.3');
expect(win32).toContain('Add-Extension inotify alpha 1.2.3'); expect(win32).toContain('Add-Extension inotify alpha 1.2.3');
win32 = await extensions.addExtension('mysql', '7.4', 'win32');
expect(win32).toContain('Add-Extension mysqli');
expect(win32).toContain('Add-Extension mysqlnd');
win32 = await extensions.addExtension('mysql', '8.0', 'win32');
expect(win32).toContain('Add-Extension mysqli');
expect(win32).toContain('Add-Extension mysqlnd');
win32 = await extensions.addExtension('mysql', '5.5', 'win32');
expect(win32).toContain('Add-Extension mysql');
expect(win32).toContain('Add-Extension mysqli');
expect(win32).toContain('Add-Extension mysqlnd');
win32 = await extensions.addExtension( win32 = await extensions.addExtension(
'phalcon3, does_not_exist', 'phalcon3, does_not_exist',
'7.2', '7.2',
@ -35,15 +49,20 @@ describe('Extension tests', () => {
it('checking addExtensionOnLinux', async () => { it('checking addExtensionOnLinux', async () => {
let linux: string = await extensions.addExtension( let linux: string = await extensions.addExtension(
'xdebug, pcov, ast-beta, xdebug-alpha, grpc-1.2.3', 'Xdebug, pcov, sqlite, ast, uopz, ast-beta, pdo_mysql, pdo-odbc, xdebug-alpha, grpc-1.2.3',
'7.4', '7.4',
'linux' 'linux'
); );
expect(linux).toContain('update_extension xdebug 2.9.1'); expect(linux).toContain('update_extension xdebug 2.9.3');
expect(linux).toContain('sudo $debconf_fix apt-get install -y php7.4-pcov');
expect(linux).toContain( expect(linux).toContain(
'sudo DEBIAN_FRONTEND=noninteractive apt-get install -y php7.4-pcov' 'sudo $debconf_fix apt-get install -y php7.4-sqlite3'
); );
expect(linux).toContain('sudo $debconf_fix apt-get install -y php-ast');
expect(linux).toContain('sudo $debconf_fix apt-get install -y php-uopz');
expect(linux).toContain('add_unstable_extension ast beta extension'); expect(linux).toContain('add_unstable_extension ast beta extension');
expect(linux).toContain('add_pdo_extension mysql');
expect(linux).toContain('add_pdo_extension odbc');
expect(linux).toContain('add_pecl_extension grpc 1.2.3 extension'); expect(linux).toContain('add_pecl_extension grpc 1.2.3 extension');
expect(linux).toContain( expect(linux).toContain(
'add_unstable_extension xdebug alpha zend_extension' 'add_unstable_extension xdebug alpha zend_extension'
@ -79,12 +98,13 @@ describe('Extension tests', () => {
it('checking addExtensionOnDarwin', async () => { it('checking addExtensionOnDarwin', async () => {
let darwin: string = await extensions.addExtension( let darwin: string = await extensions.addExtension(
'xdebug, pcov, ast-beta, grpc-1.2.3', 'Xdebug, pcov, sqlite, ast-beta, grpc-1.2.3',
'7.2', '7.2',
'darwin' 'darwin'
); );
expect(darwin).toContain('sudo pecl install -f xdebug'); expect(darwin).toContain('sudo pecl install -f xdebug');
expect(darwin).toContain('sudo pecl install -f pcov'); expect(darwin).toContain('sudo pecl install -f pcov');
expect(darwin).toContain('sudo pecl install -f sqlite3');
expect(darwin).toContain('add_unstable_extension ast beta extension'); expect(darwin).toContain('add_unstable_extension ast beta extension');
expect(darwin).toContain('add_pecl_extension grpc 1.2.3 extension'); expect(darwin).toContain('add_pecl_extension grpc 1.2.3 extension');

View File

@ -1,16 +1,6 @@
import * as io from '@actions/io'; import * as io from '@actions/io';
import * as path from 'path';
import * as fs from 'fs';
import * as matchers from '../src/matchers'; import * as matchers from '../src/matchers';
async function cleanup(path: string): Promise<void> {
fs.unlink(path, error => {
if (error) {
console.log(error);
}
});
}
jest.mock('@actions/io'); jest.mock('@actions/io');
describe('Matchers', () => { describe('Matchers', () => {

View File

@ -55,12 +55,12 @@ describe('Utils tests', () => {
path.join(__dirname, '../src/scripts/win32.ps1'), path.join(__dirname, '../src/scripts/win32.ps1'),
'utf8' 'utf8'
); );
expect(await utils.readScript('darwin.sh', '7.4', 'darwin')).toBe(darwin); expect(await utils.readScript('darwin.sh')).toBe(darwin);
expect(await utils.readScript('darwin.sh', '7.3', 'darwin')).toBe(darwin); expect(await utils.readScript('darwin.sh')).toBe(darwin);
expect(await utils.readScript('linux.sh', '7.4', 'linux')).toBe(linux); expect(await utils.readScript('linux.sh')).toBe(linux);
expect(await utils.readScript('linux.sh', '7.3', 'linux')).toBe(linux); expect(await utils.readScript('linux.sh')).toBe(linux);
expect(await utils.readScript('win32.ps1', '7.4', 'win32')).toBe(win32); expect(await utils.readScript('win32.ps1')).toBe(win32);
expect(await utils.readScript('win32.ps1', '7.3', 'win32')).toBe(win32); expect(await utils.readScript('win32.ps1')).toBe(win32);
}); });
it('checking writeScripts', async () => { it('checking writeScripts', async () => {

698
dist/index.js vendored

File diff suppressed because it is too large Load Diff

1412
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
{ {
"name": "setup-php", "name": "setup-php",
"version": "2.1.0", "version": "2.1.4",
"private": false, "private": false,
"description": "Setup PHP for use with GitHub Actions", "description": "Setup PHP for use with GitHub Actions",
"main": "dist/index.js", "main": "dist/index.js",
@ -30,21 +30,21 @@
"fs": "0.0.1-security" "fs": "0.0.1-security"
}, },
"devDependencies": { "devDependencies": {
"@types/jest": "^25.1.3", "@types/jest": "^25.2.1",
"@types/node": "^13.7.7", "@types/node": "^13.11.1",
"@typescript-eslint/eslint-plugin": "^2.21.0", "@typescript-eslint/eslint-plugin": "^2.27.0",
"@typescript-eslint/parser": "^2.21.0", "@typescript-eslint/parser": "^2.27.0",
"@zeit/ncc": "^0.21.1", "@zeit/ncc": "^0.22.1",
"eslint": "^6.8.0", "eslint": "^6.8.0",
"eslint-config-prettier": "^6.10.0", "eslint-config-prettier": "^6.10.1",
"eslint-plugin-import": "^2.20.1", "eslint-plugin-import": "^2.20.2",
"eslint-plugin-jest": "^23.8.1", "eslint-plugin-jest": "^23.8.2",
"eslint-plugin-prettier": "^3.1.2", "eslint-plugin-prettier": "^3.1.2",
"husky": "^4.2.3", "husky": "^4.2.3",
"jest": "^25.1.0", "jest": "^25.3.0",
"jest-circus": "^25.1.0", "jest-circus": "^25.3.0",
"prettier": "^1.19.1", "prettier": "^1.19.1",
"ts-jest": "^25.2.1", "ts-jest": "^25.3.1",
"typescript": "^3.8.3" "typescript": "^3.8.3"
}, },
"husky": { "husky": {

Binary file not shown.

Binary file not shown.

View File

@ -44,6 +44,7 @@ export async function addINIValuesWindows(
* *
* @param ini_values_csv * @param ini_values_csv
* @param os_version * @param os_version
* @param no_step
*/ */
export async function addINIValues( export async function addINIValues(
ini_values_csv: string, ini_values_csv: string,

View File

@ -16,18 +16,18 @@ export async function addExtensionDarwin(
const extensions: Array<string> = await utils.extensionArray(extension_csv); const extensions: Array<string> = await utils.extensionArray(extension_csv);
let script = '\n'; let script = '\n';
await utils.asyncForEach(extensions, async function(extension: string) { await utils.asyncForEach(extensions, async function(extension: string) {
extension = extension.toLowerCase();
const version_extension: string = version + extension; const version_extension: string = version + extension;
const [ext_name, ext_version]: string[] = extension.split('-'); const [ext_name, ext_version]: string[] = extension.split('-');
const prefix = await utils.getExtensionPrefix(ext_name); const ext_prefix = await utils.getExtensionPrefix(ext_name);
let install_command = ''; const command_prefix = 'sudo pecl install -f ';
let command = '';
switch (true) { switch (true) {
// match 5.3blackfire...5.6blackfire, 7.0blackfire...7.4blackfire // match 5.3blackfire...5.6blackfire, 7.0blackfire...7.4blackfire
// match 5.3blackfire-1.31.0...5.6blackfire-1.31.0, 7.0blackfire-1.31.0...7.4blackfire-1.31.0 // match 5.3blackfire-1.31.0...5.6blackfire-1.31.0, 7.0blackfire-1.31.0...7.4blackfire-1.31.0
case /^(5\.[3-6]|7\.[0-4])blackfire(-\d+\.\d+\.\d+)?$/.test( case /^(5\.[3-6]|7\.[0-4])blackfire(-\d+\.\d+\.\d+)?$/.test(
version_extension version_extension
): ):
install_command = command =
'bash ' + 'bash ' +
path.join(__dirname, '../src/scripts/ext/blackfire_darwin.sh') + path.join(__dirname, '../src/scripts/ext/blackfire_darwin.sh') +
' ' + ' ' +
@ -35,7 +35,7 @@ export async function addExtensionDarwin(
' ' + ' ' +
(await utils.getBlackfireVersion(ext_version)); (await utils.getBlackfireVersion(ext_version));
break; break;
// match pre-release versions // match pre-release versions. For example - xdebug-beta
case /.*-(beta|alpha|devel|snapshot)/.test(version_extension): case /.*-(beta|alpha|devel|snapshot)/.test(version_extension):
script += script +=
'\nadd_unstable_extension ' + '\nadd_unstable_extension ' +
@ -43,35 +43,54 @@ export async function addExtensionDarwin(
' ' + ' ' +
ext_version + ext_version +
' ' + ' ' +
prefix; ext_prefix;
return; return;
// match exact versions // match semver
case /.*-\d+\.\d+\.\d+.*/.test(version_extension): case /.*-\d+\.\d+\.\d+.*/.test(version_extension):
script += script +=
'\nadd_pecl_extension ' + ext_name + ' ' + ext_version + ' ' + prefix; '\nadd_pecl_extension ' +
ext_name +
' ' +
ext_version +
' ' +
ext_prefix;
return; return;
// match 5.3xdebug
case /5\.3xdebug/.test(version_extension): case /5\.3xdebug/.test(version_extension):
install_command = 'sudo pecl install -f xdebug-2.2.7' + pipe; command = command_prefix + 'xdebug-2.2.7' + pipe;
break; break;
// match 5.4xdebug
case /5\.4xdebug/.test(version_extension): case /5\.4xdebug/.test(version_extension):
install_command = 'sudo pecl install -f xdebug-2.4.1' + pipe; command = command_prefix + 'xdebug-2.4.1' + pipe;
break; break;
// match 5.5xdebug and 5.6xdebug
case /5\.[5-6]xdebug/.test(version_extension): case /5\.[5-6]xdebug/.test(version_extension):
install_command = 'sudo pecl install -f xdebug-2.5.5' + pipe; command = command_prefix + 'xdebug-2.5.5' + pipe;
break; break;
// match 7.0redis
case /7\.0xdebug/.test(version_extension): case /7\.0xdebug/.test(version_extension):
install_command = 'sudo pecl install -f xdebug-2.9.0' + pipe; command = command_prefix + 'xdebug-2.9.0' + pipe;
break; break;
// match 5.6redis
case /5\.6redis/.test(version_extension): case /5\.6redis/.test(version_extension):
install_command = 'sudo pecl install -f redis-2.2.8' + pipe; command = command_prefix + 'redis-2.2.8' + pipe;
break; break;
case /[5-9]\.\dimagick/.test(version_extension): // match imagick
install_command = case /^imagick$/.test(extension):
command =
'brew install pkg-config imagemagick' + 'brew install pkg-config imagemagick' +
pipe + pipe +
' && sudo pecl install -f imagick' + ' && ' +
command_prefix +
'imagick' +
pipe; pipe;
break; break;
// match sqlite
case /^sqlite$/.test(extension):
extension = 'sqlite3';
command = command_prefix + extension + pipe;
break;
// match 7.0phalcon3...7.3phalcon3 and 7.2phalcon4...7.4phalcon4
case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$/.test(version_extension): case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$/.test(version_extension):
script += script +=
'sh ' + 'sh ' +
@ -82,16 +101,11 @@ export async function addExtensionDarwin(
version; version;
return; return;
default: default:
install_command = 'sudo pecl install -f ' + extension + pipe; command = command_prefix + extension + pipe;
break; break;
} }
script += script +=
'\nadd_extension ' + '\nadd_extension ' + extension + ' "' + command + '" ' + ext_prefix;
extension +
' "' +
install_command +
'" ' +
(await utils.getExtensionPrefix(extension));
}); });
return script; return script;
} }
@ -101,17 +115,14 @@ export async function addExtensionDarwin(
* *
* @param extension_csv * @param extension_csv
* @param version * @param version
* @param pipe
*/ */
export async function addExtensionWindows( export async function addExtensionWindows(
extension_csv: string, extension_csv: string,
version: string, version: string
pipe: string
): Promise<string> { ): Promise<string> {
const extensions: Array<string> = await utils.extensionArray(extension_csv); const extensions: Array<string> = await utils.extensionArray(extension_csv);
let script = '\n'; let script = '\n';
await utils.asyncForEach(extensions, async function(extension: string) { await utils.asyncForEach(extensions, async function(extension: string) {
extension = extension.toLowerCase();
const [ext_name, ext_version]: string[] = extension.split('-'); const [ext_name, ext_version]: string[] = extension.split('-');
const version_extension: string = version + extension; const version_extension: string = version + extension;
let matches: RegExpExecArray; let matches: RegExpExecArray;
@ -129,23 +140,42 @@ export async function addExtensionWindows(
' ' + ' ' +
(await utils.getBlackfireVersion(ext_version)); (await utils.getBlackfireVersion(ext_version));
return; return;
// match pre-release versions // match pre-release versions. For example - xdebug-beta
case /.*-(beta|alpha|devel|snapshot)/.test(version_extension): case /.*-(beta|alpha|devel|snapshot)/.test(version_extension):
script += '\nAdd-Extension ' + ext_name + ' ' + ext_version; script += '\nAdd-Extension ' + ext_name + ' ' + ext_version;
break; break;
// match exact versions // match semver without state
case /.*-\d+\.\d+\.\d+$/.test(version_extension): case /.*-\d+\.\d+\.\d+$/.test(version_extension):
script += '\nAdd-Extension ' + ext_name + ' stable ' + ext_version; script += '\nAdd-Extension ' + ext_name + ' stable ' + ext_version;
return; return;
case /.*-(\d+\.\d+\.\d)+(beta|alpha|devel|snapshot)\d*/.test( // match semver with state
case /.*-(\d+\.\d+\.\d)(beta|alpha|devel|snapshot)\d*/.test(
version_extension version_extension
): ):
matches = /.*-(\d+\.\d+\.\d)+(beta|alpha|devel|snapshot)\d*/.exec( matches = /.*-(\d+\.\d+\.\d)(beta|alpha|devel|snapshot)\d*/.exec(
version_extension version_extension
) as RegExpExecArray; ) as RegExpExecArray;
script += script +=
'\nAdd-Extension ' + ext_name + ' ' + matches[2] + ' ' + matches[1]; '\nAdd-Extension ' + ext_name + ' ' + matches[2] + ' ' + matches[1];
return; return;
// match 5.3mysql..5.6mysql
// match 5.3mysqli..5.6mysqli
// match 5.3mysqlnd..5.6mysqlnd
case /^5\.\d(mysql|mysqli|mysqlnd)$/.test(version_extension):
script +=
'\nAdd-Extension mysql\nAdd-Extension mysqli\nAdd-Extension mysqlnd';
break;
// match 7.0mysql..8.0mysql
// match 7.0mysqli..8.0mysqli
// match 7.0mysqlnd..8.0mysqlnd
case /[7-8]\.\d(mysql|mysqli|mysqlnd)$/.test(version_extension):
script += '\nAdd-Extension mysqli\nAdd-Extension mysqlnd';
break;
// match sqlite
case /^sqlite$/.test(extension):
extension = 'sqlite3';
script += '\nAdd-Extension ' + extension;
break;
// match 7.0phalcon3...7.3phalcon3 and 7.2phalcon4...7.4phalcon4 // match 7.0phalcon3...7.3phalcon3 and 7.2phalcon4...7.4phalcon4
case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$/.test(version_extension): case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$/.test(version_extension):
script += script +=
@ -180,18 +210,18 @@ export async function addExtensionLinux(
const extensions: Array<string> = await utils.extensionArray(extension_csv); const extensions: Array<string> = await utils.extensionArray(extension_csv);
let script = '\n'; let script = '\n';
await utils.asyncForEach(extensions, async function(extension: string) { await utils.asyncForEach(extensions, async function(extension: string) {
extension = extension.toLowerCase();
const version_extension: string = version + extension; const version_extension: string = version + extension;
const [ext_name, ext_version]: string[] = extension.split('-'); const [ext_name, ext_version]: string[] = extension.split('-');
const prefix = await utils.getExtensionPrefix(ext_name); const ext_prefix = await utils.getExtensionPrefix(ext_name);
let install_command = ''; const command_prefix = 'sudo $debconf_fix apt-get install -y php';
let command = '';
switch (true) { switch (true) {
// match 5.3blackfire...5.6blackfire, 7.0blackfire...7.4blackfire // match 5.3blackfire...5.6blackfire, 7.0blackfire...7.4blackfire
// match 5.3blackfire-1.31.0...5.6blackfire-1.31.0, 7.0blackfire-1.31.0...7.4blackfire-1.31.0 // match 5.3blackfire-1.31.0...5.6blackfire-1.31.0, 7.0blackfire-1.31.0...7.4blackfire-1.31.0
case /^(5\.[3-6]|7\.[0-4])blackfire(-\d+\.\d+\.\d+)?$/.test( case /^(5\.[3-6]|7\.[0-4])blackfire(-\d+\.\d+\.\d+)?$/.test(
version_extension version_extension
): ):
install_command = command =
'bash ' + 'bash ' +
path.join(__dirname, '../src/scripts/ext/blackfire.sh') + path.join(__dirname, '../src/scripts/ext/blackfire.sh') +
' ' + ' ' +
@ -199,7 +229,7 @@ export async function addExtensionLinux(
' ' + ' ' +
(await utils.getBlackfireVersion(ext_version)); (await utils.getBlackfireVersion(ext_version));
break; break;
// match pre-release versions // match pre-release versions. For example - xdebug-beta
case /.*-(beta|alpha|devel|snapshot)/.test(version_extension): case /.*-(beta|alpha|devel|snapshot)/.test(version_extension):
script += script +=
'\nadd_unstable_extension ' + '\nadd_unstable_extension ' +
@ -207,16 +237,21 @@ export async function addExtensionLinux(
' ' + ' ' +
ext_version + ext_version +
' ' + ' ' +
prefix; ext_prefix;
return; return;
// match exact versions // match semver versions
case /.*-\d+\.\d+\.\d+.*/.test(version_extension): case /.*-\d+\.\d+\.\d+.*/.test(version_extension):
script += script +=
'\nadd_pecl_extension ' + ext_name + ' ' + ext_version + ' ' + prefix; '\nadd_pecl_extension ' +
ext_name +
' ' +
ext_version +
' ' +
ext_prefix;
return; return;
// match 5.6gearman..7.4gearman // match 5.6gearman..7.4gearman
case /^((5\.6)|(7\.[0-4]))gearman$/.test(version_extension): case /^((5\.6)|(7\.[0-4]))gearman$/.test(version_extension):
install_command = command =
'sh ' + 'sh ' +
path.join(__dirname, '../src/scripts/ext/gearman.sh') + path.join(__dirname, '../src/scripts/ext/gearman.sh') +
' ' + ' ' +
@ -233,25 +268,34 @@ export async function addExtensionLinux(
' ' + ' ' +
version; version;
return; return;
// match 7.0xdebug..7.4xdebug // match 7.1xdebug..7.4xdebug
case /^7\.[0-4]xdebug$/.test(version_extension): case /^7\.[1-4]xdebug$/.test(version_extension):
script += script +=
'\nupdate_extension xdebug 2.9.1' + '\nupdate_extension xdebug 2.9.3' +
pipe + pipe +
'\n' + '\n' +
(await utils.addLog('$tick', 'xdebug', 'Enabled', 'linux')); (await utils.addLog('$tick', 'xdebug', 'Enabled', 'linux'));
return; return;
// match pdo extensions
case /.*pdo[_-].*/.test(version_extension):
extension = extension.replace('pdo_', '').replace('pdo-', '');
script += '\nadd_pdo_extension ' + extension;
return;
// match ast and uopz
case /^(ast|uopz)$/.test(extension):
command = command_prefix + '-' + extension + pipe;
break;
// match sqlite
case /^sqlite$/.test(extension):
extension = 'sqlite3';
command = command_prefix + version + '-' + extension + pipe;
break;
default: default:
install_command = command = command_prefix + version + '-' + extension + pipe;
'sudo DEBIAN_FRONTEND=noninteractive apt-get install -y php' +
version +
'-' +
extension.replace('pdo_', '').replace('pdo-', '') +
pipe;
break; break;
} }
script += script +=
'\nadd_extension ' + extension + ' "' + install_command + '" ' + prefix; '\nadd_extension ' + extension + ' "' + command + '" ' + ext_prefix;
}); });
return script; return script;
} }
@ -262,7 +306,7 @@ export async function addExtensionLinux(
* @param extension_csv * @param extension_csv
* @param version * @param version
* @param os_version * @param os_version
* @param log_prefix * @param no_step
*/ */
export async function addExtension( export async function addExtension(
extension_csv: string, extension_csv: string,
@ -284,7 +328,7 @@ export async function addExtension(
switch (os_version) { switch (os_version) {
case 'win32': case 'win32':
return script + (await addExtensionWindows(extension_csv, version, pipe)); return script + (await addExtensionWindows(extension_csv, version));
case 'darwin': case 'darwin':
return script + (await addExtensionDarwin(extension_csv, version, pipe)); return script + (await addExtensionDarwin(extension_csv, version, pipe));
case 'linux': case 'linux':

View File

@ -35,7 +35,7 @@ export async function build(
tools_csv = 'pecl, ' + tools_csv; tools_csv = 'pecl, ' + tools_csv;
} }
let script: string = await utils.readScript(filename, version, os_version); let script: string = await utils.readScript(filename);
script += await tools.addTools(tools_csv, version, os_version); script += await tools.addTools(tools_csv, version, os_version);
if (extension_csv) { if (extension_csv) {

View File

@ -27,7 +27,11 @@ remove_extension() {
# Function to test if extension is loaded # Function to test if extension is loaded
check_extension() { check_extension() {
extension=$1 extension=$1
if [ "$extension" != "mysql" ]; then
php -m | grep -i -q -w "$extension" php -m | grep -i -q -w "$extension"
else
php -m | grep -i -q "$extension"
fi
} }
# Fuction to get the PECL version # Fuction to get the PECL version
@ -74,11 +78,10 @@ add_extension() {
elif check_extension "$extension"; then elif check_extension "$extension"; then
add_log "$tick" "$extension" "Enabled" add_log "$tick" "$extension" "Enabled"
elif ! check_extension "$extension"; then elif ! check_extension "$extension"; then
(
eval "$install_command" >/dev/null 2>&1 && eval "$install_command" >/dev/null 2>&1 &&
check_extension "$extension" && if [[ "$version" =~ $old_versions ]]; then echo "$prefix=$ext_dir/$extension.so" >>"$ini_file"; fi
add_log "$tick" "$extension" "Installed and enabled" (check_extension "$extension" && add_log "$tick" "$extension" "Installed and enabled") ||
) || add_log "$cross" "$extension" "Could not install $extension on PHP $semver" add_log "$cross" "$extension" "Could not install $extension on PHP $semver"
fi fi
} }
@ -105,6 +108,9 @@ add_tool() {
sudo chmod a+x "$tool_path" sudo chmod a+x "$tool_path"
if [ "$tool" = "composer" ]; then if [ "$tool" = "composer" ]; then
composer -q global config process-timeout 0 composer -q global config process-timeout 0
if [ -n "$COMPOSER_TOKEN" ]; then
composer -q global config github-oauth.github.com "$COMPOSER_TOKEN"
fi
elif [ "$tool" = "phive" ]; then elif [ "$tool" = "phive" ]; then
add_extension curl "sudo pecl install -f curl" extension >/dev/null 2>&1 add_extension curl "sudo pecl install -f curl" extension >/dev/null 2>&1
add_extension mbstring "sudo pecl install -f mbstring" extension >/dev/null 2>&1 add_extension mbstring "sudo pecl install -f mbstring" extension >/dev/null 2>&1
@ -159,19 +165,36 @@ add_pecl() {
add_log "$tick" "PECL" "Added" add_log "$tick" "PECL" "Added"
} }
# Function to fetch updated formulas
update_formulae() {
brew_dir=$(brew --prefix)/Homebrew/Library/Taps/homebrew/homebrew-core/Formula
for formula in httpd pkg-config apr apr-util argon2 aspell autoconf bison curl-openssl freetds freetype gettext glib gmp icu4c jpeg krb5 libffi libpng libpq libsodium libzip oniguruma openldap openssl@1.1 re2c sqlite tidyp unixodbc webp; do
sudo curl -o "$brew_dir"/"$formula".rb -sSL https://raw.githubusercontent.com/Homebrew/homebrew-core/master/Formula/"$formula".rb &
to_wait+=( $! )
done
wait "${to_wait[@]}"
}
# Function to setup PHP >=5.6 # Function to setup PHP >=5.6
setup_php() { setup_php() {
action=$1 action=$1
export HOMEBREW_NO_INSTALL_CLEANUP=TRUE >/dev/null 2>&1 if [ "$version" = "8.0" ]; then
brew tap shivammathur/homebrew-php >/dev/null 2>&1 update_formulae
brew "$action" shivammathur/php/php@"$version" >/dev/null 2>&1 fi
brew link --force --overwrite php@"$version" >/dev/null 2>&1 export HOMEBREW_NO_INSTALL_CLEANUP=TRUE
brew tap shivammathur/homebrew-php
if [ "$version" = "5.6" ] || [ "$version" = "7.0" ]; then
brew install https://raw.githubusercontent.com/shivammathur/homebrew-php/master/Formula/icu4c.rb --force
fi
brew "$action" shivammathur/php/php@"$version"
brew link --force --overwrite php@"$version"
} }
# Variables # Variables
tick="✓" tick="✓"
cross="✗" cross="✗"
version=$1 version=$1
nodot_version=${1/./}
old_versions="5.[3-5]" old_versions="5.[3-5]"
tool_path_dir="/usr/local/bin" tool_path_dir="/usr/local/bin"
existing_version=$(php-config --version | cut -c 1-3) existing_version=$(php-config --version | cut -c 1-3)
@ -180,14 +203,13 @@ existing_version=$(php-config --version | cut -c 1-3)
# Setup PHP # Setup PHP
step_log "Setup PHP" step_log "Setup PHP"
if [[ "$version" =~ $old_versions ]]; then if [[ "$version" =~ $old_versions ]]; then
script="https://github.com/shivammathur/php5-darwin/releases/latest/download/install.sh" curl -sSL https://github.com/shivammathur/php5-darwin/releases/latest/download/install.sh | bash -s "$nodot_version" >/dev/null 2>&1 &&
curl -sSL "$script" | bash -s "$version" >/dev/null 2>&1 &&
status="Installed" status="Installed"
elif [ "$existing_version" != "$version" ]; then elif [ "$existing_version" != "$version" ]; then
setup_php "install" setup_php "install" >/dev/null 2>&1
status="Installed" status="Installed"
elif [ "$existing_version" = "$version" ] && [ "$update" = "true" ]; then elif [ "$existing_version" = "$version" ] && [ "$update" = "true" ]; then
setup_php "upgrade" setup_php "upgrade" >/dev/null 2>&1
status="Updated to" status="Updated to"
else else
status="Found" status="Found"
@ -195,10 +217,9 @@ fi
ini_file=$(php -d "date.timezone=UTC" --ini | grep "Loaded Configuration" | sed -e "s|.*:s*||" | sed "s/ //g") ini_file=$(php -d "date.timezone=UTC" --ini | grep "Loaded Configuration" | sed -e "s|.*:s*||" | sed "s/ //g")
sudo chmod 777 "$ini_file" "$tool_path_dir" sudo chmod 777 "$ini_file" "$tool_path_dir"
echo "date.timezone=UTC" >>"$ini_file" echo "date.timezone=UTC" >>"$ini_file"
echo "detect_unicode=Off" >>"$ini_file" ext_dir=$(php -i | grep -Ei "extension_dir => /" | sed -e "s|.*=> s*||")
ext_dir=$(php -i | grep -Ei "extension_dir => /usr" | sed -e "s|.*=> s*||")
scan_dir=$(php --ini | grep additional | sed -e "s|.*: s*||") scan_dir=$(php --ini | grep additional | sed -e "s|.*: s*||")
sudo mkdir -p "$ext_dir" sudo mkdir -p "$ext_dir"
semver=$(php -v | head -n 1 | cut -f 2 -d ' ') semver=$(php -v | head -n 1 | cut -f 2 -d ' ')
configure_pecl if [[ ! "$version" =~ $old_versions ]]; then configure_pecl; fi
add_log "$tick" "PHP" "$status PHP $semver" add_log "$tick" "PHP" "$status PHP $semver"

View File

@ -19,12 +19,7 @@ add_log() {
# Function to update php ppa # Function to update php ppa
update_ppa() { update_ppa() {
if [ "$ppa_updated" = "false" ]; then if [ "$ppa_updated" = "false" ]; then
if [[ "$version" =~ $old_versions ]]; then sudo "$debconf_fix" apt-get update >/dev/null 2>&1
ppa="dotdeb-ubuntu-php*.list"
else
ppa="ondrej-ubuntu-php*.list"
fi
find /etc/apt/sources.list.d -type f -name "$ppa" -exec sudo "$debconf_fix" apt-fast update -o Dir::Etc::sourcelist="{}" ';' >/dev/null 2>&1
ppa_updated="true" ppa_updated="true"
fi fi
} }
@ -32,8 +27,9 @@ update_ppa() {
# Function to configure PECL # Function to configure PECL
configure_pecl() { configure_pecl() {
if [ "$pecl_config" = "false" ] && [ -e /usr/bin/pecl ]; then if [ "$pecl_config" = "false" ] && [ -e /usr/bin/pecl ]; then
sudo touch "$scan_dir"/99-pecl.ini >/dev/null 2>&1
for tool in pear pecl; do for tool in pear pecl; do
sudo "$tool" config-set php_ini "$ini_file" >/dev/null 2>&1 sudo "$tool" config-set php_ini "$scan_dir"/99-pecl.ini >/dev/null 2>&1
sudo "$tool" config-set auto_discover 1 >/dev/null 2>&1 sudo "$tool" config-set auto_discover 1 >/dev/null 2>&1
sudo "$tool" channel-update "$tool".php.net >/dev/null 2>&1 sudo "$tool" channel-update "$tool".php.net >/dev/null 2>&1
done done
@ -57,7 +53,11 @@ get_pecl_version() {
# Function to test if extension is loaded # Function to test if extension is loaded
check_extension() { check_extension() {
extension=$1 extension=$1
if [ "$extension" != "mysql" ]; then
php -m | grep -i -q -w "$extension" php -m | grep -i -q -w "$extension"
else
php -m | grep -i -q "$extension"
fi
} }
# Function to delete extensions # Function to delete extensions
@ -77,6 +77,32 @@ remove_extension() {
delete_extension "$extension" delete_extension "$extension"
} }
# Function to enable existing extension
enable_extension() {
if ! check_extension "$1" && [ -e "$ext_dir/$1.so" ]; then
echo "$2=$1.so" >>"$ini_file"
fi
}
# Funcion to add PDO extension
add_pdo_extension() {
pdo_ext="pdo_$1"
if check_extension "$pdo_ext"; then
add_log "$tick" "$pdo_ext" "Enabled"
else
read -r ext ext_name <<< "$1 $1"
sudo rm -rf "$scan_dir"/*pdo.ini >/dev/null 2>&1 && enable_extension "pdo" "extension" >/dev/null 2>&1
if [ "$ext" = "mysql" ]; then
enable_extension "mysqlnd" "extension"
ext_name="mysqli"
fi
add_extension "$ext_name" "$apt_install php$version-$ext" "extension" >/dev/null 2>&1
enable_extension "$pdo_ext" "extension"
(check_extension "$pdo_ext" && add_log "$tick" "$pdo_ext" "Enabled") ||
add_log "$cross" "$pdo_ext" "Could not install $pdo_ext on PHP $semver"
fi
}
# Function to setup extensions # Function to setup extensions
add_extension() { add_extension() {
extension=$1 extension=$1
@ -85,11 +111,10 @@ add_extension() {
if [[ "$version" =~ $old_versions ]]; then if [[ "$version" =~ $old_versions ]]; then
install_command="update_ppa && ${install_command/5\.[4-5]-$extension/5-$extension=$release_version}" install_command="update_ppa && ${install_command/5\.[4-5]-$extension/5-$extension=$release_version}"
fi fi
if ! check_extension "$extension" && [ -e "$ext_dir/$extension.so" ]; then enable_extension "$extension" "$prefix"
echo "$prefix=$extension.so" >>"$ini_file" && add_log "$tick" "$extension" "Enabled" if check_extension "$extension"; then
elif check_extension "$extension"; then
add_log "$tick" "$extension" "Enabled" add_log "$tick" "$extension" "Enabled"
elif ! check_extension "$extension"; then else
eval "$install_command" >/dev/null 2>&1 || eval "$install_command" >/dev/null 2>&1 ||
(update_ppa && eval "$install_command" >/dev/null 2>&1) || (update_ppa && eval "$install_command" >/dev/null 2>&1) ||
sudo pecl install -f "$extension" >/dev/null 2>&1 sudo pecl install -f "$extension" >/dev/null 2>&1
@ -157,6 +182,9 @@ add_tool() {
sudo chmod a+x "$tool_path" sudo chmod a+x "$tool_path"
if [ "$tool" = "composer" ]; then if [ "$tool" = "composer" ]; then
composer -q global config process-timeout 0 composer -q global config process-timeout 0
if [ -n "$COMPOSER_TOKEN" ]; then
composer -q global config github-oauth.github.com "$COMPOSER_TOKEN"
fi
elif [ "$tool" = "cs2pr" ]; then elif [ "$tool" = "cs2pr" ]; then
sudo sed -i 's/\r$//; s/exit(9)/exit(0)/' "$tool_path" sudo sed -i 's/\r$//; s/exit(9)/exit(0)/' "$tool_path"
elif [ "$tool" = "phive" ]; then elif [ "$tool" = "phive" ]; then
@ -210,29 +238,26 @@ add_blackfire() {
# Function to setup the nightly build from master branch # Function to setup the nightly build from master branch
setup_master() { setup_master() {
update_ppa && $apt_install libzip-dev
tar_file=php_"$version"%2Bubuntu"$(lsb_release -r -s)".tar.xz tar_file=php_"$version"%2Bubuntu"$(lsb_release -r -s)".tar.xz
install_dir=~/php/"$version" install_dir=~/php/"$version"
bintray_url=https://dl.bintray.com/shivammathur/php/"$tar_file"
sudo mkdir -m 777 -p ~/php sudo mkdir -m 777 -p ~/php
update_ppa && $apt_install libicu-dev >/dev/null 2>&1 curl -o /tmp/"$tar_file" -sSL "$bintray_url"
curl -SLO https://dl.bintray.com/shivammathur/php/"$tar_file" >/dev/null 2>&1 sudo tar xf /tmp/"$tar_file" -C ~/php
sudo tar xf "$tar_file" -C ~/php >/dev/null 2>&1
rm -rf "$tar_file"
sudo ln -sf -S "$version" "$install_dir"/bin/* /usr/bin/ sudo ln -sf -S "$version" "$install_dir"/bin/* /usr/bin/
sudo ln -sf "$install_dir"/etc/php.ini /etc/php.ini sudo ln -sf "$install_dir"/etc/php.ini /etc/php.ini
} }
# Function to setup PHP 5.3, PHP 5.4 and PHP 5.5 # Function to setup PHP 5.3, PHP 5.4 and PHP 5.5
setup_old_versions() { setup_old_versions() {
( dir=php-"$version"
cd /tmp || exit tar_file="$dir".tar.xz
curl -SLO https://dl.bintray.com/shivammathur/php/php-"$version".tar.xz >/dev/null 2>&1 bintray_url=https://dl.bintray.com/shivammathur/php/"$tar_file"
sudo tar xf php-"$version".tar.xz >/dev/null 2>&1 curl -o /tmp/"$tar_file" -sSL "$bintray_url"
cd php-"$version" || exit sudo tar xf /tmp/"$tar_file" -C /tmp
sudo chmod a+x ./*.sh sudo chmod a+x /tmp/"$dir"/*.sh
./install.sh >/dev/null 2>&1 (cd /tmp/"$dir" && ./install.sh && ./post-install.sh)
./post-install.sh >/dev/null 2>&1
)
sudo rm -rf /tmp/php-"$version"
configure_pecl configure_pecl
release_version=$(php -v | head -n 1 | cut -d' ' -f 2) release_version=$(php -v | head -n 1 | cut -d' ' -f 2)
} }
@ -298,9 +323,9 @@ sudo mkdir -p /var/run /run/php
if [ "$existing_version" != "$version" ]; then if [ "$existing_version" != "$version" ]; then
if [ ! -e "/usr/bin/php$version" ]; then if [ ! -e "/usr/bin/php$version" ]; then
if [ "$version" = "8.0" ]; then if [ "$version" = "8.0" ]; then
setup_master setup_master >/dev/null 2>&1
elif [[ "$version" =~ $old_versions ]] || [ "$version" = "5.3" ]; then elif [[ "$version" =~ $old_versions ]] || [ "$version" = "5.3" ]; then
setup_old_versions setup_old_versions >/dev/null 2>&1
else else
update_ppa update_ppa
$apt_install php"$version" php"$version"-curl php"$version"-mbstring php"$version"-xml >/dev/null 2>&1 $apt_install php"$version" php"$version"-curl php"$version"-mbstring php"$version"-xml >/dev/null 2>&1

View File

@ -20,6 +20,18 @@ Function Add-Log($mark, $subject, $message) {
printf "\033[%s;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" $code $mark $subject $message printf "\033[%s;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" $code $mark $subject $message
} }
Function Install-PhpManager() {
$repo = "mlocati/powershell-phpmanager"
$zip_file = "$php_dir\PhpManager.zip"
$tags = Invoke-WebRequest https://api.github.com/repos/$repo/tags | ConvertFrom-Json
$tag = $tags[0].Name
$module_path = "$php_dir\PhpManager\powershell-phpmanager-$tag\PhpManager"
Invoke-WebRequest -UseBasicParsing -Uri https://github.com/$repo/archive/$tag.zip -OutFile $zip_file
Expand-Archive -Path $zip_file -DestinationPath $php_dir\PhpManager
Import-Module $module_path
Add-Content -Path $PsHome\profile.ps1 -Value "Import-Module $module_path"
}
Function Add-Extension { Function Add-Extension {
Param ( Param (
[Parameter(Position = 0, Mandatory = $true)] [Parameter(Position = 0, Mandatory = $true)]
@ -124,6 +136,9 @@ Function Add-Tool() {
(Get-Content $php_dir/cs2pr).replace('exit(9)', 'exit(0)') | Set-Content $php_dir/cs2pr (Get-Content $php_dir/cs2pr).replace('exit(9)', 'exit(0)') | Set-Content $php_dir/cs2pr
} elseif($tool -eq "composer") { } elseif($tool -eq "composer") {
composer -q global config process-timeout 0 composer -q global config process-timeout 0
if (Test-Path env:COMPOSER_TOKEN) {
composer -q global config github-oauth.github.com $env:COMPOSER_TOKEN
}
} elseif($tool -eq "wp-cli") { } elseif($tool -eq "wp-cli") {
Copy-Item $php_dir\wp-cli.bat -Destination $php_dir\wp.bat Copy-Item $php_dir\wp-cli.bat -Destination $php_dir\wp.bat
} }
@ -204,7 +219,7 @@ if((Test-Path env:PHPTS) -and $env:PHPTS -eq 'ts') {
} }
Step-Log "Setup PhpManager" Step-Log "Setup PhpManager"
Install-Module -Name PhpManager -Force -Scope CurrentUser Install-PhpManager >$null 2>&1
Add-Log $tick "PhpManager" "Installed" Add-Log $tick "PhpManager" "Installed"
$installed = $null $installed = $null

View File

@ -4,6 +4,7 @@ import * as utils from './utils';
* Function to get command to setup tools * Function to get command to setup tools
* *
* @param os_version * @param os_version
* @param suffix
*/ */
export async function getCommand( export async function getCommand(
os_version: string, os_version: string,
@ -69,6 +70,8 @@ export async function parseTool(
/** /**
* Function to get the url of tool with the given version * Function to get the url of tool with the given version
* *
* @param tool
* @param extension
* @param version * @param version
* @param prefix * @param prefix
* @param version_prefix * @param version_prefix
@ -167,16 +170,14 @@ export async function getCodeceptionUri(
case /(^2\.(1\.[0-5]|0\.\d+)|^1\.[6-8]\.\d+).*/.test(version): case /(^2\.(1\.[0-5]|0\.\d+)|^1\.[6-8]\.\d+).*/.test(version):
return codecept; return codecept;
default: default:
return await codecept; return codecept;
} }
} }
/** /**
* Helper function to get script to setup phive * Helper function to get script to setup phive
* *
* @param tool
* @param version * @param version
* @param url
* @param os_version * @param os_version
*/ */
export async function addPhive( export async function addPhive(
@ -204,6 +205,9 @@ export async function addPhive(
/** /**
* Function to get the phar url in domain/tool-version.phar format * Function to get the phar url in domain/tool-version.phar format
* *
* @param domain
* @param tool
* @param prefix
* @param version * @param version
*/ */
export async function getPharUrl( export async function getPharUrl(
@ -293,7 +297,7 @@ export async function getWpCliUrl(version: string): Promise<string> {
/** /**
* Function to add/move composer in the tools list * Function to add/move composer in the tools list
* *
* @param tools * @param tools_list
*/ */
export async function addComposer(tools_list: string[]): Promise<string[]> { export async function addComposer(tools_list: string[]): Promise<string[]> {
const regex = /^composer($|:.*)/; const regex = /^composer($|:.*)/;
@ -402,7 +406,8 @@ export async function addPackage(
/** /**
* Setup tools * Setup tools
* *
* @param tool_csv * @param tools_csv
* @param php_version
* @param os_version * @param os_version
*/ */
export async function addTools( export async function addTools(

View File

@ -65,7 +65,6 @@ export async function color(type: string): Promise<string> {
* @param message * @param message
* @param os_version * @param os_version
* @param log_type * @param log_type
* @param prefix
*/ */
export async function log( export async function log(
message: string, message: string,
@ -121,6 +120,7 @@ export async function stepLog(
* @param mark * @param mark
* @param subject * @param subject
* @param message * @param message
* @param os_version
*/ */
export async function addLog( export async function addLog(
mark: string, mark: string,
@ -147,14 +147,8 @@ export async function addLog(
* Read the scripts * Read the scripts
* *
* @param filename * @param filename
* @param version
* @param os_version
*/ */
export async function readScript( export async function readScript(filename: string): Promise<string> {
filename: string,
version: string,
os_version: string
): Promise<string> {
return fs.readFileSync( return fs.readFileSync(
path.join(__dirname, '../src/scripts/' + filename), path.join(__dirname, '../src/scripts/' + filename),
'utf8' 'utf8'
@ -165,7 +159,6 @@ export async function readScript(
* Write final script which runs * Write final script which runs
* *
* @param filename * @param filename
* @param version
* @param script * @param script
*/ */
export async function writeScript( export async function writeScript(
@ -196,6 +189,7 @@ export async function extensionArray(
.map(function(extension: string) { .map(function(extension: string) {
return extension return extension
.trim() .trim()
.toLowerCase()
.replace('php-', '') .replace('php-', '')
.replace('php_', ''); .replace('php_', '');
}) })

View File

@ -2,7 +2,7 @@
"compilerOptions": { "compilerOptions": {
/* Basic Options */ /* Basic Options */
// "incremental": true, /* Enable incremental compilation */ // "incremental": true, /* Enable incremental compilation */
"target": "es6", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */ "target": "ES2020", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */
"module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */
// "allowJs": true, /* Allow javascript files to be compiled. */ // "allowJs": true, /* Allow javascript files to be compiled. */
// "checkJs": true, /* Report errors in .js files. */ // "checkJs": true, /* Report errors in .js files. */