mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-21 22:18:13 +02:00
Noms de release lisibles, et incompatibles avec l'updater 0.7
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.
This commit is contained in:
1 parent
664b13753b
commit
071caea516
6 files changed
+92
-35
No files matched your search
@@ -35,13 +35,33 @@ type ghRelease struct {
|
||||
}
|
||||
|
||||
// updateAssetName est le nom de l'asset de release pour la plateforme courante :
|
||||
// ajean-<os>-<arch>[.exe]. Un seul nom publié, un seul nom cherché.
|
||||
func updateAssetName() string {
|
||||
suffix := runtime.GOOS + "-" + runtime.GOARCH
|
||||
if runtime.GOOS == "windows" {
|
||||
suffix += ".exe"
|
||||
// ajean-linux, ajean-linux-arm, ajean-macos, ajean-macos-arm, ajean-windows.exe,
|
||||
// ajean-windows-arm.exe. Un seul nom publié, un seul nom cherché.
|
||||
//
|
||||
// Ces noms sont volontairement lisibles — « macos » plutôt que « darwin », pas
|
||||
// de « amd64 » pour le cas courant — et volontairement DIFFÉRENTS du schéma
|
||||
// ajean-<GOOS>-<GOARCH> qu'utilisaient les versions 0.7 : leur mise à jour
|
||||
// automatique ne trouve donc aucun asset et échoue sans rien remplacer, au lieu
|
||||
// d'installer un binaire 0.8 sur une machine encore agencée en 0.7 — ce qui
|
||||
// laissait le service de lien en boucle d'échec. La 0.7 se met à jour à la main,
|
||||
// par réinstallation.
|
||||
func updateAssetName() string { return assetNameFor(runtime.GOOS, runtime.GOARCH) }
|
||||
|
||||
// assetNameFor est séparée pour être vérifiable sur les six plateformes, et pas
|
||||
// seulement sur celle qui exécute les tests.
|
||||
func assetNameFor(goos, goarch string) string {
|
||||
name := "ajean-" + map[string]string{
|
||||
"darwin": "macos",
|
||||
"linux": "linux",
|
||||
"windows": "windows",
|
||||
}[goos]
|
||||
if goarch == "arm64" {
|
||||
name += "-arm"
|
||||
}
|
||||
return "ajean-" + suffix
|
||||
if goos == "windows" {
|
||||
name += ".exe"
|
||||
}
|
||||
return name
|
||||
}
|
||||
|
||||
// pickAsset trouve dans la release l'asset de cette plateforme. Renvoie son nom
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
package ajean
|
||||
|
||||
import "testing"
|
||||
import (
|
||||
"runtime"
|
||||
"testing"
|
||||
)
|
||||
|
||||
// relWith fabrique une release ne contenant que les assets nommés.
|
||||
func relWith(names ...string) *ghRelease {
|
||||
@@ -34,3 +37,32 @@ func TestPickAssetSansCorrespondance(t *testing.T) {
|
||||
t.Fatalf("URL inattendue: %q", url)
|
||||
}
|
||||
}
|
||||
|
||||
// Le schéma de nommage ne doit PAS coïncider avec ajean-<GOOS>-<GOARCH> : c'est
|
||||
// ce qui empêche la mise à jour automatique d'une 0.7 de s'installer sur une
|
||||
// machine encore agencée en 0.7.
|
||||
func TestNomDAssetDistinctDuSchema07(t *testing.T) {
|
||||
legacy := "ajean-" + runtime.GOOS + "-" + runtime.GOARCH
|
||||
if runtime.GOOS == "windows" {
|
||||
legacy += ".exe"
|
||||
}
|
||||
if got := updateAssetName(); got == legacy {
|
||||
t.Fatalf("le nom %q est celui que cherche la 0.7 — sa mise à jour casserait l'installation", got)
|
||||
}
|
||||
}
|
||||
|
||||
// Les six noms publiés par la release, vérifiés un par un.
|
||||
func TestNomsDAssetParPlateforme(t *testing.T) {
|
||||
for _, c := range []struct{ goos, goarch, want string }{
|
||||
{"linux", "amd64", "ajean-linux"},
|
||||
{"linux", "arm64", "ajean-linux-arm"},
|
||||
{"darwin", "amd64", "ajean-macos"},
|
||||
{"darwin", "arm64", "ajean-macos-arm"},
|
||||
{"windows", "amd64", "ajean-windows.exe"},
|
||||
{"windows", "arm64", "ajean-windows-arm.exe"},
|
||||
} {
|
||||
if got := assetNameFor(c.goos, c.goarch); got != c.want {
|
||||
t.Errorf("%s/%s → %q, attendu %q", c.goos, c.goarch, got, c.want)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user