// 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'); }