Firstly, thank you for taking the time contribute! SPI-Tooling exists to make service loading easier, and your ideas, fixes and improvements help make that possible.
This guide will walk you through how to set up your environment, make changes, and submit them in a way that keeps the project reproducible and contributor-friendly.
- Code of Conduct
- Ways to Contribute
- Development Setup
- Branching & Commit Guidelines
- Testing
- Pull Request Process
- Release Process
By participating in this project, you agree to uphold our Code of Conduct. We are committed to a welcoming experience for everyone.
- Report bugs - open an issue with clear reproduction steps.
- Suggest features - describe the problem you want to solve, not just the solution
- Improve documentation - even small clarifications help future contributors
- Submit code changes - fix bugs, add features, or improve build automation
git clone https://github.com/<your-username>/SPI-Tooling.git
cd SPI-Toolinggit config user.name "Your Name"
git config user.email "your.email@example.com"./gradlew build./gradlew kotest- Default branch:
main - Feature branches:
feature/[issue-<number>/]<short-description> - Bugfix branches:
bugfix/[issue-<number>/]<short-description> - Chore branches:
task/[issue-<number>/]<short-description>
Commit messages should follow the Conventional Commits style:
feat: add support for nested service providers
fix: correct binary name in generated META-INF/services
docs: update README with architecture diagram
We use:
- Kotest for expressive, readable tests
- kotlin-compile-testing for compile-time validation
Before opening a PR:
./gradlew clean kotest- Fork the repository
- Create a branch from
SPI-Tooling/main - Make your changes, keeping builds reproducible (no manual steps)
- Update any necessary documentation
- Add additional tests, or adjust tests, if necessary
- Update the version in
gradle.propertiesfollowing Semantic Versioning - Open a pull request against
SPI-Tooling/mainwith:
- A clear title with format:
[type]: <description> - A detailed description of the changes
- A link to any relevant issues
- Notes on any breaking changes
Releases are automated via GitHub Actions and occur when a push or merge is made to main.
- Keep changes focused - small, atomic PRs are easier to review
- If you're unsure about an approach, open a Draft PR early for feedback
- Think about future maintainers - clear code, clear cods, clear tests