Files
js-scripts/scripts/makeself.js
2025-04-05 16:57:26 +08:00

97 lines
3.6 KiB
JavaScript

#! /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();