Come ho lamentato qui, spesso mi sembra di passare più tempo a cercare di mantenere aggiornato il mio ambiente di sviluppo che a scrivere codice.
Ho uno script che uso per avviare Discourse con una serie di impostazioni ENV che fa anche un sacco di altre cose. Oggi non riusciva a ottenere la versione corretta di nodejs e ho passato un sacco di tempo ad aggiornarla. Ho persino fatto cose come grep per eliminare l’output rumoroso da asdf e simili. Ecco la sezione che aggiorna Discourse.
Ecco cosa fa:
- Recupera e/o aggiorna le repository all-the-plugins e all-the-themes. Queste sono molto utili per trovare esempi su come fare le cose. Se sono state scaricate negli ultimi 100 minuti, salta questo passaggio.
- Esegue
docker pulldell’ultima release base (la mancanza di questo passaggio cruciale è il motivo per cui oggi ho passato un sacco di tempo su questo: in qualche modo pensavo che fare ungit pullindiscourse_dockerlo avrebbe fatto
) - Esegue
docker rundell’immagine base per ottenere le versioni di Ruby, Imagemagick e node; quindi utilizzaasdfper installare e applicare globalmente quelle versioni. (Presuppone che tu abbiaasdf, io me ne occupo nel mio scriptnewmachine). - Nella directory di discourse, esegue checkout main, git pull, pnpm update e dedupe
- Esegue la migrazione del database e del database di test
Non l’ho testato da nessuna parte se non su Linux (Pop!OS, che è per lo più 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
# NOTA: se bundler è rotto, prova `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