Files
test_deploy/Makefile
Alex Shevchuk 61fc0d2747
Some checks failed
Deploy Production / Deploy to Staging (push) Has been skipped
Go Linter / Run golangci-lint (api_gateway) (push) Failing after 2m31s
Go Linter / Build golang services (api_gateway) (push) Has been skipped
Go Linter / Tag Commit (push) Has been skipped
Go Linter / Push Docker Images (api_gateway) (push) Has been skipped
71
2025-09-17 14:32:06 +03:00

142 lines
5.0 KiB
Makefile
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

BIN_DIR := $(CURDIR)/bin
APP_NAME ?= molva-app-backend
VERSION ?= $(shell git describe --tags 2>/dev/null || echo "v0.0.0")
BUILD_DATE := $(shell date -u +'%Y-%m-%dT%H:%M:%SZ')
GIT_COMMIT := $(shell git rev-parse HEAD 2>/dev/null)
LDFLAGS := "-s -w -X main.version=$(VERSION) -X main.commit=$(GIT_COMMIT) -X main.date=$(BUILD_DATE)"
GOLANGCI_LINT_VERSION := v1.62.2
SWAG_VERSION := v1.16.2
ENV := "local"
UNAME_S := $(shell uname -s)
CONFIG_PATH := .build/config/
SWAGGER_DOCS_PATH := internal/http/swagger/docs
ifeq ($(OS),Windows_NT)
CONFIG_PATH := $(subst /,\,$(CONFIG_PATH))
endif
.PHONY: all
all: lint build
## -- Dependency Management --
.PHONY: install-tools
install-tools: $(BIN_DIR)/golangci-lint $(BIN_DIR)/swag
.PHONY: $(BIN_DIR)/golangci-lint
$(BIN_DIR)/golangci-lint:
@mkdir -p $(@D)
@echo "Installing golangci-lint $(GOLANGCI_LINT_VERSION)..."
@GOBIN=$(BIN_DIR) go install github.com/golangci/golangci-lint/cmd/golangci-lint@$(GOLANGCI_LINT_VERSION)
.PHONY: $(BIN_DIR)/swag
$(BIN_DIR)/swag:
@mkdir -p $(@D)
@echo "Installing swag $(SWAG_VERSION)..."
@GOBIN=$(BIN_DIR) go install github.com/swaggo/swag/cmd/swag@$(SWAG_VERSION)
## -- Linting --
.PHONY: lint
lint: $(BIN_DIR)/golangci-lint
@echo "Running linter..."
@$(BIN_DIR)/golangci-lint run --config .golangci-lint.yaml --fix=false --color=always
## -- Documentation --
.PHONY: docs
docs: $(BIN_DIR)/swag
@echo "Generating Swagger documentation..."
@if [ -n "$(SWAGGER_HOST)" ]; then \
echo "Using SWAGGER_HOST: $(SWAGGER_HOST)"; \
$(MAKE) .generate-swagger-with-host HOST=$(SWAGGER_HOST); \
else \
echo "Using default host: localhost:8000"; \
mkdir -p $(SWAGGER_DOCS_PATH); \
$(BIN_DIR)/swag init -g cmd/main.go -o $(SWAGGER_DOCS_PATH) --parseDependency --parseInternal; \
echo "Swagger documentation generated in $(SWAGGER_DOCS_PATH)"; \
fi
.PHONY: .generate-swagger-with-host
.generate-swagger-with-host: $(BIN_DIR)/swag
@echo "Генерация Swagger документации с host: $(HOST)"
@mkdir -p $(SWAGGER_DOCS_PATH)
@TEMP_MAIN="cmd/main_temp.go" && \
cp cmd/main.go $$TEMP_MAIN && \
if [[ "$$OSTYPE" == "darwin"* ]]; then \
sed -i '' "s/localhost:8000/$(HOST)/g" $$TEMP_MAIN; \
else \
sed -i "s/localhost:8000/$(HOST)/g" $$TEMP_MAIN; \
fi && \
$(BIN_DIR)/swag init -g $$TEMP_MAIN -o $(SWAGGER_DOCS_PATH) --parseDependency --parseInternal && \
rm -f $$TEMP_MAIN && \
echo "Swagger документация успешно сгенерирована с host: $(HOST)" && \
echo "Документация доступна по адресу: http://$(HOST)/swagger/index.html"
## -- Run --
## To change env use: make run CONFIG_PATH={config file dir path} ENV={env}
.PHONY: run
run:
@echo "Starting $(APP_NAME)..."
@echo CGO_ENABLED=0 go run -ldflags=$(LDFLAGS) ./cmd/main.go --config_path=$(CONFIG_PATH) --env=$(ENV)
@CGO_ENABLED=0 go run -ldflags=$(LDFLAGS) ./cmd/main.go --config_path=$(CONFIG_PATH) --env=$(ENV)
## -- Building --
.PHONY: build
build: build-linux build-darwin build-windows
# Build for Linux
.PHONY: build-linux
build-linux:
@echo "Building for Linux..."
@GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -ldflags=$(LDFLAGS) -o $(BIN_DIR)/$(APP_NAME)_linux_amd64 ./cmd/main.go
@GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build -ldflags=$(LDFLAGS) -o $(BIN_DIR)/$(APP_NAME)_linux_arm64 ./cmd/main.go
# Build for macOS (Darwin)
.PHONY: build-darwin
build-darwin:
@echo "Building for macOS..."
@GOOS=darwin GOARCH=amd64 CGO_ENABLED=0 go build -ldflags=$(LDFLAGS) -o $(BIN_DIR)/$(APP_NAME)_darwin_amd64 ./cmd/main.go
@GOOS=darwin GOARCH=arm64 CGO_ENABLED=0 go build -ldflags=$(LDFLAGS) -o $(BIN_DIR)/$(APP_NAME)_darwin_arm64 ./cmd/main.go
# Build for Windows
.PHONY: build-windows
build-windows:
@echo "Building for Windows..."
@GOOS=windows GOARCH=amd64 CGO_ENABLED=0 go build -ldflags=$(LDFLAGS) -o $(BIN_DIR)/$(APP_NAME)_windows_amd64.exe ./cmd/main.go
@GOOS=windows GOARCH=arm64 CGO_ENABLED=0 go build -ldflags=$(LDFLAGS) -o $(BIN_DIR)/$(APP_NAME)_windows_arm64.exe ./cmd/main.go
## -- Docker --
.PHONY: docker-build
docker-build:
@echo "Building Docker image..."
@docker build \
--build-arg BUILD_LDFLAGS=$(LDFLAGS) \
--build-arg SWAGGER_HOST=$(SWAGGER_HOST) \
--build-arg CONFIG_FILE_PATH="$(CONFIG_PATH)$(ENV).yaml" \
-t $(APP_NAME):$(VERSION) \
.
.PHONY: docker-build-staging
docker-build-staging:
@echo "Building Docker image for staging..."
@docker build \
--build-arg BUILD_LDFLAGS=$(LDFLAGS) \
--build-arg SWAGGER_HOST=api-staging.example.com \
--build-arg CONFIG_FILE_PATH="$(CONFIG_PATH)$(ENV).yaml" \
-t $(APP_NAME):staging \
.
.PHONY: docker-build-production
docker-build-production:
@echo "Building Docker image for production..."
@docker build \
--build-arg BUILD_LDFLAGS=$(LDFLAGS) \
--build-arg SWAGGER_HOST=api.example.com \
--build-arg CONFIG_FILE_PATH="$(CONFIG_PATH)$(ENV).yaml" \
-t $(APP_NAME):production \
.
## -- Cleanup --
.PHONY: clean
clean:
@echo "Cleaning..."
@rm -rf $(BIN_DIR)