insomnia/packages/insomnia-app/scripts/package.ts
Filipe Freire b3aa6b9cec
Easier Alpha/Beta/Stable releases (INS-1435) (#4516)
Co-authored-by: David Marby <david@dmarby.se>
2022-03-09 16:06:53 +01:00

94 lines
2.3 KiB
TypeScript

import * as electronBuilder from 'electron-builder';
import path from 'path';
import rimraf from 'rimraf';
import appConfig from '../config/config.json';
import electronBuilderConfig from '../config/electronbuilder.json';
import { start as build } from './build';
const PLATFORM_MAP = {
darwin: 'mac',
linux: 'linux',
win32: 'win',
} as const;
const isSupportedPlatform = (platform: NodeJS.Platform): platform is keyof typeof PLATFORM_MAP => (
PLATFORM_MAP[platform] !== undefined
);
// Start package if ran from CLI
if (require.main === module) {
process.nextTick(async () => {
try {
await build();
await module.exports.start();
} catch (err) {
console.log('[package] ERROR:', err);
process.exit(1);
}
});
}
const pkg = () => {
const { BUILD_TARGETS } = process.env;
const {
appId,
binaryPrefix,
executableName,
githubOrg,
githubRepo,
icon,
synopsis,
} = appConfig;
// Replace some things
const rawConfig = JSON.stringify(electronBuilderConfig, null, 2)
.replace(/__APP_ID__/g, appId)
.replace(/__BINARY_PREFIX__/g, binaryPrefix)
.replace(/__EXECUTABLE_NAME__/g, executableName)
.replace(/__GITHUB_OWNER__/g, githubOrg)
.replace(/__GITHUB_REPO__/g, githubRepo)
.replace(/__ICON_URL__/g, icon)
.replace(/__SYNOPSIS__/g, synopsis);
const config = JSON.parse(rawConfig);
const { platform } = process;
if (!isSupportedPlatform(platform)) {
console.log(`[package] ERROR: unsupported platform ${platform}`);
process.exit(1);
}
const targetPlatform = PLATFORM_MAP[platform];
const target = BUILD_TARGETS?.split(',') ?? config[targetPlatform].target;
return electronBuilder.build({
config,
[targetPlatform]: target,
...targetPlatform === 'mac' ? { universal: true } : {},
});
};
const emptyDir = (relPath: string) => new Promise<void>((resolve, reject) => {
const dir = path.resolve(__dirname, relPath);
rimraf(dir, err => {
if (err) {
reject(err);
} else {
resolve();
}
});
});
export const start = async () => {
console.log('[package] Removing existing directories');
if (process.env.KEEP_DIST_FOLDER !== 'yes') {
await emptyDir(path.join('..', 'dist', '*'));
}
console.log('[package] Packaging app');
await pkg();
console.log('[package] Complete!');
};