Skip to content

Commit cc67d62

Browse files
fix(release): preserve signed OTA recovery artifacts
1 parent 0ef35fa commit cc67d62

2 files changed

Lines changed: 15 additions & 1 deletion

File tree

.github/workflows/ios-live-update.yml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,17 @@ jobs:
8888
CAPGO_MIN_NATIVE_VERSION: ${{ vars.CAPGO_MIN_NATIVE_VERSION }}
8989
run: pnpm run live-update:build
9090

91+
# Preserve the public, signed artifacts before entering the deployment
92+
# transport. If the gateway is unavailable, an operator can download this
93+
# artifact and copy it to the VM without handling the private signing key.
94+
- name: Upload signed live-update recovery artifact
95+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
96+
with:
97+
name: ios-live-update
98+
path: standalone/webapp/live-updates-dist/
99+
if-no-files-found: error
100+
retention-days: 7
101+
91102
# Upload the immutable bundle zip(s) FIRST so the manifest never points at
92103
# a file that is not yet on the host.
93104
- name: Copy bundle zips to the VM

docs/contributor/development/mobile-builds.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,10 @@ byproduct of it. Nothing new is hosted and the collaboration server is untouched
193193
- The `ios-live-update` workflow builds `dist/`, packages it into a versioned,
194194
**signed** `apollon-<version>.zip` plus a `manifest.json`
195195
(`standalone/webapp/scripts/build-live-update.mjs`), and copies both to
196-
`/opt/apollon/app/live-updates` on the prod VM.
196+
`/opt/apollon/app/live-updates` on the prod VM. It uploads the same public,
197+
signed files as a seven-day recovery artifact before using the deployment
198+
transport, so a gateway outage can be recovered over direct SSH without
199+
exposing or moving the private signing key.
197200
- The **webapp container's nginx** serves that directory at
198201
`https://apollon.aet.cit.tum.de/live-updates/` (manifest `no-cache`, zips
199202
immutable, CORS). Traefik already routes the host to it — no proxy change.

0 commit comments

Comments
 (0)