79 lines
		
	
	
	
		
			2.2 KiB
			
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
	
		
			2.2 KiB
			
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
/* 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');
 | 
						|
}
 |