Skip to content

fix: inject PROXY_VERSION at Docker build time to fix stale version display (#676)#677

Open
icebear0828 wants to merge 6 commits into
devfrom
fix/docker-version-display
Open

fix: inject PROXY_VERSION at Docker build time to fix stale version display (#676)#677
icebear0828 wants to merge 6 commits into
devfrom
fix/docker-version-display

Conversation

@icebear0828

Copy link
Copy Markdown
Owner

问题

Docker 容器内没有 .git,所以 getProxyInfo() 只能读 package.json。但 package.json 的 version 字段一直停在 2.0.77(tag-only 发版策略不 bump package.json),导致容器始终显示旧版本。

修复

文件 变更
Dockerfile 添加 ARG PROXY_VERSION + ENV PROXY_VERSION=${PROXY_VERSION}
docker-publish.yml build 时传 build-args: PROXY_VERSION=<computed>
src/self-update.ts getProxyInfo() 优先读 process.env.PROXY_VERSION,无环境变量时回退 git-tag / package.json

验证

PROXY_VERSION=2.0.80 node -e 'const m=require("./dist/self-update.js"); console.log(m.getProxyInfo().version)'
# → 2.0.80 ✅

Closes #676

…isplay

Docker containers lack .git so getProxyInfo() falls back to package.json
which hasn't been bumped (still 2.0.77 while tag is 2.0.80).

Changes:
- Dockerfile: add ARG PROXY_VERSION + ENV PROXY_VERSION=${PROXY_VERSION}
- docker-publish.yml: pass build-args: PROXY_VERSION=<computed-version>
- src/self-update.ts: getProxyInfo() checks process.env.PROXY_VERSION first,
  falls back to git-tag / package.json for non-Docker environments

Fixes #676
@icebear0828

Copy link
Copy Markdown
Owner Author

Self-review Notes

总体评价

核心机制(ARGENV → 优先读取)正确,有效解决了 Docker 容器内版本显示 bug。但有两处需要跟进。


🔴 Must Fix

1. CI smoke 未传 PROXY_VERSION build-arg,修复没有被自动化覆盖

ci-docker.yml 的 smoke build 没有传 --build-arg PROXY_VERSION,意味着 CI 跑的镜像里 PROXY_VERSION 是空字符串,版本走 fallback。

建议 smoke step 改为:

run: |
  PKG_VER=$(node -p "require('./package.json').version")
  docker build -t codex-proxy:smoke --build-arg PROXY_VERSION=$PKG_VER .
  docker run --rm codex-proxy:smoke node -e     "const m=require('./dist/self-update.js'); const v=m.getProxyInfo().version; if(!v) process.exit(1); console.log('version:',v)"

2. 缺少单元测试(违反项目 TDD 规范)

getProxyInfo()PROXY_VERSION env 设置时的行为没有任何测试覆盖:

it("prefers PROXY_VERSION env over package.json", () => {
  process.env.PROXY_VERSION = "9.9.9";
  try {
    expect(getProxyInfo().version).toBe("9.9.9");
  } finally {
    delete process.env.PROXY_VERSION;
  }
});

🟢 Low

  • CHANGELOG.md 里写的是 issue #676,应改为 PR 编号 #677
  • ci-docker.yml smoke 补好后一并修这两点再 merge

…CHANGELOG ref

- tests: add two cases covering PROXY_VERSION env priority and empty fallback
- ci-docker.yml: pass --build-arg PROXY_VERSION to smoke build; add step to
  verify container reports correct version via getProxyInfo()
- CHANGELOG: correct PR reference from #676 (issue) to #677 (PR)

@icebear0828 icebear0828 left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review

核心逻辑正确,有三个小问题建议处理:

🟡 envVersion !== "1.0.0" 过滤逻辑有歧义

如果有人手动 export PROXY_VERSION=1.0.0(合法的版本号),会被静默忽略并 fallback 到 git/package.json,行为不符合预期。建议只过滤空字符串:

const envVersion = process.env.PROXY_VERSION?.trim();
if (envVersion) {  // 不再额外排除 1.0.0
  version = envVersion;
}

🟡 ARG PROXY_VERSION 缺默认值

如果 CI 忘记传 --build-arg PROXY_VERSION=...PROXY_VERSION 会为空,静默 fallback 到旧逻辑而不报错。建议加默认值:

ARG PROXY_VERSION=unknown
ENV PROXY_VERSION=${PROXY_VERSION}

并在启动时检测到 unknown 时打一条 warning。

🟡 docker-publish.yml 改动

PR body 提到 CI 会传 build-args: PROXY_VERSION=<computed>,但 diff 里没看到 workflow 文件变更,请确认是否已包含在本 PR 中。

🟢 做得好的地方

  • 优先级链清晰:env → git tag → package.json
  • 测试覆盖了 env 优先级场景
  • 1.0.0 的过滤与下层逻辑一致(即使建议修改,至少现在行为是一致的)

…Y_VERSION including 1.0.0

- Dockerfile ARG PROXY_VERSION defaults to 'unknown' instead of empty
- getProxyInfo() filters out 'unknown' (not real version) and falls back to git/package.json
- Remove the 1.0.0 exclusion — users setting PROXY_VERSION=1.0.0 explicitly should have it respected
- Add tests: 'unknown' fallback + 1.0.0 acceptance
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Docker Image Not Updating to Latest Version (Still Showing Proxy v2.0.77)

1 participant