build-docker-image-and-host-on-this-forgejo-instance-370 #383
No reviewers
Labels
No labels
Kestra
bug
enhancement
someday
subtask
☁️ api
🎛️ infrastructure
🐞 sentry
📆 2025 Season
📝 pages
allpicks
📝 pages
picks
📝 pages
standings
🚀 performance
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
johnsturgeon/tgfp-web!383
Loading…
Reference in a new issue
No description provided.
Delete branch "build-docker-image-and-host-on-this-forgejo-instance-370"
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?
I've reviewed the full change. This is an infrastructure PR (image build + Forgejo registry hosting); no application logic changed. Everything checks out — the Dockerfile layering is sound, the entrypoint's
op runre-exec and recursion guard are correct, the excludednode_modulesis safe because Tailwind is precompiled toapp/static/css/app.css,/pingexists for the healthcheck, and no dangling references to the deleted scripts remain.This PR cleanly moves the image build off the production host into a Forgejo Actions workflow and makes the running image the single source of code, secrets template, and migrations. The design is well-reasoned and unusually well-documented; I found no correctness bugs and only a few minor points worth considering.
Worth fixing
Dockerfile:32-35— theopbinary is downloaded with no integrity check. The version is pinned (good, reproducible), but the zip is fetched over the network and installed without verifying a checksum or signature. Since this binary later handles every production secret, a compromised/MITM'dcache.agilebits.comresponse would be baked straight into the image. 1Password publishes SHA256 sums alongside the release; piping through asha256sum -cstep would close the gap for the cost of one line.Nits
.forgejo/workflows/build-image.yml:88-92— cancelled push can transiently leave:lateststale, but self-heals. Withcancel-in-progress: true, a build cancelled mid-push (order issha,version,latest) could stop after pushing:shabut before:latest. The next merge's build corrects it, so the concurrency reasoning in the comment holds; just noting the window exists.README.md:100— the clone URL now hardcodes the internal IPssh://git@192.168.192.129/.... Fine for a homelab, but if the LXC moves this drifts, same as the address note already called out forcompose.prod.yml. A hostname would age better.docker/entrypoint.sh:55-66— the DB wait readsos.environ["DATABASE_URL"]unguarded. Ifopresolution silently produces an empty value (or the ambient-env path is taken without it set), this raises a bareKeyErrorrather than the clearer "DB not reachable" / missing-secret message. Not wrong — it fails loudly — but a targeted error would save a debugging step during a rotation mishap.No test coverage concerns: the diff is config/CI/docs only, with no Python behavior to cover.