# Release : sur tag vX.Y.Z, compile les 6 cibles et publie la release GitHub # avec les binaires (mêmes noms d'assets que les releases manuelles historiques) # ET le fichier SHA256SUMS que `ajean update` (v0.4.6+) vérifie avant d'installer. # ⚠️ NE PAS uploader de binaires à la main en plus : ce workflow écrase les # assets du même nom (softprops remplace), et des sommes qui ne correspondent # plus aux binaires font échouer `ajean update` (vécu sur v0.4.7). # # Deux jobs de build : macOS a besoin d'un vrai runner Apple (l'icône de barre de # menus passe par Cocoa → CGO, pas cross-compilable depuis Linux) ; Linux et # Windows restent CGO_ENABLED=0 sur ubuntu. name: release on: push: tags: ["v*"] permissions: contents: write jobs: macos: runs-on: macos-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: go-version-file: go.mod - name: build macOS (CGO, arm64 + amd64) run: | mkdir -p dist # arm64 = natif ; amd64 = cross avec le SDK universel (-arch x86_64). CGO_ENABLED=1 GOOS=darwin GOARCH=arm64 \ go build -trimpath -ldflags="-s -w" -o dist/ajean-darwin-arm64 ./cmd/ajean CGO_ENABLED=1 GOOS=darwin GOARCH=amd64 \ CGO_CFLAGS="-arch x86_64" CGO_LDFLAGS="-arch x86_64" \ go build -trimpath -ldflags="-s -w" -o dist/ajean-darwin-amd64 ./cmd/ajean file dist/ajean-darwin-* - name: bundles AJEAN.app run: | # Un binaire nu double-cliqué ouvrirait le Terminal. On publie donc # aussi un vrai bundle AJEAN.app (zippé pour garder le bit exécutable) : # au clic, le Finder lance Contents/MacOS/ajean, qui détecte le bundle # et bascule en mode « application » (UI web + navigateur + icône dans # la barre de menus), comme le double-clic sur ajean.exe sous Windows. # LSUIElement : app de barre de menus, aucune icône dans le Dock. # L'icône part du PNG 1024 généré avec le reste de la marque # (cmd/ajean/icon.png, voir tools/gen-icon) : plus de conversion depuis # le .ico, dont l'échec silencieux donnait une app sans icône. mkdir -p /tmp/ajean.iconset for s in 16 32 128 256 512; do sips -z $s $s 'cmd/ajean/icon.png' --out "/tmp/ajean.iconset/icon_${s}x${s}.png" >/dev/null done iconutil -c icns /tmp/ajean.iconset -o /tmp/ajean.icns v="${GITHUB_REF_NAME#v}" for arch in amd64 arm64; do app="dist/mac-$arch/AJEAN.app" mkdir -p "$app/Contents/MacOS" "$app/Contents/Resources" cp "dist/ajean-darwin-$arch" "$app/Contents/MacOS/ajean" chmod +x "$app/Contents/MacOS/ajean" cp /tmp/ajean.icns "$app/Contents/Resources/ajean.icns" 2>/dev/null || true printf '%s\n' \ '' \ '' \ '' \ 'CFBundleNameAJEAN' \ 'CFBundleDisplayNameAJEAN' \ 'CFBundleExecutableajean' \ 'CFBundleIdentifierlink.ajean.app' \ 'CFBundleIconFileajean' \ 'CFBundlePackageTypeAPPL' \ "CFBundleShortVersionString$v" \ "CFBundleVersion$v" \ 'LSMinimumSystemVersion11.0' \ 'LSUIElement' \ 'NSHighResolutionCapable' \ '' > "$app/Contents/Info.plist" # Signature ad-hoc : sans elle, macOS refuse purement et simplement # de lancer un binaire arm64 non signé (pas juste un avertissement). codesign --force --deep -s - "$app" || true (cd "dist/mac-$arch" && zip -qry "../AJEAN-macos-$arch.zip" AJEAN.app) # Nom hérité conservé : les liens de téléchargement déjà publiés # (site, mails, messages) pointent dessus et doivent continuer de # fonctionner. Même contenu, deux noms. cp "dist/AJEAN-macos-$arch.zip" "dist/AJEAN-macos-$arch.zip" rm -rf "dist/mac-$arch" done ls -l dist - uses: actions/upload-artifact@v4 with: name: macos path: dist/* release: needs: macos runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: go-version-file: go.mod - name: build Linux + Windows run: | mkdir -p dist for t in linux/amd64 linux/arm64 windows/amd64 windows/arm64; do os=${t%/*}; arch=${t#*/}; ext=""; ldflags="-s -w" # Windows : sous-système GUI → aucune console noire au double-clic # (l'app se rattache à la console du terminal parent si lancée en CLI). [ "$os" = windows ] && { ext=".exe"; ldflags="$ldflags -H=windowsgui"; } GOOS=$os GOARCH=$arch CGO_ENABLED=0 \ go build -trimpath -ldflags="$ldflags" -o "dist/ajean-$os-$arch$ext" ./cmd/ajean done - uses: actions/download-artifact@v4 with: name: macos path: dist - name: SHA256SUMS run: | chmod +x dist/ajean-darwin-* (cd dist && sha256sum ajean-* *.zip > SHA256SUMS) ls -l dist && cat dist/SHA256SUMS - name: publier la release uses: softprops/action-gh-release@v2 with: files: dist/* # Notes rédigées à la main, versionnées avec le code : le tag emporte # donc ses notes, au lieu de publier une liste de commits auto-générée # qu'il fallait ensuite remplacer à la main dans l'interface GitHub. # ⚠️ Réécrire RELEASE_NOTES.md AVANT de poser le tag. body_path: RELEASE_NOTES.md generate_release_notes: false