Release-layer cache for `assemble` (deferred optimisation)
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 35/100
Direzione di ricerca
Questa è un’ottimizzazione rimandata per il passaggio release-gather della assemble action, non un’attività di implementazione immediata. Per prima cosa esegui il profiling di un repository con molte release docs.zip per confermare che il tempo di download e decompressione domini l’attuale unica elencazione delle release tramite gh api --paginate; solo dopo valuta un bundle actions/cache con una chiave basata sull’insieme ordinato di tag immutabili, preservando la raccolta degli artefatti e la ricostruzione da fonti durevoli.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Summary
Every deploy, the assemble action re-downloads and unzips every release's
docs.zip to reconstruct the released-version layer of the site. This is the one
recurring cost that scales with the number of releases. A GitHub Actions cache of the
immutable released-tags layer could skip those re-downloads. This is deliberately
not built yet — open this as a tracking issue and revisit only with profiling
evidence.
Why it is deferred (not built now)
- The likely-dominant cost is the N sequential
ghround-trips, not the
downloads. That is already addressed by listing all releases in one
gh api --paginate repos/$repo/releasescall (vs Ngh release view), which is
faster and simpler and needs no cache. - The benefit is zero at adoption. A freshly-migrated repo has no
docs.zip
releases yet; the saving grows only as releases accumulate. For a handful of
releases it is within noise. - It is a real readability cost now for an unproven, future, N-dependent saving.
Bring it back only if profiling on a repo with many docs.zip releases shows the
download/unzip phase dominating.
Why it must be scoped to the immutable release layer (never the whole site)
GitHub cache semantics fight the obvious "cache the expanded site" idea:
- Cache scoping is one-directional. A cache written on a branch is visible only
to that branch and its descendants; the default branch's cache is the only one
all other branches/PRs can restore, and writes never flow upward. So "active
branches write their build into a shared cache" is impossible — which is exactly
why branch/PR previews come from cross-run CI artifacts (gh run download),
which do cross the run/branch boundary. A cache cannot replace artifact gathering
for branches. - A cached site reintroduces drift. An accumulating tree never forgets a deleted
branch/release unless actively pruned — the verykeep_filesproblem the
reconstruct-from-sources model kills. Lettingdeploy-pagesreplace the whole site
every deploy is what makes deletion self-healing; a cached tree forfeits that. - A cache is never a source of truth. GH caches evict after 7 idle days (and
under a 10 GB/repo LRU cap), so the full durable-source gather must exist
regardless. The cache only ever accelerates it.
So cache only the released-tags layer, which is immutable and permanent.
Sketch of the implementation
A composite action can't express a dynamic per-tag cache step, so the realisation is
a single extracted-releases bundle dir (<tag>/html per release) behind one
actions/cache step:
- Key
docs-releases-v1-<hash of the sorted tag set>with restore-keys prefix
docs-releases-v1-. Adding a release changes the key ⇒ the prefix restores the
previous superset (every prior release), the gather loop downloads only the one new
tag, and the post-step save stores the new superset. - Released
docs.zipis immutable, so a restored tag dir is never stale (a deliberate
--clobberre-upload is out of scope — bump thev1prefix if ever needed). On a
miss the loop falls back togh release download+unzipas today. - Branches (incl.
main) and open PRs stay fresh from CI artifacts every deploy.
It would be a transparent enhancement to the release-gather step, not a change to the
action's contract; correctness rests entirely on the durable sources whether or not a
cache hits.
- Lingua principale
- JavaScript
- Stelle
- 1
- Fork
- 1
- Merge medio
- 3h 26m
- PR unite (30g)
- 1
Preparare l'ambiente
Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.
- Include un Dockerfile o un file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di DiamondLightSource/myst-version-switcher-plugin
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 55/100
-
Dependency DashboardAperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 20/100
Tutte le issue di DiamondLightSource/myst-version-switcher-plugin
Issue simili
-
P2 Team S Type: Bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
google/site-kit-wp#14138 ·
I maintainer di solito rispondono entro 2 giorni
-
Agents bug status: needs triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
mastra-ai/mastra#29963 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
agent:either area:adapters priority:p3 type:chore
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
jojo-stand36/Tacet#251 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 67/100
Foundryborne/daggerheart#2611 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
I maintainer di solito rispondono entro 1 giorno