Improve desktop icon quality and generation
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.
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
/* eslint-disable no-template-curly-in-string */
|
||||
|
||||
const { join } = require('node:path');
|
||||
const { readdirSync } = require('fs');
|
||||
const { join, resolve } = require('node:path');
|
||||
const { readdirSync, existsSync } = require('node:fs');
|
||||
const { electronBundled, electronUnbundled } = require('./dist-dirs.json');
|
||||
|
||||
/**
|
||||
@@ -17,6 +17,7 @@ module.exports = {
|
||||
},
|
||||
directories: {
|
||||
output: electronBundled,
|
||||
buildResources: resolvePathFromProjectRoot('src/presentation/electron/build'),
|
||||
},
|
||||
extraMetadata: {
|
||||
main: findMainEntryFile(
|
||||
@@ -53,10 +54,18 @@ module.exports = {
|
||||
* Finds by accommodating different JS file extensions and module formats.
|
||||
*/
|
||||
function findMainEntryFile(parentDirectory) {
|
||||
const files = readdirSync(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 ${parentDirectory}.`);
|
||||
throw new Error(`Main entry file not found in ${absoluteParentDirectory}.`);
|
||||
}
|
||||
return join(parentDirectory, entryFile);
|
||||
}
|
||||
|
||||
function resolvePathFromProjectRoot(pathSegment) {
|
||||
return resolve(__dirname, pathSegment);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user