Skip to content

ci: PRごとのキャッシュ書き込みをやめてビルドキャッシュの追い出しを防ぐ - #350

Closed
tknkaa wants to merge 1 commit into
mainfrom
ci/fix-astro-build-cache
Closed

ci: PRごとのキャッシュ書き込みをやめてビルドキャッシュの追い出しを防ぐ#350
tknkaa wants to merge 1 commit into
mainfrom
ci/fix-astro-build-cache

Conversation

@tknkaa

@tknkaa tknkaa commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

どれくらい遅かったか

直近の main push (fd95500) の CI ログを見ると、Check ワークフロー全体 (~6分10秒) のうち Build ジョブの bun run build ステップだけで 297秒 (約5分) かかっていた。他のジョブ (Check, dirs-small) は30秒前後で終わっているので、ここがボトルネック。

なぜ遅かったか

bun run build の中身はほぼ全部が Astro のアセット最適化フェーズで、記事・プロジェクト・メンバーのサムネイルを avif / webp / png(jpg) の各フォーマット×複数サイズに変換する処理 (合計1,697枚) を sharp で行っていた。

これを避けるために .astro, dist, node_modules/.astro/assetsactions/cache@v4 でキャッシュしていたが、実際には毎回 Cache not found for input keys: Linux-astro-build, Linux-astro-build となっていて機能していなかった。

原因は cache のスコープ。actions/cache@v4 は save も restore も同じキー ${{ runner.os }}-astro-build を使うが、PR ブランチ (refs/pull/N/merge) で保存されたキャッシュは main では読めない。にもかかわらず PR を作るたびに ~420MB のキャッシュが同じキー名で新規保存され続け、リポジトリ全体の cache 容量上限 (10GB) をこれらの使い捨てキャッシュが埋めてしまい、main 用に唯一有効なキャッシュが LRU で追い出されていた。結果、main への連続 push でもほぼ毎回コールドスタートで 1,697 枚を作り直していた。

どう直したか

actions/cache@v4 (restore + save が一体) を actions/cache/restore@v4 + actions/cache/save@v4 に分割し、

  • restore は今まで通り全ビルド (PR・main 問わず) で実行 → PR からも main のキャッシュを読めるので速度メリットは維持
  • save は main への push、かつ完全一致キャッシュがまだ無い場合のみ 実行 → PR ブランチごとの使い捨てキャッシュ書き込みが無くなる

Test plan

  • マージ後、次の main push で Build ジョブが遅いままでないか (キャッシュが保存されるはず)
  • さらにその次の main push で bun run build が大幅に短縮されているか確認

🤖 Generated with Claude Code

@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying utcode-website with  Cloudflare Pages  Cloudflare Pages

Latest commit: 3f8d0c8
Status: ✅  Deploy successful!
Preview URL: https://a37d0424.utcode-website.pages.dev
Branch Preview URL: https://ci-fix-astro-build-cache.utcode-website.pages.dev

View logs

@tknkaa tknkaa closed this Aug 9, 2026
@tknkaa
tknkaa deleted the ci/fix-astro-build-cache branch August 9, 2026 10:27
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