Initial commit
This commit is contained in:
@@ -0,0 +1,142 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user