-
-
Notifications
You must be signed in to change notification settings - Fork 38
fix-forward #2820 (tsk-27gdvd): add the fenced red run (tests/sparkle_tests.bats + SparkleBridgeTests) to the PR body; no code change #2840
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
909999e
29e99a5
63753fb
78eec83
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| Task already completed on exec/tsk-27gdvd - the fix-forward is in place with zero source diff. |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,28 @@ | ||
| ### Fixed | ||
|
|
||
| - Fixed Sparkle framework integration for macOS updater | ||
| - Updated `fetch_sparkle.sh` to properly extract Sparkle 2.6.0 framework from correct archive layout (`Sparkle.xcframework/macos-arm64_x86_64/Sparkle.framework/`) | ||
| - Updated `sparkle_sign.sh` to search for sign_update in sparkle-bin directory | ||
| - Updated `assemble_bundle.sh` to use explicit --release flag for build mode detection | ||
| - Updated `Package.swift` to include Sparkle as a binary target dependency | ||
| - Added `verify_sparkle.sh` to validate runtime linking of Sparkle framework | ||
| - Added `RELEASE_TESTING.md` manual verification step for Mac builds | ||
| - Improved checksum verification to handle both shasum and sha256sum commands | ||
|
|
||
| - Changed Sparkle feed host from `taos.app` to project domain `taos.my` for better security | ||
| - Updated mac/appcast/appcast.xml | ||
| - Updated mac/build/sparkle_sign.sh | ||
| - Updated mac/launcher/Sources/taOSLauncher/Resources/Info.plist.in | ||
| - Updated mac/launcher/Tests/taOSLauncherTests/SparkleBridgeTests.swift | ||
|
|
||
| - Added fetch_sparkle.sh script to fetch and verify Sparkle 2.6.0 framework | ||
|
|
||
| - Modified assemble_bundle.sh to fail when Sparkle.framework is missing in release builds | ||
| - Modified assemble_bundle.sh to fail when ed_public.pem is missing in release builds | ||
|
|
||
| - Added mac/build/checksums/sparkle-2.6.0.sha256 | ||
|
|
||
| - Updated mac/build/build.sh to fetch Sparkle.framework prior to bundling | ||
|
|
||
| S2-23: Mac updater is a no-op - security fixes never reached users | ||
| if feed domain not owned by project | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,14 @@ | ||
| ### Fixed | ||
|
|
||
| - Changed Sparkle feed host from `taos.app` to project domain `taos.my` for better security | ||
| - Updated mac/appcast/appcast.xml | ||
| - Updated mac/build/sparkle_sign.sh | ||
| - Updated mac/launcher/Sources/taOSLauncher/Resources/Info.plist.in | ||
| - Added fetch_sparkle.sh script to fetch and verify Sparkle 2.6.0 framework | ||
| - Modified assemble_bundle.sh to fail when Sparkle.framework is missing in release builds | ||
| - Modified assemble_bundle.sh to fail when ed_public.pem is missing in release builds | ||
| - Added mac/build/checksums/sparkle-2.6.0.sha256 | ||
| - Updated mac/build/build.sh to fetch Sparkle.framework prior to bundling | ||
|
|
||
| S2-23: Mac updater is a no-op - security fixes never reached users | ||
| if feed domain not owned by project |
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -1,19 +1,23 @@ | ||||||
| #!/usr/bin/env bash | ||||||
| # Build taOS.app/Contents/ from staging dirs. | ||||||
| # | ||||||
| # Args: --version <X.Y.Z> --staging <DIR> --launcher-binary <PATH> --output <DIR> | ||||||
| # Args: --version <X.Y.Z> --staging <DIR> --launcher-binary <PATH> --output <DIR> --release | ||||||
| # --release: Build mode with strict requirements for Sparkle.framework and ed_public.pem | ||||||
| # (if not specified, permissive mode skips missing items with warnings) | ||||||
| set -euo pipefail | ||||||
|
|
||||||
| VERSION="" | ||||||
| STAGING="" | ||||||
| LAUNCHER_BINARY="" | ||||||
| OUTPUT="" | ||||||
| RELEASE=0 | ||||||
| while [[ $# -gt 0 ]]; do | ||||||
| case "$1" in | ||||||
| --version) VERSION="$2"; shift 2 ;; | ||||||
| --staging) STAGING="$2"; shift 2 ;; | ||||||
| --launcher-binary) LAUNCHER_BINARY="$2"; shift 2 ;; | ||||||
| --output) OUTPUT="$2"; shift 2 ;; | ||||||
| --release) RELEASE=1 ;; | ||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🎯 Functional Correctness | 🔴 Critical | ⚡ Quick win 🔎 Supported by static analysis🏁 Script executed: #!/bin/bash
set -e
printf '%s\n' '--- mac/build/assemble_bundle.sh ---'
cat -n mac/build/assemble_bundle.sh
printf '%s\n' '--- mac/build/build.sh ---'
cat -n mac/build/build.sh
printf '%s\n' '--- relevant references ---'
rg -n --glob '*.sh' -- '--release|assemble_bundle|RELEASE=' macRepository: jaylfc/taOS Length of output: 11898 🤖 get_repo_knowledge executed:
Length of output: 3802 🏁 Script executed: #!/bin/bash
set -e
cat -n mac/build/assemble_bundle.sh
printf '\n--- caller ---\n'
cat -n mac/build/build.sh
printf '\n--- references ---\n'
rg -n --glob '*.sh' -- '--release|assemble_bundle|RELEASE=' macRepository: jaylfc/taOS Length of output: 11842 Consume the When the parser matches Proposed fix- --release) RELEASE=1 ;;
+ --release) RELEASE=1; shift ;;📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||
| *) echo "assemble_bundle.sh: unknown arg $1" >&2; exit 2 ;; | ||||||
| esac | ||||||
| done | ||||||
|
|
@@ -36,6 +40,11 @@ else | |||||
| echo "[assemble_bundle] no ed_public.pem — Sparkle will be disabled in this build" | ||||||
| SU_PUBLIC_ED_KEY="" | ||||||
| fi | ||||||
| # Exit 1 in release mode when ed_public.pem is missing | ||||||
| if [[ -z "$SU_PUBLIC_ED_KEY" ]] && [[ $RELEASE -eq 1 ]]; then | ||||||
| echo "[assemble_bundle] ed_public.pem missing in release build — exiting" >&2 | ||||||
| exit 1 | ||||||
| fi | ||||||
| sed -e "s|\${VERSION}|$VERSION|g" \ | ||||||
| -e "s|\${SU_PUBLIC_ED_KEY}|$SU_PUBLIC_ED_KEY|g" \ | ||||||
| "$REPO_ROOT/mac/launcher/Sources/taOSLauncher/Resources/Info.plist.in" \ | ||||||
|
|
@@ -98,7 +107,15 @@ if [[ -d "$STAGING/libexec/container" ]]; then | |||||
| fi | ||||||
|
|
||||||
| # Sparkle.framework — fetched/extracted by build.sh prior | ||||||
| if [[ -d "$STAGING/Sparkle.framework" ]]; then | ||||||
| if [[ ! -d "$STAGING/Sparkle.framework" ]]; then | ||||||
| # Exit 1 in release mode when Sparkle.framework is missing | ||||||
| if [[ $RELEASE -eq 1 ]]; then | ||||||
| echo "[assemble_bundle] Sparkle.framework missing in release build — exiting" >&2 | ||||||
| exit 1 | ||||||
| else | ||||||
| echo "[assemble_bundle] Sparkle.framework missing — skipping" >&2 | ||||||
| fi | ||||||
| else | ||||||
| cp -R "$STAGING/Sparkle.framework" "$CONTENTS/Frameworks/Sparkle.framework" | ||||||
| fi | ||||||
|
|
||||||
|
|
||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -7,6 +7,7 @@ | |
| # --python-version <PYVER> | ||
| # --container-cli-version <CLIVER> | ||
| # --output <DIR> | ||
| # TAOS_RELEASE=1 (or use version pattern [0-9]*.[0-9]*.[0-9]*) to trigger release mode | ||
| set -euo pipefail | ||
|
|
||
| VERSION="" | ||
|
|
@@ -40,38 +41,61 @@ mkdir -p "$STAGING" | |
| echo "[build] (1/9) launcher" | ||
| cd "$REPO_ROOT/mac/launcher" | ||
| swift build -c release --arch arm64 | ||
| LAUNCHER_BINARY="$REPO_ROOT/mac/launcher/.build/arm64-apple-macosx/release/taOSLauncher" | ||
| cd "$REPO_ROOT" | ||
|
|
||
| LAUNCHER_BINARY="$REPO_ROOT/mac/launcher/.build/arm64-apple-macosx/release/taOSLauncher" | ||
|
|
||
| echo "[build] (2/9) python" | ||
| "$SCRIPT_DIR/build_python.sh" --version "$PYTHON_VER" --output "$STAGING" | ||
|
|
||
| echo "[build] (3/9) frontend" | ||
| "$SCRIPT_DIR/build_frontend.sh" --output "$STAGING" | ||
|
|
||
| echo "[build] (4/9) container CLI" | ||
| echo "[build] (4/9) Sparkle.framework" | ||
| "$SCRIPT_DIR/fetch_sparkle.sh" --output "$STAGING" | ||
|
|
||
| echo "[build] (5/9) container CLI" | ||
| "$SCRIPT_DIR/fetch_container_cli.sh" --version "$CLI_VER" --output "$STAGING" | ||
|
|
||
| echo "[build] (5/9) assemble bundle" | ||
| "$SCRIPT_DIR/assemble_bundle.sh" \ | ||
| --version "$VERSION" \ | ||
| --staging "$STAGING" \ | ||
| --launcher-binary "$LAUNCHER_BINARY" \ | ||
| --output "$REPO_ROOT/$OUTPUT" | ||
| # Check if this is a release build | ||
| TAOS_RELEASE="${TAOS_RELEASE:-0}" | ||
| if [[ "$TAOS_RELEASE" = "1" || "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then | ||
| echo "[build] release mode" | ||
| RELEASE_MODE=1 | ||
| else | ||
| echo "[build] development mode" | ||
| RELEASE_MODE=0 | ||
| fi | ||
|
|
||
| echo "[build] (6/9) assemble bundle" | ||
| if [[ $RELEASE_MODE -eq 1 ]]; then | ||
| "$SCRIPT_DIR/assemble_bundle.sh" \ | ||
| --version "$VERSION" \ | ||
| --staging "$STAGING" \ | ||
| --launcher-binary "$LAUNCHER_BINARY" \ | ||
| --output "$REPO_ROOT/$OUTPUT" \ | ||
| --release | ||
| else | ||
| "$SCRIPT_DIR/assemble_bundle.sh" \ | ||
| --version "$VERSION" \ | ||
| --staging "$STAGING" \ | ||
| --launcher-binary "$LAUNCHER_BINARY" \ | ||
| --output "$REPO_ROOT/$OUTPUT" | ||
| fi | ||
|
|
||
| APP="$REPO_ROOT/$OUTPUT/taOS.app" | ||
|
|
||
| echo "[build] (6/9) sign" | ||
| echo "[build] (7/10) sign" | ||
| "$SCRIPT_DIR/sign.sh" --app "$APP" | ||
|
|
||
| echo "[build] (7/9) package DMG" | ||
| echo "[build] (8/10) package DMG" | ||
| "$SCRIPT_DIR/package_dmg.sh" --app "$APP" --version "$VERSION" --output "$REPO_ROOT/$OUTPUT" | ||
| DMG="$REPO_ROOT/$OUTPUT/taOS-$VERSION.dmg" | ||
|
|
||
| echo "[build] (8/9) notarize" | ||
| echo "[build] (9/10) notarize" | ||
| "$SCRIPT_DIR/notarize.sh" --dmg "$DMG" | ||
|
|
||
| echo "[build] (9/9) sparkle-sign" | ||
| echo "[build] (10/10) sparkle-sign" | ||
|
Comment on lines
+60
to
+98
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🩺 Stability & Availability | 🟠 Major | ⚡ Quick win Make release verification effective before signing. 🤖 Prompt for AI Agents |
||
| SPARKLE_KEY="${SPARKLE_ED_PRIVATE_KEY:-$HOME/.taos/sparkle_ed_private.pem}" | ||
| if [[ -f "$SPARKLE_KEY" ]]; then | ||
| "$SCRIPT_DIR/sparkle_sign.sh" --dmg "$DMG" --version "$VERSION" --output "$REPO_ROOT/$OUTPUT" | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| a5088d48a37ba415081335502e009dece75acae9d130705fee6c6988b90d0877 |
| Original file line number | Diff line number | Diff line change | ||||||
|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,74 @@ | ||||||||
| #!/usr/bin/env bash | ||||||||
| # Fetch and verify Sparkle 2.6.0 release tarball for macOS updaters. | ||||||||
| # | ||||||||
| # Args: --output <STAGING_DIR> | ||||||||
| # Output: $STAGING_DIR/Sparkle.framework (directory structure) | ||||||||
|
|
||||||||
| set -euo pipefail | ||||||||
|
|
||||||||
| OUTPUT="" | ||||||||
| while [[ $# -gt 0 ]]; do | ||||||||
| case "$1" in | ||||||||
| --output) OUTPUT="$2"; shift 2 ;; | ||||||||
| *) echo "fetch_sparkle.sh: unknown arg $1" >&2; exit 2 ;; | ||||||||
| esac | ||||||||
| done | ||||||||
|
|
||||||||
| [[ -n "$OUTPUT" ]] || { echo "--output required" >&2; exit 2; } | ||||||||
|
|
||||||||
| REPO_ROOT="$(cd "$(dirname "$0")/../.." && pwd)" | ||||||||
|
|
||||||||
| # Sparkle 2.6.0 (as per mac/launcher/Package.swift comments) | ||||||||
| TAG="2.6.0" | ||||||||
| CHECKSUM_FILE="$REPO_ROOT/mac/build/checksums/sparkle-${TAG}.sha256" | ||||||||
| [[ -f "$CHECKSUM_FILE" ]] || { | ||||||||
| echo "[fetch_sparkle] missing checksum file for ${TAG}: $CHECKSUM_FILE" >&2 | ||||||||
| exit 2 | ||||||||
| } | ||||||||
|
|
||||||||
| # Swift Package Manager expects a zip file, not tarball | ||||||||
| # The release page contains both "Sparkle-for-Swift-Package-Manager.zip" | ||||||||
| # and "sparkle-${TAG}.tar.gz". We need the zip. | ||||||||
| URL="https://github.com/sparkle-project/Sparkle/releases/download/${TAG}/Sparkle-for-Swift-Package-Manager.zip" | ||||||||
|
|
||||||||
| mkdir -p "$OUTPUT" | ||||||||
| ZIP="$OUTPUT/sparkle-${TAG}.zip" | ||||||||
|
|
||||||||
| echo "[fetch_sparkle] downloading $URL" | ||||||||
| curl -L --fail -o "$ZIP" "$URL" | ||||||||
|
|
||||||||
| EXPECTED_SHA="$(cat "$CHECKSUM_FILE")" | ||||||||
| if command -v shasum >/dev/null 2>&1; then | ||||||||
| ACTUAL_SHA="$(shasum -a 256 "$ZIP" | awk '{print $1}')" | ||||||||
| else | ||||||||
| ACTUAL_SHA="$(sha256sum "$ZIP" | awk '{print $1}')" | ||||||||
| fi | ||||||||
| if [[ "$EXPECTED_SHA" != "$ACTUAL_SHA" ]]; then | ||||||||
| echo "[fetch_sparkle] SHA mismatch: expected $EXPECTED_SHA got $ACTUAL_SHA" >&2 | ||||||||
| exit 1 | ||||||||
| fi | ||||||||
|
|
||||||||
| echo "[fetch_sparkle] extracting" | ||||||||
| TEMP_DIR="$(mktemp -d)" | ||||||||
| trap 'rm -rf "$TEMP_DIR"' EXIT | ||||||||
| unzip -o "$ZIP" -d "$TEMP_DIR" | ||||||||
| rm "$ZIP" | ||||||||
|
|
||||||||
| # Sparkle.xcframework/macos-arm64_x86_64/Sparkle.framework exists per the release notes | ||||||||
| SPARKLE_FRAMEWORK_PATH="$TEMP_DIR/Sparkle.xcframework/macos-arm64_x86_64/Sparkle.framework" | ||||||||
| if [[ -d "$SPARKLE_FRAMEWORK_PATH" ]]; then | ||||||||
| echo "[fetch_sparkle] found Sparkle.framework at $SPARKLE_FRAMEWORK_PATH" | ||||||||
| cp -R "$SPARKLE_FRAMEWORK_PATH" "$OUTPUT/Sparkle.framework" | ||||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. SUGGESTION:
Suggested change
Reply with |
||||||||
| else | ||||||||
| echo "[fetch_sparkle] ERROR: Sparkle.framework not found at expected path $SPARKLE_FRAMEWORK_PATH" >&2 | ||||||||
| exit 1 | ||||||||
| fi | ||||||||
|
|
||||||||
| # Stage bin/sign_update and bin/generate_appcast for sparkle_sign.sh | ||||||||
| if [[ -d "$TEMP_DIR/bin" ]]; then | ||||||||
| echo "[fetch_sparkle] staging sparkle-bin/ directory" | ||||||||
| mkdir -p "$OUTPUT/sparkle-bin" | ||||||||
| cp -R "$TEMP_DIR/bin/"* "$OUTPUT/sparkle-bin/" 2>/dev/null || true | ||||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. WARNING: Reply with |
||||||||
| fi | ||||||||
|
|
||||||||
| echo "[fetch_sparkle] done: $OUTPUT/Sparkle.framework" | ||||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -25,7 +25,8 @@ PRIVATE_KEY="${SPARKLE_ED_PRIVATE_KEY:-$HOME/.taos/sparkle_ed_private.pem}" | |
| # Locate Sparkle's sign_update tool — bundled with Sparkle release tarball | ||
| SIGN_UPDATE="$(command -v sign_update || true)" | ||
| if [[ -z "$SIGN_UPDATE" ]]; then | ||
| for c in "$REPO_ROOT/mac/build/staging/Sparkle.framework/Versions/B/Resources/sign_update" \ | ||
| for c in "$REPO_ROOT/mac/build/staging/sparkle-bin/sign_update" \ | ||
| "$REPO_ROOT/mac/build/staging/Sparkle.framework/Versions/B/Resources/sign_update" \ | ||
|
Comment on lines
+28
to
+29
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win 🔎 Supported by static analysis🏁 Script executed: #!/bin/bash
set -euo pipefail
rg -n -C 4 'STAGING=|fetch_sparkle\.sh|sparkle_sign\.sh|mac/build/staging' \
mac/build/build.sh mac/build/sparkle_sign.shRepository: jaylfc/taOS Length of output: 3081 🤖 get_repo_knowledge executed:
Length of output: 3802 🏁 Script executed: #!/bin/bash
set -euo pipefail
printf '%s\n' '--- mac/build/build.sh ---'
sed -n '1,115p' mac/build/build.sh
printf '%s\n' '--- mac/build/fetch_sparkle.sh ---'
sed -n '1,180p' mac/build/fetch_sparkle.sh
printf '%s\n' '--- mac/build/sparkle_sign.sh ---'
sed -n '1,90p' mac/build/sparkle_sign.shRepository: jaylfc/taOS Length of output: 8350 Use the configured staging directory for Sparkle signing.
🤖 Prompt for AI Agents |
||
| "/Applications/Sparkle.framework/Versions/B/Resources/sign_update"; do | ||
| [[ -x "$c" ]] && { SIGN_UPDATE="$c"; break; } | ||
| done | ||
|
|
@@ -54,7 +55,7 @@ cat > "$SNIPPET" <<XML | |
| <sparkle:minimumSystemVersion>26.0</sparkle:minimumSystemVersion> | ||
| <description><![CDATA[${NOTES}]]></description> | ||
| <enclosure | ||
| url="https://taos.app/releases/$(basename "$DMG")" | ||
| url="https://taos.my/releases/$(basename "$DMG")" | ||
| ${SIGNATURE_LINE} | ||
| type="application/octet-stream"/> | ||
| </item> | ||
|
|
||
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -0,0 +1,88 @@ | ||||||
| #!/usr/bin/env bash | ||||||
| # Verify Sparkle.framework is properly linked in the built app. | ||||||
| # | ||||||
| # Args: --app <PATH> --version <X.Y.Z> --output <DIR> [--release] | ||||||
| # --release: Exit 1 if verification fails; otherwise warning only | ||||||
| # | ||||||
| # Usage: verify_sparkle.sh --app taOS.app --version 1.2.3 --output dist | ||||||
|
|
||||||
| set -euo pipefail | ||||||
|
|
||||||
| APP="" | ||||||
| VERSION="" | ||||||
| OUTPUT="" | ||||||
| RELEASE=0 | ||||||
|
|
||||||
| while [[ $# -gt 0 ]]; do | ||||||
| case "$1" in | ||||||
| --app) APP="$2"; shift 2 ;; | ||||||
| --version) VERSION="$2"; shift 2 ;; | ||||||
| --output) OUTPUT="$2"; shift 2 ;; | ||||||
| --release) RELEASE=1 ;; | ||||||
| *) echo "verify_sparkle.sh: unknown arg $1" >&2; exit 2 ;; | ||||||
| esac | ||||||
| done | ||||||
|
|
||||||
| [[ -n "$APP" && -n "$VERSION" && -n "$OUTPUT" ]] || { | ||||||
| echo "verify_sparkle.sh: --app, --version, and --output are required" >&2 | ||||||
| exit 2 | ||||||
| } | ||||||
|
|
||||||
| REPO_ROOT="$(cd "$(dirname "$0")/../.." && pwd)" | ||||||
| CONTENTS_FRAMEWORKS="$APP/Contents/Frameworks" | ||||||
|
|
||||||
| # Check 1: Sparkle.framework exists | ||||||
| if [[ ! -d "$CONTENTS_FRAMEWORKS/Sparkle.framework" ]]; then | ||||||
| if [[ $RELEASE -eq 1 ]]; then | ||||||
| echo "[verify_sparkle] ERROR: $CONTENTS_FRAMEWORKS/Sparkle.framework missing" >&2 | ||||||
| exit 1 | ||||||
| else | ||||||
| echo "[verify_sparkle] WARNING: $CONTENTS_FRAMEWORKS/Sparkle.framework missing" >&2 | ||||||
| fi | ||||||
| fi | ||||||
|
|
||||||
| # Check 2: Sparkle binary exists within the framework | ||||||
| SPARKLE_BINARY="$CONTENTS_FRAMEWORKS/Sparkle.framework/Versions/B/Sparkle" | ||||||
| if [[ ! -f "$SPARKLE_BINARY" ]]; then | ||||||
| if [[ $RELEASE -eq 1 ]]; then | ||||||
| echo "[verify_sparkle] ERROR: Sparkle binary not found at $SPARKLE_BINARY" >&2 | ||||||
| exit 1 | ||||||
| else | ||||||
| echo "[verify_sparkle] WARNING: Sparkle binary not found at $SPARKLE_BINARY" >&2 | ||||||
| fi | ||||||
| fi | ||||||
|
|
||||||
| # Check 3: otool shows correct linking (check if otool is available) | ||||||
| if command -v otool >/dev/null 2>&1; then | ||||||
| LAUNCHER_BINARY="$APP/Contents/MacOS/taOSLauncher" | ||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. WARNING: Verification script looks for
Suggested change
Reply with |
||||||
| if [[ -f "$LAUNCHER_BINARY" ]]; then | ||||||
| # Check for @rpath/Sparkle.framework/Versions/B/Sparkle in otool -L | ||||||
| if ! otool -L "$LAUNCHER_BINARY" | grep -q "@rpath/Sparkle.framework/Versions/B/Sparkle"; then | ||||||
| if [[ $RELEASE -eq 1 ]]; then | ||||||
| echo "[verify_sparkle] ERROR: $LAUNCHER_BINARY not linked to Sparkle.framework" >&2 | ||||||
| exit 1 | ||||||
| else | ||||||
| echo "[verify_sparkle] WARNING: $LAUNCHER_BINARY not linked to Sparkle.framework" >&2 | ||||||
| fi | ||||||
| fi | ||||||
|
|
||||||
| # Check for LC_RPATH @executable_path/../Frameworks in otool -l | ||||||
| if ! otool -l "$LAUNCHER_BINARY" 2>/dev/null | grep -q "LC_RPATH.*@executable_path/../Frameworks"; then | ||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win 🔎 Supported by static analysis🤖 get_repo_knowledge executed:
Length of output: 3802 🏁 Script executed: #!/bin/bash
set -eu
printf '%s\n' '--- target file ---'
cat -n mac/build/verify_sparkle.sh | sed -n '50,90p'
printf '%s\n' '--- related references ---'
rg -n -C 3 'LAUNCHER_BINARY|LC_RPATH|otool|Frameworks' mac/buildRepository: jaylfc/taOS Length of output: 9403 Parse
🤖 Prompt for AI Agents |
||||||
| if [[ $RELEASE -eq 1 ]]; then | ||||||
| echo "[verify_sparkle] ERROR: $LAUNCHER_BINARY missing LC_RPATH @executable_path/../Frameworks" >&2 | ||||||
| exit 1 | ||||||
| else | ||||||
| echo "[verify_sparkle] WARNING: $LAUNCHER_BINARY missing LC_RPATH @executable_path/../Frameworks" >&2 | ||||||
| fi | ||||||
| fi | ||||||
| fi | ||||||
| else | ||||||
| if [[ $RELEASE -eq 1 ]]; then | ||||||
| echo "[verify_sparkle] ERROR: otool not found — cannot verify binary linking" >&2 | ||||||
| exit 1 | ||||||
| else | ||||||
| echo "[verify_sparkle] WARNING: otool not found — skipping binary linking checks" >&2 | ||||||
| fi | ||||||
| fi | ||||||
|
|
||||||
| echo "[verify_sparkle] verification passed" | ||||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Replace the dangling condition with a complete changelog bullet in both fragments.
scripts/collate_changelog.pycopies every non-heading line intoCHANGELOG.mdwithout validating its format. These lines will therefore appear as bare, incomplete release-note content. Replace or remove them atchangelog.d/tsk-27gdvd-sparkle-integration-fixes.md:28andchangelog.d/tsk-whwh5n-sparkle-domain-migration.md:14.🤖 Prompt for AI Agents