APP_NAME := xiaji-go
VERSION := 1.1.12
GIT_COMMIT := $(shell git rev-parse --short HEAD 2>/dev/null || echo "unknown")
BUILD_TIME := $(shell date -u '+%Y-%m-%dT%H:%M:%SZ')
LDFLAGS := -X xiaji-go/version.Version=$(VERSION) \
           -X xiaji-go/version.GitCommit=$(GIT_COMMIT) \
           -X xiaji-go/version.BuildTime=$(BUILD_TIME)

DOCKER_IMAGE := ouaone/xiaji-go
DOCKER_TAG := $(VERSION)

.PHONY: build clean run docker docker-push release help

## build: 编译二进制文件
build:
	go build -ldflags "$(LDFLAGS)" -o $(APP_NAME) cmd/main.go

## build-linux: 交叉编译 Linux amd64
build-linux:
	CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o $(APP_NAME)-linux-amd64 cmd/main.go

## clean: 清理编译产物
clean:
	rm -f $(APP_NAME) $(APP_NAME)-linux-amd64

## run: 编译并运行
run: build
	./$(APP_NAME)

## docker: 构建 Docker 镜像
docker:
	docker build -t $(DOCKER_IMAGE):$(DOCKER_TAG) -t $(DOCKER_IMAGE):latest \
		--build-arg VERSION=$(VERSION) \
		--build-arg GIT_COMMIT=$(GIT_COMMIT) \
		--build-arg BUILD_TIME=$(BUILD_TIME) .

## docker-push: 推送 Docker 镜像
docker-push:
	docker push $(DOCKER_IMAGE):$(DOCKER_TAG)
	docker push $(DOCKER_IMAGE):latest

## version: 显示版本信息
version:
	@echo "$(APP_NAME) v$(VERSION) ($(GIT_COMMIT))"

## help: 显示帮助
help:
	@echo "$(APP_NAME) v$(VERSION)"
	@echo ""
	@echo "可用目标："
	@grep -E '^## ' Makefile | sed 's/^## /  /'
