Skip to content

Go Service

Go

  • Build: the Go toolchain with modules; make build and make release-build differ only in stripped symbols.
  • Tests: go test; acceptance scenarios run with Godog from test/bdd/features/.
  • Lint: golangci-lint; go-arch-lint enforces the dependency direction app → infra → usecase → domain.
  • Rationale: Go builds static binaries, so one build serves every Linux target and the runtime image needs no libc.

Service

  • Structure: layers app, infra, usecase, and domain; a health endpoint exercised by liveness.feature; a domain model in specs/functional_design/domain_model.md.
  • Container image: built, scanned, and pushed in three jobs, handing the image over as an archive, so a vulnerability scan can stop an image before it reaches the registry. The runtime image is distroless: no shell and no package manager in production; a debug image adds investigation tools.
  • Release: a release tag re-tags the image built and tested at merge to main; it is never rebuilt.
  • Rationale: configuration comes from environment variables, so the same image runs in every environment.