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