Skip to content

Commit

Permalink
Improve workflow and lint the code
Browse files Browse the repository at this point in the history
  • Loading branch information
shivammathur committed Nov 23, 2019
1 parent 2b938d9 commit 3f6c88d
Show file tree
Hide file tree
Showing 18 changed files with 1,503 additions and 446 deletions.
22 changes: 22 additions & 0 deletions .eslintrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"env": { "node": true, "jest": true },
"parser": "@typescript-eslint/parser",
"parserOptions": { "ecmaVersion": 2020, "sourceType": "module" },
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/eslint-recommended",
"plugin:@typescript-eslint/recommended",
"plugin:import/errors",
"plugin:import/warnings",
"plugin:import/typescript",
"plugin:prettier/recommended",
"prettier/@typescript-eslint"
],
"plugins": ["@typescript-eslint", "jest"],
"rules": {
"camelcase": "off",
"require-atomic-updates": "off",
"@typescript-eslint/ban-ts-ignore": "off",
"@typescript-eslint/camelcase": "off"
}
}
35 changes: 29 additions & 6 deletions .github/workflows/workflow.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,19 @@
name: Main workflow
on: [push, pull_request]
on:
pull_request:
branches:
- master
- develop
- verbose
paths-ignore:
- '**.md'
push:
branches:
- master
- develop
- verbose
paths-ignore:
- '**.md'
jobs:
run:
name: Run
Expand All @@ -20,11 +34,14 @@ jobs:
with:
node-version: 12.x

- name: Cache node modules
uses: actions/cache@preview
id: cache
- name: Get npm cache directory
id: npm-cache
run: echo "::set-output name=dir::$(npm config get cache)"

- name: Install dependencies
uses: actions/cache@v1
with:
path: node_modules
path: ${{ steps.npm-cache.outputs.dir }}
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
Expand All @@ -33,12 +50,18 @@ jobs:
if: steps.cache.outputs.cache-hit != 'true'
run: npm install

- name: Prettier Format Check
run: npm run format-check

- name: ESLint Check
run: npm run lint

- name: Run tests
run: npm test

- name: Send Coverage
continue-on-error: true
timeout-minutes: 2
timeout-minutes: 1
run: curl -s https://codecov.io/bash | bash -s -- -t ${{secrets.CODECOV_TOKEN}} -f coverage/clover.xml -n github-actions-codecov-${{ matrix.operating-system }}-php${{ matrix.php-versions }}

- name: Setup PHP with extensions and custom config
Expand Down
22 changes: 12 additions & 10 deletions __tests__/coverage.test.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
import * as config from '../src/config';
import * as coverage from '../src/coverage';
import * as extensions from '../src/coverage';

