Reproducibility: what would it take to rebuild a published lecture exactly?

オープン
#129 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

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

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

評価

難易度
5/5
見積もり時間
1週間以上
初心者へのやさしさ
45/100
issue の種類
機能追加
明瞭さ
おおむね明確
活発さ
静か
技術スタック
docker, github-actions, shell

調査の方向性

まず containers/quantecon/Dockerfile、containers/quantecon-build/Dockerfile、.github/workflows/build-containers.yml から始め、次に PLAN.md:82 と、そこで参照されている consumer ファイルを確認してください。直ちに対応可能な範囲は /etc/quantecon-container マーカーですが、より広い issue では、識別と recipe の再現性を floating tag とどのように両立させるかを定義する必要があります。完了基準はまだ整理されていません。

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

説明

discuss low-priority

From QuantEcon/meta#52 (2021, closed as answered): can containers give us reproducible QuantEcon environments? Answered for our CI here; this issue holds the rest.

1. No environment a reader or collaborator can reproduce. Images are internal — an anonymous pull of ghcr.io/quantecon/quantecon returns UNAUTHORIZED — so readers get Colab.

2. Our own builds are not reproducible either.

  • Consumers float on a mutable tag: builds emit a commit-SHA tag beside :latest (type=sha,prefix={{branch}}- → main-<short-sha>, .github/workflows/build-containers.yml:63, :105), but every consumer and doc pins :latest (README.md:108, docs/CONTAINER-GUIDE.md:9-10, setup-environment/README.md:34-35); neither is stable, since the weekly rebuild (cron: '0 2 * * 1', :11) re-pushes both at the same commit. The SHA names the recipe commit, not the image; only the digest is durable and nothing records it — the publish manifest carries name/tag/commit/timestamp/size, no container identity (publish-gh-pages/action.yml:126-135).
  • Recipes float too: FROM ubuntu:24.04, tag not digest (containers/quantecon/Dockerfile:1, containers/quantecon-build/Dockerfile:1); unpinned TeXLive/system apt-get install (containers/quantecon/Dockerfile:8); unpinned quantecon-book-networks in both env files (containers/quantecon/environment.yml:25, containers/quantecon-build/environment.yml:74); lean image's Jupyter Book stack floor-pinned >= (containers/quantecon-build/environment.yml:65-73). Only the Miniconda installer is fetched under a checksum (containers/quantecon/Dockerfile:77-78), so date- or digest-addressing a past image still would not make it rebuildable.
  • Unversioned AMI: lecture repo GPU workflows name the RunsOn AMI bare, image=quantecon_ubuntu2404, no digest or version.
  • Unpinned build-time installs: pip install -U "jax[cuda13]" in both lecture-python.myst and lecture-jax, plus pip install numpyro in the former.

Only the first two are owned here, but all four compose.

Identify (which environment built this publish?) is cheap and already homed: #30's field list includes container tag/digest, PLAN.md:82 names container digest capture. Rebuild (from the recipe) needs a base-image digest pin plus an apt pin set, and must not be assumed by it.

Any answer must be additive: floating is deliberate — exact pins on action refs stranded lecture-dp three releases behind (PLAN.md:33), and the proposed fix there is a staging tag plus a release gate (#135), not a repin of consumers.

  • Record the building commit SHA in /etc/quantecon-container, today a bare marker line, an untagged image=ghcr.io/quantecon/quantecon, and build_date (containers/quantecon/Dockerfile:99-101). Makes containers self-identifying; #30 needs it regardless.

QuantEcon/meta#349 (pixi lockfiles) and QuantEcon/meta#165 (uv) cover the conda and pip layer, both scoped to maintainer/CI tooling; the system and reader layers are untracked. Not urgent, not necessarily one piece of work — filed to give the question a public home.

主要言語
Shell
スター
0
フォーク
1
平均マージ
20時間 3分
マージ済み PR(30日)
48

環境構築

はじめの一歩

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

QuantEcon/actions のほかの issue

QuantEcon/actions の issue をすべて見る

似ている issue

Shell/Bash の issue をもっと見る

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

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