github.com/mailru/activerecord@v1.12.2/Makefile (about) 1 PWD = $(CURDIR) 2 # Название сервиса 3 SERVICE_NAME = argen 4 # 8 символов последнего коммита 5 LAST_COMMIT_HASH = $(shell git rev-parse HEAD | cut -c -8) 6 # Таймаут для тестов 7 TEST_TIMEOUT?=30s 8 # Тег golang-ci 9 GOLANGCI_TAG:=1.54.2 10 # Путь до бинарников 11 LOCAL_BIN:=$(CURDIR)/bin 12 # Путь до бинарника golang-ci 13 GOLANGCI_BIN:=$(LOCAL_BIN)/golangci-lint 14 # Минимальная верси гошки 15 MIN_GO_VERSION = 1.19.0 16 # Версии для сборки 17 RELEASE = $(shell git describe --tags --always) 18 # Время сборки 19 BUILD_DATE = $(shell TZ=UTC-3 date +%Y%m%d-%H%M) 20 # Операционка 21 OSNAME = $(shell uname) 22 # ld флаги 23 LD_FLAGS = "-X 'main.BuildCommit=$(LAST_COMMIT_HASH)' -X 'main.Version=$(RELEASE)' -X 'main.BuildTime=$(BUILD_DATE)' -X 'main.BuildOS=$(OSNAME)'" 24 # по дефолту просто make соберёт argen 25 default: build 26 27 # Добавляет флаг для тестирования на наличие гонок 28 ifdef GO_RACE_DETECTOR 29 FLAGS += -race 30 endif 31 32 ##################### Проверки для запуска golang-ci ##################### 33 # Проверка локальной версии бинаря 34 ifneq ($(wildcard $(GOLANGCI_BIN)),) 35 GOLANGCI_BIN_VERSION:=$(shell $(GOLANGCI_BIN) --version) 36 ifneq ($(GOLANGCI_BIN_VERSION),) 37 GOLANGCI_BIN_VERSION_SHORT:=$(shell echo "$(GOLANGCI_BIN_VERSION)" | sed -E 's/.* version (.*) built from .* on .*/\1/g') 38 else 39 GOLANGCI_BIN_VERSION_SHORT:=0 40 endif 41 ifneq "$(GOLANGCI_TAG)" "$(word 1, $(sort $(GOLANGCI_TAG) $(GOLANGCI_BIN_VERSION_SHORT)))" 42 GOLANGCI_BIN:= 43 endif 44 endif 45 46 # Проверка глобальной версии бинаря 47 ifneq (, $(shell which golangci-lint)) 48 GOLANGCI_VERSION:=$(shell golangci-lint --version 2> /dev/null ) 49 ifneq ($(GOLANGCI_VERSION),) 50 GOLANGCI_VERSION_SHORT:=$(shell echo "$(GOLANGCI_VERSION)"|sed -E 's/.* version (.*) built from .* on .*/\1/g') 51 else 52 GOLANGCI_VERSION_SHORT:=0 53 endif 54 ifeq "$(GOLANGCI_TAG)" "$(word 1, $(sort $(GOLANGCI_TAG) $(GOLANGCI_VERSION_SHORT)))" 55 GOLANGCI_BIN:=$(shell which golangci-lint) 56 endif 57 endif 58 ##################### Конец проверок golang-ci ##################### 59 60 # Устанавливает линтер 61 .PHONY: install-lint 62 install-lint: 63 ifeq ($(wildcard $(GOLANGCI_BIN)),) 64 $(info #Downloading golangci-lint v$(GOLANGCI_TAG)) 65 tmp=$$(mktemp -d) && cd $$tmp && pwd && go mod init temp && go get -d github.com/golangci/golangci-lint/cmd/golangci-lint@v$(GOLANGCI_TAG) && \ 66 go build -ldflags "-X 'main.version=$(GOLANGCI_TAG)' -X 'main.commit=test' -X 'main.date=test'" -o $(LOCAL_BIN)/golangci-lint github.com/golangci/golangci-lint/cmd/golangci-lint && \ 67 rm -rf $$tmp 68 GOLANGCI_BIN:=$(LOCAL_BIN)/golangci-lint 69 endif 70 71 # Линтер проверяет лишь отличия от мастера 72 .PHONY: lint 73 lint: install-lint 74 $(GOLANGCI_BIN) run --config=.golangci.yml ./... --new-from-rev=origin/main --build-tags=activerecord 75 76 # Линтер проходится по всему коду 77 .PHONY: full-lint 78 full-lint: install-lint 79 $(GOLANGCI_BIN) run --config=.golangci.yml ./... --build-tags=activerecord 80 81 # создание отчета о покрытии тестами 82 .PHONY: cover 83 cover: 84 go test -timeout=$(TEST_TIMEOUT) -v -coverprofile=coverage.out ./... && go tool cover -html=coverage.out 85 86 # Запустить unit тесты 87 .PHONY: test 88 test: 89 echo "Start testing activerecord \n" 90 go test -parallel=10 $(PWD)/... -coverprofile=cover.out -timeout=$(TEST_TIMEOUT) 91 92 .PHONY: install 93 install: 94 go install -ldflags=$(LD_FLAGS) ./... 95 96 # Сборка сервиса 97 .PHONY: build 98 build: 99 ./scripts/goversioncheck.sh $(MIN_GO_VERSION) && go build -o bin/$(SERVICE_NAME) -ldflags=$(LD_FLAGS) $(PWD)/cmd/$(SERVICE_NAME) 100 101 # Устанавливает в локальный проект хук, который проверяет запускает линтеры 102 .PHONY: pre-commit-hook 103 pre-commit-hook: 104 touch ./.git/hooks/pre-commit 105 echo '#!/bin/sh' > ./.git/hooks/pre-commit 106 echo 'make generate' >> ./.git/hooks/pre-commit 107 echo 'make lint' >> ./.git/hooks/pre-commit 108 chmod +x ./.git/hooks/pre-commit 109 110 # Устанавливает в локальный проект хук, который проверяет запускает линтеры 111 .PHONY: pre-push-hook 112 pre-push-hook: 113 touch ./.git/hooks/pre-push 114 echo '#!/bin/sh' > ./.git/hooks/pre-push 115 echo 'make cover' >> ./.git/hooks/pre-push 116 chmod +x ./.git/hooks/pre-push 117