Skip to content

Instantly share code, notes, and snippets.

@Maksclub
Created September 15, 2022 17:50
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 Maksclub/dc99ca9bc86b32993b9231713032e790 to your computer and use it in GitHub Desktop.
Save Maksclub/dc99ca9bc86b32993b9231713032e790 to your computer and use it in GitHub Desktop.
################################################################
# 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