Created
August 3, 2020 08:52
-
-
Save jedna/43e8aed10bb788214886a7f7e100919f to your computer and use it in GitHub Desktop.
Simple bash live reload for Go
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
SERVER=/go/bin/api | |
# create directory for Delve logs, we use it to know that Delve | |
# debugger is running | |
mkdir -p /tmp/dlv_log | |
runServer() { | |
echo Running server | |
# create directory and file to | |
touch /tmp/dlv_log/output.log | |
# run server with debug | |
dlv --headless=true --continue --listen=:2345 --accept-multiclient --api-version=2 exec \ | |
"$SERVER" | tee -a /tmp/dlv_log/output.log & | |
until serverPid=$(pidof $SERVER) | |
do | |
sleep 1 | |
done | |
pidof dlv > /tmp/dlv.pid | |
echo "$serverPid" > /tmp/server.pid | |
echo Delve PID: "$(pidof dlv)", Server PID: "$serverPid" | |
} | |
killRunningServer() { | |
if [ -f /tmp/dlv.pid ] | |
then | |
echo killing old Delve, PID: "$(cat /tmp/dlv.pid)" | |
# we can't "wait" the process because it's not a child | |
kill "$(cat /tmp/dlv.pid)" | |
while [ -e /proc/"$(cat /tmp/dlv.pid)" ]; do sleep .5; done | |
rm -f /tmp/dlv.pid | |
fi | |
if [ -f /tmp/server.pid ] | |
then | |
echo killing old server, PID: "$(cat /tmp/server.pid)" | |
kill "$(cat /tmp/server.pid)" | |
while [ -e /proc/"$(cat /tmp/server.pid)" ]; do sleep .5; done | |
rm -f /tmp/server.pid | |
fi | |
} | |
buildServer() { | |
echo Building... | |
go install -gcflags="all=-N -l" ./... | |
} | |
rerunServer () { | |
buildServer | |
killRunningServer | |
runServer | |
} | |
lockBuild() { | |
# waiting for the file to delete | |
while [ -f /tmp/server.lock ] | |
do | |
sleep 1 | |
done | |
touch /tmp/server.lock | |
} | |
unlockBuild() { | |
# remove lock file | |
rm -f /tmp/server.lock | |
} | |
# run the server for the first time | |
buildServer | |
runServer | |
inotifywait -e create,delete,modify -r -m --format "%f" ./ | while read -r file | |
do | |
lockBuild | |
if [[ $file == *.go ]]; then | |
echo File changed: "$file" | |
rerunServer | |
fi | |
unlockBuild | |
done |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment