Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

Overlay-base cache restore misses on cache backends that only prefix-match restoreKeys

オープン 初心者向け
#4,202 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
1/5
見積もり時間
1時間未満
初心者へのやさしさ
90/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
typescript
領域
ci-cd

調査の方向性

src/overlay/caching.ts の290~302行あたりから始めます。ここでは downloadOverlayBaseDatabaseFromCache が actionsCache.restoreCache を呼び出し、キーのプレフィックスだけを引数として渡しています。そのすぐ上にある、codeql-overlay-base-database-<hash>-<sha>-<run_id> を書き込むアップロード処理と比較してください。修正では、同じプレフィックスを第3引数(restoreKeys)として渡します。その後、TypeScript スイートにある既存のオーバーレイキャッシュテストを実行し、現在の GitHub キャッシュの動作にリグレッションがないことを確認してください。PR の実行で、プレフィックスのみをサポートするバックエンドからキャッシュを復元でき、GitHub ホステッド環境での動作が現在と同じであれば完了です。

索引モデルが issue の本文から書いたものです。

説明

Summary

downloadOverlayBaseDatabaseFromCache restores the overlay-base database by passing the key prefix as the primary key, with no restoreKeys:

https://github.com/github/codeql-action/blob/d208ec71e39ae46397cbf6569bef8439b9aab974/src/overlay/caching.ts#L290-L302

actionsCache.restoreCache(
  [dbLocation],
  cacheRestoreKeyPrefix,
  undefined,
  { segmentTimeoutInMs: 3000 },
)

This depends on the primary key matching by prefix. GitHub's cache service does that, but some Actions-cache-compatible backends only prefix-match restoreKeys. One example is the transparent cache on Blacksmith runners. On those backends, PR runs can never restore the overlay-base database, even though default-branch runs upload it successfully. Every PR run then falls back to a full analysis.

What we see

Default-branch run, on the same runner type:

Setting overlay database mode to overlay-base with caching because we are analyzing the default branch.
Uploading overlay-base database to Actions cache with key codeql-overlay-base-database-1-<hash>-python-2.27.1-<sha>-<run_id>-1
Successfully uploaded overlay-base database from /home/runner/_work/_temp/codeql_databases

Pull request run:

Setting overlay database mode to overlay with caching because we are analyzing a pull request.
Looking in Actions cache for overlay-base database with restore key codeql-overlay-base-database-1-<hash>-python-2.27.1-
No overlay-base database found in Actions cache
No overlay-base database found in cache, reverting overlay database mode to none.
Minimal reproduction of the backend difference

A cache entry saved as probe-<run_id>-full, then restored in a later job on the same branch with actions/cache/restore@v4:

Restore GitHub-hosted runner Blacksmith runner
key: probe-<run_id>- (prefix as the primary key, like this action) hit miss
key: probe-<run_id>-nomatch, restore-keys: probe-<run_id>- hit hit
Suggested fix

Also pass the prefix as a restore key:

actionsCache.restoreCache(
  [dbLocation],
  cacheRestoreKeyPrefix,
  [cacheRestoreKeyPrefix],
  { segmentTimeoutInMs: 3000 },
)

On GitHub's cache this matches exactly the same entries as today, since the prefix is tried first either way. On backends that only prefix-match restore keys, overlay analysis starts working.

Environment
  • github/codeql-action/init and analyze @v4, CodeQL bundle 2.27.1
  • build-mode: none, languages python and javascript-typescript
  • Third-party hosted runners (Blacksmith) whose actions/cache calls go to their own cache backend
主要言語
TypeScript
スター
1.7k
フォーク
494
平均マージ
1日 10時間
マージ済み PR(30日)
52

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

github/codeql-action のほかの issue

github/codeql-action の issue をすべて見る

似ている issue

TypeScript の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。