Lors des mes différentes avancées sur mon projet Meteor, j'ai dû le builder et le tester sur différentes plateformes. Un point pour le compilateur Go qui permet de faire de la cross-compilation. 😇
Il est possible de lister la liste des OS et archs supportées en utilisant la commande :
go tool dist list
D'ailleurs cette dernière va mettre très utile pour la suite.
Habituellement, ce que font beaucoup, c'est d'écrire un Makefile qui va contenir les différentes plateformes à builder, sauf que moi, je voulais pouvoir builder pour toutes les plateformes disponibles... 😥
Ainsi, dans certains projets on peut retrouver des lignes du genre ...
Dans mon cas, comme je souhaite builder pour toutes les plateformes, c'est pas super opti... C'est alors que j'ai décidé de m'écrire un petit script aux petits oignons pour faire ce que je souhaite, à savoir :
Builder pour toutes les plateformes (merci captain obvious, ça fait 3 fois que tu le redis...), sauf certaines (exemple : js,android, ios).
Classer mes builds proprement dans un répertoire en fonction du type d'OS.
Supprimer le cache de go-build avant chaque nouveau build pour éviter les soucis de compatibilité avec la glibc. 😅
Bon avant de commencer, je vais un peu expliquer l'arborescence du petit projet créé rien que pour cet article (ohhh que je suis gentil)...
Le Makefile qui fait appel au script pour builder;
Le package main.go (un simple "Hello World");
Le fichier VERSION qui contient le numéro de version du programme à builder, je fais ça car ça m'évite de devoir spécifier le numéro de version à 15 000 endroits, je préfère que chaque programme vienne lire le fichier qui contient le numéro de version. 🤯
Au niveau du contenu, pour le fichier VERSION nous avons :
Dans notre package src/main.go, nous avons :
Comme vous pouvez le constater, le programme ne fait pas grand chose ! 😅
Comme je l'ai spécifié plus haut, j'utilise un Makefile pour lancer le projet ou encore le builder.
Comme vous pouvez le constater, celui-ci fait appel aux fichiers :
VERSION pour récupérer le numéro de version
build.sh pour builder le projet 😻
Si vous vous demandez ce que fait la target help, n'hésitez pas à aller regarder mon dernier article qui traite de ce sujet ici.
Maintenant il ne reste plus qu'à voir le contenu du fichier build.sh :
Si vous souhaitez ne pas builder pour certains OS, vous pouvez le faire en les rajoutant à la ligne "android" | "ios" | "js".
C'est cool Julien mais, comment ça s'utilise? Eh bien c'est tout bête, si vous souhaitez appeler le script (hors Makefile), vous pouvez l'appeler en faisant un :
chmod u+x ./build.sh # lui donner les droits d'exécution (pour notre user)
./build.sh src/main.go
# Via Makefile
make build
Automatiquement, il va vous créer le répertoire build/ dans lequel seront placés les différents builds de manière hiérarchique. 🤠
Et voilà, c'est tout! Tout ça a donc l'avantage d'être rapide, propre et rangé. Ne me remerciez pas. Si vous souhaitez retrouver le code, vous pouvez le cloner ici.