Bel modo di gestire un ambiente di sviluppo

Ciao a tutti, condivido uno script utile che ho messo insieme per aiutarmi a eseguire la mia istanza di sviluppo di Discourse.

Estrae tutte le ultime modifiche, scarica gli aggiornamenti dai plugin installati ed esegue tutte le migrazioni, oltre a installare le gemme e i pacchetti pnpm necessari.

Lo svantaggio dello script è che scarica anche i plugin inclusi nel core, che tecnicamente non farebbero nulla poiché verrebbero aggiornati con il primo git pull. Pazienza.

Nota: chatgpt.com mi ha aiutato a scrivere la logica dell’istruzione if (i miei esperimenti iniziali sono falliti).
~/rundiscourse.sh:

#!/bin/bash

cd ~/discourse
git pull
cd plugins
PLUGIN_DIR=~/discourse/plugins

for folder in "$PLUGIN_DIR"/*; do
  if [ -d "$folder/.git" ]; then
    output=$(git -C "$folder" pull)
    if ! echo "$output" | grep -q "Already up to date."; then
      echo "[$(basename "$folder")] $output"
    fi
  fi
done
cd ~/discourse
bundle install
pnpm install
bin/rails db:migrate
DISCOURSE_HOSTNAME=localhost UNICORN_LISTENER=localhost:3000 bin/ember-cli -u

Quindi, esegui:

chmod +x rundiscourse.sh

Quindi, vai al file ~/.bashrc (usando nano, o qualsiasi altro editor), e aggiungi questo pezzo se non lo hai già (è più verso il fondo)

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

Quindi, aggiungi quanto segue al file ~/.bash_aliases:

alias discourse="~/rundiscourse.sh"

Chiudi il terminale e riaprilo.
Ora, quando esegui discourse nel terminale, il tuo ambiente di sviluppo dovrebbe avviarsi!


Spero che questo sia stato d’aiuto! Inoltre, fatemi sapere se sto facendo qualcosa di sbagliato o se può essere migliorato. Grazie!

1 Mi Piace

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.

1 Mi Piace

Grazie per l’intuizione! Ci proverò!