Skip to content

Commit

Permalink
Add support to specify version in \d.x notation
Browse files Browse the repository at this point in the history
  • Loading branch information
shivammathur committed Jan 16, 2021
1 parent 6972aed commit fbc8407
Show file tree
Hide file tree
Showing 5 changed files with 95 additions and 18 deletions.
16 changes: 15 additions & 1 deletion __tests__/utils.test.ts
Expand Up @@ -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> {
fs.unlink(path, error => {
if (error) {
Expand All @@ -33,10 +39,18 @@ describe('Utils tests', () => {
}).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('latest')).toBe('8.0');
expect(await utils.parseVersion('5.x')).toBe('5.6');
expect(await utils.parseVersion('4.x')).toBe(undefined);
});

it('checking asyncForEach', async () => {
Expand Down
50 changes: 41 additions & 9 deletions dist/index.js
Expand Up @@ -1054,8 +1054,9 @@ var __importStar = (this && this.__importStar) || function (mod) {
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.customPackage = exports.scriptTool = exports.scriptExtension = exports.joins = exports.getCommand = exports.getUnsupportedLog = 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.getInput = exports.readEnv = void 0;
exports.customPackage = exports.scriptTool = exports.scriptExtension = exports.joins = exports.getCommand = exports.getUnsupportedLog = 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 https = __importStar(__webpack_require__(211));
const path = __importStar(__webpack_require__(622));
const core = __importStar(__webpack_require__(470));
/**
Expand Down Expand Up @@ -1094,15 +1095,34 @@ async function getInput(name, mandatory) {
}
}
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) {
switch (version) {
case 'latest':
return '8.0';
const manifest = 'https://dl.bintray.com/shivammathur/php/php-versions.json';
switch (true) {
case /latest|\d.x/.test(version):

This comment was marked as resolved.

Copy link
@glensc

glensc Feb 4, 2021

you should:

  1. anchor regex, so junk won't be treated as valid "latest-poo" for example
  2. allow multiple digits for future php 10.x for example
  3. escape dot, to prevent "1ax" to be valid match
case /^(latest|\d+\.x)$/.test(version):
return JSON.parse(await fetch(manifest))[version];
default:
switch (true) {
case version.length > 1:
Expand Down Expand Up @@ -1394,6 +1414,13 @@ async function customPackage(pkg, type, version, os_version) {
exports.customPackage = customPackage;


/***/ }),

/***/ 211:
/***/ (function(module) {

module.exports = require("https");

/***/ }),

/***/ 357:
Expand Down Expand Up @@ -2595,11 +2622,16 @@ exports.getScript = getScript;
async function run() {
try {
const version = await utils.parseVersion(await utils.getInput('php-version', true));
const os_version = process.platform;
const tool = await utils.scriptTool(os_version);
const script = os_version + (await utils.scriptExtension(os_version));
const location = await getScript(script, version, os_version);
await exec_1.exec(await utils.joins(tool, location, version, __dirname));
if (version) {
const os_version = process.platform;
const tool = await utils.scriptTool(os_version);
const script = os_version + (await utils.scriptExtension(os_version));
const location = await getScript(script, version, os_version);
await exec_1.exec(await utils.joins(tool, location, version, __dirname));
}
else {
core.setFailed('Unable to get the PHP version');
}
}
catch (error) {
core.setFailed(error.message);
Expand Down
6 changes: 6 additions & 0 deletions src/configs/php-versions.json
@@ -0,0 +1,6 @@
{
"latest": "8.0",
"5.x": "5.6",
"7.x": "7.4",
"8.x": "8.0"
}
14 changes: 9 additions & 5 deletions src/install.ts
Expand Up @@ -54,11 +54,15 @@ export async function run(): Promise<void> {
const version: string = await utils.parseVersion(
await utils.getInput('php-version', true)
);
const os_version: string = process.platform;
const tool = await utils.scriptTool(os_version);
const script = os_version + (await utils.scriptExtension(os_version));
const location = await getScript(script, version, os_version);
await exec(await utils.joins(tool, location, version, __dirname));
if (version) {
const os_version: string = process.platform;
const tool = await utils.scriptTool(os_version);
const script = os_version + (await utils.scriptExtension(os_version));
const location = await getScript(script, version, os_version);
await exec(await utils.joins(tool, location, version, __dirname));
} else {
core.setFailed('Unable to get the PHP version');
}
} catch (error) {
core.setFailed(error.message);
}
Expand Down
27 changes: 24 additions & 3 deletions src/utils.ts
@@ -1,4 +1,6 @@
import {IncomingMessage} from 'http';
import * as fs from 'fs';
import * as https from 'https';
import * as path from 'path';
import * as core from '@actions/core';

Expand Down Expand Up @@ -41,15 +43,34 @@ 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> {
switch (version) {
case 'latest':
return '8.0';
const manifest = 'https://dl.bintray.com/shivammathur/php/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:
Expand Down

0 comments on commit fbc8407

Please sign in to comment.