add shebang to all .ps1
[webi-installers/.git] / _webi / releases.js
1 'use strict';
2
3 var fs = require('fs');
4 var path = require('path');
5 var request = require('@root/request');
6 var _normalize = require('../_webi/normalize.js');
7
8 var Releases = module.exports;
9 Releases.get = async function (pkgdir) {
10   var get = require(path.join(pkgdir, 'releases.js'));
11   return get(request).then(function (all) {
12     return _normalize(all);
13   });
14 };
15
16 Releases.renderBash = function (
17   pkgdir,
18   rel,
19   { baseurl, pkg, tag, ver, os, arch, formats }
20 ) {
21   if (!Array.isArray(formats)) {
22     formats = [];
23   }
24   if (!tag) {
25     tag = '';
26   }
27   return fs.promises
28     .readFile(path.join(pkgdir, 'install.sh'), 'utf8')
29     .then(function (installTxt) {
30       var vers = rel.version.split('.');
31       var v = {
32         major: vers.shift() || '',
33         minor: vers.shift() || '',
34         patch: vers.join('.').replace(/[+\-].*/, ''),
35         build: vers
36           .join('.')
37           .replace(/[^+\-]*/, '')
38           .replace(/^-/, '')
39       };
40       return fs.promises
41         .readFile(path.join(__dirname, 'template.sh'), 'utf8')
42         .then(function (tplTxt) {
43           return (
44             tplTxt
45               .replace(/^#?WEBI_PKG=.*/m, "WEBI_PKG='" + pkg + '@' + ver + "'")
46               .replace(/^#?WEBI_HOST=.*/m, "WEBI_HOST='" + baseurl + "'")
47               .replace(/^#?WEBI_OS=.*/m, "WEBI_OS='" + (os || '') + "'")
48               .replace(/^#?WEBI_ARCH=.*/m, "WEBI_ARCH='" + (arch || '') + "'")
49               .replace(/^#?WEBI_TAG=.*/m, "WEBI_TAG='" + tag + "'")
50               .replace(
51                 /^#?WEBI_RELEASES=.*/m,
52                 "WEBI_RELEASES='" +
53                   baseurl +
54                   '/api/releases/' +
55                   pkg +
56                   '@' +
57                   tag +
58                   '.tab?os=' +
59                   rel.os +
60                   '&arch=' +
61                   rel.arch +
62                   '&formats=' +
63                   formats.join(',') +
64                   '&pretty=true' +
65                   "'"
66               )
67               .replace(
68                 /^#?WEBI_CSV=.*/m,
69                 "WEBI_CSV='" +
70                   [
71                     rel.version,
72                     rel.lts,
73                     rel.channel,
74                     rel.date,
75                     rel.os,
76                     rel.arch,
77                     rel.ext,
78                     '-',
79                     rel.download,
80                     rel.name,
81                     rel.comment || ''
82                   ]
83                     .join(',')
84                     .replace(/'/g, '') +
85                   "'"
86               )
87               .replace(
88                 /^#?WEBI_VERSION=.*/m,
89                 'WEBI_VERSION=' + JSON.stringify(rel.version)
90               )
91               .replace(/^#?WEBI_MAJOR=.*/m, 'WEBI_MAJOR=' + v.major)
92               .replace(/^#?WEBI_MINOR=.*/m, 'WEBI_MINOR=' + v.minor)
93               .replace(/^#?WEBI_PATCH=.*/m, 'WEBI_PATCH=' + v.patch)
94               .replace(/^#?WEBI_BUILD=.*/m, 'WEBI_BUILD=' + v.build)
95               .replace(/^#?WEBI_LTS=.*/m, 'WEBI_LTS=' + rel.lts)
96               .replace(/^#?WEBI_CHANNEL=.*/m, 'WEBI_CHANNEL=' + rel.channel)
97               .replace(
98                 /^#?WEBI_EXT=.*/m,
99                 'WEBI_EXT=' + rel.ext.replace(/tar.*/, 'tar')
100               )
101               .replace(
102                 /^#?WEBI_FORMATS=.*/m,
103                 "WEBI_FORMATS='" + formats.join(',') + "'"
104               )
105               .replace(
106                 /^#?WEBI_PKG_URL=.*/m,
107                 "WEBI_PKG_URL='" + rel.download + "'"
108               )
109               .replace(
110                 /^#?WEBI_PKG_FILE=.*/m,
111                 "WEBI_PKG_FILE='" + rel.name + "'"
112               )
113               // PKG details
114               .replace(/^#?PKG_NAME=.*/m, "PKG_NAME='" + pkg + "'")
115               .replace(
116                 /^#?PKG_OSES=.*/m,
117                 "PKG_OSES='" + ((rel && rel.oses) || []).join(',') + "'"
118               )
119               .replace(
120                 /^#?PKG_ARCHES=.*/m,
121                 "PKG_ARCHES='" + ((rel && rel.arches) || []).join(',') + "'"
122               )
123               .replace(
124                 /^#?PKG_FORMATS=.*/m,
125                 "PKG_FORMATS='" + ((rel && rel.formats) || []).join(',') + "'"
126               )
127               .replace(/{{ installer }}/, installTxt)
128           );
129         });
130     });
131 };
132
133 Releases.renderBatch = function (
134   pkgdir,
135   rel,
136   { baseurl, pkg, tag, ver, os, arch, formats }
137 ) {
138   if (!Array.isArray(formats)) {
139     formats = [];
140   }
141   if (!tag) {
142     tag = '';
143   }
144   return fs.promises
145     .readFile(path.join(pkgdir, 'install.bat'), 'utf8')
146     .then(function (installTxt) {
147       var vers = rel.version.split('.');
148       var v = {
149         major: vers.shift() || '',
150         minor: vers.shift() || '',
151         patch: vers.join('.').replace(/[+\-].*/, ''),
152         build: vers
153           .join('.')
154           .replace(/[^+\-]*/, '')
155           .replace(/^-/, '')
156       };
157       return fs.promises
158         .readFile(path.join(__dirname, 'template.bat'), 'utf8')
159         .then(function (tplTxt) {
160           return tplTxt
161             .replace(
162               /^(REM )?WEBI_PKG=.*/im,
163               "WEBI_PKG='" + pkg + '@' + ver + "'"
164             )
165             .replace(/{{ installer }}/, installTxt);
166         });
167     });
168 };
169
170 Releases.renderPowerShell = function (
171   pkgdir,
172   rel,
173   { baseurl, pkg, tag, ver, os, arch, formats }
174 ) {
175   if (!Array.isArray(formats)) {
176     formats = [];
177   }
178   if (!tag) {
179     tag = '';
180   }
181   return fs.promises
182     .readFile(path.join(pkgdir, 'install.ps1'), 'utf8')
183     .then(function (installTxt) {
184       var vers = rel.version.split('.');
185       var v = {
186         major: vers.shift() || '',
187         minor: vers.shift() || '',
188         patch: vers.join('.').replace(/[+\-].*/, ''),
189         build: vers
190           .join('.')
191           .replace(/[^+\-]*/, '')
192           .replace(/^-/, '')
193       };
194       return fs.promises
195         .readFile(path.join(__dirname, 'template.ps1'), 'utf8')
196         .then(function (tplTxt) {
197           var pkgver = pkg + '@' + ver;
198           return tplTxt
199             .replace(
200               /^(#)?\$Env:WEBI_HOST\s*=.*/im,
201               "$Env:WEBI_HOST = '" + baseurl + "'"
202             )
203             .replace(
204               /^(#)?\$Env:WEBI_PKG\s*=.*/im,
205               "$Env:WEBI_PKG = '" + pkgver + "'"
206             )
207             .replace(
208               /^(#)?\$Env:PKG_NAME\s*=.*/im,
209               "$Env:PKG_NAME = '" + pkg + "'"
210             )
211             .replace(
212               /^(#)?\$Env:WEBI_VERSION\s*=.*/im,
213               "$Env:WEBI_VERSION = '" + rel.version + "'"
214             )
215             .replace(
216               /^(#)?\$Env:WEBI_PKG_URL\s*=.*/im,
217               "$Env:WEBI_PKG_URL = '" + rel.download + "'"
218             )
219             .replace(
220               /^(#)?\$Env:WEBI_PKG_FILE\s*=.*/im,
221               "$Env:WEBI_PKG_FILE = '" + rel.name + "'"
222             )
223             .replace(/{{ installer }}/, installTxt);
224         });
225     });
226 };