Skip to content

Commit 804c5df

Browse files
benkaiserclaude
andcommitted
Add desktop release workflow, mobile deployment automation, and v1.2.0 version bump
- Add GitHub Actions workflow for desktop builds (macOS, Windows, Linux) with manual trigger - Add Fastlane configs for iOS App Store and Android Google Play deployment - Bump version to 1.2.0+10 - Update README with desktop download links to GitHub Releases - Update AGENTS.md with desktop and mobile publishing docs Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent e68abe2 commit 804c5df

20 files changed

Lines changed: 337 additions & 29 deletions
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
---
2+
# joey_mcp_client_flutter-43s4
3+
title: Bump version to 1.0.5+9 and cut production iOS/Android builds
4+
status: completed
5+
type: task
6+
priority: normal
7+
created_at: 2026-03-15T22:54:09Z
8+
updated_at: 2026-03-15T22:59:32Z
9+
---
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
---
2+
# joey_mcp_client_flutter-8y3s
3+
title: Desktop builds via GitHub Actions, GitHub Release, Website & README updates
4+
status: completed
5+
type: task
6+
priority: normal
7+
created_at: 2026-03-16T00:26:34Z
8+
updated_at: 2026-03-16T00:28:41Z
9+
---
10+
11+
Create release workflow, update website and README for desktop builds

