Bien. Quelques suggestions.
Le shebang devrait être #!/usr/bin/env sh, qui est le plus portable. Le script n’utilise aucune bash-isme, il devrait donc fonctionner dans n’importe quel shell compatible Bourne, pas seulement bash.
Après le shebang, ajoutez set -e. Cela fera sortir le script si l’une des commandes échoue. Sinon, il continuera joyeusement à exécuter les commandes et échouera plus tard parce que quelque chose comme bundle install a échoué, et la sortie d’erreur a maintenant disparu de l’écran de l’utilisateur.
Maintenant, le git pull du plugin est un peu plus problématique car les erreurs écrites sur STDERR et une exécution git défaillante ne seront pas correctement gérées. J’ai donc également poussé STDERR vers STDOUT et gardé une trace du code de sortie.
Pas besoin d’une série de commandes cd, ni de définir la variable PLUGIN_DIR.
#!/usr/bin/env sh
set -e
cd ~/discourse
git pull
for folder in plugins/*; do
if [ -d "$folder/.git" ]; then
exitcode=0
output=$(git -C "$folder" pull 2>&1) || exitcode=$?
if echo "$output" | grep -q -v "Already up to date."; then
echo "[$(basename "$folder")]"
echo "$output"
[ "$exitcode" -ne 0 ] && exit "$exitcode"
fi
fi
done
bundle install
pnpm install
bin/rails db:migrate
DISCOURSE_HOSTNAME=localhost UNICORN_LISTENER=localhost:3000 bin/ember-cli -u
J’avais déjà un script similaire, à l’exception du git pull car je ne veux pas que cela se produise à chaque fois.