Feature: Dockerfile detection as an alternative build path
Right now Aeroplane always builds with Railpack. That works great for most projects, but there are cases where a repo already has a Dockerfile and the user just wants to use it directly rather than have Railpack analyze the project.
Railway handles this by checking for a Dockerfile at the repo root before deciding how to build. If one exists, it uses docker build instead of Railpack. It even takes priority over an explicit builder = RAILPACK in railway.toml, which tells you how seriously they treat it as a signal of intent.
I'd like to add the same pattern to Aeroplane:
- After cloning the repo, check if a
Dockerfile exists at the root
- If yes, use
docker build (with the existing BuildKit daemon) instead of Railpack
- If no, fall through to Railpack as normal
- Store the detected build method on the service so it shows in the UI and can be overridden
- Optionally allow a custom Dockerfile path (Railway does this via
RAILWAY_DOCKERFILE_PATH)
Since both paths produce a tagged Docker image, nothing downstream needs to change: container orchestration, zero-downtime swaps, Caddy routing all stay the same.
One thing worth noting from the Railpack FAQ: Railpack explicitly does not support Dockerfiles and has no plans to. So this has to be a separate codepath that bypasses Railpack entirely, not something layered on top of it.
Happy to implement this if the approach sounds good. Wanted to check before putting in the work since it touches the core build path.
Feature: Dockerfile detection as an alternative build path
Right now Aeroplane always builds with Railpack. That works great for most projects, but there are cases where a repo already has a Dockerfile and the user just wants to use it directly rather than have Railpack analyze the project.
Railway handles this by checking for a
Dockerfileat the repo root before deciding how to build. If one exists, it usesdocker buildinstead of Railpack. It even takes priority over an explicitbuilder = RAILPACKinrailway.toml, which tells you how seriously they treat it as a signal of intent.I'd like to add the same pattern to Aeroplane:
Dockerfileexists at the rootdocker build(with the existing BuildKit daemon) instead of RailpackRAILWAY_DOCKERFILE_PATH)Since both paths produce a tagged Docker image, nothing downstream needs to change: container orchestration, zero-downtime swaps, Caddy routing all stay the same.
One thing worth noting from the Railpack FAQ: Railpack explicitly does not support Dockerfiles and has no plans to. So this has to be a separate codepath that bypasses Railpack entirely, not something layered on top of it.
Happy to implement this if the approach sounds good. Wanted to check before putting in the work since it touches the core build path.