Nice. Un paio di suggerimenti.
Lo shebang dovrebbe essere #!/usr/bin/env sh, che è il più portabile. Lo script non utilizza alcun bashismo, quindi dovrebbe funzionare in qualsiasi shell compatibile con Bourne shell, non solo bash.
Dopo lo shebang aggiungi set -e. Questo farà sì che lo script esca se uno qualsiasi dei comandi fallisce. Altrimenti continuerà felicemente ad eseguire i comandi fallendo in seguito perché qualcosa come bundle install è fallito e l’output di errore è ora scomparso dallo schermo dell’utente.
Ora il plugin git pull è un po’ più problematico poiché gli errori scritti su STDERR e un’esecuzione git fallita non verranno gestiti correttamente. Quindi ho inviato anche STDERR a STDOUT e ho tenuto traccia del codice di uscita.
Non c’è bisogno di un sacco di comandi cd, né di impostare la variabile 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
Avevo già uno script simile, tranne per il git pulling poiché non voglio che accada ogni volta.