fix(posix): set WEBI_CHECKSUM in both bootstrap and installer

This commit is contained in:
AJ ONeal
2023-11-18 23:29:27 +00:00
parent c0c7e61cb5
commit 8aa665be56
2 changed files with 43 additions and 45 deletions

View File

@@ -1,8 +1,10 @@
'use strict';
var fs = require('node:fs');
var Crypto = require('crypto');
var Fs = require('node:fs/promises');
var path = require('node:path');
var request = require('@root/request');
var _normalize = require('../_webi/normalize.js');
var reInstallTpl = /\s*#?\s*{{ installer }}/;
@@ -39,10 +41,7 @@ Releases.renderBash = async function (
if (!tag) {
tag = '';
}
let installTxt = await fs.promises.readFile(
path.join(pkgdir, 'install.sh'),
'utf8',
);
let installTxt = await Fs.readFile(path.join(pkgdir, 'install.sh'), 'utf8');
installTxt = padScript(installTxt);
var vers = rel.version.split('.');
var v = {
@@ -55,7 +54,7 @@ Releases.renderBash = async function (
.replace(/^-/, ''),
};
var pkgFile = rel.filename || rel.name;
let tplTxt = await fs.promises.readFile(
let tplTxt = await Fs.readFile(
path.join(__dirname, 'install-package.tpl.sh'),
'utf8',
);
@@ -90,7 +89,10 @@ Releases.renderBash = async function (
]
.join(',')
.replace(/'/g, '');
let webiChecksum = await Releases.getWebiShChecksum();
let envReplacements = [
['WEBI_CHECKSUM', webiChecksum],
['WEBI_PKG', webiPkg],
['WEBI_HOST', baseurl],
['WEBI_OS', os],
@@ -127,7 +129,7 @@ Releases.renderBash = async function (
// #export WEBI_FOO=xyz => export WEBI_FOO='123'
// export WEBI_FOO= => export WEBI_FOO='123'
let envRe = new RegExp(
`^[ \\t]*#?[ \\t]*(export\\s)?[ \\t]*(${name})=.*`,
`^[ \\t]*#?[ \\t]*(export[ \\t])?[ \\t]*(${name})=.*`,
'm',
);
if (BAD_SH_RE.test(value)) {
@@ -156,10 +158,7 @@ Releases.renderPowerShell = async function (
if (!tag) {
tag = '';
}
let installTxt = await fs.promises.readFile(
path.join(pkgdir, 'install.ps1'),
'utf8',
);
let installTxt = await Fs.readFile(path.join(pkgdir, 'install.ps1'), 'utf8');
installTxt = padScript(installTxt);
/*
var vers = rel.version.split('.');
@@ -173,7 +172,7 @@ Releases.renderPowerShell = async function (
.replace(/^-/, '')
};
*/
let tplTxt = await fs.promises.readFile(
let tplTxt = await Fs.readFile(
path.join(__dirname, 'install-package.tpl.ps1'),
'utf8',
);
@@ -218,3 +217,32 @@ Releases.renderPowerShell = async function (
.replace(reInstallTpl, '\n' + installTxt)
);
};
var _webiShMeta = {
stale: 10 * 1000,
updated_at: 0,
checksum: '',
mtime: 0,
};
Releases.getWebiShChecksum = async function () {
let now = Date.now();
let ago = now - _webiShMeta.updated_at;
if (ago <= _webiShMeta.stale) {
return _webiShMeta.checksum;
}
let webiPath = path.join(__dirname, '../webi/webi.sh');
let stat = await Fs.stat(webiPath);
if (stat.mtimeMs === _webiShMeta.mtime) {
return _webiShMeta.checksum;
}
let webiBuf = await Fs.readFile(webiPath, null);
let webiHash = Crypto.createHash('sha1').update(webiBuf).digest('hex');
let webiChecksum = webiHash.slice(0, 8);
_webiShMeta.mtime = stat.mtimeMs;
_webiShMeta.updated_at = now;
_webiShMeta.checksum = webiChecksum;
return _webiShMeta.checksum;
};

View File

@@ -2,7 +2,6 @@
var Installers = module.exports;
var Crypto = require('crypto');
var Fs = require('fs/promises');
var path = require('path');
@@ -136,7 +135,7 @@ Installers.getPosixCurlPipeBootstrap = async function ({ baseurl, pkg, ver }) {
let bootTxt = await Fs.readFile(CURL_PIPE_SH_BOOT, 'utf8');
var webiPkg = [pkg, ver].filter(Boolean).join('@');
var webiChecksum = await Installers.getWebiShChecksum();
var webiChecksum = await Releases.getWebiShChecksum();
var envReplacements = [
['WEBI_PKG', webiPkg],
['WEBI_HOST', baseurl],
@@ -149,7 +148,7 @@ Installers.getPosixCurlPipeBootstrap = async function ({ baseurl, pkg, ver }) {
// TODO create REs once, in higher scope
let envRe = new RegExp(
`^[ \\t]*#?[ \\t]*(export\\s)?[ \\t]*(${name})=.*`,
`^[ \\t]*#?[ \\t]*(export[ \\t])?[ \\t]*(${name})=.*`,
'm',
);
@@ -174,7 +173,7 @@ Installers.getPwshCurlPipeBootstrap = async function ({
let bootTxt = await Fs.readFile(CURL_PIPE_PS1_BOOT, 'utf8');
var webiPkg = [pkg, ver].filter(Boolean).join('@');
//var webiChecksum = await Installers.getWebiPs1Checksum();
//var webiChecksum = await Releases.getWebiPs1Checksum();
var envReplacements = [
['Env:WEBI_PKG', webiPkg],
['Env:WEBI_HOST', baseurl],
@@ -209,32 +208,3 @@ Installers.getPwshCurlPipeBootstrap = async function ({
return bootTxt;
};
var _webiShMeta = {
stale: 10 * 1000,
updated_at: 0,
checksum: '',
mtime: 0,
};
Installers.getWebiShChecksum = async function () {
let now = Date.now();
let ago = now - _webiShMeta.updated_at;
if (ago <= _webiShMeta.stale) {
return _webiShMeta.checksum;
}
let webiPath = path.join(__dirname, '../webi/webi.sh');
let stat = await Fs.stat(webiPath);
if (stat.mtimeMs === _webiShMeta.mtime) {
return _webiShMeta.checksum;
}
let webiBuf = await Fs.readFile(webiPath, null);
let webiHash = Crypto.createHash('sha1').update(webiBuf).digest('hex');
let webiChecksum = webiHash.slice(0, 8);
_webiShMeta.mtime = stat.mtimeMs;
_webiShMeta.updated_at = now;
_webiShMeta.checksum = webiChecksum;
return _webiShMeta.checksum;
};