- Bump Node 22.23.0 → 22.23.1, Node 24.17.0 → 24.18.0 (npm 11.13.0 → 11.16.0) to match current NodeSource upstream and unblock the
cirequired check, which was failing the version-match guard in the Dockerfile build step for both versions
- Harden mutation coverage to 100% across all subjects: kill surviving mutations in
ImageGenerator,TagGenerator,DependabotGenerator,GenerationMessage,Metadata,Template; addspec/generation_message_spec.rb; document equivalent mutants inconfig/mutant.ymlforManifestLoader,RubyChecker,NodeChecker,Util, and others
- Bump Ruby 4.0.2 → 4.0.5
- Add mutation testing via
mutant/mutant-rspec(config inconfig/mutant.yml,usage: opensource); run withbin/mutant run - Harden
ImageGeneratorspecs to kill surviving mutants (orphan-cleanup prompt/guards/subtraction, uppercase-Yconfirmation, sorted.generated.yml, non-string interpolation pass-through,generation_message/output_dirrendering) — mutation coverage 95.70% → 98.87% (remaining survivors are equivalent mutants) - Harden
VersionCheckerspecs: add stub subclass tests for#check, abstract-method contracts for#manifest_key/#fetch_upstream/#compare, error-message precision for#apply!; guard#checkagainst nil versions — mutation coverage 47% → 100% - Isolate
ImageGeneratororphan-cleanup specs in a throwaway working directory so they no longer createtest/dirs in the repo root; this also removes cross-example state leakage that made mutation results non-deterministic - Drop unused
.with_indexfromImageGenerator#interpolate_registry(dead enumeration index) - Bump Node 22 to 22.23.0 (npm 10.9.8)
- Bump Node 24 to 24.17.0 (npm 11.13.0)
- Replace Node 25 with Node 26 (26.3.1, npm 11.16.0)
- Generate
.github/dependabot.ymldocker entries frommanifest.ymlvia newrake generate:dependabottask and.github/template/dependabot.yml.erb, so they can never drift from the image versions we build - Add CI step verifying generated files are up to date (
rake generate:all+git diff --exit-code) - Make
TagGeneratorread the commit SHA from an explicitgithub_shavalue instead ofENV['GITHUB_SHA'], so template generation is deterministic regardless of environment (the SHA tag is now injected only by the CI merge matrix inrakelib/ci.rake, where published images are tagged)
- Bump Ruby 4.0 to 4.0.5
- Bump Ruby 4.0 to 4.0.4
- Bump Ruby 4.0 to 4.0.3
- Bump Node 24 to 24.15.0 (npm 11.12.1)
- Add
core/resoluteto.github/dependabot.ymlso upstream Ubuntu 26.04 base-image changes are surfaced (was missed when resolute landed) - Switch Gemfile source from
beta.gem.coop/cooldowntogem.coopso Dependabot can resolve security fixes (cooldown compact_index was lagging behind published releases, hiding rack 3.2.6 and blocking 13 open rack vulnerability PRs) - Pin nodesource origin via apt preferences so node 18/20 aren't shadowed by resolute's native nodejs 22.22.1
- Pin ruby 3.1 to noble (fails to compile under resolute's gcc 15/16 due to K&R-style declarations in upstream
enc/jis/props.kwd) - Promote resolute (Ubuntu 26.04) to default
core:latest; ruby 3.1+ and node 18+ rebased from noble → resolute via the globals default - Pin ruby 2.7 and 3.0 explicitly to noble (focal-apt openssl 1.1.1 workaround incompatible with resolute)
- Add GitHub link to site main nav
- Sort image version tables descending (independent of manifest.yml order) so the latest version appears first
- Bump Node 25 to 25.9.0 (npm 11.12.1) to match nodesource upstream
- Parallelize cleanup-packages via matrix (one job per package) to avoid 6h+ sequential runs
- Exclude
cache-*tags from cleanup to preserve build cache
- Pin
snok/container-retention-policyto v3.0.1 (v3 tag doesn't exist, failing weekly since 2026-03-01) - Rewrite README with image version table and clearer build/dev instructions
- Bump rubocop 1.85.1 → 1.86.0
- Fix cleanup-packages workflow: use humantime
cut-offformat and replace removedtag-regexwithimage-tagsglobs - Fix cleanup-packages
accountfromdjbendertouser(personal account literal required by v3), enable dry-run, remove debug curl - Replace
snok/container-retention-policywithdataaxiom/ghcr-cleanup-actionfor multi-arch-aware cleanup including untagged orphans
- Bump Node 20 to 20.20.2, Node 22 to 22.22.2, Node 24 to 24.14.1, Node 25 to 25.8.2
- Fix dev cache fallback ref:
dev-<version>→<version>-devto match actual image tags - Local builds now pull CI's per-arch
mode=maxcache viaARCHHCL variable - Remove
cache-tofrom bake files (CI overrides via--set, local builds don't push) - Dynamic arch detection in
build.rake(overridable viaARCH=amd64) - Echo full docker command before each build task runs
- Remove stale dependabot entries for retired node versions (8, 10, 12, 14)
- Fix docs site links missing GitHub Pages base path prefix (
/docker-base-images)
bin/check-versions— unified version checker for Ruby + Node using Strategy pattern- Split
VersionChecker,RubyChecker,NodeCheckerinto separate files underlib/ - Block-scoped regex replacements to prevent gsub collisions across version entries
apply!raises on unmatched replacements instead of silently skippingtrack_filesin SimpleCov config to catch untested lib files
- GitHub Pages documentation site with Sinatra + Parklife static build
lib/manifest_loader.rb- shared manifest loading independent of Rakelib/site_manifest.rb- manifest data layer for the documentation sitedeploy-docs.ymlworkflow for automatic GitHub Pages deploymentSiteManifest: use.except('globals')instead of destructive.deleteSiteManifest::Version: accept image type name directly, removeguess_image_name- Remove unused pass-through helpers from site app
deploy-docs.yml: fix paths filter (remove redundant entry, add Gemfile/Gemfile.lock/.ruby-version)bin/static-build: usecp -R site/public/.to avoid glob expansion edge case- Add SRI hash to Pico CSS CDN link
- Update core/README.md: add noble tags, remove stale slim tags
- Update ruby/README.md: add all current versions/tags (2.4-4.0), fix patch versions and distro suffixes
- Add Derek Bender copyright to LICENSE alongside original Bridge copyright
- Centralize cache config:
CacheRefmodule builds cache ref strings,HclFormatterhandles HCL list formatting for all array values in bake templates (#251) - Add
rubocop-rspec, excludebin/from rubocop
- SimpleCov with branch coverage for RSpec tests
- Centralize registry config:
ghcr.io/djbendernow defined once inmanifest.ymlglobals (#250) - Centralize
platformsconfig inmanifest.ymlglobals (previously hardcoded in templates) - Native ARM64 builds using
ubuntu-24.04-armrunners - significantly faster than QEMU emulation (ruby builds drop from ~40min to ~10min) - Drop Node 8, 10, 12, 14 (NodeSource GPG key no longer available for old repos)
- Node 25: 25.3.0 → 25.6.0
- Orphan directory cleanup during generation - prompts before removing directories no longer in manifest (auto-confirms in non-TTY/CI environments)
.generated.ymltracks generated directories for cleanup detection- Add native architecture build instructions to README
- CI gate job for stable branch protection check
- Ruby 4.0 support (4.0.1)
{major}-devtag for Ruby images (e.g.,ruby:3.3-dev) - now matches Node pattern- Merge jobs to create multi-arch manifests after platform-specific builds
- RSpec and RuboCop run in CI workflow
- dependabot.yml updated for node version changes
- .rubocop.yml migrated from
requiretopluginssyntax - Use
YAML.safe_load_filefor security in ImageGenerator - Remove unused
copy_non_template_filesmethod from ImageGenerator - Drop Node 21, 23
- Improve "How to build" section formatting in README
- Remove deprecated
docker buildx installstep