diff --git a/scripts/build-headless.js b/scripts/build-headless.js index b86a82e9c..8d43caa34 100644 --- a/scripts/build-headless.js +++ b/scripts/build-headless.js @@ -15,16 +15,19 @@ const { compile, compileDefaultPlugins, getVersionNumber, + genMercurialRevision, } = require('./build-utils.js'); const PLUGINS_FOLDER_NAME = 'plugins'; -function preludeBundle(dir, versionNumber) { +function preludeBundle(dir, versionNumber, buildRevision) { + const revisionStr = + buildRevision == null ? '' : `global.__REVISION__="${buildRevision}";`; return new Promise((resolve, reject) => lineReplace({ file: path.join(dir, 'bundle.js'), line: 1, - text: `var __DEV__=false; global.electronRequire = require; global.performance = require("perf_hooks").performance;global.__VERSION__="${versionNumber}";`, + text: `var __DEV__=false; global.electronRequire = require; global.performance = require("perf_hooks").performance;global.__VERSION__="${versionNumber}";${revisionStr}`, addNewLine: true, callback: resolve, }), @@ -52,7 +55,7 @@ async function createZip(buildDir, distDir, targets) { // write zip file zip.outputStream - .pipe(fs.createWriteStream(path.join(distDir, `Flipper-headless.zip`))) + .pipe(fs.createWriteStream(path.join(distDir, 'Flipper-headless.zip'))) .on('close', resolve); zip.end(); }); @@ -88,7 +91,8 @@ async function createZip(buildDir, distDir, targets) { console.log('Created build directory', buildDir); await compile(buildDir, path.join(__dirname, '..', 'headless', 'index.js')); const versionNumber = getVersionNumber(); - await preludeBundle(buildDir, versionNumber); + const buildRevision = await genMercurialRevision(); + await preludeBundle(buildDir, versionNumber, buildRevision); await compileDefaultPlugins(path.join(buildDir, PLUGINS_FOLDER_NAME)); await createBinary([ path.join(buildDir, 'bundle.js'), diff --git a/scripts/build-release.js b/scripts/build-release.js index f38da54d1..426ab9db3 100755 --- a/scripts/build-release.js +++ b/scripts/build-release.js @@ -7,14 +7,15 @@ const path = require('path'); const fs = require('fs-extra'); const builder = require('electron-builder'); -const cp = require('child-process-es6-promise'); const Platform = builder.Platform; +const cp = require('child-process-es6-promise'); const { buildFolder, compile, die, compileDefaultPlugins, getVersionNumber, + genMercurialRevision, } = require('./build-utils.js'); function generateManifest(versionNumber) { @@ -31,14 +32,6 @@ function generateManifest(versionNumber) { ); } -// Asynchronously determine current mercurial revision as string or `null` in case of any error. -function genMercurialRevision() { - return cp - .spawn('hg', ['log', '-r', '.', '-T', '{node}']) - .catch(err => null) - .then(res => (res && res.stdout) || null); -} - function modifyPackageManifest(buildFolder, versionNumber, hgRevision) { // eslint-disable-next-line no-console console.log('Creating package.json manifest'); diff --git a/scripts/build-utils.js b/scripts/build-utils.js index dbdd9ca2c..e583edd55 100644 --- a/scripts/build-utils.js +++ b/scripts/build-utils.js @@ -10,6 +10,7 @@ const compilePlugins = require('../static/compilePlugins'); const tmp = require('tmp'); const path = require('path'); const fs = require('fs-extra'); +const cp = require('child-process-es6-promise'); function die(err) { console.error(err.stack); @@ -98,10 +99,19 @@ function getVersionNumber() { return version; } +// Asynchronously determine current mercurial revision as string or `null` in case of any error. +function genMercurialRevision() { + return cp + .spawn('hg', ['log', '-r', '.', '-T', '{node}']) + .catch(err => null) + .then(res => (res && res.stdout) || null); +} + module.exports = { buildFolder, compile, die, compileDefaultPlugins, getVersionNumber, + genMercurialRevision, }; diff --git a/src/utils/packageMetadata.js b/src/utils/packageMetadata.js index 5803a5083..f5cb25213 100644 --- a/src/utils/packageMetadata.js +++ b/src/utils/packageMetadata.js @@ -23,6 +23,10 @@ const getPackageJSON = async () => { export const readCurrentRevision: () => Promise = lodash.memoize( async () => { + // This is provided as part of the bundling process for headless. + if (global.__REVISION__) { + return global.__REVISION__; + } const json = await getPackageJSON(); return json.revision; }, diff --git a/static/electron-stubs.notjs b/static/electron-stubs.notjs index dd82c0a36..aa3b23af9 100644 --- a/static/electron-stubs.notjs +++ b/static/electron-stubs.notjs @@ -11,7 +11,8 @@ }, app: { getVersion: function() {return global.__VERSION__ || '1';}, - getName: function() {return '';} + getName: function() {return '';}, + getAppPath: function() {return process.cwd();} }, shell: { openExternal: function() {}