Skip to content

Instantly share code, notes, and snippets.

@motopig
Last active March 27, 2019 09:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save motopig/70195535beec7e70b66ac258186bbdc0 to your computer and use it in GitHub Desktop.
Save motopig/70195535beec7e70b66ac258186bbdc0 to your computer and use it in GitHub Desktop.
a golang makefile demo
SHELL:=/bin/bash
OUTPUT=server
PRODUCTION_OUTPUT=project_name
QA_OUTPUT=project_qa
PRODUCTION_USER_CREATE=user_create
QA_USER_CREATE=user_create
PRODUCTION_GOOS=linux
PRODUCTION_GOARCH=amd64
PRODUCTION_RESTART=systemctl restart ${PRODUCTION_OUTPUT}.service
QA_RESTART=systemctl restart ${QA_OUTPUT}.service
SSH_URL=deploy@haierding
BUILD_TIME := $(shell /bin/date +%Y-%m-%d_%H:%M:%S_%a)
QA_VERSION := $(shell /bin/date +%Y-%m-%d_%H:%M:%S_%a)_QA
# Setup the -ldflags option for go build here, interpolate the variable values
LDFLAGS_development=-ldflags "-X main.version=development"
LDFLAGS_production=-ldflags "-X main.version=${BUILD_TIME}"
LDFLAGS_qa=-ldflags "-X main.version=${QA_VERSION}"
# Builds the project
build:
go build ${LDFLAGS_development} -o ${OUTPUT} server.go
production:
env GOOS=${PRODUCTION_GOOS} GOARCH=${PRODUCTION_GOARCH} go build ${LDFLAGS_production} -o ${PRODUCTION_OUTPUT} server.go
env GOOS=${PRODUCTION_GOOS} GOARCH=${PRODUCTION_GOARCH} go build ${LDFLAGS_production} -o ${PRODUCTION_USER_CREATE} create_user.go
qa:
env GOOS=${PRODUCTION_GOOS} GOARCH=${PRODUCTION_GOARCH} go build ${LDFLAGS_qa} -o ${QA_OUTPUT} server.go
env GOOS=${PRODUCTION_GOOS} GOARCH=${PRODUCTION_GOARCH} go build ${LDFLAGS_qa} -o ${QA_USER_CREATE} create_user.go
sync_qa:
rsync -a --delete ${QA_USER_CREATE} ./migration ${QA_USER_CREATE} ${QA_OUTPUT} ${SSH_URL}:/var/www/project_qa/
sync_exe:
rsync -a --delete ./migration ${PRODUCTION_USER_CREATE} ${PRODUCTION_OUTPUT} ${SSH_URL}:/var/www/project_name/
sync_doc:
rsync -a --delete README.html ${SSH_URL}:/var/www/project_name/
rsync -a --delete manager_doc.html ${SSH_URL}:/var/www/project_name/
sync_doc_qa:
rsync -a --delete README.html ${SSH_URL}:/var/www/project_qa/
rsync -a --delete manager_doc.html ${SSH_URL}:/var/www/project_qa/
restart_app:
ssh ${SSH_URL} "echo ${PRODUCTION_RESTART} | sudo bash"
restart_qa:
ssh ${SSH_URL} "echo ${QA_RESTART} | sudo bash"
release: production sync_exe sync_doc restart_app check_deploy clean
release_qa: qa sync_qa sync_doc_qa restart_qa check_qa clean
#all of makefile variables must expanded before read
check_deploy:
@if [ "`curl -s --insecure -X GET https://demo.com/version`" = "$(BUILD_TIME)" ]; then\
echo -e "deploy successful";\
else\
echo -e "deploy failed";\
fi
check_qa:
@if [ "`curl -s --insecure -X GET http://172.1.1.1:9527/version`" = "$(QA_VERSION)" ]; then\
echo -e "deploy successful";\
else\
echo -e "deploy failed";\
fi
clean:
@if [ -f ${PRODUCTION_OUTPUT} ] ; then rm ${PRODUCTION_OUTPUT} ; fi
@if [ -f ${QA_OUTPUT} ] ; then rm ${QA_OUTPUT} ; fi
@if [ -f ${OUTPUT} ] ; then rm ${OUTPUT} ; fi
@if [ -f ${PRODUCTION_USER_CREATE} ] ; then rm ${PRODUCTION_USER_CREATE} ; fi
@if [ -f ${QA_USER_CREATE} ] ; then rm ${QA_USER_CREATE} ; fi
docs:
-make kill-docs
nohup godoc -play -http=127.0.0.1:9527 </dev/null >/dev/null 2>&1 & echo $$! > .godoc.pid
cat .godoc.pid
kill-docs:
@cat .godoc.pid
kill -9 $$(cat .godoc.pid)
rm .godoc.pid
.PHONY: clean install
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment