Deploy automático

mail@pastecode.io avatar
unknown
sh
7 months ago
3.1 kB
5
Indexable
Never
#!/bin/bash

#
# repo - folder com clone.
# source - folder com o clone (ui).
# target - folder intermédio para verificações de testes e compilação.
# production - folder de produção, onde o sistema está a correr.
#
repo_path="/root/RobDroneGo/SEM5_PI"
repo_ui_path="/root/RobDroneGo/SEM5_PI/ui2/"
source_path="/root/RobDroneGo/SEM5_PI/ui2"
production_path="/root/production/SEM5_PI/"
production_ui_path="/root/production/SEM5_PI/ui2/"

# Token de autenticação do GitHub.
access_token="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"

# Caminho para ficheiro de logs.
audit_log="/root/audit_log.txt"

# Função para formatar e escrever logs no ficheiro.
log_message() {
    local timestamp=$(date +"[%d-%m-%Y %T] - ")
    echo "$timestamp $1" >> "$audit_log"
}

# Redireciona todo o output para o audit_log.
exec >> "$audit_log" 2>&1

cd "$repo_path" || exit

# Verifica se o repo local está para trás na branch.
if [ "$(git fetch && git status -uno | grep 'Your branch is behind')" > /dev/null ]; then

    git pull origin main > /dev/null

    diff --exclude=node_modules -r  --exclude=.angular "$repo_ui_path" "$production_ui_path" > /dev/null

    # Compara o source com production (excluindo os node_modules).
    if  [ "$?" -gt 0 ]; then
        log_message "There are no updates on frontend."
        exit -1
    fi

    # Executa os testes de unidade.
    npm run test > /dev/null

    if [ "$?" -gt 0 ]; then
        log_message "Unit tests failed."
        exit -1
    fi

    # Executa teste de compilação.
    #/root/compile_test.sh > /dev/null

    #if [ $? -eq -1 ]; then
#       log_message "Compilation error."
#    fi

    cd "$production_path" || exit

    # Faz o pull na produção.
    git pull origin main > /dev/null

    # Procura o PID que está a executar o frontend.
    pid=$(ps aux | grep "ng serve --host 0.0.0.0" | grep -v grep | awk '{print $2}')

    if [ "$pid" -ne 1 ]; then
        # Termina o processo.
        kill -SIGKILL $pid
    fi

    cd "$production_ui_path" || exit

    /usr/local/bin/ng serve --host 0.0.0.0 & > /dev/null

    log_message "New version deployed successfully."
    exit 0

    # Corre script de teste de compilação.
#    if /root/compile_test.sh > /dev/null; then

        # Se existirem diferenças entre o target e a produção, é feita a atualização.
        #if diff -r "$repo_path" "$production_path" > /dev/null; then
        #    log_message "No updates on front-end module"
        #    exit -1
        #else
        #    /usr/bin/npm run test > /dev/null
        #    if [ $? -eq 0 ]; then
        #        ps aux | grep "ng serve"
#               kill -SIGKILL $?
        #       log_message "Update and copy completed successfully."
        #       cp -r "$source_path"/* "$production_path"
        #       ng serve
#               exit 0
#           else
#               log_message "Unit tests faled."
#           fi#
#       fi
#    else
#        log_message "Compile errors!"
#       exit -1
#    fi
else
    log_message "Local branch is up to date. No need to update or copy."
fi
Leave a Comment