Release-layer cache for `assemble` (deferred optimisation)
まだ誰も着手していません。
評価
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 初心者へのやさしさ
- 35/100
調査の方向性
これは assemble action の release-gather ステップに対する延期された最適化であり、直ちに実装するタスクではありません。まず、多数の docs.zip リリースを含むリポジトリをプロファイリングして、ダウンロードと解凍の時間が既存の単一の gh api --paginate によるリリース一覧取得を支配していることを確認してください。その後でのみ、ソート済みの不変なタグ集合をキーとする actions/cache バンドルを評価し、アーティファクトの収集と永続的なソースからの再構築を維持してください。
索引モデルが issue の本文から書いたものです。
説明
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.
- 主要言語
- JavaScript
- スター
- 1
- フォーク
- 1
- 平均マージ
- 3時間 26分
- マージ済み PR(30日)
- 1
環境構築
このプロジェクトの開発コンテナを、あなたの GitHub アカウントでブラウザ上に起動します。
- Dockerfile または Docker Compose ファイルあり
- プルリクエストのテンプレートなし
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
DiamondLightSource/myst-version-switcher-plugin のほかの issue
-
難易度 3/5 1〜2日 初心者へのやさしさ 55/100
-
Dependency Dashboardオープン
難易度 4/5 3〜5日 初心者へのやさしさ 20/100
DiamondLightSource/myst-version-switcher-plugin の issue をすべて見る
似ている issue
-
P2 Team S Type: Bug
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
google/site-kit-wp#14138 ·
メンテナーはふだん 2 日以内に返信
-
Agents bug status: needs triage
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
mastra-ai/mastra#29963 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
agent:either area:adapters priority:p3 type:chore
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
jojo-stand36/Tacet#251 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 67/100
Foundryborne/daggerheart#2611 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
メンテナーはふだん 1 日以内に返信