From 2249e30ad08597660949982b0b061c528e58b278 Mon Sep 17 00:00:00 2001 From: Robson Tenorio Henriques Date: Sat, 14 Dec 2024 22:07:28 -0300 Subject: [PATCH] =?UTF-8?q?Atualiza=C3=A7=C3=A3o=20no=20UPDATE.sh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- UPDATE.sh | 370 +++++++++++++++++++++++++++++++++++------------------- 1 file changed, 238 insertions(+), 132 deletions(-) diff --git a/UPDATE.sh b/UPDATE.sh index 6efe3a3f..23867df2 100644 --- a/UPDATE.sh +++ b/UPDATE.sh @@ -1,200 +1,306 @@ #!/bin/bash -VERSION="v1.9.0" +VERSION="v1.10.0" -SCRIPT_DIR=$(dirname "$0") +# Define o diretório base absoluto +SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd) +# Define diretórios de logs usando caminhos absolutos LOG_DIR="$SCRIPT_DIR/log" CURRENT_LOG_DIR="$LOG_DIR/atual" ARCHIVED_LOG_DIR="$LOG_DIR/arquivos" -mkdir -p "$CURRENT_LOG_DIR" -mkdir -p "$ARCHIVED_LOG_DIR" - -LOG_FILE="$CURRENT_LOG_DIR/update_$(date +"%Y-%m-%d_%H-%M-%S").log" +# Cria os diretórios de log +if ! mkdir -p "$CURRENT_LOG_DIR" "$ARCHIVED_LOG_DIR"; then + echo "Erro: Não foi possível criar os diretórios de log. Verifique as permissões." + exit 1 +fi COLOR="\e[38;5;92m" RESET="\e[0m" +BOLD="\e[1m" + +echo -e " " +echo -e "${COLOR}██████╗ ██████╗ ███████╗███████╗███████╗ ████████╗██╗ ██████╗██╗ ██╗███████╗████████╗${RESET}" +echo -e "${COLOR}██╔══██╗██╔══██╗██╔════╝██╔════╝██╔════╝ ╚══██╔══╝██║██╔════╝██║ ██╔╝██╔════╝╚══██╔══╝${RESET}" +echo -e "${COLOR}██████╔╝██████╔╝█████╗ ███████╗███████╗ ██║ ██║██║ █████╔╝ █████╗ ██║ ${RESET}" +echo -e "${COLOR}██╔═══╝ ██╔══██╗██╔══╝ ╚════██║╚════██║ ██║ ██║██║ ██╔═██╗ ██╔══╝ ██║ ${RESET}" +echo -e "${COLOR}██║ ██║ ██║███████╗███████║███████║ ██║ ██║╚██████╗██║ ██╗███████╗ ██║ ${RESET}" +echo -e "${COLOR}╚═╝ ╚═╝ ╚═╝╚══════╝╚══════╝╚══════╝ ╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝╚══════╝ ╚═╝ ${RESET}" +echo -e "${COLOR}ATUALIZANDO PARA A VERSÃO:${RESET} ${BOLD}$VERSION${RESET}" +echo -e " " +sleep 2 +# Lista de fusos horários +declare -a TIMEZONES=( + "UTC" + "America/Sao_Paulo" + "America/New_York" + "Europe/London" + "Europe/Paris" + "Asia/Tokyo" + "Asia/Shanghai" + "Australia/Sydney" +) + +# Exibir a lista de fusos horários para o usuário echo " " -echo "${COLOR}██████╗ ██████╗ ███████╗███████╗███████╗ ████████╗██╗ ██████╗██╗ ██╗███████╗████████╗${RESET}" -echo "${COLOR}██╔══██╗██╔══██╗██╔════╝██╔════╝██╔════╝ ╚══██╔══╝██║██╔════╝██║ ██╔╝██╔════╝╚══██╔══╝${RESET}" -echo "${COLOR}██████╔╝██████╔╝█████╗ ███████╗███████╗ ██║ ██║██║ █████╔╝ █████╗ ██║ ${RESET}" -echo "${COLOR}██╔═══╝ ██╔══██╗██╔══╝ ╚════██║╚════██║ ██║ ██║██║ ██╔═██╗ ██╔══╝ ██║ ${RESET}" -echo "${COLOR}██║ ██║ ██║███████╗███████║███████║ ██║ ██║╚██████╗██║ ██╗███████╗ ██║ ${RESET}" -echo "${COLOR}╚═╝ ╚═╝ ╚═╝╚══════╝╚══════╝╚══════╝ ╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝╚══════╝ ╚═╝ ${RESET}" -echo "\e[92mATUALIZANDO PARA A VERSÃO:\e[0m \e[1m$VERSION\e[0m" | tee -a "$LOG_FILE" +echo "Por favor, escolha seu fuso horário:" echo " " +for i in "${!TIMEZONES[@]}"; do + echo "[$i] ${TIMEZONES[$i]}" +done -# sleep 2 - -# echo "PATH: $PATH" | tee -a "$LOG_FILE" - -# # Função para verificar se comandos necessários estão instalados -# check_dependency() { -# if ! command -v "$1" &>/dev/null; then -# echo "$1 não está instalado. Saindo..." | tee -a "$LOG_FILE" -# exit 1 -# fi -# } - -# # Verificar se as dependências estão instaladas -# check_dependency node -# check_dependency npm -# check_dependency pm2 - -# # Gerenciar logs antigos: compactar e mover para a pasta de arquivos (logs mais antigos que 30 dias) -# find "$CURRENT_LOG_DIR" -type f -mtime +30 -exec gzip {} \; -exec mv {}.gz "$ARCHIVED_LOG_DIR" \; - -# sleep 2 - -# echo " " | tee -a "$LOG_FILE" -# echo "VERIFICANDO A VERSÃO DO NODE JS" | tee -a "$LOG_FILE" -# echo " " | tee -a "$LOG_FILE" - -# sleep 2 - -# NODE_PATH="/usr/bin/node" +# Capturar a escolha do usuário +echo " " +read -p "Digite o número correspondente ao fuso horário: " TZ_INDEX +echo " " -# if [ ! -x "$NODE_PATH" ]; then -# echo "Node.js não está instalado corretamente ou não foi encontrado. Saindo..." | tee -a "$LOG_FILE" -# exit 1 -# fi +# Validar entrada +if [[ ! "$TZ_INDEX" =~ ^[0-9]+$ ]] || [[ "$TZ_INDEX" -ge "${#TIMEZONES[@]}" ]]; then + echo " " + echo "Escolha inválida. Usando o fuso horário padrão: UTC." + echo " " + SELECTED_TZ="UTC" +else + SELECTED_TZ="${TIMEZONES[$TZ_INDEX]}" + echo " " + echo "Fuso horário escolhido: $SELECTED_TZ" + echo " " +fi + +# Configuração do arquivo de log (ajustado para usar o fuso horário) +LOG_FILE="$CURRENT_LOG_DIR/update_${VERSION}_$(TZ=$SELECTED_TZ date +"%Y-%m-%d_%H-%M-%S").log" + +# Adicionar informações iniciais ao log +{ + echo " " + echo "**************************************************************" + echo "* PRESS TICKET - LOG DE ATUALIZAÇÃO *" + echo "**************************************************************" + echo " Versão Atualizada: $VERSION " + echo " Fuso Horário: $SELECTED_TZ " + echo " Hora Local: $(TZ=$SELECTED_TZ date) " + echo "**************************************************************" + echo " " +} | tee -a "$LOG_FILE" -# CURRENT_NODE_VERSION=$($NODE_PATH -v | cut -d'v' -f2) +echo " " +echo "Arquivo de de log criado com sucesso: $LOG_FILE" +echo " " +# Exibir a hora ajustada e salvar no log +echo "Fuso horário ajustado para: $SELECTED_TZ" | tee -a "$LOG_FILE" +echo "Hora ajustada para o log: $(TZ=$SELECTED_TZ date)" | tee -a "$LOG_FILE" + +# Verifica se o arquivo de log pode ser criado +if ! touch "$LOG_FILE"; then + echo "Erro: Não foi possível criar o arquivo de log $LOG_FILE. Verifique as permissões." + exit 1 +fi + +# Compactação de logs antigos +find "$CURRENT_LOG_DIR" -type f -mtime +30 -exec gzip {} \; -exec mv {}.gz "$ARCHIVED_LOG_DIR" \; + +# Verificação de versão do Node.js +{ + echo " " + echo "VERIFICANDO A VERSÃO DO NODE.JS" + echo " " +} | tee -a "$LOG_FILE" -# # Função para comparar versões utilizando dpkg -# compare_versions() { -# dpkg --compare-versions "$1" "lt" "$2" -# } +sleep 2 -# # Comparação de versões do Node.js -# if compare_versions "$CURRENT_NODE_VERSION" "18"; then -# echo "Versão do Node.js atual é inferior a 18. Atualizando para a 20.x..." | tee -a "$LOG_FILE" -# sudo apt-get remove -y nodejs | tee -a "$LOG_FILE" -# curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - | tee -a "$LOG_FILE" -# sudo apt-get install -y nodejs | tee -a "$LOG_FILE" -# sudo npm install -g npm | tee -a "$LOG_FILE" -# if [ $? -ne 0 ]; then -# echo "Erro ao atualizar o Node.js ou o npm. Saindo..." | tee -a "$LOG_FILE" -# exit 1 -# fi -# else -# echo "Versão do Node.js é 18 ou superior. Prosseguindo com a atualização..." | tee -a "$LOG_FILE" -# fi +NODE_PATH="/usr/bin/node" + +# Verifica se o Node.js está instalado +if [ ! -x "$NODE_PATH" ]; then + { + echo "Node.js não está instalado corretamente ou não foi encontrado. Instalando a versão 20.x..." + curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - + sudo apt-get install -y nodejs + sudo npm install -g npm + if [ $? -ne 0 ]; then + echo "Erro ao instalar o Node.js ou o npm. Saindo..." + exit 1 + fi + echo "Node.js instalado com sucesso." + exit 0 + } | tee -a "$LOG_FILE" +fi + +CURRENT_NODE_VERSION=$($NODE_PATH -v | cut -d'v' -f2) + +# Função para comparação de versões +version_less_than() { + [ "$(printf '%s\n' "$1" "$2" | sort -V | head -n1)" = "$1" ] +} + +# Atualização do Node.js, se necessário +if version_less_than "$CURRENT_NODE_VERSION" "18.0.0"; then + { + echo "Versão do Node.js atual ($CURRENT_NODE_VERSION) é inferior a 18. Atualizando para a versão 20.x..." + curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - + sudo apt-get install -y nodejs + sudo npm install -g npm + if [ $? -ne 0 ]; then + echo "Erro ao atualizar o Node.js ou o npm. Saindo..." + exit 1 + fi + echo "Node.js atualizado com sucesso para a versão 20.x." + } | tee -a "$LOG_FILE" +else + echo "A versão do Node.js instalada ($CURRENT_NODE_VERSION) é igual ou superior a 18. Prosseguindo..." | tee -a "$LOG_FILE" +fi sleep 2 -echo " " | tee -a "$LOG_FILE" -echo "BAIXANDO AS ATUALIZAÇÕES" | tee -a "$LOG_FILE" -echo " " | tee -a "$LOG_FILE" +{ + echo " " + echo "BAIXANDO AS ATUALIZAÇÕES" + echo " " +} | tee -a "$LOG_FILE" sleep 2 git reset --hard | tee -a "$LOG_FILE" git pull | tee -a "$LOG_FILE" -# if [ $? -ne 0 ]; then -# echo "Erro ao realizar o git pull. Saindo..." | tee -a "$LOG_FILE" -# exit 1 -# fi -echo " " | tee -a "$LOG_FILE" -echo "ACESSANDO O BACKEND" | tee -a "$LOG_FILE" -echo " " | tee -a "$LOG_FILE" +{ + echo " " + echo "ACESSANDO O BACKEND" + echo " " +} | tee -a "$LOG_FILE" sleep 2 -cd backend +cd backend || { + echo "Erro ao acessar o diretório do backend." | tee -a "$LOG_FILE" + exit 1 +} -echo " " | tee -a "$LOG_FILE" -echo "ATUALIZANDO OS ARQUIVOS DO BACKEND" | tee -a "$LOG_FILE" -echo " " | tee -a "$LOG_FILE" +{ + echo " " + echo "ATUALIZANDO OS ARQUIVOS DO BACKEND" + echo " " +} | tee -a "$LOG_FILE" sleep 2 sudo rm -rf node_modules | tee -a "$LOG_FILE" npm install | tee -a "$LOG_FILE" -# if [ $? -ne 0 ]; then -# echo "Erro ao instalar dependências do backend. Saindo..." | tee -a "$LOG_FILE" -# exit 1 -# fi + sudo rm -rf dist | tee -a "$LOG_FILE" npm run build | tee -a "$LOG_FILE" -echo " " | tee -a "$LOG_FILE" -echo "EXECUTANDO O DB:MIGRATE" | tee -a "$LOG_FILE" -echo " " | tee -a "$LOG_FILE" +{ + echo " " + echo "EXECUTANDO O DB:MIGRATE" + echo " " +} | tee -a "$LOG_FILE" sleep 2 npx sequelize db:migrate | tee -a "$LOG_FILE" -# if [ $? -ne 0 ]; then -# echo "Erro ao executar as migrações do banco de dados. Saindo..." | tee -a "$LOG_FILE" -# exit 1 -# fi -echo " " | tee -a "$LOG_FILE" -echo "EXECUTANDO O DB:SEED:ALL" | tee -a "$LOG_FILE" +{ + echo " " + echo "EXECUTANDO O DB:SEED:ALL" + echo " " +} | tee -a "$LOG_FILE" sleep 2 npx sequelize db:seed:all | tee -a "$LOG_FILE" -# if [ $? -ne 0 ]; then -# echo "Erro ao rodar seeds no banco de dados. Saindo..." | tee -a "$LOG_FILE" -# exit 1 -# fi -echo " " | tee -a "$LOG_FILE" -echo "ACESSANDO O FRONTEND" | tee -a "$LOG_FILE" -echo " " | tee -a "$LOG_FILE" +{ + echo " " + echo "ACESSANDO O FRONTEND" + echo " " +} | tee -a "$LOG_FILE" sleep 2 -cd ../frontend +cd ../frontend || { + echo "Erro ao acessar o diretório do frontend." | tee -a "$LOG_FILE" + exit 1 +} + +# Verifica o arquivo .env e adiciona REACT_APP_MASTERADMIN se necessário +if [ -f .env ]; then + if grep -q "^REACT_APP_MASTERADMIN=" .env; then + echo "A variável REACT_APP_MASTERADMIN já está presente no arquivo .env." | tee -a "$LOG_FILE" + else + echo "Adicionando a variável REACT_APP_MASTERADMIN ao final do arquivo .env." | tee -a "$LOG_FILE" + echo "" >>.env + echo "# Para permitir acesso apenas do MasterAdmin (sempre ON)" >>.env + echo "REACT_APP_MASTERADMIN=ON" >>.env + echo "A variável REACT_APP_MASTERADMIN foi adicionada ao final do arquivo .env." | tee -a "$LOG_FILE" + fi +else + echo "O arquivo .env não foi encontrado. O processo de instalação precisa ser finalizado antes de prosseguir." | tee -a "$LOG_FILE" + exit 1 +fi + +{ + echo " " + echo "VERIFICANDO O CONFIG.JSON" + echo " " +} | tee -a "$LOG_FILE" -# sleep 2 - -# echo " " | tee -a "$LOG_FILE" -# echo "VERIFICANDO O CONFIG.JSON" | tee -a "$LOG_FILE" -# echo " " | tee -a "$LOG_FILE" - -# sleep 2 +sleep 2 -# if [ ! -e src/config.json ]; then -# echo "Criando o arquivo config.json" | tee -a "$LOG_FILE" -# cp src/config.json.example src/config.json | tee -a "$LOG_FILE" -# else -# echo "O arquivo config.json já existe" | tee -a "$LOG_FILE" -# fi +if [ -e src/config.json ]; then + echo "O arquivo config.json existe. Excluindo o arquivo..." | tee -a "$LOG_FILE" + rm src/config.json + echo "Arquivo config.json excluído com sucesso." | tee -a "$LOG_FILE" +else + echo "O arquivo config.json não existe. Tudo certo, prosseguindo com a atualização." | tee -a "$LOG_FILE" +fi sleep 2 -echo " " | tee -a "$LOG_FILE" -echo "ATUALIZANDO OS ARQUIVOS DO FRONTEND" | tee -a "$LOG_FILE" -echo " " | tee -a "$LOG_FILE" +{ + echo " " + echo "ATUALIZANDO OS ARQUIVOS DO FRONTEND" + echo " " +} | tee -a "$LOG_FILE" sleep 2 sudo rm -rf node_modules | tee -a "$LOG_FILE" npm install | tee -a "$LOG_FILE" -# if [ $? -ne 0 ]; then -# echo "Erro ao instalar dependências do frontend. Saindo..." | tee -a "$LOG_FILE" -# exit 1 -# fi + sudo rm -rf build | tee -a "$LOG_FILE" npm run build | tee -a "$LOG_FILE" -echo " " | tee -a "$LOG_FILE" -echo "RESTART PM2" | tee -a "$LOG_FILE" -echo " " | tee -a "$LOG_FILE" +{ + echo " " + echo "RESTART PM2" + echo " " +} | tee -a "$LOG_FILE" sleep 2 -pm2 restart all | tee -a "$LOG_FILE" -# if [ $? -ne 0 ]; then -# echo "Erro ao reiniciar o PM2. Saindo..." | tee -a "$LOG_FILE" -# exit 1 -# fi - -echo " " | tee -a "$LOG_FILE" -echo "PRESS TICKET ATUALIZADO COM SUCESSO!!!" | tee -a "$LOG_FILE" -echo "Log de atualização salvo em: $LOG_FILE" +ENV_FILE="../backend/.env" + +if [ -f "$ENV_FILE" ]; then + PM2_FRONTEND=$(grep "^PM2_FRONTEND=" "$ENV_FILE" | cut -d '=' -f2) + PM2_BACKEND=$(grep "^PM2_BACKEND=" "$ENV_FILE" | cut -d '=' -f2) + + if [ -n "$PM2_FRONTEND" ] && [ -n "$PM2_BACKEND" ]; then + echo "Reiniciando PM2 com os IDs especificados..." | tee -a "$LOG_FILE" + pm2 restart "$PM2_FRONTEND" | tee -a "$LOG_FILE" + pm2 restart "$PM2_BACKEND" | tee -a "$LOG_FILE" + else + echo "Erro: IDs PM2_FRONTEND ou PM2_BACKEND não encontrados." | tee -a "$LOG_FILE" + exit 1 + fi +else + echo "Erro: Arquivo .env não encontrado no backend." | tee -a "$LOG_FILE" + exit 1 +fi + +{ + echo " " + echo "PRESS TICKET ATUALIZADO COM SUCESSO!!!" + echo "Log de atualização salvo em: $LOG_FILE" +} | tee -a "$LOG_FILE"