mirror of
https://github.com/anomalyco/hex.git
synced 2026-11-15 14:16:56 +08:00
49 lines
1.6 KiB
Bash
Executable File
49 lines
1.6 KiB
Bash
Executable File
#!/bin/sh
|
|
set -eu
|
|
|
|
root=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)
|
|
source_bundle=$("$root/scripts/build-app.sh")
|
|
install_dir="/Applications"
|
|
installed_bundle="$install_dir/$(basename "$source_bundle")"
|
|
|
|
stop_bundle() {
|
|
bundle="$1"
|
|
[ -d "$bundle" ] || return 0
|
|
executable_name=$(/usr/libexec/PlistBuddy -c 'Print :CFBundleExecutable' "$bundle/Contents/Info.plist")
|
|
executable="$bundle/Contents/MacOS/$executable_name"
|
|
if ! LC_ALL=C pgrep -f "$executable" >/dev/null; then
|
|
return 0
|
|
fi
|
|
LC_ALL=C pkill -TERM -f "$executable" || true
|
|
attempts=30
|
|
while LC_ALL=C pgrep -f "$executable" >/dev/null; do
|
|
if [ "$attempts" -eq 0 ]; then
|
|
echo "Timed out waiting for $executable to stop." >&2
|
|
exit 1
|
|
fi
|
|
attempts=$((attempts - 1))
|
|
sleep 1
|
|
done
|
|
}
|
|
|
|
mkdir -p "$install_dir"
|
|
if [ -e "$installed_bundle" ] || [ -L "$installed_bundle" ]; then
|
|
existing_id=$(/usr/libexec/PlistBuddy -c 'Print :CFBundleIdentifier' "$installed_bundle/Contents/Info.plist" 2>/dev/null || true)
|
|
# The Kit-signed com.kitlangton.hex2 build is the same Rust app under its old identity.
|
|
case "$existing_id" in
|
|
anomaly.hex | com.kitlangton.hex2) ;;
|
|
*)
|
|
echo "Refusing to replace $installed_bundle: it is not the Rust Hex app. Install the new app manually." >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
fi
|
|
staged_bundle="$install_dir/.$(basename "$source_bundle").installing"
|
|
rm -rf "$staged_bundle"
|
|
/usr/bin/ditto "$source_bundle" "$staged_bundle"
|
|
stop_bundle "$installed_bundle"
|
|
rm -rf "$installed_bundle"
|
|
mv "$staged_bundle" "$installed_bundle"
|
|
/usr/bin/open "$installed_bundle"
|
|
echo "$installed_bundle"
|