Building from Source¶
Builds run inside Docker — Go does not need to be installed on the host. Only Docker and Make are required.
Common make targets¶
| Target | Description |
|---|---|
make build |
Build Docker image for the current platform |
make build-multi |
Multi-arch build (amd64 + arm64, requires Docker buildx) |
make run |
Start the dev container via docker-compose |
make compile |
Fast cross-compile — injects binary into a running dev container |
make watch |
Start with docker-compose watch mode (auto-rebuild on source changes) |
make test |
Full test suite: pre-commit → unit → build → integration → e2e |
make test-unit |
Unit tests only (runs inside Docker) |
make test-integration |
Integration tests against a running SUT container |
make e2e |
Playwright end-to-end browser tests |
make snapshot |
GoReleaser cross-compile snapshot (all platforms + .deb, no publish) |
make test-deb |
Build snapshot .deb and run integration tests against the installed package |
make lint |
golangci-lint |
make coverage |
Go test coverage report |
make deps |
go mod tidy + verify |
make install-hooks |
Install git pre-commit hook |
Development workflow¶
make run # start the dev container
# edit source files...
make compile # rebuild binary and hot-swap into the container (fast)
make test-unit # run unit tests
The pre-commit hook (make install-hooks) runs whitespace checks and go mod tidy verification before each commit.
Release builds¶
Releases use GoReleaser configured in .goreleaser.yml:
- Linux binaries for amd64 + arm64
.debpackages (with systemd unit, post-install script)- Multi-arch Docker images pushed to
ghcr.io/jchonig/yaamon
See CI/CD for the full pipeline description.