82 lines
2.3 KiB
TypeScript
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');
|
|
}
|