#! /usr/bin/env runjs var argsjs = require('component-args.js'); var packagejs = require('component-package.js'); var filesystemjs = require('component-filesystem.js'); var MAKESELF_PACKAGE_INFO = { 'package': 'https://publicbucket-1251781687.coscd.myqcloud.com/makeself-2.4.0.tar.gz', //'package': 'https://playsecurity.org/getdoc/2552_C2AE09CBA9C18B4B9E5472E0C2304C74/makeself-2.4.0.tar.gz', 'sha256': '76a8c3f3fad1b55c39ba2904a19e74962151f9481df03091d4e54938bdd13f50', 'basePath': '~/.jssp/builder/makeself-2.4.0', 'subPath': 'makeself-release-2.4.0', 'bin': 'makeself.sh' }; var MAKESELF_PACKAGE_INFO_v230 = { 'package': 'https://publicbucket-1251781687.coscd.myqcloud.com/makeself-2.3.0.tar.gz', //'package': 'https://playsecurity.org/getdoc/1628_C2F12AFBC92C8A19A2E914B457AD053E/makeself-2.3.0.tar.gz', 'sha256': '87385ed878938c4cd6907d1401ec6ba5bee2224fb97f7865a11e617bf94d4a0b', 'basePath': '~/.jssp/builder/makeself-2.3.0', 'subPath': 'makeself-2.3.0', 'bin': 'makeself.sh' }; var sampleMakeselfJSON = { "files": [ "file1.txt", "file2.txt" ], "target": { "options": [ "--sha256" ], // https://makeself.io/ "fileName": "sample.sh", "label": "sample label", "startupScript": "./startup.sh", "startupScriptArgs": [] } }; var main = () => { var args = argsjs.parseDefARGs(); var makeself = $$.file(args.val('c', 'config') || 'makeself.json'); if (!(makeself.exists())) { xprintln('[ERROR] Cannot find file `makeself.json`.'); xprintln('[INFO] Sample: ' + $$.stringify($$.parseJSON(JSON.stringify(sampleMakeselfJSON)), true)); return; } var makeselfJSON = JSON.parse($$.rFile(makeself).string()); xprintln('[INFO] Get makeself.sh local package info.'); var makeselfLocalPackage = packagejs.getLocalPackage(MAKESELF_PACKAGE_INFO, true); xprintln('[INFO] Check local temp dir: .makeself_js_temp_dir'); var tempPath = $$.file('.makeself_js_temp_dir'); if (tempPath.exists()) { __.fileutil.deleteDirectory(tempPath); } tempPath.mkdirs(); var abort = false; makeselfJSON.files.forEach((fn) => { if (abort) { return; } var f = $$.file(fn); if (!f.exists()) { abort = true; xprintln('[ERROR] File not exists: ' + fn); return; } xprintln('[INFO] Copy file: ' + fn); __.ioutil.copyFile(f, $$.file(tempPath, f.getName())); if ((makeselfJSON.target.startupScript == $STR(f.getName())) || (makeselfJSON.target.startupScript == $STR('./' + f.getName()))) { xprintln('[INFO] Set file executable: ' + fn); filesystemjs.chmodAddExec($$.file(tempPath, f.getName())); } }); if (abort) { return; } if (makeselfJSON.target == null) { makeselfJSON.target = {}; } var makeselfCommands = [ makeselfLocalPackage.binFile.getAbsolutePath() ]; if (makeselfJSON.target.options) { makeselfCommands = makeselfCommands.concat(makeselfJSON.target.options); } makeselfCommands = makeselfCommands.concat(['.makeself_js_temp_dir', makeselfJSON.target.fileName || 'unnamed.sh', makeselfJSON.target.label || '', makeselfJSON.target.startupScript ]); if (makeselfJSON.target.startupScriptArgs) { makeselfJSON.target.startupScriptArgs.forEach((a) => { makeselfCommands.push(a); }); } $$.shell().inheritIO().commands(makeselfCommands).run(); xprintln('[INFO] Clean up local temp dir: .makeself_js_temp_dir'); if (tempPath.exists()) { __.fileutil.deleteDirectory(tempPath); } }; main();