db-migrator.go
/
Makefile
125 строк · 4.4 Кб
1SHELL = /bin/bash -e2.DEFAULT_GOAL=help3BASEDIR=$(shell pwd)4GIT_BRANCH ?= $(shell git rev-parse --abbrev-ref HEAD 2>/dev/null)5GIT_COMMIT ?= $(shell git rev-parse --short HEAD)6GIT_TAG ?= $(shell git describe --tags --abbrev=0 HEAD 2>/dev/null || echo "v0.0.0")7VERSION = $(shell echo "${GIT_TAG}" | grep -Eo "v([0-9]+\.[0-9]+\.[0-9]+)" | cut -dv -f2)8export ${VERSION}9LDFLAGS=-ldflags "-s -w -X main.Version=${GIT_TAG} -X main.GitCommit=${GIT_COMMIT}"10REPORT_DIR ?= .report11BUILD_DIR ?= .build12PKG_NAME = db-migrator13APTLY_BASE_URL ?=14APTLY_REPO_MASTER ?= xenial15APTLY_DIST ?= xenial16APTLY_REPO ?= xenial17APTLY_PREFIX ?= $(shell [[ ${GIT_BRANCH} == "master" ]] && echo "stable" || echo "develop")18PACKAGE_FILE = "$(PKG_NAME)-$(VERSION).deb"19PKG_WORKDIR = "${BUILD_DIR}/${PKG_NAME}-${VERSION}"20DOCKER_ID_USER = raoptimus21DOCKER_PASS ?= ""22DOCKER_IMAGE = "${PKG_NAME}"23export GO_IMAGE_VERSION="1.22"24
25help: ## Show help message26@cat $(MAKEFILE_LIST) | grep -e "^[a-zA-Z_\-]*: *.*## *" | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'27
28version:29@echo "VERSION: ${VERSION}"30@echo "GIT_BRANCH: ${GIT_BRANCH}"31@echo "GIT_TAG: ${GIT_TAG}"32@echo "GIT_COMMIT: ${GIT_COMMIT}"33
34build-docker-image: ## Build docker image35@docker login -u "${DOCKER_ID_USER}" -p "${DOCKER_PASS}" docker.io36@docker build \37--platform linux/x86_64 \
38--build-arg VERSION=${VERSION} \39--build-arg GIT_BRANCH=${GIT_BRANCH} \40--build-arg GIT_COMMIT=${GIT_COMMIT} \41--build-arg GIT_TAG=${GIT_TAG} \42--build-arg GO_IMAGE_VERSION=${GO_IMAGE_VERSION} \43-f ./docker/image/build/Dockerfile \
44-t ${DOCKER_ID_USER}/${DOCKER_IMAGE}:"${VERSION}-alpine" \45-t ${DOCKER_ID_USER}/${DOCKER_IMAGE}:latest ./46
47@docker push ${DOCKER_ID_USER}/${DOCKER_IMAGE}:"${VERSION}-alpine"48@docker push ${DOCKER_ID_USER}/${DOCKER_IMAGE}:latest49
50build: help51@[ -d ${BUILD_DIR} ] || mkdir -p ${BUILD_DIR}52CGO_ENABLED=0 go build ${LDFLAGS} -o ${BUILD_DIR}/${PKG_NAME} cmd/${PKG_NAME}/main.go53@file ${BUILD_DIR}/${PKG_NAME}54@du -h ${BUILD_DIR}/${PKG_NAME}55
56test-coverage: ## Coverage57@[ -d ${REPORT_DIR} ] || mkdir -p ${REPORT_DIR}58@-go test \59-cover \
60-covermode=atomic \61-coverprofile=${REPORT_DIR}/coverage.txt \62./... \
63-timeout=2m \64-v
65
66test-unit: ## Run only Unit tests67@go test $$(go list ./... | grep -v mock) \68-buildvcs=false \69-failfast \
70-short \
71-timeout=2m \72-v
73
74test-integration: ## Run Integration Tests only75@go test $$(go list ./... | grep -v mock) \76-buildvcs=false \77-failfast \
78-run Integration \
79-tags=integration \80-v
81
82build-deb: build83@echo "deb package $(PKG_NAME) building..."84@rm -rf ${BUILD_DIR}/${PKG_NAME}-*85
86@mkdir -p ${PKG_WORKDIR}/DEBIAN87@cp -r scripts/debian/* ${PKG_WORKDIR}/DEBIAN/88
89@sed -i ${PKG_WORKDIR}/DEBIAN/control -e "s/<VERSION>/${VERSION}/" ${PKG_WORKDIR}/DEBIAN/control90@sed -i ${PKG_WORKDIR}/DEBIAN/control -e "s/<PACKAGE>/${PKG_NAME}/" ${PKG_WORKDIR}/DEBIAN/control91
92@mkdir -p ${PKG_WORKDIR}/opt/bin93@cp ${BUILD_DIR}/${PKG_NAME} ${PKG_WORKDIR}/opt/bin/${PKG_NAME}94
95@dpkg-deb --build $(PKG_WORKDIR) $(PKG_WORKDIR).deb96@rm -rf ${PKG_WORKDIR}97
98publish-deb:99# upload and publish100@curl --fail --connect-timeout 5 -X POST -F file=@${BUILD_DIR}/${PACKAGE_FILE} ${APTLY_BASE_URL}/api/files/debian101@curl --fail --connect-timeout 5 -X POST ${APTLY_BASE_URL}/api/repos/${APTLY_REPO}/file/debian/${PACKAGE_FILE}102@curl --fail --connect-timeout 5 -X PUT ${APTLY_BASE_URL}/api/publish/filesystem:ci:${APTLY_PREFIX}/${APTLY_DIST}103
104lint: ## Run linter105@[ -d ${REPORT_DIR} ] || mkdir -p ${REPORT_DIR}106golangci-lint run --timeout 5m
107
108install-mockery:109@mockery --version &> /dev/null || go install github.com/vektra/mockery/v2@latest110@mockery --version111
112gen-mocks: install-mockery ## Run mockery113@bash -c 'for d in $$(find . ! -path "**/mock*" ! -path "**/.*" -name "**.go" -exec dirname {} \; | sort --unique); do \114if [[ "$$d" == "." ]]; then continue; fi; \
115pkg=mock$$(basename -- "$${d/./''}"); \116mockery --srcpkg=$${d} --outpkg=$${pkg} --output=$${d}/$${pkg} --all --with-expecter=true; \
117done; \
118'
119
120gen-mocks-dry-run: install-mockery ## Run mockery --dry-run=true121@bash -c 'for d in $$(find . ! -path "**/mock*" ! -path "**/.*" -name "**.go" -exec dirname {} \; | sort --unique); do \122if [[ "$$d" == "." ]]; then continue; fi; \
123mockery --srcpkg=$${d} --output=$${d}/mock$$(basename -- "$${d/./''}") --all --dry-run=true; \124done; \
125'
126