diff --git a/apps/api/Dockerfile b/apps/api/Dockerfile index 65c046b4b..6f8f86371 100644 --- a/apps/api/Dockerfile +++ b/apps/api/Dockerfile @@ -15,8 +15,10 @@ FROM python:3.11-slim AS builder WORKDIR /app -# Install uv (固定版本,禁止 :latest) -COPY --from=ghcr.io/astral-sh/uv:0.6.9 /uv /bin/uv +# Install a pinned uv wheel inside the existing builder. Do not introduce a +# GitHub Container Registry build stage into the Gitea/Harbor supply chain. +ARG UV_VERSION=0.6.9 +RUN python -m pip install --no-cache-dir "uv==${UV_VERSION}" # Phase 6.4i: 複製本地 packages 到 Docker context COPY packages/lewooogo-data/ /packages/lewooogo-data/ diff --git a/apps/api/tests/test_signal_worker_ansible_executor_binding.py b/apps/api/tests/test_signal_worker_ansible_executor_binding.py index 274ba7b90..e5ae26eef 100644 --- a/apps/api/tests/test_signal_worker_ansible_executor_binding.py +++ b/apps/api/tests/test_signal_worker_ansible_executor_binding.py @@ -135,6 +135,15 @@ def test_gitea_workflows_never_download_github_actions() -> None: assert forbidden_domain not in source, path +def test_api_image_build_does_not_resolve_github_container_registry() -> None: + repo_root = Path(__file__).resolve().parents[3] + dockerfile = (repo_root / "apps/api/Dockerfile").read_text() + + assert "ghcr.io/" not in dockerfile + assert "ARG UV_VERSION=0.6.9" in dockerfile + assert 'python -m pip install --no-cache-dir "uv==${UV_VERSION}"' in dockerfile + + def test_api_log_does_not_claim_skipped_executor_was_scheduled() -> None: repo_root = Path(__file__).resolve().parents[3] main_source = (repo_root / "apps/api/src/main.py").read_text()