143 lines
4.7 KiB
Makefile
Executable File
143 lines
4.7 KiB
Makefile
Executable File
dpl ?= .env
|
|
include $(dpl)
|
|
export $(shell sed 's/=.*//' $(dpl))
|
|
|
|
TAG_COMMIT := $(shell git rev-list --abbrev-commit --tags --max-count=1)
|
|
TAG := $(shell git describe --abbrev=0 --tags ${TAG_COMMIT} 2>/dev/null || true)
|
|
COMMIT := $(shell git rev-parse --short HEAD)
|
|
DATE := $(shell git log -1 --format=%cd --date=format:"%Y%m%d%H%M%S")
|
|
VERSION := v$(TAG:v%=%)-$(DATE)-$(COMMIT)
|
|
BLACK := $(shell tput -Txterm setaf 0)
|
|
RED := $(shell tput -Txterm setaf 1)
|
|
GREEN := $(shell tput -Txterm setaf 2)
|
|
YELLOW := $(shell tput -Txterm setaf 3)
|
|
LIGHTPURPLE := $(shell tput -Txterm setaf 4)
|
|
PURPLE := $(shell tput -Txterm setaf 5)
|
|
BLUE := $(shell tput -Txterm setaf 6)
|
|
WHITE := $(shell tput -Txterm setaf 7)
|
|
RESET := $(shell tput -Txterm sgr0)
|
|
APPLICATION_NAME := $(shell echo $(APP_NAME) | sed -e 's/[^[:alnum:]]/-/g' | tr -s '-' | tr A-Z a-z)
|
|
|
|
ifneq ($(shell git status --porcelain),)
|
|
VERSION := $(VERSION)-dirty
|
|
endif
|
|
|
|
FLAGS := -ldflags "-X github.com/sujit-baniya/fiber-boilerplate/app.Version=$(VERSION)"
|
|
BUILD_PATH := $(shell pwd)/build
|
|
PID := $(shell lsof -t -i:$(APP_PORT))
|
|
RELEASE_PATH := $(BUILD_PATH)/releases
|
|
SHARED_PATH := $(BUILD_PATH)/shared
|
|
CURRENT_PATH := $(BUILD_PATH)/current
|
|
CURRENT_RELEASE := "dev"
|
|
PREVIOUS_RELEASE := "dev"
|
|
ifneq ("$(wildcard $(CURRENT_PATH)/CURRENT-RELEASE)","")
|
|
CURRENT_RELEASE := $(shell cat $(CURRENT_PATH)/CURRENT-RELEASE)
|
|
endif
|
|
ifneq ("$(wildcard $(CURRENT_PATH)/PREVIOUS-RELEASE)","")
|
|
PREVIOUS_RELEASE := $(shell cat $(CURRENT_PATH)/PREVIOUS-RELEASE)
|
|
endif
|
|
|
|
ROLLBACK_RELEASE := $(RELEASE_PATH)/$(RELEASE_TAG)
|
|
|
|
LATEST_RELEASE := $(APPLICATION_NAME)-$(VERSION)
|
|
LATEST_RELEASE_PATH := $(RELEASE_PATH)/$(LATEST_RELEASE)
|
|
|
|
create-folder:
|
|
$(info $(GREEN)Create Release Folder: $(LATEST_RELEASE)$(RESET))
|
|
$(shell mkdir -p $(RELEASE_PATH)/$(LATEST_RELEASE))
|
|
$(shell mkdir -p $(SHARED_PATH)/$(STORAGE_PATH))
|
|
$(shell mkdir -p $(SHARED_PATH)/$(UPLOAD_PATH))
|
|
|
|
git-stash:
|
|
$(info $(GREEN)Stashing current changes$(RESET))
|
|
cd $(LATEST_RELEASE_PATH) && git stash
|
|
|
|
git-checkout:
|
|
$(info $(GREEN)Checkingout Master branch$(RESET))
|
|
cd $(LATEST_RELEASE_PATH) && git checkout master && git pull origin master
|
|
|
|
git-push:
|
|
$(info $(GREEN)Adding all changed files and push $(RESET))
|
|
cd $(LATEST_RELEASE_PATH) && git add . && git commit -m $(COMMIT_MESSAGE) && git push origin master
|
|
|
|
dev-push:
|
|
$(info $(GREEN)Adding all changed files and push for dev $(RESET))
|
|
git add . && git commit -m "$(COMMIT_MESSAGE)" && git push origin master
|
|
|
|
build-app:
|
|
$(info $(GREEN)Building the application: $(APPLICATION_NAME)$(RESET))
|
|
$(shell go build $(FLAGS) -o $(RELEASE_PATH)/$(LATEST_RELEASE)/$(APPLICATION_NAME) main.go)
|
|
|
|
copy-config:
|
|
$(info $(GREEN)Copying config, assets and .env file$(RESET))
|
|
$(shell cp .env $(RELEASE_PATH)/$(LATEST_RELEASE)/ && \
|
|
cp config.yml $(RELEASE_PATH)/$(LATEST_RELEASE)/ && \
|
|
cp -R assets $(RELEASE_PATH)/$(LATEST_RELEASE)/ \
|
|
)
|
|
|
|
install-fe-dependencies:
|
|
$(info $(GREEN)Installing Frontend dependencies$(RESET))
|
|
$(shell yarn install >/dev/null)
|
|
|
|
compile-fe:
|
|
$(info $(GREEN)Compiling Frontend assets$(RESET))
|
|
$(shell yarn install >/dev/null && \
|
|
yarn run prod >/dev/null || true \
|
|
)
|
|
|
|
copy-assets:
|
|
$(info $(GREEN)Copying Assets$(RESET))
|
|
$(shell cp -R public $(RELEASE_PATH)/$(LATEST_RELEASE)/ && \
|
|
cp -R resources $(RELEASE_PATH)/$(LATEST_RELEASE)/ \
|
|
)
|
|
|
|
create-symlink:
|
|
$(info $(GREEN)Creating Current folder symlink$(RESET))
|
|
$(shell ln -snf $(SHARED_PATH)/$(STORAGE_PATH) $(RELEASE_PATH)/$(LATEST_RELEASE)/$(STORAGE_PATH))
|
|
$(shell ln -snf $(SHARED_PATH)/$(UPLOAD_PATH) $(RELEASE_PATH)/$(LATEST_RELEASE)/$(UPLOAD_PATH))
|
|
$(shell ln -snf $(RELEASE_PATH)/$(LATEST_RELEASE) $(CURRENT_PATH))
|
|
$(shell echo $(CURRENT_RELEASE) > $(CURRENT_PATH)/PREVIOUS-RELEASE)
|
|
$(shell echo $(LATEST_RELEASE_PATH) > $(CURRENT_PATH)/CURRENT-RELEASE)
|
|
|
|
migrate:
|
|
$(info $(GREEN)Starting migrating$(RESET))
|
|
cd $(CURRENT_PATH) && ./$(APPLICATION_NAME) --migrate
|
|
|
|
build: create-folder git-checkout build-app copy-config copy-assets create-symlink migrate
|
|
|
|
deploy: build restart
|
|
|
|
push: install-fe-dependencies compile-fe dev-push
|
|
|
|
start:
|
|
$(info $(GREEN)Starting application$(RESET))
|
|
cd $(CURRENT_PATH) && ./$(APPLICATION_NAME) </dev/null &>/dev/null &
|
|
|
|
kill:
|
|
ifneq ($(PID),)
|
|
$(info $(RED)Stopping application on port $(APP_PORT)$(RESET))
|
|
kill -9 $(PID)
|
|
else
|
|
$(info $(YELLOW)Application not found on port $(APP_PORT)$(RESET))
|
|
endif
|
|
|
|
restart: kill start
|
|
|
|
rollback:
|
|
ifneq ($(PREVIOUS_RELEASE),)
|
|
$(info Rolling Back to Previous Release: $(PREVIOUS_RELEASE))
|
|
$(shell ln -snf $(PREVIOUS_RELEASE) $(CURRENT_PATH))
|
|
endif
|
|
|
|
rollback-to:
|
|
ifneq ($(wildcard $(ROLLBACK_RELEASE)),)
|
|
$(info Rolling Back to Release: $(ROLLBACK_RELEASE))
|
|
$(shell ln -snf $(ROLLBACK_RELEASE) $(CURRENT_PATH))
|
|
endif
|
|
|
|
run:
|
|
go run $(FLAGS) main.go
|
|
|
|
install:
|
|
go install $(FLAGS)
|