diff --git a/node/release_autorun.sh b/node/release_autorun.sh new file mode 100755 index 0000000..1649541 --- /dev/null +++ b/node/release_autorun.sh @@ -0,0 +1,65 @@ +#!/bin/bash + +start_process() { + version=$(cat config/version.go | grep -A 1 "func GetVersion() \[\]byte {" | grep -Eo '0x[0-9a-fA-F]+' | xargs printf "%d.%d.%d") + if [[ "$OSTYPE" == "linux-gnu"* ]]; then + if [[ $(uname -m) == "aarch64"* ]]; then + ./node-$version-linux-arm64 & + main_process_id=$! + else + ./node-$version-linux-amd64 & + main_process_id=$! + fi + elif [[ "$OSTYPE" == "darwin"* ]]; then + ./node-$version-darwin-arm64 & + main_process_id=$! + else + echo "unsupported OS for releases, please build from source" + exit 1 + fi + + echo "process started with PID $main_process_id" +} + +is_process_running() { + ps -p $main_process_id > /dev/null 2>&1 + return $? +} + +kill_process() { + local process_count=$(ps -ef | grep "node-$version" | grep -v grep | wc -l) + local process_pids=$(ps -ef | grep "node-$version" | grep -v grep | awk '{print $2}' | xargs) + + if [ $process_count -gt 0 ]; then + echo "killing processes $process_pids" + kill $process_pids + else + echo "no processes running" + fi +} + +kill_process + +start_process + +while true; do + if ! is_process_running; then + echo "process crashed or stopped. restarting..." + start_process + fi + + git fetch + + local_head=$(git rev-parse HEAD) + remote_head=$(git rev-parse @{u}) + + if [ "$local_head" != "$remote_head" ]; then + kill_process + + git pull + + start_process + fi + + sleep 43200 +done