Keep dropped-macOS updaters on their last compatible build and explain why (#38777)

* Keep dropped-macOS updaters on their last compatible build and explain why

Stamp minimumSystemVersion into every mac update manifest from the built
app's LSMinimumSystemVersion, and refuse to publish an ungated release.
When the updater withholds a newer release for this macOS, show a one-time
notice and say so in Settings and the update card.

* Trim the unsupported-Mac notice copy
This commit is contained in:
Neil
2026-11-05 18:29:16 -08:00
committed by GitHub
parent 4c49ddca3e
commit 3cb4853187
33 changed files with 678 additions and 25 deletions
+8 -2
View File
@@ -401,7 +401,9 @@ jobs:
with:
ref: ${{ github.workflow_sha }}
path: .workflow-tools
sparse-checkout: config/scripts/desktop-distribution/macos/adhoc-mac-manifests.mjs
sparse-checkout: |
config/scripts/desktop-distribution/macos/adhoc-mac-manifests.mjs
config/scripts/desktop-distribution/macos/gate-mac-update-manifests.mjs
sparse-checkout-cone-mode: false
persist-credentials: false
@@ -440,7 +442,11 @@ jobs:
env:
MAC_ARCH: ${{ matrix.arch }}
MAC_VERSION: ${{ needs.orcad-template-support.outputs.version }}
run: node .workflow-tools/config/scripts/desktop-distribution/macos/adhoc-mac-manifests.mjs stage "$MAC_ARCH" "$MAC_VERSION" dist .build/mac-manifests
run: |
set -euo pipefail
# Builder cannot write this field, so older macOS updaters would install a build that won't launch.
node .workflow-tools/config/scripts/desktop-distribution/macos/gate-mac-update-manifests.mjs dist
node .workflow-tools/config/scripts/desktop-distribution/macos/adhoc-mac-manifests.mjs stage "$MAC_ARCH" "$MAC_VERSION" dist .build/mac-manifests
- name: Mint adhoc repo token
id: app_token
+12
View File
@@ -330,6 +330,18 @@ jobs:
owner: stablyai
repositories: orca-daily
# Builder cannot write this field, so older macOS updaters would install a build that won't launch.
- name: Gate the update manifest on the minimum macOS
if: steps.freshness.outputs.should_build == 'true'
shell: bash
env:
GH_TOKEN: ${{ steps.app_token_final.outputs.token }}
TAG: ${{ steps.release.outputs.tag }}
run: |
set -euo pipefail
node config/scripts/desktop-distribution/macos/gate-mac-update-manifests.mjs dist
gh release upload "$TAG" dist/*-mac.yml --repo "$DAILY_REPO" --clobber
# Verify latest-mac.yml before exposing its release to prevent picker downloads returning 404.
- name: Verify update manifest published
if: steps.freshness.outputs.should_build == 'true'
+11
View File
@@ -298,6 +298,17 @@ jobs:
APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }}
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
# Builder cannot write this field, so older macOS updaters would install a build that won't launch.
- name: Gate the update manifest on the minimum macOS
shell: bash
env:
GH_TOKEN: ${{ steps.app_token_publish.outputs.token }}
TAG: ${{ steps.release.outputs.tag }}
run: |
set -euo pipefail
node config/scripts/desktop-distribution/macos/gate-mac-update-manifests.mjs dist
gh release upload "$TAG" dist/*-mac.yml --repo "$HOURLY_REPO" --clobber
# Verify latest-mac.yml before exposing release; missing manifests cause picker download 404s.
- name: Verify update manifest published
shell: bash
+16
View File
@@ -240,6 +240,22 @@ jobs:
APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }}
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
# Builder cannot write this field, so older macOS updaters would install a build that won't launch.
- name: Gate the update manifest on the minimum macOS
# Tags cut before the gate keep their manifest unchanged.
if: hashFiles('config/scripts/desktop-distribution/macos/gate-mac-update-manifests.mjs') != ''
shell: bash
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TAG: ${{ inputs.tag }}
PUBLISH: ${{ !inputs.qualification_only }}
run: |
set -euo pipefail
node config/scripts/desktop-distribution/macos/gate-mac-update-manifests.mjs dist
if [ "$PUBLISH" = true ]; then
gh release upload "$TAG" dist/*-mac.yml --repo "$GITHUB_REPOSITORY" --clobber
fi
- name: Verify release remains draft after artifact upload
if: ${{ !inputs.qualification_only }}
# Re-draft premature builder publication before failing; latest must not keep an incomplete Windows release.