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