See what changed in Boost {version} on GitHub.
') +# The "Version History" link Sparkle offers next to the notes. +ET.SubElement(item, s("fullReleaseNotesLink")).text = notes +ET.SubElement(item, "enclosure", { + "url": url, + "length": length, + "type": "application/octet-stream", + s("edSignature"): signature, +}) + +# Newest first, so the file reads like a changelog. +first = next((i for i, child in enumerate(channel) if child.tag == "item"), len(channel)) +channel.insert(first, item) + +ET.indent(tree, space=" ") +tree.write(feed, encoding="utf-8", xml_declaration=True) +with open(feed, "a") as f: + f.write("\n") +PY + +if git diff --quiet -- "$FEED"; then + echo "Boost $VERSION is already in $FEED exactly as signed now. Nothing to commit." + exit 0 +fi +git add "$FEED" +git commit -q -m "Add Boost $VERSION to the update feed" -- "$FEED" +echo "added Boost $VERSION to $FEED and committed it." +echo "Push it, and installed copies will offer the update on their next check." diff --git a/Scripts/build.sh b/Scripts/build.sh index 8e0a5a1..2bd43ab 100755 --- a/Scripts/build.sh +++ b/Scripts/build.sh @@ -10,7 +10,14 @@ cd "$(dirname "$0")/.." # One place. The release workflow reads it from here rather than being told # separately, so a tag and a bundle cannot disagree about what they are. -VERSION="1.4.1" +VERSION="1.5.0" + +# Where the app looks for new versions, and the key every update must be +# signed with. The feed is docs/appcast.xml, served by the project's GitHub +# Pages site; Scripts/appcast.sh adds each release to it. The public key's +# private half never leaves the maintainer's Keychain. See docs/releasing.md. +FEED_URL="https://kernel-hunter.github.io/boost/appcast.xml" +ED_PUBLIC_KEY="QKKfpvfADDZDhLbEDTOZ4QKgc5EgHgxP3hGulato8T8=" DEST="/Applications/Boost.app" BUILD="build.noindex" @@ -55,9 +62,18 @@ done echo " universal binary: $SLICES" rm -rf "$STAGE" -mkdir -p "$STAGE/Contents/MacOS" "$STAGE/Contents/Resources" +mkdir -p "$STAGE/Contents/MacOS" "$STAGE/Contents/Resources" "$STAGE/Contents/Frameworks" cp "$BUILD/Boost" "$STAGE/Contents/MacOS/Boost" +# Sparkle, for in-app updates. SwiftPM leaves the framework next to the +# binary; the binary looks for it in Contents/Frameworks (the rpath is set in +# Package.swift). ditto rather than cp -R, because a framework is mostly +# symlinks and cp can flatten them into copies, which breaks its signature. +if [ ! -d "$BIN_PATH/Sparkle.framework" ]; then + echo "error: Sparkle.framework not found in $BIN_PATH" >&2; exit 1 +fi +ditto "$BIN_PATH/Sparkle.framework" "$STAGE/Contents/Frameworks/Sparkle.framework" + cat > "$STAGE/Contents/Info.plist" <Boost is a menu bar app that shows what your memory is actually doing, then gives back only what is genuinely idle. No fake numbers. No subscription. No network access.
+Boost is a menu bar app that shows what your memory is actually doing, then gives back only what is genuinely idle. No fake numbers. No subscription. No telemetry.