Skip to main content

Full build — all platforms

build-all.sh builds the complete DeepPhe installer distribution from the command line: the macOS, Windows, and Linux media sets defined in DeepPhe-and-Launcher.install4j, written to build/deepphe-installer/.

./build-all.sh

By default this produces signed media (macOS notarized, Windows Authenticode-signed) using the signing configuration inside the .install4j project. Provide the key passwords via environment variables, or pass --no-installer-signing for a quick unsigned build.

Quick unsigned build

For a fast local all-platform build with no signing or notarization:

./build-all.sh --no-installer-signing --faster

This passes --disable-signing --disable-notarization to install4jc.

Sign only the macOS installer media

To produce a signed/notarized macOS DMG while leaving Windows and Linux installer media unsigned:

./build-all.sh --mac-signing-only

This runs install4j twice: first for macOS media id 484 with installer signing enabled, then for Windows/Linux media ids 251,815 with signing and notarization disabled.

Signing the downloadable Windows assets

The launcher downloads its Windows payloads at install time from the DeepPhe-Dist releases. Those payloads are signed separately (they are not part of the installer media). Add --sign to run sign-windows-assets.sh after the build:

./build-all.sh --sign

That step is remote (it re-uploads assets to GitHub) and needs the YubiKey, gh, and jsign, so it is opt-in rather than automatic.

Publishing the installer media

Add --publish to upload the built installer media to a GitHub release:

./build-all.sh --publish

By default the script publishes to DeepPhe/DeepPhe-Dist with the tag deepphe-installer-<version> and uploads versioned asset filenames such as DeepPhe-7.1.dmg. Use --publish-tag or --publish-repo to override those defaults. See Publishing installer media.

Options

OptionEffect
--signAfter building, run ./sign-windows-assets.sh
--mac-signing-onlySign/notarize only macOS installer media; build Windows/Linux media unsigned
--no-installer-signingPass --disable-signing --disable-notarization to install4jc
--publishUpload built installer media to a GitHub release
--publish-tag TAGOverride the GitHub release tag used by --publish
--publish-repo OWNER/REPOOverride the GitHub repository used by --publish
--cleanDelete the build output directory first
--release VERSIONOverride the application version (install4jc --release)
--fasterDisable LZMA/Pack200 compression (fast test builds)
--testDry run (install4jc --test)
-v, --verboseVerbose install4jc output
-h, --helpShow help

Environment

VariablePurpose
INSTALL4JCPath to install4jc (auto-detected if unset)
DIST_REPODefault publish target for --publish
MAC_MEDIA_IDmacOS media set id used by --mac-signing-only (484)
NON_MAC_MEDIA_IDSWindows/Linux media ids used by --mac-signing-only (251,815)
WIN_KEYSTORE_PASSWORDWindows code-signing key password
MAC_KEYSTORE_PASSWORDmacOS code-signing key password
APPLE_ID_PASSWORDApp-specific password for macOS notarization
INSTALL4JC_ARGSExtra args appended to every install4jc call
These are variable names, not values

Never hard-code passwords into scripts or commit them. Export them in your shell session (or a local, git-ignored env file) just before building. See Signing overview.

About the Windows certificate chain

Windows signing uses the YubiKey (PKCS#11), which holds only the leaf certificate. install4j needs the intermediate/root certs on disk to embed the full chain, so when signing is enabled the script points install4j at them:

-D sys.ext.certDir="$SCRIPT_DIR/keys/certchain"

The keys/certchain/ directory holds the public .cer chain files (not secrets). It is only added if it exists.

Output

A successful build writes to build/deepphe-installer/:

build/deepphe-installer/
├── DeepPhe.dmg # macOS
├── DeepPhe_windows.exe # Windows (Authenticode-signed)
├── DeepPhe_linux-x64.sh # Linux self-extracting installer
├── output.txt # install4j media manifest
└── updates.xml # install4j auto-update descriptor

The local filenames above are the install4j build outputs. With --publish, build-all.sh uploads versioned copies to the GitHub release. For the 7.1 release, the published installer resources are:

PlatformPublished installer
macOSDeepPhe-7.1.dmg
WindowsDeepPhe_windows-7.1.exe
LinuxDeepPhe_linux-x64-7.1.sh

Reproducing the build on a fresh machine

The .install4j file includes some local absolute paths for payloads and signing files. Those are build-machine configuration, not portable source. On a new machine, update those paths inside install4j (or make them relative) before building. See Repo layout.