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) {
53 "WEBI_PKG='" + pkg + '@' + ver + "'"
55 .replace(/^\s*#?WEBI_HOST=.*/m, "WEBI_HOST='" + baseurl + "'")
56 .replace(/^\s*#?WEBI_OS=.*/m, "WEBI_OS='" + (os || '') + "'")
58 /^\s*#?WEBI_ARCH=.*/m,
59 "WEBI_ARCH='" + (arch || '') + "'"
61 .replace(/^\s*#?WEBI_TAG=.*/m, "WEBI_TAG='" + tag + "'")
63 /^\s*#?WEBI_RELEASES=.*/m,
100 /^\s*#?WEBI_VERSION=.*/m,
101 'WEBI_VERSION=' + JSON.stringify(rel.version)
103 .replace(/^\s*#?WEBI_MAJOR=.*/m, 'WEBI_MAJOR=' + v.major)
104 .replace(/^\s*#?WEBI_MINOR=.*/m, 'WEBI_MINOR=' + v.minor)
105 .replace(/^\s*#?WEBI_PATCH=.*/m, 'WEBI_PATCH=' + v.patch)
106 .replace(/^\s*#?WEBI_BUILD=.*/m, 'WEBI_BUILD=' + v.build)
107 .replace(/^\s*#?WEBI_LTS=.*/m, 'WEBI_LTS=' + rel.lts)
108 .replace(/^\s*#?WEBI_CHANNEL=.*/m, 'WEBI_CHANNEL=' + rel.channel)
110 /^\s*#?WEBI_EXT=.*/m,
111 'WEBI_EXT=' + rel.ext.replace(/tar.*/, 'tar')
114 /^\s*#?WEBI_FORMATS=.*/m,
115 "WEBI_FORMATS='" + formats.join(',') + "'"
118 /^\s*#?WEBI_PKG_URL=.*/m,
119 "WEBI_PKG_URL='" + rel.download + "'"
122 /^\s*#?WEBI_PKG_FILE=.*/m,
123 "WEBI_PKG_FILE='" + pkgFile + "'"
126 .replace(/^\s*#?PKG_NAME=.*/m, "PKG_NAME='" + pkg + "'")
128 /^\s*#?PKG_OSES=.*/m,
129 "PKG_OSES='" + ((rel && rel.oses) || []).join(',') + "'"
132 /^\s*#?PKG_ARCHES=.*/m,
133 "PKG_ARCHES='" + ((rel && rel.arches) || []).join(',') + "'"
136 /^\s*#?PKG_FORMATS=.*/m,
137 "PKG_FORMATS='" + ((rel && rel.formats) || []).join(',') + "'"
139 .replace(/{{ installer }}/, installTxt)
145 Releases.renderBatch = function (
148 { baseurl, pkg, tag, ver, os, arch, formats }
150 if (!Array.isArray(formats)) {
157 .readFile(path.join(pkgdir, 'install.bat'), 'utf8')
158 .then(function (installTxt) {
159 var vers = rel.version.split('.');
161 major: vers.shift() || '',
162 minor: vers.shift() || '',
163 patch: vers.join('.').replace(/[+\-].*/, ''),
166 .replace(/[^+\-]*/, '')
170 .readFile(path.join(__dirname, 'template.bat'), 'utf8')
171 .then(function (tplTxt) {
174 /^(REM )?WEBI_PKG=.*/im,
175 "WEBI_PKG='" + pkg + '@' + ver + "'"
177 .replace(/{{ installer }}/, installTxt);
182 Releases.renderPowerShell = function (
185 { baseurl, pkg, tag, ver, os, arch, formats }
187 if (!Array.isArray(formats)) {
194 .readFile(path.join(pkgdir, 'install.ps1'), 'utf8')
195 .then(function (installTxt) {
196 var vers = rel.version.split('.');
198 major: vers.shift() || '',
199 minor: vers.shift() || '',
200 patch: vers.join('.').replace(/[+\-].*/, ''),
203 .replace(/[^+\-]*/, '')
207 .readFile(path.join(__dirname, 'template.ps1'), 'utf8')
208 .then(function (tplTxt) {
209 var pkgver = pkg + '@' + ver;
212 /^(#)?\$Env:WEBI_HOST\s*=.*/im,
213 "$Env:WEBI_HOST = '" + baseurl + "'"
216 /^(#)?\$Env:WEBI_PKG\s*=.*/im,
217 "$Env:WEBI_PKG = '" + pkgver + "'"
220 /^(#)?\$Env:PKG_NAME\s*=.*/im,
221 "$Env:PKG_NAME = '" + pkg + "'"
224 /^(#)?\$Env:WEBI_VERSION\s*=.*/im,
225 "$Env:WEBI_VERSION = '" + rel.version + "'"
228 /^(#)?\$Env:WEBI_PKG_URL\s*=.*/im,
229 "$Env:WEBI_PKG_URL = '" + rel.download + "'"
232 /^(#)?\$Env:WEBI_PKG_FILE\s*=.*/im,
233 "$Env:WEBI_PKG_FILE = '" + rel.name + "'"
235 .replace(/{{ installer }}/, installTxt);