mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-12 01:37:06 +02:00
ajean-linux, ajean-linux-arm, ajean-macos, ajean-macos-arm, ajean-windows.exe, ajean-windows-arm.exe. Le schema ne correspond plus a ajean-<GOOS>-<GOARCH> que cherchent les 0.7 : leur mise a jour automatique ne trouve aucun asset et echoue sans rien remplacer. C'est voulu — sinon elle installait le binaire 0.8 sans migrer, le service de lien repartait en boucle d'echec sur « link serve » disparu et le moteur perdait sa configuration. assetNameFor est isolee pour etre testee sur les six plateformes, plus un test qui verifie explicitement l'absence de collision avec le schema 0.7.
133 lines
6.4 KiB
YAML
133 lines
6.4 KiB
YAML
# 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-macos-arm ./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-macos ./cmd/ajean
|
|
file dist/ajean-macos*
|
|
- 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 bin in ajean-macos ajean-macos-arm; do
|
|
app="dist/bundle-$bin/AJEAN.app"
|
|
mkdir -p "$app/Contents/MacOS" "$app/Contents/Resources"
|
|
cp "dist/$bin" "$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' \
|
|
'<?xml version="1.0" encoding="UTF-8"?>' \
|
|
'<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">' \
|
|
'<plist version="1.0"><dict>' \
|
|
'<key>CFBundleName</key><string>AJEAN</string>' \
|
|
'<key>CFBundleDisplayName</key><string>AJEAN</string>' \
|
|
'<key>CFBundleExecutable</key><string>ajean</string>' \
|
|
'<key>CFBundleIdentifier</key><string>link.ajean.app</string>' \
|
|
'<key>CFBundleIconFile</key><string>ajean</string>' \
|
|
'<key>CFBundlePackageType</key><string>APPL</string>' \
|
|
"<key>CFBundleShortVersionString</key><string>$v</string>" \
|
|
"<key>CFBundleVersion</key><string>$v</string>" \
|
|
'<key>LSMinimumSystemVersion</key><string>11.0</string>' \
|
|
'<key>LSUIElement</key><true/>' \
|
|
'<key>NSHighResolutionCapable</key><true/>' \
|
|
'</dict></plist>' > "$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/bundle-$bin" && zip -qry "../AJEAN-${bin#ajean-}.zip" AJEAN.app)
|
|
rm -rf "dist/bundle-$bin"
|
|
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
|
|
# Noms d'asset : ajean-<os>[-arm][.exe]. Volontairement lisibles, et
|
|
# volontairement DIFFÉRENTS du schéma ajean-<GOOS>-<GOARCH> des 0.7 :
|
|
# leur mise à jour automatique ne trouve alors aucun asset et échoue
|
|
# sans rien remplacer, au lieu d'installer un binaire 0.8 sur une
|
|
# machine encore agencée en 0.7 (voir updateAssetName, sys_update.go).
|
|
for t in linux/amd64:ajean-linux linux/arm64:ajean-linux-arm \
|
|
windows/amd64:ajean-windows.exe windows/arm64:ajean-windows-arm.exe; do
|
|
target=${t%%:*}; name=${t#*:}
|
|
os=${target%/*}; arch=${target#*/}; 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 ] && ldflags="$ldflags -H=windowsgui"
|
|
GOOS=$os GOARCH=$arch CGO_ENABLED=0 \
|
|
go build -trimpath -ldflags="$ldflags" -o "dist/$name" ./cmd/ajean
|
|
done
|
|
- uses: actions/download-artifact@v4
|
|
with:
|
|
name: macos
|
|
path: dist
|
|
- name: SHA256SUMS
|
|
run: |
|
|
chmod +x dist/ajean-macos*
|
|
(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
|