J’adore Scoop.sh ! Il fournit presque toutes les applications dont j’ai besoin.
Mais leur mise à jour n’est pas très conviviale. Voyons ensemble comment j’ai réussi à mettre à jour toutes les applications obsolètes en (presque) une seule ligne de commande.
Scoop « update » et Scoop « status »
Avant de commencer, il faut s’assurer que Scoop est à jour en utilisant la commande `update :
|
|
Ensuite, pour savoir quelles applications ont besoin d’une mise à jour, la commande suivante les répertorie pour nous :
|
|
Le résultat attendu serait :
|
|
Le point de départ
Créons un fichier PowerShell appelé scoop-auto-update-apps.ps1.
Les premières lignes sont les suivantes :
|
|
Que contient $statusOutput ?
|
|
Il correspond à une liste d’objets des applications à mettre à jour. Voyons un exemple :
|
|
Extraire le nom de l’application
Pour extraire le nom de l’application, nous allons utiliser une expression régulière :
|
|
Remarque : $_ correspond à l’objet actuel de la liste en cours d’analyse.
Nous vérifions l’élément Name=([^;]+) par rapport à la chaîne d’objet entière, et l’expression régulière capture uniquement la valeur après Name= et avant le point-virgule, ce qui nous donne le nom de l’application souhaité.
Ensuite, $matches est une variable automatique dans PowerShell qui est remplie lors de l’utilisation de l’opérateur -match avec des groupes d’expressions régulières (marqués par des parenthèses dans le motif).
Lorsque vous utilisez Name=([^;]+) :
$matchescontient la chaîne complète correspondante (par exemple,Name=find-java)$matchescontient ce qui a été capturé dans le premier groupe entre()(par exemple,find-java)
Voici un exemple pour illustrer cela :
|
|
Nous utilisons $matches car nous voulons uniquement le nom de l’application sans le préfixe Name=.
Vérification qu’aucune application ne doit être mise à jour
Ensuite, vérifions simplement que les résultats de la sortie scoop status retournent une liste d’applications.
Si ce n’est pas le cas, terminons l’exécution :
|
|
Imprimer la liste des applications à mettre à jour
Afin de fournir un retour d’information à l’utilisateur, imprimons la liste des applications :
|
|
Exécutez la commande de mise à jour par application
Nous sommes maintenant prêts à mettre à jour les applications obsolètes. Parcourons la variable $updatableApps et exécutons la commande scoop update $app :
|
|
Ajout d’une option --dry-run
Bon, maintenant, j’aime toujours exécuter mes scripts avec une option --dry-run pour vérifier ce qui va se passer avant que la logique ne soit réellement exécutée.
Enveloppons le code que nous avons écrit jusqu’à présent dans une fonction :
|
|
Et ajoutez au bas du script un appel de fonction qui gère l’option dry run :
|
|
Ensuite, dans le corps de la fonction, ajoutons l’option --dry-run juste avant la dernière boucle qui appelle scoop update $app :
|
|
Ce qui n’est pas inclus dans le script
Parfois, Scoop vous indique que vous devez exécuter une commande de registre pour les menus contextuels ou autres fonctionnalités. Ce script ne gère pas encore cela.
Vous devrez copier ces commandes et les exécuter individuellement.
De plus, le script ne permet pas d’ignorer une mise à jour d’application si vous devez conserver la version actuellement installée. Je dirais qu’il faudrait une option --skip "app1 app2 ..." pour cela.
Conclusion
Et voilà ! Vous pouvez mettre à jour vos applications Scoop à l’aide d’une seule commande :
|
|
Le script complet est disponible dans ce gist GitHub. Profitez-en !
Suivez-moi !
Merci d’avoir lu cet article. Assurez-vous de me suivre sur X, de vous abonner à ma publication Substack et d’ajouter mon blog à vos favoris pour ne pas manquer les prochains articles.
Photo de Yan Krukau.