Commit Graph
20 Commits
Author SHA1 Message Date
Hermes a1ffcaffd2 Auto-update branch when merge conflicts (branch behind main); bump to 2.6
Build iOS App / Build .ipa and publish source (push) Successful in 22s
When a PR's head branch is behind main (or conflicts), Gitea's merge returns
409. Previously the app just showed an error. Now: on a 409 the app calls
POST /pulls/{index}/update (merges base into head), then retries the merge
once. Add APIError.mergeConflict for a clear message and map 409 in the
client. Bump to 2.6.
2026-08-13 13:02:45 +00:00
Hermes 0d2c4a3cb6 Match Apple Music: full-width tab bar + large title; bump to 2.5
Build iOS App / Build .ipa and publish source (push) Successful in 36s
- Bottom tab bar: replace the floating capsule (which had space below it and
  was too thin) with a full-width frosted-glass bar at the standard iOS tab
  bar height, sitting flush above the home indicator — matching Apple Music.
- Landing page title: use .large navigation title so 'Pull Requests' aligns at
  the top like Apple Music's 'Inicio', instead of the inline title.
- Bump to 2.5.
2026-08-13 07:13:48 +00:00
Hermes 7399187fb4 Slim bottom tab bar to Apple height; remove redundant reload button; bump to 2.4
Build iOS App / Build .ipa and publish source (push) Successful in 25s
- Bottom tab bar: reduce vertical padding (8→4), icon size (20→18), and
  bottom inset (8→4) so it matches Apple's standard compact tab bar height
  (Apple Music etc.) instead of a tall bar.
- Remove the manual reload button from the loaded PR toolbar — the detail
  view auto-loads on appearance, so it was redundant clutter. The reload
  button is kept only on the error/retry state. Bump to 2.4.
2026-08-13 06:59:09 +00:00
Hermes 880cff9e68 Remove in-list spinner + add monitored-repos setting; bump to 2.3
Build iOS App / Build .ipa and publish source (push) Successful in 22s
- Remove the in-list loading wheel overlay; the landing page just shows the
  cached list or the 'No open PRs' screen.
- Add a 'Monitored repos' setting (Settings > Inbox) that limits the inbox to
  specific repos, cutting the number of API calls dramatically. Empty =
  monitor all accessible repos. Bump to 2.3.
2026-08-13 06:43:46 +00:00
Hermes 75f5f3bc64 Load inbox only on first appearance; refresh via pull-to-refresh; bump to 2.2
Build iOS App / Build .ipa and publish source (push) Successful in 22s
.task fires on every appearance, including popping back from a PR detail, so
the landing page re-ran the full network refresh on each back navigation.
Guard the initial load with didInitialLoad so the list loads once and then
only refreshes when the user pulls down. Bump to 2.2.
2026-08-13 06:35:20 +00:00
Hermes 2b929e65e9 Speed up landing screen: drop per-PR enrichment + add inbox cache; bump to 2.1
Build iOS App / Build .ipa and publish source (push) Successful in 23s
The inbox was slow because it enriched every PR with CI runs + reviews (2
extra API calls per PR, sequential). Drop that from the list — CI/review
status now shows only in the PR detail screen. Add a disk cache so the landing
screen renders instantly from the last load, then refreshes in the background
and keeps the cached list on network failure. Bump to 2.1.
2026-08-13 06:27:32 +00:00
Hermes 53b3f69d0f Merge icon, delete-branch-after-merge setting, floating tab bar; bump to 2.0
Build iOS App / Build .ipa and publish source (push) Successful in 22s
- Merge button: use the proper SF Symbol 'arrow.triangle.merge' instead of
  the download icon 'arrow.down.circle'.
- Add a Settings toggle 'Delete branch after merge'. When on, the merge call
  passes delete_branch_after_merge=true and the head branch is deleted after
  a successful merge (best-effort).
- PR detail bottom tab bar: floating capsule style (regularMaterial + shadow)
  like the latest iOS tab bars, instead of a full-width bar.
- Bump to 2.0.
2026-08-12 22:37:42 +00:00
Hermes fce0385708 Restructure PR detail: remove Commits tab, bottom icon tab bar, toolbar actions, markdown overview; bump to 1.9
Build iOS App / Build .ipa and publish source (push) Successful in 21s
- Remove the Commits tab (not useful).
- Move the section switcher to a bottom tab bar with icons (Overview /
  Conversation / Files / Checks) instead of a top segmented control.
- Move Review (menu) and Merge into the navigation toolbar, removing the
  bottom action bar.
- Add an Overview tab that renders the PR body as markdown via SwiftUI's
  built-in AttributedString(markdown:) (no third-party dependency).
- Bump to 1.9.
2026-08-12 22:28:18 +00:00
Hermes de9729b898 Hide Logs button for unrun jobs; remove inbox filter bar; bump to 1.8
Build iOS App / Build .ipa and publish source (push) Successful in 23s
- Checks: only show the Logs button once a job has actually run (terminal
  conclusion). Queued/running jobs are grey with no logs, so the button was
  useless there.
- Inbox: remove the segmented filter bar (All/Assigned/By me/Review) — not
  useful yet. Bump to 1.8.
2026-08-12 22:06:09 +00:00
Hermes 9f3fb95cbe Fix commits tab + add CI job logs; bump to 1.7
Build iOS App / Build .ipa and publish source (push) Successful in 21s
Commits tab was empty: Gitea PR commits have no 'id' field (only sha), but
PRCommit.id was a non-optional let decoded from 'id', so decoding [PRCommit]
always threw and the tab silently showed nothing. Make PRCommit.id a computed
sha-based identity so the array decodes and renders.

