Como lamentei aqui, muitas vezes sinto que passo mais tempo tentando manter meu ambiente de desenvolvimento atualizado do que escrevendo código.
Tenho um script que uso para iniciar o Discourse com várias configurações de ENV que também faz outras coisas. Hoje, ele falhou em obter a versão correta do nodejs e passei muito mais tempo atualizando-o. Cheguei a fazer coisas como grep para remover saídas barulhentas do asdf e assim por diante. Aqui está a seção que atualiza o Discourse.
Aqui está o que ele faz:
- Recupera e/ou atualiza os repositórios all-the-plugins e all-the-themes. Eles são muito úteis para encontrar exemplos de como fazer as coisas. Se foram baixados nos últimos 100 minutos, ele pula esta etapa.
docker pulla última versão base (a falta desta etapa crucial é o motivo pelo qual passei muito tempo nisso hoje - de alguma forma pensei que fazer umgit pullemdiscourse_dockerfaria isso
)docker runa imagem base para obter as versões do Ruby, Imagemagick e node; em seguida, usaasdfpara instalar e aplicar globalmente essas versões. (Assume que você temasdf- eu cuido disso no meu scriptnewmachine).- No diretório discourse, faz checkout de main, git pull, executa pnpm update e dedupe
- Migra o banco de dados e o banco de dados de teste
Não testei em nenhum outro lugar além do Linux (Pop!OS, que é majoritariamente 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 o bundler estiver quebrado, tente `gem install bundler -v 2.5.3`
if ! [[ -d $ALL_THE_PLUGINS ]]; then
echo "FALTANDO OS 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 "\nAtualizando os plugins\n "
./reset-all-repos
fi
if ! [[ -d $ALL_THE_THEMES ]]; then
echo "FALTANDO OS TEMAS!!!"
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 "\nAtualizando temas. . .\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 "Obtido 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 "Obtido 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 obter a versão do node do container base!
NODE_VERSION=$(docker run discourse/base:release bash -c 'node --version'|cut -d'v' -f2)
echo "OBTIDO NODEJS version: $NODE_VERSION"
asdf install nodejs $NODE_VERSION|grep -v "already"
asdf global nodejs $NODE_VERSION|grep -v "already"
npm install -g pnpm
# fim das atualizações de versão
cd $DISCOURSE_SRC
git checkout main
git pull
bundle install
echo -e "\n-----------> Executando pnpm update. . .\n"
pnpm update
echo -e "\n-----------> Executando pnpm dedupe. . .\n"
pnpm dedupe
echo -e "\n-----------> Migrando os bancos de dados. . .\n"
LOAD_PLUGINS=1 ./bin/rake db:migrate
LOAD_PLUGINS=1 RAILS_ENV=test ./bin/rake db:migrate
exit
fi