Commit 079c94c2d1
Unsigned
Layout: unified · split
README.org added +89
| @@ -0,0 +1,89 @@ | |||
| 1 | #+title: gitbay-ios | ||
| 2 | #+author: Christian Cleberg | ||
| 3 | |||
| 4 | A native iOS client for [[https://gitbay.org][gitbay]], a CLI-first git forge. | ||
| 5 | |||
| 6 | The command line is the product. This app is a reading, reviewing and | ||
| 7 | responding surface for the times you are not at a keyboard. | ||
| 8 | |||
| 9 | # TODO: on publish, replace with the App Store badge: | ||
| 10 | # [[https://apps.apple.com/app/id<APP_ID>][https://toolbox.marketingtools.apple.com/api/v2/badges/download-on-the-app-store/black/en-us]] | ||
| 11 | |||
| 12 | * What it does | ||
| 13 | |||
| 14 | - *Dashboard* — your review queue, assigned work, open merge requests and | ||
| 15 | issues, pinned repositories, recent activity. | ||
| 16 | - *Repositories* — file tree and blob view with syntax highlighting, | ||
| 17 | history at a ref or per file, blame, branches and tags, and file editing | ||
| 18 | on a branch. | ||
| 19 | - *Merge requests and issues* — lists, detail, comments, milestones, and a | ||
| 20 | unified diff. | ||
| 21 | - *Builds* — build list, job picker, logs. | ||
| 22 | - *Releases and wiki*, read from the same instance. | ||
| 23 | - *Explore, feed and profiles* — discovery, activity, contribution graph. | ||
| 24 | - *READMEs* in Markdown and Org. Org renders natively through | ||
| 25 | [[https://gitbay.org/krz/org-swift][OrgSwiftUI]] — selectable text, Dynamic Type, VoiceOver — rather than in a | ||
| 26 | web view. | ||
| 27 | |||
| 28 | * Signing in | ||
| 29 | |||
| 30 | Auth is a bearer token, minted over SSH on a machine that already has your | ||
| 31 | key. The app never asks for a password. | ||
| 32 | |||
| 33 | #+begin_src sh | ||
| 34 | gitbay auth token create --name iphone --scope full --ttl 90d | ||
| 35 | #+end_src | ||
| 36 | |||
| 37 | =--scope read= works too, but a read-only token cannot comment or merge. | ||
| 38 | The token is stored in the iOS keychain. | ||
| 39 | |||
| 40 | Any gitbay instance works; the host is entered at sign-in. | ||
| 41 | |||
| 42 | * Building | ||
| 43 | |||
| 44 | Requires Xcode with an iOS 26.5 SDK. Swift 6 language mode, default | ||
| 45 | =MainActor= isolation. | ||
| 46 | |||
| 47 | #+begin_src sh | ||
| 48 | xcodebuild -project gitbay.xcodeproj -scheme gitbay \ | ||
| 49 | -destination 'platform=iOS Simulator,name=iPhone 17' build | ||
| 50 | #+end_src | ||
| 51 | |||
| 52 | Dependencies resolve over SSH ([[https://gitbay.org/krz/org-swift][krz/org-swift]]) and HTTPS | ||
| 53 | ([[https://github.com/raspu/Highlightr][Highlightr]]), so a key that can reach gitbay.org is needed to build. | ||
| 54 | |||
| 55 | * Tests | ||
| 56 | |||
| 57 | =gitbayTests= is hermetic and runs offline; network calls go through a | ||
| 58 | stubbed =URLProtocol=. | ||
| 59 | |||
| 60 | #+begin_src sh | ||
| 61 | xcodebuild -project gitbay.xcodeproj -scheme gitbay \ | ||
| 62 | -destination 'platform=iOS Simulator,name=iPhone 17' \ | ||
| 63 | test -only-testing:gitbayTests | ||
| 64 | #+end_src | ||
| 65 | |||
| 66 | =gitbayUITests= includes a live smoke suite that talks to a real instance. | ||
| 67 | It is opt-in, and skips without both variables. Environment reaches the | ||
| 68 | test runner only with the =TEST_RUNNER_= prefix: | ||
| 69 | |||
| 70 | #+begin_src sh | ||
| 71 | TEST_RUNNER_GITBAY_UITEST_LIVE=1 \ | ||
| 72 | TEST_RUNNER_GITBAY_UITEST_TOKEN=<token> \ | ||
| 73 | xcodebuild -project gitbay.xcodeproj -scheme gitbay \ | ||
| 74 | -destination 'platform=iOS Simulator,name=iPhone 17' test | ||
| 75 | #+end_src | ||
| 76 | |||
| 77 | The live suite depends on fixtures it does not create; each is guarded by | ||
| 78 | a skip rather than seeded, since seeding one would mean a push. | ||
| 79 | |||
| 80 | * Contributing | ||
| 81 | |||
| 82 | Merge requests, not pull requests — this is gitbay, not GitHub. =gh= does | ||
| 83 | nothing here. | ||
| 84 | |||
| 85 | #+begin_src sh | ||
| 86 | gitbay mr create --source <branch> --target main --title "..." | ||
| 87 | #+end_src | ||
| 88 | |||
| 89 | Bundle identifier =org.gitbay.gitbay=. Releases are tagged =vX.Y.Z=. | ||