Every stack answered to *.infinito.test, and the host resolver pointed that zone at 127.0.0.1, so a worktree's stack on its own bind IP could not be opened in a browser while the primary stack existed. INFINITO_DOMAIN is now derived per checkout: main.infinito.test for the primary one, and for a linked worktree its branch, lowercased with everything outside a-z0-9_- turned into "-", below INFINITO_DNS_DOMAIN (feature/store-i18n -> feature-store-i18n.infinito.test). The branch is read from the worktree's gitdir HEAD instead of running git, because git refuses the mounted checkout inside the stack container. GitHub and act runs keep the static default, custom.env still wins. The handler overrides the caller's value on purpose: inside the stack container that value is the previous .env, which make setup rewrote on every deploy, so the old domain kept feeding itself back into the next compose up. make network-dns-setup routes each stack's domain to the INFINITO_BIND_IP in that checkout's .env, with a local= line so AAAA answers NODATA instead of the primary stack's ::1. It skips domains outside the base zone, which a stale .env still carries, and fails when two checkouts claim one domain. worktree-up prints the domain and the follow-up command. Existing checkouts switch after make dotenv-force and a redeploy. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
DNS Setup Scripts 🌐
This directory contains platform-specific scripts for setting up local DNS resolution for the infinito.test domain (and subdomains) on the development machine.
All scripts map *.infinito.test → 127.0.0.1 so that local deployments are reachable via their expected hostnames.
Every stack has its own domain below it (INFINITO_DOMAIN): the primary checkout is main.infinito.test, a worktree from make worktree-up is its branch lowercased with every character outside a-z0-9_- replaced by - (feature/store-i18n → feature-store-i18n.infinito.test).
linux.sh routes each stack's domain to that checkout's INFINITO_BIND_IP, read from the .env of every git worktree list entry. Re-run make network-dns-setup after creating or removing a worktree.
Scripts 📄
linux.sh 🐧
General-purpose DNS setup for Linux systems. Supports multiple strategies depending on the environment:
- NetworkManager + dnsmasq. preferred path when NetworkManager is active; configures the NM dnsmasq plugin with a wildcard zone entry.
- System dnsmasq. fallback when NetworkManager is not running; configures a standalone dnsmasq service.
/etc/hostsfallback. used in non-systemd environments (e.g. Docker containers, LXC) where service management is unavailable; writes a managed block of host entries directly into the hosts file.
Shared helper functions are sourced from ../common.sh.
wsl.sh 🪟
WSL2-specific DNS setup. Only executes when running inside a WSL2 environment (detected via /proc/version). Configures:
- dnsmasq with the discovered WSL2 upstream DNS gateway as forwarder.
- systemd-resolved stub listener disabled to avoid port conflicts.
/etc/resolv.confpointed at the local dnsmasq instance (127.0.0.1)./etc/wsl.confset togenerateResolvConf=falseto prevent WSL from overwriting the resolver config on restart.
Related 🔗
- Makefile Commands. canonical Make target index for this area
../remove.sh. teardown script that undoes the DNS configuration../common.sh. shared variables and helper functions used bylinux.sh