Last active
March 27, 2019 09:56
-
-
Save motopig/70195535beec7e70b66ac258186bbdc0 to your computer and use it in GitHub Desktop.
a golang makefile demo
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
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