db-migrator.go

Форк
0
/
Makefile 
125 строк · 4.4 Кб
1
SHELL = /bin/bash -e
2
.DEFAULT_GOAL=help
3
BASEDIR=$(shell pwd)
4
GIT_BRANCH ?= $(shell git rev-parse --abbrev-ref HEAD 2>/dev/null)
5
GIT_COMMIT ?= $(shell git rev-parse --short HEAD)
6
GIT_TAG ?= $(shell git describe --tags --abbrev=0 HEAD 2>/dev/null || echo "v0.0.0")
7
VERSION = $(shell echo "${GIT_TAG}" | grep -Eo "v([0-9]+\.[0-9]+\.[0-9]+)" | cut -dv -f2)
8
export ${VERSION}
9
LDFLAGS=-ldflags "-s -w -X main.Version=${GIT_TAG} -X main.GitCommit=${GIT_COMMIT}"
10
REPORT_DIR ?= .report
11
BUILD_DIR ?= .build
12
PKG_NAME = db-migrator
13
APTLY_BASE_URL ?=
14
APTLY_REPO_MASTER ?= xenial
15
APTLY_DIST ?= xenial
16
APTLY_REPO ?= xenial
17
APTLY_PREFIX ?= $(shell [[ ${GIT_BRANCH} == "master" ]] && echo "stable" || echo "develop")
18
PACKAGE_FILE = "$(PKG_NAME)-$(VERSION).deb"
19
PKG_WORKDIR = "${BUILD_DIR}/${PKG_NAME}-${VERSION}"
20
DOCKER_ID_USER = raoptimus
21
DOCKER_PASS ?= ""
22
DOCKER_IMAGE = "${PKG_NAME}"
23
export GO_IMAGE_VERSION="1.22"
24

25
help: ## Show help message
26
	@cat $(MAKEFILE_LIST) | grep -e "^[a-zA-Z_\-]*: *.*## *" | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
27

28
version:
29
	@echo "VERSION: ${VERSION}"
30
	@echo "GIT_BRANCH: ${GIT_BRANCH}"
31
	@echo "GIT_TAG: ${GIT_TAG}"
32
	@echo "GIT_COMMIT: ${GIT_COMMIT}"
33

34
build-docker-image: ## Build docker image
35
	@docker login -u "${DOCKER_ID_USER}" -p "${DOCKER_PASS}" docker.io
36
	@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}:latest
49

50
build: help
51
	@[ -d ${BUILD_DIR} ] || mkdir -p ${BUILD_DIR}
52
	CGO_ENABLED=0 go build ${LDFLAGS} -o ${BUILD_DIR}/${PKG_NAME} cmd/${PKG_NAME}/main.go
53
	@file  ${BUILD_DIR}/${PKG_NAME}
54
	@du -h ${BUILD_DIR}/${PKG_NAME}
55

56
test-coverage: ## Coverage
57
	@[ -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

66
test-unit: ## Run only Unit tests
67
	@go test $$(go list ./... | grep -v mock) \
68
		-buildvcs=false \
69
		-failfast \
70
		-short \
71
		-timeout=2m \
72
		-v
73

74
test-integration: ## Run Integration Tests only
75
	@go test $$(go list ./... | grep -v mock) \
76
		-buildvcs=false \
77
		-failfast \
78
		-run Integration \
79
		-tags=integration \
80
		-v
81

82
build-deb: build
83
	@echo "deb package $(PKG_NAME) building..."
84
	@rm -rf ${BUILD_DIR}/${PKG_NAME}-*
85

86
	@mkdir -p ${PKG_WORKDIR}/DEBIAN
87
	@cp -r scripts/debian/* ${PKG_WORKDIR}/DEBIAN/
88

89
	@sed -i ${PKG_WORKDIR}/DEBIAN/control -e "s/<VERSION>/${VERSION}/" ${PKG_WORKDIR}/DEBIAN/control
90
	@sed -i ${PKG_WORKDIR}/DEBIAN/control -e "s/<PACKAGE>/${PKG_NAME}/" ${PKG_WORKDIR}/DEBIAN/control
91

92
	@mkdir -p ${PKG_WORKDIR}/opt/bin
93
	@cp ${BUILD_DIR}/${PKG_NAME} ${PKG_WORKDIR}/opt/bin/${PKG_NAME}
94

95
	@dpkg-deb --build $(PKG_WORKDIR) $(PKG_WORKDIR).deb
96
	@rm -rf ${PKG_WORKDIR}
97

98
publish-deb:
99
	# upload and publish
100
	@curl --fail --connect-timeout 5 -X POST -F file=@${BUILD_DIR}/${PACKAGE_FILE} ${APTLY_BASE_URL}/api/files/debian
101
	@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

104
lint: ## Run linter
105
	@[ -d ${REPORT_DIR} ] || mkdir -p ${REPORT_DIR}
106
	golangci-lint run --timeout 5m
107

108
install-mockery:
109
	@mockery --version &> /dev/null || go install github.com/vektra/mockery/v2@latest
110
	@mockery --version
111

112
gen-mocks: install-mockery ## Run mockery
113
	@bash -c 'for d in $$(find . ! -path "**/mock*" ! -path "**/.*" -name "**.go" -exec dirname {} \; | sort --unique); do \
114
	if [[ "$$d" ==  "." ]]; then continue; fi; \
115
	pkg=mock$$(basename -- "$${d/./''}"); \
116
	mockery --srcpkg=$${d} --outpkg=$${pkg} --output=$${d}/$${pkg} --all --with-expecter=true; \
117
	done; \
118
	'
119

120
gen-mocks-dry-run: install-mockery ## Run mockery --dry-run=true
121
	@bash -c 'for d in $$(find . ! -path "**/mock*" ! -path "**/.*" -name "**.go" -exec dirname {} \; | sort --unique); do \
122
	if [[ "$$d" ==  "." ]]; then continue; fi; \
123
	mockery --srcpkg=$${d} --output=$${d}/mock$$(basename -- "$${d/./''}") --all --dry-run=true; \
124
	done; \
125
	'
126

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.