mirror of
https://github.com/webinstall/webi-installers.git
synced 2026-02-14 17:49:53 +00:00
ref: releases.js => installers.js
This commit is contained in:
@@ -1,36 +1,19 @@
|
||||
'use strict';
|
||||
|
||||
var Installers = module.exports;
|
||||
|
||||
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 }}/;
|
||||
|
||||
var Releases = module.exports;
|
||||
Releases.get = async function (pkgdir) {
|
||||
let get;
|
||||
try {
|
||||
get = require(path.join(pkgdir, 'releases.js'));
|
||||
} catch (e) {
|
||||
let err = new Error('no releases.js for', pkgdir.split(/[\/\\]+/).pop());
|
||||
err.code = 'E_NO_RELEASE';
|
||||
throw err;
|
||||
}
|
||||
|
||||
let all = await get(request);
|
||||
|
||||
return _normalize(all);
|
||||
};
|
||||
|
||||
function padScript(txt) {
|
||||
return txt.replace(/^/g, ' ');
|
||||
}
|
||||
|
||||
var BAD_SH_RE = /[<>'"`$\\]/;
|
||||
Releases.renderBash = async function (
|
||||
Installers.renderBash = async function (
|
||||
pkgdir,
|
||||
rel,
|
||||
{ baseurl, pkg, tag, ver, os = '', arch = '', libc = '', formats },
|
||||
@@ -90,7 +73,7 @@ Releases.renderBash = async function (
|
||||
.join(',')
|
||||
.replace(/'/g, '');
|
||||
|
||||
let webiChecksum = await Releases.getWebiShChecksum();
|
||||
let webiChecksum = await Installers.getWebiShChecksum();
|
||||
let envReplacements = [
|
||||
['WEBI_CHECKSUM', webiChecksum],
|
||||
['WEBI_PKG', webiPkg],
|
||||
@@ -147,7 +130,7 @@ Releases.renderBash = async function (
|
||||
return tplTxt;
|
||||
};
|
||||
|
||||
Releases.renderPowerShell = async function (
|
||||
Installers.renderPowerShell = async function (
|
||||
pkgdir,
|
||||
rel,
|
||||
{ baseurl, pkg, tag, ver, os, arch, libc = '', formats },
|
||||
@@ -224,7 +207,7 @@ var _webiShMeta = {
|
||||
checksum: '',
|
||||
mtime: 0,
|
||||
};
|
||||
Releases.getWebiShChecksum = async function () {
|
||||
Installers.getWebiShChecksum = async function () {
|
||||
let now = Date.now();
|
||||
let ago = now - _webiShMeta.updated_at;
|
||||
if (ago <= _webiShMeta.stale) {
|
||||
@@ -1,19 +1,19 @@
|
||||
'use strict';
|
||||
|
||||
var Installers = module.exports;
|
||||
var InstallerServer = module.exports;
|
||||
|
||||
var Fs = require('fs/promises');
|
||||
var path = require('path');
|
||||
|
||||
var uaDetect = require('./ua-detect.js');
|
||||
var Projects = require('./projects.js');
|
||||
var Releases = require('./releases.js');
|
||||
var Installers = require('./installers.js');
|
||||
|
||||
// handlers caching and transformation, probably should be broken down
|
||||
var getReleases = require('./transform-releases.js');
|
||||
var Releases = require('./transform-releases.js');
|
||||
|
||||
Installers.INSTALLERS_DIR = path.join(__dirname, '..');
|
||||
Installers.serveInstaller = async function (
|
||||
InstallerServer.INSTALLERS_DIR = path.join(__dirname, '..');
|
||||
InstallerServer.serveInstaller = async function (
|
||||
baseurl,
|
||||
ua,
|
||||
pkg,
|
||||
@@ -22,7 +22,7 @@ Installers.serveInstaller = async function (
|
||||
formats,
|
||||
libc,
|
||||
) {
|
||||
let [rel, opts] = await Installers.helper({
|
||||
let [rel, opts] = await InstallerServer.helper({
|
||||
ua,
|
||||
pkg,
|
||||
tag,
|
||||
@@ -33,13 +33,13 @@ Installers.serveInstaller = async function (
|
||||
baseurl,
|
||||
});
|
||||
|
||||
var pkgdir = path.join(Installers.INSTALLERS_DIR, pkg);
|
||||
var pkgdir = path.join(InstallerServer.INSTALLERS_DIR, pkg);
|
||||
if ('ps1' === ext) {
|
||||
return Releases.renderPowerShell(pkgdir, rel, opts);
|
||||
return Installers.renderPowerShell(pkgdir, rel, opts);
|
||||
}
|
||||
return Releases.renderBash(pkgdir, rel, opts);
|
||||
return Installers.renderBash(pkgdir, rel, opts);
|
||||
};
|
||||
Installers.helper = async function ({ ua, pkg, tag, formats, libc }) {
|
||||
InstallerServer.helper = async function ({ ua, pkg, tag, formats, libc }) {
|
||||
// TODO put some of this in a middleware? or common function?
|
||||
|
||||
// TODO maybe move package/version/lts/channel detection into getReleases
|
||||
@@ -99,7 +99,7 @@ Installers.helper = async function ({ ua, pkg, tag, formats, libc }) {
|
||||
limit: 1,
|
||||
};
|
||||
|
||||
let rels = await getReleases(releaseQuery);
|
||||
let rels = await Releases.getReleases(releaseQuery);
|
||||
|
||||
var rel = rels.releases[0];
|
||||
var opts = {
|
||||
@@ -131,11 +131,15 @@ var CURL_PIPE_PS1_BOOT = path.join(__dirname, 'curl-pipe-bootstrap.tpl.ps1');
|
||||
var CURL_PIPE_SH_BOOT = path.join(__dirname, 'curl-pipe-bootstrap.tpl.sh');
|
||||
var BAD_SH_RE = /[<>'"`$\\]/;
|
||||
|
||||
Installers.getPosixCurlPipeBootstrap = async function ({ baseurl, pkg, ver }) {
|
||||
InstallerServer.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 Releases.getWebiShChecksum();
|
||||
var webiChecksum = await Installers.getWebiShChecksum();
|
||||
var envReplacements = [
|
||||
['WEBI_PKG', webiPkg],
|
||||
['WEBI_HOST', baseurl],
|
||||
@@ -164,7 +168,7 @@ Installers.getPosixCurlPipeBootstrap = async function ({ baseurl, pkg, ver }) {
|
||||
return bootTxt;
|
||||
};
|
||||
|
||||
Installers.getPwshCurlPipeBootstrap = async function ({
|
||||
InstallerServer.getPwshCurlPipeBootstrap = async function ({
|
||||
baseurl,
|
||||
pkg,
|
||||
ver,
|
||||
@@ -173,7 +177,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 Releases.getWebiPs1Checksum();
|
||||
//var webiChecksum = await InstallerServer.getWebiPs1Checksum();
|
||||
var envReplacements = [
|
||||
['Env:WEBI_PKG', webiPkg],
|
||||
['Env:WEBI_HOST', baseurl],
|
||||
|
||||
@@ -32,7 +32,8 @@ if (/\b-?-h(elp)?\b/.test(process.argv.join(' '))) {
|
||||
var os = require('os');
|
||||
var fs = require('fs');
|
||||
var path = require('path');
|
||||
var Releases = require('./releases.js');
|
||||
var Releases = require('./transform-releases.js');
|
||||
var Installers = require('./installers.js');
|
||||
var ServeInstaller = require('./serve-installer.js');
|
||||
|
||||
var pkg = process.argv[2].split('@');
|
||||
@@ -116,8 +117,8 @@ Releases.get(path.join(process.cwd(), pkgdir)).then(async function (all) {
|
||||
console.info('');
|
||||
|
||||
return Promise.all([
|
||||
Releases.renderBash(pkgdir, rel, opts).catch(function () {}),
|
||||
Releases.renderPowerShell(pkgdir, rel, opts).catch(function () {}),
|
||||
Installers.renderBash(pkgdir, rel, opts).catch(function () {}),
|
||||
Installers.renderPowerShell(pkgdir, rel, opts).catch(function () {}),
|
||||
]).then(function (scripts) {
|
||||
var bashTxt = scripts[0];
|
||||
var ps1Txt = scripts[1];
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
'use strict';
|
||||
|
||||
var Releases = module.exports;
|
||||
|
||||
var path = require('path');
|
||||
var Releases = require('./releases.js');
|
||||
var request = require('@root/request');
|
||||
var _normalize = require('./normalize.js');
|
||||
|
||||
var cache = {};
|
||||
//var staleAge = 5 * 1000;
|
||||
@@ -11,6 +14,21 @@ var expiredAge = 15 * 60 * 1000;
|
||||
|
||||
let installerDir = path.join(__dirname, '..');
|
||||
|
||||
Releases.get = async function (pkgdir) {
|
||||
let get;
|
||||
try {
|
||||
get = require(path.join(pkgdir, 'releases.js'));
|
||||
} catch (e) {
|
||||
let err = new Error('no releases.js for', pkgdir.split(/[\/\\]+/).pop());
|
||||
err.code = 'E_NO_RELEASE';
|
||||
throw err;
|
||||
}
|
||||
|
||||
let all = await get(request);
|
||||
|
||||
return _normalize(all);
|
||||
};
|
||||
|
||||
// TODO needs a proper test, and more accurate (though perhaps far less simple) code
|
||||
function createFormatsSorter(formats) {
|
||||
return function sortByVerExt(a, b) {
|
||||
@@ -242,7 +260,7 @@ async function filterReleases(
|
||||
return sortedRels.slice(0, limit || 1000);
|
||||
}
|
||||
|
||||
function getReleases({
|
||||
Releases.getReleases = function ({
|
||||
_count,
|
||||
pkg,
|
||||
ver,
|
||||
@@ -290,7 +308,7 @@ function getReleases({
|
||||
if (_count < 1) {
|
||||
// Apple Silicon M1 hacky-do workaround fix
|
||||
if ('macos' === os && 'arm64' === arch) {
|
||||
return getReleases({
|
||||
return Releases.getReleases({
|
||||
pkg,
|
||||
ver,
|
||||
os,
|
||||
@@ -304,7 +322,7 @@ function getReleases({
|
||||
}
|
||||
// Windows ARM hacky-do workaround fix
|
||||
if ('windows' === os && 'arm64' === arch) {
|
||||
return getReleases({
|
||||
return Releases.getReleases({
|
||||
pkg,
|
||||
ver,
|
||||
os,
|
||||
@@ -318,7 +336,7 @@ function getReleases({
|
||||
}
|
||||
// Raspberry Pi 3+ on Ubuntu arm64 (via Bionic?)
|
||||
if ('linux' === os && 'arm64' === arch) {
|
||||
return getReleases({
|
||||
return Releases.getReleases({
|
||||
_count: _count + 1,
|
||||
pkg,
|
||||
ver,
|
||||
@@ -333,7 +351,7 @@ function getReleases({
|
||||
}
|
||||
// armv7 can run armv6
|
||||
if ('linux' === os && 'armv7l' === arch) {
|
||||
return getReleases({
|
||||
return Releases.getReleases({
|
||||
_count: _count + 1,
|
||||
pkg,
|
||||
ver,
|
||||
@@ -351,7 +369,7 @@ function getReleases({
|
||||
// Raspberry Pi 3+ on Raspbian arm7 (not Ubuntu arm64)
|
||||
// hail mary
|
||||
if ('linux' === os && 'armv7l' === arch) {
|
||||
return getReleases({
|
||||
return Releases.getReleases({
|
||||
_count: _count + 1,
|
||||
pkg,
|
||||
ver,
|
||||
@@ -392,9 +410,7 @@ function getReleases({
|
||||
};
|
||||
});
|
||||
});
|
||||
}
|
||||
module.exports = getReleases;
|
||||
module.exports.getReleases = getReleases;
|
||||
};
|
||||
|
||||
if (require.main === module) {
|
||||
return module
|
||||
|
||||
Reference in New Issue
Block a user