mirror of
https://github.com/Syngnat/GoNavi.git
synced 2026-07-13 00:13:33 +08:00
🐛 fix(docker): 修复容器驱动重装提示不消失
- Web 与 MCP 镜像编译前按目标平台生成驱动 revision - 校验生成步骤位于源码复制后和 Go 编译前 - Docker 镜像工作流增加运行时 Dockerfile 回归检查
This commit is contained in:
5
.github/workflows/docker-images.yml
vendored
5
.github/workflows/docker-images.yml
vendored
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user