Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

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

Ouverte Adaptée aux débutants
#4,202 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

Personne n'a encore pris cette issue.

Évaluation

Difficulté
1/5
Temps estimé
Moins d'une heure
Accessibilité débutants
90/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
typescript
Domaine
ci-cd

Piste de recherche

Commencez dans src/overlay/caching.ts, vers les lignes 290–302, où downloadOverlayBaseDatabaseFromCache appelle actionsCache.restoreCache en passant le préfixe de clé comme seul argument ; comparez avec le chemin d’upload juste au-dessus, qui écrit codeql-overlay-base-database-<hash>-<sha>-<run_id>. La correction consiste à passer le même préfixe comme troisième argument (restoreKeys). Exécutez ensuite les tests existants de mise en cache des overlays dans la suite TypeScript pour confirmer qu’il n’y a pas de régression du comportement actuel du cache GitHub. Le travail est terminé lorsque les exécutions de PR sur les backends qui n’acceptent que des préfixes peuvent restaurer le cache et que le comportement sur les runners hébergés par GitHub reste identique à aujourd’hui.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

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
Langage dominant
TypeScript
Étoiles
1.7k
Forks
494
Merge moyen
1 j 10 h
PR mergées (30 j)
52

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de github/codeql-action

Toutes les issues de github/codeql-action

Issues similaires

Plus d'issues TypeScript

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.