Belle façon de gérer un environnement de développement

Salut tout le monde, je partage juste un script pratique que j’ai mis au point pour m’aider à exécuter mon instance de développement Discourse.

Il récupère toutes les dernières modifications, récupère les mises à jour des plugins installés, exécute toutes les migrations, ainsi que l’installation des gems et des packages pnpm nécessaires.

Le seul inconvénient du script est qu’il récupère également les plugins inclus dans le cœur, ce qui techniquement ne ferait rien puisqu’ils seraient mis à jour avec le premier git pull. Tant pis.

Remarque : chatgpt.com m’a aidé à écrire la logique de l’instruction if (mes premières expériences ont échoué).
~/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

Ensuite, exécutez :

chmod +x rundiscourse.sh

Ensuite, allez dans le fichier ~/.bashrc (en utilisant nano, ou n’importe quoi d’autre), et ajoutez ce bout si vous ne l’avez pas déjà (il est plus près du bas)

# 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

Ensuite, ajoutez ce qui suit au fichier ~/.bash_aliases :

alias discourse="~/rundiscourse.sh"

Fermez votre terminal et rouvrez-le.
Maintenant, lorsque vous exécutez discourse dans le terminal, votre environnement de développement devrait démarrer !


J’espère que cela vous a aidé ! N’hésitez pas à me faire savoir si je fais quelque chose de mal ou si cela peut être amélioré. Merci !

1 « J'aime »

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.

1 « J'aime »

Merci pour ces éclaircissements ! Je vais essayer ça !