Add support to specify version in \d.x notation

This commit is contained in:
Shivam Mathur 2021-02-22 11:22:59 +05:30
parent d0f1a91dfd
commit 5520fdb61a
No known key found for this signature in database
GPG Key ID: 3E13E4C8591ACC2A
5 changed files with 153 additions and 31 deletions

View File

@ -8,6 +8,12 @@ jest.mock('@actions/core', () => ({
}) })
})); }));
jest.spyOn(utils, 'fetch').mockImplementation(
async (url): Promise<string> => {
return `{ "latest": "8.0", "5.x": "5.6", "url": "${url}" }`;
}
);
async function cleanup(path: string): Promise<void> { async function cleanup(path: string): Promise<void> {
fs.unlink(path, error => { fs.unlink(path, error => {
if (error) { if (error) {
@ -32,6 +38,20 @@ describe('Utils tests', () => {
}).rejects.toThrow('Input required and not supplied: DoesNotExist'); }).rejects.toThrow('Input required and not supplied: DoesNotExist');
}); });
it('checking fetch', async () => {
expect(await utils.fetch('test_url')).toBe(
'{ "latest": "8.0", "5.x": "5.6", "url": "test_url" }'
);
});
it('checking parseVersion', async () => {
expect(await utils.parseVersion('latest')).toBe('8.0');
expect(await utils.parseVersion('7')).toBe('7.0');
expect(await utils.parseVersion('7.4')).toBe('7.4');
expect(await utils.parseVersion('5.x')).toBe('5.6');
expect(await utils.parseVersion('4.x')).toBe(undefined);
});
it('checking asyncForEach', async () => { it('checking asyncForEach', async () => {
const array: Array<string> = ['a', 'b', 'c']; const array: Array<string> = ['a', 'b', 'c'];
let concat = ''; let concat = '';

82
dist/index.js vendored
View File

@ -1054,8 +1054,9 @@ var __importStar = (this && this.__importStar) || function (mod) {
return result; return result;
}; };
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
exports.suppressOutput = exports.getExtensionPrefix = exports.CSVArray = exports.extensionArray = exports.writeScript = exports.readScript = exports.addLog = exports.stepLog = exports.log = exports.color = exports.asyncForEach = exports.getInput = exports.readEnv = void 0; exports.suppressOutput = exports.getExtensionPrefix = exports.CSVArray = exports.extensionArray = exports.writeScript = exports.readScript = exports.addLog = exports.stepLog = exports.log = exports.color = exports.asyncForEach = exports.parseVersion = exports.fetch = exports.getInput = exports.readEnv = void 0;
const fs = __importStar(__webpack_require__(747)); const fs = __importStar(__webpack_require__(747));
const https = __importStar(__webpack_require__(211));
const path = __importStar(__webpack_require__(622)); const path = __importStar(__webpack_require__(622));
const core = __importStar(__webpack_require__(470)); const core = __importStar(__webpack_require__(470));
/** /**
@ -1094,6 +1095,44 @@ async function getInput(name, mandatory) {
} }
} }
exports.getInput = getInput; exports.getInput = getInput;
/**
* Function to fetch an URL
*
* @param url
*/
async function fetch(url) {
const fetch_promise = new Promise(resolve => {
const req = https.get(url, (res) => {
res.setEncoding('utf8');
let body = '';
res.on('data', chunk => (body += chunk));
res.on('end', () => resolve(body));
});
req.end();
});
return await fetch_promise;
}
exports.fetch = fetch;
/**
* Function to parse PHP version.
*
* @param version
*/
async function parseVersion(version) {
const manifest = 'https://raw.githubusercontent.com/shivammathur/setup-php/develop/src/configs/php-versions.json';
switch (true) {
case /^(latest|\d+\.x)$/.test(version):
return JSON.parse(await fetch(manifest))[version];
default:
switch (true) {
case version.length > 1:
return version.slice(0, 3);
default:
return version + '.0';
}
}
}
exports.parseVersion = parseVersion;
/** /**
* Async foreach loop * Async foreach loop
* *
@ -1285,6 +1324,13 @@ async function suppressOutput(os_version) {
exports.suppressOutput = suppressOutput; exports.suppressOutput = suppressOutput;
/***/ }),
/***/ 211:
/***/ (function(module) {
module.exports = require("https");
/***/ }), /***/ }),
/***/ 357: /***/ 357:
@ -2418,25 +2464,29 @@ exports.build = build;
async function run() { async function run() {
try { try {
core.warning('setup-php v1 is deprecated.\nPlease upgrade to v2 - https://github.com/shivammathur/setup-php/wiki/Switch-to-v2'); core.warning('setup-php v1 is deprecated.\nPlease upgrade to v2 - https://github.com/shivammathur/setup-php/wiki/Switch-to-v2');
const os_version = process.platform; const version = await utils.parseVersion(await utils.getInput('php-version', true));
let version = await utils.getInput('php-version', true);
version = version.length > 1 ? version.slice(0, 3) : version + '.0';
if (version == '8.1') { if (version == '8.1') {
core.setFailed('PHP 8.1 is not supported on setup-php v1.\nPlease upgrade to v2 - https://github.com/shivammathur/setup-php/wiki/Switch-to-v2'); core.setFailed('PHP 8.1 is not supported on setup-php v1.\nPlease upgrade to v2 - https://github.com/shivammathur/setup-php/wiki/Switch-to-v2');
return; return;
} }
// check the os version and run the respective script if (version) {
let script_path = ''; const os_version = process.platform;
switch (os_version) { // check the os version and run the respective script
case 'darwin': let script_path = '';
case 'linux': switch (os_version) {
script_path = await build(os_version + '.sh', version, os_version); case 'darwin':
await exec_1.exec('bash ' + script_path + ' ' + version + ' ' + __dirname); case 'linux':
break; script_path = await build(os_version + '.sh', version, os_version);
case 'win32': await exec_1.exec('bash ' + script_path + ' ' + version + ' ' + __dirname);
script_path = await build('win32.ps1', version, os_version); break;
await exec_1.exec('pwsh ' + script_path + ' ' + version + ' ' + __dirname); case 'win32':
break; script_path = await build('win32.ps1', version, os_version);
await exec_1.exec('pwsh ' + script_path + ' ' + version + ' ' + __dirname);
break;
}
}
else {
core.setFailed('Unable to get the PHP version');
} }
} }
catch (error) { catch (error) {

View File

@ -0,0 +1,6 @@
{
"latest": "8.0",
"5.x": "5.6",
"7.x": "7.4",
"8.x": "8.0"
}

View File

@ -58,27 +58,32 @@ export async function run(): Promise<void> {
core.warning( core.warning(
'setup-php v1 is deprecated.\nPlease upgrade to v2 - https://github.com/shivammathur/setup-php/wiki/Switch-to-v2' 'setup-php v1 is deprecated.\nPlease upgrade to v2 - https://github.com/shivammathur/setup-php/wiki/Switch-to-v2'
); );
const os_version: string = process.platform; const version: string = await utils.parseVersion(
let version: string = await utils.getInput('php-version', true); await utils.getInput('php-version', true)
version = version.length > 1 ? version.slice(0, 3) : version + '.0'; );
if (version == '8.1') { if (version == '8.1') {
core.setFailed( core.setFailed(
'PHP 8.1 is not supported on setup-php v1.\nPlease upgrade to v2 - https://github.com/shivammathur/setup-php/wiki/Switch-to-v2' 'PHP 8.1 is not supported on setup-php v1.\nPlease upgrade to v2 - https://github.com/shivammathur/setup-php/wiki/Switch-to-v2'
); );
return; return;
} }
// check the os version and run the respective script if (version) {
let script_path = ''; const os_version: string = process.platform;
switch (os_version) { // check the os version and run the respective script
case 'darwin': let script_path = '';
case 'linux': switch (os_version) {
script_path = await build(os_version + '.sh', version, os_version); case 'darwin':
await exec('bash ' + script_path + ' ' + version + ' ' + __dirname); case 'linux':
break; script_path = await build(os_version + '.sh', version, os_version);
case 'win32': await exec('bash ' + script_path + ' ' + version + ' ' + __dirname);
script_path = await build('win32.ps1', version, os_version); break;
await exec('pwsh ' + script_path + ' ' + version + ' ' + __dirname); case 'win32':
break; script_path = await build('win32.ps1', version, os_version);
await exec('pwsh ' + script_path + ' ' + version + ' ' + __dirname);
break;
}
} else {
core.setFailed('Unable to get the PHP version');
} }
} catch (error) { } catch (error) {
core.setFailed(error.message); core.setFailed(error.message);

View File

@ -1,4 +1,6 @@
import {IncomingMessage} from 'http';
import * as fs from 'fs'; import * as fs from 'fs';
import * as https from 'https';
import * as path from 'path'; import * as path from 'path';
import * as core from '@actions/core'; import * as core from '@actions/core';
@ -41,6 +43,45 @@ export async function getInput(
} }
} }
/**
* Function to fetch an URL
*
* @param url
*/
export async function fetch(url: string): Promise<string> {
const fetch_promise: Promise<string> = new Promise(resolve => {
const req = https.get(url, (res: IncomingMessage) => {
res.setEncoding('utf8');
let body = '';
res.on('data', chunk => (body += chunk));
res.on('end', () => resolve(body));
});
req.end();
});
return await fetch_promise;
}
/**
* Function to parse PHP version.
*
* @param version
*/
export async function parseVersion(version: string): Promise<string> {
const manifest =
'https://raw.githubusercontent.com/shivammathur/setup-php/develop/src/configs/php-versions.json';
switch (true) {
case /^(latest|\d+\.x)$/.test(version):
return JSON.parse(await fetch(manifest))[version];
default:
switch (true) {
case version.length > 1:
return version.slice(0, 3);
default:
return version + '.0';
}
}
}
/** /**
* Async foreach loop * Async foreach loop
* *