podman builds an OCI image by default and drops the Dockerfile's HEALTHCHECK,
so the first deploy failed at "Wait for the container healthcheck to pass" with
"container ... has no defined healthcheck" even though the app was up.
- Declare the same check on the hops.container unit (HealthCmd + interval,
timeout, retries, start period), the convention menu-admin already uses.
- Flush handlers right after starting, before the gate: the unit template's
restart handler otherwise runs at the end of the play, so a run that changes
only the unit would test the stale container.
- Makefile: podman build/push from the committed tree (git archive HEAD),
tagged :<commit> + :latest; PLATFORM defaults to linux/arm64 for emily.
- deploy.sh: push the commit first, refuse a dirty tracked tree or
HEAD != origin/main, then build and deploy that exact commit via
-e image_tag (rollback = an older commit).
- ansible: target emily with no become. The register role writes hops.network
(NetworkName=hops_net) plus the caddy.container.d drop-in; the hops role
installs ~/podman-data/hops and hops.container under systemctl --user with a
podman healthcheck gate; the caddy role appends the site blocks to the shared
Caddyfile and reloads.
- Drop the Docker-era network role, community.docker requirements,
ansible/files templates and docker-compose.yml.
- .containerignore replaces .dockerignore.
- README: Podman build, rootless Quadlet deploy on emily.