The app currently uses a pragmatic release model. Keep these files aligned when cutting a release:
Resources/Info.plistCHANGELOG.mdREADME.mdif install, menu structure or runtime behavior changed materially
Do not bump Resources/Info.plist for ordinary maintenance, documentation sync or unreleased feature commits. Only change the bundle version when you are actually cutting a release.
- Run
make check. - Update the unreleased section in
CHANGELOG.md. - If this commit is a real release, bump
CFBundleShortVersionStringandCFBundleVersioninResources/Info.plist. - Build release artifacts with
make package(unsigned by default). - Confirm package content and signature with
./Scripts/verify-package.sh dist/DevStackMenu-*.pkg 0for unsigned path, or1when signing is mandatory. - Run a root-install smoke checklist with one command:
./Scripts/release-smoke-install.sh dist/DevStackMenu-*.pkgIt performs installer + pkgutil + post-install checks.
7. Sanity-check generated apps in /Applications after install (script already validates this, including /Applications/Import Compose To DX.app and /usr/local/bin/dx).
- Release package install is expected to be self-validating;
postinstallfails if/usr/local/bin/dxis not installed or executable.
- Verify the main app and compose-import helper use distinct bundle identifiers in the built artifacts.
- Verify single-instance behavior by launching the installed app twice and confirming the second launch exits while the original instance stays alive.
- If signing credentials are configured, run
workflow_dispatchon Release Artifacts for signed/notarized output. - If signing credentials are not configured, expect downloaded GitHub Release
.pkgfiles to be blocked by Gatekeeper until the user removescom.apple.quarantinemanually.
The repository includes a workflow that builds a .pkg artifact, uploads it as a workflow artifact, and attaches it to the GitHub release for the tag on push/tag events.
Signed/notarized output is optional and driven by workflow secrets.
Without these secrets, GitHub Release assets remain unsigned and non-notarized, which is acceptable for maintainer testing but not a polished public install flow.
To enable signing/notarization on workflow_dispatch, configure:
CODESIGN_INSTALLER_IDENTITYMACOS_INSTALLER_CERT_P12_BASE64MACOS_INSTALLER_CERT_PASSWORDNOTARYTOOL_KEY_IDNOTARYTOOL_ISSUER_IDNOTARYTOOL_KEY_P8_BASE64
Recommended tag format:
v0.1.1
- Artifacts are unsigned by default.
make install-localis a convenience for maintainers and local users; it is not a substitute for a signed distribution flow.- For a downloaded unsigned package, the current manual bypass is:
PKG="$(find "$HOME/Downloads" -maxdepth 1 -type f -name 'DevStackMenu-*.pkg' -exec stat -f '%m %N' {} \; | sort -nr | head -n 1 | cut -d' ' -f2-)"
[ -n "$PKG" ] && [ -f "$PKG" ] || { echo "DevStackMenu pkg not found in ~/Downloads" >&2; exit 1; }
xattr -d com.apple.quarantine "$PKG" 2>/dev/null || xattr -c "$PKG"
sudo installer -pkg "$PKG" -target /