mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-12 01:37:06 +02:00
- mode agent : les outils write/edit/bash résolvent les chemins relatifs dans JEAN_HOME/workspace et le shell y démarre, au lieu du répertoire courant du processus (Bureau, ProgramData\jean\bin). Les chemins absolus demandés explicitement restent honorés. - Windows : le double-clic n'installe plus en silence. Boîte de dialogue unique, raccourcis menu Démarrer + Bureau, puis relance depuis la copie installée — un seul binaire fait foi. Désinstallation : retrait des raccourcis. - update : contrôle des droits AVANT le téléchargement (l'échec tombait sur le fichier temporaire, avec un message brut), message donnant la commande exacte, timeout UI porté de 30 s à 10 min. - jean where + bouton « Où sont mes fichiers ? » : emplacements, et alerte quand le binaire lancé n'est pas celui installé. - icônes : source unique (sys_brand_icon.go) pour la zone de notification, la barre de menus macOS et l'icône du .exe, alignée sur le favicon noir. macOS en icône template (une icône noire figée disparaît sur une barre sombre). - CI : le bundle macOS part de icon.png au lieu de convertir le .ico via sips, dont l'échec était masqué par « || true » ; notes de release versionnées.
126 lines
5.9 KiB
YAML
126 lines
5.9 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 `jean 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 `jean 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/jean-darwin-arm64 ./cmd/jean
|
|
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/jean-darwin-amd64 ./cmd/jean
|
|
file dist/jean-darwin-*
|
|
- name: bundles Jean.app
|
|
run: |
|
|
# Un binaire nu double-cliqué ouvrirait le Terminal. On publie donc
|
|
# aussi un vrai bundle Jean.app (zippé pour garder le bit exécutable) :
|
|
# au clic, le Finder lance Contents/MacOS/jean, 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 jean.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/jean/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/jean.iconset
|
|
for s in 16 32 128 256 512; do
|
|
sips -z $s $s 'cmd/jean/icon.png' --out "/tmp/jean.iconset/icon_${s}x${s}.png" >/dev/null
|
|
done
|
|
iconutil -c icns /tmp/jean.iconset -o /tmp/jean.icns
|
|
v="${GITHUB_REF_NAME#v}"
|
|
for arch in amd64 arm64; do
|
|
app="dist/mac-$arch/Jean.app"
|
|
mkdir -p "$app/Contents/MacOS" "$app/Contents/Resources"
|
|
cp "dist/jean-darwin-$arch" "$app/Contents/MacOS/jean"
|
|
chmod +x "$app/Contents/MacOS/jean"
|
|
cp /tmp/jean.icns "$app/Contents/Resources/jean.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>Jean</string>' \
|
|
'<key>CFBundleDisplayName</key><string>Jean</string>' \
|
|
'<key>CFBundleExecutable</key><string>jean</string>' \
|
|
'<key>CFBundleIdentifier</key><string>link.ajean.jean</string>' \
|
|
'<key>CFBundleIconFile</key><string>jean</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/mac-$arch" && zip -qry "../Jean-macos-$arch.zip" Jean.app)
|
|
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/jean-$os-$arch$ext" ./cmd/jean
|
|
done
|
|
- uses: actions/download-artifact@v4
|
|
with:
|
|
name: macos
|
|
path: dist
|
|
- name: SHA256SUMS
|
|
run: |
|
|
chmod +x dist/jean-darwin-*
|
|
(cd dist && sha256sum jean-* Jean-macos-*.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
|