Optimize Dockerfile build cache: move COPY after dependency installation by lqfy-jhc · Pull Request #9787 · AstrBotDevs/AstrBot · GitHub
Skip to content

Optimize Dockerfile build cache: move COPY after dependency installation - #9787

Merged
Soulter merged 1 commit into
AstrBotDevs:masterfrom
lqfy-jhc:fix/dockerfile
Aug 25, 2026
Merged

Soulter merged 1 commit into
AstrBotDevs:masterfrom
lqfy-jhc:fix/dockerfile

Conversation

@lqfy-jhc

Copy link
Copy Markdown
Contributor

优化 Dockerfile 构建顺序以利用 Docker 层缓存

原因:

  • 应用代码变更频率高于系统依赖
  • 原先 COPY 在依赖安装之前,会导致代码变更时后续所有层缓存失效
  • 调整后,系统依赖和 Node.js 安装层可被缓存复用, 仅在代码或 Python 依赖变更时重新构建后续层

Modifications / 改动点

仅修改了dockerfile文件,并未引入新内容,仅仅调整了执行顺序。

  • 调整指令顺序:
  • 将 COPY . /AstrBot/ 从第一个 RUN 之前移至其后
  • 保持 apt 依赖安装、NodeSource 配置、Node.js 安装、 Python 依赖安装等步骤不变
  • This is NOT a breaking change. / 这不是一个破坏性变更。

Screenshots or Test Results / 运行截图或测试结果

  • 构建结果不变
  • 首次构建无差异,后续构建显著减少重复下载和安装耗时

Checklist / 检查清单

  • 😊 If there are new features added in the PR, I have discussed it with the authors through issues/emails, etc.
    / 如果 PR 中有新加入的功能,已经通过 Issue / 邮件等方式和作者讨论过。

  • 👀 My changes have been well-tested, and "Verification Steps" and "Screenshots" have been provided above.
    / 我的更改经过了良好的测试,并已在上方提供了“验证步骤”和“运行截图”。

  • 🤓 I have ensured that no new dependencies are introduced, OR if new dependencies are introduced, they have been added to the appropriate locations in requirements.txt and pyproject.toml.
    / 我确保没有引入新依赖库,或者引入了新依赖库的同时将其添加到 requirements.txt 和 pyproject.toml 文件相应位置。

  • 😮 My changes do not introduce malicious code.
    / 我的更改没有引入恶意代码。

Optimize Dockerfile build order to leverage layer caching

Reorder instructions:
- Move COPY . /AstrBot/ from before the first RUN to after it
- Keep apt dependencies, NodeSource setup, Node.js installation,
  and Python dependency installation steps unchanged

Reason:
- Application code changes more frequently than system dependencies
- Previously, COPY before dependency installation caused all
  subsequent layers to invalidate on every code change
- After reordering, system dependency and Node.js layers can be
  reused from cache; only later layers rebuild on code or
  Python dependency changes

Impact:
- Build output remains unchanged
- No difference on first build; subsequent builds significantly
  reduce redundant download and installation time

优化 Dockerfile 构建顺序以利用 Docker 层缓存

调整指令顺序:
- 将 COPY . /AstrBot/ 从第一个 RUN 之前移至其后
- 保持 apt 依赖安装、NodeSource 配置、Node.js 安装、
  Python 依赖安装等步骤不变

原因:
- 应用代码变更频率高于系统依赖
- 原先 COPY 在依赖安装之前,会导致代码变更时后续所有层缓存失效
- 调整后,系统依赖和 Node.js 安装层可被缓存复用,
  仅在代码或 Python 依赖变更时重新构建后续层

影响:
- 构建结果不变
- 首次构建无差异,后续构建显著减少重复下载和安装耗时
@dosubot dosubot Bot added the size:XS This PR changes 0-9 lines, ignoring generated files. label Aug 23, 2026
@dosubot dosubot Bot added the lgtm This PR has been approved by a maintainer label Aug 25, 2026
@Soulter
Soulter merged commit 4f5a6b1 into AstrBotDevs:master Aug 25, 2026
@lqfy-jhc
lqfy-jhc deleted the fix/dockerfile branch August 29, 2026 03:45
xkeyC added a commit to xkeyC/AstrBotX that referenced this pull request Sep 11, 2026
…thub.com/AstrBotDevs/AstrBot into xkeyc-stable-patch

Sync upstream v4.28.0 (68 commits since 4.27.4).

Conflict resolutions:
- Upstream landed subsets of fork changes: sorted OpenAI tool schemas
  (AstrBotDevs#9798), a trailing user message for tool requery (AstrBotDevs#9957) and proactive
  agent history kept in contexts (AstrBotDevs#9818). Kept the fork versions, which
  also canonicalize schema keys, wrap the requery in request_context and
  move the wake prompts into dynamic context.
- Adopted upstream's agent_runner.config schema (AstrBotDevs#9821) and re-applied the
  fork settings on top of it: compression.trim_turns defaults to 10 (the
  migration fallback too), search_registry stays a valid
  misc.tool_schema_mode with matching i18n labels, and upstream's own trim
  clamp replaces the fork's equivalent fix.
- Kept the fork's forced third-party streaming with upstream's
  runner_config.
- Dockerfile keeps ASTRBOT_USE_BUNDLED_DASHBOARD and drops the early COPY
  that upstream moved after dependency installation (AstrBotDevs#9787).
- Repaired the fork's legacy Responses source migration: upstream's
  migra_helper rewrite removed the astrbot_config global it relied on, so
  it raised a swallowed NameError on every start. It now runs on
  acm.default_conf and is covered by a wiring test.
- Adapted upstream's proactive-agent test to the fork's dynamic-context
  placement of the sandbox and safety prompts, and dropped the duplicate
  Path import both sides added to test_openai_source.py.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
murphys7017 pushed a commit to murphys7017/AstrBot that referenced this pull request Sep 13, 2026
Optimize Dockerfile build order to leverage layer caching

Reorder instructions:
- Move COPY . /AstrBot/ from before the first RUN to after it
- Keep apt dependencies, NodeSource setup, Node.js installation,
  and Python dependency installation steps unchanged

Reason:
- Application code changes more frequently than system dependencies
- Previously, COPY before dependency installation caused all
  subsequent layers to invalidate on every code change
- After reordering, system dependency and Node.js layers can be
  reused from cache; only later layers rebuild on code or
  Python dependency changes

Impact:
- Build output remains unchanged
- No difference on first build; subsequent builds significantly
  reduce redundant download and installation time

优化 Dockerfile 构建顺序以利用 Docker 层缓存

调整指令顺序:
- 将 COPY . /AstrBot/ 从第一个 RUN 之前移至其后
- 保持 apt 依赖安装、NodeSource 配置、Node.js 安装、
  Python 依赖安装等步骤不变

原因:
- 应用代码变更频率高于系统依赖
- 原先 COPY 在依赖安装之前,会导致代码变更时后续所有层缓存失效
- 调整后,系统依赖和 Node.js 安装层可被缓存复用,
  仅在代码或 Python 依赖变更时重新构建后续层

影响:
- 构建结果不变
- 首次构建无差异,后续构建显著减少重复下载和安装耗时

Co-authored-by: 落秋枫叶 <gitea-lqfy@lqfy.top>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lgtm This PR has been approved by a maintainer size:XS This PR changes 0-9 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants