fix(github): avoid caching empty release assets#9616
Conversation
There was a problem hiding this comment.
Code Review
This pull request introduces a conditional caching mechanism in CacheManager through the new get_or_try_init_async_if method. This functionality is applied to GitHub release fetching to prevent the caching of releases with empty asset lists, ensuring that incomplete data is not persisted. Feedback suggests refactoring the cache lookup logic to reduce code duplication and highlights a potential efficiency issue regarding the lack of concurrency synchronization during redundant fetch calls.
Greptile SummaryThis PR fixes a bug where GitHub releases with empty asset lists (e.g. due to GitHub propagation delays) were being cached, causing subsequent install attempts to fail without re-fetching. It introduces a conditional caching path on
Confidence Score: 5/5The change is narrowly scoped to the GitHub release fetch path and is safe to merge. Both modified functions are exercised by new tests covering the disk-cache bypass, fresh fetch, and in-memory cache hit. The logic in get_or_try_init_async_if correctly avoids setting either OnceCell with a rejected value. The return-type change from Result<&T> (with an explicit .clone()) to Result preserves the public API for all callers. No files require special attention. Reviews (4): Last reviewed commit: "Merge branch 'main' into fix/github-empt..." | Re-trigger Greptile |
This comment was marked as outdated.
This comment was marked as outdated.
### 🚀 Features - **(cli)** add minimum release age flag to lock and ls-remote by @risu729 in [#9269](#9269) - **(config)** add run field for hooks by @risu729 in [#9718](#9718) - **(github)** add native oauth token source by @jdx in [#9654](#9654) - **(oci)** scope build to project config by default by @jdx in [#9766](#9766) - add support for prefixed latest version queries in outdated checks by @roele in [#9767](#9767) ### 🐛 Bug Fixes - **(activate)** guard bash chpwd hook under nounset by @risu729 in [#9716](#9716) - **(backend)** date-check latest stable fast path by @risu729 in [#9650](#9650) - **(config)** parse core tool options consistently by @risu729 in [#9742](#9742) - **(exec)** propagate __MISE_DIFF so nested mise recovers pristine PATH by @jdx in [#9765](#9765) - **(forgejo)** include prereleases when opted in by @risu729 in [#9717](#9717) - **(github)** avoid caching empty release assets by @risu729 in [#9616](#9616) - **(java)** resolve lockfile URLs from metadata by @risu729 in [#9719](#9719) - **(lock)** cache unavailable github attestations by @risu729 in [#9741](#9741) - **(pipx)** preserve options when reinstalling tools by @risu729 in [#9663](#9663) - **(python)** skip redundant lockfile provenance verification by @risu729 in [#9739](#9739) - **(vfox)** run pre_uninstall hook by @risu729 in [#9662](#9662) ### 🚜 Refactor - **(schema)** extract tool options definition by @risu729 in [#9649](#9649) ### ⚡ Performance - **(aqua)** bake rkyv aqua package blobs by @risu729 in [#9535](#9535) ### 📦️ Dependency Updates - lock file maintenance by @renovate[bot] in [#9773](#9773) ### 📦 Registry - add vector ([github:vectordotdev/vector](https://github.com/vectordotdev/vector)) by @kquinsland in [#9761](#9761) - add oc and openshift-install (http backend) by @konono in [#9669](#9669) ### New Contributors - @konono made their first contribution in [#9669](#9669) - @kquinsland made their first contribution in [#9761](#9761)
Fixes #9520.
Summary
Tests