[feat] support standalone iOS and Android releases

This commit is contained in:
dijunkun
2026-10-02 02:38:45 +08:00
parent 3b5cbf0735
commit 49e90adb60
9 changed files with 236 additions and 9 deletions
+24 -1
View File
@@ -93,7 +93,30 @@ including the app, source metadata, third-party source catalog, rights notice
and any generated dSYM. The version comes from the iOS target; dated repository
tags provide the build date, otherwise the date uses the Asia/Shanghai timezone.
The main workflow collects this same ZIP for GitHub Releases and the download
server. Standalone runs only upload the build artifact.
server. Standalone `Build iOS` runs only upload the build artifact.
For an independent release, use the
[`Release Mobile`](../../.github/workflows/release-mobile.yml) workflow. Commit
the intended `MARKETING_VERSION` in the iOS target, then tag that commit with
`ios-v<marketing-version>-YYYYMMDD`, for example:
```sh
git tag ios-v0.0.1-20261002
git push origin ios-v0.0.1-20261002
```
The tag starts only the iOS build and publishes its unsigned ZIP to a dedicated
GitHub Release and the existing download server. The tag version must match the
iOS target, and its date must be valid. To retry a release, run `Release Mobile`
manually and enter the existing tag in `source_tag`; it builds that tag's source
even when the workflow is dispatched from a different branch. Source metadata
records the iOS tag and exact application/MiniRTC commits.
Mobile releases keep the desktop `latest` tag, GitHub's latest release selection
and desktop `version.json` unchanged. Uploads preserve other platforms' files
on the download server and use the existing `SERVER_HOST`, `SERVER_USER` and
`SERVER_KEY` repository secrets. Regular desktop version tags still publish all
platforms through `Build and Release`.
No Apple signing secrets are needed. Sign the app yourself before installing
it on a device. Push any referenced MiniRTC commit before the parent repository
+2 -2
View File
@@ -46,9 +46,9 @@ def source_metadata(require_release=False, tag=None):
raise ValueError(f"Source tag {tag!r} does not point to the build commit")
else:
# 'latest' is a moving alias, never a corresponding-source identifier.
versions = sorted(t for t in tags if t.startswith("v"))
versions = sorted(t for t in tags if t.startswith(("v", "ios-v")))
tag = versions[0] if versions else None
if require_release and (dirty or not tag or not tag.startswith("v")):
if require_release and (dirty or not tag or not tag.startswith(("v", "ios-v"))):
raise ValueError("Release source must be a clean checkout of a version tag, with matching submodules")
mini_revision = git("rev-parse", "HEAD", root=REPO / "deps/submodules/minirtc")
lock_path = REPO / "apps/ios/licenses/sources.json"