diff --git a/AGENTS.md b/AGENTS.md index def5e4e..461e9ed 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -120,4 +120,4 @@ Upload: ZIP/XLSX → Extract → Convert UTF-8 CSV → Detect bill type → Dedu - **Dependencies:** Check `package.json`/`go.mod`/`requirements.txt` before adding new packages - **Tests:** Always run relevant test suite before committing changes - **Git commits:** Provide clear messages explaining the "why" of changes -- **File references:** Use `file_path:line_number` format when mentioning code locations +- **File references:** Use relative `file_path:line_number` format (e.g., `server/handler/changelog.go:12`) when mentioning code locations diff --git a/docker-compose.yaml b/docker-compose.yaml index 113c39e..a1782ef 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -27,8 +27,8 @@ services: # Go 后端服务 server: build: - context: ./server - dockerfile: Dockerfile + context: . + dockerfile: server/Dockerfile container_name: billai-server restart: unless-stopped ports: diff --git a/server/Dockerfile b/server/Dockerfile index 2bf9d92..acfb574 100644 --- a/server/Dockerfile +++ b/server/Dockerfile @@ -1,5 +1,6 @@ # Go 服务 Dockerfile # 多阶段构建:编译阶段 + 运行阶段 +# 构建上下文:项目根目录(docker-compose context: .) # ===== 编译阶段 ===== FROM golang:1.24-alpine AS builder @@ -10,11 +11,11 @@ WORKDIR /build ENV GOPROXY=https://goproxy.cn,direct # 先复制依赖文件,利用 Docker 缓存 -COPY go.mod go.sum ./ +COPY server/go.mod server/go.sum ./ RUN go mod download # 复制源代码并编译 -COPY . . +COPY server/ . RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o billai-server . # ===== 运行阶段 ===== @@ -35,6 +36,9 @@ ENV TZ=Asia/Shanghai COPY --from=builder /build/billai-server . COPY --from=builder /build/config.yaml . +# 复制项目根目录的 CHANGELOG.md +COPY CHANGELOG.md . + # 创建必要目录 RUN mkdir -p uploads outputs diff --git a/server/service/changelog.go b/server/service/changelog.go index 4394c7d..5db7bcb 100644 --- a/server/service/changelog.go +++ b/server/service/changelog.go @@ -20,8 +20,11 @@ func ParseChangelog() ([]ChangelogEntry, error) { // 获取项目根目录 rootDir := os.Getenv("PROJECT_ROOT") if rootDir == "" { - // 如果未设置,使用相对路径推测 - rootDir = ".." + // 使用二进制文件所在目录作为基准 + execPath, err := os.Executable() + if err == nil { + rootDir = filepath.Dir(execPath) + } } changelogPath := filepath.Join(rootDir, "CHANGELOG.md")