🐛 fix(docker): 修复容器驱动重装提示不消失

- Web 与 MCP 镜像编译前按目标平台生成驱动 revision
- 校验生成步骤位于源码复制后和 Go 编译前
- Docker 镜像工作流增加运行时 Dockerfile 回归检查
This commit is contained in:
Syngnat
2026-07-10 10:04:38 +08:00
parent 155ba0f1f7
commit 0a9aec5929
4 changed files with 36 additions and 1 deletions

View File

@@ -47,6 +47,11 @@ jobs:
- name: Checkout code
uses: actions/checkout@v5
- name: Validate runtime Dockerfiles
if: matrix.image_name == 'gonavi-web-server'
shell: bash
run: bash tools/validate-web-server-dockerfile.test.sh
- name: Prepare build variables
id: prep
shell: bash

View File

@@ -15,6 +15,7 @@ COPY third_party/go-irisnative/go.mod third_party/go-irisnative/go.sum ./third_p
RUN go mod download
COPY . .
RUN ./tools/generate-driver-agent-revisions.sh --platform "${TARGETOS}/${TARGETARCH}"
RUN CGO_ENABLED=0 GOOS=${TARGETOS} GOARCH=${TARGETARCH} \
go build -trimpath -ldflags="-s -w" -o /out/gonavi-mcp-server ./cmd/gonavi-mcp-server

View File

@@ -29,6 +29,7 @@ COPY third_party/go-irisnative/go.mod third_party/go-irisnative/go.sum ./third_p
RUN go mod download
COPY . .
RUN ./tools/generate-driver-agent-revisions.sh --platform "${TARGETOS}/${TARGETARCH}"
COPY --from=frontend /src/frontend/dist ./frontend/dist
# 纯 Go 构建主程序web-server 模式不需要 Wails WebView / CGO

View File

@@ -1,20 +1,45 @@
#!/usr/bin/env bash
# Ensure web-server Docker frontend stage can resolve monorepo shared/i18n imports.
# Validate runtime Docker build ordering and the web frontend monorepo layout.
set -euo pipefail
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
DOCKERFILE="${ROOT}/Dockerfile.web-server"
MCP_DOCKERFILE="${ROOT}/Dockerfile.mcp-server"
if [[ ! -f "${DOCKERFILE}" ]]; then
echo "missing Dockerfile.web-server" >&2
exit 1
fi
if [[ ! -f "${MCP_DOCKERFILE}" ]]; then
echo "missing Dockerfile.mcp-server" >&2
exit 1
fi
fail() {
echo "validate-web-server-dockerfile: $*" >&2
exit 1
}
assert_target_driver_revisions_generated_before_build() {
local dockerfile="$1"
local label="$2"
local copy_line revision_line build_line
copy_line="$(awk '$0 == "COPY . ." { print NR; exit }' "${dockerfile}")"
revision_line="$(awk '/generate-driver-agent-revisions\.sh/ { print NR; exit }' "${dockerfile}")"
build_line="$(awk '/go build -trimpath/ { print NR; exit }' "${dockerfile}")"
[[ -n "${copy_line}" ]] || fail "${label}: missing COPY . ."
[[ -n "${revision_line}" ]] || fail "${label}: missing target-platform driver revision generation"
[[ -n "${build_line}" ]] || fail "${label}: missing go build"
grep -Fq -- '--platform "${TARGETOS}/${TARGETARCH}"' "${dockerfile}" \
|| fail "${label}: driver revisions must use TARGETOS/TARGETARCH"
(( revision_line > copy_line )) \
|| fail "${label}: driver revisions must be generated after COPY . ."
(( revision_line < build_line )) \
|| fail "${label}: driver revisions must be generated before go build"
}
grep -Fq 'WORKDIR /src/frontend' "${DOCKERFILE}" \
|| fail "expected WORKDIR /src/frontend monorepo layout"
grep -Fq 'COPY shared/ /src/shared/' "${DOCKERFILE}" \
@@ -35,4 +60,7 @@ FRONTEND_CATALOG="${ROOT}/frontend/src/i18n/catalog.ts"
grep -Fq '../../../shared/i18n/' "${FRONTEND_CATALOG}" \
|| fail "frontend catalog no longer imports ../../../shared/i18n (update Dockerfile if path changed)"
assert_target_driver_revisions_generated_before_build "${DOCKERFILE}" "Dockerfile.web-server"
assert_target_driver_revisions_generated_before_build "${MCP_DOCKERFILE}" "Dockerfile.mcp-server"
echo "validate-web-server-dockerfile: ok"