Thank you for your interest in contributing to HomeClip! This document provides guidelines for contributing to the project.
We use Conventional Commits for our commit messages. This enables automatic versioning and changelog generation.
<type>(<scope>): <subject>
<body>
<footer>
feat: A new feature (triggers minor version bump)fix: A bug fix (triggers patch version bump)docs: Documentation only changesstyle: Changes that don't affect code meaning (white-space, formatting)refactor: Code change that neither fixes a bug nor adds a featureperf: Performance improvementtest: Adding or updating testsbuild: Changes to build system or dependenciesci: Changes to CI configuration files and scriptschore: Other changes that don't modify src or test filesrevert: Reverts a previous commit
Add BREAKING CHANGE: in the commit footer or append ! after the type/scope to trigger a major version bump.
feat!: remove support for Go 1.20
BREAKING CHANGE: Minimum Go version is now 1.24.6
feat(api): add file upload endpoint
Implements multipart form data handling for file uploads
with configurable size limits.
Closes #123
fix(memory): prevent concurrent map access
Add mutex locks to protect document map from
concurrent read/write operations.
docs(readme): update Home Assistant integration examples
Simplify the configuration examples to show only
essential read/write operations.
- Fork the repository and create your branch from
main - Follow conventional commits for all your commits
- Update documentation if you're changing functionality
- Add tests for new features
- Ensure all tests pass with
make test - Update the README if needed
- Submit a pull request with a clear description
Pull request titles should also follow the conventional commit format, as they're used for squash merges:
- ✅
feat: add Docker health check endpoint - ✅
fix: resolve memory leak in file handler - ❌
Added new feature - ❌
bugfix
- Install Go 1.24.6 or later
- Clone the repository
- Install development tools:
go get -tool go.uber.org/mock/mockgen@latest
- Generate mocks:
go generate ./...
- Run tests:
make test
- Write table-driven tests when possible
- Ensure all new code has test coverage
- Use mocks for external dependencies
- Run
make testbefore submitting PR
- Follow standard Go formatting (
go fmt) - Use meaningful variable and function names
- Keep functions small and focused
- Document exported functions and types
- No unnecessary comments in code
Releases are automated using semantic-release:
- Merge PR to
mainwith conventional commit message - GitHub Actions runs semantic-release
- Version is bumped based on commit types
- Changelog is generated automatically
- Git tag is created
- GitHub Release is published
- Docker images are built and pushed to GHCR
The process is fully automated, just follow conventional commits!
Feel free to open an issue for any questions about contributing.