Skip to main content
scripts/test-first-hour.sh replays what a new user does in their first hour, in a systemd Ubuntu 24.04 container on the local Docker: install, setup link, admin, CLI sign-in, deploy a sample app, open it on its zero-config hostname, a second deploy under a request loop, rollback, doctor, domains diagnose on a made-up hostname, and uninstall. Each step prints a PASS or FAIL line with timings, and the exact output when it fails. It needs no registry login and no GitHub release: the binaries are built locally (or passed in) and the sample app is built on the host and loaded into the container.
Steps 2 to 10 depend on earlier state, so a --steps subset runs against a container kept by a previous --keep run. Timeouts are env vars with defaults: FIRST_HOUR_TIMEOUT (whole run, 1500s), FIRST_HOUR_INSTALL_WAIT, FIRST_HOUR_READY_WAIT, FIRST_HOUR_CUTOVER_WAIT, FIRST_HOUR_DOCTOR_WAIT, FIRST_HOUR_DIAGNOSE_WAIT. A new step is one function plus one line in STEP_TABLE. It needs a Docker daemon that allows --privileged and outbound access for the installer’s Docker install, and refuses to start under 5G free. Not covered: real ACME certificates, a git build, a second node, and a real public IP. The ingress is checked with curl --resolve, and the dashboard page is only checked when the binary embeds the web build. Not wired into a workflow yet. A ready-to-use nightly job, to paste into nightly.yml:
Last modified on October 21, 2026