Every journal needs a first entry, and every pipeline needs a first deploy. This post is both.
If you can read this, the following chain of events worked end to end: a
git push landed on a self-hosted Forgejo, a CI workflow rendered this site
with Hugo inside an unprivileged build container, packed it into an OCI image,
pushed that image to the server’s own registry — and a webhook swapped the
running container for the new one, with an automatic rollback standing by in
case anything went wrong.
git push && sleep 60 && curl -s https://dreaminginelectric.com/posts/hello-world/
More dispatches to follow.
Update: this very sentence arrived via the pipeline’s first fully automatic push-to-live deployment.