From dc1fa130561e38fc3e497afd0b3b0e5778e7b1e9 Mon Sep 17 00:00:00 2001 From: Tony Germano Date: Mon, 12 Oct 2026 02:58:23 -0400 Subject: [PATCH 1/5] Normalize line endings in install4j project files install4j does not keep a project file's existing line endings. It rewrites the whole file with the platform's endings on save, so saving on Linux turned every line of the CRLF file into a change. Mark *.install4j as text so git stores it with LF and checks it out with native endings. A save on either platform then shows only the real changes. This commit only converts the stored file from CRLF to LF. Assisted-by: Claude:claude-opus-5-5 Signed-off-by: Tony Germano --- .gitattributes | 4 + .../install4j/oie-installer-config.install4j | 1682 ++++++++--------- 2 files changed, 845 insertions(+), 841 deletions(-) diff --git a/.gitattributes b/.gitattributes index 1e727afd1f..067124344f 100644 --- a/.gitattributes +++ b/.gitattributes @@ -9,5 +9,9 @@ configure-from-env text eol=lf # Windows scripts must stay CRLF *.bat text eol=crlf +# Stored with LF, checked out with native endings. install4j rewrites +# the whole file with the platform's endings on save. +*.install4j text + # Binary files are left untouched *.jar binary diff --git a/tools/install4j/oie-installer-config.install4j b/tools/install4j/oie-installer-config.install4j index c864cee3b5..53a145bcc3 100644 --- a/tools/install4j/oie-installer-config.install4j +++ b/tools/install4j/oie-installer-config.install4j @@ -1,841 +1,841 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # -# Do not modify this file! It may get overwritten in an update. Please put all custom -# options in custom.vmoptions -# --server --Xmx256m --Djava.awt.headless=true --Dapple.awt.UIElement=true - - - - - - - - - - - - - - # -# Do not modify this file! It may get overwritten in an update. Please put all custom -# options in custom.vmoptions -# --server --Xmx256m --Djava.awt.headless=true --Dapple.awt.UIElement=true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ${compiler:installer:mediaRoot}/../governance/branding/icons/oie_logo_only_white_background_128x128.png - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 255 - 255 - 255 - 255 - - - 49 - 52 - 53 - 255 - - - - - - - - - - - - - icon:${installer:sys.installerApplicationMode}_header.png - - - - - 0 - 5 - 1 - 1 - - - - - 0 - 20 - 0 - 10 - - - - - backgroundColor - foregroundColor - imageAnchor - imageFile - imageOverlap - - - - - - - - - sys.installationDir - - - context.getBooleanVariable("sys.confirmedUpdateInstallation") - - - - - - ${form:welcomeMessage} - - !context.isConsole() - - - - - - String message = context.getMessage("ConsoleWelcomeLabel", context.getApplicationName()); -return console.askOkCancel(message, true); - - - - - - - - updateCheck - - - - - ${i18n:ClickNext} - - - - - - - - - ${i18n:LicenseLabel3} - - - - - - - - en - - ${compiler:installer:mediaRoot}/server/setup/docs/LICENSE.txt - - - - - - license - - - textSource - displayedText - displayedTextFile - variableName - acceptInitiallySelected - readAllRequired - - - - - - - - - ${i18n:InfoBeforeClickLabel} - - !context.isConsole() - - - - <!DOCTYPE html> -<html> -<body style="font-family: Arial, sans-serif; line-height: 1.6; margin: 1em; background-color: white; color: black;"> - <h1 style="color: black;">Open Integration Engine - Preview Release</h1> - <p>This is a preview release of the Open Integration Engine.</p> - <p> - This release is recommended for users already familiar with Mirth Connect. - It installs a fully functional version of the engine with minimal prompts. - As you have seen - this does require admin permissions to run and install services, we will be updating that! - </p> - <h2>Notes</h2> - <ul> - <li>Native services are installed for all supported platforms and are configured to start automatically.</li> - <li><strong>macOS users:</strong> A reboot will automatically start the service.</li> - <li> - Default settings from mirth.properties are applied automatically; the installer does not prompt for customization. - </li> - <li>This includes ports (default: 8080 and 8443), log and app data paths, and password requirements.</li> - <li> - Previous installations are not preserved, though runtime-created directories - (e.g., appdata) - are retained across installs. - </li> - - </ul> -</body> -</html> - - - - - en - - ${compiler:installer:mediaRoot}/tools/install4j/readme.html - - - - - - - - textSource - displayedText - displayedTextFile - variableName - - - - - - - console.waitForEnter(); -return true; - - - - - - - - - !context.getBooleanVariable("sys.confirmedUpdateInstallation") - - - - - sys.installationDir - - - context.getVariable("sys.responseFile") == null - - - - - - ${i18n:SelectDirLabel(${compiler:sys.fullName})} - - - - - - - - suggestAppDir - validateApplicationId - existingDirWarning - checkWritable - manualEntryAllowed - checkFreeSpace - showRequiredDiskSpace - showFreeDiskSpace - allowSpacesOnUnix - validationScript - standardValidation - - - - - - - - - ${i18n:SelectComponentsLabel2} - - !context.isConsole() - - - - - - - selectionChangedScript - - - - - - - - - - - - - - - - - - ${i18n:UninstallerMenuEntry(${compiler:sys.fullName})} - - !context.getBooleanVariable("sys.programGroupDisabled") - - - - ${compiler:sys.fullName} ${compiler:sys.version} - - - - - 25 - com.oie.oieservice - - - - - - - ${i18n:WizardPreparing} - - - - - - - - - ${form:finishedMessage} - - - - - - - - - ${i18n:UninstallerMenuEntry(${compiler:sys.fullName})} - - - - - - - - - - - - - - - - - - - - - - - - - - 25 - - - - - - - ${form:welcomeMessage} - - !context.isConsole() - - - - - - String message = context.getMessage("ConfirmUninstall", context.getApplicationName()); -return console.askYesNo(message, true); - - - - - - - - - - - - - - - ${i18n:UninstallerPreparing} - - - - - - - - - - ${form:successMessage} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + # +# Do not modify this file! It may get overwritten in an update. Please put all custom +# options in custom.vmoptions +# +-server +-Xmx256m +-Djava.awt.headless=true +-Dapple.awt.UIElement=true + + + + + + + + + + + + + + # +# Do not modify this file! It may get overwritten in an update. Please put all custom +# options in custom.vmoptions +# +-server +-Xmx256m +-Djava.awt.headless=true +-Dapple.awt.UIElement=true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${compiler:installer:mediaRoot}/../governance/branding/icons/oie_logo_only_white_background_128x128.png + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 255 + 255 + 255 + 255 + + + 49 + 52 + 53 + 255 + + + + + + + + + + + + + icon:${installer:sys.installerApplicationMode}_header.png + + + + + 0 + 5 + 1 + 1 + + + + + 0 + 20 + 0 + 10 + + + + + backgroundColor + foregroundColor + imageAnchor + imageFile + imageOverlap + + + + + + + + + sys.installationDir + + + context.getBooleanVariable("sys.confirmedUpdateInstallation") + + + + + + ${form:welcomeMessage} + + !context.isConsole() + + + + + + String message = context.getMessage("ConsoleWelcomeLabel", context.getApplicationName()); +return console.askOkCancel(message, true); + + + + + + + + updateCheck + + + + + ${i18n:ClickNext} + + + + + + + + + ${i18n:LicenseLabel3} + + + + + + + + en + + ${compiler:installer:mediaRoot}/server/setup/docs/LICENSE.txt + + + + + + license + + + textSource + displayedText + displayedTextFile + variableName + acceptInitiallySelected + readAllRequired + + + + + + + + + ${i18n:InfoBeforeClickLabel} + + !context.isConsole() + + + + <!DOCTYPE html> +<html> +<body style="font-family: Arial, sans-serif; line-height: 1.6; margin: 1em; background-color: white; color: black;"> + <h1 style="color: black;">Open Integration Engine - Preview Release</h1> + <p>This is a preview release of the Open Integration Engine.</p> + <p> + This release is recommended for users already familiar with Mirth Connect. + It installs a fully functional version of the engine with minimal prompts. + As you have seen - this does require admin permissions to run and install services, we will be updating that! + </p> + <h2>Notes</h2> + <ul> + <li>Native services are installed for all supported platforms and are configured to start automatically.</li> + <li><strong>macOS users:</strong> A reboot will automatically start the service.</li> + <li> + Default settings from mirth.properties are applied automatically; the installer does not prompt for customization. + </li> + <li>This includes ports (default: 8080 and 8443), log and app data paths, and password requirements.</li> + <li> + Previous installations are not preserved, though runtime-created directories + (e.g., appdata) + are retained across installs. + </li> + + </ul> +</body> +</html> + + + + + en + + ${compiler:installer:mediaRoot}/tools/install4j/readme.html + + + + + + + + textSource + displayedText + displayedTextFile + variableName + + + + + + + console.waitForEnter(); +return true; + + + + + + + + + !context.getBooleanVariable("sys.confirmedUpdateInstallation") + + + + + sys.installationDir + + + context.getVariable("sys.responseFile") == null + + + + + + ${i18n:SelectDirLabel(${compiler:sys.fullName})} + + + + + + + + suggestAppDir + validateApplicationId + existingDirWarning + checkWritable + manualEntryAllowed + checkFreeSpace + showRequiredDiskSpace + showFreeDiskSpace + allowSpacesOnUnix + validationScript + standardValidation + + + + + + + + + ${i18n:SelectComponentsLabel2} + + !context.isConsole() + + + + + + + selectionChangedScript + + + + + + + + + + + + + + + + + + ${i18n:UninstallerMenuEntry(${compiler:sys.fullName})} + + !context.getBooleanVariable("sys.programGroupDisabled") + + + + ${compiler:sys.fullName} ${compiler:sys.version} + + + + + 25 + com.oie.oieservice + + + + + + + ${i18n:WizardPreparing} + + + + + + + + + ${form:finishedMessage} + + + + + + + + + ${i18n:UninstallerMenuEntry(${compiler:sys.fullName})} + + + + + + + + + + + + + + + + + + + + + + + + + + 25 + + + + + + + ${form:welcomeMessage} + + !context.isConsole() + + + + + + String message = context.getMessage("ConfirmUninstall", context.getApplicationName()); +return console.askYesNo(message, true); + + + + + + + + + + + + + + + ${i18n:UninstallerPreparing} + + + + + + + + + + ${form:successMessage} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 9e4eecf7d1e764d16bebd3b638d3593c36940b88 Mon Sep 17 00:00:00 2001 From: Tony Germano Date: Mon, 12 Oct 2026 02:58:29 -0400 Subject: [PATCH 2/5] Add .git-blame-ignore-revs List commits that only change formatting or line endings so git blame skips them. GitHub uses this file automatically. Locally, set blame.ignoreRevsFile to use it. Start with the line-ending normalization of the install4j project file. Assisted-by: Claude:claude-opus-5-5 Signed-off-by: Tony Germano --- .git-blame-ignore-revs | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .git-blame-ignore-revs diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs new file mode 100644 index 0000000000..f5990c39be --- /dev/null +++ b/.git-blame-ignore-revs @@ -0,0 +1,6 @@ +# Commits that git blame should skip, such as whole-file line-ending +# or formatting changes. GitHub reads this file automatically. To use it +# locally, run: git config blame.ignoreRevsFile .git-blame-ignore-revs + +# Normalize line endings in install4j project files +dc1fa130561e38fc3e497afd0b3b0e5778e7b1e9 From fb098f77a6aa1b33d4c70e4f0d35c85d7cec7739 Mon Sep 17 00:00:00 2001 From: Tony Germano Date: Mon, 12 Oct 2026 21:39:48 -0400 Subject: [PATCH 3/5] Ignore install4j project backup files The installer project sets backupOnSave, so every save in install4j leaves a copy of the previous version next to the project file with a trailing ~. Ignore those backups so they are not committed by mistake. Assisted-by: Claude:claude-opus-5-5 Signed-off-by: Tony Germano --- .gitignore | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.gitignore b/.gitignore index 9e8e4e77f3..17542916ce 100644 --- a/.gitignore +++ b/.gitignore @@ -36,6 +36,11 @@ build/ gradle-app.setting !gradle-wrapper.jar +############################## +## install4j +############################## +*.install4j~ + ############################## ## IntelliJ ############################## From 52689ab9d86e1a789c5e994123e2245e68b36d6c Mon Sep 17 00:00:00 2001 From: Tony Germano Date: Mon, 12 Oct 2026 21:44:18 -0400 Subject: [PATCH 4/5] Convert install4j project from version 11 to 13 Open the project in install4j 13.1.1 and save it. There are no manual edits. install4j migrated the project file as follows: - Numeric overwrite modes become named values ("never", "alwaysAsk"). - The update alert form component becomes a streamlined installation chooser set to UPDATE_ONLY, and conditions on sys.confirmedUpdateInstallation now check sys.streamlinedInstallation. - The updateInstallationDirectory property on the startup action is replaced by a separate SetInstallationDirectoryAction. - CreateProgramGroupAction becomes CreateDefaultStartMenuEntriesAction. The custom uninstaller menu name is dropped in favor of folderName and linkDirectory. - Screen title font settings move into widget styles, with a default "Standard" widget style added. - The wizard image edge colors are moved and slightly adjusted, and the imageEdgeBorder property is dropped. Assisted-by: Claude:claude-opus-5-5 Signed-off-by: Tony Germano --- .../install4j/oie-installer-config.install4j | 82 +++++++++++-------- 1 file changed, 49 insertions(+), 33 deletions(-) diff --git a/tools/install4j/oie-installer-config.install4j b/tools/install4j/oie-installer-config.install4j index 53a145bcc3..19998cb295 100644 --- a/tools/install4j/oie-installer-config.install4j +++ b/tools/install4j/oie-installer-config.install4j @@ -1,5 +1,5 @@ - + @@ -20,7 +20,7 @@ - + @@ -50,7 +50,7 @@ - + # # Do not modify this file! It may get overwritten in an update. Please put all custom # options in custom.vmoptions @@ -71,7 +71,7 @@ - + # # Do not modify this file! It may get overwritten in an update. Please put all custom # options in custom.vmoptions @@ -133,9 +133,9 @@ - + @@ -207,7 +207,7 @@ sys.installationDir - context.getBooleanVariable("sys.confirmedUpdateInstallation") + context.getBooleanVariable("sys.streamlinedInstallation") @@ -228,9 +228,12 @@ return console.askOkCancel(message, true); - + + + + - updateCheck + streamlinedInstallationStrategy @@ -344,7 +347,7 @@ return true; - !context.getBooleanVariable("sys.confirmedUpdateInstallation") + !context.getBooleanVariable("sys.streamlinedInstallation") @@ -410,9 +413,10 @@ return true; - + - ${i18n:UninstallerMenuEntry(${compiler:sys.fullName})} + ${installer:sys.programGroupName} + ${installer:sys.symlinkDir} !context.getBooleanVariable("sys.programGroupDisabled") @@ -578,23 +582,6 @@ return console.askYesNo(message, true); - - - - 25 - 143 - 220 - 255 - - - 0 - 74 - 151 - 255 - - - - ${compiler:sys.install4jHome}/resource/styles/wizard.png @@ -608,13 +595,34 @@ return console.askYesNo(message, true); 10 + + + + 27 + 143 + 220 + 255 + + + 0 + 73 + 150 + 255 + + + - - - + + + + + + + + @@ -692,8 +700,13 @@ return console.askYesNo(message, true); - - + + + + + + + @@ -758,6 +771,9 @@ return console.askYesNo(message, true); + + + From f9ba73e28de151b041b97e7383e0ab9d2c4f1799 Mon Sep 17 00:00:00 2001 From: Tony Germano Date: Wed, 14 Oct 2026 19:21:07 -0400 Subject: [PATCH 5/5] Update with changes from 4.6.0 modified for 4.7.0 Bring over the installer changes that were made to build the 4.6.0 release, and update the project for the 4.7.0 build output. From the 4.6.0 build: - Run an UninstallPreviousAction before installing files, so an upgrade removes the old installation's files first. Files installed with uninstallMode "never", such as conf, are kept. - Drop buildAll="false" from buildIds. For 4.7.0: - Set mediaRoot to "../.." so it resolves to the repository root from tools/install4j. The old "../../../engine" value only worked when the repository was checked out into a directory named "engine". - Bundle the Adoptium JDK 21.0.12.1+1 instead of Zulu 17.0.15. The minimum Java version stays at 17. - Raise javaMaxVersion from 25 to 999 so newer Java releases are not rejected. Fixes #341. - Fix the publisher URL to openintegrationengine.org. - Exclude the oieserver and oieserver.ps1 scripts from both file sets so they are not installed. They conflict with the oieserver launcher that install4j generates. - Exclude configure-from-env from the file set that is never overwritten or uninstalled. It was in both file sets, which caused an error. It is now only in the main file set, so an upgrade removes the old copy and installs the new one. - Remove the oiemanager launcher and the per-media-set exclusions of it. Its mirth-manager-launcher.jar is no longer built, and the Windows x64 archive was the only media set that did not exclude it. - Drop the webapps, manager-lib and mirth-manager-launcher.jar file exclusions. These are no longer in the server/setup build output. - Update the installer readme for upgrades. It now says that the installer can upgrade an existing installation and what an upgrade keeps, and it shows the version from ${compiler:sys.version} so it does not need to be edited for each release. The note on defaults now points to the conf directory, since log paths are set in log4j2.properties rather than mirth.properties. - Remove the stale inline "Preview Release" text from the readme screen. The screen reads readme.html, so the inline copy was never shown. install4j also renumbered the default widget style and added an id to the screen title's label widget style when it saved the project. Assisted-by: Claude:claude-opus-5-5 Signed-off-by: Tony Germano --- .../install4j/oie-installer-config.install4j | 102 +++--------------- tools/install4j/readme.html | 22 ++-- 2 files changed, 25 insertions(+), 99 deletions(-) diff --git a/tools/install4j/oie-installer-config.install4j b/tools/install4j/oie-installer-config.install4j index 19998cb295..9a7ae35657 100644 --- a/tools/install4j/oie-installer-config.install4j +++ b/tools/install4j/oie-installer-config.install4j @@ -1,10 +1,10 @@ - + - + - + @@ -18,13 +18,14 @@ + + - - + @@ -33,7 +34,8 @@ - + + @@ -85,18 +87,6 @@ - - - - - - - - - - - - @@ -286,34 +276,6 @@ return console.askOkCancel(message, true); - <!DOCTYPE html> -<html> -<body style="font-family: Arial, sans-serif; line-height: 1.6; margin: 1em; background-color: white; color: black;"> - <h1 style="color: black;">Open Integration Engine - Preview Release</h1> - <p>This is a preview release of the Open Integration Engine.</p> - <p> - This release is recommended for users already familiar with Mirth Connect. - It installs a fully functional version of the engine with minimal prompts. - As you have seen - this does require admin permissions to run and install services, we will be updating that! - </p> - <h2>Notes</h2> - <ul> - <li>Native services are installed for all supported platforms and are configured to start automatically.</li> - <li><strong>macOS users:</strong> A reboot will automatically start the service.</li> - <li> - Default settings from mirth.properties are applied automatically; the installer does not prompt for customization. - </li> - <li>This includes ports (default: 8080 and 8443), log and app data paths, and password requirements.</li> - <li> - Previous installations are not preserved, though runtime-created directories - (e.g., appdata) - are retained across installs. - </li> - - </ul> -</body> -</html> - @@ -404,6 +366,7 @@ return true; + @@ -701,7 +664,7 @@ return console.askYesNo(message, true); - + @@ -771,79 +734,42 @@ return console.askYesNo(message, true); - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -851,7 +777,7 @@ return console.askYesNo(message, true); - + diff --git a/tools/install4j/readme.html b/tools/install4j/readme.html index 8c25371a1d..339d6ffeff 100644 --- a/tools/install4j/readme.html +++ b/tools/install4j/readme.html @@ -1,26 +1,26 @@ -

Open Integration Engine

-

Open Integration Engine

+

Open Integration Engine ${compiler:sys.version}

- This installer sets up a fully functional version of the engine with minimal user input. + This installer sets up a fully functional version of the engine with minimal user input, + or upgrades an existing installation. The installer requires administrator permissions to run and install services.

Notes

    -
  • Native services are installed for all supported platforms and are configured to start automatically.
  • -
  • macOS users: A reboot will automatically start the service.
  • +
  • Native services are installed for all supported platforms and are configured to start automatically.
  • +
  • macOS users: A reboot will automatically start the service.
  • - Default settings from mirth.properties are applied automatically; the installer does not prompt for customization. + A new installation uses the default configuration files in the conf directory; + the installer does not prompt for customization. + This includes ports (default: 8080 and 8443), log and app data paths, and password requirements.
  • -
  • This includes ports (default: 8080 and 8443), log and app data paths, and password requirements.
  • - Previous installations are not preserved, though runtime-created directories - (e.g., appdata) - are retained across installs. + An upgrade replaces the program files from the previous installation. + Files in the conf directory are kept and are not updated with new defaults. + Directories created at runtime, such as appdata, are also kept.
  • -