Merge origin/main (browser copy, TOC, mobile IME, i18n, Windows startup) + add version_suffix input to release-cut

rc kind can now append an extra prerelease identifier (rc.N.perf):
sorts above its base rc.N but below rc.N+1, so perf-branch RCs are
identifiable by clients without outranking the main RC series.

Co-authored-by: Orca <help@stably.ai>
This commit is contained in:
Jinwoo-H
2026-07-03 20:05:49 -04:00
co-authored by Orca
239 changed files with 11988 additions and 2414 deletions
+1 -18
View File
@@ -9,22 +9,8 @@ on:
- 'mobile-android-v*'
workflow_dispatch:
inputs:
bump_patch_version:
description: 'Bump the mobile marketing version patch number before release'
required: false
default: false
type: boolean
release_version:
description: 'Optional exact mobile marketing version override, e.g. 0.0.15'
required: false
type: string
bump_android_version_code:
description: 'Increment the Android versionCode before release'
required: false
default: false
type: boolean
android_version_code:
description: 'Optional exact Android versionCode override'
description: 'Optional exact mobile marketing version assertion, e.g. 0.0.22'
required: false
type: string
publish_github_release:
@@ -69,9 +55,6 @@ jobs:
id: release
env:
MOBILE_ANDROID_RELEASE_VERSION: ${{ github.event.inputs.release_version }}
MOBILE_ANDROID_BUMP_PATCH_VERSION: ${{ github.event.inputs.bump_patch_version }}
MOBILE_ANDROID_VERSION_CODE: ${{ github.event.inputs.android_version_code }}
MOBILE_ANDROID_BUMP_VERSION_CODE: ${{ github.event.inputs.bump_android_version_code }}
MOBILE_ANDROID_PUBLISH_RELEASE: ${{ github.event.inputs.publish_github_release }}
run: node scripts/prepare-android-release.mjs
+22 -10
View File
@@ -1,6 +1,6 @@
name: Cut Release
# Why: single entry point for manually and scheduled cutting releases.
# Why: single entry point for manually cutting releases.
# Replaces the old local `pnpm release:*` scripts and the standalone scheduled
# RC workflow so releases are always reproducible from CI and can never be
# accidentally tagged against an uncommitted or non-main working tree.
@@ -37,16 +37,15 @@ on:
type: string
default: main
dry_run:
description: Validate a scheduled-RC run without creating a tag
description: Validate an RC release cut without creating a tag
required: false
default: false
type: boolean
schedule:
# Why: GitHub scheduled workflows are not guaranteed to start exactly on
# time and can be delayed or dropped around high-load periods. We retry
# across the full target hour and dedupe per PT slot. Cron is UTC, so run
# during both PST and PDT equivalents and let the PT-hour gate decide.
- cron: '*/5 10,11,22,23 * * *'
version_suffix:
description: Extra prerelease identifier appended to an rc version (e.g. "perf" -> 1.2.3-rc.4.perf). rc kind only.
required: false
type: string
default: ''
permissions:
contents: write
@@ -182,8 +181,8 @@ jobs:
- name: Publish complete release-cut RC drafts from prior runs
id: publish_drafts
# Why: this must run even when the current slot already cut a tag; a
# later cron retry may be the first chance to unstick a complete RC draft.
# Why: a manual RC dispatch should unstick any complete RC draft before
# deciding whether to cut another tag.
if: steps.window.outputs.allowed == 'true' && !(github.event_name == 'workflow_dispatch' && inputs.dry_run)
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -198,6 +197,7 @@ jobs:
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
KIND: ${{ github.event_name == 'schedule' && 'rc' || inputs.kind }}
VERSION_SUFFIX: ${{ github.event_name == 'schedule' && '' || inputs.version_suffix }}
run: |
set -euo pipefail
@@ -372,6 +372,18 @@ jobs:
fi
new="${base}-rc.$((highest_rc + 1))"
fi
if [[ -n "${VERSION_SUFFIX:-}" ]]; then
# Why a dot-appended identifier (rc.N.perf): it sorts just
# above its own base rc.N but BELOW rc.N+1, so suffixed side-
# branch builds never outrank the main RC series and cannot
# hijack the update channel; clients find them by matching the
# identifier ("perf") in the prerelease components.
if [[ ! "$VERSION_SUFFIX" =~ ^[0-9A-Za-z]+$ ]]; then
echo "::error::version_suffix must be alphanumeric, got: $VERSION_SUFFIX" >&2
exit 1
fi
new="${new}.${VERSION_SUFFIX}"
fi
;;
patch|minor|major)
new="$(bump "$latest_stable" "$KIND")"