Skip to content

Commit e4483e9

Browse files
DIYgodTonyRLdependabot[bot]
authored
release(mobile): Release v0.5.5 (#5030)
* fix(release): extend OTA sync trigger timeout * docs(release): clarify mobile OTA runtime selection * fix(timeline): scroll to top before refresh * fix(timeline): guard mark read during scroll reset * fix(desktop): hide empty recent reader spacer * fix(mobile): preserve social timeline scroll reset * fix(desktop): reset social timeline on view change * fix: dedupe code blocks with nested line divs fix: dedupe code blocks with nested line divs * build(deps): bump actions/checkout from 6 to 7 (#5025) Bumps [actions/checkout](https://github.com/actions/checkout) from 6 to 7. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](actions/checkout@v6...v7) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * build(deps): bump expo/expo-github-action from 8 to 9 (#5019) Bumps [expo/expo-github-action](https://github.com/expo/expo-github-action) from 8 to 9. - [Release notes](https://github.com/expo/expo-github-action/releases) - [Changelog](https://github.com/expo/expo-github-action/blob/main/CHANGELOG.md) - [Commits](expo/expo-github-action@v8...v9) --- updated-dependencies: - dependency-name: expo/expo-github-action dependency-version: '9' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * fix(desktop): stabilize streaming tts scheduling * fix(desktop): keep reading mode content when translated Refs #5023. * fix(desktop): avoid idle Spline AI indicator render * docs(mobile): prepare release metadata * docs(desktop): prepare release inputs * release(mobile): release v0.5.5 * docs(mobile): restore desktop release inputs --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: Tony <TonyRL@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2 parents 0476396 + aa91b25 commit e4483e9

54 files changed

Lines changed: 1315 additions & 103 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.agents/skills/mobile-release/SKILL.md

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,17 @@ The CI release flow is file-driven:
8383

8484
### Determine the target runtime
8585

86-
If recommending `ota`, derive the target store binary version from recent `origin/mobile-main` releases and propose it as the `runtimeVersion`.
86+
If recommending `ota`, derive the target runtime from the store binaries that users currently have installed, not from the new release version, latest mobile tag, or latest OTA release.
87+
88+
1. Check the public store versions first:
89+
```bash
90+
curl --fail --silent --show-error https://ota.folo.is/versions | jq '.store.mobile'
91+
```
92+
2. Cross-check the store runtime model in `apps/mobile/app.config.base.ts`. Today the mobile runtime defaults to the binary package version unless `OTA_RUNTIME_VERSION` is explicitly set during an OTA export.
93+
3. Use the current App Store / Google Play binary version as the OTA `runtimeVersion`. Example: if the stores still show `0.5.0`, an OTA release for `0.5.4` must use `"runtimeVersion": "0.5.0"` so existing store users can receive it.
94+
4. If iOS and Android store versions differ, or if the target installed runtime is not clear, stop and ask the user. The release plan supports only one OTA `runtimeVersion`; do not guess or silently pick the newest version.
95+
96+
Never choose the previous OTA release version just because it is the latest working manifest. A runtime mismatch publishes valid assets that only newer binaries can see, leaving current store users stuck on the older OTA.
8797

8898
If you cannot determine the runtime confidently, stop and ask the user to confirm it.
8999

@@ -190,6 +200,8 @@ Examples:
190200
- trigger OTA publish only
191201
- no store builds
192202

203+
Do not require live OTA manifest verification during release PR preparation. The user manually merges the PR later, so the OTA publish happens after this workflow finishes and there may be a time gap before the Worker syncs. If the user later asks to check the rollout, verify the workflow run, GitHub Release assets, and `/manifest` at that time.
204+
193205
## References
194206

195207
- Bump config: `apps/mobile/bump.config.ts`

.github/scripts/trigger-ota-sync.mjs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,21 @@ import { pathToFileURL } from "node:url"
1111
* }} TriggerOtaSyncOptions
1212
*/
1313

14-
const DEFAULT_TIMEOUT_MS = 10_000
14+
const DEFAULT_TIMEOUT_MS = 120_000
15+
16+
export function readOtaSyncTimeoutMs(value) {
17+
if (!value) {
18+
return DEFAULT_TIMEOUT_MS
19+
}
20+
21+
const timeoutMs = Number(value)
22+
23+
if (!Number.isInteger(timeoutMs) || timeoutMs <= 0) {
24+
throw new TypeError("OTA sync timeout must be a positive integer")
25+
}
26+
27+
return timeoutMs
28+
}
1529

