A modular, versioned starting point for production-grade Go projects.
goboot is a deterministic scaffolding tool for Go repositories.
It focuses on explicit, layered project setup that stays maintainable as projects grow.
It is not a framework or IDE. It targets teams that want reproducible output, clear service boundaries, and auditable generation behavior.
v0.1.0 is the CI foundation milestone with provider-aware CI generation
and policy-based image pinning.
- Modular Service Architecture: Logic is split into isolated services
(
baseproject,baselint,basetest,baseci) with strict contracts. - Containerized Lint Tooling: Lint jobs run via Docker by default, while CI simulation uses host tools (
act,gitlab-ci-local). - Secure Scaffolding: Built-in protection against path traversal and strict root confinement.
- BDD Testing: Full Ginkgo/Gomega suite covering core packages and E2E flows.
- CI Generation: GitLab and GitHub CI templates generated from explicit contracts and image policies.
For file layout details, see doc/PROJECT_STRUCTURE.md.
Even in early stages, goboot is being built with:
- Layered versioning and changelog visibility
- Clear module boundaries (
cmd/,pkg/,configs/, etc.) - Future support for Docker, CI/CD, and template-driven code generation
You can follow the structural milestones in ROADMAP.md.
- Go 1.25+
- Make (optional, for
Makefiletasks) - Task (optional, for
Taskfile.ymltasks) - GolangCI-Lint (for Go linting, see
.golangci.yml) - Yamllint (for YAML linting, see
.yamllint.yaml) - Checkmake (for Makefile linting)
- Docker (for running Markdown linting via container)
- act (for local GitHub Actions simulation)
- gitlab-ci-local (for local GitLab CI simulation)
- Markdownlint (for Markdown linting, see
.markdownlint.yaml) - EditorConfig Checker (for
.editorconfigvalidation)
For make verify_ci_canary, Docker daemon access
(including /var/run/docker.sock) and a non-restricted host runtime are required.
Provider selection for canary checks defaults to gitProvider in configs/goboot.yml
and can be overridden with ./scripts/verify_ci_canary.sh --provider=<github|gitlab|both>.
git clone https://github.com/it-timo/goboot.git
cd goboot
make lint
make test
# or, using Task
task lint
task testmake test runs BDD suites (Ginkgo/Gomega) with race detection and coverage,
excluding /test/noauto and /templates by default. See doc/TESTING.md.
There’s still no “one-click project generator” here — the goal is deterministic scaffolding with visible layers.
If you are new to the repository, start with:
These documents focus on input config -> expected output behavior.
This repository uses:
- ROADMAP.md for planned milestones
- doc/VERSIONING.md for semantic version handling
- doc/WORKFLOW.md to define long-term contribution and CI logic
- doc/ci.md for CI policy modes and provider-specific generated CI behavior
- doc/quickstart.md for first-run usage without reading internals
- doc/examples.md for concrete config-to-output scenarios
- doc/PROJECT_STRUCTURE.md to track how the folder layout evolves over time
- doc/README.md for the full docs index
- doc/adr/ for architecture decisions in ADR format
- doc/img/ for flow visualizations
These documents evolve alongside the project.
To protect generation runs from unexpectedly large template trees, goboot enforces runtime guardrails:
- max template files per service source:
5000 - max total template bytes per service source:
64 MiB
Limits are validated before rendering and fail fast when exceeded.
Licensed under the MIT License. See LICENSE. Includes attribution in NOTICE (if applicable).
goboot is pre-alpha and intended for structural exploration and reproducible setup.
It is not yet suitable as a production generator baseline.
If goboot helps you or saves you time, consider supporting its development:
No pressure — just a small way to say "thanks" if it brought you value.