From 1b1d349dba44f881e87cb4b0041a366b2baa646f Mon Sep 17 00:00:00 2001 From: Pascal Hartig Date: Wed, 13 Mar 2019 03:37:20 -0700 Subject: [PATCH] Add revision to build manifest Summary: Package up the current repository's revision when building a release. This will then be used to write it into exported traces so we can find a compatible version when opening it up again. Reviewed By: danielbuechele Differential Revision: D14406684 fbshipit-source-id: 761a51e69adbcab1d541c2daa78c9827ea299e79 --- scripts/build-release.js | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/scripts/build-release.js b/scripts/build-release.js index 9db7e9279..f38da54d1 100755 --- a/scripts/build-release.js +++ b/scripts/build-release.js @@ -31,7 +31,15 @@ function generateManifest(versionNumber) { ); } -function modifyPackageManifest(buildFolder, 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'); const manifest = require('../package.json'); @@ -43,6 +51,9 @@ function modifyPackageManifest(buildFolder, versionNumber) { manifest.dependencies = manifestStatic.dependencies; manifest.main = 'index.js'; manifest.version = versionNumber; + if (hgRevision != null) { + manifest.revision = hgRevision; + } fs.writeFileSync( path.join(buildFolder, 'package.json'), JSON.stringify(manifest, null, ' '), @@ -116,7 +127,8 @@ function copyStaticFolder(buildFolder) { await compileDefaultPlugins(path.join(dir, 'defaultPlugins')); await compile(dir, path.join(__dirname, '..', 'src', 'init.js')); const versionNumber = getVersionNumber(); - modifyPackageManifest(dir, versionNumber); + const hgRevision = await genMercurialRevision(); + modifyPackageManifest(dir, versionNumber, hgRevision); generateManifest(versionNumber); await buildDist(dir); // eslint-disable-next-line no-console