cmux/scripts/sparkle_generate_keys.sh
2026-01-28 02:38:24 -08:00

60 lines
1.7 KiB
Bash
Executable file

#!/usr/bin/env bash
set -euo pipefail
SPARKLE_VERSION="${SPARKLE_VERSION:-2.8.1}"
SPARKLE_KEYCHAIN_ACCOUNT="${SPARKLE_KEYCHAIN_ACCOUNT:-cmuxterm}"
SPARKLE_ENV_FILE="${SPARKLE_ENV_FILE:-.env}"
work_dir="$(mktemp -d)"
cleanup() {
rm -rf "$work_dir"
}
trap cleanup EXIT
echo "Cloning Sparkle ${SPARKLE_VERSION}..."
git clone --depth 1 --branch "$SPARKLE_VERSION" https://github.com/sparkle-project/Sparkle "$work_dir/Sparkle"
echo "Building Sparkle generate_keys tool..."
xcodebuild \
-project "$work_dir/Sparkle/Sparkle.xcodeproj" \
-scheme generate_keys \
-configuration Release \
-derivedDataPath "$work_dir/build" \
CODE_SIGNING_ALLOWED=NO \
build >/dev/null
generate_keys="$work_dir/build/Build/Products/Release/generate_keys"
if [[ ! -x "$generate_keys" ]]; then
echo "generate_keys binary not found at $generate_keys" >&2
exit 1
fi
echo "Generating or locating Sparkle keys in keychain (account: $SPARKLE_KEYCHAIN_ACCOUNT)..."
"$generate_keys" --account "$SPARKLE_KEYCHAIN_ACCOUNT"
public_key="$("$generate_keys" --account "$SPARKLE_KEYCHAIN_ACCOUNT" -p)"
private_key_file="$work_dir/sparkle_private_key.txt"
"$generate_keys" --account "$SPARKLE_KEYCHAIN_ACCOUNT" -x "$private_key_file"
private_key="$(cat "$private_key_file")"
if [[ -z "$public_key" || -z "$private_key" ]]; then
echo "Failed to generate Sparkle keys." >&2
exit 1
fi
if [[ -f "$SPARKLE_ENV_FILE" ]]; then
tmp_env="$work_dir/env.tmp"
awk -F= 'BEGIN {OFS="="}
$1 == "SPARKLE_PUBLIC_KEY" {next}
$1 == "SPARKLE_PRIVATE_KEY" {next}
{print}
' "$SPARKLE_ENV_FILE" > "$tmp_env"
mv "$tmp_env" "$SPARKLE_ENV_FILE"
fi
{
echo "SPARKLE_PUBLIC_KEY=$public_key"
echo "SPARKLE_PRIVATE_KEY=$private_key"
} >> "$SPARKLE_ENV_FILE"
echo "Sparkle keys written to $SPARKLE_ENV_FILE"