generalize, a lot
[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   return fs.promises
22     .readFile(path.join(pkgdir, 'install.sh'), 'utf8')
23     .then(function (installTxt) {
24       var vers = rel.version.split('.');
25       var v = {
26         major: vers.shift() || '',
27         minor: vers.shift() || '',
28         patch: vers.join('.').replace(/[+\-].*/, ''),
29         build: vers
30           .join('.')
31           .replace(/[^+\-]*/, '')
32           .replace(/^-/, '')
33       };
34       return fs.promises
35         .readFile(path.join(__dirname, 'template.sh'), 'utf8')
36         .then(function (tplTxt) {
37           return tplTxt
38             .replace(/^#?WEBI_PKG=.*/m, "WEBI_PKG='" + pkg + '@' + ver + "'")
39             .replace(/^#?WEBI_NAME=.*/m, "WEBI_NAME='" + pkg + "'")
40             .replace(/^#?WEBI_HOST=.*/m, "WEBI_HOST='" + baseurl + "'")
41             .replace(/^#?WEBI_OS=.*/m, "WEBI_OS='" + (os || '') + "'")
42             .replace(/^#?WEBI_ARCH=.*/m, "WEBI_ARCH='" + (arch || '') + "'")
43             .replace(/^#?WEBI_TAG=.*/m, "WEBI_TAG='" + (tag || '') + "'")
44             .replace(
45               /^#?WEBI_RELEASES=.*/m,
46               "WEBI_RELEASES='" +
47                 baseurl +
48                 '/api/releases/' +
49                 pkg +
50                 '@' +
51                 tag +
52                 '.tab?os=' +
53                 rel.os +
54                 '&arch=' +
55                 rel.arch +
56                 '&pretty=true' +
57                 "'"
58             )
59             .replace(
60               /^#?WEBI_CSV=.*/m,
61               "WEBI_CSV='" +
62                 [
63                   rel.version,
64                   rel.lts,
65                   rel.channel,
66                   rel.date,
67                   rel.os,
68                   rel.arch,
69                   rel.ext,
70                   '-',
71                   rel.download,
72                   rel.name,
73                   rel.comment || ''
74                 ]
75                   .join(',')
76                   .replace(/'/g, '') +
77                 "'"
78             )
79             .replace(
80               /^#?WEBI_VERSION=.*/m,
81               'WEBI_VERSION=' + JSON.stringify(rel.version)
82             )
83             .replace(/^#?WEBI_MAJOR=.*/m, 'WEBI_MAJOR=' + v.major)
84             .replace(/^#?WEBI_MINOR=.*/m, 'WEBI_MINOR=' + v.minor)
85             .replace(/^#?WEBI_PATCH=.*/m, 'WEBI_PATCH=' + v.patch)
86             .replace(/^#?WEBI_BUILD=.*/m, 'WEBI_BUILD=' + v.build)
87             .replace(/^#?WEBI_LTS=.*/m, 'WEBI_LTS=' + rel.lts)
88             .replace(/^#?WEBI_CHANNEL=.*/m, 'WEBI_CHANNEL=' + rel.channel)
89             .replace(
90               /^#?WEBI_EXT=.*/m,
91               'WEBI_EXT=' + rel.ext.replace(/tar.*/, 'tar')
92             )
93             .replace(
94               /^#?WEBI_PKG_URL=.*/m,
95               "WEBI_PKG_URL='" + rel.download + "'"
96             )
97             .replace(/^#?WEBI_PKG_FILE=.*/m, "WEBI_PKG_FILE='" + rel.name + "'")
98             .replace(/{{ installer }}/, installTxt);
99         });
100     });
101 };