Skip to content

Commit

Permalink
test: adding lint script and ci
Browse files Browse the repository at this point in the history
  • Loading branch information
martinheidegger committed May 12, 2021
1 parent af61664 commit 9fa2686
Show file tree
Hide file tree
Showing 6 changed files with 222 additions and 209 deletions.
14 changes: 14 additions & 0 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
name: Lint

on: [push, pull_request]

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: 16
- run: npm i
- run: npm run lint
159 changes: 79 additions & 80 deletions full-icu.js
Original file line number Diff line number Diff line change
@@ -1,91 +1,90 @@
// Copyright (C) 2015 IBM Corporation and Others. All Rights Reserved.

//var process = require('process');
//console.dir(process.env);
// var process = require('process');
// console.dir(process.env);

var fs = require('fs');
var path = require('path');
const fs = require('fs')
const path = require('path')

if(!process || !process.versions || !process.versions.node) {
throw Error('Sorry- don’t know what version of Node you are on.');
if (!process || !process.versions || !process.versions.node) {
throw Error('Sorry- don’t know what version of Node you are on.')
}

var nodever = module.exports.nodever = process.versions.node;
const nodever = module.exports.nodever = process.versions.node

var nodesplit = nodever.split('.');
const nodesplit = nodever.split('.')

var node_maj = module.exports.node_maj = nodesplit[0];
var node_min = module.exports.node_min = nodesplit[1];
const major = module.exports.node_maj = nodesplit[0]
const minor = module.exports.node_min = nodesplit[1]

if((node_maj == 0) && (node_min < 12)) {
module.exports.oldNode = true;
} else if(process.config.variables.v8_enable_i18n_support === 0) {
module.exports.noi18n = true;
if ((major === 0) && (minor < 12)) {
module.exports.oldNode = true
} else if (process.config.variables.v8_enable_i18n_support === 0) {
module.exports.noi18n = true
} else {

/*
Commented until https://github.com/nodejs/node/issues/3460 is fixed.
if( node_maj >= 7 ) {
if( nodever === '7.0.0-pre' ) {
module.exports.nodeDetectIcu = 'maybe';
} else {
module.exports.nodeDetectIcu = true;
}
}
*/

if(!process.config.variables.icu_small) {
module.exports.icu_small = false;
// not going to work..
if(process.config.variables.icu_gyp_path === 'tools/icu/icu-system.gyp') {
// this will be the case under homebrew, redhat/fedora, others..
module.exports.icu_system = true;
}
} else {
module.exports.icu_small = true;
}

var icuver;
var icuend = 'l';

if(process.versions.icu) {
icuver = process.versions.icu; // Thanks https://github.com/nodejs/node/issues/3089
} else {
icuver = process.config.variables.icu_ver_major; // only get the major
}

if(!icuver) {
throw Error('Cannot determine Node’s ICU version!');
} else {
module.exports.icuver = icuver;
}

// get 'major' number
var icumaj = module.exports.icumaj = icuver.split('.')[0];

if(process.config.variables.icu_endianness) {
icuend = process.config.variables.icu_endianness.toLowerCase();
}

if( (icuend.length != 1) || ("lbe".indexOf(icuend) == -1)) {
throw Error('Don’t know what to make of endianness “'+icuend+'” - expected l, b, or e');
} else {
module.exports.icuend = icuend;
}

var icupkg = module.exports.icupkg = "icu4c-data@" + icumaj+icuend;

var icudat = module.exports.icudat = "icudt"+icumaj+icuend+".dat";

var haveDat = module.exports.haveDat = function haveDat(d) {
if(!d) d = path.resolve(__dirname, icudat);
return fs.existsSync(d);
}

var datPath = module.exports.datPath = function datPath(d) {
if(!d) d = path.resolve(__dirname, icudat);
if(haveDat(d)) return fs.realpathSync(d);
throw Error('Does not exist: ' + fs.realpathSync(d));
}
/*
Commented until https://github.com/nodejs/node/issues/3460 is fixed.
if( major >= 7 ) {
if( nodever === '7.0.0-pre' ) {
module.exports.nodeDetectIcu = 'maybe';
} else {
module.exports.nodeDetectIcu = true;
}
}
*/

if (!process.config.variables.icu_small) {
module.exports.icu_small = false
// not going to work..
if (process.config.variables.icu_gyp_path === 'tools/icu/icu-system.gyp') {
// this will be the case under homebrew, redhat/fedora, others..
module.exports.icu_system = true
}
} else {
module.exports.icu_small = true
}

let icuver
let icuend = 'l'

if (process.versions.icu) {
icuver = process.versions.icu // Thanks https://github.com/nodejs/node/issues/3089
} else {
icuver = process.config.variables.icu_ver_major // only get the major
}

if (!icuver) {
throw Error('Cannot determine Node’s ICU version!')
} else {
module.exports.icuver = icuver
}

// get 'major' number
const icumaj = module.exports.icumaj = icuver.split('.')[0]

if (process.config.variables.icu_endianness) {
icuend = process.config.variables.icu_endianness.toLowerCase()
}

if ((icuend.length !== 1) || ('lbe'.indexOf(icuend) === -1)) {
throw Error('Don’t know what to make of endianness “' + icuend + '” - expected l, b, or e')
} else {
module.exports.icuend = icuend
}

module.exports.icupkg = 'icu4c-data@' + icumaj + icuend

const icudat = module.exports.icudat = 'icudt' + icumaj + icuend + '.dat'

const haveDat = module.exports.haveDat = function haveDat (d) {
if (!d) d = path.resolve(__dirname, icudat)
return fs.existsSync(d)
}

module.exports.datPath = function datPath (d) {
if (!d) d = path.resolve(__dirname, icudat)
if (haveDat(d)) return fs.realpathSync(d)
throw Error('Does not exist: ' + fs.realpathSync(d))
}
}
144 changes: 71 additions & 73 deletions install-spawn.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,88 +2,86 @@

// Install by using spawn

var path = require('path');
var fs = require('fs');
var child_process = require('child_process');
const path = require('path')
const fs = require('fs')
const spawnSync = require('child_process').spawnSync

var isglobal = process.env.npm_config_global === 'true';
var npmrc = '.npmrc';
var npmrcPath = path.resolve(process.env.INIT_CWD, npmrc);
const isglobal = process.env.npm_config_global === 'true'
const npmrc = '.npmrc'
const npmrcPath = path.resolve(process.env.INIT_CWD, npmrc)

// uses semver regex from https://semver.org/
const YARN_REGEX = /yarn(-(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?)?((.*cli)?\.c?js)?$/;
const YARN_REGEX = /yarn(-(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?)?((.*cli)?\.c?js)?$/

module.exports = function npmInstallNpm(fullIcu, advice) {
var icupkg = fullIcu.icupkg;
var icudat = fullIcu.icudat;
module.exports = function npmInstallNpm (fullIcu, advice) {
const icupkg = fullIcu.icupkg
const icudat = fullIcu.icudat

var cmdPath = nodePath = process.env.npm_node_execpath;
let cmdPath = process.env.npm_node_execpath

var npmPath = process.env.npm_execpath;
const npmPath = process.env.npm_execpath

var args;
let args

if (YARN_REGEX.test(npmPath)) {
console.log('Looks like you are using yarn…')
args = [npmPath, 'add', icupkg, '--no-lockfile', '--ignore-scripts']
} else if (npmPath) {
args = [npmPath, 'install', icupkg]
} else {
// attempt to launch npm.
// do not try yarn here
console.log('(Hmm… doesn’t look like NPM called us. Let’s try calling NPM.)')
cmdPath = 'npm'
args = ['install', icupkg]
}

if (YARN_REGEX.test(npmPath) ) {
console.log('Looks like you are using yarn…');
installVerb = 'add';
args = [ npmPath, 'add', icupkg, '--no-lockfile', '--ignore-scripts' ];
} else if(npmPath) {
args = [ npmPath, 'install', icupkg ];
} else {
// attempt to launch npm.
// do not try yarn here
console.log('(Hmm… doesn’t look like NPM called us. Let’s try calling NPM.)');
cmdPath = 'npm';
args = [ 'install', icupkg ];
}
if (fs.existsSync(npmrcPath)) {
try {
fs.linkSync(npmrcPath, npmrc)
} catch (e) {
fs.symlinkSync(npmrcPath, npmrc)
}
}

if(fs.existsSync(npmrcPath)) {
try {
fs.linkSync(npmrcPath, npmrc);
} catch(e) {
fs.symlinkSync(npmrcPath, npmrc);
}
}
console.log('full-icu$', cmdPath, args.join(' '))
const spawned = spawnSync(cmdPath, args, { stdio: 'inherit' })

console.log('full-icu$', cmdPath, args.join(' '));
var spawned = child_process.spawnSync(cmdPath, args, { stdio: 'inherit' });
if (fs.existsSync(npmrc)) {
try {
fs.unlinkSync(npmrc)
} catch (e) {
}
}

if(fs.existsSync(npmrc)) {
try {
fs.unlinkSync(npmrc);
} catch(e) {
}
}

if(spawned.error) {
throw(spawned.error);
} else if(spawned.status !== 0) {
throw(Error(cmdPath + ' ' + args.join(' ') + ' --> status ' + spawned.status));
} else {
var datPath;
if(isglobal) {
datPath = path.join('..','icu4c-data',icudat);
} else {
datPath = path.join('node_modules','icu4c-data',icudat);
}
if(fs.existsSync(icudat)) {
console.log(' √ ' + icudat + " (existing link?)");
} else if(!fs.existsSync(datPath)) {
console.log(' • ' + ' (no ' + icudat + ' at ‘' + datPath+'’)');
} else {
try {
fs.linkSync(datPath, icudat);
console.log(' √ ' + icudat + " (link)");
} catch(e) {
fs.symlinkSync(datPath, icudat);
console.log(' √ ' + icudat + " (symlink)");
}
}
if(!fullIcu.haveDat()) {
throw Error('Somehow failed to install ' + icudat);
} else {
advice();
}
}
};
if (spawned.error) {
throw (spawned.error)
} else if (spawned.status !== 0) {
throw (Error(cmdPath + ' ' + args.join(' ') + ' --> status ' + spawned.status))
} else {
let datPath
if (isglobal) {
datPath = path.join('..', 'icu4c-data', icudat)
} else {
datPath = path.join('node_modules', 'icu4c-data', icudat)
}
if (fs.existsSync(icudat)) {
console.log(' √ ' + icudat + ' (existing link?)')
} else if (!fs.existsSync(datPath)) {
console.log(' • ' + ' (no ' + icudat + ' at ‘' + datPath + '’)')
} else {
try {
fs.linkSync(datPath, icudat)
console.log(' √ ' + icudat + ' (link)')
} catch (e) {
fs.symlinkSync(datPath, icudat)
console.log(' √ ' + icudat + ' (symlink)')
}
}
if (!fullIcu.haveDat()) {
throw Error('Somehow failed to install ' + icudat)
} else {
advice()
}
}
}
9 changes: 4 additions & 5 deletions node-icu-data.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
#!/usr/bin/env node
// Copyright (C) 2015 IBM Corporation and Others. All Rights Reserved.

var fullIcu = require('./full-icu');
const fullIcu = require('./full-icu')

if(!fullIcu.datPath) {
throw Error('Full data path not available');
if (!fullIcu.datPath) {
throw Error('Full data path not available')
} else {
console.log(fullIcu.datPath());
console.log(fullIcu.datPath())
}

4 changes: 4 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
"version": "1.3.5-0",
"description": "install 'full-icu' data for your current node",
"scripts": {
"lint": "standard",
"postinstall": "node postinstall.js"
},
"keywords": [
Expand All @@ -20,5 +21,8 @@
},
"bugs": {
"url": "https://github.com/unicode-org/full-icu-npm/issues"
},
"devDependencies": {
"standard": "^16.0.3"
}
}
Loading

0 comments on commit 9fa2686

Please sign in to comment.