Submit an issue View all issues Source
MIR-1960

Keep stackbuild's pinned base image versions current on a schedule

Open public
phinze phinze Opened Sep 25, 2026 Updated Sep 25, 2026

Every stack carries version choices someone has to remember to bump, and they drift, both in code and in the docs that describe them:

  • Default versions are hard-coded per stack: Ruby 3.4, Python 3.11, Node 20, Go 1.23, Bun and Rust floating 1.
  • Two of those are past upstream end of life: Node 20 (April 2026), and Go 1.23 (Go supports only the two newest releases; this repo builds with 1.26).
  • The docs have already drifted from the code: guides/index.md says Ruby defaults to 3.2 and Rust to 1.83.
  • The Elixir stack (MIR-1404) adds a table in pkg/imagerefs mapping Elixir minors to exact hexpm tags, because hexpm has no floating tags. It lags, never breaks (hexpm keeps old tags), but it needs refreshing when Elixir or OTP releases.

Rather than a generator for Elixir alone, we'd want one pattern for all stacks:

  1. A go generate step per stack (or one tool) that reads the upstream registry and rewrites a .gen.go file of current versions: the Elixir table, and each stack's default. A bump becomes one command plus a diff to review.
  2. The docs defaults (the index's "Default version" column) render from the same data, or a check fails when they disagree.
  3. A scheduled workflow runs the generator and opens a PR when anything changed, so keeping current means approving a PR.

Worth deciding along the way what a stack's default should track (newest stable, or newest still under upstream support) so every stack follows the same rule.