mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2026-11-07 03:15:56 +00:00
default.env decomposed into INFINITO_PARENT_IMAGE_{OWNER,TAG,VARIANT}
atoms. New utils/env/handlers/infinito_parent_image.py owns the URL
composition `ghcr.io/{owner}/pkgmgr-{distro}:{tag}` as the single
definition site; scripts/image/{push,build}.sh consume the handler-
emitted INFINITO_PARENT_IMAGE from .env instead of inlining their own
format string.
Side effect: `compose up --build` now picks the parent image that
matches INFINITO_DISTRO. Previously default.env's hardcoded
pkgmgr-arch:stable won regardless, so debian-named containers were
silently built FROM the arch base. scripts/image/build.sh already
overrode per-distro, so its behavior is unchanged.
Other cleanups landed in the same pass:
- Slim variant removed end-to-end (Dockerfile stage, --variant CLI
flag, slim suffix logic). Zero in-repo callers used it.
- compose.yml build-args INFINITO_PARENT_IMAGE / INFINITO_SRC_DIR now
carry the same `:?Run 'make dotenv'…` guard as the runtime entries,
so a missing .env fails fast with a clear message instead of with
buildkit's `base name should not be blank`.
Note: fork-CI (pull_request_target trusted-helpers path) will stay red
until main's scripts/image/push.sh and scripts/meta/wait/images.sh
adopt the INFINITO_* names too — that is the deliberate cost of
keeping a single SPOT instead of carrying a bridge alias.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
126 lines
5.3 KiB
YAML
126 lines
5.3 KiB
YAML
---
|
|
x-ci-defaults: &ci_defaults
|
|
dns:
|
|
- ${INFINITO_DNS_IP}
|
|
dns_opt:
|
|
- ndots:1
|
|
|
|
# Bare CI/runtime stack. Cache layers in via compose/cache.override.yml.
|
|
|
|
services:
|
|
coredns:
|
|
image: coredns/coredns:1.14.3
|
|
container_name: infinito-coredns
|
|
command: ["-conf", "/Corefile"]
|
|
volumes:
|
|
- ./compose/coredns/Corefile:/Corefile:ro
|
|
networks:
|
|
default:
|
|
ipv4_address: ${INFINITO_DNS_IP}
|
|
|
|
infinito:
|
|
networks:
|
|
default:
|
|
ipv4_address: ${INFINITO_IP4}
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile
|
|
network: host
|
|
args:
|
|
INFINITO_PARENT_IMAGE: ${INFINITO_PARENT_IMAGE:?Run 'make dotenv' to generate the .env single source of truth}
|
|
INFINITO_SRC_DIR: ${INFINITO_SRC_DIR:?Run 'make dotenv' to generate the .env single source of truth}
|
|
NIX_CONFIG: ${NIX_CONFIG}
|
|
image: "${INFINITO_IMAGE}"
|
|
pull_policy: "${INFINITO_PULL_POLICY:?Run 'make dotenv' to generate the .env single source of truth}"
|
|
depends_on:
|
|
coredns:
|
|
condition: service_started
|
|
|
|
command:
|
|
- /sbin/init
|
|
- systemd.log_target=console
|
|
- systemd.log_level=debug
|
|
- systemd.journald.forward_to_console=1
|
|
- systemd.journald.max_level_console=debug
|
|
|
|
stop_signal: SIGRTMIN+3
|
|
|
|
# systemd needs the host cgroup namespace.
|
|
privileged: true
|
|
cgroup: host
|
|
tmpfs:
|
|
- /run
|
|
- /run/lock
|
|
|
|
tty: true
|
|
stdin_open: true
|
|
|
|
container_name: ${INFINITO_CONTAINER:?Run 'make dotenv' to generate the .env single source of truth}
|
|
restart: "no"
|
|
# Defaults of 0 map to "unlimited" in dockerd.
|
|
mem_limit: ${INFINITO_MEM_LIMIT:?Run 'make dotenv' to generate the .env single source of truth}
|
|
memswap_limit: ${INFINITO_MEMSWAP_LIMIT:?Run 'make dotenv' to generate the .env single source of truth}
|
|
cpus: ${INFINITO_CPUS:?Run 'make dotenv' to generate the .env single source of truth}
|
|
<<: *ci_defaults
|
|
volumes:
|
|
- /sys/fs/cgroup:/sys/fs/cgroup:rw
|
|
- .:${INFINITO_SRC_DIR}
|
|
- ${INFINITO_DOCKER_VOLUME:?Run 'make dotenv' to generate the .env single source of truth}:${INFINITO_DOCKER_MOUNT:?Run 'make dotenv' to generate the .env
|
|
single source of truth}
|
|
- infinito:/var/lib/infinito/
|
|
- letsencrypt:/etc/letsencrypt/
|
|
|
|
environment:
|
|
INFINITO_BUILDKIT_ENABLED: ${INFINITO_BUILDKIT_ENABLED}
|
|
INFINITO_CONTAINER_CA_ENABLED: ${INFINITO_CONTAINER_CA_ENABLED}
|
|
INFINITO_DNS_IP: ${INFINITO_DNS_IP}
|
|
INFINITO_DOMAIN: ${INFINITO_DOMAIN}
|
|
INFINITO_IP4: ${INFINITO_IP4}
|
|
INFINITO_IP6: ${INFINITO_IP6}
|
|
INFINITO_PLAYWRIGHT_KEEP: ${INFINITO_PLAYWRIGHT_KEEP}
|
|
INFINITO_SERVICES_DISABLED: ${INFINITO_SERVICES_DISABLED}
|
|
INFINITO_SRC_DIR: ${INFINITO_SRC_DIR}
|
|
PYTHONHTTPSVERIFY: "1"
|
|
GIT_SSL_NO_VERIFY: "0"
|
|
|
|
ports:
|
|
- "${INFINITO_BIND_IP:?Run 'make dotenv' to generate the .env single source of truth}:25:25"
|
|
- "${INFINITO_BIND_IP:?Run 'make dotenv' to generate the .env single source of truth}:110:110"
|
|
- "${INFINITO_BIND_IP:?Run 'make dotenv' to generate the .env single source of truth}:143:143"
|
|
- "${INFINITO_BIND_IP:?Run 'make dotenv' to generate the .env single source of truth}:465:465"
|
|
- "${INFINITO_BIND_IP:?Run 'make dotenv' to generate the .env single source of truth}:587:587"
|
|
- "${INFINITO_BIND_IP:?Run 'make dotenv' to generate the .env single source of truth}:993:993"
|
|
- "${INFINITO_BIND_IP:?Run 'make dotenv' to generate the .env single source of truth}:995:995"
|
|
- "${INFINITO_BIND_IP:?Run 'make dotenv' to generate the .env single source of truth}:4190:4190"
|
|
|
|
- "${INFINITO_BIND_IP:?Run 'make dotenv' to generate the .env single source of truth}:80:80"
|
|
- "${INFINITO_BIND_IP:?Run 'make dotenv' to generate the .env single source of truth}:443:443"
|
|
- "${INFINITO_BIND_IP:?Run 'make dotenv' to generate the .env single source of truth}:8448:8448"
|
|
|
|
- "${INFINITO_BIND_IP:?Run 'make dotenv' to generate the .env single source of truth}:3478-3480:3478-3480/udp"
|
|
- "${INFINITO_BIND_IP:?Run 'make dotenv' to generate the .env single source of truth}:3478-3480:3478-3480"
|
|
|
|
- "${INFINITO_BIND_IP:?Run 'make dotenv' to generate the .env single source of truth}:1935:1935"
|
|
|
|
- "${INFINITO_BIND_IP:?Run 'make dotenv' to generate the .env single source of truth}:2201:2201"
|
|
- "${INFINITO_BIND_IP:?Run 'make dotenv' to generate the .env single source of truth}:2202:2202"
|
|
- "${INFINITO_BIND_IP:?Run 'make dotenv' to generate the .env single source of truth}:2203:22"
|
|
- "${INFINITO_BIND_IP:?Run 'make dotenv' to generate the .env single source of truth}:33552:33552"
|
|
|
|
- "${INFINITO_BIND_IP:?Run 'make dotenv' to generate the .env single source of truth}:48081-48083:48081-48083"
|
|
- "${INFINITO_BIND_IP:?Run 'make dotenv' to generate the .env single source of truth}:48087:48087"
|
|
|
|
volumes:
|
|
docker:
|
|
infinito:
|
|
letsencrypt:
|
|
networks:
|
|
default:
|
|
driver: bridge
|
|
driver_opts:
|
|
com.docker.network.driver.mtu: "${INFINITO_OUTER_NETWORK_MTU:?Run 'make dotenv' to generate the .env single source of truth}"
|
|
ipam:
|
|
config:
|
|
- subnet: ${INFINITO_SUBNET:?Run 'make dotenv' to generate the .env single source of truth}
|
|
gateway: ${INFINITO_GATEWAY:?Run 'make dotenv' to generate the .env single source of truth}
|