Contributing¶
Quick start¶
git clone https://github.com/tomblancdev/stromboli
cd stromboli
go mod download
make test
make build
./stromboli
Prerequisites¶
| Tool | Version |
|---|---|
| Go | 1.24+ |
| Podman | 4.0+ |
| Make | Any |
Workflow¶
- Create a branch:
git checkout -b feat/my-feature - Write a failing test
- Write the minimal code to pass it
- Run
make test && make lint - Commit with conventional commits
- Push and open a PR
Commit format¶
type(scope): description
feat(runner): add image validation
fix(auth): handle expired tokens
test(runner): add timeout tests
docs: update security guide
refactor(api): simplify handler logic
Types: feat, fix, docs, test, refactor, ci, chore
Testing¶
make test # all tests
make test-unit # unit only
make test-integration # requires Podman
make test-coverage # with coverage report
Tests go next to the code: runner.go → runner_test.go. Use the MockExecutor for unit tests — see testing guide for patterns.
Code style¶
Follow Effective Go. Key conventions:
- Wrap errors with context:
fmt.Errorf("failed to create container: %w", err) - Small interfaces (1-3 methods), defined where used
- Context as first parameter
go fmtandgolangci-lintmust pass
Pull requests¶
Before submitting:
-
make testpasses -
make lintpasses - New code has tests
- Docs updated if needed
PR titles follow the same commit format. Squash-merged to keep history clean.
Releases¶
Tag and push to trigger the release pipeline:
This builds binaries, pushes Docker images, creates a GitHub release, and deploys docs.
Help¶
- GitHub Issues — Bugs and feature requests
- Architecture — How the code is organized
- Testing — Test patterns and helpers
MIT License — contributions are licensed under the same terms.