.github/workflows/release.yml

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
name: Desktop Release
2+
3+
on:
4+
workflow_dispatch:
5+
inputs:
6+
version:
7+
description: 'Version number (e.g. 1.2.0)'
8+
required: true
9+
type: string
10+
11+
jobs:
12+
build-macos:
13+
runs-on: macos-latest
14+
steps:
15+
- uses: actions/checkout@v4
16+
- uses: subosito/flutter-action@v2
17+
with:
18+
channel: stable
19+
- run: flutter pub get
20+
- run: flutter build macos --release
21+
- name: Zip macOS app
22+
run: |
23+
cd build/macos/Build/Products/Release
24+
zip -r Joey-macOS-v${{ inputs.version }}.zip "Joey.app"
25+
- uses: actions/upload-artifact@v4
26+
with:
27+
name: macos-build
28+
path: build/macos/Build/Products/Release/Joey-macOS-v${{ inputs.version }}.zip
29+
30+
build-windows:
31+
runs-on: windows-latest
32+
steps:
33+
- uses: actions/checkout@v4
34+
- uses: subosito/flutter-action@v2
35+
with:
36+
channel: stable
37+
- run: flutter pub get
38+
- run: flutter build windows --release
39+
- name: Zip Windows build
40+
shell: pwsh
41+
run: |
42+
Compress-Archive -Path "build\windows\x64\runner\Release\*" -DestinationPath "Joey-Windows-v${{ inputs.version }}.zip"
43+
- uses: actions/upload-artifact@v4
44+
with:
45+
name: windows-build
46+
path: Joey-Windows-v${{ inputs.version }}.zip
47+
48+
build-linux:
49+
runs-on: ubuntu-latest
50+
steps:
51+
- uses: actions/checkout@v4
52+
- uses: subosito/flutter-action@v2
53+
with:
54+
channel: stable
55+
- name: Install Linux build dependencies
56+
run: |
57+
sudo apt-get update
58+
sudo apt-get install -y cmake ninja-build pkg-config libgtk-3-dev liblzma-dev libstdc++-12-dev
59+
- run: flutter pub get
60+
- run: flutter build linux --release
61+
- name: Create tar.gz archive
62+
run: |
63+
cd build/linux/x64/release/bundle
64+
tar -czf Joey-Linux-v${{ inputs.version }}.tar.gz *
65+
- uses: actions/upload-artifact@v4
66+
with:
67+
name: linux-build
68+
path: build/linux/x64/release/bundle/Joey-Linux-v${{ inputs.version }}.tar.gz
69+
70+
release:
71+
needs: [build-macos, build-windows, build-linux]
72+
runs-on: ubuntu-latest
73+
permissions:
74+
contents: write
75+
steps:
76+
- uses: actions/download-artifact@v4
77+
with:
78+
path: artifacts
79+
- name: Create GitHub Release
80+
uses: softprops/action-gh-release@v2
81+
with:
82+
tag_name: v${{ inputs.version }}
83+
name: Joey v${{ inputs.version }}
84+
body: |
85+
## Joey v${{ inputs.version }} — Desktop Builds
86+
87+
Desktop builds for Joey MCP Client.
88+
89+
### Downloads
90+
- **macOS**: `Joey-macOS-v${{ inputs.version }}.zip` — Unzip and move Joey.app to Applications
91+
- **Windows**: `Joey-Windows-v${{ inputs.version }}.zip` — Unzip and run Joey.exe
92+
- **Linux**: `Joey-Linux-v${{ inputs.version }}.tar.gz` — Extract and run the joey binary
93+
94+
> **Note:** Windows and Linux builds are experimental. macOS, iOS, and Android are the primary supported platforms.
95+
96+
### Mobile
97+
- iOS: [App Store](https://apps.apple.com/us/app/joey-mcp-client/id6759186174)
98+
- Android: [Google Play](https://play.google.com/store/apps/details?id=com.kaiserapps.joey)
99+
files: |
100+
artifacts/macos-build/*
101+
artifacts/windows-build/*
102+
artifacts/linux-build/*

AGENTS.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,3 +62,33 @@ Rendering is delegated to `MessageList` (widget) and `MessageInput` (widget).
6262
- MCP session IDs are persisted per conversation+server and used for session resumption
6363
- OpenRouter API key is stored in SharedPreferences (PKCE OAuth flow)
6464
- **DB migrations affect import/export**: The JSON export format uses `toMap()`/`fromMap()` from the models, which mirror the DB schema. When adding new columns via a migration: (1) keep new model fields nullable so `fromMap()` tolerates older exports missing the key, (2) if a new field is required, bump the export envelope version in `ConversationImportExportService` and handle the old version gracefully, (3) update the schema version number in this file
65+
66+
## Publishing
67+
68+
### Version Bumping
69+
- Version is in `pubspec.yaml` as `version: X.Y.Z+buildNumber` (e.g. `1.2.0+10`)
70+
- Bump both the version name and build number for each release
71+
- iOS version must be higher than the currently live App Store version (currently `1.1`), so use `1.2.0+` or higher
72+
- Build numbers must be strictly increasing across both platforms
73+
74+
### Android (Google Play)
75+
- **Build**: `flutter build appbundle --release`
76+
- **Deploy**: `cd android && fastlane deploy`
77+
- Fastlane config is in `android/fastlane/` with the Appfile and Fastfile
78+
- Google Play service account key is stored at `~/.config/supply/play-store-key.json` (not in repo)
79+
- Changelogs go in `android/fastlane/metadata/android/en-US/changelogs/{buildNumber}.txt`
80+
81+
### iOS (App Store)
82+
- **Build**: `flutter build ipa --release`
83+
- **Deploy**: `cd ios && fastlane deploy`
84+
- **TestFlight only**: `cd ios && fastlane beta`
85+
- Fastlane config is in `ios/fastlane/` with the Appfile and Fastfile
86+
- App Store Connect API key is stored at `~/.config/appstore/AuthKey_L2XRGXQYP6.p8` (not in repo)
87+
- The `deploy` lane uploads to App Store Connect, runs precheck, submits for review, and auto-releases on approval
88+
- The `beta` lane uploads to TestFlight and skips waiting for build processing
89+
- Release notes go in `ios/fastlane/metadata/en-US/release_notes.txt` (required for review submission)
90+
91+
### Desktop (GitHub Release)
92+
- **Trigger**: `gh workflow run release.yml -f version=X.Y.Z` kicks off macOS, Windows, and Linux builds in parallel
93+
- Workflow creates a GitHub release `vX.Y.Z` with all three platform artifacts attached
94+
- Windows and Linux builds are experimental

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@
1111
</a>
1212
</p>
1313

14+
<p align="center">
15+
Desktop builds (macOS, Windows, Linux) are available in <a href="https://github.com/benkaiser/joey-mcp-client/releases">GitHub Releases</a>. Windows and Linux builds are experimental.
16+
</p>
17+
1418
A cross-platform chat application built with Flutter that connects to AI models via [OpenRouter](https://openrouter.ai/) and remote [MCP](https://modelcontextprotocol.io/) (Model Context Protocol) servers over Streamable HTTP.
1519

1620
## Key Features

android/fastlane/Appfile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
json_key_file("~/.config/supply/play-store-key.json")
2+
package_name("com.kaiserapps.joey")

android/fastlane/Fastfile

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
default_platform(:android)
2+
3+
platform :android do
4+
desc "Deploy to Google Play production track"
5+
lane :deploy do
6+
upload_to_play_store(
7+
aab: "../build/app/outputs/bundle/release/app-release.aab",
8+
track: "production",
9+
skip_upload_metadata: true,
10+
skip_upload_changelogs: false,
11+
skip_upload_images: true,
12+
skip_upload_screenshots: true
13+
)
14+
end
15+
end

android/fastlane/README.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
fastlane documentation
2+
----
3+
4+
# Installation
5+
6+
Make sure you have the latest version of the Xcode command line tools installed:
7+
8+
```sh
9+
xcode-select --install
10+
```
11+
12+
For _fastlane_ installation instructions, see [Installing _fastlane_](https://docs.fastlane.tools/#installing-fastlane)
13+
14+
# Available Actions
15+
16+
## Android
17+
18+
### android deploy
19+
20+
```sh
21+
[bundle exec] fastlane android deploy
22+
```
23+
24+
Deploy to Google Play production track
25+
26+
----
27+
28+
This README.md is auto-generated and will be re-generated every time [_fastlane_](https://fastlane.tools) is run.
29+
30+
More information about _fastlane_ can be found on [fastlane.tools](https://fastlane.tools).
31+
32+
The documentation of _fastlane_ can be found on [docs.fastlane.tools](https://docs.fastlane.tools).
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
• Background chat processing — Agentic loops now continue running when you navigate away from a conversation
2+
• Smoother streaming — Inline streaming cursor and stable scroll position
3+
• Improved MCP reliability — More robust session resumption and callback handling
4+
• Bug fixes — Fixed edit message dialog overflow, edit & resend crashes, and model-change status overflow

android/fastlane/report.xml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<testsuites>
3+
<testsuite name="fastlane.lanes">
4+
5+
6+
7+
8+
<testcase classname="fastlane.lanes" name="0: default_platform" time="0.000405">
9+
10+
</testcase>
11+
12+
13+
<testcase classname="fastlane.lanes" name="1: upload_to_play_store" time="44.81091">
14+
15+
</testcase>
16+
17+
</testsuite>
18+
</testsuites>

0 commit comments

Comments
 (0)