Skip to content

Commit

Permalink
Update for Node8 (#48)
Browse files Browse the repository at this point in the history
* Update to es6 and async/await.
* Update travis.yml to stop building on node < 8
  • Loading branch information
jamestclark authored and Mousius committed Mar 22, 2018
1 parent 422e112 commit 0cbe4c9
Show file tree
Hide file tree
Showing 20 changed files with 2,760 additions and 371 deletions.
5 changes: 1 addition & 4 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
language: node_js
node_js:
- "node"
- "8"
- "6"
- "4"
- "0.12"
- "0.10"
addons:
code_climate:
repo_token: 033efc868120808faa564200fe1b302bac2059910ca4fcdaddbe8174179863f9
Expand Down
48 changes: 28 additions & 20 deletions bin/speculate.js
Original file line number Diff line number Diff line change
@@ -1,41 +1,49 @@
#! /usr/bin/env node
'use strict';

var path = require('path');
var program = require('commander');
const path = require('path');
const program = require('commander');

var validator = require('../lib/validator');
var generate = require('../lib/generate');
var clean = require('../lib/clean');
var commandPkg = require('../package');
const validator = require('../lib/validator');
const generate = require('../lib/generate');
const clean = require('../lib/clean');
const commandPkg = require('../package');

var cwd = process.cwd();
var isValid = validator(cwd);
const cwd = process.cwd();
const isValid = validator(cwd);

if (!isValid) {
// eslint-disable-next-line no-console
console.error('Please run speculate from within a valid Node.js project');
process.exit(1);
}

var projectPkg = require(path.resolve(cwd, './package.json'));
const projectPkg = require(path.resolve(cwd, './package.json'));

program
.version(commandPkg.version)
.option('-r --release <release>', 'Specify release number of package')
.option('-n --name <name>', 'Specify custom name for package')
.parse(process.argv);

// Commander has a magic property called name when not overriden by a parameter
var name = program.name instanceof Function ? undefined : program.name;

clean(cwd, projectPkg);
generate(cwd, projectPkg, program.release, name, function (err, generated) {
if (err) {
// Commander has a magic property called name when not overridden by a parameter
const name = program.name instanceof Function ? undefined : program.name;

async function runTasks() {
clean(cwd, projectPkg);

try {
const files = await generate(cwd, projectPkg, program.release, name);
files.forEach((file) => {
// eslint-disable-next-line no-console
console.log('Created ./%s', file);
});
process.exit(0);
} catch (err) {
// eslint-disable-next-line no-console
console.error('Error:', err.message);
process.exit(1);
}
}

generated.forEach(function (file) {
console.log('Created ./%s', file);
});
process.exit(0);
});
runTasks();
30 changes: 17 additions & 13 deletions lib/archiver.js
Original file line number Diff line number Diff line change
@@ -1,22 +1,26 @@
var tar = require('tar-fs');
var fs = require('fs');
var zlib = require('zlib');
var path = require('path');
'use strict';

var IGNORE_REGEX = /SOURCES|SPECS|RPMS|SRPMS|\.git/;
const tar = require('tar-fs');
const fs = require('fs');
const zlib = require('zlib');
const path = require('path');

module.exports.compress = function (source, target, cb) {
var gzip = zlib.createGzip();
var ws = fs.createWriteStream(target);
var rs = tar.pack(source, {
const IGNORE_REGEX = /SOURCES|SPECS|RPMS|SRPMS|\.git/;

module.exports.compress = async function (source, target) {
const gzip = zlib.createGzip();
const ws = fs.createWriteStream(target);
const rs = tar.pack(source, {
ignore: function (name) {
return IGNORE_REGEX.test(path.relative(source, name));
}
});

rs.on('error', cb);
ws.on('error', cb);
ws.on('close', cb);
return new Promise((resolve, reject) => {
rs.on('error', reject);
ws.on('error', reject);
ws.on('close', resolve);

rs.pipe(gzip).pipe(ws);
rs.pipe(gzip).pipe(ws);
});
};
12 changes: 7 additions & 5 deletions lib/clean.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
var rimraf = require('rimraf');
'use strict';

var files = require('./files');
const rimraf = require('rimraf');

const files = require('./files');

module.exports = function (root, pkg) {
var serviceFilePath = files.serviceFile(root, pkg);
var specsDirectory = files.specsDirectory(root);
var sourcesDirectory = files.sourcesDirectory(root);
const serviceFilePath = files.serviceFile(root, pkg);
const specsDirectory = files.specsDirectory(root);
const sourcesDirectory = files.sourcesDirectory(root);

rimraf.sync(serviceFilePath);
rimraf.sync(specsDirectory);
Expand Down
6 changes: 4 additions & 2 deletions lib/files.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
var path = require('path');
'use strict';

const path = require('path');

module.exports = {
serviceFile: function (root, pkg) {
Expand All @@ -14,7 +16,7 @@ module.exports = {
return path.resolve(root, 'SOURCES');
},
sourcesArchive: function (root, pkg) {
var sourcesDirectory = this.sourcesDirectory(root);
const sourcesDirectory = this.sourcesDirectory(root);

return path.resolve(sourcesDirectory, pkg.name + '.tar.gz');
}
Expand Down
61 changes: 30 additions & 31 deletions lib/generate.js
Original file line number Diff line number Diff line change
@@ -1,24 +1,26 @@
var _ = require('lodash');
var fs = require('fs');
var path = require('path');
'use strict';

var archiver = require('./archiver');
var createServiceFile = require('./service');
var createSpecFile = require('./spec');
var files = require('./files');
const _ = require('lodash');
const fs = require('fs');
const path = require('path');

const archiver = require('./archiver');
const createServiceFile = require('./service');
const createSpecFile = require('./spec');
const files = require('./files');

function generateServiceFile(root, pkg) {
var serviceFileContents = createServiceFile(pkg);
var serviceFilePath = files.serviceFile(root, pkg);
const serviceFileContents = createServiceFile(pkg);
const serviceFilePath = files.serviceFile(root, pkg);

fs.writeFileSync(serviceFilePath, serviceFileContents);

return serviceFilePath;
}

function generateSpecFile(root, pkg, release) {
var specFileContents = createSpecFile(pkg, release);
var specFilePath = files.specFile(root, pkg);
const specFileContents = createSpecFile(pkg, release);
const specFilePath = files.specFile(root, pkg);

fs.writeFileSync(specFilePath, specFileContents);

Expand All @@ -34,31 +36,28 @@ function addCustomFieldsToPackage(pkg, customName) {
}

function relativeToRoot(root, files) {
return files.map(function (file) {
return files.map((file) => {
return path.relative(root, file);
});
}

module.exports = function (root, pkg, release, customName, cb) {
var customPackage = addCustomFieldsToPackage(pkg, customName);
var specsDirectory = files.specsDirectory(root);
var sourcesDirectory = files.sourcesDirectory(root);
var sourcesArchive = files.sourcesArchive(root, customPackage);
module.exports = async function (root, pkg, release, customName) {
const customPackage = addCustomFieldsToPackage(pkg, customName);
const specsDirectory = files.specsDirectory(root);
const sourcesDirectory = files.sourcesDirectory(root);
const sourcesArchive = files.sourcesArchive(root, customPackage);

fs.mkdirSync(specsDirectory);
fs.mkdirSync(sourcesDirectory);
var serviceFile = generateServiceFile(root, customPackage);
var specFile = generateSpecFile(specsDirectory, customPackage, release);

archiver.compress(root, sourcesArchive, function (err) {
if (err) {
return cb(err);
}

cb(null, relativeToRoot(root, [
specFile,
sourcesArchive,
serviceFile
]));
});

const serviceFile = generateServiceFile(root, customPackage);
const specFile = generateSpecFile(specsDirectory, customPackage, release);

await archiver.compress(root, sourcesArchive);

return relativeToRoot(root, [
specFile,
sourcesArchive,
serviceFile
]);
};
16 changes: 9 additions & 7 deletions lib/service.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
var hogan = require('hogan.js');
var fs = require('fs');
var path = require('path');
var getServiceProperties = require('./serviceProperties');
'use strict';

var templateFile = fs.readFileSync(path.resolve(__dirname, '../templates/service.mustache'), 'utf-8');
var template = hogan.compile(templateFile);
const hogan = require('hogan.js');
const fs = require('fs');
const path = require('path');
const getServiceProperties = require('./serviceProperties');

const templateFile = fs.readFileSync(path.resolve(__dirname, '../templates/service.mustache'), 'utf-8');
const template = hogan.compile(templateFile);

module.exports = function (pkg) {
var serviceProperties = getServiceProperties(pkg);
const serviceProperties = getServiceProperties(pkg);

return template.render(serviceProperties);
};
18 changes: 10 additions & 8 deletions lib/serviceProperties.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,19 @@
var truncate = require('./truncate');
var _ = require('lodash');
'use strict';

const truncate = require('./truncate');
const _ = require('lodash');

function getEnvironment(pkg) {
var environment = _.get(pkg, 'spec.environment', {});
return Object.keys(environment).map(function(key) {
return { key: key, value: environment[key]};
const environment = _.get(pkg, 'spec.environment', {});
return Object.keys(environment).map((key) => {
return { key, value: environment[key] };
});
}

function getServiceOptions(pkg) {
var serviceOptions = _.get(pkg, 'spec.serviceOptions', {});
return Object.keys(serviceOptions).map(function(key) {
return { key: key, value: serviceOptions[key]};
const serviceOptions = _.get(pkg, 'spec.serviceOptions', {});
return Object.keys(serviceOptions).map((key) => {
return { key, value: serviceOptions[key] };
});
}

Expand Down
48 changes: 25 additions & 23 deletions lib/spec.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
var hogan = require('hogan.js');
var fs = require('fs');
var path = require('path');
var _ = require('lodash');
var getServiceProperties = require('./serviceProperties');
'use strict';

var templateFile = fs.readFileSync(path.resolve(__dirname, '../templates/spec.mustache'), 'utf-8');
var template = hogan.compile(templateFile);
const hogan = require('hogan.js');
const fs = require('fs');
const path = require('path');
const _ = require('lodash');
const getServiceProperties = require('./serviceProperties');

var defaultRelease = 1;
const templateFile = fs.readFileSync(path.resolve(__dirname, '../templates/spec.mustache'), 'utf-8');
const template = hogan.compile(templateFile);

const defaultRelease = 1;

function getReleaseNumber(release) {
if (release) {
Expand All @@ -30,13 +32,13 @@ function getNodeVersion(pkg) {
}

function getExecutableFiles(pkg) {
var name = pkg.name;
var executableFiles = _.get(pkg, 'spec.executable', []).map(function (file) {
const name = pkg.name;
const executableFiles = _.get(pkg, 'spec.executable', []).map((file) => {
return path.join('/usr/lib/', name, file);
});

return {
executableFiles: executableFiles,
executableFiles,
hasExecutableFiles: executableFiles.length !== 0
};
}
Expand All @@ -50,18 +52,18 @@ function shouldPrune(pkg) {
}

module.exports = function (pkg, release) {
var serviceProperties = _.assign({
release: getReleaseNumber(release),
requires: getRequiredPackages(pkg),
buildRequires: getRequiredBuildPackages(pkg),
postInstallCommands: getPostInstallCommands(pkg),
nodeVersion: getNodeVersion(pkg),
version: pkg.version,
license: pkg.license,
prune: shouldPrune(pkg)
},
getExecutableFiles(pkg),
getServiceProperties(pkg)
const serviceProperties = _.assign({
release: getReleaseNumber(release),
requires: getRequiredPackages(pkg),
buildRequires: getRequiredBuildPackages(pkg),
postInstallCommands: getPostInstallCommands(pkg),
nodeVersion: getNodeVersion(pkg),
version: pkg.version,
license: pkg.license,
prune: shouldPrune(pkg)
},
getExecutableFiles(pkg),
getServiceProperties(pkg)
);

return template.render(serviceProperties);
Expand Down
4 changes: 3 additions & 1 deletion lib/truncate.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
var linuxUsernameLimit = 32;
'use strict';

const linuxUsernameLimit = 32;

module.exports = function (name) {
return name.substring(0, linuxUsernameLimit);
Expand Down
4 changes: 3 additions & 1 deletion lib/validator.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
var path = require('path');
'use strict';

const path = require('path');

module.exports = function (projectDirectory) {
try {
Expand Down
Loading

0 comments on commit 0cbe4c9

Please sign in to comment.