signal-desktop/ts/scripts/zip-macos-release.ts
2020-11-04 13:03:13 -06:00

82 lines
2.3 KiB
TypeScript

// Copyright 2020 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
/* eslint-disable no-console */
import fs from 'fs';
import path from 'path';
import rimraf from 'rimraf';
import { execSync } from 'child_process';
import packageJSON from '../../package.json';
export function zipMacOSRelease(): void {
if (process.platform !== 'darwin') {
return;
}
const files = fs
.readdirSync('release')
.filter(file => path.extname(file) === '.zip');
if (!files.length) {
throw new Error(
'No zip file found. Maybe the release did not complete properly?'
);
}
if (files.length > 1) {
throw new Error(
'More than one zip file found, release directory was not cleared.'
);
}
const zipFile = files[0];
const zipPath = path.join('release', zipFile);
console.log('Removing current zip file');
rimraf.sync(zipPath);
const appName = `${packageJSON.productName}.app`;
const appPath = path.join('release', 'mac', appName);
const tmpPath = path.join('release', 'tmp');
const appDir = path.dirname(appPath);
const tmpZip = path.join(appDir, zipFile);
console.log('Creating temporary zip file at', tmpZip);
try {
execSync(`cd ${appDir} && zip -ro ${zipFile} "${appName}"`);
console.log(
'Unzipping to remove duplicate electron references from',
tmpZip
);
execSync(`unzip ${tmpZip} -d ${tmpPath}`);
} catch (err) {
console.log('stdout:', String(err.stdout));
console.log('stderr:', String(err.stderr));
throw err;
}
console.log('Removing temporary zip file');
rimraf.sync(tmpZip);
const electronFrameworkPath = path.join(
tmpPath,
appName,
'Contents',
'Frameworks',
'Electron Framework.framework',
'Versions'
);
console.log('Removing duplicate electron framework', electronFrameworkPath);
rimraf.sync(electronFrameworkPath);
try {
console.log('Creating final zip');
execSync(`cd ${tmpPath} && zip -ro ${zipFile} "${appName}"`);
} catch (err) {
console.log('stdout:', String(err.stdout));
console.log('stderr:', String(err.stderr));
throw err;
}
console.log('Moving into the final destination', zipPath);
fs.renameSync(path.join(tmpPath, zipFile), zipPath);
rimraf.sync(tmpPath);
console.log('zip-macos-release is done');
}