Comme je l’ai déploré ici, j’ai souvent l’impression de passer plus de temps à essayer de maintenir mon environnement de développement à jour qu’à écrire du code.
J’ai un script que j’utilise pour démarrer Discourse avec un tas de paramètres ENV qui fait également d’autres choses. Aujourd’hui, il n’arrivait pas à obtenir la bonne version de nodejs et j’ai passé encore plus de temps à le mettre à jour. J’ai même fait des choses comme grep pour supprimer les sorties bruyantes de asdf et autres. Voici la section qui met à jour Discourse.
Voici ce qu’il fait :
- Récupère et/ou met à jour les dépôts all-the-plugins et all-the-themes. Ceux-ci sont très utiles pour trouver des exemples sur la façon de faire les choses. S’ils ont été téléchargés au cours des 100 dernières minutes, cette étape est ignorée.
docker pullla dernière version de base (l’omission de cette étape cruciale est la raison pour laquelle j’ai passé beaucoup de temps sur cela aujourd’hui - j’ai cru que faire ungit pulldansdiscourse_dockersuffirait
)docker runl’image de base pour obtenir les versions de Ruby, Imagemagick et node ; puis utiliseasdfpour installer et appliquer globalement ces versions. (Il suppose que vous avezasdf- je gère cela dans mon scriptnewmachine).- Dans le répertoire discourse, checkout main, git pull, exécute pnpm update et dedupe
- Migre la base de données et la base de données de test
Je ne l’ai testé que sous Linux (Pop!OS, qui est principalement Ubuntu).
SRC=~/src/discourse-repos
DISCOURSE_SRC=/home/pfaffman/src/discourse-repos/discourse
ALL_THE_PLUGINS=~/src/discourse-repos/all-the-plugins
ALL_THE_THEMES=~/src/discourse-repos/all-the-themes
ARG=$1
COMMAND=""
if [[ "$ARG" == "update" ]] || [[ "$ARG" == "upgrade" ]]
then
# NOTE: if bundler is broken, try `gem install bundler -v 2.5.3`
if ! [[ -d $ALL_THE_PLUGINS ]]; then
echo "MISSING THE PLUGINS"
cd $SRC
git clone https://github.com/discourse/all-the-plugins
cd $ALL_THE_PLUGINS
./reset-all-repos
fi
cd $ALL_THE_PLUGINS
if [ -z "$(find official -mmin -100)" ]; then
echo -e "\nUpdating the plugins\n "
./reset-all-repos
fi
if ! [[ -d $ALL_THE_THEMES ]]; then
echo "MISSING THE THEMES!!!"
sleep 5
cd $SRC
git clone https://github.com/discourse/all-the-themes
cd $ALL_THE_THEMES
./reset-all-repos
fi
cd $ALL_THE_THEMES
if [ -z "$(find official -mmin -100)" ]; then
echo -e "\nUpdating themes. . .\n"
./reset-all-repos
fi
asdf plugin add ruby |grep -v "already"
asdf plugin add imagemagick |grep -v "already"
asdf plugin update --all > /dev/null
docker pull discourse/base:release
RUBY_VERSION=$(docker run discourse/base:release bash -c 'ruby --version'|cut -d' ' -f2)
echo "Got RUBY_VERSION $RUBY_VERSION"
asdf install ruby $RUBY_VERSION|grep -v "already"
asdf global ruby $RUBY_VERSION|grep -v "already"
IMAGE_MAGICK_VERSION=$(docker run discourse/base:release bash -c 'convert --version'|head -1|cut -d' ' -f3)
echo "Got IMAGE_MAGICK_VERSION: $IMAGE_MAGICK_VERSION"
asdf install imagemagick $IMAGE_MAGICK_VERSION|grep -v "already"
asdf global imagemagick $IMAGE_MAGICK_VERSION|grep -v "already"
# 2025-01-13 get node version from the base container!
NODE_VERSION=$(docker run discourse/base:release bash -c 'node --version'|cut -d'v' -f2)
echo "GOT NODEJS version: $NODE_VERSION"
asdf install nodejs $NODE_VERSION|grep -v "already"
asdf global nodejs $NODE_VERSION|grep -v "already"
npm install -g pnpm
# end of version updates
cd $DISCOURSE_SRC
git checkout main
git pull
bundle install
echo -e "\n-----------> Running pnpm update. . .\n"
pnpm update
echo -e "\n-----------> Running pnpm dedupe. . .\n"
pnpm dedupe
echo -e "\n-----------> Migrating the databases. . .\n"
LOAD_PLUGINS=1 ./bin/rake db:migrate
LOAD_PLUGINS=1 RAILS_ENV=test ./bin/rake db:migrate
exit
fi