Skip to content

ci(docker): docker-build 加 paths-ignore docs/**(纯文档改动不再重建镜像) - #163

Merged
ReSerendipity merged 1 commit into
mainfrom
ci/docker-paths-ignore
Sep 25, 2026
Merged

ReSerendipity merged 1 commit into
mainfrom
ci/docker-paths-ignore

Conversation

@ReSerendipity

Copy link
Copy Markdown
Owner

批准开工的 P1-5 第一条。未自合并,等绿停住。

改了什么(1 file,+10 −0)

docker-build.yml 的 push.branches:[main] 与 pull_request.branches:[main] 各加一条 paths-ignore: ["docs/**"]。

为什么是这三条实测撑腰

合并 改动面 触发的 Build & Scan Image
#157 只改 docs/SECURITY_CODEQL_TRIAGE.md 22.6 min
#159 只改 docs/SECURITY_CODEQL_TRIAGE.md + 一个测试 22.6 min
#162 只改 docs/release-governance.md ≈22 min

扫的镜像构建输入并没有变:.dockerignore 已排除 docs、tests、.github(第 19–22 行区),Dockerfile 的 COPY 面是 pyproject.toml / requirements.txt / app(:54–55)与运行时 COPY --chown=ttsuser:ttsuser . .(:113)—— docs 不在镜像里。

刻意不收的路径(避免把 docker 自己的改动挡在触发外)

  • README.md:pyproject.toml 的 readme = "README.md" 会把它吃进 wheel 元数据,且它不在 .dockerignore 的排除项里 → 改它确实改产物,必须仍然构建。
  • app/**、requirements*.txt、requirements-lock.txt、pyproject.toml、Dockerfile、.dockerignore、deploy/**、launcher/**:全是构建输入。
  • .github/workflows/**:包括本文件自身 —— 改门禁逻辑必须能跑到。这条 CR 本身就是自证:它改的是 workflow 文件,所以 Docker Build 会照常触发;等它并入后,下一笔纯 docs/** 的 PR 应当不再出现 Docker Build(我正在做的 v2.3.0 记录 PR 就能当这个反向验证,若它那时还没合,我另找一次核)。

为什么没顺手改 docker-publish.yml

它的 on.push 同时含 branches: [main] 与 tags: ["v*"],而 paths 过滤在 tag push 上的语义我没法用本仓历史证实:实测 RP 自己打的 tag 从不级联(v2.2.5 起 release-gate/gpg-signed-release 的 head_branch 全集只到 v2.2.4),人工补的那条腿走 workflow_dispatch、本就不吃路径过滤。要加得先确认 tag push 是否被 paths-ignore 影响(或把 push 拆成两个块)——那是另一件要取证的事,收益只是剩下的 21.8 min 那一半,所以本 PR 不做。

门禁

Refs: #157 #159 #160 #162

反面证据是实测的三条:#157 / #159 / #162 都只改 docs/,各触发一次 Build & Scan Image
(22.6 / 22.6 / 22 分钟,见各自 main push 的 run 时长),而扫的镜像构建输入并没有变:
.dockerignore 已把 docs、tests、.github 排除在上下文外,Dockerfile 的 COPY 面只有
pyproject.toml / requirements.txt / app/(第 54/55 行)与运行时那次 COPY . .(第 113 行)。

只放 docs/** 一条,刻意不收的三类:
- README.md:pyproject 的 readme = "README.md" 会把它吃进 wheel 元数据,且它不在
  .dockerignore 的排除列表里,改它确实改产物;
- app/**、requirements*.txt、pyproject.toml、Dockerfile、.dockerignore、deploy/**:
  全是构建输入;
- .github/workflows/**:包括本文件自己,改门禁逻辑必须能跑到(本 PR 就是这样自证的)。

docker-publish.yml 这次没动:它的 on.push 同时含 branches:[main] 与 tags:["v*"],
而 paths 过滤在 tag push 上的语义我无法用本仓历史证实(RP 自己打的 tag 从不级联,
人工补的那条腿走 workflow_dispatch,本就不吃路径过滤)。要么单独确认过一次语义再加,
要么把它拆成两个 trigger 块——都属于要另外取证的动作,收益只有 21.8 分钟那一半。

Signed-off-by: ReSerendipity <ReSerendipity@users.noreply.github.com>
@ReSerendipity
ReSerendipity merged commit 70f3e3b into main Sep 25, 2026
29 of 30 checks passed
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.

1 participant