From db049a346750b60f4ce250763760c87f44b51b29 Mon Sep 17 00:00:00 2001 From: Ludy Date: Wed, 14 Jan 2026 01:22:05 +0100 Subject: [PATCH] fix(core): reinstall frontend dependencies when iconify package is missing (#5432) # Description of Changes ### What was changed - Updated the Gradle `npmInstall` task to detect a missing required devDependency (`@iconify-json/material-symbols`) even when `node_modules` exists. - If the package is missing, the task will no longer skip `npm install`; it will force a reinstall instead. ### Why the change was made - The frontend build (`npm run generate-icons`) can fail with `Cannot find module '@iconify-json/material-symbols'` when `node_modules` is present but incomplete/corrupted. - The current "node_modules exists => skip install" shortcut is not sufficient for this scenario, causing Gradle builds to fail during `npmBuild`. --- ## Checklist ### General - [ ] I have read the [Contribution Guidelines](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/CONTRIBUTING.md) - [ ] I have read the [Stirling-PDF Developer Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/DeveloperGuide.md) (if applicable) - [ ] I have read the [How to add new languages to Stirling-PDF](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/HowToAddNewLanguage.md) (if applicable) - [ ] I have performed a self-review of my own code - [ ] My changes generate no new warnings ### Documentation - [ ] I have updated relevant docs on [Stirling-PDF's doc repo](https://github.com/Stirling-Tools/Stirling-Tools.github.io/blob/main/docs/) (if functionality has heavily changed) - [ ] I have read the section [Add New Translation Tags](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/HowToAddNewLanguage.md#add-new-translation-tags) (for new translation tags only) ### Translations (if applicable) - [ ] I ran [`scripts/counter_translation.py`](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/docs/counter_translation.md) ### UI Changes (if applicable) - [ ] Screenshots or videos demonstrating the UI changes are attached (e.g., as comments or direct attachments in the PR) ### Testing (if applicable) - [ ] I have tested my changes locally. Refer to the [Testing Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/DeveloperGuide.md#6-testing) for more details. --- app/core/build.gradle | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/app/core/build.gradle b/app/core/build.gradle index 61c7b563c..e61ef41b1 100644 --- a/app/core/build.gradle +++ b/app/core/build.gradle @@ -208,6 +208,14 @@ tasks.register('npmInstall', Exec) { println "node_modules not found, will install..." return true } + + // if required devDependency is missing, reinstall + def iconifyPkg = new File(frontendDir, 'node_modules/@iconify-json/material-symbols/package.json') + if (!iconifyPkg.exists()) { + println "@iconify-json/material-symbols missing, will reinstall..." + return true + } + def packageJson = new File(frontendDir, 'package.json') def packageLock = new File(frontendDir, 'package-lock.json') def isOutdated = nodeModules.lastModified() < packageJson.lastModified() ||