1630
/**
1731
* @param {TriggerOtaSyncOptions} options
@@ -81,6 +95,7 @@ async function main() {
8195
baseUrl: process.env.OTA_BASE_URL ?? "",
8296
token: process.env.OTA_SYNC_TOKEN ?? "",
8397
headerName: process.env.OTA_SYNC_TOKEN_HEADER ?? "",
98+
timeoutMs: readOtaSyncTimeoutMs(process.env.OTA_SYNC_TIMEOUT_MS),
8499
})
85100

86101
console.info("Triggered OTA sync successfully")

.github/scripts/trigger-ota-sync.test.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,14 @@ afterEach(async () => {
2525
})
2626

2727
describe("triggerOtaSync", () => {
28+
it("reads a configurable OTA sync timeout", async () => {
29+
const { readOtaSyncTimeoutMs } = await import("./trigger-ota-sync.mjs")
30+
31+
expect(readOtaSyncTimeoutMs()).toBe(120_000)
32+
expect(readOtaSyncTimeoutMs("30000")).toBe(30_000)
33+
expect(() => readOtaSyncTimeoutMs("0")).toThrow("OTA sync timeout must be a positive integer")
34+
})
35+
2836
it("POSTs to /internal/sync with the configured auth header", async () => {
2937
const requests: Array<{ method?: string; url?: string; headerValue?: string }> = []
3038
const headerName = "x-ota-sync-token"

.github/workflows/build-android.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ jobs:
5151
df -h /
5252
5353
- name: 📦 Checkout code
54-
uses: actions/checkout@v6
54+
uses: actions/checkout@v7
5555

5656
- name: 📦 Setup pnpm
5757
uses: pnpm/action-setup@v6
@@ -72,7 +72,7 @@ jobs:
7272
uses: android-actions/setup-android@v4
7373

7474
- name: 📱 Setup EAS
75-
uses: expo/expo-github-action@v8
75+
uses: expo/expo-github-action@v9
7676
with:
7777
eas-version: latest
7878
token: ${{ secrets.EXPO_TOKEN }}

.github/workflows/build-desktop.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,13 +67,13 @@ jobs:
6767

6868
steps:
6969
- name: Check out Git repository Fully
70-
uses: actions/checkout@v6
70+
uses: actions/checkout@v7
7171
if: env.PROD == 'true'
7272
with:
7373
fetch-depth: 0
7474
lfs: true
7575
- name: Check out Git repository
76-
uses: actions/checkout@v6
76+
uses: actions/checkout@v7
7777
if: env.PROD == 'false'
7878
with:
7979
fetch-depth: 1
@@ -398,7 +398,7 @@ jobs:
398398

399399
steps:
400400
- name: Check out Git repository Fully
401-
uses: actions/checkout@v6
401+
uses: actions/checkout@v7
402402
with:
403403
fetch-depth: 0
404404
lfs: true

.github/workflows/build-ios-development.yml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,10 @@ jobs:
4040

4141
steps:
4242
- name: 📦 Checkout code
43-
uses: actions/checkout@v6
43+
uses: actions/checkout@v7
4444

4545
- name: 📱 Setup EAS
46-
uses: expo/expo-github-action@v8
46+
uses: expo/expo-github-action@v9
4747
with:
4848
eas-version: latest
4949
token: ${{ secrets.EXPO_TOKEN }}
@@ -85,7 +85,7 @@ jobs:
8585

8686
steps:
8787
- name: 📦 Checkout code
88-
uses: actions/checkout@v6
88+
uses: actions/checkout@v7
8989

9090
- name: 🔧 Setup Xcode
9191
uses: ./.github/actions/setup-xcode
@@ -100,7 +100,7 @@ jobs:
100100
cache: "pnpm"
101101

102102
- name: 📱 Setup EAS
103-
uses: expo/expo-github-action@v8
103+
uses: expo/expo-github-action@v9
104104
with:
105105
eas-version: latest
106106
token: ${{ secrets.EXPO_TOKEN }}
@@ -136,7 +136,7 @@ jobs:
136136

137137
steps:
138138
- name: 📦 Checkout code
139-
uses: actions/checkout@v6
139+
uses: actions/checkout@v7
140140

141141
- name: 🔧 Setup Xcode
142142
uses: ./.github/actions/setup-xcode
@@ -151,7 +151,7 @@ jobs:
151151
cache: "pnpm"
152152

153153
- name: 📱 Setup EAS
154-
uses: expo/expo-github-action@v8
154+
uses: expo/expo-github-action@v9
155155
with:
156156
eas-version: latest
157157
token: ${{ secrets.EXPO_TOKEN }}

.github/workflows/build-ios.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,10 @@ jobs:
5656

5757
steps:
5858
- name: 📦 Checkout code
59-
uses: actions/checkout@v6
59+
uses: actions/checkout@v7
6060

6161
- name: 📱 Setup EAS
62-
uses: expo/expo-github-action@v8
62+
uses: expo/expo-github-action@v9
6363
with:
6464
eas-version: latest
6565
token: ${{ secrets.EXPO_TOKEN }}
@@ -106,7 +106,7 @@ jobs:
106106

107107
steps:
108108
- name: 📦 Checkout code
109-
uses: actions/checkout@v6
109+
uses: actions/checkout@v7
110110

111111
- name: 🔧 Setup Xcode
112112
uses: ./.github/actions/setup-xcode
@@ -121,7 +121,7 @@ jobs:
121121
cache: "pnpm"
122122

123123
- name: 📱 Setup EAS
124-
uses: expo/expo-github-action@v8
124+
uses: expo/expo-github-action@v9
125125
with:
126126
eas-version: latest
127127
token: ${{ secrets.EXPO_TOKEN }}

.github/workflows/build-web.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ jobs:
1717
node-version: [lts/*]
1818
steps:
1919
- name: Checkout code
20-
uses: actions/checkout@v6
20+
uses: actions/checkout@v7
2121
with:
2222
lfs: true
2323
- name: Cache turbo build setup

.github/workflows/deploy-cloudflare-desktop.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ jobs:
1717
VITE_FIREBASE_CONFIG: ${{ vars.VITE_FIREBASE_CONFIG }}
1818
steps:
1919
- name: Checkout code
20-
uses: actions/checkout@v6
20+
uses: actions/checkout@v7
2121
with:
2222
lfs: true
2323

.github/workflows/deploy-cloudflare-landing.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ jobs:
2121
runs-on: ubuntu-latest
2222
steps:
2323
- name: Checkout code
24-
uses: actions/checkout@v6
24+
uses: actions/checkout@v7
2525
with:
2626
lfs: true
2727

0 commit comments

Comments
 (0)