Skip to content

Instantly share code, notes, and snippets.

@harshitsilly
Last active December 15, 2020 05:40
Show Gist options
  • Save harshitsilly/a1bd5a405f93966aad20358ae6c4cec5 to your computer and use it in GitHub Desktop.
Save harshitsilly/a1bd5a405f93966aad20358ae6c4cec5 to your computer and use it in GitHub Desktop.
Electron builder rebuild zip and update blockmap to work with auto-updater.
const path = require('path');
const { execSync } = require('child_process');
const fs = require('fs');
const yaml = require('js-yaml');
const { appBuilderPath } = require('app-builder-bin');
const currentWorkingDirectory = process.cwd();
const packageInfo = require(path.join(currentWorkingDirectory, 'package.json'));
const APP_NAME = packageInfo.build.productName;
const APP_VERSION = process.argv[2] ? process.argv[2] : packageInfo.version;
const APP_DIST_PATH = path.join(currentWorkingDirectory, 'dist');
console.log('Zipping Started');
execSync(
`ditto -c -k --sequesterRsrc --keepParent --zlibCompressionLevel 9 "${APP_DIST_PATH}/mac/${APP_NAME}.app" "${APP_DIST_PATH}/${APP_NAME}-${APP_VERSION}-mac.zip"`
);
console.log('Zipping Completed');
const APP_GENERATED_BINARY_PATH = path.join(APP_DIST_PATH, `${APP_NAME}-${APP_VERSION}-mac.zip`);
(function() {
try {
let output = execSync(
`${appBuilderPath} blockmap --input="${APP_GENERATED_BINARY_PATH}" --output="${APP_DIST_PATH}/${APP_NAME}-${APP_VERSION}-mac.zip.blockmap" --compression=gzip`
);
let { sha512, size } = JSON.parse(output);
const ymlPath = path.join(APP_DIST_PATH, 'latest-mac.yml');
let ymlData = yaml.safeLoad(fs.readFileSync(ymlPath, 'utf8'));
console.log(ymlData);
ymlData.sha512 = sha512;
ymlData.files[0].sha512 = sha512;
ymlData.files[0].size = size;
let yamlStr = yaml.safeDump(ymlData);
console.log(yamlStr);
fs.writeFileSync(ymlPath, yamlStr, 'utf8');
console.log('Successfully updated YAML file and configurations with blockmap.');
} catch (e) {
console.log('Error in updating YAML file and configurations with blockmap.', e);
}
})();
@thomasdarde
Copy link

thomasdarde commented Jul 23, 2020

Thanks for the gist , 2 changes on my side

line 11: (latest is the deploy channel)

const APP_DIST_PATH = path.join(currentWorkingDirectory, 'dist/latest');

line 25 to allow app names with spaces some quotes where needed :

let output = execSync(
      `${appBuilderPath} blockmap --input="${APP_GENERATED_BINARY_PATH}" --output="${APP_DIST_PATH}/${APP_NAME}-${APP_VERSION}-mac.zip.blockmap" --compression=gzip`
    );

@harshitsilly
Copy link
Author

thanks thomas , i will add the channel mentioned in package.json and the second one also.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment