3 var fs = require('fs');
4 var path = require('path');
5 var request = require('@root/request');
6 var _normalize = require('../_webi/normalize.js');
8 var Releases = module.exports;
9 Releases.get = async function (pkgdir) {
12 get = require(path.join(pkgdir, 'releases.js'));
14 throw new Error('no releases.js for', pkgdir.split(/[\/\\]+/).pop());
16 return get(request).then(function (all) {
17 return _normalize(all);
21 Releases.renderBash = function (
24 { baseurl, pkg, tag, ver, os, arch, formats }
26 if (!Array.isArray(formats)) {
33 .readFile(path.join(pkgdir, 'install.sh'), 'utf8')
34 .then(function (installTxt) {
35 var vers = rel.version.split('.');
37 major: vers.shift() || '',
38 minor: vers.shift() || '',
39 patch: vers.join('.').replace(/[+\-].*/, ''),
42 .replace(/[^+\-]*/, '')
45 var pkgFile = rel.filename || rel.name;
47 .readFile(path.join(__dirname, 'template.sh'), 'utf8')
48 .then(function (tplTxt) {
51 .replace(/^#?WEBI_PKG=.*/m, "WEBI_PKG='" + pkg + '@' + ver + "'")
52 .replace(/^#?WEBI_HOST=.*/m, "WEBI_HOST='" + baseurl + "'")
53 .replace(/^#?WEBI_OS=.*/m, "WEBI_OS='" + (os || '') + "'")
54 .replace(/^#?WEBI_ARCH=.*/m, "WEBI_ARCH='" + (arch || '') + "'")
55 .replace(/^#?WEBI_TAG=.*/m, "WEBI_TAG='" + tag + "'")
57 /^#?WEBI_RELEASES=.*/m,
94 /^#?WEBI_VERSION=.*/m,
95 'WEBI_VERSION=' + JSON.stringify(rel.version)
97 .replace(/^#?WEBI_MAJOR=.*/m, 'WEBI_MAJOR=' + v.major)
98 .replace(/^#?WEBI_MINOR=.*/m, 'WEBI_MINOR=' + v.minor)
99 .replace(/^#?WEBI_PATCH=.*/m, 'WEBI_PATCH=' + v.patch)
100 .replace(/^#?WEBI_BUILD=.*/m, 'WEBI_BUILD=' + v.build)
101 .replace(/^#?WEBI_LTS=.*/m, 'WEBI_LTS=' + rel.lts)
102 .replace(/^#?WEBI_CHANNEL=.*/m, 'WEBI_CHANNEL=' + rel.channel)
105 'WEBI_EXT=' + rel.ext.replace(/tar.*/, 'tar')
108 /^#?WEBI_FORMATS=.*/m,
109 "WEBI_FORMATS='" + formats.join(',') + "'"
112 /^#?WEBI_PKG_URL=.*/m,
113 "WEBI_PKG_URL='" + rel.download + "'"
116 /^#?WEBI_PKG_FILE=.*/m,
117 "WEBI_PKG_FILE='" + pkgFile + "'"
120 .replace(/^#?PKG_NAME=.*/m, "PKG_NAME='" + pkg + "'")
123 "PKG_OSES='" + ((rel && rel.oses) || []).join(',') + "'"
127 "PKG_ARCHES='" + ((rel && rel.arches) || []).join(',') + "'"
130 /^#?PKG_FORMATS=.*/m,
131 "PKG_FORMATS='" + ((rel && rel.formats) || []).join(',') + "'"
133 .replace(/{{ installer }}/, installTxt)
139 Releases.renderBatch = function (
142 { baseurl, pkg, tag, ver, os, arch, formats }
144 if (!Array.isArray(formats)) {
151 .readFile(path.join(pkgdir, 'install.bat'), 'utf8')
152 .then(function (installTxt) {
153 var vers = rel.version.split('.');
155 major: vers.shift() || '',
156 minor: vers.shift() || '',
157 patch: vers.join('.').replace(/[+\-].*/, ''),
160 .replace(/[^+\-]*/, '')
164 .readFile(path.join(__dirname, 'template.bat'), 'utf8')
165 .then(function (tplTxt) {
168 /^(REM )?WEBI_PKG=.*/im,
169 "WEBI_PKG='" + pkg + '@' + ver + "'"
171 .replace(/{{ installer }}/, installTxt);
176 Releases.renderPowerShell = function (
179 { baseurl, pkg, tag, ver, os, arch, formats }
181 if (!Array.isArray(formats)) {
188 .readFile(path.join(pkgdir, 'install.ps1'), 'utf8')
189 .then(function (installTxt) {
190 var vers = rel.version.split('.');
192 major: vers.shift() || '',
193 minor: vers.shift() || '',
194 patch: vers.join('.').replace(/[+\-].*/, ''),
197 .replace(/[^+\-]*/, '')
201 .readFile(path.join(__dirname, 'template.ps1'), 'utf8')
202 .then(function (tplTxt) {
203 var pkgver = pkg + '@' + ver;
206 /^(#)?\$Env:WEBI_HOST\s*=.*/im,
207 "$Env:WEBI_HOST = '" + baseurl + "'"
210 /^(#)?\$Env:WEBI_PKG\s*=.*/im,
211 "$Env:WEBI_PKG = '" + pkgver + "'"
214 /^(#)?\$Env:PKG_NAME\s*=.*/im,
215 "$Env:PKG_NAME = '" + pkg + "'"
218 /^(#)?\$Env:WEBI_VERSION\s*=.*/im,
219 "$Env:WEBI_VERSION = '" + rel.version + "'"
222 /^(#)?\$Env:WEBI_PKG_URL\s*=.*/im,
223 "$Env:WEBI_PKG_URL = '" + rel.download + "'"
226 /^(#)?\$Env:WEBI_PKG_FILE\s*=.*/im,
227 "$Env:WEBI_PKG_FILE = '" + rel.name + "'"
229 .replace(/{{ installer }}/, installTxt);