This commit refactors the icon and logo generation process by replacing multiple dependencies with ImageMagick. This simplifies the build process and enhances maintainability. Key changes: - Remove unnecessary icon files for macOS (.icns) and Linux (size-specific PNGs). Electron-builder can now auto-generate these from a single `logo.png` starting from version 19.54.0, see: - electron-userland/electron-builder#1682 - electron-userland/electron-builder#2533 - Retain `ico` generation with multiple sizes to fix pixelated/bad looking icons on Windows, see: - electron-userland/electron-builder#7328 - electron-userland/electron-builder#3867 - Replaced `svgexport`, `icon-gen`, and `electron-icon-builder` dependencies with ImageMagick, addressing issues with outdated dependencies and unreliable CI/CD builds. - Move electron-builder build resources to `src/presentation/electron/build` for better project structure. - Improve `electron-builder` configuration file by making it importable/reusable without prebuilding the Electron application.
72 lines
1.8 KiB
JavaScript
72 lines
1.8 KiB
JavaScript
/* eslint-disable no-template-curly-in-string */
|
|
|
|
const { join, resolve } = require('node:path');
|
|
const { readdirSync, existsSync } = require('node:fs');
|
|
const { electronBundled, electronUnbundled } = require('./dist-dirs.json');
|
|
|
|
/**
|
|
* @type {import('electron-builder').Configuration}
|
|
* @see https://www.electron.build/configuration/configuration
|
|
*/
|
|
module.exports = {
|
|
// Common options
|
|
publish: {
|
|
provider: 'github',
|
|
vPrefixedTagName: false, // default: true
|
|
releaseType: 'release', // default: draft
|
|
},
|
|
directories: {
|
|
output: electronBundled,
|
|
buildResources: resolvePathFromProjectRoot('src/presentation/electron/build'),
|
|
},
|
|
extraMetadata: {
|
|
main: findMainEntryFile(
|
|
join(electronUnbundled, 'main'), // do not `path.resolve`, it expects a relative path
|
|
),
|
|
},
|
|
|
|
// Windows
|
|
win: {
|
|
target: 'nsis',
|
|
},
|
|
nsis: {
|
|
artifactName: '${name}-Setup-${version}.${ext}',
|
|
},
|
|
|
|
// Linux
|
|
linux: {
|
|
target: 'AppImage',
|
|
},
|
|
appImage: {
|
|
artifactName: '${name}-${version}.${ext}',
|
|
},
|
|
|
|
// macOS
|
|
mac: {
|
|
target: 'dmg',
|
|
},
|
|
dmg: {
|
|
artifactName: '${name}-${version}.${ext}',
|
|
},
|
|
};
|
|
|
|
/**
|
|
* Finds by accommodating different JS file extensions and module formats.
|
|
*/
|
|
function findMainEntryFile(parentDirectory) {
|
|
const absoluteParentDirectory = resolvePathFromProjectRoot(parentDirectory);
|
|
if (!existsSync(absoluteParentDirectory)) {
|
|
return null; // Avoid disrupting other processes such `npm install`.
|
|
}
|
|
const files = readdirSync(absoluteParentDirectory);
|
|
const entryFile = files.find((file) => /^index\.(cjs|mjs|js)$/.test(file));
|
|
if (!entryFile) {
|
|
throw new Error(`Main entry file not found in ${absoluteParentDirectory}.`);
|
|
}
|
|
return join(parentDirectory, entryFile);
|
|
}
|
|
|
|
function resolvePathFromProjectRoot(pathSegment) {
|
|
return resolve(__dirname, pathSegment);
|
|
}
|