Skip to content

ci: make Dockerfile the only Ruby/Node pin + bump Ruby - #1198

Draft
gildesmarais wants to merge 5 commits into
mainfrom
chore/ruby-4.0.8
Draft

gildesmarais wants to merge 5 commits into
mainfrom
chore/ruby-4.0.8

Conversation

@gildesmarais

@gildesmarais gildesmarais commented Oct 23, 2026 •

Copy link
Copy Markdown
Member

What changed

  • Root Dockerfile uses literal digest-pinned bases (node:22-alpine@sha256:…, ruby:4.0.8-alpine3.24@sha256:…) with stages node → frontend-builder → ruby → dev → builder → runtime.
  • New docker-compose.dev.yml builds target: dev (bind-mount /workspace, bundle volume, ports 4000/4001); bin/compose-contract-verify asserts that contract.
  • CI and bump-version run RuboCop/YARD/RSpec/OpenAPI/frontend/e2e/smoke inside html2rss/web:dev (GHA cache); no ruby/setup-ruby / actions/setup-node / .tool-versions.
  • Delete .tool-versions and .devcontainer/; Playwright prefers Alpine /usr/bin/chromium; docs/AGENTS.md describe docker compose -f docker-compose.dev.yml run --rm dev make ….

Why

Dependabot's Docker updater only registers literal FROM image:tag@sha256:… (dependabot-core#2057). ARG-default FROM and a second Ruby pin in .devcontainer/ were invisible; .tool-versions has no Dependabot ecosystem. One root Dockerfile is the version SSOT so Ruby and Node bump via package-ecosystem: docker at /.

Risk

  • medium — CI and local gates move from host/setup-ruby+setup-node into the dev image; first-run image build cost and Docker socket mount for smoke tests. Production builder/runtime stay no-Node, USER 991. Compose production/quickstart files unchanged.

Review map

  1. Dockerfile — digest pins, dev Node copy (not full /usr/local), production stages unchanged in intent
  2. .github/workflows/ci.yml — dev image build/load + docker run for ruby/openapi/frontend/smoke
  3. docker-compose.dev.yml + bin/compose-contract-verify — local dev contract
  4. docs/AGENTS.md/README.md — Dev Container → compose dev wording

Validation

  • docker run --rm -i hadolint/hadolint < Dockerfile — exit 0
  • bin/compose-contract-verify — passed
  • docker compose -f docker-compose.dev.yml run --rm dev bash -lc 'make setup && make ci-ready' — exit 0 (RuboCop, RSpec, OpenAPI verify, 3 e2e)

The latest 4.0 image is Alpine 3.24, which is what ruby:4.0.8-alpine publishes.
Dependabot's Docker updater only sees literal FROM tags, so drop ARG
indirection, .tool-versions, and .devcontainer; run CI and local gates
in the digest-pinned multi-stage `dev` image.
@gildesmarais gildesmarais changed the title chore(deps): bump Ruby to 4.0.8 ci: make Dockerfile the only Ruby/Node pin Oct 23, 2026
@gildesmarais gildesmarais changed the title ci: make Dockerfile the only Ruby/Node pin ci: make Dockerfile the only Ruby/Node pin + bump Ruby Oct 23, 2026
@gildesmarais
gildesmarais marked this pull request as draft October 23, 2026 14:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant