Spike: Dockerfile runtime image alignment #22
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "18-dockerfile-alignment-spike"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
ruby-rails-runtimeimage used by landscaping-assistantChanges
docs/pipeline.md: Added "Runtime Image Alignment Spike" section covering all six investigation questions — what the runtime image provides, removable lines, port differences, pipeline impact, overlay adjustments, and ArgoCD Image Updater impactTest Plan
Review Checklist
Related Notes
ldraney/palinks #18— Spike: Align Dockerfile and pipeline with ruby-rails-runtime patternpalinks— the project this work belongs toCloses #18
QA Review -- PR #22
Scope
Documentation-only spike. 146 lines added to
docs/pipeline.md, zero deletions, no code changes. Single file changed.Findings
Content quality: Strong. The spike answers all six questions from issue #18 with concrete evidence. Line-by-line Dockerfile comparison, port analysis, and cross-repo impact assessment are thorough.
Minor observations (non-blocking):
"Assumed" language in the comparison table. Several cells say "Assumed pre-installed" or "Assumed set in image" for what
ruby-rails-runtimeprovides. This is reasonable for a spike (the runtime image contents were inferred from landscaping-assistant's usage pattern rather than inspecting the image directly), but a follow-up implementation ticket should confirm these assumptions by runningdocker inspectordocker runagainst the runtime image.Mermaid diagram in "Rolling Update" section still says port 80. The existing diagram at line 78 says "Start Puma on port 80" -- this was not updated as part of the spike, which is fine since the spike is investigatory. The summary correctly notes this needs updating during implementation.
No secrets or sensitive data committed. Clean.
Branch naming and commit message follow conventions.
18-dockerfile-alignment-spikematches{issue-number}-{kebab-case-purpose}.VERDICT: APPROVE
Documentation-only spike with well-structured findings. The "assumed" caveats are appropriate for investigation scope -- they should be resolved during the implementation phase. No blockers.
PR #22 Review
DOMAIN REVIEW
Tech stack: Documentation-only change (Markdown). No code, no Dockerfile changes, no infra changes. This is a spike deliverable -- a
docs/pipeline.mdaddition of 146 lines documenting the investigation into swappingruby:3.4.9-slimforruby-rails-runtimein the palinks Dockerfile runtime stage.Content accuracy verified against source files:
Dockerfilelines 26-52): The "palinks runtime stage (current -- 27 lines)" block in the spike is a faithful reproduction of the actual runtime stage. Line counts and content match.config/puma.rb(line 32): The spike correctly states Puma readsENV.fetch("PORT", 3000)-- verified atbind "tcp://0.0.0.0:#{ENV.fetch("PORT", 3000)}".docker-compose.yml: The spike correctly states dev is unaffected. The compose file usesruby-rails-buildfor dev and binds on port 9999, which is independent of the runtime image swap.docs/pipeline.mdline 33): The spike correctly identifies that the note "ruby-slim final image" in the existing sequenceDiagram would need updating in the implementation ticket.PORT=80is set in Dockerfile ENV (line 40) andEXPOSE 80(line 51). The spike's analysis of the port 80 vs 3000 decision is sound.palinks/apptags, not base image changes. The runtime base swap is invisible to it..woodpecker.yamlonly runs Kaniko against the Dockerfile. No pipeline changes needed.Spike quality: The six questions are well-structured, the comparison table is clear, the line-by-line diff is useful for the implementation ticket, and the "Summary of Required Changes" section provides a concrete action list. The recommendation (Option 2: switch to port 3000) is well-reasoned.
BLOCKERS
None.
This is a documentation-only spike with no code changes. The "no test coverage" blocker does not apply -- there is nothing to test. The content is factually accurate against the source files in the repo.
NITS
"Assumed" entries in comparison table: The table has five "Assumed pre-installed" / "Assumed set in image" entries for what
ruby-rails-runtimeprovides. This is honest for a spike (you can't inspect a Harbor image without pulling it), but the implementation ticket should verify these assumptions before committing to the swap. Consider adding a note like "Verify by inspecting the runtime image:docker run --rm harbor.../ruby-rails-runtime env" to reduce risk during implementation.CMD difference could be stronger: Q6 notes the
rails servervsbundle exec pumadifference but frames it as "consider adopting." For a production deployment, explicitbundle exec puma -C config/puma.rbis the better choice (avoids Rails server wrapper overhead, gives direct control over Puma config). The recommendation could be more definitive.Minor wording: "Unknown Ruby version (Harbor-managed)" in the comparison table -- this could be verified with
docker inspector by checking theruby-rails-runtimeDockerfile in whatever repo builds it. Worth linking to the source if known.SOP COMPLIANCE
18-dockerfile-alignment-spikefollows{issue-number}-{kebab-case-purpose}ldraney/palinks #18Closes #18present in PR body.envfiles, no credentials, no API keys in diffdocs/pipeline.md), scoped to the spikePROCESS OBSERVATIONS
pal-e-deploymentschanges are needed alongsidepalinkschanges, which means the implementation ticket should be scoped as a multi-repo change or broken into coordinated tickets.VERDICT: APPROVED
PR #22 Review
DOMAIN REVIEW
Tech stack: Documentation-only PR (Markdown). The spike content covers Docker, Kubernetes/Kustomize, ArgoCD, and Woodpecker CI -- so infrastructure domain expertise applies for factual verification.
Factual accuracy verified against the codebase:
rails serverCMD, manualapt-get, jemalloc symlink, user creation -- all confirmed.config/puma.rbline 32 confirmsENV.fetch("PORT", 3000)-- the spike's claim about Puma defaulting to 3000 is correct..woodpecker.yamlconfirmed: only runs Kaniko build-and-push, does not reference the runtime image directly. The spike's Q3 answer ("no pipeline changes needed") is accurate.docker-compose.ymlconfirmed: usesruby-rails-buildfor dev, not the runtime image. The spike's "no changes needed" claim is correct.harbor.tail5b443a.ts.net/library/ruby-rails-build:latest(Dockerfile line 5), consistent with the spike's description.Content quality:
The spike is thorough. It covers all six investigation questions with concrete line counts, file paths, and specific port numbers. The comparison table between palinks' manual setup and
ruby-rails-runtimepre-baked content is clear and useful. The recommendation (Option 2: switch to port 3000) is well-reasoned.The Q6 (CMD difference) section adds genuine value -- explaining that
rails serverwraps Puma with development middleware overhead in production is a worthwhile finding.The "Summary of Required Changes" section at the bottom is a solid handoff for the implementation ticket, listing exact files and exact values to change in both repos.
One factual caveat (not a blocker): The spike states the
base-imagesDockerfile usesRUBY_VERSIONARG to set the Ruby version, and that the runtime image pre-bakes identicalWORKDIR, user creation, and env vars. These claims reference external repos (base-images,landscaping-assistant,pal-e-deployments) that I cannot verify from this repo alone. The palinks-side claims are all verified.BLOCKERS
None. This is a documentation-only spike with no code changes. No test coverage, input validation, or security concerns apply.
NITS
The spike's mermaid diagram note in the existing
pipeline.md(line 33) says "ruby-slim final image" -- the spike correctly identifies this as needing an update in the implementation ticket, but does not update it in this PR. That is appropriate for a spike (no code changes), but worth noting that the existing doc will be temporarily inconsistent if someone reads only the top section without scrolling to the spike.Minor: The spike references
base-imageswith a Forgejo URL (https://forgejo.tail5b443a.ts.net/ldraney/base-images). If the repo is ever moved or renamed, this link will break. Not actionable for a spike doc, just noting.SOP COMPLIANCE
18-dockerfile-alignment-spikefollows{issue-number}-{kebab-case-purpose}conventionldraney/palinks #18) and project (palinks)Closes #18present for auto-closedocs/pipeline.md, 146 additions)PROCESS OBSERVATIONS
VERDICT: APPROVED