Thank you for your interest in contributing! 🎉
Be respectful, inclusive, and constructive in all interactions.
- Check if the bug has already been reported in Issues
- If not, create a new issue with:
- Clear title and description
- Steps to reproduce
- Expected vs actual behavior
- Your environment (OS, GitHub Actions runner, etc.)
- Relevant logs (redact any secrets!)
- Check existing feature requests
- Create a new issue with:
- Clear use case description
- Proposed solution
- Alternative solutions considered
- Any breaking changes
-
Fork the repository
-
Create a branch from
main:git checkout -b feature/your-feature-name
-
Make your changes:
- Follow existing code style
- Add comments for complex logic
- Update documentation if needed
-
Test your changes:
# Test the action locally using act act pull_request -s GEMINI_SERVICE_ACCOUNT_KEY="$(cat key.json | base64)"
-
Commit with clear messages:
git commit -m "feat: add support for custom report templates" -
Push and create PR:
git push origin feature/your-feature-name
-
Fill out PR template with:
- Description of changes
- Related issues
- Testing performed
- Screenshots (if UI changes)
- Git
- Bash
- act for local testing
- Google Cloud service account for testing
# Clone your fork
git clone https://github.com/YOUR_USERNAME/usable-pr-validator.git
cd usable-pr-validator
# Create a test PR in a repo
# Add secrets to test environment
export GEMINI_SERVICE_ACCOUNT_KEY="$(cat path/to/key.json | base64)"
# Run action locally
act pull_request- Use
set -euo pipefailat the top - Quote variables:
"$VAR" - Use functions for reusable logic
- Add comments for complex operations
- Use meaningful variable names
- Use descriptive step names
- Add comments for complex workflows
- Keep indentation consistent (2 spaces)
- Group related steps with
::group::
- Use clear, concise language
- Include code examples
- Update README for new features
- Update CHANGELOG following Keep a Changelog
Follow Conventional Commits:
type(scope): description
[optional body]
[optional footer]
Types:
feat: New featurefix: Bug fixdocs: Documentation changesstyle: Code style changes (formatting)refactor: Code refactoringtest: Adding testschore: Maintenance tasks
Examples:
feat(mcp): add support for multiple MCP servers
fix(validation): handle empty PR descriptions correctly
docs(readme): add troubleshooting section
Releases are automated using release-please:
-
Commit with conventional commits to
mainbranchfeat:triggers minor version bump (0.1.0 → 0.2.0)fix:triggers patch version bump (0.1.0 → 0.1.1)feat!:orBREAKING CHANGE:triggers major version bump (0.x.x → 1.0.0)
-
Release-please creates/updates a release PR
- Automatically generates CHANGELOG.md
- Updates version references
- Groups commits by type
- PR is created automatically after commits are pushed to main
-
Merge the release PR
- Creates a GitHub release with tag (e.g.,
v0.1.0) - GitHub Marketplace automatically detects the tag and updates
- Tag follows format:
v0.1.0
- Creates a GitHub release with tag (e.g.,
The action must be published to GitHub Marketplace initially:
- Go to repository → Releases
- Click "Draft a new release"
- Create tag
v0.1.0targetingmainbranch - Check "Publish this Action to the GitHub Marketplace"
- Fill in required marketplace details
- Publish release
After initial setup, all future releases via release-please automatically update the marketplace listing.
If needed, maintainers can manually:
- Review the auto-generated release PR
- Edit CHANGELOG.md if needed
- Merge the release PR
- GitHub Actions handles the rest
- Major (x.0.0): Breaking changes, requires user action
- Minor (1.x.0): New features, backward compatible
- Patch (1.0.x): Bug fixes, backward compatible
- 💬 Discussions
- 🐛 Issues
By contributing, you agree that your contributions will be licensed under the MIT License.