80 lines
2.4 KiB
JavaScript
80 lines
2.4 KiB
JavaScript
/*
|
|
* There is an issue with electron-builder generating invalid zip files for Catalina.
|
|
* This is a script implementation of the following workaround:
|
|
* https://snippets.cacher.io/snippet/354a3eb7b0dcbe711383
|
|
*/
|
|
|
|
if (process.platform !== 'darwin') {
|
|
console.error(`this script (${__filename}) can only be run from a darwin platform.`);
|
|
process.exitCode = 1;
|
|
return;
|
|
}
|
|
|
|
const fs = require('fs');
|
|
const childProcess = require('child_process');
|
|
const yaml = require('js-yaml');
|
|
const assert = require('assert').strict;
|
|
const os = require('os');
|
|
|
|
function exec(command) {
|
|
console.log(command);
|
|
return new Promise((resolve, reject) => {
|
|
childProcess.exec(command, (err, stdout, stderr) => {
|
|
if (err) reject(err);
|
|
else if (stderr) reject(Error(stderr));
|
|
else resolve(stdout);
|
|
});
|
|
});
|
|
}
|
|
|
|
async function getBlockMapInfo(fileName) {
|
|
return JSON.parse(
|
|
await exec(
|
|
'./node_modules/app-builder-bin/mac/app-builder_amd64 blockmap' +
|
|
` -i ${fileName}` +
|
|
` -o ${os.tmpdir()}/a.zip`
|
|
)
|
|
);
|
|
}
|
|
|
|
(async () => {
|
|
try {
|
|
const { version } = JSON.parse(await fs.promises.readFile('app/package.json'));
|
|
const zipName = `standard-notes-${version}-mac-x64.zip`;
|
|
const zipPath = `dist/${zipName}`;
|
|
console.log(`Removing ${zipPath}`);
|
|
await fs.promises.unlink(zipPath);
|
|
|
|
process.chdir('dist/mac');
|
|
const appName = process.argv.includes('--beta')
|
|
? 'Standard\\ Notes\\ \\(Beta\\).app'
|
|
: 'Standard\\ Notes.app';
|
|
/** @see https://superuser.com/questions/574032/what-is-the-equivalent-unix-command-to-a-mac-osx-compress-menu-action */
|
|
await exec(`ditto -c -k --sequesterRsrc --keepParent ${appName} ../${zipName}`);
|
|
process.chdir('../..');
|
|
|
|
const [blockMapInfo, latestVersionInfo] = await Promise.all([
|
|
getBlockMapInfo(zipPath),
|
|
fs.promises.readFile('dist/latest-mac.yml').then(yaml.load),
|
|
]);
|
|
const index = latestVersionInfo.files.findIndex((file) => file.url === zipName);
|
|
assert(index >= 0);
|
|
latestVersionInfo.files[index] = {
|
|
...latestVersionInfo.files[index],
|
|
...blockMapInfo,
|
|
};
|
|
latestVersionInfo.sha512 = blockMapInfo.sha512;
|
|
console.log('Writing new size, hash and blockMap size to dist/latest-mac.yml');
|
|
await fs.promises.writeFile(
|
|
'dist/latest-mac.yml',
|
|
yaml.dump(latestVersionInfo, {
|
|
lineWidth: Infinity,
|
|
}),
|
|
'utf8'
|
|
);
|
|
} catch (err) {
|
|
console.error(err);
|
|
process.exitCode = 1;
|
|
}
|
|
})();
|