feat: add desktop repo (#1071)
This commit is contained in:
79
scripts/desktop/fix-mac-zip.js
Normal file
79
scripts/desktop/fix-mac-zip.js
Normal file
@@ -0,0 +1,79 @@
|
||||
/*
|
||||
* 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;
|
||||
}
|
||||
})();
|
||||
Reference in New Issue
Block a user