71
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

This commit is contained in:
Alex Shevchuk
2025-09-17 14:32:06 +03:00
parent 03372d7f9b
commit 61fc0d2747
22 changed files with 15486 additions and 10 deletions

View File

@@ -5,9 +5,11 @@ 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))
@@ -18,7 +20,7 @@ all: lint build
## -- Dependency Management --
.PHONY: install-tools
install-tools: $(BIN_DIR)/golangci-lint
install-tools: $(BIN_DIR)/golangci-lint $(BIN_DIR)/swag
.PHONY: $(BIN_DIR)/golangci-lint
$(BIN_DIR)/golangci-lint:
@@ -26,12 +28,48 @@ $(BIN_DIR)/golangci-lint:
@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
@@ -71,12 +109,33 @@ 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)
@rm -rf $(BIN_DIR)