From e755fb7a695e384495fce9a0b94b64e5d832e3f6 Mon Sep 17 00:00:00 2001 From: Shivam Mathur Date: Fri, 11 Oct 2019 04:41:25 +0530 Subject: [PATCH 1/5] Refactor installation scripts --- __tests__/config.test.ts | 20 +- __tests__/extensions.test.ts | 15 +- __tests__/pecl.test.ts | 15 -- lib/config.js | 18 +- lib/extensions.js | 172 ++++---------- lib/install.js | 4 +- lib/utils.js | 2 +- node_modules/@actions/core/README.md | 40 ++-- node_modules/@actions/core/lib/core.d.ts | 9 +- node_modules/@actions/core/lib/core.js | 17 +- node_modules/@actions/core/lib/core.js.map | 2 +- node_modules/@actions/core/package.json | 23 +- node_modules/typed-rest-client/package.json | 1 - package-lock.json | 114 ++++----- package.json | 5 +- src/config.ts | 16 +- src/coverage.ts | 1 - src/extensions.ts | 245 +++++--------------- src/install.ts | 4 +- src/pecl.ts | 17 -- src/scripts/7.4.sh | 35 ++- src/scripts/darwin.sh | 27 ++- src/scripts/linux.sh | 22 +- src/scripts/win32.ps1 | 39 +++- src/utils.ts | 2 +- 25 files changed, 345 insertions(+), 520 deletions(-) delete mode 100644 __tests__/pecl.test.ts delete mode 100644 src/pecl.ts diff --git a/__tests__/config.test.ts b/__tests__/config.test.ts index 7e5e1eef..ca9773fd 100644 --- a/__tests__/config.test.ts +++ b/__tests__/config.test.ts @@ -7,13 +7,7 @@ describe('Config tests', () => { '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"' + 'Add-Content C:\\tools\\php\\php.ini "post_max_size=256M\nshort_open_tag=On\ndate.timezone=Asia/Kolkata"' ); win32 = await config.addINIValues( @@ -28,9 +22,9 @@ describe('Config tests', () => { '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'); + 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', @@ -44,9 +38,9 @@ describe('Config tests', () => { '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'); + 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', diff --git a/__tests__/extensions.test.ts b/__tests__/extensions.test.ts index ea14fa7c..c4840b7f 100644 --- a/__tests__/extensions.test.ts +++ b/__tests__/extensions.test.ts @@ -1,12 +1,5 @@ import * as extensions from '../src/extensions'; -let valid_extensions = ['xdebug', 'pcov']; -jest.mock('../src/pecl', () => ({ - checkPECLExtension: jest.fn().mockImplementation(extension => { - return valid_extensions.indexOf(extension) !== -1; - }) -})); - describe('Extension tests', () => { it('checking addExtensionOnWindows', async () => { let win32: string = await extensions.addExtension( @@ -27,7 +20,9 @@ describe('Extension tests', () => { expect(win32).toContain('Install-PhpExtension pcov'); win32 = await extensions.addExtension('does_not_exist', '7.2', 'win32'); - expect(win32).toContain('Could not find does_not_exist for PHP7.2 on PECL'); + expect(win32).toContain( + 'Add-Extension does_not_exist "Install-PhpExtension does_not_exist" extension "Add Extension"' + ); win32 = await extensions.addExtension('xdebug', '7.2', 'fedora'); expect(win32).toContain('Platform fedora is not supported'); @@ -82,9 +77,7 @@ describe('Extension tests', () => { expect(darwin).toContain('sudo pecl install xdebug'); darwin = await extensions.addExtension('does_not_exist', '7.2', 'darwin'); - expect(darwin).toContain( - 'Could not find does_not_exist for PHP7.2 on PECL' - ); + expect(darwin).toContain('add_extension does_not_exist'); darwin = await extensions.addExtension('xdebug', '7.2', 'fedora'); expect(darwin).toContain('Platform fedora is not supported'); diff --git a/__tests__/pecl.test.ts b/__tests__/pecl.test.ts deleted file mode 100644 index 5f737def..00000000 --- a/__tests__/pecl.test.ts +++ /dev/null @@ -1,15 +0,0 @@ -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; - }) -})); - -describe('pecl tests', () => { - it('checking checkPECLExtension', async () => { - expect(await pecl.checkPECLExtension('extensionDoesNotExist')).toBe(false); - expect(await pecl.checkPECLExtension('xdebug')).toBe(true); - }); -}); diff --git a/lib/config.js b/lib/config.js index 05d81c6c..6fa299c1 100644 --- a/lib/config.js +++ b/lib/config.js @@ -44,15 +44,8 @@ exports.addINIValues = addINIValues; */ 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; + return '\necho "' + ini_values.join('\n') + '" >> $ini_file\n'; }); } exports.addINIValuesUnix = addINIValuesUnix; @@ -63,15 +56,8 @@ exports.addINIValuesUnix = addINIValuesUnix; */ 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; + return ('Add-Content C:\\tools\\php\\php.ini "' + ini_values.join('\n') + '"\n'); }); } exports.addINIValuesWindows = addINIValuesWindows; diff --git a/lib/extensions.js b/lib/extensions.js index 0f25a97c..db448175 100644 --- a/lib/extensions.js +++ b/lib/extensions.js @@ -17,7 +17,6 @@ var __importStar = (this && this.__importStar) || function (mod) { }; Object.defineProperty(exports, "__esModule", { value: true }); const utils = __importStar(require("./utils")); -const pecl = __importStar(require("./pecl")); function addExtension(extension_csv, version, os_version, log_prefix = 'Add Extension') { return __awaiter(this, void 0, void 0, function* () { switch (os_version) { @@ -33,44 +32,6 @@ function addExtension(extension_csv, version, os_version, log_prefix = 'Add Exte }); } exports.addExtension = addExtension; -/** - * Enable extensions which are installed but not enabled on windows - * - * @param extension - */ -function enableExtensionWindows(extension, log_prefix) { - 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) { - Add-Content C:\\tools\\php\\php.ini "${yield utils.getExtensionPrefix(extension)}=php_${extension}.dll"\n` + - (yield utils.log('Enabled ' + extension, 'win32', 'success', log_prefix)) + - ` } elseif(php -m | findstr -i ${extension}) {\n` + - (yield utils.log(extension + ' was already enabled', 'win32', 'success', log_prefix)) + - ` } -} catch [Exception] {\n` + - (yield utils.log(extension + ' could not be enabled', 'win32', 'error', log_prefix)) + - ` }\n`); - }); -} -exports.enableExtensionWindows = enableExtensionWindows; -/** - * Enable extensions which are installed but not enabled on unix - * - * @param extension - * @param os_version - */ -function enableExtensionUnix(extension, os_version, log_prefix) { - return __awaiter(this, void 0, void 0, function* () { - return (`if [ ! "$(php -m | grep -i ${extension})" ] && [ -e "$ext_dir/${extension}.so" ]; then - echo "${yield utils.getExtensionPrefix(extension)}=${extension}" >> $ini_file\n` + - (yield utils.log('Enabled ' + extension, os_version, 'success', log_prefix)) + - `;\n elif [ "$(php -m | grep -i ${extension})" ]; then \n` + - (yield utils.log(extension + ' was already enabled', os_version, 'success', log_prefix)) + - `; fi\n`); - }); -} -exports.enableExtensionUnix = enableExtensionUnix; /** * Install and enable extensions for darwin * @@ -85,48 +46,33 @@ function addExtensionDarwin(extension_csv, version, log_prefix) { return __awaiter(this, void 0, void 0, function* () { extension = extension.toLowerCase(); // add script to enable extension is already installed along with php - script += yield enableExtensionUnix(extension, 'darwin', log_prefix); - switch (yield pecl.checkPECLExtension(extension)) { - case true: - 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 += - 'if [ ! "$(php -m | grep -i ' + - extension + - ')" ]; then ' + - install_command + - ' && ' + - (yield utils.log('Installed and enabled ' + extension, 'darwin', 'success', log_prefix)) + - ' || ' + - (yield utils.log('Could not install ' + extension + ' on PHP' + version, 'darwin', 'error', log_prefix)) + - '; fi\n'; + 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; - case false: default: - script += - 'if [ ! "$(php -m | grep -i ' + - extension + - ')" ]; then \n' + - (yield utils.log('Could not find ' + extension + ' for PHP' + version + ' on PECL', 'darwin', 'error', log_prefix)) + - '; fi\n'; + install_command = 'sudo pecl install ' + extension + ' >/dev/null 2>&1'; break; } + script += + 'add_extension ' + + extension + + ' "' + + install_command + + '" ' + + (yield utils.getExtensionPrefix(extension)) + + ' "' + + log_prefix + + '"\n'; }); }); return script; @@ -147,46 +93,31 @@ function addExtensionWindows(extension_csv, version, log_prefix) { return __awaiter(this, void 0, void 0, function* () { extension = extension.toLowerCase(); // add script to enable extension is already installed along with php - script += yield enableExtensionWindows(extension, log_prefix); - switch (yield pecl.checkPECLExtension(extension)) { - case true: - 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 += - 'if(!(php -m | findstr -i ' + - extension + - ')) { ' + - 'try { ' + - install_command + - '\n' + - (yield utils.log('Installed and enabled ' + extension, 'win32', 'success', log_prefix)) + - ' } catch [Exception] { ' + - (yield utils.log('Could not install ' + extension + ' on PHP' + version, 'win32', 'error', log_prefix)) + - ' } }\n'; + 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 false: + case '7.2xdebug': default: - script += - 'if(!(php -m | findstr -i ' + - extension + - ')) { ' + - (yield utils.log('Could not find ' + extension + ' for PHP' + version + ' on PECL', 'win32', 'error', log_prefix)) + - ' } \n'; + install_command = 'Install-PhpExtension ' + extension; break; } + script += + 'Add-Extension ' + + extension + + ' "' + + install_command + + '" ' + + (yield utils.getExtensionPrefix(extension)) + + ' "' + + log_prefix + + '"\n'; }); }); return script; @@ -207,7 +138,6 @@ function addExtensionLinux(extension_csv, version, log_prefix) { return __awaiter(this, void 0, void 0, function* () { extension = extension.toLowerCase(); // add script to enable extension is already installed along with php - script += yield enableExtensionUnix(extension, 'linux', log_prefix); let install_command = ''; switch (version + extension) { case '7.4xdebug': @@ -228,15 +158,15 @@ function addExtensionLinux(extension_csv, version, log_prefix) { break; } script += - 'if [ ! "$(php -m | grep -i ' + + 'add_extension ' + extension + - ')" ]; then ' + + ' "' + install_command + - ' && ' + - (yield utils.log('Installed and enabled ' + extension, 'linux', 'success', log_prefix)) + - ' || ' + - (yield utils.log('Could not find php' + version + '-' + extension + ' on APT repository', 'linux', 'error', log_prefix)) + - '; fi\n'; + '" ' + + (yield utils.getExtensionPrefix(extension)) + + ' "' + + log_prefix + + '"\n'; }); }); return script; diff --git a/lib/install.js b/lib/install.js index d9a8b983..658f874b 100644 --- a/lib/install.js +++ b/lib/install.js @@ -66,6 +66,4 @@ function run() { }); } // call the run function -run().then(function () { - console.log('done'); -}); +run(); diff --git a/lib/utils.js b/lib/utils.js index beae17af..c283638c 100644 --- a/lib/utils.js +++ b/lib/utils.js @@ -165,7 +165,7 @@ function log(message, os_version, log_type, prefix = '') { }; switch (prefix) { case '': - prefix = prefix; + prefix = ''; break; default: prefix = prefix + ': '; diff --git a/node_modules/@actions/core/README.md b/node_modules/@actions/core/README.md index 58a8287f..026bb520 100644 --- a/node_modules/@actions/core/README.md +++ b/node_modules/@actions/core/README.md @@ -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 diff --git a/node_modules/@actions/core/lib/core.d.ts b/node_modules/@actions/core/lib/core.d.ts index 116b0480..f35d88e9 100644 --- a/node_modules/@actions/core/lib/core.d.ts +++ b/node_modules/@actions/core/lib/core.d.ts @@ -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 diff --git a/node_modules/@actions/core/lib/core.js b/node_modules/@actions/core/lib/core.js index 7029f88f..f90b22dd 100644 --- a/node_modules/@actions/core/lib/core.js +++ b/node_modules/@actions/core/lib/core.js @@ -30,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 */ @@ -40,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 diff --git a/node_modules/@actions/core/lib/core.js.map b/node_modules/@actions/core/lib/core.js.map index fed6e2d1..3bef1c77 100644 --- a/node_modules/@actions/core/lib/core.js.map +++ b/node_modules/@actions/core/lib/core.js.map @@ -1 +1 @@ -{"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@actions/core/package.json b/node_modules/@actions/core/package.json index b0dc2cda..40750a5c 100644 --- a/node_modules/@actions/core/package.json +++ b/node_modules/@actions/core/package.json @@ -1,33 +1,33 @@ { "_args": [ [ - "@actions/core@1.1.1", + "@actions/core@1.1.3", "E:\\python\\setup-php" ] ], - "_from": "@actions/core@1.1.1", - "_id": "@actions/core@1.1.1", + "_from": "@actions/core@1.1.3", + "_id": "@actions/core@1.1.3", "_inBundle": false, - "_integrity": "sha512-O5G6EmlzTVsng7VSpNtszIoQq6kOgMGNTFB/hmwKNNA4V71JyxImCIrL27vVHCt2Cb3ImkaCr6o27C2MV9Ylwg==", + "_integrity": "sha512-2BIib53Jh4Cfm+1XNuZYYGTeRo8yiWEAUMoliMh1qQGMaqTF4VUlhhcsBylTu4qWmUx45DrY0y0XskimAHSqhw==", "_location": "/@actions/core", "_phantomChildren": {}, "_requested": { "type": "version", "registry": true, - "raw": "@actions/core@1.1.1", + "raw": "@actions/core@1.1.3", "name": "@actions/core", "escapedName": "@actions%2fcore", "scope": "@actions", - "rawSpec": "1.1.1", + "rawSpec": "1.1.3", "saveSpec": null, - "fetchSpec": "1.1.1" + "fetchSpec": "1.1.3" }, "_requiredBy": [ "/", "/@actions/tool-cache" ], - "_resolved": "https://registry.npmjs.org/@actions/core/-/core-1.1.1.tgz", - "_spec": "1.1.1", + "_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" @@ -57,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.1" + "version": "1.1.3" } diff --git a/node_modules/typed-rest-client/package.json b/node_modules/typed-rest-client/package.json index f9924548..c502180e 100644 --- a/node_modules/typed-rest-client/package.json +++ b/node_modules/typed-rest-client/package.json @@ -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", diff --git a/package-lock.json b/package-lock.json index 9d1a9669..de4c0e54 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,13 +1,13 @@ { "name": "setup-php", - "version": "1.4.1", + "version": "1.4.2", "lockfileVersion": 1, "requires": true, "dependencies": { "@actions/core": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.1.1.tgz", - "integrity": "sha512-O5G6EmlzTVsng7VSpNtszIoQq6kOgMGNTFB/hmwKNNA4V71JyxImCIrL27vVHCt2Cb3ImkaCr6o27C2MV9Ylwg==" + "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", @@ -42,18 +42,18 @@ } }, "@babel/core": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.6.2.tgz", - "integrity": "sha512-l8zto/fuoZIbncm+01p8zPSDZu/VuuJhAfA7d/AbzM09WR7iVhavvfNDYCNpo1VvLk6E6xgAoP9P+/EMJHuRkQ==", + "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.6.2", + "@babel/generator": "^7.6.4", "@babel/helpers": "^7.6.2", - "@babel/parser": "^7.6.2", + "@babel/parser": "^7.6.4", "@babel/template": "^7.6.0", - "@babel/traverse": "^7.6.2", - "@babel/types": "^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,12 +93,12 @@ } }, "@babel/generator": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.6.2.tgz", - "integrity": "sha512-j8iHaIW4gGPnViaIHI7e9t/Hl8qLjERI6DcV9kEpAIDJsAOrcnXqRS7t+QbhL76pwbtqP+QCQLL0z1CyVmtjjQ==", + "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.6.0", + "@babel/types": "^7.6.3", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" @@ -170,9 +170,9 @@ } }, "@babel/parser": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.6.2.tgz", - "integrity": "sha512-mdFqWrSPCmikBoaBYMuBulzTIKuXVPtEISFbRRVNwMWpCms/hmE2kRq0bblUHaNRKrjRlmVbx1sDHmjmRgD2Xg==", + "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": { @@ -196,17 +196,17 @@ } }, "@babel/traverse": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.6.2.tgz", - "integrity": "sha512-8fRE76xNwNttVEF2TwxJDGBLWthUkHWSldmfuBzVRmEDWOtu4XdINTgN7TDWzuLg4bbeIMLvfMFD9we5YcWkRQ==", + "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.6.2", + "@babel/generator": "^7.6.3", "@babel/helper-function-name": "^7.1.0", "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/parser": "^7.6.2", - "@babel/types": "^7.6.0", + "@babel/parser": "^7.6.3", + "@babel/types": "^7.6.3", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" @@ -230,9 +230,9 @@ } }, "@babel/types": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.6.1.tgz", - "integrity": "sha512-X7gdiuaCmA0uRjCmRtYJNAVCc/q+5xSgsfKJHqMN4iNLILX39677fJE1O40arPMh0TTtS9ItH67yre6c7k6t0g==", + "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", @@ -540,9 +540,9 @@ "dev": true }, "@types/node": { - "version": "12.7.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.7.tgz", - "integrity": "sha512-4jUncNe2tj1nmrO/34PsRpZqYVnRV1svbU78cKhuQKkMntKB/AmdLyGgswcZKjFHEHGpiY8pVD8CuVI55nP54w==", + "version": "12.7.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.12.tgz", + "integrity": "sha512-KPYGmfD0/b1eXurQ59fXD1GBzhSQfz6/lKBxkaHX9dKTzjXbK68Zt7yGUxUsCS1jeTy/8aL+d9JEr+S54mpkWQ==", "dev": true }, "@types/normalize-package-data": { @@ -558,9 +558,9 @@ "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": "*" @@ -1370,9 +1370,9 @@ } }, "es-abstract": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.14.2.tgz", - "integrity": "sha512-DgoQmbpFNOofkjJtKwr87Ma5EW4Dc8fWhD0R+ndq7Oc456ivUfGOOP6oAZTTKl5/CcNMP+EN+e3/iUzgE0veZg==", + "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", @@ -1383,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": { @@ -2342,9 +2342,9 @@ "dev": true }, "handlebars": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.3.1.tgz", - "integrity": "sha512-c0HoNHzDiHpBt4Kqe99N8tdLPKAnGCQ73gYMPWtAYM4PwGnf7xl8PBUHJqh9ijlzt2uQKaSRxbXRt+rZ7M2/kA==", + "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", @@ -2423,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": { @@ -3389,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" @@ -4150,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": { @@ -5015,19 +5015,19 @@ } }, "typescript": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.6.3.tgz", - "integrity": "sha512-N7bceJL1CtRQ2RiG0AQME13ksR7DiuQh/QehubYcghzv20tnh+MQnQIuJddTmsbqYj+dztchykemz0zFzlvdQw==", + "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.1", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.1.tgz", + "integrity": "sha512-+dSJLJpXBb6oMHP+Yvw8hUgElz4gLTh82XuX68QiJVTXaE5ibl6buzhNkQdYhBlIhozWOC9ge16wyRmjG4TwVQ==", "dev": true, "optional": true, "requires": { - "commander": "~2.20.0", + "commander": "2.20.0", "source-map": "~0.6.1" } }, diff --git a/package.json b/package.json index 824b934a..154cc037 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "setup-php", - "version": "1.4.1", + "version": "1.4.2", "private": false, "description": "Setup php action", "main": "lib/setup-php.js", @@ -24,8 +24,7 @@ "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.18", diff --git a/src/config.ts b/src/config.ts index 645030b5..19d5ca55 100644 --- a/src/config.ts +++ b/src/config.ts @@ -31,13 +31,8 @@ export async function addINIValues(ini_values_csv: string, os_version: string) { export async function addINIValuesUnix( ini_values_csv: string ): Promise { - let script: string = '\n'; let ini_values: Array = 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; + return '\necho "' + ini_values.join('\n') + '" >> $ini_file\n'; } /** @@ -48,11 +43,8 @@ export async function addINIValuesUnix( export async function addINIValuesWindows( ini_values_csv: string ): Promise { - let script: string = '\n'; let ini_values: Array = 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; + return ( + 'Add-Content C:\\tools\\php\\php.ini "' + ini_values.join('\n') + '"\n' + ); } diff --git a/src/coverage.ts b/src/coverage.ts index 870f559a..998599a1 100644 --- a/src/coverage.ts +++ b/src/coverage.ts @@ -1,5 +1,4 @@ import * as utils from './utils'; -import * as pecl from './pecl'; import * as extensions from './extensions'; import * as config from './config'; diff --git a/src/extensions.ts b/src/extensions.ts index 14a8af12..b72da2e2 100644 --- a/src/extensions.ts +++ b/src/extensions.ts @@ -1,5 +1,4 @@ import * as utils from './utils'; -import * as pecl from './pecl'; export async function addExtension( extension_csv: string, @@ -24,75 +23,6 @@ export async function addExtension( } } -/** - * Enable extensions which are installed but not enabled on windows - * - * @param extension - */ -export async function enableExtensionWindows( - extension: string, - log_prefix: string -) { - return ( - `try { - $exist = Test-Path -Path $ext_dir\\php_${extension}.dll - if(!(php -m | findstr -i ${extension}) -and $exist) { - Add-Content C:\\tools\\php\\php.ini "${await utils.getExtensionPrefix( - extension - )}=php_${extension}.dll"\n` + - (await utils.log('Enabled ' + extension, 'win32', 'success', log_prefix)) + - ` } elseif(php -m | findstr -i ${extension}) {\n` + - (await utils.log( - extension + ' was already enabled', - 'win32', - 'success', - log_prefix - )) + - ` } -} catch [Exception] {\n` + - (await utils.log( - extension + ' could not be enabled', - 'win32', - 'error', - log_prefix - )) + - ` }\n` - ); -} - -/** - * Enable extensions which are installed but not enabled on unix - * - * @param extension - * @param os_version - */ -export async function enableExtensionUnix( - extension: string, - os_version: string, - log_prefix: string -) { - return ( - `if [ ! "$(php -m | grep -i ${extension})" ] && [ -e "$ext_dir/${extension}.so" ]; then - echo "${await utils.getExtensionPrefix( - extension - )}=${extension}" >> $ini_file\n` + - (await utils.log( - 'Enabled ' + extension, - os_version, - 'success', - log_prefix - )) + - `;\n elif [ "$(php -m | grep -i ${extension})" ]; then \n` + - (await utils.log( - extension + ' was already enabled', - os_version, - 'success', - log_prefix - )) + - `; fi\n` - ); -} - /** * Install and enable extensions for darwin * @@ -109,63 +39,33 @@ export async function addExtensionDarwin( await utils.asyncForEach(extensions, async function(extension: string) { extension = extension.toLowerCase(); // add script to enable extension is already installed along with php - script += await enableExtensionUnix(extension, 'darwin', log_prefix); - switch (await pecl.checkPECLExtension(extension)) { - case true: - 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 += - 'if [ ! "$(php -m | grep -i ' + - extension + - ')" ]; then ' + - install_command + - ' && ' + - (await utils.log( - 'Installed and enabled ' + extension, - 'darwin', - 'success', - log_prefix - )) + - ' || ' + - (await utils.log( - 'Could not install ' + extension + ' on PHP' + version, - 'darwin', - 'error', - log_prefix - )) + - '; fi\n'; + 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; - case false: default: - script += - 'if [ ! "$(php -m | grep -i ' + - extension + - ')" ]; then \n' + - (await utils.log( - 'Could not find ' + extension + ' for PHP' + version + ' on PECL', - 'darwin', - 'error', - log_prefix - )) + - '; fi\n'; + install_command = 'sudo pecl install ' + extension + ' >/dev/null 2>&1'; break; } + script += + 'add_extension ' + + extension + + ' "' + + install_command + + '" ' + + (await utils.getExtensionPrefix(extension)) + + ' "' + + log_prefix + + '"\n'; }); return script; } @@ -186,63 +86,33 @@ export async function addExtensionWindows( await utils.asyncForEach(extensions, async function(extension: string) { extension = extension.toLowerCase(); // add script to enable extension is already installed along with php - script += await enableExtensionWindows(extension, log_prefix); - switch (await pecl.checkPECLExtension(extension)) { - case true: - 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 += - 'if(!(php -m | findstr -i ' + - extension + - ')) { ' + - 'try { ' + - install_command + - '\n' + - (await utils.log( - 'Installed and enabled ' + extension, - 'win32', - 'success', - log_prefix - )) + - ' } catch [Exception] { ' + - (await utils.log( - 'Could not install ' + extension + ' on PHP' + version, - 'win32', - 'error', - log_prefix - )) + - ' } }\n'; + 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 false: + case '7.2xdebug': default: - script += - 'if(!(php -m | findstr -i ' + - extension + - ')) { ' + - (await utils.log( - 'Could not find ' + extension + ' for PHP' + version + ' on PECL', - 'win32', - 'error', - log_prefix - )) + - ' } \n'; + install_command = 'Install-PhpExtension ' + extension; break; } + script += + 'Add-Extension ' + + extension + + ' "' + + install_command + + '" ' + + (await utils.getExtensionPrefix(extension)) + + ' "' + + log_prefix + + '"\n'; }); return script; } @@ -263,7 +133,6 @@ export async function addExtensionLinux( await utils.asyncForEach(extensions, async function(extension: string) { extension = extension.toLowerCase(); // add script to enable extension is already installed along with php - script += await enableExtensionUnix(extension, 'linux', log_prefix); let install_command: string = ''; switch (version + extension) { @@ -285,25 +154,15 @@ export async function addExtensionLinux( break; } script += - 'if [ ! "$(php -m | grep -i ' + + 'add_extension ' + extension + - ')" ]; then ' + + ' "' + install_command + - ' && ' + - (await utils.log( - 'Installed and enabled ' + extension, - 'linux', - 'success', - log_prefix - )) + - ' || ' + - (await utils.log( - 'Could not find php' + version + '-' + extension + ' on APT repository', - 'linux', - 'error', - log_prefix - )) + - '; fi\n'; + '" ' + + (await utils.getExtensionPrefix(extension)) + + ' "' + + log_prefix + + '"\n'; }); return script; } diff --git a/src/install.ts b/src/install.ts index 0ccda4b7..b7b83d6e 100644 --- a/src/install.ts +++ b/src/install.ts @@ -79,6 +79,4 @@ async function run() { } // call the run function -run().then(function() { - console.log('done'); -}); +run(); diff --git a/src/pecl.ts b/src/pecl.ts deleted file mode 100644 index 260a1cba..00000000 --- a/src/pecl.ts +++ /dev/null @@ -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 { - 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/json.php?package=' + extension - ); - return response.message.statusCode === 200; -} diff --git a/src/scripts/7.4.sh b/src/scripts/7.4.sh index 7b6a05ca..b1b08f41 100644 --- a/src/scripts/7.4.sh +++ b/src/scripts/7.4.sh @@ -1,3 +1,4 @@ +version='7.4.0RC3' brew install pkg-config autoconf bison re2c openssl@1.1 krb5 enchant libffi freetype intltool icu4c libiconv t1lib gd libzip gmp tidyp libxml2 libxslt postgresql curl >/dev/null 2>&1 brew link icu4c gettext --force >/dev/null 2>&1 @@ -48,12 +49,36 @@ export PHPBREW_HOME=/opt/phpbrew echo "[[ -e ~/.phpbrew/bashrc ]] && source ~/.phpbrew/bashrc" >> ~/.bashrc source ~/.bash_profile >/dev/null 2>&1 source ~/.bashrc >/dev/null 2>&1 -phpbrew install -j 6 7.4.0RC3 +dev >/dev/null 2>&1 -phpbrew switch 7.4.0RC3 -sudo ln -sf /opt/phpbrew/php/php-7.4.0RC3/bin/* /usr/local/bin/ -sudo ln -sf /opt/phpbrew/php/php-7.4.0RC3/etc/php.ini /etc/php.ini +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" sudo chmod 777 "$ini_file" -brew install composer \ No newline at end of file +brew install composer + +add_extension() +{ + extension=$1 + install_command=$2 + prefix=$3 + log_prefix=$4 + if ! php -m | grep -i -q "$extension" && [ -e "$ext_dir/$extension.so" ]; then + echo "$prefix=$extension" >> "$ini_file" && echo "\033[32;1m$log_prefix: Enabled $extension\033[0m"; + elif php -m | grep -i -q "$extension"; then + echo "\033[33;1m$log_prefix: $extension was already enabled\033[0m"; + 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" && \ + echo "\033[32;1m$log_prefix: Installed and enabled $extension\033[0m" || \ + echo "\033[31;1m$log_prefix: Could not install $extension on PHP$version\033[0m"; + else + if ! php -m | grep -i -q "$extension"; then + echo "\033[31;1m$log_prefix: Could not find $extension for PHP$version on PECL\033[0m"; + fi + fi + fi +} \ No newline at end of file diff --git a/src/scripts/darwin.sh b/src/scripts/darwin.sh index b069f385..59a7bdc0 100644 --- a/src/scripts/darwin.sh +++ b/src/scripts/darwin.sh @@ -1,3 +1,4 @@ +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 @@ -10,4 +11,28 @@ sudo chmod 777 "$ini_file" mkdir -p "$(pecl config-get ext_dir)" composer global require hirak/prestissimo >/dev/null 2>&1 php -v -composer -V \ No newline at end of file +composer -V + +add_extension() +{ + extension=$1 + install_command=$2 + prefix=$3 + log_prefix=$4 + if ! php -m | grep -i -q "$extension" && [ -e "$ext_dir/$extension.so" ]; then + echo "$prefix=$extension" >> "$ini_file" && echo "\033[32;1m$log_prefix: Enabled $extension\033[0m"; + elif php -m | grep -i -q "$extension"; then + echo "\033[33;1m$log_prefix: $extension was already enabled\033[0m"; + 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" && \ + echo "\033[32;1m$log_prefix: Installed and enabled $extension\033[0m" || \ + echo "\033[31;1m$log_prefix: Could not install $extension on PHP$version\033[0m"; + else + if ! php -m | grep -i -q "$extension"; then + echo "\033[31;1m$log_prefix: Could not find $extension for PHP$version on PECL\033[0m"; + fi + fi + fi +} \ No newline at end of file diff --git a/src/scripts/linux.sh b/src/scripts/linux.sh index 8322c09b..0a33e846 100644 --- a/src/scripts/linux.sh +++ b/src/scripts/linux.sh @@ -1,5 +1,6 @@ -version=$(php-config --version | cut -c 1-3) -if [ "$version" != "$1" ]; then +existing_version=$(php-config --version | cut -c 1-3) +version=$1 +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 @@ -37,3 +38,20 @@ sudo chmod 777 "$ini_file" sudo mkdir -p /run/php php -v composer -V + +add_extension() +{ + extension=$1 + install_command=$2 + prefix=$3 + log_prefix=$4 + if ! php -m | grep -i -q "$extension" && [ -e "$ext_dir/$extension.so" ]; then + echo "$prefix=$extension" >> "$ini_file" && echo "\033[32;1m$log_prefix: Enabled $extension\033[0m"; + elif php -m | grep -i -q "$extension"; then + echo "\033[33;1m$log_prefix: $extension was already enabled\033[0m"; + elif ! php -m | grep -i -q "$extension"; then + eval "$install_command" && \ + echo "\033[32;1m$log_prefix: Installed and enabled $extension\033[0m" || \ + echo "\033[31;1m$log_prefix: Could not find php$version-$extension on APT repository\033[0m"; + fi +} diff --git a/src/scripts/win32.ps1 b/src/scripts/win32.ps1 index 250f99ca..0ebe0b70 100644 --- a/src/scripts/win32.ps1 +++ b/src/scripts/win32.ps1 @@ -40,4 +40,41 @@ if($version -lt '7.4') { Write-Host "Installing Composer" -ForegroundColor Blue Install-Composer -Scope System -Path C:\tools\php php -v -composer -V \ No newline at end of file +composer -V + +Function Add-Extension($extension, $install_command, $prefix, $log_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" + Write-Host "$log_prefix`: Enabled $extension" -ForegroundColor green + } elseif(php -m | findstr -i $extension) { + Write-Host "$log_prefix`: $extension was already enabled" -ForegroundColor yellow + } + } catch [Exception] { + Write-Host "$log_prefix`: $extension could not be enabled" -ForegroundColor red + } + + $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 + Write-Host "$log_prefix`: Installed and enabled $extension" -ForegroundColor green + } catch [Exception] { + Write-Host "$log_prefix`: Could not install $extension on PHP $version" -ForegroundColor red + } + } + } else { + if(!(php -m | findstr -i $extension)) { + Write-Host "$log_prefix`: Could not find $extension for PHP$version on PECL" -ForegroundColor red + } + } +} \ No newline at end of file diff --git a/src/utils.ts b/src/utils.ts index 866f0a80..73d21e39 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -167,7 +167,7 @@ export async function log( }; switch (prefix) { case '': - prefix = prefix; + prefix = ''; break; default: prefix = prefix + ': '; From f7f5b1a7e11fe49e26c6990e350327828b1794e1 Mon Sep 17 00:00:00 2001 From: Shivam Mathur Date: Fri, 11 Oct 2019 13:14:59 +0530 Subject: [PATCH 2/5] Specify version in phpenmod and phpdismod --- __tests__/coverage.test.ts | 6 +++--- lib/coverage.js | 12 +++++++++--- src/coverage.ts | 12 +++++++++--- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/__tests__/coverage.test.ts b/__tests__/coverage.test.ts index 0de20bb8..8aa59590 100644 --- a/__tests__/coverage.test.ts +++ b/__tests__/coverage.test.ts @@ -27,7 +27,7 @@ describe('Config tests', () => { 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 xdebug'); + expect(linux).toContain('sudo phpdismod -v 7.4 xdebug'); }); it('checking addCoverage with PCOV on darwin', async () => { @@ -58,8 +58,8 @@ describe('Config tests', () => { it('checking disableCoverage on linux', async () => { let linux: string = await coverage.addCoverage('none', '7.4', 'linux'); - expect(linux).toContain('sudo phpdismod xdebug'); - expect(linux).toContain('sudo phpdismod pcov'); + 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'); }); diff --git a/lib/coverage.js b/lib/coverage.js index df8264ae..3451c57b 100644 --- a/lib/coverage.js +++ b/lib/coverage.js @@ -57,7 +57,9 @@ function addCoveragePCOV(version, os_version) { script += 'if [ -e /etc/php/' + version + - '/mods-available/xdebug.ini ]; then sudo phpdismod xdebug; fi\n'; + '/mods-available/xdebug.ini ]; then sudo phpdismod -v ' + + version + + ' xdebug; fi\n'; script += 'sudo sed -i "/xdebug/d" $ini_file\n'; break; case 'darwin': @@ -89,11 +91,15 @@ function disableCoverage(version, os_version) { script += 'if [ -e /etc/php/' + version + - '/mods-available/xdebug.ini ]; then sudo phpdismod xdebug; fi\n'; + '/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 pcov; fi\n'; + '/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; diff --git a/src/coverage.ts b/src/coverage.ts index 998599a1..b349efbd 100644 --- a/src/coverage.ts +++ b/src/coverage.ts @@ -56,7 +56,9 @@ export async function addCoveragePCOV(version: string, os_version: string) { script += 'if [ -e /etc/php/' + version + - '/mods-available/xdebug.ini ]; then sudo phpdismod xdebug; fi\n'; + '/mods-available/xdebug.ini ]; then sudo phpdismod -v ' + + version + + ' xdebug; fi\n'; script += 'sudo sed -i "/xdebug/d" $ini_file\n'; break; case 'darwin': @@ -98,11 +100,15 @@ export async function disableCoverage(version: string, os_version: string) { script += 'if [ -e /etc/php/' + version + - '/mods-available/xdebug.ini ]; then sudo phpdismod xdebug; fi\n'; + '/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 pcov; fi\n'; + '/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; From 99bbaa2a5885594dd981ec78a1af50a71f7e397a Mon Sep 17 00:00:00 2001 From: Shivam Mathur Date: Fri, 11 Oct 2019 23:09:05 +0530 Subject: [PATCH 3/5] Improve documentation --- action.yml | 10 +++++----- lib/coverage.js | 25 +++++++++++++++++++++++++ lib/extensions.js | 8 ++++++++ lib/utils.js | 12 ++++++++++++ src/coverage.ts | 25 +++++++++++++++++++++++++ src/extensions.ts | 8 ++++++++ src/scripts/linux.sh | 9 +++------ src/utils.ts | 12 ++++++++++++ 8 files changed, 98 insertions(+), 11 deletions(-) diff --git a/action.yml b/action.yml index 45f0b5f9..5e88def7 100644 --- a/action.yml +++ b/action.yml @@ -1,21 +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) Driver to calculate code coverage (Accepts: xdebug, pcov and none)' + description: '(Optional) Code coverage driver you want to install. (Accepts: xdebug, pcov and none)' required: false runs: using: 'node12' diff --git a/lib/coverage.js b/lib/coverage.js index 3451c57b..52a3a093 100644 --- a/lib/coverage.js +++ b/lib/coverage.js @@ -19,6 +19,13 @@ 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(); @@ -35,6 +42,12 @@ function addCoverage(coverage_driver, version, os_version) { }); } 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* () { let script = '\n'; @@ -44,6 +57,12 @@ function addCoverageXdebug(version, 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'; @@ -83,6 +102,12 @@ function addCoveragePCOV(version, os_version) { }); } 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'; diff --git a/lib/extensions.js b/lib/extensions.js index db448175..9f0c3f99 100644 --- a/lib/extensions.js +++ b/lib/extensions.js @@ -17,6 +17,14 @@ var __importStar = (this && this.__importStar) || function (mod) { }; 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, log_prefix = 'Add Extension') { return __awaiter(this, void 0, void 0, function* () { switch (os_version) { diff --git a/lib/utils.js b/lib/utils.js index c283638c..7d923847 100644 --- a/lib/utils.js +++ b/lib/utils.js @@ -19,6 +19,12 @@ 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]; @@ -117,6 +123,7 @@ function writeScript(filename, version, script) { exports.writeScript = writeScript; /** * Function to break extension csv into an array + * * @param extension_csv */ function extensionArray(extension_csv) { @@ -196,6 +203,11 @@ function log(message, os_version, log_type, prefix = '') { }); } 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']; diff --git a/src/coverage.ts b/src/coverage.ts index b349efbd..6d9204c3 100644 --- a/src/coverage.ts +++ b/src/coverage.ts @@ -2,6 +2,13 @@ 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, @@ -20,6 +27,12 @@ export async function addCoverage( } } +/** + * Function to setup Xdebug + * + * @param version + * @param os_version + */ export async function addCoverageXdebug(version: string, os_version: string) { let script: string = '\n'; script += await extensions.addExtension( @@ -38,6 +51,12 @@ export async function addCoverageXdebug(version: string, os_version: string) { return script; } +/** + * Function to setup PCOV + * + * @param version + * @param os_version + */ export async function addCoveragePCOV(version: string, os_version: string) { let script: string = '\n'; switch (version) { @@ -93,6 +112,12 @@ export async function addCoveragePCOV(version: string, os_version: string) { 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) { diff --git a/src/extensions.ts b/src/extensions.ts index b72da2e2..68d7a202 100644 --- a/src/extensions.ts +++ b/src/extensions.ts @@ -1,5 +1,13 @@ 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, diff --git a/src/scripts/linux.sh b/src/scripts/linux.sh index 0a33e846..d2553078 100644 --- a/src/scripts/linux.sh +++ b/src/scripts/linux.sh @@ -18,14 +18,11 @@ if [ "$existing_version" != "$1" ]; then fi if [ ! -e "/usr/bin/composer" ]; then - EXPECTED_SIGNATURE="$(curl -s https://composer.github.io/installer.sig)" & - curl -s -L https://getcomposer.org/installer > composer-setup.php & - ACTUAL_SIGNATURE="$(php -r "echo hash_file('sha384', 'composer-setup.php');")" & - - if [ "$EXPECTED_SIGNATURE" != "$ACTUAL_SIGNATURE" ]; 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 - COMPOSER_ALLOW_SUPERUSER=1 + export COMPOSER_ALLOW_SUPERUSER=1 sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer fi rm composer-setup.php diff --git a/src/utils.ts b/src/utils.ts index 73d21e39..0b22f572 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -2,6 +2,12 @@ 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 @@ -117,6 +123,7 @@ export async function writeScript( /** * Function to break extension csv into an array + * * @param extension_csv */ export async function extensionArray( @@ -202,6 +209,11 @@ export async function log( } } +/** + * Function to get prefix required to load an extension. + * + * @param extension + */ export async function getExtensionPrefix(extension: string): Promise { let zend: Array = ['xdebug', 'opcache', 'ioncube', 'eaccelerator']; switch (zend.indexOf(extension)) { From b2e7a49dd5e98cec8d6c46c4a0f17e92b11f03ff Mon Sep 17 00:00:00 2001 From: Shivam Mathur Date: Sun, 13 Oct 2019 05:27:58 +0530 Subject: [PATCH 4/5] Add lumen examples and fix laravel examples --- README.md | 9 ++++-- examples/laravel-mysql.yml | 4 ++- examples/lumen-mysql.yml | 60 +++++++++++++++++++++++++++++++++++ examples/lumen-postgres.yml | 62 +++++++++++++++++++++++++++++++++++++ examples/lumen.yml | 29 +++++++++++++++++ 5 files changed, 160 insertions(+), 4 deletions(-) create mode 100644 examples/lumen-mysql.yml create mode 100644 examples/lumen-postgres.yml create mode 100644 examples/lumen.yml diff --git a/README.md b/README.md index ee1bbdb2..f7437f19 100644 --- a/README.md +++ b/README.md @@ -4,9 +4,9 @@

-# Setup PHP in GitHub Actions +

Setup PHP in GitHub Actions

-

+

GitHub Actions status Codecov Code Coverage LICENSE @@ -163,6 +163,9 @@ Examples for setting up this GitHub Action with different PHP Frameworks/Package |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")| |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")| @@ -180,7 +183,7 @@ Contributions are welcome! See [Contributor's Guide](.github/CONTRIBUTING.md "sh ## :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 Support me on Patreon and Support me on Paypal. ## :bookmark: This action uses the following works diff --git a/examples/laravel-mysql.yml b/examples/laravel-mysql.yml index 707fb0a3..376081e9 100644 --- a/examples/laravel-mysql.yml +++ b/examples/laravel-mysql.yml @@ -5,7 +5,9 @@ jobs: laravel: name: Laravel (PHP ${{ matrix.php-versions }}) runs-on: ubuntu-latest - env: + env: + DB_DATABASE: laravel + DB_USERNAME: root DB_PASSWORD: password BROADCAST_DRIVER: log CACHE_DRIVER: redis diff --git a/examples/lumen-mysql.yml b/examples/lumen-mysql.yml new file mode 100644 index 00000000..716b30ae --- /dev/null +++ b/examples/lumen-mysql.yml @@ -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'] }} \ No newline at end of file diff --git a/examples/lumen-postgres.yml b/examples/lumen-postgres.yml new file mode 100644 index 00000000..d1db7bc9 --- /dev/null +++ b/examples/lumen-postgres.yml @@ -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] }} diff --git a/examples/lumen.yml b/examples/lumen.yml new file mode 100644 index 00000000..c90e3cf4 --- /dev/null +++ b/examples/lumen.yml @@ -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 \ No newline at end of file From fce93115225eebc16a5cf1b483c04dbd0c3259e8 Mon Sep 17 00:00:00 2001 From: Shivam Mathur Date: Sun, 13 Oct 2019 09:48:29 +0530 Subject: [PATCH 5/5] Add support for phalcon --- README.md | 8 +++-- __tests__/extensions.test.ts | 8 +++++ examples/phalcon-mysql.yml | 60 ++++++++++++++++++++++++++++++++++ examples/phalcon-postgres.yml | 61 +++++++++++++++++++++++++++++++++++ lib/extensions.js | 8 +++++ lib/utils.js | 5 ++- src/extensions.ts | 8 +++++ src/scripts/phalcon.sh | 19 +++++++++++ src/utils.ts | 5 ++- 9 files changed, 177 insertions(+), 5 deletions(-) create mode 100644 examples/phalcon-mysql.yml create mode 100644 examples/phalcon-postgres.yml create mode 100644 src/scripts/phalcon.sh diff --git a/README.md b/README.md index f7437f19..cd3d49cb 100644 --- a/README.md +++ b/README.md @@ -64,8 +64,9 @@ with: 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. -`PCOV` needs `PHPUnit >= 8.0` and `PHP >= 7.1`, `PHPUnit` needs `PHP >= 7.2`. So use `PHP >= 7.2` with `PCOV` + ```yaml uses: shivammathur/setup-php@master @@ -149,8 +150,7 @@ jobs: - name: Check Composer Version run: composer -V - name: Check PHP Extensions - run: php -m - + run: php -m ``` ### Examples @@ -166,6 +166,8 @@ Examples for setting up this GitHub Action with different PHP Frameworks/Package |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")| diff --git a/__tests__/extensions.test.ts b/__tests__/extensions.test.ts index c4840b7f..5f559653 100644 --- a/__tests__/extensions.test.ts +++ b/__tests__/extensions.test.ts @@ -45,6 +45,14 @@ describe('Extension tests', () => { 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'); }); diff --git a/examples/phalcon-mysql.yml b/examples/phalcon-mysql.yml new file mode 100644 index 00000000..170cc6c4 --- /dev/null +++ b/examples/phalcon-mysql.yml @@ -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'] }} \ No newline at end of file diff --git a/examples/phalcon-postgres.yml b/examples/phalcon-postgres.yml new file mode 100644 index 00000000..5daf3a0b --- /dev/null +++ b/examples/phalcon-postgres.yml @@ -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'] }} \ No newline at end of file diff --git a/lib/extensions.js b/lib/extensions.js index 9f0c3f99..eacebf3c 100644 --- a/lib/extensions.js +++ b/lib/extensions.js @@ -156,6 +156,14 @@ function addExtensionLinux(extension_csv, version, log_prefix) { 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' + diff --git a/lib/utils.js b/lib/utils.js index 7d923847..4266f4a9 100644 --- a/lib/utils.js +++ b/lib/utils.js @@ -88,11 +88,14 @@ function readScript(filename, version, os_version) { } break; case 'linux': + let files = ['scripts/phalcon.sh']; + yield readFiles74(['scripts/phalcon.sh']); switch (version) { case '7.4': - yield readFiles74(['scripts/xdebug.sh', 'scripts/pcov.sh']); + files.concat(['scripts/xdebug.sh', 'scripts/pcov.sh']); break; } + yield readFiles74(files); break; case 'win32': switch (version) { diff --git a/src/extensions.ts b/src/extensions.ts index 68d7a202..069af4a8 100644 --- a/src/extensions.ts +++ b/src/extensions.ts @@ -152,6 +152,14 @@ export async function addExtensionLinux( 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' + diff --git a/src/scripts/phalcon.sh b/src/scripts/phalcon.sh new file mode 100644 index 00000000..b1ef2c4b --- /dev/null +++ b/src/scripts/phalcon.sh @@ -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 \ No newline at end of file diff --git a/src/utils.ts b/src/utils.ts index 0b22f572..cdbf1da9 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -79,11 +79,14 @@ export async function readScript( } break; case 'linux': + let files: Array = ['scripts/phalcon.sh']; + await readFiles74(['scripts/phalcon.sh']); switch (version) { case '7.4': - await readFiles74(['scripts/xdebug.sh', 'scripts/pcov.sh']); + files.concat(['scripts/xdebug.sh', 'scripts/pcov.sh']); break; } + await readFiles74(files); break; case 'win32': switch (version) {