Keep stackbuild's pinned base image versions current on a schedule
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, Python3.11, Node20, Go1.23, Bun and Rust floating1. - 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.mdsays Ruby defaults to 3.2 and Rust to 1.83. - The Elixir stack (MIR-1404) adds a table in
pkg/imagerefsmapping 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:
- A
go generatestep per stack (or one tool) that reads the upstream registry and rewrites a.gen.gofile of current versions: the Elixir table, and each stack's default. A bump becomes one command plus a diff to review. - The docs defaults (the index's "Default version" column) render from the same data, or a check fails when they disagree.
- 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.