Added metadata fields to the update available view:
- Size: Shows download size using
contentLength(formatted with ByteCountFormatter) - Released: Shows release date from
dateproperty - Requires: Shows minimum OS version from
minimumSystemVersion
All fields only display if set in the appcast.
Widened labels to 60pt and removed minimum system version.
Done. Moved the label width to a constant labelWidth.
Done. Added .textSelection(.enabled) to make the metadata values selectable and copyable.
Done. Added Git hash detection and GitHub comparison link generation:
- Extracts Git hashes (7-40 hex characters) from the version string
- Compares current commit (from
GhosttyCommitin bundle) to new version's hash - Shows a "View Changes" link that opens a GitHub comparison view
- Only appears when both hashes are available
Done. Now it links to the commit directly if there's no current commit hash to compare from.
Done. Created a separate section for the release notes link with:
- Top divider to separate it from the main content
- Document icon on the left
- "View Release Notes" text in medium weight
- External link icon on the right
- Accent color styling
- Proper padding for a button-like appearance
Made the entire bottom area clickable with a distinct background color using .contentShape(Rectangle()) and .background(Color(nsColor: .controlBackgroundColor)).
Changed the link text color from .accentColor to .primary for better readability.
Updated to use the ReleaseNotes enum with both .url and .label properties for the link destination and text.
Done. Moved the logic into an init? function on ReleaseNotes that takes the appcast item and current commit as parameters. The extractGitHash helper is now a private static function on the enum.
Done. Moved ReleaseNotes enum to UpdateViewModel.swift as part of UpdateState, made it a computed property on UpdateState.UpdateAvailable, and updated the popover view to access it via update.releaseNotes.
Done. Added logic to detect semantic versions (x.y.z format) and generate URLs to https://ghostty.org/docs/install/release-notes/x-y-z. This check happens first before falling back to git hash detection.
Done. Renamed the releaseNotes case to tagged.
Done. Changed ReleaseNotes.init to take displayVersionString: String instead of appcastItem: SUAppcastItem.
Let me try building with zig build instead:
Let me try using xcodebuild to run tests without so much output:
There's a compilation issue with the Xcode build. Let me try testing just the Swift code directly:
The tests parse correctly. Let me try to run the app's existing build and then test:
Let me create a simple test runner that we can execute without xcodebuild: