From 23d7930e382d4db84eadc51578589e59073a010c Mon Sep 17 00:00:00 2001 From: mmcw-dev Date: Thu, 3 Jan 2019 22:28:12 -0500 Subject: [PATCH] Build and create zip of binary --- build.js | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/build.js b/build.js index 9865841..1654368 100644 --- a/build.js +++ b/build.js @@ -1,19 +1,49 @@ 'use strict' const { exec } = require('pkg') +const execRaw = require('child_process').exec const os = require('os') const fs = require('fs-extra') +const packageJson = require('./package.json') const platform = os.platform() const arch = os.arch() +/** + * Shells out to execute a command with async/await. + * Async wrapper to exec module. + * + * @param {string} cmd Command to execute + * + * @returns {Promise} Promise containing the complete stdio + **/ +async function shell_out (cmd) { + return new Promise((resolve, reject) => { + return execRaw(cmd, (err, stdio, stderr) => { + if (err) return reject(err) + return resolve(stdio) + }) + }) +} + //exec(args) takes an array of command line arguments and returns a promise. For example: if (!fs.existsSync(`./dist/${platform}_${arch}`)) { fs.mkdirSync(`./dist/${platform}_${arch}`) } -exec([ 'frameloom', '--target', 'host', '--output', `./dist/${platform}_${arch}/frameloom` ]).then(res => { +console.log(`Building frameloom and saving in dist/${platform}_${arch}...`) +console.time('frameloom') +exec([ 'frameloom', '--target', 'host', '--output', `./dist/${platform}_${arch}/frameloom` ]).then(async (res) => { + try { + await shell_out(`zip -r ./dist/frameloom_${platform}_${arch}_${packageJson.version}.zip ./dist/${platform}_${arch}/frameloom`) + console.log(`Compressed binary to dist/frameloom_${platform}_${arch}_${packageJson.version}.zip`) + } catch (err) { + console.error(err) + process.exit(err) + } + + console.timeEnd('frameloom') console.log('built') }).catch(err => { console.error(err)