Created
September 15, 2022 17:50
-
-
Save Maksclub/dc99ca9bc86b32993b9231713032e790 to your computer and use it in GitHub Desktop.
This file contains 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
################################################################ | |
# MIGRATIONS | |
################################################################ | |
LOCAL_BIN := $(CURDIR)/bin | |
GOOSE_VERSION :=v2.7.0 | |
GOOSE_BIN := $(LOCAL_BIN)/goose | |
# Директория с миграцими | |
MIGRATIONS_DIR := ./app/migrations | |
ifneq (,$(wildcard ./.env)) | |
include .env | |
export | |
endif | |
.PHONY: install-goose | |
install-goose: | |
$(call fn_install_goutil,github.com/pressly/goose/cmd/goose,$(GOOSE_VERSION),$(GOOSE_BIN),"-tags='no_mysql no_sqlite3'") | |
.PHONY: migrate | |
migrate: install-goose | |
ifneq ($(wildcard $(MIGRATIONS_DIR)),) | |
@[ -z "${DB_DSN}" ] && echo "DB_DSN variable is empty!" && exit 1 || \ | |
$(GOOSE_BIN) -dir $(MIGRATIONS_DIR) postgres "${DB_DSN}" up | |
endif | |
.PHONY: migration | |
migration: install-goose | |
ifneq ($(wildcard $(MIGRATIONS_DIR)),) | |
@read -p "Enter migration name: " migration_name; \ | |
$(GOOSE_BIN) -dir $(MIGRATIONS_DIR) create $$migration_name sql | |
endif | |
# fn_install_goutil устанавливает бинарь из гошного пакета. | |
# Параметры: | |
# 1 - uri пакета для сборки бинаря; | |
# 2 - версия пакета вида vX.Y.Z или latest; | |
# 3 - полный путь для установки бинаря. | |
# 4 - опциональные build флаги | |
# Работает не через go install, чтобы иметь возможность использовать разные версии в разных модулях и не добавлять пакет в зависимости текущего модуля. | |
# Проверяет наличие бинаря, создаёт временную директорию, инициализирует в ней временный модуль, в котором вызывает установку и сборку бинаря. | |
define fn_install_goutil | |
@[ ! -f $(3)@$(2) ] \ | |
|| exit 0 \ | |
&& echo "Install $(1) ..." \ | |
&& tmp=$$(mktemp -d) \ | |
&& cd $$tmp \ | |
&& echo "Module: $(1)" \ | |
&& echo "Version: $(2)" \ | |
&& echo "Binary: $(3)" \ | |
&& echo "Temp: $$tmp" \ | |
&& go mod init temp && go get -d $(1)@$(2) && go build $(4) -o $(3)@$(2) $(1) \ | |
&& ln -sf $(3)@$(2) $(3) \ | |
&& rm -rf $$tmp \ | |
&& echo "$(3) installed!" \ | |
&& echo "********************************" | |
endef |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment