better error handling when vailable formats mismatch
authorAJ ONeal <aj@therootcompany.com>
Tue, 16 Jun 2020 18:30:35 +0000 (18:30 +0000)
committerAJ ONeal <aj@therootcompany.com>
Tue, 16 Jun 2020 18:30:35 +0000 (18:30 +0000)
_webi/bootstrap.sh
_webi/normalize.js
_webi/releases.js
_webi/template.sh

index 4a6551915158c293a169e6beabca3599f98e4a55..9e12dbaf0fe916c3016001b93be5cad6c34e68ca 100644 (file)
@@ -46,6 +46,8 @@ if [ -n "\$(command -v unxz)" ]; then
 fi
 if [ -n "\$(command -v unzip)" ]; then
        my_ext="zip,\$my_ext"
+else
+    echo "WARN: 'unzip' not found"
 fi
 if [ -n "\$(command -v tar)" ]; then
        my_ext="tar,\$my_ext"
index dac09020a7f4473ebfd917ecf3144bb3a0ac1791..16c60b80dfda711bf00011942e3137548e2b2dc6 100644 (file)
@@ -1,7 +1,7 @@
 'use strict';
 
 // this may need customizations between packages
-const osMap = {
+var osMap = {
   macos: /(\b|_)(apple|mac|darwin|iPhone|iOS|iPad)/i,
   linux: /(\b|_)(linux)/i,
   freebsd: /(\b|_)(freebsd)/i,
@@ -10,6 +10,12 @@ const osMap = {
   aix: /(\b|_)(aix)/i
 };
 
+var formats = ['zip', 'xz', 'tar', 'pkg', 'msi', 'git', 'exe', 'dmg'];
+var formatsMap = {};
+formats.forEach(function (ext) {
+  formatsMap[ext] = true;
+});
+
 // evaluation order matters
 // (i.e. otherwise x86 and x64 can cross match)
 var archArr = [
@@ -34,7 +40,10 @@ var archMap = {
 };
 
 function normalize(all) {
+  var supportedFormats = {};
+
   all.releases.forEach(function (rel) {
+    supportedFormats[rel.ext] = true;
     rel.version = rel.version.replace(/^v/i, '');
     if (!rel.name) {
       rel.name = rel.download.replace(/.*\//, '');
@@ -85,7 +94,16 @@ function normalize(all) {
       rel.download = all.download.replace(/{{ download }}/, rel.download);
     }
   });
+
+  all.formats = Object.keys(supportedFormats).filter(function (ext) {
+    return formatsMap[ext];
+  });
+
   return all;
 }
 
 module.exports = normalize;
+// NOT in order of priority (which would be tar, xz, zip, ...)
+module.exports.formats = formats;
+module.exports.arches = archArr;
+module.exports.formatsMap = formatsMap;
index f7f5eff6aa3fe46a24a420d351b45c13843d17e4..92c6a8c7de1cab4c209e874b3686133adb907acc 100644 (file)
@@ -18,6 +18,12 @@ Releases.renderBash = function (
   rel,
   { baseurl, pkg, tag, ver, os, arch, formats }
 ) {
+  if (!Array.isArray(formats)) {
+    formats = [];
+  }
+  if (!tag) {
+    tag = '';
+  }
   return fs.promises
     .readFile(path.join(pkgdir, 'install.sh'), 'utf8')
     .then(function (installTxt) {
@@ -40,7 +46,7 @@ Releases.renderBash = function (
             .replace(/^#?WEBI_HOST=.*/m, "WEBI_HOST='" + baseurl + "'")
             .replace(/^#?WEBI_OS=.*/m, "WEBI_OS='" + (os || '') + "'")
             .replace(/^#?WEBI_ARCH=.*/m, "WEBI_ARCH='" + (arch || '') + "'")
-            .replace(/^#?WEBI_TAG=.*/m, "WEBI_TAG='" + (tag || '') + "'")
+            .replace(/^#?WEBI_TAG=.*/m, "WEBI_TAG='" + tag + "'")
             .replace(
               /^#?WEBI_RELEASES=.*/m,
               "WEBI_RELEASES='" +
@@ -53,6 +59,8 @@ Releases.renderBash = function (
                 rel.os +
                 '&arch=' +
                 rel.arch +
+                '&formats=' +
+                formats.join(',') +
                 '&pretty=true' +
                 "'"
             )
@@ -90,6 +98,10 @@ Releases.renderBash = function (
               /^#?WEBI_EXT=.*/m,
               'WEBI_EXT=' + rel.ext.replace(/tar.*/, 'tar')
             )
+            .replace(
+              /^#?WEBI_FORMATS=.*/m,
+              "WEBI_FORMATS='" + formats.join(',') + "'"
+            )
             .replace(
               /^#?WEBI_PKG_URL=.*/m,
               "WEBI_PKG_URL='" + rel.download + "'"
index 1b302a2dfc87e6156cd6767bb111435e09e20173..7a16ae275819eaf3c3f0e75c8ec377489fffeecc 100644 (file)
@@ -22,6 +22,7 @@ set -u
 #WEBI_LTS=
 #WEBI_CHANNEL=
 #WEBI_EXT=
+#WEBI_FORMATS=
 #WEBI_PKG_URL=
 #WEBI_PKG_FILE=
 WEBI_UA="$(uname -a)"
@@ -128,6 +129,12 @@ webi_download() {
             # TODO pass back requested OS / Arch / Version
             echo "Error: no '$WEBI_NAME' release found for the given OS and architecture by that tag or version"
             echo "       (check that the package name and version are correct)"
+            echo "See $WEBI_RELEASES"
+            echo "        WEBI_PKG=$WEBI_PKG"
+            echo "        WEBI_NAME=$WEBI_NAME"
+            echo "        WEBI_VERSION=$WEBI_VERSION"
+            echo "        WEBI_EXT=$WEBI_EXT"
+            echo "        WEBI_FORMATS=$WEBI_FORMATS"
             exit 1
         fi
         my_url="$WEBI_PKG_URL"