Release macOS
Release macOS
Section intitulée « Release macOS »Les releases publiques macOS sont produites par le workflow GitHub Actions de release sur tag ou via
workflow_dispatch.
Build signed et notarized
Section intitulée « Build signed et notarized »Le workflow exécute npm run package:signed:mac:all pour produire des DMG Intel et Apple Silicon.
Avant le packaging, scripts/prepare-runtime-config.mjs écrit resources/config/default.json depuis
les variables et secrets GitHub: URL API, remote logging et paramètres Better Stack si activés.
La CI importe le certificat Developer ID Application, active le Hardened Runtime via
electron-builder, applique les entitlements explicites build/entitlements.mac.plist et
build/entitlements.mac.inherit.plist, signe l’app et le DMG, puis déclenche la notarization Apple
via notarytool. Après notarization, le ticket est stapled au DMG.
Le DMG est signé par défaut dans package.json. Les scripts unsigned gardent une surcharge
explicite -c.dmg.sign=false, afin que les builds de PR restent non signés et reproductibles sans
certificat.
Verifications release
Section intitulée « Verifications release »Le workflow vérifie:
- identité de signature disponible dans le keychain temporaire;
- signature du DMG;
- acceptation Gatekeeper du DMG avec
spctl --type open; - signature
codesignde l’app montée; - Team ID attendu sur l’app signée;
- ticket
stapler validate; - acceptation Gatekeeper avec
spctl --assess; - présence des artefacts
.dmg,.blockmapetlatest*.yml.
Les mêmes contrôles peuvent être relancés localement sur macOS avec:
npm run verify:macLa commande accepte aussi un dossier ou une liste de DMG:
npm run verify:mac -- --release-dir releasenpm run verify:mac -- --expected-team-id 4AY78C99H2npm run verify:mac -- --skip-dmg-gatekeepernpm run verify:mac -- release/Obscura.Flow-0.26.2-arm64.dmgLe workflow CI utilise --skip-dmg-gatekeeper parce que spctl --type open peut retourner
Insufficient Context sur les runners GitHub Actions pour un DMG pourtant signé et valide. La CI
continue de vérifier la signature du DMG, la signature de l’app montée, le Team ID attendu, le ticket
stapled et l’acceptation Gatekeeper de l’app avec spctl --type execute.
Une release signée doit aussi contenir Resources/config/default.json avec une apiBaseUrl non vide.
Quand OBSCURA_FLOW_REMOTE_LOGGING_ENABLED=true, le même fichier doit activer remoteLogging et
contenir l’endpoint d’ingestion. Le token Better Stack n’est pas attendu dans les fichiers .obf; il
est injecté uniquement dans la configuration runtime packagée tant que le relais API public n’existe
pas.