diff --git a/.github/workflows/mobile-ios.yml b/.github/workflows/mobile-ios.yml index 6138a331..4b0f21b2 100644 --- a/.github/workflows/mobile-ios.yml +++ b/.github/workflows/mobile-ios.yml @@ -81,6 +81,14 @@ jobs: if [ "$version" = "$tag" ]; then version="0.1.0"; fi echo "tag=$tag" >> "$GITHUB_OUTPUT" echo "version=$version" >> "$GITHUB_OUTPUT" + # An internal RC may already use the marketing version as its + # CFBundleVersion. Give each CI upload (including retries) a new + # build number, independently of the public app version. + if (( GITHUB_RUN_NUMBER < 1 || GITHUB_RUN_NUMBER > 9999 || GITHUB_RUN_ATTEMPT < 1 || GITHUB_RUN_ATTEMPT > 99 )); then + echo "Run identity exceeds Apple's numeric build-number fields" >&2 + exit 1 + fi + echo "build_number=${GITHUB_RUN_NUMBER}.${GITHUB_RUN_ATTEMPT}" >> "$GITHUB_OUTPUT" - name: Check signing secrets env: @@ -129,7 +137,7 @@ jobs: IOS_MOBILE_PROVISION: ${{ secrets.IOS_MOBILE_PROVISION }} run: | cargo tauri ios build --export-method app-store-connect \ - --config "{\"version\": \"${{ steps.version.outputs.version }}\", \"bundle\": {\"iOS\": {\"developmentTeam\": \"$APPLE_DEVELOPMENT_TEAM\"}}}" + --config "{\"version\": \"${{ steps.version.outputs.version }}\", \"bundle\": {\"iOS\": {\"developmentTeam\": \"$APPLE_DEVELOPMENT_TEAM\", \"bundleVersion\": \"${{ steps.version.outputs.build_number }}\"}}}" # When signing fails, say why in terms a person can act on: what the # profile the CLI installed is for, and what the project ended up diff --git a/Cargo.lock b/Cargo.lock index 19a7c8c4..db4314e1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1362,7 +1362,7 @@ dependencies = [ [[package]] name = "offdesk-cli" -version = "0.20.2" +version = "0.20.3" dependencies = [ "clap", "dirs", @@ -1383,7 +1383,7 @@ dependencies = [ [[package]] name = "offdesk-hub" -version = "0.20.2" +version = "0.20.3" dependencies = [ "axum", "base64", @@ -1430,7 +1430,7 @@ dependencies = [ [[package]] name = "offdesk-machine" -version = "0.20.2" +version = "0.20.3" dependencies = [ "base64", "bytes", @@ -1457,7 +1457,7 @@ dependencies = [ [[package]] name = "offdesk-protocol" -version = "0.20.2" +version = "0.20.3" dependencies = [ "bytes", "dirs", @@ -1469,7 +1469,7 @@ dependencies = [ [[package]] name = "offdesk-secure" -version = "0.20.2" +version = "0.20.3" dependencies = [ "base64", "futures", diff --git a/Cargo.toml b/Cargo.toml index 8041d8f8..e1eb40b9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,7 +6,7 @@ resolver = "2" # What `offdesk --version` and `offdesk-node --version` print. Bump this # before tagging a v* release; the tag and the binaries should agree. [workspace.package] -version = "0.20.2" +version = "0.20.3" [workspace.dependencies] serde = { version = "1", features = ["derive"] } diff --git a/docs/releases/2026-09-07.md b/docs/releases/2026-09-07.md new file mode 100644 index 00000000..512c55f2 --- /dev/null +++ b/docs/releases/2026-09-07.md @@ -0,0 +1,77 @@ +# September 2026 release preparation + +Status: prepared for release builds; no release tags created by this change. +Runtime baseline: `c818164` (main after #444). Version and workflow changes +in this preparation do not change terminal behavior. + +| Component | Previous public release | Prepared release | Tag | +| --- | --- | --- | --- | +| Hub, CLI and node | 0.20.2 | 0.20.3 | `v0.20.3` | +| Desktop | 0.6.2 | 0.6.3 | `desktop-v0.6.3` | +| Android | 0.6.4 | 0.6.5 | `app-v0.6.5` | +| iOS / TestFlight | 0.6.4 | 0.6.5 | `ios-v0.6.5` | + +## Release notes + +- Keep the phone keyboard closed when using Enter, Tab, arrows and other + terminal toolbar keys after dismissing the keyboard through the input method. +- Improve iOS Chinese punctuation and voice input, and prevent focused input + fields from zooming or shifting the page unexpectedly. +- Simplify terminal input by removing Local editor. Direct input, text paste, + photo/file attachments and terminal controls remain available. +- Improve phone setup with explicit QR rendering/error states, clearer + encrypted pairing instructions and a direct public TestFlight download link. +- Add the managed-connection beta client and guided desktop Cloud sign-in. + Prefer a verified Cloud address when generating encrypted pairing codes. + Cloud service implementation remains outside this public repository. + +Hub and desktop also include the Android update-check and startup changes +merged after their previous release; the Android 0.6.4 release already contained +those Android startup fixes. Do not present them as newly fixed in Android 0.6.5. + +中文摘要:修复工具栏误唤起键盘、iOS 中文标点和语音输入及输入框布局问题; +移除 Local editor,保留直接输入、粘贴和附件;改进二维码配对和 Cloud 连接引导。 + +## Validation and remaining observations + +- #444 passed all five CI checks, including container-based E2E and Android + updater/startup checks. #441–#443 also passed before merging. +- Android RC `0.6.5-rc.2` was built on the Mac Mini from `c3013f2` (#444). + Its isolated package passed native emulator cold-start, WebView input, + foreground and corrupted pairing-marker recovery checks. The user confirmed + physical-device testing normal, including toolbar keyboard behavior. +- iOS TestFlight 0.6.5 from `ef1d876` (#442) passed user testing of voice input, + Chinese punctuation, focused-input layout and keyboard behavior. This is + an earlier commit than the final Local editor removal; do not describe it as + physical validation of the final iOS binary. +- Earlier Mac Mini desktop/simulator validation used `ecfaa1d`. Distribution + signing, notarization and the final installer still need their release checks. +- The isolated Android RC uses a separate application ID and debug signature. + It does not establish successful migration from the production application. +- One report of ordinary terminal text opening an unreachable browser URL + became unreproducible. No root cause or fix is claimed. An earlier transient + white screen after first encrypted pairing also remains unconfirmed. + +## Publishing sequence + +1. Merge this preparation after CI passes and pin the resulting main commit. + Keep #144 and #406 out of this release. +2. Build the four tags above from that same commit. The desktop version is + read from `tauri.conf.json`; the mobile versions are supplied by their tags. + The Hub workspace and both Rust lockfiles must agree on 0.20.3. +3. iOS uses a separate numeric `CFBundleVersion` derived from workflow run + number and attempt. The existing internal 0.6.5 build must not be uploaded + again under its original build number. The public app version stays 0.6.5. +4. Keep downloads staged until build checks and the signed Android startup + smoke pass. Verify the final APK can update production 0.6.4 while retaining + pairing. Verify final iOS startup/pairing after the Local editor removal. +5. Check desktop signatures/notarization, installer version, bundled Hub + version and `latest.json` before publishing its draft. Publishing promotes + the desktop updater channel. +6. Verify Android arm64 download, iPhone TestFlight availability and desktop + download redirects. GitHub release creation alone does not prove that a + build is available to external TestFlight testers. + +The Hub and Android tag workflows can publish releases automatically; do not +push those tags merely to prepare release notes. Existing installed services +and private Cloud deployments are not changed by this preparation. diff --git a/packages/desktop/src-tauri/Cargo.lock b/packages/desktop/src-tauri/Cargo.lock index 3934cee2..95edb1e1 100644 --- a/packages/desktop/src-tauri/Cargo.lock +++ b/packages/desktop/src-tauri/Cargo.lock @@ -2985,7 +2985,7 @@ dependencies = [ [[package]] name = "offdesk-secure" -version = "0.20.2" +version = "0.20.3" dependencies = [ "base64 0.22.1", "futures", diff --git a/packages/desktop/src-tauri/tauri.conf.json b/packages/desktop/src-tauri/tauri.conf.json index 0bdf274f..4659a65a 100644 --- a/packages/desktop/src-tauri/tauri.conf.json +++ b/packages/desktop/src-tauri/tauri.conf.json @@ -1,6 +1,6 @@ { "productName": "offdesk", - "version": "0.6.2", + "version": "0.6.3", "identifier": "dev.offdesk.desktop", "build": { "frontendDist": "../../app/dist",