jest.mock('../src/extensions', () => ({
addExtension: jest.fn().mockImplementation(extension => {
Expand All @@ -24,48 +22,52 @@ describe('Config tests', () => {
});

it('checking addCoverage with PCOV on linux', async () => {
let linux: string = await coverage.addCoverage('pcov', '7.4', 'linux');
const linux: string = await coverage.addCoverage('pcov', '7.4', 'linux');
expect(linux).toContain('addExtension pcov');
expect(linux).toContain('sudo sed -i "/xdebug/d" $ini_file');
expect(linux).toContain('sudo phpdismod -v 7.4 xdebug');
});

it('checking addCoverage with PCOV on darwin', async () => {
let darwin: string = await coverage.addCoverage('pcov', '7.4', 'darwin');
const darwin: string = await coverage.addCoverage('pcov', '7.4', 'darwin');
expect(darwin).toContain('addExtension pcov');
});

it('checking addCoverage with Xdebug on windows', async () => {
let win32: string = await coverage.addCoverage('xdebug', '7.3', 'win32');
const win32: string = await coverage.addCoverage('xdebug', '7.3', 'win32');
expect(win32).toContain('addExtension xdebug');
});

it('checking addCoverage with Xdebug on linux', async () => {
let linux: string = await coverage.addCoverage('xdebug', '7.4', 'linux');
const linux: string = await coverage.addCoverage('xdebug', '7.4', 'linux');
expect(linux).toContain('addExtension xdebug');
});

it('checking addCoverage with Xdebug on darwin', async () => {
let darwin: string = await coverage.addCoverage('xdebug', '7.4', 'darwin');
const darwin: string = await coverage.addCoverage(
'xdebug',
'7.4',
'darwin'
);
expect(darwin).toContain('addExtension xdebug');
});

it('checking disableCoverage windows', async () => {
let win32 = await coverage.addCoverage('none', '7.4', 'win32');
const win32 = await coverage.addCoverage('none', '7.4', 'win32');
expect(win32).toContain('Disable-PhpExtension xdebug');
expect(win32).toContain('Disable-PhpExtension pcov');
});

it('checking disableCoverage on linux', async () => {
let linux: string = await coverage.addCoverage('none', '7.4', 'linux');
const linux: string = await coverage.addCoverage('none', '7.4', 'linux');
expect(linux).toContain('sudo phpdismod -v 7.4 xdebug');
expect(linux).toContain('sudo phpdismod -v 7.4 pcov');
expect(linux).toContain('sudo sed -i "/xdebug/d" $ini_file');
expect(linux).toContain('sudo sed -i "/pcov/d" $ini_file');
});

it('checking disableCoverage on darwin', async () => {
let darwin: string = await coverage.addCoverage('none', '7.4', 'darwin');
const darwin: string = await coverage.addCoverage('none', '7.4', 'darwin');
expect(darwin).toContain('sudo sed -i \'\' "/xdebug/d" $ini_file');
expect(darwin).toContain('sudo sed -i \'\' "/pcov/d" $ini_file');
});
Expand Down
2 changes: 1 addition & 1 deletion __tests__/extensions.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ describe('Extension tests', () => {
expect(win32).toContain('Install-PhpExtension xdebug');
expect(win32).toContain('Install-PhpExtension pcov');
win32 = await extensions.addExtension('xdebug, pcov', '7.4', 'win32');
const extension_url: string =
const extension_url =
'https://xdebug.org/files/php_xdebug-2.8.0-7.4-vc15.dll';
expect(win32).toContain(
'Invoke-WebRequest -Uri ' +
Expand Down
23 changes: 12 additions & 11 deletions __tests__/install.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@ jest.mock('../src/install', () => ({
version: string,
os_version: string
): Promise<string> => {
let extension_csv: string = process.env['extension-csv'] || '';
let ini_values_csv: string = process.env['ini-values-csv'] || '';
let coverage_driver: string = process.env['coverage'] || '';
const extension_csv: string = process.env['extension-csv'] || '';
const ini_values_csv: string = process.env['ini-values-csv'] || '';
const coverage_driver: string = process.env['coverage'] || '';

let script: string = 'initial script';
let script = 'initial script ' + filename + version + os_version;
if (extension_csv) {
script += 'install extensions';
}
Expand All @@ -30,19 +30,20 @@ jest.mock('../src/install', () => ({
),
run: jest.fn().mockImplementation(
async (): Promise<string> => {
let os_version: string = process.env['RUNNER_OS'] || '';
let version: string = process.env['php-version'] || '';
let script: string = '';
const os_version: string = process.env['RUNNER_OS'] || '';
const version: string = process.env['php-version'] || '';
let script = '';
switch (os_version) {
case 'darwin':
script = await install.build(os_version + '.sh', version, os_version);
script += 'sh script.sh ' + version + ' ' + __dirname;
break;
case 'linux':
let pecl: string = process.env['pecl'] || '';
case 'linux': {
const pecl: string = process.env['pecl'] || '';
script = await install.build(os_version + '.sh', version, os_version);
script += 'sh script.sh ' + version + ' ' + pecl + ' ' + __dirname;
break;
}
case 'win32':
script = await install.build(os_version + '.sh', version, os_version);
script +=
Expand Down Expand Up @@ -72,7 +73,7 @@ function setEnv(
extension_csv: string,
ini_values_csv: string,
coverage_driver: string,
pecl: any
pecl: string
): void {
process.env['php-version'] = version;
process.env['RUNNER_OS'] = os;
Expand Down Expand Up @@ -116,7 +117,7 @@ describe('Install', () => {
expect(script).toContain('set coverage driver');
expect(script).toContain('sh script.sh 7.3 true');

setEnv('7.3', 'linux', 'a, b', 'a=b', 'x', true);
setEnv('7.3', 'linux', 'a, b', 'a=b', 'x', 'true');
// @ts-ignore
script = await install.run();
expect(script).toContain('initial script');
Expand Down
35 changes: 21 additions & 14 deletions __tests__/utils.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,28 +27,35 @@ describe('Utils tests', () => {
});

it('checking asyncForEach', async () => {
let array: Array<number> = [1, 2, 3, 4];
let sum: number = 0;
await utils.asyncForEach(array, function(num: number): void {
sum += num;
const array: Array<string> = ['a', 'b', 'c'];
let concat = '';
await utils.asyncForEach(array, async function(str: string): Promise<void> {
concat += str;
});
expect(sum).toBe(10);
expect(concat).toBe('abc');
});

it('checking asyncForEach', async () => {
expect(await utils.color('error')).toBe('31');
expect(await utils.color('success')).toBe('32');
expect(await utils.color('any')).toBe('32');
expect(await utils.color('warning')).toBe('33');
});

it('checking readScripts', async () => {
let rc: string = fs.readFileSync(
const rc: string = fs.readFileSync(
path.join(__dirname, '../src/scripts/7.4.sh'),
'utf8'
);
let darwin: string = fs.readFileSync(
const darwin: string = fs.readFileSync(
path.join(__dirname, '../src/scripts/darwin.sh'),
'utf8'
);
let linux: string = fs.readFileSync(
const linux: string = fs.readFileSync(
path.join(__dirname, '../src/scripts/linux.sh'),
'utf8'
);
let win32: string = fs.readFileSync(
const win32: string = fs.readFileSync(
path.join(__dirname, '../src/scripts/win32.ps1'),
'utf8'
);
Expand All @@ -64,11 +71,11 @@ describe('Utils tests', () => {
});

it('checking writeScripts', async () => {
let testString: string = 'sudo apt-get install php';
let runner_dir: string = process.env['RUNNER_TOOL_CACHE'] || '';
let script_path: string = path.join(runner_dir, 'test.sh');
const testString = 'sudo apt-get install php';
const runner_dir: string = process.env['RUNNER_TOOL_CACHE'] || '';
const script_path: string = path.join(runner_dir, 'test.sh');
await utils.writeScript('test.sh', testString);
await fs.readFile(script_path, function(error: any, data: Buffer) {
await fs.readFile(script_path, function(error: Error | null, data: Buffer) {
expect(testString).toBe(data.toString());
});
await cleanup(script_path);
Expand Down Expand Up @@ -97,7 +104,7 @@ describe('Utils tests', () => {
});

it('checking log', async () => {
let message: string = 'Test message';
const message = 'Test message';

let warning_log: string = await utils.log(message, 'win32', 'warning');
expect(warning_log).toEqual('printf "\\033[33;1m' + message + ' \\033[0m"');
Expand Down
70 changes: 35 additions & 35 deletions lib/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,47 +17,14 @@ var __importStar = (this && this.__importStar) || function (mod) {
};
Object.defineProperty(exports, "__esModule", { value: true });
const utils = __importStar(require("./utils"));
/**
* Function to add custom ini values
*
* @param ini_values_csv
* @param os_version
*/
function addINIValues(ini_values_csv, os_version, no_step = false) {
return __awaiter(this, void 0, void 0, function* () {
let script = '\n';
switch (no_step) {
case true:
script +=
(yield utils.stepLog('Add php.ini values', os_version)) +
(yield utils.suppressOutput(os_version)) +
'\n';
break;
case false:
default:
script += (yield utils.stepLog('Add php.ini values', os_version)) + '\n';
break;
}
switch (os_version) {
case 'win32':
return script + (yield addINIValuesWindows(ini_values_csv));
case 'darwin':
case 'linux':
return script + (yield addINIValuesUnix(ini_values_csv));
default:
return yield utils.log('Platform ' + os_version + ' is not supported', os_version, 'error');
}
});
}
exports.addINIValues = addINIValues;
/**
* Add script to set custom ini values for unix
*
* @param ini_values_csv
*/
function addINIValuesUnix(ini_values_csv) {
return __awaiter(this, void 0, void 0, function* () {
let ini_values = yield utils.INIArray(ini_values_csv);
const ini_values = yield utils.INIArray(ini_values_csv);
let script = '\n';
yield utils.asyncForEach(ini_values, function (line) {
return __awaiter(this, void 0, void 0, function* () {
Expand All @@ -76,7 +43,7 @@ exports.addINIValuesUnix = addINIValuesUnix;
*/
function addINIValuesWindows(ini_values_csv) {
return __awaiter(this, void 0, void 0, function* () {
let ini_values = yield utils.INIArray(ini_values_csv);
const ini_values = yield utils.INIArray(ini_values_csv);
let script = '\n';
yield utils.asyncForEach(ini_values, function (line) {
return __awaiter(this, void 0, void 0, function* () {
Expand All @@ -91,3 +58,36 @@ function addINIValuesWindows(ini_values_csv) {
});
}
exports.addINIValuesWindows = addINIValuesWindows;
/**
* Function to add custom ini values
*
* @param ini_values_csv
* @param os_version
*/
function addINIValues(ini_values_csv, os_version, no_step = false) {
return __awaiter(this, void 0, void 0, function* () {
let script = '\n';
switch (no_step) {
case true:
script +=
(yield utils.stepLog('Add php.ini values', os_version)) +
(yield utils.suppressOutput(os_version)) +
'\n';
break;
case false:
default:
script += (yield utils.stepLog('Add php.ini values', os_version)) + '\n';
break;
}
switch (os_version) {
case 'win32':
return script + (yield addINIValuesWindows(ini_values_csv));
case 'darwin':
case 'linux':
return script + (yield addINIValuesUnix(ini_values_csv));
default:
return yield utils.log('Platform ' + os_version + ' is not supported', os_version, 'error');
}
});
}
exports.addINIValues = addINIValues;
Loading

0 comments on commit 3f6c88d

Please sign in to comment.