CI: add a Logs button per job that fetches the job's raw log text
(/actions/jobs/{id}/logs) into a viewable, shareable screen. Bump to 1.7.
2026-08-12 21:55:24 +00:00
Hermes a3b8eefdb2 Fix diff text not rendering: LazyVStack in dual-axis ScrollView collapses row width; bump to 1.6
Build iOS App / Build .ipa and publish source (push) Successful in 21s
The diff data was fine, but the render collapsed: a LazyVStack inside a
dual-axis ScrollView([.horizontal, .vertical]) gets an unbounded proposal and
rows collapse to near-zero width — the green addition background rendered but
the monospaced text was laid out at ~0 width and disappeared. Use a plain
VStack inside nested vertical→horizontal ScrollViews (the stable pattern for
diff text) and give each line fixedSize(horizontal:) so the text isn't
clipped. Bump to 1.6.
2026-08-12 21:46:14 +00:00
Hermes db694543c1 Fix diff screen hang/crash: stable DiffLine id + request timeout; bump to 1.5
Build iOS App / Build .ipa and publish source (push) Successful in 22s
DiffLine.id was a computed property returning a fresh UUID() on every access.
SwiftUI's ForEach requires stable identities; regenerating each read churned
the main thread, hanging the diff screen and eventually crashing. Store the
UUID once per line. Also add a 30s URLRequest timeout so a hung request can't
leave the 'Loading diff...' spinner forever. Bump to 1.5.
2026-08-12 21:36:34 +00:00
Hermes 8be8f3ac50 Fix diff viewer: fetch PR .diff instead of relying on per-file patch; bump to 1.4
Build iOS App / Build .ipa and publish source (push) Successful in 21s
This Gitea instance never returns a 'patch' field from /pulls/{n}/files (the
field is absent for all files, regardless of size), so the diff viewer always
fell back to 'Diff too large to preview'. Now DiffView fetches the PR's .diff
endpoint (plain-text unified diff), extracts the hunks for the selected file,
and renders them colour-coded. Bump to 1.4.
2026-08-12 21:18:01 +00:00
Hermes 9e71b6a8b9 Make PR detail load resilient to per-endpoint 403; bump to 1.3
Build iOS App / Build .ipa and publish source (push) Successful in 23s
Opening a PR could fail the whole screen when any one detail sub-request
returns 401/403 (e.g. a token scope the repo's Actions endpoint needs).
Refactor load() so the PR fetch is the only fatal call; comments/reviews/
files/commits/runs each fail independently, are logged, and the rest still
render. Also log actions/runs failures for visibility. Bump to 1.3.
2026-08-12 21:00:22 +00:00
Hermes 58eb145717 Fix compile: await LogStore calls from non-MainActor GiteaClient
Build iOS App / Build .ipa and publish source (push) Successful in 44s
LogStore is @MainActor; GiteaClient.request is not main-actor-isolated, so the
5 LogStore.shared.log calls in the request handler need 'await' under Swift 5
strict concurrency. Without them the build fails at compile time.
2026-08-12 19:51:32 +00:00
Hermes b51b2ee5c8 Add in-app diagnostic logging + resilient inbox; bump to 1.2
Build iOS App / Build .ipa and publish source (push) Failing after 5m44s
- LogStore: bounded in-memory + persisted log of API calls and errors,
  viewable and shareable from Settings → View logs.
- GiteaClient: log every request/response status (esp. 404s).
- Inbox: a single failing repo no longer wipes the whole inbox — per-repo
  errors are caught, logged, and the rest still load.
- Bump to 1.2 so SideStore offers the update.
2026-08-12 18:46:08 +00:00
Hermes 43f4d76356 Bump to 1.1 and read version from built app in CI
Build iOS App / Build .ipa and publish source (push) Successful in 23s
SideStore only shows an update when the version changes; the previous build
stayed at 1.0 so no update appeared. Bump MARKETING_VERSION to 1.1 and have
the workflow read CFBundleShortVersionString from the built app's Info.plist
instead of a hardcoded VERSION, so the metadata can never drift from the
pbxproj again.
2026-08-12 18:01:35 +00:00
Hermes b2311d8007 Fix PR inbox: decode Gitea ISO8601 dates with timezone offset
Build iOS App / Build .ipa and publish source (push) Successful in 28s
Gitea returns dates like 2026-08-12T11:09:13+02:00. The default JSONDecoder
date strategy expects a Unix timestamp number, so decoding any Date? field
threw and the whole [PullRequest] array failed — the inbox showed no PRs.
Add a shared decoder with a custom ISO8601 strategy (with and without
fractional seconds) and use it for all get/post decoding.
2026-08-12 17:51:46 +00:00
Hermes ddb6983a99 Rename model Label to PRLabel to avoid shadowing SwiftUI Label
Build iOS App / Build .ipa and publish source (push) Successful in 23s
2026-08-12 17:19:51 +00:00
Hermes 1025634978 GiteaPR: native iOS app to manage Gitea pull requests
Build iOS App / Build .ipa and publish source (push) Failing after 35s
Multi-repo PR inbox, review (approve/request changes/comment), merge with
gating toggle, read-only diff viewer, and Gitea Actions check status with
one-tap re-run. Ships unsigned via the iMac runner to the SideStore source.
2026-08-12 17:07:58 +00:00